From 441e791c021e5052cba010c48f8298be4e0339df Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Mon, 21 Nov 2022 14:16:19 +0100 Subject: [PATCH 001/107] Add php script to create docker image --- .idea/libraries/Dart_Packages.xml | 340 +++++++++++++++--------------- .idea/libraries/Dart_SDK.xml | 38 ++-- Sources/php_script/config.php | 14 ++ Sources/php_script/db.php | 10 + Sources/php_script/distance.php | 61 ++++++ Sources/php_script/insert.php | 20 ++ 6 files changed, 294 insertions(+), 189 deletions(-) create mode 100644 Sources/php_script/config.php create mode 100644 Sources/php_script/db.php create mode 100644 Sources/php_script/distance.php create mode 100644 Sources/php_script/insert.php diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index b25f471..f8237c9 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -5,686 +5,686 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index b6e6985..cb79f3d 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Sources/php_script/config.php b/Sources/php_script/config.php new file mode 100644 index 0000000..63484ca --- /dev/null +++ b/Sources/php_script/config.php @@ -0,0 +1,14 @@ +getMessage(); + echo $error; +} diff --git a/Sources/php_script/distance.php b/Sources/php_script/distance.php new file mode 100644 index 0000000..a2155b0 --- /dev/null +++ b/Sources/php_script/distance.php @@ -0,0 +1,61 @@ +prepare($query); +$stm->execute(); +$row = $stm->fetchAll(PDO::FETCH_ASSOC); +$lat1=0; +$lng1=0; +$listUser=[]; +Foreach ($row as $col) { + if (strcmp($col['id'], $id) == 0) { + $lat1 = $col['latitude']; + $lng1 = $col['longitude']; + } +} +if ($lat1==0 && $lng1==0){ + print(json_encode("ERROR No user found in the database")); + exit(1); +} + +Foreach ($row as $col) { + if (strcmp($col['id'],$id)!=0) { + $lat2 = $col['latitude']; + $lng2 = $col['longitude']; + $userID = $col['id']; + $idMusic = $col['idMusic']; + $dist = (new distance)->meters($lat1, $lng1, $lat2, $lng2); + if ($dist <= 100) { + $listUser[] = ['user' => $userID, 'music' => $idMusic]; } + } +} + +print(json_encode($listUser)); + + diff --git a/Sources/php_script/insert.php b/Sources/php_script/insert.php new file mode 100644 index 0000000..dfae9ca --- /dev/null +++ b/Sources/php_script/insert.php @@ -0,0 +1,20 @@ +10;"; +$results = mysqli_query($connect, $query); +*/ +$query = "DELETE FROM gps WHERE id='$id';"; +$results = mysqli_query($connect, $query); + +$query = "INSERT INTO gps (id,latitude,longitude,idMusic,dateLog) VALUES('$id','$latitude','$longitude','$idMusic',CURRENT_TIMESTAMP);"; +$results = mysqli_query($connect, $query); + From 0a0ce5264d4f659d74280c0c40f83289c4673861 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Mon, 21 Nov 2022 16:50:22 +0100 Subject: [PATCH 002/107] Create PHP Dockerfile and modify .drone.yml --- .drone.yml | 13 +++++++++++++ Sources/php_script/Dockerfile | 7 +++++++ 2 files changed, 20 insertions(+) create mode 100644 Sources/php_script/Dockerfile diff --git a/.drone.yml b/.drone.yml index bc3505d..2cff13a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -52,3 +52,16 @@ steps: COMMAND: create OVERWRITE: true depends_on: [ web-server ] + +# docker image build +- name: docker-build-and-push + image: plugins/docker + settings: + dockerfile: Sources/php_script/Dockerfile + context: Sources/php_script + registry: hub.codefirst.iut.uca.fr + repo: hub.codefirst.iut.uca.fr/dorian.hodin/dafl_music + username: + from_secret: secret-registry-username + password: + from_secret: secret-registry-password diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile new file mode 100644 index 0000000..cd9e682 --- /dev/null +++ b/Sources/php_script/Dockerfile @@ -0,0 +1,7 @@ +FROM php:8.1-cli +COPY . Sources/php_script +WORKDIR Sources/php_script +CMD [ "php", "./distance.php" ] +CMD [ "php", "./db.php" ] +CMD [ "php", "./config.php" ] +CMD [ "php", "./insert.php" ] \ No newline at end of file From c6a6b273bb6fb4d707b90597680942f69753291f Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Mon, 21 Nov 2022 16:52:36 +0100 Subject: [PATCH 003/107] Create a script directory --- Sources/php_script/Dockerfile | 2 +- Sources/php_script/{ => script}/config.php | 0 Sources/php_script/{ => script}/db.php | 0 Sources/php_script/{ => script}/distance.php | 0 Sources/php_script/{ => script}/insert.php | 0 5 files changed, 1 insertion(+), 1 deletion(-) rename Sources/php_script/{ => script}/config.php (100%) rename Sources/php_script/{ => script}/db.php (100%) rename Sources/php_script/{ => script}/distance.php (100%) rename Sources/php_script/{ => script}/insert.php (100%) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index cd9e682..c331944 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,5 +1,5 @@ FROM php:8.1-cli -COPY . Sources/php_script +COPY . ./script WORKDIR Sources/php_script CMD [ "php", "./distance.php" ] CMD [ "php", "./db.php" ] diff --git a/Sources/php_script/config.php b/Sources/php_script/script/config.php similarity index 100% rename from Sources/php_script/config.php rename to Sources/php_script/script/config.php diff --git a/Sources/php_script/db.php b/Sources/php_script/script/db.php similarity index 100% rename from Sources/php_script/db.php rename to Sources/php_script/script/db.php diff --git a/Sources/php_script/distance.php b/Sources/php_script/script/distance.php similarity index 100% rename from Sources/php_script/distance.php rename to Sources/php_script/script/distance.php diff --git a/Sources/php_script/insert.php b/Sources/php_script/script/insert.php similarity index 100% rename from Sources/php_script/insert.php rename to Sources/php_script/script/insert.php From f1f6f47ce94024057732aaf73fb1259fe66052e0 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Mon, 21 Nov 2022 16:56:43 +0100 Subject: [PATCH 004/107] Modification of .drone.yaml --- .drone.yml | 2 +- Sources/php_script/Dockerfile | 5 ----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/.drone.yml b/.drone.yml index 2cff13a..7e357b3 100644 --- a/.drone.yml +++ b/.drone.yml @@ -54,7 +54,7 @@ steps: depends_on: [ web-server ] # docker image build -- name: docker-build-and-push +- name: php_script image: plugins/docker settings: dockerfile: Sources/php_script/Dockerfile diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index c331944..d15fba3 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,7 +1,2 @@ FROM php:8.1-cli COPY . ./script -WORKDIR Sources/php_script -CMD [ "php", "./distance.php" ] -CMD [ "php", "./db.php" ] -CMD [ "php", "./config.php" ] -CMD [ "php", "./insert.php" ] \ No newline at end of file From c1df63b940a3897198d1e2ed4ccb82de4d08cc1f Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Mon, 21 Nov 2022 17:03:45 +0100 Subject: [PATCH 005/107] Modification of .drone.yaml --- .drone.yml | 4 ++-- Sources/php_script/Dockerfile | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index 7e357b3..9475d9a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -57,8 +57,8 @@ steps: - name: php_script image: plugins/docker settings: - dockerfile: Sources/php_script/Dockerfile - context: Sources/php_script + dockerfile: ./Sources/php_script/Dockerfile + context: Sources/php_script/ registry: hub.codefirst.iut.uca.fr repo: hub.codefirst.iut.uca.fr/dorian.hodin/dafl_music username: diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index d15fba3..bbc4e06 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,2 +1,7 @@ FROM php:8.1-cli COPY . ./script +WORKDIR ./script +CMD [ "php", "./distance.php" ] +CMD [ "php", "./db.php" ] +CMD [ "php", "./config.php" ] +CMD [ "php", "./insert.php" ] \ No newline at end of file From f91d232a2f674a6c08611ef3dd8b89d895f44a68 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Mon, 21 Nov 2022 17:19:43 +0100 Subject: [PATCH 006/107] .drone.yml update --- .drone.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index 9475d9a..b320396 100644 --- a/.drone.yml +++ b/.drone.yml @@ -62,6 +62,6 @@ steps: registry: hub.codefirst.iut.uca.fr repo: hub.codefirst.iut.uca.fr/dorian.hodin/dafl_music username: - from_secret: secret-registry-username + from_secret: SECRET_USERNAME password: - from_secret: secret-registry-password + from_secret: SECRET_PASSWD From 495a3e6e611382e5645d3cf4cb8b72604ecedc84 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Mon, 21 Nov 2022 17:23:24 +0100 Subject: [PATCH 007/107] .drone.yml update --- .drone.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.drone.yml b/.drone.yml index b320396..27db441 100644 --- a/.drone.yml +++ b/.drone.yml @@ -65,3 +65,13 @@ steps: from_secret: SECRET_USERNAME password: from_secret: SECRET_PASSWD + +# container deployment +- name: deploy-php + image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest + environment: + IMAGENAME: hub.codefirst.iut.uca.fr/dorian.hodin/dafl_music:latest + CONTAINERNAME: php_script + COMMAND: create + OVERWRITE: true + depends_on: [php_script] \ No newline at end of file From d93fd26b76eae0d7a2058dab0c010a9c67e4216d Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 13:42:36 +0100 Subject: [PATCH 008/107] .drone.yml update and index.html --- .drone.yml | 2 +- Sources/php_script/script/index.html | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 Sources/php_script/script/index.html diff --git a/.drone.yml b/.drone.yml index 27db441..7c91da7 100644 --- a/.drone.yml +++ b/.drone.yml @@ -74,4 +74,4 @@ steps: CONTAINERNAME: php_script COMMAND: create OVERWRITE: true - depends_on: [php_script] \ No newline at end of file + depends_on: [ php_script ] \ No newline at end of file diff --git a/Sources/php_script/script/index.html b/Sources/php_script/script/index.html new file mode 100644 index 0000000..7e44755 --- /dev/null +++ b/Sources/php_script/script/index.html @@ -0,0 +1 @@ +

Hello DaflDev

\ No newline at end of file From 9543d01de22c00f549fe4ac6a22ab2adf13c5350 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 13:47:23 +0100 Subject: [PATCH 009/107] .drone.yml update --- Sources/php_script/Dockerfile | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index bbc4e06..a50d5c6 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,7 +1,4 @@ FROM php:8.1-cli COPY . ./script WORKDIR ./script -CMD [ "php", "./distance.php" ] -CMD [ "php", "./db.php" ] -CMD [ "php", "./config.php" ] -CMD [ "php", "./insert.php" ] \ No newline at end of file +CMD [ "php", "./index.html" ] \ No newline at end of file From e2573d258cc0f788e0b5c8cde94801ee4f731e96 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 13:51:34 +0100 Subject: [PATCH 010/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index a50d5c6..4e5ef6a 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,4 +1,4 @@ FROM php:8.1-cli COPY . ./script WORKDIR ./script -CMD [ "php", "./index.html" ] \ No newline at end of file +CMD [ "php", "./distance.php" ] \ No newline at end of file From 8a1e5ed121a3eb439eeba228de9a66cf23f4dd85 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 13:58:13 +0100 Subject: [PATCH 011/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 4e5ef6a..61b63d1 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,4 +1,4 @@ FROM php:8.1-cli COPY . ./script WORKDIR ./script -CMD [ "php", "./distance.php" ] \ No newline at end of file +CMD [ "php", "./script/distance.php" ] \ No newline at end of file From c7fc4d4fd6de1b19e5ca0462063f99a4dd2edce8 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 14:09:05 +0100 Subject: [PATCH 012/107] Dockerfile update --- Sources/php_script/Dockerfile | 6 +++--- Sources/php_script/script/index.html | 1 - Sources/php_script/script/index.php | 5 +++++ 3 files changed, 8 insertions(+), 4 deletions(-) delete mode 100644 Sources/php_script/script/index.html create mode 100644 Sources/php_script/script/index.php diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 61b63d1..420557a 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,4 +1,4 @@ FROM php:8.1-cli -COPY . ./script -WORKDIR ./script -CMD [ "php", "./script/distance.php" ] \ No newline at end of file +COPY . ./script/ +WORKDIR ./script/ +CMD ./script/index.php \ No newline at end of file diff --git a/Sources/php_script/script/index.html b/Sources/php_script/script/index.html deleted file mode 100644 index 7e44755..0000000 --- a/Sources/php_script/script/index.html +++ /dev/null @@ -1 +0,0 @@ -

Hello DaflDev

\ No newline at end of file diff --git a/Sources/php_script/script/index.php b/Sources/php_script/script/index.php new file mode 100644 index 0000000..c06e1d3 --- /dev/null +++ b/Sources/php_script/script/index.php @@ -0,0 +1,5 @@ +Hello Dafldev + +?> From b5972dfffdf7e9c5ced127c85d826a19bce03b56 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 14:10:25 +0100 Subject: [PATCH 013/107] Dockerfile update --- Sources/php_script/Dockerfile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 420557a..6541a48 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,4 +1,2 @@ FROM php:8.1-cli -COPY . ./script/ -WORKDIR ./script/ -CMD ./script/index.php \ No newline at end of file +COPY . ./script/ \ No newline at end of file From 4b7f2df2fae86c36f47da1b061c2d15b6ed85503 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 14:12:16 +0100 Subject: [PATCH 014/107] Dockerfile update --- Sources/php_script/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 6541a48..e6a0238 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,2 +1,3 @@ FROM php:8.1-cli -COPY . ./script/ \ No newline at end of file +COPY . ./script/ +WORKDIR ./script/ \ No newline at end of file From fd2d0019614555b0d60ba532963794f499fb4e3e Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 14:21:51 +0100 Subject: [PATCH 015/107] Merge tmp from master to actual branch + location.dart --- Sources/dafl_project_flutter/lib/position/location.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/dafl_project_flutter/lib/position/location.dart b/Sources/dafl_project_flutter/lib/position/location.dart index 1978152..0171c7f 100644 --- a/Sources/dafl_project_flutter/lib/position/location.dart +++ b/Sources/dafl_project_flutter/lib/position/location.dart @@ -31,7 +31,7 @@ class Location { static Future> getData() async { Map spot = {}; String actualUser = MyApp.controller.currentUser.usernameDafl; - Uri uri = Uri.parse("http://89.83.53.34/phpmyadmin/dafldev/distance.php"); + Uri uri = Uri.parse("codefirst.iut.uca.fr/dorian.hodin/dafl_music:latest/distance.php"); http.Response response = await http.post(uri, body: { "id": actualUser, }); From a79eba1c6fdbe8ccce55eef1ed0d8759a3744f10 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 14:25:20 +0100 Subject: [PATCH 016/107] Dockerfile update --- Sources/php_script/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index e6a0238..f9ac454 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,3 +1,4 @@ FROM php:8.1-cli COPY . ./script/ -WORKDIR ./script/ \ No newline at end of file +WORKDIR ./script/ +CMD ./script/distance.php \ No newline at end of file From 72f851d5fb30b53591f0ef4a3ae7ddab0a85e7db Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 14:30:36 +0100 Subject: [PATCH 017/107] Dockerfile update --- Sources/dafl_project_flutter/lib/position/location.dart | 2 +- Sources/php_script/Dockerfile | 2 -- Sources/php_script/script/index.php | 5 ----- 3 files changed, 1 insertion(+), 8 deletions(-) delete mode 100644 Sources/php_script/script/index.php diff --git a/Sources/dafl_project_flutter/lib/position/location.dart b/Sources/dafl_project_flutter/lib/position/location.dart index 0171c7f..2c49370 100644 --- a/Sources/dafl_project_flutter/lib/position/location.dart +++ b/Sources/dafl_project_flutter/lib/position/location.dart @@ -31,7 +31,7 @@ class Location { static Future> getData() async { Map spot = {}; String actualUser = MyApp.controller.currentUser.usernameDafl; - Uri uri = Uri.parse("codefirst.iut.uca.fr/dorian.hodin/dafl_music:latest/distance.php"); + Uri uri = Uri.parse("https://codefirst.iut.uca.fr/dorian.hodin/dafl_music:latest"); http.Response response = await http.post(uri, body: { "id": actualUser, }); diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index f9ac454..28adde7 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,4 +1,2 @@ FROM php:8.1-cli -COPY . ./script/ -WORKDIR ./script/ CMD ./script/distance.php \ No newline at end of file diff --git a/Sources/php_script/script/index.php b/Sources/php_script/script/index.php deleted file mode 100644 index c06e1d3..0000000 --- a/Sources/php_script/script/index.php +++ /dev/null @@ -1,5 +0,0 @@ -Hello Dafldev - -?> From 87a533bd6d7f9fb8d513304feee63ca5b2416b64 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 14:45:43 +0100 Subject: [PATCH 018/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 28adde7..335e55e 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,2 +1,2 @@ FROM php:8.1-cli -CMD ./script/distance.php \ No newline at end of file +COPY ./script /usr/local/apache2/htdocs/ \ No newline at end of file From bb91edeffebdda5d2afb12b67402ea47d6643b9a Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 14:47:09 +0100 Subject: [PATCH 019/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 335e55e..4c7b284 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,2 +1,2 @@ -FROM php:8.1-cli +FROM php:7.4-cli COPY ./script /usr/local/apache2/htdocs/ \ No newline at end of file From 5cbfc6c56f8a1d7f6955f4f73a22d8d3323a182a Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 14:47:50 +0100 Subject: [PATCH 020/107] Dockerfile update --- Sources/php_script/script/index.html | 1 + 1 file changed, 1 insertion(+) create mode 100644 Sources/php_script/script/index.html diff --git a/Sources/php_script/script/index.html b/Sources/php_script/script/index.html new file mode 100644 index 0000000..7e44755 --- /dev/null +++ b/Sources/php_script/script/index.html @@ -0,0 +1 @@ +

Hello DaflDev

\ No newline at end of file From 701827ed99a19ed2b165ae83b62d036af26d01b7 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 14:53:39 +0100 Subject: [PATCH 021/107] Dockerfile update --- Sources/php_script/Dockerfile | 5 +++-- Sources/php_script/script/index.html | 1 - Sources/php_script/script/index.php | 5 +++++ 3 files changed, 8 insertions(+), 3 deletions(-) delete mode 100644 Sources/php_script/script/index.html create mode 100644 Sources/php_script/script/index.php diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 4c7b284..6542412 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,2 +1,3 @@ -FROM php:7.4-cli -COPY ./script /usr/local/apache2/htdocs/ \ No newline at end of file +FROM devilbox/php-fpm-8.1:latest +COPY ./script /usr/local/apache2/htdocs/ +CMD ./script/index.php \ No newline at end of file diff --git a/Sources/php_script/script/index.html b/Sources/php_script/script/index.html deleted file mode 100644 index 7e44755..0000000 --- a/Sources/php_script/script/index.html +++ /dev/null @@ -1 +0,0 @@ -

Hello DaflDev

\ No newline at end of file diff --git a/Sources/php_script/script/index.php b/Sources/php_script/script/index.php new file mode 100644 index 0000000..e9dd2d6 --- /dev/null +++ b/Sources/php_script/script/index.php @@ -0,0 +1,5 @@ +Hello DaflDev + +?> \ No newline at end of file From 112f2ac89f50a379fd16e3256f17787a91f470ac Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 15:16:08 +0100 Subject: [PATCH 022/107] Dockerfile update --- Sources/dafl_project_flutter/lib/position/location.dart | 2 +- Sources/php_script/Dockerfile | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/Sources/dafl_project_flutter/lib/position/location.dart b/Sources/dafl_project_flutter/lib/position/location.dart index 2c49370..1978152 100644 --- a/Sources/dafl_project_flutter/lib/position/location.dart +++ b/Sources/dafl_project_flutter/lib/position/location.dart @@ -31,7 +31,7 @@ class Location { static Future> getData() async { Map spot = {}; String actualUser = MyApp.controller.currentUser.usernameDafl; - Uri uri = Uri.parse("https://codefirst.iut.uca.fr/dorian.hodin/dafl_music:latest"); + Uri uri = Uri.parse("http://89.83.53.34/phpmyadmin/dafldev/distance.php"); http.Response response = await http.post(uri, body: { "id": actualUser, }); diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 6542412..ae83616 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,3 +1,2 @@ FROM devilbox/php-fpm-8.1:latest -COPY ./script /usr/local/apache2/htdocs/ -CMD ./script/index.php \ No newline at end of file +COPY ./script /var/www/default/htdocs/ \ No newline at end of file From cf2fc91bf940a25ded460c0d39429fee913d26bc Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 15:25:04 +0100 Subject: [PATCH 023/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index ae83616..e0e0957 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,2 +1,2 @@ FROM devilbox/php-fpm-8.1:latest -COPY ./script /var/www/default/htdocs/ \ No newline at end of file +COPY ./script /var/www/default/ \ No newline at end of file From c64f7b6dffa25ccf84066fcd709bb77cff5ced9b Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 15:33:17 +0100 Subject: [PATCH 024/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index e0e0957..7a4aa67 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,2 +1,2 @@ FROM devilbox/php-fpm-8.1:latest -COPY ./script /var/www/default/ \ No newline at end of file +COPY ./script /var/www/html \ No newline at end of file From 77a2a400d16b90473e4088e647e415dbedaafefe Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 15:42:13 +0100 Subject: [PATCH 025/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 7a4aa67..72e3998 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,2 +1,2 @@ -FROM devilbox/php-fpm-8.1:latest +FROM php:8.1-apache COPY ./script /var/www/html \ No newline at end of file From 5e9c38c7e7bf85181b22ff528b35244b88068bd4 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Tue, 22 Nov 2022 15:53:57 +0100 Subject: [PATCH 026/107] Dockerfile update --- Sources/php_script/script/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/script/index.php b/Sources/php_script/script/index.php index e9dd2d6..d0e4d34 100644 --- a/Sources/php_script/script/index.php +++ b/Sources/php_script/script/index.php @@ -1,5 +1,5 @@ Hello DaflDev +echo "

Hello DaflDev

" ?> \ No newline at end of file From c164e647af51aa80d3a9a6ebeee62417aa8e6e49 Mon Sep 17 00:00:00 2001 From: "dorian.hodin" Date: Tue, 22 Nov 2022 18:20:56 +0100 Subject: [PATCH 027/107] Dockerfile last update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 72e3998..4d745e9 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,2 +1,2 @@ FROM php:8.1-apache -COPY ./script /var/www/html \ No newline at end of file +COPY ./script /var/www/html From 1c40e123a41bc5e36c5be1ee415c99caff8b5675 Mon Sep 17 00:00:00 2001 From: "dorian.hodin" Date: Tue, 22 Nov 2022 18:26:56 +0100 Subject: [PATCH 028/107] Dockerfile last update --- .idea/dafl_music.iml | 13 + .idea/libraries/Dart_Packages.xml | 692 ------------------------------ .idea/misc.xml | 6 + .idea/modules.xml | 2 +- Sources/php_script/Dockerfile | 1 + 5 files changed, 21 insertions(+), 693 deletions(-) create mode 100644 .idea/dafl_music.iml delete mode 100644 .idea/libraries/Dart_Packages.xml create mode 100644 .idea/misc.xml diff --git a/.idea/dafl_music.iml b/.idea/dafl_music.iml new file mode 100644 index 0000000..9f5b22b --- /dev/null +++ b/.idea/dafl_music.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml deleted file mode 100644 index f8237c9..0000000 --- a/.idea/libraries/Dart_Packages.xml +++ /dev/null @@ -1,692 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..639900d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index 85c8ded..c753441 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 4d745e9..f9e352b 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,2 +1,3 @@ FROM php:8.1-apache +RUN apt-get install -y php-mysqli COPY ./script /var/www/html From e2594328164c452ef1b302845b0901476c41d09b Mon Sep 17 00:00:00 2001 From: "dorian.hodin" Date: Tue, 22 Nov 2022 18:28:14 +0100 Subject: [PATCH 029/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index f9e352b..91717d5 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,3 +1,3 @@ FROM php:8.1-apache -RUN apt-get install -y php-mysqli +RUN apt-get update && apt-get install -y php-mysqli COPY ./script /var/www/html From 511dd554d7df112067ffad10c97f46306317d27a Mon Sep 17 00:00:00 2001 From: "dorian.hodin" Date: Tue, 22 Nov 2022 18:32:42 +0100 Subject: [PATCH 030/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 91717d5..313cb65 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,3 +1,3 @@ FROM php:8.1-apache -RUN apt-get update && apt-get install -y php-mysqli +RUN apt-get update && apt-get install -y php7.4-mysql 7.4.33-1+deb11u1 && apt-get install -y php-mysqli COPY ./script /var/www/html From 8dc053168480de8546fae124c68b0a410dbaa1af Mon Sep 17 00:00:00 2001 From: "dorian.hodin" Date: Tue, 22 Nov 2022 18:33:54 +0100 Subject: [PATCH 031/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 313cb65..16b8a2d 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,3 +1,3 @@ FROM php:8.1-apache -RUN apt-get update && apt-get install -y php7.4-mysql 7.4.33-1+deb11u1 && apt-get install -y php-mysqli +RUN apt-get update && apt-get install -y php8.1-mysql && apt-get install -y php-mysqli COPY ./script /var/www/html From 9cfd08ca4a94fc9dafdf28bb4082a6d35856ae9c Mon Sep 17 00:00:00 2001 From: "dorian.hodin" Date: Tue, 22 Nov 2022 18:38:39 +0100 Subject: [PATCH 032/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 16b8a2d..5c5e5f2 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,3 +1,3 @@ FROM php:8.1-apache -RUN apt-get update && apt-get install -y php8.1-mysql && apt-get install -y php-mysqli +RUN apt-get update && apt-get install -y php8.1-mysql COPY ./script /var/www/html From 5bf2d7fae2ca28272552f8950648fbea6befd950 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 08:46:29 +0100 Subject: [PATCH 033/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 16b8a2d..5c5e5f2 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,3 +1,3 @@ FROM php:8.1-apache -RUN apt-get update && apt-get install -y php8.1-mysql && apt-get install -y php-mysqli +RUN apt-get update && apt-get install -y php8.1-mysql COPY ./script /var/www/html From 3b6e1a75dbc058b5e91616c602514782b2909565 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 08:49:09 +0100 Subject: [PATCH 034/107] Dockerfile update --- Sources/php_script/Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 5c5e5f2..aa601a1 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,3 +1,4 @@ FROM php:8.1-apache -RUN apt-get update && apt-get install -y php8.1-mysql +RUN apt-get update && apt-get upgrade -y +RUN docker-php-ext-install mysqli COPY ./script /var/www/html From 3a0c62040e181a1ad0d4deed9d8117b3968534e9 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 10:01:50 +0100 Subject: [PATCH 035/107] Location.dart update with the new Docker Server --- .idea/libraries/Dart_Packages.xml | 692 ++++++++++++++++++ .../lib/position/location.dart | 4 +- Sources/php_script/script/index.php | 2 +- 3 files changed, 695 insertions(+), 3 deletions(-) create mode 100644 .idea/libraries/Dart_Packages.xml diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml new file mode 100644 index 0000000..f8237c9 --- /dev/null +++ b/.idea/libraries/Dart_Packages.xml @@ -0,0 +1,692 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Sources/dafl_project_flutter/lib/position/location.dart b/Sources/dafl_project_flutter/lib/position/location.dart index 1978152..daced88 100644 --- a/Sources/dafl_project_flutter/lib/position/location.dart +++ b/Sources/dafl_project_flutter/lib/position/location.dart @@ -6,7 +6,7 @@ import '../main.dart'; class Location { static Future> sendCurrentLocation() async { - Uri uri = Uri.parse("http://89.83.53.34/phpmyadmin/dafldev/insert.php"); + Uri uri = Uri.parse("https://codefirst.iut.uca.fr/containers/php_script-dorianhodin/insert.php"); LocationPermission permission; permission = await Geolocator.checkPermission(); if (permission == LocationPermission.denied) { @@ -31,7 +31,7 @@ class Location { static Future> getData() async { Map spot = {}; String actualUser = MyApp.controller.currentUser.usernameDafl; - Uri uri = Uri.parse("http://89.83.53.34/phpmyadmin/dafldev/distance.php"); + Uri uri = Uri.parse("https://codefirst.iut.uca.fr/containers/php_script-dorianhodin/distance.php"); http.Response response = await http.post(uri, body: { "id": actualUser, }); diff --git a/Sources/php_script/script/index.php b/Sources/php_script/script/index.php index d0e4d34..53b1ece 100644 --- a/Sources/php_script/script/index.php +++ b/Sources/php_script/script/index.php @@ -1,5 +1,5 @@ Hello DaflDev" +echo "Hello world Dafl for PHP" ?> \ No newline at end of file From 1744754dd4bde7c2207b8fccd1be7ba99b76efc5 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 13:47:32 +0100 Subject: [PATCH 036/107] Hide password and host to the database by updating .drone.yaml --- .drone.yml | 19 +++++++++++++- .idea/dafl_music.iml | 9 ++++++- .idea/php.xml | 6 +++++ Sources/php_script/script/config.php | 8 +++--- Sources/php_script/script/db.php | 6 ++--- Sources/php_script/script/distance.php | 34 ++++++++++++-------------- Sources/php_script/script/index.php | 5 ---- 7 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 .idea/php.xml delete mode 100644 Sources/php_script/script/index.php diff --git a/.drone.yml b/.drone.yml index 7c91da7..4d161c3 100644 --- a/.drone.yml +++ b/.drone.yml @@ -74,4 +74,21 @@ steps: CONTAINERNAME: php_script COMMAND: create OVERWRITE: true - depends_on: [ php_script ] \ No newline at end of file + depends_on: [ php_script ] + +#database container +- name: deploy-php-database + image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest + environment: + IMAGENAME: innodb + CONTAINERNAME: location_php_database + COMMAND: create + PRIVATE: true + CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST: + from_secret: db_host + CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE: + from_secret: db_database + CODEFIRST_CLIENTDRONE_ENV_INNODB_USER: + from_secret: db_user + CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: + from_secret: db_password \ No newline at end of file diff --git a/.idea/dafl_music.iml b/.idea/dafl_music.iml index 9f5b22b..7d01c35 100644 --- a/.idea/dafl_music.iml +++ b/.idea/dafl_music.iml @@ -1,5 +1,10 @@ + + + + + @@ -7,7 +12,9 @@ - + + + \ No newline at end of file diff --git a/.idea/php.xml b/.idea/php.xml new file mode 100644 index 0000000..97a38d7 --- /dev/null +++ b/.idea/php.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 63484ca..68a9e2b 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,8 +1,8 @@ meters($lat1, $lng1, $lat2, $lng2); + $dist = meters($lat1, $lng1, $lat2, $lng2); if ($dist <= 100) { $listUser[] = ['user' => $userID, 'music' => $idMusic]; } } diff --git a/Sources/php_script/script/index.php b/Sources/php_script/script/index.php deleted file mode 100644 index 53b1ece..0000000 --- a/Sources/php_script/script/index.php +++ /dev/null @@ -1,5 +0,0 @@ - \ No newline at end of file From d47058c023d7efecf2767b7c2d4e04c5c9cc78bc Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 13:50:13 +0100 Subject: [PATCH 037/107] .drone.yaml update --- .drone.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index 4d161c3..c969bfb 100644 --- a/.drone.yml +++ b/.drone.yml @@ -81,7 +81,7 @@ steps: image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest environment: IMAGENAME: innodb - CONTAINERNAME: location_php_database + CONTAINERNAME: deploy-php COMMAND: create PRIVATE: true CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST: @@ -91,4 +91,5 @@ steps: CODEFIRST_CLIENTDRONE_ENV_INNODB_USER: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: - from_secret: db_password \ No newline at end of file + from_secret: db_password + depends_on : [ deploy-php ] \ No newline at end of file From 3dba7ab4c46484077513bf7d6d98ac466c5686a2 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 13:54:26 +0100 Subject: [PATCH 038/107] .drone.yaml update --- .drone.yml | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/.drone.yml b/.drone.yml index c969bfb..697d39d 100644 --- a/.drone.yml +++ b/.drone.yml @@ -73,23 +73,13 @@ steps: IMAGENAME: hub.codefirst.iut.uca.fr/dorian.hodin/dafl_music:latest CONTAINERNAME: php_script COMMAND: create - OVERWRITE: true - depends_on: [ php_script ] - -#database container -- name: deploy-php-database - image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest - environment: - IMAGENAME: innodb - CONTAINERNAME: deploy-php - COMMAND: create PRIVATE: true CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST: from_secret: db_host - CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE: - from_secret: db_database - CODEFIRST_CLIENTDRONE_ENV_INNODB_USER: - from_secret: db_user - CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: - from_secret: db_password - depends_on : [ deploy-php ] \ No newline at end of file + CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE: + from_secret: db_database + CODEFIRST_CLIENTDRONE_ENV_INNODB_USER: + from_secret: db_user + CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: + from_secret: db_password + depends_on: [ php_script ] From 2fac1230529585777002ebc0b0cd754b17f2ed2d Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 14:19:11 +0100 Subject: [PATCH 039/107] .drone.yaml update and getting the environement variables in the pho script --- .drone.yml | 12 ++++++------ Sources/php_script/script/config.php | 14 ++++---------- Sources/php_script/script/db.php | 6 +++--- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/.drone.yml b/.drone.yml index 697d39d..c5f05ea 100644 --- a/.drone.yml +++ b/.drone.yml @@ -76,10 +76,10 @@ steps: PRIVATE: true CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST: from_secret: db_host - CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE: - from_secret: db_database - CODEFIRST_CLIENTDRONE_ENV_INNODB_USER: - from_secret: db_user - CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: - from_secret: db_password + CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE: + from_secret: db_database + CODEFIRST_CLIENTDRONE_ENV_INNODB_USER: + from_secret: db_user + CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: + from_secret: db_password depends_on: [ php_script ] diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 68a9e2b..f7d853b 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,14 +1,8 @@ Date: Wed, 23 Nov 2022 15:44:59 +0100 Subject: [PATCH 040/107] .drone.yaml update and getting the environement variables in the pho script --- Sources/php_script/script/config.php | 2 +- Sources/php_script/script/db.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index f7d853b..3976c03 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,6 +1,6 @@ Date: Wed, 23 Nov 2022 16:25:10 +0100 Subject: [PATCH 041/107] .drone.yaml update --- .drone.yml | 4 ++++ Sources/php_script/script/db.php | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index c5f05ea..064a0f8 100644 --- a/.drone.yml +++ b/.drone.yml @@ -82,4 +82,8 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password + - CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST = $$DAFL_HOST + - CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE = $$DAFL_DATABASE + - CODEFIRST_CLIENTDRONE_ENV_INNODB_USER = $$DAFL_USER + - CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS = $$DAFL_PASSWORD depends_on: [ php_script ] diff --git a/Sources/php_script/script/db.php b/Sources/php_script/script/db.php index c747177..70eecc0 100644 --- a/Sources/php_script/script/db.php +++ b/Sources/php_script/script/db.php @@ -1,7 +1,14 @@ $value) +{ + echo "$key => $value \n"; +} +echo "\n";echo "\n";echo "\n"; try{ $db = new PDO ($dns, $user, $password); }catch( PDOException $e){ From 889a6a4fb98b309f9523d324968639b9b6e63d61 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 16:25:41 +0100 Subject: [PATCH 042/107] .drone.yaml update --- .drone.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 064a0f8..058637c 100644 --- a/.drone.yml +++ b/.drone.yml @@ -82,8 +82,8 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password - - CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST = $$DAFL_HOST - - CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE = $$DAFL_DATABASE - - CODEFIRST_CLIENTDRONE_ENV_INNODB_USER = $$DAFL_USER - - CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS = $$DAFL_PASSWORD + CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST = $$DAFL_HOST + CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE = $$DAFL_DATABASE + CODEFIRST_CLIENTDRONE_ENV_INNODB_USER = $$DAFL_USER + CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS = $$DAFL_PASSWORD depends_on: [ php_script ] From 9a71ea7cdd638b6c45640942d81aceaa9811f887 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 16:31:32 +0100 Subject: [PATCH 043/107] .drone.yaml update --- .drone.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 058637c..07f8ab1 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,6 +1,10 @@ kind: pipeline type: docker name: DAFLPipeline +- CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST = $$DAFL_HOST +- CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE = $$DAFL_DATABASE +- CODEFIRST_CLIENTDRONE_ENV_INNODB_USER = $$DAFL_USER +- CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS = $$DAFL_PASSWORD trigger: event: @@ -82,8 +86,5 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password - CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST = $$DAFL_HOST - CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE = $$DAFL_DATABASE - CODEFIRST_CLIENTDRONE_ENV_INNODB_USER = $$DAFL_USER - CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS = $$DAFL_PASSWORD + depends_on: [ php_script ] From 980c9f380f9a8966fd90e5efa88206f0a437a7dd Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 16:37:50 +0100 Subject: [PATCH 044/107] .drone.yaml update --- .drone.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 07f8ab1..729599a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1,10 +1,7 @@ kind: pipeline type: docker name: DAFLPipeline -- CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST = $$DAFL_HOST -- CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE = $$DAFL_DATABASE -- CODEFIRST_CLIENTDRONE_ENV_INNODB_USER = $$DAFL_USER -- CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS = $$DAFL_PASSWORD + trigger: event: @@ -86,5 +83,10 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password + commands: + - export DAFL_HOST = CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST + - export DAFL_DATABASE = CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE + - export DAFL_USER = CODEFIRST_CLIENTDRONE_ENV_INNODB_USER + - export DAFL_PASSWORD = CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS depends_on: [ php_script ] From f8a34fcf1bff6add6d65d5c5a8bd4de276de6c72 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 16:39:57 +0100 Subject: [PATCH 045/107] .drone.yaml update --- .drone.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 729599a..01b176a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -84,9 +84,9 @@ steps: CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password commands: - - export DAFL_HOST = CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST - - export DAFL_DATABASE = CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE - - export DAFL_USER = CODEFIRST_CLIENTDRONE_ENV_INNODB_USER - - export DAFL_PASSWORD = CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS + - export DAFL_HOST = $CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST + - export DAFL_DATABASE = $CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE + - export DAFL_USER = $CODEFIRST_CLIENTDRONE_ENV_INNODB_USER + - export DAFL_PASSWORD = $CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS depends_on: [ php_script ] From 83d656a12efd4cc326501a278220691460d6afb9 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 16:46:24 +0100 Subject: [PATCH 046/107] .drone.yaml update --- .drone.yml | 12 ++++++------ Sources/php_script/script/db.php | 6 +----- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/.drone.yml b/.drone.yml index 01b176a..77f8716 100644 --- a/.drone.yml +++ b/.drone.yml @@ -75,7 +75,7 @@ steps: CONTAINERNAME: php_script COMMAND: create PRIVATE: true - CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST: + CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST: from_secret: db_host CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE: from_secret: db_database @@ -83,10 +83,10 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password - commands: - - export DAFL_HOST = $CODEFIRST_CLIENTDRONE_ENV_INNONDB_HOST - - export DAFL_DATABASE = $CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE - - export DAFL_USER = $CODEFIRST_CLIENTDRONE_ENV_INNODB_USER - - export DAFL_PASSWORD = $CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS + #commands: + # - export DAFL_HOST = $CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST + # - export DAFL_DATABASE = $CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE + # - export DAFL_USER = $CODEFIRST_CLIENTDRONE_ENV_INNODB_USER + # - export DAFL_PASSWORD = $CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS depends_on: [ php_script ] diff --git a/Sources/php_script/script/db.php b/Sources/php_script/script/db.php index 70eecc0..914136f 100644 --- a/Sources/php_script/script/db.php +++ b/Sources/php_script/script/db.php @@ -3,11 +3,7 @@ $dns = 'mysql:host='.getenv("CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST").';dbname='. $user = $_ENV["CODEFIRST_CLIENTDRONE_ENV_INNODB_USER"]; $password = $_ENV["CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD"]; echo "\n";echo "\n";echo "\n"; -$env_array =getenv(); -foreach ($env_array as $key=>$value) -{ - echo "$key => $value \n"; -} +echo $dns; echo "\n";echo "\n";echo "\n"; try{ $db = new PDO ($dns, $user, $password); From cee41d7abdbb2f6fdb96aa47ba122afd816663e3 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 17:29:05 +0100 Subject: [PATCH 047/107] Make the PHP Script better --- Sources/php_script/script/config.php | 13 +++++--- Sources/php_script/script/db.php | 9 ++---- Sources/php_script/script/distance.php | 4 +-- Sources/php_script/script/insert.php | 42 +++++++++++++++----------- 4 files changed, 37 insertions(+), 31 deletions(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 3976c03..21d19bb 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,8 +1,13 @@ prepare($query); +$stm = $connect->prepare($query); $stm->execute(); $row = $stm->fetchAll(PDO::FETCH_ASSOC); $lat1=0; diff --git a/Sources/php_script/script/insert.php b/Sources/php_script/script/insert.php index dfae9ca..3ae92f5 100644 --- a/Sources/php_script/script/insert.php +++ b/Sources/php_script/script/insert.php @@ -1,20 +1,26 @@ 10;"; -$results = mysqli_query($connect, $query); -*/ -$query = "DELETE FROM gps WHERE id='$id';"; -$results = mysqli_query($connect, $query); - -$query = "INSERT INTO gps (id,latitude,longitude,idMusic,dateLog) VALUES('$id','$latitude','$longitude','$idMusic',CURRENT_TIMESTAMP);"; -$results = mysqli_query($connect, $query); +$connect=""; //Else PHP send an error, "connect don't exist", but that work anyway, this is just to remove a fake error +$res=include "config.php"; //$res get the result of the calling of "config.php" +if ($res != 1){ //Check if config.php work + print (json_encode("Failed to connect to MySQL")); //Return a json string, so the dart script can interpret the error +} +if (!empty($_POST)) { //Check if the method POST return something + $id = mysqli_real_escape_string($connect, $_POST['id']); //Get the result of POST method + $latitude = mysqli_real_escape_string($connect, $_POST['latitude']); //Get the result of POST method + $longitude = mysqli_real_escape_string($connect, $_POST['longitude']); //Get the result of POST method + $idMusic = mysqli_real_escape_string($connect, $_POST['idMusic']); //Get the result of POST method + $latitude = doubleval($latitude); //Convert a string to a double + $longitude = doubleval($longitude); //Convert a string to a double + /* + $query = "DELETE FROM gps WHERE (SELECT TIMESTAMPDIFF(MINUTE,CURRENT_TIMESTAMP,dateLog))>10;"; + $results = mysqli_query($connect, $query); + */ + $query = "DELETE FROM gps WHERE id='$id';"; //Delete the actual line and replace this line with the next lines + $results = mysqli_query($connect, $query); //Execute the SQL command + $query = "INSERT INTO gps (id,latitude,longitude,idMusic,dateLog) + VALUES('$id','$latitude','$longitude','$idMusic',CURRENT_TIMESTAMP);"; //Insert into the database the new data and new information about this user + $results = mysqli_query($connect, $query); //Execute the SQL command +}else{ //If the method POST return nothing + print (json_encode("The POST method failed")); //Return a json string, so the dart script can interpret the error +} \ No newline at end of file From a869cd66c2e251706bdfcfc3b19ec4e01d8446f7 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 19:06:39 +0100 Subject: [PATCH 048/107] Make the PHP Script Better with error management --- Sources/php_script/script/config.php | 16 ++--- Sources/php_script/script/db.php | 10 --- Sources/php_script/script/distance.php | 90 +++++++++++++------------- Sources/php_script/script/insert.php | 2 +- 4 files changed, 55 insertions(+), 63 deletions(-) delete mode 100644 Sources/php_script/script/db.php diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 21d19bb..7ccd56a 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,13 +1,13 @@ getMessage(); - echo $error; -} diff --git a/Sources/php_script/script/distance.php b/Sources/php_script/script/distance.php index a97058f..03148aa 100644 --- a/Sources/php_script/script/distance.php +++ b/Sources/php_script/script/distance.php @@ -2,54 +2,56 @@ function meters($lat1, $lng1, $lat2, $lng2): float { - // Radius of the Earth in meters : - $earth_radius = 6378137; - // Calculation of the distance between 2 GPS coordinates: - $rlo1 = deg2rad($lng1); - $rla1 = deg2rad($lat1); - $rlo2 = deg2rad($lng2); - $rla2 = deg2rad($lat2); - $dlo = ($rlo2 - $rlo1) / 2; - $dla = ($rla2 - $rla1) / 2; - $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo)); - $d = 2 * atan2(sqrt($a), sqrt(1 - $a)); - // Return the distance in meters between 2 GPS points - return round($earth_radius * $d); + $earth_radius = 6378137; // Radius of the Earth in meters : + $rlo1 = deg2rad($lng1); //Transform the coordinate longitude1 from degree to radian + $rla1 = deg2rad($lat1); //Transform the coordinate latitude1 from degree to radian + $rlo2 = deg2rad($lng2); //Transform the coordinate longitude2 from degree to radian + $rla2 = deg2rad($lat2); //Transform the coordinate latitude2 from degree to radian + $dlo = ($rlo2 - $rlo1) / 2; //Stock in $dlo the result of the calcul : ($rlo2 - $rlo1) / 2 + $dla = ($rla2 - $rla1) / 2; //Stock in $dla the result of the calcul : ($rla2 - $rla1) / 2 + $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo)); //Do some operations to return the distance in meters + $d = 2 * atan2(sqrt($a), sqrt(1 - $a)); //Do some operations to return the distance in meters + return round($earth_radius * $d); // Return the distance in meters between 2 GPS points } - -$connect=""; -include "config.php"; -$id = $_POST['id']; -$query = 'SELECT * FROM gps'; -$stm = $connect->prepare($query); -$stm->execute(); -$row = $stm->fetchAll(PDO::FETCH_ASSOC); -$lat1=0; -$lng1=0; -$listUser=[]; -Foreach ($row as $col) { - if (strcmp($col['id'], $id) == 0) { - $lat1 = $col['latitude']; - $lng1 = $col['longitude']; - } -} -if ($lat1==0 && $lng1==0){ - print(json_encode("ERROR No user found in the database")); - exit(1); +$connect=""; //Else PHP send an error, "connect don't exist", but that work anyway, this is just to remove a fake error +$res=include "config.php"; //$res get the result of the calling of "config.php" +if ($res != 1){ //Check if config.php work + print (json_encode("Failed to connect to MySQL")); //Return a json string, so the dart script can interpret the error } - -Foreach ($row as $col) { - if (strcmp($col['id'],$id)!=0) { - $lat2 = $col['latitude']; - $lng2 = $col['longitude']; - $userID = $col['id']; - $idMusic = $col['idMusic']; - $dist = meters($lat1, $lng1, $lat2, $lng2); - if ($dist <= 100) { - $listUser[] = ['user' => $userID, 'music' => $idMusic]; } +if (!empty($_POST)) { + $id = $_POST['id']; //Get the result of the POST method in id + $query = 'SELECT * FROM gps'; //Browse all the database + $results = mysqli_query($connect, $query); //Execute the SQL command + $lat1 = 0; //Set $lat1 to test if the user exist + $lng1 = 0; //Set $lng1 to test if the user exist + $listUser = []; //Set the listUser to an empty list + while ($row = $results->fetch_row()){ //For all the row in the database + if (strcmp($row[0], $id) == 0) { //If the user is found in the database + $lat1 = $row[1]; //Set $lat1 to the latitude of the current user + $lng1 = $row[2]; //Set $lng1 to the longitude of the current user + } + } + if ($lat1 == 0 && $lng1 == 0) { //Check if the user get found in the database + print(json_encode("ERROR No user found in the database")); //Return a json string, so the dart script can interpret the error + exit(1); //Exit the actual script + } + $results = mysqli_query($connect, $query); //Execute again the SQL command to restart the fetch_row() + while ($row = $results->fetch_row()) { //For all the row in the database + if (strcmp($row[0], $id) != 0) { //If the row is not the row of the current user + $lat2 = $row[1]; //Set $lat2 to the latitude of the user who is in the actual row + $lng2 = $row[2]; //Set $lng2 to the latitude of the user who is in the actual row + $userID = $row[0]; //Set $userID to the username of the user who is in the actual row + $idMusic = $row[3]; //Set $idMusic to the id of the actual song of the user who is in the actual row + $dist = meters($lat1, $lng1, $lat2, $lng2); //With the function meters, calcul of the distance between the current user and the user who is in the actual row + if ($dist <= 100) { //If the user in the actual row is less than 100 meters away of the current user + $listUser[] = ['user' => $userID, 'music' => $idMusic]; //Add the username and the ID of the song that user who is in the actual row is listening + } + } } + print(json_encode($listUser)); //Return a json string of the list listUser +}else{ //If the method POST return nothing + print (json_encode("The POST didn't return any values")); //Return a json string, so the dart script can interpret the error } -print(json_encode($listUser)); diff --git a/Sources/php_script/script/insert.php b/Sources/php_script/script/insert.php index 3ae92f5..c272129 100644 --- a/Sources/php_script/script/insert.php +++ b/Sources/php_script/script/insert.php @@ -22,5 +22,5 @@ if (!empty($_POST)) { VALUES('$id','$latitude','$longitude','$idMusic',CURRENT_TIMESTAMP);"; //Insert into the database the new data and new information about this user $results = mysqli_query($connect, $query); //Execute the SQL command }else{ //If the method POST return nothing - print (json_encode("The POST method failed")); //Return a json string, so the dart script can interpret the error + print (json_encode("The POST didn't return any values")); //Return a json string, so the dart script can interpret the error } \ No newline at end of file From 8ddca5e75c97518f4477881f90657edf25a575d1 Mon Sep 17 00:00:00 2001 From: "dorian.hodin" Date: Wed, 23 Nov 2022 20:20:43 +0100 Subject: [PATCH 049/107] Location.dart update --- .idea/libraries/Dart_Packages.xml | 340 +++++++++--------- .idea/libraries/Dart_SDK.xml | 38 +- .../lib/position/location.dart | 3 + 3 files changed, 192 insertions(+), 189 deletions(-) diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index f8237c9..04e2ec7 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -5,686 +5,686 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index cb79f3d..3dbed52 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Sources/dafl_project_flutter/lib/position/location.dart b/Sources/dafl_project_flutter/lib/position/location.dart index daced88..e411cfc 100644 --- a/Sources/dafl_project_flutter/lib/position/location.dart +++ b/Sources/dafl_project_flutter/lib/position/location.dart @@ -1,3 +1,5 @@ +import 'dart:developer'; + import 'package:geolocator/geolocator.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; @@ -31,6 +33,7 @@ class Location { static Future> getData() async { Map spot = {}; String actualUser = MyApp.controller.currentUser.usernameDafl; + log(actualUser); Uri uri = Uri.parse("https://codefirst.iut.uca.fr/containers/php_script-dorianhodin/distance.php"); http.Response response = await http.post(uri, body: { "id": actualUser, From 323c1971b1dd5af4fa0bbdd937bbab5a4964f157 Mon Sep 17 00:00:00 2001 From: "dorian.hodin" Date: Wed, 23 Nov 2022 20:21:33 +0100 Subject: [PATCH 050/107] Location.dart update --- Sources/php_script/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index aa601a1..a011785 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -2,3 +2,4 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli COPY ./script /var/www/html + From f8b0872a2022dcb5d46a6286bfec0b6f95b1236d Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 20:26:06 +0100 Subject: [PATCH 051/107] .drone.yml update --- .drone.yml | 1 + .idea/libraries/Dart_Packages.xml | 340 +++++++++++++++--------------- .idea/libraries/Dart_SDK.xml | 38 ++-- 3 files changed, 190 insertions(+), 189 deletions(-) diff --git a/.drone.yml b/.drone.yml index 77f8716..b71b9ed 100644 --- a/.drone.yml +++ b/.drone.yml @@ -74,6 +74,7 @@ steps: IMAGENAME: hub.codefirst.iut.uca.fr/dorian.hodin/dafl_music:latest CONTAINERNAME: php_script COMMAND: create + OVERWRITE: true PRIVATE: true CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST: from_secret: db_host diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index 04e2ec7..f8237c9 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -5,686 +5,686 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index 3dbed52..cb79f3d 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + From b946fc460c0e99373a9f453740844ff30c83615f Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 20:30:21 +0100 Subject: [PATCH 052/107] .drone.yml update --- .drone.yml | 1 - Sources/dafl_project_flutter/lib/position/location.dart | 3 --- 2 files changed, 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index b71b9ed..0e37fca 100644 --- a/.drone.yml +++ b/.drone.yml @@ -75,7 +75,6 @@ steps: CONTAINERNAME: php_script COMMAND: create OVERWRITE: true - PRIVATE: true CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST: from_secret: db_host CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE: diff --git a/Sources/dafl_project_flutter/lib/position/location.dart b/Sources/dafl_project_flutter/lib/position/location.dart index e411cfc..daced88 100644 --- a/Sources/dafl_project_flutter/lib/position/location.dart +++ b/Sources/dafl_project_flutter/lib/position/location.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:geolocator/geolocator.dart'; import 'package:http/http.dart' as http; import 'dart:convert'; @@ -33,7 +31,6 @@ class Location { static Future> getData() async { Map spot = {}; String actualUser = MyApp.controller.currentUser.usernameDafl; - log(actualUser); Uri uri = Uri.parse("https://codefirst.iut.uca.fr/containers/php_script-dorianhodin/distance.php"); http.Response response = await http.post(uri, body: { "id": actualUser, From 3865125fc31f61ef934b5d7eb0fbdae89951e52d Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 20:34:49 +0100 Subject: [PATCH 053/107] Add index.php --- Sources/php_script/script/index.php | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Sources/php_script/script/index.php diff --git a/Sources/php_script/script/index.php b/Sources/php_script/script/index.php new file mode 100644 index 0000000..f6595e4 --- /dev/null +++ b/Sources/php_script/script/index.php @@ -0,0 +1,5 @@ + \ No newline at end of file From d5659c4a9262fd4f57e64846835271afe575a928 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 20:39:04 +0100 Subject: [PATCH 054/107] .drone.yml update --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 0e37fca..2e9a1ee 100644 --- a/.drone.yml +++ b/.drone.yml @@ -59,7 +59,7 @@ steps: image: plugins/docker settings: dockerfile: ./Sources/php_script/Dockerfile - context: Sources/php_script/ + context: Sources/php_script/script registry: hub.codefirst.iut.uca.fr repo: hub.codefirst.iut.uca.fr/dorian.hodin/dafl_music username: From c1261a85c0c32f6b1897b7c6ee473944b1a47955 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 20:45:14 +0100 Subject: [PATCH 055/107] config.php update --- Sources/php_script/script/config.php | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 7ccd56a..d41b835 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,13 +1,14 @@ Date: Wed, 23 Nov 2022 20:46:17 +0100 Subject: [PATCH 056/107] .drone.yml update --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 2e9a1ee..4738183 100644 --- a/.drone.yml +++ b/.drone.yml @@ -59,7 +59,7 @@ steps: image: plugins/docker settings: dockerfile: ./Sources/php_script/Dockerfile - context: Sources/php_script/script + context: Sources/php_script registry: hub.codefirst.iut.uca.fr repo: hub.codefirst.iut.uca.fr/dorian.hodin/dafl_music username: From b3f73c4625d0dde5db51e37fb7db7ea3077e9ff3 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 20:58:33 +0100 Subject: [PATCH 057/107] Error Management in Flutter --- .../lib/position/location.dart | 14 ++++++++++++-- Sources/php_script/script/distance.php | 2 +- Sources/php_script/script/insert.php | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/Sources/dafl_project_flutter/lib/position/location.dart b/Sources/dafl_project_flutter/lib/position/location.dart index daced88..5dd257f 100644 --- a/Sources/dafl_project_flutter/lib/position/location.dart +++ b/Sources/dafl_project_flutter/lib/position/location.dart @@ -36,8 +36,18 @@ class Location { "id": actualUser, }); var data = jsonDecode(response.body); - data.forEach((s)=> spot.putIfAbsent(s['user'], () => s['music'])); - return spot; + if (data.runtimeType==String) { + if (data=="Failed to connect to MySQL, connection timeout"){ + return Future.error("Failed to connect to MySQL, connection timeout"); + }else if (data=="The POST didn't return any values"){ + return Future.error("POST method failed"); + }else{ + return Future.error("Can't find current user in the database"); + } + }else { + data.forEach((s) => spot.putIfAbsent(s['user'], () => s['music'])); + return spot; + } } } diff --git a/Sources/php_script/script/distance.php b/Sources/php_script/script/distance.php index 03148aa..8ad361d 100644 --- a/Sources/php_script/script/distance.php +++ b/Sources/php_script/script/distance.php @@ -16,7 +16,7 @@ function meters($lat1, $lng1, $lat2, $lng2): float $connect=""; //Else PHP send an error, "connect don't exist", but that work anyway, this is just to remove a fake error $res=include "config.php"; //$res get the result of the calling of "config.php" if ($res != 1){ //Check if config.php work - print (json_encode("Failed to connect to MySQL")); //Return a json string, so the dart script can interpret the error + print (json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error } if (!empty($_POST)) { $id = $_POST['id']; //Get the result of the POST method in id diff --git a/Sources/php_script/script/insert.php b/Sources/php_script/script/insert.php index c272129..7cb9fa6 100644 --- a/Sources/php_script/script/insert.php +++ b/Sources/php_script/script/insert.php @@ -2,7 +2,7 @@ $connect=""; //Else PHP send an error, "connect don't exist", but that work anyway, this is just to remove a fake error $res=include "config.php"; //$res get the result of the calling of "config.php" if ($res != 1){ //Check if config.php work - print (json_encode("Failed to connect to MySQL")); //Return a json string, so the dart script can interpret the error + print (json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error } if (!empty($_POST)) { //Check if the method POST return something $id = mysqli_real_escape_string($connect, $_POST['id']); //Get the result of POST method From 2999b334a4d050b75fa187baadf594af80d4671c Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 21:01:50 +0100 Subject: [PATCH 058/107] config.php update --- Sources/php_script/script/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index d41b835..901ef5c 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,6 +1,6 @@ Date: Wed, 23 Nov 2022 21:04:25 +0100 Subject: [PATCH 059/107] config.php update --- Sources/php_script/script/config.php | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 901ef5c..d515461 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -12,3 +12,4 @@ try { + From 0be35385d5f78880f73a35ee65544b6ab7fe6922 Mon Sep 17 00:00:00 2001 From: "dorian.hodin" Date: Wed, 23 Nov 2022 23:27:15 +0100 Subject: [PATCH 060/107] Try to resolve connection problem --- .idea/codeStyles/Project.xml | 1 - .idea/libraries/Dart_Packages.xml | 340 ++++++++++++------------- .idea/libraries/Dart_SDK.xml | 38 +-- Sources/php_script/script/config.php | 5 +- Sources/php_script/script/distance.php | 28 +- Sources/php_script/script/insert.php | 2 +- 6 files changed, 207 insertions(+), 207 deletions(-) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 7643783..6db4707 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -98,7 +98,6 @@ http://schemas.android.com/apk/res/android - ANDROID_ATTRIBUTE_ORDER
diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index f8237c9..04e2ec7 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -5,686 +5,686 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index cb79f3d..3dbed52 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index d515461..eac23db 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -6,8 +6,9 @@ $db_name="positiondaflmusic"; try { //Try to connect to the database $connect = mysqli_connect($host, $username, $password, $db_name); //Connecting to database }catch (mysqli_sql_exception){ //If the connection failed - print(json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error - exit(-1); //Send a return code as -1, so insert.php can know if the connection is successful + echo "

HEY

"; + print(json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error + exit(-1); //Send a return code as -1, so insert.php can know if the connection is successful } diff --git a/Sources/php_script/script/distance.php b/Sources/php_script/script/distance.php index 8ad361d..9cfa86d 100644 --- a/Sources/php_script/script/distance.php +++ b/Sources/php_script/script/distance.php @@ -2,21 +2,21 @@ function meters($lat1, $lng1, $lat2, $lng2): float { - $earth_radius = 6378137; // Radius of the Earth in meters : - $rlo1 = deg2rad($lng1); //Transform the coordinate longitude1 from degree to radian - $rla1 = deg2rad($lat1); //Transform the coordinate latitude1 from degree to radian - $rlo2 = deg2rad($lng2); //Transform the coordinate longitude2 from degree to radian - $rla2 = deg2rad($lat2); //Transform the coordinate latitude2 from degree to radian - $dlo = ($rlo2 - $rlo1) / 2; //Stock in $dlo the result of the calcul : ($rlo2 - $rlo1) / 2 - $dla = ($rla2 - $rla1) / 2; //Stock in $dla the result of the calcul : ($rla2 - $rla1) / 2 - $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo)); //Do some operations to return the distance in meters + $earth_radius = 6378137; // Radius of the Earth in meters : + $rlo1 = deg2rad($lng1); //Transform the coordinate longitude1 from degree to radian + $rla1 = deg2rad($lat1); //Transform the coordinate latitude1 from degree to radian + $rlo2 = deg2rad($lng2); //Transform the coordinate longitude2 from degree to radian + $rla2 = deg2rad($lat2); //Transform the coordinate latitude2 from degree to radian + $dlo = ($rlo2 - $rlo1) / 2; //Stock in $dlo the result of the calcul : ($rlo2 - $rlo1) / 2 + $dla = ($rla2 - $rla1) / 2; //Stock in $dla the result of the calcul : ($rla2 - $rla1) / 2 + $a = (sin($dla) * sin($dla)) + cos($rla1) * cos($rla2) * (sin($dlo) * sin($dlo)); //Do some operations to return the distance in meters $d = 2 * atan2(sqrt($a), sqrt(1 - $a)); //Do some operations to return the distance in meters return round($earth_radius * $d); // Return the distance in meters between 2 GPS points } -$connect=""; //Else PHP send an error, "connect don't exist", but that work anyway, this is just to remove a fake error -$res=include "config.php"; //$res get the result of the calling of "config.php" -if ($res != 1){ //Check if config.php work - print (json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error +$connect=""; //Else PHP send an error, "connect don't exist", but that work anyway, this is just to remove a fake error +$res=include "config.php"; //$res get the result of the calling of "config.php" +if ($res != 1){ //Check if config.php work + print (json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error } if (!empty($_POST)) { $id = $_POST['id']; //Get the result of the POST method in id @@ -32,7 +32,7 @@ if (!empty($_POST)) { } } if ($lat1 == 0 && $lng1 == 0) { //Check if the user get found in the database - print(json_encode("ERROR No user found in the database")); //Return a json string, so the dart script can interpret the error + print(json_encode("ERROR No user found in the database")); //Return a json string, so the dart script can interpret the error exit(1); //Exit the actual script } $results = mysqli_query($connect, $query); //Execute again the SQL command to restart the fetch_row() @@ -50,7 +50,7 @@ if (!empty($_POST)) { } print(json_encode($listUser)); //Return a json string of the list listUser }else{ //If the method POST return nothing - print (json_encode("The POST didn't return any values")); //Return a json string, so the dart script can interpret the error + print (json_encode("The POST didn't return any values")); //Return a json string, so the dart script can interpret the error } diff --git a/Sources/php_script/script/insert.php b/Sources/php_script/script/insert.php index 7cb9fa6..84ffd22 100644 --- a/Sources/php_script/script/insert.php +++ b/Sources/php_script/script/insert.php @@ -22,5 +22,5 @@ if (!empty($_POST)) { VALUES('$id','$latitude','$longitude','$idMusic',CURRENT_TIMESTAMP);"; //Insert into the database the new data and new information about this user $results = mysqli_query($connect, $query); //Execute the SQL command }else{ //If the method POST return nothing - print (json_encode("The POST didn't return any values")); //Return a json string, so the dart script can interpret the error + print (json_encode("The POST didn't return any values")); //Return a json string, so the dart script can interpret the error } \ No newline at end of file From e607a46c88358db2e55c67b402b5469633a92774 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 23:31:19 +0100 Subject: [PATCH 061/107] config.php update --- .idea/libraries/Dart_Packages.xml | 340 +++++++++++++-------------- .idea/libraries/Dart_SDK.xml | 38 +-- Sources/php_script/script/config.php | 1 - 3 files changed, 189 insertions(+), 190 deletions(-) diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index 04e2ec7..f8237c9 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -5,686 +5,686 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index 3dbed52..cb79f3d 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index eac23db..29a5493 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -6,7 +6,6 @@ $db_name="positiondaflmusic"; try { //Try to connect to the database $connect = mysqli_connect($host, $username, $password, $db_name); //Connecting to database }catch (mysqli_sql_exception){ //If the connection failed - echo "

HEY

"; print(json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error exit(-1); //Send a return code as -1, so insert.php can know if the connection is successful } From 89d552d7882ad96f8cb46c9fdefcb2727fbad68e Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Wed, 23 Nov 2022 23:42:16 +0100 Subject: [PATCH 062/107] Dockerfile update --- Sources/php_script/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index a011785..1427b65 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,5 +1,6 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli +RUN apt-get install iproute2 -y COPY ./script /var/www/html From abe332b288e819bd8899439cba128201ee823100 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 08:25:57 +0100 Subject: [PATCH 063/107] .drone.yml update --- .drone.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.drone.yml b/.drone.yml index 4738183..1ee7b54 100644 --- a/.drone.yml +++ b/.drone.yml @@ -83,6 +83,8 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password + networks: + external: true #commands: # - export DAFL_HOST = $CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST # - export DAFL_DATABASE = $CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE From 16d3a6d1646f7dee2350e5c6e97aa408cad4e64c Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 08:41:24 +0100 Subject: [PATCH 064/107] location.dart update --- Sources/dafl_project_flutter/lib/position/location.dart | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/dafl_project_flutter/lib/position/location.dart b/Sources/dafl_project_flutter/lib/position/location.dart index 5dd257f..3be754f 100644 --- a/Sources/dafl_project_flutter/lib/position/location.dart +++ b/Sources/dafl_project_flutter/lib/position/location.dart @@ -38,11 +38,11 @@ class Location { var data = jsonDecode(response.body); if (data.runtimeType==String) { if (data=="Failed to connect to MySQL, connection timeout"){ - return Future.error("Failed to connect to MySQL, connection timeout"); + return Future.error(data); }else if (data=="The POST didn't return any values"){ - return Future.error("POST method failed"); + return Future.error(data); }else{ - return Future.error("Can't find current user in the database"); + return Future.error(data); //ERROR No user found in the database } }else { data.forEach((s) => spot.putIfAbsent(s['user'], () => s['music'])); From 8248bf5cd8d8e6485a93c9c570bfc8a2c11de7fe Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 09:11:47 +0100 Subject: [PATCH 065/107] Dockerfile update --- Sources/php_script/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 1427b65..a011785 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,6 +1,5 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli -RUN apt-get install iproute2 -y COPY ./script /var/www/html From 72c5ee4745a4023ca16f223abdad6def3d4d6f61 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 16:58:31 +0100 Subject: [PATCH 066/107] .drone.yml update --- .drone.yml | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/.drone.yml b/.drone.yml index 1ee7b54..cf4c002 100644 --- a/.drone.yml +++ b/.drone.yml @@ -53,6 +53,12 @@ steps: COMMAND: create OVERWRITE: true depends_on: [ web-server ] +--- +kind : secret +type : docker +name : php-scripts + +steps: # docker image build - name: php_script @@ -83,12 +89,14 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password - networks: - external: true - #commands: - # - export DAFL_HOST = $CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST - # - export DAFL_DATABASE = $CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE - # - export DAFL_USER = $CODEFIRST_CLIENTDRONE_ENV_INNODB_USER - # - export DAFL_PASSWORD = $CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS - + commands: + - export DAFL_HOST = $CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST + - export DAFL_DATABASE = $CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE + - export DAFL_USER = $CODEFIRST_CLIENTDRONE_ENV_INNODB_USER + - export DAFL_PASSWORD = $CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS + networks: + - myapp depends_on: [ php_script ] + +networks: + - myapp From c641ab5a7f471e059d4dd936108713c9a1f7688a Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 17:00:51 +0100 Subject: [PATCH 067/107] .drone.yml update --- .drone.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.drone.yml b/.drone.yml index cf4c002..a62711a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -100,3 +100,4 @@ steps: networks: - myapp + From c030731862a778d84385159f52f7583290ba6ea2 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 17:21:22 +0100 Subject: [PATCH 068/107] .drone.yml update --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index a62711a..edc017b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -54,7 +54,7 @@ steps: OVERWRITE: true depends_on: [ web-server ] --- -kind : secret +kind : pipeline type : docker name : php-scripts From 36183717e3ce3809db97f3696f992f70c0556caf Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 17:24:21 +0100 Subject: [PATCH 069/107] .drone.yml update --- .drone.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.drone.yml b/.drone.yml index edc017b..d5c3c22 100644 --- a/.drone.yml +++ b/.drone.yml @@ -53,12 +53,6 @@ steps: COMMAND: create OVERWRITE: true depends_on: [ web-server ] ---- -kind : pipeline -type : docker -name : php-scripts - -steps: # docker image build - name: php_script @@ -100,4 +94,3 @@ steps: networks: - myapp - From 29ccde6ff8feaeb2cdfcc7e1ddfb4dacaae28511 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 17:42:51 +0100 Subject: [PATCH 070/107] .drone.yml update --- .drone.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index d5c3c22..a1fb5da 100644 --- a/.drone.yml +++ b/.drone.yml @@ -84,10 +84,10 @@ steps: CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password commands: - - export DAFL_HOST = $CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST - - export DAFL_DATABASE = $CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE - - export DAFL_USER = $CODEFIRST_CLIENTDRONE_ENV_INNODB_USER - - export DAFL_PASSWORD = $CODEFIRST_CLIENTDRONE_ENV_INNODB_PASS + - export DAFL_HOST = from_secret: db_host + - export DAFL_DATABASE = from_secret: db_database + - export DAFL_USER = from_secret: db_user + - export DAFL_PASSWORD = from_secret: db_password networks: - myapp depends_on: [ php_script ] From 0fb10103c24fa9a0940dc10dbee8ebd6e899598f Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 17:56:27 +0100 Subject: [PATCH 071/107] .drone.yml update --- .drone.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index a1fb5da..baf37ba 100644 --- a/.drone.yml +++ b/.drone.yml @@ -84,10 +84,10 @@ steps: CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password commands: - - export DAFL_HOST = from_secret: db_host - - export DAFL_DATABASE = from_secret: db_database - - export DAFL_USER = from_secret: db_user - - export DAFL_PASSWORD = from_secret: db_password + - export DAFL_HOST = CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST + - export DAFL_DATABASE = CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE + - export DAFL_USER = CODEFIRST_CLIENTDRONE_ENV_INNODB_USER + - export DAFL_PASSWORD = CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD networks: - myapp depends_on: [ php_script ] From ca5685ef48636d7170fa82f7f70c58a99619bb7d Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 17:59:05 +0100 Subject: [PATCH 072/107] .drone.yml update --- .drone.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.drone.yml b/.drone.yml index baf37ba..5f07f93 100644 --- a/.drone.yml +++ b/.drone.yml @@ -83,11 +83,11 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password - commands: - - export DAFL_HOST = CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST - - export DAFL_DATABASE = CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE - - export DAFL_USER = CODEFIRST_CLIENTDRONE_ENV_INNODB_USER - - export DAFL_PASSWORD = CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD + #commands: + # - export DAFL_HOST = CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST + # - export DAFL_DATABASE = CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE + # - export DAFL_USER = CODEFIRST_CLIENTDRONE_ENV_INNODB_USER + # - export DAFL_PASSWORD = CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD networks: - myapp depends_on: [ php_script ] From df31e14375f508de14203a41271d8b56a863542d Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 19:21:28 +0100 Subject: [PATCH 073/107] .drone.yml update --- .drone.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 5f07f93..ff74c5c 100644 --- a/.drone.yml +++ b/.drone.yml @@ -88,9 +88,6 @@ steps: # - export DAFL_DATABASE = CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE # - export DAFL_USER = CODEFIRST_CLIENTDRONE_ENV_INNODB_USER # - export DAFL_PASSWORD = CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD - networks: - - myapp + networks_mode : open containers depends_on: [ php_script ] -networks: - - myapp From 469c10b84005e7bd94c04544dd4b94fab29919a9 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 19:24:53 +0100 Subject: [PATCH 074/107] .drone.yml update --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index ff74c5c..96c5767 100644 --- a/.drone.yml +++ b/.drone.yml @@ -84,7 +84,7 @@ steps: CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password #commands: - # - export DAFL_HOST = CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST + - export DAFL_HOST = "hey" # - export DAFL_DATABASE = CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE # - export DAFL_USER = CODEFIRST_CLIENTDRONE_ENV_INNODB_USER # - export DAFL_PASSWORD = CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD From ca1d3708186170578460ee1ec19fd7b9c6e6a80c Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 19:25:14 +0100 Subject: [PATCH 075/107] .drone.yml update --- .drone.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 96c5767..50aa48f 100644 --- a/.drone.yml +++ b/.drone.yml @@ -88,6 +88,5 @@ steps: # - export DAFL_DATABASE = CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE # - export DAFL_USER = CODEFIRST_CLIENTDRONE_ENV_INNODB_USER # - export DAFL_PASSWORD = CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD - networks_mode : open containers depends_on: [ php_script ] From 2d58187d20842d48180fe759020790ccc41f1998 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 19:25:29 +0100 Subject: [PATCH 076/107] .drone.yml update --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 50aa48f..4bc228b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -83,7 +83,7 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password - #commands: + commands: - export DAFL_HOST = "hey" # - export DAFL_DATABASE = CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE # - export DAFL_USER = CODEFIRST_CLIENTDRONE_ENV_INNODB_USER From 7093e059deaff669ea4c054dc88beceb727c6a9c Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 19:30:13 +0100 Subject: [PATCH 077/107] config.php update --- .drone.yml | 5 ----- Sources/php_script/script/config.php | 11 ++++++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.drone.yml b/.drone.yml index 4bc228b..71a7a6f 100644 --- a/.drone.yml +++ b/.drone.yml @@ -83,10 +83,5 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: from_secret: db_password - commands: - - export DAFL_HOST = "hey" - # - export DAFL_DATABASE = CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE - # - export DAFL_USER = CODEFIRST_CLIENTDRONE_ENV_INNODB_USER - # - export DAFL_PASSWORD = CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD depends_on: [ php_script ] diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 29a5493..642e105 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,12 +1,13 @@ Date: Thu, 24 Nov 2022 19:33:22 +0100 Subject: [PATCH 078/107] config.php update --- Sources/php_script/script/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 642e105..eacf1a1 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -6,7 +6,7 @@ $db_name=$_ENV("INNONDB_DATABASE"); try { //Try to connect to the database $connect = mysqli_connect($host, $username, $password, $db_name); //Connecting to database }catch (mysqli_sql_exception){ //If the connection failed - print(json_encode($host,$username,$password)); + print(json_encode(strval($host))); // print(json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error exit(-1); //Send a return code as -1, so insert.php can know if the connection is successful } From 3b13074ac608566bd204386b9365a150b35721df Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 19:34:50 +0100 Subject: [PATCH 079/107] config.php update --- Sources/php_script/script/config.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index eacf1a1..d87f57a 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -6,8 +6,7 @@ $db_name=$_ENV("INNONDB_DATABASE"); try { //Try to connect to the database $connect = mysqli_connect($host, $username, $password, $db_name); //Connecting to database }catch (mysqli_sql_exception){ //If the connection failed - print(json_encode(strval($host))); - // print(json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error + print(json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error exit(-1); //Send a return code as -1, so insert.php can know if the connection is successful } From 5e0778e4ce6e5a964bcdcd49034bf0ca246ae116 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 19:36:35 +0100 Subject: [PATCH 080/107] config.php update --- Sources/php_script/script/config.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index d87f57a..6ce1078 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,12 +1,13 @@ Date: Thu, 24 Nov 2022 19:38:53 +0100 Subject: [PATCH 081/107] config.php update --- Sources/php_script/script/config.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 6ce1078..a24bc5c 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -6,8 +6,7 @@ $db_name=getenv("INNONDB_DATABASE"); try { //Try to connect to the database $connect = mysqli_connect($host, $username, $password, $db_name); //Connecting to database }catch (mysqli_sql_exception){ //If the connection failed - print(json_encode($host,$username)); - //print(json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error + print(json_encode("Failed to connect to MySQL, connection timeout")); //Return a json string, so the dart script can interpret the error exit(-1); //Send a return code as -1, so insert.php can know if the connection is successful } From 55ed4626cbf6220b31249824d94396f140a84567 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 19:43:01 +0100 Subject: [PATCH 082/107] config.php update --- Sources/php_script/script/config.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index a24bc5c..29a5493 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,8 +1,8 @@ Date: Thu, 24 Nov 2022 19:51:21 +0100 Subject: [PATCH 083/107] config.php update --- .drone.yml | 8 ++++---- Sources/php_script/script/config.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.drone.yml b/.drone.yml index 71a7a6f..f07fa88 100644 --- a/.drone.yml +++ b/.drone.yml @@ -75,13 +75,13 @@ steps: CONTAINERNAME: php_script COMMAND: create OVERWRITE: true - CODEFIRST_CLIENTDRONE_ENV_INNODB_HOST: + HOST: from_secret: db_host - CODEFIRST_CLIENTDRONE_ENV_INNODB_DATABASE: + DATABASE: from_secret: db_database - CODEFIRST_CLIENTDRONE_ENV_INNODB_USER: + USER: from_secret: db_user - CODEFIRST_CLIENTDRONE_ENV_INNODB_PASSWORD: + PASSWORD: from_secret: db_password depends_on: [ php_script ] diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 29a5493..fb6ae26 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,6 +1,6 @@ Date: Thu, 24 Nov 2022 19:52:56 +0100 Subject: [PATCH 084/107] config.php update --- Sources/php_script/script/config.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index fb6ae26..29a5493 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,6 +1,6 @@ Date: Thu, 24 Nov 2022 20:11:24 +0100 Subject: [PATCH 085/107] config.php update --- .drone.yml | 6 ++++++ Sources/php_script/script/config.php | 8 ++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index f07fa88..008ba66 100644 --- a/.drone.yml +++ b/.drone.yml @@ -83,5 +83,11 @@ steps: from_secret: db_user PASSWORD: from_secret: db_password + networks: + - php_script depends_on: [ php_script ] +networks : + network_mode : open + external : true + name : php_script \ No newline at end of file diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index 29a5493..c604963 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -1,8 +1,8 @@ Date: Thu, 24 Nov 2022 20:14:53 +0100 Subject: [PATCH 086/107] config.php update --- Sources/php_script/script/config.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index c604963..e2d4c53 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -3,6 +3,10 @@ $username=$_ENV["USER"]; $host=$_ENV["HOST"]; //Get the address IP of the hosting machine $password=$_ENV["PASSWORD"]; //Get the password for the user selected $db_name=$_ENV["DATABASE"]; //Get the name of the database +foreach (getenv() as $key => $value) { + echo $key . ' - ' . $value."
"; +} + try { //Try to connect to the database $connect = mysqli_connect($host, $username, $password, $db_name); //Connecting to database }catch (mysqli_sql_exception){ //If the connection failed From f44d3ab9fc3583134c1a59f91e60adf2237752ae Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 20:18:01 +0100 Subject: [PATCH 087/107] .drone.yml update --- .drone.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.drone.yml b/.drone.yml index 008ba66..b60aeff 100644 --- a/.drone.yml +++ b/.drone.yml @@ -75,13 +75,13 @@ steps: CONTAINERNAME: php_script COMMAND: create OVERWRITE: true - HOST: + CODEFIRST_CLIENTDRONE_ENV_HOST: from_secret: db_host - DATABASE: + CODEFIRST_CLIENTDRONE_ENV_DATABASE: from_secret: db_database - USER: + CODEFIRST_CLIENTDRONE_ENV_USER: from_secret: db_user - PASSWORD: + CODEFIRST_CLIENTDRONE_ENV_PASSWORD: from_secret: db_password networks: - php_script From dde5af1443e03d13d0284d2d1e44f918522d9885 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 20:42:57 +0100 Subject: [PATCH 088/107] config.php last update --- Sources/php_script/script/config.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Sources/php_script/script/config.php b/Sources/php_script/script/config.php index e2d4c53..c604963 100644 --- a/Sources/php_script/script/config.php +++ b/Sources/php_script/script/config.php @@ -3,10 +3,6 @@ $username=$_ENV["USER"]; $host=$_ENV["HOST"]; //Get the address IP of the hosting machine $password=$_ENV["PASSWORD"]; //Get the password for the user selected $db_name=$_ENV["DATABASE"]; //Get the name of the database -foreach (getenv() as $key => $value) { - echo $key . ' - ' . $value."
"; -} - try { //Try to connect to the database $connect = mysqli_connect($host, $username, $password, $db_name); //Connecting to database }catch (mysqli_sql_exception){ //If the connection failed From d7209f4ca2663ffb5ba27d7483d1f0ed108a4989 Mon Sep 17 00:00:00 2001 From: "dorian.hodin" Date: Thu, 24 Nov 2022 21:08:30 +0100 Subject: [PATCH 089/107] Try to include the database --- .idea/libraries/Dart_Packages.xml | 340 +- .idea/libraries/Dart_SDK.xml | 38 +- .../script/phpMyAdmin/config.sample.inc.php | 160 + .../phpMyAdmin/dafldev/.idea/dafldev.iml | 8 + .../script/phpMyAdmin/dafldev/config.php | 14 + .../script/phpMyAdmin/dafldev/db.php | 10 + .../script/phpMyAdmin/dafldev/distance.php | 61 + .../doc/html/_images/line_chart.png | Bin 0 -> 12716 bytes .../html/_images/query_result_operations.png | Bin 0 -> 6750 bytes .../doc/html/_images/scatter_chart.png | Bin 0 -> 8451 bytes .../phpMyAdmin/doc/html/_sources/faq.rst.txt | 2251 ++ .../doc/html/_sources/glossary.rst.txt | 440 + .../doc/html/_sources/privileges.rst.txt | 74 + .../doc/html/_sources/setup.rst.txt | 1166 + .../doc/html/_sources/transformations.rst.txt | 158 + .../doc/html/_sources/two_factor.rst.txt | 69 + .../phpMyAdmin/doc/html/_static/classic.css | 266 + .../doc/html/_static/language_data.js | 297 + .../script/phpMyAdmin/doc/html/config.html | 6161 ++++ .../script/phpMyAdmin/doc/html/copyright.html | 143 + .../script/phpMyAdmin/doc/html/faq.html | 2000 ++ .../script/phpMyAdmin/doc/html/genindex.html | 2407 ++ .../script/phpMyAdmin/doc/html/other.html | 149 + .../phpMyAdmin/doc/html/transformations.html | 251 + .../script/phpMyAdmin/doc/html/vendors.html | 158 + .../script/phpMyAdmin/js/dist/common.js | 176 + .../script/phpMyAdmin/js/dist/console.js | 1591 + .../js/dist/cross_framing_protection.js | 13 + .../phpMyAdmin/js/dist/database/events.js | 611 + .../phpMyAdmin/js/dist/database/operations.js | 170 + .../js/dist/database/query_generator.js | 147 + .../phpMyAdmin/js/dist/database/search.js | 260 + .../phpMyAdmin/js/dist/database/tracking.js | 105 + .../phpMyAdmin/js/dist/designer/init.js | 74 + .../phpMyAdmin/js/dist/designer/page.js | 208 + .../phpMyAdmin/js/dist/export_output.js | 12 + .../phpMyAdmin/js/dist/gis_data_editor.js | 368 + .../script/phpMyAdmin/js/dist/indexes.js | 795 + .../script/phpMyAdmin/js/dist/menu_resizer.js | 208 + .../phpMyAdmin/js/dist/server/privileges.js | 455 + .../js/dist/server/status/monitor.js | 2281 ++ .../js/dist/server/status/variables.js | 96 + .../phpMyAdmin/js/dist/server/user_groups.js | 35 + .../script/phpMyAdmin/js/dist/table/change.js | 836 + .../script/phpMyAdmin/js/dist/table/chart.js | 435 + .../script/phpMyAdmin/js/dist/table/select.js | 310 + .../js/dist/transformations/sql_editor.js | 10 + .../script/phpMyAdmin/js/dist/u2f.js | 90 + .../js/src/cross_framing_protection.js | 13 + .../phpMyAdmin/js/src/database/search.js | 261 + .../phpMyAdmin/js/src/database/tracking.js | 93 + .../phpMyAdmin/js/src/database/triggers.js | 530 + .../script/phpMyAdmin/js/src/designer/page.js | 178 + .../script/phpMyAdmin/js/src/import.js | 154 + .../script/phpMyAdmin/js/src/indexes.js | 819 + .../script/phpMyAdmin/js/src/makegrid.js | 2324 ++ .../script/phpMyAdmin/js/src/normalization.js | 792 + .../script/phpMyAdmin/js/src/replication.js | 106 + .../phpMyAdmin/js/src/server/plugins.js | 15 + .../js/src/server/status/queries.js | 45 + .../script/phpMyAdmin/js/src/setup/scripts.js | 241 + .../script/phpMyAdmin/js/src/sql.js | 1090 + .../phpMyAdmin/js/src/table/find_replace.js | 46 + .../phpMyAdmin/js/src/table/relation.js | 255 + .../js/src/transformations/sql_editor.js | 10 + .../vendor/bootstrap/bootstrap.bundle.min.js | 7 + .../codemirror/addon/runmode/runmode.js | 76 + .../plugins/jqplot.canvasAxisLabelRenderer.js | 203 + .../jqplot/plugins/jqplot.highlighter.js | 484 + .../js/vendor/jquery/MIT-LICENSE.txt | 20 + .../js/vendor/jquery/jquery.debounce-1.0.6.js | 82 + .../js/vendor/openlayers/OpenLayers.js | 9 + .../js/vendor/openlayers/theme/ol.css | 285 + .../phpMyAdmin/js/vendor/zxcvbn-ts.js.map | 1 + .../advisory_rules_mysql_before80003.php | 122 + .../classes/Command/TwigLintCommand.php | 271 + .../libraries/classes/Config/FormDisplay.php | 889 + .../classes/Config/FormDisplayTemplate.php | 177 + .../classes/Config/Forms/BaseForm.php | 86 + .../classes/Config/Forms/Page/ExportForm.php | 12 + .../classes/Config/Forms/Page/NaviForm.php | 12 + .../classes/Config/Forms/Setup/ConfigForm.php | 26 + .../classes/Config/Forms/User/ExportForm.php | 155 + .../classes/Config/Forms/User/SqlForm.php | 50 + .../classes/Config/ServerConfigChecks.php | 553 + .../classes/Config/Settings/Console.php | 205 + .../classes/Config/Settings/Debug.php | 82 + .../classes/Config/Settings/Import.php | 489 + .../Config/Settings/Transformations.php | 391 + .../classes/Config/SpecialSchemaLinks.php | 485 + .../Features/BookmarkFeature.php | 26 + .../Features/ExportTemplatesFeature.php | 26 + .../Features/FavoriteTablesFeature.php | 26 + .../Features/SqlHistoryFeature.php | 26 + .../Features/TrackingFeature.php | 26 + .../classes/ConfigStorage/Relation.php | 1813 ++ .../Controllers/CheckRelationsController.php | 69 + .../CollationConnectionController.php | 34 + .../Controllers/Database/EventsController.php | 86 + .../Database/PrivilegesController.php | 63 + .../Database/QueryByExampleController.php | 168 + .../Controllers/Database/SearchController.php | 85 + .../Database/SqlFormatController.php | 22 + .../Structure/AddPrefixTableController.php | 64 + .../CentralColumns/AddController.php | 59 + .../Structure/CopyTableController.php | 72 + .../CopyTableWithPrefixController.php | 67 + .../Database/Structure/DropFormController.php | 81 + .../Structure/EmptyTableController.php | 118 + .../Structure/FavoriteTableController.php | 184 + .../Database/TriggersController.php | 87 + .../Controllers/ErrorReportController.php | 164 + .../Export/Template/LoadController.php | 62 + .../Controllers/Import/StatusController.php | 83 + .../classes/Controllers/LicenseController.php | 42 + .../Preferences/ImportController.php | 114 + .../Preferences/MainPanelController.php | 114 + .../Preferences/TwoFactorController.php | 77 + .../Server/CollationsController.php | 80 + .../Controllers/Server/ExportController.php | 95 + .../Controllers/Server/PluginsController.php | 75 + .../Privileges/AccountUnlockController.php | 52 + .../Server/ReplicationController.php | 109 + .../Server/Status/AdvisorController.php | 35 + .../Monitor/QueryAnalyzerController.php | 60 + .../Variables/GetVariableController.php | 62 + .../Controllers/Setup/ConfigController.php | 40 + .../Controllers/Setup/ServersController.php | 70 + .../Sql/RelationalValuesController.php | 57 + .../Controllers/Table/ChartController.php | 229 + .../Table/DeleteConfirmController.php | 46 + .../DropColumnConfirmationController.php | 42 + .../Controllers/Table/ExportController.php | 132 + .../Table/FindReplaceController.php | 360 + .../Table/IndexRenameController.php | 100 + .../Table/OperationsController.php | 499 + .../Table/Partition/AnalyzeController.php | 66 + .../Table/RecentFavoriteController.php | 27 + .../Table/Structure/BrowseController.php | 84 + .../Structure/PartitioningController.php | 282 + .../Structure/ReservedWordCheckController.php | 56 + .../Controllers/Table/TriggersController.php | 92 + .../classes/Controllers/TableController.php | 34 + .../Controllers/VersionCheckController.php | 49 + .../Controllers/View/CreateController.php | 276 + .../Controllers/View/OperationsController.php | 115 + .../libraries/classes/Crypto/Crypto.php | 67 + .../libraries/classes/Database/Search.php | 316 + .../libraries/classes/Dbal/DbiExtension.php | 143 + .../libraries/classes/Dbal/MysqliResult.php | 276 + .../classes/Dbal/ResultInterface.php | 111 + .../libraries/classes/Dbal/TableName.php | 66 + .../phpMyAdmin/libraries/classes/Encoding.php | 354 + .../libraries/classes/Engines/Binlog.php | 27 + .../libraries/classes/Engines/Memory.php | 28 + .../phpMyAdmin/libraries/classes/Error.php | 549 + .../libraries/classes/Export/Options.php | 236 + .../libraries/classes/Export/Template.php | 70 + .../libraries/classes/FieldMetadata.php | 448 + .../phpMyAdmin/libraries/classes/Font.php | 244 + .../phpMyAdmin/libraries/classes/Header.php | 675 + .../phpMyAdmin/libraries/classes/Language.php | 209 + .../classes/Navigation/NodeFactory.php | 122 + .../classes/Navigation/Nodes/Node.php | 877 + .../classes/Navigation/Nodes/NodeColumn.php | 120 + .../Nodes/NodeFunctionContainer.php | 48 + .../Navigation/Nodes/NodeProcedure.php | 52 + .../Navigation/Nodes/NodeTableContainer.php | 43 + .../Navigation/Nodes/NodeTriggerContainer.php | 42 + .../libraries/classes/Normalization.php | 1160 + .../libraries/classes/OutputBuffering.php | 174 + .../classes/Partitioning/SubPartition.php | 154 + .../Partitioning/TablePartitionDefinition.php | 198 + .../classes/Plugins/Export/ExportOds.php | 325 + .../classes/Plugins/Export/ExportSql.php | 2848 ++ .../classes/Plugins/Export/ExportTexytext.php | 625 + .../Plugins/Import/ImportMediawiki.php | 591 + .../classes/Plugins/Import/ImportSql.php | 193 + .../Plugins/Import/ShapeFileImport.php | 39 + .../Plugins/Import/Upload/UploadNoplugin.php | 61 + .../Plugins/Import/Upload/UploadProgress.php | 101 + .../classes/Plugins/ImportPlugin.php | 97 + .../Plugins/Schema/Dia/DiaRelationSchema.php | 236 + .../classes/Plugins/SchemaPlugin.php | 99 + .../Abs/Bool2TextTransformationsPlugin.php | 65 + .../Abs/FormattedTransformationsPlugin.php | 62 + .../Abs/HexTransformationsPlugin.php | 71 + .../Abs/InlineTransformationsPlugin.php | 76 + .../Abs/LongToIPv4TransformationsPlugin.php | 60 + .../Abs/PreApPendTransformationsPlugin.php | 65 + .../RegexValidationTransformationsPlugin.php | 73 + .../Abs/SQLTransformationsPlugin.php | 56 + .../TextFileUploadTransformationsPlugin.php | 98 + .../Input/Text_Plain_Iptobinary.php | 135 + .../Input/Text_Plain_Iptolong.php | 127 + .../Input/Text_Plain_RegexValidation.php | 37 + .../Input/Text_Plain_XmlEditor.php | 78 + .../Application_Octetstream_Download.php | 36 + .../Output/Image_JPEG_Link.php | 36 + .../Output/Text_Plain_Dateformat.php | 36 + .../Output/Text_Plain_Formatted.php | 36 + .../Output/Text_Plain_Imagelink.php | 36 + .../Output/Text_Plain_Json.php | 94 + .../Transformations/Output/Text_Plain_Xml.php | 94 + .../classes/Plugins/TransformationsPlugin.php | 64 + .../classes/Plugins/TwoFactor/Key.php | 216 + .../classes/Plugins/TwoFactorPlugin.php | 183 + .../Options/Items/TextPropertyItem.php | 28 + .../Options/OptionsPropertyGroup.php | 101 + .../Plugins/ExportPluginProperties.php | 52 + .../Properties/Plugins/PluginPropertyItem.php | 170 + .../classes/Properties/PropertyItem.php | 44 + .../libraries/classes/Query/Cache.php | 107 + .../libraries/classes/Query/Utilities.php | 200 + .../libraries/classes/Replication.php | 171 + .../libraries/classes/ReplicationInfo.php | 191 + .../libraries/classes/ResponseRenderer.php | 508 + .../libraries/classes/Server/Plugin.php | 207 + .../libraries/classes/Server/Select.php | 120 + .../libraries/classes/Server/Status/Data.php | 456 + .../classes/Server/Status/Monitor.php | 549 + .../libraries/classes/Server/SysInfo/Base.php | 48 + .../classes/Server/SysInfo/Linux.php | 115 + .../classes/Setup/FormProcessing.php | 80 + .../phpMyAdmin/libraries/classes/Sql.php | 1811 ++ .../libraries/classes/StorageEngine.php | 547 + .../libraries/classes/Table/Maintenance.php | 184 + .../libraries/classes/Table/Search.php | 353 + .../phpMyAdmin/libraries/classes/Template.php | 158 + .../phpMyAdmin/libraries/classes/Theme.php | 334 + .../classes/Twig/RelationExtension.php | 49 + .../libraries/classes/UserPassword.php | 217 + .../classes/Utils/FormatConverter.php | 96 + .../libraries/classes/Utils/SessionCache.php | 58 + .../libraries/classes/ZipExtension.php | 334 + .../phpMyAdmin/libraries/config.default.php | 3125 ++ .../script/phpMyAdmin/libraries/routes.php | 286 + .../locale/bn/LC_MESSAGES/phpmyadmin.mo | Bin 0 -> 342211 bytes .../locale/el/LC_MESSAGES/phpmyadmin.mo | Bin 0 -> 469435 bytes .../locale/he/LC_MESSAGES/phpmyadmin.mo | Bin 0 -> 141077 bytes .../locale/ia/LC_MESSAGES/phpmyadmin.mo | Bin 0 -> 258356 bytes .../locale/si/LC_MESSAGES/phpmyadmin.mo | Bin 0 -> 235642 bytes .../locale/tr/LC_MESSAGES/phpmyadmin.mo | Bin 0 -> 392243 bytes .../locale/zh_TW/LC_MESSAGES/phpmyadmin.mo | Bin 0 -> 333827 bytes .../php_script/script/phpMyAdmin/package.json | 62 + .../script/phpMyAdmin/setup/config.php | 54 + .../script/phpMyAdmin/setup/styles.css.map | 1 + .../columns_definitions/column_name.twig | 42 + .../columns_definitions/partitions.twig | 180 + .../templates/components/error_message.twig | 4 + .../database/central_columns/edit.twig | 25 + .../central_columns/edit_table_row.twig | 85 + .../database/designer/schema_export.twig | 18 + .../database/events/editor_form.twig | 119 + .../templates/database/events/row.twig | 56 + .../database/multi_table_query/form.twig | 179 + .../templates/database/operations/index.twig | 230 + .../database/routines/editor_form.twig | 180 + .../database/routines/parameter_row.twig | 54 + .../templates/database/search/main.twig | 95 + .../database/structure/overhead.twig | 4 + .../structure/structure_table_row.twig | 226 + .../templates/database/tracking/tables.twig | 192 + .../templates/database/triggers/list.twig | 59 + .../templates/display/results/table.twig | 304 + .../templates/error/report_form.twig | 36 + .../script/phpMyAdmin/templates/filter.twig | 9 + .../templates/modals/unhide_nav_item.twig | 14 + .../templates/navigation/tree/node.twig | 68 + .../templates/navigation/tree/quick_warp.twig | 5 + .../templates/preferences/autoload.twig | 15 + .../preferences/two_factor/configure.twig | 17 + .../preferences/two_factor/confirm.twig | 18 + .../recent_favorite_table_recent.twig | 7 + .../phpMyAdmin/templates/select_all.twig | 6 + .../templates/server/binlog/index.twig | 107 + .../templates/server/engines/index.twig | 33 + .../templates/server/privileges/add_user.twig | 38 + .../server/privileges/change_password.twig | 72 + .../server/privileges/get_user_link.twig | 11 + .../server/privileges/initials_row.twig | 20 + .../privileges/login_information_fields.twig | 91 + .../server/privileges/new_user_ajax.twig | 66 + .../server/privileges/privileges_summary.twig | 104 + .../server/privileges/user_properties.twig | 152 + .../server/privileges/users_overview.twig | 182 + .../replication/primary_add_replica_user.twig | 84 + .../server/status/processes/index.twig | 61 + .../server/status/processes/list.twig | 65 + .../server/user_groups/edit_user_groups.twig | 23 + .../templates/server/variables/index.twig | 83 + .../templates/setup/servers/index.twig | 20 + .../templates/sql/sql_query_results.twig | 8 + .../templates/table/chart/tbl_chart.twig | 155 + .../templates/table/delete/confirm.twig | 32 + .../table/find_replace/replace_preview.twig | 39 + .../gis_visualization/gis_visualization.twig | 62 + .../templates/table/import/index.twig | 3 + .../templates/table/maintenance/check.twig | 41 + .../templates/table/maintenance/optimize.twig | 39 + .../templates/table/operations/view.twig | 49 + .../templates/table/partition/optimize.twig | 36 + .../templates/table/relation/common_form.twig | 244 + .../templates/table/search/index.twig | 203 + .../table/structure/display_structure.twig | 614 + .../tracking/structure_snapshot_columns.twig | 56 + .../templates/test/gettext/notes.twig | 5 + .../templates/test/gettext/pgettext.twig | 5 + .../phpMyAdmin/templates/test/raw_output.twig | 2 + .../phpMyAdmin/templates/test/static.twig | 1 + .../script/phpMyAdmin/templates/top_menu.twig | 22 + .../phpMyAdmin/templates/user_password.twig | 2 + .../phpMyAdmin/themes/bootstrap/css/theme.css | 3 + .../themes/bootstrap/img/arrow_ltr.png | Bin 0 -> 101 bytes .../themes/bootstrap/img/asc_order.png | Bin 0 -> 146 bytes .../themes/bootstrap/img/b_dbstatistics.png | Bin 0 -> 449 bytes .../themes/bootstrap/img/b_docsql.png | Bin 0 -> 133 bytes .../phpMyAdmin/themes/bootstrap/img/b_key.png | Bin 0 -> 294 bytes .../themes/bootstrap/img/b_lastpage.png | Bin 0 -> 661 bytes .../themes/bootstrap/img/b_left.png | Bin 0 -> 114 bytes .../themes/bootstrap/img/b_tipp.png | Bin 0 -> 696 bytes .../themes/bootstrap/img/bd_drop.png | Bin 0 -> 340 bytes .../themes/bootstrap/img/bd_firstpage.png | Bin 0 -> 405 bytes .../themes/bootstrap/img/bd_lastpage.png | Bin 0 -> 402 bytes .../themes/bootstrap/img/bd_spatial.png | Bin 0 -> 243 bytes .../phpMyAdmin/themes/bootstrap/img/col.svg | 1 + .../themes/bootstrap/img/col_drop.png | Bin 0 -> 111 bytes .../themes/bootstrap/img/col_pointer.png | Bin 0 -> 102 bytes .../themes/bootstrap/img/col_pointer_ver.png | Bin 0 -> 107 bytes .../themes/bootstrap/img/console.svg | 1 + .../themes/bootstrap/img/database-minus.svg | 1 + .../themes/bootstrap/img/database-plus.svg | 1 + .../themes/bootstrap/img/designer/1.png | Bin 0 -> 90 bytes .../themes/bootstrap/img/designer/4.png | Bin 0 -> 141 bytes .../themes/bootstrap/img/designer/7.png | Bin 0 -> 94 bytes .../bootstrap/img/designer/Field_small.png | Bin 0 -> 240 bytes .../bootstrap/img/designer/and_icon.png | Bin 0 -> 715 bytes .../themes/bootstrap/img/designer/bord.png | Bin 0 -> 75 bytes .../themes/bootstrap/img/designer/bottom.png | Bin 0 -> 646 bytes .../bootstrap/img/designer/downarrow1.png | Bin 0 -> 671 bytes .../themes/bootstrap/img/designer/favicon.ico | Bin 0 -> 1150 bytes .../themes/bootstrap/img/designer/grid.png | Bin 0 -> 602 bytes .../themes/bootstrap/img/designer/help.png | Bin 0 -> 654 bytes .../themes/bootstrap/img/designer/or_icon.png | Bin 0 -> 549 bytes .../bootstrap/img/designer/other_table.png | Bin 0 -> 558 bytes .../themes/bootstrap/img/designer/pdf.png | Bin 0 -> 798 bytes .../themes/bootstrap/img/designer/reload.png | Bin 0 -> 762 bytes .../bootstrap/img/designer/rightarrow2.png | Bin 0 -> 666 bytes .../bootstrap/img/designer/top_panel.png | Bin 0 -> 125 bytes .../themes/bootstrap/img/export.svg | 1 + .../themes/bootstrap/img/field-index-text.svg | 1 + .../themes/bootstrap/img/flag-plus.svg | 1 + .../phpMyAdmin/themes/bootstrap/img/flag.svg | 1 + .../themes/bootstrap/img/lightbulb.png | Bin 0 -> 696 bytes .../themes/bootstrap/img/link-broken.svg | 1 + .../themes/bootstrap/img/new_data.png | Bin 0 -> 260 bytes .../img/new_data_selected_hovered.png | Bin 0 -> 180 bytes .../themes/bootstrap/img/new_struct.png | Bin 0 -> 293 bytes .../bootstrap/img/new_struct_selected.png | Bin 0 -> 188 bytes .../img/new_struct_selected_hovered.png | Bin 0 -> 196 bytes .../themes/bootstrap/img/notice.svg | 1 + .../themes/bootstrap/img/pma_logo2.png | Bin 0 -> 1366 bytes .../themes/bootstrap/img/replication.svg | 1 + .../themes/bootstrap/img/routine-plus.svg | 1 + .../themes/bootstrap/img/routine.svg | 1 + .../themes/bootstrap/img/s_really.png | Bin 0 -> 128 bytes .../phpMyAdmin/themes/bootstrap/img/save.svg | 1 + .../themes/bootstrap/img/search-replace.svg | 1 + .../phpMyAdmin/themes/bootstrap/img/table.svg | 1 + .../themes/bootstrap/img/tree-collapse.svg | 1 + .../themes/bootstrap/img/triangle-right-1.svg | 1 + .../themes/bootstrap/img/user-props.svg | 1 + .../themes/bootstrap/img/version.svg | 1 + .../themes/bootstrap/img/vertical_line.png | Bin 0 -> 67 bytes .../bootstrap/img/visibility-hidden.svg | 1 + .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 121 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 122 bytes .../jquery/images/ui-icons_888888_256x240.png | Bin 0 -> 3765 bytes .../jquery/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3765 bytes .../themes/bootstrap/jquery/jquery-ui.css | 1312 + .../themes/metro/css/mono-theme.rtl.css | 2 + .../phpMyAdmin/themes/metro/css/theme.css | 3 + .../themes/metro/img/ajax_clock_small.gif | Bin 0 -> 1810 bytes .../phpMyAdmin/themes/metro/img/arrow_ltr.png | Bin 0 -> 147 bytes .../phpMyAdmin/themes/metro/img/arrow_rtl.png | Bin 0 -> 145 bytes .../phpMyAdmin/themes/metro/img/b_chart.png | Bin 0 -> 174 bytes .../phpMyAdmin/themes/metro/img/b_close.png | Bin 0 -> 156 bytes .../themes/metro/img/b_column_add.png | Bin 0 -> 1171 bytes .../phpMyAdmin/themes/metro/img/b_edit.png | Bin 0 -> 1073 bytes .../phpMyAdmin/themes/metro/img/b_empty.png | Bin 0 -> 169 bytes .../themes/metro/img/b_event_add.png | Bin 0 -> 272 bytes .../themes/metro/img/b_favorite.png | Bin 0 -> 351 bytes .../themes/metro/img/b_find_replace.png | Bin 0 -> 641 bytes .../phpMyAdmin/themes/metro/img/b_home.png | Bin 0 -> 172 bytes .../phpMyAdmin/themes/metro/img/b_key.png | Bin 0 -> 1063 bytes .../themes/metro/img/b_lastpage.png | Bin 0 -> 164 bytes .../phpMyAdmin/themes/metro/img/b_more.png | Bin 0 -> 146 bytes .../phpMyAdmin/themes/metro/img/b_move.png | Bin 0 -> 1202 bytes .../phpMyAdmin/themes/metro/img/b_pdfdoc.png | Bin 0 -> 234 bytes .../phpMyAdmin/themes/metro/img/b_plus.png | Bin 0 -> 130 bytes .../themes/metro/img/b_routine_add.png | Bin 0 -> 285 bytes .../themes/metro/img/b_saveimage.png | Bin 0 -> 597 bytes .../phpMyAdmin/themes/metro/img/b_sbrowse.png | Bin 0 -> 162 bytes .../phpMyAdmin/themes/metro/img/b_sqldoc.png | Bin 0 -> 166 bytes .../themes/metro/img/b_tblanalyse.png | Bin 0 -> 171 bytes .../themes/metro/img/b_tbloptimize.png | Bin 0 -> 175 bytes .../phpMyAdmin/themes/metro/img/b_unique.png | Bin 0 -> 1067 bytes .../phpMyAdmin/themes/metro/img/b_usrlist.png | Bin 0 -> 245 bytes .../themes/metro/img/b_versions.png | Bin 0 -> 446 bytes .../phpMyAdmin/themes/metro/img/bd_empty.png | Bin 0 -> 177 bytes .../phpMyAdmin/themes/metro/img/bd_insrow.png | Bin 0 -> 188 bytes .../themes/metro/img/bd_lastpage.png | Bin 0 -> 161 bytes .../themes/metro/img/bd_primary.png | Bin 0 -> 147 bytes .../themes/metro/img/bd_spatial.png | Bin 0 -> 167 bytes .../themes/metro/img/centralColumns_add.png | Bin 0 -> 635 bytes .../metro/img/centralColumns_delete.png | Bin 0 -> 649 bytes .../themes/metro/img/col_pointer.png | Bin 0 -> 981 bytes .../phpMyAdmin/themes/metro/img/database.png | Bin 0 -> 1069 bytes .../themes/metro/img/designer/2leftarrow.png | Bin 0 -> 2842 bytes .../themes/metro/img/designer/2rightarrow.png | Bin 0 -> 991 bytes .../metro/img/designer/2rightarrow_m.png | Bin 0 -> 991 bytes .../themes/metro/img/designer/anchor.png | Bin 0 -> 503 bytes .../themes/metro/img/designer/ang_direct.png | Bin 0 -> 3617 bytes .../metro/img/designer/display_field.png | Bin 0 -> 983 bytes .../themes/metro/img/designer/downarrow2.png | Bin 0 -> 1093 bytes .../themes/metro/img/designer/exec.png | Bin 0 -> 1365 bytes .../themes/metro/img/designer/export.png | Bin 0 -> 735 bytes .../themes/metro/img/designer/grid.png | Bin 0 -> 3598 bytes .../themes/metro/img/designer/help.png | Bin 0 -> 1092 bytes .../metro/img/designer/left_panel_tab.png | Bin 0 -> 133 bytes .../themes/metro/img/designer/minus.png | Bin 0 -> 1413 bytes .../themes/metro/img/designer/page_delete.png | Bin 0 -> 630 bytes .../themes/metro/img/designer/pdf.png | Bin 0 -> 1119 bytes .../metro/img/designer/toggle_lines.png | Bin 0 -> 3595 bytes .../metro/img/designer/viewInFullscreen.png | Bin 0 -> 1180 bytes .../phpMyAdmin/themes/metro/img/eye_grey.png | Bin 0 -> 366 bytes .../phpMyAdmin/themes/metro/img/lightbulb.png | Bin 0 -> 609 bytes .../phpMyAdmin/themes/metro/img/more.png | Bin 0 -> 986 bytes .../themes/metro/img/new_struct_hovered.png | Bin 0 -> 303 bytes .../phpMyAdmin/themes/metro/img/normalize.png | Bin 0 -> 472 bytes .../phpMyAdmin/themes/metro/img/s_asc.png | Bin 0 -> 165 bytes .../themes/metro/img/s_attention.png | Bin 0 -> 233 bytes .../phpMyAdmin/themes/metro/img/s_cancel.png | Bin 0 -> 168 bytes .../phpMyAdmin/themes/metro/img/s_link.png | Bin 0 -> 386 bytes .../phpMyAdmin/themes/metro/img/s_notice.png | Bin 0 -> 1060 bytes .../phpMyAdmin/themes/metro/img/s_success.png | Bin 0 -> 1031 bytes .../phpMyAdmin/themes/metro/img/s_top.png | Bin 0 -> 2949 bytes .../phpMyAdmin/themes/metro/img/s_vars.png | Bin 0 -> 189 bytes .../phpMyAdmin/themes/metro/img/sprites.png | Bin 0 -> 22313 bytes .../themes/metro/img/zoom-plus-mini.png | Bin 0 -> 329 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 74 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 0 -> 121 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 187 bytes .../jquery/images/ui-icons_2e83ff_256x240.png | Bin 0 -> 4261 bytes .../jquery/images/ui-icons_888888_256x240.png | Bin 0 -> 4262 bytes .../phpMyAdmin/themes/metro/scss/_card.scss | 33 + .../phpMyAdmin/themes/metro/scss/_font.scss | 27 + .../phpMyAdmin/themes/metro/scss/_print.scss | 130 + .../themes/metro/scss/_variables.scss | 279 + .../themes/metro/scss/blueeyes-theme.scss | 3 + .../script/phpMyAdmin/themes/metro/theme.json | 8 + .../themes/original/css/theme.css.map | 1 + .../themes/original/css/theme.rtl.css | 2 + .../themes/original/img/arrow_ltr.png | Bin 0 -> 101 bytes .../themes/original/img/b_calendar.png | Bin 0 -> 165 bytes .../themes/original/img/b_close.png | Bin 0 -> 153 bytes .../themes/original/img/b_column_add.png | Bin 0 -> 429 bytes .../themes/original/img/b_comment.png | Bin 0 -> 298 bytes .../themes/original/img/b_deltbl.png | Bin 0 -> 211 bytes .../themes/original/img/b_export.png | Bin 0 -> 154 bytes .../themes/original/img/b_globe.gif | Bin 0 -> 1045 bytes .../phpMyAdmin/themes/original/img/b_home.png | Bin 0 -> 210 bytes .../themes/original/img/b_index_add.png | Bin 0 -> 313 bytes .../themes/original/img/b_insrow.png | Bin 0 -> 157 bytes .../phpMyAdmin/themes/original/img/b_key.png | Bin 0 -> 152 bytes .../phpMyAdmin/themes/original/img/b_move.png | Bin 0 -> 151 bytes .../themes/original/img/b_primary.png | Bin 0 -> 239 bytes .../themes/original/img/b_relations.png | Bin 0 -> 140 bytes .../themes/original/img/b_routines.png | Bin 0 -> 306 bytes .../phpMyAdmin/themes/original/img/b_save.png | Bin 0 -> 583 bytes .../themes/original/img/b_saveimage.png | Bin 0 -> 675 bytes .../themes/original/img/b_select.png | Bin 0 -> 339 bytes .../themes/original/img/b_spatial.png | Bin 0 -> 376 bytes .../themes/original/img/b_table_add.png | Bin 0 -> 265 bytes .../themes/original/img/b_tblanalyse.png | Bin 0 -> 152 bytes .../phpMyAdmin/themes/original/img/b_tipp.png | Bin 0 -> 163 bytes .../themes/original/img/b_trigger_add.png | Bin 0 -> 555 bytes .../themes/original/img/b_triggers.png | Bin 0 -> 446 bytes .../themes/original/img/b_usrcheck.png | Bin 0 -> 239 bytes .../themes/original/img/b_usrdrop.png | Bin 0 -> 270 bytes .../phpMyAdmin/themes/original/img/b_view.png | Bin 0 -> 538 bytes .../themes/original/img/b_view_add.png | Bin 0 -> 611 bytes .../themes/original/img/b_views.png | Bin 0 -> 278 bytes .../themes/original/img/bd_deltbl.png | Bin 0 -> 197 bytes .../themes/original/img/bd_edit.png | Bin 0 -> 176 bytes .../themes/original/img/bd_export.png | Bin 0 -> 139 bytes .../themes/original/img/bd_index.png | Bin 0 -> 182 bytes .../themes/original/img/bd_insrow.png | Bin 0 -> 163 bytes .../themes/original/img/bd_routine_add.png | Bin 0 -> 269 bytes .../themes/original/img/bd_sbrowse.png | Bin 0 -> 93 bytes .../themes/original/img/bd_select.png | Bin 0 -> 310 bytes .../themes/original/img/centralColumns.png | Bin 0 -> 586 bytes .../themes/original/img/east-mini.png | Bin 0 -> 287 bytes .../phpMyAdmin/themes/original/img/error.ico | Bin 0 -> 1150 bytes .../themes/original/img/logo_right.png | Bin 0 -> 4306 bytes .../original/img/new_struct_selected.png | Bin 0 -> 188 bytes .../themes/original/img/normalize.png | Bin 0 -> 511 bytes .../themes/original/img/north-mini.png | Bin 0 -> 322 bytes .../phpMyAdmin/themes/original/img/s_desc.png | Bin 0 -> 114 bytes .../themes/original/img/s_fulltext.png | Bin 0 -> 176 bytes .../phpMyAdmin/themes/original/img/s_info.png | Bin 0 -> 116 bytes .../phpMyAdmin/themes/original/img/s_lang.png | Bin 0 -> 253 bytes .../phpMyAdmin/themes/original/img/s_link.png | Bin 0 -> 280 bytes .../themes/original/img/s_loggoff.png | Bin 0 -> 142 bytes .../phpMyAdmin/themes/original/img/s_okay.png | Bin 0 -> 710 bytes .../themes/original/img/s_really.png | Bin 0 -> 128 bytes .../phpMyAdmin/themes/original/img/s_sync.png | Bin 0 -> 454 bytes .../themes/original/img/s_theme.png | Bin 0 -> 488 bytes .../themes/original/img/s_unlink.png | Bin 0 -> 589 bytes .../themes/original/img/south-mini.png | Bin 0 -> 319 bytes .../themes/original/img/toggle-rtl.png | Bin 0 -> 174 bytes .../themes/original/img/window-new.png | Bin 0 -> 468 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 0 -> 122 bytes .../jquery/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3765 bytes .../themes/original/jquery/jquery-ui.css | 1312 + .../themes/original/scss/_common.scss | 2711 ++ .../themes/original/scss/_reboot.scss | 17 + .../themes/original/scss/_variables.scss | 172 + .../themes/original/scss/theme.scss | 21 + .../phpMyAdmin/themes/original/theme.json | 8 + .../themes/pmahomme/css/theme.css.map | 1 + .../themes/pmahomme/css/theme.rtl.css | 2 + .../themes/pmahomme/img/arrow_ltr.png | Bin 0 -> 101 bytes .../themes/pmahomme/img/arrow_rtl.png | Bin 0 -> 102 bytes .../phpMyAdmin/themes/pmahomme/img/b_docs.png | Bin 0 -> 705 bytes .../themes/pmahomme/img/b_docsql.png | Bin 0 -> 133 bytes .../themes/pmahomme/img/b_find_replace.png | Bin 0 -> 669 bytes .../phpMyAdmin/themes/pmahomme/img/b_home.png | Bin 0 -> 734 bytes .../themes/pmahomme/img/b_index.png | Bin 0 -> 643 bytes .../phpMyAdmin/themes/pmahomme/img/b_key.png | Bin 0 -> 294 bytes .../themes/pmahomme/img/b_lastpage.png | Bin 0 -> 661 bytes .../phpMyAdmin/themes/pmahomme/img/b_more.png | Bin 0 -> 111 bytes .../phpMyAdmin/themes/pmahomme/img/b_move.png | Bin 0 -> 381 bytes .../themes/pmahomme/img/b_newdb.png | Bin 0 -> 585 bytes .../themes/pmahomme/img/b_no_favorite.png | Bin 0 -> 377 bytes .../phpMyAdmin/themes/pmahomme/img/b_plus.png | Bin 0 -> 143 bytes .../themes/pmahomme/img/b_props.png | Bin 0 -> 573 bytes .../themes/pmahomme/img/b_report.png | Bin 0 -> 555 bytes .../themes/pmahomme/img/b_sbrowse.png | Bin 0 -> 486 bytes .../themes/pmahomme/img/b_snewtbl.png | Bin 0 -> 653 bytes .../phpMyAdmin/themes/pmahomme/img/b_sql.png | Bin 0 -> 680 bytes .../themes/pmahomme/img/b_sqlhelp.png | Bin 0 -> 512 bytes .../phpMyAdmin/themes/pmahomme/img/b_undo.png | Bin 0 -> 506 bytes .../themes/pmahomme/img/bd_drop.png | Bin 0 -> 340 bytes .../themes/pmahomme/img/bd_index.png | Bin 0 -> 335 bytes .../themes/pmahomme/img/bd_insrow.png | Bin 0 -> 163 bytes .../themes/pmahomme/img/bd_sbrowse.png | Bin 0 -> 271 bytes .../themes/pmahomme/img/bd_select.png | Bin 0 -> 325 bytes .../pmahomme/img/centralColumns_delete.png | Bin 0 -> 683 bytes .../themes/pmahomme/img/col_drop.png | Bin 0 -> 111 bytes .../themes/pmahomme/img/col_pointer_ver.png | Bin 0 -> 107 bytes .../themes/pmahomme/img/console.png | Bin 0 -> 292 bytes .../themes/pmahomme/img/designer/1.png | Bin 0 -> 90 bytes .../themes/pmahomme/img/designer/8.png | Bin 0 -> 81 bytes .../pmahomme/img/designer/Field_small.png | Bin 0 -> 240 bytes .../themes/pmahomme/img/designer/and_icon.png | Bin 0 -> 715 bytes .../themes/pmahomme/img/designer/bottom.png | Bin 0 -> 646 bytes .../pmahomme/img/designer/downarrow2.png | Bin 0 -> 682 bytes .../themes/pmahomme/img/designer/favicon.ico | Bin 0 -> 1150 bytes .../themes/pmahomme/img/designer/minus.png | Bin 0 -> 974 bytes .../themes/pmahomme/img/designer/page_add.png | Bin 0 -> 694 bytes .../pmahomme/img/designer/query_builder.png | Bin 0 -> 603 bytes .../themes/pmahomme/img/designer/relation.png | Bin 0 -> 242 bytes .../pmahomme/img/designer/rightarrow2.png | Bin 0 -> 666 bytes .../themes/pmahomme/img/designer/save.png | Bin 0 -> 402 bytes .../pmahomme/img/designer/toggle_lines.png | Bin 0 -> 415 bytes .../pmahomme/img/designer/uparrow2_m.png | Bin 0 -> 643 bytes .../themes/pmahomme/img/lightbulb.png | Bin 0 -> 696 bytes .../themes/pmahomme/img/lightbulb_off.png | Bin 0 -> 612 bytes .../phpMyAdmin/themes/pmahomme/img/more.png | Bin 0 -> 85 bytes .../themes/pmahomme/img/new_data.png | Bin 0 -> 260 bytes .../themes/pmahomme/img/new_data_hovered.png | Bin 0 -> 260 bytes .../img/new_data_selected_hovered.png | Bin 0 -> 180 bytes .../pmahomme/img/new_struct_selected.png | Bin 0 -> 188 bytes .../phpMyAdmin/themes/pmahomme/img/play.png | Bin 0 -> 329 bytes .../themes/pmahomme/img/s_collapseall.png | Bin 0 -> 143 bytes .../themes/pmahomme/img/s_really.png | Bin 0 -> 128 bytes .../themes/pmahomme/img/s_rights.png | Bin 0 -> 461 bytes .../themes/pmahomme/img/s_sortable.png | Bin 0 -> 204 bytes .../themes/pmahomme/img/s_unlink.png | Bin 0 -> 589 bytes .../phpMyAdmin/themes/pmahomme/img/s_vars.png | Bin 0 -> 523 bytes .../themes/pmahomme/img/zoom-plus-mini.png | Bin 0 -> 320 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 0 -> 73 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 0 -> 126 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 0 -> 185 bytes .../jquery/images/ui-icons_cd0a0a_256x240.png | Bin 0 -> 3765 bytes .../themes/pmahomme/jquery/jquery-ui.css | 1312 + .../themes/pmahomme/scss/_breadcrumb.scss | 22 + .../themes/pmahomme/scss/_designer.scss | 497 + .../themes/pmahomme/scss/_forms.scss | 5 + .../themes/pmahomme/scss/_jqplot.scss | 275 + .../themes/pmahomme/scss/_modal.scss | 3 + .../themes/pmahomme/scss/_navigation.scss | 463 + .../themes/pmahomme/scss/_variables.scss | 177 + .../0b/0bcbee1e66d755177eefc8651966f2f3.php | 83 + .../15/156fd6d20ca5599b0aedac6af12c13cb.php | 294 + .../22/220b04883aa1be571bcd1ea00366d93d.php | 99 + .../26/26578e154a0dc2df1ffe8e4fc27dd743.php | 92 + .../26/269ac5a202dc23f6c0a1e4a38cb7c094.php | 212 + .../2a/2ab50c07c679324bfe0210bb386f1b4e.php | 243 + .../2a/2af2f76feaa582e62dc48d1b2407c504.php | 99 + .../2d/2d4c4b72820f2074a6b15627c7661a83.php | 90 + .../35/353f61a45fe879514c449781542c6495.php | 67 + .../4a/4a543b9337678ea9ce355445527b6e00.php | 118 + .../53/53d8ffa9e99720fa10d62959fe772d31.php | 476 + .../5d/5d66fa2f3301978ff7ecb03a98299ab8.php | 79 + .../64/64faf96ca52d1d9dcc8936ca6d240dd9.php | 1594 + .../68/6815bcfe05c216aa56060e7c8acaadc1.php | 373 + .../6b/6bd853fb5225b6a7aef98f477cad0eae.php | 133 + .../73/73d2652d8fdb24e553f8c2c859c85abb.php | 90 + .../7e/7ec8ff79d0910373bda2ab5f7b775566.php | 141 + .../7f/7f9d7eb1fce94f372f4786ece6d9b303.php | 757 + .../8f/8f49fb1d1444954616e2f57a568edd17.php | 258 + .../90/903bb4d86a52617f11388acd5e8b630b.php | 73 + .../9e/9e86da622528ad18f875b9906ddc7e47.php | 428 + .../ac/ac3dec8d7b12e3b2b4ad59bc47b74b50.php | 324 + .../b8/b8a339fcf028465119a68f7bc5023668.php | 299 + .../ce/cec3d5ebad23eec1dee19af09f0c53ac.php | 309 + .../d6/d68297e98d7671d85978d6198ae77b26.php | 419 + .../e1/e16bfe2d50d183748778b292c372d154.php | 703 + .../vendor/bacon/bacon-qr-code/LICENSE | 22 + .../vendor/bacon/bacon-qr-code/README.md | 39 + .../bacon-qr-code/src/Common/EcBlock.php | 49 + .../bacon-qr-code/src/Encoder/ByteMatrix.php | 150 + .../bacon-qr-code/src/Encoder/Encoder.php | 668 + .../bacon-qr-code/src/Encoder/MatrixUtil.php | 513 + .../src/Exception/OutOfBoundsException.php | 8 + .../bacon-qr-code/src/Renderer/Color/Cmyk.php | 103 + .../src/Renderer/Eye/CompositeEye.php | 38 + .../src/Renderer/Eye/EyeInterface.php | 26 + .../src/Renderer/Image/EpsImageBackEnd.php | 376 + .../src/Renderer/Module/DotsModule.php | 63 + .../src/Renderer/Module/EdgeIterator/Edge.php | 100 + .../src/Renderer/Module/ModuleInterface.php | 18 + .../src/Renderer/Module/RoundnessModule.php | 129 + .../src/Renderer/Path/EllipticArc.php | 278 + .../bacon-qr-code/src/Renderer/Path/Move.php | 41 + .../src/Renderer/RendererStyle/Gradient.php | 46 + .../vendor/code-lts/u2f-php-server/LICENCE | 26 + .../code-lts/u2f-php-server/composer.json | 39 + .../vendor/composer/autoload_namespaces.php | 9 + .../vendor/composer/autoload_psr4.php | 46 + .../vendor/composer/autoload_real.php | 80 + .../vendor/composer/ca-bundle/res/cacert.pem | 3232 ++ .../phpMyAdmin/vendor/dasprid/enum/README.md | 164 + .../vendor/dasprid/enum/composer.json | 31 + .../enum/src/Exception/ExceptionInterface.php | 10 + .../SerializeNotSupportedException.php | 10 + .../UnserializeNotSupportedException.php | 10 + .../vendor/fig/http-message-util/CHANGELOG.md | 147 + .../vendor/fig/http-message-util/README.md | 17 + .../src/StatusCodeInterface.php | 107 + .../vendor/google/recaptcha/composer.json | 39 + .../src/ReCaptcha/RequestMethod/Curl.php | 82 + .../src/ReCaptcha/RequestMethod/CurlPost.php | 104 + .../src/ReCaptcha/RequestMethod/Post.php | 88 + .../vendor/nikic/fast-route/LICENSE | 31 + .../fast-route/src/BadRouteException.php | 7 + .../nikic/fast-route/src/Dispatcher.php | 26 + .../vendor/nikic/fast-route/src/Route.php | 47 + .../nikic/fast-route/src/RouteCollector.php | 152 + .../nikic/fast-route/src/RouteParser/Std.php | 87 + .../vendor/nikic/fast-route/src/functions.php | 74 + .../constant_time_encoding/LICENSE.txt | 48 + .../src/Base64DotSlash.php | 88 + .../src/Base64DotSlashOrdered.php | 82 + .../constant_time_encoding/src/Binary.php | 87 + .../sodium_compat/.github/workflows/psalm.yml | 33 + .../vendor/paragonie/sodium_compat/LICENSE | 16 + .../paragonie/sodium_compat/appveyor.yml | 27 + .../paragonie/sodium_compat/autoload-php7.php | 31 + .../paragonie/sodium_compat/composer.json | 66 + .../paragonie/sodium_compat/lib/constants.php | 52 + .../sodium_compat/lib/php72compat.php | 1369 + .../sodium_compat/lib/php72compat_const.php | 92 + .../sodium_compat/lib/ristretto255.php | 239 + .../namespaced/Core/Curve25519.php | 7 + .../namespaced/Core/XChaCha20.php | 7 + .../sodium_compat/namespaced/File.php | 7 + .../paragonie/sodium_compat/psalm-above-3.xml | 56 + .../paragonie/sodium_compat/psalm-below-3.xml | 42 + .../sodium_compat/src/Core/BLAKE2b.php | 797 + .../sodium_compat/src/Core/Curve25519.php | 3836 +++ .../src/Core/Curve25519/Ge/Cached.php | 65 + .../sodium_compat/src/Core/Ed25519.php | 551 + .../sodium_compat/src/Core/Poly1305.php | 63 + .../sodium_compat/src/Core/Poly1305/State.php | 445 + .../sodium_compat/src/Core32/ChaCha20/Ctx.php | 130 + .../src/Core32/ChaCha20/IetfCtx.php | 39 + .../src/Core32/Curve25519/Ge/Cached.php | 65 + .../src/Core32/Curve25519/Ge/P3.php | 65 + .../phpmyadmin/motranslator/CHANGELOG.md | 100 + .../src/Cache/ApcuCacheFactory.php | 29 + .../motranslator/src/StringReader.php | 116 + .../motranslator/src/Translator.php | 388 + .../phpmyadmin/motranslator/src/functions.php | 200 + .../vendor/phpmyadmin/shapefile/CHANGELOG.md | 131 + .../vendor/phpmyadmin/shapefile/README.md | 57 + .../phpmyadmin/shapefile/src/ShapeRecord.php | 900 + .../vendor/phpmyadmin/sql-parser/LICENSE.txt | 339 + .../vendor/phpmyadmin/sql-parser/README.md | 137 + .../locale/az/LC_MESSAGES/sqlparser.mo | Bin 0 -> 3420 bytes .../locale/be@latin/LC_MESSAGES/sqlparser.mo | Bin 0 -> 4503 bytes .../locale/bn/LC_MESSAGES/sqlparser.mo | Bin 0 -> 1093 bytes .../locale/cy/LC_MESSAGES/sqlparser.mo | Bin 0 -> 544 bytes .../locale/es/LC_MESSAGES/sqlparser.mo | Bin 0 -> 4518 bytes .../locale/he/LC_MESSAGES/sqlparser.mo | Bin 0 -> 6153 bytes .../locale/hu/LC_MESSAGES/sqlparser.mo | Bin 0 -> 3514 bytes .../locale/ksh/LC_MESSAGES/sqlparser.mo | Bin 0 -> 498 bytes .../locale/mk/LC_MESSAGES/sqlparser.mo | Bin 0 -> 507 bytes .../locale/ne/LC_MESSAGES/sqlparser.mo | Bin 0 -> 486 bytes .../locale/nl/LC_MESSAGES/sqlparser.mo | Bin 0 -> 5255 bytes .../locale/pl/LC_MESSAGES/sqlparser.mo | Bin 0 -> 4884 bytes .../locale/pt_BR/LC_MESSAGES/sqlparser.mo | Bin 0 -> 5419 bytes .../locale/rcf/LC_MESSAGES/sqlparser.mo | Bin 0 -> 524 bytes .../locale/sk/LC_MESSAGES/sqlparser.mo | Bin 0 -> 4506 bytes .../locale/sq/LC_MESSAGES/sqlparser.mo | Bin 0 -> 4385 bytes .../locale/te/LC_MESSAGES/sqlparser.mo | Bin 0 -> 1051 bytes .../locale/tr/LC_MESSAGES/sqlparser.mo | Bin 0 -> 5223 bytes .../locale/ur/LC_MESSAGES/sqlparser.mo | Bin 0 -> 486 bytes .../src/Components/AlterOperation.php | 435 + .../src/Components/CaseExpression.php | 308 + .../sql-parser/src/Components/DataType.php | 179 + .../sql-parser/src/Components/IndexHint.php | 212 + .../sql-parser/src/Components/Reference.php | 162 + .../src/Components/UnionKeyword.php | 36 + .../src/Contexts/ContextMariaDb100300.php | 347 + .../src/Contexts/ContextMySql50100.php | 294 + .../src/Contexts/ContextMySql50700.php | 347 + .../vendor/phpmyadmin/sql-parser/src/Core.php | 51 + .../src/Exceptions/LoaderException.php | 34 + .../phpmyadmin/sql-parser/src/Lexer.php | 1050 + .../src/Statements/CallStatement.php | 43 + .../src/Statements/DeleteStatement.php | 377 + .../src/Statements/ExplainStatement.php | 15 + .../src/Statements/LoadStatement.php | 412 + .../src/Statements/ShowStatement.php | 63 + .../phpmyadmin/sql-parser/src/Utils/CLI.php | 319 + .../sql-parser/src/Utils/Routine.php | 144 + .../twig-i18n-extension/CHANGELOG.md | 33 + .../phpmyadmin/twig-i18n-extension/LICENSE | 20 + .../twig-i18n-extension/composer.json | 47 + .../src/Node/TransNode.php | 315 + .../pragmarx/google2fa-qrcode/LICENSE.md | 7 + .../pragmarx/google2fa-qrcode/README.md | 149 + .../google2fa-qrcode/src/QRCode/Bacon.php | 97 + ...atibleWithGoogleAuthenticatorException.php | 11 + .../pragmarx/google2fa/src/Support/QRCode.php | 34 + .../phpMyAdmin/vendor/psr/cache/composer.json | 25 + .../phpMyAdmin/vendor/psr/container/LICENSE | 21 + .../http-factory/src/UriFactoryInterface.php | 17 + .../vendor/psr/http-message/README.md | 13 + .../http-message/src/ResponseInterface.php | 68 + .../src/UploadedFileInterface.php | 123 + .../script/phpMyAdmin/vendor/psr/log/LICENSE | 19 + .../psr/log/Psr/Log/LoggerAwareTrait.php | 26 + .../vendor/psr/log/Psr/Log/LoggerTrait.php | 142 + .../vendor/ralouphie/getallheaders/README.md | 27 + .../vendor/slim/psr7/src/Cookies.php | 221 + .../slim/psr7/src/Factory/RequestFactory.php | 73 + .../vendor/slim/psr7/src/Headers.php | 321 + .../vendor/slim/psr7/src/Message.php | 191 + .../symfony/cache-contracts/CHANGELOG.md | 5 + .../symfony/cache-contracts/CacheTrait.php | 80 + .../symfony/cache/Adapter/ApcuAdapter.php | 138 + .../cache/Adapter/DoctrineDbalAdapter.php | 397 + .../cache/Adapter/MemcachedAdapter.php | 353 + .../cache/Adapter/ParameterNormalizer.php | 35 + .../Adapter/TraceableTagAwareAdapter.php | 38 + .../vendor/symfony/cache/CHANGELOG.md | 108 + .../CacheCollectorPass.php | 94 + .../DependencyInjection/CachePoolPass.php | 274 + .../CachePoolPrunerPass.php | 64 + .../vendor/symfony/cache/DoctrineProvider.php | 124 + .../cache/Marshaller/DeflateMarshaller.php | 53 + .../cache/Marshaller/TagAwareMarshaller.php | 89 + .../Messenger/EarlyExpirationDispatcher.php | 61 + .../phpMyAdmin/vendor/symfony/cache/README.md | 19 + .../symfony/config/Builder/Property.php | 75 + .../config/Definition/Builder/ExprBuilder.php | 246 + .../Builder/IntegerNodeDefinition.php | 32 + .../Definition/Builder/MergeBuilder.php | 63 + .../Builder/NodeParentInterface.php | 21 + .../Builder/NumericNodeDefinition.php | 73 + .../Exception/InvalidDefinitionException.php | 21 + .../Exception/InvalidTypeException.php | 21 + .../Exception/UnsetKeyException.php | 22 + .../symfony/config/Definition/IntegerNode.php | 46 + .../symfony/config/Loader/LoaderInterface.php | 52 + .../symfony/config/Loader/LoaderResolver.php | 68 + .../config/Loader/LoaderResolverInterface.php | 30 + .../Util/Exception/InvalidXmlException.php | 22 + .../Util/Exception/XmlParsingException.php | 21 + .../Argument/AbstractArgument.php | 41 + .../Argument/ReferenceSetArgumentTrait.php | 54 + .../Argument/RewindableGenerator.php | 46 + .../Argument/TaggedIteratorArgument.php | 73 + .../Compiler/InlineServiceDefinitionsPass.php | 223 + .../RemoveAbstractDefinitionsPass.php | 33 + .../Compiler/RemovePrivateAliasesPass.php | 39 + .../Compiler/ResolveBindingsPass.php | 246 + .../Compiler/ResolveChildDefinitionsPass.php | 198 + .../Compiler/ResolveClassPass.php | 40 + .../Compiler/ResolveNamedArgumentsPass.php | 127 + .../ResolveParameterPlaceHoldersPass.php | 98 + .../ResolveServiceSubscribersPass.php | 52 + .../Compiler/ServiceReferenceGraph.php | 99 + .../Compiler/ServiceReferenceGraphEdge.php | 99 + .../Compiler/ServiceReferenceGraphNode.php | 118 + .../dependency-injection/Container.php | 434 + .../ContainerAwareInterface.php | 25 + .../dependency-injection/Dumper/Dumper.php | 29 + .../dependency-injection/Dumper/Preloader.php | 131 + .../dependency-injection/Dumper/XmlDumper.php | 395 + .../InvalidParameterTypeException.php | 35 + .../Exception/RuntimeException.php | 21 + .../ServiceCircularReferenceException.php | 41 + .../Exception/ServiceNotFoundException.php | 67 + .../ExpressionLanguageProvider.php | 50 + .../LazyProxy/PhpDumper/NullDumper.php | 48 + .../LazyProxy/ProxyHelper.php | 77 + .../Loader/ClosureLoader.php | 49 + .../Configurator/ContainerConfigurator.php | 212 + .../Loader/Configurator/EnvConfigurator.php | 224 + .../Configurator/ParametersConfigurator.php | 57 + .../Traits/AutoconfigureTrait.php | 31 + .../Configurator/Traits/FactoryTrait.php | 38 + .../Loader/Configurator/Traits/FileTrait.php | 27 + .../Configurator/Traits/ParentTrait.php | 46 + .../Configurator/Traits/PropertyTrait.php | 27 + .../Loader/FileLoader.php | 247 + .../Loader/PhpFileLoader.php | 211 + .../dependency-injection/Parameter.php | 35 + .../EnvPlaceholderParameterBag.php | 154 + .../ParameterBag/ParameterBagInterface.php | 106 + .../dependency-injection/ReverseContainer.php | 81 + .../symfony/dependency-injection/Variable.php | 43 + .../dependency-injection/composer.json | 56 + .../deprecation-contracts/CHANGELOG.md | 5 + .../symfony/deprecation-contracts/LICENSE | 19 + .../deprecation-contracts/composer.json | 35 + .../symfony/expression-language/Compiler.php | 147 + .../expression-language/Expression.php | 37 + .../ExpressionLanguage.php | 182 + .../Node/ArgumentsNode.php | 40 + .../expression-language/Node/ConstantNode.php | 81 + .../expression-language/Node/NameNode.php | 45 + .../expression-language/Node/UnaryNode.php | 66 + .../symfony/expression-language/composer.json | 30 + .../vendor/symfony/filesystem/CHANGELOG.md | 82 + .../Exception/ExceptionInterface.php | 21 + .../Exception/FileNotFoundException.php | 34 + .../filesystem/Exception/RuntimeException.php | 19 + .../symfony/polyfill-mbstring/Mbstring.php | 873 + .../Resources/unidata/lowerCase.php | 1397 + .../Resources/unidata/upperCase.php | 1489 + .../symfony/polyfill-mbstring/composer.json | 41 + .../vendor/symfony/polyfill-php73/README.md | 18 + .../Resources/stubs/JsonException.php | 16 + .../symfony/polyfill-php73/bootstrap.php | 31 + .../symfony/polyfill-php73/composer.json | 36 + .../symfony/polyfill-php80/PhpToken.php | 103 + .../Resources/stubs/UnhandledMatchError.php | 7 + .../symfony/polyfill-php80/composer.json | 40 + .../symfony/polyfill-php81/composer.json | 36 + .../symfony/service-contracts/CHANGELOG.md | 5 + .../service-contracts/ResetInterface.php | 30 + .../vendor/symfony/var-exporter/CHANGELOG.md | 12 + .../Exception/ExceptionInterface.php | 16 + .../var-exporter/Internal/Reference.php | 30 + .../tecnickcom/tcpdf/fonts/dejavusans.php | 16 + .../tcpdf/include/tcpdf_font_data.php | 18447 ++++++++++++ .../vendor/tecnickcom/tcpdf/tcpdf.php | 24729 ++++++++++++++++ .../vendor/tecnickcom/tcpdf/tcpdf_import.php | 104 + .../phpMyAdmin/vendor/twig/twig/composer.json | 50 + .../twig/twig/src/Cache/FilesystemCache.php | 87 + .../vendor/twig/twig/src/Cache/NullCache.php | 38 + .../twig/twig/src/Error/RuntimeError.php | 22 + .../twig/src/Extension/EscaperExtension.php | 416 + .../twig/src/Extension/ExtensionInterface.php | 68 + .../twig/src/Extension/GlobalsInterface.php | 25 + .../Extension/RuntimeExtensionInterface.php | 19 + .../twig/src/Extension/StagingExtension.php | 100 + .../src/Extension/StringLoaderExtension.php | 42 + .../twig/twig/src/Loader/ArrayLoader.php | 77 + .../twig/twig/src/Loader/ChainLoader.php | 119 + .../twig/twig/src/Loader/LoaderInterface.php | 49 + .../twig/twig/src/Node/CheckSecurityNode.php | 88 + .../src/Node/Expression/Binary/AddBinary.php | 23 + .../Node/Expression/Binary/GreaterBinary.php | 39 + .../Node/Expression/Binary/MatchesBinary.php | 33 + .../Node/Expression/Binary/NotEqualBinary.php | 39 + .../Expression/Binary/StartsWithBinary.php | 35 + .../Node/Expression/ConditionalExpression.php | 36 + .../Node/Expression/ConstantExpression.php | 28 + .../Node/Expression/Filter/DefaultFilter.php | 52 + .../src/Node/Expression/FilterExpression.php | 40 + .../src/Node/Expression/GetAttrExpression.php | 87 + .../Node/Expression/MethodCallExpression.php | 62 + .../Node/Expression/Unary/AbstractUnary.php | 34 + .../src/Node/Expression/Unary/NegUnary.php | 23 + .../vendor/twig/twig/src/Node/ForLoopNode.php | 49 + .../vendor/twig/twig/src/Node/ForNode.php | 107 + .../vendor/twig/twig/src/Node/IncludeNode.php | 106 + .../vendor/twig/twig/src/Node/PrintNode.php | 39 + .../vendor/twig/twig/src/Node/WithNode.php | 70 + .../src/NodeVisitor/EscaperNodeVisitor.php | 208 + .../twig/src/Profiler/Dumper/HtmlDumper.php | 47 + .../NodeVisitor/ProfilerNodeVisitor.php | 70 + .../vendor/twig/twig/src/Profiler/Profile.php | 181 + .../RuntimeLoader/ContainerRuntimeLoader.php | 37 + .../RuntimeLoader/RuntimeLoaderInterface.php | 27 + .../SecurityNotAllowedFunctionError.php | 33 + .../Sandbox/SecurityNotAllowedMethodError.php | 40 + .../SecurityNotAllowedPropertyError.php | 40 + .../vendor/twig/twig/src/Source.php | 51 + .../phpMyAdmin/vendor/twig/twig/src/Token.php | 178 + .../src/TokenParser/AutoEscapeTokenParser.php | 58 + .../src/TokenParser/ExtendsTokenParser.php | 52 + .../twig/src/TokenParser/FlushTokenParser.php | 38 + .../twig/src/TokenParser/IfTokenParser.php | 89 + .../src/TokenParser/IncludeTokenParser.php | 69 + .../twig/src/TokenParser/MacroTokenParser.php | 66 + .../vendor/twig/twig/src/TwigFunction.php | 122 + .../vendor/webmozart/assert/src/Assert.php | 2066 ++ .../assert/src/InvalidArgumentException.php | 16 + .../vendor/webmozart/assert/src/Mixin.php | 2916 ++ .../williamdes/mariadb-mysql-kbs/CHANGELOG.md | 732 + .../williamdes/mariadb-mysql-kbs/README.md | 54 + .../mariadb-mysql-kbs/src/Search.php | 185 + 940 files changed, 181456 insertions(+), 189 deletions(-) create mode 100644 Sources/php_script/script/phpMyAdmin/config.sample.inc.php create mode 100644 Sources/php_script/script/phpMyAdmin/dafldev/.idea/dafldev.iml create mode 100644 Sources/php_script/script/phpMyAdmin/dafldev/config.php create mode 100644 Sources/php_script/script/phpMyAdmin/dafldev/db.php create mode 100644 Sources/php_script/script/phpMyAdmin/dafldev/distance.php create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_images/line_chart.png create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_images/query_result_operations.png create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_images/scatter_chart.png create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/faq.rst.txt create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/glossary.rst.txt create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/privileges.rst.txt create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/setup.rst.txt create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/transformations.rst.txt create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/two_factor.rst.txt create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_static/classic.css create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_static/language_data.js create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/config.html create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/copyright.html create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/faq.html create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/genindex.html create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/other.html create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/transformations.html create mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/vendors.html create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/common.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/console.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/cross_framing_protection.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/database/events.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/database/operations.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/database/query_generator.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/database/search.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/database/tracking.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/designer/init.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/designer/page.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/export_output.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/gis_data_editor.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/indexes.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/menu_resizer.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/server/privileges.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/server/status/monitor.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/server/status/variables.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/server/user_groups.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/table/change.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/table/chart.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/table/select.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/transformations/sql_editor.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/u2f.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/cross_framing_protection.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/database/search.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/database/tracking.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/database/triggers.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/designer/page.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/import.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/indexes.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/makegrid.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/normalization.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/replication.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/server/plugins.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/server/status/queries.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/setup/scripts.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/sql.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/table/find_replace.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/table/relation.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/src/transformations/sql_editor.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/bootstrap/bootstrap.bundle.min.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/codemirror/addon/runmode/runmode.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.highlighter.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/jquery/MIT-LICENSE.txt create mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/jquery/jquery.debounce-1.0.6.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/openlayers/OpenLayers.js create mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/openlayers/theme/ol.css create mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/zxcvbn-ts.js.map create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/advisory_rules_mysql_before80003.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Command/TwigLintCommand.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplay.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplayTemplate.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/BaseForm.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/Page/ExportForm.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/Page/NaviForm.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/Setup/ConfigForm.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/User/ExportForm.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/User/SqlForm.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/ServerConfigChecks.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Settings/Console.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Settings/Debug.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Settings/Import.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Settings/Transformations.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/SpecialSchemaLinks.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Features/BookmarkFeature.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Features/ExportTemplatesFeature.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Features/FavoriteTablesFeature.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Features/SqlHistoryFeature.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Features/TrackingFeature.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Relation.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/CheckRelationsController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/CollationConnectionController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/EventsController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/PrivilegesController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/QueryByExampleController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/SearchController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/SqlFormatController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/AddPrefixTableController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/CentralColumns/AddController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/CopyTableController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/CopyTableWithPrefixController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/DropFormController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/EmptyTableController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/FavoriteTableController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/TriggersController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/ErrorReportController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Export/Template/LoadController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Import/StatusController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/LicenseController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Preferences/ImportController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Preferences/MainPanelController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Preferences/TwoFactorController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/CollationsController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/ExportController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/PluginsController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/Privileges/AccountUnlockController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/ReplicationController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/Status/AdvisorController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/Status/Monitor/QueryAnalyzerController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/Variables/GetVariableController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Setup/ConfigController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Setup/ServersController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Sql/RelationalValuesController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/ChartController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/DeleteConfirmController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/DropColumnConfirmationController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/ExportController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/FindReplaceController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/IndexRenameController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/OperationsController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/Partition/AnalyzeController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/RecentFavoriteController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/Structure/BrowseController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/Structure/PartitioningController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/Structure/ReservedWordCheckController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/TriggersController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/TableController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/VersionCheckController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/View/CreateController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/View/OperationsController.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Crypto/Crypto.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Database/Search.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Dbal/DbiExtension.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Dbal/MysqliResult.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Dbal/ResultInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Dbal/TableName.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Encoding.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Engines/Binlog.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Engines/Memory.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Error.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Export/Options.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Export/Template.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/FieldMetadata.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Font.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Header.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Language.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/NodeFactory.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/Node.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/NodeColumn.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/NodeFunctionContainer.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/NodeProcedure.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/NodeTableContainer.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/NodeTriggerContainer.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Normalization.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/OutputBuffering.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/SubPartition.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/TablePartitionDefinition.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportOds.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportSql.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportTexytext.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportMediawiki.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportSql.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ShapeFileImport.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/Upload/UploadNoplugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/Upload/UploadProgress.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/ImportPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Schema/Dia/DiaRelationSchema.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/SchemaPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/PreApPendTransformationsPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/TextFileUploadTransformationsPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptolong.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_XmlEditor.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Application_Octetstream_Download.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Image_JPEG_Link.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Dateformat.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Formatted.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Imagelink.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Json.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TransformationsPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactor/Key.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactorPlugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Options/Items/TextPropertyItem.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Options/OptionsPropertyGroup.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/ExportPluginProperties.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/PluginPropertyItem.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/PropertyItem.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Query/Cache.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Query/Utilities.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Replication.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ReplicationInfo.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ResponseRenderer.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Plugin.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Select.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Data.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Monitor.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Base.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Linux.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Setup/FormProcessing.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Sql.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/StorageEngine.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Maintenance.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Search.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Template.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Theme.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Twig/RelationExtension.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/UserPassword.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/FormatConverter.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/SessionCache.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ZipExtension.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/config.default.php create mode 100644 Sources/php_script/script/phpMyAdmin/libraries/routes.php create mode 100644 Sources/php_script/script/phpMyAdmin/locale/bn/LC_MESSAGES/phpmyadmin.mo create mode 100644 Sources/php_script/script/phpMyAdmin/locale/el/LC_MESSAGES/phpmyadmin.mo create mode 100644 Sources/php_script/script/phpMyAdmin/locale/he/LC_MESSAGES/phpmyadmin.mo create mode 100644 Sources/php_script/script/phpMyAdmin/locale/ia/LC_MESSAGES/phpmyadmin.mo create mode 100644 Sources/php_script/script/phpMyAdmin/locale/si/LC_MESSAGES/phpmyadmin.mo create mode 100644 Sources/php_script/script/phpMyAdmin/locale/tr/LC_MESSAGES/phpmyadmin.mo create mode 100644 Sources/php_script/script/phpMyAdmin/locale/zh_TW/LC_MESSAGES/phpmyadmin.mo create mode 100644 Sources/php_script/script/phpMyAdmin/package.json create mode 100644 Sources/php_script/script/phpMyAdmin/setup/config.php create mode 100644 Sources/php_script/script/phpMyAdmin/setup/styles.css.map create mode 100644 Sources/php_script/script/phpMyAdmin/templates/columns_definitions/column_name.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/columns_definitions/partitions.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/components/error_message.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit_table_row.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/designer/schema_export.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/events/editor_form.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/events/row.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/multi_table_query/form.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/operations/index.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/routines/editor_form.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/routines/parameter_row.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/search/main.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/structure/overhead.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/structure/structure_table_row.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/tracking/tables.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/triggers/list.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/display/results/table.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/error/report_form.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/filter.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/modals/unhide_nav_item.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/navigation/tree/node.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/navigation/tree/quick_warp.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/preferences/autoload.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/configure.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/confirm.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/recent_favorite_table_recent.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/select_all.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/binlog/index.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/engines/index.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/add_user.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/change_password.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/get_user_link.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/initials_row.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/login_information_fields.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/new_user_ajax.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/privileges_summary.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/user_properties.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/users_overview.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/replication/primary_add_replica_user.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/status/processes/index.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/status/processes/list.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/user_groups/edit_user_groups.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/variables/index.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/setup/servers/index.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/sql/sql_query_results.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/chart/tbl_chart.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/delete/confirm.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/find_replace/replace_preview.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/gis_visualization/gis_visualization.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/import/index.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/maintenance/check.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/maintenance/optimize.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/operations/view.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/partition/optimize.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/relation/common_form.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/search/index.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/structure/display_structure.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/tracking/structure_snapshot_columns.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/test/gettext/notes.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/test/gettext/pgettext.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/test/raw_output.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/test/static.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/top_menu.twig create mode 100644 Sources/php_script/script/phpMyAdmin/templates/user_password.twig create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/css/theme.css create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/arrow_ltr.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/asc_order.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_dbstatistics.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_docsql.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_key.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_lastpage.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_left.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_tipp.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_drop.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_firstpage.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_lastpage.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_spatial.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_drop.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_pointer.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_pointer_ver.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/console.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-minus.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-plus.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/1.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/4.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/7.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/Field_small.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/and_icon.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bord.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bottom.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/downarrow1.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/favicon.ico create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/grid.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/help.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/or_icon.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/other_table.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/pdf.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/reload.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/rightarrow2.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/top_panel.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/export.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/field-index-text.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag-plus.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/lightbulb.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/link-broken.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_data.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_data_selected_hovered.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_struct.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_struct_selected.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_struct_selected_hovered.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/notice.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/pma_logo2.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/replication.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine-plus.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/s_really.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/save.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/search-replace.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/table.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/tree-collapse.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/triangle-right-1.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/user-props.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/version.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/vertical_line.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/visibility-hidden.svg create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-icons_888888_256x240.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-icons_cd0a0a_256x240.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/jquery-ui.css create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/css/mono-theme.rtl.css create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/css/theme.css create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/ajax_clock_small.gif create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_ltr.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_rtl.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_chart.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_close.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_column_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_edit.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_empty.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_event_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_favorite.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_find_replace.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_home.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_key.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_lastpage.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_more.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_move.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_pdfdoc.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_plus.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_routine_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_saveimage.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_sbrowse.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_sqldoc.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_tblanalyse.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_tbloptimize.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_unique.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_usrlist.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_versions.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_empty.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_insrow.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_lastpage.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_primary.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_spatial.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/centralColumns_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/centralColumns_delete.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/col_pointer.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/database.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/2leftarrow.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/2rightarrow.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/2rightarrow_m.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/anchor.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/ang_direct.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/display_field.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/downarrow2.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/exec.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/export.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/grid.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/help.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/left_panel_tab.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/minus.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/page_delete.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/pdf.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/toggle_lines.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/viewInFullscreen.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/eye_grey.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/lightbulb.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/more.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/new_struct_hovered.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/normalize.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_asc.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_attention.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_cancel.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_link.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_notice.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_success.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_top.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_vars.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/sprites.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/zoom-plus-mini.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_2e83ff_256x240.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_888888_256x240.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/scss/_card.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/scss/_font.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/scss/_print.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/scss/_variables.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/scss/blueeyes-theme.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/theme.json create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/css/theme.css.map create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/css/theme.rtl.css create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/arrow_ltr.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_calendar.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_close.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_column_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_comment.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_deltbl.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_export.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_globe.gif create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_home.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_index_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_insrow.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_key.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_move.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_primary.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_relations.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_routines.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_save.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_saveimage.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_select.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_spatial.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_table_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_tblanalyse.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_tipp.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_trigger_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_triggers.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrcheck.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrdrop.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_view.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_view_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_views.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_deltbl.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_edit.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_export.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_index.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_insrow.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_routine_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_sbrowse.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_select.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/centralColumns.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/east-mini.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/error.ico create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/logo_right.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/new_struct_selected.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/normalize.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/north-mini.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_desc.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_fulltext.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_info.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_lang.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_link.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_loggoff.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_okay.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_really.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_sync.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_theme.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_unlink.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/south-mini.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/toggle-rtl.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/window-new.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/jquery/images/ui-icons_cd0a0a_256x240.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/jquery/jquery-ui.css create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/scss/_common.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/scss/_reboot.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/scss/_variables.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/scss/theme.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/theme.json create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.css.map create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.rtl.css create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_ltr.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_rtl.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docs.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docsql.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_find_replace.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_home.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_index.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_key.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_lastpage.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_more.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_move.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_newdb.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_no_favorite.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_plus.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_props.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_report.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_sbrowse.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_snewtbl.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_sql.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_sqlhelp.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_undo.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/bd_drop.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/bd_index.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/bd_insrow.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/bd_sbrowse.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/bd_select.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/centralColumns_delete.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_drop.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_pointer_ver.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/console.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/1.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/8.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/Field_small.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/and_icon.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/bottom.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/downarrow2.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/favicon.ico create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/minus.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/page_add.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/query_builder.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/relation.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/rightarrow2.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/save.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/toggle_lines.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/uparrow2_m.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/lightbulb.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/lightbulb_off.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/more.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data_hovered.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data_selected_hovered.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_struct_selected.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/play.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_collapseall.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_really.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_rights.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_sortable.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_unlink.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_vars.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/zoom-plus-mini.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_glass_65_ffffff_1x400.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_glass_75_dadada_1x400.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_glass_95_fef1ec_1x400.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-icons_cd0a0a_256x240.png create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/jquery-ui.css create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_breadcrumb.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_designer.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_forms.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_jqplot.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_modal.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_navigation.scss create mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_variables.scss create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/0b/0bcbee1e66d755177eefc8651966f2f3.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/15/156fd6d20ca5599b0aedac6af12c13cb.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/22/220b04883aa1be571bcd1ea00366d93d.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/26/26578e154a0dc2df1ffe8e4fc27dd743.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/26/269ac5a202dc23f6c0a1e4a38cb7c094.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2ab50c07c679324bfe0210bb386f1b4e.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2af2f76feaa582e62dc48d1b2407c504.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/2d/2d4c4b72820f2074a6b15627c7661a83.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/35/353f61a45fe879514c449781542c6495.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/4a/4a543b9337678ea9ce355445527b6e00.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/53/53d8ffa9e99720fa10d62959fe772d31.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/5d/5d66fa2f3301978ff7ecb03a98299ab8.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/64/64faf96ca52d1d9dcc8936ca6d240dd9.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/68/6815bcfe05c216aa56060e7c8acaadc1.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/6b/6bd853fb5225b6a7aef98f477cad0eae.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/73/73d2652d8fdb24e553f8c2c859c85abb.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/7e/7ec8ff79d0910373bda2ab5f7b775566.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/7f/7f9d7eb1fce94f372f4786ece6d9b303.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/8f/8f49fb1d1444954616e2f57a568edd17.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/90/903bb4d86a52617f11388acd5e8b630b.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/9e/9e86da622528ad18f875b9906ddc7e47.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/ac/ac3dec8d7b12e3b2b4ad59bc47b74b50.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/b8/b8a339fcf028465119a68f7bc5023668.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/ce/cec3d5ebad23eec1dee19af09f0c53ac.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/d6/d68297e98d7671d85978d6198ae77b26.php create mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/e1/e16bfe2d50d183748778b292c372d154.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/LICENSE create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/RoundnessModule.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/LICENCE create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_namespaces.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_psr4.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_real.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/composer/ca-bundle/res/cacert.pem create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/ExceptionInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/SerializeNotSupportedException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/UnserializeNotSupportedException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/fig/http-message-util/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/fig/http-message-util/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/fig/http-message-util/src/StatusCodeInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/CurlPost.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/LICENSE create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/BadRouteException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/Dispatcher.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/Route.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteCollector.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteParser/Std.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/functions.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/LICENSE.txt create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Binary.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/.github/workflows/psalm.yml create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/LICENSE create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/appveyor.yml create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/autoload-php7.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/constants.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/php72compat.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/php72compat_const.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/ristretto255.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/namespaced/Core/XChaCha20.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/namespaced/File.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/psalm-above-3.xml create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/psalm-below-3.xml create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Ed25519.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Cache/ApcuCacheFactory.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/StringReader.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Translator.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/functions.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/src/ShapeRecord.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/LICENSE.txt create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/az/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/be@latin/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/bn/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/cy/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/es/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/he/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/hu/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ksh/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/mk/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ne/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/nl/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/pl/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/pt_BR/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/rcf/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/sk/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/sq/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/te/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/tr/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ur/LC_MESSAGES/sqlparser.mo create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/AlterOperation.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/CaseExpression.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/DataType.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/IndexHint.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/Reference.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/UnionKeyword.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100300.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50100.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50700.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Core.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Exceptions/LoaderException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Lexer.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/CallStatement.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/DeleteStatement.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ExplainStatement.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/LoadStatement.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ShowStatement.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/CLI.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/Routine.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/LICENSE create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/src/Node/TransNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/LICENSE.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/src/QRCode/Bacon.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa/src/Exceptions/IncompatibleWithGoogleAuthenticatorException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa/src/Support/QRCode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/cache/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/container/LICENSE create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/http-factory/src/UriFactoryInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/http-message/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/http-message/src/ResponseInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/http-message/src/UploadedFileInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/log/LICENSE create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/log/Psr/Log/LoggerAwareTrait.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/log/Psr/Log/LoggerTrait.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/ralouphie/getallheaders/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Cookies.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Factory/RequestFactory.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Headers.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Message.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CacheTrait.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ApcuAdapter.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/MemcachedAdapter.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ParameterNormalizer.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DoctrineProvider.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/DeflateMarshaller.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Builder/Property.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/ExprBuilder.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/MergeBuilder.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NodeParentInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidDefinitionException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidTypeException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/UnsetKeyException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/IntegerNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolver.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolverInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/InvalidXmlException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/XmlParsingException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/AbstractArgument.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Container.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ContainerAwareInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Dumper.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Preloader.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/XmlDumper.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/RuntimeException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ExpressionLanguageProvider.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/ClosureLoader.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/FileLoader.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Parameter.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ReverseContainer.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Variable.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/LICENSE create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Compiler.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Expression.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/ExpressionLanguage.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ArgumentsNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ConstantNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/NameNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/UnaryNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/ExceptionInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/FileNotFoundException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/RuntimeException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Mbstring.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/bootstrap.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/PhpToken.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php81/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/ResetInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Exception/ExceptionInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Internal/Reference.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/fonts/dejavusans.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/include/tcpdf_font_data.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/tcpdf.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/tcpdf_import.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/composer.json create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Cache/FilesystemCache.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Cache/NullCache.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Error/RuntimeError.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/EscaperExtension.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/ExtensionInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/GlobalsInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/StagingExtension.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/StringLoaderExtension.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Loader/ArrayLoader.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Loader/ChainLoader.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Loader/LoaderInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/CheckSecurityNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/ConstantExpression.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/FilterExpression.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/ForLoopNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/ForNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/IncludeNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/PrintNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/WithNode.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Profiler/Profile.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Source.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Token.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/FlushTokenParser.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/IfTokenParser.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/MacroTokenParser.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TwigFunction.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Assert.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/InvalidArgumentException.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Mixin.php create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/CHANGELOG.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/README.md create mode 100644 Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/src/Search.php diff --git a/.idea/libraries/Dart_Packages.xml b/.idea/libraries/Dart_Packages.xml index f8237c9..04e2ec7 100644 --- a/.idea/libraries/Dart_Packages.xml +++ b/.idea/libraries/Dart_Packages.xml @@ -5,686 +5,686 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/Dart_SDK.xml b/.idea/libraries/Dart_SDK.xml index cb79f3d..3dbed52 100644 --- a/.idea/libraries/Dart_SDK.xml +++ b/.idea/libraries/Dart_SDK.xml @@ -1,25 +1,25 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + diff --git a/Sources/php_script/script/phpMyAdmin/config.sample.inc.php b/Sources/php_script/script/phpMyAdmin/config.sample.inc.php new file mode 100644 index 0000000..34b6a9d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/config.sample.inc.php @@ -0,0 +1,160 @@ +. + */ + +declare(strict_types=1); + +/** + * This is needed for cookie based authentication to encrypt password in + * cookie. Needs to be 32 chars long. + */ +$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ + +/** + * Servers configuration + */ +$i = 0; + +/** + * First server + */ +$i++; +/* Authentication type */ +$cfg['Servers'][$i]['auth_type'] = 'cookie'; +/* Server parameters */ +$cfg['Servers'][$i]['host'] = 'localhost'; +$cfg['Servers'][$i]['compress'] = false; +$cfg['Servers'][$i]['AllowNoPassword'] = false; + +/** + * phpMyAdmin configuration storage settings. + */ + +/* User used to manipulate with storage */ +// $cfg['Servers'][$i]['controlhost'] = ''; +// $cfg['Servers'][$i]['controlport'] = ''; +// $cfg['Servers'][$i]['controluser'] = 'pma'; +// $cfg['Servers'][$i]['controlpass'] = 'pmapass'; + +/* Storage database and tables */ +// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; +// $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; +// $cfg['Servers'][$i]['relation'] = 'pma__relation'; +// $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; +// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; +// $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; +// $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; +// $cfg['Servers'][$i]['history'] = 'pma__history'; +// $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; +// $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; +// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; +// $cfg['Servers'][$i]['recent'] = 'pma__recent'; +// $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; +// $cfg['Servers'][$i]['users'] = 'pma__users'; +// $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; +// $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; +// $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; +// $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; +// $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; +// $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; + +/** + * End of servers configuration + */ + +/** + * Directories for saving/loading files from server + */ +$cfg['UploadDir'] = ''; +$cfg['SaveDir'] = ''; + +/** + * Whether to display icons or text or both icons and text in table row + * action segment. Value can be either of 'icons', 'text' or 'both'. + * default = 'both' + */ +//$cfg['RowActionType'] = 'icons'; + +/** + * Defines whether a user should be displayed a "show all (records)" + * button in browse mode or not. + * default = false + */ +//$cfg['ShowAll'] = true; + +/** + * Number of rows displayed when browsing a result set. If the result + * set contains more rows, "Previous" and "Next". + * Possible values: 25, 50, 100, 250, 500 + * default = 25 + */ +//$cfg['MaxRows'] = 50; + +/** + * Disallow editing of binary fields + * valid values are: + * false allow editing + * 'blob' allow editing except for BLOB fields + * 'noblob' disallow editing except for BLOB fields + * 'all' disallow editing + * default = 'blob' + */ +//$cfg['ProtectBinary'] = false; + +/** + * Default language to use, if not browser-defined or user-defined + * (you find all languages in the locale folder) + * uncomment the desired line: + * default = 'en' + */ +//$cfg['DefaultLang'] = 'en'; +//$cfg['DefaultLang'] = 'de'; + +/** + * How many columns should be used for table display of a database? + * (a value larger than 1 results in some information being hidden) + * default = 1 + */ +//$cfg['PropertiesNumColumns'] = 2; + +/** + * Set to true if you want DB-based query history.If false, this utilizes + * JS-routines to display query history (lost by window close) + * + * This requires configuration storage enabled, see above. + * default = false + */ +//$cfg['QueryHistoryDB'] = true; + +/** + * When using DB-based query history, how many entries should be kept? + * default = 25 + */ +//$cfg['QueryHistoryMax'] = 100; + +/** + * Whether or not to query the user before sending the error report to + * the phpMyAdmin team when a JavaScript error occurs + * + * Available options + * ('ask' | 'always' | 'never') + * default = 'ask' + */ +//$cfg['SendErrorReports'] = 'always'; + +/** + * 'URLQueryEncryption' defines whether phpMyAdmin will encrypt sensitive data from the URL query string. + * 'URLQueryEncryptionSecretKey' is a 32 bytes long secret key used to encrypt/decrypt the URL query string. + */ +//$cfg['URLQueryEncryption'] = true; +//$cfg['URLQueryEncryptionSecretKey'] = ''; + +/** + * You can find more configuration options in the documentation + * in the doc/ folder or at . + */ diff --git a/Sources/php_script/script/phpMyAdmin/dafldev/.idea/dafldev.iml b/Sources/php_script/script/phpMyAdmin/dafldev/.idea/dafldev.iml new file mode 100644 index 0000000..c956989 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/dafldev/.idea/dafldev.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/dafldev/config.php b/Sources/php_script/script/phpMyAdmin/dafldev/config.php new file mode 100644 index 0000000..63484ca --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/dafldev/config.php @@ -0,0 +1,14 @@ +getMessage(); + echo $error; +} diff --git a/Sources/php_script/script/phpMyAdmin/dafldev/distance.php b/Sources/php_script/script/phpMyAdmin/dafldev/distance.php new file mode 100644 index 0000000..a2155b0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/dafldev/distance.php @@ -0,0 +1,61 @@ +prepare($query); +$stm->execute(); +$row = $stm->fetchAll(PDO::FETCH_ASSOC); +$lat1=0; +$lng1=0; +$listUser=[]; +Foreach ($row as $col) { + if (strcmp($col['id'], $id) == 0) { + $lat1 = $col['latitude']; + $lng1 = $col['longitude']; + } +} +if ($lat1==0 && $lng1==0){ + print(json_encode("ERROR No user found in the database")); + exit(1); +} + +Foreach ($row as $col) { + if (strcmp($col['id'],$id)!=0) { + $lat2 = $col['latitude']; + $lng2 = $col['longitude']; + $userID = $col['id']; + $idMusic = $col['idMusic']; + $dist = (new distance)->meters($lat1, $lng1, $lat2, $lng2); + if ($dist <= 100) { + $listUser[] = ['user' => $userID, 'music' => $idMusic]; } + } +} + +print(json_encode($listUser)); + + diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_images/line_chart.png b/Sources/php_script/script/phpMyAdmin/doc/html/_images/line_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..4f32fdb501bef8f8bb43e659d22e44d336b51a69 GIT binary patch literal 12716 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 Or1DVnL9v2`-~RzJE%kZ; literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_images/query_result_operations.png b/Sources/php_script/script/phpMyAdmin/doc/html/_images/query_result_operations.png new file mode 100644 index 0000000000000000000000000000000000000000..c789e5331f80ce149284256a5412e9d1a4104bf2 GIT binary patch literal 6750 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

2s@vd<+L^`W6!N;P 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 literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/faq.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/faq.rst.txt new file mode 100644 index 0000000..866a920 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/faq.rst.txt @@ -0,0 +1,2251 @@ +.. _faq: + +FAQ - Frequently Asked Questions +================================ + +Please have a look at our `Link section +`_ on the official +phpMyAdmin homepage for in-depth coverage of phpMyAdmin's features and +or interface. + +.. _faqserver: + +Server +++++++ + +.. _faq1_1: + +1.1 My server is crashing each time a specific action is required or phpMyAdmin sends a blank page or a page full of cryptic characters to my browser, what can I do? +--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Try to set the :config:option:`$cfg['OBGzip']` directive to ``false`` in your +:file:`config.inc.php` file and the ``zlib.output_compression`` directive to +``Off`` in your php configuration file. + +.. _faq1_2: + +1.2 My Apache server crashes when using phpMyAdmin. +--------------------------------------------------- + +You should first try the latest versions of Apache (and possibly MySQL). If +your server keeps crashing, please ask for help in the various Apache support +groups. + +.. seealso:: :ref:`faq1_1` + +.. _faq1_3: + +1.3 (withdrawn). +---------------- + +.. _faq1_4: + +1.4 Using phpMyAdmin on IIS, I'm displayed the error message: "The specified CGI application misbehaved by not returning a complete set of HTTP headers ...". +------------------------------------------------------------------------------------------------------------------------------------------------------------- + +You just forgot to read the *install.txt* file from the PHP +distribution. Have a look at the last message in this `PHP bug report #12061 +`_ from the official PHP bug +database. + +.. _faq1_5: + +1.5 Using phpMyAdmin on IIS, I'm facing crashes and/or many error messages with the HTTP. +----------------------------------------------------------------------------------------- + +This is a known problem with the PHP :term:`ISAPI` filter: it's not so stable. +Please use instead the cookie authentication mode. + +.. _faq1_6: + +1.6 I can't use phpMyAdmin on PWS: nothing is displayed! +-------------------------------------------------------- + +This seems to be a PWS bug. Filippo Simoncini found a workaround (at +this time there is no better fix): remove or comment the ``DOCTYPE`` +declarations (2 lines) from the scripts :file:`libraries/classes/Header.php` +and :file:`index.php`. + +.. _faq1_7: + +1.7 How can I gzip a dump or a CSV export? It does not seem to work. +-------------------------------------------------------------------- + +This feature is based on the ``gzencode()`` +PHP function to be more independent of the platform (Unix/Windows, +Safe Mode or not, and so on). So, you must have Zlib support +(``--with-zlib``). + +.. _faq1_8: + +1.8 I cannot insert a text file in a table, and I get an error about safe mode being in effect. +----------------------------------------------------------------------------------------------- + +Your uploaded file is saved by PHP in the "upload dir", as defined in +:file:`php.ini` by the variable ``upload_tmp_dir`` (usually the system +default is */tmp*). We recommend the following setup for Apache +servers running in safe mode, to enable uploads of files while being +reasonably secure: + +* create a separate directory for uploads: :command:`mkdir /tmp/php` +* give ownership to the Apache server's user.group: :command:`chown + apache.apache /tmp/php` +* give proper permission: :command:`chmod 600 /tmp/php` +* put ``upload_tmp_dir = /tmp/php`` in :file:`php.ini` +* restart Apache + +.. _faq1_9: + +1.9 (withdrawn). +---------------- + +.. _faq1_10: + +1.10 I'm having troubles when uploading files with phpMyAdmin running on a secure server. My browser is Internet Explorer and I'm using the Apache server. +---------------------------------------------------------------------------------------------------------------------------------------------------------- + +As suggested by "Rob M" in the phpWizard forum, add this line to your +*httpd.conf*: + +.. code-block:: apache + + SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown + +It seems to clear up many problems between Internet Explorer and SSL. + +.. _faq1_11: + +1.11 I get an 'open\_basedir restriction' while uploading a file from the import tab. +------------------------------------------------------------------------------------- + +Since version 2.2.4, phpMyAdmin supports servers with open\_basedir +restrictions. However you need to create temporary directory and configure it +as :config:option:`$cfg['TempDir']`. The uploaded files will be moved there, +and after execution of your :term:`SQL` commands, removed. + +.. _faq1_12: + +1.12 I have lost my MySQL root password, what can I do? +------------------------------------------------------- + +phpMyAdmin does authenticate against MySQL server you're using, so to recover +from phpMyAdmin password loss, you need to recover at MySQL level. + +The MySQL manual explains how to `reset the permissions +`_. + +If you are using MySQL server installed by your hosting provider, please +contact their support to recover the password for you. + +.. _faq1_13: + +1.13 (withdrawn). +----------------- + +.. _faq1_14: + +1.14 (withdrawn). +----------------- + +.. _faq1_15: + +1.15 I have problems with *mysql.user* column names. +---------------------------------------------------- + +In previous MySQL versions, the ``User`` and ``Password`` columns were +named ``user`` and ``password``. Please modify your column names to +align with current standards. + +.. _faq1_16: + +1.16 I cannot upload big dump files (memory, HTTP or timeout problems). +----------------------------------------------------------------------- + +Starting with version 2.7.0, the import engine has been re–written and +these problems should not occur. If possible, upgrade your phpMyAdmin +to the latest version to take advantage of the new import features. + +The first things to check (or ask your host provider to check) are the values +of ``max_execution_time``, ``upload_max_filesize``, ``memory_limit`` and +``post_max_size`` in the :file:`php.ini` configuration file. All of these +settings limit the maximum size of data that can be submitted and handled by +PHP. Please note that ``post_max_size`` needs to be larger than +``upload_max_filesize``. There exist several workarounds if your upload is too +big or your hosting provider is unwilling to change the settings: + +* Look at the :config:option:`$cfg['UploadDir']` feature. This allows one to upload a file to the server + via scp, FTP, or your favorite file transfer method. PhpMyAdmin is + then able to import the files from the temporary directory. More + information is available in the :ref:`config` of this document. +* Using a utility (such as `BigDump + `_) to split the files before + uploading. We cannot support this or any third party applications, but + are aware of users having success with it. +* If you have shell (command line) access, use MySQL to import the files + directly. You can do this by issuing the "source" command from within + MySQL: + + .. code-block:: mysql + + source filename.sql; + +.. _faq1_17: + +1.17 Which Database versions does phpMyAdmin support? +----------------------------------------------------- + +For `MySQL `_, versions 5.5 and newer are supported. +For older MySQL versions, our `Downloads `_ page offers older phpMyAdmin versions +(which may have become unsupported). + +For `MariaDB `_, versions 5.5 and newer are supported. + +.. _faq1_17a: + +1.17a I cannot connect to the MySQL server. It always returns the error message, "Client does not support authentication protocol requested by server; consider upgrading MySQL client" +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +You tried to access MySQL with an old MySQL client library. The +version of your MySQL client library can be checked in your phpinfo() +output. In general, it should have at least the same minor version as +your server - as mentioned in :ref:`faq1_17`. This problem is +generally caused by using MySQL version 4.1 or newer. MySQL changed +the authentication hash and your PHP is trying to use the old method. +The proper solution is to use the `mysqli extension +`_ with the proper client library to match +your MySQL installation. More +information (and several workarounds) are located in the `MySQL +Documentation `_. + +.. _faq1_18: + +1.18 (withdrawn). +----------------- + +.. _faq1_19: + +1.19 I can't run the "display relations" feature because the script seems not to know the font face I'm using! +-------------------------------------------------------------------------------------------------------------- + +The :term:`TCPDF` library we're using for this feature requires some special +files to use font faces. Please refers to the `TCPDF manual +`_ to build these files. + +.. _faqmysql: + +1.20 I receive an error about missing mysqli and mysql extensions. +------------------------------------------------------------------ + +To connect to a MySQL server, PHP needs a set of MySQL functions +called "MySQL extension". This extension may be part of the PHP +distribution (compiled-in), otherwise it needs to be loaded +dynamically. Its name is probably *mysqli.so* or *php\_mysqli.dll*. +phpMyAdmin tried to load the extension but failed. Usually, the +problem is solved by installing a software package called "PHP-MySQL" +or something similar. + +There was two interfaces PHP provided as MySQL extensions - ``mysql`` +and ``mysqli``. The ``mysql`` interface was removed in PHP 7.0. + +This problem can be also caused by wrong paths in the :file:`php.ini` or using +wrong :file:`php.ini`. + +Make sure that the extension files do exist in the folder which the +``extension_dir`` points to and that the corresponding lines in your +:file:`php.ini` are not commented out (you can use ``phpinfo()`` to check +current setup): + +.. code-block:: ini + + [PHP] + + ; Directory in which the loadable extensions (modules) reside. + extension_dir = "C:/Apache2/modules/php/ext" + +The :file:`php.ini` can be loaded from several locations (especially on +Windows), so please check you're updating the correct one. If using Apache, you +can tell it to use specific path for this file using ``PHPIniDir`` directive: + +.. code-block:: apache + + LoadModule php7_module "C:/php7/php7apache2_4.dll" + + PHPIniDir "C:/php7" + + AddType text/html .php + AddHandler application/x-httpd-php .php + + + +In some rare cases this problem can be also caused by other extensions loaded +in PHP which prevent MySQL extensions to be loaded. If anything else fails, you +can try commenting out extensions for other databases from :file:`php.ini`. + +.. _faq1_21: + +1.21 I am running the CGI version of PHP under Unix, and I cannot log in using cookie auth. +------------------------------------------------------------------------------------------- + +In :file:`php.ini`, set ``mysql.max_links`` higher than 1. + +.. _faq1_22: + +1.22 I don't see the "Location of text file" field, so I cannot upload. +----------------------------------------------------------------------- + +This is most likely because in :file:`php.ini`, your ``file_uploads`` +parameter is not set to "on". + +.. _faq1_23: + +1.23 I'm running MySQL on a Win32 machine. Each time I create a new table the table and column names are changed to lowercase! +------------------------------------------------------------------------------------------------------------------------------ + +This happens because the MySQL directive ``lower_case_table_names`` +defaults to 1 (``ON``) in the Win32 version of MySQL. You can change +this behavior by simply changing the directive to 0 (``OFF``): Just +edit your ``my.ini`` file that should be located in your Windows +directory and add the following line to the group [mysqld]: + +.. code-block:: ini + + set-variable = lower_case_table_names=0 + +.. note:: + + Forcing this variable to 0 with --lower-case-table-names=0 on a + case-insensitive filesystem and access MyISAM tablenames using different + lettercases, index corruption may result. + +Next, save the file and restart the MySQL service. You can always +check the value of this directive using the query + +.. code-block:: mysql + + SHOW VARIABLES LIKE 'lower_case_table_names'; + +.. seealso:: `Identifier Case Sensitivity in the MySQL Reference Manual `_ + +.. _faq1_24: + +1.24 (withdrawn). +----------------- + +.. _faq1_25: + +1.25 I am running Apache with mod\_gzip-1.3.26.1a on Windows XP, and I get problems, such as undefined variables when I run a SQL query. +---------------------------------------------------------------------------------------------------------------------------------------- + +A tip from Jose Fandos: put a comment on the following two lines in +httpd.conf, like this: + +.. code-block:: apache + + # mod_gzip_item_include file \.php$ + # mod_gzip_item_include mime "application/x-httpd-php.*" + +as this version of mod\_gzip on Apache (Windows) has problems handling +PHP scripts. Of course you have to restart Apache. + +.. _faq1_26: + +1.26 I just installed phpMyAdmin in my document root of IIS but I get the error "No input file specified" when trying to run phpMyAdmin. +---------------------------------------------------------------------------------------------------------------------------------------- + +This is a permission problem. Right-click on the phpmyadmin folder and +choose properties. Under the tab Security, click on "Add" and select +the user "IUSR\_machine" from the list. Now set their permissions and it +should work. + +.. _faq1_27: + +1.27 I get empty page when I want to view huge page (eg. db\_structure.php with plenty of tables). +-------------------------------------------------------------------------------------------------- + +This was caused by a `PHP bug `_ that occur when +GZIP output buffering is enabled. If you turn off it (by +:config:option:`$cfg['OBGzip']` in :file:`config.inc.php`), it should work. +This bug will has been fixed in PHP 5.0.0. + +.. _faq1_28: + +1.28 My MySQL server sometimes refuses queries and returns the message 'Errorcode: 13'. What does this mean? +------------------------------------------------------------------------------------------------------------ + +This can happen due to a MySQL bug when having database / table names +with upper case characters although ``lower_case_table_names`` is +set to 1. To fix this, turn off this directive, convert all database +and table names to lower case and turn it on again. Alternatively, +there's a bug-fix available starting with MySQL 3.23.56 / +4.0.11-gamma. + +.. _faq1_29: + +1.29 When I create a table or modify a column, I get an error and the columns are duplicated. +--------------------------------------------------------------------------------------------- + +It is possible to configure Apache in such a way that PHP has problems +interpreting .php files. + +The problems occur when two different (and conflicting) set of +directives are used: + +.. code-block:: apache + + SetOutputFilter PHP + SetInputFilter PHP + +and + +.. code-block:: apache + + AddType application/x-httpd-php .php + +In the case we saw, one set of directives was in +``/etc/httpd/conf/httpd.conf``, while the other set was in +``/etc/httpd/conf/addon-modules/php.conf``. The recommended way is +with ``AddType``, so just comment out the first set of lines and +restart Apache: + +.. code-block:: apache + + #SetOutputFilter PHP + #SetInputFilter PHP + +.. _faq1_30: + +1.30 I get the error "navigation.php: Missing hash". +---------------------------------------------------- + +This problem is known to happen when the server is running Turck +MMCache but upgrading MMCache to version 2.3.21 solves the problem. + +.. _faq1_31: + +1.31 Which PHP versions does phpMyAdmin support? +------------------------------------------------ + +Since release 4.5, phpMyAdmin supports only PHP 5.5 and newer. Since release +4.1 phpMyAdmin supports only PHP 5.3 and newer. For PHP 5.2 you can use 4.0.x +releases. + +PHP 7 is supported since phpMyAdmin 4.6, PHP 7.1 is supported since 4.6.5, +PHP 7.2 is supported since 4.7.4. + +HHVM is supported up to phpMyAdmin 4.8. + +Since release 5.0, phpMyAdmin supports only PHP 7.1 and newer. +Since release 5.2, phpMyAdmin supports only PHP 7.2 and newer. + +.. _faq1_32: + +1.32 Can I use HTTP authentication with IIS? +-------------------------------------------- + +Yes. This procedure was tested with phpMyAdmin 2.6.1, PHP 4.3.9 in +:term:`ISAPI` mode under :term:`IIS` 5.1. + +#. In your :file:`php.ini` file, set ``cgi.rfc2616_headers = 0`` +#. In ``Web Site Properties -> File/Directory Security -> Anonymous + Access`` dialog box, check the ``Anonymous access`` checkbox and + uncheck any other checkboxes (i.e. uncheck ``Basic authentication``, + ``Integrated Windows authentication``, and ``Digest`` if it's + enabled.) Click ``OK``. +#. In ``Custom Errors``, select the range of ``401;1`` through ``401;5`` + and click the ``Set to Default`` button. + +.. seealso:: :rfc:`2616` + +.. _faq1_33: + +1.33 (withdrawn). +----------------- + +.. _faq1_34: + +1.34 Can I directly access a database or table pages? +----------------------------------------------------- + +Yes. Out of the box, you can use a :term:`URL` like +``http://server/phpMyAdmin/index.php?server=X&db=database&table=table&target=script``. +For ``server`` you can use the server number +which refers to the numeric host index (from ``$i``) in +:file:`config.inc.php`. The table and script parts are optional. + +If you want a URL like +``http://server/phpMyAdmin/database[/table][/script]``, you need to do some additional configuration. The following +lines apply only for the `Apache `_ web server. +First, make sure that you have enabled some features within the Apache global +configuration. You need ``Options SymLinksIfOwnerMatch`` and ``AllowOverride +FileInfo`` enabled for directory where phpMyAdmin is installed and you +need mod\_rewrite to be enabled. Then you just need to create the +following :term:`.htaccess` file in root folder of phpMyAdmin installation (don't +forget to change directory name inside of it): + +.. code-block:: apache + + RewriteEngine On + RewriteBase /path_to_phpMyAdmin + RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&table=$2&target=$3 [R] + RewriteRule ^([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&target=$2 [R] + RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ index.php?db=$1&table=$2 [R] + RewriteRule ^([a-zA-Z0-9_]+)$ index.php?db=$1 [R] + +.. seealso:: :ref:`faq4_8` + +.. versionchanged:: 5.1.0 + + Support for using the ``target`` parameter was removed in phpMyAdmin 5.1.0. + Use the ``route`` parameter instead. + +.. _faq1_35: + +1.35 Can I use HTTP authentication with Apache CGI? +--------------------------------------------------- + +Yes. However you need to pass authentication variable to :term:`CGI` using +following rewrite rule: + +.. code-block:: apache + + RewriteEngine On + RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] + +.. _faq1_36: + +1.36 I get an error "500 Internal Server Error". +------------------------------------------------ + +There can be many explanations to this and a look at your server's +error log file might give a clue. + +.. _faq1_37: + +1.37 I run phpMyAdmin on cluster of different machines and password encryption in cookie auth doesn't work. +----------------------------------------------------------------------------------------------------------- + +If your cluster consist of different architectures, PHP code used for +encryption/decryption won't work correctly. This is caused by use of +pack/unpack functions in code. Only solution is to use openssl +extension which works fine in this case. + +.. _faq1_38: + +1.38 Can I use phpMyAdmin on a server on which Suhosin is enabled? +------------------------------------------------------------------ + +Yes but the default configuration values of Suhosin are known to cause +problems with some operations, for example editing a table with many +columns and no :term:`primary key` or with textual :term:`primary key`. + +Suhosin configuration might lead to malfunction in some cases and it +can not be fully avoided as phpMyAdmin is kind of application which +needs to transfer big amounts of columns in single HTTP request, what +is something what Suhosin tries to prevent. Generally all +``suhosin.request.*``, ``suhosin.post.*`` and ``suhosin.get.*`` +directives can have negative effect on phpMyAdmin usability. You can +always find in your error logs which limit did cause dropping of +variable, so you can diagnose the problem and adjust matching +configuration variable. + +The default values for most Suhosin configuration options will work in +most scenarios, however you might want to adjust at least following +parameters: + +* `suhosin.request.max\_vars `_ should + be increased (eg. 2048) +* `suhosin.post.max\_vars `_ should be + increased (eg. 2048) +* `suhosin.request.max\_array\_index\_length `_ + should be increased (eg. 256) +* `suhosin.post.max\_array\_index\_length `_ + should be increased (eg. 256) +* `suhosin.request.max\_totalname\_length `_ + should be increased (eg. 8192) +* `suhosin.post.max\_totalname\_length `_ should be + increased (eg. 8192) +* `suhosin.get.max\_value\_length `_ + should be increased (eg. 1024) +* `suhosin.sql.bailout\_on\_error `_ + needs to be disabled (the default) +* `suhosin.log.\* `_ should not + include :term:`SQL`, otherwise you get big + slowdown +* `suhosin.sql.union `_ must be disabled (which is the default). +* `suhosin.sql.multiselect `_ must be disabled (which is the default). +* `suhosin.sql.comment `_ must be disabled (which is the default). + +To further improve security, we also recommend these modifications: + +* `suhosin.executor.include.max\_traversal `_ should be + enabled as a mitigation against local file inclusion attacks. We suggest + setting this to 2 as ``../`` is used with the ReCaptcha library. +* `suhosin.cookie.encrypt `_ should be enabled. +* `suhosin.executor.disable_emodifier `_ should be enabled. + +You can also disable the warning using the :config:option:`$cfg['SuhosinDisableWarning']`. + +.. _faq1_39: + +1.39 When I try to connect via https, I can log in, but then my connection is redirected back to http. What can cause this behavior? +------------------------------------------------------------------------------------------------------------------------------------ + +This is caused by the fact that PHP scripts have no knowledge that the site is +using https. Depending on used webserver, you should configure it to let PHP +know about URL and scheme used to access it. + +For example in Apache ensure that you have enabled ``SSLOptions`` and +``StdEnvVars`` in the configuration. + +.. seealso:: + +.. _faq1_40: + +1.40 When accessing phpMyAdmin via an Apache reverse proxy, cookie login does not work. +--------------------------------------------------------------------------------------- + +To be able to use cookie auth Apache must know that it has to rewrite +the set-cookie headers. Example from the Apache 2.2 documentation: + +.. code-block:: apache + + ProxyPass /mirror/foo/ http://backend.example.com/ + ProxyPassReverse /mirror/foo/ http://backend.example.com/ + ProxyPassReverseCookieDomain backend.example.com public.example.com + ProxyPassReverseCookiePath / /mirror/foo/ + +Note: if the backend url looks like ``http://server/~user/phpmyadmin``, the +tilde (~) must be url encoded as %7E in the ProxyPassReverse\* lines. +This is not specific to phpmyadmin, it's just the behavior of Apache. + +.. code-block:: apache + + ProxyPass /mirror/foo/ http://backend.example.com/~user/phpmyadmin + ProxyPassReverse /mirror/foo/ http://backend.example.com/%7Euser/phpmyadmin + ProxyPassReverseCookiePath /%7Euser/phpmyadmin /mirror/foo + +.. seealso:: , :config:option:`$cfg['PmaAbsoluteUri']` + +.. _faq1_41: + +1.41 When I view a database and ask to see its privileges, I get an error about an unknown column. +-------------------------------------------------------------------------------------------------- + +The MySQL server's privilege tables are not up to date, you need to +run the :command:`mysql_upgrade` command on the server. + +.. _faq1_42: + +1.42 How can I prevent robots from accessing phpMyAdmin? +-------------------------------------------------------- + +You can add various rules to :term:`.htaccess` to filter access based on user agent +field. This is quite easy to circumvent, but could prevent at least +some robots accessing your installation. + +.. code-block:: apache + + RewriteEngine on + + # Allow only GET and POST verbs + RewriteCond %{REQUEST_METHOD} !^(GET|POST)$ [NC,OR] + + # Ban Typical Vulnerability Scanners and others + # Kick out Script Kiddies + RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR] + RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|wkito|pikto|scan|acunetix).* [NC,OR] + RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR] + + # Ban Search Engines, Crawlers to your administrative panel + # No reasons to access from bots + # Ultimately Better than the useless robots.txt + # Did google respect robots.txt? + # Try google: intitle:phpMyAdmin intext:"Welcome to phpMyAdmin *.*.*" intext:"Log in" -wiki -forum -forums -questions intext:"Cookies must be enabled" + RewriteCond %{HTTP_USER_AGENT} ^.*(AdsBot-Google|ia_archiver|Scooter|Ask.Jeeves|Baiduspider|Exabot|FAST.Enterprise.Crawler|FAST-WebCrawler|www\.neomo\.de|Gigabot|Mediapartners-Google|Google.Desktop|Feedfetcher-Google|Googlebot|heise-IT-Markt-Crawler|heritrix|ibm.com\cs/crawler|ICCrawler|ichiro|MJ12bot|MetagerBot|msnbot-NewsBlogs|msnbot|msnbot-media|NG-Search|lucene.apache.org|NutchCVS|OmniExplorer_Bot|online.link.validator|psbot0|Seekbot|Sensis.Web.Crawler|SEO.search.Crawler|Seoma.\[SEO.Crawler\]|SEOsearch|Snappy|www.urltrends.com|www.tkl.iis.u-tokyo.ac.jp/~crawler|SynooBot|crawleradmin.t-info@telekom.de|TurnitinBot|voyager|W3.SiteSearch.Crawler|W3C-checklink|W3C_Validator|www.WISEnutbot.com|yacybot|Yahoo-MMCrawler|Yahoo\!.DE.Slurp|Yahoo\!.Slurp|YahooSeeker).* [NC] + RewriteRule .* - [F] + +.. _faq1_43: + +1.43 Why can't I display the structure of my table containing hundreds of columns? +---------------------------------------------------------------------------------- + +Because your PHP's ``memory_limit`` is too low; adjust it in :file:`php.ini`. + +.. _faq1:44: + +1.44 How can I reduce the installed size of phpMyAdmin on disk? +--------------------------------------------------------------- + +Some users have requested to be able to reduce the size of the phpMyAdmin installation. +This is not recommended and could lead to confusion over missing features, but can be done. +A list of files and corresponding functionality which degrade gracefully when removed include: + +* :file:`./vendor/tecnickcom/tcpdf` folder (exporting to PDF) +* :file:`./locale/` folder, or unused subfolders (interface translations) +* Any unused themes in :file:`./themes/` +* :file:`./js/vendor/jquery/src/` (included for licensing reasons) +* :file:`./js/line_counts.php` (removed in phpMyAdmin 4.8) +* :file:`./doc/` (documentation) +* :file:`./setup/` (setup script) +* :file:`./examples/` +* :file:`./sql/` (SQL scripts to configure advanced functionality) +* :file:`./js/vendor/openlayers/` (GIS visualization) + +.. _faq1_45: + +1.45 I get an error message about unknown authentication method caching_sha2_password when trying to log in +----------------------------------------------------------------------------------------------------------- + +When logging in using MySQL version 8 or newer, you may encounter an error message like this: + + mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] + + mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client + +This error is because of a version compatibility problem between PHP and MySQL. The MySQL project introduced a new authentication +method (our tests show this began with version 8.0.11) however PHP did not include the ability to use that authentication method. +PHP reports that this was fixed in PHP version 7.4. + +Users experiencing this are encouraged to upgrade their PHP installation, however a workaround exists. Your MySQL user account +can be set to use the older authentication with a command such as + +.. code-block:: mysql + + ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PASSWORD'; + +.. seealso:: , , + +.. _faqconfig: + +Configuration ++++++++++++++ + +.. _faq2_1: + +2.1 The error message "Warning: Cannot add header information - headers already sent by ..." is displayed, what's the problem? +------------------------------------------------------------------------------------------------------------------------------ + +Edit your :file:`config.inc.php` file and ensure there is nothing (I.E. no +blank lines, no spaces, no characters...) neither before the ```` tag at the end. + +.. _faq2_2: + +2.2 phpMyAdmin can't connect to MySQL. What's wrong? +---------------------------------------------------- + +Either there is an error with your PHP setup or your username/password +is wrong. Try to make a small script which uses mysql\_connect and see +if it works. If it doesn't, it may be you haven't even compiled MySQL +support into PHP. + +.. _faq2_3: + +2.3 The error message "Warning: MySQL Connection Failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111) ..." is displayed. What can I do? +--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +The error message can also be: :guilabel:`Error #2002 - The server is not +responding (or the local MySQL server's socket is not correctly configured)`. + +First, you need to determine what socket is being used by MySQL. To do this, +connect to your server and go to the MySQL bin directory. In this directory +there should be a file named *mysqladmin*. Type ``./mysqladmin variables``, and +this should give you a bunch of info about your MySQL server, including the +socket (*/tmp/mysql.sock*, for example). You can also ask your ISP for the +connection info or, if you're hosting your own, connect from the 'mysql' +command-line client and type 'status' to get the connection type and socket or +port number. + +Then, you need to tell PHP to use this socket. You can do this for all PHP in +the :file:`php.ini` or for phpMyAdmin only in the :file:`config.inc.php`. For +example: :config:option:`$cfg['Servers'][$i]['socket']` Please also make sure +that the permissions of this file allow to be readable by your webserver. + +On my RedHat-Box the socket of MySQL is */var/lib/mysql/mysql.sock*. +In your :file:`php.ini` you will find a line + +.. code-block:: ini + + mysql.default_socket = /tmp/mysql.sock + +change it to + +.. code-block:: ini + + mysql.default_socket = /var/lib/mysql/mysql.sock + +Then restart apache and it will work. + +Have also a look at the `corresponding section of the MySQL +documentation `_. + +.. _faq2_4: + +2.4 Nothing is displayed by my browser when I try to run phpMyAdmin, what can I do? +----------------------------------------------------------------------------------- + +Try to set the :config:option:`$cfg['OBGzip']` directive to ``false`` in the phpMyAdmin configuration +file. It helps sometime. Also have a look at your PHP version number: +if it contains "b" or "alpha" it means you're running a testing +version of PHP. That's not a so good idea, please upgrade to a plain +revision. + +.. _faq2_5: + +2.5 Each time I want to insert or change a row or drop a database or a table, an error 404 (page not found) is displayed or, with HTTP or cookie authentication, I'm asked to log in again. What's wrong? +--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Check your webserver setup if it correctly fills in either PHP_SELF or REQUEST_URI variables. + +If you are running phpMyAdmin behind reverse proxy, please set the +:config:option:`$cfg['PmaAbsoluteUri']` directive in the phpMyAdmin +configuration file to match your setup. + +.. _faq2_6: + +2.6 I get an "Access denied for user: 'root@localhost' (Using password: YES)"-error when trying to access a MySQL-Server on a host which is port-forwarded for my localhost. +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +When you are using a port on your localhost, which you redirect via +port-forwarding to another host, MySQL is not resolving the localhost +as expected. Erik Wasser explains: The solution is: if your host is +"localhost" MySQL (the command line tool :command:`mysql` as well) always +tries to use the socket connection for speeding up things. And that +doesn't work in this configuration with port forwarding. If you enter +"127.0.0.1" as hostname, everything is right and MySQL uses the +:term:`TCP` connection. + +.. _faqthemes: + +2.7 Using and creating themes +----------------------------- + +See :ref:`themes`. + +.. _faqmissingparameters: + +2.8 I get "Missing parameters" errors, what can I do? +----------------------------------------------------- + +Here are a few points to check: + +* In :file:`config.inc.php`, try to leave the :config:option:`$cfg['PmaAbsoluteUri']` directive empty. See also + :ref:`faq4_7`. +* Maybe you have a broken PHP installation or you need to upgrade your + Zend Optimizer. See . +* If you are using Hardened PHP with the ini directive + ``varfilter.max_request_variables`` set to the default (200) or + another low value, you could get this error if your table has a high + number of columns. Adjust this setting accordingly. (Thanks to Klaus + Dorninger for the hint). +* In the :file:`php.ini` directive ``arg_separator.input``, a value of ";" + will cause this error. Replace it with "&;". +* If you are using `Suhosin `_, you + might want to increase `request limits `_. +* The directory specified in the :file:`php.ini` directive + ``session.save_path`` does not exist or is read-only (this can be caused + by `bug in the PHP installer `_). + +.. _faq2_9: + +2.9 Seeing an upload progress bar +--------------------------------- + +To be able to see a progress bar during your uploads, your server must +have the `uploadprogress `_ extension, and +you must be running PHP 5.4.0 or higher. Moreover, the JSON extension +has to be enabled in your PHP. + +If using PHP 5.4.0 or higher, you must set +``session.upload_progress.enabled`` to ``1`` in your :file:`php.ini`. However, +starting from phpMyAdmin version 4.0.4, session-based upload progress has +been temporarily deactivated due to its problematic behavior. + +.. _faqlimitations: + +Known limitations ++++++++++++++++++ + +.. _login_bug: + +3.1 When using HTTP authentication, a user who logged out can not log in again in with the same nick. +----------------------------------------------------------------------------------------------------- + +This is related to the authentication mechanism (protocol) used by +phpMyAdmin. To bypass this problem: just close all the opened browser +windows and then go back to phpMyAdmin. You should be able to log in +again. + +.. _faq3_2: + +3.2 When dumping a large table in compressed mode, I get a memory limit error or a time limit error. +---------------------------------------------------------------------------------------------------- + +Compressed dumps are built in memory and because of this are limited +to php's memory limit. For gzip/bzip2 exports this can be overcome +since 2.5.4 using :config:option:`$cfg['CompressOnFly']` (enabled by default). +zip exports can not be handled this way, so if you need zip files for larger +dump, you have to use another way. + +.. _faq3_3: + +3.3 With InnoDB tables, I lose foreign key relationships when I rename a table or a column. +------------------------------------------------------------------------------------------- + +This is an InnoDB bug, see . + +.. _faq3_4: + +3.4 I am unable to import dumps I created with the mysqldump tool bundled with the MySQL server distribution. +------------------------------------------------------------------------------------------------------------- + +The problem is that older versions of ``mysqldump`` created invalid +comments like this: + +.. code-block:: mysql + + -- MySQL dump 8.22 + -- + -- Host: localhost Database: database + --------------------------------------------------------- + -- Server version 3.23.54 + +The invalid part of the code is the horizontal line made of dashes +that appears once in every dump created with mysqldump. If you want to +run your dump you have to turn it into valid MySQL. This means, you +have to add a whitespace after the first two dashes of the line or add +a # before it: ``-- -------------------------------------------------------`` or +``#---------------------------------------------------------`` + +.. _faq3_5: + +3.5 When using nested folders, multiple hierarchies are displayed in a wrong manner. +------------------------------------------------------------------------------------ + +Please note that you should not use the separating string multiple +times without any characters between them, or at the beginning/end of +your table name. If you have to, think about using another +TableSeparator or disabling that feature. + +.. seealso:: :config:option:`$cfg['NavigationTreeTableSeparator']` + +.. _faq3_6: + +3.6 (withdrawn). +----------------- + +.. _faq3_7: + +3.7 I have table with many (100+) columns and when I try to browse table I get series of errors like "Warning: unable to parse url". How can this be fixed? +----------------------------------------------------------------------------------------------------------------------------------------------------------- + +Your table neither have a :term:`primary key` nor an :term:`unique key`, so we must +use a long expression to identify this row. This causes problems to +parse\_url function. The workaround is to create a :term:`primary key` +or :term:`unique key`. + +.. _faq3_8: + +3.8 I cannot use (clickable) HTML-forms in columns where I put a MIME-Transformation onto! +------------------------------------------------------------------------------------------ + +Due to a surrounding form-container (for multi-row delete checkboxes), +no nested forms can be put inside the table where phpMyAdmin displays +the results. You can, however, use any form inside of a table if keep +the parent form-container with the target to tbl\_row\_delete.php and +just put your own input-elements inside. If you use a custom submit +input field, the form will submit itself to the displaying page again, +where you can validate the $HTTP\_POST\_VARS in a transformation. For +a tutorial on how to effectively use transformations, see our `Link +section `_ on the +official phpMyAdmin-homepage. + +.. _faq3_9: + +3.9 I get error messages when using "--sql\_mode=ANSI" for the MySQL server. +---------------------------------------------------------------------------- + +When MySQL is running in ANSI-compatibility mode, there are some major +differences in how :term:`SQL` is structured (see +). Most important of all, the +quote-character (") is interpreted as an identifier quote character and not as +a string quote character, which makes many internal phpMyAdmin operations into +invalid :term:`SQL` statements. There is no +workaround to this behaviour. News to this item will be posted in `issue +#7383 `_. + +.. _faq3_10: + +3.10 Homonyms and no primary key: When the results of a SELECT display more that one column with the same value (for example ``SELECT lastname from employees where firstname like 'A%'`` and two "Smith" values are displayed), if I click Edit I cannot be sure that I am editing the intended row. +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +Please make sure that your table has a :term:`primary key`, so that phpMyAdmin +can use it for the Edit and Delete links. + +.. _faq3_11: + +3.11 The number of rows for InnoDB tables is not correct. +--------------------------------------------------------- + +phpMyAdmin uses a quick method to get the row count, and this method only +returns an approximate count in the case of InnoDB tables. See +:config:option:`$cfg['MaxExactCount']` for a way to modify those results, but +this could have a serious impact on performance. +However, one can easily replace the approximate row count with exact count by +simply clicking on the approximate count. This can also be done for all tables +at once by clicking on the rows sum displayed at the bottom. + +.. seealso:: :config:option:`$cfg['MaxExactCount']` + +.. _faq3_12: + +3.12 (withdrawn). +----------------- + +.. _faq3_13: + +3.13 I get an error when entering ``USE`` followed by a db name containing an hyphen. +------------------------------------------------------------------------------------- + +The tests I have made with MySQL 5.1.49 shows that the API does not +accept this syntax for the USE command. + +.. _faq3_14: + +3.14 I am not able to browse a table when I don't have the right to SELECT one of the columns. +---------------------------------------------------------------------------------------------- + +This has been a known limitation of phpMyAdmin since the beginning and +it's not likely to be solved in the future. + +.. _faq3_15: + +3.15 (withdrawn). +----------------- + +.. _faq3_16: + +3.16 (withdrawn). +----------------- + +.. _faq3_17: + +3.17 (withdrawn). +----------------- + +.. _faq3_18: + +3.18 When I import a CSV file that contains multiple tables, they are lumped together into a single table. +---------------------------------------------------------------------------------------------------------- + +There is no reliable way to differentiate tables in :term:`CSV` format. For the +time being, you will have to break apart :term:`CSV` files containing multiple +tables. + +.. _faq3_19: + +3.19 When I import a file and have phpMyAdmin determine the appropriate data structure it only uses int, decimal, and varchar types. +------------------------------------------------------------------------------------------------------------------------------------ + +Currently, the import type-detection system can only assign these +MySQL types to columns. In future, more will likely be added but for +the time being you will have to edit the structure to your liking +post-import. Also, you should note the fact that phpMyAdmin will use +the size of the largest item in any given column as the column size +for the appropriate type. If you know you will be adding larger items +to that column then you should manually adjust the column sizes +accordingly. This is done for the sake of efficiency. + +.. _faq3_20: + +3.20 After upgrading, some bookmarks are gone or their content cannot be shown. +------------------------------------------------------------------------------- + +At some point, the character set used to store bookmark content has changed. +It's better to recreate your bookmark from the newer phpMyAdmin version. + +.. _faq3_21: + +3.21 I am unable to log in with a username containing unicode characters such as á. +----------------------------------------------------------------------------------- + +This can happen if MySQL server is not configured to use utf-8 as default +charset. This is a limitation of how PHP and the MySQL server interact; there +is no way for PHP to set the charset before authenticating. + +.. seealso:: + + `phpMyAdmin issue 12232 `_, + `MySQL documentation note `_ + +.. _faqmultiuser: + +ISPs, multi-user installations +++++++++++++++++++++++++++++++ + +.. _faq4_1: + +4.1 I'm an ISP. Can I setup one central copy of phpMyAdmin or do I need to install it for each customer? +-------------------------------------------------------------------------------------------------------- + +Since version 2.0.3, you can setup a central copy of phpMyAdmin for all your +users. The development of this feature was kindly sponsored by NetCologne GmbH. +This requires a properly setup MySQL user management and phpMyAdmin +:term:`HTTP` or cookie authentication. + +.. seealso:: :ref:`authentication_modes` + +.. _faq4_2: + +4.2 What's the preferred way of making phpMyAdmin secure against evil access? +----------------------------------------------------------------------------- + +This depends on your system. If you're running a server which cannot be +accessed by other people, it's sufficient to use the directory protection +bundled with your webserver (with Apache you can use :term:`.htaccess` files, +for example). If other people have telnet access to your server, you should use +phpMyAdmin's :term:`HTTP` or cookie authentication features. + +Suggestions: + +* Your :file:`config.inc.php` file should be ``chmod 660``. +* All your phpMyAdmin files should be chown -R phpmy.apache, where phpmy + is a user whose password is only known to you, and apache is the group + under which Apache runs. +* Follow security recommendations for PHP and your webserver. + +.. _faq4_3: + +4.3 I get errors about not being able to include a file in */lang* or in */libraries*. +-------------------------------------------------------------------------------------- + +Check :file:`php.ini`, or ask your sysadmin to check it. The +``include_path`` must contain "." somewhere in it, and +``open_basedir``, if used, must contain "." and "./lang" to allow +normal operation of phpMyAdmin. + +.. _faq4_4: + +4.4 phpMyAdmin always gives "Access denied" when using HTTP authentication. +--------------------------------------------------------------------------- + +This could happen for several reasons: + +* :config:option:`$cfg['Servers'][$i]['controluser']` and/or :config:option:`$cfg['Servers'][$i]['controlpass']` are wrong. +* The username/password you specify in the login dialog are invalid. +* You have already setup a security mechanism for the phpMyAdmin- + directory, eg. a :term:`.htaccess` file. This would interfere with phpMyAdmin's + authentication, so remove it. + +.. _faq4_5: + +4.5 Is it possible to let users create their own databases? +----------------------------------------------------------- + +Starting with 2.2.5, in the user management page, you can enter a +wildcard database name for a user (for example "joe%"), and put the +privileges you want. For example, adding ``SELECT, INSERT, UPDATE, +DELETE, CREATE, DROP, INDEX, ALTER`` would let a user create/manage +their database(s). + +.. _faq4_6: + +4.6 How can I use the Host-based authentication additions? +---------------------------------------------------------- + +If you have existing rules from an old :term:`.htaccess` file, you can take them and +add a username between the ``'deny'``/``'allow'`` and ``'from'`` +strings. Using the username wildcard of ``'%'`` would be a major +benefit here if your installation is suited to using it. Then you can +just add those updated lines into the +:config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` array. + +If you want a pre-made sample, you can try this fragment. It stops the +'root' user from logging in from any networks other than the private +network :term:`IP` blocks. + +.. code-block:: php + + //block root from logging in except from the private networks + $cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow'; + $cfg['Servers'][$i]['AllowDeny']['rules'] = [ + 'deny root from all', + 'allow root from localhost', + 'allow root from 10.0.0.0/8', + 'allow root from 192.168.0.0/16', + 'allow root from 172.16.0.0/12', + ]; + +.. _faq4_7: + +4.7 Authentication window is displayed more than once, why? +----------------------------------------------------------- + +This happens if you are using a :term:`URL` to start phpMyAdmin which is +different than the one set in your :config:option:`$cfg['PmaAbsoluteUri']`. For +example, a missing "www", or entering with an :term:`IP` address while a domain +name is defined in the config file. + +.. _faq4_8: + +4.8 Which parameters can I use in the URL that starts phpMyAdmin? +----------------------------------------------------------------- + +When starting phpMyAdmin, you can use the ``db`` +and ``server`` parameters. This last one can contain +either the numeric host index (from ``$i`` of the configuration file) +or one of the host names present in the configuration file. + +For example, to jump directly to a particular database, a URL can be constructed as +``https://example.com/phpmyadmin/?db=sakila``. + +.. seealso:: :ref:`faq1_34` + +.. versionchanged:: 4.9.0 + + Support for using the ``pma_username`` and ``pma_password`` parameters was removed + in phpMyAdmin 4.9.0 (see `PMASA-2019-4 `_). + +.. _faqbrowsers: + +Browsers or client OS ++++++++++++++++++++++ + +.. _faq5_1: + +5.1 I get an out of memory error, and my controls are non-functional, when trying to create a table with more than 14 columns. +------------------------------------------------------------------------------------------------------------------------------ + +We could reproduce this problem only under Win98/98SE. Testing under +WinNT4 or Win2K, we could easily create more than 60 columns. A +workaround is to create a smaller number of columns, then come back to +your table properties and add the other columns. + +.. _faq5_2: + +5.2 With Xitami 2.5b4, phpMyAdmin won't process form fields. +------------------------------------------------------------ + +This is not a phpMyAdmin problem but a Xitami known bug: you'll face +it with each script/website that use forms. Upgrade or downgrade your +Xitami server. + +.. _faq5_3: + +5.3 I have problems dumping tables with Konqueror (phpMyAdmin 2.2.2). +--------------------------------------------------------------------- + +With Konqueror 2.1.1: plain dumps, zip and gzip dumps work ok, except +that the proposed file name for the dump is always 'tbl\_dump.php'. +The bzip2 dumps don't seem to work. With Konqueror 2.2.1: plain dumps +work; zip dumps are placed into the user's temporary directory, so +they must be moved before closing Konqueror, or else they disappear. +gzip dumps give an error message. Testing needs to be done for +Konqueror 2.2.2. + +.. _faq5_4: + +5.4 I can't use the cookie authentication mode because Internet Explorer never stores the cookies. +-------------------------------------------------------------------------------------------------- + +MS Internet Explorer seems to be really buggy about cookies, at least +till version 6. + +.. _faq5_5: + +5.5 (withdrawn). +---------------------------------------------------------------------------- + +.. _faq5_6: + +5.6 (withdrawn). +----------------------------------------------------------------------------------------------------------------------------------------------------------------- + +.. _faq5_7: + +5.7 I refresh (reload) my browser, and come back to the welcome page. +--------------------------------------------------------------------- + +Some browsers support right-clicking into the frame you want to +refresh, just do this in the right frame. + +.. _faq5_8: + +5.8 With Mozilla 0.9.7 I have problems sending a query modified in the query box. +--------------------------------------------------------------------------------- + +Looks like a Mozilla bug: 0.9.6 was OK. We will keep an eye on future +Mozilla versions. + +.. _faq5_9: + +5.9 With Mozilla 0.9.? to 1.0 and Netscape 7.0-PR1 I can't type a whitespace in the SQL-Query edit area: the page scrolls down. +------------------------------------------------------------------------------------------------------------------------------- + +This is a Mozilla bug (see bug #26882 at `BugZilla +`_). + +.. _faq5_10: + +5.10 (withdrawn). +----------------------------------------------------------------------------------------- + +.. _faq5_11: + +5.11 Extended-ASCII characters like German umlauts are displayed wrong. +----------------------------------------------------------------------- + +Please ensure that you have set your browser's character set to the +one of the language file you have selected on phpMyAdmin's start page. +Alternatively, you can try the auto detection mode that is supported +by the recent versions of the most browsers. + +.. _faq5_12: + +5.12 Mac OS X Safari browser changes special characters to "?". +--------------------------------------------------------------- + +This issue has been reported by a :term:`macOS` user, who adds that Chimera, +Netscape and Mozilla do not have this problem. + +.. _faq5_13: + +5.13 (withdrawn) +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +.. _faq5_14: + +5.14 (withdrawn) +------------------------------------------------------------------------------------------------------------------ + +.. _faq5_15: + +5.15 (withdrawn) +----------------------------------------- + +.. _faq5_16: + +5.16 With Internet Explorer, I get "Access is denied" Javascript errors. Or I cannot make phpMyAdmin work under Windows. +------------------------------------------------------------------------------------------------------------------------ + +Please check the following points: + +* Maybe you have defined your :config:option:`$cfg['PmaAbsoluteUri']` setting in + :file:`config.inc.php` to an :term:`IP` address and you are starting phpMyAdmin + with a :term:`URL` containing a domain name, or the reverse situation. +* Security settings in IE and/or Microsoft Security Center are too high, + thus blocking scripts execution. +* The Windows Firewall is blocking Apache and MySQL. You must allow + :term:`HTTP` ports (80 or 443) and MySQL + port (usually 3306) in the "in" and "out" directions. + +.. _faq5_17: + +5.17 With Firefox, I cannot delete rows of data or drop a database. +------------------------------------------------------------------- + +Many users have confirmed that the Tabbrowser Extensions plugin they +installed in their Firefox is causing the problem. + +.. _faq5_18: + +5.18 (withdrawn) +----------------------------------------------------------------------------------------- + +.. _faq5_19: + +5.19 I get JavaScript errors in my browser. +------------------------------------------- + +Issues have been reported with some combinations of browser +extensions. To troubleshoot, disable all extensions then clear your +browser cache to see if the problem goes away. + +.. _faq5_20: + +5.20 I get errors about violating Content Security Policy. +---------------------------------------------------------- + +If you see errors like: + +.. code-block:: text + + Refused to apply inline style because it violates the following Content Security Policy directive + +This is usually caused by some software, which wrongly rewrites +:mailheader:`Content Security Policy` headers. Usually this is caused by +antivirus proxy or browser addons which are causing such errors. + +If you see these errors, try disabling the HTTP proxy in antivirus or disable +the :mailheader:`Content Security Policy` rewriting in it. If that doesn't +help, try disabling browser extensions. + +Alternatively it can be also server configuration issue (if the webserver is +configured to emit :mailheader:`Content Security Policy` headers, they can +override the ones from phpMyAdmin). + +Programs known to cause these kind of errors: + +* Kaspersky Internet Security + +.. _faq5_21: + +5.21 I get errors about potentially unsafe operation when browsing table or executing SQL query. +------------------------------------------------------------------------------------------------ + +If you see errors like: + +.. code-block:: text + + A potentially unsafe operation has been detected in your request to this site. + +This is usually caused by web application firewall doing requests filtering. It +tries to prevent SQL injection, however phpMyAdmin is tool designed to execute +SQL queries, thus it makes it unusable. + +Please allow phpMyAdmin scripts from the web application firewall settings +or disable it completely for phpMyAdmin path. + +Programs known to cause these kind of errors: + +* Wordfence Web Application Firewall + +.. _faqusing: + +Using phpMyAdmin +++++++++++++++++ + +.. _faq6_1: + +6.1 I can't insert new rows into a table / I can't create a table - MySQL brings up a SQL error. +------------------------------------------------------------------------------------------------ + +Examine the :term:`SQL` error with care. +Often the problem is caused by specifying a wrong column-type. Common +errors include: + +* Using ``VARCHAR`` without a size argument +* Using ``TEXT`` or ``BLOB`` with a size argument + +Also, look at the syntax chapter in the MySQL manual to confirm that +your syntax is correct. + +.. _faq6_2: + +6.2 When I create a table, I set an index for two columns and phpMyAdmin generates only one index with those two columns. +------------------------------------------------------------------------------------------------------------------------- + +This is the way to create a multi-columns index. If you want two +indexes, create the first one when creating the table, save, then +display the table properties and click the Index link to create the +other index. + +.. _faq6_3: + +6.3 How can I insert a null value into my table? +------------------------------------------------ + +Since version 2.2.3, you have a checkbox for each column that can be +null. Before 2.2.3, you had to enter "null", without the quotes, as +the column's value. Since version 2.5.5, you have to use the checkbox +to get a real NULL value, so if you enter "NULL" this means you want a +literal NULL in the column, and not a NULL value (this works in PHP4). + +.. _faq6_4: + +6.4 How can I backup my database or table? +------------------------------------------ + +Click on a database or table name in the navigation panel, the properties will +be displayed. Then on the menu, click "Export", you can dump the structure, the +data, or both. This will generate standard :term:`SQL` statements that can be +used to recreate your database/table. You will need to choose "Save as file", +so that phpMyAdmin can transmit the resulting dump to your station. Depending +on your PHP configuration, you will see options to compress the dump. See also +the :config:option:`$cfg['ExecTimeLimit']` configuration variable. For +additional help on this subject, look for the word "dump" in this document. + +.. _faq6_5: + +6.5 How can I restore (upload) my database or table using a dump? How can I run a ".sql" file? +---------------------------------------------------------------------------------------------- + +Click on a database name in the navigation panel, the properties will +be displayed. Select "Import" from the list of tabs in the right–hand +frame (or ":term:`SQL`" if your phpMyAdmin +version is previous to 2.7.0). In the "Location of the text file" +section, type in the path to your dump filename, or use the Browse +button. Then click Go. With version 2.7.0, the import engine has been +re–written, if possible it is suggested that you upgrade to take +advantage of the new features. For additional help on this subject, +look for the word "upload" in this document. + +Note: For errors while importing of dumps exported from older MySQL versions to newer MySQL versions, +please check :ref:`faq6_41`. + +.. _faq6_6: + +6.6 How can I use the relation table in Query-by-example? +--------------------------------------------------------- + +Here is an example with the tables persons, towns and countries, all +located in the database "mydb". If you don't have a ``pma__relation`` +table, create it as explained in the configuration section. Then +create the example tables: + +.. code-block:: mysql + + CREATE TABLE REL_countries ( + country_code char(1) NOT NULL default '', + description varchar(10) NOT NULL default '', + PRIMARY KEY (country_code) + ) ENGINE=MyISAM; + + INSERT INTO REL_countries VALUES ('C', 'Canada'); + + CREATE TABLE REL_persons ( + id tinyint(4) NOT NULL auto_increment, + person_name varchar(32) NOT NULL default '', + town_code varchar(5) default '0', + country_code char(1) NOT NULL default '', + PRIMARY KEY (id) + ) ENGINE=MyISAM; + + INSERT INTO REL_persons VALUES (11, 'Marc', 'S', 'C'); + INSERT INTO REL_persons VALUES (15, 'Paul', 'S', 'C'); + + CREATE TABLE REL_towns ( + town_code varchar(5) NOT NULL default '0', + description varchar(30) NOT NULL default '', + PRIMARY KEY (town_code) + ) ENGINE=MyISAM; + + INSERT INTO REL_towns VALUES ('S', 'Sherbrooke'); + INSERT INTO REL_towns VALUES ('M', 'Montréal'); + +To setup appropriate links and display information: + +* on table "REL\_persons" click Structure, then Relation view +* for "town\_code", choose from dropdowns, "mydb", "REL\_towns", "town\_code" + for foreign database, table and column respectively +* for "country\_code", choose from dropdowns, "mydb", "REL\_countries", + "country\_code" for foreign database, table and column respectively +* on table "REL\_towns" click Structure, then Relation view +* in "Choose column to display", choose "description" +* repeat the two previous steps for table "REL\_countries" + +Then test like this: + +* Click on your db name in the navigation panel +* Choose "Query" +* Use tables: persons, towns, countries +* Click "Update query" +* In the columns row, choose persons.person\_name and click the "Show" + tickbox +* Do the same for towns.description and countries.descriptions in the + other 2 columns +* Click "Update query" and you will see in the query box that the + correct joins have been generated +* Click "Submit query" + +.. _faqdisplay: + +6.7 How can I use the "display column" feature? +----------------------------------------------- + +Starting from the previous example, create the ``pma__table_info`` as +explained in the configuration section, then browse your persons +table, and move the mouse over a town code or country code. See also +:ref:`faq6_21` for an additional feature that "display column" +enables: drop-down list of possible values. + +.. _faqpdf: + +6.8 How can I produce a PDF schema of my database? +-------------------------------------------------- + +First the configuration variables "relation", "table\_coords" and +"pdf\_pages" have to be filled in. + +* Select your database in the navigation panel. +* Choose ":guilabel:`Designer`" in the navigation bar at the top. +* Move the tables the way you want them. +* Choose ":guilabel:`Export schema`" in the left menu. +* The export modal will open. +* Select the type of export to :term:`PDF`, you may adjust the other settings. +* Submit the form and the file will start downloading. + +.. seealso:: + + :ref:`relations` + +.. _faq6_9: + +6.9 phpMyAdmin is changing the type of one of my columns! +--------------------------------------------------------- + +No, it's MySQL that is doing `silent column type changing +`_. + +.. _underscore: + +6.10 When creating a privilege, what happens with underscores in the database name? +----------------------------------------------------------------------------------- + +If you do not put a backslash before the underscore, this is a +wildcard grant, and the underscore means "any character". So, if the +database name is "john\_db", the user would get rights to john1db, +john2db ... If you put a backslash before the underscore, it means +that the database name will have a real underscore. + +.. _faq6_11: + +6.11 What is the curious symbol ø in the statistics pages? +---------------------------------------------------------- + +It means "average". + +.. _faqexport: + +6.12 I want to understand some Export options. +---------------------------------------------- + +**Structure:** + +* "Add DROP TABLE" will add a line telling MySQL to `drop the table + `_, if it already + exists during the import. It does NOT drop the table after your + export, it only affects the import file. +* "If Not Exists" will only create the table if it doesn't exist. + Otherwise, you may get an error if the table name exists but has a + different structure. +* "Add AUTO\_INCREMENT value" ensures that AUTO\_INCREMENT value (if + any) will be included in backup. +* "Enclose table and column names with backquotes" ensures that column + and table names formed with special characters are protected. +* "Add into comments" includes column comments, relations, and media + types set in the pmadb in the dump as :term:`SQL` comments + (*/\* xxx \*/*). + +**Data:** + +* "Complete inserts" adds the column names on every INSERT command, for + better documentation (but resulting file is bigger). +* "Extended inserts" provides a shorter dump file by using only once the + INSERT verb and the table name. +* "Delayed inserts" are best explained in the `MySQL manual - INSERT DELAYED Syntax + `_. +* "Ignore inserts" treats errors as a warning instead. Again, more info + is provided in the `MySQL manual - INSERT Syntax + `_, but basically with + this selected, invalid values are adjusted and inserted rather than + causing the entire statement to fail. + +.. _faq6_13: + +6.13 I would like to create a database with a dot in its name. +-------------------------------------------------------------- + +This is a bad idea, because in MySQL the syntax "database.table" is +the normal way to reference a database and table name. Worse, MySQL +will usually let you create a database with a dot, but then you cannot +work with it, nor delete it. + +.. _faqsqlvalidator: + +6.14 (withdrawn). +----------------- + +.. _faq6_15: + +6.15 I want to add a BLOB column and put an index on it, but MySQL says "BLOB column '...' used in key specification without a key length". +------------------------------------------------------------------------------------------------------------------------------------------- + +The right way to do this, is to create the column without any indexes, +then display the table structure and use the "Create an index" dialog. +On this page, you will be able to choose your BLOB column, and set a +size to the index, which is the condition to create an index on a BLOB +column. + +.. _faq6_16: + +6.16 How can I simply move in page with plenty editing fields? +-------------------------------------------------------------- + +You can use :kbd:`Ctrl+arrows` (:kbd:`Option+Arrows` in Safari) for moving on +most pages with many editing fields (table structure changes, row editing, +etc.). + +.. _faq6_17: + +6.17 Transformations: I can't enter my own mimetype! What is this feature then useful for? +------------------------------------------------------------------------------------------ + +Defining mimetypes is of no use if you can't put +transformations on them. Otherwise you could just put a comment on the +column. Because entering your own mimetype will cause serious syntax +checking issues and validation, this introduces a high-risk false- +user-input situation. Instead you have to initialize mimetypes using +functions or empty mimetype definitions. + +Plus, you have a whole overview of available mimetypes. Who knows all those +mimetypes by heart so they can enter it at will? + +.. _faqbookmark: + +6.18 Bookmarks: Where can I store bookmarks? Why can't I see any bookmarks below the query box? What are these variables for? +----------------------------------------------------------------------------------------------------------------------------- + +You need to have configured the :ref:`linked-tables` for using bookmarks +feature. Once you have done that, you can use bookmarks in the :guilabel:`SQL` tab. + +.. seealso:: :ref:`bookmarks` + +.. _faq6_19: + +6.19 How can I create simple LATEX document to include exported table? +---------------------------------------------------------------------- + +You can simply include table in your LATEX documents, +minimal sample document should look like following one (assuming you +have table exported in file :file:`table.tex`): + +.. code-block:: latex + + \documentclass{article} % or any class you want + \usepackage{longtable} % for displaying table + \begin{document} % start of document + \include{table} % including exported table + \end{document} % end of document + +.. _faq6_20: + +6.20 I see a lot of databases which are not mine, and cannot access them. +------------------------------------------------------------------------- + +You have one of these global privileges: CREATE TEMPORARY TABLES, SHOW +DATABASES, LOCK TABLES. Those privileges also enable users to see all the +database names. So if your users do not need those privileges, you can remove +them and their databases list will shorten. + +.. seealso:: + +.. _faq6_21: + +6.21 In edit/insert mode, how can I see a list of possible values for a column, based on some foreign table? +------------------------------------------------------------------------------------------------------------ + +You have to setup appropriate links between the tables, and also setup +the "display column" in the foreign table. See :ref:`faq6_6` for an +example. Then, if there are 100 values or less in the foreign table, a +drop-down list of values will be available. You will see two lists of +values, the first list containing the key and the display column, the +second list containing the display column and the key. The reason for +this is to be able to type the first letter of either the key or the +display column. For 100 values or more, a distinct window will appear, +to browse foreign key values and choose one. To change the default +limit of 100, see :config:option:`$cfg['ForeignKeyMaxLimit']`. + +.. _faq6_22: + +6.22 Bookmarks: Can I execute a default bookmark automatically when entering Browse mode for a table? +----------------------------------------------------------------------------------------------------- + +Yes. If a bookmark has the same label as a table name and it's not a +public bookmark, it will be executed. + +.. seealso:: :ref:`bookmarks` + +.. _faq6_23: + +6.23 Export: I heard phpMyAdmin can export Microsoft Excel files? +----------------------------------------------------------------- + +You can use :term:`CSV` for Microsoft Excel, +which works out of the box. + +.. versionchanged:: 3.4.5 + Since phpMyAdmin 3.4.5 support for direct export to Microsoft Excel version + 97 and newer was dropped. + +.. _faq6_24: + +6.24 Now that phpMyAdmin supports native MySQL 4.1.x column comments, what happens to my column comments stored in pmadb? +------------------------------------------------------------------------------------------------------------------------- + +Automatic migration of a table's pmadb-style column comments to the +native ones is done whenever you enter Structure page for this table. + +.. _faq6_25: + +6.25 (withdrawn). +----------------- + +.. _faq6_26: + +6.26 How can I select a range of rows? +-------------------------------------- + +Click the first row of the range, hold the shift key and click the +last row of the range. This works everywhere you see rows, for example +in Browse mode or on the Structure page. + +.. _faq6_27: + +6.27 What format strings can I use? +----------------------------------- + +In all places where phpMyAdmin accepts format strings, you can use +``@VARIABLE@`` expansion and `strftime `_ +format strings. The expanded variables depend on a context (for +example, if you haven't chosen a table, you can not get the table +name), but the following variables can be used: + +``@HTTP_HOST@`` + HTTP host that runs phpMyAdmin +``@SERVER@`` + MySQL server name +``@VERBOSE@`` + Verbose MySQL server name as defined in :config:option:`$cfg['Servers'][$i]['verbose']` +``@VSERVER@`` + Verbose MySQL server name if set, otherwise normal +``@DATABASE@`` + Currently opened database +``@TABLE@`` + Currently opened table +``@COLUMNS@`` + Columns of the currently opened table +``@PHPMYADMIN@`` + phpMyAdmin with version + +.. _faq6_28: + +6.28 (withdrawn). +----------------- + +.. _faq6_29: + +6.29 Why can't I get a chart from my query result table? +-------------------------------------------------------- + +Not every table can be put to the chart. Only tables with one, two or +three columns can be visualised as a chart. Moreover the table must be +in a special format for chart script to understand it. Currently +supported formats can be found in :ref:`charts`. + +.. _faq6_30: + +6.30 Import: How can I import ESRI Shapefiles? +---------------------------------------------- + +An ESRI Shapefile is actually a set of several files, where .shp file +contains geometry data and .dbf file contains data related to those +geometry data. To read data from .dbf file you need to have PHP +compiled with the dBase extension (--enable-dbase). Otherwise only +geometry data will be imported. + +To upload these set of files you can use either of the following +methods: + +Configure upload directory with :config:option:`$cfg['UploadDir']`, upload both .shp and .dbf files with +the same filename and chose the .shp file from the import page. + +Create a zip archive with .shp and .dbf files and import it. For this +to work, you need to set :config:option:`$cfg['TempDir']` to a place where the web server user can +write (for example ``'./tmp'``). + +To create the temporary directory on a UNIX-based system, you can do: + +.. code-block:: sh + + cd phpMyAdmin + mkdir tmp + chmod o+rwx tmp + +.. _faq6_31: + +6.31 How do I create a relation in designer? +-------------------------------------------- + +To select relation, click: The display column is shown in pink. To +set/unset a column as the display column, click the "Choose column to +display" icon, then click on the appropriate column name. + +.. _faq6_32: + +6.32 How can I use the zoom search feature? +------------------------------------------- + +The Zoom search feature is an alternative to table search feature. It allows +you to explore a table by representing its data in a scatter plot. You can +locate this feature by selecting a table and clicking the :guilabel:`Search` +tab. One of the sub-tabs in the :guilabel:`Table Search` page is +:guilabel:`Zoom Search`. + +Consider the table REL\_persons in :ref:`faq6_6` for +an example. To use zoom search, two columns need to be selected, for +example, id and town\_code. The id values will be represented on one +axis and town\_code values on the other axis. Each row will be +represented as a point in a scatter plot based on its id and +town\_code. You can include two additional search criteria apart from +the two fields to display. + +You can choose which field should be +displayed as label for each point. If a display column has been set +for the table (see :ref:`faqdisplay`), it is taken as the label unless +you specify otherwise. You can also select the maximum number of rows +you want to be displayed in the plot by specifing it in the 'Max rows +to plot' field. Once you have decided over your criteria, click 'Go' +to display the plot. + +After the plot is generated, you can use the +mouse wheel to zoom in and out of the plot. In addition, panning +feature is enabled to navigate through the plot. You can zoom-in to a +certain level of detail and use panning to locate your area of +interest. Clicking on a point opens a dialogue box, displaying field +values of the data row represented by the point. You can edit the +values if required and click on submit to issue an update query. Basic +instructions on how to use can be viewed by clicking the 'How to use?' +link located just above the plot. + +.. _faq6_33: + +6.33 When browsing a table, how can I copy a column name? +--------------------------------------------------------- + +Selecting the name of the column within the browse table header cell +for copying is difficult, as the columns support reordering by +dragging the header cells as well as sorting by clicking on the linked +column name. To copy a column name, double-click on the empty area +next to the column name, when the tooltip tells you to do so. This +will show you an input box with the column name. You may right-click +the column name within this input box to copy it to your clipboard. + +.. _faq6_34: + +6.34 How can I use the Favorite Tables feature? +--------------------------------------------------------- + +Favorite Tables feature is very much similar to Recent Tables feature. +It allows you to add a shortcut for the frequently used tables of any +database in the navigation panel . You can easily navigate to any table +in the list by simply choosing it from the list. These tables are stored +in your browser's local storage if you have not configured your +`phpMyAdmin Configuration Storage`. Otherwise these entries are stored in +`phpMyAdmin Configuration Storage`. + +IMPORTANT: In absence of `phpMyAdmin Configuration Storage`, your Favorite +tables may be different in different browsers based on your different +selections in them. + +To add a table to Favorite list simply click on the `Gray` star in front +of a table name in the list of tables of a Database and wait until it +turns to `Yellow`. +To remove a table from list, simply click on the `Yellow` star and +wait until it turns `Gray` again. + +Using :config:option:`$cfg['NumFavoriteTables']` in your :file:`config.inc.php` +file, you can define the maximum number of favorite tables shown in the +navigation panel. Its default value is `10`. + +.. _faq6_35: + +6.35 How can I use the Range search feature? +--------------------------------------------------------- + +With the help of range search feature, one can specify a range of values for +particular column(s) while performing search operation on a table from the `Search` +tab. + +To use this feature simply click on the `BETWEEN` or `NOT BETWEEN` operators +from the operator select list in front of the column name. On choosing one of the +above options, a dialog box will show up asking for the `Minimum` and `Maximum` +value for that column. Only the specified range of values will be included +in case of `BETWEEN` and excluded in case of `NOT BETWEEN` from the final results. + +Note: The Range search feature will work only `Numeric` and `Date` data type columns. + +.. _faq6_36: + +6.36 What is Central columns and how can I use this feature? +------------------------------------------------------------ + +As the name suggests, the Central columns feature enables to maintain a central list of +columns per database to avoid similar name for the same data element and bring consistency +of data type for the same data element. You can use the central list of columns to +add an element to any table structure in that database which will save from writing +similar column name and column definition. + +To add a column to central list, go to table structure page, check the columns you want +to include and then simply click on "Add to central columns". If you want to add all +unique columns from more than one table from a database then go to database structure page, +check the tables you want to include and then select "Add columns to central list". + +To remove a column from central list, go to Table structure page, check the columns you want +to remove and then simply click on "Remove from central columns". If you want to remove all +columns from more than one tables from a database then go to database structure page, +check the tables you want to include and then select "Remove columns from central list". + +To view and manage the central list, select the database you want to manage central columns +for then from the top menu click on "Central columns". You will be taken to a page where +you will have options to edit, delete or add new columns to central list. + +.. _faq6_37: + +6.37 How can I use Improve Table structure feature? +--------------------------------------------------------- + +Improve table structure feature helps to bring the table structure upto +Third Normal Form. A wizard is presented to user which asks questions about the +elements during the various steps for normalization and a new structure is proposed +accordingly to bring the table into the First/Second/Third Normal form. +On startup of the wizard, user gets to select upto what normal form they want to +normalize the table structure. + +Here is an example table which you can use to test all of the three First, Second and +Third Normal Form. + +.. code-block:: mysql + + CREATE TABLE `VetOffice` ( + `petName` varchar(64) NOT NULL, + `petBreed` varchar(64) NOT NULL, + `petType` varchar(64) NOT NULL, + `petDOB` date NOT NULL, + `ownerLastName` varchar(64) NOT NULL, + `ownerFirstName` varchar(64) NOT NULL, + `ownerPhone1` int(12) NOT NULL, + `ownerPhone2` int(12) NOT NULL, + `ownerEmail` varchar(64) NOT NULL, + ); + +The above table is not in First normal Form as no :term:`primary key` exists. Primary key +is supposed to be (`petName`,`ownerLastName`,`ownerFirstName`) . If the :term:`primary key` +is chosen as suggested the resultant table won't be in Second as well as Third Normal +form as the following dependencies exists. + +.. code-block:: mysql + + (OwnerLastName, OwnerFirstName) -> OwnerEmail + (OwnerLastName, OwnerFirstName) -> OwnerPhone + PetBreed -> PetType + +Which says, OwnerEmail depends on OwnerLastName and OwnerFirstName. +OwnerPhone depends on OwnerLastName and OwnerFirstName. +PetType depends on PetBreed. + +.. _faq6_38: + +6.38 How can I reassign auto-incremented values? +------------------------------------------------ + +Some users prefer their AUTO_INCREMENT values to be consecutive; this is not +always the case after row deletion. + +Here are the steps to accomplish this. These are manual steps because they +involve a manual verification at one point. + +* Ensure that you have exclusive access to the table to rearrange + +* On your :term:`primary key` column (i.e. id), remove the AUTO_INCREMENT setting + +* Delete your primary key in Structure > indexes + +* Create a new column future_id as primary key, AUTO_INCREMENT + +* Browse your table and verify that the new increments correspond to what + you're expecting + +* Drop your old id column + +* Rename the future_id column to id + +* Move the new id column via Structure > Move columns + +.. _faq6_39: + +6.39 What is the "Adjust privileges" option when renaming, copying, or moving a database, table, column, or procedure? +---------------------------------------------------------------------------------------------------------------------- + +When renaming/copying/moving a database/table/column/procedure, +MySQL does not adjust the original privileges relating to these objects +on its own. By selecting this option, phpMyAdmin will adjust the privilege +table so that users have the same privileges on the new items. + +For example: A user 'bob'@'localhost' has a 'SELECT' privilege on a +column named 'id'. Now, if this column is renamed to 'id_new', MySQL, +on its own, would **not** adjust the column privileges to the new column name. +phpMyAdmin can make this adjustment for you automatically. + +Notes: + +* While adjusting privileges for a database, the privileges of all + database-related elements (tables, columns and procedures) are also adjusted + to the database's new name. + +* Similarly, while adjusting privileges for a table, the privileges of all + the columns inside the new table are also adjusted. + +* While adjusting privileges, the user performing the operation **must** have the following + privileges: + + * SELECT, INSERT, UPDATE, DELETE privileges on following tables: + `mysql`.`db`, `mysql`.`columns_priv`, `mysql`.`tables_priv`, `mysql`.`procs_priv` + * FLUSH privilege (GLOBAL) + +Thus, if you want to replicate the database/table/column/procedure as it is +while renaming/copying/moving these objects, make sure you have checked this option. + +.. _faq6_40: + +6.40 I see "Bind parameters" checkbox in the "SQL" page. How do I write parameterized SQL queries? +-------------------------------------------------------------------------------------------------- + +From version 4.5, phpMyAdmin allows users to execute parameterized queries in the "SQL" page. +Parameters should be prefixed with a colon(:) and when the "Bind parameters" checkbox is checked +these parameters will be identified and input fields for these parameters will be presented. +Values entered in these field will be substituted in the query before being executed. + +.. _faq6_41: + +6.41 I get import errors while importing the dumps exported from older MySQL versions (pre-5.7.6) into newer MySQL versions (5.7.7+), but they work fine when imported back on same older versions ? +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +If you get errors like *#1031 - Table storage engine for 'table_name' doesn't have this option* +while importing the dumps exported from pre-5.7.7 MySQL servers into new MySQL server versions 5.7.7+, +it might be because ROW_FORMAT=FIXED is not supported with InnoDB tables. Moreover, the value of +`innodb_strict_mode `_ would define if this would be reported as a warning or as an error. + +Since MySQL version 5.7.9, the default value for `innodb_strict_mode` is `ON` and thus would generate +an error when such a CREATE TABLE or ALTER TABLE statement is encountered. + +There are two ways of preventing such errors while importing: + +* Change the value of `innodb_strict_mode` to `OFF` before starting the import and turn it `ON` after + the import is successfully completed. +* This can be achieved in two ways: + + * Go to 'Variables' page and edit the value of `innodb_strict_mode` + * Run the query : `SET GLOBAL `innodb_strict_mode` = '[value]'` + +After the import is done, it is suggested that the value of `innodb_strict_mode` should be reset to the +original value. + +.. _faqproject: + +phpMyAdmin project +++++++++++++++++++ + +.. _faq7_1: + +7.1 I have found a bug. How do I inform developers? +--------------------------------------------------- + +Our issues tracker is located at . +For security issues, please refer to the instructions at to email +the developers directly. + +.. _faq7_2: + +7.2 I want to translate the messages to a new language or upgrade an existing language, where do I start? +--------------------------------------------------------------------------------------------------------- + +Translations are very welcome and all you need to have are the +language skills. The easiest way is to use our `online translation +service `_. You can check +out all the possibilities to translate in the `translate section on +our website `_. + +.. _faq7_3: + +7.3 I would like to help out with the development of phpMyAdmin. How should I proceed? +-------------------------------------------------------------------------------------- + +We welcome every contribution to the development of phpMyAdmin. You +can check out all the possibilities to contribute in the `contribute +section on our website +`_. + +.. seealso:: :ref:`developers` + +.. _faqsecurity: + +Security +++++++++ + +.. _faq8_1: + +8.1 Where can I get information about the security alerts issued for phpMyAdmin? +-------------------------------------------------------------------------------- + +Please refer to . + +.. _faq8_2: + +8.2 How can I protect phpMyAdmin against brute force attacks? +------------------------------------------------------------- + +If you use Apache web server, phpMyAdmin exports information about +authentication to the Apache environment and it can be used in Apache +logs. Currently there are two variables available: + +``userID`` + User name of currently active user (they do not have to be logged in). +``userStatus`` + Status of currently active user, one of ``ok`` (user is logged in), + ``mysql-denied`` (MySQL denied user login), ``allow-denied`` (user denied + by allow/deny rules), ``root-denied`` (root is denied in configuration), + ``empty-denied`` (empty password is denied). + +``LogFormat`` directive for Apache can look like following: + +.. code-block:: apache + + LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n" pma_combined + +You can then use any log analyzing tools to detect possible break-in +attempts. + +.. _faq8_3: + +8.3 Why are there path disclosures when directly loading certain files? +----------------------------------------------------------------------- + +This is a server configuration problem. Never enable ``display_errors`` on a production site. + +.. _faq8_4: + +8.4 CSV files exported from phpMyAdmin could allow a formula injection attack. +------------------------------------------------------------------------------ + +It is possible to generate a :term:`CSV` file that, when imported to a spreadsheet program such as Microsoft Excel, +could potentially allow the execution of arbitrary commands. + +The CSV files generated by phpMyAdmin could potentially contain text that would be interpreted by a spreadsheet program as +a formula, but we do not believe escaping those fields is the proper behavior. There is no means to properly escape and +differentiate between a desired text output and a formula that should be escaped, and CSV is a text format where function +definitions should not be interpreted anyway. We have discussed this at length and feel it is the responsibility of the +spreadsheet program to properly parse and sanitize such data on input instead. + +Google also has a `similar view `_. + +.. _faqsynchronization: + +Synchronization ++++++++++++++++ + +.. _faq9_1: + +9.1 (withdrawn). +---------------- + +.. _faq9_2: + +9.2 (withdrawn). +---------------- diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/glossary.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/glossary.rst.txt new file mode 100644 index 0000000..87eb074 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/glossary.rst.txt @@ -0,0 +1,440 @@ +.. _glossary: + +Glossary +======== + +From Wikipedia, the free encyclopedia + +.. glossary:: + + .htaccess + the default name of Apache's directory-level configuration file. + + .. seealso:: + + ACL + Access Control List + + Blowfish + a keyed, symmetric block cipher, designed in 1993 by `Bruce Schneier `_. + + .. seealso:: + + Browser + a software application that enables a user to display and interact with text, images, and other information typically located on a web page at a website on the World Wide Web. + + .. seealso:: + + bzip2 + a free software/open-source data compression algorithm and program developed by Julian Seward. + + .. seealso:: + + CGI + Common Gateway Interface is an important World Wide Web technology that + enables a client web browser to request data from a program executed on + the web server. + + .. seealso:: + + Changelog + a log or record of changes made to a project. + + .. seealso:: + + Client + a computer system that accesses a (remote) service on another computer by some kind of network. + + .. seealso:: + + column + a set of data values of a particularly simple type, one for each row of the table. + + .. seealso:: + + Cookie + a packet of information sent by a server to a World Wide Web browser and then sent back by the browser each time it accesses that server. + + .. seealso:: + + CSV + Comma-separated values + + .. seealso:: + + DB + look at :term:`Database` + + Database + an organized collection of data. + + .. seealso:: + + Engine + look at :term:`Storage Engines` + + PHP extension + a PHP module that extends PHP with additional functionality. + + .. seealso:: + + FAQ + Frequently Asked Questions is a list of commonly asked question and their + answers. + + .. seealso:: + + Field + one part of divided data/columns. + + .. seealso:: + + Foreign key + a column or group of columns in a database row that points to a key column + or group of columns forming a key of another database row in some + (usually different) table. + + .. seealso:: + + GD + Graphics Library by Thomas Boutell and others for dynamically manipulating images. + + .. seealso:: + + GD2 + look at :term:`GD` + + GZip + GZip is short for GNU zip, a GNU free software file compression program. + + .. seealso:: + + host + any machine connected to a computer network, a node that has a hostname. + + .. seealso:: + + hostname + the unique name by which a network-attached device is known on a network. + + .. seealso:: + + HTTP + Hypertext Transfer Protocol is the primary method used to transfer or + convey information on the World Wide Web. + + .. seealso:: + + HTTPS + a :term:`HTTP`-connection with additional security measures. + + .. seealso:: + + IEC + International Electrotechnical Commission + + IIS + Internet Information Services is a set of internet-based services for + servers using Microsoft Windows. + + .. seealso:: + + Index + a feature that allows quick access to the rows in a table. + + .. seealso:: + + IP + "Internet Protocol" is a data-oriented protocol used by source and + destination hosts for communicating data across a packet-switched + internetwork. + + .. seealso:: + + IP Address + a unique number that devices use in order to identify and communicate with each other on a network utilizing the Internet Protocol standard. + + .. seealso:: + + IPv6 + IPv6 (Internet Protocol version 6) is the latest revision of the + Internet Protocol (:term:`IP`), designed to deal with the + long-anticipated problem of its predecessor IPv4 running out of addresses. + + .. seealso:: + + ISAPI + Internet Server Application Programming Interface is the API of Internet Information Services (IIS). + + .. seealso:: + + ISP + An Internet service provider is a business or organization that offers users + access to the Internet and related services. + + .. seealso:: + + ISO + International Standards Organization + + .. seealso:: `ISO organization website `_ + .. seealso:: + + JPEG + a most commonly used standard method of lossy compression for photographic images. + + .. seealso:: + + JPG + look at :term:`JPEG` + + Key + look at :term:`Index` + + LATEX + a document preparation system for the TeX typesetting program. + + .. seealso:: + + Mac + Apple Macintosh is a line of personal computers designed, developed, manufactured, and marketed by Apple Inc. + + .. seealso:: + + macOS + the operating system which is included with all currently shipping Apple Macintosh computers in the consumer and professional markets. + + .. seealso:: + + mbstring + The PHP `mbstring` functions provide support for languages represented by multi-byte character sets, most notably UTF-8. + + If you have troubles installing this extension, please follow :ref:`faqmysql`, it provides useful hints. + + .. seealso:: + + Media type + A media type (formerly known as MIME type) is a two-part identifier + for file formats and format contents transmitted on the Internet. + + .. seealso:: + + MIME + Multipurpose Internet Mail Extensions is + an Internet Standard for the format of e-mail. + + .. seealso:: + + module + modular extension for the Apache HTTP Server httpd. + + .. seealso:: + + mod_proxy_fcgi + an Apache module implementing a Fast CGI interface; PHP can be run as a CGI module, FastCGI, or + directly as an Apache module. + + .. seealso:: + + MySQL + a multithreaded, multi-user, SQL (Structured Query Language) Database Management System (DBMS). + + .. seealso:: + + MySQLi + the improved MySQL client PHP extension. + + .. seealso:: `PHP manual for MySQL Improved Extension `_ + .. seealso:: + + mysql + the MySQL client PHP extension. + + .. seealso:: + + OpenDocument + an open standard for office documents. + + .. seealso:: + + OS X + look at :term:`macOS`. + + .. seealso:: + + PDF + Portable Document Format is a file format developed by Adobe Systems for + representing two-dimensional documents in a device-independent and + resolution-independent format. + + .. seealso:: + + PEAR + the PHP Extension and Application Repository. + + .. seealso:: `PEAR website `_ + .. seealso:: `Wikipedia page for PEAR `_ + + PCRE + Perl-Compatible Regular Expressions is the Perl-compatible regular + expression functions for PHP + + .. seealso:: + .. seealso:: `PHP manual for Perl-Compatible Regular Expressions `_ + .. seealso:: + + PHP + short for "PHP: Hypertext Preprocessor", is an open-source, reflective + programming language used mainly for developing server-side applications + and dynamic web content, and more recently, a broader range of software + applications. + + .. seealso:: + + port + a connection through which data is sent and received. + + .. seealso:: + + primary key + A primary key is an index over one or more fields in a table with + unique values for every single row in this table. Every table should have + a primary key for easier accessing/identifying data in this table. There + can only be one primary key per table and it is named always **PRIMARY**. + In fact, a primary key is just an :term:`unique key` with the name + **PRIMARY**. If no primary key is defined MySQL will use first *unique + key* as primary key if there is one. + + You can create the primary key when creating the table (in phpMyAdmin + just check the primary key radio buttons for each field you wish to be + part of the primary key). + + You can also add a primary key to an existing table with `ALTER` `TABLE` + or `CREATE` `INDEX` (in phpMyAdmin you can just click on 'add index' on + the table structure page below the listed fields). + + RFC + Request for Comments (RFC) documents are a series of memoranda + encompassing new research, innovations, and methodologies applicable to + Internet technologies. + + .. seealso:: + + RFC 1952 + GZIP file format specification version 4.3 + + .. seealso:: :rfc:`1952` + + Row (record, tuple) + represents a single, implicitly structured data item in a table. + + .. seealso:: + + Server + a computer system that provides services to other computing systems over a network. + + .. seealso:: + + Storage Engines + MySQL can use several different formats for storing data on disk, these + are called storage engines or table types. phpMyAdmin allows a user to + change their storage engine for a particular table through the operations + tab. + + Common table types are InnoDB and MyISAM, though many others exist and + may be desirable in some situations. + + .. seealso:: `MySQL doc chapter about Alternative Storage Engines `_ + .. seealso:: + + socket + a form of inter-process communication. + + .. seealso:: + + SSL + Secure Sockets Layer, (now superseded by TLS) is a cryptographic protocol + which provides secure communication on the Internet. + + .. seealso:: + + Stored procedure + a subroutine available to applications accessing a relational database system + + .. seealso:: + + SQL + Structured Query Language + + .. seealso:: + + table + a set of data elements (cells) that is organized, defined and stored as + horizontal rows and vertical columns where each item can be uniquely + identified by a label or key or by its position in relation to other + items. + + .. seealso:: + + tar + a type of archive file format, from "Tape Archive". + + .. seealso:: + + TCP + Transmission Control Protocol is one of the core protocols of the + Internet protocol suite. + + .. seealso:: + + TCPDF + PHP library to generate PDF files. + + .. seealso:: + .. seealso:: + + trigger + a procedural code that is automatically executed in response to certain events on a particular table or view in a database + + .. seealso:: + + unique key + A unique key is an index over one or more fields in a table which has a + unique value for each row. The first unique key will be treated as + :term:`primary key` if there is no *primary key* defined. + + URL + Uniform Resource Locator is a sequence of characters, conforming to a + standardized format, that is used for referring to resources, such as + documents and images on the Internet, by their location. + + .. seealso:: + + Web server + A computer (program) that is responsible for accepting HTTP requests from clients and serving them web pages. + + .. seealso:: + + XML + Extensible Markup Language is a W3C-recommended general-purpose markup + language for creating special-purpose markup languages, capable of + describing many different kinds of data. + + .. seealso:: + + ZIP + a popular data compression and archival format. + + .. seealso:: + + Zlib + an open-source, cross-platform data compression library by `Jean-loup Gailly `_ and `Mark Adler `_. + + .. seealso:: + + Content Security Policy + The HTTP `Content-Security-Policy` response header allows web site administrators + to control resources the user agent is allowed to load for a given page. + + .. seealso:: + .. seealso:: diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/privileges.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/privileges.rst.txt new file mode 100644 index 0000000..a2647d1 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/privileges.rst.txt @@ -0,0 +1,74 @@ +User management +=============== + +User management is the process of controlling which users are allowed to +connect to the MySQL server and what permissions they have on each database. +phpMyAdmin does not handle user management, rather it passes the username and +password on to MySQL, which then determines whether a user is permitted to +perform a particular action. Within phpMyAdmin, administrators have full +control over creating users, viewing and editing privileges for existing users, +and removing users. + +Within phpMyAdmin, user management is controlled via the :guilabel:`User accounts` tab +from the main page. Users can be created, edited, and removed. + +Creating a new user +------------------- + +To create a new user, click the :guilabel:`Add user account` link near the bottom +of the :guilabel:`User accounts` page (you must be a "superuser", e.g., user "root"). +Use the textboxes and drop-downs to configure the user to your particular +needs. You can then select whether to create a database for that user and grant +specific global privileges. Once you've created the user (by clicking Go), you +can define that user's permissions on a specific database (don't grant global +privileges in that case). In general, users do not need any global privileges +(other than USAGE), only permissions for their specific database. + +Editing an existing user +------------------------ + +To edit an existing user, simply click the pencil icon to the right of that +user in the :guilabel:`User accounts` page. You can then edit their global- and +database-specific privileges, change their password, or even copy those +privileges to a new user. + +Deleting a user +--------------- + +From the :guilabel:`User accounts` page, check the checkbox for the user you wish to +remove, select whether or not to also remove any databases of the same name (if +they exist), and click Go. + +Assigning privileges to user for a specific database +---------------------------------------------------- + +Users are assigned to databases by editing the user record (from the +:guilabel:`User accounts` link on the home page). +If you are creating a user specifically for a given table +you will have to create the user first (with no global privileges) and then go +back and edit that user to add the table and privileges for the individual +table. + +.. _configurablemenus: + +Configurable menus and user groups +---------------------------------- + +By enabling :config:option:`$cfg['Servers'][$i]['users']` and +:config:option:`$cfg['Servers'][$i]['usergroups']` you can customize what users +will see in the phpMyAdmin navigation. + +.. warning:: + + This feature only limits what a user sees, they are still able to use all the + functions. So this can not be considered as a security limitation. Should + you want to limit what users can do, use MySQL privileges to achieve that. + +With this feature enabled, the :guilabel:`User accounts` management interface gains +a second tab for managing :guilabel:`User groups`, where you can define what each +group will view (see image below) and you can then assign each user to one of +these groups. Users will be presented with a simplified user interface, which might be +useful for inexperienced users who could be overwhelmed by all the features +phpMyAdmin provides. + +.. image:: images/usergroups.png diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/setup.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/setup.rst.txt new file mode 100644 index 0000000..a2f918c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/setup.rst.txt @@ -0,0 +1,1166 @@ +.. _setup: + +Installation +============ + +phpMyAdmin does not apply any special security methods to the MySQL +database server. It is still the system administrator's job to grant +permissions on the MySQL databases properly. phpMyAdmin's :guilabel:`Users` +page can be used for this. + +Linux distributions ++++++++++++++++++++ + +phpMyAdmin is included in most Linux distributions. It is recommended to use +distribution packages when possible - they usually provide integration to your +distribution and you will automatically get security updates from your distribution. + +.. _debian-package: + +Debian and Ubuntu +----------------- + +Most Debian and Ubuntu versions include a phpMyAdmin package, but be aware that +the configuration file is maintained in ``/etc/phpmyadmin`` and may differ in +some ways from the official phpMyAdmin documentation. Specifically, it does: + +* Configuration of a web server (works for Apache and lighttpd). +* Creating of :ref:`linked-tables` using dbconfig-common. +* Securing setup script, see :ref:`debian-setup`. + +More specific details about installing Debian or Ubuntu packages are available +`in our wiki `_. + +.. seealso:: + + More information can be found in `README.Debian `_ + (it is installed as :file:`/usr/share/doc/phpmyadmin/README.Debian` with the package). + +OpenSUSE +-------- + +OpenSUSE already comes with phpMyAdmin package, just install packages from +the `openSUSE Build Service `_. + +Gentoo +------ + +Gentoo ships the phpMyAdmin package, both in a near-stock configuration as well +as in a ``webapp-config`` configuration. Use ``emerge dev-db/phpmyadmin`` to +install. + +Mandriva +-------- + +Mandriva ships the phpMyAdmin package in their ``contrib`` branch and can be +installed via the usual Control Center. + +Fedora +------ + +Fedora ships the phpMyAdmin package, but be aware that the configuration file +is maintained in ``/etc/phpMyAdmin/`` and may differ in some ways from the +official phpMyAdmin documentation. + +Red Hat Enterprise Linux +------------------------ + +Red Hat Enterprise Linux itself and thus derivatives like CentOS don't +ship phpMyAdmin, but the Fedora-driven repository +`Extra Packages for Enterprise Linux (EPEL) `_ +is doing so, if it's +`enabled `_. +But be aware that the configuration file is maintained in +``/etc/phpMyAdmin/`` and may differ in some ways from the +official phpMyAdmin documentation. + +Installing on Windows ++++++++++++++++++++++ + +The easiest way to get phpMyAdmin on Windows is using third party products +which include phpMyAdmin together with a database and web server such as +`XAMPP `_. + +You can find more of such options at `Wikipedia `_. + +Installing from Git ++++++++++++++++++++ + +In order to install from Git, you'll need a few supporting applications: + +* `Git `_ to download the source, or you can download the most recent source directly from `Github `_ +* `Composer `__ +* `Node.js `_ (version 10 or higher) +* `Yarn `_ + +You can clone current phpMyAdmin source from +``https://github.com/phpmyadmin/phpmyadmin.git``: + +.. code-block:: sh + + git clone https://github.com/phpmyadmin/phpmyadmin.git + +Additionally you need to install dependencies using `Composer `__: + +.. code-block:: sh + + composer update + +If you do not intend to develop, you can skip the installation of developer tools +by invoking: + +.. code-block:: sh + + composer update --no-dev + +Finally, you'll need to use `Yarn`_ to install some JavaScript dependencies: + +.. code-block:: sh + + yarn install --production + +.. _composer: + +Installing using Composer ++++++++++++++++++++++++++ + +You can install phpMyAdmin using the `Composer tool`_, since 4.7.0 the releases +are automatically mirrored to the default `Packagist`_ repository. + +.. note:: + + The content of the Composer repository is automatically generated + separately from the releases, so the content doesn't have to be + 100% same as when you download the tarball. There should be no + functional differences though. + +To install phpMyAdmin simply run: + +.. code-block:: sh + + composer create-project phpmyadmin/phpmyadmin + +Alternatively you can use our own composer repository, which contains +the release tarballs and is available at +: + +.. code-block:: sh + + composer create-project phpmyadmin/phpmyadmin --repository-url=https://www.phpmyadmin.net/packages.json --no-dev + +.. _docker: + +Installing using Docker ++++++++++++++++++++++++ + +phpMyAdmin comes with a `Docker official image`_, which you can easily deploy. You can +download it using: + +.. code-block:: sh + + docker pull phpmyadmin + +The phpMyAdmin server will listen on port 80. It supports several ways of +configuring the link to the database server, either by Docker's link feature +by linking your database container to ``db`` for phpMyAdmin (by specifying +``--link your_db_host:db``) or by environment variables (in this case it's up +to you to set up networking in Docker to allow the phpMyAdmin container to access +the database container over the network). + +.. _docker-vars: + +Docker environment variables +---------------------------- + +You can configure several phpMyAdmin features using environment variables: + +.. envvar:: PMA_ARBITRARY + + Allows you to enter a database server hostname on login form. + + .. seealso:: :config:option:`$cfg['AllowArbitraryServer']` + +.. envvar:: PMA_HOST + + Hostname or IP address of the database server to use. + + .. seealso:: :config:option:`$cfg['Servers'][$i]['host']` + +.. envvar:: PMA_HOSTS + + Comma-separated hostnames or IP addresses of the database servers to use. + + .. note:: Used only if :envvar:`PMA_HOST` is empty. + +.. envvar:: PMA_VERBOSE + + Verbose name of the database server. + + .. seealso:: :config:option:`$cfg['Servers'][$i]['verbose']` + +.. envvar:: PMA_VERBOSES + + Comma-separated verbose name of the database servers. + + .. note:: Used only if :envvar:`PMA_VERBOSE` is empty. + +.. envvar:: PMA_USER + + User name to use for :ref:`auth_config`. + +.. envvar:: PMA_PASSWORD + + Password to use for :ref:`auth_config`. + +.. envvar:: PMA_PORT + + Port of the database server to use. + +.. envvar:: PMA_PORTS + + Comma-separated ports of the database server to use. + + .. note:: Used only if :envvar:`PMA_PORT` is empty. + +.. envvar:: PMA_ABSOLUTE_URI + + The fully-qualified path (``https://pma.example.net/``) where the reverse + proxy makes phpMyAdmin available. + + .. seealso:: :config:option:`$cfg['PmaAbsoluteUri']` + +.. envvar:: HIDE_PHP_VERSION + + If defined, this option will hide the PHP version (`expose_php = Off`). + Set to any value (such as `HIDE_PHP_VERSION=true`). + +.. envvar:: UPLOAD_LIMIT + + If set, this option will override the default value for apache and php-fpm (this will change ``upload_max_filesize`` and ``post_max_size`` values). + + .. note:: Format as `[0-9+](K,M,G)` default value is `2048K` + +.. envvar:: PMA_CONFIG_BASE64 + + If set, this option will override the default `config.inc.php` with the base64 decoded contents of the variable. + +.. envvar:: PMA_USER_CONFIG_BASE64 + + If set, this option will override the default `config.user.inc.php` with the base64 decoded contents of the variable. + + +By default, :ref:`cookie` is used, but if :envvar:`PMA_USER` and +:envvar:`PMA_PASSWORD` are set, it is switched to :ref:`auth_config`. + +.. note:: + + The credentials you need to log in are stored in the MySQL server, in case + of Docker image, there are various ways to set it (for example + :samp:`MYSQL_ROOT_PASSWORD` when starting the MySQL container). Please check + documentation for `MariaDB container `_ + or `MySQL container `_. + +.. _docker-custom: + +Customizing configuration +------------------------- + +Additionally configuration can be tweaked by :file:`/etc/phpmyadmin/config.user.inc.php`. If +this file exists, it will be loaded after configuration is generated from above +environment variables, so you can override any configuration variable. This +configuration can be added as a volume when invoking docker using +`-v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php` parameters. + +Note that the supplied configuration file is applied after :ref:`docker-vars`, +but you can override any of the values. + +For example to change the default behavior of CSV export you can use the following +configuration file: + +.. code-block:: php + + [ + 'auth_type' => 'cookie', + 'host' => 'mydb1', + 'port' => 3306, + 'verbose' => 'Verbose name 1', + ], + 2 => [ + 'auth_type' => 'cookie', + 'host' => 'mydb2', + 'port' => 3306, + 'verbose' => 'Verbose name 2', + ], + ]; + +.. seealso:: + + See :ref:`config` for detailed description of configuration options. + +Docker Volumes +-------------- + +You can use the following volumes to customize image behavior: + +:file:`/etc/phpmyadmin/config.user.inc.php` + + Can be used for additional settings, see the previous chapter for more details. + +:file:`/sessions/` + + Directory where PHP sessions are stored. You might want to share this + for example when using :ref:`auth_signon`. + +:file:`/www/themes/` + + Directory where phpMyAdmin looks for themes. By default only those shipped + with phpMyAdmin are included, but you can include additional phpMyAdmin + themes (see :ref:`themes`) by using Docker volumes. + +Docker Examples +--------------- + +To connect phpMyAdmin to a given server use: + +.. code-block:: sh + + docker run --name myadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin/phpmyadmin + +To connect phpMyAdmin to more servers use: + +.. code-block:: sh + + docker run --name myadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin/phpmyadmin + +To use arbitrary server option: + +.. code-block:: sh + + docker run --name myadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin/phpmyadmin + +You can also link the database container using Docker: + +.. code-block:: sh + + docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin/phpmyadmin + +Running with additional configuration: + +.. code-block:: sh + + docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php phpmyadmin/phpmyadmin + +Running with additional themes: + +.. code-block:: sh + + docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /custom/phpmyadmin/theme/:/www/themes/theme/ phpmyadmin/phpmyadmin + +Using docker-compose +-------------------- + +Alternatively, you can also use docker-compose with the docker-compose.yml from +. This will run phpMyAdmin with an +arbitrary server - allowing you to specify MySQL/MariaDB server on the login page. + +.. code-block:: sh + + docker-compose up -d + +Customizing configuration file using docker-compose +--------------------------------------------------- + +You can use an external file to customize phpMyAdmin configuration and pass it +using the volumes directive: + +.. code-block:: yaml + + phpmyadmin: + image: phpmyadmin/phpmyadmin + container_name: phpmyadmin + environment: + - PMA_ARBITRARY=1 + restart: always + ports: + - 8080:80 + volumes: + - /sessions + - ~/docker/phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php + - /custom/phpmyadmin/theme/:/www/themes/theme/ + +.. seealso:: :ref:`docker-custom` + +Running behind haproxy in a subdirectory +---------------------------------------- + +When you want to expose phpMyAdmin running in a Docker container in a +subdirectory, you need to rewrite the request path in the server proxying the +requests. + +For example, using haproxy it can be done as: + +.. code-block:: text + + frontend http + bind *:80 + option forwardfor + option http-server-close + + ### NETWORK restriction + acl LOCALNET src 10.0.0.0/8 192.168.0.0/16 172.16.0.0/12 + + # /phpmyadmin + acl phpmyadmin path_dir /phpmyadmin + use_backend phpmyadmin if phpmyadmin LOCALNET + + backend phpmyadmin + mode http + + reqirep ^(GET|POST|HEAD)\ /phpmyadmin/(.*) \1\ /\2 + + # phpMyAdmin container IP + server localhost 172.30.21.21:80 + +When using traefik, something like following should work: + +.. code-block:: text + + defaultEntryPoints = ["http"] + [entryPoints] + [entryPoints.http] + address = ":80" + [entryPoints.http.redirect] + regex = "(http:\\/\\/[^\\/]+\\/([^\\?\\.]+)[^\\/])$" + replacement = "$1/" + + [backends] + [backends.myadmin] + [backends.myadmin.servers.myadmin] + url="http://internal.address.to.pma" + + [frontends] + [frontends.myadmin] + backend = "myadmin" + passHostHeader = true + [frontends.myadmin.routes.default] + rule="PathPrefixStrip:/phpmyadmin/;AddPrefix:/" + +You then should specify :envvar:`PMA_ABSOLUTE_URI` in the docker-compose +configuration: + +.. code-block:: yaml + + version: '2' + + services: + phpmyadmin: + restart: always + image: phpmyadmin/phpmyadmin + container_name: phpmyadmin + hostname: phpmyadmin + domainname: example.com + ports: + - 8000:80 + environment: + - PMA_HOSTS=172.26.36.7,172.26.36.8,172.26.36.9,172.26.36.10 + - PMA_VERBOSES=production-db1,production-db2,dev-db1,dev-db2 + - PMA_USER=root + - PMA_PASSWORD= + - PMA_ABSOLUTE_URI=http://example.com/phpmyadmin/ + +IBM Cloud ++++++++++ + +One of our users has created a helpful guide for installing phpMyAdmin on the +`IBM Cloud platform `_. + +.. _quick_install: + +Quick Install ++++++++++++++ + +#. Choose an appropriate distribution kit from the phpmyadmin.net + Downloads page. Some kits contain only the English messages, others + contain all languages. We'll assume you chose a kit whose name + looks like ``phpMyAdmin-x.x.x -all-languages.tar.gz``. +#. Ensure you have downloaded a genuine archive, see :ref:`verify`. +#. Untar or unzip the distribution (be sure to unzip the subdirectories): + ``tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz`` in your + webserver's document root. If you don't have direct access to your + document root, put the files in a directory on your local machine, + and, after step 4, transfer the directory on your web server using, + for example, FTP. +#. Ensure that all the scripts have the appropriate owner (if PHP is + running in safe mode, having some scripts with an owner different from + the owner of other scripts will be a problem). See :ref:`faq4_2` and + :ref:`faq1_26` for suggestions. +#. Now you must configure your installation. There are two methods that + can be used. Traditionally, users have hand-edited a copy of + :file:`config.inc.php`, but now a wizard-style setup script is provided + for those who prefer a graphical installation. Creating a + :file:`config.inc.php` is still a quick way to get started and needed for + some advanced features. + +Manually creating the file +-------------------------- + +To manually create the file, simply use your text editor to create the +file :file:`config.inc.php` (you can copy :file:`config.sample.inc.php` to get +a minimal configuration file) in the main (top-level) phpMyAdmin +directory (the one that contains :file:`index.php`). phpMyAdmin first +loads the default configuration values and then overrides those values +with anything found in :file:`config.inc.php`. If the default value is +okay for a particular setting, there is no need to include it in +:file:`config.inc.php`. You'll probably need only a few directives to get going; a +simple configuration may look like this: + +.. code-block:: xml+php + + or use setup script on our demo +server: . + +.. _verify: + +Verifying phpMyAdmin releases ++++++++++++++++++++++++++++++ + +Since July 2015 all phpMyAdmin releases are cryptographically signed by the +releasing developer, who through January 2016 was Marc Delisle. His key id is +0xFEFC65D181AF644A, his PGP fingerprint is: + +.. code-block:: console + + 436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A + +and you can get more identification information from . + +Beginning in January 2016, the release manager is Isaac Bennetch. His key id is +0xCE752F178259BD92, and his PGP fingerprint is: + +.. code-block:: console + + 3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92 + +and you can get more identification information from . + +Some additional downloads (for example themes) might be signed by Michal Čihař. His key id is +0x9C27B31342B7511D, and his PGP fingerprint is: + +.. code-block:: console + + 63CB 1DF1 EF12 CF2A C0EE 5A32 9C27 B313 42B7 511D + +and you can get more identification information from . + +You should verify that the signature matches the archive you have downloaded. +This way you can be sure that you are using the same code that was released. +You should also verify the date of the signature to make sure that you +downloaded the latest version. + +Each archive is accompanied by ``.asc`` files which contain the PGP signature +for it. Once you have both of them in the same folder, you can verify the signature: + +.. code-block:: console + + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: Can't check signature: public key not found + +As you can see gpg complains that it does not know the public key. At this +point, you should do one of the following steps: + +* Download the keyring from `our download server `_, then import it with: + +.. code-block:: console + + $ gpg --import phpmyadmin.keyring + +* Download and import the key from one of the key servers: + +.. code-block:: console + + $ gpg --keyserver hkp://pgp.mit.edu --recv-keys 3D06A59ECE730EB71B511C17CE752F178259BD92 + gpg: requesting key 8259BD92 from hkp server pgp.mit.edu + gpg: key 8259BD92: public key "Isaac Bennetch " imported + gpg: no ultimately trusted keys found + gpg: Total number processed: 1 + gpg: imported: 1 (RSA: 1) + +This will improve the situation a bit - at this point, you can verify that the +signature from the given key is correct but you still can not trust the name used +in the key: + +.. code-block:: console + + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: Good signature from "Isaac Bennetch " + gpg: aka "Isaac Bennetch " + gpg: WARNING: This key is not certified with a trusted signature! + gpg: There is no indication that the signature belongs to the owner. + Primary key fingerprint: 3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92 + +The problem here is that anybody could issue the key with this name. You need to +ensure that the key is actually owned by the mentioned person. The GNU Privacy +Handbook covers this topic in the chapter `Validating other keys on your public +keyring`_. The most reliable method is to meet the developer in person and +exchange key fingerprints, however, you can also rely on the web of trust. This way +you can trust the key transitively though signatures of others, who have met +the developer in person. + +Once the key is trusted, the warning will not occur: + +.. code-block:: console + + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: Good signature from "Isaac Bennetch " [full] + +Should the signature be invalid (the archive has been changed), you would get a +clear error regardless of the fact that the key is trusted or not: + +.. code-block:: console + + $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc + gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 + gpg: BAD signature from "Isaac Bennetch " [unknown] + +.. _Validating other keys on your public keyring: https://www.gnupg.org/gph/en/manual.html#AEN335 + +.. index:: + single: Configuration storage + single: phpMyAdmin configuration storage + single: pmadb + +.. _linked-tables: + +phpMyAdmin configuration storage +++++++++++++++++++++++++++++++++ + +.. versionchanged:: 3.4.0 + + Prior to phpMyAdmin 3.4.0 this was called Linked Tables Infrastructure, but + the name was changed due to the extended scope of the storage. + +For a whole set of additional features (:ref:`bookmarks`, comments, :term:`SQL`-history, +tracking mechanism, :term:`PDF`-generation, :ref:`transformations`, :ref:`relations` +etc.) you need to create a set of special tables. Those tables can be located +in your own database, or in a central database for a multi-user installation +(this database would then be accessed by the controluser, so no other user +should have rights to it). + +.. _zeroconf: + +Zero configuration +------------------ + +In many cases, this database structure can be automatically created and +configured. This is called “Zero Configuration” mode and can be particularly +useful in shared hosting situations. “Zeroconf” mode is on by default, to +disable set :config:option:`$cfg['ZeroConf']` to false. + +The following three scenarios are covered by the Zero Configuration mode: + +* When entering a database where the configuration storage tables are not + present, phpMyAdmin offers to create them from the Operations tab. +* When entering a database where the tables do already exist, the software + automatically detects this and begins using them. This is the most common + situation; after the tables are initially created automatically they are + continually used without disturbing the user; this is also most useful on + shared hosting where the user is not able to edit :file:`config.inc.php` and + usually the user only has access to one database. +* When having access to multiple databases, if the user first enters the + database containing the configuration storage tables then switches to + another database, + phpMyAdmin continues to use the tables from the first database; the user is + not prompted to create more tables in the new database. + +Manual configuration +-------------------- + +Please look at your ``./sql/`` directory, where you should find a +file called *create\_tables.sql*. (If you are using a Windows server, +pay special attention to :ref:`faq1_23`). + +If you already had this infrastructure and: + +* upgraded to MySQL 4.1.2 or newer, please use + :file:`sql/upgrade_tables_mysql_4_1_2+.sql`. +* upgraded to phpMyAdmin 4.3.0 or newer from 2.5.0 or newer (<= 4.2.x), + please use :file:`sql/upgrade_column_info_4_3_0+.sql`. +* upgraded to phpMyAdmin 4.7.0 or newer from 4.3.0 or newer, + please use :file:`sql/upgrade_tables_4_7_0+.sql`. + +and then create new tables by importing :file:`sql/create_tables.sql`. + +You can use your phpMyAdmin to create the tables for you. Please be +aware that you may need special (administrator) privileges to create +the database and tables, and that the script may need some tuning, +depending on the database name. + +After having imported the :file:`sql/create_tables.sql` file, you +should specify the table names in your :file:`config.inc.php` file. The +directives used for that can be found in the :ref:`config`. + +You will also need to have a controluser +(:config:option:`$cfg['Servers'][$i]['controluser']` and +:config:option:`$cfg['Servers'][$i]['controlpass']` settings) +with the proper rights to those tables. For example you can create it +using following statement: + +And for any MariaDB version: + +.. code-block:: mysql + + CREATE USER 'pma'@'localhost' IDENTIFIED VIA mysql_native_password USING 'pmapass'; + GRANT SELECT, INSERT, UPDATE, DELETE ON ``.* TO 'pma'@'localhost'; + +For MySQL 8.0 and newer: + +.. code-block:: mysql + + CREATE USER 'pma'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'pmapass'; + GRANT SELECT, INSERT, UPDATE, DELETE ON .* TO 'pma'@'localhost'; + +For MySQL older than 8.0: + +.. code-block:: mysql + + CREATE USER 'pma'@'localhost' IDENTIFIED WITH mysql_native_password AS 'pmapass'; + GRANT SELECT, INSERT, UPDATE, DELETE ON .* TO 'pma'@'localhost'; + +Note that MySQL installations with PHP older than 7.4 and MySQL newer than 8.0 may require +using the mysql_native_password authentication as a workaround, see +:ref:`faq1_45` for details. + +.. _upgrading: + +Upgrading from an older version ++++++++++++++++++++++++++++++++ + +.. warning:: + + **Never** extract the new version over an existing installation of + phpMyAdmin, always first remove the old files keeping just the + configuration. + + This way, you will not leave any old or outdated files in the directory, + which can have severe security implications or can cause various breakages. + +Simply copy :file:`config.inc.php` from your previous installation into +the newly unpacked one. Configuration files from old versions may +require some tweaking as some options have been changed or removed. +For compatibility with PHP 5.3 and later, remove a +``set_magic_quotes_runtime(0);`` statement that you might find near +the end of your configuration file. + +The complete upgrade can be performed in a few simple steps: + +1. Download the latest phpMyAdmin version from . +2. Rename existing phpMyAdmin folder (for example to ``phpmyadmin-old``). +3. Unpack freshly downloaded phpMyAdmin to the desired location (for example ``phpmyadmin``). +4. Copy :file:`config.inc.php`` from old location (``phpmyadmin-old``) to the new one (``phpmyadmin``). +5. Test that everything works properly. +6. Remove backup of a previous version (``phpmyadmin-old``). + +If you have upgraded your MySQL server from a version previous to 4.1.2 to +version 5.x or newer and if you use the phpMyAdmin configuration storage, you +should run the :term:`SQL` script found in +:file:`sql/upgrade_tables_mysql_4_1_2+.sql`. + +If you have upgraded your phpMyAdmin to 4.3.0 or newer from 2.5.0 or +newer (<= 4.2.x) and if you use the phpMyAdmin configuration storage, you +should run the :term:`SQL` script found in +:file:`sql/upgrade_column_info_4_3_0+.sql`. + +Do not forget to clear the browser cache and to empty the old session by +logging out and logging in again. + +.. index:: Authentication mode + +.. _authentication_modes: + +Using authentication modes +++++++++++++++++++++++++++ + +:term:`HTTP` and cookie authentication modes are recommended in a **multi-user +environment** where you want to give users access to their own database and +don't want them to play around with others. Nevertheless, be aware that MS +Internet Explorer seems to be really buggy about cookies, at least till version +6. Even in a **single-user environment**, you might prefer to use :term:`HTTP` +or cookie mode so that your user/password pair are not in clear in the +configuration file. + +:term:`HTTP` and cookie authentication +modes are more secure: the MySQL login information does not need to be +set in the phpMyAdmin configuration file (except possibly for the +:config:option:`$cfg['Servers'][$i]['controluser']`). +However, keep in mind that the password travels in plain text unless +you are using the HTTPS protocol. In cookie mode, the password is +stored, encrypted with the AES algorithm, in a temporary cookie. + +Then each of the *true* users should be granted a set of privileges +on a set of particular databases. Normally you shouldn't give global +privileges to an ordinary user unless you understand the impact of those +privileges (for example, you are creating a superuser). +For example, to grant the user *real_user* with all privileges on +the database *user_base*: + +.. code-block:: mysql + + GRANT ALL PRIVILEGES ON user_base.* TO 'real_user'@localhost IDENTIFIED BY 'real_password'; + +What the user may now do is controlled entirely by the MySQL user management +system. With HTTP or cookie authentication mode, you don't need to fill the +user/password fields inside the :config:option:`$cfg['Servers']`. + +.. seealso:: + + :ref:`faq1_32`, + :ref:`faq1_35`, + :ref:`faq4_1`, + :ref:`faq4_2`, + :ref:`faq4_3` + +.. index:: pair: HTTP; Authentication mode + +.. _auth_http: + +HTTP authentication mode +------------------------ + +* Uses :term:`HTTP` Basic authentication + method and allows you to log in as any valid MySQL user. +* Is supported with most PHP configurations. For :term:`IIS` (:term:`ISAPI`) + support using :term:`CGI` PHP see :ref:`faq1_32`, for using with Apache + :term:`CGI` see :ref:`faq1_35`. +* When PHP is running under Apache's :term:`mod_proxy_fcgi` (e.g. with PHP-FPM), + ``Authorization`` headers are not passed to the underlying FCGI application, + such that your credentials will not reach the application. In this case, you can + add the following configuration directive: + + .. code-block:: apache + + SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 + +* See also :ref:`faq4_4` about not using the :term:`.htaccess` mechanism along with + ':term:`HTTP`' authentication mode. + +.. note:: + + There is no way to do proper logout in HTTP authentication, most browsers + will remember credentials until there is no different successful + authentication. Because of this, this method has a limitation that you can not + login with the same user after logout. + +.. index:: pair: Cookie; Authentication mode + +.. _cookie: + +Cookie authentication mode +-------------------------- + +* Username and password are stored in cookies during the session and password + is deleted when it ends. +* With this mode, the user can truly log out of phpMyAdmin and log + back in with the same username (this is not possible with :ref:`auth_http`). +* If you want to allow users to enter any hostname to connect (rather than only + servers that are configured in :file:`config.inc.php`), + see the :config:option:`$cfg['AllowArbitraryServer']` directive. +* As mentioned in the :ref:`require` section, having the ``openssl`` extension + will speed up access considerably, but is not required. + +.. index:: pair: Signon; Authentication mode + +.. _auth_signon: + +Signon authentication mode +-------------------------- + +* This mode is a convenient way of using credentials from another + application to authenticate to phpMyAdmin to implement a single signon + solution. +* The other application has to store login information into session + data (see :config:option:`$cfg['Servers'][$i]['SignonSession']` and + :config:option:`$cfg['Servers'][$i]['SignonCookieParams']`) or you + need to implement script to return the credentials (see + :config:option:`$cfg['Servers'][$i]['SignonScript']`). +* When no credentials are available, the user is being redirected to + :config:option:`$cfg['Servers'][$i]['SignonURL']`, where you should handle + the login process. + +The very basic example of saving credentials in a session is available as +:file:`examples/signon.php`: + +.. literalinclude:: ../examples/signon.php + :language: php + +Alternatively, you can also use this way to integrate with OpenID as shown +in :file:`examples/openid.php`: + +.. literalinclude:: ../examples/openid.php + :language: php + +If you intend to pass the credentials using some other means than, you have to +implement wrapper in PHP to get that data and set it to +:config:option:`$cfg['Servers'][$i]['SignonScript']`. There is a very minimal example +in :file:`examples/signon-script.php`: + +.. literalinclude:: ../examples/signon-script.php + :language: php + +.. seealso:: + :config:option:`$cfg['Servers'][$i]['auth_type']`, + :config:option:`$cfg['Servers'][$i]['SignonSession']`, + :config:option:`$cfg['Servers'][$i]['SignonCookieParams']`, + :config:option:`$cfg['Servers'][$i]['SignonScript']`, + :config:option:`$cfg['Servers'][$i]['SignonURL']`, + :ref:`example-signon` + +.. index:: pair: Config; Authentication mode + +.. _auth_config: + +Config authentication mode +-------------------------- + +* This mode is sometimes the less secure one because it requires you to fill the + :config:option:`$cfg['Servers'][$i]['user']` and + :config:option:`$cfg['Servers'][$i]['password']` + fields (and as a result, anyone who can read your :file:`config.inc.php` + can discover your username and password). +* In the :ref:`faqmultiuser` section, there is an entry explaining how + to protect your configuration file. +* For additional security in this mode, you may wish to consider the + Host authentication :config:option:`$cfg['Servers'][$i]['AllowDeny']['order']` + and :config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` configuration directives. +* Unlike cookie and http, does not require a user to log in when first + loading the phpMyAdmin site. This is by design but could allow any + user to access your installation. Use of some restriction method is + suggested, perhaps a :term:`.htaccess` file with the HTTP-AUTH directive or disallowing + incoming HTTP requests at one’s router or firewall will suffice (both + of which are beyond the scope of this manual but easily searchable + with Google). + +.. _securing: + +Securing your phpMyAdmin installation ++++++++++++++++++++++++++++++++++++++ + +The phpMyAdmin team tries hard to make the application secure, however there +are always ways to make your installation more secure: + +* Follow our `Security announcements `_ and upgrade + phpMyAdmin whenever new vulnerability is published. +* Serve phpMyAdmin on HTTPS only. Preferably, you should use HSTS as well, so that + you're protected from protocol downgrade attacks. +* Ensure your PHP setup follows recommendations for production sites, for example + `display_errors `_ + should be disabled. +* Remove the ``test`` directory from phpMyAdmin, unless you are developing and need a test suite. +* Remove the ``setup`` directory from phpMyAdmin, you will probably not + use it after the initial setup. +* Properly choose an authentication method - :ref:`cookie` + is probably the best choice for shared hosting. +* Deny access to auxiliary files in :file:`./libraries/` or + :file:`./templates/` subfolders in your webserver configuration. + Such configuration prevents from possible path exposure and cross side + scripting vulnerabilities that might happen to be found in that code. For the + Apache webserver, this is often accomplished with a :term:`.htaccess` file in + those directories. +* Deny access to temporary files, see :config:option:`$cfg['TempDir']` (if that + is placed inside your web root, see also :ref:`web-dirs`. +* It is generally a good idea to protect a public phpMyAdmin installation + against access by robots as they usually can not do anything good there. You + can do this using ``robots.txt`` file in the root of your webserver or limit + access by web server configuration, see :ref:`faq1_42`. +* In case you don't want all MySQL users to be able to access + phpMyAdmin, you can use :config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` to limit them + or :config:option:`$cfg['Servers'][$i]['AllowRoot']` to deny root user access. +* Enable :ref:`2fa` for your account. +* Consider hiding phpMyAdmin behind an authentication proxy, so that + users need to authenticate prior to providing MySQL credentials + to phpMyAdmin. You can achieve this by configuring your web server to request + HTTP authentication. For example in Apache this can be done with: + + .. code-block:: apache + + AuthType Basic + AuthName "Restricted Access" + AuthUserFile /usr/share/phpmyadmin/passwd + Require valid-user + + Once you have changed the configuration, you need to create a list of users which + can authenticate. This can be done using the :program:`htpasswd` utility: + + .. code-block:: sh + + htpasswd -c /usr/share/phpmyadmin/passwd username + +* If you are afraid of automated attacks, enabling Captcha by + :config:option:`$cfg['CaptchaLoginPublicKey']` and + :config:option:`$cfg['CaptchaLoginPrivateKey']` might be an option. +* Failed login attempts are logged to syslog (if available, see + :config:option:`$cfg['AuthLog']`). This can allow using a tool such as + fail2ban to block brute-force attempts. Note that the log file used by syslog + is not the same as the Apache error or access log files. +* In case you're running phpMyAdmin together with other PHP applications, it is + generally advised to use separate session storage for phpMyAdmin to avoid + possible session-based attacks against it. You can use + :config:option:`$cfg['SessionSavePath']` to achieve this. + +.. _ssl: + +Using SSL for connection to database server ++++++++++++++++++++++++++++++++++++++++++++ + +It is recommended to use SSL when connecting to remote database server. There +are several configuration options involved in the SSL setup: + +:config:option:`$cfg['Servers'][$i]['ssl']` + Defines whether to use SSL at all. If you enable only this, the connection + will be encrypted, but there is not authentication of the connection - you + can not verify that you are talking to the right server. +:config:option:`$cfg['Servers'][$i]['ssl_key']` and :config:option:`$cfg['Servers'][$i]['ssl_cert']` + This is used for authentication of client to the server. +:config:option:`$cfg['Servers'][$i]['ssl_ca']` and :config:option:`$cfg['Servers'][$i]['ssl_ca_path']` + The certificate authorities you trust for server certificates. + This is used to ensure that you are talking to a trusted server. +:config:option:`$cfg['Servers'][$i]['ssl_verify']` + This configuration disables server certificate verification. Use with + caution. + +When the database server is using a local connection or private network and SSL can not be configured +you can use :config:option:`$cfg['MysqlSslWarningSafeHosts']` to explicitly list the hostnames that are considered secure. + +.. seealso:: + + :ref:`example-google-ssl`, + :ref:`example-aws-ssl`, + :config:option:`$cfg['Servers'][$i]['ssl']`, + :config:option:`$cfg['Servers'][$i]['ssl_key']`, + :config:option:`$cfg['Servers'][$i]['ssl_cert']`, + :config:option:`$cfg['Servers'][$i]['ssl_ca']`, + :config:option:`$cfg['Servers'][$i]['ssl_ca_path']`, + :config:option:`$cfg['Servers'][$i]['ssl_ciphers']`, + :config:option:`$cfg['Servers'][$i]['ssl_verify']` + +Known issues +++++++++++++ + +Users with column-specific privileges are unable to "Browse" +------------------------------------------------------------ + +If a user has only column-specific privileges on some (but not all) columns in a table, "Browse" +will fail with an error message. + +As a workaround, a bookmarked query with the same name as the table can be created, this will +run when using the "Browse" link instead. `Issue 11922 `_. + +Trouble logging back in after logging out using 'http' authentication +---------------------------------------------------------------------- + +When using the 'http' ``auth_type``, it can be impossible to log back in (when the logout comes +manually or after a period of inactivity). `Issue 11898 `_. + +.. _Composer tool: https://getcomposer.org/ +.. _Packagist: https://packagist.org/ +.. _Docker official image: https://hub.docker.com/_/phpmyadmin diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/transformations.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/transformations.rst.txt new file mode 100644 index 0000000..152f5b4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/transformations.rst.txt @@ -0,0 +1,158 @@ +.. _transformations: + +Transformations +=============== + +.. note:: + + You need to have configured the :ref:`linked-tables` to use the transformations + feature. + +.. _transformationsintro: + +Introduction +++++++++++++ + +To enable transformations, you have to set up the ``column_info`` +table and the proper directives. Please see the :ref:`config` on how to do so. + +phpMyAdmin has two different types of transformations: browser display +transformations, which affect only how the data is shown when browsing +through phpMyAdmin; and input transformations, which affect a value +prior to being inserted through phpMyAdmin. +You can apply different transformations to the contents of each +column. Each transformation has options to define how it will affect the +stored data. + +Say you have a column ``filename`` which contains a filename. Normally +you would see in phpMyAdmin only this filename. Using display transformations +you can transform that filename into a HTML link, so you can click +inside of the phpMyAdmin structure on the column's link and will see +the file displayed in a new browser window. Using transformation +options you can also specify strings to append/prepend to a string or +the format you want the output stored in. + +For a general overview of all available transformations and their +options, you can either go to the ``Change`` link for an existing column +or from the dialog to create a new column, in either case there is a link +on that column structure page for "Browser display transformation" and +"Input transformation" which will show more information about each +transformation that is available on your system. + +For a tutorial on how to effectively use transformations, see our +`Link section `_ on the +official phpMyAdmin homepage. + +.. _transformationshowto: + +Usage ++++++ + +Go to the table structure page (reached by clicking on +the 'Structure' link for a table). There click on "Change" (or the change +icon) and there you will see the five transformation--related fields at the end of the line. +They are called ':term:`Media type`', 'Browser transformation' and +'Transformation options'. + +* The field ':term:`Media type`' is a drop-down field. Select the :term:`Media type` that + corresponds to the column's contents. Please note that many transformations + are inactive until a :term:`Media type` is selected. +* The field 'Browser display transformation' is a drop-down field. You can + choose from a hopefully growing amount of pre-defined transformations. + See below for information on how to build your own transformation. + There are global transformations and mimetype-bound transformations. + Global transformations can be used for any mimetype. They will take + the mimetype, if necessary, into regard. Mimetype-bound + transformations usually only operate on a certain mimetype. There are + transformations which operate on the main mimetype (like 'image'), + which will most likely take the subtype into regard, and those who + only operate on a specific subtype (like 'image/jpeg'). You can use + transformations on mimetypes for which the function was not defined + for. There is no security check for you selected the right + transformation, so take care of what the output will be like. +* The field 'Browser display transformation options' is a free-type textfield. You have + to enter transform-function specific options here. Usually the + transforms can operate with default options, but it is generally a + good idea to look up the overview to see which options are necessary. + Much like the ENUM/SET-Fields, you have to split up several options + using the format 'a','b','c',...(NOTE THE MISSING BLANKS). This is + because internally the options will be parsed as an array, leaving the + first value the first element in the array, and so forth. If you want + to specify a MIME character set you can define it in the + transformation\_options. You have to put that outside of the pre- + defined options of the specific mime-transform, as the last value of + the set. Use the format "'; charset=XXX'". If you use a transform, for + which you can specify 2 options and you want to append a character + set, enter "'first parameter','second parameter','charset=us-ascii'". + You can, however use the defaults for the parameters: "'','','charset + =us-ascii'". The default options can be configured using + :config:option:`$cfg['DefaultTransformations']`. +* 'Input transformation' is another drop-down menu that corresponds exactly + with the instructions above for "Browser display transformation" except + these these affect the data before insertion in to the database. These are + most commonly used to either provide a specialized editor (for example, using + the phpMyAdmin SQL editor interface) or selector (such as for uploading an image). + It's also possible to manipulate the data such as converting an IPv4 address to binary + or parsing it through a regular expression. +* Finally, 'Input transformation options' is the equivalent of the "Browser display + transformation options" section above and is where optional and required parameters are entered. + +.. _transformationsfiles: + +File structure +++++++++++++++ + +All specific transformations for mimetypes are defined through class +files in the directory :file:`libraries/classes/Plugins/Transformations/`. Each of +them extends a certain transformation abstract class declared in +:file:`libraries/classes/Plugins/Transformations/Abs`. + +They are stored in files to ease customization and to allow easy adding of +new or custom transformations. + +Because the user cannot enter their own mimetypes, it is kept certain that +the transformations will always work. It makes no sense to apply a +transformation to a mimetype the transform-function doesn't know to +handle. + +There is a file called :file:`libraries/classes/Plugins/Transformations.php` that provides some +basic functions which can be included by any other transform function. + +The file name convention is ``[Mimetype]_[Subtype]_[Transformation +Name].php``, while the abstract class that it extends has the +name ``[Transformation Name]TransformationsPlugin``. All of the +methods that have to be implemented by a transformations plug-in are: + +#. getMIMEType() and getMIMESubtype() in the main class; +#. getName(), getInfo() and applyTransformation() in the abstract class + it extends. + +The getMIMEType(), getMIMESubtype() and getName() methods return the +name of the MIME type, MIME Subtype and transformation accordingly. +getInfo() returns the transformation's description and possible +options it may receive and applyTransformation() is the method that +does the actual work of the transformation plug-in. + +Please see the :file:`libraries/classes/Plugins/Transformations/TEMPLATE` and +:file:`libraries/classes/Plugins/Transformations/TEMPLATE\_ABSTRACT` files for adding +your own transformation plug-in. You can also generate a new +transformation plug-in (with or without the abstract transformation +class), by using +:file:`scripts/transformations_generator_plugin.sh` or +:file:`scripts/transformations_generator_main_class.sh`. + +The applyTransformation() method always gets passed three variables: + +#. **$buffer** - Contains the text inside of the column. This is the + text, you want to transform. +#. **$options** - Contains any user-passed options to a transform + function as an array. +#. **$meta** - Contains an object with information about your column. The + data is drawn from the output of the `mysql\_fetch\_field() + `_ function. This means, all + object properties described on the `manual page + `_ are available in this + variable and can be used to transform a column accordingly to + unsigned/zerofill/not\_null/... properties. The $meta->mimetype + variable contains the original :term:`Media type` of the column (i.e. + 'text/plain', 'image/jpeg' etc.) diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/two_factor.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/two_factor.rst.txt new file mode 100644 index 0000000..b507718 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/two_factor.rst.txt @@ -0,0 +1,69 @@ +.. _2fa: + +Two-factor authentication +========================= + +.. versionadded:: 4.8.0 + +Since phpMyAdmin 4.8.0 you can configure two-factor authentication to be +used when logging in. To use this, you first need to configure the +:ref:`linked-tables`. Once this is done, every user can opt-in for the second +authentication factor in the :guilabel:`Settings`. + +When running phpMyAdmin from the Git source repository, the dependencies must be installed +manually; the typical way of doing so is with the command: + +.. code-block:: sh + + composer require pragmarx/google2fa-qrcode bacon/bacon-qr-code + +Or when using a hardware security key with FIDO U2F: + +.. code-block:: sh + + composer require code-lts/u2f-php-server + +Authentication Application (2FA) +-------------------------------- + +Using an application for authentication is a quite common approach based on HOTP and +`TOTP `_. +It is based on transmitting a private key from phpMyAdmin to the authentication +application and the application is then able to generate one time codes based +on this key. The easiest way to enter the key in to the application from phpMyAdmin is +through scanning a QR code. + +There are dozens of applications available for mobile phones to implement these +standards, the most widely used include: + +* `FreeOTP for iOS, Android and Pebble `_ +* `Authy for iOS, Android, Chrome, OS X `_ +* `Google Authenticator for iOS `_ +* `Google Authenticator for Android `_ +* `LastPass Authenticator for iOS, Android, OS X, Windows `_ + +Hardware Security Key (FIDO U2F) +-------------------------------- + +Using hardware tokens is considered to be more secure than a software based +solution. phpMyAdmin supports `FIDO U2F `_ +tokens. + +There are several manufacturers of these tokens, for example: + +* `youbico FIDO U2F Security Key `_ +* `HyperFIDO `_ +* `Trezor Hardware Wallet `_ can act as an `U2F token `_ +* `List of Two Factor Auth (2FA) Dongles `_ + +.. _simple2fa: + +Simple two-factor authentication +-------------------------------- + +This authentication is included for testing and demonstration purposes only as +it really does not provide two-factor authentication, it just asks the user to confirm login by +clicking on the button. + +It should not be used in the production and is disabled unless +:config:option:`$cfg['DBG']['simple2fa']` is set. diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_static/classic.css b/Sources/php_script/script/phpMyAdmin/doc/html/_static/classic.css new file mode 100644 index 0000000..dcae946 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/_static/classic.css @@ -0,0 +1,266 @@ +/* + * classic.css_t + * ~~~~~~~~~~~~~ + * + * Sphinx stylesheet -- classic theme. + * + * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +@import url("basic.css"); + +/* -- page layout ----------------------------------------------------------- */ + +html { + /* CSS hack for macOS's scrollbar (see #1125) */ + background-color: #FFFFFF; +} + +body { + font-family: sans-serif; + font-size: 100%; + background-color: #11303d; + color: #000; + margin: 0; + padding: 0; +} + +div.document { + background-color: #1c4e63; +} + +div.documentwrapper { + float: left; + width: 100%; +} + +div.bodywrapper { + margin: 0 0 0 230px; +} + +div.body { + background-color: #ffffff; + color: #000000; + padding: 0 20px 30px 20px; +} + +div.footer { + color: #ffffff; + width: 100%; + padding: 9px 0 9px 0; + text-align: center; + font-size: 75%; +} + +div.footer a { + color: #ffffff; + text-decoration: underline; +} + +div.related { + background-color: #133f52; + line-height: 30px; + color: #ffffff; +} + +div.related a { + color: #ffffff; +} + +div.sphinxsidebar { +} + +div.sphinxsidebar h3 { + font-family: 'Trebuchet MS', sans-serif; + color: #ffffff; + font-size: 1.4em; + font-weight: normal; + margin: 0; + padding: 0; +} + +div.sphinxsidebar h3 a { + color: #ffffff; +} + +div.sphinxsidebar h4 { + font-family: 'Trebuchet MS', sans-serif; + color: #ffffff; + font-size: 1.3em; + font-weight: normal; + margin: 5px 0 0 0; + padding: 0; +} + +div.sphinxsidebar p { + color: #ffffff; +} + +div.sphinxsidebar p.topless { + margin: 5px 10px 10px 10px; +} + +div.sphinxsidebar ul { + margin: 10px; + padding: 0; + color: #ffffff; +} + +div.sphinxsidebar a { + color: #98dbcc; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + + + +/* -- hyperlink styles ------------------------------------------------------ */ + +a { + color: #355f7c; + text-decoration: none; +} + +a:visited { + color: #355f7c; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + + + +/* -- body styles ----------------------------------------------------------- */ + +div.body h1, +div.body h2, +div.body h3, +div.body h4, +div.body h5, +div.body h6 { + font-family: 'Trebuchet MS', sans-serif; + background-color: #f2f2f2; + font-weight: normal; + color: #20435c; + border-bottom: 1px solid #ccc; + margin: 20px -20px 10px -20px; + padding: 3px 0 3px 10px; +} + +div.body h1 { margin-top: 0; font-size: 200%; } +div.body h2 { font-size: 160%; } +div.body h3 { font-size: 140%; } +div.body h4 { font-size: 120%; } +div.body h5 { font-size: 110%; } +div.body h6 { font-size: 100%; } + +a.headerlink { + color: #c60f0f; + font-size: 0.8em; + padding: 0 4px 0 4px; + text-decoration: none; +} + +a.headerlink:hover { + background-color: #c60f0f; + color: white; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + text-align: justify; + line-height: 130%; +} + +div.admonition p.admonition-title + p { + display: inline; +} + +div.admonition p { + margin-bottom: 5px; +} + +div.admonition pre { + margin-bottom: 5px; +} + +div.admonition ul, div.admonition ol { + margin-bottom: 5px; +} + +div.note { + background-color: #eee; + border: 1px solid #ccc; +} + +div.seealso { + background-color: #ffc; + border: 1px solid #ff6; +} + +div.topic { + background-color: #eee; +} + +div.warning { + background-color: #ffe4e4; + border: 1px solid #f66; +} + +p.admonition-title { + display: inline; +} + +p.admonition-title:after { + content: ":"; +} + +pre { + padding: 5px; + background-color: unset; + color: unset; + line-height: 120%; + border: 1px solid #ac9; + border-left: none; + border-right: none; +} + +code { + background-color: #ecf0f3; + padding: 0 1px 0 1px; + font-size: 0.95em; +} + +th, dl.field-list > dt { + background-color: #ede; +} + +.warning code { + background: #efc2c2; +} + +.note code { + background: #d6d6d6; +} + +.viewcode-back { + font-family: sans-serif; +} + +div.viewcode-block:target { + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +div.code-block-caption { + color: #efefef; + background-color: #1c4e63; +} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_static/language_data.js b/Sources/php_script/script/phpMyAdmin/doc/html/_static/language_data.js new file mode 100644 index 0000000..0e7dc7e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/_static/language_data.js @@ -0,0 +1,297 @@ +/* + * language_data.js + * ~~~~~~~~~~~~~~~~ + * + * This script contains the language-specific data used by searchtools.js, + * namely the list of stopwords, stemmer, scorer and splitter. + * + * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; + + +/* Non-minified version JS is _stemmer.js if file is provided */ +/** + * Porter Stemmer + */ +var Stemmer = function() { + + var step2list = { + ational: 'ate', + tional: 'tion', + enci: 'ence', + anci: 'ance', + izer: 'ize', + bli: 'ble', + alli: 'al', + entli: 'ent', + eli: 'e', + ousli: 'ous', + ization: 'ize', + ation: 'ate', + ator: 'ate', + alism: 'al', + iveness: 'ive', + fulness: 'ful', + ousness: 'ous', + aliti: 'al', + iviti: 'ive', + biliti: 'ble', + logi: 'log' + }; + + var step3list = { + icate: 'ic', + ative: '', + alize: 'al', + iciti: 'ic', + ical: 'ic', + ful: '', + ness: '' + }; + + var c = "[^aeiou]"; // consonant + var v = "[aeiouy]"; // vowel + var C = c + "[^aeiouy]*"; // consonant sequence + var V = v + "[aeiou]*"; // vowel sequence + + var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + + + + + +var splitChars = (function() { + var result = {}; + var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, + 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, + 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, + 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, + 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, + 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, + 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, + 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, + 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, + 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; + var i, j, start, end; + for (i = 0; i < singles.length; i++) { + result[singles[i]] = true; + } + var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], + [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], + [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], + [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], + [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], + [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], + [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], + [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], + [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], + [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], + [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], + [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], + [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], + [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], + [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], + [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], + [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], + [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], + [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], + [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], + [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], + [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], + [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], + [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], + [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], + [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], + [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], + [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], + [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], + [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], + [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], + [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], + [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], + [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], + [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], + [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], + [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], + [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], + [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], + [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], + [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], + [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], + [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], + [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], + [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], + [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], + [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], + [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], + [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; + for (i = 0; i < ranges.length; i++) { + start = ranges[i][0]; + end = ranges[i][1]; + for (j = start; j <= end; j++) { + result[j] = true; + } + } + return result; +})(); + +function splitQuery(query) { + var result = []; + var start = -1; + for (var i = 0; i < query.length; i++) { + if (splitChars[query.charCodeAt(i)]) { + if (start !== -1) { + result.push(query.slice(start, i)); + start = -1; + } + } else if (start === -1) { + start = i; + } + } + if (start !== -1) { + result.push(query.slice(start)); + } + return result; +} + + diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/config.html b/Sources/php_script/script/phpMyAdmin/doc/html/config.html new file mode 100644 index 0000000..0a1cd99 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/config.html @@ -0,0 +1,6161 @@ + + + + + + + + Configuration — phpMyAdmin 5.2.0 documentation + + + + + + + + + + + + + + +

+ +
+
+
+
+ +
+

Configuration

+

All configurable data is placed in config.inc.php in phpMyAdmin’s +toplevel directory. If this file does not exist, please refer to the +Installation section to create one. This file only needs to contain the +parameters you want to change from their corresponding default value in +libraries/config.default.php (this file is not intended for changes).

+
+

See also

+

Examples for examples of configurations

+
+

If a directive is missing from your file, you can just add another line with +the file. This file is for over-writing the defaults; if you wish to use the +default value there’s no need to add a line here.

+

The parameters which relate to design (like colors) are placed in +themes/themename/scss/_variables.scss. You might also want to create +config.footer.inc.php and config.header.inc.php files to add +your site specific code to be included on start and end of each page.

+
+

Note

+

Some distributions (eg. Debian or Ubuntu) store config.inc.php in +/etc/phpmyadmin instead of within phpMyAdmin sources.

+
+
+

Basic settings

+
+
+$cfg['PmaAbsoluteUri']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+
+

Changed in version 4.6.5: This setting was not available in phpMyAdmin 4.6.0 - 4.6.4.

+
+

Sets here the complete URL (with full path) to your phpMyAdmin +installation’s directory. E.g. +https://www.example.net/path_to_your_phpMyAdmin_directory/. Note also +that the URL on most of web servers are case sensitive (even on +Windows). Don’t forget the trailing slash at the end.

+

Starting with version 2.3.0, it is advisable to try leaving this blank. In +most cases phpMyAdmin automatically detects the proper setting. Users of +port forwarding or complex reverse proxy setup might need to set this.

+

A good test is to browse a table, edit a row and save it. There should be +an error message if phpMyAdmin is having trouble auto–detecting the correct +value. If you get an error that this must be set or if the autodetect code +fails to detect your path, please post a bug report on our bug tracker so +we can improve the code.

+ +
+ +
+
+$cfg['PmaNoRelation_DisableWarning']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Starting with version 2.3.0 phpMyAdmin offers a lot of features to +work with master / foreign – tables (see $cfg['Servers'][$i]['pmadb']).

+

If you tried to set this +up and it does not work for you, have a look on the Structure page +of one database where you would like to use it. You will find a link +that will analyze why those features have been disabled.

+

If you do not want to use those features set this variable to true to +stop this message from appearing.

+
+ +
+
+$cfg['AuthLog']
+
+
Type
+

string

+
+
Default value
+

'auto'

+
+
+
+

New in version 4.8.0: This is supported since phpMyAdmin 4.8.0.

+
+

Configure authentication logging destination. Failed (or all, depending on +$cfg['AuthLogSuccess']) authentication attempts will be +logged according to this directive:

+
+
auto

Let phpMyAdmin automatically choose between syslog and php.

+
+
syslog

Log using syslog, using AUTH facility, on most systems this ends up +in /var/log/auth.log.

+
+
php

Log into PHP error log.

+
+
sapi

Log into PHP SAPI logging.

+
+
/path/to/file

Any other value is treated as a filename and log entries are written there.

+
+
+
+

Note

+

When logging to a file, make sure its permissions are correctly set +for a web server user, the setup should closely match instructions +described in $cfg['TempDir']:

+
+
+ +
+
+$cfg['AuthLogSuccess']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+
+

New in version 4.8.0: This is supported since phpMyAdmin 4.8.0.

+
+

Whether to log successful authentication attempts into +$cfg['AuthLog'].

+
+ +
+
+$cfg['SuhosinDisableWarning']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

A warning is displayed on the main page if Suhosin is detected.

+

You can set this parameter to true to stop this message from appearing.

+
+ +
+
+$cfg['LoginCookieValidityDisableWarning']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

A warning is displayed on the main page if the PHP parameter +session.gc_maxlifetime is lower than cookie validity configured in phpMyAdmin.

+

You can set this parameter to true to stop this message from appearing.

+
+ +
+
+$cfg['ServerLibraryDifference_DisableWarning']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+
+

Deprecated since version 4.7.0: This setting was removed as the warning has been removed as well.

+
+

A warning is displayed on the main page if there is a difference +between the MySQL library and server version.

+

You can set this parameter to true to stop this message from appearing.

+
+ +
+
+$cfg['ReservedWordDisableWarning']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

This warning is displayed on the Structure page of a table if one or more +column names match with words which are MySQL reserved.

+

If you want to turn off this warning, you can set it to true and +warning will no longer be displayed.

+
+ +
+
+$cfg['TranslationWarningThreshold']
+
+
Type
+

integer

+
+
Default value
+

80

+
+
+

Show warning about incomplete translations on certain threshold.

+
+ +
+
+$cfg['SendErrorReports']
+
+
Type
+

string

+
+
Default value
+

'ask'

+
+
+

Valid values are:

+
    +
  • ask

  • +
  • always

  • +
  • never

  • +
+

Sets the default behavior for JavaScript error reporting.

+

Whenever an error is detected in the JavaScript execution, an error report +may be sent to the phpMyAdmin team if the user agrees.

+

The default setting of 'ask' will ask the user everytime there is a new +error report. However you can set this parameter to 'always' to send error +reports without asking for confirmation or you can set it to 'never' to +never send error reports.

+

This directive is available both in the configuration file and in users +preferences. If the person in charge of a multi-user installation prefers +to disable this feature for all users, a value of 'never' should be +set, and the $cfg['UserprefsDisallow'] directive should +contain 'SendErrorReports' in one of its array values.

+
+ +
+
+$cfg['ConsoleEnterExecutes']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Setting this to true allows the user to execute queries by pressing Enter +instead of Ctrl+Enter. A new line can be inserted by pressing Shift+Enter.

+

The behaviour of the console can be temporarily changed using console’s +settings interface.

+
+ +
+
+$cfg['AllowThirdPartyFraming']
+
+
Type
+

boolean|string

+
+
Default value
+

false

+
+
+

Setting this to true allows phpMyAdmin to be included inside a frame, +and is a potential security hole allowing cross-frame scripting attacks or +clickjacking. Setting this to ‘sameorigin’ prevents phpMyAdmin to be +included from another document in a frame, unless that document belongs +to the same domain.

+
+ +
+
+

Server connection settings

+
+
+$cfg['Servers']
+
+
Type
+

array

+
+
Default value
+

one server array with settings listed below

+
+
+

Since version 1.4.2, phpMyAdmin supports the administration of multiple +MySQL servers. Therefore, a $cfg['Servers']-array has been +added which contains the login information for the different servers. The +first $cfg['Servers'][$i]['host'] contains the hostname of +the first server, the second $cfg['Servers'][$i]['host'] +the hostname of the second server, etc. In +libraries/config.default.php, there is only one section for server +definition, however you can put as many as you need in +config.inc.php, copy that block or needed parts (you don’t have to +define all settings, just those you need to change).

+
+

Note

+

The $cfg['Servers'] array starts with +$cfg[‘Servers’][1]. Do not use $cfg[‘Servers’][0]. If you want more +than one server, just copy following section (including $i +increment) several times. There is no need to define full server +array, just define values you need to change.

+
+
+ +
+
+$cfg['Servers'][$i]['host']
+
+
Type
+

string

+
+
Default value
+

'localhost'

+
+
+

The hostname or IP address of your $i-th MySQL-server. E.g. +localhost.

+

Possible values are:

+
    +
  • hostname, e.g., 'localhost' or 'mydb.example.org'

  • +
  • IP address, e.g., '127.0.0.1' or '192.168.10.1'

  • +
  • IPv6 address, e.g. 2001:cdba:0000:0000:0000:0000:3257:9652

  • +
  • dot - '.', i.e., use named pipes on windows systems

  • +
  • empty - '', disables this server

  • +
+
+

Note

+

The hostname localhost is handled specially by MySQL and it uses +the socket based connection protocol. To use TCP/IP networking, use an +IP address or hostname such as 127.0.0.1 or db.example.com. You +can configure the path to the socket with +$cfg['Servers'][$i]['socket'].

+
+ +
+ +
+
+$cfg['Servers'][$i]['port']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

The port-number of your $i-th MySQL-server. Default is 3306 (leave +blank).

+
+

Note

+

If you use localhost as the hostname, MySQL ignores this port number +and connects with the socket, so if you want to connect to a port +different from the default port, use 127.0.0.1 or the real hostname +in $cfg['Servers'][$i]['host'].

+
+ +
+ +
+
+$cfg['Servers'][$i]['socket']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

The path to the socket to use. Leave blank for default. To determine +the correct socket, check your MySQL configuration or, using the +mysql command–line client, issue the status command. Among the +resulting information displayed will be the socket used.

+
+

Note

+

This takes effect only if $cfg['Servers'][$i]['host'] is set +to localhost.

+
+ +
+ +
+
+$cfg['Servers'][$i]['ssl']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Whether to enable SSL for the connection between phpMyAdmin and the MySQL +server to secure the connection.

+

When using the 'mysql' extension, +none of the remaining 'ssl...' configuration options apply.

+

We strongly recommend the 'mysqli' extension when using this option.

+ +
+ +
+
+$cfg['Servers'][$i]['ssl_key']
+
+
Type
+

string

+
+
Default value
+

NULL

+
+
+

Path to the client key file when using SSL for connecting to the MySQL +server. This is used to authenticate the client to the server.

+

For example:

+
$cfg['Servers'][$i]['ssl_key'] = '/etc/mysql/server-key.pem';
+
+
+ +
+ +
+
+$cfg['Servers'][$i]['ssl_cert']
+
+
Type
+

string

+
+
Default value
+

NULL

+
+
+

Path to the client certificate file when using SSL for connecting to the +MySQL server. This is used to authenticate the client to the server.

+ +
+ +
+
+$cfg['Servers'][$i]['ssl_ca']
+
+
Type
+

string

+
+
Default value
+

NULL

+
+
+

Path to the CA file when using SSL for connecting to the MySQL server.

+ +
+ +
+
+$cfg['Servers'][$i]['ssl_ca_path']
+
+
Type
+

string

+
+
Default value
+

NULL

+
+
+

Directory containing trusted SSL CA certificates in PEM format.

+ +
+ +
+
+$cfg['Servers'][$i]['ssl_ciphers']
+
+
Type
+

string

+
+
Default value
+

NULL

+
+
+

List of allowable ciphers for SSL connections to the MySQL server.

+ +
+ +
+
+$cfg['Servers'][$i]['ssl_verify']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+
+

New in version 4.6.0: This is supported since phpMyAdmin 4.6.0.

+
+

If your PHP install uses the MySQL Native Driver (mysqlnd), your +MySQL server is 5.6 or later, and your SSL certificate is self-signed, +there is a chance your SSL connection will fail due to validation. +Setting this to false will disable the validation check.

+

Since PHP 5.6.0 it also verifies whether server name matches CN of its +certificate. There is currently no way to disable just this check without +disabling complete SSL verification.

+
+

Warning

+

Disabling the certificate verification defeats purpose of using SSL. +This will make the connection vulnerable to man in the middle attacks.

+
+
+

Note

+

This flag only works with PHP 5.6.16 or later.

+
+ +
+ +
+
+$cfg['Servers'][$i]['connect_type']
+
+
Type
+

string

+
+
Default value
+

'tcp'

+
+
+
+

Deprecated since version 4.7.0: This setting is no longer used as of 4.7.0, since MySQL decides the +connection type based on host, so it could lead to unexpected results. +Please set $cfg['Servers'][$i]['host'] accordingly +instead.

+
+

What type connection to use with the MySQL server. Your options are +'socket' and 'tcp'. It defaults to tcp as that is nearly guaranteed +to be available on all MySQL servers, while sockets are not supported on +some platforms. To use the socket mode, your MySQL server must be on the +same machine as the Web server.

+
+ +
+
+$cfg['Servers'][$i]['compress']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Whether to use a compressed protocol for the MySQL server connection +or not (experimental).

+
+ +
+
+$cfg['Servers'][$i]['controlhost']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Permits to use an alternate host to hold the configuration storage +data.

+ +
+ +
+
+$cfg['Servers'][$i]['controlport']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Permits to use an alternate port to connect to the host that +holds the configuration storage.

+ +
+ +
+
+$cfg['Servers'][$i]['controluser']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+
+ +
+
+$cfg['Servers'][$i]['controlpass']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

This special account is used to access phpMyAdmin configuration storage. +You don’t need it in single user case, but if phpMyAdmin is shared it +is recommended to give access to phpMyAdmin configuration storage only to this user +and configure phpMyAdmin to use it. All users will then be able to use +the features without need to have direct access to phpMyAdmin configuration storage.

+
+

Changed in version 2.2.5: those were called stduser and stdpass

+
+ +
+ +
+
+$cfg['Servers'][$i]['control_*']
+
+
Type
+

mixed

+
+
+
+

New in version 4.7.0.

+
+

You can change any MySQL connection setting for control link (used to +access phpMyAdmin configuration storage) using configuration prefixed with control_.

+

This can be used to change any aspect of the control connection, which by +default uses same parameters as the user one.

+

For example you can configure SSL for the control connection:

+
// Enable SSL
+$cfg['Servers'][$i]['control_ssl'] = true;
+// Client secret key
+$cfg['Servers'][$i]['control_ssl_key'] = '../client-key.pem';
+// Client certificate
+$cfg['Servers'][$i]['control_ssl_cert'] = '../client-cert.pem';
+// Server certification authority
+$cfg['Servers'][$i]['control_ssl_ca'] = '../server-ca.pem';
+
+
+ +
+ +
+
+$cfg['Servers'][$i]['auth_type']
+
+
Type
+

string

+
+
Default value
+

'cookie'

+
+
+

Whether config or cookie or HTTP or signon authentication should be +used for this server.

+
    +
  • ‘config’ authentication ($auth_type = 'config') is the plain old +way: username and password are stored in config.inc.php.

  • +
  • ‘cookie’ authentication mode ($auth_type = 'cookie') allows you to +log in as any valid MySQL user with the help of cookies.

  • +
  • ‘http’ authentication allows you to log in as any +valid MySQL user via HTTP-Auth.

  • +
  • ‘signon’ authentication mode ($auth_type = 'signon') allows you to +log in from prepared PHP session data or using supplied PHP script.

  • +
+ +
+ +
+
+$cfg['Servers'][$i]['auth_http_realm']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

When using auth_type = http, this field allows to define a custom +HTTP Basic Auth Realm which will be displayed to the user. If not +explicitly specified in your configuration, a string combined of +“phpMyAdmin ” and either $cfg['Servers'][$i]['verbose'] or +$cfg['Servers'][$i]['host'] will be used.

+
+ +
+
+$cfg['Servers'][$i]['auth_swekey_config']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+
+

New in version 3.0.0.0: This setting was named $cfg[‘Servers’][$i][‘auth_feebee_config’] and was renamed before the 3.0.0.0 release.

+
+
+

Deprecated since version 4.6.4: This setting was removed because their servers are no longer working and it was not working correctly.

+
+
+

Deprecated since version 4.0.10.17: This setting was removed in a maintenance release because their servers are no longer working and it was not working correctly.

+
+

The name of the file containing swekey ids and login names for hardware +authentication. Leave empty to deactivate this feature.

+
+ +
+
+$cfg['Servers'][$i]['user']
+
+
Type
+

string

+
+
Default value
+

'root'

+
+
+
+ +
+
+$cfg['Servers'][$i]['password']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

When using $cfg['Servers'][$i]['auth_type'] set to +‘config’, this is the user/password-pair which phpMyAdmin will use to +connect to the MySQL server. This user/password pair is not needed when +HTTP or cookie authentication is used +and should be empty.

+
+ +
+
+$cfg['Servers'][$i]['nopassword']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+
+

Deprecated since version 4.7.0: This setting was removed as it can produce unexpected results.

+
+

Allow attempt to log in without password when a login with password +fails. This can be used together with http authentication, when +authentication is done some other way and phpMyAdmin gets user name +from auth and uses empty password for connecting to MySQL. Password +login is still tried first, but as fallback, no password method is +tried.

+
+ +
+
+$cfg['Servers'][$i]['only_db']
+
+
Type
+

string or array

+
+
Default value
+

''

+
+
+

If set to a (an array of) database name(s), only this (these) +database(s) will be shown to the user. Since phpMyAdmin 2.2.1, +this/these database(s) name(s) may contain MySQL wildcards characters +(“_” and “%”): if you want to use literal instances of these +characters, escape them (I.E. use 'my\_db' and not 'my_db').

+

This setting is an efficient way to lower the server load since the +latter does not need to send MySQL requests to build the available +database list. But it does not replace the privileges rules of the +MySQL database server. If set, it just means only these databases +will be displayed but not that all other databases can’t be used.

+

An example of using more that one database:

+
$cfg['Servers'][$i]['only_db'] = ['db1', 'db2'];
+
+
+
+

Changed in version 4.0.0: Previous versions permitted to specify the display order of +the database names via this directive.

+
+
+ +
+
+$cfg['Servers'][$i]['hide_db']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Regular expression for hiding some databases from unprivileged users. +This only hides them from listing, but a user is still able to access +them (using, for example, the SQL query area). To limit access, use +the MySQL privilege system. For example, to hide all databases +starting with the letter “a”, use

+
$cfg['Servers'][$i]['hide_db'] = '^a';
+
+
+

and to hide both “db1” and “db2” use

+
$cfg['Servers'][$i]['hide_db'] = '^(db1|db2)$';
+
+
+

More information on regular expressions can be found in the PCRE +pattern syntax portion +of the PHP reference manual.

+
+ +
+
+$cfg['Servers'][$i]['verbose']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Only useful when using phpMyAdmin with multiple server entries. If +set, this string will be displayed instead of the hostname in the +pull-down menu on the main page. This can be useful if you want to +show only certain databases on your system, for example. For HTTP +auth, all non-US-ASCII characters will be stripped.

+
+ +
+
+$cfg['Servers'][$i]['extension']
+
+
Type
+

string

+
+
Default value
+

'mysqli'

+
+
+
+

Deprecated since version 4.2.0: This setting was removed. The mysql extension will only be used when +the mysqli extension is not available. As of 5.0.0, only the +mysqli extension can be used.

+
+

The PHP MySQL extension to use (mysql or mysqli).

+

It is recommended to use mysqli in all installations.

+
+ +
+
+$cfg['Servers'][$i]['pmadb']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

The name of the database containing the phpMyAdmin configuration +storage.

+

See the phpMyAdmin configuration storage section in this document to see the benefits of +this feature, and for a quick way of creating this database and the needed +tables.

+

If you are the only user of this phpMyAdmin installation, you can use your +current database to store those special tables; in this case, just put your +current database name in $cfg['Servers'][$i]['pmadb']. For a +multi-user installation, set this parameter to the name of your central +database containing the phpMyAdmin configuration storage.

+
+ +
+
+$cfg['Servers'][$i]['bookmarktable']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 2.2.0.

+
+

Since release 2.2.0 phpMyAdmin allows users to bookmark queries. This +can be useful for queries you often run. To allow the usage of this +functionality:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['relation']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 2.2.4.

+
+

Since release 2.2.4 you can describe, in a special ‘relation’ table, +which column is a key in another table (a foreign key). phpMyAdmin +currently uses this to:

+ +

The keys can be numeric or character.

+

To allow the usage of this functionality:

+
    +
  • set up $cfg['Servers'][$i]['pmadb'] and the phpMyAdmin configuration storage

  • +
  • put the relation table name in $cfg['Servers'][$i]['relation']

  • +
  • now as normal user open phpMyAdmin and for each one of your tables +where you want to use this feature, click Structure/Relation view/ +and choose foreign columns.

  • +
+

This feature can be disabled by setting the configuration to false.

+
+

Note

+

In the current version, master_db must be the same as foreign_db. +Those columns have been put in future development of the cross-db +relations.

+
+
+ +
+
+$cfg['Servers'][$i]['table_info']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 2.3.0.

+
+

Since release 2.3.0 you can describe, in a special ‘table_info’ +table, which column is to be displayed as a tool-tip when moving the +cursor over the corresponding key. This configuration variable will +hold the name of this special table. To allow the usage of this +functionality:

+ +

This feature can be disabled by setting the configuration to false.

+ +
+ +
+
+$cfg['Servers'][$i]['table_coords']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+

The designer feature can save your page layout; by pressing the “Save page” or “Save page as” +button in the expanding designer menu, you can customize the layout and have it loaded the next +time you use the designer. That layout is stored in this table. Furthermore, this table is also +required for using the PDF relation export feature, see +$cfg['Servers'][$i]['pdf_pages'] for additional details.

+
+ +
+
+$cfg['Servers'][$i]['pdf_pages']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 2.3.0.

+
+

Since release 2.3.0 you can have phpMyAdmin create PDF pages +showing the relations between your tables. Further, the designer interface +permits visually managing the relations. To do this it needs two tables +“pdf_pages” (storing information about the available PDF pages) +and “table_coords” (storing coordinates where each table will be placed on +a PDF schema output). You must be using the “relation” feature.

+

To allow the usage of this functionality:

+ +

This feature can be disabled by setting either of the configurations to false.

+ +
+ +
+
+$cfg['Servers'][$i]['designer_coords']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+
+

New in version 2.10.0: Since release 2.10.0 a Designer interface is available; it permits to +visually manage the relations.

+
+
+

Deprecated since version 4.3.0: This setting was removed and the Designer table positioning data is now stored into $cfg['Servers'][$i]['table_coords'].

+
+
+

Note

+

You can now delete the table pma__designer_coords from your phpMyAdmin configuration storage database and remove $cfg['Servers'][$i]['designer_coords'] from your configuration file.

+
+
+ +
+
+$cfg['Servers'][$i]['column_info']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 2.3.0.

+
+

This part requires a content update! Since release 2.3.0 you can +store comments to describe each column for each table. These will then +be shown on the “printview”.

+

Starting with release 2.5.0, comments are consequently used on the table +property pages and table browse view, showing up as tool-tips above the +column name (properties page) or embedded within the header of table in +browse view. They can also be shown in a table dump. Please see the +relevant configuration directives later on.

+

Also new in release 2.5.0 is a MIME- transformation system which is also +based on the following table structure. See Transformations for +further information. To use the MIME- transformation system, your +column_info table has to have the three new columns ‘mimetype’, +‘transformation’, ‘transformation_options’.

+

Starting with release 4.3.0, a new input-oriented transformation system +has been introduced. Also, backward compatibility code used in the old +transformations system was removed. As a result, an update to column_info +table is necessary for previous transformations and the new input-oriented +transformation system to work. phpMyAdmin will upgrade it automatically +for you by analyzing your current column_info table structure. +However, if something goes wrong with the auto-upgrade then you can +use the SQL script found in ./sql/upgrade_column_info_4_3_0+.sql +to upgrade it manually.

+

To allow the usage of this functionality:

+
    +
  • set up $cfg['Servers'][$i]['pmadb'] and the phpMyAdmin configuration storage

  • +
  • put the table name in $cfg['Servers'][$i]['column_info'] (e.g. +pma__column_info)

  • +
  • to update your PRE-2.5.0 Column_comments table use this: and +remember that the Variable in config.inc.php has been renamed from +$cfg['Servers'][$i]['column_comments'] to +$cfg['Servers'][$i]['column_info']

    +
    ALTER TABLE `pma__column_comments`
    +ADD `mimetype` VARCHAR( 255 ) NOT NULL,
    +ADD `transformation` VARCHAR( 255 ) NOT NULL,
    +ADD `transformation_options` VARCHAR( 255 ) NOT NULL;
    +
    +
    +
  • +
  • to update your PRE-4.3.0 Column_info table manually use this +./sql/upgrade_column_info_4_3_0+.sql SQL script.

  • +
+

This feature can be disabled by setting the configuration to false.

+
+

Note

+

For auto-upgrade functionality to work, your +$cfg['Servers'][$i]['controluser'] must have ALTER privilege on +phpmyadmin database. See the MySQL documentation for GRANT on how to +GRANT privileges to a user.

+
+
+ +
+
+$cfg['Servers'][$i]['history']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 2.5.0.

+
+

Since release 2.5.0 you can store your SQL history, which means all +queries you entered manually into the phpMyAdmin interface. If you don’t +want to use a table-based history, you can use the JavaScript-based +history.

+

Using that, all your history items are deleted when closing the window. +Using $cfg['QueryHistoryMax'] you can specify an amount of +history items you want to have on hold. On every login, this list gets cut +to the maximum amount.

+

The query history is only available if JavaScript is enabled in +your browser.

+

To allow the usage of this functionality:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['recent']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 3.5.0.

+
+

Since release 3.5.0 you can show recently used tables in the +navigation panel. It helps you to jump across table directly, without +the need to select the database, and then select the table. Using +$cfg['NumRecentTables'] you can configure the maximum number +of recent tables shown. When you select a table from the list, it will jump to +the page specified in $cfg['NavigationTreeDefaultTabTable'].

+

Without configuring the storage, you can still access the recently used tables, +but it will disappear after you logout.

+

To allow the usage of this functionality persistently:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['favorite']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 4.2.0.

+
+

Since release 4.2.0 you can show a list of selected tables in the +navigation panel. It helps you to jump to the table directly, without +the need to select the database, and then select the table. When you +select a table from the list, it will jump to the page specified in +$cfg['NavigationTreeDefaultTabTable'].

+

You can add tables to this list or remove tables from it in database +structure page by clicking on the star icons next to table names. Using +$cfg['NumFavoriteTables'] you can configure the maximum +number of favorite tables shown.

+

Without configuring the storage, you can still access the favorite tables, +but it will disappear after you logout.

+

To allow the usage of this functionality persistently:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['table_uiprefs']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 3.5.0.

+
+

Since release 3.5.0 phpMyAdmin can be configured to remember several +things (sorted column $cfg['RememberSorting'], column order, +and column visibility from a database table) for browsing tables. Without +configuring the storage, these features still can be used, but the values will +disappear after you logout.

+

To allow the usage of these functionality persistently:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['users']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+

The table used by phpMyAdmin to store user name information for associating with user groups. +See the next entry on $cfg['Servers'][$i]['usergroups'] for more details +and the suggested settings.

+
+ +
+
+$cfg['Servers'][$i]['usergroups']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 4.1.0.

+
+

Since release 4.1.0 you can create different user groups with menu items +attached to them. Users can be assigned to these groups and the logged in +user would only see menu items configured to the usergroup they are assigned to. +To do this it needs two tables “usergroups” (storing allowed menu items for each +user group) and “users” (storing users and their assignments to user groups).

+

To allow the usage of this functionality:

+ +

This feature can be disabled by setting either of the configurations to false.

+ +
+ +
+
+$cfg['Servers'][$i]['navigationhiding']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 4.1.0.

+
+

Since release 4.1.0 you can hide/show items in the navigation tree.

+

To allow the usage of this functionality:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['central_columns']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 4.3.0.

+
+

Since release 4.3.0 you can have a central list of columns per database. +You can add/remove columns to the list as per your requirement. These columns +in the central list will be available to use while you create a new column for +a table or create a table itself. You can select a column from central list +while creating a new column, it will save you from writing the same column definition +over again or from writing different names for similar column.

+

To allow the usage of this functionality:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['designer_settings']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 4.5.0.

+
+

Since release 4.5.0 your designer settings can be remembered. +Your choice regarding ‘Angular/Direct Links’, ‘Snap to Grid’, ‘Toggle Relation Lines’, +‘Small/Big All’, ‘Move Menu’ and ‘Pin Text’ can be remembered persistently.

+

To allow the usage of this functionality:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['savedsearches']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 4.2.0.

+
+

Since release 4.2.0 you can save and load query-by-example searches from the Database > Query panel.

+

To allow the usage of this functionality:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['export_templates']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 4.5.0.

+
+

Since release 4.5.0 you can save and load export templates.

+

To allow the usage of this functionality:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['tracking']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 3.3.x.

+
+

Since release 3.3.x a tracking mechanism is available. It helps you to +track every SQL command which is +executed by phpMyAdmin. The mechanism supports logging of data +manipulation and data definition statements. After enabling it you can +create versions of tables.

+

The creation of a version has two effects:

+
    +
  • phpMyAdmin saves a snapshot of the table, including structure and +indexes.

  • +
  • phpMyAdmin logs all commands which change the structure and/or data of +the table and links these commands with the version number.

  • +
+

Of course you can view the tracked changes. On the Tracking +page a complete report is available for every version. For the report you +can use filters, for example you can get a list of statements within a date +range. When you want to filter usernames you can enter * for all names or +you enter a list of names separated by ‘,’. In addition you can export the +(filtered) report to a file or to a temporary database.

+

To allow the usage of this functionality:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['tracking_version_auto_create']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Whether the tracking mechanism creates versions for tables and views +automatically.

+

If this is set to true and you create a table or view with

+
    +
  • CREATE TABLE …

  • +
  • CREATE VIEW …

  • +
+

and no version exists for it, the mechanism will create a version for +you automatically.

+
+ +
+
+$cfg['Servers'][$i]['tracking_default_statements']
+
+
Type
+

string

+
+
Default value
+

'CREATE TABLE,ALTER TABLE,DROP TABLE,RENAME TABLE,CREATE INDEX,DROP INDEX,INSERT,UPDATE,DELETE,TRUNCATE,REPLACE,CREATE VIEW,ALTER VIEW,DROP VIEW,CREATE DATABASE,ALTER DATABASE,DROP DATABASE'

+
+
+

Defines the list of statements the auto-creation uses for new +versions.

+
+ +
+
+$cfg['Servers'][$i]['tracking_add_drop_view']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether a DROP VIEW IF EXISTS statement will be added as first line to +the log when creating a view.

+
+ +
+
+$cfg['Servers'][$i]['tracking_add_drop_table']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether a DROP TABLE IF EXISTS statement will be added as first line +to the log when creating a table.

+
+ +
+
+$cfg['Servers'][$i]['tracking_add_drop_database']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether a DROP DATABASE IF EXISTS statement will be added as first +line to the log when creating a database.

+
+ +
+
+$cfg['Servers'][$i]['userconfig']
+
+
Type
+

string or false

+
+
Default value
+

''

+
+
+
+

New in version 3.4.x.

+
+

Since release 3.4.x phpMyAdmin allows users to set most preferences by +themselves and store them in the database.

+

If you don’t allow for storing preferences in +$cfg['Servers'][$i]['pmadb'], users can still personalize +phpMyAdmin, but settings will be saved in browser’s local storage, or, it +is is unavailable, until the end of session.

+

To allow the usage of this functionality:

+ +

This feature can be disabled by setting the configuration to false.

+
+ +
+
+$cfg['Servers'][$i]['MaxTableUiprefs']
+
+
Type
+

integer

+
+
Default value
+

100

+
+
+

Maximum number of rows saved in +$cfg['Servers'][$i]['table_uiprefs'] table.

+

When tables are dropped or renamed, +$cfg['Servers'][$i]['table_uiprefs'] may contain invalid data +(referring to tables which no longer exist). We only keep this number of newest +rows in $cfg['Servers'][$i]['table_uiprefs'] and automatically +delete older rows.

+
+ +
+
+$cfg['Servers'][$i]['SessionTimeZone']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Sets the time zone used by phpMyAdmin. Leave blank to use the time zone of your +database server. Possible values are explained at +https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html

+

This is useful when your database server uses a time zone which is different from the +time zone you want to use in phpMyAdmin.

+
+ +
+
+$cfg['Servers'][$i]['AllowRoot']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether to allow root access. This is just a shortcut for the +$cfg['Servers'][$i]['AllowDeny']['rules'] below.

+
+ +
+
+$cfg['Servers'][$i]['AllowNoPassword']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Whether to allow logins without a password. The default value of +false for this parameter prevents unintended access to a MySQL +server with was left with an empty password for root or on which an +anonymous (blank) user is defined.

+
+ +
+
+$cfg['Servers'][$i]['AllowDeny']['order']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

If your rule order is empty, then IP +authorization is disabled.

+

If your rule order is set to +'deny,allow' then the system applies all deny rules followed by +allow rules. Access is allowed by default. Any client which does not +match a Deny command or does match an Allow command will be allowed +access to the server.

+

If your rule order is set to 'allow,deny' +then the system applies all allow rules followed by deny rules. Access +is denied by default. Any client which does not match an Allow +directive or does match a Deny directive will be denied access to the +server.

+

If your rule order is set to 'explicit', authorization is +performed in a similar fashion to rule order ‘deny,allow’, with the +added restriction that your host/username combination must be +listed in the allow rules, and not listed in the deny rules. This +is the most secure means of using Allow/Deny rules, and was +available in Apache by specifying allow and deny rules without setting +any order.

+

Please also see $cfg['TrustedProxies'] for +detecting IP address behind proxies.

+
+ +
+
+$cfg['Servers'][$i]['AllowDeny']['rules']
+
+
Type
+

array of strings

+
+
Default value
+

array()

+
+
+

The general format for the rules is as such:

+
<'allow' | 'deny'> <username> [from] <ipmask>
+
+
+

If you wish to match all users, it is possible to use a '%' as a +wildcard in the username field.

+

There are a few shortcuts you can +use in the ipmask field as well (please note that those containing +SERVER_ADDRESS might not be available on all webservers):

+
'all' -> 0.0.0.0/0
+'localhost' -> 127.0.0.1/8
+'localnetA' -> SERVER_ADDRESS/8
+'localnetB' -> SERVER_ADDRESS/16
+'localnetC' -> SERVER_ADDRESS/24
+
+
+

Having an empty rule list is equivalent to either using 'allow % +from all' if your rule order is set to 'deny,allow' or 'deny % +from all' if your rule order is set to 'allow,deny' or +'explicit'.

+

For the IP Address matching +system, the following work:

+
    +
  • xxx.xxx.xxx.xxx (an exact IP Address)

  • +
  • xxx.xxx.xxx.[yyy-zzz] (an IP Address range)

  • +
  • xxx.xxx.xxx.xxx/nn (CIDR, Classless Inter-Domain Routing type IP addresses)

  • +
+

But the following does not work:

+
    +
  • xxx.xxx.xxx.xx[yyy-zzz] (partial IP address range)

  • +
+

For IPv6 addresses, the following work:

+
    +
  • xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx (an exact IPv6 address)

  • +
  • xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:[yyyy-zzzz] (an IPv6 address range)

  • +
  • xxxx:xxxx:xxxx:xxxx/nn (CIDR, Classless Inter-Domain Routing type IPv6 addresses)

  • +
+

But the following does not work:

+
    +
  • xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx[yyy-zzz] (partial IPv6 address range)

  • +
+

Examples:

+
$cfg['Servers'][$i]['AllowDeny']['order'] = 'allow,deny';
+$cfg['Servers'][$i]['AllowDeny']['rules'] = ['allow bob from all'];
+// Allow only 'bob' to connect from any host
+
+$cfg['Servers'][$i]['AllowDeny']['order'] = 'allow,deny';
+$cfg['Servers'][$i]['AllowDeny']['rules'] = ['allow mary from 192.168.100.[50-100]'];
+// Allow only 'mary' to connect from host 192.168.100.50 through 192.168.100.100
+
+$cfg['Servers'][$i]['AllowDeny']['order'] = 'allow,deny';
+$cfg['Servers'][$i]['AllowDeny']['rules'] = ['allow % from 192.168.[5-6].10'];
+// Allow any user to connect from host 192.168.5.10 or 192.168.6.10
+
+$cfg['Servers'][$i]['AllowDeny']['order'] = 'allow,deny';
+$cfg['Servers'][$i]['AllowDeny']['rules'] = ['allow root from 192.168.5.50','allow % from 192.168.6.10'];
+// Allow any user to connect from 192.168.6.10, and additionally allow root to connect from 192.168.5.50
+
+
+
+ +
+
+$cfg['Servers'][$i]['DisableIS']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Disable using INFORMATION_SCHEMA to retrieve information (use +SHOW commands instead), because of speed issues when many +databases are present.

+
+

Note

+

Enabling this option might give you a big performance boost on older +MySQL servers.

+
+
+ +
+
+$cfg['Servers'][$i]['SignonScript']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+
+

New in version 3.5.0.

+
+

Name of PHP script to be sourced and executed to obtain login +credentials. This is alternative approach to session based single +signon. The script has to provide a function called +get_login_credentials which returns list of username and +password, accepting single parameter of existing username (can be +empty). See examples/signon-script.php for an example:

+
<?php
+/**
+ * Single signon for phpMyAdmin
+ *
+ * This is just example how to use script based single signon with
+ * phpMyAdmin, it is not intended to be perfect code and look, only
+ * shows how you can integrate this functionality in your application.
+ */
+
+declare(strict_types=1);
+
+// phpcs:disable Squiz.Functions.GlobalFunction
+
+/**
+ * This function returns username and password.
+ *
+ * It can optionally use configured username as parameter.
+ *
+ * @param string $user User name
+ *
+ * @return array
+ */
+function get_login_credentials($user)
+{
+    /* Optionally we can use passed username */
+    if (! empty($user)) {
+        return [
+            $user,
+            'password',
+        ];
+    }
+
+    /* Here we would retrieve the credentials */
+    return [
+        'root',
+        '',
+    ];
+}
+
+
+ +
+ +
+
+$cfg['Servers'][$i]['SignonSession']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Name of session which will be used for signon authentication method. +You should use something different than phpMyAdmin, because this +is session which phpMyAdmin uses internally. Takes effect only if +$cfg['Servers'][$i]['SignonScript'] is not configured.

+ +
+ +
+
+$cfg['Servers'][$i]['SignonCookieParams']
+
+
Type
+

array

+
+
Default value
+

array()

+
+
+
+

New in version 4.7.0.

+
+

An associative array of session cookie parameters of other authentication system. +It is not needed if the other system doesn’t use session_set_cookie_params(). +Keys should include ‘lifetime’, ‘path’, ‘domain’, ‘secure’ or ‘httponly’. +Valid values are mentioned in session_get_cookie_params, they should be set to same values as the +other application uses. Takes effect only if +$cfg['Servers'][$i]['SignonScript'] is not configured.

+ +
+ +
+
+$cfg['Servers'][$i]['SignonURL']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

URL where user will be redirected +to log in for signon authentication method. Should be absolute +including protocol.

+ +
+ +
+
+$cfg['Servers'][$i]['LogoutURL']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

URL where user will be redirected +after logout (doesn’t affect config authentication method). Should be +absolute including protocol.

+
+ +
+
+$cfg['Servers'][$i]['hide_connection_errors']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+
+

New in version 4.9.8.

+
+

Whether to show or hide detailed MySQL/MariaDB connection errors on the login page.

+
+

Note

+

This error message can contain the target database server hostname or IP address, +which may reveal information about your network to an attacker.

+
+
+ +
+
+

Generic settings

+
+
+$cfg['DisableShortcutKeys']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

You can disable phpMyAdmin shortcut keys by setting $cfg['DisableShortcutKeys'] to false.

+
+ +
+
+$cfg['ServerDefault']
+
+
Type
+

integer

+
+
Default value
+

1

+
+
+

If you have more than one server configured, you can set +$cfg['ServerDefault'] to any one of them to autoconnect to that +server when phpMyAdmin is started, or set it to 0 to be given a list +of servers without logging in.

+

If you have only one server configured, +$cfg['ServerDefault'] MUST be set to that server.

+
+ +
+
+$cfg['VersionCheck']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Enables check for latest versions using JavaScript on the main phpMyAdmin +page or by directly accessing index.php?route=/version-check.

+
+

Note

+

This setting can be adjusted by your vendor.

+
+
+ +
+
+$cfg['ProxyUrl']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

The url of the proxy to be used when phpmyadmin needs to access the outside +internet such as when retrieving the latest version info or submitting error +reports. You need this if the server where phpMyAdmin is installed does not +have direct access to the internet. +The format is: “hostname:portnumber”

+
+ +
+
+$cfg['ProxyUser']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

The username for authenticating with the proxy. By default, no +authentication is performed. If a username is supplied, Basic +Authentication will be performed. No other types of authentication +are currently supported.

+
+ +
+
+$cfg['ProxyPass']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

The password for authenticating with the proxy.

+
+ +
+
+$cfg['MaxDbList']
+
+
Type
+

integer

+
+
Default value
+

100

+
+
+

The maximum number of database names to be displayed in the main panel’s +database list.

+
+ +
+
+$cfg['MaxTableList']
+
+
Type
+

integer

+
+
Default value
+

250

+
+
+

The maximum number of table names to be displayed in the main panel’s +list (except on the Export page).

+
+ +
+
+$cfg['ShowHint']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether or not to show hints (for example, hints when hovering over +table headers).

+
+ +
+
+$cfg['MaxCharactersInDisplayedSQL']
+
+
Type
+

integer

+
+
Default value
+

1000

+
+
+

The maximum number of characters when a SQL query is displayed. The +default limit of 1000 should be correct to avoid the display of tons of +hexadecimal codes that represent BLOBs, but some users have real +SQL queries that are longer than 1000 characters. Also, if a +query’s length exceeds this limit, this query is not saved in the history.

+
+ +
+
+$cfg['PersistentConnections']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Whether persistent connections should be used or not.

+
+ + +
+
+$cfg['ForceSSL']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+
+

Deprecated since version 4.6.0: This setting is no longer available since phpMyAdmin 4.6.0. Please +adjust your webserver instead.

+
+

Whether to force using https while accessing phpMyAdmin. In a reverse +proxy setup, setting this to true is not supported.

+
+

Note

+

In some setups (like separate SSL proxy or load balancer) you might +have to set $cfg['PmaAbsoluteUri'] for correct +redirection.

+
+
+ +
+
+$cfg['MysqlSslWarningSafeHosts']
+
+
Type
+

array

+
+
Default value
+

['127.0.0.1', 'localhost']

+
+
+

This search is case-sensitive and will match the exact string only. +If your setup does not use SSL but is safe because you are using a +local connection or private network, you can add your hostname or IP to the list. +You can also remove the default entries to only include yours.

+

This check uses the value of $cfg['Servers'][$i]['host'].

+
+

New in version 5.1.0.

+
+

Example configuration

+
$cfg['MysqlSslWarningSafeHosts'] = ['127.0.0.1', 'localhost', 'mariadb.local'];
+
+
+
+ +
+
+$cfg['ExecTimeLimit']
+
+
Type
+

integer [number of seconds]

+
+
Default value
+

300

+
+
+

Set the number of seconds a script is allowed to run. If seconds is +set to zero, no time limit is imposed. This setting is used while +importing/exporting dump files but has +no effect when PHP is running in safe mode.

+
+ +
+
+$cfg['SessionSavePath']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Path for storing session data (session_save_path PHP parameter).

+
+

Warning

+

This folder should not be publicly accessible through the webserver, +otherwise you risk leaking private data from your session.

+
+
+ +
+
+$cfg['MemoryLimit']
+
+
Type
+

string [number of bytes]

+
+
Default value
+

'-1'

+
+
+

Set the number of bytes a script is allowed to allocate. If set to +'-1', no limit is imposed. If set to '0', no change of the +memory limit is attempted and the php.ini memory_limit is +used.

+

This setting is used while importing/exporting dump files +so you definitely don’t want to put here a too low +value. It has no effect when PHP is running in safe mode.

+

You can also use any string as in php.ini, eg. ‘16M’. Ensure you +don’t omit the suffix (16 means 16 bytes!)

+
+ +
+
+$cfg['SkipLockedTables']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Mark used tables and make it possible to show databases with locked +tables (since MySQL 3.23.30).

+
+ +
+
+$cfg['ShowSQL']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether SQL queries +generated by phpMyAdmin should be displayed or not.

+
+ +
+
+$cfg['RetainQueryBox']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Defines whether the SQL query box +should be kept displayed after its submission.

+
+ +
+
+$cfg['CodemirrorEnable']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether to use a Javascript code editor for SQL query boxes. +CodeMirror provides syntax highlighting and line numbers. However, +middle-clicking for pasting the clipboard contents in some Linux +distributions (such as Ubuntu) is not supported by all browsers.

+
+ +
+
+$cfg['DefaultForeignKeyChecks']
+
+
Type
+

string

+
+
Default value
+

'default'

+
+
+

Default value of the checkbox for foreign key checks, to disable/enable +foreign key checks for certain queries. The possible values are 'default', +'enable' or 'disable'. If set to 'default', the value of the +MySQL variable FOREIGN_KEY_CHECKS is used.

+
+ +
+
+$cfg['AllowUserDropDatabase']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+
+

Warning

+

This is not a security measure as there will be always ways to +circumvent this. If you want to prohibit users from dropping databases, +revoke their corresponding DROP privilege.

+
+

Defines whether normal users (non-administrator) are allowed to delete +their own database or not. If set as false, the link Drop +Database will not be shown, and even a DROP DATABASE mydatabase will +be rejected. Quite practical for ISP ‘s with many customers.

+

This limitation of SQL queries is not as strict as when using MySQL +privileges. This is due to nature of SQL queries which might be +quite complicated. So this choice should be viewed as help to avoid +accidental dropping rather than strict privilege limitation.

+
+ +
+
+$cfg['Confirm']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether a warning (“Are your really sure…”) should be displayed when +you’re about to lose data.

+
+ +
+
+$cfg['UseDbSearch']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Define whether the “search string inside database” is enabled or not.

+
+ +
+
+$cfg['IgnoreMultiSubmitErrors']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Define whether phpMyAdmin will continue executing a multi-query +statement if one of the queries fails. Default is to abort execution.

+
+ +
+
+$cfg['enable_drag_drop_import']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether or not the drag and drop import feature is enabled. +When enabled, a user can drag a file in to their browser and phpMyAdmin will +attempt to import the file.

+
+ +
+
+$cfg['URLQueryEncryption']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+
+

New in version 4.9.8.

+
+

Define whether phpMyAdmin will encrypt sensitive data (like database name +and table name) from the URL query string. Default is to not encrypt the URL +query string.

+
+ +
+
+$cfg['URLQueryEncryptionSecretKey']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+
+

New in version 4.9.8.

+
+

A secret key used to encrypt/decrypt the URL query string. +Should be 32 bytes long.

+
+ +
+ + +
+

Main panel

+
+
+$cfg['ShowStats']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether or not to display space usage and statistics about +databases and tables. Note that statistics requires at least MySQL +3.23.3 and that, at this date, MySQL doesn’t return such information +for Berkeley DB tables.

+
+ +
+
+$cfg['ShowServerInfo']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether to display detailed server information on main page. +You can additionally hide more information by using +$cfg['Servers'][$i]['verbose'].

+
+ +
+
+$cfg['ShowPhpInfo']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Defines whether to display the PHP information or not at +the starting main (right) frame.

+

Please note that to block the usage of phpinfo() in scripts, you have to +put this in your php.ini:

+
disable_functions = phpinfo()
+
+
+
+

Warning

+

Enabling phpinfo page will leak quite a lot of information about server +setup. Is it not recommended to enable this on shared installations.

+

This might also make easier some remote attacks on your installations, +so enable this only when needed.

+
+
+ +
+
+$cfg['ShowChgPassword']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether to display the Change password link or not at +the starting main (right) frame. This setting does not check MySQL commands +entered directly.

+

Please note that enabling the Change password link has no effect +with config authentication mode: because of the hard coded password value +in the configuration file, end users can’t be allowed to change their +passwords.

+
+ +
+
+$cfg['ShowCreateDb']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether to display the form for creating database or not at the +starting main (right) frame. This setting does not check MySQL commands +entered directly.

+
+ +
+
+$cfg['ShowGitRevision']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether to display information about the current Git revision (if +applicable) on the main panel.

+
+ +
+
+$cfg['MysqlMinVersion']
+
+
Type
+

array

+
+
+

Defines the minimum supported MySQL version. The default is chosen +by the phpMyAdmin team; however this directive was asked by a developer +of the Plesk control panel to ease integration with older MySQL servers +(where most of the phpMyAdmin features work).

+
+ +
+
+

Database structure

+
+
+$cfg['ShowDbStructureCreation']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Defines whether the database structure page (tables list) has a +“Creation” column that displays when each table was created.

+
+ +
+
+$cfg['ShowDbStructureLastUpdate']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Defines whether the database structure page (tables list) has a “Last +update” column that displays when each table was last updated.

+
+ +
+
+$cfg['ShowDbStructureLastCheck']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Defines whether the database structure page (tables list) has a “Last +check” column that displays when each table was last checked.

+
+ +
+
+$cfg['HideStructureActions']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether the table structure actions are hidden under a “More” +drop-down.

+
+ +
+
+$cfg['ShowColumnComments']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether to show column comments as a column in the table structure view.

+
+ +
+
+

Browse mode

+
+
+$cfg['TableNavigationLinksMode']
+
+
Type
+

string

+
+
Default value
+

'icons'

+
+
+

Defines whether the table navigation links contain 'icons', 'text' +or 'both'.

+
+ +
+
+$cfg['ActionLinksMode']
+
+
Type
+

string

+
+
Default value
+

'both'

+
+
+

If set to icons, will display icons instead of text for db and table +properties links (like Browse, Select, +Insert, …). Can be set to 'both' +if you want icons AND text. When set to text, will only show text.

+
+ +
+
+$cfg['RowActionType']
+
+
Type
+

string

+
+
Default value
+

'both'

+
+
+

Whether to display icons or text or both icons and text in table row action +segment. Value can be either of 'icons', 'text' or 'both'.

+
+ +
+
+$cfg['ShowAll']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Defines whether a user should be displayed a “Show all” button in browse +mode or not in all cases. By default it is shown only on small tables (less +than 500 rows) to avoid performance issues while getting too many rows.

+
+ +
+
+$cfg['MaxRows']
+
+
Type
+

integer

+
+
Default value
+

25

+
+
+

Number of rows displayed when browsing a result set and no LIMIT +clause is used. If the result set contains more rows, “Previous” and +“Next” links will be shown. Possible values: 25,50,100,250,500.

+
+ +
+
+$cfg['Order']
+
+
Type
+

string

+
+
Default value
+

'SMART'

+
+
+

Defines whether columns are displayed in ascending (ASC) order, in +descending (DESC) order or in a “smart” (SMART) order - I.E. +descending order for columns of type TIME, DATE, DATETIME and +TIMESTAMP, ascending order else- by default.

+
+

Changed in version 3.4.0: Since phpMyAdmin 3.4.0 the default value is 'SMART'.

+
+
+ +
+
+$cfg['GridEditing']
+
+
Type
+

string

+
+
Default value
+

'double-click'

+
+
+

Defines which action (double-click or click) triggers grid +editing. Can be deactivated with the disabled value.

+
+ +
+
+$cfg['RelationalDisplay']
+
+
Type
+

string

+
+
Default value
+

'K'

+
+
+

Defines the initial behavior for Options > Relational. K, which +is the default, displays the key while D shows the display column.

+
+ +
+
+$cfg['SaveCellsAtOnce']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Defines whether or not to save all edited cells at once for grid +editing.

+
+ +
+
+

Editing mode

+
+
+$cfg['ProtectBinary']
+
+
Type
+

boolean or string

+
+
Default value
+

'blob'

+
+
+

Defines whether BLOB or BINARY columns are protected from +editing when browsing a table’s content. Valid values are:

+
    +
  • false to allow editing of all columns;

  • +
  • 'blob' to allow editing of all columns except BLOBS;

  • +
  • 'noblob' to disallow editing of all columns except BLOBS (the +opposite of 'blob');

  • +
  • 'all' to disallow editing of all BINARY or BLOB columns.

  • +
+
+ +
+
+$cfg['ShowFunctionFields']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether or not MySQL functions fields should be initially +displayed in edit/insert mode. Since version 2.10, the user can toggle +this setting from the interface.

+
+ +
+
+$cfg['ShowFieldTypesInDataEditView']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether or not type fields should be initially displayed in +edit/insert mode. The user can toggle this setting from the interface.

+
+ +
+
+$cfg['InsertRows']
+
+
Type
+

integer

+
+
Default value
+

2

+
+
+

Defines the default number of rows to be entered from the Insert page. +Users can manually change this from the bottom of that page to add or remove +blank rows.

+
+ +
+
+$cfg['ForeignKeyMaxLimit']
+
+
Type
+

integer

+
+
Default value
+

100

+
+
+

If there are fewer items than this in the set of foreign keys, then a +drop-down box of foreign keys is presented, in the style described by +the $cfg['ForeignKeyDropdownOrder'] setting.

+
+ +
+
+$cfg['ForeignKeyDropdownOrder']
+
+
Type
+

array

+
+
Default value
+

array(‘content-id’, ‘id-content’)

+
+
+

For the foreign key drop-down fields, there are several methods of +display, offering both the key and value data. The contents of the +array should be one or both of the following strings: content-id, +id-content.

+
+ +
+
+

Export and import settings

+
+
+$cfg['ZipDump']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+
+ +
+
+$cfg['GZipDump']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+
+ +
+
+$cfg['BZipDump']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether to allow the use of zip/GZip/BZip2 compression when +creating a dump file

+
+ +
+
+$cfg['CompressOnFly']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether to allow on the fly compression for GZip/BZip2 +compressed exports. This doesn’t affect smaller dumps and allows users +to create larger dumps that won’t otherwise fit in memory due to php +memory limit. Produced files contain more GZip/BZip2 headers, but all +normal programs handle this correctly.

+
+ +
+
+$cfg['Export']
+
+
Type
+

array

+
+
Default value
+

array(…)

+
+
+

In this array are defined default parameters for export, names of +items are similar to texts seen on export page, so you can easily +identify what they mean.

+
+ +
+
+$cfg['Export']['format']
+
+
Type
+

string

+
+
Default value
+

'sql'

+
+
+

Default export format.

+
+ +
+
+$cfg['Export']['method']
+
+
Type
+

string

+
+
Default value
+

'quick'

+
+
+

Defines how the export form is displayed when it loads. Valid values +are:

+
    +
  • quick to display the minimum number of options to configure

  • +
  • custom to display every available option to configure

  • +
  • custom-no-form same as custom but does not display the option +of using quick export

  • +
+
+ +
+
+$cfg['Export']['charset']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Defines charset for generated export. By default no charset conversion is +done assuming UTF-8.

+
+ +
+
+$cfg['Export']['file_template_table']
+
+
Type
+

string

+
+
Default value
+

'@TABLE@'

+
+
+

Default filename template for table exports.

+ +
+ +
+
+$cfg['Export']['file_template_database']
+
+
Type
+

string

+
+
Default value
+

'@DATABASE@'

+
+
+

Default filename template for database exports.

+ +
+ +
+
+$cfg['Export']['file_template_server']
+
+
Type
+

string

+
+
Default value
+

'@SERVER@'

+
+
+

Default filename template for server exports.

+ +
+ +
+
+$cfg['Export']['remove_definer_from_definitions']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Remove DEFINER clause from the event, view and routine definitions.

+
+

New in version 5.2.0.

+
+
+ +
+
+$cfg['Import']
+
+
Type
+

array

+
+
Default value
+

array(…)

+
+
+

In this array are defined default parameters for import, names of +items are similar to texts seen on import page, so you can easily +identify what they mean.

+
+ +
+
+$cfg['Import']['charset']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Defines charset for import. By default no charset conversion is done +assuming UTF-8.

+
+ +
+
+

Tabs display settings

+
+
+$cfg['TabsMode']
+
+
Type
+

string

+
+
Default value
+

'both'

+
+
+

Defines whether the menu tabs contain 'icons', 'text' or 'both'.

+
+ +
+
+$cfg['PropertiesNumColumns']
+
+
Type
+

integer

+
+
Default value
+

1

+
+
+

How many columns will be utilized to display the tables on the database +property view? When setting this to a value larger than 1, the type of the +database will be omitted for more display space.

+
+ +
+
+$cfg['DefaultTabServer']
+
+
Type
+

string

+
+
Default value
+

'welcome'

+
+
+

Defines the tab displayed by default on server view. The possible values +are the localized equivalent of:

+
    +
  • welcome (recommended for multi-user setups)

  • +
  • databases,

  • +
  • status

  • +
  • variables

  • +
  • privileges

  • +
+
+ +
+
+$cfg['DefaultTabDatabase']
+
+
Type
+

string

+
+
Default value
+

'structure'

+
+
+

Defines the tab displayed by default on database view. The possible values +are the localized equivalent of:

+
    +
  • structure

  • +
  • sql

  • +
  • search

  • +
  • operations

  • +
+
+ +
+
+$cfg['DefaultTabTable']
+
+
Type
+

string

+
+
Default value
+

'browse'

+
+
+

Defines the tab displayed by default on table view. The possible values +are the localized equivalent of:

+
    +
  • structure

  • +
  • sql

  • +
  • search

  • +
  • insert

  • +
  • browse

  • +
+
+ +
+
+

PDF Options

+
+
+$cfg['PDFPageSizes']
+
+
Type
+

array

+
+
Default value
+

array('A3', 'A4', 'A5', 'letter', 'legal')

+
+
+

Array of possible paper sizes for creating PDF pages.

+

You should never need to change this.

+
+ +
+
+$cfg['PDFDefaultPageSize']
+
+
Type
+

string

+
+
Default value
+

'A4'

+
+
+

Default page size to use when creating PDF pages. Valid values are any +listed in $cfg['PDFPageSizes'].

+
+ +
+
+

Languages

+
+
+$cfg['DefaultLang']
+
+
Type
+

string

+
+
Default value
+

'en'

+
+
+

Defines the default language to use, if not browser-defined or user- +defined. The corresponding language file needs to be in +locale/code/LC_MESSAGES/phpmyadmin.mo.

+
+ +
+
+$cfg['DefaultConnectionCollation']
+
+
Type
+

string

+
+
Default value
+

'utf8mb4_general_ci'

+
+
+

Defines the default connection collation to use, if not user-defined. +See the MySQL documentation for charsets +for list of possible values.

+
+ +
+
+$cfg['Lang']
+
+
Type
+

string

+
+
Default value
+

not set

+
+
+

Force language to use. The corresponding language file needs to be in +locale/code/LC_MESSAGES/phpmyadmin.mo.

+
+ +
+
+$cfg['FilterLanguages']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Limit list of available languages to those matching the given regular +expression. For example if you want only Czech and English, you should +set filter to '^(cs|en)'.

+
+ +
+
+$cfg['RecodingEngine']
+
+
Type
+

string

+
+
Default value
+

'auto'

+
+
+

You can select here which functions will be used for character set +conversion. Possible values are:

+
    +
  • auto - automatically use available one (first is tested iconv, then +recode)

  • +
  • iconv - use iconv or libiconv functions

  • +
  • recode - use recode_string function

  • +
  • mb - use mbstring extension

  • +
  • none - disable encoding conversion

  • +
+

Enabled charset conversion activates a pull-down menu in the Export +and Import pages, to choose the character set when exporting a file. +The default value in this menu comes from +$cfg['Export']['charset'] and $cfg['Import']['charset'].

+
+ +
+
+$cfg['IconvExtraParams']
+
+
Type
+

string

+
+
Default value
+

'//TRANSLIT'

+
+
+

Specify some parameters for iconv used in charset conversion. See +iconv documentation for details. By default +//TRANSLIT is used, so that invalid characters will be +transliterated.

+
+ +
+
+$cfg['AvailableCharsets']
+
+
Type
+

array

+
+
Default value
+

array(…)

+
+
+

Available character sets for MySQL conversion. You can add your own +(any of supported by recode/iconv) or remove these which you don’t +use. Character sets will be shown in same order as here listed, so if +you frequently use some of these move them to the top.

+
+ +
+
+

Web server settings

+
+
+$cfg['OBGzip']
+
+
Type
+

string/boolean

+
+
Default value
+

'auto'

+
+
+

Defines whether to use GZip output buffering for increased speed in +HTTP transfers. Set to +true/false for enabling/disabling. When set to ‘auto’ (string), +phpMyAdmin tries to enable output buffering and will automatically +disable it if your browser has some problems with buffering. IE6 with +a certain patch is known to cause data corruption when having enabled +buffering.

+
+ +
+
+$cfg['TrustedProxies']
+
+
Type
+

array

+
+
Default value
+

array()

+
+
+

Lists proxies and HTTP headers which are trusted for +$cfg['Servers'][$i]['AllowDeny']['order']. This list is by +default empty, you need to fill in some trusted proxy servers if you +want to use rules for IP addresses behind proxy.

+

The following example specifies that phpMyAdmin should trust a +HTTP_X_FORWARDED_FOR (X-Forwarded-For) header coming from the proxy +1.2.3.4:

+
$cfg['TrustedProxies'] = ['1.2.3.4' => 'HTTP_X_FORWARDED_FOR'];
+
+
+

The $cfg['Servers'][$i]['AllowDeny']['rules'] directive uses the +client’s IP address as usual.

+
+ +
+
+$cfg['GD2Available']
+
+
Type
+

string

+
+
Default value
+

'auto'

+
+
+

Specifies whether GD >= 2 is available. If yes it can be used for MIME +transformations. Possible values are:

+
    +
  • auto - automatically detect

  • +
  • yes - GD 2 functions can be used

  • +
  • no - GD 2 function cannot be used

  • +
+
+ +
+
+$cfg['CheckConfigurationPermissions']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

We normally check the permissions on the configuration file to ensure +it’s not world writable. However, phpMyAdmin could be installed on a +NTFS filesystem mounted on a non-Windows server, in which case the +permissions seems wrong but in fact cannot be detected. In this case a +sysadmin would set this parameter to false.

+
+ +
+
+$cfg['LinkLengthLimit']
+
+
Type
+

integer

+
+
Default value
+

1000

+
+
+

Limit for length of URL in links. When length would be above this +limit, it is replaced by form with button. This is required as some web +servers (IIS) have problems with long URL .

+
+ +
+
+$cfg['CSPAllow']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Additional string to include in allowed script and image sources in Content +Security Policy header.

+

This can be useful when you want to include some external JavaScript files +in config.footer.inc.php or config.header.inc.php, which +would be normally not allowed by Content Security Policy.

+

To allow some sites, just list them within the string:

+
$cfg['CSPAllow'] = 'example.com example.net';
+
+
+
+

New in version 4.0.4.

+
+
+ +
+
+$cfg['DisableMultiTableMaintenance']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

In the database Structure page, it’s possible to mark some tables then +choose an operation like optimizing for many tables. This can slow +down a server; therefore, setting this to true prevents this kind +of multiple maintenance operation.

+
+ +
+
+

Theme settings

+
+

Please directly modify themes/themename/scss/_variables.scss, although +your changes will be overwritten with the next update.

+
+
+
+

Design customization

+
+
+$cfg['NavigationTreePointerEnable']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

When set to true, hovering over an item in the navigation panel causes that item to be marked +(the background is highlighted).

+
+ +
+
+$cfg['BrowsePointerEnable']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

When set to true, hovering over a row in the Browse page causes that row to be marked (the background +is highlighted).

+
+ +
+
+$cfg['BrowseMarkerEnable']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

When set to true, a data row is marked (the background is highlighted) when the row is selected +with the checkbox.

+
+ +
+
+$cfg['LimitChars']
+
+
Type
+

integer

+
+
Default value
+

50

+
+
+

Maximum number of characters shown in any non-numeric field on browse +view. Can be turned off by a toggle button on the browse page.

+
+ +
+ +
+
Type
+

string

+
+
Default value
+

'left'

+
+
+

Defines the place where table row links (Edit, Copy, Delete) would be +put when tables contents are displayed (you may have them displayed at +the left side, right side, both sides or nowhere).

+
+ +
+
+$cfg['RowActionLinksWithoutUnique']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Defines whether to show row links (Edit, Copy, Delete) and checkboxes +for multiple row operations even when the selection does not have a unique key. +Using row actions in the absence of a unique key may result in different/more +rows being affected since there is no guaranteed way to select the exact row(s).

+
+ +
+
+$cfg['RememberSorting']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

If enabled, remember the sorting of each table when browsing them.

+
+ +
+
+$cfg['TablePrimaryKeyOrder']
+
+
Type
+

string

+
+
Default value
+

'NONE'

+
+
+

This defines the default sort order for the tables, having a primary key, +when there is no sort order defines externally. +Acceptable values : [‘NONE’, ‘ASC’, ‘DESC’]

+
+ +
+
+$cfg['ShowBrowseComments']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+
+ +
+
+$cfg['ShowPropertyComments']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

By setting the corresponding variable to true you can enable the +display of column comments in Browse or Property display. In browse +mode, the comments are shown inside the header. In property mode, +comments are displayed using a CSS-formatted dashed-line below the +name of the column. The comment is shown as a tool-tip for that +column.

+
+ +
+
+$cfg['FirstDayOfCalendar']
+
+
Type
+

integer

+
+
Default value
+

0

+
+
+

This will define the first day of week in the calendar. The number +can be set from 0 to 6, which represents the seven days of the week, +Sunday to Saturday respectively. This value can also be configured by the user +in Settings -> Features -> General -> First day of calendar field.

+
+ +
+
+

Text fields

+
+
+$cfg['CharEditing']
+
+
Type
+

string

+
+
Default value
+

'input'

+
+
+

Defines which type of editing controls should be used for CHAR and +VARCHAR columns. Applies to data editing and also to the default values +in structure editing. Possible values are:

+
    +
  • input - this allows to limit size of text to size of columns in MySQL, +but has problems with newlines in columns

  • +
  • textarea - no problems with newlines in columns, but also no length +limitations

  • +
+
+ +
+
+$cfg['MinSizeForInputField']
+
+
Type
+

integer

+
+
Default value
+

4

+
+
+

Defines the minimum size for input fields generated for CHAR and +VARCHAR columns.

+
+ +
+
+$cfg['MaxSizeForInputField']
+
+
Type
+

integer

+
+
Default value
+

60

+
+
+

Defines the maximum size for input fields generated for CHAR and +VARCHAR columns.

+
+ +
+
+$cfg['TextareaCols']
+
+
Type
+

integer

+
+
Default value
+

40

+
+
+
+ +
+
+$cfg['TextareaRows']
+
+
Type
+

integer

+
+
Default value
+

15

+
+
+
+ +
+
+$cfg['CharTextareaCols']
+
+
Type
+

integer

+
+
Default value
+

40

+
+
+
+ +
+
+$cfg['CharTextareaRows']
+
+
Type
+

integer

+
+
Default value
+

7

+
+
+

Number of columns and rows for the textareas. This value will be +emphasized (*2) for SQL query +textareas and (*1.25) for SQL +textareas inside the query window.

+

The Char* values are used for CHAR +and VARCHAR editing (if configured via $cfg['CharEditing']).

+
+

Changed in version 5.0.0: The default value was changed from 2 to 7.

+
+
+ +
+
+$cfg['LongtextDoubleTextarea']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Defines whether textarea for LONGTEXT columns should have double size.

+
+ +
+
+$cfg['TextareaAutoSelect']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Defines if the whole textarea of the query box will be selected on +click.

+
+ +
+
+$cfg['EnableAutocompleteForTablesAndColumns']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether to enable autocomplete for table and column names in any +SQL query box.

+
+ +
+
+

SQL query box settings

+
+
+$cfg['SQLQuery']['Edit']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether to display an edit link to change a query in any SQL Query +box.

+
+ +
+
+$cfg['SQLQuery']['Explain']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether to display a link to explain a SELECT query in any SQL Query +box.

+
+ +
+
+$cfg['SQLQuery']['ShowAsPHP']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether to display a link to wrap a query in PHP code in any SQL Query +box.

+
+ +
+
+$cfg['SQLQuery']['Refresh']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Whether to display a link to refresh a query in any SQL Query box.

+
+ +
+
+

Web server upload/save/import directories

+

If PHP is running in safe mode, all directories must be owned by the same user +as the owner of the phpMyAdmin scripts.

+

If the directory where phpMyAdmin is installed is subject to an +open_basedir restriction, you need to create a temporary directory in some +directory accessible by the PHP interpreter.

+

For security reasons, all directories should be outside the tree published by +webserver. If you cannot avoid having this directory published by webserver, +limit access to it either by web server configuration (for example using +.htaccess or web.config files) or place at least an empty index.html +file there, so that directory listing is not possible. However as long as the +directory is accessible by web server, an attacker can guess filenames to download +the files.

+
+
+$cfg['UploadDir']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

The name of the directory where SQL files have been uploaded by +other means than phpMyAdmin (for example, FTP). Those files are available +under a drop-down box when you click the database or table name, then the +Import tab.

+

If +you want different directory for each user, %u will be replaced with +username.

+

Please note that the file names must have the suffix “.sql” +(or “.sql.bz2” or “.sql.gz” if support for compressed formats is +enabled).

+

This feature is useful when your file is too big to be +uploaded via HTTP, or when file +uploads are disabled in PHP.

+
+

Warning

+

Please see top of this chapter (Web server upload/save/import directories) for instructions how +to setup this directory and how to make its usage secure.

+
+ +
+ +
+
+$cfg['SaveDir']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

The name of the webserver directory where exported files can be saved.

+

If you want a different directory for each user, %u will be replaced with the +username.

+

Please note that the directory must exist and has to be writable for +the user running webserver.

+
+

Warning

+

Please see top of this chapter (Web server upload/save/import directories) for instructions how +to setup this directory and how to make its usage secure.

+
+
+ +
+
+$cfg['TempDir']
+
+
Type
+

string

+
+
Default value
+

'./tmp/'

+
+
+

The name of the directory where temporary files can be stored. It is used +for several purposes, currently:

+ +

This directory should have as strict permissions as possible as the only +user required to access this directory is the one who runs the webserver. +If you have root privileges, simply make this user owner of this directory +and make it accessible only by it:

+
chown www-data:www-data tmp
+chmod 700 tmp
+
+
+

If you cannot change owner of the directory, you can achieve a similar +setup using ACL:

+
chmod 700 tmp
+setfacl -m "g:www-data:rwx" tmp
+setfacl -d -m "g:www-data:rwx" tmp
+
+
+

If neither of above works for you, you can still make the directory +chmod 777, but it might impose risk of other users on system +reading and writing data in this directory.

+
+

Warning

+

Please see top of this chapter (Web server upload/save/import directories) for instructions how +to setup this directory and how to make its usage secure.

+
+
+ +
+
+

Various display setting

+
+
+$cfg['RepeatCells']
+
+
Type
+

integer

+
+
Default value
+

100

+
+
+

Repeat the headers every X cells, or 0 to deactivate.

+
+ +
+
+$cfg['QueryHistoryDB']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+
+ +
+
+$cfg['QueryHistoryMax']
+
+
Type
+

integer

+
+
Default value
+

25

+
+
+

If $cfg['QueryHistoryDB'] is set to true, all your +Queries are logged to a table, which has to be created by you (see +$cfg['Servers'][$i]['history']). If set to false, all your +queries will be appended to the form, but only as long as your window is +opened they remain saved.

+

When using the JavaScript based query window, it will always get updated +when you click on a new table/db to browse and will focus if you click on +Edit SQL after using a query. You can suppress updating the +query window by checking the box Do not overwrite this query +from outside the window below the query textarea. Then you can browse +tables/databases in the background without losing the contents of the +textarea, so this is especially useful when composing a query with tables +you first have to look in. The checkbox will get automatically checked +whenever you change the contents of the textarea. Please uncheck the button +whenever you definitely want the query window to get updated even though +you have made alterations.

+

If $cfg['QueryHistoryDB'] is set to true you can +specify the amount of saved history items using +$cfg['QueryHistoryMax'].

+
+ +
+
+$cfg['BrowseMIME']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Enable Transformations.

+
+ +
+
+$cfg['MaxExactCount']
+
+
Type
+

integer

+
+
Default value
+

50000

+
+
+

For InnoDB tables, determines for how large tables phpMyAdmin should +get the exact row count using SELECT COUNT. If the approximate row +count as returned by SHOW TABLE STATUS is smaller than this value, +SELECT COUNT will be used, otherwise the approximate count will be +used.

+
+

Changed in version 4.8.0: The default value was lowered to 50000 for performance reasons.

+
+
+

Changed in version 4.2.6: The default value was changed to 500000.

+
+ +
+ +
+
+$cfg['MaxExactCountViews']
+
+
Type
+

integer

+
+
Default value
+

0

+
+
+

For VIEWs, since obtaining the exact count could have an impact on +performance, this value is the maximum to be displayed, using a +SELECT COUNT ... LIMIT. Setting this to 0 bypasses any row +counting.

+
+ +
+
+$cfg['NaturalOrder']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Sorts database and table names according to natural order (for +example, t1, t2, t10). Currently implemented in the navigation panel +and in Database view, for the table list.

+
+ +
+
+$cfg['InitialSlidersState']
+
+
Type
+

string

+
+
Default value
+

'closed'

+
+
+

If set to 'closed', the visual sliders are initially in a closed +state. A value of 'open' does the reverse. To completely disable +all visual sliders, use 'disabled'.

+
+ +
+
+$cfg['UserprefsDisallow']
+
+
Type
+

array

+
+
Default value
+

array()

+
+
+

Contains names of configuration options (keys in $cfg array) that +users can’t set through user preferences. For possible values, refer +to classes under libraries/classes/Config/Forms/User/.

+
+ +
+
+$cfg['UserprefsDeveloperTab']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+
+

New in version 3.4.0.

+
+

Activates in the user preferences a tab containing options for +developers of phpMyAdmin.

+
+ +
+
+

Page titles

+
+
+$cfg['TitleTable']
+
+
Type
+

string

+
+
Default value
+

'@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@'

+
+
+
+ +
+
+$cfg['TitleDatabase']
+
+
Type
+

string

+
+
Default value
+

'@HTTP_HOST@ / @VSERVER@ / @DATABASE@ | @PHPMYADMIN@'

+
+
+
+ +
+
+$cfg['TitleServer']
+
+
Type
+

string

+
+
Default value
+

'@HTTP_HOST@ / @VSERVER@ | @PHPMYADMIN@'

+
+
+
+ +
+
+$cfg['TitleDefault']
+
+
Type
+

string

+
+
Default value
+

'@HTTP_HOST@ | @PHPMYADMIN@'

+
+
+

Allows you to specify window’s title bar. You can use 6.27 What format strings can I use?.

+
+ +
+
+

Theme manager settings

+
+
+$cfg['ThemeManager']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Enables user-selectable themes. See 2.7 Using and creating themes.

+
+ +
+
+$cfg['ThemeDefault']
+
+
Type
+

string

+
+
Default value
+

'pmahomme'

+
+
+

The default theme (a subdirectory under ./themes/).

+
+ +
+
+$cfg['ThemePerServer']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Whether to allow different theme for each server.

+
+ +
+
+$cfg['FontSize']
+
+
Type
+

string

+
+
Default value
+

‘82%’

+
+
+
+

Deprecated since version 5.0.0: This setting was removed as the browser is more efficient, +thus no need of this option.

+
+

Font size to use, is applied in CSS.

+
+ +
+
+

Default queries

+
+
+$cfg['DefaultQueryTable']
+
+
Type
+

string

+
+
Default value
+

'SELECT * FROM @TABLE@ WHERE 1'

+
+
+
+ +
+
+$cfg['DefaultQueryDatabase']
+
+
Type
+

string

+
+
Default value
+

''

+
+
+

Default queries that will be displayed in query boxes when user didn’t +specify any. You can use standard 6.27 What format strings can I use?.

+
+ +
+
+

MySQL settings

+
+
+$cfg['DefaultFunctions']
+
+
Type
+

array

+
+
Default value
+

array('FUNC_CHAR' => '', 'FUNC_DATE' => '', 'FUNC_NUMBER' => '', 'FUNC_SPATIAL' => 'GeomFromText', 'FUNC_UUID' => 'UUID', 'first_timestamp' => 'NOW')

+
+
+

Functions selected by default when inserting/changing row, Functions +are defined for meta types as (FUNC_NUMBER, FUNC_DATE, FUNC_CHAR, +FUNC_SPATIAL, FUNC_UUID) and for first_timestamp, which is used +for first timestamp column in table.

+

Example configuration

+
$cfg['DefaultFunctions'] = [
+    'FUNC_CHAR' => '',
+    'FUNC_DATE' => '',
+    'FUNC_NUMBER' => '',
+    'FUNC_SPATIAL' => 'ST_GeomFromText',
+    'FUNC_UUID' => 'UUID',
+    'first_timestamp' => 'UTC_TIMESTAMP',
+];
+
+
+
+ +
+
+

Default options for Transformations

+
+
+$cfg['DefaultTransformations']
+
+
Type
+

array

+
+
Default value
+

An array with below listed key-values

+
+
+
+ +
+
+$cfg['DefaultTransformations']['Substring']
+
+
Type
+

array

+
+
Default value
+

array(0, ‘all’, ‘…’)

+
+
+
+ +
+
+$cfg['DefaultTransformations']['Bool2Text']
+
+
Type
+

array

+
+
Default value
+

array(‘T’, ‘F’)

+
+
+
+ +
+
+$cfg['DefaultTransformations']['External']
+
+
Type
+

array

+
+
Default value
+

array(0, ‘-f /dev/null -i -wrap -q’, 1, 1)

+
+
+
+ +
+
+$cfg['DefaultTransformations']['PreApPend']
+
+
Type
+

array

+
+
Default value
+

array(‘’, ‘’)

+
+
+
+ +
+
+$cfg['DefaultTransformations']['Hex']
+
+
Type
+

array

+
+
Default value
+

array(‘2’)

+
+
+
+ +
+
+$cfg['DefaultTransformations']['DateFormat']
+
+
Type
+

array

+
+
Default value
+

array(0, ‘’, ‘local’)

+
+
+
+ +
+
+$cfg['DefaultTransformations']['Inline']
+
+
Type
+

array

+
+
Default value
+

array(‘100’, 100)

+
+
+
+ +
+ +
+
Type
+

array

+
+
Default value
+

array(‘’, 100, 50)

+
+
+
+ +
+ +
+
Type
+

array

+
+
Default value
+

array(‘’, ‘’, ‘’)

+
+
+
+ +
+
+

Console settings

+
+

Note

+

These settings are mostly meant to be changed by user.

+
+
+
+$cfg['Console']['StartHistory']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Show query history at start

+
+ +
+
+$cfg['Console']['AlwaysExpand']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Always expand query messages

+
+ +
+
+$cfg['Console']['CurrentQuery']
+
+
Type
+

boolean

+
+
Default value
+

true

+
+
+

Show current browsing query

+
+ +
+
+$cfg['Console']['EnterExecutes']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Execute queries on Enter and insert new line with Shift+Enter

+
+ +
+
+$cfg['Console']['DarkTheme']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Switch to dark theme

+
+ +
+
+$cfg['Console']['Mode']
+
+
Type
+

string

+
+
Default value
+

‘info’

+
+
+

Console mode

+
+ +
+
+$cfg['Console']['Height']
+
+
Type
+

integer

+
+
Default value
+

92

+
+
+

Console height

+
+ +
+
+

Developer

+
+

Warning

+

These settings might have huge effect on performance or security.

+
+
+
+$cfg['environment']
+
+
Type
+

string

+
+
Default value
+

'production'

+
+
+

Sets the working environment.

+

This only needs to be changed when you are developing phpMyAdmin itself. +The development mode may display debug information in some places.

+

Possible values are 'production' or 'development'.

+
+ +
+
+$cfg['DBG']
+
+
Type
+

array

+
+
Default value
+

[]

+
+
+
+ +
+
+$cfg['DBG']['sql']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Enable logging queries and execution times to be +displayed in the console’s Debug SQL tab.

+
+ +
+
+$cfg['DBG']['sqllog']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Enable logging of queries and execution times to the syslog. +Requires $cfg['DBG']['sql'] to be enabled.

+
+ +
+
+$cfg['DBG']['demo']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Enable to let server present itself as demo server. +This is used for phpMyAdmin demo server.

+

It currently changes following behavior:

+
    +
  • There is welcome message on the main page.

  • +
  • There is footer information about demo server and used Git revision.

  • +
  • The setup script is enabled even with existing configuration.

  • +
  • The setup does not try to connect to the MySQL server.

  • +
+
+ +
+
+$cfg['DBG']['simple2fa']
+
+
Type
+

boolean

+
+
Default value
+

false

+
+
+

Can be used for testing two-factor authentication using Simple two-factor authentication.

+
+ +
+
+

Examples

+

See following configuration snippets for typical setups of phpMyAdmin.

+
+

Basic example

+

Example configuration file, which can be copied to config.inc.php to +get some core configuration layout; it is distributed with phpMyAdmin as +config.sample.inc.php. Please note that it does not contain all +configuration options, only the most frequently used ones.

+
<?php
+/**
+ * phpMyAdmin sample configuration, you can use it as base for
+ * manual configuration. For easier setup you can use setup/
+ *
+ * All directives are explained in documentation in the doc/ folder
+ * or at <https://docs.phpmyadmin.net/>.
+ */
+
+declare(strict_types=1);
+
+/**
+ * This is needed for cookie based authentication to encrypt password in
+ * cookie. Needs to be 32 chars long.
+ */
+$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
+
+/**
+ * Servers configuration
+ */
+$i = 0;
+
+/**
+ * First server
+ */
+$i++;
+/* Authentication type */
+$cfg['Servers'][$i]['auth_type'] = 'cookie';
+/* Server parameters */
+$cfg['Servers'][$i]['host'] = 'localhost';
+$cfg['Servers'][$i]['compress'] = false;
+$cfg['Servers'][$i]['AllowNoPassword'] = false;
+
+/**
+ * phpMyAdmin configuration storage settings.
+ */
+
+/* User used to manipulate with storage */
+// $cfg['Servers'][$i]['controlhost'] = '';
+// $cfg['Servers'][$i]['controlport'] = '';
+// $cfg['Servers'][$i]['controluser'] = 'pma';
+// $cfg['Servers'][$i]['controlpass'] = 'pmapass';
+
+/* Storage database and tables */
+// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
+// $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
+// $cfg['Servers'][$i]['relation'] = 'pma__relation';
+// $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
+// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
+// $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
+// $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
+// $cfg['Servers'][$i]['history'] = 'pma__history';
+// $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
+// $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
+// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
+// $cfg['Servers'][$i]['recent'] = 'pma__recent';
+// $cfg['Servers'][$i]['favorite'] = 'pma__favorite';
+// $cfg['Servers'][$i]['users'] = 'pma__users';
+// $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
+// $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
+// $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
+// $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
+// $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
+// $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
+
+/**
+ * End of servers configuration
+ */
+
+/**
+ * Directories for saving/loading files from server
+ */
+$cfg['UploadDir'] = '';
+$cfg['SaveDir'] = '';
+
+/**
+ * Whether to display icons or text or both icons and text in table row
+ * action segment. Value can be either of 'icons', 'text' or 'both'.
+ * default = 'both'
+ */
+//$cfg['RowActionType'] = 'icons';
+
+/**
+ * Defines whether a user should be displayed a "show all (records)"
+ * button in browse mode or not.
+ * default = false
+ */
+//$cfg['ShowAll'] = true;
+
+/**
+ * Number of rows displayed when browsing a result set. If the result
+ * set contains more rows, "Previous" and "Next".
+ * Possible values: 25, 50, 100, 250, 500
+ * default = 25
+ */
+//$cfg['MaxRows'] = 50;
+
+/**
+ * Disallow editing of binary fields
+ * valid values are:
+ *   false    allow editing
+ *   'blob'   allow editing except for BLOB fields
+ *   'noblob' disallow editing except for BLOB fields
+ *   'all'    disallow editing
+ * default = 'blob'
+ */
+//$cfg['ProtectBinary'] = false;
+
+/**
+ * Default language to use, if not browser-defined or user-defined
+ * (you find all languages in the locale folder)
+ * uncomment the desired line:
+ * default = 'en'
+ */
+//$cfg['DefaultLang'] = 'en';
+//$cfg['DefaultLang'] = 'de';
+
+/**
+ * How many columns should be used for table display of a database?
+ * (a value larger than 1 results in some information being hidden)
+ * default = 1
+ */
+//$cfg['PropertiesNumColumns'] = 2;
+
+/**
+ * Set to true if you want DB-based query history.If false, this utilizes
+ * JS-routines to display query history (lost by window close)
+ *
+ * This requires configuration storage enabled, see above.
+ * default = false
+ */
+//$cfg['QueryHistoryDB'] = true;
+
+/**
+ * When using DB-based query history, how many entries should be kept?
+ * default = 25
+ */
+//$cfg['QueryHistoryMax'] = 100;
+
+/**
+ * Whether or not to query the user before sending the error report to
+ * the phpMyAdmin team when a JavaScript error occurs
+ *
+ * Available options
+ * ('ask' | 'always' | 'never')
+ * default = 'ask'
+ */
+//$cfg['SendErrorReports'] = 'always';
+
+/**
+ * 'URLQueryEncryption' defines whether phpMyAdmin will encrypt sensitive data from the URL query string.
+ * 'URLQueryEncryptionSecretKey' is a 32 bytes long secret key used to encrypt/decrypt the URL query string.
+ */
+//$cfg['URLQueryEncryption'] = true;
+//$cfg['URLQueryEncryptionSecretKey'] = '';
+
+/**
+ * You can find more configuration options in the documentation
+ * in the doc/ folder or at <https://docs.phpmyadmin.net/>.
+ */
+
+
+
+

Warning

+

Don’t use the controluser ‘pma’ if it does not yet exist and don’t use ‘pmapass’ +as password.

+
+
+
+

Example for signon authentication

+

This example uses examples/signon.php to demonstrate usage of Signon authentication mode:

+
<?php
+$i = 0;
+$i++;
+$cfg['Servers'][$i]['auth_type']     = 'signon';
+$cfg['Servers'][$i]['SignonSession'] = 'SignonSession';
+$cfg['Servers'][$i]['SignonURL']     = 'examples/signon.php';
+
+
+
+
+

Example for IP address limited autologin

+

If you want to automatically login when accessing phpMyAdmin locally while asking +for a password when accessing remotely, you can achieve it using following snippet:

+
if ($_SERVER['REMOTE_ADDR'] === '127.0.0.1') {
+    $cfg['Servers'][$i]['auth_type'] = 'config';
+    $cfg['Servers'][$i]['user'] = 'root';
+    $cfg['Servers'][$i]['password'] = 'yourpassword';
+} else {
+    $cfg['Servers'][$i]['auth_type'] = 'cookie';
+}
+
+
+
+

Note

+

Filtering based on IP addresses isn’t reliable over the internet, use it +only for local address.

+
+
+
+

Example for using multiple MySQL servers

+

You can configure any number of servers using $cfg['Servers'], +following example shows two of them:

+
<?php
+$cfg['blowfish_secret'] = 'multiServerExample70518';
+// any string of your choice
+$i = 0;
+
+$i++; // server 1 :
+$cfg['Servers'][$i]['auth_type'] = 'cookie';
+$cfg['Servers'][$i]['verbose']   = 'no1';
+$cfg['Servers'][$i]['host']      = 'localhost';
+// more options for #1 ...
+
+$i++; // server 2 :
+$cfg['Servers'][$i]['auth_type'] = 'cookie';
+$cfg['Servers'][$i]['verbose']   = 'no2';
+$cfg['Servers'][$i]['host']      = 'remote.host.addr';//or ip:'10.9.8.1'
+// this server must allow remote clients, e.g., host 10.9.8.%
+// not only in mysql.host but also in the startup configuration
+// more options for #2 ...
+
+// end of server sections
+$cfg['ServerDefault'] = 0; // to choose the server on startup
+
+// further general options ...
+
+
+
+
+

Google Cloud SQL with SSL

+

To connect to Google Could SQL, you currently need to disable certificate +verification. This is caused by the certificate being issued for CN matching +your instance name, but you connect to an IP address and PHP tries to match +these two. With verification you end up with error message like:

+
Peer certificate CN=`api-project-851612429544:pmatest' did not match expected CN=`8.8.8.8'
+
+
+
+

Warning

+

With disabled verification your traffic is encrypted, but you’re open to +man in the middle attacks.

+
+

To connect phpMyAdmin to Google Cloud SQL using SSL download the client and +server certificates and tell phpMyAdmin to use them:

+
// IP address of your instance
+$cfg['Servers'][$i]['host'] = '8.8.8.8';
+// Use SSL for connection
+$cfg['Servers'][$i]['ssl'] = true;
+// Client secret key
+$cfg['Servers'][$i]['ssl_key'] = '../client-key.pem';
+// Client certificate
+$cfg['Servers'][$i]['ssl_cert'] = '../client-cert.pem';
+// Server certification authority
+$cfg['Servers'][$i]['ssl_ca'] = '../server-ca.pem';
+// Disable SSL verification (see above note)
+$cfg['Servers'][$i]['ssl_verify'] = false;
+
+
+ +
+
+

Amazon RDS Aurora with SSL

+

To connect phpMyAdmin to an Amazon RDS Aurora MySQL database instance using SSL, +download the CA server certificate and tell phpMyAdmin to use it:

+
// Address of your instance
+$cfg['Servers'][$i]['host'] = 'replace-me-custer-name.cluster-replace-me-id.replace-me-region.rds.amazonaws.com';
+// Use SSL for connection
+$cfg['Servers'][$i]['ssl'] = true;
+// You need to have the region CA file and the authority CA file (2019 edition CA for example) in the PEM bundle for it to work
+$cfg['Servers'][$i]['ssl_ca'] = '../rds-combined-ca-bundle.pem';
+// Enable SSL verification
+$cfg['Servers'][$i]['ssl_verify'] = true;
+
+
+ + +
+
+

reCaptcha using hCaptcha

+
$cfg['CaptchaApi'] = 'https://www.hcaptcha.com/1/api.js';
+$cfg['CaptchaCsp'] = 'https://hcaptcha.com https://*.hcaptcha.com';
+$cfg['CaptchaRequestParam'] = 'h-captcha';
+$cfg['CaptchaResponseParam'] = 'h-captcha-response';
+$cfg['CaptchaSiteVerifyURL'] = 'https://hcaptcha.com/siteverify';
+// This is the secret key from hCaptcha dashboard
+$cfg['CaptchaLoginPrivateKey'] = '0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
+// This is the site key from hCaptcha dashboard
+$cfg['CaptchaLoginPublicKey'] = 'xxx-xxx-xxx-xxx-xxxx';
+
+
+
+

See also

+

hCaptcha website

+
+ +
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/copyright.html b/Sources/php_script/script/phpMyAdmin/doc/html/copyright.html new file mode 100644 index 0000000..b631378 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/copyright.html @@ -0,0 +1,143 @@ + + + + + + + + Copyright — phpMyAdmin 5.2.0 documentation + + + + + + + + + + + + + + + + +
+
+
+
+ + + + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/faq.html b/Sources/php_script/script/phpMyAdmin/doc/html/faq.html new file mode 100644 index 0000000..7cc526e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/faq.html @@ -0,0 +1,2000 @@ + + + + + + + + FAQ - Frequently Asked Questions — phpMyAdmin 5.2.0 documentation + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

FAQ - Frequently Asked Questions

+

Please have a look at our Link section on the official +phpMyAdmin homepage for in-depth coverage of phpMyAdmin’s features and +or interface.

+
+

Server

+
+

1.1 My server is crashing each time a specific action is required or phpMyAdmin sends a blank page or a page full of cryptic characters to my browser, what can I do?

+

Try to set the $cfg['OBGzip'] directive to false in your +config.inc.php file and the zlib.output_compression directive to +Off in your php configuration file.

+
+
+

1.2 My Apache server crashes when using phpMyAdmin.

+

You should first try the latest versions of Apache (and possibly MySQL). If +your server keeps crashing, please ask for help in the various Apache support +groups.

+ +
+
+

1.3 (withdrawn).

+
+
+

1.4 Using phpMyAdmin on IIS, I’m displayed the error message: “The specified CGI application misbehaved by not returning a complete set of HTTP headers …”.

+

You just forgot to read the install.txt file from the PHP +distribution. Have a look at the last message in this PHP bug report #12061 from the official PHP bug +database.

+
+
+

1.5 Using phpMyAdmin on IIS, I’m facing crashes and/or many error messages with the HTTP.

+

This is a known problem with the PHP ISAPI filter: it’s not so stable. +Please use instead the cookie authentication mode.

+
+
+

1.6 I can’t use phpMyAdmin on PWS: nothing is displayed!

+

This seems to be a PWS bug. Filippo Simoncini found a workaround (at +this time there is no better fix): remove or comment the DOCTYPE +declarations (2 lines) from the scripts libraries/classes/Header.php +and index.php.

+
+
+

1.7 How can I gzip a dump or a CSV export? It does not seem to work.

+

This feature is based on the gzencode() +PHP function to be more independent of the platform (Unix/Windows, +Safe Mode or not, and so on). So, you must have Zlib support +(--with-zlib).

+
+
+

1.8 I cannot insert a text file in a table, and I get an error about safe mode being in effect.

+

Your uploaded file is saved by PHP in the “upload dir”, as defined in +php.ini by the variable upload_tmp_dir (usually the system +default is /tmp). We recommend the following setup for Apache +servers running in safe mode, to enable uploads of files while being +reasonably secure:

+
    +
  • create a separate directory for uploads: mkdir /tmp/php

  • +
  • give ownership to the Apache server’s user.group: chown +apache.apache /tmp/php

  • +
  • give proper permission: chmod 600 /tmp/php

  • +
  • put upload_tmp_dir = /tmp/php in php.ini

  • +
  • restart Apache

  • +
+
+
+

1.9 (withdrawn).

+
+
+

1.10 I’m having troubles when uploading files with phpMyAdmin running on a secure server. My browser is Internet Explorer and I’m using the Apache server.

+

As suggested by “Rob M” in the phpWizard forum, add this line to your +httpd.conf:

+
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
+
+
+

It seems to clear up many problems between Internet Explorer and SSL.

+
+
+

1.11 I get an ‘open_basedir restriction’ while uploading a file from the import tab.

+

Since version 2.2.4, phpMyAdmin supports servers with open_basedir +restrictions. However you need to create temporary directory and configure it +as $cfg['TempDir']. The uploaded files will be moved there, +and after execution of your SQL commands, removed.

+
+
+

1.12 I have lost my MySQL root password, what can I do?

+

phpMyAdmin does authenticate against MySQL server you’re using, so to recover +from phpMyAdmin password loss, you need to recover at MySQL level.

+

The MySQL manual explains how to reset the permissions.

+

If you are using MySQL server installed by your hosting provider, please +contact their support to recover the password for you.

+
+
+

1.13 (withdrawn).

+
+
+

1.14 (withdrawn).

+
+
+

1.15 I have problems with mysql.user column names.

+

In previous MySQL versions, the User and Password columns were +named user and password. Please modify your column names to +align with current standards.

+
+
+

1.16 I cannot upload big dump files (memory, HTTP or timeout problems).

+

Starting with version 2.7.0, the import engine has been re–written and +these problems should not occur. If possible, upgrade your phpMyAdmin +to the latest version to take advantage of the new import features.

+

The first things to check (or ask your host provider to check) are the values +of max_execution_time, upload_max_filesize, memory_limit and +post_max_size in the php.ini configuration file. All of these +settings limit the maximum size of data that can be submitted and handled by +PHP. Please note that post_max_size needs to be larger than +upload_max_filesize. There exist several workarounds if your upload is too +big or your hosting provider is unwilling to change the settings:

+
    +
  • Look at the $cfg['UploadDir'] feature. This allows one to upload a file to the server +via scp, FTP, or your favorite file transfer method. PhpMyAdmin is +then able to import the files from the temporary directory. More +information is available in the Configuration of this document.

  • +
  • Using a utility (such as BigDump) to split the files before +uploading. We cannot support this or any third party applications, but +are aware of users having success with it.

  • +
  • If you have shell (command line) access, use MySQL to import the files +directly. You can do this by issuing the “source” command from within +MySQL:

    +
    source filename.sql;
    +
    +
    +
  • +
+
+
+

1.17 Which Database versions does phpMyAdmin support?

+

For MySQL, versions 5.5 and newer are supported. +For older MySQL versions, our Downloads page offers older phpMyAdmin versions +(which may have become unsupported).

+

For MariaDB, versions 5.5 and newer are supported.

+
+
+

1.17a I cannot connect to the MySQL server. It always returns the error message, “Client does not support authentication protocol requested by server; consider upgrading MySQL client”

+

You tried to access MySQL with an old MySQL client library. The +version of your MySQL client library can be checked in your phpinfo() +output. In general, it should have at least the same minor version as +your server - as mentioned in 1.17 Which Database versions does phpMyAdmin support?. This problem is +generally caused by using MySQL version 4.1 or newer. MySQL changed +the authentication hash and your PHP is trying to use the old method. +The proper solution is to use the mysqli extension with the proper client library to match +your MySQL installation. More +information (and several workarounds) are located in the MySQL +Documentation.

+
+
+

1.18 (withdrawn).

+
+
+

1.19 I can’t run the “display relations” feature because the script seems not to know the font face I’m using!

+

The TCPDF library we’re using for this feature requires some special +files to use font faces. Please refers to the TCPDF manual to build these files.

+
+
+

1.20 I receive an error about missing mysqli and mysql extensions.

+

To connect to a MySQL server, PHP needs a set of MySQL functions +called “MySQL extension”. This extension may be part of the PHP +distribution (compiled-in), otherwise it needs to be loaded +dynamically. Its name is probably mysqli.so or php_mysqli.dll. +phpMyAdmin tried to load the extension but failed. Usually, the +problem is solved by installing a software package called “PHP-MySQL” +or something similar.

+

There was two interfaces PHP provided as MySQL extensions - mysql +and mysqli. The mysql interface was removed in PHP 7.0.

+

This problem can be also caused by wrong paths in the php.ini or using +wrong php.ini.

+

Make sure that the extension files do exist in the folder which the +extension_dir points to and that the corresponding lines in your +php.ini are not commented out (you can use phpinfo() to check +current setup):

+
[PHP]
+
+; Directory in which the loadable extensions (modules) reside.
+extension_dir = "C:/Apache2/modules/php/ext"
+
+
+

The php.ini can be loaded from several locations (especially on +Windows), so please check you’re updating the correct one. If using Apache, you +can tell it to use specific path for this file using PHPIniDir directive:

+
LoadModule php7_module "C:/php7/php7apache2_4.dll"
+<IfModule php7_module>
+    PHPIniDir "C:/php7"
+    <Location>
+       AddType text/html .php
+       AddHandler application/x-httpd-php .php
+    </Location>
+</IfModule>
+
+
+

In some rare cases this problem can be also caused by other extensions loaded +in PHP which prevent MySQL extensions to be loaded. If anything else fails, you +can try commenting out extensions for other databases from php.ini.

+
+ +
+

1.22 I don’t see the “Location of text file” field, so I cannot upload.

+

This is most likely because in php.ini, your file_uploads +parameter is not set to “on”.

+
+
+

1.23 I’m running MySQL on a Win32 machine. Each time I create a new table the table and column names are changed to lowercase!

+

This happens because the MySQL directive lower_case_table_names +defaults to 1 (ON) in the Win32 version of MySQL. You can change +this behavior by simply changing the directive to 0 (OFF): Just +edit your my.ini file that should be located in your Windows +directory and add the following line to the group [mysqld]:

+
set-variable = lower_case_table_names=0
+
+
+
+

Note

+

Forcing this variable to 0 with –lower-case-table-names=0 on a +case-insensitive filesystem and access MyISAM tablenames using different +lettercases, index corruption may result.

+
+

Next, save the file and restart the MySQL service. You can always +check the value of this directive using the query

+
SHOW VARIABLES LIKE 'lower_case_table_names';
+
+
+ +
+
+

1.24 (withdrawn).

+
+
+

1.25 I am running Apache with mod_gzip-1.3.26.1a on Windows XP, and I get problems, such as undefined variables when I run a SQL query.

+

A tip from Jose Fandos: put a comment on the following two lines in +httpd.conf, like this:

+
# mod_gzip_item_include file \.php$
+# mod_gzip_item_include mime "application/x-httpd-php.*"
+
+
+

as this version of mod_gzip on Apache (Windows) has problems handling +PHP scripts. Of course you have to restart Apache.

+
+
+

1.26 I just installed phpMyAdmin in my document root of IIS but I get the error “No input file specified” when trying to run phpMyAdmin.

+

This is a permission problem. Right-click on the phpmyadmin folder and +choose properties. Under the tab Security, click on “Add” and select +the user “IUSR_machine” from the list. Now set their permissions and it +should work.

+
+
+

1.27 I get empty page when I want to view huge page (eg. db_structure.php with plenty of tables).

+

This was caused by a PHP bug that occur when +GZIP output buffering is enabled. If you turn off it (by +$cfg['OBGzip'] in config.inc.php), it should work. +This bug will has been fixed in PHP 5.0.0.

+
+
+

1.28 My MySQL server sometimes refuses queries and returns the message ‘Errorcode: 13’. What does this mean?

+

This can happen due to a MySQL bug when having database / table names +with upper case characters although lower_case_table_names is +set to 1. To fix this, turn off this directive, convert all database +and table names to lower case and turn it on again. Alternatively, +there’s a bug-fix available starting with MySQL 3.23.56 / +4.0.11-gamma.

+
+
+

1.29 When I create a table or modify a column, I get an error and the columns are duplicated.

+

It is possible to configure Apache in such a way that PHP has problems +interpreting .php files.

+

The problems occur when two different (and conflicting) set of +directives are used:

+
SetOutputFilter PHP
+SetInputFilter PHP
+
+
+

and

+
AddType application/x-httpd-php .php
+
+
+

In the case we saw, one set of directives was in +/etc/httpd/conf/httpd.conf, while the other set was in +/etc/httpd/conf/addon-modules/php.conf. The recommended way is +with AddType, so just comment out the first set of lines and +restart Apache:

+
#SetOutputFilter PHP
+#SetInputFilter PHP
+
+
+
+
+

1.30 I get the error “navigation.php: Missing hash”.

+

This problem is known to happen when the server is running Turck +MMCache but upgrading MMCache to version 2.3.21 solves the problem.

+
+
+

1.31 Which PHP versions does phpMyAdmin support?

+

Since release 4.5, phpMyAdmin supports only PHP 5.5 and newer. Since release +4.1 phpMyAdmin supports only PHP 5.3 and newer. For PHP 5.2 you can use 4.0.x +releases.

+

PHP 7 is supported since phpMyAdmin 4.6, PHP 7.1 is supported since 4.6.5, +PHP 7.2 is supported since 4.7.4.

+

HHVM is supported up to phpMyAdmin 4.8.

+

Since release 5.0, phpMyAdmin supports only PHP 7.1 and newer. +Since release 5.2, phpMyAdmin supports only PHP 7.2 and newer.

+
+
+

1.32 Can I use HTTP authentication with IIS?

+

Yes. This procedure was tested with phpMyAdmin 2.6.1, PHP 4.3.9 in +ISAPI mode under IIS 5.1.

+
    +
  1. In your php.ini file, set cgi.rfc2616_headers = 0

  2. +
  3. In Web Site Properties -> File/Directory Security -> Anonymous +Access dialog box, check the Anonymous access checkbox and +uncheck any other checkboxes (i.e. uncheck Basic authentication, +Integrated Windows authentication, and Digest if it’s +enabled.) Click OK.

  4. +
  5. In Custom Errors, select the range of 401;1 through 401;5 +and click the Set to Default button.

  6. +
+
+

See also

+

RFC 2616

+
+
+
+

1.33 (withdrawn).

+
+
+

1.34 Can I directly access a database or table pages?

+

Yes. Out of the box, you can use a URL like +http://server/phpMyAdmin/index.php?server=X&db=database&table=table&target=script. +For server you can use the server number +which refers to the numeric host index (from $i) in +config.inc.php. The table and script parts are optional.

+

If you want a URL like +http://server/phpMyAdmin/database[/table][/script], you need to do some additional configuration. The following +lines apply only for the Apache web server. +First, make sure that you have enabled some features within the Apache global +configuration. You need Options SymLinksIfOwnerMatch and AllowOverride +FileInfo enabled for directory where phpMyAdmin is installed and you +need mod_rewrite to be enabled. Then you just need to create the +following .htaccess file in root folder of phpMyAdmin installation (don’t +forget to change directory name inside of it):

+
RewriteEngine On
+RewriteBase /path_to_phpMyAdmin
+RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&table=$2&target=$3 [R]
+RewriteRule ^([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&target=$2 [R]
+RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ index.php?db=$1&table=$2 [R]
+RewriteRule ^([a-zA-Z0-9_]+)$ index.php?db=$1 [R]
+
+
+ +
+

Changed in version 5.1.0: Support for using the target parameter was removed in phpMyAdmin 5.1.0. +Use the route parameter instead.

+
+
+
+

1.35 Can I use HTTP authentication with Apache CGI?

+

Yes. However you need to pass authentication variable to CGI using +following rewrite rule:

+
RewriteEngine On
+RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
+
+
+
+
+

1.36 I get an error “500 Internal Server Error”.

+

There can be many explanations to this and a look at your server’s +error log file might give a clue.

+
+ +
+

1.38 Can I use phpMyAdmin on a server on which Suhosin is enabled?

+

Yes but the default configuration values of Suhosin are known to cause +problems with some operations, for example editing a table with many +columns and no primary key or with textual primary key.

+

Suhosin configuration might lead to malfunction in some cases and it +can not be fully avoided as phpMyAdmin is kind of application which +needs to transfer big amounts of columns in single HTTP request, what +is something what Suhosin tries to prevent. Generally all +suhosin.request.*, suhosin.post.* and suhosin.get.* +directives can have negative effect on phpMyAdmin usability. You can +always find in your error logs which limit did cause dropping of +variable, so you can diagnose the problem and adjust matching +configuration variable.

+

The default values for most Suhosin configuration options will work in +most scenarios, however you might want to adjust at least following +parameters:

+ +

To further improve security, we also recommend these modifications:

+ +

You can also disable the warning using the $cfg['SuhosinDisableWarning'].

+
+
+

1.39 When I try to connect via https, I can log in, but then my connection is redirected back to http. What can cause this behavior?

+

This is caused by the fact that PHP scripts have no knowledge that the site is +using https. Depending on used webserver, you should configure it to let PHP +know about URL and scheme used to access it.

+

For example in Apache ensure that you have enabled SSLOptions and +StdEnvVars in the configuration.

+ +
+ +
+

1.41 When I view a database and ask to see its privileges, I get an error about an unknown column.

+

The MySQL server’s privilege tables are not up to date, you need to +run the mysql_upgrade command on the server.

+
+
+

1.42 How can I prevent robots from accessing phpMyAdmin?

+

You can add various rules to .htaccess to filter access based on user agent +field. This is quite easy to circumvent, but could prevent at least +some robots accessing your installation.

+
RewriteEngine on
+
+# Allow only GET and POST verbs
+RewriteCond %{REQUEST_METHOD} !^(GET|POST)$ [NC,OR]
+
+# Ban Typical Vulnerability Scanners and others
+# Kick out Script Kiddies
+RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR]
+RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|wkito|pikto|scan|acunetix).* [NC,OR]
+RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR]
+
+# Ban Search Engines, Crawlers to your administrative panel
+# No reasons to access from bots
+# Ultimately Better than the useless robots.txt
+# Did google respect robots.txt?
+# Try google: intitle:phpMyAdmin intext:"Welcome to phpMyAdmin *.*.*" intext:"Log in" -wiki -forum -forums -questions intext:"Cookies must be enabled"
+RewriteCond %{HTTP_USER_AGENT} ^.*(AdsBot-Google|ia_archiver|Scooter|Ask.Jeeves|Baiduspider|Exabot|FAST.Enterprise.Crawler|FAST-WebCrawler|www\.neomo\.de|Gigabot|Mediapartners-Google|Google.Desktop|Feedfetcher-Google|Googlebot|heise-IT-Markt-Crawler|heritrix|ibm.com\cs/crawler|ICCrawler|ichiro|MJ12bot|MetagerBot|msnbot-NewsBlogs|msnbot|msnbot-media|NG-Search|lucene.apache.org|NutchCVS|OmniExplorer_Bot|online.link.validator|psbot0|Seekbot|Sensis.Web.Crawler|SEO.search.Crawler|Seoma.\[SEO.Crawler\]|SEOsearch|Snappy|www.urltrends.com|www.tkl.iis.u-tokyo.ac.jp/~crawler|SynooBot|crawleradmin.t-info@telekom.de|TurnitinBot|voyager|W3.SiteSearch.Crawler|W3C-checklink|W3C_Validator|www.WISEnutbot.com|yacybot|Yahoo-MMCrawler|Yahoo\!.DE.Slurp|Yahoo\!.Slurp|YahooSeeker).* [NC]
+RewriteRule .* - [F]
+
+
+
+
+

1.43 Why can’t I display the structure of my table containing hundreds of columns?

+

Because your PHP’s memory_limit is too low; adjust it in php.ini.

+
+
+

1.44 How can I reduce the installed size of phpMyAdmin on disk?

+

Some users have requested to be able to reduce the size of the phpMyAdmin installation. +This is not recommended and could lead to confusion over missing features, but can be done. +A list of files and corresponding functionality which degrade gracefully when removed include:

+
    +
  • ./vendor/tecnickcom/tcpdf folder (exporting to PDF)

  • +
  • ./locale/ folder, or unused subfolders (interface translations)

  • +
  • Any unused themes in ./themes/

  • +
  • ./js/vendor/jquery/src/ (included for licensing reasons)

  • +
  • ./js/line_counts.php (removed in phpMyAdmin 4.8)

  • +
  • ./doc/ (documentation)

  • +
  • ./setup/ (setup script)

  • +
  • ./examples/

  • +
  • ./sql/ (SQL scripts to configure advanced functionality)

  • +
  • ./js/vendor/openlayers/ (GIS visualization)

  • +
+
+
+

1.45 I get an error message about unknown authentication method caching_sha2_password when trying to log in

+

When logging in using MySQL version 8 or newer, you may encounter an error message like this:

+
+

mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]

+

mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client

+
+

This error is because of a version compatibility problem between PHP and MySQL. The MySQL project introduced a new authentication +method (our tests show this began with version 8.0.11) however PHP did not include the ability to use that authentication method. +PHP reports that this was fixed in PHP version 7.4.

+

Users experiencing this are encouraged to upgrade their PHP installation, however a workaround exists. Your MySQL user account +can be set to use the older authentication with a command such as

+
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
+
+
+ +
+
+
+

Configuration

+
+

2.1 The error message “Warning: Cannot add header information - headers already sent by …” is displayed, what’s the problem?

+

Edit your config.inc.php file and ensure there is nothing (I.E. no +blank lines, no spaces, no characters…) neither before the <?php tag at +the beginning, neither after the ?> tag at the end.

+
+
+

2.2 phpMyAdmin can’t connect to MySQL. What’s wrong?

+

Either there is an error with your PHP setup or your username/password +is wrong. Try to make a small script which uses mysql_connect and see +if it works. If it doesn’t, it may be you haven’t even compiled MySQL +support into PHP.

+
+
+

2.3 The error message “Warning: MySQL Connection Failed: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (111) …” is displayed. What can I do?

+

The error message can also be: Error #2002 - The server is not +responding (or the local MySQL server’s socket is not correctly configured).

+

First, you need to determine what socket is being used by MySQL. To do this, +connect to your server and go to the MySQL bin directory. In this directory +there should be a file named mysqladmin. Type ./mysqladmin variables, and +this should give you a bunch of info about your MySQL server, including the +socket (/tmp/mysql.sock, for example). You can also ask your ISP for the +connection info or, if you’re hosting your own, connect from the ‘mysql’ +command-line client and type ‘status’ to get the connection type and socket or +port number.

+

Then, you need to tell PHP to use this socket. You can do this for all PHP in +the php.ini or for phpMyAdmin only in the config.inc.php. For +example: $cfg['Servers'][$i]['socket'] Please also make sure +that the permissions of this file allow to be readable by your webserver.

+

On my RedHat-Box the socket of MySQL is /var/lib/mysql/mysql.sock. +In your php.ini you will find a line

+
mysql.default_socket = /tmp/mysql.sock
+
+
+

change it to

+
mysql.default_socket = /var/lib/mysql/mysql.sock
+
+
+

Then restart apache and it will work.

+

Have also a look at the corresponding section of the MySQL +documentation.

+
+
+

2.4 Nothing is displayed by my browser when I try to run phpMyAdmin, what can I do?

+

Try to set the $cfg['OBGzip'] directive to false in the phpMyAdmin configuration +file. It helps sometime. Also have a look at your PHP version number: +if it contains “b” or “alpha” it means you’re running a testing +version of PHP. That’s not a so good idea, please upgrade to a plain +revision.

+
+ +
+

2.6 I get an “Access denied for user: ‘root@localhost’ (Using password: YES)”-error when trying to access a MySQL-Server on a host which is port-forwarded for my localhost.

+

When you are using a port on your localhost, which you redirect via +port-forwarding to another host, MySQL is not resolving the localhost +as expected. Erik Wasser explains: The solution is: if your host is +“localhost” MySQL (the command line tool mysql as well) always +tries to use the socket connection for speeding up things. And that +doesn’t work in this configuration with port forwarding. If you enter +“127.0.0.1” as hostname, everything is right and MySQL uses the +TCP connection.

+
+
+

2.7 Using and creating themes

+

See Custom Themes.

+
+
+

2.8 I get “Missing parameters” errors, what can I do?

+

Here are a few points to check:

+
    +
  • In config.inc.php, try to leave the $cfg['PmaAbsoluteUri'] directive empty. See also +4.7 Authentication window is displayed more than once, why?.

  • +
  • Maybe you have a broken PHP installation or you need to upgrade your +Zend Optimizer. See <https://bugs.php.net/bug.php?id=31134>.

  • +
  • If you are using Hardened PHP with the ini directive +varfilter.max_request_variables set to the default (200) or +another low value, you could get this error if your table has a high +number of columns. Adjust this setting accordingly. (Thanks to Klaus +Dorninger for the hint).

  • +
  • In the php.ini directive arg_separator.input, a value of “;” +will cause this error. Replace it with “&;”.

  • +
  • If you are using Suhosin, you +might want to increase request limits.

  • +
  • The directory specified in the php.ini directive +session.save_path does not exist or is read-only (this can be caused +by bug in the PHP installer).

  • +
+
+
+

2.9 Seeing an upload progress bar

+

To be able to see a progress bar during your uploads, your server must +have the uploadprogress extension, and +you must be running PHP 5.4.0 or higher. Moreover, the JSON extension +has to be enabled in your PHP.

+

If using PHP 5.4.0 or higher, you must set +session.upload_progress.enabled to 1 in your php.ini. However, +starting from phpMyAdmin version 4.0.4, session-based upload progress has +been temporarily deactivated due to its problematic behavior.

+
+
+
+

Known limitations

+
+

3.1 When using HTTP authentication, a user who logged out can not log in again in with the same nick.

+

This is related to the authentication mechanism (protocol) used by +phpMyAdmin. To bypass this problem: just close all the opened browser +windows and then go back to phpMyAdmin. You should be able to log in +again.

+
+
+

3.2 When dumping a large table in compressed mode, I get a memory limit error or a time limit error.

+

Compressed dumps are built in memory and because of this are limited +to php’s memory limit. For gzip/bzip2 exports this can be overcome +since 2.5.4 using $cfg['CompressOnFly'] (enabled by default). +zip exports can not be handled this way, so if you need zip files for larger +dump, you have to use another way.

+
+
+

3.3 With InnoDB tables, I lose foreign key relationships when I rename a table or a column.

+

This is an InnoDB bug, see <https://bugs.mysql.com/bug.php?id=21704>.

+
+
+

3.4 I am unable to import dumps I created with the mysqldump tool bundled with the MySQL server distribution.

+

The problem is that older versions of mysqldump created invalid +comments like this:

+
-- MySQL dump 8.22
+--
+-- Host: localhost Database: database
+---------------------------------------------------------
+-- Server version 3.23.54
+
+
+

The invalid part of the code is the horizontal line made of dashes +that appears once in every dump created with mysqldump. If you want to +run your dump you have to turn it into valid MySQL. This means, you +have to add a whitespace after the first two dashes of the line or add +a # before it: -- ------------------------------------------------------- or +#---------------------------------------------------------

+
+
+

3.5 When using nested folders, multiple hierarchies are displayed in a wrong manner.

+

Please note that you should not use the separating string multiple +times without any characters between them, or at the beginning/end of +your table name. If you have to, think about using another +TableSeparator or disabling that feature.

+ +
+
+

3.6 (withdrawn).

+
+
+

3.7 I have table with many (100+) columns and when I try to browse table I get series of errors like “Warning: unable to parse url”. How can this be fixed?

+

Your table neither have a primary key nor an unique key, so we must +use a long expression to identify this row. This causes problems to +parse_url function. The workaround is to create a primary key +or unique key.

+
+
+

3.8 I cannot use (clickable) HTML-forms in columns where I put a MIME-Transformation onto!

+

Due to a surrounding form-container (for multi-row delete checkboxes), +no nested forms can be put inside the table where phpMyAdmin displays +the results. You can, however, use any form inside of a table if keep +the parent form-container with the target to tbl_row_delete.php and +just put your own input-elements inside. If you use a custom submit +input field, the form will submit itself to the displaying page again, +where you can validate the $HTTP_POST_VARS in a transformation. For +a tutorial on how to effectively use transformations, see our Link +section on the +official phpMyAdmin-homepage.

+
+
+

3.9 I get error messages when using “–sql_mode=ANSI” for the MySQL server.

+

When MySQL is running in ANSI-compatibility mode, there are some major +differences in how SQL is structured (see +<https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html>). Most important of all, the +quote-character (“) is interpreted as an identifier quote character and not as +a string quote character, which makes many internal phpMyAdmin operations into +invalid SQL statements. There is no +workaround to this behaviour. News to this item will be posted in issue +#7383.

+
+
+

3.10 Homonyms and no primary key: When the results of a SELECT display more that one column with the same value (for example SELECT lastname from employees where firstname like 'A%' and two “Smith” values are displayed), if I click Edit I cannot be sure that I am editing the intended row.

+

Please make sure that your table has a primary key, so that phpMyAdmin +can use it for the Edit and Delete links.

+
+
+

3.11 The number of rows for InnoDB tables is not correct.

+

phpMyAdmin uses a quick method to get the row count, and this method only +returns an approximate count in the case of InnoDB tables. See +$cfg['MaxExactCount'] for a way to modify those results, but +this could have a serious impact on performance. +However, one can easily replace the approximate row count with exact count by +simply clicking on the approximate count. This can also be done for all tables +at once by clicking on the rows sum displayed at the bottom.

+
+

See also

+

$cfg['MaxExactCount']

+
+
+
+

3.12 (withdrawn).

+
+
+

3.13 I get an error when entering USE followed by a db name containing an hyphen.

+

The tests I have made with MySQL 5.1.49 shows that the API does not +accept this syntax for the USE command.

+
+
+

3.14 I am not able to browse a table when I don’t have the right to SELECT one of the columns.

+

This has been a known limitation of phpMyAdmin since the beginning and +it’s not likely to be solved in the future.

+
+
+

3.15 (withdrawn).

+
+
+

3.16 (withdrawn).

+
+
+

3.17 (withdrawn).

+
+
+

3.18 When I import a CSV file that contains multiple tables, they are lumped together into a single table.

+

There is no reliable way to differentiate tables in CSV format. For the +time being, you will have to break apart CSV files containing multiple +tables.

+
+
+

3.19 When I import a file and have phpMyAdmin determine the appropriate data structure it only uses int, decimal, and varchar types.

+

Currently, the import type-detection system can only assign these +MySQL types to columns. In future, more will likely be added but for +the time being you will have to edit the structure to your liking +post-import. Also, you should note the fact that phpMyAdmin will use +the size of the largest item in any given column as the column size +for the appropriate type. If you know you will be adding larger items +to that column then you should manually adjust the column sizes +accordingly. This is done for the sake of efficiency.

+
+
+

3.20 After upgrading, some bookmarks are gone or their content cannot be shown.

+

At some point, the character set used to store bookmark content has changed. +It’s better to recreate your bookmark from the newer phpMyAdmin version.

+
+
+

3.21 I am unable to log in with a username containing unicode characters such as á.

+

This can happen if MySQL server is not configured to use utf-8 as default +charset. This is a limitation of how PHP and the MySQL server interact; there +is no way for PHP to set the charset before authenticating.

+ +
+
+
+

ISPs, multi-user installations

+
+

4.1 I’m an ISP. Can I setup one central copy of phpMyAdmin or do I need to install it for each customer?

+

Since version 2.0.3, you can setup a central copy of phpMyAdmin for all your +users. The development of this feature was kindly sponsored by NetCologne GmbH. +This requires a properly setup MySQL user management and phpMyAdmin +HTTP or cookie authentication.

+ +
+
+

4.2 What’s the preferred way of making phpMyAdmin secure against evil access?

+

This depends on your system. If you’re running a server which cannot be +accessed by other people, it’s sufficient to use the directory protection +bundled with your webserver (with Apache you can use .htaccess files, +for example). If other people have telnet access to your server, you should use +phpMyAdmin’s HTTP or cookie authentication features.

+

Suggestions:

+
    +
  • Your config.inc.php file should be chmod 660.

  • +
  • All your phpMyAdmin files should be chown -R phpmy.apache, where phpmy +is a user whose password is only known to you, and apache is the group +under which Apache runs.

  • +
  • Follow security recommendations for PHP and your webserver.

  • +
+
+
+

4.3 I get errors about not being able to include a file in /lang or in /libraries.

+

Check php.ini, or ask your sysadmin to check it. The +include_path must contain “.” somewhere in it, and +open_basedir, if used, must contain “.” and “./lang” to allow +normal operation of phpMyAdmin.

+
+
+

4.4 phpMyAdmin always gives “Access denied” when using HTTP authentication.

+

This could happen for several reasons:

+ +
+
+

4.5 Is it possible to let users create their own databases?

+

Starting with 2.2.5, in the user management page, you can enter a +wildcard database name for a user (for example “joe%”), and put the +privileges you want. For example, adding SELECT, INSERT, UPDATE, +DELETE, CREATE, DROP, INDEX, ALTER would let a user create/manage +their database(s).

+
+
+

4.6 How can I use the Host-based authentication additions?

+

If you have existing rules from an old .htaccess file, you can take them and +add a username between the 'deny'/'allow' and 'from' +strings. Using the username wildcard of '%' would be a major +benefit here if your installation is suited to using it. Then you can +just add those updated lines into the +$cfg['Servers'][$i]['AllowDeny']['rules'] array.

+

If you want a pre-made sample, you can try this fragment. It stops the +‘root’ user from logging in from any networks other than the private +network IP blocks.

+
//block root from logging in except from the private networks
+$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
+$cfg['Servers'][$i]['AllowDeny']['rules'] = [
+    'deny root from all',
+    'allow root from localhost',
+    'allow root from 10.0.0.0/8',
+    'allow root from 192.168.0.0/16',
+    'allow root from 172.16.0.0/12',
+];
+
+
+
+
+

4.7 Authentication window is displayed more than once, why?

+

This happens if you are using a URL to start phpMyAdmin which is +different than the one set in your $cfg['PmaAbsoluteUri']. For +example, a missing “www”, or entering with an IP address while a domain +name is defined in the config file.

+
+
+

4.8 Which parameters can I use in the URL that starts phpMyAdmin?

+

When starting phpMyAdmin, you can use the db +and server parameters. This last one can contain +either the numeric host index (from $i of the configuration file) +or one of the host names present in the configuration file.

+

For example, to jump directly to a particular database, a URL can be constructed as +https://example.com/phpmyadmin/?db=sakila.

+ +
+

Changed in version 4.9.0: Support for using the pma_username and pma_password parameters was removed +in phpMyAdmin 4.9.0 (see PMASA-2019-4).

+
+
+
+
+

Browsers or client OS

+
+

5.1 I get an out of memory error, and my controls are non-functional, when trying to create a table with more than 14 columns.

+

We could reproduce this problem only under Win98/98SE. Testing under +WinNT4 or Win2K, we could easily create more than 60 columns. A +workaround is to create a smaller number of columns, then come back to +your table properties and add the other columns.

+
+
+

5.2 With Xitami 2.5b4, phpMyAdmin won’t process form fields.

+

This is not a phpMyAdmin problem but a Xitami known bug: you’ll face +it with each script/website that use forms. Upgrade or downgrade your +Xitami server.

+
+
+

5.3 I have problems dumping tables with Konqueror (phpMyAdmin 2.2.2).

+

With Konqueror 2.1.1: plain dumps, zip and gzip dumps work ok, except +that the proposed file name for the dump is always ‘tbl_dump.php’. +The bzip2 dumps don’t seem to work. With Konqueror 2.2.1: plain dumps +work; zip dumps are placed into the user’s temporary directory, so +they must be moved before closing Konqueror, or else they disappear. +gzip dumps give an error message. Testing needs to be done for +Konqueror 2.2.2.

+
+ +
+

5.5 (withdrawn).

+
+
+

5.6 (withdrawn).

+
+
+

5.7 I refresh (reload) my browser, and come back to the welcome page.

+

Some browsers support right-clicking into the frame you want to +refresh, just do this in the right frame.

+
+
+

5.8 With Mozilla 0.9.7 I have problems sending a query modified in the query box.

+

Looks like a Mozilla bug: 0.9.6 was OK. We will keep an eye on future +Mozilla versions.

+
+
+

5.9 With Mozilla 0.9.? to 1.0 and Netscape 7.0-PR1 I can’t type a whitespace in the SQL-Query edit area: the page scrolls down.

+

This is a Mozilla bug (see bug #26882 at BugZilla).

+
+
+

5.10 (withdrawn).

+
+
+

5.11 Extended-ASCII characters like German umlauts are displayed wrong.

+

Please ensure that you have set your browser’s character set to the +one of the language file you have selected on phpMyAdmin’s start page. +Alternatively, you can try the auto detection mode that is supported +by the recent versions of the most browsers.

+
+
+

5.12 Mac OS X Safari browser changes special characters to “?”.

+

This issue has been reported by a macOS user, who adds that Chimera, +Netscape and Mozilla do not have this problem.

+
+
+

5.13 (withdrawn)

+
+
+

5.14 (withdrawn)

+
+
+

5.15 (withdrawn)

+
+
+

5.16 With Internet Explorer, I get “Access is denied” Javascript errors. Or I cannot make phpMyAdmin work under Windows.

+

Please check the following points:

+
    +
  • Maybe you have defined your $cfg['PmaAbsoluteUri'] setting in +config.inc.php to an IP address and you are starting phpMyAdmin +with a URL containing a domain name, or the reverse situation.

  • +
  • Security settings in IE and/or Microsoft Security Center are too high, +thus blocking scripts execution.

  • +
  • The Windows Firewall is blocking Apache and MySQL. You must allow +HTTP ports (80 or 443) and MySQL +port (usually 3306) in the “in” and “out” directions.

  • +
+
+
+

5.17 With Firefox, I cannot delete rows of data or drop a database.

+

Many users have confirmed that the Tabbrowser Extensions plugin they +installed in their Firefox is causing the problem.

+
+
+

5.18 (withdrawn)

+
+
+

5.19 I get JavaScript errors in my browser.

+

Issues have been reported with some combinations of browser +extensions. To troubleshoot, disable all extensions then clear your +browser cache to see if the problem goes away.

+
+
+

5.20 I get errors about violating Content Security Policy.

+

If you see errors like:

+
Refused to apply inline style because it violates the following Content Security Policy directive
+
+
+

This is usually caused by some software, which wrongly rewrites +Content Security Policy headers. Usually this is caused by +antivirus proxy or browser addons which are causing such errors.

+

If you see these errors, try disabling the HTTP proxy in antivirus or disable +the Content Security Policy rewriting in it. If that doesn’t +help, try disabling browser extensions.

+

Alternatively it can be also server configuration issue (if the webserver is +configured to emit Content Security Policy headers, they can +override the ones from phpMyAdmin).

+

Programs known to cause these kind of errors:

+
    +
  • Kaspersky Internet Security

  • +
+
+
+

5.21 I get errors about potentially unsafe operation when browsing table or executing SQL query.

+

If you see errors like:

+
A potentially unsafe operation has been detected in your request to this site.
+
+
+

This is usually caused by web application firewall doing requests filtering. It +tries to prevent SQL injection, however phpMyAdmin is tool designed to execute +SQL queries, thus it makes it unusable.

+

Please allow phpMyAdmin scripts from the web application firewall settings +or disable it completely for phpMyAdmin path.

+

Programs known to cause these kind of errors:

+
    +
  • Wordfence Web Application Firewall

  • +
+
+
+
+

Using phpMyAdmin

+
+

6.1 I can’t insert new rows into a table / I can’t create a table - MySQL brings up a SQL error.

+

Examine the SQL error with care. +Often the problem is caused by specifying a wrong column-type. Common +errors include:

+
    +
  • Using VARCHAR without a size argument

  • +
  • Using TEXT or BLOB with a size argument

  • +
+

Also, look at the syntax chapter in the MySQL manual to confirm that +your syntax is correct.

+
+
+

6.2 When I create a table, I set an index for two columns and phpMyAdmin generates only one index with those two columns.

+

This is the way to create a multi-columns index. If you want two +indexes, create the first one when creating the table, save, then +display the table properties and click the Index link to create the +other index.

+
+
+

6.3 How can I insert a null value into my table?

+

Since version 2.2.3, you have a checkbox for each column that can be +null. Before 2.2.3, you had to enter “null”, without the quotes, as +the column’s value. Since version 2.5.5, you have to use the checkbox +to get a real NULL value, so if you enter “NULL” this means you want a +literal NULL in the column, and not a NULL value (this works in PHP4).

+
+
+

6.4 How can I backup my database or table?

+

Click on a database or table name in the navigation panel, the properties will +be displayed. Then on the menu, click “Export”, you can dump the structure, the +data, or both. This will generate standard SQL statements that can be +used to recreate your database/table. You will need to choose “Save as file”, +so that phpMyAdmin can transmit the resulting dump to your station. Depending +on your PHP configuration, you will see options to compress the dump. See also +the $cfg['ExecTimeLimit'] configuration variable. For +additional help on this subject, look for the word “dump” in this document.

+
+
+

6.5 How can I restore (upload) my database or table using a dump? How can I run a “.sql” file?

+

Click on a database name in the navigation panel, the properties will +be displayed. Select “Import” from the list of tabs in the right–hand +frame (or “SQL” if your phpMyAdmin +version is previous to 2.7.0). In the “Location of the text file” +section, type in the path to your dump filename, or use the Browse +button. Then click Go. With version 2.7.0, the import engine has been +re–written, if possible it is suggested that you upgrade to take +advantage of the new features. For additional help on this subject, +look for the word “upload” in this document.

+

Note: For errors while importing of dumps exported from older MySQL versions to newer MySQL versions, +please check 6.41 I get import errors while importing the dumps exported from older MySQL versions (pre-5.7.6) into newer MySQL versions (5.7.7+), but they work fine when imported back on same older versions ?.

+
+
+

6.6 How can I use the relation table in Query-by-example?

+

Here is an example with the tables persons, towns and countries, all +located in the database “mydb”. If you don’t have a pma__relation +table, create it as explained in the configuration section. Then +create the example tables:

+
CREATE TABLE REL_countries (
+country_code char(1) NOT NULL default '',
+description varchar(10) NOT NULL default '',
+PRIMARY KEY (country_code)
+) ENGINE=MyISAM;
+
+INSERT INTO REL_countries VALUES ('C', 'Canada');
+
+CREATE TABLE REL_persons (
+id tinyint(4) NOT NULL auto_increment,
+person_name varchar(32) NOT NULL default '',
+town_code varchar(5) default '0',
+country_code char(1) NOT NULL default '',
+PRIMARY KEY (id)
+) ENGINE=MyISAM;
+
+INSERT INTO REL_persons VALUES (11, 'Marc', 'S', 'C');
+INSERT INTO REL_persons VALUES (15, 'Paul', 'S', 'C');
+
+CREATE TABLE REL_towns (
+town_code varchar(5) NOT NULL default '0',
+description varchar(30) NOT NULL default '',
+PRIMARY KEY (town_code)
+) ENGINE=MyISAM;
+
+INSERT INTO REL_towns VALUES ('S', 'Sherbrooke');
+INSERT INTO REL_towns VALUES ('M', 'Montréal');
+
+
+

To setup appropriate links and display information:

+
    +
  • on table “REL_persons” click Structure, then Relation view

  • +
  • for “town_code”, choose from dropdowns, “mydb”, “REL_towns”, “town_code” +for foreign database, table and column respectively

  • +
  • for “country_code”, choose from dropdowns, “mydb”, “REL_countries”, +“country_code” for foreign database, table and column respectively

  • +
  • on table “REL_towns” click Structure, then Relation view

  • +
  • in “Choose column to display”, choose “description”

  • +
  • repeat the two previous steps for table “REL_countries”

  • +
+

Then test like this:

+
    +
  • Click on your db name in the navigation panel

  • +
  • Choose “Query”

  • +
  • Use tables: persons, towns, countries

  • +
  • Click “Update query”

  • +
  • In the columns row, choose persons.person_name and click the “Show” +tickbox

  • +
  • Do the same for towns.description and countries.descriptions in the +other 2 columns

  • +
  • Click “Update query” and you will see in the query box that the +correct joins have been generated

  • +
  • Click “Submit query”

  • +
+
+
+

6.7 How can I use the “display column” feature?

+

Starting from the previous example, create the pma__table_info as +explained in the configuration section, then browse your persons +table, and move the mouse over a town code or country code. See also +6.21 In edit/insert mode, how can I see a list of possible values for a column, based on some foreign table? for an additional feature that “display column” +enables: drop-down list of possible values.

+
+
+

6.8 How can I produce a PDF schema of my database?

+

First the configuration variables “relation”, “table_coords” and +“pdf_pages” have to be filled in.

+
    +
  • Select your database in the navigation panel.

  • +
  • Choose “Designer” in the navigation bar at the top.

  • +
  • Move the tables the way you want them.

  • +
  • Choose “Export schema” in the left menu.

  • +
  • The export modal will open.

  • +
  • Select the type of export to PDF, you may adjust the other settings.

  • +
  • Submit the form and the file will start downloading.

  • +
+
+

See also

+

Relations

+
+
+
+

6.9 phpMyAdmin is changing the type of one of my columns!

+

No, it’s MySQL that is doing silent column type changing.

+
+
+

6.10 When creating a privilege, what happens with underscores in the database name?

+

If you do not put a backslash before the underscore, this is a +wildcard grant, and the underscore means “any character”. So, if the +database name is “john_db”, the user would get rights to john1db, +john2db … If you put a backslash before the underscore, it means +that the database name will have a real underscore.

+
+
+

6.11 What is the curious symbol ø in the statistics pages?

+

It means “average”.

+
+
+

6.12 I want to understand some Export options.

+

Structure:

+
    +
  • “Add DROP TABLE” will add a line telling MySQL to drop the table, if it already +exists during the import. It does NOT drop the table after your +export, it only affects the import file.

  • +
  • “If Not Exists” will only create the table if it doesn’t exist. +Otherwise, you may get an error if the table name exists but has a +different structure.

  • +
  • “Add AUTO_INCREMENT value” ensures that AUTO_INCREMENT value (if +any) will be included in backup.

  • +
  • “Enclose table and column names with backquotes” ensures that column +and table names formed with special characters are protected.

  • +
  • “Add into comments” includes column comments, relations, and media +types set in the pmadb in the dump as SQL comments +(/* xxx */).

  • +
+

Data:

+
    +
  • “Complete inserts” adds the column names on every INSERT command, for +better documentation (but resulting file is bigger).

  • +
  • “Extended inserts” provides a shorter dump file by using only once the +INSERT verb and the table name.

  • +
  • “Delayed inserts” are best explained in the MySQL manual - INSERT DELAYED Syntax.

  • +
  • “Ignore inserts” treats errors as a warning instead. Again, more info +is provided in the MySQL manual - INSERT Syntax, but basically with +this selected, invalid values are adjusted and inserted rather than +causing the entire statement to fail.

  • +
+
+
+

6.13 I would like to create a database with a dot in its name.

+

This is a bad idea, because in MySQL the syntax “database.table” is +the normal way to reference a database and table name. Worse, MySQL +will usually let you create a database with a dot, but then you cannot +work with it, nor delete it.

+
+
+

6.14 (withdrawn).

+
+
+

6.15 I want to add a BLOB column and put an index on it, but MySQL says “BLOB column ‘…’ used in key specification without a key length”.

+

The right way to do this, is to create the column without any indexes, +then display the table structure and use the “Create an index” dialog. +On this page, you will be able to choose your BLOB column, and set a +size to the index, which is the condition to create an index on a BLOB +column.

+
+
+

6.16 How can I simply move in page with plenty editing fields?

+

You can use Ctrl+arrows (Option+Arrows in Safari) for moving on +most pages with many editing fields (table structure changes, row editing, +etc.).

+
+
+

6.17 Transformations: I can’t enter my own mimetype! What is this feature then useful for?

+

Defining mimetypes is of no use if you can’t put +transformations on them. Otherwise you could just put a comment on the +column. Because entering your own mimetype will cause serious syntax +checking issues and validation, this introduces a high-risk false- +user-input situation. Instead you have to initialize mimetypes using +functions or empty mimetype definitions.

+

Plus, you have a whole overview of available mimetypes. Who knows all those +mimetypes by heart so they can enter it at will?

+
+
+

6.18 Bookmarks: Where can I store bookmarks? Why can’t I see any bookmarks below the query box? What are these variables for?

+

You need to have configured the phpMyAdmin configuration storage for using bookmarks +feature. Once you have done that, you can use bookmarks in the SQL tab.

+
+

See also

+

Bookmarks

+
+
+
+

6.19 How can I create simple LATEX document to include exported table?

+

You can simply include table in your LATEX documents, +minimal sample document should look like following one (assuming you +have table exported in file table.tex):

+
\documentclass{article} % or any class you want
+\usepackage{longtable}  % for displaying table
+\begin{document}        % start of document
+\include{table}         % including exported table
+\end{document}          % end of document
+
+
+
+
+

6.20 I see a lot of databases which are not mine, and cannot access them.

+

You have one of these global privileges: CREATE TEMPORARY TABLES, SHOW +DATABASES, LOCK TABLES. Those privileges also enable users to see all the +database names. So if your users do not need those privileges, you can remove +them and their databases list will shorten.

+ +
+
+

6.21 In edit/insert mode, how can I see a list of possible values for a column, based on some foreign table?

+

You have to setup appropriate links between the tables, and also setup +the “display column” in the foreign table. See 6.6 How can I use the relation table in Query-by-example? for an +example. Then, if there are 100 values or less in the foreign table, a +drop-down list of values will be available. You will see two lists of +values, the first list containing the key and the display column, the +second list containing the display column and the key. The reason for +this is to be able to type the first letter of either the key or the +display column. For 100 values or more, a distinct window will appear, +to browse foreign key values and choose one. To change the default +limit of 100, see $cfg['ForeignKeyMaxLimit'].

+
+
+

6.22 Bookmarks: Can I execute a default bookmark automatically when entering Browse mode for a table?

+

Yes. If a bookmark has the same label as a table name and it’s not a +public bookmark, it will be executed.

+
+

See also

+

Bookmarks

+
+
+
+

6.23 Export: I heard phpMyAdmin can export Microsoft Excel files?

+

You can use CSV for Microsoft Excel, +which works out of the box.

+
+

Changed in version 3.4.5: Since phpMyAdmin 3.4.5 support for direct export to Microsoft Excel version +97 and newer was dropped.

+
+
+
+

6.24 Now that phpMyAdmin supports native MySQL 4.1.x column comments, what happens to my column comments stored in pmadb?

+

Automatic migration of a table’s pmadb-style column comments to the +native ones is done whenever you enter Structure page for this table.

+
+
+

6.25 (withdrawn).

+
+
+

6.26 How can I select a range of rows?

+

Click the first row of the range, hold the shift key and click the +last row of the range. This works everywhere you see rows, for example +in Browse mode or on the Structure page.

+
+
+

6.27 What format strings can I use?

+

In all places where phpMyAdmin accepts format strings, you can use +@VARIABLE@ expansion and strftime +format strings. The expanded variables depend on a context (for +example, if you haven’t chosen a table, you can not get the table +name), but the following variables can be used:

+
+
@HTTP_HOST@

HTTP host that runs phpMyAdmin

+
+
@SERVER@

MySQL server name

+
+
@VERBOSE@

Verbose MySQL server name as defined in $cfg['Servers'][$i]['verbose']

+
+
@VSERVER@

Verbose MySQL server name if set, otherwise normal

+
+
@DATABASE@

Currently opened database

+
+
@TABLE@

Currently opened table

+
+
@COLUMNS@

Columns of the currently opened table

+
+
@PHPMYADMIN@

phpMyAdmin with version

+
+
+
+
+

6.28 (withdrawn).

+
+
+

6.29 Why can’t I get a chart from my query result table?

+

Not every table can be put to the chart. Only tables with one, two or +three columns can be visualised as a chart. Moreover the table must be +in a special format for chart script to understand it. Currently +supported formats can be found in Charts.

+
+
+

6.30 Import: How can I import ESRI Shapefiles?

+

An ESRI Shapefile is actually a set of several files, where .shp file +contains geometry data and .dbf file contains data related to those +geometry data. To read data from .dbf file you need to have PHP +compiled with the dBase extension (–enable-dbase). Otherwise only +geometry data will be imported.

+

To upload these set of files you can use either of the following +methods:

+

Configure upload directory with $cfg['UploadDir'], upload both .shp and .dbf files with +the same filename and chose the .shp file from the import page.

+

Create a zip archive with .shp and .dbf files and import it. For this +to work, you need to set $cfg['TempDir'] to a place where the web server user can +write (for example './tmp').

+

To create the temporary directory on a UNIX-based system, you can do:

+
cd phpMyAdmin
+mkdir tmp
+chmod o+rwx tmp
+
+
+
+
+

6.31 How do I create a relation in designer?

+

To select relation, click: The display column is shown in pink. To +set/unset a column as the display column, click the “Choose column to +display” icon, then click on the appropriate column name.

+
+
+

6.32 How can I use the zoom search feature?

+

The Zoom search feature is an alternative to table search feature. It allows +you to explore a table by representing its data in a scatter plot. You can +locate this feature by selecting a table and clicking the Search +tab. One of the sub-tabs in the Table Search page is +Zoom Search.

+

Consider the table REL_persons in 6.6 How can I use the relation table in Query-by-example? for +an example. To use zoom search, two columns need to be selected, for +example, id and town_code. The id values will be represented on one +axis and town_code values on the other axis. Each row will be +represented as a point in a scatter plot based on its id and +town_code. You can include two additional search criteria apart from +the two fields to display.

+

You can choose which field should be +displayed as label for each point. If a display column has been set +for the table (see 6.7 How can I use the “display column” feature?), it is taken as the label unless +you specify otherwise. You can also select the maximum number of rows +you want to be displayed in the plot by specifing it in the ‘Max rows +to plot’ field. Once you have decided over your criteria, click ‘Go’ +to display the plot.

+

After the plot is generated, you can use the +mouse wheel to zoom in and out of the plot. In addition, panning +feature is enabled to navigate through the plot. You can zoom-in to a +certain level of detail and use panning to locate your area of +interest. Clicking on a point opens a dialogue box, displaying field +values of the data row represented by the point. You can edit the +values if required and click on submit to issue an update query. Basic +instructions on how to use can be viewed by clicking the ‘How to use?’ +link located just above the plot.

+
+
+

6.33 When browsing a table, how can I copy a column name?

+

Selecting the name of the column within the browse table header cell +for copying is difficult, as the columns support reordering by +dragging the header cells as well as sorting by clicking on the linked +column name. To copy a column name, double-click on the empty area +next to the column name, when the tooltip tells you to do so. This +will show you an input box with the column name. You may right-click +the column name within this input box to copy it to your clipboard.

+
+
+

6.34 How can I use the Favorite Tables feature?

+

Favorite Tables feature is very much similar to Recent Tables feature. +It allows you to add a shortcut for the frequently used tables of any +database in the navigation panel . You can easily navigate to any table +in the list by simply choosing it from the list. These tables are stored +in your browser’s local storage if you have not configured your +phpMyAdmin Configuration Storage. Otherwise these entries are stored in +phpMyAdmin Configuration Storage.

+

IMPORTANT: In absence of phpMyAdmin Configuration Storage, your Favorite +tables may be different in different browsers based on your different +selections in them.

+

To add a table to Favorite list simply click on the Gray star in front +of a table name in the list of tables of a Database and wait until it +turns to Yellow. +To remove a table from list, simply click on the Yellow star and +wait until it turns Gray again.

+

Using $cfg['NumFavoriteTables'] in your config.inc.php +file, you can define the maximum number of favorite tables shown in the +navigation panel. Its default value is 10.

+
+
+

6.35 How can I use the Range search feature?

+

With the help of range search feature, one can specify a range of values for +particular column(s) while performing search operation on a table from the Search +tab.

+

To use this feature simply click on the BETWEEN or NOT BETWEEN operators +from the operator select list in front of the column name. On choosing one of the +above options, a dialog box will show up asking for the Minimum and Maximum +value for that column. Only the specified range of values will be included +in case of BETWEEN and excluded in case of NOT BETWEEN from the final results.

+

Note: The Range search feature will work only Numeric and Date data type columns.

+
+
+

6.36 What is Central columns and how can I use this feature?

+

As the name suggests, the Central columns feature enables to maintain a central list of +columns per database to avoid similar name for the same data element and bring consistency +of data type for the same data element. You can use the central list of columns to +add an element to any table structure in that database which will save from writing +similar column name and column definition.

+

To add a column to central list, go to table structure page, check the columns you want +to include and then simply click on “Add to central columns”. If you want to add all +unique columns from more than one table from a database then go to database structure page, +check the tables you want to include and then select “Add columns to central list”.

+

To remove a column from central list, go to Table structure page, check the columns you want +to remove and then simply click on “Remove from central columns”. If you want to remove all +columns from more than one tables from a database then go to database structure page, +check the tables you want to include and then select “Remove columns from central list”.

+

To view and manage the central list, select the database you want to manage central columns +for then from the top menu click on “Central columns”. You will be taken to a page where +you will have options to edit, delete or add new columns to central list.

+
+
+

6.37 How can I use Improve Table structure feature?

+

Improve table structure feature helps to bring the table structure upto +Third Normal Form. A wizard is presented to user which asks questions about the +elements during the various steps for normalization and a new structure is proposed +accordingly to bring the table into the First/Second/Third Normal form. +On startup of the wizard, user gets to select upto what normal form they want to +normalize the table structure.

+

Here is an example table which you can use to test all of the three First, Second and +Third Normal Form.

+
CREATE TABLE `VetOffice` (
+ `petName` varchar(64) NOT NULL,
+ `petBreed` varchar(64) NOT NULL,
+ `petType` varchar(64) NOT NULL,
+ `petDOB` date NOT NULL,
+ `ownerLastName` varchar(64) NOT NULL,
+ `ownerFirstName` varchar(64) NOT NULL,
+ `ownerPhone1` int(12) NOT NULL,
+ `ownerPhone2` int(12) NOT NULL,
+ `ownerEmail` varchar(64) NOT NULL,
+);
+
+
+

The above table is not in First normal Form as no primary key exists. Primary key +is supposed to be (petName,`ownerLastName`,`ownerFirstName`) . If the primary key +is chosen as suggested the resultant table won’t be in Second as well as Third Normal +form as the following dependencies exists.

+
(OwnerLastName, OwnerFirstName) -> OwnerEmail
+(OwnerLastName, OwnerFirstName) -> OwnerPhone
+PetBreed -> PetType
+
+
+

Which says, OwnerEmail depends on OwnerLastName and OwnerFirstName. +OwnerPhone depends on OwnerLastName and OwnerFirstName. +PetType depends on PetBreed.

+
+
+

6.38 How can I reassign auto-incremented values?

+

Some users prefer their AUTO_INCREMENT values to be consecutive; this is not +always the case after row deletion.

+

Here are the steps to accomplish this. These are manual steps because they +involve a manual verification at one point.

+
    +
  • Ensure that you have exclusive access to the table to rearrange

  • +
  • On your primary key column (i.e. id), remove the AUTO_INCREMENT setting

  • +
  • Delete your primary key in Structure > indexes

  • +
  • Create a new column future_id as primary key, AUTO_INCREMENT

  • +
  • Browse your table and verify that the new increments correspond to what +you’re expecting

  • +
  • Drop your old id column

  • +
  • Rename the future_id column to id

  • +
  • Move the new id column via Structure > Move columns

  • +
+
+
+

6.39 What is the “Adjust privileges” option when renaming, copying, or moving a database, table, column, or procedure?

+

When renaming/copying/moving a database/table/column/procedure, +MySQL does not adjust the original privileges relating to these objects +on its own. By selecting this option, phpMyAdmin will adjust the privilege +table so that users have the same privileges on the new items.

+

For example: A user ‘bob’@’localhost’ has a ‘SELECT’ privilege on a +column named ‘id’. Now, if this column is renamed to ‘id_new’, MySQL, +on its own, would not adjust the column privileges to the new column name. +phpMyAdmin can make this adjustment for you automatically.

+

Notes:

+
    +
  • While adjusting privileges for a database, the privileges of all +database-related elements (tables, columns and procedures) are also adjusted +to the database’s new name.

  • +
  • Similarly, while adjusting privileges for a table, the privileges of all +the columns inside the new table are also adjusted.

  • +
  • While adjusting privileges, the user performing the operation must have the following +privileges:

    +
      +
    • SELECT, INSERT, UPDATE, DELETE privileges on following tables: +mysql.`db`, mysql.`columns_priv`, mysql.`tables_priv`, mysql.`procs_priv`

    • +
    • FLUSH privilege (GLOBAL)

    • +
    +
  • +
+

Thus, if you want to replicate the database/table/column/procedure as it is +while renaming/copying/moving these objects, make sure you have checked this option.

+
+
+

6.40 I see “Bind parameters” checkbox in the “SQL” page. How do I write parameterized SQL queries?

+

From version 4.5, phpMyAdmin allows users to execute parameterized queries in the “SQL” page. +Parameters should be prefixed with a colon(:) and when the “Bind parameters” checkbox is checked +these parameters will be identified and input fields for these parameters will be presented. +Values entered in these field will be substituted in the query before being executed.

+
+
+

6.41 I get import errors while importing the dumps exported from older MySQL versions (pre-5.7.6) into newer MySQL versions (5.7.7+), but they work fine when imported back on same older versions ?

+

If you get errors like #1031 - Table storage engine for ‘table_name’ doesn’t have this option +while importing the dumps exported from pre-5.7.7 MySQL servers into new MySQL server versions 5.7.7+, +it might be because ROW_FORMAT=FIXED is not supported with InnoDB tables. Moreover, the value of +innodb_strict_mode would define if this would be reported as a warning or as an error.

+

Since MySQL version 5.7.9, the default value for innodb_strict_mode is ON and thus would generate +an error when such a CREATE TABLE or ALTER TABLE statement is encountered.

+

There are two ways of preventing such errors while importing:

+
    +
  • Change the value of innodb_strict_mode to OFF before starting the import and turn it ON after +the import is successfully completed.

  • +
  • This can be achieved in two ways:

    +
      +
    • Go to ‘Variables’ page and edit the value of innodb_strict_mode

    • +
    • Run the query : SET GLOBAL `innodb_strict_mode = ‘[value]’`

    • +
    +
  • +
+

After the import is done, it is suggested that the value of innodb_strict_mode should be reset to the +original value.

+
+
+
+

phpMyAdmin project

+
+

7.1 I have found a bug. How do I inform developers?

+

Our issues tracker is located at <https://github.com/phpmyadmin/phpmyadmin/issues>. +For security issues, please refer to the instructions at <https://www.phpmyadmin.net/security> to email +the developers directly.

+
+
+

7.2 I want to translate the messages to a new language or upgrade an existing language, where do I start?

+

Translations are very welcome and all you need to have are the +language skills. The easiest way is to use our online translation +service. You can check +out all the possibilities to translate in the translate section on +our website.

+
+
+

7.3 I would like to help out with the development of phpMyAdmin. How should I proceed?

+

We welcome every contribution to the development of phpMyAdmin. You +can check out all the possibilities to contribute in the contribute +section on our website.

+ +
+
+
+

Security

+
+

8.1 Where can I get information about the security alerts issued for phpMyAdmin?

+

Please refer to <https://www.phpmyadmin.net/security/>.

+
+
+

8.2 How can I protect phpMyAdmin against brute force attacks?

+

If you use Apache web server, phpMyAdmin exports information about +authentication to the Apache environment and it can be used in Apache +logs. Currently there are two variables available:

+
+
userID

User name of currently active user (they do not have to be logged in).

+
+
userStatus

Status of currently active user, one of ok (user is logged in), +mysql-denied (MySQL denied user login), allow-denied (user denied +by allow/deny rules), root-denied (root is denied in configuration), +empty-denied (empty password is denied).

+
+
+

LogFormat directive for Apache can look like following:

+
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n"   pma_combined
+
+
+

You can then use any log analyzing tools to detect possible break-in +attempts.

+
+
+

8.3 Why are there path disclosures when directly loading certain files?

+

This is a server configuration problem. Never enable display_errors on a production site.

+
+
+

8.4 CSV files exported from phpMyAdmin could allow a formula injection attack.

+

It is possible to generate a CSV file that, when imported to a spreadsheet program such as Microsoft Excel, +could potentially allow the execution of arbitrary commands.

+

The CSV files generated by phpMyAdmin could potentially contain text that would be interpreted by a spreadsheet program as +a formula, but we do not believe escaping those fields is the proper behavior. There is no means to properly escape and +differentiate between a desired text output and a formula that should be escaped, and CSV is a text format where function +definitions should not be interpreted anyway. We have discussed this at length and feel it is the responsibility of the +spreadsheet program to properly parse and sanitize such data on input instead.

+

Google also has a similar view.

+
+
+
+

Synchronization

+
+

9.1 (withdrawn).

+
+
+

9.2 (withdrawn).

+
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/genindex.html b/Sources/php_script/script/phpMyAdmin/doc/html/genindex.html new file mode 100644 index 0000000..a8c98cf --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/genindex.html @@ -0,0 +1,2407 @@ + + + + + + + + Index — phpMyAdmin 5.2.0 documentation + + + + + + + + + + + + + + +
+
+
+
+ + +

Index

+ +
+ Symbols + | A + | B + | C + | D + | E + | F + | G + | H + | I + | J + | K + | L + | M + | N + | O + | P + | Q + | R + | S + | T + | U + | V + | W + | X + | Z + +
+

Symbols

+ + + +
+ +

A

+ + + +
+ +

B

+ + + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

H

+ + + +
+ +

I

+ + + +
+ +

J

+ + + +
+ +

K

+ + +
+ +

L

+ + + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

O

+ + + +
+ +

P

+ + + +
+ +

Q

+ + + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + + +
+ +

U

+ + + +
+ +

V

+ + + +
+ +

W

+ + +
+ +

X

+ + +
+ +

Z

+ + + +
+ + + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/other.html b/Sources/php_script/script/phpMyAdmin/doc/html/other.html new file mode 100644 index 0000000..08e99e9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/other.html @@ -0,0 +1,149 @@ + + + + + + + + Other sources of information — phpMyAdmin 5.2.0 documentation + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Other sources of information

+
+

Printed Book

+

The definitive guide to using phpMyAdmin is the book Mastering phpMyAdmin for +Effective MySQL Management by Marc Delisle. You can get information on that +book and other officially endorsed books at the phpMyAdmin site.

+
+
+

Tutorials

+

Third party tutorials and articles which you might find interesting:

+
+

Česky (Czech)

+ +
+ +
+

Русский (Russian)

+ +
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/transformations.html b/Sources/php_script/script/phpMyAdmin/doc/html/transformations.html new file mode 100644 index 0000000..d50063a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/transformations.html @@ -0,0 +1,251 @@ + + + + + + + + Transformations — phpMyAdmin 5.2.0 documentation + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Transformations

+
+

Note

+

You need to have configured the phpMyAdmin configuration storage to use the transformations +feature.

+
+
+

Introduction

+

To enable transformations, you have to set up the column_info +table and the proper directives. Please see the Configuration on how to do so.

+

phpMyAdmin has two different types of transformations: browser display +transformations, which affect only how the data is shown when browsing +through phpMyAdmin; and input transformations, which affect a value +prior to being inserted through phpMyAdmin. +You can apply different transformations to the contents of each +column. Each transformation has options to define how it will affect the +stored data.

+

Say you have a column filename which contains a filename. Normally +you would see in phpMyAdmin only this filename. Using display transformations +you can transform that filename into a HTML link, so you can click +inside of the phpMyAdmin structure on the column’s link and will see +the file displayed in a new browser window. Using transformation +options you can also specify strings to append/prepend to a string or +the format you want the output stored in.

+

For a general overview of all available transformations and their +options, you can either go to the Change link for an existing column +or from the dialog to create a new column, in either case there is a link +on that column structure page for “Browser display transformation” and +“Input transformation” which will show more information about each +transformation that is available on your system.

+

For a tutorial on how to effectively use transformations, see our +Link section on the +official phpMyAdmin homepage.

+
+
+

Usage

+

Go to the table structure page (reached by clicking on +the ‘Structure’ link for a table). There click on “Change” (or the change +icon) and there you will see the five transformation–related fields at the end of the line. +They are called ‘Media type’, ‘Browser transformation’ and +‘Transformation options’.

+
    +
  • The field ‘Media type’ is a drop-down field. Select the Media type that +corresponds to the column’s contents. Please note that many transformations +are inactive until a Media type is selected.

  • +
  • The field ‘Browser display transformation’ is a drop-down field. You can +choose from a hopefully growing amount of pre-defined transformations. +See below for information on how to build your own transformation. +There are global transformations and mimetype-bound transformations. +Global transformations can be used for any mimetype. They will take +the mimetype, if necessary, into regard. Mimetype-bound +transformations usually only operate on a certain mimetype. There are +transformations which operate on the main mimetype (like ‘image’), +which will most likely take the subtype into regard, and those who +only operate on a specific subtype (like ‘image/jpeg’). You can use +transformations on mimetypes for which the function was not defined +for. There is no security check for you selected the right +transformation, so take care of what the output will be like.

  • +
  • The field ‘Browser display transformation options’ is a free-type textfield. You have +to enter transform-function specific options here. Usually the +transforms can operate with default options, but it is generally a +good idea to look up the overview to see which options are necessary. +Much like the ENUM/SET-Fields, you have to split up several options +using the format ‘a’,’b’,’c’,…(NOTE THE MISSING BLANKS). This is +because internally the options will be parsed as an array, leaving the +first value the first element in the array, and so forth. If you want +to specify a MIME character set you can define it in the +transformation_options. You have to put that outside of the pre- +defined options of the specific mime-transform, as the last value of +the set. Use the format “’; charset=XXX’”. If you use a transform, for +which you can specify 2 options and you want to append a character +set, enter “‘first parameter’,’second parameter’,’charset=us-ascii’”. +You can, however use the defaults for the parameters: “’’,’’,’charset +=us-ascii’”. The default options can be configured using +$cfg['DefaultTransformations'].

  • +
  • ‘Input transformation’ is another drop-down menu that corresponds exactly +with the instructions above for “Browser display transformation” except +these these affect the data before insertion in to the database. These are +most commonly used to either provide a specialized editor (for example, using +the phpMyAdmin SQL editor interface) or selector (such as for uploading an image). +It’s also possible to manipulate the data such as converting an IPv4 address to binary +or parsing it through a regular expression.

  • +
  • Finally, ‘Input transformation options’ is the equivalent of the “Browser display +transformation options” section above and is where optional and required parameters are entered.

  • +
+
+
+

File structure

+

All specific transformations for mimetypes are defined through class +files in the directory libraries/classes/Plugins/Transformations/. Each of +them extends a certain transformation abstract class declared in +libraries/classes/Plugins/Transformations/Abs.

+

They are stored in files to ease customization and to allow easy adding of +new or custom transformations.

+

Because the user cannot enter their own mimetypes, it is kept certain that +the transformations will always work. It makes no sense to apply a +transformation to a mimetype the transform-function doesn’t know to +handle.

+

There is a file called libraries/classes/Plugins/Transformations.php that provides some +basic functions which can be included by any other transform function.

+

The file name convention is [Mimetype]_[Subtype]_[Transformation +Name].php, while the abstract class that it extends has the +name [Transformation Name]TransformationsPlugin. All of the +methods that have to be implemented by a transformations plug-in are:

+
    +
  1. getMIMEType() and getMIMESubtype() in the main class;

  2. +
  3. getName(), getInfo() and applyTransformation() in the abstract class +it extends.

  4. +
+

The getMIMEType(), getMIMESubtype() and getName() methods return the +name of the MIME type, MIME Subtype and transformation accordingly. +getInfo() returns the transformation’s description and possible +options it may receive and applyTransformation() is the method that +does the actual work of the transformation plug-in.

+

Please see the libraries/classes/Plugins/Transformations/TEMPLATE and +libraries/classes/Plugins/Transformations/TEMPLATE_ABSTRACT files for adding +your own transformation plug-in. You can also generate a new +transformation plug-in (with or without the abstract transformation +class), by using +scripts/transformations_generator_plugin.sh or +scripts/transformations_generator_main_class.sh.

+

The applyTransformation() method always gets passed three variables:

+
    +
  1. $buffer - Contains the text inside of the column. This is the +text, you want to transform.

  2. +
  3. $options - Contains any user-passed options to a transform +function as an array.

  4. +
  5. $meta - Contains an object with information about your column. The +data is drawn from the output of the mysql_fetch_field() function. This means, all +object properties described on the manual page are available in this +variable and can be used to transform a column accordingly to +unsigned/zerofill/not_null/… properties. The $meta->mimetype +variable contains the original Media type of the column (i.e. +‘text/plain’, ‘image/jpeg’ etc.)

  6. +
+
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/vendors.html b/Sources/php_script/script/phpMyAdmin/doc/html/vendors.html new file mode 100644 index 0000000..b7329b6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/doc/html/vendors.html @@ -0,0 +1,158 @@ + + + + + + + + Distributing and packaging phpMyAdmin — phpMyAdmin 5.2.0 documentation + + + + + + + + + + + + + + + + +
+
+
+
+ +
+

Distributing and packaging phpMyAdmin

+

This document is intended to give pieces of advice to people who want to +redistribute phpMyAdmin inside other software packages such as Linux +distribution or some all in one package including web server and MySQL +server.

+

Generally, you can customize some basic aspects (paths to some files and +behavior) in libraries/vendor_config.php.

+

For example, if you want setup script to generate a config file in var, change +SETUP_CONFIG_FILE to /var/lib/phpmyadmin/config.inc.php and you +will also probably want to skip directory writable check, so set +SETUP_DIR_WRITABLE to false.

+
+

External libraries

+

phpMyAdmin includes several external libraries, you might want to +replace them with system ones if they are available, but please note +that you should test whether the version you provide is compatible with the +one we ship.

+

Currently known list of external libraries:

+
+
js/vendor

jQuery js framework libraries and various js libraries.

+
+
vendor/

The download kit includes various Composer packages as +dependencies.

+
+
+
+
+

Specific files LICENSES

+

phpMyAdmin distributed themes contain some content that is under licenses.

+ +

CC BY 4.0 or GPL

+
+
+

Licenses for vendors

+ +
+
+ + +
+
+
+
+ +
+
+ + + + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/common.js b/Sources/php_script/script/phpMyAdmin/js/dist/common.js new file mode 100644 index 0000000..4793ea4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/common.js @@ -0,0 +1,176 @@ +$(function () { + Functions.checkNumberOfFields(); +}); +/** + * Holds common parameters such as server, db, table, etc + * + * The content for this is normally loaded from Header.php or + * Response.php and executed by ajax.js + * + * @test-module CommonParams + */ + +var CommonParams = function () { + /** + * @var {Object} params An associative array of key value pairs + * @access private + */ + var params = {}; // The returned object is the public part of the module + + return { + /** + * Saves all the key value pair that + * are provided in the input array + * + * @param obj hash The input array + * + * @return {void} + */ + setAll: function (obj) { + var updateNavigation = false; + + for (var i in obj) { + if (params[i] !== undefined && params[i] !== obj[i]) { + if (i === 'db' || i === 'table') { + updateNavigation = true; + } + } + + params[i] = obj[i]; + } + + if (updateNavigation && $('#pma_navigation_tree').hasClass('synced')) { + Navigation.showCurrent(); + } + }, + + /** + * Retrieves a value given its key + * Returns empty string for undefined values + * + * @param {string} name The key + * + * @return {string} + */ + get: function (name) { + return params[name]; + }, + + /** + * Saves a single key value pair + * + * @param {string} name The key + * @param {string} value The value + * + * @return {CommonParams} For chainability + */ + set: function (name, value) { + var updateNavigation = false; + + if (name === 'db' || name === 'table' && params[name] !== value) { + updateNavigation = true; + } + + params[name] = value; + + if (updateNavigation && $('#pma_navigation_tree').hasClass('synced')) { + Navigation.showCurrent(); + } + + return this; + }, + + /** + * Returns the url query string using the saved parameters + * + * @param {string} separator New separator + * + * @return {string} + */ + getUrlQuery: function (separator) { + var sep = typeof separator !== 'undefined' ? separator : '?'; + var common = this.get('common_query'); + var argsep = CommonParams.get('arg_separator'); + + if (typeof common === 'string' && common.length > 0) { + // If the last char is the separator, do not add it + // Else add it + common = common.substr(common.length - 1, common.length) === argsep ? common : common + argsep; + } + + return Functions.sprintf('%s%sserver=%s' + argsep + 'db=%s' + argsep + 'table=%s', sep, common, encodeURIComponent(this.get('server')), encodeURIComponent(this.get('db')), encodeURIComponent(this.get('table'))); + } + }; +}(); +/** + * Holds common parameters such as server, db, table, etc + * + * The content for this is normally loaded from Header.php or + * Response.php and executed by ajax.js + */ +// eslint-disable-next-line no-unused-vars + + +var CommonActions = { + /** + * Saves the database name when it's changed + * and reloads the query window, if necessary + * + * @param {string} newDb new_db The name of the new database + * + * @return {void} + */ + setDb: function (newDb) { + if (newDb !== CommonParams.get('db')) { + CommonParams.setAll({ + 'db': newDb, + 'table': '' + }); + } + }, + + /** + * Opens a database in the main part of the page + * + * @param {string} newDb The name of the new database + * + * @return {void} + */ + openDb: function (newDb) { + CommonParams.set('db', newDb).set('table', ''); + this.refreshMain(CommonParams.get('opendb_url')); + }, + + /** + * Refreshes the main frame + * + * @param {any} url Undefined to refresh to the same page + * String to go to a different page, e.g: 'index.php' + * @param {function | undefined} callback + * + * @return {void} + */ + refreshMain: function (url) { + let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; + var newUrl = url; + + if (!newUrl) { + newUrl = $('#selflink').find('a').attr('href') || window.location.pathname; + newUrl = newUrl.substring(0, newUrl.indexOf('?')); + } + + if (newUrl.indexOf('?') !== -1) { + newUrl += CommonParams.getUrlQuery(CommonParams.get('arg_separator')); + } else { + newUrl += CommonParams.getUrlQuery('?'); + } + + $('', { + href: newUrl + }).appendTo('body').trigger('click').remove(); + + if (typeof callback !== 'undefined') { + AJAX.callback = callback; + } + } +}; \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/console.js b/Sources/php_script/script/phpMyAdmin/js/dist/console.js new file mode 100644 index 0000000..b2a63fe --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/console.js @@ -0,0 +1,1591 @@ +/** + * Used in or for console + * + * @package phpMyAdmin-Console + */ + +/* global debugSQLInfo */ +// libraries/classes/Footer.php + +/** + * Console object + */ +var Console = { + /** + * @var {JQuery}, jQuery object, selector is '#pma_console>.content' + * @access private + */ + $consoleContent: null, + + /** + * @var {Jquery}, jQuery object, selector is '#pma_console .content', + * used for resizer + * @access private + */ + $consoleAllContents: null, + + /** + * @var {JQuery}, jQuery object, selector is '#pma_console .toolbar' + * @access private + */ + $consoleToolbar: null, + + /** + * @var {JQuery}, jQuery object, selector is '#pma_console .template' + * @access private + */ + $consoleTemplates: null, + + /** + * @var {JQuery}, jQuery object, form for submit + * @access private + */ + $requestForm: null, + + /** + * @var {object}, contain console config + * @access private + */ + config: null, + + /** + * @var {boolean}, if console element exist, it'll be true + * @access public + */ + isEnabled: false, + + /** + * @var {boolean}, make sure console events bind only once + * @access private + */ + isInitialized: false, + + /** + * Used for console initialize, reinit is ok, just some variable assignment + * + * @return {void} + */ + initialize: function () { + if ($('#pma_console').length === 0) { + return; + } + + Functions.configGet('Console', false, data => { + Console.config = data; + Console.setupAfterInit(); + }); + }, + + /** + * Setup the console after the config has been set at initialize stage + */ + setupAfterInit: function () { + Console.isEnabled = true; // Vars init + + Console.$consoleToolbar = $('#pma_console').find('>.toolbar'); + Console.$consoleContent = $('#pma_console').find('>.content'); + Console.$consoleAllContents = $('#pma_console').find('.content'); + Console.$consoleTemplates = $('#pma_console').find('>.templates'); // Generate a form for post + + Console.$requestForm = $('
' + '' + '' + '' + '' + '' + '' + '' + '
'); + Console.$requestForm.children('[name=token]').val(CommonParams.get('token')); + Console.$requestForm.on('submit', AJAX.requestHandler); // Event binds shouldn't run again + + if (Console.isInitialized === false) { + // Load config first + if (Console.config.AlwaysExpand === true) { + $('#pma_console_options input[name=always_expand]').prop('checked', true); + } + + if (Console.config.StartHistory === true) { + $('#pma_console_options').find('input[name=start_history]').prop('checked', true); + } + + if (Console.config.CurrentQuery === true) { + $('#pma_console_options').find('input[name=current_query]').prop('checked', true); + } + + if (Console.config.EnterExecutes === true) { + $('#pma_console_options').find('input[name=enter_executes]').prop('checked', true); + } + + if (Console.config.DarkTheme === true) { + $('#pma_console_options').find('input[name=dark_theme]').prop('checked', true); + $('#pma_console').find('>.content').addClass('console_dark_theme'); + } + + ConsoleResizer.initialize(); + ConsoleInput.initialize(); + ConsoleMessages.initialize(); + ConsoleBookmarks.initialize(); + ConsoleDebug.initialize(); + Console.$consoleToolbar.children('.console_switch').on('click', Console.toggle); + $('#pma_console').find('.toolbar').children().on('mousedown', function (event) { + event.preventDefault(); + event.stopImmediatePropagation(); + }); + $('#pma_console').find('.button.clear').on('click', function () { + ConsoleMessages.clear(); + }); + $('#pma_console').find('.button.history').on('click', function () { + ConsoleMessages.showHistory(); + }); + $('#pma_console').find('.button.options').on('click', function () { + Console.showCard('#pma_console_options'); + }); + $('#pma_console').find('.button.debug').on('click', function () { + Console.showCard('#debug_console'); + }); + Console.$consoleContent.on('click', function (event) { + if (event.target === this) { + ConsoleInput.focus(); + } + }); + $('#pma_console').find('.mid_layer').on('click', function () { + Console.hideCard($(this).parent().children('.card')); + }); + $('#debug_console').find('.switch_button').on('click', function () { + Console.hideCard($(this).closest('.card')); + }); + $('#pma_bookmarks').find('.switch_button').on('click', function () { + Console.hideCard($(this).closest('.card')); + }); + $('#pma_console_options').find('.switch_button').on('click', function () { + Console.hideCard($(this).closest('.card')); + }); + $('#pma_console_options').find('input[type=checkbox]').on('change', function () { + Console.updateConfig(); + }); + $('#pma_console_options').find('.button.default').on('click', function () { + $('#pma_console_options input[name=always_expand]').prop('checked', false); + $('#pma_console_options').find('input[name=start_history]').prop('checked', false); + $('#pma_console_options').find('input[name=current_query]').prop('checked', true); + $('#pma_console_options').find('input[name=enter_executes]').prop('checked', false); + $('#pma_console_options').find('input[name=dark_theme]').prop('checked', false); + Console.updateConfig(); + }); + $('#pma_console_options').find('input[name=enter_executes]').on('change', function () { + ConsoleMessages.showInstructions(Console.config.EnterExecutes); + }); + $(document).on('ajaxComplete', function (event, xhr, ajaxOptions) { + if (ajaxOptions.dataType && ajaxOptions.dataType.indexOf('json') !== -1) { + return; + } + + if (xhr.status !== 200) { + return; + } + + try { + var data = JSON.parse(xhr.responseText); + Console.ajaxCallback(data); + } catch (e) { + // eslint-disable-next-line no-console, compat/compat + console.trace(); // eslint-disable-next-line no-console + + console.log('Failed to parse JSON: ' + e.message); + } + }); + Console.isInitialized = true; + } // Change console mode from cookie + + + switch (Console.config.Mode) { + case 'collapse': + Console.collapse(); + break; + + case 'info': + Console.info(); + break; + + case 'show': + Console.show(true); + Console.scrollBottom(); + break; + + default: + Console.setConfig('Mode', 'info'); + Console.info(); + } + }, + + /** + * Execute query and show results in console + * + * @param {string} queryString + * @param {object} options + * + * @return {void} + */ + execute: function (queryString, options) { + if (typeof queryString !== 'string' || !/[a-z]|[A-Z]/.test(queryString)) { + return; + } + + Console.$requestForm.children('textarea').val(queryString); + Console.$requestForm.children('[name=server]').attr('value', CommonParams.get('server')); + + if (options && options.db) { + Console.$requestForm.children('[name=db]').val(options.db); + + if (options.table) { + Console.$requestForm.children('[name=table]').val(options.table); + } else { + Console.$requestForm.children('[name=table]').val(''); + } + } else { + Console.$requestForm.children('[name=db]').val(CommonParams.get('db').length > 0 ? CommonParams.get('db') : ''); + } + + Console.$requestForm.find('[name=profiling]').remove(); + + if (options && options.profiling === true) { + Console.$requestForm.append(''); + } + + if (!Functions.confirmQuery(Console.$requestForm[0], Console.$requestForm.children('textarea')[0].value)) { + return; + } + + Console.$requestForm.children('[name=console_message_id]').val(ConsoleMessages.appendQuery({ + 'sql_query': queryString + }).message_id); + Console.$requestForm.trigger('submit'); + ConsoleInput.clear(); + Navigation.reload(); + }, + ajaxCallback: function (data) { + if (data && data.console_message_id) { + ConsoleMessages.updateQuery(data.console_message_id, data.success, data.reloadQuerywindow ? data.reloadQuerywindow : false); + } else if (data && data.reloadQuerywindow) { + if (data.reloadQuerywindow.sql_query.length > 0) { + ConsoleMessages.appendQuery(data.reloadQuerywindow, 'successed').$message.addClass(Console.config.CurrentQuery ? '' : 'hide'); + } + } + }, + + /** + * Change console to collapse mode + * + * @return {void} + */ + collapse: function () { + Console.setConfig('Mode', 'collapse'); + var pmaConsoleHeight = Math.max(92, Console.config.Height); + Console.$consoleToolbar.addClass('collapsed'); + Console.$consoleAllContents.height(pmaConsoleHeight); + Console.$consoleContent.stop(); + Console.$consoleContent.animate({ + 'margin-bottom': -1 * Console.$consoleContent.outerHeight() + 'px' + }, 'fast', 'easeOutQuart', function () { + Console.$consoleContent.css({ + display: 'none' + }); + $(window).trigger('resize'); + }); + Console.hideCard(); + }, + + /** + * Show console + * + * @param {boolean} inputFocus If true, focus the input line after show() + * @return {void} + */ + show: function (inputFocus) { + Console.setConfig('Mode', 'show'); + var pmaConsoleHeight = Math.max(92, Console.config.Height); // eslint-disable-next-line compat/compat + + pmaConsoleHeight = Math.min(Console.config.Height, (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) - 25); + Console.$consoleContent.css({ + display: 'block' + }); + + if (Console.$consoleToolbar.hasClass('collapsed')) { + Console.$consoleToolbar.removeClass('collapsed'); + } + + Console.$consoleAllContents.height(pmaConsoleHeight); + Console.$consoleContent.stop(); + Console.$consoleContent.animate({ + 'margin-bottom': 0 + }, 'fast', 'easeOutQuart', function () { + $(window).trigger('resize'); + + if (inputFocus) { + ConsoleInput.focus(); + } + }); + }, + + /** + * Change console to SQL information mode + * this mode shows current SQL query + * This mode is the default mode + * + * @return {void} + */ + info: function () { + // Under construction + Console.collapse(); + }, + + /** + * Toggle console mode between collapse/show + * Used for toggle buttons and shortcuts + * + * @return {void} + */ + toggle: function () { + switch (Console.config.Mode) { + case 'collapse': + case 'info': + Console.show(true); + break; + + case 'show': + Console.collapse(); + break; + } + }, + + /** + * Scroll console to bottom + * + * @return {void} + */ + scrollBottom: function () { + Console.$consoleContent.scrollTop(Console.$consoleContent.prop('scrollHeight')); + }, + + /** + * Show card + * + * @param {string | JQuery} cardSelector Selector, select string will be "#pma_console " + cardSelector + * this param also can be JQuery object, if you need. + * + * @return {void} + */ + showCard: function (cardSelector) { + var $card = null; + + if (typeof cardSelector !== 'string') { + if (cardSelector.length > 0) { + $card = cardSelector; + } else { + return; + } + } else { + $card = $('#pma_console ' + cardSelector); + } + + if ($card.length === 0) { + return; + } + + $card.parent().children('.mid_layer').show().fadeTo(0, 0.15); + $card.addClass('show'); + ConsoleInput.blur(); + + if ($card.parents('.card').length > 0) { + Console.showCard($card.parents('.card')); + } + }, + + /** + * Scroll console to bottom + * + * @param {object} $targetCard Target card JQuery object, if it's empty, function will hide all cards + * @return {void} + */ + hideCard: function ($targetCard) { + if (!$targetCard) { + $('#pma_console').find('.mid_layer').fadeOut(140); + $('#pma_console').find('.card').removeClass('show'); + } else if ($targetCard.length > 0) { + $targetCard.parent().find('.mid_layer').fadeOut(140); + $targetCard.find('.card').removeClass('show'); + $targetCard.removeClass('show'); + } + }, + + /** + * Used for update console config + * + * @return {void} + */ + updateConfig: function () { + Console.setConfig('AlwaysExpand', $('#pma_console_options input[name=always_expand]').prop('checked')); + Console.setConfig('StartHistory', $('#pma_console_options').find('input[name=start_history]').prop('checked')); + Console.setConfig('CurrentQuery', $('#pma_console_options').find('input[name=current_query]').prop('checked')); + Console.setConfig('EnterExecutes', $('#pma_console_options').find('input[name=enter_executes]').prop('checked')); + Console.setConfig('DarkTheme', $('#pma_console_options').find('input[name=dark_theme]').prop('checked')); + /* Setting the dark theme of the console*/ + + if (Console.config.DarkTheme) { + $('#pma_console').find('>.content').addClass('console_dark_theme'); + } else { + $('#pma_console').find('>.content').removeClass('console_dark_theme'); + } + }, + setConfig: function (key, value) { + Console.config[key] = value; + Functions.configSet('Console/' + key, value); + }, + isSelect: function (queryString) { + var regExp = /^SELECT\s+/i; + return regExp.test(queryString); + } +}; +/** + * Resizer object + * Careful: this object UI logics highly related with functions under Console + * Resizing min-height is 32, if small than it, console will collapse + */ + +var ConsoleResizer = { + posY: 0, + height: 0, + resultHeight: 0, + + /** + * Mousedown event handler for bind to resizer + * + * @param {MouseEvent} event + * + * @return {void} + */ + mouseDown: function (event) { + if (Console.config.Mode !== 'show') { + return; + } + + ConsoleResizer.posY = event.pageY; + ConsoleResizer.height = Console.$consoleContent.height(); + $(document).on('mousemove', ConsoleResizer.mouseMove); + $(document).on('mouseup', ConsoleResizer.mouseUp); // Disable text selection while resizing + + $(document).on('selectstart', function () { + return false; + }); + }, + + /** + * Mousemove event handler for bind to resizer + * + * @param {MouseEvent} event + * + * @return {void} + */ + mouseMove: function (event) { + if (event.pageY < 35) { + event.pageY = 35; + } + + ConsoleResizer.resultHeight = ConsoleResizer.height + (ConsoleResizer.posY - event.pageY); // Content min-height is 32, if adjusting height small than it we'll move it out of the page + + if (ConsoleResizer.resultHeight <= 32) { + Console.$consoleAllContents.height(32); + Console.$consoleContent.css('margin-bottom', ConsoleResizer.resultHeight - 32); + } else { + // Logic below makes viewable area always at bottom when adjusting height and content already at bottom + if (Console.$consoleContent.scrollTop() + Console.$consoleContent.innerHeight() + 16 >= Console.$consoleContent.prop('scrollHeight')) { + Console.$consoleAllContents.height(ConsoleResizer.resultHeight); + Console.scrollBottom(); + } else { + Console.$consoleAllContents.height(ConsoleResizer.resultHeight); + } + } + }, + + /** + * Mouseup event handler for bind to resizer + * + * @return {void} + */ + mouseUp: function () { + Console.setConfig('Height', ConsoleResizer.resultHeight); + Console.show(); + $(document).off('mousemove'); + $(document).off('mouseup'); + $(document).off('selectstart'); + }, + + /** + * Used for console resizer initialize + * + * @return {void} + */ + initialize: function () { + $('#pma_console').find('.toolbar').off('mousedown'); + $('#pma_console').find('.toolbar').on('mousedown', ConsoleResizer.mouseDown); + } +}; +/** + * Console input object + */ + +var ConsoleInput = { + /** + * @var array, contains Codemirror objects or input jQuery objects + * @access private + */ + inputs: null, + + /** + * @var {boolean}, if codemirror enabled + * @access private + */ + codeMirror: false, + + /** + * @var {number}, count for history navigation, 0 for current input + * @access private + */ + historyCount: 0, + + /** + * @var {string}, current input when navigating through history + * @access private + */ + historyPreserveCurrent: null, + + /** + * Used for console input initialize + * + * @return {void} + */ + initialize: function () { + // _cm object can't be reinitialize + if (ConsoleInput.inputs !== null) { + return; + } + + if (typeof CodeMirror !== 'undefined') { + ConsoleInput.codeMirror = true; + } + + ConsoleInput.inputs = []; + + if (ConsoleInput.codeMirror) { + // eslint-disable-next-line new-cap + ConsoleInput.inputs.console = CodeMirror($('#pma_console').find('.console_query_input')[0], { + theme: 'pma', + mode: 'text/x-sql', + lineWrapping: true, + extraKeys: { + 'Ctrl-Space': 'autocomplete' + }, + hintOptions: { + 'completeSingle': false, + 'completeOnSingleClick': true + }, + gutters: ['CodeMirror-lint-markers'], + lint: { + 'getAnnotations': CodeMirror.sqlLint, + 'async': true + } + }); + ConsoleInput.inputs.console.on('inputRead', Functions.codeMirrorAutoCompleteOnInputRead); + ConsoleInput.inputs.console.on('keydown', function (instance, event) { + ConsoleInput.historyNavigate(event); + }); + + if ($('#pma_bookmarks').length !== 0) { + // eslint-disable-next-line new-cap + ConsoleInput.inputs.bookmark = CodeMirror($('#pma_console').find('.bookmark_add_input')[0], { + theme: 'pma', + mode: 'text/x-sql', + lineWrapping: true, + extraKeys: { + 'Ctrl-Space': 'autocomplete' + }, + hintOptions: { + 'completeSingle': false, + 'completeOnSingleClick': true + }, + gutters: ['CodeMirror-lint-markers'], + lint: { + 'getAnnotations': CodeMirror.sqlLint, + 'async': true + } + }); + ConsoleInput.inputs.bookmark.on('inputRead', Functions.codeMirrorAutoCompleteOnInputRead); + } + } else { + ConsoleInput.inputs.console = $(''; + var $ajaxDialog = $('
' + data.message + '
').dialog({ + width: 500, + buttons: buttonOptions, + title: data.title + }); // Attach syntax highlighted editor to export dialog + + /** + * @var $elm jQuery object containing the reference + * to the Export textarea. + */ + + var $elm = $ajaxDialog.find('textarea'); + Functions.getSqlEditor($elm); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } // end showExport() + + }, + // end exportDialog() + editorDialog: function (isNew, $this) { + var that = this; + /** + * @var $edit_row jQuery object containing the reference to + * the row of the the item being edited + * from the list of items + */ + + var $editRow = null; + + if ($this.hasClass('edit_anchor')) { + // Remember the row of the item being edited for later, + // so that if the edit is successful, we can replace the + // row with info about the modified item. + $editRow = $this.parents('tr'); + } + /** + * @var $msg jQuery object containing the reference to + * the AJAX message shown to the user + */ + + + var $msg = Functions.ajaxShowMessage(); + $.get($this.attr('href'), { + 'ajax_request': true + }, function (data) { + if (data.success === true) { + // We have successfully fetched the editor form + Functions.ajaxRemoveMessage($msg); // Now define the function that is called when + // the user presses the "Go" button + + that.buttonOptions[Messages.strGo] = function () { + // Move the data from the codemirror editor back to the + // textarea, where it can be used in the form submission. + if (typeof CodeMirror !== 'undefined') { + that.syntaxHiglighter.save(); + } // Validate editor and submit request, if passed. + + + if (that.validate()) { + /** + * @var data Form data to be sent in the AJAX request + */ + var data = $('form.rte_form').last().serialize(); + $msg = Functions.ajaxShowMessage(Messages.strProcessingRequest); + var url = $('form.rte_form').last().attr('action'); + $.post(url, data, function (data) { + if (data.success === true) { + // Item created successfully + Functions.ajaxRemoveMessage($msg); + Functions.slidingMessage(data.message); + that.$ajaxDialog.dialog('close'); // If we are in 'edit' mode, we must + // remove the reference to the old row. + + if (mode === 'edit' && $editRow !== null) { + $editRow.remove(); + } // Sometimes, like when moving a trigger from + // a table to another one, the new row should + // not be inserted into the list. In this case + // "data.insert" will be set to false. + + + if (data.insert) { + // Insert the new row at the correct + // location in the list of items + + /** + * @var text Contains the name of an item from + * the list that is used in comparisons + * to find the correct location where + * to insert a new row. + */ + var text = ''; + /** + * @var inserted Whether a new item has been + * inserted in the list or not + */ + + var inserted = false; + $('table.data').find('tr').each(function () { + text = $(this).children('td').eq(0).find('strong').text().toUpperCase().trim(); + + if (text !== '' && text > data.name) { + $(this).before(data.new_row); + inserted = true; + return false; + } + }); + + if (!inserted) { + // If we didn't manage to insert the row yet, + // it must belong at the end of the list, + // so we insert it there. + $('table.data').append(data.new_row); + } // Fade-in the new row + + + $('tr.ajaxInsert').show('slow').removeClass('ajaxInsert'); + } else if ($('table.data').find('tr').has('td').length === 0) { + // If we are not supposed to insert the new row, + // we will now check if the table is empty and + // needs to be hidden. This will be the case if + // we were editing the only item in the list, + // which we removed and will not be inserting + // something else in its place. + $('table.data').hide('slow', function () { + $('#nothing2display').show('slow'); + }); + } // Now we have inserted the row at the correct + // position, but surely at least some row classes + // are wrong now. So we will iterate through + // all rows and assign correct classes to them + + /** + * @var ct Count of processed rows + */ + + + var ct = 0; + /** + * @var rowclass Class to be attached to the row + * that is being processed + */ + + var rowclass = ''; + $('table.data').find('tr').has('td').each(function () { + rowclass = ct % 2 === 0 ? 'odd' : 'even'; + $(this).removeClass().addClass(rowclass); + ct++; + }); // If this is the first item being added, remove + // the "No items" message and show the list. + + if ($('table.data').find('tr').has('td').length > 0 && $('#nothing2display').is(':visible')) { + $('#nothing2display').hide('slow', function () { + $('table.data').show('slow'); + }); + } + + Navigation.reload(); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.post() + } // end "if (that.validate())" + + }; // end of function that handles the submission of the Editor + + + that.buttonOptions[Messages.strClose] = function () { + $(this).dialog('close'); + }; + /** + * Display the dialog to the user + */ + + + that.$ajaxDialog = $('
' + data.message + '
').dialog({ + width: 700, + minWidth: 500, + buttons: that.buttonOptions, + // Issue #15810 - use button titles for modals (eg: new procedure) + // Respect the order: title on href tag, href content, title sent in response + title: $this.attr('title') || $this.text() || $(data.title).text(), + modal: true, + open: function () { + $('#rteDialog').dialog('option', 'max-height', $(window).height()); + + if ($('#rteDialog').parents('.ui-dialog').height() > $(window).height()) { + $('#rteDialog').dialog('option', 'height', $(window).height()); + } + + $(this).find('input[name=item_name]').trigger('focus'); + $(this).find('input.datefield').each(function () { + Functions.addDatepicker($(this).css('width', '95%'), 'date'); + }); + $(this).find('input.datetimefield').each(function () { + Functions.addDatepicker($(this).css('width', '95%'), 'datetime'); + }); + $.datepicker.initialized = false; + }, + close: function () { + $(this).remove(); + } + }); + /** + * @var mode Used to remember whether the editor is in + * "Edit" or "Add" mode + */ + + var mode = 'add'; + + if ($('input[name=editor_process_edit]').length > 0) { + mode = 'edit'; + } // Attach syntax highlighted editor to the definition + + /** + * @var elm jQuery object containing the reference to + * the Definition textarea. + */ + + + var $elm = $('textarea[name=item_definition]').last(); + var linterOptions = {}; + linterOptions.eventEditor = true; + that.syntaxHiglighter = Functions.getSqlEditor($elm, {}, 'both', linterOptions); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.get() + }, + dropDialog: function ($this) { + /** + * @var $curr_row Object containing reference to the current row + */ + var $currRow = $this.parents('tr'); + /** + * @var question String containing the question to be asked for confirmation + */ + + var question = $('
').text($currRow.children('td').children('.drop_sql').html()); // We ask for confirmation first here, before submitting the ajax request + + $this.confirm(question, $this.attr('href'), function (url) { + /** + * @var msg jQuery object containing the reference to + * the AJAX message shown to the user + */ + var $msg = Functions.ajaxShowMessage(Messages.strProcessingRequest); + var params = Functions.getJsConfirmCommonParam(this, $this.getPostData()); + $.post(url, params, function (data) { + if (data.success === true) { + /** + * @var $table Object containing reference + * to the main list of elements + */ + var $table = $currRow.parent(); // Check how many rows will be left after we remove + // the one that the user has requested us to remove + + if ($table.find('tr').length === 3) { + // If there are two rows left, it means that they are + // the header of the table and the rows that we are + // about to remove, so after the removal there will be + // nothing to show in the table, so we hide it. + $table.hide('slow', function () { + $(this).find('tr.even, tr.odd').remove(); + $('.withSelected').remove(); + $('#nothing2display').show('slow'); + }); + } else { + $currRow.hide('slow', function () { + $(this).remove(); // Now we have removed the row from the list, but maybe + // some row classes are wrong now. So we will iterate + // through all rows and assign correct classes to them. + + /** + * @var ct Count of processed rows + */ + + var ct = 0; + /** + * @var rowclass Class to be attached to the row + * that is being processed + */ + + var rowclass = ''; + $table.find('tr').has('td').each(function () { + rowclass = ct % 2 === 1 ? 'odd' : 'even'; + $(this).removeClass().addClass(rowclass); + ct++; + }); + }); + } // Get rid of the "Loading" message + + + Functions.ajaxRemoveMessage($msg); // Show the query that we just executed + + Functions.slidingMessage(data.sql_query); + Navigation.reload(); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.post() + }); + }, + dropMultipleDialog: function ($this) { + // We ask for confirmation here + $this.confirm(Messages.strDropRTEitems, '', function () { + /** + * @var msg jQuery object containing the reference to + * the AJAX message shown to the user + */ + var $msg = Functions.ajaxShowMessage(Messages.strProcessingRequest); // drop anchors of all selected rows + + var dropAnchors = $('input.checkall:checked').parents('tr').find('.drop_anchor'); + var success = true; + var count = dropAnchors.length; + var returnCount = 0; + dropAnchors.each(function () { + var $anchor = $(this); + /** + * @var $curr_row Object containing reference to the current row + */ + + var $currRow = $anchor.parents('tr'); + var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); + $.post($anchor.attr('href'), params, function (data) { + returnCount++; + + if (data.success === true) { + /** + * @var $table Object containing reference + * to the main list of elements + */ + var $table = $currRow.parent(); // Check how many rows will be left after we remove + // the one that the user has requested us to remove + + if ($table.find('tr').length === 3) { + // If there are two rows left, it means that they are + // the header of the table and the rows that we are + // about to remove, so after the removal there will be + // nothing to show in the table, so we hide it. + $table.hide('slow', function () { + $(this).find('tr.even, tr.odd').remove(); + $('.withSelected').remove(); + $('#nothing2display').show('slow'); + }); + } else { + $currRow.hide('fast', function () { + // we will iterate + // through all rows and assign correct classes to them. + + /** + * @var ct Count of processed rows + */ + var ct = 0; + /** + * @var rowclass Class to be attached to the row + * that is being processed + */ + + var rowclass = ''; + $table.find('tr').has('td').each(function () { + rowclass = ct % 2 === 1 ? 'odd' : 'even'; + $(this).removeClass().addClass(rowclass); + ct++; + }); + }); + $currRow.remove(); + } + + if (returnCount === count) { + if (success) { + // Get rid of the "Loading" message + Functions.ajaxRemoveMessage($msg); + $('#rteListForm_checkall').prop({ + checked: false, + indeterminate: false + }); + } + + Navigation.reload(); + } + } else { + Functions.ajaxShowMessage(data.error, false); + success = false; + + if (returnCount === count) { + Navigation.reload(); + } + } + }); // end $.post() + }); // end drop_anchors.each() + }); + }, + + /** + * Validate custom editor form fields. + * + * @return {bool} + */ + validateCustom: function () { + /** + * @var elm a jQuery object containing the reference + * to an element that is being validated + */ + var $elm = null; + + if (this.$ajaxDialog.find('select[name=item_type]').find(':selected').val() === 'RECURRING') { + // The interval field must not be empty for recurring events + $elm = this.$ajaxDialog.find('input[name=item_interval_value]'); + + if ($elm.val() === '') { + $elm.trigger('focus'); + alert(Messages.strFormEmpty); + return false; + } + } else { + // The execute_at field must not be empty for "once off" events + $elm = this.$ajaxDialog.find('input[name=item_execute_at]'); + + if ($elm.val() === '') { + $elm.trigger('focus'); + alert(Messages.strFormEmpty); + return false; + } + } + + return true; + } +}; +AJAX.registerOnload('database/events.js', function () { + /** + * Attach Ajax event handlers for the Add/Edit functionality. + */ + $(document).on('click', 'a.ajax.add_anchor, a.ajax.edit_anchor', function (event) { + event.preventDefault(); + + if ($(this).hasClass('add_anchor')) { + $.datepicker.initialized = false; + } + + DatabaseEvents.editorDialog($(this).hasClass('add_anchor'), $(this)); + }); + /** + * Attach Ajax event handlers for Export + */ + + $(document).on('click', 'a.ajax.export_anchor', function (event) { + event.preventDefault(); + DatabaseEvents.exportDialog($(this)); + }); // end $(document).on() + + $(document).on('click', '#bulkActionExportButton', function (event) { + event.preventDefault(); + DatabaseEvents.exportDialog($(this)); + }); // end $(document).on() + + /** + * Attach Ajax event handlers for Drop functionality + */ + + $(document).on('click', 'a.ajax.drop_anchor', function (event) { + event.preventDefault(); + DatabaseEvents.dropDialog($(this)); + }); // end $(document).on() + + $(document).on('click', '#bulkActionDropButton', function (event) { + event.preventDefault(); + DatabaseEvents.dropMultipleDialog($(this)); + }); // end $(document).on() + + /** + * Attach Ajax event handlers for the "Change event type" functionality, so that the correct + * rows are shown in the editor when changing the event type + */ + + $(document).on('change', 'select[name=item_type]', function () { + $(this).closest('table').find('tr.recurring_event_row, tr.onetime_event_row').toggle(); + }); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/database/operations.js b/Sources/php_script/script/phpMyAdmin/js/dist/database/operations.js new file mode 100644 index 0000000..3312b51 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/database/operations.js @@ -0,0 +1,170 @@ +/** + * @fileoverview function used in server privilege pages + * @name Database Operations + * + * @requires jQuery + * @requires jQueryUI + * @requires js/functions.js + * + */ + +/** + * Ajax event handlers here for /database/operations + * + * Actions Ajaxified here: + * Rename Database + * Copy Database + * Change Charset + * Drop Database + */ + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('database/operations.js', function () { + $(document).off('submit', '#rename_db_form.ajax'); + $(document).off('submit', '#copy_db_form.ajax'); + $(document).off('submit', '#change_db_charset_form.ajax'); + $(document).off('click', '#drop_db_anchor.ajax'); +}); +AJAX.registerOnload('database/operations.js', function () { + /** + * Ajax event handlers for 'Rename Database' + */ + $(document).on('submit', '#rename_db_form.ajax', function (event) { + event.preventDefault(); + + if (Functions.emptyCheckTheField(this, 'newname')) { + Functions.ajaxShowMessage(Messages.strFormEmpty, false, 'error'); + return false; + } + + var oldDbName = CommonParams.get('db'); + var newDbName = $('#new_db_name').val(); + + if (newDbName === oldDbName) { + Functions.ajaxShowMessage(Messages.strDatabaseRenameToSameName, false, 'error'); + return false; + } + + var $form = $(this); + var question = Functions.escapeHtml('CREATE DATABASE ' + newDbName + ' / DROP DATABASE ' + oldDbName); + Functions.prepareForAjaxRequest($form); + $form.confirm(question, $form.attr('action'), function (url) { + Functions.ajaxShowMessage(Messages.strRenamingDatabases, false); + $.post(url, $('#rename_db_form').serialize() + CommonParams.get('arg_separator') + 'is_js_confirmed=1', function (data) { + if (typeof data !== 'undefined' && data.success === true) { + Functions.ajaxShowMessage(data.message); + CommonParams.set('db', data.newname); + Navigation.reload(function () { + $('#pma_navigation_tree').find('a:not(\'.expander\')').each(function () { + var $thisAnchor = $(this); + + if ($thisAnchor.text() === data.newname) { + // simulate a click on the new db name + // in navigation + $thisAnchor.trigger('click'); + } + }); + }); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.post() + }); + }); // end Rename Database + + /** + * Ajax Event Handler for 'Copy Database' + */ + + $(document).on('submit', '#copy_db_form.ajax', function (event) { + event.preventDefault(); + + if (Functions.emptyCheckTheField(this, 'newname')) { + Functions.ajaxShowMessage(Messages.strFormEmpty, false, 'error'); + return false; + } + + Functions.ajaxShowMessage(Messages.strCopyingDatabase, false); + var $form = $(this); + Functions.prepareForAjaxRequest($form); + $.post($form.attr('action'), $form.serialize(), function (data) { + // use messages that stay on screen + $('.alert-success, .alert-danger').fadeOut(); + + if (typeof data !== 'undefined' && data.success === true) { + if ($('#checkbox_switch').is(':checked')) { + CommonParams.set('db', data.newname); + CommonActions.refreshMain(false, function () { + Functions.ajaxShowMessage(data.message); + }); + } else { + CommonParams.set('db', data.db); + Functions.ajaxShowMessage(data.message); + } + + Navigation.reload(); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.post() + }); // end copy database + + /** + * Change tables columns visible only if change tables is checked + */ + + $('#span_change_all_tables_columns_collations').hide(); + $('#checkbox_change_all_tables_collations').on('click', function () { + $('#span_change_all_tables_columns_collations').toggle(); + }); + /** + * Ajax Event handler for 'Change Charset' of the database + */ + + $(document).on('submit', '#change_db_charset_form.ajax', function (event) { + event.preventDefault(); + var $form = $(this); + Functions.prepareForAjaxRequest($form); + Functions.ajaxShowMessage(Messages.strChangingCharset); + $.post($form.attr('action'), $form.serialize(), function (data) { + if (typeof data !== 'undefined' && data.success === true) { + Functions.ajaxShowMessage(data.message); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.post() + }); // end change charset + + /** + * Ajax event handlers for Drop Database + */ + + $(document).on('click', '#drop_db_anchor.ajax', function (event) { + event.preventDefault(); + var $link = $(this); + /** + * @var {String} question String containing the question to be asked for confirmation + */ + + var question = Messages.strDropDatabaseStrongWarning + ' '; + question += Functions.sprintf(Messages.strDoYouReally, 'DROP DATABASE `' + Functions.escapeHtml(CommonParams.get('db') + '`')); + var params = Functions.getJsConfirmCommonParam(this, $link.getPostData()); + $(this).confirm(question, $(this).attr('href'), function (url) { + Functions.ajaxShowMessage(Messages.strProcessingRequest); + $.post(url, params, function (data) { + if (typeof data !== 'undefined' && data.success) { + // Database deleted successfully, refresh both the frames + Navigation.reload(); + CommonParams.set('db', ''); + CommonActions.refreshMain('index.php?route=/server/databases', function () { + Functions.ajaxShowMessage(data.message); + }); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); + }); + }); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/database/query_generator.js b/Sources/php_script/script/phpMyAdmin/js/dist/database/query_generator.js new file mode 100644 index 0000000..3b215be --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/database/query_generator.js @@ -0,0 +1,147 @@ +/** + * @fileoverview function used in QBE for DB + * @name Database Operations + * + * @requires jQuery + * @requires jQueryUI + * @requires js/functions.js + * + */ + +/* global sprintf */ +// js/vendor/sprintf.js +function getFormatsText() { + return { + '=': ' = \'%s\'', + '>': ' > \'%s\'', + '>=': ' >= \'%s\'', + '<': ' < \'%s\'', + '<=': ' <= \'%s\'', + '!=': ' != \'%s\'', + 'LIKE': ' LIKE \'%s\'', + 'LIKE %...%': ' LIKE \'%%%s%%\'', + 'NOT LIKE': ' NOT LIKE \'%s\'', + 'NOT LIKE %...%': ' NOT LIKE \'%%%s%%\'', + 'BETWEEN': ' BETWEEN \'%s\'', + 'NOT BETWEEN': ' NOT BETWEEN \'%s\'', + 'IS NULL': ' \'%s\' IS NULL', + 'IS NOT NULL': ' \'%s\' IS NOT NULL', + 'REGEXP': ' REGEXP \'%s\'', + 'REGEXP ^...$': ' REGEXP \'^%s$\'', + 'NOT REGEXP': ' NOT REGEXP \'%s\'' + }; +} + +function generateCondition(criteriaDiv, table) { + var query = '`' + Functions.escapeBacktick(table.val()) + '`.'; + query += '`' + Functions.escapeBacktick(table.siblings('.columnNameSelect').first().val()) + '`'; + + if (criteriaDiv.find('.criteria_rhs').first().val() === 'text') { + var formatsText = getFormatsText(); + query += sprintf(formatsText[criteriaDiv.find('.criteria_op').first().val()], Functions.escapeSingleQuote(criteriaDiv.find('.rhs_text_val').first().val())); + } else { + query += ' ' + criteriaDiv.find('.criteria_op').first().val(); + query += ' `' + Functions.escapeBacktick(criteriaDiv.find('.tableNameSelect').first().val()) + '`.'; + query += '`' + Functions.escapeBacktick(criteriaDiv.find('.columnNameSelect').first().val()) + '`'; + } + + return query; +} // eslint-disable-next-line no-unused-vars + + +function generateWhereBlock() { + var count = 0; + var query = ''; + $('.tableNameSelect').each(function () { + var criteriaDiv = $(this).siblings('.jsCriteriaOptions').first(); + var useCriteria = $(this).siblings('.criteria_col').first(); + + if ($(this).val() !== '' && useCriteria.prop('checked')) { + if (count > 0) { + criteriaDiv.find('input.logical_op').each(function () { + if ($(this).prop('checked')) { + query += ' ' + $(this).val() + ' '; + } + }); + } + + query += generateCondition(criteriaDiv, $(this)); + count++; + } + }); + return query; +} + +function generateJoin(newTable, tableAliases, fk) { + var query = ''; + query += ' \n\tLEFT JOIN ' + '`' + Functions.escapeBacktick(newTable) + '`'; + + if (tableAliases[fk.TABLE_NAME][0] !== '') { + query += ' AS `' + Functions.escapeBacktick(tableAliases[newTable][0]) + '`'; + query += ' ON `' + Functions.escapeBacktick(tableAliases[fk.TABLE_NAME][0]) + '`'; + } else { + query += ' ON `' + Functions.escapeBacktick(fk.TABLE_NAME) + '`'; + } + + query += '.`' + fk.COLUMN_NAME + '`'; + + if (tableAliases[fk.REFERENCED_TABLE_NAME][0] !== '') { + query += ' = `' + Functions.escapeBacktick(tableAliases[fk.REFERENCED_TABLE_NAME][0]) + '`'; + } else { + query += ' = `' + Functions.escapeBacktick(fk.REFERENCED_TABLE_NAME) + '`'; + } + + query += '.`' + fk.REFERENCED_COLUMN_NAME + '`'; + return query; +} + +function existReference(table, fk, usedTables) { + var isReferredBy = fk.TABLE_NAME === table && usedTables.includes(fk.REFERENCED_TABLE_NAME); + var isReferencedBy = fk.REFERENCED_TABLE_NAME === table && usedTables.includes(fk.TABLE_NAME); + return isReferredBy || isReferencedBy; +} + +function tryJoinTable(table, tableAliases, usedTables, foreignKeys) { + for (var i = 0; i < foreignKeys.length; i++) { + var fk = foreignKeys[i]; + + if (existReference(table, fk, usedTables)) { + return generateJoin(table, tableAliases, fk); + } + } + + return ''; +} + +function appendTable(table, tableAliases, usedTables, foreignKeys) { + var query = tryJoinTable(table, tableAliases, usedTables, foreignKeys); + + if (query === '') { + if (usedTables.length > 0) { + query += '\n\t, '; + } + + query += '`' + Functions.escapeBacktick(table) + '`'; + + if (tableAliases[table][0] !== '') { + query += ' AS `' + Functions.escapeBacktick(tableAliases[table][0]) + '`'; + } + } + + usedTables.push(table); + return query; +} // eslint-disable-next-line no-unused-vars + + +function generateFromBlock(tableAliases, foreignKeys) { + var usedTables = []; + var query = ''; + + for (var table in tableAliases) { + if (tableAliases.hasOwnProperty(table)) { + query += appendTable(table, tableAliases, usedTables, foreignKeys); + } + } + + return query; +} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/database/search.js b/Sources/php_script/script/phpMyAdmin/js/dist/database/search.js new file mode 100644 index 0000000..718c1d0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/database/search.js @@ -0,0 +1,260 @@ +/** + * JavaScript functions used on Database Search page + * + * @requires jQuery + * @requires js/functions.js + * + * @package PhpMyAdmin + */ + +/* global makeGrid */ +// js/makegrid.js + +/** + * AJAX script for the Database Search page. + * + * Actions ajaxified here: + * Retrieve result of SQL query + */ + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('database/search.js', function () { + $('a.browse_results').off('click'); + $('a.delete_results').off('click'); + $('#buttonGo').off('click'); + $('#togglesearchresultlink').off('click'); + $('#togglequerybox').off('click'); + $('#togglesearchformlink').off('click'); + $('#select_all').off('click'); + $('#unselect_all').off('click'); + $(document).off('submit', '#db_search_form.ajax'); +}); +AJAX.registerOnload('database/search.js', function () { + /** Hide the table link in the initial search result */ + var icon = Functions.getImage('s_tbl', '', { + 'id': 'table-image' + }).toString(); + $('#table-info').prepend(icon).hide(); + /** Hide the browse and deleted results in the new search criteria */ + + $('#buttonGo').on('click', function () { + $('#table-info').hide(); + $('#browse-results').hide(); + $('#sqlqueryform').hide(); + $('#togglequerybox').hide(); + }); + /** + * Prepare a div containing a link for toggle the search results + */ + + $('#togglesearchresultsdiv') + /** don't show it until we have results on-screen */ + .hide(); + /** + * Changing the displayed text according to + * the hide/show criteria in search result forms + */ + + $('#togglesearchresultlink').html(Messages.strHideSearchResults).on('click', function () { + var $link = $(this); + $('#searchresults').slideToggle(); + + if ($link.text() === Messages.strHideSearchResults) { + $link.text(Messages.strShowSearchResults); + } else { + $link.text(Messages.strHideSearchResults); + } + /** avoid default click action */ + + + return false; + }); + /** + * Prepare a div containing a link for toggle the search form, + * otherwise it's incorrectly displayed after a couple of clicks + */ + + $('#togglesearchformdiv').hide(); // don't show it until we have results on-screen + + /** + * Changing the displayed text according to + * the hide/show criteria in search form + */ + + $('#togglequerybox').hide().on('click', function () { + var $link = $(this); + $('#sqlqueryform').slideToggle('medium'); + + if ($link.text() === Messages.strHideQueryBox) { + $link.text(Messages.strShowQueryBox); + } else { + $link.text(Messages.strHideQueryBox); + } + /** avoid default click action */ + + + return false; + }); + /** don't show it until we have results on-screen */ + + /** + * Changing the displayed text according to + * the hide/show criteria in search criteria form + */ + + $('#togglesearchformlink').html(Messages.strShowSearchCriteria).on('click', function () { + var $link = $(this); + $('#db_search_form').slideToggle(); + + if ($link.text() === Messages.strHideSearchCriteria) { + $link.text(Messages.strShowSearchCriteria); + } else { + $link.text(Messages.strHideSearchCriteria); + } + /** avoid default click action */ + + + return false; + }); + /* + * Ajax Event handler for retrieving the results from a table + */ + + $(document).on('click', 'a.browse_results', function (e) { + e.preventDefault(); + /** Hides the results shown by the delete criteria */ + + var $msg = Functions.ajaxShowMessage(Messages.strBrowsing, false); + $('#sqlqueryform').hide(); + $('#togglequerybox').hide(); + /** Load the browse results to the page */ + + $('#table-info').show(); + var tableName = $(this).data('table-name'); + $('#table-link').attr({ + 'href': $(this).attr('href') + }).text(tableName); + var url = $(this).attr('href') + '#searchresults'; + var browseSql = $(this).data('browse-sql'); + var params = { + 'ajax_request': true, + 'is_js_confirmed': true, + 'sql_query': browseSql + }; + $.post(url, params, function (data) { + if (typeof data !== 'undefined' && data.success) { + $('#browse-results').html(data.message); + Functions.ajaxRemoveMessage($msg); + $('.table_results').each(function () { + makeGrid(this, true, true, true, true); + }); + $('#browse-results').show(); + Functions.highlightSql($('#browse-results')); + $('html, body').animate({ + scrollTop: $('#browse-results').offset().top + }, 1000); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); + }); + /* + * Ajax Event handler for deleting the results from a table + */ + + $(document).on('click', 'a.delete_results', function (e) { + e.preventDefault(); + /** Hides the results shown by the browse criteria */ + + $('#table-info').hide(); + $('#sqlqueryform').hide(); + $('#togglequerybox').hide(); + /** Conformation message for deletion */ + + var msg = Functions.sprintf(Messages.strConfirmDeleteResults, $(this).data('table-name')); + + if (confirm(msg)) { + var $msg = Functions.ajaxShowMessage(Messages.strDeleting, false); + /** Load the deleted option to the page*/ + + $('#sqlqueryform').html(''); + var params = { + 'ajax_request': true, + 'is_js_confirmed': true, + 'sql_query': $(this).data('delete-sql') + }; + var url = $(this).attr('href'); + $.post(url, params, function (data) { + if (typeof data === 'undefined' || !data.success) { + Functions.ajaxShowMessage(data.error, false); + return; + } + + $('#sqlqueryform').html(data.sql_query); + /** Refresh the search results after the deletion */ + + $('#buttonGo').trigger('click'); + $('#togglequerybox').html(Messages.strHideQueryBox); + /** Show the results of the deletion option */ + + $('#browse-results').hide(); + $('#sqlqueryform').show(); + $('#togglequerybox').show(); + $('html, body').animate({ + scrollTop: $('#browse-results').offset().top + }, 1000); + Functions.ajaxRemoveMessage($msg); + }); + } + }); + /** + * Ajax Event handler for retrieving the result of an SQL Query + */ + + $(document).on('submit', '#db_search_form.ajax', function (event) { + event.preventDefault(); + + if ($('#criteriaTables :selected').length === 0) { + Functions.ajaxShowMessage(Messages.strNoTableSelected); + return; + } + + var $msgbox = Functions.ajaxShowMessage(Messages.strSearching, false); // jQuery object to reuse + + var $form = $(this); + Functions.prepareForAjaxRequest($form); + var url = $form.serialize() + CommonParams.get('arg_separator') + 'submit_search=' + $('#buttonGo').val(); + $.post($form.attr('action'), url, function (data) { + if (typeof data !== 'undefined' && data.success === true) { + // found results + $('#searchresults').html(data.message); + $('#togglesearchresultlink') // always start with the Show message + .text(Messages.strHideSearchResults); + $('#togglesearchresultsdiv') // now it's time to show the div containing the link + .show(); + $('#searchresults').show(); + $('#db_search_form') // workaround for Chrome problem (bug #3168569) + .slideToggle().hide(); + $('#togglesearchformlink') // always start with the Show message + .text(Messages.strShowSearchCriteria); + $('#togglesearchformdiv') // now it's time to show the div containing the link + .show(); + } else { + // error message (zero rows) + $('#searchresults').html(data.error).show(); + } + + Functions.ajaxRemoveMessage($msgbox); + }); + }); + $('#select_all').on('click', function () { + Functions.setSelectOptions('db_search', 'criteriaTables[]', true); + return false; + }); + $('#unselect_all').on('click', function () { + Functions.setSelectOptions('db_search', 'criteriaTables[]', false); + return false; + }); +}); // end $() \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/database/tracking.js b/Sources/php_script/script/phpMyAdmin/js/dist/database/tracking.js new file mode 100644 index 0000000..d9eabf3 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/database/tracking.js @@ -0,0 +1,105 @@ +/** + * Unbind all event handlers before tearing down the page + */ +AJAX.registerTeardown('database/tracking.js', function () { + $('body').off('click', '#trackedForm.ajax button[name="submit_mult"], #trackedForm.ajax input[name="submit_mult"]'); + $('body').off('click', '#untrackedForm.ajax button[name="submit_mult"], #untrackedForm.ajax input[name="submit_mult"]'); + $('body').off('click', 'a.delete_tracking_anchor.ajax'); +}); +/** + * Bind event handlers + */ + +AJAX.registerOnload('database/tracking.js', function () { + var $versions = $('#versions'); + $versions.find('tr').first().find('th').append($('
')); + $versions.tablesorter({ + sortList: [[1, 0]], + headers: { + 0: { + sorter: false + }, + 2: { + sorter: 'integer' + }, + 5: { + sorter: false + }, + 6: { + sorter: false + }, + 7: { + sorter: false + } + } + }); + var $noVersions = $('#noversions'); + $noVersions.find('tr').first().find('th').append($('
')); + $noVersions.tablesorter({ + sortList: [[1, 0]], + headers: { + 0: { + sorter: false + }, + 2: { + sorter: false + } + } + }); + var $body = $('body'); + /** + * Handles multi submit for tracked tables + */ + + $body.on('click', '#trackedForm.ajax button[name="submit_mult"], #trackedForm.ajax input[name="submit_mult"]', function (e) { + e.preventDefault(); + var $button = $(this); + var $form = $button.parent('form'); + var argsep = CommonParams.get('arg_separator'); + var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep + 'submit_mult=' + $button.val(); + + if ($button.val() === 'delete_tracking') { + var question = Messages.strDeleteTrackingDataMultiple; + $button.confirm(question, $form.attr('action'), function (url) { + Functions.ajaxShowMessage(Messages.strDeletingTrackingData); + AJAX.source = $form; + $.post(url, submitData, AJAX.responseHandler); + }); + } else { + Functions.ajaxShowMessage(); + AJAX.source = $form; + $.post($form.attr('action'), submitData, AJAX.responseHandler); + } + }); + /** + * Handles multi submit for untracked tables + */ + + $body.on('click', '#untrackedForm.ajax button[name="submit_mult"], #untrackedForm.ajax input[name="submit_mult"]', function (e) { + e.preventDefault(); + var $button = $(this); + var $form = $button.parent('form'); + var argsep = CommonParams.get('arg_separator'); + var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep + 'submit_mult=' + $button.val(); + Functions.ajaxShowMessage(); + AJAX.source = $form; + $.post($form.attr('action'), submitData, AJAX.responseHandler); + }); + /** + * Ajax Event handler for 'Delete tracking' + */ + + $body.on('click', 'a.delete_tracking_anchor.ajax', function (e) { + e.preventDefault(); + var $anchor = $(this); + var question = Messages.strDeleteTrackingData; + $anchor.confirm(question, $anchor.attr('href'), function (url) { + Functions.ajaxShowMessage(Messages.strDeletingTrackingData); + AJAX.source = $anchor; + var argSep = CommonParams.get('arg_separator'); + var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); + params += argSep + 'ajax_page_request=1'; + $.post(url, params, AJAX.responseHandler); + }); + }); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/designer/init.js b/Sources/php_script/script/phpMyAdmin/js/dist/designer/init.js new file mode 100644 index 0000000..762c776 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/designer/init.js @@ -0,0 +1,74 @@ +/** + * Initializes the data required to run Designer, then fires it up. + */ + +/* global DesignerOfflineDB */ +// js/designer/database.js + +/* global DesignerHistory */ +// js/designer/history.js + +/* global DesignerMove */ +// js/designer/move.js + +/* global DesignerPage */ +// js/designer/page.js + +/* global designerConfig */ +// templates/database/designer/main.twig + +/* eslint-disable no-unused-vars */ +var jTabs; +var hTabs; +var contr; +var displayField; +var server; +var selectedPage; +/* eslint-enable no-unused-vars */ + +var db; +var designerTablesEnabled; +AJAX.registerTeardown('designer/init.js', function () { + $('.trigger').off('click'); +}); +AJAX.registerOnload('designer/init.js', function () { + $('.trigger').on('click', function () { + $('.panel').toggle('fast'); + $(this).toggleClass('active'); + $('#ab').accordion('refresh'); + return false; + }); + jTabs = designerConfig.scriptTables.j_tabs; + hTabs = designerConfig.scriptTables.h_tabs; + contr = designerConfig.scriptContr; + displayField = designerConfig.scriptDisplayField; + server = designerConfig.server; + selectedPage = designerConfig.displayPage; + db = designerConfig.db; + designerTablesEnabled = designerConfig.tablesEnabled; + DesignerMove.main(); + + if (!designerTablesEnabled) { + DesignerOfflineDB.open(function (success) { + if (success) { + DesignerPage.showTablesInLandingPage(db); + } + }); + } + + $('#query_Aggregate_Button').on('click', function () { + $('#query_Aggregate').css('display', 'none'); + }); + $('#query_having_button').on('click', function () { + $('#query_having').css('display', 'none'); + }); + $('#query_rename_to_button').on('click', function () { + $('#query_rename_to').css('display', 'none'); + }); + $('#build_query_button').on('click', function () { + DesignerHistory.buildQuery('SQL Query on Database', 0); + }); + $('#query_where_button').on('click', function () { + $('#query_where').css('display', 'none'); + }); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/designer/page.js b/Sources/php_script/script/phpMyAdmin/js/dist/designer/page.js new file mode 100644 index 0000000..9e7ab7e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/designer/page.js @@ -0,0 +1,208 @@ +/* global DesignerOfflineDB */ +// js/designer/database.js +// eslint-disable-next-line no-unused-vars + +/* global db, selectedPage:writable */ +// js/designer/init.js + +/* global DesignerMove */ +// js/designer/move.js + +/* global DesignerObjects */ +// js/designer/objects.js +var DesignerPage = {}; + +DesignerPage.showTablesInLandingPage = function (db) { + DesignerPage.loadFirstPage(db, function (page) { + if (page) { + DesignerPage.loadHtmlForPage(page.pgNr); + selectedPage = page.pgNr; + } else { + DesignerPage.showNewPageTables(true); + } + }); +}; + +DesignerPage.saveToNewPage = function (db, pageName, tablePositions, callback) { + DesignerPage.createNewPage(db, pageName, function (page) { + if (page) { + var tblCords = []; + + var saveCallback = function (id) { + tblCords.push(id); + + if (tablePositions.length === tblCords.length) { + page.tblCords = tblCords; + DesignerOfflineDB.addObject('pdf_pages', page); + } + }; + + for (var pos = 0; pos < tablePositions.length; pos++) { + tablePositions[pos].pdfPgNr = page.pgNr; + DesignerPage.saveTablePositions(tablePositions[pos], saveCallback); + } + + if (typeof callback !== 'undefined') { + callback(page); + } + } + }); +}; + +DesignerPage.saveToSelectedPage = function (db, pageId, pageName, tablePositions, callback) { + DesignerPage.deletePage(pageId); + DesignerPage.saveToNewPage(db, pageName, tablePositions, function (page) { + if (typeof callback !== 'undefined') { + callback(page); + } + + selectedPage = page.pgNr; + }); +}; + +DesignerPage.createNewPage = function (db, pageName, callback) { + var newPage = new DesignerObjects.PdfPage(db, pageName); + DesignerOfflineDB.addObject('pdf_pages', newPage, function (pgNr) { + newPage.pgNr = pgNr; + + if (typeof callback !== 'undefined') { + callback(newPage); + } + }); +}; + +DesignerPage.saveTablePositions = function (positions, callback) { + DesignerOfflineDB.addObject('table_coords', positions, callback); +}; + +DesignerPage.createPageList = function (db, callback) { + DesignerOfflineDB.loadAllObjects('pdf_pages', function (pages) { + var html = ''; + + for (var p = 0; p < pages.length; p++) { + var page = pages[p]; + + if (page.dbName === db) { + html += ''; + } + } + + if (typeof callback !== 'undefined') { + callback(html); + } + }); +}; + +DesignerPage.deletePage = function (pageId, callback) { + DesignerOfflineDB.loadObject('pdf_pages', pageId, function (page) { + if (page) { + for (var i = 0; i < page.tblCords.length; i++) { + DesignerOfflineDB.deleteObject('table_coords', page.tblCords[i]); + } + + DesignerOfflineDB.deleteObject('pdf_pages', pageId, callback); + } + }); +}; + +DesignerPage.loadFirstPage = function (db, callback) { + DesignerOfflineDB.loadAllObjects('pdf_pages', function (pages) { + var firstPage = null; + + for (var i = 0; i < pages.length; i++) { + var page = pages[i]; + + if (page.dbName === db) { + // give preference to a page having same name as the db + if (page.pageDescr === db) { + callback(page); + return; + } + + if (firstPage === null) { + firstPage = page; + } + } + } + + callback(firstPage); + }); +}; + +DesignerPage.showNewPageTables = function (check) { + var allTables = $('#id_scroll_tab').find('td input:checkbox'); + allTables.prop('checked', check); + + for (var tab = 0; tab < allTables.length; tab++) { + var input = allTables[tab]; + + if (input.value) { + var element = document.getElementById(input.value); + element.style.top = DesignerPage.getRandom(550, 20) + 'px'; + element.style.left = DesignerPage.getRandom(700, 20) + 'px'; + DesignerMove.visibleTab(input, input.value); + } + } + + selectedPage = -1; + $('#page_name').text(Messages.strUntitled); + DesignerMove.markUnsaved(); +}; + +DesignerPage.loadHtmlForPage = function (pageId) { + DesignerPage.showNewPageTables(true); + DesignerPage.loadPageObjects(pageId, function (page, tblCords) { + $('#name-panel').find('#page_name').text(page.pageDescr); + var tableMissing = false; + + for (var t = 0; t < tblCords.length; t++) { + var tbId = db + '.' + tblCords[t].tableName; + var table = document.getElementById(tbId); + + if (table === null) { + tableMissing = true; + continue; + } + + table.style.top = tblCords[t].y + 'px'; + table.style.left = tblCords[t].x + 'px'; + var checkbox = document.getElementById('check_vis_' + tbId); + checkbox.checked = true; + DesignerMove.visibleTab(checkbox, checkbox.value); + } + + DesignerMove.markSaved(); + + if (tableMissing === true) { + DesignerMove.markUnsaved(); + Functions.ajaxShowMessage(Messages.strSavedPageTableMissing); + } + + selectedPage = page.pgNr; + }); +}; + +DesignerPage.loadPageObjects = function (pageId, callback) { + DesignerOfflineDB.loadObject('pdf_pages', pageId, function (page) { + var tblCords = []; + var count = page.tblCords.length; + + for (var i = 0; i < count; i++) { + DesignerOfflineDB.loadObject('table_coords', page.tblCords[i], function (tblCord) { + tblCords.push(tblCord); + + if (tblCords.length === count) { + if (typeof callback !== 'undefined') { + callback(page, tblCords); + } + } + }); + } + }); +}; + +DesignerPage.getRandom = function (max, min) { + var val = Math.random() * (max - min) + min; + return Math.floor(val); +}; \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/export_output.js b/Sources/php_script/script/phpMyAdmin/js/dist/export_output.js new file mode 100644 index 0000000..5423bd9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/export_output.js @@ -0,0 +1,12 @@ +AJAX.registerOnload('export_output.js', function () { + $(document).on('keydown', function (e) { + if ((e.which || e.keyCode) === 116) { + e.preventDefault(); + $('#export_refresh_form').trigger('submit'); + } + }); + $('.export_refresh_btn').on('click', function (e) { + e.preventDefault(); + $('#export_refresh_form').trigger('submit'); + }); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/gis_data_editor.js b/Sources/php_script/script/phpMyAdmin/js/dist/gis_data_editor.js new file mode 100644 index 0000000..346e569 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/gis_data_editor.js @@ -0,0 +1,368 @@ +/** + * @fileoverview functions used in GIS data editor + * + * @requires jQuery + * + */ + +/* global addZoomPanControllers, storeGisSvgRef, selectVisualization, styleOSM, zoomAndPan */ +// js/table/gis_visualization.js + +/* global themeImagePath */ +// templates/javascript/variables.twig +// eslint-disable-next-line no-unused-vars +var gisEditorLoaded = false; +/** + * Closes the GIS data editor and perform necessary clean up work. + */ + +function closeGISEditor() { + $('#popup_background').fadeOut('fast'); + $('#gis_editor').fadeOut('fast', function () { + $(this).empty(); + }); +} +/** + * Prepares the HTML received via AJAX. + */ + + +function prepareJSVersion() { + // Change the text on the submit button + $('#gis_editor').find('input[name=\'gis_data[save]\']').val(Messages.strCopy).insertAfter($('#gis_data_textarea')).before('

'); // Add close and cancel links + + $('#gis_data_editor').prepend('' + Messages.strClose + ''); + $(' ' + Messages.strCancel + '').insertAfter($('input[name=\'gis_data[save]\']')); // Remove the unnecessary text + + $('div#gis_data_output p').remove(); // Remove 'add' buttons and add links + + $('#gis_editor').find('input.add').each(function () { + var $button = $(this); + $button.addClass('addJs').removeClass('add'); + var classes = $button.attr('class'); + $button.replaceWith('+ ' + $button.val() + ''); + }); +} +/** + * Returns the HTML for a data point. + * + * @param {number} pointNumber point number + * @param {string} prefix prefix of the name + * @return {string} the HTML for a data point + */ + + +function addDataPoint(pointNumber, prefix) { + return '
' + Functions.sprintf(Messages.strPointN, pointNumber + 1) + ': ' + '' + '' + '' + ''; +} +/** + * Initialize the visualization in the GIS data editor. + */ + + +function initGISEditorVisualization() { + storeGisSvgRef(); // Loads either SVG or OSM visualization based on the choice + + selectVisualization(); // Adds necessary styles to the div that contains the openStreetMap + + styleOSM(); // Adds controllers for zooming and panning + + addZoomPanControllers(); + zoomAndPan(); +} +/** + * Loads JavaScript files and the GIS editor. + * + * @param value current value of the geometry field + * @param field field name + * @param type geometry type + * @param inputName name of the input field + * @param token token + */ +// eslint-disable-next-line no-unused-vars + + +function loadJSAndGISEditor(value, field, type, inputName) { + var head = document.getElementsByTagName('head')[0]; + var script; + script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = 'js/dist/table/gis_visualization.js'; + head.appendChild(script); // OpenLayers.js is BIG and takes time. So asynchronous loading would not work. + // Load the JS and do a callback to load the content for the GIS Editor. + + script = document.createElement('script'); + script.type = 'text/javascript'; + + script.onreadystatechange = function () { + if (this.readyState === 'complete') { + loadGISEditor(value, field, type, inputName); + } + }; + + script.onload = function () { + loadGISEditor(value, field, type, inputName); + }; + + script.onerror = function () { + loadGISEditor(value, field, type, inputName); + }; + + script.src = 'js/vendor/openlayers/OpenLayers.js'; + head.appendChild(script); + gisEditorLoaded = true; +} +/** + * Loads the GIS editor via AJAX + * + * @param value current value of the geometry field + * @param field field name + * @param type geometry type + * @param inputName name of the input field + */ + + +function loadGISEditor(value, field, type, inputName) { + var $gisEditor = $('#gis_editor'); + $.post('index.php?route=/gis-data-editor', { + 'field': field, + 'value': value, + 'type': type, + 'input_name': inputName, + 'get_gis_editor': true, + 'ajax_request': true, + 'server': CommonParams.get('server') + }, function (data) { + if (typeof data !== 'undefined' && data.success === true) { + $gisEditor.html(data.gis_editor); + initGISEditorVisualization(); + prepareJSVersion(); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }, 'json'); +} +/** + * Opens up the dialog for the GIS data editor. + */ +// eslint-disable-next-line no-unused-vars + + +function openGISEditor() { + // Center the popup + var windowWidth = document.documentElement.clientWidth; + var windowHeight = document.documentElement.clientHeight; + var popupWidth = windowWidth * 0.9; + var popupHeight = windowHeight * 0.9; + var popupOffsetTop = windowHeight / 2 - popupHeight / 2; + var popupOffsetLeft = windowWidth / 2 - popupWidth / 2; + var $gisEditor = $('#gis_editor'); + var $background = $('#popup_background'); + $gisEditor.css({ + 'top': popupOffsetTop, + 'left': popupOffsetLeft, + 'width': popupWidth, + 'height': popupHeight + }); + $background.css({ + 'opacity': '0.7' + }); + $gisEditor.append('
' + '' + '
'); // Make it appear + + $background.fadeIn('fast'); + $gisEditor.fadeIn('fast'); +} +/** + * Prepare and insert the GIS data in Well Known Text format + * to the input field. + */ + + +function insertDataAndClose() { + var $form = $('form#gis_data_editor_form'); + var inputName = $form.find('input[name=\'input_name\']').val(); + var argsep = CommonParams.get('arg_separator'); + $.post('index.php?route=/gis-data-editor', $form.serialize() + argsep + 'generate=true' + argsep + 'ajax_request=true', function (data) { + if (typeof data !== 'undefined' && data.success === true) { + $('input[name=\'' + inputName + '\']').val(data.result); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }, 'json'); + closeGISEditor(); +} +/** + * Unbind all event handlers before tearing down a page + */ + + +AJAX.registerTeardown('gis_data_editor.js', function () { + $(document).off('click', '#gis_editor input[name=\'gis_data[save]\']'); + $(document).off('submit', '#gis_editor'); + $(document).off('change', '#gis_editor input[type=\'text\']'); + $(document).off('change', '#gis_editor select.gis_type'); + $(document).off('click', '#gis_editor a.close_gis_editor, #gis_editor a.cancel_gis_editor'); + $(document).off('click', '#gis_editor a.addJs.addPoint'); + $(document).off('click', '#gis_editor a.addLine.addJs'); + $(document).off('click', '#gis_editor a.addJs.addPolygon'); + $(document).off('click', '#gis_editor a.addJs.addGeom'); +}); +AJAX.registerOnload('gis_data_editor.js', function () { + /** + * Prepares and insert the GIS data to the input field on clicking 'copy'. + */ + $(document).on('click', '#gis_editor input[name=\'gis_data[save]\']', function (event) { + event.preventDefault(); + insertDataAndClose(); + }); + /** + * Prepares and insert the GIS data to the input field on pressing 'enter'. + */ + + $(document).on('submit', '#gis_editor', function (event) { + event.preventDefault(); + insertDataAndClose(); + }); + /** + * Trigger asynchronous calls on data change and update the output. + */ + + $(document).on('change', '#gis_editor input[type=\'text\']', function () { + var $form = $('form#gis_data_editor_form'); + var argsep = CommonParams.get('arg_separator'); + $.post('index.php?route=/gis-data-editor', $form.serialize() + argsep + 'generate=true' + argsep + 'ajax_request=true', function (data) { + if (typeof data !== 'undefined' && data.success === true) { + $('#gis_data_textarea').val(data.result); + $('#placeholder').empty().removeClass('hasSVG').html(data.visualization); + $('#openlayersmap').empty(); + /* TODO: the gis_data_editor should rather return JSON than JS code to eval */ + // eslint-disable-next-line no-eval + + eval(data.openLayers); + initGISEditorVisualization(); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }, 'json'); + }); + /** + * Update the form on change of the GIS type. + */ + + $(document).on('change', '#gis_editor select.gis_type', function () { + var $gisEditor = $('#gis_editor'); + var $form = $('form#gis_data_editor_form'); + var argsep = CommonParams.get('arg_separator'); + $.post('index.php?route=/gis-data-editor', $form.serialize() + argsep + 'get_gis_editor=true' + argsep + 'ajax_request=true', function (data) { + if (typeof data !== 'undefined' && data.success === true) { + $gisEditor.html(data.gis_editor); + initGISEditorVisualization(); + prepareJSVersion(); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }, 'json'); + }); + /** + * Handles closing of the GIS data editor. + */ + + $(document).on('click', '#gis_editor a.close_gis_editor, #gis_editor a.cancel_gis_editor', function () { + closeGISEditor(); + }); + /** + * Handles adding data points + */ + + $(document).on('click', '#gis_editor a.addJs.addPoint', function () { + var $a = $(this); + var name = $a.attr('name'); // Eg. name = gis_data[0][MULTIPOINT][add_point] => prefix = gis_data[0][MULTIPOINT] + + var prefix = name.substr(0, name.length - 11); // Find the number of points + + var $noOfPointsInput = $('input[name=\'' + prefix + '[no_of_points]' + '\']'); + var noOfPoints = parseInt($noOfPointsInput.val(), 10); // Add the new data point + + var html = addDataPoint(noOfPoints, prefix); + $a.before(html); + $noOfPointsInput.val(noOfPoints + 1); + }); + /** + * Handles adding linestrings and inner rings + */ + + $(document).on('click', '#gis_editor a.addLine.addJs', function () { + var $a = $(this); + var name = $a.attr('name'); // Eg. name = gis_data[0][MULTILINESTRING][add_line] => prefix = gis_data[0][MULTILINESTRING] + + var prefix = name.substr(0, name.length - 10); + var type = prefix.slice(prefix.lastIndexOf('[') + 1, prefix.lastIndexOf(']')); // Find the number of lines + + var $noOfLinesInput = $('input[name=\'' + prefix + '[no_of_lines]' + '\']'); + var noOfLines = parseInt($noOfLinesInput.val(), 10); // Add the new linesting of inner ring based on the type + + var html = '
'; + var noOfPoints; + + if (type === 'MULTILINESTRING') { + html += Messages.strLineString + ' ' + (noOfLines + 1) + ':'; + noOfPoints = 2; + } else { + html += Messages.strInnerRing + ' ' + noOfLines + ':'; + noOfPoints = 4; + } + + html += ''; + + for (var i = 0; i < noOfPoints; i++) { + html += addDataPoint(i, prefix + '[' + noOfLines + ']'); + } + + html += '+ ' + Messages.strAddPoint + '
'; + $a.before(html); + $noOfLinesInput.val(noOfLines + 1); + }); + /** + * Handles adding polygons + */ + + $(document).on('click', '#gis_editor a.addJs.addPolygon', function () { + var $a = $(this); + var name = $a.attr('name'); // Eg. name = gis_data[0][MULTIPOLYGON][add_polygon] => prefix = gis_data[0][MULTIPOLYGON] + + var prefix = name.substr(0, name.length - 13); // Find the number of polygons + + var $noOfPolygonsInput = $('input[name=\'' + prefix + '[no_of_polygons]' + '\']'); + var noOfPolygons = parseInt($noOfPolygonsInput.val(), 10); // Add the new polygon + + var html = Messages.strPolygon + ' ' + (noOfPolygons + 1) + ':
'; + html += '' + '
' + Messages.strOuterRing + ':' + ''; + + for (var i = 0; i < 4; i++) { + html += addDataPoint(i, prefix + '[' + noOfPolygons + '][0]'); + } + + html += '+ ' + Messages.strAddPoint + '
' + '+ ' + Messages.strAddInnerRing + '

'; + $a.before(html); + $noOfPolygonsInput.val(noOfPolygons + 1); + }); + /** + * Handles adding geoms + */ + + $(document).on('click', '#gis_editor a.addJs.addGeom', function () { + var $a = $(this); + var prefix = 'gis_data[GEOMETRYCOLLECTION]'; // Find the number of geoms + + var $noOfGeomsInput = $('input[name=\'' + prefix + '[geom_count]' + '\']'); + var noOfGeoms = parseInt($noOfGeomsInput.val(), 10); + var html1 = Messages.strGeometry + ' ' + (noOfGeoms + 1) + ':
'; + var $geomType = $('select[name=\'gis_data[' + (noOfGeoms - 1) + '][gis_type]\']').clone(); + $geomType.attr('name', 'gis_data[' + noOfGeoms + '][gis_type]').val('POINT'); + var html2 = '
' + Messages.strPoint + ' :' + '' + '' + '' + '' + '

'; + $a.before(html1); + $geomType.insertBefore($a); + $a.before(html2); + $noOfGeomsInput.val(noOfGeoms + 1); + }); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/indexes.js b/Sources/php_script/script/phpMyAdmin/js/dist/indexes.js new file mode 100644 index 0000000..7cad042 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/indexes.js @@ -0,0 +1,795 @@ +/** + * @fileoverview function used for index manipulation pages + * @name Table Structure + * + * @requires jQuery + * @requires jQueryUI + * @required js/functions.js + */ + +/* global fulltextIndexes:writable, indexes:writable, primaryIndexes:writable, spatialIndexes:writable, uniqueIndexes:writable */ +// js/functions.js +var Indexes = {}; +/** + * Returns the array of indexes based on the index choice + * + * @param {string} indexChoice index choice + * + * @return {null|object} + */ + +Indexes.getIndexArray = function (indexChoice) { + var sourceArray = null; + + switch (indexChoice.toLowerCase()) { + case 'primary': + sourceArray = primaryIndexes; + break; + + case 'unique': + sourceArray = uniqueIndexes; + break; + + case 'index': + sourceArray = indexes; + break; + + case 'fulltext': + sourceArray = fulltextIndexes; + break; + + case 'spatial': + sourceArray = spatialIndexes; + break; + + default: + return null; + } + + return sourceArray; +}; +/** + * Hides/shows the inputs and submits appropriately depending + * on whether the index type chosen is 'SPATIAL' or not. + */ + + +Indexes.checkIndexType = function () { + /** + * @var {JQuery= 0) { + // Remove column from other indexes (if any). + Indexes.removeColumnFromIndex(colIndex); + } + + var indexName = $('input[name="index[Key_name]"]').val(); + var indexComment = $('input[name="index[Index_comment]"]').val(); + var keyBlockSize = $('input[name="index[Key_block_size]"]').val(); + var parser = $('input[name="index[Parser]"]').val(); + var indexType = $('select[name="index[Index_type]"]').val(); + var columns = []; + $('#index_columns').find('tbody').find('tr').each(function () { + // Get columns in particular order. + var colIndex = $(this).find('select[name="index[columns][names][]"]').val(); + var size = $(this).find('input[name="index[columns][sub_parts][]"]').val(); + columns.push({ + 'col_index': colIndex, + 'size': size + }); + }); // Update or create an index. + + sourceArray[arrayIndex] = { + 'Key_name': indexName, + 'Index_comment': indexComment, + 'Index_choice': indexChoice.toUpperCase(), + 'Key_block_size': keyBlockSize, + 'Parser': parser, + 'Index_type': indexType, + 'columns': columns + }; // Display index name (or column list) + + var displayName = indexName; + + if (displayName === '') { + var columnNames = []; + $.each(columns, function () { + columnNames.push($('input[name="field_name[' + this.col_index + ']"]').val()); + }); + displayName = '[' + columnNames.join(', ') + ']'; + } + + $.each(columns, function () { + var id = 'index_name_' + this.col_index + '_8'; + var $name = $('#' + id); + + if ($name.length === 0) { + $name = $(''); + $name.insertAfter($('select[name="field_key[' + this.col_index + ']"]')); + } + + var $text = $('').text(displayName); + $name.html($text); + }); + + if (colIndex >= 0) { + // Update index details on form. + $('select[name="field_key[' + colIndex + ']"]').attr('data-index', indexChoice + ',' + arrayIndex); + } + + Indexes.setIndexFormParameters(sourceArray, indexChoice.toLowerCase()); +}; +/** + * Get choices list for a column to create a composite index with. + * + * @param {any[]} sourceArray Array hodling columns for particular index + * @param {string} colIndex Choice of index + * + * @return {JQuery} jQuery Object + */ + + +Indexes.getCompositeIndexList = function (sourceArray, colIndex) { + // Remove any previous list. + if ($('#composite_index_list').length) { + $('#composite_index_list').remove(); + } // Html list. + + + var $compositeIndexList = $('
    ' + '
    ' + Messages.strCompositeWith + '
    ' + '
'); // Add each column to list available for composite index. + + var sourceLength = sourceArray.length; + var alreadyPresent = false; + + for (var i = 0; i < sourceLength; i++) { + var subArrayLen = sourceArray[i].columns.length; + var columnNames = []; + + for (var j = 0; j < subArrayLen; j++) { + columnNames.push($('input[name="field_name[' + sourceArray[i].columns[j].col_index + ']"]').val()); + + if (colIndex === sourceArray[i].columns[j].col_index) { + alreadyPresent = true; + } + } + + $compositeIndexList.append('
  • ' + '' + '' + '
  • '); + } + + return $compositeIndexList; +}; +/** + * Shows 'Add Index' dialog. + * + * @param {any[]} sourceArray Array holding particular index + * @param {string} arrayIndex Index of an INDEX in array + * @param {any[]} targetColumns Columns for an INDEX + * @param {string} colIndex Index of column on form + * @param {object} index Index detail object + * @param {boolean} showDialog Whether to show index creation dialog or not + * + * @return {void} + */ + + +Indexes.showAddIndexDialog = function (sourceArray, arrayIndex, targetColumns, colIndex, index, showDialog) { + var showDialogLocal = typeof showDialog !== 'undefined' ? showDialog : true; // Prepare post-data. + + var $table = $('input[name="table"]'); + var table = $table.length > 0 ? $table.val() : ''; + var postData = { + 'server': CommonParams.get('server'), + 'db': $('input[name="db"]').val(), + 'table': table, + 'ajax_request': 1, + 'create_edit_table': 1, + 'index': index + }; + var columns = {}; + + for (var i = 0; i < targetColumns.length; i++) { + var columnName = $('input[name="field_name[' + targetColumns[i] + ']"]').val(); + var columnType = $('select[name="field_type[' + targetColumns[i] + ']"]').val().toLowerCase(); + columns[columnName] = [columnType, targetColumns[i]]; + } + + postData.columns = JSON.stringify(columns); + var buttonOptions = {}; + + buttonOptions[Messages.strGo] = function () { + var isMissingValue = false; + $('select[name="index[columns][names][]"]').each(function () { + if ($(this).val() === '') { + isMissingValue = true; + } + }); + + if (!isMissingValue) { + Indexes.addColumnToIndex(sourceArray, arrayIndex, index.Index_choice, colIndex); + } else { + Functions.ajaxShowMessage('', false); + return false; + } + + $(this).remove(); + }; + + buttonOptions[Messages.strCancel] = function () { + if (colIndex >= 0) { + // Handle state on 'Cancel'. + var $selectList = $('select[name="field_key[' + colIndex + ']"]'); + + if (!$selectList.attr('data-index').length) { + $selectList.find('option[value*="none"]').attr('selected', 'selected'); + } else { + var previousIndex = $selectList.attr('data-index').split(','); + $selectList.find('option[value*="' + previousIndex[0].toLowerCase() + '"]').attr('selected', 'selected'); + } + } + + $(this).dialog('close'); + }; + + var $msgbox = Functions.ajaxShowMessage(); + $.post('index.php?route=/table/indexes', postData, function (data) { + if (data.success === false) { + // in the case of an error, show the error message returned. + Functions.ajaxShowMessage(data.error, false); + } else { + Functions.ajaxRemoveMessage($msgbox); + var $div = $('
    '); + + if (showDialogLocal) { + // Show dialog if the request was successful + if ($('#addIndex').length > 0) { + $('#addIndex').remove(); + } + + $div.append(data.message).dialog({ + title: Messages.strAddIndex, + width: 450, + minHeight: 250, + create: function () { + $(this).on('keypress', function (e) { + if (e.which === 13 || e.keyCode === 13 || window.event.keyCode === 13) { + e.preventDefault(); + buttonOptions[Messages.strGo](); + $(this).remove(); + } + }); + }, + open: function () { + Functions.checkIndexName('index_frm'); + Functions.showHints($div); + $('#index_columns').find('td').each(function () { + $(this).css('width', $(this).width() + 'px'); + }); + $('#index_columns').find('tbody').sortable({ + axis: 'y', + containment: $('#index_columns').find('tbody'), + tolerance: 'pointer' + }); + }, + modal: true, + buttons: buttonOptions, + close: function () { + $(this).remove(); + } + }); + } else { + $div.append(data.message); + $div.css({ + 'display': 'none' + }); + $div.appendTo($('body')); + $div.attr({ + 'id': 'addIndex' + }); + var isMissingValue = false; + $('select[name="index[columns][names][]"]').each(function () { + if ($(this).val() === '') { + isMissingValue = true; + } + }); + + if (!isMissingValue) { + Indexes.addColumnToIndex(sourceArray, arrayIndex, index.Index_choice, colIndex); + } else { + Functions.ajaxShowMessage('', false); + return false; + } + } + } + }); +}; +/** + * Creates a advanced index type selection dialog. + * + * @param {any[]} sourceArray Array holding a particular type of indexes + * @param {string} indexChoice Choice of index + * @param {string} colIndex Index of new column on form + * + * @return {void} + */ + + +Indexes.indexTypeSelectionDialog = function (sourceArray, indexChoice, colIndex) { + var $singleColumnRadio = $('' + ''); + var $compositeIndexRadio = $('' + ''); + var $dialogContent = $('
    '); + $dialogContent.append('' + indexChoice.toUpperCase() + ''); // For UNIQUE/INDEX type, show choice for single-column and composite index. + + $dialogContent.append($singleColumnRadio); + $dialogContent.append($compositeIndexRadio); + var buttonOptions = {}; // 'OK' operation. + + buttonOptions[Messages.strGo] = function () { + if ($('#single_column').is(':checked')) { + var index = { + 'Key_name': indexChoice === 'primary' ? 'PRIMARY' : '', + 'Index_choice': indexChoice.toUpperCase() + }; + Indexes.showAddIndexDialog(sourceArray, sourceArray.length, [colIndex], colIndex, index); + } + + if ($('#composite_index').is(':checked')) { + if ($('input[name="composite_with"]').length !== 0 && $('input[name="composite_with"]:checked').length === 0) { + Functions.ajaxShowMessage('', false); + return false; + } + + var arrayIndex = $('input[name="composite_with"]:checked').val(); + var sourceLength = sourceArray[arrayIndex].columns.length; + var targetColumns = []; + + for (var i = 0; i < sourceLength; i++) { + targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); + } + + targetColumns.push(colIndex); + Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, colIndex, sourceArray[arrayIndex]); + } + + $(this).remove(); + }; + + buttonOptions[Messages.strCancel] = function () { + // Handle state on 'Cancel'. + var $selectList = $('select[name="field_key[' + colIndex + ']"]'); + + if (!$selectList.attr('data-index').length) { + $selectList.find('option[value*="none"]').attr('selected', 'selected'); + } else { + var previousIndex = $selectList.attr('data-index').split(','); + $selectList.find('option[value*="' + previousIndex[0].toLowerCase() + '"]').attr('selected', 'selected'); + } + + $(this).remove(); + }; + + $('
    ').append($dialogContent).dialog({ + minWidth: 525, + minHeight: 200, + modal: true, + title: Messages.strAddIndex, + resizable: false, + buttons: buttonOptions, + open: function () { + $('#composite_index').on('change', function () { + if ($(this).is(':checked')) { + $dialogContent.append(Indexes.getCompositeIndexList(sourceArray, colIndex)); + } + }); + $('#single_column').on('change', function () { + if ($(this).is(':checked')) { + if ($('#composite_index_list').length) { + $('#composite_index_list').remove(); + } + } + }); + }, + close: function () { + $('#composite_index').off('change'); + $('#single_column').off('change'); + $(this).remove(); + } + }); +}; +/** + * Unbind all event handlers before tearing down a page + */ + + +AJAX.registerTeardown('indexes.js', function () { + $(document).off('click', '#save_index_frm'); + $(document).off('click', '#preview_index_frm'); + $(document).off('change', '#select_index_choice'); + $(document).off('click', 'a.drop_primary_key_index_anchor.ajax'); + $(document).off('click', '#table_index tbody tr td.edit_index.ajax, #index_div .add_index.ajax'); + $(document).off('click', '#table_index tbody tr td.rename_index.ajax'); + $(document).off('click', '#index_frm input[type=submit]'); + $('body').off('change', 'select[name*="field_key"]'); + $(document).off('click', '.show_index_dialog'); +}); +/** + * @description

    Ajax scripts for table index page

    + * + * Actions ajaxified here: + *
      + *
    • Showing/hiding inputs depending on the index type chosen
    • + *
    • create/edit/drop indexes
    • + *
    + */ + +AJAX.registerOnload('indexes.js', function () { + // Re-initialize variables. + primaryIndexes = []; + uniqueIndexes = []; + indexes = []; + fulltextIndexes = []; + spatialIndexes = []; // for table creation form + + var $engineSelector = $('.create_table_form select[name=tbl_storage_engine]'); + + if ($engineSelector.length) { + Functions.hideShowConnection($engineSelector); + } + + var $form = $('#index_frm'); + + if ($form.length > 0) { + Functions.showIndexEditDialog($form); + } + + $(document).on('click', '#save_index_frm', function (event) { + event.preventDefault(); + var $form = $('#index_frm'); + var argsep = CommonParams.get('arg_separator'); + var submitData = $form.serialize() + argsep + 'do_save_data=1' + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true'; + Functions.ajaxShowMessage(Messages.strProcessingRequest); + AJAX.source = $form; + $.post($form.attr('action'), submitData, AJAX.responseHandler); + }); + $(document).on('click', '#preview_index_frm', function (event) { + event.preventDefault(); + Functions.previewSql($('#index_frm')); + }); + $(document).on('change', '#select_index_choice', function (event) { + event.preventDefault(); + Indexes.checkIndexType(); + Functions.checkIndexName('index_frm'); + }); + /** + * Ajax Event handler for 'Drop Index' + */ + + $(document).on('click', 'a.drop_primary_key_index_anchor.ajax', function (event) { + event.preventDefault(); + var $anchor = $(this); + /** + * @var $currRow Object containing reference to the current field's row + */ + + var $currRow = $anchor.parents('tr'); + /** @var {number} rows Number of columns in the key */ + + var rows = $anchor.parents('td').attr('rowspan') || 1; + /** @var {number} $rowsToHide Rows that should be hidden */ + + var $rowsToHide = $currRow; + + for (var i = 1, $lastRow = $currRow.next(); i < rows; i++, $lastRow = $lastRow.next()) { + $rowsToHide = $rowsToHide.add($lastRow); + } + + var question = $currRow.children('td').children('.drop_primary_key_index_msg').val(); + Functions.confirmPreviewSql(question, $anchor.attr('href'), function (url) { + var $msg = Functions.ajaxShowMessage(Messages.strDroppingPrimaryKeyIndex, false); + var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); + $.post(url, params, function (data) { + if (typeof data !== 'undefined' && data.success === true) { + Functions.ajaxRemoveMessage($msg); + var $tableRef = $rowsToHide.closest('table'); + + if ($rowsToHide.length === $tableRef.find('tbody > tr').length) { + // We are about to remove all rows from the table + $tableRef.hide('medium', function () { + $('div.no_indexes_defined').show('medium'); + $rowsToHide.remove(); + }); + $tableRef.siblings('.alert-primary').hide('medium'); + } else { + // We are removing some of the rows only + $rowsToHide.hide('medium', function () { + $(this).remove(); + }); + } + + if ($('.result_query').length) { + $('.result_query').remove(); + } + + if (data.sql_query) { + $('
    ').html(data.sql_query).prependTo('#structure_content'); + Functions.highlightSql($('#page_content')); + } + + Navigation.reload(); + CommonActions.refreshMain('index.php?route=/table/structure'); + } else { + Functions.ajaxShowMessage(Messages.strErrorProcessingRequest + ' : ' + data.error, false); + } + }); // end $.post() + }); + }); // end Drop Primary Key/Index + + /** + * Ajax event handler for index edit + **/ + + $(document).on('click', '#table_index tbody tr td.edit_index.ajax, #index_div .add_index.ajax', function (event) { + event.preventDefault(); + var url; + var title; + + if ($(this).find('a').length === 0) { + // Add index + var valid = Functions.checkFormElementInRange($(this).closest('form')[0], 'added_fields', 'Column count has to be larger than zero.'); + + if (!valid) { + return; + } + + url = $(this).closest('form').serialize(); + title = Messages.strAddIndex; + } else { + // Edit index + url = $(this).find('a').getPostData(); + title = Messages.strEditIndex; + } + + url += CommonParams.get('arg_separator') + 'ajax_request=true'; + Functions.indexEditorDialog(url, title, function (data) { + CommonParams.set('db', data.params.db); + CommonParams.set('table', data.params.table); + CommonActions.refreshMain('index.php?route=/table/structure'); + }); + }); + /** + * Ajax event handler for index rename + **/ + + $(document).on('click', '#table_index tbody tr td.rename_index.ajax', function (event) { + event.preventDefault(); + var url = $(this).find('a').getPostData(); + var title = Messages.strRenameIndex; + url += CommonParams.get('arg_separator') + 'ajax_request=true'; + Functions.indexRenameDialog(url, title, function (data) { + CommonParams.set('db', data.params.db); + CommonParams.set('table', data.params.table); + CommonActions.refreshMain('index.php?route=/table/structure'); + }); + }); + /** + * Ajax event handler for advanced index creation during table creation + * and column addition. + */ + + $('body').on('change', 'select[name*="field_key"]', function (e, showDialog) { + var showDialogLocal = typeof showDialog !== 'undefined' ? showDialog : true; // Index of column on Table edit and create page. + + var colIndex = /\d+/.exec($(this).attr('name')); + colIndex = colIndex[0]; // Choice of selected index. + + var indexChoice = /[a-z]+/.exec($(this).val()); + indexChoice = indexChoice[0]; // Array containing corresponding indexes. + + var sourceArray = null; + + if (indexChoice === 'none') { + Indexes.removeColumnFromIndex(colIndex); + var id = 'index_name_' + '0' + '_8'; + var $name = $('#' + id); + + if ($name.length === 0) { + $name = $(''); + $name.insertAfter($('select[name="field_key[' + '0' + ']"]')); + } + + $name.html(''); + return false; + } // Select a source array. + + + sourceArray = Indexes.getIndexArray(indexChoice); + + if (sourceArray === null) { + return; + } + + if (sourceArray.length === 0) { + var index = { + 'Key_name': indexChoice === 'primary' ? 'PRIMARY' : '', + 'Index_choice': indexChoice.toUpperCase() + }; + Indexes.showAddIndexDialog(sourceArray, 0, [colIndex], colIndex, index, showDialogLocal); + } else { + if (indexChoice === 'primary') { + var arrayIndex = 0; + var sourceLength = sourceArray[arrayIndex].columns.length; + var targetColumns = []; + + for (var i = 0; i < sourceLength; i++) { + targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); + } + + targetColumns.push(colIndex); + Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, colIndex, sourceArray[arrayIndex], showDialogLocal); + } else { + // If there are multiple columns selected for an index, show advanced dialog. + Indexes.indexTypeSelectionDialog(sourceArray, indexChoice, colIndex); + } + } + }); + $(document).on('click', '.show_index_dialog', function (e) { + e.preventDefault(); // Get index details. + + var previousIndex = $(this).prev('select').attr('data-index').split(','); + var indexChoice = previousIndex[0]; + var arrayIndex = previousIndex[1]; + var sourceArray = Indexes.getIndexArray(indexChoice); + + if (sourceArray !== null) { + var sourceLength = sourceArray[arrayIndex].columns.length; + var targetColumns = []; + + for (var i = 0; i < sourceLength; i++) { + targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); + } + + Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, -1, sourceArray[arrayIndex]); + } + }); + $('#index_frm').on('submit', function () { + if (typeof this.elements['index[Key_name]'].disabled !== 'undefined') { + this.elements['index[Key_name]'].disabled = false; + } + }); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/menu_resizer.js b/Sources/php_script/script/phpMyAdmin/js/dist/menu_resizer.js new file mode 100644 index 0000000..41aca77 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/menu_resizer.js @@ -0,0 +1,208 @@ +/** + * Handles the resizing of a menu according to the available screen width + * + * Uses themes/original/css/resizable-menu.css.php + * + * To initialize: + * $('#myMenu').menuResizer(function () { + * // This function will be called to find out how much + * // available horizontal space there is for the menu + * return $('body').width() - 5; // Some extra margin for good measure + * }); + * + * To trigger a resize operation: + * $('#myMenu').menuResizer('resize'); // Bind this to $(window).resize() + * + * To restore the menu to a state like before it was initialized: + * $('#myMenu').menuResizer('destroy'); + * + * @package PhpMyAdmin + */ +(function ($) { + function MenuResizer($container, widthCalculator) { + var self = this; + self.$container = $container; + self.widthCalculator = widthCalculator; + var windowWidth = $(window).width(); + + if (windowWidth < 768) { + $('#pma_navigation_resizer').css({ + 'width': '0px' + }); + } // create submenu container + + + var link = $('', { + 'href': '#', + 'class': 'nav-link dropdown-toggle', + 'id': 'navbarDropdown', + 'role': 'button', + 'data-bs-toggle': 'dropdown', + 'aria-haspopup': 'true', + 'aria-expanded': 'false' + }).text(Messages.strMore); + var img = $container.find('li img'); + + if (img.length) { + $(Functions.getImage('b_more').toString()).prependTo(link); + } + + var $submenu = $('
  • ', { + 'class': 'nav-item dropdown d-none' + }).append(link).append($('
      ', { + 'class': 'dropdown-menu dropdown-menu-end', + 'aria-labelledby': 'navbarDropdown' + })); + $container.append($submenu); + setTimeout(function () { + self.resize(); + }, 4); + } + + MenuResizer.prototype.resize = function () { + var wmax = this.widthCalculator.call(this.$container); + var windowWidth = $(window).width(); + var $submenu = this.$container.find('.nav-item.dropdown').last(); + var submenuW = $submenu.outerWidth(true); + var $submenuUl = $submenu.find('.dropdown-menu'); + var $li = this.$container.find('> li'); + var $li2 = $submenuUl.find('.dropdown-item'); + var moreShown = $li2.length > 0; // Calculate the total width used by all the shown tabs + + var totalLen = moreShown ? submenuW : 0; + var l = $li.length - 1; + var i; + + for (i = 0; i < l; i++) { + totalLen += $($li[i]).outerWidth(true); + } // eslint-disable-next-line compat/compat + + + var hasVScroll = document.body.scrollHeight > document.body.clientHeight; + + if (hasVScroll) { + windowWidth += 15; + } + + if (windowWidth < 768) { + wmax = 2000; + } // Now hide menu elements that don't fit into the menubar + + + var hidden = false; // Whether we have hidden any tabs + + while (totalLen >= wmax && --l >= 0) { + // Process the tabs backwards + hidden = true; + var el = $($li[l]); + el.removeClass('nav-item').addClass('dropdown-item'); + var elWidth = el.outerWidth(true); + el.data('width', elWidth); + + if (!moreShown) { + totalLen -= elWidth; + el.prependTo($submenuUl); + totalLen += submenuW; + moreShown = true; + } else { + totalLen -= elWidth; + el.prependTo($submenuUl); + } + } // If we didn't hide any tabs, then there might be some space to show some + + + if (!hidden) { + // Show menu elements that do fit into the menubar + for (i = 0, l = $li2.length; i < l; i++) { + totalLen += $($li2[i]).data('width'); // item fits or (it is the last item + // and it would fit if More got removed) + + if (totalLen < wmax || i === $li2.length - 1 && totalLen - submenuW < wmax) { + $($li2[i]).removeClass('dropdown-item').addClass('nav-item'); + $($li2[i]).insertBefore($submenu); + } else { + break; + } + } + } // Show/hide the "More" tab as needed + + + if (windowWidth < 768) { + $('.navbar-collapse').css({ + 'width': windowWidth - 80 - $('#pma_navigation').width() + }); + $submenu.addClass('d-none'); + $('.navbar-collapse').css({ + 'overflow': 'hidden' + }); + } else { + $('.navbar-collapse').css({ + 'width': 'auto' + }); + $('.navbar-collapse').css({ + 'overflow': 'visible' + }); + + if ($submenuUl.find('li').length > 0) { + $submenu.removeClass('d-none'); + } else { + $submenu.addClass('d-none'); + } + } + }; + + MenuResizer.prototype.destroy = function () { + var $submenu = this.$container.find('.nav-item.dropdown').removeData(); + $submenu.find('li').appendTo(this.$container); + $submenu.remove(); + }; + /** Public API */ + + + var methods = { + init: function (widthCalculator) { + return this.each(function () { + var $this = $(this); + + if (!$this.data('menuResizer')) { + $this.data('menuResizer', new MenuResizer($this, widthCalculator)); + } + }); + }, + resize: function () { + return this.each(function () { + var self = $(this).data('menuResizer'); + + if (self) { + self.resize(); + } + }); + }, + destroy: function () { + return this.each(function () { + var self = $(this).data('menuResizer'); + + if (self) { + self.destroy(); + } + }); + } + }; + /** + * Extend jQuery + * + * @param {string} method + * + * @return {any} + */ + + $.fn.menuResizer = function (method) { + if (methods[method]) { + return methods[method].call(this); + } else if (typeof method === 'function') { + return methods.init.apply(this, [method]); + } else { + $.error('Method ' + method + ' does not exist on jQuery.menuResizer'); + } + }; +})(jQuery); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/server/privileges.js b/Sources/php_script/script/phpMyAdmin/js/dist/server/privileges.js new file mode 100644 index 0000000..ddc1cca --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/server/privileges.js @@ -0,0 +1,455 @@ +/** + * @fileoverview functions used in server privilege pages + * @name Server Privileges + * + * @requires jQuery + * @requires jQueryUI + * @requires js/functions.js + * + */ + +/** + * Validates the "add a user" form + * + * @param theForm + * + * @return {bool} whether the form is validated or not + */ +function checkAddUser(theForm) { + if (theForm.elements.hostname.value === '') { + alert(Messages.strHostEmpty); + theForm.elements.hostname.focus(); + return false; + } + + if (theForm.elements.pred_username && theForm.elements.pred_username.value === 'userdefined' && theForm.elements.username.value === '') { + alert(Messages.strUserEmpty); + theForm.elements.username.focus(); + return false; + } + + return Functions.checkPassword($(theForm)); +} +/** + * Export privileges modal handler + * + * @param {object} data + * + * @param {JQuery} msgbox + * + */ + + +function exportPrivilegesModalHandler(data, msgbox) { + if (typeof data !== 'undefined' && data.success === true) { + var modal = $('#exportPrivilegesModal'); // Remove any previous privilege modal data, if any + + modal.find('.modal-body').first().html(''); + $('#exportPrivilegesModalLabel').first().html('Loading'); + modal.modal('show'); + modal.on('shown.bs.modal', function () { + modal.find('.modal-body').first().html(data.message); + $('#exportPrivilegesModalLabel').first().html(data.title); + Functions.ajaxRemoveMessage(msgbox); // Attach syntax highlighted editor to export dialog + + Functions.getSqlEditor(modal.find('textarea')); + }); + return; + } + + Functions.ajaxShowMessage(data.error, false); +} +/** + * @implements EventListener + */ + + +const EditUserGroup = { + /** + * @param {MouseEvent} event + */ + handleEvent: function (event) { + const editUserGroupModal = document.getElementById('editUserGroupModal'); + const button = event.relatedTarget; + const username = button.getAttribute('data-username'); + $.get('index.php?route=/server/user-groups/edit-form', { + 'username': username, + 'server': CommonParams.get('server') + }, data => { + if (typeof data === 'undefined' || data.success !== true) { + Functions.ajaxShowMessage(data.error, false, 'error'); + return; + } + + const modal = bootstrap.Modal.getInstance(editUserGroupModal); + const modalBody = editUserGroupModal.querySelector('.modal-body'); + const saveButton = editUserGroupModal.querySelector('#editUserGroupModalSaveButton'); + modalBody.innerHTML = data.message; + saveButton.addEventListener('click', () => { + const form = $(editUserGroupModal.querySelector('#changeUserGroupForm')); + $.post('index.php?route=/server/privileges', form.serialize() + CommonParams.get('arg_separator') + 'ajax_request=1', data => { + if (typeof data === 'undefined' || data.success !== true) { + Functions.ajaxShowMessage(data.error, false, 'error'); + return; + } + + const userGroup = form.serializeArray().find(el => el.name === 'userGroup').value; // button -> td -> tr -> td.usrGroup + + const userGroupTableCell = button.parentElement.parentElement.querySelector('.usrGroup'); + userGroupTableCell.textContent = userGroup; + }); + modal.hide(); + }); + }); + } +}; +/** + * @implements EventListener + */ + +const AccountLocking = { + handleEvent: function () { + const button = this; + const isLocked = button.dataset.isLocked === 'true'; + const url = isLocked ? 'index.php?route=/server/privileges/account-unlock' : 'index.php?route=/server/privileges/account-lock'; + const params = { + 'username': button.dataset.userName, + 'hostname': button.dataset.hostName, + 'ajax_request': true, + 'server': CommonParams.get('server') + }; + $.post(url, params, data => { + if (data.success === false) { + Functions.ajaxShowMessage(data.error); + return; + } + + if (isLocked) { + const lockIcon = Functions.getImage('s_lock', Messages.strLock, {}).toString(); + button.innerHTML = '' + lockIcon + ' ' + Messages.strLock + ''; + button.title = Messages.strLockAccount; + button.dataset.isLocked = 'false'; + } else { + const unlockIcon = Functions.getImage('s_unlock', Messages.strUnlock, {}).toString(); + button.innerHTML = '' + unlockIcon + ' ' + Messages.strUnlock + ''; + button.title = Messages.strUnlockAccount; + button.dataset.isLocked = 'true'; + } + + Functions.ajaxShowMessage(data.message); + }); + } +}; +/** + * AJAX scripts for /server/privileges page. + * + * Actions ajaxified here: + * Add user + * Revoke a user + * Edit privileges + * Export privileges + * Paginate table of users + * Flush privileges + * + * @memberOf jQuery + * @name document.ready + */ + +/** + * Unbind all event handlers before tearing down a page + */ + +AJAX.registerTeardown('server/privileges.js', function () { + $('#fieldset_add_user_login').off('change', 'input[name=\'username\']'); + $(document).off('click', '#deleteUserCard .btn.ajax'); + const editUserGroupModal = document.getElementById('editUserGroupModal'); + + if (editUserGroupModal) { + editUserGroupModal.removeEventListener('show.bs.modal', EditUserGroup); + } + + $(document).off('click', 'button.mult_submit[value=export]'); + $(document).off('click', 'a.export_user_anchor.ajax'); + $('button.jsAccountLocking').off('click'); + $('#dropUsersDbCheckbox').off('click'); + $(document).off('click', '.checkall_box'); + $(document).off('change', '#checkbox_SSL_priv'); + $(document).off('change', 'input[name="ssl_type"]'); + $(document).off('change', '#select_authentication_plugin'); +}); +AJAX.registerOnload('server/privileges.js', function () { + /** + * Display a warning if there is already a user by the name entered as the username. + */ + $('#fieldset_add_user_login').on('change', 'input[name=\'username\']', function () { + var username = $(this).val(); + var $warning = $('#user_exists_warning'); + + if ($('#select_pred_username').val() === 'userdefined' && username !== '') { + var href = $('form[name=\'usersForm\']').attr('action'); + var params = { + 'ajax_request': true, + 'server': CommonParams.get('server'), + 'validate_username': true, + 'username': username + }; + $.get(href, params, function (data) { + if (data.user_exists) { + $warning.show(); + } else { + $warning.hide(); + } + }); + } else { + $warning.hide(); + } + }); + /** + * Indicating password strength + */ + + $('#text_pma_pw').on('keyup', function () { + var meterObj = $('#password_strength_meter'); + var meterObjLabel = $('#password_strength'); + var username = $('input[name="username"]'); + username = username.val(); + Functions.checkPasswordStrength($(this).val(), meterObj, meterObjLabel, username); + }); + /** + * Automatically switching to 'Use Text field' from 'No password' once start writing in text area + */ + + $('#text_pma_pw').on('input', function () { + if ($('#text_pma_pw').val() !== '') { + $('#select_pred_password').val('userdefined'); + } + }); + $('#text_pma_change_pw').on('keyup', function () { + var meterObj = $('#change_password_strength_meter'); + var meterObjLabel = $('#change_password_strength'); + Functions.checkPasswordStrength($(this).val(), meterObj, meterObjLabel, CommonParams.get('user')); + }); + /** + * Display a notice if sha256_password is selected + */ + + $(document).on('change', '#select_authentication_plugin', function () { + var selectedPlugin = $(this).val(); + + if (selectedPlugin === 'sha256_password') { + $('#ssl_reqd_warning').show(); + } else { + $('#ssl_reqd_warning').hide(); + } + }); + /** + * AJAX handler for 'Revoke User' + * + * @see Functions.ajaxShowMessage() + * @memberOf jQuery + * @name revoke_user_click + */ + + $(document).on('click', '#deleteUserCard .btn.ajax', function (event) { + event.preventDefault(); + var $thisButton = $(this); + var $form = $('#usersForm'); + $thisButton.confirm(Messages.strDropUserWarning, $form.attr('action'), function (url) { + var $dropUsersDbCheckbox = $('#dropUsersDbCheckbox'); + + if ($dropUsersDbCheckbox.is(':checked')) { + var isConfirmed = confirm(Messages.strDropDatabaseStrongWarning + '\n' + Functions.sprintf(Messages.strDoYouReally, 'DROP DATABASE')); + + if (!isConfirmed) { + // Uncheck the drop users database checkbox + $dropUsersDbCheckbox.prop('checked', false); + } + } + + Functions.ajaxShowMessage(Messages.strRemovingSelectedUsers); + var argsep = CommonParams.get('arg_separator'); + $.post(url, $form.serialize() + argsep + 'delete=' + $thisButton.val() + argsep + 'ajax_request=true', function (data) { + if (typeof data !== 'undefined' && data.success === true) { + Functions.ajaxShowMessage(data.message); // Refresh navigation, if we dropped some databases with the name + // that is the same as the username of the deleted user + + if ($('#dropUsersDbCheckbox:checked').length) { + Navigation.reload(); + } // Remove the revoked user from the users list + + + $form.find('input:checkbox:checked').parents('tr').slideUp('medium', function () { + var thisUserInitial = $(this).find('input:checkbox').val().charAt(0).toUpperCase(); + $(this).remove(); // If this is the last user with thisUserInitial, remove the link from #userAccountsPagination + + if ($('#userRightsTable').find('input:checkbox[value^="' + thisUserInitial + '"], input:checkbox[value^="' + thisUserInitial.toLowerCase() + '"]').length === 0) { + $('#userAccountsPagination').find('.page-item > .page-link:contains(' + thisUserInitial + ')').parent('.page-item').addClass('disabled').html('' + thisUserInitial + ''); + } // Re-check the classes of each row + + + $form.find('tbody').find('tr').each(function (index) { + if (index >= 0 && index % 2 === 0) { + $(this).removeClass('odd').addClass('even'); + } else if (index >= 0 && index % 2 !== 0) { + $(this).removeClass('even').addClass('odd'); + } + }); // update the checkall checkbox + + $(Functions.checkboxesSel).trigger('change'); + }); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.post() + }); + }); // end Revoke User + + const editUserGroupModal = document.getElementById('editUserGroupModal'); + + if (editUserGroupModal) { + editUserGroupModal.addEventListener('show.bs.modal', EditUserGroup); + } + /** + * AJAX handler for 'Export Privileges' + * + * @see Functions.ajaxShowMessage() + * @memberOf jQuery + * @name export_user_click + */ + + + $(document).on('click', 'button.mult_submit[value=export]', function (event) { + event.preventDefault(); // can't export if no users checked + + if ($(this.form).find('input:checked').length === 0) { + Functions.ajaxShowMessage(Messages.strNoAccountSelected, 2000, 'success'); + return; + } + + var msgbox = Functions.ajaxShowMessage(); + var argsep = CommonParams.get('arg_separator'); + var serverId = CommonParams.get('server'); + var selectedUsers = $('#usersForm input[name*=\'selected_usr\']:checkbox').serialize(); + var postStr = selectedUsers + '&submit_mult=export' + argsep + 'ajax_request=true&server=' + serverId; + $.post($(this.form).prop('action'), postStr, function (data) { + exportPrivilegesModalHandler(data, msgbox); + }); // end $.post + }); // if exporting non-ajax, highlight anyways + + Functions.getSqlEditor($('textarea.export')); + $(document).on('click', 'a.export_user_anchor.ajax', function (event) { + event.preventDefault(); + var msgbox = Functions.ajaxShowMessage(); + $.get($(this).attr('href'), { + 'ajax_request': true + }, function (data) { + exportPrivilegesModalHandler(data, msgbox); + }); // end $.get + }); // end export privileges + + $('button.jsAccountLocking').on('click', AccountLocking.handleEvent); + $(document).on('change', 'input[name="ssl_type"]', function () { + var $div = $('#specified_div'); + + if ($('#ssl_type_SPECIFIED').is(':checked')) { + $div.find('input').prop('disabled', false); + } else { + $div.find('input').prop('disabled', true); + } + }); + $(document).on('change', '#checkbox_SSL_priv', function () { + var $div = $('#require_ssl_div'); + + if ($(this).is(':checked')) { + $div.find('input').prop('disabled', false); + $('#ssl_type_SPECIFIED').trigger('change'); + } else { + $div.find('input').prop('disabled', true); + } + }); + $('#checkbox_SSL_priv').trigger('change'); + /* + * Create submenu for simpler interface + */ + + var addOrUpdateSubmenu = function () { + var $subNav = $('.nav-pills'); + var $editUserDialog = $('#edit_user_dialog'); + var submenuLabel; + var submenuLink; + var linkNumber; // if submenu exists yet, remove it first + + if ($subNav.length > 0) { + $subNav.remove(); + } // construct a submenu from the existing fieldsets + + + $subNav = $('
        ').prop('class', 'nav nav-pills m-2'); + $('#edit_user_dialog .submenu-item').each(function () { + submenuLabel = $(this).find('legend[data-submenu-label]').data('submenu-label'); + submenuLink = $('').prop('class', 'nav-link').prop('href', '#').html(submenuLabel); + $('
      • ').prop('class', 'nav-item').append(submenuLink).appendTo($subNav); + }); // click handlers for submenu + + $subNav.find('a').on('click', function (e) { + e.preventDefault(); // if already active, ignore click + + if ($(this).hasClass('active')) { + return; + } + + $subNav.find('a').removeClass('active'); + $(this).addClass('active'); // which section to show now? + + linkNumber = $subNav.find('a').index($(this)); // hide all sections but the one to show + + $('#edit_user_dialog .submenu-item').hide().eq(linkNumber).show(); + }); // make first menu item active + // TODO: support URL hash history + + $subNav.find('> :first-child a').addClass('active'); + $editUserDialog.prepend($subNav); // hide all sections but the first + + $('#edit_user_dialog .submenu-item').hide().eq(0).show(); // scroll to the top + + $('html, body').animate({ + scrollTop: 0 + }, 'fast'); + }; + + $('input.autofocus').trigger('focus'); + $(Functions.checkboxesSel).trigger('change'); + Functions.displayPasswordGenerateButton(); + + if ($('#edit_user_dialog').length > 0) { + addOrUpdateSubmenu(); + } + /** + * Select all privileges + * + * @param {HTMLElement} e + * @return {void} + */ + + + var tableSelectAll = function (e) { + const method = e.target.getAttribute('data-select-target'); + var options = $(method).first().children(); + options.each(function (_, obj) { + obj.selected = true; + }); + }; + + $('#select_priv_all').on('click', tableSelectAll); + $('#insert_priv_all').on('click', tableSelectAll); + $('#update_priv_all').on('click', tableSelectAll); + $('#references_priv_all').on('click', tableSelectAll); + var windowWidth = $(window).width(); + $('.jsresponsive').css('max-width', windowWidth - 35 + 'px'); + $('#addUsersForm').on('submit', function () { + return checkAddUser(this); + }); + $('#copyUserForm').on('submit', function () { + return checkAddUser(this); + }); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/server/status/monitor.js b/Sources/php_script/script/phpMyAdmin/js/dist/server/status/monitor.js new file mode 100644 index 0000000..1697d8c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/server/status/monitor.js @@ -0,0 +1,2281 @@ +/** + * @fileoverview Javascript functions used in server status monitor page + * @name Server Status Monitor + * + * @requires jQuery + * @requires jQueryUI + * @requires js/functions.js + */ + +/* global isStorageSupported */ +// js/config.js + +/* global codeMirrorEditor:writable */ +// js/functions.js + +/* global firstDayOfCalendar, themeImagePath */ +// templates/javascript/variables.twig + +/* global variableNames */ +// templates/server/status/monitor/index.twig +var runtime = {}; +var serverTimeDiff; +var serverOs; +var isSuperUser; +var serverDbIsLocal; +var chartSize; +var monitorSettings; + +function serverResponseError() { + var btns = {}; + + btns[Messages.strReloadPage] = function () { + window.location.reload(); + }; + + $('#emptyDialog').dialog({ + title: Messages.strRefreshFailed + }); + $('#emptyDialog').html(Functions.getImage('s_attention') + Messages.strInvalidResponseExplanation); + $('#emptyDialog').dialog({ + buttons: btns + }); +} +/** + * Destroys all monitor related resources + */ + + +function destroyGrid() { + if (runtime.charts) { + $.each(runtime.charts, function (key, value) { + try { + value.chart.destroy(); + } catch (err) {// continue regardless of error + } + }); + } + + try { + runtime.refreshRequest.abort(); + } catch (err) {// continue regardless of error + } + + try { + clearTimeout(runtime.refreshTimeout); + } catch (err) {// continue regardless of error + } + + $('#chartGrid').html(''); + runtime.charts = null; + runtime.chartAI = 0; + monitorSettings = null; +} + +AJAX.registerOnload('server/status/monitor.js', function () { + var $jsDataForm = $('#js_data'); + serverTimeDiff = new Date().getTime() - $jsDataForm.find('input[name=server_time]').val(); + serverOs = $jsDataForm.find('input[name=server_os]').val(); + isSuperUser = $jsDataForm.find('input[name=is_superuser]').val(); + serverDbIsLocal = $jsDataForm.find('input[name=server_db_isLocal]').val(); +}); +/** + * Unbind all event handlers before tearing down a page + */ + +AJAX.registerTeardown('server/status/monitor.js', function () { + $('#emptyDialog').remove(); + $('a.popupLink').off('click'); + $('body').off('click'); +}); +/** + * Popup behaviour + */ + +AJAX.registerOnload('server/status/monitor.js', function () { + $('
        ').attr('id', 'emptyDialog').appendTo('#page_content'); + $('a.popupLink').on('click', function () { + var $link = $(this); + $('div.' + $link.attr('href').substr(1)).show().offset({ + top: $link.offset().top + $link.height() + 5, + left: $link.offset().left + }).addClass('openedPopup'); + return false; + }); + $('body').on('click', function (event) { + $('div.openedPopup').each(function () { + var $cnt = $(this); + var pos = $cnt.offset(); // Hide if the mouseclick is outside the popupcontent + + if (event.pageX < pos.left || event.pageY < pos.top || event.pageX > pos.left + $cnt.outerWidth() || event.pageY > pos.top + $cnt.outerHeight()) { + $cnt.hide().removeClass('openedPopup'); + } + }); + }); +}); +AJAX.registerTeardown('server/status/monitor.js', function () { + $('a[href="#rearrangeCharts"], a[href="#endChartEditMode"]').off('click'); + $('div.popupContent select[name="chartColumns"]').off('change'); + $('div.popupContent select[name="gridChartRefresh"]').off('change'); + $('a[href="#addNewChart"]').off('click'); + $('a[href="#exportMonitorConfig"]').off('click'); + $('a[href="#importMonitorConfig"]').off('click'); + $('a[href="#clearMonitorConfig"]').off('click'); + $('a[href="#pauseCharts"]').off('click'); + $('a[href="#monitorInstructionsDialog"]').off('click'); + $('input[name="chartType"]').off('click'); + $('input[name="useDivisor"]').off('click'); + $('input[name="useUnit"]').off('click'); + $('select[name="varChartList"]').off('click'); + $('a[href="#kibDivisor"]').off('click'); + $('a[href="#mibDivisor"]').off('click'); + $('a[href="#submitClearSeries"]').off('click'); + $('a[href="#submitAddSeries"]').off('click'); // $("input#variableInput").destroy(); + + $('#chartPreset').off('click'); + $('#chartStatusVar').off('click'); + destroyGrid(); +}); +AJAX.registerOnload('server/status/monitor.js', function () { + // Show tab links + $('div.tabLinks').show(); + $('#loadingMonitorIcon').remove(); // Codemirror is loaded on demand so we might need to initialize it + + if (!codeMirrorEditor) { + var $elm = $('#sqlquery'); + + if ($elm.length > 0 && typeof CodeMirror !== 'undefined') { + codeMirrorEditor = CodeMirror.fromTextArea($elm[0], { + lineNumbers: true, + matchBrackets: true, + indentUnit: 4, + mode: 'text/x-mysql', + lineWrapping: true + }); + } + } // Timepicker is loaded on demand so we need to initialize + // datetime fields from the 'load log' dialog + + + $('#logAnalyseDialog').find('.datetimefield').each(function () { + Functions.addDatepicker($(this)); + }); + /** ** Monitor charting implementation ****/ + + /* Saves the previous ajax response for differential values */ + + var oldChartData = null; // Holds about to be created chart + + var newChart = null; + var chartSpacing; // Whenever the monitor object (runtime.charts) or the settings object + // (monitorSettings) changes in a way incompatible to the previous version, + // increase this number. It will reset the users monitor and settings object + // in their localStorage to the default configuration + + var monitorProtocolVersion = '1.0'; // Runtime parameter of the monitor, is being fully set in initGrid() + + runtime = { + // Holds all visible charts in the grid + charts: null, + // Stores the timeout handler so it can be cleared + refreshTimeout: null, + // Stores the GET request to refresh the charts + refreshRequest: null, + // Chart auto increment + chartAI: 0, + // To play/pause the monitor + redrawCharts: false, + // Object that contains a list of nodes that need to be retrieved + // from the server for chart updates + dataList: [], + // Current max points per chart (needed for auto calculation) + gridMaxPoints: 20, + // displayed time frame + xmin: -1, + xmax: -1 + }; + monitorSettings = null; + var defaultMonitorSettings = { + columns: 3, + chartSize: { + width: 295, + height: 250 + }, + // Max points in each chart. Settings it to 'auto' sets + // gridMaxPoints to (chartwidth - 40) / 12 + gridMaxPoints: 'auto', + + /* Refresh rate of all grid charts in ms */ + gridRefresh: 5000 + }; // Allows drag and drop rearrange and print/edit icons on charts + + var editMode = false; + /* List of preconfigured charts that the user may select */ + + var presetCharts = { + // Query cache efficiency + 'qce': { + title: Messages.strQueryCacheEfficiency, + series: [{ + label: Messages.strQueryCacheEfficiency + }], + nodes: [{ + dataPoints: [{ + type: 'statusvar', + name: 'Qcache_hits' + }, { + type: 'statusvar', + name: 'Com_select' + }], + transformFn: 'qce' + }], + maxYLabel: 0 + }, + // Query cache usage + 'qcu': { + title: Messages.strQueryCacheUsage, + series: [{ + label: Messages.strQueryCacheUsed + }], + nodes: [{ + dataPoints: [{ + type: 'statusvar', + name: 'Qcache_free_memory' + }, { + type: 'servervar', + name: 'query_cache_size' + }], + transformFn: 'qcu' + }], + maxYLabel: 0 + } + }; // time span selection + + var selectionTimeDiff = []; + var selectionStartX; + var selectionStartY; + var drawTimeSpan = false; + /* Add OS specific system info charts to the preset chart list */ + + switch (serverOs) { + case 'WINNT': + $.extend(presetCharts, { + 'cpu': { + title: Messages.strSystemCPUUsage, + series: [{ + label: Messages.strAverageLoad + }], + nodes: [{ + dataPoints: [{ + type: 'cpu', + name: 'loadavg' + }] + }], + maxYLabel: 100 + }, + 'memory': { + title: Messages.strSystemMemory, + series: [{ + label: Messages.strTotalMemory, + fill: true + }, { + dataType: 'memory', + label: Messages.strUsedMemory, + fill: true + }], + nodes: [{ + dataPoints: [{ + type: 'memory', + name: 'MemTotal' + }], + valueDivisor: 1024 + }, { + dataPoints: [{ + type: 'memory', + name: 'MemUsed' + }], + valueDivisor: 1024 + }], + maxYLabel: 0 + }, + 'swap': { + title: Messages.strSystemSwap, + series: [{ + label: Messages.strTotalSwap, + fill: true + }, { + label: Messages.strUsedSwap, + fill: true + }], + nodes: [{ + dataPoints: [{ + type: 'memory', + name: 'SwapTotal' + }] + }, { + dataPoints: [{ + type: 'memory', + name: 'SwapUsed' + }] + }], + maxYLabel: 0 + } + }); + break; + + case 'Linux': + $.extend(presetCharts, { + 'cpu': { + title: Messages.strSystemCPUUsage, + series: [{ + label: Messages.strAverageLoad + }], + nodes: [{ + dataPoints: [{ + type: 'cpu', + name: 'irrelevant' + }], + transformFn: 'cpu-linux' + }], + maxYLabel: 0 + }, + 'memory': { + title: Messages.strSystemMemory, + series: [{ + label: Messages.strBufferedMemory, + fill: true + }, { + label: Messages.strUsedMemory, + fill: true + }, { + label: Messages.strCachedMemory, + fill: true + }, { + label: Messages.strFreeMemory, + fill: true + }], + nodes: [{ + dataPoints: [{ + type: 'memory', + name: 'Buffers' + }], + valueDivisor: 1024 + }, { + dataPoints: [{ + type: 'memory', + name: 'MemUsed' + }], + valueDivisor: 1024 + }, { + dataPoints: [{ + type: 'memory', + name: 'Cached' + }], + valueDivisor: 1024 + }, { + dataPoints: [{ + type: 'memory', + name: 'MemFree' + }], + valueDivisor: 1024 + }], + maxYLabel: 0 + }, + 'swap': { + title: Messages.strSystemSwap, + series: [{ + label: Messages.strCachedSwap, + fill: true + }, { + label: Messages.strUsedSwap, + fill: true + }, { + label: Messages.strFreeSwap, + fill: true + }], + nodes: [{ + dataPoints: [{ + type: 'memory', + name: 'SwapCached' + }], + valueDivisor: 1024 + }, { + dataPoints: [{ + type: 'memory', + name: 'SwapUsed' + }], + valueDivisor: 1024 + }, { + dataPoints: [{ + type: 'memory', + name: 'SwapFree' + }], + valueDivisor: 1024 + }], + maxYLabel: 0 + } + }); + break; + + case 'SunOS': + $.extend(presetCharts, { + 'cpu': { + title: Messages.strSystemCPUUsage, + series: [{ + label: Messages.strAverageLoad + }], + nodes: [{ + dataPoints: [{ + type: 'cpu', + name: 'loadavg' + }] + }], + maxYLabel: 0 + }, + 'memory': { + title: Messages.strSystemMemory, + series: [{ + label: Messages.strUsedMemory, + fill: true + }, { + label: Messages.strFreeMemory, + fill: true + }], + nodes: [{ + dataPoints: [{ + type: 'memory', + name: 'MemUsed' + }], + valueDivisor: 1024 + }, { + dataPoints: [{ + type: 'memory', + name: 'MemFree' + }], + valueDivisor: 1024 + }], + maxYLabel: 0 + }, + 'swap': { + title: Messages.strSystemSwap, + series: [{ + label: Messages.strUsedSwap, + fill: true + }, { + label: Messages.strFreeSwap, + fill: true + }], + nodes: [{ + dataPoints: [{ + type: 'memory', + name: 'SwapUsed' + }], + valueDivisor: 1024 + }, { + dataPoints: [{ + type: 'memory', + name: 'SwapFree' + }], + valueDivisor: 1024 + }], + maxYLabel: 0 + } + }); + break; + } // Default setting for the chart grid + + + var defaultChartGrid = { + 'c0': { + title: Messages.strQuestions, + series: [{ + label: Messages.strQuestions + }], + nodes: [{ + dataPoints: [{ + type: 'statusvar', + name: 'Questions' + }], + display: 'differential' + }], + maxYLabel: 0 + }, + 'c1': { + title: Messages.strChartConnectionsTitle, + series: [{ + label: Messages.strConnections + }, { + label: Messages.strProcesses + }], + nodes: [{ + dataPoints: [{ + type: 'statusvar', + name: 'Connections' + }], + display: 'differential' + }, { + dataPoints: [{ + type: 'proc', + name: 'processes' + }] + }], + maxYLabel: 0 + }, + 'c2': { + title: Messages.strTraffic, + series: [{ + label: Messages.strBytesSent + }, { + label: Messages.strBytesReceived + }], + nodes: [{ + dataPoints: [{ + type: 'statusvar', + name: 'Bytes_sent' + }], + display: 'differential', + valueDivisor: 1024 + }, { + dataPoints: [{ + type: 'statusvar', + name: 'Bytes_received' + }], + display: 'differential', + valueDivisor: 1024 + }], + maxYLabel: 0 + } + }; // Server is localhost => We can add cpu/memory/swap to the default chart + + if (serverDbIsLocal && typeof presetCharts.cpu !== 'undefined') { + defaultChartGrid.c3 = presetCharts.cpu; + defaultChartGrid.c4 = presetCharts.memory; + defaultChartGrid.c5 = presetCharts.swap; + } + + $('a[href="#rearrangeCharts"], a[href="#endChartEditMode"]').on('click', function (event) { + event.preventDefault(); + editMode = !editMode; + + if ($(this).attr('href') === '#endChartEditMode') { + editMode = false; + } + + $('a[href="#endChartEditMode"]').toggle(editMode); + + if (editMode) { + // Close the settings popup + $('div.popupContent').hide().removeClass('openedPopup'); + $('#chartGrid').sortableTable({ + ignoreRect: { + top: 8, + left: chartSize.width - 63, + width: 54, + height: 24 + } + }); + } else { + $('#chartGrid').sortableTable('destroy'); + } + + saveMonitor(); // Save settings + + return false; + }); // global settings + + $('div.popupContent select[name="chartColumns"]').on('change', function () { + monitorSettings.columns = parseInt(this.value, 10); + calculateChartSize(); // Empty cells should keep their size so you can drop onto them + + $('#chartGrid').find('tr td').css('width', chartSize.width + 'px'); + $('#chartGrid').find('.monitorChart').css({ + width: chartSize.width + 'px', + height: chartSize.height + 'px' + }); + /* Reorder all charts that it fills all column cells */ + + var numColumns; + var $tr = $('#chartGrid').find('tr').first(); + + var tempManageCols = function () { + if (numColumns > monitorSettings.columns) { + if ($tr.next().length === 0) { + $tr.after(''); + } + + $tr.next().prepend($(this)); + } + + numColumns++; + }; + + var tempAddCol = function () { + if ($(this).next().length !== 0) { + $(this).append($(this).next().find('td').first()); + } + }; + + while ($tr.length !== 0) { + numColumns = 1; // To many cells in one row => put into next row + + $tr.find('td').each(tempManageCols); // To little cells in one row => for each cell to little, + // move all cells backwards by 1 + + if ($tr.next().length > 0) { + var cnt = monitorSettings.columns - $tr.find('td').length; + + for (var i = 0; i < cnt; i++) { + $tr.append($tr.next().find('td').first()); + $tr.nextAll().each(tempAddCol); + } + } + + $tr = $tr.next(); + } + + if (monitorSettings.gridMaxPoints === 'auto') { + runtime.gridMaxPoints = Math.round((chartSize.width - 40) / 12); + } + + runtime.xmin = new Date().getTime() - serverTimeDiff - runtime.gridMaxPoints * monitorSettings.gridRefresh; + runtime.xmax = new Date().getTime() - serverTimeDiff + monitorSettings.gridRefresh; + + if (editMode) { + $('#chartGrid').sortableTable('refresh'); + } + + refreshChartGrid(); + saveMonitor(); // Save settings + }); + $('div.popupContent select[name="gridChartRefresh"]').on('change', function () { + monitorSettings.gridRefresh = parseInt(this.value, 10) * 1000; + clearTimeout(runtime.refreshTimeout); + + if (runtime.refreshRequest) { + runtime.refreshRequest.abort(); + } + + runtime.xmin = new Date().getTime() - serverTimeDiff - runtime.gridMaxPoints * monitorSettings.gridRefresh; // fixing chart shift towards left on refresh rate change + // runtime.xmax = new Date().getTime() - serverTimeDiff + monitorSettings.gridRefresh; + + runtime.refreshTimeout = setTimeout(refreshChartGrid, monitorSettings.gridRefresh); + saveMonitor(); // Save settings + }); + $('a[href="#addNewChart"]').on('click', function (event) { + event.preventDefault(); + $('#addChartButton').on('click', function () { + var type = $('input[name="chartType"]:checked').val(); + + if (type === 'preset') { + newChart = presetCharts[$('#addChartModal').find('select[name="presetCharts"]').prop('value')]; + } else { + // If user builds their own chart, it's being set/updated + // each time they add a series + // So here we only warn if they didn't add a series yet + if (!newChart || !newChart.nodes || newChart.nodes.length === 0) { + alert(Messages.strAddOneSeriesWarning); + return; + } + } + + newChart.title = $('input[name="chartTitle"]').val(); // Add a cloned object to the chart grid + + addChart($.extend(true, {}, newChart)); + newChart = null; + saveMonitor(); // Save settings + + $('#closeModalButton').off('click'); + }); + $('#closeModalButton').on('click', function () { + newChart = null; + $('span#clearSeriesLink').hide(); + $('#seriesPreview').html(''); + $('#closeModalButton').off('click'); + }); + var $presetList = $('#addChartModal').find('select[name="presetCharts"]'); + + if ($presetList.html().length === 0) { + $.each(presetCharts, function (key, value) { + $presetList.append(''); + }); + $presetList.on('change', function () { + $('input[name="chartTitle"]').val($presetList.find(':selected').text()); + $('#chartPreset').prop('checked', true); + }); + $('#chartPreset').on('click', function () { + $('input[name="chartTitle"]').val($presetList.find(':selected').text()); + }); + $('#chartStatusVar').on('click', function () { + $('input[name="chartTitle"]').val($('#chartSeries').find(':selected').text().replace(/_/g, ' ')); + }); + $('#chartSeries').on('change', function () { + $('input[name="chartTitle"]').val($('#chartSeries').find(':selected').text().replace(/_/g, ' ')); + }); + } + + $('#addChartModal').modal('show'); + $('#seriesPreview').html('' + Messages.strNone + ''); + return false; + }); + $('a[href="#exportMonitorConfig"]').on('click', function (event) { + event.preventDefault(); + var gridCopy = {}; + $.each(runtime.charts, function (key, elem) { + gridCopy[key] = {}; + gridCopy[key].nodes = elem.nodes; + gridCopy[key].series = elem.series; + gridCopy[key].settings = elem.settings; + gridCopy[key].title = elem.title; + gridCopy[key].maxYLabel = elem.maxYLabel; + }); + var exportData = { + monitorCharts: gridCopy, + monitorSettings: monitorSettings + }; + var blob = new Blob([JSON.stringify(exportData)], { + type: 'application/octet-stream' + }); + var url = null; + var fileName = 'monitor-config.json'; + + if (window.navigator && window.navigator.msSaveOrOpenBlob) { + window.navigator.msSaveOrOpenBlob(blob, fileName); + } else { + url = URL.createObjectURL(blob); + window.location.href = url; + } + + setTimeout(function () { + // For some browsers it is necessary to delay revoking the ObjectURL + if (url !== null) { + window.URL.revokeObjectURL(url); + } + + url = undefined; + blob = undefined; + }, 100); + }); + $('a[href="#importMonitorConfig"]').on('click', function (event) { + event.preventDefault(); + $('#emptyDialog').dialog({ + title: Messages.strImportDialogTitle + }); + $('#emptyDialog').html(Messages.strImportDialogMessage + ':
        ' + '
        '); + var dlgBtns = {}; + + dlgBtns[Messages.strImport] = function () { + var input = $('#emptyDialog').find('#import_file')[0]; + var reader = new FileReader(); + + reader.onerror = function (event) { + alert(Messages.strFailedParsingConfig + '\n' + event.target.error.code); + }; + + reader.onload = function (e) { + var data = e.target.result; + var json = null; // Try loading config + + try { + json = JSON.parse(data); + } catch (err) { + alert(Messages.strFailedParsingConfig); + $('#emptyDialog').dialog('close'); + return; + } // Basic check, is this a monitor config json? + + + if (!json || !json.monitorCharts || !json.monitorCharts) { + alert(Messages.strFailedParsingConfig); + $('#emptyDialog').dialog('close'); + return; + } // If json ok, try applying config + + + try { + if (isStorageSupported('localStorage')) { + window.localStorage.monitorCharts = JSON.stringify(json.monitorCharts); + window.localStorage.monitorSettings = JSON.stringify(json.monitorSettings); + } + + rebuildGrid(); + } catch (err) { + alert(Messages.strFailedBuildingGrid); // If an exception is thrown, load default again + + if (isStorageSupported('localStorage')) { + window.localStorage.removeItem('monitorCharts'); + window.localStorage.removeItem('monitorSettings'); + } + + rebuildGrid(); + } + + $('#emptyDialog').dialog('close'); + }; + + reader.readAsText(input.files[0]); + }; + + dlgBtns[Messages.strCancel] = function () { + $(this).dialog('close'); + }; + + $('#emptyDialog').dialog({ + width: 'auto', + height: 'auto', + buttons: dlgBtns + }); + }); + $('a[href="#clearMonitorConfig"]').on('click', function (event) { + event.preventDefault(); + + if (isStorageSupported('localStorage')) { + window.localStorage.removeItem('monitorCharts'); + window.localStorage.removeItem('monitorSettings'); + window.localStorage.removeItem('monitorVersion'); + } + + $(this).hide(); + rebuildGrid(); + }); + $('a[href="#pauseCharts"]').on('click', function (event) { + event.preventDefault(); + runtime.redrawCharts = !runtime.redrawCharts; + + if (!runtime.redrawCharts) { + $(this).html(Functions.getImage('play') + Messages.strResumeMonitor); + } else { + $(this).html(Functions.getImage('pause') + Messages.strPauseMonitor); + + if (!runtime.charts) { + initGrid(); + $('a[href="#settingsPopup"]').show(); + } + } + + return false; + }); + $('a[href="#monitorInstructionsDialog"]').on('click', function (event) { + event.preventDefault(); + var $dialog = $('#monitorInstructionsDialog'); + var dlgBtns = {}; + + dlgBtns[Messages.strClose] = function () { + $(this).dialog('close'); + }; + + $dialog.dialog({ + width: '60%', + height: 'auto', + buttons: dlgBtns + }).find('img.ajaxIcon').show(); + + var loadLogVars = function (getvars) { + var vars = { + 'ajax_request': true, + 'server': CommonParams.get('server') + }; + + if (getvars) { + $.extend(vars, getvars); + } + + $.post('index.php?route=/server/status/monitor/log-vars', vars, function (data) { + var logVars; + + if (typeof data !== 'undefined' && data.success === true) { + logVars = data.message; + } else { + return serverResponseError(); + } + + var icon = Functions.getImage('s_success'); + var msg = ''; + var str = ''; + + if (logVars.general_log === 'ON') { + if (logVars.slow_query_log === 'ON') { + msg = Messages.strBothLogOn; + } else { + msg = Messages.strGenLogOn; + } + } + + if (msg.length === 0 && logVars.slow_query_log === 'ON') { + msg = Messages.strSlowLogOn; + } + + if (msg.length === 0) { + icon = Functions.getImage('s_error'); + msg = Messages.strBothLogOff; + } + + str = '' + Messages.strCurrentSettings + '
        '; + str += icon + msg + '
        '; + + if (logVars.log_output !== 'TABLE') { + str += Functions.getImage('s_error') + ' ' + Messages.strLogOutNotTable + '
        '; + } else { + str += Functions.getImage('s_success') + ' ' + Messages.strLogOutIsTable + '
        '; + } + + if (logVars.slow_query_log === 'ON') { + if (logVars.long_query_time > 2) { + str += Functions.getImage('s_attention') + ' '; + str += Functions.sprintf(Messages.strSmallerLongQueryTimeAdvice, logVars.long_query_time); + str += '
        '; + } + + if (logVars.long_query_time < 2) { + str += Functions.getImage('s_success') + ' '; + str += Functions.sprintf(Messages.strLongQueryTimeSet, logVars.long_query_time); + str += '
        '; + } + } + + str += '
        '; + + if (isSuperUser) { + str += '

        ' + Messages.strChangeSettings + ''; + str += '
        '; + str += Messages.strSettingsAppliedGlobal + '
        '; + var varValue = 'TABLE'; + + if (logVars.log_output === 'TABLE') { + varValue = 'FILE'; + } + + str += '- '; + str += Functions.sprintf(Messages.strSetLogOutput, varValue); + str += '
        '; + + if (logVars.general_log !== 'ON') { + str += '- '; + str += Functions.sprintf(Messages.strEnableVar, 'general_log'); + str += '
        '; + } else { + str += '- '; + str += Functions.sprintf(Messages.strDisableVar, 'general_log'); + str += '
        '; + } + + if (logVars.slow_query_log !== 'ON') { + str += '- '; + str += Functions.sprintf(Messages.strEnableVar, 'slow_query_log'); + str += '
        '; + } else { + str += '- '; + str += Functions.sprintf(Messages.strDisableVar, 'slow_query_log'); + str += '
        '; + } + + varValue = 5; + + if (logVars.long_query_time > 2) { + varValue = 1; + } + + str += '- '; + str += Functions.sprintf(Messages.setSetLongQueryTime, varValue); + str += '
        '; + } else { + str += Messages.strNoSuperUser + '
        '; + } + + str += '
        '; + $dialog.find('div.monitorUse').toggle(logVars.log_output === 'TABLE' && (logVars.slow_query_log === 'ON' || logVars.general_log === 'ON')); + $dialog.find('div.ajaxContent').html(str); + $dialog.find('img.ajaxIcon').hide(); + $dialog.find('a.set').on('click', function () { + var nameValue = $(this).attr('href').split('-'); + loadLogVars({ + varName: nameValue[0].substr(1), + varValue: nameValue[1] + }); + $dialog.find('img.ajaxIcon').show(); + }); + }); + }; + + loadLogVars(); + return false; + }); + $('input[name="chartType"]').on('change', function () { + $('#chartVariableSettings').toggle(this.checked && this.value === 'variable'); + var title = $('input[name="chartTitle"]').val(); + + if (title === Messages.strChartTitle || title === $('label[for="' + $('input[name="chartTitle"]').data('lastRadio') + '"]').text()) { + $('input[name="chartTitle"]').data('lastRadio', $(this).attr('id')).val($('label[for="' + $(this).attr('id') + '"]').text()); + } + }); + $('input[name="useDivisor"]').on('change', function () { + $('span.divisorInput').toggle(this.checked); + }); + $('input[name="useUnit"]').on('change', function () { + $('span.unitInput').toggle(this.checked); + }); + $('select[name="varChartList"]').on('change', function () { + if (this.selectedIndex !== 0) { + $('#variableInput').val(this.value); + } + }); + $('a[href="#kibDivisor"]').on('click', function (event) { + event.preventDefault(); + $('input[name="valueDivisor"]').val(1024); + $('input[name="valueUnit"]').val(Messages.strKiB); + $('span.unitInput').toggle(true); + $('input[name="useUnit"]').prop('checked', true); + return false; + }); + $('a[href="#mibDivisor"]').on('click', function (event) { + event.preventDefault(); + $('input[name="valueDivisor"]').val(1024 * 1024); + $('input[name="valueUnit"]').val(Messages.strMiB); + $('span.unitInput').toggle(true); + $('input[name="useUnit"]').prop('checked', true); + return false; + }); + $('a[href="#submitClearSeries"]').on('click', function (event) { + event.preventDefault(); + $('#seriesPreview').html('' + Messages.strNone + ''); + newChart = null; + $('#clearSeriesLink').hide(); + }); + $('a[href="#submitAddSeries"]').on('click', function (event) { + event.preventDefault(); + + if ($('#variableInput').val() === '') { + return false; + } + + if (newChart === null) { + $('#seriesPreview').html(''); + newChart = { + title: $('input[name="chartTitle"]').val(), + nodes: [], + series: [], + maxYLabel: 0 + }; + } + + var serie = { + dataPoints: [{ + type: 'statusvar', + name: $('#variableInput').val() + }], + display: $('input[name="differentialValue"]').prop('checked') ? 'differential' : '' + }; + + if (serie.dataPoints[0].name === 'Processes') { + serie.dataPoints[0].type = 'proc'; + } + + if ($('input[name="useDivisor"]').prop('checked')) { + serie.valueDivisor = parseInt($('input[name="valueDivisor"]').val(), 10); + } + + if ($('input[name="useUnit"]').prop('checked')) { + serie.unit = $('input[name="valueUnit"]').val(); + } + + var str = serie.display === 'differential' ? ', ' + Messages.strDifferential : ''; + str += serie.valueDivisor ? ', ' + Functions.sprintf(Messages.strDividedBy, serie.valueDivisor) : ''; + str += serie.unit ? ', ' + Messages.strUnit + ': ' + serie.unit : ''; + var newSeries = { + label: $('#variableInput').val().replace(/_/g, ' ') + }; + newChart.series.push(newSeries); + $('#seriesPreview').append('- ' + Functions.escapeHtml(newSeries.label + str) + '
        '); + newChart.nodes.push(serie); + $('#variableInput').val(''); + $('input[name="differentialValue"]').prop('checked', true); + $('input[name="useDivisor"]').prop('checked', false); + $('input[name="useUnit"]').prop('checked', false); + $('input[name="useDivisor"]').trigger('change'); + $('input[name="useUnit"]').trigger('change'); + $('select[name="varChartList"]').get(0).selectedIndex = 0; + $('#clearSeriesLink').show(); + return false; + }); + $('#variableInput').autocomplete({ + source: variableNames + }); + /* Initializes the monitor, called only once */ + + function initGrid() { + var i; + /* Apply default values & config */ + + if (isStorageSupported('localStorage')) { + if (typeof window.localStorage.monitorCharts !== 'undefined') { + runtime.charts = JSON.parse(window.localStorage.monitorCharts); + } + + if (typeof window.localStorage.monitorSettings !== 'undefined') { + monitorSettings = JSON.parse(window.localStorage.monitorSettings); + } + + $('a[href="#clearMonitorConfig"]').toggle(runtime.charts !== null); + + if (runtime.charts !== null && typeof window.localStorage.monitorVersion !== 'undefined' && monitorProtocolVersion !== window.localStorage.monitorVersion) { + $('#emptyDialog').dialog({ + title: Messages.strIncompatibleMonitorConfig + }); + $('#emptyDialog').html(Messages.strIncompatibleMonitorConfigDescription); + var dlgBtns = {}; + + dlgBtns[Messages.strClose] = function () { + $(this).dialog('close'); + }; + + $('#emptyDialog').dialog({ + width: 400, + buttons: dlgBtns + }); + } + } + + if (runtime.charts === null) { + runtime.charts = defaultChartGrid; + } + + if (monitorSettings === null) { + monitorSettings = defaultMonitorSettings; + } + + $('select[name="gridChartRefresh"]').val(monitorSettings.gridRefresh / 1000); + $('select[name="chartColumns"]').val(monitorSettings.columns); + + if (monitorSettings.gridMaxPoints === 'auto') { + runtime.gridMaxPoints = Math.round((monitorSettings.chartSize.width - 40) / 12); + } else { + runtime.gridMaxPoints = monitorSettings.gridMaxPoints; + } + + runtime.xmin = new Date().getTime() - serverTimeDiff - runtime.gridMaxPoints * monitorSettings.gridRefresh; + runtime.xmax = new Date().getTime() - serverTimeDiff + monitorSettings.gridRefresh; + /* Calculate how much spacing there is between each chart */ + + $('#chartGrid').html(''); + chartSpacing = { + width: $('#chartGrid').find('td').eq(1).offset().left - $('#chartGrid').find('td').eq(0).offset().left, + height: $('#chartGrid').find('tr').eq(1).find('td').eq(1).offset().top - $('#chartGrid').find('tr').eq(0).find('td').eq(0).offset().top + }; + $('#chartGrid').html(''); + /* Add all charts - in correct order */ + + var keys = []; + $.each(runtime.charts, function (key) { + keys.push(key); + }); + keys.sort(); + + for (i = 0; i < keys.length; i++) { + addChart(runtime.charts[keys[i]], true); + } + /* Fill in missing cells */ + + + var numCharts = $('#chartGrid').find('.monitorChart').length; + var numMissingCells = (monitorSettings.columns - numCharts % monitorSettings.columns) % monitorSettings.columns; + + for (i = 0; i < numMissingCells; i++) { + $('#chartGrid').find('tr').last().append(''); + } // Empty cells should keep their size so you can drop onto them + + + calculateChartSize(); + $('#chartGrid').find('tr td').css('width', chartSize.width + 'px'); + buildRequiredDataList(); + refreshChartGrid(); + } + /* Calls destroyGrid() and initGrid(), but before doing so it saves the chart + * data from each chart and restores it after the monitor is initialized again */ + + + function rebuildGrid() { + var oldData = null; + + if (runtime.charts) { + oldData = {}; + $.each(runtime.charts, function (key, chartObj) { + for (var i = 0, l = chartObj.nodes.length; i < l; i++) { + oldData[chartObj.nodes[i].dataPoint] = []; + + for (var j = 0, ll = chartObj.chart.series[i].data.length; j < ll; j++) { + oldData[chartObj.nodes[i].dataPoint].push([chartObj.chart.series[i].data[j].x, chartObj.chart.series[i].data[j].y]); + } + } + }); + } + + destroyGrid(); + initGrid(); + } + /* Calculates the dynamic chart size that depends on the column width */ + + + function calculateChartSize() { + var panelWidth; + + if ($('body').height() > $(window).height()) { + // has vertical scroll bar + panelWidth = $('#logTable').innerWidth(); + } else { + panelWidth = $('#logTable').innerWidth() - 10; // leave some space for vertical scroll bar + } + + var wdt = panelWidth; + var windowWidth = $(window).width(); + + if (windowWidth > 768) { + wdt = (panelWidth - monitorSettings.columns * chartSpacing.width) / monitorSettings.columns; + } + + chartSize = { + width: Math.floor(wdt), + height: Math.floor(0.75 * wdt) + }; + } + /* Adds a chart to the chart grid */ + + + function addChart(chartObj, initialize) { + var i; + var settings = { + title: Functions.escapeHtml(chartObj.title), + grid: { + drawBorder: false, + shadow: false, + background: 'rgba(0,0,0,0)' + }, + axes: { + xaxis: { + renderer: $.jqplot.DateAxisRenderer, + tickOptions: { + formatString: '%H:%M:%S', + showGridline: false + }, + min: runtime.xmin, + max: runtime.xmax + }, + yaxis: { + min: 0, + max: 100, + tickInterval: 20 + } + }, + seriesDefaults: { + rendererOptions: { + smooth: true + }, + showLine: true, + lineWidth: 2, + markerOptions: { + size: 6 + } + }, + highlighter: { + show: true + } + }; + + if (settings.title === Messages.strSystemCPUUsage || settings.title === Messages.strQueryCacheEfficiency) { + settings.axes.yaxis.tickOptions = { + formatString: '%d %%' + }; + } else if (settings.title === Messages.strSystemMemory || settings.title === Messages.strSystemSwap) { + settings.stackSeries = true; + settings.axes.yaxis.tickOptions = { + formatter: $.jqplot.byteFormatter(2) // MiB + + }; + } else if (settings.title === Messages.strTraffic) { + settings.axes.yaxis.tickOptions = { + formatter: $.jqplot.byteFormatter(1) // KiB + + }; + } else if (settings.title === Messages.strQuestions || settings.title === Messages.strConnections) { + settings.axes.yaxis.tickOptions = { + formatter: function (format, val) { + if (Math.abs(val) >= 1000000) { + return $.jqplot.sprintf('%.3g M', val / 1000000); + } else if (Math.abs(val) >= 1000) { + return $.jqplot.sprintf('%.3g k', val / 1000); + } else { + return $.jqplot.sprintf('%d', val); + } + } + }; + } + + settings.series = chartObj.series; + + if ($('#' + 'gridchart' + runtime.chartAI).length === 0) { + var numCharts = $('#chartGrid').find('.monitorChart').length; + + if (numCharts === 0 || numCharts % monitorSettings.columns === 0) { + $('#chartGrid').append(''); + } + + if (!chartSize) { + calculateChartSize(); + } + + $('#chartGrid').find('tr').last().append('
        ' + '
        ' + '
        '); + } // Set series' data as [0,0], smooth lines won't plot with data array having null values. + // also chart won't plot initially with no data and data comes on refreshChartGrid() + + + var series = []; + + for (i in chartObj.series) { + series.push([[0, 0]]); + } + + var tempTooltipContentEditor = function (str, seriesIndex, pointIndex, plot) { + var j; // TODO: move style to theme CSS + + var tooltipHtml = '
        '; // x value i.e. time + + var timeValue = str.split(',')[0]; + var seriesValue; + tooltipHtml += 'Time: ' + timeValue; + tooltipHtml += ''; // Add y values to the tooltip per series + + for (j in plot.series) { + // get y value if present + if (plot.series[j].data.length > pointIndex) { + seriesValue = plot.series[j].data[pointIndex][1]; + } else { + return; + } + + var seriesLabel = plot.series[j].label; + var seriesColor = plot.series[j].color; // format y value + + if (plot.series[0]._yaxis.tickOptions.formatter) { + // eslint-disable-line no-underscore-dangle + // using formatter function + // eslint-disable-next-line no-underscore-dangle + seriesValue = plot.series[0]._yaxis.tickOptions.formatter('%s', seriesValue); + } else if (plot.series[0]._yaxis.tickOptions.formatString) { + // eslint-disable-line no-underscore-dangle + // using format string + // eslint-disable-next-line no-underscore-dangle + seriesValue = Functions.sprintf(plot.series[0]._yaxis.tickOptions.formatString, seriesValue); + } + + tooltipHtml += '
        ' + seriesLabel + ': ' + seriesValue + ''; + } + + tooltipHtml += '
        '; + return tooltipHtml; + }; // set Tooltip for each series + + + for (i in settings.series) { + settings.series[i].highlighter = { + show: true, + tooltipContentEditor: tempTooltipContentEditor + }; + } + + chartObj.chart = $.jqplot('gridchart' + runtime.chartAI, series, settings); // remove [0,0] after plotting + + for (i in chartObj.chart.series) { + chartObj.chart.series[i].data.shift(); + } + + var $legend = $('
        ').css('padding', '0.5em'); + + for (i in chartObj.chart.series) { + $legend.append($('
        ').append($('
        ').css({ + width: '1em', + height: '1em', + background: chartObj.chart.seriesColors[i] + }).addClass('float-start')).append($('
        ').text(chartObj.chart.series[i].label).addClass('float-start')).append($('
        ')).addClass('float-start')); + } + + $('#gridchart' + runtime.chartAI).parent().append($legend); + + if (initialize !== true) { + runtime.charts['c' + runtime.chartAI] = chartObj; + buildRequiredDataList(); + } // time span selection + + + $('#gridchart' + runtime.chartAI).on('jqplotMouseDown', function (ev, gridpos, datapos) { + drawTimeSpan = true; + selectionTimeDiff.push(datapos.xaxis); + + if ($('#selection_box').length) { + $('#selection_box').remove(); + } + + var selectionBox = $('
        '); // eslint-disable-next-line compat/compat + + $(document.body).append(selectionBox); + selectionStartX = ev.pageX; + selectionStartY = ev.pageY; + selectionBox.attr({ + id: 'selection_box' + }).css({ + top: selectionStartY - gridpos.y, + left: selectionStartX + }).fadeIn(); + }); + $('#gridchart' + runtime.chartAI).on('jqplotMouseUp', function (ev, gridpos, datapos) { + if (!drawTimeSpan || editMode) { + return; + } + + selectionTimeDiff.push(datapos.xaxis); + + if (selectionTimeDiff[1] <= selectionTimeDiff[0]) { + selectionTimeDiff = []; + return; + } // get date from timestamp + + + var min = new Date(Math.ceil(selectionTimeDiff[0])); + var max = new Date(Math.ceil(selectionTimeDiff[1])); + getLogAnalyseDialog(min, max); + selectionTimeDiff = []; + drawTimeSpan = false; + }); + $('#gridchart' + runtime.chartAI).on('jqplotMouseMove', function (ev) { + if (!drawTimeSpan || editMode) { + return; + } + + if (selectionStartX !== undefined) { + $('#selection_box').css({ + width: Math.ceil(ev.pageX - selectionStartX) + }).fadeIn(); + } + }); + $('#gridchart' + runtime.chartAI).on('jqplotMouseLeave', function () { + drawTimeSpan = false; + }); // eslint-disable-next-line compat/compat + + $(document.body).on('mouseup', function () { + if ($('#selection_box').length) { + $('#selection_box').remove(); + } + }); // Edit, Print icon only in edit mode + + $('#chartGrid').find('div svg').find('*[zIndex=20], *[zIndex=21], *[zIndex=19]').toggle(editMode); + runtime.chartAI++; + } + + function getLogAnalyseDialog(min, max) { + var $logAnalyseDialog = $('#logAnalyseDialog'); + var $dateStart = $logAnalyseDialog.find('input[name="dateStart"]'); + var $dateEnd = $logAnalyseDialog.find('input[name="dateEnd"]'); + $dateStart.prop('readonly', true); + $dateEnd.prop('readonly', true); + var dlgBtns = {}; + + dlgBtns[Messages.strFromSlowLog] = function () { + loadLog('slow', min, max); + $(this).dialog('close'); + }; + + dlgBtns[Messages.strFromGeneralLog] = function () { + loadLog('general', min, max); + $(this).dialog('close'); + }; + + $logAnalyseDialog.dialog({ + width: 'auto', + height: 'auto', + buttons: dlgBtns + }); + Functions.addDatepicker($dateStart, 'datetime', { + showMillisec: false, + showMicrosec: false, + timeFormat: 'HH:mm:ss', + firstDay: firstDayOfCalendar + }); + Functions.addDatepicker($dateEnd, 'datetime', { + showMillisec: false, + showMicrosec: false, + timeFormat: 'HH:mm:ss', + firstDay: firstDayOfCalendar + }); + $dateStart.datepicker('setDate', min); + $dateEnd.datepicker('setDate', max); + } + + function loadLog(type, min, max) { + var dateStart = Date.parse($('#logAnalyseDialog').find('input[name="dateStart"]').datepicker('getDate')) || min; + var dateEnd = Date.parse($('#logAnalyseDialog').find('input[name="dateEnd"]').datepicker('getDate')) || max; + loadLogStatistics({ + src: type, + start: dateStart, + end: dateEnd, + removeVariables: $('#removeVariables').prop('checked'), + limitTypes: $('#limitTypes').prop('checked') + }); + } + /* Called in regular intervals, this function updates the values of each chart in the grid */ + + + function refreshChartGrid() { + /* Send to server */ + runtime.refreshRequest = $.post('index.php?route=/server/status/monitor/chart', { + 'ajax_request': true, + 'requiredData': JSON.stringify(runtime.dataList), + 'server': CommonParams.get('server') + }, function (data) { + var chartData; + + if (typeof data !== 'undefined' && data.success === true) { + chartData = data.message; + } else { + return serverResponseError(); + } + + var value; + var i = 0; + var diff; + var total; + /* Update values in each graph */ + + $.each(runtime.charts, function (orderKey, elem) { + var key = elem.chartID; // If newly added chart, we have no data for it yet + + if (!chartData[key]) { + return; + } // Draw all series + + + total = 0; + + for (var j = 0; j < elem.nodes.length; j++) { + // Update x-axis + if (i === 0 && j === 0) { + if (oldChartData === null) { + diff = chartData.x - runtime.xmax; + } else { + diff = parseInt(chartData.x - oldChartData.x, 10); + } + + runtime.xmin += diff; + runtime.xmax += diff; + } // elem.chart.xAxis[0].setExtremes(runtime.xmin, runtime.xmax, false); + + /* Calculate y value */ + // If transform function given, use it + + + if (elem.nodes[j].transformFn) { + value = chartValueTransform(elem.nodes[j].transformFn, chartData[key][j], // Check if first iteration (oldChartData==null), or if newly added chart oldChartData[key]==null + oldChartData === null || oldChartData[key] === null || oldChartData[key] === undefined ? null : oldChartData[key][j]); // Otherwise use original value and apply differential and divisor if given, + // in this case we have only one data point per series - located at chartData[key][j][0] + } else { + value = parseFloat(chartData[key][j][0].value); + + if (elem.nodes[j].display === 'differential') { + if (oldChartData === null || oldChartData[key] === null || oldChartData[key] === undefined) { + continue; + } + + value -= oldChartData[key][j][0].value; + } + + if (elem.nodes[j].valueDivisor) { + value = value / elem.nodes[j].valueDivisor; + } + } // Set y value, if defined + + + if (value !== undefined) { + elem.chart.series[j].data.push([chartData.x, value]); + + if (value > elem.maxYLabel) { + elem.maxYLabel = value; + } else if (elem.maxYLabel === 0) { + elem.maxYLabel = 0.5; + } // free old data point values and update maxYLabel + + + if (elem.chart.series[j].data.length > runtime.gridMaxPoints && elem.chart.series[j].data[0][0] < runtime.xmin) { + // check if the next freeable point is highest + if (elem.maxYLabel <= elem.chart.series[j].data[0][1]) { + elem.chart.series[j].data.splice(0, elem.chart.series[j].data.length - runtime.gridMaxPoints); + elem.maxYLabel = getMaxYLabel(elem.chart.series[j].data); + } else { + elem.chart.series[j].data.splice(0, elem.chart.series[j].data.length - runtime.gridMaxPoints); + } + } + + if (elem.title === Messages.strSystemMemory || elem.title === Messages.strSystemSwap) { + total += value; + } + } + } // update chart options + // keep ticks number/positioning consistent while refreshrate changes + + + var tickInterval = (runtime.xmax - runtime.xmin) / 5; + elem.chart.axes.xaxis.ticks = [runtime.xmax - tickInterval * 4, runtime.xmax - tickInterval * 3, runtime.xmax - tickInterval * 2, runtime.xmax - tickInterval, runtime.xmax]; + + if (elem.title !== Messages.strSystemCPUUsage && elem.title !== Messages.strQueryCacheEfficiency && elem.title !== Messages.strSystemMemory && elem.title !== Messages.strSystemSwap) { + elem.chart.axes.yaxis.max = Math.ceil(elem.maxYLabel * 1.1); + elem.chart.axes.yaxis.tickInterval = Math.ceil(elem.maxYLabel * 1.1 / 5); + } else if (elem.title === Messages.strSystemMemory || elem.title === Messages.strSystemSwap) { + elem.chart.axes.yaxis.max = Math.ceil(total * 1.1 / 100) * 100; + elem.chart.axes.yaxis.tickInterval = Math.ceil(total * 1.1 / 5); + } + + i++; + + if (runtime.redrawCharts) { + elem.chart.replot(); + } + }); + oldChartData = chartData; + runtime.refreshTimeout = setTimeout(refreshChartGrid, monitorSettings.gridRefresh); + }); + } + /* Function to get highest plotted point's y label, to scale the chart, + * TODO: make jqplot's autoscale:true work here + */ + + + function getMaxYLabel(dataValues) { + var maxY = dataValues[0][1]; + $.each(dataValues, function (k, v) { + maxY = v[1] > maxY ? v[1] : maxY; + }); + return maxY; + } + /* Function that supplies special value transform functions for chart values */ + + + function chartValueTransform(name, cur, prev) { + switch (name) { + case 'cpu-linux': + if (prev === null) { + return undefined; + } // cur and prev are datapoint arrays, but containing + // only 1 element for cpu-linux + + + var newCur = cur[0]; + var newPrev = prev[0]; + var diffTotal = newCur.busy + newCur.idle - (newPrev.busy + newPrev.idle); + var diffIdle = newCur.idle - newPrev.idle; + return 100 * (diffTotal - diffIdle) / diffTotal; + // Query cache efficiency (%) + + case 'qce': + if (prev === null) { + return undefined; + } // cur[0].value is Qcache_hits, cur[1].value is Com_select + + + var diffQHits = cur[0].value - prev[0].value; // No NaN please :-) + + if (cur[1].value - prev[1].value === 0) { + return 0; + } + + return diffQHits / (cur[1].value - prev[1].value + diffQHits) * 100; + // Query cache usage (%) + + case 'qcu': + if (cur[1].value === 0) { + return 0; + } // cur[0].value is Qcache_free_memory, cur[1].value is query_cache_size + + + return 100 - cur[0].value / cur[1].value * 100; + } + + return undefined; + } + /* Build list of nodes that need to be retrieved from server. + * It creates something like a stripped down version of the runtime.charts object. + */ + + + function buildRequiredDataList() { + runtime.dataList = {}; // Store an own id, because the property name is subject of reordering, + // thus destroying our mapping with runtime.charts <=> runtime.dataList + + var chartID = 0; + $.each(runtime.charts, function (key, chart) { + runtime.dataList[chartID] = []; + + for (var i = 0, l = chart.nodes.length; i < l; i++) { + runtime.dataList[chartID][i] = chart.nodes[i].dataPoints; + } + + runtime.charts[key].chartID = chartID; + chartID++; + }); + } + /* Loads the log table data, generates the table and handles the filters */ + + + function loadLogStatistics(opts) { + var logRequest = null; + + if (!opts.removeVariables) { + opts.removeVariables = false; + } + + if (!opts.limitTypes) { + opts.limitTypes = false; + } + + $('#emptyDialog').dialog({ + title: Messages.strAnalysingLogsTitle + }); + $('#emptyDialog').html(Messages.strAnalysingLogs + ' '); + var dlgBtns = {}; + + dlgBtns[Messages.strCancelRequest] = function () { + if (logRequest !== null) { + logRequest.abort(); + } + + $(this).dialog('close'); + }; + + $('#emptyDialog').dialog({ + width: 'auto', + height: 'auto', + buttons: dlgBtns + }); + var url = 'index.php?route=/server/status/monitor/slow-log'; + + if (opts.src === 'general') { + url = 'index.php?route=/server/status/monitor/general-log'; + } + + logRequest = $.post(url, { + 'ajax_request': true, + 'time_start': Math.round(opts.start / 1000), + 'time_end': Math.round(opts.end / 1000), + 'removeVariables': opts.removeVariables, + 'limitTypes': opts.limitTypes, + 'server': CommonParams.get('server') + }, function (data) { + var logData; + var dlgBtns = {}; + + if (typeof data !== 'undefined' && data.success === true) { + logData = data.message; + } else { + return serverResponseError(); + } + + if (logData.rows.length === 0) { + $('#emptyDialog').dialog({ + title: Messages.strNoDataFoundTitle + }); + $('#emptyDialog').html('

        ' + Messages.strNoDataFound + '

        '); + + dlgBtns[Messages.strClose] = function () { + $(this).dialog('close'); + }; + + $('#emptyDialog').dialog('option', 'buttons', dlgBtns); + return; + } + + runtime.logDataCols = buildLogTable(logData, opts.removeVariables); + /* Show some stats in the dialog */ + + $('#emptyDialog').dialog({ + title: Messages.strLoadingLogs + }); + $('#emptyDialog').html('

        ' + Messages.strLogDataLoaded + '

        '); + $.each(logData.sum, function (key, value) { + var newKey = key.charAt(0).toUpperCase() + key.slice(1).toLowerCase(); + + if (newKey === 'Total') { + newKey = '' + newKey + ''; + } + + $('#emptyDialog').append(newKey + ': ' + value + '
        '); + }); + /* Add filter options if more than a bunch of rows there to filter */ + + if (logData.numRows > 12) { + $('#logTable').prepend('
        ' + ' ' + Messages.strFiltersForLogTable + '' + '
        ' + ' ' + ' ' + '
        ' + (logData.numRows > 250 ? '
        ' : '') + '
        ' + ' ' + ' ' + ' '); + $('#noWHEREData').on('change', function () { + filterQueries(true); + }); + + if (logData.numRows > 250) { + $('#startFilterQueryText').on('click', filterQueries); + } else { + $('#filterQueryText').on('keyup', filterQueries); + } + } + + dlgBtns[Messages.strJumpToTable] = function () { + $(this).dialog('close'); + $(document).scrollTop($('#logTable').offset().top); + }; + + $('#emptyDialog').dialog('option', 'buttons', dlgBtns); + }); + /** + * Handles the actions performed when the user uses any of the + * log table filters which are the filter by name and grouping + * with ignoring data in WHERE clauses + * + * @param {boolean} varFilterChange Should be true when the users enabled or disabled + * to group queries ignoring data in WHERE clauses + */ + + function filterQueries(varFilterChange) { + var textFilter; + var val = $('#filterQueryText').val(); + + if (val.length === 0) { + textFilter = null; + } else { + try { + textFilter = new RegExp(val, 'i'); + $('#filterQueryText').removeClass('error'); + } catch (e) { + if (e instanceof SyntaxError) { + $('#filterQueryText').addClass('error'); + textFilter = null; + } + } + } + + var rowSum = 0; + var totalSum = 0; + var i = 0; + var q; + var noVars = $('#noWHEREData').prop('checked'); + var equalsFilter = /([^=]+)=(\d+|(('|"|).*?[^\\])\4((\s+)|$))/gi; + var functionFilter = /([a-z0-9_]+)\(.+?\)/gi; + var filteredQueries = {}; + var filteredQueriesLines = {}; + var hide = false; + var rowData; + var queryColumnName = runtime.logDataCols[runtime.logDataCols.length - 2]; + var sumColumnName = runtime.logDataCols[runtime.logDataCols.length - 1]; + var isSlowLog = opts.src === 'slow'; + var columnSums = {}; // For the slow log we have to count many columns (query_time, lock_time, rows_examined, rows_sent, etc.) + + var countRow = function (query, row) { + var cells = row.match(/(.*?)<\/td>/gi); + + if (!columnSums[query]) { + columnSums[query] = [0, 0, 0, 0]; + } // lock_time and query_time and displayed in timespan format + + + columnSums[query][0] += timeToSec(cells[2].replace(/(|<\/td>)/gi, '')); + columnSums[query][1] += timeToSec(cells[3].replace(/(|<\/td>)/gi, '')); // rows_examind and rows_sent are just numbers + + columnSums[query][2] += parseInt(cells[4].replace(/(|<\/td>)/gi, ''), 10); + columnSums[query][3] += parseInt(cells[5].replace(/(|<\/td>)/gi, ''), 10); + }; // We just assume the sql text is always in the second last column, and that the total count is right of it + + + $('#logTable').find('table tbody tr').children('td').eq(runtime.logDataCols.length - 2).each(function () { + var $t = $(this); // If query is a SELECT and user enabled or disabled to group + // queries ignoring data in where statements, we + // need to re-calculate the sums of each row + + if (varFilterChange && $t.html().match(/^SELECT/i)) { + if (noVars) { + // Group on => Sum up identical columns, and hide all but 1 + q = $t.text().replace(equalsFilter, '$1=...$6').trim(); + q = q.replace(functionFilter, ' $1(...)'); // Js does not specify a limit on property name length, + // so we can abuse it as index :-) + + if (filteredQueries[q]) { + filteredQueries[q] += parseInt($t.next().text(), 10); + totalSum += parseInt($t.next().text(), 10); + hide = true; + } else { + filteredQueries[q] = parseInt($t.next().text(), 10); + filteredQueriesLines[q] = i; + $t.text(q); + } + + if (isSlowLog) { + countRow(q, $t.parent().html()); + } + } else { + // Group off: Restore original columns + rowData = $t.parent().data('query'); // Restore SQL text + + $t.text(rowData[queryColumnName]); // Restore total count + + $t.next().text(rowData[sumColumnName]); // Restore slow log columns + + if (isSlowLog) { + $t.parent().children('td').eq(2).text(rowData.query_time); + $t.parent().children('td').eq(3).text(rowData.lock_time); + $t.parent().children('td').eq(4).text(rowData.rows_sent); + $t.parent().children('td').eq(5).text(rowData.rows_examined); + } + } + } // If not required to be hidden, do we need + // to hide because of a not matching text filter? + + + if (!hide && textFilter !== null && !textFilter.exec($t.text())) { + hide = true; + } // Now display or hide this column + + + if (hide) { + $t.parent().css('display', 'none'); + } else { + totalSum += parseInt($t.next().text(), 10); + rowSum++; + $t.parent().css('display', ''); + } + + hide = false; + i++; + }); // We finished summarizing counts => Update count values of all grouped entries + + if (varFilterChange) { + if (noVars) { + var numCol; + var row; + var $table = $('#logTable').find('table tbody'); + $.each(filteredQueriesLines, function (key, value) { + if (filteredQueries[key] <= 1) { + return; + } + + row = $table.children('tr').eq(value); + numCol = row.children().eq(runtime.logDataCols.length - 1); + numCol.text(filteredQueries[key]); + + if (isSlowLog) { + row.children('td').eq(2).text(secToTime(columnSums[key][0])); + row.children('td').eq(3).text(secToTime(columnSums[key][1])); + row.children('td').eq(4).text(columnSums[key][2]); + row.children('td').eq(5).text(columnSums[key][3]); + } + }); + } + + $('#logTable').find('table').trigger('update'); + setTimeout(function () { + $('#logTable').find('table').trigger('sorton', [[[runtime.logDataCols.length - 1, 1]]]); + }, 0); + } // Display some stats at the bottom of the table + + + $('#logTable').find('table tfoot tr').html('' + Messages.strSumRows + ' ' + rowSum + '' + Messages.strTotal + '' + totalSum + ''); + } + } + /* Turns a timespan (12:12:12) into a number */ + + + function timeToSec(timeStr) { + var time = timeStr.split(':'); + return parseInt(time[0], 10) * 3600 + parseInt(time[1], 10) * 60 + parseInt(time[2], 10); + } + /* Turns a number into a timespan (100 into 00:01:40) */ + + + function secToTime(timeInt) { + var time = timeInt; + var hours = Math.floor(time / 3600); + time -= hours * 3600; + var minutes = Math.floor(time / 60); + time -= minutes * 60; + + if (hours < 10) { + hours = '0' + hours; + } + + if (minutes < 10) { + minutes = '0' + minutes; + } + + if (time < 10) { + time = '0' + time; + } + + return hours + ':' + minutes + ':' + time; + } + /* Constructs the log table out of the retrieved server data */ + + + function buildLogTable(data, groupInserts) { + var rows = data.rows; + var cols = []; + var $table = $('
        '); + var $tBody; + var $tRow; + var $tCell; + $('#logTable').html($table); + + var tempPushKey = function (key) { + cols.push(key); + }; + + var formatValue = function (name, value) { + if (name === 'user_host') { + return value.replace(/(\[.*?\])+/g, ''); + } + + return Functions.escapeHtml(value); + }; + + for (var i = 0, l = rows.length; i < l; i++) { + if (i === 0) { + $.each(rows[0], tempPushKey); + $table.append('' + '' + cols.join('') + '' + ''); + $table.append($tBody = $('')); + } + + $tBody.append($tRow = $('')); + + for (var j = 0, ll = cols.length; j < ll; j++) { + // Assuming the query column is the second last + if (j === cols.length - 2 && rows[i][cols[j]].match(/^SELECT/i)) { + $tRow.append($tCell = $('' + formatValue(cols[j], rows[i][cols[j]]) + '')); + $tCell.on('click', openQueryAnalyzer); + } else { + $tRow.append('' + formatValue(cols[j], rows[i][cols[j]]) + ''); + } + + $tRow.data('query', rows[i]); + } + } + + $table.append('' + '' + Messages.strSumRows + ' ' + data.numRows + '' + Messages.strTotal + '' + data.sum.TOTAL + ''); // Append a tooltip to the count column, if there exist one + + if ($('#logTable').find('tr').first().find('th').last().text().indexOf('#') > -1) { + $('#logTable').find('tr').first().find('th').last().append(' ' + Functions.getImage('b_help', '', { + 'class': 'qroupedQueryInfoIcon' + })); + var tooltipContent = Messages.strCountColumnExplanation; + + if (groupInserts) { + tooltipContent += '

        ' + Messages.strMoreCountColumnExplanation + '

        '; + } + + Functions.tooltip($('img.qroupedQueryInfoIcon'), 'img', tooltipContent); + } + + $('#logTable').find('table').tablesorter({ + sortList: [[cols.length - 1, 1]], + widgets: ['fast-zebra'] + }); + $('#logTable').find('table thead th').append('
        '); + return cols; + } + /* Opens the query analyzer dialog */ + + + function openQueryAnalyzer() { + var rowData = $(this).parent().data('query'); + var query = rowData.argument || rowData.sql_text; + + if (codeMirrorEditor) { + // TODO: somehow Functions.sqlPrettyPrint messes up the query, needs be fixed + // query = Functions.sqlPrettyPrint(query); + codeMirrorEditor.setValue(query); // Codemirror is bugged, it doesn't refresh properly sometimes. + // Following lines seem to fix that + + setTimeout(function () { + codeMirrorEditor.refresh(); + }, 50); + } else { + $('#sqlquery').val(query); + } + + var profilingChart = null; + var dlgBtns = {}; + + dlgBtns[Messages.strAnalyzeQuery] = function () { + profilingChart = loadQueryAnalysis(rowData); + }; + + dlgBtns[Messages.strClose] = function () { + $(this).dialog('close'); + }; + + $('#queryAnalyzerDialog').dialog({ + width: 'auto', + height: 'auto', + resizable: false, + buttons: dlgBtns, + close: function () { + if (profilingChart !== null) { + profilingChart.destroy(); + } + + $('#queryAnalyzerDialog').find('div.placeHolder').html(''); + + if (codeMirrorEditor) { + codeMirrorEditor.setValue(''); + } else { + $('#sqlquery').val(''); + } + } + }); + } + /* Loads and displays the analyzed query data */ + + + function loadQueryAnalysis(rowData) { + var db = rowData.db || ''; + var profilingChart = null; + $('#queryAnalyzerDialog').find('div.placeHolder').html(Messages.strAnalyzing + ' '); + $.post('index.php?route=/server/status/monitor/query', { + 'ajax_request': true, + 'query': codeMirrorEditor ? codeMirrorEditor.getValue() : $('#sqlquery').val(), + 'database': db, + 'server': CommonParams.get('server') + }, function (responseData) { + var data = responseData; + var i; + var l; + + if (typeof data !== 'undefined' && data.success === true) { + data = data.message; + } + + if (data.error) { + if (data.error.indexOf('1146') !== -1 || data.error.indexOf('1046') !== -1) { + data.error = Messages.strServerLogError; + } + + $('#queryAnalyzerDialog').find('div.placeHolder').html(''); + return; + } + + var totalTime = 0; // Float sux, I'll use table :( + + $('#queryAnalyzerDialog').find('div.placeHolder').html('
        '); + var explain = '' + Messages.strExplainOutput + ' ' + $('#explain_docu').html(); + + if (data.explain.length > 1) { + explain += ' ('; + + for (i = 0; i < data.explain.length; i++) { + if (i > 0) { + explain += ', '; + } + + explain += '' + i + ''; + } + + explain += ')'; + } + + explain += '

        '; + + var tempExplain = function (key, value) { + var newValue = value === null ? 'null' : Functions.escapeHtml(value); + + if (key === 'type' && newValue.toLowerCase() === 'all') { + newValue = '' + newValue + ''; + } + + if (key === 'Extra') { + newValue = newValue.replace(/(using (temporary|filesort))/gi, '$1'); + } + + explain += key + ': ' + newValue + '
        '; + }; + + for (i = 0, l = data.explain.length; i < l; i++) { + explain += '
        0 ? 'style="display:none;"' : '') + '>'; + $.each(data.explain[i], tempExplain); + explain += '
        '; + } + + explain += '

        ' + Messages.strAffectedRows + ' ' + data.affectedRows; + $('#queryAnalyzerDialog').find('div.placeHolder td.explain').append(explain); + $('#queryAnalyzerDialog').find('div.placeHolder a[href*="#showExplain"]').on('click', function () { + var id = $(this).attr('href').split('-')[1]; + $(this).parent().find('div[class*="explain"]').hide(); + $(this).parent().find('div[class*="explain-' + id + '"]').show(); + }); + + if (data.profiling) { + var chartData = []; + var numberTable = ''; + var duration; + var otherTime = 0; + + for (i = 0, l = data.profiling.length; i < l; i++) { + duration = parseFloat(data.profiling[i].duration); + totalTime += duration; + numberTable += ''; + } // Only put those values in the pie which are > 2% + + + for (i = 0, l = data.profiling.length; i < l; i++) { + duration = parseFloat(data.profiling[i].duration); + + if (duration / totalTime > 0.02) { + chartData.push([Functions.prettyProfilingNum(duration, 2) + ' ' + data.profiling[i].state, duration]); + } else { + otherTime += duration; + } + } + + if (otherTime > 0) { + chartData.push([Functions.prettyProfilingNum(otherTime, 2) + ' ' + Messages.strOther, otherTime]); + } + + numberTable += ''; + numberTable += '
        ' + Messages.strStatus + '' + Messages.strTime + '
        ' + data.profiling[i].state + ' ' + Functions.prettyProfilingNum(duration, 2) + '
        ' + Messages.strTotalTime + '' + Functions.prettyProfilingNum(totalTime, 2) + '
        '; + $('#queryAnalyzerDialog').find('div.placeHolder td.chart').append('' + Messages.strProfilingResults + ' ' + $('#profiling_docu').html() + ' ' + '(' + Messages.strTable + ', ' + Messages.strChart + ')
        ' + numberTable + '

        '); + $('#queryAnalyzerDialog').find('div.placeHolder a[href="#showNums"]').on('click', function () { + $('#queryAnalyzerDialog').find('#queryProfiling').hide(); + $('#queryAnalyzerDialog').find('table.queryNums').show(); + return false; + }); + $('#queryAnalyzerDialog').find('div.placeHolder a[href="#showChart"]').on('click', function () { + $('#queryAnalyzerDialog').find('#queryProfiling').show(); + $('#queryAnalyzerDialog').find('table.queryNums').hide(); + return false; + }); + profilingChart = Functions.createProfilingChart('queryProfiling', chartData); + } + }); + return profilingChart; + } + /* Saves the monitor to localstorage */ + + + function saveMonitor() { + var gridCopy = {}; + $.each(runtime.charts, function (key, elem) { + gridCopy[key] = {}; + gridCopy[key].nodes = elem.nodes; + gridCopy[key].settings = elem.settings; + gridCopy[key].title = elem.title; + gridCopy[key].series = elem.series; + gridCopy[key].maxYLabel = elem.maxYLabel; + }); + + if (isStorageSupported('localStorage')) { + window.localStorage.monitorCharts = JSON.stringify(gridCopy); + window.localStorage.monitorSettings = JSON.stringify(monitorSettings); + window.localStorage.monitorVersion = monitorProtocolVersion; + } + + $('a[href="#clearMonitorConfig"]').show(); + } +}); // Run the monitor once loaded + +AJAX.registerOnload('server/status/monitor.js', function () { + $('a[href="#pauseCharts"]').trigger('click'); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/server/status/variables.js b/Sources/php_script/script/phpMyAdmin/js/dist/server/status/variables.js new file mode 100644 index 0000000..89b7148 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/server/status/variables.js @@ -0,0 +1,96 @@ +/** + * + * + * @package PhpMyAdmin + */ + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('server/status/variables.js', function () { + $('#filterAlert').off('change'); + $('#filterText').off('keyup'); + $('#filterCategory').off('change'); + $('#dontFormat').off('change'); +}); +AJAX.registerOnload('server/status/variables.js', function () { + // Filters for status variables + var textFilter = null; + var alertFilter = $('#filterAlert').prop('checked'); + var categoryFilter = $('#filterCategory').find(':selected').val(); + var text = ''; // Holds filter text + + /* 3 Filtering functions */ + + $('#filterAlert').on('change', function () { + alertFilter = this.checked; + filterVariables(); + }); + $('#filterCategory').on('change', function () { + categoryFilter = $(this).val(); + filterVariables(); + }); + $('#dontFormat').on('change', function () { + // Hiding the table while changing values speeds up the process a lot + const serverStatusVariables = $('#serverStatusVariables'); + serverStatusVariables.hide(); + serverStatusVariables.find('td.value span.original').toggle(this.checked); + serverStatusVariables.find('td.value span.formatted').toggle(!this.checked); + serverStatusVariables.show(); + }).trigger('change'); + $('#filterText').on('keyup', function () { + var word = $(this).val().replace(/_/g, ' '); + + if (word.length === 0) { + textFilter = null; + } else { + try { + textFilter = new RegExp('(^| )' + word, 'i'); + $(this).removeClass('error'); + } catch (e) { + if (e instanceof SyntaxError) { + $(this).addClass('error'); + textFilter = null; + } + } + } + + text = word; + filterVariables(); + }).trigger('keyup'); + /* Filters the status variables by name/category/alert in the variables tab */ + + function filterVariables() { + var usefulLinks = 0; + var section = text; + + if (categoryFilter.length > 0) { + section = categoryFilter; + } + + if (section.length > 1) { + $('#linkSuggestions').find('span').each(function () { + if ($(this).attr('class').indexOf('status_' + section) !== -1) { + usefulLinks++; + $(this).css('display', ''); + } else { + $(this).css('display', 'none'); + } + }); + } + + if (usefulLinks > 0) { + $('#linkSuggestions').css('display', ''); + } else { + $('#linkSuggestions').css('display', 'none'); + } + + $('#serverStatusVariables').find('th.name').each(function () { + if ((textFilter === null || textFilter.exec($(this).text())) && (!alertFilter || $(this).next().find('span.text-danger').length > 0) && (categoryFilter.length === 0 || $(this).parent().hasClass('s_' + categoryFilter))) { + $(this).parent().css('display', ''); + } else { + $(this).parent().css('display', 'none'); + } + }); + } +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/server/user_groups.js b/Sources/php_script/script/phpMyAdmin/js/dist/server/user_groups.js new file mode 100644 index 0000000..993dc86 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/server/user_groups.js @@ -0,0 +1,35 @@ +/** + * @fileoverview Javascript functions used in server user groups page + * @name Server User Groups + * + * @requires jQuery + */ + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('server/user_groups.js', function () { + $('#deleteUserGroupModal').off('show.bs.modal'); +}); +/** + * Bind event handlers + */ + +AJAX.registerOnload('server/user_groups.js', function () { + const deleteUserGroupModal = $('#deleteUserGroupModal'); + deleteUserGroupModal.on('show.bs.modal', function (event) { + const userGroupName = $(event.relatedTarget).data('user-group'); + this.querySelector('.modal-body').innerText = Functions.sprintf(Messages.strDropUserGroupWarning, Functions.escapeHtml(userGroupName)); + }); + deleteUserGroupModal.on('shown.bs.modal', function (event) { + const userGroupName = $(event.relatedTarget).data('user-group'); + $('#deleteUserGroupConfirm').on('click', function () { + $.post('index.php?route=/server/user-groups', { + 'deleteUserGroup': true, + 'userGroup': userGroupName, + 'ajax_request': true + }, AJAX.responseHandler); + $('#deleteUserGroupModal').modal('hide'); + }); + }); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/table/change.js b/Sources/php_script/script/phpMyAdmin/js/dist/table/change.js new file mode 100644 index 0000000..68eefae --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/table/change.js @@ -0,0 +1,836 @@ +/** + * @fileoverview function used in table data manipulation pages + * + * @requires jQuery + * @requires jQueryUI + * @requires js/functions.js + * + */ + +/* global extendingValidatorMessages */ +// templates/javascript/variables.twig + +/* global openGISEditor, gisEditorLoaded, loadJSAndGISEditor, loadGISEditor */ +// js/gis_data_editor.js + +/** + * Modify form controls when the "NULL" checkbox is checked + * + * @param {string} theType the MySQL field type + * @param {string} urlField the urlencoded field name - OBSOLETE + * @param {string} md5Field the md5 hashed field name + * @param {string} multiEdit the multi_edit row sequence number + * + * @return {boolean} always true + */ +function nullify(theType, urlField, md5Field, multiEdit) { + var rowForm = document.forms.insertForm; + + if (typeof rowForm.elements['funcs' + multiEdit + '[' + md5Field + ']'] !== 'undefined') { + rowForm.elements['funcs' + multiEdit + '[' + md5Field + ']'].selectedIndex = -1; + } // "ENUM" field with more than 20 characters + + + if (Number(theType) === 1) { + rowForm.elements['fields' + multiEdit + '[' + md5Field + ']'][1].selectedIndex = -1; // Other "ENUM" field + } else if (Number(theType) === 2) { + var elts = rowForm.elements['fields' + multiEdit + '[' + md5Field + ']']; // when there is just one option in ENUM: + + if (elts.checked) { + elts.checked = false; + } else { + var eltsCnt = elts.length; + + for (var i = 0; i < eltsCnt; i++) { + elts[i].checked = false; + } // end for + + } // end if + // "SET" field + + } else if (Number(theType) === 3) { + rowForm.elements['fields' + multiEdit + '[' + md5Field + '][]'].selectedIndex = -1; // Foreign key field (drop-down) + } else if (Number(theType) === 4) { + rowForm.elements['fields' + multiEdit + '[' + md5Field + ']'].selectedIndex = -1; // foreign key field (with browsing icon for foreign values) + } else if (Number(theType) === 6) { + rowForm.elements['fields' + multiEdit + '[' + md5Field + ']'].value = ''; // Other field types + } else + /* if (theType === 5)*/ + { + rowForm.elements['fields' + multiEdit + '[' + md5Field + ']'].value = ''; + } // end if... else if... else + + + return true; +} // end of the 'nullify()' function + +/** + * javascript DateTime format validation. + * its used to prevent adding default (0000-00-00 00:00:00) to database when user enter wrong values + * Start of validation part + */ +// function checks the number of days in febuary + + +function daysInFebruary(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28; +} // function to convert single digit to double digit + + +function fractionReplace(number) { + var num = parseInt(number, 10); + return num >= 1 && num <= 9 ? '0' + num : '00'; +} +/* function to check the validity of date +* The following patterns are accepted in this validation (accepted in mysql as well) +* 1) 2001-12-23 +* 2) 2001-1-2 +* 3) 02-12-23 +* 4) And instead of using '-' the following punctuations can be used (+,.,*,^,@,/) All these are accepted by mysql as well. Therefore no issues +*/ + + +function isDate(val, tmstmp) { + var value = val.replace(/[.|*|^|+|//|@]/g, '-'); + var arrayVal = value.split('-'); + + for (var a = 0; a < arrayVal.length; a++) { + if (arrayVal[a].length === 1) { + arrayVal[a] = fractionReplace(arrayVal[a]); + } + } + + value = arrayVal.join('-'); + var pos = 2; + var dtexp = new RegExp(/^([0-9]{4})-(((01|03|05|07|08|10|12)-((0[0-9])|([1-2][0-9])|(3[0-1])))|((02|04|06|09|11)-((0[0-9])|([1-2][0-9])|30))|((00)-(00)))$/); + + if (value.length === 8) { + pos = 0; + } + + if (dtexp.test(value)) { + var month = parseInt(value.substring(pos + 3, pos + 5), 10); + var day = parseInt(value.substring(pos + 6, pos + 8), 10); + var year = parseInt(value.substring(0, pos + 2), 10); + + if (month === 2 && day > daysInFebruary(year)) { + return false; + } + + if (value.substring(0, pos + 2).length === 2) { + year = parseInt('20' + value.substring(0, pos + 2), 10); + } + + if (tmstmp === true) { + if (year < 1978) { + return false; + } + + if (year > 2038 || year > 2037 && day > 19 && month >= 1 || year > 2037 && month > 1) { + return false; + } + } + } else { + return false; + } + + return true; +} +/* function to check the validity of time +* The following patterns are accepted in this validation (accepted in mysql as well) +* 1) 2:3:4 +* 2) 2:23:43 +* 3) 2:23:43.123456 +*/ + + +function isTime(val) { + var arrayVal = val.split(':'); + + for (var a = 0, l = arrayVal.length; a < l; a++) { + if (arrayVal[a].length === 1) { + arrayVal[a] = fractionReplace(arrayVal[a]); + } + } + + var newVal = arrayVal.join(':'); + var tmexp = new RegExp(/^(-)?(([0-7]?[0-9][0-9])|(8[0-2][0-9])|(83[0-8])):((0[0-9])|([1-5][0-9])):((0[0-9])|([1-5][0-9]))(\.[0-9]{1,6}){0,1}$/); + return tmexp.test(newVal); +} +/** + * To check whether insert section is ignored or not + * @param {string} multiEdit + * @return {boolean} + */ + + +function checkForCheckbox(multiEdit) { + if ($('#insert_ignore_' + multiEdit).length) { + return $('#insert_ignore_' + multiEdit).is(':unchecked'); + } + + return true; +} // used in Search page mostly for INT fields +// eslint-disable-next-line no-unused-vars + + +function verifyAfterSearchFieldChange(index, searchFormId) { + var $thisInput = $('input[name=\'criteriaValues[' + index + ']\']'); // Add data-skip-validators attribute to skip validation in changeValueFieldType function + + if ($('#fieldID_' + index).data('data-skip-validators')) { + $(searchFormId).validate().destroy(); + return; + } // validation for integer type + + + if ($thisInput.data('type') === 'INT' || $thisInput.data('type') === 'TINYINT') { + // Trim spaces if it's an integer + $thisInput.val($thisInput.val().trim()); + var hasMultiple = $thisInput.prop('multiple'); + + if (hasMultiple) { + $(searchFormId).validate({ + // update errors as we write + onkeyup: function (element) { + $(element).valid(); + } + }); // validator method for IN(...), NOT IN(...) + // BETWEEN and NOT BETWEEN + + jQuery.validator.addMethod('validationFunctionForMultipleInt', function (value) { + return value.match(/^(?:(?:\d\s*)|\s*)+(?:,\s*\d+)*$/i) !== null; + }, Messages.strEnterValidNumber); + validateMultipleIntField($thisInput, true); + } else { + $(searchFormId).validate({ + // update errors as we write + onkeyup: function (element) { + $(element).valid(); + } + }); + validateIntField($thisInput, true); + } // Update error on dropdown change + + + $thisInput.valid(); + } +} +/** + * Validate the an input contains multiple int values + * @param {jQuery} jqueryInput the Jquery object + * @param {boolean} returnValueIfFine the value to return if the validator passes + * @return {void} + */ + + +function validateMultipleIntField(jqueryInput, returnValueIfFine) { + // removing previous rules + jqueryInput.rules('remove'); + jqueryInput.rules('add', { + validationFunctionForMultipleInt: { + param: jqueryInput.value, + depends: function () { + return returnValueIfFine; + } + } + }); +} +/** + * Validate the an input contains an int value + * @param {jQuery} jqueryInput the Jquery object + * @param {boolean} returnValueIfIsNumber the value to return if the validator passes + * @return {void} + */ + + +function validateIntField(jqueryInput, returnValueIfIsNumber) { + var mini = parseInt(jqueryInput.data('min')); + var maxi = parseInt(jqueryInput.data('max')); // removing previous rules + + jqueryInput.rules('remove'); + jqueryInput.rules('add', { + number: { + param: true, + depends: function () { + return returnValueIfIsNumber; + } + }, + min: { + param: mini, + depends: function () { + if (isNaN(jqueryInput.val())) { + return false; + } else { + return returnValueIfIsNumber; + } + } + }, + max: { + param: maxi, + depends: function () { + if (isNaN(jqueryInput.val())) { + return false; + } else { + return returnValueIfIsNumber; + } + } + } + }); +} + +function verificationsAfterFieldChange(urlField, multiEdit, theType) { + var evt = window.event || arguments.callee.caller.arguments[0]; + var target = evt.target || evt.srcElement; + var $thisInput = $(':input[name^=\'fields[multi_edit][' + multiEdit + '][' + urlField + ']\']'); // the function drop-down that corresponds to this input field + + var $thisFunction = $('select[name=\'funcs[multi_edit][' + multiEdit + '][' + urlField + ']\']'); + var functionSelected = false; + + if (typeof $thisFunction.val() !== 'undefined' && $thisFunction.val() !== null && $thisFunction.val().length > 0) { + functionSelected = true; + } // To generate the textbox that can take the salt + + + var newSaltBox = '
        '; // If encrypting or decrypting functions that take salt as input is selected append the new textbox for salt + + if (target.value === 'AES_ENCRYPT' || target.value === 'AES_DECRYPT' || target.value === 'DES_ENCRYPT' || target.value === 'DES_DECRYPT' || target.value === 'ENCRYPT') { + if (!$('#salt_' + target.id).length) { + $thisInput.after(newSaltBox); + } + } else { + // Remove the textbox for salt + $('#salt_' + target.id).prev('br').remove(); + $('#salt_' + target.id).remove(); + } // Remove possible blocking rules if the user changed functions + + + $('#' + target.id).rules('remove', 'validationFunctionForMd5'); + $('#' + target.id).rules('remove', 'validationFunctionForAesDesEncrypt'); + + if (target.value === 'MD5') { + $('#' + target.id).rules('add', { + validationFunctionForMd5: { + param: $thisInput, + depends: function () { + return checkForCheckbox(multiEdit); + } + } + }); + } + + if (target.value === 'DES_ENCRYPT' || target.value === 'AES_ENCRYPT') { + $('#' + target.id).rules('add', { + validationFunctionForAesDesEncrypt: { + param: $thisInput, + depends: function () { + return checkForCheckbox(multiEdit); + } + } + }); + } + + if (target.value === 'HEX' && theType.substring(0, 3) === 'int') { + // Add note when HEX function is selected on a int + var newHexInfo = '

        ' + Messages.HexConversionInfo + '

        '; + + if (!$('#note' + target.id).length) { + $thisInput.after(newHexInfo); + } + } else { + $('#note' + target.id).prev('br').remove(); + $('#note' + target.id).remove(); + } // Unchecks the corresponding "NULL" control + + + $('input[name=\'fields_null[multi_edit][' + multiEdit + '][' + urlField + ']\']').prop('checked', false); // Unchecks the Ignore checkbox for the current row + + $('input[name=\'insert_ignore_' + multiEdit + '\']').prop('checked', false); + var charExceptionHandling; + + if (theType.substring(0, 4) === 'char') { + charExceptionHandling = theType.substring(5, 6); + } else if (theType.substring(0, 7) === 'varchar') { + charExceptionHandling = theType.substring(8, 9); + } + + if (functionSelected) { + $thisInput.removeAttr('min'); + $thisInput.removeAttr('max'); // @todo: put back attributes if corresponding function is deselected + } + + if ($thisInput.data('rulesadded') === null && !functionSelected) { + // call validate before adding rules + $($thisInput[0].form).validate(); // validate for date time + + if (theType === 'datetime' || theType === 'time' || theType === 'date' || theType === 'timestamp') { + $thisInput.rules('add', { + validationFunctionForDateTime: { + param: theType, + depends: function () { + return checkForCheckbox(multiEdit); + } + } + }); + } // validation for integer type + + + if ($thisInput.data('type') === 'INT') { + validateIntField($thisInput, checkForCheckbox(multiEdit)); // validation for CHAR types + } else if ($thisInput.data('type') === 'CHAR') { + var maxlen = $thisInput.data('maxlength'); + + if (typeof maxlen !== 'undefined') { + if (maxlen <= 4) { + maxlen = charExceptionHandling; + } + + $thisInput.rules('add', { + maxlength: { + param: maxlen, + depends: function () { + return checkForCheckbox(multiEdit); + } + } + }); + } // validate binary & blob types + + } else if ($thisInput.data('type') === 'HEX') { + $thisInput.rules('add', { + validationFunctionForHex: { + param: true, + depends: function () { + return checkForCheckbox(multiEdit); + } + } + }); + } + + $thisInput.data('rulesadded', true); + } else if ($thisInput.data('rulesadded') === true && functionSelected) { + // remove any rules added + $thisInput.rules('remove'); // remove any error messages + + $thisInput.removeClass('error').removeAttr('aria-invalid').siblings('.error').remove(); + $thisInput.data('rulesadded', null); + } +} +/* End of fields validation*/ + +/** + * Unbind all event handlers before tearing down a page + */ + + +AJAX.registerTeardown('table/change.js', function () { + $(document).off('click', 'span.open_gis_editor'); + $(document).off('click', 'input[name^=\'insert_ignore_\']'); + $(document).off('click', 'input[name=\'gis_data[save]\']'); + $(document).off('click', 'input.checkbox_null'); + $('select[name="submit_type"]').off('change'); + $(document).off('change', '#insert_rows'); +}); +/** + * Ajax handlers for Change Table page + * + * Actions Ajaxified here: + * Submit Data to be inserted into the table. + * Restart insertion with 'N' rows. + */ + +AJAX.registerOnload('table/change.js', function () { + if ($('#insertForm').length) { + // validate the comment form when it is submitted + $('#insertForm').validate(); + jQuery.validator.addMethod('validationFunctionForHex', function (value) { + return value.match(/^[a-f0-9]*$/i) !== null; + }); + jQuery.validator.addMethod('validationFunctionForMd5', function (value, element, options) { + return !(value.substring(0, 3) === 'MD5' && typeof options.data('maxlength') !== 'undefined' && options.data('maxlength') < 32); + }); + jQuery.validator.addMethod('validationFunctionForAesDesEncrypt', function (value, element, options) { + var funType = value.substring(0, 3); + + if (funType !== 'AES' && funType !== 'DES') { + return false; + } + + var dataType = options.data('type'); + + if (dataType === 'HEX' || dataType === 'CHAR') { + return true; + } + + return false; + }); + jQuery.validator.addMethod('validationFunctionForDateTime', function (value, element, options) { + var dtValue = value; + var theType = options; + + if (theType === 'date') { + return isDate(dtValue); + } else if (theType === 'time') { + return isTime(dtValue); + } else if (theType === 'datetime' || theType === 'timestamp') { + var tmstmp = false; + dtValue = dtValue.trim(); + + if (dtValue === 'CURRENT_TIMESTAMP' || dtValue === 'current_timestamp()') { + return true; + } + + if (theType === 'timestamp') { + tmstmp = true; + } + + if (dtValue === '0000-00-00 00:00:00') { + return true; + } + + var dv = dtValue.indexOf(' '); + + if (dv === -1) { + // Only the date component, which is valid + return isDate(dtValue, tmstmp); + } + + return isDate(dtValue.substring(0, dv), tmstmp) && isTime(dtValue.substring(dv + 1)); + } + }); + } + /* + * message extending script must be run + * after initiation of functions + */ + + + extendingValidatorMessages(); + $.datepicker.initialized = false; + $(document).on('click', 'span.open_gis_editor', function (event) { + event.preventDefault(); + var $span = $(this); // Current value + + var value = $span.parent('td').children('input[type=\'text\']').val(); // Field name + + var field = $span.parents('tr').children('td').first().find('input[type=\'hidden\']').val(); // Column type + + var type = $span.parents('tr').find('span.column_type').text(); // Names of input field and null checkbox + + var inputName = $span.parent('td').children('input[type=\'text\']').attr('name'); + openGISEditor(); + + if (!gisEditorLoaded) { + loadJSAndGISEditor(value, field, type, inputName); + } else { + loadGISEditor(value, field, type, inputName); + } + }); + /** + * Forced validation check of fields + */ + + $(document).on('click', 'input[name^=\'insert_ignore_\']', function () { + $('#insertForm').valid(); + }); + /** + * Uncheck the null checkbox as geometry data is placed on the input field + */ + + $(document).on('click', 'input[name=\'gis_data[save]\']', function () { + var inputName = $('form#gis_data_editor_form').find('input[name=\'input_name\']').val(); + var currentRow = $('input[name=\'' + inputName + '\']').parents('tr'); + var $nullCheckbox = currentRow.find('.checkbox_null'); + $nullCheckbox.prop('checked', false); + var rowId = currentRow.find('.open_gis_editor').data('row-id'); // Unchecks the Ignore checkbox for the current row + + $('input[name=\'insert_ignore_' + rowId + '\']').prop('checked', false); + }); + /** + * Handles all current checkboxes for Null; this only takes care of the + * checkboxes on currently displayed rows as the rows generated by + * "Continue insertion" are handled in the "Continue insertion" code + * + */ + + $(document).on('click', 'input.checkbox_null', function () { + nullify( // use hidden fields populated by /table/change + $(this).siblings('.nullify_code').val(), $(this).closest('tr').find('input:hidden').first().val(), $(this).siblings('.hashed_field').val(), $(this).siblings('.multi_edit').val()); + }); + /** + * Reset the auto_increment column to 0 when selecting any of the + * insert options in submit_type-dropdown. Only perform the reset + * when we are in edit-mode, and not in insert-mode(no previous value + * available). + */ + + $('select[name="submit_type"]').on('change', function () { + var thisElemSubmitTypeVal = $(this).val(); + var $table = $('table.insertRowTable'); + var autoIncrementColumn = $table.find('input[name^="auto_increment"]'); + autoIncrementColumn.each(function () { + var $thisElemAIField = $(this); + var thisElemName = $thisElemAIField.attr('name'); + var prevValueField = $table.find('input[name="' + thisElemName.replace('auto_increment', 'fields_prev') + '"]'); + var valueField = $table.find('input[name="' + thisElemName.replace('auto_increment', 'fields') + '"]'); + var previousValue = $(prevValueField).val(); + + if (previousValue !== undefined) { + if (thisElemSubmitTypeVal === 'insert' || thisElemSubmitTypeVal === 'insertignore' || thisElemSubmitTypeVal === 'showinsert') { + $(valueField).val(null); + } else { + $(valueField).val(previousValue); + } + } + }); + }); + /** + * Handle ENTER key when press on Continue insert with field + */ + + $('#insert_rows').on('keypress', function (e) { + var key = e.which; + + if (key === 13) { + addNewContinueInsertionFields(e); + } + }); + /** + * Continue Insertion form + */ + + $(document).on('change', '#insert_rows', addNewContinueInsertionFields); +}); + +function addNewContinueInsertionFields(event) { + event.preventDefault(); + /** + * @var columnCount Number of number of columns table has. + */ + + var columnCount = $('table.insertRowTable').first().find('tr').has('input[name*=\'fields_name\']').length; + /** + * @var curr_rows Number of current insert rows already on page + */ + + var currRows = $('table.insertRowTable').length; + /** + * @var target_rows Number of rows the user wants + */ + + var targetRows = $('#insert_rows').val(); // remove all datepickers + + $('input.datefield, input.datetimefield').each(function () { + $(this).datepicker('destroy'); + }); + + if (currRows < targetRows) { + var tempIncrementIndex = function () { + var $thisElement = $(this); + /** + * Extract the index from the name attribute for all input/select fields and increment it + * name is of format funcs[multi_edit][10][] + */ + + /** + * @var this_name String containing name of the input/select elements + */ + + var thisName = $thisElement.attr('name'); + /** split {@link thisName} at [10], so we have the parts that can be concatenated later */ + + var nameParts = thisName.split(/\[\d+\]/); + /** extract the [10] from {@link nameParts} */ + + var oldRowIndexString = thisName.match(/\[\d+\]/)[0]; + /** extract 10 - had to split into two steps to accomodate double digits */ + + var oldRowIndex = parseInt(oldRowIndexString.match(/\d+/)[0], 10); + /** calculate next index i.e. 11 */ + + newRowIndex = oldRowIndex + 1; + /** generate the new name i.e. funcs[multi_edit][11][foobarbaz] */ + + var newName = nameParts[0] + '[' + newRowIndex + ']' + nameParts[1]; + var hashedField = nameParts[1].match(/\[(.+)\]/)[1]; + $thisElement.attr('name', newName); + /** If element is select[name*='funcs'], update id */ + + if ($thisElement.is('select[name*=\'funcs\']')) { + var thisId = $thisElement.attr('id'); + var idParts = thisId.split(/_/); + var oldIdIndex = idParts[1]; + var prevSelectedValue = $('#field_' + oldIdIndex + '_1').val(); + var newIdIndex = parseInt(oldIdIndex) + columnCount; + var newId = 'field_' + newIdIndex + '_1'; + $thisElement.attr('id', newId); + $thisElement.find('option').filter(function () { + return $(this).text() === prevSelectedValue; + }).attr('selected', 'selected'); // If salt field is there then update its id. + + var nextSaltInput = $thisElement.parent().next('td').next('td').find('input[name*=\'salt\']'); + + if (nextSaltInput.length !== 0) { + nextSaltInput.attr('id', 'salt_' + newId); + } + } // handle input text fields and textareas + + + if ($thisElement.is('.textfield') || $thisElement.is('.char') || $thisElement.is('textarea')) { + // do not remove the 'value' attribute for ENUM columns + // special handling for radio fields after updating ids to unique - see below + if ($thisElement.closest('tr').find('span.column_type').html() !== 'enum') { + $thisElement.val($thisElement.closest('tr').find('span.default_value').html()); + } + + $thisElement.off('change') // Remove onchange attribute that was placed + // by /table/change; it refers to the wrong row index + .attr('onchange', null) // Keep these values to be used when the element + // will change + .data('hashed_field', hashedField).data('new_row_index', newRowIndex).on('change', function () { + var $changedElement = $(this); + verificationsAfterFieldChange($changedElement.data('hashed_field'), $changedElement.data('new_row_index'), $changedElement.closest('tr').find('span.column_type').html()); + }); + } + + if ($thisElement.is('.checkbox_null')) { + $thisElement // this event was bound earlier by jQuery but + // to the original row, not the cloned one, so unbind() + .off('click') // Keep these values to be used when the element + // will be clicked + .data('hashed_field', hashedField).data('new_row_index', newRowIndex).on('click', function () { + var $changedElement = $(this); + nullify($changedElement.siblings('.nullify_code').val(), $thisElement.closest('tr').find('input:hidden').first().val(), $changedElement.data('hashed_field'), '[multi_edit][' + $changedElement.data('new_row_index') + ']'); + }); + } + }; + + var tempReplaceAnchor = function () { + var $anchor = $(this); + var newValue = 'rownumber=' + newRowIndex; // needs improvement in case something else inside + // the href contains this pattern + + var newHref = $anchor.attr('href').replace(/rownumber=\d+/, newValue); + $anchor.attr('href', newHref); + }; + + var restoreValue = function () { + if ($(this).closest('tr').find('span.column_type').html() === 'enum') { + if ($(this).val() === $checkedValue) { + $(this).prop('checked', true); + } else { + $(this).prop('checked', false); + } + } + }; + + while (currRows < targetRows) { + /** + * @var $last_row Object referring to the last row + */ + var $lastRow = $('#insertForm').find('.insertRowTable').last(); // need to access this at more than one level + // (also needs improvement because it should be calculated + // just once per cloned row, not once per column) + + var newRowIndex = 0; + var $checkedValue = $lastRow.find('input:checked').val(); // Clone the insert tables + + $lastRow.clone(true, true).insertBefore('#actions_panel').find('input[name*=multi_edit],select[name*=multi_edit],textarea[name*=multi_edit]').each(tempIncrementIndex).end().find('.foreign_values_anchor').each(tempReplaceAnchor); + var $oldRow = $lastRow.find('.textfield'); + $oldRow.each(restoreValue); // set the value of enum field of new row to default + + var $newRow = $('#insertForm').find('.insertRowTable').last(); + $newRow.find('.textfield').each(function () { + if ($(this).closest('tr').find('span.column_type').html() === 'enum') { + if ($(this).val() === $(this).closest('tr').find('span.default_value').html()) { + $(this).prop('checked', true); + } else { + $(this).prop('checked', false); + } + } + }); // Insert/Clone the ignore checkboxes + + if (currRows === 1) { + $('').insertBefore($('table.insertRowTable').last()).after(''); + } else { + /** + * @var $last_checkbox Object reference to the last checkbox in #insertForm + */ + var $lastCheckbox = $('#insertForm').children('input:checkbox').last(); + /** name of {@link $lastCheckbox} */ + + var lastCheckboxName = $lastCheckbox.attr('name'); + /** index of {@link $lastCheckbox} */ + + var lastCheckboxIndex = parseInt(lastCheckboxName.match(/\d+/), 10); + /** name of new {@link $lastCheckbox} */ + + var newName = lastCheckboxName.replace(/\d+/, lastCheckboxIndex + 1); + $('
        ').insertBefore($('table.insertRowTable').last()); + $lastCheckbox.clone().attr({ + 'id': newName, + 'name': newName + }).prop('checked', true).insertBefore($('table.insertRowTable').last()); + $('label[for^=insert_ignore]').last().clone().attr('for', newName).insertBefore($('table.insertRowTable').last()); + $('
        ').insertBefore($('table.insertRowTable').last()); + } + + currRows++; + } // recompute tabindex for text fields and other controls at footer; + // IMO it's not really important to handle the tabindex for + // function and Null + + + var tabIndex = 0; + $('.textfield, .char, textarea').each(function () { + tabIndex++; + $(this).attr('tabindex', tabIndex); // update the IDs of textfields to ensure that they are unique + + $(this).attr('id', 'field_' + tabIndex + '_3'); + }); + $('.control_at_footer').each(function () { + tabIndex++; + $(this).attr('tabindex', tabIndex); + }); + } else if (currRows > targetRows) { + /** + * Displays alert if data loss possible on decrease + * of rows. + */ + var checkLock = jQuery.isEmptyObject(AJAX.lockedTargets); + + if (checkLock || confirm(Messages.strConfirmRowChange) === true) { + while (currRows > targetRows) { + $('input[id^=insert_ignore]').last().nextUntil('fieldset').addBack().remove(); + currRows--; + } + } else { + document.getElementById('insert_rows').value = currRows; + } + } // Add all the required datepickers back + + + Functions.addDateTimePicker(); +} // eslint-disable-next-line no-unused-vars + + +function changeValueFieldType(elem, searchIndex) { + var fieldsValue = $('input#fieldID_' + searchIndex); + + if (0 === fieldsValue.size()) { + return; + } + + var type = $(elem).val(); + + if ('LIKE' === type || 'LIKE %...%' === type || 'NOT LIKE' === type || 'NOT LIKE %...%' === type) { + $('#fieldID_' + searchIndex).data('data-skip-validators', true); + return; + } else { + $('#fieldID_' + searchIndex).data('data-skip-validators', false); + } + + if ('IN (...)' === type || 'NOT IN (...)' === type || 'BETWEEN' === type || 'NOT BETWEEN' === type) { + $('#fieldID_' + searchIndex).prop('multiple', true); + } else { + $('#fieldID_' + searchIndex).prop('multiple', false); + } +} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/table/chart.js b/Sources/php_script/script/phpMyAdmin/js/dist/table/chart.js new file mode 100644 index 0000000..834f063 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/table/chart.js @@ -0,0 +1,435 @@ +/* global ColumnType, DataTable, JQPlotChartFactory */ +// js/chart.js + +/* global codeMirrorEditor */ +// js/functions.js +var chartData = {}; +var tempChartTitle; +var currentChart = null; +var currentSettings = null; +var dateTimeCols = []; +var numericCols = []; + +function extractDate(dateString) { + var matches; + var match; + var dateTimeRegExp = /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/; + var dateRegExp = /[0-9]{4}-[0-9]{2}-[0-9]{2}/; + matches = dateTimeRegExp.exec(dateString); + + if (matches !== null && matches.length > 0) { + match = matches[0]; + return new Date(match.substr(0, 4), parseInt(match.substr(5, 2), 10) - 1, match.substr(8, 2), match.substr(11, 2), match.substr(14, 2), match.substr(17, 2)); + } else { + matches = dateRegExp.exec(dateString); + + if (matches !== null && matches.length > 0) { + match = matches[0]; + return new Date(match.substr(0, 4), parseInt(match.substr(5, 2), 10) - 1, match.substr(8, 2)); + } + } + + return null; +} + +function queryChart(data, columnNames, settings) { + if ($('#querychart').length === 0) { + return; + } + + var plotSettings = { + title: { + text: settings.title, + escapeHtml: true + }, + grid: { + drawBorder: false, + shadow: false, + background: 'rgba(0,0,0,0)' + }, + legend: { + show: true, + placement: 'outsideGrid', + location: 'e', + rendererOptions: { + numberColumns: 2 + } + }, + axes: { + xaxis: { + label: Functions.escapeHtml(settings.xaxisLabel) + }, + yaxis: { + label: settings.yaxisLabel + } + }, + stackSeries: settings.stackSeries + }; // create the chart + + var factory = new JQPlotChartFactory(); + var chart = factory.createChart(settings.type, 'querychart'); // create the data table and add columns + + var dataTable = new DataTable(); + + if (settings.type === 'timeline') { + dataTable.addColumn(ColumnType.DATE, columnNames[settings.mainAxis]); + } else if (settings.type === 'scatter') { + dataTable.addColumn(ColumnType.NUMBER, columnNames[settings.mainAxis]); + } else { + dataTable.addColumn(ColumnType.STRING, columnNames[settings.mainAxis]); + } + + var i; + var values = []; + + if (settings.seriesColumn === null) { + $.each(settings.selectedSeries, function (index, element) { + dataTable.addColumn(ColumnType.NUMBER, columnNames[element]); + }); // set data to the data table + + var columnsToExtract = [settings.mainAxis]; + $.each(settings.selectedSeries, function (index, element) { + columnsToExtract.push(element); + }); + var newRow; + var row; + var col; + + for (i = 0; i < data.length; i++) { + row = data[i]; + newRow = []; + + for (var j = 0; j < columnsToExtract.length; j++) { + col = columnNames[columnsToExtract[j]]; + + if (j === 0) { + if (settings.type === 'timeline') { + // first column is date type + newRow.push(extractDate(row[col])); + } else if (settings.type === 'scatter') { + newRow.push(parseFloat(row[col])); + } else { + // first column is string type + newRow.push(row[col]); + } + } else { + // subsequent columns are of type, number + newRow.push(parseFloat(row[col])); + } + } + + values.push(newRow); + } + + dataTable.setData(values); + } else { + var seriesNames = {}; + var seriesNumber = 1; + var seriesColumnName = columnNames[settings.seriesColumn]; + + for (i = 0; i < data.length; i++) { + if (!seriesNames[data[i][seriesColumnName]]) { + seriesNames[data[i][seriesColumnName]] = seriesNumber; + seriesNumber++; + } + } + + $.each(seriesNames, function (seriesName) { + dataTable.addColumn(ColumnType.NUMBER, seriesName); + }); + var valueMap = {}; + var xValue; + var value; + var mainAxisName = columnNames[settings.mainAxis]; + var valueColumnName = columnNames[settings.valueColumn]; + + for (i = 0; i < data.length; i++) { + xValue = data[i][mainAxisName]; + value = valueMap[xValue]; + + if (!value) { + value = [xValue]; + valueMap[xValue] = value; + } + + seriesNumber = seriesNames[data[i][seriesColumnName]]; + value[seriesNumber] = parseFloat(data[i][valueColumnName]); + } + + $.each(valueMap, function (index, value) { + values.push(value); + }); + dataTable.setData(values); + } // draw the chart and return the chart object + + + chart.draw(dataTable, plotSettings); + return chart; +} + +function drawChart() { + currentSettings.width = $('#resizer').width() - 20; + currentSettings.height = $('#resizer').height() - 20; // TODO: a better way using .redraw() ? + + if (currentChart !== null) { + currentChart.destroy(); + } + + var columnNames = []; + $('#chartXAxisSelect option').each(function () { + columnNames.push(Functions.escapeHtml($(this).text())); + }); + + try { + currentChart = queryChart(chartData, columnNames, currentSettings); + + if (currentChart !== null) { + $('#saveChart').attr('href', currentChart.toImageString()); + } + } catch (err) { + Functions.ajaxShowMessage(err.message, false); + } +} + +function getSelectedSeries() { + var val = $('#chartSeriesSelect').val() || []; + var ret = []; + $.each(val, function (i, v) { + ret.push(parseInt(v, 10)); + }); + return ret; +} + +function onXAxisChange() { + var $xAxisSelect = $('#chartXAxisSelect'); + currentSettings.mainAxis = parseInt($xAxisSelect.val(), 10); + + if (dateTimeCols.indexOf(currentSettings.mainAxis) !== -1) { + document.getElementById('timelineChartType').classList.remove('d-none'); + } else { + document.getElementById('timelineChartType').classList.add('d-none'); + + if (currentSettings.type === 'timeline') { + $('#lineChartTypeRadio').prop('checked', true); + currentSettings.type = 'line'; + } + } + + if (numericCols.indexOf(currentSettings.mainAxis) !== -1) { + document.getElementById('scatterChartType').classList.remove('d-none'); + } else { + document.getElementById('scatterChartType').classList.add('d-none'); + + if (currentSettings.type === 'scatter') { + $('#lineChartTypeRadio').prop('checked', true); + currentSettings.type = 'line'; + } + } + + var xAxisTitle = $xAxisSelect.children('option:selected').text(); + $('#xAxisLabelInput').val(xAxisTitle); + currentSettings.xaxisLabel = xAxisTitle; +} + +function onDataSeriesChange() { + var $seriesSelect = $('#chartSeriesSelect'); + currentSettings.selectedSeries = getSelectedSeries(); + var yAxisTitle; + + if (currentSettings.selectedSeries.length === 1) { + document.getElementById('pieChartType').classList.remove('d-none'); + yAxisTitle = $seriesSelect.children('option:selected').text(); + } else { + document.getElementById('pieChartType').classList.add('d-none'); + + if (currentSettings.type === 'pie') { + $('#lineChartTypeRadio').prop('checked', true); + currentSettings.type = 'line'; + } + + yAxisTitle = Messages.strYValues; + } + + $('#yAxisLabelInput').val(yAxisTitle); + currentSettings.yaxisLabel = yAxisTitle; +} +/** + * Unbind all event handlers before tearing down a page + */ + + +AJAX.registerTeardown('table/chart.js', function () { + $('input[name="chartType"]').off('click'); + $('#barStackedCheckbox').off('click'); + $('#seriesColumnCheckbox').off('click'); + $('#chartTitleInput').off('focus').off('keyup').off('blur'); + $('#chartXAxisSelect').off('change'); + $('#chartSeriesSelect').off('change'); + $('#chartSeriesColumnSelect').off('change'); + $('#chartValueColumnSelect').off('change'); + $('#xAxisLabelInput').off('keyup'); + $('#yAxisLabelInput').off('keyup'); + $('#resizer').off('resizestop'); + $('#tblchartform').off('submit'); +}); +AJAX.registerOnload('table/chart.js', function () { + // handle manual resize + $('#resizer').on('resizestop', function () { + // make room so that the handle will still appear + $('#querychart').height($('#resizer').height() * 0.96); + $('#querychart').width($('#resizer').width() * 0.96); + + if (currentChart !== null) { + currentChart.redraw({ + resetAxes: true + }); + } + }); // handle chart type changes + + $('input[name="chartType"]').on('click', function () { + var type = currentSettings.type = $(this).val(); + + if (type === 'bar' || type === 'column' || type === 'area') { + document.getElementById('barStacked').classList.remove('d-none'); + } else { + $('#barStackedCheckbox').prop('checked', false); + $.extend(true, currentSettings, { + stackSeries: false + }); + document.getElementById('barStacked').classList.add('d-none'); + } + + drawChart(); + }); // handle chosing alternative data format + + $('#seriesColumnCheckbox').on('click', function () { + var $seriesColumn = $('#chartSeriesColumnSelect'); + var $valueColumn = $('#chartValueColumnSelect'); + var $chartSeries = $('#chartSeriesSelect'); + + if ($(this).is(':checked')) { + $seriesColumn.prop('disabled', false); + $valueColumn.prop('disabled', false); + $chartSeries.prop('disabled', true); + currentSettings.seriesColumn = parseInt($seriesColumn.val(), 10); + currentSettings.valueColumn = parseInt($valueColumn.val(), 10); + } else { + $seriesColumn.prop('disabled', true); + $valueColumn.prop('disabled', true); + $chartSeries.prop('disabled', false); + currentSettings.seriesColumn = null; + currentSettings.valueColumn = null; + } + + drawChart(); + }); // handle stacking for bar, column and area charts + + $('#barStackedCheckbox').on('click', function () { + if ($(this).is(':checked')) { + $.extend(true, currentSettings, { + stackSeries: true + }); + } else { + $.extend(true, currentSettings, { + stackSeries: false + }); + } + + drawChart(); + }); // handle changes in chart title + + $('#chartTitleInput').on('focus', function () { + tempChartTitle = $(this).val(); + }).on('keyup', function () { + currentSettings.title = $('#chartTitleInput').val(); + drawChart(); + }).on('blur', function () { + if ($(this).val() !== tempChartTitle) { + drawChart(); + } + }); // handle changing the x-axis + + $('#chartXAxisSelect').on('change', function () { + onXAxisChange(); + drawChart(); + }); // handle changing the selected data series + + $('#chartSeriesSelect').on('change', function () { + onDataSeriesChange(); + drawChart(); + }); // handle changing the series column + + $('#chartSeriesColumnSelect').on('change', function () { + currentSettings.seriesColumn = parseInt($(this).val(), 10); + drawChart(); + }); // handle changing the value column + + $('#chartValueColumnSelect').on('change', function () { + currentSettings.valueColumn = parseInt($(this).val(), 10); + drawChart(); + }); // handle manual changes to the chart x-axis labels + + $('#xAxisLabelInput').on('keyup', function () { + currentSettings.xaxisLabel = $(this).val(); + drawChart(); + }); // handle manual changes to the chart y-axis labels + + $('#yAxisLabelInput').on('keyup', function () { + currentSettings.yaxisLabel = $(this).val(); + drawChart(); + }); // handler for ajax form submission + + $('#tblchartform').on('submit', function () { + var $form = $(this); + + if (codeMirrorEditor) { + $form[0].elements.sql_query.value = codeMirrorEditor.getValue(); + } + + if (!Functions.checkSqlQuery($form[0])) { + return false; + } + + var $msgbox = Functions.ajaxShowMessage(); + Functions.prepareForAjaxRequest($form); + $.post($form.attr('action'), $form.serialize(), function (data) { + if (typeof data !== 'undefined' && data.success === true && typeof data.chartData !== 'undefined') { + chartData = JSON.parse(data.chartData); + drawChart(); + Functions.ajaxRemoveMessage($msgbox); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }, 'json'); // end $.post() + + return false; + }); // from jQuery UI + + $('#resizer').resizable({ + minHeight: 240, + minWidth: 300 + }).width($('#div_view_options').width() - 50).trigger('resizestop'); + currentSettings = { + type: 'line', + width: $('#resizer').width() - 20, + height: $('#resizer').height() - 20, + xaxisLabel: $('#xAxisLabelInput').val(), + yaxisLabel: $('#yAxisLabelInput').val(), + title: $('#chartTitleInput').val(), + stackSeries: false, + mainAxis: parseInt($('#chartXAxisSelect').val(), 10), + selectedSeries: getSelectedSeries(), + seriesColumn: null + }; + var vals = $('input[name="dateTimeCols"]').val().split(' '); + $.each(vals, function (i, v) { + dateTimeCols.push(parseInt(v, 10)); + }); + vals = $('input[name="numericCols"]').val().split(' '); + $.each(vals, function (i, v) { + numericCols.push(parseInt(v, 10)); + }); + onXAxisChange(); + onDataSeriesChange(); + $('#tblchartform').trigger('submit'); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/table/select.js b/Sources/php_script/script/phpMyAdmin/js/dist/table/select.js new file mode 100644 index 0000000..9d950f3 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/table/select.js @@ -0,0 +1,310 @@ +/** + * @fileoverview JavaScript functions used on /table/search + * + * @requires jQuery + * @requires js/functions.js + */ + +/* global changeValueFieldType, verifyAfterSearchFieldChange */ +// js/table/change.js + +/* global openGISEditor, gisEditorLoaded, loadJSAndGISEditor, loadGISEditor */ +// js/gis_data_editor.js +var TableSelect = {}; +/** + * Checks if given data-type is numeric or date. + * + * @param {string} dataType Column data-type + * + * @return {boolean | string} + */ + +TableSelect.checkIfDataTypeNumericOrDate = function (dataType) { + // To test for numeric data-types. + var numericRegExp = new RegExp('TINYINT|SMALLINT|MEDIUMINT|INT|BIGINT|DECIMAL|FLOAT|DOUBLE|REAL', 'i'); // To test for date data-types. + + var dateRegExp = new RegExp('DATETIME|DATE|TIMESTAMP|TIME|YEAR', 'i'); // Return matched data-type + + if (numericRegExp.test(dataType)) { + return numericRegExp.exec(dataType)[0]; + } + + if (dateRegExp.test(dataType)) { + return dateRegExp.exec(dataType)[0]; + } + + return false; +}; +/** + * Unbind all event handlers before tearing down a page + */ + + +AJAX.registerTeardown('table/select.js', function () { + $('#togglesearchformlink').off('click'); + $(document).off('submit', '#tbl_search_form.ajax'); + $('select.geom_func').off('change'); + $(document).off('click', 'span.open_search_gis_editor'); + $('body').off('change', 'select[name*="criteriaColumnOperators"]'); // Fix for bug #13778, changed 'click' to 'change' +}); +AJAX.registerOnload('table/select.js', function () { + /** + * Prepare a div containing a link, otherwise it's incorrectly displayed + * after a couple of clicks + */ + $('
        ').insertAfter('#tbl_search_form') // don't show it until we have results on-screen + .hide(); + $('#togglesearchformlink').html(Messages.strShowSearchCriteria).on('click', function () { + var $link = $(this); + $('#tbl_search_form').slideToggle(); + + if ($link.text() === Messages.strHideSearchCriteria) { + $link.text(Messages.strShowSearchCriteria); + } else { + $link.text(Messages.strHideSearchCriteria); + } // avoid default click action + + + return false; + }); + var tableRows = $('#fieldset_table_qbe select.column-operator'); + $.each(tableRows, function (index, item) { + $(item).on('change', function () { + changeValueFieldType(this, index); + verifyAfterSearchFieldChange(index, '#tbl_search_form'); + }); + }); + /** + * Ajax event handler for Table search + */ + + $(document).on('submit', '#tbl_search_form.ajax', function (event) { + var unaryFunctions = ['IS NULL', 'IS NOT NULL', '= \'\'', '!= \'\'']; + var geomUnaryFunctions = ['IsEmpty', 'IsSimple', 'IsRing', 'IsClosed']; // jQuery object to reuse + + var $searchForm = $(this); + event.preventDefault(); // empty previous search results while we are waiting for new results + + $('#sqlqueryresultsouter').empty(); + var $msgbox = Functions.ajaxShowMessage(Messages.strSearching, false); + Functions.prepareForAjaxRequest($searchForm); + var values = {}; + $searchForm.find(':input').each(function () { + var $input = $(this); + + if ($input.attr('type') === 'checkbox' || $input.attr('type') === 'radio') { + if ($input.is(':checked')) { + values[this.name] = $input.val(); + } + } else { + values[this.name] = $input.val(); + } + }); + var columnCount = $('select[name="columnsToDisplay[]"] option').length; // Submit values only for the columns that have unary column operator or a search criteria + + for (var a = 0; a < columnCount; a++) { + if ($.inArray(values['criteriaColumnOperators[' + a + ']'], unaryFunctions) >= 0) { + continue; + } + + if (values['geom_func[' + a + ']'] && $.inArray(values['geom_func[' + a + ']'], geomUnaryFunctions) >= 0) { + continue; + } + + if (values['criteriaValues[' + a + ']'] === '' || values['criteriaValues[' + a + ']'] === null) { + delete values['criteriaValues[' + a + ']']; + delete values['criteriaColumnOperators[' + a + ']']; + delete values['criteriaColumnNames[' + a + ']']; + delete values['criteriaColumnTypes[' + a + ']']; + delete values['criteriaColumnCollations[' + a + ']']; + } + } // If all columns are selected, use a single parameter to indicate that + + + if (values['columnsToDisplay[]'] !== null) { + if (values['columnsToDisplay[]'].length === columnCount) { + delete values['columnsToDisplay[]']; + values.displayAllColumns = true; + } + } else { + values.displayAllColumns = true; + } + + $.post($searchForm.attr('action'), values, function (data) { + Functions.ajaxRemoveMessage($msgbox); + + if (typeof data !== 'undefined' && data.success === true) { + if (typeof data.sql_query !== 'undefined') { + // zero rows + $('#sqlqueryresultsouter').html(data.sql_query); + } else { + // results found + $('#sqlqueryresultsouter').html(data.message); + $('.sqlqueryresults').trigger('makegrid'); + } + + $('#tbl_search_form') // workaround for bug #3168569 - Issue on toggling the "Hide search criteria" in chrome. + .slideToggle().hide(); + $('#togglesearchformlink') // always start with the Show message + .text(Messages.strShowSearchCriteria); + $('#togglesearchformdiv') // now it's time to show the div containing the link + .show(); + $('html, body').animate({ + scrollTop: 0 + }, 'fast'); + } else { + $('#sqlqueryresultsouter').html(data.error); + } + + Functions.highlightSql($('#sqlqueryresultsouter')); + }); // end $.post() + }); // Following section is related to the 'function based search' for geometry data types. + // Initially hide all the open_gis_editor spans + + $('span.open_search_gis_editor').hide(); + $('select.geom_func').on('change', function () { + var $geomFuncSelector = $(this); + var binaryFunctions = ['Contains', 'Crosses', 'Disjoint', 'Equals', 'Intersects', 'Overlaps', 'Touches', 'Within', 'MBRContains', 'MBRDisjoint', 'MBREquals', 'MBRIntersects', 'MBROverlaps', 'MBRTouches', 'MBRWithin', 'ST_Contains', 'ST_Crosses', 'ST_Disjoint', 'ST_Equals', 'ST_Intersects', 'ST_Overlaps', 'ST_Touches', 'ST_Within']; + var tempArray = ['Envelope', 'EndPoint', 'StartPoint', 'ExteriorRing', 'Centroid', 'PointOnSurface']; + var outputGeomFunctions = binaryFunctions.concat(tempArray); // If the chosen function takes two geometry objects as parameters + + var $operator = $geomFuncSelector.parents('tr').find('td').eq(4).find('select'); + + if ($.inArray($geomFuncSelector.val(), binaryFunctions) >= 0) { + $operator.prop('readonly', true); + } else { + $operator.prop('readonly', false); + } // if the chosen function's output is a geometry, enable GIS editor + + + var $editorSpan = $geomFuncSelector.parents('tr').find('span.open_search_gis_editor'); + + if ($.inArray($geomFuncSelector.val(), outputGeomFunctions) >= 0) { + $editorSpan.show(); + } else { + $editorSpan.hide(); + } + }); + $(document).on('click', 'span.open_search_gis_editor', function (event) { + event.preventDefault(); + var $span = $(this); // Current value + + var value = $span.parent('td').children('input[type=\'text\']').val(); // Field name + + var field = 'Parameter'; // Column type + + var geomFunc = $span.parents('tr').find('.geom_func').val(); + var type; + + if (geomFunc === 'Envelope') { + type = 'polygon'; + } else if (geomFunc === 'ExteriorRing') { + type = 'linestring'; + } else { + type = 'point'; + } // Names of input field and null checkbox + + + var inputName = $span.parent('td').children('input[type=\'text\']').attr('name'); // Token + + openGISEditor(); + + if (!gisEditorLoaded) { + loadJSAndGISEditor(value, field, type, inputName); + } else { + loadGISEditor(value, field, type, inputName); + } + }); + /** + * Ajax event handler for Range-Search. + */ + + $('body').on('change', 'select[name*="criteriaColumnOperators"]', function () { + // Fix for bug #13778, changed 'click' to 'change' + var $sourceSelect = $(this); // Get the column name. + + var columnName = $(this).closest('tr').find('th').first().text(); // Get the data-type of column excluding size. + + var dataType = $(this).closest('tr').find('td[data-type]').attr('data-type'); + dataType = TableSelect.checkIfDataTypeNumericOrDate(dataType); // Get the operator. + + var operator = $(this).val(); + + if ((operator === 'BETWEEN' || operator === 'NOT BETWEEN') && dataType) { + var $msgbox = Functions.ajaxShowMessage(); + $.ajax({ + url: 'index.php?route=/table/search', + type: 'POST', + data: { + 'server': CommonParams.get('server'), + 'ajax_request': 1, + 'db': $('input[name="db"]').val(), + 'table': $('input[name="table"]').val(), + 'column': columnName, + 'range_search': 1 + }, + success: function (response) { + Functions.ajaxRemoveMessage($msgbox); + + if (response.success) { + // Get the column min value. + var min = response.column_data.min ? '(' + Messages.strColumnMin + ' ' + response.column_data.min + ')' : ''; // Get the column max value. + + var max = response.column_data.max ? '(' + Messages.strColumnMax + ' ' + response.column_data.max + ')' : ''; + $('#rangeSearchModal').modal('show'); + $('#rangeSearchLegend').first().html(operator); + $('#rangeSearchMin').first().text(min); + $('#rangeSearchMax').first().text(max); // Reset input values on reuse + + $('#min_value').first().val(''); + $('#max_value').first().val(''); // Add datepicker wherever required. + + Functions.addDatepicker($('#min_value'), dataType); + Functions.addDatepicker($('#max_value'), dataType); + $('#rangeSearchModalGo').on('click', function () { + var minValue = $('#min_value').val(); + var maxValue = $('#max_value').val(); + var finalValue = ''; + + if (minValue.length && maxValue.length) { + finalValue = minValue + ', ' + maxValue; + } + + var $targetField = $sourceSelect.closest('tr').find('[name*="criteriaValues"]'); // If target field is a select list. + + if ($targetField.is('select')) { + $targetField.val(finalValue); + var $options = $targetField.find('option'); + var $closestMin = null; + var $closestMax = null; // Find closest min and max value. + + $options.each(function () { + if ($closestMin === null || Math.abs($(this).val() - minValue) < Math.abs($closestMin.val() - minValue)) { + $closestMin = $(this); + } + + if ($closestMax === null || Math.abs($(this).val() - maxValue) < Math.abs($closestMax.val() - maxValue)) { + $closestMax = $(this); + } + }); + $closestMin.attr('selected', 'selected'); + $closestMax.attr('selected', 'selected'); + } else { + $targetField.val(finalValue); + } + + $('#rangeSearchModal').modal('hide'); + }); + } else { + Functions.ajaxShowMessage(response.error); + } + }, + error: function () { + Functions.ajaxShowMessage(Messages.strErrorProcessingRequest); + } + }); + } + }); + var windowWidth = $(window).width(); + $('.jsresponsive').css('max-width', windowWidth - 69 + 'px'); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/transformations/sql_editor.js b/Sources/php_script/script/phpMyAdmin/js/dist/transformations/sql_editor.js new file mode 100644 index 0000000..dcb26f8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/transformations/sql_editor.js @@ -0,0 +1,10 @@ +/** + * SQL syntax highlighting transformation plugin js + * + * @package PhpMyAdmin + */ +AJAX.registerOnload('transformations/sql_editor.js', function () { + $('textarea.transform_sql_editor').each(function () { + Functions.getSqlEditor($(this), {}, 'both'); + }); +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/u2f.js b/Sources/php_script/script/phpMyAdmin/js/dist/u2f.js new file mode 100644 index 0000000..cb3b31b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/dist/u2f.js @@ -0,0 +1,90 @@ +/* global u2f */ +// js/vendor/u2f-api-polyfill.js +AJAX.registerOnload('u2f.js', function () { + var $inputReg = $('#u2f_registration_response'); + + if ($inputReg.length > 0) { + var $formReg = $inputReg.parents('form'); + $formReg.find('input[type=submit]').hide(); + setTimeout(function () { + // A magic JS function that talks to the USB device. This function will keep polling for the USB device until it finds one. + var request = JSON.parse($inputReg.attr('data-request')); + u2f.register(request.appId, [request], JSON.parse($inputReg.attr('data-signatures')), function (data) { + // Handle returning error data + if (data.errorCode && data.errorCode !== 0) { + switch (data.errorCode) { + case 5: + Functions.ajaxShowMessage(Messages.strU2FTimeout, false, 'error'); + break; + + case 4: + Functions.ajaxShowMessage(Messages.strU2FErrorRegister, false, 'error'); + break; + + case 3: + Functions.ajaxShowMessage(Messages.strU2FInvalidClient, false, 'error'); + break; + + case 2: + Functions.ajaxShowMessage(Messages.strU2FBadRequest, false, 'error'); + break; + + default: + Functions.ajaxShowMessage(Messages.strU2FUnknown, false, 'error'); + break; + } + + return; + } // Fill and submit form. + + + $inputReg.val(JSON.stringify(data)); + $formReg.trigger('submit'); + }); + }, 1000); + } + + var $inputAuth = $('#u2f_authentication_response'); + + if ($inputAuth.length > 0) { + var $formAuth = $inputAuth.parents('form'); + $formAuth.find('input[type=submit]').hide(); + setTimeout(function () { + // Magic JavaScript talking to your HID + // appid, challenge, authenticateRequests + var request = JSON.parse($inputAuth.attr('data-request')); + u2f.sign(request[0].appId, request[0].challenge, request, function (data) { + // Handle returning error data + if (data.errorCode && data.errorCode !== 0) { + switch (data.errorCode) { + case 5: + Functions.ajaxShowMessage(Messages.strU2FTimeout, false, 'error'); + break; + + case 4: + Functions.ajaxShowMessage(Messages.strU2FErrorAuthenticate, false, 'error'); + break; + + case 3: + Functions.ajaxShowMessage(Messages.strU2FInvalidClient, false, 'error'); + break; + + case 2: + Functions.ajaxShowMessage(Messages.strU2FBadRequest, false, 'error'); + break; + + default: + Functions.ajaxShowMessage(Messages.strU2FUnknown, false, 'error'); + break; + } + + return; + } // Fill and submit form. + + + $inputAuth.val(JSON.stringify(data)); + $formAuth.trigger('submit'); + }); + }, 1000); + } +}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/src/cross_framing_protection.js b/Sources/php_script/script/phpMyAdmin/js/src/cross_framing_protection.js new file mode 100644 index 0000000..2f94fe5 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/cross_framing_protection.js @@ -0,0 +1,13 @@ +/** + * Conditionally included if framing is not allowed + */ +if (self === top) { + var styleElement = document.getElementById('cfs-style'); + // check if styleElement has already been removed + // to avoid frequently reported js error + if (typeof(styleElement) !== 'undefined' && styleElement !== null) { + styleElement.parentNode.removeChild(styleElement); + } +} else { + top.location = self.location; +} diff --git a/Sources/php_script/script/phpMyAdmin/js/src/database/search.js b/Sources/php_script/script/phpMyAdmin/js/src/database/search.js new file mode 100644 index 0000000..bcf5f4f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/database/search.js @@ -0,0 +1,261 @@ +/** + * JavaScript functions used on Database Search page + * + * @requires jQuery + * @requires js/functions.js + * + * @package PhpMyAdmin + */ + +/* global makeGrid */ // js/makegrid.js + +/** + * AJAX script for the Database Search page. + * + * Actions ajaxified here: + * Retrieve result of SQL query + */ + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('database/search.js', function () { + $('a.browse_results').off('click'); + $('a.delete_results').off('click'); + $('#buttonGo').off('click'); + $('#togglesearchresultlink').off('click'); + $('#togglequerybox').off('click'); + $('#togglesearchformlink').off('click'); + $('#select_all').off('click'); + $('#unselect_all').off('click'); + $(document).off('submit', '#db_search_form.ajax'); +}); + +AJAX.registerOnload('database/search.js', function () { + /** Hide the table link in the initial search result */ + var icon = Functions.getImage('s_tbl', '', { 'id': 'table-image' }).toString(); + $('#table-info').prepend(icon).hide(); + + /** Hide the browse and deleted results in the new search criteria */ + $('#buttonGo').on('click', function () { + $('#table-info').hide(); + $('#browse-results').hide(); + $('#sqlqueryform').hide(); + $('#togglequerybox').hide(); + }); + /** + * Prepare a div containing a link for toggle the search results + */ + $('#togglesearchresultsdiv') + /** don't show it until we have results on-screen */ + .hide(); + + /** + * Changing the displayed text according to + * the hide/show criteria in search result forms + */ + $('#togglesearchresultlink') + .html(Messages.strHideSearchResults) + .on('click', function () { + var $link = $(this); + $('#searchresults').slideToggle(); + if ($link.text() === Messages.strHideSearchResults) { + $link.text(Messages.strShowSearchResults); + } else { + $link.text(Messages.strHideSearchResults); + } + /** avoid default click action */ + return false; + }); + + /** + * Prepare a div containing a link for toggle the search form, + * otherwise it's incorrectly displayed after a couple of clicks + */ + $('#togglesearchformdiv') + .hide(); // don't show it until we have results on-screen + + /** + * Changing the displayed text according to + * the hide/show criteria in search form + */ + $('#togglequerybox') + .hide() + .on('click', function () { + var $link = $(this); + $('#sqlqueryform').slideToggle('medium'); + if ($link.text() === Messages.strHideQueryBox) { + $link.text(Messages.strShowQueryBox); + } else { + $link.text(Messages.strHideQueryBox); + } + /** avoid default click action */ + return false; + }); + + /** don't show it until we have results on-screen */ + + /** + * Changing the displayed text according to + * the hide/show criteria in search criteria form + */ + $('#togglesearchformlink') + .html(Messages.strShowSearchCriteria) + .on('click', function () { + var $link = $(this); + $('#db_search_form').slideToggle(); + if ($link.text() === Messages.strHideSearchCriteria) { + $link.text(Messages.strShowSearchCriteria); + } else { + $link.text(Messages.strHideSearchCriteria); + } + /** avoid default click action */ + return false; + }); + + /* + * Ajax Event handler for retrieving the results from a table + */ + $(document).on('click', 'a.browse_results', function (e) { + e.preventDefault(); + /** Hides the results shown by the delete criteria */ + var $msg = Functions.ajaxShowMessage(Messages.strBrowsing, false); + $('#sqlqueryform').hide(); + $('#togglequerybox').hide(); + /** Load the browse results to the page */ + $('#table-info').show(); + var tableName = $(this).data('table-name'); + $('#table-link').attr({ 'href' : $(this).attr('href') }).text(tableName); + + var url = $(this).attr('href') + '#searchresults'; + var browseSql = $(this).data('browse-sql'); + var params = { + 'ajax_request': true, + 'is_js_confirmed': true, + 'sql_query' : browseSql + }; + $.post(url, params, function (data) { + if (typeof data !== 'undefined' && data.success) { + $('#browse-results').html(data.message); + Functions.ajaxRemoveMessage($msg); + $('.table_results').each(function () { + makeGrid(this, true, true, true, true); + }); + $('#browse-results').show(); + Functions.highlightSql($('#browse-results')); + $('html, body') + .animate({ + scrollTop: $('#browse-results').offset().top + }, 1000); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); + }); + + /* + * Ajax Event handler for deleting the results from a table + */ + $(document).on('click', 'a.delete_results', function (e) { + e.preventDefault(); + /** Hides the results shown by the browse criteria */ + $('#table-info').hide(); + $('#sqlqueryform').hide(); + $('#togglequerybox').hide(); + /** Conformation message for deletion */ + var msg = Functions.sprintf( + Messages.strConfirmDeleteResults, + $(this).data('table-name') + ); + if (confirm(msg)) { + var $msg = Functions.ajaxShowMessage(Messages.strDeleting, false); + /** Load the deleted option to the page*/ + $('#sqlqueryform').html(''); + var params = { + 'ajax_request': true, + 'is_js_confirmed': true, + 'sql_query': $(this).data('delete-sql') + }; + var url = $(this).attr('href'); + + $.post(url, params, function (data) { + if (typeof data === 'undefined' || !data.success) { + Functions.ajaxShowMessage(data.error, false); + return; + } + + $('#sqlqueryform').html(data.sql_query); + /** Refresh the search results after the deletion */ + $('#buttonGo').trigger('click'); + $('#togglequerybox').html(Messages.strHideQueryBox); + /** Show the results of the deletion option */ + $('#browse-results').hide(); + $('#sqlqueryform').show(); + $('#togglequerybox').show(); + $('html, body') + .animate({ + scrollTop: $('#browse-results').offset().top + }, 1000); + Functions.ajaxRemoveMessage($msg); + }); + } + }); + + /** + * Ajax Event handler for retrieving the result of an SQL Query + */ + $(document).on('submit', '#db_search_form.ajax', function (event) { + event.preventDefault(); + if ($('#criteriaTables :selected').length === 0) { + Functions.ajaxShowMessage(Messages.strNoTableSelected); + return; + } + var $msgbox = Functions.ajaxShowMessage(Messages.strSearching, false); + // jQuery object to reuse + var $form = $(this); + + Functions.prepareForAjaxRequest($form); + + var url = $form.serialize() + CommonParams.get('arg_separator') + 'submit_search=' + $('#buttonGo').val(); + $.post($form.attr('action'), url, function (data) { + if (typeof data !== 'undefined' && data.success === true) { + // found results + $('#searchresults').html(data.message); + + $('#togglesearchresultlink') + // always start with the Show message + .text(Messages.strHideSearchResults); + $('#togglesearchresultsdiv') + // now it's time to show the div containing the link + .show(); + $('#searchresults').show(); + + + $('#db_search_form') + // workaround for Chrome problem (bug #3168569) + .slideToggle() + .hide(); + $('#togglesearchformlink') + // always start with the Show message + .text(Messages.strShowSearchCriteria); + $('#togglesearchformdiv') + // now it's time to show the div containing the link + .show(); + } else { + // error message (zero rows) + $('#searchresults').html(data.error).show(); + } + + Functions.ajaxRemoveMessage($msgbox); + }); + }); + + $('#select_all').on('click', function () { + Functions.setSelectOptions('db_search', 'criteriaTables[]', true); + return false; + }); + $('#unselect_all').on('click', function () { + Functions.setSelectOptions('db_search', 'criteriaTables[]', false); + return false; + }); +}); // end $() diff --git a/Sources/php_script/script/phpMyAdmin/js/src/database/tracking.js b/Sources/php_script/script/phpMyAdmin/js/src/database/tracking.js new file mode 100644 index 0000000..53d2e33 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/database/tracking.js @@ -0,0 +1,93 @@ +/** + * Unbind all event handlers before tearing down the page + */ +AJAX.registerTeardown('database/tracking.js', function () { + $('body').off('click', '#trackedForm.ajax button[name="submit_mult"], #trackedForm.ajax input[name="submit_mult"]'); + $('body').off('click', '#untrackedForm.ajax button[name="submit_mult"], #untrackedForm.ajax input[name="submit_mult"]'); + $('body').off('click', 'a.delete_tracking_anchor.ajax'); +}); + +/** + * Bind event handlers + */ +AJAX.registerOnload('database/tracking.js', function () { + var $versions = $('#versions'); + $versions.find('tr').first().find('th').append($('
        ')); + $versions.tablesorter({ + sortList: [[1, 0]], + headers: { + 0: { sorter: false }, + 2: { sorter: 'integer' }, + 5: { sorter: false }, + 6: { sorter: false }, + 7: { sorter: false } + } + }); + + var $noVersions = $('#noversions'); + $noVersions.find('tr').first().find('th').append($('
        ')); + $noVersions.tablesorter({ + sortList: [[1, 0]], + headers: { + 0: { sorter: false }, + 2: { sorter: false } + } + }); + + var $body = $('body'); + + /** + * Handles multi submit for tracked tables + */ + $body.on('click', '#trackedForm.ajax button[name="submit_mult"], #trackedForm.ajax input[name="submit_mult"]', function (e) { + e.preventDefault(); + var $button = $(this); + var $form = $button.parent('form'); + var argsep = CommonParams.get('arg_separator'); + var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep + 'submit_mult=' + $button.val(); + + if ($button.val() === 'delete_tracking') { + var question = Messages.strDeleteTrackingDataMultiple; + $button.confirm(question, $form.attr('action'), function (url) { + Functions.ajaxShowMessage(Messages.strDeletingTrackingData); + AJAX.source = $form; + $.post(url, submitData, AJAX.responseHandler); + }); + } else { + Functions.ajaxShowMessage(); + AJAX.source = $form; + $.post($form.attr('action'), submitData, AJAX.responseHandler); + } + }); + + /** + * Handles multi submit for untracked tables + */ + $body.on('click', '#untrackedForm.ajax button[name="submit_mult"], #untrackedForm.ajax input[name="submit_mult"]', function (e) { + e.preventDefault(); + var $button = $(this); + var $form = $button.parent('form'); + var argsep = CommonParams.get('arg_separator'); + var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep + 'submit_mult=' + $button.val(); + Functions.ajaxShowMessage(); + AJAX.source = $form; + $.post($form.attr('action'), submitData, AJAX.responseHandler); + }); + + /** + * Ajax Event handler for 'Delete tracking' + */ + $body.on('click', 'a.delete_tracking_anchor.ajax', function (e) { + e.preventDefault(); + var $anchor = $(this); + var question = Messages.strDeleteTrackingData; + $anchor.confirm(question, $anchor.attr('href'), function (url) { + Functions.ajaxShowMessage(Messages.strDeletingTrackingData); + AJAX.source = $anchor; + var argSep = CommonParams.get('arg_separator'); + var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); + params += argSep + 'ajax_page_request=1'; + $.post(url, params, AJAX.responseHandler); + }); + }); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/database/triggers.js b/Sources/php_script/script/phpMyAdmin/js/src/database/triggers.js new file mode 100644 index 0000000..5b1dc42 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/database/triggers.js @@ -0,0 +1,530 @@ +AJAX.registerTeardown('database/triggers.js', function () { + $(document).off('click', 'a.ajax.add_anchor, a.ajax.edit_anchor'); + $(document).off('click', 'a.ajax.export_anchor'); + $(document).off('click', '#bulkActionExportButton'); + $(document).off('click', 'a.ajax.drop_anchor'); + $(document).off('click', '#bulkActionDropButton'); +}); + +const DatabaseTriggers = { + /** + * @var $ajaxDialog Query object containing the reference to the + * dialog that contains the editor + */ + $ajaxDialog: null, + /** + * @var syntaxHiglighter Reference to the codemirror editor + */ + syntaxHiglighter: null, + /** + * @var buttonOptions Object containing options for + * the jQueryUI dialog buttons + */ + buttonOptions: {}, + /** + * Validate editor form fields. + * + * @return {bool} + */ + validate: function () { + /** + * @var $elm a jQuery object containing the reference + * to an element that is being validated + */ + var $elm = null; + // Common validation. At the very least the name + // and the definition must be provided for an item + $elm = $('table.rte_table').last().find('input[name=item_name]'); + if ($elm.val() === '') { + $elm.trigger('focus'); + alert(Messages.strFormEmpty); + return false; + } + $elm = $('table.rte_table').find('textarea[name=item_definition]'); + if ($elm.val() === '') { + if (this.syntaxHiglighter !== null) { + this.syntaxHiglighter.focus(); + } else { + $('textarea[name=item_definition]').last().trigger('focus'); + } + alert(Messages.strFormEmpty); + return false; + } + // The validation has so far passed, so now + // we can validate item-specific fields. + return this.validateCustom(); + }, // end validate() + /** + * Validate custom editor form fields. + * This function can be overridden by + * other files in this folder + * + * @return {bool} + */ + validateCustom: function () { + return true; + }, // end validateCustom() + + exportDialog: function ($this) { + var $msg = Functions.ajaxShowMessage(); + if ($this.attr('id') === 'bulkActionExportButton') { + var combined = { + success: true, + title: Messages.strExport, + message: '', + error: '' + }; + // export anchors of all selected rows + var exportAnchors = $('input.checkall:checked').parents('tr').find('.export_anchor'); + var count = exportAnchors.length; + var returnCount = 0; + var p = $.when(); + exportAnchors.each(function () { + var h = $(this).attr('href'); + p = p.then(function () { + return $.get(h, { 'ajax_request': true }, function (data) { + returnCount++; + if (data.success === true) { + combined.message += '\n' + data.message + '\n'; + if (returnCount === count) { + showExport(combined); + } + } else { + // complain even if one export is failing + combined.success = false; + combined.error += '\n' + data.error + '\n'; + if (returnCount === count) { + showExport(combined); + } + } + }); + }); + }); + } else { + $.get($this.attr('href'), { 'ajax_request': true }, showExport); + } + Functions.ajaxRemoveMessage($msg); + + function showExport (data) { + if (data.success === true) { + Functions.ajaxRemoveMessage($msg); + /** + * @var button_options Object containing options + * for jQueryUI dialog buttons + */ + var buttonOptions = {}; + buttonOptions[Messages.strClose] = function () { + $(this).dialog('close').remove(); + }; + /** + * Display the dialog to the user + */ + data.message = ''; + var $ajaxDialog = $('
        ' + data.message + '
        ').dialog({ + width: 500, + buttons: buttonOptions, + title: data.title + }); + // Attach syntax highlighted editor to export dialog + /** + * @var $elm jQuery object containing the reference + * to the Export textarea. + */ + var $elm = $ajaxDialog.find('textarea'); + Functions.getSqlEditor($elm); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } // end showExport() + }, // end exportDialog() + editorDialog: function (isNew, $this) { + var that = this; + /** + * @var $edit_row jQuery object containing the reference to + * the row of the the item being edited + * from the list of items + */ + var $editRow = null; + if ($this.hasClass('edit_anchor')) { + // Remember the row of the item being edited for later, + // so that if the edit is successful, we can replace the + // row with info about the modified item. + $editRow = $this.parents('tr'); + } + /** + * @var $msg jQuery object containing the reference to + * the AJAX message shown to the user + */ + var $msg = Functions.ajaxShowMessage(); + $.get($this.attr('href'), { 'ajax_request': true }, function (data) { + if (data.success === true) { + // We have successfully fetched the editor form + Functions.ajaxRemoveMessage($msg); + // Now define the function that is called when + // the user presses the "Go" button + that.buttonOptions[Messages.strGo] = function () { + // Move the data from the codemirror editor back to the + // textarea, where it can be used in the form submission. + if (typeof CodeMirror !== 'undefined') { + that.syntaxHiglighter.save(); + } + // Validate editor and submit request, if passed. + if (that.validate()) { + /** + * @var data Form data to be sent in the AJAX request + */ + var data = $('form.rte_form').last().serialize(); + $msg = Functions.ajaxShowMessage( + Messages.strProcessingRequest + ); + var url = $('form.rte_form').last().attr('action'); + $.post(url, data, function (data) { + if (data.success === true) { + // Item created successfully + Functions.ajaxRemoveMessage($msg); + Functions.slidingMessage(data.message); + that.$ajaxDialog.dialog('close'); + // If we are in 'edit' mode, we must + // remove the reference to the old row. + if (mode === 'edit' && $editRow !== null) { + $editRow.remove(); + } + // Sometimes, like when moving a trigger from + // a table to another one, the new row should + // not be inserted into the list. In this case + // "data.insert" will be set to false. + if (data.insert) { + // Insert the new row at the correct + // location in the list of items + /** + * @var text Contains the name of an item from + * the list that is used in comparisons + * to find the correct location where + * to insert a new row. + */ + var text = ''; + /** + * @var inserted Whether a new item has been + * inserted in the list or not + */ + var inserted = false; + $('table.data').find('tr').each(function () { + text = $(this) + .children('td') + .eq(0) + .find('strong') + .text() + .toUpperCase() + .trim(); + if (text !== '' && text > data.name) { + $(this).before(data.new_row); + inserted = true; + return false; + } + }); + if (! inserted) { + // If we didn't manage to insert the row yet, + // it must belong at the end of the list, + // so we insert it there. + $('table.data').append(data.new_row); + } + // Fade-in the new row + $('tr.ajaxInsert') + .show('slow') + .removeClass('ajaxInsert'); + } else if ($('table.data').find('tr').has('td').length === 0) { + // If we are not supposed to insert the new row, + // we will now check if the table is empty and + // needs to be hidden. This will be the case if + // we were editing the only item in the list, + // which we removed and will not be inserting + // something else in its place. + $('table.data').hide('slow', function () { + $('#nothing2display').show('slow'); + }); + } + // Now we have inserted the row at the correct + // position, but surely at least some row classes + // are wrong now. So we will iterate through + // all rows and assign correct classes to them + /** + * @var ct Count of processed rows + */ + var ct = 0; + /** + * @var rowclass Class to be attached to the row + * that is being processed + */ + var rowclass = ''; + $('table.data').find('tr').has('td').each(function () { + rowclass = (ct % 2 === 0) ? 'odd' : 'even'; + $(this).removeClass().addClass(rowclass); + ct++; + }); + // If this is the first item being added, remove + // the "No items" message and show the list. + if ($('table.data').find('tr').has('td').length > 0 && + $('#nothing2display').is(':visible') + ) { + $('#nothing2display').hide('slow', function () { + $('table.data').show('slow'); + }); + } + Navigation.reload(); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.post() + } // end "if (that.validate())" + }; // end of function that handles the submission of the Editor + that.buttonOptions[Messages.strClose] = function () { + $(this).dialog('close'); + }; + /** + * Display the dialog to the user + */ + that.$ajaxDialog = $('
        ' + data.message + '
        ').dialog({ + width: 700, + minWidth: 500, + buttons: that.buttonOptions, + // Issue #15810 - use button titles for modals (eg: new procedure) + // Respect the order: title on href tag, href content, title sent in response + title: $this.attr('title') || $this.text() || $(data.title).text(), + modal: true, + open: function () { + $('#rteDialog').dialog('option', 'max-height', $(window).height()); + if ($('#rteDialog').parents('.ui-dialog').height() > $(window).height()) { + $('#rteDialog').dialog('option', 'height', $(window).height()); + } + $(this).find('input[name=item_name]').trigger('focus'); + $(this).find('input.datefield').each(function () { + Functions.addDatepicker($(this).css('width', '95%'), 'date'); + }); + $(this).find('input.datetimefield').each(function () { + Functions.addDatepicker($(this).css('width', '95%'), 'datetime'); + }); + $.datepicker.initialized = false; + }, + close: function () { + $(this).remove(); + } + }); + /** + * @var mode Used to remember whether the editor is in + * "Edit" or "Add" mode + */ + var mode = 'add'; + if ($('input[name=editor_process_edit]').length > 0) { + mode = 'edit'; + } + // Attach syntax highlighted editor to the definition + /** + * @var elm jQuery object containing the reference to + * the Definition textarea. + */ + var $elm = $('textarea[name=item_definition]').last(); + var linterOptions = {}; + linterOptions.triggerEditor = true; + that.syntaxHiglighter = Functions.getSqlEditor($elm, {}, 'both', linterOptions); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.get() + }, + + dropDialog: function ($this) { + /** + * @var $curr_row Object containing reference to the current row + */ + var $currRow = $this.parents('tr'); + /** + * @var question String containing the question to be asked for confirmation + */ + var question = $('
        ').text( + $currRow.children('td').children('.drop_sql').html() + ); + // We ask for confirmation first here, before submitting the ajax request + $this.confirm(question, $this.attr('href'), function (url) { + /** + * @var msg jQuery object containing the reference to + * the AJAX message shown to the user + */ + var $msg = Functions.ajaxShowMessage(Messages.strProcessingRequest); + var params = Functions.getJsConfirmCommonParam(this, $this.getPostData()); + $.post(url, params, function (data) { + if (data.success === true) { + /** + * @var $table Object containing reference + * to the main list of elements + */ + var $table = $currRow.parent(); + // Check how many rows will be left after we remove + // the one that the user has requested us to remove + if ($table.find('tr').length === 3) { + // If there are two rows left, it means that they are + // the header of the table and the rows that we are + // about to remove, so after the removal there will be + // nothing to show in the table, so we hide it. + $table.hide('slow', function () { + $(this).find('tr.even, tr.odd').remove(); + $('.withSelected').remove(); + $('#nothing2display').show('slow'); + }); + } else { + $currRow.hide('slow', function () { + $(this).remove(); + // Now we have removed the row from the list, but maybe + // some row classes are wrong now. So we will iterate + // through all rows and assign correct classes to them. + /** + * @var ct Count of processed rows + */ + var ct = 0; + /** + * @var rowclass Class to be attached to the row + * that is being processed + */ + var rowclass = ''; + $table.find('tr').has('td').each(function () { + rowclass = (ct % 2 === 1) ? 'odd' : 'even'; + $(this).removeClass().addClass(rowclass); + ct++; + }); + }); + } + // Get rid of the "Loading" message + Functions.ajaxRemoveMessage($msg); + // Show the query that we just executed + Functions.slidingMessage(data.sql_query); + Navigation.reload(); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.post() + }); + }, + + dropMultipleDialog: function ($this) { + // We ask for confirmation here + $this.confirm(Messages.strDropRTEitems, '', function () { + /** + * @var msg jQuery object containing the reference to + * the AJAX message shown to the user + */ + var $msg = Functions.ajaxShowMessage(Messages.strProcessingRequest); + + // drop anchors of all selected rows + var dropAnchors = $('input.checkall:checked').parents('tr').find('.drop_anchor'); + var success = true; + var count = dropAnchors.length; + var returnCount = 0; + + dropAnchors.each(function () { + var $anchor = $(this); + /** + * @var $curr_row Object containing reference to the current row + */ + var $currRow = $anchor.parents('tr'); + var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); + $.post($anchor.attr('href'), params, function (data) { + returnCount++; + if (data.success === true) { + /** + * @var $table Object containing reference + * to the main list of elements + */ + var $table = $currRow.parent(); + // Check how many rows will be left after we remove + // the one that the user has requested us to remove + if ($table.find('tr').length === 3) { + // If there are two rows left, it means that they are + // the header of the table and the rows that we are + // about to remove, so after the removal there will be + // nothing to show in the table, so we hide it. + $table.hide('slow', function () { + $(this).find('tr.even, tr.odd').remove(); + $('.withSelected').remove(); + $('#nothing2display').show('slow'); + }); + } else { + $currRow.hide('fast', function () { + // we will iterate + // through all rows and assign correct classes to them. + /** + * @var ct Count of processed rows + */ + var ct = 0; + /** + * @var rowclass Class to be attached to the row + * that is being processed + */ + var rowclass = ''; + $table.find('tr').has('td').each(function () { + rowclass = (ct % 2 === 1) ? 'odd' : 'even'; + $(this).removeClass().addClass(rowclass); + ct++; + }); + }); + $currRow.remove(); + } + if (returnCount === count) { + if (success) { + // Get rid of the "Loading" message + Functions.ajaxRemoveMessage($msg); + $('#rteListForm_checkall').prop({ checked: false, indeterminate: false }); + } + Navigation.reload(); + } + } else { + Functions.ajaxShowMessage(data.error, false); + success = false; + if (returnCount === count) { + Navigation.reload(); + } + } + }); // end $.post() + }); // end drop_anchors.each() + }); + } +}; + +AJAX.registerOnload('database/triggers.js', function () { + /** + * Attach Ajax event handlers for the Add/Edit functionality. + */ + $(document).on('click', 'a.ajax.add_anchor, a.ajax.edit_anchor', function (event) { + event.preventDefault(); + + if ($(this).hasClass('add_anchor')) { + $.datepicker.initialized = false; + } + + DatabaseTriggers.editorDialog($(this).hasClass('add_anchor'), $(this)); + }); + + /** + * Attach Ajax event handlers for Export + */ + $(document).on('click', 'a.ajax.export_anchor', function (event) { + event.preventDefault(); + DatabaseTriggers.exportDialog($(this)); + }); + + $(document).on('click', '#bulkActionExportButton', function (event) { + event.preventDefault(); + DatabaseTriggers.exportDialog($(this)); + }); + + /** + * Attach Ajax event handlers for Drop functionality + */ + $(document).on('click', 'a.ajax.drop_anchor', function (event) { + event.preventDefault(); + DatabaseTriggers.dropDialog($(this)); + }); + + $(document).on('click', '#bulkActionDropButton', function (event) { + event.preventDefault(); + DatabaseTriggers.dropMultipleDialog($(this)); + }); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/designer/page.js b/Sources/php_script/script/phpMyAdmin/js/src/designer/page.js new file mode 100644 index 0000000..a1c1220 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/designer/page.js @@ -0,0 +1,178 @@ +/* global DesignerOfflineDB */ // js/designer/database.js +// eslint-disable-next-line no-unused-vars +/* global db, selectedPage:writable */ // js/designer/init.js +/* global DesignerMove */ // js/designer/move.js +/* global DesignerObjects */ // js/designer/objects.js + +var DesignerPage = {}; + +DesignerPage.showTablesInLandingPage = function (db) { + DesignerPage.loadFirstPage(db, function (page) { + if (page) { + DesignerPage.loadHtmlForPage(page.pgNr); + selectedPage = page.pgNr; + } else { + DesignerPage.showNewPageTables(true); + } + }); +}; + +DesignerPage.saveToNewPage = function (db, pageName, tablePositions, callback) { + DesignerPage.createNewPage(db, pageName, function (page) { + if (page) { + var tblCords = []; + var saveCallback = function (id) { + tblCords.push(id); + if (tablePositions.length === tblCords.length) { + page.tblCords = tblCords; + DesignerOfflineDB.addObject('pdf_pages', page); + } + }; + for (var pos = 0; pos < tablePositions.length; pos++) { + tablePositions[pos].pdfPgNr = page.pgNr; + DesignerPage.saveTablePositions(tablePositions[pos], saveCallback); + } + if (typeof callback !== 'undefined') { + callback(page); + } + } + }); +}; + +DesignerPage.saveToSelectedPage = function (db, pageId, pageName, tablePositions, callback) { + DesignerPage.deletePage(pageId); + DesignerPage.saveToNewPage(db, pageName, tablePositions, function (page) { + if (typeof callback !== 'undefined') { + callback(page); + } + selectedPage = page.pgNr; + }); +}; + +DesignerPage.createNewPage = function (db, pageName, callback) { + var newPage = new DesignerObjects.PdfPage(db, pageName); + DesignerOfflineDB.addObject('pdf_pages', newPage, function (pgNr) { + newPage.pgNr = pgNr; + if (typeof callback !== 'undefined') { + callback(newPage); + } + }); +}; + +DesignerPage.saveTablePositions = function (positions, callback) { + DesignerOfflineDB.addObject('table_coords', positions, callback); +}; + +DesignerPage.createPageList = function (db, callback) { + DesignerOfflineDB.loadAllObjects('pdf_pages', function (pages) { + var html = ''; + for (var p = 0; p < pages.length; p++) { + var page = pages[p]; + if (page.dbName === db) { + html += ''; + } + } + if (typeof callback !== 'undefined') { + callback(html); + } + }); +}; + +DesignerPage.deletePage = function (pageId, callback) { + DesignerOfflineDB.loadObject('pdf_pages', pageId, function (page) { + if (page) { + for (var i = 0; i < page.tblCords.length; i++) { + DesignerOfflineDB.deleteObject('table_coords', page.tblCords[i]); + } + DesignerOfflineDB.deleteObject('pdf_pages', pageId, callback); + } + }); +}; + +DesignerPage.loadFirstPage = function (db, callback) { + DesignerOfflineDB.loadAllObjects('pdf_pages', function (pages) { + var firstPage = null; + for (var i = 0; i < pages.length; i++) { + var page = pages[i]; + if (page.dbName === db) { + // give preference to a page having same name as the db + if (page.pageDescr === db) { + callback(page); + return; + } + if (firstPage === null) { + firstPage = page; + } + } + } + callback(firstPage); + }); +}; + +DesignerPage.showNewPageTables = function (check) { + var allTables = $('#id_scroll_tab').find('td input:checkbox'); + allTables.prop('checked', check); + for (var tab = 0; tab < allTables.length; tab++) { + var input = allTables[tab]; + if (input.value) { + var element = document.getElementById(input.value); + element.style.top = DesignerPage.getRandom(550, 20) + 'px'; + element.style.left = DesignerPage.getRandom(700, 20) + 'px'; + DesignerMove.visibleTab(input, input.value); + } + } + selectedPage = -1; + $('#page_name').text(Messages.strUntitled); + DesignerMove.markUnsaved(); +}; + +DesignerPage.loadHtmlForPage = function (pageId) { + DesignerPage.showNewPageTables(true); + DesignerPage.loadPageObjects(pageId, function (page, tblCords) { + $('#name-panel').find('#page_name').text(page.pageDescr); + var tableMissing = false; + for (var t = 0; t < tblCords.length; t++) { + var tbId = db + '.' + tblCords[t].tableName; + var table = document.getElementById(tbId); + if (table === null) { + tableMissing = true; + continue; + } + table.style.top = tblCords[t].y + 'px'; + table.style.left = tblCords[t].x + 'px'; + + var checkbox = document.getElementById('check_vis_' + tbId); + checkbox.checked = true; + DesignerMove.visibleTab(checkbox, checkbox.value); + } + DesignerMove.markSaved(); + if (tableMissing === true) { + DesignerMove.markUnsaved(); + Functions.ajaxShowMessage(Messages.strSavedPageTableMissing); + } + selectedPage = page.pgNr; + }); +}; + +DesignerPage.loadPageObjects = function (pageId, callback) { + DesignerOfflineDB.loadObject('pdf_pages', pageId, function (page) { + var tblCords = []; + var count = page.tblCords.length; + for (var i = 0; i < count; i++) { + DesignerOfflineDB.loadObject('table_coords', page.tblCords[i], function (tblCord) { + tblCords.push(tblCord); + if (tblCords.length === count) { + if (typeof callback !== 'undefined') { + callback(page, tblCords); + } + } + }); + } + }); +}; + +DesignerPage.getRandom = function (max, min) { + var val = Math.random() * (max - min) + min; + return Math.floor(val); +}; diff --git a/Sources/php_script/script/phpMyAdmin/js/src/import.js b/Sources/php_script/script/phpMyAdmin/js/src/import.js new file mode 100644 index 0000000..989b35b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/import.js @@ -0,0 +1,154 @@ +/** + * Functions used in the import tab + * + */ + + +/** + * Toggles the hiding and showing of each plugin's options + * according to the currently selected plugin from the dropdown list + */ +function changePluginOpts () { + $('#format_specific_opts').find('div.format_specific_options').each(function () { + $(this).hide(); + }); + var selectedPluginName = $('#plugins').find('option:selected').val(); + $('#' + selectedPluginName + '_options').fadeIn('slow'); + + const importNotification = document.getElementById('import_notification'); + importNotification.innerText = ''; + if (selectedPluginName === 'csv') { + importNotification.innerHTML = ''; + } +} + +/** + * Toggles the hiding and showing of each plugin's options and sets the selected value + * in the plugin dropdown list according to the format of the selected file + * + * @param {string} fname + */ +function matchFile (fname) { + var fnameArray = fname.toLowerCase().split('.'); + var len = fnameArray.length; + if (len !== 0) { + var extension = fnameArray[len - 1]; + if (extension === 'gz' || extension === 'bz2' || extension === 'zip') { + len--; + } + // Only toggle if the format of the file can be imported + if ($('select[name=\'format\'] option').filterByValue(fnameArray[len - 1]).length === 1) { + $('select[name=\'format\'] option').filterByValue(fnameArray[len - 1]).prop('selected', true); + changePluginOpts(); + } + } +} + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('import.js', function () { + $('#plugins').off('change'); + $('#input_import_file').off('change'); + $('#select_local_import_file').off('change'); + $('#input_import_file').off('change').off('focus'); + $('#select_local_import_file').off('focus'); + $('#text_csv_enclosed').add('#text_csv_escaped').off('keyup'); +}); + +AJAX.registerOnload('import.js', function () { + // import_file_form validation. + $(document).on('submit', '#import_file_form', function () { + var radioLocalImport = $('#localFileTab'); + var radioImport = $('#uploadFileTab'); + var fileMsg = ''; + var wrongTblNameMsg = ''; + var wrongDBNameMsg = ''; + + if (radioLocalImport.length !== 0) { + // remote upload. + + if (radioImport.hasClass('active') && $('#input_import_file').val() === '') { + $('#input_import_file').trigger('focus'); + Functions.ajaxShowMessage(fileMsg, false); + return false; + } + + if (radioLocalImport.hasClass('active')) { + if ($('#select_local_import_file').length === 0) { + Functions.ajaxShowMessage('', false); + return false; + } + + if ($('#select_local_import_file').val() === '') { + $('#select_local_import_file').trigger('focus'); + Functions.ajaxShowMessage(fileMsg, false); + return false; + } + } + } else { + // local upload. + if ($('#input_import_file').val() === '') { + $('#input_import_file').trigger('focus'); + Functions.ajaxShowMessage(fileMsg, false); + return false; + } + if ($('#text_csv_new_tbl_name').length > 0) { + var newTblName = $('#text_csv_new_tbl_name').val(); + if (newTblName.length > 0 && newTblName.trim().length === 0) { + Functions.ajaxShowMessage(wrongTblNameMsg, false); + return false; + } + } + if ($('#text_csv_new_db_name').length > 0) { + var newDBName = $('#text_csv_new_db_name').val(); + if (newDBName.length > 0 && newDBName.trim().length === 0) { + Functions.ajaxShowMessage(wrongDBNameMsg, false); + return false; + } + } + } + + // show progress bar. + $('#upload_form_status').css('display', 'inline'); + $('#upload_form_status_info').css('display', 'inline'); + }); + + // Initially display the options for the selected plugin + changePluginOpts(); + + // Whenever the selected plugin changes, change the options displayed + $('#plugins').on('change', function () { + changePluginOpts(); + }); + + $('#input_import_file').on('change', function () { + matchFile($(this).val()); + }); + + $('#select_local_import_file').on('change', function () { + matchFile($(this).val()); + }); + + /** + * Set up the interface for Javascript-enabled browsers since the default is for + * Javascript-disabled browsers + */ + $('#format_specific_opts').find('div.format_specific_options') + .find('h3') + .remove(); + // $("form[name=import] *").unwrap(); + + /** + * for input element text_csv_enclosed and text_csv_escaped allow just one character to enter. + * as mysql allows just one character for these fields, + * if first character is escape then allow two including escape character. + */ + $('#text_csv_enclosed').add('#text_csv_escaped').on('keyup', function () { + if ($(this).val().length === 2 && $(this).val().charAt(0) !== '\\') { + $(this).val($(this).val().substring(0, 1)); + return false; + } + return true; + }); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/indexes.js b/Sources/php_script/script/phpMyAdmin/js/src/indexes.js new file mode 100644 index 0000000..1beea5b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/indexes.js @@ -0,0 +1,819 @@ +/** + * @fileoverview function used for index manipulation pages + * @name Table Structure + * + * @requires jQuery + * @requires jQueryUI + * @required js/functions.js + */ + +/* global fulltextIndexes:writable, indexes:writable, primaryIndexes:writable, spatialIndexes:writable, uniqueIndexes:writable */ // js/functions.js + +var Indexes = {}; + +/** + * Returns the array of indexes based on the index choice + * + * @param {string} indexChoice index choice + * + * @return {null|object} + */ +Indexes.getIndexArray = function (indexChoice) { + var sourceArray = null; + + switch (indexChoice.toLowerCase()) { + case 'primary': + sourceArray = primaryIndexes; + break; + case 'unique': + sourceArray = uniqueIndexes; + break; + case 'index': + sourceArray = indexes; + break; + case 'fulltext': + sourceArray = fulltextIndexes; + break; + case 'spatial': + sourceArray = spatialIndexes; + break; + default: + return null; + } + return sourceArray; +}; + +/** + * Hides/shows the inputs and submits appropriately depending + * on whether the index type chosen is 'SPATIAL' or not. + */ +Indexes.checkIndexType = function () { + /** + * @var {JQuery= 0) { + // Remove column from other indexes (if any). + Indexes.removeColumnFromIndex(colIndex); + } + var indexName = $('input[name="index[Key_name]"]').val(); + var indexComment = $('input[name="index[Index_comment]"]').val(); + var keyBlockSize = $('input[name="index[Key_block_size]"]').val(); + var parser = $('input[name="index[Parser]"]').val(); + var indexType = $('select[name="index[Index_type]"]').val(); + var columns = []; + $('#index_columns').find('tbody').find('tr').each(function () { + // Get columns in particular order. + var colIndex = $(this).find('select[name="index[columns][names][]"]').val(); + var size = $(this).find('input[name="index[columns][sub_parts][]"]').val(); + columns.push({ + 'col_index': colIndex, + 'size': size + }); + }); + + // Update or create an index. + sourceArray[arrayIndex] = { + 'Key_name': indexName, + 'Index_comment': indexComment, + 'Index_choice': indexChoice.toUpperCase(), + 'Key_block_size': keyBlockSize, + 'Parser': parser, + 'Index_type': indexType, + 'columns': columns + }; + + // Display index name (or column list) + var displayName = indexName; + if (displayName === '') { + var columnNames = []; + $.each(columns, function () { + columnNames.push($('input[name="field_name[' + this.col_index + ']"]').val()); + }); + displayName = '[' + columnNames.join(', ') + ']'; + } + $.each(columns, function () { + var id = 'index_name_' + this.col_index + '_8'; + var $name = $('#' + id); + if ($name.length === 0) { + $name = $(''); + $name.insertAfter($('select[name="field_key[' + this.col_index + ']"]')); + } + var $text = $('').text(displayName); + $name.html($text); + }); + + if (colIndex >= 0) { + // Update index details on form. + $('select[name="field_key[' + colIndex + ']"]') + .attr('data-index', indexChoice + ',' + arrayIndex); + } + Indexes.setIndexFormParameters(sourceArray, indexChoice.toLowerCase()); +}; + +/** + * Get choices list for a column to create a composite index with. + * + * @param {any[]} sourceArray Array hodling columns for particular index + * @param {string} colIndex Choice of index + * + * @return {JQuery} jQuery Object + */ +Indexes.getCompositeIndexList = function (sourceArray, colIndex) { + // Remove any previous list. + if ($('#composite_index_list').length) { + $('#composite_index_list').remove(); + } + + // Html list. + var $compositeIndexList = $( + '
          ' + + '
          ' + Messages.strCompositeWith + '
          ' + + '
        ' + ); + + // Add each column to list available for composite index. + var sourceLength = sourceArray.length; + var alreadyPresent = false; + for (var i = 0; i < sourceLength; i++) { + var subArrayLen = sourceArray[i].columns.length; + var columnNames = []; + for (var j = 0; j < subArrayLen; j++) { + columnNames.push( + $('input[name="field_name[' + sourceArray[i].columns[j].col_index + ']"]').val() + ); + + if (colIndex === sourceArray[i].columns[j].col_index) { + alreadyPresent = true; + } + } + + $compositeIndexList.append( + '
      • ' + + '' + + '' + + '
      • ' + ); + } + + return $compositeIndexList; +}; + +/** + * Shows 'Add Index' dialog. + * + * @param {any[]} sourceArray Array holding particular index + * @param {string} arrayIndex Index of an INDEX in array + * @param {any[]} targetColumns Columns for an INDEX + * @param {string} colIndex Index of column on form + * @param {object} index Index detail object + * @param {boolean} showDialog Whether to show index creation dialog or not + * + * @return {void} + */ +Indexes.showAddIndexDialog = function (sourceArray, arrayIndex, targetColumns, colIndex, index, showDialog) { + var showDialogLocal = typeof showDialog !== 'undefined' ? showDialog : true; + // Prepare post-data. + var $table = $('input[name="table"]'); + var table = $table.length > 0 ? $table.val() : ''; + var postData = { + 'server': CommonParams.get('server'), + 'db': $('input[name="db"]').val(), + 'table': table, + 'ajax_request': 1, + 'create_edit_table': 1, + 'index': index + }; + + var columns = {}; + for (var i = 0; i < targetColumns.length; i++) { + var columnName = $('input[name="field_name[' + targetColumns[i] + ']"]').val(); + var columnType = $('select[name="field_type[' + targetColumns[i] + ']"]').val().toLowerCase(); + columns[columnName] = [columnType, targetColumns[i]]; + } + postData.columns = JSON.stringify(columns); + + var buttonOptions = {}; + buttonOptions[Messages.strGo] = function () { + var isMissingValue = false; + $('select[name="index[columns][names][]"]').each(function () { + if ($(this).val() === '') { + isMissingValue = true; + } + }); + + if (! isMissingValue) { + Indexes.addColumnToIndex( + sourceArray, + arrayIndex, + index.Index_choice, + colIndex + ); + } else { + Functions.ajaxShowMessage( + '', false + ); + + return false; + } + + $(this).remove(); + }; + buttonOptions[Messages.strCancel] = function () { + if (colIndex >= 0) { + // Handle state on 'Cancel'. + var $selectList = $('select[name="field_key[' + colIndex + ']"]'); + if (! $selectList.attr('data-index').length) { + $selectList.find('option[value*="none"]').attr('selected', 'selected'); + } else { + var previousIndex = $selectList.attr('data-index').split(','); + $selectList.find('option[value*="' + previousIndex[0].toLowerCase() + '"]') + .attr('selected', 'selected'); + } + } + $(this).dialog('close'); + }; + var $msgbox = Functions.ajaxShowMessage(); + $.post('index.php?route=/table/indexes', postData, function (data) { + if (data.success === false) { + // in the case of an error, show the error message returned. + Functions.ajaxShowMessage(data.error, false); + } else { + Functions.ajaxRemoveMessage($msgbox); + var $div = $('
        '); + if (showDialogLocal) { + // Show dialog if the request was successful + if ($('#addIndex').length > 0) { + $('#addIndex').remove(); + } + $div + .append(data.message) + .dialog({ + title: Messages.strAddIndex, + width: 450, + minHeight: 250, + create: function () { + $(this).on('keypress', function (e) { + if (e.which === 13 || e.keyCode === 13 || window.event.keyCode === 13) { + e.preventDefault(); + buttonOptions[Messages.strGo](); + $(this).remove(); + } + }); + }, + open: function () { + Functions.checkIndexName('index_frm'); + Functions.showHints($div); + $('#index_columns').find('td').each(function () { + $(this).css('width', $(this).width() + 'px'); + }); + $('#index_columns').find('tbody').sortable({ + axis: 'y', + containment: $('#index_columns').find('tbody'), + tolerance: 'pointer' + }); + }, + modal: true, + buttons: buttonOptions, + close: function () { + $(this).remove(); + } + }); + } else { + $div + .append(data.message); + $div.css({ 'display' : 'none' }); + $div.appendTo($('body')); + $div.attr({ 'id' : 'addIndex' }); + var isMissingValue = false; + $('select[name="index[columns][names][]"]').each(function () { + if ($(this).val() === '') { + isMissingValue = true; + } + }); + + if (! isMissingValue) { + Indexes.addColumnToIndex( + sourceArray, + arrayIndex, + index.Index_choice, + colIndex + ); + } else { + Functions.ajaxShowMessage( + '', false + ); + + return false; + } + } + } + }); +}; + +/** + * Creates a advanced index type selection dialog. + * + * @param {any[]} sourceArray Array holding a particular type of indexes + * @param {string} indexChoice Choice of index + * @param {string} colIndex Index of new column on form + * + * @return {void} + */ +Indexes.indexTypeSelectionDialog = function (sourceArray, indexChoice, colIndex) { + var $singleColumnRadio = $('' + + ''); + var $compositeIndexRadio = $('' + + ''); + var $dialogContent = $('
        '); + $dialogContent.append('' + indexChoice.toUpperCase() + ''); + + + // For UNIQUE/INDEX type, show choice for single-column and composite index. + $dialogContent.append($singleColumnRadio); + $dialogContent.append($compositeIndexRadio); + + var buttonOptions = {}; + // 'OK' operation. + buttonOptions[Messages.strGo] = function () { + if ($('#single_column').is(':checked')) { + var index = { + 'Key_name': (indexChoice === 'primary' ? 'PRIMARY' : ''), + 'Index_choice': indexChoice.toUpperCase() + }; + Indexes.showAddIndexDialog(sourceArray, (sourceArray.length), [colIndex], colIndex, index); + } + + if ($('#composite_index').is(':checked')) { + if ($('input[name="composite_with"]').length !== 0 && $('input[name="composite_with"]:checked').length === 0 + ) { + Functions.ajaxShowMessage( + '', + false + ); + return false; + } + + var arrayIndex = $('input[name="composite_with"]:checked').val(); + var sourceLength = sourceArray[arrayIndex].columns.length; + var targetColumns = []; + for (var i = 0; i < sourceLength; i++) { + targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); + } + targetColumns.push(colIndex); + + Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, colIndex, + sourceArray[arrayIndex]); + } + + $(this).remove(); + }; + buttonOptions[Messages.strCancel] = function () { + // Handle state on 'Cancel'. + var $selectList = $('select[name="field_key[' + colIndex + ']"]'); + if (! $selectList.attr('data-index').length) { + $selectList.find('option[value*="none"]').attr('selected', 'selected'); + } else { + var previousIndex = $selectList.attr('data-index').split(','); + $selectList.find('option[value*="' + previousIndex[0].toLowerCase() + '"]') + .attr('selected', 'selected'); + } + $(this).remove(); + }; + $('
        ').append($dialogContent).dialog({ + minWidth: 525, + minHeight: 200, + modal: true, + title: Messages.strAddIndex, + resizable: false, + buttons: buttonOptions, + open: function () { + $('#composite_index').on('change', function () { + if ($(this).is(':checked')) { + $dialogContent.append(Indexes.getCompositeIndexList(sourceArray, colIndex)); + } + }); + $('#single_column').on('change', function () { + if ($(this).is(':checked')) { + if ($('#composite_index_list').length) { + $('#composite_index_list').remove(); + } + } + }); + }, + close: function () { + $('#composite_index').off('change'); + $('#single_column').off('change'); + $(this).remove(); + } + }); +}; + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('indexes.js', function () { + $(document).off('click', '#save_index_frm'); + $(document).off('click', '#preview_index_frm'); + $(document).off('change', '#select_index_choice'); + $(document).off('click', 'a.drop_primary_key_index_anchor.ajax'); + $(document).off('click', '#table_index tbody tr td.edit_index.ajax, #index_div .add_index.ajax'); + $(document).off('click', '#table_index tbody tr td.rename_index.ajax'); + $(document).off('click', '#index_frm input[type=submit]'); + $('body').off('change', 'select[name*="field_key"]'); + $(document).off('click', '.show_index_dialog'); +}); + +/** + * @description

        Ajax scripts for table index page

        + * + * Actions ajaxified here: + *
          + *
        • Showing/hiding inputs depending on the index type chosen
        • + *
        • create/edit/drop indexes
        • + *
        + */ +AJAX.registerOnload('indexes.js', function () { + // Re-initialize variables. + primaryIndexes = []; + uniqueIndexes = []; + indexes = []; + fulltextIndexes = []; + spatialIndexes = []; + + // for table creation form + var $engineSelector = $('.create_table_form select[name=tbl_storage_engine]'); + if ($engineSelector.length) { + Functions.hideShowConnection($engineSelector); + } + + var $form = $('#index_frm'); + if ($form.length > 0) { + Functions.showIndexEditDialog($form); + } + + $(document).on('click', '#save_index_frm', function (event) { + event.preventDefault(); + var $form = $('#index_frm'); + var argsep = CommonParams.get('arg_separator'); + var submitData = $form.serialize() + argsep + 'do_save_data=1' + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true'; + Functions.ajaxShowMessage(Messages.strProcessingRequest); + AJAX.source = $form; + $.post($form.attr('action'), submitData, AJAX.responseHandler); + }); + + $(document).on('click', '#preview_index_frm', function (event) { + event.preventDefault(); + Functions.previewSql($('#index_frm')); + }); + + $(document).on('change', '#select_index_choice', function (event) { + event.preventDefault(); + Indexes.checkIndexType(); + Functions.checkIndexName('index_frm'); + }); + + /** + * Ajax Event handler for 'Drop Index' + */ + $(document).on('click', 'a.drop_primary_key_index_anchor.ajax', function (event) { + event.preventDefault(); + var $anchor = $(this); + /** + * @var $currRow Object containing reference to the current field's row + */ + var $currRow = $anchor.parents('tr'); + /** @var {number} rows Number of columns in the key */ + var rows = $anchor.parents('td').attr('rowspan') || 1; + /** @var {number} $rowsToHide Rows that should be hidden */ + var $rowsToHide = $currRow; + for (var i = 1, $lastRow = $currRow.next(); i < rows; i++, $lastRow = $lastRow.next()) { + $rowsToHide = $rowsToHide.add($lastRow); + } + + var question = $currRow.children('td') + .children('.drop_primary_key_index_msg') + .val(); + + Functions.confirmPreviewSql(question, $anchor.attr('href'), function (url) { + var $msg = Functions.ajaxShowMessage(Messages.strDroppingPrimaryKeyIndex, false); + var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); + $.post(url, params, function (data) { + if (typeof data !== 'undefined' && data.success === true) { + Functions.ajaxRemoveMessage($msg); + var $tableRef = $rowsToHide.closest('table'); + if ($rowsToHide.length === $tableRef.find('tbody > tr').length) { + // We are about to remove all rows from the table + $tableRef.hide('medium', function () { + $('div.no_indexes_defined').show('medium'); + $rowsToHide.remove(); + }); + $tableRef.siblings('.alert-primary').hide('medium'); + } else { + // We are removing some of the rows only + $rowsToHide.hide('medium', function () { + $(this).remove(); + }); + } + if ($('.result_query').length) { + $('.result_query').remove(); + } + if (data.sql_query) { + $('
        ') + .html(data.sql_query) + .prependTo('#structure_content'); + Functions.highlightSql($('#page_content')); + } + Navigation.reload(); + CommonActions.refreshMain('index.php?route=/table/structure'); + } else { + Functions.ajaxShowMessage(Messages.strErrorProcessingRequest + ' : ' + data.error, false); + } + }); // end $.post() + }); + }); // end Drop Primary Key/Index + + /** + * Ajax event handler for index edit + **/ + $(document).on('click', '#table_index tbody tr td.edit_index.ajax, #index_div .add_index.ajax', function (event) { + event.preventDefault(); + var url; + var title; + if ($(this).find('a').length === 0) { + // Add index + var valid = Functions.checkFormElementInRange( + $(this).closest('form')[0], + 'added_fields', + 'Column count has to be larger than zero.' + ); + if (! valid) { + return; + } + url = $(this).closest('form').serialize(); + title = Messages.strAddIndex; + } else { + // Edit index + url = $(this).find('a').getPostData(); + title = Messages.strEditIndex; + } + url += CommonParams.get('arg_separator') + 'ajax_request=true'; + Functions.indexEditorDialog(url, title, function (data) { + CommonParams.set('db', data.params.db); + CommonParams.set('table', data.params.table); + CommonActions.refreshMain('index.php?route=/table/structure'); + }); + }); + + /** + * Ajax event handler for index rename + **/ + $(document).on('click', '#table_index tbody tr td.rename_index.ajax', function (event) { + event.preventDefault(); + var url = $(this).find('a').getPostData(); + var title = Messages.strRenameIndex; + url += CommonParams.get('arg_separator') + 'ajax_request=true'; + Functions.indexRenameDialog(url, title, function (data) { + CommonParams.set('db', data.params.db); + CommonParams.set('table', data.params.table); + CommonActions.refreshMain('index.php?route=/table/structure'); + }); + }); + + /** + * Ajax event handler for advanced index creation during table creation + * and column addition. + */ + $('body').on('change', 'select[name*="field_key"]', function (e, showDialog) { + var showDialogLocal = typeof showDialog !== 'undefined' ? showDialog : true; + // Index of column on Table edit and create page. + var colIndex = /\d+/.exec($(this).attr('name')); + colIndex = colIndex[0]; + // Choice of selected index. + var indexChoice = /[a-z]+/.exec($(this).val()); + indexChoice = indexChoice[0]; + // Array containing corresponding indexes. + var sourceArray = null; + + if (indexChoice === 'none') { + Indexes.removeColumnFromIndex(colIndex); + var id = 'index_name_' + '0' + '_8'; + var $name = $('#' + id); + if ($name.length === 0) { + $name = $(''); + $name.insertAfter($('select[name="field_key[' + '0' + ']"]')); + } + $name.html(''); + return false; + } + + // Select a source array. + sourceArray = Indexes.getIndexArray(indexChoice); + if (sourceArray === null) { + return; + } + + if (sourceArray.length === 0) { + var index = { + 'Key_name': (indexChoice === 'primary' ? 'PRIMARY' : ''), + 'Index_choice': indexChoice.toUpperCase() + }; + Indexes.showAddIndexDialog(sourceArray, 0, [colIndex], colIndex, index, showDialogLocal); + } else { + if (indexChoice === 'primary') { + var arrayIndex = 0; + var sourceLength = sourceArray[arrayIndex].columns.length; + var targetColumns = []; + for (var i = 0; i < sourceLength; i++) { + targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); + } + targetColumns.push(colIndex); + Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, colIndex, + sourceArray[arrayIndex], showDialogLocal); + } else { + // If there are multiple columns selected for an index, show advanced dialog. + Indexes.indexTypeSelectionDialog(sourceArray, indexChoice, colIndex); + } + } + }); + + $(document).on('click', '.show_index_dialog', function (e) { + e.preventDefault(); + + // Get index details. + var previousIndex = $(this).prev('select') + .attr('data-index') + .split(','); + + var indexChoice = previousIndex[0]; + var arrayIndex = previousIndex[1]; + + var sourceArray = Indexes.getIndexArray(indexChoice); + if (sourceArray !== null) { + var sourceLength = sourceArray[arrayIndex].columns.length; + + var targetColumns = []; + for (var i = 0; i < sourceLength; i++) { + targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); + } + + Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, -1, sourceArray[arrayIndex]); + } + }); + + $('#index_frm').on('submit', function () { + if (typeof(this.elements['index[Key_name]'].disabled) !== 'undefined') { + this.elements['index[Key_name]'].disabled = false; + } + }); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/makegrid.js b/Sources/php_script/script/phpMyAdmin/js/src/makegrid.js new file mode 100644 index 0000000..e30a34c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/makegrid.js @@ -0,0 +1,2324 @@ +/* global firstDayOfCalendar */ // templates/javascript/variables.twig + +/** + * Create advanced table (resize, reorder, and show/hide columns; and also grid editing). + * This function is designed mainly for table DOM generated from browsing a table in the database. + * For using this function in other table DOM, you may need to: + * - add "draggable" class in the table header , in order to make it resizable, sortable or hidable + * - have at least one non-"draggable" header in the table DOM for placing column visibility drop-down arrow + * - pass the value "false" for the parameter "enableGridEdit" + * - adjust other parameter value, to select which features that will be enabled + * + * @param t the table DOM element + * @param enableResize Optional, if false, column resizing feature will be disabled + * @param enableReorder Optional, if false, column reordering feature will be disabled + * @param enableVisib Optional, if false, show/hide column feature will be disabled + * @param enableGridEdit Optional, if false, grid editing feature will be disabled + */ +// eslint-disable-next-line no-unused-vars +var makeGrid = function (t, enableResize, enableReorder, enableVisib, enableGridEdit) { + var isResizeEnabled = enableResize === undefined ? true : enableResize; + var isReorderEnabled = enableReorder === undefined ? true : enableReorder; + var isVisibEnabled = enableVisib === undefined ? true : enableVisib; + var isGridEditEnabled = enableGridEdit === undefined ? true : enableGridEdit; + + var g = { + /** ********* + * Constant + ***********/ + minColWidth: 15, + + + /** ********* + * Variables, assigned with default value, changed later + ***********/ + actionSpan: 5, // number of colspan in Actions header in a table + tableCreateTime: null, // table creation time, used for saving column order and visibility to server, only available in "Browse tab" + + // Column reordering variables + colOrder: [], // array of column order + + // Column visibility variables + colVisib: [], // array of column visibility + showAllColText: '', // string, text for "show all" button under column visibility list + visibleHeadersCount: 0, // number of visible data headers + + // Table hint variables + reorderHint: '', // string, hint for column reordering + sortHint: '', // string, hint for column sorting + markHint: '', // string, hint for column marking + copyHint: '', // string, hint for copy column name + showReorderHint: false, + showSortHint: false, + showMarkHint: false, + + // Grid editing + isCellEditActive: false, // true if current focus is in edit cell + isEditCellTextEditable: false, // true if current edit cell is editable in the text input box (not textarea) + currentEditCell: null, // reference to that currently being edited + cellEditHint: '', // hint shown when doing grid edit + gotoLinkText: '', // "Go to link" text + wasEditedCellNull: false, // true if last value of the edited cell was NULL + maxTruncatedLen: 0, // number of characters that can be displayed in a cell + saveCellsAtOnce: false, // $cfg[saveCellsAtOnce] + isCellEdited: false, // true if at least one cell has been edited + saveCellWarning: '', // string, warning text when user want to leave a page with unsaved edited data + lastXHR : null, // last XHR object used in AJAX request + isSaving: false, // true when currently saving edited data, used to handle double posting caused by pressing ENTER in grid edit text box in Chrome browser + alertNonUnique: '', // string, alert shown when saving edited nonunique table + + // Common hidden inputs + token: null, + server: null, + db: null, + table: null, + + + /** ********** + * Functions + ************/ + + /** + * Start to resize column. Called when clicking on column separator. + * + * @param e event + * @param obj dragged div object + */ + dragStartRsz: function (e, obj) { + var n = $(g.cRsz).find('div').index(obj); // get the index of separator (i.e., column index) + $(obj).addClass('colborder_active'); + g.colRsz = { + x0: e.pageX, + n: n, + obj: obj, + objLeft: $(obj).position().left, + objWidth: $(g.t).find('th.draggable:visible').eq(n).find('span').outerWidth() + }; + // eslint-disable-next-line compat/compat + $(document.body).css('cursor', 'col-resize').noSelect(); + if (g.isCellEditActive) { + g.hideEditCell(); + } + }, + + /** + * Start to reorder column. Called when clicking on table header. + * + * @param e event + * @param obj table header object + */ + dragStartReorder: function (e, obj) { + // prepare the cCpy (column copy) and cPointer (column pointer) from the dragged column + $(g.cCpy).text($(obj).text()); + var objPos = $(obj).position(); + $(g.cCpy).css({ + top: objPos.top + 20, + left: objPos.left, + height: $(obj).height(), + width: $(obj).width() + }); + $(g.cPointer).css({ + top: objPos.top + }); + + // get the column index, zero-based + var n = g.getHeaderIdx(obj); + + g.colReorder = { + x0: e.pageX, + y0: e.pageY, + n: n, + newn: n, + obj: obj, + objTop: objPos.top, + objLeft: objPos.left + }; + + // eslint-disable-next-line compat/compat + $(document.body).css('cursor', 'move').noSelect(); + if (g.isCellEditActive) { + g.hideEditCell(); + } + }, + + /** + * Handle mousemove event when dragging. + * + * @param e event + */ + dragMove: function (e) { + var dx; + if (g.colRsz) { + dx = e.pageX - g.colRsz.x0; + if (g.colRsz.objWidth + dx > g.minColWidth) { + $(g.colRsz.obj).css('left', g.colRsz.objLeft + dx + 'px'); + } + } else if (g.colReorder) { + // dragged column animation + dx = e.pageX - g.colReorder.x0; + $(g.cCpy) + .css('left', g.colReorder.objLeft + dx) + .show(); + + // pointer animation + var hoveredCol = g.getHoveredCol(e); + if (hoveredCol) { + var newn = g.getHeaderIdx(hoveredCol); + g.colReorder.newn = newn; + if (newn !== g.colReorder.n) { + // show the column pointer in the right place + var colPos = $(hoveredCol).position(); + var newleft = newn < g.colReorder.n ? + colPos.left : + colPos.left + $(hoveredCol).outerWidth(); + $(g.cPointer) + .css({ + left: newleft, + visibility: 'visible' + }); + } else { + // no movement to other column, hide the column pointer + $(g.cPointer).css('visibility', 'hidden'); + } + } + } + }, + + /** + * Stop the dragging action. + * + * @param e event + */ + dragEnd: function (e) { + if (g.colRsz) { + var dx = e.pageX - g.colRsz.x0; + var nw = g.colRsz.objWidth + dx; + if (nw < g.minColWidth) { + nw = g.minColWidth; + } + var n = g.colRsz.n; + // do the resizing + g.resize(n, nw); + + g.reposRsz(); + g.reposDrop(); + g.colRsz = false; + $(g.cRsz).find('div').removeClass('colborder_active'); + } else if (g.colReorder) { + // shift columns + if (g.colReorder.newn !== g.colReorder.n) { + g.shiftCol(g.colReorder.n, g.colReorder.newn); + // assign new position + var objPos = $(g.colReorder.obj).position(); + g.colReorder.objTop = objPos.top; + g.colReorder.objLeft = objPos.left; + g.colReorder.n = g.colReorder.newn; + // send request to server to remember the column order + if (g.tableCreateTime) { + g.sendColPrefs(); + } + g.refreshRestoreButton(); + } + + // animate new column position + $(g.cCpy).stop(true, true) + .animate({ + top: g.colReorder.objTop, + left: g.colReorder.objLeft + }, 'fast') + .fadeOut(); + $(g.cPointer).css('visibility', 'hidden'); + + g.colReorder = false; + } + // eslint-disable-next-line compat/compat + $(document.body).css('cursor', 'inherit').noSelect(false); + }, + + /** + * Resize column n to new width "nw" + * + * @param n zero-based column index + * @param nw new width of the column in pixel + */ + resize: function (n, nw) { + $(g.t).find('tr').each(function () { + $(this).find('th.draggable:visible').eq(n).find('span') + .add($(this).find('td:visible').eq(g.actionSpan + n).find('span')) + .css('width', nw); + }); + }, + + /** + * Reposition column resize bars. + */ + reposRsz: function () { + $(g.cRsz).find('div').hide(); + var $firstRowCols = $(g.t).find('tr').first().find('th.draggable:visible'); + var $resizeHandles = $(g.cRsz).find('div').removeClass('condition'); + $(g.t).find('table.pma_table').find('thead th').first().removeClass('before-condition'); + for (var n = 0, l = $firstRowCols.length; n < l; n++) { + var $col = $($firstRowCols[n]); + var colWidth; + if (navigator.userAgent.toLowerCase().indexOf('safari') !== -1) { + colWidth = $col.outerWidth(); + } else { + colWidth = $col.outerWidth(true); + } + $($resizeHandles[n]).css('left', $col.position().left + colWidth) + .show(); + if ($col.hasClass('condition')) { + $($resizeHandles[n]).addClass('condition'); + if (n > 0) { + $($resizeHandles[n - 1]).addClass('condition'); + } + } + } + if ($($resizeHandles[0]).hasClass('condition')) { + $(g.t).find('thead th').first().addClass('before-condition'); + } + $(g.cRsz).css('height', $(g.t).height()); + }, + + /** + * Shift column from index oldn to newn. + * + * @param oldn old zero-based column index + * @param newn new zero-based column index + */ + shiftCol: function (oldn, newn) { + $(g.t).find('tr').each(function () { + if (newn < oldn) { + $(this).find('th.draggable').eq(newn) + .add($(this).find('td').eq(g.actionSpan + newn)) + .before($(this).find('th.draggable').eq(oldn) + .add($(this).find('td').eq(g.actionSpan + oldn))); + } else { + $(this).find('th.draggable').eq(newn) + .add($(this).find('td').eq(g.actionSpan + newn)) + .after($(this).find('th.draggable').eq(oldn) + .add($(this).find('td').eq(g.actionSpan + oldn))); + } + }); + // reposition the column resize bars + g.reposRsz(); + + // adjust the column visibility list + if (newn < oldn) { + $(g.cList).find('.lDiv div').eq(newn) + .before($(g.cList).find('.lDiv div').eq(oldn)); + } else { + $(g.cList).find('.lDiv div').eq(newn) + .after($(g.cList).find('.lDiv div').eq(oldn)); + } + // adjust the colOrder + var tmp = g.colOrder[oldn]; + g.colOrder.splice(oldn, 1); + g.colOrder.splice(newn, 0, tmp); + // adjust the colVisib + if (g.colVisib.length > 0) { + tmp = g.colVisib[oldn]; + g.colVisib.splice(oldn, 1); + g.colVisib.splice(newn, 0, tmp); + } + }, + + /** + * Find currently hovered table column's header (excluding actions column). + * + * @param e event + * @return {object|undefined} the hovered column's th object or undefined if no hovered column found. + */ + getHoveredCol: function (e) { + var hoveredCol; + var $headers = $(g.t).find('th.draggable:visible'); + $headers.each(function () { + var left = $(this).offset().left; + var right = left + $(this).outerWidth(); + if (left <= e.pageX && e.pageX <= right) { + hoveredCol = this; + } + }); + return hoveredCol; + }, + + /** + * Get a zero-based index from a tag in a table. + * + * @param obj table header object + * @return {number} zero-based index of the specified table header in the set of table headers (visible or not) + */ + getHeaderIdx: function (obj) { + return $(obj).parents('tr').find('th.draggable').index(obj); + }, + + /** + * Reposition the columns back to normal order. + */ + restoreColOrder: function () { + // use insertion sort, since we already have shiftCol function + for (var i = 1; i < g.colOrder.length; i++) { + var x = g.colOrder[i]; + var j = i - 1; + while (j >= 0 && x < g.colOrder[j]) { + j--; + } + if (j !== i - 1) { + g.shiftCol(i, j + 1); + } + } + if (g.tableCreateTime) { + // send request to server to remember the column order + g.sendColPrefs(); + } + g.refreshRestoreButton(); + }, + + /** + * Send column preferences (column order and visibility) to the server. + */ + sendColPrefs: function () { + if ($(g.t).is('.ajax')) { // only send preferences if ajax class + if (typeof g.db !== 'string' && typeof g.table !== 'string') { + // The server has nothing to do with it + // Issue: https://github.com/phpmyadmin/phpmyadmin/issues/15658 + return; + } + var postParams = { + 'ajax_request': true, + 'db': g.db, + 'table': g.table, + 'token': g.token, + 'server': g.server, + 'table_create_time': g.tableCreateTime + }; + if (g.colOrder.length > 0) { + $.extend(postParams, { 'col_order': g.colOrder.toString() }); + } + if (g.colVisib.length > 0) { + $.extend(postParams, { 'col_visib': g.colVisib.toString() }); + } + $.post('index.php?route=/sql/set-column-preferences', postParams, function (data) { + if (data.success !== true) { + var $tempDiv = $(document.createElement('div')); + $tempDiv.html(data.error); + $tempDiv.addClass('alert alert-danger'); + Functions.ajaxShowMessage($tempDiv, false); + } + }); + } + }, + + /** + * Refresh restore button state. + * Make restore button disabled if the table is similar with initial state. + */ + refreshRestoreButton: function () { + // check if table state is as initial state + var isInitial = true; + for (var i = 0; i < g.colOrder.length; i++) { + if (g.colOrder[i] !== i) { + isInitial = false; + break; + } + } + // check if only one visible column left + var isOneColumn = g.visibleHeadersCount === 1; + // enable or disable restore button + if (isInitial || isOneColumn) { + $(g.o).find('div.restore_column').hide(); + } else { + $(g.o).find('div.restore_column').show(); + } + }, + + /** + * Update current hint using the boolean values (showReorderHint, showSortHint, etc.). + * + * @return {string} + * + */ + updateHint: function () { + var text = ''; + if (!g.colRsz && !g.colReorder) { // if not resizing or dragging + if (g.visibleHeadersCount > 1) { + g.showReorderHint = true; + } + if ($(t).find('th.marker').length > 0) { + g.showMarkHint = true; + } + if (g.showSortHint && g.sortHint) { + text += text.length > 0 ? '
        ' : ''; + text += '- ' + g.sortHint; + } + if (g.showMultiSortHint && g.strMultiSortHint) { + text += text.length > 0 ? '
        ' : ''; + text += '- ' + g.strMultiSortHint; + } + if (g.showMarkHint && + g.markHint && + ! g.showSortHint && // we do not show mark hint, when sort hint is shown + g.showReorderHint && + g.reorderHint + ) { + text += text.length > 0 ? '
        ' : ''; + text += '- ' + g.reorderHint; + text += text.length > 0 ? '
        ' : ''; + text += '- ' + g.markHint; + text += text.length > 0 ? '
        ' : ''; + text += '- ' + g.copyHint; + } + } + return text; + }, + + /** + * Toggle column's visibility. + * After calling this function and it returns true, afterToggleCol() must be called. + * + * @param {number} n + * + * @return {boolean} True if the column is toggled successfully. + */ + toggleCol: function (n) { + if (g.colVisib[n]) { + // can hide if more than one column is visible + if (g.visibleHeadersCount > 1) { + $(g.t).find('tr').each(function () { + $(this).find('th.draggable').eq(n) + .add($(this).find('td').eq(g.actionSpan + n)) + .hide(); + }); + g.colVisib[n] = 0; + $(g.cList).find('.lDiv div').eq(n).find('input').prop('checked', false); + } else { + // cannot hide, force the checkbox to stay checked + $(g.cList).find('.lDiv div').eq(n).find('input').prop('checked', true); + return false; + } + } else { // column n is not visible + $(g.t).find('tr').each(function () { + $(this).find('th.draggable').eq(n) + .add($(this).find('td').eq(g.actionSpan + n)) + .show(); + }); + g.colVisib[n] = 1; + $(g.cList).find('.lDiv div').eq(n).find('input').prop('checked', true); + } + return true; + }, + + /** + * This must be called if toggleCol() returns is true. + * + * This function is separated from toggleCol because, sometimes, we want to toggle + * some columns together at one time and do just one adjustment after it, e.g. in showAllColumns(). + */ + afterToggleCol: function () { + // some adjustments after hiding column + g.reposRsz(); + g.reposDrop(); + g.sendColPrefs(); + + // check visible first row headers count + g.visibleHeadersCount = $(g.t).find('tr').first().find('th.draggable:visible').length; + g.refreshRestoreButton(); + + // Display minimum of one column - disable checkbox for hiding last column + if (g.visibleHeadersCount <= 1) { + $(g.cList).find('.lDiv div').each(function () { + $(this).find('input:checkbox:checked').prop('disabled', true); + }); + } else { + // Remove disabled property if showing more than one column + $(g.cList).find('.lDiv div').each(function () { + $(this).find('input:checkbox:disabled').prop('disabled', false); + }); + } + }, + + /** + * Show columns' visibility list. + * + * @param obj The drop down arrow of column visibility list + */ + showColList: function (obj) { + // only show when not resizing or reordering + if (!g.colRsz && !g.colReorder) { + var pos = $(obj).position(); + $(g.cList).css({ + top: pos.top + $(obj).outerHeight(true) + }) + .show(); + $(obj).addClass('coldrop-hover'); + } + }, + + /** + * Hide columns' visibility list. + */ + hideColList: function () { + $(g.cList).hide(); + $(g.cDrop).find('.coldrop-hover').removeClass('coldrop-hover'); + }, + + /** + * Reposition the column visibility drop-down arrow. + */ + reposDrop: function () { + var $th = $(t).find('th:not(.draggable)'); + for (var i = 0; i < $th.length; i++) { + var $cd = $(g.cDrop).find('div').eq(i); // column drop-down arrow + var pos = $($th[i]).position(); + $cd.css({ + left: pos.left + $($th[i]).width() - $cd.width(), + top: pos.top + }); + } + }, + + /** + * Show all hidden columns. + */ + showAllColumns: function () { + for (var i = 0; i < g.colVisib.length; i++) { + if (!g.colVisib[i]) { + g.toggleCol(i); + } + } + g.afterToggleCol(); + }, + + /** + * Show edit cell, if it can be shown + * + * @param cell element to be edited + */ + showEditCell: function (cell) { + if ($(cell).is('.grid_edit') && + !g.colRsz && !g.colReorder) { + if (!g.isCellEditActive) { + var $cell = $(cell); + + if ('string' === $cell.attr('data-type') || + 'blob' === $cell.attr('data-type') || + 'json' === $cell.attr('data-type') + ) { + g.cEdit = g.cEditTextarea; + } else { + g.cEdit = g.cEditStd; + } + + // remove all edit area and hide it + $(g.cEdit).find('.edit_area').empty().hide(); + // reposition the cEdit element + $(g.cEdit).css({ + top: $cell.position().top, + left: $cell.position().left + }) + .show() + .find('.edit_box') + .css({ + width: $cell.outerWidth(), + height: $cell.outerHeight() + }); + // fill the cell edit with text from + var value = Functions.getCellValue(cell); + if ($cell.attr('data-type') === 'json' && $cell.is('.truncated') === false) { + try { + value = JSON.stringify(JSON.parse(value), null, 4); + } catch (e) { + // Show as is + } + } + $(g.cEdit).find('.edit_box').val(value); + + g.currentEditCell = cell; + $(g.cEdit).find('.edit_box').trigger('focus'); + moveCursorToEnd($(g.cEdit).find('.edit_box')); + $(g.cEdit).find('*').prop('disabled', false); + } + } + + function moveCursorToEnd (input) { + var originalValue = input.val(); + var originallength = originalValue.length; + input.val(''); + input.trigger('blur').trigger('focus').val(originalValue); + input[0].setSelectionRange(originallength, originallength); + } + }, + + /** + * Remove edit cell and the edit area, if it is shown. + * + * @param force Optional, force to hide edit cell without saving edited field. + * @param data Optional, data from the POST AJAX request to save the edited field + * or just specify "true", if we want to replace the edited field with the new value. + * @param field Optional, the edited . If not specified, the function will + * use currently edited from g.currentEditCell. + * @param options Optional, this object contains a boolean named move (true, if called from move* functions) + * and a to which the grid_edit should move + */ + hideEditCell: function (force, data, field, options) { + if (g.isCellEditActive && !force) { + // cell is being edited, save or post the edited data + if (options !== undefined) { + g.saveOrPostEditedCell(options); + } else { + g.saveOrPostEditedCell(); + } + return; + } + + // cancel any previous request + if (g.lastXHR !== null) { + g.lastXHR.abort(); + g.lastXHR = null; + } + + if (data) { + if (g.currentEditCell) { // save value of currently edited cell + // replace current edited field with the new value + var $thisField = $(g.currentEditCell); + var isNull = $thisField.data('value') === null; + if (isNull) { + $thisField.find('span').html('NULL'); + $thisField.addClass('null'); + } else { + $thisField.removeClass('null'); + var value = data.isNeedToRecheck + ? data.truncatableFieldValue + : $thisField.data('value'); + + // Truncates the text. + $thisField.removeClass('truncated'); + if (CommonParams.get('pftext') === 'P' && value.length > g.maxTruncatedLen) { + $thisField.addClass('truncated'); + value = value.substring(0, g.maxTruncatedLen) + '...'; + } + + // Add
        before carriage return. + var newHtml = Functions.escapeHtml(value); + newHtml = newHtml.replace(/\n/g, '
        \n'); + + var decimals = parseInt($thisField.attr('data-decimals')); + + // remove decimal places if column type not supported + if ((decimals === 0) && ($thisField.attr('data-type').indexOf('time') !== -1)) { + newHtml = newHtml.substring(0, newHtml.indexOf('.')); + } + + // remove additional decimal places + if ((decimals > 0) && ($thisField.attr('data-type').indexOf('time') !== -1)) { + newHtml = newHtml.substring(0, newHtml.length - (6 - decimals)); + } + + var selector = 'span'; + if ($thisField.hasClass('hex') && $thisField.find('a').length) { + selector = 'a'; + } + + // Updates the code keeping highlighting (if any). + var $target = $thisField.find(selector); + if (!Functions.updateCode($target, newHtml, value)) { + $target.html(newHtml); + } + } + if ($thisField.is('.bit')) { + $thisField.find('span').text($thisField.data('value')); + } + } + if (data.transformations !== undefined) { + $.each(data.transformations, function (cellIndex, value) { + var $thisField = $(g.t).find('.to_be_saved').eq(cellIndex); + $thisField.find('span').html(value); + }); + } + if (data.relations !== undefined) { + $.each(data.relations, function (cellIndex, value) { + var $thisField = $(g.t).find('.to_be_saved').eq(cellIndex); + $thisField.find('span').html(value); + }); + } + + // refresh the grid + g.reposRsz(); + g.reposDrop(); + } + + // hide the cell editing area + $(g.cEdit).hide(); + $(g.cEdit).find('.edit_box').trigger('blur'); + g.isCellEditActive = false; + g.currentEditCell = null; + // destroy datepicker in edit area, if exist + var $dp = $(g.cEdit).find('.hasDatepicker'); + if ($dp.length > 0) { + // eslint-disable-next-line no-underscore-dangle + $(document).on('mousedown', $.datepicker._checkExternalClick); + $dp.datepicker('destroy'); + // change the cursor in edit box back to normal + // (the cursor become a hand pointer when we add datepicker) + $(g.cEdit).find('.edit_box').css('cursor', 'inherit'); + } + }, + + /** + * Show drop-down edit area when edit cell is focused. + */ + showEditArea: function () { + if (!g.isCellEditActive) { // make sure the edit area has not been shown + g.isCellEditActive = true; + g.isEditCellTextEditable = false; + /** + * @var $td current edited cell + */ + var $td = $(g.currentEditCell); + /** + * @var $editArea the editing area + */ + var $editArea = $(g.cEdit).find('.edit_area'); + /** + * @var whereClause WHERE clause for the edited cell + */ + var whereClause = $td.parent('tr').find('.where_clause').val(); + /** + * @var fieldName String containing the name of this field. + * @see Sql.getFieldName() + */ + var fieldName = Sql.getFieldName($(t), $td); + /** + * @var relationCurrValue String current value of the field (for fields that are foreign keyed). + */ + var relationCurrValue = $td.text(); + /** + * @var relationKeyOrDisplayColumn String relational key if in 'Relational display column' mode, + * relational display column if in 'Relational key' mode (for fields that are foreign keyed). + */ + var relationKeyOrDisplayColumn = $td.find('a').attr('title'); + /** + * @var currValue String current value of the field (for fields that are of type enum or set). + */ + var currValue = $td.find('span').text(); + + // empty all edit area, then rebuild it based on $td classes + $editArea.empty(); + + // remember this instead of testing more than once + var isNull = $td.is('.null'); + + // add goto link, if this cell contains a link + if ($td.find('a').length > 0) { + var gotoLink = document.createElement('div'); + gotoLink.className = 'goto_link'; + $(gotoLink).append(g.gotoLinkText + ' ').append($td.find('a').clone()); + $editArea.append(gotoLink); + } + + g.wasEditedCellNull = false; + if ($td.is(':not(.not_null)')) { + // append a null checkbox + $editArea.append('
        '); + + var $checkbox = $editArea.find('.null_div input'); + // check if current is NULL + if (isNull) { + $checkbox.prop('checked', true); + g.wasEditedCellNull = true; + } + + // if the select/editor is changed un-check the 'checkbox_null__'. + if ($td.is('.enum, .set')) { + $editArea.on('change', 'select', function () { + $checkbox.prop('checked', false); + }); + } else if ($td.is('.relation')) { + $editArea.on('change', 'select', function () { + $checkbox.prop('checked', false); + }); + $editArea.on('click', '.browse_foreign', function () { + $checkbox.prop('checked', false); + }); + } else { + $(g.cEdit).on('keypress change paste', '.edit_box', function () { + $checkbox.prop('checked', false); + }); + // Capture ctrl+v (on IE and Chrome) + $(g.cEdit).on('keydown', '.edit_box', function (e) { + if (e.ctrlKey && e.which === 86) { + $checkbox.prop('checked', false); + } + }); + $editArea.on('keydown', 'textarea', function () { + $checkbox.prop('checked', false); + }); + } + // if some text is written in textbox automatically unmark the null checkbox and if it is emptied again mark the checkbox. + $(g.cEdit).find('.edit_box').on('input', function () { + if ($(g.cEdit).find('.edit_box').val() !== '') { + $checkbox.prop('checked', false); + } else { + $checkbox.prop('checked', true); + } + }); + // if null checkbox is clicked empty the corresponding select/editor. + $checkbox.on('click', function () { + if ($td.is('.enum')) { + $editArea.find('select').val(''); + } else if ($td.is('.set')) { + $editArea.find('select').find('option').each(function () { + var $option = $(this); + $option.prop('selected', false); + }); + } else if ($td.is('.relation')) { + // if the dropdown is there to select the foreign value + if ($editArea.find('select').length > 0) { + $editArea.find('select').val(''); + } + } else { + $editArea.find('textarea').val(''); + } + $(g.cEdit).find('.edit_box').val(''); + }); + } + + // reset the position of the edit_area div after closing datetime picker + $(g.cEdit).find('.edit_area').css({ 'top' :'0','position':'' }); + + var postParams; + if ($td.is('.relation')) { + // handle relations + $editArea.addClass('edit_area_loading'); + + // initialize the original data + $td.data('original_data', null); + + /** + * @var postParams Object containing parameters for the POST request + */ + postParams = { + 'ajax_request' : true, + 'server' : g.server, + 'db' : g.db, + 'table' : g.table, + 'column' : fieldName, + 'curr_value' : relationCurrValue, + 'relation_key_or_display_column' : relationKeyOrDisplayColumn + }; + + g.lastXHR = $.post('index.php?route=/sql/get-relational-values', postParams, function (data) { + g.lastXHR = null; + $editArea.removeClass('edit_area_loading'); + if ($(data.dropdown).is('select')) { + // save original_data + var value = $(data.dropdown).val(); + $td.data('original_data', value); + // update the text input field, in case where the "Relational display column" is checked + $(g.cEdit).find('.edit_box').val(value); + } + + $editArea.append(data.dropdown); + $editArea.append('
        ' + g.cellEditHint + '
        '); + + // for 'Browse foreign values' options, + // hide the value next to 'Browse foreign values' link + $editArea.find('span.curr_value').hide(); + // handle update for new values selected from new window + $editArea.find('span.curr_value').on('change', function () { + $(g.cEdit).find('.edit_box').val($(this).text()); + }); + }); // end $.post() + + $editArea.show(); + $editArea.on('change', 'select', function () { + $(g.cEdit).find('.edit_box').val($(this).val()); + }); + g.isEditCellTextEditable = true; + } else if ($td.is('.enum')) { + // handle enum fields + $editArea.addClass('edit_area_loading'); + + /** + * @var postParams Object containing parameters for the POST request + */ + postParams = { + 'ajax_request' : true, + 'server' : g.server, + 'db' : g.db, + 'table' : g.table, + 'column' : fieldName, + 'curr_value' : currValue + }; + g.lastXHR = $.post('index.php?route=/sql/get-enum-values', postParams, function (data) { + g.lastXHR = null; + if (typeof data === 'object' && data.success === false) { + Functions.ajaxShowMessage(data.error, undefined, 'error'); + return; + } + $editArea.removeClass('edit_area_loading'); + $editArea.append(data.dropdown); + $editArea.append('
        ' + g.cellEditHint + '
        '); + }); // end $.post() + + $editArea.show(); + $editArea.on('change', 'select', function () { + $(g.cEdit).find('.edit_box').val($(this).val()); + }); + } else if ($td.is('.set')) { + // handle set fields + $editArea.addClass('edit_area_loading'); + + // if the data is truncated, get the full data + if ($td.is('.truncated')) { + postParams = { + 'ajax_request': true, + 'server': g.server, + 'db': g.db, + 'table': g.table, + 'column': fieldName, + 'curr_value': currValue, + 'get_full_values': true, + 'where_clause': whereClause + }; + } else { + postParams = { + 'ajax_request': true, + 'server': g.server, + 'db': g.db, + 'table': g.table, + 'column': fieldName, + 'curr_value': currValue + }; + } + + g.lastXHR = $.post('index.php?route=/sql/get-set-values', postParams, function (data) { + g.lastXHR = null; + if (typeof data === 'object' && data.success === false) { + Functions.ajaxShowMessage(data.error, undefined, 'error'); + return; + } + $editArea.removeClass('edit_area_loading'); + $editArea.append(data.select); + $td.data('original_data', $(data.select).val().join()); + $editArea.append('
        ' + g.cellEditHint + '
        '); + }); // end $.post() + + $editArea.show(); + $editArea.on('change', 'select', function () { + $(g.cEdit).find('.edit_box').val($(this).val()); + }); + } else if ($td.is('.truncated, .transformed')) { + if ($td.is('.to_be_saved')) { // cell has been edited + var value = $td.data('value'); + $(g.cEdit).find('.edit_box').val(value); + $editArea.append(''); + $editArea.find('textarea').val(value); + $editArea + .on('keyup', 'textarea', function () { + $(g.cEdit).find('.edit_box').val($(this).val()); + }); + $(g.cEdit).on('keyup', '.edit_box', function () { + $editArea.find('textarea').val($(this).val()); + }); + $editArea.append('
        ' + g.cellEditHint + '
        '); + } else { + // handle truncated/transformed values values + $editArea.addClass('edit_area_loading'); + + // initialize the original data + $td.data('original_data', null); + + /** + * @var sqlQuery String containing the SQL query used to retrieve value of truncated/transformed data + */ + var sqlQuery = 'SELECT `' + fieldName + '` FROM `' + g.table + '` WHERE ' + whereClause; + + // Make the Ajax call and get the data, wrap it and insert it + g.lastXHR = $.post('index.php?route=/sql', { + 'server' : g.server, + 'db' : g.db, + 'ajax_request' : true, + 'sql_query' : sqlQuery, + 'grid_edit' : true + }, function (data) { + g.lastXHR = null; + $editArea.removeClass('edit_area_loading'); + if (typeof data !== 'undefined' && data.success === true) { + if ($td.attr('data-type') === 'json') { + try { + data.value = JSON.stringify(JSON.parse(data.value), null, 4); + } catch (e) { + // Show as is + } + } + $td.data('original_data', data.value); + $(g.cEdit).find('.edit_box').val(data.value); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); // end $.post() + } + g.isEditCellTextEditable = true; + } else if ($td.is('.timefield, .datefield, .datetimefield, .timestampfield')) { + var $inputField = $(g.cEdit).find('.edit_box'); + + // remember current datetime value in $input_field, if it is not null + var datetimeValue = !isNull ? $inputField.val() : ''; + + var showMillisec = false; + var showMicrosec = false; + var timeFormat = 'HH:mm:ss'; + // check for decimal places of seconds + if (($td.attr('data-decimals') > 0) && ($td.attr('data-type').indexOf('time') !== -1)) { + if (datetimeValue && datetimeValue.indexOf('.') === false) { + datetimeValue += '.'; + } + if ($td.attr('data-decimals') > 3) { + showMillisec = true; + showMicrosec = true; + timeFormat = 'HH:mm:ss.lc'; + + if (datetimeValue) { + datetimeValue += '000000'; + datetimeValue = datetimeValue.substring(0, datetimeValue.indexOf('.') + 7); + $inputField.val(datetimeValue); + } + } else { + showMillisec = true; + timeFormat = 'HH:mm:ss.l'; + + if (datetimeValue) { + datetimeValue += '000'; + datetimeValue = datetimeValue.substring(0, datetimeValue.indexOf('.') + 4); + $inputField.val(datetimeValue); + } + } + } + + // add datetime picker + Functions.addDatepicker($inputField, $td.attr('data-type'), { + showMillisec: showMillisec, + showMicrosec: showMicrosec, + timeFormat: timeFormat, + firstDay: firstDayOfCalendar + }); + + $inputField.on('keyup', function (e) { + if (e.which === 13) { + // post on pressing "Enter" + e.preventDefault(); + e.stopPropagation(); + g.saveOrPostEditedCell(); + } else if (e.which !== 27) { + Functions.toggleDatepickerIfInvalid($td, $inputField); + } + }); + + $inputField.datepicker('show'); + Functions.toggleDatepickerIfInvalid($td, $inputField); + + // unbind the mousedown event to prevent the problem of + // datepicker getting closed, needs to be checked for any + // change in names when updating + // eslint-disable-next-line no-underscore-dangle + $(document).off('mousedown', $.datepicker._checkExternalClick); + + // move ui-datepicker-div inside cEdit div + var datepickerDiv = $('#ui-datepicker-div'); + datepickerDiv.css({ 'top': 0, 'left': 0, 'position': 'relative' }); + $(g.cEdit).append(datepickerDiv); + + // cancel any click on the datepicker element + $editArea.find('> *').on('click', function (e) { + e.stopPropagation(); + }); + + g.isEditCellTextEditable = true; + } else { + g.isEditCellTextEditable = true; + // only append edit area hint if there is a null checkbox + if ($editArea.children().length > 0) { + $editArea.append('
        ' + g.cellEditHint + '
        '); + } + } + if ($editArea.children().length > 0) { + $editArea.show(); + } + } + }, + + /** + * Post the content of edited cell. + * + * @param options Optional, this object contains a boolean named move (true, if called from move* functions) + * and a to which the grid_edit should move + */ + postEditedCell: function (options) { + if (g.isSaving) { + return; + } + g.isSaving = true; + /** + * @var relationFields Array containing the name/value pairs of relational fields + */ + var relationFields = {}; + /** + * @var relationalDisplay string 'K' if relational key, 'D' if relational display column + */ + var relationalDisplay = $(g.o).find('input[name=relational_display]:checked').val(); + /** + * @var transformFields Array containing the name/value pairs for transformed fields + */ + var transformFields = {}; + /** + * @var transformationFields Boolean, if there are any transformed fields in the edited cells + */ + var transformationFields = false; + /** + * @var fullSqlQuery String containing the complete SQL query to update this table + */ + var fullSqlQuery = ''; + /** + * @var relFieldsList String, url encoded representation of {@link relations_fields} + */ + var relFieldsList = ''; + /** + * @var transformFieldsList String, url encoded representation of {@link transformFields} + */ + var transformFieldsList = ''; + /** + * @var fullWhereClause Array containing where clause for updated fields + */ + var fullWhereClause = []; + /** + * @var isUnique Boolean, whether the rows in this table is unique or not + */ + var isUnique = $(g.t).find('td.edit_row_anchor').is('.nonunique') ? 0 : 1; + /** + * multi edit variables + */ + var multiEditFieldsName = []; + var multiEditFieldsType = []; + var multiEditFields = []; + var multiEditFieldsNull = []; + + // alert user if edited table is not unique + if (!isUnique) { + alert(g.alertNonUnique); + } + + // loop each edited row + $(g.t).find('td.to_be_saved').parents('tr').each(function () { + var $tr = $(this); + var whereClause = $tr.find('.where_clause').val(); + if (typeof whereClause === 'undefined') { + whereClause = ''; + } + fullWhereClause.push(whereClause); + var conditionArray = JSON.parse($tr.find('.condition_array').val()); + + /** + * multi edit variables, for current row + * @TODO array indices are still not correct, they should be md5 of field's name + */ + var fieldsName = []; + var fieldsType = []; + var fields = []; + var fieldsNull = []; + + // loop each edited cell in a row + $tr.find('.to_be_saved').each(function () { + /** + * @var $thisField Object referring to the td that is being edited + */ + var $thisField = $(this); + + /** + * @var fieldName String containing the name of this field. + * @see Sql.getFieldName() + */ + var fieldName = Sql.getFieldName($(g.t), $thisField); + + /** + * @var thisFieldParams Array temporary storage for the name/value of current field + */ + var thisFieldParams = {}; + + if ($thisField.is('.transformed')) { + transformationFields = true; + } + thisFieldParams[fieldName] = $thisField.data('value'); + + /** + * @var isNull String capturing whether 'checkbox_null__' is checked. + */ + var isNull = thisFieldParams[fieldName] === null; + + fieldsName.push(fieldName); + + if (isNull) { + fieldsNull.push('on'); + fields.push(''); + } else { + if ($thisField.is('.bit')) { + fieldsType.push('bit'); + } else if ($thisField.hasClass('hex')) { + fieldsType.push('hex'); + } + fieldsNull.push(''); + fields.push($thisField.data('value')); + + var cellIndex = $thisField.index('.to_be_saved'); + if ($thisField.is(':not(.relation, .enum, .set, .bit)')) { + if ($thisField.is('.transformed')) { + transformFields[cellIndex] = {}; + $.extend(transformFields[cellIndex], thisFieldParams); + } + } else if ($thisField.is('.relation')) { + relationFields[cellIndex] = {}; + $.extend(relationFields[cellIndex], thisFieldParams); + } + } + // check if edited field appears in WHERE clause + if (whereClause.indexOf(Sql.urlEncode(fieldName)) > -1) { + var fieldStr = '`' + g.table + '`.' + '`' + fieldName + '`'; + for (var field in conditionArray) { + if (field.indexOf(fieldStr) > -1) { + conditionArray[field] = isNull ? 'IS NULL' : '= \'' + thisFieldParams[fieldName].replace(/'/g, '\'\'') + '\''; + break; + } + } + } + }); // end of loop for every edited cells in a row + + // save new_clause + var newClause = ''; + for (var field in conditionArray) { + newClause += field + ' ' + conditionArray[field] + ' AND '; + } + newClause = newClause.substring(0, newClause.length - 5); // remove the last AND + $tr.data('new_clause', newClause); + // save condition_array + $tr.find('.condition_array').val(JSON.stringify(conditionArray)); + + multiEditFieldsName.push(fieldsName); + multiEditFieldsType.push(fieldsType); + multiEditFields.push(fields); + multiEditFieldsNull.push(fieldsNull); + }); // end of loop for every edited rows + + relFieldsList = $.param(relationFields); + transformFieldsList = $.param(transformFields); + + // Make the Ajax post after setting all parameters + /** + * @var postParams Object containing parameters for the POST request + */ + var postParams = { 'ajax_request' : true, + 'sql_query' : fullSqlQuery, + 'server' : g.server, + 'db' : g.db, + 'table' : g.table, + 'clause_is_unique' : isUnique, + 'where_clause' : fullWhereClause, + 'fields[multi_edit]' : multiEditFields, + 'fields_name[multi_edit]' : multiEditFieldsName, + 'fields_type[multi_edit]' : multiEditFieldsType, + 'fields_null[multi_edit]' : multiEditFieldsNull, + 'rel_fields_list' : relFieldsList, + 'do_transformations' : transformationFields, + 'transform_fields_list' : transformFieldsList, + 'relational_display' : relationalDisplay, + 'goto' : encodeURIComponent('index.php?route=/sql'), + 'submit_type' : 'save' + }; + + if (!g.saveCellsAtOnce) { + $(g.cEdit).find('*').prop('disabled', true); + $(g.cEdit).find('.edit_box').addClass('edit_box_posting'); + } else { + $(g.o).find('div.save_edited').addClass('saving_edited_data') + .find('input').prop('disabled', true); // disable the save button + } + + $.ajax({ + type: 'POST', + url: 'index.php?route=/table/replace', + data: postParams, + success: + function (data) { + g.isSaving = false; + if (!g.saveCellsAtOnce) { + $(g.cEdit).find('*').prop('disabled', false); + $(g.cEdit).find('.edit_box').removeClass('edit_box_posting'); + } else { + $(g.o).find('div.save_edited').removeClass('saving_edited_data') + .find('input').prop('disabled', false); // enable the save button back + } + if (typeof data !== 'undefined' && data.success === true) { + if (typeof options === 'undefined' || ! options.move) { + Functions.ajaxShowMessage(data.message); + } + + // update where_clause related data in each edited row + $(g.t).find('td.to_be_saved').parents('tr').each(function () { + var newClause = $(this).data('new_clause'); + var $whereClause = $(this).find('.where_clause'); + var oldClause = $whereClause.val(); + var decodedOldClause = oldClause; + var decodedNewClause = newClause; + + $whereClause.val(newClause); + // update Edit, Copy, and Delete links also + $(this).find('a').each(function () { + $(this).attr('href', $(this).attr('href').replace(oldClause, newClause)); + // update delete confirmation in Delete link + if ($(this).attr('href').indexOf('DELETE') > -1) { + $(this).removeAttr('onclick') + .off('click') + .on('click', function () { + return Functions.confirmLink(this, 'DELETE FROM `' + g.db + '`.`' + g.table + '` WHERE ' + + decodedNewClause + (isUnique ? '' : ' LIMIT 1')); + }); + } + }); + // update the multi edit checkboxes + $(this).find('input[type=checkbox]').each(function () { + var $checkbox = $(this); + var checkboxName = $checkbox.attr('name'); + var checkboxValue = $checkbox.val(); + + $checkbox.attr('name', checkboxName.replace(oldClause, newClause)); + $checkbox.val(checkboxValue.replace(decodedOldClause, decodedNewClause)); + }); + }); + // update the display of executed SQL query command + if (typeof data.sql_query !== 'undefined') { + // extract query box + var $resultQuery = $($.parseHTML(data.sql_query)); + var sqlOuter = $resultQuery.find('.sqlOuter').wrap('

        ').parent().html(); + var tools = $resultQuery.find('.tools').wrap('

        ').parent().html(); + // sqlOuter and tools will not be present if 'Show SQL queries' configuration is off + if (typeof sqlOuter !== 'undefined' && typeof tools !== 'undefined') { + $(g.o).find('.result_query').not($(g.o).find('.result_query').last()).remove(); + var $existingQuery = $(g.o).find('.result_query'); + // If two query box exists update query in second else add a second box + if ($existingQuery.find('div.sqlOuter').length > 1) { + $existingQuery.children().eq(3).remove(); + $existingQuery.children().eq(3).remove(); + $existingQuery.append(sqlOuter + tools); + } else { + $existingQuery.append(sqlOuter + tools); + } + Functions.highlightSql($existingQuery); + } + } + // hide and/or update the successfully saved cells + g.hideEditCell(true, data); + + // remove the "Save edited cells" button + $(g.o).find('div.save_edited').hide(); + // update saved fields + $(g.t).find('.to_be_saved') + .removeClass('to_be_saved') + .data('value', null) + .data('original_data', null); + + g.isCellEdited = false; + } else { + Functions.ajaxShowMessage(data.error, false); + if (!g.saveCellsAtOnce) { + $(g.t).find('.to_be_saved') + .removeClass('to_be_saved'); + } + } + } + }).done(function () { + if (options !== undefined && options.move) { + g.showEditCell(options.cell); + } + }); // end $.ajax() + }, + + /** + * Save edited cell, so it can be posted later. + * + * @return {bool} + */ + saveEditedCell: function () { + /** + * @var $thisField Object referring to the td that is being edited + */ + var $thisField = $(g.currentEditCell); + var $testElement = ''; // to test the presence of a element + + var needToPost = false; + + /** + * @var fieldName String containing the name of this field. + * @see Sql.getFieldName() + */ + var fieldName = Sql.getFieldName($(g.t), $thisField); + + /** + * @var thisFieldParams Array temporary storage for the name/value of current field + */ + var thisFieldParams = {}; + + /** + * @var isNull String capturing whether 'checkbox_null__' is checked. + */ + var isNull = $(g.cEdit).find('input:checkbox').is(':checked'); + + if ($(g.cEdit).find('.edit_area').is('.edit_area_loading')) { + // the edit area is still loading (retrieving cell data), no need to post + needToPost = false; + } else if (isNull) { + if (!g.wasEditedCellNull) { + thisFieldParams[fieldName] = null; + needToPost = true; + } + } else { + if ($thisField.is('.bit')) { + thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); + } else if ($thisField.is('.set')) { + $testElement = $(g.cEdit).find('select'); + thisFieldParams[fieldName] = $testElement.map(function () { + return $(this).val(); + }).get().join(','); + } else if ($thisField.is('.relation, .enum')) { + // for relation and enumeration, take the results from edit box value, + // because selected value from drop-down, new window or multiple + // selection list will always be updated to the edit box + thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); + } else if ($thisField.hasClass('hex')) { + if ($(g.cEdit).find('.edit_box').val().match(/^(0x)?[a-f0-9]*$/i) !== null) { + thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); + } else { + var hexError = '

        '; + Functions.ajaxShowMessage(hexError, false); + thisFieldParams[fieldName] = Functions.getCellValue(g.currentEditCell); + } + } else { + thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); + } + if (g.wasEditedCellNull || thisFieldParams[fieldName] !== Functions.getCellValue(g.currentEditCell)) { + needToPost = true; + } + } + + if (needToPost) { + $(g.currentEditCell).addClass('to_be_saved') + .data('value', thisFieldParams[fieldName]); + if (g.saveCellsAtOnce) { + $(g.o).find('div.save_edited').show(); + } + g.isCellEdited = true; + } + + return needToPost; + }, + + /** + * Save or post currently edited cell, depending on the "saveCellsAtOnce" configuration. + * + * @param options Optional, this object contains a boolean named move (true, if called from move* functions) + * and a to which the grid_edit should move + */ + saveOrPostEditedCell: function (options) { + var saved = g.saveEditedCell(); + // Check if $cfg['SaveCellsAtOnce'] is false + if (!g.saveCellsAtOnce) { + // Check if need_to_post is true + if (saved) { + // Check if this function called from 'move' functions + if (options !== undefined && options.move) { + g.postEditedCell(options); + } else { + g.postEditedCell(); + } + // need_to_post is false + } else { + // Check if this function called from 'move' functions + if (options !== undefined && options.move) { + g.hideEditCell(true); + g.showEditCell(options.cell); + // NOT called from 'move' functions + } else { + g.hideEditCell(true); + } + } + // $cfg['SaveCellsAtOnce'] is true + } else { + // If need_to_post + if (saved) { + // If this function called from 'move' functions + if (options !== undefined && options.move) { + g.hideEditCell(true, true, false, options); + g.showEditCell(options.cell); + // NOT called from 'move' functions + } else { + g.hideEditCell(true, true); + } + } else { + // If this function called from 'move' functions + if (options !== undefined && options.move) { + g.hideEditCell(true, false, false, options); + g.showEditCell(options.cell); + // NOT called from 'move' functions + } else { + g.hideEditCell(true); + } + } + } + }, + + /** + * Initialize column resize feature. + */ + initColResize: function () { + // create column resizer div + g.cRsz = document.createElement('div'); + g.cRsz.className = 'cRsz'; + + // get data columns in the first row of the table + var $firstRowCols = $(g.t).find('tr').first().find('th.draggable'); + + // create column borders + $firstRowCols.each(function () { + var cb = document.createElement('div'); // column border + $(cb).addClass('colborder') + .on('mousedown', function (e) { + g.dragStartRsz(e, this); + }); + $(g.cRsz).append(cb); + }); + g.reposRsz(); + + // attach to global div + $(g.gDiv).prepend(g.cRsz); + }, + + /** + * Initialize column reordering feature. + */ + initColReorder: function () { + g.cCpy = document.createElement('div'); // column copy, to store copy of dragged column header + g.cPointer = document.createElement('div'); // column pointer, used when reordering column + + // adjust g.cCpy + g.cCpy.className = 'cCpy'; + $(g.cCpy).hide(); + + // adjust g.cPointer + g.cPointer.className = 'cPointer'; + $(g.cPointer).css('visibility', 'hidden'); // set visibility to hidden instead of calling hide() to force browsers to cache the image in cPointer class + + // assign column reordering hint + g.reorderHint = Messages.strColOrderHint; + + // get data columns in the first row of the table + var $firstRowCols = $(g.t).find('tr').first().find('th.draggable'); + + // initialize column order + var $colOrder = $(g.o).find('.col_order'); // check if column order is passed from PHP + var i; + if ($colOrder.length > 0) { + g.colOrder = $colOrder.val().split(','); + for (i = 0; i < g.colOrder.length; i++) { + g.colOrder[i] = parseInt(g.colOrder[i], 10); + } + } else { + g.colOrder = []; + for (i = 0; i < $firstRowCols.length; i++) { + g.colOrder.push(i); + } + } + + // register events + $(g.t).find('th.draggable') + .on('mousedown', function (e) { + $(g.o).addClass('turnOffSelect'); + if (g.visibleHeadersCount > 1) { + g.dragStartReorder(e, this); + } + }) + .on('mouseenter', function () { + if (g.visibleHeadersCount > 1) { + $(this).css('cursor', 'move'); + } else { + $(this).css('cursor', 'inherit'); + } + }) + .on('mouseleave', function () { + g.showReorderHint = false; + $(this).uiTooltip('option', { + content: g.updateHint() + }); + }) + .on('dblclick', function (e) { + e.preventDefault(); + var res = Functions.copyToClipboard($(this).data('column')); + if (res) { + Functions.ajaxShowMessage(Messages.strCopyColumnSuccess, false, 'success'); + } else { + Functions.ajaxShowMessage(Messages.strCopyColumnFailure, false, 'error'); + } + }); + $(g.t).find('th.draggable a') + .on('dblclick', function (e) { + e.stopPropagation(); + }); + // restore column order when the restore button is clicked + $(g.o).find('div.restore_column').on('click', function () { + g.restoreColOrder(); + }); + + // attach to global div + $(g.gDiv).append(g.cPointer); + $(g.gDiv).append(g.cCpy); + + // prevent default "dragstart" event when dragging a link + $(g.t).find('th a').on('dragstart', function () { + return false; + }); + + // refresh the restore column button state + g.refreshRestoreButton(); + }, + + /** + * Initialize column visibility feature. + */ + initColVisib: function () { + g.cDrop = document.createElement('div'); // column drop-down arrows + g.cList = document.createElement('div'); // column visibility list + + // adjust g.cDrop + g.cDrop.className = 'cDrop'; + + // adjust g.cList + g.cList.className = 'cList'; + $(g.cList).hide(); + + // assign column visibility related hints + g.showAllColText = Messages.strShowAllCol; + + // get data columns in the first row of the table + var $firstRowCols = $(g.t).find('tr').first().find('th.draggable'); + + var i; + // initialize column visibility + var $colVisib = $(g.o).find('.col_visib'); // check if column visibility is passed from PHP + if ($colVisib.length > 0) { + g.colVisib = $colVisib.val().split(','); + for (i = 0; i < g.colVisib.length; i++) { + g.colVisib[i] = parseInt(g.colVisib[i], 10); + } + } else { + g.colVisib = []; + for (i = 0; i < $firstRowCols.length; i++) { + g.colVisib.push(1); + } + } + + // make sure we have more than one column + if ($firstRowCols.length > 1) { + var $colVisibTh = $(g.t).find('th:not(.draggable)').slice(0, 1); + Functions.tooltip( + $colVisibTh, + 'th', + Messages.strColVisibHint + ); + + // create column visibility drop-down arrow(s) + $colVisibTh.each(function () { + var cd = document.createElement('div'); // column drop-down arrow + $(cd).addClass('coldrop') + .on('click', function () { + if (g.cList.style.display === 'none') { + g.showColList(this); + } else { + g.hideColList(); + } + }); + $(g.cDrop).append(cd); + }); + + // add column visibility control + g.cList.innerHTML = '
        '; + var $listDiv = $(g.cList).find('div'); + + var tempClick = function () { + if (g.toggleCol($(this).index())) { + g.afterToggleCol(); + } + }; + + for (i = 0; i < $firstRowCols.length; i++) { + var currHeader = $firstRowCols[i]; + var listElmt = document.createElement('div'); + $(listElmt).text($(currHeader).text()) + .prepend(''); + $listDiv.append(listElmt); + // add event on click + $(listElmt).on('click', tempClick); + } + // add "show all column" button + var showAll = document.createElement('div'); + $(showAll).addClass('showAllColBtn') + .text(g.showAllColText); + $(g.cList).append(showAll); + $(showAll).on('click', function () { + g.showAllColumns(); + }); + // prepend "show all column" button at top if the list is too long + if ($firstRowCols.length > 10) { + var clone = showAll.cloneNode(true); + $(g.cList).prepend(clone); + $(clone).on('click', function () { + g.showAllColumns(); + }); + } + } + + // hide column visibility list if we move outside the list + $(g.t).find('td, th.draggable').on('mouseenter', function () { + g.hideColList(); + }); + + // attach to first row first col of the grid + var thFirst = $(g.t).find('th.d-print-none'); + $(thFirst).append(g.cDrop); + $(thFirst).append(g.cList); + + // some adjustment + g.reposDrop(); + }, + + /** + * Move currently Editing Cell to Up + * + * @param e + * + */ + moveUp: function (e) { + e.preventDefault(); + var $thisField = $(g.currentEditCell); + var fieldName = Sql.getFieldName($(g.t), $thisField); + + var whereClause = $thisField.parents('tr').first().find('.where_clause').val(); + if (typeof whereClause === 'undefined') { + whereClause = ''; + } + var found = false; + var $prevRow; + + $thisField.parents('tr').first().parents('tbody').children().each(function () { + if ($(this).find('.where_clause').val() === whereClause) { + found = true; + } + if (!found) { + $prevRow = $(this); + } + }); + + var newCell; + + if (found && $prevRow) { + $prevRow.children('td').each(function () { + if (Sql.getFieldName($(g.t), $(this)) === fieldName) { + newCell = this; + } + }); + } + + if (newCell) { + g.hideEditCell(false, false, false, { move : true, cell : newCell }); + } + }, + + /** + * Move currently Editing Cell to Down + * + * @param e + * + */ + moveDown: function (e) { + e.preventDefault(); + + var $thisField = $(g.currentEditCell); + var fieldName = Sql.getFieldName($(g.t), $thisField); + + var whereClause = $thisField.parents('tr').first().find('.where_clause').val(); + if (typeof whereClause === 'undefined') { + whereClause = ''; + } + var found = false; + var $nextRow; + var j = 0; + var nextRowFound = false; + $thisField.parents('tr').first().parents('tbody').children().each(function () { + if ($(this).find('.where_clause').val() === whereClause) { + found = true; + } + if (found) { + if (j >= 1 && ! nextRowFound) { + $nextRow = $(this); + nextRowFound = true; + } else { + j++; + } + } + }); + + var newCell; + if (found && $nextRow) { + $nextRow.children('td').each(function () { + if (Sql.getFieldName($(g.t), $(this)) === fieldName) { + newCell = this; + } + }); + } + + if (newCell) { + g.hideEditCell(false, false, false, { move : true, cell : newCell }); + } + }, + + /** + * Move currently Editing Cell to Left + * + * @param e + * + */ + moveLeft: function (e) { + e.preventDefault(); + + var $thisField = $(g.currentEditCell); + var fieldName = Sql.getFieldName($(g.t), $thisField); + + var whereClause = $thisField.parents('tr').first().find('.where_clause').val(); + if (typeof whereClause === 'undefined') { + whereClause = ''; + } + var found = false; + var $foundRow; + $thisField.parents('tr').first().parents('tbody').children().each(function () { + if ($(this).find('.where_clause').val() === whereClause) { + found = true; + $foundRow = $(this); + } + }); + + var leftCell; + var cellFound = false; + if (found) { + $foundRow.children('td.grid_edit').each(function () { + if (Sql.getFieldName($(g.t), $(this)) === fieldName) { + cellFound = true; + } + if (!cellFound) { + leftCell = this; + } + }); + } + + if (leftCell) { + g.hideEditCell(false, false, false, { move : true, cell : leftCell }); + } + }, + + /** + * Move currently Editing Cell to Right + * + * @param e + * + */ + moveRight: function (e) { + e.preventDefault(); + + var $thisField = $(g.currentEditCell); + var fieldName = Sql.getFieldName($(g.t), $thisField); + + var whereClause = $thisField.parents('tr').first().find('.where_clause').val(); + if (typeof whereClause === 'undefined') { + whereClause = ''; + } + var found = false; + var $foundRow; + var j = 0; + $thisField.parents('tr').first().parents('tbody').children().each(function () { + if ($(this).find('.where_clause').val() === whereClause) { + found = true; + $foundRow = $(this); + } + }); + + var rightCell; + var cellFound = false; + var nextCellFound = false; + if (found) { + $foundRow.children('td.grid_edit').each(function () { + if (Sql.getFieldName($(g.t), $(this)) === fieldName) { + cellFound = true; + } + if (cellFound) { + if (j >= 1 && ! nextCellFound) { + rightCell = this; + nextCellFound = true; + } else { + j++; + } + } + }); + } + + if (rightCell) { + g.hideEditCell(false, false, false, { move : true, cell : rightCell }); + } + }, + + /** + * Initialize grid editing feature. + */ + initGridEdit: function () { + function startGridEditing (e, cell) { + if (g.isCellEditActive) { + g.saveOrPostEditedCell(); + } else { + g.showEditCell(cell); + } + e.stopPropagation(); + } + + function handleCtrlNavigation (e) { + if ((e.ctrlKey && e.which === 38) || (e.altKey && e.which === 38)) { + g.moveUp(e); + } else if ((e.ctrlKey && e.which === 40) || (e.altKey && e.which === 40)) { + g.moveDown(e); + } else if ((e.ctrlKey && e.which === 37) || (e.altKey && e.which === 37)) { + g.moveLeft(e); + } else if ((e.ctrlKey && e.which === 39) || (e.altKey && e.which === 39)) { + g.moveRight(e); + } + } + + // create cell edit wrapper element + g.cEditStd = document.createElement('div'); + g.cEdit = g.cEditStd; + g.cEditTextarea = document.createElement('div'); + + // adjust g.cEditStd + g.cEditStd.className = 'cEdit'; + $(g.cEditStd).html('
        '); + $(g.cEditStd).hide(); + + // adjust g.cEdit + g.cEditTextarea.className = 'cEdit'; + $(g.cEditTextarea).html('
        '); + $(g.cEditTextarea).hide(); + + // assign cell editing hint + g.cellEditHint = Messages.strCellEditHint; + g.saveCellWarning = Messages.strSaveCellWarning; + g.alertNonUnique = Messages.strAlertNonUnique; + g.gotoLinkText = Messages.strGoToLink; + + // initialize cell editing configuration + g.saveCellsAtOnce = $(g.o).find('.save_cells_at_once').val(); + g.maxTruncatedLen = CommonParams.get('LimitChars'); + + // register events + $(g.t).find('td.data.click1') + .on('click', function (e) { + startGridEditing(e, this); + // prevent default action when clicking on "link" in a table + if ($(e.target).is('.grid_edit a')) { + e.preventDefault(); + } + }); + + $(g.t).find('td.data.click2') + .on('click', function (e) { + var $cell = $(this); + // In the case of relational link, We want single click on the link + // to goto the link and double click to start grid-editing. + var $link = $(e.target); + if ($link.is('.grid_edit.relation a')) { + e.preventDefault(); + // get the click count and increase + var clicks = $cell.data('clicks'); + clicks = (typeof clicks === 'undefined') ? 1 : clicks + 1; + + if (clicks === 1) { + // if there are no previous clicks, + // start the single click timer + var timer = setTimeout(function () { + // temporarily remove ajax class so the page loader will not handle it, + // submit and then add it back + $link.removeClass('ajax'); + AJAX.requestHandler.call($link[0]); + $link.addClass('ajax'); + $cell.data('clicks', 0); + }, 700); + $cell.data('clicks', clicks); + $cell.data('timer', timer); + } else {// When double clicking a link, switch to edit mode + // this is a double click, cancel the single click timer + // and make the click count 0 + clearTimeout($cell.data('timer')); + $cell.data('clicks', 0); + // start grid-editing + startGridEditing(e, this); + } + } + }) + .on('dblclick', function (e) { + if ($(e.target).is('.grid_edit a')) { + e.preventDefault(); + } else { + startGridEditing(e, this); + } + }); + + $(g.cEditStd).on('keydown', 'input.edit_box, select', handleCtrlNavigation); + + $(g.cEditStd).find('.edit_box').on('focus', function () { + g.showEditArea(); + }); + $(g.cEditStd).on('keydown', '.edit_box, select', function (e) { + if (e.which === 13) { + // post on pressing "Enter" + e.preventDefault(); + g.saveOrPostEditedCell(); + } + }); + $(g.cEditStd).on('keydown', function (e) { + if (!g.isEditCellTextEditable) { + // prevent text editing + e.preventDefault(); + } + }); + + $(g.cEditTextarea).on('keydown', 'textarea.edit_box, select', handleCtrlNavigation); + + $(g.cEditTextarea).find('.edit_box').on('focus', function () { + g.showEditArea(); + }); + $(g.cEditTextarea).on('keydown', '.edit_box, select', function (e) { + if (e.which === 13 && !e.shiftKey) { + // post on pressing "Enter" + e.preventDefault(); + g.saveOrPostEditedCell(); + } + }); + $(g.cEditTextarea).on('keydown', function (e) { + if (!g.isEditCellTextEditable) { + // prevent text editing + e.preventDefault(); + } + }); + $('html').on('click', function (e) { + // hide edit cell if the click is not fromDat edit area + if ($(e.target).parents().index($(g.cEdit)) === -1 && + !$(e.target).parents('.ui-datepicker-header').length && + !$('.browse_foreign_modal.ui-dialog:visible').length && + !$(e.target).closest('.dismissable').length + ) { + g.hideEditCell(); + } + }).on('keydown', function (e) { + if (e.which === 27 && g.isCellEditActive) { + // cancel on pressing "Esc" + g.hideEditCell(true); + } + }); + $(g.o).find('div.save_edited').on('click', function () { + g.hideEditCell(); + g.postEditedCell(); + }); + $(window).on('beforeunload', function () { + if (g.isCellEdited) { + return g.saveCellWarning; + } + }); + + // attach to global div + $(g.gDiv).append(g.cEditStd); + $(g.gDiv).append(g.cEditTextarea); + + // add hint for grid editing feature when hovering "Edit" link in each table row + if (Messages.strGridEditFeatureHint !== undefined) { + Functions.tooltip( + $(g.t).find('.edit_row_anchor a'), + 'a', + Messages.strGridEditFeatureHint + ); + } + } + }; + + /** **************** + * Initialize grid + ******************/ + + // wrap all truncated data cells with span indicating the original length + // todo update the original length after a grid edit + $(t).find('td.data.truncated:not(:has(span))') + .wrapInner(function () { + return ''; + }); + + // wrap remaining cells, except actions cell, with span + $(t).find('th, td:not(:has(span))') + .wrapInner(''); + + // create grid elements + g.gDiv = document.createElement('div'); // create global div + + // initialize the table variable + g.t = t; + + // enclosing .sqlqueryresults div + g.o = $(t).parents('.sqlqueryresults'); + + // get data columns in the first row of the table + var $firstRowCols = $(t).find('tr').first().find('th.draggable'); + + // initialize visible headers count + g.visibleHeadersCount = $firstRowCols.filter(':visible').length; + + // assign first column (actions) span + if (! $(t).find('tr').first().find('th').first().hasClass('draggable')) { // action header exist + g.actionSpan = $(t).find('tr').first().find('th').first().prop('colspan'); + } else { + g.actionSpan = 0; + } + + // assign table create time + // table_create_time will only available if we are in "Browse" tab + g.tableCreateTime = $(g.o).find('.table_create_time').val(); + + // assign the hints + g.sortHint = Messages.strSortHint; + g.strMultiSortHint = Messages.strMultiSortHint; + g.markHint = Messages.strColMarkHint; + g.copyHint = Messages.strColNameCopyHint; + + // assign common hidden inputs + var $commonHiddenInputs = $(g.o).find('div.common_hidden_inputs'); + g.server = $commonHiddenInputs.find('input[name=server]').val(); + g.db = $commonHiddenInputs.find('input[name=db]').val(); + g.table = $commonHiddenInputs.find('input[name=table]').val(); + + // add table class + $(t).addClass('pma_table'); + + // add relative position to global div so that resize handlers are correctly positioned + $(g.gDiv).css('position', 'relative'); + + // link the global div + $(t).before(g.gDiv); + $(g.gDiv).append(t); + + // FEATURES + if (isResizeEnabled) { + g.initColResize(); + } + // disable reordering for result from EXPLAIN or SHOW syntax, which do not have a table navigation panel + if (isReorderEnabled && + $(g.o).find('table.navigation').length > 0) { + g.initColReorder(); + } + if (isVisibEnabled) { + g.initColVisib(); + } + // make sure we have the ajax class + if (isGridEditEnabled && + $(t).is('.ajax')) { + g.initGridEdit(); + } + + // create tooltip for each with draggable class + Functions.tooltip( + $(t).find('th.draggable'), + 'th', + g.updateHint() + ); + + // register events for hint tooltip (anchors inside draggable th) + $(t).find('th.draggable a') + .on('mouseenter', function () { + g.showSortHint = true; + g.showMultiSortHint = true; + $(t).find('th.draggable').uiTooltip('option', { + content: g.updateHint() + }); + }) + .on('mouseleave', function () { + g.showSortHint = false; + g.showMultiSortHint = false; + $(t).find('th.draggable').uiTooltip('option', { + content: g.updateHint() + }); + }); + + // register events for dragging-related feature + if (isResizeEnabled || isReorderEnabled) { + $(document).on('mousemove', function (e) { + g.dragMove(e); + }); + $(document).on('mouseup', function (e) { + $(g.o).removeClass('turnOffSelect'); + g.dragEnd(e); + }); + } + + // some adjustment + $(t).removeClass('data'); + $(g.gDiv).addClass('data'); +}; + +/** + * jQuery plugin to cancel selection in HTML code. + */ +(function ($) { + $.fn.noSelect = function (p) { // no select plugin by Paulo P.Marinas + var prevent = (p === null) ? true : p; + /* eslint-disable compat/compat */ + var isMsie = navigator.userAgent.indexOf('MSIE') > -1 || !!window.navigator.userAgent.match(/Trident.*rv:11\./); + var isFirefox = navigator.userAgent.indexOf('Firefox') > -1; + var isSafari = navigator.userAgent.indexOf('Safari') > -1; + var isOpera = navigator.userAgent.indexOf('Presto') > -1; + /* eslint-enable compat/compat */ + if (prevent) { + return this.each(function () { + if (isMsie || isSafari) { + $(this).on('selectstart', false); + } else if (isFirefox) { + $(this).css('MozUserSelect', 'none'); + $('body').trigger('focus'); + } else if (isOpera) { + $(this).on('mousedown', false); + } else { + $(this).attr('unselectable', 'on'); + } + }); + } else { + return this.each(function () { + if (isMsie || isSafari) { + $(this).off('selectstart'); + } else if (isFirefox) { + $(this).css('MozUserSelect', 'inherit'); + } else if (isOpera) { + $(this).off('mousedown'); + } else { + $(this).removeAttr('unselectable'); + } + }); + } + }; // end noSelect +}(jQuery)); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/normalization.js b/Sources/php_script/script/phpMyAdmin/js/src/normalization.js new file mode 100644 index 0000000..a8c794b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/normalization.js @@ -0,0 +1,792 @@ +/** + * @fileoverview events handling from normalization page + * @name normalization + * + * @requires jQuery + */ + +// eslint-disable-next-line no-unused-vars +/* global centralColumnList:writable */ // js/functions.js + +/** + * AJAX scripts for normalization + * + */ + +var normalizeto = '1nf'; +var primaryKey; +var dataParsed = null; + +function appendHtmlColumnsList () { + $.post( + 'index.php?route=/normalization', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'getColumns': true + }, + function (data) { + if (data.success === true) { + $('select[name=makeAtomic]').html(data.message); + } + } + ); +} + +function goTo3NFStep1 (newTables) { + var tables = newTables; + if (Object.keys(tables).length === 1) { + tables = [CommonParams.get('table')]; + } + $.post( + 'index.php?route=/normalization', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'server': CommonParams.get('server'), + 'tables': tables, + 'step': '3.1' + }, function (data) { + $('#page_content').find('h3').html(Messages.str3NFNormalization); + $('#mainContent').find('legend').html(data.legendText); + $('#mainContent').find('h4').html(data.headText); + $('#mainContent').find('p').html(data.subText); + $('#mainContent').find('#extra').html(data.extra); + $('#extra').find('form').each(function () { + var formId = $(this).attr('id'); + var colName = $(this).data('colname'); + $('#' + formId + ' input[value=\'' + colName + '\']').next().remove(); + $('#' + formId + ' input[value=\'' + colName + '\']').remove(); + }); + $('#mainContent').find('#newCols').html(''); + $('.tblFooters').html(''); + + if (data.subText !== '') { + $('') + .attr({ + type: 'button', + value: Messages.strDone, + class: 'btn btn-primary' + }) + .on('click', function () { + processDependencies('', true); + }) + .appendTo('.tblFooters'); + } + } + ); +} + +function goTo2NFStep1 () { + $.post( + 'index.php?route=/normalization', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'step': '2.1' + }, function (data) { + $('#page_content h3').html(Messages.str2NFNormalization); + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(data.subText); + $('#mainContent #extra').html(data.extra); + $('#mainContent #newCols').html(''); + if (data.subText !== '') { + $('') + .attr({ + type: 'submit', + value: Messages.strDone, + class: 'btn btn-primary' + }) + .on('click', function () { + processDependencies(data.primary_key); + }) + .appendTo('.tblFooters'); + } else { + if (normalizeto === '3nf') { + $('#mainContent #newCols').html(Messages.strToNextStep); + setTimeout(function () { + goTo3NFStep1([CommonParams.get('table')]); + }, 3000); + } + } + }); +} + +function goToFinish1NF () { + if (normalizeto !== '1nf') { + goTo2NFStep1(); + return true; + } + $('#mainContent legend').html(Messages.strEndStep); + $('#mainContent h4').html( + '

        ' + Functions.sprintf(Messages.strFinishMsg, Functions.escapeHtml(CommonParams.get('table'))) + '

        ' + ); + $('#mainContent p').html(''); + $('#mainContent #extra').html(''); + $('#mainContent #newCols').html(''); + $('.tblFooters').html(''); +} + +// eslint-disable-next-line no-unused-vars +function goToStep4 () { + $.post( + 'index.php?route=/normalization', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'step4': true + }, function (data) { + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(data.subText); + $('#mainContent #extra').html(data.extra); + $('#mainContent #newCols').html(''); + $('.tblFooters').html(''); + for (var pk in primaryKey) { + $('#extra input[value=\'' + Functions.escapeJsString(primaryKey[pk]) + '\']').attr('disabled','disabled'); + } + } + ); +} + +function goToStep3 () { + $.post( + 'index.php?route=/normalization', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'step3': true + }, function (data) { + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(data.subText); + $('#mainContent #extra').html(data.extra); + $('#mainContent #newCols').html(''); + $('.tblFooters').html(''); + primaryKey = JSON.parse(data.primary_key); + for (var pk in primaryKey) { + $('#extra input[value=\'' + Functions.escapeJsString(primaryKey[pk]) + '\']').attr('disabled','disabled'); + } + } + ); +} + +function goToStep2 (extra) { + $.post( + 'index.php?route=/normalization', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'step2': true + }, function (data) { + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(data.subText); + $('#mainContent #extra,#mainContent #newCols').html(''); + $('.tblFooters').html(''); + if (data.hasPrimaryKey === '1') { + if (extra === 'goToStep3') { + $('#mainContent h4').html(Messages.strPrimaryKeyAdded); + $('#mainContent p').html(Messages.strToNextStep); + } + if (extra === 'goToFinish1NF') { + goToFinish1NF(); + } else { + setTimeout(function () { + goToStep3(); + }, 3000); + } + } else { + // form to select columns to make primary + $('#mainContent #extra').html(data.extra); + } + } + ); +} + +function goTo2NFFinish (pd) { + var tables = {}; + for (var dependson in pd) { + tables[dependson] = $('#extra input[name="' + dependson + '"]').val(); + } + var datastring = { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'pd': JSON.stringify(pd), + 'newTablesName':JSON.stringify(tables), + 'createNewTables2NF':1 }; + $.ajax({ + type: 'POST', + url: 'index.php?route=/normalization', + data: datastring, + async:false, + success: function (data) { + if (data.success === true) { + if (data.queryError === false) { + if (normalizeto === '3nf') { + $('#pma_navigation_reload').trigger('click'); + goTo3NFStep1(tables); + return true; + } + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(''); + $('#mainContent #extra').html(''); + $('.tblFooters').html(''); + } else { + Functions.ajaxShowMessage(data.extra, false); + } + $('#pma_navigation_reload').trigger('click'); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); +} + +function goTo3NFFinish (newTables) { + for (var table in newTables) { + for (var newtbl in newTables[table]) { + var updatedname = $('#extra input[name="' + newtbl + '"]').val(); + newTables[table][updatedname] = newTables[table][newtbl]; + if (updatedname !== newtbl) { + delete newTables[table][newtbl]; + } + } + } + var datastring = { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'server': CommonParams.get('server'), + 'newTables':JSON.stringify(newTables), + 'createNewTables3NF':1 }; + $.ajax({ + type: 'POST', + url: 'index.php?route=/normalization', + data: datastring, + async:false, + success: function (data) { + if (data.success === true) { + if (data.queryError === false) { + $('#mainContent legend').html(data.legendText); + $('#mainContent h4').html(data.headText); + $('#mainContent p').html(''); + $('#mainContent #extra').html(''); + $('.tblFooters').html(''); + } else { + Functions.ajaxShowMessage(data.extra, false); + } + $('#pma_navigation_reload').trigger('click'); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); +} + +var backup = ''; + +function goTo2NFStep2 (pd, primaryKey) { + $('#newCols').html(''); + $('#mainContent legend').html(Messages.strStep + ' 2.2 ' + Messages.strConfirmPd); + $('#mainContent h4').html(Messages.strSelectedPd); + $('#mainContent p').html(Messages.strPdHintNote); + var extra = '
        '; + var pdFound = false; + for (var dependson in pd) { + if (dependson !== primaryKey) { + pdFound = true; + extra += '

        ' + Functions.escapeHtml(dependson) + ' -> ' + Functions.escapeHtml(pd[dependson].toString()) + '

        '; + } + } + if (!pdFound) { + extra += '

        ' + Messages.strNoPdSelected + '

        '; + extra += '
        '; + } else { + extra += '
        '; + var datastring = { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'pd': JSON.stringify(pd), + 'getNewTables2NF':1 }; + $.ajax({ + type: 'POST', + url: 'index.php?route=/normalization', + data: datastring, + async:false, + success: function (data) { + if (data.success === true) { + extra += data.message; + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); + } + $('#mainContent #extra').html(extra); + $('.tblFooters').html(''); + $('#goTo2NFFinish').on('click', function () { + goTo2NFFinish(pd); + }); +} + +function goTo3NFStep2 (pd, tablesTds) { + $('#newCols').html(''); + $('#mainContent legend').html(Messages.strStep + ' 3.2 ' + Messages.strConfirmTd); + $('#mainContent h4').html(Messages.strSelectedTd); + $('#mainContent p').html(Messages.strPdHintNote); + var extra = '
        '; + var pdFound = false; + for (var table in tablesTds) { + for (var i in tablesTds[table]) { + var dependson = tablesTds[table][i]; + if (dependson !== '' && dependson !== table) { + pdFound = true; + extra += '

        ' + Functions.escapeHtml(dependson) + ' -> ' + Functions.escapeHtml(pd[dependson].toString()) + '

        '; + } + } + } + if (!pdFound) { + extra += '

        ' + Messages.strNoTdSelected + '

        '; + extra += '
        '; + } else { + extra += '
        '; + var datastring = { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'tables': JSON.stringify(tablesTds), + 'server': CommonParams.get('server'), + 'pd': JSON.stringify(pd), + 'getNewTables3NF':1 }; + $.ajax({ + type: 'POST', + url: 'index.php?route=/normalization', + data: datastring, + async:false, + success: function (data) { + dataParsed = data; + if (data.success === true) { + extra += dataParsed.html; + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); + } + $('#mainContent #extra').html(extra); + $('.tblFooters').html(''); + $('#goTo3NFFinish').on('click', function () { + if (!pdFound) { + goTo3NFFinish([]); + } else { + goTo3NFFinish(dataParsed.newTables); + } + }); +} +function processDependencies (primaryKey, isTransitive) { + var pk = primaryKey; + var pd = {}; + var tablesTds = {}; + var dependsOn; + pd[pk] = []; + $('#extra form').each(function () { + var tblname; + if (isTransitive === true) { + tblname = $(this).data('tablename'); + pk = tblname; + if (!(tblname in tablesTds)) { + tablesTds[tblname] = []; + } + tablesTds[tblname].push(pk); + } + var formId = $(this).attr('id'); + $('#' + formId + ' input[type=checkbox]:not(:checked)').prop('checked', false); + dependsOn = ''; + $('#' + formId + ' input[type=checkbox]:checked').each(function () { + dependsOn += $(this).val() + ', '; + $(this).attr('checked','checked'); + }); + if (dependsOn === '') { + dependsOn = pk; + } else { + dependsOn = dependsOn.slice(0, -2); + } + if (! (dependsOn in pd)) { + pd[dependsOn] = []; + } + pd[dependsOn].push($(this).data('colname')); + if (isTransitive === true) { + if (!(tblname in tablesTds)) { + tablesTds[tblname] = []; + } + if ($.inArray(dependsOn, tablesTds[tblname]) === -1) { + tablesTds[tblname].push(dependsOn); + } + } + }); + backup = $('#mainContent').html(); + if (isTransitive === true) { + goTo3NFStep2(pd, tablesTds); + } else { + goTo2NFStep2(pd, pk); + } + return false; +} + +function moveRepeatingGroup (repeatingCols) { + var newTable = $('input[name=repeatGroupTable]').val(); + var newColumn = $('input[name=repeatGroupColumn]').val(); + if (!newTable) { + $('input[name=repeatGroupTable]').trigger('focus'); + return false; + } + if (!newColumn) { + $('input[name=repeatGroupColumn]').trigger('focus'); + return false; + } + var datastring = { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'repeatingColumns': repeatingCols, + 'newTable':newTable, + 'newColumn':newColumn, + 'primary_columns':primaryKey.toString() + }; + $.ajax({ + type: 'POST', + url: 'index.php?route=/normalization', + data: datastring, + async:false, + success: function (data) { + if (data.success === true) { + if (data.queryError === false) { + goToStep3(); + } + Functions.ajaxShowMessage(data.message, false); + $('#pma_navigation_reload').trigger('click'); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); +} +AJAX.registerTeardown('normalization.js', function () { + $('#extra').off('click', '#selectNonAtomicCol'); + $('#splitGo').off('click'); + $('.tblFooters').off('click', '#saveSplit'); + $('#extra').off('click', '#addNewPrimary'); + $('.tblFooters').off('click', '#saveNewPrimary'); + $('#extra').off('click', '#removeRedundant'); + $('#mainContent p').off('click', '#createPrimaryKey'); + $('#mainContent').off('click', '#backEditPd'); + $('#mainContent').off('click', '#showPossiblePd'); + $('#mainContent').off('click', '.pickPd'); +}); + +AJAX.registerOnload('normalization.js', function () { + var selectedCol; + normalizeto = $('#mainContent').data('normalizeto'); + $('#extra').on('click', '#selectNonAtomicCol', function () { + if ($(this).val() === 'no_such_col') { + goToStep2(); + } else { + selectedCol = $(this).val(); + } + }); + + $('#splitGo').on('click', function () { + if (!selectedCol || selectedCol === '') { + return false; + } + var numField = $('#numField').val(); + $.post( + 'index.php?route=/normalization', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'splitColumn': true, + 'numFields': numField + }, + function (data) { + if (data.success === true) { + $('#newCols').html(data.message); + $('.default_value').hide(); + $('.enum_notice').hide(); + + $('') + .attr({ + type: 'submit', + id: 'saveSplit', + value: Messages.strSave, + class: 'btn btn-primary' + }) + .appendTo('.tblFooters'); + + $('') + .attr({ + type: 'submit', + id: 'cancelSplit', + value: Messages.strCancel, + class: 'btn btn-secondary' + }) + .on('click', function () { + $('#newCols').html(''); + $(this).parent().html(''); + }) + .appendTo('.tblFooters'); + } + } + ); + return false; + }); + $('.tblFooters').on('click','#saveSplit', function () { + centralColumnList = []; + if ($('#newCols #field_0_1').val() === '') { + $('#newCols #field_0_1').trigger('focus'); + return false; + } + var argsep = CommonParams.get('arg_separator'); + var datastring = $('#newCols :input').serialize(); + datastring += argsep + 'ajax_request=1' + argsep + 'do_save_data=1' + argsep + 'field_where=last'; + $.post('index.php?route=/table/add-field', datastring, function (data) { + if (data.success) { + $.post( + 'index.php?route=/sql', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'dropped_column': selectedCol, + 'purge' : 1, + 'sql_query': 'ALTER TABLE `' + CommonParams.get('table') + '` DROP `' + selectedCol + '`;', + 'is_js_confirmed': 1 + }, + function (data) { + if (data.success === true) { + appendHtmlColumnsList(); + $('#newCols').html(''); + $('.tblFooters').html(''); + } else { + Functions.ajaxShowMessage(data.error, false); + } + selectedCol = ''; + } + ); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); + }); + + $('#extra').on('click', '#addNewPrimary', function () { + $.post( + 'index.php?route=/normalization', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'addNewPrimary': true + }, + function (data) { + if (data.success === true) { + $('#newCols').html(data.message); + $('.default_value').hide(); + $('.enum_notice').hide(); + + $('') + .attr({ + type: 'submit', + id: 'saveNewPrimary', + value: Messages.strSave, + class: 'btn btn-primary' + }) + .appendTo('.tblFooters'); + $('') + .attr({ + type: 'submit', + id: 'cancelSplit', + value: Messages.strCancel, + class: 'btn btn-secondary' + }) + .on('click', function () { + $('#newCols').html(''); + $(this).parent().html(''); + }) + .appendTo('.tblFooters'); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + ); + return false; + }); + $('.tblFooters').on('click', '#saveNewPrimary', function () { + var datastring = $('#newCols :input').serialize(); + var argsep = CommonParams.get('arg_separator'); + datastring += argsep + 'field_key[0]=primary_0' + argsep + 'ajax_request=1' + argsep + 'do_save_data=1' + argsep + 'field_where=last'; + $.post('index.php?route=/table/add-field', datastring, function (data) { + if (data.success === true) { + $('#mainContent h4').html(Messages.strPrimaryKeyAdded); + $('#mainContent p').html(Messages.strToNextStep); + $('#mainContent #extra').html(''); + $('#mainContent #newCols').html(''); + $('.tblFooters').html(''); + setTimeout(function () { + goToStep3(); + }, 2000); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); + }); + $('#extra').on('click', '#removeRedundant', function () { + var dropQuery = 'ALTER TABLE `' + CommonParams.get('table') + '` '; + $('#extra input[type=checkbox]:checked').each(function () { + dropQuery += 'DROP `' + $(this).val() + '`, '; + }); + dropQuery = dropQuery.slice(0, -2); + $.post( + 'index.php?route=/sql', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'sql_query': dropQuery, + 'is_js_confirmed': 1 + }, + function (data) { + if (data.success === true) { + goToStep2('goToFinish1NF'); + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + ); + }); + $('#extra').on('click', '#moveRepeatingGroup', function () { + var repeatingCols = ''; + $('#extra input[type=checkbox]:checked').each(function () { + repeatingCols += $(this).val() + ', '; + }); + + if (repeatingCols !== '') { + var newColName = $('#extra input[type=checkbox]:checked').first().val(); + repeatingCols = repeatingCols.slice(0, -2); + var confirmStr = Functions.sprintf(Messages.strMoveRepeatingGroup, Functions.escapeHtml(repeatingCols), Functions.escapeHtml(CommonParams.get('table'))); + confirmStr += '' + + '( ' + Functions.escapeHtml(primaryKey.toString()) + ', )' + + ''; + $('#newCols').html(confirmStr); + + $('') + .attr({ + type: 'submit', + value: Messages.strCancel, + class: 'btn btn-secondary' + }) + .on('click', function () { + $('#newCols').html(''); + $('#extra input[type=checkbox]').prop('checked', false); + }) + .appendTo('.tblFooters'); + $('') + .attr({ + type: 'submit', + value: Messages.strGo, + class: 'btn btn-primary' + }) + .on('click', function () { + moveRepeatingGroup(repeatingCols); + }) + .appendTo('.tblFooters'); + } + }); + $('#mainContent p').on('click', '#createPrimaryKey', function (event) { + event.preventDefault(); + var url = { + 'create_index': 1, + 'server': CommonParams.get('server'), + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'added_fields': 1, + 'add_fields':1, + 'index': { 'Key_name':'PRIMARY' }, + 'ajax_request': true + }; + var title = Messages.strAddPrimaryKey; + Functions.indexEditorDialog(url, title, function () { + // on success + $('.sqlqueryresults').remove(); + $('.result_query').remove(); + $('.tblFooters').html(''); + goToStep2('goToStep3'); + }); + return false; + }); + $('#mainContent').on('click', '#backEditPd', function () { + $('#mainContent').html(backup); + }); + $('#mainContent').on('click', '#showPossiblePd', function () { + if ($(this).hasClass('hideList')) { + $(this).html('+ ' + Messages.strShowPossiblePd); + $(this).removeClass('hideList'); + $('#newCols').slideToggle('slow'); + return false; + } + if ($('#newCols').html() !== '') { + $('#showPossiblePd').html('- ' + Messages.strHidePd); + $('#showPossiblePd').addClass('hideList'); + $('#newCols').slideToggle('slow'); + return false; + } + $('#newCols').insertAfter('#mainContent h4'); + $('#newCols').html('
        ' + Messages.strLoading + '
        ' + Messages.strWaitForPd + '
        '); + $.post( + 'index.php?route=/normalization', + { + 'ajax_request': true, + 'db': CommonParams.get('db'), + 'table': CommonParams.get('table'), + 'server': CommonParams.get('server'), + 'findPdl': true + }, function (data) { + $('#showPossiblePd').html('- ' + Messages.strHidePd); + $('#showPossiblePd').addClass('hideList'); + $('#newCols').html(data.message); + }); + }); + $('#mainContent').on('click', '.pickPd', function () { + var strColsLeft = $(this).next('.determinants').html(); + var colsLeft = strColsLeft.split(','); + var strColsRight = $(this).next().next().html(); + var colsRight = strColsRight.split(','); + for (var i in colsRight) { + $('form[data-colname="' + colsRight[i].trim() + '"] input[type="checkbox"]').prop('checked', false); + for (var j in colsLeft) { + $('form[data-colname="' + colsRight[i].trim() + '"] input[value="' + colsLeft[j].trim() + '"]').prop('checked', true); + } + } + }); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/replication.js b/Sources/php_script/script/phpMyAdmin/js/src/replication.js new file mode 100644 index 0000000..26b8437 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/replication.js @@ -0,0 +1,106 @@ +/** + * @fileoverview Javascript functions used in server replication page + * @name Server Replication + * + * @requires jQuery + * @requires jQueryUI + * @requires js/functions.js + */ + +var randomServerId = Math.floor(Math.random() * 10000000); +var confPrefix = 'server-id=' + randomServerId + '\nlog_bin=mysql-bin\nlog_error=mysql-bin.err\n'; + +function updateConfig () { + var confIgnore = 'binlog_ignore_db='; + var confDo = 'binlog_do_db='; + var databaseList = ''; + + if ($('#db_select option:selected').length === 0) { + $('#rep').text(confPrefix); + } else if ($('#db_type option:selected').val() === 'all') { + $('#db_select option:selected').each(function () { + databaseList += confIgnore + $(this).val() + '\n'; + }); + $('#rep').text(confPrefix + databaseList); + } else { + $('#db_select option:selected').each(function () { + databaseList += confDo + $(this).val() + '\n'; + }); + $('#rep').text(confPrefix + databaseList); + } +} + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('replication.js', function () { + $('#db_type').off('change'); + $('#db_select').off('change'); + $('#primary_status_href').off('click'); + $('#primary_replicas_href').off('click'); + $('#replica_status_href').off('click'); + $('#replica_control_href').off('click'); + $('#replica_errormanagement_href').off('click'); + $('#replica_synchronization_href').off('click'); + $('#db_reset_href').off('click'); + $('#db_select_href').off('click'); + $('#reset_replica').off('click'); +}); + +AJAX.registerOnload('replication.js', function () { + $('#rep').text(confPrefix); + $('#db_type').on('change', updateConfig); + $('#db_select').on('change', updateConfig); + + $('#primary_status_href').on('click', function () { + $('#replication_primary_section').toggle(); + }); + $('#primary_replicas_href').on('click', function () { + $('#replication_replicas_section').toggle(); + }); + $('#replica_status_href').on('click', function () { + $('#replication_replica_section').toggle(); + }); + $('#replica_control_href').on('click', function () { + $('#replica_control_gui').toggle(); + }); + $('#replica_errormanagement_href').on('click', function () { + $('#replica_errormanagement_gui').toggle(); + }); + $('#replica_synchronization_href').on('click', function () { + $('#replica_synchronization_gui').toggle(); + }); + $('#db_reset_href').on('click', function () { + $('#db_select option:selected').prop('selected', false); + $('#db_select').trigger('change'); + }); + $('#db_select_href').on('click', function () { + $('#db_select option').prop('selected', true); + $('#db_select').trigger('change'); + }); + $('#reset_replica').on('click', function (e) { + e.preventDefault(); + var $anchor = $(this); + var question = Messages.strResetReplicaWarning; + $anchor.confirm(question, $anchor.attr('href'), function (url) { + Functions.ajaxShowMessage(); + AJAX.source = $anchor; + var params = Functions.getJsConfirmCommonParam({ + 'ajax_page_request': true, + 'ajax_request': true + }, $anchor.getPostData()); + $.post(url, params, AJAX.responseHandler); + }); + }); + $('#button_generate_password').on('click', function () { + Functions.suggestPassword(this.form); + }); + $('#nopass_1').on('click', function () { + this.form.pma_pw.value = ''; + this.form.pma_pw2.value = ''; + this.checked = true; + }); + $('#nopass_0').on('click', function () { + document.getElementById('text_pma_change_pw').focus(); + }); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/server/plugins.js b/Sources/php_script/script/phpMyAdmin/js/src/server/plugins.js new file mode 100644 index 0000000..fe96bc0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/server/plugins.js @@ -0,0 +1,15 @@ +/** + * Functions used in server plugins pages + */ +AJAX.registerOnload('server/plugins.js', function () { + // Make columns sortable, but only for tables with more than 1 data row + var $tables = $('#plugins_plugins table:has(tbody tr + tr)'); + $tables.tablesorter({ + sortList: [[0, 0]], + headers: { + 1: { sorter: false } + } + }); + $tables.find('thead th') + .append('
        '); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/server/status/queries.js b/Sources/php_script/script/phpMyAdmin/js/src/server/status/queries.js new file mode 100644 index 0000000..e4c0503 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/server/status/queries.js @@ -0,0 +1,45 @@ +/** + * @fileoverview Javascript functions used in server status query page + * @name Server Status Query + * + * @requires jQuery + * @requires jQueryUI + * @requires js/functions.js + */ + +/* global initTableSorter */ // js/server/status/sorter.js + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('server/status/queries.js', function () { + if (document.getElementById('serverstatusquerieschart') !== null) { + var queryPieChart = $('#serverstatusquerieschart').data('queryPieChart'); + if (queryPieChart) { + queryPieChart.destroy(); + } + } +}); + +AJAX.registerOnload('server/status/queries.js', function () { + // Build query statistics chart + var cdata = []; + try { + if (document.getElementById('serverstatusquerieschart') !== null) { + $.each($('#serverstatusquerieschart').data('chart'), function (key, value) { + cdata.push([key, parseInt(value, 10)]); + }); + $('#serverstatusquerieschart').data( + 'queryPieChart', + Functions.createProfilingChart( + 'serverstatusquerieschart', + cdata + ) + ); + } + } catch (exception) { + // Could not load chart, no big deal... + } + + initTableSorter('statustabs_queries'); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/setup/scripts.js b/Sources/php_script/script/phpMyAdmin/js/src/setup/scripts.js new file mode 100644 index 0000000..c7671c1 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/setup/scripts.js @@ -0,0 +1,241 @@ +/** + * Functions used in Setup configuration forms + */ + +/* global displayErrors, getAllValues, getIdPrefix, validators */ // js/config.js + +// show this window in top frame +if (top !== self) { + window.top.location.href = location; +} + +// ------------------------------------------------------------------ +// Messages +// + +$(function () { + if (window.location.protocol === 'https:') { + $('#no_https').remove(); + } else { + $('#no_https a').on('click', function () { + var oldLocation = window.location; + window.location.href = 'https:' + oldLocation.href.substring(oldLocation.protocol.length); + return false; + }); + } + + var hiddenMessages = $('.hiddenmessage'); + + if (hiddenMessages.length > 0) { + hiddenMessages.hide(); + var link = $('#show_hidden_messages'); + link.on('click', function (e) { + e.preventDefault(); + hiddenMessages.show(); + $(this).remove(); + }); + link.html(link.html().replace('#MSG_COUNT', hiddenMessages.length)); + link.show(); + } +}); + +// set document width +$(function () { + var width = 0; + $('ul.tabs li').each(function () { + width += $(this).width() + 10; + }); + var contentWidth = width; + width += 250; + $('body').css('min-width', width); + $('.tabs_contents').css('min-width', contentWidth); +}); + +// +// END: Messages +// ------------------------------------------------------------------ + +// ------------------------------------------------------------------ +// Form validation and field operations +// + +/** + * Calls server-side validation procedures + * + * @param {Element} parent input field in
        or
        + * @param {String} id validator id + * @param {object} values values hash {element1_id: value, ...} + * + * @return {bool|void} + */ +function ajaxValidate (parent, id, values) { + var $parent = $(parent); + // ensure that parent is a fieldset + if ($parent.attr('tagName') !== 'FIELDSET') { + $parent = $parent.closest('fieldset'); + if ($parent.length === 0) { + return false; + } + } + + if ($parent.data('ajax') !== null) { + $parent.data('ajax').abort(); + } + + $parent.data('ajax', $.ajax({ + url: 'validate.php', + cache: false, + type: 'POST', + data: { + token: $parent.closest('form').find('input[name=token]').val(), + id: id, + values: JSON.stringify(values) + }, + success: function (response) { + if (response === null) { + return; + } + + var error = {}; + if (typeof response !== 'object') { + error[$parent.id] = [response]; + } else if (typeof response.error !== 'undefined') { + error[$parent.id] = [response.error]; + } else { + for (var key in response) { + var value = response[key]; + error[key] = Array.isArray(value) ? value : [value]; + } + } + displayErrors(error); + }, + complete: function () { + $parent.removeData('ajax'); + } + })); + + return true; +} + +/** + * Automatic form submission on change. + */ +$(document).on('change', '.autosubmit', function (e) { + e.target.form.submit(); +}); + +$.extend(true, validators, { + // field validators + field: { + /** + * hide_db field + * + * @param {boolean} isKeyUp + * + * @return {true} + */ + hide_db: function (isKeyUp) { // eslint-disable-line camelcase + if (!isKeyUp && this.value !== '') { + var data = {}; + data[this.id] = this.value; + ajaxValidate(this, 'Servers/1/hide_db', data); + } + return true; + }, + /** + * TrustedProxies field + * + * @param {boolean} isKeyUp + * + * @return {true} + */ + TrustedProxies: function (isKeyUp) { + if (!isKeyUp && this.value !== '') { + var data = {}; + data[this.id] = this.value; + ajaxValidate(this, 'TrustedProxies', data); + } + return true; + } + }, + // fieldset validators + fieldset: { + /** + * Validates Server fieldset + * + * @param {boolean} isKeyUp + * + * @return {true} + */ + Server: function (isKeyUp) { + if (!isKeyUp) { + ajaxValidate(this, 'Server', getAllValues()); + } + return true; + }, + /** + * Validates Server_login_options fieldset + * + * @param {boolean} isKeyUp + * + * @return {true} + */ + Server_login_options: function (isKeyUp) { // eslint-disable-line camelcase + return validators.fieldset.Server.apply(this, [isKeyUp]); + }, + /** + * Validates Server_pmadb fieldset + * + * @param {boolean} isKeyUp + * + * @return {true} + */ + Server_pmadb: function (isKeyUp) { // eslint-disable-line camelcase + if (isKeyUp) { + return true; + } + + var prefix = getIdPrefix($(this).find('input')); + if ($('#' + prefix + 'pmadb').val() !== '') { + ajaxValidate(this, 'Server_pmadb', getAllValues()); + } + + return true; + } + } +}); + +// +// END: Form validation and field operations +// ------------------------------------------------------------------ + +// ------------------------------------------------------------------ +// User preferences allow/disallow UI +// + +$(function () { + $('.userprefs-allow').on('click', function (e) { + if (this !== e.target) { + return; + } + var el = $(this).find('input'); + if (el.prop('disabled')) { + return; + } + el.prop('checked', !el.prop('checked')); + }); +}); + +// +// END: User preferences allow/disallow UI +// ------------------------------------------------------------------ + +$(function () { + $('.delete-server').on('click', function (e) { + e.preventDefault(); + var $this = $(this); + $.post($this.attr('href'), $this.attr('data-post'), function () { + window.location.replace('index.php'); + }); + }); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/sql.js b/Sources/php_script/script/phpMyAdmin/js/src/sql.js new file mode 100644 index 0000000..0823294 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/sql.js @@ -0,0 +1,1090 @@ +/** + * @fileoverview functions used wherever an sql query form is used + * + * @requires jQuery + * @requires js/functions.js + * + * @test-module Sql + */ + +/* global isStorageSupported */ // js/config.js +/* global codeMirrorEditor */ // js/functions.js +/* global makeGrid */ // js/makegrid.js +/* global sqlBoxLocked */ // js/functions.js + +var Sql = {}; + +/** + * decode a string URL_encoded + * + * @param {string} str + * @return {string} the URL-decoded string + */ +Sql.urlDecode = function (str) { + if (typeof str !== 'undefined') { + return decodeURIComponent(str.replace(/\+/g, '%20')); + } +}; + +/** + * encode a string URL_decoded + * + * @param {string} str + * @return {string} the URL-encoded string + */ +Sql.urlEncode = function (str) { + if (typeof str !== 'undefined') { + return encodeURIComponent(str).replace(/%20/g, '+'); + } +}; + +/** + * Saves SQL query in local storage or cookie + * + * @param {string} query SQL query + * @return {void} + */ +Sql.autoSave = function (query) { + if (query) { + var key = Sql.getAutoSavedKey(); + if (isStorageSupported('localStorage')) { + window.localStorage.setItem(key, query); + } else { + Cookies.set(key, query); + } + } +}; + +/** + * Saves SQL query in local storage or cookie + * + * @param {string} db database name + * @param {string} table table name + * @param {string} query SQL query + * @return {void} + */ +Sql.showThisQuery = function (db, table, query) { + var showThisQueryObject = { + 'db': db, + 'table': table, + 'query': query + }; + if (isStorageSupported('localStorage')) { + window.localStorage.showThisQuery = 1; + window.localStorage.showThisQueryObject = JSON.stringify(showThisQueryObject); + } else { + Cookies.set('showThisQuery', 1); + Cookies.set('showThisQueryObject', JSON.stringify(showThisQueryObject)); + } +}; + +/** + * Set query to codemirror if show this query is + * checked and query for the db and table pair exists + */ +Sql.setShowThisQuery = function () { + var db = $('input[name="db"]').val(); + var table = $('input[name="table"]').val(); + if (isStorageSupported('localStorage')) { + if (window.localStorage.showThisQueryObject !== undefined) { + var storedDb = JSON.parse(window.localStorage.showThisQueryObject).db; + var storedTable = JSON.parse(window.localStorage.showThisQueryObject).table; + var storedQuery = JSON.parse(window.localStorage.showThisQueryObject).query; + } + if (window.localStorage.showThisQuery !== undefined + && window.localStorage.showThisQuery === '1') { + $('input[name="show_query"]').prop('checked', true); + if (db === storedDb && table === storedTable) { + if (codeMirrorEditor) { + codeMirrorEditor.setValue(storedQuery); + } else if (document.sqlform) { + document.sqlform.sql_query.value = storedQuery; + } + } + } else { + $('input[name="show_query"]').prop('checked', false); + } + } +}; + +/** + * Saves SQL query with sort in local storage or cookie + * + * @param {string} query SQL query + * @return {void} + */ +Sql.autoSaveWithSort = function (query) { + if (query) { + if (isStorageSupported('localStorage')) { + window.localStorage.setItem('autoSavedSqlSort', query); + } else { + Cookies.set('autoSavedSqlSort', query); + } + } +}; + +/** + * Clear saved SQL query with sort in local storage or cookie + * + * @return {void} + */ +Sql.clearAutoSavedSort = function () { + if (isStorageSupported('localStorage')) { + window.localStorage.removeItem('autoSavedSqlSort'); + } else { + Cookies.set('autoSavedSqlSort', ''); + } +}; + +/** + * Get the field name for the current field. Required to construct the query + * for grid editing + * + * @param $tableResults enclosing results table + * @param $thisField jQuery object that points to the current field's tr + * + * @return {string} + */ +Sql.getFieldName = function ($tableResults, $thisField) { + var thisFieldIndex = $thisField.index(); + // ltr or rtl direction does not impact how the DOM was generated + // check if the action column in the left exist + var leftActionExist = !$tableResults.find('th').first().hasClass('draggable'); + // number of column span for checkbox and Actions + var leftActionSkip = leftActionExist ? $tableResults.find('th').first().attr('colspan') - 1 : 0; + + // If this column was sorted, the text of the a element contains something + // like 1 that is useful to indicate the order in case + // of a sort on multiple columns; however, we dont want this as part + // of the column name so we strip it ( .clone() to .end() ) + var fieldName = $tableResults + .find('thead') + .find('th') + .eq(thisFieldIndex - leftActionSkip) + .find('a') + .clone() // clone the element + .children() // select all the children + .remove() // remove all of them + .end() // go back to the selected element + .text(); // grab the text + // happens when just one row (headings contain no a) + if (fieldName === '') { + var $heading = $tableResults.find('thead').find('th').eq(thisFieldIndex - leftActionSkip).children('span'); + // may contain column comment enclosed in a span - detach it temporarily to read the column name + var $tempColComment = $heading.children().detach(); + fieldName = $heading.text(); + // re-attach the column comment + $heading.append($tempColComment); + } + + fieldName = fieldName.trim(); + + return fieldName; +}; + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('sql.js', function () { + $(document).off('click', 'a.delete_row.ajax'); + $(document).off('submit', '.bookmarkQueryForm'); + $('input#bkm_label').off('input'); + $(document).off('makegrid', '.sqlqueryresults'); + $('#togglequerybox').off('click'); + $(document).off('click', '#button_submit_query'); + $(document).off('change', '#id_bookmark'); + $('input[name=\'bookmark_variable\']').off('keypress'); + $(document).off('submit', '#sqlqueryform.ajax'); + $(document).off('click', 'input[name=navig].ajax'); + $(document).off('submit', 'form[name=\'displayOptionsForm\'].ajax'); + $(document).off('mouseenter', 'th.column_heading.pointer'); + $(document).off('mouseleave', 'th.column_heading.pointer'); + $(document).off('click', 'th.column_heading.marker'); + $(document).off('scroll', window); + $(document).off('keyup', '.filter_rows'); + if (codeMirrorEditor) { + codeMirrorEditor.off('change'); + } else { + $('#sqlquery').off('input propertychange'); + } + $('body').off('click', '.navigation .showAllRows'); + $('body').off('click', 'a.browse_foreign'); + $('body').off('click', '#simulate_dml'); + $('body').off('keyup', '#sqlqueryform'); + $('body').off('click', 'form[name="resultsForm"].ajax button[name="submit_mult"], form[name="resultsForm"].ajax input[name="submit_mult"]'); + $(document).off('submit', '.maxRowsForm'); + $(document).off('click', '#view_as'); + $(document).off('click', '#sqlquery'); +}); + +/** + * @description

        Ajax scripts for sql and browse pages

        + * + * Actions ajaxified here: + *
          + *
        • Retrieve results of an SQL query
        • + *
        • Paginate the results table
        • + *
        • Sort the results table
        • + *
        • Change table according to display options
        • + *
        • Grid editing of data
        • + *
        • Saving a bookmark
        • + *
        + * + * @name document.ready + * @memberOf jQuery + */ +AJAX.registerOnload('sql.js', function () { + if (codeMirrorEditor || document.sqlform) { + Sql.setShowThisQuery(); + } + $(function () { + if (codeMirrorEditor) { + codeMirrorEditor.on('change', function () { + Sql.autoSave(codeMirrorEditor.getValue()); + }); + } else { + $('#sqlquery').on('input propertychange', function () { + Sql.autoSave($('#sqlquery').val()); + }); + var useLocalStorageValue = isStorageSupported('localStorage') && typeof window.localStorage.autoSavedSqlSort !== 'undefined'; + // Save sql query with sort + if ($('#RememberSorting') !== undefined && $('#RememberSorting').is(':checked')) { + $('select[name="sql_query"]').on('change', function () { + Sql.autoSaveWithSort($(this).val()); + }); + $('.sortlink').on('click', function () { + Sql.clearAutoSavedSort(); + }); + } else { + Sql.clearAutoSavedSort(); + } + // If sql query with sort for current table is stored, change sort by key select value + var sortStoredQuery = useLocalStorageValue ? window.localStorage.autoSavedSqlSort : Cookies.get('autoSavedSqlSort'); + if (typeof sortStoredQuery !== 'undefined' && sortStoredQuery !== $('select[name="sql_query"]').val() && $('select[name="sql_query"] option[value="' + sortStoredQuery + '"]').length !== 0) { + $('select[name="sql_query"]').val(sortStoredQuery).trigger('change'); + } + } + }); + + // Delete row from SQL results + $(document).on('click', 'a.delete_row.ajax', function (e) { + e.preventDefault(); + var question = Functions.sprintf(Messages.strDoYouReally, Functions.escapeHtml($(this).closest('td').find('div').text())); + var $link = $(this); + $link.confirm(question, $link.attr('href'), function (url) { + Functions.ajaxShowMessage(); + var argsep = CommonParams.get('arg_separator'); + var params = 'ajax_request=1' + argsep + 'is_js_confirmed=1'; + var postData = $link.getPostData(); + if (postData) { + params += argsep + postData; + } + $.post(url, params, function (data) { + if (data.success) { + Functions.ajaxShowMessage(data.message); + $link.closest('tr').remove(); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); + }); + }); + + // Ajaxification for 'Bookmark this SQL query' + $(document).on('submit', '.bookmarkQueryForm', function (e) { + e.preventDefault(); + Functions.ajaxShowMessage(); + var argsep = CommonParams.get('arg_separator'); + $.post($(this).attr('action'), 'ajax_request=1' + argsep + $(this).serialize(), function (data) { + if (data.success) { + Functions.ajaxShowMessage(data.message); + } else { + Functions.ajaxShowMessage(data.error, false); + } + }); + }); + + /* Hides the bookmarkoptions checkboxes when the bookmark label is empty */ + $('input#bkm_label').on('input', function () { + $('input#id_bkm_all_users, input#id_bkm_replace') + .parent() + .toggle($(this).val().length > 0); + }).trigger('input'); + + /** + * Attach Event Handler for 'Copy to clipboard' + */ + $(document).on('click', '#copyToClipBoard', function (event) { + event.preventDefault(); + + var textArea = document.createElement('textarea'); + + // + // *** This styling is an extra step which is likely not required. *** + // + // Why is it here? To ensure: + // 1. the element is able to have focus and selection. + // 2. if element was to flash render it has minimal visual impact. + // 3. less flakyness with selection and copying which **might** occur if + // the textarea element is not visible. + // + // The likelihood is the element won't even render, not even a flash, + // so some of these are just precautions. However in IE the element + // is visible whilst the popup box asking the user for permission for + // the web page to copy to the clipboard. + // + + // Place in top-left corner of screen regardless of scroll position. + textArea.style.position = 'fixed'; + textArea.style.top = 0; + textArea.style.left = 0; + + // Ensure it has a small width and height. Setting to 1px / 1em + // doesn't work as this gives a negative w/h on some browsers. + textArea.style.width = '2em'; + textArea.style.height = '2em'; + + // We don't need padding, reducing the size if it does flash render. + textArea.style.padding = 0; + + // Clean up any borders. + textArea.style.border = 'none'; + textArea.style.outline = 'none'; + textArea.style.boxShadow = 'none'; + + // Avoid flash of white box if rendered for any reason. + textArea.style.background = 'transparent'; + + textArea.value = ''; + + $('#server-breadcrumb a').each(function () { + textArea.value += $(this).data('raw-text') + '/'; + }); + textArea.value += '\t\t' + window.location.href; + textArea.value += '\n'; + $('.alert-success').each(function () { + textArea.value += $(this).text() + '\n\n'; + }); + + $('.sql pre').each(function () { + textArea.value += $(this).text() + '\n\n'; + }); + + $('.table_results .column_heading a').each(function () { + // Don't copy ordering number text within tag + textArea.value += $(this).clone().find('small').remove().end().text() + '\t'; + }); + + textArea.value += '\n'; + $('.table_results tbody tr').each(function () { + $(this).find('.data span').each(function () { + // Extract tag for NULL values before converting to string to not mess up formatting + var data = $(this).find('em').length !== 0 ? $(this).find('em')[0] : this; + textArea.value += $(data).text() + '\t'; + }); + textArea.value += '\n'; + }); + + // eslint-disable-next-line compat/compat + document.body.appendChild(textArea); + + textArea.select(); + + try { + document.execCommand('copy'); + } catch (err) { + alert('Sorry! Unable to copy'); + } + + // eslint-disable-next-line compat/compat + document.body.removeChild(textArea); + }); // end of Copy to Clipboard action + + /** + * Attach the {@link makegrid} function to a custom event, which will be + * triggered manually everytime the table of results is reloaded + * @memberOf jQuery + */ + $(document).on('makegrid', '.sqlqueryresults', function () { + $('.table_results').each(function () { + makeGrid(this); + }); + }); + + /** + * Append the "Show/Hide query box" message to the query input form + * + * @memberOf jQuery + * @name appendToggleSpan + */ + // do not add this link more than once + if (! $('#sqlqueryform').find('button').is('#togglequerybox')) { + $('') + .html(Messages.strHideQueryBox) + .appendTo('#sqlqueryform') + // initially hidden because at this point, nothing else + // appears under the link + .hide(); + + // Attach the toggling of the query box visibility to a click + $('#togglequerybox').on('click', function () { + var $link = $(this); + $link.siblings().slideToggle('fast'); + if ($link.text() === Messages.strHideQueryBox) { + $link.text(Messages.strShowQueryBox); + // cheap trick to add a spacer between the menu tabs + // and "Show query box"; feel free to improve! + $('#togglequerybox_spacer').remove(); + $link.before('
        '); + } else { + $link.text(Messages.strHideQueryBox); + } + // avoid default click action + return false; + }); + } + + + /** + * Event handler for sqlqueryform.ajax button_submit_query + * + * @memberOf jQuery + */ + $(document).on('click', '#button_submit_query', function () { + $('.alert-success,.alert-danger').hide(); + // hide already existing error or success message + var $form = $(this).closest('form'); + // the Go button related to query submission was clicked, + // instead of the one related to Bookmarks, so empty the + // id_bookmark selector to avoid misinterpretation in + // /import about what needs to be done + $form.find('select[name=id_bookmark]').val(''); + var isShowQuery = $('input[name="show_query"]').is(':checked'); + if (isShowQuery) { + window.localStorage.showThisQuery = '1'; + var db = $('input[name="db"]').val(); + var table = $('input[name="table"]').val(); + var query; + if (codeMirrorEditor) { + query = codeMirrorEditor.getValue(); + } else { + query = $('#sqlquery').val(); + } + Sql.showThisQuery(db, table, query); + } else { + window.localStorage.showThisQuery = '0'; + } + }); + + /** + * Event handler to show appropriate number of variable boxes + * based on the bookmarked query + */ + $(document).on('change', '#id_bookmark', function () { + var varCount = $(this).find('option:selected').data('varcount'); + if (typeof varCount === 'undefined') { + varCount = 0; + } + + var $varDiv = $('#bookmarkVariables'); + $varDiv.empty(); + for (var i = 1; i <= varCount; i++) { + $varDiv.append($('
        ')); + $varDiv.append($('')); + $varDiv.append($('')); + $varDiv.append($('
        ')); + } + + if (varCount === 0) { + $varDiv.parent().hide(); + } else { + $varDiv.parent().show(); + } + }); + + /** + * Event handler for hitting enter on sqlqueryform bookmark_variable + * (the Variable textfield in Bookmarked SQL query section) + * + * @memberOf jQuery + */ + $('input[name=bookmark_variable]').on('keypress', function (event) { + // force the 'Enter Key' to implicitly click the #button_submit_bookmark + var keycode = (event.keyCode ? event.keyCode : (event.which ? event.which : event.charCode)); + if (keycode === 13) { // keycode for enter key + // When you press enter in the sqlqueryform, which + // has 2 submit buttons, the default is to run the + // #button_submit_query, because of the tabindex + // attribute. + // This submits #button_submit_bookmark instead, + // because when you are in the Bookmarked SQL query + // section and hit enter, you expect it to do the + // same action as the Go button in that section. + $('#button_submit_bookmark').trigger('click'); + return false; + } else { + return true; + } + }); + + /** + * Ajax Event handler for 'SQL Query Submit' + * + * @see Functions.ajaxShowMessage() + * @memberOf jQuery + * @name sqlqueryform_submit + */ + $(document).on('submit', '#sqlqueryform.ajax', function (event) { + event.preventDefault(); + + var $form = $(this); + if (codeMirrorEditor) { + $form[0].elements.sql_query.value = codeMirrorEditor.getValue(); + } + if (! Functions.checkSqlQuery($form[0])) { + return false; + } + + // remove any div containing a previous error message + $('.alert-danger').remove(); + + var $msgbox = Functions.ajaxShowMessage(); + var $sqlqueryresultsouter = $('#sqlqueryresultsouter'); + + Functions.prepareForAjaxRequest($form); + + var argsep = CommonParams.get('arg_separator'); + $.post($form.attr('action'), $form.serialize() + argsep + 'ajax_page_request=true', function (data) { + if (typeof data !== 'undefined' && data.success === true) { + // success happens if the query returns rows or not + + // show a message that stays on screen + if (typeof data.action_bookmark !== 'undefined') { + // view only + if ('1' === data.action_bookmark) { + $('#sqlquery').text(data.sql_query); + // send to codemirror if possible + Functions.setQuery(data.sql_query); + } + // delete + if ('2' === data.action_bookmark) { + $('#id_bookmark option[value=\'' + data.id_bookmark + '\']').remove(); + // if there are no bookmarked queries now (only the empty option), + // remove the bookmark section + if ($('#id_bookmark option').length === 1) { + $('#fieldsetBookmarkOptions').hide(); + $('#fieldsetBookmarkOptionsFooter').hide(); + } + } + } + $sqlqueryresultsouter + .show() + .html(data.message); + Functions.highlightSql($sqlqueryresultsouter); + + if (data.menu) { + history.replaceState({ + menu : data.menu + }, + null + ); + AJAX.handleMenu.replace(data.menu); + } + + if (data.params) { + CommonParams.setAll(data.params); + } + + if (typeof data.ajax_reload !== 'undefined') { + if (data.ajax_reload.reload) { + if (data.ajax_reload.table_name) { + CommonParams.set('table', data.ajax_reload.table_name); + CommonActions.refreshMain(); + } else { + Navigation.reload(); + } + } + } else if (typeof data.reload !== 'undefined') { + // this happens if a USE or DROP command was typed + CommonActions.setDb(data.db); + var url; + if (data.db) { + if (data.table) { + url = 'index.php?route=/table/sql'; + } else { + url = 'index.php?route=/database/sql'; + } + } else { + url = 'index.php?route=/server/sql'; + } + CommonActions.refreshMain(url, function () { + $('#sqlqueryresultsouter') + .show() + .html(data.message); + Functions.highlightSql($('#sqlqueryresultsouter')); + }); + } + + $('.sqlqueryresults').trigger('makegrid'); + $('#togglequerybox').show(); + + if (typeof data.action_bookmark === 'undefined') { + if ($('#sqlqueryform input[name="retain_query_box"]').is(':checked') !== true) { + if ($('#togglequerybox').siblings(':visible').length > 0) { + $('#togglequerybox').trigger('click'); + } + } + } + } else if (typeof data !== 'undefined' && data.success === false) { + // show an error message that stays on screen + $sqlqueryresultsouter + .show() + .html(data.error); + $('html, body').animate({ scrollTop: $(document).height() }, 200); + } + Functions.ajaxRemoveMessage($msgbox); + }); // end $.post() + }); // end SQL Query submit + + /** + * Ajax Event handler for the display options + * @memberOf jQuery + * @name displayOptionsForm_submit + */ + $(document).on('submit', 'form[name=\'displayOptionsForm\'].ajax', function (event) { + event.preventDefault(); + + var $form = $(this); + + var $msgbox = Functions.ajaxShowMessage(); + var argsep = CommonParams.get('arg_separator'); + $.post($form.attr('action'), $form.serialize() + argsep + 'ajax_request=true', function (data) { + Functions.ajaxRemoveMessage($msgbox); + var $sqlqueryresults = $form.parents('.sqlqueryresults'); + $sqlqueryresults + .html(data.message) + .trigger('makegrid'); + Functions.highlightSql($sqlqueryresults); + }); // end $.post() + }); // end displayOptionsForm handler + + // Filter row handling. --STARTS-- + $(document).on('keyup', '.filter_rows', function () { + var uniqueId = $(this).data('for'); + var $targetTable = $('.table_results[data-uniqueId=\'' + uniqueId + '\']'); + var $headerCells = $targetTable.find('th[data-column]'); + var targetColumns = []; + // To handle colspan=4, in case of edit,copy etc options. + var dummyTh = ($('.edit_row_anchor').length !== 0 ? + '' + : ''); + // Selecting columns that will be considered for filtering and searching. + $headerCells.each(function () { + targetColumns.push($(this).text().trim()); + }); + + var phrase = $(this).val(); + // Set same value to both Filter rows fields. + $('.filter_rows[data-for=\'' + uniqueId + '\']').not(this).val(phrase); + // Handle colspan. + $targetTable.find('thead > tr').prepend(dummyTh); + $.uiTableFilter($targetTable, phrase, targetColumns); + $targetTable.find('th.dummy_th').remove(); + }); + // Filter row handling. --ENDS-- + + // Prompt to confirm on Show All + $('body').on('click', '.navigation .showAllRows', function (e) { + e.preventDefault(); + var $form = $(this).parents('form'); + + Sql.submitShowAllForm = function () { + var argsep = CommonParams.get('arg_separator'); + var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true'; + Functions.ajaxShowMessage(); + AJAX.source = $form; + $.post($form.attr('action'), submitData, AJAX.responseHandler); + }; + + if (! $(this).is(':checked')) { // already showing all rows + Sql.submitShowAllForm(); + } else { + $form.confirm(Messages.strShowAllRowsWarning, $form.attr('action'), function () { + Sql.submitShowAllForm(); + }); + } + }); + + $('body').on('keyup', '#sqlqueryform', function () { + Functions.handleSimulateQueryButton(); + }); + + /** + * Ajax event handler for 'Simulate DML'. + */ + $('body').on('click', '#simulate_dml', function () { + var $form = $('#sqlqueryform'); + var query = ''; + var delimiter = $('#id_sql_delimiter').val(); + var dbName = $form.find('input[name="db"]').val(); + + if (codeMirrorEditor) { + query = codeMirrorEditor.getValue(); + } else { + query = $('#sqlquery').val(); + } + + if (query.length === 0) { + alert(Messages.strFormEmpty); + $('#sqlquery').trigger('focus'); + return false; + } + + var $msgbox = Functions.ajaxShowMessage(); + $.ajax({ + type: 'POST', + url: 'index.php?route=/import/simulate-dml', + data: { + 'server': CommonParams.get('server'), + 'db': dbName, + 'ajax_request': '1', + 'sql_query': query, + 'sql_delimiter': delimiter + }, + success: function (response) { + Functions.ajaxRemoveMessage($msgbox); + if (response.success) { + var dialogContent = '
        '; + if (response.sql_data) { + var len = response.sql_data.length; + for (var i = 0; i < len; i++) { + dialogContent += '' + Messages.strSQLQuery + + '' + response.sql_data[i].sql_query + + Messages.strMatchedRows + + ' ' + response.sql_data[i].matched_rows + '
        '; + if (i < len - 1) { + dialogContent += '
        '; + } + } + } else { + dialogContent += response.message; + } + dialogContent += '
        '; + var $dialogContent = $(dialogContent); + var modal = $('#simulateDmlModal'); + modal.modal('show'); + modal.find('.modal-body').first().html($dialogContent); + modal.on('shown.bs.modal', function () { + Functions.highlightSql(modal); + }); + } else { + Functions.ajaxShowMessage(response.error); + } + }, + error: function () { + Functions.ajaxShowMessage(Messages.strErrorProcessingRequest); + } + }); + }); + + /** + * Handles multi submits of results browsing page such as edit, delete and export + */ + $('body').on('click', 'form[name="resultsForm"].ajax button[name="submit_mult"], form[name="resultsForm"].ajax input[name="submit_mult"]', function (e) { + e.preventDefault(); + var $button = $(this); + var action = $button.val(); + var $form = $button.closest('form'); + var argsep = CommonParams.get('arg_separator'); + var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep; + Functions.ajaxShowMessage(); + AJAX.source = $form; + + var url; + if (action === 'edit') { + submitData = submitData + argsep + 'default_action=update'; + url = 'index.php?route=/table/change/rows'; + } else if (action === 'copy') { + submitData = submitData + argsep + 'default_action=insert'; + url = 'index.php?route=/table/change/rows'; + } else if (action === 'export') { + url = 'index.php?route=/table/export/rows'; + } else if (action === 'delete') { + url = 'index.php?route=/table/delete/confirm'; + } else { + return; + } + + $.post(url, submitData, AJAX.responseHandler); + }); + + $(document).on('submit', '.maxRowsForm', function () { + var unlimNumRows = $(this).find('input[name="unlim_num_rows"]').val(); + + var maxRowsCheck = Functions.checkFormElementInRange( + this, + 'session_max_rows', + Messages.strNotValidRowNumber, + 1 + ); + var posCheck = Functions.checkFormElementInRange( + this, + 'pos', + Messages.strNotValidRowNumber, + 0, + unlimNumRows > 0 ? unlimNumRows - 1 : null + ); + + return maxRowsCheck && posCheck; + }); + + $('#insertBtn').on('click', function () { + Functions.insertValueQuery(); + }); + + $('#view_as').on('click', function () { + Functions.selectContent(this, sqlBoxLocked, true); + }); + + $('#sqlquery').on('click', function () { + if ($(this).data('textarea-auto-select') === true) { + Functions.selectContent(this, sqlBoxLocked, true); + } + }); +}); // end $() + +/** + * Starting from some th, change the class of all td under it. + * If isAddClass is specified, it will be used to determine whether to add or remove the class. + * + * @param $thisTh + * @param {string} newClass + * @param isAddClass + */ +Sql.changeClassForColumn = function ($thisTh, newClass, isAddClass) { + // index 0 is the th containing the big T + var thIndex = $thisTh.index(); + var hasBigT = $thisTh.closest('tr').children().first().hasClass('column_action'); + // .eq() is zero-based + if (hasBigT) { + thIndex--; + } + var $table = $thisTh.parents('.table_results'); + if (! $table.length) { + $table = $thisTh.parents('table').siblings('.table_results'); + } + var $tds = $table.find('tbody tr').find('td.data').eq(thIndex); + if (isAddClass === undefined) { + $tds.toggleClass(newClass); + } else { + $tds.toggleClass(newClass, isAddClass); + } +}; + +/** + * Handles browse foreign values modal dialog + * + * @param {object} $thisA reference to the browse foreign value link + */ +Sql.browseForeignDialog = function ($thisA) { + var formId = '#browse_foreign_form'; + var showAllId = '#foreign_showAll'; + var tableId = '#browse_foreign_table'; + var filterId = '#input_foreign_filter'; + var $dialog = null; + var argSep = CommonParams.get('arg_separator'); + var params = $thisA.getPostData(); + params += argSep + 'ajax_request=true'; + $.post($thisA.attr('href'), params, function (data) { + // Creates browse foreign value dialog + $dialog = $('
        ').append(data.message).dialog({ + title: Messages.strBrowseForeignValues, + width: Math.min($(window).width() - 100, 700), + maxHeight: $(window).height() - 100, + dialogClass: 'browse_foreign_modal', + close: function () { + // remove event handlers attached to elements related to dialog + $(tableId).off('click', 'td a.foreign_value'); + $(formId).off('click', showAllId); + $(formId).off('submit'); + // remove dialog itself + $(this).remove(); + }, + modal: true + }); + }).done(function () { + var showAll = false; + $(tableId).on('click', 'td a.foreign_value', function (e) { + e.preventDefault(); + var $input = $thisA.prev('input[type=text]'); + // Check if input exists or get CEdit edit_box + if ($input.length === 0) { + $input = $thisA.closest('.edit_area').prev('.edit_box'); + } + // Set selected value as input value + $input.val($(this).data('key')); + // Unchecks the Ignore checkbox for the current row + $input.trigger('change'); + + $dialog.dialog('close'); + }); + $(formId).on('click', showAllId, function () { + showAll = true; + }); + $(formId).on('submit', function (e) { + e.preventDefault(); + // if filter value is not equal to old value + // then reset page number to 1 + if ($(filterId).val() !== $(filterId).data('old')) { + $(formId).find('select[name=pos]').val('0'); + } + var postParams = $(this).serializeArray(); + // if showAll button was clicked to submit form then + // add showAll button parameter to form + if (showAll) { + postParams.push({ + name: $(showAllId).attr('name'), + value: $(showAllId).val() + }); + } + // updates values in dialog + $.post($(this).attr('action') + '&ajax_request=1', postParams, function (data) { + var $obj = $('
        ').html(data.message); + $(formId).html($obj.find(formId).html()); + $(tableId).html($obj.find(tableId).html()); + }); + showAll = false; + }); + }); +}; + +/** + * Get the auto saved query key + * @return {String} + */ +Sql.getAutoSavedKey = function () { + var db = $('input[name="db"]').val(); + var table = $('input[name="table"]').val(); + var key = db; + if (table !== undefined) { + key += '.' + table; + } + return 'autoSavedSql_' + key; +}; + +Sql.checkSavedQuery = function () { + var key = Sql.getAutoSavedKey(); + + if (isStorageSupported('localStorage') && + typeof window.localStorage.getItem(key) === 'string') { + Functions.ajaxShowMessage(Messages.strPreviousSaveQuery); + } else if (Cookies.get(key)) { + Functions.ajaxShowMessage(Messages.strPreviousSaveQuery); + } +}; + +AJAX.registerOnload('sql.js', function () { + $('body').on('click', 'a.browse_foreign', function (e) { + e.preventDefault(); + Sql.browseForeignDialog($(this)); + }); + + /** + * vertical column highlighting in horizontal mode when hovering over the column header + */ + $(document).on('mouseenter', 'th.column_heading.pointer', function () { + Sql.changeClassForColumn($(this), 'hover', true); + }); + $(document).on('mouseleave', 'th.column_heading.pointer', function () { + Sql.changeClassForColumn($(this), 'hover', false); + }); + + /** + * vertical column marking in horizontal mode when clicking the column header + */ + $(document).on('click', 'th.column_heading.marker', function () { + Sql.changeClassForColumn($(this), 'marked'); + }); + + /** + * create resizable table + */ + $('.sqlqueryresults').trigger('makegrid'); + + /** + * Check if there is any saved query + */ + if (codeMirrorEditor || document.sqlform) { + Sql.checkSavedQuery(); + } +}); + +/** + * Profiling Chart + */ +Sql.makeProfilingChart = function () { + if ($('#profilingchart').length === 0 || + $('#profilingchart').html().length !== 0 || + !$.jqplot || !$.jqplot.Highlighter || !$.jqplot.PieRenderer + ) { + return; + } + + var data = []; + $.each(JSON.parse($('#profilingChartData').html()), function (key, value) { + data.push([key, parseFloat(value)]); + }); + + // Remove chart and data divs contents + $('#profilingchart').html('').show(); + $('#profilingChartData').html(''); + + Functions.createProfilingChart('profilingchart', data); +}; + +/** + * initialize profiling data tables + */ +Sql.initProfilingTables = function () { + if (!$.tablesorter) { + return; + } + // Added to allow two direction sorting + $('#profiletable') + .find('thead th') + .off('click mousedown'); + + $('#profiletable').tablesorter({ + widgets: ['zebra'], + sortList: [[0, 0]], + textExtraction: function (node) { + if (node.children.length > 0) { + return node.children[0].innerHTML; + } else { + return node.innerHTML; + } + } + }); + // Added to allow two direction sorting + $('#profilesummarytable') + .find('thead th') + .off('click mousedown'); + + $('#profilesummarytable').tablesorter({ + widgets: ['zebra'], + sortList: [[1, 1]], + textExtraction: function (node) { + if (node.children.length > 0) { + return node.children[0].innerHTML; + } else { + return node.innerHTML; + } + } + }); +}; + +AJAX.registerOnload('sql.js', function () { + Sql.makeProfilingChart(); + Sql.initProfilingTables(); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/table/find_replace.js b/Sources/php_script/script/phpMyAdmin/js/src/table/find_replace.js new file mode 100644 index 0000000..05cbc08 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/table/find_replace.js @@ -0,0 +1,46 @@ +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('table/find_replace.js', function () { + $('#find_replace_form').off('submit'); + $('#toggle_find').off('click'); +}); + +/** + * Bind events + */ +AJAX.registerOnload('table/find_replace.js', function () { + $('
        ') + .insertAfter('#find_replace_form') + .hide(); + + $('#toggle_find') + .html(Messages.strHideFindNReplaceCriteria) + .on('click', function () { + var $link = $(this); + $('#find_replace_form').slideToggle(); + if ($link.text() === Messages.strHideFindNReplaceCriteria) { + $link.text(Messages.strShowFindNReplaceCriteria); + } else { + $link.text(Messages.strHideFindNReplaceCriteria); + } + return false; + }); + + $('#find_replace_form').on('submit', function (e) { + e.preventDefault(); + var findReplaceForm = $('#find_replace_form'); + Functions.prepareForAjaxRequest(findReplaceForm); + var $msgbox = Functions.ajaxShowMessage(); + $.post(findReplaceForm.attr('action'), findReplaceForm.serialize(), function (data) { + Functions.ajaxRemoveMessage($msgbox); + if (data.success === true) { + $('#toggle_find_div').show(); + $('#toggle_find').trigger('click'); + $('#sqlqueryresultsouter').html(data.preview); + } else { + $('#sqlqueryresultsouter').html(data.error); + } + }); + }); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/table/relation.js b/Sources/php_script/script/phpMyAdmin/js/src/table/relation.js new file mode 100644 index 0000000..ef1afca --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/table/relation.js @@ -0,0 +1,255 @@ +/** + * for table relation + */ + +var TableRelation = {}; + +TableRelation.showHideClauses = function ($thisDropdown) { + if ($thisDropdown.val() === '') { + $thisDropdown.parent().nextAll('span').hide(); + } else { + if ($thisDropdown.is('select[name^="destination_foreign_column"]')) { + $thisDropdown.parent().nextAll('span').show(); + } + } +}; + +/** + * Sets dropdown options to values + * @param $dropdown + * @param values + * @param selectedValue + * @return {void} + */ +TableRelation.setDropdownValues = function ($dropdown, values, selectedValue) { + $dropdown.empty(); + var optionsAsString = ''; + // add an empty string to the beginning for empty selection + values.unshift(''); + $.each(values, function () { + optionsAsString += ''; + }); + $dropdown.append($(optionsAsString)); +}; + +/** + * Retrieves and populates dropdowns to the left based on the selected value + * + * @param $dropdown the dropdown whose value got changed + * @return {void} + */ +TableRelation.getDropdownValues = function ($dropdown) { + var foreignDb = null; + var foreignTable = null; + var $databaseDd; + var $tableDd; + var $columnDd; + var foreign = ''; + // if the changed dropdown is for foreign key constraints + if ($dropdown.is('select[name^="destination_foreign"]')) { + $databaseDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_db"]'); + $tableDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_table"]'); + $columnDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_column"]'); + foreign = '_foreign'; + } else { // internal relations + $databaseDd = $dropdown.parent().find('select[name^="destination_db"]'); + $tableDd = $dropdown.parent().find('select[name^="destination_table"]'); + $columnDd = $dropdown.parent().find('select[name^="destination_column"]'); + } + + // if the changed dropdown is a database selector + if ($dropdown.is('select[name^="destination' + foreign + '_db"]')) { + foreignDb = $dropdown.val(); + // if no database is selected empty table and column dropdowns + if (foreignDb === '') { + TableRelation.setDropdownValues($tableDd, []); + TableRelation.setDropdownValues($columnDd, []); + return; + } + } else { // if a table selector + foreignDb = $databaseDd.val(); + foreignTable = $dropdown.val(); + // if no table is selected empty the column dropdown + if (foreignTable === '') { + TableRelation.setDropdownValues($columnDd, []); + return; + } + } + var $msgbox = Functions.ajaxShowMessage(); + var $form = $dropdown.parents('form'); + var $db = $form.find('input[name="db"]').val(); + var $table = $form.find('input[name="table"]').val(); + var argsep = CommonParams.get('arg_separator'); + var params = 'getDropdownValues=true' + argsep + 'ajax_request=true' + + argsep + 'db=' + encodeURIComponent($db) + + argsep + 'table=' + encodeURIComponent($table) + + argsep + 'foreign=' + (foreign !== '') + + argsep + 'foreignDb=' + encodeURIComponent(foreignDb) + + (foreignTable !== null ? + argsep + 'foreignTable=' + encodeURIComponent(foreignTable) : '' + ); + var $server = $form.find('input[name="server"]'); + if ($server.length > 0) { + params += argsep + 'server=' + $form.find('input[name="server"]').val(); + } + $.ajax({ + type: 'POST', + url: 'index.php?route=/table/relation', + data: params, + dataType: 'json', + success: function (data) { + Functions.ajaxRemoveMessage($msgbox); + if (typeof data !== 'undefined' && data.success) { + // if the changed dropdown is a database selector + if (foreignTable === null) { + // set values for table and column dropdowns + TableRelation.setDropdownValues($tableDd, data.tables); + TableRelation.setDropdownValues($columnDd, []); + } else { // if a table selector + // set values for the column dropdown + var primary = null; + if (typeof data.primary !== 'undefined' + && 1 === data.primary.length + ) { + primary = data.primary[0]; + } + TableRelation.setDropdownValues($columnDd.first(), data.columns, primary); + TableRelation.setDropdownValues($columnDd.slice(1), data.columns); + } + } else { + Functions.ajaxShowMessage(data.error, false); + } + } + }); +}; + +/** + * Unbind all event handlers before tearing down a page + */ +AJAX.registerTeardown('table/relation.js', function () { + $('body').off('change', + 'select[name^="destination_db"], ' + + 'select[name^="destination_table"], ' + + 'select[name^="destination_foreign_db"], ' + + 'select[name^="destination_foreign_table"]' + ); + $('body').off('click', 'a.add_foreign_key_field'); + $('body').off('click', 'a.add_foreign_key'); + $('a.drop_foreign_key_anchor.ajax').off('click'); +}); + +AJAX.registerOnload('table/relation.js', function () { + /** + * Ajax event handler to fetch table/column dropdown values. + */ + $('body').on('change', + 'select[name^="destination_db"], ' + + 'select[name^="destination_table"], ' + + 'select[name^="destination_foreign_db"], ' + + 'select[name^="destination_foreign_table"]', + function () { + TableRelation.getDropdownValues($(this)); + } + ); + + /** + * Ajax event handler to add a column to a foreign key constraint. + */ + $('body').on('click', 'a.add_foreign_key_field', function (event) { + event.preventDefault(); + event.stopPropagation(); + + // Add field. + $(this) + .prev('span') + .clone(true, true) + .insertBefore($(this)) + .find('select') + .val(''); + + // Add foreign field. + var $sourceElem = $('select[name^="destination_foreign_column[' + + $(this).attr('data-index') + ']"]').last().parent(); + $sourceElem + .clone(true, true) + .insertAfter($sourceElem) + .find('select') + .val(''); + }); + + /** + * Ajax event handler to add a foreign key constraint. + */ + $('body').on('click', 'a.add_foreign_key', function (event) { + event.preventDefault(); + event.stopPropagation(); + + var $prevRow = $(this).closest('tr').prev('tr'); + var $newRow = $prevRow.clone(true, true); + + // Update serial number. + var currIndex = $newRow + .find('a.add_foreign_key_field') + .attr('data-index'); + var newIndex = parseInt(currIndex) + 1; + $newRow.find('a.add_foreign_key_field').attr('data-index', newIndex); + + // Update form parameter names. + $newRow.find('select[name^="foreign_key_fields_name"]') + .not($newRow.find('select[name^="foreign_key_fields_name"]').first()) + .find('select[name^="destination_foreign_column"]') + .not($newRow.find('select[name^="foreign_key_fields_name"]') + .not($newRow.find('select[name^="foreign_key_fields_name"]').first()) + .find('select[name^="destination_foreign_column"]').first() + ).each(function () { + $(this).parent().remove(); + }); + $newRow.find('input, select').each(function () { + $(this).attr('name', + $(this).attr('name').replace(/\d/, newIndex) + ); + }); + $newRow.find('input[type="text"]').each(function () { + $(this).val(''); + }); + // Finally add the row. + $newRow.insertAfter($prevRow); + }); + + /** + * Ajax Event handler for 'Drop Foreign key' + */ + $('a.drop_foreign_key_anchor.ajax').on('click', function (event) { + event.preventDefault(); + var $anchor = $(this); + + // Object containing reference to the current field's row + var $currRow = $anchor.parents('tr'); + + var dropQuery = Functions.escapeHtml( + $currRow.children('td') + .children('.drop_foreign_key_msg') + .val() + ); + + var question = Functions.sprintf(Messages.strDoYouReally, dropQuery); + + $anchor.confirm(question, $anchor.attr('href'), function (url) { + var $msg = Functions.ajaxShowMessage(Messages.strDroppingForeignKey, false); + var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); + $.post(url, params, function (data) { + if (data.success === true) { + Functions.ajaxRemoveMessage($msg); + CommonActions.refreshMain(false, function () { + // Do nothing + }); + } else { + Functions.ajaxShowMessage(Messages.strErrorProcessingRequest + ' : ' + data.error, false); + } + }); // end $.post() + }); + }); // end Drop Foreign key + + var windowWidth = $(window).width(); + $('.jsresponsive').css('max-width', (windowWidth - 35) + 'px'); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/transformations/sql_editor.js b/Sources/php_script/script/phpMyAdmin/js/src/transformations/sql_editor.js new file mode 100644 index 0000000..0e0f7fa --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/src/transformations/sql_editor.js @@ -0,0 +1,10 @@ +/** + * SQL syntax highlighting transformation plugin js + * + * @package PhpMyAdmin + */ +AJAX.registerOnload('transformations/sql_editor.js', function () { + $('textarea.transform_sql_editor').each(function () { + Functions.getSqlEditor($(this), {}, 'both'); + }); +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/bootstrap/bootstrap.bundle.min.js b/Sources/php_script/script/phpMyAdmin/js/vendor/bootstrap/bootstrap.bundle.min.js new file mode 100644 index 0000000..cc0a255 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/vendor/bootstrap/bootstrap.bundle.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.1.3 (https://getbootstrap.com/) + * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;sfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach((i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach((o=>{if(o.includes(n)){const n=s[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h=l[r]||{};Object.keys(h).forEach((i=>{const n=i.replace(E,"");if(!a||e.includes(n)){const e=h[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=f(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach((t=>{Object.defineProperty(d,t,{get:()=>i[t]})})),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};class B{constructor(t){(t=r(t))&&(this._element=t,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t=>{this[t]=null}))}_queueCallback(t,e,i=!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.1.3"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;j.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),c(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return"alert"}close(){if(j.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(W,"close"),g(W);const $='[data-bs-toggle="button"]';class z extends B{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function q(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}j.on(document,"click.bs.button.data-api",$,(t=>{t.preventDefault();const e=t.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter((t=>t.startsWith("bs"))).forEach((i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=q(t.dataset[i])})),e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(", ");return this.find(e,t).filter((t=>!c(t)&&l(t)))}},K="carousel",X={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},Y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},Q="next",G="prev",Z="left",J="right",tt={ArrowLeft:J,ArrowRight:Z},et="slid.bs.carousel",it="active",nt=".active.carousel-item";class st extends B{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(nt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void j.one(this._element,et,(()=>this.to(t)));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&j.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(j.on(this._element,"mouseenter.bs.carousel",(t=>this.pause(t))),j.on(this._element,"mouseleave.bs.carousel",(t=>this.cycle(t)))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>this._pointerEvent&&("pen"===t.pointerType||"touch"===t.pointerType),e=e=>{t(e)?this.touchStartX=e.clientX:this._pointerEvent||(this.touchStartX=e.touches[0].clientX)},i=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},n=e=>{t(e)&&(this.touchDeltaX=e.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((t=>this.cycle(t)),500+this._config.interval))};V.find(".carousel-item img",this._element).forEach((t=>{j.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()))})),this._pointerEvent?(j.on(this._element,"pointerdown.bs.carousel",(t=>e(t))),j.on(this._element,"pointerup.bs.carousel",(t=>n(t))),this._element.classList.add("pointer-event")):(j.on(this._element,"touchstart.bs.carousel",(t=>e(t))),j.on(this._element,"touchmove.bs.carousel",(t=>i(t))),j.on(this._element,"touchend.bs.carousel",(t=>n(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(".active",this._indicatorsElement);e.classList.remove(it),e.removeAttribute("aria-current");const i=V.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=st.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains("carousel"))return;const i={...U.getDataAttributes(e),...U.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(i.interval=!1),st.carouselInterface(e,i),s&&st.getInstance(e).to(s),t.preventDefault()}}j.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",st.dataApiClickHandler),j.on(window,"load.bs.carousel.data-api",(()=>{const t=V.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;et===this._element));null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(ut,this._config.parent);e=V.find(".collapse.show, .collapse.collapsing",this._config.parent).filter((e=>!t.includes(e)))}const i=V.findOne(this._selector);if(e.length){const n=e.find((t=>i!==t));if(t=n?pt.getInstance(n):null,t&&t._isTransitioning)return}if(j.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach((e=>{i!==e&&pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,"bs.collapse",null)}));const n=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]="",j.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[n]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_getConfig(t){return(t={...rt,...U.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=r(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e=>!t.includes(e))).forEach((t=>{const e=n(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach((t=>{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute("aria-expanded",e)}))}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}j.on(document,"click.bs.collapse.data-api",ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this);V.find(e).forEach((t=>{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt="top",gt="bottom",_t="right",bt="left",vt="auto",yt=[mt,gt,_t,bt],wt="start",Et="end",At="clippingParents",Tt="viewport",Ot="popper",Ct="reference",kt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+Et])}),[]),Lt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+Et])}),[]),xt="beforeRead",Dt="read",St="afterRead",Nt="beforeMain",It="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",Bt=[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||"").toLowerCase():null}function Wt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Rt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Rt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Ut(t){return t.split("-")[0]}function Vt(t,e){var i=t.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e=Vt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return["table","td","th"].indexOf(Rt(t))>=0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return"html"===Rt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)&&"fixed"!==Yt(t).position?t.offsetParent:null}function te(t){for(var e=Wt(t),i=Jt(t);i&&Qt(i)&&"static"===Yt(i).position;)i=Jt(i);return i&&("html"===Rt(i)||"body"===Rt(i)&&"static"===Yt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&zt(t)&&"fixed"===Yt(t).position)return null;for(var i=Zt(t);zt(i)&&["html","body"].indexOf(Rt(i))<0;){var n=Yt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function ee(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var ie=Math.max,ne=Math.min,se=Math.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Ut(i.placement),l=ee(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return re("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Kt(o),u="y"===l?mt:bt,f="y"===l?gt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=te(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=oe(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Xt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ce(t){return t.split("-")[1]}var he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):"function"==typeof h?h(r):r,u=d.x,f=void 0===u?0:u,p=d.y,m=void 0===p?0:p,g=r.hasOwnProperty("x"),_=r.hasOwnProperty("y"),b=bt,v=mt,y=window;if(c){var w=te(i),E="clientHeight",A="clientWidth";w===Wt(i)&&"static"!==Yt(w=Gt(i)).position&&"absolute"===a&&(E="scrollHeight",A="scrollWidth"),w=w,s!==mt&&(s!==bt&&s!==_t||o!==Et)||(v=gt,m-=w[E]-n.height,m*=l?1:-1),s!==bt&&(s!==mt&&s!==gt||o!==Et)||(b=_t,f-=w[A]-n.width,f*=l?1:-1)}var T,O=Object.assign({position:a},c&&he);return l?Object.assign({},O,((T={})[v]=_?"0":"",T[b]=g?"0":"",T.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",T)):Object.assign({},O,((e={})[v]=_?m+"px":"",e[b]=g?f+"px":"",e.transform="",e))}const ue={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var fe={passive:!0};const pe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Wt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,fe)})),a&&l.addEventListener("resize",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,fe)})),a&&l.removeEventListener("resize",i.update,fe)}},data:{}};var me={left:"right",right:"left",bottom:"top",top:"bottom"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e={start:"end",end:"start"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Wt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e=Yt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return["html","body","#document"].indexOf(Rt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Wt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e===Tt?Te(function(t){var e=Wt(t),i=Gt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e=Vt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=Gt(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ie(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ie(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return"rtl"===Yt(s||i).direction&&(a+=ie(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Ut(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case mt:e={x:a,y:i.y-n.height};break;case gt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?ee(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Et:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?At:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ot:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=re("number"!=typeof p?p:ae(p,yt)),g=h===Ot?Ct:Ot,_=t.rects.popper,b=t.elements[u?g:h],v=function(t,e,i){var n="clippingParents"===e?function(t){var e=Ae(Zt(t)),i=["absolute","fixed"].indexOf(Yt(t).position)>=0&&zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)&&Xt(t,i)&&"body"!==Rt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Oe(t,i);return e.top=ie(n.top,e.top),e.right=ne(n.right,e.right),e.bottom=ne(n.bottom,e.bottom),e.left=ie(n.left,e.left),e}),Oe(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y=Vt(t.elements.reference),w=Ce({reference:y,element:_,strategy:"absolute",placement:s}),E=Te(Object.assign({},_,w)),A=h===Ot?E:y,T={top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O=t.modifiersData.offset;if(h===Ot&&O){var C=O[s];Object.keys(T).forEach((function(t){var e=[_t,gt].indexOf(t)>=0?1:-1,i=[mt,gt].indexOf(t)>=0?"y":"x";T[t]+=C[i]*e}))}return T}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Lt:l,h=ce(n),d=h?a?kt:kt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=Ut(g),b=l||(_!==g&&p?function(t){if(Ut(t)===vt)return[];var e=ge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)===vt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O=0,D=x?"width":"height",S=ke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?_t:bt:L?gt:mt;y[D]>w[D]&&(N=ge(N));var I=ge(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]>=0}))}const Ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Ie={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=Lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Ut(t),s=[bt,mt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Ce({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},je={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Ut(e.placement),b=ce(e.placement),v=!b,y=ee(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?mt:bt,L="y"===y?gt:_t,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P=b===wt?A[x]:T[x],j=b===wt?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?Kt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],$=oe(0,A[x],H[x]),z=v?A[x]/2-I-$-R-O:P-$-R-O,q=v?-A[x]/2+I+$+W+O:j+$+W+O,F=e.elements.arrow&&te(e.elements.arrow),U=F?"y"===y?F.clientTop||0:F.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+z-V-U,X=E[y]+q-V;if(o){var Y=oe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?mt:bt,G="x"===y?gt:_t,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=oe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function Me(t,e,i){void 0===i&&(i=!1);var n=zt(e);zt(e)&&function(t){var e=t.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r=Gt(e),a=Vt(t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(n||!n&&!i)&&(("body"!==Rt(e)||we(r))&&(l=(s=e)!==Wt(s)&&zt(s)?{scrollLeft:(o=s).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c=Vt(e)).x+=e.clientLeft,c.y+=e.clientTop):r&&(c.x=ye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Re(){for(var t=arguments.length,e=new Array(t),i=0;ij.on(t,"mouseover",d))),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){j.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute("aria-expanded","false"),U.removeDataAttribute(this._menu,"popper"),j.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),"object"==typeof t.reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(void 0===Fe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:o(this._config.reference)?e=r(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find((t=>"applyStyles"===t.name&&!1===t.enabled));this._popper=qe(e,this._menu,i),n&&U.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ri;if(t.classList.contains("dropstart"))return ai;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(l);i.length&&v(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=V.find(ti);for(let i=0,n=e.length;ie+t)),this._setElementAttributes(di,"paddingRight",(e=>e+t)),this._setElementAttributes(ui,"marginRight",(e=>e-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(di,"paddingRight"),this._resetElementAttributes(ui,"marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=U.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]=i)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const pi={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},mi={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"},gi="show",_i="mousedown.bs.backdrop";class bi{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()=>{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()=>{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...pi,..."object"==typeof t?t:{}}).rootElement=r(t.rootElement),a("backdrop",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()=>{_(this._config.clickCallback)})),this._isAppended=!0)}dispose(){this._isAppended&&(j.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi={trapElement:null,autofocus:!0},yi={trapElement:"element",autofocus:"boolean"},wi=".bs.focustrap",Ei="backward";class Ai{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),j.off(document,wi),j.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),j.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,j.off(document,wi))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=V.focusableChildren(i);0===n.length?i.focus():this._lastTabNavDirection===Ei?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ei:"forward")}_getConfig(t){return t={...vi,..."object"==typeof t?t:{}},a("focustrap",t,yi),t}}const Ti="modal",Oi="Escape",Ci={backdrop:!0,keyboard:!0,focus:!0},ki={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},Li="hidden.bs.modal",xi="show.bs.modal",Di="resize.bs.modal",Si="click.dismiss.bs.modal",Ni="keydown.dismiss.bs.modal",Ii="mousedown.dismiss.bs.modal",Pi="modal-open",ji="show",Mi="modal-static";class Hi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()=>{j.one(this._element,"mouseup.dismiss.bs.modal",(t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()=>this._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t=>j.off(t,".bs.modal"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t={...Ci,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&u(this._element),this._element.classList.add(ji),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,j.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t=>{this._config.keyboard&&t.key===Oi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!==Oi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()=>this._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(j.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains(Mi)||(n||(i.overflowY="hidden"),t.add(Mi),this._queueCallback((()=>{t.remove(Mi),n||this._queueCallback((()=>{i.overflowY=""}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=`${e}px`),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}j.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),j.one(e,xi,(t=>{t.defaultPrevented||j.one(e,Li,(()=>{l(this)&&this.focus()}))}));const i=V.findOne(".modal.show");i&&Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi="offcanvas",Ri={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},$i="show",zi=".offcanvas.show",qi="hidden.bs.offcanvas";class Fi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($i),this._queueCallback((()=>{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(j.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ri,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()}))}static jQueryInterface(t){return this.each((function(){const e=Fi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}j.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;j.one(e,qi,(()=>{l(this)&&this.focus()}));const i=V.findOne(zi);i&&i!==e&&Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,"load.bs.offcanvas.data-api",(()=>V.find(zi).forEach((t=>Fi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Vi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ki=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xi=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n=e.filter((t=>t instanceof RegExp));for(let t=0,e=n.length;t{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi="tooltip",Gi=new Set(["sanitize","allowList","sanitizeFn"]),Zi={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ji={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},tn={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},nn="fade",sn="show",on="show",rn="out",an=".tooltip-inner",ln=".modal",cn="hide.bs.modal",hn="hover",dn="focus";class un extends B{constructor(t,e){if(void 0===Fe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=j.trigger(this._element,this.constructor.Event.SHOW),e=h(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;"tooltip"===this.constructor.NAME&&this.tip&&this.getTitle()!==this.tip.querySelector(an).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add(nn);const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=qe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>{j.on(t,"mouseover",d)}));const c=this.tip.classList.contains(nn);this._queueCallback((()=>{const t=this._hoverState;this._hoverState=null,j.trigger(this._element,this.constructor.Event.SHOWN),t===rn&&this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t=this.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(nn);this._queueCallback((()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n=V.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return o(e)?(e=r(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Yi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach((t=>{if("click"===t)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t=>this.toggle(t)));else if("manual"!==t){const e=t===hn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=t===hn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t=>this._enter(t))),j.on(this._element,i,this._config.selector,(t=>this._leave(t)))}})),this._hideModalHandler=()=>{this._element&&this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?dn:hn]=!0),e.getTipElement().classList.contains(sn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e._config.delay&&e._config.delay.show?e._timeout=setTimeout((()=>{e._hoverState===on&&e.show()}),e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?dn:hn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=rn,e._config.delay&&e._config.delay.hide?e._timeout=setTimeout((()=>{e._hoverState===rn&&e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=U.getDataAttributes(this._element);return Object.keys(e).forEach((t=>{Gi.has(t)&&delete e[t]})),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize&&(t.template=Yi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map((t=>t.trim())).forEach((e=>t.classList.remove(e)))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn={...un.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},pn={...un.DefaultType,content:"(string|element|function)"},mn={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class gn extends un{static get Default(){return fn}static get NAME(){return"popover"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=gn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(gn);const _n="scrollspy",bn={offset:10,method:"auto",target:""},vn={offset:"number",method:"string",target:"(string|element)"},yn="active",wn=".nav-link, .list-group-item, .dropdown-item",En="position";class An extends B{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,j.on(this._scrollElement,"scroll.bs.scrollspy",(()=>this._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":En,e="auto"===this._config.method?t:this._config.method,n=e===En?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(wn,this._config.target).map((t=>{const s=i(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t=>t)).sort(((t,e)=>t[0]-e[0])).forEach((t=>{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...bn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=r(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`)),i=V.findOne(e.join(","),this._config.target);i.classList.add(yn),i.classList.contains("dropdown-item")?V.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add(yn):V.parents(i,".nav, .list-group").forEach((t=>{V.prev(t,".nav-link, .list-group-item").forEach((t=>t.classList.add(yn))),V.prev(t,".nav-item").forEach((t=>{V.children(t,".nav-link").forEach((t=>t.classList.add(yn)))}))})),j.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t=>t.classList.contains(yn))).forEach((t=>t.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e=An.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(window,"load.bs.scrollspy.data-api",(()=>{V.find('[data-bs-spy="scroll"]').forEach((t=>new An(t)))})),g(An);const Tn="active",On="fade",Cn="show",kn=".active",Ln=":scope > li > .active";class xn extends B{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Tn))return;let t;const e=n(this._element),i=this._element.closest(".nav, .list-group");if(i){const e="UL"===i.nodeName||"OL"===i.nodeName?Ln:kn;t=V.find(e,i),t=t[t.length-1]}const s=t?j.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(j.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{j.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),j.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?V.children(e,kn):V.find(Ln,e))[0],s=i&&n&&n.classList.contains(On),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t=V.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove(Tn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add(Tn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u(t),t.classList.contains(On)&&t.classList.add(Cn);let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&V.find(".dropdown-toggle",e).forEach((t=>t.classList.add(Tn))),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn="toast",Sn="hide",Nn="show",In="showing",Pn={animation:"boolean",autohide:"boolean",delay:"number"},jn={animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.remove(In),j.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)&&(j.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)&&this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t={...jn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),j.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Mn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/codemirror/addon/runmode/runmode.js b/Sources/php_script/script/phpMyAdmin/js/vendor/codemirror/addon/runmode/runmode.js new file mode 100644 index 0000000..f5d58e2 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/vendor/codemirror/addon/runmode/runmode.js @@ -0,0 +1,76 @@ +// CodeMirror, copyright (c) by Marijn Haverbeke and others +// Distributed under an MIT license: https://codemirror.net/LICENSE + +(function(mod) { + if (typeof exports == "object" && typeof module == "object") // CommonJS + mod(require("../../lib/codemirror")); + else if (typeof define == "function" && define.amd) // AMD + define(["../../lib/codemirror"], mod); + else // Plain browser env + mod(CodeMirror); +})(function(CodeMirror) { +"use strict"; + +CodeMirror.runMode = function(string, modespec, callback, options) { + var mode = CodeMirror.getMode(CodeMirror.defaults, modespec); + var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize; + + // Create a tokenizing callback function if passed-in callback is a DOM element. + if (callback.appendChild) { + var ie = /MSIE \d/.test(navigator.userAgent); + var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); + var node = callback, col = 0; + node.innerHTML = ""; + callback = function(text, style) { + if (text == "\n") { + // Emitting LF or CRLF on IE8 or earlier results in an incorrect display. + // Emitting a carriage return makes everything ok. + node.appendChild(document.createTextNode(ie_lt9 ? '\r' : text)); + col = 0; + return; + } + var content = ""; + // replace tabs + for (var pos = 0;;) { + var idx = text.indexOf("\t", pos); + if (idx == -1) { + content += text.slice(pos); + col += text.length - pos; + break; + } else { + col += idx - pos; + content += text.slice(pos, idx); + var size = tabSize - col % tabSize; + col += size; + for (var i = 0; i < size; ++i) content += " "; + pos = idx + 1; + } + } + // Create a node with token style and append it to the callback DOM element. + if (style) { + var sp = node.appendChild(document.createElement("span")); + sp.className = "cm-" + style.replace(/ +/g, " cm-"); + sp.appendChild(document.createTextNode(content)); + } else { + node.appendChild(document.createTextNode(content)); + } + }; + } + + var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); + for (var i = 0, e = lines.length; i < e; ++i) { + if (i) callback("\n"); + var stream = new CodeMirror.StringStream(lines[i], null, { + lookAhead: function(n) { return lines[i + n] }, + baseToken: function() {} + }); + if (!stream.string && mode.blankLine) mode.blankLine(state); + while (!stream.eol()) { + var style = mode.token(stream, state); + callback(stream.current(), style, i, stream.start, state, mode); + stream.start = stream.pos; + } + } +}; + +}); diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js b/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js new file mode 100644 index 0000000..3cedcfd --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js @@ -0,0 +1,203 @@ +/** + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: 1.0.9 + * Revision: dff2f04 + * + * Copyright (c) 2009-2016 Chris Leonello + * jqPlot is currently available for use in all personal or commercial projects + * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL + * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * Although not required, the author would appreciate an email letting him + * know of any substantial use of jqPlot. You can reach the author at: + * chris at jqplot dot com or see http://www.jqplot.com/info.php . + * + * If you are feeling kind and generous, consider supporting the project by + * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + */ +(function($) { + /** + * Class: $.jqplot.CanvasAxisLabelRenderer + * Renderer to draw axis labels with a canvas element to support advanced + * featrues such as rotated text. This renderer uses a separate rendering engine + * to draw the text on the canvas. Two modes of rendering the text are available. + * If the browser has native font support for canvas fonts (currently Mozila 3.5 + * and Safari 4), you can enable text rendering with the canvas fillText method. + * You do so by setting the "enableFontSupport" option to true. + * + * Browsers lacking native font support will have the text drawn on the canvas + * using the Hershey font metrics. Even if the "enableFontSupport" option is true + * non-supporting browsers will still render with the Hershey font. + * + */ + $.jqplot.CanvasAxisLabelRenderer = function(options) { + // Group: Properties + + // prop: angle + // angle of text, measured clockwise from x axis. + this.angle = 0; + // name of the axis associated with this tick + this.axis; + // prop: show + // whether or not to show the tick (mark and label). + this.show = true; + // prop: showLabel + // whether or not to show the label. + this.showLabel = true; + // prop: label + // label for the axis. + this.label = ''; + // prop: fontFamily + // CSS spec for the font-family css attribute. + // Applies only to browsers supporting native font rendering in the + // canvas tag. Currently Mozilla 3.5 and Safari 4. + this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'; + // prop: fontSize + // CSS spec for font size. + this.fontSize = '11pt'; + // prop: fontWeight + // CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100 - 900 + this.fontWeight = 'normal'; + // prop: fontStretch + // Multiplier to condense or expand font width. + // Applies only to browsers which don't support canvas native font rendering. + this.fontStretch = 1.0; + // prop: textColor + // css spec for the color attribute. + this.textColor = '#666666'; + // prop: enableFontSupport + // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. + // If true, label will be drawn with canvas tag native support for fonts. + // If false, label will be drawn with Hershey font metrics. + this.enableFontSupport = true; + // prop: pt2px + // Point to pixel scaling factor, used for computing height of bounding box + // around a label. The labels text renderer has a default setting of 1.4, which + // should be suitable for most fonts. Leave as null to use default. If tops of + // letters appear clipped, increase this. If bounding box seems too big, decrease. + // This is an issue only with the native font renderering capabilities of Mozilla + // 3.5 and Safari 4 since they do not provide a method to determine the font height. + this.pt2px = null; + + this._elem; + this._ctx; + this._plotWidth; + this._plotHeight; + this._plotDimensions = {height:null, width:null}; + + $.extend(true, this, options); + + if (options.angle == null && this.axis != 'xaxis' && this.axis != 'x2axis') { + this.angle = -90; + } + + var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily}; + if (this.pt2px) { + ropts.pt2px = this.pt2px; + } + + if (this.enableFontSupport) { + if ($.jqplot.support_canvas_text()) { + this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts); + } + + else { + this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); + } + } + else { + this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); + } + }; + + $.jqplot.CanvasAxisLabelRenderer.prototype.init = function(options) { + $.extend(true, this, options); + this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily}); + }; + + // return width along the x axis + // will check first to see if an element exists. + // if not, will return the computed text box width. + $.jqplot.CanvasAxisLabelRenderer.prototype.getWidth = function(ctx) { + if (this._elem) { + return this._elem.outerWidth(true); + } + else { + var tr = this._textRenderer; + var l = tr.getWidth(ctx); + var h = tr.getHeight(ctx); + var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l); + return w; + } + }; + + // return height along the y axis. + $.jqplot.CanvasAxisLabelRenderer.prototype.getHeight = function(ctx) { + if (this._elem) { + return this._elem.outerHeight(true); + } + else { + var tr = this._textRenderer; + var l = tr.getWidth(ctx); + var h = tr.getHeight(ctx); + var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l); + return w; + } + }; + + $.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad = function() { + var a = this.angle * Math.PI/180; + return a; + }; + + $.jqplot.CanvasAxisLabelRenderer.prototype.draw = function(ctx, plot) { + // Memory Leaks patch + if (this._elem) { + if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { + window.G_vmlCanvasManager.uninitElement(this._elem.get(0)); + } + + this._elem.emptyForce(); + this._elem = null; + } + + // create a canvas here, but can't draw on it untill it is appended + // to dom for IE compatability. + var elem = plot.canvasManager.getCanvas(); + + this._textRenderer.setText(this.label, ctx); + var w = this.getWidth(ctx); + var h = this.getHeight(ctx); + elem.width = w; + elem.height = h; + elem.style.width = w; + elem.style.height = h; + + elem = plot.canvasManager.initCanvas(elem); + + this._elem = $(elem); + this._elem.css({ position: 'absolute'}); + this._elem.addClass('jqplot-'+this.axis+'-label'); + + elem = null; + return this._elem; + }; + + $.jqplot.CanvasAxisLabelRenderer.prototype.pack = function() { + this._textRenderer.draw(this._elem.get(0).getContext("2d"), this.label); + }; + +})(jQuery); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.highlighter.js b/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.highlighter.js new file mode 100644 index 0000000..b438b3c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.highlighter.js @@ -0,0 +1,484 @@ +/** + * jqPlot + * Pure JavaScript plotting plugin using jQuery + * + * Version: 1.0.9 + * Revision: dff2f04 + * + * Copyright (c) 2009-2016 Chris Leonello + * jqPlot is currently available for use in all personal or commercial projects + * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL + * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can + * choose the license that best suits your project and use it accordingly. + * + * Although not required, the author would appreciate an email letting him + * know of any substantial use of jqPlot. You can reach the author at: + * chris at jqplot dot com or see http://www.jqplot.com/info.php . + * + * If you are feeling kind and generous, consider supporting the project by + * making a donation at: http://www.jqplot.com/donate.php . + * + * sprintf functions contained in jqplot.sprintf.js by Ash Searle: + * + * version 2007.04.27 + * author Ash Searle + * http://hexmen.com/blog/2007/03/printf-sprintf/ + * http://hexmen.com/js/sprintf.js + * The author (Ash Searle) has placed this code in the public domain: + * "This code is unrestricted: you are free to use it however you like." + * + */ +(function($) { + $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]); + + /** + * Class: $.jqplot.Highlighter + * Plugin which will highlight data points when they are moused over. + * + * To use this plugin, include the js + * file in your source: + * + * > + * + * A tooltip providing information about the data point is enabled by default. + * To disable the tooltip, set "showTooltip" to false. + * + * You can control what data is displayed in the tooltip with various + * options. The "tooltipAxes" option controls whether the x, y or both + * data values are displayed. + * + * Some chart types (e.g. hi-low-close) have more than one y value per + * data point. To display the additional values in the tooltip, set the + * "yvalues" option to the desired number of y values present (3 for a hlc chart). + * + * By default, data values will be formatted with the same formatting + * specifiers as used to format the axis ticks. A custom format code + * can be supplied with the tooltipFormatString option. This will apply + * to all values in the tooltip. + * + * For more complete control, the "formatString" option can be set. This + * Allows conplete control over tooltip formatting. Values are passed to + * the format string in an order determined by the "tooltipAxes" and "yvalues" + * options. So, if you have a hi-low-close chart and you just want to display + * the hi-low-close values in the tooltip, you could set a formatString like: + * + * > highlighter: { + * > tooltipAxes: 'y', + * > yvalues: 3, + * > formatString:' + * > + * > + * >
        hi:%s
        low:%s
        close:%s
        ' + * > } + * + */ + $.jqplot.Highlighter = function(options) { + // Group: Properties + // + //prop: show + // true to show the highlight. + this.show = $.jqplot.config.enablePlugins; + // prop: markerRenderer + // Renderer used to draw the marker of the highlighted point. + // Renderer will assimilate attributes from the data point being highlighted, + // so no attributes need set on the renderer directly. + // Default is to turn off shadow drawing on the highlighted point. + this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false}); + // prop: showMarker + // true to show the marker + this.showMarker = true; + // prop: lineWidthAdjust + // Pixels to add to the lineWidth of the highlight. + this.lineWidthAdjust = 2.5; + // prop: sizeAdjust + // Pixels to add to the overall size of the highlight. + this.sizeAdjust = 5; + // prop: showTooltip + // Show a tooltip with data point values. + this.showTooltip = true; + // prop: tooltipLocation + // Where to position tooltip, 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' + this.tooltipLocation = 'nw'; + // prop: fadeTooltip + // true = fade in/out tooltip, flase = show/hide tooltip + this.fadeTooltip = true; + // prop: tooltipFadeSpeed + // 'slow', 'def', 'fast', or number of milliseconds. + this.tooltipFadeSpeed = "fast"; + // prop: tooltipOffset + // Pixel offset of tooltip from the highlight. + this.tooltipOffset = 2; + // prop: tooltipAxes + // Which axes to display in tooltip, 'x', 'y' or 'both', 'xy' or 'yx' + // 'both' and 'xy' are equivalent, 'yx' reverses order of labels. + this.tooltipAxes = 'both'; + // prop; tooltipSeparator + // String to use to separate x and y axes in tooltip. + this.tooltipSeparator = ', '; + // prop; tooltipContentEditor + // Function used to edit/augment/replace the formatted tooltip contents. + // Called as str = tooltipContentEditor(str, seriesIndex, pointIndex) + // where str is the generated tooltip html and seriesIndex and pointIndex identify + // the data point being highlighted. Should return the html for the tooltip contents. + this.tooltipContentEditor = null; + // prop: useAxesFormatters + // Use the x and y axes formatters to format the text in the tooltip. + this.useAxesFormatters = true; + // prop: tooltipFormatString + // sprintf format string for the tooltip. + // Uses Ash Searle's javascript sprintf implementation + // found here: http://hexmen.com/blog/2007/03/printf-sprintf/ + // See http://perldoc.perl.org/functions/sprintf.html for reference. + // Additional "p" and "P" format specifiers added by Chris Leonello. + this.tooltipFormatString = '%.5P'; + // prop: formatString + // alternative to tooltipFormatString + // will format the whole tooltip text, populating with x, y values as + // indicated by tooltipAxes option. So, you could have a tooltip like: + // 'Date: %s, number of cats: %d' to format the whole tooltip at one go. + // If useAxesFormatters is true, values will be formatted according to + // Axes formatters and you can populate your tooltip string with + // %s placeholders. + this.formatString = null; + // prop: yvalues + // Number of y values to expect in the data point array. + // Typically this is 1. Certain plots, like OHLC, will + // have more y values in each data point array. + this.yvalues = 1; + // prop: bringSeriesToFront + // This option requires jQuery 1.4+ + // True to bring the series of the highlighted point to the front + // of other series. + this.bringSeriesToFront = false; + this._tooltipElem; + this.isHighlighting = false; + this.currentNeighbor = null; + + $.extend(true, this, options); + }; + + var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w']; + var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7}; + var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e']; + + // axis.renderer.tickrenderer.formatter + + // called with scope of plot + $.jqplot.Highlighter.init = function (target, data, opts){ + var options = opts || {}; + // add a highlighter attribute to the plot + this.plugins.highlighter = new $.jqplot.Highlighter(options.highlighter); + }; + + // called within scope of series + $.jqplot.Highlighter.parseOptions = function (defaults, options) { + // Add a showHighlight option to the series + // and set it to true by default. + this.showHighlight = true; + }; + + // called within context of plot + // create a canvas which we can draw on. + // insert it before the eventCanvas, so eventCanvas will still capture events. + $.jqplot.Highlighter.postPlotDraw = function() { + // Memory Leaks patch + if (this.plugins.highlighter && this.plugins.highlighter.highlightCanvas) { + this.plugins.highlighter.highlightCanvas.resetCanvas(); + this.plugins.highlighter.highlightCanvas = null; + } + + if (this.plugins.highlighter && this.plugins.highlighter._tooltipElem) { + this.plugins.highlighter._tooltipElem.emptyForce(); + this.plugins.highlighter._tooltipElem = null; + } + + this.plugins.highlighter.highlightCanvas = new $.jqplot.GenericCanvas(); + + this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding, 'jqplot-highlight-canvas', this._plotDimensions, this)); + this.plugins.highlighter.highlightCanvas.setContext(); + + var elem = document.createElement('div'); + this.plugins.highlighter._tooltipElem = $(elem); + elem = null; + this.plugins.highlighter._tooltipElem.addClass('jqplot-highlighter-tooltip'); + this.plugins.highlighter._tooltipElem.css({position:'absolute', display:'none'}); + + this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem); + }; + + $.jqplot.preInitHooks.push($.jqplot.Highlighter.init); + $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Highlighter.parseOptions); + $.jqplot.postDrawHooks.push($.jqplot.Highlighter.postPlotDraw); + + function draw(plot, neighbor) { + var hl = plot.plugins.highlighter; + var s = plot.series[neighbor.seriesIndex]; + var smr = s.markerRenderer; + var mr = hl.markerRenderer; + mr.style = smr.style; + mr.lineWidth = smr.lineWidth + hl.lineWidthAdjust; + mr.size = smr.size + hl.sizeAdjust; + var rgba = $.jqplot.getColorComponents(smr.color); + var newrgb = [rgba[0], rgba[1], rgba[2]]; + var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]); + mr.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')'; + mr.init(); + var x_pos = s.gridData[neighbor.pointIndex][0]; + var y_pos = s.gridData[neighbor.pointIndex][1]; + // Adjusting with s._barNudge + if (s.renderer.constructor == $.jqplot.BarRenderer) { + if (s.barDirection == "vertical") { + x_pos += s._barNudge; + } + else { + y_pos -= s._barNudge; + } + } + mr.draw(x_pos, y_pos, hl.highlightCanvas._ctx); + } + + function showTooltip(plot, series, neighbor) { + // neighbor looks like: {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]} + // gridData should be x,y pixel coords on the grid. + // add the plot._gridPadding to that to get x,y in the target. + var hl = plot.plugins.highlighter; + var elem = hl._tooltipElem; + var serieshl = series.highlighter || {}; + + var opts = $.extend(true, {}, hl, serieshl); + + if (opts.useAxesFormatters) { + var xf = series._xaxis._ticks[0].formatter; + var yf = series._yaxis._ticks[0].formatter; + var xfstr = series._xaxis._ticks[0].formatString; + var yfstr = series._yaxis._ticks[0].formatString; + var str; + var xstr = xf(xfstr, neighbor.data[0]); + var ystrs = []; + for (var i=1; ir;){if(o-r>600){var a=o-r+1,l=i-r+1,h=Math.log(a),u=.5*Math.exp(2*h/3),c=.5*Math.sqrt(h*u*(a-u)/a)*(l-a/2<0?-1:1);t(n,i,Math.max(r,Math.floor(i-l*u/a+c)),Math.min(o,Math.floor(i+(a-l)*u/a+c)),s)}var p=n[i],f=r,d=o;for(e(n,r,i),s(n[o],p)>0&&e(n,r,o);f0;)d--}0===s(n[r],p)?e(n,r,d):e(n,++d,o),d<=i&&(r=d+1),i<=d&&(o=d-1)}}(t,i,r||0,o||t.length-1,s||n)}function e(t,e,n){var i=t[e];t[e]=t[n],t[n]=i}function n(t,e){return te?1:0}var i=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function r(t,e,n){if(!n)return e.indexOf(t);for(var i=0;i=t.minX&&e.maxY>=t.minY}function d(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(e,n,i,r,o){for(var s=[n,i];s.length;)if(!((i=s.pop())-(n=s.pop())<=r)){var a=n+Math.ceil((i-n)/r/2)*r;t(e,a,n,i,o),s.push(n,a,a,i)}}return i.prototype.all=function(){return this._all(this.data,[])},i.prototype.search=function(t){var e=this.data,n=[];if(!f(t,e))return n;for(var i=this.toBBox,r=[];e;){for(var o=0;o=0&&r[e].children.length>this._maxEntries;)this._split(r,e),e--;this._adjustParentBBoxes(i,r,e)},i.prototype._split=function(t,e){var n=t[e],i=n.children.length,r=this._minEntries;this._chooseSplitAxis(n,r,i);var s=this._chooseSplitIndex(n,r,i),a=d(n.children.splice(s,n.children.length-s));a.height=n.height,a.leaf=n.leaf,o(n,this.toBBox),o(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(n,a)},i.prototype._splitRoot=function(t,e){this.data=d([t,e]),this.data.height=t.height+1,this.data.leaf=!1,o(this.data,this.toBBox)},i.prototype._chooseSplitIndex=function(t,e,n){for(var i,r,o,a,l,h,c,p=1/0,f=1/0,d=e;d<=n-e;d++){var g=s(t,0,d,this.toBBox),_=s(t,d,n,this.toBBox),y=(r=g,o=_,void 0,void 0,void 0,void 0,a=Math.max(r.minX,o.minX),l=Math.max(r.minY,o.minY),h=Math.min(r.maxX,o.maxX),c=Math.min(r.maxY,o.maxY),Math.max(0,h-a)*Math.max(0,c-l)),v=u(g)+u(_);y=e;f--){var d=t.children[f];a(l,t.leaf?r(d):d),h+=c(l)}return h},i.prototype._adjustParentBBoxes=function(t,e,n){for(var i=n;i>=0;i--)a(e[i],t)},i.prototype._condense=function(t){for(var e=t.length-1,n=void 0;e>=0;e--)0===t[e].children.length?e>0?(n=t[e-1].children).splice(n.indexOf(t[e]),1):this.clear():o(t[e],this.toBBox)},i}()}},e={};function n(i){var r=e[i];if(void 0!==r)return r.exports;var o=e[i]={exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}n.d=function(t,e){for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};var i={};return function(){"use strict";n.d(i,{default:function(){return Ch}});var t=function(){function t(t){this.propagationStopped,this.defaultPrevented,this.type=t,this.target=null}return t.prototype.preventDefault=function(){this.defaultPrevented=!0},t.prototype.stopPropagation=function(){this.propagationStopped=!0},t}(),e="propertychange",r=function(){function t(){this.disposed=!1}return t.prototype.dispose=function(){this.disposed||(this.disposed=!0,this.disposeInternal())},t.prototype.disposeInternal=function(){},t}();function o(t,e){return t>e?1:t0){for(r=1;r0?r-1:r:t[r-1]-e0)},n.prototype.removeEventListener=function(t,e){var n=this.listeners_&&this.listeners_[t];if(n){var i=n.indexOf(e);-1!==i&&(this.pendingRemovals_&&t in this.pendingRemovals_?(n[i]=p,++this.pendingRemovals_[t]):(n.splice(i,1),0===n.length&&delete this.listeners_[t]))}},n}(r),x="change",C="contextmenu",w="click",S="keydown",E="keypress",T="touchmove",b="wheel";function O(t,e,n,i,r){if(i&&i!==t&&(n=n.bind(i)),r){var o=n;n=function(){t.removeEventListener(e,n),o.apply(this,arguments)}}var s={target:t,type:e,listener:n};return t.addEventListener(e,n),s}function R(t,e,n,i){return O(t,e,n,i,!0)}function I(t){t&&t.target&&(t.target.removeEventListener(t.type,t.listener),d(t))}var P=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),M=function(t){function e(){var e=t.call(this)||this;return e.on=e.onInternal,e.once=e.onceInternal,e.un=e.unInternal,e.revision_=0,e}return P(e,t),e.prototype.changed=function(){++this.revision_,this.dispatchEvent(x)},e.prototype.getRevision=function(){return this.revision_},e.prototype.onInternal=function(t,e){if(Array.isArray(t)){for(var n=t.length,i=new Array(n),r=0;r=0||N.match(/cpu (os|iphone os) 15_4 like mac os x/)),-1!==N.indexOf("webkit")&&-1==N.indexOf("edge")),K=-1!==N.indexOf("macintosh"),Z="undefined"!=typeof devicePixelRatio?devicePixelRatio:1,V="undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas&&self instanceof WorkerGlobalScope,U="undefined"!=typeof Image&&Image.prototype.decode,H=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("_",null,e),window.removeEventListener("_",null,e)}catch(t){}return t}();function q(t,e,n,i){var r;return r=n&&n.length?n.shift():V?new OffscreenCanvas(t||300,e||300):document.createElement("canvas"),t&&(r.width=t),e&&(r.height=e),r.getContext("2d",i)}function J(t,e){var n=e.parentNode;n&&n.replaceChild(t,e)}function Q(t){return t&&t.parentNode?t.parentNode.removeChild(t):null}var $=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),tt=function(t){function e(e){var n=t.call(this)||this,i=e.element;return!i||e.target||i.style.pointerEvents||(i.style.pointerEvents="auto"),n.element=i||null,n.target_=null,n.map_=null,n.listenerKeys=[],e.render&&(n.render=e.render),e.target&&n.setTarget(e.target),n}return $(e,t),e.prototype.disposeInternal=function(){Q(this.element),t.prototype.disposeInternal.call(this)},e.prototype.getMap=function(){return this.map_},e.prototype.setMap=function(t){this.map_&&Q(this.element);for(var e=0,n=this.listenerKeys.length;e1?(n=r,i=o):l>0&&(n+=s*l,i+=a*l)}return St(t,e,n,i)}function St(t,e,n,i){var r=n-t,o=i-e;return r*r+o*o}function Et(t){return t*Math.PI/180}function Tt(t,e){var n=t%e;return n*e<0?n+e:n}function bt(t,e,n){return t+n*(e-t)}function Ot(t,e){var n=Math.pow(10,e);return Math.round(t*n)/n}function Rt(t,e){return Math.floor(Ot(t,e))}function It(t,e){return Math.ceil(Ot(t,e))}var Pt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Mt=function(t){function e(e){var n=t.call(this)||this;n.on,n.once,n.un,n.background_=e.background;var i=f({},e);return"object"==typeof e.properties&&(delete i.properties,f(i,e.properties)),i.opacity=void 0!==e.opacity?e.opacity:1,vt("number"==typeof i.opacity,64),i.visible=void 0===e.visible||e.visible,i.zIndex=e.zIndex,i.maxResolution=void 0!==e.maxResolution?e.maxResolution:1/0,i.minResolution=void 0!==e.minResolution?e.minResolution:0,i.minZoom=void 0!==e.minZoom?e.minZoom:-1/0,i.maxZoom=void 0!==e.maxZoom?e.maxZoom:1/0,n.className_=void 0!==i.className?i.className:"ol-layer",delete i.className,n.setProperties(i),n.state_=null,n}return Pt(e,t),e.prototype.getBackground=function(){return this.background_},e.prototype.getClassName=function(){return this.className_},e.prototype.getLayerState=function(t){var e=this.state_||{layer:this,managed:void 0===t||t},n=this.getZIndex();return e.opacity=mt(Math.round(100*this.getOpacity())/100,0,1),e.visible=this.getVisible(),e.extent=this.getExtent(),e.zIndex=void 0!==n||e.managed?n:1/0,e.maxResolution=this.getMaxResolution(),e.minResolution=Math.max(this.getMinResolution(),0),e.minZoom=this.getMinZoom(),e.maxZoom=this.getMaxZoom(),this.state_=e,e},e.prototype.getLayersArray=function(t){return L()},e.prototype.getLayerStatesArray=function(t){return L()},e.prototype.getExtent=function(){return this.get(ht)},e.prototype.getMaxResolution=function(){return this.get(ct)},e.prototype.getMinResolution=function(){return this.get(pt)},e.prototype.getMinZoom=function(){return this.get(dt)},e.prototype.getMaxZoom=function(){return this.get(ft)},e.prototype.getOpacity=function(){return this.get(at)},e.prototype.getSourceState=function(){return L()},e.prototype.getVisible=function(){return this.get(lt)},e.prototype.getZIndex=function(){return this.get(ut)},e.prototype.setBackground=function(t){this.background_=t,this.changed()},e.prototype.setExtent=function(t){this.set(ht,t)},e.prototype.setMaxResolution=function(t){this.set(ct,t)},e.prototype.setMinResolution=function(t){this.set(pt,t)},e.prototype.setMaxZoom=function(t){this.set(ft,t)},e.prototype.setMinZoom=function(t){this.set(dt,t)},e.prototype.setOpacity=function(t){vt("number"==typeof t,64),this.set(at,t)},e.prototype.setVisible=function(t){this.set(lt,t)},e.prototype.setZIndex=function(t){this.set(ut,t)},e.prototype.disposeInternal=function(){this.state_&&(this.state_.layer=null,this.state_=null),t.prototype.disposeInternal.call(this)},e}(G),Ft="precompose",Lt="rendercomplete",At="undefined",Dt="ready",kt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function jt(t,e){if(!t.visible)return!1;var n=e.resolution;if(n=t.maxResolution)return!1;var i=e.zoom;return i>t.minZoom&&i<=t.maxZoom}var Gt=function(t){function e(e){var n=this,i=f({},e);delete i.source,(n=t.call(this,i)||this).on,n.once,n.un,n.mapPrecomposeKey_=null,n.mapRenderKey_=null,n.sourceChangeKey_=null,n.renderer_=null,n.rendered=!1,e.render&&(n.render=e.render),e.map&&n.setMap(e.map),n.addChangeListener(gt,n.handleSourcePropertyChange_);var r=e.source?e.source:null;return n.setSource(r),n}return kt(e,t),e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(gt)||null},e.prototype.getRenderSource=function(){return this.getSource()},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():At},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(I(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=O(t,x,this.handleSourceChange_,this)),this.changed()},e.prototype.getFeatures=function(t){return this.renderer_?this.renderer_.getFeatures(t):new Promise((function(t){return t([])}))},e.prototype.getData=function(t){return this.renderer_&&this.rendered?this.renderer_.getData(t):null},e.prototype.render=function(t,e){var n=this.getRenderer();if(n.prepareFrame(t))return this.rendered=!0,n.renderFrame(t,e)},e.prototype.unrender=function(){this.rendered=!1},e.prototype.setMapInternal=function(t){t||this.unrender(),this.set("map",t)},e.prototype.getMapInternal=function(){return this.get("map")},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(I(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(I(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=O(t,Ft,(function(t){var e=t.frameState.layerStatesArray,n=this.getLayerState(!1);vt(!e.some((function(t){return t.layer===n.layer})),67),e.push(n)}),this),this.mapRenderKey_=O(this,x,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(gt,t)},e.prototype.getRenderer=function(){return this.renderer_||(this.renderer_=this.createRenderer()),this.renderer_},e.prototype.hasRenderer=function(){return!!this.renderer_},e.prototype.createRenderer=function(){return null},e.prototype.disposeInternal=function(){this.renderer_&&(this.renderer_.dispose(),delete this.renderer_),this.setSource(null),t.prototype.disposeInternal.call(this)},e}(Mt),zt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Wt=function(t){function e(e){var n=this,i=e||{};(n=t.call(this,{element:document.createElement("div"),render:i.render,target:i.target})||this).ulElement_=document.createElement("ul"),n.collapsed_=void 0===i.collapsed||i.collapsed,n.userCollapsed_=n.collapsed_,n.overrideCollapsible_=void 0!==i.collapsible,n.collapsible_=void 0===i.collapsible||i.collapsible,n.collapsible_||(n.collapsed_=!1);var r=void 0!==i.className?i.className:"ol-attribution",o=void 0!==i.tipLabel?i.tipLabel:"Attributions",s=void 0!==i.expandClassName?i.expandClassName:r+"-expand",a=void 0!==i.collapseLabel?i.collapseLabel:"›",l=void 0!==i.collapseClassName?i.collapseClassName:r+"-collapse";"string"==typeof a?(n.collapseLabel_=document.createElement("span"),n.collapseLabel_.textContent=a,n.collapseLabel_.className=l):n.collapseLabel_=a;var h=void 0!==i.label?i.label:"i";"string"==typeof h?(n.label_=document.createElement("span"),n.label_.textContent=h,n.label_.className=s):n.label_=h;var u=n.collapsible_&&!n.collapsed_?n.collapseLabel_:n.label_;n.toggleButton_=document.createElement("button"),n.toggleButton_.setAttribute("type","button"),n.toggleButton_.setAttribute("aria-expanded",String(!n.collapsed_)),n.toggleButton_.title=o,n.toggleButton_.appendChild(u),n.toggleButton_.addEventListener(w,n.handleClick_.bind(n),!1);var c=r+" ol-unselectable "+nt+(n.collapsed_&&n.collapsible_?" ol-collapsed":"")+(n.collapsible_?"":" ol-uncollapsible"),p=n.element;return p.className=c,p.appendChild(n.toggleButton_),p.appendChild(n.ulElement_),n.renderedAttributions_=[],n.renderedVisible_=!0,n}return zt(e,t),e.prototype.collectSourceAttributions_=function(t){for(var e={},n=[],i=!0,r=t.layerStatesArray,o=0,s=r.length;o0;if(this.renderedVisible_!=n&&(this.element.style.display=n?"":"none",this.renderedVisible_=n),!h(e,this.renderedAttributions_)){!function(t){for(;t.lastChild;)t.removeChild(t.lastChild)}(this.ulElement_);for(var i=0,r=e.length;ir&&(l|=4),ao&&(l|=2),0===l&&(l=1),l}function ve(t,e,n,i,r){return r?(r[0]=t,r[1]=e,r[2]=n,r[3]=i,r):[t,e,n,i]}function me(t){return ve(1/0,1/0,-1/0,-1/0,t)}function xe(t,e,n,i,r){return Se(me(r),t,e,n,i)}function Ce(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function we(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function Se(t,e,n,i,r){for(;ne[0]?i[0]=t[0]:i[0]=e[0],t[1]>e[1]?i[1]=t[1]:i[1]=e[1],t[2]=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function Ge(t){return t[2]=0;--i)if(t[i]!=e[i]){n=!1;break}return n}function We(t,e){var n=Math.cos(e),i=Math.sin(e),r=t[0]*n-t[1]*i,o=t[1]*n+t[0]*i;return t[0]=r,t[1]=o,t}function Xe(t,e){if(e.canWrapX()){var n=ke(e.getExtent()),i=function(t,e,n){var i=e.getExtent(),r=0;if(e.canWrapX()&&(t[0]i[2])){var o=n||ke(i);r=Math.floor((t[0]-i[0])/o)}return r}(t,e,n);i&&(t[0]-=i*n)}return t}function Ne(t,e,n){var i=n||6371008.8,r=Et(t[1]),o=Et(e[1]),s=(o-r)/2,a=Et(e[0]-t[0])/2,l=Math.sin(s)*Math.sin(s)+Math.sin(a)*Math.sin(a)*Math.cos(r)*Math.cos(o);return 2*i*Math.atan2(Math.sqrt(l),Math.sqrt(1-l))}var Ye=!0;function Be(t){Ye=!(void 0===t||t)}function Ke(t,e,n){var i;if(void 0!==e){for(var r=0,o=t.length;r1)for(var o=t[2]-t[0],s=t[3]-t[1],a=0;a=-180&&t[0]<=180&&t[1]>=-90&&t[1]<=90&&(Ye=!1,console.warn("Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.")),t}function cn(t,e){return t}function pn(t,e){return t}function fn(t,e){return t}qe(te),qe(oe),rn=te,on=function(t,e,n){var i=t.length,r=n>1?n:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(i));for(var s=0;sQt?a=Qt:a<-Qt&&(a=-Qt),o[s+1]=a}return o},sn=function(t,e,n){var i=t.length,r=n>1?n:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(i));for(var s=0;s0?(e.getAnimating()&&e.cancelAnimations(),e.animate({zoom:i,duration:this.duration_,easing:xn})):e.setZoom(i)}}},e}(tt),bn="XY",On="XYM",Rn="XYZM",In="Point",Pn="LineString",Mn="Polygon",Fn="MultiPoint",Ln="MultiLineString",An="MultiPolygon",Dn="GeometryCollection",kn="Circle";function jn(t,e){var n=e[0],i=e[1];return e[0]=t[0]*n+t[2]*i+t[4],e[1]=t[1]*n+t[3]*i+t[5],e}function Gn(t,e,n,i,r,o,s,a){var l=Math.sin(o),h=Math.cos(o);return t[0]=i*h,t[1]=r*l,t[2]=-i*l,t[3]=r*h,t[4]=s*i*h-a*i*l+e,t[5]=s*r*l+a*r*h+n,t}function zn(t,e){var n,i=(n=e)[0]*n[3]-n[1]*n[2];vt(0!==i,32);var r=e[0],o=e[1],s=e[2],a=e[3],l=e[4],h=e[5];return t[0]=a/i,t[1]=-o/i,t[2]=-s/i,t[3]=r/i,t[4]=(s*h-a*l)/i,t[5]=-(r*h-o*l)/i,t}function Wn(t){var e="matrix("+t.join(", ")+")";if(V)return e;var n=Sn||(Sn=document.createElement("div"));return n.style.transform=e,n.style.transform}function Xn(t,e,n,i,r,o){for(var s=o||[],a=0,l=e;l1)a=n;else{if(p>0){for(var f=0;fr&&(r=h),o=a,s=l}return r}function $n(t,e,n,i,r){for(var o=0,s=n.length;o0;){for(var c=h.pop(),p=h.pop(),f=0,d=t[p],g=t[p+1],_=t[c],y=t[c+1],v=p+i;vf&&(u=v,f=m)}f>r&&(l[(u-e)/i]=1,p+i0&&g>f)&&(d<0&&_0&&_>d)?(a=c,l=p):(o[s++]=a,o[s++]=l,h=a,u=l,a=c,l=p)}}return o[s++]=a,o[s++]=l,s}function ai(t,e,n,i,r,o,s,a){for(var l=0,h=n.length;l>1)],e))<0?a=i+1:(l=i,h=!r);return h?a:~a}(d,v);m<0?(h=(v-d[-m-2])/(d[-m-1]-d[-m-2]),l=e+(-m-2)*i):l=e+m*i}var x=a>1?a:2,C=s||new Array(x);for(g=0;g>1;ro&&(h-a)*(o-l)-(r-a)*(u-l)>0&&s++:u<=o&&(h-a)*(o-l)-(r-a)*(u-l)<0&&s--,a=h,l=u}return 0!==s}function _i(t,e,n,i,r,o){if(0===n.length)return!1;if(!gi(t,e,n[0],i,r,o))return!1;for(var s=1,a=n.length;s=r[0]&&o[2]<=r[2]||o[1]>=r[1]&&o[3]<=r[3]||li(t,e,n,i,(function(t,e){return function(t,e,n){var i=!1,r=ye(t,e),o=ye(t,n);if(1===r||1===o)i=!0;else{var s=t[0],a=t[1],l=t[2],h=t[3],u=e[0],c=e[1],p=n[0],f=n[1],d=(f-c)/(p-u),g=void 0,_=void 0;2&o&&!(2&r)&&(i=(g=p-(f-h)/d)>=s&&g<=l),i||!(4&o)||4&r||(i=(_=f-(p-l)*d)>=a&&_<=h),i||!(8&o)||8&r||(i=(g=p-(f-a)/d)>=s&&g<=l),i||!(16&o)||16&r||(i=(_=f-(p-s)*d)>=a&&_<=h)}return i}(r,t,e)})))}function vi(t,e,n,i,r){if(!function(t,e,n,i,r){return!!(yi(t,e,n,i,r)||gi(t,e,n,i,r[0],r[1])||gi(t,e,n,i,r[0],r[3])||gi(t,e,n,i,r[2],r[1])||gi(t,e,n,i,r[2],r[3]))}(t,e,n[0],i,r))return!1;if(1===n.length)return!0;for(var o=1,s=n.length;oC&&_i(t,e,n,i,u=(c+p)/2,g)&&(x=u,C=w),c=p}return isNaN(x)&&(x=r[s]),a?(a.push(x,g,C),a):[x,g,C]}function Gi(t,e,n,i){for(;e0}function Wi(t,e,n,i,r){for(var o=void 0!==r&&r,s=0,a=n.length;s=1024){var r=0;for(var o in t)0==(3&r++)&&(delete t[o],--e)}i=function(t){var e,n,i,r,o;if(or.exec(t)&&(t=function(t){var e=document.createElement("div");if(e.style.color=t,""!==e.style.color){document.body.appendChild(e);var n=getComputedStyle(e).color;return document.body.removeChild(e),n}return""}(t)),rr.exec(t)){var s,a=t.length-1;s=a<=4?1:2;var l=4===a||8===a;e=parseInt(t.substr(1+0*s,s),16),n=parseInt(t.substr(1+1*s,s),16),i=parseInt(t.substr(1+2*s,s),16),r=l?parseInt(t.substr(1+3*s,s),16):255,1==s&&(e=(e<<4)+e,n=(n<<4)+n,i=(i<<4)+i,l&&(r=(r<<4)+r)),o=[e,n,i,r/255]}else 0==t.indexOf("rgba(")?hr(o=t.slice(5,-1).split(",").map(Number)):0==t.indexOf("rgb(")?((o=t.slice(4,-1).split(",").map(Number)).push(1),hr(o)):vt(!1,14);return o}(n),t[n]=i,++e}return i}}();function lr(t){return Array.isArray(t)?t:ar(t)}function hr(t){return t[0]=mt(t[0]+.5|0,0,255),t[1]=mt(t[1]+.5|0,0,255),t[2]=mt(t[2]+.5|0,0,255),t[3]=mt(t[3],0,1),t}function ur(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var n=t[1];n!=(0|n)&&(n=n+.5|0);var i=t[2];return i!=(0|i)&&(i=i+.5|0),"rgba("+e+","+n+","+i+","+(void 0===t[3]?1:Math.round(100*t[3])/100)+")"}var cr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),pr=null,fr=function(t){function e(e){var n=t.call(this,e)||this;return n.container=null,n.renderedResolution,n.tempTransform=[1,0,0,1,0,0],n.pixelTransform=[1,0,0,1,0,0],n.inversePixelTransform=[1,0,0,1,0,0],n.context=null,n.containerReused=!1,n.pixelContext_=null,n.frameState=null,n}return cr(e,t),e.prototype.getImageData=function(t,e,n){var i,r;pr||((i=document.createElement("canvas")).width=1,i.height=1,pr=i.getContext("2d")),pr.clearRect(0,0,1,1);try{pr.drawImage(t,e,n,1,1,0,0,1,1),r=pr.getImageData(0,0,1,1).data}catch(t){return null}return r},e.prototype.getBackground=function(t){var e=this.getLayer().getBackground();return"function"==typeof e&&(e=e(t.viewState.resolution)),e||void 0},e.prototype.useContainer=function(t,e,n,i){var r,o,s=this.getLayer().getClassName();if(t&&t.className===s&&""===t.style.opacity&&1===n&&(!i||t.style.backgroundColor&&h(lr(t.style.backgroundColor),lr(i)))&&(l=t.firstElementChild)instanceof HTMLCanvasElement&&(o=l.getContext("2d")),o&&o.canvas.style.transform===e?(this.container=t,this.context=o,this.containerReused=!0):this.containerReused&&(this.container=null,this.context=null,this.containerReused=!1),!this.container){(r=document.createElement("div")).className=s;var a=r.style;a.position="absolute",a.width="100%",a.height="100%",i&&(a.backgroundColor=i);var l=(o=q()).canvas;r.appendChild(l),(a=l.style).position="absolute",a.left="0",a.transformOrigin="top left",this.container=r,this.context=o}},e.prototype.clipUnrotated=function(t,e,n){var i=Ae(n),r=De(n),o=Re(n),s=Oe(n);jn(e.coordinateToPixelTransform,i),jn(e.coordinateToPixelTransform,r),jn(e.coordinateToPixelTransform,o),jn(e.coordinateToPixelTransform,s);var a=this.inversePixelTransform;jn(a,i),jn(a,r),jn(a,o),jn(a,s),t.save(),t.beginPath(),t.moveTo(Math.round(i[0]),Math.round(i[1])),t.lineTo(Math.round(r[0]),Math.round(r[1])),t.lineTo(Math.round(o[0]),Math.round(o[1])),t.lineTo(Math.round(s[0]),Math.round(s[1])),t.clip()},e.prototype.dispatchRenderEvent_=function(t,e,n){var i=this.getLayer();if(i.hasListener(t)){var r=new ir(t,this.inversePixelTransform,n,e);i.dispatchEvent(r)}},e.prototype.preRender=function(t,e){this.frameState=e,this.dispatchRenderEvent_("prerender",t,e)},e.prototype.postRender=function(t,e){this.dispatchRenderEvent_("postrender",t,e)},e.prototype.getRenderTransform=function(t,e,n,i,r,o,s){var a=r/2,l=o/2,h=i/e,u=-h,c=-t[0]+s,p=-t[1];return Gn(this.tempTransform,a,l,h,u,-n,c,p)},e.prototype.getDataAtPixel=function(t,e,n){var i=jn(this.inversePixelTransform,t.slice()),r=this.context,o=this.getLayer().getExtent();if(o&&!de(o,jn(e.pixelToCoordinateTransform,t.slice())))return null;var s,a=Math.round(i[0]),l=Math.round(i[1]),h=this.pixelContext_;if(!h){var u=document.createElement("canvas");u.width=1,u.height=1,h=u.getContext("2d"),this.pixelContext_=h}h.clearRect(0,0,1,1);try{h.drawImage(r.canvas,a,l,1,1,0,0,1,1),s=h.getImageData(0,0,1,1).data}catch(t){return"SecurityError"===t.name?(this.pixelContext_=null,new Uint8Array):s}return 0===s[3]?null:s},e.prototype.disposeInternal=function(){delete this.frameState,t.prototype.disposeInternal.call(this)},e}(er),dr=fr,gr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),_r=function(t){function e(e,n,i){var r=t.call(this)||this,o=i||{};return r.tileCoord=e,r.state=n,r.interimTile=null,r.key="",r.transition_=void 0===o.transition?250:o.transition,r.transitionStarts_={},r.interpolate=!!o.interpolate,r}return gr(e,t),e.prototype.changed=function(){this.dispatchEvent(x)},e.prototype.release=function(){},e.prototype.getKey=function(){return this.key+"/"+this.tileCoord},e.prototype.getInterimTile=function(){if(!this.interimTile)return this;var t=this.interimTile;do{if(2==t.getState())return this.transition_=0,t;t=t.interimTile}while(t);return this},e.prototype.refreshInterimChain=function(){if(this.interimTile){var t=this.interimTile,e=this;do{if(2==t.getState()){t.interimTile=null;break}1==t.getState()?e=t:0==t.getState()?e.interimTile=t.interimTile:e=t,t=e.interimTile}while(t)}},e.prototype.getTileCoord=function(){return this.tileCoord},e.prototype.getState=function(){return this.state},e.prototype.setState=function(t){if(3!==this.state&&this.state>t)throw new Error("Tile load sequence violation");this.state=t,this.changed()},e.prototype.load=function(){L()},e.prototype.getAlpha=function(t,e){if(!this.transition_)return 1;var n=this.transitionStarts_[t];if(n){if(-1===n)return 1}else n=e,this.transitionStarts_[t]=n;var i=e-n+1e3/60;return i>=this.transition_?1:mn(i/this.transition_)},e.prototype.inTransition=function(t){return!!this.transition_&&-1!==this.transitionStarts_[t]},e.prototype.endTransition=function(t){this.transition_&&(this.transitionStarts_[t]=-1)},e}(m),yr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),vr=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o.extent=e,o.pixelRatio_=i,o.resolution=n,o.state=r,o}return yr(e,t),e.prototype.changed=function(){this.dispatchEvent(x)},e.prototype.getExtent=function(){return this.extent},e.prototype.getImage=function(){return L()},e.prototype.getPixelRatio=function(){return this.pixelRatio_},e.prototype.getResolution=function(){return this.resolution},e.prototype.getState=function(){return this.state},e.prototype.load=function(){L()},e}(m),mr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function xr(t,e,n){var i=t,r=!0,o=!1,s=!1,a=[R(i,"load",(function(){s=!0,o||e()}))];return i.src&&U?(o=!0,i.decode().then((function(){r&&e()})).catch((function(t){r&&(s?e():n())}))):a.push(R(i,"error",n)),function(){r=!1,a.forEach(I)}}!function(t){function e(e,n,i,r,o,s){var a=t.call(this,e,n,i,0)||this;return a.src_=r,a.image_=new Image,null!==o&&(a.image_.crossOrigin=o),a.unlisten_=null,a.state=0,a.imageLoadFunction_=s,a}mr(e,t),e.prototype.getImage=function(){return this.image_},e.prototype.handleImageError_=function(){this.state=3,this.unlistenImage_(),this.changed()},e.prototype.handleImageLoad_=function(){void 0===this.resolution&&(this.resolution=Fe(this.extent)/this.image_.height),this.state=2,this.unlistenImage_(),this.changed()},e.prototype.load=function(){0!=this.state&&3!=this.state||(this.state=1,this.changed(),this.imageLoadFunction_(this,this.src_),this.unlisten_=xr(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this)))},e.prototype.setImage=function(t){this.image_=t,this.resolution=Fe(this.extent)/this.image_.height},e.prototype.unlistenImage_=function(){this.unlisten_&&(this.unlisten_(),this.unlisten_=null)}}(vr);var Cr,wr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Sr=function(t){function e(e,n,i,r,o,s){var a=t.call(this,e,n,s)||this;return a.crossOrigin_=r,a.src_=i,a.key=i,a.image_=new Image,null!==r&&(a.image_.crossOrigin=r),a.unlisten_=null,a.tileLoadFunction_=o,a}return wr(e,t),e.prototype.getImage=function(){return this.image_},e.prototype.setImage=function(t){this.image_=t,this.state=2,this.unlistenImage_(),this.changed()},e.prototype.handleImageError_=function(){var t;this.state=3,this.unlistenImage_(),this.image_=((t=q(1,1)).fillStyle="rgba(0,0,0,0)",t.fillRect(0,0,1,1),t.canvas),this.changed()},e.prototype.handleImageLoad_=function(){var t=this.image_;t.naturalWidth&&t.naturalHeight?this.state=2:this.state=4,this.unlistenImage_(),this.changed()},e.prototype.load=function(){3==this.state&&(this.state=0,this.image_=new Image,null!==this.crossOrigin_&&(this.image_.crossOrigin=this.crossOrigin_)),0==this.state&&(this.state=1,this.changed(),this.tileLoadFunction_(this,this.src_),this.unlisten_=xr(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this)))},e.prototype.unlistenImage_=function(){this.unlisten_&&(this.unlisten_(),this.unlisten_=null)},e}(_r),Er=function(){function t(t,e,n,i,r,o){this.sourceProj_=t,this.targetProj_=e;var s={},a=tn(this.targetProj_,this.sourceProj_);this.transformInv_=function(t){var e=t[0]+"/"+t[1];return s[e]||(s[e]=a(t)),s[e]},this.maxSourceExtent_=i,this.errorThresholdSquared_=r*r,this.triangles_=[],this.wrapsXInSource_=!1,this.canWrapXInSource_=this.sourceProj_.canWrapX()&&!!i&&!!this.sourceProj_.getExtent()&&ke(i)==ke(this.sourceProj_.getExtent()),this.sourceWorldWidth_=this.sourceProj_.getExtent()?ke(this.sourceProj_.getExtent()):null,this.targetWorldWidth_=this.targetProj_.getExtent()?ke(this.targetProj_.getExtent()):null;var l=Ae(n),h=De(n),u=Re(n),c=Oe(n),p=this.transformInv_(l),f=this.transformInv_(h),d=this.transformInv_(u),g=this.transformInv_(c),_=10+(o?Math.max(0,Math.ceil(Ct(be(n)/(o*o*256*256)))):0);if(this.addQuad_(l,h,u,c,p,f,d,g,_),this.wrapsXInSource_){var y=1/0;this.triangles_.forEach((function(t,e,n){y=Math.min(y,t.source[0][0],t.source[1][0],t.source[2][0])})),this.triangles_.forEach(function(t){if(Math.max(t.source[0][0],t.source[1][0],t.source[2][0])-y>this.sourceWorldWidth_/2){var e=[[t.source[0][0],t.source[0][1]],[t.source[1][0],t.source[1][1]],[t.source[2][0],t.source[2][1]]];e[0][0]-y>this.sourceWorldWidth_/2&&(e[0][0]-=this.sourceWorldWidth_),e[1][0]-y>this.sourceWorldWidth_/2&&(e[1][0]-=this.sourceWorldWidth_),e[2][0]-y>this.sourceWorldWidth_/2&&(e[2][0]-=this.sourceWorldWidth_);var n=Math.min(e[0][0],e[1][0],e[2][0]);Math.max(e[0][0],e[1][0],e[2][0])-n.5&&u<1,f=!1;if(l>0&&(this.targetProj_.isGlobal()&&this.targetWorldWidth_&&(f=ke(ue([t,e,n,i]))/this.targetWorldWidth_>.25||f),!p&&this.sourceProj_.isGlobal()&&u&&(f=u>.25||f)),!(!f&&this.maxSourceExtent_&&isFinite(h[0])&&isFinite(h[1])&&isFinite(h[2])&&isFinite(h[3]))||je(h,this.maxSourceExtent_)){var d=0;if(!(f||isFinite(r[0])&&isFinite(r[1])&&isFinite(o[0])&&isFinite(o[1])&&isFinite(s[0])&&isFinite(s[1])&&isFinite(a[0])&&isFinite(a[1])))if(l>0)f=!0;else if(1!=(d=(isFinite(r[0])&&isFinite(r[1])?0:8)+(isFinite(o[0])&&isFinite(o[1])?0:4)+(isFinite(s[0])&&isFinite(s[1])?0:2)+(isFinite(a[0])&&isFinite(a[1])?0:1))&&2!=d&&4!=d&&8!=d)return;if(l>0){if(!f){var g=[(t[0]+n[0])/2,(t[1]+n[1])/2],_=this.transformInv_(g),y=void 0;y=p?(Tt(r[0],c)+Tt(s[0],c))/2-Tt(_[0],c):(r[0]+s[0])/2-_[0];var v=(r[1]+s[1])/2-_[1];f=y*y+v*v>this.errorThresholdSquared_}if(f){if(Math.abs(t[0]-n[0])<=Math.abs(t[1]-n[1])){var m=[(e[0]+n[0])/2,(e[1]+n[1])/2],x=this.transformInv_(m),C=[(i[0]+t[0])/2,(i[1]+t[1])/2],w=this.transformInv_(C);this.addQuad_(t,e,m,C,r,o,x,w,l-1),this.addQuad_(C,m,n,i,w,x,s,a,l-1)}else{var S=[(t[0]+e[0])/2,(t[1]+e[1])/2],E=this.transformInv_(S),T=[(n[0]+i[0])/2,(n[1]+i[1])/2],b=this.transformInv_(T);this.addQuad_(t,S,T,i,r,E,b,a,l-1),this.addQuad_(S,e,n,T,E,o,s,b,l-1)}return}}if(p){if(!this.canWrapXInSource_)return;this.wrapsXInSource_=!0}0==(11&d)&&this.addTriangle_(t,n,i,r,s,a),0==(14&d)&&this.addTriangle_(t,n,e,r,s,o),d&&(0==(13&d)&&this.addTriangle_(e,i,t,o,a,r),0==(7&d)&&this.addTriangle_(e,i,n,o,a,s))}},t.prototype.calculateSourceExtent=function(){var t=[1/0,1/0,-1/0,-1/0];return this.triangles_.forEach((function(e,n,i){var r=e.source;we(t,r[0]),we(t,r[1]),we(t,r[2])})),t},t.prototype.getTriangles=function(){return this.triangles_},t}(),Tr={imageSmoothingEnabled:!1,msImageSmoothingEnabled:!1},br={imageSmoothingEnabled:!0,msImageSmoothingEnabled:!0};function Or(t,e,n,i,r){t.beginPath(),t.moveTo(0,0),t.lineTo(e,n),t.lineTo(i,r),t.closePath(),t.save(),t.clip(),t.fillRect(0,0,Math.max(e,i)+1,Math.max(n,r)),t.restore()}function Rr(t,e){return Math.abs(t[4*e]-210)>2||Math.abs(t[4*e+3]-191.25)>2}function Ir(t,e,n,i){var r=en(n,e,t),o=He(e,i,n),s=e.getMetersPerUnit();void 0!==s&&(o*=s);var a=t.getMetersPerUnit();void 0!==a&&(o/=a);var l=t.getExtent();if(!l||de(l,r)){var h=He(t,o,r)/o;isFinite(h)&&h>0&&(o/=h)}return o}var Pr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Mr=function(t){function e(e,n,i,r,o,s,a,l,h,u,c,p){var f=t.call(this,o,0,{interpolate:!!p})||this;f.renderEdges_=void 0!==c&&c,f.pixelRatio_=a,f.gutter_=l,f.canvas_=null,f.sourceTileGrid_=n,f.targetTileGrid_=r,f.wrappedTileCoord_=s||o,f.sourceTiles_=[],f.sourcesListenerKeys_=null,f.sourceZ_=0;var d=r.getTileCoordExtent(f.wrappedTileCoord_),g=f.targetTileGrid_.getExtent(),_=f.sourceTileGrid_.getExtent(),y=g?Le(d,g):d;if(0===be(y))return f.state=4,f;var v=e.getExtent();v&&(_=_?Le(_,v):v);var m=r.getResolution(f.wrappedTileCoord_[0]),x=function(t,e,n,i){var r=Ie(n),o=Ir(t,e,r,i);return(!isFinite(o)||o<=0)&&Te(n,(function(n){return o=Ir(t,e,n,i),isFinite(o)&&o>0})),o}(e,i,y,m);if(!isFinite(x)||x<=0)return f.state=4,f;var C=void 0!==u?u:.5;if(f.triangulation_=new Er(e,i,y,_,x*C,m),0===f.triangulation_.getTriangles().length)return f.state=4,f;f.sourceZ_=n.getZForResolution(x);var w=f.triangulation_.calculateSourceExtent();if(_&&(e.canWrapX()?(w[1]=mt(w[1],_[1],_[3]),w[3]=mt(w[3],_[1],_[3])):w=Le(w,_)),be(w)){for(var S=n.getTileRangeForExtentAndZ(w,f.sourceZ_),E=S.minX;E<=S.maxX;E++)for(var T=S.minY;T<=S.maxY;T++){var b=h(f.sourceZ_,E,T,a);b&&f.sourceTiles_.push(b)}0===f.sourceTiles_.length&&(f.state=4)}else f.state=4;return f}return Pr(e,t),e.prototype.getImage=function(){return this.canvas_},e.prototype.reproject_=function(){var t=[];if(this.sourceTiles_.forEach(function(e,n,i){e&&2==e.getState()&&t.push({extent:this.sourceTileGrid_.getTileCoordExtent(e.tileCoord),image:e.getImage()})}.bind(this)),this.sourceTiles_.length=0,0===t.length)this.state=3;else{var e=this.wrappedTileCoord_[0],n=this.targetTileGrid_.getTileSize(e),i="number"==typeof n?n:n[0],r="number"==typeof n?n:n[1],o=this.targetTileGrid_.getResolution(e),s=this.sourceTileGrid_.getResolution(this.sourceZ_),a=this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);this.canvas_=function(t,e,n,i,r,o,s,a,l,h,u,c){var p=q(Math.round(n*t),Math.round(n*e));if(c||f(p,Tr),0===l.length)return p.canvas;function d(t){return Math.round(t*n)/n}p.scale(n,n),p.globalCompositeOperation="lighter";var g=[1/0,1/0,-1/0,-1/0];l.forEach((function(t,e,n){var i,r;i=g,(r=t.extent)[0]i[2]&&(i[2]=r[2]),r[1]i[3]&&(i[3]=r[3])}));var _=ke(g),y=Fe(g),v=q(Math.round(n*_/i),Math.round(n*y/i));c||f(v,Tr);var m=n/i;l.forEach((function(t,e,n){var i=t.extent[0]-g[0],r=-(t.extent[3]-g[3]),o=ke(t.extent),s=Fe(t.extent);t.image.width>0&&t.image.height>0&&v.drawImage(t.image,h,h,t.image.width-2*h,t.image.height-2*h,i*m,r*m,o*m,s*m)}));var x=Ae(s);return a.getTriangles().forEach((function(t,e,r){var s=t.source,a=t.target,l=s[0][0],h=s[0][1],u=s[1][0],f=s[1][1],_=s[2][0],y=s[2][1],m=d((a[0][0]-x[0])/o),C=d(-(a[0][1]-x[1])/o),w=d((a[1][0]-x[0])/o),S=d(-(a[1][1]-x[1])/o),E=d((a[2][0]-x[0])/o),T=d(-(a[2][1]-x[1])/o),b=l,O=h;l=0,h=0;var R=function(t){for(var e=t.length,n=0;nr&&(r=s,i=o)}if(0===r)return null;var a=t[i];t[i]=t[n],t[n]=a;for(var l=n+1;l=0;p--){c[p]=t[p][e]/t[p][p];for(var f=p-1;f>=0;f--)t[f][e]-=t[f][p]*c[p]}return c}([[u-=b,f-=O,0,0,w-m],[_-=b,y-=O,0,0,E-m],[0,0,u,f,S-C],[0,0,_,y,T-C]]);if(R){if(p.save(),p.beginPath(),function(){if(void 0===Cr){var t=document.createElement("canvas").getContext("2d");t.globalCompositeOperation="lighter",t.fillStyle="rgba(210, 0, 0, 0.75)",Or(t,4,5,4,0),Or(t,4,5,0,5);var e=t.getImageData(0,0,3,3).data;Cr=Rr(e,0)||Rr(e,4)||Rr(e,8)}return Cr}()||!c){p.moveTo(w,S);for(var I=m-w,P=C-S,M=0;M<4;M++)p.lineTo(w+d((M+1)*I/4),S+d(M*P/3)),3!=M&&p.lineTo(w+d((M+1)*I/4),S+d((M+1)*P/3));p.lineTo(E,T)}else p.moveTo(w,S),p.lineTo(m,C),p.lineTo(E,T);p.clip(),p.transform(R[0],R[2],R[1],R[3],m,C),p.translate(g[0]-b,g[3]-O),p.scale(i/n,-i/n),p.drawImage(v.canvas,0,0),p.restore()}})),u&&(p.save(),p.globalCompositeOperation="source-over",p.strokeStyle="black",p.lineWidth=1,a.getTriangles().forEach((function(t,e,n){var i=t.target,r=(i[0][0]-x[0])/o,s=-(i[0][1]-x[1])/o,a=(i[1][0]-x[0])/o,l=-(i[1][1]-x[1])/o,h=(i[2][0]-x[0])/o,u=-(i[2][1]-x[1])/o;p.beginPath(),p.moveTo(a,l),p.lineTo(r,s),p.lineTo(h,u),p.closePath(),p.stroke()})),p.restore()),p.canvas}(i,r,this.pixelRatio_,s,this.sourceTileGrid_.getExtent(),o,a,this.triangulation_,t,this.gutter_,this.renderEdges_,this.interpolate),this.state=2}this.changed()},e.prototype.load=function(){if(0==this.state){this.state=1,this.changed();var t=0;this.sourcesListenerKeys_=[],this.sourceTiles_.forEach(function(e,n,i){var r=e.getState();if(0==r||1==r){t++;var o=O(e,x,(function(n){var i=e.getState();2!=i&&3!=i&&4!=i||(I(o),0==--t&&(this.unlistenSources_(),this.reproject_()))}),this);this.sourcesListenerKeys_.push(o)}}.bind(this)),0===t?setTimeout(this.reproject_.bind(this),0):this.sourceTiles_.forEach((function(t,e,n){0==t.getState()&&t.load()}))}},e.prototype.unlistenSources_=function(){this.sourcesListenerKeys_.forEach(I),this.sourcesListenerKeys_=null},e}(_r),Fr=function(){function t(t,e,n,i){this.minX=t,this.maxX=e,this.minY=n,this.maxY=i}return t.prototype.contains=function(t){return this.containsXY(t[1],t[2])},t.prototype.containsTileRange=function(t){return this.minX<=t.minX&&t.maxX<=this.maxX&&this.minY<=t.minY&&t.maxY<=this.maxY},t.prototype.containsXY=function(t,e){return this.minX<=t&&t<=this.maxX&&this.minY<=e&&e<=this.maxY},t.prototype.equals=function(t){return this.minX==t.minX&&this.minY==t.minY&&this.maxX==t.maxX&&this.maxY==t.maxY},t.prototype.extend=function(t){t.minXthis.maxX&&(this.maxX=t.maxX),t.minYthis.maxY&&(this.maxY=t.maxY)},t.prototype.getHeight=function(){return this.maxY-this.minY+1},t.prototype.getSize=function(){return[this.getWidth(),this.getHeight()]},t.prototype.getWidth=function(){return this.maxX-this.minX+1},t.prototype.intersects=function(t){return this.minX<=t.maxX&&this.maxX>=t.minX&&this.minY<=t.maxY&&this.maxY>=t.minY},t}();function Lr(t,e,n,i,r){return void 0!==r?(r.minX=t,r.maxX=e,r.minY=n,r.maxY=i,r):new Fr(t,e,n,i)}var Ar=Fr;function Dr(t){return t[0]>0&&t[1]>0}function kr(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:(e[0]=t,e[1]=t),e)}var jr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Gr=function(t){function e(e){var n=t.call(this,e)||this;return n.extentChanged=!0,n.renderedExtent_=null,n.renderedPixelRatio,n.renderedProjection=null,n.renderedRevision,n.renderedTiles=[],n.newTiles_=!1,n.tmpExtent=[1/0,1/0,-1/0,-1/0],n.tmpTileRange_=new Ar(0,0,0,0),n}return jr(e,t),e.prototype.isDrawableTile=function(t){var e=this.getLayer(),n=t.getState(),i=e.getUseInterimTilesOnError();return 2==n||4==n||3==n&&!i},e.prototype.getTile=function(t,e,n,i){var r=i.pixelRatio,o=i.viewState.projection,s=this.getLayer(),a=s.getSource().getTile(t,e,n,r,o);return 3==a.getState()&&(s.getUseInterimTilesOnError()?s.getPreload()>0&&(this.newTiles_=!0):a.setState(2)),this.isDrawableTile(a)||(a=a.getInterimTile()),a},e.prototype.getData=function(t){var e=this.frameState;if(!e)return null;var n=this.getLayer(),i=jn(e.pixelToCoordinateTransform,t.slice()),r=n.getExtent();if(r&&!de(r,i))return null;for(var o=e.pixelRatio,s=e.viewState.projection,a=e.viewState,l=n.getRenderSource(),h=l.getTileGridForProjection(a.projection),u=l.getTilePixelRatio(e.pixelRatio),c=h.getZForResolution(a.resolution);c>=h.getMinZoom();--c){var p=h.getTileCoordForCoordAndZ(i,c),f=l.getTile(c,p[1],p[2],o,s);if(!(f instanceof Sr||f instanceof Mr))return null;if(2===f.getState()){var d=h.getOrigin(c),g=kr(h.getTileSize(c)),_=h.getResolution(c),y=Math.floor(u*((i[0]-d[0])/_-p[1]*g[0])),v=Math.floor(u*((d[1]-i[1])/_-p[2]*g[1]));return this.getImageData(f.getImage(),y,v)}}return null},e.prototype.loadedTileCallback=function(e,n,i){return!!this.isDrawableTile(i)&&t.prototype.loadedTileCallback.call(this,e,n,i)},e.prototype.prepareFrame=function(t){return!!this.getLayer().getSource()},e.prototype.renderFrame=function(t,e){var n=t.layerStatesArray[t.layerIndex],i=t.viewState,r=i.projection,s=i.resolution,a=i.center,l=i.rotation,h=t.pixelRatio,u=this.getLayer(),c=u.getSource(),p=c.getRevision(),d=c.getTileGridForProjection(r),g=d.getZForResolution(s,c.zDirection),_=d.getResolution(g),y=t.extent,v=n.extent&&pn(n.extent);v&&(y=Le(y,pn(n.extent)));var m=c.getTilePixelRatio(h),x=Math.round(t.size[0]*m),C=Math.round(t.size[1]*m);if(l){var w=Math.round(Math.sqrt(x*x+C*C));x=w,C=w}var S=_*x/2/m,E=_*C/2/m,T=[a[0]-S,a[1]-E,a[0]+S,a[1]+E],b=d.getTileRangeForExtentAndZ(y,g),O={};O[g]={};var R=this.createLoadedTileFinder(c,r,O),I=this.tmpExtent,P=this.tmpTileRange_;this.newTiles_=!1;for(var M=b.minX;M<=b.maxX;++M)for(var F=b.minY;F<=b.maxY;++F){var L=this.getTile(g,M,F,t);if(this.isDrawableTile(L)){var A=D(this);if(2==L.getState()){O[g][L.tileCoord.toString()]=L;var k=L.inTransition(A);this.newTiles_||!k&&-1!==this.renderedTiles.indexOf(L)||(this.newTiles_=!0)}if(1===L.getAlpha(A,t.time))continue}var j=d.getTileCoordChildTileRange(L.tileCoord,P,I),G=!1;j&&(G=R(g+1,j)),G||d.forEachTileCoordParentTileRange(L.tileCoord,R,P,I)}var z=_/s;Gn(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/m,1/m,l,-x/2,-C/2);var W=Wn(this.pixelTransform);this.useContainer(e,W,n.opacity,this.getBackground(t));var X=this.context,N=X.canvas;zn(this.inversePixelTransform,this.pixelTransform),Gn(this.tempTransform,x/2,C/2,z,z,0,-x/2,-C/2),N.width!=x||N.height!=C?(N.width=x,N.height=C):this.containerReused||X.clearRect(0,0,x,C),v&&this.clipUnrotated(X,t,v),c.getInterpolate()||f(X,Tr),this.preRender(X,t),this.renderedTiles.length=0;var Y,B,K,Z=Object.keys(O).map(Number);Z.sort(o),1!==n.opacity||this.containerReused&&!c.getOpaque(t.viewState.projection)?(Y=[],B=[]):Z=Z.reverse();for(var V=Z.length-1;V>=0;--V){var U=Z[V],H=c.getTilePixelSize(U,h,r),q=d.getResolution(U)/_,J=H[0]*q*z,Q=H[1]*q*z,$=d.getTileCoordForCoordAndZ(Ae(T),U),tt=d.getTileCoordExtent($),et=jn(this.tempTransform,[m*(tt[0]-T[0])/_,m*(T[3]-tt[3])/_]),nt=m*c.getGutterForProjection(r),it=O[U];for(var rt in it){var ot=(L=it[rt]).tileCoord,at=$[1]-ot[1],lt=Math.round(et[0]-(at-1)*J),ht=$[2]-ot[2],ut=Math.round(et[1]-(ht-1)*Q),ct=lt-(M=Math.round(et[0]-at*J)),pt=ut-(F=Math.round(et[1]-ht*Q)),ft=g===U,dt=!1;if(!(k=ft&&1!==L.getAlpha(D(this),t.time)))if(Y){K=[M,F,M+ct,F,M+ct,F+pt,M,F+pt];for(var gt=0,_t=Y.length;gt<_t;++gt)if(g!==U&&Uc&&(this.instructions.push([Po.CUSTOM,c,o,t,n,hi]),this.hitDetectionInstructions.push([Po.CUSTOM,c,o,t,i||n,hi]));break;case In:r=t.getFlatCoordinates(),this.coordinates.push(r[0],r[1]),o=this.coordinates.length,this.instructions.push([Po.CUSTOM,c,o,t,n]),this.hitDetectionInstructions.push([Po.CUSTOM,c,o,t,i||n])}this.endGeometry(e)},e.prototype.beginGeometry=function(t,e){this.beginGeometryInstruction1_=[Po.BEGIN_GEOMETRY,e,0,t],this.instructions.push(this.beginGeometryInstruction1_),this.beginGeometryInstruction2_=[Po.BEGIN_GEOMETRY,e,0,t],this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)},e.prototype.finish=function(){return{instructions:this.instructions,hitDetectionInstructions:this.hitDetectionInstructions,coordinates:this.coordinates}},e.prototype.reverseHitDetectionInstructions=function(){var t,e=this.hitDetectionInstructions;e.reverse();var n,i,r=e.length,o=-1;for(t=0;tthis.maxLineWidth&&(this.maxLineWidth=n.lineWidth,this.bufferedMaxExtent_=null)}else n.strokeStyle=void 0,n.lineCap=void 0,n.lineDash=null,n.lineDashOffset=void 0,n.lineJoin=void 0,n.lineWidth=void 0,n.miterLimit=void 0},e.prototype.createFill=function(t){var e=t.fillStyle,n=[Po.SET_FILL_STYLE,e];return"string"!=typeof e&&n.push(!0),n},e.prototype.applyStroke=function(t){this.instructions.push(this.createStroke(t))},e.prototype.createStroke=function(t){return[Po.SET_STROKE_STYLE,t.strokeStyle,t.lineWidth*this.pixelRatio,t.lineCap,t.lineJoin,t.miterLimit,this.applyPixelRatio(t.lineDash),t.lineDashOffset*this.pixelRatio]},e.prototype.updateFillStyle=function(t,e){var n=t.fillStyle;"string"==typeof n&&t.currentFillStyle==n||(void 0!==n&&this.instructions.push(e.call(this,t)),t.currentFillStyle=n)},e.prototype.updateStrokeStyle=function(t,e){var n=t.strokeStyle,i=t.lineCap,r=t.lineDash,o=t.lineDashOffset,s=t.lineJoin,a=t.lineWidth,l=t.miterLimit;(t.currentStrokeStyle!=n||t.currentLineCap!=i||r!=t.currentLineDash&&!h(t.currentLineDash,r)||t.currentLineDashOffset!=o||t.currentLineJoin!=s||t.currentLineWidth!=a||t.currentMiterLimit!=l)&&(void 0!==n&&e.call(this,t),t.currentStrokeStyle=n,t.currentLineCap=i,t.currentLineDash=r,t.currentLineDashOffset=o,t.currentLineJoin=s,t.currentLineWidth=a,t.currentMiterLimit=l)},e.prototype.endGeometry=function(t){this.beginGeometryInstruction1_[2]=this.instructions.length,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_[2]=this.hitDetectionInstructions.length,this.beginGeometryInstruction2_=null;var e=[Po.END_GEOMETRY,t];this.instructions.push(e),this.hitDetectionInstructions.push(e)},e.prototype.getBufferedMaxExtent=function(){if(!this.bufferedMaxExtent_&&(this.bufferedMaxExtent_=pe(this.maxExtent),this.maxLineWidth>0)){var t=this.resolution*(this.maxLineWidth+1)/2;ce(this.bufferedMaxExtent_,t,this.bufferedMaxExtent_)}return this.bufferedMaxExtent_},e}(Mo),Ao=Lo,Do=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ko=function(t){function e(e,n,i,r){var o=t.call(this,e,n,i,r)||this;return o.hitDetectionImage_=null,o.image_=null,o.imagePixelRatio_=void 0,o.anchorX_=void 0,o.anchorY_=void 0,o.height_=void 0,o.opacity_=void 0,o.originX_=void 0,o.originY_=void 0,o.rotateWithView_=void 0,o.rotation_=void 0,o.scale_=void 0,o.width_=void 0,o.declutterImageWithText_=void 0,o}return Do(e,t),e.prototype.drawPoint=function(t,e){if(this.image_){this.beginGeometry(t,e);var n=t.getFlatCoordinates(),i=t.getStride(),r=this.coordinates.length,o=this.appendFlatPointCoordinates(n,i);this.instructions.push([Po.DRAW_IMAGE,r,o,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterImageWithText_]),this.hitDetectionInstructions.push([Po.DRAW_IMAGE,r,o,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterImageWithText_]),this.endGeometry(e)}},e.prototype.drawMultiPoint=function(t,e){if(this.image_){this.beginGeometry(t,e);var n=t.getFlatCoordinates(),i=t.getStride(),r=this.coordinates.length,o=this.appendFlatPointCoordinates(n,i);this.instructions.push([Po.DRAW_IMAGE,r,o,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterImageWithText_]),this.hitDetectionInstructions.push([Po.DRAW_IMAGE,r,o,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterImageWithText_]),this.endGeometry(e)}},e.prototype.finish=function(){return this.reverseHitDetectionInstructions(),this.anchorX_=void 0,this.anchorY_=void 0,this.hitDetectionImage_=null,this.image_=null,this.imagePixelRatio_=void 0,this.height_=void 0,this.scale_=void 0,this.opacity_=void 0,this.originX_=void 0,this.originY_=void 0,this.rotateWithView_=void 0,this.rotation_=void 0,this.width_=void 0,t.prototype.finish.call(this)},e.prototype.setImageStyle=function(t,e){var n=t.getAnchor(),i=t.getSize(),r=t.getHitDetectionImage(),o=t.getImage(this.pixelRatio),s=t.getOrigin();this.imagePixelRatio_=t.getPixelRatio(this.pixelRatio),this.anchorX_=n[0],this.anchorY_=n[1],this.hitDetectionImage_=r,this.image_=o,this.height_=i[1],this.opacity_=t.getOpacity(),this.originX_=s[0]*this.imagePixelRatio_,this.originY_=s[1]*this.imagePixelRatio_,this.rotateWithView_=t.getRotateWithView(),this.rotation_=t.getRotation(),this.scale_=t.getScaleArray(),this.width_=i[0],this.declutterImageWithText_=e},e}(Ao),jo=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Go=function(t){function e(e,n,i,r){return t.call(this,e,n,i,r)||this}return jo(e,t),e.prototype.drawFlatCoordinates_=function(t,e,n,i){var r=this.coordinates.length,o=this.appendFlatLineCoordinates(t,e,n,i,!1,!1),s=[Po.MOVE_TO_LINE_TO,r,o];return this.instructions.push(s),this.hitDetectionInstructions.push(s),n},e.prototype.drawLineString=function(t,e){var n=this.state,i=n.strokeStyle,r=n.lineWidth;if(void 0!==i&&void 0!==r){this.updateStrokeStyle(n,this.applyStroke),this.beginGeometry(t,e),this.hitDetectionInstructions.push([Po.SET_STROKE_STYLE,n.strokeStyle,n.lineWidth,n.lineCap,n.lineJoin,n.miterLimit,Ur,0],Ro);var o=t.getFlatCoordinates(),s=t.getStride();this.drawFlatCoordinates_(o,0,o.length,s),this.hitDetectionInstructions.push(Oo),this.endGeometry(e)}},e.prototype.drawMultiLineString=function(t,e){var n=this.state,i=n.strokeStyle,r=n.lineWidth;if(void 0!==i&&void 0!==r){this.updateStrokeStyle(n,this.applyStroke),this.beginGeometry(t,e),this.hitDetectionInstructions.push([Po.SET_STROKE_STYLE,n.strokeStyle,n.lineWidth,n.lineCap,n.lineJoin,n.miterLimit,n.lineDash,n.lineDashOffset],Ro);for(var o=t.getEnds(),s=t.getFlatCoordinates(),a=t.getStride(),l=0,h=0,u=o.length;ht&&(y>_&&(_=y,d=v,g=o),y=0,v=o-r)),s=a,u=p,c=f),l=m,h=x}return(y+=a)>_?[v,o]:[d,g]}var Yo=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Bo={left:0,end:0,center:.5,right:1,start:1,top:0,middle:.5,hanging:.2,alphabetic:.8,ideographic:.8,bottom:1},Ko=function(t){function e(e,n,i,r){var o=t.call(this,e,n,i,r)||this;return o.labels_=null,o.text_="",o.textOffsetX_=0,o.textOffsetY_=0,o.textRotateWithView_=void 0,o.textRotation_=0,o.textFillState_=null,o.fillStates={},o.textStrokeState_=null,o.strokeStates={},o.textState_={},o.textStates={},o.textKey_="",o.fillKey_="",o.strokeKey_="",o.declutterImageWithText_=void 0,o}return Yo(e,t),e.prototype.finish=function(){var e=t.prototype.finish.call(this);return e.textStates=this.textStates,e.fillStates=this.fillStates,e.strokeStates=this.strokeStates,e},e.prototype.drawText=function(t,e){var n=this.textFillState_,i=this.textStrokeState_,r=this.textState_;if(""!==this.text_&&r&&(n||i)){var o=this.coordinates,s=o.length,a=t.getType(),l=null,h=t.getStride();if("line"!==r.placement||a!=Pn&&a!=Ln&&a!=Mn&&a!=An){var u=r.overflow?null:[];switch(a){case In:case Fn:l=t.getFlatCoordinates();break;case Pn:l=t.getFlatMidpoint();break;case kn:l=t.getCenter();break;case Ln:l=t.getFlatMidpoints(),h=2;break;case Mn:l=t.getFlatInteriorPoint(),r.overflow||u.push(l[2]/this.resolution),h=3;break;case An:var c=t.getFlatInteriorPoints();for(l=[],w=0,S=c.length;wR[2]}else T=x>b;var I,P=Math.PI,M=[],F=w+i===e;if(_=0,y=S,p=t[e=w],f=t[e+1],F){v(),I=Math.atan2(f-g,p-d),T&&(I+=I>0?-P:P);var L=(b+x)/2,A=(O+C)/2;return M[0]=[L,A,(E-o)/2,I,r],M}for(var D=0,k=r.length;D0?-P:P),void 0!==I){var G=j-I;if(G+=G>P?-2*P:G<-P?2*P:0,Math.abs(G)>s)return null}I=j;for(var z=D,W=0;D0&&t.push("\n",""),t.push(e,""),t}var us=function(){function t(t,e,n,i){this.overlaps=n,this.pixelRatio=e,this.resolution=t,this.alignFill_,this.instructions=i.instructions,this.coordinates=i.coordinates,this.coordinateCache_={},this.renderedTransform_=[1,0,0,1,0,0],this.hitDetectionInstructions=i.hitDetectionInstructions,this.pixelCoordinates_=null,this.viewRotation_=0,this.fillStates=i.fillStates||{},this.strokeStates=i.strokeStates||{},this.textStates=i.textStates||{},this.widths_={},this.labels_={}}return t.prototype.createLabel=function(t,e,n,i){var r=t+e+n+i;if(this.labels_[r])return this.labels_[r];var o=i?this.strokeStates[i]:null,s=n?this.fillStates[n]:null,a=this.textStates[e],l=this.pixelRatio,h=[a.scale[0]*l,a.scale[1]*l],u=Array.isArray(t),c=ls(u?t[0]:t,a.textAlign||Jr),p=i&&o.lineWidth?o.lineWidth:0,f=u?t:t.split("\n").reduce(hs,[]),d=function(t,e){for(var n=[],i=[],r=[],o=0,s=0,a=0,l=0,h=0,u=e.length;h<=u;h+=2){var c=e[h];if("\n"!==c&&h!==u){var p=e[h+1]||t.font,f=lo(p,c);n.push(f),s+=f;var d=so(p);i.push(d),l=Math.max(l,d)}else o=Math.max(o,s),r.push(s),s=0,a+=l}return{width:o,height:a,widths:n,heights:i,lineWidths:r}}(a,f),g=d.width,_=d.height,y=d.widths,v=d.heights,m=d.lineWidths,x=g+p,C=[],w=(x+2)*h[0],S=(_+p)*h[1],E={width:w<0?Math.floor(w):Math.ceil(w),height:S<0?Math.floor(S):Math.ceil(S),contextInstructions:C};1==h[0]&&1==h[1]||C.push("scale",h),i&&(C.push("strokeStyle",o.strokeStyle),C.push("lineWidth",p),C.push("lineCap",o.lineCap),C.push("lineJoin",o.lineJoin),C.push("miterLimit",o.miterLimit),(V?OffscreenCanvasRenderingContext2D:CanvasRenderingContext2D).prototype.setLineDash&&(C.push("setLineDash",[o.lineDash]),C.push("lineDashOffset",o.lineDashOffset))),n&&C.push("fillStyle",s.fillStyle),C.push("textBaseline","middle"),C.push("textAlign","center");for(var T,b=.5-c,O=c*x+b*p,R=[],I=[],P=0,M=0,F=0,L=0,A=0,D=f.length;At?t-l:r,x=o+h>e?e-h:o,C=f[3]+m*c[0]+f[1],w=f[0]+x*c[1]+f[2],S=y-f[3],E=v-f[0];return(d||0!==u)&&(ns[0]=S,os[0]=S,ns[1]=E,is[1]=E,is[0]=S+C,rs[0]=is[0],rs[1]=E+w,os[1]=rs[1]),0!==u?(jn(_=Gn([1,0,0,1,0,0],n,i,1,1,u,-n,-i),ns),jn(_,is),jn(_,rs),jn(_,os),ve(Math.min(ns[0],is[0],rs[0],os[0]),Math.min(ns[1],is[1],rs[1],os[1]),Math.max(ns[0],is[0],rs[0],os[0]),Math.max(ns[1],is[1],rs[1],os[1]),es)):ve(Math.min(S,S+C),Math.min(E,E+w),Math.max(S,S+C),Math.max(E,E+w),es),p&&(y=Math.round(y),v=Math.round(v)),{drawImageX:y,drawImageY:v,drawImageW:m,drawImageH:x,originX:l,originY:h,declutterBox:{minX:es[0],minY:es[1],maxX:es[2],maxY:es[3],value:g},canvasTransform:_,scale:c}},t.prototype.replayImageOrLabel_=function(t,e,n,i,r,o,s){var a=!(!o&&!s),l=i.declutterBox,h=t.canvas,u=s?s[2]*i.scale[0]/2:0;return l.minX-u<=h.width/e&&l.maxX+u>=0&&l.minY-u<=h.height/e&&l.maxY+u>=0&&(a&&this.replayTextBackground_(t,ns,is,rs,os,o,s),function(t,e,n,i,r,o,s,a,l,h,u){t.save(),1!==n&&(t.globalAlpha*=n),e&&t.setTransform.apply(t,e),i.contextInstructions?(t.translate(l,h),t.scale(u[0],u[1]),function(t,e){for(var n=t.contextInstructions,i=0,r=n.length;iz&&(this.fill_(t),M=0),F>z&&(t.stroke(),F=0),M||F||(t.beginPath(),g=NaN,_=NaN),++R;break;case Po.CIRCLE:var X=l[P=W[1]],N=l[P+1],Y=l[P+2]-X,B=l[P+3]-N,K=Math.sqrt(Y*Y+B*B);t.moveTo(X+K,N),t.arc(X,N,K,0,2*Math.PI,!0),++R;break;case Po.CLOSE_PATH:t.closePath(),++R;break;case Po.CUSTOM:P=W[1],p=W[2];var Z=W[3],V=W[4],U=6==W.length?W[5]:void 0;G.geometry=Z,G.feature=E,R in D||(D[R]=[]);var H=D[R];U?U(l,P,p,2,H):(H[0]=l[P],H[1]=l[P+1],H.length=2),V(H,G),++R;break;case Po.DRAW_IMAGE:P=W[1],p=W[2],m=W[3],f=W[4],d=W[5];var q=W[6],J=W[7],Q=W[8],$=W[9],tt=W[10],et=W[11],nt=W[12],it=W[13],rt=W[14];if(!m&&W.length>=19){x=W[18],C=W[19],w=W[20],S=W[21];var ot=this.drawLabelWithPointPlacement_(x,C,w,S);m=ot.label,W[3]=m;var st=W[22];f=(ot.anchorX-st)*this.pixelRatio,W[4]=f;var at=W[23];d=(ot.anchorY-at)*this.pixelRatio,W[5]=d,q=m.height,W[6]=q,it=m.width,W[13]=it}var lt=void 0;W.length>24&&(lt=W[24]);var ht=void 0,ut=void 0,ct=void 0;W.length>16?(ht=W[15],ut=W[16],ct=W[17]):(ht=$r,ut=!1,ct=!1),tt&&j?et+=k:tt||j||(et-=k);for(var pt=0;Pn)break;var a=i[s];a||(a=[],i[s]=a),a.push(4*((t+r)*e+(t+o))+3),r>0&&a.push(4*((t-r)*e+(t+o))+3),o>0&&(a.push(4*((t+r)*e+(t-o))+3),r>0&&a.push(4*((t-r)*e+(t-o))+3))}for(var l=[],h=(r=0,i.length);r0){if(!s||p!==qo&&p!==$o||-1!==s.indexOf(t)){var h=(f[o]-3)/4,u=i-h%a,d=i-(h/a|0),g=r(t,e,u*u+d*d);if(g)return g}c.clearRect(0,0,a,a);break}}var g,_,y,v,m,x=Object.keys(this.executorsByZIndex_).map(Number);for(x.sort(o),g=x.length-1;g>=0;--g){var C=x[g].toString();for(y=this.executorsByZIndex_[C],_=ps.length-1;_>=0;--_)if(void 0!==(v=y[p=ps[_]])&&(m=v.executeHitDetection(c,l,n,d,u)))return m}},t.prototype.getClipCoords=function(t){var e=this.maxExtent_;if(!e)return null;var n=e[0],i=e[1],r=e[2],o=e[3],s=[n,i,n,o,r,o,r,i];return Xn(s,0,8,2,t,s),s},t.prototype.isEmpty=function(){return _(this.executorsByZIndex_)},t.prototype.execute=function(t,e,n,i,r,s,a){var l=Object.keys(this.executorsByZIndex_).map(Number);l.sort(o),this.maxExtent_&&(t.save(),this.clip(t,n));var h,u,c,p,f,d,g=s||ps;for(a&&l.reverse(),h=0,u=l.length;hthis.maxCacheSize_},t.prototype.expire=function(){if(this.canExpireCache()){var t=0;for(var e in this.cache_){var n=this.cache_[e];0!=(3&t++)||n.hasListener()||(delete this.cache_[e],--this.cacheSize_)}}},t.prototype.get=function(t,e,n){var i=Ts(t,e,n);return i in this.cache_?this.cache_[i]:null},t.prototype.set=function(t,e,n,i){var r=Ts(t,e,n);this.cache_[r]=i,++this.cacheSize_},t.prototype.setSize=function(t){this.maxCacheSize_=t,this.expire()},t}()),Os=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Rs=null,Is=function(t){function e(e,n,i,r,o,s){var a=t.call(this)||this;return a.hitDetectionImage_=null,a.image_=e||new Image,null!==r&&(a.image_.crossOrigin=r),a.canvas_={},a.color_=s,a.unlisten_=null,a.imageState_=o,a.size_=i,a.src_=n,a.tainted_,a}return Os(e,t),e.prototype.isTainted_=function(){if(void 0===this.tainted_&&2===this.imageState_){Rs||(Rs=q(1,1)),Rs.drawImage(this.image_,0,0);try{Rs.getImageData(0,0,1,1),this.tainted_=!1}catch(t){Rs=null,this.tainted_=!0}}return!0===this.tainted_},e.prototype.dispatchChangeEvent_=function(){this.dispatchEvent(x)},e.prototype.handleImageError_=function(){this.imageState_=3,this.unlistenImage_(),this.dispatchChangeEvent_()},e.prototype.handleImageLoad_=function(){this.imageState_=2,this.size_?(this.image_.width=this.size_[0],this.image_.height=this.size_[1]):this.size_=[this.image_.width,this.image_.height],this.unlistenImage_(),this.dispatchChangeEvent_()},e.prototype.getImage=function(t){return this.replaceColor_(t),this.canvas_[t]?this.canvas_[t]:this.image_},e.prototype.getPixelRatio=function(t){return this.replaceColor_(t),this.canvas_[t]?t:1},e.prototype.getImageState=function(){return this.imageState_},e.prototype.getHitDetectionImage=function(){if(!this.hitDetectionImage_)if(this.isTainted_()){var t=this.size_[0],e=this.size_[1],n=q(t,e);n.fillRect(0,0,t,e),this.hitDetectionImage_=n.canvas}else this.hitDetectionImage_=this.image_;return this.hitDetectionImage_},e.prototype.getSize=function(){return this.size_},e.prototype.getSrc=function(){return this.src_},e.prototype.load=function(){if(0==this.imageState_){this.imageState_=1;try{this.image_.src=this.src_}catch(t){this.handleImageError_()}this.unlisten_=xr(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this))}},e.prototype.replaceColor_=function(t){if(this.color_&&!this.canvas_[t]&&2===this.imageState_){var e=document.createElement("canvas");this.canvas_[t]=e,e.width=Math.ceil(this.image_.width*t),e.height=Math.ceil(this.image_.height*t);var n=e.getContext("2d");if(n.scale(t,t),n.drawImage(this.image_,0,0),n.globalCompositeOperation="multiply","multiply"===n.globalCompositeOperation||this.isTainted_())n.fillStyle=sr(this.color_),n.fillRect(0,0,e.width/t,e.height/t),n.globalCompositeOperation="destination-in",n.drawImage(this.image_,0,0);else{for(var i=n.getImageData(0,0,e.width,e.height),r=i.data,o=this.color_[0]/255,s=this.color_[1]/255,a=this.color_[2]/255,l=this.color_[3],h=0,u=r.length;h0,6);var u=void 0!==i.src?0:2;return n.color_=void 0!==i.color?lr(i.color):null,n.iconImage_=function(t,e,n,i,r,o){var s=bs.get(e,i,o);return s||(s=new Is(t,e,n,i,r,o),bs.set(e,i,o,s)),s}(l,h,void 0!==n.imgSize_?n.imgSize_:null,n.crossOrigin_,u,n.color_),n.offset_=void 0!==i.offset?i.offset:[0,0],n.offsetOrigin_=void 0!==i.offsetOrigin?i.offsetOrigin:Ss,n.origin_=null,n.size_=void 0!==i.size?i.size:null,n}return Ps(e,t),e.prototype.clone=function(){var t=this.getScale();return new e({anchor:this.anchor_.slice(),anchorOrigin:this.anchorOrigin_,anchorXUnits:this.anchorXUnits_,anchorYUnits:this.anchorYUnits_,color:this.color_&&this.color_.slice?this.color_.slice():this.color_||void 0,crossOrigin:this.crossOrigin_,imgSize:this.imgSize_,offset:this.offset_.slice(),offsetOrigin:this.offsetOrigin_,opacity:this.getOpacity(),rotateWithView:this.getRotateWithView(),rotation:this.getRotation(),scale:Array.isArray(t)?t.slice():t,size:null!==this.size_?this.size_.slice():void 0,src:this.getSrc()})},e.prototype.getAnchor=function(){var t=this.normalizedAnchor_;if(!t){t=this.anchor_;var e=this.getSize();if(this.anchorXUnits_==ms||this.anchorYUnits_==ms){if(!e)return null;t=this.anchor_.slice(),this.anchorXUnits_==ms&&(t[0]*=e[0]),this.anchorYUnits_==ms&&(t[1]*=e[1])}if(this.anchorOrigin_!=Ss){if(!e)return null;t===this.anchor_&&(t=this.anchor_.slice()),this.anchorOrigin_!=Es&&this.anchorOrigin_!=ws||(t[0]=-t[0]+e[0]),this.anchorOrigin_!=Cs&&this.anchorOrigin_!=ws||(t[1]=-t[1]+e[1])}this.normalizedAnchor_=t}var n=this.getDisplacement();return[t[0]-n[0],t[1]+n[1]]},e.prototype.setAnchor=function(t){this.anchor_=t,this.normalizedAnchor_=null},e.prototype.getColor=function(){return this.color_},e.prototype.getImage=function(t){return this.iconImage_.getImage(t)},e.prototype.getPixelRatio=function(t){return this.iconImage_.getPixelRatio(t)},e.prototype.getImageSize=function(){return this.iconImage_.getSize()},e.prototype.getImageState=function(){return this.iconImage_.getImageState()},e.prototype.getHitDetectionImage=function(){return this.iconImage_.getHitDetectionImage()},e.prototype.getOrigin=function(){if(this.origin_)return this.origin_;var t=this.offset_;if(this.offsetOrigin_!=Ss){var e=this.getSize(),n=this.iconImage_.getSize();if(!e||!n)return null;t=t.slice(),this.offsetOrigin_!=Es&&this.offsetOrigin_!=ws||(t[0]=n[0]-e[0]-t[0]),this.offsetOrigin_!=Cs&&this.offsetOrigin_!=ws||(t[1]=n[1]-e[1]-t[1])}return this.origin_=t,this.origin_},e.prototype.getSrc=function(){return this.iconImage_.getSrc()},e.prototype.getSize=function(){return this.size_?this.size_:this.iconImage_.getSize()},e.prototype.listenImageChange=function(t){this.iconImage_.addEventListener(x,t)},e.prototype.load=function(){this.iconImage_.load()},e.prototype.unlistenImageChange=function(t){this.iconImage_.removeEventListener(x,t)},e}(Yr),Fs=.5,Ls={Point:function(t,e,n,i,r){var o,s=n.getImage(),a=n.getText();if(r&&(t=r,o=s&&a&&a.getText()?{}:void 0),s){if(2!=s.getImageState())return;var l=t.getBuilder(n.getZIndex(),qo);l.setImageStyle(s,o),l.drawPoint(e,i)}if(a&&a.getText()){var h=t.getBuilder(n.getZIndex(),$o);h.setTextStyle(a,o),h.drawText(e,i)}},LineString:function(t,e,n,i,r){var o=n.getStroke();if(o){var s=t.getBuilder(n.getZIndex(),Jo);s.setFillStrokeStyle(null,o),s.drawLineString(e,i)}var a=n.getText();if(a&&a.getText()){var l=(r||t).getBuilder(n.getZIndex(),$o);l.setTextStyle(a),l.drawText(e,i)}},Polygon:function(t,e,n,i,r){var o=n.getFill(),s=n.getStroke();if(o||s){var a=t.getBuilder(n.getZIndex(),Qo);a.setFillStrokeStyle(o,s),a.drawPolygon(e,i)}var l=n.getText();if(l&&l.getText()){var h=(r||t).getBuilder(n.getZIndex(),$o);h.setTextStyle(l),h.drawText(e,i)}},MultiPoint:function(t,e,n,i,r){var o,s=n.getImage(),a=n.getText();if(r&&(t=r,o=s&&a&&a.getText()?{}:void 0),s){if(2!=s.getImageState())return;var l=t.getBuilder(n.getZIndex(),qo);l.setImageStyle(s,o),l.drawMultiPoint(e,i)}if(a&&a.getText()){var h=(r||t).getBuilder(n.getZIndex(),$o);h.setTextStyle(a,o),h.drawText(e,i)}},MultiLineString:function(t,e,n,i,r){var o=n.getStroke();if(o){var s=t.getBuilder(n.getZIndex(),Jo);s.setFillStrokeStyle(null,o),s.drawMultiLineString(e,i)}var a=n.getText();if(a&&a.getText()){var l=(r||t).getBuilder(n.getZIndex(),$o);l.setTextStyle(a),l.drawText(e,i)}},MultiPolygon:function(t,e,n,i,r){var o=n.getFill(),s=n.getStroke();if(s||o){var a=t.getBuilder(n.getZIndex(),Qo);a.setFillStrokeStyle(o,s),a.drawMultiPolygon(e,i)}var l=n.getText();if(l&&l.getText()){var h=(r||t).getBuilder(n.getZIndex(),$o);h.setTextStyle(l),h.drawText(e,i)}},GeometryCollection:function(t,e,n,i,r){var o,s,a=e.getGeometriesArray();for(o=0,s=a.length;od[2];)v=_*++y,u.push(this.getRenderTransform(i,r,s,Fs,c,p,v).slice()),g-=_}this.hitDetectionImageData_=function(t,e,n,i,r,s,a){var l=q(t[0]*Fs,t[1]*Fs);l.imageSmoothingEnabled=!1;for(var h=l.canvas,u=new vs(l,Fs,r,null,a),c=n.length,p=Math.floor(16777215/c),f={},d=1;d<=c;++d){var g=n[d-1],_=g.getStyleFunction()||i;if(i){var y=_(g,s);if(y){Array.isArray(y)||(y=[y]);for(var v="#"+("000000"+(d*p).toString(16)).slice(-6),m=0,x=y.length;m=n[2])){var r=ke(n),o=Math.floor((i[0]-n[0])/r)*r;t[0]-=o,t[2]-=o}return t}(m[0],u);S[0]x[0]&&S[2]>x[2]&&m.push([S[0]-C,S[1],S[2]-C,S[3]])}if(!this.dirty_&&this.renderedResolution_==c&&this.renderedRevision_==f&&this.renderedRenderOrder_==g&&ge(this.wrappedRenderedExtent_,y))return h(this.renderedExtent_,v)||(this.hitDetectionImageData_=null,this.renderedExtent_=v),this.renderedCenter_=_,this.replayGroupChanged=!1,!0;this.replayGroup_=null,this.dirty_=!1;var E,T=new Vo(Ds(c,p),y,c,p);this.getLayer().getDeclutter()&&(E=new Vo(Ds(c,p),y,c,p));var b,O=ln();if(O){for(var R=0,I=m.length;R0&&this.getCount()>this.highWaterMark},t.prototype.expireCache=function(t){for(;this.canExpireCache();)this.pop()},t.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null},t.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},t.prototype.forEach=function(t){for(var e=this.oldest_;e;)t(e.value_,e.key_,this),e=e.newer},t.prototype.get=function(t,e){var n=this.entries_[t];return vt(void 0!==n,15),n===this.newest_||(n===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(n.newer.older=n.older,n.older.newer=n.newer),n.newer=null,n.older=this.newest_,this.newest_.newer=n,this.newest_=n),n.value_},t.prototype.remove=function(t){var e=this.entries_[t];return vt(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},t.prototype.getCount=function(){return this.count_},t.prototype.getKeys=function(){var t,e=new Array(this.count_),n=0;for(t=this.newest_;t;t=t.older)e[n++]=t.key_;return e},t.prototype.getValues=function(){var t,e=new Array(this.count_),n=0;for(t=this.newest_;t;t=t.older)e[n++]=t.value_;return e},t.prototype.peekLast=function(){return this.oldest_.value_},t.prototype.peekLastKey=function(){return this.oldest_.key_},t.prototype.peekFirstKey=function(){return this.newest_.key_},t.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},t.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},t.prototype.set=function(t,e){vt(!(t in this.entries_),16);var n={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=n:this.oldest_=n,this.newest_=n,this.entries_[t]=n,++this.count_},t.prototype.setSize=function(t){this.highWaterMark=t},t}();function Bs(t,e,n,i){return void 0!==i?(i[0]=t,i[1]=e,i[2]=n,i):[t,e,n]}function Ks(t,e,n){return t+"/"+e+"/"+n}function Zs(t){return Ks(t[0],t[1],t[2])}var Vs=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Us=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Vs(e,t),e.prototype.expireCache=function(t){for(;this.canExpireCache()&&!(this.peekLast().getKey()in t);)this.pop().release()},e.prototype.pruneExceptNewestZ=function(){if(0!==this.getCount()){var t=this.peekFirstKey().split("/").map(Number)[0];this.forEach(function(e){e.tileCoord[0]!==t&&(this.remove(Zs(e.tileCoord)),e.release())}.bind(this))}},e}(Ys),Hs=Us,qs=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function Js(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}var Qs=function(t){function e(e){var n=t.call(this)||this;n.projection=Ue(e.projection),n.attributions_=Js(e.attributions),n.attributionsCollapsible_=void 0===e.attributionsCollapsible||e.attributionsCollapsible,n.loading=!1,n.state_=void 0!==e.state?e.state:Dt,n.wrapX_=void 0!==e.wrapX&&e.wrapX,n.interpolate_=!!e.interpolate,n.viewResolver=null,n.viewRejector=null;var i=n;return n.viewPromise_=new Promise((function(t,e){i.viewResolver=t,i.viewRejector=e})),n}return qs(e,t),e.prototype.getAttributions=function(){return this.attributions_},e.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},e.prototype.getProjection=function(){return this.projection},e.prototype.getResolutions=function(){return L()},e.prototype.getView=function(){return this.viewPromise_},e.prototype.getState=function(){return this.state_},e.prototype.getWrapX=function(){return this.wrapX_},e.prototype.getInterpolate=function(){return this.interpolate_},e.prototype.refresh=function(){this.changed()},e.prototype.setAttributions=function(t){this.attributions_=Js(t),this.changed()},e.prototype.setState=function(t){this.state_=t,this.changed()},e}(G),$s=[0,0,0],ta=function(){function t(t){var e,n,i;if(this.minZoom=void 0!==t.minZoom?t.minZoom:0,this.resolutions_=t.resolutions,vt((e=this.resolutions_,!0,n=function(t,e){return e-t}||o,e.every((function(t,i){if(0===i)return!0;var r=n(e[i-1],t);return!(r>0||0===r)}))),17),!t.origins)for(var r=0,s=this.resolutions_.length-1;r=this.minZoom;){if(e(a,2===this.zoomFactor_?Lr(r=Math.floor(r/2),r,o=Math.floor(o/2),o,n):this.getTileRangeForExtentAndZ(s,a,n)))return!0;--a}return!1},t.prototype.getExtent=function(){return this.extent_},t.prototype.getMaxZoom=function(){return this.maxZoom},t.prototype.getMinZoom=function(){return this.minZoom},t.prototype.getOrigin=function(t){return this.origin_?this.origin_:this.origins_[t]},t.prototype.getResolution=function(t){return this.resolutions_[t]},t.prototype.getResolutions=function(){return this.resolutions_},t.prototype.getTileCoordChildTileRange=function(t,e,n){if(t[0]this.maxZoom||e0?i:Math.max(s/a[0],o/a[1]),h=r+1,u=new Array(h),c=0;cn||n>e.getMaxZoom())return!1;var o=e.getFullTileRange(n);return!o||o.containsXY(i,r)}(t,i)?t:null},e.prototype.clear=function(){this.tileCache.clear()},e.prototype.refresh=function(){this.clear(),t.prototype.refresh.call(this)},e.prototype.updateCacheSize=function(t,e){var n=this.getTileCacheForProjection(e);t>n.highWaterMark&&(n.highWaterMark=t)},e.prototype.useTile=function(t,e,n,i){},e}(Qs),sa=function(t){function e(e,n){var i=t.call(this,e)||this;return i.tile=n,i}return ra(e,t),e}(t),aa=oa;function la(t,e){var n=/\{z\}/g,i=/\{x\}/g,r=/\{y\}/g,o=/\{-y\}/g;return function(s,a,l){return s?t.replace(n,s[0].toString()).replace(i,s[1].toString()).replace(r,s[2].toString()).replace(o,(function(){var t=s[0],n=e.getFullTileRange(t);return vt(n,55),(n.getHeight()-s[2]-1).toString()})):void 0}}var ha=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ua=function(t){function e(n){var i=t.call(this,{attributions:n.attributions,cacheSize:n.cacheSize,opaque:n.opaque,projection:n.projection,state:n.state,tileGrid:n.tileGrid,tilePixelRatio:n.tilePixelRatio,wrapX:n.wrapX,transition:n.transition,interpolate:n.interpolate,key:n.key,attributionsCollapsible:n.attributionsCollapsible,zDirection:n.zDirection})||this;return i.generateTileUrlFunction_=i.tileUrlFunction===e.prototype.tileUrlFunction,i.tileLoadFunction=n.tileLoadFunction,n.tileUrlFunction&&(i.tileUrlFunction=n.tileUrlFunction),i.urls=null,n.urls?i.setUrls(n.urls):n.url&&i.setUrl(n.url),i.tileLoadingKeys_={},i}return ha(e,t),e.prototype.getTileLoadFunction=function(){return this.tileLoadFunction},e.prototype.getTileUrlFunction=function(){return Object.getPrototypeOf(this).tileUrlFunction===this.tileUrlFunction?this.tileUrlFunction.bind(this):this.tileUrlFunction},e.prototype.getUrls=function(){return this.urls},e.prototype.handleTileChange=function(t){var e,n=t.target,i=D(n),r=n.getState();1==r?(this.tileLoadingKeys_[i]=!0,e="tileloadstart"):i in this.tileLoadingKeys_&&(delete this.tileLoadingKeys_[i],e=3==r?"tileloaderror":2==r?"tileloadend":void 0),null!=e&&this.dispatchEvent(new sa(e,n))},e.prototype.setTileLoadFunction=function(t){this.tileCache.clear(),this.tileLoadFunction=t,this.changed()},e.prototype.setTileUrlFunction=function(t,e){this.tileUrlFunction=t,this.tileCache.pruneExceptNewestZ(),void 0!==e?this.setKey(e):this.changed()},e.prototype.setUrl=function(t){var e=function(t){var e=[],n=/\{([a-z])-([a-z])\}/.exec(t);if(n){var i=n[1].charCodeAt(0),r=n[2].charCodeAt(0),o=void 0;for(o=i;o<=r;++o)e.push(t.replace(n[0],String.fromCharCode(o)));return e}if(n=/\{(\d+)-(\d+)\}/.exec(t)){for(var s=parseInt(n[2],10),a=parseInt(n[1],10);a<=s;a++)e.push(t.replace(n[0],a.toString()));return e}return e.push(t),e}(t);this.urls=e,this.setUrls(e)},e.prototype.setUrls=function(t){this.urls=t;var e=t.join("\n");this.generateTileUrlFunction_?this.setTileUrlFunction(function(t,e){for(var n=t.length,i=new Array(n),r=0;rOpenStreetMap contributors.'];var o=void 0!==i.crossOrigin?i.crossOrigin:"anonymous",s=void 0!==i.url?i.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png";return t.call(this,{attributions:n,attributionsCollapsible:!1,cacheSize:i.cacheSize,crossOrigin:o,interpolate:r,maxZoom:void 0!==i.maxZoom?i.maxZoom:19,opaque:void 0===i.opaque||i.opaque,reprojectionErrorThreshold:i.reprojectionErrorThreshold,tileLoadFunction:i.tileLoadFunction,transition:i.transition,url:s,wrapX:i.wrapX,zDirection:i.zDirection})||this}return ya(e,t),e}(_a),ma="add",xa="remove",Ca=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),wa="length",Sa=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.element=n,r.index=i,r}return Ca(e,t),e}(t),Ea=function(t){function e(e,n){var i=t.call(this)||this;i.on,i.once,i.un;var r=n||{};if(i.unique_=!!r.unique,i.array_=e||[],i.unique_)for(var o=0,s=i.array_.length;o0;)this.pop()},e.prototype.extend=function(t){for(var e=0,n=t.length;e=200&&a.status<300){var i=e.getType(),l=void 0;"json"==i||"text"==i?l=a.responseText:"xml"==i?(l=a.responseXML)||(l=(new DOMParser).parseFromString(a.responseText,"application/xml")):i==Ia&&(l=a.response),l?o(e.readFeatures(l,{extent:n,featureProjection:r}),e.readProjection(l)):s()}else s()},a.onerror=s,a.send()}(t,e,n,i,r,(function(t,e){a.addFeatures(t),void 0!==o&&o(t)}),s||p)}}var Ma=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Fa=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.feature=n,r.features=i,r}return Ma(e,t),e}(t),La=function(t){function n(e){var n=this,i=e||{};(n=t.call(this,{attributions:i.attributions,interpolate:!0,projection:void 0,state:Dt,wrapX:void 0===i.wrapX||i.wrapX})||this).on,n.once,n.un,n.loader_=p,n.format_=i.format,n.overlaps_=void 0===i.overlaps||i.overlaps,n.url_=i.url,void 0!==i.loader?n.loader_=i.loader:void 0!==n.url_&&(vt(n.format_,7),n.loader_=Pa(n.url_,n.format_)),n.strategy_=void 0!==i.strategy?i.strategy:Ra;var r,o,s=void 0===i.useSpatialIndex||i.useSpatialIndex;return n.featuresRtree_=s?new Ta:null,n.loadedExtentsRtree_=new Ta,n.loadingExtentsCount_=0,n.nullGeometryFeatures_={},n.idIndex_={},n.uidIndex_={},n.featureChangeKeys_={},n.featuresCollection_=null,Array.isArray(i.features)?o=i.features:i.features&&(o=(r=i.features).getArray()),s||void 0!==r||(r=new Ea(o)),void 0!==o&&n.addFeaturesInternal(o),void 0!==r&&n.bindFeaturesCollection_(r),n}return Ma(n,t),n.prototype.addFeature=function(t){this.addFeatureInternal(t),this.changed()},n.prototype.addFeatureInternal=function(t){var e=D(t);if(this.addToIndex_(e,t)){this.setupChangeEvents_(e,t);var n=t.getGeometry();if(n){var i=n.getExtent();this.featuresRtree_&&this.featuresRtree_.insert(i,t)}else this.nullGeometryFeatures_[e]=t;this.dispatchEvent(new Fa(ba,t))}else this.featuresCollection_&&this.featuresCollection_.remove(t)},n.prototype.setupChangeEvents_=function(t,n){this.featureChangeKeys_[t]=[O(n,x,this.handleFeatureChange_,this),O(n,e,this.handleFeatureChange_,this)]},n.prototype.addToIndex_=function(t,e){var n=!0,i=e.getId();return void 0!==i&&(i.toString()in this.idIndex_?n=!1:this.idIndex_[i.toString()]=e),n&&(vt(!(t in this.uidIndex_),30),this.uidIndex_[t]=e),n},n.prototype.addFeatures=function(t){this.addFeaturesInternal(t),this.changed()},n.prototype.addFeaturesInternal=function(t){for(var e=[],n=[],i=[],r=0,o=t.length;r0},n.prototype.refresh=function(){this.clear(!0),this.loadedExtentsRtree_.clear(),t.prototype.refresh.call(this)},n.prototype.removeLoadedExtent=function(t){var e,n=this.loadedExtentsRtree_;n.forEachInExtent(t,(function(n){if(Ce(n.extent,t))return e=n,!0})),e&&n.remove(e)},n.prototype.removeFeature=function(t){if(t){var e=D(t);e in this.nullGeometryFeatures_?delete this.nullGeometryFeatures_[e]:this.featuresRtree_&&this.featuresRtree_.remove(t),this.removeFeatureInternal(t)&&this.changed()}},n.prototype.removeFeatureInternal=function(t){var e=D(t),n=this.featureChangeKeys_[e];if(n){n.forEach(I),delete this.featureChangeKeys_[e];var i=t.getId();return void 0!==i&&delete this.idIndex_[i.toString()],delete this.uidIndex_[e],this.dispatchEvent(new Fa(Oa,t)),t}},n.prototype.removeFromIdIndex_=function(t){var e=!1;for(var n in this.idIndex_)if(this.idIndex_[n]===t){delete this.idIndex_[n],e=!0;break}return e},n.prototype.setLoader=function(t){this.loader_=t},n.prototype.setUrl=function(t){vt(this.format_,7),this.url_=t,this.setLoader(Pa(t,this.format_))},n}(Qs),Aa=function(){function t(t){var e=t||{};this.font_=e.font,this.rotation_=e.rotation,this.rotateWithView_=e.rotateWithView,this.scale_=e.scale,this.scaleArray_=kr(void 0!==e.scale?e.scale:1),this.text_=e.text,this.textAlign_=e.textAlign,this.textBaseline_=e.textBaseline,this.fill_=void 0!==e.fill?e.fill:new go({color:"#333"}),this.maxAngle_=void 0!==e.maxAngle?e.maxAngle:Math.PI/4,this.placement_=void 0!==e.placement?e.placement:"point",this.overflow_=!!e.overflow,this.stroke_=void 0!==e.stroke?e.stroke:null,this.offsetX_=void 0!==e.offsetX?e.offsetX:0,this.offsetY_=void 0!==e.offsetY?e.offsetY:0,this.backgroundFill_=e.backgroundFill?e.backgroundFill:null,this.backgroundStroke_=e.backgroundStroke?e.backgroundStroke:null,this.padding_=void 0===e.padding?null:e.padding}return t.prototype.clone=function(){var e=this.getScale();return new t({font:this.getFont(),placement:this.getPlacement(),maxAngle:this.getMaxAngle(),overflow:this.getOverflow(),rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(e)?e.slice():e,text:this.getText(),textAlign:this.getTextAlign(),textBaseline:this.getTextBaseline(),fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,offsetX:this.getOffsetX(),offsetY:this.getOffsetY(),backgroundFill:this.getBackgroundFill()?this.getBackgroundFill().clone():void 0,backgroundStroke:this.getBackgroundStroke()?this.getBackgroundStroke().clone():void 0,padding:this.getPadding()||void 0})},t.prototype.getOverflow=function(){return this.overflow_},t.prototype.getFont=function(){return this.font_},t.prototype.getMaxAngle=function(){return this.maxAngle_},t.prototype.getPlacement=function(){return this.placement_},t.prototype.getOffsetX=function(){return this.offsetX_},t.prototype.getOffsetY=function(){return this.offsetY_},t.prototype.getFill=function(){return this.fill_},t.prototype.getRotateWithView=function(){return this.rotateWithView_},t.prototype.getRotation=function(){return this.rotation_},t.prototype.getScale=function(){return this.scale_},t.prototype.getScaleArray=function(){return this.scaleArray_},t.prototype.getStroke=function(){return this.stroke_},t.prototype.getText=function(){return this.text_},t.prototype.getTextAlign=function(){return this.textAlign_},t.prototype.getTextBaseline=function(){return this.textBaseline_},t.prototype.getBackgroundFill=function(){return this.backgroundFill_},t.prototype.getBackgroundStroke=function(){return this.backgroundStroke_},t.prototype.getPadding=function(){return this.padding_},t.prototype.setOverflow=function(t){this.overflow_=t},t.prototype.setFont=function(t){this.font_=t},t.prototype.setMaxAngle=function(t){this.maxAngle_=t},t.prototype.setOffsetX=function(t){this.offsetX_=t},t.prototype.setOffsetY=function(t){this.offsetY_=t},t.prototype.setPlacement=function(t){this.placement_=t},t.prototype.setRotateWithView=function(t){this.rotateWithView_=t},t.prototype.setFill=function(t){this.fill_=t},t.prototype.setRotation=function(t){this.rotation_=t},t.prototype.setScale=function(t){this.scale_=t,this.scaleArray_=kr(void 0!==t?t:1)},t.prototype.setStroke=function(t){this.stroke_=t},t.prototype.setText=function(t){this.text_=t},t.prototype.setTextAlign=function(t){this.textAlign_=t},t.prototype.setTextBaseline=function(t){this.textBaseline_=t},t.prototype.setBackgroundFill=function(t){this.backgroundFill_=t},t.prototype.setBackgroundStroke=function(t){this.backgroundStroke_=t},t.prototype.setPadding=function(t){this.padding_=t},t}(),Da=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ka=function(t){function e(e){var n=t.call(this)||this;if(n.on,n.once,n.un,n.id_=void 0,n.geometryName_="geometry",n.style_=null,n.styleFunction_=void 0,n.geometryChangeKey_=null,n.addChangeListener(n.geometryName_,n.handleGeometryChanged_),e)if("function"==typeof e.getSimplifiedGeometry){var i=e;n.setGeometry(i)}else{var r=e;n.setProperties(r)}return n}return Da(e,t),e.prototype.clone=function(){var t=new e(this.hasProperties()?this.getProperties():null);t.setGeometryName(this.getGeometryName());var n=this.getGeometry();n&&t.setGeometry(n.clone());var i=this.getStyle();return i&&t.setStyle(i),t},e.prototype.getGeometry=function(){return this.get(this.geometryName_)},e.prototype.getId=function(){return this.id_},e.prototype.getGeometryName=function(){return this.geometryName_},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.handleGeometryChange_=function(){this.changed()},e.prototype.handleGeometryChanged_=function(){this.geometryChangeKey_&&(I(this.geometryChangeKey_),this.geometryChangeKey_=null);var t=this.getGeometry();t&&(this.geometryChangeKey_=O(t,x,this.handleGeometryChange_,this)),this.changed()},e.prototype.setGeometry=function(t){this.set(this.geometryName_,t)},e.prototype.setStyle=function(t){var e,n;this.style_=t,this.styleFunction_=t?"function"==typeof(e=t)?e:(Array.isArray(e)?n=e:(vt("function"==typeof e.getZIndex,41),n=[e]),function(){return n}):void 0,this.changed()},e.prototype.setId=function(t){this.id_=t,this.changed()},e.prototype.setGeometryName=function(t){this.removeChangeListener(this.geometryName_,this.handleGeometryChanged_),this.geometryName_=t,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),this.handleGeometryChanged_()},e}(G),ja=ka,Ga=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),za=function(t){function e(e){var n=t.call(this)||this;return n.map_=e,n}return Ga(e,t),e.prototype.dispatchRenderEvent=function(t,e){L()},e.prototype.calculateMatrices2D=function(t){var e=t.viewState,n=t.coordinateToPixelTransform,i=t.pixelToCoordinateTransform;Gn(n,t.size[0]/2,t.size[1]/2,1/e.resolution,-1/e.resolution,-e.rotation,-e.center[0],-e.center[1]),zn(i,n)},e.prototype.forEachFeatureAtCoordinate=function(t,e,n,i,r,o,s,a){var l,h=e.viewState;function u(t,e,n,i){return r.call(o,e,t?n:null,i)}var c=h.projection,p=Xe(t.slice(),c),f=[[0,0]];if(c.canWrapX()&&i){var d=ke(c.getExtent());f.push([-d,0],[d,0])}for(var g=e.layerStatesArray,_=g.length,y=[],v=[],m=0;m=0;--x){var C=g[x],w=C.layer;if(w.hasRenderer()&&jt(C,h)&&s.call(a,w)){var S=w.getRenderer(),E=w.getSource();if(S&&E){var T=E.getWrapX()?p:t,b=u.bind(null,C.managed);v[0]=T[0]+f[m][0],v[1]=T[1]+f[m][1],l=S.forEachFeatureAtCoordinate(v,e,n,b,y)}if(l)return l}}if(0!==y.length){var O=1/y.length;return y.forEach((function(t,e){return t.distanceSq+=e*O})),y.sort((function(t,e){return t.distanceSq-e.distanceSq})),y.some((function(t){return l=t.callback(t.feature,t.layer,t.geometry)})),l}},e.prototype.forEachLayerAtPixel=function(t,e,n,i,r){return L()},e.prototype.hasFeatureAtCoordinate=function(t,e,n,i,r,o){return void 0!==this.forEachFeatureAtCoordinate(t,e,n,i,u,this,r,o)},e.prototype.getMap=function(){return this.map_},e.prototype.renderFrame=function(t){L()},e.prototype.scheduleExpireIconCache=function(t){bs.canExpireCache()&&t.postRenderFunctions.push(Wa)},e}(r);function Wa(t,e){bs.expire()}var Xa=za,Na=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Ya=function(t){function n(n){var i=t.call(this,n)||this;i.fontChangeListenerKey_=O(to,e,n.redrawText.bind(n)),i.element_=document.createElement("div");var r=i.element_.style;r.position="absolute",r.width="100%",r.height="100%",r.zIndex="0",i.element_.className="ol-unselectable ol-layers";var o=n.getViewport();return o.insertBefore(i.element_,o.firstChild||null),i.children_=[],i.renderedVisible_=!0,i}return Na(n,t),n.prototype.dispatchRenderEvent=function(t,e){var n=this.getMap();if(n.hasListener(t)){var i=new ir(t,void 0,e);n.dispatchEvent(i)}},n.prototype.disposeInternal=function(){I(this.fontChangeListenerKey_),this.element_.parentNode.removeChild(this.element_),t.prototype.disposeInternal.call(this)},n.prototype.renderFrame=function(t){if(t){this.calculateMatrices2D(t),this.dispatchRenderEvent(Ft,t);var e=t.layerStatesArray.sort((function(t,e){return t.zIndex-e.zIndex})),n=t.viewState;this.children_.length=0;for(var i=[],r=null,o=0,s=e.length;o=0;--o)i[o].renderDeclutter(t);!function(t,e){for(var n=t.childNodes,i=0;;++i){var r=n[i],o=e[i];if(!r&&!o)break;r!==o&&(r?o?t.insertBefore(o,r):(t.removeChild(r),--i):t.appendChild(o))}}(this.element_,this.children_),this.dispatchRenderEvent("postcompose",t),this.renderedVisible_||(this.element_.style.display="",this.renderedVisible_=!0),this.scheduleExpireIconCache(t)}else this.renderedVisible_&&(this.element_.style.display="none",this.renderedVisible_=!1)},n.prototype.forEachLayerAtPixel=function(t,e,n,i,r){for(var o=e.viewState,s=e.layerStatesArray,a=s.length-1;a>=0;--a){var l=s[a],h=l.layer;if(h.hasRenderer()&&jt(l,o)&&r(h)){var u=h.getRenderer().getDataAtPixel(t,e,n);if(u){var c=i(h,u);if(c)return c}}}},n}(Xa),Ba=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Ka=function(t){function e(e,n){var i=t.call(this,e)||this;return i.layer=n,i}return Ba(e,t),e}(t),Za="layers",Va=function(t){function n(e){var n=this,i=e||{},r=f({},i);delete r.layers;var o=i.layers;return(n=t.call(this,r)||this).on,n.once,n.un,n.layersListenerKeys_=[],n.listenerKeys_={},n.addChangeListener(Za,n.handleLayersChanged_),o?Array.isArray(o)?o=new Ea(o.slice(),{unique:!0}):vt("function"==typeof o.getArray,43):o=new Ea(void 0,{unique:!0}),n.setLayers(o),n}return Ba(n,t),n.prototype.handleLayerChange_=function(){this.changed()},n.prototype.handleLayersChanged_=function(){this.layersListenerKeys_.forEach(I),this.layersListenerKeys_.length=0;var t=this.getLayers();for(var e in this.layersListenerKeys_.push(O(t,ma,this.handleLayersAdd_,this),O(t,xa,this.handleLayersRemove_,this)),this.listenerKeys_)this.listenerKeys_[e].forEach(I);d(this.listenerKeys_);for(var n=t.getArray(),i=0,r=n.length;ithis.moveTolerance_||Math.abs(t.clientY-this.down_.clientY)>this.moveTolerance_},e.prototype.disposeInternal=function(){this.relayedListenerKey_&&(I(this.relayedListenerKey_),this.relayedListenerKey_=null),this.element_.removeEventListener(T,this.boundHandleTouchMove_),this.pointerdownListenerKey_&&(I(this.pointerdownListenerKey_),this.pointerdownListenerKey_=null),this.dragListenerKeys_.forEach(I),this.dragListenerKeys_.length=0,this.element_=null,t.prototype.disposeInternal.call(this)},e}(m),el="layergroup",nl="size",il="target",rl="view",ol=1/0,sl=function(){function t(t,e){this.priorityFunction_=t,this.keyFunction_=e,this.elements_=[],this.priorities_=[],this.queuedElements_={}}return t.prototype.clear=function(){this.elements_.length=0,this.priorities_.length=0,d(this.queuedElements_)},t.prototype.dequeue=function(){var t=this.elements_,e=this.priorities_,n=t[0];1==t.length?(t.length=0,e.length=0):(t[0]=t.pop(),e[0]=e.pop(),this.siftUp_(0));var i=this.keyFunction_(n);return delete this.queuedElements_[i],n},t.prototype.enqueue=function(t){vt(!(this.keyFunction_(t)in this.queuedElements_),31);var e=this.priorityFunction_(t);return e!=ol&&(this.elements_.push(t),this.priorities_.push(e),this.queuedElements_[this.keyFunction_(t)]=!0,this.siftDown_(0,this.elements_.length-1),!0)},t.prototype.getCount=function(){return this.elements_.length},t.prototype.getLeftChildIndex_=function(t){return 2*t+1},t.prototype.getRightChildIndex_=function(t){return 2*t+2},t.prototype.getParentIndex_=function(t){return t-1>>1},t.prototype.heapify_=function(){var t;for(t=(this.elements_.length>>1)-1;t>=0;t--)this.siftUp_(t)},t.prototype.isEmpty=function(){return 0===this.elements_.length},t.prototype.isKeyQueued=function(t){return t in this.queuedElements_},t.prototype.isQueued=function(t){return this.isKeyQueued(this.keyFunction_(t))},t.prototype.siftUp_=function(t){for(var e=this.elements_,n=this.priorities_,i=e.length,r=e[t],o=n[t],s=t;t>1;){var a=this.getLeftChildIndex_(t),l=this.getRightChildIndex_(t),h=lt;){var s=this.getParentIndex_(e);if(!(i[s]>o))break;n[e]=n[s],i[e]=i[s],e=s}n[e]=r,i[e]=o},t.prototype.reprioritize=function(){var t,e,n,i=this.priorityFunction_,r=this.elements_,o=this.priorities_,s=0,a=r.length;for(e=0;e0;)i=(n=this.dequeue()[0]).getKey(),0!==n.getState()||i in this.tilesLoadingKeys_||(this.tilesLoadingKeys_[i]=!0,++this.tilesLoading_,++r,n.load())},e}(sl),hl={CENTER:"center",RESOLUTION:"resolution",ROTATION:"rotation"};function ul(t,e,n){return function(i,r,o,s,a){if(i){if(!r&&!e)return i;var l=e?0:o[0]*r,h=e?0:o[1]*r,u=a?a[0]:0,c=a?a[1]:0,p=t[0]+l/2+u,f=t[2]-l/2+u,d=t[1]+h/2+c,g=t[3]-h/2+c;p>f&&(f=p=(f+p)/2),d>g&&(g=d=(g+d)/2);var _=mt(i[0],p,f),y=mt(i[1],d,g);if(s&&n&&r){var v=30*r;_+=-v*Math.log(1+Math.max(0,p-i[0])/v)+v*Math.log(1+Math.max(0,i[0]-f)/v),y+=-v*Math.log(1+Math.max(0,d-i[1])/v)+v*Math.log(1+Math.max(0,i[1]-g)/v)}return[_,y]}}}function cl(t){return t}function pl(t,e,n,i){var r=ke(e)/n[0],o=Fe(e)/n[1];return i?Math.min(t,Math.max(r,o)):Math.min(t,Math.min(r,o))}function fl(t,e,n){var i=Math.min(t,e);return i*=Math.log(1+50*Math.max(0,t/e-1))/50+1,n&&(i=Math.max(i,n),i/=Math.log(1+50*Math.max(0,n/t-1))/50+1),mt(i,n/2,2*e)}function dl(t,e,n,i,r){return function(o,s,a,l){if(void 0!==o){var h=i?pl(t,i,a,r):t;return(void 0===n||n)&&l?fl(o,h,e):mt(o,e,h)}}}function gl(t){return void 0!==t?0:void 0}function _l(t){return void 0!==t?t:void 0}var yl=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),vl=function(t){function e(e){var n=t.call(this)||this;n.on,n.once,n.un;var i=f({},e);return n.hints_=[0,0],n.animations_=[],n.updateAnimationKey_,n.projection_=Je(i.projection,"EPSG:3857"),n.viewportSize_=[100,100],n.targetCenter_=null,n.targetResolution_,n.targetRotation_,n.nextCenter_=null,n.nextResolution_,n.nextRotation_,n.cancelAnchor_=void 0,i.projection&&Be(),i.center&&(i.center=un(i.center,n.projection_)),i.extent&&(i.extent=pn(i.extent,n.projection_)),n.applyOptions_(i),n}return yl(e,t),e.prototype.applyOptions_=function(t){var e=f({},t);for(var n in hl)delete e[n];this.setProperties(e,!0);var i=function(t){var e,n,i,r=void 0!==t.minZoom?t.minZoom:0,o=void 0!==t.maxZoom?t.maxZoom:28,a=void 0!==t.zoomFactor?t.zoomFactor:2,l=void 0!==t.multiWorld&&t.multiWorld,h=void 0===t.smoothResolutionConstraint||t.smoothResolutionConstraint,u=void 0!==t.showFullExtent&&t.showFullExtent,c=Je(t.projection,"EPSG:3857"),p=c.getExtent(),f=t.constrainOnlyCenter,d=t.extent;if(l||d||!c.isGlobal()||(f=!1,d=p),void 0!==t.resolutions){var g=t.resolutions;n=g[r],i=void 0!==g[o]?g[o]:g[g.length-1],e=t.constrainResolution?function(t,e,n,i){return function(r,o,a,l){if(void 0!==r){var h=t[0],u=t[t.length-1],c=n?pl(h,n,a,i):h;if(l)return void 0===e||e?fl(r,c,u):mt(r,u,c);var p=Math.min(c,r),f=Math.floor(s(t,p,o));return t[f]>c&&f1&&"function"==typeof arguments[n-1]&&(e=arguments[n-1],--n);for(var i=0;i0},e.prototype.getInteracting=function(){return this.hints_[1]>0},e.prototype.cancelAnimations=function(){var t;this.setHint(0,-this.hints_[0]);for(var e=0,n=this.animations_.length;e=0;--n){for(var i=this.animations_[n],r=!0,o=0,s=i.length;o0?l/a.duration:1;h>=1?(a.complete=!0,h=1):r=!1;var u=a.easing(h);if(a.sourceCenter){var c=a.sourceCenter[0],p=a.sourceCenter[1],f=a.targetCenter[0],d=a.targetCenter[1];this.nextCenter_=a.targetCenter;var g=c+u*(f-c),_=p+u*(d-p);this.targetCenter_=[g,_]}if(a.sourceResolution&&a.targetResolution){var y=1===u?a.targetResolution:a.sourceResolution+u*(a.targetResolution-a.sourceResolution);if(a.anchor){var v=this.getViewportSize_(this.getRotation()),m=this.constraints_.resolution(y,0,v,!0);this.targetCenter_=this.calculateCenterZoom(m,a.anchor)}this.nextResolution_=a.targetResolution,this.targetResolution_=y,this.applyTargetState_(!0)}if(void 0!==a.sourceRotation&&void 0!==a.targetRotation){var x=1===u?Tt(a.targetRotation+Math.PI,2*Math.PI)-Math.PI:a.sourceRotation+u*(a.targetRotation-a.sourceRotation);if(a.anchor){var C=this.constraints_.rotation(x,!0);this.targetCenter_=this.calculateCenterRotate(C,a.anchor)}this.nextRotation_=a.targetRotation,this.targetRotation_=x}if(this.applyTargetState_(!0),e=!0,!a.complete)break}}if(r){this.animations_[n]=null,this.setHint(0,-1),this.nextCenter_=null,this.nextResolution_=NaN,this.nextRotation_=NaN;var w=i[0].callback;w&&ml(w,!0)}}this.animations_=this.animations_.filter(Boolean),e&&void 0===this.updateAnimationKey_&&(this.updateAnimationKey_=requestAnimationFrame(this.updateAnimations_.bind(this)))}},e.prototype.calculateCenterRotate=function(t,e){var n,i,r,o=this.getCenterInternal();return void 0!==o&&(We(n=[o[0]-e[0],o[1]-e[1]],t-this.getRotation()),r=e,(i=n)[0]+=+r[0],i[1]+=+r[1]),n},e.prototype.calculateCenterZoom=function(t,e){var n,i=this.getCenterInternal(),r=this.getResolution();return void 0!==i&&void 0!==r&&(n=[e[0]-t*(e[0]-i[0])/r,e[1]-t*(e[1]-i[1])/r]),n},e.prototype.getViewportSize_=function(t){var e=this.viewportSize_;if(t){var n=e[0],i=e[1];return[Math.abs(n*Math.cos(t))+Math.abs(i*Math.sin(t)),Math.abs(n*Math.sin(t))+Math.abs(i*Math.cos(t))]}return e},e.prototype.setViewportSize=function(t){this.viewportSize_=Array.isArray(t)?t.slice():[100,100],this.getAnimating()||this.resolveConstraints(0)},e.prototype.getCenter=function(){var t=this.getCenterInternal();return t?hn(t,this.getProjection()):t},e.prototype.getCenterInternal=function(){return this.get(hl.CENTER)},e.prototype.getConstraints=function(){return this.constraints_},e.prototype.getConstrainResolution=function(){return this.get("constrainResolution")},e.prototype.getHints=function(t){return void 0!==t?(t[0]=this.hints_[0],t[1]=this.hints_[1],t):this.hints_.slice()},e.prototype.calculateExtent=function(t){return cn(this.calculateExtentInternal(t),this.getProjection())},e.prototype.calculateExtentInternal=function(t){var e=t||this.getViewportSizeMinusPadding_(),n=this.getCenterInternal();vt(n,1);var i=this.getResolution();vt(void 0!==i,2);var r=this.getRotation();return vt(void 0!==r,3),Me(n,i,r,e)},e.prototype.getMaxResolution=function(){return this.maxResolution_},e.prototype.getMinResolution=function(){return this.minResolution_},e.prototype.getMaxZoom=function(){return this.getZoomForResolution(this.minResolution_)},e.prototype.setMaxZoom=function(t){this.applyOptions_(this.getUpdatedOptions_({maxZoom:t}))},e.prototype.getMinZoom=function(){return this.getZoomForResolution(this.maxResolution_)},e.prototype.setMinZoom=function(t){this.applyOptions_(this.getUpdatedOptions_({minZoom:t}))},e.prototype.setConstrainResolution=function(t){this.applyOptions_(this.getUpdatedOptions_({constrainResolution:t}))},e.prototype.getProjection=function(){return this.projection_},e.prototype.getResolution=function(){return this.get(hl.RESOLUTION)},e.prototype.getResolutions=function(){return this.resolutions_},e.prototype.getResolutionForExtent=function(t,e){return this.getResolutionForExtentInternal(pn(t,this.getProjection()),e)},e.prototype.getResolutionForExtentInternal=function(t,e){var n=e||this.getViewportSizeMinusPadding_(),i=ke(t)/n[0],r=Fe(t)/n[1];return Math.max(i,r)},e.prototype.getResolutionForValueFunction=function(t){var e=t||2,n=this.getConstrainedResolution(this.maxResolution_),i=this.minResolution_,r=Math.log(n/i)/Math.log(e);return function(t){return n/Math.pow(e,t*r)}},e.prototype.getRotation=function(){return this.get(hl.ROTATION)},e.prototype.getValueForResolutionFunction=function(t){var e=Math.log(t||2),n=this.getConstrainedResolution(this.maxResolution_),i=this.minResolution_,r=Math.log(n/i)/e;return function(t){return Math.log(n/t)/e/r}},e.prototype.getViewportSizeMinusPadding_=function(t){var e=this.getViewportSize_(t),n=this.padding_;return n&&(e=[e[0]-n[1]-n[3],e[1]-n[0]-n[2]]),e},e.prototype.getState=function(){var t=this.getProjection(),e=this.getResolution(),n=this.getRotation(),i=this.getCenterInternal(),r=this.padding_;if(r){var o=this.getViewportSizeMinusPadding_();i=Cl(i,this.getViewportSize_(),[o[0]/2+r[3],o[1]/2+r[0]],e,n)}return{center:i.slice(0),projection:void 0!==t?t:null,resolution:e,nextCenter:this.nextCenter_,nextResolution:this.nextResolution_,nextRotation:this.nextRotation_,rotation:n,zoom:this.getZoom()}},e.prototype.getZoom=function(){var t,e=this.getResolution();return void 0!==e&&(t=this.getZoomForResolution(e)),t},e.prototype.getZoomForResolution=function(t){var e,n,i=this.minZoom_||0;if(this.resolutions_){var r=s(this.resolutions_,t,1);i=r,e=this.resolutions_[r],n=r==this.resolutions_.length-1?2:e/this.resolutions_[r+1]}else e=this.maxResolution_,n=this.zoomFactor_;return i+Math.log(e/t)/Math.log(n)},e.prototype.getResolutionForZoom=function(t){if(this.resolutions_){if(this.resolutions_.length<=1)return 0;var e=mt(Math.floor(t),0,this.resolutions_.length-2),n=this.resolutions_[e]/this.resolutions_[e+1];return this.resolutions_[e]/Math.pow(n,mt(t-e,0,1))}return this.maxResolution_/Math.pow(this.zoomFactor_,t-this.minZoom_)},e.prototype.fit=function(t,e){var n;if(vt(Array.isArray(t)||"function"==typeof t.getSimplifiedGeometry,24),Array.isArray(t))vt(!Ge(t),25),n=Zi(i=pn(t,this.getProjection()));else if(t.getType()===kn){var i;(n=Zi(i=pn(t.getExtent(),this.getProjection()))).rotate(this.getRotation(),Ie(i))}else{var r=ln();n=r?t.clone().transform(r,this.getProjection()):t}this.fitInternal(n,e)},e.prototype.rotatedExtentForGeometry=function(t){for(var e=this.getRotation(),n=Math.cos(e),i=Math.sin(-e),r=t.getFlatCoordinates(),o=t.getStride(),s=1/0,a=1/0,l=-1/0,h=-1/0,u=0,c=r.length;u=0;a--){var l=s[a];if(l.getMap()===this&&l.getActive()&&this.getTargetElement()&&(!l.handleEvent(t)||t.propagationStopped))break}}},n.prototype.handlePostRender=function(){var t=this.frameState_,e=this.tileQueue_;if(!e.isEmpty()){var n=this.maxTilesLoading_,i=n;if(t){var r=t.viewHints;if(r[0]||r[1]){var o=Date.now()-t.time>8;n=o?0:8,i=o?0:2}}e.getTilesLoading()0&&e%(2*Math.PI)!=0?t.animate({rotation:0,duration:this.duration_,easing:xn}):t.setRotation(0))}},e.prototype.render=function(t){var e=t.frameState;if(e){var n=e.viewState.rotation;if(n!=this.rotation_){var i="rotate("+n+"rad)";if(this.autoHide_){var r=this.element.classList.contains(et);r||0!==n?r&&0!==n&&this.element.classList.remove(et):this.element.classList.add(et)}this.label_.style.transform=i}this.rotation_=n}},e}(tt),Il=Rl,Pl="active",Ml=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function Fl(t,e,n,i){var r=t.getZoom();if(void 0!==r){var o=t.getConstrainedZoom(r+e),s=t.getResolutionForZoom(o);t.getAnimating()&&t.cancelAnimations(),t.animate({resolution:s,anchor:n,duration:void 0!==i?i:250,easing:xn})}}var Ll=function(t){function e(e){var n=t.call(this)||this;return n.on,n.once,n.un,e&&e.handleEvent&&(n.handleEvent=e.handleEvent),n.map_=null,n.setActive(!0),n}return Ml(e,t),e.prototype.getActive=function(){return this.get(Pl)},e.prototype.getMap=function(){return this.map_},e.prototype.handleEvent=function(t){return!0},e.prototype.setActive=function(t){this.set(Pl,t)},e.prototype.setMap=function(t){this.map_=t},e}(G),Al=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Dl=function(t){function e(e){var n=t.call(this)||this,i=e||{};return n.delta_=i.delta?i.delta:1,n.duration_=void 0!==i.duration?i.duration:250,n}return Al(e,t),e.prototype.handleEvent=function(t){var e=!1;if(t.type==Qa.DBLCLICK){var n=t.originalEvent,i=t.map,r=t.coordinate,o=n.shiftKey?-this.delta_:this.delta_;Fl(i.getView(),o,r,this.duration_),n.preventDefault(),e=!0}return!e},e}(Ll),kl=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function jl(t){for(var e=t.length,n=0,i=0,r=0;r0}}else if(t.type==Qa.POINTERDOWN){var i=this.handleDownEvent(t);this.handlingDownUpSequence=i,e=this.stopDown(i)}else t.type==Qa.POINTERMOVE&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===Qa.POINTERDOWN||e===Qa.POINTERDRAG||e===Qa.POINTERUP}(t)){var e=t.originalEvent,n=e.pointerId.toString();t.type==Qa.POINTERUP?delete this.trackedPointers_[n]:(t.type==Qa.POINTERDOWN||n in this.trackedPointers_)&&(this.trackedPointers_[n]=e),this.targetPointers=g(this.trackedPointers_)}},e}(Ll);function zl(t){var e=arguments;return function(t){for(var n=!0,i=0,r=e.length;i0&&this.condition_(t)){var e=t.map.getView();return this.lastCentroid=null,e.getAnimating()&&e.cancelAnimations(),this.kinetic_&&this.kinetic_.begin(),this.noKinetic_=this.targetPointers.length>1,!0}return!1},e}(Gl),Jl=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Ql=function(t){function e(e){var n=this,i=e||{};return(n=t.call(this,{stopDown:c})||this).condition_=i.condition?i.condition:Wl,n.lastAngle_=void 0,n.duration_=void 0!==i.duration?i.duration:250,n}return Jl(e,t),e.prototype.handleDragEvent=function(t){if(Vl(t)){var e=t.map,n=e.getView();if(n.getConstraints().rotation!==gl){var i=e.getSize(),r=t.pixel,o=Math.atan2(i[1]/2-r[1],r[0]-i[0]/2);if(void 0!==this.lastAngle_){var s=o-this.lastAngle_;n.adjustRotationInternal(-s)}this.lastAngle_=o}}},e.prototype.handleUpEvent=function(t){return!Vl(t)||(t.map.getView().endInteraction(this.duration_),!1)},e.prototype.handleDownEvent=function(t){return!(!Vl(t)||!Yl(t)||!this.condition_(t)||(t.map.getView().beginInteraction(),this.lastAngle_=void 0,0))},e}(Gl),$l=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),th=function(t){function e(e){var n=t.call(this)||this;return n.geometry_=null,n.element_=document.createElement("div"),n.element_.style.position="absolute",n.element_.style.pointerEvents="auto",n.element_.className="ol-box "+e,n.map_=null,n.startPixel_=null,n.endPixel_=null,n}return $l(e,t),e.prototype.disposeInternal=function(){this.setMap(null)},e.prototype.render_=function(){var t=this.startPixel_,e=this.endPixel_,n="px",i=this.element_.style;i.left=Math.min(t[0],e[0])+n,i.top=Math.min(t[1],e[1])+n,i.width=Math.abs(e[0]-t[0])+n,i.height=Math.abs(e[1]-t[1])+n},e.prototype.setMap=function(t){if(this.map_){this.map_.getOverlayContainer().removeChild(this.element_);var e=this.element_.style;e.left="inherit",e.top="inherit",e.width="inherit",e.height="inherit"}this.map_=t,this.map_&&this.map_.getOverlayContainer().appendChild(this.element_)},e.prototype.setPixels=function(t,e){this.startPixel_=t,this.endPixel_=e,this.createOrUpdateGeometry(),this.render_()},e.prototype.createOrUpdateGeometry=function(){var t=this.startPixel_,e=this.endPixel_,n=[t,[t[0],e[1]],e,[e[0],t[1]]].map(this.map_.getCoordinateFromPixelInternal,this.map_);n[4]=n[0].slice(),this.geometry_?this.geometry_.setCoordinates([n]):this.geometry_=new Ki([n])},e.prototype.getGeometry=function(){return this.geometry_},e}(r),eh=th,nh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ih=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.coordinate=n,r.mapBrowserEvent=i,r}return nh(e,t),e}(t),rh=function(t){function e(e){var n=t.call(this)||this;n.on,n.once,n.un;var i=e||{};return n.box_=new eh(i.className||"ol-dragbox"),n.minArea_=void 0!==i.minArea?i.minArea:64,i.onBoxEnd&&(n.onBoxEnd=i.onBoxEnd),n.startPixel_=null,n.condition_=i.condition?i.condition:Yl,n.boxEndCondition_=i.boxEndCondition?i.boxEndCondition:n.defaultBoxEndCondition,n}return nh(e,t),e.prototype.defaultBoxEndCondition=function(t,e,n){var i=n[0]-e[0],r=n[1]-e[1];return i*i+r*r>=this.minArea_},e.prototype.getGeometry=function(){return this.box_.getGeometry()},e.prototype.handleDragEvent=function(t){this.box_.setPixels(this.startPixel_,t.pixel),this.dispatchEvent(new ih("boxdrag",t.coordinate,t))},e.prototype.handleUpEvent=function(t){this.box_.setMap(null);var e=this.boxEndCondition_(t,this.startPixel_,t.pixel);return e&&this.onBoxEnd(t),this.dispatchEvent(new ih(e?"boxend":"boxcancel",t.coordinate,t)),!1},e.prototype.handleDownEvent=function(t){return!!this.condition_(t)&&(this.startPixel_=t.pixel,this.box_.setMap(t.map),this.box_.setPixels(this.startPixel_,this.startPixel_),this.dispatchEvent(new ih("boxstart",t.coordinate,t)),!0)},e.prototype.onBoxEnd=function(t){},e}(Gl),oh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),sh=function(t){function e(e){var n=this,i=e||{},r=i.condition?i.condition:Kl;return(n=t.call(this,{condition:r,className:i.className||"ol-dragzoom",minArea:i.minArea})||this).duration_=void 0!==i.duration?i.duration:200,n.out_=void 0!==i.out&&i.out,n}return oh(e,t),e.prototype.onBoxEnd=function(t){var e=this.getMap().getView(),n=this.getGeometry();if(this.out_){var i=e.rotatedExtentForGeometry(n),r=e.getResolutionForExtentInternal(i),o=e.getResolution()/r;(n=n.clone()).scale(o*o)}e.fitInternal(n,{duration:this.duration_,easing:xn})},e}(rh),ah=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),lh=function(t){function e(e){var n=t.call(this)||this,i=e||{};return n.defaultCondition_=function(t){return Bl(t)&&Zl(t)},n.condition_=void 0!==i.condition?i.condition:n.defaultCondition_,n.duration_=void 0!==i.duration?i.duration:100,n.pixelDelta_=void 0!==i.pixelDelta?i.pixelDelta:128,n}return ah(e,t),e.prototype.handleEvent=function(t){var e=!1;if(t.type==S){var n=t.originalEvent,i=n.keyCode;if(this.condition_(t)&&(40==i||37==i||39==i||38==i)){var r=t.map.getView(),o=r.getResolution()*this.pixelDelta_,s=0,a=0;40==i?a=-o:37==i?s=-o:39==i?s=o:a=o;var l=[s,a];We(l,r.getRotation()),function(t,e,n){var i=t.getCenterInternal();if(i){var r=[i[0]+e[0],i[1]+e[1]];t.animateInternal({duration:void 0!==n?n:250,easing:wn,center:t.getConstrainedCenter(r)})}}(r,l,this.duration_),n.preventDefault(),e=!0}}return!e},e}(Ll),hh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),uh=function(t){function e(e){var n=t.call(this)||this,i=e||{};return n.condition_=i.condition?i.condition:Zl,n.delta_=i.delta?i.delta:1,n.duration_=void 0!==i.duration?i.duration:100,n}return hh(e,t),e.prototype.handleEvent=function(t){var e=!1;if(t.type==S||t.type==E){var n=t.originalEvent,i=n.charCode;if(this.condition_(t)&&(i=="+".charCodeAt(0)||i=="-".charCodeAt(0))){var r=t.map,o=i=="+".charCodeAt(0)?this.delta_:-this.delta_;Fl(r.getView(),o,void 0,this.duration_),n.preventDefault(),e=!0}}return!e},e}(Ll),ch=function(){function t(t,e,n){this.decay_=t,this.minVelocity_=e,this.delay_=n,this.points_=[],this.angle_=0,this.initialVelocity_=0}return t.prototype.begin=function(){this.points_.length=0,this.angle_=0,this.initialVelocity_=0},t.prototype.update=function(t,e){this.points_.push(t,e,Date.now())},t.prototype.end=function(){if(this.points_.length<6)return!1;var t=Date.now()-this.delay_,e=this.points_.length-3;if(this.points_[e+2]0&&this.points_[n+2]>t;)n-=3;var i=this.points_[e+2]-this.points_[n+2];if(i<1e3/60)return!1;var r=this.points_[e]-this.points_[n],o=this.points_[e+1]-this.points_[n+1];return this.angle_=Math.atan2(o,r),this.initialVelocity_=Math.sqrt(r*r+o*o)/i,this.initialVelocity_>this.minVelocity_},t.prototype.getDistance=function(){return(this.minVelocity_-this.initialVelocity_)/this.decay_},t.prototype.getAngle=function(){return this.angle_},t}(),ph=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),fh="trackpad",dh=function(t){function e(e){var n=this,i=e||{};(n=t.call(this,i)||this).totalDelta_=0,n.lastDelta_=0,n.maxDelta_=void 0!==i.maxDelta?i.maxDelta:1,n.duration_=void 0!==i.duration?i.duration:250,n.timeout_=void 0!==i.timeout?i.timeout:80,n.useAnchor_=void 0===i.useAnchor||i.useAnchor,n.constrainResolution_=void 0!==i.constrainResolution&&i.constrainResolution;var r=i.condition?i.condition:Nl;return n.condition_=i.onFocusOnly?zl(Xl,r):r,n.lastAnchor_=null,n.startTime_=void 0,n.timeoutId_,n.mode_=void 0,n.trackpadEventGap_=400,n.trackpadTimeoutId_,n.deltaPerZoom_=300,n}return ph(e,t),e.prototype.endInteraction_=function(){this.trackpadTimeoutId_=void 0,this.getMap().getView().endInteraction(void 0,this.lastDelta_?this.lastDelta_>0?1:-1:0,this.lastAnchor_)},e.prototype.handleEvent=function(t){if(!this.condition_(t))return!0;if(t.type!==b)return!0;var e,n=t.map,i=t.originalEvent;if(i.preventDefault(),this.useAnchor_&&(this.lastAnchor_=t.coordinate),t.type==b&&(e=i.deltaY,Y&&i.deltaMode===WheelEvent.DOM_DELTA_PIXEL&&(e/=Z),i.deltaMode===WheelEvent.DOM_DELTA_LINE&&(e*=40)),0===e)return!1;this.lastDelta_=e;var r=Date.now();void 0===this.startTime_&&(this.startTime_=r),(!this.mode_||r-this.startTime_>this.trackpadEventGap_)&&(this.mode_=Math.abs(e)<4?fh:"wheel");var o=n.getView();if(this.mode_===fh&&!o.getConstrainResolution()&&!this.constrainResolution_)return this.trackpadTimeoutId_?clearTimeout(this.trackpadTimeoutId_):(o.getAnimating()&&o.cancelAnimations(),o.beginInteraction()),this.trackpadTimeoutId_=setTimeout(this.endInteraction_.bind(this),this.timeout_),o.adjustZoom(-e/this.deltaPerZoom_,this.lastAnchor_),this.startTime_=r,!1;this.totalDelta_+=e;var s=Math.max(this.timeout_-(r-this.startTime_),0);return clearTimeout(this.timeoutId_),this.timeoutId_=setTimeout(this.handleWheelZoom_.bind(this,n),s),!1},e.prototype.handleWheelZoom_=function(t){var e=t.getView();e.getAnimating()&&e.cancelAnimations();var n=-mt(this.totalDelta_,-this.maxDelta_*this.deltaPerZoom_,this.maxDelta_*this.deltaPerZoom_)/this.deltaPerZoom_;(e.getConstrainResolution()||this.constrainResolution_)&&(n=n?n>0?1:-1:0),Fl(e,n,this.lastAnchor_,this.duration_),this.mode_=void 0,this.totalDelta_=0,this.lastAnchor_=null,this.startTime_=void 0,this.timeoutId_=void 0},e.prototype.setMouseAnchor=function(t){this.useAnchor_=t,t||(this.lastAnchor_=null)},e}(Ll),gh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),_h=function(t){function e(e){var n=this,i=e||{},r=i;return r.stopDown||(r.stopDown=c),(n=t.call(this,r)||this).anchor_=null,n.lastAngle_=void 0,n.rotating_=!1,n.rotationDelta_=0,n.threshold_=void 0!==i.threshold?i.threshold:.3,n.duration_=void 0!==i.duration?i.duration:250,n}return gh(e,t),e.prototype.handleDragEvent=function(t){var e=0,n=this.targetPointers[0],i=this.targetPointers[1],r=Math.atan2(i.clientY-n.clientY,i.clientX-n.clientX);if(void 0!==this.lastAngle_){var o=r-this.lastAngle_;this.rotationDelta_+=o,!this.rotating_&&Math.abs(this.rotationDelta_)>this.threshold_&&(this.rotating_=!0),e=o}this.lastAngle_=r;var s=t.map,a=s.getView();if(a.getConstraints().rotation!==gl){var l=s.getViewport().getBoundingClientRect(),h=jl(this.targetPointers);h[0]-=l.left,h[1]-=l.top,this.anchor_=s.getCoordinateFromPixelInternal(h),this.rotating_&&(s.render(),a.adjustRotationInternal(e,this.anchor_))}},e.prototype.handleUpEvent=function(t){return!(this.targetPointers.length<2&&(t.map.getView().endInteraction(this.duration_),1))},e.prototype.handleDownEvent=function(t){if(this.targetPointers.length>=2){var e=t.map;return this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1},e}(Gl),yh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),vh=function(t){function e(e){var n=this,i=e||{},r=i;return r.stopDown||(r.stopDown=c),(n=t.call(this,r)||this).anchor_=null,n.duration_=void 0!==i.duration?i.duration:400,n.lastDistance_=void 0,n.lastScaleDelta_=1,n}return yh(e,t),e.prototype.handleDragEvent=function(t){var e=1,n=this.targetPointers[0],i=this.targetPointers[1],r=n.clientX-i.clientX,o=n.clientY-i.clientY,s=Math.sqrt(r*r+o*o);void 0!==this.lastDistance_&&(e=this.lastDistance_/s),this.lastDistance_=s;var a=t.map,l=a.getView();1!=e&&(this.lastScaleDelta_=e);var h=a.getViewport().getBoundingClientRect(),u=jl(this.targetPointers);u[0]-=h.left,u[1]-=h.top,this.anchor_=a.getCoordinateFromPixelInternal(u),a.render(),l.adjustResolutionInternal(e,this.anchor_)},e.prototype.handleUpEvent=function(t){if(this.targetPointers.length<2){var e=t.map.getView(),n=this.lastScaleDelta_>1?1:-1;return e.endInteraction(this.duration_,n),!1}return!0},e.prototype.handleDownEvent=function(t){if(this.targetPointers.length>=2){var e=t.map;return this.anchor_=null,this.lastDistance_=void 0,this.lastScaleDelta_=1,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1},e}(Gl),mh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),xh=function(t){function e(e){return(e=f({},e)).controls||(e.controls=function(t){var e={},n=new Ea;return(void 0===e.zoom||e.zoom)&&n.push(new Tn(e.zoomOptions)),(void 0===e.rotate||e.rotate)&&n.push(new Il(e.rotateOptions)),(void 0===e.attribution||e.attribution)&&n.push(new Wt(e.attributionOptions)),n}()),e.interactions||(e.interactions=function(t){var e={onFocusOnly:!0}||{},n=new Ea,i=new ch(-.005,.05,100);return(void 0===e.altShiftDragRotate||e.altShiftDragRotate)&&n.push(new Ql),(void 0===e.doubleClickZoom||e.doubleClickZoom)&&n.push(new Dl({delta:e.zoomDelta,duration:e.zoomDuration})),(void 0===e.dragPan||e.dragPan)&&n.push(new ql({onFocusOnly:e.onFocusOnly,kinetic:i})),(void 0===e.pinchRotate||e.pinchRotate)&&n.push(new _h),(void 0===e.pinchZoom||e.pinchZoom)&&n.push(new vh({duration:e.zoomDuration})),(void 0===e.keyboard||e.keyboard)&&(n.push(new lh),n.push(new uh({delta:e.zoomDelta,duration:e.zoomDuration}))),(void 0===e.mouseWheelZoom||e.mouseWheelZoom)&&n.push(new dh({onFocusOnly:e.onFocusOnly,duration:e.zoomDuration})),(void 0===e.shiftDragZoom||e.shiftDragZoom)&&n.push(new sh({duration:e.zoomDuration})),n}()),t.call(this,e)||this}return mh(e,t),e.prototype.createRenderer=function(){return new Ya(this)},e}(bl),Ch={control:{Attribution:Wt,MousePosition:vn,Zoom:Tn},coordinate:{createStringXY:function(t){return function(e){return function(t,e){return function(t,e,n){return t?"{x}, {y}".replace("{x}",t[0].toFixed(n)).replace("{y}",t[1].toFixed(n)):""}(t,0,e)}(e,t)}}},extent:{boundingExtent:ue},geom:{LineString:wi,LinearRing:Oi,MultiLineString:Pi,MultiPoint:ki,MultiPolygon:Hi,Point:Li,Polygon:Ki},layer:{Tile:Xr,Vector:Ns},proj:{fromLonLat:function(t,e){return Be(),en(t,"EPSG:4326",void 0!==e?e:"EPSG:3857")},get:Ue,transformExtent:nn},source:{OSM:va,Vector:La},style:{Circle:fo,Fill:go,Stroke:_o,Style:Co,Text:Aa},Feature:ja,Map:xh,View:wl}}(),i.default}()})); +//# sourceMappingURL=OpenLayers.js.map diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/openlayers/theme/ol.css b/Sources/php_script/script/phpMyAdmin/js/vendor/openlayers/theme/ol.css new file mode 100644 index 0000000..18ad4ac --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/vendor/openlayers/theme/ol.css @@ -0,0 +1,285 @@ +.ol-box { + box-sizing: border-box; + border-radius: 2px; + border: 1.5px solid rgb(179,197,219); + background-color: rgba(255,255,255,0.4); +} + +.ol-mouse-position { + top: 8px; + right: 8px; + position: absolute; +} + +.ol-scale-line { + background: rgba(0,60,136,0.3); + border-radius: 4px; + bottom: 8px; + left: 8px; + padding: 2px; + position: absolute; +} +.ol-scale-line-inner { + border: 1px solid #eee; + border-top: none; + color: #eee; + font-size: 10px; + text-align: center; + margin: 1px; + will-change: contents, width; + transition: all 0.25s; +} +.ol-scale-bar { + position: absolute; + bottom: 8px; + left: 8px; +} +.ol-scale-step-marker { + width: 1px; + height: 15px; + background-color: #000000; + float: right; + z-index: 10; +} +.ol-scale-step-text { + position: absolute; + bottom: -5px; + font-size: 12px; + z-index: 11; + color: #000000; + text-shadow: -2px 0 #FFFFFF, 0 2px #FFFFFF, 2px 0 #FFFFFF, 0 -2px #FFFFFF; +} +.ol-scale-text { + position: absolute; + font-size: 14px; + text-align: center; + bottom: 25px; + color: #000000; + text-shadow: -2px 0 #FFFFFF, 0 2px #FFFFFF, 2px 0 #FFFFFF, 0 -2px #FFFFFF; +} +.ol-scale-singlebar { + position: relative; + height: 10px; + z-index: 9; + box-sizing: border-box; + border: 1px solid black; +} + +.ol-unsupported { + display: none; +} +.ol-viewport, .ol-unselectable { + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} +.ol-viewport canvas { + all: unset; +} +.ol-selectable { + -webkit-touch-callout: default; + -webkit-user-select: text; + -moz-user-select: text; + -ms-user-select: text; + user-select: text; +} +.ol-grabbing { + cursor: -webkit-grabbing; + cursor: -moz-grabbing; + cursor: grabbing; +} +.ol-grab { + cursor: move; + cursor: -webkit-grab; + cursor: -moz-grab; + cursor: grab; +} +.ol-control { + position: absolute; + background-color: rgba(255,255,255,0.4); + border-radius: 4px; + padding: 2px; +} +.ol-control:hover { + background-color: rgba(255,255,255,0.6); +} +.ol-zoom { + top: .5em; + left: .5em; +} +.ol-rotate { + top: .5em; + right: .5em; + transition: opacity .25s linear, visibility 0s linear; +} +.ol-rotate.ol-hidden { + opacity: 0; + visibility: hidden; + transition: opacity .25s linear, visibility 0s linear .25s; +} +.ol-zoom-extent { + top: 4.643em; + left: .5em; +} +.ol-full-screen { + right: .5em; + top: .5em; +} + +.ol-control button { + display: block; + margin: 1px; + padding: 0; + color: white; + font-weight: bold; + text-decoration: none; + font-size: inherit; + text-align: center; + height: 1.375em; + width: 1.375em; + line-height: .4em; + background-color: rgba(0,60,136,0.5); + border: none; + border-radius: 2px; +} +.ol-control button::-moz-focus-inner { + border: none; + padding: 0; +} +.ol-zoom-extent button { + line-height: 1.4em; +} +.ol-compass { + display: block; + font-weight: normal; + font-size: 1.2em; + will-change: transform; +} +.ol-touch .ol-control button { + font-size: 1.5em; +} +.ol-touch .ol-zoom-extent { + top: 5.5em; +} +.ol-control button:hover, +.ol-control button:focus { + text-decoration: none; + background-color: rgba(0,60,136,0.7); +} +.ol-zoom .ol-zoom-in { + border-radius: 2px 2px 0 0; +} +.ol-zoom .ol-zoom-out { + border-radius: 0 0 2px 2px; +} + + +.ol-attribution { + text-align: right; + bottom: .5em; + right: .5em; + max-width: calc(100% - 1.3em); + display: flex; + flex-flow: row-reverse; + align-items: center; +} +.ol-attribution a { + color: rgba(0,60,136,0.7); + text-decoration: none; +} +.ol-attribution ul { + margin: 0; + padding: 1px .5em; + color: #000; + text-shadow: 0 0 2px #fff; + font-size: 12px; +} +.ol-attribution li { + display: inline; + list-style: none; +} +.ol-attribution li:not(:last-child):after { + content: " "; +} +.ol-attribution img { + max-height: 2em; + max-width: inherit; + vertical-align: middle; +} +.ol-attribution button { + flex-shrink: 0; +} +.ol-attribution.ol-collapsed ul { + display: none; +} +.ol-attribution:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-attribution.ol-uncollapsible { + bottom: 0; + right: 0; + border-radius: 4px 0 0; +} +.ol-attribution.ol-uncollapsible img { + margin-top: -.2em; + max-height: 1.6em; +} +.ol-attribution.ol-uncollapsible button { + display: none; +} + +.ol-zoomslider { + top: 4.5em; + left: .5em; + height: 200px; +} +.ol-zoomslider button { + position: relative; + height: 10px; +} + +.ol-touch .ol-zoomslider { + top: 5.5em; +} + +.ol-overviewmap { + left: 0.5em; + bottom: 0.5em; +} +.ol-overviewmap.ol-uncollapsible { + bottom: 0; + left: 0; + border-radius: 0 4px 0 0; +} +.ol-overviewmap .ol-overviewmap-map, +.ol-overviewmap button { + display: block; +} +.ol-overviewmap .ol-overviewmap-map { + border: 1px solid #7b98bc; + height: 150px; + margin: 2px; + width: 150px; +} +.ol-overviewmap:not(.ol-collapsed) button { + bottom: 2px; + left: 2px; + position: absolute; +} +.ol-overviewmap.ol-collapsed .ol-overviewmap-map, +.ol-overviewmap.ol-uncollapsible button { + display: none; +} +.ol-overviewmap:not(.ol-collapsed) { + background: rgba(255,255,255,0.8); +} +.ol-overviewmap-box { + border: 2px dotted rgba(0,60,136,0.7); +} + +.ol-overviewmap .ol-overviewmap-box:hover { + cursor: move; +} diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/zxcvbn-ts.js.map b/Sources/php_script/script/phpMyAdmin/js/vendor/zxcvbn-ts.js.map new file mode 100644 index 0000000..5bcb432 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/js/vendor/zxcvbn-ts.js.map @@ -0,0 +1 @@ +{"version":3,"file":"zxcvbn-ts.js","sources":["../src/helper.ts","../src/data/dateSplits.ts","../src/data/const.ts","../src/matcher/date/matching.ts","../../../../node_modules/fastest-levenshtein/index.js","../src/levenshtein.ts","../src/data/l33tTable.ts","../src/data/translationKeys.ts","../src/Options.ts","../src/matcher/dictionary/variants/matching/reverse.ts","../src/matcher/dictionary/variants/matching/l33t.ts","../src/matcher/dictionary/matching.ts","../src/matcher/regex/matching.ts","../src/scoring/utils.ts","../src/matcher/bruteforce/scoring.ts","../src/matcher/date/scoring.ts","../src/matcher/dictionary/variants/scoring/uppercase.ts","../src/matcher/dictionary/variants/scoring/l33t.ts","../src/matcher/dictionary/scoring.ts","../src/matcher/regex/scoring.ts","../src/matcher/repeat/scoring.ts","../src/matcher/sequence/scoring.ts","../src/matcher/spatial/scoring.ts","../src/scoring/estimate.ts","../src/scoring/index.ts","../src/matcher/repeat/matching.ts","../src/matcher/sequence/matching.ts","../src/matcher/spatial/matching.ts","../src/Matching.ts","../src/TimeEstimates.ts","../src/matcher/bruteforce/feedback.ts","../src/matcher/date/feedback.ts","../src/matcher/dictionary/feedback.ts","../src/matcher/regex/feedback.ts","../src/matcher/repeat/feedback.ts","../src/matcher/sequence/feedback.ts","../src/matcher/spatial/feedback.ts","../src/Feedback.ts","../src/debounce.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,"\"use strict\";\nconst peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\n\nconst myers_x = (a, b) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n let score = m;\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const end = Math.min(32, m) + start;\n for (let k = start; k < end; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < end; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const end = Math.min(32, m - start) + start;\n for (let k = start; k < end; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < end; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\n\nconst distance = (a, b) => {\n if (a.length > b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (a.length === 0) {\n return b.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\n\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\n\nmodule.exports = {\n closest, distance\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["empty","obj","Object","keys","length","extend","listToExtend","list","push","apply","translate","string","chrMap","tempArray","split","map","char","join","sorted","matches","sort","m1","m2","i","j","buildRankedDictionary","orderedList","result","counter","forEach","word","DATE_MAX_YEAR","DATE_MIN_YEAR","DATE_SPLITS","dateSplits","BRUTEFORCE_CARDINALITY","MIN_GUESSES_BEFORE_GROWING_SEQUENCE","MIN_SUBMATCH_GUESSES_SINGLE_CHAR","MIN_SUBMATCH_GUESSES_MULTI_CHAR","MIN_YEAR_SPACE","START_UPPER","END_UPPER","ALL_UPPER","ALL_UPPER_INVERTED","ALL_LOWER","ALL_LOWER_INVERTED","ONE_UPPER","ONE_LOWER","ALPHA_INVERTED","ALL_DIGIT","REFERENCE_YEAR","Date","getFullYear","REGEXEN","recentYear","MatchDate","match","password","getMatchesWithoutSeparator","getMatchesWithSeparator","filteredMatches","filterNoise","maybeDateWithSeparator","Math","abs","token","slice","regexMatch","exec","dmy","mapIntegersToDayMonthYear","parseInt","pattern","separator","year","month","day","maybeDateNoSeparator","metric","candidate","candidates","index","splittedDates","k","l","bestCandidate","minDistance","distance","filter","isSubmatch","matchesLength","o","otherMatch","integers","over12","over31","under1","len1","int","getDayMonth","possibleYearSplits","possibleYearSplitsLength","y","rest","dm","mapIntegersToDayMonth","twoToFourDigitYear","temp","reverse","data","getUsedThreshold","entry","threshold","isPasswordToShort","isThresholdLongerThanPassword","shouldUsePasswordLength","ceil","findLevenshteinDistance","rankedDictionary","foundDistance","found","find","usedThreshold","foundEntryDistance","isInThreshold","levenshteinDistance","levenshteinDistanceEntry","a","b","c","e","g","s","t","x","z","warnings","straightRow","keyPattern","simpleRepeat","extendedRepeat","sequences","recentYears","dates","topTen","topHundred","common","similarToCommon","wordByItself","namesByThemselves","commonNames","userInputs","pwned","suggestions","l33t","reverseWords","allUppercase","capitalization","associatedYears","repeated","longerKeyboardPattern","anotherWord","useWords","noNeed","timeEstimation","ltSecond","second","seconds","minute","minutes","hour","hours","days","months","years","centuries","Options","constructor","l33tTable","translationKeys","setRankedDictionaries","setOptions","options","dictionary","translations","setTranslations","graphs","useLevenshteinDistance","undefined","levenshteinThreshold","checkCustomTranslations","Error","valid","type","translationType","key","rankedDictionaries","name","getRankedDictionary","sanitizedInputs","input","inputType","toString","toLowerCase","extendUserInputsDictionary","addMatcher","matcher","matchers","console","info","zxcvbnOptions","MatchL33t","defaultMatch","passwordReversed","reversed","enumeratedSubs","enumerateL33tSubs","relevantL33tSubtable","sub","subbedPassword","matchedDictionary","matchedWord","matchSub","subbedChr","chr","indexOf","subDisplay","table","passwordChars","subTable","letter","subs","relevantSubs","tableKeys","getSubs","subDict","l33tChr","firstKey","restKeys","nextSubs","dupL33tIndex","subExtension","concat","subAlternative","splice","newSubs","dedup","deduped","members","assoc","label","v","MatchDictionary","L33t","Reverse","passwordLength","passwordLower","dictionaryName","rankedDict","usedPassword","isInDictionary","foundLevenshteinDistance","isFullPassword","isLevenshteinMatch","usedRankPassword","rank","MatchRegex","regexes","regex","lastIndex","regexName","nCk","n","count","coEff","log10","log","log2","factorial","num","rval","guesses","Number","POSITIVE_INFINITY","MAX_VALUE","minGuesses","max","yearSpace","getVariations","cleanedWord","wordArray","upperCaseCount","lowerCaseCount","variations","variationLength","min","utils","replace","commonCases","commonCasesLength","getCounts","subbed","unsubbed","chrs","subbedCount","unsubbedCount","p","possibilities","baseGuesses","uppercaseVariations","uppercaseVariant","l33tVariations","l33tVariant","reversedVariations","calculation","charClassBases","alphaLower","alphaUpper","alpha","alphanumeric","digits","symbols","repeatCount","ascending","firstChr","charAt","startingPoints","includes","calcAverageDegree","graph","average","neighbors","entries","estimatePossiblePatterns","turns","startingPosition","averageDegree","tokenLength","possibleTurns","shiftedCount","unShiftedCount","shiftedVariations","round","getMinGuesses","bruteforce","bruteforceMatcher","date","dateMatcher","dictionaryMatcher","regexMatcher","repeat","repeatMatcher","sequence","sequenceMatcher","spatial","spatialMatcher","getScoring","scoring","extraData","estimationResult","matchGuesses","guessesLog10","scoringHelper","optimal","excludeAdditive","fillArray","size","valueType","value","makeBruteforceMatch","update","sequenceLength","estimatedMatch","estimateGuesses","pi","shouldSkip","competingPatternLength","competingMetricMatch","m","bruteforceUpdate","passwordCharIndex","tmp","lastMatch","unwind","optimalMatchSequence","candidateSequenceLength","candidateMetricMatch","unshift","mostGuessableMatchSequence","matchesByCoordinateJ","optimalSequenceLength","getGuesses","MatchRepeat","omniMatch","greedyMatch","getGreedyMatch","lazyMatch","getLazyMatch","baseToken","setMatchToken","getBaseGuesses","normalizeMatch","hasPromises","some","Promise","all","baseMatch","then","resolvedBaseGuesses","greedy","lazy","lazyAnchored","resolvedMatches","baseAnalysis","MatchSequence","lastDelta","delta","charCodeAt","absoluteDelta","MAX_DELTA","sequenceName","sequenceSpace","getSequence","test","MatchSpatial","graphName","helper","checkIfShifted","SHIFTED_RX","lastDirection","prevChar","adjacents","foundDirection","curDirection","curChar","adjacentsLength","adjacent","adjacentIndex","Matching","promises","Matcher","usedMatcher","response","resolve","SECOND","MINUTE","HOUR","DAY","MONTH","YEAR","CENTURY","times","century","TimeEstimates","displayStr","estimateAttackTimes","crackTimesSeconds","onlineThrottling100PerHour","onlineNoThrottling10PerSecond","offlineSlowHashing1e4PerSecond","offlineFastHashing1e10PerSecond","crackTimesDisplay","scenario","displayTime","score","guessesToScore","DELTA","base","timeKeys","foundIndex","findIndex","time","warning","getDictionaryWarningPassword","isSoleMatch","getDictionaryWarningWikipedia","getDictionaryWarningNames","getDictionaryWarning","dictName","isAName","defaultFeedback","Feedback","setDefaultSuggestions","getFeedback","extraFeedback","longestMatch","getLongestMatch","feedback","getMatchFeedback","slicedSequence","func","wait","isImmediate","timeout","debounce","args","context","later","shouldCallNow","clearTimeout","setTimeout","getTime","createReturnValue","start","timeEstimates","matchSequence","calcTime","attackTimes","main","matching","zxcvbn","zxcvbnAsync"],"mappings":"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"} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/libraries/advisory_rules_mysql_before80003.php b/Sources/php_script/script/phpMyAdmin/libraries/advisory_rules_mysql_before80003.php new file mode 100644 index 0000000..4493c16 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/advisory_rules_mysql_before80003.php @@ -0,0 +1,122 @@ + 'Query cache disabled', + 'name' => __('Query cache disabled'), + 'formula' => 'query_cache_size', + 'test' => 'value == 0 || query_cache_type == \'OFF\' || query_cache_type == \'0\'', + 'issue' => __('The query cache is not enabled.'), + 'recommendation' => __( + 'The query cache is known to greatly improve performance if configured correctly. Enable it by' + . ' setting {query_cache_size} to a 2 digit MiB value and setting {query_cache_type} to \'ON\'.' + . ' Note: If you are using memcached, ignore this recommendation.' + ), + 'justification' => __('query_cache_size is set to 0 or query_cache_type is set to \'OFF\''), + ], + [ + 'id' => 'Query cache efficiency (%)', + /* xgettext:no-php-format */ + 'name' => __('Query cache efficiency (%)'), + 'precondition' => 'Com_select + Qcache_hits > 0 && !fired(\'Query cache disabled\')', + 'formula' => 'Qcache_hits / (Com_select + Qcache_hits) * 100', + 'test' => 'value < 20', + 'issue' => __('Query cache not running efficiently, it has a low hit rate.'), + 'recommendation' => __('Consider increasing {query_cache_limit}.'), + 'justification' => __('The current query cache hit rate of %s%% is below 20%%'), + 'justification_formula' => 'round(value,1)', + ], + [ + 'id' => 'Query Cache usage', + 'name' => __('Query Cache usage'), + 'precondition' => '!fired(\'Query cache disabled\')', + 'formula' => '100 - Qcache_free_memory / query_cache_size * 100', + 'test' => 'value < 80', + /* xgettext:no-php-format */ + 'issue' => __('Less than 80% of the query cache is being utilized.'), + 'recommendation' => __( + 'This might be caused by {query_cache_limit} being too low.' + . ' Flushing the query cache might help as well.' + ), + 'justification' => __( + 'The current ratio of free query cache memory to total query' + . ' cache size is %s%%. It should be above 80%%' + ), + 'justification_formula' => 'round(value,1)', + ], + [ + 'id' => 'Query cache fragmentation', + 'name' => __('Query cache fragmentation'), + 'precondition' => '!fired(\'Query cache disabled\')', + 'formula' => 'Qcache_free_blocks / (Qcache_total_blocks / 2) * 100', + 'test' => 'value > 20', + 'issue' => __('The query cache is considerably fragmented.'), + 'recommendation' => __( + 'Severe fragmentation is likely to (further) increase Qcache_lowmem_prunes. This might be' + . ' caused by many Query cache low memory prunes due to {query_cache_size} being too small. For a' + . ' immediate but short lived fix you can flush the query cache (might lock the query cache for a' + . ' long time). Carefully adjusting {query_cache_min_res_unit} to a lower value might help too,' + . ' e.g. you can set it to the average size of your queries in the cache using this formula:' + . ' (query_cache_size - qcache_free_memory) / qcache_queries_in_cache' + ), + 'justification' => __( + 'The cache is currently fragmented by %s%% , with 100%% fragmentation meaning that the query' + . ' cache is an alternating pattern of free and used blocks. This value should be below 20%%.' + ), + 'justification_formula' => 'round(value,1)', + ], + [ + 'id' => 'Query cache low memory prunes', + 'name' => __('Query cache low memory prunes'), + 'precondition' => 'Qcache_inserts > 0 && !fired(\'Query cache disabled\')', + 'formula' => 'Qcache_lowmem_prunes / Qcache_inserts * 100', + 'test' => 'value > 0.1', + 'issue' => __('Cached queries are removed due to low query cache memory from the query cache.'), + 'recommendation' => __( + 'You might want to increase {query_cache_size}, however keep in mind that the overhead of' + . ' maintaining the cache is likely to increase with its size, so do this in small increments' + . ' and monitor the results.' + ), + 'justification' => __( + 'The ratio of removed queries to inserted queries is %s%%. The lower this value is,' + . ' the better (This rules firing limit: 0.1%%)' + ), + 'justification_formula' => 'round(value,1)', + ], + [ + 'id' => 'Query cache max size', + 'name' => __('Query cache max size'), + 'precondition' => '!fired(\'Query cache disabled\')', + 'formula' => 'query_cache_size', + 'test' => 'value > 1024 * 1024 * 128', + 'issue' => __( + 'The query cache size is above 128 MiB. Big query caches may cause significant' + . ' overhead that is required to maintain the cache.' + ), + 'recommendation' => __( + 'Depending on your environment, it might be performance increasing to reduce this value.' + ), + 'justification' => __('Current query cache size: %s'), + 'justification_formula' => 'ADVISOR_formatByteDown(value, 2, 2)', + ], + [ + 'id' => 'Query cache min result size', + 'name' => __('Query cache min result size'), + 'precondition' => '!fired(\'Query cache disabled\')', + 'formula' => 'query_cache_limit', + 'test' => 'value == 1024*1024', + 'issue' => __('The max size of the result set in the query cache is the default of 1 MiB.'), + 'recommendation' => __( + 'Changing {query_cache_limit} (usually by increasing) may increase efficiency. This variable' + . ' determines the maximum size a query result may have to be inserted into the query cache.' + . ' If there are many query results above 1 MiB that are well cacheable (many reads, little writes)' + . ' then increasing {query_cache_limit} will increase efficiency. Whereas in the case of many query' + . ' results being above 1 MiB that are not very well cacheable (often invalidated due to table' + . ' updates) increasing {query_cache_limit} might reduce efficiency.' + ), + 'justification' => __('query_cache_limit is set to 1 MiB'), + ], +]; diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Command/TwigLintCommand.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Command/TwigLintCommand.php new file mode 100644 index 0000000..876d352 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Command/TwigLintCommand.php @@ -0,0 +1,271 @@ + + * Author: Jérôme Tamarelle + * + * Copyright (c) 2013-2021 Fabien Potencier + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is furnished + * to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +class TwigLintCommand extends Command +{ + /** @var string|null */ + protected static $defaultName = 'lint:twig'; + + /** @var string|null */ + protected static $defaultDescription = 'Lint a Twig template and outputs encountered errors'; + + protected function configure(): void + { + $this + ->setDescription((string) self::$defaultDescription) + ->addOption('show-deprecations', null, InputOption::VALUE_NONE, 'Show deprecations as errors'); + } + + protected function findFiles(string $baseFolder): array + { + /* Open the handle */ + $handle = @opendir($baseFolder); + if ($handle === false) { + return []; + } + + $foundFiles = []; + + while (($file = readdir($handle)) !== false) { + if ($file === '.' || $file === '..') { + continue; + } + + $itemPath = $baseFolder . DIRECTORY_SEPARATOR . $file; + + if (is_dir($itemPath)) { + array_push($foundFiles, ...$this->findFiles($itemPath)); + continue; + } + + if (! is_file($itemPath)) { + continue; + } + + $foundFiles[] = $itemPath; + } + + /* Close the handle */ + closedir($handle); + + return $foundFiles; + } + + protected function execute(InputInterface $input, OutputInterface $output): int + { + $io = new SymfonyStyle($input, $output); + $showDeprecations = $input->getOption('show-deprecations'); + + if ($showDeprecations) { + $prevErrorHandler = set_error_handler( + static function (int $level, string $message, string $file, int $line) use (&$prevErrorHandler) { + if ($level === E_USER_DEPRECATED) { + $templateLine = 0; + if (preg_match('/ at line (\d+)[ .]/', $message, $matches)) { + $templateLine = (int) $matches[1]; + } + + throw new Error($message, $templateLine); + } + + return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false; + } + ); + } + + try { + $filesInfo = $this->getFilesInfo(ROOT_PATH . 'templates'); + } finally { + if ($showDeprecations) { + restore_error_handler(); + } + } + + return $this->display($output, $io, $filesInfo); + } + + protected function getFilesInfo(string $templatesPath): array + { + $filesInfo = []; + $filesFound = $this->findFiles($templatesPath); + foreach ($filesFound as $file) { + $filesInfo[] = $this->validate($this->getTemplateContents($file), $file); + } + + return $filesInfo; + } + + /** + * Allows easier testing + */ + protected function getTemplateContents(string $filePath): string + { + return (string) file_get_contents($filePath); + } + + private function validate(string $template, string $file): array + { + $twig = Template::getTwigEnvironment(null); + + $realLoader = $twig->getLoader(); + try { + $temporaryLoader = new ArrayLoader([$file => $template]); + $twig->setLoader($temporaryLoader); + $nodeTree = $twig->parse($twig->tokenize(new Source($template, $file))); + $twig->compile($nodeTree); + $twig->setLoader($realLoader); + } catch (Error $e) { + $twig->setLoader($realLoader); + + return [ + 'template' => $template, + 'file' => $file, + 'line' => $e->getTemplateLine(), + 'valid' => false, + 'exception' => $e, + ]; + } + + return ['template' => $template, 'file' => $file, 'valid' => true]; + } + + private function display(OutputInterface $output, SymfonyStyle $io, array $filesInfo): int + { + $errors = 0; + + foreach ($filesInfo as $info) { + if ($info['valid'] && $output->isVerbose()) { + $io->comment('OK' . ($info['file'] ? sprintf(' in %s', $info['file']) : '')); + } elseif (! $info['valid']) { + ++$errors; + $this->renderException($io, $info['template'], $info['exception'], $info['file']); + } + } + + if ($errors === 0) { + $io->success(sprintf('All %d Twig files contain valid syntax.', count($filesInfo))); + + return Command::SUCCESS; + } + + $io->warning( + sprintf( + '%d Twig files have valid syntax and %d contain errors.', + count($filesInfo) - $errors, + $errors + ) + ); + + return Command::FAILURE; + } + + private function renderException( + SymfonyStyle $output, + string $template, + Error $exception, + ?string $file = null + ): void { + $line = $exception->getTemplateLine(); + + if ($file) { + $output->text(sprintf(' ERROR in %s (line %s)', $file, $line)); + } else { + $output->text(sprintf(' ERROR (line %s)', $line)); + } + + // If the line is not known (this might happen for deprecations if we fail at detecting the line for instance), + // we render the message without context, to ensure the message is displayed. + if ($line <= 0) { + $output->text(sprintf(' >> %s ', $exception->getRawMessage())); + + return; + } + + foreach ($this->getContext($template, $line) as $lineNumber => $code) { + $output->text(sprintf( + '%s %-6s %s', + $lineNumber === $line ? ' >> ' : ' ', + $lineNumber, + $code + )); + if ($lineNumber !== $line) { + continue; + } + + $output->text(sprintf(' >> %s ', $exception->getRawMessage())); + } + } + + private function getContext(string $template, int $line, int $context = 3): array + { + $lines = explode("\n", $template); + + $position = max(0, $line - $context); + $max = min(count($lines), $line - 1 + $context); + + $result = []; + while ($position < $max) { + $result[$position + 1] = $lines[$position]; + ++$position; + } + + return $result; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplay.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplay.php new file mode 100644 index 0000000..7e64442 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplay.php @@ -0,0 +1,889 @@ +formDisplayTemplate = new FormDisplayTemplate($GLOBALS['config']); + $this->configFile = $cf; + // initialize validators + Validator::getValidators($this->configFile); + } + + /** + * Returns {@link ConfigFile} associated with this instance + * + * @return ConfigFile + */ + public function getConfigFile() + { + return $this->configFile; + } + + /** + * Registers form in form manager + * + * @param string $formName Form name + * @param array $form Form data + * @param int $serverId 0 if new server, validation; >= 1 if editing a server + */ + public function registerForm($formName, array $form, $serverId = null): void + { + $this->forms[$formName] = new Form($formName, $form, $this->configFile, $serverId); + $this->isValidated = false; + foreach ($this->forms[$formName]->fields as $path) { + $workPath = $serverId === null + ? $path + : str_replace('Servers/1/', 'Servers/' . $serverId . '/', $path); + $this->systemPaths[$workPath] = $path; + $this->translatedPaths[$workPath] = str_replace('/', '-', $workPath); + } + } + + /** + * Processes forms, returns true on successful save + * + * @param bool $allowPartialSave allows for partial form saving + * on failed validation + * @param bool $checkFormSubmit whether check for $_POST['submit_save'] + */ + public function process($allowPartialSave = true, $checkFormSubmit = true): bool + { + if ($checkFormSubmit && ! isset($_POST['submit_save'])) { + return false; + } + + // save forms + if (count($this->forms) > 0) { + return $this->save(array_keys($this->forms), $allowPartialSave); + } + + return false; + } + + /** + * Runs validation for all registered forms + */ + private function validate(): void + { + if ($this->isValidated) { + return; + } + + $paths = []; + $values = []; + foreach ($this->forms as $form) { + $paths[] = $form->name; + // collect values and paths + foreach ($form->fields as $path) { + $workPath = array_search($path, $this->systemPaths); + $values[$path] = $this->configFile->getValue($workPath); + $paths[] = $path; + } + } + + // run validation + $errors = Validator::validate($this->configFile, $paths, $values, false); + + // change error keys from canonical paths to work paths + if (is_array($errors) && count($errors) > 0) { + $this->errors = []; + foreach ($errors as $path => $errorList) { + $workPath = array_search($path, $this->systemPaths); + // field error + if (! $workPath) { + // form error, fix path + $workPath = $path; + } + + $this->errors[$workPath] = $errorList; + } + } + + $this->isValidated = true; + } + + /** + * Outputs HTML for forms + * + * @param bool $showButtons whether show submit and reset button + * @param string $formAction action attribute for the form + * @param array|null $hiddenFields array of form hidden fields (key: field + * name) + * + * @return string HTML for forms + */ + public function getDisplay( + $showButtons = true, + $formAction = null, + $hiddenFields = null + ) { + $js = []; + $jsDefault = []; + + /** + * We do validation on page refresh when browser remembers field values, + * add a field with known value which will be used for checks. + */ + static $hasCheckPageRefresh = false; + if (! $hasCheckPageRefresh) { + $hasCheckPageRefresh = true; + } + + $tabs = []; + foreach ($this->forms as $form) { + $tabs[$form->name] = Descriptions::get('Form_' . $form->name); + } + + // validate only when we aren't displaying a "new server" form + $isNewServer = false; + foreach ($this->forms as $form) { + if ($form->index === 0) { + $isNewServer = true; + break; + } + } + + if (! $isNewServer) { + $this->validate(); + } + + // user preferences + $this->loadUserprefsInfo(); + + $validators = Validator::getValidators($this->configFile); + $forms = []; + + foreach ($this->forms as $key => $form) { + $this->formDisplayTemplate->group = 0; + $forms[$key] = [ + 'name' => $form->name, + 'descriptions' => [ + 'name' => Descriptions::get('Form_' . $form->name, 'name'), + 'desc' => Descriptions::get('Form_' . $form->name, 'desc'), + ], + 'errors' => $this->errors[$form->name] ?? null, + 'fields_html' => '', + ]; + + foreach ($form->fields as $field => $path) { + $workPath = array_search($path, $this->systemPaths); + $translatedPath = $this->translatedPaths[$workPath]; + // always true/false for user preferences display + // otherwise null + $userPrefsAllow = isset($this->userprefsKeys[$path]) + ? ! isset($this->userprefsDisallow[$path]) + : null; + // display input + $forms[$key]['fields_html'] .= $this->displayFieldInput( + $form, + $field, + $path, + $workPath, + $translatedPath, + true, + $userPrefsAllow, + $jsDefault + ); + // register JS validators for this field + if (! isset($validators[$path])) { + continue; + } + + $this->formDisplayTemplate->addJsValidate($translatedPath, $validators[$path], $js); + } + } + + return $this->formDisplayTemplate->display([ + 'action' => $formAction, + 'has_check_page_refresh' => $hasCheckPageRefresh, + 'hidden_fields' => (array) $hiddenFields, + 'tabs' => $tabs, + 'forms' => $forms, + 'show_buttons' => $showButtons, + 'js_array' => $js, + 'js_default' => $jsDefault, + ]); + } + + /** + * Prepares data for input field display and outputs HTML code + * + * @param Form $form Form object + * @param string $field field name as it appears in $form + * @param string $systemPath field path, eg. Servers/1/verbose + * @param string $workPath work path, eg. Servers/4/verbose + * @param string $translatedPath work path changed so that it can be + * used as XHTML id + * @param bool $showRestoreDefault whether show "restore default" button + * besides the input field + * @param bool|null $userPrefsAllow whether user preferences are enabled + * for this field (null - no support, + * true/false - enabled/disabled) + * @param array $jsDefault array which stores JavaScript code + * to be displayed + * + * @return string|null HTML for input field + */ + private function displayFieldInput( + Form $form, + $field, + $systemPath, + $workPath, + $translatedPath, + $showRestoreDefault, + $userPrefsAllow, + array &$jsDefault + ) { + $name = Descriptions::get($systemPath); + $description = Descriptions::get($systemPath, 'desc'); + + $value = $this->configFile->get($workPath); + $valueDefault = $this->configFile->getDefault($systemPath); + $valueIsDefault = false; + if ($value === null || $value === $valueDefault) { + $value = $valueDefault; + $valueIsDefault = true; + } + + $opts = [ + 'doc' => $this->getDocLink($systemPath), + 'show_restore_default' => $showRestoreDefault, + 'userprefs_allow' => $userPrefsAllow, + 'userprefs_comment' => Descriptions::get($systemPath, 'cmt'), + ]; + if (isset($form->default[$systemPath])) { + $opts['setvalue'] = (string) $form->default[$systemPath]; + } + + if (isset($this->errors[$workPath])) { + $opts['errors'] = $this->errors[$workPath]; + } + + $type = ''; + switch ($form->getOptionType($field)) { + case 'string': + $type = 'text'; + break; + case 'short_string': + $type = 'short_text'; + break; + case 'double': + case 'integer': + $type = 'number_text'; + break; + case 'boolean': + $type = 'checkbox'; + break; + case 'select': + $type = 'select'; + $opts['values'] = $form->getOptionValueList($form->fields[$field]); + break; + case 'array': + $type = 'list'; + $value = (array) $value; + $valueDefault = (array) $valueDefault; + break; + case 'group': + // :group:end is changed to :group:end:{unique id} in Form class + $htmlOutput = ''; + if (mb_substr($field, 7, 4) !== 'end:') { + $htmlOutput .= $this->formDisplayTemplate->displayGroupHeader( + mb_substr($field, 7) + ); + } else { + $this->formDisplayTemplate->displayGroupFooter(); + } + + return $htmlOutput; + + case 'NULL': + trigger_error('Field ' . $systemPath . ' has no type', E_USER_WARNING); + + return null; + } + + // detect password fields + if ( + $type === 'text' + && (mb_substr($translatedPath, -9) === '-password' + || mb_substr($translatedPath, -4) === 'pass' + || mb_substr($translatedPath, -4) === 'Pass') + ) { + $type = 'password'; + } + + // TrustedProxies requires changes before displaying + if ($systemPath === 'TrustedProxies') { + foreach ($value as $ip => &$v) { + if (preg_match('/^-\d+$/', $ip)) { + continue; + } + + $v = $ip . ': ' . $v; + } + } + + $this->setComments($systemPath, $opts); + + // send default value to form's JS + $jsLine = '\'' . $translatedPath . '\': '; + switch ($type) { + case 'text': + case 'short_text': + case 'number_text': + case 'password': + $jsLine .= '\'' . Sanitize::escapeJsString($valueDefault) . '\''; + break; + case 'checkbox': + $jsLine .= $valueDefault ? 'true' : 'false'; + break; + case 'select': + $valueDefaultJs = is_bool($valueDefault) + ? (int) $valueDefault + : $valueDefault; + $jsLine .= '[\'' . Sanitize::escapeJsString($valueDefaultJs) . '\']'; + break; + case 'list': + $val = $valueDefault; + if (isset($val['wrapper_params'])) { + unset($val['wrapper_params']); + } + + $jsLine .= '\'' . Sanitize::escapeJsString(implode("\n", $val)) + . '\''; + break; + } + + $jsDefault[] = $jsLine; + + return $this->formDisplayTemplate->displayInput( + $translatedPath, + $name, + $type, + $value, + $description, + $valueIsDefault, + $opts + ); + } + + /** + * Displays errors + * + * @return string|null HTML for errors + */ + public function displayErrors() + { + $this->validate(); + if (count($this->errors) === 0) { + return null; + } + + $htmlOutput = ''; + + foreach ($this->errors as $systemPath => $errorList) { + if (isset($this->systemPaths[$systemPath])) { + $name = Descriptions::get($this->systemPaths[$systemPath]); + } else { + $name = Descriptions::get('Form_' . $systemPath); + } + + $htmlOutput .= $this->formDisplayTemplate->displayErrors($name, $errorList); + } + + return $htmlOutput; + } + + /** + * Reverts erroneous fields to their default values + */ + public function fixErrors(): void + { + $this->validate(); + if (count($this->errors) === 0) { + return; + } + + $cf = $this->configFile; + foreach (array_keys($this->errors) as $workPath) { + if (! isset($this->systemPaths[$workPath])) { + continue; + } + + $canonicalPath = $this->systemPaths[$workPath]; + $cf->set($workPath, $cf->getDefault($canonicalPath)); + } + } + + /** + * Validates select field and casts $value to correct type + * + * @param string|bool $value Current value + * @param array $allowed List of allowed values + */ + private function validateSelect(&$value, array $allowed): bool + { + $valueCmp = is_bool($value) + ? (int) $value + : $value; + foreach (array_keys($allowed) as $vk) { + // equality comparison only if both values are numeric or not numeric + // (allows to skip 0 == 'string' equalling to true) + // or identity (for string-string) + if (! (($vk == $value && ! (is_numeric($valueCmp) xor is_numeric($vk))) || $vk === $value)) { + continue; + } + + // keep boolean value as boolean + if (! is_bool($value)) { + // phpcs:ignore Generic.PHP.ForbiddenFunctions + settype($value, gettype($vk)); + } + + return true; + } + + return false; + } + + /** + * Validates and saves form data to session + * + * @param array|string $forms array of form names + * @param bool $allowPartialSave allows for partial form saving on + * failed validation + */ + public function save($forms, $allowPartialSave = true): bool + { + $result = true; + $forms = (array) $forms; + + $values = []; + $toSave = []; + $isSetupScript = $GLOBALS['config']->get('is_setup'); + if ($isSetupScript) { + $this->loadUserprefsInfo(); + } + + $this->errors = []; + foreach ($forms as $formName) { + if (! isset($this->forms[$formName])) { + continue; + } + + $form = $this->forms[$formName]; + // get current server id + $changeIndex = $form->index === 0 + ? $this->configFile->getServerCount() + 1 + : false; + // grab POST values + foreach ($form->fields as $field => $systemPath) { + $workPath = array_search($systemPath, $this->systemPaths); + $key = $this->translatedPaths[$workPath]; + $type = (string) $form->getOptionType($field); + + // skip groups + if ($type === 'group') { + continue; + } + + // ensure the value is set + if (! isset($_POST[$key])) { + // checkboxes aren't set by browsers if they're off + if ($type !== 'boolean') { + $this->errors[$form->name][] = sprintf( + __('Missing data for %s'), + '' . Descriptions::get($systemPath) . '' + ); + $result = false; + continue; + } + + $_POST[$key] = false; + } + + // user preferences allow/disallow + if ($isSetupScript && isset($this->userprefsKeys[$systemPath])) { + if (isset($this->userprefsDisallow[$systemPath], $_POST[$key . '-userprefs-allow'])) { + unset($this->userprefsDisallow[$systemPath]); + } elseif (! isset($_POST[$key . '-userprefs-allow'])) { + $this->userprefsDisallow[$systemPath] = true; + } + } + + // cast variables to correct type + switch ($type) { + case 'double': + $_POST[$key] = Util::requestString($_POST[$key]); + // phpcs:ignore Generic.PHP.ForbiddenFunctions + settype($_POST[$key], 'float'); + break; + case 'boolean': + case 'integer': + if ($_POST[$key] !== '') { + $_POST[$key] = Util::requestString($_POST[$key]); + // phpcs:ignore Generic.PHP.ForbiddenFunctions + settype($_POST[$key], $type); + } + + break; + case 'select': + $successfullyValidated = $this->validateSelect( + $_POST[$key], + $form->getOptionValueList($systemPath) + ); + if (! $successfullyValidated) { + $this->errors[$workPath][] = __('Incorrect value!'); + $result = false; + // "continue" for the $form->fields foreach-loop + continue 2; + } + + break; + case 'string': + case 'short_string': + $_POST[$key] = Util::requestString($_POST[$key]); + break; + case 'array': + // eliminate empty values and ensure we have an array + $postValues = is_array($_POST[$key]) + ? $_POST[$key] + : explode("\n", $_POST[$key]); + $_POST[$key] = []; + $this->fillPostArrayParameters($postValues, $key); + break; + } + + // now we have value with proper type + $values[$systemPath] = $_POST[$key]; + if ($changeIndex !== false) { + $workPath = str_replace( + 'Servers/' . $form->index . '/', + 'Servers/' . $changeIndex . '/', + $workPath + ); + } + + $toSave[$workPath] = $systemPath; + } + } + + // save forms + if (! $allowPartialSave && ! empty($this->errors)) { + // don't look for non-critical errors + $this->validate(); + + return $result; + } + + foreach ($toSave as $workPath => $path) { + // TrustedProxies requires changes before saving + if ($path === 'TrustedProxies') { + $proxies = []; + $i = 0; + foreach ($values[$path] as $value) { + $matches = []; + $match = preg_match('/^(.+):(?:[ ]?)(\\w+)$/', $value, $matches); + if ($match) { + // correct 'IP: HTTP header' pair + $ip = trim($matches[1]); + $proxies[$ip] = trim($matches[2]); + } else { + // save also incorrect values + $proxies['-' . $i] = $value; + $i++; + } + } + + $values[$path] = $proxies; + } + + $this->configFile->set($workPath, $values[$path], $path); + } + + if ($isSetupScript) { + $this->configFile->set( + 'UserprefsDisallow', + array_keys($this->userprefsDisallow) + ); + } + + // don't look for non-critical errors + $this->validate(); + + return $result; + } + + /** + * Tells whether form validation failed + */ + public function hasErrors(): bool + { + return count($this->errors) > 0; + } + + /** + * Returns link to documentation + * + * @param string $path Path to documentation + * + * @return string + */ + public function getDocLink($path) + { + $test = mb_substr($path, 0, 6); + if ($test === 'Import' || $test === 'Export') { + return ''; + } + + return MySQLDocumentation::getDocumentationLink( + 'config', + 'cfg_' . $this->getOptName($path), + Sanitize::isSetup() ? '../' : './' + ); + } + + /** + * Changes path so it can be used in URLs + * + * @param string $path Path + * + * @return string + */ + private function getOptName($path) + { + return str_replace(['Servers/1/', '/'], ['Servers/', '_'], $path); + } + + /** + * Fills out {@link userprefs_keys} and {@link userprefs_disallow} + */ + private function loadUserprefsInfo(): void + { + if ($this->userprefsKeys !== null) { + return; + } + + $this->userprefsKeys = array_flip(UserFormList::getFields()); + // read real config for user preferences display + $userPrefsDisallow = $GLOBALS['config']->get('is_setup') + ? $this->configFile->get('UserprefsDisallow', []) + : $GLOBALS['cfg']['UserprefsDisallow']; + $this->userprefsDisallow = array_flip($userPrefsDisallow ?? []); + } + + /** + * Sets field comments and warnings based on current environment + * + * @param string $systemPath Path to settings + * @param array $opts Chosen options + */ + private function setComments($systemPath, array &$opts): void + { + // RecodingEngine - mark unavailable types + if ($systemPath === 'RecodingEngine') { + $comment = ''; + if (! function_exists('iconv')) { + $opts['values']['iconv'] .= ' (' . __('unavailable') . ')'; + $comment = sprintf( + __('"%s" requires %s extension'), + 'iconv', + 'iconv' + ); + } + + if (! function_exists('recode_string')) { + $opts['values']['recode'] .= ' (' . __('unavailable') . ')'; + $comment .= ($comment ? ', ' : '') . sprintf( + __('"%s" requires %s extension'), + 'recode', + 'recode' + ); + } + + /* mbstring is always there thanks to polyfill */ + $opts['comment'] = $comment; + $opts['comment_warning'] = true; + } + + // ZipDump, GZipDump, BZipDump - check function availability + if ($systemPath === 'ZipDump' || $systemPath === 'GZipDump' || $systemPath === 'BZipDump') { + $comment = ''; + $funcs = [ + 'ZipDump' => [ + 'zip_open', + 'gzcompress', + ], + 'GZipDump' => [ + 'gzopen', + 'gzencode', + ], + 'BZipDump' => [ + 'bzopen', + 'bzcompress', + ], + ]; + if (! function_exists($funcs[$systemPath][0])) { + $comment = sprintf( + __( + 'Compressed import will not work due to missing function %s.' + ), + $funcs[$systemPath][0] + ); + } + + if (! function_exists($funcs[$systemPath][1])) { + $comment .= ($comment ? '; ' : '') . sprintf( + __( + 'Compressed export will not work due to missing function %s.' + ), + $funcs[$systemPath][1] + ); + } + + $opts['comment'] = $comment; + $opts['comment_warning'] = true; + } + + if ($GLOBALS['config']->get('is_setup')) { + return; + } + + if ($systemPath !== 'MaxDbList' && $systemPath !== 'MaxTableList' && $systemPath !== 'QueryHistoryMax') { + return; + } + + $opts['comment'] = sprintf( + __('maximum %s'), + $GLOBALS['cfg'][$systemPath] + ); + } + + /** + * Copy items of an array to $_POST variable + * + * @param array $postValues List of parameters + * @param string $key Array key + */ + private function fillPostArrayParameters(array $postValues, $key): void + { + foreach ($postValues as $v) { + $v = Util::requestString($v); + if ($v === '') { + continue; + } + + $_POST[$key][] = $v; + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplayTemplate.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplayTemplate.php new file mode 100644 index 0000000..a7ae0bb --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplayTemplate.php @@ -0,0 +1,177 @@ +config = $config; + $this->template = new Template(); + } + + /** + * Displays input field + * + * $opts keys: + * o doc - (string) documentation link + * o errors - error array + * o setvalue - (string) shows button allowing to set predefined value + * o show_restore_default - (boolean) whether show "restore default" button + * o userprefs_allow - whether user preferences are enabled for this field + * (null - no support, true/false - enabled/disabled) + * o userprefs_comment - (string) field comment + * o values - key - value pairs for ' + . htmlspecialchars($column) . ' [ ' + . htmlspecialchars($def['Type']) . ' ]
        '; + } else { + $selectColHtml .= ''; + } + } + + return $selectColHtml; + } + + /** + * get the html of the form to add the new column to given table + * + * @param int $numFields number of columns to add + * @param string $db current database + * @param string $table current table + * @param array $columnMeta array containing default values for the fields + * + * @return string HTML + */ + public function getHtmlForCreateNewColumn( + $numFields, + $db, + $table, + array $columnMeta = [] + ) { + $relationParameters = $this->relation->getRelationParameters(); + $contentCells = []; + $availableMime = []; + $mimeMap = []; + if ($relationParameters->browserTransformationFeature !== null && $GLOBALS['cfg']['BrowseMIME']) { + $mimeMap = $this->transformations->getMime($db, $table); + $availableMime = $this->transformations->getAvailableMimeTypes(); + } + + $commentsMap = $this->relation->getComments($db, $table); + for ($columnNumber = 0; $columnNumber < $numFields; $columnNumber++) { + $contentCells[$columnNumber] = [ + 'column_number' => $columnNumber, + 'column_meta' => $columnMeta, + 'type_upper' => '', + 'length_values_input_size' => 8, + 'length' => '', + 'extracted_columnspec' => [], + 'submit_attribute' => null, + 'comments_map' => $commentsMap, + 'fields_meta' => null, + 'is_backup' => true, + 'move_columns' => [], + 'available_mime' => $availableMime, + 'mime_map' => $mimeMap, + ]; + } + + $charsets = Charsets::getCharsets($this->dbi, $GLOBALS['cfg']['Server']['DisableIS']); + $collations = Charsets::getCollations($this->dbi, $GLOBALS['cfg']['Server']['DisableIS']); + $charsetsList = []; + foreach ($charsets as $charset) { + $collationsList = []; + foreach ($collations[$charset->getName()] as $collation) { + $collationsList[] = [ + 'name' => $collation->getName(), + 'description' => $collation->getDescription(), + ]; + } + + $charsetsList[] = [ + 'name' => $charset->getName(), + 'description' => $charset->getDescription(), + 'collations' => $collationsList, + ]; + } + + return $this->template->render('columns_definitions/table_fields_definitions', [ + 'is_backup' => true, + 'fields_meta' => null, + 'relation_parameters' => $relationParameters, + 'content_cells' => $contentCells, + 'change_column' => $_POST['change_column'] ?? $_GET['change_column'] ?? null, + 'is_virtual_columns_supported' => Compatibility::isVirtualColumnsSupported($this->dbi->getVersion()), + 'browse_mime' => $GLOBALS['cfg']['BrowseMIME'], + 'supports_stored_keyword' => Compatibility::supportsStoredKeywordForVirtualColumns( + $this->dbi->getVersion() + ), + 'server_version' => $this->dbi->getVersion(), + 'max_rows' => intval($GLOBALS['cfg']['MaxRows']), + 'char_editing' => $GLOBALS['cfg']['CharEditing'], + 'attribute_types' => $this->dbi->types->getAttributes(), + 'privs_available' => $GLOBALS['col_priv'] && $GLOBALS['is_reload_priv'], + 'max_length' => $this->dbi->getVersion() >= 50503 ? 1024 : 255, + 'charsets' => $charsetsList, + ]); + } + + /** + * build the html for step 1.1 of normalization + * + * @param string $db current database + * @param string $table current table + * @param string $normalizedTo up to which step normalization will go, + * possible values 1nf|2nf|3nf + * + * @return string HTML for step 1.1 + */ + public function getHtmlFor1NFStep1($db, $table, $normalizedTo) + { + $step = 1; + $stepTxt = __('Make all columns atomic'); + $html = "

        " + . __('First step of normalization (1NF)') . '

        '; + $html .= "
        " . + '
        ' . + '' . __('Step 1.') . $step . ' ' . $stepTxt . '' . + '

        ' . __( + 'Do you have any column which can be split into more than' + . ' one column? ' + . 'For example: address can be split into street, city, country and zip.' + ) + . "
        ( " + . __('Show me the central list of columns that are not already in this table') . ' )

        ' + . "

        " . __( + 'Select a column which can be split into more ' + . 'than one (on select of \'no such column\', it\'ll move to next step).' + ) + . '

        ' + . "
        " + . "' + . '' . __('split into ') + . "" + . '
        ' + . "
        " + . '
        ' + . '
        ' + . '
        '; + + return $html; + } + + /** + * build the html contents of various html elements in step 1.2 + * + * @param string $db current database + * @param string $table current table + * + * @return string[] HTML contents for step 1.2 + */ + public function getHtmlContentsFor1NFStep2($db, $table) + { + $step = 2; + $stepTxt = __('Have a primary key'); + $primary = Index::getPrimary($table, $db); + $hasPrimaryKey = '0'; + $legendText = __('Step 1.') . $step . ' ' . $stepTxt; + $extra = ''; + if ($primary !== false) { + $headText = __('Primary key already exists.'); + $subText = __('Taking you to next step…'); + $hasPrimaryKey = '1'; + } else { + $headText = __( + 'There is no primary key; please add one.
        ' + . 'Hint: A primary key is a column ' + . '(or combination of columns) that uniquely identify all rows.' + ); + $subText = '' + . Generator::getIcon( + 'b_index_add', + __( + 'Add a primary key on existing column(s)' + ) + ) + . ''; + $extra = __('If it\'s not possible to make existing column combinations as primary key') . '
        ' + . '' + . __('+ Add a new primary key column') . ''; + } + + return [ + 'legendText' => $legendText, + 'headText' => $headText, + 'subText' => $subText, + 'hasPrimaryKey' => $hasPrimaryKey, + 'extra' => $extra, + ]; + } + + /** + * build the html contents of various html elements in step 1.4 + * + * @param string $db current database + * @param string $table current table + * + * @return string[] HTML contents for step 1.4 + */ + public function getHtmlContentsFor1NFStep4($db, $table) + { + $step = 4; + $stepTxt = __('Remove redundant columns'); + $legendText = __('Step 1.') . $step . ' ' . $stepTxt; + $headText = __( + 'Do you have a group of columns which on combining gives an existing' + . ' column? For example, if you have first_name, last_name and' + . ' full_name then combining first_name and last_name gives full_name' + . ' which is redundant.' + ); + $subText = __( + 'Check the columns which are redundant and click on remove. ' + . "If no redundant column, click on 'No redundant column'" + ); + $extra = $this->getHtmlForColumnsList($db, $table, 'all', 'checkbox') . '
        ' + . '' + . ''; + + return [ + 'legendText' => $legendText, + 'headText' => $headText, + 'subText' => $subText, + 'extra' => $extra, + ]; + } + + /** + * build the html contents of various html elements in step 1.3 + * + * @param string $db current database + * @param string $table current table + * + * @return string[] HTML contents for step 1.3 + */ + public function getHtmlContentsFor1NFStep3($db, $table) + { + $step = 3; + $stepTxt = __('Move repeating groups'); + $legendText = __('Step 1.') . $step . ' ' . $stepTxt; + $headText = __( + 'Do you have a group of two or more columns that are closely ' + . 'related and are all repeating the same attribute? For example, ' + . 'a table that holds data on books might have columns such as book_id, ' + . 'author1, author2, author3 and so on which form a ' + . 'repeating group. In this case a new table (book_id, author) should ' + . 'be created.' + ); + $subText = __( + 'Check the columns which form a repeating group. If no such group, click on \'No repeating group\'' + ); + $extra = $this->getHtmlForColumnsList($db, $table, 'all', 'checkbox') . '
        ' + . '' + . ''; + $primary = Index::getPrimary($table, $db); + $primarycols = $primary === false ? [] : $primary->getColumns(); + $pk = []; + foreach ($primarycols as $col) { + $pk[] = $col->getName(); + } + + return [ + 'legendText' => $legendText, + 'headText' => $headText, + 'subText' => $subText, + 'extra' => $extra, + 'primary_key' => json_encode($pk), + ]; + } + + /** + * build html contents for 2NF step 2.1 + * + * @param string $db current database + * @param string $table current table + * + * @return string[] HTML contents for 2NF step 2.1 + */ + public function getHtmlFor2NFstep1($db, $table) + { + $legendText = __('Step 2.') . '1 ' . __('Find partial dependencies'); + $primary = Index::getPrimary($table, $db); + $primarycols = $primary === false ? [] : $primary->getColumns(); + $pk = []; + $subText = ''; + $selectPkForm = ''; + $extra = ''; + foreach ($primarycols as $col) { + $pk[] = $col->getName(); + $selectPkForm .= '' + . htmlspecialchars($col->getName()); + } + + $key = implode(', ', $pk); + if (count($primarycols) > 1) { + $this->dbi->selectDb($db); + $columns = $this->dbi->getColumnNames($db, $table); + if (count($pk) == count($columns)) { + $headText = sprintf( + __( + 'No partial dependencies possible as ' + . 'no non-primary column exists since primary key ( %1$s ) ' + . 'is composed of all the columns in the table.' + ), + htmlspecialchars($key) + ) . '
        '; + $extra = '

        ' . __('Table is already in second normal form.') + . '

        '; + } else { + $headText = sprintf( + __( + 'The primary key ( %1$s ) consists of more than one column ' + . 'so we need to find the partial dependencies.' + ), + htmlspecialchars($key) + ) . '
        ' . __('Please answer the following question(s) carefully to obtain a correct normalization.') + . '
        ' . __( + '+ Show me the possible partial dependencies based on data in the table' + ) . ''; + $subText = __( + 'For each column below, ' + . 'please select the minimal set of columns among given set ' + . 'whose values combined together are sufficient' + . ' to determine the value of the column.' + ); + $cnt = 0; + foreach ($columns as $column) { + if (in_array($column, $pk)) { + continue; + } + + $cnt++; + $extra .= '' . sprintf( + __('\'%1$s\' depends on:'), + htmlspecialchars($column) + ) . '
        '; + $extra .= '
        ' + . $selectPkForm . '


        '; + } + } + } else { + $headText = sprintf( + __( + 'No partial dependencies possible as the primary key ( %1$s ) has just one column.' + ), + htmlspecialchars($key) + ) . '
        '; + $extra = '

        ' . __('Table is already in second normal form.') . '

        '; + } + + return [ + 'legendText' => $legendText, + 'headText' => $headText, + 'subText' => $subText, + 'extra' => $extra, + 'primary_key' => $key, + ]; + } + + /** + * build the html for showing the tables to have in order to put current table in 2NF + * + * @param array $partialDependencies array containing all the dependencies + * @param string $table current table + * + * @return string HTML + */ + public function getHtmlForNewTables2NF(array $partialDependencies, $table) + { + $html = '

        ' . sprintf( + __( + 'In order to put the ' + . 'original table \'%1$s\' into Second normal form we need ' + . 'to create the following tables:' + ), + htmlspecialchars($table) + ) . '

        '; + $tableName = $table; + $i = 1; + foreach ($partialDependencies as $key => $dependents) { + $html .= '

        ' + . '( ' . htmlspecialchars($key) . '' + . (count($dependents) > 0 ? ', ' : '') + . htmlspecialchars(implode(', ', $dependents)) . ' )'; + $i++; + $tableName = 'table' . $i; + } + + return $html; + } + + /** + * create/alter the tables needed for 2NF + * + * @param array $partialDependencies array containing all the partial dependencies + * @param object $tablesName name of new tables + * @param string $table current table + * @param string $db current database + * + * @return array + */ + public function createNewTablesFor2NF(array $partialDependencies, $tablesName, $table, $db) + { + $dropCols = false; + $nonPKCols = []; + $queries = []; + $error = false; + $headText = '

        ' . sprintf( + __('The second step of normalization is complete for table \'%1$s\'.'), + htmlspecialchars($table) + ) . '

        '; + if (count((array) $partialDependencies) === 1) { + return [ + 'legendText' => __('End of step'), + 'headText' => $headText, + 'queryError' => $error, + ]; + } + + $message = ''; + $this->dbi->selectDb($db); + foreach ($partialDependencies as $key => $dependents) { + if ($tablesName->$key != $table) { + $keys = explode(', ', $key); + $quotedKeys = []; + foreach ($keys as $eachKey) { + $quotedKeys[] = Util::backquote($eachKey); + } + + $backquotedKey = implode(', ', $quotedKeys); + + $quotedDependents = []; + foreach ($dependents as $dependent) { + $quotedDependents[] = Util::backquote($dependent); + } + + $queries[] = 'CREATE TABLE ' . Util::backquote($tablesName->$key) + . ' SELECT DISTINCT ' . $backquotedKey + . (count($dependents) > 0 ? ', ' : '') + . implode(',', $quotedDependents) + . ' FROM ' . Util::backquote($table) . ';'; + $queries[] = 'ALTER TABLE ' . Util::backquote($tablesName->$key) + . ' ADD PRIMARY KEY(' . $backquotedKey . ');'; + $nonPKCols = array_merge($nonPKCols, $dependents); + } else { + $dropCols = true; + } + } + + if ($dropCols) { + $query = 'ALTER TABLE ' . Util::backquote($table); + foreach ($nonPKCols as $col) { + $query .= ' DROP ' . Util::backquote($col) . ','; + } + + $query = trim($query, ', '); + $query .= ';'; + $queries[] = $query; + } else { + $queries[] = 'DROP TABLE ' . Util::backquote($table); + } + + foreach ($queries as $query) { + if (! $this->dbi->tryQuery($query)) { + $message = Message::error(__('Error in processing!')); + $message->addMessage( + Message::rawError($this->dbi->getError()), + '

        ' + ); + $error = true; + break; + } + } + + return [ + 'legendText' => __('End of step'), + 'headText' => $headText, + 'queryError' => $error, + 'extra' => $message, + ]; + } + + /** + * build the html for showing the new tables to have in order + * to put given tables in 3NF + * + * @param object $dependencies containing all the dependencies + * @param array $tables tables formed after 2NF and need to convert to 3NF + * @param string $db current database + * + * @return array containing html and the list of new tables + */ + public function getHtmlForNewTables3NF($dependencies, array $tables, $db) + { + $html = ''; + $i = 1; + $newTables = []; + foreach ($tables as $table => $arrDependson) { + if (count(array_unique($arrDependson)) === 1) { + continue; + } + + $primary = Index::getPrimary($table, $db); + $primarycols = $primary === false ? [] : $primary->getColumns(); + $pk = []; + foreach ($primarycols as $col) { + $pk[] = $col->getName(); + } + + $html .= '

        ' . sprintf( + __( + 'In order to put the ' + . 'original table \'%1$s\' into Third normal form we need ' + . 'to create the following tables:' + ), + htmlspecialchars($table) + ) . '

        '; + $tableName = $table; + $columnList = []; + foreach ($arrDependson as $key) { + $dependents = $dependencies->$key; + if ($key == $table) { + $key = implode(', ', $pk); + } + + $tmpTableCols = array_merge(explode(', ', $key), $dependents); + sort($tmpTableCols); + if (in_array($tmpTableCols, $columnList)) { + continue; + } + + $columnList[] = $tmpTableCols; + $html .= '

        ' + . '( ' . htmlspecialchars($key) . '' + . (count($dependents) > 0 ? ', ' : '') + . htmlspecialchars(implode(', ', $dependents)) . ' )'; + $newTables[$table][$tableName] = [ + 'pk' => $key, + 'nonpk' => implode(', ', $dependents), + ]; + $i++; + $tableName = 'table' . $i; + } + } + + return [ + 'html' => $html, + 'newTables' => $newTables, + 'success' => true, + ]; + } + + /** + * create new tables or alter existing to get 3NF + * + * @param array $newTables list of new tables to be created + * @param string $db current database + * + * @return array + */ + public function createNewTablesFor3NF(array $newTables, $db) + { + $queries = []; + $dropCols = false; + $error = false; + $headText = '

        ' . + __('The third step of normalization is complete.') + . '

        '; + if (count($newTables) === 0) { + return [ + 'legendText' => __('End of step'), + 'headText' => $headText, + 'queryError' => $error, + ]; + } + + $message = ''; + $this->dbi->selectDb($db); + foreach ($newTables as $originalTable => $tablesList) { + foreach ($tablesList as $table => $cols) { + if ($table != $originalTable) { + $pkArray = explode(', ', $cols['pk']); + $quotedPkArray = []; + foreach ($pkArray as $pk) { + $quotedPkArray[] = Util::backquote($pk); + } + + $quotedPk = implode(', ', $quotedPkArray); + + $nonpkArray = explode(', ', $cols['nonpk']); + $quotedNonpkArray = []; + foreach ($nonpkArray as $nonpk) { + $quotedNonpkArray[] = Util::backquote($nonpk); + } + + $quotedNonpk = implode(', ', $quotedNonpkArray); + + $queries[] = 'CREATE TABLE ' . Util::backquote($table) + . ' SELECT DISTINCT ' . $quotedPk + . ', ' . $quotedNonpk + . ' FROM ' . Util::backquote($originalTable) . ';'; + $queries[] = 'ALTER TABLE ' . Util::backquote($table) + . ' ADD PRIMARY KEY(' . $quotedPk . ');'; + } else { + $dropCols = $cols; + } + } + + if ($dropCols) { + $columns = $this->dbi->getColumnNames($db, $originalTable); + $colPresent = array_merge( + explode(', ', $dropCols['pk']), + explode(', ', $dropCols['nonpk']) + ); + $query = 'ALTER TABLE ' . Util::backquote($originalTable); + foreach ($columns as $col) { + if (in_array($col, $colPresent)) { + continue; + } + + $query .= ' DROP ' . Util::backquote($col) . ','; + } + + $query = trim($query, ', '); + $query .= ';'; + $queries[] = $query; + } else { + $queries[] = 'DROP TABLE ' . Util::backquote($originalTable); + } + + $dropCols = false; + } + + foreach ($queries as $query) { + if (! $this->dbi->tryQuery($query)) { + $message = Message::error(__('Error in processing!')); + $message->addMessage( + Message::rawError($this->dbi->getError()), + '

        ' + ); + $error = true; + break; + } + } + + return [ + 'legendText' => __('End of step'), + 'headText' => $headText, + 'queryError' => $error, + 'extra' => $message, + ]; + } + + /** + * move the repeating group of columns to a new table + * + * @param string $repeatingColumns comma separated list of repeating group columns + * @param string $primaryColumns comma separated list of column in primary key + * of $table + * @param string $newTable name of the new table to be created + * @param string $newColumn name of the new column in the new table + * @param string $table current table + * @param string $db current database + * + * @return array + */ + public function moveRepeatingGroup( + $repeatingColumns, + $primaryColumns, + $newTable, + $newColumn, + $table, + $db + ) { + $repeatingColumnsArr = explode(', ', $repeatingColumns); + $primaryColumnsArray = explode(',', $primaryColumns); + $columns = []; + foreach ($primaryColumnsArray as $column) { + $columns[] = Util::backquote($column); + } + + $primaryColumns = implode(',', $columns); + $query1 = 'CREATE TABLE ' . Util::backquote($newTable); + $query2 = 'ALTER TABLE ' . Util::backquote($table); + $message = Message::success( + sprintf( + __('Selected repeating group has been moved to the table \'%s\''), + htmlspecialchars($table) + ) + ); + $first = true; + $error = false; + foreach ($repeatingColumnsArr as $repeatingColumn) { + if (! $first) { + $query1 .= ' UNION '; + } + + $first = false; + $quotedRepeatingColumn = Util::backquote($repeatingColumn); + $query1 .= ' SELECT ' . $primaryColumns . ',' . $quotedRepeatingColumn + . ' as ' . Util::backquote($newColumn) + . ' FROM ' . Util::backquote($table); + $query2 .= ' DROP ' . $quotedRepeatingColumn . ','; + } + + $query2 = trim($query2, ','); + $queries = [ + $query1, + $query2, + ]; + $this->dbi->selectDb($db); + foreach ($queries as $query) { + if (! $this->dbi->tryQuery($query)) { + $message = Message::error(__('Error in processing!')); + $message->addMessage( + Message::rawError($this->dbi->getError()), + '

        ' + ); + $error = true; + break; + } + } + + return [ + 'queryError' => $error, + 'message' => $message, + ]; + } + + /** + * build html for 3NF step 1 to find the transitive dependencies + * + * @param string $db current database + * @param array $tables tables formed after 2NF and need to process for 3NF + * + * @return string[] + */ + public function getHtmlFor3NFstep1($db, array $tables) + { + $legendText = __('Step 3.') . '1 ' . __('Find transitive dependencies'); + $extra = ''; + $headText = __('Please answer the following question(s) carefully to obtain a correct normalization.'); + $subText = __( + 'For each column below, ' + . 'please select the minimal set of columns among given set ' + . 'whose values combined together are sufficient' + . ' to determine the value of the column.
        ' + . 'Note: A column may have no transitive dependency, ' + . 'in that case you don\'t have to select any.' + ); + $cnt = 0; + foreach ($tables as $table) { + $primary = Index::getPrimary($table, $db); + $primarycols = $primary === false ? [] : $primary->getColumns(); + $selectTdForm = ''; + $pk = []; + foreach ($primarycols as $col) { + $pk[] = $col->getName(); + } + + $this->dbi->selectDb($db); + $columns = $this->dbi->getColumnNames($db, $table); + if (count($columns) - count($pk) <= 1) { + continue; + } + + foreach ($columns as $column) { + if (in_array($column, $pk)) { + continue; + } + + $selectTdForm .= '' + . '' . htmlspecialchars($column) . ''; + } + + foreach ($columns as $column) { + if (in_array($column, $pk)) { + continue; + } + + $cnt++; + $extra .= '' . sprintf( + __('\'%1$s\' depends on:'), + htmlspecialchars($column) + ) + . '
        '; + $extra .= '
        ' + . $selectTdForm + . '


        '; + } + } + + if ($extra == '') { + $headText = __( + 'No Transitive dependencies possible as the table doesn\'t have any non primary key columns' + ); + $subText = ''; + $extra = '

        ' . __('Table is already in Third normal form!') . '

        '; + } + + return [ + 'legendText' => $legendText, + 'headText' => $headText, + 'subText' => $subText, + 'extra' => $extra, + ]; + } + + /** + * get html for options to normalize table + * + * @return string HTML + */ + public function getHtmlForNormalizeTable() + { + $htmlOutput = '
        ' + . Url::getHiddenInputs($GLOBALS['db'], $GLOBALS['table']) + . ''; + $htmlOutput .= '
        '; + $htmlOutput .= '' + . __('Improve table structure (Normalization):') . ''; + $htmlOutput .= '

        ' . __('Select up to what step you want to normalize') + . '

        '; + + $htmlOutput .= '
        '; + $htmlOutput .= '
        '; + + $htmlOutput .= '
        '; + $htmlOutput .= '
        '; + + $htmlOutput .= '
        '; + $htmlOutput .= '
        '; + + $htmlOutput .= '
        ' + . "" . __( + 'Hint: Please follow the procedure carefully in order to obtain correct normalization' + ) . '' + . '' + . '
        ' + . '
        ' + . '
        '; + + return $htmlOutput; + } + + /** + * find all the possible partial dependencies based on data in the table. + * + * @param string $table current table + * @param string $db current database + * + * @return string HTML containing the list of all the possible partial dependencies + */ + public function findPartialDependencies($table, $db) + { + $dependencyList = []; + $this->dbi->selectDb($db); + $columnNames = $this->dbi->getColumnNames($db, $table); + $columns = []; + foreach ($columnNames as $column) { + $columns[] = Util::backquote($column); + } + + $totalRowsRes = $this->dbi->fetchResult( + 'SELECT COUNT(*) FROM (SELECT * FROM ' + . Util::backquote($table) . ' LIMIT 500) as dt;' + ); + $totalRows = $totalRowsRes[0]; + $primary = Index::getPrimary($table, $db); + $primarycols = $primary === false ? [] : $primary->getColumns(); + $pk = []; + foreach ($primarycols as $col) { + $pk[] = Util::backquote($col->getName()); + } + + $partialKeys = $this->getAllCombinationPartialKeys($pk); + $distinctValCount = $this->findDistinctValuesCount( + array_unique( + array_merge($columns, $partialKeys) + ), + $table + ); + foreach ($columns as $column) { + if (in_array($column, $pk)) { + continue; + } + + foreach ($partialKeys as $partialKey) { + if ( + ! $partialKey + || ! $this->checkPartialDependency( + $partialKey, + $column, + $table, + $distinctValCount[$partialKey], + $distinctValCount[$column], + $totalRows + ) + ) { + continue; + } + + $dependencyList[$partialKey][] = $column; + } + } + + $html = __('This list is based on a subset of the table\'s data and is not necessarily accurate. ') + . '
        '; + foreach ($dependencyList as $dependon => $colList) { + $html .= '' + . '' + . '' + . htmlspecialchars(str_replace('`', '', (string) $dependon)) . ' -> ' + . '' + . htmlspecialchars(str_replace('`', '', implode(', ', $colList))) + . '' + . ''; + } + + if (empty($dependencyList)) { + $html .= '

        ' + . __('No partial dependencies found!') . '

        '; + } + + $html .= '
        '; + + return $html; + } + + /** + * check whether a particular column is dependent on given subset of primary key + * + * @param string $partialKey the partial key, subset of primary key, + * each column in key supposed to be backquoted + * @param string $column backquoted column on whose dependency being checked + * @param string $table current table + * @param int $pkCnt distinct value count for given partial key + * @param int $colCnt distinct value count for given column + * @param int $totalRows total distinct rows count of the table + */ + private function checkPartialDependency( + $partialKey, + $column, + $table, + $pkCnt, + $colCnt, + $totalRows + ): bool { + $query = 'SELECT ' + . 'COUNT(DISTINCT ' . $partialKey . ',' . $column . ') as pkColCnt ' + . 'FROM (SELECT * FROM ' . Util::backquote($table) + . ' LIMIT 500) as dt;'; + $res = $this->dbi->fetchResult($query, null, null); + $pkColCnt = $res[0]; + if ($pkCnt && $pkCnt == $colCnt && $colCnt == $pkColCnt) { + return true; + } + + return $totalRows && $totalRows == $pkCnt; + } + + /** + * function to get distinct values count of all the column in the array $columns + * + * @param array $columns array of backquoted columns whose distinct values + * need to be counted. + * @param string $table table to which these columns belong + * + * @return array associative array containing the count + */ + private function findDistinctValuesCount(array $columns, $table) + { + $result = []; + $query = 'SELECT '; + foreach ($columns as $column) { + if (! $column) { + continue; + } + + //each column is already backquoted + $query .= 'COUNT(DISTINCT ' . $column . ') as \'' + . $column . '_cnt\', '; + } + + $query = trim($query, ', '); + $query .= ' FROM (SELECT * FROM ' . Util::backquote($table) + . ' LIMIT 500) as dt;'; + $res = $this->dbi->fetchResult($query, null, null); + foreach ($columns as $column) { + if (! $column) { + continue; + } + + $result[$column] = $res[0][$column . '_cnt'] ?? null; + } + + return $result; + } + + /** + * find all the possible partial keys + * + * @param array $primaryKey array containing all the column present in primary key + * + * @return array containing all the possible partial keys(subset of primary key) + */ + private function getAllCombinationPartialKeys(array $primaryKey) + { + $results = ['']; + foreach ($primaryKey as $element) { + foreach ($results as $combination) { + $results[] = trim($element . ',' . $combination, ','); + } + } + + array_pop($results); //remove key which consist of all primary key columns + + return $results; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/OutputBuffering.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/OutputBuffering.php new file mode 100644 index 0000000..0b1c428 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/OutputBuffering.php @@ -0,0 +1,174 @@ +mode = $this->getMode(); + $this->on = false; + } + + /** + * This function could be used eventually to support more modes. + * + * @return int the output buffer mode + */ + private function getMode() + { + $mode = 0; + if ($GLOBALS['cfg']['OBGzip'] && function_exists('ob_start')) { + if (ini_get('output_handler') === 'ob_gzhandler') { + // If a user sets the output_handler in php.ini to ob_gzhandler, then + // any right frame file in phpMyAdmin will not be handled properly by + // the browser. My fix was to check the ini file within the + // PMA_outBufferModeGet() function. + $mode = 0; + } elseif (function_exists('ob_get_level') && ob_get_level() > 0) { + // happens when php.ini's output_buffering is not Off + ob_end_clean(); + $mode = 1; + } else { + $mode = 1; + } + } + + // Zero (0) is no mode or in other words output buffering is OFF. + // Follow 2^0, 2^1, 2^2, 2^3 type values for the modes. + // Useful if we ever decide to combine modes. Then a bitmask field of + // the sum of all modes will be the natural choice. + return $mode; + } + + /** + * Returns the singleton OutputBuffering object + * + * @return OutputBuffering object + */ + public static function getInstance() + { + if (empty(self::$instance)) { + self::$instance = new OutputBuffering(); + } + + return self::$instance; + } + + /** + * This function will need to run at the top of all pages if output + * output buffering is turned on. It also needs to be passed $mode from + * the PMA_outBufferModeGet() function or it will be useless. + */ + public function start(): void + { + if ($this->on) { + return; + } + + if ($this->mode && function_exists('ob_gzhandler')) { + ob_start('ob_gzhandler'); + } + + ob_start(); + $this->sendHeader('X-ob_mode', (string) $this->mode); + + register_shutdown_function( + [ + self::class, + 'stop', + ] + ); + $this->on = true; + } + + private function sendHeader(string $name, string $value): void + { + if (defined('TESTSUITE')) { + return; + } + + header(sprintf('%s: %s', $name, $value)); + } + + /** + * This function will need to run at the bottom of all pages if output + * buffering is turned on. It also needs to be passed $mode from the + * PMA_outBufferModeGet() function or it will be useless. + */ + public static function stop(): void + { + $buffer = self::getInstance(); + if (! $buffer->on) { + return; + } + + $buffer->on = false; + $buffer->content = ob_get_contents(); + if (ob_get_length() <= 0) { + return; + } + + ob_end_clean(); + } + + /** + * Gets buffer content + * + * @return string buffer content + */ + public function getContents() + { + return $this->content; + } + + /** + * Flushes output buffer + */ + public function flush(): void + { + if (ob_get_status() && $this->mode) { + ob_flush(); + } else { + flush(); + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/SubPartition.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/SubPartition.php new file mode 100644 index 0000000..fe3be3b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/SubPartition.php @@ -0,0 +1,154 @@ +db = $row['TABLE_SCHEMA']; + $this->table = $row['TABLE_NAME']; + $this->loadData($row); + } + + /** + * Loads data from the fetched row from information_schema.PARTITIONS + * + * @param array $row fetched row + */ + protected function loadData(array $row): void + { + $this->name = $row['SUBPARTITION_NAME']; + $this->ordinal = $row['SUBPARTITION_ORDINAL_POSITION']; + $this->method = $row['SUBPARTITION_METHOD']; + $this->expression = $row['SUBPARTITION_EXPRESSION']; + $this->loadCommonData($row); + } + + /** + * Loads some data that is common to both partitions and sub partitions + * + * @param array $row fetched row + */ + protected function loadCommonData(array $row): void + { + $this->rows = $row['TABLE_ROWS']; + $this->dataLength = $row['DATA_LENGTH']; + $this->indexLength = $row['INDEX_LENGTH']; + $this->comment = $row['PARTITION_COMMENT']; + } + + /** + * Return the partition name + * + * @return string partition name + */ + public function getName() + { + return $this->name; + } + + /** + * Return the ordinal of the partition + * + * @return int the ordinal + */ + public function getOrdinal() + { + return $this->ordinal; + } + + /** + * Returns the partition method + * + * @return string partition method + */ + public function getMethod() + { + return $this->method; + } + + /** + * Returns the partition expression + * + * @return string partition expression + */ + public function getExpression() + { + return $this->expression; + } + + /** + * Returns the number of data rows + * + * @return int number of rows + */ + public function getRows() + { + return $this->rows; + } + + /** + * Returns the data length + * + * @return int data length + */ + public function getDataLength() + { + return $this->dataLength; + } + + /** + * Returns the index length + * + * @return int index length + */ + public function getIndexLength() + { + return $this->indexLength; + } + + /** + * Returns the partition comment + * + * @return string partition comment + */ + public function getComment() + { + return $this->comment; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/TablePartitionDefinition.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/TablePartitionDefinition.php new file mode 100644 index 0000000..aee83e9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/TablePartitionDefinition.php @@ -0,0 +1,198 @@ + 1 + && isset($partitionDetails['partition_by']) + && ($partitionDetails['partition_by'] === 'RANGE' + || $partitionDetails['partition_by'] === 'RANGE COLUMNS' + || $partitionDetails['partition_by'] === 'LIST' + || $partitionDetails['partition_by'] === 'LIST COLUMNS'); + + // Values are specified only for LIST and RANGE type partitions + $partitionDetails['value_enabled'] = isset($partitionDetails['partition_by']) + && ($partitionDetails['partition_by'] === 'RANGE' + || $partitionDetails['partition_by'] === 'RANGE COLUMNS' + || $partitionDetails['partition_by'] === 'LIST' + || $partitionDetails['partition_by'] === 'LIST COLUMNS'); + + return self::extractPartitions($partitionDetails); + } + + /** + * Extract some partitioning and subpartitioning parameters from the request + * + * @return array + */ + private static function extractDetailsFromRequest(): array + { + $partitionParams = [ + 'partition_by' => null, + 'partition_expr' => null, + 'subpartition_by' => null, + 'subpartition_expr' => null, + ]; + //Initialize details with values to "null" if not in request + $details = array_merge( + $partitionParams, + //Keep $_POST values, but only for keys that are in $partitionParams + array_intersect_key($_POST, $partitionParams) + ); + + $details['partition_count'] = self::extractPartitionCount('partition_count') ?: 0; + $details['subpartition_count'] = self::extractPartitionCount('subpartition_count') ?: 0; + + return $details; + } + + /** + * @param string $paramLabel Label searched in request + */ + private static function extractPartitionCount(string $paramLabel): int + { + if (isset($_POST[$paramLabel]) && is_numeric($_POST[$paramLabel])) { + // MySQL's limit is 8192, so do not allow more + // @see https://dev.mysql.com/doc/refman/en/partitioning-limitations.html + $count = min((int) $_POST[$paramLabel], 8192); + } else { + $count = 0; + } + + return $count; + } + + /** + * @param array $partitionDetails Details of partitions + * + * @return array + */ + private static function extractPartitions(array $partitionDetails): array + { + $partitionCount = $partitionDetails['partition_count']; + $subpartitionCount = $partitionDetails['subpartition_count']; + + // No partitions + if ($partitionCount <= 1) { + return $partitionDetails; + } + + // Has partitions + $partitions = $_POST['partitions'] ?? []; + + // Remove details of the additional partitions + // when number of partitions have been reduced + array_splice($partitions, $partitionCount); + + for ($i = 0; $i < $partitionCount; $i++) { + if (! isset($partitions[$i])) { // Newly added partition + $partitions[$i] = [ + 'name' => 'p' . $i, + 'value_type' => '', + 'value' => '', + 'engine' => '', + 'comment' => '', + 'data_directory' => '', + 'index_directory' => '', + 'max_rows' => '', + 'min_rows' => '', + 'tablespace' => '', + 'node_group' => '', + ]; + } + + $partition =& $partitions[$i]; + $partition['prefix'] = 'partitions[' . $i . ']'; + + // Changing from HASH/KEY to RANGE/LIST + if (! isset($partition['value_type'])) { + $partition['value_type'] = ''; + $partition['value'] = ''; + } + + if (! isset($partition['engine'])) { // When removing subpartitioning + $partition['engine'] = ''; + $partition['comment'] = ''; + $partition['data_directory'] = ''; + $partition['index_directory'] = ''; + $partition['max_rows'] = ''; + $partition['min_rows'] = ''; + $partition['tablespace'] = ''; + $partition['node_group'] = ''; + } + + // No subpartitions + if ($subpartitionCount < 2 || $partitionDetails['can_have_subpartitions'] !== true) { + unset($partition['subpartitions'], $partition['subpartition_count']); + continue; + } + + // Has subpartitions + $partition['subpartition_count'] = $subpartitionCount; + + if (! isset($partition['subpartitions'])) { + $partition['subpartitions'] = []; + } + + $subpartitions =& $partition['subpartitions']; + + // Remove details of the additional subpartitions + // when number of subpartitions have been reduced + array_splice($subpartitions, $subpartitionCount); + + for ($j = 0; $j < $subpartitionCount; $j++) { + if (! isset($subpartitions[$j])) { // Newly added subpartition + $subpartitions[$j] = [ + 'name' => $partition['name'] . '_s' . $j, + 'engine' => '', + 'comment' => '', + 'data_directory' => '', + 'index_directory' => '', + 'max_rows' => '', + 'min_rows' => '', + 'tablespace' => '', + 'node_group' => '', + ]; + } + + $subpartitions[$j]['prefix'] = 'partitions[' . $i . ']' + . '[subpartitions][' . $j . ']'; + } + } + + $partitionDetails['partitions'] = $partitions; + + return $partitionDetails; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportOds.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportOds.php new file mode 100644 index 0000000..14b67c4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportOds.php @@ -0,0 +1,325 @@ +setText('OpenDocument Spreadsheet'); + $exportPluginProperties->setExtension('ods'); + $exportPluginProperties->setMimeType('application/vnd.oasis.opendocument.spreadsheet'); + $exportPluginProperties->setForceFile(true); + $exportPluginProperties->setOptionsText(__('Options')); + + // create the root group that will be the options field for + // $exportPluginProperties + // this will be shown as "Format specific options" + $exportSpecificOptions = new OptionsPropertyRootGroup('Format Specific Options'); + + // general options main group + $generalOptions = new OptionsPropertyMainGroup('general_opts'); + // create primary items and add them to the group + $leaf = new TextPropertyItem( + 'null', + __('Replace NULL with:') + ); + $generalOptions->addProperty($leaf); + $leaf = new BoolPropertyItem( + 'columns', + __('Put columns names in the first row') + ); + $generalOptions->addProperty($leaf); + $leaf = new HiddenPropertyItem('structure_or_data'); + $generalOptions->addProperty($leaf); + // add the main group to the root group + $exportSpecificOptions->addProperty($generalOptions); + + // set the options for the export plugin property item + $exportPluginProperties->setOptions($exportSpecificOptions); + + return $exportPluginProperties; + } + + /** + * Outputs export header + */ + public function exportHeader(): bool + { + $GLOBALS['ods_buffer'] .= '' + . '' + . '' + . '' + . '' + . '/' + . '' + . '/' + . '' + . '' + . '' + . '' + . ':' + . '' + . ':' + . '' + . ' ' + . '' + . '' + . '' + . '' + . '/' + . '' + . '/' + . '' + . ' ' + . '' + . ':' + . '' + . ' ' + . '' + . '' + . '' + . '' + . '' + . '' + . '' + . ''; + + return true; + } + + /** + * Outputs export footer + */ + public function exportFooter(): bool + { + $GLOBALS['ods_buffer'] .= ''; + + return $this->export->outputHandler( + OpenDocument::create( + 'application/vnd.oasis.opendocument.spreadsheet', + $GLOBALS['ods_buffer'] + ) + ); + } + + /** + * Outputs database header + * + * @param string $db Database name + * @param string $dbAlias Aliases of db + */ + public function exportDBHeader($db, $dbAlias = ''): bool + { + return true; + } + + /** + * Outputs database footer + * + * @param string $db Database name + */ + public function exportDBFooter($db): bool + { + return true; + } + + /** + * Outputs CREATE DATABASE statement + * + * @param string $db Database name + * @param string $exportType 'server', 'database', 'table' + * @param string $dbAlias Aliases of db + */ + public function exportDBCreate($db, $exportType, $dbAlias = ''): bool + { + return true; + } + + /** + * Outputs the content of a table in NHibernate format + * + * @param string $db database name + * @param string $table table name + * @param string $crlf the end of line sequence + * @param string $errorUrl the url to go back in case of error + * @param string $sqlQuery SQL query for obtaining data + * @param array $aliases Aliases of db/table/columns + */ + public function exportData( + $db, + $table, + $crlf, + $errorUrl, + $sqlQuery, + array $aliases = [] + ): bool { + global $what, $dbi; + + $db_alias = $db; + $table_alias = $table; + $this->initAlias($aliases, $db_alias, $table_alias); + // Gets the data from the database + $result = $dbi->query($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); + $fields_cnt = $result->numFields(); + /** @var FieldMetadata[] $fieldsMeta */ + $fieldsMeta = $dbi->getFieldsMeta($result); + + $GLOBALS['ods_buffer'] .= ''; + + // If required, get fields name at the first line + if (isset($GLOBALS[$what . '_columns'])) { + $GLOBALS['ods_buffer'] .= ''; + foreach ($fieldsMeta as $field) { + $col_as = $field->name; + if (! empty($aliases[$db]['tables'][$table]['columns'][$col_as])) { + $col_as = $aliases[$db]['tables'][$table]['columns'][$col_as]; + } + + $GLOBALS['ods_buffer'] .= '' + . '' + . htmlspecialchars( + stripslashes($col_as) + ) + . '' + . ''; + } + + $GLOBALS['ods_buffer'] .= ''; + } + + // Format the data + while ($row = $result->fetchRow()) { + $GLOBALS['ods_buffer'] .= ''; + for ($j = 0; $j < $fields_cnt; $j++) { + if ($fieldsMeta[$j]->isMappedTypeGeometry) { + // export GIS types as hex + $row[$j] = '0x' . bin2hex($row[$j]); + } + + if (! isset($row[$j])) { + $GLOBALS['ods_buffer'] .= '' + . '' + . htmlspecialchars($GLOBALS[$what . '_null']) + . '' + . ''; + } elseif ($fieldsMeta[$j]->isBinary && $fieldsMeta[$j]->isBlob) { + // ignore BLOB + $GLOBALS['ods_buffer'] .= '' + . '' + . ''; + } elseif ($fieldsMeta[$j]->isType(FieldMetadata::TYPE_DATE)) { + $GLOBALS['ods_buffer'] .= '' + . '' + . htmlspecialchars($row[$j]) + . '' + . ''; + } elseif ($fieldsMeta[$j]->isType(FieldMetadata::TYPE_TIME)) { + $GLOBALS['ods_buffer'] .= '' + . '' + . htmlspecialchars($row[$j]) + . '' + . ''; + } elseif ($fieldsMeta[$j]->isType(FieldMetadata::TYPE_DATETIME)) { + $GLOBALS['ods_buffer'] .= '' + . '' + . htmlspecialchars($row[$j]) + . '' + . ''; + } elseif ( + ($fieldsMeta[$j]->isNumeric + && ! $fieldsMeta[$j]->isMappedTypeTimestamp + && ! $fieldsMeta[$j]->isBlob) + || $fieldsMeta[$j]->isType(FieldMetadata::TYPE_REAL) + ) { + $GLOBALS['ods_buffer'] .= '' + . '' + . htmlspecialchars($row[$j]) + . '' + . ''; + } else { + $GLOBALS['ods_buffer'] .= '' + . '' + . htmlspecialchars($row[$j]) + . '' + . ''; + } + } + + $GLOBALS['ods_buffer'] .= ''; + } + + $GLOBALS['ods_buffer'] .= ''; + + return true; + } + + /** + * Outputs result raw query in ODS format + * + * @param string $errorUrl the url to go back in case of error + * @param string $sqlQuery the rawquery to output + * @param string $crlf the end of line sequence + */ + public function exportRawQuery(string $errorUrl, string $sqlQuery, string $crlf): bool + { + return $this->exportData('', '', $crlf, $errorUrl, $sqlQuery); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportSql.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportSql.php new file mode 100644 index 0000000..8f3e1bc --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportSql.php @@ -0,0 +1,2848 @@ +setText('SQL'); + $exportPluginProperties->setExtension('sql'); + $exportPluginProperties->setMimeType('text/x-sql'); + + if ($hideSql) { + return $exportPluginProperties; + } + + $exportPluginProperties->setOptionsText(__('Options')); + + // create the root group that will be the options field for + // $exportPluginProperties + // this will be shown as "Format specific options" + $exportSpecificOptions = new OptionsPropertyRootGroup('Format Specific Options'); + + // general options main group + $generalOptions = new OptionsPropertyMainGroup('general_opts'); + + // comments + $subgroup = new OptionsPropertySubgroup('include_comments'); + $leaf = new BoolPropertyItem( + 'include_comments', + __( + 'Display comments (includes info such as export timestamp, PHP version, and server version)' + ) + ); + $subgroup->setSubgroupHeader($leaf); + + $leaf = new TextPropertyItem( + 'header_comment', + __('Additional custom header comment (\n splits lines):') + ); + $subgroup->addProperty($leaf); + $leaf = new BoolPropertyItem( + 'dates', + __( + 'Include a timestamp of when databases were created, last updated, and last checked' + ) + ); + $subgroup->addProperty($leaf); + $relationParameters = $this->relation->getRelationParameters(); + if ($relationParameters->relationFeature !== null) { + $leaf = new BoolPropertyItem( + 'relation', + __('Display foreign key relationships') + ); + $subgroup->addProperty($leaf); + } + + if ($relationParameters->browserTransformationFeature !== null) { + $leaf = new BoolPropertyItem( + 'mime', + __('Display media types') + ); + $subgroup->addProperty($leaf); + } + + $generalOptions->addProperty($subgroup); + + // enclose in a transaction + $leaf = new BoolPropertyItem( + 'use_transaction', + __('Enclose export in a transaction') + ); + $leaf->setDoc( + [ + 'programs', + 'mysqldump', + 'option_mysqldump_single-transaction', + ] + ); + $generalOptions->addProperty($leaf); + + // disable foreign key checks + $leaf = new BoolPropertyItem( + 'disable_fk', + __('Disable foreign key checks') + ); + $leaf->setDoc( + [ + 'manual_MySQL_Database_Administration', + 'server-system-variables', + 'sysvar_foreign_key_checks', + ] + ); + $generalOptions->addProperty($leaf); + + // export views as tables + $leaf = new BoolPropertyItem( + 'views_as_tables', + __('Export views as tables') + ); + $generalOptions->addProperty($leaf); + + // export metadata + $leaf = new BoolPropertyItem( + 'metadata', + __('Export metadata') + ); + $generalOptions->addProperty($leaf); + + // compatibility maximization + $compats = $dbi->getCompatibilities(); + if (count($compats) > 0) { + $values = []; + foreach ($compats as $val) { + $values[$val] = $val; + } + + $leaf = new SelectPropertyItem( + 'compatibility', + __( + 'Database system or older MySQL server to maximize output compatibility with:' + ) + ); + $leaf->setValues($values); + $leaf->setDoc( + [ + 'manual_MySQL_Database_Administration', + 'Server_SQL_mode', + ] + ); + $generalOptions->addProperty($leaf); + + unset($values); + } + + // what to dump (structure/data/both) + $subgroup = new OptionsPropertySubgroup( + 'dump_table', + __('Dump table') + ); + $leaf = new RadioPropertyItem('structure_or_data'); + $leaf->setValues( + [ + 'structure' => __('structure'), + 'data' => __('data'), + 'structure_and_data' => __('structure and data'), + ] + ); + $subgroup->setSubgroupHeader($leaf); + $generalOptions->addProperty($subgroup); + + // add the main group to the root group + $exportSpecificOptions->addProperty($generalOptions); + + // structure options main group + if (! $hideStructure) { + $structureOptions = new OptionsPropertyMainGroup( + 'structure', + __('Object creation options') + ); + $structureOptions->setForce('data'); + + // begin SQL Statements + $subgroup = new OptionsPropertySubgroup(); + $leaf = new MessageOnlyPropertyItem( + 'add_statements', + __('Add statements:') + ); + $subgroup->setSubgroupHeader($leaf); + + // server export options + if ($plugin_param['export_type'] === 'server') { + $leaf = new BoolPropertyItem( + 'drop_database', + sprintf(__('Add %s statement'), 'DROP DATABASE IF EXISTS') + ); + $subgroup->addProperty($leaf); + } + + if ($plugin_param['export_type'] === 'database') { + $createClause = 'CREATE DATABASE / USE'; + $leaf = new BoolPropertyItem( + 'create_database', + sprintf(__('Add %s statement'), $createClause) + ); + $subgroup->addProperty($leaf); + } + + if ($plugin_param['export_type'] === 'table') { + $dropClause = $dbi->getTable($GLOBALS['db'], $GLOBALS['table'])->isView() + ? 'DROP VIEW' + : 'DROP TABLE'; + } else { + $dropClause = 'DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT'; + } + + $dropClause .= ' / TRIGGER'; + + $leaf = new BoolPropertyItem( + 'drop_table', + sprintf(__('Add %s statement'), $dropClause) + ); + $subgroup->addProperty($leaf); + + $subgroupCreateTable = new OptionsPropertySubgroup(); + + // Add table structure option + $leaf = new BoolPropertyItem( + 'create_table', + sprintf(__('Add %s statement'), 'CREATE TABLE') + ); + $subgroupCreateTable->setSubgroupHeader($leaf); + + $leaf = new BoolPropertyItem( + 'if_not_exists', + 'IF NOT EXISTS ' . __( + '(less efficient as indexes will be generated during table creation)' + ) + ); + $subgroupCreateTable->addProperty($leaf); + + $leaf = new BoolPropertyItem( + 'auto_increment', + sprintf(__('%s value'), 'AUTO_INCREMENT') + ); + $subgroupCreateTable->addProperty($leaf); + + $subgroup->addProperty($subgroupCreateTable); + + // Add view option + $subgroupCreateView = new OptionsPropertySubgroup(); + $leaf = new BoolPropertyItem( + 'create_view', + sprintf(__('Add %s statement'), 'CREATE VIEW') + ); + $subgroupCreateView->setSubgroupHeader($leaf); + + $leaf = new BoolPropertyItem( + 'simple_view_export', + /* l10n: Allow simplifying exported view syntax to only "CREATE VIEW" */ + __('Use simple view export') + ); + $subgroupCreateView->addProperty($leaf); + + $leaf = new BoolPropertyItem( + 'view_current_user', + __('Exclude definition of current user') + ); + $subgroupCreateView->addProperty($leaf); + + $leaf = new BoolPropertyItem( + 'or_replace_view', + sprintf(__('%s view'), 'OR REPLACE') + ); + $subgroupCreateView->addProperty($leaf); + + $subgroup->addProperty($subgroupCreateView); + + $leaf = new BoolPropertyItem( + 'procedure_function', + sprintf( + __('Add %s statement'), + 'CREATE PROCEDURE / FUNCTION / EVENT' + ) + ); + $subgroup->addProperty($leaf); + + // Add triggers option + $leaf = new BoolPropertyItem( + 'create_trigger', + sprintf(__('Add %s statement'), 'CREATE TRIGGER') + ); + $subgroup->addProperty($leaf); + + $structureOptions->addProperty($subgroup); + + $leaf = new BoolPropertyItem( + 'backquotes', + __( + 'Enclose table and column names with backquotes ' + . '(Protects column and table names formed with' + . ' special characters or keywords)' + ) + ); + + $structureOptions->addProperty($leaf); + + // add the main group to the root group + $exportSpecificOptions->addProperty($structureOptions); + } + + // begin Data options + $dataOptions = new OptionsPropertyMainGroup( + 'data', + __('Data creation options') + ); + $dataOptions->setForce('structure'); + $leaf = new BoolPropertyItem( + 'truncate', + __('Truncate table before insert') + ); + $dataOptions->addProperty($leaf); + + // begin SQL Statements + $subgroup = new OptionsPropertySubgroup(); + $leaf = new MessageOnlyPropertyItem( + __('Instead of INSERT statements, use:') + ); + $subgroup->setSubgroupHeader($leaf); + + $leaf = new BoolPropertyItem( + 'delayed', + __('INSERT DELAYED statements') + ); + $leaf->setDoc( + [ + 'manual_MySQL_Database_Administration', + 'insert_delayed', + ] + ); + $subgroup->addProperty($leaf); + + $leaf = new BoolPropertyItem( + 'ignore', + __('INSERT IGNORE statements') + ); + $leaf->setDoc( + [ + 'manual_MySQL_Database_Administration', + 'insert', + ] + ); + $subgroup->addProperty($leaf); + $dataOptions->addProperty($subgroup); + + // Function to use when dumping dat + $leaf = new SelectPropertyItem( + 'type', + __('Function to use when dumping data:') + ); + $leaf->setValues( + [ + 'INSERT' => 'INSERT', + 'UPDATE' => 'UPDATE', + 'REPLACE' => 'REPLACE', + ] + ); + $dataOptions->addProperty($leaf); + + /* Syntax to use when inserting data */ + $subgroup = new OptionsPropertySubgroup(); + $leaf = new MessageOnlyPropertyItem( + null, + __('Syntax to use when inserting data:') + ); + $subgroup->setSubgroupHeader($leaf); + $leaf = new RadioPropertyItem( + 'insert_syntax', + __('INSERT IGNORE statements') + ); + $leaf->setValues( + [ + 'complete' => __( + 'include column names in every INSERT statement' + . '
              Example: INSERT INTO' + . ' tbl_name (col_A,col_B,col_C) VALUES (1,2,3)' + ), + 'extended' => __( + 'insert multiple rows in every INSERT statement' + . '
              Example: INSERT INTO' + . ' tbl_name VALUES (1,2,3), (4,5,6), (7,8,9)' + ), + 'both' => __( + 'both of the above
              Example:' + . ' INSERT INTO tbl_name (col_A,col_B,col_C) VALUES' + . ' (1,2,3), (4,5,6), (7,8,9)' + ), + 'none' => __( + 'neither of the above
              Example:' + . ' INSERT INTO tbl_name VALUES (1,2,3)' + ), + ] + ); + $subgroup->addProperty($leaf); + $dataOptions->addProperty($subgroup); + + // Max length of query + $leaf = new NumberPropertyItem( + 'max_query_size', + __('Maximal length of created query') + ); + $dataOptions->addProperty($leaf); + + // Dump binary columns in hexadecimal + $leaf = new BoolPropertyItem( + 'hex_for_binary', + __( + 'Dump binary columns in hexadecimal notation (for example, "abc" becomes 0x616263)' + ) + ); + $dataOptions->addProperty($leaf); + + // Dump time in UTC + $leaf = new BoolPropertyItem( + 'utc_time', + __( + 'Dump TIMESTAMP columns in UTC (enables TIMESTAMP columns' + . ' to be dumped and reloaded between servers in different' + . ' time zones)' + ) + ); + $dataOptions->addProperty($leaf); + + // add the main group to the root group + $exportSpecificOptions->addProperty($dataOptions); + + // set the options for the export plugin property item + $exportPluginProperties->setOptions($exportSpecificOptions); + + return $exportPluginProperties; + } + + /** + * Generates SQL for routines export + * + * @param string $db Database + * @param array $aliases Aliases of db/table/columns + * @param string $type Type of exported routine + * @param string $name Verbose name of exported routine + * @param array $routines List of routines to export + * @param string $delimiter Delimiter to use in SQL + * + * @return string SQL query + */ + protected function exportRoutineSQL( + $db, + array $aliases, + $type, + $name, + array $routines, + $delimiter + ) { + global $crlf, $cfg, $dbi; + + $text = $this->exportComment() + . $this->exportComment($name) + . $this->exportComment(); + + $usedAlias = false; + $procQuery = ''; + + foreach ($routines as $routine) { + if (! empty($GLOBALS['sql_drop_table'])) { + $procQuery .= 'DROP ' . $type . ' IF EXISTS ' + . Util::backquote($routine) + . $delimiter . $crlf; + } + + $createQuery = $this->replaceWithAliases( + $dbi->getDefinition($db, $type, $routine), + $aliases, + $db, + '', + $flag + ); + if (! empty($createQuery) && $cfg['Export']['remove_definer_from_definitions']) { + // Remove definer clause from routine definitions + $parser = new Parser($createQuery); + $statement = $parser->statements[0]; + $statement->options->remove('DEFINER'); + $createQuery = $statement->build(); + } + + // One warning per database + if ($flag) { + $usedAlias = true; + } + + $procQuery .= $createQuery . $delimiter . $crlf . $crlf; + } + + if ($usedAlias) { + $text .= $this->exportComment( + __('It appears your database uses routines;') + ) + . $this->exportComment( + __('alias export may not work reliably in all cases.') + ) + . $this->exportComment(); + } + + $text .= $procQuery; + + return $text; + } + + /** + * Exports routines (procedures and functions) + * + * @param string $db Database + * @param array $aliases Aliases of db/table/columns + */ + public function exportRoutines($db, array $aliases = []): bool + { + global $crlf, $dbi; + + $dbAlias = $db; + $this->initAlias($aliases, $dbAlias); + + $text = ''; + $delimiter = '$$'; + + $procedureNames = $dbi->getProceduresOrFunctions($db, 'PROCEDURE'); + $functionNames = $dbi->getProceduresOrFunctions($db, 'FUNCTION'); + + if ($procedureNames || $functionNames) { + $text .= $crlf + . 'DELIMITER ' . $delimiter . $crlf; + + if ($procedureNames) { + $text .= $this->exportRoutineSQL( + $db, + $aliases, + 'PROCEDURE', + __('Procedures'), + $procedureNames, + $delimiter + ); + } + + if ($functionNames) { + $text .= $this->exportRoutineSQL( + $db, + $aliases, + 'FUNCTION', + __('Functions'), + $functionNames, + $delimiter + ); + } + + $text .= 'DELIMITER ;' . $crlf; + } + + if (! empty($text)) { + return $this->export->outputHandler($text); + } + + return false; + } + + /** + * Possibly outputs comment + * + * @param string $text Text of comment + * + * @return string The formatted comment + */ + private function exportComment($text = '') + { + if (isset($GLOBALS['sql_include_comments']) && $GLOBALS['sql_include_comments']) { + // see https://dev.mysql.com/doc/refman/5.0/en/ansi-diff-comments.html + if (empty($text)) { + return '--' . $GLOBALS['crlf']; + } + + $lines = preg_split("/\\r\\n|\\r|\\n/", $text); + if ($lines === false) { + return '--' . $GLOBALS['crlf']; + } + + $result = []; + foreach ($lines as $line) { + $result[] = '-- ' . $line . $GLOBALS['crlf']; + } + + return implode('', $result); + } + + return ''; + } + + /** + * Possibly outputs CRLF + * + * @return string crlf or nothing + */ + private function possibleCRLF() + { + if (isset($GLOBALS['sql_include_comments']) && $GLOBALS['sql_include_comments']) { + return $GLOBALS['crlf']; + } + + return ''; + } + + /** + * Outputs export footer + */ + public function exportFooter(): bool + { + global $crlf, $dbi; + + $foot = ''; + + if (isset($GLOBALS['sql_disable_fk'])) { + $foot .= 'SET FOREIGN_KEY_CHECKS=1;' . $crlf; + } + + if (isset($GLOBALS['sql_use_transaction'])) { + $foot .= 'COMMIT;' . $crlf; + } + + // restore connection settings + if ($this->sentCharset) { + $foot .= $crlf + . '/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;' + . $crlf + . '/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;' + . $crlf + . '/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;' + . $crlf; + $this->sentCharset = false; + } + + /* Restore timezone */ + if (isset($GLOBALS['sql_utc_time']) && $GLOBALS['sql_utc_time']) { + $dbi->query('SET time_zone = "' . $GLOBALS['old_tz'] . '"'); + } + + return $this->export->outputHandler($foot); + } + + /** + * Outputs export header. It is the first method to be called, so all + * the required variables are initialized here. + */ + public function exportHeader(): bool + { + global $crlf, $cfg, $dbi; + + if (isset($GLOBALS['sql_compatibility'])) { + $tmpCompat = $GLOBALS['sql_compatibility']; + if ($tmpCompat === 'NONE') { + $tmpCompat = ''; + } + + $dbi->tryQuery('SET SQL_MODE="' . $tmpCompat . '"'); + unset($tmpCompat); + } + + $head = $this->exportComment('phpMyAdmin SQL Dump') + . $this->exportComment('version ' . Version::VERSION) + . $this->exportComment('https://www.phpmyadmin.net/') + . $this->exportComment(); + $hostString = __('Host:') . ' ' . $cfg['Server']['host']; + if (! empty($cfg['Server']['port'])) { + $hostString .= ':' . $cfg['Server']['port']; + } + + $head .= $this->exportComment($hostString); + $head .= $this->exportComment( + __('Generation Time:') . ' ' + . Util::localisedDate() + ) + . $this->exportComment( + __('Server version:') . ' ' . $dbi->getVersionString() + ) + . $this->exportComment(__('PHP Version:') . ' ' . PHP_VERSION) + . $this->possibleCRLF(); + + if (isset($GLOBALS['sql_header_comment']) && ! empty($GLOBALS['sql_header_comment'])) { + // '\n' is not a newline (like "\n" would be), it's the characters + // backslash and n, as explained on the export interface + $lines = explode('\n', $GLOBALS['sql_header_comment']); + $head .= $this->exportComment(); + foreach ($lines as $oneLine) { + $head .= $this->exportComment($oneLine); + } + + $head .= $this->exportComment(); + } + + if (isset($GLOBALS['sql_disable_fk'])) { + $head .= 'SET FOREIGN_KEY_CHECKS=0;' . $crlf; + } + + // We want exported AUTO_INCREMENT columns to have still same value, + // do this only for recent MySQL exports + if (! isset($GLOBALS['sql_compatibility']) || $GLOBALS['sql_compatibility'] === 'NONE') { + $head .= 'SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";' . $crlf; + } + + if (isset($GLOBALS['sql_use_transaction'])) { + $head .= 'START TRANSACTION;' . $crlf; + } + + /* Change timezone if we should export timestamps in UTC */ + if (isset($GLOBALS['sql_utc_time']) && $GLOBALS['sql_utc_time']) { + $head .= 'SET time_zone = "+00:00";' . $crlf; + $GLOBALS['old_tz'] = $dbi + ->fetchValue('SELECT @@session.time_zone'); + $dbi->query('SET time_zone = "+00:00"'); + } + + $head .= $this->possibleCRLF(); + + if (! empty($GLOBALS['asfile'])) { + // we are saving as file, therefore we provide charset information + // so that a utility like the mysql client can interpret + // the file correctly + if (isset($GLOBALS['charset'], Charsets::$mysqlCharsetMap[$GLOBALS['charset']])) { + // we got a charset from the export dialog + $setNames = Charsets::$mysqlCharsetMap[$GLOBALS['charset']]; + } else { + // by default we use the connection charset + $setNames = Charsets::$mysqlCharsetMap['utf-8']; + } + + if ($setNames === 'utf8' && $dbi->getVersion() > 50503) { + $setNames = 'utf8mb4'; + } + + $head .= $crlf + . '/*!40101 SET @OLD_CHARACTER_SET_CLIENT=' + . '@@CHARACTER_SET_CLIENT */;' . $crlf + . '/*!40101 SET @OLD_CHARACTER_SET_RESULTS=' + . '@@CHARACTER_SET_RESULTS */;' . $crlf + . '/*!40101 SET @OLD_COLLATION_CONNECTION=' + . '@@COLLATION_CONNECTION */;' . $crlf + . '/*!40101 SET NAMES ' . $setNames . ' */;' . $crlf . $crlf; + $this->sentCharset = true; + } + + return $this->export->outputHandler($head); + } + + /** + * Outputs CREATE DATABASE statement + * + * @param string $db Database name + * @param string $exportType 'server', 'database', 'table' + * @param string $dbAlias Aliases of db + */ + public function exportDBCreate($db, $exportType, $dbAlias = ''): bool + { + global $crlf, $dbi; + + if (empty($dbAlias)) { + $dbAlias = $db; + } + + if (isset($GLOBALS['sql_compatibility'])) { + $compat = $GLOBALS['sql_compatibility']; + } else { + $compat = 'NONE'; + } + + if (isset($GLOBALS['sql_drop_database'])) { + if ( + ! $this->export->outputHandler( + 'DROP DATABASE IF EXISTS ' + . Util::backquoteCompat( + $dbAlias, + $compat, + isset($GLOBALS['sql_backquotes']) + ) + . ';' . $crlf + ) + ) { + return false; + } + } + + if ($exportType === 'database' && ! isset($GLOBALS['sql_create_database'])) { + return true; + } + + $createQuery = 'CREATE DATABASE IF NOT EXISTS ' + . Util::backquoteCompat($dbAlias, $compat, isset($GLOBALS['sql_backquotes'])); + $collation = $dbi->getDbCollation($db); + if (mb_strpos($collation, '_')) { + $createQuery .= ' DEFAULT CHARACTER SET ' + . mb_substr( + $collation, + 0, + (int) mb_strpos($collation, '_') + ) + . ' COLLATE ' . $collation; + } else { + $createQuery .= ' DEFAULT CHARACTER SET ' . $collation; + } + + $createQuery .= ';' . $crlf; + if (! $this->export->outputHandler($createQuery)) { + return false; + } + + return $this->exportUseStatement($dbAlias, $compat); + } + + /** + * Outputs USE statement + * + * @param string $db db to use + * @param string $compat sql compatibility + */ + private function exportUseStatement($db, $compat): bool + { + global $crlf; + + if (isset($GLOBALS['sql_compatibility']) && $GLOBALS['sql_compatibility'] === 'NONE') { + $result = $this->export->outputHandler( + 'USE ' + . Util::backquoteCompat( + $db, + $compat, + isset($GLOBALS['sql_backquotes']) + ) + . ';' . $crlf + ); + } else { + $result = $this->export->outputHandler('USE ' . $db . ';' . $crlf); + } + + return $result; + } + + /** + * Outputs database header + * + * @param string $db Database name + * @param string $dbAlias Alias of db + */ + public function exportDBHeader($db, $dbAlias = ''): bool + { + if (empty($dbAlias)) { + $dbAlias = $db; + } + + if (isset($GLOBALS['sql_compatibility'])) { + $compat = $GLOBALS['sql_compatibility']; + } else { + $compat = 'NONE'; + } + + $head = $this->exportComment() + . $this->exportComment( + __('Database:') . ' ' + . Util::backquoteCompat( + $dbAlias, + $compat, + isset($GLOBALS['sql_backquotes']) + ) + ) + . $this->exportComment(); + + return $this->export->outputHandler($head); + } + + /** + * Outputs database footer + * + * @param string $db Database name + */ + public function exportDBFooter($db): bool + { + global $crlf; + + $result = true; + + //add indexes to the sql dump file + if (isset($GLOBALS['sql_indexes'])) { + $result = $this->export->outputHandler($GLOBALS['sql_indexes']); + unset($GLOBALS['sql_indexes']); + } + + //add auto increments to the sql dump file + if (isset($GLOBALS['sql_auto_increments'])) { + $result = $this->export->outputHandler($GLOBALS['sql_auto_increments']); + unset($GLOBALS['sql_auto_increments']); + } + + //add constraints to the sql dump file + if (isset($GLOBALS['sql_constraints'])) { + $result = $this->export->outputHandler($GLOBALS['sql_constraints']); + unset($GLOBALS['sql_constraints']); + } + + return $result; + } + + /** + * Exports events + * + * @param string $db Database + */ + public function exportEvents($db): bool + { + global $crlf, $cfg, $dbi; + + $text = ''; + $delimiter = '$$'; + + $eventNames = $dbi->fetchResult( + 'SELECT EVENT_NAME FROM information_schema.EVENTS WHERE' + . " EVENT_SCHEMA= '" . $dbi->escapeString($db) + . "';" + ); + + if ($eventNames) { + $text .= $crlf + . 'DELIMITER ' . $delimiter . $crlf; + + $text .= $this->exportComment() + . $this->exportComment(__('Events')) + . $this->exportComment(); + + foreach ($eventNames as $eventName) { + if (! empty($GLOBALS['sql_drop_table'])) { + $text .= 'DROP EVENT IF EXISTS ' + . Util::backquote($eventName) + . $delimiter . $crlf; + } + + $eventDef = $dbi->getDefinition($db, 'EVENT', $eventName); + if (! empty($eventDef) && $cfg['Export']['remove_definer_from_definitions']) { + // remove definer clause from the event definition + $parser = new Parser($eventDef); + $statement = $parser->statements[0]; + $statement->options->remove('DEFINER'); + $eventDef = $statement->build(); + } + + $text .= $eventDef . $delimiter . $crlf . $crlf; + } + + $text .= 'DELIMITER ;' . $crlf; + } + + if (! empty($text)) { + return $this->export->outputHandler($text); + } + + return false; + } + + /** + * Exports metadata from Configuration Storage + * + * @param string $db database being exported + * @param string|array $tables table(s) being exported + * @param array $metadataTypes types of metadata to export + */ + public function exportMetadata( + $db, + $tables, + array $metadataTypes + ): bool { + $relationParameters = $this->relation->getRelationParameters(); + if ($relationParameters->db === null) { + return true; + } + + $comment = $this->possibleCRLF() + . $this->possibleCRLF() + . $this->exportComment() + . $this->exportComment(__('Metadata')) + . $this->exportComment(); + if (! $this->export->outputHandler($comment)) { + return false; + } + + if (! $this->exportUseStatement((string) $relationParameters->db, $GLOBALS['sql_compatibility'])) { + return false; + } + + $r = 1; + if (is_array($tables)) { + // export metadata for each table + foreach ($tables as $table) { + $r &= (int) $this->exportConfigurationMetadata($db, $table, $metadataTypes); + } + + // export metadata for the database + $r &= (int) $this->exportConfigurationMetadata($db, null, $metadataTypes); + } else { + // export metadata for single table + $r &= (int) $this->exportConfigurationMetadata($db, $tables, $metadataTypes); + } + + return (bool) $r; + } + + /** + * Exports metadata from Configuration Storage + * + * @param string $db database being exported + * @param string|null $table table being exported + * @param array $metadataTypes types of metadata to export + */ + private function exportConfigurationMetadata( + $db, + $table, + array $metadataTypes + ): bool { + global $dbi; + + $relationParameters = $this->relation->getRelationParameters(); + $relationParams = $relationParameters->toArray(); + + if (isset($table)) { + $types = [ + 'column_info' => 'db_name', + 'table_uiprefs' => 'db_name', + 'tracking' => 'db_name', + ]; + } else { + $types = [ + 'bookmark' => 'dbase', + 'relation' => 'master_db', + 'pdf_pages' => 'db_name', + 'savedsearches' => 'db_name', + 'central_columns' => 'db_name', + ]; + } + + $aliases = []; + + $comment = $this->possibleCRLF() + . $this->exportComment(); + + if (isset($table)) { + $comment .= $this->exportComment( + sprintf( + __('Metadata for table %s'), + $table + ) + ); + } else { + $comment .= $this->exportComment( + sprintf( + __('Metadata for database %s'), + $db + ) + ); + } + + $comment .= $this->exportComment(); + + if (! $this->export->outputHandler($comment)) { + return false; + } + + foreach ($types as $type => $dbNameColumn) { + if (! in_array($type, $metadataTypes) || ! isset($relationParams[$type])) { + continue; + } + + // special case, designer pages and their coordinates + if ($type === 'pdf_pages') { + if ($relationParameters->pdfFeature === null) { + continue; + } + + $sqlQuery = 'SELECT `page_nr`, `page_descr` FROM ' + . Util::backquote($relationParameters->pdfFeature->database) + . '.' . Util::backquote($relationParameters->pdfFeature->pdfPages) + . ' WHERE `db_name` = \'' . $dbi->escapeString($db) . "'"; + + $result = $dbi->fetchResult($sqlQuery, 'page_nr', 'page_descr'); + + foreach (array_keys($result) as $page) { + // insert row for pdf_page + $sqlQueryRow = 'SELECT `db_name`, `page_descr` FROM ' + . Util::backquote($relationParameters->pdfFeature->database) + . '.' . Util::backquote($relationParameters->pdfFeature->pdfPages) + . ' WHERE `db_name` = \'' . $dbi->escapeString($db) . "'" + . " AND `page_nr` = '" . intval($page) . "'"; + + if ( + ! $this->exportData( + $relationParameters->pdfFeature->database->getName(), + $relationParameters->pdfFeature->pdfPages->getName(), + $GLOBALS['crlf'], + '', + $sqlQueryRow, + $aliases + ) + ) { + return false; + } + + $lastPage = $GLOBALS['crlf'] + . 'SET @LAST_PAGE = LAST_INSERT_ID();' + . $GLOBALS['crlf']; + if (! $this->export->outputHandler($lastPage)) { + return false; + } + + $sqlQueryCoords = 'SELECT `db_name`, `table_name`, ' + . "'@LAST_PAGE' AS `pdf_page_number`, `x`, `y` FROM " + . Util::backquote($relationParameters->pdfFeature->database) + . '.' . Util::backquote($relationParameters->pdfFeature->tableCoords) + . " WHERE `pdf_page_number` = '" . $page . "'"; + + $GLOBALS['exporting_metadata'] = true; + if ( + ! $this->exportData( + $relationParameters->pdfFeature->database->getName(), + $relationParameters->pdfFeature->tableCoords->getName(), + $GLOBALS['crlf'], + '', + $sqlQueryCoords, + $aliases + ) + ) { + $GLOBALS['exporting_metadata'] = false; + + return false; + } + + $GLOBALS['exporting_metadata'] = false; + } + + continue; + } + + // remove auto_incrementing id field for some tables + if ($type === 'bookmark') { + $sqlQuery = 'SELECT `dbase`, `user`, `label`, `query` FROM '; + } elseif ($type === 'column_info') { + $sqlQuery = 'SELECT `db_name`, `table_name`, `column_name`,' + . ' `comment`, `mimetype`, `transformation`,' + . ' `transformation_options`, `input_transformation`,' + . ' `input_transformation_options` FROM'; + } elseif ($type === 'savedsearches') { + $sqlQuery = 'SELECT `username`, `db_name`, `search_name`, `search_data` FROM'; + } else { + $sqlQuery = 'SELECT * FROM '; + } + + $sqlQuery .= Util::backquote($relationParameters->db) + . '.' . Util::backquote((string) $relationParams[$type]) + . ' WHERE ' . Util::backquote($dbNameColumn) + . " = '" . $dbi->escapeString($db) . "'"; + if (isset($table)) { + $sqlQuery .= " AND `table_name` = '" + . $dbi->escapeString($table) . "'"; + } + + if ( + ! $this->exportData( + (string) $relationParameters->db, + (string) $relationParams[$type], + $GLOBALS['crlf'], + '', + $sqlQuery, + $aliases + ) + ) { + return false; + } + } + + return true; + } + + /** + * Returns a stand-in CREATE definition to resolve view dependencies + * + * @param string $db the database name + * @param string $view the view name + * @param string $crlf the end of line sequence + * @param array $aliases Aliases of db/table/columns + * + * @return string resulting definition + */ + public function getTableDefStandIn($db, $view, $crlf, $aliases = []) + { + global $dbi; + + $dbAlias = $db; + $viewAlias = $view; + $this->initAlias($aliases, $dbAlias, $viewAlias); + $createQuery = ''; + if (! empty($GLOBALS['sql_drop_table'])) { + $createQuery .= 'DROP VIEW IF EXISTS ' + . Util::backquote($viewAlias) + . ';' . $crlf; + } + + $createQuery .= 'CREATE TABLE '; + + if (isset($GLOBALS['sql_if_not_exists']) && $GLOBALS['sql_if_not_exists']) { + $createQuery .= 'IF NOT EXISTS '; + } + + $createQuery .= Util::backquote($viewAlias) . ' (' . $crlf; + $tmp = []; + $columns = $dbi->getColumnsFull($db, $view); + foreach ($columns as $columnName => $definition) { + $colAlias = $columnName; + if (! empty($aliases[$db]['tables'][$view]['columns'][$colAlias])) { + $colAlias = $aliases[$db]['tables'][$view]['columns'][$colAlias]; + } + + $tmp[] = Util::backquote($colAlias) . ' ' . + $definition['Type'] . $crlf; + } + + return $createQuery . implode(',', $tmp) . ');' . $crlf; + } + + /** + * Returns CREATE definition that matches $view's structure + * + * @param string $db the database name + * @param string $view the view name + * @param string $crlf the end of line sequence + * @param bool $addSemicolon whether to add semicolon and end-of-line at + * the end + * @param array $aliases Aliases of db/table/columns + * + * @return string resulting schema + */ + private function getTableDefForView( + $db, + $view, + $crlf, + $addSemicolon = true, + array $aliases = [] + ) { + global $dbi; + + $dbAlias = $db; + $viewAlias = $view; + $this->initAlias($aliases, $dbAlias, $viewAlias); + $createQuery = 'CREATE TABLE'; + if (isset($GLOBALS['sql_if_not_exists'])) { + $createQuery .= ' IF NOT EXISTS '; + } + + $createQuery .= Util::backquote($viewAlias) . '(' . $crlf; + + $columns = $dbi->getColumns($db, $view, true); + + $firstCol = true; + foreach ($columns as $column) { + $colAlias = $column['Field']; + if (! empty($aliases[$db]['tables'][$view]['columns'][$colAlias])) { + $colAlias = $aliases[$db]['tables'][$view]['columns'][$colAlias]; + } + + $extractedColumnspec = Util::extractColumnSpec($column['Type']); + + if (! $firstCol) { + $createQuery .= ',' . $crlf; + } + + $createQuery .= ' ' . Util::backquote($colAlias); + $createQuery .= ' ' . $column['Type']; + if ($extractedColumnspec['can_contain_collation'] && ! empty($column['Collation'])) { + $createQuery .= ' COLLATE ' . $column['Collation']; + } + + if ($column['Null'] === 'NO') { + $createQuery .= ' NOT NULL'; + } + + if (isset($column['Default'])) { + $createQuery .= " DEFAULT '" + . $dbi->escapeString($column['Default']) . "'"; + } else { + if ($column['Null'] === 'YES') { + $createQuery .= ' DEFAULT NULL'; + } + } + + if (! empty($column['Comment'])) { + $createQuery .= " COMMENT '" + . $dbi->escapeString($column['Comment']) . "'"; + } + + $firstCol = false; + } + + $createQuery .= $crlf . ')' . ($addSemicolon ? ';' : '') . $crlf; + + if (isset($GLOBALS['sql_compatibility'])) { + $compat = $GLOBALS['sql_compatibility']; + } else { + $compat = 'NONE'; + } + + if ($compat === 'MSSQL') { + $createQuery = $this->makeCreateTableMSSQLCompatible($createQuery); + } + + return $createQuery; + } + + /** + * Returns $table's CREATE definition + * + * @param string $db the database name + * @param string $table the table name + * @param string $crlf the end of line sequence + * @param string $errorUrl the url to go back in case + * of error + * @param bool $showDates whether to include creation/ + * update/check dates + * @param bool $addSemicolon whether to add semicolon and + * end-of-line at the end + * @param bool $view whether we're handling a view + * @param bool $updateIndexesIncrements whether we need to update + * two global variables + * @param array $aliases Aliases of db/table/columns + * + * @return string resulting schema + */ + public function getTableDef( + $db, + $table, + $crlf, + $errorUrl, + $showDates = false, + $addSemicolon = true, + $view = false, + $updateIndexesIncrements = true, + array $aliases = [] + ) { + global $sql_drop_table, $sql_backquotes, $sql_constraints, + $sql_constraints_query, $sql_indexes, $sql_indexes_query, + $sql_auto_increments, $sql_drop_foreign_keys, $dbi, $cfg; + + $dbAlias = $db; + $tableAlias = $table; + $this->initAlias($aliases, $dbAlias, $tableAlias); + + $schemaCreate = ''; + $newCrlf = $crlf; + + if (isset($GLOBALS['sql_compatibility'])) { + $compat = $GLOBALS['sql_compatibility']; + } else { + $compat = 'NONE'; + } + + $result = $dbi->tryQuery( + 'SHOW TABLE STATUS FROM ' . Util::backquote($db) + . ' WHERE Name = \'' . $dbi->escapeString((string) $table) . '\'' + ); + if ($result != false) { + if ($result->numRows() > 0) { + $tmpres = $result->fetchAssoc(); + + if ($showDates && isset($tmpres['Create_time']) && ! empty($tmpres['Create_time'])) { + $schemaCreate .= $this->exportComment( + __('Creation:') . ' ' + . Util::localisedDate( + strtotime($tmpres['Create_time']) + ) + ); + $newCrlf = $this->exportComment() . $crlf; + } + + if ($showDates && isset($tmpres['Update_time']) && ! empty($tmpres['Update_time'])) { + $schemaCreate .= $this->exportComment( + __('Last update:') . ' ' + . Util::localisedDate( + strtotime($tmpres['Update_time']) + ) + ); + $newCrlf = $this->exportComment() . $crlf; + } + + if ($showDates && isset($tmpres['Check_time']) && ! empty($tmpres['Check_time'])) { + $schemaCreate .= $this->exportComment( + __('Last check:') . ' ' + . Util::localisedDate( + strtotime($tmpres['Check_time']) + ) + ); + $newCrlf = $this->exportComment() . $crlf; + } + } + } + + $schemaCreate .= $newCrlf; + + if (! empty($sql_drop_table) && $dbi->getTable($db, $table)->isView()) { + $schemaCreate .= 'DROP VIEW IF EXISTS ' + . Util::backquoteCompat($tableAlias, 'NONE', $sql_backquotes) . ';' + . $crlf; + } + + // no need to generate a DROP VIEW here, it was done earlier + if (! empty($sql_drop_table) && ! $dbi->getTable($db, $table)->isView()) { + $schemaCreate .= 'DROP TABLE IF EXISTS ' + . Util::backquoteCompat($tableAlias, 'NONE', $sql_backquotes) . ';' + . $crlf; + } + + // Complete table dump, + // Whether to quote table and column names or not + if ($sql_backquotes) { + $dbi->query('SET SQL_QUOTE_SHOW_CREATE = 1'); + } else { + $dbi->query('SET SQL_QUOTE_SHOW_CREATE = 0'); + } + + // I don't see the reason why this unbuffered query could cause problems, + // because SHOW CREATE TABLE returns only one row, and we free the + // results below. Nonetheless, we got 2 user reports about this + // (see bug 1562533) so I removed the unbuffered mode. + // $result = $dbi->query('SHOW CREATE TABLE ' . backquote($db) + // . '.' . backquote($table), null, DatabaseInterface::QUERY_UNBUFFERED); + // + // Note: SHOW CREATE TABLE, at least in MySQL 5.1.23, does not + // produce a displayable result for the default value of a BIT + // column, nor does the mysqldump command. See MySQL bug 35796 + $dbi->tryQuery('USE ' . Util::backquote($db)); + $result = $dbi->tryQuery( + 'SHOW CREATE TABLE ' . Util::backquote($db) . '.' + . Util::backquote($table) + ); + // an error can happen, for example the table is crashed + $tmpError = $dbi->getError(); + if ($tmpError) { + $message = sprintf(__('Error reading structure for table %s:'), $db . '.' . $table); + $message .= ' ' . $tmpError; + if (! defined('TESTSUITE')) { + trigger_error($message, E_USER_ERROR); + } + + return $this->exportComment($message); + } + + // Old mode is stored so it can be restored once exporting is done. + $oldMode = Context::$MODE; + + $warning = ''; + + $row = null; + if ($result !== false) { + $row = $result->fetchRow(); + } + + if ($row) { + $createQuery = $row[1]; + unset($row); + + // Convert end of line chars to one that we want (note that MySQL + // doesn't return query it will accept in all cases) + if (mb_strpos($createQuery, "(\r\n ")) { + $createQuery = str_replace("\r\n", $crlf, $createQuery); + } elseif (mb_strpos($createQuery, "(\n ")) { + $createQuery = str_replace("\n", $crlf, $createQuery); + } elseif (mb_strpos($createQuery, "(\r ")) { + $createQuery = str_replace("\r", $crlf, $createQuery); + } + + /* + * Drop database name from VIEW creation. + * + * This is a bit tricky, but we need to issue SHOW CREATE TABLE with + * database name, but we don't want name to show up in CREATE VIEW + * statement. + */ + if ($view) { + //TODO: use parser + $createQuery = preg_replace( + '/' . preg_quote(Util::backquote($db), '/') . '\./', + '', + $createQuery + ); + $parser = new Parser($createQuery); + /** + * `CREATE TABLE` statement. + * + * @var CreateStatement + */ + $statement = $parser->statements[0]; + + // exclude definition of current user + if ($cfg['Export']['remove_definer_from_definitions'] || isset($GLOBALS['sql_view_current_user'])) { + $statement->options->remove('DEFINER'); + } + + if (isset($GLOBALS['sql_simple_view_export'])) { + $statement->options->remove('SQL SECURITY'); + $statement->options->remove('INVOKER'); + $statement->options->remove('ALGORITHM'); + $statement->options->remove('DEFINER'); + } + + $createQuery = $statement->build(); + + // whether to replace existing view or not + if (isset($GLOBALS['sql_or_replace_view'])) { + $createQuery = preg_replace('/^CREATE/', 'CREATE OR REPLACE', $createQuery); + } + } + + // Substitute aliases in `CREATE` query. + $createQuery = $this->replaceWithAliases($createQuery, $aliases, $db, $table, $flag); + + // One warning per view. + if ($flag && $view) { + $warning = $this->exportComment() + . $this->exportComment( + __('It appears your database uses views;') + ) + . $this->exportComment( + __('alias export may not work reliably in all cases.') + ) + . $this->exportComment(); + } + + // Adding IF NOT EXISTS, if required. + if (isset($GLOBALS['sql_if_not_exists'])) { + $createQuery = (string) preg_replace('/^CREATE TABLE/', 'CREATE TABLE IF NOT EXISTS', $createQuery); + } + + // Making the query MSSQL compatible. + if ($compat === 'MSSQL') { + $createQuery = $this->makeCreateTableMSSQLCompatible($createQuery); + } + + // Views have no constraints, indexes, etc. They do not require any + // analysis. + if (! $view) { + if (empty($sql_backquotes)) { + // Option "Enclose table and column names with backquotes" + // was checked. + Context::$MODE |= Context::SQL_MODE_NO_ENCLOSING_QUOTES; + } + + // Using appropriate quotes. + if (($compat === 'MSSQL') || ($sql_backquotes === '"')) { + Context::$MODE |= Context::SQL_MODE_ANSI_QUOTES; + } + } + + /** + * Parser used for analysis. + */ + $parser = new Parser($createQuery); + + /** + * `CREATE TABLE` statement. + * + * @var CreateStatement + */ + $statement = $parser->statements[0]; + + if (! empty($statement->entityOptions)) { + $engine = $statement->entityOptions->has('ENGINE'); + } else { + $engine = ''; + } + + /* Avoid operation on ARCHIVE tables as those can not be altered */ + if ( + (! empty($statement->fields) && is_array($statement->fields)) + && (empty($engine) || strtoupper($engine) !== 'ARCHIVE') + ) { + + /** + * Fragments containing definition of each constraint. + * + * @var array + */ + $constraints = []; + + /** + * Fragments containing definition of each index. + * + * @var array + */ + $indexes = []; + + /** + * Fragments containing definition of each FULLTEXT index. + * + * @var array + */ + $indexesFulltext = []; + + /** + * Fragments containing definition of each foreign key that will + * be dropped. + * + * @var array + */ + $dropped = []; + + /** + * Fragment containing definition of the `AUTO_INCREMENT`. + * + * @var array + */ + $autoIncrement = []; + + // Scanning each field of the `CREATE` statement to fill the arrays + // above. + // If the field is used in any of the arrays above, it is removed + // from the original definition. + // Also, AUTO_INCREMENT attribute is removed. + /** @var CreateDefinition $field */ + foreach ($statement->fields as $key => $field) { + if ($field->isConstraint) { + // Creating the parts that add constraints. + $constraints[] = $field::build($field); + unset($statement->fields[$key]); + } elseif (! empty($field->key)) { + // Creating the parts that add indexes (must not be + // constraints). + if ($field->key->type === 'FULLTEXT KEY') { + $indexesFulltext[] = $field::build($field); + unset($statement->fields[$key]); + } else { + if (empty($GLOBALS['sql_if_not_exists'])) { + $indexes[] = str_replace( + 'COMMENT=\'', + 'COMMENT \'', + $field::build($field) + ); + unset($statement->fields[$key]); + } + } + } + + // Creating the parts that drop foreign keys. + if (! empty($field->key)) { + if ($field->key->type === 'FOREIGN KEY') { + $dropped[] = 'FOREIGN KEY ' . Context::escape($field->name); + unset($statement->fields[$key]); + } + } + + // Dropping AUTO_INCREMENT. + if (empty($field->options)) { + continue; + } + + if (! $field->options->has('AUTO_INCREMENT') || ! empty($GLOBALS['sql_if_not_exists'])) { + continue; + } + + $autoIncrement[] = $field::build($field); + $field->options->remove('AUTO_INCREMENT'); + } + + /** + * The header of the `ALTER` statement (`ALTER TABLE tbl`). + * + * @var string + */ + $alterHeader = 'ALTER TABLE ' . + Util::backquoteCompat($tableAlias, $compat, $sql_backquotes); + + /** + * The footer of the `ALTER` statement (usually ';') + * + * @var string + */ + $alterFooter = ';' . $crlf; + + // Generating constraints-related query. + if (! empty($constraints)) { + $sql_constraints_query = $alterHeader . $crlf . ' ADD ' + . implode(',' . $crlf . ' ADD ', $constraints) + . $alterFooter; + + $sql_constraints = $this->generateComment( + $crlf, + $sql_constraints, + __('Constraints for dumped tables'), + __('Constraints for table'), + $tableAlias, + $compat + ) . $sql_constraints_query; + } + + // Generating indexes-related query. + $sql_indexes_query = ''; + + if (! empty($indexes)) { + $sql_indexes_query .= $alterHeader . $crlf . ' ADD ' + . implode(',' . $crlf . ' ADD ', $indexes) + . $alterFooter; + } + + if (! empty($indexesFulltext)) { + // InnoDB supports one FULLTEXT index creation at a time. + // So FULLTEXT indexes are created one-by-one after other + // indexes where created. + $sql_indexes_query .= $alterHeader . + ' ADD ' . implode($alterFooter . $alterHeader . ' ADD ', $indexesFulltext) . $alterFooter; + } + + if (! empty($indexes) || ! empty($indexesFulltext)) { + $sql_indexes = $this->generateComment( + $crlf, + $sql_indexes, + __('Indexes for dumped tables'), + __('Indexes for table'), + $tableAlias, + $compat + ) . $sql_indexes_query; + } + + // Generating drop foreign keys-related query. + if (! empty($dropped)) { + $sql_drop_foreign_keys = $alterHeader . $crlf . ' DROP ' + . implode(',' . $crlf . ' DROP ', $dropped) + . $alterFooter; + } + + // Generating auto-increment-related query. + if ($autoIncrement !== [] && $updateIndexesIncrements) { + $sqlAutoIncrementsQuery = $alterHeader . $crlf . ' MODIFY ' + . implode(',' . $crlf . ' MODIFY ', $autoIncrement); + if ( + isset($GLOBALS['sql_auto_increment']) + && ($statement->entityOptions->has('AUTO_INCREMENT') !== false) + ) { + if ( + ! isset($GLOBALS['table_data']) + || (isset($GLOBALS['table_data']) + && in_array($table, $GLOBALS['table_data'])) + ) { + $sqlAutoIncrementsQuery .= ', AUTO_INCREMENT=' + . $statement->entityOptions->has('AUTO_INCREMENT'); + } + } + + $sqlAutoIncrementsQuery .= ';' . $crlf; + + $sql_auto_increments = $this->generateComment( + $crlf, + $sql_auto_increments, + __('AUTO_INCREMENT for dumped tables'), + __('AUTO_INCREMENT for table'), + $tableAlias, + $compat + ) . $sqlAutoIncrementsQuery; + } + + // Removing the `AUTO_INCREMENT` attribute from the `CREATE TABLE` + // too. + if ( + ! empty($statement->entityOptions) + && (empty($GLOBALS['sql_if_not_exists']) + || empty($GLOBALS['sql_auto_increment'])) + ) { + $statement->entityOptions->remove('AUTO_INCREMENT'); + } + + // Rebuilding the query. + $createQuery = $statement->build(); + } + + $schemaCreate .= $createQuery; + } + + // Restoring old mode. + Context::$MODE = $oldMode; + + return $warning . $schemaCreate . ($addSemicolon ? ';' . $crlf : ''); + } + + /** + * Returns $table's comments, relations etc. + * + * @param string $db database name + * @param string $table table name + * @param bool $doRelation whether to include relation comments + * @param bool $doMime whether to include mime comments + * @param array $aliases Aliases of db/table/columns + * + * @return string resulting comments + */ + private function getTableComments( + $db, + $table, + $doRelation = false, + $doMime = false, + array $aliases = [] + ) { + global $sql_backquotes; + + $dbAlias = $db; + $tableAlias = $table; + $this->initAlias($aliases, $dbAlias, $tableAlias); + + $relationParameters = $this->relation->getRelationParameters(); + + $schemaCreate = ''; + + // Check if we can use Relations + [$resRel, $haveRel] = $this->relation->getRelationsAndStatus( + $doRelation && $relationParameters->relationFeature !== null, + $db, + $table + ); + + if ($doMime && $relationParameters->browserTransformationFeature !== null) { + $mimeMap = $this->transformations->getMime($db, $table, true); + if ($mimeMap === null) { + unset($mimeMap); + } + } + + if (isset($mimeMap) && count($mimeMap) > 0) { + $schemaCreate .= $this->possibleCRLF() + . $this->exportComment() + . $this->exportComment( + __('MEDIA TYPES FOR TABLE') . ' ' + . Util::backquoteCompat($table, 'NONE', $sql_backquotes) . ':' + ); + foreach ($mimeMap as $mimeField => $mime) { + $schemaCreate .= $this->exportComment( + ' ' + . Util::backquoteCompat($mimeField, 'NONE', $sql_backquotes) + ) + . $this->exportComment( + ' ' + . Util::backquoteCompat( + $mime['mimetype'], + 'NONE', + $sql_backquotes + ) + ); + } + + $schemaCreate .= $this->exportComment(); + } + + if ($haveRel) { + $schemaCreate .= $this->possibleCRLF() + . $this->exportComment() + . $this->exportComment( + __('RELATIONSHIPS FOR TABLE') . ' ' + . Util::backquoteCompat($tableAlias, 'NONE', $sql_backquotes) + . ':' + ); + + foreach ($resRel as $relField => $rel) { + if ($relField !== 'foreign_keys_data') { + $relFieldAlias = ! empty( + $aliases[$db]['tables'][$table]['columns'][$relField] + ) ? $aliases[$db]['tables'][$table]['columns'][$relField] + : $relField; + $schemaCreate .= $this->exportComment( + ' ' + . Util::backquoteCompat( + $relFieldAlias, + 'NONE', + $sql_backquotes + ) + ) + . $this->exportComment( + ' ' + . Util::backquoteCompat( + $rel['foreign_table'], + 'NONE', + $sql_backquotes + ) + . ' -> ' + . Util::backquoteCompat( + $rel['foreign_field'], + 'NONE', + $sql_backquotes + ) + ); + } else { + foreach ($rel as $oneKey) { + foreach ($oneKey['index_list'] as $index => $field) { + $relFieldAlias = ! empty( + $aliases[$db]['tables'][$table]['columns'][$field] + ) ? $aliases[$db]['tables'][$table]['columns'][$field] + : $field; + $schemaCreate .= $this->exportComment( + ' ' + . Util::backquoteCompat( + $relFieldAlias, + 'NONE', + $sql_backquotes + ) + ) + . $this->exportComment( + ' ' + . Util::backquoteCompat( + $oneKey['ref_table_name'], + 'NONE', + $sql_backquotes + ) + . ' -> ' + . Util::backquoteCompat( + $oneKey['ref_index_list'][$index], + 'NONE', + $sql_backquotes + ) + ); + } + } + } + } + + $schemaCreate .= $this->exportComment(); + } + + return $schemaCreate; + } + + /** + * Outputs a raw query + * + * @param string $errorUrl the url to go back in case of error + * @param string $sqlQuery the rawquery to output + * @param string $crlf the seperator for a file + */ + public function exportRawQuery(string $errorUrl, string $sqlQuery, string $crlf): bool + { + return $this->export->outputHandler($sqlQuery); + } + + /** + * Outputs table's structure + * + * @param string $db database name + * @param string $table table name + * @param string $crlf the end of line sequence + * @param string $errorUrl the url to go back in case of error + * @param string $exportMode 'create_table','triggers','create_view', + * 'stand_in' + * @param string $exportType 'server', 'database', 'table' + * @param bool $relation whether to include relation comments + * @param bool $comments whether to include the pmadb-style column + * comments as comments in the structure; this is + * deprecated but the parameter is left here + * because /export calls exportStructure() + * also for other export types which use this + * parameter + * @param bool $mime whether to include mime comments + * @param bool $dates whether to include creation/update/check dates + * @param array $aliases Aliases of db/table/columns + */ + public function exportStructure( + $db, + $table, + $crlf, + $errorUrl, + $exportMode, + $exportType, + $relation = false, + $comments = false, + $mime = false, + $dates = false, + array $aliases = [] + ): bool { + global $dbi; + + $dbAlias = $db; + $tableAlias = $table; + $this->initAlias($aliases, $dbAlias, $tableAlias); + if (isset($GLOBALS['sql_compatibility'])) { + $compat = $GLOBALS['sql_compatibility']; + } else { + $compat = 'NONE'; + } + + $formattedTableName = Util::backquoteCompat($tableAlias, $compat, isset($GLOBALS['sql_backquotes'])); + $dump = $this->possibleCRLF() + . $this->exportComment(str_repeat('-', 56)) + . $this->possibleCRLF() + . $this->exportComment(); + + switch ($exportMode) { + case 'create_table': + $dump .= $this->exportComment( + __('Table structure for table') . ' ' . $formattedTableName + ); + $dump .= $this->exportComment(); + $dump .= $this->getTableDef($db, $table, $crlf, $errorUrl, $dates, true, false, true, $aliases); + $dump .= $this->getTableComments($db, $table, $relation, $mime, $aliases); + break; + case 'triggers': + $dump = ''; + $delimiter = '$$'; + $triggers = $dbi->getTriggers($db, $table, $delimiter); + if ($triggers) { + $dump .= $this->possibleCRLF() + . $this->exportComment() + . $this->exportComment( + __('Triggers') . ' ' . $formattedTableName + ) + . $this->exportComment(); + $usedAlias = false; + $triggerQuery = ''; + foreach ($triggers as $trigger) { + if (! empty($GLOBALS['sql_drop_table'])) { + $triggerQuery .= $trigger['drop'] . ';' . $crlf; + } + + $triggerQuery .= 'DELIMITER ' . $delimiter . $crlf; + $triggerQuery .= $this->replaceWithAliases($trigger['create'], $aliases, $db, $table, $flag); + if ($flag) { + $usedAlias = true; + } + + $triggerQuery .= 'DELIMITER ;' . $crlf; + } + + // One warning per table. + if ($usedAlias) { + $dump .= $this->exportComment( + __('It appears your table uses triggers;') + ) + . $this->exportComment( + __('alias export may not work reliably in all cases.') + ) + . $this->exportComment(); + } + + $dump .= $triggerQuery; + } + + break; + case 'create_view': + if (empty($GLOBALS['sql_views_as_tables'])) { + $dump .= $this->exportComment( + __('Structure for view') + . ' ' + . $formattedTableName + ) + . $this->exportComment(); + // delete the stand-in table previously created (if any) + if ($exportType !== 'table') { + $dump .= 'DROP TABLE IF EXISTS ' + . Util::backquote($tableAlias) . ';' . $crlf; + } + + $dump .= $this->getTableDef($db, $table, $crlf, $errorUrl, $dates, true, true, true, $aliases); + } else { + $dump .= $this->exportComment( + sprintf( + __('Structure for view %s exported as a table'), + $formattedTableName + ) + ) + . $this->exportComment(); + // delete the stand-in table previously created (if any) + if ($exportType !== 'table') { + $dump .= 'DROP TABLE IF EXISTS ' + . Util::backquote($tableAlias) . ';' . $crlf; + } + + $dump .= $this->getTableDefForView($db, $table, $crlf, true, $aliases); + } + + break; + case 'stand_in': + $dump .= $this->exportComment( + __('Stand-in structure for view') . ' ' . $formattedTableName + ) + . $this->exportComment( + __('(See below for the actual view)') + ) + . $this->exportComment(); + // export a stand-in definition to resolve view dependencies + $dump .= $this->getTableDefStandIn($db, $table, $crlf, $aliases); + } + + // this one is built by getTableDef() to use in table copy/move + // but not in the case of export + unset($GLOBALS['sql_constraints_query']); + + return $this->export->outputHandler($dump); + } + + /** + * Outputs the content of a table in SQL format + * + * @param string $db database name + * @param string $table table name + * @param string $crlf the end of line sequence + * @param string $errorUrl the url to go back in case of error + * @param string $sqlQuery SQL query for obtaining data + * @param array $aliases Aliases of db/table/columns + */ + public function exportData( + $db, + $table, + $crlf, + $errorUrl, + $sqlQuery, + array $aliases = [] + ): bool { + global $current_row, $sql_backquotes, $dbi; + + // Do not export data for merge tables + if ($dbi->getTable($db, $table)->isMerge()) { + return true; + } + + $dbAlias = $db; + $tableAlias = $table; + $this->initAlias($aliases, $dbAlias, $tableAlias); + + if (isset($GLOBALS['sql_compatibility'])) { + $compat = $GLOBALS['sql_compatibility']; + } else { + $compat = 'NONE'; + } + + $formattedTableName = Util::backquoteCompat($tableAlias, $compat, $sql_backquotes); + + // Do not export data for a VIEW, unless asked to export the view as a table + // (For a VIEW, this is called only when exporting a single VIEW) + if ($dbi->getTable($db, $table)->isView() && empty($GLOBALS['sql_views_as_tables'])) { + $head = $this->possibleCRLF() + . $this->exportComment() + . $this->exportComment('VIEW ' . $formattedTableName) + . $this->exportComment(__('Data:') . ' ' . __('None')) + . $this->exportComment() + . $this->possibleCRLF(); + + return $this->export->outputHandler($head); + } + + $result = $dbi->tryQuery($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); + // a possible error: the table has crashed + $tmpError = $dbi->getError(); + if ($tmpError) { + $message = sprintf(__('Error reading data for table %s:'), $db . '.' . $table); + $message .= ' ' . $tmpError; + if (! defined('TESTSUITE')) { + trigger_error($message, E_USER_ERROR); + } + + return $this->export->outputHandler( + $this->exportComment($message) + ); + } + + if ($result === false) { + return true; + } + + $fieldsCnt = $result->numFields(); + + // Get field information + /** @var FieldMetadata[] $fieldsMeta */ + $fieldsMeta = $dbi->getFieldsMeta($result); + + $fieldSet = []; + for ($j = 0; $j < $fieldsCnt; $j++) { + $colAs = $fieldsMeta[$j]->name; + if (! empty($aliases[$db]['tables'][$table]['columns'][$colAs])) { + $colAs = $aliases[$db]['tables'][$table]['columns'][$colAs]; + } + + $fieldSet[$j] = Util::backquoteCompat($colAs, $compat, $sql_backquotes); + } + + if (isset($GLOBALS['sql_type']) && $GLOBALS['sql_type'] === 'UPDATE') { + // update + $schemaInsert = 'UPDATE '; + if (isset($GLOBALS['sql_ignore'])) { + $schemaInsert .= 'IGNORE '; + } + + // avoid EOL blank + $schemaInsert .= Util::backquoteCompat($tableAlias, $compat, $sql_backquotes) . ' SET'; + } else { + // insert or replace + if (isset($GLOBALS['sql_type']) && $GLOBALS['sql_type'] === 'REPLACE') { + $sqlCommand = 'REPLACE'; + } else { + $sqlCommand = 'INSERT'; + } + + // delayed inserts? + if (isset($GLOBALS['sql_delayed'])) { + $insertDelayed = ' DELAYED'; + } else { + $insertDelayed = ''; + } + + // insert ignore? + if (isset($GLOBALS['sql_type'], $GLOBALS['sql_ignore']) && $GLOBALS['sql_type'] === 'INSERT') { + $insertDelayed .= ' IGNORE'; + } + + //truncate table before insert + if (isset($GLOBALS['sql_truncate']) && $GLOBALS['sql_truncate'] && $sqlCommand === 'INSERT') { + $truncate = 'TRUNCATE TABLE ' + . Util::backquoteCompat($tableAlias, $compat, $sql_backquotes) . ';'; + $truncatehead = $this->possibleCRLF() + . $this->exportComment() + . $this->exportComment( + __('Truncate table before insert') . ' ' + . $formattedTableName + ) + . $this->exportComment() + . $crlf; + $this->export->outputHandler($truncatehead); + $this->export->outputHandler($truncate); + } + + // scheme for inserting fields + if ($GLOBALS['sql_insert_syntax'] === 'complete' || $GLOBALS['sql_insert_syntax'] === 'both') { + $fields = implode(', ', $fieldSet); + $schemaInsert = $sqlCommand . $insertDelayed . ' INTO ' + . Util::backquoteCompat($tableAlias, $compat, $sql_backquotes) + // avoid EOL blank + . ' (' . $fields . ') VALUES'; + } else { + $schemaInsert = $sqlCommand . $insertDelayed . ' INTO ' + . Util::backquoteCompat($tableAlias, $compat, $sql_backquotes) + . ' VALUES'; + } + } + + //\x08\\x09, not required + $current_row = 0; + $querySize = 0; + if ( + ($GLOBALS['sql_insert_syntax'] === 'extended' + || $GLOBALS['sql_insert_syntax'] === 'both') + && (! isset($GLOBALS['sql_type']) + || $GLOBALS['sql_type'] !== 'UPDATE') + ) { + $separator = ','; + $schemaInsert .= $crlf; + } else { + $separator = ';'; + } + + while ($row = $result->fetchRow()) { + if ($current_row == 0) { + $head = $this->possibleCRLF() + . $this->exportComment() + . $this->exportComment( + __('Dumping data for table') . ' ' + . $formattedTableName + ) + . $this->exportComment() + . $crlf; + if (! $this->export->outputHandler($head)) { + return false; + } + } + + // We need to SET IDENTITY_INSERT ON for MSSQL + if ( + isset($GLOBALS['sql_compatibility']) + && $GLOBALS['sql_compatibility'] === 'MSSQL' + && $current_row == 0 + ) { + if ( + ! $this->export->outputHandler( + 'SET IDENTITY_INSERT ' + . Util::backquoteCompat( + $tableAlias, + $compat, + $sql_backquotes + ) + . ' ON ;' . $crlf + ) + ) { + return false; + } + } + + $current_row++; + $values = []; + for ($j = 0; $j < $fieldsCnt; $j++) { + // NULL + if (! isset($row[$j])) { + $values[] = 'NULL'; + } elseif ( + $fieldsMeta[$j]->isNumeric + && ! $fieldsMeta[$j]->isMappedTypeTimestamp + && ! $fieldsMeta[$j]->isBlob + ) { + // a number + // timestamp is numeric on some MySQL 4.1, BLOBs are + // sometimes numeric + $values[] = $row[$j]; + } elseif ($fieldsMeta[$j]->isBinary && isset($GLOBALS['sql_hex_for_binary'])) { + // a true BLOB + // - mysqldump only generates hex data when the --hex-blob + // option is used, for fields having the binary attribute + // no hex is generated + // - a TEXT field returns type blob but a real blob + // returns also the 'binary' flag + + // empty blobs need to be different, but '0' is also empty + // :-( + if (empty($row[$j]) && $row[$j] != '0') { + $values[] = '\'\''; + } else { + $values[] = '0x' . bin2hex($row[$j]); + } + } elseif ($fieldsMeta[$j]->isMappedTypeBit) { + // detection of 'bit' works only on mysqli extension + $values[] = "b'" . $dbi->escapeString( + Util::printableBitValue( + (int) $row[$j], + (int) $fieldsMeta[$j]->length + ) + ) + . "'"; + } elseif ($fieldsMeta[$j]->isMappedTypeGeometry) { + // export GIS types as hex + $values[] = '0x' . bin2hex($row[$j]); + } elseif (! empty($GLOBALS['exporting_metadata']) && $row[$j] === '@LAST_PAGE') { + $values[] = '@LAST_PAGE'; + } else { + // something else -> treat as a string + $values[] = '\'' + . $dbi->escapeString($row[$j]) + . '\''; + } + } + + // should we make update? + if (isset($GLOBALS['sql_type']) && $GLOBALS['sql_type'] === 'UPDATE') { + $insertLine = $schemaInsert; + for ($i = 0; $i < $fieldsCnt; $i++) { + if ($i == 0) { + $insertLine .= ' '; + } + + if ($i > 0) { + // avoid EOL blank + $insertLine .= ','; + } + + $insertLine .= $fieldSet[$i] . ' = ' . $values[$i]; + } + + [$tmpUniqueCondition, $tmpClauseIsUnique] = Util::getUniqueCondition( + $fieldsCnt, + $fieldsMeta, + $row + ); + $insertLine .= ' WHERE ' . $tmpUniqueCondition; + unset($tmpUniqueCondition, $tmpClauseIsUnique); + } else { + // Extended inserts case + if ($GLOBALS['sql_insert_syntax'] === 'extended' || $GLOBALS['sql_insert_syntax'] === 'both') { + if ($current_row == 1) { + $insertLine = $schemaInsert . '(' + . implode(', ', $values) . ')'; + } else { + $insertLine = '(' . implode(', ', $values) . ')'; + $insertLineSize = mb_strlen($insertLine); + $sqlMaxSize = $GLOBALS['sql_max_query_size']; + if (isset($sqlMaxSize) && $sqlMaxSize > 0 && $querySize + $insertLineSize > $sqlMaxSize) { + if (! $this->export->outputHandler(';' . $crlf)) { + return false; + } + + $querySize = 0; + $current_row = 1; + $insertLine = $schemaInsert . $insertLine; + } + } + + $querySize += mb_strlen($insertLine); + // Other inserts case + } else { + $insertLine = $schemaInsert + . '(' . implode(', ', $values) . ')'; + } + } + + unset($values); + + if (! $this->export->outputHandler(($current_row == 1 ? '' : $separator . $crlf) . $insertLine)) { + return false; + } + } + + if ($current_row > 0) { + if (! $this->export->outputHandler(';' . $crlf)) { + return false; + } + } + + // We need to SET IDENTITY_INSERT OFF for MSSQL + if (isset($GLOBALS['sql_compatibility']) && $GLOBALS['sql_compatibility'] === 'MSSQL' && $current_row > 0) { + $outputSucceeded = $this->export->outputHandler( + $crlf . 'SET IDENTITY_INSERT ' + . Util::backquoteCompat( + $tableAlias, + $compat, + $sql_backquotes + ) + . ' OFF;' . $crlf + ); + if (! $outputSucceeded) { + return false; + } + } + + return true; + } + + /** + * Make a create table statement compatible with MSSQL + * + * @param string $createQuery MySQL create table statement + * + * @return string MSSQL compatible create table statement + */ + private function makeCreateTableMSSQLCompatible($createQuery) + { + // In MSSQL + // 1. No 'IF NOT EXISTS' in CREATE TABLE + // 2. DATE field doesn't exists, we will use DATETIME instead + // 3. UNSIGNED attribute doesn't exist + // 4. No length on INT, TINYINT, SMALLINT, BIGINT and no precision on + // FLOAT fields + // 5. No KEY and INDEX inside CREATE TABLE + // 6. DOUBLE field doesn't exists, we will use FLOAT instead + + $createQuery = (string) preg_replace('/^CREATE TABLE IF NOT EXISTS/', 'CREATE TABLE', (string) $createQuery); + // first we need to replace all lines ended with '" DATE ...,\n' + // last preg_replace preserve us from situation with date text + // inside DEFAULT field value + $createQuery = (string) preg_replace( + "/\" date DEFAULT NULL(,)?\n/", + '" datetime DEFAULT NULL$1' . "\n", + $createQuery + ); + $createQuery = (string) preg_replace("/\" date NOT NULL(,)?\n/", '" datetime NOT NULL$1' . "\n", $createQuery); + $createQuery = (string) preg_replace( + '/" date NOT NULL DEFAULT \'([^\'])/', + '" datetime NOT NULL DEFAULT \'$1', + $createQuery + ); + + // next we need to replace all lines ended with ') UNSIGNED ...,' + // last preg_replace preserve us from situation with unsigned text + // inside DEFAULT field value + $createQuery = (string) preg_replace("/\) unsigned NOT NULL(,)?\n/", ') NOT NULL$1' . "\n", $createQuery); + $createQuery = (string) preg_replace( + "/\) unsigned DEFAULT NULL(,)?\n/", + ') DEFAULT NULL$1' . "\n", + $createQuery + ); + $createQuery = (string) preg_replace( + '/\) unsigned NOT NULL DEFAULT \'([^\'])/', + ') NOT NULL DEFAULT \'$1', + $createQuery + ); + + // we need to replace all lines ended with + // '" INT|TINYINT([0-9]{1,}) ...,' last preg_replace preserve us + // from situation with int([0-9]{1,}) text inside DEFAULT field + // value + $createQuery = (string) preg_replace( + '/" (int|tinyint|smallint|bigint)\([0-9]+\) DEFAULT NULL(,)?\n/', + '" $1 DEFAULT NULL$2' . "\n", + $createQuery + ); + $createQuery = (string) preg_replace( + '/" (int|tinyint|smallint|bigint)\([0-9]+\) NOT NULL(,)?\n/', + '" $1 NOT NULL$2' . "\n", + $createQuery + ); + $createQuery = (string) preg_replace( + '/" (int|tinyint|smallint|bigint)\([0-9]+\) NOT NULL DEFAULT \'([^\'])/', + '" $1 NOT NULL DEFAULT \'$2', + $createQuery + ); + + // we need to replace all lines ended with + // '" FLOAT|DOUBLE([0-9,]{1,}) ...,' + // last preg_replace preserve us from situation with + // float([0-9,]{1,}) text inside DEFAULT field value + $createQuery = (string) preg_replace( + '/" (float|double)(\([0-9]+,[0-9,]+\))? DEFAULT NULL(,)?\n/', + '" float DEFAULT NULL$3' . "\n", + $createQuery + ); + $createQuery = (string) preg_replace( + '/" (float|double)(\([0-9,]+,[0-9,]+\))? NOT NULL(,)?\n/', + '" float NOT NULL$3' . "\n", + $createQuery + ); + + return (string) preg_replace( + '/" (float|double)(\([0-9,]+,[0-9,]+\))? NOT NULL DEFAULT \'([^\'])/', + '" float NOT NULL DEFAULT \'$3', + $createQuery + ); + + // @todo remove indexes from CREATE TABLE + } + + /** + * replaces db/table/column names with their aliases + * + * @param string $sqlQuery SQL query in which aliases are to be substituted + * @param array $aliases Alias information for db/table/column + * @param string $db the database name + * @param string $table the tablename + * @param string $flag the flag denoting whether any replacement was done + * + * @return string query replaced with aliases + */ + public function replaceWithAliases( + $sqlQuery, + array $aliases, + $db, + $table = '', + &$flag = null + ) { + $flag = false; + + /** + * The parser of this query. + */ + $parser = new Parser($sqlQuery); + + if (empty($parser->statements[0])) { + return $sqlQuery; + } + + /** + * The statement that represents the query. + * + * @var CreateStatement $statement + */ + $statement = $parser->statements[0]; + + /** + * Old database name. + */ + $oldDatabase = $db; + + // Replacing aliases in `CREATE TABLE` statement. + if ($statement->options->has('TABLE')) { + // Extracting the name of the old database and table from the + // statement to make sure the parameters are correct. + if (! empty($statement->name->database)) { + $oldDatabase = $statement->name->database; + } + + /** + * Old table name. + */ + $oldTable = $statement->name->table; + + // Finding the aliased database name. + // The database might be empty so we have to add a few checks. + $newDatabase = null; + if (! empty($statement->name->database)) { + $newDatabase = $statement->name->database; + if (! empty($aliases[$oldDatabase]['alias'])) { + $newDatabase = $aliases[$oldDatabase]['alias']; + } + } + + // Finding the aliases table name. + $newTable = $oldTable; + if (! empty($aliases[$oldDatabase]['tables'][$oldTable]['alias'])) { + $newTable = $aliases[$oldDatabase]['tables'][$oldTable]['alias']; + } + + // Replacing new values. + if (($statement->name->database !== $newDatabase) || ($statement->name->table !== $newTable)) { + $statement->name->database = $newDatabase; + $statement->name->table = $newTable; + $statement->name->expr = ''; // Force rebuild. + $flag = true; + } + + /** @var CreateDefinition[] $fields */ + $fields = $statement->fields; + foreach ($fields as $field) { + // Column name. + if (! empty($field->type)) { + if (! empty($aliases[$oldDatabase]['tables'][$oldTable]['columns'][$field->name])) { + $field->name = $aliases[$oldDatabase]['tables'][$oldTable]['columns'][$field->name]; + $flag = true; + } + } + + // Key's columns. + if (! empty($field->key)) { + foreach ($field->key->columns as $key => $column) { + if (! isset($column['name'])) { + // In case the column has no name field + continue; + } + + if (empty($aliases[$oldDatabase]['tables'][$oldTable]['columns'][$column['name']])) { + continue; + } + + $columnAliases = $aliases[$oldDatabase]['tables'][$oldTable]['columns']; + $field->key->columns[$key]['name'] = $columnAliases[$column['name']]; + $flag = true; + } + } + + // References. + if (empty($field->references)) { + continue; + } + + $refTable = $field->references->table->table; + // Replacing table. + if (! empty($aliases[$oldDatabase]['tables'][$refTable]['alias'])) { + $field->references->table->table = $aliases[$oldDatabase]['tables'][$refTable]['alias']; + $field->references->table->expr = ''; + $flag = true; + } + + // Replacing column names. + foreach ($field->references->columns as $key => $column) { + if (empty($aliases[$oldDatabase]['tables'][$refTable]['columns'][$column])) { + continue; + } + + $field->references->columns[$key] = $aliases[$oldDatabase]['tables'][$refTable]['columns'][$column]; + $flag = true; + } + } + } elseif ($statement->options->has('TRIGGER')) { + // Extracting the name of the old database and table from the + // statement to make sure the parameters are correct. + if (! empty($statement->table->database)) { + $oldDatabase = $statement->table->database; + } + + /** + * Old table name. + */ + $oldTable = $statement->table->table; + + if (! empty($aliases[$oldDatabase]['tables'][$oldTable]['alias'])) { + $statement->table->table = $aliases[$oldDatabase]['tables'][$oldTable]['alias']; + $statement->table->expr = ''; // Force rebuild. + $flag = true; + } + } + + if ( + $statement->options->has('TRIGGER') + || $statement->options->has('PROCEDURE') + || $statement->options->has('FUNCTION') + || $statement->options->has('VIEW') + ) { + // Replacing the body. + for ($i = 0, $count = count((array) $statement->body); $i < $count; ++$i) { + + /** + * Token parsed at this moment. + * + * @var Token $token + */ + $token = $statement->body[$i]; + + // Replacing only symbols (that are not variables) and unknown + // identifiers. + $isSymbol = $token->type === Token::TYPE_SYMBOL; + $isKeyword = $token->type === Token::TYPE_KEYWORD; + $isNone = $token->type === Token::TYPE_NONE; + $replaceToken = $isSymbol + && (! ($token->flags & Token::FLAG_SYMBOL_VARIABLE)) + || ($isKeyword + && (! ($token->flags & Token::FLAG_KEYWORD_RESERVED)) + || $isNone); + + if (! $replaceToken) { + continue; + } + + $alias = $this->getAlias($aliases, $token->value); + if (empty($alias)) { + continue; + } + + // Replacing the token. + $token->token = Context::escape($alias); + $flag = true; + } + } + + return $statement->build(); + } + + /** + * Generate comment + * + * @param string $crlf Carriage return character + * @param string|null $sqlStatement SQL statement + * @param string $comment1 Comment for dumped table + * @param string $comment2 Comment for current table + * @param string $tableAlias Table alias + * @param string $compat Compatibility mode + * + * @return string + */ + protected function generateComment( + $crlf, + ?string $sqlStatement, + $comment1, + $comment2, + $tableAlias, + $compat + ) { + if (! isset($sqlStatement)) { + if (isset($GLOBALS['no_constraints_comments'])) { + $sqlStatement = ''; + } else { + $sqlStatement = $crlf + . $this->exportComment() + . $this->exportComment($comment1) + . $this->exportComment(); + } + } + + // comments for current table + if (! isset($GLOBALS['no_constraints_comments'])) { + $sqlStatement .= $crlf + . $this->exportComment() + . $this->exportComment( + $comment2 . ' ' . Util::backquoteCompat( + $tableAlias, + $compat, + isset($GLOBALS['sql_backquotes']) + ) + ) + . $this->exportComment(); + } + + return $sqlStatement; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportTexytext.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportTexytext.php new file mode 100644 index 0000000..80008ea --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportTexytext.php @@ -0,0 +1,625 @@ +setText('Texy! text'); + $exportPluginProperties->setExtension('txt'); + $exportPluginProperties->setMimeType('text/plain'); + $exportPluginProperties->setOptionsText(__('Options')); + + // create the root group that will be the options field for + // $exportPluginProperties + // this will be shown as "Format specific options" + $exportSpecificOptions = new OptionsPropertyRootGroup('Format Specific Options'); + + // what to dump (structure/data/both) main group + $dumpWhat = new OptionsPropertyMainGroup( + 'general_opts', + __('Dump table') + ); + // create primary items and add them to the group + $leaf = new RadioPropertyItem('structure_or_data'); + $leaf->setValues( + [ + 'structure' => __('structure'), + 'data' => __('data'), + 'structure_and_data' => __('structure and data'), + ] + ); + $dumpWhat->addProperty($leaf); + // add the main group to the root group + $exportSpecificOptions->addProperty($dumpWhat); + + // data options main group + $dataOptions = new OptionsPropertyMainGroup( + 'data', + __('Data dump options') + ); + $dataOptions->setForce('structure'); + // create primary items and add them to the group + $leaf = new BoolPropertyItem( + 'columns', + __('Put columns names in the first row') + ); + $dataOptions->addProperty($leaf); + $leaf = new TextPropertyItem( + 'null', + __('Replace NULL with:') + ); + $dataOptions->addProperty($leaf); + // add the main group to the root group + $exportSpecificOptions->addProperty($dataOptions); + + // set the options for the export plugin property item + $exportPluginProperties->setOptions($exportSpecificOptions); + + return $exportPluginProperties; + } + + /** + * Outputs export header + */ + public function exportHeader(): bool + { + return true; + } + + /** + * Outputs export footer + */ + public function exportFooter(): bool + { + return true; + } + + /** + * Outputs database header + * + * @param string $db Database name + * @param string $dbAlias Alias of db + */ + public function exportDBHeader($db, $dbAlias = ''): bool + { + if (empty($dbAlias)) { + $dbAlias = $db; + } + + return $this->export->outputHandler( + '===' . __('Database') . ' ' . $dbAlias . "\n\n" + ); + } + + /** + * Outputs database footer + * + * @param string $db Database name + */ + public function exportDBFooter($db): bool + { + return true; + } + + /** + * Outputs CREATE DATABASE statement + * + * @param string $db Database name + * @param string $exportType 'server', 'database', 'table' + * @param string $dbAlias Aliases of db + */ + public function exportDBCreate($db, $exportType, $dbAlias = ''): bool + { + return true; + } + + /** + * Outputs the content of a table in NHibernate format + * + * @param string $db database name + * @param string $table table name + * @param string $crlf the end of line sequence + * @param string $errorUrl the url to go back in case of error + * @param string $sqlQuery SQL query for obtaining data + * @param array $aliases Aliases of db/table/columns + */ + public function exportData( + $db, + $table, + $crlf, + $errorUrl, + $sqlQuery, + array $aliases = [] + ): bool { + global $what, $dbi; + + $db_alias = $db; + $table_alias = $table; + $this->initAlias($aliases, $db_alias, $table_alias); + + if ( + ! $this->export->outputHandler( + $table_alias != '' + ? '== ' . __('Dumping data for table') . ' ' . $table_alias . "\n\n" + : '==' . __('Dumping data for query result') . "\n\n" + ) + ) { + return false; + } + + // Gets the data from the database + $result = $dbi->query($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); + $fields_cnt = $result->numFields(); + + // If required, get fields name at the first line + if (isset($GLOBALS[$what . '_columns'])) { + $text_output = "|------\n"; + foreach ($result->getFieldNames() as $col_as) { + if (! empty($aliases[$db]['tables'][$table]['columns'][$col_as])) { + $col_as = $aliases[$db]['tables'][$table]['columns'][$col_as]; + } + + $text_output .= '|' + . htmlspecialchars(stripslashes($col_as)); + } + + $text_output .= "\n|------\n"; + if (! $this->export->outputHandler($text_output)) { + return false; + } + } + + // Format the data + while ($row = $result->fetchRow()) { + $text_output = ''; + for ($j = 0; $j < $fields_cnt; $j++) { + if (! isset($row[$j])) { + $value = $GLOBALS[$what . '_null']; + } elseif ($row[$j] == '0' || $row[$j] != '') { + $value = $row[$j]; + } else { + $value = ' '; + } + + $text_output .= '|' + . str_replace( + '|', + '|', + htmlspecialchars($value) + ); + } + + $text_output .= "\n"; + if (! $this->export->outputHandler($text_output)) { + return false; + } + } + + return true; + } + + /** + * Outputs result raw query in TexyText format + * + * @param string $errorUrl the url to go back in case of error + * @param string $sqlQuery the rawquery to output + * @param string $crlf the end of line sequence + */ + public function exportRawQuery(string $errorUrl, string $sqlQuery, string $crlf): bool + { + return $this->exportData('', '', $crlf, $errorUrl, $sqlQuery); + } + + /** + * Returns a stand-in CREATE definition to resolve view dependencies + * + * @param string $db the database name + * @param string $view the view name + * @param string $crlf the end of line sequence + * @param array $aliases Aliases of db/table/columns + * + * @return string resulting definition + */ + public function getTableDefStandIn($db, $view, $crlf, $aliases = []) + { + global $dbi; + + $text_output = ''; + + /** + * Get the unique keys in the table + */ + $unique_keys = []; + $keys = $dbi->getTableIndexes($db, $view); + foreach ($keys as $key) { + if ($key['Non_unique'] != 0) { + continue; + } + + $unique_keys[] = $key['Column_name']; + } + + /** + * Gets fields properties + */ + $dbi->selectDb($db); + + /** + * Displays the table structure + */ + + $text_output .= "|------\n" + . '|' . __('Column') + . '|' . __('Type') + . '|' . __('Null') + . '|' . __('Default') + . "\n|------\n"; + + $columns = $dbi->getColumns($db, $view); + foreach ($columns as $column) { + $col_as = $column['Field'] ?? null; + if (! empty($aliases[$db]['tables'][$view]['columns'][$col_as])) { + $col_as = $aliases[$db]['tables'][$view]['columns'][$col_as]; + } + + $text_output .= $this->formatOneColumnDefinition($column, $unique_keys, $col_as); + $text_output .= "\n"; + } + + return $text_output; + } + + /** + * Returns $table's CREATE definition + * + * @param string $db the database name + * @param string $table the table name + * @param string $crlf the end of line sequence + * @param string $error_url the url to go back in case of error + * @param bool $do_relation whether to include relation comments + * @param bool $do_comments whether to include the pmadb-style column + * comments as comments in the structure; + * this is deprecated but the parameter is + * left here because /export calls + * $this->exportStructure() also for other + * export types which use this parameter + * @param bool $do_mime whether to include mime comments + * @param bool $show_dates whether to include creation/update/check dates + * @param bool $add_semicolon whether to add semicolon and end-of-line + * at the end + * @param bool $view whether we're handling a view + * @param array $aliases Aliases of db/table/columns + * + * @return string resulting schema + */ + public function getTableDef( + $db, + $table, + $crlf, + $error_url, + $do_relation, + $do_comments, + $do_mime, + $show_dates = false, + $add_semicolon = true, + $view = false, + array $aliases = [] + ) { + global $dbi; + + $relationParameters = $this->relation->getRelationParameters(); + + $text_output = ''; + + /** + * Get the unique keys in the table + */ + $unique_keys = []; + $keys = $dbi->getTableIndexes($db, $table); + foreach ($keys as $key) { + if ($key['Non_unique'] != 0) { + continue; + } + + $unique_keys[] = $key['Column_name']; + } + + /** + * Gets fields properties + */ + $dbi->selectDb($db); + + // Check if we can use Relations + [$res_rel, $have_rel] = $this->relation->getRelationsAndStatus( + $do_relation && $relationParameters->relationFeature !== null, + $db, + $table + ); + + /** + * Displays the table structure + */ + + $text_output .= "|------\n"; + $text_output .= '|' . __('Column'); + $text_output .= '|' . __('Type'); + $text_output .= '|' . __('Null'); + $text_output .= '|' . __('Default'); + if ($do_relation && $have_rel) { + $text_output .= '|' . __('Links to'); + } + + if ($do_comments) { + $text_output .= '|' . __('Comments'); + $comments = $this->relation->getComments($db, $table); + } + + if ($do_mime && $relationParameters->browserTransformationFeature !== null) { + $text_output .= '|' . __('Media type'); + $mime_map = $this->transformations->getMime($db, $table, true); + } + + $text_output .= "\n|------\n"; + + $columns = $dbi->getColumns($db, $table); + foreach ($columns as $column) { + $col_as = $column['Field']; + if (! empty($aliases[$db]['tables'][$table]['columns'][$col_as])) { + $col_as = $aliases[$db]['tables'][$table]['columns'][$col_as]; + } + + $text_output .= $this->formatOneColumnDefinition($column, $unique_keys, $col_as); + $field_name = $column['Field']; + if ($do_relation && $have_rel) { + $text_output .= '|' . htmlspecialchars( + $this->getRelationString( + $res_rel, + $field_name, + $db, + $aliases + ) + ); + } + + if ($do_comments && $relationParameters->columnCommentsFeature !== null) { + $text_output .= '|' + . (isset($comments[$field_name]) + ? htmlspecialchars($comments[$field_name]) + : ''); + } + + if ($do_mime && $relationParameters->browserTransformationFeature !== null) { + $text_output .= '|' + . (isset($mime_map[$field_name]) + ? htmlspecialchars( + str_replace('_', '/', $mime_map[$field_name]['mimetype']) + ) + : ''); + } + + $text_output .= "\n"; + } + + return $text_output; + } + + /** + * Outputs triggers + * + * @param string $db database name + * @param string $table table name + * + * @return string Formatted triggers list + */ + public function getTriggers($db, $table) + { + global $dbi; + + $dump = "|------\n"; + $dump .= '|' . __('Name'); + $dump .= '|' . __('Time'); + $dump .= '|' . __('Event'); + $dump .= '|' . __('Definition'); + $dump .= "\n|------\n"; + + $triggers = $dbi->getTriggers($db, $table); + + foreach ($triggers as $trigger) { + $dump .= '|' . $trigger['name']; + $dump .= '|' . $trigger['action_timing']; + $dump .= '|' . $trigger['event_manipulation']; + $dump .= '|' . + str_replace( + '|', + '|', + htmlspecialchars($trigger['definition']) + ); + $dump .= "\n"; + } + + return $dump; + } + + /** + * Outputs table's structure + * + * @param string $db database name + * @param string $table table name + * @param string $crlf the end of line sequence + * @param string $errorUrl the url to go back in case of error + * @param string $exportMode 'create_table', 'triggers', 'create_view', + * 'stand_in' + * @param string $exportType 'server', 'database', 'table' + * @param bool $do_relation whether to include relation comments + * @param bool $do_comments whether to include the pmadb-style column + * comments as comments in the structure; + * this is deprecated but the parameter is + * left here because /export calls + * $this->exportStructure() also for other + * export types which use this parameter + * @param bool $do_mime whether to include mime comments + * @param bool $dates whether to include creation/update/check dates + * @param array $aliases Aliases of db/table/columns + */ + public function exportStructure( + $db, + $table, + $crlf, + $errorUrl, + $exportMode, + $exportType, + $do_relation = false, + $do_comments = false, + $do_mime = false, + $dates = false, + array $aliases = [] + ): bool { + global $dbi; + + $db_alias = $db; + $table_alias = $table; + $this->initAlias($aliases, $db_alias, $table_alias); + $dump = ''; + + switch ($exportMode) { + case 'create_table': + $dump .= '== ' . __('Table structure for table') . ' ' + . $table_alias . "\n\n"; + $dump .= $this->getTableDef( + $db, + $table, + $crlf, + $errorUrl, + $do_relation, + $do_comments, + $do_mime, + $dates, + true, + false, + $aliases + ); + break; + case 'triggers': + $dump = ''; + $triggers = $dbi->getTriggers($db, $table); + if ($triggers) { + $dump .= '== ' . __('Triggers') . ' ' . $table_alias . "\n\n"; + $dump .= $this->getTriggers($db, $table); + } + + break; + case 'create_view': + $dump .= '== ' . __('Structure for view') . ' ' . $table_alias . "\n\n"; + $dump .= $this->getTableDef( + $db, + $table, + $crlf, + $errorUrl, + $do_relation, + $do_comments, + $do_mime, + $dates, + true, + true, + $aliases + ); + break; + case 'stand_in': + $dump .= '== ' . __('Stand-in structure for view') + . ' ' . $table . "\n\n"; + // export a stand-in definition to resolve view dependencies + $dump .= $this->getTableDefStandIn($db, $table, $crlf, $aliases); + } + + return $this->export->outputHandler($dump); + } + + /** + * Formats the definition for one column + * + * @param array $column info about this column + * @param array $unique_keys unique keys for this table + * @param string $col_alias Column Alias + * + * @return string Formatted column definition + */ + public function formatOneColumnDefinition( + $column, + $unique_keys, + $col_alias = '' + ) { + if (empty($col_alias)) { + $col_alias = $column['Field']; + } + + $extracted_columnspec = Util::extractColumnSpec($column['Type']); + $type = $extracted_columnspec['print_type']; + if (empty($type)) { + $type = ' '; + } + + if (! isset($column['Default'])) { + if ($column['Null'] !== 'NO') { + $column['Default'] = 'NULL'; + } + } + + $fmt_pre = ''; + $fmt_post = ''; + if (in_array($column['Field'], $unique_keys)) { + $fmt_pre = '**' . $fmt_pre; + $fmt_post .= '**'; + } + + if ($column['Key'] === 'PRI') { + $fmt_pre = '//' . $fmt_pre; + $fmt_post .= '//'; + } + + $definition = '|' + . $fmt_pre . htmlspecialchars($col_alias) . $fmt_post; + $definition .= '|' . htmlspecialchars($type); + $definition .= '|' + . ($column['Null'] == '' || $column['Null'] === 'NO' + ? __('No') : __('Yes')); + $definition .= '|' + . htmlspecialchars($column['Default'] ?? ''); + + return $definition; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportMediawiki.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportMediawiki.php new file mode 100644 index 0000000..17bfd6a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportMediawiki.php @@ -0,0 +1,591 @@ +setAnalyze(false); + if ($GLOBALS['plugin_param'] !== 'table') { + $this->setAnalyze(true); + } + + $importPluginProperties = new ImportPluginProperties(); + $importPluginProperties->setText(__('MediaWiki Table')); + $importPluginProperties->setExtension('txt'); + $importPluginProperties->setMimeType('text/plain'); + $importPluginProperties->setOptionsText(__('Options')); + + return $importPluginProperties; + } + + /** + * Handles the whole import logic + * + * @param array $sql_data 2-element array with sql data + */ + public function doImport(?File $importHandle = null, array &$sql_data = []): void + { + global $error, $timeout_passed, $finished; + + // Defaults for parser + + // The buffer that will be used to store chunks read from the imported file + $buffer = ''; + + // Used as storage for the last part of the current chunk data + // Will be appended to the first line of the next chunk, if there is one + $last_chunk_line = ''; + + // Remembers whether the current buffer line is part of a comment + $inside_comment = false; + // Remembers whether the current buffer line is part of a data comment + $inside_data_comment = false; + // Remembers whether the current buffer line is part of a structure comment + $inside_structure_comment = false; + + // MediaWiki only accepts "\n" as row terminator + $mediawiki_new_line = "\n"; + + // Initialize the name of the current table + $cur_table_name = ''; + + $cur_temp_table_headers = []; + $cur_temp_table = []; + + $in_table_header = false; + + while (! $finished && ! $error && ! $timeout_passed) { + $data = $this->import->getNextChunk($importHandle); + + if ($data === false) { + // Subtract data we didn't handle yet and stop processing + $GLOBALS['offset'] -= mb_strlen($buffer); + break; + } + + if ($data !== true) { + // Append new data to buffer + $buffer = $data; + unset($data); + // Don't parse string if we're not at the end + // and don't have a new line inside + if (! str_contains($buffer, $mediawiki_new_line)) { + continue; + } + } + + // Because of reading chunk by chunk, the first line from the buffer + // contains only a portion of an actual line from the imported file. + // Therefore, we have to append it to the last line from the previous + // chunk. If we are at the first chunk, $last_chunk_line should be empty. + $buffer = $last_chunk_line . $buffer; + + // Process the buffer line by line + $buffer_lines = explode($mediawiki_new_line, $buffer); + + $full_buffer_lines_count = count($buffer_lines); + // If the reading is not finalized, the final line of the current chunk + // will not be complete + if (! $finished) { + $last_chunk_line = $buffer_lines[--$full_buffer_lines_count]; + } + + for ($line_nr = 0; $line_nr < $full_buffer_lines_count; ++$line_nr) { + $cur_buffer_line = trim($buffer_lines[$line_nr]); + + // If the line is empty, go to the next one + if ($cur_buffer_line === '') { + continue; + } + + $first_character = $cur_buffer_line[0]; + $matches = []; + + // Check beginning of comment + if (! strcmp(mb_substr($cur_buffer_line, 0, 4), '')) { + // Only data comments are closed. The structure comments + // will be closed when a data comment begins (in order to + // skip structure tables) + if ($inside_data_comment) { + $inside_data_comment = false; + } + + // End comments that are not related to table structure + if (! $inside_structure_comment) { + $inside_comment = false; + } + } else { + // Check table name + $match_table_name = []; + if (preg_match('/^Table data for `(.*)`$/', $cur_buffer_line, $match_table_name)) { + $cur_table_name = $match_table_name[1]; + $inside_data_comment = true; + + $inside_structure_comment = $this->mngInsideStructComm($inside_structure_comment); + } elseif (preg_match('/^Table structure for `(.*)`$/', $cur_buffer_line, $match_table_name)) { + // The structure comments will be ignored + $inside_structure_comment = true; + } + } + + continue; + } + + if (preg_match('/^\{\|(.*)$/', $cur_buffer_line, $matches)) { + // Check start of table + + // This will store all the column info on all rows from + // the current table read from the buffer + $cur_temp_table = []; + + // Will be used as storage for the current row in the buffer + // Once all its columns are read, it will be added to + // $cur_temp_table and then it will be emptied + $cur_temp_line = []; + + // Helps us differentiate the header columns + // from the normal columns + $in_table_header = false; + // End processing because the current line does not + // contain any column information + } elseif ( + mb_substr($cur_buffer_line, 0, 2) === '|-' + || mb_substr($cur_buffer_line, 0, 2) === '|+' + || mb_substr($cur_buffer_line, 0, 2) === '|}' + ) { + // Check begin row or end table + + // Add current line to the values storage + if (! empty($cur_temp_line)) { + // If the current line contains header cells + // ( marked with '!' ), + // it will be marked as table header + if ($in_table_header) { + // Set the header columns + $cur_temp_table_headers = $cur_temp_line; + } else { + // Normal line, add it to the table + $cur_temp_table[] = $cur_temp_line; + } + } + + // Empty the temporary buffer + $cur_temp_line = []; + + // No more processing required at the end of the table + if (mb_substr($cur_buffer_line, 0, 2) === '|}') { + $current_table = [ + $cur_table_name, + $cur_temp_table_headers, + $cur_temp_table, + ]; + + // Import the current table data into the database + $this->importDataOneTable($current_table, $sql_data); + + // Reset table name + $cur_table_name = ''; + } + // What's after the row tag is now only attributes + } elseif (($first_character === '|') || ($first_character === '!')) { + // Check cell elements + + // Header cells + if ($first_character === '!') { + // Mark as table header, but treat as normal row + $cur_buffer_line = str_replace('!!', '||', $cur_buffer_line); + // Will be used to set $cur_temp_line as table header + $in_table_header = true; + } else { + $in_table_header = false; + } + + // Loop through each table cell + $cells = $this->explodeMarkup($cur_buffer_line); + foreach ($cells as $cell) { + $cell = $this->getCellData($cell); + + // Delete the beginning of the column, if there is one + $cell = trim($cell); + $col_start_chars = [ + '|', + '!', + ]; + foreach ($col_start_chars as $col_start_char) { + $cell = $this->getCellContent($cell, $col_start_char); + } + + // Add the cell to the row + $cur_temp_line[] = $cell; + } + } else { + // If it's none of the above, then the current line has a bad + // format + $message = Message::error( + __('Invalid format of mediawiki input on line:
        %s.') + ); + $message->addParam($cur_buffer_line); + $error = true; + } + } + } + } + + /** + * Imports data from a single table + * + * @param array $table containing all table info: + * $table[0] - string + * containing table name + * $table[1] - array[] of + * table headers $table[2] - + * array[][] of table content + * rows + * @param array $sql_data 2-element array with sql data + * + * @global bool $analyze whether to scan for column types + */ + private function importDataOneTable(array $table, array &$sql_data): void + { + $analyze = $this->getAnalyze(); + if ($analyze) { + // Set the table name + $this->setTableName($table[0]); + + // Set generic names for table headers if they don't exist + $this->setTableHeaders($table[1], $table[2][0]); + + // Create the tables array to be used in Import::buildSql() + $tables = []; + $tables[] = [ + $table[0], + $table[1], + $table[2], + ]; + + // Obtain the best-fit MySQL types for each column + $analyses = []; + $analyses[] = $this->import->analyzeTable($tables[0]); + + $this->executeImportTables($tables, $analyses, $sql_data); + } + + // Commit any possible data in buffers + $this->import->runQuery('', '', $sql_data); + } + + /** + * Sets the table name + * + * @param string $table_name reference to the name of the table + */ + private function setTableName(&$table_name): void + { + global $dbi; + + if (! empty($table_name)) { + return; + } + + $result = $dbi->fetchResult('SHOW TABLES'); + // todo check if the name below already exists + $table_name = 'TABLE ' . (count($result) + 1); + } + + /** + * Set generic names for table headers, if they don't exist + * + * @param array $table_headers reference to the array containing the headers + * of a table + * @param array $table_row array containing the first content row + */ + private function setTableHeaders(array &$table_headers, array $table_row): void + { + if (! empty($table_headers)) { + return; + } + + // The first table row should contain the number of columns + // If they are not set, generic names will be given (COL 1, COL 2, etc) + $num_cols = count($table_row); + for ($i = 0; $i < $num_cols; ++$i) { + $table_headers[$i] = 'COL ' . ($i + 1); + } + } + + /** + * Sets the database name and additional options and calls Import::buildSql() + * Used in PMA_importDataAllTables() and $this->importDataOneTable() + * + * @param array $tables structure: + * array( + * array(table_name, array() column_names, array()() + * rows) + * ) + * @param array $analyses structure: + * $analyses = array( + * array(array() column_types, array() column_sizes) + * ) + * @param array $sql_data 2-element array with sql data + * + * @global string $db name of the database to import in + */ + private function executeImportTables(array &$tables, array &$analyses, array &$sql_data): void + { + global $db; + + // $db_name : The currently selected database name, if applicable + // No backquotes + // $options : An associative array of options + [$db_name, $options] = $this->getDbnameAndOptions($db, 'mediawiki_DB'); + + // Array of SQL strings + // Non-applicable parameters + $create = null; + + // Create and execute necessary SQL statements from data + $this->import->buildSql($db_name, $tables, $analyses, $create, $options, $sql_data); + } + + /** + * Replaces all instances of the '||' separator between delimiters + * in a given string + * + * @param string $replace the string to be replaced with + * @param string $subject the text to be replaced + * + * @return string with replacements + */ + private function delimiterReplace($replace, $subject) + { + // String that will be returned + $cleaned = ''; + // Possible states of current character + $inside_tag = false; + $inside_attribute = false; + // Attributes can be declared with either " or ' + $start_attribute_character = false; + + // The full separator is "||"; + // This remembers if the previous character was '|' + $partial_separator = false; + + // Parse text char by char + for ($i = 0, $iMax = strlen($subject); $i < $iMax; $i++) { + $cur_char = $subject[$i]; + // Check for separators + if ($cur_char === '|') { + // If we're not inside a tag, then this is part of a real separator, + // so we append it to the current segment + if (! $inside_attribute) { + $cleaned .= $cur_char; + if ($partial_separator) { + $inside_tag = false; + $inside_attribute = false; + } + } elseif ($partial_separator) { + // If we are inside a tag, we replace the current char with + // the placeholder and append that to the current segment + $cleaned .= $replace; + } + + // If the previous character was also '|', then this ends a + // full separator. If not, this may be the beginning of one + $partial_separator = ! $partial_separator; + } else { + // If we're inside a tag attribute and the current character is + // not '|', but the previous one was, it means that the single '|' + // was not appended, so we append it now + if ($partial_separator && $inside_attribute) { + $cleaned .= '|'; + } + + // If the char is different from "|", no separator can be formed + $partial_separator = false; + + // any other character should be appended to the current segment + $cleaned .= $cur_char; + + if ($cur_char === '<' && ! $inside_attribute) { + // start of a tag + $inside_tag = true; + } elseif ($cur_char === '>' && ! $inside_attribute) { + // end of a tag + $inside_tag = false; + } elseif (($cur_char === '"' || $cur_char == "'") && $inside_tag) { + // start or end of an attribute + if (! $inside_attribute) { + $inside_attribute = true; + // remember the attribute`s declaration character (" or ') + $start_attribute_character = $cur_char; + } else { + if ($cur_char == $start_attribute_character) { + $inside_attribute = false; + // unset attribute declaration character + $start_attribute_character = false; + } + } + } + } + } + + return $cleaned; + } + + /** + * Separates a string into items, similarly to explode + * Uses the '||' separator (which is standard in the mediawiki format) + * and ignores any instances of it inside markup tags + * Used in parsing buffer lines containing data cells + * + * @param string $text text to be split + * + * @return array + */ + private function explodeMarkup($text) + { + $separator = '||'; + $placeholder = "\x00"; + + // Remove placeholder instances + $text = str_replace($placeholder, '', $text); + + // Replace instances of the separator inside HTML-like + // tags with the placeholder + $cleaned = $this->delimiterReplace($placeholder, $text); + // Explode, then put the replaced separators back in + $items = explode($separator, $cleaned); + foreach ($items as $i => $str) { + $items[$i] = str_replace($placeholder, $separator, $str); + } + + return $items; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Returns true if the table should be analyzed, false otherwise + */ + private function getAnalyze(): bool + { + return $this->analyze; + } + + /** + * Sets to true if the table should be analyzed, false otherwise + * + * @param bool $analyze status + */ + private function setAnalyze($analyze): void + { + $this->analyze = $analyze; + } + + /** + * Get cell + * + * @param string $cell Cell + * + * @return mixed + */ + private function getCellData($cell) + { + // A cell could contain both parameters and data + $cell_data = explode('|', $cell, 2); + + // A '|' inside an invalid link should not + // be mistaken as delimiting cell parameters + if (! str_contains($cell_data[0], '[[')) { + return $cell; + } + + if (count($cell_data) === 1) { + return $cell_data[0]; + } + + return $cell_data[1]; + } + + /** + * Manage $inside_structure_comment + * + * @param bool $inside_structure_comment Value to test + */ + private function mngInsideStructComm($inside_structure_comment): bool + { + // End ignoring structure rows + if ($inside_structure_comment) { + $inside_structure_comment = false; + } + + return $inside_structure_comment; + } + + /** + * Get cell content + * + * @param string $cell Cell + * @param string $col_start_char Start char + * + * @return string + */ + private function getCellContent($cell, $col_start_char) + { + if (mb_strpos($cell, $col_start_char) === 0) { + $cell = trim(mb_substr($cell, 1)); + } + + return $cell; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportSql.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportSql.php new file mode 100644 index 0000000..a881c1f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportSql.php @@ -0,0 +1,193 @@ +setText('SQL'); + $importPluginProperties->setExtension('sql'); + $importPluginProperties->setOptionsText(__('Options')); + + $compats = $dbi->getCompatibilities(); + if (count($compats) > 0) { + $values = []; + foreach ($compats as $val) { + $values[$val] = $val; + } + + // create the root group that will be the options field for + // $importPluginProperties + // this will be shown as "Format specific options" + $importSpecificOptions = new OptionsPropertyRootGroup('Format Specific Options'); + + // general options main group + $generalOptions = new OptionsPropertyMainGroup('general_opts'); + // create primary items and add them to the group + $leaf = new SelectPropertyItem( + 'compatibility', + __('SQL compatibility mode:') + ); + $leaf->setValues($values); + $leaf->setDoc( + [ + 'manual_MySQL_Database_Administration', + 'Server_SQL_mode', + ] + ); + $generalOptions->addProperty($leaf); + $leaf = new BoolPropertyItem( + 'no_auto_value_on_zero', + __('Do not use AUTO_INCREMENT for zero values') + ); + $leaf->setDoc( + [ + 'manual_MySQL_Database_Administration', + 'Server_SQL_mode', + 'sqlmode_no_auto_value_on_zero', + ] + ); + $generalOptions->addProperty($leaf); + + // add the main group to the root group + $importSpecificOptions->addProperty($generalOptions); + // set the options for the import plugin property item + $importPluginProperties->setOptions($importSpecificOptions); + } + + return $importPluginProperties; + } + + /** + * Handles the whole import logic + * + * @param array $sql_data 2-element array with sql data + */ + public function doImport(?File $importHandle = null, array &$sql_data = []): void + { + global $error, $timeout_passed, $dbi; + + // Handle compatibility options. + $this->setSQLMode($dbi, $_REQUEST); + + $bq = new BufferedQuery(); + if (isset($_POST['sql_delimiter'])) { + $bq->setDelimiter($_POST['sql_delimiter']); + } + + /** + * Will be set in Import::getNextChunk(). + * + * @global bool $GLOBALS ['finished'] + */ + $GLOBALS['finished'] = false; + + while (! $error && (! $timeout_passed)) { + // Getting the first statement, the remaining data and the last + // delimiter. + $statement = $bq->extract(); + + // If there is no full statement, we are looking for more data. + if (empty($statement)) { + // Importing new data. + $newData = $this->import->getNextChunk($importHandle); + + // Subtract data we didn't handle yet and stop processing. + if ($newData === false) { + $GLOBALS['offset'] -= mb_strlen($bq->query); + break; + } + + // Checking if the input buffer has finished. + if ($newData === true) { + $GLOBALS['finished'] = true; + break; + } + + // Convert CR (but not CRLF) to LF otherwise all queries may + // not get executed on some platforms. + $bq->query .= preg_replace("/\r($|[^\n])/", "\n$1", $newData); + + continue; + } + + // Executing the query. + $this->import->runQuery($statement, $statement, $sql_data); + } + + // Extracting remaining statements. + while (! $error && ! $timeout_passed && ! empty($bq->query)) { + $statement = $bq->extract(true); + if (empty($statement)) { + continue; + } + + $this->import->runQuery($statement, $statement, $sql_data); + } + + // Finishing. + $this->import->runQuery('', '', $sql_data); + } + + /** + * Handle compatibility options + * + * @param DatabaseInterface $dbi Database interface + * @param array $request Request array + */ + private function setSQLMode($dbi, array $request): void + { + $sql_modes = []; + if (isset($request['sql_compatibility']) && $request['sql_compatibility'] !== 'NONE') { + $sql_modes[] = $request['sql_compatibility']; + } + + if (isset($request['sql_no_auto_value_on_zero'])) { + $sql_modes[] = 'NO_AUTO_VALUE_ON_ZERO'; + } + + if (count($sql_modes) <= 0) { + return; + } + + $dbi->tryQuery( + 'SET SQL_MODE="' . implode(',', $sql_modes) . '"' + ); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ShapeFileImport.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ShapeFileImport.php new file mode 100644 index 0000000..ad33377 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ShapeFileImport.php @@ -0,0 +1,39 @@ + $id, + 'finished' => false, + 'percent' => 0, + 'total' => 0, + 'complete' => 0, + 'plugin' => self::getIdKey(), + ]; + } + + return $_SESSION[$SESSION_KEY][$id]; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/Upload/UploadProgress.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/Upload/UploadProgress.php new file mode 100644 index 0000000..fc971e1 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/Upload/UploadProgress.php @@ -0,0 +1,101 @@ + $id, + 'finished' => false, + 'percent' => 0, + 'total' => 0, + 'complete' => 0, + 'plugin' => self::getIdKey(), + ]; + } + + $ret = $_SESSION[$SESSION_KEY][$id]; + + if (! Ajax::progressCheck() || $ret['finished']) { + return $ret; + } + + $status = null; + // @see https://pecl.php.net/package/uploadprogress + if (function_exists('uploadprogress_get_info')) { + // phpcs:ignore SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly.ReferenceViaFullyQualifiedName + $status = \uploadprogress_get_info($id); + } + + if ($status) { + $ret['finished'] = false; + + if ($status['bytes_uploaded'] == $status['bytes_total']) { + $ret['finished'] = true; + } + + $ret['total'] = $status['bytes_total']; + $ret['complete'] = $status['bytes_uploaded']; + + if ($ret['total'] > 0) { + $ret['percent'] = $ret['complete'] / $ret['total'] * 100; + } + } else { + $ret = [ + 'id' => $id, + 'finished' => true, + 'percent' => 100, + 'total' => $ret['total'], + 'complete' => $ret['total'], + 'plugin' => self::getIdKey(), + ]; + } + + $_SESSION[$SESSION_KEY][$id] = $ret; + + return $ret; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/ImportPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/ImportPlugin.php new file mode 100644 index 0000000..4573d09 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/ImportPlugin.php @@ -0,0 +1,97 @@ +import = new Import(); + $this->init(); + $this->properties = $this->setProperties(); + } + + /** + * Plugin specific initializations. + */ + protected function init(): void + { + } + + /** + * Handles the whole import logic + * + * @param array $sql_data 2-element array with sql data + */ + abstract public function doImport(?File $importHandle = null, array &$sql_data = []): void; + + /** + * Gets the import specific format plugin properties + * + * @return ImportPluginProperties + */ + public function getProperties(): PluginPropertyItem + { + return $this->properties; + } + + /** + * Sets the export plugins properties and is implemented by each import plugin. + */ + abstract protected function setProperties(): ImportPluginProperties; + + /** + * Define DB name and options + * + * @param string $currentDb DB + * @param string $defaultDb Default DB name + * + * @return array DB name and options (an associative array of options) + */ + protected function getDbnameAndOptions($currentDb, $defaultDb) + { + $db_name = $defaultDb; + $options = null; + + if (strlen((string) $currentDb) > 0) { + $db_name = $currentDb; + $options = ['create_db' => false]; + } + + return [ + $db_name, + $options, + ]; + } + + public function isAvailable(): bool + { + return true; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Schema/Dia/DiaRelationSchema.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Schema/Dia/DiaRelationSchema.php new file mode 100644 index 0000000..2669779 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Schema/Dia/DiaRelationSchema.php @@ -0,0 +1,236 @@ +setShowColor(isset($_REQUEST['dia_show_color'])); + $this->setShowKeys(isset($_REQUEST['dia_show_keys'])); + $this->setOrientation((string) $_REQUEST['dia_orientation']); + $this->setPaper((string) $_REQUEST['dia_paper']); + + $this->diagram->startDiaDoc( + $this->paper, + $this->topMargin, + $this->bottomMargin, + $this->leftMargin, + $this->rightMargin, + $this->orientation + ); + + $alltables = $this->getTablesFromRequest(); + + foreach ($alltables as $table) { + if (isset($this->tables[$table])) { + continue; + } + + $this->tables[$table] = new TableStatsDia( + $this->diagram, + $this->db, + $table, + $this->pageNumber, + $this->showKeys, + $this->offline + ); + } + + $seen_a_relation = false; + foreach ($alltables as $one_table) { + $exist_rel = $this->relation->getForeigners($this->db, $one_table, '', 'both'); + if (! $exist_rel) { + continue; + } + + $seen_a_relation = true; + foreach ($exist_rel as $master_field => $rel) { + /* put the foreign table on the schema only if selected + * by the user + * (do not use array_search() because we would have to + * to do a === false and this is not PHP3 compatible) + */ + if ($master_field !== 'foreign_keys_data') { + if (in_array($rel['foreign_table'], $alltables)) { + $this->addRelation( + $one_table, + $master_field, + $rel['foreign_table'], + $rel['foreign_field'], + $this->showKeys + ); + } + + continue; + } + + foreach ($rel as $one_key) { + if (! in_array($one_key['ref_table_name'], $alltables)) { + continue; + } + + foreach ($one_key['index_list'] as $index => $one_field) { + $this->addRelation( + $one_table, + $one_field, + $one_key['ref_table_name'], + $one_key['ref_index_list'][$index], + $this->showKeys + ); + } + } + } + } + + $this->drawTables(); + + if ($seen_a_relation) { + $this->drawRelations(); + } + + $this->diagram->endDiaDoc(); + } + + /** + * Output Dia Document for download + */ + public function showOutput(): void + { + $this->diagram->showOutput($this->getFileName('.dia')); + } + + /** + * Defines relation objects + * + * @see TableStatsDia::__construct(),RelationStatsDia::__construct() + * + * @param string $masterTable The master table name + * @param string $masterField The relation field in the master table + * @param string $foreignTable The foreign table name + * @param string $foreignField The relation field in the foreign table + * @param bool $showKeys Whether to display ONLY keys or not + */ + private function addRelation( + $masterTable, + $masterField, + $foreignTable, + $foreignField, + $showKeys + ): void { + if (! isset($this->tables[$masterTable])) { + $this->tables[$masterTable] = new TableStatsDia( + $this->diagram, + $this->db, + $masterTable, + $this->pageNumber, + $showKeys + ); + } + + if (! isset($this->tables[$foreignTable])) { + $this->tables[$foreignTable] = new TableStatsDia( + $this->diagram, + $this->db, + $foreignTable, + $this->pageNumber, + $showKeys + ); + } + + $this->relations[] = new RelationStatsDia( + $this->diagram, + $this->tables[$masterTable], + $masterField, + $this->tables[$foreignTable], + $foreignField + ); + } + + /** + * Draws relation references + * + * connects master table's master field to + * foreign table's foreign field using Dia object + * type Database - Reference + * + * @see RelationStatsDia::relationDraw() + */ + private function drawRelations(): void + { + foreach ($this->relations as $relation) { + $relation->relationDraw($this->showColor); + } + } + + /** + * Draws tables + * + * Tables are generated using Dia object type Database - Table + * primary fields are underlined and bold in tables + * + * @see TableStatsDia::tableDraw() + */ + private function drawTables(): void + { + foreach ($this->tables as $table) { + $table->tableDraw($this->showColor); + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/SchemaPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/SchemaPlugin.php new file mode 100644 index 0000000..ae3e393 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/SchemaPlugin.php @@ -0,0 +1,99 @@ +init(); + $this->properties = $this->setProperties(); + } + + /** + * Plugin specific initializations. + */ + protected function init(): void + { + } + + /** + * Gets the export specific format plugin properties + * + * @return SchemaPluginProperties + */ + public function getProperties(): PluginPropertyItem + { + return $this->properties; + } + + /** + * Sets the export plugins properties and is implemented by each schema export plugin. + */ + abstract protected function setProperties(): SchemaPluginProperties; + + /** + * Exports the schema into the specified format. + * + * @param string $db database name + */ + abstract public function exportSchema($db): bool; + + /** + * Adds export options common to all plugins. + * + * @param OptionsPropertyMainGroup $propertyGroup property group + */ + protected function addCommonOptions(OptionsPropertyMainGroup $propertyGroup): void + { + $leaf = new BoolPropertyItem('show_color', __('Show color')); + $propertyGroup->addProperty($leaf); + $leaf = new BoolPropertyItem('show_keys', __('Only show keys')); + $propertyGroup->addProperty($leaf); + } + + /** + * Returns the array of paper sizes + * + * @return array array of paper sizes + */ + protected function getPaperSizeArray() + { + $ret = []; + foreach ($GLOBALS['cfg']['PDFPageSizes'] as $val) { + $ret[$val] = $val; + } + + return $ret; + } + + public function isAvailable(): bool + { + return true; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php new file mode 100644 index 0000000..9ad9233 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php @@ -0,0 +1,65 @@ +getOptions($options, $cfg['DefaultTransformations']['Bool2Text']); + + if ($buffer == '0') { + return $options[1]; // return false label + } + + return $options[0]; // or true one if nonzero + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return 'Bool2Text'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php new file mode 100644 index 0000000..21af094 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php @@ -0,0 +1,62 @@ +'; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return 'Formatted'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php new file mode 100644 index 0000000..5904dc0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php @@ -0,0 +1,71 @@ +getOptions($options, $cfg['DefaultTransformations']['Hex']); + $options[0] = intval($options[0]); + + if ($options[0] < 1) { + return bin2hex($buffer); + } + + return chunk_split(bin2hex($buffer), $options[0], ' '); + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return 'Hex'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php new file mode 100644 index 0000000..d453c61 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php @@ -0,0 +1,76 @@ +getOptions($options, $cfg['DefaultTransformations']['Inline']); + + if ($GLOBALS['config']->get('PMA_IS_GD2') === 1) { + return '[' . htmlspecialchars($buffer) . ']'; + } + + return '[' . htmlspecialchars($buffer) . ']'; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return 'Inline'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php new file mode 100644 index 0000000..aac53e9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php @@ -0,0 +1,60 @@ +getOptions($options, $cfg['DefaultTransformations']['PreApPend']); + + //just prepend and/or append the options to the original text + return htmlspecialchars($options[0]) . htmlspecialchars($buffer) + . htmlspecialchars($options[1]); + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return 'PreApPend'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php new file mode 100644 index 0000000..7a16c81 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php @@ -0,0 +1,73 @@ +reset(); + if (! empty($options[0]) && ! preg_match($options[0], $buffer)) { + $this->success = false; + $this->error = sprintf( + __('Validation failed for the input string %s.'), + htmlspecialchars($buffer) + ); + } + + return $buffer; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return 'Regex Validation'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php new file mode 100644 index 0000000..383d4a4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php @@ -0,0 +1,56 @@ +'; + $html .= ''; + } + + $html .= ''; + + return $html; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return 'Text file upload'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php new file mode 100644 index 0000000..45debc5 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php @@ -0,0 +1,135 @@ +'; + } + + $class = 'transform_IPToBin'; + + return $html . ''; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the plugin + * + * @return string + */ + public static function getName() + { + return 'IPv4/IPv6 To Binary'; + } + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return 'Text'; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return 'Plain'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptolong.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptolong.php new file mode 100644 index 0000000..594e399 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptolong.php @@ -0,0 +1,127 @@ +'; + } + } + + return $html . ''; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the transformation name of the plugin + * + * @return string + */ + public static function getName() + { + return 'IPv4/IPv6 To Long'; + } + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return 'Text'; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return 'Plain'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php new file mode 100644 index 0000000..aa50898 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php @@ -0,0 +1,37 @@ +getHeader() + ->getScripts(); + $scripts->addFile('vendor/codemirror/lib/codemirror.js'); + $scripts->addFile('vendor/codemirror/mode/javascript/javascript.js'); + $scripts->addFile('vendor/codemirror/addon/runmode/runmode.js'); + $scripts->addFile('transformations/json.js'); + } + + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __('Formats text as JSON with syntax highlighting.'); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param FieldMetadata|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?FieldMetadata $meta = null) + { + return '
        ' . "\n"
        +        . htmlspecialchars($buffer) . "\n"
        +        . '
        '; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return 'Text'; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return 'Plain'; + } + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return 'JSON'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php new file mode 100644 index 0000000..e07b41c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php @@ -0,0 +1,94 @@ +getHeader() + ->getScripts(); + $scripts->addFile('vendor/codemirror/lib/codemirror.js'); + $scripts->addFile('vendor/codemirror/mode/xml/xml.js'); + $scripts->addFile('vendor/codemirror/addon/runmode/runmode.js'); + $scripts->addFile('transformations/xml.js'); + } + + /** + * Gets the transformation description of the specific plugin + * + * @return string + */ + public static function getInfo() + { + return __('Formats text as XML with syntax highlighting.'); + } + + /** + * Does the actual work of each specific transformations plugin. + * + * @param string $buffer text to be transformed + * @param array $options transformation options + * @param FieldMetadata|null $meta meta information + * + * @return string + */ + public function applyTransformation($buffer, array $options = [], ?FieldMetadata $meta = null) + { + return '
        ' . "\n"
        +        . htmlspecialchars($buffer) . "\n"
        +        . '
        '; + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the plugin`s MIME type + * + * @return string + */ + public static function getMIMEType() + { + return 'Text'; + } + + /** + * Gets the plugin`s MIME subtype + * + * @return string + */ + public static function getMIMESubtype() + { + return 'Plain'; + } + + /** + * Gets the transformation name of the specific plugin + * + * @return string + */ + public static function getName() + { + return 'XML'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TransformationsPlugin.php new file mode 100644 index 0000000..ea96c53 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TransformationsPlugin.php @@ -0,0 +1,64 @@ + $value) { + if (isset($options[$key]) && $options[$key] !== '') { + $result[$key] = $options[$key]; + } else { + $result[$key] = $value; + } + } + + return $result; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactor/Key.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactor/Key.php new file mode 100644 index 0000000..ef6de23 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactor/Key.php @@ -0,0 +1,216 @@ +twofactor->config['settings']['registrations'])) { + return; + } + + $this->twofactor->config['settings']['registrations'] = []; + } + + /** + * Returns array of U2F registration objects + * + * @return array + */ + public function getRegistrations() + { + $result = []; + foreach ($this->twofactor->config['settings']['registrations'] as $index => $data) { + $reg = new stdClass(); + $reg->keyHandle = $data['keyHandle']; + $reg->publicKey = $data['publicKey']; + $reg->certificate = $data['certificate']; + $reg->counter = $data['counter']; + $reg->index = $index; + $result[] = $reg; + } + + return $result; + } + + /** + * Checks authentication, returns true on success + */ + public function check(): bool + { + $this->provided = false; + if (! isset($_POST['u2f_authentication_response'], $_SESSION['authenticationRequest'])) { + return false; + } + + $this->provided = true; + try { + $response = json_decode($_POST['u2f_authentication_response']); + if (! is_object($response)) { + return false; + } + + $auth = U2FServer::authenticate( + $_SESSION['authenticationRequest'], + $this->getRegistrations(), + $response + ); + $this->twofactor->config['settings']['registrations'][$auth->index]['counter'] = $auth->counter; + $this->twofactor->save(); + + return true; + } catch (U2FException $e) { + $this->message = $e->getMessage(); + + return false; + } + } + + /** + * Loads needed javascripts into the page + */ + public function loadScripts(): void + { + $response = ResponseRenderer::getInstance(); + $scripts = $response->getHeader()->getScripts(); + $scripts->addFile('vendor/u2f-api-polyfill.js'); + $scripts->addFile('u2f.js'); + } + + /** + * Renders user interface to enter two-factor authentication + * + * @return string HTML code + */ + public function render() + { + $request = U2FServer::makeAuthentication( + $this->getRegistrations(), + $this->getAppId(true) + ); + $_SESSION['authenticationRequest'] = $request; + $this->loadScripts(); + + return $this->template->render('login/twofactor/key', [ + 'request' => json_encode($request), + 'is_https' => $GLOBALS['config']->isHttps(), + ]); + } + + /** + * Renders user interface to configure two-factor authentication + * + * @return string HTML code + * + * @throws U2FException + * @throws Throwable + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError + */ + public function setup() + { + $registrationData = U2FServer::makeRegistration( + $this->getAppId(true), + $this->getRegistrations() + ); + $_SESSION['registrationRequest'] = $registrationData['request']; + + $this->loadScripts(); + + return $this->template->render('login/twofactor/key_configure', [ + 'request' => json_encode($registrationData['request']), + 'signatures' => json_encode($registrationData['signatures']), + 'is_https' => $GLOBALS['config']->isHttps(), + ]); + } + + /** + * Performs backend configuration + */ + public function configure(): bool + { + $this->provided = false; + if (! isset($_POST['u2f_registration_response'], $_SESSION['registrationRequest'])) { + return false; + } + + $this->provided = true; + try { + $response = json_decode($_POST['u2f_registration_response']); + if (! is_object($response)) { + return false; + } + + $registration = U2FServer::register($_SESSION['registrationRequest'], $response); + $this->twofactor->config['settings']['registrations'][] = [ + 'keyHandle' => $registration->getKeyHandle(), + 'publicKey' => $registration->getPublicKey(), + 'certificate' => $registration->getCertificate(), + 'counter' => $registration->getCounter(), + ]; + + return true; + } catch (U2FException $e) { + $this->message = $e->getMessage(); + + return false; + } + } + + /** + * Get user visible name + * + * @return string + */ + public static function getName() + { + return __('Hardware Security Key (FIDO U2F)'); + } + + /** + * Get user visible description + * + * @return string + */ + public static function getDescription() + { + return __('Provides authentication using hardware security tokens supporting FIDO U2F, such as a Yubikey.'); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactorPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactorPlugin.php new file mode 100644 index 0000000..38f8bcf --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactorPlugin.php @@ -0,0 +1,183 @@ +twofactor = $twofactor; + $this->template = new Template(); + } + + /** + * Returns authentication error message + * + * @return string + */ + public function getError() + { + if ($this->provided) { + if (! empty($this->message)) { + return Message::rawError( + sprintf(__('Two-factor authentication failed: %s'), $this->message) + )->getDisplay(); + } + + return Message::rawError( + __('Two-factor authentication failed.') + )->getDisplay(); + } + + return ''; + } + + /** + * Checks authentication, returns true on success + */ + public function check(): bool + { + return true; + } + + /** + * Renders user interface to enter two-factor authentication + * + * @return string HTML code + */ + public function render() + { + return ''; + } + + /** + * Renders user interface to configure two-factor authentication + * + * @return string HTML code + */ + public function setup() + { + return ''; + } + + /** + * Performs backend configuration + */ + public function configure(): bool + { + return true; + } + + /** + * Get user visible name + * + * @return string + */ + public static function getName() + { + return __('No Two-Factor Authentication'); + } + + /** + * Get user visible description + * + * @return string + */ + public static function getDescription() + { + return __('Login using password only.'); + } + + /** + * Return an application ID + * + * Either hostname or hostname with scheme. + * + * @param bool $return_url Whether to generate URL + * + * @return string + */ + public function getAppId($return_url) + { + global $config; + + $url = $config->get('PmaAbsoluteUri'); + $parsed = []; + if (! empty($url)) { + $parsedUrl = parse_url($url); + + if (is_array($parsedUrl)) { + $parsed = $parsedUrl; + } + } + + if (! isset($parsed['scheme']) || strlen($parsed['scheme']) === 0) { + $parsed['scheme'] = $config->isHttps() ? 'https' : 'http'; + } + + if (! isset($parsed['host']) || strlen($parsed['host']) === 0) { + $parsed['host'] = Core::getenv('HTTP_HOST'); + } + + if ($return_url) { + $port = ''; + if (isset($parsed['port'])) { + $port = ':' . $parsed['port']; + } + + return sprintf('%s://%s%s', $parsed['scheme'], $parsed['host'], $port); + } + + return $parsed['host']; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Options/Items/TextPropertyItem.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Options/Items/TextPropertyItem.php new file mode 100644 index 0000000..b892025 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Options/Items/TextPropertyItem.php @@ -0,0 +1,28 @@ +getProperties() == null && in_array($property, $this->getProperties(), true)) { + return; + } + + $this->properties[] = $property; + } + + /** + * Removes a property from the group of properties + * + * @param OptionsPropertyItem $property the property instance to be removed + * from the group + */ + public function removeProperty($property): void + { + $this->properties = array_diff( + $this->getProperties(), + [$property] + ); + } + + /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ + + /** + * Gets the instance of the class + * + * @return OptionsPropertyGroup + */ + public function getGroup() + { + return $this; + } + + /** + * Gets the group of properties + * + * @return array + */ + public function getProperties() + { + return $this->properties; + } + + /** + * Gets the number of properties + */ + public function getNrOfProperties(): int + { + if ($this->properties === null) { + return 0; + } + + return count($this->properties); + } + + /** + * Countable interface implementation. + */ + public function count(): int + { + return $this->getNrOfProperties(); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/ExportPluginProperties.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/ExportPluginProperties.php new file mode 100644 index 0000000..f56ccc7 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/ExportPluginProperties.php @@ -0,0 +1,52 @@ +forceFile; + } + + /** + * Sets the force file parameter + */ + public function setForceFile(bool $forceFile): void + { + $this->forceFile = $forceFile; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/PluginPropertyItem.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/PluginPropertyItem.php new file mode 100644 index 0000000..1f1c9d9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/PluginPropertyItem.php @@ -0,0 +1,170 @@ +text; + } + + /** + * Sets the text + * + * @param string $text text + */ + public function setText($text): void + { + $this->text = $text; + } + + /** + * Gets the extension + * + * @return string + */ + public function getExtension() + { + return $this->extension; + } + + /** + * Sets the extension + * + * @param string $extension extension + */ + public function setExtension($extension): void + { + $this->extension = $extension; + } + + /** + * Gets the options + * + * @return OptionsPropertyRootGroup|null + */ + public function getOptions() + { + return $this->options; + } + + /** + * Sets the options + * + * @param OptionsPropertyRootGroup $options options + */ + public function setOptions($options): void + { + $this->options = $options; + } + + /** + * Gets the options text + * + * @return string + */ + public function getOptionsText() + { + return $this->optionsText; + } + + /** + * Sets the options text + * + * @param string $optionsText optionsText + */ + public function setOptionsText($optionsText): void + { + $this->optionsText = $optionsText; + } + + /** + * Gets the MIME type + * + * @return string + */ + public function getMimeType() + { + return $this->mimeType; + } + + /** + * Sets the MIME type + * + * @param string $mimeType MIME type + */ + public function setMimeType($mimeType): void + { + $this->mimeType = $mimeType; + } + + /** + * Returns the property type ( either "options", or "plugin" ). + * + * @return string + */ + public function getPropertyType() + { + return 'plugin'; + } + + /** + * Whether each plugin has to be saved as a file + */ + public function getForceFile(): bool + { + return false; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/PropertyItem.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/PropertyItem.php new file mode 100644 index 0000000..eebbb8d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/PropertyItem.php @@ -0,0 +1,44 @@ + $_) { + if (isset($this->tableCache[$one_database])) { + // the + operator does not do the intended effect + // when the cache for one table already exists + if ($table && isset($this->tableCache[$one_database][$table])) { + unset($this->tableCache[$one_database][$table]); + } + + $this->tableCache[$one_database] += $tables[$one_database]; + } else { + $this->tableCache[$one_database] = $tables[$one_database]; + } + } + } + + /** + * Set an item in table cache using dot notation. + * + * @param array|null $contentPath Array with the target path + * @param mixed $value Target value + */ + public function cacheTableContent(?array $contentPath, $value): void + { + $loc = &$this->tableCache; + + if (! isset($contentPath)) { + $loc = $value; + + return; + } + + while (count($contentPath) > 1) { + $key = array_shift($contentPath); + + // If the key doesn't exist at this depth, we will just create an empty + // array to hold the next value, allowing us to create the arrays to hold + // final values at the correct depth. Then we'll keep digging into the + // array. + if (! isset($loc[$key]) || ! is_array($loc[$key])) { + $loc[$key] = []; + } + + $loc = &$loc[$key]; + } + + $loc[array_shift($contentPath)] = $value; + } + + /** + * Get a cached value from table cache. + * + * @param array $contentPath Array of the name of the target value + * @param mixed $default Return value on cache miss + * + * @return mixed cached value or default + */ + public function getCachedTableContent(array $contentPath, $default = null) + { + return Util::getValueByKey($this->tableCache, $contentPath, $default); + } + + public function getCache(): array + { + return $this->tableCache; + } + + public function clearTableCache(): void + { + $this->tableCache = []; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Query/Utilities.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Query/Utilities.php new file mode 100644 index 0000000..5b9beae --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Query/Utilities.php @@ -0,0 +1,200 @@ +'; + $error .= __('Logout and try as another user.') . ''; + } elseif ($error_number == 1005) { + if (str_contains($error_message, 'errno: 13')) { + $error .= ' - ' . $error_message; + $error .= $separator + . __('Please check privileges of directory containing database.'); + } else { + /** + * InnoDB constraints, see + * https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html + */ + $error .= ' - ' . $error_message . + ' (' . __('Details…') . ')'; + } + } else { + $error .= ' - ' . $error_message; + } + + return $error; + } + + /** + * usort comparison callback + * + * @param array $a first argument to sort + * @param array $b second argument to sort + * @param string $sortBy Key to sort by + * @param string $sortOrder The order (ASC/DESC) + * + * @return int a value representing whether $a should be before $b in the + * sorted array or not + */ + public static function usortComparisonCallback(array $a, array $b, string $sortBy, string $sortOrder): int + { + global $cfg; + + /* No sorting when key is not present */ + if (! isset($a[$sortBy], $b[$sortBy])) { + return 0; + } + + // produces f.e.: + // return -1 * strnatcasecmp($a['SCHEMA_TABLES'], $b['SCHEMA_TABLES']) + $compare = $cfg['NaturalOrder'] ? strnatcasecmp( + (string) $a[$sortBy], + (string) $b[$sortBy] + ) : strcasecmp( + (string) $a[$sortBy], + (string) $b[$sortBy] + ); + + return ($sortOrder === 'ASC' ? 1 : -1) * $compare; + } + + /** + * Convert version string to integer. + * + * @param string $version MySQL server version + */ + public static function versionToInt(string $version): int + { + $match = explode('.', $version); + + return (int) sprintf('%d%02d%02d', $match[0], $match[1], intval($match[2])); + } + + /** + * Stores query data into session data for debugging purposes + * + * @param string $query Query text + * @param string|null $errorMessage Error message from getError() + * @param ResultInterface|false $result Query result + * @param int|float $time Time to execute query + */ + public static function debugLogQueryIntoSession(string $query, ?string $errorMessage, $result, $time): void + { + $dbgInfo = []; + + if ($result === false && $errorMessage !== null) { + $dbgInfo['error'] = '' + . htmlspecialchars($errorMessage) . ''; + } + + $dbgInfo['query'] = htmlspecialchars($query); + $dbgInfo['time'] = $time; + // Get and slightly format backtrace, this is used + // in the javascript console. + // Strip call to debugLogQueryIntoSession + $dbgInfo['trace'] = Error::processBacktrace( + array_slice(debug_backtrace(), 1) + ); + $dbgInfo['hash'] = md5($query); + + $_SESSION['debug']['queries'][] = $dbgInfo; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Replication.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Replication.php new file mode 100644 index 0000000..fb4170b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Replication.php @@ -0,0 +1,171 @@ +tryQuery($action . ' SLAVE ' . $control . ';', $link); + } + + /** + * Changes primary for replication replica + * + * @param string $user replication user on primary + * @param string $password password for the user + * @param string $host primary's hostname or IP + * @param int $port port, where mysql is running + * @param array $pos position of mysql replication, array should contain fields File and Position + * @param bool $stop shall we stop replica? + * @param bool $start shall we start replica? + * @param int $link mysql link + * + * @return ResultInterface|false output of CHANGE MASTER mysql command + */ + public function replicaChangePrimary( + $user, + $password, + $host, + $port, + array $pos, + bool $stop, + bool $start, + int $link + ) { + global $dbi; + + if ($stop) { + $this->replicaControl('STOP', null, $link); + } + + $out = $dbi->tryQuery( + 'CHANGE MASTER TO ' . + 'MASTER_HOST=\'' . $host . '\',' . + 'MASTER_PORT=' . ($port * 1) . ',' . + 'MASTER_USER=\'' . $user . '\',' . + 'MASTER_PASSWORD=\'' . $password . '\',' . + 'MASTER_LOG_FILE=\'' . $pos['File'] . '\',' . + 'MASTER_LOG_POS=' . $pos['Position'] . ';', + $link + ); + + if ($start) { + $this->replicaControl('START', null, $link); + } + + return $out; + } + + /** + * This function provides connection to remote mysql server + * + * @param string $user mysql username + * @param string $password password for the user + * @param string $host mysql server's hostname or IP + * @param int $port mysql remote port + * @param string $socket path to unix socket + * + * @return mixed mysql link on success + */ + public function connectToPrimary( + $user, + $password, + $host = null, + $port = null, + $socket = null + ) { + global $dbi; + + $server = []; + $server['user'] = $user; + $server['password'] = $password; + $server['host'] = Core::sanitizeMySQLHost($host); + $server['port'] = $port; + $server['socket'] = $socket; + + // 5th parameter set to true means that it's an auxiliary connection + // and we must not go back to login page if it fails + return $dbi->connect(DatabaseInterface::CONNECT_AUXILIARY, $server); + } + + /** + * Fetches position and file of current binary log on primary + * + * @param int $link mysql link + * + * @return array an array containing File and Position in MySQL replication + * on primary server, useful for {@see Replication::replicaChangePrimary()}. + * @phpstan-return array{'File'?: string, 'Position'?: string} + */ + public function replicaBinLogPrimary(int $link): array + { + global $dbi; + + $data = $dbi->fetchResult('SHOW MASTER STATUS', null, null, $link); + $output = []; + + if (! empty($data)) { + $output['File'] = $data[0]['File']; + $output['Position'] = $data[0]['Position']; + } + + return $output; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/ReplicationInfo.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/ReplicationInfo.php new file mode 100644 index 0000000..982d8fc --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/ReplicationInfo.php @@ -0,0 +1,191 @@ +dbi = $dbi; + } + + public function load(?string $connection = null): void + { + global $urlParams; + + $this->setPrimaryStatus(); + + if (! empty($connection)) { + $this->setMultiPrimaryStatus(); + + if ($this->multiPrimaryStatus) { + $this->setDefaultPrimaryConnection($connection); + $urlParams['primary_connection'] = $connection; + } + } + + $this->setReplicaStatus(); + $this->setPrimaryInfo(); + $this->setReplicaInfo(); + } + + private function setPrimaryStatus(): void + { + $this->primaryStatus = $this->dbi->fetchResult('SHOW MASTER STATUS'); + } + + public function getPrimaryStatus(): array + { + return $this->primaryStatus; + } + + private function setReplicaStatus(): void + { + $this->replicaStatus = $this->dbi->fetchResult('SHOW SLAVE STATUS'); + } + + public function getReplicaStatus(): array + { + return $this->replicaStatus; + } + + private function setMultiPrimaryStatus(): void + { + $this->multiPrimaryStatus = $this->dbi->fetchResult('SHOW ALL SLAVES STATUS'); + } + + private function setDefaultPrimaryConnection(string $connection): void + { + $this->dbi->query(sprintf('SET @@default_master_connection = \'%s\'', $this->dbi->escapeString($connection))); + } + + private static function fill(array $status, string $key): array + { + if (empty($status[0][$key])) { + return []; + } + + return explode(',', $status[0][$key]); + } + + private function setPrimaryInfo(): void + { + $this->primaryInfo = ['status' => false]; + + if (count($this->primaryStatus) > 0) { + $this->primaryInfo['status'] = true; + } + + if (! $this->primaryInfo['status']) { + return; + } + + $this->primaryInfo['Do_DB'] = self::fill($this->primaryStatus, 'Binlog_Do_DB'); + $this->primaryInfo['Ignore_DB'] = self::fill($this->primaryStatus, 'Binlog_Ignore_DB'); + } + + /** + * @return array + */ + public function getPrimaryInfo(): array + { + return $this->primaryInfo; + } + + private function setReplicaInfo(): void + { + $this->replicaInfo = ['status' => false]; + + if (count($this->replicaStatus) > 0) { + $this->replicaInfo['status'] = true; + } + + if (! $this->replicaInfo['status']) { + return; + } + + $this->replicaInfo['Do_DB'] = self::fill($this->replicaStatus, 'Replicate_Do_DB'); + $this->replicaInfo['Ignore_DB'] = self::fill($this->replicaStatus, 'Replicate_Ignore_DB'); + $this->replicaInfo['Do_Table'] = self::fill($this->replicaStatus, 'Replicate_Do_Table'); + $this->replicaInfo['Ignore_Table'] = self::fill($this->replicaStatus, 'Replicate_Ignore_Table'); + $this->replicaInfo['Wild_Do_Table'] = self::fill($this->replicaStatus, 'Replicate_Wild_Do_Table'); + $this->replicaInfo['Wild_Ignore_Table'] = self::fill($this->replicaStatus, 'Replicate_Wild_Ignore_Table'); + } + + /** + * @return array + */ + public function getReplicaInfo(): array + { + return $this->replicaInfo; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/ResponseRenderer.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/ResponseRenderer.php new file mode 100644 index 0000000..9579003 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/ResponseRenderer.php @@ -0,0 +1,508 @@ + + */ + protected static $httpStatusMessages = [ + // Informational + 100 => 'Continue', + 101 => 'Switching Protocols', + 102 => 'Processing', + 103 => 'Early Hints', + // Success + 200 => 'OK', + 201 => 'Created', + 202 => 'Accepted', + 203 => 'Non-Authoritative Information', + 204 => 'No Content', + 205 => 'Reset Content', + 206 => 'Partial Content', + 207 => 'Multi-Status', + 208 => 'Already Reported', + 226 => 'IM Used', + // Redirection + 300 => 'Multiple Choices', + 301 => 'Moved Permanently', + 302 => 'Found', + 303 => 'See Other', + 304 => 'Not Modified', + 305 => 'Use Proxy', + 307 => 'Temporary Redirect', + 308 => 'Permanent Redirect', + // Client Error + 400 => 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Timeout', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Payload Too Large', + 414 => 'URI Too Long', + 415 => 'Unsupported Media Type', + 416 => 'Range Not Satisfiable', + 417 => 'Expectation Failed', + 421 => 'Misdirected Request', + 422 => 'Unprocessable Entity', + 423 => 'Locked', + 424 => 'Failed Dependency', + 425 => 'Too Early', + 426 => 'Upgrade Required', + 427 => 'Unassigned', + 428 => 'Precondition Required', + 429 => 'Too Many Requests', + 430 => 'Unassigned', + 431 => 'Request Header Fields Too Large', + 451 => 'Unavailable For Legal Reasons', + // Server Error + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Timeout', + 505 => 'HTTP Version Not Supported', + 506 => 'Variant Also Negotiates', + 507 => 'Insufficient Storage', + 508 => 'Loop Detected', + 509 => 'Unassigned', + 510 => 'Not Extended', + 511 => 'Network Authentication Required', + ]; + + /** + * Creates a new class instance + */ + private function __construct() + { + if (! defined('TESTSUITE')) { + $buffer = OutputBuffering::getInstance(); + $buffer->start(); + register_shutdown_function([$this, 'response']); + } + + $this->header = new Header(); + $this->HTML = ''; + $this->JSON = []; + $this->footer = new Footer(); + + $this->isSuccess = true; + $this->isDisabled = false; + $this->setAjax(! empty($_REQUEST['ajax_request'])); + } + + /** + * Set the ajax flag to indicate whether + * we are servicing an ajax request + * + * @param bool $isAjax Whether we are servicing an ajax request + */ + public function setAjax(bool $isAjax): void + { + $this->isAjax = $isAjax; + $this->header->setAjax($this->isAjax); + $this->footer->setAjax($this->isAjax); + } + + /** + * Returns the singleton Response object + * + * @return ResponseRenderer object + */ + public static function getInstance() + { + if (empty(self::$instance)) { + self::$instance = new ResponseRenderer(); + } + + return self::$instance; + } + + /** + * Set the status of an ajax response, + * whether it is a success or an error + * + * @param bool $state Whether the request was successfully processed + */ + public function setRequestStatus(bool $state): void + { + $this->isSuccess = ($state === true); + } + + /** + * Returns true or false depending on whether + * we are servicing an ajax request + */ + public function isAjax(): bool + { + return $this->isAjax; + } + + /** + * Disables the rendering of the header + * and the footer in responses + */ + public function disable(): void + { + $this->header->disable(); + $this->footer->disable(); + $this->isDisabled = true; + } + + /** + * Returns a PhpMyAdmin\Header object + * + * @return Header + */ + public function getHeader() + { + return $this->header; + } + + /** + * Returns a PhpMyAdmin\Footer object + * + * @return Footer + */ + public function getFooter() + { + return $this->footer; + } + + /** + * Append HTML code to the current output buffer + */ + public function addHTML(string $content): void + { + $this->HTML .= $content; + } + + /** + * Add JSON code to the response + * + * @param string|int|array $json Either a key (string) or an array or key-value pairs + * @param mixed|null $value Null, if passing an array in $json otherwise + * it's a string value to the key + */ + public function addJSON($json, $value = null): void + { + if (is_array($json)) { + foreach ($json as $key => $value) { + $this->addJSON($key, $value); + } + } elseif ($value instanceof Message) { + $this->JSON[$json] = $value->getDisplay(); + } else { + $this->JSON[$json] = $value; + } + } + + /** + * Renders the HTML response text + */ + private function getDisplay(): string + { + // The header may contain nothing at all, + // if its content was already rendered + // and, in this case, the header will be + // in the content part of the request + $retval = $this->header->getDisplay(); + $retval .= $this->HTML; + $retval .= $this->footer->getDisplay(); + + return $retval; + } + + /** + * Sends a JSON response to the browser + */ + private function ajaxResponse(): string + { + global $dbi; + + /* Avoid wrapping in case we're disabled */ + if ($this->isDisabled) { + return $this->getDisplay(); + } + + if (! isset($this->JSON['message'])) { + $this->JSON['message'] = $this->getDisplay(); + } elseif ($this->JSON['message'] instanceof Message) { + $this->JSON['message'] = $this->JSON['message']->getDisplay(); + } + + if ($this->isSuccess) { + $this->JSON['success'] = true; + } else { + $this->JSON['success'] = false; + $this->JSON['error'] = $this->JSON['message']; + unset($this->JSON['message']); + } + + if ($this->isSuccess) { + if (! isset($this->JSON['title'])) { + $this->addJSON('title', '' . $this->getHeader()->getPageTitle() . ''); + } + + if (isset($dbi)) { + $this->addJSON('menu', $this->getHeader()->getMenu()->getDisplay()); + } + + $this->addJSON('scripts', $this->getHeader()->getScripts()->getFiles()); + $this->addJSON('selflink', $this->getFooter()->getSelfUrl()); + $this->addJSON('displayMessage', $this->getHeader()->getMessage()); + + $debug = $this->footer->getDebugMessage(); + if (empty($_REQUEST['no_debug']) && strlen($debug) > 0) { + $this->addJSON('debug', $debug); + } + + $errors = $this->footer->getErrorMessages(); + if (strlen($errors) > 0) { + $this->addJSON('errors', $errors); + } + + $promptPhpErrors = $GLOBALS['errorHandler']->hasErrorsForPrompt(); + $this->addJSON('promptPhpErrors', $promptPhpErrors); + + if (empty($GLOBALS['error_message'])) { + // set current db, table and sql query in the querywindow + // (this is for the bottom console) + $query = ''; + $maxChars = $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']; + if (isset($GLOBALS['sql_query']) && mb_strlen($GLOBALS['sql_query']) < $maxChars) { + $query = $GLOBALS['sql_query']; + } + + $this->addJSON( + 'reloadQuerywindow', + [ + 'db' => isset($GLOBALS['db']) && is_scalar($GLOBALS['db']) + ? (string) $GLOBALS['db'] : '', + 'table' => isset($GLOBALS['table']) && is_scalar($GLOBALS['table']) + ? (string) $GLOBALS['table'] : '', + 'sql_query' => $query, + ] + ); + if (! empty($GLOBALS['focus_querywindow'])) { + $this->addJSON('_focusQuerywindow', $query); + } + + if (! empty($GLOBALS['reload'])) { + $this->addJSON('reloadNavigation', 1); + } + + $this->addJSON('params', $this->getHeader()->getJsParams()); + } + } + + // Set the Content-Type header to JSON so that jQuery parses the + // response correctly. + Core::headerJSON(); + + $result = json_encode($this->JSON); + if ($result === false) { + return (string) json_encode([ + 'success' => false, + 'error' => 'JSON encoding failed: ' . json_last_error_msg(), + ]); + } + + return $result; + } + + /** + * Sends an HTML response to the browser + */ + public function response(): void + { + $buffer = OutputBuffering::getInstance(); + if (empty($this->HTML)) { + $this->HTML = $buffer->getContents(); + } + + if ($this->isAjax()) { + echo $this->ajaxResponse(); + } else { + echo $this->getDisplay(); + } + + $buffer->flush(); + exit; + } + + /** + * Wrapper around PHP's header() function. + * + * @param string $text header string + */ + public function header($text): void + { + // phpcs:ignore SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly + \header($text); + } + + /** + * Wrapper around PHP's headers_sent() function. + */ + public function headersSent(): bool + { + return headers_sent(); + } + + /** + * Wrapper around PHP's http_response_code() function. + * + * @param int $response_code will set the response code. + */ + public function httpResponseCode($response_code): void + { + http_response_code($response_code); + } + + /** + * Sets http response code. + * + * @param int $responseCode will set the response code. + */ + public function setHttpResponseCode(int $responseCode): void + { + $this->httpResponseCode($responseCode); + $header = 'status: ' . $responseCode . ' '; + if (isset(static::$httpStatusMessages[$responseCode])) { + $header .= static::$httpStatusMessages[$responseCode]; + } else { + $header .= 'Web server is down'; + } + + if (PHP_SAPI === 'cgi-fcgi') { + return; + } + + $this->header($header); + } + + /** + * Generate header for 303 + * + * @param string $location will set location to redirect. + */ + public function generateHeader303($location): void + { + $this->setHttpResponseCode(303); + $this->header('Location: ' . $location); + if (! defined('TESTSUITE')) { + exit; + } + } + + /** + * Configures response for the login page + * + * @return bool Whether caller should exit + */ + public function loginPage(): bool + { + /* Handle AJAX redirection */ + if ($this->isAjax()) { + $this->setRequestStatus(false); + // redirect_flag redirects to the login page + $this->addJSON('redirect_flag', '1'); + + return true; + } + + $this->getFooter()->setMinimal(); + $header = $this->getHeader(); + $header->setBodyId('loginform'); + $header->setTitle('phpMyAdmin'); + $header->disableMenuAndConsole(); + $header->disableWarnings(); + + return false; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Plugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Plugin.php new file mode 100644 index 0000000..de96413 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Plugin.php @@ -0,0 +1,207 @@ +name = $name; + $this->version = $version; + $this->status = $status; + $this->type = $type; + $this->typeVersion = $typeVersion; + $this->library = $library; + $this->libraryVersion = $libraryVersion; + $this->author = $author; + $this->description = $description; + $this->license = $license; + $this->loadOption = $loadOption; + $this->maturity = $maturity; + $this->authVersion = $authVersion; + } + + /** + * @param array $state array with the properties + */ + public static function fromState(array $state): self + { + return new self( + $state['name'] ?? '', + $state['version'] ?? null, + $state['status'] ?? '', + $state['type'] ?? '', + $state['typeVersion'] ?? null, + $state['library'] ?? null, + $state['libraryVersion'] ?? null, + $state['author'] ?? null, + $state['description'] ?? null, + $state['license'] ?? '', + $state['loadOption'] ?? null, + $state['maturity'] ?? null, + $state['authVersion'] ?? null + ); + } + + /** + * @return array + */ + public function toArray(): array + { + return [ + 'name' => $this->getName(), + 'version' => $this->getVersion(), + 'status' => $this->getStatus(), + 'type' => $this->getType(), + 'type_version' => $this->getTypeVersion(), + 'library' => $this->getLibrary(), + 'library_version' => $this->getLibraryVersion(), + 'author' => $this->getAuthor(), + 'description' => $this->getDescription(), + 'license' => $this->getLicense(), + 'load_option' => $this->getLoadOption(), + 'maturity' => $this->getMaturity(), + 'auth_version' => $this->getAuthVersion(), + ]; + } + + public function getName(): string + { + return $this->name; + } + + public function getVersion(): ?string + { + return $this->version; + } + + public function getStatus(): string + { + return $this->status; + } + + public function getType(): string + { + return $this->type; + } + + public function getTypeVersion(): ?string + { + return $this->typeVersion; + } + + public function getLibrary(): ?string + { + return $this->library; + } + + public function getLibraryVersion(): ?string + { + return $this->libraryVersion; + } + + public function getAuthor(): ?string + { + return $this->author; + } + + public function getDescription(): ?string + { + return $this->description; + } + + public function getLicense(): string + { + return $this->license; + } + + public function getLoadOption(): ?string + { + return $this->loadOption; + } + + public function getMaturity(): ?string + { + return $this->maturity; + } + + public function getAuthVersion(): ?string + { + return $this->authVersion; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Select.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Select.php new file mode 100644 index 0000000..f97baf6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Select.php @@ -0,0 +1,120 @@ + $server) { + if (empty($server['host'])) { + continue; + } + + if (! empty($GLOBALS['server']) && (int) $GLOBALS['server'] === (int) $key) { + $selected = 1; + } else { + $selected = 0; + } + + if (! empty($server['verbose'])) { + $label = $server['verbose']; + } else { + $label = $server['host']; + if (! empty($server['port'])) { + $label .= ':' . $server['port']; + } + } + + if (! empty($server['only_db'])) { + if (! is_array($server['only_db'])) { + $label .= ' - ' . $server['only_db']; + // try to avoid displaying a too wide selector + } elseif (count($server['only_db']) < 4) { + $label .= ' - ' . implode(', ', $server['only_db']); + } + } + + if (! empty($server['user']) && $server['auth_type'] === 'config') { + $label .= ' (' . $server['user'] . ')'; + } + + if ($list) { + if ($selected) { + $servers['list'][] = [ + 'selected' => true, + 'label' => $label, + ]; + } else { + $scriptName = Util::getScriptNameForOption($GLOBALS['cfg']['DefaultTabServer'], 'server'); + $href = $scriptName . Url::getCommon( + ['server' => $key], + ! str_contains($scriptName, '?') ? '?' : '&' + ); + $servers['list'][] = [ + 'href' => $href, + 'label' => $label, + ]; + } + } else { + $servers['select'][] = [ + 'value' => $key, + 'selected' => $selected, + 'label' => $label, + ]; + } + } + + $renderDetails = [ + 'not_only_options' => $not_only_options, + 'omit_fieldset' => $omit_fieldset, + 'servers' => $servers, + ]; + if ($not_only_options) { + $renderDetails['form_action'] = $form_action; + } + + $template = new Template(); + + return $template->render('server/select/index', $renderDetails); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Data.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Data.php new file mode 100644 index 0000000..ea54b61 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Data.php @@ -0,0 +1,456 @@ +replicationInfo; + } + + /** + * An empty setter makes the above properties read-only + * + * @param string $a key + * @param mixed $b value + */ + public function __set($a, $b): void + { + // Discard everything + } + + /** + * Gets the allocations for constructor + * + * @return array + */ + private function getAllocations() + { + return [ + // variable name => section + // variable names match when they begin with the given string + + 'Com_' => 'com', + 'Innodb_' => 'innodb', + 'Ndb_' => 'ndb', + 'Handler_' => 'handler', + 'Qcache_' => 'qcache', + 'Threads_' => 'threads', + 'Slow_launch_threads' => 'threads', + + 'Binlog_cache_' => 'binlog_cache', + 'Created_tmp_' => 'created_tmp', + 'Key_' => 'key', + + 'Delayed_' => 'delayed', + 'Not_flushed_delayed_rows' => 'delayed', + + 'Flush_commands' => 'query', + 'Last_query_cost' => 'query', + 'Slow_queries' => 'query', + 'Queries' => 'query', + 'Prepared_stmt_count' => 'query', + + 'Select_' => 'select', + 'Sort_' => 'sort', + + 'Open_tables' => 'table', + 'Opened_tables' => 'table', + 'Open_table_definitions' => 'table', + 'Opened_table_definitions' => 'table', + 'Table_locks_' => 'table', + + 'Rpl_status' => 'repl', + 'Slave_' => 'repl', + + 'Tc_' => 'tc', + + 'Ssl_' => 'ssl', + + 'Open_files' => 'files', + 'Open_streams' => 'files', + 'Opened_files' => 'files', + ]; + } + + /** + * Gets the sections for constructor + * + * @return array + */ + private function getSections() + { + return [ + // section => section name (description) + 'com' => 'Com', + 'query' => __('SQL query'), + 'innodb' => 'InnoDB', + 'ndb' => 'NDB', + 'handler' => __('Handler'), + 'qcache' => __('Query cache'), + 'threads' => __('Threads'), + 'binlog_cache' => __('Binary log'), + 'created_tmp' => __('Temporary data'), + 'delayed' => __('Delayed inserts'), + 'key' => __('Key cache'), + 'select' => __('Joins'), + 'repl' => __('Replication'), + 'sort' => __('Sorting'), + 'table' => __('Tables'), + 'tc' => __('Transaction coordinator'), + 'files' => __('Files'), + 'ssl' => 'SSL', + 'other' => __('Other'), + ]; + } + + /** + * Gets the links for constructor + * + * @return array + */ + private function getLinks() + { + $primaryInfo = $this->replicationInfo->getPrimaryInfo(); + $replicaInfo = $this->replicationInfo->getReplicaInfo(); + + $links = []; + // variable or section name => (name => url) + + $links['table'][__('Flush (close) all tables')] = [ + 'url' => $this->selfUrl, + 'params' => Url::getCommon(['flush' => 'TABLES'], ''), + ]; + $links['table'][__('Show open tables')] = [ + 'url' => Url::getFromRoute('/sql'), + 'params' => Url::getCommon([ + 'sql_query' => 'SHOW OPEN TABLES', + 'goto' => $this->selfUrl, + ], ''), + ]; + + if ($primaryInfo['status']) { + $links['repl'][__('Show replica hosts')] = [ + 'url' => Url::getFromRoute('/sql'), + 'params' => Url::getCommon([ + 'sql_query' => 'SHOW SLAVE HOSTS', + 'goto' => $this->selfUrl, + ], ''), + ]; + $links['repl'][__('Show primary status')] = [ + 'url' => '#replication_primary', + 'params' => '', + ]; + } + + if ($replicaInfo['status']) { + $links['repl'][__('Show replica status')] = [ + 'url' => '#replication_replica', + 'params' => '', + ]; + } + + $links['repl']['doc'] = 'replication'; + + $links['qcache'][__('Flush query cache')] = [ + 'url' => $this->selfUrl, + 'params' => Url::getCommon(['flush' => 'QUERY CACHE'], ''), + ]; + $links['qcache']['doc'] = 'query_cache'; + + $links['threads']['doc'] = 'mysql_threads'; + + $links['key']['doc'] = 'myisam_key_cache'; + + $links['binlog_cache']['doc'] = 'binary_log'; + + $links['Slow_queries']['doc'] = 'slow_query_log'; + + $links['innodb'][__('Variables')] = [ + 'url' => Url::getFromRoute('/server/engines/InnoDB'), + 'params' => '', + ]; + $links['innodb'][__('InnoDB Status')] = [ + 'url' => Url::getFromRoute('/server/engines/InnoDB/Status'), + 'params' => '', + ]; + $links['innodb']['doc'] = 'innodb'; + + return $links; + } + + /** + * Calculate some values + * + * @param array $server_status contains results of SHOW GLOBAL STATUS + * @param array $server_variables contains results of SHOW GLOBAL VARIABLES + * + * @return array + */ + private function calculateValues(array $server_status, array $server_variables) + { + // Key_buffer_fraction + if ( + isset($server_status['Key_blocks_unused'], $server_variables['key_cache_block_size']) + && isset($server_variables['key_buffer_size']) + && $server_variables['key_buffer_size'] != 0 + ) { + $server_status['Key_buffer_fraction_%'] = 100 + - $server_status['Key_blocks_unused'] + * $server_variables['key_cache_block_size'] + / $server_variables['key_buffer_size'] + * 100; + } elseif ( + isset($server_status['Key_blocks_used'], $server_variables['key_buffer_size']) + && $server_variables['key_buffer_size'] != 0 + ) { + $server_status['Key_buffer_fraction_%'] = $server_status['Key_blocks_used'] + * 1024 + / $server_variables['key_buffer_size']; + } + + // Ratio for key read/write + if ( + isset($server_status['Key_writes'], $server_status['Key_write_requests']) + && $server_status['Key_write_requests'] > 0 + ) { + $key_writes = $server_status['Key_writes']; + $key_write_requests = $server_status['Key_write_requests']; + $server_status['Key_write_ratio_%'] = 100 * $key_writes / $key_write_requests; + } + + if ( + isset($server_status['Key_reads'], $server_status['Key_read_requests']) + && $server_status['Key_read_requests'] > 0 + ) { + $key_reads = $server_status['Key_reads']; + $key_read_requests = $server_status['Key_read_requests']; + $server_status['Key_read_ratio_%'] = 100 * $key_reads / $key_read_requests; + } + + // Threads_cache_hitrate + if ( + isset($server_status['Threads_created'], $server_status['Connections']) + && $server_status['Connections'] > 0 + ) { + $server_status['Threads_cache_hitrate_%'] = 100 - $server_status['Threads_created'] + / $server_status['Connections'] * 100; + } + + return $server_status; + } + + /** + * Sort variables into arrays + * + * @param array $server_status contains results of SHOW GLOBAL STATUS + * @param array $allocations allocations for sections + * @param array $allocationMap map variables to their section + * @param array $sectionUsed is a section used? + * @param array $used_queries used queries + * + * @return array ($allocationMap, $sectionUsed, $used_queries) + */ + private function sortVariables( + array $server_status, + array $allocations, + array $allocationMap, + array $sectionUsed, + array $used_queries + ) { + foreach ($server_status as $name => $value) { + $section_found = false; + foreach ($allocations as $filter => $section) { + if (! str_contains($name, $filter)) { + continue; + } + + $allocationMap[$name] = $section; + $sectionUsed[$section] = true; + $section_found = true; + if ($section === 'com' && $value > 0) { + $used_queries[$name] = $value; + } + + break; // Only exits inner loop + } + + if ($section_found) { + continue; + } + + $allocationMap[$name] = 'other'; + $sectionUsed['other'] = true; + } + + return [ + $allocationMap, + $sectionUsed, + $used_queries, + ]; + } + + public function __construct() + { + global $dbi; + + $this->replicationInfo = new ReplicationInfo($dbi); + $this->replicationInfo->load($_POST['primary_connection'] ?? null); + + $this->selfUrl = basename($GLOBALS['PMA_PHP_SELF']); + + // get status from server + $server_status_result = $dbi->tryQuery('SHOW GLOBAL STATUS'); + if ($server_status_result === false) { + $server_status = []; + $this->dataLoaded = false; + } else { + $this->dataLoaded = true; + $server_status = $server_status_result->fetchAllKeyPair(); + unset($server_status_result); + } + + // for some calculations we require also some server settings + $server_variables = $dbi->fetchResult('SHOW GLOBAL VARIABLES', 0, 1); + + // cleanup of some deprecated values + $server_status = self::cleanDeprecated($server_status); + + // calculate some values + $server_status = $this->calculateValues($server_status, $server_variables); + + // split variables in sections + $allocations = $this->getAllocations(); + + $sections = $this->getSections(); + + // define some needful links/commands + $links = $this->getLinks(); + + // Variable to contain all com_ variables (query statistics) + $used_queries = []; + + // Variable to map variable names to their respective section name + // (used for js category filtering) + $allocationMap = []; + + // Variable to mark used sections + $sectionUsed = []; + + // sort vars into arrays + [ + $allocationMap, + $sectionUsed, + $used_queries, + ] = $this->sortVariables($server_status, $allocations, $allocationMap, $sectionUsed, $used_queries); + + // admin commands are not queries (e.g. they include COM_PING, + // which is excluded from $server_status['Questions']) + unset($used_queries['Com_admin_commands']); + + // Set all class properties + $this->dbIsLocal = false; + // can be null if $cfg['ServerDefault'] = 0; + $serverHostToLower = mb_strtolower((string) $GLOBALS['cfg']['Server']['host']); + if ( + $serverHostToLower === 'localhost' + || $GLOBALS['cfg']['Server']['host'] === '127.0.0.1' + || $GLOBALS['cfg']['Server']['host'] === '::1' + ) { + $this->dbIsLocal = true; + } + + $this->status = $server_status; + $this->sections = $sections; + $this->variables = $server_variables; + $this->usedQueries = $used_queries; + $this->allocationMap = $allocationMap; + $this->links = $links; + $this->sectionUsed = $sectionUsed; + } + + /** + * cleanup of some deprecated values + * + * @param array $server_status status array to process + * + * @return array + */ + public static function cleanDeprecated(array $server_status) + { + $deprecated = [ + 'Com_prepare_sql' => 'Com_stmt_prepare', + 'Com_execute_sql' => 'Com_stmt_execute', + 'Com_dealloc_sql' => 'Com_stmt_close', + ]; + foreach ($deprecated as $old => $new) { + if (! isset($server_status[$old], $server_status[$new])) { + continue; + } + + unset($server_status[$old]); + } + + return $server_status; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Monitor.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Monitor.php new file mode 100644 index 0000000..d00f4e7 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Monitor.php @@ -0,0 +1,549 @@ +dbi = $dbi; + } + + /** + * Returns JSON for real-time charting data + * + * @param string $requiredData Required data + * + * @return array JSON + */ + public function getJsonForChartingData(string $requiredData): array + { + $ret = json_decode($requiredData, true); + $statusVars = []; + $serverVars = []; + $sysinfo = $cpuload = $memory = 0; + + /* Accumulate all required variables and data */ + [$serverVars, $statusVars, $ret] = $this->getJsonForChartingDataGet( + $ret, + $serverVars, + $statusVars, + $sysinfo, + $cpuload, + $memory + ); + + // Retrieve all required status variables + $statusVarValues = []; + if (count($statusVars)) { + $statusVarValues = $this->dbi->fetchResult( + "SHOW GLOBAL STATUS WHERE Variable_name='" + . implode("' OR Variable_name='", $statusVars) . "'", + 0, + 1 + ); + } + + // Retrieve all required server variables + $serverVarValues = []; + if (count($serverVars)) { + $serverVarValues = $this->dbi->fetchResult( + "SHOW GLOBAL VARIABLES WHERE Variable_name='" + . implode("' OR Variable_name='", $serverVars) . "'", + 0, + 1 + ); + } + + // ...and now assign them + $ret = $this->getJsonForChartingDataSet($ret, $statusVarValues, $serverVarValues); + + $ret['x'] = (int) (microtime(true) * 1000); + + return $ret; + } + + /** + * Assign the variables for real-time charting data + * + * @param array $ret Real-time charting data + * @param array $statusVarValues Status variable values + * @param array $serverVarValues Server variable values + * + * @return array + */ + private function getJsonForChartingDataSet( + array $ret, + array $statusVarValues, + array $serverVarValues + ): array { + foreach ($ret as $chart_id => $chartNodes) { + foreach ($chartNodes as $node_id => $nodeDataPoints) { + foreach ($nodeDataPoints as $point_id => $dataPoint) { + switch ($dataPoint['type']) { + case 'statusvar': + $ret[$chart_id][$node_id][$point_id]['value'] = $statusVarValues[$dataPoint['name']]; + break; + case 'servervar': + $ret[$chart_id][$node_id][$point_id]['value'] = $serverVarValues[$dataPoint['name']]; + break; + } + } + } + } + + return $ret; + } + + /** + * Get called to get JSON for charting data + * + * @param array $ret Real-time charting data + * @param array $serverVars Server variable values + * @param array $statusVars Status variable values + * @param mixed $sysinfo System info + * @param mixed $cpuload CPU load + * @param mixed $memory Memory + * + * @return array + */ + private function getJsonForChartingDataGet( + array $ret, + array $serverVars, + array $statusVars, + $sysinfo, + $cpuload, + $memory + ) { + // For each chart + foreach ($ret as $chartId => $chartNodes) { + // For each data series + foreach ($chartNodes as $nodeId => $nodeDataPoints) { + // For each data point in the series (usually just 1) + foreach ($nodeDataPoints as $pointId => $dataPoint) { + [$serverVars, $statusVars, $ret[$chartId][$nodeId][$pointId]] = $this->getJsonForChartingDataSwitch( + $dataPoint['type'], + $dataPoint['name'], + $serverVars, + $statusVars, + $ret[$chartId][$nodeId][$pointId], + $sysinfo, + $cpuload, + $memory + ); + } /* foreach */ + } /* foreach */ + } + + return [ + $serverVars, + $statusVars, + $ret, + ]; + } + + /** + * Switch called to get JSON for charting data + * + * @param string $type Type + * @param string $pName Name + * @param array $serverVars Server variable values + * @param array $statusVars Status variable values + * @param array $ret Real-time charting data + * @param mixed $sysinfo System info + * @param mixed $cpuload CPU load + * @param mixed $memory Memory + * + * @return array + */ + private function getJsonForChartingDataSwitch( + $type, + $pName, + array $serverVars, + array $statusVars, + array $ret, + $sysinfo, + $cpuload, + $memory + ) { + /** + * We only collect the status and server variables here to read them all in one query, + * and only afterwards assign them. Also do some allow list filtering on the names + */ + switch ($type) { + case 'servervar': + if (! preg_match('/[^a-zA-Z_]+/', $pName)) { + $serverVars[] = $pName; + } + + break; + + case 'statusvar': + if (! preg_match('/[^a-zA-Z_]+/', $pName)) { + $statusVars[] = $pName; + } + + break; + + case 'proc': + $result = $this->dbi->query('SHOW PROCESSLIST'); + $ret['value'] = $result->numRows(); + break; + + case 'cpu': + if (! $sysinfo) { + $sysinfo = SysInfo::get(); + } + + if (! $cpuload) { + $cpuload = $sysinfo->loadavg(); + } + + if (SysInfo::getOs() === 'Linux') { + $ret['idle'] = $cpuload['idle']; + $ret['busy'] = $cpuload['busy']; + } else { + $ret['value'] = $cpuload['loadavg']; + } + + break; + + case 'memory': + if (! $sysinfo) { + $sysinfo = SysInfo::get(); + } + + if (! $memory) { + $memory = $sysinfo->memory(); + } + + $ret['value'] = $memory[$pName] ?? 0; + break; + } + + return [ + $serverVars, + $statusVars, + $ret, + ]; + } + + /** + * Returns JSON for log data with type: slow + * + * @param int $start Unix Time: Start time for query + * @param int $end Unix Time: End time for query + * + * @return array + */ + public function getJsonForLogDataTypeSlow(int $start, int $end): array + { + $query = 'SELECT start_time, user_host, '; + $query .= 'Sec_to_Time(Sum(Time_to_Sec(query_time))) as query_time, '; + $query .= 'Sec_to_Time(Sum(Time_to_Sec(lock_time))) as lock_time, '; + $query .= 'SUM(rows_sent) AS rows_sent, '; + $query .= 'SUM(rows_examined) AS rows_examined, db, sql_text, '; + $query .= 'COUNT(sql_text) AS \'#\' '; + $query .= 'FROM `mysql`.`slow_log` '; + $query .= 'WHERE start_time > FROM_UNIXTIME(' . $start . ') '; + $query .= 'AND start_time < FROM_UNIXTIME(' . $end . ') GROUP BY sql_text'; + + $result = $this->dbi->tryQuery($query); + // TODO: check for false + + $return = [ + 'rows' => [], + 'sum' => [], + ]; + + while ($row = $result->fetchAssoc()) { + $type = mb_strtolower( + mb_substr( + $row['sql_text'], + 0, + (int) mb_strpos($row['sql_text'], ' ') + ) + ); + + switch ($type) { + case 'insert': + case 'update': + //Cut off big inserts and updates, but append byte count instead + if (mb_strlen($row['sql_text']) > 220) { + $implodeSqlText = implode( + ' ', + (array) Util::formatByteDown( + mb_strlen($row['sql_text']), + 2, + 2 + ) + ); + $row['sql_text'] = mb_substr($row['sql_text'], 0, 200) + . '... [' . $implodeSqlText . ']'; + } + + break; + default: + break; + } + + if (! isset($return['sum'][$type])) { + $return['sum'][$type] = 0; + } + + $return['sum'][$type] += $row['#']; + $return['rows'][] = $row; + } + + $return['sum']['TOTAL'] = array_sum($return['sum']); + $return['numRows'] = count($return['rows']); + + return $return; + } + + /** + * Returns JSon for log data with type: general + * + * @param int $start Unix Time: Start time for query + * @param int $end Unix Time: End time for query + * @param bool $isTypesLimited Whether to limit types or not + * @param bool $removeVariables Whether to remove variables or not + * + * @return array + */ + public function getJsonForLogDataTypeGeneral( + int $start, + int $end, + bool $isTypesLimited, + bool $removeVariables + ): array { + $limitTypes = ''; + if ($isTypesLimited) { + $limitTypes = 'AND argument REGEXP \'^(INSERT|SELECT|UPDATE|DELETE)\' '; + } + + $query = 'SELECT TIME(event_time) as event_time, user_host, thread_id, '; + $query .= 'server_id, argument, count(argument) as \'#\' '; + $query .= 'FROM `mysql`.`general_log` '; + $query .= 'WHERE command_type=\'Query\' '; + $query .= 'AND event_time > FROM_UNIXTIME(' . $start . ') '; + $query .= 'AND event_time < FROM_UNIXTIME(' . $end . ') '; + $query .= $limitTypes . 'GROUP by argument'; // HAVING count > 1'; + + $result = $this->dbi->tryQuery($query); + // TODO: check for false + + $return = [ + 'rows' => [], + 'sum' => [], + ]; + $insertTables = []; + $insertTablesFirst = -1; + $i = 0; + + while ($row = $result->fetchAssoc()) { + preg_match('/^(\w+)\s/', $row['argument'], $match); + $type = mb_strtolower($match[1]); + + if (! isset($return['sum'][$type])) { + $return['sum'][$type] = 0; + } + + $return['sum'][$type] += $row['#']; + + switch ($type) { + /** @noinspection PhpMissingBreakStatementInspection */ + case 'insert': + // Group inserts if selected + if ( + $removeVariables && preg_match( + '/^INSERT INTO (`|\'|"|)([^\s\\1]+)\\1/i', + $row['argument'], + $matches + ) + ) { + $insertTables[$matches[2]]++; + if ($insertTables[$matches[2]] > 1) { + $return['rows'][$insertTablesFirst]['#'] = $insertTables[$matches[2]]; + + // Add a ... to the end of this query to indicate that + // there's been other queries + $temp = $return['rows'][$insertTablesFirst]['argument']; + $return['rows'][$insertTablesFirst]['argument'] .= $this->getSuspensionPoints( + $temp[strlen($temp) - 1] + ); + + // Group this value, thus do not add to the result list + continue 2; + } + + $insertTablesFirst = $i; + $insertTables[$matches[2]] += $row['#'] - 1; + } + + // No break here + + case 'update': + // Cut off big inserts and updates, + // but append byte count therefor + if (mb_strlen($row['argument']) > 220) { + $row['argument'] = mb_substr($row['argument'], 0, 200) + . '... [' + . implode( + ' ', + (array) Util::formatByteDown( + mb_strlen($row['argument']), + 2, + 2 + ) + ) + . ']'; + } + + break; + + default: + break; + } + + $return['rows'][] = $row; + $i++; + } + + $return['sum']['TOTAL'] = array_sum($return['sum']); + $return['numRows'] = count($return['rows']); + + return $return; + } + + /** + * Return suspension points if needed + * + * @param string $lastChar Last char + * + * @return string Return suspension points if needed + */ + private function getSuspensionPoints(string $lastChar): string + { + if ($lastChar !== '.') { + return '
        ...'; + } + + return ''; + } + + /** + * Returns JSON for logging vars + * + * @param string|null $name Variable name + * @param string|null $value Variable value + * + * @return array JSON + */ + public function getJsonForLoggingVars(?string $name, ?string $value): array + { + if (isset($name, $value)) { + $escapedValue = $this->dbi->escapeString($value); + if (! is_numeric($escapedValue)) { + $escapedValue = "'" . $escapedValue . "'"; + } + + if (! preg_match('/[^a-zA-Z0-9_]+/', $name)) { + $this->dbi->query('SET GLOBAL ' . $name . ' = ' . $escapedValue); + } + } + + return $this->dbi->fetchResult( + 'SHOW GLOBAL VARIABLES WHERE Variable_name IN' + . ' ("general_log","slow_query_log","long_query_time","log_output")', + 0, + 1 + ); + } + + /** + * Returns JSON for query_analyzer + * + * @param string $database Database name + * @param string $query SQL query + * + * @return array JSON + */ + public function getJsonForQueryAnalyzer( + string $database, + string $query + ): array { + global $cached_affected_rows; + + $return = []; + + if (strlen($database) > 0) { + $this->dbi->selectDb($database); + } + + $profiling = Profiling::isSupported($this->dbi); + + if ($profiling) { + $this->dbi->query('SET PROFILING=1;'); + } + + // Do not cache query + $sqlQuery = preg_replace('/^(\s*SELECT)/i', '\\1 SQL_NO_CACHE', $query); + + $this->dbi->tryQuery($sqlQuery); + $return['affectedRows'] = $cached_affected_rows; + + $result = $this->dbi->tryQuery('EXPLAIN ' . $sqlQuery); + if ($result !== false) { + $return['explain'] = $result->fetchAllAssoc(); + } + + // In case an error happened + $return['error'] = $this->dbi->getError(); + + if ($profiling) { + $return['profiling'] = []; + $result = $this->dbi->tryQuery( + 'SELECT seq,state,duration FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=1 ORDER BY seq' + ); + if ($result !== false) { + $return['profiling'] = $result->fetchAllAssoc(); + } + } + + return $return; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Base.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Base.php new file mode 100644 index 0000000..771a62c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Base.php @@ -0,0 +1,48 @@ + 0]; + } + + /** + * Gets information about memory usage + * + * @return array with memory usage data + */ + public function memory() + { + return []; + } + + /** + * Checks whether class is supported in this environment + */ + public function supported(): bool + { + return true; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Linux.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Linux.php new file mode 100644 index 0000000..5aae88a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Linux.php @@ -0,0 +1,115 @@ + with load data + */ + public function loadavg() + { + $buf = file_get_contents('/proc/stat'); + if ($buf === false) { + $buf = ''; + } + + $pos = mb_strpos($buf, "\n"); + if ($pos === false) { + $pos = 0; + } + + $nums = preg_split( + '/\s+/', + mb_substr( + $buf, + 0, + $pos + ) + ); + + if (! is_array($nums)) { + return ['busy' => 0, 'idle' => 0]; + } + + return [ + 'busy' => (int) $nums[1] + (int) $nums[2] + (int) $nums[3], + 'idle' => (int) $nums[4], + ]; + } + + /** + * Checks whether class is supported in this environment + */ + public function supported(): bool + { + return @is_readable('/proc/meminfo') && @is_readable('/proc/stat'); + } + + /** + * Gets information about memory usage + * + * @return array with memory usage data + */ + public function memory() + { + $content = @file_get_contents('/proc/meminfo'); + if ($content === false) { + return []; + } + + preg_match_all(SysInfo::MEMORY_REGEXP, $content, $matches); + + /** @var array|false $mem */ + $mem = array_combine($matches[1], $matches[2]); + if ($mem === false) { + return []; + } + + $defaults = [ + 'MemTotal' => 0, + 'MemFree' => 0, + 'Cached' => 0, + 'Buffers' => 0, + 'SwapTotal' => 0, + 'SwapFree' => 0, + 'SwapCached' => 0, + ]; + + $mem = array_merge($defaults, $mem); + + foreach ($mem as $idx => $value) { + $mem[$idx] = intval($value); + } + + $mem['MemUsed'] = $mem['MemTotal'] - $mem['MemFree'] - $mem['Cached'] - $mem['Buffers']; + $mem['SwapUsed'] = $mem['SwapTotal'] - $mem['SwapFree'] - $mem['SwapCached']; + + return $mem; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Setup/FormProcessing.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Setup/FormProcessing.php new file mode 100644 index 0000000..61d18c2 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Setup/FormProcessing.php @@ -0,0 +1,80 @@ +fixErrors(); + $response = ResponseRenderer::getInstance(); + $response->disable(); + $response->generateHeader303('index.php' . Url::getCommonRaw()); + } + + if (! $form_display->process(false)) { + // handle form view and failed POST + echo $form_display->getDisplay(); + + return; + } + + // check for form errors + if (! $form_display->hasErrors()) { + $response = ResponseRenderer::getInstance(); + $response->disable(); + $response->generateHeader303('index.php' . Url::getCommonRaw()); + + return; + } + + // form has errors, show warning + $page = 'index'; + if (isset($_GET['page']) && in_array($_GET['page'], ['form', 'config', 'servers'], true)) { + $page = $_GET['page']; + } + + $formset = isset($_GET['formset']) && is_string($_GET['formset']) ? $_GET['formset'] : ''; + $formId = isset($_GET['id']) && is_numeric($_GET['id']) && (int) $_GET['id'] >= 1 ? (int) $_GET['id'] : 0; + if ($formId === 0 && $page === 'servers') { + // we've just added a new server, get its id + $formId = $form_display->getConfigFile()->getServerCount(); + } + + $urlParams = [ + 'page' => $page, + 'formset' => $formset, + 'id' => $formId, + ]; + + $template = new Template(); + echo $template->render('setup/error', [ + 'url_params' => $urlParams, + 'errors' => $form_display->displayErrors(), + ]); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Sql.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Sql.php new file mode 100644 index 0000000..098eef8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Sql.php @@ -0,0 +1,1811 @@ +dbi = $dbi; + $this->relation = $relation; + $this->relationCleanup = $relationCleanup; + $this->operations = $operations; + $this->transformations = $transformations; + $this->template = $template; + } + + /** + * Handle remembered sorting order, only for single table query + * + * @param string $db database name + * @param string $table table name + * @param array $analyzedSqlResults the analyzed query results + * @param string $fullSqlQuery SQL query + */ + private function handleSortOrder( + $db, + $table, + array &$analyzedSqlResults, + &$fullSqlQuery + ): void { + $tableObject = new Table($table, $db); + + if (empty($analyzedSqlResults['order'])) { + // Retrieving the name of the column we should sort after. + $sortCol = $tableObject->getUiProp(Table::PROP_SORTED_COLUMN); + if (empty($sortCol)) { + return; + } + + // Remove the name of the table from the retrieved field name. + $sortCol = str_replace( + Util::backquote($table) . '.', + '', + $sortCol + ); + + // Create the new query. + $fullSqlQuery = Query::replaceClause( + $analyzedSqlResults['statement'], + $analyzedSqlResults['parser']->list, + 'ORDER BY ' . $sortCol + ); + + // TODO: Avoid reparsing the query. + $analyzedSqlResults = Query::getAll($fullSqlQuery); + } else { + // Store the remembered table into session. + $tableObject->setUiProp( + Table::PROP_SORTED_COLUMN, + Query::getClause( + $analyzedSqlResults['statement'], + $analyzedSqlResults['parser']->list, + 'ORDER BY' + ) + ); + } + } + + /** + * Append limit clause to SQL query + * + * @param array $analyzedSqlResults the analyzed query results + * + * @return string limit clause appended SQL query + */ + private function getSqlWithLimitClause(array $analyzedSqlResults) + { + return Query::replaceClause( + $analyzedSqlResults['statement'], + $analyzedSqlResults['parser']->list, + 'LIMIT ' . $_SESSION['tmpval']['pos'] . ', ' + . $_SESSION['tmpval']['max_rows'] + ); + } + + /** + * Verify whether the result set has columns from just one table + * + * @param array $fieldsMeta meta fields + */ + private function resultSetHasJustOneTable(array $fieldsMeta): bool + { + $justOneTable = true; + $prevTable = ''; + foreach ($fieldsMeta as $oneFieldMeta) { + if ($oneFieldMeta->table != '' && $prevTable != '' && $oneFieldMeta->table != $prevTable) { + $justOneTable = false; + } + + if ($oneFieldMeta->table == '') { + continue; + } + + $prevTable = $oneFieldMeta->table; + } + + return $justOneTable && $prevTable != ''; + } + + /** + * Verify whether the result set contains all the columns + * of at least one unique key + * + * @param string $db database name + * @param string $table table name + * @param array $fieldsMeta meta fields + */ + private function resultSetContainsUniqueKey(string $db, string $table, array $fieldsMeta): bool + { + $columns = $this->dbi->getColumns($db, $table); + $resultSetColumnNames = []; + foreach ($fieldsMeta as $oneMeta) { + $resultSetColumnNames[] = $oneMeta->name; + } + + foreach (Index::getFromTable($table, $db) as $index) { + if (! $index->isUnique()) { + continue; + } + + $indexColumns = $index->getColumns(); + $numberFound = 0; + foreach (array_keys($indexColumns) as $indexColumnName) { + if ( + ! in_array($indexColumnName, $resultSetColumnNames) + && in_array($indexColumnName, $columns) + && ! str_contains($columns[$indexColumnName]['Extra'], 'INVISIBLE') + ) { + continue; + } + + $numberFound++; + } + + if ($numberFound == count($indexColumns)) { + return true; + } + } + + return false; + } + + /** + * Get the HTML for relational column dropdown + * During grid edit, if we have a relational field, returns the html for the + * dropdown + * + * @param string $db current database + * @param string $table current table + * @param string $column current column + * @param string $currentValue current selected value + * + * @return string html for the dropdown + */ + public function getHtmlForRelationalColumnDropdown($db, $table, $column, $currentValue) + { + $foreigners = $this->relation->getForeigners($db, $table, $column); + + $foreignData = $this->relation->getForeignData($foreigners, $column, false, '', ''); + + if ($foreignData['disp_row'] == null) { + //Handle the case when number of values + //is more than $cfg['ForeignKeyMaxLimit'] + $urlParams = [ + 'db' => $db, + 'table' => $table, + 'field' => $column, + ]; + + $dropdown = $this->template->render('sql/relational_column_dropdown', [ + 'current_value' => $_POST['curr_value'], + 'params' => $urlParams, + ]); + } else { + $dropdown = $this->relation->foreignDropdown( + $foreignData['disp_row'], + $foreignData['foreign_field'], + $foreignData['foreign_display'], + $currentValue, + $GLOBALS['cfg']['ForeignKeyMaxLimit'] + ); + $dropdown = ''; + } + + return $dropdown; + } + + /** @return array */ + private function getDetailedProfilingStats(array $profilingResults): array + { + $profiling = [ + 'total_time' => 0, + 'states' => [], + 'chart' => [], + 'profile' => [], + ]; + + foreach ($profilingResults as $oneResult) { + $status = ucwords($oneResult['Status']); + $profiling['total_time'] += $oneResult['Duration']; + $profiling['profile'][] = [ + 'status' => $status, + 'duration' => Util::formatNumber($oneResult['Duration'], 3, 1), + 'duration_raw' => $oneResult['Duration'], + ]; + + if (! isset($profiling['states'][$status])) { + $profiling['states'][$status] = [ + 'total_time' => $oneResult['Duration'], + 'calls' => 1, + ]; + $profiling['chart'][$status] = $oneResult['Duration']; + } else { + $profiling['states'][$status]['calls']++; + $profiling['chart'][$status] += $oneResult['Duration']; + } + } + + return $profiling; + } + + /** + * Get value of a column for a specific row (marked by $whereClause) + */ + public function getFullValuesForSetColumn( + string $db, + string $table, + string $column, + string $whereClause + ): string { + $row = $this->dbi->fetchSingleRow(sprintf( + 'SELECT `%s` FROM `%s`.`%s` WHERE %s', + $column, + $db, + $table, + $whereClause + )); + + if ($row === null) { + return ''; + } + + return $row[$column]; + } + + /** + * Get all the values for a enum column or set column in a table + * + * @param string $db current database + * @param string $table current table + * @param string $column current column + * + * @return array|null array containing the value list for the column, null on failure + */ + public function getValuesForColumn(string $db, string $table, string $column): ?array + { + $fieldInfoQuery = QueryGenerator::getColumnsSql($db, $table, $this->dbi->escapeString($column)); + + $fieldInfoResult = $this->dbi->fetchResult($fieldInfoQuery); + + if (! isset($fieldInfoResult[0])) { + return null; + } + + return Util::parseEnumSetValues($fieldInfoResult[0]['Type']); + } + + /** + * Function to check whether to remember the sorting order or not + * + * @param array $analyzedSqlResults the analyzed query and other variables set + * after analyzing the query + */ + private function isRememberSortingOrder(array $analyzedSqlResults): bool + { + return isset($analyzedSqlResults['select_expr'], $analyzedSqlResults['select_tables']) + && $GLOBALS['cfg']['RememberSorting'] + && ! ($analyzedSqlResults['is_count'] + || $analyzedSqlResults['is_export'] + || $analyzedSqlResults['is_func'] + || $analyzedSqlResults['is_analyse']) + && $analyzedSqlResults['select_from'] + && (empty($analyzedSqlResults['select_expr']) + || ((count($analyzedSqlResults['select_expr']) === 1) + && ($analyzedSqlResults['select_expr'][0] === '*'))) + && count($analyzedSqlResults['select_tables']) === 1; + } + + /** + * Function to check whether the LIMIT clause should be appended or not + * + * @param array $analyzedSqlResults the analyzed query and other variables set + * after analyzing the query + */ + private function isAppendLimitClause(array $analyzedSqlResults): bool + { + // Assigning LIMIT clause to an syntactically-wrong query + // is not needed. Also we would want to show the true query + // and the true error message to the query executor + + return (isset($analyzedSqlResults['parser']) + && count($analyzedSqlResults['parser']->errors) === 0) + && ($_SESSION['tmpval']['max_rows'] !== 'all') + && ! ($analyzedSqlResults['is_export'] + || $analyzedSqlResults['is_analyse']) + && ($analyzedSqlResults['select_from'] + || $analyzedSqlResults['is_subquery']) + && empty($analyzedSqlResults['limit']); + } + + /** + * Function to check whether this query is for just browsing + * + * @param array $analyzedSqlResults the analyzed query and other variables set + * after analyzing the query + * @param bool|null $findRealEnd whether the real end should be found + */ + public static function isJustBrowsing(array $analyzedSqlResults, ?bool $findRealEnd): bool + { + return ! $analyzedSqlResults['is_group'] + && ! $analyzedSqlResults['is_func'] + && empty($analyzedSqlResults['union']) + && empty($analyzedSqlResults['distinct']) + && $analyzedSqlResults['select_from'] + && (count($analyzedSqlResults['select_tables']) === 1) + && (empty($analyzedSqlResults['statement']->where) + || (count($analyzedSqlResults['statement']->where) === 1 + && $analyzedSqlResults['statement']->where[0]->expr === '1')) + && empty($analyzedSqlResults['group']) + && ! isset($findRealEnd) + && ! $analyzedSqlResults['is_subquery'] + && ! $analyzedSqlResults['join'] + && empty($analyzedSqlResults['having']); + } + + /** + * Function to check whether the related transformation information should be deleted + * + * @param array $analyzedSqlResults the analyzed query and other variables set + * after analyzing the query + */ + private function isDeleteTransformationInfo(array $analyzedSqlResults): bool + { + return ! empty($analyzedSqlResults['querytype']) + && (($analyzedSqlResults['querytype'] === 'ALTER') + || ($analyzedSqlResults['querytype'] === 'DROP')); + } + + /** + * Function to check whether the user has rights to drop the database + * + * @param array $analyzedSqlResults the analyzed query and other variables set + * after analyzing the query + * @param bool $allowUserDropDatabase whether the user is allowed to drop db + * @param bool $isSuperUser whether this user is a superuser + */ + public function hasNoRightsToDropDatabase( + array $analyzedSqlResults, + $allowUserDropDatabase, + $isSuperUser + ): bool { + return ! $allowUserDropDatabase + && isset($analyzedSqlResults['drop_database']) + && $analyzedSqlResults['drop_database'] + && ! $isSuperUser; + } + + /** + * Function to set a column property + * + * @param Table $table Table instance + * @param string $requestIndex col_order|col_visib + * + * @return bool|Message + */ + public function setColumnProperty(Table $table, string $requestIndex) + { + $propertyValue = array_map('intval', explode(',', $_POST[$requestIndex])); + switch ($requestIndex) { + case 'col_order': + $propertyToSet = Table::PROP_COLUMN_ORDER; + break; + case 'col_visib': + $propertyToSet = Table::PROP_COLUMN_VISIB; + break; + default: + $propertyToSet = ''; + } + + return $table->setUiProp($propertyToSet, $propertyValue, $_POST['table_create_time'] ?? null); + } + + /** + * Function to find the real end of rows + * + * @param string $db the current database + * @param string $table the current table + * + * @return mixed the number of rows if "retain" param is true, otherwise true + */ + public function findRealEndOfRows($db, $table) + { + $unlimNumRows = $this->dbi->getTable($db, $table)->countRecords(true); + $_SESSION['tmpval']['pos'] = $this->getStartPosToDisplayRow($unlimNumRows); + + return $unlimNumRows; + } + + /** + * Function to get the default sql query for browsing page + * + * @param string $db the current database + * @param string $table the current table + * + * @return string the default $sql_query for browse page + */ + public function getDefaultSqlQueryForBrowse($db, $table): string + { + $bookmark = Bookmark::get($this->dbi, $GLOBALS['cfg']['Server']['user'], $db, $table, 'label', false, true); + + if ($bookmark !== null && $bookmark->getQuery() !== '') { + $GLOBALS['using_bookmark_message'] = Message::notice( + __('Using bookmark "%s" as default browse query.') + ); + $GLOBALS['using_bookmark_message']->addParam($table); + $GLOBALS['using_bookmark_message']->addHtml( + MySQLDocumentation::showDocumentation('faq', 'faq6-22') + ); + + return $bookmark->getQuery(); + } + + $defaultOrderByClause = ''; + + if ( + isset($GLOBALS['cfg']['TablePrimaryKeyOrder']) + && ($GLOBALS['cfg']['TablePrimaryKeyOrder'] !== 'NONE') + ) { + $primaryKey = null; + $primary = Index::getPrimary($table, $db); + + if ($primary !== false) { + $primarycols = $primary->getColumns(); + + foreach ($primarycols as $col) { + $primaryKey = $col->getName(); + break; + } + + if ($primaryKey !== null) { + $defaultOrderByClause = ' ORDER BY ' + . Util::backquote($table) . '.' + . Util::backquote($primaryKey) . ' ' + . $GLOBALS['cfg']['TablePrimaryKeyOrder']; + } + } + } + + return 'SELECT * FROM ' . Util::backquote($table) . $defaultOrderByClause; + } + + /** + * Responds an error when an error happens when executing the query + * + * @param bool $isGotoFile whether goto file or not + * @param string $error error after executing the query + * @param string $fullSqlQuery full sql query + */ + private function handleQueryExecuteError($isGotoFile, $error, $fullSqlQuery): void + { + if ($isGotoFile) { + $message = Message::rawError($error); + $response = ResponseRenderer::getInstance(); + $response->setRequestStatus(false); + $response->addJSON('message', $message); + } else { + Generator::mysqlDie($error, $fullSqlQuery, false); + } + + exit; + } + + /** + * Function to store the query as a bookmark + * + * @param string $db the current database + * @param string $bookmarkUser the bookmarking user + * @param string $sqlQueryForBookmark the query to be stored in bookmark + * @param string $bookmarkLabel bookmark label + * @param bool $bookmarkReplace whether to replace existing bookmarks + */ + public function storeTheQueryAsBookmark( + ?BookmarkFeature $bookmarkFeature, + $db, + $bookmarkUser, + $sqlQueryForBookmark, + $bookmarkLabel, + bool $bookmarkReplace + ): void { + $bfields = [ + 'bkm_database' => $db, + 'bkm_user' => $bookmarkUser, + 'bkm_sql_query' => $sqlQueryForBookmark, + 'bkm_label' => $bookmarkLabel, + ]; + + // Should we replace bookmark? + if ($bookmarkReplace && $bookmarkFeature !== null) { + $bookmarks = Bookmark::getList($bookmarkFeature, $this->dbi, $GLOBALS['cfg']['Server']['user'], $db); + foreach ($bookmarks as $bookmark) { + if ($bookmark->getLabel() != $bookmarkLabel) { + continue; + } + + $bookmark->delete(); + } + } + + $bookmark = Bookmark::createBookmark( + $this->dbi, + $bfields, + isset($_POST['bkm_all_users']) + ); + + if ($bookmark === false) { + return; + } + + $bookmark->save(); + } + + /** + * Function to get the affected or changed number of rows after executing a query + * + * @param bool $isAffected whether the query affected a table + * @param ResultInterface|false $result results of executing the query + * + * @return int|string number of rows affected or changed + * @psalm-return int|numeric-string + */ + private function getNumberOfRowsAffectedOrChanged($isAffected, $result) + { + if ($isAffected) { + return $this->dbi->affectedRows(); + } + + if ($result) { + return $result->numRows(); + } + + return 0; + } + + /** + * Checks if the current database has changed + * This could happen if the user sends a query like "USE `database`;" + * + * @param string $db the database in the query + * + * @return bool whether to reload the navigation(1) or not(0) + */ + private function hasCurrentDbChanged(string $db): bool + { + if ($db === '') { + return false; + } + + $currentDb = $this->dbi->fetchValue('SELECT DATABASE()'); + + // $current_db is false, except when a USE statement was sent + return ($currentDb != false) && ($db !== $currentDb); + } + + /** + * If a table, database or column gets dropped, clean comments. + * + * @param string $db current database + * @param string $table current table + * @param string|null $column current column + * @param bool $purge whether purge set or not + */ + private function cleanupRelations(string $db, string $table, ?string $column, bool $purge): void + { + if (! $purge || $db === '') { + return; + } + + if ($table !== '') { + if ($column !== null && $column !== '') { + $this->relationCleanup->column($db, $table, $column); + } else { + $this->relationCleanup->table($db, $table); + } + } else { + $this->relationCleanup->database($db); + } + } + + /** + * Function to count the total number of rows for the same 'SELECT' query without + * the 'LIMIT' clause that may have been programmatically added + * + * @param int|string $numRows number of rows affected/changed by the query + * @param bool $justBrowsing whether just browsing or not + * @param string $db the current database + * @param string $table the current table + * @param array $analyzedSqlResults the analyzed query and other variables set after analyzing the query + * @psalm-param int|numeric-string $numRows + * + * @return int|string unlimited number of rows + * @psalm-return int|numeric-string + */ + private function countQueryResults( + $numRows, + bool $justBrowsing, + string $db, + string $table, + array $analyzedSqlResults + ) { + /* Shortcut for not analyzed/empty query */ + if ($analyzedSqlResults === []) { + return 0; + } + + if (! $this->isAppendLimitClause($analyzedSqlResults)) { + // if we did not append a limit, set this to get a correct + // "Showing rows..." message + // $_SESSION['tmpval']['max_rows'] = 'all'; + $unlimNumRows = $numRows; + } elseif ($_SESSION['tmpval']['max_rows'] > $numRows) { + // When user has not defined a limit in query and total rows in + // result are less than max_rows to display, there is no need + // to count total rows for that query again + $unlimNumRows = $_SESSION['tmpval']['pos'] + $numRows; + } elseif ($analyzedSqlResults['querytype'] === 'SELECT' || $analyzedSqlResults['is_subquery']) { + // c o u n t q u e r y + + // If we are "just browsing", there is only one table (and no join), + // and no WHERE clause (or just 'WHERE 1 '), + // we do a quick count (which uses MaxExactCount) because + // SQL_CALC_FOUND_ROWS is not quick on large InnoDB tables + + // However, do not count again if we did it previously + // due to $find_real_end == true + if ($justBrowsing) { + // Get row count (is approximate for InnoDB) + $unlimNumRows = $this->dbi->getTable($db, $table)->countRecords(); + /** + * @todo Can we know at this point that this is InnoDB, + * (in this case there would be no need for getting + * an exact count)? + */ + if ($unlimNumRows < $GLOBALS['cfg']['MaxExactCount']) { + // Get the exact count if approximate count + // is less than MaxExactCount + /** + * @todo In countRecords(), MaxExactCount is also verified, + * so can we avoid checking it twice? + */ + $unlimNumRows = $this->dbi->getTable($db, $table) + ->countRecords(true); + } + } else { + $statement = $analyzedSqlResults['statement']; + $tokenList = $analyzedSqlResults['parser']->list; + $replaces = [ + // Remove ORDER BY to decrease unnecessary sorting time + [ + 'ORDER BY', + '', + ], + // Removes LIMIT clause that might have been added + [ + 'LIMIT', + '', + ], + ]; + $countQuery = 'SELECT COUNT(*) FROM (' . Query::replaceClauses( + $statement, + $tokenList, + $replaces + ) . ') as cnt'; + $unlimNumRows = $this->dbi->fetchValue($countQuery); + if ($unlimNumRows === false) { + $unlimNumRows = 0; + } + } + } else {// not $is_select + $unlimNumRows = 0; + } + + return $unlimNumRows; + } + + /** + * Function to handle all aspects relating to executing the query + * + * @param array $analyzedSqlResults analyzed sql results + * @param string $fullSqlQuery full sql query + * @param bool $isGotoFile whether to go to a file + * @param string $db current database + * @param string|null $table current table + * @param bool|null $findRealEnd whether to find the real end + * @param string|null $sqlQueryForBookmark sql query to be stored as bookmark + * @param array|null $extraData extra data + * + * @psalm-return array{ + * ResultInterface|false|null, + * int|numeric-string, + * int|numeric-string, + * array|null, + * array|null + * } + */ + private function executeTheQuery( + array $analyzedSqlResults, + $fullSqlQuery, + $isGotoFile, + string $db, + ?string $table, + ?bool $findRealEnd, + ?string $sqlQueryForBookmark, + $extraData + ): array { + $response = ResponseRenderer::getInstance(); + $response->getHeader()->getMenu()->setTable($table ?? ''); + + // Only if we ask to see the php code + if (isset($GLOBALS['show_as_php'])) { + $result = null; + $numRows = 0; + $unlimNumRows = 0; + $profilingResults = null; + } else { // If we don't ask to see the php code + Profiling::enable($this->dbi); + + if (! defined('TESTSUITE')) { + // close session in case the query takes too long + session_write_close(); + } + + $result = $this->dbi->tryQuery($fullSqlQuery); + $GLOBALS['querytime'] = $this->dbi->lastQueryExecutionTime; + + if (! defined('TESTSUITE')) { + // reopen session + session_start(); + } + + // Displays an error message if required and stop parsing the script + $error = $this->dbi->getError(); + if ($error && $GLOBALS['cfg']['IgnoreMultiSubmitErrors']) { + $extraData['error'] = $error; + } elseif ($error) { + $this->handleQueryExecuteError($isGotoFile, $error, $fullSqlQuery); + } + + // If there are no errors and bookmarklabel was given, + // store the query as a bookmark + if (! empty($_POST['bkm_label']) && $sqlQueryForBookmark) { + $bookmarkFeature = $this->relation->getRelationParameters()->bookmarkFeature; + $this->storeTheQueryAsBookmark( + $bookmarkFeature, + $db, + $bookmarkFeature !== null ? $GLOBALS['cfg']['Server']['user'] : '', + $sqlQueryForBookmark, + $_POST['bkm_label'], + isset($_POST['bkm_replace']) + ); + } + + // Gets the number of rows affected/returned + // (This must be done immediately after the query because + // mysql_affected_rows() reports about the last query done) + $numRows = $this->getNumberOfRowsAffectedOrChanged($analyzedSqlResults['is_affected'], $result); + + $profilingResults = Profiling::getInformation($this->dbi); + + $justBrowsing = self::isJustBrowsing($analyzedSqlResults, $findRealEnd ?? null); + + $unlimNumRows = $this->countQueryResults($numRows, $justBrowsing, $db, $table ?? '', $analyzedSqlResults); + + $this->cleanupRelations($db, $table ?? '', $_POST['dropped_column'] ?? null, ! empty($_POST['purge'])); + + if ( + isset($_POST['dropped_column']) + && $db !== '' && $table !== null && $table !== '' + ) { + // to refresh the list of indexes (Ajax mode) + + $indexes = Index::getFromTable($table, $db); + $indexesDuplicates = Index::findDuplicates($table, $db); + $template = new Template(); + + $extraData['indexes_list'] = $template->render('indexes', [ + 'url_params' => $GLOBALS['urlParams'], + 'indexes' => $indexes, + 'indexes_duplicates' => $indexesDuplicates, + ]); + } + } + + return [ + $result, + $numRows, + $unlimNumRows, + $profilingResults, + $extraData, + ]; + } + + /** + * Delete related transformation information + * + * @param string $db current database + * @param string $table current table + * @param array $analyzedSqlResults analyzed sql results + */ + private function deleteTransformationInfo(string $db, string $table, array $analyzedSqlResults): void + { + if (! isset($analyzedSqlResults['statement'])) { + return; + } + + $statement = $analyzedSqlResults['statement']; + if ($statement instanceof AlterStatement) { + if ( + ! empty($statement->altered[0]) + && $statement->altered[0]->options->has('DROP') + && ! empty($statement->altered[0]->field->column) + ) { + $this->transformations->clear($db, $table, $statement->altered[0]->field->column); + } + } elseif ($statement instanceof DropStatement) { + $this->transformations->clear($db, $table); + } + } + + /** + * Function to get the message for the no rows returned case + * + * @param string|null $messageToShow message to show + * @param array $analyzedSqlResults analyzed sql results + * @param int|string $numRows number of rows + */ + private function getMessageForNoRowsReturned( + ?string $messageToShow, + array $analyzedSqlResults, + $numRows + ): Message { + if ($analyzedSqlResults['querytype'] === 'DELETE"') { + $message = Message::getMessageForDeletedRows($numRows); + } elseif ($analyzedSqlResults['is_insert']) { + if ($analyzedSqlResults['querytype'] === 'REPLACE') { + // For REPLACE we get DELETED + INSERTED row count, + // so we have to call it affected + $message = Message::getMessageForAffectedRows($numRows); + } else { + $message = Message::getMessageForInsertedRows($numRows); + } + + $insertId = $this->dbi->insertId(); + if ($insertId !== 0) { + // insert_id is id of FIRST record inserted in one insert, + // so if we inserted multiple rows, we had to increment this + $message->addText('[br]'); + // need to use a temporary because the Message class + // currently supports adding parameters only to the first + // message + $inserted = Message::notice(__('Inserted row id: %1$d')); + $inserted->addParam($insertId + $numRows - 1); + $message->addMessage($inserted); + } + } elseif ($analyzedSqlResults['is_affected']) { + $message = Message::getMessageForAffectedRows($numRows); + + // Ok, here is an explanation for the !$is_select. + // The form generated by PhpMyAdmin\SqlQueryForm + // and /database/sql has many submit buttons + // on the same form, and some confusion arises from the + // fact that $message_to_show is sent for every case. + // The $message_to_show containing a success message and sent with + // the form should not have priority over errors + } elseif ($messageToShow && $analyzedSqlResults['querytype'] !== 'SELECT') { + $message = Message::rawSuccess(htmlspecialchars($messageToShow)); + } elseif (! empty($GLOBALS['show_as_php'])) { + $message = Message::success(__('Showing as PHP code')); + } elseif (isset($GLOBALS['show_as_php'])) { + /* User disable showing as PHP, query is only displayed */ + $message = Message::notice(__('Showing SQL query')); + } else { + $message = Message::success( + __('MySQL returned an empty result set (i.e. zero rows).') + ); + } + + if (isset($GLOBALS['querytime'])) { + $queryTime = Message::notice( + '(' . __('Query took %01.4f seconds.') . ')' + ); + $queryTime->addParam($GLOBALS['querytime']); + $message->addMessage($queryTime); + } + + // In case of ROLLBACK, notify the user. + if (isset($_POST['rollback_query'])) { + $message->addText(__('[ROLLBACK occurred.]')); + } + + return $message; + } + + /** + * Function to respond back when the query returns zero rows + * This method is called + * 1-> When browsing an empty table + * 2-> When executing a query on a non empty table which returns zero results + * 3-> When executing a query on an empty table + * 4-> When executing an INSERT, UPDATE, DELETE query from the SQL tab + * 5-> When deleting a row from BROWSE tab + * 6-> When searching using the SEARCH tab which returns zero results + * 7-> When changing the structure of the table except change operation + * + * @param array $analyzedSqlResults analyzed sql results + * @param string $db current database + * @param string|null $table current table + * @param string|null $messageToShow message to show + * @param int|string $numRows number of rows + * @param DisplayResults $displayResultsObject DisplayResult instance + * @param array|null $extraData extra data + * @param array|null $profilingResults profiling results + * @param ResultInterface|false|null $result executed query results + * @param string $sqlQuery sql query + * @param string|null $completeQuery complete sql query + * @psalm-param int|numeric-string $numRows + * + * @return string html + */ + private function getQueryResponseForNoResultsReturned( + array $analyzedSqlResults, + string $db, + ?string $table, + ?string $messageToShow, + $numRows, + $displayResultsObject, + ?array $extraData, + ?array $profilingResults, + $result, + $sqlQuery, + ?string $completeQuery + ): string { + if ($this->isDeleteTransformationInfo($analyzedSqlResults)) { + $this->deleteTransformationInfo($db, $table ?? '', $analyzedSqlResults); + } + + if (isset($extraData['error'])) { + $message = Message::rawError($extraData['error']); + } else { + $message = $this->getMessageForNoRowsReturned($messageToShow, $analyzedSqlResults, $numRows); + } + + $queryMessage = Generator::getMessage($message, $GLOBALS['sql_query'], 'success'); + + if (isset($GLOBALS['show_as_php'])) { + return $queryMessage; + } + + if (! empty($GLOBALS['reload'])) { + $extraData['reload'] = 1; + $extraData['db'] = $GLOBALS['db']; + } + + // For ajax requests add message and sql_query as JSON + if (empty($_REQUEST['ajax_page_request'])) { + $extraData['message'] = $message; + if ($GLOBALS['cfg']['ShowSQL']) { + $extraData['sql_query'] = $queryMessage; + } + } + + $response = ResponseRenderer::getInstance(); + $response->addJSON($extraData ?? []); + + if (empty($analyzedSqlResults['is_select']) || isset($extraData['error'])) { + return $queryMessage; + } + + $displayParts = [ + 'edit_lnk' => null, + 'del_lnk' => null, + 'sort_lnk' => '1', + 'nav_bar' => '0', + 'bkm_form' => '1', + 'text_btn' => '1', + 'pview_lnk' => '1', + ]; + + $sqlQueryResultsTable = $this->getHtmlForSqlQueryResultsTable( + $displayResultsObject, + $displayParts, + false, + 0, + $numRows, + null, + $result, + $analyzedSqlResults, + true + ); + + $profilingChart = ''; + if ($profilingResults !== null) { + $header = $response->getHeader(); + $scripts = $header->getScripts(); + $scripts->addFile('sql.js'); + + $profiling = $this->getDetailedProfilingStats($profilingResults); + $profilingChart = $this->template->render('sql/profiling_chart', ['profiling' => $profiling]); + } + + $bookmark = ''; + $bookmarkFeature = $this->relation->getRelationParameters()->bookmarkFeature; + if ( + $bookmarkFeature !== null + && empty($_GET['id_bookmark']) + && $sqlQuery + ) { + $bookmark = $this->template->render('sql/bookmark', [ + 'db' => $db, + 'goto' => Url::getFromRoute('/sql', [ + 'db' => $db, + 'table' => $table, + 'sql_query' => $sqlQuery, + 'id_bookmark' => 1, + ]), + 'user' => $GLOBALS['cfg']['Server']['user'], + 'sql_query' => $completeQuery ?? $sqlQuery, + ]); + } + + return $this->template->render('sql/no_results_returned', [ + 'message' => $queryMessage, + 'sql_query_results_table' => $sqlQueryResultsTable, + 'profiling_chart' => $profilingChart, + 'bookmark' => $bookmark, + 'db' => $db, + 'table' => $table, + 'sql_query' => $sqlQuery, + 'is_procedure' => ! empty($analyzedSqlResults['procedure']), + ]); + } + + /** + * Function to send response for ajax grid edit + * + * @param ResultInterface $result result of the executed query + */ + private function getResponseForGridEdit(ResultInterface $result): void + { + $row = $result->fetchRow(); + $fieldsMeta = $this->dbi->getFieldsMeta($result); + + if (isset($fieldsMeta[0]) && $fieldsMeta[0]->isBinary()) { + $row[0] = bin2hex($row[0]); + } + + $response = ResponseRenderer::getInstance(); + $response->addJSON('value', $row[0]); + } + + /** + * Returns a message for successful creation of a bookmark or null if a bookmark + * was not created + */ + private function getBookmarkCreatedMessage(): string + { + $output = ''; + if (isset($_GET['label'])) { + $message = Message::success( + __('Bookmark %s has been created.') + ); + $message->addParam($_GET['label']); + $output = $message->getDisplay(); + } + + return $output; + } + + /** + * Function to get html for the sql query results table + * + * @param DisplayResults $displayResultsObject instance of DisplayResult + * @param array $displayParts the parts to display + * @param bool $editable whether the result table is + * editable or not + * @param int|string $unlimNumRows unlimited number of rows + * @param int|string $numRows number of rows + * @param array|null $showTable table definitions + * @param ResultInterface|false|null $result result of the executed query + * @param array $analyzedSqlResults analyzed sql results + * @param bool $isLimitedDisplay Show only limited operations or not + * @psalm-param int|numeric-string $unlimNumRows + * @psalm-param int|numeric-string $numRows + */ + private function getHtmlForSqlQueryResultsTable( + $displayResultsObject, + array $displayParts, + $editable, + $unlimNumRows, + $numRows, + ?array $showTable, + $result, + array $analyzedSqlResults, + $isLimitedDisplay = false + ): string { + $printView = isset($_POST['printview']) && $_POST['printview'] == '1' ? '1' : null; + $tableHtml = ''; + $isBrowseDistinct = ! empty($_POST['is_browse_distinct']); + + if ($analyzedSqlResults['is_procedure']) { + do { + if ($result === null) { + $result = $this->dbi->storeResult(); + } + + if ($result === false) { + $result = null; + continue; + } + + $numRows = $result->numRows(); + + if ($numRows > 0) { + $fieldsMeta = $this->dbi->getFieldsMeta($result); + $fieldsCount = count($fieldsMeta); + + $displayResultsObject->setProperties( + $numRows, + $fieldsMeta, + $analyzedSqlResults['is_count'], + $analyzedSqlResults['is_export'], + $analyzedSqlResults['is_func'], + $analyzedSqlResults['is_analyse'], + $numRows, + $fieldsCount, + $GLOBALS['querytime'], + $GLOBALS['text_dir'], + $analyzedSqlResults['is_maint'], + $analyzedSqlResults['is_explain'], + $analyzedSqlResults['is_show'], + $showTable, + $printView, + $editable, + $isBrowseDistinct + ); + + $displayParts = [ + 'edit_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, + 'del_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, + 'sort_lnk' => '1', + 'nav_bar' => '1', + 'bkm_form' => '1', + 'text_btn' => '1', + 'pview_lnk' => '1', + ]; + + $tableHtml .= $displayResultsObject->getTable( + $result, + $displayParts, + $analyzedSqlResults, + $isLimitedDisplay + ); + } + + $result = null; + } while ($this->dbi->moreResults() && $this->dbi->nextResult()); + } else { + $fieldsMeta = []; + if (isset($result) && ! is_bool($result)) { + $fieldsMeta = $this->dbi->getFieldsMeta($result); + } + + $fieldsCount = count($fieldsMeta); + $_SESSION['is_multi_query'] = false; + $displayResultsObject->setProperties( + $unlimNumRows, + $fieldsMeta, + $analyzedSqlResults['is_count'], + $analyzedSqlResults['is_export'], + $analyzedSqlResults['is_func'], + $analyzedSqlResults['is_analyse'], + $numRows, + $fieldsCount, + $GLOBALS['querytime'], + $GLOBALS['text_dir'], + $analyzedSqlResults['is_maint'], + $analyzedSqlResults['is_explain'], + $analyzedSqlResults['is_show'], + $showTable, + $printView, + $editable, + $isBrowseDistinct + ); + + if (! is_bool($result)) { + $tableHtml .= $displayResultsObject->getTable( + $result, + $displayParts, + $analyzedSqlResults, + $isLimitedDisplay + ); + } + } + + return $tableHtml; + } + + /** + * Function to get html for the previous query if there is such. + * + * @param string|null $displayQuery display query + * @param bool $showSql whether to show sql + * @param array $sqlData sql data + * @param Message|string $displayMessage display message + */ + private function getHtmlForPreviousUpdateQuery( + ?string $displayQuery, + bool $showSql, + array $sqlData, + $displayMessage + ): string { + $output = ''; + if ($displayQuery !== null && $showSql && $sqlData === []) { + $output = Generator::getMessage($displayMessage, $displayQuery, 'success'); + } + + return $output; + } + + /** + * To get the message if a column index is missing. If not will return null + * + * @param string|null $table current table + * @param string $database current database + * @param bool $editable whether the results table can be editable or not + * @param bool $hasUniqueKey whether there is a unique key + */ + private function getMessageIfMissingColumnIndex( + ?string $table, + string $database, + bool $editable, + bool $hasUniqueKey + ): string { + if ($table === null) { + return ''; + } + + $output = ''; + if (Utilities::isSystemSchema($database) || ! $editable) { + $output = Message::notice( + sprintf( + __( + 'Current selection does not contain a unique column.' + . ' Grid edit, checkbox, Edit, Copy and Delete features' + . ' are not available. %s' + ), + MySQLDocumentation::showDocumentation( + 'config', + 'cfg_RowActionLinksWithoutUnique' + ) + ) + )->getDisplay(); + } elseif (! $hasUniqueKey) { + $output = Message::notice( + sprintf( + __( + 'Current selection does not contain a unique column.' + . ' Grid edit, Edit, Copy and Delete features may result in' + . ' undesired behavior. %s' + ), + MySQLDocumentation::showDocumentation( + 'config', + 'cfg_RowActionLinksWithoutUnique' + ) + ) + )->getDisplay(); + } + + return $output; + } + + /** + * Function to display results when the executed query returns non empty results + * + * @param ResultInterface|false|null $result executed query results + * @param array $analyzedSqlResults analysed sql results + * @param string $db current database + * @param string|null $table current table + * @param array|null $sqlData sql data + * @param DisplayResults $displayResultsObject Instance of DisplayResults + * @param int|string $unlimNumRows unlimited number of rows + * @param int|string $numRows number of rows + * @param string|null $dispQuery display query + * @param Message|string|null $dispMessage display message + * @param array|null $profilingResults profiling results + * @param string $sqlQuery sql query + * @param string|null $completeQuery complete sql query + * @psalm-param int|numeric-string $unlimNumRows + * @psalm-param int|numeric-string $numRows + * + * @return string html + */ + private function getQueryResponseForResultsReturned( + $result, + array $analyzedSqlResults, + string $db, + ?string $table, + ?array $sqlData, + $displayResultsObject, + $unlimNumRows, + $numRows, + ?string $dispQuery, + $dispMessage, + ?array $profilingResults, + $sqlQuery, + ?string $completeQuery + ): string { + global $showtable; + + // If we are retrieving the full value of a truncated field or the original + // value of a transformed field, show it here + if (isset($_POST['grid_edit']) && $_POST['grid_edit'] == true && is_object($result)) { + $this->getResponseForGridEdit($result); + exit; + } + + // Gets the list of fields properties + $fieldsMeta = []; + if ($result !== null && ! is_bool($result)) { + $fieldsMeta = $this->dbi->getFieldsMeta($result); + } + + // Should be initialized these parameters before parsing + if (! is_array($showtable)) { + $showtable = null; + } + + $response = ResponseRenderer::getInstance(); + $header = $response->getHeader(); + $scripts = $header->getScripts(); + + $justOneTable = $this->resultSetHasJustOneTable($fieldsMeta); + + // hide edit and delete links: + // - for information_schema + // - if the result set does not contain all the columns of a unique key + // (unless this is an updatable view) + // - if the SELECT query contains a join or a subquery + + $updatableView = false; + + $statement = $analyzedSqlResults['statement'] ?? null; + if ($statement instanceof SelectStatement) { + if ($statement->expr && $statement->expr[0]->expr === '*' && $table) { + $_table = new Table($table, $db); + $updatableView = $_table->isUpdatableView(); + } + + if ( + $analyzedSqlResults['join'] + || $analyzedSqlResults['is_subquery'] + || count($analyzedSqlResults['select_tables']) !== 1 + ) { + $justOneTable = false; + } + } + + $hasUnique = $table && $this->resultSetContainsUniqueKey($db, $table, $fieldsMeta); + + $editable = ($hasUnique + || $GLOBALS['cfg']['RowActionLinksWithoutUnique'] + || $updatableView) + && $justOneTable + && ! Utilities::isSystemSchema($db); + + $_SESSION['tmpval']['possible_as_geometry'] = $editable; + + $displayParts = [ + 'edit_lnk' => $displayResultsObject::UPDATE_ROW, + 'del_lnk' => $displayResultsObject::DELETE_ROW, + 'sort_lnk' => '1', + 'nav_bar' => '1', + 'bkm_form' => '1', + 'text_btn' => '0', + 'pview_lnk' => '1', + ]; + + if (! $editable) { + $displayParts = [ + 'edit_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, + 'del_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, + 'sort_lnk' => '1', + 'nav_bar' => '1', + 'bkm_form' => '1', + 'text_btn' => '1', + 'pview_lnk' => '1', + ]; + } + + if (isset($_POST['printview']) && $_POST['printview'] == '1') { + $displayParts = [ + 'edit_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, + 'del_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, + 'sort_lnk' => '0', + 'nav_bar' => '0', + 'bkm_form' => '0', + 'text_btn' => '0', + 'pview_lnk' => '0', + ]; + } + + if (! isset($_POST['printview']) || $_POST['printview'] != '1') { + $scripts->addFile('makegrid.js'); + $scripts->addFile('sql.js'); + unset($GLOBALS['message']); + //we don't need to buffer the output in getMessage here. + //set a global variable and check against it in the function + $GLOBALS['buffer_message'] = false; + } + + $previousUpdateQueryHtml = $this->getHtmlForPreviousUpdateQuery( + $dispQuery, + (bool) $GLOBALS['cfg']['ShowSQL'], + $sqlData ?? [], + $dispMessage ?? '' + ); + + $profilingChartHtml = ''; + if ($profilingResults) { + $profiling = $this->getDetailedProfilingStats($profilingResults); + $profilingChartHtml = $this->template->render('sql/profiling_chart', ['profiling' => $profiling]); + } + + $missingUniqueColumnMessage = $this->getMessageIfMissingColumnIndex($table, $db, $editable, $hasUnique); + + $bookmarkCreatedMessage = $this->getBookmarkCreatedMessage(); + + $tableHtml = $this->getHtmlForSqlQueryResultsTable( + $displayResultsObject, + $displayParts, + $editable, + $unlimNumRows, + $numRows, + $showtable, + $result, + $analyzedSqlResults + ); + + $bookmarkSupportHtml = ''; + $bookmarkFeature = $this->relation->getRelationParameters()->bookmarkFeature; + if ( + $bookmarkFeature !== null + && $displayParts['bkm_form'] == '1' + && empty($_GET['id_bookmark']) + && $sqlQuery + ) { + $bookmarkSupportHtml = $this->template->render('sql/bookmark', [ + 'db' => $db, + 'goto' => Url::getFromRoute('/sql', [ + 'db' => $db, + 'table' => $table, + 'sql_query' => $sqlQuery, + 'id_bookmark' => 1, + ]), + 'user' => $GLOBALS['cfg']['Server']['user'], + 'sql_query' => $completeQuery ?? $sqlQuery, + ]); + } + + return $this->template->render('sql/sql_query_results', [ + 'previous_update_query' => $previousUpdateQueryHtml, + 'profiling_chart' => $profilingChartHtml, + 'missing_unique_column_message' => $missingUniqueColumnMessage, + 'bookmark_created_message' => $bookmarkCreatedMessage, + 'table' => $tableHtml, + 'bookmark_support' => $bookmarkSupportHtml, + ]); + } + + /** + * Function to execute the query and send the response + * + * @param array|null $analyzedSqlResults analysed sql results + * @param bool $isGotoFile whether goto file or not + * @param string $db current database + * @param string|null $table current table + * @param bool|null $findRealEnd whether to find real end or not + * @param string|null $sqlQueryForBookmark the sql query to be stored as bookmark + * @param array|null $extraData extra data + * @param string|null $messageToShow message to show + * @param array|null $sqlData sql data + * @param string $goto goto page url + * @param string|null $dispQuery display query + * @param Message|string|null $dispMessage display message + * @param string $sqlQuery sql query + * @param string|null $completeQuery complete query + */ + public function executeQueryAndSendQueryResponse( + $analyzedSqlResults, + $isGotoFile, + string $db, + ?string $table, + $findRealEnd, + $sqlQueryForBookmark, + $extraData, + $messageToShow, + $sqlData, + $goto, + $dispQuery, + $dispMessage, + $sqlQuery, + $completeQuery + ): string { + if ($analyzedSqlResults == null) { + // Parse and analyze the query + [ + $analyzedSqlResults, + $db, + $tableFromSql, + ] = ParseAnalyze::sqlQuery($sqlQuery, $db); + + $table = $tableFromSql ?: $table; + } + + return $this->executeQueryAndGetQueryResponse( + $analyzedSqlResults, // analyzed_sql_results + $isGotoFile, // is_gotofile + $db, // db + $table, // table + $findRealEnd, // find_real_end + $sqlQueryForBookmark, // sql_query_for_bookmark + $extraData, // extra_data + $messageToShow, // message_to_show + $sqlData, // sql_data + $goto, // goto + $dispQuery, // disp_query + $dispMessage, // disp_message + $sqlQuery, // sql_query + $completeQuery // complete_query + ); + } + + /** + * Function to execute the query and send the response + * + * @param array $analyzedSqlResults analysed sql results + * @param bool $isGotoFile whether goto file or not + * @param string $db current database + * @param string|null $table current table + * @param bool|null $findRealEnd whether to find real end or not + * @param string|null $sqlQueryForBookmark the sql query to be stored as bookmark + * @param array|null $extraData extra data + * @param string|null $messageToShow message to show + * @param array|null $sqlData sql data + * @param string $goto goto page url + * @param string|null $dispQuery display query + * @param Message|string|null $dispMessage display message + * @param string $sqlQuery sql query + * @param string|null $completeQuery complete query + * + * @return string html + */ + public function executeQueryAndGetQueryResponse( + array $analyzedSqlResults, + $isGotoFile, + string $db, + ?string $table, + $findRealEnd, + ?string $sqlQueryForBookmark, + $extraData, + ?string $messageToShow, + $sqlData, + $goto, + ?string $dispQuery, + $dispMessage, + $sqlQuery, + ?string $completeQuery + ): string { + // Handle disable/enable foreign key checks + $defaultFkCheck = ForeignKey::handleDisableCheckInit(); + + // Handle remembered sorting order, only for single table query. + // Handling is not required when it's a union query + // (the parser never sets the 'union' key to 0). + // Handling is also not required if we came from the "Sort by key" + // drop-down. + if ( + $analyzedSqlResults !== [] + && $this->isRememberSortingOrder($analyzedSqlResults) + && empty($analyzedSqlResults['union']) + && ! isset($_POST['sort_by_key']) + ) { + if (! isset($_SESSION['sql_from_query_box'])) { + $this->handleSortOrder($db, $table, $analyzedSqlResults, $sqlQuery); + } else { + unset($_SESSION['sql_from_query_box']); + } + } + + $displayResultsObject = new DisplayResults( + $GLOBALS['dbi'], + $GLOBALS['db'], + $GLOBALS['table'], + $GLOBALS['server'], + $goto, + $sqlQuery + ); + $displayResultsObject->setConfigParamsForDisplayTable(); + + // assign default full_sql_query + $fullSqlQuery = $sqlQuery; + + // Do append a "LIMIT" clause? + if ($this->isAppendLimitClause($analyzedSqlResults)) { + $fullSqlQuery = $this->getSqlWithLimitClause($analyzedSqlResults); + } + + $GLOBALS['reload'] = $this->hasCurrentDbChanged($db); + $this->dbi->selectDb($db); + + [ + $result, + $numRows, + $unlimNumRows, + $profilingResults, + $extraData, + ] = $this->executeTheQuery( + $analyzedSqlResults, + $fullSqlQuery, + $isGotoFile, + $db, + $table, + $findRealEnd, + $sqlQueryForBookmark, + $extraData + ); + + if ($this->dbi->moreResults()) { + $this->dbi->nextResult(); + } + + $warningMessages = $this->operations->getWarningMessagesArray(); + + // No rows returned -> move back to the calling page + if (($numRows == 0 && $unlimNumRows == 0) || $analyzedSqlResults['is_affected']) { + $htmlOutput = $this->getQueryResponseForNoResultsReturned( + $analyzedSqlResults, + $db, + $table, + $messageToShow, + $numRows, + $displayResultsObject, + $extraData, + $profilingResults, + $result, + $sqlQuery, + $completeQuery + ); + } else { + // At least one row is returned -> displays a table with results + $htmlOutput = $this->getQueryResponseForResultsReturned( + $result, + $analyzedSqlResults, + $db, + $table, + $sqlData, + $displayResultsObject, + $unlimNumRows, + $numRows, + $dispQuery, + $dispMessage, + $profilingResults, + $sqlQuery, + $completeQuery + ); + } + + // Handle disable/enable foreign key checks + ForeignKey::handleDisableCheckCleanup($defaultFkCheck); + + foreach ($warningMessages as $warning) { + $message = Message::notice(Message::sanitize($warning)); + $htmlOutput .= $message->getDisplay(); + } + + return $htmlOutput; + } + + /** + * Function to define pos to display a row + * + * @param int $numberOfLine Number of the line to display + * + * @return int Start position to display the line + */ + private function getStartPosToDisplayRow($numberOfLine) + { + $maxRows = $_SESSION['tmpval']['max_rows']; + + return @((int) ceil($numberOfLine / $maxRows) - 1) * $maxRows; + } + + /** + * Function to calculate new pos if pos is higher than number of rows + * of displayed table + * + * @param string $db Database name + * @param string $table Table name + * @param int|null $pos Initial position + * + * @return int Number of pos to display last page + */ + public function calculatePosForLastPage($db, $table, $pos) + { + if ($pos === null) { + $pos = $_SESSION['tmpval']['pos']; + } + + $tableObject = new Table($table, $db); + $unlimNumRows = $tableObject->countRecords(true); + //If position is higher than number of rows + if ($unlimNumRows <= $pos && $pos != 0) { + $pos = $this->getStartPosToDisplayRow($unlimNumRows); + } + + return $pos; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/StorageEngine.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/StorageEngine.php new file mode 100644 index 0000000..be18f51 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/StorageEngine.php @@ -0,0 +1,547 @@ +engine = $engine; + $this->title = $storage_engines[$engine]['Engine']; + $this->comment = ($storage_engines[$engine]['Comment'] ?? ''); + switch ($storage_engines[$engine]['Support']) { + case 'DEFAULT': + $this->support = self::SUPPORT_DEFAULT; + break; + case 'YES': + $this->support = self::SUPPORT_YES; + break; + case 'DISABLED': + $this->support = self::SUPPORT_DISABLED; + break; + case 'NO': + default: + $this->support = self::SUPPORT_NO; + } + } + + /** + * Returns array of storage engines + * + * @return array[] array of storage engines + * + * @static + * @staticvar array $storage_engines storage engines + */ + public static function getStorageEngines() + { + global $dbi; + + static $storage_engines = null; + + if ($storage_engines == null) { + $storage_engines = $dbi->fetchResult('SHOW STORAGE ENGINES', 'Engine'); + if (! $dbi->isMariaDB() && $dbi->getVersion() >= 50708) { + $disabled = (string) SessionCache::get( + 'disabled_storage_engines', + /** @return mixed|false */ + static function () use ($dbi) { + return $dbi->fetchValue( + 'SELECT @@disabled_storage_engines' + ); + } + ); + foreach (explode(',', $disabled) as $engine) { + if (! isset($storage_engines[$engine])) { + continue; + } + + $storage_engines[$engine]['Support'] = 'DISABLED'; + } + } + } + + return $storage_engines; + } + + /** + * Returns if Mroonga is available to be used + * + * This is public to be used in the StructureComtroller, the first release + * of this function was looking Mroonga in the engines list but this second + * method checks too that mroonga is installed successfully + */ + public static function hasMroongaEngine(): bool + { + global $dbi; + $cacheKey = 'storage-engine.mroonga.has.mroonga_command'; + + if (Cache::has($cacheKey)) { + return (bool) Cache::get($cacheKey, false); + } + + $supportsMroonga = $dbi->tryQuery('SELECT mroonga_command(\'object_list\');') !== false; + Cache::set($cacheKey, $supportsMroonga); + + return $supportsMroonga; + } + + /** + * Get the lengths of a table of database + * + * @param string $dbName DB name + * @param string $tableName Table name + * + * @return int[] + */ + public static function getMroongaLengths(string $dbName, string $tableName): array + { + global $dbi; + $cacheKey = 'storage-engine.mroonga.object_list.' . $dbName; + + $dbi->selectDb($dbName);// Needed for mroonga_command calls + + if (! Cache::has($cacheKey)) { + $result = $dbi->fetchSingleRow('SELECT mroonga_command(\'object_list\');', DatabaseInterface::FETCH_NUM); + $objectList = (array) json_decode($result[0] ?? '', true); + foreach ($objectList as $mroongaName => $mroongaData) { + /** + * We only need the objects of table or column types, more info: + * - https://groonga.org/docs/reference/commands/object_list.html#object-type + * - https://groonga.org/docs/reference/commands/object_inspect.html#table-type-id + * - https://groonga.org/docs/reference/commands/object_inspect.html#column-type-raw-id + */ + if (in_array($mroongaData['type']['id'], [48, 49, 50, 51, 64, 65, 72])) { + continue; + } + + unset($objectList[$mroongaName]); + } + + // At this point, we can remove all the data because only need the mroongaName values + Cache::set($cacheKey, array_keys($objectList)); + } + + /** @var string[] $objectList */ + $objectList = Cache::get($cacheKey, []); + + $dataLength = 0; + $indexLength = 0; + foreach ($objectList as $mroongaName) { + if (strncmp($tableName, $mroongaName, strlen($tableName)) !== 0) { + continue; + } + + $result = $dbi->fetchSingleRow( + 'SELECT mroonga_command(\'object_inspect ' . $mroongaName . '\');', + DatabaseInterface::FETCH_NUM + ); + $decodedData = json_decode($result[0] ?? '', true); + if ($decodedData === null) { + // Invalid for some strange reason, maybe query failed + continue; + } + + $indexPrefix = $tableName . '#' . $tableName; + if (strncmp($indexPrefix, $mroongaName, strlen($indexPrefix)) === 0) { + $indexLength += $decodedData['disk_usage']; + continue; + } + + $dataLength += $decodedData['disk_usage']; + } + + return [$dataLength, $indexLength]; + } + + /** + * @return array> + */ + public static function getArray(): array + { + $engines = []; + + foreach (self::getStorageEngines() as $details) { + // Don't show PERFORMANCE_SCHEMA engine (MySQL 5.5) + if ( + $details['Support'] === 'NO' + || $details['Support'] === 'DISABLED' + || $details['Engine'] === 'PERFORMANCE_SCHEMA' + ) { + continue; + } + + $engines[$details['Engine']] = [ + 'name' => $details['Engine'], + 'comment' => $details['Comment'], + 'is_default' => $details['Support'] === 'DEFAULT', + ]; + } + + return $engines; + } + + /** + * Loads the corresponding engine plugin, if available. + * + * @param string $engine The engine ID + * + * @return StorageEngine The engine plugin + * + * @static + */ + public static function getEngine($engine) + { + switch (mb_strtolower($engine)) { + case 'bdb': + return new Bdb($engine); + + case 'berkeleydb': + return new Berkeleydb($engine); + + case 'binlog': + return new Binlog($engine); + + case 'innobase': + return new Innobase($engine); + + case 'innodb': + return new Innodb($engine); + + case 'memory': + return new Memory($engine); + + case 'merge': + return new Merge($engine); + + case 'mrg_myisam': + return new MrgMyisam($engine); + + case 'myisam': + return new Myisam($engine); + + case 'ndbcluster': + return new Ndbcluster($engine); + + case 'pbxt': + return new Pbxt($engine); + + case 'performance_schema': + return new PerformanceSchema($engine); + + default: + return new StorageEngine($engine); + } + } + + /** + * Returns true if given engine name is supported/valid, otherwise false + * + * @param string $engine name of engine + * + * @static + */ + public static function isValid($engine): bool + { + if ($engine === 'PBMS') { + return true; + } + + $storage_engines = self::getStorageEngines(); + + return isset($storage_engines[$engine]); + } + + /** + * Returns as HTML table of the engine's server variables + * + * @return string The table that was generated based on the retrieved + * information + */ + public function getHtmlVariables() + { + $ret = ''; + + foreach ($this->getVariablesStatus() as $details) { + $ret .= '' . "\n" + . ' ' . "\n"; + if (! empty($details['desc'])) { + $ret .= ' ' + . Generator::showHint($details['desc']) + . "\n"; + } + + $ret .= ' ' . "\n" + . ' ' . htmlspecialchars($details['title']) . '' + . "\n" + . ' '; + switch ($details['type']) { + case self::DETAILS_TYPE_SIZE: + $parsed_size = $this->resolveTypeSize($details['value']); + if ($parsed_size !== null) { + $ret .= $parsed_size[0] . ' ' . $parsed_size[1]; + } + + break; + case self::DETAILS_TYPE_NUMERIC: + $ret .= Util::formatNumber($details['value']) . ' '; + break; + default: + $ret .= htmlspecialchars($details['value']) . ' '; + } + + $ret .= '' . "\n" + . '' . "\n"; + } + + if (! $ret) { + $ret = '

        ' . "\n" + . ' ' + . __('There is no detailed status information available for this storage engine.') + . "\n" + . '

        ' . "\n"; + } else { + $ret = '' + . "\n" . $ret . '
        ' . "\n"; + } + + return $ret; + } + + /** + * Returns the engine specific handling for + * DETAILS_TYPE_SIZE type variables. + * + * This function should be overridden when + * DETAILS_TYPE_SIZE type needs to be + * handled differently for a particular engine. + * + * @param int $value Value to format + * + * @return array|null the formatted value and its unit + */ + public function resolveTypeSize($value): ?array + { + return Util::formatByteDown($value); + } + + /** + * Returns array with detailed info about engine specific server variables + * + * @return array array with detailed info about specific engine server variables + */ + public function getVariablesStatus() + { + global $dbi; + + $variables = $this->getVariables(); + $like = $this->getVariablesLikePattern(); + + if ($like) { + $like = " LIKE '" . $like . "' "; + } else { + $like = ''; + } + + $mysql_vars = []; + + $sql_query = 'SHOW GLOBAL VARIABLES ' . $like . ';'; + $res = $dbi->query($sql_query); + foreach ($res as $row) { + if (isset($variables[$row['Variable_name']])) { + $mysql_vars[$row['Variable_name']] = $variables[$row['Variable_name']]; + } elseif (! $like && mb_stripos($row['Variable_name'], $this->engine) !== 0) { + continue; + } + + $mysql_vars[$row['Variable_name']]['value'] = $row['Value']; + + if (empty($mysql_vars[$row['Variable_name']]['title'])) { + $mysql_vars[$row['Variable_name']]['title'] = $row['Variable_name']; + } + + if (isset($mysql_vars[$row['Variable_name']]['type'])) { + continue; + } + + $mysql_vars[$row['Variable_name']]['type'] = self::DETAILS_TYPE_PLAINTEXT; + } + + return $mysql_vars; + } + + /** + * Reveals the engine's title + * + * @return string The title + */ + public function getTitle() + { + return $this->title; + } + + /** + * Fetches the server's comment about this engine + * + * @return string The comment + */ + public function getComment() + { + return $this->comment; + } + + /** + * Information message on whether this storage engine is supported + * + * @return string The localized message. + */ + public function getSupportInformationMessage() + { + switch ($this->support) { + case self::SUPPORT_DEFAULT: + $message = __('%s is the default storage engine on this MySQL server.'); + break; + case self::SUPPORT_YES: + $message = __('%s is available on this MySQL server.'); + break; + case self::SUPPORT_DISABLED: + $message = __('%s has been disabled for this MySQL server.'); + break; + case self::SUPPORT_NO: + default: + $message = __('This MySQL server does not support the %s storage engine.'); + } + + return sprintf($message, htmlspecialchars($this->title)); + } + + /** + * Generates a list of MySQL variables that provide information about this + * engine. This function should be overridden when extending this class + * for a particular engine. + * + * @return array The list of variables. + */ + public function getVariables() + { + return []; + } + + /** + * Returns string with filename for the MySQL helppage + * about this storage engine + * + * @return string MySQL help page filename + */ + public function getMysqlHelpPage() + { + return $this->engine . '-storage-engine'; + } + + /** + * Returns the pattern to be used in the query for SQL variables + * related to the storage engine + * + * @return string SQL query LIKE pattern + */ + public function getVariablesLikePattern() + { + return ''; + } + + /** + * Returns a list of available information pages with labels + * + * @return string[] The list + */ + public function getInfoPages() + { + return []; + } + + /** + * Generates the requested information page + * + * @param string $id page id + * + * @return string html output + */ + public function getPage($id) + { + if (! array_key_exists($id, $this->getInfoPages())) { + return ''; + } + + $id = 'getPage' . $id; + + return $this->$id(); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Maintenance.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Maintenance.php new file mode 100644 index 0000000..97c3423 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Maintenance.php @@ -0,0 +1,184 @@ +dbi = $dbi; + } + + /** + * @param TableName[] $tables + * + * @return array|string> + * @psalm-return array{array, string} + */ + public function getAnalyzeTableRows(DatabaseName $db, array $tables): array + { + $backQuotedTables = []; + foreach ($tables as $table) { + $backQuotedTables[] = Util::backquote($table->getName()); + } + + $query = 'ANALYZE TABLE ' . implode(', ', $backQuotedTables) . ';'; + + $this->dbi->selectDb($db); + /** @var array> $result */ + $result = $this->dbi->fetchResult($query); + + $rows = []; + foreach ($result as $row) { + $message = Message::fromArray($row); + $rows[$message->table][] = $message; + } + + return [$rows, $query]; + } + + /** + * @param TableName[] $tables + * + * @return array|string> + * @psalm-return array{array, string} + */ + public function getCheckTableRows(DatabaseName $db, array $tables): array + { + $backQuotedTables = []; + foreach ($tables as $table) { + $backQuotedTables[] = Util::backquote($table->getName()); + } + + $query = 'CHECK TABLE ' . implode(', ', $backQuotedTables) . ';'; + + $this->dbi->selectDb($db); + /** @var array> $result */ + $result = $this->dbi->fetchResult($query); + + $rows = []; + foreach ($result as $row) { + $message = Message::fromArray($row); + $rows[$message->table][] = $message; + } + + return [$rows, $query]; + } + + /** + * @param TableName[] $tables + * + * @return array>>|string> + * @psalm-return array{array>, string, Warning[]} + */ + public function getChecksumTableRows(DatabaseName $db, array $tables): array + { + $backQuotedTables = []; + foreach ($tables as $table) { + $backQuotedTables[] = Util::backquote($table->getName()); + } + + $query = 'CHECKSUM TABLE ' . implode(', ', $backQuotedTables) . ';'; + + $this->dbi->selectDb($db); + /** @var array> $rows */ + $rows = $this->dbi->fetchResult($query); + $warnings = $this->dbi->getWarnings(); + + return [$rows, $query, $warnings]; + } + + /** + * @param TableName[] $tables + */ + public function getIndexesProblems(DatabaseName $db, array $tables): string + { + $indexesProblems = ''; + + foreach ($tables as $table) { + $check = Index::findDuplicates($table->getName(), $db->getName()); + + if (empty($check)) { + continue; + } + + $indexesProblems .= sprintf(__('Problems with indexes of table `%s`'), $table->getName()); + $indexesProblems .= $check; + } + + return $indexesProblems; + } + + /** + * @param TableName[] $tables + * + * @return array|string> + * @psalm-return array{array, string} + */ + public function getOptimizeTableRows(DatabaseName $db, array $tables): array + { + $backQuotedTables = []; + foreach ($tables as $table) { + $backQuotedTables[] = Util::backquote($table->getName()); + } + + $query = 'OPTIMIZE TABLE ' . implode(', ', $backQuotedTables) . ';'; + + $this->dbi->selectDb($db); + /** @var array> $result */ + $result = $this->dbi->fetchResult($query); + + $rows = []; + foreach ($result as $row) { + $message = Message::fromArray($row); + $rows[$message->table][] = $message; + } + + return [$rows, $query]; + } + + /** + * @param TableName[] $tables + * + * @return array|string> + * @psalm-return array{array, string} + */ + public function getRepairTableRows(DatabaseName $db, array $tables): array + { + $backQuotedTables = []; + foreach ($tables as $table) { + $backQuotedTables[] = Util::backquote($table->getName()); + } + + $query = 'REPAIR TABLE ' . implode(', ', $backQuotedTables) . ';'; + + $this->dbi->selectDb($db); + /** @var array> $result */ + $result = $this->dbi->fetchResult($query); + + $rows = []; + foreach ($result as $row) { + $message = Message::fromArray($row); + $rows[$message->table][] = $message; + } + + return [$rows, $query]; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Search.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Search.php new file mode 100644 index 0000000..d40ae49 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Search.php @@ -0,0 +1,353 @@ +dbi = $dbi; + } + + /** + * Builds the sql search query from the post parameters + * + * @return string the generated SQL query + */ + public function buildSqlQuery(): string + { + $sql_query = 'SELECT '; + + // If only distinct values are needed + $is_distinct = isset($_POST['distinct']) ? 'true' : 'false'; + if ($is_distinct === 'true') { + $sql_query .= 'DISTINCT '; + } + + // if all column names were selected to display, we do a 'SELECT *' + // (more efficient and this helps prevent a problem in IE + // if one of the rows is edited and we come back to the Select results) + if (isset($_POST['zoom_submit']) || ! empty($_POST['displayAllColumns'])) { + $sql_query .= '* '; + } else { + $columnsToDisplay = $_POST['columnsToDisplay']; + $quotedColumns = []; + foreach ($columnsToDisplay as $column) { + $quotedColumns[] = Util::backquote($column); + } + + $sql_query .= implode(', ', $quotedColumns); + } + + $sql_query .= ' FROM ' + . Util::backquote($_POST['table']); + $whereClause = $this->generateWhereClause(); + $sql_query .= $whereClause; + + // if the search results are to be ordered + if (isset($_POST['orderByColumn']) && $_POST['orderByColumn'] !== '--nil--') { + $sql_query .= ' ORDER BY ' + . Util::backquote($_POST['orderByColumn']) + . ' ' . $_POST['order']; + } + + return $sql_query; + } + + /** + * Generates the where clause for the SQL search query to be executed + * + * @return string the generated where clause + */ + private function generateWhereClause(): string + { + if (isset($_POST['customWhereClause']) && trim($_POST['customWhereClause']) != '') { + return ' WHERE ' . $_POST['customWhereClause']; + } + + // If there are no search criteria set or no unary criteria operators, + // return + if ( + ! isset($_POST['criteriaValues']) + && ! isset($_POST['criteriaColumnOperators']) + && ! isset($_POST['geom_func']) + ) { + return ''; + } + + // else continue to form the where clause from column criteria values + $fullWhereClause = []; + foreach ($_POST['criteriaColumnOperators'] as $column_index => $operator) { + $unaryFlag = $this->dbi->types->isUnaryOperator($operator); + $tmp_geom_func = $_POST['geom_func'][$column_index] ?? null; + + $whereClause = $this->getWhereClause( + $_POST['criteriaValues'][$column_index], + $_POST['criteriaColumnNames'][$column_index], + $_POST['criteriaColumnTypes'][$column_index], + $operator, + $unaryFlag, + $tmp_geom_func + ); + + if (! $whereClause) { + continue; + } + + $fullWhereClause[] = $whereClause; + } + + if (! empty($fullWhereClause)) { + return ' WHERE ' . implode(' AND ', $fullWhereClause); + } + + return ''; + } + + /** + * Return the where clause for query generation based on the inputs provided. + * + * @param mixed $criteriaValues Search criteria input + * @param string $names Name of the column on which search is submitted + * @param string $types Type of the field + * @param string $func_type Search function/operator + * @param bool $unaryFlag Whether operator unary or not + * @param string|null $geom_func Whether geometry functions should be applied + * + * @return string generated where clause. + */ + private function getWhereClause( + $criteriaValues, + $names, + $types, + $func_type, + $unaryFlag, + $geom_func = null + ): string { + // If geometry function is set + if (! empty($geom_func)) { + return $this->getGeomWhereClause($criteriaValues, $names, $func_type, $types, $geom_func); + } + + $backquoted_name = Util::backquote($names); + $where = ''; + if ($unaryFlag) { + $where = $backquoted_name . ' ' . $func_type; + } elseif (strncasecmp($types, 'enum', 4) == 0 && ! empty($criteriaValues)) { + $where = $backquoted_name; + $where .= $this->getEnumWhereClause($criteriaValues, $func_type); + } elseif ($criteriaValues != '') { + // For these types we quote the value. Even if it's another type + // (like INT), for a LIKE we always quote the value. MySQL converts + // strings to numbers and numbers to strings as necessary + // during the comparison + if ( + preg_match('@char|binary|blob|text|set|date|time|year@i', $types) + || mb_strpos(' ' . $func_type, 'LIKE') + ) { + $quot = '\''; + } else { + $quot = ''; + } + + // LIKE %...% + if ($func_type === 'LIKE %...%') { + $func_type = 'LIKE'; + $criteriaValues = '%' . $criteriaValues . '%'; + } + + if ($func_type === 'NOT LIKE %...%') { + $func_type = 'NOT LIKE'; + $criteriaValues = '%' . $criteriaValues . '%'; + } + + if ($func_type === 'REGEXP ^...$') { + $func_type = 'REGEXP'; + $criteriaValues = '^' . $criteriaValues . '$'; + } + + if ( + $func_type !== 'IN (...)' + && $func_type !== 'NOT IN (...)' + && $func_type !== 'BETWEEN' + && $func_type !== 'NOT BETWEEN' + ) { + return $backquoted_name . ' ' . $func_type . ' ' . $quot + . $this->dbi->escapeString($criteriaValues) . $quot; + } + + $func_type = str_replace(' (...)', '', $func_type); + + //Don't explode if this is already an array + //(Case for (NOT) IN/BETWEEN.) + if (is_array($criteriaValues)) { + $values = $criteriaValues; + } else { + $values = explode(',', $criteriaValues); + } + + // quote values one by one + $emptyKey = false; + foreach ($values as $key => &$value) { + if ($value === '') { + $emptyKey = $key; + $value = 'NULL'; + continue; + } + + $value = $quot . $this->dbi->escapeString(trim($value)) + . $quot; + } + + if ($func_type === 'BETWEEN' || $func_type === 'NOT BETWEEN') { + $where = $backquoted_name . ' ' . $func_type . ' ' + . ($values[0] ?? '') + . ' AND ' . ($values[1] ?? ''); + } else { //[NOT] IN + if ($emptyKey !== false) { + unset($values[$emptyKey]); + } + + $wheres = []; + if (! empty($values)) { + $wheres[] = $backquoted_name . ' ' . $func_type + . ' (' . implode(',', $values) . ')'; + } + + if ($emptyKey !== false) { + $wheres[] = $backquoted_name . ' IS NULL'; + } + + $where = implode(' OR ', $wheres); + if (1 < count($wheres)) { + $where = '(' . $where . ')'; + } + } + } + + return $where; + } + + /** + * Return the where clause for a geometrical column. + * + * @param mixed $criteriaValues Search criteria input + * @param string $names Name of the column on which search is submitted + * @param string $func_type Search function/operator + * @param string $types Type of the field + * @param string|null $geom_func Whether geometry functions should be applied + * + * @return string part of where clause. + */ + private function getGeomWhereClause( + $criteriaValues, + $names, + $func_type, + $types, + $geom_func = null + ): string { + $geom_unary_functions = [ + 'IsEmpty' => 1, + 'IsSimple' => 1, + 'IsRing' => 1, + 'IsClosed' => 1, + ]; + $where = ''; + + // Get details about the geometry functions + $geom_funcs = Gis::getFunctions($types, true, false); + + // If the function takes multiple parameters + if (str_contains($func_type, 'IS NULL') || str_contains($func_type, 'IS NOT NULL')) { + return Util::backquote($names) . ' ' . $func_type; + } + + if ($geom_funcs[$geom_func]['params'] > 1) { + // create gis data from the criteria input + $gis_data = Gis::createData($criteriaValues, $this->dbi->getVersion()); + + return $geom_func . '(' . Util::backquote($names) + . ', ' . $gis_data . ')'; + } + + // New output type is the output type of the function being applied + $type = $geom_funcs[$geom_func]['type']; + $geom_function_applied = $geom_func + . '(' . Util::backquote($names) . ')'; + + // If the where clause is something like 'IsEmpty(`spatial_col_name`)' + if (isset($geom_unary_functions[$geom_func]) && trim($criteriaValues) == '') { + $where = $geom_function_applied; + } elseif (in_array($type, Gis::getDataTypes()) && ! empty($criteriaValues)) { + // create gis data from the criteria input + $gis_data = Gis::createData($criteriaValues, $this->dbi->getVersion()); + $where = $geom_function_applied . ' ' . $func_type . ' ' . $gis_data; + } elseif (strlen($criteriaValues) > 0) { + $where = $geom_function_applied . ' ' + . $func_type . " '" . $criteriaValues . "'"; + } + + return $where; + } + + /** + * Return the where clause in case column's type is ENUM. + * + * @param mixed $criteriaValues Search criteria input + * @param string $func_type Search function/operator + * + * @return string part of where clause. + */ + private function getEnumWhereClause($criteriaValues, $func_type): string + { + if (! is_array($criteriaValues)) { + $criteriaValues = explode(',', $criteriaValues); + } + + $enum_selected_count = count($criteriaValues); + if ($func_type === '=' && $enum_selected_count > 1) { + $func_type = 'IN'; + $parens_open = '('; + $parens_close = ')'; + } elseif ($func_type === '!=' && $enum_selected_count > 1) { + $func_type = 'NOT IN'; + $parens_open = '('; + $parens_close = ')'; + } else { + $parens_open = ''; + $parens_close = ''; + } + + $enum_where = '\'' + . $this->dbi->escapeString($criteriaValues[0]) . '\''; + for ($e = 1; $e < $enum_selected_count; $e++) { + $enum_where .= ', \'' + . $this->dbi->escapeString($criteriaValues[$e]) . '\''; + } + + return ' ' . $func_type . ' ' . $parens_open + . $enum_where . $parens_close; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Template.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Template.php new file mode 100644 index 0000000..b638cdd --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Template.php @@ -0,0 +1,158 @@ +getTempDir('twig') : null; + + static::$twig = self::getTwigEnvironment($cacheDir); + } + + public static function getTwigEnvironment(?string $cacheDir): Environment + { + global $cfg, $containerBuilder; + + /* Twig expects false when cache is not configured */ + if ($cacheDir === null) { + $cacheDir = false; + } + + $loader = new FilesystemLoader(self::TEMPLATES_FOLDER); + $twig = new Environment($loader, [ + 'auto_reload' => true, + 'cache' => $cacheDir, + ]); + + $twig->addRuntimeLoader(new ContainerRuntimeLoader($containerBuilder)); + + if (is_array($cfg) && ($cfg['environment'] ?? '') === 'development') { + $twig->enableDebug(); + $twig->addExtension(new DebugExtension()); + // This will enable debug for the extension to print lines + // It is used in po file lines re-mapping + TransNode::$enableAddDebugInfo = true; + } + + if ($cfg['environment'] === 'production') { + $twig->disableDebug(); + TransNode::$enableAddDebugInfo = false; + } + + $twig->addExtension(new AssetExtension()); + $twig->addExtension(new CoreExtension()); + $twig->addExtension(new FlashMessagesExtension()); + $twig->addExtension(new I18nExtension()); + $twig->addExtension(new MessageExtension()); + $twig->addExtension(new RelationExtension()); + $twig->addExtension(new SanitizeExtension()); + $twig->addExtension(new TableExtension()); + $twig->addExtension(new TrackerExtension()); + $twig->addExtension(new TransformationsExtension()); + $twig->addExtension(new UrlExtension()); + $twig->addExtension(new UtilExtension()); + + return $twig; + } + + /** + * Loads a template. + * + * @param string $templateName Template path name + * + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError + */ + private function load(string $templateName): TemplateWrapper + { + try { + $template = static::$twig->load($templateName . '.twig'); + } catch (RuntimeException $e) { + /* Retry with disabled cache */ + static::$twig->setCache(false); + $template = static::$twig->load($templateName . '.twig'); + /* + * The trigger error is intentionally after second load + * to avoid triggering error when disabling cache does not + * solve it. + */ + trigger_error( + sprintf( + __('Error while working with template cache: %s'), + $e->getMessage() + ), + E_USER_WARNING + ); + } + + return $template; + } + + /** + * @param string $template Template path name + * @param array $data Associative array of template variables + * + * @throws Throwable + * @throws LoaderError + * @throws RuntimeError + * @throws SyntaxError + */ + public function render(string $template, array $data = []): string + { + return $this->load($template)->render($data); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Theme.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Theme.php new file mode 100644 index 0000000..6dcb795 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Theme.php @@ -0,0 +1,334 @@ +getFsPath() . 'theme.json'; + if (! @file_exists($infofile)) { + return false; + } + + if ($this->mtimeInfo === filemtime($infofile)) { + return true; + } + + $content = @file_get_contents($infofile); + if ($content === false) { + return false; + } + + $data = json_decode($content, true); + + // Did we get expected data? + if (! is_array($data)) { + return false; + } + + // Check that all required data are there + $members = [ + 'name', + 'version', + 'supports', + ]; + foreach ($members as $member) { + if (! isset($data[$member])) { + return false; + } + } + + // Version check + if (! is_array($data['supports'])) { + return false; + } + + if (! in_array(Version::SERIES, $data['supports'])) { + return false; + } + + $this->mtimeInfo = filemtime($infofile); + $this->filesizeInfo = filesize($infofile); + + $this->setVersion($data['version']); + $this->setName($data['name']); + + return true; + } + + public static function load(string $themeUrl, string $themeFsPath, string $themeName): ?self + { + $theme = new self(); + + $theme->setPath($themeUrl); + $theme->setFsPath($themeFsPath); + + if (! $theme->loadInfo()) { + return null; + } + + $theme->checkImgPath(); + $theme->setId($themeName); + + return $theme; + } + + /** + * checks image path for existence - if not found use img from fallback theme + */ + public function checkImgPath(): bool + { + // try current theme first + if (is_dir($this->getFsPath() . 'img' . DIRECTORY_SEPARATOR)) { + $this->setImgPath($this->getPath() . '/img/'); + $this->setImgPathFs($this->getFsPath() . 'img' . DIRECTORY_SEPARATOR); + + return true; + } + + // try fallback theme + $fallbackFsPathThemeDir = ThemeManager::getThemesFsDir() . ThemeManager::FALLBACK_THEME + . DIRECTORY_SEPARATOR . 'img' . DIRECTORY_SEPARATOR; + if (is_dir($fallbackFsPathThemeDir)) { + $fallbackUrl = ThemeManager::getThemesDir() . ThemeManager::FALLBACK_THEME + . '/img/'; + $this->setImgPath($fallbackUrl); + $this->setImgPathFs($fallbackFsPathThemeDir); + + return true; + } + + // we failed + trigger_error( + sprintf( + __('No valid image path for theme %s found!'), + $this->getName() + ), + E_USER_ERROR + ); + + return false; + } + + /** + * returns path to theme + * + * @return string path to theme + */ + public function getPath() + { + return $this->path; + } + + /** + * returns file system path to the theme + * + * @return string file system path to theme + */ + public function getFsPath(): string + { + return $this->fsPath; + } + + /** + * set path to theme + * + * @param string $path path to theme + */ + public function setPath($path): void + { + $this->path = trim($path); + } + + /** + * set file system path to the theme + * + * @param string $path path to theme + */ + public function setFsPath(string $path): void + { + $this->fsPath = trim($path); + } + + /** + * sets version + * + * @param string $version version to set + */ + public function setVersion($version): void + { + $this->version = trim($version); + } + + /** + * returns version + * + * @return string version + */ + public function getVersion() + { + return $this->version; + } + + /** + * checks theme version against $version + * returns true if theme version is equal or higher to $version + * + * @param string $version version to compare to + */ + public function checkVersion($version): bool + { + return version_compare($this->getVersion(), $version, 'lt'); + } + + /** + * sets name + * + * @param string $name name to set + */ + public function setName($name): void + { + $this->name = trim($name); + } + + /** + * returns name + * + * @return string name + */ + public function getName() + { + return $this->name; + } + + /** + * sets id + * + * @param string $id new id + */ + public function setId($id): void + { + $this->id = trim($id); + } + + /** + * returns id + * + * @return string id + */ + public function getId() + { + return $this->id; + } + + /** + * Sets path to images for the theme + * + * @param string $path path to images for this theme as an URL path + */ + public function setImgPath($path): void + { + $this->imgPath = $path; + } + + /** + * Sets path to images for the theme + * + * @param string $path file-system path to images for this theme + */ + public function setImgPathFs(string $path): void + { + $this->imgPathFs = $path; + } + + /** + * Returns the path to image for the theme. + * If filename is given, it possibly fallbacks to fallback + * theme for it if image does not exist. + * + * @param string $file file name for image + * @param string $fallback fallback image + * + * @return string image path for this theme + */ + public function getImgPath($file = null, $fallback = null) + { + if ($file === null) { + return $this->imgPath; + } + + if (is_readable($this->imgPathFs . $file)) { + return $this->imgPath . $file; + } + + if ($fallback !== null) { + return $this->getImgPath($fallback); + } + + return './themes/' . ThemeManager::FALLBACK_THEME . '/img/' . $file; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Twig/RelationExtension.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Twig/RelationExtension.php new file mode 100644 index 0000000..2d6e1a4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Twig/RelationExtension.php @@ -0,0 +1,49 @@ + ['html']] + ), + new TwigFunction( + 'get_display_field', + [$relation, 'getDisplayField'], + ['is_safe' => ['html']] + ), + new TwigFunction( + 'get_foreign_data', + [$relation, 'getForeignData'] + ), + new TwigFunction( + 'get_tables', + [$relation, 'getTables'] + ), + new TwigFunction( + 'search_column_in_foreigners', + [$relation, 'searchColumnInForeigners'] + ), + ]; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/UserPassword.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/UserPassword.php new file mode 100644 index 0000000..2e0173f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/UserPassword.php @@ -0,0 +1,217 @@ +serverPrivileges = $serverPrivileges; + } + + /** + * Generate the message + * + * @return array error value and message + */ + public function setChangePasswordMsg() + { + $error = false; + $message = Message::success(__('The profile has been updated.')); + + if ($_POST['nopass'] != '1') { + if (strlen($_POST['pma_pw']) === 0 || strlen($_POST['pma_pw2']) === 0) { + $message = Message::error(__('The password is empty!')); + $error = true; + } elseif ($_POST['pma_pw'] !== $_POST['pma_pw2']) { + $message = Message::error( + __('The passwords aren\'t the same!') + ); + $error = true; + } elseif (strlen($_POST['pma_pw']) > 256) { + $message = Message::error(__('Password is too long!')); + $error = true; + } + } + + return [ + 'error' => $error, + 'msg' => $message, + ]; + } + + /** + * Change the password + * + * @param string $password New password + */ + public function changePassword($password): string + { + global $auth_plugin, $dbi; + + $hashing_function = $this->changePassHashingFunction(); + + [$username, $hostname] = $dbi->getCurrentUserAndHost(); + + $serverVersion = $dbi->getVersion(); + + if (isset($_POST['authentication_plugin']) && ! empty($_POST['authentication_plugin'])) { + $orig_auth_plugin = $_POST['authentication_plugin']; + } else { + $orig_auth_plugin = $this->serverPrivileges->getCurrentAuthenticationPlugin('change', $username, $hostname); + } + + $sql_query = 'SET password = ' + . ($password == '' ? '\'\'' : $hashing_function . '(\'***\')'); + + $isPerconaOrMySql = Compatibility::isMySqlOrPerconaDb(); + if ($isPerconaOrMySql && $serverVersion >= 50706) { + $sql_query = 'ALTER USER \'' . $dbi->escapeString($username) + . '\'@\'' . $dbi->escapeString($hostname) + . '\' IDENTIFIED WITH ' . $orig_auth_plugin . ' BY ' + . ($password == '' ? '\'\'' : '\'***\''); + } elseif ( + ($isPerconaOrMySql && $serverVersion >= 50507) + || (Compatibility::isMariaDb() && $serverVersion >= 50200) + ) { + // For MySQL and Percona versions 5.5.7+ and MariaDB versions 5.2+, + // explicitly set value of `old_passwords` so that + // it does not give an error while using + // the PASSWORD() function + if ($orig_auth_plugin === 'sha256_password') { + $value = 2; + } else { + $value = 0; + } + + $dbi->tryQuery('SET `old_passwords` = ' . $value . ';'); + } + + $this->changePassUrlParamsAndSubmitQuery( + $username, + $hostname, + $password, + $sql_query, + $hashing_function, + $orig_auth_plugin + ); + + $auth_plugin->handlePasswordChange($password); + + return $sql_query; + } + + /** + * Generate the hashing function + * + * @return string + */ + private function changePassHashingFunction() + { + if (isset($_POST['authentication_plugin']) && $_POST['authentication_plugin'] === 'mysql_old_password') { + $hashing_function = 'OLD_PASSWORD'; + } else { + $hashing_function = 'PASSWORD'; + } + + return $hashing_function; + } + + /** + * Changes password for a user + * + * @param string $username Username + * @param string $hostname Hostname + * @param string $password Password + * @param string $sql_query SQL query + * @param string $hashing_function Hashing function + * @param string $orig_auth_plugin Original Authentication Plugin + */ + private function changePassUrlParamsAndSubmitQuery( + $username, + $hostname, + $password, + $sql_query, + $hashing_function, + $orig_auth_plugin + ): void { + global $dbi; + + $err_url = Url::getFromRoute('/user-password'); + + $serverVersion = $dbi->getVersion(); + + if (Compatibility::isMySqlOrPerconaDb() && $serverVersion >= 50706) { + $local_query = 'ALTER USER \'' . $dbi->escapeString($username) + . '\'@\'' . $dbi->escapeString($hostname) . '\'' + . ' IDENTIFIED with ' . $orig_auth_plugin . ' BY ' + . ($password == '' + ? '\'\'' + : '\'' . $dbi->escapeString($password) . '\''); + } elseif ( + Compatibility::isMariaDb() + && $serverVersion >= 50200 + && $serverVersion < 100100 + && $orig_auth_plugin !== '' + ) { + if ($orig_auth_plugin === 'mysql_native_password') { + // Set the hashing method used by PASSWORD() + // to be 'mysql_native_password' type + $dbi->tryQuery('SET old_passwords = 0;'); + } elseif ($orig_auth_plugin === 'sha256_password') { + // Set the hashing method used by PASSWORD() + // to be 'sha256_password' type + $dbi->tryQuery('SET `old_passwords` = 2;'); + } + + $hashedPassword = $this->serverPrivileges->getHashedPassword($_POST['pma_pw']); + + $local_query = 'UPDATE `mysql`.`user` SET' + . " `authentication_string` = '" . $hashedPassword + . "', `Password` = '', " + . " `plugin` = '" . $orig_auth_plugin . "'" + . " WHERE `User` = '" . $dbi->escapeString($username) + . "' AND Host = '" . $dbi->escapeString($hostname) . "';"; + } else { + $local_query = 'SET password = ' . ($password == '' + ? '\'\'' + : $hashing_function . '(\'' + . $dbi->escapeString($password) . '\')'); + } + + if (! @$dbi->tryQuery($local_query)) { + Generator::mysqlDie( + $dbi->getError(), + $sql_query, + false, + $err_url + ); + } + + // Flush privileges after successful password change + $dbi->tryQuery('FLUSH PRIVILEGES;'); + } + + public function getFormForChangePassword(?string $username, ?string $hostname): string + { + return $this->serverPrivileges->getFormForChangePassword($username ?? '', $hostname ?? '', false); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/FormatConverter.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/FormatConverter.php new file mode 100644 index 0000000..06bd600 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/FormatConverter.php @@ -0,0 +1,96 @@ + 4294967295) { + return $buffer; + } + + return (string) long2ip((int) $buffer); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/SessionCache.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/SessionCache.php new file mode 100644 index 0000000..99333e9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/SessionCache.php @@ -0,0 +1,58 @@ +zip = $zip; + } + + /** + * Gets zip file contents + * + * @param string $file path to zip file + * @param string $specificEntry regular expression to match a file + * + * @return array ($error_message, $file_data); $error_message + * is empty if no error + */ + public function getContents($file, $specificEntry = null) + { + /** + * This function is used to "import" a SQL file which has been exported earlier + * That means that this function works on the assumption that the zip file contains only a single SQL file + * It might also be an ODS file, look below + */ + + if ($this->zip === null) { + return [ + 'error' => sprintf(__('The %s extension is missing. Please check your PHP configuration.'), 'zip'), + 'data' => '', + ]; + } + + $errorMessage = ''; + $fileData = ''; + + $res = $this->zip->open($file); + + if ($res !== true) { + $errorMessage = __('Error in ZIP archive:') . ' ' . $this->zip->getStatusString(); + $this->zip->close(); + + return [ + 'error' => $errorMessage, + 'data' => $fileData, + ]; + } + + if ($this->zip->numFiles === 0) { + $errorMessage = __('No files found inside ZIP archive!'); + $this->zip->close(); + + return [ + 'error' => $errorMessage, + 'data' => $fileData, + ]; + } + + /* Is the the zip really an ODS file? */ + $odsMediaType = 'application/vnd.oasis.opendocument.spreadsheet'; + $firstZipEntry = $this->zip->getFromIndex(0); + if (! strcmp($odsMediaType, (string) $firstZipEntry)) { + $specificEntry = '/^content\.xml$/'; + } + + if (! isset($specificEntry)) { + $fileData = $firstZipEntry; + $this->zip->close(); + + return [ + 'error' => $errorMessage, + 'data' => $fileData, + ]; + } + + /* Return the correct contents, not just the first entry */ + for ($i = 0; $i < $this->zip->numFiles; $i++) { + if (preg_match($specificEntry, (string) $this->zip->getNameIndex($i))) { + $fileData = $this->zip->getFromIndex($i); + break; + } + } + + /* Couldn't find any files that matched $specific_entry */ + if (empty($fileData)) { + $errorMessage = __('Error in ZIP archive:') + . ' Could not find "' . $specificEntry . '"'; + } + + $this->zip->close(); + + return [ + 'error' => $errorMessage, + 'data' => $fileData, + ]; + } + + /** + * Returns the filename of the first file that matches the given $file_regexp. + * + * @param string $file path to zip file + * @param string $regex regular expression for the file name to match + * + * @return string|false the file name of the first file that matches the given regular expression + */ + public function findFile($file, $regex) + { + if ($this->zip === null) { + return false; + } + + $res = $this->zip->open($file); + + if ($res === true) { + for ($i = 0; $i < $this->zip->numFiles; $i++) { + if (preg_match($regex, (string) $this->zip->getNameIndex($i))) { + $filename = $this->zip->getNameIndex($i); + $this->zip->close(); + + return $filename; + } + } + } + + return false; + } + + /** + * Returns the number of files in the zip archive. + * + * @param string $file path to zip file + * + * @return int the number of files in the zip archive or 0, either if there weren't any files or an error occurred. + */ + public function getNumberOfFiles($file) + { + if ($this->zip === null) { + return 0; + } + + $num = 0; + $res = $this->zip->open($file); + + if ($res === true) { + $num = $this->zip->numFiles; + } + + return $num; + } + + /** + * Extracts the content of $entry. + * + * @param string $file path to zip file + * @param string $entry file in the archive that should be extracted + * + * @return string|false data on success, false otherwise + */ + public function extract($file, $entry) + { + if ($this->zip === null) { + return false; + } + + if ($this->zip->open($file) === true) { + $result = $this->zip->getFromName($entry); + $this->zip->close(); + + return $result; + } + + return false; + } + + /** + * Creates a zip file. + * If $data is an array and $name is a string, the filenames will be indexed. + * The function will return false if $data is a string but $name is an array + * or if $data is an array and $name is an array, but they don't have the + * same amount of elements. + * + * @param array|string $data contents of the file/files + * @param array|string $name name of the file/files in the archive + * @param int $time the current timestamp + * + * @return string|bool the ZIP file contents, or false if there was an error. + */ + public function createFile($data, $name, $time = 0) + { + $datasec = []; // Array to store compressed data + $ctrlDir = []; // Central directory + $oldOffset = 0; // Last offset position + $eofCtrlDir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; // End of central directory record + + if (is_string($data) && is_string($name)) { + $data = [$name => $data]; + } elseif (is_array($data) && is_string($name)) { + $extPos = (int) strpos($name, '.'); + $extension = substr($name, $extPos); + $newData = []; + foreach ($data as $key => $value) { + $newName = str_replace($extension, '_' . $key . $extension, $name); + $newData[$newName] = $value; + } + + $data = $newData; + } elseif (is_array($data) && is_array($name) && count($data) === count($name)) { + /** @var array $data */ + $data = array_combine($name, $data); + } else { + return false; + } + + foreach ($data as $table => $dump) { + $tempName = str_replace('\\', '/', $table); + + /* Get Local Time */ + $timearray = getdate(); + + if ($timearray['year'] < 1980) { + $timearray['year'] = 1980; + $timearray['mon'] = 1; + $timearray['mday'] = 1; + $timearray['hours'] = 0; + $timearray['minutes'] = 0; + $timearray['seconds'] = 0; + } + + $time = $timearray['year'] - 1980 << 25 + | ($timearray['mon'] << 21) + | ($timearray['mday'] << 16) + | ($timearray['hours'] << 11) + | ($timearray['minutes'] << 5) + | ($timearray['seconds'] >> 1); + + $hexdtime = pack('V', $time); + + $uncLen = strlen($dump); + $crc = crc32($dump); + $zdata = (string) gzcompress($dump); + $zdata = substr((string) substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug + $cLen = strlen($zdata); + $fr = "\x50\x4b\x03\x04" + . "\x14\x00" // ver needed to extract + . "\x00\x00" // gen purpose bit flag + . "\x08\x00" // compression method + . $hexdtime // last mod time and date + + // "local file header" segment + . pack('V', $crc) // crc32 + . pack('V', $cLen) // compressed filesize + . pack('V', $uncLen) // uncompressed filesize + . pack('v', strlen($tempName)) // length of filename + . pack('v', 0) // extra field length + . $tempName + + // "file data" segment + . $zdata; + + $datasec[] = $fr; + + // now add to central directory record + $cdrec = "\x50\x4b\x01\x02" + . "\x00\x00" // version made by + . "\x14\x00" // version needed to extract + . "\x00\x00" // gen purpose bit flag + . "\x08\x00" // compression method + . $hexdtime // last mod time & date + . pack('V', $crc) // crc32 + . pack('V', $cLen) // compressed filesize + . pack('V', $uncLen) // uncompressed filesize + . pack('v', strlen($tempName)) // length of filename + . pack('v', 0) // extra field length + . pack('v', 0) // file comment length + . pack('v', 0) // disk number start + . pack('v', 0) // internal file attributes + . pack('V', 32) // external file attributes + // - 'archive' bit set + . pack('V', $oldOffset) // relative offset of local header + . $tempName; // filename + $oldOffset += strlen($fr); + // optional extra field, file comment goes here + // save to central directory + $ctrlDir[] = $cdrec; + } + + /* Build string to return */ + $tempCtrlDir = implode('', $ctrlDir); + $header = $tempCtrlDir . + $eofCtrlDir . + pack('v', count($ctrlDir)) . //total #of entries "on this disk" + pack('v', count($ctrlDir)) . //total #of entries overall + pack('V', strlen($tempCtrlDir)) . //size of central dir + pack('V', $oldOffset) . //offset to start of central dir + "\x00\x00"; //.zip file comment length + + $data = implode('', $datasec); + + return $data . $header; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/config.default.php b/Sources/php_script/script/phpMyAdmin/libraries/config.default.php new file mode 100644 index 0000000..3ecb83f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/config.default.php @@ -0,0 +1,3125 @@ + + * N N OOO !! DDDD OOO N N OOO TTTTT EEEE DDDD I TTTTT !! + * NN N O O !! D D O O NN N O O T E D D I T !! + * N N N O O !! D D O O N N N O O T EEEE D D I T !! + * N NN O O D D O O N NN O O T E D D I T + * N N OOO !! DDDD OOO N N OOO T EEEE DDDD I T !! + * + * + * DO NOT EDIT THIS FILE, EDIT config.inc.php INSTEAD !!! + * + * phpMyAdmin default configuration, you can copy values from here to your + * config.inc.php + * + * All directives are explained in the documentation + */ + +declare(strict_types=1); + +/** + * Your phpMyAdmin URL. + * + * Complete the variable below with the full URL ie + * https://example.com/path_to_your_phpMyAdmin_directory/ + * + * It must contain characters that are valid for a URL, and the path is + * case sensitive on some Web servers, for example Unix-based servers. + * + * In most cases you can leave this variable empty, as the correct value + * will be detected automatically. However, we recommend that you do + * test to see that the auto-detection code works in your system. A good + * test is to browse a table, then edit a row and save it. There will be + * an error message if phpMyAdmin cannot auto-detect the correct value. + * + * @global string $cfg['PmaAbsoluteUri'] + * @psalm-suppress PossiblyUndefinedGlobalVariable + */ +$cfg['PmaAbsoluteUri'] = ''; + +/** + * Configure authentication logging destination + * + * @global string $cfg['AuthLog'] + */ +$cfg['AuthLog'] = 'auto'; + +/** + * Whether to log successful authentication attempts + * + * @global boolean $cfg['AuthLogSuccess'] + */ +$cfg['AuthLogSuccess'] = false; + +/** + * Disable the default warning that is displayed on the DB Details Structure page if + * any of the required Tables for the configuration storage could not be found + * + * @global boolean $cfg['PmaNoRelation_DisableWarning'] + */ +$cfg['PmaNoRelation_DisableWarning'] = false; + +/** + * Disable the default warning that is displayed if Suhosin is detected + * + * @global boolean $cfg['SuhosinDisableWarning'] + */ +$cfg['SuhosinDisableWarning'] = false; + +/** + * Disable the default warning that is displayed if session.gc_maxlifetime + * is less than `LoginCookieValidity` + * + * @global boolean $cfg['LoginCookieValidityDisableWarning'] + */ +$cfg['LoginCookieValidityDisableWarning'] = false; + +/** + * Disable the default warning about MySQL reserved words in column names + * + * @global boolean $cfg['ReservedWordDisableWarning'] + */ +$cfg['ReservedWordDisableWarning'] = false; + +/** + * Show warning about incomplete translations on certain threshold. + * + * @global boolean $cfg['TranslationWarningThreshold'] + */ +$cfg['TranslationWarningThreshold'] = 80; + +/** + * Allows phpMyAdmin to be included from a other document in a frame; + * setting this to true is a potential security hole. Setting this to + * 'sameorigin' prevents phpMyAdmin to be included from another document + * in a frame, unless that document belongs to the same domain. + * + * @global boolean|string $cfg['AllowThirdPartyFraming'] + */ +$cfg['AllowThirdPartyFraming'] = false; + +/** + * The 'cookie' auth_type uses AES algorithm to encrypt the password. If + * at least one server configuration uses 'cookie' auth_type, enter here a + * pass phrase that will be used by AES. The maximum length seems to be 46 + * characters. + * + * @global string $cfg['blowfish_secret'] + */ +$cfg['blowfish_secret'] = ''; + + +/******************************************************************************* + * Server(s) configuration + * + * The $cfg['Servers'] array starts with $cfg['Servers'][1]. Do not use + * $cfg['Servers'][0]. You can disable a server configuration entry by setting host + * to ''. If you want more than one server, just copy following section + * (including $i incrementation) several times. There is no need to define + * full server array, just define values you need to change. + * + * @global array $cfg['Servers'] + */ +$cfg['Servers'] = []; + +$i = 1; + +/** + * MySQL hostname or IP address + * + * @global string $cfg['Servers'][$i]['host'] + */ +$cfg['Servers'][$i]['host'] = 'localhost'; + +/** + * MySQL port - leave blank for default port + * + * @global string $cfg['Servers'][$i]['port'] + */ +$cfg['Servers'][$i]['port'] = ''; + +/** + * Path to the socket - leave blank for default socket + * + * @global string $cfg['Servers'][$i]['socket'] + */ +$cfg['Servers'][$i]['socket'] = ''; + +/** + * Use SSL for connecting to MySQL server? + * + * @global boolean $cfg['Servers'][$i]['ssl'] + */ +$cfg['Servers'][$i]['ssl'] = false; + +/** + * Path to the key file when using SSL for connecting to the MySQL server + * + * @global string $cfg['Servers'][$i]['ssl_key'] + */ +$cfg['Servers'][$i]['ssl_key'] = null; + +/** + * Path to the cert file when using SSL for connecting to the MySQL server + * + * @global string $cfg['Servers'][$i]['ssl_cert'] + */ +$cfg['Servers'][$i]['ssl_cert'] = null; + +/** + * Path to the CA file when using SSL for connecting to the MySQL server + * + * @global string $cfg['Servers'][$i]['ssl_ca'] + */ +$cfg['Servers'][$i]['ssl_ca'] = null; + +/** + * Directory containing trusted SSL CA certificates in PEM format + * + * @global string $cfg['Servers'][$i]['ssl_ca_path'] + */ +$cfg['Servers'][$i]['ssl_ca_path'] = null; + +/** + * List of allowable ciphers for SSL connections to the MySQL server + * + * @global string $cfg['Servers'][$i]['ssl_ciphers'] + */ +$cfg['Servers'][$i]['ssl_ciphers'] = null; + +/** + * MySQL 5.6 or later triggers the mysqlnd driver in PHP to validate the + * peer_name of the SSL certifcate + * For most self-signed certificates this is a problem. Setting this to false + * will disable the check and allow the connection (PHP 5.6.16 or later) + * + * @link https://bugs.php.net/68344 + * + * @global string $cfg['Servers'][$i]['ssl_verify'] + */ +$cfg['Servers'][$i]['ssl_verify'] = true; + +/** + * Use compressed protocol for the MySQL connection + * + * @global boolean $cfg['Servers'][$i]['compress'] + */ +$cfg['Servers'][$i]['compress'] = false; + +/** + * MySQL control host. This permits to use a host different than the + * main host, for the phpMyAdmin configuration storage. If left empty, + * $cfg['Servers'][$i]['host'] is used instead. + * + * @global string $cfg['Servers'][$i]['controlhost'] + */ +$cfg['Servers'][$i]['controlhost'] = ''; + +/** + * MySQL control port. This permits to use a port different than the + * main port, for the phpMyAdmin configuration storage. If left empty, + * $cfg['Servers'][$i]['port'] is used instead. + * + * @global string $cfg['Servers'][$i]['controlport'] + */ +$cfg['Servers'][$i]['controlport'] = ''; + +/** + * MySQL control user settings (this user must have read-only + * access to the "mysql/user" and "mysql/db" tables). The controluser is also + * used for all relational features (pmadb) + * + * @global string $cfg['Servers'][$i]['controluser'] + */ +$cfg['Servers'][$i]['controluser'] = ''; + +/** + * MySQL control user settings (this user must have read-only + * access to the "mysql/user" and "mysql/db" tables). The controluser is also + * used for all relational features (pmadb) + * + * @global string $cfg['Servers'][$i]['controlpass'] + */ +$cfg['Servers'][$i]['controlpass'] = ''; + +/** + * Authentication method (valid choices: config, http, signon or cookie) + * + * @global string $cfg['Servers'][$i]['auth_type'] + */ +$cfg['Servers'][$i]['auth_type'] = 'cookie'; + +/** + * HTTP Basic Auth Realm name to display (only used with 'HTTP' auth_type) + * + * @global string $cfg['Servers'][$i]['auth_http_realm'] + */ +$cfg['Servers'][$i]['auth_http_realm'] = ''; + +/** + * MySQL user + * + * @global string $cfg['Servers'][$i]['user'] + */ +$cfg['Servers'][$i]['user'] = 'root'; + +/** + * MySQL password (only needed with 'config' auth_type) + * + * @global string $cfg['Servers'][$i]['password'] + */ +$cfg['Servers'][$i]['password'] = ''; + +/** + * Session to use for 'signon' authentication method + * + * @global string $cfg['Servers'][$i]['SignonSession'] + */ +$cfg['Servers'][$i]['SignonSession'] = ''; + +/** + * Cookie params to match session to use for 'signon' authentication method + * It should be an associative array matching result of session_get_cookie_params() in other system + * + * @global array $cfg['Servers'][$i]['SignonCookieParams'] + */ +$cfg['Servers'][$i]['SignonCookieParams'] = []; + +/** + * PHP script to use for 'signon' authentication method + * + * @global string $cfg['Servers'][$i]['SignonScript'] + */ +$cfg['Servers'][$i]['SignonScript'] = ''; + +/** + * URL where to redirect user to login for 'signon' authentication method + * + * @global string $cfg['Servers'][$i]['SignonURL'] + */ +$cfg['Servers'][$i]['SignonURL'] = ''; + +/** + * URL where to redirect user after logout + * + * @global string $cfg['Servers'][$i]['LogoutURL'] + */ +$cfg['Servers'][$i]['LogoutURL'] = ''; + +/** + * If set to a db-name, only this db is displayed in navigation panel + * It may also be an array of db-names + * + * @global string $cfg['Servers'][$i]['only_db'] + */ +$cfg['Servers'][$i]['only_db'] = ''; + +/** + * Database name to be hidden from listings + * + * @global string $cfg['Servers'][$i]['hide_db'] + */ +$cfg['Servers'][$i]['hide_db'] = ''; + +/** + * Verbose name for this host - leave blank to show the hostname + * (for HTTP authentication, all non-US-ASCII characters will be stripped) + * + * @global string $cfg['Servers'][$i]['verbose'] + */ +$cfg['Servers'][$i]['verbose'] = ''; + +/** + * Database used for Relation, Bookmark and PDF Features + * (see sql/create_tables.sql) + * - leave blank for no support + * SUGGESTED: 'phpmyadmin' + * + * @global string $cfg['Servers'][$i]['pmadb'] + */ +$cfg['Servers'][$i]['pmadb'] = ''; + +/** + * Bookmark table + * - leave blank for no bookmark support + * SUGGESTED: 'pma__bookmark' + * + * @global string $cfg['Servers'][$i]['bookmarktable'] + */ +$cfg['Servers'][$i]['bookmarktable'] = ''; + +/** + * table to describe the relation between links (see doc) + * - leave blank for no relation-links support + * SUGGESTED: 'pma__relation' + * + * @global string $cfg['Servers'][$i]['relation'] + */ +$cfg['Servers'][$i]['relation'] = ''; + +/** + * table to describe the display fields + * - leave blank for no display fields support + * SUGGESTED: 'pma__table_info' + * + * @global string $cfg['Servers'][$i]['table_info'] + */ +$cfg['Servers'][$i]['table_info'] = ''; + +/** + * table to describe the tables position for the designer and PDF schema + * - leave blank for no PDF schema support + * SUGGESTED: 'pma__table_coords' + * + * @global string $cfg['Servers'][$i]['table_coords'] + */ +$cfg['Servers'][$i]['table_coords'] = ''; + +/** + * table to describe pages of relationpdf + * - leave blank if you don't want to use this + * SUGGESTED: 'pma__pdf_pages' + * + * @global string $cfg['Servers'][$i]['pdf_pages'] + */ +$cfg['Servers'][$i]['pdf_pages'] = ''; + +/** + * table to store column information + * - leave blank for no column comments/mime types + * SUGGESTED: 'pma__column_info' + * + * @global string $cfg['Servers'][$i]['column_info'] + */ +$cfg['Servers'][$i]['column_info'] = ''; + +/** + * table to store SQL history + * - leave blank for no SQL query history + * SUGGESTED: 'pma__history' + * + * @global string $cfg['Servers'][$i]['history'] + */ +$cfg['Servers'][$i]['history'] = ''; + +/** + * table to store recently used tables + * - leave blank for no "persistent" recently used tables + * SUGGESTED: 'pma__recent' + */ +$cfg['Servers'][$i]['recent'] = ''; + +/** + * table to store favorite tables + * - leave blank for no favorite tables + * SUGGESTED: 'pma__favorite' + */ +$cfg['Servers'][$i]['favorite'] = ''; + +/** + * table to store UI preferences for tables + * - leave blank for no "persistent" UI preferences + * SUGGESTED: 'pma__table_uiprefs' + */ +$cfg['Servers'][$i]['table_uiprefs'] = ''; + +/** + * table to store SQL tracking + * - leave blank for no SQL tracking + * SUGGESTED: 'pma__tracking' + * + * @global string $cfg['Servers'][$i]['tracking'] + */ +$cfg['Servers'][$i]['tracking'] = ''; + +/** + * table to store user preferences + * - leave blank to disable server storage + * SUGGESTED: 'pma__userconfig' + * + * @global string $cfg['Servers'][$i]['userconfig'] + */ +$cfg['Servers'][$i]['userconfig'] = ''; + +/** + * table to store users and their assignment to user groups + * - leave blank to disable configurable menus feature + * SUGGESTED: 'pma__users' + * + * @global string $cfg['Servers'][$i]['users'] + */ +$cfg['Servers'][$i]['users'] = ''; + +/** + * table to store allowed menu items for each user group + * - leave blank to disable configurable menus feature + * SUGGESTED: 'pma__usergroups' + * + * @global string $cfg['Servers'][$i]['usergroups'] + */ +$cfg['Servers'][$i]['usergroups'] = ''; + +/** + * table to store information about item hidden from navigation tree + * - leave blank to disable hide/show navigation items feature + * SUGGESTED: 'pma__navigationhiding' + * + * @global string $cfg['Servers'][$i]['navigationhiding'] + */ +$cfg['Servers'][$i]['navigationhiding'] = ''; + +/** + * table to store information about saved searches from query-by-example on a db + * - leave blank to disable saved searches feature + * SUGGESTED: 'pma__savedsearches' + * + * @global string $cfg['Servers'][$i]['savedsearches'] + */ +$cfg['Servers'][$i]['savedsearches'] = ''; + +/** + * table to store central list of columns per database + * - leave blank to disable central list of columns feature + * SUGGESTED: 'pma__central_columns' + * + * @global string $cfg['Servers'][$i]['central_columns'] + */ +$cfg['Servers'][$i]['central_columns'] = ''; + +/** + * table to store designer settings + * - leave blank to disable the storage of designer settings + * SUGGESTED: 'pma__designer_settings' + * + * @global string $cfg['Servers'][$i]['designer_settings'] + */ +$cfg['Servers'][$i]['designer_settings'] = ''; + +/** + * table to store export templates + * - leave blank to disable saved searches feature + * SUGGESTED: 'pma__export_templates' + * + * @global string $cfg['Servers'][$i]['export_templates'] + */ +$cfg['Servers'][$i]['export_templates'] = ''; + +/** + * Maximum number of records saved in $cfg['Servers'][$i]['table_uiprefs'] table. + * + * In case where tables in databases is modified (e.g. dropped or renamed), + * table_uiprefs may contains invalid data (referring to tables which are not + * exist anymore). + * This configuration make sure that we only keep N (N = MaxTableUiprefs) + * newest record in table_uiprefs and automatically delete older records. + * + * @global integer $cfg['Servers'][$i]['userconfig'] = ''; + */ +$cfg['Servers'][$i]['MaxTableUiprefs'] = 100; + +/** + * Sets the time zone used by phpMyAdmin. Possible values are explained at + * https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html + * + * @global string $cfg['Servers'][$i]['SessionTimeZone'] = '' + */ +$cfg['Servers'][$i]['SessionTimeZone'] = ''; + +/** + * whether to allow root login + * + * @global boolean $cfg['Servers'][$i]['AllowRoot'] + */ +$cfg['Servers'][$i]['AllowRoot'] = true; + +/** + * whether to allow login of any user without a password + * + * @global boolean $cfg['Servers'][$i]['AllowNoPassword'] + */ +$cfg['Servers'][$i]['AllowNoPassword'] = false; + +/** + * Host authentication order, leave blank to not use + * + * @global string $cfg['Servers'][$i]['AllowDeny']['order'] + */ +$cfg['Servers'][$i]['AllowDeny']['order'] = ''; + +/** + * Host authentication rules, leave blank for defaults + * + * @global array $cfg['Servers'][$i]['AllowDeny']['rules'] + */ +$cfg['Servers'][$i]['AllowDeny']['rules'] = []; + +/** + * Disable use of INFORMATION_SCHEMA. + * + * @see https://github.com/phpmyadmin/phpmyadmin/issues/8970 + * @see https://bugs.mysql.com/19588 + * + * @global boolean $cfg['Servers'][$i]['DisableIS'] + */ +$cfg['Servers'][$i]['DisableIS'] = false; + +/** + * Whether the tracking mechanism creates + * versions for tables and views automatically. + * + * @global bool $cfg['Servers'][$i]['tracking_version_auto_create'] + */ +$cfg['Servers'][$i]['tracking_version_auto_create'] = false; + +/** + * Defines the list of statements + * the auto-creation uses for new versions. + * + * @global string $cfg['Servers'][$i]['tracking_default_statements'] + */ +$cfg['Servers'][$i]['tracking_default_statements'] = 'CREATE TABLE,ALTER TABLE,DROP TABLE,RENAME TABLE,CREATE INDEX,' . + 'DROP INDEX,INSERT,UPDATE,DELETE,TRUNCATE,REPLACE,CREATE VIEW,' . + 'ALTER VIEW,DROP VIEW,CREATE DATABASE,ALTER DATABASE,DROP DATABASE'; + +/** + * Whether a DROP VIEW IF EXISTS statement will be added + * as first line to the log when creating a view. + * + * @global bool $cfg['Servers'][$i]['tracking_add_drop_view'] + */ +$cfg['Servers'][$i]['tracking_add_drop_view'] = true; + +/** + * Whether a DROP TABLE IF EXISTS statement will be added + * as first line to the log when creating a table. + * + * @global bool $cfg['Servers'][$i]['tracking_add_drop_table'] + */ +$cfg['Servers'][$i]['tracking_add_drop_table'] = true; + +/** + * Whether a DROP DATABASE IF EXISTS statement will be added + * as first line to the log when creating a database. + * + * @global bool $cfg['Servers'][$i]['tracking_add_drop_database'] + */ +$cfg['Servers'][$i]['tracking_add_drop_database'] = true; + +/** + * Whether to show or hide detailed MySQL/MariaDB connection errors on the login page. + * + * @global bool $cfg['Servers'][$i]['hide_connection_errors'] + */ +$cfg['Servers'][$i]['hide_connection_errors'] = false; + +/** + * Default server (0 = no default server) + * + * If you have more than one server configured, you can set $cfg['ServerDefault'] + * to any one of them to auto-connect to that server when phpMyAdmin is started, + * or set it to 0 to be given a list of servers without logging in + * If you have only one server configured, $cfg['ServerDefault'] *MUST* be + * set to that server. + * + * @global integer $cfg['ServerDefault'] + */ +$cfg['ServerDefault'] = 1; + +/** + * Other core phpMyAdmin settings + */ + +/** + * whether version check is active + * + * @global boolean $cfg['VersionCheck'] + */ +if (defined('VERSION_CHECK_DEFAULT')) { + $cfg['VersionCheck'] = VERSION_CHECK_DEFAULT; +} else { + $cfg['VersionCheck'] = true; +} + +/** + * The url of the proxy to be used when retrieving the information about + * the latest version of phpMyAdmin or error reporting. You need this if + * the server where phpMyAdmin is installed does not have direct access to + * the internet. + * The format is: "hostname:portnumber" + * + * @global string $cfg['ProxyUrl'] + */ +$cfg['ProxyUrl'] = ''; + +/** + * The username for authenticating with the proxy. By default, no + * authentication is performed. If a username is supplied, Basic + * Authentication will be performed. No other types of authentication + * are currently supported. + * + * @global string $cfg['ProxyUser'] + */ +$cfg['ProxyUser'] = ''; + +/** + * The password for authenticating with the proxy. + * + * @global string $cfg['ProxyPass'] + */ +$cfg['ProxyPass'] = ''; + +/** + * maximum number of db's displayed in database list + * + * @global integer $cfg['MaxDbList'] + */ +$cfg['MaxDbList'] = 100; + +/** + * maximum number of tables displayed in table list + * + * @global integer $cfg['MaxTableList'] + */ +$cfg['MaxTableList'] = 250; + +/** + * whether to show hint or not + * + * @global boolean $cfg['ShowHint'] + */ +$cfg['ShowHint'] = true; + +/** + * maximum number of characters when a SQL query is displayed + * + * @global integer $cfg['MaxCharactersInDisplayedSQL'] + */ +$cfg['MaxCharactersInDisplayedSQL'] = 1000; + +/** + * use GZIP output buffering if possible (true|false|'auto') + * + * @global string $cfg['OBGzip'] + */ +$cfg['OBGzip'] = 'auto'; + +/** + * use persistent connections to MySQL database + * + * @global boolean $cfg['PersistentConnections'] + */ +$cfg['PersistentConnections'] = false; + +/** + * maximum execution time in seconds (0 for no limit) + * + * @global integer $cfg['ExecTimeLimit'] + */ +$cfg['ExecTimeLimit'] = 300; + +/** + * Path for storing session data (session_save_path PHP parameter). + * + * @global integer $cfg['SessionSavePath'] + */ +$cfg['SessionSavePath'] = ''; + +/** + * Hosts or IPs to consider safe when checking if SSL is used or not + * + * @global array $cfg['MysqlSslWarningSafeHosts'] + */ +$cfg['MysqlSslWarningSafeHosts'] = ['127.0.0.1', 'localhost']; + +/** + * maximum allocated bytes ('-1' for no limit, '0' for no change) + * this is a string because '16M' is a valid value; we must put here + * a string as the default value so that /setup accepts strings + * + * @global string $cfg['MemoryLimit'] + */ +$cfg['MemoryLimit'] = '-1'; + +/** + * mark used tables, make possible to show locked tables (since MySQL 3.23.30) + * + * @global boolean $cfg['SkipLockedTables'] + */ +$cfg['SkipLockedTables'] = false; + +/** + * show SQL queries as run + * + * @global boolean $cfg['ShowSQL'] + */ +$cfg['ShowSQL'] = true; + +/** + * retain SQL input on Ajax execute + * + * @global boolean $cfg['RetainQueryEditor'] + */ +$cfg['RetainQueryBox'] = false; + +/** + * use CodeMirror syntax highlighting for editing SQL + * + * @global boolean $cfg['CodemirrorEnable'] + */ +$cfg['CodemirrorEnable'] = true; + +/** + * use the parser to find any errors in the query before executing + * + * @global boolean $cfg['LintEnable'] + */ +$cfg['LintEnable'] = true; + +/** + * show a 'Drop database' link to normal users + * + * @global boolean $cfg['AllowUserDropDatabase'] + */ +$cfg['AllowUserDropDatabase'] = false; + +/** + * confirm some commands that can result in loss of data + * + * @global boolean $cfg['Confirm'] + */ +$cfg['Confirm'] = true; + +/** + * sets SameSite attribute of the Set-Cookie HTTP response header + * + * Valid values are: + * - Lax + * - Strict + * - None + * + * @global string $cfg['CookieSameSite'] + */ + $cfg['CookieSameSite'] = 'Strict'; + +/** + * recall previous login in cookie authentication mode or not + * + * @global boolean $cfg['LoginCookieRecall'] + */ +$cfg['LoginCookieRecall'] = true; + +/** + * validity of cookie login (in seconds; 1440 matches php.ini's + * session.gc_maxlifetime) + * + * @global integer $cfg['LoginCookieValidity'] + */ +$cfg['LoginCookieValidity'] = 1440; + +/** + * how long login cookie should be stored (in seconds) + * + * @global integer $cfg['LoginCookieStore'] + */ +$cfg['LoginCookieStore'] = 0; + +/** + * whether to delete all login cookies on logout + * + * @global boolean $cfg['LoginCookieDeleteAll'] + */ +$cfg['LoginCookieDeleteAll'] = true; + +/** + * whether to enable the "database search" feature or not + * + * @global boolean $cfg['UseDbSearch'] + */ +$cfg['UseDbSearch'] = true; + +/** + * if set to true, PMA continues computing multiple-statement queries + * even if one of the queries failed + * + * @global boolean $cfg['IgnoreMultiSubmitErrors'] + */ +$cfg['IgnoreMultiSubmitErrors'] = false; + +/** + * Define whether phpMyAdmin will encrypt sensitive data from the URL query string. + * + * @global bool $cfg['URLQueryEncryption'] + */ +$cfg['URLQueryEncryption'] = false; + +/** + * A secret key used to encrypt/decrypt the URL query string. Should be 32 bytes long. + * + * @global string $cfg['URLQueryEncryptionSecretKey'] + */ +$cfg['URLQueryEncryptionSecretKey'] = ''; + +/** + * allow login to any user entered server in cookie based authentication + * + * @global boolean $cfg['AllowArbitraryServer'] + */ +$cfg['AllowArbitraryServer'] = false; + +/** + * restrict by IP (with regular expression) the MySQL servers the user can enter + * when $cfg['AllowArbitraryServer'] = true + * + * @global string $cfg['ArbitraryServerRegexp'] + */ +$cfg['ArbitraryServerRegexp'] = ''; + +/** + * To enable reCaptcha v2 checkbox mode if necessary + * + * @global string $cfg['CaptchaMethod'] + */ +$cfg['CaptchaMethod'] = 'invisible'; + +/** + * URL for the reCaptcha v2 compatible API to use + * + * @global string $cfg['CaptchaApi'] + */ +$cfg['CaptchaApi'] = 'https://www.google.com/recaptcha/api.js'; + +/** + * Content-Security-Policy snippet for the reCaptcha v2 compatible API + * + * @global string $cfg['CaptchaCsp'] + */ +$cfg['CaptchaCsp'] = 'https://apis.google.com https://www.google.com/recaptcha/' + . ' https://www.gstatic.com/recaptcha/ https://ssl.gstatic.com/'; + +/** + * reCaptcha API's request parameter name + * + * @global string $cfg['CaptchaRequestParam'] + */ +$cfg['CaptchaRequestParam'] = 'g-recaptcha'; + +/** + * reCaptcha API's response parameter name + * + * @global string $cfg['CaptchaResponseParam'] + */ +$cfg['CaptchaResponseParam'] = 'g-recaptcha-response'; + +/** + * if reCaptcha is enabled it needs public key to connect with the service + * + * @global string $cfg['CaptchaLoginPublicKey'] + */ +$cfg['CaptchaLoginPublicKey'] = ''; + +/** + * if reCaptcha is enabled it needs private key to connect with the service + * + * @global string $cfg['CaptchaLoginPrivateKey'] + */ +$cfg['CaptchaLoginPrivateKey'] = ''; + +/** + * if reCaptcha is enabled may need an URL for site verify + * + * @global string $cfg['CaptchaSiteVerifyURL'] + */ +$cfg['CaptchaSiteVerifyURL'] = ''; + +/** + * Enable drag and drop import + * + * @see feature request : https://github.com/phpmyadmin/phpmyadmin/issues/13155 + * + * @global bool $cfg['enable_drag_drop_import'] + */ +$cfg['enable_drag_drop_import'] = true; + +/******************************************************************************* + * Navigation panel setup + */ + +/** + * In the navigation panel, replaces the database tree with a selector + * + * @global boolean $cfg['ShowDatabasesNavigationAsTree'] + */ +$cfg['ShowDatabasesNavigationAsTree'] = true; + +/** + * maximum number of first level databases displayed in navigation panel + * + * @global integer $cfg['FirstLevelNavigationItems'] + */ +$cfg['FirstLevelNavigationItems'] = 100; + +/** + * maximum number of items displayed in navigation panel + * + * @global integer $cfg['MaxNavigationItems'] + */ +$cfg['MaxNavigationItems'] = 50; + +/** + * turn the select-based light menu into a tree + * + * @global boolean $cfg['NavigationTreeEnableGrouping'] + */ +$cfg['NavigationTreeEnableGrouping'] = true; + +/** + * the separator to sub-tree the select-based light menu tree + * + * @global string $cfg['NavigationTreeDbSeparator'] + */ +$cfg['NavigationTreeDbSeparator'] = '_'; + +/** + * Which string will be used to generate table prefixes + * to split/nest tables into multiple categories + * + * @global string $cfg['NavigationTreeTableSeparator'] + */ +$cfg['NavigationTreeTableSeparator'] = '__'; + +/** + * How many sublevels should be displayed when splitting up tables + * by the above Separator + * + * @global integer $cfg['NavigationTreeTableLevel'] + */ +$cfg['NavigationTreeTableLevel'] = 1; + +/** + * link with main panel by highlighting the current db/table + * + * @global boolean $cfg['NavigationLinkWithMainPanel'] + */ +$cfg['NavigationLinkWithMainPanel'] = true; + +/** + * display logo at top of navigation panel + * + * @global boolean $cfg['NavigationDisplayLogo'] + */ +$cfg['NavigationDisplayLogo'] = true; + +/** + * where should logo link point to (can also contain an external URL) + * + * @global string $cfg['NavigationLogoLink'] + */ +$cfg['NavigationLogoLink'] = 'index.php'; + +/** + * whether to open the linked page in the main window ('main') or + * in a new window ('new') + * + * @global string $cfg['NavigationLogoLinkWindow'] + */ +$cfg['NavigationLogoLinkWindow'] = 'main'; + +/** + * number of recently used tables displayed in the navigation panel + * + * @global integer $cfg['NumRecentTables'] + */ +$cfg['NumRecentTables'] = 10; + +/** + * number of favorite tables displayed in the navigation panel + * + * @global integer $cfg['NumFavoriteTables'] + */ +$cfg['NumFavoriteTables'] = 10; + +/** + * display a JavaScript table filter in the navigation panel + * when more then x tables are present + * + * @global boolean $cfg['NavigationTreeDisplayItemFilterMinimum'] + */ +$cfg['NavigationTreeDisplayItemFilterMinimum'] = 30; + +/** + * display server choice at top of navigation panel + * + * @global boolean $cfg['NavigationDisplayServers'] + */ +$cfg['NavigationDisplayServers'] = true; + +/** + * server choice as links + * + * @global boolean $cfg['DisplayServersList'] + */ +$cfg['DisplayServersList'] = false; + +/** + * display a JavaScript database filter in the navigation panel + * when more then x databases are present + * + * @global boolean $cfg['NavigationTreeDisplayDbFilterMinimum'] + */ +$cfg['NavigationTreeDisplayDbFilterMinimum'] = 30; + +/** + * target of the navigation panel quick access icon + * + * Possible values: + * 'structure' = fields list + * 'sql' = SQL form + * 'search' = search page + * 'insert' = insert row page + * 'browse' = browse page + * + * @global string $cfg['NavigationTreeDefaultTabTable'] + */ +$cfg['NavigationTreeDefaultTabTable'] = 'structure'; + +/** + * target of the navigation panel quick second access icon + * + * Possible values: + * 'structure' = fields list + * 'sql' = SQL form + * 'search' = search page + * 'insert' = insert row page + * 'browse' = browse page + * '' = no link + * + * @global string $cfg['NavigationTreeDefaultTabTable2'] + */ +$cfg['NavigationTreeDefaultTabTable2'] = ''; + +/** + * Enables the possibility of navigation tree expansion + * + * @global boolean $cfg['NavigationTreeEnableExpansion'] + */ +$cfg['NavigationTreeEnableExpansion'] = true; + +/** + * Show tables in navigation panel + * + * @global boolean $cfg['NavigationTreeShowTables'] + */ +$cfg['NavigationTreeShowTables'] = true; + +/** + * Show views in navigation panel + * + * @global boolean $cfg['NavigationTreeShowViews'] + */ +$cfg['NavigationTreeShowViews'] = true; + +/** + * Show functions in navigation panel + * + * @global boolean $cfg['NavigationTreeShowFunctions'] + */ +$cfg['NavigationTreeShowFunctions'] = true; + +/** + * Show procedures in navigation panel + * + * @global boolean $cfg['NavigationTreeShowProcedures'] + */ +$cfg['NavigationTreeShowProcedures'] = true; + +/** + * Show events in navigation panel + * + * @global boolean $cfg['NavigationTreeShowEvents'] + */ +$cfg['NavigationTreeShowEvents'] = true; + +/** + * Width of navigation panel + * + * @global integer $cfg['NavigationWidth'] + */ +$cfg['NavigationWidth'] = 240; + +/** + * Automatically expands single database in navigation panel + * + * @global boolean $cfg['NavigationAutoexpandSingleDb'] + */ +$cfg['NavigationTreeAutoexpandSingleDb'] = true; + +/******************************************************************************* + * In the main panel, at startup... + */ + +/** + * allow to display statistics and space usage in the pages about database + * details and table properties + * + * @global boolean $cfg['ShowStats'] + */ +$cfg['ShowStats'] = true; + +/** + * show PHP info link + * + * @global boolean $cfg['ShowPhpInfo'] + */ +$cfg['ShowPhpInfo'] = false; + +/** + * show MySQL server and web server information + * + * @global boolean $cfg['ShowServerInfo'] + */ +$cfg['ShowServerInfo'] = true; + +/** + * show change password link + * + * @global boolean $cfg['ShowChgPassword'] + */ +$cfg['ShowChgPassword'] = true; + +/** + * show create database form + * + * @global boolean $cfg['ShowCreateDb'] + */ +$cfg['ShowCreateDb'] = true; + + +/******************************************************************************* + * Database structure + */ + +/** + * show charset column in database structure (true|false)? + * + * @global boolean $cfg['ShowDbStructureCharset'] + */ +$cfg['ShowDbStructureCharset'] = false; + +/** + * show comment column in database structure (true|false)? + * + * @global boolean $cfg['ShowDbStructureComment'] + */ +$cfg['ShowDbStructureComment'] = false; + +/** + * show creation timestamp column in database structure (true|false)? + * + * @global boolean $cfg['ShowDbStructureCreation'] + */ +$cfg['ShowDbStructureCreation'] = false; + +/** + * show last update timestamp column in database structure (true|false)? + * + * @global boolean $cfg['ShowDbStructureLastUpdate'] + */ +$cfg['ShowDbStructureLastUpdate'] = false; + +/** + * show last check timestamp column in database structure (true|false)? + * + * @global boolean $cfg['ShowDbStructureLastCheck'] + */ +$cfg['ShowDbStructureLastCheck'] = false; + +/** + * allow hide action columns to drop down menu in database structure (true|false)? + * + * @global boolean $cfg['HideStructureActions'] + */ +$cfg['HideStructureActions'] = true; + +/** + * Show column comments in table structure view (true|false)? + * + * @global boolean $cfg['ShowColumnComments'] + */ +$cfg['ShowColumnComments'] = true; + + +/******************************************************************************* + * In browse mode... + */ + +/** + * Use icons instead of text for the navigation bar buttons (table browse) + * ('text'|'icons'|'both') + * + * @global string $cfg['TableNavigationLinksMode'] + */ +$cfg['TableNavigationLinksMode'] = 'icons'; + +/** + * Defines whether a user should be displayed a "show all (records)" + * button in browse mode or not. + * + * @global boolean $cfg['ShowAll'] + */ +$cfg['ShowAll'] = false; + +/** + * Number of rows displayed when browsing a result set. If the result + * set contains more rows, "Previous" and "Next". + * Possible values: 25,50,100,250,500 + * + * @global integer $cfg['MaxRows'] + */ +$cfg['MaxRows'] = 25; + +/** + * default for 'ORDER BY' clause (valid values are 'ASC', 'DESC' or 'SMART' -ie + * descending order for fields of type TIME, DATE, DATETIME & TIMESTAMP, + * ascending order else-) + * + * @global string $cfg['Order'] + */ +$cfg['Order'] = 'SMART'; + +/** + * grid editing: save edited cell(s) in browse-mode at once + * + * @global boolean $cfg['SaveCellsAtOnce'] + */ +$cfg['SaveCellsAtOnce'] = false; + +/** + * grid editing: which action triggers it, or completely disable the feature + * + * Possible values: + * 'click' + * 'double-click' + * 'disabled' + * + * @global string $cfg['GridEditing'] + */ +$cfg['GridEditing'] = 'double-click'; + +/** + * Options > Relational display + * + * Possible values: + * 'K' for key value + * 'D' for display column + * + * @global string $cfg['RelationalDisplay'] + */ +$cfg['RelationalDisplay'] = 'K'; + + +/******************************************************************************* + * In edit mode... + */ + +/** + * disallow editing of binary fields + * valid values are: + * false allow editing + * 'blob' allow editing except for BLOB fields + * 'noblob' disallow editing except for BLOB fields + * 'all' disallow editing + * + * @global string $cfg['ProtectBinary'] + */ +$cfg['ProtectBinary'] = 'blob'; + +/** + * Display the function fields in edit/insert mode + * + * @global boolean $cfg['ShowFunctionFields'] + */ +$cfg['ShowFunctionFields'] = true; + +/** + * Display the type fields in edit/insert mode + * + * @global boolean $cfg['ShowFieldTypesInDataEditView'] + */ +$cfg['ShowFieldTypesInDataEditView'] = true; + +/** + * Which editor should be used for CHAR/VARCHAR fields: + * input - allows limiting of input length + * textarea - allows newlines in fields + * + * @global string $cfg['CharEditing'] + */ +$cfg['CharEditing'] = 'input'; + +/** + * The minimum size for character input fields + * + * @global integer $cfg['MinSizeForInputField'] + */ +$cfg['MinSizeForInputField'] = 4; + +/** + * The maximum size for character input fields + * + * @global integer $cfg['MinSizeForInputField'] + */ +$cfg['MaxSizeForInputField'] = 60; + +/** + * How many rows can be inserted at one time + * + * @global integer $cfg['InsertRows'] + */ +$cfg['InsertRows'] = 2; + +/** + * Sort order for items in a foreign-key drop-down list. + * 'content' is the referenced data, 'id' is the key value. + * + * @global array $cfg['ForeignKeyDropdownOrder'] + */ +$cfg['ForeignKeyDropdownOrder'] = [ + 'content-id', + 'id-content', +]; + +/** + * A drop-down list will be used if fewer items are present + * + * @global integer $cfg['ForeignKeyMaxLimit'] + */ +$cfg['ForeignKeyMaxLimit'] = 100; + +/** + * Whether to disable foreign key checks while importing + * + * @global boolean $cfg['DefaultForeignKeyChecks'] + */ +$cfg['DefaultForeignKeyChecks'] = 'default'; + +/******************************************************************************* + * For the export features... + */ + +/** + * Allow for the use of zip compression (requires zip support to be enabled) + * + * @global boolean $cfg['ZipDump'] + */ +$cfg['ZipDump'] = true; + +/** + * Allow for the use of gzip compression (requires zlib) + * + * @global boolean $cfg['GZipDump'] + */ +$cfg['GZipDump'] = true; + +/** + * Allow for the use of bzip2 decompression (requires bz2 extension) + * + * @global boolean $cfg['BZipDump'] + */ +$cfg['BZipDump'] = true; + +/** + * Will compress gzip exports on the fly without the need for much memory. + * If you encounter problems with created gzip files disable this feature. + * + * @global boolean $cfg['CompressOnFly'] + */ +$cfg['CompressOnFly'] = true; + + +/******************************************************************************* + * Tabs display settings + */ + +/** + * How to display the menu tabs ('icons'|'text'|'both') + * + * @global boolean $cfg['TabsMode'] + */ +$cfg['TabsMode'] = 'both'; + +/** + * How to display various action links ('icons'|'text'|'both') + * + * @global boolean $cfg['ActionLinksMode'] + */ +$cfg['ActionLinksMode'] = 'both'; + +/** + * How many columns should be used for table display of a database? + * (a value larger than 1 results in some information being hidden) + * + * @global integer $cfg['PropertiesNumColumns'] + */ +$cfg['PropertiesNumColumns'] = 1; + +/** + * Possible values: + * 'welcome' = the welcome page + * (recommended for multiuser setups) + * 'databases' = list of databases + * 'status' = runtime information + * 'variables' = MySQL server variables + * 'privileges' = user management + * + * @global string $cfg['DefaultTabServer'] + */ +$cfg['DefaultTabServer'] = 'welcome'; + +/** + * Possible values: + * 'structure' = tables list + * 'sql' = SQL form + * 'search' = search query + * 'operations' = operations on database + * + * @global string $cfg['DefaultTabDatabase'] + */ +$cfg['DefaultTabDatabase'] = 'structure'; + +/** + * Possible values: + * 'structure' = fields list + * 'sql' = SQL form + * 'search' = search page + * 'insert' = insert row page + * 'browse' = browse page + * + * @global string $cfg['DefaultTabTable'] + */ +$cfg['DefaultTabTable'] = 'browse'; + +/** + * Whether to display image or text or both image and text in table row + * action segment. Value can be either of ``image``, ``text`` or ``both``. + */ +$cfg['RowActionType'] = 'both'; + +/******************************************************************************* + * Export defaults + */ +$cfg['Export'] = []; + +/** + * codegen/csv/excel/htmlexcel/htmlword/latex/ods/odt/pdf/sql/texytext/xml/yaml + * + * @global string $cfg['Export']['format'] + */ +$cfg['Export']['format'] = 'sql'; + +/** + * quick/custom/custom-no-form + * + * @global string $cfg['Export']['format'] + */ +$cfg['Export']['method'] = 'quick'; + +/** + * none/zip/gzip + * + * @global string $cfg['Export']['compression'] + */ +$cfg['Export']['compression'] = 'none'; + +/** + * Whether to LOCK TABLES before exporting + * + * @global boolean $cfg['Export']['lock_tables'] + */ +$cfg['Export']['lock_tables'] = false; + +/** + * Whether to export databases/tables as separate files + * + * @global boolean $cfg['Export']['as_separate_files'] + */ +$cfg['Export']['as_separate_files'] = false; + +/** + * @global boolean $cfg['Export']['asfile'] + */ +$cfg['Export']['asfile'] = true; + +/** + * @global string $cfg['Export']['charset'] + */ +$cfg['Export']['charset'] = ''; + +/** + * @global boolean $cfg['Export']['onserver'] + */ +$cfg['Export']['onserver'] = false; + +/** + * @global boolean $cfg['Export']['onserver_overwrite'] + */ +$cfg['Export']['onserver_overwrite'] = false; + +/** + * @global boolean $cfg['Export']['quick_export_onserver'] + */ +$cfg['Export']['quick_export_onserver'] = false; + +/** + * @global boolean $cfg['Export']['quick_export_onserver_overwrite'] + */ +$cfg['Export']['quick_export_onserver_overwrite'] = false; + +/** + * @global boolean $cfg['Export']['remember_file_template'] + */ +$cfg['Export']['remember_file_template'] = true; + +/** + * @global string $cfg['Export']['file_template_table'] + */ +$cfg['Export']['file_template_table'] = '@TABLE@'; + +/** + * @global string $cfg['Export']['file_template_database'] + */ +$cfg['Export']['file_template_database'] = '@DATABASE@'; + +/** + * @global string $cfg['Export']['file_template_server'] + */ +$cfg['Export']['file_template_server'] = '@SERVER@'; + +/** + * @global string $cfg['Export']['codegen_structure_or_data'] + */ +$cfg['Export']['codegen_structure_or_data'] = 'data'; + +/** + * @global $cfg['Export']['codegen_format'] + */ +$cfg['Export']['codegen_format'] = 0; + +/** + * @global boolean $cfg['Export']['ods_columns'] + */ +$cfg['Export']['ods_columns'] = false; + +/** + * @global string $cfg['Export']['ods_null'] + */ +$cfg['Export']['ods_null'] = 'NULL'; + +/** + * @global string $cfg['Export']['odt_structure_or_data'] + */ +$cfg['Export']['odt_structure_or_data'] = 'structure_and_data'; + +/** + * @global boolean $cfg['Export']['odt_columns'] + */ +$cfg['Export']['odt_columns'] = true; + +/** + * @global boolean $cfg['Export']['odt_relation'] + */ +$cfg['Export']['odt_relation'] = true; + +/** + * @global boolean $cfg['Export']['odt_comments'] + */ +$cfg['Export']['odt_comments'] = true; + +/** + * @global boolean $cfg['Export']['odt_mime'] + */ +$cfg['Export']['odt_mime'] = true; + +/** + * @global string $cfg['Export']['odt_null'] + */ +$cfg['Export']['odt_null'] = 'NULL'; + +/** + * @global boolean $cfg['Export']['htmlword_structure_or_data'] + */ +$cfg['Export']['htmlword_structure_or_data'] = 'structure_and_data'; + +/** + * @global boolean $cfg['Export']['htmlword_columns'] + */ +$cfg['Export']['htmlword_columns'] = false; + +/** + * @global string $cfg['Export']['htmlword_null'] + */ +$cfg['Export']['htmlword_null'] = 'NULL'; + +/** + * @global string $cfg['Export']['texytext_structure_or_data'] + */ +$cfg['Export']['texytext_structure_or_data'] = 'structure_and_data'; + +/** + * @global boolean $cfg['Export']['texytext_columns'] + */ +$cfg['Export']['texytext_columns'] = false; + +/** + * @global string $cfg['Export']['texytext_null'] + */ +$cfg['Export']['texytext_null'] = 'NULL'; + +/** + * @global boolean $cfg['Export']['csv_columns'] + */ +$cfg['Export']['csv_columns'] = false; + +/** + * @global string $cfg['Export']['csv_structure_or_data'] + */ +$cfg['Export']['csv_structure_or_data'] = 'data'; + +/** + * @global string $cfg['Export']['csv_null'] + */ +$cfg['Export']['csv_null'] = 'NULL'; + +/** + * @global string $cfg['Export']['csv_separator'] + */ +$cfg['Export']['csv_separator'] = ','; + +/** + * @global string $cfg['Export']['csv_enclosed'] + */ +$cfg['Export']['csv_enclosed'] = '"'; + +/** + * @global string $cfg['Export']['csv_escaped'] + */ +$cfg['Export']['csv_escaped'] = '"'; + +/** + * @global string $cfg['Export']['csv_terminated'] + */ +$cfg['Export']['csv_terminated'] = 'AUTO'; + +/** + * @global string $cfg['Export']['csv_removeCRLF'] + */ +$cfg['Export']['csv_removeCRLF'] = false; + +/** + * @global boolean $cfg['Export']['excel_columns'] + */ +$cfg['Export']['excel_columns'] = true; + +/** + * @global string $cfg['Export']['excel_null'] + */ +$cfg['Export']['excel_null'] = 'NULL'; + +/** + * win/mac + * + * @global string $cfg['Export']['excel_edition'] + */ +$cfg['Export']['excel_edition'] = 'win'; + +/** + * @global string $cfg['Export']['excel_removeCRLF'] + */ +$cfg['Export']['excel_removeCRLF'] = false; + +/** + * @global string $cfg['Export']['excel_structure_or_data'] + */ +$cfg['Export']['excel_structure_or_data'] = 'data'; + +/** + * @global string $cfg['Export']['latex_structure_or_data'] + */ +$cfg['Export']['latex_structure_or_data'] = 'structure_and_data'; + +/** + * @global boolean $cfg['Export']['latex_columns'] + */ +$cfg['Export']['latex_columns'] = true; + +/** + * @global boolean $cfg['Export']['latex_relation'] + */ +$cfg['Export']['latex_relation'] = true; + +/** + * @global boolean $cfg['Export']['latex_comments'] + */ +$cfg['Export']['latex_comments'] = true; + +/** + * @global boolean $cfg['Export']['latex_mime'] + */ +$cfg['Export']['latex_mime'] = true; + +/** + * @global string $cfg['Export']['latex_null'] + */ +$cfg['Export']['latex_null'] = '\textit{NULL}'; + +/** + * @global boolean $cfg['Export']['latex_caption'] + */ +$cfg['Export']['latex_caption'] = true; + +/** + * @global string $cfg['Export']['latex_structure_caption'] + */ +$cfg['Export']['latex_structure_caption'] = 'strLatexStructure'; + +/** + * @global string $cfg['Export']['latex_structure_continued_caption'] + */ +$cfg['Export']['latex_structure_continued_caption'] = 'strLatexStructure strLatexContinued'; + +/** + * @global string $cfg['Export']['latex_data_caption'] + */ +$cfg['Export']['latex_data_caption'] = 'strLatexContent'; + +/** + * @global string $cfg['Export']['latex_data_continued_caption'] + */ +$cfg['Export']['latex_data_continued_caption'] = 'strLatexContent strLatexContinued'; + +/** + * @global string $cfg['Export']['latex_data_label'] + */ +$cfg['Export']['latex_data_label'] = 'tab:@TABLE@-data'; + +/** + * @global string $cfg['Export']['latex_structure_label'] + */ +$cfg['Export']['latex_structure_label'] = 'tab:@TABLE@-structure'; + +/** + * @global string $cfg['Export']['mediawiki_structure_or_data'] + */ +$cfg['Export']['mediawiki_structure_or_data'] = 'data'; + +/** + * @global boolean $cfg['Export']['mediawiki_caption'] + */ +$cfg['Export']['mediawiki_caption'] = true; + +/** + * @global boolean $cfg['Export']['mediawiki_headers'] + */ +$cfg['Export']['mediawiki_headers'] = true; + +/** + * @global string $cfg['Export']['ods_structure_or_data'] + */ +$cfg['Export']['ods_structure_or_data'] = 'data'; + +/** + * @global string $cfg['Export']['pdf_structure_or_data'] + */ +$cfg['Export']['pdf_structure_or_data'] = 'data'; + +/** + * @global string $cfg['Export']['phparray_structure_or_data'] + */ +$cfg['Export']['phparray_structure_or_data'] = 'data'; + +/** + * @global string $cfg['Export']['json_structure_or_data'] + */ +$cfg['Export']['json_structure_or_data'] = 'data'; + +/** + * Export functions + * + * @global string $cfg['Export']['json_pretty_print'] + */ +$cfg['Export']['json_pretty_print'] = false; + +/** + * Export functions + * + * @global string $cfg['Export']['json_unicode'] + */ +$cfg['Export']['json_unicode'] = true; + +/** + * @global string $cfg['Export']['remove_definer_from_definitions'] + */ +$cfg['Export']['remove_definer_from_definitions'] = false; + +/** + * @global string $cfg['Export']['sql_structure_or_data'] + */ +$cfg['Export']['sql_structure_or_data'] = 'structure_and_data'; + +/** + * @global string $cfg['Export']['sql_compatibility'] + */ +$cfg['Export']['sql_compatibility'] = 'NONE'; + +/** + * Whether to include comments in SQL export. + * + * @global string $cfg['Export']['sql_include_comments'] + */ +$cfg['Export']['sql_include_comments'] = true; + +/** + * @global boolean $cfg['Export']['sql_disable_fk'] + */ +$cfg['Export']['sql_disable_fk'] = false; + +/** + * @global boolean $cfg['Export']['sql_views_as_tables'] + */ +$cfg['Export']['sql_views_as_tables'] = false; + +/** + * @global boolean $cfg['Export']['sql_metadata'] + */ +$cfg['Export']['sql_metadata'] = false; + +/** + * @global boolean $cfg['Export']['sql_use_transaction'] + */ +$cfg['Export']['sql_use_transaction'] = true; + +/** + * @global boolean $cfg['Export']['sql_create_database'] + */ +$cfg['Export']['sql_create_database'] = false; + +/** + * @global boolean $cfg['Export']['sql_drop_database'] + */ +$cfg['Export']['sql_drop_database'] = false; + +/** + * @global boolean $cfg['Export']['sql_drop_table'] + */ +$cfg['Export']['sql_drop_table'] = false; + +/** + * true by default for correct behavior when dealing with exporting + * of VIEWs and the stand-in table + * + * @global boolean $cfg['Export']['sql_if_not_exists'] + */ +$cfg['Export']['sql_if_not_exists'] = false; + +/** + * @global boolean $cfg['Export']['sql_view_current_user'] + */ +$cfg['Export']['sql_view_current_user'] = false; + +/** + * @global boolean $cfg['Export']['sql_or_replace'] + */ +$cfg['Export']['sql_or_replace_view'] = false; + +/** + * @global boolean $cfg['Export']['sql_procedure_function'] + */ +$cfg['Export']['sql_procedure_function'] = true; + +/** + * @global boolean $cfg['Export']['sql_create_table'] + */ +$cfg['Export']['sql_create_table'] = true; + +/** + * @global boolean $cfg['Export']['sql_create_view'] + */ +$cfg['Export']['sql_create_view'] = true; + +/** + * @global boolean $cfg['Export']['sql_create_trigger'] + */ +$cfg['Export']['sql_create_trigger'] = true; + +/** + * @global boolean $cfg['Export']['sql_auto_increment'] + */ +$cfg['Export']['sql_auto_increment'] = true; + +/** + * @global boolean $cfg['Export']['sql_backquotes'] + */ +$cfg['Export']['sql_backquotes'] = true; + +/** + * @global boolean $cfg['Export']['sql_dates'] + */ +$cfg['Export']['sql_dates'] = false; + +/** + * @global boolean $cfg['Export']['sql_relation'] + */ +$cfg['Export']['sql_relation'] = false; + +/** + * @global boolean $cfg['Export']['sql_truncate'] + */ +$cfg['Export']['sql_truncate'] = false; + +/** + * @global boolean $cfg['Export']['sql_delayed'] + */ +$cfg['Export']['sql_delayed'] = false; + +/** + * @global boolean $cfg['Export']['sql_ignore'] + */ +$cfg['Export']['sql_ignore'] = false; + +/** + * Export time in UTC. + * + * @global boolean $cfg['Export']['sql_utc_time'] + */ +$cfg['Export']['sql_utc_time'] = true; + +/** + * @global boolean $cfg['Export']['sql_hex_for_binary'] + */ +$cfg['Export']['sql_hex_for_binary'] = true; + +/** + * insert/update/replace + * + * @global string $cfg['Export']['sql_type'] + */ +$cfg['Export']['sql_type'] = 'INSERT'; + +/** + * @global integer $cfg['Export']['sql_max_query_size'] + */ +$cfg['Export']['sql_max_query_size'] = 50000; + +/** + * @global boolean $cfg['Export']['sql_mime'] + */ +$cfg['Export']['sql_mime'] = false; + +/** + * \n is replaced by new line + * + * @global string $cfg['Export']['sql_header_comment'] + */ +$cfg['Export']['sql_header_comment'] = ''; + +/** + * Whether to use complete inserts, extended inserts, both, or neither + * + * @global string $cfg['Export']['sql_insert_syntax'] + */ +$cfg['Export']['sql_insert_syntax'] = 'both'; + +/** + * @global string $cfg['Export']['pdf_report_title'] + */ +$cfg['Export']['pdf_report_title'] = ''; + +/** + * @global string $cfg['Export']['xml_structure_or_data'] + */ +$cfg['Export']['xml_structure_or_data'] = 'data'; + +/** + * Export schema for each structure + * + * @global string $cfg['Export']['xml_export_struc'] + */ +$cfg['Export']['xml_export_struc'] = true; + +/** + * Export events + * + * @global string $cfg['Export']['xml_export_events'] + */ +$cfg['Export']['xml_export_events'] = true; + +/** + * Export functions + * + * @global string $cfg['Export']['xml_export_functions'] + */ +$cfg['Export']['xml_export_functions'] = true; + +/** + * Export procedures + * + * @global string $cfg['Export']['xml_export_procedures'] + */ +$cfg['Export']['xml_export_procedures'] = true; + +/** + * Export schema for each table + * + * @global string $cfg['Export']['xml_export_tables'] + */ +$cfg['Export']['xml_export_tables'] = true; + +/** + * Export triggers + * + * @global string $cfg['Export']['xml_export_triggers'] + */ +$cfg['Export']['xml_export_triggers'] = true; + +/** + * Export views + * + * @global string $cfg['Export']['xml_export_views'] + */ +$cfg['Export']['xml_export_views'] = true; + +/** + * Export contents data + * + * @global string $cfg['Export']['xml_export_contents'] + */ +$cfg['Export']['xml_export_contents'] = true; + +/** + * @global string $cfg['Export']['yaml_structure_or_data'] + */ +$cfg['Export']['yaml_structure_or_data'] = 'data'; + +/******************************************************************************* + * Import defaults + */ +$cfg['Import'] = []; + +/** + * @global string $cfg['Import']['format'] + */ +$cfg['Import']['format'] = 'sql'; + +/** + * Default charset for import. + * + * @global string $cfg['Import']['charset'] + */ +$cfg['Import']['charset'] = ''; + +/** + * @global boolean $cfg['Import']['allow_interrupt'] + */ +$cfg['Import']['allow_interrupt'] = true; + +/** + * @global integer $cfg['Import']['skip_queries'] + */ +$cfg['Import']['skip_queries'] = 0; + +/** + * @global string $cfg['Import']['sql_compatibility'] + */ +$cfg['Import']['sql_compatibility'] = 'NONE'; + +/** + * @global string $cfg['Import']['sql_no_auto_value_on_zero'] + */ +$cfg['Import']['sql_no_auto_value_on_zero'] = true; + +/** + * @global string $cfg['Import']['sql_read_as_multibytes'] + */ +$cfg['Import']['sql_read_as_multibytes'] = false; + +/** + * @global boolean $cfg['Import']['csv_replace'] + */ +$cfg['Import']['csv_replace'] = false; + +/** + * @global boolean $cfg['Import']['csv_ignore'] + */ +$cfg['Import']['csv_ignore'] = false; + +/** + * @global string $cfg['Import']['csv_terminated'] + */ +$cfg['Import']['csv_terminated'] = ','; + +/** + * @global string $cfg['Import']['csv_enclosed'] + */ +$cfg['Import']['csv_enclosed'] = '"'; + +/** + * @global string $cfg['Import']['csv_escaped'] + */ +$cfg['Import']['csv_escaped'] = '"'; + +/** + * @global string $cfg['Import']['csv_new_line'] + */ +$cfg['Import']['csv_new_line'] = 'auto'; + +/** + * @global string $cfg['Import']['csv_columns'] + */ +$cfg['Import']['csv_columns'] = ''; + +/** + * @global string $cfg['Import']['csv_col_names'] + */ +$cfg['Import']['csv_col_names'] = false; + +/** + * @global boolean $cfg['Import']['ldi_replace'] + */ +$cfg['Import']['ldi_replace'] = false; + +/** + * @global boolean $cfg['Import']['ldi_ignore'] + */ +$cfg['Import']['ldi_ignore'] = false; + +/** + * @global string $cfg['Import']['ldi_terminated'] + */ +$cfg['Import']['ldi_terminated'] = ';'; + +/** + * @global string $cfg['Import']['ldi_enclosed'] + */ +$cfg['Import']['ldi_enclosed'] = '"'; + +/** + * @global string $cfg['Import']['ldi_escaped'] + */ +$cfg['Import']['ldi_escaped'] = '\\'; + +/** + * @global string $cfg['Import']['ldi_new_line'] + */ +$cfg['Import']['ldi_new_line'] = 'auto'; + +/** + * @global string $cfg['Import']['ldi_columns'] + */ +$cfg['Import']['ldi_columns'] = ''; + +/** + * 'auto' for auto-detection, true or false for forcing + * + * @global string $cfg['Import']['ldi_local_option'] + */ +$cfg['Import']['ldi_local_option'] = 'auto'; + +/** + * @global string $cfg['Import']['ods_col_names'] + */ +$cfg['Import']['ods_col_names'] = false; + +/** + * @global string $cfg['Import']['ods_empty_rows'] + */ +$cfg['Import']['ods_empty_rows'] = true; + +/** + * @global string $cfg['Import']['ods_recognize_percentages'] + */ +$cfg['Import']['ods_recognize_percentages'] = true; + +/** + * @global string $cfg['Import']['ods_recognize_currency'] + */ +$cfg['Import']['ods_recognize_currency'] = true; + +/******************************************************************************* + * Schema export defaults +*/ +$cfg['Schema'] = []; + +/** + * pdf/eps/dia/svg + * + * @global string $cfg['Schema']['format'] +*/ +$cfg['Schema']['format'] = 'pdf'; + +/** + * @global string $cfg['Schema']['pdf_show_color'] + */ +$cfg['Schema']['pdf_show_color'] = true; + +/** + * @global string $cfg['Schema']['pdf_show_keys'] + */ +$cfg['Schema']['pdf_show_keys'] = false; + +/** + * @global string $cfg['Schema']['pdf_all_tables_same_width'] + */ +$cfg['Schema']['pdf_all_tables_same_width'] = false; + +/** + * L/P + * + * @global string $cfg['Schema']['pdf_orientation'] + */ +$cfg['Schema']['pdf_orientation'] = 'L'; + +/** + * @global string $cfg['Schema']['pdf_paper'] + */ +$cfg['Schema']['pdf_paper'] = 'A4'; + +/** + * @global string $cfg['Schema']['pdf_show_grid'] + */ +$cfg['Schema']['pdf_show_grid'] = false; + +/** + * @global string $cfg['Schema']['pdf_with_doc'] + */ +$cfg['Schema']['pdf_with_doc'] = true; + +/** + * @global string $cfg['Schema']['pdf_table_order'] + */ +$cfg['Schema']['pdf_table_order'] = ''; + +/** + * @global string $cfg['Schema']['dia_show_color'] + */ +$cfg['Schema']['dia_show_color'] = true; + +/** + * @global string $cfg['Schema']['dia_show_keys'] + */ +$cfg['Schema']['dia_show_keys'] = false; + +/** + * L/P + * + * @global string $cfg['Schema']['dia_orientation'] + */ +$cfg['Schema']['dia_orientation'] = 'L'; + +/** + * @global string $cfg['Schema']['dia_paper'] + */ +$cfg['Schema']['dia_paper'] = 'A4'; + +/** + * @global string $cfg['Schema']['eps_show_color'] + */ +$cfg['Schema']['eps_show_color'] = true; + +/** + * @global string $cfg['Schema']['eps_show_keys'] + */ +$cfg['Schema']['eps_show_keys'] = false; + +/** + * @global string $cfg['Schema']['eps_all_tables_same_width'] + */ +$cfg['Schema']['eps_all_tables_same_width'] = false; + +/** + * L/P + * + * @global string $cfg['Schema']['eps_orientation'] + */ +$cfg['Schema']['eps_orientation'] = 'L'; + +/** + * @global string $cfg['Schema']['svg_show_color'] + */ +$cfg['Schema']['svg_show_color'] = true; + +/** + * @global string $cfg['Schema']['svg_show_keys'] + */ +$cfg['Schema']['svg_show_keys'] = false; + +/** + * @global string $cfg['Schema']['svg_all_tables_same_width'] + */ +$cfg['Schema']['svg_all_tables_same_width'] = false; + +/******************************************************************************* + * PDF options + */ + +/** + * @global array $cfg['PDFPageSizes'] + */ +$cfg['PDFPageSizes'] = [ + 'A3', + 'A4', + 'A5', + 'letter', + 'legal', +]; + +/** + * @global string $cfg['PDFDefaultPageSize'] + */ +$cfg['PDFDefaultPageSize'] = 'A4'; + + +/******************************************************************************* + * Language and character set conversion settings + */ + +/** + * Default language to use, if not browser-defined or user-defined + * + * @global string $cfg['DefaultLang'] + */ +$cfg['DefaultLang'] = 'en'; + +/** + * Default connection collation + * + * @global string $cfg['DefaultConnectionCollation'] + */ +$cfg['DefaultConnectionCollation'] = 'utf8mb4_unicode_ci'; + +/** + * Force: always use this language, e.g. 'en' + * + * @global string $cfg['Lang'] + */ +$cfg['Lang'] = ''; + +/** + * Regular expression to limit listed languages, e.g. '^(cs|en)' for Czech and + * English only + * + * @global string $cfg['FilterLanguages'] + */ +$cfg['FilterLanguages'] = ''; + +/** + * You can select here which functions will be used for character set conversion. + * Possible values are: + * auto - automatically use available one (first is tested iconv, then + * recode) + * iconv - use iconv or libiconv functions + * recode - use recode_string function + * mb - use mbstring extension + * none - disable encoding conversion + * + * @global string $cfg['RecodingEngine'] + */ +$cfg['RecodingEngine'] = 'auto'; + +/** + * Specify some parameters for iconv used in character set conversion. See iconv + * documentation for details: + * https://www.gnu.org/savannah-checkouts/gnu/libiconv/documentation/libiconv-1.15/iconv_open.3.html + * + * @global string $cfg['IconvExtraParams'] + */ +$cfg['IconvExtraParams'] = '//TRANSLIT'; + +/** + * Available character sets for MySQL conversion. currently contains all which could + * be found in lang/* files and few more. + * Character sets will be shown in same order as here listed, so if you frequently + * use some of these move them to the top. + * + * @global array $cfg['AvailableCharsets'] + */ +$cfg['AvailableCharsets'] = [ + 'iso-8859-1', + 'iso-8859-2', + 'iso-8859-3', + 'iso-8859-4', + 'iso-8859-5', + 'iso-8859-6', + 'iso-8859-7', + 'iso-8859-8', + 'iso-8859-9', + 'iso-8859-10', + 'iso-8859-11', + 'iso-8859-12', + 'iso-8859-13', + 'iso-8859-14', + 'iso-8859-15', + 'windows-1250', + 'windows-1251', + 'windows-1252', + 'windows-1256', + 'windows-1257', + 'koi8-r', + 'big5', + 'gb2312', + 'utf-16', + 'utf-8', + 'utf-7', + 'x-user-defined', + 'euc-jp', + 'ks_c_5601-1987', + 'tis-620', + 'SHIFT_JIS', + 'SJIS', + 'SJIS-win', +]; + + +/******************************************************************************* + * Customization & design + * + * The graphical settings are now located in themes/theme-name/scss/_variables.scss + */ + +/** + * enable the left panel pointer + * + * @global boolean $cfg['NavigationTreePointerEnable'] + */ +$cfg['NavigationTreePointerEnable'] = true; + +/** + * enable the browse pointer + * + * @global boolean $cfg['BrowsePointerEnable'] + */ +$cfg['BrowsePointerEnable'] = true; + +/** + * enable the browse marker + * + * @global boolean $cfg['BrowseMarkerEnable'] + */ +$cfg['BrowseMarkerEnable'] = true; + +/** + * textarea size (columns) in edit mode + * (this value will be emphasized (*2) for SQL + * query textareas and (*1.25) for query window) + * + * @global integer $cfg['TextareaCols'] + */ +$cfg['TextareaCols'] = 40; + +/** + * textarea size (rows) in edit mode + * + * @global integer $cfg['TextareaRows'] + */ +$cfg['TextareaRows'] = 15; + +/** + * double size of textarea size for LONGTEXT columns + * + * @global boolean $cfg['LongtextDoubleTextarea'] + */ +$cfg['LongtextDoubleTextarea'] = true; + +/** + * auto-select when clicking in the textarea of the query-box + * + * @global boolean $cfg['TextareaAutoSelect'] + */ +$cfg['TextareaAutoSelect'] = false; + +/** + * textarea size (columns) for CHAR/VARCHAR + * + * @global integer $cfg['CharTextareaCols'] + */ +$cfg['CharTextareaCols'] = 40; + +/** + * textarea size (rows) for CHAR/VARCHAR + * + * @global integer $cfg['CharTextareaRows'] + */ +$cfg['CharTextareaRows'] = 7; + +/** + * Max field data length in browse mode for all non-numeric fields + * + * @global integer $cfg['LimitChars'] + */ +$cfg['LimitChars'] = 50; + +/** + * Where to show the edit/copy/delete links in browse mode + * Possible values are 'left', 'right', 'both' and 'none'. + * + * @global string $cfg['RowActionLinks'] + */ +$cfg['RowActionLinks'] = 'left'; + +/** + * Whether to show row links (Edit, Copy, Delete) and checkboxes for + * multiple row operations even when the selection does not have a unique key. + * + * @global boolean $cfg['RowActionLinksWithoutUnique'] + */ +$cfg['RowActionLinksWithoutUnique'] = false; + +/** + * Default sort order by primary key. + * + * @global string $cfg['TablePrimaryKeyOrder'] + */ +$cfg['TablePrimaryKeyOrder'] = 'NONE'; + +/** + * remember the last way a table sorted + * + * @global string $cfg['RememberSorting'] + */ +$cfg['RememberSorting'] = true; + +/** + * shows column comments in 'browse' mode. + * + * @global boolean $cfg['ShowBrowseComments'] + */ +$cfg['ShowBrowseComments'] = true; + +/** + * shows column comments in 'table property' mode. + * + * @global boolean $cfg['ShowPropertyComments'] + */ +$cfg['ShowPropertyComments'] = true; + +/** + * repeat header names every X cells? (0 = deactivate) + * + * @global integer $cfg['RepeatCells'] + */ +$cfg['RepeatCells'] = 100; + +/** + * Set to true if you want DB-based query history.If false, this utilizes + * JS-routines to display query history (lost by window close) + * + * @global boolean $cfg['QueryHistoryDB'] + */ +$cfg['QueryHistoryDB'] = false; + +/** + * When using DB-based query history, how many entries should be kept? + * + * @global integer $cfg['QueryHistoryMax'] + */ +$cfg['QueryHistoryMax'] = 25; + +/** + * Use MIME-Types (stored in column comments table) for + * + * @global boolean $cfg['BrowseMIME'] + */ +$cfg['BrowseMIME'] = true; + +/** + * When approximate count < this, PMA will get exact count for table rows. + * + * @global integer $cfg['MaxExactCount'] + */ +$cfg['MaxExactCount'] = 50000; + +/** + * Zero means that no row count is done for views; see the doc + * + * @global integer $cfg['MaxExactCountViews'] + */ +$cfg['MaxExactCountViews'] = 0; + +/** + * Sort table and database in natural order + * + * @global boolean $cfg['NaturalOrder'] + */ +$cfg['NaturalOrder'] = true; + +/** + * Initial state for sliders + * (open | closed | disabled) + * + * @global string $cfg['InitialSlidersState'] + */ +$cfg['InitialSlidersState'] = 'closed'; + +/** + * User preferences: disallow these settings + * For possible setting names look in libraries/config/user_preferences.forms.php + * + * @global array $cfg['UserprefsDisallow'] + */ +$cfg['UserprefsDisallow'] = []; + +/** + * User preferences: enable the Developer tab + */ +$cfg['UserprefsDeveloperTab'] = false; + +/******************************************************************************* + * Window title settings + */ + +/** + * title of browser window when a table is selected + * + * @global string $cfg['TitleTable'] + */ +$cfg['TitleTable'] = '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@'; + +/** + * title of browser window when a database is selected + * + * @global string $cfg['TitleDatabase'] + */ +$cfg['TitleDatabase'] = '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ | @PHPMYADMIN@'; + +/** + * title of browser window when a server is selected + * + * @global string $cfg['TitleServer'] + */ +$cfg['TitleServer'] = '@HTTP_HOST@ / @VSERVER@ | @PHPMYADMIN@'; + +/** + * title of browser window when nothing is selected + * + * @global string $cfg['TitleDefault'] + */ +$cfg['TitleDefault'] = '@HTTP_HOST@ | @PHPMYADMIN@'; + + +/******************************************************************************* + * theme manager + */ + +/** + * if you want to use selectable themes and if ThemesPath not empty + * set it to true, else set it to false (default is false); + * + * @global boolean $cfg['ThemeManager'] + */ +$cfg['ThemeManager'] = true; + +/** + * set up default theme, you can set up here an valid + * path to themes or 'original' for the original pma-theme + * + * @global string $cfg['ThemeDefault'] + */ +$cfg['ThemeDefault'] = 'pmahomme'; + +/** + * allow different theme for each configured server + * + * @global boolean $cfg['ThemePerServer'] + */ +$cfg['ThemePerServer'] = false; + + +/** + * Default query for table + * + * @global string $cfg['DefaultQueryTable'] + */ +$cfg['DefaultQueryTable'] = 'SELECT * FROM @TABLE@ WHERE 1'; + +/** + * Default query for database + * + * @global string $cfg['DefaultQueryDatabase'] + */ +$cfg['DefaultQueryDatabase'] = ''; + + +/******************************************************************************* + * SQL Query box settings + * These are the links display in all of the SQL Query boxes + * + * @global array $cfg['SQLQuery'] + */ +$cfg['SQLQuery'] = []; + +/** + * Display an "Edit" link on the results page to change a query + * + * @global boolean $cfg['SQLQuery']['Edit'] + */ +$cfg['SQLQuery']['Edit'] = true; + +/** + * Display an "Explain SQL" link on the results page + * + * @global boolean $cfg['SQLQuery']['Explain'] + */ +$cfg['SQLQuery']['Explain'] = true; + +/** + * Display a "Create PHP code" link on the results page to wrap a query in PHP + * + * @global boolean $cfg['SQLQuery']['ShowAsPHP'] + */ +$cfg['SQLQuery']['ShowAsPHP'] = true; + +/** + * Display a "Refresh" link on the results page + * + * @global boolean $cfg['SQLQuery']['Refresh'] + */ +$cfg['SQLQuery']['Refresh'] = true; + +/** + * Enables autoComplete for table & column names in SQL queries + * + * default = 'true' + */ +$cfg['EnableAutocompleteForTablesAndColumns'] = true; + + +/******************************************************************************* + * Web server upload/save/import directories + */ + +/** + * Directory for uploaded files that can be executed by phpMyAdmin. + * For example './upload'. Leave empty for no upload directory support. + * Use %u for username inclusion. + * + * @global string $cfg['UploadDir'] + */ +$cfg['UploadDir'] = ''; + +/** + * Directory where phpMyAdmin can save exported data on server. + * For example './save'. Leave empty for no save directory support. + * Use %u for username inclusion. + * + * @global string $cfg['SaveDir'] + */ +$cfg['SaveDir'] = ''; + +/** + * Directory where phpMyAdmin can save temporary files. + * + * @global string $cfg['TempDir'] + */ +if (defined('TEMP_DIR')) { + $cfg['TempDir'] = TEMP_DIR; +} else { + $cfg['TempDir'] = ROOT_PATH . 'tmp' . DIRECTORY_SEPARATOR; +} + +/** + * Misc. settings + */ + +/** + * Is GD >= 2 available? Set to yes/no/auto. 'auto' does auto-detection, + * which is the only safe way to determine GD version. + * + * @global string $cfg['GD2Available'] + */ +$cfg['GD2Available'] = 'auto'; + +/** + * Lists proxy IP and HTTP header combinations which are trusted for IP allow/deny + * + * @global array $cfg['TrustedProxies'] + */ +$cfg['TrustedProxies'] = []; + +/** + * We normally check the permissions on the configuration file to ensure + * it's not world writable. However, phpMyAdmin could be installed on + * a NTFS filesystem mounted on a non-Windows server, in which case the + * permissions seems wrong but in fact cannot be detected. In this case + * a sysadmin would set the following to false. + */ +$cfg['CheckConfigurationPermissions'] = true; + +/** + * Limit for length of URL in links. When length would be above this limit, it + * is replaced by form with button. + * This is required as some web servers (IIS) have problems with long URLs. + * The recommended limit is 2000 + * (see https://www.boutell.com/newfaq/misc/urllength.html) but we put + * 1000 to accommodate Suhosin, see bug #3358750. + */ +$cfg['LinkLengthLimit'] = 1000; + +/** + * Additional string to allow in CSP headers. + */ + $cfg['CSPAllow'] = ''; + +/** + * Disable the table maintenance mass operations, like optimizing or + * repairing the selected tables of a database. An accidental execution + * of such a maintenance task can enormously slow down a bigger database. + */ +$cfg['DisableMultiTableMaintenance'] = false; + +/** + * Whether or not to query the user before sending the error report to + * the phpMyAdmin team when a JavaScript error occurs + * + * Available options + * (ask | always | never) + * + * @global string $cfg['SendErrorReports'] + */ +$cfg['SendErrorReports'] = 'ask'; + +/** + * Whether Enter or Ctrl+Enter executes queries in the console. + * + * @global boolean $cfg['ConsoleEnterExecutes'] + */ +$cfg['ConsoleEnterExecutes'] = false; + +/** + * Zero Configuration mode. + * + * @global boolean $cfg['ZeroConf'] + */ +$cfg['ZeroConf'] = true; + +/******************************************************************************* + * Developers ONLY! + * + * @global array $cfg['DBG'] + */ +$cfg['DBG'] = []; + +/** + * Output executed queries and their execution times + * + * @global boolean $cfg['DBG']['sql'] + */ +$cfg['DBG']['sql'] = false; + +/** + * Log executed queries and their execution times to syslog + * + * @global boolean $cfg['DBG']['sqllog'] + */ +$cfg['DBG']['sqllog'] = false; + +/** + * Enable to let server present itself as demo server. + * + * @global boolean $cfg['DBG']['demo'] + */ +$cfg['DBG']['demo'] = false; + +/** + * Enable Simple two-factor authentication + * + * @global boolean $cfg['DBG']['simple2fa'] + */ +$cfg['DBG']['simple2fa'] = false; + +/** + * Sets the working environment + * + * This only needs to be changed when you are developing phpMyAdmin itself. + * The development mode may display debug information in some places. + * + * Possible values are 'production' or 'development' + */ +$cfg['environment'] = 'production'; + +/******************************************************************************* + * MySQL settings + */ + +/** + * Default functions for above defined groups + * + * @global array $cfg['DefaultFunctions'] + */ +$cfg['DefaultFunctions'] = [ + 'FUNC_CHAR' => '', + 'FUNC_DATE' => '', + 'FUNC_NUMBER' => '', + 'FUNC_SPATIAL' => 'GeomFromText', + 'FUNC_UUID' => 'UUID', + 'first_timestamp' => 'NOW', +]; + +/** + * Max rows retrieved for zoom search + */ +$cfg['maxRowPlotLimit'] = 500; + +/** + * Show Git revision if applicable + * + * @global boolean $cfg['ShowGitRevision'] + */ +$cfg['ShowGitRevision'] = true; + +/** + * MySQL minimal version required + * + * @global array $cfg['MysqlMinVersion'] + */ +$cfg['MysqlMinVersion'] = [ + 'internal' => 50500, + 'human' => '5.5.0', +]; + +/** + * Disable shortcuts + * + * @global array $cfg['DisableShortcutKeys'] + */ +$cfg['DisableShortcutKeys'] = false; + +/** + * Console configuration + * + * This is mostly meant for user preferences. + */ +$cfg['Console'] = [ + 'StartHistory' => false, + 'AlwaysExpand' => false, + 'CurrentQuery' => true, + 'EnterExecutes' => false, + 'DarkTheme' => false, + 'Mode' => 'info', + 'Height' => 92, + 'GroupQueries' => false, + 'OrderBy' => 'exec', + 'Order' => 'asc', +]; + + +/******************************************************************************* + * Default options for transformations + */ + +/** + * Initialize default transformations array + * + * @global array $cfg['DefaultTransformations'] + */ +$cfg['DefaultTransformations'] = []; + +/** + * Default transformations for Substring + * + * @global array $cfg['DefaultTransformations']['Substring'] + */ +$cfg['DefaultTransformations']['Substring'] = [ + 0, + 'all', + '…', +]; + +/** + * Default transformations for Bool2Text + * + * @global array $cfg['DefaultTransformations']['Bool2Text'] + */ +$cfg['DefaultTransformations']['Bool2Text'] = [ + 'T', + 'F', +]; + +/** + * Default transformations for External + * + * @global array $cfg['DefaultTransformations']['External'] + */ +$cfg['DefaultTransformations']['External'] = [ + 0, + '-f /dev/null -i -wrap -q', + 1, + 1, +]; + +/** + * Default transformations for PreApPend + * + * @global array $cfg['DefaultTransformations']['PreApPend'] + */ +$cfg['DefaultTransformations']['PreApPend'] = [ + '', + '', +]; + +/** + * Default transformations for Hex + * + * @global array $cfg['DefaultTransformations']['Hex'] + */ +$cfg['DefaultTransformations']['Hex'] = ['2']; + +/** + * Default transformations for DateFormat + * + * @global array $cfg['DefaultTransformations']['DateFormat'] + */ +$cfg['DefaultTransformations']['DateFormat'] = [ + 0, + '', + 'local', +]; + +/** + * Set default for FirstDayOfCalendar + * + * @global integer $cfg['FirstDayOfCalendar'] + */ +$cfg['FirstDayOfCalendar'] = 0; + +/** + * Default transformations for Inline + * + * @global array $cfg['DefaultTransformations']['Inline'] + */ +$cfg['DefaultTransformations']['Inline'] = [ + '100', + 100, +]; +$cfg['DefaultTransformations']['Inline']['wrapper_link'] = null; +$cfg['DefaultTransformations']['Inline']['wrapper_params'] = []; + +/** + * Default transformations for TextImageLink + * + * @global array $cfg['DefaultTransformations']['TextImageLink'] + */ +$cfg['DefaultTransformations']['TextImageLink'] = [ + null, + 100, + 50, +]; + +/** + * Default transformations for TextLink + * + * @global array $cfg['DefaultTransformations']['TextLink'] + */ +$cfg['DefaultTransformations']['TextLink'] = [ + null, + null, + null, +]; diff --git a/Sources/php_script/script/phpMyAdmin/libraries/routes.php b/Sources/php_script/script/phpMyAdmin/libraries/routes.php new file mode 100644 index 0000000..de2f959 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/libraries/routes.php @@ -0,0 +1,286 @@ +addRoute(['GET', 'POST'], '[/]', HomeController::class); + $routes->addRoute(['GET', 'POST'], '/browse-foreigners', BrowseForeignersController::class); + $routes->get('/changelog', ChangeLogController::class); + $routes->addRoute(['GET', 'POST'], '/check-relations', CheckRelationsController::class); + $routes->post('/collation-connection', CollationConnectionController::class); + $routes->post('/columns', ColumnController::class); + $routes->addGroup('/config', static function (RouteCollector $routes): void { + $routes->post('/get', Config\GetConfigController::class); + $routes->post('/set', Config\SetConfigController::class); + }); + $routes->addGroup('/database', static function (RouteCollector $routes): void { + $routes->addGroup('/central-columns', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Database\CentralColumnsController::class); + $routes->post('/populate', Database\CentralColumns\PopulateColumnsController::class); + }); + $routes->get('/data-dictionary', Database\DataDictionaryController::class); + $routes->addRoute(['GET', 'POST'], '/designer', Database\DesignerController::class); + $routes->addRoute(['GET', 'POST'], '/events', Database\EventsController::class); + $routes->addRoute(['GET', 'POST'], '/export', Database\ExportController::class); + $routes->addRoute(['GET', 'POST'], '/import', Database\ImportController::class); + $routes->addGroup('/multi-table-query', static function (RouteCollector $routes): void { + $routes->get('', Database\MultiTableQueryController::class); + $routes->get('/tables', Database\MultiTableQuery\TablesController::class); + $routes->post('/query', Database\MultiTableQuery\QueryController::class); + }); + $routes->addGroup('/operations', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Database\OperationsController::class); + $routes->post('/collation', Database\Operations\CollationController::class); + }); + $routes->addRoute(['GET', 'POST'], '/qbe', Database\QueryByExampleController::class); + $routes->addRoute(['GET', 'POST'], '/routines', Database\RoutinesController::class); + $routes->addRoute(['GET', 'POST'], '/search', Database\SearchController::class); + $routes->addGroup('/sql', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Database\SqlController::class); + $routes->post('/autocomplete', Database\SqlAutoCompleteController::class); + $routes->post('/format', Database\SqlFormatController::class); + }); + $routes->addGroup('/structure', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Database\StructureController::class); + $routes->post('/add-prefix', Database\Structure\AddPrefixController::class); + $routes->post('/add-prefix-table', Database\Structure\AddPrefixTableController::class); + $routes->addGroup('/central-columns', static function (RouteCollector $routes): void { + $routes->post('/add', Database\Structure\CentralColumns\AddController::class); + $routes->post('/make-consistent', Database\Structure\CentralColumns\MakeConsistentController::class); + $routes->post('/remove', Database\Structure\CentralColumns\RemoveController::class); + }); + $routes->post('/change-prefix-form', Database\Structure\ChangePrefixFormController::class); + $routes->post('/copy-form', Database\Structure\CopyFormController::class); + $routes->post('/copy-table', Database\Structure\CopyTableController::class); + $routes->post('/copy-table-with-prefix', Database\Structure\CopyTableWithPrefixController::class); + $routes->post('/drop-form', Database\Structure\DropFormController::class); + $routes->post('/drop-table', Database\Structure\DropTableController::class); + $routes->post('/empty-form', Database\Structure\EmptyFormController::class); + $routes->post('/empty-table', Database\Structure\EmptyTableController::class); + $routes->post('/favorite-table', Database\Structure\FavoriteTableController::class); + $routes->addRoute(['GET', 'POST'], '/real-row-count', Database\Structure\RealRowCountController::class); + $routes->post('/replace-prefix', Database\Structure\ReplacePrefixController::class); + $routes->post('/show-create', Database\Structure\ShowCreateController::class); + }); + $routes->addRoute(['GET', 'POST'], '/tracking', Database\TrackingController::class); + $routes->addRoute(['GET', 'POST'], '/triggers', Database\TriggersController::class); + }); + $routes->post('/databases', DatabaseController::class); + $routes->addRoute(['GET', 'POST'], '/error-report', ErrorReportController::class); + $routes->addGroup('/export', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Export\ExportController::class); + $routes->get('/check-time-out', Export\CheckTimeOutController::class); + $routes->post('/tables', Export\TablesController::class); + $routes->addGroup('/template', static function (RouteCollector $routes): void { + $routes->post('/create', Export\Template\CreateController::class); + $routes->post('/delete', Export\Template\DeleteController::class); + $routes->post('/load', Export\Template\LoadController::class); + $routes->post('/update', Export\Template\UpdateController::class); + }); + }); + $routes->addRoute(['GET', 'POST'], '/gis-data-editor', GisDataEditorController::class); + $routes->addRoute(['GET', 'POST'], '/git-revision', GitInfoController::class); + $routes->addGroup('/import', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Import\ImportController::class); + $routes->post('/simulate-dml', Import\SimulateDmlController::class); + }); + $routes->addRoute(['GET', 'POST'], '/import-status', Import\StatusController::class); + $routes->get('/license', LicenseController::class); + $routes->addRoute(['GET', 'POST'], '/lint', LintController::class); + $routes->addRoute(['GET', 'POST'], '/logout', LogoutController::class); + $routes->addRoute(['GET', 'POST'], '/navigation', NavigationController::class); + $routes->addRoute(['GET', 'POST'], '/normalization', NormalizationController::class); + $routes->get('/phpinfo', PhpInfoController::class); + $routes->addGroup('/preferences', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '/export', Preferences\ExportController::class); + $routes->addRoute(['GET', 'POST'], '/features', Preferences\FeaturesController::class); + $routes->addRoute(['GET', 'POST'], '/import', Preferences\ImportController::class); + $routes->addRoute(['GET', 'POST'], '/main-panel', Preferences\MainPanelController::class); + $routes->addRoute(['GET', 'POST'], '/manage', Preferences\ManageController::class); + $routes->addRoute(['GET', 'POST'], '/navigation', Preferences\NavigationController::class); + $routes->addRoute(['GET', 'POST'], '/sql', Preferences\SqlController::class); + $routes->addRoute(['GET', 'POST'], '/two-factor', Preferences\TwoFactorController::class); + }); + $routes->addRoute(['GET', 'POST'], '/recent-table', RecentTablesListController::class); + $routes->addRoute(['GET', 'POST'], '/schema-export', SchemaExportController::class); + $routes->addGroup('/server', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '/binlog', Server\BinlogController::class); + $routes->get('/collations', Server\CollationsController::class); + $routes->addGroup('/databases', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Server\DatabasesController::class); + $routes->post('/create', Server\Databases\CreateController::class); + $routes->post('/destroy', Server\Databases\DestroyController::class); + }); + $routes->addGroup('/engines', static function (RouteCollector $routes): void { + $routes->get('', Server\EnginesController::class); + $routes->get('/{engine}[/{page}]', Server\ShowEngineController::class); + }); + $routes->addRoute(['GET', 'POST'], '/export', Server\ExportController::class); + $routes->addRoute(['GET', 'POST'], '/import', Server\ImportController::class); + $routes->get('/plugins', Server\PluginsController::class); + $routes->addGroup('/privileges', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Server\PrivilegesController::class); + $routes->post('/account-lock', Server\Privileges\AccountLockController::class); + $routes->post('/account-unlock', Server\Privileges\AccountUnlockController::class); + }); + $routes->addRoute(['GET', 'POST'], '/replication', Server\ReplicationController::class); + $routes->addRoute(['GET', 'POST'], '/sql', Server\SqlController::class); + $routes->addGroup('/status', static function (RouteCollector $routes): void { + $routes->get('', Server\Status\StatusController::class); + $routes->get('/advisor', Server\Status\AdvisorController::class); + $routes->addGroup('/monitor', static function (RouteCollector $routes): void { + $routes->get('', Server\Status\MonitorController::class); + $routes->post('/chart', Server\Status\Monitor\ChartingDataController::class); + $routes->post('/slow-log', Server\Status\Monitor\SlowLogController::class); + $routes->post('/general-log', Server\Status\Monitor\GeneralLogController::class); + $routes->post('/log-vars', Server\Status\Monitor\LogVarsController::class); + $routes->post('/query', Server\Status\Monitor\QueryAnalyzerController::class); + }); + $routes->addGroup('/processes', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Server\Status\ProcessesController::class); + $routes->post('/refresh', Server\Status\Processes\RefreshController::class); + $routes->post('/kill/{id:\d+}', Server\Status\Processes\KillController::class); + }); + $routes->get('/queries', Server\Status\QueriesController::class); + $routes->addRoute(['GET', 'POST'], '/variables', Server\Status\VariablesController::class); + }); + $routes->addGroup('/user-groups', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Server\UserGroupsController::class); + $routes->get('/edit-form', Server\UserGroupsFormController::class); + }); + $routes->addGroup('/variables', static function (RouteCollector $routes): void { + $routes->get('', Server\VariablesController::class); + $routes->get('/get/{name}', Server\Variables\GetVariableController::class); + $routes->post('/set/{name}', Server\Variables\SetVariableController::class); + }); + }); + $routes->addGroup('/sql', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Sql\SqlController::class); + $routes->post('/get-relational-values', Sql\RelationalValuesController::class); + $routes->post('/get-enum-values', Sql\EnumValuesController::class); + $routes->post('/get-set-values', Sql\SetValuesController::class); + $routes->get('/get-default-fk-check-value', Sql\DefaultForeignKeyCheckValueController::class); + $routes->post('/set-column-preferences', Sql\ColumnPreferencesController::class); + }); + $routes->addGroup('/table', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '/add-field', Table\AddFieldController::class); + $routes->addGroup('/change', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Table\ChangeController::class); + $routes->post('/rows', Table\ChangeRowsController::class); + }); + $routes->addRoute(['GET', 'POST'], '/chart', Table\ChartController::class); + $routes->addRoute(['GET', 'POST'], '/create', Table\CreateController::class); + $routes->addGroup('/delete', static function (RouteCollector $routes): void { + $routes->post('/confirm', Table\DeleteConfirmController::class); + $routes->post('/rows', Table\DeleteRowsController::class); + }); + $routes->addGroup('/export', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Table\ExportController::class); + $routes->post('/rows', Table\ExportRowsController::class); + }); + $routes->addRoute(['GET', 'POST'], '/find-replace', Table\FindReplaceController::class); + $routes->addRoute(['GET', 'POST'], '/get-field', Table\GetFieldController::class); + $routes->addRoute(['GET', 'POST'], '/gis-visualization', Table\GisVisualizationController::class); + $routes->addRoute(['GET', 'POST'], '/import', Table\ImportController::class); + $routes->addRoute(['GET', 'POST'], '/indexes', Table\IndexesController::class); + $routes->addRoute(['GET', 'POST'], '/indexes/rename', Table\IndexRenameController::class); + $routes->addGroup('/maintenance', static function (RouteCollector $routes): void { + $routes->post('/analyze', Table\Maintenance\AnalyzeController::class); + $routes->post('/check', Table\Maintenance\CheckController::class); + $routes->post('/checksum', Table\Maintenance\ChecksumController::class); + $routes->post('/optimize', Table\Maintenance\OptimizeController::class); + $routes->post('/repair', Table\Maintenance\RepairController::class); + }); + $routes->addGroup('/partition', static function (RouteCollector $routes): void { + $routes->post('/analyze', Table\Partition\AnalyzeController::class); + $routes->post('/check', Table\Partition\CheckController::class); + $routes->post('/drop', Table\Partition\DropController::class); + $routes->post('/optimize', Table\Partition\OptimizeController::class); + $routes->post('/rebuild', Table\Partition\RebuildController::class); + $routes->post('/repair', Table\Partition\RepairController::class); + $routes->post('/truncate', Table\Partition\TruncateController::class); + }); + $routes->addRoute(['GET', 'POST'], '/operations', Table\OperationsController::class); + $routes->addRoute(['GET', 'POST'], '/recent-favorite', Table\RecentFavoriteController::class); + $routes->addRoute(['GET', 'POST'], '/relation', Table\RelationController::class); + $routes->addRoute(['GET', 'POST'], '/replace', Table\ReplaceController::class); + $routes->addRoute(['GET', 'POST'], '/search', Table\SearchController::class); + $routes->addRoute(['GET', 'POST'], '/sql', Table\SqlController::class); + $routes->addGroup('/structure', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '', Table\StructureController::class); + $routes->post('/add-key', Table\Structure\AddKeyController::class); + $routes->post('/browse', Table\Structure\BrowseController::class); + $routes->post('/central-columns-add', Table\Structure\CentralColumnsAddController::class); + $routes->post('/central-columns-remove', Table\Structure\CentralColumnsRemoveController::class); + $routes->addRoute(['GET', 'POST'], '/change', Table\Structure\ChangeController::class); + $routes->post('/drop', Table\DropColumnController::class); + $routes->post('/drop-confirm', Table\DropColumnConfirmationController::class); + $routes->post('/fulltext', Table\Structure\FulltextController::class); + $routes->post('/index', Table\Structure\AddIndexController::class); + $routes->post('/move-columns', Table\Structure\MoveColumnsController::class); + $routes->post('/partitioning', Table\Structure\PartitioningController::class); + $routes->post('/primary', Table\Structure\PrimaryController::class); + $routes->post('/reserved-word-check', Table\Structure\ReservedWordCheckController::class); + $routes->post('/save', Table\Structure\SaveController::class); + $routes->post('/spatial', Table\Structure\SpatialController::class); + $routes->post('/unique', Table\Structure\UniqueController::class); + }); + $routes->addRoute(['GET', 'POST'], '/tracking', Table\TrackingController::class); + $routes->addRoute(['GET', 'POST'], '/triggers', Table\TriggersController::class); + $routes->addRoute(['GET', 'POST'], '/zoom-search', Table\ZoomSearchController::class); + }); + $routes->post('/tables', TableController::class); + $routes->addGroup('/themes', static function (RouteCollector $routes): void { + $routes->get('', ThemesController::class); + $routes->post('/set', ThemeSetController::class); + }); + $routes->addGroup('/transformation', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '/overview', Transformation\OverviewController::class); + $routes->addRoute(['GET', 'POST'], '/wrapper', Transformation\WrapperController::class); + }); + $routes->addRoute(['GET', 'POST'], '/user-password', UserPasswordController::class); + $routes->addRoute(['GET', 'POST'], '/version-check', VersionCheckController::class); + $routes->addGroup('/view', static function (RouteCollector $routes): void { + $routes->addRoute(['GET', 'POST'], '/create', View\CreateController::class); + $routes->addRoute(['GET', 'POST'], '/operations', View\OperationsController::class); + }); +}; diff --git a/Sources/php_script/script/phpMyAdmin/locale/bn/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/bn/LC_MESSAGES/phpmyadmin.mo new file mode 100644 index 0000000000000000000000000000000000000000..d726a52bc5c9977db07628b96cb7125197a7e8b5 GIT binary patch literal 342211 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�K_2iP@V@6uYOu>B-;MO>y0tDTjs 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 a@Z>Q6Gz=sAl_}0YIK12Lq6Uns9QeQg%Ju{R literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/locale/el/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/el/LC_MESSAGES/phpmyadmin.mo new file mode 100644 index 0000000000000000000000000000000000000000..591e3a59e9b3f354596480d5bc2d7b89fc9c5203 GIT binary patch literal 469435 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 F0RROht?U2* literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/locale/he/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/he/LC_MESSAGES/phpmyadmin.mo new file mode 100644 index 0000000000000000000000000000000000000000..889bf9b9eaa198f7a233d820f30fbc8b35ab8aea GIT binary patch literal 141077 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 Ul}$!DOq>{BD&cX$;dz(;3oQ!bDF6Tf literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/locale/ia/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/ia/LC_MESSAGES/phpmyadmin.mo new file mode 100644 index 0000000000000000000000000000000000000000..717ff4537cc8c007d5b3a0e98112a7db16d92c43 GIT binary patch literal 258356 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%0D9ELpe0T4Qg|3}*(Qem?|#&vkW>(33QXHAT; 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 z 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 Gv;PhML=3n9 literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/locale/si/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/si/LC_MESSAGES/phpmyadmin.mo new file mode 100644 index 0000000000000000000000000000000000000000..3a6e1d95b954b139dff838bd306329ba1fc992cd GIT binary patch literal 235642 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 Ol@)s`RIPc-&Hn+(RP71? literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/locale/tr/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/tr/LC_MESSAGES/phpmyadmin.mo new file mode 100644 index 0000000000000000000000000000000000000000..4d4ba219b8454add0fad2c81e8105a81b27d108e GIT binary patch literal 392243 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
        kKF0DXT9N9VaL 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

        E9&!R<^!hf#iKU{KW?zdflT{`{ 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 FzXi|q(6ayl literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/package.json b/Sources/php_script/script/phpMyAdmin/package.json new file mode 100644 index 0000000..5e3b18b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/package.json @@ -0,0 +1,62 @@ +{ + "name": "phpmyadmin", + "version": "5.2.0", + "description": "A web interface for MySQL and MariaDB", + "repository": "https://github.com/phpmyadmin/phpmyadmin.git", + "author": "The phpMyAdmin Team (https://www.phpmyadmin.net/team/)", + "license": "GPL-2.0", + "private": true, + "engines": { + "node": ">=10" + }, + "dependencies": { + "@babel/cli": "^7.15.7", + "@babel/core": "^7.15.5", + "@babel/preset-env": "^7.15.6", + "@popperjs/core": "^2.10.2", + "@zxcvbn-ts/core": "^2.0.1", + "autoprefixer": "^10.3.6", + "bootstrap": "5.1.3", + "codemirror": "5.65.3", + "jquery": "3.6.0", + "jquery-debounce-throttle": "^1.0.6-rc.0", + "jquery-migrate": "3.4.0", + "jquery-ui-dist": "1.13.1", + "jquery-ui-timepicker-addon": "1.6.3", + "jquery-uitablefilter": "^1.0.0", + "jquery-validation": "1.19.3", + "js-cookie": "2.2.1", + "locutus.sprintf": "^2.0.14-code-lts.2", + "ol": "6.14.1", + "postcss": "^8.3.8", + "postcss-cli": "^9.0.1", + "rtlcss": "^3.3.0", + "sass": "^1.42.1", + "tablesorter": "^2.31.3", + "tracekit": "0.4.6", + "u2f-api-polyfill": "0.4.4", + "updated-jqplot": "1.0.9" + }, + "devDependencies": { + "babel-jest": "^27.3.1", + "eslint": "^7.32.0", + "eslint-plugin-compat": "^3.13.0", + "eslint-plugin-no-jquery": "^2.7.0", + "jest": "^27.3.1", + "stylelint": "^13.13.1", + "stylelint-config-recommended-scss": "^4.3.0", + "stylelint-config-standard": "^22.0.0", + "stylelint-scss": "^3.21.0" + }, + "scripts": { + "postinstall": "yarn run build", + "build": "yarn run css-compile --style=compressed && yarn run css-prefix && yarn run css-rtl && yarn run js-compile", + "css-compile": "sass themes/pmahomme/scss:themes/pmahomme/css themes/original/scss:themes/original/css themes/metro/scss:themes/metro/css themes/bootstrap/scss:themes/bootstrap/css setup/scss:setup", + "css-lint": "stylelint -s scss \"themes/**/scss/*.scss\" \"setup/scss/*.scss\"", + "css-prefix": "postcss themes/*/css/*.css setup/styles.css --use autoprefixer --replace", + "css-rtl": "yarn run rtlcss -c .rtlcssrc.json themes/bootstrap/css/theme.css && yarn run rtlcss -c .rtlcssrc.json themes/pmahomme/css/theme.css && yarn run rtlcss -c .rtlcssrc.json themes/original/css/theme.css && yarn run rtlcss -c .rtlcssrc.json themes/metro/css/theme.css && yarn run rtlcss -c .rtlcssrc.json themes/metro/css/blueeyes-theme.css && yarn run rtlcss -c .rtlcssrc.json themes/metro/css/mono-theme.css && yarn run rtlcss -c .rtlcssrc.json themes/metro/css/redmond-theme.css && yarn run rtlcss -c .rtlcssrc.json themes/metro/css/teal-theme.css", + "js-lint": "eslint js/src test/javascript test/jest jest.config.js", + "js-compile": "babel js/src -d js/dist", + "test": "jest" + } +} diff --git a/Sources/php_script/script/phpMyAdmin/setup/config.php b/Sources/php_script/script/phpMyAdmin/setup/config.php new file mode 100644 index 0000000..3eef9a8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/setup/config.php @@ -0,0 +1,54 @@ +save('Config'); + +$response = ResponseRenderer::getInstance(); +$response->disable(); + +if (isset($_POST['eol'])) { + $_SESSION['eol'] = $_POST['eol'] === 'unix' ? 'unix' : 'win'; +} + +if (isset($_POST['submit_clear']) && is_scalar($_POST['submit_clear']) ? $_POST['submit_clear'] : '') { + // Clear current config and return to main page + $GLOBALS['ConfigFile']->resetConfigData(); + // drop post data + $response->generateHeader303('index.php' . Url::getCommonRaw()); + exit; +} + +if (isset($_POST['submit_download']) && is_scalar($_POST['submit_download']) ? $_POST['submit_download'] : '') { + // Output generated config file + Core::downloadHeader('config.inc.php', 'text/plain'); + $response->disable(); + echo ConfigGenerator::getConfigFile($GLOBALS['ConfigFile']); + exit; +} + +// Show generated config file in a + + + + + + + + + + + + + + + + + + + + + {% endfor %} + {% endfor %} + +{% endif %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/components/error_message.twig b/Sources/php_script/script/phpMyAdmin/templates/components/error_message.twig new file mode 100644 index 0000000..b71f0ad --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/components/error_message.twig @@ -0,0 +1,4 @@ +

        diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit.twig b/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit.twig new file mode 100644 index 0000000..5869f32 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit.twig @@ -0,0 +1,25 @@ +
        +
        +
        {% trans 'Structure' %}
        +
        + + + + + + + + + + + + + + {{ rows|raw }} +
        {% trans 'Name' %}{% trans 'Type' %}{% trans 'Length/Values' %}{% trans 'Default' %}{% trans 'Collation' %}{% trans 'Attributes' %}{% trans 'Null' %}{% trans %}A_I{% context %}Auto Increment{% endtrans %}
        +
        + +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit_table_row.twig b/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit_table_row.twig new file mode 100644 index 0000000..8acacd6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit_table_row.twig @@ -0,0 +1,85 @@ + + + + {% include 'columns_definitions/column_name.twig' with { + 'column_number': row_num, + 'ci': 0, + 'ci_offset': 0, + 'column_meta': {'Field': row['col_name']}, + 'has_central_columns_feature': false, + 'max_rows': max_rows + } only %} + + + + + + + + +

        + {% trans 'Edit ENUM/SET values' %} +

        + + + + + {% if char_editing == 'textarea' %} + + {% else %} + + {% endif %} + + + + + + + + {% include 'columns_definitions/column_attribute.twig' with { + 'column_number': row_num, + 'ci': 5, + 'ci_offset': 0, + 'column_meta': [], + 'extracted_columnspec': {'attribute': row['col_attribute']}, + 'submit_attribute': false, + 'attribute_types': attribute_types + } only %} + + + + + + + + + + diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/designer/schema_export.twig b/Sources/php_script/script/phpMyAdmin/templates/database/designer/schema_export.twig new file mode 100644 index 0000000..fa00a12 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/designer/schema_export.twig @@ -0,0 +1,18 @@ +
        +
        + {{ get_hidden_inputs(db) }} + + + + {% for option in plugins_choice %} + + {% endfor %} + + + {{ options|raw }} +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/events/editor_form.twig b/Sources/php_script/script/phpMyAdmin/templates/database/events/editor_form.twig new file mode 100644 index 0000000..7428244 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/events/editor_form.twig @@ -0,0 +1,119 @@ +
        + {{ get_hidden_inputs(db) }} + + {% if mode == 'edit' %} + + {% endif %} + +
        +
        + {% trans 'Details' %} + {% if mode != 'edit' %} + {{ show_mysql_docu('CREATE_EVENT') }} + {% endif %} +
        + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        {% trans 'Event name' %} + +
        {% trans 'Status' %} + +
        {% trans 'Event type' %} + {% if is_ajax %} + + {% else %} + +
        + {{ event.item_type }} +
        + + {% endif %} +
        {% trans 'Execute at' %} + +
        {% trans 'Execute every' %} + + +
        {% trans %}Start{% context %}Start of recurring event{% endtrans %} + +
        {% trans %}End{% context %}End of recurring event{% endtrans %} + +
        {% trans 'Definition' %} + +
        {% trans 'On completion preserve' %} + +
        {% trans 'Definer' %} + +
        {% trans 'Comment' %} + +
        +
        + + {% if is_ajax %} + + + {% else %} + + {% endif %} +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/events/row.twig b/Sources/php_script/script/phpMyAdmin/templates/database/events/row.twig new file mode 100644 index 0000000..7395bb6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/events/row.twig @@ -0,0 +1,56 @@ + + + + + + {{ sql_drop }} + {{ event.name }} + + + {{ event.status }} + + + {{ event.type }} + + + {% if has_privilege %} + + {{ get_icon('b_edit', 'Edit'|trans) }} + + {% else %} + {{ get_icon('bd_edit', 'Edit'|trans) }} + {% endif %} + + + + {{ get_icon('b_export', 'Export'|trans) }} + + + + {% if has_privilege %} + {{ link_or_button( + url('/sql'), + { + 'db': db, + 'table': table, + 'sql_query': sql_drop, + 'goto': url('/database/events', {'db': db}) + }, + get_icon('b_drop', 'Drop'|trans), + {'class': 'ajax drop_anchor'} + ) }} + {% else %} + {{ get_icon('bd_drop', 'Drop'|trans) }} + {% endif %} + + diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/multi_table_query/form.twig b/Sources/php_script/script/phpMyAdmin/templates/database/multi_table_query/form.twig new file mode 100644 index 0000000..94c2ae0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/multi_table_query/form.twig @@ -0,0 +1,179 @@ + + +
        + +
        +
        + +
        + +
        + {% for table in tables %} +
        + + {% for column in table.columns %} + + {% endfor %} +
        + {% endfor %} + + {% for id in 0..default_no_of_columns %} + {% if id == 0 %}
        {% endif %} +
        + + . + +
        + + {% trans 'Show' %} +
        + + +
        + + + +
        + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        {% trans 'Sort' %}{% trans 'Ascending' %}{% trans 'Descending' %}
        {% trans 'Add as' %} + + AND + + + OR +
        Op + + + +
        + . + + +
        + +
        +
        +
        + +
        + {% if id == 0 %}
        {% endif %} + {% endfor %} + +
        + +
        + +
        + {# Keep the block without a space between the open and close tag #} + +
        +
        + +
        + + +
        +
        +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/operations/index.twig b/Sources/php_script/script/phpMyAdmin/templates/database/operations/index.twig new file mode 100644 index 0000000..795aa3c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/operations/index.twig @@ -0,0 +1,230 @@ +
        + + {{ message|raw }} + + {% if has_comment %} +
        + {{ get_hidden_inputs(db) }} +
        +
        {{ get_icon('b_comment', 'Database comment'|trans, true) }}
        +
        +
        +
        + + +
        +
        +
        + +
        +
        + {% endif %} + +
        + {{ get_hidden_inputs(db) }} +
        {{ get_icon('b_table_add', 'Create new table'|trans, true) }}
        +
        +
        + + +
        +
        + + +
        +
        + +
        + + {% if db != 'mysql' %} +
        + {{ get_hidden_inputs(db) }} + + + + {% if db_collation is not empty %} + + {% endif %} + +
        +
        {{ get_icon('b_edit', 'Rename database to'|trans, true) }}
        +
        +
        +
        + + +
        +
        + +
        + + +
        +
        + + +
        +
        + {% endif %} + + {% if is_drop_database_allowed %} +
        +
        {{ get_icon('b_deltbl', 'Remove database'|trans, true) }}
        +
        +
        + {{ link_or_button( + url('/sql'), + { + 'sql_query': 'DROP DATABASE ' ~ backquote(db), + 'back': url('/database/operations'), + 'goto': url('/'), + 'reload': true, + 'purge': true, + 'message_to_show': 'Database %s has been dropped.'|trans|format(backquote(db))|e, + 'db': null + }, + 'Drop the database (DROP)'|trans, + { + 'id': 'drop_db_anchor', + 'class': 'ajax text-danger' + } + ) }} + {{ show_mysql_docu('DROP_DATABASE') }} +
        +
        +
        + {% endif %} + +
        + {{ get_hidden_inputs(db) }} + + + {% if db_collation is not empty %} + + {% endif %} + +
        +
        {{ get_icon('b_edit', 'Copy database to'|trans, true) }}
        +
        +
        +
        + + +
        +
        + +
        +
        + + +
        +
        + + +
        +
        + + +
        +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        +
        + + +
        +
        + +
        + {{ get_hidden_inputs(db) }} + +
        +
        {{ get_icon('s_asci', 'Collation'|trans, true) }}
        +
        +
        +
        + + +
        +
        + +
        + + +
        +
        + + +
        +
        + + +
        +
        + +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/routines/editor_form.twig b/Sources/php_script/script/phpMyAdmin/templates/database/routines/editor_form.twig new file mode 100644 index 0000000..c81edde --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/routines/editor_form.twig @@ -0,0 +1,180 @@ +
        + + {% if is_edit_mode %} + + + {% endif %} + {{ get_hidden_inputs(db) }} + +
        +
        + {% trans 'Details' %} + {% if not is_edit_mode %} + {{ show_mysql_docu('CREATE_PROCEDURE') }} + {% endif %} +
        + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {% if is_edit_mode %} + + + + + {% endif %} + + + + + + + + + + + + + + + + + +
        {% trans 'Routine name' %} + +
        {% trans 'Type' %} + {% if is_ajax %} + + {% else %} + +
        + {{ routine['item_type'] }} +
        + + {% endif %} +
        {% trans 'Parameters' %} + + + + + + + + + + + + + + {{ parameter_rows|raw }} + +
        {% trans 'Direction' %}{% trans 'Name' %}{% trans 'Type' %}{% trans 'Length/Values' %}{% trans 'Options' %}
        +
        + + +
        {% trans 'Return type' %} + +
        {% trans 'Return length/values' %} + + ---
        {% trans 'Return options' %} +
        + +
        +
        + +
        +
        ---
        +
        {% trans 'Definition' %} + +
        {% trans 'Is deterministic' %} + +
        + {% trans 'Adjust privileges' %} + {{ show_docu('faq', 'faq6-39') }} + + {% if has_privileges %} + + {% else %} + + {% endif %} +
        {% trans 'Definer' %} + +
        {% trans 'Security type' %} + +
        {% trans 'SQL data access' %} + +
        {% trans 'Comment' %} + +
        +
        + + {% if is_ajax %} + + + {% else %} + + {% endif %} +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/routines/parameter_row.twig b/Sources/php_script/script/phpMyAdmin/templates/database/routines/parameter_row.twig new file mode 100644 index 0000000..ba8310e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/routines/parameter_row.twig @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + --- + + + + --- + + + + + + {{ get_icon('b_drop', 'Drop'|trans) }} + + + diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/search/main.twig b/Sources/php_script/script/phpMyAdmin/templates/database/search/main.twig new file mode 100644 index 0000000..e7875cb --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/search/main.twig @@ -0,0 +1,95 @@ + +
        + {{ get_hidden_inputs(db) }} +
        + {% trans 'Search in database' %} +

        + + +

        + +
        + {% trans 'Find:' %} + +
        + + +
        +
        + + +
        +
        + + +
        +
        + + +
        +
        + + +
        +
        + +
        + {% trans 'Inside tables:' %} +

        + + {% trans 'Select all' %} + / + + {% trans 'Unselect all' %} + +

        + +
        + +

        + {# Inputbox for column name entry #} + + +

        +
        +
        + +
        +
        +
        + +
        +
        +
        +
        +{# These two table-image and table-link elements display the table name in browse search results #} +
        + +
        +{# Div for browsing results #} +
        + {# This browse-results div is used to load the browse and delete results in the db search #} +
        +
        + {# This sqlqueryform div is used to load the delete form in the db search #} +
        +{# Toggle query box link #} + diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/structure/overhead.twig b/Sources/php_script/script/phpMyAdmin/templates/database/structure/overhead.twig new file mode 100644 index 0000000..8b74509 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/structure/overhead.twig @@ -0,0 +1,4 @@ + + {{ formatted_overhead }}  + {{ overhead_unit }} + diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/structure/structure_table_row.twig b/Sources/php_script/script/phpMyAdmin/templates/database/structure/structure_table_row.twig new file mode 100644 index 0000000..cfc8289 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/structure/structure_table_row.twig @@ -0,0 +1,226 @@ + + + + + + + {{ browse_table_label_truename }} + + {{ tracking_icon|raw }} + + {% if server_replica_status %} + + {{ ignored ? get_image('s_cancel', 'Not replicated'|trans) }} + {{ do ? get_image('s_success', 'Replicated'|trans) }} + + {% endif %} + + {# Favorite table anchor #} + {% if num_favorite_tables > 0 %} + + {# Check if current table is already in favorite list #} + {% set fav_params = { + 'db': db, + 'ajax_request': true, + 'favorite_table': current_table['TABLE_NAME'], + ((already_favorite ? 'remove' : 'add') ~ '_favorite'): true + } %} + {% include 'database/structure/favorite_anchor.twig' with { + 'table_name_hash': table_name_hash, + 'db_table_name_hash': db_table_name_hash, + 'fav_params': fav_params, + 'already_favorite': already_favorite, + } only %} + + {% endif %} + + + + {{ may_have_rows ? get_icon('b_browse', 'Browse'|trans) : get_icon('bd_browse', 'Browse'|trans) }} + + + + + {{ get_icon('b_props', 'Structure'|trans) }} + + + + + {{ may_have_rows ? get_icon('b_select', 'Search'|trans) : get_icon('bd_select', 'Search'|trans) }} + + + + {% if not db_is_system_schema %} + + {{ get_icon('b_insrow', 'Insert'|trans) }} + + {% if table_is_view %} + + {{ get_icon('b_edit', 'Edit'|trans) }} + + {% else %} + + + {{ may_have_rows ? get_icon('b_empty', 'Empty'|trans) : get_icon('bd_empty', 'Empty'|trans) }} + + + {% endif %} + + + {{ get_icon('b_drop', 'Drop'|trans) }} + + + {% endif %} + + {% if current_table['TABLE_ROWS'] is defined + and (current_table['ENGINE'] != null or table_is_view) %} + {# Get the row count #} + {% set row_count = format_number(current_table['TABLE_ROWS'], 0) %} + + {# Content to be appended into 'tbl_rows' cell. + If row count is approximate, display it as an anchor to get real count. #} + + {% if approx_rows %} + + + ~{{ row_count }} + + + {% else %} + {{ row_count }} + {% endif %} + {{ show_superscript|raw }} + + + {% if not (properties_num_columns > 1) %} + + {% if current_table['ENGINE'] is not empty %} + {{ current_table['ENGINE'] }} + {% elseif table_is_view %} + {% trans 'View' %} + {% endif %} + + {% if collation|length > 0 %} + + {{ collation|raw }} + + {% endif %} + {% endif %} + + {% if is_show_stats %} + + + {{ formatted_size }} {{ unit }} + + + + {{ overhead|raw }} + + {% endif %} + + {% if not (show_charset > 1) %} + {% if charset|length > 0 %} + + {{ charset|raw }} + + {% endif %} + {% endif %} + + {% if show_comment %} + {% set comment = current_table['Comment'] %} + + {% if comment|length > limit_chars %} + + {{ comment|slice(0, limit_chars) }} + ... + + {% else %} + {{ comment }} + {% endif %} + + {% endif %} + + {% if show_creation %} + + {{ create_time }} + + {% endif %} + + {% if show_last_update %} + + {{ update_time }} + + {% endif %} + + {% if show_last_check %} + + {{ check_time }} + + {% endif %} + + {% elseif table_is_view %} + - + + {% trans 'View' %} + + --- + {% if is_show_stats %} + - + - + {% endif %} + {% if show_charset %} + + {% endif %} + {% if show_comment %} + + {% endif %} + {% if show_creation %} + - + {% endif %} + {% if show_last_update %} + - + {% endif %} + {% if show_last_check %} + - + {% endif %} + + {% else %} + + {% if db_is_system_schema %} + {% set action_colspan = 3 %} + {% else %} + {% set action_colspan = 6 %} + {% endif %} + {% if num_favorite_tables > 0 %} + {% set action_colspan = action_colspan + 1 %} + {% endif %} + + {% set colspan_for_structure = action_colspan + 3 %} + + {% trans 'in use' %} + + {% endif %} + diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/tracking/tables.twig b/Sources/php_script/script/phpMyAdmin/templates/database/tracking/tables.twig new file mode 100644 index 0000000..c29f142 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/tracking/tables.twig @@ -0,0 +1,192 @@ +{# Tracked tables exists#} +{% if head_version_exists %} +
        +

        {% trans 'Tracked tables' %}

        + +
        + {{ get_hidden_inputs(db) }} + + + + + + + + + + + + + + + {% for version in versions %} + + + + + + + + + + + {% endfor %} + +
        {% trans 'Table' %}{% trans 'Last version' %}{% trans 'Created' %}{% trans 'Updated' %}{% trans 'Status' %}{% trans 'Action' %}{% trans 'Show' %}
        + + + + + {{ version.version }} + + {{ version.date_created }} + + {{ version.date_updated }} + +
        +
        +
        + + + + + + + + + +
        + + {{- url('/table/tracking', { + 'db': version.db_name, + 'table': version.table_name, + 'version': version.version, + 'toggle_activation': 'activate_now', + }) -}} + +
        {% trans 'active' %}
        +
         
        + + {{- url('/table/tracking', { + 'db': version.db_name, + 'table': version.table_name, + 'version': version.version, + 'toggle_activation': 'deactivate_now', + }) -}} + +
        {% trans 'not active' %}
        +
        + + {{ text_dir }} +
        +
        +
        +
        + + {{ get_icon('b_drop', 'Delete tracking'|trans) }} + + + + {{ get_icon('b_versions', 'Versions'|trans) }} + + + {{ get_icon('b_report', 'Tracking report'|trans) }} + + + {{ get_icon('b_props', 'Structure snapshot'|trans) }} + +
        + {% include 'select_all.twig' with { + 'text_dir': text_dir, + 'form_name': 'trackedForm' + } only %} + +
        +
        +{% endif %} +{% if untracked_tables_exists %} +

        {% trans 'Untracked tables' %}

        +
        + {{ get_hidden_inputs(db) }} + + + + + + + + + + {% for table_name in untracked_tables %} + {% if get_tracker_version(db, table_name) == -1 %} + + + + + + {% endif %} + {% endfor %} + +
        {% trans 'Table' %}{% trans 'Action' %}
        + + + + + + {{ get_icon('eye', 'Track table'|trans) }} + +
        + {% include 'select_all.twig' with { + 'text_dir': text_dir, + 'form_name': 'untrackedForm' + } only %} + +
        +{% endif %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/triggers/list.twig b/Sources/php_script/script/phpMyAdmin/templates/database/triggers/list.twig new file mode 100644 index 0000000..1228a45 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/database/triggers/list.twig @@ -0,0 +1,59 @@ +
        +

        + {{ get_icon('b_triggers', 'Triggers'|trans) }} + {{ show_mysql_docu('TRIGGERS') }} +

        + +
        +
        +
        +
        +
        + + +
        +
        + + +
        +
        + + +
        + +
        + {{ get_hidden_inputs(db, table) }} + +
        + {% trans 'There are no triggers to display.' %} +
        + + + + + + + {% if table is empty %} + + {% endif %} + + + + + + + {% for i in 0..(table is empty ? 7 : 6) %}{% endfor %} + + {{ rows|raw }} + +
        {% trans 'Name' %}{% trans 'Table' %}{% trans 'Time' %}{% trans 'Event' %}
        +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/display/results/table.twig b/Sources/php_script/script/phpMyAdmin/templates/display/results/table.twig new file mode 100644 index 0000000..980f17e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/display/results/table.twig @@ -0,0 +1,304 @@ +{% set navigation_html %} + {% if navigation is not empty %} + + + + + {{ navigation.move_backward_buttons|raw }} + {{ navigation.page_selector|raw }} + {{ navigation.move_forward_buttons|raw }} + + {% if navigation.number_total_page != 1 %} + + {% endif %} + + {% if navigation.has_show_all %} + + + {% endif %} + + + + + + + + + + + {% endif %} +{% endset %} + +{{ sql_query_message|raw }} + +{{ navigation_html }} + + +
        + {{ get_hidden_inputs(db, table) }} +
        + +{% if headers.column_order is not empty %} + {% if headers.column_order.order %} + + {% endif %} + {% if headers.column_order.visibility %} + + {% endif %} + {% if not headers.column_order.is_view %} + + {% endif %} +{% endif %} + +{% if headers.options is not empty %} +
        + {{ get_hidden_inputs({ + 'db': db, + 'table': table, + 'sql_query': sql_query, + 'goto': goto, + 'display_options_form': 1 + }) }} + + {% if default_sliders_state != 'disabled' %} +
        + +
        +
        + {% endif %} + +
        +
        +
        + + +
        +
        + + +
        +
        + + {% if relwork and displaywork %} +
        +
        + + +
        +
        + + +
        +
        + {% endif %} + +
        + + + + + +
        + + {# I would have preferred to name this "display_transformation". + This is the only way I found to be able to keep this setting sticky + per SQL query, and at the same time have a default that displays + the transformations. #} +
        + + +
        + +
        + {% if headers.options.possible_as_geometry %} +
        + + +
        + {% endif %} +
        + + +
        +
        + + +
        +
        +
        +
        + +
        + +
        + {% if default_sliders_state != 'disabled' %} +
        + {% endif %} +
        +{% endif %} + +{% if headers.has_bulk_actions_form %} +
        + {{ get_hidden_inputs(db, table, 1) }} + +{% endif %} + +
        + + + {{ headers.button|raw }} + {{ headers.table_headers_for_columns|raw }} + {{ headers.column_at_right_side|raw }} + + + + + + {{ body|raw }} + +
        +
        + +{% if bulk_links is not empty %} +
        + {% trans 'With selected:' %} + + + {% trans 'With selected:' %} + + + + + + + + {% if bulk_links.has_export_button %} + + {% endif %} +
        + + + +
        +{% endif %} + +{{ navigation_html }} + +{% if operations is not empty %} +
        + {% trans 'Query results operations' %} + + {% if operations.has_print_link %} + + + {{ link_or_button( + '#', + null, + get_icon('b_insrow', 'Copy to clipboard'|trans, true), + {'id': 'copyToClipBoard', 'class': 'btn'} + ) }} + {% endif %} + + {% if not operations.has_procedure %} + {% if operations.has_export_link %} + {{ link_or_button( + url('/table/export'), + operations.url_params, + get_icon('b_tblexport', 'Export'|trans, true), + {'class': 'btn'} + ) }} + + {{ link_or_button( + url('/table/chart'), + operations.url_params, + get_icon('b_chart', 'Display chart'|trans, true), + {'class': 'btn'} + ) }} + + {% if operations.has_geometry %} + {{ link_or_button( + url('/table/gis-visualization'), + operations.url_params, + get_icon('b_globe', 'Visualize GIS data'|trans, true), + {'class': 'btn'} + ) }} + {% endif %} + {% endif %} + + + {{ link_or_button( + url('/view/create'), + {'db': db, 'table': table, 'sql_query': sql_query, 'printview': true}, + get_icon('b_view_add', 'Create view'|trans, true), + {'class': 'btn create_view ajax'} + ) }} + + {% endif %} +
        +{% endif %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/error/report_form.twig b/Sources/php_script/script/phpMyAdmin/templates/error/report_form.twig new file mode 100644 index 0000000..07b2126 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/error/report_form.twig @@ -0,0 +1,36 @@ +{% if allowed_to_send_error_reports %} +

        + {% trans %} + This report automatically includes data about the error and information about relevant configuration settings. It will be sent to the phpMyAdmin team for debugging the error. + {% endtrans %} +

        +
        +
        + + +
        + +
        + {% trans "You may examine the data in the error report:" %} +
        {{ report_data|json_encode(constant('JSON_PRETTY_PRINT') b-or constant('JSON_UNESCAPED_SLASHES')) }}
        +
        + +
        + + +
        + + {{ hidden_inputs|raw }} + {{ hidden_fields|raw }} +
        +{% else %} +
        +
        {{ report_data|json_encode(constant('JSON_PRETTY_PRINT') b-or constant('JSON_UNESCAPED_SLASHES')) }}
        +
        +{% endif %} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/templates/filter.twig b/Sources/php_script/script/phpMyAdmin/templates/filter.twig new file mode 100644 index 0000000..904c4ea --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/filter.twig @@ -0,0 +1,9 @@ +
        +
        {% trans 'Filters' %}
        +
        + +
        + +
        +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/modals/unhide_nav_item.twig b/Sources/php_script/script/phpMyAdmin/templates/modals/unhide_nav_item.twig new file mode 100644 index 0000000..a7eb0f0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/modals/unhide_nav_item.twig @@ -0,0 +1,14 @@ + diff --git a/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/node.twig b/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/node.twig new file mode 100644 index 0000000..fc1fb00 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/node.twig @@ -0,0 +1,68 @@ +{% if show_node %} +
      • +
        + + {% if node_is_group %} + {{ 'last' not in class ? '' }} + + + {% if pagination_params is not empty %} + + {% endif %} + {{ node_icon|raw }} + + {% elseif pagination_params is not empty %} + + {% endif %} +
        + {% if node_is_container %} +
        + {% endif %} + + {% if node.isGroup %} +
        + {{ get_image(node.icon['image'], node.icon['title']) }} +
        +  {{ node.name }} + {% else %} +
        + {% for link in icon_links %} + + {{- get_image(link.image, link.title) -}} + + {% endfor %} +
        + + {% if node_is_container %} +  {{ node.name }} + {% else %} + + {{- node.displayName ?? node.realName -}} + + {% endif %} + {% endif %} + + {{ control_buttons|raw }} + + {% if node_is_container %} +
        + {% endif %} + +
        +{% elseif pagination_params is not empty %} + +{% endif %} + +{% if recursive.html is not empty and recursive.has_wrapper %} + +{% endif %} + +{% if has_siblings %} +
      • +{% endif %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/quick_warp.twig b/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/quick_warp.twig new file mode 100644 index 0000000..f43a867 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/quick_warp.twig @@ -0,0 +1,5 @@ +
        + {% if recent %}{{ recent|raw }}{% endif %} + {% if favorite %}{{ favorite|raw }}{% endif %} +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/preferences/autoload.twig b/Sources/php_script/script/phpMyAdmin/templates/preferences/autoload.twig new file mode 100644 index 0000000..a8277f5 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/preferences/autoload.twig @@ -0,0 +1,15 @@ + diff --git a/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/configure.twig b/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/configure.twig new file mode 100644 index 0000000..619168f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/configure.twig @@ -0,0 +1,17 @@ +
        +
        +
        +
        + {% trans "Configure two-factor authentication" %} +
        +
        +
        + {{ get_hidden_inputs() }} + + {{ form|raw }} + +
        +
        +
        +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/confirm.twig b/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/confirm.twig new file mode 100644 index 0000000..23d6fc3 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/confirm.twig @@ -0,0 +1,18 @@ +
        +
        +
        +
        + {% trans "Confirm disabling two-factor authentication" %} +
        +
        +
        + {{ "By disabling two factor authentication you will be again able to login using password only."|trans|notice }} + {{ get_hidden_inputs() }} + {{ form|raw }} + + +
        +
        +
        +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/recent_favorite_table_recent.twig b/Sources/php_script/script/phpMyAdmin/templates/recent_favorite_table_recent.twig new file mode 100644 index 0000000..b507a21 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/recent_favorite_table_recent.twig @@ -0,0 +1,7 @@ +{% for table in tables %} + +{% endfor %} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/templates/select_all.twig b/Sources/php_script/script/phpMyAdmin/templates/select_all.twig new file mode 100644 index 0000000..11ef160 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/select_all.twig @@ -0,0 +1,6 @@ +{% trans 'With selected:' %} + + +{% trans 'With selected:' %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/binlog/index.twig b/Sources/php_script/script/phpMyAdmin/templates/server/binlog/index.twig new file mode 100644 index 0000000..84c7686 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/binlog/index.twig @@ -0,0 +1,107 @@ +

        + {{ get_image('s_tbl') }} + {% trans 'Binary log' %} +

        + +
        + {{ get_hidden_inputs(url_params) }} +
        + + {% trans 'Select binary log to view' %} + + + {% set full_size = 0 %} + + {{ binary_logs|length }} + {% trans 'Files' %}, + {% if full_size > 0 %} + {{ format_byte_down(full_size)|join(' ') }} + {% endif %} +
        + +
        + +
        +
        + +{{ sql_message|raw }} + + + + + + + + + + + + + + + + + + {% for value in values %} + + + + + + + + + {% endfor %} + +
        + {% if has_previous %} + {% if has_icons %} + + « + + {% else %} + + {% trans %}Previous{% context %}Previous page{% endtrans %} « + + {% endif %} + - + {% endif %} + + {% if is_full_query %} + + {% trans 'Truncate shown queries' %} + + {% else %} + + {% trans 'Show full queries' %} + + {% endif %} + + {% if has_next %} + - + {% if has_icons %} + + » + + {% else %} + + {% trans %}Next{% context %}Next page{% endtrans %} » + + {% endif %} + {% endif %} +
        {% trans 'Log name' %}{% trans 'Position' %}{% trans 'Event type' %}{% trans 'Server ID' %}{% trans 'Original position' %}{% trans 'Information' %}
        {{ value['Log_name'] }}{{ value['Pos'] }}{{ value['Event_type'] }}{{ value['Server_id'] }} + {{- value['Orig_log_pos'] is defined ? value['Orig_log_pos'] : value['End_log_pos'] -}} + {{ format_sql(value['Info'], not is_full_query) }}
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/engines/index.twig b/Sources/php_script/script/phpMyAdmin/templates/server/engines/index.twig new file mode 100644 index 0000000..36d60c1 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/engines/index.twig @@ -0,0 +1,33 @@ +
        +
        +

        + {{ get_image('b_engine') }} + {% trans 'Storage engines' %} +

        +
        + +
        + + + + + + + + + {% for engine, details in engines %} + + + + + {% endfor %} + +
        {% trans 'Storage Engine' %}{% trans 'Description' %}
        + + {{ details['Engine'] }} + + {{ details['Comment'] }}
        +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/add_user.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/add_user.twig new file mode 100644 index 0000000..2fdf9fc --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/add_user.twig @@ -0,0 +1,38 @@ +

        + {{ get_icon('b_usradd') }} + {% trans 'Add user account' %} +

        + +
        + {{ get_hidden_inputs() }} + + {{ login_information_fields_new|raw }} + +
        + {% trans 'Database for user account' %} + + + +
        + + + +
        + + {% if database is not empty %} + + + +
        + {% endif %} +
        + + {% if is_grant_user %} + {{ privileges_table|raw }} + {% endif %} + + +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/change_password.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/change_password.twig new file mode 100644 index 0000000..2fe6ad1 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/change_password.twig @@ -0,0 +1,72 @@ +
        + {{ get_hidden_inputs() }} + {% if is_privileges %} + + + {% endif %} + +
        + {% trans 'Change password' %} + + + + + + + + + + {% if not is_new or (is_new and has_more_auth_plugins) %} + + + + + {% endif %} + + +
        + + +
        + + + + {% trans 'Enter:' %}      + + {% trans %}Strength:{% context %}Password strength{% endtrans %} + + +
        + {% trans 'Re-type:' %}  + +
        + + + +
        + + {% if is_new and has_more_auth_plugins %} + + {% apply notice %} + {% trans %} + This method requires using an 'SSL connection' or an 'unencrypted connection that encrypts the password using RSA'; while connecting to the server. + {% endtrans %} + {{ show_mysql_docu('sha256-authentication-plugin') }} + {% endapply %} +

        t1G*=6 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�`;JWQ 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

        + {% endif %} + +
        + + + diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/get_user_link.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/get_user_link.twig new file mode 100644 index 0000000..695d207 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/get_user_link.twig @@ -0,0 +1,11 @@ + + {{ get_icon(action.icon, action.text) }} + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/initials_row.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/initials_row.twig new file mode 100644 index 0000000..622310d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/initials_row.twig @@ -0,0 +1,20 @@ + diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/login_information_fields.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/login_information_fields.twig new file mode 100644 index 0000000..6e59e43 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/login_information_fields.twig @@ -0,0 +1,91 @@ +
        + {% trans 'Login Information' %} +
        + + + + + + +
        + {{ 'An account already exists with the same username but possibly a different hostname.'|trans|notice }} +
        +
        + +
        + + + + + + + {{ show_hint('When Host table is used, this field is ignored and values stored in Host table are used instead.'|trans) }} +
        + +
        + + + + + + {% trans %}Strength:{% context %}Password strength{% endtrans %} + + +
        + +
        + +   + +
        + +
        + +   + + + +
        + {% apply notice %} + {% trans %} + This method requires using an 'SSL connection' or an 'unencrypted connection that encrypts the password using RSA'; while connecting to the server. + {% endtrans %} + {{ show_mysql_docu('sha256-authentication-plugin') }} + {% endapply %} +
        +
        + {# Generate password added here via jQuery #} +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/new_user_ajax.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/new_user_ajax.twig new file mode 100644 index 0000000..5689f30 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/new_user_ajax.twig @@ -0,0 +1,66 @@ + + + + + + + + + {{ user.host }} + + + {% if user.has_password %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + + + + {{ user.privileges|raw }} + + + {% if user.has_group %} + + {% endif %} + + {{ user.has_grant ? 'Yes'|trans : 'No'|trans }} + + {% if is_grantuser %} + + + {{ get_icon('b_usredit', 'Edit privileges'|trans) }} + + + {% endif %} + {% if user.has_group_edit %} + + + + {% endif %} + + + {{ get_icon('b_tblexport', 'Export'|trans) }} + + + diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/privileges_summary.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/privileges_summary.twig new file mode 100644 index 0000000..e6ea0b8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/privileges_summary.twig @@ -0,0 +1,104 @@ + diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/user_properties.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/user_properties.twig new file mode 100644 index 0000000..4b257d4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/user_properties.twig @@ -0,0 +1,152 @@ +
        +

        + {{ get_icon('b_usredit') }} + {% trans 'Edit privileges:' %} + {% trans 'User account' %} + + {% if database is not empty %} + + + '{{ username }}'@'{{ hostname }}' + + + - + {% if is_databases %} + {% trans 'Databases' %} + {% else %} + {% trans 'Database' %} + {% endif %} + + {% if table is not empty %} + + + {{ database }} + + + - + {% trans 'Table' %} + {{ table }} + {% else %} + {% if database is not iterable %} + {% set database = [database] %} + {% endif %} + + {{ database|join(', ') }} + + {% endif %} + {% else %} + '{{ username }}'@'{{ hostname }}' + {% endif %} +

        + + {% if current_user == username ~ '@' ~ hostname %} + {{ 'Note: You are attempting to edit privileges of the user with which you are currently logged in.'|trans|notice }} + {% endif %} + + {% if user_does_not_exists %} + {{ 'The selected user was not found in the privilege table.'|trans|error }} + {{ login_information_fields|raw }} + {% endif %} + + + + {{ table_specific_rights|raw }} + + {% if database is not iterable and database|length > 0 and not is_wildcard %} + [ + {% trans 'Database' %} + + {{ database|replace({'\\_': '_', '\\%': '%'}) }}: + {{ database_url_title }} + + ] + {% if table|length > 0 %} + [ + {% trans 'Table' %} + + {{ table }}: + {{ table_url_title }} + + ] + {% endif %} + {% endif %} + + {{ change_password|raw }} + + +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/users_overview.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/users_overview.twig new file mode 100644 index 0000000..e5c5645 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/users_overview.twig @@ -0,0 +1,182 @@ +
        + {{ get_hidden_inputs() }} +
        + + + + + + + + + {% if menus_work %} + + {% endif %} + + {%- set action_colspan = 2 %} + {%- if user_group_count > 0 %}{% set action_colspan = action_colspan + 1 %}{% endif %} + {%- if has_account_locking %}{% set action_colspan = action_colspan + 1 %}{% endif %} + + + + + + {% for host in hosts %} + + + + + + + {% if menus_work %} + + {% endif %} + + {% if is_grantuser %} + + {% endif %} + {% if menus_work and user_group_count > 0 %} + + {% endif %} + + {% if has_account_locking %} + + {% endif %} + + {% endfor %} + +
        {% trans 'User name' %}{% trans 'Host name' %}{% trans 'Password' %} + {% trans 'Global privileges' %} + {{ show_hint('Note: MySQL privilege names are expressed in English.') }} + {% trans 'User group' %}{% trans 'Grant' %}{% trans 'Action' %}
        + + + + {{ host.host }} + {% if host.has_password %} + {% trans 'Yes' %} + {% else %} + {% trans 'No' %} + {% endif %} + {{ not host.has_select_priv ? show_hint('The selected user was not found in the privilege table.'|trans) }} + + {{ host.privileges|join(', ')|raw }} + {{ host.group }}{{ host.has_grant ? 'Yes'|trans : 'No'|trans }} + + {{ get_icon('b_usredit', 'Edit privileges'|trans) }} + + + {% if host.user is not empty %} + + {% endif %} + + + {{ get_icon('b_tblexport', 'Export'|trans) }} + + + +
        +
        + +
        +
        + {% trans 'With selected:' %} + + + {% trans 'With selected:' %} + + + + +
        +
        + +
        + + {% if is_createuser %} +
        +
        {% trans %}New{% context %}Create new user{% endtrans %}
        + +
        + {% endif %} + +
        +
        {{ get_icon('b_usrdrop', 'Remove selected user accounts'|trans) }}
        +
        +

        {% trans 'Revoke all active privileges from the users and delete them afterwards.' %}

        +
        + + +
        +
        + +
        +
        + + diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/replication/primary_add_replica_user.twig b/Sources/php_script/script/phpMyAdmin/templates/server/replication/primary_add_replica_user.twig new file mode 100644 index 0000000..bd82403 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/replication/primary_add_replica_user.twig @@ -0,0 +1,84 @@ +
        +
        + {{ get_hidden_inputs('', '') }} + +
        + {% trans 'Add replica replication user' %} + + + + {# Needed for the replication replicas. #} + + + +
        + + + + + +
        + +
        + + + + + + {{ show_hint('When Host table is used, this field is ignored and values stored in Host table are used instead.'|trans) }} +
        + +
        + + + + + +
        + +
        + + + +
        + +
        + + + + + +
        +
        + + +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/index.twig b/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/index.twig new file mode 100644 index 0000000..00b1952 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/index.twig @@ -0,0 +1,61 @@ +{% extends 'server/status/base.twig' %} +{% set active = 'processes' %} +{% block content %} + +
        +
        {% trans 'Filters' %}
        +
        +
        + {{ get_hidden_inputs(url_params) }} + +
        +
        + + +
        +
        + +
        + +
        +
        +
        +
        + +{{ server_process_list|raw }} + +
        +{{ 'Note: Enabling the auto refresh here might cause heavy traffic between the web server and the MySQL server.'|trans|notice }} +
        + + + +{% endblock %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/list.twig b/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/list.twig new file mode 100644 index 0000000..2a1e7b9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/list.twig @@ -0,0 +1,65 @@ +
        + + + + + {% for column in columns %} + + {% endfor %} + + + + + {% for row in rows %} + + + + + + + + + + + + {% endfor %} + +
        {% trans 'Processes' %} + + {{ column.name }} + {% if column.is_sorted %} + 
+                  {%- trans 'Descending' %} + 
+                  {%- trans 'Ascending' %} + {% endif %} + + {% if column.has_full_query %} + + {% if column.is_full %} + {{ get_image( + 's_partialtext', + 'Truncate shown queries'|trans, + {'class': 'icon_fulltext'} + ) }} + {% else %} + {{ get_image( + 's_fulltext', + 'Show full queries'|trans, + {'class': 'icon_fulltext'} + ) }} + {% endif %} + + {% endif %} +
        + + {% trans 'Kill' %} + + {{ row.id }}{{ row.user }}{{ row.host }} + {% if row.db != '' %} + {{ row.db }} + {% else %} + {% trans 'None' %} + {% endif %} + {{ row.command }}{{ row.time }}{{ row.state }}{{ row.progress }}{{ row.info|raw }}
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/user_groups/edit_user_groups.twig b/Sources/php_script/script/phpMyAdmin/templates/server/user_groups/edit_user_groups.twig new file mode 100644 index 0000000..a16662a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/user_groups/edit_user_groups.twig @@ -0,0 +1,23 @@ +{% if user_group == null %} +

        {% trans 'Add user group' %}

        +{% else %} +

        {{ 'Edit user group: \'%s\''|trans|format(edit_user_group_special_chars) }}

        +{% endif %} +
        + {{ hidden_inputs|raw }} +
        + {% trans 'User group menu assignments' %}     + + + + {% if user_group == null %} + + +
        + {% endif %} + {{ tab_list|raw }} +
        + +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/variables/index.twig b/Sources/php_script/script/phpMyAdmin/templates/server/variables/index.twig new file mode 100644 index 0000000..0bf9ba5 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/server/variables/index.twig @@ -0,0 +1,83 @@ +
        +
        +

        + {{ get_image('s_vars') }} + {% trans 'Server variables and settings' %} + {{ show_mysql_docu('server_system_variables') }} +

        +
        + +{% if variables is not empty %} + + {{ get_icon('b_save', 'Save'|trans) }} + + + {{ get_icon('b_close', 'Cancel'|trans) }} + + {{ get_image('b_help', 'Documentation'|trans, { + 'class': 'hide', + 'id': 'docImage' + }) }} + + {% include 'filter.twig' with { + 'filter_value': filter_value + } only %} + +
        + + + + + + + + + + + {% for variable in variables %} + + + + + + + {% if variable.has_session_value %} + + + + + + {% endif %} + {% endfor %} + +
        {% trans 'Action' %}{% trans 'Variable' %}{% trans 'Value' %}
        + {% if variable.is_editable %} + {{ get_icon('b_edit', 'Edit'|trans) }} + {% else %} + + {{ get_icon('bd_edit', 'Edit'|trans) }} + + {% endif %} + + {% if variable.doc_link != null %} + + {{ variable.doc_link|raw }} + + {% else %} + {{ variable.name|replace({'_': ' '}) }} + {% endif %} + + {% if variable.is_escaped %} + {{ variable.value|raw }} + {% else %} + {{ variable.value|e|replace({',': ',​'})|raw }} + {% endif %} +
        {{ variable.name|replace({'_': ' '}) }} ({% trans 'Session value' %}){{ variable.session_value }}
        +
        +
        + +{% else %} + {{ 'Not enough privilege to view server variables and settings. %s'|trans|format( + link_to_var_documentation('show_compatibility_56', is_mariadb) + )|error }} +{% endif %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/setup/servers/index.twig b/Sources/php_script/script/phpMyAdmin/templates/setup/servers/index.twig new file mode 100644 index 0000000..e6cb79a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/setup/servers/index.twig @@ -0,0 +1,20 @@ +{% extends 'setup/base.twig' %} +{% block content %} + +{% if mode == 'edit' and has_server %} +

        + {% trans 'Edit server' %} + {{ server_id }} + ({{ server_dsn }}) +

        +{% elseif mode != 'revert' or not has_server %} +

        {% trans 'Add a new server' %}

        +{% endif %} + +{% if mode == 'add' or mode == 'edit' or mode == 'revert' %} + {{ page|raw }} +{% else %} +

        {% trans 'Something went wrong.' %}

        +{% endif %} + +{% endblock %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/sql/sql_query_results.twig b/Sources/php_script/script/phpMyAdmin/templates/sql/sql_query_results.twig new file mode 100644 index 0000000..36c10e1 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/sql/sql_query_results.twig @@ -0,0 +1,8 @@ +
        + {{ previous_update_query|raw }} + {{ profiling_chart|raw }} + {{ missing_unique_column_message|raw }} + {{ bookmark_created_message|raw }} + {{ table|raw }} + {{ bookmark_support|raw }} +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/chart/tbl_chart.twig b/Sources/php_script/script/phpMyAdmin/templates/table/chart/tbl_chart.twig new file mode 100644 index 0000000..bf8a5df --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/chart/tbl_chart.twig @@ -0,0 +1,155 @@ +
        +

        {% trans 'Display chart' %}

        + +
        +
        +
        + {{ get_hidden_inputs(url_params) }} + +
        + {% trans 'Chart type' %} +
        + + +
        +
        + + +
        +
        + + +
        +
        + + +
        +
        + + +
        +
        + + +
        +
        + + +
        +
        + + +
        +
        + +
        + + +
        + +
        + + +
        + + {% set xaxis = null %} +
        + + +
        + +
        + + +
        + + + + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + + {{ include('table/start_and_number_of_rows_fieldset.twig', start_and_number_of_rows_fieldset) }} + + +
        +
        +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/delete/confirm.twig b/Sources/php_script/script/phpMyAdmin/templates/table/delete/confirm.twig new file mode 100644 index 0000000..38b882d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/delete/confirm.twig @@ -0,0 +1,32 @@ +
        + {{ get_hidden_inputs({ + 'db': db, + 'table': table, + 'selected': selected, + 'original_sql_query': sql_query, + 'fk_checks': '0' + }) }} + +
        + + {% trans 'Do you really want to execute the following query?' %} + + +
          + {% for row in selected %} +
        • DELETE FROM {{ backquote(table) }} WHERE {{ row }};
        • + {% endfor %} +
        +
        + +
        +
        + + +
        +
        + + +
        +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/find_replace/replace_preview.twig b/Sources/php_script/script/phpMyAdmin/templates/table/find_replace/replace_preview.twig new file mode 100644 index 0000000..4067fe4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/find_replace/replace_preview.twig @@ -0,0 +1,39 @@ +
        + {{ get_hidden_inputs(db, table) }} + + + + + + +
        +
        {% trans 'Find and replace - preview' %}
        + +
        + + + + + + + + + + {% if result is iterable %} + {% for row in result %} + + + + + + {% endfor %} + {% endif %} + +
        {% trans 'Count' %}{% trans 'Original string' %}{% trans 'Replaced string' %}
        {{ row[2] }}{{ row[0] }}{{ row[1] }}
        +
        + + +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/gis_visualization/gis_visualization.twig b/Sources/php_script/script/phpMyAdmin/templates/table/gis_visualization/gis_visualization.twig new file mode 100644 index 0000000..19dbef0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/gis_visualization/gis_visualization.twig @@ -0,0 +1,62 @@ +
        +

        {% trans 'Display GIS Visualization' %}

        + +
        +
        +
        + {{ get_hidden_inputs(url_params) }} + +
        + + +
        +
        + + +
        +
        + +
        + + +
        +
        +
        + +
        +
        + {{ include('table/start_and_number_of_rows_fieldset.twig', start_and_number_of_rows_fieldset) }} +
        +
        + +
        + {{ visualization|raw }} +
        +
        + + +
        +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/import/index.twig b/Sources/php_script/script/phpMyAdmin/templates/table/import/index.twig new file mode 100644 index 0000000..d1cee8a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/import/index.twig @@ -0,0 +1,3 @@ +{% extends 'import.twig' %} + +{% block title %}{{ 'Importing into the table "%s"'|trans|format(table) }}{% endblock %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/check.twig b/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/check.twig new file mode 100644 index 0000000..fea9439 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/check.twig @@ -0,0 +1,41 @@ +
        +

        + {% trans 'Check table' %} + {{ show_mysql_docu('CHECK_TABLE') }} +

        + + {{ message|raw }} + + {% for name, table in rows %} +
        +
        {{ name }}
        + +
          + {% for row in table %} +
        • + {% if row.operation|lower != 'check' %} + {{ row.operation|title }} + {% endif %} + + {% set badge_variation %} + {%- if row.type|lower == 'error' -%} + bg-danger + {%- elseif row.type|lower == 'warning' -%} + bg-warning + {%- elseif row.type|lower == 'info' or row.type|lower == 'note' -%} + bg-info + {%- else -%} + bg-secondary + {%- endif -%} + {% endset %} + {{ row.type|title }} + + {{ row.text }} +
        • + {% endfor %} +
        +
        + {% endfor %} + + {{ indexes_problems|raw }} +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/optimize.twig b/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/optimize.twig new file mode 100644 index 0000000..938086a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/optimize.twig @@ -0,0 +1,39 @@ +
        +

        + {% trans 'Optimize table' %} + {{ show_mysql_docu('OPTIMIZE_TABLE') }} +

        + + {{ message|raw }} + + {% for name, table in rows %} +
        +
        {{ name }}
        + +
          + {% for row in table %} +
        • + {% if row.operation|lower != 'optimize' %} + {{ row.operation|title }} + {% endif %} + + {% set badge_variation %} + {%- if row.type|lower == 'error' -%} + bg-danger + {%- elseif row.type|lower == 'warning' -%} + bg-warning + {%- elseif row.type|lower == 'info' or row.type|lower == 'note' -%} + bg-info + {%- else -%} + bg-secondary + {%- endif -%} + {% endset %} + {{ row.type|title }} + + {{ row.text }} +
        • + {% endfor %} +
        +
        + {% endfor %} +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/operations/view.twig b/Sources/php_script/script/phpMyAdmin/templates/table/operations/view.twig new file mode 100644 index 0000000..fc7f430 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/operations/view.twig @@ -0,0 +1,49 @@ +
        +
        + {{ get_hidden_inputs(db, table) }} + + + +
        +
        {% trans 'Operations' %}
        +
        +
        +
        + +
        +
        + +
        +
        +
        + +
        +
        + +
        +
        {% trans 'Delete data or table' %}
        +
        +
        + {{ link_or_button( + url('/sql'), + url_params|merge({ + 'sql_query': 'DROP VIEW ' ~ backquote(table), + 'goto': url('/table/structure'), + 'reload': true, + 'purge': true, + 'message_to_show': 'View %s has been dropped.'|trans|format(table)|e, + 'table': table + }), + 'Delete the view (DROP)'|trans, + { + 'id': 'drop_view_anchor', + 'class': 'text-danger ajax' + } + ) }} + {{ show_mysql_docu('DROP VIEW') }} +
        +
        +
        +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/partition/optimize.twig b/Sources/php_script/script/phpMyAdmin/templates/table/partition/optimize.twig new file mode 100644 index 0000000..426783a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/partition/optimize.twig @@ -0,0 +1,36 @@ +
        +

        {% trans 'Optimize partition' %}

        + + {{ message|raw }} + + {% for name, table in rows %} +
        +
        {{ name }} ({{ partition_name }})
        + +
          + {% for row in table %} +
        • + {% if row.Op|lower != 'optimize' %} + {{ row.Op|title }} + {% endif %} + + {% set badge_variation %} + {%- if row.Msg_type|lower == 'error' -%} + bg-danger + {%- elseif row.Msg_type|lower == 'warning' -%} + bg-warning + {%- elseif row.Msg_type|lower == 'info' or row.Msg_type|lower == 'note' -%} + bg-info + {%- else -%} + bg-secondary + {%- endif -%} + {% endset %} + {{ row.Msg_type|title }} + + {{ row.Msg_text }} +
        • + {% endfor %} +
        +
        + {% endfor %} +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/relation/common_form.twig b/Sources/php_script/script/phpMyAdmin/templates/table/relation/common_form.twig new file mode 100644 index 0000000..ecc81be --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/relation/common_form.twig @@ -0,0 +1,244 @@ +{% extends 'table/page_with_secondary_tabs.twig' %} + +{% block content %} +
        + {{ get_hidden_inputs(db, table) }} + {# InnoDB #} + {% if is_foreign_key_supported(tbl_storage_engine) %} +
        + {% trans 'Foreign key constraints' %} +
        + + + + + + {% if tbl_storage_engine|upper == 'INNODB' %} + + {% else %} + + {% endif %} + + + + + + + + + + + {% set i = 0 %} + {% if existrel_foreign is not empty %} + {% for key, one_key in existrel_foreign %} + {# Foreign database dropdown #} + {% set foreign_db = one_key['ref_db_name'] is defined + and one_key['ref_db_name'] is not null + ? one_key['ref_db_name'] : db %} + {% set foreign_table = false %} + {% if foreign_db %} + {% set foreign_table = one_key['ref_table_name'] is defined + and one_key['ref_table_name'] is not null + ? one_key['ref_table_name'] : false %} + {% endif %} + {% set unique_columns = [] %} + {% if foreign_db and foreign_table %} + {% set table_obj = table_get(foreign_table, foreign_db) %} + {% set unique_columns = table_obj.getUniqueColumns(false, false) %} + {% endif %} + {% include 'table/relation/foreign_key_row.twig' with { + 'i': i, + 'one_key': one_key, + 'column_array': column_array, + 'options_array': options_array, + 'tbl_storage_engine': tbl_storage_engine, + 'db': db, + 'table': table, + 'url_params': url_params, + 'databases': databases, + 'foreign_db': foreign_db, + 'foreign_table': foreign_table, + 'unique_columns': unique_columns + } only %} + {% set i = i + 1 %} + {% endfor %} + {% endif %} + {% include 'table/relation/foreign_key_row.twig' with { + 'i': i, + 'one_key': [], + 'column_array': column_array, + 'options_array': options_array, + 'tbl_storage_engine': tbl_storage_engine, + 'db': db, + 'table': table, + 'url_params': url_params, + 'databases': databases, + 'foreign_db': foreign_db, + 'foreign_table': foreign_table, + 'unique_columns': unique_columns + } only %} + {% set i = i + 1 %} + + + +
        {% trans 'Actions' %}{% trans 'Constraint properties' %} + {% trans 'Column' %} + {{ show_hint('Creating a foreign key over a non-indexed column would automatically create an index on it. Alternatively, you can define an index below, before creating the foreign key.'|trans) }} + + {% trans 'Column' %} + {{ show_hint('Only columns with index will be displayed. You can define an index below.'|trans) }} + + {% trans 'Foreign key constraint' %} + ({{ tbl_storage_engine }}) +
        {% trans 'Database' %}{% trans 'Table' %}{% trans 'Column' %}
        + + {% trans '+ Add constraint' %} + +
        +
        +
        + {% endif %} + + {% if relation_parameters.relationFeature is not null %} + {% if default_sliders_state != 'disabled' and is_foreign_key_supported(tbl_storage_engine) %} +
        + +
        +
        + {% endif %} + +
        + + {% trans 'Internal relationships' %} + {{ show_docu('config', 'cfg_Servers_relation') }} + + + + + + + + + + {% set saved_row_cnt = save_row|length - 1 %} + {% for i in 0..saved_row_cnt %} + {% set myfield = save_row[i]['Field'] %} + {# Use an md5 as array index to avoid having special characters + in the name attribute (see bug #1746964 ) #} + {% set myfield_md5 = column_hash_array[myfield] %} + + {% set foreign_table = false %} + {% set foreign_column = false %} + + {# Database dropdown #} + {% if existrel[myfield] is defined %} + {% set foreign_db = existrel[myfield]['foreign_db'] %} + {% else %} + {% set foreign_db = db %} + {% endif %} + + {# Table dropdown #} + {% set tables = [] %} + {% if foreign_db %} + {% if existrel[myfield] is defined %} + {% set foreign_table = existrel[myfield]['foreign_table'] %} + {% endif %} + {% set tables = dbi.getTables(foreign_db) %} + {% endif %} + + {# Column dropdown #} + {% set unique_columns = [] %} + {% if foreign_db and foreign_table %} + {% if existrel[myfield] is defined %} + {% set foreign_column = existrel[myfield]['foreign_field'] %} + {% endif %} + {% set table_obj = table_get(foreign_table, foreign_db) %} + {% set unique_columns = table_obj.getUniqueColumns(false, false) %} + {% endif %} + + + + + + + {% endfor %} + +
        {% trans 'Column' %} + {% trans 'Internal relation' %} + {% if is_foreign_key_supported(tbl_storage_engine) %} + {{ show_hint('An internal relation is not necessary when a corresponding FOREIGN KEY relation exists.'|trans) }} + {% endif %} +
        + {{ myfield }} + + + {% include 'table/relation/relational_dropdown.twig' with { + 'name': 'destination_db[' ~ myfield_md5 ~ ']', + 'title': 'Database'|trans, + 'values': databases, + 'foreign': foreign_db + } only %} + + {% include 'table/relation/relational_dropdown.twig' with { + 'name': 'destination_table[' ~ myfield_md5 ~ ']', + 'title': 'Table'|trans, + 'values': tables, + 'foreign': foreign_table + } only %} + + {% include 'table/relation/relational_dropdown.twig' with { + 'name': 'destination_column[' ~ myfield_md5 ~ ']', + 'title': 'Column'|trans, + 'values': unique_columns, + 'foreign': foreign_column + } only %} +
        +
        + {% if default_sliders_state != 'disabled' and is_foreign_key_supported(tbl_storage_engine) %} +
        + {% endif %} + {% endif %} + + {% if relation_parameters.displayFeature is not null %} + {% set disp = get_display_field(db, table) %} +
        + + +
        + {% endif %} + +
        + + +
        +
        + + +{% endblock %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/search/index.twig b/Sources/php_script/script/phpMyAdmin/templates/table/search/index.twig new file mode 100644 index 0000000..3c19c51 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/search/index.twig @@ -0,0 +1,203 @@ + + +
        + {{ get_hidden_inputs(db, table) }} + + + +
        +
        {% trans 'Do a "query by example" (wildcard: "%")' %}
        + +
        +
        +
        + + + + {% if geom_column_flag %} + + {% endif %} + + + + + + + + + {% for column_index in 0..column_names|length - 1 %} + + {# If 'Function' column is present trying to change comment #} + {% if geom_column_flag %} + {# Displays 'Function' column if it is present #} + + {% endif %} + {# Displays column's name, type, collation and value #} + + {% set properties = self.getColumnProperties(column_index, column_index) %} + + + + {# here, the data-type attribute is needed for a date/time picker #} + + + {% endfor %} + +
        {% trans 'Function' %}{% trans 'Column' %}{% trans 'Type' %}{% trans 'Collation' %}{% trans 'Operator' %}{% trans 'Value' %}
        + {% set geom_types = get_gis_datatypes() %} + {% if column_types[column_index] in geom_types %} + + {% endif %} + + {#- Keep this without extra spaces because it is used for a request to build the BETWEEN modal -#} + {{- column_names[column_index] -}} + + {{ properties['type'] }} + + {{ properties['collation'] }} + + {{ properties['func']|raw }} + + {{ properties['value']|raw }} + {# Displays hidden fields #} + + + +
        +
        +
        + +
        + + {% if default_sliders_state != 'disabled' %} +
        + +
        +
        + {% endif %} + + {# Displays columns select list for selecting distinct columns in the search #} +
        +
        + + +
        +
        + + +
        +
        + + {# Displays input box for custom 'Where' clause to be used in the search #} +
        + + +
        + + {# Displays option of changing default number of rows displayed per page #} +
        + + +
        + + {# Displays option for ordering search results by a column value (Asc or Desc) #} +
        + {% trans 'Display order:' %} +
        + + +
        + +
        + + +
        +
        + + +
        +
        + {% if default_sliders_state != 'disabled' %} +
        + {% endif %} +
        + + +
        +
        + + + +
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/structure/display_structure.twig b/Sources/php_script/script/phpMyAdmin/templates/table/structure/display_structure.twig new file mode 100644 index 0000000..6e8e4cb --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/structure/display_structure.twig @@ -0,0 +1,614 @@ +{% extends 'table/page_with_secondary_tabs.twig' %} +{% block content %} +

        {{table}}

        +
        + {{ get_hidden_inputs(db, table) }} + +
        + + {# Table header #} + + + + + + + + + + + {% if show_column_comments -%} + + {%- endif %} + + {# @see table/structure.js, function moreOptsMenuResize() #} + {% if not db_is_system_schema and not tbl_is_view %} + + {% endif %} + + + + {# Table body #} + {% set rownum = 0 %} + {% for row in fields %} + {% set rownum = rownum + 1 %} + + {% set extracted_columnspec = extracted_columnspecs[rownum] %} + {% set field_name = row['Field']|e %} + {# For column comments #} + {% set comments = row_comments[rownum] %} + {# Underline commented fields and display a hover-title (CSS only) #} + + + + + + + + {{ extracted_columnspec['displayed_type']|raw }} + {% if relation_parameters.columnCommentsFeature is not null and relation_parameters.browserTransformationFeature is not null and browse_mime + and mime_map[row['Field']]['mimetype'] is defined %} +
        {% trans 'Media type:' %} {{ mime_map[row['Field']]['mimetype']|replace({'_': '/'})|lower }} + {% endif %} +
        + +
        + + + + {% if show_column_comments %} + + {% endif %} + + {% if not tbl_is_view and not db_is_system_schema %} + + + {% endif %} + + {% if not tbl_is_view and not db_is_system_schema %} + {% set type = extracted_columnspec['print_type'] is not empty ? extracted_columnspec['print_type'] %} + + {% endif %} + + {% endfor %} + +
        #{% trans 'Name' %}{% trans 'Type' %}{% trans 'Collation' %}{% trans 'Attributes' %}{% trans 'Null' %}{% trans 'Default' %}{% trans 'Comments' %}{% trans 'Extra' %}{% trans 'Action' %}
        + + {{ rownum }} + + + {% if row['Collation'] is not empty %} + {{ collations[row['Collation']].name }} + {% endif %} + {{ attributes[rownum] }}{{ row['Null'] == 'YES' ? 'Yes'|trans : 'No'|trans }} + {% if row['Default'] is not null %} + {% if extracted_columnspec['type'] == 'bit' %} + {{ row['Default']|convert_bit_default_value }} + {% else %} + {{ row['Default'] }} + {% endif %} + {% elseif row['Null'] == 'YES' %} + NULL + {% else %} + {% trans %}None{% context %}None for default{% endtrans %} + {% endif %} + + {{ comments }} + {{ row['Extra']|upper }} + + {{ get_icon('b_edit', 'Change'|trans) }} + + + + {{ get_icon('b_drop', 'Drop'|trans) }} + + + {% if hide_structure_actions %} + + {% endif %} +
        +
        +
        + {% include 'select_all.twig' with { + 'text_dir': text_dir, + 'form_name': 'fieldsForm' + } only %} + + + + {% if not tbl_is_view and not db_is_system_schema %} + + + + {% if tbl_storage_engine != 'ARCHIVE' %} + + + + + + + {% if relation_parameters.centralColumnsFeature is not null %} + + + {% endif %} + {% endif %} + {% endif %} +
        +
        +
        + + + + + +{# Work on the table #} + +{% if not tbl_is_view and not db_is_system_schema %} +
        + {{ get_hidden_inputs(db, table) }} + {% if show_icons('ActionLinksMode') %} + {{ get_image('b_insrow', 'Add column'|trans) }}  + {% endif %} + {% set num_fields -%} + + {%- endset %} + {{ 'Add %s column(s)'|trans|format(num_fields)|raw }} +   + {# I tried displaying the drop-down inside the label but with Firefox the drop-down was blinking #} + + +
        +{% endif %} + +{% if not tbl_is_view and not db_is_system_schema and tbl_storage_engine != 'ARCHIVE' %} +
        +
        + + {% trans 'Indexes' %} + {{ show_mysql_docu('optimizing-database-structure') }} + + + {% if indexes is not empty %} + {{ indexes_duplicates|raw }} + + {{ include('modals/preview_sql_confirmation.twig') }} +
        + + + + + + + + + + + + + + + + + {% for index in indexes %} + + {% set columns_count = index.getColumnCount() %} + + + + + + + + + + {% for column in index.getColumns() %} + {% if column.getSeqInIndex() > 1 %} + + {% endif %} + + + + + + {% if column.getSeqInIndex() == 1 %} + + {% endif %} + + {% endfor %} + + {% endfor %} +
        {% trans 'Action' %}{% trans 'Keyname' %}{% trans 'Type' %}{% trans 'Unique' %}{% trans 'Packed' %}{% trans 'Column' %}{% trans 'Cardinality' %}{% trans 'Collation' %}{% trans 'Null' %}{% trans 'Comment' %}
        + + {{ get_icon('b_edit', 'Edit'|trans) }} + + + + {{ get_icon('b_rename', 'Rename'|trans) }} + + + {% if index.getName() == 'PRIMARY' %} + {% set index_params = { + 'sql_query': 'ALTER TABLE ' ~ backquote(table) ~ ' DROP PRIMARY KEY;', + 'message_to_show': 'The primary key has been dropped.'|trans + } %} + {% else %} + {% set index_params = { + 'sql_query': 'ALTER TABLE ' ~ backquote(table) ~ ' DROP INDEX ' ~ backquote(index.getName()) ~ ';', + 'message_to_show': 'Index %s has been dropped.'|trans|format(index.getName()) + } %} + {% endif %} + + + {{ link_or_button( + url('/sql'), + index_params|merge({'db': db, 'table': table}), + get_icon('b_drop', 'Drop'|trans), + {'class': 'drop_primary_key_index_anchor ajax'} + ) }} + {{ index.getName() }}{{ index.getType()|default(index.getChoice()) }}{{ index.isUnique() ? 'Yes'|trans : 'No'|trans }}{{ index.isPacked()|raw }}
        + {% if column.hasExpression() %}{{ column.getExpression() }}{% else %}{{ column.getName() }}{% endif %} + {% if column.getSubPart() is not empty %} + ({{ column.getSubPart() }}) + {% endif %} + {{ column.getCardinality() }}{{ column.getCollation() }}{{ column.getNull(true) }}{{ index.getComments() }}
        +
        + {% else %} +
        {{ 'No index defined!'|trans|notice }}
        + {% endif %} +
        + +
        +
        + {{ get_hidden_inputs(db, table) }} + + + {% apply format('')|raw %} + {% trans %}Create an index on %s columns{% endtrans %} + {% endapply %} + + +
        +
        +
        + {{ include('modals/index_dialog_modal.twig') }} +{% endif %} + +{# Display partition details #} +{% if have_partitioning %} + {# Detect partitioning #} + {% if partition_names is not empty and partition_names[0] is not null %} + {% set first_partition = partitions[0] %} + {% set range_or_list = first_partition.getMethod() == 'RANGE' + or first_partition.getMethod() == 'RANGE COLUMNS' + or first_partition.getMethod() == 'LIST' + or first_partition.getMethod() == 'LIST COLUMNS' %} + {% set sub_partitions = first_partition.getSubPartitions() %} + {% set has_sub_partitions = first_partition.hasSubPartitions() %} + {% if has_sub_partitions %} + {% set first_sub_partition = sub_partitions[0] %} + {% endif %} + + {% if default_sliders_state != 'disabled' %} +
        + +
        +
        + {% endif %} + + {% include 'table/structure/display_partitions.twig' with { + 'db': db, + 'table': table, + 'partitions': partitions, + 'partition_method': first_partition.getMethod(), + 'partition_expression': first_partition.getExpression(), + 'has_description': first_partition.getDescription() is not empty, + 'has_sub_partitions': has_sub_partitions, + 'sub_partition_method': has_sub_partitions ? first_sub_partition.getMethod(), + 'sub_partition_expression': has_sub_partitions ? first_sub_partition.getExpression(), + 'range_or_list': range_or_list + } only %} + {% else %} + {% include 'table/structure/display_partitions.twig' with { + 'db': db, + 'table': table + } only %} + {% endif %} + {% if default_sliders_state != 'disabled' %} +
        + {% endif %} +{% endif %} + +{# Displays Space usage and row statistics #} +{% if show_stats %} + {{ table_stats|raw }} +{% endif %} +
        +{% endblock %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/tracking/structure_snapshot_columns.twig b/Sources/php_script/script/phpMyAdmin/templates/table/tracking/structure_snapshot_columns.twig new file mode 100644 index 0000000..d84063c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/table/tracking/structure_snapshot_columns.twig @@ -0,0 +1,56 @@ +

        {% trans 'Structure' %}

        + + + + + + + + + + + + + + + {% set index = 1 %} + {% for field in columns %} + + + {% set index = index + 1 %} + + + + + + + + + {% endfor %} + +
        {% trans %}#{% context %}Number{% endtrans %}{% trans 'Column' %}{% trans 'Type' %}{% trans 'Collation' %}{% trans 'Null' %}{% trans 'Default' %}{% trans 'Extra' %}{% trans 'Comment' %}
        {{ index }} + + {{ field['Field'] }} + {% if field['Key'] == 'PRI' %} + {{ get_image('b_primary', 'Primary'|trans) }} + {% elseif field['Key'] is not empty %} + {{ get_image('bd_primary', 'Index'|trans) }} + {% endif %} + + {{ field['Type'] }}{{ field['Collation'] }}{{ field['Null'] == 'YES' ? 'Yes'|trans : 'No'|trans }} + {% if field['Default'] is defined %} + {% set extracted_columnspec = extract_column_spec(field['Type']) %} + {% if extracted_columnspec['type'] == 'bit' %} + {# here, $field['Default'] contains something like b'010' #} + {{ field['Default']|convert_bit_default_value }} + {% else %} + {{ field['Default'] }} + {% endif %} + {% else %} + {% if field['Null'] == 'YES' %} + NULL + {% else %} + {% trans %}None{% context %}None for default{% endtrans %} + {% endif %} + {% endif %} + {{ field['Extra'] }}{{ field['Comment'] }}
        diff --git a/Sources/php_script/script/phpMyAdmin/templates/test/gettext/notes.twig b/Sources/php_script/script/phpMyAdmin/templates/test/gettext/notes.twig new file mode 100644 index 0000000..e5a38e4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/test/gettext/notes.twig @@ -0,0 +1,5 @@ +{% trans %} +Text +{% notes %} +Notes +{% endtrans %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/test/gettext/pgettext.twig b/Sources/php_script/script/phpMyAdmin/templates/test/gettext/pgettext.twig new file mode 100644 index 0000000..5365027 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/test/gettext/pgettext.twig @@ -0,0 +1,5 @@ +{% trans %} +Text +{% context %} +Text context +{% endtrans %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/test/raw_output.twig b/Sources/php_script/script/phpMyAdmin/templates/test/raw_output.twig new file mode 100644 index 0000000..fe86f42 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/test/raw_output.twig @@ -0,0 +1,2 @@ +{{ variable1|raw }} +{{ variable2|raw }} diff --git a/Sources/php_script/script/phpMyAdmin/templates/test/static.twig b/Sources/php_script/script/phpMyAdmin/templates/test/static.twig new file mode 100644 index 0000000..703390d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/test/static.twig @@ -0,0 +1 @@ +static content \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/templates/top_menu.twig b/Sources/php_script/script/phpMyAdmin/templates/top_menu.twig new file mode 100644 index 0000000..b134395 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/top_menu.twig @@ -0,0 +1,22 @@ + diff --git a/Sources/php_script/script/phpMyAdmin/templates/user_password.twig b/Sources/php_script/script/phpMyAdmin/templates/user_password.twig new file mode 100644 index 0000000..64a6644 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/templates/user_password.twig @@ -0,0 +1,2 @@ + +{% trans 'Back' %} diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/css/theme.css b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/css/theme.css new file mode 100644 index 0000000..dc903c7 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/css/theme.css @@ -0,0 +1,3 @@ +:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size: 1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-bg: #fff}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr /* rtl:ignore */;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x, 0.75rem);padding-left:var(--bs-gutter-x, 0.75rem);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #212529;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #212529;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #212529;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #cfe2ff;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg: #e2e3e5;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#0d6efd;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#6c757d;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:0.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid rgba(0,0,0,0);border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-0.5rem -0.5rem -0.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(0.3rem - 1px);border-bottom-left-radius:calc(0.3rem - 1px)}.modal-footer>*{margin:.25rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}@-webkit-keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-right-color:rgba(0,0,0,0);border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:hover,.link-primary:focus{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:hover,.link-secondary:focus{color:#565e64}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-top-0{border-top:0 !important}.border-end{border-right:1px solid #dee2e6 !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:1px solid #dee2e6 !important}.border-start-0{border-left:0 !important}.border-primary{border-color:#0d6efd !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:.25rem !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:.25rem !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-end{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-start{border-bottom-left-radius:.25rem !important;border-top-left-radius:.25rem !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}#page_content{margin:0 .5em}.data{margin:0 0 12px}button.mult_submit,.checkall_box+label{text-decoration:none;color:#235a81;cursor:pointer;outline:none}button.mult_submit:hover,button.mult_submit:focus{text-decoration:underline;color:#235a81}.checkall_box+label:hover{text-decoration:underline;color:#235a81}#navbarDropdown>img{display:none}textarea.char{margin:6px}textarea.charField{width:95%}.pma-fieldset{margin-top:1em;border-radius:4px 4px 0 0;border:#aaa solid 1px;padding:.5em;background:#eee;text-shadow:1px 1px 2px #fff;box-shadow:1px 1px 2px #fff inset}.pma-fieldset .pma-fieldset{margin:.8em;border:1px solid #aaa;background:#e8e8e8}.pma-fieldset legend{float:none;font-weight:bold;color:#444;padding:5px 10px;border-radius:2px;border:1px solid #aaa;background-color:#fff;max-width:100%;box-shadow:3px 3px 15px #bbb;width:initial;font-size:1em}.datatable{table-layout:fixed}.clearfloat{clear:both}.paddingtop{padding-top:1em}.separator{color:#fff;text-shadow:0 1px 0 #000}div.tools{padding:.2em;margin-top:0;margin-bottom:.5em;border-top:0;text-align:right;float:none;clear:both;border-radius:0 0 4px 4px}div.tools a{color:#3a7ead !important}.pma-fieldset.tblFooters{margin-top:0;margin-bottom:.5em;border-top:0;text-align:right;float:none;clear:both;border-radius:0 0 4px 4px}div.null_div{height:20px;text-align:center;font-style:normal;min-width:50px}.pma-fieldset .formelement{float:left;margin-right:.5em;white-space:nowrap}.pma-fieldset div[class=formelement]{white-space:normal}button.mult_submit{border:none;background-color:rgba(0,0,0,0)}.condition{border-color:#000 !important}th.condition{border-width:1px 1px 0 1px;border-style:solid}td.condition{border-width:0 1px 0 1px;border-style:solid}tr:last-child td.condition{border-width:0 1px 1px 1px}.before-condition{border-right:1px solid #000}td.null{font-style:italic;color:#7d7d7d !important}table .valueHeader,table .value{text-align:right;white-space:normal}.value{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}img.lightbulb{cursor:pointer}.pdflayout{overflow:hidden;clip:inherit;background-color:#fff;display:none;border:1px solid #000;position:relative}.pdflayout_table{background:#d3dce3;color:#000;overflow:hidden;clip:inherit;z-index:2;display:inline;visibility:inherit;cursor:move;position:absolute;font-size:80%;border:1px dashed #000}.cm-sql-doc{text-decoration:none;border-bottom:1px dotted #000;color:inherit !important}td .icon{image-rendering:-moz-crisp-edges;image-rendering:pixelated;margin:0}.selectallarrow{margin-right:.3em;margin-left:.6em}.with-selected{margin-left:2em}#pma_errors,#pma_demo,#pma_footer{position:relative;padding:0 .5em}.confirmation{color:#000;background-color:pink}.new_central_col{width:100%}.tblcomment{font-size:70%;font-weight:normal;color:#009}.tblHeaders{font-weight:bold;color:#000;background:#d3dce3}div.tools,.tblFooters{font-weight:normal;color:#000;background:#d3dce3}.tblHeaders a:link,.tblHeaders a:active,.tblHeaders a:visited{color:blue}div.tools a:link,div.tools a:visited,div.tools a:active{color:blue}.tblFooters a:link,.tblFooters a:active,.tblFooters a:visited{color:blue}.tblHeaders a:hover,div.tools a:hover,.tblFooters a:hover{color:red}.error{border:1px solid maroon !important;margin-left:2px;padding:1px 2px;color:#000;background:pink}.disabled{color:#666}.disabled a:link,.disabled a:active,.disabled a:visited{color:#666}.disabled a:hover{color:#666;text-decoration:none}tr.disabled td,td.disabled{background-color:#f3f3f3;color:#aaa}.pre_wrap{white-space:pre-wrap}.pre_wrap br{display:none}body#loginform{margin:1em 0 0 0;text-align:center}body#loginform h1,body#loginform .h1,body#loginform a.logo{display:block;text-align:center}body#loginform div.container{text-align:left;width:30em;margin:0 auto}div.container.modal_form{margin:0 auto;width:30em;text-align:center;background:#fff;z-index:999}div#modalOverlay{position:fixed;top:0;left:0;height:100%;width:100%;background:#fff;z-index:900}label.col-3.d-flex.align-items-center{font-weight:bolder}.commented_column{border-bottom:1px dashed #000}.column_attribute{font-size:70%}.column_name{font-size:80%;margin:5px 2px}.central_columns_navigation{padding:1.5% 0 !important}.message_errors_found{margin-top:20px}.repl_gui_skip_err_cnt{width:30px}.color_gray{color:gray}.max_height_400{max-height:400px}li.last.database{margin-bottom:15px !important}div#dataDisplay input,div#dataDisplay select{margin:0;margin-right:.5em}div#dataDisplay th{line-height:2em}img.calendar{border:none}form.clock{text-align:center}div#tablestatistics table{float:left;margin-bottom:.5em;margin-right:1.5em;margin-top:.5em;min-width:16em}#topmenucontainer{padding-right:1em;width:100%}#page_nav_icons{position:fixed;top:0;right:0;z-index:99;padding:.5rem 0}#page_settings_icon{cursor:pointer;display:none}#page_settings_modal,#pma_navigation_settings{display:none}#textSQLDUMP{width:95%;height:95%;font-family:Consolas,"Courier New",Courier,monospace;font-size:110%}#TooltipContainer{position:absolute;z-index:99;width:20em;height:auto;overflow:visible;visibility:hidden;background-color:#ffc;color:#060;border:.1em solid #000;padding:.5em}#fieldset_add_user_login div.item{display:flex;align-items:center;border-bottom:1px solid silver;padding-bottom:.3em;margin-bottom:.3em}#fieldset_add_user_login label{float:left;display:block;width:10em;max-width:100%;text-align:right;padding-right:.5em;margin-bottom:0}#fieldset_add_user_login input{width:12em;clear:right;max-width:100%}#fieldset_add_user_login span.options{float:left;display:block;width:12em;max-width:100%;padding-right:.5em}#fieldset_add_user_login span.options #select_pred_username,#fieldset_add_user_login span.options #select_pred_hostname,#fieldset_add_user_login span.options #select_pred_password{width:100%;max-width:100%}#fieldset_add_user_login span.options input{width:auto}#fieldset_user_priv div.item{float:left;width:9em;max-width:100%}#fieldset_user_priv div.item div.item{float:none}#fieldset_user_priv div.item label{white-space:nowrap}#fieldset_user_priv div.item select{width:100%}#fieldset_user_global_rights .pma-fieldset,#fieldset_user_group_rights .pma-fieldset{float:left}#fieldset_user_global_rights>legend input{margin-left:2em}.linkElem:hover{text-decoration:underline;color:#235a81;cursor:pointer}h3#serverstatusqueries span,#serverstatusqueries.h3 span{font-size:60%;display:inline}div#serverStatusTabs{margin-top:1em}caption a.top{float:right}div#serverstatusquerieschart{float:left;width:500px;height:350px;margin-right:50px}div#serverstatus table tbody td.descr a,div#serverstatus table .tblFooters a{white-space:nowrap}div.liveChart{clear:both;min-width:500px;height:400px;padding-bottom:80px}div#chartVariableSettings{border:1px solid #ddd;background-color:#e6e6e6;margin-left:10px}table#chartGrid td{padding:3px;margin:0}table#chartGrid div.monitorChart{background:#ebebeb;border:none;min-width:1px}div.tabLinks{float:left;padding:5px 0}div.tabLinks a,div.tabLinks label{margin-right:7px}div.tabLinks .icon{margin:-0.2em .3em 0 0}.popupContent{display:none;position:absolute;border:1px solid #ccc;margin:0;padding:3px;background-color:#fff;z-index:2;box-shadow:2px 2px 3px #666}div#logTable{padding-top:10px;clear:both}div#logTable table{width:100%}div#queryAnalyzerDialog{min-width:700px}div#queryAnalyzerDialog div.CodeMirror-scroll{height:auto}div#queryAnalyzerDialog div#queryProfiling{height:300px}div#queryAnalyzerDialog td.explain{width:250px}div#queryAnalyzerDialog table.queryNums{display:none;border:0;text-align:left}.smallIndent{padding-left:7px}div#profilingchart{width:850px;height:370px;float:left}#profilingchart .jqplot-highlighter-tooltip{top:auto !important;left:11px;bottom:24px}#resizer{border:1px solid silver}#inner-resizer{padding:10px}#togglequerybox{margin:0 10px}#serverstatus h3,#serverstatus .h3{margin:15px 0;font-weight:normal;color:#999;font-size:1.7em}textarea#sqlquery{width:100%;border-radius:4px;border:1px solid #aaa;padding:5px;font-family:inherit}textarea#sql_query_edit{height:7em;width:95%;display:block}#mysqlmaininformation,#pmamaininformation{float:left;width:49%}#maincontainer ul{list-style-type:disc;vertical-align:middle}#maincontainer li{margin-bottom:.3em}#full_name_layer{position:absolute;padding:2px;margin-top:-3px;z-index:801;border-radius:3px;border:solid 1px #888;background:#fff}#body_browse_foreigners{background:#f3f3f3;margin:.5em .5em 0 .5em}#bodythemes{width:500px;margin:auto;text-align:center}#bodythemes img{border:.1em solid #000}#bodythemes a:hover img{border:.1em solid red}#selflink{clear:both;display:block;margin-top:1em;margin-bottom:1em;width:98%;margin-left:1%;text-align:right;border-top:.1em solid silver}#qbe_div_table_list,#qbe_div_sql_query{float:left}code{font-size:1em}code.php{display:block;padding-left:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:ltr}code.sql{display:block;padding:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:ltr}div.sqlvalidate{display:block;padding:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:ltr}.result_query div.sqlOuter{background:#e5e5e5;text-align:left}#PMA_slidingMessage code.sql,div.sqlvalidate{background:#e5e5e5}textarea#partitiondefinition{height:3em}.hide{display:none}#list_server{list-style-type:none;padding:0}div.upload_progress{width:400px;margin:3em auto;text-align:center}div.upload_progress_bar_outer{border:1px solid #000;width:202px;position:relative;margin:0 auto 1em;color:#212529}div.upload_progress_bar_outer div.percentage{position:absolute;top:0;left:0;width:202px}div.upload_progress_bar_inner{background-color:#ddd;width:0;height:12px;margin:1px;overflow:hidden;color:#000;position:relative}div.upload_progress_bar_inner div.percentage{top:-1px;left:-1px}div#statustext{margin-top:.5em}table#serverconnection_src_remote,table#serverconnection_trg_remote,table#serverconnection_src_local,table#serverconnection_trg_local{float:left}input[type=text].invalid_value,input[type=password].invalid_value,input[type=number].invalid_value,input[type=date].invalid_value{background:#fcc}select.invalid_value,.invalid_value{background:#fcc}.ajax_notification{top:0;position:fixed;margin-top:200px;margin-right:auto;margin-bottom:0;margin-left:auto;padding:5px;width:350px;z-index:1100;text-align:center;display:inline;left:0;right:0;background-image:url("../img/ajax_clock_small.gif");background-repeat:no-repeat;background-position:2%;border:1px solid #e2b709;background-color:#ffe57e;border-radius:5px;box-shadow:0 5px 90px #888}#loading_parent{position:relative;width:100%}#popup_background{display:none;position:fixed;width:100%;height:100%;top:0;left:0;background:#000;z-index:1000;overflow:hidden}#tablestructure tbody label{margin:.3rem 0}#structure-action-links a{margin-right:1em}#addColumns input[type=radio]{margin:3px 0 0;margin-left:1em}#index_frm .index_info input[type=text],#index_frm .index_info select{width:100%;margin:0;box-sizing:border-box}#index_frm .index_info div{padding:.2em 0}#index_frm .index_info .label{float:left;min-width:12em}#index_frm .slider{width:10em;margin:.6em;float:left}#index_frm .add_fields{float:left}#index_frm .add_fields input{margin-left:1em}#index_frm input{margin:0}#index_frm td{vertical-align:middle}table#index_columns{width:100%}table#index_columns select{width:85%;float:left}#move_columns_dialog div{padding:1em}#move_columns_dialog ul{list-style:none;margin:0;padding:0}#move_columns_dialog li{background:#d3dce3;border:1px solid #aaa;color:#000;font-weight:bold;margin:.4em;padding:.2em;border-radius:2px}.config-form fieldset{margin-top:0;padding:0;clear:both;border-radius:0}.config-form fieldset p{margin:0;padding:.5em;background:#fff;border-top:0}.config-form fieldset .errors{margin:0 -2px 1em;padding:.5em 1.5em;background:#fbead9;border-color:#c83838;border-style:solid;border-width:1px 0;list-style:none;font-family:var(--bs-font-sans-serif);font-size:small}.config-form fieldset .inline_errors{margin:.3em .3em .3em;margin-left:0;padding:0;list-style:none;color:#9a0000;font-size:small}.config-form fieldset .doc{margin-left:1em}.config-form fieldset .disabled-notice{margin-left:1em;font-size:80%;text-transform:uppercase;color:#e00;cursor:help}.config-form fieldset th{padding:.3em .3em .3em;padding-left:.5em;text-align:left;vertical-align:top;background:rgba(0,0,0,0);filter:none;border-top:1px #d5d5d5 solid;border-right:none}.config-form fieldset th small,.config-form fieldset th .small{display:block;font-weight:normal;font-family:var(--bs-font-sans-serif);font-size:x-small;color:#444}.config-form fieldset td{padding-top:.3em;padding-bottom:.3em;vertical-align:top;border-top:1px #d5d5d5 solid;border-right:none}.config-form legend{display:none}.config-form span.checkbox{padding:2px;display:inline-block}.config-form span.checkbox.custom{padding:1px;border:1px #edec90 solid;background:#ffc}.config-form .custom{background:#ffc}.config-form .field-error{border-color:#a11 !important}.config-form input[type=text],.config-form input[type=password],.config-form input[type=number]{border:1px #a7a6aa solid;height:auto}.config-form input[type=text]:focus,.config-form input[type=password]:focus,.config-form input[type=number]:focus{border:1px #6676ff solid;background:#f7fbff}.config-form select,.config-form textarea{border:1px #a7a6aa solid;height:auto}.config-form select:focus,.config-form textarea:focus{border:1px #6676ff solid;background:#f7fbff}.config-form .field-comment-mark{font-family:serif;color:#007;cursor:help;padding:0 .2em;font-weight:bold;font-style:italic}.config-form .field-comment-warning{color:#a00}.config-form dd{margin-left:.5em}.config-form dd::before{content:"▸ "}fieldset .group-header th{background:#d5d5d5}fieldset .group-header+tr th{padding-top:.6em}fieldset .group-field-1 th,fieldset .group-header-2 th{padding-left:1.5em}fieldset .group-field-2 th,fieldset .group-header-3 th{padding-left:3em}fieldset .group-field-3 th{padding-left:4.5em}fieldset .disabled-field th{color:#666;background-color:#ddd}fieldset .disabled-field th small,fieldset .disabled-field th .small{color:#666;background-color:#ddd}fieldset .disabled-field td{color:#666;background-color:#ddd}.click-hide-message{cursor:pointer}.prefsmanage_opts{margin-left:2em}#prefs_autoload{margin-bottom:.5em;margin-left:.5em}input#auto_increment_opt{width:-webkit-min-content;width:-moz-min-content;width:min-content}#placeholder{position:relative;border:1px solid #aaa;float:right;overflow:hidden;width:450px;height:300px}#placeholder .button{position:absolute;cursor:pointer}#placeholder div.button{font-size:smaller;color:#999;background-color:#eee;padding:2px}.wrapper{float:left;margin-bottom:1.5em}.toggleButton{position:relative;cursor:pointer;font-size:.8em;text-align:center;line-height:1.4em;height:1.55em;overflow:hidden;border-right:.1em solid #888;border-left:.1em solid #888;border-radius:.3em}.toggleButton table,.toggleButton td,.toggleButton img{padding:0;position:relative}.toggleButton .container{position:absolute}.toggleButton .container td,.toggleButton .container tr{background:none !important}.toggleButton .toggleOn{color:#fff;padding:0 1em;text-shadow:0 0 .2em #000}.toggleButton .toggleOff{padding:0 1em}.doubleFieldset .pma-fieldset{width:48%;float:left;padding:0}.doubleFieldset legend{margin-left:1.5em}.doubleFieldset div.wrap{padding:1.5em}#table_name_col_no_outer{margin-top:45px}#table_name_col_no{position:fixed;top:100px !important;width:100%;background:#fff}#table_columns{display:block;overflow:auto}#table_columns input[type=text],#table_columns input[type=password],#table_columns input[type=number]{width:10em;box-sizing:border-box}#table_columns select{width:10em;box-sizing:border-box}#openlayersmap{width:450px;height:300px}.placeholderDrag{cursor:move}#left_arrow{left:8px;top:26px}#right_arrow{left:26px;top:26px}#up_arrow{left:17px;top:8px}#down_arrow{left:17px;top:44px}#zoom_in{left:17px;top:67px}#zoom_world{left:17px;top:85px}#zoom_out{left:17px;top:103px}.colborder{cursor:col-resize;height:100%;margin-left:-6px;position:absolute;width:5px}.colborder_active{border-right:2px solid #a44}.pma_table th.draggable span{display:block;overflow:hidden}.pma_table td{position:static}.pma_table tbody td span{display:block;overflow:hidden}.pma_table tbody td span code span{display:inline}.pma_table th.draggable span{margin-right:10px}.modal-copy input{display:block;width:100%;margin-top:1.5em;padding:.3em 0}.cRsz{position:absolute}.cCpy{background:#333;color:#fff;font-weight:bold;margin:.1em;padding:.3em;position:absolute;text-shadow:-1px -1px #000;box-shadow:0 0 .7em #000;border-radius:.3em}.cPointer{height:20px;width:10px;margin-top:-10px;margin-left:-5px;background:url("../img/col_pointer.png");position:absolute}.tooltip{background:#333 !important;opacity:.8 !important;z-index:9999;border:1px solid #000 !important;border-radius:.3em !important;text-shadow:-1px -1px #000 !important;font-size:.8em !important;font-weight:bold !important;padding:1px 3px !important}.tooltip *{background:none !important;color:#fff !important}.cDrop{right:0;position:absolute;top:0}.coldrop{background:url("../img/col_drop.png");cursor:pointer;height:16px;margin-top:.3em;width:16px}.coldrop:hover{background-color:#999}.coldrop-hover{background-color:#999}.cList{background:#eee;border:solid 1px #999;position:absolute;box-shadow:0 .2em .5em #333;margin-left:75%;right:0;max-width:100%;overflow-wrap:break-word}.cList .lDiv div{padding:.2em .5em .2em;padding-left:.2em}.cList .lDiv div:hover{background:#ddd;cursor:pointer}.cList .lDiv div input{cursor:pointer}.showAllColBtn{border-bottom:solid 1px #999;border-top:solid 1px #999;cursor:pointer;font-size:.9em;font-weight:bold;padding:.35em 1em;text-align:center}.showAllColBtn:hover{background:#ddd}.turnOffSelect{-webkit-user-select:none;-moz-user-select:none;user-select:none}.navigation{margin:.8em 0;border-radius:5px;background:linear-gradient(#eee, #ccc)}.navigation td{margin:0;padding:0;vertical-align:middle;white-space:nowrap}.navigation input[type=submit]{background:none;border:0;filter:none;margin:0;padding:.8em .5em;border-radius:0}.navigation input[type=submit]:hover{color:#fff;cursor:pointer;text-shadow:none;background:linear-gradient(#333, #555)}.navigation input.edit_mode_active{color:#fff;cursor:pointer;text-shadow:none;background:linear-gradient(#333, #555)}.navigation .btn-link{color:#212529}.navigation .btn-link:hover{color:#fff;background-image:linear-gradient(#333, #555);text-decoration:none}.navigation select{margin:0 .8em}.navigation_separator{color:#999;display:inline-block;font-size:1.5em;text-align:center;height:1.4em;width:1.2em;text-shadow:1px 0 #fff}.cEdit{margin:0;padding:0;position:absolute}.cEdit input[type=text]{background:#fff;height:100%;margin:0;padding:0}.cEdit .edit_area{background:#fff;border:1px solid #999;min-width:10em;padding:.3em .5em}.cEdit .edit_area select,.cEdit .edit_area textarea{width:97%}.cEdit .cell_edit_hint{color:#555;font-size:.8em;margin:.3em .2em}.cEdit .edit_box{overflow-x:hidden;overflow-y:scroll;padding:0;margin:0}.cEdit .edit_box_posting{background:#fff url("../img/ajax_clock_small.gif") no-repeat right center;padding-right:1.5em}.cEdit .edit_area_loading{background:#fff url("../img/ajax_clock_small.gif") no-repeat center;height:10em}.cEdit .goto_link{background:#eee;color:#555;padding:.2em .3em}.saving_edited_data{background:url("../img/ajax_clock_small.gif") no-repeat left;padding-left:20px}.relationalTable td{vertical-align:top}.relationalTable select{width:125px;margin-right:5px}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{height:25px;margin-bottom:-25px}.ui-timepicker-div dl dd{margin:0 10px 10px 85px}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:none;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right}.ui-timepicker-rtl dl dd{margin:0 65px 10px 10px}body .ui-widget{font-size:1em}.ui-dialog .pma-fieldset legend a{color:#235a81}.ui-draggable{z-index:801}.jqplot-yaxis{left:0 !important;min-width:25px;width:auto}.jqplot-axis{overflow:hidden}div#page_content div#tableslistcontainer{margin-top:1em}div#page_content div#tableslistcontainer table.data{border-top:.1px solid #eee}div#page_content div.result_query{margin-top:1em}table.show_create{margin-top:1em}table.show_create td{border-right:1px solid #bbb}#alias_modal table{width:100%}#alias_modal label{font-weight:bold}.ui-dialog{position:fixed}.small_font{font-size:smaller}#pma_console_container{width:100%;position:fixed;bottom:0;left:0;z-index:100}#pma_console{position:relative;margin-left:240px}#pma_console .templates{display:none}#pma_console .mid_text{vertical-align:middle}#pma_console .toolbar{position:relative;background:#ccc;border-top:solid 1px #aaa;cursor:n-resize}#pma_console .toolbar span{vertical-align:middle}#pma_console .toolbar.collapsed{cursor:default}#pma_console .toolbar.collapsed:not(:hover){display:inline-block;border-top-right-radius:3px;border-right:solid 1px #aaa}#pma_console .toolbar.collapsed>.button{display:none}#pma_console .message span.text,#pma_console .message span.action{padding:0 3px;display:inline-block}#pma_console .toolbar .button,#pma_console .toolbar .text{padding:0 3px;display:inline-block}#pma_console .switch_button{padding:0 3px;display:inline-block}#pma_console .message span.action,#pma_console .toolbar .button,#pma_console .switch_button{cursor:pointer}#pma_console .message span.action:hover,#pma_console .toolbar .button:hover,#pma_console .switch_button:hover{background:#ddd}#pma_console .toolbar .button.active{background:#ddd}#pma_console .toolbar .text{font-weight:bold}#pma_console .toolbar .button,#pma_console .toolbar .text{margin-right:.4em}#pma_console .toolbar .button,#pma_console .toolbar .text{float:right}#pma_console .content{overflow-x:hidden;overflow-y:auto;margin-bottom:-65px;border-top:solid 1px #aaa;background:#fff;padding-top:.4em}#pma_console .content.console_dark_theme{background:#000;color:#fff}#pma_console .content.console_dark_theme .CodeMirror-wrap{background:#000;color:#fff}#pma_console .content.console_dark_theme .action_content{color:#000}#pma_console .content.console_dark_theme .message{border-color:#373b41}#pma_console .content.console_dark_theme .CodeMirror-cursor{border-color:#fff}#pma_console .content.console_dark_theme .cm-keyword{color:#de935f}#pma_console .message,#pma_console .query_input{position:relative;font-family:Monaco,Consolas,monospace;cursor:text;margin:0 10px .2em 1.4em}#pma_console .message{border-bottom:solid 1px #ccc;padding-bottom:.2em}#pma_console .message.expanded>.action_content{position:relative}#pma_console .message::before{left:-0.7em;position:absolute;content:">"}#pma_console .query_input::before{left:-0.7em;position:absolute;content:">";top:-2px}#pma_console .query_input textarea{width:100%;height:4em;resize:vertical}#pma_console .message:hover::before{color:#7cf;font-weight:bold}#pma_console .message.expanded::before{content:"]"}#pma_console .message.welcome::before{display:none}#pma_console .message.failed::before,#pma_console .message.failed.expanded::before,#pma_console .message.failed:hover::before{content:"=";color:#944}#pma_console .message.pending::before{opacity:.3}#pma_console .message.collapsed>.query{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#pma_console .message.expanded>.query{display:block;white-space:pre;word-wrap:break-word}#pma_console .message .text.targetdb,#pma_console .message.collapsed .action.collapse,#pma_console .message.expanded .action.expand{display:none}#pma_console .message .action.requery,#pma_console .message .action.profiling,#pma_console .message .action.explain,#pma_console .message .action.bookmark{display:none}#pma_console .message.select .action.profiling,#pma_console .message.select .action.explain{display:inline-block}#pma_console .message.history .text.targetdb,#pma_console .message.successed .text.targetdb{display:inline-block}#pma_console .message.history .action.requery,#pma_console .message.history .action.bookmark{display:inline-block}#pma_console .message.bookmark .action.requery,#pma_console .message.bookmark .action.bookmark{display:inline-block}#pma_console .message.successed .action.requery,#pma_console .message.successed .action.bookmark{display:inline-block}#pma_console .message .action_content{position:absolute;bottom:100%;background:#ccc;border:solid 1px #aaa;border-top-left-radius:3px}#pma_console .message.bookmark .text.targetdb,#pma_console .message .text.query_time{margin:0;display:inline-block}#pma_console .message.failed .text.query_time,#pma_console .message .text.failed{display:none}#pma_console .message.failed .text.failed{display:inline-block}#pma_console .message .text{background:#fff}#pma_console .message.collapsed>.action_content{display:none}#pma_console .message.collapsed:hover>.action_content{display:block}#pma_console .message .bookmark_label{padding:0 4px;top:0;background:#369;color:#fff;border-radius:3px}#pma_console .message .bookmark_label.shared{background:#396}#pma_console .message.expanded .bookmark_label{border-top-left-radius:0;border-top-right-radius:0}#pma_console .query_input{position:relative}#pma_console .mid_layer{height:100%;width:100%;position:absolute;top:0;background:#666;display:none;cursor:pointer;z-index:200}#pma_console .card{position:absolute;width:94%;height:100%;min-height:48px;left:100%;top:0;border-left:solid 1px #999;z-index:300;transition:left .2s}#pma_console .card.show{left:6%;box-shadow:-2px 1px 4px -1px #999}#pma_console .button.hide,#pma_console .message span.text.hide{display:none}#pma_bookmarks .content.add_bookmark,#pma_console_options .content{padding:4px 6px}#pma_bookmarks .content.add_bookmark .options{margin-left:1.4em;padding-bottom:.4em;margin-bottom:.4em;border-bottom:solid 1px #ccc}#pma_bookmarks .content.add_bookmark .options button{margin:0 7px;vertical-align:bottom}#pma_bookmarks .content.add_bookmark input[type=text]{margin:0;padding:2px 4px}#debug_console.grouped .ungroup_queries{display:inline-block}#debug_console.ungrouped .group_queries{display:inline-block}#debug_console.ungrouped .ungroup_queries,#debug_console.ungrouped .sort_count{display:none}#debug_console.grouped .group_queries{display:none}#debug_console .count{margin-right:8px}#debug_console .show_trace .trace,#debug_console .show_args .args{display:block}#debug_console .hide_trace .trace,#debug_console .hide_args .args,#debug_console .show_trace .action.dbg_show_trace,#debug_console .hide_trace .action.dbg_hide_trace{display:none}#debug_console .traceStep.hide_args .action.dbg_hide_args,#debug_console .traceStep.show_args .action.dbg_show_args{display:none}#debug_console .traceStep::after{content:"";display:table;clear:both}#debug_console .trace.welcome::after,#debug_console .debug>.welcome::after{content:"";display:table;clear:both}#debug_console .debug_summary{float:left}#debug_console .trace.welcome .time,#debug_console .traceStep .file,#debug_console .script_name{float:right}#debug_console .traceStep .args pre{margin:0}.cm-s-pma .CodeMirror-code{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-code pre{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-measure>pre,.cm-s-pma .CodeMirror-code>pre,.cm-s-pma .CodeMirror-lines{padding:0}.cm-s-pma.CodeMirror{resize:none;height:auto;width:100%;min-height:initial;max-height:initial}.cm-s-pma .CodeMirror-scroll{cursor:text}.pma_drop_handler{display:none;position:fixed;top:0;left:0;width:100%;background:rgba(0,0,0,.6);height:100%;z-index:999;color:#fff;font-size:30pt;text-align:center;padding-top:20%}.pma_sql_import_status{display:none;position:fixed;bottom:0;right:25px;width:400px;border:1px solid #999;background:#f3f3f3;border-radius:4px;box-shadow:2px 2px 5px #ccc}.pma_sql_import_status h2,.pma_sql_import_status .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:1px 1px 15px #999 inset}.pma_drop_result h2,.pma_drop_result .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:1px 1px 15px #999 inset}.pma_sql_import_status div{height:270px;overflow-y:auto;overflow-x:hidden;list-style-type:none}.pma_sql_import_status div li{padding:8px 10px;border-bottom:1px solid #bbb;color:#940e0e;background:#fff}.pma_sql_import_status div li .filesize{float:right}.pma_sql_import_status h2 .minimize,.pma_sql_import_status .h2 .minimize{float:right;margin-right:5px;padding:0 10px}.pma_sql_import_status h2 .close,.pma_sql_import_status .h2 .close{float:right;margin-right:5px;padding:0 10px;display:none}.pma_sql_import_status h2 .minimize:hover,.pma_sql_import_status .h2 .minimize:hover,.pma_sql_import_status h2 .close:hover,.pma_sql_import_status .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_result h2 .close:hover,.pma_drop_result .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_file_status{color:#235a81}.pma_drop_file_status span.underline:hover{cursor:pointer;text-decoration:underline}.pma_drop_result{position:fixed;top:10%;left:20%;width:60%;background:#fff;min-height:300px;z-index:800;box-shadow:0 0 15px #999;border-radius:10px;cursor:move}.pma_drop_result h2 .close,.pma_drop_result .h2 .close{float:right;margin-right:5px;padding:0 10px}.dependencies_box{background-color:#fff;border:3px ridge #000}#composite_index_list{list-style-type:none;list-style-position:inside}span.drag_icon{display:inline-block;background-image:url("../img/s_sortable.png");background-position:center center;background-repeat:no-repeat;width:1em;height:3em;cursor:move}.topmargin{margin-top:1em}meter[value="1"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #e32929 5%, transparent 10%, #e32929)}meter[value="2"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #f60 5%, transparent 10%, #f60)}meter[value="3"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #ffd700 5%, transparent 10%, #ffd700)}th.header{cursor:pointer;color:#235a81}th.header:hover{text-decoration:underline}th.header .sorticon{width:16px;height:16px;background-repeat:no-repeat;background-position:right center;display:inline-table;vertical-align:middle;float:right}th.headerSortUp .sorticon{background-image:url("../img/sort-desc.svg")}th.headerSortDown:hover .sorticon{background-image:url("../img/sort-desc.svg")}th.headerSortDown .sorticon{background-image:url("../img/sort-asc.svg")}th.headerSortUp:hover .sorticon{background-image:url("../img/sort-asc.svg")}body .ui-dialog .ui-dialog-titlebar-close{right:.3em;left:initial}body .ui-dialog .ui-dialog-title{float:left}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{color:#fff;background:none;background-color:#6c757d !important;border-color:#6c757d}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:hover{background-color:#5a6268 !important}.multi_table_query_form .query-form__tr--hide{display:none}.multi_table_query_form .query-form__fieldset--inline,.multi_table_query_form .query-form__select--inline{display:inline}.multi_table_query_form .query-form__tr--bg-none{background:none}.multi_table_query_form .query-form__input--wide{width:91%}.multi_table_query_form .query-form__multi-sql-query{float:left}#name-panel{overflow:hidden}.pre-scrollable{max-height:340px;overflow-y:scroll}@media only screen and (max-width: 768px){.responsivetable{overflow-x:auto}body#loginform div.container{width:100%}.largescreenonly{display:none}.width96{width:96% !important}#page_nav_icons{display:none}#table_name_col_no{top:62px}.tdblock tr td{display:block}#table_columns{margin-top:60px}#table_columns .tablesorter{min-width:100%}.doubleFieldset .pma-fieldset{width:98%}div#serverstatusquerieschart{width:100%;height:450px}.ui-dialog{margin:1%;width:95% !important}}#tooltip_editor{font-size:12px;background-color:#fff;opacity:.95;filter:alpha(opacity=95);padding:5px}#tooltip_font{font-weight:bold}#selection_box{z-index:1000;height:205px;position:absolute;background-color:skyblue;opacity:.4;filter:alpha(opacity=40);pointer-events:none}#filterQueryText{vertical-align:baseline}.ui_tpicker_hour_slider,.ui_tpicker_minute_slider,.ui_tpicker_second_slider,.ui_tpicker_millisec_slider,.ui_tpicker_microsec_slider{margin-left:40px;margin-top:4px;height:.75rem}.ui-timepicker-div dl .ui_tpicker_timezone select{margin-left:50px}.ui_tpicker_time_input{width:100%}@media(min-width: 1200px){div.tools{text-align:left}.pma-fieldset.tblFooters,.tblFooters{text-align:left}}.resize-vertical{resize:vertical}p.enum_notice{margin:5px 2px;font-size:80%}#enum_editor p{margin-top:0;font-style:italic}#enum_editor .values{width:100%}#enum_editor .add{width:100%}#enum_editor .add td{vertical-align:middle;width:50%;padding:0 0 0;padding-left:1em}#enum_editor .values td.drop{width:1.8em;cursor:pointer;vertical-align:middle}#enum_editor .values input{margin:.1em 0;padding-right:2em;width:100%}#enum_editor .values img{vertical-align:middle}#enum_editor input.add_value{margin:0;margin-right:.4em}#enum_editor_output textarea{width:100%;float:right;margin:1em 0 0 0}.enum_hint{position:relative}.enum_hint a{position:absolute;left:81%;bottom:.35em}a.close_gis_editor{float:right}#gis_editor{display:none;position:fixed;z-index:1001;overflow-y:auto;overflow-x:hidden}#gis_data{min-height:230px}#gis_data_textarea{height:6em}#gis_data_editor{background:#d0dce0;padding:15px;min-height:500px}#gis_data_editor .choice{display:none}#gis_data_editor input[type=text]{width:75px}#pma_navigation{width:240px;position:fixed;top:0;left:0;height:100vh;background-color:#f8f9fa;z-index:800}#pma_navigation ul{margin:0}#pma_navigation form{margin:0;padding:0;display:inline}#pma_navigation select#select_server,#pma_navigation select#lightm_db{width:100%}#pma_navigation div.pageselector{text-align:center;margin:0;margin-left:.75em;border-left:1px solid #666}#pma_navigation #pmalogo,#pma_navigation #serverChoice,#pma_navigation #navipanellinks,#pma_navigation #recentTableList,#pma_navigation #favoriteTableList,#pma_navigation #databaseList,#pma_navigation div.pageselector.dbselector{text-align:center;padding:5px 10px 0;border:0}#pma_navigation #pmalogo{background-color:#e9ecef;padding:6px 10px}#pma_navigation #navipanellinks{padding:8px 10px;background-color:rgba(0,0,0,.03)}#pma_navigation #navipanellinks a{display:inline-block;padding:8px}#pma_navigation #navipanellinks .icon{margin:0}#pma_navigation #recentTable,#pma_navigation #favoriteTable{width:200px}#pma_navigation #favoriteTableList select,#pma_navigation #serverChoice select{width:80%}#pma_navigation_header{overflow:hidden}#pma_navigation_content{width:100%;height:100%;position:absolute;top:0;left:0;z-index:0}#pma_navigation_content>img.throbber{display:none;margin:.3em auto 0}#pma_navigation_select_database{text-align:left;padding:0 0 0;border:0;margin:0}#pma_navigation_db_select{margin-top:.5em;margin-left:.75em}#pma_navigation_db_select select{background:linear-gradient(#fff, #f1f1f1, #fff);border-radius:2px;border:1px solid #bbb;border-top:1px solid #bbb;color:#333;padding:4px 6px;margin:0 0 0;width:92%;font-size:1.11em}#pma_navigation_tree_content{width:100%;overflow:hidden;overflow-y:auto;position:absolute;height:100%}#pma_navigation_tree_content a.hover_show_full{position:relative;z-index:100;vertical-align:sub}#pma_navigation_tree{margin:0;margin-left:5px;overflow:hidden;color:#444;height:74%;position:relative}#pma_navigation_tree a{color:#000;padding-left:0}#pma_navigation_tree a:hover{text-decoration:underline}#pma_navigation_tree ul{clear:both;padding:0;list-style-type:none;margin:0}#pma_navigation_tree ul ul{position:relative}#pma_navigation_tree li{margin-bottom:0}#pma_navigation_tree li.activePointer,#pma_navigation_tree li.selected{color:#000;background-color:#ddd}#pma_navigation_tree li .dbItemControls{padding-right:4px;float:right}#pma_navigation_tree li .navItemControls{display:none;padding-right:4px;float:right}#pma_navigation_tree li.activePointer .navItemControls{display:block;opacity:.5}#pma_navigation_tree li.activePointer .navItemControls:hover{opacity:1}#pma_navigation_tree li{white-space:nowrap;clear:both;min-height:16px}#pma_navigation_tree li.fast_filter{white-space:nowrap;clear:both;min-height:16px}#pma_navigation_tree img{margin:0}#pma_navigation_tree i{display:block}#pma_navigation_tree div.block{position:relative;width:1.5em;height:1.5em;min-width:16px;min-height:16px;float:left}#pma_navigation_tree div.block.double{width:2.5em}#pma_navigation_tree div.block i,#pma_navigation_tree div.block b{width:1.5em;height:1.7em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;left:.75em;z-index:0}#pma_navigation_tree div.block i{display:block;border-left:1px solid #666;border-bottom:1px solid #666;position:relative;z-index:0}#pma_navigation_tree div.block i.first{border-left:0}#pma_navigation_tree div.block b{display:block;height:.75em;bottom:0;left:.75em;border-left:1px solid #666}#pma_navigation_tree div.block a,#pma_navigation_tree div.block u{position:absolute;left:50%;top:50%;z-index:10}#pma_navigation_tree div.block a+a{left:100%}#pma_navigation_tree div.block.double a,#pma_navigation_tree div.block.double u{left:33%}#pma_navigation_tree div.block.double a+a{left:85%}#pma_navigation_tree div.block img{position:relative;top:-0.6em;left:0;margin-left:-7px}#pma_navigation_tree div.throbber img{top:2px;left:2px}#pma_navigation_tree li.last>ul{background:none}#pma_navigation_tree li>a,#pma_navigation_tree li>i{line-height:1.5em;height:1.5em;padding-left:.3em}#pma_navigation_tree .list_container{border-left:1px solid #666;margin-left:.75em;padding-left:.75em}#pma_navigation_tree .list_container li.last.database{margin-bottom:0 !important}#pma_navigation_tree .last>.list_container{border-left:0 solid #666}li.fast_filter{padding-left:.75em;margin-left:.75em;padding-right:35px;border-left:1px solid #666;list-style:none}li.fast_filter input{font-size:.7em}li.fast_filter .searchClauseClear{font-weight:bold;color:#800;font-size:.7em}li.fast_filter.db_fast_filter{border:0;margin-left:0}#navigation_controls_outer{min-height:21px !important}#navigation_controls_outer.activePointer{background-color:rgba(0,0,0,0) !important}#navigation_controls{float:right;padding-right:23px}#pma_navigation_resizer{width:1px !important;height:100%;background-color:rgba(0,0,0,.125);cursor:col-resize;position:fixed;top:0;left:240px;z-index:801}#pma_navigation_collapser{width:20px;height:22px;line-height:22px;background:#eee;color:#555;font-weight:bold;position:fixed;top:0;left:240px;text-align:center;cursor:pointer;z-index:800;text-shadow:0 1px 0 #fff;filter:dropshadow(color=#fff, offx=0, offy=1);border:1px solid rgba(0,0,0,.125)}.pma_quick_warp{margin-top:5px;margin-left:2px;position:relative}.pma_quick_warp .drop_list{float:left;margin-left:3px;padding:2px 0}.pma_quick_warp .drop_list:hover .drop_button{background:#fff}.pma_quick_warp .drop_list:hover ul{display:block}.pma_quick_warp .drop_list ul{position:absolute;margin:0;padding:0;overflow:hidden;overflow-y:auto;list-style:none;background:#fff;border:1px solid #ddd;border-radius:.3em;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:0 0 5px #ccc;top:100%;left:3px;right:0;display:none;z-index:802}.pma_quick_warp .drop_list li{white-space:nowrap;padding:0;border-radius:0}.pma_quick_warp .drop_list li img{vertical-align:sub}.pma_quick_warp .drop_list li:hover{background:#f2f2f2}.pma_quick_warp .drop_list a{display:block;padding:.2em .3em}.pma_quick_warp .drop_list a.favorite_table_anchor{clear:left;float:left;padding:.1em .3em 0}.pma_quick_warp .drop_button{padding:.3em;border:1px solid #ddd;border-radius:.3em;background:#f2f2f2;cursor:pointer}.input_tab{background-color:#a6c7e1;color:#000}.content_fullscreen{position:relative;overflow:auto}#canvas_outer{position:relative;width:100%;display:block}#canvas{background-color:#fff;color:#000}canvas.designer{display:inline-block;overflow:hidden;text-align:left}canvas.designer *{behavior:url(#default#VML)}.designer_tab{background-color:#fff;color:#000;border-collapse:collapse;border:1px solid #aaa;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.designer_tab .header{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.tab_zag{text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_zag_2{background:linear-gradient(#fffa96 0%, #fffa96 39%, #ffe796 40%, #ffe796 100%);text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_field{background:#fff;color:#000;cursor:default}.tab_field:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}.tab_field_3{background-color:#ffe6e6;color:#000;cursor:default}.tab_field_3:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}#designer_hint{white-space:nowrap;position:absolute;background-color:#9f9;color:#000;z-index:3;border:#0c6 solid 1px;display:none}#designer_body #page_content{margin:0}.scroll_tab{overflow:auto;width:100%;height:500px}.designer_Tabs{cursor:default;color:#05b;white-space:nowrap;text-decoration:none;text-indent:3px;font-weight:bold;margin-left:2px;text-align:left;background:linear-gradient(#fff, #dfe5e7 70%, #fff 70%, #fff 100%);border:#ccc solid 1px}.designer_Tabs:hover{cursor:default;color:#05b;background:#fe9;text-indent:3px;font-weight:bold;white-space:nowrap;text-decoration:none;border:#99f solid 1px;text-align:left}.owner{font-weight:normal;color:#888}.option_tab{padding-left:2px;padding-right:2px;width:5px}.select_all{vertical-align:top;padding-left:2px;padding-right:2px;cursor:default;width:1px;color:#000;background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.small_tab{vertical-align:top;background-color:#0064ea;color:#fff;background-image:url("../img/designer/small_tab.png");cursor:default;text-align:center;font-weight:bold;padding-left:2px;padding-right:2px;width:1px;text-decoration:none}.small_tab:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;padding-left:2px;padding-right:2px;text-align:center;font-weight:bold;width:1px;text-decoration:none}.small_tab_pref{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%);text-align:center;width:1px}.small_tab_pref:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;text-align:center;font-weight:bold;width:1px;text-decoration:none}.butt{border:#47a solid 1px;font-weight:bold;background-color:#fff;color:#000;vertical-align:baseline}.L_butt2_1{padding:1px;text-decoration:none;vertical-align:middle;cursor:default}.L_butt2_1:hover{padding:0;border:#09c solid 1px;background:#fe9;color:#000;text-decoration:none;vertical-align:middle;cursor:default}.bor{width:10px;height:10px}.frams1{background:url("../img/designer/1.png") no-repeat right bottom}.frams2{background:url("../img/designer/2.png") no-repeat left bottom}.frams3{background:url("../img/designer/3.png") no-repeat left top}.frams4{background:url("../img/designer/4.png") no-repeat right top}.frams5{background:url("../img/designer/5.png") repeat-x center bottom}.frams6{background:url("../img/designer/6.png") repeat-y left}.frams7{background:url("../img/designer/7.png") repeat-x top}.frams8{background:url("../img/designer/8.png") repeat-y right}#osn_tab{position:absolute;background-color:#fff;color:#000}.designer_header{background-color:#eaeef0;color:#000;text-align:center;font-weight:bold;margin:0;padding:0;background-image:url("../img/designer/top_panel.png");background-position:top;background-repeat:repeat-x;border-right:#999 solid 1px;border-left:#999 solid 1px;height:28px;z-index:101;width:100%;position:fixed}.designer_header a,.designer_header span{display:block;float:left;margin:3px 1px 4px;height:20px;border:1px dotted #fff}.designer_header .M_bord{display:block;float:left;margin:4px;height:20px;width:2px}.designer_header a.first{margin-right:1em}.designer_header a.last{margin-left:1em}a.M_butt_Selected_down_IE,a.M_butt_Selected_down{border:1px solid #c0c0bb;background-color:#9f9;color:#000}a.M_butt_Selected_down_IE:hover,a.M_butt_Selected_down:hover{border:1px solid #09c;background-color:#fe9;color:#000}a.M_butt:hover{border:1px solid #09c;background-color:#fe9;color:#000}#layer_menu{z-index:98;position:relative;float:right;background-color:#eaeef0;border:#999 solid 1px}#layer_upd_relation{position:absolute;left:637px;top:224px;z-index:100}#layer_new_relation,#designer_optionse{position:absolute;left:636px;top:85px;z-index:100;width:153px}#layer_menu_sizer{background-image:url("../img/designer/resize.png");cursor:ew-resize}#layer_menu_sizer .icon{margin:0}.panel{position:fixed;top:60px;right:0;width:350px;max-height:500px;display:none;overflow:auto;padding-top:34px;z-index:102}a.trigger{position:fixed;text-decoration:none;top:60px;right:0;color:#fff;padding:10px 40px 10px 15px;background:#333 url("../img/designer/plus.png") 85% 55% no-repeat;border:1px solid #444;display:block;z-index:102}a.trigger:hover{color:#080808;background:#fff696 url("../img/designer/plus.png") 85% 55% no-repeat;border:1px solid #999}a.active.trigger{background:#222 url("../img/designer/minus.png") 85% 55% no-repeat;z-index:999}a.active.trigger:hover{background:#fff696 url("../img/designer/minus.png") 85% 55% no-repeat}.toggle_container .block{background-color:#dbe4e8;border-top:1px solid #999}.history_table{text-align:center;cursor:pointer;background-color:#dbe4e8}.history_table:hover{background-color:#99c}#ab{min-width:300px}#ab .ui-accordion-content{padding:0}#foreignkeychk{text-align:left;cursor:pointer}.side-menu{float:left;position:fixed;width:auto;height:auto;background:#efefef;border:1px solid gray;overflow:hidden;z-index:50;padding:2px}.side-menu.right{float:right;right:0}.side-menu .hide{display:none}.side-menu a{display:block;float:none;overflow:hidden;line-height:1em}.side-menu img,.side-menu .text{float:left}#name-panel{border-bottom:1px solid gray;text-align:center;background:#efefef;width:100%;font-size:1.2em;padding:5px;font-weight:bold}#container-form{width:100%;position:absolute;left:0}.CodeMirror{height:20rem;direction:ltr;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}#inline_editor_outer .CodeMirror{height:6em}.insertRowTable .CodeMirror{min-height:9em;min-width:24em;border:1px solid #a9a9a9}#pma_console .CodeMirror-gutters{background-color:initial;border:none}span.cm-keyword,span.cm-statement-verb{color:#909}span.cm-variable{color:#000}span.cm-comment{color:olive}span.cm-mysql-string{color:green}span.cm-operator{color:#f0f}span.cm-mysql-word{color:#000}span.cm-builtin{color:red}span.cm-variable-2{color:#f90}span.cm-variable-3{color:blue}span.cm-separator{color:#f0f}span.cm-number{color:teal}.autocomplete-column-name{display:inline-block}.autocomplete-column-hint{display:inline-block;float:right;color:#666;margin-left:1em}.CodeMirror-hints{z-index:1999}.CodeMirror-lint-tooltip{z-index:200;font-family:inherit}.CodeMirror-lint-tooltip code{font-family:monospace;font-weight:bold}.jqplot-target{position:relative;color:#222;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px;background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}table.jqplot-cursor-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:1em;white-space:nowrap;background:rgba(208,208,208,.8);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:#333}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(230,230,230,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(245,245,245,.3)}.icon{margin:0;margin-left:.3em;padding:0 !important;width:16px;height:16px}.icon_fulltext{width:50px;height:19px}.ic_asc_order{background-image:url("../img/asc_order.png")}.ic_b_bookmark{background-image:url("../img/bookmark-plus.svg")}.ic_b_browse,.ic_b_sbrowse{background-image:url("../img/table-browse.svg")}.ic_b_calendar{background-image:url("../img/b_calendar.png")}.ic_b_chart{background-image:url("../img/chart.svg")}.ic_b_close{background-image:url("../img/close.svg")}.ic_b_column_add{background-image:url("../img/col-plus.svg")}.ic_b_comment{background-image:url("../img/comment.svg")}.ic_b_dbstatistics{background-image:url("../img/b_dbstatistics.png")}.ic_b_deltbl{background-image:url("../img/table-minus.svg")}.ic_b_docs{background-image:url("../img/help.svg")}.ic_b_docsql{background-image:url("../img/b_docsql.png")}.ic_b_drop{background-image:url("../img/minus.svg")}.ic_b_edit{background-image:url("../img/edit.svg")}.ic_b_empty{background-image:url("../img/shredder.svg")}.ic_b_engine{background-image:url("../img/database-engine.svg")}.ic_b_event_add{background-image:url("../img/event-plus.svg")}.ic_b_events{background-image:url("../img/event.svg")}.ic_b_export,.ic_b_tblexport{background-image:url("../img/export.svg")}.ic_b_favorite{background-image:url("../img/favorite.svg")}.ic_b_find_replace{background-image:url("../img/search-replace.svg")}.ic_b_firstpage{background-image:url("../img/b_firstpage.png")}.ic_b_ftext{background-image:url("../img/field-index-text.svg")}.ic_b_globe{background-image:url("../img/globe-alt.svg")}.ic_b_group{background-image:url("../img/databases.svg")}.ic_b_help{background-image:url("../img/help-alt.svg")}.ic_b_home{background-image:url("../img/home.svg")}.ic_b_import,.ic_b_tblimport{background-image:url("../img/import.svg")}.ic_b_index{background-image:url("../img/field-index.svg")}.ic_b_index_add{background-image:url("../img/index-plus.svg")}.ic_b_inline_edit{background-image:url("../img/b_inline_edit.png")}.ic_b_insrow{background-image:url("../img/row-plus.svg")}.ic_b_lastpage{background-image:url("../img/b_lastpage.png")}.ic_b_minus{background-image:url("../img/tree-collapse.svg")}.ic_b_more{background-image:url("../img/triangle-down-1.svg")}.ic_b_move{background-image:url("../img/col-move.svg")}.ic_b_newdb{background-image:url("../img/database-plus.svg")}.ic_db_drop{background-image:url("../img/database-minus.svg")}.ic_b_newtbl{background-image:url("../img/b_newtbl.png")}.ic_b_nextpage{background-image:url("../img/b_nextpage.png")}.ic_b_no_favorite{background-image:url("../img/favorite-alt.svg")}.ic_b_pdfdoc{background-image:url("../img/b_pdfdoc.png")}.ic_b_plugin{background-image:url("../img/plugin.svg")}.ic_b_plus{background-image:url("../img/tree-expand.svg")}.ic_b_prevpage{background-image:url("../img/b_prevpage.png")}.ic_b_primary{background-image:url("../img/key-primary.svg")}.ic_b_print{background-image:url("../img/print.svg")}.ic_b_props{background-image:url("../img/table-engine.svg")}.ic_b_relations{background-image:url("../img/designer.svg")}.ic_b_report{background-image:url("../img/report.svg")}.ic_b_rename{background-image:url("../img/b_rename.svg")}.ic_b_routine_add{background-image:url("../img/routine-plus.svg")}.ic_b_routines{background-image:url("../img/routine.svg")}.ic_b_save,.ic_b_saveimage{background-image:url("../img/save.svg")}.ic_b_sdb{background-image:url("../img/b_sdb.png");width:10px;height:10px}.ic_b_search{background-image:url("../img/search.svg")}.ic_b_select{background-image:url("../img/search-across.svg")}.ic_b_snewtbl{background-image:url("../img/b_snewtbl.png")}.ic_b_spatial{background-image:url("../img/field-spatial.svg")}.ic_b_sql{background-image:url("../img/sql.svg")}.ic_b_sqldoc{background-image:url("../img/b_sqldoc.png")}.ic_b_sqlhelp{background-image:url("../img/manual.svg")}.ic_b_table_add{background-image:url("../img/table-plus.svg")}.ic_b_tblanalyse{background-image:url("../img/table-analyse.svg")}.ic_b_tblops{background-image:url("../img/preferences.svg")}.ic_b_tbloptimize{background-image:url("../img/optimize.svg")}.ic_b_tipp{background-image:url("../img/b_tipp.png")}.ic_b_trigger_add{background-image:url("../img/flag-plus.svg")}.ic_b_triggers{background-image:url("../img/flag.svg")}.ic_b_undo{background-image:url("../img/b_undo.png")}.ic_b_unique{background-image:url("../img/field-index-uinique.svg")}.ic_b_usradd{background-image:url("../img/user-plus.svg")}.ic_b_usrdrop{background-image:url("../img/user-minus.svg")}.ic_b_usredit,.ic_b_usrcheck{background-image:url("../img/user.svg")}.ic_b_usrlist{background-image:url("../img/users.svg")}.ic_b_versions{background-image:url("../img/version.svg")}.ic_b_view{background-image:url("../img/b_view.png")}.ic_b_view_add{background-image:url("../img/table-view-plus.svg")}.ic_b_views{background-image:url("../img/table-view.svg")}.ic_b_left{background-image:url("../img/b_left.png")}.ic_b_right{background-image:url("../img/b_right.png")}.ic_bd_browse{background-image:url("../img/bd_browse.png")}.ic_bd_deltbl{background-image:url("../img/bd_deltbl.png")}.ic_bd_drop{background-image:url("../img/bd_drop.png")}.ic_bd_edit{background-image:url("../img/bd_edit.png")}.ic_bd_empty{background-image:url("../img/bd_empty.png")}.ic_bd_export{background-image:url("../img/bd_export.png")}.ic_bd_firstpage{background-image:url("../img/bd_firstpage.png")}.ic_bd_ftext{background-image:url("../img/bd_ftext.png")}.ic_bd_index{background-image:url("../img/bd_index.png")}.ic_bd_insrow{background-image:url("../img/bd_insrow.png")}.ic_bd_lastpage{background-image:url("../img/bd_lastpage.png")}.ic_bd_nextpage{background-image:url("../img/bd_nextpage.png")}.ic_bd_prevpage{background-image:url("../img/bd_prevpage.png")}.ic_bd_primary{background-image:url("../img/key.svg")}.ic_bd_routine_add{background-image:url("../img/bd_routine_add.png")}.ic_bd_sbrowse{background-image:url("../img/bd_sbrowse.png")}.ic_bd_select{background-image:url("../img/bd_select.png")}.ic_bd_spatial{background-image:url("../img/bd_spatial.png")}.ic_bd_unique{background-image:url("../img/bd_unique.png")}.ic_centralColumns{background-image:url("../img/col.svg")}.ic_centralColumns_add{background-image:url("../img/col-plus.svg")}.ic_centralColumns_delete{background-image:url("../img/col-minus.svg")}.ic_col_drop{background-image:url("../img/col_drop.png")}.ic_console{background-image:url("../img/console.svg")}.ic_database,.ic_s_db{background-image:url("../img/database.svg")}.ic_eye{background-image:url("../img/glasses.svg")}.ic_eye_grey{background-image:url("../img/eye_grey.png")}.ic_hide{background-image:url("../img/visibility-hidden.svg")}.ic_item{background-image:url("../img/item.png");width:9px;height:9px}.ic_lightbulb{background-image:url("../img/lightbulb.png")}.ic_lightbulb_off{background-image:url("../img/lightbulb_off.png")}.ic_more{background-image:url("../img/more.png");width:13px}.ic_new_data{background-image:url("../img/new_data.png")}.ic_new_data_hovered{background-image:url("../img/new_data_hovered.png")}.ic_new_data_selected{background-image:url("../img/new_data_selected.png")}.ic_new_data_selected_hovered{background-image:url("../img/new_data_selected_hovered.png")}.ic_new_struct{background-image:url("../img/new_struct.png")}.ic_new_struct_hovered{background-image:url("../img/new_struct_hovered.png")}.ic_new_struct_selected{background-image:url("../img/new_struct_selected.png")}.ic_new_struct_selected_hovered{background-image:url("../img/new_struct_selected_hovered.png")}.ic_normalize{background-image:url("../img/wizard.svg")}.ic_pause{background-image:url("../img/pause.svg")}.ic_php_sym{background-image:url("../img/php_sym.png")}.ic_play{background-image:url("../img/triangle-right-1.svg")}.ic_s_asc{background-image:url("../img/sort-asc.svg")}.ic_s_asci{background-image:url("../img/charset.svg")}.ic_s_attention{background-image:url("../img/s_attention.png")}.ic_s_cancel{background-image:url("../img/s_cancel.png")}.ic_s_cancel2{background-image:url("../img/s_cancel2.png")}.ic_s_cog{background-image:url("../img/gear.svg")}.ic_s_desc{background-image:url("../img/sort-desc.svg")}.ic_s_error{background-image:url("../img/error.svg")}.ic_s_host{background-image:url("../img/host.svg")}.ic_s_info{background-image:url("../img/s_info.png")}.ic_s_lang{background-image:url("../img/language.svg")}.ic_s_link{background-image:url("../img/link.svg")}.ic_s_lock{background-image:url("../img/lock.svg")}.ic_s_unlock{background-image:url("../img/lock-open.svg")}.ic_s_loggoff{background-image:url("../img/sign-out.svg")}.ic_s_notice{background-image:url("../img/notice.svg")}.ic_s_okay{background-image:url("../img/check.svg")}.ic_s_passwd{background-image:url("../img/password.svg")}.ic_s_process{background-image:url("../img/s_process.png")}.ic_s_really{background-image:url("../img/s_really.png");width:11px;height:11px}.ic_s_reload{background-image:url("../img/reload.svg")}.ic_s_replication{background-image:url("../img/replication.svg")}.ic_s_rights{background-image:url("../img/user-props.svg")}.ic_s_sortable{background-image:url("../img/s_sortable.png")}.ic_s_status{background-image:url("../img/server.svg")}.ic_s_success{background-image:url("../img/success.svg")}.ic_s_sync{background-image:url("../img/s_sync.png")}.ic_s_tbl{background-image:url("../img/table.svg")}.ic_s_theme{background-image:url("../img/theme.svg")}.ic_s_top{background-image:url("../img/caret-up-stop.svg")}.ic_s_unlink{background-image:url("../img/link-broken.svg")}.ic_s_vars{background-image:url("../img/database-vars.svg")}.ic_s_views{background-image:url("../img/s_views.png")}.ic_show{background-image:url("../img/visibility.svg")}.ic_window-new{background-image:url("../img/windows.svg")}.ic_ajax_clock_small{background-image:url("../img/ajax_clock_small.gif")}.ic_s_partialtext{background-image:url("../img/s_partialtext.png")}.ic_s_fulltext{background-image:url("../img/s_fulltext.png")}body{text-align:left}@media only screen and (min-width: 768px){.table th.position-sticky{top:96px}}select#fieldsSelect,textarea#sqlquery{height:20rem}.breadcrumb-navbar{padding:.5rem 1.8rem;margin-bottom:0;background-color:#e9ecef}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-left:.5rem}.breadcrumb-navbar .breadcrumb-item .icon{margin:0}@media print{.hide{display:none}body,table,th,td{color:#000;background-color:#fff}a:link{color:#000;text-decoration:none}img{border:0}table,th,td{border:.1em solid #000;background-color:#fff}table{border-collapse:collapse;border-spacing:.2em}thead{border-collapse:collapse;border-spacing:.2em;border:.1em solid #000;font-weight:900}th,td{padding:.2em}thead th{font-weight:bold;background-color:#e5e5e5;border:.1em solid #000}#page_content{position:absolute;left:0;top:0;width:95%;float:none}.sqlOuter{color:#000;background-color:#000}.cDrop,.cEdit,.cList,.cCpy,.cPointer{display:none}table tbody:first-of-type tr:nth-child(odd){background:#fff}table tbody:first-of-type tr:nth-child(odd) th{background:#fff}table tbody:first-of-type tr:nth-child(even){background:#dfdfdf}table tbody:first-of-type tr:nth-child(even) th{background:#dfdfdf}.column_attribute{font-size:100%}} + +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZW1lLmNzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcm9vdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yZWJvb3Quc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy92ZW5kb3IvX3Jmcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JvcmRlci1yYWRpdXMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdHlwZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fbGlzdHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fY29udGFpbmVycy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY29udGFpbmVyLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19icmVha3BvaW50cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19ncmlkLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19ncmlkLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3RhYmxlcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdGFibGUtdmFyaWFudHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fbGFiZWxzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tdGV4dC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLWNvbnRyb2wuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RyYW5zaXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1zZWxlY3Quc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1jaGVjay5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLXJhbmdlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zsb2F0aW5nLWxhYmVscy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19pbnB1dC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fZm9ybXMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYnV0dG9ucy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYnV0dG9ucy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190cmFuc2l0aW9ucy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19kcm9wZG93bi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY2FyZXQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYnV0dG9uLWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX25hdi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXZiYXIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fY2FyZC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hY2NvcmRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JhZGdlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2FsZXJ0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19hbGVydC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Nsb3NlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX21vZGFsLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19iYWNrZHJvcC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19zcGlubmVycy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY2xlYXJmaXguc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19jb2xvcmVkLWxpbmtzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fcmF0aW8uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19wb3NpdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3N0YWNrcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdmlzdWFsbHktaGlkZGVuLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fc3RyZXRjaGVkLWxpbmsuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL190ZXh0LXRydW5jYXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RleHQtdHJ1bmNhdGUuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL192ci5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdXRpbGl0aWVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19hcGkuc2NzcyIsIi4uL3Njc3MvX2NvbW1vbi5zY3NzIiwiLi4vc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCIuLi9zY3NzL19lbnVtLWVkaXRvci5zY3NzIiwiLi4vc2Nzcy9fZ2lzLnNjc3MiLCIuLi9zY3NzL19uYXZpZ2F0aW9uLnNjc3MiLCIuLi9zY3NzL19kZXNpZ25lci5zY3NzIiwiLi4vc2Nzcy9fY29kZW1pcnJvci5zY3NzIiwiLi4vc2Nzcy9fanFwbG90LnNjc3MiLCIuLi9zY3NzL19pY29ucy5zY3NzIiwiLi4vc2Nzcy9fcmVib290LnNjc3MiLCIuLi9zY3NzL190YWJsZXMuc2NzcyIsIi4uL3Njc3MvX2Zvcm1zLnNjc3MiLCIuLi9zY3NzL19icmVhZGNydW1iLnNjc3MiLCIuLi9zY3NzL19wcmludC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1DQUEsa0JBUUksQ0FBQSxvQkFBQSxDQUFBLG9CQUFBLENBQUEsa0JBQUEsQ0FBQSxpQkFBQSxDQUFBLG9CQUFBLENBQUEsb0JBQUEsQ0FBQSxtQkFBQSxDQUFBLGtCQUFBLENBQUEsa0JBQUEsQ0FBQSxnQkFBQSxDQUFBLGtCQUFBLENBQUEsdUJBQUEsQ0FBQSxzQkFJQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxxQkFJQSxDQUFBLHVCQUFBLENBQUEscUJBQUEsQ0FBQSxrQkFBQSxDQUFBLHFCQUFBLENBQUEsb0JBQUEsQ0FBQSxtQkFBQSxDQUFBLGtCQUFBLENBQUEsOEJBSUEsQ0FBQSxpQ0FBQSxDQUFBLDZCQUFBLENBQUEsMkJBQUEsQ0FBQSw2QkFBQSxDQUFBLDRCQUFBLENBQUEsNkJBQUEsQ0FBQSx5QkFBQSxDQUFBLDZCQUdGLENBQUEsdUJBQ0EsQ0FBQSwrQkFDQSxDQUFBLCtCQUNBLENBQUEscU5BTUEsQ0FBQSx5R0FDQSxDQUFBLHlGQUNBLENBQUEsZ0RBUUEsQ0FBQSx5QkFDQSxDQUFBLDBCQUNBLENBQUEsMEJBQ0EsQ0FBQSx3QkFDQSxDQUFBLGtCQUlBLENBQUEscUJDbkNGLHFCQUdFLENBQUEsOENBZUUsTUFOSixzQkFPTSxDQUFBLENBQUEsS0FjTixRQUNFLENBQUEsc0NBQ0EsQ0FBQSxr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dUJBT0ksQ0FBQSxLQVBKLHNCQU9JLENBQUEsS0FQSix3QkFPSSxDQUFBLEtBUEosc0JBT0ksQ0FBQSxRQVBKLHNCQU9JLENBQUEsTUFQSix5QkFPSSxDQUFBLHdCQUFBLENBQUEsTUFQSiw4QkFPSSxDQUFBLDZCQUFBLENBQUEsTUFQSiw2QkFPSSxDQUFBLDRCQUFBLENBQUEsTUFQSiw0QkFPSSxDQUFBLDJCQUFBLENBQUEsTUFQSiw4QkFPSSxDQUFBLDZCQUFBLENBQUEsTUFQSiw0QkFPSSxDQUFBLDJCQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLDJCQUFBLENBQUEsTUFQSix1QkFPSSxDQUFBLDBCQUFBLENBQUEsTUFQSiw0QkFPSSxDQUFBLCtCQUFBLENBQUEsTUFQSiwyQkFPSSxDQUFBLDhCQUFBLENBQUEsTUFQSiwwQkFPSSxDQUFBLDZCQUFBLENBQUEsTUFQSiw0QkFPSSxDQUFBLCtCQUFBLENBQUEsTUFQSiwwQkFPSSxDQUFBLDZCQUFBLENBQUEsU0FQSiwwQkFPSSxDQUFBLDZCQUFBLENBQUEsTUFQSix1QkFPSSxDQUFBLE1BUEosNEJBT0ksQ0FBQSxNQVBKLDJCQU9JLENBQUEsTUFQSiwwQkFPSSxDQUFBLE1BUEosNEJBT0ksQ0FBQSxNQVBKLDBCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLE1BUEoseUJBT0ksQ0FBQSxNQVBKLDhCQU9JLENBQUEsTUFQSiw2QkFPSSxDQUFBLE1BUEosNEJBT0ksQ0FBQSxNQVBKLDhCQU9JLENBQUEsTUFQSiw0QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxNQVBKLDBCQU9JLENBQUEsTUFQSiwrQkFPSSxDQUFBLE1BUEosOEJBT0ksQ0FBQSxNQVBKLDZCQU9JLENBQUEsTUFQSiwrQkFPSSxDQUFBLE1BUEosNkJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsTUFQSix3QkFPSSxDQUFBLE1BUEosNkJBT0ksQ0FBQSxNQVBKLDRCQU9JLENBQUEsTUFQSiwyQkFPSSxDQUFBLE1BUEosNkJBT0ksQ0FBQSxNQVBKLDJCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFB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QSxDQUFBLFlBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFlBUEosMEJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxZQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsWUFQSiw2QkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFlBUEosMkJBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxTQVBKLDBCQU9JLENBQUEseUJBQUEsQ0FBQSxTQVBKLCtCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsNEJBQUEsQ0FBQSxTQVBKLCtCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsNEJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FB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 */ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/arrow_ltr.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/arrow_ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..cd79ab42f04a594dbf727e34795009f3e99fb62e GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2%@N{M0&tl#Zv1V@L&KvP94Wd(mDdM=eR# z<`9#vqR0OhJFjv(Fu^eA%7(zh9xctRJxmPTewN2A?=GnX>SOS9^>bP0l+XkKYlIuC literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/asc_order.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/asc_order.png new file mode 100644 index 0000000000000000000000000000000000000000..51ce21b13013b39af479676247bfe00b6b15c117 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6B0XIkLn;`PfA}-->9Vr_d;e?y z&;PIfcmF&8+#L#1k%VhMhepI2+Gz9y5hv5nMiOp4 zVrA|7&l|hLe7M8jcjNuN-*iMonN7OOkGXL7y#r#!9b#a^^%G0~2C!hqhCu@m#XRmk zocf1>6ykV4Y3eaH&^1H&2hbuDLsggucXv*c{S3s#vn2zBTDDnvo+YY=8v1*Ds`~E? zyLKng;hvp-2DTt}^)k>CQ@@@RY8__f@uOl|Hf@<9sftEm9<{f_NPhuX+5p$0mYw8a z1u@iPxDROI^!PCq6H%?otlg;GnLy>DT0~}As1hWQG-!ZuVChlwj4AZi{VUy|kAE}g zx|kU$E4}~-GBthi=9MU~o4bZuwHr-sPl?iyMceQV0J)lwG_0Jh2}DEX>q%xH&=-Sf z1Q#}@e9Dq!!)f^V_qOfDJ%Jz-iv?pnhQe(?a<^gLI&)1`f*qH3Uxr$+g?jet@R9IR r1mPA|!eicsaZ|Xt8{qgbl9M+8KW(5u(o^eV00000NkvXXu0mjff40fa literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_docsql.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_docsql.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6f0561dca94b36c8a4f91207b150e7e12120ae GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`KAtX)Ar*{U&mZJuFyLT0_~m}1 zZLI&Z`O4i&T)&0bY^5j1F#h0G67=$C^DtV%yyxS~KYR=oXPF-S|70oneEP)f;jB-jRL(I`mqi{UYyMfDpxn_Yz35%3-%(-yfM#$!lb!k1_ ztdQ^?aT-e^2`eF|&*-C;Ug5;I$VU5mzOQJfhGCXIt) syCi(X=Nq?VMP}S3za+k;q#D=!0TI0HjY>%;xBvhE07*qoM6N<$f_;F23IG5A literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_lastpage.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_lastpage.png new file mode 100644 index 0000000000000000000000000000000000000000..1b4ac09269d25ef90a81b71132eb839209caaf74 GIT binary patch literal 661 zcmV;G0&4wi?0Qf_F ztf&z(2@Mn){X_h0;(veN{~hcpRJ;7THshKrVD@}!ch)yH%XJM+vg3V=^U}+1^ODQT z4Bp}0-wX`6*9CicU0ri$Yc#1r&lXXtR4Jq~1%zS>-0vG&k3Z^M$Gc<<1G*A!Xz9{( z`4V`tg)$Vq2w5ndFM~(V7T|dESwC{WjV86A0qbJgj7*rPBa%VvO94^!o6r`@Af)6C zlSj|pt#i*tXON|V>6+7TX4*Unt$<;h?1Ts-tmZLf!%H*oEI5NmQ$V zFOdV&CEOX!f*QQ$DL552wpgy>`RgXEv)wbAShL_lV#YK3n^sxN8IvH$ak6H@Y$yYC zi0Jzdoo=0AYo9^ZSS0C2-MZV4?Rr$C3lUJ)b+^i)vs`SaXwC#shmDc1p)vm+Zf5tnz;!rm080Gd3K4VBT##<&-Qo vdGCI+ymj9Z=dyj*%wx?hUx$&ID9+9R<30#qo+be_00000NkvXXu0mjfj_No+ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_left.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_left.png new file mode 100644 index 0000000000000000000000000000000000000000..db427f96166d9a46d64d6bafb314bbd33bda6b20 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6EInNuLn;`PfA}*@TExKl=lJ>u z_I|8;9Zr1MFTR|q!$gi%A=8FS;nI{D4F$}s`y5)BS1NXLu3X8$Fze`B+e|UxW}qPq Mp00i_>zopr0Le8XGynhq literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_tipp.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_tipp.png new file mode 100644 index 0000000000000000000000000000000000000000..0cead20e6a38b86fdfdbcbeda2d34ae88d058ea3 GIT binary patch literal 696 zcmV;p0!RIcP)(r+H0`M7>%xfuC=IBoq zKa&}^*J!Ko9$n+hQ?)eu=3czqGr z$^d9Wx1i2*euX;XK-bR%RJBiYbE!>=RTT@tA|q6ha6SY&6TCT@kVw82K(wl0Ot}e# z%@|F6#KBgQz+CX~5-ay32b2)lQgT;7fL~sJDOhwu4fs7>3#vic=bR~Ey2|S$+fhhoQ z&INDGB!Lw0`Z#dL5U>sR!6B(apsRMH?p8|( zR1^#uZYVg}fmL|yX!qF;RN)7E)VeKInQ|SV_gME%K$=OIunTJ2snEqfMZt+qoXlz6 z;!k%V(Ga|^Z-wKk+L~wM!9+}fP%{C7aum4OS*SSL64|Hw809YO$A4>y5|NJQrrbNV z#%g=-FdkkWjH@U5VgL4(STLrW7-4f_tm(cbjiUZ{mmijxWQ-Z7zpWO?p?U&3lfR4bNcPn+C*idV;KPNrvaz%l32C?0000I>=4KpXJaAIbrw=uKl$uMB{@%h9%KZgIZQEd_x zOKgd=+dM^$#wHOlzd0R=!PZedqWfB#6Q3P1B~t&6wVfMRE#udM@1&s~%b*z?Qn`--bQn?lTSb5M00000NkvXXu0mjfUl?a5QbHNE4VtOVK<--t_D>RW{%n3Fmo~#W@gSCFdc&!!uhiEf-BbdFFSusYT}76 zbv=B2t2zIhjEH+7crf?@0Z1_??`@f-Q7dtH&mNe&t9gbrrl)K}Mu_ zlU_M%*q~QV$$l&FpWMx<2oQ;ioeJ)l z49FCA=_pnQT1=ZcZPO0w{EEwY#1Be_49L~H$!tDh2lac@$5)&%ujo-xu*4n4%$ObZ wf6Lk*%#BUn9S?VgJMZoqoBn@UKZifM0UsJsu){@e!2kdN07*qoM6N<$f?b)mm;e9( literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_spatial.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_spatial.png new file mode 100644 index 0000000000000000000000000000000000000000..ea16fedf158f29f7231aa26fbca9eab217ff2508 GIT binary patch literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAm`Z~Df*BafCZDwc^455|IEGX( zCLLhOl$4ZgFnZ?DoG8KZ_(xnBqvI2e7s4$LhHf*N#MX2$yT&iz>Ie|vUCJN8me;wa z?XTsJpE3J_nC_LV4TzondKM2`b;bt&y&HTFxUh!DH3~2s5I(TuOoEvC`Mkmz3+^R$ zy>~V~rqjw(*x|yTx%Mlolda(0CEwX=8N(O(8mVo+uk`fq&*Y;HU#>)Lei*aEFl~d2 p-r+t+-;h%W-e>GEQZ4=Yn)&$R);oGXtqnoG@pScbS?83{1OU~gT*m+a literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col.svg new file mode 100644 index 0000000..9452b4a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_drop.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_drop.png new file mode 100644 index 0000000000000000000000000000000000000000..9d84943ec51c68148b56ccf2aad4888ad6824b55 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6%sgEjLn;`PfA}--NwMB|Izg0S zWn2o!)W+b12DRRW3&hv4co-*yGKjQ!C2Kh_u%rjHsxWdetm%AfTXEonIM4(JPgg&e IbxsLQ0LU61I{*Lx literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_pointer.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_pointer.png new file mode 100644 index 0000000000000000000000000000000000000000..00d78c7ca58010d3279c5a99ed79f564d09e252a GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^AhrkxkYJeD`nd~8F_i@Q1v4;|O+IS@fl|rhitNc)eNu3djIYS3j3^P66C`3)z;5s8ILYAMwr%KrIoaCKOkSU(7elF{r5}E)d CiWl|( literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/console.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/console.svg new file mode 100644 index 0000000..2819196 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/console.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-minus.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-minus.svg new file mode 100644 index 0000000..1adb49e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-minus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-plus.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-plus.svg new file mode 100644 index 0000000..f13bc56 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/1.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/1.png new file mode 100644 index 0000000000000000000000000000000000000000..a9da1dc16158f4f060aef8414a97d97c1c9c35db GIT binary patch literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4DSEm%hEy;nFOZKY`;%yDbZq$p nd!u6kERz?6C^}tK2;pF`*}Q3GNkjQhpkfA3S3j3^P6f4g?PF+hEy;nH#DXmmk(q9SRXS( zjY}}$VB_qwE}AhFAHswgTR9A}pD&%a%u?DcQR@iHABQ)gwv{*IQqD9mYcOn77f5F= nWR`f$$mAiVl-Sf_!ok2`>oJSFaAu1a(0m3@S3j3^P6f4sd~CNhEy;nN0j|}SfBLaLr{cm r<;}Px17-meflf)K&LccbM-muH1D;RRIq~{7Py>UftDnm{r-UW|H!d57 literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/Field_small.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/Field_small.png new file mode 100644 index 0000000000000000000000000000000000000000..c396eb3b7fd21e79dc2019a129783b3928b8694c GIT binary patch literal 240 zcmVe>W1)PfZo;&yd{{R2~*IvK=AIQg4+%##@{|Os5 z{NMBM-~RW4RfB*h3`|#m^-ouCgZQ|qqPnkX) zq|h9Q1z>9V*X`c@Kk?|%|Jk>1|Bu+R<$pm@5lE3WNFloC6s9d)_}?ix`G0A7IZTlS q5X)oplfv4yYY8brCg0000n literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/and_icon.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/and_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2ecce01a25c5739a2be05a82e84b81468b493161 GIT binary patch literal 715 zcmV;+0yO=JP))%R;`@ zfGa3jud;f!E|D%bWLxYf(AG9GQmOX2uGfz14NY+f|sdawmkM7U>H~F24 z_XmH*U2d`oBdj<88dx>GZTXrVkJ_4yJEb=IgPvPqLY+Uq{*Eu7`iNmvrSDZ_69!?$ z5m%!*ZnZ;J&XyhMyZ_;ab$ruc>Q?yaxgYuS-QTEv|2v`Glua1Q2@pqIJGpdn@8#A? zWBfKD0h$PV2L63>OnS+XjZVz*!=qJ7YZpOjLZdLA&2np}`7L&JdP!%4d_F*#SuEWl zVRuk&o4;Qlk}8IHogt$}K;zRksdNV&Gs5O`0pe;)L&kA&bf2U(AeZUW_;|uhI-pP* z;QlvYwJoRo`?ilY?UQl_2rG`Q!FJpJ_etN|HI<3TCPLJ}@Y~Bdc0V^3w{QtO1vWf) zV}U(&Yq>2iy=wS+OkiUXhljN!KX zukYOZ)n;EQ002ovPDHLkV1o7DU1b0O literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bord.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bord.png new file mode 100644 index 0000000000000000000000000000000000000000..0b3191de9bc9c773e48562e29347e9e4730f65cb GIT binary patch literal 75 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Ea0U|e_vV07rggjjwLn;`PcN9E6_y7O@mu`#< Y7GEO-uU@FVdQ&MBb@0G_lKod5s; literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bottom.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..19cbbcdc6b984806e8292c8b38fc040eb614d972 GIT binary patch literal 646 zcmV;10(t$3P)LAX6na$!B8$Zho#uUTG7qye;7=t!lxmuquq-#l*&lQajyq=YPne zdYdXSNt&Z&h|8)&c5xF=V{V72ev)6 z-ZKx5k_jEGmt^76>tc1!LJc$QvmgA5^a*bF#t0k2I5&0WoJLh1lI6z?5v@ZQOT zW!HX}MrL-vod%`nSlFS|1*Te;r#0|ypOKo$tY|BLBB=l8FOQ3Zs4r#cA^fY*lC}PwNS#+@eeGF zA-MsX{k}}r_n-Yt?L-~mxG1uA+Rk{)KbFQrza1Aw*3mNg%;YjTv<&J1Dq5;DDh)bK gIsn=;zRXU^H}wl_D^d?g6951J07*qoM6N<$g4BvO!~g&Q literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/downarrow1.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/downarrow1.png new file mode 100644 index 0000000000000000000000000000000000000000..a2d095417306aad6d4b9eacd433dc2163d751cc5 GIT binary patch literal 671 zcmV;Q0$}}#P)79~t+mK}|r7L?LloMd8V5lKEDQ+hD+ytr|$?TObNcND~Kt zKPKm%wXZ6yr6@E$W!PF9uD;KP#hr(Y>_Wlrv;sVfNW+9}JUArE-9z!XZzZspMxxNT zl)!@?Bp9+_bmj@(f5%23xkY=% z%z*FWGco&w4`a6HpyxUWK-pq9dMKW(E(_>CaHSQqk2!Gokq@L4OCfb;z*BF5@UsvU zrH25O^T3{p$7}xqQfQ@o&IWHT!orJ13=(Z90l*-CJonuIA)CDdZwCGYqza%z8M>ti zL$?-T(ItYGtr&ig!PJg7e<)dF{5Fcqj16A_yN9o}Kylb7c<0@We_$z=0`{NU$`!A# z@Uba7i+njXmxM-W!Vem-`hrdH>E|8>)7kUbcWNUE`C%UIzqtp?VOi?IJ?J70jnHzt z)!22@j@`E$xc<(I&qjbM82 zJvTawmPs?K3XF-CK@~uurJPYT=rn&06ak3AM&f|aT?Y?}UVR6|088pvft;!?T>nta< zPOLBbuxWP{pVgomTz|IDj`zYzk1f+K!tx+ZoO6A-AFM~}>~CJ?5o5hkcmKGSc;2D# psQUj{Q=b1tTlTuj;qXA{M4cPW-;E`)AR1z%h#!jit9TPRd;)f+aL)h$ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/grid.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/grid.png new file mode 100644 index 0000000000000000000000000000000000000000..f581a68d75ac6f2fd4f20534ca3881d0d97ac1d7 GIT binary patch literal 602 zcmV-g0;T~M z@CwU9czm9ugJN>9{%SO#Nkg=^JJ$eoJ;am!@=AwuKo$+^ol{Dcx}$$4<{XHG!uadF zAP7yX!c0!h`98;r8s2V^0%}KX zisodjx*U%U*ArO(52;Wev!{s0pzVNK1P(I1*(L#W7^++mRXVvg4c-9^+X==d2J0W` zs{ok+{FHHfi!g3qnWSJF3bSM66z!gYrEw^wfx^qaN{dsla3m0iAI0Lx zjkUe|8WhtvlYD1~H_3l7_W}PhlV?Z&(3IkReVAQ&ApqOC+S)48) zk51UH=I=KwDy+6FR{N>PG8>$GA;PmXe>UAu3c#@S5;!Ks-AcIAz7SYi6h5u5ZaewP83 zoV3A=BO*-QpV{0?&WPxv80IKq63u-lu4%>kFi&g6-)yFgP5RDn`3jpa*BO;uG7Pm-QP&~yX~~p2p*GmMzA6p9s?%; on-=>FTLWJc9{}%+j#(=0KagZm%g0{>7ytkO07*qoM6N<$f&_>m!2kdN literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/or_icon.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/or_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..75be472bd77d51dd2bd075a3a40639526647c819 GIT binary patch literal 549 zcmV+=0^0qFP)nc4RQc9UhnZjr8ClDR1R8(`0$8 z3yK{X3@jb`OtooY_g(#3$eY0nbkvGx^xlB%(egLWbMdcVCm2`xgF=LyR-&1 zQF>G>rN^}t#q{KsN>9z_Cz>pSfu%#&1KV5 zez)UwpMW$kq{QNg600JLZ!m2^_^cfn3@jbTMFj!zT!vfD1M?g z!m}e23@jZ}!LM?ss_w({nPsFi?WJ4&r2B(WmOs-$WH7KMruZMzj85+BnVIF154Y74 n!m}fT0W9eNQ{vCr6*K<w;+J)z{C))jZp2t! z-rzsilNufZE}t+#t&Uw<#VjnNKrsM(J@?VQf-{%WcOU<_dDp9F2>4yI)avv@HyB1}#vitOg^%C1 zob6@h(KN#uBi9aREX`_v`zQRWQ4H`f%{cPQ8lxLeCT{CuW_EG1;iJ^iiy5PrH{MzJ zC;Y6IZ*ls^8K0dK%%A2R&sX-dN`HjijJ(y?=l=;mtm2v-K7-AxF?$pSmqhCns_Z<4 zZQZTKDZ}RyhR*<*FmwiO&gqptC}UsAr=QQJoJuDiPsSfg!0wB!<*;seY;cc8@2(V} woj?-E2KkwIFl9rFW3ejGwLlWcW*B$?09h>AgB~g6v;Y7A07*qoM6N<$f~92uZU6uP literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/pdf.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..616060a23b85ad110c833f61e02192a1edb80133 GIT binary patch literal 798 zcmV+(1L6FMP)!_jU8h zjJHiXo;)jf7VP2IESJ`8G8mZKl>^T|uMc9W5-gq^9n)O=7D2>o7PE}^O90^Tqi&Uo#$*X}t3e9e6N4&C|0H!#sY%|`D67jxSJ zEhN!{>jW{z*7)d}<>=enCfP`9B0_sSf^Q7spFSJ-;X6+IDCnf2sGE+eK_&*5c-ST% z0e2}9jIHv~IL1O;JsZ~f!2ABdn~ns0Xx9AK*+7Hu{0Gs(;09!(C`ay5^OW52qQt!H4p=3s^~m{xMJfaT`gPi$0qTCh zPyU;H9o9Un#tPvCRy6@+^#ZvAK+`Nv0S%&e#NH7_pPcpC*d}ilWwdcm8BjhXLUcVJ z{^dLbSMiY0BtTBL5ZPTqcoZ=3XTW4*R8-W{X9cI$SZ{}x9?*_q4P#uSHZu@XPJw?h z8383^eLk{^3eQ{uzHpf%8M~x>8XX;d$5}xD54MjJe{xLQBF9t_k=MaMaw83KwN%8` z90@Vi6qv+r;Z2K4!jHzW-wSY*><{S}aLI zHV?3lc%1RT+ugUp%MC@mAm)}r&-anpbYu_k;> zQQ~*96fRI3h5OMa?7yu5b3FEe;XB%vCG6I5b|Fqa(&F^PA`rn)2sH4}T{X@;(c;KG z4NgDN;qFHx7M=5;%L;%qvjm-^Zci>t7(RG;F}7S$;?`RYi1=Iwc3oG2!s+{Yc$Z?p zH;%plNXVO~M;GD!Wn~E?`Yuso+CdG@J~M*28STM{O)hM@qQmbTdKN<0l>na+b`{=R zQA$XUmOD#<{_6seAGUySc><6e@nPalAB+|^erEL*4|=W!=xuh3x)N1NNI!rsW#IY% z25t!8QKARm&>F1xotek&puWtdI7Wo8VV4rpcVd3Pw!teD5biU9!kuUv+}eQ?ZI)nr5B6 sz73Q#K(PsmfcW@$IiMPDkh-A<01kt1YO~FRumAu607*qoM6N<$g1mKIs{jB1 literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/rightarrow2.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/rightarrow2.png new file mode 100644 index 0000000000000000000000000000000000000000..76f2fe08bea2decf6e25bbcc9b6d0653e6a470f5 GIT binary patch literal 666 zcmV;L0%iS)P)j5QP5*H592MHi>kxxso|1j9r_C$(xcOnPY@V8t}^57GdqlqQsfs^&@~BXd-;HmBn{kT3moXKc(}qF(0{-(6AXu~n0MTUC8zBW4(21ySd*sy6bal2EN8$T ziU+GafHbtyIYtcHP{|dMUhNYW#$bKcf@Tvv1Fr>o0BHlLDML0^V#uaSgr&nLEFz;C zgXlXZ)|A50e(S^@K$<1C0Xv4RGD2~nrWreK=hHpzd?^N5g1MaTNuY1#iWe8zzb(Da zAzP;;fnLbwobDrf($bubHF#H+1(lhdj#e!rjhNO;ED1BN5xL zS+L`}^*7NodM8zX$s8HDV;K9Vv9C?xP+BM2fL^mh3#M&~hGBma33T0SR%jumNs;-6 zd4WCK z \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/field-index-text.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/field-index-text.svg new file mode 100644 index 0000000..c635877 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/field-index-text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag-plus.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag-plus.svg new file mode 100644 index 0000000..bd7fe7e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag.svg new file mode 100644 index 0000000..e7f39a6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/lightbulb.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/lightbulb.png new file mode 100644 index 0000000000000000000000000000000000000000..0cead20e6a38b86fdfdbcbeda2d34ae88d058ea3 GIT binary patch literal 696 zcmV;p0!RIcP)(r+H0`M7>%xfuC=IBoq zKa&}^*J!Ko9$n+hQ?)eu=3czqGr z$^d9Wx1i2*euX;XK-bR%RJBiYbE!>=RTT@tA|q6ha6SY&6TCT@kVw82K(wl0Ot}e# z%@|F6#KBgQz+CX~5-ay32b2)lQgT;7fL~sJDOhwu4fs7>3#vic=bR~Ey2|S$+fhhoQ z&INDGB!Lw0`Z#dL5U>sR!6B(apsRMH?p8|( zR1^#uZYVg}fmL|yX!qF;RN)7E)VeKInQ|SV_gME%K$=OIunTJ2snEqfMZt+qoXlz6 z;!k%V(Ga|^Z-wKk+L~wM!9+}fP%{C7aum4OS*SSL64|Hw809YO$A4>y5|NJQrrbNV z#%g=-FdkkWjH@U5VgL4(STLrW7-4f_ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_data.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_data.png new file mode 100644 index 0000000000000000000000000000000000000000..c173bc0343f01226364682225e578d0b21c2cba7 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}cz{ocE4wm--#UpiszQx|%_^ zOfYJ)i_szmgSia)Ga1@9mg`JrFyFv1ui{t>(25LC7srqa#!~-gMixT>o7TTpc;x+{=G{wG z1D)reB_G5!{t$K+-k|$a>_JJ_ibrQ--JkXNCg=X&Q`4i|sle*2e&x6j&`t(VS3j3^ HP6mItpFF8027}86uJNzdesp|Nr>z@7=1f$N(JAh>_&G zz`9jpvj7;TA~Nv+Bc=cr@!jConW3K%BhUaH!DeyS03WkNQse+3-T)x2GeYVBBEbL~ z>;NL;E6R%i0041GL_t(|0cDLv0)s#lLvhc?-C^#3#d<250R}Bw=qqkQS r6)R_-pv#Aif;t_y%|hO4Zo(f|KLZB7)|{YS00000NkvXXu0mjftXtnqGMNFT?uHlk{|7-TDV|mZz(q%Q~loCIAUhMcM!W literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_struct_selected_hovered.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_struct_selected_hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..9a82bc42237d5a048c5ac0ecf337f8d00a8a86a6 GIT binary patch literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAx;$~es$)Tp(PNcA4p_($rZza~)m3 u@#HVL \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/pma_logo2.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/pma_logo2.png new file mode 100644 index 0000000000000000000000000000000000000000..30f22de643e8fd97dfa044fd983760471046463c GIT binary patch literal 1366 zcmV-c1*!UpP)yJ`gYN%src?JdqU}=j~V3*plme0k$ z=aygmZ4P#SqCY`ETVHEzbd%(qZQ!GNFE1-0A|iW&nfP=Y92^$gW+7~Fh4p$VRb!r` zW?Iv}u{=FQO<9XgRe6}3s@Ixxj+3XLqppgMovN&~T^IK>00001bW%=J06^y0W&i*L zL`g(JRCoc@&IJL0KnwuDclQmae@-&sa0!n50i}!!sg%;%C?y4F^tB2XRy!Y}cPZu= zgZEBJe&|zbBPTFnosSt1bJq{!1b_fJ24}>9&b+J}DP^G;Eer(V-)p!eP1CT42M${7 z?EPQtU!a=G*_;ouACo!GN#*KV7asGFK?{H^m~c@DBy{cK*U{(W-2TjVoI_atUT8v? zqXfI5Ktt0+5_Bfr{Qds$C{_*5lh1Zcd2|5Fwdv_bHpw+|kVR(b%zScmpW>r0k8b$^9l{}a?baDvNh(B-kf8_7ePPk&I&g+5c-e7)T zn~do`K+`k;^q~g8XO&&ovqOBr+ShAZs*@f$SF*A{o$8GH?bDU!&9#-X%Yg*Y$bbTL ze$z-9NN57qy$QJIwmL&yrx!zMQop~x7drlL#@ZI<_)d{(K#(ASsx!3?YB{Vpw_eLx zss-WpArY+0ct6aw>AJ$$U?3d@kjS&u3j~n>vFeNLDH8FCH8W9Uym%~@>;lO`F(1?vO(`Ex*a^mgsTrBCUqP7IoXAivu!!* zxiQ>%;YgjaAITEUxtum~j6lir3f@nLM00}k;rMG0O?X@ELVne%M6gvpY z8c~2z-r|t+iyo_|#e-1_nR8F4efyJe2J)=-eVFFCyXS6J3CK{ETNx_7!b2cNf=QBO zNM+&l%j$J6nLRMf)%|*&=V@x1VHlcbn&w3Ez*6!lHSU6YV&q-upkx;rvoH#W<1oGY zs5R9!#kFCvAyxZe$n(5Eesl?G{&nuIw7IV{@qbp$MuLo*xgcW82no z9vsrj*T#arNm$Kj-cKD~>SE`?W?~;Zi$A)L}3j^c=b7t(?Nn|5L*J Y1x388mv;+YtN;K207*qoM6N<$f*`7uUjP6A literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/replication.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/replication.svg new file mode 100644 index 0000000..7bcafaf --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/replication.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine-plus.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine-plus.svg new file mode 100644 index 0000000..c0e13e8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine-plus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine.svg new file mode 100644 index 0000000..a270db0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/s_really.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/s_really.png new file mode 100644 index 0000000000000000000000000000000000000000..e48c9cd4830543e151c6c86035f8a5c6ff640750 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHY$ZW{!9W@a@|Lkr1X8A+E{-7; zjL8iR|8Fn^$SBsfH8RRJ9=*8q;jTcDgFiEbW@rg;bW6^-l(Nb}VbWOz8M&6jA`E6y V8@BcETZMrP@^tlcS?83{1OSY1Bf \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/search-replace.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/search-replace.svg new file mode 100644 index 0000000..79c63a0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/search-replace.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/table.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/table.svg new file mode 100644 index 0000000..0aed481 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/tree-collapse.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/tree-collapse.svg new file mode 100644 index 0000000..8243f88 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/tree-collapse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/triangle-right-1.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/triangle-right-1.svg new file mode 100644 index 0000000..d53f9c8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/triangle-right-1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/user-props.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/user-props.svg new file mode 100644 index 0000000..a8483bc --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/user-props.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/version.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/version.svg new file mode 100644 index 0000000..a59e9bf --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/version.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/vertical_line.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/vertical_line.png new file mode 100644 index 0000000000000000000000000000000000000000..a88a7c7bd423395ebd76c118422e80b0cf362075 GIT binary patch literal 67 zcmeAS@N?(olHy`uVBq!ia0vp^j6lo=A{ex?PtE~ST%InDAsn*F4onOTJPeHP$_*7D NSx;9#mvv4FO#n)Z3pW4& literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/visibility-hidden.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/visibility-hidden.svg new file mode 100644 index 0000000..a1e12f7 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/visibility-hidden.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..81e2065be481046a57398740018369da5c11911f GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq#Qh5978NlCs$2Be&m2bmz&_! zi~U?`Zt`kvp*}s;GbQv54C_*p{v11U;^2`JoM{X@`yC%Cu(tZ}99pbs*45$2AlSt3 TqMGooA7rMdtDnm{r-UW|?OP@T literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png new file mode 100644 index 0000000000000000000000000000000000000000..ae3ccae06f39912982e6b9f0761f53e01802749f GIT binary patch literal 122 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 fW*<4S8qOByh_EuQ+FO*FdEfazp8^Y{ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-icons_cd0a0a_256x240.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-icons_cd0a0a_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea8a5a22342fb51b2baf7a47424ce3303e102b4 GIT binary patch literal 3765 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 hIX| .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #d3d3d3; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #d3d3d3; + background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #999999; + background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #212121; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #aaaaaa; + background-color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; + color: #363636; +} +.ui-state-checked { + border: 1px solid #fcefa1; + background: #fbf9ee; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cd0a0a_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_888888_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: -8px -8px 8px #aaaaaa; + box-shadow: -8px -8px 8px #aaaaaa; +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/css/mono-theme.rtl.css b/Sources/php_script/script/phpMyAdmin/themes/metro/css/mono-theme.rtl.css new file mode 100644 index 0000000..970d04a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/metro/css/mono-theme.rtl.css @@ -0,0 +1,2 @@ +@font-face{font-family:"Open Sans";src:local("☺"),local("Open Sans"),local("OpenSans");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Light";src:local("☺"),local("Open Sans Light"),local("OpenSans-Light");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Bold";src:local("☺"),local("Open Sans Bold"),local("OpenSans-Bold");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Extrabold";src:local("☺"),local("Open Sans Extrabold"),local("OpenSans-Extrabold");font-weight:normal;font-style:normal}:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #666;--bs-secondary: #ccc;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 102, 102, 102;--bs-secondary-rgb: 204, 204, 204;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 68, 68, 68;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: "Consolas", "Lucida Grande", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: Open Sans, Segoe UI, sans-serif;--bs-body-font-size: 0.6875rem;--bs-body-font-weight: 400;--bs-body-line-height: 1;--bs-body-color: #444;--bs-body-bg: #fff}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:normal;line-height:1.2}h1,.h1{font-size:3em}h2,.h2{font-size:3.6em}h3,.h3{font-size:1rem}h4,.h4{font-size:1.03125rem}h5,.h5{font-size:0.859375rem}h6,.h6{font-size:0.6875rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#666;text-decoration:none}a:hover{color:#666;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr ;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:0.859375rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-right:0;list-style:none}.list-inline{padding-right:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:0.859375rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-left:var(--bs-gutter-x, 0.75rem);padding-right:var(--bs-gutter-x, 0.75rem);margin-left:auto;margin-right:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-left:calc(-0.5*var(--bs-gutter-x));margin-right:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #444;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #444;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #000;--bs-table-hover-bg: #eee;width:100%;margin-bottom:1rem;color:#444;vertical-align:top;border-color:#ddd}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:0;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:0 solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:0 0}.table-bordered>:not(caption)>*>*{border-width:0 0}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(even)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #e0e0e0;--bs-table-striped-bg: #d5d5d5;--bs-table-striped-color: #000;--bs-table-active-bg: #cacaca;--bs-table-active-color: #000;--bs-table-hover-bg: #cfcfcf;--bs-table-hover-color: #000;color:#000;border-color:#cacaca}.table-secondary{--bs-table-bg: whitesmoke;--bs-table-striped-bg: #e9e9e9;--bs-table-striped-color: #000;--bs-table-active-bg: #dddddd;--bs-table-active-color: #000;--bs-table-hover-bg: #e3e3e3;--bs-table-hover-color: #000;color:#000;border-color:#ddd}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:0.859375rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.6015625rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:0.6875rem;font-weight:400;line-height:1;color:#444;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#444;background-color:#fff;border-color:#b3b3b3;outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.form-control::-webkit-date-and-time-value{height:1em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1;color:#444;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1em + 1rem + 2px);padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1em;border-radius:0}.form-control-color::-webkit-color-swatch{height:1em;border-radius:0}.form-select{display:block;width:100%;padding:.375rem .75rem .375rem 2.25rem;-moz-padding-start:calc(0.75rem - 3px);font-size:0.6875rem;font-weight:400;line-height:1;color:#444;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#b3b3b3;outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-left:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #444}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-right:.5rem;font-size:0.6015625rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;font-size:0.859375rem;border-radius:.3rem}.form-check{display:block;min-height:.6875rem;padding-right:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:right;margin-right:-1.5em}.form-check-input{width:1em;height:1em;margin-top:0em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#b3b3b3;outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.form-check-input:checked{background-color:#666;border-color:#666}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#666;border-color:#666;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-right:2.5em}.form-switch .form-check-input{width:2em;margin-right:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:right center;border-radius:2em}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23b3b3b3'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:left center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(102,102,102,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(102,102,102,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#666;border:0;border-radius:1rem;-webkit-appearance:none;appearance:none}.form-range::-webkit-slider-thumb:active{background-color:#d1d1d1}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#666;border:0;border-radius:1rem;-moz-appearance:none;appearance:none}.form-range::-moz-range-thumb:active{background-color:#d1d1d1}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;right:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:100% 0}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:0.6875rem;font-weight:400;line-height:1;color:#444;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:0}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.6015625rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:0}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-left:calc(1em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.25em + 0.1875rem) center;background-size:calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-left:calc(1em + 0.75rem);background-position:top calc(0.25em + 0.1875rem) left calc(0.25em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.6015625rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:0}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-left:calc(1em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.25em + 0.1875rem) center;background-size:calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-left:calc(1em + 0.75rem);background-position:top calc(0.25em + 0.1875rem) left calc(0.25em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1;color:#444;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .5rem;font-size:0.6875rem;border-radius:0}.btn:hover{color:#444;text-decoration:none}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#666;border-color:#666}.btn-primary:hover{color:#fff;background-color:#575757;border-color:#525252}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#575757;border-color:#525252;box-shadow:0 0 0 .25rem rgba(125,125,125,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#525252;border-color:#4d4d4d}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(125,125,125,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#666;border-color:#666}.btn-secondary{color:#000;background-color:#ccc;border-color:#ccc}.btn-secondary:hover{color:#000;background-color:#d4d4d4;border-color:#d1d1d1}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#000;background-color:#d4d4d4;border-color:#d1d1d1;box-shadow:0 0 0 .25rem rgba(173,173,173,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#000;background-color:#d6d6d6;border-color:#d1d1d1}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(173,173,173,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#000;background-color:#ccc;border-color:#ccc}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#666;border-color:#666}.btn-outline-primary:hover{color:#fff;background-color:#666;border-color:#666}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(102,102,102,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#666;border-color:#666}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(102,102,102,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#666;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#ccc;border-color:#ccc}.btn-outline-secondary:hover{color:#000;background-color:#ccc;border-color:#ccc}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(204,204,204,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#000;background-color:#ccc;border-color:#ccc}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(204,204,204,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#ccc;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:#666;text-decoration:none}.btn-link:hover{color:#666;text-decoration:underline}.btn-link:focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden}.collapsing.collapse-horizontal{width:0;height:auto}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:0.6875rem;color:#444;text-align:right;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:0}.dropdown-menu[data-bs-popper]{top:100%;right:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{left:0;right:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{left:0;right:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropend .dropdown-menu[data-bs-popper]{top:0;left:auto;right:100%;margin-top:0;margin-right:.125rem}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;left:100%;right:auto;margin-top:0;margin-left:.125rem}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#666}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:0.6015625rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#666}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-right:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-right:0}.dropstart .dropdown-toggle-split::before{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-top-left-radius:0}.nav{display:flex;flex-wrap:wrap;padding-right:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#666}.nav-link:hover,.nav-link:focus{color:#666;text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-right-radius:0;border-top-left-radius:0}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#fff #fff #ddd;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#000;background-color:#fff;border-color:#ddd #ddd #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:0}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#666}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:0;padding-left:0;padding-bottom:0;padding-right:0}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.4140625rem;padding-bottom:.4140625rem;margin-left:1rem;font-size:0.859375rem;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:0.859375rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:0}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:#666}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#666}.navbar-light .navbar-nav .nav-link{color:#666}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#333}.navbar-light .navbar-nav .nav-link.disabled{color:#666}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:#666}.navbar-light .navbar-toggler{color:#666;border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23666' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#666}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#666}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#f7f7f7;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-right-radius:0;border-top-left-radius:0}.card>.list-group:last-child{border-bottom-width:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-right:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:#f7f7f7;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:0 0 0 0}.card-footer{padding:.5rem 1rem;background-color:#f7f7f7;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 0 0}.card-header-tabs{margin-left:-0.5rem;margin-bottom:-0.5rem;margin-right:-0.5rem;border-bottom:0}.card-header-tabs .nav-link.active{background-color:#f7f7f7;border-bottom-color:#f7f7f7}.card-header-pills{margin-left:-0.5rem;margin-right:-0.5rem}.card-img-overlay{position:absolute;top:0;left:0;bottom:0;right:0;padding:1rem;border-radius:0}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-right-radius:0;border-top-left-radius:0}.card-img,.card-img-bottom{border-bottom-left-radius:0;border-bottom-right-radius:0}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-right:0;border-right:0}.card-group>.card:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-right-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:.375rem 1rem;font-size:0.6875rem;color:#444;text-align:right;background-color:#fff;border:0;border-radius:0;overflow-anchor:none}.accordion-button:not(.collapsed){color:#fff;background-color:#aaa;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-right:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23444'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#b3b3b3;outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-right-radius:0;border-top-left-radius:0}.accordion-item:first-of-type .accordion-button{border-top-right-radius:0;border-top-left-radius:0}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-item:last-of-type .accordion-collapse{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-left:0;border-right:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-right:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:right;padding-left:.5rem;color:#fff;content:var(--bs-breadcrumb-divider, none)}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-right:0;list-style:none}.page-link{position:relative;display:block;color:#666;background-color:#f7f7f7;border:1px solid #ddd}.page-link:hover{z-index:2;color:#666;text-decoration:none;background-color:#eee;border-color:#ddd}.page-link:focus{z-index:3;color:#666;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.page-item:not(:first-child) .page-link{margin-right:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#666;border-color:#ddd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#ddd}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0}.page-item:last-child .page-link{border-top-left-radius:0;border-bottom-left-radius:0}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:0.859375rem}.pagination-lg .page-item:first-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.6015625rem}.pagination-sm .page-item:first-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1em;border:0 solid rgba(0,0,0,0);border-radius:0}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{position:absolute;top:0;left:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#3d3d3d;background-color:#e0e0e0;border-color:#d1d1d1}.alert-primary .alert-link{color:#313131}.alert-secondary{color:#525252;background-color:#f5f5f5;border-color:#f0f0f0}.alert-secondary .alert-link{color:#424242}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;border-radius:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#444;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;background-color:inherit;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-right-radius:inherit;border-top-left-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:inherit}.list-group-item.active{z-index:2;color:#fff;background-color:#666;border-color:#666}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#3d3d3d;background-color:#e0e0e0}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#3d3d3d;background-color:#cacaca}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#3d3d3d;border-color:#3d3d3d}.list-group-item-secondary{color:#525252;background-color:#f5f5f5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#525252;background-color:#ddd}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#525252;border-color:#525252}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:0;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.modal{position:fixed;top:0;right:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transform:translate(0, -50px)}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:0;outline:0}.modal-backdrop{position:fixed;top:0;right:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:.5rem 1rem;border-bottom:1px solid #ddd;border-top-right-radius:0;border-top-left-radius:0}.modal-header .btn-close{padding:.25rem .5rem;margin:-0.25rem auto -0.25rem -0.5rem}.modal-title{margin-bottom:0;line-height:1}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #ddd;border-bottom-left-radius:0;border-bottom-right-radius:0}.modal-footer>*{margin:.25rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}@-webkit-keyframes spinner-border{to{transform:rotate(-360deg)}}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-left-color:rgba(0,0,0,0);border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#666}.link-primary:hover,.link-primary:focus{color:#525252}.link-secondary{color:#ccc}.link-secondary:hover,.link-secondary:focus{color:#d6d6d6}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:right !important}.float-end{float:left !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{right:0 !important}.start-50{right:50% !important}.start-100{right:100% !important}.end-0{left:0 !important}.end-50{left:50% !important}.end-100{left:100% !important}.translate-middle{transform:translate(50%, -50%) !important}.translate-middle-x{transform:translateX(50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #ddd !important}.border-0{border:0 !important}.border-top{border-top:1px solid #ddd !important}.border-top-0{border-top:0 !important}.border-end{border-left:1px solid #ddd !important}.border-end-0{border-left:0 !important}.border-bottom{border-bottom:1px solid #ddd !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-right:1px solid #ddd !important}.border-start-0{border-right:0 !important}.border-primary{border-color:#666 !important}.border-secondary{border-color:#ccc !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-3{margin-left:1rem !important;margin-right:1rem !important}.mx-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-5{margin-left:3rem !important;margin-right:3rem !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-left:0 !important}.me-1{margin-left:.25rem !important}.me-2{margin-left:.5rem !important}.me-3{margin-left:1rem !important}.me-4{margin-left:1.5rem !important}.me-5{margin-left:3rem !important}.me-auto{margin-left:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-right:0 !important}.ms-1{margin-right:.25rem !important}.ms-2{margin-right:.5rem !important}.ms-3{margin-right:1rem !important}.ms-4{margin-right:1.5rem !important}.ms-5{margin-right:3rem !important}.ms-auto{margin-right:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-left:0 !important;padding-right:0 !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-3{padding-left:1rem !important;padding-right:1rem !important}.px-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-5{padding-left:3rem !important;padding-right:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-left:0 !important}.pe-1{padding-left:.25rem !important}.pe-2{padding-left:.5rem !important}.pe-3{padding-left:1rem !important}.pe-4{padding-left:1.5rem !important}.pe-5{padding-left:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-right:0 !important}.ps-1{padding-right:.25rem !important}.ps-2{padding-right:.5rem !important}.ps-3{padding-right:1rem !important}.ps-4{padding-right:1.5rem !important}.ps-5{padding-right:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:3em !important}.fs-2{font-size:3.6em !important}.fs-3{font-size:1rem !important}.fs-4{font-size:1.03125rem !important}.fs-5{font-size:0.859375rem !important}.fs-6{font-size:0.6875rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1 !important}.lh-lg{line-height:2 !important}.text-start{text-align:right !important}.text-end{text-align:left !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:0 !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:0 !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-right-radius:0 !important;border-top-left-radius:0 !important}.rounded-end{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom{border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-start{border-bottom-right-radius:0 !important;border-top-right-radius:0 !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:right !important}.float-sm-end{float:left !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-left:0 !important;margin-right:0 !important}.mx-sm-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-sm-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-sm-3{margin-left:1rem !important;margin-right:1rem !important}.mx-sm-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-sm-5{margin-left:3rem !important;margin-right:3rem !important}.mx-sm-auto{margin-left:auto !important;margin-right:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-left:0 !important}.me-sm-1{margin-left:.25rem !important}.me-sm-2{margin-left:.5rem !important}.me-sm-3{margin-left:1rem !important}.me-sm-4{margin-left:1.5rem !important}.me-sm-5{margin-left:3rem !important}.me-sm-auto{margin-left:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-right:0 !important}.ms-sm-1{margin-right:.25rem !important}.ms-sm-2{margin-right:.5rem !important}.ms-sm-3{margin-right:1rem !important}.ms-sm-4{margin-right:1.5rem !important}.ms-sm-5{margin-right:3rem !important}.ms-sm-auto{margin-right:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-left:0 !important;padding-right:0 !important}.px-sm-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-sm-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-sm-3{padding-left:1rem !important;padding-right:1rem !important}.px-sm-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-sm-5{padding-left:3rem !important;padding-right:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-left:0 !important}.pe-sm-1{padding-left:.25rem !important}.pe-sm-2{padding-left:.5rem !important}.pe-sm-3{padding-left:1rem !important}.pe-sm-4{padding-left:1.5rem !important}.pe-sm-5{padding-left:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-right:0 !important}.ps-sm-1{padding-right:.25rem !important}.ps-sm-2{padding-right:.5rem !important}.ps-sm-3{padding-right:1rem !important}.ps-sm-4{padding-right:1.5rem !important}.ps-sm-5{padding-right:3rem !important}.text-sm-start{text-align:right !important}.text-sm-end{text-align:left !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:right !important}.float-md-end{float:left !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-left:0 !important;margin-right:0 !important}.mx-md-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-md-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-md-3{margin-left:1rem !important;margin-right:1rem !important}.mx-md-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-md-5{margin-left:3rem !important;margin-right:3rem !important}.mx-md-auto{margin-left:auto !important;margin-right:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-left:0 !important}.me-md-1{margin-left:.25rem !important}.me-md-2{margin-left:.5rem !important}.me-md-3{margin-left:1rem !important}.me-md-4{margin-left:1.5rem !important}.me-md-5{margin-left:3rem !important}.me-md-auto{margin-left:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-right:0 !important}.ms-md-1{margin-right:.25rem !important}.ms-md-2{margin-right:.5rem !important}.ms-md-3{margin-right:1rem !important}.ms-md-4{margin-right:1.5rem !important}.ms-md-5{margin-right:3rem !important}.ms-md-auto{margin-right:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-left:0 !important;padding-right:0 !important}.px-md-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-md-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-md-3{padding-left:1rem !important;padding-right:1rem !important}.px-md-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-md-5{padding-left:3rem !important;padding-right:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-left:0 !important}.pe-md-1{padding-left:.25rem !important}.pe-md-2{padding-left:.5rem !important}.pe-md-3{padding-left:1rem !important}.pe-md-4{padding-left:1.5rem !important}.pe-md-5{padding-left:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-right:0 !important}.ps-md-1{padding-right:.25rem !important}.ps-md-2{padding-right:.5rem !important}.ps-md-3{padding-right:1rem !important}.ps-md-4{padding-right:1.5rem !important}.ps-md-5{padding-right:3rem !important}.text-md-start{text-align:right !important}.text-md-end{text-align:left !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:right !important}.float-lg-end{float:left !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-left:0 !important;margin-right:0 !important}.mx-lg-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-lg-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-lg-3{margin-left:1rem !important;margin-right:1rem !important}.mx-lg-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-lg-5{margin-left:3rem !important;margin-right:3rem !important}.mx-lg-auto{margin-left:auto !important;margin-right:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-left:0 !important}.me-lg-1{margin-left:.25rem !important}.me-lg-2{margin-left:.5rem !important}.me-lg-3{margin-left:1rem !important}.me-lg-4{margin-left:1.5rem !important}.me-lg-5{margin-left:3rem !important}.me-lg-auto{margin-left:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-right:0 !important}.ms-lg-1{margin-right:.25rem !important}.ms-lg-2{margin-right:.5rem !important}.ms-lg-3{margin-right:1rem !important}.ms-lg-4{margin-right:1.5rem !important}.ms-lg-5{margin-right:3rem !important}.ms-lg-auto{margin-right:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-left:0 !important;padding-right:0 !important}.px-lg-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-lg-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-lg-3{padding-left:1rem !important;padding-right:1rem !important}.px-lg-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-lg-5{padding-left:3rem !important;padding-right:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-left:0 !important}.pe-lg-1{padding-left:.25rem !important}.pe-lg-2{padding-left:.5rem !important}.pe-lg-3{padding-left:1rem !important}.pe-lg-4{padding-left:1.5rem !important}.pe-lg-5{padding-left:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-right:0 !important}.ps-lg-1{padding-right:.25rem !important}.ps-lg-2{padding-right:.5rem !important}.ps-lg-3{padding-right:1rem !important}.ps-lg-4{padding-right:1.5rem !important}.ps-lg-5{padding-right:3rem !important}.text-lg-start{text-align:right !important}.text-lg-end{text-align:left !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:right !important}.float-xl-end{float:left !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-left:0 !important;margin-right:0 !important}.mx-xl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xl-auto{margin-left:auto !important;margin-right:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-left:0 !important}.me-xl-1{margin-left:.25rem !important}.me-xl-2{margin-left:.5rem !important}.me-xl-3{margin-left:1rem !important}.me-xl-4{margin-left:1.5rem !important}.me-xl-5{margin-left:3rem !important}.me-xl-auto{margin-left:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-right:0 !important}.ms-xl-1{margin-right:.25rem !important}.ms-xl-2{margin-right:.5rem !important}.ms-xl-3{margin-right:1rem !important}.ms-xl-4{margin-right:1.5rem !important}.ms-xl-5{margin-right:3rem !important}.ms-xl-auto{margin-right:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-left:0 !important;padding-right:0 !important}.px-xl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-left:0 !important}.pe-xl-1{padding-left:.25rem !important}.pe-xl-2{padding-left:.5rem !important}.pe-xl-3{padding-left:1rem !important}.pe-xl-4{padding-left:1.5rem !important}.pe-xl-5{padding-left:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-right:0 !important}.ps-xl-1{padding-right:.25rem !important}.ps-xl-2{padding-right:.5rem !important}.ps-xl-3{padding-right:1rem !important}.ps-xl-4{padding-right:1.5rem !important}.ps-xl-5{padding-right:3rem !important}.text-xl-start{text-align:right !important}.text-xl-end{text-align:left !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:right !important}.float-xxl-end{float:left !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-left:0 !important;margin-right:0 !important}.mx-xxl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xxl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xxl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xxl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xxl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xxl-auto{margin-left:auto !important;margin-right:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-left:0 !important}.me-xxl-1{margin-left:.25rem !important}.me-xxl-2{margin-left:.5rem !important}.me-xxl-3{margin-left:1rem !important}.me-xxl-4{margin-left:1.5rem !important}.me-xxl-5{margin-left:3rem !important}.me-xxl-auto{margin-left:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-right:0 !important}.ms-xxl-1{margin-right:.25rem !important}.ms-xxl-2{margin-right:.5rem !important}.ms-xxl-3{margin-right:1rem !important}.ms-xxl-4{margin-right:1.5rem !important}.ms-xxl-5{margin-right:3rem !important}.ms-xxl-auto{margin-right:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-left:0 !important;padding-right:0 !important}.px-xxl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xxl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xxl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xxl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xxl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-left:0 !important}.pe-xxl-1{padding-left:.25rem !important}.pe-xxl-2{padding-left:.5rem !important}.pe-xxl-3{padding-left:1rem !important}.pe-xxl-4{padding-left:1.5rem !important}.pe-xxl-5{padding-left:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-right:0 !important}.ps-xxl-1{padding-right:.25rem !important}.ps-xxl-2{padding-right:.5rem !important}.ps-xxl-3{padding-right:1rem !important}.ps-xxl-4{padding-right:1.5rem !important}.ps-xxl-5{padding-right:3rem !important}.text-xxl-start{text-align:right !important}.text-xxl-end{text-align:left !important}.text-xxl-center{text-align:center !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}#li_select_fontsize{display:none}font[color=red],span[style="color: #FF0000"]{color:#666 !important}strong{font-weight:normal}body#loginform{margin:0;background-color:#666}body#loginform .card-header,body#loginform form#login_form label{display:none !important}body#loginform #page_content{background-color:#666;margin:0 !important;padding:20px;margin-top:10% !important;min-height:240px}body#loginform div.container{color:#fff;text-align:right;width:48em;margin-right:auto;margin-left:auto}body#loginform div.container::before{color:#fff;background:url("../img/user.svg");content:"";float:right;margin-left:20px;margin-bottom:10px;background-color:#666;background-repeat:no-repeat;background-size:cover;overflow:hidden;height:240px;width:240px;line-height:1;text-align:center}body#loginform h1,body#loginform .h1{display:inline-block;text-align:right;color:#fff;font-size:2.5em;padding-top:0;margin-left:-50%;line-height:2}body#loginform a.logo,body#loginform .pma-fieldset legend{display:none}body#loginform .item{margin-bottom:10px}body#loginform input.textfield{width:100%;border:1px solid #fff;background:#fff;color:#666;box-sizing:border-box;margin:0}body#loginform input.textfield:hover,body#loginform input.textfield:focus{background-color:#fff;color:#333;box-sizing:border-box;margin:0}body#loginform input[type=submit]{background-color:#666;border:none;padding:7px;margin:0}body#loginform select{margin:0 !important;border:1px solid #666;background:#666;color:#fff;padding-right:0 !important;font-family:"Open Sans","Segoe UI",sans-serif;min-width:100%}body#loginform select:hover{border:1px solid #fff}body#loginform br{display:none}body#loginform .card-body{padding-top:0;padding-right:0;padding-left:0}body#loginform .card,body#loginform .card-footer,body#loginform .pma-fieldset{border:none;color:#fff;padding:0;margin-top:0;margin-bottom:10px;background:none}body#loginform .card:first-child,body#loginform .card-footer:first-child,body#loginform .pma-fieldset:first-child{border-bottom:none;margin:0}body#loginform .card.tblFooters,body#loginform .card-footer.tblFooters,body#loginform .pma-fieldset.tblFooters{border:none;margin:0;clear:none}.turnOffSelect{-webkit-user-select:none;-moz-user-select:none;user-select:none}#page_content{margin:20px !important}h2 img,.h2 img{display:none}h2 a img,.h2 a img{display:inline}.data{margin:10px 0}button.mult_submit,.checkall_box+label{text-decoration:none;color:#235a81;cursor:pointer;outline:none}button.mult_submit:hover,button.mult_submit:focus{text-decoration:underline;color:#235a81}.checkall_box+label:hover{text-decoration:underline;color:#235a81}dfn:hover{cursor:help}.data th{border-bottom:1px solid #ddd}.data th a:hover{color:#999 !important}.column_heading,.column_action{border:1px solid #ddd;background-color:#f6f6f6}a img{border:0}hr{color:#ddd;background-color:#ddd;border:0;height:1px}form{padding:0;margin:0;display:inline}input[type=text],input[type=password],input[type=number]{border:1px solid #ccc;color:#666;padding:5px;font-family:"Open Sans","Segoe UI",sans-serif;background-color:#fff}input[type=text]:focus,input[type=password]:focus,input[type=number]:focus{border:1px solid #999;color:#444}input:not(.form-control)[type=text],input:not(.form-control)[type=password],input:not(.form-control)[type=number]{margin:6px}.sqlbutton{margin-top:1em;margin-right:0 !important;margin-left:14px !important}button:not(.accordion-button){margin-right:14px;padding:4px;color:#fff;text-decoration:none;background-color:#aaa}textarea{overflow:visible;border:1px solid #ccc;color:#666;background-color:#fff}.pma-fieldset{margin-top:20px;border:1px solid #ddd;padding:20px;background-color:#f7f7f7}.pma-fieldset .pma-fieldset{margin:20px;margin-bottom:0;background-color:#fff;border:none}legend{float:none;padding:0 5px;width:initial;font-size:1em}button{display:inline}img,button{vertical-align:middle}select{border:1px solid #ccc;color:#666;padding:4px;font-family:"Open Sans","Segoe UI",sans-serif;background-color:#fff;max-width:17em}select:not(.form-select){margin:5px}select:focus{border:1px solid #999;color:#444}.clearfloat{clear:both}.paddingtop{padding-top:1em}.separator{color:#fff}.result_query{background:#f7f7f7;margin-bottom:20px}div.tools{padding:10px;text-align:left}div.tools span{float:left;margin:6px 2px}div.tools a{color:#555 !important}.pma-fieldset.tblFooters{margin-top:-1px;border-top:0;text-align:left;float:none;clear:both}div.null_div{height:20px;text-align:center;font-style:normal;min-width:50px}.pma-fieldset .formelement{float:right;margin-left:.5em}.pma-fieldset div[class=formelement]{white-space:normal}button.mult_submit{border:none;background-color:rgba(0,0,0,0);color:#666;margin:0}.structure_actions_dropdown{background-color:#eee;color:#444}.structure_actions_dropdown .icon{vertical-align:middle !important}.condition{border-color:#666 !important}th.condition{border:1px solid #666;background:#666;color:#fff !important}th.condition a{border:1px solid #666;background:#666;color:#fff !important}td.condition{border:1px solid}td.null{font-style:italic;color:#7d7d7d}table .valueHeader,table .value{text-align:left;white-space:normal}.value{font-family:"Consolas","Lucida Grande",monospace}img.lightbulb{cursor:pointer}.pdflayout{overflow:hidden;clip:inherit;background-color:#fff;display:none;border:1px solid #000;position:relative}.pdflayout_table{background:#d3dce3;color:#000;overflow:hidden;clip:inherit;z-index:2;display:inline;visibility:inherit;cursor:move;position:absolute;font-size:80%;border:1px dashed #000}.cm-sql-doc{text-decoration:none;border-bottom:1px dotted #999;color:inherit !important}.selectallarrow{margin-left:.3em;margin-right:.6em}.with-selected{margin-right:2em}#pma_errors,#pma_demo,#pma_footer{position:relative;padding:20px}#pma_errors #pma_errors{padding:0}.confirmation{color:#fff;background-color:#666}.pma-fieldset.confirmation legend{background-color:#666}.error{border:1px solid #666 !important;padding:5px;color:#fff;background-color:#666}.column_name{font-size:80%;margin:5px 2px}.new_central_col{width:100%}.tblcomment{font-size:70%;font-weight:normal;color:#009}.tblHeaders{font-family:"Open Sans Bold",sans-serif;color:#666;background:#f7f7f7;font-weight:normal}div.tools,.tblFooters{font-weight:normal;color:#666;background:#f7f7f7}.tblHeaders a:link,.tblHeaders a:active,.tblHeaders a:visited,div.tools a:link,div.tools a:active,div.tools a:visited,.tblFooters a:link,.tblFooters a:active,.tblFooters a:visited{color:blue}.tblHeaders a:hover,div.tools a:hover,.tblFooters a:hover{color:red}.disabled{color:#666}.disabled a:link,.disabled a:active,.disabled a:visited{color:#666}.disabled a:hover{color:#666;text-decoration:none}tr.disabled td,td.disabled{background-color:#f3f3f3;color:#aaa}.pre_wrap{white-space:pre-wrap}.pre_wrap br{display:none}li.last.database{margin-bottom:15px !important}div#dataDisplay input,div#dataDisplay select{margin:0;margin-left:.5em}div#dataDisplay th{line-height:2em}img.calendar{border:none}form.clock{text-align:center}div#tablestatistics table{float:right;margin-bottom:.5em;margin-left:1.5em;margin-top:.5em;min-width:16em}#topmenucontainer{width:100%}#page_nav_icons{position:fixed;top:0;left:0;z-index:99;padding:.89rem 0}#page_settings_icon{cursor:pointer;display:none}#page_settings_modal,#pma_navigation_settings{display:none}#span_table_comment{font-weight:normal;font-style:italic;white-space:nowrap;margin-right:10px}#textSQLDUMP{width:95%;height:95%;font-family:"Consolas","Lucida Grande",monospace;font-size:110%}#TooltipContainer{position:absolute;z-index:99;width:20em;height:auto;overflow:visible;visibility:hidden;background-color:#ffc;color:#060;border:.1em solid #000;padding:.5em}#fieldset_add_user_login div.item{display:flex;align-items:center;border-bottom:1px solid #ddd;padding-bottom:.3em;margin-bottom:.3em}#fieldset_add_user_login label{float:right;display:block;width:10em;max-width:100%;text-align:left;padding-left:.5em;margin-bottom:0}#fieldset_add_user_login span.options{float:right;display:block;width:12em;max-width:100%;padding-left:.5em}#fieldset_add_user_login span.options #select_pred_username,#fieldset_add_user_login span.options #select_pred_hostname,#fieldset_add_user_login span.options #select_pred_password{width:100%;max-width:100%}#fieldset_add_user_login input{width:12em;clear:left;max-width:100%}#fieldset_add_user_login span.options input{width:auto}#fieldset_add_user_login span.options input[type=button]{margin:4px}#fieldset_user_priv div.item{float:right;width:9em;max-width:100%}#fieldset_user_priv div.item div.item{float:none}#fieldset_user_priv div.item label{white-space:nowrap}#fieldset_user_priv div.item select{width:100%}#fieldset_user_global_rights .pma-fieldset,#fieldset_user_group_rights .pma-fieldset{float:right}.linkElem:hover{text-decoration:underline;color:#235a81;cursor:pointer}h3#serverstatusqueries span,#serverstatusqueries.h3 span{font-size:60%;display:inline}div#serverStatusTabs{margin-top:1em}caption a.top{float:left}div#serverstatusquerieschart{float:right;width:500px;height:350px;padding-right:30px}div#serverstatus table tbody td.descr a,div#serverstatus table .tblFooters a{white-space:nowrap}div.liveChart{clear:both;min-width:500px;height:400px;padding-bottom:80px}div#chartVariableSettings{margin-right:10px}table#chartGrid td{padding:3px;margin:0}table#chartGrid div.monitorChart{background:#f7f7f7;min-width:1px}div.tabLinks{margin-right:.3em;float:right;padding:5px 0}div.tabLinks a,div.tabLinks label{margin-left:7px}div.tabLinks .icon{margin:-0.2em 0 0 .3em}.popupContent{display:none;position:absolute;border:1px solid #ccc;margin:0;padding:3px;background-color:#fff;z-index:2}div#logTable{padding-top:10px;clear:both}div#logTable table{width:100%}div#queryAnalyzerDialog{min-width:700px}div#queryAnalyzerDialog div.CodeMirror-scroll{height:auto}div#queryAnalyzerDialog div#queryProfiling{height:300px}div#queryAnalyzerDialog td.explain{width:250px}div#queryAnalyzerDialog table.queryNums{display:none;border:0;text-align:right}.smallIndent{padding-right:7px}div#profilingchart{width:850px;height:370px;float:right}#resizer{border:1px solid silver}#inner-resizer{padding:10px}#togglequerybox{margin:0 10px}#serverstatus h3,#serverstatus .h3{margin:15px 0;font-weight:normal;color:#999;font-size:1.7em}textarea#sqlquery{width:100%;border:1px solid #aaa;padding:5px;font-family:inherit}textarea#sql_query_edit{height:7em;width:95%;display:block}#mysqlmaininformation,#pmamaininformation{float:right;width:49%}#maincontainer ul{list-style-type:square;vertical-align:middle;color:#666;margin-right:20px}#maincontainer ul li{line-height:1.5}#full_name_layer{position:absolute;padding:2px;margin-top:-3px;z-index:801;border:solid 1px #888;background:#fff}li br{display:none}li#li_mysql_client_version{overflow:hidden;text-overflow:ellipsis}#body_browse_foreigners{background:#666;margin:.5em .5em 0 .5em}#bodyquerywindow{background:#666}#bodythemes{width:500px;margin:auto;text-align:center}#bodythemes img{border:.1em solid #000}#bodythemes a:hover img{border:.1em solid red}#selflink{clear:both;display:block;margin-top:20px;margin-bottom:20px;margin-right:20px;margin-left:20px;border-top:1px solid silver;text-align:left}.operations_half_width{width:100%;float:right;margin-bottom:10px}.operations_full_width{width:100%;clear:both}#qbe_div_table_list,#qbe_div_sql_query{float:right}kbd{color:#444;background-color:rgba(0,0,0,0);box-shadow:none}code{font-size:1em;color:#444}code.php{display:block;padding-right:.3em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}.sqlOuter code.sql,div.sqlvalidate,#inline_editor_outer{display:block;padding:1em;margin:1em;overflow:auto;background-color:#fff;border:1px solid #ddd;direction:rtl}textarea#partitiondefinition{height:3em}.hide{display:none}#list_server{list-style-image:none;padding:0}div.upload_progress{width:400px;margin:3em auto;text-align:center}div.upload_progress_bar_outer{border:1px solid #000;width:202px;position:relative;margin:0 auto 1em;color:#444}div.upload_progress_bar_inner{background-color:#666;width:0;height:12px;margin:1px;overflow:hidden;color:#000;position:relative}div.upload_progress_bar_outer div.percentage{position:absolute;top:0;right:0;width:202px}div.upload_progress_bar_inner div.percentage{top:-1px;right:-1px}div#statustext{margin-top:.5em}table#serverconnection_src_remote,table#serverconnection_trg_remote,table#serverconnection_src_local,table#serverconnection_trg_local{float:right}input[type=text].invalid_value,input[type=password].invalid_value,input[type=number].invalid_value,input[type=date].invalid_value .invalid_value{background:#fcc}.ajax_notification{top:0;position:fixed;z-index:1100;text-align:center;display:inline;right:0;left:0;background-image:url("../img/ajax_clock_small.gif");background-repeat:no-repeat;background-position:54%;margin:0;background-color:#fff;color:#444;padding:10px !important;border:none}.dismissable{margin-right:-10px;margin-top:-10px}#loading_parent{position:relative;width:100%}#popup_background{display:none;position:fixed;width:100%;height:100%;top:0;right:0;background:#000;z-index:1000;overflow:hidden}#tablestructure tbody label{margin:.3rem 0}#structure-action-links a{margin-left:1em}#index_frm .index_info input,#index_frm .index_info select{width:14em;box-sizing:border-box}#index_frm .index_info div{padding:.2em 0}#index_frm .index_info .label{float:right;min-width:12em}#index_frm .slider{width:10em;margin:.6em;float:right}#index_frm .add_fields{float:right}#index_frm .add_fields input{margin-right:1em}#index_frm input{margin:0}#index_frm td{vertical-align:middle}table#index_columns{width:100%}table#index_columns select{width:85%;float:left}#move_columns_dialog div{padding:1em}#move_columns_dialog ul{list-style:none;margin:0;padding:0}#move_columns_dialog li{background:#f7f7f7;border:1px solid #aaa;color:#666;font-weight:bold;margin:.4em;padding:.2em}.config-form .pma-fieldset{margin-top:0;padding:0;clear:both;background:none}.config-form legend{display:none}.config-form .pma-fieldset p{margin:0;padding:10px;background:#fff;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;font-size:16px}.config-form .pma-fieldset .errors{margin:0 -2px 1em;padding:.5em 1.5em;background:#fbead9;border-color:#c83838;border-style:solid;border-width:1px 0;list-style:none;font-family:sans-serif;font-size:small}.config-form .pma-fieldset .inline_errors{margin:.3em .3em .3em;margin-right:0;padding:0;list-style:none;color:#9a0000;font-size:small}.config-form .pma-fieldset table{background-color:#fff}.config-form .pma-fieldset label{font-weight:normal}.config-form .pma-fieldset textarea{margin:5px;padding:5px}.insertRowTable textarea{margin:5px;padding:5px}.config-form .card{margin-top:0}.config-form fieldset th{padding:10px;padding-right:.5em;text-align:right;vertical-align:top}.config-form fieldset .doc{margin-right:1em}.config-form fieldset .disabled-notice{margin-right:1em;font-size:80%;text-transform:uppercase;color:#e00;cursor:help}.config-form fieldset td{padding-top:.3em;padding-bottom:.3em;vertical-align:top;border-bottom:1px #fff solid;border-left:none}.config-form fieldset th{border-bottom:1px #fff solid;border-left:none}.config-form fieldset th small,.config-form fieldset th .small{display:block;font-weight:normal;font-family:sans-serif;font-size:x-small;color:#444}fieldset .group-header th{background:#fff}fieldset .group-header+tr th{padding-top:.6em}fieldset .group-field-1 th,fieldset .group-header-2 th{padding-right:1.5em}fieldset .group-field-2 th,fieldset .group-header-3 th{padding-right:3em}fieldset .group-field-3 th{padding-right:4.5em}fieldset .disabled-field th{color:#666;background-color:#ddd}fieldset .disabled-field th small,fieldset .disabled-field th .small{color:#666;background-color:#ddd}fieldset .disabled-field td{color:#666;background-color:#ddd}form.create_table_form .pma-fieldset.tblFooters,form#multi_edit_central_columns .pma-fieldset.tblFooters{background:none;border:none}#db_or_table_specific_priv .tblFooters{margin-top:-68px}#edit_user_dialog,#add_user_dialog{margin:20px !important}.config-form span.checkbox{padding:2px;display:inline-block}.config-form .custom{background:#ffc}.config-form span.checkbox.custom{padding:1px;border:1px #edec90 solid;background:#ffc}.config-form img.ic_s_reload{filter:invert(70%)}.config-form .field-error{border-color:#a11 !important}.config-form input[type=text],.config-form input[type=password],.config-form input[type=number]{border:1px #a7a6aa solid;height:auto}.config-form input[type=text]:focus,.config-form input[type=password]:focus,.config-form input[type=number]:focus{border:1px #6676ff solid;background:#f7fbff}.config-form select,.config-form textarea{border:1px #a7a6aa solid;height:auto}.config-form select:focus,.config-form textarea:focus{border:1px #6676ff solid;background:#f7fbff}.config-form .field-comment-mark{font-family:serif;color:#007;cursor:help;padding:0 .2em;font-weight:bold;font-style:italic}.config-form .field-comment-warning{color:#a00}.config-form dd{margin-right:.5em}.config-form dd::before{content:"▸ "}.click-hide-message{cursor:pointer}.prefsmanage_opts{margin-right:2em}#prefs_autoload{margin-bottom:.5em;margin-right:.5em}input#auto_increment_opt{width:-webkit-min-content;width:-moz-min-content;width:min-content}#placeholder .button{position:absolute;cursor:pointer}#placeholder div.button{font-size:smaller;color:#999;background-color:#eee;padding:2px}.wrapper{float:right;margin-bottom:1.5em}.toggleButton{position:relative;cursor:pointer;font-size:.8em;text-align:center;line-height:1.4em;height:1.55em;overflow:hidden;border-left:.1em solid #888;border-right:.1em solid #888}.toggleButton table,.toggleButton td,.toggleButton img{padding:0;position:relative}.toggleButton .toggle-container{position:absolute}.toggleButton .toggle-container td{background:none}.toggleButton .toggleOn{color:#fff;padding:0 1em}.toggleButton .toggleOff{padding:0 1em}.doubleFieldset .pma-fieldset{width:48%;float:right;padding:0}.doubleFieldset legend{margin-right:1.5em}.doubleFieldset div.wrap{padding:1.5em}form.append_fields_form .tblFooters{background:none;border:none}#table_columns{display:block;overflow:auto}#table_columns input[type=text],#table_columns input[type=password],#table_columns input[type=number],#table_columns input[type=date]{width:10em;box-sizing:border-box}#table_columns select{width:10em;box-sizing:border-box;margin:6px}#placeholder{position:relative;border:1px solid #aaa;float:left;overflow:hidden}#placeholder .button{position:absolute}.placeholderDrag{cursor:move}#left_arrow{right:8px;top:26px}#right_arrow{right:26px;top:26px}#up_arrow{right:17px;top:8px}#down_arrow{right:17px;top:44px}#zoom_in{right:17px;top:67px}#zoom_world{right:17px;top:85px}#zoom_out{right:17px;top:103px}.colborder{cursor:col-resize;height:100%;margin-right:-6px;position:absolute;width:5px}.colborder_active{border-left:2px solid #a44}.pma_table th.draggable span{display:block;overflow:hidden}.pma_table td{position:static}.pma_table tbody td span{display:block;overflow:hidden}.pma_table tbody td span code span{display:inline}.modal-copy input{display:block;width:100%;margin-top:1.5em;padding:.3em 0}.cRsz{position:absolute}.cCpy{background:#333;color:#fff;font-weight:bold;margin:.1em;padding:.3em;position:absolute}.cPointer{height:20px;width:10px;margin-right:-10px;margin-top:-5px;position:absolute;background:url("../img/col_pointer.png")}.tooltip{background:#333 !important;opacity:.8 !important;z-index:9999;border:1px solid #000 !important;font-size:10px !important;font-weight:normal !important;padding:5px !important;width:260px;line-height:1.5}.tooltip *{background:none !important;color:#fff !important}.cDrop{left:0;position:absolute;top:0}.coldrop{background:url("../img/col_drop.png");cursor:pointer;height:16px;margin-top:.3em;width:16px}.coldrop:hover{background-color:#999}.coldrop-hover{background-color:#999}.cList{background:#fff;border:solid 1px #ccc;position:absolute;margin-right:75%;left:0;max-width:100%;overflow-wrap:break-word}.cList .lDiv div{padding:.2em .5em .2em;padding-right:.2em}.cList .lDiv div:hover{background:#666;cursor:pointer;color:#fff}.cList .lDiv div input{cursor:pointer}.showAllColBtn{border-bottom:solid 1px #ccc;border-top:solid 1px #ccc;cursor:pointer;font-size:.9em;font-family:"Open Sans Bold",sans-serif;padding:.35em 1em;text-align:center;font-weight:normal}.showAllColBtn:hover{background:#666;cursor:pointer;color:#fff}#page_content{line-height:1.5}.navigation_separator{color:#eee;display:inline-block;font-size:1.5em;text-align:center;height:1.4em}.navigation{width:100%;background-color:#666;color:#fff}.navigation td{margin:0;padding:0;vertical-align:middle;white-space:nowrap}.navigation input[type=submit]{background:#666;color:#fff;border:none;filter:none;margin:5px;padding:.4em}.navigation input[type=submit]:hover{color:#fff;cursor:pointer;background-color:#666}.navigation input.edit_mode_active{color:#fff;cursor:pointer;background-color:#666}.navigation select{margin:0 .8em;border:none}.navigation input[type=text]{border:none}.navigation_goto{width:100%}.insertRowTable td,.insertRowTable th{vertical-align:middle}.cEdit{margin:0;padding:0;position:absolute}.cEdit input[type=text],.cEdit input[type=password],.cEdit input[type=number]{background:#fff;height:100%;margin:0;padding:0}.cEdit .edit_area{background:#fff;border:1px solid #999;min-width:10em;padding:.3em .5em}.cEdit .edit_area select,.cEdit .edit_area textarea{width:97%}.cEdit .cell_edit_hint{color:#555;font-size:.8em;margin:.3em .2em}.cEdit .edit_box{overflow-x:hidden;overflow-y:scroll;padding:0;margin-top:10px}.cEdit .edit_box_posting{background:#fff url("../img/ajax_clock_small.gif") no-repeat left center;padding-left:1.5em}.cEdit .edit_area_loading{background:#fff url("../img/ajax_clock_small.gif") no-repeat center;height:10em}.cEdit .goto_link{background:#eee;color:#555;padding:.2em .3em}.saving_edited_data{background:url("../img/ajax_clock_small.gif") no-repeat right;padding-right:20px}.relationalTable select{width:125px;margin-left:5px}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:right}.ui-timepicker-div dl dt{height:25px;margin-bottom:-25px}.ui-timepicker-div dl dd{margin:0 85px 10px 10px}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:none;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:ltr}.ui-timepicker-rtl dl{text-align:left}.ui-timepicker-rtl dl dd{margin:0 10px 10px 65px}.ui_tpicker_time_input{width:100%}body .ui-widget{font-size:1em}body #ui-datepicker-div{z-index:9999 !important}.ui-dialog .pma-fieldset legend a{color:#235a81}div#page_content div#tableslistcontainer{margin-top:1em}div#page_content div#tableslistcontainer table.data{border-top:.1px solid #eee}div#page_content div.result_query{margin-top:1em}table.show_create{margin-top:1em}table.show_create td{border-left:1px solid #bbb}#alias_modal table th{vertical-align:middle;padding-right:1em}#alias_modal label.col-2{min-width:20%;display:inline-block}#alias_modal select{width:25%;margin-left:2em}#alias_modal label{font-weight:bold}.small_font{font-size:smaller}#pma_console_container{width:100%;position:fixed;bottom:0;right:0;z-index:100}textarea{resize:both}#pma_console{position:relative;margin-right:250px}#pma_console .templates{display:none}#pma_console .mid_text{vertical-align:middle}#pma_console .toolbar{position:relative;background:#f7f7f7;border-top:solid 1px #ccc;cursor:n-resize}#pma_console .toolbar span{vertical-align:middle}#pma_console .toolbar.collapsed{cursor:default}#pma_console .toolbar.collapsed:not(:hover){display:inline-block;border-left:solid 1px #ccc}#pma_console .toolbar.collapsed>.button{display:none}#pma_console .message span.text,#pma_console .message span.action{padding:0 3px;display:inline-block}#pma_console .toolbar .button,#pma_console .toolbar .text{padding:0 3px;display:inline-block}#pma_console .switch_button{padding:0 3px;display:inline-block}#pma_console .message span.action,#pma_console .toolbar .button,#pma_console .switch_button{cursor:pointer}#pma_console .toolbar .text{font-weight:bold}#pma_console .toolbar .button,#pma_console .toolbar .text{margin-left:.4em;float:left}#pma_console .content{overflow-x:hidden;overflow-y:auto;margin-bottom:-65px;border-top:solid 1px #ccc;background:#fff;padding-top:.4em}#pma_console .content.console_dark_theme{background:#000;color:#fff}#pma_console .content.console_dark_theme .CodeMirror-wrap{background:#000;color:#fff}#pma_console .content.console_dark_theme .action_content{color:#000}#pma_console .content.console_dark_theme .message{border-color:#373b41}#pma_console .content.console_dark_theme .CodeMirror-cursor{border-color:#fff}#pma_console .content.console_dark_theme .cm-keyword{color:#de935f}#pma_console .message,#pma_console .query_input{position:relative;font-family:Monaco,Consolas,monospace;cursor:text;margin:0 1.4em .2em 10px}#pma_console .message{border-bottom:solid 1px #ccc;padding-bottom:.2em}#pma_console .message.expanded>.action_content{position:relative}#pma_console .message::before{right:-0.7em;position:absolute;content:">"}#pma_console .query_input::before{right:-0.7em;position:absolute;content:">";top:-2px}#pma_console .query_input textarea{width:100%;height:4em;resize:vertical}#pma_console .message:hover::before{color:#7cf;font-weight:bold}#pma_console .message.expanded::before{content:"]"}#pma_console .message.welcome::before{display:none}#pma_console .message.failed::before,#pma_console .message.failed.expanded::before,#pma_console .message.failed:hover::before{content:"=";color:#944}#pma_console .message.pending::before{opacity:.3}#pma_console .message.collapsed>.query{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#pma_console .message.expanded>.query{display:block;white-space:pre;word-wrap:break-word}#pma_console .message .text.targetdb,#pma_console .message.collapsed .action.collapse,#pma_console .message.expanded .action.expand{display:none}#pma_console .message .action.requery,#pma_console .message .action.profiling,#pma_console .message .action.explain,#pma_console .message .action.bookmark{display:none}#pma_console .message.select .action.profiling,#pma_console .message.select .action.explain{display:inline-block}#pma_console .message.history .text.targetdb,#pma_console .message.successed .text.targetdb{display:inline-block}#pma_console .message.history .action.requery,#pma_console .message.history .action.bookmark{display:inline-block}#pma_console .message.bookmark .action.requery,#pma_console .message.bookmark .action.bookmark{display:inline-block}#pma_console .message.successed .action.requery,#pma_console .message.successed .action.bookmark{display:inline-block}#pma_console .message .action_content{position:absolute;bottom:100%;background:#ccc;border:solid 1px #aaa}#pma_console .message.bookmark .text.targetdb,#pma_console .message .text.query_time{margin:0;display:inline-block}#pma_console .message.failed .text.query_time,#pma_console .message .text.failed{display:none}#pma_console .message.failed .text.failed{display:inline-block}#pma_console .message .text{background:#fff}#pma_console .message.collapsed>.action_content{display:none}#pma_console .message.collapsed:hover>.action_content{display:block}#pma_console .message .bookmark_label{padding:0 4px;top:0;background:#369;color:#fff}#pma_console .message .bookmark_label.shared{background:#396}#pma_console .query_input{position:relative}#pma_console .mid_layer{height:100%;width:100%;position:absolute;top:0;background:#ccc;display:none;cursor:pointer;z-index:200}#pma_console .card{position:absolute;width:94%;height:100%;min-height:48px;right:100%;top:0;border-right:solid 1px #999;z-index:300;transition:right .2s}#pma_console .card.show{right:6%}#pma_bookmarks .content.add_bookmark,#pma_console_options .content{padding:4px 6px}#pma_bookmarks .content.add_bookmark .options{margin-right:1.4em;padding-bottom:.4em;margin-bottom:.4em;border-bottom:solid 1px #ccc}#pma_bookmarks .content.add_bookmark .options button{margin:0 7px;vertical-align:bottom}#pma_bookmarks .content.add_bookmark input[type=text]{margin:0;padding:2px 4px}#pma_console .button.hide,#pma_console .message span.text.hide{display:none}#debug_console.grouped .ungroup_queries{display:inline-block}#debug_console.ungrouped .group_queries{display:inline-block}#debug_console.ungrouped .ungroup_queries,#debug_console.ungrouped .sort_count{display:none}#debug_console.grouped .group_queries{display:none}#debug_console .count{margin-left:8px}#debug_console .show_trace .trace,#debug_console .show_args .args{display:block}#debug_console .hide_trace .trace,#debug_console .hide_args .args,#debug_console .show_trace .action.dbg_show_trace,#debug_console .hide_trace .action.dbg_hide_trace{display:none}#debug_console .traceStep.hide_args .action.dbg_hide_args,#debug_console .traceStep.show_args .action.dbg_show_args{display:none}#debug_console .traceStep::after{content:"";display:table;clear:both}#debug_console .trace.welcome::after,#debug_console .debug>.welcome::after{content:"";display:table;clear:both}#debug_console .debug_summary{float:right}#debug_console .trace.welcome .time,#debug_console .traceStep .file,#debug_console .script_name{float:left}#debug_console .traceStep .args pre{margin:0}.cm-s-pma .CodeMirror-code{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-code pre{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-measure>pre,.cm-s-pma .CodeMirror-code>pre,.cm-s-pma .CodeMirror-lines{padding:0}.cm-s-pma.CodeMirror{resize:none;height:auto;width:100%;min-height:initial;max-height:initial}.cm-s-pma .CodeMirror-scroll{cursor:text}.pma_drop_handler{display:none;position:fixed;top:0;right:0;width:100%;background:rgba(0,0,0,.6);height:100%;z-index:999;color:#fff;font-size:30pt;text-align:center;padding-top:20%}.pma_sql_import_status{display:none;position:fixed;bottom:0;left:25px;width:400px;border:1px solid #999;background:#f3f3f3}.pma_sql_import_status h2,.pma_sql_import_status .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal}.pma_drop_result h2,.pma_drop_result .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal}.pma_sql_import_status div{height:270px;overflow-y:auto;overflow-x:hidden;list-style-type:none}.pma_sql_import_status div li{padding:8px 10px;border-bottom:1px solid #bbb;color:#940e0e;background:#fff}.pma_sql_import_status div li .filesize{float:left}.pma_sql_import_status h2 .minimize,.pma_sql_import_status .h2 .minimize{float:left;margin-left:5px;padding:0 10px}.pma_sql_import_status h2 .close,.pma_sql_import_status .h2 .close{float:left;margin-left:5px;padding:0 10px;display:none}.pma_sql_import_status h2 .minimize:hover,.pma_sql_import_status .h2 .minimize:hover,.pma_sql_import_status h2 .close:hover,.pma_sql_import_status .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_result h2 .close:hover,.pma_drop_result .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_file_status{color:#235a81}.pma_drop_file_status span.underline:hover{cursor:pointer;text-decoration:underline}.pma_drop_result{position:fixed;top:10%;right:20%;width:60%;background:#fff;min-height:300px;z-index:800;cursor:move}.pma_drop_result h2 .close,.pma_drop_result .h2 .close{float:left;margin-left:5px;padding:0 10px}.dependencies_box{background-color:#fff;border:3px ridge #000}#composite_index_list{list-style-type:none;list-style-position:inside}span.drag_icon{display:inline-block;background-image:url("../img/s_sortable.png");background-position:center center;background-repeat:no-repeat;width:1em;height:3em;cursor:move}.topmargin{margin-top:1em}meter[value="1"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #e32929 5%, transparent 10%, #e32929)}meter[value="2"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #f60 5%, transparent 10%, #f60)}meter[value="3"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #ffd700 5%, transparent 10%, #ffd700)}body .ui-dialog .ui-dialog-titlebar-close{left:.3em;right:initial}body .ui-dialog .ui-dialog-title{float:right}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}body .ui-corner-all,body .ui-corner-top,body .ui-corner-left,body .ui-corner-tl{border-top-right-radius:0}body .ui-corner-all,body .ui-corner-top,body .ui-corner-right,body .ui-corner-tr{border-top-left-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-left,body .ui-corner-bl{border-bottom-right-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-right,body .ui-corner-br{border-bottom-left-radius:0}body .ui-dialog{padding:0}body .ui-dialog .ui-widget-header{color:#fff;border:none;background-color:#666;background-image:none}body .ui-dialog .ui-dialog-title{padding:5px;font-weight:normal}body .ui-dialog .ui-dialog-buttonpane button{font-family:"Open Sans","Segoe UI",sans-serif;color:#fff;background-color:#666;background-image:none;border:1px solid #aaa}body .ui-dialog .ui-dialog-buttonpane button.ui-state-hover{background-color:#000;border:1px solid #000}body .ui-dialog .ui-dialog-buttonpane button.ui-state-active{background-color:#333;border:1px solid #333}#tooltip_editor{font-size:12px;background-color:#fff;opacity:.95;filter:alpha(opacity=95);padding:5px}#tooltip_font{font-weight:bold}#selection_box{z-index:1000;height:205px;position:absolute;background-color:skyblue;opacity:.4;filter:alpha(opacity=40);pointer-events:none}#filterQueryText{vertical-align:baseline}.multi_table_query_form .query-form__tr--hide{display:none}.multi_table_query_form .query-form__fieldset--inline,.multi_table_query_form .query-form__select--inline{display:inline}.multi_table_query_form .query-form__tr--bg-none{background:none}.multi_table_query_form .query-form__input--wide{width:91%}.multi_table_query_form .query-form__multi-sql-query{float:right}.pre-scrollable{max-height:340px;overflow-y:scroll}@media(min-width: 1200px){div.tools{text-align:right}.pma-fieldset.tblFooters,.tblFooters{text-align:right}}.resize-vertical{resize:vertical}p.enum_notice{margin:5px 2px;font-size:80%}#enum_editor p{margin-top:0;font-style:italic}#enum_editor .values{width:100%}#enum_editor .add{width:100%}#enum_editor .add td{vertical-align:middle;width:50%;padding:0 0 0;padding-right:1em}#enum_editor .values td.drop{width:1.8em;cursor:pointer;vertical-align:middle}#enum_editor .values input{margin:.1em 0;padding-left:2em;width:100%}#enum_editor .values img{vertical-align:middle}#enum_editor input.add_value{margin:0;margin-left:.4em}#enum_editor_output textarea{width:100%;float:left;margin:1em 0 0 0}.enum_hint{position:relative}.enum_hint a{position:absolute;right:81%;bottom:.35em}a.close_gis_editor{float:left}#gis_editor{display:none;position:fixed;z-index:1001;overflow-y:auto;overflow-x:hidden}#gis_data{min-height:230px}#gis_data_textarea{height:6em}#gis_data_editor{background:#d0dce0;padding:15px;min-height:500px}#gis_data_editor .choice{display:none}#gis_data_editor input[type=text]{width:75px}#pma_navigation{width:250px;overflow:hidden;position:fixed;top:0;right:0;height:100%;background:#fff;color:#444;z-index:800}#pma_navigation input[type=text]{background-color:#fff;font-family:"Open Sans","Segoe UI",sans-serif}#pma_navigation a:link,#pma_navigation a:visited,#pma_navigation a:active{text-decoration:none;color:#666}#pma_navigation a img{border:0}#pma_navigation select#select_server,#pma_navigation select#lightm_db{width:100%}#pma_navigation button{display:inline}#pma_navigation_content{width:100%;position:absolute;top:0;right:0;z-index:0}#pma_navigation ul{margin:0}#pma_navigation form{margin:0;padding:0;display:inline}#pma_navigation div.pageselector{text-align:center;margin:0;margin-right:.75em;border-right:1px solid #666}#pma_navigation #pmalogo{margin:0;padding:12px;background:#666;color:#fff;font-size:14px;cursor:default;height:15px;line-height:100%;box-sizing:content-box}#pma_navigation #pmalogo::after{font-family:"Open Sans Extrabold","Segoe Black",sans-serif;text-transform:uppercase;margin-right:5px;content:"phpMyAdmin"}#pma_navigation #imgpmalogo{display:none}#pma_navigation #recentTableList{text-align:center;padding:10px}#pma_navigation #recentTableList select{min-width:100%}#pma_navigation #databaseList{text-align:center;margin:10px}#pma_navigation #navipanellinks{padding-top:1em;padding-bottom:1em;text-align:center;background-color:#ddd}#pma_navigation #navipanellinks a{box-sizing:content-box}#pma_navigation #navipanellinks .icon{margin:0}img.ic_b_home,img.ic_s_loggoff,img.ic_b_docs,img.ic_b_sqlhelp,img.ic_s_reload{filter:invert(70%)}#navipanellinks a{height:16px;width:16px;color:#444;margin-left:5px;padding:5px;font-size:15px}#navipanellinks a:hover{color:#666}#pma_navigation #serverChoice,#pma_navigation #databaseList,#pma_navigation div.pageselector.dbselector{text-align:center;padding:5px 10px 0;border:0}#pma_navigation_content>img.throbber{display:none;margin:.3em auto 0}#pma_navigation_tree{margin:0;margin-right:10px;overflow:hidden;height:74%;position:relative}#pma_navigation_select_database{text-align:right;padding:0 0 0;border:0;margin:0}#pma_navigation_db_select{margin-top:.5em;margin-right:.75em}#pma_navigation_db_select select{border:1px solid #bbb;border-top:1px solid #bbb;color:#333;padding:4px 6px;margin:0 0 0;width:92%}#pma_navigation_tree_content{width:100%;overflow:hidden;overflow-y:auto;position:absolute;height:100%}#pma_navigation_tree li .dbItemControls{padding-left:4px;float:left}#pma_navigation_tree li .navItemControls{display:none;padding-left:4px;float:left}#pma_navigation_tree li.activePointer .navItemControls{display:block;opacity:.5}#pma_navigation_tree li.activePointer .navItemControls:hover{opacity:1}#pma_navigation_tree_content a.hover_show_full{position:relative;z-index:100}#pma_navigation_tree a{color:#fff;padding-right:0}#pma_navigation_tree a:hover{text-decoration:none;color:#666}#pma_navigation_tree li{margin-bottom:0}#pma_navigation_tree li.activePointer,#pma_navigation_tree li.selected{color:#666}#pma_navigation_tree ul{clear:both;padding:0;list-style-type:none;margin:0}#pma_navigation_tree ul ul{position:relative}#pma_navigation_tree li{white-space:nowrap;clear:both;min-height:17px}#pma_navigation_tree img{margin:0}#pma_navigation_tree i{display:block}#pma_navigation_tree div.block{position:relative;width:1.5em;height:2em;min-width:16px;min-height:16px;float:right}#pma_navigation_tree div.block.double{width:2.5em}#pma_navigation_tree div.block i,#pma_navigation_tree div.block b{width:1.5em;height:2em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;right:.75em;z-index:0;margin-top:-4px}#pma_navigation_tree div.block i{display:block;border-right:1px solid #616161;border-bottom:1px solid #616161;position:relative;z-index:0}#pma_navigation_tree div.block i.first{border-right:0}#pma_navigation_tree div.block b{display:block;height:.75em;bottom:0;right:.75em;border-right:1px solid #616161}#pma_navigation_tree div.block a,#pma_navigation_tree div.block u{position:absolute;right:50%;top:50%;z-index:10}#pma_navigation_tree div.block a+a{right:100%}#pma_navigation_tree div.block.double a,#pma_navigation_tree div.block.double u{right:33%}#pma_navigation_tree div.block.double a+a{right:85%}#pma_navigation_tree div.block img{position:relative;top:-0.6em;right:0;margin-right:-7px}#pma_navigation_tree div.throbber img{top:2px;right:2px}#pma_navigation_tree li.last>ul{background:none}#pma_navigation_tree li>a,#pma_navigation_tree li>i{line-height:1.5em;height:1.5em;padding-right:.3em}#pma_navigation_tree .list_container{border-right:1px solid #616161;margin-right:.75em;padding-right:.75em}#pma_navigation_tree .list_container li.last.database{margin-bottom:0 !important}#pma_navigation_tree .last>.list_container{border-right:0 solid #616161}li.fast_filter{padding-right:.75em;margin-right:.75em;padding-left:15px;border-right:1px solid #616161}li.fast_filter input{font-size:.7em}li.fast_filter .searchClauseClear{background-color:rgba(0,0,0,0);font-weight:bold;color:#800;font-size:.7em}li.fast_filter .searchClauseClear:hover{background-color:rgba(0,0,0,0)}li.fast_filter.db_fast_filter{border:0;margin-right:0}#navigation_controls_outer{min-height:21px !important}#pma_navigation_collapse{padding-left:2px}#navigation_controls_outer.activePointer{background-color:rgba(0,0,0,0) !important}#navigation_controls{float:left;padding-left:23px}#pma_navigation_resizer{width:1px;height:100%;background-color:#aaa;cursor:col-resize;position:fixed;top:0;right:250px;z-index:801}#pma_navigation_collapser{width:20px;padding-top:4px;padding-bottom:12px;background:#666;border-bottom:1px solid #666;line-height:22px;color:#fff;position:fixed;top:0;right:250px;text-align:center;cursor:pointer;z-index:801}.pma_quick_warp{margin-top:5px;margin-right:10px;position:relative}.pma_quick_warp .drop_list{float:right;margin-right:3px;padding:2px 0}.pma_quick_warp .drop_button{padding:.2em .5em;border:1px solid #ddd;background:#f2f2f2;cursor:pointer}.pma_quick_warp .drop_list:hover .drop_button{background:#fff}.pma_quick_warp .drop_list ul{position:absolute;margin:0;padding:0;overflow:hidden;overflow-y:auto;list-style:none;background:#fff;border:1px solid #ddd;top:100%;right:3px;left:0;display:none;z-index:802}.pma_quick_warp .drop_list:hover ul{display:block}.pma_quick_warp .drop_list li{white-space:nowrap;padding:0}.pma_quick_warp .drop_list li img{vertical-align:sub}.pma_quick_warp .drop_list li:hover{background:#f2f2f2}.pma_quick_warp .drop_list a{display:block;padding:.2em .3em}.pma_quick_warp .drop_list a.favorite_table_anchor{clear:right;float:right;padding:.1em .3em 0}.input_tab{background-color:#efefef;color:#000;border:1px solid #ccc}.content_fullscreen{position:relative;overflow:auto}#canvas_outer{position:relative;width:100%;display:block}#canvas{background-color:#fff;color:#000}canvas.designer{display:inline-block;overflow:hidden;text-align:right}canvas.designer *{behavior:url(#default#VML)}.designer_tab{color:#333;border-collapse:collapse;border:1px solid #ccc;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.designer_tab .header{background-color:#f6f6f6}.tab_zag{text-align:center;cursor:move;padding:1px;font-weight:bold;vertical-align:middle}.tab_zag_2{text-align:center;cursor:move;padding:1px;font-weight:bold;background-color:#f6f6f6;vertical-align:middle}.tab_field{background:#fff;color:#000;cursor:default}.tab_field:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}.tab_field_3{background-color:#ffe6e6 !important;color:#000;cursor:default}.tab_field_3:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}#designer_hint{white-space:nowrap;position:absolute;background-color:#9f9;color:#000;z-index:3;border:#0c6 solid 1px;display:none}.scroll_tab{overflow:auto;width:100%;height:500px}.designer_Tabs{cursor:default;color:#333;white-space:nowrap;text-decoration:none;text-indent:3px;margin-right:2px;text-align:right;border:#ccc solid 0}.designer_Tabs:hover{cursor:default;color:#666;background:#eee;text-indent:3px;white-space:nowrap;text-decoration:none;border:#eee solid 0;text-align:right}.owner{font-weight:normal;color:#888}.option_tab{padding-right:2px;padding-left:2px;width:5px}.select_all{vertical-align:top;padding-right:2px;padding-left:2px;cursor:default;width:1px;color:#000;background-repeat:repeat-x}.small_tab{vertical-align:top;background-color:#666;color:#fff;cursor:default;text-align:center;font-weight:bold;padding-right:2px;padding-left:2px;width:1px;text-decoration:none}.small_tab:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;padding-right:2px;padding-left:2px;text-align:center;font-weight:bold;width:1px;text-decoration:none}.small_tab_pref{background-color:#f6f6f6;text-align:center;width:1px}.small_tab_pref:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;text-align:center;font-weight:bold;width:1px;text-decoration:none}.L_butt2_1{padding-right:5px;text-decoration:none;vertical-align:middle;cursor:default}.L_butt2_1:hover{padding-right:5px;color:#000;text-decoration:none;vertical-align:middle;cursor:default}.bor{width:10px;height:10px}#osn_tab{position:absolute;background-color:#fff;color:#000;width:100% !important}.designer_header{background-color:#f6f6f6;border-top:20px solid #fff;color:#333;display:block;height:28px;margin-right:-20px;margin-top:-60px;padding:5px 20px;position:fixed;text-align:center;width:100%;z-index:101}.designer_header a{display:block;float:right;margin:3px 1px 4px;height:20px}.designer_header .M_bord{display:block;float:right;margin:4px;height:20px;width:2px}.designer_header a.first{margin-left:1em}.designer_header a.last{margin-right:1em}a.M_butt_Selected_down_IE,a.M_butt_Selected_down,a.M_butt_Selected_down_IE:hover,a.M_butt_Selected_down:hover,a.M_butt:hover{background-color:#eee;color:#000}#layer_menu{z-index:98;position:relative;float:left;background-color:#f6f6f6;border:#ccc solid 1px;border-top:0;margin-left:-20px}.content_fullscreen #layer_menu{margin-left:0}#layer_menu.float-start{margin-right:-20px}.content_fullscreen #layer_menu.float-start{margin-right:0}#layer_upd_relation{position:absolute;right:637px;top:224px;z-index:100}#layer_new_relation,#designer_optionse{position:absolute;right:636px;top:85px;z-index:100;width:153px}#layer_menu_sizer{background-image:url("../img/designer/resize.png");cursor:ew-resize}#layer_menu_sizer .icon{margin:0}.panel{position:fixed;top:90px;left:0;width:350px;max-height:500px;display:none;overflow:auto;padding-top:34px;z-index:102}a.trigger{position:fixed;text-decoration:none;top:90px;left:0;color:#fff;padding:10px 15px 10px 40px;background:#333 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #444;display:block;z-index:102}a.trigger:hover{color:#080808;background:#fff696 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #999}a.active.trigger{background:#222 url("../img/designer/minus.png") 15% 55% no-repeat;z-index:999}a.active.trigger:hover{background:#fff696 url("../img/designer/minus.png") 15% 55% no-repeat}.toggle_container .block{background-color:#eee;border-top:1px solid #999}.toggle_container .block img.ic_s_info{filter:invert(70%)}.history_table{opacity:1;cursor:pointer}.history_table2{opacity:.7}#ab{min-width:300px}#ab .ui-accordion-content{padding:0}#foreignkeychk{text-align:right;cursor:pointer}.side-menu{float:right;position:fixed;width:auto;height:auto;background:#efefef;border:1px solid #ccc;border-top:0;overflow:hidden;z-index:50;padding:2px;margin-top:0;margin-right:-20px}.content_fullscreen .side-menu{margin-right:0}.side-menu.right{float:left;left:0}.content_fullscreen .side-menu.right{margin-left:0}.side-menu .hide{display:none}.side-menu a{display:block;float:none;overflow:hidden}.side-menu img,.side-menu span,.side-menu .text{float:right;padding-right:2px}#name-panel{border-bottom:1px solid #ccc;text-align:center;background:#efefef;font-size:1.2em;padding:10px;font-weight:bold;margin-top:-20px;margin-right:-20px;margin-left:-20px}.content_fullscreen #name-panel{margin-top:0;margin-right:0;margin-left:0}#container-form{width:100%;position:absolute;right:0}.CodeMirror{font-family:"Consolas","Lucida Grande",monospace !important;height:20rem;border:1px solid #ccc;direction:rtl}#pma_console .CodeMirror{border:none}.CodeMirror *{font-family:"Consolas","Lucida Grande",monospace}#inline_editor_outer .CodeMirror{height:6em;margin-bottom:10px}.insertRowTable .CodeMirror{min-height:9em;min-width:24em}#pma_console .CodeMirror-gutters{background-color:initial;border:none}span.cm-keyword,span.cm-statement-verb{color:#909}span.cm-variable{color:#000}span.cm-comment{color:olive}span.cm-mysql-string{color:green}span.cm-operator{color:#f0f}span.cm-mysql-word{color:#000}span.cm-builtin{color:red}span.cm-variable-2{color:#f90}span.cm-variable-3{color:blue}span.cm-separator{color:#f0f}span.cm-number{color:teal}.autocomplete-column-name{display:inline-block}.autocomplete-column-hint{display:inline-block;float:left;color:#666;margin-right:1em}.CodeMirror-hints{z-index:1999}.jqplot-target{position:relative;color:#222;font-family:"Open Sans","Segoe UI",sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-left:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-right:10px;margin-left:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;right:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;right:15px;vertical-align:bottom}.jqplot-yaxis-tick{left:0;top:15px;text-align:left}.jqplot-yaxis-tick.jqplot-breakTick{left:-20px;margin-left:0;padding:1px 5px 1px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{right:0;top:15px;text-align:right}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-left:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-right:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-right:12px;margin-left:12px;background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}table.jqplot-cursor-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-right-width:6px;border-left-width:6px;border-top-style:solid;border-bottom-style:solid;border-right-style:solid;border-left-style:solid}.jqplot-title{top:0;right:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-right:2px;padding-left:2px;color:#333}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(230,230,230,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(245,245,245,.3)}.icon{margin:0;margin-right:.3em;padding:0 !important;width:16px;height:16px}.icon_fulltext{width:50px;height:19px}.ic_asc_order{background-image:url("../img/asc_order.png")}.ic_b_bookmark{background-image:url("../img/b_bookmark.png")}.ic_b_browse{background-image:url("../img/b_browse.png")}.ic_b_calendar{background-image:url("../img/b_calendar.png")}.ic_b_chart{background-image:url("../img/b_chart.png")}.ic_b_close{background-image:url("../img/b_close.png")}.ic_b_column_add{background-image:url("../img/b_column_add.png")}.ic_b_comment{background-image:url("../img/b_comment.png")}.ic_b_dbstatistics{background-image:url("../img/b_dbstatistics.png")}.ic_b_deltbl{background-image:url("../img/b_deltbl.png")}.ic_b_docs{background-image:url("../img/b_docs.png")}.ic_b_docsql{background-image:url("../img/b_docsql.png")}.ic_b_drop{background-image:url("../img/b_drop.png")}.ic_b_edit{background-image:url("../img/b_edit.png")}.ic_b_empty{background-image:url("../img/b_empty.png")}.ic_b_engine{background-image:url("../img/b_engine.png")}.ic_b_event_add{background-image:url("../img/b_event_add.png")}.ic_b_events{background-image:url("../img/b_events.png")}.ic_b_export{background-image:url("../img/b_export.png")}.ic_b_favorite{background-image:url("../img/b_favorite.png")}.ic_b_find_replace{background-image:url("../img/b_find_replace.png")}.ic_b_firstpage{background-image:url("../img/b_firstpage.png")}.ic_b_ftext{background-image:url("../img/b_ftext.png")}.ic_b_globe{background-image:url("../img/b_globe.gif")}.ic_b_group{background-image:url("../img/b_group.png")}.ic_b_help{background-image:url("../img/b_help.png")}.ic_b_home{background-image:url("../img/b_home.png")}.ic_b_import{background-image:url("../img/b_import.png")}.ic_b_index{background-image:url("../img/b_index.png")}.ic_b_index_add{background-image:url("../img/b_index_add.png")}.ic_b_inline_edit{background-image:url("../img/b_inline_edit.png")}.ic_b_insrow{background-image:url("../img/b_insrow.png")}.ic_b_lastpage{background-image:url("../img/b_lastpage.png")}.ic_b_minus{background-image:url("../img/b_minus.png")}.ic_b_more{background-image:url("../img/b_more.png")}.ic_b_move{background-image:url("../img/b_move.png")}.ic_b_newdb{background-image:url("../img/b_newdb.png")}.ic_db_drop{background-image:url("../img/b_deltbl.png")}.ic_b_newtbl{background-image:url("../img/b_newtbl.png")}.ic_b_nextpage{background-image:url("../img/b_nextpage.png")}.ic_b_no_favorite{background-image:url("../img/b_no_favorite.png")}.ic_b_pdfdoc{background-image:url("../img/b_pdfdoc.png")}.ic_b_plugin{background-image:url("../img/b_plugin.png")}.ic_b_plus{background-image:url("../img/b_plus.png")}.ic_b_prevpage{background-image:url("../img/b_prevpage.png")}.ic_b_primary{background-image:url("../img/b_primary.png")}.ic_b_print{background-image:url("../img/b_print.png")}.ic_b_props{background-image:url("../img/b_props.png")}.ic_b_relations{background-image:url("../img/b_relations.png")}.ic_b_report{background-image:url("../img/b_report.png")}.ic_b_rename{background-image:url("../img/b_rename.svg")}.ic_b_routine_add{background-image:url("../img/b_routine_add.png")}.ic_b_routines{background-image:url("../img/b_routines.png")}.ic_b_save{background-image:url("../img/b_save.png")}.ic_b_saveimage{background-image:url("../img/b_saveimage.png")}.ic_b_sbrowse{background-image:url("../img/b_sbrowse.png")}.ic_b_sdb{background-image:url("../img/b_sdb.png");width:10px;height:10px}.ic_b_search{background-image:url("../img/b_search.png")}.ic_b_select{background-image:url("../img/b_select.png")}.ic_b_snewtbl{background-image:url("../img/b_snewtbl.png")}.ic_b_spatial{background-image:url("../img/b_spatial.png")}.ic_b_sql{background-image:url("../img/b_sql.png")}.ic_b_sqldoc{background-image:url("../img/b_sqldoc.png")}.ic_b_sqlhelp{background-image:url("../img/b_sqlhelp.png")}.ic_b_table_add{background-image:url("../img/b_table_add.png")}.ic_b_tblanalyse{background-image:url("../img/b_tblanalyse.png")}.ic_b_tblexport{background-image:url("../img/b_tblexport.png")}.ic_b_tblimport{background-image:url("../img/b_tblimport.png")}.ic_b_tblops{background-image:url("../img/b_tblops.png")}.ic_b_tbloptimize{background-image:url("../img/b_tbloptimize.png")}.ic_b_tipp{background-image:url("../img/b_tipp.png")}.ic_b_trigger_add{background-image:url("../img/b_trigger_add.png")}.ic_b_triggers{background-image:url("../img/b_triggers.png")}.ic_b_undo{background-image:url("../../pmahomme/img/b_undo.png")}.ic_b_unique{background-image:url("../img/b_unique.png")}.ic_b_usradd{background-image:url("../img/b_usradd.png")}.ic_b_usrcheck{background-image:url("../img/b_usrcheck.png")}.ic_b_usrdrop{background-image:url("../img/b_usrdrop.png")}.ic_b_usredit{background-image:url("../img/b_usredit.png")}.ic_b_usrlist{background-image:url("../img/b_usrlist.png")}.ic_b_versions{background-image:url("../img/b_versions.png")}.ic_b_view{background-image:url("../img/b_view.png")}.ic_b_view_add{background-image:url("../img/b_view_add.png")}.ic_b_views{background-image:url("../img/b_views.png")}.ic_bd_browse{background-image:url("../img/bd_browse.png")}.ic_bd_deltbl{background-image:url("../img/bd_deltbl.png")}.ic_bd_drop{background-image:url("../img/bd_drop.png")}.ic_bd_edit{background-image:url("../img/bd_edit.png")}.ic_bd_empty{background-image:url("../img/bd_empty.png")}.ic_bd_export{background-image:url("../img/bd_export.png")}.ic_bd_firstpage{background-image:url("../img/bd_firstpage.png")}.ic_bd_ftext{background-image:url("../img/bd_ftext.png")}.ic_bd_index{background-image:url("../img/bd_index.png")}.ic_bd_insrow{background-image:url("../img/bd_insrow.png")}.ic_bd_lastpage{background-image:url("../img/bd_lastpage.png")}.ic_bd_nextpage{background-image:url("../img/bd_nextpage.png")}.ic_bd_prevpage{background-image:url("../img/bd_prevpage.png")}.ic_bd_primary{background-image:url("../img/bd_primary.png")}.ic_bd_routine_add{background-image:url("../img/bd_routine_add.png")}.ic_bd_sbrowse{background-image:url("../img/bd_sbrowse.png")}.ic_bd_select{background-image:url("../img/bd_select.png")}.ic_bd_spatial{background-image:url("../img/bd_spatial.png")}.ic_bd_unique{background-image:url("../img/bd_unique.png")}.ic_centralColumns{background-image:url("../img/centralColumns.png")}.ic_centralColumns_add{background-image:url("../img/centralColumns_add.png")}.ic_centralColumns_delete{background-image:url("../img/centralColumns_delete.png")}.ic_col_drop{background-image:url("../img/col_drop.png")}.ic_console{background-image:url("../img/console.png")}.ic_database{background-image:url("../img/database.png")}.ic_eye{background-image:url("../img/eye.png")}.ic_eye_grey{background-image:url("../img/eye_grey.png")}.ic_hide{background-image:url("../img/hide.png")}.ic_item{background-image:url("../img/item.png");width:9px;height:9px}.ic_lightbulb{background-image:url("../img/lightbulb.png")}.ic_lightbulb_off{background-image:url("../img/lightbulb_off.png")}.ic_more{background-image:url("../img/more.png");width:13px}.ic_new_data{background-image:url("../img/new_data.png")}.ic_new_data_hovered{background-image:url("../img/new_data_hovered.png")}.ic_new_data_selected{background-image:url("../img/new_data_selected.png")}.ic_new_data_selected_hovered{background-image:url("../img/new_data_selected_hovered.png")}.ic_new_struct{background-image:url("../img/new_struct.png")}.ic_new_struct_hovered{background-image:url("../img/new_struct_hovered.png")}.ic_new_struct_selected{background-image:url("../img/new_struct_selected.png")}.ic_new_struct_selected_hovered{background-image:url("../img/new_struct_selected_hovered.png")}.ic_normalize{background-image:url("../img/normalize.png")}.ic_pause{background-image:url("../img/pause.png")}.ic_php_sym{background-image:url("../img/php_sym.png")}.ic_play{background-image:url("../img/play.png")}.ic_s_asc{background-image:url("../img/s_asc.png")}.ic_s_asci{background-image:url("../img/s_asci.png")}.ic_s_attention{background-image:url("../img/s_attention.png")}.ic_s_cancel{background-image:url("../img/s_cancel.png")}.ic_s_cancel2{background-image:url("../img/s_cancel2.png")}.ic_s_cog{background-image:url("../img/s_cog.png")}.ic_s_db{background-image:url("../img/s_db.png")}.ic_s_desc{background-image:url("../img/s_desc.png")}.ic_s_error{background-image:url("../img/s_error.png")}.ic_s_host{background-image:url("../img/s_host.png")}.ic_s_info{background-image:url("../img/s_info.png")}.ic_s_lang{background-image:url("../img/s_lang.png")}.ic_s_link{background-image:url("../img/s_link.png")}.ic_s_lock{background-image:url("../img/s_lock.png")}.ic_s_unlock{background-image:url("../img/lock_open.png")}.ic_s_loggoff{background-image:url("../img/s_loggoff.png")}.ic_s_notice{background-image:url("../img/s_notice.png")}.ic_s_okay{background-image:url("../img/s_okay.png")}.ic_s_passwd{background-image:url("../img/s_passwd.png")}.ic_s_process{background-image:url("../img/s_process.png")}.ic_s_really{background-image:url("../img/s_really.png");width:11px;height:11px}.ic_s_reload{background-image:url("../img/s_reload.png")}.ic_s_replication{background-image:url("../img/s_replication.png")}.ic_s_rights{background-image:url("../img/s_rights.png")}.ic_s_sortable{background-image:url("../img/s_sortable.png")}.ic_s_status{background-image:url("../img/s_status.png")}.ic_s_success{background-image:url("../img/s_success.png")}.ic_s_sync{background-image:url("../img/s_sync.png")}.ic_s_tbl{background-image:url("../img/s_tbl.png")}.ic_s_theme{background-image:url("../img/s_theme.png")}.ic_s_top{background-image:url("../img/s_top.png")}.ic_s_unlink{background-image:url("../img/s_unlink.png")}.ic_s_vars{background-image:url("../img/s_vars.png")}.ic_s_views{background-image:url("../img/s_views.png")}.ic_show{background-image:url("../img/show.png")}.ic_window-new{background-image:url("../img/window-new.png")}.ic_ajax_clock_small{background-image:url("../img/ajax_clock_small.gif")}.ic_s_partialtext{background-image:url("../img/s_partialtext.png")}.ic_s_fulltext{background-image:url("../img/s_fulltext.png")}*:focus{outline:none}body{text-align:right}h1,.h1{font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;color:#666;margin:0;letter-spacing:-1px;line-height:1}h2,.h2{color:#666;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;margin-top:10px;margin-bottom:0;line-height:1;letter-spacing:-1px}h3,.h3{font-family:"Open Sans Extrabold","Segoe Black",sans-serif;text-transform:uppercase}input,select{font-size:1em}textarea{font-family:"Consolas","Lucida Grande",monospace;font-size:1.2em}.table td{touch-action:manipulation;vertical-align:middle}.table .table-light th{font-family:"Open Sans Bold",sans-serif;font-weight:normal;border-bottom:1px solid #ddd}.table .table-light th a{color:#666}@media only screen and (min-width: 768px){.table th.position-sticky{top:87px}}select#fieldsSelect,textarea#sqlquery{margin:0;height:20rem}select.form-control{padding:4px}.nav-pills .nav-link{margin:0;padding:5px 15px;font-weight:normal;background-color:#f6f6f6;color:#666;text-transform:uppercase;font-family:"Open Sans Extrabold","Segoe Black",sans-serif;border-radius:0}.nav-pills .nav-link:hover{background-color:#f7f7f7;text-decoration:underline}.nav-pills .nav-link img{margin-left:.5em;vertical-align:-3px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background:#ccc;color:#666}.nav-tabs{font-weight:bold}.nav-tabs .nav-link{font-family:"Open Sans Bold",sans-serif;background-color:#f2f2f2;color:#555;border-color:#fff #fff #ddd;margin-left:.4em;padding:7px 10px}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{background-color:#e5e5e5}.nav-tabs .nav-link.active:hover,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-item.show .nav-link:hover,.nav-tabs .nav-item.show .nav-link:focus{background-color:#fff}.navbar{background-color:#f7f7f7;padding-right:20px;padding-left:20px}.navbar-nav .icon{margin-left:.5em;vertical-align:-3px}.navbar-nav .nav-item{padding:8px 10px}.navbar-nav .nav-item.active{background:#fff}.navbar-nav .nav-link{text-transform:uppercase;font-family:"Open Sans Extrabold","Segoe Black",sans-serif;font-weight:normal}.card{margin-top:1rem}.card-header{font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;font-size:1rem;border-bottom:0}.card-footer{border-top:0}#maincontainer .card{background:none;border:none;margin:0}#maincontainer .card-header{background:none;color:#666;font-size:2.8em;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;padding:0}#maincontainer .card-body ul{padding-right:0}.breadcrumb-navbar{padding:.89rem 2rem;margin-bottom:0;background-color:#666}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-right:.5rem}.breadcrumb-navbar .breadcrumb-item .icon{margin:0}.breadcrumb-navbar{color:#fff}.breadcrumb-navbar a{color:inherit}.breadcrumb-navbar a:hover{text-decoration:none}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-item::before,.breadcrumb-navbar .breadcrumb-item::before{width:10px;color:#eee;content:"›"}.breadcrumb-navbar .breadcrumb-item .icon{display:none}.breadcrumb-navbar .breadcrumb-comment{font-style:italic}.alert{text-align:right}.alert a{text-decoration:underline}.alert h1,.alert .h1{margin-bottom:.2em}.alert-primary{color:#fff;background-color:#555;background-image:none}.alert-primary a{color:#fff}.alert-primary h1,.alert-primary .h1{color:#fff}.alert-success{color:#fff;background-color:#888;background-image:none}.alert-success a{color:#fff}.alert-success h1,.alert-success .h1{color:#fff}.alert-danger{color:#fff;background-color:#666;background-image:none}.alert-danger a{color:#fff}.alert-danger h1,.alert-danger .h1{color:#fff}#maincontainer .list-group{margin:1rem 0 0;padding-bottom:10px}#maincontainer .list-group-item{border:none;display:list-item;padding:0}#li_select_server.list-group-item,#li_change_password.list-group-item,#li_select_mysql_collation.list-group-item,#li_user_preferences.list-group-item,#li_select_lang.list-group-item,#li_select_theme.list-group-item{display:block;padding-top:10px;padding-bottom:10px;padding-left:10px;padding-right:20px}#li_select_server.list-group-item:hover,#li_change_password.list-group-item:hover,#li_select_mysql_collation.list-group-item:hover,#li_user_preferences.list-group-item:hover,#li_select_lang.list-group-item:hover,#li_select_theme.list-group-item:hover{background:#f6f6f6}#li_select_theme::after{content:"Scheme: mono";margin-right:10px}.modal-header{color:#fff;background-color:#666}@media print{.hide{display:none}body,table,th,td{color:#000;background-color:#fff;font-size:12px}a:link{color:#000;text-decoration:none}img{border:0}table,th,td{border:.1em solid #000;background-color:#fff}table{border-collapse:collapse;border-spacing:.2em}thead{border-collapse:collapse;border-spacing:.2em;border:.1em solid #000;font-weight:900}th,td{padding:.2em}thead th{font-weight:bold;background-color:#e5e5e5;border:.1em solid #000}th.column_heading,th.column_action{border:.1em solid #000}table tr.odd,table tr.even{border-right:.1em solid #000}table tr.odd th,table tr.even th{border-bottom:.1em solid #000}table.data th{border-bottom:.1em solid #000}#page_content{position:absolute;right:0;top:0;width:95%;float:none}.sqlOuter{color:#000}.cDrop,.cEdit,.cList,.cCpy,.cPointer{display:none}table tbody:first-of-type tr:nth-child(odd){background:#fff}table tbody:first-of-type tr:nth-child(odd) th{background:#fff}table tbody:first-of-type tr:nth-child(even){background:#dfdfdf}table tbody:first-of-type tr:nth-child(even) th{background:#dfdfdf}.column_attribute{font-size:100%}} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbm8tdGhlbWUuY3NzIiwiLi4vc2Nzcy9fZm9udC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yb290LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3JlYm9vdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3ZlbmRvci9fcmZzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3ZhcmlhYmxlcy5zY3NzIiwiLi4vc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19ib3JkZXItcmFkaXVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3R5cGUuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2xpc3RzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2NvbnRhaW5lcnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2NvbnRhaW5lci5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYnJlYWtwb2ludHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fZ3JpZC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fZ3JpZC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190YWJsZXMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RhYmxlLXZhcmlhbnRzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2xhYmVscy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLXRleHQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1jb250cm9sLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tc2VsZWN0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY2hlY2suc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1yYW5nZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mbG9hdGluZy1sYWJlbHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9faW5wdXQtZ3JvdXAuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2Zvcm1zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Z1bmN0aW9ucy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3RyYW5zaXRpb25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Ryb3Bkb3duLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2J1dHRvbi1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXYuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2NhcmQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYWNjb3JkaW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JyZWFkY3J1bWIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19iYWRnZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hbGVydC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYWxlcnQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jbG9zZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19tb2RhbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYmFja2Ryb3Auc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fc3Bpbm5lcnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2NsZWFyZml4LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fY29sb3JlZC1saW5rcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3JhdGlvLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fcG9zaXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19zdGFja3Muc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL192aXN1YWxseS1oaWRkZW4uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3N0cmV0Y2hlZC1saW5rLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdGV4dC10cnVuY2F0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190ZXh0LXRydW5jYXRlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdnIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3V0aWxpdGllcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fYXBpLnNjc3MiLCIuLi9zY3NzL19jb21tb24uc2NzcyIsIi4uL3Njc3MvX2VudW0tZWRpdG9yLnNjc3MiLCIuLi9zY3NzL19naXMuc2NzcyIsIi4uL3Njc3MvX25hdmlnYXRpb24uc2NzcyIsIi4uL3Njc3MvX2Rlc2lnbmVyLnNjc3MiLCIuLi9zY3NzL19jb2RlbWlycm9yLnNjc3MiLCIuLi9zY3NzL19qcXBsb3Quc2NzcyIsIi4uL3Njc3MvX2ljb25zLnNjc3MiLCIuLi9zY3NzL19yZWJvb3Quc2NzcyIsIi4uL3Njc3MvX3RhYmxlcy5zY3NzIiwiLi4vc2Nzcy9fZm9ybXMuc2NzcyIsIi4uL3Njc3MvX25hdi5zY3NzIiwiLi4vc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi9zY3NzL19jYXJkLnNjc3MiLCIuLi8uLi9ib290c3RyYXAvc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYWxlcnQuc2NzcyIsIi4uL3Njc3MvX2xpc3QtZ3JvdXAuc2NzcyIsIi4uL3Njc3MvX21vZGFsLnNjc3MiLCIuLi9zY3NzL19wcmludC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdDQUEsdUJBQ0UsQ0FBQSxtREFDQSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSxXQUdGLDZCQUNFLENBQUEsK0RBQ0EsQ0FBQSxrQkFDQSxDQUFBLGlCQUNBLENBQUEsV0FHRiw0QkFDRSxDQUFBLDZEQUNBLENBQUEsa0JBQ0EsQ0FBQSxpQkFDQSxDQUFBLFdBR0YsaUNBQ0UsQ0FBQSx1RUFDQSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSxNQ3pCRixrQkFRSSxDQUFBLG9CQUFBLENBQUEsb0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGlCQUFBLENBQUEsb0JBQUEsQ0FBQSxvQkFBQSxDQUFBLG1CQUFBLENBQUEsa0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGdCQUFBLENBQUEsa0JBQUEsQ0FBQSx1QkFBQSxDQUFBLHNCQUlBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLGtCQUlBLENBQUEsb0JBQUEsQ0FBQSxxQkFBQSxDQUFBLGtCQUFBLENBQUEscUJBQUEsQ0FBQSxvQkFB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UEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLE1BUEosdUJBT0ksQ0FBQSxNQVBKLDRCQU9JLENBQUEsTUFQSiwyQkFPSSxDQUFBLE1BUEosMEJBT0ksQ0FBQSxNQVBKLDRCQU9JLENBQUEsTUFQSiwwQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxNQVBKLHdCQU9JLENBQUEsTUFQSiw2QkFPSSxDQUFBLE1BUEosNEJBT0ksQ0FBQSxNQVBKLDJCQU9JLENBQUEsTUFQSiw2QkFPSSxDQUFBLE1BUEosMkJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsTUFQSiwwQkFPSSxDQUFBLE1BUEosK0JBT0ksQ0FBQSxNQVBKLDhCQU9JLENBQUEsTUFQSiw2QkFPSSxDQUFBLE1BUEosK0JBT0ksQ0FBQSxNQVBKLDZCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLE1BUEoseUJBT0ksQ0FBQSxNQVBKLDhCQU9JLENBQUEsTUFQSiw2QkFPSSxDQUFBLE1BUEosNEJBT0ksQ0FBQSxNQVBKLDhCQU9JLENBQUEsTUFQSiw0QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxLQVBKLG9CQU9JLENBQUEsS0FQSix5QkFPSSxDQUFBLEtBUEosd0JBT0ksQ0FBQSxLQVBKLHVCQU9JLENBQUEsS0FQSix5QkFPSSxDQUFBLEtBUEosdUJBT0ksQ0FBQSxNQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxNQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxNQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxNQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxNQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxNQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxNQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxNQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxNQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxNQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxNQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxNQVBKLDJC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NkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFlBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSwwQkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFlBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFlBUEosMEJBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxZQVBKLDJCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsWUFQSiw2QkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFlBUEosNEJBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDRCQU9J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LFNBUEosNkJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxZQVBKLDRCQU9JLENBQUEsUUFQSixvQkFPSSxDQUFBLFFBUEoseUJBT0ksQ0FBQSxRQVBKLHdCQU9JLENBQUEsUUFQSix1QkFPSSxDQUFBLFFBUEoseUJBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLDBCQUFBLENBQUEsU0FQSiw4QkFPSSxDQUFBLCtCQUFBLENBQUEsU0FQSiw2QkFPSSxDQUFBLDhCQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLDZCQUFBLENBQUEsU0FQSiw4QkFPSSxDQUFBLCtCQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLDZCQUFBLENBQUEsU0FQSix3QkFPSSxDQUFBLDJCQUFBLENBQUEsU0FQSiw2QkFPSSxDQUFBLGdDQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLCtCQUFBLENBQUEsU0FQSiwyQkFPSSxDQUFBLDhCQUFBLENBQUEsU0FQSiw2QkFPSSxDQUFBLGdDQUFBLENBQUEsU0FQSiwyQkFPSSxDQUFBLDhCQUFBLENBQUEsU0FQSix3QkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosZ0NBT0ksQ0FBQSxTQVBKLCtCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosZ0NBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsZUFQSiwyQkFPSSxDQUFB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 */ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/css/theme.css b/Sources/php_script/script/phpMyAdmin/themes/metro/css/theme.css new file mode 100644 index 0000000..f1df08c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/metro/css/theme.css @@ -0,0 +1,3 @@ +@font-face{font-family:"Open Sans";src:local("☺"),local("Open Sans"),local("OpenSans");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Light";src:local("☺"),local("Open Sans Light"),local("OpenSans-Light");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Bold";src:local("☺"),local("Open Sans Bold"),local("OpenSans-Bold");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Extrabold";src:local("☺"),local("Open Sans Extrabold"),local("OpenSans-Extrabold");font-weight:normal;font-style:normal}:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #377796;--bs-secondary: #ccc;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 55, 119, 150;--bs-secondary-rgb: 204, 204, 204;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 68, 68, 68;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: "Consolas", "Lucida Grande", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: Open Sans, Segoe UI, sans-serif;--bs-body-font-size: 0.6875rem;--bs-body-font-weight: 400;--bs-body-line-height: 1;--bs-body-color: #444;--bs-body-bg: #fff}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:normal;line-height:1.2}h1,.h1{font-size:3em}h2,.h2{font-size:3.6em}h3,.h3{font-size:1rem}h4,.h4{font-size:1.03125rem}h5,.h5{font-size:0.859375rem}h6,.h6{font-size:0.6875rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#377796;text-decoration:none}a:hover{color:#377796;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr /* rtl:ignore */;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:0.859375rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:0.859375rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x, 0.75rem);padding-left:var(--bs-gutter-x, 0.75rem);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #444;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #444;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #000;--bs-table-hover-bg: #eee;width:100%;margin-bottom:1rem;color:#444;vertical-align:top;border-color:#ddd}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:0;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:0 solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:0 0}.table-bordered>:not(caption)>*>*{border-width:0 0}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(even)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #d7e4ea;--bs-table-striped-bg: #ccd9de;--bs-table-striped-color: #000;--bs-table-active-bg: #c2cdd3;--bs-table-active-color: #000;--bs-table-hover-bg: #c7d3d8;--bs-table-hover-color: #000;color:#000;border-color:#c2cdd3}.table-secondary{--bs-table-bg: whitesmoke;--bs-table-striped-bg: #e9e9e9;--bs-table-striped-color: #000;--bs-table-active-bg: #dddddd;--bs-table-active-color: #000;--bs-table-hover-bg: #e3e3e3;--bs-table-hover-color: #000;color:#000;border-color:#ddd}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:0.859375rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.6015625rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:0.6875rem;font-weight:400;line-height:1;color:#444;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#444;background-color:#fff;border-color:#9bbbcb;outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.form-control::-webkit-date-and-time-value{height:1em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1;color:#444;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1em + 1rem + 2px);padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1em;border-radius:0}.form-control-color::-webkit-color-swatch{height:1em;border-radius:0}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:0.6875rem;font-weight:400;line-height:1;color:#444;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#9bbbcb;outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #444}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.6015625rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:0.859375rem;border-radius:.3rem}.form-check{display:block;min-height:.6875rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:0em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#9bbbcb;outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.form-check-input:checked{background-color:#377796;border-color:#377796}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#377796;border-color:#377796;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%239bbbcb'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(55,119,150,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(55,119,150,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#377796;border:0;border-radius:1rem;-webkit-appearance:none;appearance:none}.form-range::-webkit-slider-thumb:active{background-color:#c3d6e0}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#377796;border:0;border-radius:1rem;-moz-appearance:none;appearance:none}.form-range::-moz-range-thumb:active{background-color:#c3d6e0}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:0.6875rem;font-weight:400;line-height:1;color:#444;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:0}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.6015625rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:0}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.25em + 0.1875rem) center;background-size:calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1em + 0.75rem);background-position:top calc(0.25em + 0.1875rem) right calc(0.25em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.6015625rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:0}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.25em + 0.1875rem) center;background-size:calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1em + 0.75rem);background-position:top calc(0.25em + 0.1875rem) right calc(0.25em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1;color:#444;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .5rem;font-size:0.6875rem;border-radius:0}.btn:hover{color:#444;text-decoration:none}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#377796;border-color:#377796}.btn-primary:hover{color:#fff;background-color:#2f6580;border-color:#2c5f78}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#2f6580;border-color:#2c5f78;box-shadow:0 0 0 .25rem rgba(85,139,166,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#2c5f78;border-color:#295971}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(85,139,166,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#377796;border-color:#377796}.btn-secondary{color:#000;background-color:#ccc;border-color:#ccc}.btn-secondary:hover{color:#000;background-color:#d4d4d4;border-color:#d1d1d1}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#000;background-color:#d4d4d4;border-color:#d1d1d1;box-shadow:0 0 0 .25rem rgba(173,173,173,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#000;background-color:#d6d6d6;border-color:#d1d1d1}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(173,173,173,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#000;background-color:#ccc;border-color:#ccc}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#377796;border-color:#377796}.btn-outline-primary:hover{color:#fff;background-color:#377796;border-color:#377796}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(55,119,150,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#377796;border-color:#377796}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(55,119,150,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#377796;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#ccc;border-color:#ccc}.btn-outline-secondary:hover{color:#000;background-color:#ccc;border-color:#ccc}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(204,204,204,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#000;background-color:#ccc;border-color:#ccc}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(204,204,204,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#ccc;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:#377796;text-decoration:none}.btn-link:hover{color:#377796;text-decoration:underline}.btn-link:focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden}.collapsing.collapse-horizontal{width:0;height:auto}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:0.6875rem;color:#444;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:0}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#377796}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:0.6015625rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#377796}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#377796}.nav-link:hover,.nav-link:focus{color:#377796;text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-left-radius:0;border-top-right-radius:0}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#fff #fff #ddd;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#000;background-color:#fff;border-color:#ddd #ddd #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:0}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#377796}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.4140625rem;padding-bottom:.4140625rem;margin-right:1rem;font-size:0.859375rem;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:0.859375rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:0}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:#666}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#666}.navbar-light .navbar-nav .nav-link{color:#666}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#333}.navbar-light .navbar-nav .nav-link.disabled{color:#666}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:#666}.navbar-light .navbar-toggler{color:#666;border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23666' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#666}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#666}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#f7f7f7;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:#f7f7f7;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:0 0 0 0}.card-footer{padding:.5rem 1rem;background-color:#f7f7f7;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 0 0}.card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.card-header-tabs .nav-link.active{background-color:#f7f7f7;border-bottom-color:#f7f7f7}.card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:0}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:0;border-top-right-radius:0}.card-img,.card-img-bottom{border-bottom-right-radius:0;border-bottom-left-radius:0}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:.375rem 1rem;font-size:0.6875rem;color:#444;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none}.accordion-button:not(.collapsed){color:#fff;background-color:#377796;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23444'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#9bbbcb;outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion-item:first-of-type .accordion-button{border-top-left-radius:0;border-top-right-radius:0}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#fff;content:var(--bs-breadcrumb-divider, none) /* rtl: var(--bs-breadcrumb-divider, none) */}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#377796;background-color:#f7f7f7;border:1px solid #ddd}.page-link:hover{z-index:2;color:#377796;text-decoration:none;background-color:#eee;border-color:#ddd}.page-link:focus{z-index:3;color:#377796;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#377796;border-color:#ddd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#ddd}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:0;border-bottom-left-radius:0}.page-item:last-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:0.859375rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.6015625rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1em;border:0 solid rgba(0,0,0,0);border-radius:0}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#21475a;background-color:#d7e4ea;border-color:#c3d6e0}.alert-primary .alert-link{color:#1a3948}.alert-secondary{color:#525252;background-color:#f5f5f5;border-color:#f0f0f0}.alert-secondary .alert-link{color:#424242}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#444;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;background-color:inherit;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:inherit}.list-group-item.active{z-index:2;color:#fff;background-color:#377796;border-color:#377796}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#21475a;background-color:#d7e4ea}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#21475a;background-color:#c2cdd3}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#21475a;border-color:#21475a}.list-group-item-secondary{color:#525252;background-color:#f5f5f5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#525252;background-color:#ddd}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#525252;border-color:#525252}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:0;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transform:translate(0, -50px)}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:0;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:.5rem 1rem;border-bottom:1px solid #ddd;border-top-left-radius:0;border-top-right-radius:0}.modal-header .btn-close{padding:.25rem .5rem;margin:-0.25rem -0.5rem -0.25rem auto}.modal-title{margin-bottom:0;line-height:1}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #ddd;border-bottom-right-radius:0;border-bottom-left-radius:0}.modal-footer>*{margin:.25rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}@-webkit-keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-right-color:rgba(0,0,0,0);border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#377796}.link-primary:hover,.link-primary:focus{color:#2c5f78}.link-secondary{color:#ccc}.link-secondary:hover,.link-secondary:focus{color:#d6d6d6}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #ddd !important}.border-0{border:0 !important}.border-top{border-top:1px solid #ddd !important}.border-top-0{border-top:0 !important}.border-end{border-right:1px solid #ddd !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:1px solid #ddd !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:1px solid #ddd !important}.border-start-0{border-left:0 !important}.border-primary{border-color:#377796 !important}.border-secondary{border-color:#ccc !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:3em !important}.fs-2{font-size:3.6em !important}.fs-3{font-size:1rem !important}.fs-4{font-size:1.03125rem !important}.fs-5{font-size:0.859375rem !important}.fs-6{font-size:0.6875rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:0 !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:0 !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-end{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-bottom{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-start{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}#li_select_fontsize{display:none}font[color=red],span[style="color: #FF0000"]{color:#d44a26 !important}strong{font-weight:normal}body#loginform{margin:0;background-color:#666}body#loginform .card-header,body#loginform form#login_form label{display:none !important}body#loginform #page_content{background-color:#377796;margin:0 !important;padding:20px;margin-top:10% !important;min-height:240px}body#loginform div.container{color:#fff;text-align:left;width:48em;margin-left:auto;margin-right:auto}body#loginform div.container::before{color:#fff;background:url("../img/user.svg");content:"";float:left;margin-right:20px;margin-bottom:10px;background-color:#666;background-repeat:no-repeat;background-size:cover;overflow:hidden;height:240px;width:240px;line-height:1;text-align:center}body#loginform h1,body#loginform .h1{display:inline-block;text-align:left;color:#fff;font-size:2.5em;padding-top:0;margin-right:-50%;line-height:2}body#loginform a.logo,body#loginform .pma-fieldset legend{display:none}body#loginform .item{margin-bottom:10px}body#loginform input.textfield{width:100%;border:1px solid #fff;background:#eee;color:#666;box-sizing:border-box;margin:0}body#loginform input.textfield:hover,body#loginform input.textfield:focus{background-color:#fff;color:#333;box-sizing:border-box;margin:0}body#loginform input[type=submit]{background-color:#666;border:none;padding:7px;margin:0}body#loginform select{margin:0 !important;border:1px solid #377796;background:#377796;color:#eee;padding-left:0 !important;font-family:"Open Sans","Segoe UI",sans-serif;min-width:100%}body#loginform select:hover{border:1px solid #eee}body#loginform br{display:none}body#loginform .card-body{padding-top:0;padding-left:0;padding-right:0}body#loginform .card,body#loginform .card-footer,body#loginform .pma-fieldset{border:none;color:#eee;padding:0;margin-top:0;margin-bottom:10px;background:none}body#loginform .card:first-child,body#loginform .card-footer:first-child,body#loginform .pma-fieldset:first-child{border-bottom:none;margin:0}body#loginform .card.tblFooters,body#loginform .card-footer.tblFooters,body#loginform .pma-fieldset.tblFooters{border:none;margin:0;clear:none}.turnOffSelect{-webkit-user-select:none;-moz-user-select:none;user-select:none}#page_content{margin:20px !important}h2 img,.h2 img{display:none}h2 a img,.h2 a img{display:inline}.data{margin:10px 0}button.mult_submit,.checkall_box+label{text-decoration:none;color:#235a81;cursor:pointer;outline:none}button.mult_submit:hover,button.mult_submit:focus{text-decoration:underline;color:#235a81}.checkall_box+label:hover{text-decoration:underline;color:#235a81}dfn:hover{cursor:help}.data th{border-bottom:1px solid #ddd}.data th a:hover{color:#999 !important}.column_heading,.column_action{border:1px solid #ddd;background-color:#f6f6f6}a img{border:0}hr{color:#ddd;background-color:#ddd;border:0;height:1px}form{padding:0;margin:0;display:inline}input[type=text],input[type=password],input[type=number]{border:1px solid #ccc;color:#666;padding:5px;font-family:"Open Sans","Segoe UI",sans-serif;background-color:#fff}input[type=text]:focus,input[type=password]:focus,input[type=number]:focus{border:1px solid #428eb4;color:#444}input:not(.form-control)[type=text],input:not(.form-control)[type=password],input:not(.form-control)[type=number]{margin:6px}.sqlbutton{margin-top:1em;margin-left:0 !important;margin-right:14px !important}button:not(.accordion-button){margin-left:14px;padding:4px;color:#fff;text-decoration:none;background-color:#377796}textarea{overflow:visible;border:1px solid #ccc;color:#666;background-color:#fff}.pma-fieldset{margin-top:20px;border:1px solid #ddd;padding:20px;background-color:#f7f7f7}.pma-fieldset .pma-fieldset{margin:20px;margin-bottom:0;background-color:#fff;border:none}legend{float:none;padding:0 5px;width:initial;font-size:1em}button{display:inline}img,button{vertical-align:middle}select{border:1px solid #ccc;color:#666;padding:4px;font-family:"Open Sans","Segoe UI",sans-serif;background-color:#fff;max-width:17em}select:not(.form-select){margin:5px}select:focus{border:1px solid #428eb4;color:#444}.clearfloat{clear:both}.paddingtop{padding-top:1em}.separator{color:#fff}.result_query{background:#f7f7f7;margin-bottom:20px}div.tools{padding:10px;text-align:right}div.tools span{float:right;margin:6px 2px}div.tools a{color:#3a7ead !important}.pma-fieldset.tblFooters{margin-top:-1px;border-top:0;text-align:right;float:none;clear:both}div.null_div{height:20px;text-align:center;font-style:normal;min-width:50px}.pma-fieldset .formelement{float:left;margin-right:.5em}.pma-fieldset div[class=formelement]{white-space:normal}button.mult_submit{border:none;background-color:rgba(0,0,0,0);color:#377796;margin:0}.structure_actions_dropdown{background-color:#eee;color:#444}.structure_actions_dropdown .icon{vertical-align:middle !important}.condition{border-color:#d44a26 !important}th.condition{border:1px solid #d44a26;background:#d44a26;color:#fff !important}th.condition a{border:1px solid #d44a26;background:#d44a26;color:#fff !important}td.condition{border:1px solid}td.null{font-style:italic;color:#7d7d7d}table .valueHeader,table .value{text-align:right;white-space:normal}.value{font-family:"Consolas","Lucida Grande",monospace}img.lightbulb{cursor:pointer}.pdflayout{overflow:hidden;clip:inherit;background-color:#fff;display:none;border:1px solid #000;position:relative}.pdflayout_table{background:#d3dce3;color:#000;overflow:hidden;clip:inherit;z-index:2;display:inline;visibility:inherit;cursor:move;position:absolute;font-size:80%;border:1px dashed #000}.cm-sql-doc{text-decoration:none;border-bottom:1px dotted #999;color:inherit !important}.selectallarrow{margin-right:.3em;margin-left:.6em}.with-selected{margin-left:2em}#pma_errors,#pma_demo,#pma_footer{position:relative;padding:20px}#pma_errors #pma_errors{padding:0}.confirmation{color:#fff;background-color:#d44a26}.pma-fieldset.confirmation legend{background-color:#d44a26}.error{border:1px solid #d44a26 !important;padding:5px;color:#fff;background-color:#d44a26}.column_name{font-size:80%;margin:5px 2px}.new_central_col{width:100%}.tblcomment{font-size:70%;font-weight:normal;color:#009}.tblHeaders{font-family:"Open Sans Bold",sans-serif;color:#666;background:#f7f7f7;font-weight:normal}div.tools,.tblFooters{font-weight:normal;color:#666;background:#f7f7f7}.tblHeaders a:link,.tblHeaders a:active,.tblHeaders a:visited,div.tools a:link,div.tools a:active,div.tools a:visited,.tblFooters a:link,.tblFooters a:active,.tblFooters a:visited{color:blue}.tblHeaders a:hover,div.tools a:hover,.tblFooters a:hover{color:red}.disabled{color:#666}.disabled a:link,.disabled a:active,.disabled a:visited{color:#666}.disabled a:hover{color:#666;text-decoration:none}tr.disabled td,td.disabled{background-color:#f3f3f3;color:#aaa}.pre_wrap{white-space:pre-wrap}.pre_wrap br{display:none}li.last.database{margin-bottom:15px !important}div#dataDisplay input,div#dataDisplay select{margin:0;margin-right:.5em}div#dataDisplay th{line-height:2em}img.calendar{border:none}form.clock{text-align:center}div#tablestatistics table{float:left;margin-bottom:.5em;margin-right:1.5em;margin-top:.5em;min-width:16em}#topmenucontainer{width:100%}#page_nav_icons{position:fixed;top:0;right:0;z-index:99;padding:.89rem 0}#page_settings_icon{cursor:pointer;display:none}#page_settings_modal,#pma_navigation_settings{display:none}#span_table_comment{font-weight:normal;font-style:italic;white-space:nowrap;margin-left:10px}#textSQLDUMP{width:95%;height:95%;font-family:"Consolas","Lucida Grande",monospace;font-size:110%}#TooltipContainer{position:absolute;z-index:99;width:20em;height:auto;overflow:visible;visibility:hidden;background-color:#ffc;color:#060;border:.1em solid #000;padding:.5em}#fieldset_add_user_login div.item{display:flex;align-items:center;border-bottom:1px solid #ddd;padding-bottom:.3em;margin-bottom:.3em}#fieldset_add_user_login label{float:left;display:block;width:10em;max-width:100%;text-align:right;padding-right:.5em;margin-bottom:0}#fieldset_add_user_login span.options{float:left;display:block;width:12em;max-width:100%;padding-right:.5em}#fieldset_add_user_login span.options #select_pred_username,#fieldset_add_user_login span.options #select_pred_hostname,#fieldset_add_user_login span.options #select_pred_password{width:100%;max-width:100%}#fieldset_add_user_login input{width:12em;clear:right;max-width:100%}#fieldset_add_user_login span.options input{width:auto}#fieldset_add_user_login span.options input[type=button]{margin:4px}#fieldset_user_priv div.item{float:left;width:9em;max-width:100%}#fieldset_user_priv div.item div.item{float:none}#fieldset_user_priv div.item label{white-space:nowrap}#fieldset_user_priv div.item select{width:100%}#fieldset_user_global_rights .pma-fieldset,#fieldset_user_group_rights .pma-fieldset{float:left}.linkElem:hover{text-decoration:underline;color:#235a81;cursor:pointer}h3#serverstatusqueries span,#serverstatusqueries.h3 span{font-size:60%;display:inline}div#serverStatusTabs{margin-top:1em}caption a.top{float:right}div#serverstatusquerieschart{float:left;width:500px;height:350px;padding-left:30px}div#serverstatus table tbody td.descr a,div#serverstatus table .tblFooters a{white-space:nowrap}div.liveChart{clear:both;min-width:500px;height:400px;padding-bottom:80px}div#chartVariableSettings{margin-left:10px}table#chartGrid td{padding:3px;margin:0}table#chartGrid div.monitorChart{background:#f7f7f7;min-width:1px}div.tabLinks{margin-left:.3em;float:left;padding:5px 0}div.tabLinks a,div.tabLinks label{margin-right:7px}div.tabLinks .icon{margin:-0.2em .3em 0 0}.popupContent{display:none;position:absolute;border:1px solid #ccc;margin:0;padding:3px;background-color:#fff;z-index:2}div#logTable{padding-top:10px;clear:both}div#logTable table{width:100%}div#queryAnalyzerDialog{min-width:700px}div#queryAnalyzerDialog div.CodeMirror-scroll{height:auto}div#queryAnalyzerDialog div#queryProfiling{height:300px}div#queryAnalyzerDialog td.explain{width:250px}div#queryAnalyzerDialog table.queryNums{display:none;border:0;text-align:left}.smallIndent{padding-left:7px}div#profilingchart{width:850px;height:370px;float:left}#resizer{border:1px solid silver}#inner-resizer{padding:10px}#togglequerybox{margin:0 10px}#serverstatus h3,#serverstatus .h3{margin:15px 0;font-weight:normal;color:#999;font-size:1.7em}textarea#sqlquery{width:100%;border:1px solid #aaa;padding:5px;font-family:inherit}textarea#sql_query_edit{height:7em;width:95%;display:block}#mysqlmaininformation,#pmamaininformation{float:left;width:49%}#maincontainer ul{list-style-type:square;vertical-align:middle;color:#666;margin-left:20px}#maincontainer ul li{line-height:1.5}#full_name_layer{position:absolute;padding:2px;margin-top:-3px;z-index:801;border:solid 1px #888;background:#fff}li br{display:none}li#li_mysql_client_version{overflow:hidden;text-overflow:ellipsis}#body_browse_foreigners{background:#377796;margin:.5em .5em 0 .5em}#bodyquerywindow{background:#377796}#bodythemes{width:500px;margin:auto;text-align:center}#bodythemes img{border:.1em solid #000}#bodythemes a:hover img{border:.1em solid red}#selflink{clear:both;display:block;margin-top:20px;margin-bottom:20px;margin-left:20px;margin-right:20px;border-top:1px solid silver;text-align:right}.operations_half_width{width:100%;float:left;margin-bottom:10px}.operations_full_width{width:100%;clear:both}#qbe_div_table_list,#qbe_div_sql_query{float:left}kbd{color:#444;background-color:rgba(0,0,0,0);box-shadow:none}code{font-size:1em;color:#444}code.php{display:block;padding-left:.3em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:ltr}.sqlOuter code.sql,div.sqlvalidate,#inline_editor_outer{display:block;padding:1em;margin:1em;overflow:auto;background-color:#fff;border:1px solid #ddd;direction:ltr}textarea#partitiondefinition{height:3em}.hide{display:none}#list_server{list-style-image:none;padding:0}div.upload_progress{width:400px;margin:3em auto;text-align:center}div.upload_progress_bar_outer{border:1px solid #000;width:202px;position:relative;margin:0 auto 1em;color:#444}div.upload_progress_bar_inner{background-color:#377796;width:0;height:12px;margin:1px;overflow:hidden;color:#000;position:relative}div.upload_progress_bar_outer div.percentage{position:absolute;top:0;left:0;width:202px}div.upload_progress_bar_inner div.percentage{top:-1px;left:-1px}div#statustext{margin-top:.5em}table#serverconnection_src_remote,table#serverconnection_trg_remote,table#serverconnection_src_local,table#serverconnection_trg_local{float:left}input[type=text].invalid_value,input[type=password].invalid_value,input[type=number].invalid_value,input[type=date].invalid_value .invalid_value{background:#fcc}.ajax_notification{top:0;position:fixed;z-index:1100;text-align:center;display:inline;left:0;right:0;background-image:url("../img/ajax_clock_small.gif");background-repeat:no-repeat;background-position:46%;margin:0;background-color:#eee;color:#444;padding:10px !important;border:none}.dismissable{margin-left:-10px;margin-top:-10px}#loading_parent{position:relative;width:100%}#popup_background{display:none;position:fixed;width:100%;height:100%;top:0;left:0;background:#000;z-index:1000;overflow:hidden}#tablestructure tbody label{margin:.3rem 0}#structure-action-links a{margin-right:1em}#index_frm .index_info input,#index_frm .index_info select{width:14em;box-sizing:border-box}#index_frm .index_info div{padding:.2em 0}#index_frm .index_info .label{float:left;min-width:12em}#index_frm .slider{width:10em;margin:.6em;float:left}#index_frm .add_fields{float:left}#index_frm .add_fields input{margin-left:1em}#index_frm input{margin:0}#index_frm td{vertical-align:middle}table#index_columns{width:100%}table#index_columns select{width:85%;float:right}#move_columns_dialog div{padding:1em}#move_columns_dialog ul{list-style:none;margin:0;padding:0}#move_columns_dialog li{background:#f7f7f7;border:1px solid #aaa;color:#666;font-weight:bold;margin:.4em;padding:.2em}.config-form .pma-fieldset{margin-top:0;padding:0;clear:both;background:none}.config-form legend{display:none}.config-form .pma-fieldset p{margin:0;padding:10px;background:#fff;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;font-size:16px}.config-form .pma-fieldset .errors{margin:0 -2px 1em;padding:.5em 1.5em;background:#fbead9;border-color:#c83838;border-style:solid;border-width:1px 0;list-style:none;font-family:sans-serif;font-size:small}.config-form .pma-fieldset .inline_errors{margin:.3em .3em .3em;margin-left:0;padding:0;list-style:none;color:#9a0000;font-size:small}.config-form .pma-fieldset table{background-color:#fff}.config-form .pma-fieldset label{font-weight:normal}.config-form .pma-fieldset textarea{margin:5px;padding:5px}.insertRowTable textarea{margin:5px;padding:5px}.config-form .card{margin-top:0}.config-form fieldset th{padding:10px;padding-left:.5em;text-align:left;vertical-align:top}.config-form fieldset .doc{margin-left:1em}.config-form fieldset .disabled-notice{margin-left:1em;font-size:80%;text-transform:uppercase;color:#e00;cursor:help}.config-form fieldset td{padding-top:.3em;padding-bottom:.3em;vertical-align:top;border-bottom:1px #eee solid;border-right:none}.config-form fieldset th{border-bottom:1px #eee solid;border-right:none}.config-form fieldset th small,.config-form fieldset th .small{display:block;font-weight:normal;font-family:sans-serif;font-size:x-small;color:#444}fieldset .group-header th{background:#fff}fieldset .group-header+tr th{padding-top:.6em}fieldset .group-field-1 th,fieldset .group-header-2 th{padding-left:1.5em}fieldset .group-field-2 th,fieldset .group-header-3 th{padding-left:3em}fieldset .group-field-3 th{padding-left:4.5em}fieldset .disabled-field th{color:#666;background-color:#ddd}fieldset .disabled-field th small,fieldset .disabled-field th .small{color:#666;background-color:#ddd}fieldset .disabled-field td{color:#666;background-color:#ddd}form.create_table_form .pma-fieldset.tblFooters,form#multi_edit_central_columns .pma-fieldset.tblFooters{background:none;border:none}#db_or_table_specific_priv .tblFooters{margin-top:-68px}#edit_user_dialog,#add_user_dialog{margin:20px !important}.config-form span.checkbox{padding:2px;display:inline-block}.config-form .custom{background:#ffc}.config-form span.checkbox.custom{padding:1px;border:1px #edec90 solid;background:#ffc}.config-form img.ic_s_reload{filter:invert(70%)}.config-form .field-error{border-color:#a11 !important}.config-form input[type=text],.config-form input[type=password],.config-form input[type=number]{border:1px #a7a6aa solid;height:auto}.config-form input[type=text]:focus,.config-form input[type=password]:focus,.config-form input[type=number]:focus{border:1px #6676ff solid;background:#f7fbff}.config-form select,.config-form textarea{border:1px #a7a6aa solid;height:auto}.config-form select:focus,.config-form textarea:focus{border:1px #6676ff solid;background:#f7fbff}.config-form .field-comment-mark{font-family:serif;color:#007;cursor:help;padding:0 .2em;font-weight:bold;font-style:italic}.config-form .field-comment-warning{color:#a00}.config-form dd{margin-left:.5em}.config-form dd::before{content:"▸ "}.click-hide-message{cursor:pointer}.prefsmanage_opts{margin-left:2em}#prefs_autoload{margin-bottom:.5em;margin-left:.5em}input#auto_increment_opt{width:-webkit-min-content;width:-moz-min-content;width:min-content}#placeholder .button{position:absolute;cursor:pointer}#placeholder div.button{font-size:smaller;color:#999;background-color:#eee;padding:2px}.wrapper{float:left;margin-bottom:1.5em}.toggleButton{position:relative;cursor:pointer;font-size:.8em;text-align:center;line-height:1.4em;height:1.55em;overflow:hidden;border-right:.1em solid #888;border-left:.1em solid #888}.toggleButton table,.toggleButton td,.toggleButton img{padding:0;position:relative}.toggleButton .toggle-container{position:absolute}.toggleButton .toggle-container td{background:none}.toggleButton .toggleOn{color:#fff;padding:0 1em}.toggleButton .toggleOff{padding:0 1em}.doubleFieldset .pma-fieldset{width:48%;float:left;padding:0}.doubleFieldset legend{margin-left:1.5em}.doubleFieldset div.wrap{padding:1.5em}form.append_fields_form .tblFooters{background:none;border:none}#table_columns{display:block;overflow:auto}#table_columns input[type=text],#table_columns input[type=password],#table_columns input[type=number],#table_columns input[type=date]{width:10em;box-sizing:border-box}#table_columns select{width:10em;box-sizing:border-box;margin:6px}#placeholder{position:relative;border:1px solid #aaa;float:right;overflow:hidden}#placeholder .button{position:absolute}.placeholderDrag{cursor:move}#left_arrow{left:8px;top:26px}#right_arrow{left:26px;top:26px}#up_arrow{left:17px;top:8px}#down_arrow{left:17px;top:44px}#zoom_in{left:17px;top:67px}#zoom_world{left:17px;top:85px}#zoom_out{left:17px;top:103px}.colborder{cursor:col-resize;height:100%;margin-left:-6px;position:absolute;width:5px}.colborder_active{border-right:2px solid #a44}.pma_table th.draggable span{display:block;overflow:hidden}.pma_table td{position:static}.pma_table tbody td span{display:block;overflow:hidden}.pma_table tbody td span code span{display:inline}.modal-copy input{display:block;width:100%;margin-top:1.5em;padding:.3em 0}.cRsz{position:absolute}.cCpy{background:#333;color:#fff;font-weight:bold;margin:.1em;padding:.3em;position:absolute}.cPointer{height:20px;width:10px;margin-left:-10px;margin-top:-5px;position:absolute;background:url("../img/col_pointer.png")}.tooltip{background:#333 !important;opacity:.8 !important;z-index:9999;border:1px solid #000 !important;font-size:10px !important;font-weight:normal !important;padding:5px !important;width:260px;line-height:1.5}.tooltip *{background:none !important;color:#fff !important}.cDrop{right:0;position:absolute;top:0}.coldrop{background:url("../img/col_drop.png");cursor:pointer;height:16px;margin-top:.3em;width:16px}.coldrop:hover{background-color:#999}.coldrop-hover{background-color:#999}.cList{background:#fff;border:solid 1px #ccc;position:absolute;margin-left:75%;right:0;max-width:100%;overflow-wrap:break-word}.cList .lDiv div{padding:.2em .5em .2em;padding-left:.2em}.cList .lDiv div:hover{background:#377796;cursor:pointer;color:#fff}.cList .lDiv div input{cursor:pointer}.showAllColBtn{border-bottom:solid 1px #ccc;border-top:solid 1px #ccc;cursor:pointer;font-size:.9em;font-family:"Open Sans Bold",sans-serif;padding:.35em 1em;text-align:center;font-weight:normal}.showAllColBtn:hover{background:#377796;cursor:pointer;color:#fff}#page_content{line-height:1.5}.navigation_separator{color:#eee;display:inline-block;font-size:1.5em;text-align:center;height:1.4em}.navigation{width:100%;background-color:#377796;color:#eee}.navigation td{margin:0;padding:0;vertical-align:middle;white-space:nowrap}.navigation input[type=submit]{background:#377796;color:#eee;border:none;filter:none;margin:5px;padding:.4em}.navigation input[type=submit]:hover{color:#fff;cursor:pointer;background-color:#666}.navigation input.edit_mode_active{color:#fff;cursor:pointer;background-color:#666}.navigation select{margin:0 .8em;border:none}.navigation input[type=text]{border:none}.navigation_goto{width:100%}.insertRowTable td,.insertRowTable th{vertical-align:middle}.cEdit{margin:0;padding:0;position:absolute}.cEdit input[type=text],.cEdit input[type=password],.cEdit input[type=number]{background:#fff;height:100%;margin:0;padding:0}.cEdit .edit_area{background:#fff;border:1px solid #999;min-width:10em;padding:.3em .5em}.cEdit .edit_area select,.cEdit .edit_area textarea{width:97%}.cEdit .cell_edit_hint{color:#555;font-size:.8em;margin:.3em .2em}.cEdit .edit_box{overflow-x:hidden;overflow-y:scroll;padding:0;margin-top:10px}.cEdit .edit_box_posting{background:#fff url("../img/ajax_clock_small.gif") no-repeat right center;padding-right:1.5em}.cEdit .edit_area_loading{background:#fff url("../img/ajax_clock_small.gif") no-repeat center;height:10em}.cEdit .goto_link{background:#eee;color:#555;padding:.2em .3em}.saving_edited_data{background:url("../img/ajax_clock_small.gif") no-repeat left;padding-left:20px}.relationalTable select{width:125px;margin-right:5px}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{height:25px;margin-bottom:-25px}.ui-timepicker-div dl dd{margin:0 10px 10px 85px}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:none;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right}.ui-timepicker-rtl dl dd{margin:0 65px 10px 10px}.ui_tpicker_time_input{width:100%}body .ui-widget{font-size:1em}body #ui-datepicker-div{z-index:9999 !important}.ui-dialog .pma-fieldset legend a{color:#235a81}div#page_content div#tableslistcontainer{margin-top:1em}div#page_content div#tableslistcontainer table.data{border-top:.1px solid #eee}div#page_content div.result_query{margin-top:1em}table.show_create{margin-top:1em}table.show_create td{border-right:1px solid #bbb}#alias_modal table th{vertical-align:middle;padding-left:1em}#alias_modal label.col-2{min-width:20%;display:inline-block}#alias_modal select{width:25%;margin-right:2em}#alias_modal label{font-weight:bold}.small_font{font-size:smaller}#pma_console_container{width:100%;position:fixed;bottom:0;left:0;z-index:100}textarea{resize:both}#pma_console{position:relative;margin-left:250px}#pma_console .templates{display:none}#pma_console .mid_text{vertical-align:middle}#pma_console .toolbar{position:relative;background:#f7f7f7;border-top:solid 1px #ccc;cursor:n-resize}#pma_console .toolbar span{vertical-align:middle}#pma_console .toolbar.collapsed{cursor:default}#pma_console .toolbar.collapsed:not(:hover){display:inline-block;border-right:solid 1px #ccc}#pma_console .toolbar.collapsed>.button{display:none}#pma_console .message span.text,#pma_console .message span.action{padding:0 3px;display:inline-block}#pma_console .toolbar .button,#pma_console .toolbar .text{padding:0 3px;display:inline-block}#pma_console .switch_button{padding:0 3px;display:inline-block}#pma_console .message span.action,#pma_console .toolbar .button,#pma_console .switch_button{cursor:pointer}#pma_console .toolbar .text{font-weight:bold}#pma_console .toolbar .button,#pma_console .toolbar .text{margin-right:.4em;float:right}#pma_console .content{overflow-x:hidden;overflow-y:auto;margin-bottom:-65px;border-top:solid 1px #ccc;background:#fff;padding-top:.4em}#pma_console .content.console_dark_theme{background:#000;color:#fff}#pma_console .content.console_dark_theme .CodeMirror-wrap{background:#000;color:#fff}#pma_console .content.console_dark_theme .action_content{color:#000}#pma_console .content.console_dark_theme .message{border-color:#373b41}#pma_console .content.console_dark_theme .CodeMirror-cursor{border-color:#fff}#pma_console .content.console_dark_theme .cm-keyword{color:#de935f}#pma_console .message,#pma_console .query_input{position:relative;font-family:Monaco,Consolas,monospace;cursor:text;margin:0 10px .2em 1.4em}#pma_console .message{border-bottom:solid 1px #ccc;padding-bottom:.2em}#pma_console .message.expanded>.action_content{position:relative}#pma_console .message::before{left:-0.7em;position:absolute;content:">"}#pma_console .query_input::before{left:-0.7em;position:absolute;content:">";top:-2px}#pma_console .query_input textarea{width:100%;height:4em;resize:vertical}#pma_console .message:hover::before{color:#7cf;font-weight:bold}#pma_console .message.expanded::before{content:"]"}#pma_console .message.welcome::before{display:none}#pma_console .message.failed::before,#pma_console .message.failed.expanded::before,#pma_console .message.failed:hover::before{content:"=";color:#944}#pma_console .message.pending::before{opacity:.3}#pma_console .message.collapsed>.query{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#pma_console .message.expanded>.query{display:block;white-space:pre;word-wrap:break-word}#pma_console .message .text.targetdb,#pma_console .message.collapsed .action.collapse,#pma_console .message.expanded .action.expand{display:none}#pma_console .message .action.requery,#pma_console .message .action.profiling,#pma_console .message .action.explain,#pma_console .message .action.bookmark{display:none}#pma_console .message.select .action.profiling,#pma_console .message.select .action.explain{display:inline-block}#pma_console .message.history .text.targetdb,#pma_console .message.successed .text.targetdb{display:inline-block}#pma_console .message.history .action.requery,#pma_console .message.history .action.bookmark{display:inline-block}#pma_console .message.bookmark .action.requery,#pma_console .message.bookmark .action.bookmark{display:inline-block}#pma_console .message.successed .action.requery,#pma_console .message.successed .action.bookmark{display:inline-block}#pma_console .message .action_content{position:absolute;bottom:100%;background:#ccc;border:solid 1px #aaa}#pma_console .message.bookmark .text.targetdb,#pma_console .message .text.query_time{margin:0;display:inline-block}#pma_console .message.failed .text.query_time,#pma_console .message .text.failed{display:none}#pma_console .message.failed .text.failed{display:inline-block}#pma_console .message .text{background:#fff}#pma_console .message.collapsed>.action_content{display:none}#pma_console .message.collapsed:hover>.action_content{display:block}#pma_console .message .bookmark_label{padding:0 4px;top:0;background:#369;color:#fff}#pma_console .message .bookmark_label.shared{background:#396}#pma_console .query_input{position:relative}#pma_console .mid_layer{height:100%;width:100%;position:absolute;top:0;background:#ccc;display:none;cursor:pointer;z-index:200}#pma_console .card{position:absolute;width:94%;height:100%;min-height:48px;left:100%;top:0;border-left:solid 1px #999;z-index:300;transition:left .2s}#pma_console .card.show{left:6%}#pma_bookmarks .content.add_bookmark,#pma_console_options .content{padding:4px 6px}#pma_bookmarks .content.add_bookmark .options{margin-left:1.4em;padding-bottom:.4em;margin-bottom:.4em;border-bottom:solid 1px #ccc}#pma_bookmarks .content.add_bookmark .options button{margin:0 7px;vertical-align:bottom}#pma_bookmarks .content.add_bookmark input[type=text]{margin:0;padding:2px 4px}#pma_console .button.hide,#pma_console .message span.text.hide{display:none}#debug_console.grouped .ungroup_queries{display:inline-block}#debug_console.ungrouped .group_queries{display:inline-block}#debug_console.ungrouped .ungroup_queries,#debug_console.ungrouped .sort_count{display:none}#debug_console.grouped .group_queries{display:none}#debug_console .count{margin-right:8px}#debug_console .show_trace .trace,#debug_console .show_args .args{display:block}#debug_console .hide_trace .trace,#debug_console .hide_args .args,#debug_console .show_trace .action.dbg_show_trace,#debug_console .hide_trace .action.dbg_hide_trace{display:none}#debug_console .traceStep.hide_args .action.dbg_hide_args,#debug_console .traceStep.show_args .action.dbg_show_args{display:none}#debug_console .traceStep::after{content:"";display:table;clear:both}#debug_console .trace.welcome::after,#debug_console .debug>.welcome::after{content:"";display:table;clear:both}#debug_console .debug_summary{float:left}#debug_console .trace.welcome .time,#debug_console .traceStep .file,#debug_console .script_name{float:right}#debug_console .traceStep .args pre{margin:0}.cm-s-pma .CodeMirror-code{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-code pre{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-measure>pre,.cm-s-pma .CodeMirror-code>pre,.cm-s-pma .CodeMirror-lines{padding:0}.cm-s-pma.CodeMirror{resize:none;height:auto;width:100%;min-height:initial;max-height:initial}.cm-s-pma .CodeMirror-scroll{cursor:text}.pma_drop_handler{display:none;position:fixed;top:0;left:0;width:100%;background:rgba(0,0,0,.6);height:100%;z-index:999;color:#fff;font-size:30pt;text-align:center;padding-top:20%}.pma_sql_import_status{display:none;position:fixed;bottom:0;right:25px;width:400px;border:1px solid #999;background:#f3f3f3}.pma_sql_import_status h2,.pma_sql_import_status .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal}.pma_drop_result h2,.pma_drop_result .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal}.pma_sql_import_status div{height:270px;overflow-y:auto;overflow-x:hidden;list-style-type:none}.pma_sql_import_status div li{padding:8px 10px;border-bottom:1px solid #bbb;color:#940e0e;background:#fff}.pma_sql_import_status div li .filesize{float:right}.pma_sql_import_status h2 .minimize,.pma_sql_import_status .h2 .minimize{float:right;margin-right:5px;padding:0 10px}.pma_sql_import_status h2 .close,.pma_sql_import_status .h2 .close{float:right;margin-right:5px;padding:0 10px;display:none}.pma_sql_import_status h2 .minimize:hover,.pma_sql_import_status .h2 .minimize:hover,.pma_sql_import_status h2 .close:hover,.pma_sql_import_status .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_result h2 .close:hover,.pma_drop_result .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_file_status{color:#235a81}.pma_drop_file_status span.underline:hover{cursor:pointer;text-decoration:underline}.pma_drop_result{position:fixed;top:10%;left:20%;width:60%;background:#fff;min-height:300px;z-index:800;cursor:move}.pma_drop_result h2 .close,.pma_drop_result .h2 .close{float:right;margin-right:5px;padding:0 10px}.dependencies_box{background-color:#fff;border:3px ridge #000}#composite_index_list{list-style-type:none;list-style-position:inside}span.drag_icon{display:inline-block;background-image:url("../img/s_sortable.png");background-position:center center;background-repeat:no-repeat;width:1em;height:3em;cursor:move}.topmargin{margin-top:1em}meter[value="1"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #e32929 5%, transparent 10%, #e32929)}meter[value="2"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #f60 5%, transparent 10%, #f60)}meter[value="3"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #ffd700 5%, transparent 10%, #ffd700)}body .ui-dialog .ui-dialog-titlebar-close{right:.3em;left:initial}body .ui-dialog .ui-dialog-title{float:left}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}body .ui-corner-all,body .ui-corner-top,body .ui-corner-left,body .ui-corner-tl{border-top-left-radius:0}body .ui-corner-all,body .ui-corner-top,body .ui-corner-right,body .ui-corner-tr{border-top-right-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-left,body .ui-corner-bl{border-bottom-left-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-right,body .ui-corner-br{border-bottom-right-radius:0}body .ui-dialog{padding:0}body .ui-dialog .ui-widget-header{color:#fff;border:none;background-color:#377796;background-image:none}body .ui-dialog .ui-dialog-title{padding:5px;font-weight:normal}body .ui-dialog .ui-dialog-buttonpane button{font-family:"Open Sans","Segoe UI",sans-serif;color:#fff;background-color:#377796;background-image:none;border:1px solid #377796}body .ui-dialog .ui-dialog-buttonpane button.ui-state-hover{background-color:#428eb4;border:1px solid #428eb4}body .ui-dialog .ui-dialog-buttonpane button.ui-state-active{background-color:#333;border:1px solid #333}#tooltip_editor{font-size:12px;background-color:#fff;opacity:.95;filter:alpha(opacity=95);padding:5px}#tooltip_font{font-weight:bold}#selection_box{z-index:1000;height:205px;position:absolute;background-color:skyblue;opacity:.4;filter:alpha(opacity=40);pointer-events:none}#filterQueryText{vertical-align:baseline}.multi_table_query_form .query-form__tr--hide{display:none}.multi_table_query_form .query-form__fieldset--inline,.multi_table_query_form .query-form__select--inline{display:inline}.multi_table_query_form .query-form__tr--bg-none{background:none}.multi_table_query_form .query-form__input--wide{width:91%}.multi_table_query_form .query-form__multi-sql-query{float:left}.pre-scrollable{max-height:340px;overflow-y:scroll}@media(min-width: 1200px){div.tools{text-align:left}.pma-fieldset.tblFooters,.tblFooters{text-align:left}}.resize-vertical{resize:vertical}p.enum_notice{margin:5px 2px;font-size:80%}#enum_editor p{margin-top:0;font-style:italic}#enum_editor .values{width:100%}#enum_editor .add{width:100%}#enum_editor .add td{vertical-align:middle;width:50%;padding:0 0 0;padding-left:1em}#enum_editor .values td.drop{width:1.8em;cursor:pointer;vertical-align:middle}#enum_editor .values input{margin:.1em 0;padding-right:2em;width:100%}#enum_editor .values img{vertical-align:middle}#enum_editor input.add_value{margin:0;margin-right:.4em}#enum_editor_output textarea{width:100%;float:right;margin:1em 0 0 0}.enum_hint{position:relative}.enum_hint a{position:absolute;left:81%;bottom:.35em}a.close_gis_editor{float:right}#gis_editor{display:none;position:fixed;z-index:1001;overflow-y:auto;overflow-x:hidden}#gis_data{min-height:230px}#gis_data_textarea{height:6em}#gis_data_editor{background:#d0dce0;padding:15px;min-height:500px}#gis_data_editor .choice{display:none}#gis_data_editor input[type=text]{width:75px}#pma_navigation{width:250px;overflow:hidden;position:fixed;top:0;left:0;height:100%;background:#eee;color:#444;z-index:800}#pma_navigation input[type=text]{background-color:#fff;font-family:"Open Sans","Segoe UI",sans-serif}#pma_navigation a:link,#pma_navigation a:visited,#pma_navigation a:active{text-decoration:none;color:#333}#pma_navigation a img{border:0}#pma_navigation select#select_server,#pma_navigation select#lightm_db{width:100%}#pma_navigation button{display:inline}#pma_navigation_content{width:100%;position:absolute;top:0;left:0;z-index:0}#pma_navigation ul{margin:0}#pma_navigation form{margin:0;padding:0;display:inline}#pma_navigation div.pageselector{text-align:center;margin:0;margin-left:.75em;border-left:1px solid #666}#pma_navigation #pmalogo{margin:0;padding:12px;background:#377796;color:#fff;font-size:14px;cursor:default;height:15px;line-height:100%;box-sizing:content-box}#pma_navigation #pmalogo::after{font-family:"Open Sans Extrabold","Segoe Black",sans-serif;text-transform:uppercase;margin-left:5px;content:"phpMyAdmin"}#pma_navigation #imgpmalogo{display:none}#pma_navigation #recentTableList{text-align:center;padding:10px}#pma_navigation #recentTableList select{min-width:100%}#pma_navigation #databaseList{text-align:center;margin:10px}#pma_navigation #navipanellinks{padding-top:1em;padding-bottom:1em;text-align:center;background-color:#ddd}#pma_navigation #navipanellinks a{box-sizing:content-box}#pma_navigation #navipanellinks .icon{margin:0}img.ic_b_home,img.ic_s_loggoff,img.ic_b_docs,img.ic_b_sqlhelp,img.ic_s_reload{filter:invert(70%)}#navipanellinks a{height:16px;width:16px;color:#444;margin-right:5px;padding:5px;font-size:15px}#navipanellinks a:hover{color:#666}#pma_navigation #serverChoice,#pma_navigation #databaseList,#pma_navigation div.pageselector.dbselector{text-align:center;padding:5px 10px 0;border:0}#pma_navigation_content>img.throbber{display:none;margin:.3em auto 0}#pma_navigation_tree{margin:0;margin-left:10px;overflow:hidden;height:74%;position:relative}#pma_navigation_select_database{text-align:left;padding:0 0 0;border:0;margin:0}#pma_navigation_db_select{margin-top:.5em;margin-left:.75em}#pma_navigation_db_select select{border:1px solid #bbb;border-top:1px solid #bbb;color:#333;padding:4px 6px;margin:0 0 0;width:92%}#pma_navigation_tree_content{width:100%;overflow:hidden;overflow-y:auto;position:absolute;height:100%}#pma_navigation_tree li .dbItemControls{padding-right:4px;float:right}#pma_navigation_tree li .navItemControls{display:none;padding-right:4px;float:right}#pma_navigation_tree li.activePointer .navItemControls{display:block;opacity:.5}#pma_navigation_tree li.activePointer .navItemControls:hover{opacity:1}#pma_navigation_tree_content a.hover_show_full{position:relative;z-index:100}#pma_navigation_tree a{color:#eee;padding-left:0}#pma_navigation_tree a:hover{text-decoration:none;color:#666}#pma_navigation_tree li{margin-bottom:0}#pma_navigation_tree li.activePointer,#pma_navigation_tree li.selected{color:#666}#pma_navigation_tree ul{clear:both;padding:0;list-style-type:none;margin:0}#pma_navigation_tree ul ul{position:relative}#pma_navigation_tree li{white-space:nowrap;clear:both;min-height:17px}#pma_navigation_tree img{margin:0}#pma_navigation_tree i{display:block}#pma_navigation_tree div.block{position:relative;width:1.5em;height:2em;min-width:16px;min-height:16px;float:left}#pma_navigation_tree div.block.double{width:2.5em}#pma_navigation_tree div.block i,#pma_navigation_tree div.block b{width:1.5em;height:2em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;left:.75em;z-index:0;margin-top:-4px}#pma_navigation_tree div.block i{display:block;border-left:1px solid #616161;border-bottom:1px solid #616161;position:relative;z-index:0}#pma_navigation_tree div.block i.first{border-left:0}#pma_navigation_tree div.block b{display:block;height:.75em;bottom:0;left:.75em;border-left:1px solid #616161}#pma_navigation_tree div.block a,#pma_navigation_tree div.block u{position:absolute;left:50%;top:50%;z-index:10}#pma_navigation_tree div.block a+a{left:100%}#pma_navigation_tree div.block.double a,#pma_navigation_tree div.block.double u{left:33%}#pma_navigation_tree div.block.double a+a{left:85%}#pma_navigation_tree div.block img{position:relative;top:-0.6em;left:0;margin-left:-7px}#pma_navigation_tree div.throbber img{top:2px;left:2px}#pma_navigation_tree li.last>ul{background:none}#pma_navigation_tree li>a,#pma_navigation_tree li>i{line-height:1.5em;height:1.5em;padding-left:.3em}#pma_navigation_tree .list_container{border-left:1px solid #616161;margin-left:.75em;padding-left:.75em}#pma_navigation_tree .list_container li.last.database{margin-bottom:0 !important}#pma_navigation_tree .last>.list_container{border-left:0 solid #616161}li.fast_filter{padding-left:.75em;margin-left:.75em;padding-right:15px;border-left:1px solid #616161}li.fast_filter input{font-size:.7em}li.fast_filter .searchClauseClear{background-color:rgba(0,0,0,0);font-weight:bold;color:#800;font-size:.7em}li.fast_filter .searchClauseClear:hover{background-color:rgba(0,0,0,0)}li.fast_filter.db_fast_filter{border:0;margin-left:0}#navigation_controls_outer{min-height:21px !important}#pma_navigation_collapse{padding-right:2px}#navigation_controls_outer.activePointer{background-color:rgba(0,0,0,0) !important}#navigation_controls{float:right;padding-right:23px}#pma_navigation_resizer{width:1px;height:100%;background-color:#aaa;cursor:col-resize;position:fixed;top:0;left:250px;z-index:801}#pma_navigation_collapser{width:20px;padding-top:4px;padding-bottom:12px;background:#377796;border-bottom:1px solid #377796;line-height:22px;color:#fff;position:fixed;top:0;left:250px;text-align:center;cursor:pointer;z-index:801}.pma_quick_warp{margin-top:5px;margin-left:10px;position:relative}.pma_quick_warp .drop_list{float:left;margin-left:3px;padding:2px 0}.pma_quick_warp .drop_button{padding:.2em .5em;border:1px solid #ddd;background:#f2f2f2;cursor:pointer}.pma_quick_warp .drop_list:hover .drop_button{background:#fff}.pma_quick_warp .drop_list ul{position:absolute;margin:0;padding:0;overflow:hidden;overflow-y:auto;list-style:none;background:#fff;border:1px solid #ddd;top:100%;left:3px;right:0;display:none;z-index:802}.pma_quick_warp .drop_list:hover ul{display:block}.pma_quick_warp .drop_list li{white-space:nowrap;padding:0}.pma_quick_warp .drop_list li img{vertical-align:sub}.pma_quick_warp .drop_list li:hover{background:#f2f2f2}.pma_quick_warp .drop_list a{display:block;padding:.2em .3em}.pma_quick_warp .drop_list a.favorite_table_anchor{clear:left;float:left;padding:.1em .3em 0}.input_tab{background-color:#efefef;color:#000;border:1px solid #ccc}.content_fullscreen{position:relative;overflow:auto}#canvas_outer{position:relative;width:100%;display:block}#canvas{background-color:#fff;color:#000}canvas.designer{display:inline-block;overflow:hidden;text-align:left}canvas.designer *{behavior:url(#default#VML)}.designer_tab{color:#333;border-collapse:collapse;border:1px solid #ccc;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.designer_tab .header{background-color:#f6f6f6}.tab_zag{text-align:center;cursor:move;padding:1px;font-weight:bold;vertical-align:middle}.tab_zag_2{text-align:center;cursor:move;padding:1px;font-weight:bold;background-color:#f6f6f6;vertical-align:middle}.tab_field{background:#fff;color:#000;cursor:default}.tab_field:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}.tab_field_3{background-color:#ffe6e6 !important;color:#000;cursor:default}.tab_field_3:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}#designer_hint{white-space:nowrap;position:absolute;background-color:#9f9;color:#000;z-index:3;border:#0c6 solid 1px;display:none}.scroll_tab{overflow:auto;width:100%;height:500px}.designer_Tabs{cursor:default;color:#333;white-space:nowrap;text-decoration:none;text-indent:3px;margin-left:2px;text-align:left;border:#ccc solid 0}.designer_Tabs:hover{cursor:default;color:#666;background:#eee;text-indent:3px;white-space:nowrap;text-decoration:none;border:#eee solid 0;text-align:left}.owner{font-weight:normal;color:#888}.option_tab{padding-left:2px;padding-right:2px;width:5px}.select_all{vertical-align:top;padding-left:2px;padding-right:2px;cursor:default;width:1px;color:#000;background-repeat:repeat-x}.small_tab{vertical-align:top;background-color:#666;color:#fff;cursor:default;text-align:center;font-weight:bold;padding-left:2px;padding-right:2px;width:1px;text-decoration:none}.small_tab:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;padding-left:2px;padding-right:2px;text-align:center;font-weight:bold;width:1px;text-decoration:none}.small_tab_pref{background-color:#f6f6f6;text-align:center;width:1px}.small_tab_pref:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;text-align:center;font-weight:bold;width:1px;text-decoration:none}.L_butt2_1{padding-left:5px;text-decoration:none;vertical-align:middle;cursor:default}.L_butt2_1:hover{padding-left:5px;color:#000;text-decoration:none;vertical-align:middle;cursor:default}.bor{width:10px;height:10px}#osn_tab{position:absolute;background-color:#fff;color:#000;width:100% !important}.designer_header{background-color:#f6f6f6;border-top:20px solid #fff;color:#333;display:block;height:28px;margin-left:-20px;margin-top:-60px;padding:5px 20px;position:fixed;text-align:center;width:100%;z-index:101}.designer_header a{display:block;float:left;margin:3px 1px 4px;height:20px}.designer_header .M_bord{display:block;float:left;margin:4px;height:20px;width:2px}.designer_header a.first{margin-right:1em}.designer_header a.last{margin-left:1em}a.M_butt_Selected_down_IE,a.M_butt_Selected_down,a.M_butt_Selected_down_IE:hover,a.M_butt_Selected_down:hover,a.M_butt:hover{background-color:#eee;color:#000}#layer_menu{z-index:98;position:relative;float:right;background-color:#f6f6f6;border:#ccc solid 1px;border-top:0;margin-right:-20px}.content_fullscreen #layer_menu{margin-right:0}#layer_menu.float-start{margin-left:-20px}.content_fullscreen #layer_menu.float-start{margin-left:0}#layer_upd_relation{position:absolute;left:637px;top:224px;z-index:100}#layer_new_relation,#designer_optionse{position:absolute;left:636px;top:85px;z-index:100;width:153px}#layer_menu_sizer{background-image:url("../img/designer/resize.png");cursor:ew-resize}#layer_menu_sizer .icon{margin:0}.panel{position:fixed;top:90px;right:0;width:350px;max-height:500px;display:none;overflow:auto;padding-top:34px;z-index:102}a.trigger{position:fixed;text-decoration:none;top:90px;right:0;color:#fff;padding:10px 40px 10px 15px;background:#333 url("../img/designer/plus.png") 85% 55% no-repeat;border:1px solid #444;display:block;z-index:102}a.trigger:hover{color:#080808;background:#fff696 url("../img/designer/plus.png") 85% 55% no-repeat;border:1px solid #999}a.active.trigger{background:#222 url("../img/designer/minus.png") 85% 55% no-repeat;z-index:999}a.active.trigger:hover{background:#fff696 url("../img/designer/minus.png") 85% 55% no-repeat}.toggle_container .block{background-color:#eee;border-top:1px solid #999}.toggle_container .block img.ic_s_info{filter:invert(70%)}.history_table{opacity:1;cursor:pointer}.history_table2{opacity:.7}#ab{min-width:300px}#ab .ui-accordion-content{padding:0}#foreignkeychk{text-align:left;cursor:pointer}.side-menu{float:left;position:fixed;width:auto;height:auto;background:#efefef;border:1px solid #ccc;border-top:0;overflow:hidden;z-index:50;padding:2px;margin-top:0;margin-left:-20px}.content_fullscreen .side-menu{margin-left:0}.side-menu.right{float:right;right:0}.content_fullscreen .side-menu.right{margin-right:0}.side-menu .hide{display:none}.side-menu a{display:block;float:none;overflow:hidden}.side-menu img,.side-menu span,.side-menu .text{float:left;padding-left:2px}#name-panel{border-bottom:1px solid #ccc;text-align:center;background:#efefef;font-size:1.2em;padding:10px;font-weight:bold;margin-top:-20px;margin-left:-20px;margin-right:-20px}.content_fullscreen #name-panel{margin-top:0;margin-left:0;margin-right:0}#container-form{width:100%;position:absolute;left:0}.CodeMirror{font-family:"Consolas","Lucida Grande",monospace !important;height:20rem;border:1px solid #ccc;direction:ltr}#pma_console .CodeMirror{border:none}.CodeMirror *{font-family:"Consolas","Lucida Grande",monospace}#inline_editor_outer .CodeMirror{height:6em;margin-bottom:10px}.insertRowTable .CodeMirror{min-height:9em;min-width:24em}#pma_console .CodeMirror-gutters{background-color:initial;border:none}span.cm-keyword,span.cm-statement-verb{color:#909}span.cm-variable{color:#000}span.cm-comment{color:olive}span.cm-mysql-string{color:green}span.cm-operator{color:#f0f}span.cm-mysql-word{color:#000}span.cm-builtin{color:red}span.cm-variable-2{color:#f90}span.cm-variable-3{color:blue}span.cm-separator{color:#f0f}span.cm-number{color:teal}.autocomplete-column-name{display:inline-block}.autocomplete-column-hint{display:inline-block;float:right;color:#666;margin-left:1em}.CodeMirror-hints{z-index:1999}.jqplot-target{position:relative;color:#222;font-family:"Open Sans","Segoe UI",sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px;background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}table.jqplot-cursor-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:#333}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(230,230,230,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(245,245,245,.3)}.icon{margin:0;margin-left:.3em;padding:0 !important;width:16px;height:16px}.icon_fulltext{width:50px;height:19px}.ic_asc_order{background-image:url("../img/asc_order.png")}.ic_b_bookmark{background-image:url("../img/b_bookmark.png")}.ic_b_browse{background-image:url("../img/b_browse.png")}.ic_b_calendar{background-image:url("../img/b_calendar.png")}.ic_b_chart{background-image:url("../img/b_chart.png")}.ic_b_close{background-image:url("../img/b_close.png")}.ic_b_column_add{background-image:url("../img/b_column_add.png")}.ic_b_comment{background-image:url("../img/b_comment.png")}.ic_b_dbstatistics{background-image:url("../img/b_dbstatistics.png")}.ic_b_deltbl{background-image:url("../img/b_deltbl.png")}.ic_b_docs{background-image:url("../img/b_docs.png")}.ic_b_docsql{background-image:url("../img/b_docsql.png")}.ic_b_drop{background-image:url("../img/b_drop.png")}.ic_b_edit{background-image:url("../img/b_edit.png")}.ic_b_empty{background-image:url("../img/b_empty.png")}.ic_b_engine{background-image:url("../img/b_engine.png")}.ic_b_event_add{background-image:url("../img/b_event_add.png")}.ic_b_events{background-image:url("../img/b_events.png")}.ic_b_export{background-image:url("../img/b_export.png")}.ic_b_favorite{background-image:url("../img/b_favorite.png")}.ic_b_find_replace{background-image:url("../img/b_find_replace.png")}.ic_b_firstpage{background-image:url("../img/b_firstpage.png")}.ic_b_ftext{background-image:url("../img/b_ftext.png")}.ic_b_globe{background-image:url("../img/b_globe.gif")}.ic_b_group{background-image:url("../img/b_group.png")}.ic_b_help{background-image:url("../img/b_help.png")}.ic_b_home{background-image:url("../img/b_home.png")}.ic_b_import{background-image:url("../img/b_import.png")}.ic_b_index{background-image:url("../img/b_index.png")}.ic_b_index_add{background-image:url("../img/b_index_add.png")}.ic_b_inline_edit{background-image:url("../img/b_inline_edit.png")}.ic_b_insrow{background-image:url("../img/b_insrow.png")}.ic_b_lastpage{background-image:url("../img/b_lastpage.png")}.ic_b_minus{background-image:url("../img/b_minus.png")}.ic_b_more{background-image:url("../img/b_more.png")}.ic_b_move{background-image:url("../img/b_move.png")}.ic_b_newdb{background-image:url("../img/b_newdb.png")}.ic_db_drop{background-image:url("../img/b_deltbl.png")}.ic_b_newtbl{background-image:url("../img/b_newtbl.png")}.ic_b_nextpage{background-image:url("../img/b_nextpage.png")}.ic_b_no_favorite{background-image:url("../img/b_no_favorite.png")}.ic_b_pdfdoc{background-image:url("../img/b_pdfdoc.png")}.ic_b_plugin{background-image:url("../img/b_plugin.png")}.ic_b_plus{background-image:url("../img/b_plus.png")}.ic_b_prevpage{background-image:url("../img/b_prevpage.png")}.ic_b_primary{background-image:url("../img/b_primary.png")}.ic_b_print{background-image:url("../img/b_print.png")}.ic_b_props{background-image:url("../img/b_props.png")}.ic_b_relations{background-image:url("../img/b_relations.png")}.ic_b_report{background-image:url("../img/b_report.png")}.ic_b_rename{background-image:url("../img/b_rename.svg")}.ic_b_routine_add{background-image:url("../img/b_routine_add.png")}.ic_b_routines{background-image:url("../img/b_routines.png")}.ic_b_save{background-image:url("../img/b_save.png")}.ic_b_saveimage{background-image:url("../img/b_saveimage.png")}.ic_b_sbrowse{background-image:url("../img/b_sbrowse.png")}.ic_b_sdb{background-image:url("../img/b_sdb.png");width:10px;height:10px}.ic_b_search{background-image:url("../img/b_search.png")}.ic_b_select{background-image:url("../img/b_select.png")}.ic_b_snewtbl{background-image:url("../img/b_snewtbl.png")}.ic_b_spatial{background-image:url("../img/b_spatial.png")}.ic_b_sql{background-image:url("../img/b_sql.png")}.ic_b_sqldoc{background-image:url("../img/b_sqldoc.png")}.ic_b_sqlhelp{background-image:url("../img/b_sqlhelp.png")}.ic_b_table_add{background-image:url("../img/b_table_add.png")}.ic_b_tblanalyse{background-image:url("../img/b_tblanalyse.png")}.ic_b_tblexport{background-image:url("../img/b_tblexport.png")}.ic_b_tblimport{background-image:url("../img/b_tblimport.png")}.ic_b_tblops{background-image:url("../img/b_tblops.png")}.ic_b_tbloptimize{background-image:url("../img/b_tbloptimize.png")}.ic_b_tipp{background-image:url("../img/b_tipp.png")}.ic_b_trigger_add{background-image:url("../img/b_trigger_add.png")}.ic_b_triggers{background-image:url("../img/b_triggers.png")}.ic_b_undo{background-image:url("../../pmahomme/img/b_undo.png")}.ic_b_unique{background-image:url("../img/b_unique.png")}.ic_b_usradd{background-image:url("../img/b_usradd.png")}.ic_b_usrcheck{background-image:url("../img/b_usrcheck.png")}.ic_b_usrdrop{background-image:url("../img/b_usrdrop.png")}.ic_b_usredit{background-image:url("../img/b_usredit.png")}.ic_b_usrlist{background-image:url("../img/b_usrlist.png")}.ic_b_versions{background-image:url("../img/b_versions.png")}.ic_b_view{background-image:url("../img/b_view.png")}.ic_b_view_add{background-image:url("../img/b_view_add.png")}.ic_b_views{background-image:url("../img/b_views.png")}.ic_bd_browse{background-image:url("../img/bd_browse.png")}.ic_bd_deltbl{background-image:url("../img/bd_deltbl.png")}.ic_bd_drop{background-image:url("../img/bd_drop.png")}.ic_bd_edit{background-image:url("../img/bd_edit.png")}.ic_bd_empty{background-image:url("../img/bd_empty.png")}.ic_bd_export{background-image:url("../img/bd_export.png")}.ic_bd_firstpage{background-image:url("../img/bd_firstpage.png")}.ic_bd_ftext{background-image:url("../img/bd_ftext.png")}.ic_bd_index{background-image:url("../img/bd_index.png")}.ic_bd_insrow{background-image:url("../img/bd_insrow.png")}.ic_bd_lastpage{background-image:url("../img/bd_lastpage.png")}.ic_bd_nextpage{background-image:url("../img/bd_nextpage.png")}.ic_bd_prevpage{background-image:url("../img/bd_prevpage.png")}.ic_bd_primary{background-image:url("../img/bd_primary.png")}.ic_bd_routine_add{background-image:url("../img/bd_routine_add.png")}.ic_bd_sbrowse{background-image:url("../img/bd_sbrowse.png")}.ic_bd_select{background-image:url("../img/bd_select.png")}.ic_bd_spatial{background-image:url("../img/bd_spatial.png")}.ic_bd_unique{background-image:url("../img/bd_unique.png")}.ic_centralColumns{background-image:url("../img/centralColumns.png")}.ic_centralColumns_add{background-image:url("../img/centralColumns_add.png")}.ic_centralColumns_delete{background-image:url("../img/centralColumns_delete.png")}.ic_col_drop{background-image:url("../img/col_drop.png")}.ic_console{background-image:url("../img/console.png")}.ic_database{background-image:url("../img/database.png")}.ic_eye{background-image:url("../img/eye.png")}.ic_eye_grey{background-image:url("../img/eye_grey.png")}.ic_hide{background-image:url("../img/hide.png")}.ic_item{background-image:url("../img/item.png");width:9px;height:9px}.ic_lightbulb{background-image:url("../img/lightbulb.png")}.ic_lightbulb_off{background-image:url("../img/lightbulb_off.png")}.ic_more{background-image:url("../img/more.png");width:13px}.ic_new_data{background-image:url("../img/new_data.png")}.ic_new_data_hovered{background-image:url("../img/new_data_hovered.png")}.ic_new_data_selected{background-image:url("../img/new_data_selected.png")}.ic_new_data_selected_hovered{background-image:url("../img/new_data_selected_hovered.png")}.ic_new_struct{background-image:url("../img/new_struct.png")}.ic_new_struct_hovered{background-image:url("../img/new_struct_hovered.png")}.ic_new_struct_selected{background-image:url("../img/new_struct_selected.png")}.ic_new_struct_selected_hovered{background-image:url("../img/new_struct_selected_hovered.png")}.ic_normalize{background-image:url("../img/normalize.png")}.ic_pause{background-image:url("../img/pause.png")}.ic_php_sym{background-image:url("../img/php_sym.png")}.ic_play{background-image:url("../img/play.png")}.ic_s_asc{background-image:url("../img/s_asc.png")}.ic_s_asci{background-image:url("../img/s_asci.png")}.ic_s_attention{background-image:url("../img/s_attention.png")}.ic_s_cancel{background-image:url("../img/s_cancel.png")}.ic_s_cancel2{background-image:url("../img/s_cancel2.png")}.ic_s_cog{background-image:url("../img/s_cog.png")}.ic_s_db{background-image:url("../img/s_db.png")}.ic_s_desc{background-image:url("../img/s_desc.png")}.ic_s_error{background-image:url("../img/s_error.png")}.ic_s_host{background-image:url("../img/s_host.png")}.ic_s_info{background-image:url("../img/s_info.png")}.ic_s_lang{background-image:url("../img/s_lang.png")}.ic_s_link{background-image:url("../img/s_link.png")}.ic_s_lock{background-image:url("../img/s_lock.png")}.ic_s_unlock{background-image:url("../img/lock_open.png")}.ic_s_loggoff{background-image:url("../img/s_loggoff.png")}.ic_s_notice{background-image:url("../img/s_notice.png")}.ic_s_okay{background-image:url("../img/s_okay.png")}.ic_s_passwd{background-image:url("../img/s_passwd.png")}.ic_s_process{background-image:url("../img/s_process.png")}.ic_s_really{background-image:url("../img/s_really.png");width:11px;height:11px}.ic_s_reload{background-image:url("../img/s_reload.png")}.ic_s_replication{background-image:url("../img/s_replication.png")}.ic_s_rights{background-image:url("../img/s_rights.png")}.ic_s_sortable{background-image:url("../img/s_sortable.png")}.ic_s_status{background-image:url("../img/s_status.png")}.ic_s_success{background-image:url("../img/s_success.png")}.ic_s_sync{background-image:url("../img/s_sync.png")}.ic_s_tbl{background-image:url("../img/s_tbl.png")}.ic_s_theme{background-image:url("../img/s_theme.png")}.ic_s_top{background-image:url("../img/s_top.png")}.ic_s_unlink{background-image:url("../img/s_unlink.png")}.ic_s_vars{background-image:url("../img/s_vars.png")}.ic_s_views{background-image:url("../img/s_views.png")}.ic_show{background-image:url("../img/show.png")}.ic_window-new{background-image:url("../img/window-new.png")}.ic_ajax_clock_small{background-image:url("../img/ajax_clock_small.gif")}.ic_s_partialtext{background-image:url("../img/s_partialtext.png")}.ic_s_fulltext{background-image:url("../img/s_fulltext.png")}*:focus{outline:none}body{text-align:left}h1,.h1{font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;color:#377796;margin:0;letter-spacing:-1px;line-height:1}h2,.h2{color:#377796;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;margin-top:10px;margin-bottom:0;line-height:1;letter-spacing:-1px}h3,.h3{font-family:"Open Sans Extrabold","Segoe Black",sans-serif;text-transform:uppercase}input,select{font-size:1em}textarea{font-family:"Consolas","Lucida Grande",monospace;font-size:1.2em}.table td{touch-action:manipulation;vertical-align:middle}.table .table-light th{font-family:"Open Sans Bold",sans-serif;font-weight:normal;border-bottom:1px solid #ddd}.table .table-light th a{color:#666}@media only screen and (min-width: 768px){.table th.position-sticky{top:87px}}select#fieldsSelect,textarea#sqlquery{margin:0;height:20rem}select.form-control{padding:4px}.nav-pills .nav-link{margin:0;padding:5px 15px;font-weight:normal;background-color:#f6f6f6;color:#333;text-transform:uppercase;font-family:"Open Sans Extrabold","Segoe Black",sans-serif;border-radius:0}.nav-pills .nav-link:hover{background-color:#f7f7f7;text-decoration:underline}.nav-pills .nav-link img{margin-right:.5em;vertical-align:-3px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background:#ccc;color:#333}.nav-tabs{font-weight:bold}.nav-tabs .nav-link{font-family:"Open Sans Bold",sans-serif;background-color:#f2f2f2;color:#555;border-color:#fff #fff #ddd;margin-right:.4em;padding:7px 10px}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{background-color:#e5e5e5}.nav-tabs .nav-link.active:hover,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-item.show .nav-link:hover,.nav-tabs .nav-item.show .nav-link:focus{background-color:#fff}.navbar{background-color:#f7f7f7;padding-left:20px;padding-right:20px}.navbar-nav .icon{margin-right:.5em;vertical-align:-3px}.navbar-nav .nav-item{padding:8px 10px}.navbar-nav .nav-item.active{background:#fff}.navbar-nav .nav-link{text-transform:uppercase;font-family:"Open Sans Extrabold","Segoe Black",sans-serif;font-weight:normal}.card{margin-top:1rem}.card-header{font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;font-size:1rem;border-bottom:0}.card-footer{border-top:0}#maincontainer .card{background:none;border:none;margin:0}#maincontainer .card-header{background:none;color:#377796;font-size:2.8em;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;padding:0}#maincontainer .card-body ul{padding-left:0}.breadcrumb-navbar{padding:.89rem 2rem;margin-bottom:0;background-color:#377796}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-left:.5rem}.breadcrumb-navbar .breadcrumb-item .icon{margin:0}.breadcrumb-navbar{color:#fff}.breadcrumb-navbar a{color:inherit}.breadcrumb-navbar a:hover{text-decoration:none}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-item::before,.breadcrumb-navbar .breadcrumb-item::before{width:10px;color:#eee;content:"›"}.breadcrumb-navbar .breadcrumb-item .icon{display:none}.breadcrumb-navbar .breadcrumb-comment{font-style:italic}.alert{text-align:left}.alert a{text-decoration:underline}.alert h1,.alert .h1{margin-bottom:.2em}.alert-primary{color:#fff;background-color:#3a7ead;background-image:none}.alert-primary a{color:#fff}.alert-primary h1,.alert-primary .h1{color:#eee}.alert-success{color:#fff;background-color:#01a31c;background-image:none}.alert-success a{color:#fff}.alert-success h1,.alert-success .h1{color:#eee}.alert-danger{color:#fff;background-color:#d44a26;background-image:none}.alert-danger a{color:#fff}.alert-danger h1,.alert-danger .h1{color:#eee}#maincontainer .list-group{margin:1rem 0 0;padding-bottom:10px}#maincontainer .list-group-item{border:none;display:list-item;padding:0}#li_select_server.list-group-item,#li_change_password.list-group-item,#li_select_mysql_collation.list-group-item,#li_user_preferences.list-group-item,#li_select_lang.list-group-item,#li_select_theme.list-group-item{display:block;padding-top:10px;padding-bottom:10px;padding-right:10px;padding-left:20px}#li_select_server.list-group-item:hover,#li_change_password.list-group-item:hover,#li_select_mysql_collation.list-group-item:hover,#li_user_preferences.list-group-item:hover,#li_select_lang.list-group-item:hover,#li_select_theme.list-group-item:hover{background:#f6f6f6}#li_select_theme::after{content:"Scheme: win";margin-left:10px}.modal-header{color:#eee;background-color:#377796}@media print{.hide{display:none}body,table,th,td{color:#000;background-color:#fff;font-size:12px}a:link{color:#000;text-decoration:none}img{border:0}table,th,td{border:.1em solid #000;background-color:#fff}table{border-collapse:collapse;border-spacing:.2em}thead{border-collapse:collapse;border-spacing:.2em;border:.1em solid #000;font-weight:900}th,td{padding:.2em}thead th{font-weight:bold;background-color:#e5e5e5;border:.1em solid #000}th.column_heading,th.column_action{border:.1em solid #000}table tr.odd,table tr.even{border-left:.1em solid #000}table tr.odd th,table tr.even th{border-bottom:.1em solid #000}table.data th{border-bottom:.1em solid #000}#page_content{position:absolute;left:0;top:0;width:95%;float:none}.sqlOuter{color:#000}.cDrop,.cEdit,.cList,.cCpy,.cPointer{display:none}table tbody:first-of-type tr:nth-child(odd){background:#fff}table tbody:first-of-type tr:nth-child(odd) th{background:#fff}table tbody:first-of-type tr:nth-child(even){background:#dfdfdf}table tbody:first-of-type tr:nth-child(even) th{background:#dfdfdf}.column_attribute{font-size:100%}} + +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZW1lLmNzcyIsIi4uL3Njc3MvX2ZvbnQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcm9vdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yZWJvb3Quc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy92ZW5kb3IvX3Jmcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uL3Njc3MvX3ZhcmlhYmxlcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYm9yZGVyLXJhZGl1cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190eXBlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19saXN0cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jb250YWluZXJzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19jb250YWluZXIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdGFibGVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190YWJsZS12YXJpYW50cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19sYWJlbHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS10ZXh0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY29udHJvbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLXNlbGVjdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLWNoZWNrLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tcmFuZ2Uuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZmxvYXRpbmctbGFiZWxzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2lucHV0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19mb3Jtcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3RyYW5zaXRpb25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Ryb3Bkb3duLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2J1dHRvbi1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXYuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2NhcmQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYWNjb3JkaW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JyZWFkY3J1bWIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19iYWRnZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hbGVydC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYWxlcnQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jbG9zZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19tb2RhbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYmFja2Ryb3Auc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fc3Bpbm5lcnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2NsZWFyZml4LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fY29sb3JlZC1saW5rcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3JhdGlvLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fcG9zaXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19zdGFja3Muc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL192aXN1YWxseS1oaWRkZW4uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3N0cmV0Y2hlZC1saW5rLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdGV4dC10cnVuY2F0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190ZXh0LXRydW5jYXRlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdnIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3V0aWxpdGllcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fYXBpLnNjc3MiLCIuLi9zY3NzL19jb21tb24uc2NzcyIsIi4uL3Njc3MvX2VudW0tZWRpdG9yLnNjc3MiLCIuLi9zY3NzL19naXMuc2NzcyIsIi4uL3Njc3MvX25hdmlnYXRpb24uc2NzcyIsIi4uL3Njc3MvX2Rlc2lnbmVyLnNjc3MiLCIuLi9zY3NzL19jb2RlbWlycm9yLnNjc3MiLCIuLi9zY3NzL19qcXBsb3Quc2NzcyIsIi4uL3Njc3MvX2ljb25zLnNjc3MiLCIuLi9zY3NzL19yZWJvb3Quc2NzcyIsIi4uL3Njc3MvX3RhYmxlcy5zY3NzIiwiLi4vc2Nzcy9fZm9ybXMuc2NzcyIsIi4uL3Njc3MvX25hdi5zY3NzIiwiLi4vc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi9zY3NzL19jYXJkLnNjc3MiLCIuLi8uLi9ib290c3RyYXAvc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYWxlcnQuc2NzcyIsIi4uL3Njc3MvX2xpc3QtZ3JvdXAuc2NzcyIsIi4uL3Njc3MvX21vZGFsLnNjc3MiLCIuLi9zY3NzL19wcmludC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdDQUEsdUJBQ0UsQ0FBQSxtREFDQSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSxXQUdGLDZCQUNFLENBQUEsK0RBQ0EsQ0FBQSxrQkFDQSxDQUFBLGlCQUNBLENBQUEsV0FHRiw0QkFDRSxDQUFBLDZEQUNBLENBQUEsa0JBQ0EsQ0FBQSxpQkFDQSxDQUFBLFdBR0YsaUNBQ0UsQ0FBQSx1RUFDQSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSxNQ3pCRixrQkFRSSxDQUFBLG9CQUFBLENBQUEsb0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGlCQUFBLENBQUEsb0JBQUEsQ0FBQSxvQkFBQSxDQUFBLG1CQUFBLENBQUEsa0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGdCQUFBLENBQUEsa0JBQUEsQ0FBQSx1QkFBQSxDQUFBLHNCQUlBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHFCQUlBLENBQUEsb0JBQUEsQ0FBQSxxQkFBQSxDQUFBLGtCQUFBLENBQUEscUJBQUEsQ0FBQSxvQkFBQSxDQUFBLG1CQUFBLENBQUEsa0JBQUEsQ0FBQSw4QkFJQSxDQUFBLGlDQUFBLENBQUEsNkJBQUEsQ0FB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LENBQUEsVUFQSiwwQkFPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsYUFQSiw2QkFPSSxDQUFBLFVBUEosd0JBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsVUFQSiw0QkFPSSxDQUFBLFVBUEosMkJBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsVUFQSiwyQkFPSSxDQUFBLGFBUEosMkJBT0ksQ0FBQSxTQVBKLG9CQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxTQVBKLHVCQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxVQVBKLDBCQU9JLENBQUEseUJBQUEsQ0FBQSxVQVBKLCtCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDhCQU9JLENBQUEsNkJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsNEJBQUEsQ0FBQSxVQVBKLCtCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsNEJBQUEsQ0FBQSxVQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLHdCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosNEJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosMkJBT0ksQ0FBQSxVQVBKLDBCQU9JLENBQUEsVUFQSiwrQkFPSSxDQUFBLFVBUEosOEJBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsVUFQSiwrQkFPSSxDQUFBLFVBUEosNkJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSixnQ0FPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDhCQU9J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 */ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/ajax_clock_small.gif b/Sources/php_script/script/phpMyAdmin/themes/metro/img/ajax_clock_small.gif new file mode 100644 index 0000000000000000000000000000000000000000..bde4932c854f3f67047e9c595d55bb6060412d8b GIT binary patch literal 1810 zcma*mdrVVT90&00z32Ac-bZ_=l@&x&O3}8ow!BIeb+_dyFa}J4@fbyhqYh?aLl`2` z2SO`PWjY*A-PneL8{i{*QL&Qfwzx@Vw(OPQ!WLh1ut%nei)%@??2j(l`SW*9PCohm ze!sL$sfM-X5P`^V2=egZLj*zQ=jYvS_w4L!YHDgzQ@3lM=H=hb{4y)c#-m3P*_{=+bu zY$7iidq>j4T(g(GqoUIn%Ez!blkHykBPV_8oY;7?@Lq4u5V!EIY>UHwIyZv<>2;H> zB=P7K`eO7+5hKBOe6}t|9=a3b03~l$#{wZuvA|vyfs#CgeHygJ177SQ8U1`bO;?5^ zfAjuj+3B}fxXQKN$wu-cBkY`TPcKXfg0v$cW^0vP(v?&m$w~3fOE<0QCrI)L9BZ6R zMQz^tCtPCaSkf5LhO+>8*PQ>(x%Wx&w(cO1g_g-MoU&4}CP#q{KtOktHfQnJ68-*N z%}s|5M-qw?0#X|Nl&=^c1tgOxGO}mF?Q~4V)Tu`vIaZr9EpA6!5wT?Z8LxTX0C~i1 zk(Yy{VQX-@NG(;(e6N#e-el)%QVS$^=hjYU- z9+c(E`3VR7VQHmpQKf4;8X%k5v47aRX^UQ z-K#P_+qdU{o6hX-be9@i^!j7^fVosJwn*a7MMhp)Sm~p*FQ=JF4}xjFFzC{O$Ufe> zAv^InbM@n(&CZlNSK(yv+sp3OE`y;rhJG5ae3iMiWk+UASwYb+-*x7@&O~p2rT|oO zFVv@NwGHM++g#gPBKEru>iZ8w1O&AB0q?1O0K1HIEQC(0sJ)4dHScsJ>Ku#E@rDkY zk4vXQS6{3cPz(iQ{TUn=w(|TV7tV^rq1xyR7Ay{Sc+Hdfr$Su-Gkx#L2ST=fw^LR@ z5O{gEMavMS1fx`TX$TU@s;u6_C+Hf>ZUhi)O=WRZK+=nT(kAF5d1d5dzv`z|-eFln z%9Vpo8<(a~WUabpt=-NQwY}xK|9+5^asC|1odOVV7%fstq0?H8DX5-y+qF~OBw71= zy=rMNLFBEf;6XlNCWK0*f*~;C`8{PBy`W=bS&4vHEl8_LAUoxOHH!Z{9M3gN3;F&n4GP zv_;AVS6;bol`s^)guv4ftdY-WcOzUBXa)>}3W*I-6cK$u!%r!XN2`^AEsM!02j_-g zU2Po9JhA_s*{{3Qubul-01miPN)*+O!4spiOp6U?kQJ|*b~-4`9!^f)oZ^Z786wO|A$6jIjWJXtdz?L@$?-V|0LLRW$E0Ef-fR2PmZmS0-EGSQX4UXC2^XeVpM<-qHdHYw5Vvl7RT4Y zfhakK?F_7`_fO5Drn>l~{5my}0c(q2_trA81LoY~dxH3-wtMSB1n!sS!KT7+-Bg`1 z*&tz(c8>IZB*wo@&)H@P^2}L~+68 zyYpyHVQM|YlsXNi-_C$Yo#LIaj9vpnwkOTcse;_?drfE51EJk*w^m8k zQ*E}+Gv9=Ws>Ydu77hHc&pe~%Gwla|ACjo=Y{XE=OQcvsUiNx5jkUq`(VK;^l!sC; SSAf1ltJ&ITn}ELj!~W literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_ltr.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..31ea614ddb73159a16ac67010cf93d4e27c60a3c GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2~3gRVzb)6kADY6r;B4q z#jWH7iI)o6+TCKujD)u2-`bM-WrNV!`YT(fPCW5p$)dGAM~=&1b)Hdovc2=4Wa5=m rf!gkCRklYgPYQJCPs$eQ5n*7sA}Kg&#_`VoAhSJP{an^LB{Ts5n(#4l literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_rtl.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..5005524788b73c0d917b63a534ef106976e24f05 GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2~3gRVzb)6kADYQr;B4q z#jWH73D%URHEVQiHuY@ToPTRe=9djZXX_(!Q%q$kI^IAH-J!_po6m(OU~egm28>FVdQ&MBb@0QEU8=>Px# literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_chart.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..00ebb5027183b78eb30529961b6c8ff6ad6126fa GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6N~y_6PDEP~dR3RQ;`Z z=fBuoCgwS5-pzqETf7$JU({D{zICcJ@x-~C*UHv1da$P)l*nlanw5Pk%dO?`JniQl zS#q)^PtHBN8dmMB`s=XOg!?t;KXIKf+R8Y?p=0s9y%q^y)Vf)@9w YQ_w!M;+uCGfDT~rboFyt=akR{0I_C7b^rhX literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_close.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_close.png new file mode 100644 index 0000000000000000000000000000000000000000..8e4ebe30315b2b681bdb7fa06ddd6806c863041d GIT binary patch literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6l097~qofyb>K!L;AGPU~u z7kD;NspBuxla1VuH!!@M zl*qfnaXp`fWk4wJfs8ZJkL$YU*&d#C_}8R&%i`@`GdUl)cy9h>Q$C<|44$rjF6*2U FngA4{JYE0* literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_column_add.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_column_add.png new file mode 100644 index 0000000000000000000000000000000000000000..771e7414f024c919d59845e4501a71c9fedc1e1a GIT binary patch literal 1171 zcmV;E1Z?|>P)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+^+`lQRCwBik+DicK@dgHJ`)HL?JWdF z2&4<97i_in0}NQiAFvW6O`6zg;fL7Ri-i$CKtDl|1oC!vUR;Ye*(4%yo4w55J@>-6 z$m)~*^G>C_dNH5`uH8&41GhlP*`bA)-c33g1SQ~22b6p{!Xs4emmpLL%LI?0DMAu$ z!LW{)!BZ!s4i*uZ;A|N1#NQFZCk1Nyl@A)6<|mhlP&O~D!vXtj@mPDgI^Hxwfue@p zqlKdhw29~0tb;OT3c!erL!iSp)GR_7@=dw8G4H%_#vN-j2%l{OD#Jj0Fq lYu!hE*Nq#DxxK&m82}J%Vwapgk$M0C002ovPDHLkV1j;?`XT@T literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_edit.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..12bc574db2237a556bb1caede46cf143688d6ea7 GIT binary patch literal 1073 zcmV-11kU@3P)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+lSxEDRCwBakueejAq)do43EtJKe8!o z!(EDapa3Ju5|RJ4;Y0AXt0I^MfuARJ1Aq%?%oUSZZ^EjE7lXAFawKSNftXSe7>29e z{HBrnMNJ&6Db97q>UN>c2=8eE8bG1ZDTekhff$kt@<tB4t9=-zr>f=m`dmp;F00000NkvXXu0mjfUW3Rn literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_empty.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..c7735fb97d7dfd9ba8302607d4d47557a4fc6453 GIT binary patch literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf63OrpLLn?071~LjAP~dnq^~3+^ z2H9!5qK>CVsm$ulWxpi1Ff!1fB%0%++tuoe{Vwd6iYnM-R|_~hc`Ri$Qp`}!{oa

        {i`{QdX)-icm&?Jh%P>BKWEl_sSnqWX4Oq@n9;RH=z71_=Z?%9cbRMK*EPD{ SaM}U1o59o7&t;ucLK6UXd_PqH literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_event_add.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_event_add.png new file mode 100644 index 0000000000000000000000000000000000000000..23c23cf00f4b59d81583639a42bce9a1b8f77d57 GIT binary patch literal 272 zcmV+r0q_2aP)jX48%e$oCPez0_A5XpIE2`EMNf(wNMLKI19Z^9~5S8G7KTvWH-ySPBlCqd>{rR6}5QTZPzL`s~(wHDEEf7j;#Y+j1YCyCaeiRdFqkX6;XA=#$E1_=kWoKv3nZ0Bc zrDa^t&Iu_084F)$>ntLG_~-^#{($!T9S8AI=DDY{=QO0R&ys@}x$ejJ2DIB24Um)X z=IRW^I_WB)@*{76+;1JcXu$8eEem=t)}4SB9(Wbs?z5S5Mlb1-HhIzsXyJjEU&9@1 zy=p;Ej{)UxaVyY33s2)MkeE*Tl*Ds-&6ZM7gGMla56?QKRpe2YETo_Yjnq6gPkOGU zRl7`Efd*Qkfo-bn=F*^t$oV0<9dYV8XrL7uI3tb1z@Rv^_>A>rsBVC)CN>yqbboij x|2^XRF%ct&8Z?N-H!xIYo0ZW}|NQeZ%>fdh!Dh~~4SoOs002ovPDHLkV1kV9oH_si literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_find_replace.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_find_replace.png new file mode 100644 index 0000000000000000000000000000000000000000..b49915fd1f26b217eed79d16ab563f6c778fe8a2 GIT binary patch literal 641 zcmV-{0)G98P)0S)H;bng>^L~3!=dH({2J-Fy|M!x(6~qo4IGl4npWp9yE-cnjH7!efES*jp zl8Hnu9w&RTXtWm!1!_K@&p@yJ6W-lTd8?HQ+U*v)-7Y$v4)z)iBolFXJZ|q_C8<=x zP^pv|uwJWy9+yicRI61qn@vQ*Va&?qC8cT(lT%Y~1_UHY)>^F=1DDGsl!`?Z3VGyn zIY#7ke#N`@M!bCW8k`$9acO+q(I=qmrBkNiVzGciK95{Bi%dEVlgR|T{WI2`-@p^x z!qscnaqj%ck3K;t80@v%Z4?UyCMpf5l1W%BW&{F$N@77U7=deJ6BkEEGebi|r}_ln zz1~{A{yY6_Cc{LwT4^YNFjYT2Hknpovk}2FV`C==&R~1nV~9p0Xi%q~&*zxPe!mZ~ zSQH=aHki$;P%0nybj!<^552~%txYct(Iu>`=s}V@3~V$SpjNBlbZy}2;U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+iAh93RCwBikx32%F$e^!(L6Fg%rh$o zgU6#ti4T@BO)nzy`&{q>AOHyND)6R`77){uf-VL&gZu3&B?U552)Qc))SkI9NE|yg z&AB(End{JZ*fuO}QquY!Oj|-4Jk}b$zAgwT>2Nk?vK8o)IGoYz2%Yc1E#c9)nGTbI h*c6Y=0QtA>&j1cQJ0~(aol*b*002ovPDHLkV1nwHzf%AJ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_lastpage.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_lastpage.png new file mode 100644 index 0000000000000000000000000000000000000000..9408ceabf43f2da4d2bf0999d507cd2acca3011e GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6vOQfKLn>~yPP{F8K!L;AIQ35b zq>!~wD{nQ~A7WK>`thywOq(3PW2?$?bC0Fl6gRz^WAcP8gX6%3Oy;$0g|nE~ypGJC zZ7*gekX#ivQ_vuDlaiM9vo90YzI6W85OOhb&&v<1RiebN?O!qBxSr0rkJp?3-uVu+ Omci52&t;ucLK6TZRzaZv literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_more.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_more.png new file mode 100644 index 0000000000000000000000000000000000000000..d57577dbb93e3ad35a790f1c208b9b7536609861 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6B0XIkLn>~yPB_TRpuoXA_tTwv zp(_~yo)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ-6iGxuRCwBi(LYa=-cn0>yy0A0BYH1e+VJPm63cC0P^aU7=3xw_@g|y{qdkn2ZYl7cf zF1g%&|6B?WBYPhcQxg-jAGhXFV7w+=?D+aY8hO-xPI6=irE@6r;*>qT>`z?&Ga zTuHr!$}Rf_p1N~MKRQ~c!$2uhRaG@oXr~Jox=BMl{mdUhiLbu+W}v`v8l&5@=~@$f zjye8BV=0onmS2UCCFc^>|FJkXQ+jN}wr!NnZ9-m2dpeL!eFx9X(2OziTI{8Y7NoOy z34S|Lc%pDgUq`Du3}ny!TCmP$?X{h_^IV5bP0l+XkK%B5Qo literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_plus.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..e4247c3a48ec9bb180c924da1f30c10d7405ef1f GIT binary patch literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6JUv|;Ln>}1bEE@dGRJWy#YH^- z3l9|-a6bOy-foauz`BBAc~ik9kp`KrB@8F)b~F_@skI0fIa?^kw+M5w?@{!$XMJ(8 an~$-qP;7DD3iDQ=p$wj`elF{r5}E)4=_iZ; literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_routine_add.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_routine_add.png new file mode 100644 index 0000000000000000000000000000000000000000..b63a6955691717481f56f51fd0a364f43161747c GIT binary patch literal 285 zcmV+&0pk9NP)Zw0kjnfs3B$8)<_+ia#gcLF1W-u?gdJp%j%(L%aQUGSjTcVwGcAgetX{ zmBVEM*E53#2Ai1zaWX>41uuY0fLwuM016d1c*6O`d*@s3D@-oK-%`B8(j#B_j(dwQ zg8`VMRfSp=EPhOu{~qFGMLGb2Pz_`#1yV4BD<0_aJNF7qMGf12oK}SptVK;*&Oh0( z+P>h1eFPd#_rajS1SbL@a7YTyFUMelGy3ny^Uvc7JqR3jJa4I>K(N`T2!jxQhG(zI-aS=n=9400000NkvXXu0mjfeJpj^ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_saveimage.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_saveimage.png new file mode 100644 index 0000000000000000000000000000000000000000..d3f17c8a83ee31ce1b87784345badee5fbceec9d GIT binary patch literal 597 zcmV-b0;>IqP)h(G~olf$4z2x`%X}w+(YOVx{ zL}CN>YPCv2D_lGr4yn`WP_x;jcDv2*9S#QtgF#v@m$wOU5>7{PtJR`ftwut7Tnu$4 zlZhgc$ZZ1j-)J-_l}b^s*JCx0kB>|!n8tI1!9dYyls)*103JYYE|+5^AVA-NK!98> z7Z+MA7P4Bc39=1+wJyi;qiE+!{I>reEx#~(I6s31$j!PlJt5#6P!*b#`%0^ zyuH2g8Y=Ja?>`7;v)L8X>6BZ5v9VZ;ggx9^C=_BKPWYqMYHt$&Mx&AA6Fg!(JUmc1 z9KIIAOjaPo^aI%<3B-vffHrU!K#u4>1K)iY{)s};u! zg8|I(4l1NlDT%%sYPFgslL;F(pU>&#<%JfD1~yPUPl0pupi=ed_sN z|3_z9PEOc)#Xrd_Iv_T^=jt!>ISV+i#2w(A!S(&v>r}4CC$ly?ZK;Tf~SPUPlmFyL^uOx^k4 z^TOFHWgW_rDhD2mOX_7~SPP{F8K!L;AIQ2%o z(5kN!7p$$(DB^s^p(J40B)PKqbky4Ef=d%-GCr`VRN>z6E5Ctbx7kuFr((`}!5ud* z?Otp(L!x*s^MrzZzgb+eT>=Hx{`}8%xLx~8%kJZ$%ed?I9`p$p|6c##)x(7!7>s)U V2D6_Qy#utJ!PC{xWt~$(698l3LR0_% literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_tbloptimize.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_tbloptimize.png new file mode 100644 index 0000000000000000000000000000000000000000..2dbd1b1bd58e532fcbe867b981019ce9ebb5d7d6 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6$~;{hLn>~yP7LI0FyL^uO#S}& z@A|-0XN~BdOaq_Y?&i5SgmNOjZvDh=epLEQozw-M3%YX|;$-GVvax)cDeofb7~RF< zoA|-MW_R%sZwIMKFW71XE-jGU^J!8E%M=IR>XZ!iBBpb}1>84{S3FTu4E@iR_n<#- YXW;LB5vvTWfi7V1boFyt=akR{0EA3GEC2ui literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_unique.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_unique.png new file mode 100644 index 0000000000000000000000000000000000000000..c12942a624c55aeac182f17872707db822a82298 GIT binary patch literal 1067 zcmV+`1l0S9P)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+jY&j7RCwBakxLT8APhsF7!KJZ_Lk~G zwgX*+$>d{X`6*8;B@f-AjbX7p~D zuvIeuRmvQbaQ1a)JK7h?yz9SoIO(>)`eb(gg>&70?#`8y$<>;)F;?jB)eeionKpv? tLZ9r{?bE)J)x)Wx&`zHgQu&X%Q~loCII5OWeWfR literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_versions.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_versions.png new file mode 100644 index 0000000000000000000000000000000000000000..27c01a9fb869e06ea63542ddb549efa0a134eddb GIT binary patch literal 446 zcmV;v0YUzWP)=*6DOuv)N>gMuQoK!D_V{t5&P>F6IXQUZc@y zzgn%BpXBrTy#f%G{U(#iFa;o5zFx1sl1ioi2UwQ%zS(R(r_(7+CKDKs$1ofYVK5j# zuh#?e1C>ez$O|VIuO6V)YDvI+KL6Tox9}*7#R8VgB`+3>A0B{SBtTSt7AgkaZkLk_ z?g6MBJ(tU|cDoIy(+Q5pBiOdBE|XzvqIB!QF0WQ>)*!cO>&j6_Lh} zsw15Ztk>&EX9CFu27^IO0gymkuh&mQ!m&^&xE`QXDoKE->^IqL7CnHbX$HCAqGi{0 zeI=bvqvC?T_rpcE+f7D1lT5rP^J(Q@Kq8S)0p)Vp_ZGt8unHg-Z}itmLAtKXHj~LD o#^Z5}#bOwZMllkJ$i-sr5842Jd(H;rNdN!<07*qoM6N<$f-M5bumAu6 literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_empty.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..e5295b925e2bc6002d1573de22da6965b161cd48 GIT binary patch literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6Dm+~rLn>~~o#@SXK!L->^63u6 zJO9O|^lM6N?S5uD?U8|VP*9LmTVBd_xxPz&z7HmpG%D*Y=nNIwD{v)cuKtur)7zcz zmNRH37~PJUq@=LwPoL}((_@|oieIl@U|qp->ww4t*9Yz_`QDG-HEd=M+Mux7`9JfD a?RV`;FP~)JnK=jK6b4UMKbLh*2~7Yrr9_GV literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_insrow.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_insrow.png new file mode 100644 index 0000000000000000000000000000000000000000..c3feac498485d19f7a2e36f1640bda1f77448ddd GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6nmt_{Ln>~SPK@O{puo{=sk%qt zT|KwjCuJ+&$6}ASi&+aKC>+?hV(;`f5wnlYb9^TJoNvoY<~Hd~jB0!rkGy=Z@NlB= z)R|FfE>qgiDp;fQ<1ALR^*XS`*658FNp!-)-YVKr%{2go8%ZDXO zZ#3YP?A@}v>C6R=XUR&jA#!=b%1U2kbk-)>lpC~73P1GLT;81R<6S2Y{!c(V89ZJ6 KT-G@yGywqdcseNn literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_primary.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_primary.png new file mode 100644 index 0000000000000000000000000000000000000000..1f22f7e55d028943d040af5036832fafbca1cca6 GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6qC8z3Ln?07_8$~vP~>1F!jUoJ=2iJi+R_qOrg&EYGYqW&Z*d9#GJgL#dSbxhd v{xie>yF2X~?86y6j!d|~pz)XO%U%X4<@H}rD@T_CZDH_q^>bP0l+XkKwRkdI literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_spatial.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_spatial.png new file mode 100644 index 0000000000000000000000000000000000000000..c3a10ef2f6a4871c216c810030b40af7bfa8f737 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6@;qG}Ln>~S26FNpP~dnx_33~8 z#L3BFGcu2?))aARW$bDcUBhs>Php0R!gpSlg?1$ZcC2?M&*7>H-VpPuf8iyL=*Ciw zqe_VacUYGln$2R(8pWGq$yu-GHu23Os|S6{x^22Q9lGiGgV$tD@*Y`!+0XA5UWnB6 Q1KP~s>FVdQ&MBb@0A6G}pa1{> literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/centralColumns_add.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/centralColumns_add.png new file mode 100644 index 0000000000000000000000000000000000000000..54178ca39064e57b81e909dd890507268e461e04 GIT binary patch literal 635 zcmV->0)+jEP)6m?b7RcC0s?WSZQC0*rj7^)_vT@-O4F2s2N1&1icphk^~sAz)ofI@LXrGgWR z)Qu}w>C#n0T0?`qz4xOPx@o1*4<2veopaB5=YA~K|NJtU%&lIpcl)2fKA-RH>FMcZ zrBb;%KR>_n`~B}W275f7y+|Yi;cysG1*Fqyh(@EJ*X#HG3U;|%Y^)5$Vvzul%jG_L zycg z{7s=yfRmFG9!3aOtCfc&U^1DO1eD2SOSAzhZlD+ z4O=J_0vbB~G&d-33%x!^pARteU6lGzE|>3$M4~nL*C0YZpATySs)VvBd#cPdky@<= zsZoj6JG zhB6Yt2MG$-OIQ!ZifHM#@ApuHUP^)v{NVh~IiKtIcUY|dc_ov{OU-8U@;`z1_xD9! zulG~2SUfv8I5_k9d{5>EyWQ@UP$&e!U=Yv+93CD*I2;C@PPg(`u+!;eqcY@jIRZdB zoqp-@c$mG>XauoX%>E-mwOUP(y47lh?d|Q}PtrE+&1N&$?RL*^fRmFGf3MdYwpy)W zyp876sJ@w zK{OhDoXuuoZ*Px}BLs`Z!Z#QUAQFk*udc2Ft`Af&5~&%2LZMJXON;|jM&K=%%k>a} z*D&vrR4Uy>#c$NbXfy)+9?%K!`Ft-!kVqsrG$thA(9F^D8fD(v+FGN`sQ3=cC1=zF zbprI9%jLegmU8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+H%UZ6RCwBA3};~Y&wvUTnJ|PH82&Rc zU;!gWkP$U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+k4Z#9RCwBqk5LhWFc3svm>Os$#6m29 zm3lz}ScnBIL;{fzBy2w#NTv-f@9XAv=XTGC-`uMCj>}VEJGMf|YSOBjRgKLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0000*Nkl!= z+AyyuHt_^2!3ePzFgC~K7vjLO*DwW5yz2TY|KsgD9=MLmFK10;21VR*%bOvtZ7$XA z%{5zg_=SrgA1h42!_)$?x9&$utnyu5g{_lg$b&9~uBrTisfJkrMG|6=6;Rqnb0V0_ z2x11w8TkT`kcgltK{THhk&>NPkO+Do&!UCSic-}|y;y9g@-0dO1;S3JBXnj360Sl~ zmSu<}C`oCCNJkq!wc@lNP4^Wv9ND28P?z{1QM8(*O;w&bJxIX|2C{zCD-$aijI98Q z0!mWq15NY)P|q8nBU;6We*Y;P)i(kRt2iR<&}J96GM$79lwyc2O2RrJ>-{QLT7;6Q zMFLQ)Wd#u|yS_s@Q5SETis47p@@;HrD$f)I*L4)JR1|XvX}YABL{XP=a#qs{a$zx} z&F6H4`dp3JZ4djj&vg#D`cQ7t3SPh>YdCaoVW$)l4|G#j+~HmdL-l%GXSkQ*P%dO< zU~;j4U3CA5bx*P!v@P2V8XxAOP zpDvxcJ~=TlvGeo8==0CNQs=L|1iSa&r1q|EJu&7UK1DOTm1b&Y>hZIw^0sv^HS-1S gd~dn4M^nc}5%)27db<3rx|2LPLtoNf6>i-51NlKTr2qf` literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/2rightarrow_m.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/2rightarrow_m.png new file mode 100644 index 0000000000000000000000000000000000000000..b4ffefb6037c258ac2524038c90b5b94ce7735bb GIT binary patch literal 991 zcmaJ=J#W)M7&a84s!E3ff`Wu}a=Sr%XQys!E2bo|(^$eKN+Ozp0mr^JR%@TJuf*-f z*U*6l@$~~hVnC=P5(7eF=>&|hu&^;8Bo+`7oYN#_AXqxzho0wopZC4@wyR5v<721B zIF1`PD|(I1$I>x+nEmf;pB`t^Noq7{ovhG~9bvBEk`@N0Z?EDSw%yIEyExBrBfQsW z(x!Dmb%-z6DMm>Akg+)~zmSBsvxX^X;Z-lt_^&Tt@xXI6ep$AV6_#+@t87KMzO~eF zw$>cQkSJawb?!{s|jc-#Lst|TM9ifvGNVEz? zMNuG0SzcIFJqEUYS_IU}A?* z6i}K{A81+shx+~i9n%`#_xn%bxUm^xSi>>dh#YotD^qExP%TB+rX*?*vfi&^wM{6A z+av^~x-5ub*$Z6KiMx2qQq3TycHm%B*LbENc%G{&VzDq+kPC)n=%Q#yN_k!{8s%J0 z5oIHXa(%8&oDClbw9j?-xy7N}v=#i2Mb>fTUBhlUB0lJ*ta`(}%n#M;aoyowl%ZV6 z%)srZ6qN0!t;vaBv zaCOPpMg02d)DA+e?bZWX&hYSl?>Q$I7ys+e*L*%F1wjyJvza&=jmWb>p6A8MWMV?h z)a&)cv%%?fDh`K3qTB5fEX$q`avZloY}abFcC}h<^J8c{9xo8vb~>Fcb_fD5K(Scd zX0zFCDwSHC3=ReZ4`O_y(cm#5wAnVK(`i1LO!A3D!gJQxm<%$R4E);F!DN8RP6u%` z1D3z4*XxGQ`wYWCJRbi7x?C=U&1PGf&1S<<5U&Mr0}k5lH^}GnfaOc~`>|LI!r|}% z^m@Hg#DJ!0cuBp0(P%uLyi_XPS1J`~Hrf4%PnhZ<6bea#!Qjs4^X=?*y9B=nO!h?6 z3|OsJ&}cMwM?s3BuCXsOV(V(P3ejlvJrD@I777K(<#OP3I$sfarzjfqdi`3hRzE70 z%Htr8c!^iyh9pT@Bob-v529QyL%-h#e0GN#{Lg;S>2yt%N+lx*;#Q$hTz&hHurImW t?PeSf$I@c4EU_;}tJTW?f0=)~J^=q-16_PzxjO&=002ovPDHLkV1lg{=Bxk! literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/ang_direct.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/ang_direct.png new file mode 100644 index 0000000000000000000000000000000000000000..929244e4ca4297db00b363a21d41ecca81b215d1 GIT binary patch literal 3617 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 FV1ffsoels1 literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/downarrow2.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/downarrow2.png new file mode 100644 index 0000000000000000000000000000000000000000..7d7199ea98abdfc8c35620473f58cc7d30446920 GIT binary patch literal 1093 zcmaJ=O=#0l9M7nXIX7f7wNnQn6;ZVLTH7sQb#_hXiguK)uzC^Gz@?!F4vK^#~ zY*Qzw;9=mwg9lGC6_hzarVjC>9{j+Ar(Hzx0~9<6^QBui57xlT`{4Kc{XgFColEx} zY^>i_PY^_7vRBIBx!D_awfKMWTx%nqT2LZ~`r#mQWD5{673Kk%)a4&4pMYB$vhkHXO`bx_PmJu9*BE=m;;GDU`Q z9EWz=XlM;FoFE7c%QHM5#E76hY9QGS8g`(fAOTykG!tpiAU#Dn4@Xdx!kI3Ypqs0* zhP~1z+%U$KO@^acucQhvmHIza*H_Ut%7C?e|0!%|M@_(FfDK111z+4?zzb!HaSO-@ zT3HB(D_u+%AcA%Qnq<5`OmpObW~k7y%lK4EOd2+l4Fx2nD1{YhO;bgI4|NC}Cnfkq zg5wf=cY7ovw8i4>ZQ*c7JSJ4Q5>!TXV4w$oqAN$(J>GKFws^B@d|+U=TiDjK)9>!%Co!9pVp;cn z{`b;SmoE?q_{6%68=acWT+58_?bW>lUt(L=O)oqxZNGUXF!AERQETyAOYfHJ4^B^A zFHKEO_WJI`Uo9?vKl@rIPfhN+H@0wo^IgAuyJ70}^nv*h-x}HA|MYS9?S@T6@>0?N zhTZuj-TY*xr+)o--ruu3(@@H-n~-7Y*W<#Cm%B1E*gOpj$Ne83PCZLs8*kdTW5$2} tE$i+%R9Cvv96Hhzx^UU=OV$uIwZ!wEj{M{E{59`kClh_rt?pxI{s4ejVC4V+ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/exec.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/exec.png new file mode 100644 index 0000000000000000000000000000000000000000..15571bbf4c45625758b2040181962107b81ae079 GIT binary patch literal 1365 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 U34t-QfdBvi07*qoM6N<$f;mrS=lkw=$J*QW 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 PI_{Itq&lV9M9+y|6Ig7U literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/toggle_lines.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/toggle_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..708450f27a9f05b42ee1099b871207dcccc00b17 GIT binary patch literal 3595 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 RpKSmD002ovPDHLkV1heTD+vGq literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/viewInFullscreen.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/viewInFullscreen.png new file mode 100644 index 0000000000000000000000000000000000000000..e14028159b374b84dab7f86d9dde9bd47b430b5c GIT binary patch literal 1180 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 IM6N<$f(xgb$N&HU literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/new_struct_hovered.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/new_struct_hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..1130f04f3945d2658f5fc7985353f962df46844b GIT binary patch literal 303 zcmV+~0nq-5P)7?sp@n!i8N*E_`bh5ior-;fV*D^!QY?s)54aajbb`!2vk)Bc%2V zfc*^F=6P)NklUO(NY$jNwdCKN`y?#ya zP75RGgSy&ox8KL(F$jF2{wkNt_a_CkTCLZ~WP~;c$prt)|c?T^xic{gRa1 zv>Bt(2&+iUa!YOP%4$){@u>BQ>hdbMS-fS$mMdHO|e+~%x1G!$F9yd z8jY&g>qWoc$9B8LY&Jt8k-&1fM4?dlmSy>7FHGqsQk4CEKZ3y^qR}YQ=``Z;I2MZq z2vn)Z^hwe|1E0^Q!8V%>E|&|UC}J=efUHodR6vHNe_^ZD3a8Tvp6A)t7-_3?gIn4> zrGUr1a3BysBofhJhrR^;qVUp=di*-ZMWMEN`}Q^ zf!%K3fsa-w6vAe+f!S<^$K%ll{|2zXD;A4s2jlb>ZGC3iMx#+bO!WiW&mX>Xh-Vo9 O0000|0<#FujSGd8UsB}T)L8Bn=nU#vxc?T;misqowo~RT-bP~8Ko>e=W_q^i)+2d zeeG`;T@`z|^kqSKyuyo5UAlX`xE2Y|ta-(_Z6EuYI=SxH#29ObikQtwxf>>b)_MrE Om%-E3&t;ucLK6TRTt8p{ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_attention.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_attention.png new file mode 100644 index 0000000000000000000000000000000000000000..6169cb6f79fb370aa0c9907d882b76c60a6e0238 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6Hh8)?hE&|jotQ1yV!+dq&B&e3 z$Q_~ZbF;AY)`r%sm8?1mjNE&_xCXydW1gI6x6QNQ&51&8BY*y2sT2GLr-TIB1k=b}~=doWSriKrr;$ikZ(|8@tNpmn~4)$av$Ic~$wnC&h>2#8~?~Gz5dEd`=Wg ht)CG3?}YI$*1Nq+eyQ?%xB%VG;OXk;vd$@?2>=`@SfKy_ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_cancel.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_cancel.png new file mode 100644 index 0000000000000000000000000000000000000000..67d987bdaff889a641984fabd2c5cea24d875115 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6@;zM~Ln>~y26FNpP~dnx_3MBA zmye!kWSJSTc{DP){l4}y=)gxU6Nzs;{1;g^J}vWQxYPRF&suTIQ;qJ7R}EnoxLzfA z{a>VKlfkabt;XB1pX-Lj8j%aj8B8~;O)|{>c3Q4v@`U|&lj6UXbvIX^V*c{%N~P2J R9A==^44$rjF6*2UngADCK_CDC literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_link.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_link.png new file mode 100644 index 0000000000000000000000000000000000000000..babbb64a6a7084350bbfc0cc674fbe737cc7ba37 GIT binary patch literal 386 zcmV-|0e$|7P)Atb6vTx>hxQBf3pg}{(5)cBr9u=!vgle2kt9MG8c+NLgq{k zagesSWUH38U|R~W|Fa-=@92XEFL%GYKu9jPpZ^;{5RMJQxE%}z%i(ZH-EMcmp3m#` z`U$%qpuqzJ_D`7OxWjU}Y}vL=S(ed!KBq7Ysn_d0b~>FnP16r(aU2sEu*mGbU1_yi zFVpFCS*z9V81Sv@IysI*tblMsgEtzD7GROtEwK9i{+hL4$+CPTisIX3GNB|%D2gKT zeV?Gg0|OSBZ2`~o*NsMF<+|>TqA2&pV)3g~Dv_$Ho5c+c9vHC5Yzy-F{As09nOT;# z8jr`%K@gDVd1RUU8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+hDk(0RCwB?k*W^OJ>Om zuu50x3RxkH&=tJGJi9z0Gzx5TZ^h3ex6mw7KTGe0I;}X;;8url--O8Yh4Z2!j)y8IzkE4bb5%J e?&%R&B literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_success.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_success.png new file mode 100644 index 0000000000000000000000000000000000000000..407dcf2cc2d1f6ea03be2b226e0c8698f1503bc8 GIT binary patch literal 1031 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 literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_vars.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_vars.png new file mode 100644 index 0000000000000000000000000000000000000000..efeaffcf7b0d047d9200c33bb138730afebefd5f GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6T0C7GLn>~yPQ1%|K!KxW1&fFvbd<&p)kE%Vv8lN7HbEsdN;ZT5o(p*E}zi2jzV7 m42!vs%(`&>sp>7W@4FZtImBft-}eN$hr!d;&t;ucLK6TjnMi~H literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/sprites.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..a9a428ac7ac33587c14dc29a8f6bdcb5b9d54f7d GIT binary patch literal 22313 zcmX7vbx<2!8^wdWySuwP0UF%hrD$<0ZoyjI-QA@?ai_SqxVseB;_&62FaPY$>}2lV zP3}JDIp=pH)l_8Bkcp82005f297qFl!~_74B@p2uXRT-z%K(7Rl{`pN%X{^_8z~2G zsQm$$^>Uac@I;#~Fs6Ok?QH&-O*jwY*kgYWb){xzA9V|jh+u_bWTX^iY>ezRKH zrmD8C7~~)=9bWB%S2v*DMtr?c_z7VKpBR2y7WkaV#Wj-~T^LHMP!n3BVAQ5z6!do&tgu>LM+lCXxDvqvgQx2T)r40|qYi`l`jfF;iSf7&khx zl}w`~60~MH$HV+bT^@{NBA%1a3otVa2|#i=UNHea-TU^eGR8ZG^p=A3jp1ZD0FE?0 zGEFCME_64%RDm#@Z|$H)K~dI;@kf3T`7+}Vc`H_oJ5uE&yAnzUNp3!T9GV4lz5%Fj z<2ahpKZja98C^xks^B!KlR+}j%WnL^hYx#MO_b7n_}v&04k+^M7Ugz!m%b=5XQ|4x z^w1UQ)M4Tlu3{Rv7&puag?7C6K`r$^pJUf$ZTS5#Bve2eNBc_sn+UTEx~}GAQo5N3 zsM|@^JaCnO8|or;Rj59(F%^Sil% zt|ysxMkFrg1)BjP!GqFK$;oQ1X>;EXI{l5kHas?)mrPDmQ&W9l;8CxXW)RRxzu4?9 z=$f8S<%z8s{xA#n`dgardvd$x)HxLtxMG#Q0ws|z9?;=6LgwYY(cy7>cjUF{W3zZW zD_xgNuY6P4b~S*)gEgite!1S>LrwZKA%)gECsx@eCgaM0Nj$%5mx4CXsmgk*R z&g>v9EZ3U?^Akf%Rl@+IcyXGScf7rs;?1%lE5a{L&wwA;OCc}`-_dW&ciJGE{ixJ z`rDfj6!t53-TD!7ze$nXNuDOC(fehK`1`2n=2`A}-4gwqoE;c$Z zF+ENN2%oCIDYCa)wjML25#mI1pVR+2NH^`Vo-L46jF3xs&^2-$y5&~+cz;{6gt|Ll z^CIH_?RT12h=S&amkQfNx5H85L6>(3QR#RTVDW%w|DEwKyVf48@=%~p1?lO=F7_Cwl4{{QvO$c$KT$SJiroOlYrj;C< z|NiN96iFB#H5{m0jIan$FZlP1c3&~tthG_~_H%+lXp?VxSwB=_tuZTkKv zbXdt9JQ{E(MW6VFn4%076{J2>FZ|%*!RsrjSR}BehT2WJma)6HqE5C3CPCj9MnY@C zH;AffZ3|B_wUq_nDz9m2fqQHRd!fx-OFb36v1Mec z$dwjs(-q-}!7V^0QEo>;OhUWJ#`E4_oM>USW~P7;@yebdV|#+vu4G1SjKHa$EFJv( z2R8>wi_DJ{Sc4kF68D>XdRSCmn-

        GP+bE$d>r4h$g0PxQbE?wygzUnSPf;$(!U% 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≪(QZE;gA^LqL56k2oe5uhYT5#N41FS+KO?`oL7LHi{PqP$qB%?7MBFTxS(eO za9Hiy1Cj`LbopmOuRP!`+<{J^%dk&6X@#^5YRBM(i&V ze})2vFm2kj&v-Uv%9I~ZoH((WF>!Tu^(+CfOXR#>iFUAlDh0}ni~o0G=TEs4atr%s)^8LbZ59yD6r zyLTU&0eI$_XNHMfcjG>vQw}(+fqN3m|7fxRK=XIrdFSnJ)vDF7EGh)R7!sgt6M(+@ zlLPoz8n@X05id{HD`w|Md5T5>`Oi)O1+r%unY1*dJ>wk5rL z_kIoy7C^l3)vH%+*REaHb?)5xMRMMSB98KsGsh%w=7PE%cgT<-C7fLa2-;nAZSbsR z%a*%}1haObxucA{AP1CE{rdIG0QB$Qzl6mK)L>}6C<=PFuROKjiUsH4Nwr5Eb=0~ejyU4Q3@;{6o;(I+BtFx6nN!OYBzG4%F8}Rsf4f}d9^agEQaI=attR_j=foxx+ei?T zcW={wCxAG+-ADkv%qBo9fIc=h89O@z*mhOcUlDA@a88^TNi1BA`HIzC#px4K_c-a$ zbe)pH(9caBsG8TIu|kie+M!V-tNKT3vs4pGod;6SXylC~J4(SMwS6J2o>agZ6>VXV z+K^?SLVlS8pQ=JFG-m*qVlt~V36?dUR7ge%PGlUZ5>;PH^{2YiD3VIGeuE8iHL6tF z_ItTVWp&~h>R;ype| zt1*=vBz9wAVxm=1Y1@kBD(Z=fkh(2=7x#KeZ&iWshl)ggAEf&;tM?HHfHH%BwAw@f z1}D8Wi2+n9Z~>PDpg7WrjLW6E`oeEmVn@}gBf7+{vZc=#)!CSnlj^{sNQJEz4jjvL zurf|{`(~R82mB~EF|E>dLs$S(SZ|EG@Pm>1ye64A)k>GijYr3~h;H4g7RxLZ-x43Up^ei4yA@#sk%tTVj*$ z%wP@Z#yAs5VyiEH^uaXlr-x7c*h9#;I zlK|x`6N#m=a0)~{PCgP>UutpA86ax7+b|TE4l(*JFfp#lHcSx;L;djeyWjn;$q6T% zPR++}E8W`pb zppzU>QsKlr%1#0zlVc*TOU|cms^peaJBMUvMinmmmGd6Y##x85Pciv?GSwbW zk@#Sd_^rS~=mPQaM62BQF-WB|=-LhrN|8+@xpoqLCn0UXrZQHgZ#P2J? z|92^tHSt$pef4t@>GdG;TNH!mn>KCwnfU)|@ceE0+%#iBN;WbWL#8+q8TU%%t#%$c*}>Z`Aw6N@lp$dJ<6 zvuA(UzkmPc*IaYWq)RWow3z_fHf-3iMb2al7%-sIEw|jV7SAgqMvS;mQ1x_V0*h~? z*MpJkL04UMRiuBU@0XO6gnT0n9XfO^FHQcDh+icABiVc--EhMVm-D`F-@eiQk;F~L zH&WNGT{nqG2MAIR5RCKPy70^YT;67daoL`bQ#O zmVcxu-$(%uV*Mj!d?R(~(k0^?>AdsK>%z; z-B?^){F75pJ@qgFHn*tpyLGbJ=;eA07MMMZ_b9SzS-Yz$++->6ZeR%HN0;th3m zb)Fi;AT#S%-pe5R%eo8zn*n*q-ahHdip_A6BK9+?)DV{sP6hyy$srgk`ktxyQnSaA z9fxcL#FrTFh(lcQ?Z|d>#Y1vtLnOQE@Rub$w8;&D>~kXyaWA{@$PPPp7vixD3VZhKxd(uE4WTi!ZQu=%I)DezMqk$c|Gs z$`MC=>h}QPU`tFYd>39gSR;ZM7x>kMLoFO^vD=iK+2e`Vt}Kg5>KK3*UwqML8UXAl z_eC?xrV-dk;6uT)2ojP^$f5kV^zd!4&vmR{N zCSO}yd!(4bUHs2~{&N7oqL{yJxWPthfSjzt^5*ToVE~ezoEXx-M;)i*1d#LDzP4q8 p#vuoZ))@0D2Xai1ngZAB{{dIU(PbsY@FV~L002ovPDHLkV1f&@tiAvM literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/zoom-plus-mini.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/zoom-plus-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..4fabfd1ed1ba12272e9ff1244cac6a5c0c14ac1f GIT binary patch literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaGJet=Ji>;M1%85p{8Ax_SIF0Ot) zzKH??lf=ZPii=NGR-UDzGTYpIiG{@yd;8@M4lBI9*ZTOZ4GP*29K0bTV^?qQ>At?x z@85s_@Zrbj&p*F>`T6bJuOB~t|Ni~=&!4}a9?Z`LTFqG! z0|gsAT^vIsBv}tS`WsvE_Wi%YQ z_KJfcbg?WiL#kE&gO5M!?oaS+SSmI_^Z?rlE+NI!dp+lV37>KI%=fcS-#2`_uru;U z?X;M*+4fgBYi#z^H83y;9FRHAAod`0KSL=K0|x`c|8rLAt)Zsht^wV`;OXk;vd$@? F2>=-1g1-O& literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_65_ffffff_1x400.png b/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_65_ffffff_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..0af053771c1fc0f2ce949ec5e341b085a45cc648 GIT binary patch literal 74 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI2NH8$CE1Q=ADM3#c#}JM4$r%X}t&0mp9yKsb W%{ak$*<@oTNRg+jpUXO@geCwKViDW` literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png b/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..81e2065be481046a57398740018369da5c11911f GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq#Qh5978NlCs$2Be&m2bmz&_! zi~U?`Zt`kvp*}s;GbQv54C_*p{v11U;^2`JoM{X@`yC%Cu(tZ}99pbs*45$2AlSt3 TqMGooA7rMdtDnm{r-UW|?OP@T literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_95_fef1ec_1x400.png b/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..beeef85ac198b4ddaa16e9ce2238fea9a2f6525f GIT binary patch literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCqB11u30hJ=hQAcZOt^k ne9c7C&@kXa_ftoKKi2vke)92dN+)`Ou3_+W^>bP0l+XkKqC85A literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_2e83ff_256x240.png b/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_2e83ff_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..ab319c498557b9f7503e8ffeb3d923fb78ef038e GIT binary patch literal 4261 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 MO>Irej0g$;16-vFO8@`> literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_888888_256x240.png b/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_888888_256x240.png new file mode 100644 index 0000000000000000000000000000000000000000..d4cead1bd30bd67ad7ac4352c9b575e4f49f5b8a GIT binary patch literal 4262 zcmeH~={wX7)W?6bF}A3YhA@^IWlLn67}HRsEQu`Hbz35oJ=@qqWJyvAgS(p~OBk{a zvV?3|24!r8nPh}8%y@L)&x_}ecs?)Ab*}U7e9yVQ*Exx%#`=8RBHRD~@Le|0GXnt7 zK?*S7kb_9MY`Ak!IAnU&{9?lY^M4d5)w?}%)6mkv;Vh-{q`N7yJ3-p=(zag)buCMU*-}E zUKN+Td0YOjrmnHMrM2pL4om4utU}S%Pe?OI1;^N#-#u0_*j}^jx(cxHM6hHYZ=_G_NTeT8n!D ze5C94?1)vvXX2-hRRliOR(2evzQq&2xSB%w;CMdg$|~NU)zcjP3Y0RbmR3?6bhY9R zD2jW-2jp!Au2phx?H4P>O5BQOZGm2h!-5gCNI`=XQ~ZClb!xTp?OqsuI7T?Xs!S9B z_!)l{g%L6Z%-mKpkLbhX!KGr`KhN1d8G~tnl#yD$MR=_@gT^&Xe{>gjlV_zKgJT~8 zOXX29DzJs}N?SBaA||YJnDYgH{7G9kEUq(qh7{Lc8!mXz`@c|#MK$#*EyFubRos+( z6VrS-sNvuWQ!QUW^LT76g;wcY5tJVvQ{ERI

        jfHA`>k7m(_ftu^L23%(pjSOKLV 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 I4DT5IKj1+HNB{r; literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_card.scss b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_card.scss new file mode 100644 index 0000000..f71dbde --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_card.scss @@ -0,0 +1,33 @@ +.card { + margin-top: 1rem; +} + +.card-header { + font-family: $font-family-light; + font-size: 1rem; + border-bottom: 0; +} + +.card-footer { + border-top: 0; +} + +#maincontainer { + .card { + background: none; + border: none; + margin: 0; + } + + .card-header { + background: none; + color: $navi-background; + font-size: 2.8em; + font-family: $font-family-light; + padding: 0; + } + + .card-body ul { + padding-left: 0; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_font.scss b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_font.scss new file mode 100644 index 0000000..21d5523 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_font.scss @@ -0,0 +1,27 @@ +@font-face { + font-family: 'Open Sans'; + src: local('☺'), local('Open Sans'), local('OpenSans'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Open Sans Light'; + src: local('☺'), local('Open Sans Light'), local('OpenSans-Light'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Open Sans Bold'; + src: local('☺'), local('Open Sans Bold'), local('OpenSans-Bold'); + font-weight: normal; + font-style: normal; +} + +@font-face { + font-family: 'Open Sans Extrabold'; + src: local('☺'), local('Open Sans Extrabold'), local('OpenSans-Extrabold'); + font-weight: normal; + font-style: normal; +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_print.scss b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_print.scss new file mode 100644 index 0000000..6198546 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_print.scss @@ -0,0 +1,130 @@ +@media print { + .hide { + display: none; + } + + // Standard CSS + body, + table, + th, + td { + color: #000; + background-color: #fff; + font-size: 12px; + } + + // To remove link text decoration + a:link { + color: #000; + text-decoration: none; + } + + // To remove any image borders + img { + border: 0; + } + + // Table specific + table, + th, + td { + border: 0.1em solid #000; + background-color: #fff; + } + + table { + border-collapse: collapse; + border-spacing: 0.2em; + } + + thead { + border-collapse: collapse; + border-spacing: 0.2em; + border: 0.1em solid #000; + font-weight: 900; + } + + th, + td { + padding: 0.2em; + } + + thead th { + font-weight: bold; + background-color: #e5e5e5; + border: 0.1em solid #000; + } + + th { + &.column_heading, + &.column_action { + border: 0.1em solid #000; + } + } + + table { + tr { + &.odd, + &.even { + border-left: 0.1em solid #000; + } + + &.odd th, + &.even th { + border-bottom: 0.1em solid #000; + } + } + + &.data th { + border-bottom: 0.1em solid #000; + } + } + + // Position the main content + #page_content { + position: absolute; + left: 0; + top: 0; + width: 95%; + float: none; + } + + // For the Success message div + .sqlOuter { + color: black; + } + + // For hiding 'Open a New phpMyAdmin Window' button + // Hide extra menu on /table/structure + .cDrop, + .cEdit, + .cList, + .cCpy, + .cPointer { + display: none; + } + + table tbody:first-of-type tr { + // odd items 1,3,5,7... + &:nth-child(odd) { + background: #fff; + + th { + background: #fff; + } + } + + // even items 2,4,6,8... + &:nth-child(even) { + background: #dfdfdf; + + th { + background: #dfdfdf; + } + } + } + + .column_attribute { + font-size: 100%; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_variables.scss b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_variables.scss new file mode 100644 index 0000000..55e4ff3 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_variables.scss @@ -0,0 +1,279 @@ +// configures general layout for detailed layout configuration please refer to the css files + +$navi-width: 250px; + +// Theme color scheme +// Values: "teal", "redmond", "blueeyes", "mono", "win" +// Default: "win" +// Set this value for the desired color scheme +$color-scheme: win !default; + +$navi-color: #eee; +$navi-background: #377796; +$navi-background-light: #428eb4; +$navi-pointer-color: #333; +$navi-pointer-background: #377796; +$navi-database-name-color: #333; +$navi-hover-background: #428eb4; +$main-color: #444; +$body-bg: #fff; +$browse-pointer-color: #377796; +$browse-marker-color: #000; +$browse-warning-color: #d44a26; +$browse-success-color: #01a31c; +$browse-gray-color: #ccc; +$browse-marker-background: #eee; +$border-color: #ddd; +$button-color: #fff; +$button-background: #377796; +$button-hover: #428eb4; +$th-background: #f7f7f7; +$th-disabled-background: #f3f3f3; +$th-color: #666; +$th-pointer-color: #000; +$bg-one: #f7f7f7; +$bg-two: #fff; +$blue-header: #3a7ead; + +@if $color-scheme == teal { + $navi-color: #fff; + $navi-background: #004d60; + $navi-background-light: #04627c; + $navi-pointer-color: #666; + $navi-pointer-background: #004d60; + $navi-database-name-color: #fff; + $navi-hover-background: #216475; + $main-color: #444; + $body-bg: #fff; + $browse-pointer-color: #004d60; + $browse-marker-color: #000; + $browse-warning-color: #d44a26; + $browse-success-color: #01a31c; + $browse-gray-color: #ccc; + $browse-marker-background: #eee; + $border-color: #ddd; + $button-color: #fff; + $button-background: #aaa; + $button-hover: #000; + $th-background: #f7f7f7; + $th-disabled-background: #f3f3f3; + $th-color: #666; + $th-pointer-color: #000; + $bg-one: #f7f7f7; + $bg-two: #fff; + $blue-header: #3a7ead; +} @else if $color-scheme == redmond { + $navi-color: #fff; + $navi-background: #780505; + $navi-background-light: #a10707; + $navi-pointer-color: #666; + $navi-pointer-background: #780505; + $navi-database-name-color: #fff; + $navi-hover-background: #a10707; + $main-color: #444; + $body-bg: #fff; + $browse-pointer-color: #780505; + $browse-marker-color: #000; + $browse-warning-color: #d44a26; + $browse-success-color: #01a31c; + $browse-gray-color: #ccc; + $browse-marker-background: #eee; + $border-color: #ddd; + $button-color: #fff; + $button-background: #aaa; + $button-hover: #000; + $th-background: #f7f7f7; + $th-disabled-background: #f3f3f3; + $th-color: #666; + $th-pointer-color: #000; + $bg-one: #f7f7f7; + $bg-two: #fff; + $blue-header: #3a7ead; +} @else if $color-scheme == blueeyes { + $navi-color: #fff; + $navi-background: #377796; + $navi-background-light: #428eb4; + $navi-pointer-color: #666; + $navi-pointer-background: #377796; + $navi-database-name-color: #fff; + $navi-hover-background: #428eb4; + $main-color: #444; + $body-bg: #fff; + $browse-pointer-color: #377796; + $browse-marker-color: #000; + $browse-warning-color: #d44a26; + $browse-success-color: #01a31c; + $browse-gray-color: #ccc; + $browse-marker-background: #eee; + $border-color: #ddd; + $button-color: #fff; + $button-background: #377796; + $button-hover: #000; + $th-background: #f7f7f7; + $th-disabled-background: #f3f3f3; + $th-color: #666; + $th-pointer-color: #000; + $bg-one: #f7f7f7; + $bg-two: #fff; + $blue-header: #3a7ead; +} @else if $color-scheme == mono { + $navi-color: #fff; + $navi-background: #666; + $navi-background-light: #999; + $navi-pointer-color: #666; + $navi-pointer-background: #666; + $navi-database-name-color: #fff; + $navi-hover-background: #999; + $main-color: #444; + $body-bg: #fff; + $browse-pointer-color: #666; + $browse-marker-color: #000; + $browse-warning-color: #666; + $browse-success-color: #888; + $browse-gray-color: #ccc; + $browse-marker-background: #eee; + $border-color: #ddd; + $button-color: #fff; + $button-background: #aaa; + $button-hover: #000; + $th-background: #f7f7f7; + $th-disabled-background: #f3f3f3; + $th-color: #666; + $th-pointer-color: #000; + $bg-one: #f7f7f7; + $bg-two: #fff; + $blue-header: #555; +} + +// Bootstrap +// --------- + +// Body + +$body-color: $main-color; + +// Links + +$link-color: $browse-pointer-color; +$link-decoration: none; +$link-hover-color: $browse-pointer-color; +$link-hover-decoration: underline; + +// Components + +$border-radius: 0; + +// Typography + +$font-family-base: "Open Sans", "Segoe UI", sans-serif; +$font-family-monospace: "Consolas", "Lucida Grande", monospace; + +$font-family-light: "Open Sans Light", "Segoe UI Light", "Segoe UI", sans-serif; +$font-family-bold: "Open Sans Bold", sans-serif; +$font-family-extra-bold: "Open Sans Extrabold", "Segoe Black", sans-serif; + +$font-size-base: 0.6875rem; // 11px +$line-height-base: 1; + +$h1-font-size: 3em; +$h2-font-size: 3.6em; +$h3-font-size: 1rem; + +$headings-font-weight: normal; + +// Tables + +$table-cell-padding: 0.6em; +$table-cell-padding-sm: $table-cell-padding; +$table-head-bg: #fff; +$table-head-color: $th-color; +$table-striped-order: even; +$table-hover-color: $th-pointer-color; +$table-hover-bg: $browse-marker-background; +$table-border-width: 0; + +// Buttons + +$enable-transitions: false; + +$primary: $browse-pointer-color; +$secondary: $browse-gray-color; + +$btn-border-radius: 0; +$btn-line-height: 1; +$btn-padding-x: 0.5rem; + +// Dropdowns + +$dropdown-border-radius: 0; + +// Forms + +$input-border-radius: 0; +$form-check-input-margin-y: 0; +$label-margin-bottom: 0; + +// Navs + +$nav-tabs-border-color: #ddd; +$nav-tabs-link-active-border-color: #ddd #ddd #fff; +$nav-tabs-link-hover-border-color: $bg-two $bg-two #ddd; +$nav-tabs-link-active-color: #000; + +// Navbar + +$enable-caret: false; +$navbar-padding-y: 0; +$navbar-padding-x: 0; +$navbar-nav-link-padding-x: 0; +$navbar-nav-link-padding-y: 0; +$navbar-light-color: #666; +$navbar-light-hover-color: #333; +$navbar-light-active-color: #666; +$navbar-light-disabled-color: #666; + +// Pagination + +$pagination-bg: $th-background; +$pagination-hover-bg: $browse-marker-background; +$pagination-border-color: $border-color; +$pagination-hover-border-color: $border-color; +$pagination-active-border-color: $border-color; +$pagination-disabled-border-color: $border-color; + +// Card + +$card-border-radius: 0; +$card-cap-bg: $th-background; +$card-bg: $th-background; + +// Accordion + +$accordion-button-padding-y: 0.375rem; +$accordion-button-padding-x: 1rem; +$accordion-button-active-color: $button-color; +$accordion-button-active-bg: $button-background; + +// Breadcrumbs + +$breadcrumb-navbar-padding-y: 0.89rem; +$breadcrumb-navbar-padding-x: 2rem; +$breadcrumb-navbar-margin-bottom: 0; +$breadcrumb-navbar-bg: $navi-background; +$breadcrumb-divider-color: $button-color; +$breadcrumb-divider: none; + +// Alert + +$alert-margin-bottom: 1em; +$alert-border-radius: 0; +$alert-border-width: 0; + +// List group + +$list-group-bg: inherit; + +// Modals + +$modal-content-border-radius: 0; +$modal-header-padding-y: 0.5rem; diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/blueeyes-theme.scss b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/blueeyes-theme.scss new file mode 100644 index 0000000..618fb13 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/blueeyes-theme.scss @@ -0,0 +1,3 @@ +$color-scheme: blueeyes; + +@import "theme";/* stylelint-disable-line no-invalid-position-at-import-rule */ diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/theme.json b/Sources/php_script/script/phpMyAdmin/themes/metro/theme.json new file mode 100644 index 0000000..e59644a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/metro/theme.json @@ -0,0 +1,8 @@ +{ + "name": "Metro", + "version": "5.0", + "description": "Metro theme for phpMyAdmin", + "author": "phpMyAdmin developers and hplhu", + "url": "https://www.phpmyadmin.net/", + "supports": ["5.0", "5.1", "5.2"] +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.css.map b/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.css.map new file mode 100644 index 0000000..b0f5062 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../node_modules/bootstrap/scss/_root.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../node_modules/bootstrap/scss/_variables.scss","../scss/_variables.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_containers.scss","../../../node_modules/bootstrap/scss/mixins/_container.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../../node_modules/bootstrap/scss/forms/_labels.scss","../../../node_modules/bootstrap/scss/forms/_form-text.scss","../../../node_modules/bootstrap/scss/forms/_form-control.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/forms/_form-select.scss","../../../node_modules/bootstrap/scss/forms/_form-check.scss","../../../node_modules/bootstrap/scss/forms/_form-range.scss","../../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../../node_modules/bootstrap/scss/forms/_input-group.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_transitions.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_card.scss","../../../node_modules/bootstrap/scss/_accordion.scss","../../../node_modules/bootstrap/scss/_breadcrumb.scss","../../../node_modules/bootstrap/scss/_pagination.scss","../../../node_modules/bootstrap/scss/mixins/_pagination.scss","../../../node_modules/bootstrap/scss/_badge.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/mixins/_alert.scss","../../../node_modules/bootstrap/scss/_list-group.scss","../../../node_modules/bootstrap/scss/mixins/_list-group.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/_modal.scss","../../../node_modules/bootstrap/scss/mixins/_backdrop.scss","../../../node_modules/bootstrap/scss/_spinners.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../../node_modules/bootstrap/scss/helpers/_position.scss","../../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/helpers/_vr.scss","../../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../../node_modules/bootstrap/scss/utilities/_api.scss","../scss/_common.scss","../../pmahomme/scss/_enum-editor.scss","../../pmahomme/scss/_gis.scss","../scss/_navigation.scss","../../pmahomme/scss/_designer.scss","../../pmahomme/scss/_codemirror.scss","../../pmahomme/scss/_jqplot.scss","../scss/_icons.scss","../scss/_reboot.scss","../scss/_tables.scss","../scss/_forms.scss","../scss/_nav.scss","../scss/_navbar.scss","../scss/_card.scss","../../bootstrap/scss/_breadcrumb.scss","../scss/_breadcrumb.scss","../scss/_alert.scss","../scss/_list-group.scss","../scss/_modal.scss","../../pmahomme/scss/_print.scss"],"names":[],"mappings":"CAAA,MAQI,kQAIA,+MAIA,yKAIA,8OAGF,8BACA,wBACA,6BACA,gCAMA,sNACA,+BACA,0FAQA,kCACA,6BACA,2BACA,2BACA,sBAIA,sBCnCF,qBAGE,sBAeE,8CANJ,MAOM,wBAcN,KACE,SACA,uCCmPI,UALI,yBD5OR,uCACA,uCACA,2BACA,qCACA,mCACA,8BACA,0CAUF,GACE,cACA,ME+kB4B,QF9kB5B,8BACA,SACA,QE8kB4B,IF3kB9B,eACE,OEwb4B,IF9a9B,0CACE,aACA,cEohB4B,MFjhB5B,YGZqB,KHarB,YEohB4B,IFhhB9B,OCoMM,UALI,KD1LV,OC+LM,UALI,KDrLV,OC0LM,UALI,KDhLV,OCqLM,UALI,QD3KV,OCgLM,UALI,SDtKV,OC2KM,UALI,QD3JV,EACE,aACA,cEkU0B,KFvT5B,yCAEE,iCACA,YACA,8BAMF,QACE,mBACA,kBACA,oBAMF,MAEE,kBAGF,SAGE,aACA,mBAGF,wBAIE,gBAGF,GACE,YEuZ4B,IFlZ9B,GACE,oBACA,cAMF,WACE,gBAQF,SAEE,YEgY4B,OFxX9B,aC4EM,UALI,QDhEV,WACE,QE4b4B,KF3b5B,iBEmc4B,QF1b9B,QAEE,kBCwDI,UALI,ODjDR,cACA,wBAGF,mBACA,eAKA,EACE,MG9LW,KH+LX,gBG9LgB,KHgMhB,QACE,MGhMe,IHiMf,gBGhMoB,UH0MtB,4DAEE,cACA,qBAOJ,kBAIE,YE6S4B,yBD/RxB,UALI,IDPR,+BACA,2BAOF,IACE,cACA,aACA,mBACA,wBCLQ,QDUR,SCLI,UALI,QDYN,cACA,kBAIJ,KCZM,UALI,QDmBR,ME1QQ,QF2QR,qBAGA,OACE,cAIJ,IACE,oBCxBI,UALI,QD+BR,MEvTS,KFwTT,iBE/SS,QEEP,oBJgTF,QACE,UC/BE,UALI,IDsCN,YE0Q0B,IFjQ9B,OACE,gBAMF,QAEE,sBAQF,MACE,oBACA,yBAGF,QACE,YEwU4B,MFvU5B,eEuU4B,MFtU5B,ME1VS,QF2VT,gBAOF,GAEE,mBACA,gCAGF,2BAME,qBACA,mBACA,eAQF,MACE,qBAMF,OAEE,gBAQF,iCACE,UAKF,sCAKE,SACA,oBC9HI,UALI,QDqIR,oBAIF,cAEE,oBAKF,cACE,eAGF,OAGE,iBAGA,gBACE,UAOJ,0CACE,aAQF,gDAIE,0BAGE,4GACE,eAON,mBACE,UACA,kBAKF,SACE,gBAUF,SACE,YACA,UACA,SACA,SAQF,OACE,WACA,WACA,UACA,cE6J4B,MDhXtB,iCDsNN,oBCxXE,0BDiXJ,OCxMQ,kBDiNN,SACE,WAOJ,+OAOE,UAGF,4BACE,YASF,cACE,oBACA,6BAmBF,4BACE,wBAKF,+BACE,UAMF,uBACE,aAMF,6BACE,aACA,0BAKF,OACE,qBAKF,OACE,SAOF,QACE,kBACA,eAQF,SACE,wBAQF,SACE,wBKnlBF,MJyQM,UALI,SIlQR,YHumB4B,IGlmB5B,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBIvPR,eCrDE,eACA,gBDyDF,aC1DE,eACA,gBD4DF,kBACE,qBAEA,mCACE,aH8lB0B,MGplB9B,YJsNM,UALI,QI/MR,yBAIF,YACE,cHgSO,KDjFH,UALI,SIvMR,wBACE,gBAIJ,mBACE,iBACA,cHsRO,KDjFH,UALI,QI9LR,MHpFS,QGsFT,2BACE,aE/FF,mGCHA,WACA,0CACA,yCACA,kBACA,iBCwDE,yBF5CE,yBACE,ULide,OOtanB,yBF5CE,uCACE,ULide,OOtanB,yBF5CE,qDACE,ULide,OOtanB,0BF5CE,mEACE,ULide,QOtanB,0BF5CE,kFACE,ULide,QQherB,2BCCA,iBACA,aACA,eAEA,uCACA,2CACA,0CDJE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BGyEA,qBACE,gBACA,kCH3EF,4BGyEA,qBACE,gBACA,kCH3EF,4BGyEA,qBACE,gBACA,kCH3EF,6BGyEA,qBACE,gBACA,kCH3EF,6BGyEA,sBACE,gBACA,kCEnJN,YACE,cZwzBsC,MY/yBxC,gBACE,iCACA,oCACA,gBboRI,UALI,Qa3QR,YZgkB4B,IY5jB9B,mBACE,+BACA,kCb0QI,UALI,SajQV,mBACE,gCACA,mCboQI,UALI,Uc5RV,WACE,WbgzBsC,ODhhBlC,UALI,QcvRR,MbKS,QcVX,cACE,cACA,WACA,uBf8RI,UALI,QetRR,YdqkB4B,IcpkB5B,Yd0kB4B,IczkB5B,MbUW,KaTX,iBb0CQ,QazCR,4BACA,yBACA,gBZGE,gBYKF,yBACE,gBAEA,wDACE,eAKJ,oBACE,MbZS,KaaT,iBboBM,QanBN,ad8zBoC,Qc7zBpC,UAKE,WdusB0B,kCchsB9B,2CAEE,aAIF,2BACE,Md1CO,Qc4CP,UAQF,+CAEE,iBd1DO,Qc6DP,UAIF,oCACE,uBACA,0BACA,kBd0pB0B,OczpB1B,MbzDS,KclBX,iBfMS,QcuEP,oBACA,qBACA,mBACA,eACA,wBdgb0B,Ic/a1B,gBAIF,yEACE,iBd+5B8B,Qc55BhC,0CACE,uBACA,0BACA,kBduoB0B,OctoB1B,Mb5ES,KclBX,iBfMS,Qc0FP,oBACA,qBACA,mBACA,eACA,wBd6Z0B,Ic5Z1B,gBAIF,+EACE,iBd44B8B,Qcn4BlC,wBACE,cACA,WACA,kBACA,gBACA,Ydyd4B,Icxd5B,MbvGW,KawGX,+BACA,2BACA,mBAEA,gFAEE,gBACA,eAWJ,iBACE,WdguBsC,2Bc/tBtC,qBfmJI,UALI,UG7QN,oBYmIF,uCACE,qBACA,wBACA,kBd2lB0B,McxlB5B,6CACE,qBACA,wBACA,kBdqlB0B,McjlB9B,iBACE,Wd8sBsC,yBc7sBtC,mBfgII,UALI,SG7QN,oBYsJF,uCACE,mBACA,qBACA,kBd4kB0B,KczkB5B,6CACE,mBACA,qBACA,kBdskB0B,Kc9jB5B,sBACE,WdqrBoC,4BclrBtC,yBACE,WdkrBoC,2Bc/qBtC,yBACE,Wd+qBoC,yBc1qBxC,oBACE,Md6qBsC,Kc5qBtC,YACA,Qd4hB4B,Qc1hB5B,mDACE,eAGF,uCACE,aZ/LA,gBYmMF,0CACE,aZpMA,gBcdJ,aACE,cACA,WACA,uCAEA,uCjB2RI,UALI,QiBnRR,YhBkkB4B,IgBjkB5B,YhBukB4B,IgBtkB5B,MfOW,KeNX,iBfuCQ,QetCR,iPACA,4BACA,oBhBg7BkC,oBgB/6BlC,gBhBg7BkC,UgB/6BlC,yBdFE,gBcMF,gBAEA,mBACE,ahBs0BoC,QgBr0BpC,UAKE,WhBi7B4B,kCgB76BhC,0DAEE,chBgsB0B,OgB/rB1B,sBAGF,sBAEE,iBhBpCO,QgByCT,4BACE,oBACA,uBAIJ,gBACE,YhByrB4B,OgBxrB5B,ehBwrB4B,OgBvrB5B,ahBwrB4B,MD/cxB,UALI,UG7QN,oBc8CJ,gBACE,YhBqrB4B,MgBprB5B,ehBorB4B,MgBnrB5B,ahBorB4B,KDndxB,UALI,SG7QN,oBefJ,YACE,cACA,WjBq3BwC,QiBp3BxC,ajBq3BwC,MiBp3BxC,cjBq3BwC,QiBn3BxC,8BACE,WACA,mBAIJ,kBACE,MjBy2BwC,IiBx2BxC,OjBw2BwC,IiBv2BxC,iBACA,mBACA,iBhBkCQ,QgBjCR,4BACA,2BACA,wBACA,OjB42BwC,0BiB32BxC,gBACA,mBAGA,iCfXE,oBeeF,8BAEE,cjBm2BsC,IiBh2BxC,yBACE,OjB01BsC,gBiBv1BxC,wBACE,ajBszBoC,QiBrzBpC,UACA,WjBmsB4B,kCiBhsB9B,0BACE,iBjBZM,QiBaN,ajBbM,QiBeN,yCAII,+OAIJ,sCAII,uJAKN,+CACE,iBjBjCM,QiBkCN,ajBlCM,QiBuCJ,yOAIJ,2BACE,oBACA,YACA,QjBk0BuC,GiB3zBvC,2FACE,QjB0zBqC,GiB5yB3C,aACE,ajBqzBgC,MiBnzBhC,+BACE,MjBizB8B,IiBhzB9B,mBACA,wKACA,gCf9FA,kBekGA,qCACE,0JAGF,uCACE,oBjBgzB4B,aiB3yB1B,uJAMR,mBACE,qBACA,ajBmxBgC,KiBhxBlC,WACE,kBACA,sBACA,oBAIE,mDACE,oBACA,YACA,QjBqoBwB,IkBnxB9B,YACE,WACA,cACA,UACA,+BACA,gBAEA,kBACE,UAIA,mDlB89BuC,oDkB79BvC,+ClB69BuC,oDkB19BzC,8BACE,SAGF,kCACE,MlB+8BuC,KkB98BvC,OlB88BuC,KkB78BvC,oBHzBF,iBfkCQ,QkBPN,OlB88BuC,EE19BvC,mBgBgBA,gBAEA,yCHjCF,iBf8+ByC,QkBx8BzC,2CACE,MlBw7B8B,KkBv7B9B,OlBw7B8B,MkBv7B9B,oBACA,OlBu7B8B,QkBt7B9B,iBlBpCO,QkBqCP,2BhB7BA,mBgBkCF,8BACE,MlBo7BuC,KkBn7BvC,OlBm7BuC,Ket+BzC,iBfkCQ,QkBmBN,OlBo7BuC,EE19BvC,mBgB0CA,gBAEA,qCH3DF,iBf8+ByC,QkB96BzC,8BACE,MlB85B8B,KkB75B9B,OlB85B8B,MkB75B9B,oBACA,OlB65B8B,QkB55B9B,iBlB9DO,QkB+DP,2BhBvDA,mBgB4DF,qBACE,oBAEA,2CACE,iBlBtEK,QkByEP,uCACE,iBlB1EK,QmBbX,eACE,kBAEA,yDAEE,OnBy/B8B,mBmBx/B9B,YnBy/B8B,KmBt/BhC,qBACE,kBACA,MACA,OACA,YACA,oBACA,oBACA,+BACA,qBAKF,6BACE,oBAEA,0CACE,oBAGF,wFAEE,YnBm+B4B,SmBl+B5B,enBm+B4B,QmBh+B9B,8CACE,YnB89B4B,SmB79B5B,enB89B4B,QmB19BhC,4BACE,YnBw9B8B,SmBv9B9B,enBw9B8B,QmBl9B9B,sIACE,QnBk9B4B,ImBj9B5B,UnBk9B4B,oDmB78B9B,oDACE,QnB28B4B,ImB18B5B,UnB28B4B,oDoBjgClC,aACE,kBACA,aACA,eACA,oBACA,WAEA,qDAEE,kBACA,cACA,SACA,YAIF,iEAEE,UAMF,kBACE,kBACA,UAEA,wBACE,UAWN,kBACE,aACA,mBACA,uBrBsPI,UALI,QqB/OR,YpB8hB4B,IoB7hB5B,YpBmiB4B,IoBliB5B,MnB7BW,KmB8BX,kBACA,mBACA,iBpB5CS,QoB6CT,yBlBpCE,gBkB8CJ,kHAIE,mBrBgOI,UALI,SG7QN,oBkBuDJ,kHAIE,qBrBuNI,UALI,UG7Q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vDF,qBCmBA,MvBJa,QuBKb,avBLa,QuBOb,2BACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,iEAEE,2CAGF,iLAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,+MAKI,2CAKN,4DAEE,MvBvCW,QuBwCX,+BDvDF,kBCmBA,MvBJa,QuBKb,avBLa,QuBOb,wBACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,2DAEE,4CAGF,kKAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,gMAKI,4CAKN,sDAEE,MvBvCW,QuBwCX,+BDvDF,qBCmBA,MvBJa,QuBKb,avBLa,QuBOb,2BACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,iEAEE,2CAGF,iLAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,+MAKI,2CAKN,4DAEE,MvBvCW,QuBwCX,+BDvDF,oBCmBA,MvBJa,QuBKb,avBLa,QuBOb,0BACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,+DAEE,2CAGF,4KAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,0MAKI,2CAKN,0DAEE,MvBvCW,QuBwCX,+BDvDF,mBCmBA,MvBJa,QuBKb,avBLa,QuBOb,yBACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,6DAEE,6CAGF,uKAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,qMAKI,6CAKN,wDAEE,MvBvCW,QuBwCX,+BDvDF,kBCmBA,MvBJa,QuBKb,avBLa,QuBOb,wBACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,2DAEE,0CAGF,kKAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,gMAKI,0CAKN,sDAEE,MvBvCW,QuBwCX,+BD3CJ,UACE,YtBigB4B,IsBhgB5B,MrBnBW,KqBoBX,gBrBnBgB,KqBqBhB,gBACE,MrBrBe,IqBsBf,gBrBrBoB,UqBwBtB,gBACE,gBrBzBoB,UqB4BtB,sCAEE,MtB/EO,QsB0FX,2BCuBE,mBxBsKI,UALI,SG7QN,oBoByFJ,2BCmBE,q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CA,M/BoDW,K+BlDX,iBhCFS,KgCGT,sBAGA,iBACE,UACA,M/B8Ce,I+B7Cf,qBACA,iBhCRO,QgCSP,a/BGS,sB+BCT,UACA,M/BsCe,I+BrCf,iBhCfO,QgCgBP,QhC4qCgC,EgC3qChC,WhCstB4B,kCgCjtB9B,wCACE,YhC+pCgC,KgC5pClC,6BACE,UACA,MhC9BO,KeJT,iBfkCQ,QgCEN,a/BlBS,K+BqBX,+BACE,MhC9BO,QgC+BP,oBACA,iBhCtCO,KgCuCP,a/BzBS,KgClBX,WACE,uBAOI,kC/BqCJ,yBACA,4B+BhCI,iC/BiBJ,0BACA,6B+BhCF,0BACE,sBlCgSE,UALI,SkCpRF,iD/BqCJ,6BACA,gC+BhCI,gD/BiBJ,8BACA,iC+BhCF,0BACE,qBlCgSE,UALI,UkCpRF,iD/BqCJ,6BACA,gC+BhCI,gD/BiBJ,8BACA,iCgC/BJ,OACE,qBACA,oBnC8RI,UALI,OmCvRR,YlCukB4B,IkCtkB5B,cACA,MlCHS,KkCIT,kBACA,mBACA,wBhCKE,6BgCCA,aAKJ,YACE,kBACA,SCvBF,OACE,kBACA,kBACA,clCoJoB,KkCnJpB,+BjCWE,gBiCNJ,eAEE,cAIF,YACE,YnC4jB4B,ImCpjB9B,mBACE,cnCm5C8B,KmCh5C9B,8BACE,kBACA,MACA,QACA,UACA,qBAeF,eClDA,MD8Cc,QpB5Cd,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,2BACE,cD6CF,iBClDA,MD8Cc,QpB5Cd,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,6BACE,cD6CF,eClDA,MD8Cc,QpB5Cd,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,2BACE,cD6CF,YClDA,MDgDgB,QpB9ChB,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,wBACE,cD6CF,eClDA,MDgDgB,QpB9ChB,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,2BACE,cD6CF,cClDA,MD8Cc,QpB5Cd,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,0BACE,cD6CF,aClDA,MDgDgB,QpB9ChB,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,yBACE,cD6CF,YClDA,MD8Cc,QpB5Cd,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,wBACE,cCHJ,YACE,aACA,sBAGA,eACA,gBnCSE,gBmCLJ,qBACE,qBACA,sBAEA,gCAEE,oCACA,0BAUJ,wBACE,WACA,MrClBS,QqCmBT,mBAGA,4DAEE,UACA,MrCzBO,QqC0BP,qBACA,iBrCjCO,QqCoCT,+BACE,MpCxBS,KoCyBT,iBrCrCO,QqC8CX,iBACE,kBACA,cACA,uBACA,MrC3CS,QqC6CT,iBpCmGc,QoClGd,kCAEA,6BnCrCE,+BACA,gCmCwCF,4BnC3BE,mCACA,kCmC8BF,oDAEE,MrC7DO,QqC8DP,oBACA,iBpCoFY,QoChFd,wBACE,UACA,MrC3EO,KqC4EP,iBrC9CM,QqC+CN,arC/CM,QqCkDR,kCACE,mBAEA,yCACE,gBACA,iBrCwawB,IqC1Z1B,uBACE,mBAGE,oDnCrCJ,4BAZA,0BmCsDI,mDnCtDJ,0BAYA,4BmC+CI,+CACE,aAGF,yDACE,iBrCuYoB,IqCtYpB,oBAEA,gEACE,iBACA,kBrCkYkB,IOtc1B,yB8B4CA,0BACE,mBAGE,uDnCrCJ,4BAZA,0BmCsDI,sDnCtDJ,0BAYA,4BmC+CI,kDACE,aAGF,4DACE,iBrCuYoB,IqCtYpB,oBAEA,mEACE,iBACA,kBrCkYkB,KOtc1B,yB8B4CA,0BACE,mBAGE,uDnCrCJ,4BAZA,0BmCsDI,sDnCtDJ,0BAYA,4BmC+CI,kDACE,aAGF,4DACE,iBrCuYoB,IqCtYpB,oBAEA,mEACE,iBACA,kBrCkYkB,KOtc1B,yB8B4CA,0BACE,mBAGE,uDnCrCJ,4BAZA,0BmCsDI,sDnCtDJ,0BAYA,4BmC+CI,kDACE,aAGF,4DACE,iBrCuYoB,IqCtYpB,oBAEA,mEACE,iBACA,kBrCkYkB,KOtc1B,0B8B4CA,0BACE,mBAGE,uDnCrCJ,4BAZA,0BmCsDI,sDnCtDJ,0BAYA,4BmC+CI,kDACE,aAGF,4DACE,iBrCuYoB,IqCtYpB,oBAEA,mEACE,iBACA,kBrCkYkB,KOtc1B,0B8B4CA,2BACE,mBAGE,wDnCrCJ,4BAZA,0BmCsDI,uDnCtDJ,0BAYA,4BmC+CI,mDACE,aAGF,6DACE,iBrCuYoB,IqCtYpB,oBAEA,oEACE,iBACA,kBrCkYkB,KqCpX9B,kBnC9HI,gBmCiIF,mCACE,qBAEA,8CACE,sBCpJJ,yBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,4GAEE,MD2JqB,QC1JrB,yBAGF,uDACE,MtCRG,KsCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,2BACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,gHAEE,MD2JqB,QC1JrB,yBAGF,yDACE,MtCRG,KsCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,yBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,4GAEE,MD2JqB,QC1JrB,yBAGF,uDACE,MtCRG,KsCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,sBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,sGAEE,MD6JuB,QC5JvB,yBAGF,oDACE,MtCRG,KsCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,yBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,4GAEE,MD6JuB,QC5JvB,yBAGF,uDACE,MtCRG,KsCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,wBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,0GAEE,MD2JqB,QC1JrB,yBAGF,sDACE,MtCRG,KsCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,uBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,wGAEE,MD6JuB,QC5JvB,yBAGF,qDACE,MtCRG,KsCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,sBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,sGAEE,MD2JqB,QC1JrB,yBAGF,oDACE,MtCRG,KsCSH,iBDqJqB,QCpJrB,aDoJqB,QEjK7B,WACE,uBACA,MvCqjD2B,IuCpjD3B,OvCojD2B,IuCnjD3B,oBACA,MvCQS,KuCPT,6WACA,SrCOE,gBqCLF,QvCqjD2B,GuCljD3B,iBACE,WACA,qBACA,QvCgjDyB,IuC7iD3B,iBACE,UACA,WvCwtB4B,kCuCvtB5B,QvC2iDyB,EuCxiD3B,wCAEE,oBACA,iBACA,QvCqiDyB,IuCjiD7B,iBACE,OvCiiD2B,2CwChkD7B,OACE,eACA,MACA,OACA,QxCsiCk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aACA,iBACA,WACA,WAGF,yBACE,aACA,mBAGA,aACA,iBACA,WACA,WAGF,aACE,YACA,kBACA,kBACA,eAIA,2BACE,WACA,kBACA,mBAIF,qCACE,mBAIJ,mBACE,YACA,+BAMF,0BAEE,sBAMF,QACE,kBACA,yBAIA,gCAEE,iBACA,mBAIJ,OACE,YvDrGsB,UuDwGxB,cACE,eAGF,WACE,gBACA,aACA,sBACA,aACA,sBACA,kBAGF,iBACE,mBACA,WACA,gBACA,aACA,UACA,eACA,mBACA,YACA,kBACA,cACA,uBAIF,YACE,qBACA,8BACA,yBAIF,MACE,0BACA,sBACA,iBACA,4BACA,2BAGF,gBACE,kBACA,iBAGF,eACE,gBAIF,kCAGE,kBACA,eAGF,cACE,sBAGF,2BACE,sBAEA,kCACE,2BACA,4BACA,iBACA,4CACA,4BACA,8CACA,4BAIJ,OACE,sBACA,UAGF,YACE,YACA,gBAKF,iBACE,WAGF,YACE,cACA,mBACA,WAGF,YACE,iBACA,MvD1OS,KuD2OT,WvD7Oc,QuDgPhB,sBAEE,mBACA,MvDjPS,KuDkPT,WvDpPc,QuDwPd,8DAGE,WAGF,oBACE,UAKF,wDAGE,WAGF,kBACE,UAKF,8DAGE,WAGF,oBACE,UAMJ,UACE,WAGE,wDAGE,WAGF,kBACE,WACA,qBAKN,2BAEE,sBAGF,UACE,qBAGF,aACE,aAQA,YACE,YACA,aAGF,eACE,WACA,YAOJ,eACE,SACA,eACA,kBAEA,2DAEE,cACA,kBAGF,6BACE,gBACA,WACA,cAIJ,yBACE,cACA,WACA,kBACA,gBACA,YAGF,YACE,gBAGF,qCACE,iBAGF,iCACE,WAGF,iBACE,eACA,MACA,OACA,YACA,WACA,gBACA,YAGF,kBACE,WACA,mBAGF,kBACE,8BAGF,kBACE,cAGF,aACE,cACA,eAGF,4BACE,0BAGF,sBACE,gBAGF,uBACE,WAGF,YACE,WAGF,gBACE,iBAGF,iBAEE,8BAKF,QACE,iBACA,qBACA,SACA,UAKA,6CAEE,SACA,kBAGF,mBACE,gBAIJ,aACE,YAGF,WACE,kBAGF,0BACE,WACA,gBACA,mBACA,kBACA,eAGF,kBACE,gBACA,kBACA,WAGF,gBACE,eACA,MACA,QACA,WACA,gBAGF,oBACE,eACA,aAGF,8CAEE,aAGF,aACE,UACA,WACA,YvD5csB,UuD6ctB,eAGF,kBACE,kBACA,WACA,WACA,YACA,iBACA,kBACA,sBACA,WACA,uBACA,aAIA,kCACE,+BACA,oBACA,mBAGF,+BACE,WACA,cACA,WACA,eACA,iBACA,mBAGF,sCACE,WACA,cACA,WACA,eACA,mBAEA,oLAGE,WACA,eAIJ,+BACE,WACA,YACA,eAGF,4CACE,WAIJ,6BACE,WACA,UACA,eAEA,sCACE,WAGF,mCACE,mBAGF,oCACE,WAIJ,qFAEE,WAGF,0CACE,gBAGF,gBACE,0BACA,cACA,eAGF,yDACE,cACA,eAGF,qBACE,eAGF,cACE,YAIA,6BACE,WACA,YACA,aACA,kBAMA,6EAEE,mBAIJ,cACE,WACA,gBACA,aACA,oBAIJ,0BACE,sBACA,yBACA,iBAIA,mBACE,YACA,SAGF,iCACE,mBACA,YACA,cAIJ,aACE,iBACA,WACA,cAEA,kCAEE,iBAGF,mBACE,uBAIJ,cACE,aACA,kBACA,sBACA,SACA,YACA,4BACA,sBACA,UAGF,aACE,iBACA,WAEA,mBACE,WAIJ,aACE,iBAIF,mBACE,YACA,aACA,WAGF,4CACE,oBACA,UACA,YAIA,kBACE,WAGF,wBACE,WACA,UACA,cAQJ,eACE,8CACA,iCACA,4BAGF,0CAEE,WACA,UAIA,kBACE,qBACA,sBAGF,kBACE,cAIJ,iBACE,kBACA,YACA,gBACA,YACA,sBACA,gBAGF,wBACE,WvDnwBgB,QuDowBhB,wBAGF,YACE,YACA,YACA,kBAEA,gBACE,uBAGF,wBACE,sBAIJ,UACE,WACA,cACA,eACA,kBACA,UACA,eACA,6BACA,iBAGF,uCAEE,WAGF,IACE,MvD3xBW,KuD4xBX,+BACA,gBAGF,KACE,cACA,MvDlyBW,KuDoyBX,SACE,cACA,kBACA,aACA,gBACA,gBACA,cACA,cAGF,SACE,cACA,aACA,aACA,gBACA,gBACA,cACA,cAIJ,gBACE,cACA,aACA,aACA,gBACA,gBACA,cACA,cAGF,2CAEE,sBACA,aACA,gBACA,WvDhzBO,QuDmzBT,2BACE,gBAGF,6BACE,sBACA,aACA,WvD1zBO,QuD6zBT,6BACE,WAIF,MACE,aAGF,aACE,qBACA,UAQA,oBACE,YACA,gBACA,kBAGF,8BACE,sBACA,YACA,kBACA,kBACA,MvDn3BS,KuDs3BX,8BACE,iBvD53BsB,KuD63BtB,QACA,YACA,WACA,gBACA,MvDl3BkB,KuDm3BlB,kBAGF,6CACE,kBACA,MACA,OACA,YAGF,6CACE,SACA,UAGF,eACE,gBAKF,sIAIE,WASF,kIAIE,gBAIJ,oCAEE,gBAMF,mBAEE,MACA,eACA,aACA,kBACA,gBACA,iBAEA,gBACA,YACA,sBAEA,aACA,kBACA,cACA,OACA,QACA,oDACA,4BACA,uBAGF,gBAEE,kBACA,WAGF,kBACE,aACA,eACA,WACA,YACA,MACA,OACA,gBACA,aACA,gBAMF,uCACE,sBAGF,4BACE,eAGF,0BACE,iBAIA,8BACE,SACA,gBAGF,+BACE,gBAUA,sEAEE,WACA,sBAIJ,mBACE,WACA,YACA,WAGF,uBACE,WAEA,6BACE,gBAIJ,iBACE,SAGF,cACE,sBAIJ,oBACE,WAEA,2BACE,UACA,YAKF,yBACE,YAGF,wBACE,gBACA,SACA,UAGF,wBACE,WvDvhCY,QuDwhCZ,sBACA,MvDvhCO,KuDwhCP,iBACA,YACA,aACA,kBAOF,mBACE,aAGF,sBACE,aACA,UACA,WAGF,oBACE,aAIA,wBACE,SACA,aACA,WvDhjCG,QuDojCL,8BACE,uBACA,mBACA,mBACA,qBACA,mBACA,mBACA,gBACA,uBACA,gBAIF,qCACE,wBACA,UACA,gBACA,cACA,gBAGF,yBACE,4BACA,gBACA,mBACA,yBAGF,2BACE,gBAGF,uCACE,gBACA,cACA,yBACA,WACA,YAGF,yBACE,iBACA,oBACA,mBACA,6BAGF,yBACE,6BAEA,+DACE,cACA,mBACA,uBACA,kBACA,WAQJ,0BACE,WvDpnCG,QuDunCL,6BACE,iBAIJ,uDAEE,mBAGF,uDAEE,iBAGF,2BACE,mBAIA,4BACE,WACA,sBAEA,qEACE,WACA,sBAIJ,4BACE,WACA,sBAMJ,2BACE,YACA,qBAIF,qBACE,gBAGF,kCACE,YACA,yBACA,gBAGF,0BACE,6BAIA,gGAGE,yBACA,YAIJ,0CAEE,yBACA,YAIA,kHAGE,yBACA,mBAIJ,sDAEE,yBACA,mBAGF,iCACE,kBACA,WACA,YACA,eACA,iBACA,kBAGF,oCACE,WAGF,gBACE,iBAEA,wBACE,aAKN,oBACE,eAGF,kBACE,gBAGF,gBACE,mBACA,iBAGF,yBACE,kBAIA,qBACE,kBACA,eAGF,wBACE,kBACA,WACA,sBACA,YAIJ,SACE,WACA,mBAGF,cACE,kBACA,eACA,eACA,kBACA,kBACA,cACA,gBACA,6BACA,4BAEA,uDAGE,UACA,kBAGF,gCACE,kBAEA,sEAEE,2BAIJ,wBACE,WACA,cAGF,yBACE,cAKF,8BACE,UACA,WACA,UAGF,uBACE,iBAGF,yBACE,aAIJ,yBACE,gBAGF,mBACE,eACA,SACA,WACA,WvD/zCQ,QuDk0CV,eACE,cACA,cAGE,sIAIE,WACA,sBAIJ,sBACE,WACA,sBAIJ,aACE,kBACA,sBACA,YACA,gBACA,YACA,aAGF,eACE,YACA,aAGF,iBACE,YAGF,qBACE,kBAGF,YACE,SACA,SAGF,aACE,UACA,SAGF,UACE,UACA,QAGF,YACE,UACA,SAGF,SACE,UACA,SAGF,YACE,UACA,SAGF,UACE,UACA,UAGF,WACE,kBACA,YACA,iBACA,kBACA,UAGF,kBACE,4BAIA,6BACE,cACA,gBAKF,cACE,gBAGF,yBACE,cACA,gBAEA,mCACE,eAKN,kBACE,cACA,WACA,iBACA,eAGF,MACE,kBAGF,WACE,YAGF,MACE,gBACA,WACA,iBACA,YACA,aACA,kBAGF,UAIE,OAHS,KAIT,MAHQ,KAIR,iBACA,iBACA,kBACA,yCAGF,SACE,2BACA,sBACA,aACA,iCACA,8BACA,sCACA,0BACA,4BACA,2BAEA,WACE,2BACA,sBAIJ,OACE,QACA,kBACA,MAGF,SACE,sCACA,eACA,YACA,gBACA,WAEA,eACE,sBAIJ,eACE,sBAGF,OACE,gBACA,sBACA,kBACA,gBACA,QACA,eACA,yBAEA,iBACE,4BAEA,uBACE,gBACA,eAGF,uBACE,eAKN,eACE,6BACA,0BACA,eACA,eACA,iBACA,kBACA,kBAEA,qBACE,gBAIJ,YACE,mBACA,sBACA,cAEA,eACE,SACA,UACA,sBACA,mBAIJ,sBACE,WACA,qBACA,kBACA,YACA,uBAKE,+BACE,gBACA,SACA,SACA,kBACA,gBACA,iBAEA,qCACE,gBACA,WACA,eAIJ,mCACE,gBACA,WACA,eAIJ,mBACE,cAIJ,OACE,SACA,UACA,kBAGE,8EAGE,gBACA,YACA,SACA,UAIJ,kBACE,gBACA,sBACA,eACA,kBAEA,oDAEE,UAIJ,uBACE,WACA,eACA,iBAGF,iBACE,kBACA,kBACA,UAGF,yBACE,0EACA,oBAGF,0BACE,oEACA,YAGF,kBACE,gBACA,WACA,kBAIJ,oBACE,6DACA,kBAMA,qCACE,kBAGF,sBACE,gBAEA,yBACE,YACA,oBAGF,yBACE,wBAIJ,sBACE,cAIJ,uBACE,gBACA,YACA,SACA,UAGF,mBACE,cAEA,sBACE,iBAEA,yBACE,wBAKN,UACE,WACA,yBAGF,gBACE,cAGF,wBACE,wBAGF,kCACE,WAGF,cACE,YAIA,oBACE,mBAGF,wBACE,YACA,iBAKF,yCACE,eAEA,oDACE,2BAIJ,kCACE,eAIJ,kBACE,eAEA,qBACE,4BAKF,mBACE,WAGF,mBACE,iBAIJ,WACE,eAGF,YACE,kBAIF,uBACE,WACA,eACA,SACA,OACA,YAGF,SACE,YAGF,aACE,kBACA,kBACA,YAEA,wBACE,aAGF,uBACE,sBAGF,sBACE,kBACA,gBACA,0BACA,gBAEA,2BACE,sBAGF,gCACE,eAEA,4CACE,qBACA,4BACA,4BAGF,wCACE,aAMJ,kEAEE,cACA,qBAKF,0DAEE,cACA,qBAIJ,4BACE,cACA,qBAGF,4FAGE,eAGF,8GAGE,gBAIA,qCACE,gBAGF,4BACE,iBAGF,0DAEE,kBACA,YAIJ,sBACE,kBACA,gBACA,oBACA,0BACA,gBACA,iBAEA,yCACE,gBACA,WAEA,0DACE,gBACA,WAGF,yDACE,WAGF,kDACE,qBAGF,4DACE,kBAGF,qDACE,cAKN,gDAEE,kBACA,sCACA,YACA,yBAGF,sBACE,6BACA,oBAEA,+CACE,kBAGF,8BACE,YACA,kBACA,YAKF,kCACE,YACA,kBACA,YACA,SAGF,mCACE,WACA,WACA,gBAKF,oCACE,WACA,iBAGF,uCACE,YAGF,sCACE,aAIA,8HAGE,YACA,WAIJ,sCACE,WAGF,uCACE,mBACA,uBACA,gBAGF,sCACE,cACA,gBACA,qBAGF,oIAGE,aAIA,2JAIE,aAKF,4FAEE,qBAIJ,4FAEE,qBAIA,6FAEE,qBAKF,+FAEE,qBAKF,iGAEE,qBAIJ,sCACE,kBACA,YACA,gBACA,sBACA,2BAGF,qFAEE,SACA,qBAGF,iFAEE,aAGF,0CACE,qBAGF,4BACE,gBAIA,gDACE,aAGF,sDACE,cAIJ,sCACE,cACA,MACA,gBACA,WACA,kBAEA,6CACE,gBAIJ,+CACE,yBACA,0BAIJ,0BACE,kBAGF,wBACE,YACA,WACA,kBACA,MAIA,gBACA,aACA,eACA,YAGF,mBACE,kBACA,UACA,YACA,gBACA,UACA,MACA,2BACA,YACA,oBAEA,wBACE,QACA,kCAKN,mEAEE,gBAIA,8CACE,kBACA,oBACA,mBACA,6BAEA,qDACE,aACA,sBAIJ,sDACE,SACA,gBAKF,+DAEE,aAKF,wCACE,qBAIA,wCACE,qBAGF,+EAEE,aAIJ,sCACE,aAGF,sBACE,iBAGF,kEAEE,cAGF,sKAIE,aAIA,oHAEE,aAGF,iCACE,WACA,cACA,WAIJ,2EAEE,WACA,cACA,WAGF,8BACE,WAGF,gGAGE,YAGF,oCACE,SAOF,2BACE,sCAEA,+BACE,sCAIJ,6FAGE,UAGF,qBACE,YACA,YACA,WACA,mBACA,mBAGF,6BACE,YAMJ,kBACE,aACA,eACA,MACA,OACA,WACA,0BACA,YACA,YACA,WACA,eACA,kBACA,gBAGF,uBACE,aACA,eACA,SACA,WACA,YACA,sBACA,mBACA,kBACA,4BAEA,qDACE,sBACA,kBACA,aACA,gBACA,WACA,gBACA,mBACA,yBACA,mCAIJ,yCACE,sBACA,kBACA,aACA,gBACA,WACA,gBACA,mBACA,yBACA,mCAIA,2BACE,aACA,gBACA,kBACA,qBAEA,8BACE,iBACA,6BACA,cACA,gBAEA,wCACE,YAMJ,yEACE,YACA,iBACA,eAGF,mEACE,YACA,iBACA,eACA,aAGF,oKAEE,iCACA,eAKN,mEACE,iCACA,eAGF,sBACE,cAEA,2CACE,eACA,0BAIJ,iBACE,eACA,QACA,SACA,UACA,gBACA,iBACA,YACA,yBACA,mBACA,YAEA,uDACE,YACA,iBACA,eAIJ,sBACE,qBACA,2BAGF,eACE,qBACA,8CACA,kCACA,4BACA,UACA,WACA,YAGF,WACE,eAOE,0CACE,WACA,aAGF,iCACE,WAGF,2DACE,YAIJ,gFAIE,yBAGF,iFAIE,0BAGF,mFAIE,4BAGF,oFAIE,6BAGF,gBACE,UACA,kBAEA,oCACE,kBACA,YACA,6BAEA,2CACE,sBAIJ,mCACE,kBAGF,sCACE,mBACA,0BAEA,6CACE,wBACA,sBACA,WAIJ,qDACE,kBAQJ,8CACE,aAGF,0GAEE,eAGF,iDACE,gBAGF,iDACE,UAGF,qDACE,WAOJ,YACE,gBAGF,0CACE,iBACE,gBAGF,6BACE,WAGF,iBACE,aAGF,SACE,qBAGF,gBACE,aAGF,mBACE,SAGF,eACE,cAGF,eACE,gBAEA,4BACE,eAIJ,8BACE,UAGF,6BACE,WACA,aAGF,WACE,UACA,qBAGF,yBACE,YAIJ,gBACE,eACA,sBACA,YACA,yBACA,YAGF,cACE,iBAGF,eACE,aACA,aACA,kBACA,yBACA,WACA,yBACA,oBAGF,iBACE,wBAGF,oIAKE,iBACA,eACA,cAGF,uBACE,WAIF,gBACE,iBACA,kBjDtkFE,0BiD2kFF,UACE,gBAGF,qCAEE,iBAIJ,iBACE,gBClpFF,cACE,eACA,cAIA,eACE,aACA,kBAGF,qBACE,WAGF,kBACE,WAEA,qBACE,sBACA,UACA,cACA,iBAKF,6BACE,YACA,eACA,sBAGF,2BACE,cACA,kBACA,WAGF,yBACE,sBAIJ,6BACE,SACA,kBAIJ,6BACE,WACA,YACA,iBAMF,WACE,kBAEA,aACE,kBACA,SACA,aCjEJ,mBACE,YAGF,YACE,aACA,eACA,aACA,gBACA,kBAGF,UACE,iBAGF,mBACE,WAGF,iBACE,mBACA,aACA,iBAEA,yBACE,aAGF,kCACE,WC/BJ,wBACE,WACA,YACA,kBACA,MACA,OACA,UACA,mBAGF,gBACE,W1DFgB,Q0DGhB,M1DNW,K0DOX,M1DVW,M0DWX,gBACA,eACA,MACA,OACA,aACA,4BACA,YAEA,mBACE,SAGF,qBACE,SACA,UACA,eAIA,sEAEE,WAKF,iCACE,kBACA,aACA,kBACA,2BAGF,4BACE,iB1DvCY,Q0DwCZ,aAGF,0EAEE,kBACA,mBAIJ,4DAEE,YAGF,qOAOE,kBACA,mBACA,oBACA,SAGF,sCACE,SAGF,uHAGE,UAGF,oEAEE,gBACA,iBAIJ,qCACE,cACA,cAGF,qBACE,SACA,gBACA,WACA,WACA,kBAGF,gCACE,gBACA,cACA,SACA,SAGF,0BACE,gBACA,kBAEA,iCACE,gDACA,0BACA,kBACA,sBACA,0BACA,WACA,gBACA,aACA,UACA,iBAIJ,6BACE,WACA,gBACA,gBACA,kBACA,YAEA,+CACE,kBACA,YACA,mBAGF,+CACE,+BAKF,uBACE,M1DlJS,K0DmJT,eAEA,6BACE,0BAIJ,wBACE,gBAEA,uEAEE,M1DzJe,K0D0Jf,iB1DvJoB,K0D0JtB,wCACE,kBACA,YAGF,yCACE,aACA,kBACA,YAGF,uDACE,cACA,WAEA,6DACE,UAKN,wBACE,WACA,UACA,qBACA,SAEA,2BACE,kBAIJ,wBACE,mBACA,WACA,gBAGF,yBACE,SAGF,uBACE,cAGF,+BACE,kBACA,YACA,aACA,eACA,gBACA,WAEA,sCACE,UAGF,kEAEE,YACA,aACA,eACA,eACA,kBACA,YACA,WACA,UAGF,iCACE,2BACA,6BACA,kBACA,UAEA,uCACE,cAIJ,iCACE,cACA,aACA,SACA,WACA,2BAGF,kEAEE,kBACA,SACA,QACA,WAGF,mCACE,UAIA,gFAEE,SAGF,0CACE,SAIJ,mCACE,kBACA,WACA,OACA,iBAKF,gCACE,gBAIA,oDAEE,kBACA,aACA,kBAKN,qCACE,2BACA,kBACA,mBAEA,sDAEE,2BAIJ,2CACE,yBAIJ,eACE,mBACA,kBACA,mBACA,2BAEA,qBACE,eAGF,kCACE,SACA,iBACA,WACA,eAGF,8BACE,SACA,cAKJ,wBACE,UACA,YACA,sBACA,kBACA,eACA,MACA,K1D5VW,M0D6VX,YAGF,0BACE,WACA,YACA,iBACA,gBACA,WACA,iBACA,eACA,MACA,K1DzWW,M0D0WX,kBACA,eACA,YACA,yBACA,8CACA,sBAGF,2BACE,2BAEA,yCACE,0CAIJ,qBACE,YACA,mBAGF,gBACE,eACA,gBACA,kBAEA,2BACE,WACA,gBACA,cAGF,6BACE,eACA,sBACA,mBACA,eAIA,8CACE,gBAGF,8BACE,kBACA,SACA,UACA,gBACA,gBACA,gBACA,gBACA,sBACA,0BACA,6BACA,SACA,SACA,QACA,aACA,YAGF,oCACE,cAGF,8BACE,mBAEA,kCACE,mBAGF,oCACE,mBAIJ,6BACE,cACA,kBAEA,mDACE,WACA,WACA,oBCrbR,WACE,yBACA,WAGF,oBACE,kBACA,cAGF,cACE,kBACA,WACA,cAGF,QACE,sBACA,WAGF,gBACE,qBACA,gBACA,gBAEA,kBACE,2BAIJ,cACE,sBACA,WACA,yBACA,sBACA,UACA,iBAEA,sBACE,qGAIJ,SACE,kBACA,YACA,YACA,iBAGF,WACE,+EACA,2BACA,kBACA,YACA,YACA,iBAGF,WACE,gBACA,WACA,eAEA,iBACE,sBACA,WACA,2BACA,eAIJ,aACE,oCACA,WACA,eAEA,mBACE,sBACA,WACA,2BACA,eAIJ,eACE,mBACA,kBACA,sBACA,WACA,UACA,sBACA,aAGF,6BACE,SAGF,YACE,cACA,WACA,aAGF,eACE,eACA,WACA,mBACA,qBACA,gBACA,iBACA,gBACA,gBACA,mEACA,sBAEA,qBACE,eACA,WACA,gBACA,gBACA,iBACA,mBACA,qBACA,sBACA,gBAIJ,OACE,mBACA,WAGF,YACE,iBACA,kBACA,UAGF,YACE,mBACA,iBACA,kBACA,eACA,UACA,WACA,qGAGF,WACE,mBACA,yBACA,WACA,sDACA,eACA,kBACA,iBACA,iBACA,kBACA,UACA,qBAEA,iBACE,mBACA,WACA,sBACA,eACA,iBACA,kBACA,kBACA,iBACA,UACA,qBAIJ,gBACE,qGACA,kBACA,UAEA,sBACE,mBACA,WACA,sBACA,eACA,kBACA,iBACA,UACA,qBAIJ,MACE,sBACA,iBACA,sBACA,WACA,wBAGF,WACE,YACA,qBACA,sBACA,eAEA,iBACE,UACA,sBACA,gBACA,WACA,qBACA,sBACA,eAKJ,KACE,WACA,YAGF,QACE,+DAGF,QACE,8DAGF,QACE,2DAGF,QACE,4DAGF,QACE,+DAGF,QACE,sDAGF,QACE,qDAGF,QACE,uDAGF,SACE,kBACA,sBACA,WAGF,iBACE,yBACA,WACA,kBACA,iBACA,SACA,UACA,sDACA,wBACA,2BACA,4BACA,2BACA,YACA,YACA,WACA,eAEA,yCAEE,cACA,WACA,mBACA,YACA,uBAGF,yBACE,cACA,WACA,WACA,YACA,UAIA,yBACE,iBAGF,wBACE,gBAMJ,iDAEE,yBACA,sBACA,WAEA,6DACE,sBACA,sBACA,WAIJ,eACE,sBACA,sBACA,WAIJ,YACE,WACA,kBACA,YACA,yBACA,sBAGF,oBACE,kBACA,WACA,UACA,YAGF,uCAEE,kBACA,WACA,SACA,YACA,YAGF,kBACE,mDACA,iBAEA,wBACE,SAIJ,OACE,eACA,SACA,QACA,YACA,iBACA,aACA,cACA,iBACA,YAIA,UACE,eACA,qBACA,SACA,QACA,WACA,4BACA,kEACA,sBACA,cACA,YAEA,gBACE,cACA,qEACA,sBAIJ,iBACE,mEACA,YAEA,uBACE,sEAKN,yBACE,yBACA,0BAGF,eACE,kBACA,eACA,yBAEA,qBACE,sBAIJ,IACE,gBAEA,0BACE,UAIJ,eACE,gBACA,eAGF,WACE,WACA,eACA,WACA,YACA,mBACA,sBACA,gBACA,WACA,YAEA,iBACE,YACA,QAGF,iBACE,aAGF,aACE,cACA,WACA,gBACA,gBAGF,gCAEE,WAIJ,YACE,6BACA,kBACA,mBACA,WACA,gBACA,YACA,iBAGF,gBACE,WACA,kBACA,OC5eF,YACE,aACA,cAGF,iCACE,WAGF,4BACE,eACA,eACA,yBAGF,iCACE,yBACA,YAIA,uCAEE,WAGF,iBACE,WAGF,gBACE,YAGF,qBACE,YAGF,iBACE,WAGF,mBACE,WAGF,gBACE,UAGF,mBACE,WAGF,mBACE,WAGF,kBACE,WAGF,eACE,WAIJ,0BACE,qBAGF,0BACE,qBACA,YACA,WACA,gBAGF,kBACE,aAGF,yBACE,YACA,oBAEA,8BACE,sBACA,iBCxFJ,eACE,kBACA,WACA,sDACA,cAIF,aACE,gBAGF,cACE,gBAGF,eACE,mBAGF,cACE,kBAGF,yIASE,iBACA,kBAIF,kQAaE,kBACA,gBAGF,mBACE,MAEA,UACA,mBAGF,oBACE,SAEA,UACA,sBAGF,mBACE,QAEA,SACA,iBAEA,oCACE,YACA,eACA,oBACA,UACA,gBAIJ,gKAQE,OAEA,SACA,gBAGF,sBACE,kBACA,mBAGF,oBACE,gBACA,eACA,kBAGF,qBACE,mBACA,eACA,kBAGF,oBACE,kBACA,eACA,kBAGF,uBACE,eACA,kBAGF,wKAQE,eACA,iBACA,kBAGF,wBACE,gBACA,WAGF,yBACE,cACA,WAIA,0BACE,gBACA,mBACA,iBACA,kBACA,sCACA,sBACA,kBACA,gBAGF,2BACE,sCACA,sBACA,kBACA,gBAKF,uBACE,sBAIA,2DAEE,eAKN,2CACE,6BAIA,uCACE,sBACA,YAGF,+BACE,QACA,SACA,qBACA,wBACA,sBACA,uBACA,uBACA,0BACA,wBACA,yBAIJ,cACE,MACA,OACA,oBACA,gBAGF,4BACE,sBACA,gBAGF,iFAGE,sBACA,cACA,mBACA,gCACA,YAGF,oBACE,gBACA,UAGF,+BACE,sBACA,kBAGF,gCACE,YACA,YAGF,cAEE,kBAGF,sBAEE,kBACA,QACA,qBAIA,wBACE,eACA,iBACA,kBACA,WAEA,sDACE,gCAIJ,4BACE,kBACA,sCChRJ,MACE,SACA,iBACA,qBACA,WACA,YAGF,eACE,WACA,YAGF,cACE,yDAGF,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BACE,iBACA,kBACA,iBnEwBO,QmEvBP,anEyBO,QmExBP,mBACA,2BACA,4BAEA,4BACE,SACA,iBnEyBM,QmExBN,gBC/BJ,MACE,gBACA,oBAEA,8BACE,cAIJ,aACE,WpEoCO,QoEnCP,kBACA,UACA,aACA,kBACA,sBACA,iBACA,WAGF,4BACE,gBACA,WACA,SACA,SAIA,qBACE,gBACA,gBACA,mBACA,kBACA,+BAEA,6CACE,iBAIJ,4BACE,cACA,yBACA,iBACA,oBACA,iBACA,eAGF,0BACE,aACA,iBCnDJ,mBACE,oBACA,crEkJgC,EqEjJhC,iBrEkJqB,KqE/InB,wDACE,atEo/C8B,MsEj/ChC,0CACE,SCTN,mBACE,iBAEA,uCACE,cACA,iBACA,kBACA,iBCTJ,OACE,gBACA,4BAEA,qBACE,wBAIJ,eACE,WACA,sBACA,sBACA,kBAEA,qCACE,kBAIJ,eACE,WACA,yBACA,sBACA,kBAEA,qCACE,kBAIJ,cACE,UACA,sBACA,sBACA,iBAEA,mCACE,iBCrCF,2BACE,kBACA,gBAGF,gCACE,kBACA,YACA,UAUF,uNACE,cACA,kBCrBJ,cACE,mDAGF,cACE,iBzEqCc,Q0E1ChB,aACE,MACE,aAIF,iBAIE,WACA,sBACA,eAIF,OACE,WACA,qBAIF,IACE,SAIF,YAGE,uBACA,sBAGF,MACE,yBACA,oBAGF,MACE,yBACA,oBACA,uBACA,gBAGF,MAEE,aAGF,SACE,iBACA,yBACA,uBAIF,cACE,kBACA,OACA,MACA,UACA,WAGF,UACE,WACA,sBAKF,qCAKE,aAKA,4CACE,gBAEA,+CACE,gBAKJ,6CACE,mBAEA,gDACE,mBAKN,kBACE","file":"theme.css"} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.rtl.css b/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.rtl.css new file mode 100644 index 0000000..efc621d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.rtl.css @@ -0,0 +1,2 @@ +:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 0, 0, 0;--bs-body-bg-rgb: 245, 245, 245;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: sans-serif;--bs-body-font-size: 0.82rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #000;--bs-body-bg: #f5f5f5}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:bold;line-height:1.2}h1,.h1{font-size:140%}h2,.h2{font-size:120%}h3,.h3{font-size:1rem}h4,.h4{font-size:1.23rem}h5,.h5{font-size:1.025rem}h6,.h6{font-size:0.82rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:blue;text-decoration:none}a:hover{color:red;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr ;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.025rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-right:0;list-style:none}.list-inline{padding-right:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.025rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-left:var(--bs-gutter-x, 0.75rem);padding-right:var(--bs-gutter-x, 0.75rem);margin-left:auto;margin-right:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-left:calc(-0.5*var(--bs-gutter-x));margin-right:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #000;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #000;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #000;--bs-table-hover-bg: #cfc;width:100%;margin-bottom:1rem;color:#000;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(even)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #cfe2ff;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg: #e2e3e5;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.025rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.7175rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:0.82rem;font-weight:400;line-height:1.5;color:#000;background-color:#f5f5f5;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#000;background-color:#f5f5f5;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#000;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#000;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#000;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#000;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:0}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:0}.form-select{display:block;width:100%;padding:.375rem .75rem .375rem 2.25rem;-moz-padding-start:calc(0.75rem - 3px);font-size:0.82rem;font-weight:400;line-height:1.5;color:#000;background-color:#f5f5f5;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-left:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #000}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-right:.5rem;font-size:0.7175rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;font-size:1.025rem;border-radius:.3rem}.form-check{display:block;min-height:1.23rem;padding-right:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:right;margin-right:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#f5f5f5;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-right:2.5em}.form-switch .form-check-input{width:2em;margin-right:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:right center;border-radius:2em}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:left center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #f5f5f5,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #f5f5f5,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-appearance:none;appearance:none}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-appearance:none;appearance:none}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;right:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:100% 0}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:0.82rem;font-weight:400;line-height:1.5;color:#000;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:0}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.7175rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:0}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-left:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-left:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.7175rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:0}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-left:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-left:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#000;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .75rem;font-size:0.82rem;border-radius:0}.btn:hover{color:#000;text-decoration:none}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#0d6efd;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#6c757d;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:blue;text-decoration:none}.btn-link:hover{color:red;text-decoration:underline}.btn-link:focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden}.collapsing.collapse-horizontal{width:0;height:auto}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:0 0;margin:0;font-size:0.82rem;color:#000;text-align:right;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:0}.dropdown-menu[data-bs-popper]{top:100%;right:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{left:0;right:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{left:0;right:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropend .dropdown-menu[data-bs-popper]{top:0;left:auto;right:100%;margin-top:0;margin-right:.125rem}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;left:100%;right:auto;margin-top:0;margin-left:.125rem}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:0 0;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.dropdown-item:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:0 0;margin-bottom:0;font-size:0.7175rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:0 0;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-right:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-right:0}.dropstart .dropdown-toggle-split::before{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-top-left-radius:0}.nav{display:flex;flex-wrap:wrap;padding-right:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:blue}.nav-link:hover,.nav-link:focus{color:red;text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid rgba(0,0,0,0)}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-right-radius:0;border-top-left-radius:0}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#d5d5d5 #d5d5d5 #f5f5f5;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:blue;background-color:#e5e5e5;border-color:#d5d5d5 #d5d5d5 #f5f5f5}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:0}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:0;padding-left:0;padding-bottom:0;padding-right:0}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.34625rem;padding-bottom:.34625rem;margin-left:1rem;font-size:1.025rem;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.025rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:0}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:blue}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:blue}.navbar-light .navbar-nav .nav-link{color:blue}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:red}.navbar-light .navbar-nav .nav-link.disabled{color:blue}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:blue}.navbar-light .navbar-toggler{color:blue;border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%2300f' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:blue}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:blue}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#e5e5e5;background-clip:border-box;border:1px solid #000;border-radius:0}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-right-radius:0;border-top-left-radius:0}.card>.list-group:last-child{border-bottom-width:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:.5em .5em}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-right:.5em}.card-header{padding:.25em .5em;margin-bottom:0;background-color:#d3dce3;border-bottom:1px solid #000}.card-header:first-child{border-radius:0 0 0 0}.card-footer{padding:.25em .5em;background-color:#d3dce3;border-top:1px solid #000}.card-footer:last-child{border-radius:0 0 0 0}.card-header-tabs{margin-left:-0.25em;margin-bottom:-0.25em;margin-right:-0.25em;border-bottom:0}.card-header-pills{margin-left:-0.25em;margin-right:-0.25em}.card-img-overlay{position:absolute;top:0;left:0;bottom:0;right:0;padding:1rem;border-radius:0}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-right-radius:0;border-top-left-radius:0}.card-img,.card-img-bottom{border-bottom-left-radius:0;border-bottom-right-radius:0}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-right:0;border-right:0}.card-group>.card:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-right-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:.375rem .75rem;font-size:0.82rem;color:blue;text-align:right;background-color:#f5f5f5;border:0;border-radius:0;overflow-anchor:none}.accordion-button:not(.collapsed){color:blue;background-color:#e5e5e5;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2300f'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-right:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2300f'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#f5f5f5;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-right-radius:0;border-top-left-radius:0}.accordion-item:first-of-type .accordion-button{border-top-right-radius:0;border-top-left-radius:0}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-item:last-of-type .accordion-collapse{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-left:0;border-right:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-right:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:right;padding-left:.5rem;color:inherit;content:var(--bs-breadcrumb-divider, "»")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-right:0;list-style:none}.page-link{position:relative;display:block;color:blue;background-color:#fff;border:1px solid #000}.page-link:hover{z-index:2;color:red;text-decoration:none;background-color:#e9ecef;border-color:#000}.page-link:focus{z-index:3;color:red;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-right:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#000}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#000}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0}.page-item:last-child .page-link{border-top-left-radius:0;border-bottom-left-radius:0}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.025rem}.pagination-lg .page-item:first-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.7175rem}.pagination-sm .page-item:first-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:.2em;border:2px solid rgba(0,0,0,0);border-radius:0}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{position:absolute;top:0;left:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;border-radius:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#000;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.375rem .75rem;color:#212529;background-color:inherit;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-right-radius:inherit;border-top-left-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:inherit}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:0;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.modal{position:fixed;top:0;right:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transform:translate(0, -50px)}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:0;outline:0}.modal-backdrop{position:fixed;top:0;right:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:.4rem .75rem;border-bottom:1px solid #000;border-top-right-radius:0;border-top-left-radius:0}.modal-header .btn-close{padding:.2rem .375rem;margin:-0.2rem auto -0.2rem -0.375rem}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:.75rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.7rem;border-top:1px solid #000;border-bottom-left-radius:0;border-bottom-right-radius:0}.modal-footer>*{margin:.05rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}@-webkit-keyframes spinner-border{to{transform:rotate(-360deg)}}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-left-color:rgba(0,0,0,0);border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:hover,.link-primary:focus{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:hover,.link-secondary:focus{color:#565e64}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:right !important}.float-end{float:left !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{right:0 !important}.start-50{right:50% !important}.start-100{right:100% !important}.end-0{left:0 !important}.end-50{left:50% !important}.end-100{left:100% !important}.translate-middle{transform:translate(50%, -50%) !important}.translate-middle-x{transform:translateX(50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-top-0{border-top:0 !important}.border-end{border-left:1px solid #dee2e6 !important}.border-end-0{border-left:0 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-right:1px solid #dee2e6 !important}.border-start-0{border-right:0 !important}.border-primary{border-color:#0d6efd !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-3{margin-left:1rem !important;margin-right:1rem !important}.mx-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-5{margin-left:3rem !important;margin-right:3rem !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-left:0 !important}.me-1{margin-left:.25rem !important}.me-2{margin-left:.5rem !important}.me-3{margin-left:1rem !important}.me-4{margin-left:1.5rem !important}.me-5{margin-left:3rem !important}.me-auto{margin-left:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-right:0 !important}.ms-1{margin-right:.25rem !important}.ms-2{margin-right:.5rem !important}.ms-3{margin-right:1rem !important}.ms-4{margin-right:1.5rem !important}.ms-5{margin-right:3rem !important}.ms-auto{margin-right:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-left:0 !important;padding-right:0 !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-3{padding-left:1rem !important;padding-right:1rem !important}.px-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-5{padding-left:3rem !important;padding-right:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-left:0 !important}.pe-1{padding-left:.25rem !important}.pe-2{padding-left:.5rem !important}.pe-3{padding-left:1rem !important}.pe-4{padding-left:1.5rem !important}.pe-5{padding-left:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-right:0 !important}.ps-1{padding-right:.25rem !important}.ps-2{padding-right:.5rem !important}.ps-3{padding-right:1rem !important}.ps-4{padding-right:1.5rem !important}.ps-5{padding-right:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:140% !important}.fs-2{font-size:120% !important}.fs-3{font-size:1rem !important}.fs-4{font-size:1.23rem !important}.fs-5{font-size:1.025rem !important}.fs-6{font-size:0.82rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:right !important}.text-end{text-align:left !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:0 !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:0 !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-right-radius:0 !important;border-top-left-radius:0 !important}.rounded-end{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom{border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-start{border-bottom-right-radius:0 !important;border-top-right-radius:0 !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:right !important}.float-sm-end{float:left !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-left:0 !important;margin-right:0 !important}.mx-sm-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-sm-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-sm-3{margin-left:1rem !important;margin-right:1rem !important}.mx-sm-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-sm-5{margin-left:3rem !important;margin-right:3rem !important}.mx-sm-auto{margin-left:auto !important;margin-right:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-left:0 !important}.me-sm-1{margin-left:.25rem !important}.me-sm-2{margin-left:.5rem !important}.me-sm-3{margin-left:1rem !important}.me-sm-4{margin-left:1.5rem !important}.me-sm-5{margin-left:3rem !important}.me-sm-auto{margin-left:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-right:0 !important}.ms-sm-1{margin-right:.25rem !important}.ms-sm-2{margin-right:.5rem !important}.ms-sm-3{margin-right:1rem !important}.ms-sm-4{margin-right:1.5rem !important}.ms-sm-5{margin-right:3rem !important}.ms-sm-auto{margin-right:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-left:0 !important;padding-right:0 !important}.px-sm-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-sm-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-sm-3{padding-left:1rem !important;padding-right:1rem !important}.px-sm-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-sm-5{padding-left:3rem !important;padding-right:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-left:0 !important}.pe-sm-1{padding-left:.25rem !important}.pe-sm-2{padding-left:.5rem !important}.pe-sm-3{padding-left:1rem !important}.pe-sm-4{padding-left:1.5rem !important}.pe-sm-5{padding-left:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-right:0 !important}.ps-sm-1{padding-right:.25rem !important}.ps-sm-2{padding-right:.5rem !important}.ps-sm-3{padding-right:1rem !important}.ps-sm-4{padding-right:1.5rem !important}.ps-sm-5{padding-right:3rem !important}.text-sm-start{text-align:right !important}.text-sm-end{text-align:left !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:right !important}.float-md-end{float:left !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-left:0 !important;margin-right:0 !important}.mx-md-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-md-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-md-3{margin-left:1rem !important;margin-right:1rem !important}.mx-md-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-md-5{margin-left:3rem !important;margin-right:3rem !important}.mx-md-auto{margin-left:auto !important;margin-right:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-left:0 !important}.me-md-1{margin-left:.25rem !important}.me-md-2{margin-left:.5rem !important}.me-md-3{margin-left:1rem !important}.me-md-4{margin-left:1.5rem !important}.me-md-5{margin-left:3rem !important}.me-md-auto{margin-left:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-right:0 !important}.ms-md-1{margin-right:.25rem !important}.ms-md-2{margin-right:.5rem !important}.ms-md-3{margin-right:1rem !important}.ms-md-4{margin-right:1.5rem !important}.ms-md-5{margin-right:3rem !important}.ms-md-auto{margin-right:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-left:0 !important;padding-right:0 !important}.px-md-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-md-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-md-3{padding-left:1rem !important;padding-right:1rem !important}.px-md-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-md-5{padding-left:3rem !important;padding-right:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-left:0 !important}.pe-md-1{padding-left:.25rem !important}.pe-md-2{padding-left:.5rem !important}.pe-md-3{padding-left:1rem !important}.pe-md-4{padding-left:1.5rem !important}.pe-md-5{padding-left:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-right:0 !important}.ps-md-1{padding-right:.25rem !important}.ps-md-2{padding-right:.5rem !important}.ps-md-3{padding-right:1rem !important}.ps-md-4{padding-right:1.5rem !important}.ps-md-5{padding-right:3rem !important}.text-md-start{text-align:right !important}.text-md-end{text-align:left !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:right !important}.float-lg-end{float:left !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-left:0 !important;margin-right:0 !important}.mx-lg-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-lg-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-lg-3{margin-left:1rem !important;margin-right:1rem !important}.mx-lg-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-lg-5{margin-left:3rem !important;margin-right:3rem !important}.mx-lg-auto{margin-left:auto !important;margin-right:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-left:0 !important}.me-lg-1{margin-left:.25rem !important}.me-lg-2{margin-left:.5rem !important}.me-lg-3{margin-left:1rem !important}.me-lg-4{margin-left:1.5rem !important}.me-lg-5{margin-left:3rem !important}.me-lg-auto{margin-left:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-right:0 !important}.ms-lg-1{margin-right:.25rem !important}.ms-lg-2{margin-right:.5rem !important}.ms-lg-3{margin-right:1rem !important}.ms-lg-4{margin-right:1.5rem !important}.ms-lg-5{margin-right:3rem !important}.ms-lg-auto{margin-right:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-left:0 !important;padding-right:0 !important}.px-lg-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-lg-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-lg-3{padding-left:1rem !important;padding-right:1rem !important}.px-lg-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-lg-5{padding-left:3rem !important;padding-right:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-left:0 !important}.pe-lg-1{padding-left:.25rem !important}.pe-lg-2{padding-left:.5rem !important}.pe-lg-3{padding-left:1rem !important}.pe-lg-4{padding-left:1.5rem !important}.pe-lg-5{padding-left:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-right:0 !important}.ps-lg-1{padding-right:.25rem !important}.ps-lg-2{padding-right:.5rem !important}.ps-lg-3{padding-right:1rem !important}.ps-lg-4{padding-right:1.5rem !important}.ps-lg-5{padding-right:3rem !important}.text-lg-start{text-align:right !important}.text-lg-end{text-align:left !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:right !important}.float-xl-end{float:left !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-left:0 !important;margin-right:0 !important}.mx-xl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xl-auto{margin-left:auto !important;margin-right:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-left:0 !important}.me-xl-1{margin-left:.25rem !important}.me-xl-2{margin-left:.5rem !important}.me-xl-3{margin-left:1rem !important}.me-xl-4{margin-left:1.5rem !important}.me-xl-5{margin-left:3rem !important}.me-xl-auto{margin-left:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-right:0 !important}.ms-xl-1{margin-right:.25rem !important}.ms-xl-2{margin-right:.5rem !important}.ms-xl-3{margin-right:1rem !important}.ms-xl-4{margin-right:1.5rem !important}.ms-xl-5{margin-right:3rem !important}.ms-xl-auto{margin-right:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-left:0 !important;padding-right:0 !important}.px-xl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-left:0 !important}.pe-xl-1{padding-left:.25rem !important}.pe-xl-2{padding-left:.5rem !important}.pe-xl-3{padding-left:1rem !important}.pe-xl-4{padding-left:1.5rem !important}.pe-xl-5{padding-left:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-right:0 !important}.ps-xl-1{padding-right:.25rem !important}.ps-xl-2{padding-right:.5rem !important}.ps-xl-3{padding-right:1rem !important}.ps-xl-4{padding-right:1.5rem !important}.ps-xl-5{padding-right:3rem !important}.text-xl-start{text-align:right !important}.text-xl-end{text-align:left !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:right !important}.float-xxl-end{float:left !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-left:0 !important;margin-right:0 !important}.mx-xxl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xxl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xxl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xxl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xxl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xxl-auto{margin-left:auto !important;margin-right:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-left:0 !important}.me-xxl-1{margin-left:.25rem !important}.me-xxl-2{margin-left:.5rem !important}.me-xxl-3{margin-left:1rem !important}.me-xxl-4{margin-left:1.5rem !important}.me-xxl-5{margin-left:3rem !important}.me-xxl-auto{margin-left:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-right:0 !important}.ms-xxl-1{margin-right:.25rem !important}.ms-xxl-2{margin-right:.5rem !important}.ms-xxl-3{margin-right:1rem !important}.ms-xxl-4{margin-right:1.5rem !important}.ms-xxl-5{margin-right:3rem !important}.ms-xxl-auto{margin-right:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-left:0 !important;padding-right:0 !important}.px-xxl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xxl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xxl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xxl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xxl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-left:0 !important}.pe-xxl-1{padding-left:.25rem !important}.pe-xxl-2{padding-left:.5rem !important}.pe-xxl-3{padding-left:1rem !important}.pe-xxl-4{padding-left:1.5rem !important}.pe-xxl-5{padding-left:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-right:0 !important}.ps-xxl-1{padding-right:.25rem !important}.ps-xxl-2{padding-right:.5rem !important}.ps-xxl-3{padding-right:1rem !important}.ps-xxl-4{padding-right:1.5rem !important}.ps-xxl-5{padding-right:3rem !important}.text-xxl-start{text-align:right !important}.text-xxl-end{text-align:left !important}.text-xxl-center{text-align:center !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}#page_content{margin:0 .5em}button.mult_submit,.checkall_box+label{text-decoration:none;color:blue;cursor:pointer}button.mult_submit:hover,button.mult_submit:focus{text-decoration:underline;color:red}.checkall_box+label:hover{text-decoration:underline;color:red}dfn{font-style:normal}dfn:hover{font-style:normal;cursor:help}a img{border:0}hr{color:#000;background-color:#000;border:0;height:1px}form{padding:0;margin:0;display:inline}textarea{overflow:visible}textarea.charField{width:95%}.pma-fieldset{margin-top:1em;border:#000 solid 1px;padding:.5em;background:#e5e5e5}.pma-fieldset .pma-fieldset{margin:.8em}.pma-fieldset legend{float:none;font-weight:bold;color:#444;background-color:rgba(0,0,0,0);width:initial;font-size:1em}button{display:inline}img,input,select,button{vertical-align:middle}.clearfloat{clear:both}.paddingtop{padding-top:1em}div.tools{border:1px solid #000;padding:.2em;margin-top:0;margin-bottom:.5em;border-top:0;text-align:left;float:none;clear:both}.pma-fieldset.tblFooters{margin-top:0;margin-bottom:.5em;border-top:0;text-align:left;float:none;clear:both}div.null_div{height:20px;text-align:center;font-style:normal;min-width:50px}.pma-fieldset .formelement{float:right;margin-left:.5em;white-space:nowrap}.pma-fieldset div[class=formelement]{white-space:normal}button.mult_submit{border:none;background-color:rgba(0,0,0,0)}td.condition,th.condition{border:1px solid #fc9}td.null{font-style:italic;color:#7d7d7d !important}table .valueHeader,table .value{text-align:left;white-space:normal}.value{font-family:monospace}img.lightbulb{cursor:pointer}.pdflayout{overflow:hidden;clip:inherit;background-color:#fff;display:none;border:1px solid #000;position:relative}.pdflayout_table{background:#d3dce3;color:#000;overflow:hidden;clip:inherit;z-index:2;display:inline;visibility:inherit;cursor:move;position:absolute;font-size:80%;border:1px dashed #000}.cm-sql-doc{text-decoration:none;border-bottom:1px dotted #000;color:inherit !important}.icon{image-rendering:-moz-crisp-edges;image-rendering:pixelated;vertical-align:middle;margin-right:.3em;background-repeat:no-repeat;background-position:center}.selectallarrow{margin-left:.3em;margin-right:.6em}.with-selected{margin-right:2em}#pma_errors,#pma_demo,#pma_footer{position:relative;padding:0 .5em}.confirmation{background-color:#ffc}.pma-fieldset.confirmation{border:.1em solid red}.pma-fieldset.confirmation legend{border-right:.1em solid red;border-left:.1em solid red;font-weight:bold;background-image:url("../img/s_really.png");background-repeat:no-repeat;background-position:97% 50% ;padding:.2em 25px .2em .2em}.error{background-color:#ffc;color:red}label.error{padding:3px;margin-right:4px}.new_central_col{width:100%}.tblcomment{font-size:70%;font-weight:normal;color:#009}.tblHeaders{font-weight:bold;color:#000;background:#d3dce3}div.tools,.tblFooters{font-weight:normal;color:#000;background:#d3dce3}.tblHeaders a:link,.tblHeaders a:active,.tblHeaders a:visited{color:blue}.tblHeaders a:hover{color:red}div.tools a:link,div.tools a:visited,div.tools a:active{color:blue}div.tools a:hover{color:red}.tblFooters a:link,.tblFooters a:active,.tblFooters a:visited{color:blue}.tblFooters a:hover{color:red}.disabled{color:#666}.disabled a:link,.disabled a:active,.disabled a:visited{color:#666}.disabled a:hover{color:#666;text-decoration:none}tr.disabled td,td.disabled{background-color:#ccc}.pre_wrap{white-space:pre-wrap}.pre_wrap br{display:none}div#resizer{width:600px;height:400px}div#querychart{float:right;width:600px}body#loginform{margin:0;margin-top:1em;text-align:center}body#loginform h1,body#loginform .h1,body#loginform a.logo{display:block;text-align:center}body#loginform div.container{text-align:right;width:30em;margin:0 auto}div.container.modal_form{margin:0 auto;width:30em;text-align:center;background:#fff;z-index:999}#login_form{text-align:right}#login_form .pma-fieldset.tblFooters{text-align:left}#login_form select#select_server{width:100%}div#modalOverlay{position:fixed;top:0;right:0;height:100%;width:100%;background:#fff;z-index:900}#login_form label{width:10em;font-weight:bolder}.commented_column{border-bottom:1px dashed #000}.column_attribute{font-size:70%}.column_name{font-size:80%;margin:5px 2px}.central_columns_navigation{padding:1.5% 0 !important}.message_errors_found{margin-top:20px}.repl_gui_skip_err_cnt{width:30px}.color_gray{color:gray}.max_height_400{max-height:400px}li.last.database{margin-bottom:15px !important}ul.tabs{font-weight:bold;list-style-type:none;margin:0;padding:0}div#dataDisplay input,div#dataDisplay select{margin:0;margin-left:.5em}div#dataDisplay th{line-height:2em}img.calendar{border:none}form.clock{text-align:center}div#tablestatistics table{float:right;margin-top:.5em;margin-bottom:.5em;margin-left:.5em;min-width:16em}#topmenucontainer{background:#fff;padding-left:1em;width:100%}#page_nav_icons{position:fixed;top:0;left:0;z-index:99;padding:.1rem 0}#page_settings_icon{cursor:pointer;display:none}#page_settings_modal,#pma_navigation_settings{display:none}#textSQLDUMP{width:95%;height:95%;font-family:monospace;font-size:110%}#TooltipContainer{position:absolute;z-index:99;width:20em;height:auto;overflow:visible;visibility:hidden;background-color:#ffc;color:#060;border:.1em solid #000;padding:.5em}#fieldset_add_user_login div.item{border-bottom:1px solid silver;padding-bottom:.3em;margin-bottom:.3em}#fieldset_add_user_login label{float:right;display:block;width:15em;max-width:100%;text-align:left;padding-left:.5em}#fieldset_add_user_login span.options{float:right;display:block;width:12em;max-width:100%;padding-left:.5em}#fieldset_add_user_login span.options #select_pred_username,#fieldset_add_user_login span.options #select_pred_hostname,#fieldset_add_user_login span.options #select_pred_password{width:100%;max-width:100%}#fieldset_add_user_login input{width:12em;clear:left;max-width:100%}#fieldset_add_user_login span.options input{width:auto}#fieldset_user_priv div.item{float:right;width:9em;max-width:100%}#fieldset_user_priv div.item div.item{float:none}#fieldset_user_priv div.item label{white-space:nowrap}#fieldset_user_priv div.item select{width:100%}#fieldset_user_global_rights .pma-fieldset,#fieldset_user_group_rights .pma-fieldset{float:right}#fieldset_user_global_rights>legend input{margin-right:2em}.linkElem:hover{text-decoration:underline;color:#235a81;cursor:pointer}h3#serverstatusqueries span,#serverstatusqueries.h3 span{font-size:60%;display:inline}div#serverStatusTabs{margin-top:1em}caption a.top{float:left}div#serverstatusquerieschart{float:right;width:500px;height:350px;margin-left:50px}div#serverstatus table tbody td.descr a,div#serverstatus table .tblFooters a{white-space:nowrap}div.liveChart{clear:both;min-width:500px;height:400px;padding-bottom:80px}div#chartVariableSettings{border:1px solid #ddd;background-color:#e6e6e6;margin-right:10px}table#chartGrid td{padding:3px;margin:0}table#chartGrid div.monitorChart{background:#ebebeb;border:none;min-width:1px}div.tabLinks{margin-right:.3em;float:right;padding:5px 0}div.tabLinks a,div.tabLinks label{margin-left:7px}div.tabLinks .icon{margin:-0.2em 0 0 .3em}.popupContent{display:none;position:absolute;border:1px solid #ccc;margin:0;padding:3px;box-shadow:-2px 2px 3px #666;background-color:#fff;z-index:2}div#logTable{padding-top:10px;clear:both}div#logTable table{width:100%}.smallIndent{padding-right:7px}div#profilingchart{width:850px;height:370px;float:right}#profilingchart .jqplot-highlighter-tooltip{top:auto !important;right:11px;bottom:24px}textarea#sqlquery{width:100%}textarea#sql_query_edit{height:7em;width:95%;display:block}#maincontainer{background-image:url("../img/logo_right.png");background-position:left bottom;background-repeat:no-repeat}#mysqlmaininformation,#pmamaininformation{float:right;width:49%}#maincontainer ul{list-style-type:disc;vertical-align:middle}#maincontainer li{margin:.2em 0}#full_name_layer{position:absolute;padding:2px;margin-top:-3px;z-index:801;border:solid 1px #888;background:#fff}#body_browse_foreigners{background:#d0dce0;margin:.5em .5em 0 .5em}#bodythemes{width:500px;margin:auto;text-align:center}#bodythemes img{border:.1em solid #000}#bodythemes a:hover img{border:.1em solid red}#selflink{clear:both;display:block;margin-top:1em;margin-bottom:1em;width:98%;margin-right:1%;border-top:.1em solid silver;text-align:left}#qbe_div_table_list,#qbe_div_sql_query{float:right}kbd{color:#000;background-color:rgba(0,0,0,0);box-shadow:none}code{font-size:1em;color:#000}code.php{display:block;padding-right:.3em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}code.sql{display:block;padding:.3em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}div.sqlvalidate{display:block;padding:.3em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}.result_query div.sqlOuter,div.sqlvalidate{border:#000 solid 1px;border-top:0;border-bottom:0;background:#e5e5e5}.result_query div.sqlOuter{text-align:right}#PMA_slidingMessage code.sql{border:#000 solid 1px;border-top:0;background:#e5e5e5}textarea#partitiondefinition{height:3em}.hide{display:none}#list_server{list-style-type:none;padding:0}div.upload_progress{width:400px;margin:3em auto;text-align:center}div.upload_progress_bar_outer{border:1px solid #000;width:202px;position:relative;margin:0 auto 1em;color:#000}div.upload_progress_bar_inner{background-color:#99c;width:0;height:12px;margin:1px;overflow:hidden;color:#000;position:relative}div.upload_progress_bar_outer div.percentage{position:absolute;top:0;right:0;width:202px}div.upload_progress_bar_inner div.percentage{top:-1px;right:-1px}div#statustext{margin-top:.5em}table#serverconnection_src_remote,table#serverconnection_trg_remote,table#serverconnection_src_local,table#serverconnection_trg_local{float:right}input[type=text].invalid_value,input[type=password].invalid_value,input[type=number].invalid_value,input[type=date].invalid_value{background:#fcc}select.invalid_value,.invalid_value{background:#fcc}.ajax_notification{top:0;position:fixed;margin-top:0;margin-left:auto;margin-bottom:0;margin-right:auto;padding:3px 5px;width:350px;background-color:gold;z-index:1100;text-align:center;display:block;right:0;left:0;background-image:url("../img/ajax_clock_small.gif");background-repeat:no-repeat;background-position:98%}#loading_parent{position:relative;width:100%}#popup_background{display:none;position:fixed;width:100%;height:100%;top:0;right:0;background:#000;z-index:1000;overflow:hidden}#create_table_form table.table-name td{vertical-align:middle}#tablestructure tbody label{margin:.3rem 0}#structure-action-links a{margin-left:1em}#addColumns input[type=radio]{margin:0;margin-right:1em}#addColumns input[type=submit]{margin-right:1em}#index_frm .index_info input[type=text],#index_frm .index_info select{width:100%;box-sizing:border-box}#index_frm .slider{width:10em;margin:.6em;float:right}#index_frm .add_fields{float:right}#index_frm .add_fields input{margin-right:1em}#index_frm input{margin:0}#index_frm td{vertical-align:middle}table#index_columns{width:100%}table#index_columns select{width:85%;float:left}#move_columns_dialog div{padding:1em}#move_columns_dialog ul{list-style:none;margin:0;padding:0}#move_columns_dialog li{background:#d3dce3;border:1px solid #aaa;color:#000;font-weight:bold;margin:.4em;padding:.2em;border-radius:2px}.config-form .card{margin-top:0}.config-form fieldset{margin-top:0;padding:0;clear:both}.config-form legend{display:none}.config-form fieldset p{margin:0;padding:.5em;background:#d5d5d5}.config-form fieldset .errors{margin:0 -2px 1em -2px;padding:.5em 1.5em;background:#fbead9;border-color:#c83838;border-style:solid;border-width:1px 0;list-style:none;font-family:sans-serif;font-size:small}.config-form fieldset .inline_errors{margin:.3em 0 .3em .3em;padding:0;list-style:none;color:#9a0000;font-size:small}.config-form fieldset th{padding:.3em .5em .3em .3em;text-align:right;vertical-align:top;background:rgba(0,0,0,0)}.config-form fieldset .doc{margin-right:1em}.config-form fieldset .disabled-notice{margin-right:1em;font-size:80%;text-transform:uppercase;color:#e00;cursor:help}.config-form fieldset td{padding-top:.3em;padding-bottom:.3em;vertical-align:top;border-top:1px solid #d5d5d5}.config-form fieldset th{border-top:1px solid #d5d5d5}.config-form fieldset th small,.config-form fieldset th .small{display:block;font-weight:normal;font-family:sans-serif;font-size:x-small;color:#444}fieldset .group-header th{background:#d5d5d5}fieldset .group-header+tr th{padding-top:.6em}fieldset .group-field-1 th,fieldset .group-header-2 th{padding-right:1.5em}fieldset .group-field-2 th,fieldset .group-header-3 th{padding-right:3em}fieldset .group-field-3 th{padding-right:4.5em}fieldset .disabled-field th{color:#666;background-color:#ddd}fieldset .disabled-field th small,fieldset .disabled-field th .small{color:#666;background-color:#ddd}fieldset .disabled-field td{color:#666;background-color:#ddd}.config-form span.checkbox{padding:2px;display:inline-block}.config-form .custom{background:#ffc}.config-form span.checkbox.custom{padding:1px;border:1px #edec90 solid;background:#ffc}.config-form .field-error{border-color:#a11 !important}.config-form input[type=text],.config-form input[type=password],.config-form input[type=number]{border:1px #a7a6aa solid;height:auto}.config-form select,.config-form textarea{border:1px #a7a6aa solid;height:auto}.config-form input[type=text]:focus,.config-form input[type=password]:focus,.config-form input[type=number]:focus{border:1px #6676ff solid;background:#f7fbff}.config-form select:focus,.config-form textarea:focus{border:1px #6676ff solid;background:#f7fbff}.config-form .field-comment-mark{font-family:serif;color:#007;cursor:help;padding:0 .2em;font-weight:bold;font-style:italic}.config-form .field-comment-warning{color:#a00}.config-form dd{margin-right:.5em}.config-form dd::before{content:"▸ "}.click-hide-message{cursor:pointer}.prefsmanage_opts{margin-right:2em}#prefs_autoload{margin-bottom:.5em;margin-right:.5em}input#auto_increment_opt{width:-webkit-min-content;width:-moz-min-content;width:min-content}#placeholder .button{position:absolute;cursor:pointer}#placeholder div.button{font-size:smaller;color:#999;background-color:#eee;padding:2px}.wrapper{float:right;margin-bottom:.5em}.toggleButton{position:relative;cursor:pointer;font-size:.8em;text-align:center;line-height:1.4em;height:1.55em;overflow:hidden;border-left:.1em solid #888;border-right:.1em solid #888}.toggleButton table,.toggleButton td,.toggleButton img{padding:0;position:relative}.toggleButton .toggle-container{position:absolute}.toggleButton .toggle-container td,.toggleButton .toggle-container tr{background:none !important}.toggleButton .toggleOn{color:#fff;padding:0 1em}.toggleButton .toggleOff{padding:0 1em}.doubleFieldset .pma-fieldset{width:48%;float:right;padding:0}.doubleFieldset legend{margin-right:.5em}.doubleFieldset div.wrap{padding:.5em}#table_name_col_no_outer{margin-top:45px}#table_name_col_no{position:fixed;top:44px;width:100%;background:#f5f5f5}#table_columns{display:block;overflow:auto}#table_columns input[type=text],#table_columns input[type=password],#table_columns input[type=number],#table_columns input[type=date]{width:10em;box-sizing:border-box}#table_columns select{width:10em;box-sizing:border-box}#placeholder{position:relative;border:1px solid #aaa;float:left;overflow:hidden;width:450px;height:300px}#openlayersmap{width:450px;height:300px}.placeholderDrag{cursor:move}#placeholder .button{position:absolute}#left_arrow{right:8px;top:26px}#right_arrow{right:26px;top:26px}#up_arrow{right:17px;top:8px}#down_arrow{right:17px;top:44px}#zoom_in{right:17px;top:67px}#zoom_world{right:17px;top:85px}#zoom_out{right:17px;top:103px}.colborder{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;width:5px}.colborder_active{border-left:2px solid #a44}.pma_table th.draggable span{display:block;overflow:hidden}.pma_table td{position:static}.pma_table tbody td span{display:block;overflow:hidden}.pma_table tbody td span code span{display:inline}.modal-copy input{display:block;width:100%;margin-top:1.5em;padding:.3em 0}.cRsz{position:absolute}.draggable{cursor:move}.cCpy{background:#000;color:#fff;font-weight:bold;margin:.1em;padding:.3em;position:absolute}.cPointer{height:20px;width:10px;margin-top:-10px;margin-right:-5px;position:absolute;background:url("../img/col_pointer.png")}.tooltip{background:#333 !important;opacity:.8 !important;z-index:9999;border:1px solid #000 !important;border-radius:.3em !important;text-shadow:1px -1px #000 !important;font-size:.8em !important;font-weight:bold !important;padding:1px 3px !important}.tooltip *{background:none !important;color:#fff !important}.cDrop{left:0;position:absolute;top:0}.coldrop{background:url("../img/col_drop.png");cursor:pointer;height:16px;margin-top:.3em;width:16px}.coldrop:hover{background-color:#999}.coldrop-hover{background-color:#999}.cList{background:#eee;border:solid 1px #999;position:absolute;margin-right:75%;left:0;max-width:100%;overflow-wrap:break-word}.cList .lDiv div{padding:.2em .2em .2em .5em}.cList .lDiv div:hover{background:#ddd;cursor:pointer}.cList .lDiv div input{cursor:pointer}.showAllColBtn{border-bottom:solid 1px #999;border-top:solid 1px #999;cursor:pointer;font-size:.9em;font-weight:bold;padding:.35em 1em;text-align:center}.showAllColBtn:hover{background:#ddd}.navigation{background:#e5e5e5;border:1px solid #000;margin:.8em 0}.navigation td{margin:0;padding:0;vertical-align:middle;white-space:nowrap}.navigation_separator{color:#555;display:inline-block;text-align:center;width:1.2em;text-shadow:-1px 0 #fff}.navigation input[type=submit]{background:none;border:0;margin:0;padding:.3em .5em;min-width:1.5em;font-weight:bold}.navigation input[type=submit]:hover{background:#333;color:#fff;cursor:pointer}.navigation input.edit_mode_active{background:#333;color:#fff;cursor:pointer}.navigation select{margin:0 .8em}.cEdit{margin:0;padding:0;position:absolute}.cEdit input[type=text],.cEdit input[type=password],.cEdit input[type=number]{background:#fff;height:100%;margin:0;padding:0}.cEdit .edit_area{background:#fff;border:1px solid #999;min-width:10em;padding:.3em .5em}.cEdit .edit_area select,.cEdit .edit_area textarea{width:97%}.cEdit .cell_edit_hint{color:#555;font-size:.8em;margin:.3em .2em}.cEdit .edit_box{overflow-x:hidden;overflow-y:scroll;padding:0}.cEdit .edit_box_posting{background:#fff url("../img/ajax_clock_small.gif") no-repeat left center;padding-left:1.5em}.cEdit .edit_area_loading{background:#fff url("../img/ajax_clock_small.gif") no-repeat center;height:10em}.cEdit .goto_link{background:#eee;color:#555;padding:.2em .3em}.saving_edited_data{background:url("../img/ajax_clock_small.gif") no-repeat right;padding-right:20px}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:right}.ui-timepicker-div dl dt{height:25px;margin-bottom:-25px}.ui-timepicker-div dl dd{margin:0 85px 10px 10px}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:none;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:ltr}.ui-timepicker-rtl dl{text-align:left}.ui-timepicker-rtl dl dd{margin:0 10px 10px 65px}input.btn{color:#333;background-color:#d0dce0}body .ui-widget{font-size:1em}body #ui-datepicker-div{z-index:9999 !important}.ui-dialog .pma-fieldset legend a{color:blue}.ui-draggable{z-index:801}.relationalTable td{vertical-align:top}.relationalTable select{width:125px;margin-left:5px}div#page_content div#tableslistcontainer{margin-top:1em}div#page_content div#tableslistcontainer table.data{border-top:.1px solid #eee}div#page_content div.result_query{margin-top:1em}table.show_create{margin-top:1em}table.show_create td{border-left:1px solid #bbb}#alias_modal table{width:100%}#alias_modal label{font-weight:bold}.ui-dialog{position:fixed}.small_font{font-size:smaller}#pma_console_container{width:100%;position:fixed;bottom:0;right:0;z-index:100}textarea{resize:both}#pma_console{position:relative;margin-right:240px;z-index:100}#pma_console .templates{display:none}#pma_console .mid_text{vertical-align:middle}#pma_console .toolbar{position:relative;background:#ccc;border-top:solid 1px #aaa;cursor:n-resize}#pma_console .toolbar span{vertical-align:middle}#pma_console .toolbar.collapsed{cursor:default}#pma_console .toolbar.collapsed:not(:hover){display:inline-block;border-top-left-radius:3px;border-left:solid 1px #aaa}#pma_console .toolbar.collapsed>.button{display:none}#pma_console .message span.text,#pma_console .message span.action{padding:0 3px;display:inline-block}#pma_console .toolbar .button,#pma_console .toolbar .text{padding:0 3px;display:inline-block}#pma_console .switch_button{padding:0 3px;display:inline-block}#pma_console .message span.action,#pma_console .toolbar .button,#pma_console .switch_button{cursor:pointer}#pma_console .message span.action:hover,#pma_console .toolbar .button:hover,#pma_console .switch_button:hover{background:#ddd}#pma_console .toolbar .button.active{background:#ddd}#pma_console .toolbar .text{font-weight:bold}#pma_console .toolbar .button,#pma_console .toolbar .text{margin-left:.4em;float:left}#pma_console .content{overflow-x:hidden;overflow-y:auto;margin-bottom:-65px;border-top:solid 1px #aaa;background:#fff;padding-top:.4em}#pma_console .content.console_dark_theme{background:#000;color:#fff}#pma_console .content.console_dark_theme .CodeMirror-wrap{background:#000;color:#fff}#pma_console .content.console_dark_theme .action_content{color:#000}#pma_console .content.console_dark_theme .message{border-color:#373b41}#pma_console .content.console_dark_theme .CodeMirror-cursor{border-color:#fff}#pma_console .content.console_dark_theme .cm-keyword{color:#de935f}#pma_console .message,#pma_console .query_input{position:relative;font-family:Monaco,Consolas,monospace;cursor:text;margin:0 1.4em .2em 10px}#pma_console .message{border-bottom:solid 1px #ccc;padding-bottom:.2em}#pma_console .message.expanded>.action_content{position:relative}#pma_console .message::before{right:-0.7em;position:absolute;content:">"}#pma_console .query_input::before{right:-0.7em;position:absolute;content:">";top:-2px}#pma_console .query_input textarea{width:100%;height:4em;resize:vertical}#pma_console .message:hover::before{color:#7cf;font-weight:bold}#pma_console .message.expanded::before{content:"]"}#pma_console .message.welcome::before{display:none}#pma_console .message.failed::before,#pma_console .message.failed.expanded::before,#pma_console .message.failed:hover::before{content:"=";color:#944}#pma_console .message.pending::before{opacity:.3}#pma_console .message.collapsed>.query{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#pma_console .message.expanded>.query{display:block;white-space:pre;word-wrap:break-word}#pma_console .message .text.targetdb,#pma_console .message.collapsed .action.collapse,#pma_console .message.expanded .action.expand{display:none}#pma_console .message .action.requery,#pma_console .message .action.profiling,#pma_console .message .action.explain,#pma_console .message .action.bookmark{display:none}#pma_console .message.select .action.profiling,#pma_console .message.select .action.explain{display:inline-block}#pma_console .message.history .text.targetdb,#pma_console .message.successed .text.targetdb{display:inline-block}#pma_console .message.history .action.requery,#pma_console .message.history .action.bookmark{display:inline-block}#pma_console .message.bookmark .action.requery,#pma_console .message.bookmark .action.bookmark{display:inline-block}#pma_console .message.successed .action.requery,#pma_console .message.successed .action.bookmark{display:inline-block}#pma_console .message .action_content{position:absolute;bottom:100%;background:#ccc;border:solid 1px #aaa;border-top-right-radius:3px}#pma_console .message.bookmark .text.targetdb,#pma_console .message .text.query_time{margin:0;display:inline-block}#pma_console .message.failed .text.query_time,#pma_console .message .text.failed{display:none}#pma_console .message.failed .text.failed{display:inline-block}#pma_console .message .text{background:#fff}#pma_console .message.collapsed>.action_content{display:none}#pma_console .message.collapsed:hover>.action_content{display:block}#pma_console .message .bookmark_label{padding:0 4px;top:0;background:#369;color:#fff;border-radius:3px}#pma_console .message .bookmark_label.shared{background:#396}#pma_console .message.expanded .bookmark_label{border-top-right-radius:0;border-top-left-radius:0}#pma_console .query_input{position:relative}#pma_console .mid_layer{height:100%;width:100%;position:absolute;top:0;background:#666;display:none;cursor:pointer;z-index:200}#pma_console .card{position:absolute;width:94%;height:100%;min-height:48px;right:100%;top:0;border-right:solid 1px #999;z-index:300;transition:right .2s}#pma_console .card.show{right:6%;box-shadow:2px 1px 4px -1px #999}#pma_bookmarks .content.add_bookmark,#pma_console_options .content{padding:4px 6px}#pma_bookmarks .content.add_bookmark .options{margin-right:1.4em;padding-bottom:.4em;margin-bottom:.4em;border-bottom:solid 1px #ccc}#pma_bookmarks .content.add_bookmark .options button{margin:0 7px;vertical-align:bottom}#pma_bookmarks .content.add_bookmark input[type=text]{margin:0;padding:2px 4px}#pma_console .button.hide,#pma_console .message span.text.hide{display:none}#debug_console.grouped .ungroup_queries{display:inline-block}#debug_console.ungrouped .group_queries{display:inline-block}#debug_console.ungrouped .ungroup_queries,#debug_console.ungrouped .sort_count{display:none}#debug_console.grouped .group_queries{display:none}#debug_console .count{margin-left:8px}#debug_console .show_trace .trace,#debug_console .show_args .args{display:block}#debug_console .hide_trace .trace,#debug_console .hide_args .args,#debug_console .show_trace .action.dbg_show_trace,#debug_console .hide_trace .action.dbg_hide_trace{display:none}#debug_console .traceStep.hide_args .action.dbg_hide_args,#debug_console .traceStep.show_args .action.dbg_show_args{display:none}#debug_console .traceStep::after{content:"";display:table;clear:both}#debug_console .trace.welcome::after,#debug_console .debug>.welcome::after{content:"";display:table;clear:both}#debug_console .debug_summary{float:right}#debug_console .trace.welcome .time,#debug_console .traceStep .file,#debug_console .script_name{float:left}#debug_console .traceStep .args pre{margin:0}.cm-s-pma .CodeMirror-code{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-code pre{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-measure>pre,.cm-s-pma .CodeMirror-code>pre,.cm-s-pma .CodeMirror-lines{padding:0}.cm-s-pma.CodeMirror{resize:none;height:auto;width:100%;min-height:initial;max-height:initial}.cm-s-pma .CodeMirror-scroll{cursor:text}.pma_drop_handler{display:none;position:fixed;top:0;right:0;width:100%;background:rgba(0,0,0,.6);height:100%;z-index:999;color:#fff;font-size:30pt;text-align:center;padding-top:20%}.pma_sql_import_status{display:none;position:fixed;bottom:0;left:25px;width:400px;border:1px solid #999;background:#f3f3f3;border-radius:4px;box-shadow:-2px 2px 5px #ccc}.pma_sql_import_status h2,.pma_sql_import_status .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:-1px 1px 15px #999 inset}.pma_drop_result h2,.pma_drop_result .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:-1px 1px 15px #999 inset}.pma_sql_import_status div{height:270px;overflow-y:auto;overflow-x:hidden;list-style-type:none}.pma_sql_import_status div li{padding:8px 10px;border-bottom:1px solid #bbb;color:#940e0e;background:#fff}.pma_sql_import_status div li .filesize{float:left}.pma_sql_import_status h2 .minimize,.pma_sql_import_status .h2 .minimize{float:left;margin-left:5px;padding:0 10px}.pma_sql_import_status h2 .close,.pma_sql_import_status .h2 .close{float:left;margin-left:5px;padding:0 10px;display:none}.pma_sql_import_status h2 .minimize:hover,.pma_sql_import_status .h2 .minimize:hover,.pma_sql_import_status h2 .close:hover,.pma_sql_import_status .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_result h2 .close:hover,.pma_drop_result .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_file_status{color:#235a81}.pma_drop_file_status span.underline:hover{cursor:pointer;text-decoration:underline}.pma_drop_result{position:fixed;top:10%;right:20%;width:60%;background:#fff;min-height:300px;z-index:800;box-shadow:0 0 15px #999;border-radius:10px;cursor:move}.pma_drop_result h2 .close,.pma_drop_result .h2 .close{float:left;margin-left:5px;padding:0 10px}#composite_index_list{list-style-type:none;list-style-position:inside}span.drag_icon{display:inline-block;background-image:url("../img/s_sortable.png");background-position:center center;background-repeat:no-repeat;width:1em;height:3em;cursor:move}.topmargin{margin-top:1em}body .ui-dialog .ui-dialog-titlebar-close{left:.3em;right:initial}body .ui-dialog .ui-dialog-title{float:right}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}body .ui-corner-all,body .ui-corner-top,body .ui-corner-left,body .ui-corner-tl{border-top-right-radius:0}body .ui-corner-all,body .ui-corner-top,body .ui-corner-right,body .ui-corner-tr{border-top-left-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-left,body .ui-corner-bl{border-bottom-right-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-right,body .ui-corner-br{border-bottom-left-radius:0}body .ui-dialog{padding:0;border-color:#000}body .ui-dialog .ui-dialog-titlebar{padding:.3em .5em;border:none;border-bottom:1px solid #000}body .ui-dialog .ui-dialog-titlebar button{border:1px solid #999}body .ui-dialog .ui-dialog-content{padding:.2em .4em}body .ui-dialog .ui-dialog-buttonpane{background:#d3dce3;border-top:1px solid #000}body .ui-dialog .ui-dialog-buttonpane button{margin:.1em .4em .1em 0;border:1px solid #999;color:#000}body .ui-dialog .ui-button-text-only .ui-button-text{padding:.2em .6em}.multi_table_query_form .query-form__tr--hide{display:none}.multi_table_query_form .query-form__fieldset--inline,.multi_table_query_form .query-form__select--inline{display:inline}.multi_table_query_form .query-form__tr--bg-none{background:none}.multi_table_query_form .query-form__input--wide{width:91%}.multi_table_query_form .query-form__multi-sql-query{float:right}#name-panel{overflow:hidden}@media only screen and (max-width: 768px){.responsivetable{overflow-x:auto}body#loginform div.container{width:100%}.largescreenonly{display:none}.width96{width:96% !important}#page_nav_icons{display:none}#table_name_col_no{top:62px}.tdblock tr td{display:block}#table_columns{margin-top:60px}#table_columns .tablesorter{min-width:100%}.doubleFieldset .pma-fieldset{width:98%}div#serverstatusquerieschart{width:100%;height:450px}.ui-dialog{margin:1%;width:95% !important}#server-breadcrumb .item{margin:4px}}#tooltip_editor{font-size:12px;background-color:#fff;opacity:.95;filter:alpha(opacity=95);padding:5px}#tooltip_font{font-weight:bold}#selection_box{z-index:1000;height:205px;position:absolute;background-color:skyblue;opacity:.4;filter:alpha(opacity=40);pointer-events:none}#filterQueryText{vertical-align:baseline}.ui_tpicker_hour_slider,.ui_tpicker_minute_slider,.ui_tpicker_second_slider,.ui_tpicker_millisec_slider,.ui_tpicker_microsec_slider{margin-right:20px;margin-top:4px;height:.75rem}.ui_tpicker_time_input{width:100%}.pre-scrollable{max-height:340px;overflow-y:scroll}@media(min-width: 1200px){div.tools{text-align:right}.pma-fieldset.tblFooters,.tblFooters{text-align:right}}.resize-vertical{resize:vertical}p.enum_notice{margin:5px 2px;font-size:80%}#enum_editor p{margin-top:0;font-style:italic}#enum_editor .values{width:100%}#enum_editor .add{width:100%}#enum_editor .add td{vertical-align:middle;width:50%;padding:0 0 0;padding-right:1em}#enum_editor .values td.drop{width:1.8em;cursor:pointer;vertical-align:middle}#enum_editor .values input{margin:.1em 0;padding-left:2em;width:100%}#enum_editor .values img{vertical-align:middle}#enum_editor input.add_value{margin:0;margin-left:.4em}#enum_editor_output textarea{width:100%;float:left;margin:1em 0 0 0}.enum_hint{position:relative}.enum_hint a{position:absolute;right:81%;bottom:.35em}a.close_gis_editor{float:left}#gis_editor{display:none;position:fixed;z-index:1001;overflow-y:auto;overflow-x:hidden}#gis_data{min-height:230px}#gis_data_textarea{height:6em}#gis_data_editor{background:#d0dce0;padding:15px;min-height:500px}#gis_data_editor .choice{display:none}#gis_data_editor input[type=text]{width:75px}#pma_navigation_content{width:100%;height:100%;position:absolute;top:0;right:0;z-index:0;padding-bottom:1em}#pma_navigation{background:#d0dce0;color:#000;width:240px;overflow:hidden;position:fixed;top:0;right:0;height:100vh;border-left:1px solid gray;z-index:800}#pma_navigation ul{margin:0}#pma_navigation form{margin:0;padding:0;display:inline}#pma_navigation select#select_server,#pma_navigation select#lightm_db{width:100%}#pma_navigation div.pageselector{text-align:center;margin:0 0 0;margin-right:.75em;border-right:1px solid #666}#pma_navigation div#pmalogo{background-color:#d0dce0;padding:.3em}#pma_navigation div#recentTableList,#pma_navigation div#FavoriteTableList{text-align:center;margin-bottom:.5em}#pma_navigation #recentTable,#pma_navigation #FavoriteTable{width:200px}#pma_navigation #pmalogo,#pma_navigation #serverChoice,#pma_navigation #navipanellinks,#pma_navigation #recentTableList,#pma_navigation #FavoriteTableList,#pma_navigation #databaseList,#pma_navigation div.pageselector.dbselector{text-align:center;margin-bottom:.3em;padding-bottom:.3em;border:0}#pma_navigation #navipanellinks .icon{margin:0}#pma_navigation #recentTableList select,#pma_navigation #FavoriteTableList select,#pma_navigation #serverChoice select{width:80%}#pma_navigation #recentTableList,#pma_navigation #FavoriteTableList{margin-bottom:0;padding-bottom:0}#pma_navigation_content>img.throbber{display:block;margin:0 auto}#pma_navigation_tree{margin:0;margin-right:1em;color:#444;height:74%;position:relative}#pma_navigation_select_database{text-align:right;padding:0 0 0;border:0;margin:0}#pma_navigation_db_select{margin-top:.5em;margin-right:.75em}#pma_navigation_db_select select{background:linear-gradient(#fff, #f1f1f1, #fff);border-radius:2px;border:1px solid #bbb;border-top:1px solid #bbb;color:#333;padding:4px 6px;margin:0 0 0;width:92%;font-size:1.11em}#pma_navigation_tree_content{width:100%;overflow:hidden;overflow-y:auto;position:absolute;height:100%}#pma_navigation_tree_content a.hover_show_full{position:relative;z-index:100;vertical-align:sub}#pma_navigation_tree_content li.nav_node_table{background-color:rgba(0,0,0,0)}#pma_navigation_tree a{color:#000;padding-right:0}#pma_navigation_tree a:hover{text-decoration:underline}#pma_navigation_tree li{margin-bottom:0}#pma_navigation_tree li.activePointer,#pma_navigation_tree li.selected{color:#000;background-color:#99c}#pma_navigation_tree li .dbItemControls{padding-left:4px;float:left}#pma_navigation_tree li .navItemControls{display:none;padding-left:4px;float:left}#pma_navigation_tree li.activePointer .navItemControls{display:block;opacity:.5}#pma_navigation_tree li.activePointer .navItemControls:hover{opacity:1}#pma_navigation_tree ul{clear:both;padding:0;list-style-type:none;margin:0}#pma_navigation_tree ul ul{position:relative}#pma_navigation_tree li{white-space:nowrap;clear:both;min-height:16px}#pma_navigation_tree img{margin:0}#pma_navigation_tree i{display:block}#pma_navigation_tree div.block{position:relative;width:1.5em;height:1.5em;min-width:16px;min-height:16px;float:right}#pma_navigation_tree div.block.double{width:3em}#pma_navigation_tree div.block i,#pma_navigation_tree div.block b{width:1.5em;height:1.7em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;right:.75em;z-index:0}#pma_navigation_tree div.block i{border-right:1px solid #666;border-bottom:1px solid #666;position:relative;z-index:0}#pma_navigation_tree div.block i.first{border-right:0}#pma_navigation_tree div.block b{display:block;height:.75em;bottom:0;right:.75em;border-right:1px solid #666}#pma_navigation_tree div.block a,#pma_navigation_tree div.block u{position:absolute;right:50%;top:50%;z-index:10}#pma_navigation_tree div.block a+a{right:100%}#pma_navigation_tree div.block.double a,#pma_navigation_tree div.block.double u{right:25%}#pma_navigation_tree div.block.double a+a{right:70%}#pma_navigation_tree div.block img{position:relative;top:-0.6em;right:0;margin-right:-5px}#pma_navigation_tree li.last>ul{background:none}#pma_navigation_tree li>a,#pma_navigation_tree li>i{line-height:1.5em;height:1.5em;padding-right:.3em}#pma_navigation_tree .list_container{border-right:1px solid #666;margin-right:.75em;padding-right:.75em}#pma_navigation_tree .list_container li.last.database{margin-bottom:0 !important}#pma_navigation_tree .last>.list_container{border-right:0 solid #666}li.fast_filter{padding-right:.75em;margin-right:.75em;padding-left:35px;border-right:1px solid #666}li.fast_filter input{font-size:.7em}li.fast_filter .searchClauseClear{border:0;font-weight:bold;color:#800;font-size:.7em}li.fast_filter.db_fast_filter{border:0;margin-right:0}#pma_navigation_resizer{width:3px;height:100%;background-color:#aaa;cursor:col-resize;position:fixed;top:0;right:240px;z-index:801}#pma_navigation_collapser{width:20px;height:22px;line-height:22px;background:#eee;color:#555;font-weight:bold;position:fixed;top:0;right:240px;text-align:center;cursor:pointer;z-index:800;text-shadow:0 1px 0 #fff;filter:dropshadow(color=#fff, offx=0, offy=1);border:1px solid #888}#navigation_controls_outer{min-height:21px !important}#navigation_controls_outer.activePointer{background-color:rgba(0,0,0,0) !important}#navigation_controls{float:left;padding-left:23px}.pma_quick_warp{margin-top:5px;margin-right:2px;position:relative}.pma_quick_warp .drop_list{float:right;margin-right:3px;padding:2px 0}.pma_quick_warp .drop_button{padding:0 .3em;border:1px solid #ddd;background:#f2f2f2;cursor:pointer}.pma_quick_warp .drop_list:hover .drop_button{background:#fff}.pma_quick_warp .drop_list ul{position:absolute;margin:0;padding:0;overflow:hidden;overflow-y:auto;list-style:none;background:#fff;border:1px solid #ddd;border-top-left-radius:0;border-bottom-left-radius:0;top:100%;right:3px;left:0;display:none;z-index:802}.pma_quick_warp .drop_list:hover ul{display:block}.pma_quick_warp .drop_list li{white-space:nowrap}.pma_quick_warp .drop_list li img{vertical-align:sub}.pma_quick_warp .drop_list li:hover{background:#f2f2f2}.pma_quick_warp .drop_list a{display:block;padding:.1em .3em}.pma_quick_warp .drop_list a.favorite_table_anchor{clear:right;float:right;padding:.1em .3em 0}.input_tab{background-color:#a6c7e1;color:#000}.content_fullscreen{position:relative;overflow:auto}#canvas_outer{position:relative;width:100%;display:block}#canvas{background-color:#fff;color:#000}canvas.designer{display:inline-block;overflow:hidden;text-align:right}canvas.designer *{behavior:url(#default#VML)}.designer_tab{background-color:#fff;color:#000;border-collapse:collapse;border:1px solid #aaa;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.designer_tab .header{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.tab_zag{text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_zag_2{background:linear-gradient(#fffa96 0%, #fffa96 39%, #ffe796 40%, #ffe796 100%);background-repeat:repeat-x;text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_field{background:#fff;color:#000;cursor:default}.tab_field:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}.tab_field_3{background-color:#ffe6e6 !important;color:#000;cursor:default}.tab_field_3:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}#designer_hint{white-space:nowrap;position:absolute;background-color:#9f9;color:#000;z-index:3;border:#0c6 solid 1px;display:none}#designer_body #page_content{margin:0}.scroll_tab{overflow:auto;width:100%;height:500px}.designer_Tabs{cursor:default;color:#05b;white-space:nowrap;text-decoration:none;text-indent:3px;font-weight:bold;margin-right:2px;text-align:right;background:linear-gradient(#fff, #dfe5e7 70%, #fff 70%, #fff 100%);border:#ccc solid 1px}.designer_Tabs:hover{cursor:default;color:#05b;background:#fe9;text-indent:3px;font-weight:bold;white-space:nowrap;text-decoration:none;border:#99f solid 1px;text-align:right}.owner{font-weight:normal;color:#888}.option_tab{padding-right:2px;padding-left:2px;width:5px}.select_all{vertical-align:top;padding-right:2px;padding-left:2px;cursor:default;width:1px;color:#000;background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.small_tab{vertical-align:top;background-color:#0064ea;color:#fff;background-image:url("../img/designer/small_tab.png");cursor:default;text-align:center;font-weight:bold;padding-right:2px;padding-left:2px;width:1px;text-decoration:none}.small_tab:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;padding-right:2px;padding-left:2px;text-align:center;font-weight:bold;width:1px;text-decoration:none}.small_tab_pref{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%);text-align:center;width:1px}.small_tab_pref:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;text-align:center;font-weight:bold;width:1px;text-decoration:none}.butt{border:#47a solid 1px;font-weight:bold;background-color:#fff;color:#000;vertical-align:baseline}.L_butt2_1{padding:1px;text-decoration:none;vertical-align:middle;cursor:default}.L_butt2_1:hover{padding:0;border:#09c solid 1px;background:#fe9;color:#000;text-decoration:none;vertical-align:middle;cursor:default}.bor{width:10px;height:10px}.frams1{background:url("../img/designer/1.png") no-repeat left bottom}.frams2{background:url("../img/designer/2.png") no-repeat right bottom}.frams3{background:url("../img/designer/3.png") no-repeat right top}.frams4{background:url("../img/designer/4.png") no-repeat left top}.frams5{background:url("../img/designer/5.png") repeat-x center bottom}.frams6{background:url("../img/designer/6.png") repeat-y right}.frams7{background:url("../img/designer/7.png") repeat-x top}.frams8{background:url("../img/designer/8.png") repeat-y left}#osn_tab{position:absolute;background-color:#fff;color:#000}.designer_header{background-color:#eaeef0;color:#000;text-align:center;font-weight:bold;margin:0;padding:0;background-image:url("../img/designer/top_panel.png");background-position:top;background-repeat:repeat-x;border-left:#999 solid 1px;border-right:#999 solid 1px;height:28px;z-index:101;width:100%;position:fixed}.designer_header a,.designer_header span{display:block;float:right;margin:3px 1px 4px;height:20px;border:1px dotted #fff}.designer_header .M_bord{display:block;float:right;margin:4px;height:20px;width:2px}.designer_header a.first{margin-left:1em}.designer_header a.last{margin-right:1em}a.M_butt_Selected_down_IE,a.M_butt_Selected_down{border:1px solid #c0c0bb;background-color:#9f9;color:#000}a.M_butt_Selected_down_IE:hover,a.M_butt_Selected_down:hover{border:1px solid #09c;background-color:#fe9;color:#000}a.M_butt:hover{border:1px solid #09c;background-color:#fe9;color:#000}#layer_menu{z-index:98;position:relative;float:left;background-color:#eaeef0;border:#999 solid 1px}#layer_upd_relation{position:absolute;right:637px;top:224px;z-index:100}#layer_new_relation,#designer_optionse{position:absolute;right:636px;top:85px;z-index:100;width:153px}#layer_menu_sizer{background-image:url("../img/designer/resize.png");cursor:ew-resize}#layer_menu_sizer .icon{margin:0}.panel{position:fixed;top:60px;left:0;width:350px;max-height:500px;display:none;overflow:auto;padding-top:34px;z-index:102}a.trigger{position:fixed;text-decoration:none;top:60px;left:0;color:#fff;padding:10px 15px 10px 40px;background:#333 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #444;display:block;z-index:102}a.trigger:hover{color:#080808;background:#fff696 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #999}a.active.trigger{background:#222 url("../img/designer/minus.png") 15% 55% no-repeat;z-index:999}a.active.trigger:hover{background:#fff696 url("../img/designer/minus.png") 15% 55% no-repeat}.toggle_container .block{background-color:#dbe4e8;border-top:1px solid #999}.history_table{text-align:center;cursor:pointer;background-color:#dbe4e8}.history_table:hover{background-color:#99c}#ab{min-width:300px}#ab .ui-accordion-content{padding:0}#foreignkeychk{text-align:right;cursor:pointer}.side-menu{float:right;position:fixed;width:auto;height:auto;background:#efefef;border:1px solid gray;overflow:hidden;z-index:50;padding:2px}.side-menu.right{float:left;left:0}.side-menu .hide{display:none}.side-menu a{display:block;float:none;overflow:hidden;line-height:1em}.side-menu img,.side-menu .text{float:right}#name-panel{border-bottom:1px solid gray;text-align:center;background:#efefef;width:100%;font-size:1.2em;padding:5px;font-weight:bold}#container-form{width:100%;position:absolute;right:0}.CodeMirror{height:20rem;direction:rtl}#inline_editor_outer .CodeMirror{height:6em}.insertRowTable .CodeMirror{min-height:9em;min-width:24em;border:1px solid #a9a9a9}#pma_console .CodeMirror-gutters{background-color:initial;border:none}span.cm-keyword,span.cm-statement-verb{color:#909}span.cm-variable{color:#000}span.cm-comment{color:olive}span.cm-mysql-string{color:green}span.cm-operator{color:#f0f}span.cm-mysql-word{color:#000}span.cm-builtin{color:red}span.cm-variable-2{color:#f90}span.cm-variable-3{color:blue}span.cm-separator{color:#f0f}span.cm-number{color:teal}.autocomplete-column-name{display:inline-block}.autocomplete-column-hint{display:inline-block;float:left;color:#666;margin-right:1em}.CodeMirror-hints{z-index:1999}.CodeMirror-lint-tooltip{z-index:200;font-family:inherit}.CodeMirror-lint-tooltip code{font-family:monospace;font-weight:bold}.jqplot-target{position:relative;color:#222;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-left:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-right:10px;margin-left:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;right:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;right:15px;vertical-align:bottom}.jqplot-yaxis-tick{left:0;top:15px;text-align:left}.jqplot-yaxis-tick.jqplot-breakTick{left:-20px;margin-left:0;padding:1px 5px 1px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{right:0;top:15px;text-align:right}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-left:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-right:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-right:12px;margin-left:12px;background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}table.jqplot-cursor-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-right-width:6px;border-left-width:6px;border-top-style:solid;border-bottom-style:solid;border-right-style:solid;border-left-style:solid}.jqplot-title{top:0;right:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:1em;white-space:nowrap;background:rgba(208,208,208,.8);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-right:2px;padding-left:2px;color:#333}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(230,230,230,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(245,245,245,.3)}.icon{margin:0;margin-right:.3em;padding:0 !important;width:16px;height:16px}.icon_fulltext{width:50px;height:19px}.ic_asc_order{background-image:url("../../pmahomme/img/asc_order.png")}.ic_b_bookmark{background-image:url("../img/b_bookmark.png")}.ic_b_browse{background-image:url("../img/b_browse.png")}.ic_b_calendar{background-image:url("../img/b_calendar.png")}.ic_b_chart{background-image:url("../img/b_chart.png")}.ic_b_close{background-image:url("../img/b_close.png")}.ic_b_column_add{background-image:url("../img/b_column_add.png")}.ic_b_comment{background-image:url("../img/b_comment.png")}.ic_b_dbstatistics{background-image:url("../img/b_dbstatistics.png")}.ic_b_deltbl{background-image:url("../img/b_deltbl.png")}.ic_b_docs{background-image:url("../img/b_docs.png")}.ic_b_docsql{background-image:url("../../pmahomme/img/b_docsql.png")}.ic_b_drop{background-image:url("../img/b_drop.png")}.ic_b_edit{background-image:url("../img/b_edit.png")}.ic_b_empty{background-image:url("../img/b_empty.png")}.ic_b_engine{background-image:url("../img/b_engine.png")}.ic_b_event_add{background-image:url("../img/b_event_add.png")}.ic_b_events{background-image:url("../img/b_events.png")}.ic_b_export{background-image:url("../img/b_export.png")}.ic_b_favorite{background-image:url("../img/b_favorite.png")}.ic_b_find_replace{background-image:url("../img/b_find_replace.png")}.ic_b_firstpage{background-image:url("../../pmahomme/img/b_firstpage.png")}.ic_b_ftext{background-image:url("../img/b_ftext.png")}.ic_b_globe{background-image:url("../img/b_globe.gif")}.ic_b_group{background-image:url("../img/b_group.png")}.ic_b_help{background-image:url("../img/b_help.png")}.ic_b_home{background-image:url("../img/b_home.png")}.ic_b_import{background-image:url("../img/b_import.png")}.ic_b_index{background-image:url("../img/b_index.png")}.ic_b_index_add{background-image:url("../img/b_index_add.png")}.ic_b_inline_edit{background-image:url("../img/b_inline_edit.png")}.ic_b_insrow{background-image:url("../img/b_insrow.png")}.ic_b_lastpage{background-image:url("../../pmahomme/img/b_lastpage.png")}.ic_b_minus{background-image:url("../img/b_minus.png")}.ic_b_more{background-image:url("../img/b_more.png")}.ic_b_move{background-image:url("../img/b_move.png")}.ic_b_newdb{background-image:url("../img/b_newdb.png")}.ic_db_drop{background-image:url("../img/b_deltbl.png")}.ic_b_newtbl{background-image:url("../img/b_newtbl.png")}.ic_b_nextpage{background-image:url("../img/b_nextpage.png")}.ic_b_no_favorite{background-image:url("../img/b_no_favorite.png")}.ic_b_pdfdoc{background-image:url("../../pmahomme/img/b_pdfdoc.png")}.ic_b_plugin{background-image:url("../img/b_plugin.png")}.ic_b_plus{background-image:url("../img/b_plus.png")}.ic_b_prevpage{background-image:url("../../pmahomme/img/b_prevpage.png")}.ic_b_primary{background-image:url("../img/b_primary.png")}.ic_b_print{background-image:url("../img/b_print.png")}.ic_b_props{background-image:url("../img/b_props.png")}.ic_b_relations{background-image:url("../img/b_relations.png")}.ic_b_report{background-image:url("../img/b_report.png")}.ic_b_rename{background-image:url("../img/b_rename.svg")}.ic_b_routine_add{background-image:url("../img/b_routine_add.png")}.ic_b_routines{background-image:url("../img/b_routines.png")}.ic_b_save{background-image:url("../img/b_save.png")}.ic_b_saveimage{background-image:url("../img/b_saveimage.png")}.ic_b_sbrowse{background-image:url("../img/b_sbrowse.png")}.ic_b_sdb{background-image:url("../../pmahomme/img/b_sdb.png");width:10px;height:10px}.ic_b_search{background-image:url("../img/b_search.png")}.ic_b_select{background-image:url("../img/b_select.png")}.ic_b_snewtbl{background-image:url("../img/b_snewtbl.png")}.ic_b_spatial{background-image:url("../img/b_spatial.png")}.ic_b_sql{background-image:url("../img/b_sql.png")}.ic_b_sqldoc{background-image:url("../../pmahomme/img/b_sqldoc.png")}.ic_b_sqlhelp{background-image:url("../img/b_sqlhelp.png")}.ic_b_table_add{background-image:url("../img/b_table_add.png")}.ic_b_tblanalyse{background-image:url("../img/b_tblanalyse.png")}.ic_b_tblexport{background-image:url("../img/b_tblexport.png")}.ic_b_tblimport{background-image:url("../img/b_tblimport.png")}.ic_b_tblops{background-image:url("../img/b_tblops.png")}.ic_b_tbloptimize{background-image:url("../img/b_tbloptimize.png")}.ic_b_tipp{background-image:url("../img/b_tipp.png")}.ic_b_trigger_add{background-image:url("../img/b_trigger_add.png")}.ic_b_triggers{background-image:url("../img/b_triggers.png")}.ic_b_undo{background-image:url("../img/b_undo.png")}.ic_b_unique{background-image:url("../img/b_unique.png")}.ic_b_usradd{background-image:url("../img/b_usradd.png")}.ic_b_usrcheck{background-image:url("../img/b_usrcheck.png")}.ic_b_usrdrop{background-image:url("../img/b_usrdrop.png")}.ic_b_usredit{background-image:url("../img/b_usredit.png")}.ic_b_usrlist{background-image:url("../img/b_usrlist.png")}.ic_b_versions{background-image:url("../img/b_versions.png")}.ic_b_view{background-image:url("../img/b_view.png")}.ic_b_view_add{background-image:url("../img/b_view_add.png")}.ic_b_views{background-image:url("../img/b_views.png")}.ic_b_left{background-image:url("../img/b_left.png")}.ic_b_right{background-image:url("../img/b_right.png")}.ic_bd_browse{background-image:url("../img/bd_browse.png")}.ic_bd_deltbl{background-image:url("../img/bd_deltbl.png")}.ic_bd_drop{background-image:url("../img/bd_drop.png")}.ic_bd_edit{background-image:url("../img/bd_edit.png")}.ic_bd_empty{background-image:url("../img/bd_empty.png")}.ic_bd_export{background-image:url("../img/bd_export.png")}.ic_bd_firstpage{background-image:url("../../pmahomme/img/bd_firstpage.png")}.ic_bd_ftext{background-image:url("../img/bd_ftext.png")}.ic_bd_index{background-image:url("../img/bd_index.png")}.ic_bd_insrow{background-image:url("../img/bd_insrow.png")}.ic_bd_lastpage{background-image:url("../../pmahomme/img/bd_lastpage.png")}.ic_bd_nextpage{background-image:url("../img/bd_nextpage.png")}.ic_bd_prevpage{background-image:url("../../pmahomme/img/bd_prevpage.png")}.ic_bd_primary{background-image:url("../img/bd_primary.png")}.ic_bd_routine_add{background-image:url("../img/bd_routine_add.png")}.ic_bd_sbrowse{background-image:url("../img/bd_sbrowse.png")}.ic_bd_select{background-image:url("../img/bd_select.png")}.ic_bd_spatial{background-image:url("../img/bd_spatial.png")}.ic_bd_unique{background-image:url("../img/bd_unique.png")}.ic_centralColumns{background-image:url("../img/centralColumns.png")}.ic_centralColumns_add{background-image:url("../img/centralColumns_add.png")}.ic_centralColumns_delete{background-image:url("../img/centralColumns_delete.png")}.ic_col_drop{background-image:url("../img/col_drop.png")}.ic_console{background-image:url("../img/console.png")}.ic_database{background-image:url("../../pmahomme/img/database.png")}.ic_eye{background-image:url("../img/eye.png")}.ic_eye_grey{background-image:url("../img/eye_grey.png")}.ic_hide{background-image:url("../img/hide.png")}.ic_item{background-image:url("../../pmahomme/img/item.png");width:9px;height:9px}.ic_lightbulb{background-image:url("../img/lightbulb.png")}.ic_lightbulb_off{background-image:url("../img/lightbulb_off.png")}.ic_more{background-image:url("../img/more.png");width:13px}.ic_new_data{background-image:url("../img/new_data.png")}.ic_new_data_hovered{background-image:url("../img/new_data_hovered.png")}.ic_new_data_selected{background-image:url("../img/new_data_selected.png")}.ic_new_data_selected_hovered{background-image:url("../img/new_data_selected_hovered.png")}.ic_new_struct{background-image:url("../img/new_struct.png")}.ic_new_struct_hovered{background-image:url("../img/new_struct_hovered.png")}.ic_new_struct_selected{background-image:url("../img/new_struct_selected.png")}.ic_new_struct_selected_hovered{background-image:url("../img/new_struct_selected_hovered.png")}.ic_normalize{background-image:url("../img/normalize.png")}.ic_pause{background-image:url("../img/pause.png")}.ic_php_sym{background-image:url("../../pmahomme/img/php_sym.png")}.ic_play{background-image:url("../img/play.png")}.ic_s_asc{background-image:url("../img/s_asc.png")}.ic_s_asci{background-image:url("../img/s_asci.png")}.ic_s_attention{background-image:url("../img/s_attention.png")}.ic_s_cancel{background-image:url("../img/s_cancel.png")}.ic_s_cancel2{background-image:url("../../pmahomme/img/s_cancel2.png")}.ic_s_cog{background-image:url("../img/s_cog.png")}.ic_s_db{background-image:url("../img/s_db.png")}.ic_s_desc{background-image:url("../img/s_desc.png")}.ic_s_error{background-image:url("../img/s_error.png")}.ic_s_host{background-image:url("../img/s_host.png")}.ic_s_info{background-image:url("../img/s_info.png")}.ic_s_lang{background-image:url("../img/s_lang.png")}.ic_s_link{background-image:url("../img/s_link.png")}.ic_s_lock{background-image:url("../img/s_lock.png")}.ic_s_unlock{background-image:url("../../pmahomme/img/lock_open.png")}.ic_s_loggoff{background-image:url("../img/s_loggoff.png")}.ic_s_notice{background-image:url("../img/s_notice.png")}.ic_s_okay{background-image:url("../img/s_okay.png")}.ic_s_passwd{background-image:url("../img/s_passwd.png")}.ic_s_process{background-image:url("../../pmahomme/img/s_process.png")}.ic_s_really{background-image:url("../img/s_really.png");width:11px;height:11px}.ic_s_reload{background-image:url("../img/s_reload.png")}.ic_s_replication{background-image:url("../img/s_replication.png")}.ic_s_rights{background-image:url("../img/s_rights.png")}.ic_s_sortable{background-image:url("../img/s_sortable.png")}.ic_s_status{background-image:url("../img/s_status.png")}.ic_s_success{background-image:url("../img/s_success.png")}.ic_s_sync{background-image:url("../img/s_sync.png")}.ic_s_tbl{background-image:url("../img/s_tbl.png")}.ic_s_theme{background-image:url("../img/s_theme.png")}.ic_s_top{background-image:url("../img/s_top.png")}.ic_s_unlink{background-image:url("../img/s_unlink.png")}.ic_s_vars{background-image:url("../img/s_vars.png")}.ic_s_views{background-image:url("../img/s_views.png")}.ic_show{background-image:url("../img/show.png")}.ic_window-new{background-image:url("../img/window-new.png")}.ic_ajax_clock_small{background-image:url("../img/ajax_clock_small.gif")}.ic_s_partialtext{background-image:url("../img/s_partialtext.png")}.ic_s_fulltext{background-image:url("../img/s_fulltext.png")}body{text-align:right}input,select{font-size:1em}textarea{font-family:monospace;font-size:1.2em}.table{border-collapse:separate}.table td{touch-action:manipulation;vertical-align:middle}.table thead th{border-bottom:0;background:#d3dce3}.table-striped tbody tr:nth-of-type(odd){background-color:#e5e5e5}.table-striped tbody tr:nth-of-type(even){background-color:#d5d5d5}.table-light{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #000;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #000;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #000;--bs-table-hover-bg: #cfc}@media only screen and (min-width: 768px){.table th.position-sticky{top:49px}}select#fieldsSelect,textarea#sqlquery{height:20rem}.nav-pills .nav-link{margin:.1em;padding:.2em;font-weight:bold;color:blue}.nav-pills .nav-link:hover{color:red;background-color:#e5e5e5;border-radius:.3em}.nav-pills .nav-link img{margin-left:.1em;vertical-align:middle}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:blue;background-color:#e5e5e5;border-radius:.3em}.nav-tabs{margin:1.1em .2em 0;font-weight:bold}.nav-tabs .nav-link{margin:.1em .2em 0;padding:.1em .4em;border-color:#d5d5d5 #d5d5d5 #f5f5f5}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{margin:0;padding:.1em .6em .2em}.nav-tabs .nav-link.active:hover,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-item.show .nav-link:hover,.nav-tabs .nav-item.show .nav-link:focus{color:red}.navbar-nav{font-weight:bold}.navbar-nav .icon{vertical-align:middle;margin-left:.1em}.navbar-nav .nav-item{border-bottom:1pt solid #000}.navbar-nav .nav-item.active .nav-link{margin:0;background-color:#f5f5f5;padding:2px 4px}.navbar-nav .nav-link{margin:2px 2px 0;padding:2px 2px 0;background-color:#e5e5e5;border-color:#d5d5d5;border-style:solid;border-width:1pt 1pt 0 1pt;border-radius:.4em .4em 0 0}.navbar-nav .nav-link:hover{margin:0;background-color:#f5f5f5;padding:2px 4px}.card{margin-top:2rem;margin-bottom:.5rem}.card>.card-header+.card-body{padding-top:0}.card-header{background:#e5e5e5;position:relative;top:-1rem;margin:0 5px;width:-webkit-max-content;width:-moz-max-content;width:max-content;border:1px solid #000;font-weight:bold;color:#444}#maincontainer .card-header{position:static;width:auto;margin:0;border:0}#maincontainer .card{background:none;border-top:none;border-bottom:none;border-left:none;border-right:.3em solid #d3dce3}#maincontainer .card>.card-header+.card-body{padding-top:1rem}#maincontainer .card-header{color:inherit;background-color:#d3dce3;padding-top:.1em;padding-bottom:.1em;font-weight:bold;font-size:120%}#maincontainer .card-body{padding:1rem;padding-bottom:0}.breadcrumb-navbar{padding:.1rem 2.2em;margin-bottom:0;background-color:#fff}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-right:.5rem}.breadcrumb-navbar .breadcrumb-item .icon{margin:0}.breadcrumb-navbar{font-weight:bold}.breadcrumb-navbar .breadcrumb-comment{color:#d6d6d6;font-weight:bold;font-style:italic;text-shadow:none}.alert{text-align:right;padding:.1em 40px .1em .1em}.alert h1,.alert .h1{border-bottom:2px solid}.alert-primary{color:#000;background-color:#ffd;background-image:none;border-color:gold}.alert-primary h1,.alert-primary .h1{border-color:gold}.alert-success{color:#000;background-color:#f0fff0;background-image:none;border-color:lime}.alert-success h1,.alert-success .h1{border-color:lime}.alert-danger{color:red;background-color:#ffc;background-image:none;border-color:red}.alert-danger h1,.alert-danger .h1{border-color:red}#maincontainer .list-group{padding-right:40px;margin:1rem 0 0}#maincontainer .list-group-item{display:list-item;border:none;padding:0}#li_select_server.list-group-item,#li_change_password.list-group-item,#li_select_mysql_collation.list-group-item,#li_user_preferences.list-group-item,#li_select_lang.list-group-item,#li_select_theme.list-group-item{display:block;margin-right:-20px}.modal-header{background-image:linear-gradient(#f8f8f8, #d8d8d8)}.modal-footer{background-color:#d3dce3}@media print{.hide{display:none}body,table,th,td{color:#000;background-color:#fff;font-size:12px}a:link{color:#000;text-decoration:none}img{border:0}table,th,td{border:.1em solid #000;background-color:#fff}table{border-collapse:collapse;border-spacing:.2em}thead{border-collapse:collapse;border-spacing:.2em;border:.1em solid #000;font-weight:900}th,td{padding:.2em}thead th{font-weight:bold;background-color:#e5e5e5;border:.1em solid #000}#page_content{position:absolute;right:0;top:0;width:95%;float:none}.sqlOuter{color:#000;background-color:#000}.cDrop,.cEdit,.cList,.cCpy,.cPointer{display:none}table tbody:first-of-type tr:nth-child(odd){background:#fff}table tbody:first-of-type tr:nth-child(odd) th{background:#fff}table tbody:first-of-type tr:nth-child(even){background:#dfdfdf}table tbody:first-of-type tr:nth-child(even) th{background:#dfdfdf}.column_attribute{font-size:100%}} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZW1lLmNzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcm9vdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yZWJvb3Quc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy92ZW5kb3IvX3Jmcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uL3Njc3MvX3ZhcmlhYmxlcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYm9yZGVyLXJhZGl1cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190eXBlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19saXN0cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jb250YWluZXJzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19jb250YWluZXIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdGFibGVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190YWJsZS12YXJpYW50cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19sYWJlbHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS10ZXh0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY29udHJvbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLXNlbGVjdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLWNoZWNrLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tcmFuZ2Uuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZmxvYXRpbmctbGFiZWxzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2lucHV0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19mb3Jtcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3RyYW5zaXRpb25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Ryb3Bkb3duLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2J1dHRvbi1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXYuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2NhcmQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYWNjb3JkaW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JyZWFkY3J1bWIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19iYWRnZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hbGVydC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYWxlcnQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jbG9zZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19tb2RhbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYmFja2Ryb3Auc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fc3Bpbm5lcnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2NsZWFyZml4LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fY29sb3JlZC1saW5rcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3JhdGlvLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fcG9zaXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19zdGFja3Muc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL192aXN1YWxseS1oaWRkZW4uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3N0cmV0Y2hlZC1saW5rLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdGV4dC10cnVuY2F0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190ZXh0LXRydW5jYXRlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdnIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3V0aWxpdGllcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fYXBpLnNjc3MiLCIuLi9zY3NzL19jb21tb24uc2NzcyIsIi4uLy4uL3BtYWhvbW1lL3Njc3MvX2VudW0tZWRpdG9yLnNjc3MiLCIuLi8uLi9wbWFob21tZS9zY3NzL19naXMuc2NzcyIsIi4uL3Njc3MvX25hdmlnYXRpb24uc2NzcyIsIi4uLy4uL3BtYWhvbW1lL3Njc3MvX2Rlc2lnbmVyLnNjc3MiLCIuLi8uLi9wbWFob21tZS9zY3NzL19jb2RlbWlycm9yLnNjc3MiLCIuLi8uLi9wbWFob21tZS9zY3NzL19qcXBsb3Quc2NzcyIsIi4uL3Njc3MvX2ljb25zLnNjc3MiLCIuLi9zY3NzL19yZWJvb3Quc2NzcyIsIi4uL3Njc3MvX3RhYmxlcy5zY3NzIiwiLi4vc2Nzcy9fZm9ybXMuc2NzcyIsIi4uL3Njc3MvX25hdi5zY3NzIiwiLi4vc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi9zY3NzL19jYXJkLnNjc3MiLCIuLi8uLi9ib290c3RyYXAvc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYWxlcnQuc2NzcyIsIi4uL3Njc3MvX2xpc3QtZ3JvdXAuc2NzcyIsIi4uL3Njc3MvX21vZGFsLnNjc3MiLCIuLi8uLi9wbWFob21tZS9zY3NzL19wcmludC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1DQUEsa0JBUUksQ0FBQSxvQkFBQSxDQUFBLG9CQUFBLENBQUEsa0JBQUEsQ0FBQSxpQkFBQSxDQUFBLG9CQUFBLENBQUEsb0JBQUEsQ0FBQSxtQkFBQSxDQUFBLGtCQUFBLENBQUEsa0JBQUEsQ0FBQSxnQkFBQSxDQUFBLGtCQUFBLENBQUEsdUJBQUEsQ0FBQSxzQkFJQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxxQkFJQSxDQUFBLHVCQUFBLENBQUEscUJBQUEsQ0FBQSxrQkFBQSxDQUFBLHFCQUFBLENBQUEsb0JBQUEsQ0FBQSxtQkFBQSxDQUFBLGtCQUFBLENBQUEsOEJBSUEsQ0FBQSxpQ0FBQSxDQUFBLDZCQUFBLENBQUEsMkJBQUEsQ0FBQSw2QkFBQSxDQUFBLDRCQUFBLENBQUEsNkJBQUEsQ0FBQSx5QkFBQSxDQUFBLDZCQUdGLENBQUEsdUJBQ0EsQ0FBQSw0QkFDQSxDQUFBLCtCQUNBLENBQUEscU5BTUEsQ0FBQSw4QkFDQSxDQUFBLHlGQUNBLENBQUEsaUNBUUEsQ0FBQSw0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T0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFNBUEosNkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFlBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSwwQkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFlBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFlBUEosMEJBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxZQVBKLDJCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsWUFQSiw2QkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFlBUEosNEJBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxTQVBKLDhCQU9JLENB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LENBQUEsYUFQSiw2QkFPSSxDQUFBLFVBUEoseUJBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosNEJBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSiw0QkFPSSxDQUFBLGFBUEosNEJBT0ksQ0FBQSxTQVBKLG9CQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxTQVBKLHVCQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxVQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxVQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxVQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxVQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLHdCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosNEJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosMkJBT0ksQ0FBQSxVQVBKLHlCQU9JLENBQUEsVUFQSiw4QkFPSSxDQUFBLFVBUEosNkJBT0ksQ0FBQSxVQVBKLDRCQU9JLENBQUEsVUFQSiw4QkFPSSxDQUFBLFVBUEosNEJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSixnQ0FPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSixnQ0FPSSxDQUFBLFVBUEosOEJBT0ksQ0FBQSxVQVBKLDBCQU9JLENBQUEsVUFQSiwrQkFPSSxDQUFBLFVBUEosOEJBT0ksQ0FBQSxVQVBKLDZCQU9J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 */ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/arrow_ltr.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/arrow_ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..cd79ab42f04a594dbf727e34795009f3e99fb62e GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2%@N{M0&tl#Zv1V@L&KvP94Wd(mDdM=eR# z<`9#vqR0OhJFjv(Fu^eA%7(zh9xctRJxmPTewN2A?=GnX>SOS9^>bP0l+XkKYlIuC literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_calendar.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_calendar.png new file mode 100644 index 0000000000000000000000000000000000000000..8dfe6287effd78b12fdbbeb7aab4e30e04a95946 GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar*{!CpNMjFc5J5?S0u_ z>gVze{=4dTalSfc_%>HcE>Ora*Llfrt-Y6Lv&_(6R3LI<4U+4Ia*G4t;sywtCq7$EgMH zZJO}Hya5l5YQS0-0A5=*!6>Q=j>)~aqFoKvx&T1Bc4#}S2ED-@ZYTw>mH_K`TBL`e~`3$kFTcp@J#FC$aT5HssaG%&x|VZ)2SY7Z>B5) zdp>^Sp6~(Drn`mi&!?5gtHM@2Z#Lt#vh4osL_2tI`p~mOEp4iY&Du06c)Au0ET9RVU-H@*S3R00000NkvXXu0mjfIOfNc literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_comment.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_comment.png new file mode 100644 index 0000000000000000000000000000000000000000..fa2ee9420af9d4751c5fd0068766b8aa3d6a68c1 GIT binary patch literal 298 zcmV+_0oDGAP)k^NNBWDxb1f=TL5Mzs z_V&e3pYJ|Iq(Ed>_#U6{J|dt3{pl{+Qc?piFm0kfbtfgVmX?hE>HUBI7O-5hurNt> zLOh<>7@!ABr8w9}gT0kYu`Qv zhowx(N_>zT1L|&1d`_^!&Fv^_8>K3e`QF{A`&%-na^$nXoD4}b+dBoH-9JXR$8zAa wz^HUcg*b1?w{l_NM2_UY0-}$>iHbx#13DV|@5c(B=>Px#07*qoM6N<$g54pB#sB~S literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_deltbl.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_deltbl.png new file mode 100644 index 0000000000000000000000000000000000000000..2144bce45e265017f78533eb84413b2e79a4be55 GIT binary patch literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!9W@a@|Lkr1X3NIE{-7; zjB_WlGah!}VLp12rRUkjDGh}!ZJZ)!--mzOV-}sB`ha`?@rI_>2M%%1|7QM@|5tnS zfrCkB17mw2a~SX4lm82Q4fYB>I?#UD`CUG1Xm0vTgR|b+jmh6^{iPpGZhQOYbNY>C zTb-Ue6ik!|m}6VLaEY(kW6$DkO!kpBiNBY6|C-d{ufl#jda~3WQ(KVRJYD@<);T3K F0RaBlQ8oYo literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_export.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_export.png new file mode 100644 index 0000000000000000000000000000000000000000..9a43efdfa3d0759b0c39a3cc4d4ea19a4088b187 GIT binary patch literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`iJmTwAr*{k`x&_!0(hLt|4Uaa zuV3CeLEzz`1pXGLue+mIEqwh#h5zjjjn~lGImtrDcA+l6_e)FL#SSIsWF5}WeKu!d ztlR&&VlLcseqLwFkBAV+h+}BjwBGX5&UqE@?8GGwZ0+ePUvm&>8H1;*pUXO@geCwe CX*Qz( literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_globe.gif b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_globe.gif new file mode 100644 index 0000000000000000000000000000000000000000..ef03dcf0615ea118c278e567875391afc867f3b6 GIT binary patch literal 1045 zcmZ?wbhEHb6krfw_|Cxa^4-smU;lmi^5y5xpI^Uz{ru(UvzMRVeE4<#%F{C!pTs4# z$yrSDEW7SieofkO(}81mzkU0b+Shcjc=6%UA53 zw&;j!;br&IYjZAqz4!X_v$ub0C-0H-KkV!~(W~Nm`?Os_^|!*BA3c2dBCz4XycNe) z!;U|A{CerW_YJFml~23j8a%t8ZuPNCuNGbV&+oF2*JUq*+%)6Flgb`j&fof&-21F^ z$Nz$^GnEszH?(f_DLB-#^2L@;u)0ZB;E|~sSG5Dx;_Jt#7?%a9s;^Wsp?VEp9&V0E2{@?ZMkFI*~H?r-~j~_p@ zqfc(!bmZ8BKX;#ga}AxHJ?-PCZ~wo4|Ni02&$6m%8#f-Vn|)i-=V0rWXG?GWPwRiJ zWzku&=udLb%baPSk6!-JKI_1hs}C*G&b@f|+dS=TcKhiwx4!K^_fE%m&WvOK_nm&h z>#}ds;s1t-XAI&Fa$U;%(C6>}pTGT)HRWSS?&@jlpBN?{d-C{YMCq1*iVMw? zcPKedFPm_qyn6b<<9B=J99nw#@9oE5nJss8Eq##LxTm3MedC({R>`}Q8jipI@N34& z|GM!fbmES-YDhjyp_oS%L zmN=wv&7euN=fQt}iHMeH5sQb7Ypl;#+SwZ(TUmXsvMKFd;>Z140~&5hB)17X3;e;T zJh9<-;ErotcT8_f|45u0>(u<%z`kkfg$G(Zd&`w?MkyS4)#{qv8>?&}B(1kpC&)`D zx{>#H(+sh2rqDX!5AV2tI5yp8v+0Um@N;*=L*D&?y4#r;nC^Bxd6xR-FVK+;p00i_ I>zopr0Mn3BfdBvi literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_index_add.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_index_add.png new file mode 100644 index 0000000000000000000000000000000000000000..78b1216a3338dd08ad3d7ec59f0c47162d326918 GIT binary patch literal 313 zcmV-90mlA`P)WKoUyEP%|dw*=sO8R4j4WvWMsai|9W81Q7HE*&NI{IOPc&o%#m2_IXW;b00000 LNkvXXu0mjfLl%pW literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_insrow.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_insrow.png new file mode 100644 index 0000000000000000000000000000000000000000..ce32a0a1ead65008a802fd7cdc2fadcec949f2a2 GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!9W@a@|Lkr1X4ksE{-7; zjB_Wk3Laq)U_O7jy6aZPFQa_TyC)wQUJ4HBC>p8{hEGbhx1% z&Xk|QlVQ_&?>u8=YfW2?_fJ`#O$`5nKCNBAYS*;+neKvxKR~v4y85}Sb4q9e075u5 A9smFU literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_key.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_key.png new file mode 100644 index 0000000000000000000000000000000000000000..9af08692ae3b858901edbbd085a4724ed2fe09d0 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`@t!V@Ar*|t3%ESIy?^&}GcUbp z7{hn8VW#o<1BN~PQ BHH-iN literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_move.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_move.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed238cf45e2304dea577d3ee46cfc79f57ba942 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!3?PkB@DWn!O5XO5g$(% z$B+ufWDnhos+@*P5*e7J($3j5_nf%suxzq~gv5sIAN^bnQVOdIvmDq2czG-sGR+)z w&ML@G&=B*m+0+xBYOGXZ3I_^Y3}ad?~+%Df;rND%!#>T9D4MG^6I0% zsbJ&?!F<6CV2!vBb&O1Bf(^`&U5(48Gr*fEKR7iL8eH134S4%& pJE4KPpT`LpfCs}AV~SA&005n5{N2E)!cqVL002ovPDHLkV1irGV~zj- literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_relations.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_relations.png new file mode 100644 index 0000000000000000000000000000000000000000..7c16044b265d908b91ac14dfaae8062390f82255 GIT binary patch literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`!JaOTAr*|t3)p|y7eA9+GehI7 zLQ@R$KjqCA86)J>4@_~n){@2GsGhW|!G?K5lGmRT4pZbg84l?wym38Lr(!PKprXmQ m`2Q6SAnsWDzrx@t1H+l0BEQnu4UK@tGkCiCxvX>IE+tTc+7Nw zjpImWvzchEWICOq8RL^zdMKroT;E(y(g_BIA0O`)dxtw;m8xRr?6{uiqww$VPsZ&} z(E1JBzTFmJw}q$Y2le0i)2Q1*<$thuxckPPQ5YXy0t8Oqqq!i`q5uE@07*qoM6N<$ Eg3ED>sQ>@~ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_save.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_save.png new file mode 100644 index 0000000000000000000000000000000000000000..c35f004ad37c79f86e7cb0d688a23e7cf0099987 GIT binary patch literal 583 zcmV-N0=WH&P)Izt5MxOpsMkj$+PB^cdt2z9VF#UO~Q0tqBIG0LL-(8ko4=FZEnUU>VR z55D~7i>bv`PRl%&>fKRRwXE*F`?k+N{q+8aA6b9;&U{7*vEK4p<~c(X~d#dLqgpx)-rIQ2ZxIw6)}nF)GR`|s);Pc-ITKmZuqxY_L7xO{i> zJd?7Eo9jGo*BcXN0|IX6?T}CnU^(E5h7;-H-2plzJYYgR*KSBq5=InGWVbFc{13iv VI`2oq|E2%{002ovPDHLkV1f|J7@q(D literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_saveimage.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_saveimage.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc614a4f88d98c31a935c32830dbb910c4fea6e GIT binary patch literal 675 zcmV;U0$lxxP)`RJ3T)j#DFUbw%lX`e*I-7R?pW)mBly!Wp)z5+XQ*mp*!l~cRNnpb7h`; z?=P-Da|af6&ubH?%KM2enjl-34O@HA`K&|b8>R;VfEPddf8i+u^gT>;YeaP62;Wa# zLR4jTZ0jfZHy2WaCMq{yz9*`N0Vzh?f%l&Nu*R7g0vt8>u>eSS>GI(V31i=I!^6Lk z2!yC;ROWVUV9?GKC(HQP*jk;ShL3?X$pAx$hzO>JnG!-nJ$u1rCOx!SZMXII2N4Va zV^DoeCXUOGTZN!Ckbr@SQo5X*9{hu;{t%ZtdHC^He>tFzw#%X?j%ur=WGEx<_~cU7 zZf}Z^Fj4)<#rxbwLP_Oo+=VCYaUIL>#`o{q=Ig_HD-Sqyw|!YX-v|=ujyGc6l>+S? zoCsoOEX&@Pzxehx8@CQzy;z;ntxC`aQAI4GQt{m%zc8cUFcUSBLHj+}Kx_a2002ov JPDHLkV1lZNErTJ-)}C9 zFM{T_8F>4bLtQ5hZoXwm$s6QM@PE;8R9qvv2UoFraEt2pMRn?=%%Py)oSfBeZ+x7a)NyivWMpS^b92DI zzuDi~&(F-JtgF@7*0r^?e0+TB>gvqQ%;eBGsxlp;|m&B1kl>H+o^f~cszBu1x)Z;n}YL{kyaNhxhCLH_w*rA<6}@ z9bW%8UY_uOW(#{D7RwOA{-NpY z%`d^T=k9#G|8v@2-hw+0p97og-WwS{v%FW+D&8pg%F$|hugs|2-tfgHUg^Wz`5p~t?@kii%y3B7(>|8r<==-azp5wgoUZsK6lg1h Mr>mdKI;Vst048rd-v9sr literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_trigger_add.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_trigger_add.png new file mode 100644 index 0000000000000000000000000000000000000000..920a2a4fb9be66e9bbfdcdb8c666b8e1f7389563 GIT binary patch literal 555 zcmV+`0@VG9P)vF7=?4~^R~8elUHD?1Vq$Mp{<#eUqj7K_Kk8Plm(C58(8<6S#Ec0&d>Aj`xtSA`qDN zd3IjLgXGi%I6bykkmT_@9vIA(&-JDXSRKX>5g05LJ-(^|W3nc^piV6=DHvOxj z()`qdf`TUWy|}!9YJh^0oF3mTVoZ$CIz1~H2afCoUFrFkyTFoJljsCpYEfw(MS!G~ z_*WDWMMmFwo%RZ)%5kbMyP&zI<(1$B)$^SE%m-x7&P{*C2^vsMs5T2^ld&ps2IfT! z#{}g7jM>yD?L!x~$~L~BkPjZ+hqo)o-B)R34^lId?o(H`q%4BGbS8`k;<4wF9g&Vj z7$4adofo%cZz5Q`e#NzwtCwQcnq@CHY+8GI?fRA52u$-pb1{`0gzEiKs6G?}5_8T) zq;oz29{KCcqpC< zLn0C3FA)d?f>RVDA0a3ykT+yqnj^o{G;vL%(VUB?qt}v|==VOTi@O3Mpg6&C0IFDl9VTTxYdzqGut4rDMWJ%G{$ oD1Bga0ZAzlR~QWX%tROi07b9jSL3ENe*gdg07*qoM6N<$f^Q?fk^lez literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrcheck.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrcheck.png new file mode 100644 index 0000000000000000000000000000000000000000..dae06dab6a583eb6ff6822ddea709369f7b79faf GIT binary patch literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Yk*IPE09i0O9PTOCtF{gW_NCa z<^Qez|96KP&t&+&)ZzbXw{Ht=9$neBeSE3>&5Ld(tpdP(%;nUiDlp3 zey}?J+v7do^zO9WaTU2C@qAGQ^O8%qOxjBAc0}+#&neOqJG}FI@6nF;n$MCNE`9$~ jck5HB?%qbt1;03}Y?zsbP0l+XkKxg=vx literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrdrop.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrdrop.png new file mode 100644 index 0000000000000000000000000000000000000000..b407e7bf1b9ba4c94ffd8dda35a7bb54906d90fe GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}NPtg>E08|Jz|hdpkd~GPWZ#@@ zeRZ1Mxe1p4xBCCz9r}N%!~fN8-xk_Dy0Yi_1l>O~P0pP8KXc}p-K{1Enl!%u{-2gM z)7UsII=Lh&sW>XRI6R>+F}M7|wFXn5S&St?e!&b5&u)MW&hT_`45?tO>D|iM5Fp@u zzM%X@{e|~oA7@=w`M|9-ML;Pq>-5alPJ!;omVZ-lBk26RwX4W)+cxOM* OP6kg`KbLh*2~7YL&Tz{B literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_view.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_view.png new file mode 100644 index 0000000000000000000000000000000000000000..204b10d60013ad838d3ff8fe08c1672575129538 GIT binary patch literal 538 zcmV+#0_FXQP)~877<)b-8d4qd-iFKJZNs4;r+{R+>N7r%Tn?N5&X)- z``P~he(rBODz346aCKE-t!`iB!|FZ;V;s{`!)YfX!$iWwvBP94(5^!;cv zZA!XZ2q5d|+^d81qsPsQ#>yFE!MG0Fv3;80P8Hjtpjs5n|DcXO)A{_6@8i48KX2## zydBl23F_1^*p>o(H_m^b$MKi{w%+=(>gwkO7d}lp{l5Fy`=*0$>kqze0HdbksGbIL c2qK6E01V2n3*&v*?f?J)07*qoM6N<$f@O9IyZ`_I literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_view_add.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_view_add.png new file mode 100644 index 0000000000000000000000000000000000000000..2a6cfaf0b916988d1a657515c84e71352bd3c251 GIT binary patch literal 611 zcmV-p0-XJcP)wT+mEri#ZYyU#`Q+Ee|>6P;6atiB7#I0Gm-)P1+5} zj#|Pmy0YDeQdC?N{<^{K&5l0KiMEjIUUA4Vc>kNc@lngJ-eR z&_vukNr9|5y;4HV{c(P`{D6|$D0aSr>fkj1p}5rUJFe-zgo~y!;*HL!l~SQN@b(yA z>b#1lNC8)o900E6a{DKc`|oFN53N$%JWWR36mgZ4gxr_lc}s%B)iM6_dYvch-IW5e x8AOBls9^w#7JS$*GxEP>mI6o+sS7RHg=t9X z+*?E$;5_{a2*V7)Gyur_j{|@VfaA>cB>=|A0SUn{2*U^OMx7zsu2HsaE#j}w*wHgD z%m5DQ`3LYXoGX*F9l+r{6bin8;#dH2!MmvF8-q)?{DESPv)_Bp9k1E*P+sKD>mrdte)Id=Y|qzTRyvfl zDYWUzp=Q@Y2CWrMOOADhDB5yA_gK;Cwet(pPQgv0FIs)&T@4gBS9S?}ejm{jURa}{ sy-{@e(U#=KYb~5NRvuDkzc7urUZq>SO6GV&aVf}sp00i_>zopr0I1VQk^lez literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_edit.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..722afc17353d572620adc38f89555a1038670dff GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAm`Z~Df*JltPgL3pid-fxO?go-}TrQ zH?|%6Is4hUv#n9x50qIHYIZoBRO66W3}Anx%;I$_+xXDLzlRpcM|6LX;kc6YON@~r XcFK*_<`s(nKu+;=^>bP0l+XkKBR@Zx literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_export.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_export.png new file mode 100644 index 0000000000000000000000000000000000000000..bfcacf46b3a4131fc35ee07b1a1f8837d11eb934 GIT binary patch literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6f;?RuLn;`1`xx0640%{S&);Kl zBKmp2HP`JaP8%a9ADhG`l;P{6a5B*FwQ>7_^`7+|j<@GC9L;%kVLg9KTzmoBQT^to n-iNa?HMm5&r$+`i8J$8;rI-{=~>%Zh7m#`souuwtKqz KxvX>-1Q;lC|?Tpu+(0QslB%Bp%gpe#~WPqxjIFX2a0l% zq TngCVY00000NkvXXu0mjf$T4vq literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_sbrowse.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_sbrowse.png new file mode 100644 index 0000000000000000000000000000000000000000..c820422c87d2769a9bf0c169d935c322fa5ebad9 GIT binary patch literal 93 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V6Od#Ihj0}$r&-b3^`_}+e&*16m=d#Wzp$P!Jh8bi4 literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_select.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_select.png new file mode 100644 index 0000000000000000000000000000000000000000..2cc94983e40ac091a1171077954e35f53a1bdc81 GIT binary patch literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!9W@a@|Lkr1X8a(T^vIy z7?Tv(bJV01Oy*dA=4qO6lfiDe;>ARbuDrj#`;Y%zT*kaL_x842*6rKN{6E!{eBUoD z(k0uit2(Ko_gacVRK3U@hMRf$`-0^8(o2?I*>179%Kg_qp*aoJU);W>oc#98hh1UP z>&za`nqA@oPJG*Mq?j!JUA)V3*>i@Q=YljoKDvCGWwC0f?}S*%i_#47t5%!r@!fD! z_=feQ_Y1e{-@SUv=vlzuR3?{|Eq&@!tTvjPIlgE9?dtSm|Kfip-mOm<&kG$23ICfq z>GVU^JeEk|{cHYgKBfA6%Uh1y8xo%ib!f;*d-&I+FfbTyxgvY~_a_;U_dQ+xT-G@y GGywn@6M#Da literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/centralColumns.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/centralColumns.png new file mode 100644 index 0000000000000000000000000000000000000000..4b94c9f79fd7c295a137c5423d169008ee25224e GIT binary patch literal 586 zcmV-Q0=4~#P){%OU+qP}nHe+0Lwy_E~JlodVwypO4vt7x{o0>wKQ51##C;oc@`>SGD zSeW+3ix-A}I)l|guVO-Bq)ogT?m5M9tR_~qJ{>&ep0fr~&baH^C*I1HkOeRsy zn$%k5^sHSMC;WB+hFg=&h1whqRG5-M^_iUTviu@Kj%G1*HAiVN zY2=mMxjkOLw@ojlFeg zX=&u{?oJQG5^6{F?`pVl<3PjX21-asnC$0lG+e)a{glaMGS=1A?P$`ZNi!^|&pdtlv;o5~N!8WWURY29nu8n^ zUEy?455Lo3PdE>D2c(I2!{t+t=1RtP`lm!67`{uj*el-2g6ZVG6V~9z_U+pVqjpPfPw{0{%|4O7)}I@ zKmwZUfh^#TBewv{0s;bhs_8>uKn-fqOfbQpz|bc!NVw@FNz#RX{u*b@n4yIzBqW4? Y1J$LIHcH%D5C8xG07*qoM6N<$f*#NdZU6uP literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/east-mini.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/east-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..6685939edcb31bfc4a2adf2b61df432f9bdc027d GIT binary patch literal 287 zcmV+)0pR|LP)q#+;AFDwf z9Vh;S!2bOY|Lf~7Aj+FK4T6EcfB*fTJ^SK+aq+2y470>z5CVMs_~U;`$^QRrY`wS) zs=;FrCb)I$-G6WIwb%^WNP+QGvmpX@boc z+(uvqaJ8_MW!AhcfYr{YHOhOLo;Lq17W2x4Iy1wuhCNDtspC@*q8=U%@4DV2*sj*_ z&hQ8im8-Q4-+Sz^-lOD|M?J6quD|fyGw($YoAZ@k<*HZ1@94P1cOZGuXJNvG>cRWU ezL`C3H{fr|LLzI@HhbXAs4Q7#@RO<9s@A| literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/logo_right.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/logo_right.png new file mode 100644 index 0000000000000000000000000000000000000000..a490289105a2af141a86630e43f008be5e540354 GIT binary patch literal 4306 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

        9g{?Pl0W2QJ3e{qkoZcGN5XEyDCOr zdmpI=O+!!jAvD4Q0k5c3*E4^~PIpam5`VYgo3lg6XsveZ=vI*4!fU^Kl1f;LDKhO_ z6ZYVKiH$iK^K*8o-6RYP#R##;@S0mlSmsE(TQn$oL>5oGKk;iez9g!0ZDMZji1);_ znjZdRblz<`*HaU^-wdRwuB%q5Vio!yh=9<@ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/new_struct_selected.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/new_struct_selected.png new file mode 100644 index 0000000000000000000000000000000000000000..bc61749afbfaf34c3c7baea47e444b05015b26cc GIT binary patch literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAnmt_{Ln;`P0vwrnw4wtULKrT5 zl_@ghIpo0b@2Kev4j&(0(T=1vf!PjQ*m~E^?Q=_BoUivr@aNw0o#kJ@%)V{U_C3)0 z%Wml-Y@%zIHwLGa)kt1A;QVoxe=y^gi`m;`JR9Dr?=enS5b0Jq{)OKpMC6bdr~mPc lDZE}Eq>tXtnqGMNFT?uHlk{|7-TDV|mZz(q%Q~loCIAUhMcM!W literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/normalize.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/normalize.png new file mode 100644 index 0000000000000000000000000000000000000000..5f8e95f55bea3f8fa08afad04fef7d85c109ce27 GIT binary patch literal 511 zcmVtbso$Lk7%c#RxlVV7^zB^)>c#NmdEW2) zfBqiq!3E523WmC28gDKaGl16h(5dRUxdZD%g#9C-g8h94 z{e>8m-K7C^NnS(UtV@!FTrP)lxr}PHiszdsmCqe{Lh0yF(o7DA!*ILZ zaPFzNPesK!|JKMFqFD7K`xv{Ro9Z3-T&RKA*>MIE2sV zLn4t_EwcjJ?KUcvinB1b%zy}jaO%|NdH&zB!ygLst+?L}eD44N002ovPDHLkV1h|} B>B0a2 literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/north-mini.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/north-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..c3b60620e04f0a810e03e5089a36ffd181c6ab65 GIT binary patch literal 322 zcmV-I0lof-P)pjK66BzUo4SmgtUef(V(b-c;xq z-JSn|NVg&5@i_*AQy1p{LXPJ|(F=m$(fLd=2w}EMi^Vl)Wm#b|xpZNSAZ|MB^^TDw z@Az39zq%k!kT4x?w=tSqt%MB{1ZB;G;qVN3{;5G}`hkA`M2E;Qe8hhL1lu^jH$l*# z>GTR!C1G1pd|@;S+9CQ=+ZKk;ZfLo@L6=D>F`I>UXtTM)Zuiis_4-za{@+1E-=a8~ UbHzP;qyPW_07*qoM6N<$f}SOaZ2$lO literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/s_desc.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/s_desc.png new file mode 100644 index 0000000000000000000000000000000000000000..cc8804c122949d83870d036bdc274a9802ad717b GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^+(699!2~3;*&M5Y6kADYvr;B4q z1!M98wjcf+4x)1t6AritWVU!#ED`Mb;HfOq=*h&VeseR!#Md6JH&QbP0 Hl+XkK19u%Q literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/s_fulltext.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/s_fulltext.png new file mode 100644 index 0000000000000000000000000000000000000000..b810b0cc2b6c83a0b437d261ec5cd9ea77d08016 GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^MnEjg#0(_YFWj~fNO1=Egt!9f|NsA|m#jBViHQet z7)yfuf*Bm1-ADs+LOop^Ln;`P53np+xNsp~LEN=fp{vyvd=$`{ekg>C!SJz=0Jq8n zrpJbU4F&=%w=Z1?5NI|vDN$u^7P(-!utZis z*uQXvTmAq4-yI6VU^Yrj5CY(US?cir|7tfd{_pHI;J|7WHN7(eLN z0%{}yoH_IV|IC?Z{_k!z`G25E1I$iKn@PMOAPpc4GU)qnuwkSb0#b}HgbV|K3SpX1 zG#eYI5$}!Ye);X3T$1u$CljndRnzl& z*Zbvf*ZiOQKmUIjkX-YB`P;7dp4U}1A+BV$GH}12_$A|e#?O$r5a*0f8Q&AXxZk%j eU|=2`p$q^LWNxZPBF@PG0000)#P5!Vmn`F-5XllIBuuLjg-A{VM1cQckjH|spHZbmIJJg{jB@m|+$sFb{ j%(mpV!%le)bP0l+XkKi-{z? literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/s_okay.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/s_okay.png new file mode 100644 index 0000000000000000000000000000000000000000..9bf92354e25dc7373c51cb4d758e0abe9079b3b2 GIT binary patch literal 710 zcmV;%0y+JOP)yZnK$dg%#a(xqfr69i??&=OICQFy zVNWi(yeFH8{!jqbDk|Qz?qSe?BP!1oB7Q0at^=0u#@l`QxdQlhSz%2)_i#fzC;F8D zxt7gy#2eOKqVT(qHhucA=+S{mmln+EFsH-1TNh<#^5ETOf#nhGrR8DloKFIz8`e1( zHA=qIOyPH+QKvc#+EroDrUK(ORWw|vfJ3Jt%Bc{A?0r}e$U1xyAXdBlMDk=fVkd)P z(X9=`4mAoY!?2Z(7G*SDtOfvFes}@V!@h_g@P&vMd*YLTgJlaI7oW<6Q=bV;J2j{! zMVPof0;6VCG+w9z0K9zl0?|W$aA?*>!DKRcN9OS-0ekYvr;bancn=b`qlM{&}!H602hgqu{JiD#&@cDfJz^m7<5Yg)a z{YpugPyvyB?uhC11hHa1yRbctcTg)jgtAjPux?g^af2e<+s!e3a}3e_KG3U>fI+zw z%qrzjHj{xPvAaPmna@Go5X;S3NmJw5VuF$rS+J~Af@zH$jH;wzSWd?~SQe$z>2R#l z25&65M2wj^Ulr2QU{+Mbhk5AQppSAYB&yF7_H`Ptt5HJ~b)k&H_LUmo^aKwnEc(Mz zp6$bm5?AK3Fli5BdOVRk8jIYKSVVNX;!xyv@CJg*#E237Wit_Hb}n&X?1>F?f;Sbs s*=M-|sn0+gZv%0ye2z5M%tR3e0B6vw<$XWN!~g&Q07*qoM6N<$g2wJpN&o-= literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/s_really.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/s_really.png new file mode 100644 index 0000000000000000000000000000000000000000..e48c9cd4830543e151c6c86035f8a5c6ff640750 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHY$ZW{!9W@a@|Lkr1X8A+E{-7; zjL8iR|8Fn^$SBsfH8RRJ9=*8q;jTcDgFiEbW@rg;bW6^-l(Nb}VbWOz8M&6jA`E6y V8@BcETZMrP@^tlcS?83{1OSY1Bfy_ymt`5!}Dt!1?1zCZGvv#t=-C3-I_h!GjwO+`8Dnt}Poz zgh{yI<^|yH6@nY*2`(HbIJqA@(Dgke@b^mqzd!l$>w~W;n85_BAn@#god@#fT`h9P zZO9rnBcorBjBd^Ff>mWbYFF?;rf-e_yXJJ* zn&n9VBreG5*CJ=wfUIsMvZ_VMD&~zefu^u>Q$Xz^k*);@buEMH-Aea}Yk|LkVwONM wq(Y&Ph3eO}H=`2BF)Ln>-tSjmjZ|jz11ww3H{u({5C8xG07*qoM6N<$f}23hn*aa+ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/s_theme.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/s_theme.png new file mode 100644 index 0000000000000000000000000000000000000000..156cd435b3db58f689fecfcb76b15a9783901ecb GIT binary patch literal 488 zcmVP)(>A&gT4=B8I-Sg%4x z&Ot=VL^)T#kPrI!0RR60)TID`Vho2}0h4oeK|q~IKV+S5AKsQ1lXeNMo&% z$R$Gr0RV*2dAJu`8)OpR_IJ}DVx5Mb#Ea*CX(!G1WOj7Qflet5Is=#|TCFk6F940C zlgJiOw^JX%3i$2yvCg+Mz-Mv}7B9d@atU06=i~wWO92qPeoKlC08ihMp6mgS-$`V! e`Q!Yw2Coa_o*|vSv&l~Y0000;V<1vlO}RMGo?dIxq@bW{fK`c<3qbv65{^%jf5 zRoPtr^;a%+wCI-~!K!rCFX8Yt#-dj~7<)HXXfIMlVawvwASZxWiONl#A?DJ?B!0OaTA z_pYq0yoBH1-%r4SM-Mrrs;cUgo}T`2VPWCEkB`q$dwcu0k&%(4t*tEyKyq?2frgKq z%jI4IkKUI%s4FWgd(qzB9?gP}jg5`Bo;h=7>*VC*Rsg-dy<0^h(N@-%V)Luuz@vwp zQdCrojgF3f(ACwI;pXOc!qn9CwUw0>admYi0NA}UG<@XXz@vwpl4U1HN5`ec#>NMH zKL4IrEGFIE-6So@e$$=*Dk%I$|9&$=bN@@dpdn$Hzb{8TdBA&*_$G>3LSKi*< zK>$L+6PH;17(Q}v;L-c;e_)%x++&h7FI4g#-{w-j%E)_+`Tg=(FiTkwg|;!T6urh} z)qJN~WIe{zTuN51O1ln6{qzKS(KGvlTbVZsp5t23o>i+4+2S5)mtko&--!c~PD301 b`DpwA{kwbC54?PM00000NkvXXu0mjf5XmU= literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/south-mini.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/south-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..654673b32551a5b54e74fb527e775965d087ea6d GIT binary patch literal 319 zcmV-F0l@x=P)Q8+SkGj4+d1K0m22K@W?@4tn`68v74<3B@&%x1$ z&7h|sgEnHbp`>I#hCv}A8*xSdMvy@@*d*E5djH?L^$unRC=&3cqZ*Jwmbesnd#?o> z^5@Ur|9X1!@fl>v08|GuY#uH}+qd8QKYjXne1^;enE^A1ABdk|Q>dmk=fAMmlyouL4FqdE&gut)}sDUPpr%=2RDrSjI4*-d9j@2*AoZK1A$^WvpzD+ X@SM%r|J-#C&{zgfS3j3^P6TL??mkmJ83a$gr zT)^E0_!o7X3ZXYyo(o7OlNdPrL`8=$EJFDAP)K$Px{|@g)SJ-fY|aJ5<1viibiJYj zS9jp;`zc@zo1w%RB=c`DGZzrV0{Fh4ks1j1k_9eAMhtrwj0Nb`9 zxBwS|S`My>beqFC7-zKCDi6?4FijJNX}~Zv6J|l5+8o+j9w4PeLqkJGeM)_OLxId3 zwL*&W0LD1#qESRkMWTpABAGt5G-iyI2bj!6C=@0kgu*0L9erAPfRZxxgE*x#E&J0L z%gL>kzQKb>cUJ3(CR*97q*{E(ZQgI{O9{5QG0-&o<(e@O+V;^|FG&oOv*c&!j?Gg-eXd+xnI+;h+KhkMUWcC@#G@k{ap006VGwm1s_ zpg$o%=Y{<7KWuDw{uG29?OZH7`T756|5ZSzGi>RPK%Tg>_RfF=M_8MS*RkCNl~p1nB2*OX4a=sGM@5BHJw%BbrOlq*W0>VPgqLVRW(GHet4Psy5y~F`7su# zz)4|^p9c(iP1A!MzH9~ssTo_xZNs=`31pK??~DXX59UD0L`zfnB&a5y8I6o zWDZn=8%Tnh8&bTaslqy!5lC#O^916xRH-qqYJ0g#d-?voOmE{Q6i=iTj1QC$Db~zL zS#_EckyV7Wf$y5$)FqX;eFYCNHzJ}Nz!Dtkb(Hw^k|FnQE-0-LtU>V@Y|(gd_lA4{V>Rdg%4~8U}YamUb`c`ytJsQAn8!?aawvvUz?UkN?<7*4HXbH&$}jo!21hK;BG}XpRqe4Jd+iV&~LhymhjXY6?A%%0M_m9Re9D@mDt@@ z2L?|h%2@mz*e}GyCRetj4?+`Y%IBZBv6*c=kV7baGVFY1*GpCO2tyrGGJmZaH|koR zBUoWFn)C{FiEUC2R<&HrD-vbz#EfY8*iYduF0lUrBXYBfNVmC9z@D$Z_|O)tvlXvc zlA2yb%3EJr>s&a{TTD2J!bdMVk%jPvE~QrU|9*x-%1y+%ZCE4+PnR}4ZDlZ>^X_5- z|B8YCUo~ag+d1flkcwk60)Q87?i!__2AsAP6_A&W&a@*mMj5Dc zu7>Vh6au=xdVMD^s8gN~bJpqGGCd>b-_M>ea0LMKxL+G-;2Fdc`z<9&mCh6s-Xe=B zxnbB||ELo1vEPhQMf&;mX>MbXK9gi^_O&f_4aA2VpW!E=*hz*f!ETZg)@5EB z`275H*=;+ZHJzKt|H$^}l_z~s6g%}Geft=Wc=d~rZcoztlT}PHHtxX3#W^BZSEUdS z5w_T*;KphBiv?GbWT*V+$5uF$t+&^8q7}&Tpjwk-axdKKy&dZ{`4?NGkgy{^VLeuV zD4PS{=2A|cu2BO~!Et@h6noQ+a|3;7ffTQ#u_*QVk4Jtk78WX%+*{^|NosZMUdDu0 z>i&WZ;E{${)TS3;14bAHBfUYygXg*OeUO+Vz&#-q;9h3t7i);STDF-7WzVwF<6Wd-0!+X2eLdKTVHt-tnk?u-Pr_#TXo z-HsC^(?JL|AQIW*&dLR_6Y3*PAFxg{hA6dF;jbqY9s7olmhv0%yWkxCjHuv4jRF`# zjAJ_#vrOsEhtlUKZc~}fC>;zWL$L6X`X!C9z8n36dr&O!81t5Oz$YrPB$PCW76Ndw zX(jkeIe&>*w}gqHl;GCnONX5nBlw8fcBc((@j5u2)s5w=ccs)xXBRyod7obGRs=r% zE-T*@;05@*=3|o+w8Hf*ixla<)506PBM) zOIfq*_m#;B9qCK3SF;3?vTuQ`QHoufYnz9!u`KQjVPxmcV_b5UUgI%Swxf8=={0O4 zj{>=2Z`WjX*+-)EQEeFUkg4PWBA)ubI}nX!@i3RxF}$D-^ko0a7ymi!09l89O`2ZN z-r8fD7Km#XDFr&RPi~>`X{b%kBeSjHrR?P(G>cgX;71iXy&s3|D#Gi}ik>;1Lm? zf(O#DSdo{NIi=&zpiIKnmXNlDPu-ct?L<@g7h>PDKg`}z9WpgIZcH5b&^p;2r=$6Y zkOL8{*sKVv-)iZJT_1FQ?@do2-%qEur+v6Wrr&=%M zABJoTG*M-awkF+A2_kEWhhA$AUseUk+;;lZd`c{YXvkbIrZln_tel}`BD(s z8cc3Zi1P)R5zi{WME2+?ygmDN$kkO56!4>@#Vtz!^&I7AU#VZlwl;)Df9pLM``Bry zo)&5-P2~#)ADx>NRPx|nZD2jD9QUfLpR-$>Fw*ObCV-eiOm3pvE~8TGbtm$iRyfR@ zx45{t9*ErAzurz8cG%qsC=aDZ)(?Zyoz^dSbiLX#hQ46jq>7--kXi3|+`oEa_SP}iSADG#MlEcWnPS$wei4*lQ*sk?(`_;tcKa|_e?81mrL->#?K7GHDLelvfrIRpvg<%=Q8W{3Z z@i;z7AbO^G?p@}iZluG6!Qa7+9sqqfr!mHFV4(VjToh_aWx6bAdp9uv;JX15+3>#u zie@>&$E$LgD^nkDZ=LHQbpdkTssM33A)$2$o$Yjbtr`&;ZVn z26@NUn_#4;d9bPhGm4**g4i5U09B4vOEwffr!fPeW6q-8Sy79`X8Sw37+!bSkP1*W zXN2N_^%}AbsJ}IsHfySaW8duW6veWK`<*amP@iPeO76y|?6Nom%&q6}UfDzY)BeO~ zoE-M2ss9|P7SodTNb8&-(pvftbhg^g?w<@up+dda@8aSjWx~eiX+t^vIDuL9n>R`Z z!)G3OCW2MKvKSHgM^oM9Z_VoIJl@l}z%Kt>%4g zMCFU?{chKvZ5Nu_*>CW%SAONE25~7regS~5D7ZH*`BTglAqtC6Vt3{*y{zFId4oHU z`*-=j+lHp%Ym*o2f+*oi-P7Z;8eObF-1KPU7$}-+NVCeMwO{I3_w>RN@>Ama8eAiB zfFM2}ZrI3!0?Kkp;eM?vjM3eh{HFDnF9z0yuF`zy`c^(Uq~CjMA{w`Drzaqfp@W{( zaFVlj(VYEEL)2SSAL?U>R@YkJS`g_obz_6u@9{P$byNmq-mtnjei3*(a0T49-+{oH zK$F*zRL={n<(uMHhdX%gtF&t1z3t zU*$1&DbVB&Nv3t=@5CpV$*EEG%@GBpXWwdujItc;{(~Uq3!7yccNsd(k`p9O0!r3M z9cf|@NepnDFqRe0ICM(~Pt}2HAi334ME@V{-(+GB%3_M(#j%6)Yj?8ofc6Fhy^ow& z(j}mbh`BMoVCwu($}XGU1?rt2LT@s(YY!p48JVS=$u(j$OMFHt{S^mX0Ci`<>C*3@ hIX| .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #d3d3d3; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #d3d3d3; + background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #999999; + background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #212121; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #aaaaaa; + background-color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; + color: #363636; +} +.ui-state-checked { + border: 1px solid #fcefa1; + background: #fbf9ee; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cd0a0a_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_888888_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: -8px -8px 8px #aaaaaa; + box-shadow: -8px -8px 8px #aaaaaa; +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/scss/_common.scss b/Sources/php_script/script/phpMyAdmin/themes/original/scss/_common.scss new file mode 100644 index 0000000..249c2a0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/original/scss/_common.scss @@ -0,0 +1,2711 @@ +#page_content { + margin: 0 0.5em; +} + +button.mult_submit, +.checkall_box + label { + text-decoration: none; + color: #00f; + cursor: pointer; +} + +button.mult_submit { + &:hover, + &:focus { + text-decoration: underline; + color: #f00; + } +} + +.checkall_box + label:hover { + text-decoration: underline; + color: #f00; +} + +dfn { + font-style: normal; + + &:hover { + font-style: normal; + cursor: help; + } +} + +a img { + border: 0; +} + +hr { + color: $main-color; + background-color: $main-color; + border: 0; + height: 1px; +} + +form { + padding: 0; + margin: 0; + display: inline; +} + +textarea { + overflow: visible; +} + +textarea.charField { + width: 95%; +} + +.pma-fieldset { + margin-top: 1em; + border: $main-color solid 1px; + padding: 0.5em; + background: $bg-one; + + .pma-fieldset { + margin: 0.8em; + } + + legend { + float: none; + font-weight: bold; + color: #444; + background-color: transparent; + width: initial; + font-size: 1em; + } +} + +// buttons in some browsers (eg. Konqueror) are block elements, this breaks design +button { + display: inline; +} + +img, +input, +select, +button { + vertical-align: middle; +} + +// classes +.clearfloat { + clear: both; +} + +.paddingtop { + padding-top: 1em; +} + +div.tools { + border: 1px solid #000; + padding: 0.2em; + margin-top: 0; + margin-bottom: 0.5em; + + /* avoid a thick line since this should be used under another fieldset */ + border-top: 0; + text-align: right; + float: none; + clear: both; +} + +.pma-fieldset.tblFooters { + margin-top: 0; + margin-bottom: 0.5em; + + /* avoid a thick line since this should be used under another fieldset */ + border-top: 0; + text-align: right; + float: none; + clear: both; +} + +div.null_div { + height: 20px; + text-align: center; + font-style: normal; + min-width: 50px; +} + +.pma-fieldset { + .formelement { + float: left; + margin-right: 0.5em; + white-space: nowrap; + } + + // revert for Gecko + div[class="formelement"] { + white-space: normal; + } +} + +button.mult_submit { + border: none; + background-color: transparent; +} + +/** + * marks table rows/cells if the db field is in a where condition + */ +td.condition, +th.condition { + border: 1px solid $browse-marker-background; +} + +/** + * cells with the value NULL + */ +td.null { + font-style: italic; + color: #7d7d7d !important; +} + +table { + .valueHeader, + .value { + text-align: right; + white-space: normal; + } +} + +.value { + font-family: $font-family-monospace; +} + +img.lightbulb { + cursor: pointer; +} + +.pdflayout { + overflow: hidden; + clip: inherit; + background-color: #fff; + display: none; + border: 1px solid #000; + position: relative; +} + +.pdflayout_table { + background: #d3dce3; + color: #000; + overflow: hidden; + clip: inherit; + z-index: 2; + display: inline; + visibility: inherit; + cursor: move; + position: absolute; + font-size: 80%; + border: 1px dashed #000; +} + +/* Doc links in SQL */ +.cm-sql-doc { + text-decoration: none; + border-bottom: 1px dotted #000; + color: inherit !important; +} + +/* leave some space between icons and text */ +.icon { + image-rendering: pixelated; + vertical-align: middle; + margin-left: 0.3em; + background-repeat: no-repeat; + background-position: center; +} + +.selectallarrow { + margin-right: 0.3em; + margin-left: 0.6em; +} + +.with-selected { + margin-left: 2em; +} + +/* message boxes: error, confirmation */ +#pma_errors, +#pma_demo, +#pma_footer { + position: relative; + padding: 0 0.5em; +} + +.confirmation { + background-color: #ffc; +} + +.pma-fieldset.confirmation { + border: 0.1em solid #f00; + + legend { + border-left: 0.1em solid #f00; + border-right: 0.1em solid #f00; + font-weight: bold; + background-image: url("../img/s_really.png"); + background-repeat: no-repeat; + background-position: 5px 50% #{"/* rtl:97% 50% */"}; + padding: 0.2em 0.2em 0.2em 25px; + } +} + +.error { + background-color: #ffc; + color: #f00; +} + +label.error { + padding: 3px; + margin-left: 4px; +} + +/* end messageboxes */ + +.new_central_col { + width: 100%; +} + +.tblcomment { + font-size: 70%; + font-weight: normal; + color: #009; +} + +.tblHeaders { + font-weight: bold; + color: $th-color; + background: $th-background; +} + +div.tools, +.tblFooters { + font-weight: normal; + color: $th-color; + background: $th-background; +} + +.tblHeaders a { + &:link, + &:active, + &:visited { + color: #00f; + } + + &:hover { + color: #f00; + } +} + +div.tools a { + &:link, + &:visited, + &:active { + color: #00f; + } + + &:hover { + color: #f00; + } +} + +.tblFooters a { + &:link, + &:active, + &:visited { + color: #00f; + } + + &:hover { + color: #f00; + } +} + +/* disabled text */ + +.disabled { + color: #666; + + a { + &:link, + &:active, + &:visited { + color: #666; + } + + &:hover { + color: #666; + text-decoration: none; + } + } +} + +tr.disabled td, +td.disabled { + background-color: #ccc; +} + +.pre_wrap { + white-space: pre-wrap; +} + +.pre_wrap br { + display: none; +} + +/** + * zoom search + */ + +div { + &#resizer { + width: 600px; + height: 400px; + } + + &#querychart { + float: left; + width: 600px; + } +} + +/** + * login form + */ +body#loginform { + margin: 0; + margin-top: 1em; + text-align: center; + + h1, + a.logo { + display: block; + text-align: center; + } + + div.container { + text-align: left; + width: 30em; + margin: 0 auto; + } +} + +div.container.modal_form { + margin: 0 auto; + width: 30em; + text-align: center; + background: #fff; + z-index: 999; +} + +#login_form { + text-align: left; +} + +#login_form .pma-fieldset.tblFooters { + text-align: right; +} + +#login_form select#select_server { + width: 100%; +} + +div#modalOverlay { + position: fixed; + top: 0; + left: 0; + height: 100%; + width: 100%; + background: #fff; + z-index: 900; +} + +#login_form label { + width: 10em; + font-weight: bolder; +} + +.commented_column { + border-bottom: 1px dashed black; +} + +.column_attribute { + font-size: 70%; +} + +.column_name { + font-size: 80%; + margin: 5px 2px; +} + +.central_columns_navigation { + padding: 1.5% 0 !important; +} + +.message_errors_found { + margin-top: 20px; +} + +.repl_gui_skip_err_cnt { + width: 30px; +} + +.color_gray { + color: gray; +} + +.max_height_400 { + max-height: 400px; +} + +li.last.database { + // Avoid having the last item of the tree hidden behind the scroll bar + margin-bottom: 15px !important; +} + +/* specific elements */ + +ul.tabs { + font-weight: bold; + list-style-type: none; + margin: 0; + padding: 0; +} + +/* zoom search */ +div#dataDisplay { + input, + select { + margin: 0; + margin-right: 0.5em; + } + + th { + line-height: 2em; + } +} + +img.calendar { + border: none; +} + +form.clock { + text-align: center; +} + +div#tablestatistics table { + float: left; + margin-top: 0.5em; + margin-bottom: 0.5em; + margin-right: 0.5em; + min-width: 16em; +} + +#topmenucontainer { + background: white; + padding-right: 1em; + width: 100%; +} + +#page_nav_icons { + position: fixed; + top: 0; + right: 0; + z-index: 99; + padding: $breadcrumb-navbar-padding-y $breadcrumb-padding-x; +} + +#page_settings_icon { + cursor: pointer; + display: none; +} + +#page_settings_modal, +#pma_navigation_settings { + display: none; +} + +#textSQLDUMP { + width: 95%; + height: 95%; + font-family: $font-family-monospace; + font-size: 110%; +} + +#TooltipContainer { + position: absolute; + z-index: 99; + width: 20em; + height: auto; + overflow: visible; + visibility: hidden; + background-color: #ffc; + color: #060; + border: 0.1em solid #000; + padding: 0.5em; +} + +#fieldset_add_user_login { + div.item { + border-bottom: 1px solid silver; + padding-bottom: 0.3em; + margin-bottom: 0.3em; + } + + label { + float: left; + display: block; + width: 15em; + max-width: 100%; + text-align: right; + padding-right: 0.5em; + } + + span.options { + float: left; + display: block; + width: 12em; + max-width: 100%; + padding-right: 0.5em; + + #select_pred_username, + #select_pred_hostname, + #select_pred_password { + width: 100%; + max-width: 100%; + } + } + + input { + width: 12em; + clear: right; + max-width: 100%; + } + + span.options input { + width: auto; + } +} + +#fieldset_user_priv div.item { + float: left; + width: 9em; + max-width: 100%; + + div.item { + float: none; + } + + label { + white-space: nowrap; + } + + select { + width: 100%; + } +} + +#fieldset_user_global_rights .pma-fieldset, +#fieldset_user_group_rights .pma-fieldset { + float: left; +} + +#fieldset_user_global_rights > legend input { + margin-left: 2em; +} + +.linkElem:hover { + text-decoration: underline; + color: #235a81; + cursor: pointer; +} + +h3#serverstatusqueries span { + font-size: 60%; + display: inline; +} + +div#serverStatusTabs { + margin-top: 1em; +} + +caption a.top { + float: right; +} + +div { + &#serverstatusquerieschart { + float: left; + width: 500px; + height: 350px; + margin-right: 50px; + } +} + +div { + &#serverstatus table { + tbody td.descr a, + .tblFooters a { + white-space: nowrap; + } + } + + &.liveChart { + clear: both; + min-width: 500px; + height: 400px; + padding-bottom: 80px; + } +} + +div#chartVariableSettings { + border: 1px solid #ddd; + background-color: #e6e6e6; + margin-left: 10px; +} + +table#chartGrid { + td { + padding: 3px; + margin: 0; + } + + div.monitorChart { + background: #ebebeb; + border: none; + min-width: 1px; + } +} + +div.tabLinks { + margin-left: 0.3em; + float: left; + padding: 5px 0; + + a, + label { + margin-right: 7px; + } + + .icon { + margin: -0.2em 0.3em 0 0; + } +} + +.popupContent { + display: none; + position: absolute; + border: 1px solid #ccc; + margin: 0; + padding: 3px; + box-shadow: 2px 2px 3px #666; + background-color: white; + z-index: 2; +} + +div#logTable { + padding-top: 10px; + clear: both; + + table { + width: 100%; + } +} + +.smallIndent { + padding-left: 7px; +} + +/* profiling */ +div#profilingchart { + width: 850px; + height: 370px; + float: left; +} + +#profilingchart .jqplot-highlighter-tooltip { + top: auto !important; + left: 11px; + bottom: 24px; +} + +textarea { + &#sqlquery { + width: 100%; + } + + &#sql_query_edit { + height: 7em; + width: 95%; + display: block; + } +} + +/* end querybox */ + +/* main page */ + +#maincontainer { + background-image: url("../img/logo_right.png"); + background-position: right bottom; + background-repeat: no-repeat; +} + +#mysqlmaininformation, +#pmamaininformation { + float: left; + width: 49%; +} + +#maincontainer { + ul { + list-style-type: disc; + vertical-align: middle; + } + + li { + margin: 0.2em 0; + } +} + +#full_name_layer { + position: absolute; + padding: 2px; + margin-top: -3px; + z-index: 801; + border: solid 1px #888; + background: #fff; +} + +#body_browse_foreigners { + background: $navi-background; + margin: 0.5em 0.5em 0 0.5em; +} + +#bodythemes { + width: 500px; + margin: auto; + text-align: center; + + img { + border: 0.1em solid #000; + } + + a:hover img { + border: 0.1em solid red; + } +} + +#selflink { + clear: both; + display: block; + margin-top: 1em; + margin-bottom: 1em; + width: 98%; + margin-left: 1%; + border-top: 0.1em solid silver; + text-align: right; +} + +#qbe_div_table_list, +#qbe_div_sql_query { + float: left; +} + +kbd { + color: $main-color; + background-color: transparent; + box-shadow: none; +} + +code { + font-size: 1em; + color: $main-color; + + &.php { + display: block; + padding-left: 0.3em; + margin-top: 0; + margin-bottom: 0; + max-height: 10em; + overflow: auto; + direction: ltr; + } + + &.sql { + display: block; + padding: 0.3em; + margin-top: 0; + margin-bottom: 0; + max-height: 10em; + overflow: auto; + direction: ltr; + } +} + +div.sqlvalidate { + display: block; + padding: 0.3em; + margin-top: 0; + margin-bottom: 0; + max-height: 10em; + overflow: auto; + direction: ltr; +} + +.result_query div.sqlOuter, +div.sqlvalidate { + border: $main-color solid 1px; + border-top: 0; + border-bottom: 0; + background: $bg-one; +} + +.result_query div.sqlOuter { + text-align: left; +} + +#PMA_slidingMessage code.sql { + border: $main-color solid 1px; + border-top: 0; + background: $bg-one; +} + +textarea#partitiondefinition { + height: 3em; +} + +/* for elements that should be revealed only via js */ +.hide { + display: none; +} + +#list_server { + list-style-type: none; + padding: 0; +} + +/** + * Progress bar styles + */ + +div { + &.upload_progress { + width: 400px; + margin: 3em auto; + text-align: center; + } + + &.upload_progress_bar_outer { + border: 1px solid #000; + width: 202px; + position: relative; + margin: 0 auto 1em; + color: $main-color; + } + + &.upload_progress_bar_inner { + background-color: $navi-pointer-background; + width: 0; + height: 12px; + margin: 1px; + overflow: hidden; + color: $browse-marker-color; + position: relative; + } + + &.upload_progress_bar_outer div.percentage { + position: absolute; + top: 0; + left: 0; + width: 202px; + } + + &.upload_progress_bar_inner div.percentage { + top: -1px; + left: -1px; + } + + &#statustext { + margin-top: 0.5em; + } +} + +table { + &#serverconnection_src_remote, + &#serverconnection_trg_remote, + &#serverconnection_src_local, + &#serverconnection_trg_local { + float: left; + } +} + +/** + * Validation error message styles + */ + +input { + &[type="text"].invalid_value, + &[type="password"].invalid_value, + &[type="number"].invalid_value, + &[type="date"].invalid_value { + background: #fcc; + } +} + +select.invalid_value, +.invalid_value { + background: #fcc; +} + +/** + * Ajax notification styling + */ +.ajax_notification { + // The notification needs to be shown on the top of the page + top: 0; + position: fixed; + margin-top: 0; + margin-right: auto; + margin-bottom: 0; + margin-left: auto; + // Keep a little space on the sides of the text + padding: 3px 5px; + width: 350px; + background-color: #ffd700; + // If this is not kept at a high z-index, the jQueryUI modal dialogs (z-index:1000) might hide this + z-index: 1100; + text-align: center; + display: block; + left: 0; + right: 0; + background-image: url("../img/ajax_clock_small.gif"); + background-repeat: no-repeat; + background-position: 2%; +} + +#loading_parent { + /** Need this parent to properly center the notification division */ + position: relative; + width: 100%; +} + +#popup_background { + display: none; + position: fixed; + width: 100%; + height: 100%; + top: 0; + left: 0; + background: #000; + z-index: 1000; + overflow: hidden; +} + +/** + * Create table styles + */ +#create_table_form table.table-name td { + vertical-align: middle; +} + +#tablestructure tbody label { + margin: 0.3rem 0; +} + +#structure-action-links a { + margin-right: 1em; +} + +#addColumns input { + &[type="radio"] { + margin: 0; + margin-left: 1em; + } + + &[type="submit"] { + margin-left: 1em; + } +} + +/** + * Indexes + */ + +#index_frm { + .index_info { + input[type="text"], + select { + width: 100%; + box-sizing: border-box; + } + } + + .slider { + width: 10em; + margin: 0.6em; + float: left; + } + + .add_fields { + float: left; + + input { + margin-left: 1em; + } + } + + input { + margin: 0; + } + + td { + vertical-align: middle; + } +} + +table#index_columns { + width: 100%; + + select { + width: 85%; + float: right; + } +} + +#move_columns_dialog { + div { + padding: 1em; + } + + ul { + list-style: none; + margin: 0; + padding: 0; + } + + li { + background: $th-background; + border: 1px solid #aaa; + color: $th-color; + font-weight: bold; + margin: 0.4em; + padding: 0.2em; + border-radius: 2px; + } +} + +/* config forms */ + +.config-form { + .card { + margin-top: 0; + } + + fieldset { + margin-top: 0; + padding: 0; + clear: both; + } + + legend { + display: none; + } + + fieldset { + p { + margin: 0; + padding: 0.5em; + background: $bg-two; + } + + /* form error list */ + .errors { + margin: 0 -2px 1em -2px; + padding: 0.5em 1.5em; + background: #fbead9; + border-color: #c83838; + border-style: solid; + border-width: 1px 0; + list-style: none; + font-family: sans-serif; + font-size: small; + } + + /* field error list */ + .inline_errors { + margin: 0.3em 0.3em 0.3em 0; + padding: 0; + list-style: none; + color: #9a0000; + font-size: small; + } + + th { + padding: 0.3em 0.3em 0.3em 0.5em; + text-align: left; + vertical-align: top; + background: transparent; + } + + .doc { + margin-left: 1em; + } + + .disabled-notice { + margin-left: 1em; + font-size: 80%; + text-transform: uppercase; + color: #e00; + cursor: help; + } + + td { + padding-top: 0.3em; + padding-bottom: 0.3em; + vertical-align: top; + border-top: 1px solid $bg-two; + } + + th { + border-top: 1px solid $bg-two; + + small { + display: block; + font-weight: normal; + font-family: sans-serif; + font-size: x-small; + color: #444; + } + } + } +} + +fieldset { + .group-header { + th { + background: $bg-two; + } + + + tr th { + padding-top: 0.6em; + } + } + + .group-field-1 th, + .group-header-2 th { + padding-left: 1.5em; + } + + .group-field-2 th, + .group-header-3 th { + padding-left: 3em; + } + + .group-field-3 th { + padding-left: 4.5em; + } + + .disabled-field { + th { + color: #666; + background-color: #ddd; + + small { + color: #666; + background-color: #ddd; + } + } + + td { + color: #666; + background-color: #ddd; + } + } +} + +.config-form { + span.checkbox { + padding: 2px; + display: inline-block; + } + + /* customized field */ + .custom { + background: #ffc; + } + + span.checkbox.custom { + padding: 1px; + border: 1px #edec90 solid; + background: #ffc; + } + + .field-error { + border-color: #a11 !important; + } + + input { + &[type="text"], + &[type="password"], + &[type="number"] { + border: 1px #a7a6aa solid; + height: auto; + } + } + + select, + textarea { + border: 1px #a7a6aa solid; + height: auto; + } + + input { + &[type="text"]:focus, + &[type="password"]:focus, + &[type="number"]:focus { + border: 1px #6676ff solid; + background: #f7fbff; + } + } + + select:focus, + textarea:focus { + border: 1px #6676ff solid; + background: #f7fbff; + } + + .field-comment-mark { + font-family: serif; + color: #007; + cursor: help; + padding: 0 0.2em; + font-weight: bold; + font-style: italic; + } + + .field-comment-warning { + color: #a00; + } + + dd { + margin-left: 0.5em; + + &::before { + content: "\25B8 "; + } + } +} + +.click-hide-message { + cursor: pointer; +} + +.prefsmanage_opts { + margin-left: 2em; +} + +#prefs_autoload { + margin-bottom: 0.5em; + margin-left: 0.5em; +} + +input#auto_increment_opt { + width: min-content; +} + +#placeholder { + .button { + position: absolute; + cursor: pointer; + } + + div.button { + font-size: smaller; + color: #999; + background-color: #eee; + padding: 2px; + } +} + +.wrapper { + float: left; + margin-bottom: 0.5em; +} + +.toggleButton { + position: relative; + cursor: pointer; + font-size: 0.8em; + text-align: center; + line-height: 1.4em; + height: 1.55em; + overflow: hidden; + border-right: 0.1em solid #888; + border-left: 0.1em solid #888; + + table, + td, + img { + padding: 0; + position: relative; + } + + .toggle-container { + position: absolute; + + td, + tr { + background: none !important; + } + } + + .toggleOn { + color: #fff; + padding: 0 1em; + } + + .toggleOff { + padding: 0 1em; + } +} + +.doubleFieldset { + .pma-fieldset { + width: 48%; + float: left; + padding: 0; + } + + legend { + margin-left: 0.5em; + } + + div.wrap { + padding: 0.5em; + } +} + +#table_name_col_no_outer { + margin-top: 45px; +} + +#table_name_col_no { + position: fixed; + top: 44px; + width: 100%; + background: $body-bg; +} + +#table_columns { + display: block; + overflow: auto; + + input { + &[type="text"], + &[type="password"], + &[type="number"], + &[type="date"] { + width: 10em; + box-sizing: border-box; + } + } + + select { + width: 10em; + box-sizing: border-box; + } +} + +#placeholder { + position: relative; + border: 1px solid #aaa; + float: right; + overflow: hidden; + width: 450px; + height: 300px; +} + +#openlayersmap { + width: 450px; + height: 300px; +} + +.placeholderDrag { + cursor: move; +} + +#placeholder .button { + position: absolute; +} + +#left_arrow { + left: 8px; + top: 26px; +} + +#right_arrow { + left: 26px; + top: 26px; +} + +#up_arrow { + left: 17px; + top: 8px; +} + +#down_arrow { + left: 17px; + top: 44px; +} + +#zoom_in { + left: 17px; + top: 67px; +} + +#zoom_world { + left: 17px; + top: 85px; +} + +#zoom_out { + left: 17px; + top: 103px; +} + +.colborder { + cursor: col-resize; + height: 100%; + margin-left: -5px; + position: absolute; + width: 5px; +} + +.colborder_active { + border-right: 2px solid #a44; +} + +.pma_table { + th.draggable span { + display: block; + overflow: hidden; + } +} + +.pma_table { + td { + position: static; + } + + tbody td span { + display: block; + overflow: hidden; + + code span { + display: inline; + } + } +} + +.modal-copy input { + display: block; + width: 100%; + margin-top: 1.5em; + padding: 0.3em 0; +} + +.cRsz { + position: absolute; +} + +.draggable { + cursor: move; +} + +.cCpy { + background: #000; + color: #fff; + font-weight: bold; + margin: 0.1em; + padding: 0.3em; + position: absolute; +} + +.cPointer { + $height: 20px; + $width: 10px; + + height: $height; + width: $width; + margin-top: $height * -0.5; + margin-left: $width * -0.5; + position: absolute; + background: url("../img/col_pointer.png"); +} + +.tooltip { + background: #333 !important; + opacity: 0.8 !important; + z-index: 9999; + border: 1px solid #000 !important; + border-radius: 0.3em !important; + text-shadow: -1px -1px #000 !important; + font-size: 0.8em !important; + font-weight: bold !important; + padding: 1px 3px !important; + + * { + background: none !important; + color: #fff !important; + } +} + +.cDrop { + right: 0; + position: absolute; + top: 0; +} + +.coldrop { + background: url("../img/col_drop.png"); + cursor: pointer; + height: 16px; + margin-top: 0.3em; + width: 16px; + + &:hover { + background-color: #999; + } +} + +.coldrop-hover { + background-color: #999; +} + +.cList { + background: #eee; + border: solid 1px #999; + position: absolute; + margin-left: 75%; + right: 0; + max-width: 100%; + overflow-wrap: break-word; + + .lDiv div { + padding: 0.2em 0.5em 0.2em 0.2em; + + &:hover { + background: #ddd; + cursor: pointer; + } + + input { + cursor: pointer; + } + } +} + +.showAllColBtn { + border-bottom: solid 1px #999; + border-top: solid 1px #999; + cursor: pointer; + font-size: 0.9em; + font-weight: bold; + padding: 0.35em 1em; + text-align: center; + + &:hover { + background: #ddd; + } +} + +.navigation { + background: #e5e5e5; + border: 1px solid black; + margin: 0.8em 0; + + td { + margin: 0; + padding: 0; + vertical-align: middle; + white-space: nowrap; + } +} + +.navigation_separator { + color: #555; + display: inline-block; + text-align: center; + width: 1.2em; + text-shadow: 1px 0 #fff; +} + +.navigation { + input { + &[type="submit"] { + background: none; + border: 0; + margin: 0; + padding: 0.3em 0.5em; + min-width: 1.5em; + font-weight: bold; + + &:hover { + background: #333; + color: white; + cursor: pointer; + } + } + + &.edit_mode_active { + background: #333; + color: white; + cursor: pointer; + } + } + + select { + margin: 0 0.8em; + } +} + +.cEdit { + margin: 0; + padding: 0; + position: absolute; + + input { + &[type="text"], + &[type="password"], + &[type="number"] { + background: #fff; + height: 100%; + margin: 0; + padding: 0; + } + } + + .edit_area { + background: #fff; + border: 1px solid #999; + min-width: 10em; + padding: 0.3em 0.5em; + + select, + textarea { + width: 97%; + } + } + + .cell_edit_hint { + color: #555; + font-size: 0.8em; + margin: 0.3em 0.2em; + } + + .edit_box { + overflow-x: hidden; + overflow-y: scroll; + padding: 0; + } + + .edit_box_posting { + background: #fff url("../img/ajax_clock_small.gif") no-repeat right center; + padding-right: 1.5em; + } + + .edit_area_loading { + background: #fff url("../img/ajax_clock_small.gif") no-repeat center; + height: 10em; + } + + .goto_link { + background: #eee; + color: #555; + padding: 0.2em 0.3em; + } +} + +.saving_edited_data { + background: url("../img/ajax_clock_small.gif") no-repeat left; + padding-left: 20px; +} + +/* css for timepicker */ + +.ui-timepicker-div { + .ui-widget-header { + margin-bottom: 8px; + } + + dl { + text-align: left; + + dt { + height: 25px; + margin-bottom: -25px; + } + + dd { + margin: 0 10px 10px 85px; + } + } + + td { + font-size: 90%; + } +} + +.ui-tpicker-grid-label { + background: none; + border: none; + margin: 0; + padding: 0; +} + +.ui-timepicker-rtl { + direction: rtl; + + dl { + text-align: right; + + dd { + margin: 0 65px 10px 10px; + } + } +} + +input.btn { + color: #333; + background-color: #d0dce0; +} + +body .ui-widget { + font-size: 1em; +} + +body #ui-datepicker-div { + z-index: 9999 !important; +} + +.ui-dialog .pma-fieldset legend a { + color: #00f; +} + +.ui-draggable { + z-index: 801; +} + +.relationalTable { + td { + vertical-align: top; + } + + select { + width: 125px; + margin-right: 5px; + } +} + +div#page_content div { + &#tableslistcontainer { + margin-top: 1em; + + table.data { + border-top: 0.1px solid #eee; + } + } + + &.result_query { + margin-top: 1em; + } +} + +table.show_create { + margin-top: 1em; + + td { + border-right: 1px solid #bbb; + } +} + +#alias_modal { + table { + width: 100%; + } + + label { + font-weight: bold; + } +} + +.ui-dialog { + position: fixed; +} + +.small_font { + font-size: smaller; +} + +/* Console styles */ +#pma_console_container { + width: 100%; + position: fixed; + bottom: 0; + left: 0; + z-index: 100; +} + +textarea { + resize: both; +} + +#pma_console { + position: relative; + margin-left: 240px; + z-index: 100; + + .templates { + display: none; + } + + .mid_text { + vertical-align: middle; + } + + .toolbar { + position: relative; + background: #ccc; + border-top: solid 1px #aaa; + cursor: n-resize; + + span { + vertical-align: middle; + } + + &.collapsed { + cursor: default; + + &:not(:hover) { + display: inline-block; + border-top-right-radius: 3px; + border-right: solid 1px #aaa; + } + + > .button { + display: none; + } + } + } + + .message span { + &.text, + &.action { + padding: 0 3px; + display: inline-block; + } + } + + .toolbar { + .button, + .text { + padding: 0 3px; + display: inline-block; + } + } + + .switch_button { + padding: 0 3px; + display: inline-block; + } + + .message span.action, + .toolbar .button, + .switch_button { + cursor: pointer; + } + + .message span.action:hover, + .toolbar .button:hover, + .switch_button:hover { + background: #ddd; + } + + .toolbar { + .button.active { + background: #ddd; + } + + .text { + font-weight: bold; + } + + .button, + .text { + margin-right: 0.4em; + float: right; + } + } + + .content { + overflow-x: hidden; + overflow-y: auto; + margin-bottom: -65px; + border-top: solid 1px #aaa; + background: #fff; + padding-top: 0.4em; + + &.console_dark_theme { + background: #000; + color: #fff; + + .CodeMirror-wrap { + background: #000; + color: #fff; + } + + .action_content { + color: #000; + } + + .message { + border-color: #373b41; + } + + .CodeMirror-cursor { + border-color: #fff; + } + + .cm-keyword { + color: #de935f; + } + } + } + + .message, + .query_input { + position: relative; + font-family: Monaco, Consolas, monospace; + cursor: text; + margin: 0 10px 0.2em 1.4em; + } + + .message { + border-bottom: solid 1px #ccc; + padding-bottom: 0.2em; + + &.expanded > .action_content { + position: relative; + } + + &::before { + left: -0.7em; + position: absolute; + content: ">"; + } + } + + .query_input { + &::before { + left: -0.7em; + position: absolute; + content: ">"; + top: -2px; + } + + textarea { + width: 100%; + height: 4em; + resize: vertical; + } + } + + .message { + &:hover::before { + color: #7cf; + font-weight: bold; + } + + &.expanded::before { + content: "]"; + } + + &.welcome::before { + display: none; + } + + &.failed { + &::before, + &.expanded::before, + &:hover::before { + content: "="; + color: #944; + } + } + + &.pending::before { + opacity: 0.3; + } + + &.collapsed > .query { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + } + + &.expanded > .query { + display: block; + white-space: pre; + word-wrap: break-word; + } + + .text.targetdb, + &.collapsed .action.collapse, + &.expanded .action.expand { + display: none; + } + + .action { + &.requery, + &.profiling, + &.explain, + &.bookmark { + display: none; + } + } + + &.select .action { + &.profiling, + &.explain { + display: inline-block; + } + } + + &.history .text.targetdb, + &.successed .text.targetdb { + display: inline-block; + } + + &.history .action { + &.requery, + &.bookmark { + display: inline-block; + } + } + + &.bookmark .action { + &.requery, + &.bookmark { + display: inline-block; + } + } + + &.successed .action { + &.requery, + &.bookmark { + display: inline-block; + } + } + + .action_content { + position: absolute; + bottom: 100%; + background: #ccc; + border: solid 1px #aaa; + border-top-left-radius: 3px; + } + + &.bookmark .text.targetdb, + .text.query_time { + margin: 0; + display: inline-block; + } + + &.failed .text.query_time, + .text.failed { + display: none; + } + + &.failed .text.failed { + display: inline-block; + } + + .text { + background: #fff; + } + + &.collapsed { + > .action_content { + display: none; + } + + &:hover > .action_content { + display: block; + } + } + + .bookmark_label { + padding: 0 4px; + top: 0; + background: #369; + color: #fff; + border-radius: 3px; + + &.shared { + background: #396; + } + } + + &.expanded .bookmark_label { + border-top-left-radius: 0; + border-top-right-radius: 0; + } + } + + .query_input { + position: relative; + } + + .mid_layer { + height: 100%; + width: 100%; + position: absolute; + top: 0; + + /* For support IE8, this layer doesn't use filter:opacity or opacity, + js code will fade this layer opacity to 0.18(using animation) */ + background: #666; + display: none; + cursor: pointer; + z-index: 200; + } + + .card { + position: absolute; + width: 94%; + height: 100%; + min-height: 48px; + left: 100%; + top: 0; + border-left: solid 1px #999; + z-index: 300; + transition: left 0.2s; + + &.show { + left: 6%; + box-shadow: -2px 1px 4px -1px #999; + } + } +} + +#pma_bookmarks .content.add_bookmark, +#pma_console_options .content { + padding: 4px 6px; +} + +#pma_bookmarks .content.add_bookmark { + .options { + margin-left: 1.4em; + padding-bottom: 0.4em; + margin-bottom: 0.4em; + border-bottom: solid 1px #ccc; + + button { + margin: 0 7px; + vertical-align: bottom; + } + } + + input[type="text"] { + margin: 0; + padding: 2px 4px; + } +} + +#pma_console { + .button.hide, + .message span.text.hide { + display: none; + } +} + +#debug_console { + &.grouped .ungroup_queries { + display: inline-block; + } + + &.ungrouped { + .group_queries { + display: inline-block; + } + + .ungroup_queries, + .sort_count { + display: none; + } + } + + &.grouped .group_queries { + display: none; + } + + .count { + margin-right: 8px; + } + + .show_trace .trace, + .show_args .args { + display: block; + } + + .hide_trace .trace, + .hide_args .args, + .show_trace .action.dbg_show_trace, + .hide_trace .action.dbg_hide_trace { + display: none; + } + + .traceStep { + &.hide_args .action.dbg_hide_args, + &.show_args .action.dbg_show_args { + display: none; + } + + &::after { + content: ""; + display: table; + clear: both; + } + } + + .trace.welcome::after, + .debug > .welcome::after { + content: ""; + display: table; + clear: both; + } + + .debug_summary { + float: left; + } + + .trace.welcome .time, + .traceStep .file, + .script_name { + float: right; + } + + .traceStep .args pre { + margin: 0; + } +} + +/* Code mirror console style */ + +.cm-s-pma { + .CodeMirror-code { + font-family: Monaco, Consolas, monospace; + + pre { + font-family: Monaco, Consolas, monospace; + } + } + + .CodeMirror-measure > pre, + .CodeMirror-code > pre, + .CodeMirror-lines { + padding: 0; + } + + &.CodeMirror { + resize: none; + height: auto; + width: 100%; + min-height: initial; + max-height: initial; + } + + .CodeMirror-scroll { + cursor: text; + } +} + +/* PMA drop-improt style */ + +.pma_drop_handler { + display: none; + position: fixed; + top: 0; + left: 0; + width: 100%; + background: rgba(0, 0, 0, 0.6); + height: 100%; + z-index: 999; + color: white; + font-size: 30pt; + text-align: center; + padding-top: 20%; +} + +.pma_sql_import_status { + display: none; + position: fixed; + bottom: 0; + right: 25px; + width: 400px; + border: 1px solid #999; + background: #f3f3f3; + border-radius: 4px; + box-shadow: 2px 2px 5px #ccc; + + h2 { + background-color: #bbb; + padding: 0.1em 0.3em; + margin-top: 0; + margin-bottom: 0; + color: #fff; + font-size: 1.6em; + font-weight: normal; + text-shadow: 0 1px 0 #777; + box-shadow: 1px 1px 15px #999 inset; + } +} + +.pma_drop_result h2 { + background-color: #bbb; + padding: 0.1em 0.3em; + margin-top: 0; + margin-bottom: 0; + color: #fff; + font-size: 1.6em; + font-weight: normal; + text-shadow: 0 1px 0 #777; + box-shadow: 1px 1px 15px #999 inset; +} + +.pma_sql_import_status { + div { + height: 270px; + overflow-y: auto; + overflow-x: hidden; + list-style-type: none; + + li { + padding: 8px 10px; + border-bottom: 1px solid #bbb; + color: rgb(148, 14, 14); + background: white; + + .filesize { + float: right; + } + } + } + + h2 { + .minimize { + float: right; + margin-right: 5px; + padding: 0 10px; + } + + .close { + float: right; + margin-right: 5px; + padding: 0 10px; + display: none; + } + + .minimize:hover, + .close:hover { + background: rgba(155, 149, 149, 0.78); + cursor: pointer; + } + } +} + +.pma_drop_result h2 .close:hover { + background: rgba(155, 149, 149, 0.78); + cursor: pointer; +} + +.pma_drop_file_status { + color: #235a81; + + span.underline:hover { + cursor: pointer; + text-decoration: underline; + } +} + +.pma_drop_result { + position: fixed; + top: 10%; + left: 20%; + width: 60%; + background: white; + min-height: 300px; + z-index: 800; + box-shadow: 0 0 15px #999; + border-radius: 10px; + cursor: move; + + h2 .close { + float: right; + margin-right: 5px; + padding: 0 10px; + } +} + +#composite_index_list { + list-style-type: none; + list-style-position: inside; +} + +span.drag_icon { + display: inline-block; + background-image: url("../img/s_sortable.png"); + background-position: center center; + background-repeat: no-repeat; + width: 1em; + height: 3em; + cursor: move; +} + +.topmargin { + margin-top: 1em; +} + +/* styles for jQuery-ui to support rtl languages */ + +body { + .ui-dialog { + .ui-dialog-titlebar-close { + right: 0.3em; + left: initial; + } + + .ui-dialog-title { + float: left; + } + + .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; + } + } + + .ui-corner-all, + .ui-corner-top, + .ui-corner-left, + .ui-corner-tl { + border-top-left-radius: 0; + } + + .ui-corner-all, + .ui-corner-top, + .ui-corner-right, + .ui-corner-tr { + border-top-right-radius: 0; + } + + .ui-corner-all, + .ui-corner-bottom, + .ui-corner-left, + .ui-corner-bl { + border-bottom-left-radius: 0; + } + + .ui-corner-all, + .ui-corner-bottom, + .ui-corner-right, + .ui-corner-br { + border-bottom-right-radius: 0; + } + + .ui-dialog { + padding: 0; + border-color: #000; + + .ui-dialog-titlebar { + padding: 0.3em 0.5em; + border: none; + border-bottom: 1px solid #000; + + button { + border: 1px solid #999; + } + } + + .ui-dialog-content { + padding: 0.2em 0.4em; + } + + .ui-dialog-buttonpane { + background: #d3dce3; + border-top: 1px solid #000; + + button { + margin: 0.1em 0 0.1em 0.4em; + border: 1px solid #999; + color: #000; + } + } + + .ui-button-text-only .ui-button-text { + padding: 0.2em 0.6em; + } + } +} + +/* templates/database/multi_table_query */ + +.multi_table_query_form { + .query-form__tr--hide { + display: none; + } + + .query-form__fieldset--inline, + .query-form__select--inline { + display: inline; + } + + .query-form__tr--bg-none { + background: none; + } + + .query-form__input--wide { + width: 91%; + } + + .query-form__multi-sql-query { + float: left; + } +} + +/* templates/database/designer */ + +/* side menu */ +#name-panel { + overflow: hidden; +} + +@media only screen and (max-width: 768px) { + .responsivetable { + overflow-x: auto; + } + + body#loginform div.container { + width: 100%; + } + + .largescreenonly { + display: none; + } + + .width96 { + width: 96% !important; + } + + #page_nav_icons { + display: none; + } + + #table_name_col_no { + top: 62px; + } + + .tdblock tr td { + display: block; + } + + #table_columns { + margin-top: 60px; + + .tablesorter { + min-width: 100%; + } + } + + .doubleFieldset .pma-fieldset { + width: 98%; + } + + div#serverstatusquerieschart { + width: 100%; + height: 450px; + } + + .ui-dialog { + margin: 1%; + width: 95% !important; + } + + #server-breadcrumb .item { + margin: 4px; + } +} + +#tooltip_editor { + font-size: 12px; + background-color: #fff; + opacity: 0.95; + filter: alpha(opacity=95); + padding: 5px; +} + +#tooltip_font { + font-weight: bold; +} + +#selection_box { + z-index: 1000; + height: 205px; + position: absolute; + background-color: #87ceeb; + opacity: 0.4; + filter: alpha(opacity=40); + pointer-events: none; +} + +#filterQueryText { + vertical-align: baseline; +} + +.ui_tpicker_hour_slider, +.ui_tpicker_minute_slider, +.ui_tpicker_second_slider, +.ui_tpicker_millisec_slider, +.ui_tpicker_microsec_slider { + margin-left: 20px; + margin-top: 4px; + height: 0.75rem; +} + +.ui_tpicker_time_input { + width: 100%; +} + +// Enable scrollable blocks of code +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +// Extra large devices (large desktops, 1200px and up) +@include media-breakpoint-up(xl) { + div.tools { + text-align: left; + } + + .pma-fieldset.tblFooters, + .tblFooters { + text-align: left; + } +} + +.resize-vertical { + resize: vertical; +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/scss/_reboot.scss b/Sources/php_script/script/phpMyAdmin/themes/original/scss/_reboot.scss new file mode 100644 index 0000000..fc5ef85 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/original/scss/_reboot.scss @@ -0,0 +1,17 @@ +// Body + +body { + text-align: left; +} + +// Forms + +input, +select { + font-size: 1em; +} + +textarea { + font-family: $font-family-monospace; + font-size: 1.2em; +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/scss/_variables.scss b/Sources/php_script/script/phpMyAdmin/themes/original/scss/_variables.scss new file mode 100644 index 0000000..c9e2af6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/original/scss/_variables.scss @@ -0,0 +1,172 @@ +// configures general layout for detailed layout configuration please refer to the css files + +// navi frame + +// navi frame width +$navi-width: 240px; + +// foreground (text) color for the navi frame +$navi-color: #000; + +// background for the navi frame +$navi-background: #d0dce0; + +// foreground (text) color of the pointer in navi frame +$navi-pointer-color: #000; + +// background of the pointer in navi frame +$navi-pointer-background: #99c; + +// main frame + +// foreground (text) color for the main frame +$main-color: #000; + +// foreground (text) color of the pointer in browse mode +$browse-pointer-color: #000; + +// background of the pointer in browse mode +$browse-pointer-background: #cfc; + +// foreground (text) color of the marker (visually marks row by clicking on it) +// in browse mode +$browse-marker-color: #000; + +// background of the marker (visually marks row by clicking on it) in browse mode +$browse-marker-background: #fc9; + +// tables + +// border +$border: 0; +// table header and footer color +$th-background: #d3dce3; +// table header and footer background +$th-color: #000; +// table data row background +$bg-one: #e5e5e5; +// table data row background, alternate +$bg-two: #d5d5d5; + +// Bootstrap +// --------- + +// Body + +$body-bg: #f5f5f5; +$body-color: $main-color; + +// Links + +$link-color: #00f; +$link-decoration: none; +$link-hover-color: #f00; +$link-hover-decoration: underline; + +// Components + +$border-radius: 0; + +// Typography + +$font-family-base: sans-serif; +$font-family-monospace: monospace; + +$font-size-base: 0.82rem; + +$h1-font-size: 140%; +$h2-font-size: 120%; +$h3-font-size: 1rem; + +$headings-font-weight: bold; + +// Tables + +$table-cell-padding: 0.1em 0.5em; +$table-cell-padding-sm: $table-cell-padding; +$table-striped-order: even; +$table-bg: transparent; +$table-hover-bg: $browse-pointer-background; +$table-hover-color: $browse-pointer-color; +$table-head-color: $th-color; +$table-head-bg: $th-background; + +// Dropdowns + +$dropdown-padding-y: 0; +$dropdown-item-padding-y: 0; +$dropdown-item-padding-x: 0; + +// Navs + +$nav-tabs-border-color: transparent; +$nav-tabs-link-active-border-color: $bg-two $bg-two #f5f5f5; +$nav-tabs-link-hover-border-color: $bg-two $bg-two #f5f5f5; +$nav-tabs-link-active-color: #00f; +$nav-tabs-link-active-bg: $bg-one; + +// Navbar + +$enable-transitions: false; +$enable-caret: false; +$navbar-padding-y: 0; +$navbar-padding-x: 0; +$navbar-nav-link-padding-x: 2px; +$navbar-nav-link-padding-y: 2px; +$navbar-light-color: #00f; +$navbar-light-hover-color: #f00; +$navbar-light-active-color: #00f; +$navbar-light-disabled-color: #00f; + +// Pagination + +$pagination-border-color: $main-color; +$pagination-hover-border-color: $main-color; +$pagination-active-border-color: $main-color; +$pagination-disabled-border-color: $main-color; + +// Card + +$card-border-radius: 0; +$card-border-color: $main-color; +$card-cap-bg: $th-background; +$card-bg: $bg-one; +$card-spacer-y: 0.5em; +$card-spacer-x: 0.5em; + +// Accordion + +$accordion-button-padding-y: 0.375rem; +$accordion-button-padding-x: 0.75rem; +$accordion-button-color: #00f; +$accordion-button-active-color: #00f; +$accordion-button-active-bg: $bg-one; + +// Breadcrumbs + +$breadcrumb-navbar-padding-y: 0.1rem; +$breadcrumb-navbar-padding-x: 2.2em; +$breadcrumb-navbar-margin-bottom: 0; +$breadcrumb-navbar-bg: white; +$breadcrumb-divider-color: inherit; +$breadcrumb-divider: quote("»"); + +// Alert + +$alert-margin-bottom: 0.2em; +$alert-border-radius: 0; +$alert-border-width: 2px; + +// List group + +$list-group-bg: inherit; +$list-group-item-padding-x: 0.75rem; +$list-group-item-padding-y: 0.375rem; + +// Modals + +$modal-content-border-radius: 0; +$modal-header-border-color: #000; +$modal-inner-padding: 0.75rem; +$modal-footer-margin-between: 0.1rem; +$modal-header-padding-y: 0.4rem; diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/scss/theme.scss b/Sources/php_script/script/phpMyAdmin/themes/original/scss/theme.scss new file mode 100644 index 0000000..d3af823 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/original/scss/theme.scss @@ -0,0 +1,21 @@ +@import "variables"; +@import "../../bootstrap/scss/bootstrap"; +@import "common"; +@import "../../pmahomme/scss/enum-editor"; +@import "../../pmahomme/scss/gis"; +@import "navigation"; +@import "../../pmahomme/scss/designer"; +@import "../../pmahomme/scss/codemirror"; +@import "../../pmahomme/scss/jqplot"; +@import "icons"; +@import "reboot"; +@import "tables"; +@import "forms"; +@import "nav"; +@import "navbar"; +@import "card"; +@import "breadcrumb"; +@import "alert"; +@import "list-group"; +@import "modal"; +@import "../../pmahomme/scss/print"; diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/theme.json b/Sources/php_script/script/phpMyAdmin/themes/original/theme.json new file mode 100644 index 0000000..a2f6e50 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/original/theme.json @@ -0,0 +1,8 @@ +{ + "name": "Original", + "version": "5.0", + "description": "Original phpMyAdmin theme", + "author": "phpMyAdmin developers", + "url": "https://www.phpmyadmin.net/", + "supports": ["5.0", "5.1", "5.2"] +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.css.map b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.css.map new file mode 100644 index 0000000..6f7826f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../../../node_modules/bootstrap/scss/_root.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../node_modules/bootstrap/scss/_variables.scss","../scss/_variables.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_containers.scss","../../../node_modules/bootstrap/scss/mixins/_container.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../../node_modules/bootstrap/scss/forms/_labels.scss","../../../node_modules/bootstrap/scss/forms/_form-text.scss","../../../node_modules/bootstrap/scss/forms/_form-control.scss","../../../node_modules/bootstrap/scss/mixins/_box-shadow.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/forms/_form-select.scss","../../../node_modules/bootstrap/scss/forms/_form-check.scss","../../../node_modules/bootstrap/scss/forms/_form-range.scss","../../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../../node_modules/bootstrap/scss/forms/_input-group.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_transitions.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_card.scss","../../../node_modules/bootstrap/scss/_accordion.scss","../../../node_modules/bootstrap/scss/_breadcrumb.scss","../../../node_modules/bootstrap/scss/_pagination.scss","../../../node_modules/bootstrap/scss/mixins/_pagination.scss","../../../node_modules/bootstrap/scss/_badge.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/mixins/_alert.scss","../../../node_modules/bootstrap/scss/_list-group.scss","../../../node_modules/bootstrap/scss/mixins/_list-group.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/_modal.scss","../../../node_modules/bootstrap/scss/mixins/_backdrop.scss","../../../node_modules/bootstrap/scss/_spinners.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../../node_modules/bootstrap/scss/helpers/_position.scss","../../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/helpers/_vr.scss","../../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../../node_modules/bootstrap/scss/utilities/_api.scss","../scss/_common.scss","../scss/_enum-editor.scss","../scss/_gis.scss","../scss/_navigation.scss","../scss/_designer.scss","../scss/_codemirror.scss","../scss/_jqplot.scss","../scss/_icons.scss","../scss/_reboot.scss","../scss/_tables.scss","../scss/_forms.scss","../scss/_buttons.scss","../scss/_nav.scss","../scss/_navbar.scss","../scss/_card.scss","../../bootstrap/scss/_breadcrumb.scss","../scss/_breadcrumb.scss","../scss/_pagination.scss","../scss/_alert.scss","../scss/_list-group.scss","../scss/_modal.scss","../scss/_print.scss"],"names":[],"mappings":"CAAA,MAQI,kQAIA,+MAIA,mKAIA,+OAGF,8BACA,wBACA,gCACA,gCAMA,sNACA,+BACA,0FAQA,kCACA,6BACA,2BACA,2BACA,sBAIA,mBCnCF,qBAGE,sBAeE,8CANJ,MAOM,wBAcN,KACE,SACA,uCCmPI,UALI,yBD5OR,uCACA,uCACA,2BACA,qCACA,mCACA,8BACA,0CAUF,GACE,cACA,ME+kB4B,QF9kB5B,8BACA,SACA,QE8kB4B,IF3kB9B,eACE,OEwb4B,IF9a9B,0CACE,aACA,cEohB4B,MFjhB5B,YEohB4B,IFnhB5B,YEohB4B,IFhhB9B,OCoMM,UALI,KD1LV,OC+LM,UALI,IDrLV,OC0LM,UALI,KDhLV,OCqLM,UALI,QD3KV,OCgLM,UALI,SDtKV,OC2KM,UALI,QD3JV,EACE,aACA,cEkU0B,KFvT5B,yCAEE,iCACA,YACA,8BAMF,QACE,mBACA,kBACA,oBAMF,MAEE,kBAGF,SAGE,aACA,mBAGF,wBAIE,gBAGF,GACE,YEuZ4B,IFlZ9B,GACE,oBACA,cAMF,WACE,gBAQF,SAEE,YEgY4B,OFxX9B,aC4EM,UALI,QDhEV,WACE,QE4b4B,KF3b5B,iBEmc4B,QF1b9B,QAEE,kBCwDI,UALI,ODjDR,cACA,wBAGF,mBACA,eAKA,EACE,MG9LW,QH+LX,gBG9LgB,KHgMhB,QACE,MGhMe,QHiMf,gBGhMoB,UH0MtB,4DAEE,cACA,qBAOJ,kBAIE,YE6S4B,yBD/RxB,UALI,IDPR,+BACA,2BAOF,IACE,cACA,aACA,mBACA,wBCLQ,QDUR,SCLI,UALI,QDYN,cACA,kBAIJ,KCZM,UALI,QDmBR,ME1QQ,QF2QR,qBAGA,OACE,cAIJ,IACE,oBCxBI,UALI,QD+BR,MEvTS,KFwTT,iBE/SS,QEEP,oBJgTF,QACE,UC/BE,UALI,IDsCN,YE0Q0B,IFjQ9B,OACE,gBAMF,QAEE,sBAQF,MACE,oBACA,yBAGF,QACE,YEwU4B,MFvU5B,eEuU4B,MFtU5B,ME1VS,QF2VT,gBAOF,GAEE,mBACA,gCAGF,2BAME,qBACA,mBACA,eAQF,MACE,qBAMF,OAEE,gBAQF,iCACE,UAKF,sCAKE,SACA,oBC9HI,UALI,QDqIR,oBAIF,cAEE,oBAKF,cACE,eAGF,OAGE,iBAGA,gBACE,UAOJ,0CACE,aAQF,gDAIE,0BAGE,4GACE,eAON,mBACE,UACA,kBAKF,SACE,gBAUF,SACE,YACA,UACA,SACA,SAQF,OACE,WACA,WACA,UACA,cE6J4B,MDhXtB,iCDsNN,oBCxXE,0BDiXJ,OCxMQ,kBDiNN,SACE,WAOJ,+OAOE,UAGF,4BACE,YASF,cACE,oBACA,6BAmBF,4BACE,wBAKF,+BACE,UAMF,uBACE,aAMF,6BACE,aACA,0BAKF,OACE,qBAKF,OACE,SAOF,QACE,kBACA,eAQF,SACE,wBAQF,SACE,wBKnlBF,MJyQM,UALI,SIlQR,YHumB4B,IGlmB5B,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBIvPR,eCrDE,eACA,gBDyDF,aC1DE,eACA,gBD4DF,kBACE,qBAEA,mCACE,aH8lB0B,MGplB9B,YJsNM,UALI,QI/MR,yBAIF,YACE,cHgSO,KDjFH,UALI,SIvMR,wBACE,gBAIJ,mBACE,iBACA,cHsRO,KDjFH,UALI,QI9LR,MHpFS,QGsFT,2BACE,aE/FF,mGCHA,WACA,0CACA,yCACA,kBACA,iBCwDE,yBF5CE,yBACE,ULide,OOtanB,yBF5CE,uCACE,ULide,OOtanB,yBF5CE,qDACE,ULide,OOtanB,0BF5CE,mEACE,ULide,QOtanB,0BF5CE,kFACE,ULide,QQherB,2BCCA,iBACA,aACA,eAEA,uCACA,2CACA,0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iCH3EF,4BGyEA,qBACE,gBACA,kCH3EF,4BGyEA,qBACE,gBACA,kCH3EF,4BGyEA,qBACE,gBACA,kCH3EF,6BGyEA,qBACE,gBACA,kCH3EF,6BGyEA,sBACE,gBACA,kCEnJN,YACE,cZwzBsC,MY/yBxC,gBACE,iCACA,oCACA,gBboRI,UALI,Qa3QR,YZgkB4B,IY5jB9B,mBACE,+BACA,kCb0QI,UALI,SajQV,mBACE,gCACA,mCboQI,UALI,Uc5RV,WACE,WbgzBsC,ODhhBlC,UALI,QcvRR,MbKS,QcVX,cACE,cACA,WACA,uBf8RI,UALI,QetRR,YdqkB4B,IcpkB5B,Yd0kB4B,IczkB5B,MbWW,KaVX,iBdLS,KcMT,4BACA,yBACA,gBZGE,qBaLE,WARW,iCDkBf,yBACE,gBAEA,wDACE,eAKJ,oBACE,MbXS,KaYT,iBd3BO,Kc4BP,ad8zBoC,Kc7zBpC,UCvBE,WARW,oED2Cf,2CAEE,aAIF,2BACE,Md1CO,Qc4CP,UAQF,+CAEE,iBd1DO,Qc6DP,UAIF,oCACE,uBACA,0BACA,kBd0pB0B,OczpB1B,MbxDS,KenBX,iBhBMS,QgBHP,oCF0EA,oBACA,qBACA,mBACA,eACA,wBdgb0B,Ic/a1B,gBAIF,yEACE,iBd+5B8B,Qc55BhC,0CACE,uBACA,0BACA,kBduoB0B,OctoB1B,Mb3ES,KenBX,iBhBMS,QgBHP,oCF6FA,oBACA,qBACA,mBACA,eACA,wBd6Z0B,Ic5Z1B,gBAIF,+EACE,iBd44B8B,Qcn4BlC,wBACE,cACA,WACA,kBACA,gBACA,Ydyd4B,Icxd5B,MbtGW,KauGX,+BACA,2BACA,mBAEA,gFAEE,gBACA,eAWJ,iBACE,WdguBsC,2Bc/tBtC,qBfmJI,UALI,UG7QN,oBYmIF,uCACE,qBACA,wBACA,kBd2lB0B,McxlB5B,6CACE,qBACA,wBACA,kBdqlB0B,McjlB9B,iBACE,Wd8sBsC,yBc7sBtC,mBfgII,UALI,SG7QN,oBYsJF,uCACE,mBACA,qBACA,kBd4kB0B,KczkB5B,6CACE,mBACA,qBACA,kBdskB0B,Kc9jB5B,sBACE,WdqrBoC,4BclrBtC,yBACE,WdkrBoC,2Bc/qBtC,yBACE,Wd+qBoC,yBc1qBxC,oBACE,Md6qBsC,Kc5qBtC,YACA,Qd4hB4B,Qc1hB5B,mDACE,eAGF,uCACE,aZ/LA,qBYmMF,0CACE,aZpMA,qBedJ,aACE,cACA,WACA,uCAEA,uClB2RI,UALI,QkBnRR,YjBkkB4B,IiBjkB5B,YjBukB4B,IiBtkB5B,MhBQW,KgBPX,iBjBRS,KiBST,iPACA,4BACA,oBjBg7BkC,oBiB/6BlC,gBjBg7BkC,UiB/6BlC,yBfFE,qBaLE,WARW,iCEmBf,gBAEA,mBACE,ajBs0BoC,KiBr0BpC,UFfE,WARW,oEEgCf,0DAEE,cjBgsB0B,OiB/rB1B,sBAGF,sBAEE,iBjBpCO,QiByCT,4BACE,oBACA,uBAIJ,gBACE,YjByrB4B,OiBxrB5B,ejBwrB4B,OiBvrB5B,ajBwrB4B,MD/cxB,UALI,UG7QN,oBe8CJ,gBACE,YjBqrB4B,MiBprB5B,ejBorB4B,MiBnrB5B,ajBorB4B,KDndxB,UALI,SG7QN,oBgBfJ,YACE,cACA,WlBq3BwC,QkBp3BxC,alBq3BwC,MkBp3BxC,clBq3BwC,QkBn3BxC,8BACE,WACA,mBAIJ,kBACE,MlBy2BwC,IkBx2BxC,OlBw2BwC,IkBv2BxC,iBACA,mBACA,iBlBbS,KkBcT,4BACA,2BACA,wBACA,OlB42BwC,0BkB32BxC,gBACA,mBAGA,iChBXE,oBgBeF,8BAEE,clBm2BsC,IkBh2BxC,yBACE,OlB01BsC,gBkBv1BxC,wBACE,alBszBoC,KkBrzBpC,UACA,WlBmsB4B,mCkBhsB9B,0BACE,iBjB0DgC,QiBzDhC,ajByDgC,QiBvDhC,yCAEI,kQAMJ,sCAEI,0KAON,+CACE,iBjBsBM,KiBrBN,ajBqBM,KiBlBJ,4PAMJ,2BACE,oBACA,YACA,QlBk0BuC,GkB3zBvC,2FACE,QlB0zBqC,GkB5yB3C,aACE,alBqzBgC,MkBnzBhC,+BACE,MlBizB8B,IkBhzB9B,mBACA,wKACA,gChB9FA,kBgBkGA,qCACE,0JAGF,uCACE,oBlBgzB4B,akB7yB1B,0KAQR,mBACE,qBACA,alBmxBgC,KkBhxBlC,WACE,kBACA,sBACA,oBAIE,mDACE,oBACA,YACA,QlBqoBwB,ImBnxB9B,YACE,WACA,cACA,UACA,+BACA,gBAEA,kBACE,UAIA,mDnB89BuC,kDmB79BvC,+CnB69BuC,kDmB19BzC,8BACE,SAGF,kCACE,MnB+8BuC,KmB98BvC,OnB88BuC,KmB78BvC,oBHzBF,iBfyFQ,KetFN,oCGwBA,OnB88BuC,EE19BvC,mBaLE,WARW,8BI6Bb,gBAEA,yCHjCF,iBhB8+ByC,QgB3+BvC,oCGmCF,2CACE,MnBw7B8B,KmBv7B9B,OnBw7B8B,MmBv7B9B,oBACA,OnBu7B8B,QmBt7B9B,iBnBpCO,QmBqCP,2BjB7BA,mBaLE,WARW,iCI+Cf,8BACE,MnBo7BuC,KmBn7BvC,OnBm7BuC,KgBt+BzC,iBfyFQ,KetFN,oCGkDA,OnBo7BuC,EE19BvC,mBaLE,WARW,8BIuDb,gBAEA,qCH3DF,iBhB8+ByC,QgB3+BvC,oCG6DF,8BACE,MnB85B8B,KmB75B9B,OnB85B8B,MmB75B9B,oBACA,OnB65B8B,QmB55B9B,iBnB9DO,QmB+DP,2BjBvDA,mBaLE,WARW,iCIyEf,qBACE,oBAEA,2CACE,iBnBtEK,QmByEP,uCACE,iBnB1EK,QoBbX,eACE,kBAEA,yDAEE,OpBy/B8B,mBoBx/B9B,YpBy/B8B,KoBt/BhC,qBACE,kBACA,MACA,OACA,YACA,oBACA,oBACA,+BACA,qBAKF,6BACE,oBAEA,0CACE,oBAGF,wFAEE,YpBm+B4B,SoBl+B5B,epBm+B4B,QoBh+B9B,8CACE,YpB89B4B,SoB79B5B,epB89B4B,QoB19BhC,4BACE,YpBw9B8B,SoBv9B9B,epBw9B8B,QoBl9B9B,sIACE,QpBk9B4B,IoBj9B5B,UpBk9B4B,oDoB78B9B,oDACE,QpB28B4B,IoB18B5B,UpB28B4B,oDqBjgClC,aACE,kBACA,aACA,eACA,oBACA,WAEA,qDAEE,kBACA,cACA,SACA,YAIF,iEAEE,UAMF,kBACE,kBACA,UAEA,wBACE,UAWN,kBACE,aACA,mBACA,uBtBsPI,UALI,QsB/OR,YrB8hB4B,IqB7hB5B,YrBmiB4B,IqBliB5B,MpB5BW,KoB6BX,kBACA,mBACA,iBrB5CS,QqB6CT,yBnBpCE,qBmB8CJ,kHAIE,mBtBgOI,UALI,SG7QN,oBmBuDJ,kHAIE,qBtBuNI,UALI,UG7QN,oBmBgEJ,0DAEE,mBAaE,qKnB/DA,0BACA,6BmBqEA,4JnBtEA,0BACA,6BmBgFF,0IACE,iBnBpEA,yBACA,4BoBzBF,gBACE,aACA,WACA,WtByxBoC,ODhhBlC,UALI,QuBjQN,MtB0/BqB,QsBv/BvB,eACE,kBACA,SACA,UACA,aACA,eACA,qBACA,iBvB4PE,UALI,UuBpPN,MAvBc,KAwBd,iBAvBiB,mBpBHjB,qBoB+BA,8HAEE,cA9CF,0DAoDE,atB+9BmB,QsB59BjB,ctB+yBgC,sBsB9yBhC,4PACA,4BACA,2DACA,gEAGF,sEACE,atBo9BiB,QsBn9BjB,WA/Ca,iCAjBjB,0EAyEI,ctB6xBgC,sBsB5xBhC,kFA1EJ,wDAiFE,atBk8BmB,QsB/7BjB,4NAEE,ctB42B8B,SsB32B9B,4dACA,6DACA,0EAIJ,oEACE,atBq7BiB,QsBp7BjB,WA9Ea,iCAjBjB,kEAsGE,atB66BmB,QsB36BnB,kFACE,iBtB06BiB,QsBv6BnB,8EACE,WA5Fa,iCA+Ff,sGACE,MtBk6BiB,QsB75BrB,qDACE,iBAvHF,sKA+HI,UAIF,8LACE,UAjHN,kBACE,aACA,WACA,WtByxBoC,ODhhBlC,UALI,QuBjQN,MtB0/BqB,QsBv/BvB,iBACE,kBACA,SACA,UACA,aACA,eACA,qBACA,iBvB4PE,UALI,UuBpPN,MAvBc,KAwBd,iBAvBiB,mBpBHjB,qBoB+BA,8IAEE,cA9CF,8DAoDE,atB+9BmB,QsB59BjB,ctB+yBgC,sBsB9yBhC,4UACA,4BACA,2DACA,gEAGF,0EACE,atBo9BiB,QsBn9BjB,WA/Ca,iCAjBjB,8EAyEI,ctB6xBgC,sBsB5xBhC,kFA1EJ,4DAiFE,atBk8BmB,QsB/7BjB,oOAEE,ctB42B8B,SsB32B9B,4iBACA,6DACA,0EAIJ,wEACE,atBq7BiB,QsBp7BjB,WA9Ea,iCAjBjB,sEAsGE,atB66BmB,QsB36BnB,sFACE,iBtB06BiB,QsBv6BnB,kFACE,WA5Fa,iCA+Ff,0GACE,MtBk6BiB,QsB75BrB,uDACE,iBAvHF,8KAiII,UAEF,sMACE,UCtIR,KACE,qBAEA,YvBwkB4B,IuBvkB5B,YtByFgB,KsBxFhB,MtBcW,KsBbX,kBAGA,sBACA,eACA,iBACA,+BACA,+BC8GA,uBzBsKI,UALI,QG7QN,qBqBEF,WACE,MtBCS,0BsBGX,iCAEE,UACA,WvBotB4B,mCuBjtB9B,uERlBI,WARW,iCQgCb,+FRxBE,WARW,oEQqCf,mDAGE,oBACA,QvB0uB0B,Ie3wBxB,WARW,KQqDf,aCvCA,MAXQ,KRLR,iBhB4Ea,KgBzEX,oCQeF,axB0Da,KelET,WARW,+DSmBf,mBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,iDAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,iGSsCf,0IAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,wKTzCE,WARW,mES2Df,4CAEE,MAjDe,KAkDf,iBxBYW,KwBVX,sBACA,axBSW,KuBrBb,eCvCA,MAXQ,KRLR,iBhB4Ea,KgBzEX,oCQeF,axB0Da,KelET,WARW,+DSmBf,qBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,qDAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,iGSsCf,oJAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,kLTzCE,WARW,mES2Df,gDAEE,MAjDe,KAkDf,iBxBYW,KwBVX,sBACA,axBSW,KuBrBb,aCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,mBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,iDAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,gGSsCf,0IAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,wKTzCE,WARW,kES2Df,4CAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBrBb,UCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,gBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,2CAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,gGSsCf,2HAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,yJTzCE,WARW,kES2Df,sCAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBrBb,aCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,mBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,iDAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,+FSsCf,0IAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,wKTzCE,WARW,iES2Df,4CAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBrBb,YCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,kBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,+CAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,+FSsCf,qIAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,mKTzCE,WARW,iES2Df,0CAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBrBb,WCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,iBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,6CAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,iGSsCf,gIAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,8JTzCE,WARW,mES2Df,wCAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBrBb,UCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,gBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,2CAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,8FSsCf,2HAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,yJTzCE,WARW,gES2Df,sCAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBfb,qBCmBA,MxBJa,KwBKb,axBLa,KwBOb,2BACE,MATY,KAUZ,iBxBTW,KwBUX,axBVW,KwBab,iEAEE,6CAGF,iLAKE,MArBa,KAsBb,iBxBxBW,KwByBX,axBzBW,KwB2BX,+MT7FE,WARW,mES+Gf,4DAEE,MxBvCW,KwBwCX,+BDvDF,uBCmBA,MxBJa,KwBKb,axBLa,KwBOb,6BACE,MATY,KAUZ,iBxBTW,KwBUX,axBVW,KwBab,qEAEE,6CAGF,2LAKE,MArBa,KAsBb,iBxBxBW,KwByBX,axBzBW,KwB2BX,yNT7FE,WARW,mES+Gf,gEAEE,MxBvCW,KwBwCX,+BDvDF,qBCmBA,MxBJa,QwBKb,axBLa,QwBOb,2BACE,MATY,KAUZ,iBxBTW,QwBUX,axBVW,QwBab,iEAEE,2CAGF,iLAKE,MArBa,KAsBb,iBxBxBW,QwByBX,axBzBW,QwB2BX,+MT7FE,WARW,iES+Gf,4DAEE,MxBvCW,QwBwCX,+BDvDF,kBCmBA,MxBJa,QwBKb,axBLa,QwBOb,wBACE,MATY,KAUZ,iBxBTW,QwBUX,axBVW,QwBab,2DAEE,4CAGF,kKAKE,MArBa,KAsBb,iBxBxBW,QwByBX,axBzBW,QwB2BX,gMT7FE,WARW,kES+Gf,sDAEE,MxBvCW,QwBwCX,+BDvDF,qBCmBA,MxBJa,QwBKb,axBLa,QwBOb,2BACE,MATY,KAUZ,iBxBTW,QwBUX,axBVW,QwBab,iEAEE,2CAGF,iLAKE,MArBa,KAsBb,iBxBxBW,QwByBX,axBzBW,QwB2BX,+MT7FE,WARW,iES+Gf,4DAEE,MxBvCW,QwBwCX,+BDvDF,oBCmBA,MxBJa,QwBKb,axBLa,QwBOb,0BACE,MATY,KAUZ,iBxBTW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M,iGAGE,0BAEF,oGAGE,6BAIJ,oC5BrJJ,yBACA,4B4BuJM,mGAGE,yBAEF,sGAGE,6BC7MZ,kBACE,kBACA,aACA,mBACA,WACA,uBhC4RI,UALI,QgCrRR,M9BYW,K8BXX,gBACA,iB/BLS,K+BMT,S7BKE,gB6BHF,qBAGA,kCACE,M9B6H4B,Q8B5H5B,iB9BVc,Q8BWd,2CAEA,yCACE,iSACA,U/B4vCoC,gB+BvvCxC,yBACE,cACA,M/BivCsC,Q+BhvCtC,O/BgvCsC,Q+B/uCtC,iBACA,WACA,8RACA,4BACA,gB/B2uCsC,Q+BvuCxC,wBACE,UAGF,wBACE,UACA,a/BizBoC,K+BhzBpC,UACA,W/B8rB4B,mC+B1rBhC,kBACE,gBAGF,gBACE,iB/BpDS,K+BqDT,kCAEA,8B7BnCE,8BACA,+B6BqCA,gD7BtCA,2CACA,4C6B0CF,oCACE,aAIF,6B7BlCE,kCACA,iC6BqCE,yD7BtCF,+CACA,8C6B0CA,iD7B3CA,kCACA,iC6BgDJ,gBACE,qBASA,qCACE,eAGF,iCACE,eACA,c7BxFA,gB6B2FA,0DACA,4DAEA,mD7B9FA,gB8BnBJ,YACE,aACA,eACA,YACA,chCw/CkC,KgCt/ClC,gBAOA,kCACE,ahC6+CgC,MgC3+ChC,0CACE,WACA,chCy+C8B,MgCx+C9B,M/BuIqB,K+BtIrB,uFAIJ,wBACE,MhCXO,QiCdX,YACE,a7BGA,eACA,2B6BCA,kBACA,cACA,MhCoDW,QgClDX,iBjCFS,KiCGT,sBAGA,iBACE,UACA,MhC8Ce,QgC7Cf,qBACA,iBjCRO,QiCSP,ahCgH4B,KgC7G9B,iBACE,UACA,MhCsCe,QgCrCf,iBjCfO,QiCgBP,QjC4qCgC,EiC3qChC,WjCstB4B,mCiCjtB9B,wCACE,YjC+pCgC,KiC5pClC,6BACE,UACA,MhC2FsB,Qe7HxB,iBfyFQ,KetFN,oCiBiCA,ahC4F6B,KgCzF/B,+BACE,MjC9BO,QiC+BP,oBACA,iBjCtCO,KiCuCP,ahCsF+B,KiCjIjC,WACE,uBAOI,kChCqCJ,8BACA,iCgChCI,iChCiBJ,+BACA,kCgChCF,0BACE,sBnCgSE,UALI,SmCpRF,iDhCqCJ,6BACA,gCgChCI,gDhCiBJ,8BACA,iCgChCF,0BACE,qBnCgSE,UALI,UmCpRF,iDhCqCJ,6BACA,gCgChCI,gDhCiBJ,8BACA,iCiC/BJ,OACE,qBACA,oBpC8RI,UALI,OoCvRR,YnCukB4B,ImCtkB5B,cACA,MnCHS,KmCIT,kBACA,mBACA,wBjCKE,qBcZA,oCmBYF,aACE,aAKJ,YACE,kBACA,SCvBF,OACE,kBACA,kBACA,cnC8JoB,KmC7JpB,+BlCWE,kBkCNJ,eAEE,cAIF,YACE,YpC4jB4B,IoCpjB9B,mBACE,cpCm5C8B,KoCh5C9B,8BACE,kBACA,MACA,QACA,UACA,qBAeF,eClDA,MDgDgB,QpB9ChB,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,2BACE,cD6CF,iBClDA,MDgDgB,QpB9ChB,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,6BACE,cD6CF,eClDA,MD8Cc,QpB5Cd,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,2BACE,cD6CF,YClDA,MDgDgB,QpB9ChB,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,wBACE,cD6CF,eClDA,MDgDgB,QpB9ChB,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,2BACE,cD6CF,cClDA,MD8Cc,QpB5Cd,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,0BACE,cD6CF,aClDA,MDgDgB,QpB9ChB,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,yBACE,cD6CF,YClDA,MD8Cc,QpB5Cd,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,wBACE,cCHJ,YACE,aACA,sBAGA,eACA,gBpCSE,qBoCLJ,qBACE,qBACA,sBAEA,gCAEE,oCACA,0BAUJ,wBACE,WACA,MtClBS,QsCmBT,mBAGA,4DAEE,UACA,MtCzBO,QsC0BP,qBACA,iBtCjCO,QsCoCT,+BACE,MrCvBS,KqCwBT,iBtCrCO,QsC8CX,iBACE,kBACA,cACA,uBACA,MtC3CS,QsC6CT,iBrC4Gc,QqC3Gd,kCAEA,6BpCrCE,+BACA,gCoCwCF,4BpC3BE,mCACA,kCoC8BF,oDAEE,MtC7DO,QsC8DP,oBACA,iBrC6FY,QqCzFd,wBACE,UACA,MtC3EO,KsC4EP,iBrCSM,KqCRN,arCQM,KqCLR,kCACE,mBAEA,yCACE,gBACA,iBtCwawB,IsC1Z1B,uBACE,mBAGE,oDpCrCJ,iCAZA,0BoCsDI,mDpCtDJ,+BAYA,4BoC+CI,+CACE,aAGF,yDACE,iBtCuYoB,IsCtYpB,oBAEA,gEACE,iBACA,kBtCkYkB,IOtc1B,yB+B4CA,0BACE,mBAGE,uDpCrCJ,iCAZA,0BoCsDI,sDpCtDJ,+BAYA,4BoC+CI,kDACE,aAGF,4DACE,iBtCuYoB,IsCtYpB,oBAEA,mEACE,iBACA,kBtCkYkB,KOtc1B,yB+B4CA,0BACE,mBAGE,uDpCrCJ,iCAZA,0BoCsDI,sDpCtDJ,+BAYA,4BoC+CI,kDACE,aAGF,4DACE,iBtCuYoB,IsCtYpB,oBAEA,mEACE,iBACA,kBtCkYkB,KOtc1B,yB+B4CA,0BACE,mBAGE,uDpCrCJ,iCAZA,0BoCsDI,sDpCtDJ,+BAYA,4BoC+CI,kDACE,aAGF,4DACE,iBtCuYoB,IsCtYpB,oBAEA,mEACE,iBACA,kBtCkYkB,KOtc1B,0B+B4CA,0BACE,mBAGE,uDpCrCJ,iCAZA,0BoCsDI,sDpCtDJ,+BAYA,4BoC+CI,kDACE,aAGF,4DACE,iBtCuYoB,IsCtYpB,oBAEA,mEACE,iBACA,kBtCkYkB,KOtc1B,0B+B4CA,2BACE,mBAGE,wDpCrCJ,iCAZA,0BoCsDI,uDpCtDJ,+BAYA,4BoC+CI,mDACE,aAGF,6DACE,iBtCuYoB,IsCtYpB,oBAEA,oEACE,iBACA,kBtCkYkB,KsCpX9B,kBpC9HI,gBoCiIF,mCACE,qBAEA,8CACE,sBCpJJ,yBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,4GAEE,MD6JuB,QC5JvB,yBAGF,uDACE,MvCRG,KuCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,2BACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,gHAEE,MD6JuB,QC5JvB,yBAGF,yDACE,MvCRG,KuCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,yBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,4GAEE,MD2JqB,QC1JrB,yBAGF,uDACE,MvCRG,KuCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,sBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,sGAEE,MD6JuB,QC5JvB,yBAGF,oDACE,MvCRG,KuCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,yBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,4GAEE,MD6JuB,QC5JvB,yBAGF,uDACE,MvCRG,KuCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,wBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,0GAEE,MD2JqB,QC1JrB,yBAGF,sDACE,MvCRG,KuCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,uBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,wGAEE,MD6JuB,QC5JvB,yBAGF,qDACE,MvCRG,KuCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,sBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,sGAEE,MD2JqB,QC1JrB,yBAGF,oDACE,MvCRG,KuCSH,iBDqJqB,QCpJrB,aDoJqB,QEjK7B,WACE,uBACA,MxCqjD2B,IwCpjD3B,OxCojD2B,IwCnjD3B,oBACA,MxCQS,KwCPT,6WACA,StCOE,qBsCLF,QxCqjD2B,GwCljD3B,iBACE,WACA,qBACA,QxCgjDyB,IwC7iD3B,iBACE,UACA,WxCwtB4B,mCwCvtB5B,QxC2iDyB,EwCxiD3B,wCAEE,oBACA,iBACA,QxCqiDyB,IwCjiD7B,iBACE,OxCiiD2B,2CyChkD7B,OACE,eACA,MACA,OACA,QzCsiCkC,KyCriClC,aACA,WACA,YACA,kBACA,gBAGA,UAOF,cACE,kBACA,WACA,OzCi2CkC,MyC/1ClC,oBAGA,0BAEE,UzCu3CgC,oByCr3ClC,0BACE,UzCq3CgC,KyCj3ClC,kCACE,UzCk3CgC,YyC92CpC,yBACE,yBAEA,wCACE,gBACA,gBAGF,qCACE,gBAIJ,uBACE,aACA,mBACA,6BAIF,eACE,kBACA,aACA,sBACA,WAGA,oBACA,iBzCpES,KyCqET,4BACA,gCvC3DE,oBaLE,WARW,kC0B4Ef,UAIF,gBCpFE,eACA,MACA,OACA,Q1C2iCkC,K0C1iClC,YACA,aACA,iB1CUS,K0CPT,+BACA,6B1Ci4CkC,GyCjzCpC,cACE,aACA,cACA,mBACA,8BACA,QzCmzCkC,ayClzClC,gCvCtEE,0CACA,2CuCwEF,yBACE,sBACA,sCAKJ,aACE,gBACA,YzCue4B,IyCle9B,YACE,kBAGA,cACA,QxCuCoB,OwCnCtB,cACE,aACA,eACA,cACA,mBACA,yBACA,cACA,6BvCzFE,8CACA,6CuC8FF,gBACE,clC3EA,yBkCkFF,cACE,UzCqwCgC,MyCpwChC,oBAGF,yBACE,2BAGF,uBACE,+BAGF,e1BhJI,WARW,6B0B4Jf,oBzCovCkC,OOv1ChC,yBkCuGF,oBAEE,UzCgvCgC,OOz1ChC,0BkC8GF,oBzC4uCkC,QyCnuChC,kBACE,YACA,eACA,YACA,SAEA,iCACE,YACA,SvC3KJ,gBuC+KE,gCvC/KF,gBuCmLE,8BACE,gBAGF,gCvCvLF,gBKyDA,4BkC0GA,0BACE,YACA,eACA,YACA,SAEA,yCACE,YACA,SvC3KJ,gBuC+KE,wCvC/KF,gBuCmLE,sCACE,gBAGF,wCvCvLF,iBKyDA,4BkC0GA,0BACE,YACA,eACA,YACA,SAEA,yCACE,YACA,SvC3KJ,gBuC+KE,wCvC/KF,gBuCmLE,sCACE,gBAGF,wCvCvLF,iBKyDA,4BkC0GA,0BACE,YACA,eACA,YACA,SAEA,yCACE,YACA,SvC3KJ,gBuC+KE,wCvC/KF,gBuCmLE,sCACE,gBAGF,wCvCvLF,iBKyDA,6BkC0GA,0BACE,YACA,eACA,YACA,SAEA,yCACE,YACA,SvC3KJ,gBuC+KE,wCvC/KF,gBuCmLE,sCACE,gBAGF,wCvCvLF,iBKyDA,6BkC0GA,2BACE,YACA,eACA,YACA,SAEA,0CACE,YACA,SvC3KJ,gBuC+KE,yCvC/KF,gBuCmLE,uCACE,gBAGF,yCvCvLF,iByCdJ,0BACE,8CAIF,gBACE,qBACA,M3CiiDwB,K2ChiDxB,O3CgiDwB,K2C/hDxB,e3CiiDwB,S2ChiDxB,gCACA,iCAEA,kBACA,8CAGF,mBACE,M3C4hDwB,K2C3hDxB,O3C2hDwB,K2C1hDxB,a3C4hDwB,K2CphD1B,wBACE,GACE,mBAEF,IACE,UACA,gBAKJ,cACE,qBACA,M3C+/CwB,K2C9/CxB,O3C8/CwB,K2C7/CxB,e3C+/CwB,S2C9/CxB,8BAEA,kBACA,UACA,4CAGF,iBACE,M3C0/CwB,K2Cz/CxB,O3Cy/CwB,K2Cr/CxB,uCACE,8BAEE,yBC/DJ,iBACE,cACA,WACA,WCJF,cACE,M7C8EW,K6C3ET,wCAEE,cANN,gBACE,M7C8EW,K6C3ET,4CAEE,cANN,cACE,M7C8EW,Q6C3ET,wCAEE,cANN,WACE,M7C8EW,Q6C3ET,kCAEE,cANN,cACE,M7C8EW,Q6C3ET,wCAEE,cANN,aACE,M7C8EW,Q6C3ET,sCAEE,cANN,YACE,M7C8EW,Q6C3ET,oCAEE,cANN,WACE,M7C8EW,Q6C3ET,kCAEE,cCLR,OACE,kBACA,WAEA,eACE,cACA,mCACA,WAGF,SACE,kBACA,MACA,OACA,WACA,YAKF,WACE,wBADF,WACE,uBADF,YACE,0BADF,YACE,kCCrBJ,WACE,eACA,MACA,QACA,OACA,Q/CsiCkC,K+CniCpC,cACE,eACA,QACA,SACA,OACA,Q/C8hCkC,K+CthChC,YACE,gBACA,MACA,Q/CkhC8B,KO7+BhC,yBwCxCA,eACE,gBACA,MACA,Q/CkhC8B,MO7+BhC,yBwCxCA,eACE,gBACA,MACA,Q/CkhC8B,MO7+BhC,yBwCxCA,eACE,gBACA,MACA,Q/CkhC8B,MO7+BhC,0BwCxCA,eACE,gBACA,MACA,Q/CkhC8B,MO7+BhC,0BwCxCA,gBACE,gBACA,MACA,Q/CkhC8B,MgD3iCpC,QACE,aACA,mBACA,mBACA,mBAGF,QACE,aACA,cACA,sBACA,mBCRF,2ECIE,6BACA,qBACA,sBACA,qBACA,uBACA,2BACA,iCACA,8BACA,oBCXA,uBACE,kBACA,MACA,QACA,SACA,OACA,QnDwbsC,EmDvbtC,WCRJ,+BCCE,uBACA,mBCNF,IACE,qBACA,mBACA,UACA,eACA,8BACA,QtDipB4B,IuDxlBtB,gBAOI,mCAPJ,WAOI,8BAPJ,cAOI,iCAPJ,cAOI,iCAPJ,mBAOI,sCAPJ,gBAOI,mCAPJ,aAOI,sBAPJ,WAOI,uBAPJ,YAOI,sBAPJ,WAOI,qBAPJ,YAOI,uBAPJ,YAOI,sBAPJ,YAOI,uBAPJ,aAOI,qBAPJ,eAOI,yBAPJ,iBAOI,2BAPJ,kBAOI,4BAPJ,iBAOI,2BAPJ,UAOI,0BAPJ,gBAOI,gCAPJ,SAOI,yBAPJ,QAOI,wBAPJ,SAOI,yBAPJ,aAOI,6BAPJ,cAOI,8BAPJ,QAOI,wBAPJ,eAOI,+BAPJ,QAOI,wBAPJ,QAOI,mDAPJ,WAOI,wDAPJ,WAOI,mDAPJ,aAOI,2BAPJ,iBAOI,2BAPJ,mBAOI,6BAPJ,mBAOI,6BAPJ,gBAOI,0BAPJ,iBAOI,2BAPJ,OAOI,iBAPJ,QAOI,mBAPJ,SAOI,oBAPJ,UAOI,oBAPJ,WAOI,sBAPJ,YAOI,uBAPJ,SAOI,kBAPJ,UAOI,oBAPJ,WAOI,qBAPJ,OAOI,mBAPJ,QAOI,qBAPJ,SAOI,sBAPJ,kBAOI,2CAPJ,oBAOI,sCAPJ,oBAOI,sCAPJ,QAOI,oCAPJ,UAOI,oBAPJ,YAOI,wCAPJ,cAOI,wBAPJ,YAOI,0CAPJ,cAOI,0BAPJ,eAOI,2CAPJ,iBAOI,2BAPJ,cAOI,yCAPJ,gBAOI,yBAPJ,gBAOI,6BAPJ,kBAOI,6BAPJ,gBAOI,gCAPJ,aAOI,gCAPJ,gBAOI,gCAPJ,eAOI,gCAPJ,cAOI,gCAPJ,aAOI,gCAPJ,cAOI,6BAPJ,UAOI,4BAPJ,UAOI,4BAPJ,UAOI,4BAPJ,UAOI,4BAPJ,UAOI,4BAPJ,MAOI,qBAPJ,MAOI,qBAPJ,MAOI,qBAPJ,OAOI,sBAPJ,QAOI,sBAPJ,QAOI,0BAPJ,QAOI,uBAPJ,YAOI,2BAPJ,MAOI,sBAPJ,MAOI,sBAPJ,MAOI,sBAPJ,OAOI,uBAPJ,QAOI,uBAPJ,QAOI,2BAPJ,QAOI,wBAPJ,YAOI,4BAPJ,WAOI,yBAPJ,UAOI,8BAPJ,aAOI,iCAPJ,kBAOI,sCAPJ,qBAOI,yCAPJ,aAOI,uBAPJ,aAOI,uBAPJ,eAOI,yBAPJ,eAOI,yBAPJ,WAOI,0BAPJ,aAOI,4BAPJ,mBAOI,kCAPJ,OAOI,iBAPJ,OAOI,sBAPJ,OAOI,qBAPJ,OAOI,oBAPJ,OAOI,sBAPJ,OAOI,oBAPJ,uBAOI,sCAPJ,qBAOI,oCAPJ,wBAOI,kCAPJ,yBAOI,yCAPJ,wBAOI,wCAPJ,wBAOI,wCAPJ,mBAOI,kCAPJ,iBAOI,gCAPJ,oBAOI,8BAPJ,sBAOI,gCAPJ,qBAOI,+BAPJ,qBAOI,oCAPJ,mBAOI,kCAPJ,sBAOI,gCAPJ,uBAOI,uCAPJ,sBAOI,sCAPJ,uBAOI,iCAPJ,iBAOI,2BAPJ,kBAOI,iCAPJ,gBAOI,+BAPJ,mBAOI,6BAPJ,qBAOI,+BAPJ,oBAOI,8BAPJ,aAOI,oBAPJ,SAOI,mBAPJ,SAOI,mBAPJ,SAOI,mBAPJ,SAOI,mBAPJ,SAOI,mBAPJ,SAOI,mBAPJ,YAOI,mBAPJ,KAOI,oBAPJ,KAOI,yBAPJ,KAOI,wBAPJ,KAOI,uBAPJ,KAOI,yBAPJ,KAOI,uBAPJ,QAOI,uBAPJ,MAOI,mDAPJ,MAOI,6DAPJ,MAOI,2DAPJ,MAOI,yDAPJ,MAOI,6DAPJ,MAOI,yDAPJ,SAOI,yDAPJ,MAOI,mDAPJ,MAOI,6DAPJ,MAOI,2DAPJ,MAOI,yDAPJ,MAOI,6DAPJ,MAOI,yDAPJ,SAOI,yDAPJ,MAOI,wBAPJ,MAOI,6BAPJ,MAOI,4BAPJ,MAOI,2BAPJ,MAOI,6BAPJ,MAOI,2BAPJ,SAOI,2BAPJ,MAOI,0BAPJ,MAOI,+BAPJ,MAOI,8BAPJ,MAOI,6BAPJ,MAOI,+BAPJ,MAOI,6BAPJ,SAOI,6BAPJ,MAOI,2BAPJ,MAOI,gCAPJ,MAOI,+BAPJ,MAOI,8BAPJ,MAOI,gCAPJ,MAOI,8BAPJ,SAOI,8BAPJ,MAOI,yBAPJ,MAOI,8BAPJ,MAOI,6BAPJ,MAOI,4BAPJ,MAOI,8BAPJ,MAOI,4BAPJ,SAOI,4BAPJ,KAOI,qBAPJ,KAOI,0BAPJ,KAOI,yBAPJ,KAOI,wBAPJ,KAOI,0BAPJ,KAOI,wBAPJ,MAOI,qDAPJ,MAOI,+DAPJ,MAOI,6DAPJ,MAOI,2DAPJ,MAOI,+DAPJ,MAOI,2DAPJ,MAOI,qDAPJ,MAOI,+DAPJ,MAOI,6DAPJ,MAOI,2DAPJ,MAOI,+DAPJ,MAOI,2DAPJ,MAOI,yBAPJ,MAOI,8BAPJ,MAOI,6BAPJ,MAOI,4BAPJ,MAOI,8BAPJ,MAOI,4BAPJ,MAOI,2BAPJ,MAOI,gCAPJ,MAOI,+BAPJ,MAOI,8BAPJ,MAOI,gCAPJ,MAOI,8BAPJ,MAOI,4BAPJ,MAOI,iCAPJ,MAOI,gCAPJ,MAOI,+BAPJ,MAOI,iCAPJ,MAOI,+BAPJ,MAOI,0BAPJ,MAOI,+BAPJ,MAOI,8BAPJ,MAOI,6BAPJ,MAOI,+BAPJ,MAOI,6BAPJ,gBAOI,gDAPJ,MAOI,0BAPJ,MAOI,yBAPJ,MAOI,0BAPJ,MAOI,6BAPJ,MAOI,8BAPJ,MAOI,6BAPJ,YAOI,6BAPJ,YAOI,6BAPJ,UAOI,2BAPJ,YAOI,+BAPJ,WAOI,2BAPJ,SAOI,2BAPJ,WAOI,8BAPJ,MAOI,yBAPJ,OAOI,4BAPJ,SAOI,2BAPJ,OAOI,yBAPJ,YAOI,2BAPJ,UAOI,4BAPJ,aAOI,6BAPJ,sBAOI,gCAPJ,2BAOI,qCAPJ,8BAOI,wCAPJ,gBAOI,oCAPJ,gBAOI,oCAPJ,iBAOI,qCAPJ,WAOI,8BAPJ,aAOI,8BAPJ,YAOI,iEAPJ,cAIQ,qBAGJ,qEAPJ,gBAIQ,qBAGJ,uEAPJ,cAIQ,qBAGJ,qEAPJ,WAIQ,qBAGJ,kEAPJ,cAIQ,qBAGJ,qEAPJ,aAIQ,qBAGJ,oEAPJ,YAIQ,qBAGJ,mEAPJ,WAIQ,qBAGJ,kEAPJ,YAIQ,qBAGJ,mEAPJ,YAIQ,qBAGJ,mEAPJ,WAIQ,qBAGJ,wEAPJ,YAIQ,qBAGJ,yBAPJ,eAIQ,qBAGJ,gCAPJ,eAIQ,qBAGJ,sCAPJ,YAIQ,qBAGJ,yBAjBJ,iBACE,wBADF,iBACE,uBADF,iBACE,wBADF,kBACE,qBASF,YAIQ,mBAGJ,8EAPJ,cAIQ,mBAGJ,gFAPJ,YAIQ,mBAGJ,8EAPJ,SAIQ,mBAGJ,2EAPJ,YAIQ,mBAGJ,8EAPJ,WAIQ,mBAGJ,6EAPJ,UAIQ,mBAGJ,4EAPJ,SAIQ,mBAGJ,2EAPJ,UAIQ,mBAGJ,4EAPJ,UAIQ,mBAGJ,4EAPJ,SAIQ,mBAGJ,8EAPJ,gBAIQ,mBAGJ,0CAjBJ,eACE,qBADF,eACE,sBADF,eACE,qBADF,eACE,sBADF,gBACE,mBASF,aAOI,+CAPJ,iBAOI,2BAPJ,kBAOI,4BAPJ,kBAOI,4BAPJ,SAOI,+BAPJ,SAOI,+BAPJ,SAOI,gCAPJ,WAOI,2BAPJ,WAOI,+BAPJ,WAOI,gCAPJ,WAOI,+BAPJ,gBAOI,6BAPJ,cAOI,+BAPJ,aAOI,mFAPJ,aAOI,uFAPJ,gBAOI,yFAPJ,eAOI,qFAPJ,SAOI,8BAPJ,WAOI,6BhDPR,yCgDOQ,sBAPJ,cAOI,uBAPJ,eAOI,sBAPJ,aAOI,0BAPJ,mBAOI,gCAPJ,YAOI,yBAPJ,WAOI,wBAPJ,YAOI,yBAPJ,gBAOI,6BAPJ,iBAOI,8BAPJ,WAOI,wBAPJ,kBAOI,+BAPJ,WAOI,wBAPJ,cAOI,yBAPJ,aAOI,8BAPJ,gBAOI,iCAPJ,qBAOI,sCAPJ,wBAOI,yCAPJ,gBAOI,uBAPJ,gBAOI,uBAPJ,kBAOI,yBAPJ,kBAOI,yBAPJ,cAOI,0BAPJ,gBAOI,4BAPJ,sBAOI,kCAPJ,UAOI,iBAPJ,UAOI,sBAPJ,UAOI,qBAPJ,UAOI,oBAPJ,UAOI,sBAPJ,UAOI,oBAPJ,0BAOI,sCAPJ,wBAOI,oCAPJ,2BAOI,kCAPJ,4BAOI,yCAPJ,2BAOI,wCAPJ,2BAOI,wCAPJ,sBAOI,kCAPJ,oBAOI,gCAPJ,uBAOI,8BAPJ,yBAOI,gCAPJ,wBAOI,+BAPJ,wBAOI,oCAPJ,sBAOI,kCAPJ,yBAOI,gCAPJ,0BAOI,uCAPJ,yBAOI,sCAPJ,0BAOI,iCAPJ,oBAOI,2BAPJ,qBAOI,iCAPJ,mBAOI,+BAPJ,sBAOI,6BAPJ,wBAOI,+BAPJ,uBAOI,8BAPJ,gBAOI,oBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,eAOI,mBAPJ,QAOI,oBAPJ,QAOI,yBAPJ,QAOI,wBAPJ,QAOI,uBAPJ,QAOI,yBAPJ,QAOI,uBAPJ,WAOI,uBAPJ,SAOI,mDAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,yDAPJ,SAOI,6DAPJ,SAOI,yDAPJ,YAOI,yDAPJ,SAOI,mDAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,yDAPJ,SAOI,6DAPJ,SAOI,yDAPJ,YAOI,yDAPJ,SAOI,wBAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,2BAPJ,SAOI,6BAPJ,SAOI,2BAPJ,YAOI,2BAPJ,SAOI,0BAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,+BAPJ,SAOI,6BAPJ,YAOI,6BAPJ,SAOI,2BAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,gCAPJ,SAOI,8BAPJ,YAOI,8BAPJ,SAOI,yBAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,8BAPJ,SAOI,4BAPJ,YAOI,4BAPJ,QAOI,qBAPJ,QAOI,0BAPJ,QAOI,yBAPJ,QAOI,wBAPJ,QAOI,0BAPJ,QAOI,wBAPJ,SAOI,qDAPJ,SAOI,+DAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,+DAPJ,SAOI,2DAPJ,SAOI,qDAPJ,SAOI,+DAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,+DAPJ,SAOI,2DAPJ,SAOI,yBAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,8BAPJ,SAOI,4BAPJ,SAOI,2BAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,gCAPJ,SAOI,8BAPJ,SAOI,4BAPJ,SAOI,iCAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,iCAPJ,SAOI,+BAPJ,SAOI,0BAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,+BAPJ,SAOI,6BAPJ,eAOI,2BAPJ,aAOI,4BAPJ,gBAOI,8BhDPR,yCgDOQ,sBAPJ,cAOI,uBAPJ,eAOI,sBAPJ,aAOI,0BAPJ,mBAOI,gCAPJ,YAOI,yBAPJ,WAOI,wBAPJ,YAOI,yBAPJ,gBAOI,6BAPJ,iBAOI,8BAPJ,WAOI,wBAPJ,kBAOI,+BAPJ,WAOI,wBAPJ,cAOI,yBAPJ,aAOI,8BAPJ,gBAOI,iCAPJ,qBAOI,sCAPJ,wBAOI,yCAPJ,gBAOI,uBAPJ,gBAOI,uBAPJ,kBAOI,yBAPJ,kBAOI,yBAPJ,cAOI,0BAPJ,gBAOI,4BAPJ,sBAOI,kCAPJ,UAOI,iBAPJ,UAOI,sBAPJ,UAOI,qBAPJ,UAOI,oBAPJ,UAOI,sBAPJ,UAOI,oBAPJ,0BAOI,sCAPJ,wBAOI,oCAPJ,2BAOI,kCAPJ,4BAOI,yCAPJ,2BAOI,wCAPJ,2BAOI,wCAPJ,sBAOI,kCAPJ,oBAOI,gCAPJ,uBAOI,8BAPJ,yBAOI,gCAPJ,wBAOI,+BAPJ,wBAOI,oCAPJ,sBAOI,kCAPJ,yBAOI,gCAPJ,0BAOI,uCAPJ,yBAOI,sCAPJ,0BAOI,iCAPJ,oBAOI,2BAPJ,qBAOI,iCAPJ,mBAOI,+BAPJ,sBAOI,6BAPJ,wBAOI,+BAPJ,uBAOI,8BAPJ,gBAOI,oBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,eAOI,mBAPJ,QAOI,oBAPJ,QAOI,yBAPJ,QAOI,wBAPJ,QAOI,uBAPJ,QAOI,yBAPJ,QAOI,uBAPJ,WAOI,uBAPJ,SAOI,mDAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,yDAPJ,SAOI,6DAPJ,SAOI,yDAPJ,YAOI,yDAPJ,SAOI,mDAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,yDAPJ,SAOI,6DAPJ,SAOI,yDAPJ,YAOI,yDAPJ,SAOI,wBAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,2BAPJ,SAOI,6BAPJ,SAOI,2BAPJ,YAOI,2BAPJ,SAOI,0BAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,+BAPJ,SAOI,6BAPJ,YAOI,6BAPJ,SAOI,2BAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,gCAPJ,SAOI,8BAPJ,YAOI,8BAPJ,SAOI,yBAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,8BAPJ,SAOI,4BAPJ,YAOI,4BAPJ,QAOI,qBAPJ,QAOI,0BAPJ,QAOI,yBAPJ,QAOI,wBAPJ,QAOI,0BAPJ,QAOI,wBAPJ,SAOI,qDAPJ,SAOI,+DAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,+DAPJ,SAOI,2DAPJ,SAOI,qDAPJ,SAOI,+DAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,+DAPJ,SAOI,2DAPJ,SAOI,yBAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,8BAPJ,SAOI,4BAPJ,SAOI,2BAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,gCAPJ,SAOI,8BAPJ,SAOI,4BAPJ,SAOI,iCAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,iCAPJ,SAOI,+BAPJ,SAOI,0BAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,+BAPJ,SAOI,6BAPJ,eAOI,2BAPJ,aAOI,4BAPJ,gBAOI,8BhDPR,yCgDOQ,sBAPJ,cAOI,uBAPJ,eAOI,sBAPJ,aAOI,0BAPJ,mBAOI,gCAPJ,YAOI,yBAPJ,WAOI,wBAPJ,YAOI,yBAPJ,gBAOI,6BAPJ,iBAOI,8BAPJ,WAOI,wBAPJ,kBAOI,+BAPJ,WAOI,wBAPJ,cAOI,yBAPJ,aAOI,8BAPJ,gBAOI,iCAPJ,qBAOI,sCAPJ,wBAOI,yCAPJ,gBAOI,uBAPJ,gBAOI,uBAPJ,kBAOI,yBAPJ,kBAOI,yBAPJ,cAOI,0BAPJ,gBAOI,4BAPJ,sBAOI,kCAPJ,UAOI,iBAPJ,UAOI,sBAPJ,UAOI,qBAPJ,UAOI,oBAPJ,UAOI,sBAPJ,UAOI,oBAPJ,0BAOI,sCAPJ,wBAOI,oCAPJ,2BAOI,kCAPJ,4BAOI,yCAPJ,2BAOI,wCAPJ,2BAOI,wCAPJ,sBAOI,kCAPJ,oBAOI,gCAPJ,uBAOI,8BAPJ,yBAOI,gCAPJ,wBAOI,+BAPJ,wBAOI,oCAPJ,sBAOI,kCAPJ,yBAOI,gCAPJ,0BAOI,uCAPJ,yBAOI,sCAPJ,0BAOI,iCAPJ,oBAOI,2BAPJ,qBAOI,iCAPJ,mBAOI,+BAPJ,sBAOI,6BAPJ,wBAOI,+BAPJ,uBAOI,8BAPJ,gBAOI,oBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,eAOI,mBAPJ,QAOI,oBAPJ,QAOI,yBAPJ,QAOI,wBAPJ,QAOI,uBAPJ,QAOI,yBAPJ,QAOI,uBAPJ,WAOI,uBAPJ,SAOI,mDAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,yDAPJ,SAOI,6DAPJ,SAOI,yDAPJ,YAOI,yDAPJ,SAOI,mDAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,yDAPJ,SAOI,6DAPJ,SAOI,yDAPJ,YAOI,yDAPJ,SAOI,wBAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,2BAPJ,SAOI,6BAPJ,SAOI,2BAPJ,YAOI,2BAPJ,SAOI,0BAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,+BAPJ,SAOI,6BAPJ,YAOI,6BAPJ,SAOI,2BAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,gCAPJ,SAOI,8BAPJ,YAOI,8BAPJ,SAOI,yBAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,8BAPJ,SAOI,4BAPJ,YAOI,4BAPJ,QAOI,qBAPJ,QAOI,0BAPJ,QAOI,yBAPJ,QAOI,wBAPJ,QAOI,0BAPJ,QAOI,wBAPJ,SAOI,qDAPJ,SAOI,+DAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,+DAPJ,SAOI,2DAPJ,SAOI,qDAPJ,SAOI,+DAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,+DAPJ,SAOI,2DAPJ,SAOI,yBAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,8BAPJ,SAOI,4BAPJ,SAOI,2BAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,gCAPJ,SAOI,8BAPJ,SAOI,4BAPJ,SAOI,iCAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,iCAPJ,SAOI,+BAPJ,SAOI,0BAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,+BAPJ,SAOI,6BAPJ,eAOI,2BAPJ,aAOI,4BAPJ,gBAOI,8BhDPR,0CgDOQ,sBAPJ,cAOI,uBAPJ,eAOI,sBAPJ,aAOI,0BAPJ,mBAOI,gCAPJ,YAOI,yBAPJ,WAOI,wBAPJ,YAOI,yBAPJ,gBAOI,6BAPJ,iBAOI,8BAPJ,WAOI,wBAPJ,kBAOI,+BAPJ,WAOI,wBAPJ,cAOI,yBAPJ,aAOI,8BAPJ,gBAOI,iCAPJ,qBAOI,sCAPJ,wBAOI,yCAPJ,gBAOI,uBAPJ,gBAOI,uBAPJ,kBAOI,yBAPJ,kBAOI,yBAPJ,cAOI,0BAPJ,gBAOI,4BAPJ,sBAOI,kCAPJ,UAOI,iBAPJ,UAOI,sBAPJ,UAOI,qBAPJ,UAOI,oBAPJ,UAOI,sBAPJ,UAOI,oBAPJ,0BAOI,sCAPJ,wBAOI,oCAPJ,2BAOI,kCAPJ,4BAOI,yCAPJ,2BAOI,wCAPJ,2BAOI,wCAPJ,sBAOI,kCAPJ,oBAOI,gCAPJ,uBAOI,8BAPJ,yBAOI,gCAPJ,wBAOI,+BAPJ,wBAOI,oCAPJ,sBAOI,kCAPJ,yBAOI,gCAPJ,0BAOI,uCAPJ,yBAOI,sCAPJ,0BAOI,iCAPJ,oBAOI,2BAPJ,qBAOI,iCAPJ,mBAOI,+BAPJ,sBAOI,6BAPJ,wBAOI,+BAPJ,uBAOI,8BAPJ,gBAOI,oBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,YAOI,mBAPJ,eAOI,mBAPJ,QAOI,oBAPJ,QAOI,yBAPJ,QAOI,wBAPJ,QAOI,uBAPJ,QAOI,yBAPJ,QAOI,uBAPJ,WAOI,uBAPJ,SAOI,mDAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,yDAPJ,SAOI,6DAPJ,SAOI,yDAPJ,YAOI,yDAPJ,SAOI,mDAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,yDAPJ,SAOI,6DAPJ,SAOI,yDAPJ,YAOI,yDAPJ,SAOI,wBAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,2BAPJ,SAOI,6BAPJ,SAOI,2BAPJ,YAOI,2BAPJ,SAOI,0BAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,+BAPJ,SAOI,6BAPJ,YAOI,6BAPJ,SAOI,2BAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,gCAPJ,SAOI,8BAPJ,YAOI,8BAPJ,SAOI,yBAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,8BAPJ,SAOI,4BAPJ,YAOI,4BAPJ,QAOI,qBAPJ,QAOI,0BAPJ,QAOI,yBAPJ,QAOI,wBAPJ,QAOI,0BAPJ,QAOI,wBAPJ,SAOI,qDAPJ,SAOI,+DAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,+DAPJ,SAOI,2DAPJ,SAOI,qDAPJ,SAOI,+DAPJ,SAOI,6DAPJ,SAOI,2DAPJ,SAOI,+DAPJ,SAOI,2DAPJ,SAOI,yBAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,4BAPJ,SAOI,8BAPJ,SAOI,4BAPJ,SAOI,2BAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,gCAPJ,SAOI,8BAPJ,SAOI,4BAPJ,SAOI,iCAPJ,SAOI,gCAPJ,SAOI,+BAPJ,SAOI,iCAPJ,SAOI,+BAPJ,SAOI,0BAPJ,SAOI,+BAPJ,SAOI,8BAPJ,SAOI,6BAPJ,SAOI,+BAPJ,SAOI,6BAPJ,eAOI,2BAPJ,aAOI,4BAPJ,gBAOI,8BhDPR,2CgDOQ,sBAPJ,eAOI,uBAPJ,gBAOI,sBAPJ,cAOI,0BAPJ,oBAOI,gCAPJ,aAOI,yBAPJ,YAOI,wBAPJ,aAOI,yBAPJ,iBAOI,6BAPJ,kBAOI,8BAPJ,YAOI,wBAPJ,mBAOI,+BAPJ,YAOI,wBAPJ,eAOI,yBAPJ,cAOI,8BAPJ,iBAOI,iCAPJ,sBAOI,sCAPJ,yBAOI,yCAPJ,iBAOI,uBAPJ,iBAOI,uBAPJ,mBAOI,yBAPJ,mBAOI,yBAPJ,eAOI,0BAPJ,iBAOI,4BAPJ,uBAOI,kCAPJ,WAOI,iBAPJ,WAOI,sBAPJ,WAOI,qBAPJ,WAOI,oBAPJ,WAOI,sBAPJ,WAOI,oBAPJ,2BAOI,sCAPJ,yBAOI,oCAPJ,4BAOI,kCAPJ,6BAOI,yCAPJ,4BAOI,wCAPJ,4BAOI,wCAPJ,uBAOI,kCAPJ,qBAOI,gCAPJ,wBAOI,8BAPJ,0BAOI,gCAPJ,yBAOI,+BAPJ,yBAOI,oCAPJ,uBAOI,kCAPJ,0BAOI,gCAPJ,2BAOI,uCAPJ,0BAOI,sCAPJ,2BAOI,iCAPJ,qBAOI,2BAPJ,sBAOI,iCAPJ,oBAOI,+BAPJ,uBAOI,6BAPJ,yBAOI,+BAPJ,wBAOI,8BAPJ,iBAOI,oBAPJ,aAOI,mBAPJ,aAOI,mBAPJ,aAOI,mBAPJ,aAOI,mBAPJ,aAOI,mBAPJ,aAOI,mBAPJ,gBAOI,mBAPJ,SAOI,oBAPJ,SAOI,yBAPJ,SAOI,wBAPJ,SAOI,uBAPJ,SAOI,yBAPJ,SAOI,uBAPJ,YAOI,uBAPJ,UAOI,mDAPJ,UAOI,6DAPJ,UAOI,2DAPJ,UAOI,yDAPJ,UAOI,6DAPJ,UAOI,yDAPJ,aAOI,yDAPJ,UAOI,mDAPJ,UAOI,6DAPJ,UAOI,2DAPJ,UAOI,yDAPJ,UAOI,6DAPJ,UAOI,yDAPJ,aAOI,yDAPJ,UAOI,wBAPJ,UAOI,6BAPJ,UAOI,4BAPJ,UAOI,2BAPJ,UAOI,6BAPJ,UAOI,2BAPJ,aAOI,2BAPJ,UAOI,0BAPJ,UAOI,+BAPJ,UAOI,8BAPJ,UAOI,6BAPJ,UAOI,+BAPJ,UAOI,6BAPJ,aAOI,6BAPJ,UAOI,2BAPJ,UAOI,gCAPJ,UAOI,+BAPJ,UAOI,8BAPJ,UAOI,gCAPJ,UAOI,8BAPJ,aAOI,8BAPJ,UAOI,yBAPJ,UAOI,8BAPJ,UAOI,6BAPJ,UAOI,4BAPJ,UAOI,8BAPJ,UAOI,4BAPJ,aAOI,4BAPJ,SAOI,qBAPJ,SAOI,0BAPJ,SAOI,yBAPJ,SAOI,wBAPJ,SAOI,0BAPJ,SAOI,wBAPJ,UAOI,qDAPJ,UAOI,+DAPJ,UAOI,6DAPJ,UAOI,2DAPJ,UAOI,+DAPJ,UAOI,2DAPJ,UAOI,qDAPJ,UAOI,+DAPJ,UAOI,6DAPJ,UAOI,2DAPJ,UAOI,+DAPJ,UAOI,2DAPJ,UAOI,yBAPJ,UAOI,8BAPJ,UAOI,6BAPJ,UAOI,4BAPJ,UAOI,8BAPJ,UAOI,4BAPJ,UAOI,2BAPJ,UAOI,gCAPJ,UAOI,+BAPJ,UAOI,8BAPJ,UAOI,gCAPJ,UAOI,8BAPJ,UAOI,4BAPJ,UAOI,iCAPJ,UAOI,gCAPJ,UAOI,+BAPJ,UAOI,iCAPJ,UAOI,+BAPJ,UAOI,0BAPJ,UAOI,+BAPJ,UAOI,8BAPJ,UAOI,6BAPJ,UAOI,+BAPJ,UAOI,6BAPJ,gBAOI,2BAPJ,cAOI,4BAPJ,iBAOI,8BChCZ,aDyBQ,gBAOI,0BAPJ,sBAOI,gCAPJ,eAOI,yBAPJ,cAOI,wBAPJ,eAOI,yBAPJ,mBAOI,6BAPJ,oBAOI,8BAPJ,cAOI,wBAPJ,qBAOI,+BAPJ,cAOI,yBEtEZ,cACE,cAKA,eACE,aAGF,mBACE,eAIJ,MACE,gBAGF,uCAEE,qBACA,cACA,eACA,aAIA,kDAEE,0BACA,cAIJ,0BACE,0BACA,cAGF,IACE,kBAEA,UACE,kBACA,YAIJ,MACE,SAGF,GACE,MxD/BW,KwDgCX,iBxDhCW,KwDiCX,SACA,WAGF,KACE,UACA,SACA,eAGF,aAGE,aAIA,0EAIE,kBACA,gBACA,sBACA,WACA,YAGF,+KAKE,WAIJ,yBACE,WAIA,0EAIE,mBAIJ,OACE,mBAIA,kHAIE,mBACA,gBAEA,0IACE,mBACA,gBAKN,iBACE,mBACA,gBAEA,uBACE,mBACA,gBAMA,8CAEE,yBACA,gBAKF,sDAEE,yBACA,gBAKF,kDAEE,yBACA,gBAKF,8CAEE,yBACA,gBAKN,aACE,yBACA,gBAIA,kGAIE,0BAIJ,SACE,iBACA,WAEA,cACE,WAGF,mBACE,UAIJ,cACE,eACA,0BACA,sBACA,aACA,gBACA,mCACA,kCAIA,4BACE,YACA,sBACA,mBAGF,qBACE,WACA,iBACA,WACA,iBACA,kBACA,sBACA,sBACA,eACA,6BACA,cACA,cAKJ,OACE,eAIF,WACE,mBAGF,WAEE,sBAIA,8DAEE,oBAIJ,OACE,kBACA,sBACA,WACA,YACA,gBAEA,yBACE,WAGF,iBACE,0CAKJ,YACE,WAGF,YACE,gBAGF,WACE,WACA,yBAGF,UACE,aAMA,aACA,mBAEA,aACA,iBACA,WACA,WACA,0BAXA,YACE,yBAaJ,yBACE,aACA,mBAEA,aACA,iBACA,WACA,WACA,0BAGF,aACE,YACA,kBACA,kBACA,eAIA,2BACE,WACA,kBAEA,mBAIF,qCACE,mBAIJ,mBACE,YACA,+BAMF,WACE,6BAGF,aACE,2BACA,mBAGF,aACE,yBACA,mBAGF,2BACE,2BAIF,kBAEE,4BAQF,QACE,kBACA,yBAIA,gCAEE,iBACA,mBAIJ,OACE,YxDxTsB,UwD2TxB,cACE,eAGF,WACE,gBACA,aACA,sBACA,aACA,sBACA,kBAGF,iBACE,mBACA,WACA,gBACA,aACA,UACA,eACA,mBACA,YACA,kBACA,cACA,uBAIF,YACE,qBACA,8BACA,yBAGF,gBACE,kBACA,iBAGF,eACE,gBAIF,kCAGE,kBACA,eAGF,cACE,WACA,sBAGF,OACE,mCACA,cACA,WACA,gBAKF,iBACE,WAGF,YACE,cACA,mBACA,WAGF,YACE,iBACA,MxD/ZS,KwDgaT,WxDlac,QwDqahB,sBAEE,mBACA,MxDtaS,KwDuaT,WxDzac,QwD6ad,8DAGE,WAKF,wDAGE,WAKF,8DAGE,WAIJ,0DAGE,UAIF,UACE,WAGE,wDAGE,WAGF,kBACE,WACA,qBAKN,UACE,qBAGF,aACE,aAMF,eACE,iBACA,kBAEA,2DAEE,cACA,kBAGF,6BACE,gBACA,WACA,cAIJ,yBACE,iBAGF,yBACE,cACA,WACA,kBACA,gBACA,YAGF,iBACE,eACA,MACA,OACA,YACA,WACA,gBACA,YAGF,sCACE,mBAGF,kBACE,8BAGF,kBACE,cAGF,aACE,cACA,eAGF,4BACE,0BAGF,sBACE,gBAGF,uBACE,WAGF,YACE,WAGF,gBACE,iBAGF,iBAEE,8BAKA,6CAEE,SACA,kBAGF,mBACE,gBAIJ,aACE,YAGF,WACE,kBAIF,0BACE,WACA,mBACA,mBACA,gBACA,eAMF,kBACE,kBACA,WAGF,gBACE,eACA,MACA,QACA,WACA,gBAGF,oBACE,eACA,aAGF,8CAEE,aAGF,aACE,UACA,WACA,qDACA,eAGF,kBACE,kBACA,WACA,WACA,YACA,iBACA,kBACA,sBACA,WACA,uBACA,aAKA,kCACE,aACA,mBACA,+BACA,oBACA,mBAGF,+BACE,WACA,cACA,WACA,eACA,iBACA,mBACA,gBAGF,+BACE,WACA,YACA,eAGF,sCACE,WACA,cACA,WACA,eACA,mBAEA,oLAGE,WACA,eAGF,4CACE,WAKN,6BACE,WACA,UACA,eAEA,sCACE,WAGF,mCACE,mBAGF,oCACE,WAIJ,qFAEE,WAGF,0CACE,gBAMF,gBACE,0BACA,cACA,eAGF,yDACE,cACA,eAGF,qBACE,eAGF,cACE,YAGF,6BACE,WACA,YACA,aACA,kBAKE,6EAEE,mBAIJ,cACE,WACA,gBACA,aACA,oBAIJ,0BACE,sBACA,yBACA,iBAIA,mBACE,YACA,SAGF,iCACE,mBACA,YACA,cAIJ,aACE,WACA,cAEA,kCAEE,iBAGF,mBACE,uBAIJ,cACE,aACA,kBACA,sBACA,SACA,YACA,sBACA,UACA,4BAIA,aACE,iBACA,WAEA,mBACE,WAIJ,wBACE,gBAGE,8CACE,YAGF,2CACE,aAIJ,mCACE,YAGF,wCACE,aACA,SACA,gBAKN,aACE,iBAOF,mBACE,YACA,aACA,WAGF,4CACE,oBACA,UACA,YAMF,SACE,wBAIF,eACE,aAKF,gBACE,cAGF,mCACE,cACA,mBACA,WACA,gBAIA,kBACE,WACA,kBACA,sBACA,YACA,oBAGF,wBACE,WACA,UACA,cAQJ,0CAEE,WACA,UAIA,kBACE,qBACA,sBAGF,kBACE,mBAIJ,iBACE,kBACA,YACA,gBACA,YACA,kBACA,sBACA,gBAGF,wBACE,WxDt8BgB,QwDu8BhB,wBAGF,YACE,YACA,YACA,kBAEA,gBACE,uBAGF,wBACE,sBAIJ,UACE,WACA,cACA,eACA,kBACA,UACA,eACA,iBACA,6BAGF,uCAEE,WAGF,IACE,MxD79BW,KwD89BX,+BACA,gBAGF,KACE,cACA,MxDp+BW,KwDs+BX,SACE,cACA,iBACA,aACA,gBACA,gBACA,cACA,cAGF,SACE,cACA,YACA,aACA,gBACA,gBACA,cACA,cAIJ,gBACE,cACA,YACA,aACA,gBACA,gBACA,cACA,cAGF,2BACE,WxD9+BO,QwD++BP,gBAGF,6CAEE,WxDp/BO,QwDu/BT,6BACE,WAIF,MACE,aAGF,aACE,qBACA,UAQA,oBACE,YACA,gBACA,kBAGF,8BACE,sBACA,YACA,kBACA,kBACA,MxD7iCS,KwD+iCT,6CACE,kBACA,MACA,OACA,YAIJ,8BACE,iBxD7jCsB,KwD8jCtB,QACA,YACA,WACA,gBACA,MxDnjCkB,KwDojClB,kBAEA,6CACE,SACA,UAIJ,eACE,gBAKF,sIAIE,WAQF,kIAIE,gBAIJ,oCAEE,gBAMF,mBAEE,MACA,eACA,iBACA,kBACA,gBACA,iBAEA,YACA,YAEA,aACA,kBACA,eACA,OACA,QACA,oDACA,4BACA,uBACA,yBACA,yBACA,kBACA,2BAGF,gBAEE,kBACA,WAGF,mBACE,SAGF,kBACE,aACA,eACA,WACA,YACA,MACA,OACA,gBACA,aACA,gBAGF,4BACE,eAGF,0BACE,iBAGF,8BACE,eACA,gBAQE,sEAEE,WACA,SACA,sBAGF,2BACE,eAGF,8BACE,WACA,eAIJ,mBACE,WACA,YACA,WAGF,uBACE,WAEA,6BACE,gBAIJ,iBACE,SAGF,cACE,sBAIJ,oBACE,WAEA,2BACE,UACA,WAKF,yBACE,YAGF,wBACE,gBACA,SACA,UAGF,wBACE,WxDntCY,QwDotCZ,sBACA,MxDntCO,KwDotCP,iBACA,YACA,aACA,kBAMF,mBACE,aACA,yBACA,0BAGF,sBACE,aACA,UACA,WACA,gBAEA,wBACE,SACA,aACA,gBACA,aAIF,8BACE,kBACA,mBACA,mBACA,gBACA,YxDhuCa,WwDiuCb,gBAIF,qCACE,sBACA,cACA,UACA,gBACA,cACA,gBAGF,2BACE,gBAGF,uCACE,gBACA,cACA,yBACA,WACA,YAGF,yBACE,uBACA,kBACA,gBACA,mBACA,yBACA,YACA,6BACA,kBAEA,+DACE,cACA,mBACA,YxDvwCW,WwDwwCX,kBACA,WAIJ,yBACE,iBACA,oBACA,mBACA,6BACA,kBAIJ,oBACE,aAGF,2BACE,YACA,qBAEA,kCACE,YACA,yBACA,gBAKJ,qBACE,gBAGF,0BACE,6BAIA,gGAGE,yBACA,YAEA,kHACE,yBACA,mBAKN,0CAEE,yBACA,YAEA,sDACE,yBACA,mBAIJ,iCACE,kBACA,WACA,YACA,eACA,iBACA,kBAGF,oCACE,WAIF,gBACE,iBAEA,wBACE,aAOF,0BACE,WxDn3CG,QwDs3CL,6BACE,iBAIJ,uDAEE,mBAGF,uDAEE,iBAGF,2BACE,mBAIA,4BACE,WACA,sBAEA,qEACE,WACA,sBAIJ,4BACE,WACA,sBAKN,oBACE,eAGF,kBACE,gBAGF,gBACE,mBACA,iBAGF,yBACE,kBAGF,aACE,kBACA,sBACA,YACA,gBACA,YACA,aAEA,qBACE,kBACA,eAGF,wBACE,kBACA,WACA,sBACA,YAIJ,SACE,WACA,oBAGF,cACE,kBACA,eACA,eACA,kBACA,kBACA,cACA,gBACA,6BACA,4BACA,mBAEA,uDAGE,UACA,kBAGF,gCACE,kBAEA,sEAEE,2BAIJ,wBACE,WACA,cACA,0BAGF,yBACE,cAKF,8BACE,UACA,WACA,UAGF,uBACE,kBAGF,yBACE,cAIJ,yBACE,gBAGF,mBACE,eACA,SACA,WACA,gBAGF,eACE,cACA,cAGE,sGAGE,WACA,sBAIJ,sBACE,WACA,sBAIJ,eACE,YACA,aAGF,iBACE,YAGF,YACE,SACA,SAGF,aACE,UACA,SAGF,UACE,UACA,QAGF,YACE,UACA,SAGF,SACE,UACA,SAGF,YACE,UACA,SAGF,UACE,UACA,UAGF,WACE,kBACA,YACA,iBACA,kBACA,UAGF,kBACE,4BAIA,6BACE,cACA,gBAKF,cACE,gBAGF,yBACE,cACA,gBAEA,mCACE,eAKF,6BACE,kBAKN,kBACE,cACA,WACA,iBACA,eAGF,MACE,kBAGF,MACE,gBACA,WACA,iBACA,YACA,aACA,kBACA,2BACA,yBACA,mBAGF,UAIE,OAHS,KAIT,MAHQ,KAIR,iBACA,iBACA,yCACA,kBAGF,SACE,2BACA,sBACA,aACA,iCACA,8BACA,sCACA,0BACA,4BACA,2BAEA,WACE,2BACA,sBAIJ,OACE,QACA,kBACA,MAGF,SACE,sCACA,eACA,YACA,gBACA,WAEA,eACE,sBAIJ,eACE,sBAGF,OACE,gBACA,sBACA,kBACA,4BACA,gBACA,QACA,eACA,yBAEA,iBACE,uBACA,kBAEA,uBACE,gBACA,eAGF,uBACE,eAKN,eACE,6BACA,0BACA,eACA,eACA,iBACA,kBACA,kBAEA,qBACE,gBAIJ,eACE,iBAGF,YACE,cACA,kBACA,uCAEA,eACE,SACA,UACA,sBACA,mBAIA,+BACE,gBACA,SACA,YACA,SACA,kBACA,gBAEA,qCACE,WACA,eACA,iBACA,uCAIJ,mCACE,WACA,eACA,iBACA,uCAIJ,sBACE,MxDpyDS,KwDsyDT,4BACE,WACA,6CACA,qBAIJ,mBACE,cAIJ,sBACE,WACA,qBACA,gBACA,kBACA,aACA,YACA,uBAGF,OACE,SACA,UACA,kBAEA,wBACE,gBACA,YACA,SACA,UAGF,kBACE,gBACA,sBACA,eACA,kBAEA,oDAEE,UAIJ,uBACE,WACA,eACA,iBAGF,iBACE,kBACA,kBACA,YACA,SAGF,yBACE,0EACA,oBAGF,0BACE,oEACA,YAGF,kBACE,gBACA,WACA,kBAIJ,oBACE,6DACA,kBAIA,oBACE,mBAGF,wBACE,YACA,iBAMF,qCACE,kBAGF,sBACE,gBAEA,yBACE,YACA,oBAGF,yBACE,wBAIJ,sBACE,cAIJ,uBACE,gBACA,YACA,SACA,UAGF,mBACE,cAEA,sBACE,iBAEA,yBACE,wBAKN,gBACE,cAGF,wBACE,wBAGF,kCACE,cAGF,cACE,YAIF,cACE,kBACA,eACA,WAGF,aACE,gBAIA,yCACE,eAEA,oDACE,2BAIJ,kCACE,eAIJ,kBACE,eAEA,qBACE,4BAKF,mBACE,WAGF,mBACE,iBAIJ,WACE,eAGF,YACE,kBAIF,uBACE,WACA,eACA,SACA,OACA,YAGF,SACE,YAGF,aACE,kBACA,YxDjhEW,MwDmhEX,wBACE,aAGF,uBACE,sBAGF,sBACE,kBACA,gBACA,0BACA,gBAEA,2BACE,sBAGF,gCACE,eAEA,4CACE,qBACA,4BACA,4BAGF,wCACE,aAMJ,kEAEE,cACA,qBAKF,0DAEE,cACA,qBAIJ,4BACE,cACA,qBAGF,4FAGE,eAGF,8GAGE,gBAIA,qCACE,gBAGF,4BACE,iBAGF,0DAEE,kBAGF,0DAEE,YAIJ,sBACE,kBACA,gBACA,oBACA,0BACA,gBACA,iBAEA,yCACE,gBACA,WAEA,0DACE,gBACA,WAGF,yDACE,WAGF,kDACE,qBAGF,4DACE,kBAGF,qDACE,cAKN,gDAEE,kBACA,sCACA,YACA,yBAGF,sBACE,6BACA,oBAEA,+CACE,kBAGF,8BACE,YACA,kBACA,YAKF,kCACE,YACA,kBACA,YACA,SAGF,mCACE,WACA,WACA,gBAKF,oCACE,WACA,iBAGF,uCACE,YAGF,sCACE,aAIA,8HAGE,YACA,WAIJ,sCACE,WAGF,uCACE,mBACA,uBACA,gBAGF,sCACE,cACA,gBACA,qBAGF,oIAGE,aAIA,2JAIE,aAKF,4FAEE,qBAIJ,4FAEE,qBAIA,6FAEE,qBAKF,+FAEE,qBAKF,iGAEE,qBAIJ,sCACE,kBACA,YACA,gBACA,sBACA,2BAGF,qFAEE,SACA,qBAGF,iFAEE,aAGF,0CACE,qBAGF,4BACE,gBAIA,gDACE,aAGF,sDACE,cAIJ,sCACE,cACA,MACA,gBACA,WACA,kBAEA,6CACE,gBAIJ,+CACE,yBACA,0BAIJ,0BACE,kBAGF,wBACE,YACA,WACA,kBACA,MACA,gBACA,aACA,eACA,YAGF,mBACE,kBACA,UACA,YACA,gBACA,UACA,MACA,2BACA,YACA,oBAEA,wBACE,QACA,kCAIJ,+DAEE,aAIJ,mEAEE,gBAIA,8CACE,kBACA,oBACA,mBACA,6BAEA,qDACE,aACA,sBAIJ,sDACE,SACA,gBAKF,wCACE,qBAIA,wCACE,qBAGF,+EAEE,aAIJ,sCACE,aAGF,sBACE,iBAGF,kEAEE,cAGF,sKAIE,aAIA,oHAEE,aAGF,iCACE,WACA,cACA,WAIJ,2EAEE,WACA,cACA,WAGF,8BACE,WAGF,gGAGE,YAGF,oCACE,SAMF,2BACE,sCAEA,+BACE,sCAIJ,6FAGE,UAGF,qBACE,YACA,YACA,WACA,mBACA,mBAGF,6BACE,YAMJ,kBACE,aACA,eACA,MACA,OACA,WACA,0BACA,YACA,YACA,WACA,eACA,kBACA,gBAGF,uBACE,aACA,eACA,SACA,WACA,YACA,sBACA,mBACA,kBACA,4BAEA,qDACE,sBACA,kBACA,aACA,gBACA,WACA,gBACA,mBACA,yBACA,mCAIJ,yCACE,sBACA,kBACA,aACA,gBACA,WACA,gBACA,mBACA,yBACA,mCAIA,2BACE,aACA,gBACA,kBACA,qBAEA,8BACE,iBACA,6BACA,cACA,gBAEA,wCACE,YAMJ,yEACE,YACA,iBACA,eAGF,mEACE,YACA,iBACA,eACA,aAGF,oKAEE,iCACA,eAKN,mEACE,iCACA,eAGF,sBACE,cAEA,2CACE,eACA,0BAIJ,iBACE,eACA,QACA,SACA,UACA,gBACA,iBACA,YACA,yBACA,mBACA,YAEA,uDACE,YACA,iBACA,eAIJ,kBACE,sBACA,sBAGF,sBACE,qBACA,2BAGF,eACE,qBACA,8CACA,kCACA,4BACA,UACA,WACA,YAGF,WACE,eAIA,8CACE,2EAGF,8CACE,qEAGF,8CACE,2EAQF,0CACE,WACA,aAGF,iCACE,WAGF,2DACE,YAQF,8CACE,aAGF,0GAEE,eAGF,iDACE,gBAGF,iDACE,UAGF,qDACE,WAMJ,YACE,gBAGF,0CACE,iBACE,gBAGF,6BACE,WAGF,iBACE,aAGF,SACE,qBAGF,gBACE,aAGF,mBACE,SAGF,eACE,cAGF,eACE,gBAEA,4BACE,eAIJ,8BACE,UAGF,6BACE,WACA,aAGF,WACE,UACA,sBAIJ,gBACE,eACA,sBACA,YACA,yBACA,YAGF,cACE,iBAGF,eACE,aACA,aACA,kBACA,yBACA,WACA,yBACA,oBAGF,iBACE,wBAGF,oIAKE,iBACA,eACA,cAGF,uBACE,WAIF,gBACE,iBACA,kBlD9tFE,0BkDmuFF,UACE,gBAGF,qCAEE,iBAIJ,iBACE,gBAGF,iBACE,aACA,UC/yFF,cACE,eACA,cAIA,eACE,aACA,kBAGF,qBACE,WAGF,kBACE,WAEA,qBACE,sBACA,UACA,cACA,iBAKF,6BACE,YACA,eACA,sBAGF,2BACE,cACA,kBACA,WAGF,yBACE,sBAIJ,6BACE,SACA,kBAIJ,6BACE,WACA,YACA,iBAMF,WACE,kBAEA,aACE,kBACA,SACA,aCjEJ,mBACE,YAGF,YACE,aACA,eACA,aACA,gBACA,kBAGF,UACE,iBAGF,mBACE,WAGF,iBACE,mBACA,aACA,iBAEA,yBACE,aAGF,kCACE,WChCJ,gBACE,M3DGW,M2DFX,eACA,MACA,OACA,aACA,uDACA,WACA,YAEA,mBACE,SAGF,qBACE,SACA,UACA,eAIA,sEAEE,WAKF,iCACE,kBACA,SACA,kBACA,2BAIJ,qOAOE,kBACA,mBACA,SAGF,sCACE,SAGF,4DAEE,YAGF,+EAEE,UAIJ,uBACE,gBAGF,wBACE,WACA,YACA,kBACA,MACA,OACA,UAEA,qCACE,aACA,mBAIJ,gCACE,gBACA,cACA,SACA,SAGF,0BACE,gBACA,kBAEA,iCACE,gDACA,0BACA,kBACA,sBACA,0BACA,WACA,gBACA,aACA,UACA,iBAIJ,6BACE,WACA,gBACA,gBACA,kBACA,YAEA,+CACE,kBACA,YACA,mBAIJ,qBACE,SACA,gBACA,gBACA,WACA,WACA,kBAEA,uBACE,M3D1HS,K2D2HT,eAEA,6BACE,0BAIJ,wBACE,WACA,UACA,qBACA,SAEA,2BACE,kBAIJ,wBACE,gBAEA,uEAEE,M3D3Ie,K2D4If,iB3DzIoB,K2D4ItB,wCACE,kBACA,YAGF,yCACE,aACA,kBACA,YAGF,uDACE,cACA,WAEA,6DACE,UAKN,wBACE,mBACA,WACA,gBAEA,oCACE,mBACA,WACA,gBAIJ,yBACE,SAGF,uBACE,cAIA,+BACE,kBACA,YACA,aACA,eACA,gBACA,WAEA,sCACE,YAGF,kEAEE,YACA,aACA,eACA,eACA,kBACA,YACA,WACA,UAIF,iCACE,cACA,2BACA,6BACA,kBACA,UAGA,uCACE,cAKJ,iCACE,cACA,aACA,SACA,WACA,2BAGF,kEAEE,kBACA,SACA,QACA,WAGF,mCACE,UAIA,gFAEE,SAGF,0CACE,SAIJ,mCACE,kBACA,WACA,OACA,iBAIJ,sCACE,QACA,SAKF,gCACE,gBAIA,oDAEE,kBACA,aACA,kBAKN,qCACE,2BACA,kBACA,mBAEA,sDAEE,2BAIJ,2CACE,yBAKJ,eACE,mBACA,kBACA,mBACA,2BACA,gBAEA,qBACE,eAGF,kCACE,SACA,iBACA,WACA,eAGF,wCACE,+BACA,2BAGF,8BACE,SACA,cAIJ,2BACE,2BAEA,yCACE,0CAIJ,qBACE,YACA,mBAIF,wBACE,UACA,YACA,sBACA,kBACA,eACA,MACA,WACA,YAGF,0BACE,WACA,YACA,iBACA,gBACA,WACA,iBACA,eACA,MACA,K3DtXW,M2DuXX,kBACA,eACA,YACA,yBACA,8CACA,sBAIF,gBACE,eACA,gBACA,kBAEA,2BACE,WACA,gBACA,cAGE,8CACE,gBAGF,oCACE,cAIJ,8BACE,kBACA,SACA,UACA,gBACA,gBACA,gBACA,gBACA,sBACA,mBACA,0BACA,6BACA,wBACA,SACA,SACA,QACA,aACA,YAGF,8BACE,mBACA,UACA,gBAEA,kCACE,mBAGF,oCACE,mBAIJ,6BACE,cACA,kBAEA,mDACE,WACA,WACA,oBAKN,6BACE,aACA,sBACA,mBACA,mBACA,eC7bJ,WACE,yBACA,WAGF,oBACE,kBACA,cAGF,cACE,kBACA,WACA,cAGF,QACE,sBACA,WAGF,gBACE,qBACA,gBACA,gBAEA,kBACE,2BAIJ,cACE,sBACA,WACA,yBACA,sBACA,UACA,iBAEA,sBACE,qGAIJ,SACE,kBACA,YACA,YACA,iBAGF,WACE,+EACA,2BACA,kBACA,YACA,YACA,iBAGF,WACE,gBACA,WACA,eAEA,iBACE,sBACA,WACA,2BACA,eAIJ,aACE,oCACA,WACA,eAEA,mBACE,sBACA,WACA,2BACA,eAIJ,eACE,mBACA,kBACA,sBACA,WACA,UACA,sBACA,aAGF,6BACE,SAGF,YACE,cACA,WACA,aAGF,eACE,eACA,WACA,mBACA,qBACA,gBACA,iBACA,gBACA,gBACA,mEACA,sBAEA,qBACE,eACA,WACA,gBACA,gBACA,iBACA,mBACA,qBACA,sBACA,gBAIJ,OACE,mBACA,WAGF,YACE,iBACA,kBACA,UAGF,YACE,mBACA,iBACA,kBACA,eACA,UACA,WACA,qGAGF,WACE,mBACA,yBACA,WACA,sDACA,eACA,kBACA,iBACA,iBACA,kBACA,UACA,qBAEA,iBACE,mBACA,WACA,sBACA,eACA,iBACA,kBACA,kBACA,iBACA,UACA,qBAIJ,gBACE,qGACA,kBACA,UAEA,sBACE,mBACA,WACA,sBACA,eACA,kBACA,iBACA,UACA,qBAIJ,MACE,sBACA,iBACA,sBACA,WACA,wBAGF,WACE,YACA,qBACA,sBACA,eAEA,iBACE,UACA,sBACA,gBACA,WACA,qBACA,sBACA,eAKJ,KACE,WACA,YAGF,QACE,+DAGF,QACE,8DAGF,QACE,2DAGF,QACE,4DAGF,QACE,+DAGF,QACE,sDAGF,QACE,qDAGF,QACE,uDAGF,SACE,kBACA,sBACA,WAGF,iBACE,yBACA,WACA,kBACA,iBACA,SACA,UACA,sDACA,wBACA,2BACA,4BACA,2BACA,YACA,YACA,WACA,eAEA,yCAEE,cACA,WACA,mBACA,YACA,uBAGF,yBACE,cACA,WACA,WACA,YACA,UAIA,yBACE,iBAGF,wBACE,gBAMJ,iDAEE,yBACA,sBACA,WAEA,6DACE,sBACA,sBACA,WAIJ,eACE,sBACA,sBACA,WAIJ,YACE,WACA,kBACA,YACA,yBACA,sBAGF,oBACE,kBACA,WACA,UACA,YAGF,uCAEE,kBACA,WACA,SACA,YACA,YAGF,kBACE,mDACA,iBAEA,wBACE,SAIJ,OACE,eACA,SACA,QACA,YACA,iBACA,aACA,cACA,iBACA,YAIA,UACE,eACA,qBACA,SACA,QACA,WACA,4BACA,kEACA,sBACA,cACA,YAEA,gBACE,cACA,qEACA,sBAIJ,iBACE,mEACA,YAEA,uBACE,sEAKN,yBACE,yBACA,0BAGF,eACE,kBACA,eACA,yBAEA,qBACE,sBAIJ,IACE,gBAEA,0BACE,UAIJ,eACE,gBACA,eAGF,WACE,WACA,eACA,WACA,YACA,mBACA,sBACA,gBACA,WACA,YAEA,iBACE,YACA,QAGF,iBACE,aAGF,aACE,cACA,WACA,gBACA,gBAGF,gCAEE,WAIJ,YACE,6BACA,kBACA,mBACA,WACA,gBACA,YACA,iBAGF,gBACE,WACA,kBACA,OC5eF,YACE,aACA,cAGF,iCACE,WAGF,4BACE,eACA,eACA,yBAGF,iCACE,yBACA,YAIA,uCAEE,WAGF,iBACE,WAGF,gBACE,YAGF,qBACE,YAGF,iBACE,WAGF,mBACE,WAGF,gBACE,UAGF,mBACE,WAGF,mBACE,WAGF,kBACE,WAGF,eACE,WAIJ,0BACE,qBAGF,0BACE,qBACA,YACA,WACA,gBAGF,kBACE,aAGF,yBACE,YACA,oBAEA,8BACE,sBACA,iBCxFJ,eACE,kBACA,WACA,sDACA,cAIF,aACE,gBAGF,cACE,gBAGF,eACE,mBAGF,cACE,kBAGF,yIASE,iBACA,kBAIF,kQAaE,kBACA,gBAGF,mBACE,MAEA,UACA,mBAGF,oBACE,SAEA,UACA,sBAGF,mBACE,QAEA,SACA,iBAEA,oCACE,YACA,eACA,oBACA,UACA,gBAIJ,gKAQE,OAEA,SACA,gBAGF,sBACE,kBACA,mBAGF,oBACE,gBACA,eACA,kBAGF,qBACE,mBACA,eACA,kBAGF,oBACE,kBACA,eACA,kBAGF,uBACE,eACA,kBAGF,wKAQE,eACA,iBACA,kBAGF,wBACE,gBACA,WAGF,yBACE,cACA,WAIA,0BACE,gBACA,mBACA,iBACA,kBACA,sCACA,sBACA,kBACA,gBAGF,2BACE,sCACA,sBACA,kBACA,gBAKF,uBACE,sBAIA,2DAEE,eAKN,2CACE,6BAIA,uCACE,sBACA,YAGF,+BACE,QACA,SACA,qBACA,wBACA,sBACA,uBACA,uBACA,0BACA,wBACA,yBAIJ,cACE,MACA,OACA,oBACA,gBAGF,4BACE,sBACA,gBAGF,iFAGE,sBACA,cACA,mBACA,gCACA,YAGF,oBACE,gBACA,UAGF,+BACE,sBACA,kBAGF,gCACE,YACA,YAGF,cAEE,kBAGF,sBAEE,kBACA,QACA,qBAIA,wBACE,eACA,iBACA,kBACA,WAEA,sDACE,gCAIJ,4BACE,kBACA,sCChRJ,MACE,SACA,iBACA,qBACA,WACA,YAGF,eACE,WACA,YAGF,cACE,6CAGF,eACE,8CAGF,aACE,4CAGF,eACE,8CAGF,YACE,2CAGF,YACE,2CAGF,iBACE,gDAGF,cACE,6CAGF,mBACE,kDAGF,aACE,4CAGF,WACE,0CAGF,aACE,4CAGF,WACE,0CAGF,WACE,0CAGF,YACE,2CAGF,aACE,4CAGF,gBACE,+CAGF,aACE,4CAGF,aACE,4CAGF,eACE,8CAGF,mBACE,kDAGF,gBACE,+CAGF,YACE,2CAGF,YACE,2CAGF,YACE,2CAGF,WACE,0CAGF,WACE,0CAGF,aACE,4CAGF,YACE,2CAGF,gBACE,+CAGF,kBACE,iDAGF,aACE,4CAGF,eACE,8CAGF,YACE,2CAGF,WACE,0CAGF,WACE,0CAGF,YACE,2CAGF,YACE,4CAGF,aACE,4CAGF,eACE,8CAGF,kBACE,iDAGF,aACE,4CAGF,aACE,4CAGF,WACE,0CAGF,eACE,8CAGF,cACE,6CAGF,YACE,2CAGF,YACE,2CAGF,gBACE,+CAGF,aACE,4CAGF,aACE,4CAGF,kBACE,iDAGF,eACE,8CAGF,WACE,0CAGF,gBACE,+CAGF,cACE,6CAGF,UACE,yCACA,WACA,YAGF,aACE,4CAGF,aACE,4CAGF,cACE,6CAGF,cACE,6CAGF,UACE,yCAGF,aACE,4CAGF,cACE,6CAGF,gBACE,+CAGF,iBACE,gDAGF,gBACE,+CAGF,gBACE,+CAGF,aACE,4CAGF,kBACE,iDAGF,WACE,0CAGF,kBACE,iDAGF,eACE,8CAGF,WACE,0CAGF,aACE,4CAGF,aACE,4CAGF,eACE,8CAGF,cACE,6CAGF,cACE,6CAGF,cACE,6CAGF,eACE,8CAGF,WACE,0CAGF,eACE,8CAGF,YACE,2CAGF,WACE,0CAGF,YACE,2CAGF,cA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","file":"theme.css"} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.rtl.css b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.rtl.css new file mode 100644 index 0000000..8aba567 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.rtl.css @@ -0,0 +1,2 @@ +:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #ddd;--bs-secondary: #ddd;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 221, 221, 221;--bs-secondary-rgb: 221, 221, 221;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 68, 68, 68;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: sans-serif;--bs-body-font-size: 0.82rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #444;--bs-body-bg: #fff}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:140%}h2,.h2{font-size:2em}h3,.h3{font-size:1rem}h4,.h4{font-size:1.23rem}h5,.h5{font-size:1.025rem}h6,.h6{font-size:0.82rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#235a81;text-decoration:none}a:hover{color:#235a81;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr ;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.025rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-right:0;list-style:none}.list-inline{padding-right:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.025rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-left:var(--bs-gutter-x, 0.75rem);padding-right:var(--bs-gutter-x, 0.75rem);margin-left:auto;margin-right:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-left:calc(-0.5*var(--bs-gutter-x));margin-right:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #444;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #444;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #000;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#444;vertical-align:top;border-color:#fff}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:0;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:0 solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:0 0}.table-bordered>:not(caption)>*>*{border-width:0 0}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(even)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #f8f8f8;--bs-table-striped-bg: #ececec;--bs-table-striped-color: #000;--bs-table-active-bg: #dfdfdf;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e5e5;--bs-table-hover-color: #000;color:#000;border-color:#dfdfdf}.table-secondary{--bs-table-bg: #f8f8f8;--bs-table-striped-bg: #ececec;--bs-table-striped-color: #000;--bs-table-active-bg: #dfdfdf;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e5e5;--bs-table-hover-color: #000;color:#000;border-color:#dfdfdf}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.025rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.7175rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:0.82rem;font-weight:400;line-height:1.5;color:#444;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;box-shadow:inset 0 1px 2px rgba(0,0,0,.075)}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#444;background-color:#fff;border-color:#eee;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .25rem rgba(221,221,221,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;background-image:var(--bs-gradient);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;background-image:var(--bs-gradient);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;background-image:var(--bs-gradient);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#444;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem .75rem .375rem 2.25rem;-moz-padding-start:calc(0.75rem - 3px);font-size:0.82rem;font-weight:400;line-height:1.5;color:#444;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;box-shadow:inset 0 1px 2px rgba(0,0,0,.075);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#eee;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .25rem rgba(221,221,221,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-left:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #444}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-right:.5rem;font-size:0.7175rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;font-size:1.025rem;border-radius:.3rem}.form-check{display:block;min-height:1.23rem;padding-right:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:right;margin-right:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#eee;outline:0;box-shadow:0 0 0 .25rem rgba(221,221,221,.25)}.form-check-input:checked{background-color:#0075ff;border-color:#0075ff}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e"),var(--bs-gradient)}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"),var(--bs-gradient)}.form-check-input[type=checkbox]:indeterminate{background-color:#ddd;border-color:#ddd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"),var(--bs-gradient)}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-right:2.5em}.form-switch .form-check-input{width:2em;margin-right:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:right center;border-radius:2em}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23eeeeee'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:left center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"),var(--bs-gradient)}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(221,221,221,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(221,221,221,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#ddd;background-image:var(--bs-gradient);border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-webkit-appearance:none;appearance:none}.form-range::-webkit-slider-thumb:active{background-color:#f5f5f5;background-image:var(--bs-gradient)}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:inset 0 1px 2px rgba(0,0,0,.075)}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#ddd;background-image:var(--bs-gradient);border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-moz-appearance:none;appearance:none}.form-range::-moz-range-thumb:active{background-color:#f5f5f5;background-image:var(--bs-gradient)}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:inset 0 1px 2px rgba(0,0,0,.075)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;right:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:100% 0}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:0.82rem;font-weight:400;line-height:1.5;color:#444;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.7175rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-left:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-left:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.7175rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-left:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-left:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.15;color:#444;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .75rem;font-size:0.82rem;border-radius:.85rem}.btn:hover{color:#444;text-decoration:none}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(221,221,221,.25)}.btn-check:checked+.btn,.btn-check:active+.btn,.btn:active,.btn.active{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-check:checked+.btn:focus,.btn-check:active+.btn:focus,.btn:active:focus,.btn.active:focus{box-shadow:0 0 0 .25rem rgba(221,221,221,.25),inset 0 3px 5px rgba(0,0,0,.125)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65;box-shadow:none}.btn-primary{color:#000;background-color:#ddd;background-image:var(--bs-gradient);border-color:#ddd;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-primary:hover{color:#000;background-color:#e2e2e2;background-image:var(--bs-gradient);border-color:#e0e0e0}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#000;background-color:#e2e2e2;background-image:var(--bs-gradient);border-color:#e0e0e0;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(188,188,188,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#000;background-color:#e4e4e4;background-image:none;border-color:#e0e0e0}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(188,188,188,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#000;background-color:#ddd;background-image:none;border-color:#ddd}.btn-secondary{color:#000;background-color:#ddd;background-image:var(--bs-gradient);border-color:#ddd;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-secondary:hover{color:#000;background-color:#e2e2e2;background-image:var(--bs-gradient);border-color:#e0e0e0}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#000;background-color:#e2e2e2;background-image:var(--bs-gradient);border-color:#e0e0e0;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(188,188,188,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#000;background-color:#e4e4e4;background-image:none;border-color:#e0e0e0}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(188,188,188,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#000;background-color:#ddd;background-image:none;border-color:#ddd}.btn-success{color:#fff;background-color:#198754;background-image:var(--bs-gradient);border-color:#198754;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-success:hover{color:#fff;background-color:#157347;background-image:var(--bs-gradient);border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;background-image:var(--bs-gradient);border-color:#146c43;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;background-image:none;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;background-image:none;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;background-image:var(--bs-gradient);border-color:#0dcaf0;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-info:hover{color:#000;background-color:#31d2f2;background-image:var(--bs-gradient);border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;background-image:var(--bs-gradient);border-color:#25cff2;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;background-image:none;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;background-image:none;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;background-image:var(--bs-gradient);border-color:#ffc107;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-warning:hover{color:#000;background-color:#ffca2c;background-image:var(--bs-gradient);border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;background-image:var(--bs-gradient);border-color:#ffc720;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;background-image:none;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;background-image:none;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;background-image:var(--bs-gradient);border-color:#dc3545;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger:hover{color:#fff;background-color:#bb2d3b;background-image:var(--bs-gradient);border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;background-image:var(--bs-gradient);border-color:#b02a37;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;background-image:none;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;background-image:none;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;background-image:var(--bs-gradient);border-color:#f8f9fa;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-light:hover{color:#000;background-color:#f9fafb;background-image:var(--bs-gradient);border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;background-image:var(--bs-gradient);border-color:#f9fafb;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;background-image:none;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;background-image:none;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;background-image:var(--bs-gradient);border-color:#212529;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-dark:hover{color:#fff;background-color:#1c1f23;background-image:var(--bs-gradient);border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;background-image:var(--bs-gradient);border-color:#1a1e21;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;background-image:none;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;background-image:none;border-color:#212529}.btn-outline-primary{color:#ddd;border-color:#ddd}.btn-outline-primary:hover{color:#000;background-color:#ddd;border-color:#ddd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(221,221,221,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#000;background-color:#ddd;border-color:#ddd}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(221,221,221,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#ddd;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#ddd;border-color:#ddd}.btn-outline-secondary:hover{color:#000;background-color:#ddd;border-color:#ddd}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(221,221,221,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#000;background-color:#ddd;border-color:#ddd}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(221,221,221,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#ddd;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:#235a81;text-decoration:none}.btn-link:hover{color:#235a81;text-decoration:underline}.btn-link:focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden}.collapsing.collapse-horizontal{width:0;height:auto}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:0 0;margin:0;font-size:0.82rem;color:#444;text-align:right;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)}.dropdown-menu[data-bs-popper]{top:100%;right:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{left:0;right:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{left:0;right:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropend .dropdown-menu[data-bs-popper]{top:0;left:auto;right:100%;margin-top:0;margin-right:.125rem}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;left:100%;right:auto;margin-top:0;margin-left:.125rem}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:0 0;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:first-child{border-top-right-radius:calc(0.25rem - 1px);border-top-left-radius:calc(0.25rem - 1px)}.dropdown-item:last-child{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;text-decoration:none;background-color:#e9ecef;background-image:var(--bs-gradient)}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#ddd;background-image:var(--bs-gradient)}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0);background-image:none}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:0 0;margin-bottom:0;font-size:0.7175rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:0 0;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15);background-image:var(--bs-gradient)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#ddd;background-image:var(--bs-gradient)}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-right:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-right:0}.dropstart .dropdown-toggle-split::before{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-top-left-radius:0}.nav{display:flex;flex-wrap:wrap;padding-right:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#235a81}.nav-link:hover,.nav-link:focus{color:#235a81;text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #aaa}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-right-radius:.25rem;border-top-left-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#d5d5d5 #d5d5d5 #aaa;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#000;background-color:#fff;border-color:#aaa #aaa #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#ddd;background-image:var(--bs-gradient)}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:0;padding-left:0;padding-bottom:0;padding-right:0;background-image:var(--bs-gradient)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.34625rem;padding-bottom:.34625rem;margin-left:1rem;font-size:1.025rem;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.025rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:.85rem}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:#235a81}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#235a81}.navbar-light .navbar-nav .nav-link{color:#235a81}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#235a81}.navbar-light .navbar-nav .nav-link.disabled{color:#235a81}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:#235a81}.navbar-light .navbar-toggler{color:#235a81;border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23235a81' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#235a81}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#235a81}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#eee;background-clip:border-box;border:1px solid #aaa;border-radius:.25rem}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-right-radius:calc(0.25rem - 1px);border-top-left-radius:calc(0.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-right:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:#fff;border-bottom:1px solid #aaa}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:#fff;border-top:1px solid #aaa}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-left:-0.5rem;margin-bottom:-0.5rem;margin-right:-0.5rem;border-bottom:0}.card-header-tabs .nav-link.active{background-color:#eee;border-bottom-color:#eee}.card-header-pills{margin-left:-0.5rem;margin-right:-0.5rem}.card-img-overlay{position:absolute;top:0;left:0;bottom:0;right:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-right-radius:calc(0.25rem - 1px);border-top-left-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-right:0;border-right:0}.card-group>.card:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-right-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:.375rem .75rem;font-size:0.82rem;color:#444;text-align:right;background-color:#fff;border:0;border-radius:0;overflow-anchor:none}.accordion-button:not(.collapsed){color:#235a81;background-color:#f3f3f3;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23235a81'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-right:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23444'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#eee;outline:0;box-shadow:0 0 0 .25rem rgba(221,221,221,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-right-radius:calc(0.25rem - 1px);border-top-left-radius:calc(0.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-left:0;border-right:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-right:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:right;padding-left:.5rem;color:#fff;content:var(--bs-breadcrumb-divider, "»")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-right:0;list-style:none}.page-link{position:relative;display:block;color:#235a81;background-color:#fff;border:1px solid #aaa}.page-link:hover{z-index:2;color:#235a81;text-decoration:none;background-color:#e9ecef;border-color:#aaa}.page-link:focus{z-index:3;color:#235a81;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(221,221,221,.25)}.page-item:not(:first-child) .page-link{margin-right:-1px}.page-item.active .page-link{z-index:3;color:#235a81;background-color:#ddd;background-image:var(--bs-gradient);border-color:#aaa}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#aaa}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item:last-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.025rem}.pagination-lg .page-item:first-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.7175rem}.pagination-sm .page-item:first-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;background-image:var(--bs-gradient)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:.5em;border:1px solid rgba(0,0,0,0);border-radius:5px}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{position:absolute;top:0;left:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#585858;background-color:#f8f8f8;background-image:var(--bs-gradient);border-color:#f5f5f5}.alert-primary .alert-link{color:#464646}.alert-secondary{color:#585858;background-color:#f8f8f8;background-image:var(--bs-gradient);border-color:#f5f5f5}.alert-secondary .alert-link{color:#464646}.alert-success{color:#0f5132;background-color:#d1e7dd;background-image:var(--bs-gradient);border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;background-image:var(--bs-gradient);border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;background-image:var(--bs-gradient);border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;background-image:var(--bs-gradient);border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;background-image:var(--bs-gradient);border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;background-image:var(--bs-gradient);border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#444;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.375rem .75rem;color:#212529;background-color:inherit;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-right-radius:inherit;border-top-left-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:inherit}.list-group-item.active{z-index:2;color:#fff;background-color:#ddd;border-color:#ddd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#585858;background-color:#f8f8f8}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#585858;background-color:#dfdfdf}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#585858;border-color:#585858}.list-group-item-secondary{color:#585858;background-color:#f8f8f8}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#585858;background-color:#dfdfdf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#585858;border-color:#585858}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(221,221,221,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.modal{position:fixed;top:0;right:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transform:translate(0, -50px)}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;box-shadow:0 .125rem .25rem rgba(0,0,0,.075);outline:0}.modal-backdrop{position:fixed;top:0;right:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:.4rem .75rem;border-bottom:1px solid #dee2e6;border-top-right-radius:calc(0.3rem - 1px);border-top-left-radius:calc(0.3rem - 1px)}.modal-header .btn-close{padding:.2rem .375rem;margin:-0.2rem auto -0.2rem -0.375rem}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:.75rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.7rem;border-top:1px solid #dee2e6;border-bottom-left-radius:calc(0.3rem - 1px);border-bottom-right-radius:calc(0.3rem - 1px)}.modal-footer>*{margin:.05rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-content{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}@-webkit-keyframes spinner-border{to{transform:rotate(-360deg)}}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-left-color:rgba(0,0,0,0);border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#ddd}.link-primary:hover,.link-primary:focus{color:#e4e4e4}.link-secondary{color:#ddd}.link-secondary:hover,.link-secondary:focus{color:#e4e4e4}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:right !important}.float-end{float:left !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{right:0 !important}.start-50{right:50% !important}.start-100{right:100% !important}.end-0{left:0 !important}.end-50{left:50% !important}.end-100{left:100% !important}.translate-middle{transform:translate(50%, -50%) !important}.translate-middle-x{transform:translateX(50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-top-0{border-top:0 !important}.border-end{border-left:1px solid #dee2e6 !important}.border-end-0{border-left:0 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-right:1px solid #dee2e6 !important}.border-start-0{border-right:0 !important}.border-primary{border-color:#ddd !important}.border-secondary{border-color:#ddd !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-3{margin-left:1rem !important;margin-right:1rem !important}.mx-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-5{margin-left:3rem !important;margin-right:3rem !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-left:0 !important}.me-1{margin-left:.25rem !important}.me-2{margin-left:.5rem !important}.me-3{margin-left:1rem !important}.me-4{margin-left:1.5rem !important}.me-5{margin-left:3rem !important}.me-auto{margin-left:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-right:0 !important}.ms-1{margin-right:.25rem !important}.ms-2{margin-right:.5rem !important}.ms-3{margin-right:1rem !important}.ms-4{margin-right:1.5rem !important}.ms-5{margin-right:3rem !important}.ms-auto{margin-right:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-left:0 !important;padding-right:0 !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-3{padding-left:1rem !important;padding-right:1rem !important}.px-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-5{padding-left:3rem !important;padding-right:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-left:0 !important}.pe-1{padding-left:.25rem !important}.pe-2{padding-left:.5rem !important}.pe-3{padding-left:1rem !important}.pe-4{padding-left:1.5rem !important}.pe-5{padding-left:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-right:0 !important}.ps-1{padding-right:.25rem !important}.ps-2{padding-right:.5rem !important}.ps-3{padding-right:1rem !important}.ps-4{padding-right:1.5rem !important}.ps-5{padding-right:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:140% !important}.fs-2{font-size:2em !important}.fs-3{font-size:1rem !important}.fs-4{font-size:1.23rem !important}.fs-5{font-size:1.025rem !important}.fs-6{font-size:0.82rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:right !important}.text-end{text-align:left !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:.25rem !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:.25rem !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-right-radius:.25rem !important;border-top-left-radius:.25rem !important}.rounded-end{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-bottom{border-bottom-left-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-start{border-bottom-right-radius:.25rem !important;border-top-right-radius:.25rem !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:right !important}.float-sm-end{float:left !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-left:0 !important;margin-right:0 !important}.mx-sm-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-sm-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-sm-3{margin-left:1rem !important;margin-right:1rem !important}.mx-sm-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-sm-5{margin-left:3rem !important;margin-right:3rem !important}.mx-sm-auto{margin-left:auto !important;margin-right:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-left:0 !important}.me-sm-1{margin-left:.25rem !important}.me-sm-2{margin-left:.5rem !important}.me-sm-3{margin-left:1rem !important}.me-sm-4{margin-left:1.5rem !important}.me-sm-5{margin-left:3rem !important}.me-sm-auto{margin-left:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-right:0 !important}.ms-sm-1{margin-right:.25rem !important}.ms-sm-2{margin-right:.5rem !important}.ms-sm-3{margin-right:1rem !important}.ms-sm-4{margin-right:1.5rem !important}.ms-sm-5{margin-right:3rem !important}.ms-sm-auto{margin-right:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-left:0 !important;padding-right:0 !important}.px-sm-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-sm-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-sm-3{padding-left:1rem !important;padding-right:1rem !important}.px-sm-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-sm-5{padding-left:3rem !important;padding-right:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-left:0 !important}.pe-sm-1{padding-left:.25rem !important}.pe-sm-2{padding-left:.5rem !important}.pe-sm-3{padding-left:1rem !important}.pe-sm-4{padding-left:1.5rem !important}.pe-sm-5{padding-left:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-right:0 !important}.ps-sm-1{padding-right:.25rem !important}.ps-sm-2{padding-right:.5rem !important}.ps-sm-3{padding-right:1rem !important}.ps-sm-4{padding-right:1.5rem !important}.ps-sm-5{padding-right:3rem !important}.text-sm-start{text-align:right !important}.text-sm-end{text-align:left !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:right !important}.float-md-end{float:left !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-left:0 !important;margin-right:0 !important}.mx-md-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-md-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-md-3{margin-left:1rem !important;margin-right:1rem !important}.mx-md-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-md-5{margin-left:3rem !important;margin-right:3rem !important}.mx-md-auto{margin-left:auto !important;margin-right:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-left:0 !important}.me-md-1{margin-left:.25rem !important}.me-md-2{margin-left:.5rem !important}.me-md-3{margin-left:1rem !important}.me-md-4{margin-left:1.5rem !important}.me-md-5{margin-left:3rem !important}.me-md-auto{margin-left:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-right:0 !important}.ms-md-1{margin-right:.25rem !important}.ms-md-2{margin-right:.5rem !important}.ms-md-3{margin-right:1rem !important}.ms-md-4{margin-right:1.5rem !important}.ms-md-5{margin-right:3rem !important}.ms-md-auto{margin-right:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-left:0 !important;padding-right:0 !important}.px-md-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-md-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-md-3{padding-left:1rem !important;padding-right:1rem !important}.px-md-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-md-5{padding-left:3rem !important;padding-right:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-left:0 !important}.pe-md-1{padding-left:.25rem !important}.pe-md-2{padding-left:.5rem !important}.pe-md-3{padding-left:1rem !important}.pe-md-4{padding-left:1.5rem !important}.pe-md-5{padding-left:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-right:0 !important}.ps-md-1{padding-right:.25rem !important}.ps-md-2{padding-right:.5rem !important}.ps-md-3{padding-right:1rem !important}.ps-md-4{padding-right:1.5rem !important}.ps-md-5{padding-right:3rem !important}.text-md-start{text-align:right !important}.text-md-end{text-align:left !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:right !important}.float-lg-end{float:left !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-left:0 !important;margin-right:0 !important}.mx-lg-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-lg-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-lg-3{margin-left:1rem !important;margin-right:1rem !important}.mx-lg-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-lg-5{margin-left:3rem !important;margin-right:3rem !important}.mx-lg-auto{margin-left:auto !important;margin-right:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-left:0 !important}.me-lg-1{margin-left:.25rem !important}.me-lg-2{margin-left:.5rem !important}.me-lg-3{margin-left:1rem !important}.me-lg-4{margin-left:1.5rem !important}.me-lg-5{margin-left:3rem !important}.me-lg-auto{margin-left:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-right:0 !important}.ms-lg-1{margin-right:.25rem !important}.ms-lg-2{margin-right:.5rem !important}.ms-lg-3{margin-right:1rem !important}.ms-lg-4{margin-right:1.5rem !important}.ms-lg-5{margin-right:3rem !important}.ms-lg-auto{margin-right:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-left:0 !important;padding-right:0 !important}.px-lg-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-lg-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-lg-3{padding-left:1rem !important;padding-right:1rem !important}.px-lg-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-lg-5{padding-left:3rem !important;padding-right:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-left:0 !important}.pe-lg-1{padding-left:.25rem !important}.pe-lg-2{padding-left:.5rem !important}.pe-lg-3{padding-left:1rem !important}.pe-lg-4{padding-left:1.5rem !important}.pe-lg-5{padding-left:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-right:0 !important}.ps-lg-1{padding-right:.25rem !important}.ps-lg-2{padding-right:.5rem !important}.ps-lg-3{padding-right:1rem !important}.ps-lg-4{padding-right:1.5rem !important}.ps-lg-5{padding-right:3rem !important}.text-lg-start{text-align:right !important}.text-lg-end{text-align:left !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:right !important}.float-xl-end{float:left !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-left:0 !important;margin-right:0 !important}.mx-xl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xl-auto{margin-left:auto !important;margin-right:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-left:0 !important}.me-xl-1{margin-left:.25rem !important}.me-xl-2{margin-left:.5rem !important}.me-xl-3{margin-left:1rem !important}.me-xl-4{margin-left:1.5rem !important}.me-xl-5{margin-left:3rem !important}.me-xl-auto{margin-left:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-right:0 !important}.ms-xl-1{margin-right:.25rem !important}.ms-xl-2{margin-right:.5rem !important}.ms-xl-3{margin-right:1rem !important}.ms-xl-4{margin-right:1.5rem !important}.ms-xl-5{margin-right:3rem !important}.ms-xl-auto{margin-right:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-left:0 !important;padding-right:0 !important}.px-xl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-left:0 !important}.pe-xl-1{padding-left:.25rem !important}.pe-xl-2{padding-left:.5rem !important}.pe-xl-3{padding-left:1rem !important}.pe-xl-4{padding-left:1.5rem !important}.pe-xl-5{padding-left:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-right:0 !important}.ps-xl-1{padding-right:.25rem !important}.ps-xl-2{padding-right:.5rem !important}.ps-xl-3{padding-right:1rem !important}.ps-xl-4{padding-right:1.5rem !important}.ps-xl-5{padding-right:3rem !important}.text-xl-start{text-align:right !important}.text-xl-end{text-align:left !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:right !important}.float-xxl-end{float:left !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-left:0 !important;margin-right:0 !important}.mx-xxl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xxl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xxl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xxl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xxl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xxl-auto{margin-left:auto !important;margin-right:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-left:0 !important}.me-xxl-1{margin-left:.25rem !important}.me-xxl-2{margin-left:.5rem !important}.me-xxl-3{margin-left:1rem !important}.me-xxl-4{margin-left:1.5rem !important}.me-xxl-5{margin-left:3rem !important}.me-xxl-auto{margin-left:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-right:0 !important}.ms-xxl-1{margin-right:.25rem !important}.ms-xxl-2{margin-right:.5rem !important}.ms-xxl-3{margin-right:1rem !important}.ms-xxl-4{margin-right:1.5rem !important}.ms-xxl-5{margin-right:3rem !important}.ms-xxl-auto{margin-right:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-left:0 !important;padding-right:0 !important}.px-xxl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xxl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xxl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xxl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xxl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-left:0 !important}.pe-xxl-1{padding-left:.25rem !important}.pe-xxl-2{padding-left:.5rem !important}.pe-xxl-3{padding-left:1rem !important}.pe-xxl-4{padding-left:1.5rem !important}.pe-xxl-5{padding-left:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-right:0 !important}.ps-xxl-1{padding-right:.25rem !important}.ps-xxl-2{padding-right:.5rem !important}.ps-xxl-3{padding-right:1rem !important}.ps-xxl-4{padding-right:1.5rem !important}.ps-xxl-5{padding-right:3rem !important}.text-xxl-start{text-align:right !important}.text-xxl-end{text-align:left !important}.text-xxl-center{text-align:center !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}#page_content{margin:0 .5em}h2 img,.h2 img{display:none}h2 a img,.h2 a img{display:inline}.data{margin:0 0 12px}button.mult_submit,.checkall_box+label{text-decoration:none;color:#235a81;cursor:pointer;outline:none}button.mult_submit:hover,button.mult_submit:focus{text-decoration:underline;color:#235a81}.checkall_box+label:hover{text-decoration:underline;color:#235a81}dfn{font-style:normal}dfn:hover{font-style:normal;cursor:help}a img{border:0}hr{color:#444;background-color:#444;border:0;height:1px}form{padding:0;margin:0;display:inline}input,select{outline:none}input[type=text],input[type=password],input[type=number],input[type=date]{border-radius:2px;background:#fff;border:1px solid #aaa;color:#555;padding:4px}input:not(.form-control)[type=text],input:not(.form-control)[type=password],input:not(.form-control)[type=number],input[type=date],input:not(.form-check-input)[type=checkbox]{margin:6px}select:not(.form-select){margin:6px}input[type=text],input[type=password],input[type=number],input[type=date]{transition:all .2s}select{transition:all .2s}input[type=text][disabled],input[type=password][disabled],input[type=number][disabled],input[type=date][disabled]{background:#e8e8e8;box-shadow:none}input[type=text][disabled]:hover,input[type=password][disabled]:hover,input[type=number][disabled]:hover,input[type=date][disabled]:hover{background:#e8e8e8;box-shadow:none}select[disabled]{background:#e8e8e8;box-shadow:none}select[disabled]:hover{background:#e8e8e8;box-shadow:none}input[type=text]:hover,input[type=text]:focus{border:1px solid #7c7c7c;background:#fff}input[type=password]:hover,input[type=password]:focus{border:1px solid #7c7c7c;background:#fff}input[type=number]:hover,input[type=number]:focus{border:1px solid #7c7c7c;background:#fff}input[type=date]:hover,input[type=date]:focus{border:1px solid #7c7c7c;background:#fff}select:focus{border:1px solid #7c7c7c;background:#fff}input[type=text]:hover,input[type=password]:hover,input[type=number]:hover,input[type=date]:hover{box-shadow:0 1px 3px #aaa}textarea{overflow:visible;margin:6px}textarea.char{margin:6px}textarea.charField{width:95%}.pma-fieldset{margin-top:1em;border-radius:4px 4px 0 0;border:#aaa solid 1px;padding:.5em;background:#eee;text-shadow:-1px 1px 2px #fff inset;box-shadow:-1px 1px 2px #fff inset}.pma-fieldset .pma-fieldset{margin:.8em;border:1px solid #aaa;background:#e8e8e8}.pma-fieldset legend{float:none;font-weight:bold;color:#444;padding:5px 10px;border-radius:2px;border:1px solid #aaa;background-color:#fff;max-width:100%;box-shadow:-3px 3px 15px #bbb;width:initial;font-size:1em}button{display:inline}.datatable{table-layout:fixed}img,button{vertical-align:middle}input:not(.form-check-input)[type=checkbox],input[type=radio]{vertical-align:-11%}select{border-radius:2px;border:1px solid #bbb;color:#333;padding:3px;background:#fff}select:not(.form-select){margin:6px}select[multiple]{background:linear-gradient(#fff, #f2f2f2)}.clearfloat{clear:both}.paddingtop{padding-top:1em}.separator{color:#fff;text-shadow:0 1px 0 #000}div.tools{padding:.2em;margin-top:0;margin-bottom:.5em;border-top:0;text-align:left;float:none;clear:both;border-radius:0 0 4px 4px}div.tools a{color:#3a7ead !important}.pma-fieldset.tblFooters{margin-top:0;margin-bottom:.5em;border-top:0;text-align:left;float:none;clear:both;border-radius:0 0 4px 4px}div.null_div{height:20px;text-align:center;font-style:normal;min-width:50px}.pma-fieldset .formelement{float:right;margin-left:.5em;white-space:nowrap}.pma-fieldset div[class=formelement]{white-space:normal}button.mult_submit{border:none;background-color:rgba(0,0,0,0)}.condition{border-color:#000 !important}th.condition{border-width:1px 1px 0 1px;border-style:solid}td.condition{border-width:0 1px 0 1px;border-style:solid}tr:last-child td.condition{border-width:0 1px 1px 1px}.before-condition{border-left:1px solid #000}td.null{font-style:italic;color:#7d7d7d !important}table .valueHeader,table .value{text-align:left;white-space:normal}.value{font-family:monospace}img.lightbulb{cursor:pointer}.pdflayout{overflow:hidden;clip:inherit;background-color:#fff;display:none;border:1px solid #000;position:relative}.pdflayout_table{background:#d3dce3;color:#000;overflow:hidden;clip:inherit;z-index:2;display:inline;visibility:inherit;cursor:move;position:absolute;font-size:80%;border:1px dashed #000}.cm-sql-doc{text-decoration:none;border-bottom:1px dotted #000;color:inherit !important}.selectallarrow{margin-left:.3em;margin-right:.6em}.with-selected{margin-right:2em}#pma_errors,#pma_demo,#pma_footer{position:relative;padding:0 .5em}.confirmation{color:#000;background-color:pink}.error{border:1px solid maroon !important;padding:.27em;color:#000;background:pink}.new_central_col{width:100%}.tblcomment{font-size:70%;font-weight:normal;color:#009}.tblHeaders{font-weight:bold;color:#000;background:#d3dce3}div.tools,.tblFooters{font-weight:normal;color:#000;background:#d3dce3}.tblHeaders a:link,.tblHeaders a:active,.tblHeaders a:visited{color:blue}div.tools a:link,div.tools a:visited,div.tools a:active{color:blue}.tblFooters a:link,.tblFooters a:active,.tblFooters a:visited{color:blue}.tblHeaders a:hover,div.tools a:hover,.tblFooters a:hover{color:red}.disabled{color:#666}.disabled a:link,.disabled a:active,.disabled a:visited{color:#666}.disabled a:hover{color:#666;text-decoration:none}.pre_wrap{white-space:pre-wrap}.pre_wrap br{display:none}body#loginform{margin:1em 0 0 0;text-align:center}body#loginform h1,body#loginform .h1,body#loginform a.logo{display:block;text-align:center}body#loginform div.container{text-align:right;width:30em;margin:0 auto}#login_form .card-footer{text-align:left}div.container.modal_form{margin:0 auto;width:30em;text-align:center;background:#fff;z-index:999}div#modalOverlay{position:fixed;top:0;right:0;height:100%;width:100%;background:#fff;z-index:900}label.col-3.d-flex.align-items-center{font-weight:bolder}.commented_column{border-bottom:1px dashed #000}.column_attribute{font-size:70%}.column_name{font-size:80%;margin:5px 2px}.central_columns_navigation{padding:1.5% 0 !important}.message_errors_found{margin-top:20px}.repl_gui_skip_err_cnt{width:30px}.color_gray{color:gray}.max_height_400{max-height:400px}li.last.database{margin-bottom:15px !important}div#dataDisplay input,div#dataDisplay select{margin:0;margin-left:.5em}div#dataDisplay th{line-height:2em}img.calendar{border:none}form.clock{text-align:center}div#tablestatistics table{float:right;margin-bottom:.5em;margin-left:1.5em;margin-top:.5em;min-width:16em}#topmenucontainer{padding-left:1em;width:100%}#page_nav_icons{position:fixed;top:0;left:0;z-index:99;padding:.1rem 0}#page_settings_icon{cursor:pointer;display:none}#page_settings_modal,#pma_navigation_settings{display:none}#textSQLDUMP{width:95%;height:95%;font-family:Consolas,"Courier New",Courier,monospace;font-size:110%}#TooltipContainer{position:absolute;z-index:99;width:20em;height:auto;overflow:visible;visibility:hidden;background-color:#ffc;color:#060;border:.1em solid #000;padding:.5em}#fieldset_add_user_login div.item{display:flex;align-items:center;border-bottom:1px solid silver;padding-bottom:.3em;margin-bottom:.3em}#fieldset_add_user_login label{float:right;display:block;width:10em;max-width:100%;text-align:left;padding-left:.5em;margin-bottom:0}#fieldset_add_user_login input{width:12em;clear:left;max-width:100%}#fieldset_add_user_login span.options{float:right;display:block;width:12em;max-width:100%;padding-left:.5em}#fieldset_add_user_login span.options #select_pred_username,#fieldset_add_user_login span.options #select_pred_hostname,#fieldset_add_user_login span.options #select_pred_password{width:100%;max-width:100%}#fieldset_add_user_login span.options input{width:auto}#fieldset_user_priv div.item{float:right;width:9em;max-width:100%}#fieldset_user_priv div.item div.item{float:none}#fieldset_user_priv div.item label{white-space:nowrap}#fieldset_user_priv div.item select{width:100%}#fieldset_user_global_rights .pma-fieldset,#fieldset_user_group_rights .pma-fieldset{float:right}#fieldset_user_global_rights>legend input{margin-right:2em}.linkElem:hover{text-decoration:underline;color:#235a81;cursor:pointer}h3#serverstatusqueries span,#serverstatusqueries.h3 span{font-size:60%;display:inline}div#serverStatusTabs{margin-top:1em}caption a.top{float:left}div#serverstatusquerieschart{float:right;width:500px;height:350px;margin-left:50px}div#serverstatus table tbody td.descr a,div#serverstatus table .tblFooters a{white-space:nowrap}div.liveChart{clear:both;min-width:500px;height:400px;padding-bottom:80px}div#chartVariableSettings{border:1px solid #ddd;background-color:#e6e6e6;margin-right:10px}table#chartGrid td{padding:3px;margin:0}table#chartGrid div.monitorChart{background:#ebebeb;border:none;min-width:1px}div.tabLinks{float:right;padding:5px 0}div.tabLinks a,div.tabLinks label{margin-left:7px}div.tabLinks .icon{margin:-0.2em 0 0 .3em}.popupContent{display:none;position:absolute;border:1px solid #ccc;margin:0;padding:3px;background-color:#fff;z-index:2;box-shadow:-2px 2px 3px #666}div#logTable{padding-top:10px;clear:both}div#logTable table{width:100%}div#queryAnalyzerDialog{min-width:700px}div#queryAnalyzerDialog div.CodeMirror-scroll{height:auto}div#queryAnalyzerDialog div#queryProfiling{height:300px}div#queryAnalyzerDialog td.explain{width:250px}div#queryAnalyzerDialog table.queryNums{display:none;border:0;text-align:right}.smallIndent{padding-right:7px}div#profilingchart{width:850px;height:370px;float:right}#profilingchart .jqplot-highlighter-tooltip{top:auto !important;right:11px;bottom:24px}#resizer{border:1px solid silver}#inner-resizer{padding:10px}#togglequerybox{margin:0 10px}#serverstatus h3,#serverstatus .h3{margin:15px 0;font-weight:normal;color:#999;font-size:1.7em}textarea#sqlquery{width:100%;border-radius:4px;border:1px solid #aaa;padding:5px;font-family:inherit}textarea#sql_query_edit{height:7em;width:95%;display:block}#mysqlmaininformation,#pmamaininformation{float:right;width:49%}#maincontainer ul{list-style-type:disc;vertical-align:middle}#maincontainer li{margin-bottom:.3em}#full_name_layer{position:absolute;padding:2px;margin-top:-3px;z-index:801;border-radius:3px;border:solid 1px #888;background:#fff}#body_browse_foreigners{background:#f3f3f3;margin:.5em .5em 0 .5em}#bodythemes{width:500px;margin:auto;text-align:center}#bodythemes img{border:.1em solid #000}#bodythemes a:hover img{border:.1em solid red}#selflink{clear:both;display:block;margin-top:1em;margin-bottom:1em;width:98%;margin-right:1%;text-align:left;border-top:.1em solid silver}#qbe_div_table_list,#qbe_div_sql_query{float:right}kbd{color:#444;background-color:rgba(0,0,0,0);box-shadow:none}code{font-size:1em;color:#444}code.php{display:block;padding-right:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}code.sql{display:block;padding:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}div.sqlvalidate{display:block;padding:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}.result_query div.sqlOuter{background:#e5e5e5;text-align:right}#PMA_slidingMessage code.sql,div.sqlvalidate{background:#e5e5e5}textarea#partitiondefinition{height:3em}.hide{display:none}#list_server{list-style-type:none;padding:0}div.upload_progress{width:400px;margin:3em auto;text-align:center}div.upload_progress_bar_outer{border:1px solid #000;width:202px;position:relative;margin:0 auto 1em;color:#444}div.upload_progress_bar_outer div.percentage{position:absolute;top:0;right:0;width:202px}div.upload_progress_bar_inner{background-color:#ddd;width:0;height:12px;margin:1px;overflow:hidden;color:#000;position:relative}div.upload_progress_bar_inner div.percentage{top:-1px;right:-1px}div#statustext{margin-top:.5em}table#serverconnection_src_remote,table#serverconnection_trg_remote,table#serverconnection_src_local,table#serverconnection_trg_local{float:right}input[type=text].invalid_value,input[type=password].invalid_value,input[type=number].invalid_value,input[type=date].invalid_value{background:#fcc}select.invalid_value,.invalid_value{background:#fcc}.ajax_notification{top:0;position:fixed;margin-top:200px;margin-left:auto;margin-bottom:0;margin-right:auto;padding:5px;width:350px;z-index:1100;text-align:center;display:inline;right:0;left:0;background-image:url("../img/ajax_clock_small.gif");background-repeat:no-repeat;background-position:98%;border:1px solid #e2b709;background-color:#ffe57e;border-radius:5px;box-shadow:0 5px 90px #888}#loading_parent{position:relative;width:100%}input#import_merge{margin:0}#popup_background{display:none;position:fixed;width:100%;height:100%;top:0;right:0;background:#000;z-index:1000;overflow:hidden}#tablestructure tbody label{margin:.3rem 0}#structure-action-links a{margin-left:1em}#addColumns input[type=radio]{margin:3px 0 0;margin-right:1em}#index_frm .index_info input[type=text],#index_frm .index_info select{width:100%;margin:0;box-sizing:border-box}#index_frm .index_info div{padding:.2em 0}#index_frm .index_info .label{float:right;min-width:12em}#index_frm .slider{width:10em;margin:.6em;float:right}#index_frm .add_fields{float:right}#index_frm .add_fields input{margin-right:1em}#index_frm input{margin:0}#index_frm td{vertical-align:middle}table#index_columns{width:100%}table#index_columns select{width:85%;float:right}#move_columns_dialog div{padding:1em}#move_columns_dialog ul{list-style:none;margin:0;padding:0}#move_columns_dialog li{background:#d3dce3;border:1px solid #aaa;color:#000;font-weight:bold;margin:.4em;padding:.2em;border-radius:2px}.config-form .card{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.config-form fieldset{margin-top:0;padding:0;clear:both;border-radius:0}.config-form fieldset p{margin:0;padding:.5em;background:#fff;border-top:0}.config-form fieldset .errors{margin:0 -2px 1em;padding:.5em 1.5em;background:#fbead9;list-style:none;font-family:sans-serif;font-size:small}.config-form fieldset .inline_errors{margin:.3em .3em .3em;margin-right:0;padding:0;list-style:none;color:#9a0000;font-size:small}.config-form fieldset .doc{margin-right:1em}.config-form fieldset .disabled-notice{margin-right:1em;font-size:80%;text-transform:uppercase;color:#e00;cursor:help}.config-form fieldset th{padding:.3em .3em .3em;padding-right:.5em;text-align:right;vertical-align:top;background:rgba(0,0,0,0);filter:none;border-top:1px #d5d5d5 solid;border-left:none}.config-form fieldset th small,.config-form fieldset th .small{display:block;font-weight:normal;font-family:sans-serif;font-size:x-small;color:#444}.config-form fieldset td{padding-top:.3em;padding-bottom:.3em;vertical-align:top;border-top:1px #d5d5d5 solid;border-left:none}.config-form legend{display:none}.config-form span.checkbox{padding:2px;display:inline-block}.config-form span.checkbox.custom{padding:1px;border:1px #edec90 solid;background:#ffc}.config-form .custom{background:#ffc}.config-form .field-error{border-color:#a11 !important}.config-form input[type=text],.config-form input[type=password],.config-form input[type=number]{border:1px #a7a6aa solid;height:auto}.config-form input[type=text]:focus,.config-form input[type=password]:focus,.config-form input[type=number]:focus{border:1px #6676ff solid;background:#f7fbff}.config-form select,.config-form textarea{border:1px #a7a6aa solid;height:auto}.config-form select:focus,.config-form textarea:focus{border:1px #6676ff solid;background:#f7fbff}.config-form .field-comment-mark{font-family:serif;color:#007;cursor:help;padding:0 .2em;font-weight:bold;font-style:italic}.config-form .field-comment-warning{color:#a00}.config-form dd{margin-right:.5em}.config-form dd::before{content:"▸ "}fieldset .group-header th{background:#d5d5d5}fieldset .group-header+tr th{padding-top:.6em}fieldset .group-field-1 th,fieldset .group-header-2 th{padding-right:1.5em}fieldset .group-field-2 th,fieldset .group-header-3 th{padding-right:3em}fieldset .group-field-3 th{padding-right:4.5em}fieldset .disabled-field th{color:#666;background-color:#ddd}fieldset .disabled-field th small,fieldset .disabled-field th .small{color:#666;background-color:#ddd}fieldset .disabled-field td{color:#666;background-color:#ddd}.click-hide-message{cursor:pointer}.prefsmanage_opts{margin-right:2em}#prefs_autoload{margin-bottom:.5em;margin-right:.5em}input#auto_increment_opt{width:-webkit-min-content;width:-moz-min-content;width:min-content}#placeholder{position:relative;border:1px solid #aaa;float:left;overflow:hidden;width:450px;height:300px}#placeholder .button{position:absolute;cursor:pointer}#placeholder div.button{font-size:smaller;color:#999;background-color:#eee;padding:2px}.wrapper{float:right;margin-bottom:1.5em}.toggleButton{position:relative;cursor:pointer;font-size:.8em;text-align:center;line-height:1.4em;height:1.55em;overflow:hidden;border-left:.1em solid #888;border-right:.1em solid #888;border-radius:.3em}.toggleButton table,.toggleButton td,.toggleButton img{padding:0;position:relative}.toggleButton .toggle-container{position:absolute}.toggleButton .toggle-container td,.toggleButton .toggle-container tr{background:none !important}.toggleButton .toggleOn{color:#fff;padding:0 1em;text-shadow:0 0 .2em #000}.toggleButton .toggleOff{padding:0 1em}.doubleFieldset .pma-fieldset{width:48%;float:right;padding:0}.doubleFieldset legend{margin-right:1.5em}.doubleFieldset div.wrap{padding:1.5em}#table_name_col_no_outer{margin-top:45px}#table_name_col_no{position:fixed;top:55px;width:100%;background:#fff}#table_columns{display:block;overflow:auto}#table_columns input[type=text],#table_columns input[type=password],#table_columns input[type=number]{width:10em;box-sizing:border-box}#table_columns select{width:10em;box-sizing:border-box}#openlayersmap{width:450px;height:300px}.placeholderDrag{cursor:move}#left_arrow{right:8px;top:26px}#right_arrow{right:26px;top:26px}#up_arrow{right:17px;top:8px}#down_arrow{right:17px;top:44px}#zoom_in{right:17px;top:67px}#zoom_world{right:17px;top:85px}#zoom_out{right:17px;top:103px}.colborder{cursor:col-resize;height:100%;margin-right:-6px;position:absolute;width:5px}.colborder_active{border-left:2px solid #a44}.pma_table th.draggable span{display:block;overflow:hidden}.pma_table td{position:static}.pma_table tbody td span{display:block;overflow:hidden}.pma_table tbody td span code span{display:inline}.pma_table th.draggable span{margin-left:10px}.modal-copy input{display:block;width:100%;margin-top:1.5em;padding:.3em 0}.cRsz{position:absolute}.cCpy{background:#333;color:#fff;font-weight:bold;margin:.1em;padding:.3em;position:absolute;text-shadow:1px -1px #000;box-shadow:0 0 .7em #000;border-radius:.3em}.cPointer{height:20px;width:10px;margin-top:-10px;margin-right:-5px;background:url("../img/col_pointer.png");position:absolute}.tooltip{background:#333 !important;opacity:.8 !important;z-index:9999;border:1px solid #000 !important;border-radius:.3em !important;text-shadow:1px -1px #000 !important;font-size:.8em !important;font-weight:bold !important;padding:1px 3px !important}.tooltip *{background:none !important;color:#fff !important}.cDrop{left:0;position:absolute;top:0}.coldrop{background:url("../img/col_drop.png");cursor:pointer;height:16px;margin-top:.3em;width:16px}.coldrop:hover{background-color:#999}.coldrop-hover{background-color:#999}.cList{background:#eee;border:solid 1px #999;position:absolute;box-shadow:0 .2em .5em #333;margin-right:75%;left:0;max-width:100%;overflow-wrap:break-word}.cList .lDiv div{padding:.2em .5em .2em;padding-right:.2em}.cList .lDiv div:hover{background:#ddd;cursor:pointer}.cList .lDiv div input{cursor:pointer}.showAllColBtn{border-bottom:solid 1px #999;border-top:solid 1px #999;cursor:pointer;font-size:.9em;font-weight:bold;padding:.35em 1em;text-align:center}.showAllColBtn:hover{background:#ddd}.turnOffSelect{-webkit-user-select:none;-moz-user-select:none;user-select:none}.navigation{margin:.8em 0;border-radius:5px;background:linear-gradient(#eee, #ccc)}.navigation td{margin:0;padding:0;vertical-align:middle;white-space:nowrap}.navigation input[type=submit]{background:none;border:0;filter:none;margin:0;padding:.8em .5em;border-radius:0}.navigation input[type=submit]:hover{color:#fff;cursor:pointer;text-shadow:none;background:linear-gradient(#333, #555)}.navigation input.edit_mode_active{color:#fff;cursor:pointer;text-shadow:none;background:linear-gradient(#333, #555)}.navigation .btn-link{color:#444}.navigation .btn-link:hover{color:#fff;background-image:linear-gradient(#333, #555);text-decoration:none}.navigation select{margin:0 .8em}.navigation_separator{color:#999;display:inline-block;font-size:1.5em;text-align:center;height:1.4em;width:1.2em;text-shadow:-1px 0 #fff}.cEdit{margin:0;padding:0;position:absolute}.cEdit input[type=text]{background:#fff;height:100%;margin:0;padding:0}.cEdit .edit_area{background:#fff;border:1px solid #999;min-width:10em;padding:.3em .5em}.cEdit .edit_area select,.cEdit .edit_area textarea{width:97%}.cEdit .cell_edit_hint{color:#555;font-size:.8em;margin:.3em .2em}.cEdit .edit_box{overflow-x:hidden;overflow-y:scroll;padding:3px;margin:0}.cEdit .edit_box_posting{background:#fff url("../img/ajax_clock_small.gif") no-repeat left center;padding-left:1.5em}.cEdit .edit_area_loading{background:#fff url("../img/ajax_clock_small.gif") no-repeat center;height:10em}.cEdit .goto_link{background:#eee;color:#555;padding:.2em .3em}.saving_edited_data{background:url("../img/ajax_clock_small.gif") no-repeat right;padding-right:20px}.relationalTable td{vertical-align:top}.relationalTable select{width:125px;margin-left:5px}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:right}.ui-timepicker-div dl dt{height:25px;margin-bottom:-25px}.ui-timepicker-div dl dd{margin:0 85px 10px 10px}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:none;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:ltr}.ui-timepicker-rtl dl{text-align:left}.ui-timepicker-rtl dl dd{margin:0 10px 10px 65px}body .ui-widget{font-size:1em}body #ui-datepicker-div{z-index:9999 !important}.ui-dialog .pma-fieldset legend a{color:#235a81}.ui-draggable{z-index:801}.jqplot-yaxis{right:0 !important;min-width:25px;width:auto}.jqplot-axis{overflow:hidden}div#page_content div#tableslistcontainer{margin-top:1em}div#page_content div#tableslistcontainer table.data{border-top:.1px solid #eee}div#page_content div.result_query{margin-top:1em}table.show_create{margin-top:1em}table.show_create td{border-left:1px solid #bbb}#alias_modal table{width:100%}#alias_modal label{font-weight:bold}.ui-dialog{position:fixed}.small_font{font-size:smaller}#pma_console_container{width:100%;position:fixed;bottom:0;right:0;z-index:100}textarea{resize:both}#pma_console{position:relative;margin-right:240px}#pma_console .templates{display:none}#pma_console .mid_text{vertical-align:middle}#pma_console .toolbar{position:relative;background:#ccc;border-top:solid 1px #aaa;cursor:n-resize}#pma_console .toolbar span{vertical-align:middle}#pma_console .toolbar.collapsed{cursor:default}#pma_console .toolbar.collapsed:not(:hover){display:inline-block;border-top-left-radius:3px;border-left:solid 1px #aaa}#pma_console .toolbar.collapsed>.button{display:none}#pma_console .message span.text,#pma_console .message span.action{padding:0 3px;display:inline-block}#pma_console .toolbar .button,#pma_console .toolbar .text{padding:0 3px;display:inline-block}#pma_console .switch_button{padding:0 3px;display:inline-block}#pma_console .message span.action,#pma_console .toolbar .button,#pma_console .switch_button{cursor:pointer}#pma_console .message span.action:hover,#pma_console .toolbar .button:hover,#pma_console .switch_button:hover{background:#ddd}#pma_console .toolbar .button.active{background:#ddd}#pma_console .toolbar .text{font-weight:bold}#pma_console .toolbar .button,#pma_console .toolbar .text{margin-left:.4em}#pma_console .toolbar .button,#pma_console .toolbar .text{float:left}#pma_console .content{overflow-x:hidden;overflow-y:auto;margin-bottom:-65px;border-top:solid 1px #aaa;background:#fff;padding-top:.4em}#pma_console .content.console_dark_theme{background:#000;color:#fff}#pma_console .content.console_dark_theme .CodeMirror-wrap{background:#000;color:#fff}#pma_console .content.console_dark_theme .action_content{color:#000}#pma_console .content.console_dark_theme .message{border-color:#373b41}#pma_console .content.console_dark_theme .CodeMirror-cursor{border-color:#fff}#pma_console .content.console_dark_theme .cm-keyword{color:#de935f}#pma_console .message,#pma_console .query_input{position:relative;font-family:Monaco,Consolas,monospace;cursor:text;margin:0 1.4em .2em 10px}#pma_console .message{border-bottom:solid 1px #ccc;padding-bottom:.2em}#pma_console .message.expanded>.action_content{position:relative}#pma_console .message::before{right:-0.7em;position:absolute;content:">"}#pma_console .query_input::before{right:-0.7em;position:absolute;content:">";top:-2px}#pma_console .query_input textarea{width:100%;height:4em;resize:vertical}#pma_console .message:hover::before{color:#7cf;font-weight:bold}#pma_console .message.expanded::before{content:"]"}#pma_console .message.welcome::before{display:none}#pma_console .message.failed::before,#pma_console .message.failed.expanded::before,#pma_console .message.failed:hover::before{content:"=";color:#944}#pma_console .message.pending::before{opacity:.3}#pma_console .message.collapsed>.query{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#pma_console .message.expanded>.query{display:block;white-space:pre;word-wrap:break-word}#pma_console .message .text.targetdb,#pma_console .message.collapsed .action.collapse,#pma_console .message.expanded .action.expand{display:none}#pma_console .message .action.requery,#pma_console .message .action.profiling,#pma_console .message .action.explain,#pma_console .message .action.bookmark{display:none}#pma_console .message.select .action.profiling,#pma_console .message.select .action.explain{display:inline-block}#pma_console .message.history .text.targetdb,#pma_console .message.successed .text.targetdb{display:inline-block}#pma_console .message.history .action.requery,#pma_console .message.history .action.bookmark{display:inline-block}#pma_console .message.bookmark .action.requery,#pma_console .message.bookmark .action.bookmark{display:inline-block}#pma_console .message.successed .action.requery,#pma_console .message.successed .action.bookmark{display:inline-block}#pma_console .message .action_content{position:absolute;bottom:100%;background:#ccc;border:solid 1px #aaa;border-top-right-radius:3px}#pma_console .message.bookmark .text.targetdb,#pma_console .message .text.query_time{margin:0;display:inline-block}#pma_console .message.failed .text.query_time,#pma_console .message .text.failed{display:none}#pma_console .message.failed .text.failed{display:inline-block}#pma_console .message .text{background:#fff}#pma_console .message.collapsed>.action_content{display:none}#pma_console .message.collapsed:hover>.action_content{display:block}#pma_console .message .bookmark_label{padding:0 4px;top:0;background:#369;color:#fff;border-radius:3px}#pma_console .message .bookmark_label.shared{background:#396}#pma_console .message.expanded .bookmark_label{border-top-right-radius:0;border-top-left-radius:0}#pma_console .query_input{position:relative}#pma_console .mid_layer{height:100%;width:100%;position:absolute;top:0;background:#666;display:none;cursor:pointer;z-index:200}#pma_console .card{position:absolute;width:94%;height:100%;min-height:48px;right:100%;top:0;border-right:solid 1px #999;z-index:300;transition:right .2s}#pma_console .card.show{right:6%;box-shadow:2px 1px 4px -1px #999}#pma_console .button.hide,#pma_console .message span.text.hide{display:none}#pma_bookmarks .content.add_bookmark,#pma_console_options .content{padding:4px 6px}#pma_bookmarks .content.add_bookmark .options{margin-right:1.4em;padding-bottom:.4em;margin-bottom:.4em;border-bottom:solid 1px #ccc}#pma_bookmarks .content.add_bookmark .options button{margin:0 7px;vertical-align:bottom}#pma_bookmarks .content.add_bookmark input[type=text]{margin:0;padding:2px 4px}#debug_console.grouped .ungroup_queries{display:inline-block}#debug_console.ungrouped .group_queries{display:inline-block}#debug_console.ungrouped .ungroup_queries,#debug_console.ungrouped .sort_count{display:none}#debug_console.grouped .group_queries{display:none}#debug_console .count{margin-left:8px}#debug_console .show_trace .trace,#debug_console .show_args .args{display:block}#debug_console .hide_trace .trace,#debug_console .hide_args .args,#debug_console .show_trace .action.dbg_show_trace,#debug_console .hide_trace .action.dbg_hide_trace{display:none}#debug_console .traceStep.hide_args .action.dbg_hide_args,#debug_console .traceStep.show_args .action.dbg_show_args{display:none}#debug_console .traceStep::after{content:"";display:table;clear:both}#debug_console .trace.welcome::after,#debug_console .debug>.welcome::after{content:"";display:table;clear:both}#debug_console .debug_summary{float:right}#debug_console .trace.welcome .time,#debug_console .traceStep .file,#debug_console .script_name{float:left}#debug_console .traceStep .args pre{margin:0}.cm-s-pma .CodeMirror-code{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-code pre{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-measure>pre,.cm-s-pma .CodeMirror-code>pre,.cm-s-pma .CodeMirror-lines{padding:0}.cm-s-pma.CodeMirror{resize:none;height:auto;width:100%;min-height:initial;max-height:initial}.cm-s-pma .CodeMirror-scroll{cursor:text}.pma_drop_handler{display:none;position:fixed;top:0;right:0;width:100%;background:rgba(0,0,0,.6);height:100%;z-index:999;color:#fff;font-size:30pt;text-align:center;padding-top:20%}.pma_sql_import_status{display:none;position:fixed;bottom:0;left:25px;width:400px;border:1px solid #999;background:#f3f3f3;border-radius:4px;box-shadow:-2px 2px 5px #ccc}.pma_sql_import_status h2,.pma_sql_import_status .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:-1px 1px 15px #999 inset}.pma_drop_result h2,.pma_drop_result .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:-1px 1px 15px #999 inset}.pma_sql_import_status div{height:270px;overflow-y:auto;overflow-x:hidden;list-style-type:none}.pma_sql_import_status div li{padding:8px 10px;border-bottom:1px solid #bbb;color:#940e0e;background:#fff}.pma_sql_import_status div li .filesize{float:left}.pma_sql_import_status h2 .minimize,.pma_sql_import_status .h2 .minimize{float:left;margin-left:5px;padding:0 10px}.pma_sql_import_status h2 .close,.pma_sql_import_status .h2 .close{float:left;margin-left:5px;padding:0 10px;display:none}.pma_sql_import_status h2 .minimize:hover,.pma_sql_import_status .h2 .minimize:hover,.pma_sql_import_status h2 .close:hover,.pma_sql_import_status .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_result h2 .close:hover,.pma_drop_result .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_file_status{color:#235a81}.pma_drop_file_status span.underline:hover{cursor:pointer;text-decoration:underline}.pma_drop_result{position:fixed;top:10%;right:20%;width:60%;background:#fff;min-height:300px;z-index:800;box-shadow:0 0 15px #999;border-radius:10px;cursor:move}.pma_drop_result h2 .close,.pma_drop_result .h2 .close{float:left;margin-left:5px;padding:0 10px}.dependencies_box{background-color:#fff;border:3px ridge #000}#composite_index_list{list-style-type:none;list-style-position:inside}span.drag_icon{display:inline-block;background-image:url("../img/s_sortable.png");background-position:center center;background-repeat:no-repeat;width:1em;height:3em;cursor:move}.topmargin{margin-top:1em}meter[value="1"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #e32929 5%, transparent 10%, #e32929)}meter[value="2"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #f60 5%, transparent 10%, #f60)}meter[value="3"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #ffd700 5%, transparent 10%, #ffd700)}body .ui-dialog .ui-dialog-titlebar-close{left:.3em;right:initial}body .ui-dialog .ui-dialog-title{float:right}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}.multi_table_query_form .query-form__tr--hide{display:none}.multi_table_query_form .query-form__fieldset--inline,.multi_table_query_form .query-form__select--inline{display:inline}.multi_table_query_form .query-form__tr--bg-none{background:none}.multi_table_query_form .query-form__input--wide{width:91%}.multi_table_query_form .query-form__multi-sql-query{float:right}#name-panel{overflow:hidden}@media only screen and (max-width: 768px){.responsivetable{overflow-x:auto}body#loginform div.container{width:100%}.largescreenonly{display:none}.width96{width:96% !important}#page_nav_icons{display:none}#table_name_col_no{top:62px}.tdblock tr td{display:block}#table_columns{margin-top:60px}#table_columns .tablesorter{min-width:100%}.doubleFieldset .pma-fieldset{width:98%}div#serverstatusquerieschart{width:100%;height:450px}.ui-dialog{margin:1%;width:95% !important}}#tooltip_editor{font-size:12px;background-color:#fff;opacity:.95;filter:alpha(opacity=95);padding:5px}#tooltip_font{font-weight:bold}#selection_box{z-index:1000;height:205px;position:absolute;background-color:skyblue;opacity:.4;filter:alpha(opacity=40);pointer-events:none}#filterQueryText{vertical-align:baseline}.ui_tpicker_hour_slider,.ui_tpicker_minute_slider,.ui_tpicker_second_slider,.ui_tpicker_millisec_slider,.ui_tpicker_microsec_slider{margin-right:20px;margin-top:4px;height:.75rem}.ui_tpicker_time_input{width:100%}.pre-scrollable{max-height:340px;overflow-y:scroll}@media(min-width: 1200px){div.tools{text-align:right}.pma-fieldset.tblFooters,.tblFooters{text-align:right}}.resize-vertical{resize:vertical}#previewSqlModal{z-index:1056;top:100px}p.enum_notice{margin:5px 2px;font-size:80%}#enum_editor p{margin-top:0;font-style:italic}#enum_editor .values{width:100%}#enum_editor .add{width:100%}#enum_editor .add td{vertical-align:middle;width:50%;padding:0 0 0;padding-right:1em}#enum_editor .values td.drop{width:1.8em;cursor:pointer;vertical-align:middle}#enum_editor .values input{margin:.1em 0;padding-left:2em;width:100%}#enum_editor .values img{vertical-align:middle}#enum_editor input.add_value{margin:0;margin-left:.4em}#enum_editor_output textarea{width:100%;float:left;margin:1em 0 0 0}.enum_hint{position:relative}.enum_hint a{position:absolute;right:81%;bottom:.35em}a.close_gis_editor{float:left}#gis_editor{display:none;position:fixed;z-index:1001;overflow-y:auto;overflow-x:hidden}#gis_data{min-height:230px}#gis_data_textarea{height:6em}#gis_data_editor{background:#d0dce0;padding:15px;min-height:500px}#gis_data_editor .choice{display:none}#gis_data_editor input[type=text]{width:75px}#pma_navigation{width:240px;position:fixed;top:0;right:0;height:100vh;background:linear-gradient(to left, #f3f3f3, #dadcde);color:#000;z-index:800}#pma_navigation ul{margin:0}#pma_navigation form{margin:0;padding:0;display:inline}#pma_navigation select#select_server,#pma_navigation select#lightm_db{width:100%}#pma_navigation div.pageselector{text-align:center;margin:0;margin-right:.75em;border-right:1px solid #666}#pma_navigation #pmalogo,#pma_navigation #serverChoice,#pma_navigation #navipanellinks,#pma_navigation #recentTableList,#pma_navigation #favoriteTableList,#pma_navigation #databaseList,#pma_navigation div.pageselector.dbselector{text-align:center;padding:5px 10px 0;border:0}#pma_navigation #navipanellinks .icon{margin:0}#pma_navigation #recentTable,#pma_navigation #favoriteTable{width:200px}#pma_navigation #favoriteTableList select,#pma_navigation #serverChoice select{width:80%}#pma_navigation_header{overflow:hidden}#pma_navigation_content{width:100%;height:100%;position:absolute;top:0;right:0;z-index:0}#pma_navigation_content>img.throbber{display:none;margin:.3em auto 0}#pma_navigation_select_database{text-align:right;padding:0 0 0;border:0;margin:0}#pma_navigation_db_select{margin-top:.5em;margin-right:.75em}#pma_navigation_db_select select{background:linear-gradient(#fff, #f1f1f1, #fff);border-radius:2px;border:1px solid #bbb;border-top:1px solid #bbb;color:#333;padding:4px 6px;margin:0 0 0;width:92%;font-size:1.11em}#pma_navigation_tree_content{width:100%;overflow:hidden;overflow-y:auto;position:absolute;height:100%}#pma_navigation_tree_content a.hover_show_full{position:relative;z-index:100;vertical-align:sub}#pma_navigation_tree{margin:0;margin-right:5px;overflow:hidden;color:#444;height:74%;position:relative}#pma_navigation_tree a{color:#000;padding-right:0}#pma_navigation_tree a:hover{text-decoration:underline}#pma_navigation_tree ul{clear:both;padding:0;list-style-type:none;margin:0}#pma_navigation_tree ul ul{position:relative}#pma_navigation_tree li{margin-bottom:0}#pma_navigation_tree li.activePointer,#pma_navigation_tree li.selected{color:#000;background-color:#ddd}#pma_navigation_tree li .dbItemControls{padding-left:4px;float:left}#pma_navigation_tree li .navItemControls{display:none;padding-left:4px;float:left}#pma_navigation_tree li.activePointer .navItemControls{display:block;opacity:.5}#pma_navigation_tree li.activePointer .navItemControls:hover{opacity:1}#pma_navigation_tree li{white-space:nowrap;clear:both;min-height:16px}#pma_navigation_tree li.fast_filter{white-space:nowrap;clear:both;min-height:16px}#pma_navigation_tree img{margin:0}#pma_navigation_tree i{display:block}#pma_navigation_tree div.block{position:relative;width:1.5em;height:1.5em;min-width:16px;min-height:16px;float:right}#pma_navigation_tree div.block.double{width:2.5em}#pma_navigation_tree div.block i,#pma_navigation_tree div.block b{width:1.5em;height:1.7em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;right:.75em;z-index:0}#pma_navigation_tree div.block i{display:block;border-right:1px solid #666;border-bottom:1px solid #666;position:relative;z-index:0}#pma_navigation_tree div.block i.first{border-right:0}#pma_navigation_tree div.block b{display:block;height:.75em;bottom:0;right:.75em;border-right:1px solid #666}#pma_navigation_tree div.block a,#pma_navigation_tree div.block u{position:absolute;right:50%;top:50%;z-index:10}#pma_navigation_tree div.block a+a{right:100%}#pma_navigation_tree div.block.double a,#pma_navigation_tree div.block.double u{right:33%}#pma_navigation_tree div.block.double a+a{right:85%}#pma_navigation_tree div.block img{position:relative;top:-0.6em;right:0;margin-right:-7px}#pma_navigation_tree div.throbber img{top:2px;right:2px}#pma_navigation_tree li.last>ul{background:none}#pma_navigation_tree li>a,#pma_navigation_tree li>i{line-height:1.5em;height:1.5em;padding-right:.3em}#pma_navigation_tree .list_container{border-right:1px solid #666;margin-right:.75em;padding-right:.75em}#pma_navigation_tree .list_container li.last.database{margin-bottom:0 !important}#pma_navigation_tree .last>.list_container{border-right:0 solid #666}li.fast_filter{padding-right:.75em;margin-right:.75em;padding-left:35px;border-right:1px solid #666;list-style:none}li.fast_filter input{font-size:.7em}li.fast_filter .searchClauseClear{border:0;font-weight:bold;color:#800;font-size:.7em}li.fast_filter .searchClauseClear:hover{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}li.fast_filter.db_fast_filter{border:0;margin-right:0}#navigation_controls_outer{min-height:21px !important}#navigation_controls_outer.activePointer{background-color:rgba(0,0,0,0) !important}#navigation_controls{float:left;padding-left:23px}#pma_navigation_resizer{width:3px;height:100%;background-color:#aaa;cursor:col-resize;position:fixed;top:0;right:240px;z-index:801}#pma_navigation_collapser{width:20px;height:22px;line-height:22px;background:#eee;color:#555;font-weight:bold;position:fixed;top:0;right:240px;text-align:center;cursor:pointer;z-index:800;text-shadow:0 1px 0 #fff;filter:dropshadow(color=#fff, offx=0, offy=1);border:1px solid #888}.pma_quick_warp{margin-top:5px;margin-right:2px;position:relative}.pma_quick_warp .drop_list{float:right;margin-right:3px;padding:2px 0}.pma_quick_warp .drop_list:hover .drop_button{background:#fff}.pma_quick_warp .drop_list:hover ul{display:block}.pma_quick_warp .drop_list ul{position:absolute;margin:0;padding:0;overflow:hidden;overflow-y:auto;list-style:none;background:#fff;border:1px solid #ddd;border-radius:.3em;border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 0 5px #ccc;top:100%;right:3px;left:0;display:none;z-index:802}.pma_quick_warp .drop_list li{white-space:nowrap;padding:0;border-radius:0}.pma_quick_warp .drop_list li img{vertical-align:sub}.pma_quick_warp .drop_list li:hover{background:#f2f2f2}.pma_quick_warp .drop_list a{display:block;padding:.2em .3em}.pma_quick_warp .drop_list a.favorite_table_anchor{clear:right;float:right;padding:.1em .3em 0}.pma_quick_warp .drop_button{padding:.3em;border:1px solid #ddd;border-radius:.3em;background:#f2f2f2;cursor:pointer}.input_tab{background-color:#a6c7e1;color:#000}.content_fullscreen{position:relative;overflow:auto}#canvas_outer{position:relative;width:100%;display:block}#canvas{background-color:#fff;color:#000}canvas.designer{display:inline-block;overflow:hidden;text-align:right}canvas.designer *{behavior:url(#default#VML)}.designer_tab{background-color:#fff;color:#000;border-collapse:collapse;border:1px solid #aaa;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.designer_tab .header{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.tab_zag{text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_zag_2{background:linear-gradient(#fffa96 0%, #fffa96 39%, #ffe796 40%, #ffe796 100%);background-repeat:repeat-x;text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_field{background:#fff;color:#000;cursor:default}.tab_field:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}.tab_field_3{background-color:#ffe6e6 !important;color:#000;cursor:default}.tab_field_3:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}#designer_hint{white-space:nowrap;position:absolute;background-color:#9f9;color:#000;z-index:3;border:#0c6 solid 1px;display:none}#designer_body #page_content{margin:0}.scroll_tab{overflow:auto;width:100%;height:500px}.designer_Tabs{cursor:default;color:#05b;white-space:nowrap;text-decoration:none;text-indent:3px;font-weight:bold;margin-right:2px;text-align:right;background:linear-gradient(#fff, #dfe5e7 70%, #fff 70%, #fff 100%);border:#ccc solid 1px}.designer_Tabs:hover{cursor:default;color:#05b;background:#fe9;text-indent:3px;font-weight:bold;white-space:nowrap;text-decoration:none;border:#99f solid 1px;text-align:right}.owner{font-weight:normal;color:#888}.option_tab{padding-right:2px;padding-left:2px;width:5px}.select_all{vertical-align:top;padding-right:2px;padding-left:2px;cursor:default;width:1px;color:#000;background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.small_tab{vertical-align:top;background-color:#0064ea;color:#fff;background-image:url("../img/designer/small_tab.png");cursor:default;text-align:center;font-weight:bold;padding-right:2px;padding-left:2px;width:1px;text-decoration:none}.small_tab:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;padding-right:2px;padding-left:2px;text-align:center;font-weight:bold;width:1px;text-decoration:none}.small_tab_pref{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%);text-align:center;width:1px}.small_tab_pref:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;text-align:center;font-weight:bold;width:1px;text-decoration:none}.butt{border:#47a solid 1px;font-weight:bold;background-color:#fff;color:#000;vertical-align:baseline}.L_butt2_1{padding:1px;text-decoration:none;vertical-align:middle;cursor:default}.L_butt2_1:hover{padding:0;border:#09c solid 1px;background:#fe9;color:#000;text-decoration:none;vertical-align:middle;cursor:default}.bor{width:10px;height:10px}.frams1{background:url("../img/designer/1.png") no-repeat left bottom}.frams2{background:url("../img/designer/2.png") no-repeat right bottom}.frams3{background:url("../img/designer/3.png") no-repeat right top}.frams4{background:url("../img/designer/4.png") no-repeat left top}.frams5{background:url("../img/designer/5.png") repeat-x center bottom}.frams6{background:url("../img/designer/6.png") repeat-y right}.frams7{background:url("../img/designer/7.png") repeat-x top}.frams8{background:url("../img/designer/8.png") repeat-y left}#osn_tab{position:absolute;background-color:#fff;color:#000}.designer_header{background-color:#eaeef0;color:#000;text-align:center;font-weight:bold;margin:0;padding:0;background-image:url("../img/designer/top_panel.png");background-position:top;background-repeat:repeat-x;border-left:#999 solid 1px;border-right:#999 solid 1px;height:28px;z-index:101;width:100%;position:fixed}.designer_header a,.designer_header span{display:block;float:right;margin:3px 1px 4px;height:20px;border:1px dotted #fff}.designer_header .M_bord{display:block;float:right;margin:4px;height:20px;width:2px}.designer_header a.first{margin-left:1em}.designer_header a.last{margin-right:1em}a.M_butt_Selected_down_IE,a.M_butt_Selected_down{border:1px solid #c0c0bb;background-color:#9f9;color:#000}a.M_butt_Selected_down_IE:hover,a.M_butt_Selected_down:hover{border:1px solid #09c;background-color:#fe9;color:#000}a.M_butt:hover{border:1px solid #09c;background-color:#fe9;color:#000}#layer_menu{z-index:98;position:relative;float:left;background-color:#eaeef0;border:#999 solid 1px}#layer_upd_relation{position:absolute;right:637px;top:224px;z-index:100}#layer_new_relation,#designer_optionse{position:absolute;right:636px;top:85px;z-index:100;width:153px}#layer_menu_sizer{background-image:url("../img/designer/resize.png");cursor:ew-resize}#layer_menu_sizer .icon{margin:0}.panel{position:fixed;top:60px;left:0;width:350px;max-height:500px;display:none;overflow:auto;padding-top:34px;z-index:102}a.trigger{position:fixed;text-decoration:none;top:60px;left:0;color:#fff;padding:10px 15px 10px 40px;background:#333 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #444;display:block;z-index:102}a.trigger:hover{color:#080808;background:#fff696 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #999}a.active.trigger{background:#222 url("../img/designer/minus.png") 15% 55% no-repeat;z-index:999}a.active.trigger:hover{background:#fff696 url("../img/designer/minus.png") 15% 55% no-repeat}.toggle_container .block{background-color:#dbe4e8;border-top:1px solid #999}.history_table{text-align:center;cursor:pointer;background-color:#dbe4e8}.history_table:hover{background-color:#99c}#ab{min-width:300px}#ab .ui-accordion-content{padding:0}#foreignkeychk{text-align:right;cursor:pointer}.side-menu{float:right;position:fixed;width:auto;height:auto;background:#efefef;border:1px solid gray;overflow:hidden;z-index:50;padding:2px}.side-menu.right{float:left;left:0}.side-menu .hide{display:none}.side-menu a{display:block;float:none;overflow:hidden;line-height:1em}.side-menu img,.side-menu .text{float:right}#name-panel{border-bottom:1px solid gray;text-align:center;background:#efefef;width:100%;font-size:1.2em;padding:5px;font-weight:bold}#container-form{width:100%;position:absolute;right:0}.CodeMirror{height:20rem;direction:rtl}#inline_editor_outer .CodeMirror{height:6em}.insertRowTable .CodeMirror{min-height:9em;min-width:24em;border:1px solid #a9a9a9}#pma_console .CodeMirror-gutters{background-color:initial;border:none}span.cm-keyword,span.cm-statement-verb{color:#909}span.cm-variable{color:#000}span.cm-comment{color:olive}span.cm-mysql-string{color:green}span.cm-operator{color:#f0f}span.cm-mysql-word{color:#000}span.cm-builtin{color:red}span.cm-variable-2{color:#f90}span.cm-variable-3{color:blue}span.cm-separator{color:#f0f}span.cm-number{color:teal}.autocomplete-column-name{display:inline-block}.autocomplete-column-hint{display:inline-block;float:left;color:#666;margin-right:1em}.CodeMirror-hints{z-index:1999}.CodeMirror-lint-tooltip{z-index:200;font-family:inherit}.CodeMirror-lint-tooltip code{font-family:monospace;font-weight:bold}.jqplot-target{position:relative;color:#222;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-left:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-right:10px;margin-left:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;right:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;right:15px;vertical-align:bottom}.jqplot-yaxis-tick{left:0;top:15px;text-align:left}.jqplot-yaxis-tick.jqplot-breakTick{left:-20px;margin-left:0;padding:1px 5px 1px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{right:0;top:15px;text-align:right}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-left:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-right:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-right:12px;margin-left:12px;background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}table.jqplot-cursor-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-right-width:6px;border-left-width:6px;border-top-style:solid;border-bottom-style:solid;border-right-style:solid;border-left-style:solid}.jqplot-title{top:0;right:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:1em;white-space:nowrap;background:rgba(208,208,208,.8);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-right:2px;padding-left:2px;color:#333}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(230,230,230,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(245,245,245,.3)}.icon{margin:0;margin-right:.3em;padding:0 !important;width:16px;height:16px}.icon_fulltext{width:50px;height:19px}.ic_asc_order{background-image:url("../img/asc_order.png")}.ic_b_bookmark{background-image:url("../img/b_bookmark.png")}.ic_b_browse{background-image:url("../img/b_browse.png")}.ic_b_calendar{background-image:url("../img/b_calendar.png")}.ic_b_chart{background-image:url("../img/b_chart.png")}.ic_b_close{background-image:url("../img/b_close.png")}.ic_b_column_add{background-image:url("../img/b_column_add.png")}.ic_b_comment{background-image:url("../img/b_comment.png")}.ic_b_dbstatistics{background-image:url("../img/b_dbstatistics.png")}.ic_b_deltbl{background-image:url("../img/b_deltbl.png")}.ic_b_docs{background-image:url("../img/b_docs.png")}.ic_b_docsql{background-image:url("../img/b_docsql.png")}.ic_b_drop{background-image:url("../img/b_drop.png")}.ic_b_edit{background-image:url("../img/b_edit.png")}.ic_b_empty{background-image:url("../img/b_empty.png")}.ic_b_engine{background-image:url("../img/b_engine.png")}.ic_b_event_add{background-image:url("../img/b_event_add.png")}.ic_b_events{background-image:url("../img/b_events.png")}.ic_b_export{background-image:url("../img/b_export.png")}.ic_b_favorite{background-image:url("../img/b_favorite.png")}.ic_b_find_replace{background-image:url("../img/b_find_replace.png")}.ic_b_firstpage{background-image:url("../img/b_firstpage.png")}.ic_b_ftext{background-image:url("../img/b_ftext.png")}.ic_b_globe{background-image:url("../img/b_globe.gif")}.ic_b_group{background-image:url("../img/b_group.png")}.ic_b_help{background-image:url("../img/b_help.png")}.ic_b_home{background-image:url("../img/b_home.png")}.ic_b_import{background-image:url("../img/b_import.png")}.ic_b_index{background-image:url("../img/b_index.png")}.ic_b_index_add{background-image:url("../img/b_index_add.png")}.ic_b_inline_edit{background-image:url("../img/b_inline_edit.png")}.ic_b_insrow{background-image:url("../img/b_insrow.png")}.ic_b_lastpage{background-image:url("../img/b_lastpage.png")}.ic_b_minus{background-image:url("../img/b_minus.png")}.ic_b_more{background-image:url("../img/b_more.png")}.ic_b_move{background-image:url("../img/b_move.png")}.ic_b_newdb{background-image:url("../img/b_newdb.png")}.ic_db_drop{background-image:url("../img/b_deltbl.png")}.ic_b_newtbl{background-image:url("../img/b_newtbl.png")}.ic_b_nextpage{background-image:url("../img/b_nextpage.png")}.ic_b_no_favorite{background-image:url("../img/b_no_favorite.png")}.ic_b_pdfdoc{background-image:url("../img/b_pdfdoc.png")}.ic_b_plugin{background-image:url("../img/b_plugin.png")}.ic_b_plus{background-image:url("../img/b_plus.png")}.ic_b_prevpage{background-image:url("../img/b_prevpage.png")}.ic_b_primary{background-image:url("../img/b_primary.png")}.ic_b_print{background-image:url("../img/b_print.png")}.ic_b_props{background-image:url("../img/b_props.png")}.ic_b_relations{background-image:url("../img/b_relations.png")}.ic_b_report{background-image:url("../img/b_report.png")}.ic_b_rename{background-image:url("../img/b_rename.svg")}.ic_b_routine_add{background-image:url("../img/b_routine_add.png")}.ic_b_routines{background-image:url("../img/b_routines.png")}.ic_b_save{background-image:url("../img/b_save.png")}.ic_b_saveimage{background-image:url("../img/b_saveimage.png")}.ic_b_sbrowse{background-image:url("../img/b_sbrowse.png")}.ic_b_sdb{background-image:url("../img/b_sdb.png");width:10px;height:10px}.ic_b_search{background-image:url("../img/b_search.png")}.ic_b_select{background-image:url("../img/b_select.png")}.ic_b_snewtbl{background-image:url("../img/b_snewtbl.png")}.ic_b_spatial{background-image:url("../img/b_spatial.png")}.ic_b_sql{background-image:url("../img/b_sql.png")}.ic_b_sqldoc{background-image:url("../img/b_sqldoc.png")}.ic_b_sqlhelp{background-image:url("../img/b_sqlhelp.png")}.ic_b_table_add{background-image:url("../img/b_table_add.png")}.ic_b_tblanalyse{background-image:url("../img/b_tblanalyse.png")}.ic_b_tblexport{background-image:url("../img/b_tblexport.png")}.ic_b_tblimport{background-image:url("../img/b_tblimport.png")}.ic_b_tblops{background-image:url("../img/b_tblops.png")}.ic_b_tbloptimize{background-image:url("../img/b_tbloptimize.png")}.ic_b_tipp{background-image:url("../img/b_tipp.png")}.ic_b_trigger_add{background-image:url("../img/b_trigger_add.png")}.ic_b_triggers{background-image:url("../img/b_triggers.png")}.ic_b_undo{background-image:url("../img/b_undo.png")}.ic_b_unique{background-image:url("../img/b_unique.png")}.ic_b_usradd{background-image:url("../img/b_usradd.png")}.ic_b_usrcheck{background-image:url("../img/b_usrcheck.png")}.ic_b_usrdrop{background-image:url("../img/b_usrdrop.png")}.ic_b_usredit{background-image:url("../img/b_usredit.png")}.ic_b_usrlist{background-image:url("../img/b_usrlist.png")}.ic_b_versions{background-image:url("../img/b_versions.png")}.ic_b_view{background-image:url("../img/b_view.png")}.ic_b_view_add{background-image:url("../img/b_view_add.png")}.ic_b_views{background-image:url("../img/b_views.png")}.ic_b_left{background-image:url("../img/b_left.png")}.ic_b_right{background-image:url("../img/b_right.png")}.ic_bd_browse{background-image:url("../img/bd_browse.png")}.ic_bd_deltbl{background-image:url("../img/bd_deltbl.png")}.ic_bd_drop{background-image:url("../img/bd_drop.png")}.ic_bd_edit{background-image:url("../img/bd_edit.png")}.ic_bd_empty{background-image:url("../img/bd_empty.png")}.ic_bd_export{background-image:url("../img/bd_export.png")}.ic_bd_firstpage{background-image:url("../img/bd_firstpage.png")}.ic_bd_ftext{background-image:url("../img/bd_ftext.png")}.ic_bd_index{background-image:url("../img/bd_index.png")}.ic_bd_insrow{background-image:url("../img/bd_insrow.png")}.ic_bd_lastpage{background-image:url("../img/bd_lastpage.png")}.ic_bd_nextpage{background-image:url("../img/bd_nextpage.png")}.ic_bd_prevpage{background-image:url("../img/bd_prevpage.png")}.ic_bd_primary{background-image:url("../img/bd_primary.png")}.ic_bd_routine_add{background-image:url("../img/bd_routine_add.png")}.ic_bd_sbrowse{background-image:url("../img/bd_sbrowse.png")}.ic_bd_select{background-image:url("../img/bd_select.png")}.ic_bd_spatial{background-image:url("../img/bd_spatial.png")}.ic_bd_unique{background-image:url("../img/bd_unique.png")}.ic_centralColumns{background-image:url("../img/centralColumns.png")}.ic_centralColumns_add{background-image:url("../img/centralColumns_add.png")}.ic_centralColumns_delete{background-image:url("../img/centralColumns_delete.png")}.ic_col_drop{background-image:url("../img/col_drop.png")}.ic_console{background-image:url("../img/console.png")}.ic_database{background-image:url("../img/database.png")}.ic_eye{background-image:url("../img/eye.png")}.ic_eye_grey{background-image:url("../img/eye_grey.png")}.ic_hide{background-image:url("../img/hide.png")}.ic_item{background-image:url("../img/item.png");width:9px;height:9px}.ic_lightbulb{background-image:url("../img/lightbulb.png")}.ic_lightbulb_off{background-image:url("../img/lightbulb_off.png")}.ic_more{background-image:url("../img/more.png");width:13px}.ic_new_data{background-image:url("../img/new_data.png")}.ic_new_data_hovered{background-image:url("../img/new_data_hovered.png")}.ic_new_data_selected{background-image:url("../img/new_data_selected.png")}.ic_new_data_selected_hovered{background-image:url("../img/new_data_selected_hovered.png")}.ic_new_struct{background-image:url("../img/new_struct.png")}.ic_new_struct_hovered{background-image:url("../img/new_struct_hovered.png")}.ic_new_struct_selected{background-image:url("../img/new_struct_selected.png")}.ic_new_struct_selected_hovered{background-image:url("../img/new_struct_selected_hovered.png")}.ic_normalize{background-image:url("../img/normalize.png")}.ic_pause{background-image:url("../img/pause.png")}.ic_php_sym{background-image:url("../img/php_sym.png")}.ic_play{background-image:url("../img/play.png")}.ic_s_asc{background-image:url("../img/s_asc.png")}.ic_s_asci{background-image:url("../img/s_asci.png")}.ic_s_attention{background-image:url("../img/s_attention.png")}.ic_s_cancel{background-image:url("../img/s_cancel.png")}.ic_s_cancel2{background-image:url("../img/s_cancel2.png")}.ic_s_cog{background-image:url("../img/s_cog.png")}.ic_s_db{background-image:url("../img/s_db.png")}.ic_s_desc{background-image:url("../img/s_desc.png")}.ic_s_error{background-image:url("../img/s_error.png")}.ic_s_host{background-image:url("../img/s_host.png")}.ic_s_info{background-image:url("../img/s_info.png")}.ic_s_lang{background-image:url("../img/s_lang.png")}.ic_s_link{background-image:url("../img/s_link.png")}.ic_s_lock{background-image:url("../img/s_lock.png")}.ic_s_unlock{background-image:url("../img/lock_open.png")}.ic_s_loggoff{background-image:url("../img/s_loggoff.png")}.ic_s_notice{background-image:url("../img/s_notice.png")}.ic_s_okay{background-image:url("../img/s_okay.png")}.ic_s_passwd{background-image:url("../img/s_passwd.png")}.ic_s_process{background-image:url("../img/s_process.png")}.ic_s_really{background-image:url("../img/s_really.png");width:11px;height:11px}.ic_s_reload{background-image:url("../img/s_reload.png")}.ic_s_replication{background-image:url("../img/s_replication.png")}.ic_s_rights{background-image:url("../img/s_rights.png")}.ic_s_sortable{background-image:url("../img/s_sortable.png")}.ic_s_status{background-image:url("../img/s_status.png")}.ic_s_success{background-image:url("../img/s_success.png")}.ic_s_sync{background-image:url("../img/s_sync.png")}.ic_s_tbl{background-image:url("../img/s_tbl.png")}.ic_s_theme{background-image:url("../img/s_theme.png")}.ic_s_top{background-image:url("../img/s_top.png")}.ic_s_unlink{background-image:url("../img/s_unlink.png")}.ic_s_vars{background-image:url("../img/s_vars.png")}.ic_s_views{background-image:url("../img/s_views.png")}.ic_show{background-image:url("../img/show.png")}.ic_window-new{background-image:url("../img/window-new.png")}.ic_ajax_clock_small{background-image:url("../img/ajax_clock_small.gif")}.ic_s_partialtext{background-image:url("../img/s_partialtext.png")}.ic_s_fulltext{background-image:url("../img/s_fulltext.png")}body{text-align:right}h1,.h1{font-weight:bold}h2,.h2{font-weight:normal;text-shadow:0 1px 0 #fff;padding:10px 3px 10px 0;color:#777}h3,.h3{font-weight:bold}input,select{font-size:1em}textarea{font-family:monospace;font-size:1.2em}.table th,.table td{text-shadow:0 1px 0 #fff;vertical-align:middle}.table th{text-align:right}.table td{touch-action:manipulation}.table thead th{border-left:1px solid #fff;background-image:linear-gradient(#fff, #ccc)}.table-hover tbody tr:hover{background:linear-gradient(#ced6df, #b6c6d7)}@media only screen and (min-width: 768px){.table th.position-sticky{top:60px}}select#fieldsSelect,textarea#sqlquery{margin:0;height:20rem}.btn-primary,.btn-outline-primary{font-weight:700}.btn-primary,.btn-secondary{border-color:#aaa;text-shadow:0 1px 0 #fff;background-image:linear-gradient(#f8f8f8, #d8d8d8)}.btn-primary:hover,.btn-secondary:hover{background-image:linear-gradient(#fff, #ddd)}.btn-outline-primary,.btn-outline-secondary{color:#444;border-color:#aaa}.nav-pills .nav-link{margin-right:0;margin-left:6px;padding:4px 10px;font-weight:bold;background:#f2f2f2;color:#235a81;border:1px solid #ddd;border-radius:20px}.nav-pills .nav-link:hover{background-color:#e5e5e5;border-radius:.3em}.nav-pills .nav-link img{margin-left:.5em;vertical-align:-3px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:#fff;color:#235a81;border-radius:.3em}.nav-tabs{font-weight:bold}.nav-tabs .nav-link{background-color:#f2f2f2;color:#555;border-color:#d5d5d5 #d5d5d5 #aaa;margin-left:.4em;padding:7px 10px}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{background-color:#e5e5e5}.nav-tabs .nav-link.active:hover,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-item.show .nav-link:hover,.nav-tabs .nav-item.show .nav-link:focus{background-color:#fff}.navbar.bg-light{background:linear-gradient(#fff, #dcdcdc)}.navbar-nav{font-weight:bold}.navbar-nav .icon{margin-left:.5em;vertical-align:-3px}.navbar-nav .nav-item{background:linear-gradient(#fff, #dcdcdc);border-left:1px solid #fff;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.navbar-nav .nav-item:first-child{border-right:0}.navbar-nav .nav-item:hover{background:linear-gradient(#fff, #e5e5e5)}.navbar-nav .nav-item.active{background:#fff;border-bottom:0}.card{margin-top:2rem;margin-bottom:.5rem}.card>.card-header+.card-body{padding-top:0}.card,.card-footer{text-shadow:-1px 1px 2px #fff;box-shadow:-1px 1px 2px #fff inset}.card-header{position:relative;top:-1rem;margin:0 5px;width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;font-weight:bold;padding:5px 10px;border:1px solid #aaa;font-size:1em;box-shadow:-3px 3px 15px #bbb}.card-header,.card-header:first-child{border-radius:2px}.card-footer{color:#000;background:#d3dce3;padding:.5em}#maincontainer .card-header{position:static;width:auto;margin:0;border:none}#maincontainer .card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}#maincontainer .card{background-color:#f3f3f3;border:1px solid #999;box-shadow:-2px 2px 5px #ccc}#maincontainer .card>.card-header+.card-body{padding-top:1rem}#maincontainer .card-header{padding:.1em 1rem;background-color:#bbb;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:-1px 1px 15px #999 inset}.breadcrumb-navbar{padding:.1rem 2.2em;margin-bottom:0;background-color:#888}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-right:.5rem}.breadcrumb-navbar .breadcrumb-item .icon{margin:0}.breadcrumb-navbar{text-shadow:0 1px 0 #000}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-right:.5rem}.breadcrumb-navbar .breadcrumb-item a{color:#fff}.breadcrumb-navbar .breadcrumb-comment{color:#d6d6d6;font-weight:bold;font-style:italic;text-shadow:none}.page-link{background-image:linear-gradient(#fff, #e0e0e0)}.page-link:hover{text-decoration:underline}.page-item.active .page-link{background-image:linear-gradient(#bbb, #fff)}.page-item.disabled .page-link{background-image:none}.alert{text-align:right;box-shadow:0 1px 1px #fff inset;background-position:99% 50% ;padding:10px 10px 10px 10px}.alert a{text-decoration:underline}.alert h1,.alert .h1{border-bottom:2px solid}.alert-primary{color:#000;background-color:#e8eef1;background-image:none;border-color:#3a6c7e}.alert-primary h1,.alert-primary .h1{border-color:#ffb10a}.alert-success{color:#000;background-color:#ebf8a4;background-image:none;border-color:#a2d246}.alert-success h1,.alert-success .h1{border-color:lime}.alert-danger{color:#000;background-color:pink;background-image:none;border-color:#333}.alert-danger h1,.alert-danger .h1{border-color:red}.result_query .alert{margin-bottom:0;border-bottom:none !important;border-bottom-right-radius:0;border-bottom-left-radius:0;padding-bottom:5px}#maincontainer .list-group{padding-right:40px;margin:1rem 0}#maincontainer .list-group-item{padding:0;display:list-item;border:none}#li_select_server.list-group-item,#li_change_password.list-group-item,#li_select_mysql_collation.list-group-item,#li_user_preferences.list-group-item,#li_select_lang.list-group-item,#li_select_theme.list-group-item{display:block;margin-right:-20px}.modal-header{background-image:linear-gradient(#f8f8f8, #d8d8d8)}@media print{.hide{display:none}body,table,th,td{color:#000;background-color:#fff;font-size:12px}a:link{color:#000;text-decoration:none}img{border:0}table,th,td{border:.1em solid #000;background-color:#fff}table{border-collapse:collapse;border-spacing:.2em}thead{border-collapse:collapse;border-spacing:.2em;border:.1em solid #000;font-weight:900}th,td{padding:.2em}thead th{font-weight:bold;background-color:#e5e5e5;border:.1em solid #000}#page_content{position:absolute;right:0;top:0;width:95%;float:none}.sqlOuter{color:#000;background-color:#000}.cDrop,.cEdit,.cList,.cCpy,.cPointer{display:none}table tbody:first-of-type tr:nth-child(odd){background:#fff}table tbody:first-of-type tr:nth-child(odd) th{background:#fff}table tbody:first-of-type tr:nth-child(even){background:#dfdfdf}table tbody:first-of-type tr:nth-child(even) th{background:#dfdfdf}.column_attribute{font-size:100%}} +/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZW1lLmNzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcm9vdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yZWJvb3Quc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy92ZW5kb3IvX3Jmcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uL3Njc3MvX3ZhcmlhYmxlcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYm9yZGVyLXJhZGl1cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190eXBlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19saXN0cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jb250YWluZXJzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19jb250YWluZXIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdGFibGVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190YWJsZS12YXJpYW50cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19sYWJlbHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS10ZXh0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY29udHJvbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYm94LXNoYWRvdy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fZ3JhZGllbnRzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tc2VsZWN0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY2hlY2suc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1yYW5nZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mbG9hdGluZy1sYWJlbHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9faW5wdXQtZ3JvdXAuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2Zvcm1zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2J1dHRvbnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2J1dHRvbnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdHJhbnNpdGlvbnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fZHJvcGRvd24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYnV0dG9uLWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX25hdi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXZiYXIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fY2FyZC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hY2NvcmRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JhZGdlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2FsZXJ0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19hbGVydC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Nsb3NlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX21vZGFsLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19iYWNrZHJvcC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19zcGlubmVycy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY2xlYXJmaXguc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19jb2xvcmVkLWxpbmtzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fcmF0aW8uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19wb3NpdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3N0YWNrcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdmlzdWFsbHktaGlkZGVuLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fc3RyZXRjaGVkLWxpbmsuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL190ZXh0LXRydW5jYXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RleHQtdHJ1bmNhdGUuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL192ci5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdXRpbGl0aWVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19hcGkuc2NzcyIsIi4uL3Njc3MvX2NvbW1vbi5zY3NzIiwiLi4vc2Nzcy9fZW51bS1lZGl0b3Iuc2NzcyIsIi4uL3Njc3MvX2dpcy5zY3NzIiwiLi4vc2Nzcy9fbmF2aWdhdGlvbi5zY3NzIiwiLi4vc2Nzcy9fZGVzaWduZXIuc2NzcyIsIi4uL3Njc3MvX2NvZGVtaXJyb3Iuc2NzcyIsIi4uL3Njc3MvX2pxcGxvdC5zY3NzIiwiLi4vc2Nzcy9faWNvbnMuc2NzcyIsIi4uL3Njc3MvX3JlYm9vdC5zY3NzIiwiLi4vc2Nzcy9fdGFibGVzLnNjc3MiLCIuLi9zY3NzL19mb3Jtcy5zY3NzIiwiLi4vc2Nzcy9fYnV0dG9ucy5zY3NzIiwiLi4vc2Nzcy9fbmF2LnNjc3MiLCIuLi9zY3NzL19uYXZiYXIuc2NzcyIsIi4uL3Njc3MvX2NhcmQuc2NzcyIsIi4uLy4uL2Jvb3RzdHJhcC9zY3NzL19icmVhZGNydW1iLnNjc3MiLCIuLi9zY3NzL19icmVhZGNydW1iLnNjc3MiLCIuLi9zY3NzL19wYWdpbmF0aW9uLnNjc3MiLCIuLi9zY3NzL19hbGVydC5zY3NzIiwiLi4vc2Nzcy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vc2Nzcy9fbW9kYWwuc2NzcyIsIi4uL3Njc3MvX3ByaW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUNBQSxrQkFRSSxDQUFBLG9CQUFBLENBQUEsb0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGlCQUFBLENBQUEsb0JBQUEsQ0FBQSxvQkFBQSxDQUFBLG1CQUFBLENBQUEsa0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGdCQUFBLENBQUEsa0JBQUEsQ0FBQSx1QkFBQSxDQUFBLHNCQUlBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLGtCQUlBLENBQUEsb0JBQUEsQ0FBQSxxQkFBQSxDQUFBLGtCQUFBLENBQUEscUJBQUEsQ0FBQSxvQkFBQSxDQUFBLG1CQUFBLENBQUEsa0JBQUEsQ0FBQSwrQkFJQSxDQUFBLGlDQUFBLENBQUEsNkJBQUEsQ0FBQSwyQkFBQSxDQUFBLDZCQUFBLENBQUEsNEJBQUEsQ0FBQSw2QkFBQSxD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UUFQSixtQkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSixzQkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHNCQU9JLENBQUEsV0FQSixzQkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSx5QkFBQSxDQUFBLFNBUEosNkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFNBUEosNkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFlBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSwwQkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFlBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFlBUEosMEJBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxZQVBKLDJCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsWUFQSiw2QkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFlBUEosNEJBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSixnQ0FPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSixnQ0FPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDBCQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxlQVBKLDJCQU9JLENBQUEsYUFQSiwwQkFPSSxDQUFBLGdCQVBKLDRCQU9JLENBQUEsQ0FBQSx5QmhE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T0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFlBUEosMEJBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxZQVBKLDJCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsWUFQSiw2QkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFlBUEosNEJBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJB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 */ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_ltr.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_ltr.png new file mode 100644 index 0000000000000000000000000000000000000000..cd79ab42f04a594dbf727e34795009f3e99fb62e GIT binary patch literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2%@N{M0&tl#Zv1V@L&KvP94Wd(mDdM=eR# z<`9#vqR0OhJFjv(Fu^eA%7(zh9xctRJxmPTewN2A?=GnX>SOS9^>bP0l+XkKYlIuC literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_rtl.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_rtl.png new file mode 100644 index 0000000000000000000000000000000000000000..d035b9d9bafeaacccfe344089d74c223836c0f89 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2%@N{M0&tl&+_XV@L&KvP9bhd(mDd$5oQ9 zx{v=UI|FIk^Z(?3+>kNNxw7HE%Atd7Zj20v{Vk90;}T5*YGm+q^>bP0l+XkKx(6KT literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docs.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docs.png new file mode 100644 index 0000000000000000000000000000000000000000..54d12151d60b6e442e28327b32b6a26d32956a06 GIT binary patch literal 705 zcmV;y0zUnTP)*IH++L(c? ziH3-(aA;i-GOWsW?=DGpvR|8kqK*DaQb*iIUjim?6na-E14d5-YG(vf+<<$W?fdnm z2?)yYuWRzXu*DyP)VzgJngiuCT9iy_&_ytTqYgml4xyLq2zL=|zdn;-S-P9GDBgCN zd{MBqLFA``ItWHMf>GFm5zKI%xIHSzhS&|2eHZnM23O6TF6(iEXsabmn7F_L<;8KqWjz9!U z0w*X652Eq=DeA)MHYVzq)R0@ZaHB_Pc$}bp-5S-q_K-6o!^LhP&UA26&Md45?br&% z;oXX&pQOWyCOR&5vY@u_;7l_s`Zz)DoGz+!?%~$345!;!IMvF;$rdK|qW56)hj6x; zj-$0?97)01W-3&UZ5*tkJV{VAsxT;Q+h|_a;Y=F`Cz}~K-bll-I!Xo(R}yfzVjYJn z)=)AkfY9j2pM`5rMo7(*vo3UkrS{`uJLhp=a5o13P89pgS2J+9d>I6>9V4l6zQ4Wj zWQk{+*;%I=7%raHj}4Inr<Ax>V;c6C zlYafTln`dBJfO&3C?4VAc+DD)R;(bepM?#f6=bOcpI?{^e{yd8*O$KX&pFG#{%~i} zJxI`iulGS_4Q7C=^`dK8f#j@mmOrz|S{95qGr5$kRdy^|Q)^$a>b6bpiqBTr%RifE nF1>A00000NkvXXu0mjfE^bQ= literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docsql.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docsql.png new file mode 100644 index 0000000000000000000000000000000000000000..2f6f0561dca94b36c8a4f91207b150e7e12120ae GIT binary patch literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`KAtX)Ar*{U&mZJuFyLT0_~m}1 zZLI&Z`O4i&T)&0bY^5j1F#h0G67=$C^DtV%yyxS~KYR=oXPF-S|7^o8s+#{&0F8p>-`M1g_=C3tyCuyd7WLF}NFD7(K5>NA_cozfBh{abi^CBWowA!V`&=I1NH zrC?T$0`#mVys%;;A&@|wcNg&H^#NmCTR5~Ks=pH8FR3@=SCimTFo)90q~L_~M!d4+ zg2__B)nzP534zK00?xgOG)sc${FMMtUUgCW2lE-(3ed6?cx}f6o81H+PXlWk5j<=+ zLFCpp~N|6L56ndKG{vKnNTYrv%}cx}?mtcOsjg|l-SEG@-2bTZZu{9yUaA7;TO zuDJQz$U>SwzZ}AxYP@*Pf>>-c!*Ad6aOS)_M4tB%c4a|Tz_}U2eppD)f^(Zc^v|@g zxH3ZP?imj+uS!_F730)t2d%*AEXsvGkhq?O=kf7XE{BGH67rQfQI9(;aJ$^P^v&(A zxO@8!j-Gfdym9PWkDv>){n!?}QB1c3*J>~9_6(`|p@3OqT6(OW+ZvB{cgE%YgmlC9 z4Sh`K-X|xvb~`f4FZRhAtBD{w#~6^JllxIwr$(CZFhrrW3Qat*eTB0T-z)FfBVXPk5T09t74zn zSH(L;{gdB6f-Bf3wyJn1zo-$N{-R!bcB@`_p88(_D*TR91ZZpzc#P3(FO22+p*!LY z8nl;;4f@N}zXqt{oTO@mr;Qy!&oG|PCXa*hLOv!+r09$>Lyh)|u}XD?`r80i{8Ln| zI~P>9%Y7+LIoPbOi?JgOy}?}Qhx|gD>_5fOV82WVXrY! zBt&}J=2hzMpdrWt7?;;~X9BaE4+6kO5I-Ky-J+TTB#7NU5f% zfB!B92l}zIvxB|8JuEKFAzOF@#p)MmiuXpk;1L2$PSE=2M=4f=>S9lK)VrViG$-JD z7#$hH?(QxF{^c#q&mqR;GE&(0Q5I-}NSEu7-Z|LAB9nbwufOtLd$c(!)HlChU0(bp z^IzV^+6pw!P9W6&DkL`#d`I46W(H)kk4u%8JHkSOzW@C5&lzVvpAVr>2$4txu~^LL zKK=Al1Og4CCrjvOg#y^qrRrT@R~)yo9s$AC|bDit#pD@m>ssZwxHE& zk(ZZ;!oos)_~D0GUtfo^QHYR!J=AS{*kzjH6#M9>ERwl}L|Z4(dTz0=(Lc;L)BANs zM#kOt_I9vFV7UD6>FN0&6cltfu*mPVXS4GU>pHVjK+SJdk`?!Z{6P^00F8aDhcW1Y QegFUf07*qoM6N<$f`cevp8x;= literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_index.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_index.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a11a15d16b979bf4f570da609249062fd7915f GIT binary patch literal 643 zcmV-}0(||6P)A2a@bD zP*On&1tkS2BpgzY+u52Ro+bz-Af&+bW=o)H(gKo*dfCqKTki6trtZ6Gw7}LAZ0Y{aUOWD^+C8_ zW56#8?s_-O52uhoBoZOAftPuCE*^%G_UkUe0oneEP)f;jB-jRL(I`mqi{UYyMfDpxn_Yz35%3-%(-yfM#$!lb!k1_ ztdQ^?aT-e^2`eF|&*-C;Ug5;I$VU5mzOQJfhGCXIt) syCi(X=Nq?VMP}S3za+k;q#D=!0TI0HjY>%;xBvhE07*qoM6N<$f_;F23IG5A literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_lastpage.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_lastpage.png new file mode 100644 index 0000000000000000000000000000000000000000..1b4ac09269d25ef90a81b71132eb839209caaf74 GIT binary patch literal 661 zcmV;G0&4wi?0Qf_F ztf&z(2@Mn){X_h0;(veN{~hcpRJ;7THshKrVD@}!ch)yH%XJM+vg3V=^U}+1^ODQT z4Bp}0-wX`6*9CicU0ri$Yc#1r&lXXtR4Jq~1%zS>-0vG&k3Z^M$Gc<<1G*A!Xz9{( z`4V`tg)$Vq2w5ndFM~(V7T|dESwC{WjV86A0qbJgj7*rPBa%VvO94^!o6r`@Af)6C zlSj|pt#i*tXON|V>6+7TX4*Unt$<;h?1Ts-tmZLf!%H*oEI5NmQ$V zFOdV&CEOX!f*QQ$DL552wpgy>`RgXEv)wbAShL_lV#YK3n^sxN8IvH$ak6H@Y$yYC zi0Jzdoo=0AYo9^ZSS0C2-MZV4?Rr$C3lUJ)b+^i)vs`SaXwC#shmDc1p)vm+Zf5tnz;!rm080Gd3K4VBT##<&-Qo vdGCI+ymj9Z=dyj*%wx?hUx$&ID9+9R<30#qo+be_00000NkvXXu0mjfj_No+ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_more.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_more.png new file mode 100644 index 0000000000000000000000000000000000000000..9d84943ec51c68148b56ccf2aad4888ad6824b55 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6%sgEjLn;`PfA}--NwMB|Izg0S zWn2o!)W+b12DRRW3&hv4co-*yGKjQ!C2Kh_u%rjHsxWdetm%AfTXEonIM4(JPgg&e IbxsLQ0LU61I{*Lx literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_move.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_move.png new file mode 100644 index 0000000000000000000000000000000000000000..aeb7a55d9bcbc0cc2691ca4683b75fba85e117b3 GIT binary patch literal 381 zcmV-@0fPRCP)gH7z7!x|s%l(6Y*+1|r;|n8r>sk%|2d5nlL!kiT z!3bVBR&al^KZIkJ`xFZTat9y+BY0$6ij%en@zDPUZhKwEZk??(-4x#_)`$th*!>WV zp@})%wJc(??l;_lUH`W**VK>aD9S0?`4WL3s$c+7oPNX?_oKCM64y;Qg0i>%SkJ$v zC2M(-Z*nVW>Y2c0143Tk{7SmT1QbjK5ft^Ei0V6Xx6$dMx_U%!6M>HNQf+wJz>ym`~Vef#$H!cPi- z!ISdjFMd9BprS@16t%DP%4!O2?;@Pa4-}K1+T$ovq7iR;r;vf$j{GbTl_MB zTrP)RuZP3o;5j@V4@@Q#oK7e2@!HP=2u(7Xj4NPcCP+62;XRQEUa$Ap6|k{zl1LiKiUI*bs)%iF`=JQU_R^7^nVtyXOu_A9aQuLAQ7 zN95&xXZ!-#tEB?-3`gYoZbzDp$}sF!BEfI9S%I0|6i=kz?@O(kAL03SM=eKSH}26z zUNLl-pyyR9<L!-ej&7}fMflG(3++S{j zV`#|ts;Pu~E;zV!=*r#2CSL~W7#eUtYCQZk74C3w>Clzivkl=84m>lf=l51^o(gw3 zxOC{s_1QWH(lP8+?&gAnYqQXm>(h1d{$7zQ?@xznvjY5noWjTs2bT_Axv~e|fu(-G z9;*BMOi9j04yN2O3thQ7Sr^ym5vi8S|DM@!*aNe{9S(P-(3Q($-a(&SF_dICg{jUz XF(Qe6Fgvvf00000NkvXXu0mjf^is8e literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_plus.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_plus.png new file mode 100644 index 0000000000000000000000000000000000000000..c26fb24966eb43de41d3afd9fef873c7a6874bce GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`VV*9IAr*|tA5Q8l;aFS{wl3!9 ze2yBi4%3Dk981_;KQHy3-f>7_s{!)`)5$3uj?AY{opPu+A<=N5g+DmwKmoT)m#|Ri qLuC_1G1_n=8KbLh*2~7a^uP$r= literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_props.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_props.png new file mode 100644 index 0000000000000000000000000000000000000000..58906696c3695821b2957dff50f11159068b5c30 GIT binary patch literal 573 zcmV-D0>b@?P)%q*r4Mv*FJsfe!R? zHK3KP0=0~mViY$Q%Lv_pf(@cdZlLtL(s_5Gr`-SS=}VP3J-XWy1n;han3U zJhrWn6Wk8Ec=?L=8Ju%IhU+dDi;SglQPtN0>W$8b`&4BZlFL|62w9{2#n4^vJ zRwt=1TpY(5Hr8AfztVrB_3r5s|*e#25KIZVy{U)g&;H=&iO zf;UmmXvo4g)s5852%V5lj888jv4R67wTcIeFXtf3b>~YoWQaq?mLKc?H4_>^?Ib{o z*htL;3oqm#o2H%#+%qeXJO?U%%@`8}88tj8nYE&T8Wg!>lD{e?_~PA&(WwP+6Z04t zokI^d19nj_7m6JGmKr4`_~_A)_tv>~=D9;P9@$jju0<*RSQ|e9=N}o&Xog)G00000 LNkvXXu0mjf-s}P} literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_report.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_report.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b57cdd011002d1b1bfcc195a3715459b366a8e GIT binary patch literal 555 zcmV+`0@VG9P)VYVufSgudTDbX@J8Fk(p>1^%E}>=P3rUa$AgDz!9ZcclvD5OUS5GXa zh#NB(8rK~UA3j771ildXm-a`Qg%(DG0x=9?kKMqw@P)|d>y@BLfdGKZcVAN|Ul4PmDgeHh z$Or?`nz|xX*n9D1L|Cg#UPLrT;2cI)-5yO!v+LY5x;KtANICQ=L)(`Dh&1p$zVU$> zjjI;s;fs&dDp!D;kKRSK(5O=0j8Gh^rm-m4{#nbeHvb}8D0D)4h|>(Q6UUG6>g}gZ c0RLUiNxzg2D09A48~^|S07*qoM6N<$f)RS#y#N3J literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_snewtbl.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_snewtbl.png new file mode 100644 index 0000000000000000000000000000000000000000..b2863b4e3f00e6623f545e6700a1551ff7c28bb3 GIT binary patch literal 653 zcmV;80&@L{P)?jOqw4;3L ztO;9f{?W72Dw^x#)e?fuJro=%n5Jq>+48K~50V zOvHvM*|Qx;)A%EV8qS@A#BPU_4mp_HCjM9;o{?4F=qu50T0vh z{l1ugGsX89ib`Dn~Ptp>BcdZqv6PKX;ZXQC0 zIrt5F!mZU>A}}w}fJ=)m9GWzdI2nwnUKSU^juMH0t}^@5_Mi^&v%x&WIo&V~AQ_k}%>As>K+dO@>Gq_CpO1TNJ5cFSqp*4=eoeD61x3Qc#FH z_vB{cDTH@X$eV~m-gq1W+gx!vbpJB^L>B(xWx5`9N_Z*!7>zu%t<={U)N5ePOcY@NK}O3TzMsKK00000NkvXXu0mjf@Zu`^ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_sql.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_sql.png new file mode 100644 index 0000000000000000000000000000000000000000..e52ff7fbe3dac21e35a231568bb1a7fd24b39df7 GIT binary patch literal 680 zcmV;Z0$2TsP)Yxs5+jg(ld(Sz8&dD_U_DjYy zzmfLd18~JNe;fwfzh|;~=ac!UrECCi+1(t!wfmby#aK;?I|E6_EUU&Q) zAHM=b@pqp8KUFz}DPyJJYtH*(j%~SyJN6V53ffk@NR1(RKibP3CqTs-7 zHMUGNrXPL(?|VjoEsADCgK^N!1xkYQpbaPmQUKnvbwY9dlfQGv#XEWD=VWdim|mYs z`Wf`sEK&+I#Kj>g0xG}(!ghG~=T$!bz5VxIAkQ~W)D-QZVUYO%c$5Tb|33}B#K0@& zI~fnW_G1UQVg#5x-?_1w&|dQx01wIvf&(@J+Dn`Vo7gbl?0(^zqgTdGknP+wQQ@0; zi;y6Ri)FL`5FUI;Cd;seu>cz2jGJDrX(iM0wR3BccnHY@fs2a)DWR~IUVmVK&ImAB zKG$eek@1nhgAnl)KGp$2ErI1;R?eS){pRz01mf}Qx{;zKsGwLUzRPh6 zIxOe^4KehwS3fxm+;rGJJNUQb`E}kB4nsASR1;4kAV~$Of@U3l{9{l)`1}Y6-*+-_ z_DA3R!s<}d%RGhkWQ8C%4r3k8d!{EQxbn13{JT6LtXX6P6vaX3pRix;hKrA2JgldL z0s?q=a~WTV1FNbBn6XBsBfuH+^qU`iyDg-hz)Va`#l%E4O_FLgq1h<$I-h^{$M?Wn#Na=R2QFu)2y>AD O0000z zZ*NyfO?`d+^OevG~C|aVtRTSG$axU1cSj}MtazZ!D2X(q_9vGKoey!7&y0% z!j9O9$K!zl#!O?UQX$HUE|&`qhXXr1JD_2Fe4IdquoLcs-6}w4zmkN+{rx@o=gG+l zD8|Uh2on{;uDBC|6ksqIZ)LNY%gaj;u)n_#iZL)Spz{_A1&*lWDZpehpAt~r`sU^) zwzjsw=;`TE0J|W7VmIFbOs8_jnd|FoaQ?l$Jsck&gVEaBN+ZP%D4Kr+$ffwawzihx zc6of9kDUG=vvmis*5av!Du0000Z6wr$(nrH-96;bhO8N%CJ8U+d026Gf9; zw0(Bc@kjETE>JCt&Z0ehq|Hl$Lhr@g$F|ZduS1p)u8qKm zL%eOylY&K6+)b|Fo>UN`kd&c2jIp!SXJ;Ux5JnT;|#sxu{ zpia=1mJA5`1Ra7_-|2G0{~QFnDAwXp!Q+BjT}GX(#~FH^tH+hPJ*LZ`27f6|2fADr zVWcHnsr9C31;sv&xhMZ8%txtj(De%Z9l5GiEheYs+@DBk@VF)g(XX|&KAB#bA=|{< zmk#xzUnA0T6_zpkhMb?4WX^8O@^vy2f*K|65j-0CS>t0=$db>9%z*4ao<3FK4#9nb zQiXzi8r)bky2P8l@UY-D)4E+IBt#nyPB>PldIf&)fdV5=6>OcJwe|uda>*XEBv0yd wfpI&eI#tm(cbjiUZ{mmijxWQ-Z7zpWO?p?U&3lfR4bNcPn+C*idV;KPNrvaz%l32C?0000mj|US5v}jbXMx`?4PCMa&7ZG>eAwgYu z@?)_@OCJ+7+O5+IaMgZ6^`^=Ljb@!SZBV6Ji$X#o!Y+`i8J$8;rI-{=~>%Zh7m#`souuwtKqz KxvX045Od=O4F{KDh`tK8#d_YWw z&=i*rWEQ|T*8aD7zn@>`_+95Gm-%f0xK-Bh=4O${A1t3gknNq znI#tR#}R)LaO5q|%-ajYijid&Szr!(l87dhV0?JA^QBkPATZAyGdS@bEByGveQxgf z=!hOg%Mvq8Gmp$OoVmN-L-VD&mOcbj$Sl&p6K-=yvAe!+rSeiqbb*wkWGE?eOowiAW1nW#$0R@i2R*&!Us{ewkoE1=Fe$v>6h@5}*vj z`VQ*Ty+M99*AwSZgfKv-3j8$qLPT(I@ClY>+o8c~wTjV|>eQ)2+({T(FbpF%nM_-&SFc_ZlT;!+Jv}QE1QDax>q}z-1-ceG4L6G+ z6VVlMoPaEa%s`evDpu`t&DWx^&5kUF5}}3dn3^HDolpYDf2-uAO$@B8Wx< z;iFU=N`kL*jzE80zyKO;!~j47@{{#a1`GjDfq66w%*G5b0Dx9Q0Y^dFAKgZm5v4bX z^D?W;7G`OhOaW~+3kjJNXEh1y{`fk(jwrW6uSlCtaYT8J5>hehc=uQAwl@l=f?C^g R2si)$002ovPDHLkV1n@fEVuvw literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_drop.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_drop.png new file mode 100644 index 0000000000000000000000000000000000000000..9d84943ec51c68148b56ccf2aad4888ad6824b55 GIT binary patch literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6%sgEjLn;`PfA}--NwMB|Izg0S zWn2o!)W+b12DRRW3&hv4co-*yGKjQ!C2Kh_u%rjHsxWdetm%AfTXEonIM4(JPgg&e IbxsLQ0LU61I{*Lx literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_pointer_ver.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_pointer_ver.png new file mode 100644 index 0000000000000000000000000000000000000000..0b735526f2699f970a79b5ef8b093397eb9d6e53 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W=0VEhE+9_HADW;MjzhDN2vdL#HfIJmX7srqa z#^i(z49sjI35=`}thyVxq7p>6C`3)z;5s8ILYAMwr%KrIoaCKOkSU(7elF{r5}E)d CiWl|( literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/console.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/console.png new file mode 100644 index 0000000000000000000000000000000000000000..f84ce2c1ec5c8e3cb1e2423ccefb3aa551d52337 GIT binary patch literal 292 zcmV+<0o(qGP)Zh$0EOWm$HfUoS65tJ9d&Z?QeMN$C|V+s*cgG=Ds3djwl$_CKNI=#cmeRJ{i^G_ z`3N^_d;onvKnQ_RN+>nqZJx0#3$)fS*5Gt@1U}HVEqKQ<3=WcVgqlu}u|ES}ao#!T z^;k52LhGtwjlBjaC5WO3aU6ps3~8Do%Q6&2jf4DSEm%hEy;nFOZKY`;%yDbZq$p nd!u6kERz?6C^}tK2;pF`*}Q3GNkjQhpkfA3S3j3^P6f4NqD+AhEy;nH#DXmmk(q9SRXUv e9GAN&6T|ZurXTg^miGYFFnGH9xvXe>W1)PfZo;&yd{{R2~*IvK=AIQg4+%##@{|Os5 z{NMBM-~RW4RfB*h3`|#m^-ouCgZQ|qqPnkX) zq|h9Q1z>9V*X`c@Kk?|%|Jk>1|Bu+R<$pm@5lE3WNFloC6s9d)_}?ix`G0A7IZTlS q5X)oplfv4yYY8brCg0000n literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/and_icon.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/and_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2ecce01a25c5739a2be05a82e84b81468b493161 GIT binary patch literal 715 zcmV;+0yO=JP))%R;`@ zfGa3jud;f!E|D%bWLxYf(AG9GQmOX2uGfz14NY+f|sdawmkM7U>H~F24 z_XmH*U2d`oBdj<88dx>GZTXrVkJ_4yJEb=IgPvPqLY+Uq{*Eu7`iNmvrSDZ_69!?$ z5m%!*ZnZ;J&XyhMyZ_;ab$ruc>Q?yaxgYuS-QTEv|2v`Glua1Q2@pqIJGpdn@8#A? zWBfKD0h$PV2L63>OnS+XjZVz*!=qJ7YZpOjLZdLA&2np}`7L&JdP!%4d_F*#SuEWl zVRuk&o4;Qlk}8IHogt$}K;zRksdNV&Gs5O`0pe;)L&kA&bf2U(AeZUW_;|uhI-pP* z;QlvYwJoRo`?ilY?UQl_2rG`Q!FJpJ_etN|HI<3TCPLJ}@Y~Bdc0V^3w{QtO1vWf) zV}U(&Yq>2iy=wS+OkiUXhljN!KX zukYOZ)n;EQ002ovPDHLkV1o7DU1b0O literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/bottom.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..19cbbcdc6b984806e8292c8b38fc040eb614d972 GIT binary patch literal 646 zcmV;10(t$3P)LAX6na$!B8$Zho#uUTG7qye;7=t!lxmuquq-#l*&lQajyq=YPne zdYdXSNt&Z&h|8)&c5xF=V{V72ev)6 z-ZKx5k_jEGmt^76>tc1!LJc$QvmgA5^a*bF#t0k2I5&0WoJLh1lI6z?5v@ZQOT zW!HX}MrL-vod%`nSlFS|1*Te;r#0|ypOKo$tY|BLBB=l8FOQ3Zs4r#cA^fY*lC}PwNS#+@eeGF zA-MsX{k}}r_n-Yt?L-~mxG1uA+Rk{)KbFQrza1Aw*3mNg%;YjTv<&J1Dq5;DDh)bK gIsn=;zRXU^H}wl_D^d?g6951J07*qoM6N<$g4BvO!~g&Q literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/downarrow2.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/downarrow2.png new file mode 100644 index 0000000000000000000000000000000000000000..60827b3d387d18aa5f8a525ca059f56d0d2c1b69 GIT binary patch literal 682 zcmV;b0#*HqP)+TzEk(Pyp5{1_EtbKcqF zGM{WtO1oSye{eLcMr`)mPhDndaOjR3Dx(h$caYm?3*hoI8~QC~;H($MX6YAN7Xl^N ztBSGNZ$722GeKka8;j zzg^xCga$5AB0l5ZW(F)B4aao-)AXNZ8O6P?k zbY2v~!~-D!VmJT7-Y6pINaL8%Vc+@0O!py6Bj+v;1NCL&>G70w}bUGl~YiCOrV%8TB*&8pF^70F7pH@A5?> Q0000007*qoM6N<$f*W}~-v9sr literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/favicon.ico b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..29c2595b1d53b36c607769e69479b23edbd27697 GIT binary patch literal 1150 zcmcJNF-yci5QV=(iLiQj97IbMu8?##HWmt&cEW+Bg@vc3z4|}=2ZEiISXn5D90($a zm5pF&tr*`J2bOSWA|m12*`4IQo$L-Y^t4)NoMn3yrhs{&lrlwL0rajtUhuV!hG`gc zqI9ik3dt?3Kf^{pu-XYUCj*I7WzvT98Xg}4PZvFQkN4<0M?F@|=O+)-U&70MAeXL8 zw~qc4?u@xWrtj04l3AM&f|aT?Y?}UVR6|088pvft;!?T>nta< zPOLBbuxWP{pVgomTz|IDj`zYzk1f+K!tx+ZoO6A-AFM~}>~CJ?5o5hkcmKGSc;2D# psQUj{Q=b1tTlTuj;qXA{M4cPW-;E`)AR1z%h#!jit9TPRd;)f+aL)h$ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/minus.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/minus.png new file mode 100644 index 0000000000000000000000000000000000000000..2feb93556443a2784dbb98378a8eae81d0ad60ed GIT binary patch literal 974 zcmV;<12O!GP)2*~p0m7M+luX^wr$%Q)VAB$Hm_~l_Mo=gxBp2e$xf!$GxKBge5C&y>FY$U zb~~TjG=)+hCo<9B;WZ-LoD-8?S$qAdySChY9=6?kF1FosE;inN_V>%LIDXkcy6bi! z82uS~Vzx`x-+1b$d+s{}dv8d`?hBmQah8c4Gqzvo#g3cvvH7mEu;_xqHRVKJ`aSy6 z-M4MJ=|t?gB807la%?GJr@*+do}Rw*B_fW- zv+VTf${lAKv9(xsWR(V`2=3#aNoA!2A>rv!fEsFL7Zg z%kvP$(-ttKtU1AiZ6!RDX|RQrJLl{aY?;3hGcGB{iYQ^apRl6hZLF%VMt@X=d5H=Z zK#Bf{5D%Hdg`cr1w#cDIy4;FAwOM#sq+Sn}c%7-8nwndozi z(C$~F-Yr9eheMB7H`dFU5!E}ZnQT=yk7b!mn5w|y3@zTD-w%PWzxf^lKYjZ(R^NX$ zT5N&7QOa7e)#bxjPT*nW2ieJ2W1lo zHLhP|Wi}bA>@svXxq`7}_G>O&kfy?dR3+vzS$9y0W##W+gyr{Kg#-O95cvF)&(L)C zNhqBv9+s7|Q|D5BHNz^KL?hIib^2N9lRll3%wc*|hMtH9pX}TWfn|4Jj!HG5)+)iF zIYSUw{K!3cLq{mJNKoNcp*5iIr}6YB8K0PyWxzm0j&3j8w;T%=UVkQPr_yl0D$Pt9 z&|&7a=iu!rf{bP8I(GifN$<71@8f!i~rDhS{&=TG? z5-PkJG^g0m?$bX(zeN?%)V@^9^1gfzS`#Ou&Z9t;O@eZ(gvrFCCDtWd(3aswn^*G! z{Si+S$-1LcpXtf*e$tWWM@zN`jp+_FWw_Yii?$pe+EZ*h+imiT=&w-EvhDC{u56DQ w-e^xUceW>(n%hH@o@p~nPHbiEq5q4Y0cN}ur6)c$ssI2007*qoM6N<$g5LMvyZ`_I literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/page_add.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/page_add.png new file mode 100644 index 0000000000000000000000000000000000000000..5d8a1d1a9f9dd046bea30fe5f3ea25fd34e9276c GIT binary patch literal 694 zcmV;n0!jUeP)H!iL@Y-F5R+!N4*In7^n=C?-|m*?>=(Bj{L_64YJ(x#e(M!!^S+ZT1~aGzMV3>R zVqPnA`aYX*+`fqpK54^K&OK)uytu{6(ZEVr2pa>j5d%elWDo;H12YI1;OwwzgNu*Z zfj#!wV1u0wIp95jwFU(S5P)EdwN;JAxT*8lZQ~XPZfV?l!dAp0T~j+{00~kA!;l%C z1;I!W8VU@aBAQ;}-sF@$*TYgMYl9L9NEQ%6fCa+TJ_tBqMm0jH zbSNSf7O-q62nQtUgI4&;i5fHQ*b15B`o> zbEnZNTZHCescx66KMLfKmn&SA9eaPt$Z6km#>vNU*Y$UE=n=cK^|n8xqwd)L`I;$L zA3oWwi6PuTGH{TIjrx4d)fb&h4w=JtIEUZ+e#P;JoWSrw-`x#7vPQ5hGdaT!n-(0o zZNLS2u?8;qvHf@o+n5UuxEX+l&w7*Zdc6wv-TDA)1{Y*+<*a7L+KtJ$31L7LoH~03 zea5z>$JqaQ;+*$*`qvv-KduL2{#t{r`95L86t;fs-~}520fAGo*#?P^rr%7Po*!}I zp(iaFS;G?lcmEfMSJwJ`9e&$ScYDbdW_ECkS+qP}nHiETn+ve&0*LX_9J;}M8`9|j-(7(mx;X{}_ z)QZW11xywsWU>GoWA59q{{f9)@`!^>6IWJD!MRPjhkn zSzZs*H~MEJ56JWqA9v?rqjc6Yl@nEf^{UXy#RsFY{9Fio~>UPb9_vUE+MuqBxi9s2+>7iq?7N zCz}lmR(>!tnB(2Bb3zXD!M1~qVizvh-s9m}lp`Y5!C-J$!)U^qBV30>q&p09PKye# zEj8Vcxad=qh$Kg!<+^N*%swY(|GQ}qcKw{7_&LDrgn-Mf*>4>tHFiYomN;_YgHBW9 q>p8|6dmDKglRq_BSj+HxGcbtRMjySlP*)A;2?kGBKbLh*2~7ZHOj5QP5*H592MHi>kxxso|1j9r_C$(xcOnPY@V8t}^57GdqlqQsfs^&@~BXd-;HmBn{kT3moXKc(}qF(0{-(6AXu~n0MTUC8zBW4(21ySd*sy6bal2EN8$T ziU+GafHbtyIYtcHP{|dMUhNYW#$bKcf@Tvv1Fr>o0BHlLDML0^V#uaSgr&nLEFz;C zgXlXZ)|A50e(S^@K$<1C0Xv4RGD2~nrWreK=hHpzd?^N5g1MaTNuY1#iWe8zzb(Da zAzP;;fnLbwobDrf($bubHF#H+1(lhdj#e!rjhNO;ED1BN5xL zS+L`}^*7NodM8zX$s8HDV;K9Vv9C?xP+BM2fL^mh3#M&~hGBma33T0SR%jumNs;-6 zd4W-Z7;QL+qT^LM>T1En>AQGtPm!Gy}gq{*CR??HgGRLdS^V(|EiWd$@f{|m^TtInt$vQfKI1l zSGy065nwQcXE#lWGu!odqXmZipV;zDoO`idlrvLx|07*qoM6N<$f{6I8ga7~l literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/toggle_lines.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/toggle_lines.png new file mode 100644 index 0000000000000000000000000000000000000000..46d28c09bf5582c310d80b6f7c2071ded1b2bfdd GIT binary patch literal 415 zcmV;Q0bu@#P)3zresa_0C*k+Q840F~z{g8S)cG$N+S!Z1P5-U`o_wk05IY z?Z#Krkw6dsYxoEgh*52BNm(_UYT0RU(i@ZN|7QPchqZi^R2r zYGz^$>kGW%qnOPo?~Q>qB=0h18ol6{u@3Mc?>vRp3iy8JpBM6{R(z1lfb#$V002ov JPDHLkV1h<_ww3?@ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/uparrow2_m.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/uparrow2_m.png new file mode 100644 index 0000000000000000000000000000000000000000..5d1342d4f217a25c6111990a9bb12309497cc025 GIT binary patch literal 643 zcmV-}0(||6P))a1W`Py9o7B_4eL1RM`%<9wT-iF+qP}nwr$_*zG4r5q>XQq_3kgTGxId< zJ@;zZdEEG6>wf=-joX9o)^4{xn>p-%@?G!0K?gPMy$p4nd?$@PL*Nh+3zzT&aIWR( zJ^9_n&FPb={W*gF1$IKq!K=|OI0j`6Ef}AgK}lT`R@c_Rv9`4nt`UjQu=N=EWae;N zEmXtqmuHRs2^r`e8pY`3Gzj@?E32#EdT49{;c0nUdAV_xDquj9a~^CbMt8H9gyp}g+=f@UECGn znR%gQd_fuT27{hgS+@l?IWvp=s(RG5b)iPY@2~X@kHIN49!8$Q_+VmtR~hiWZBR54 z^GhX=2}vm|2S-{#RRhvXDz^a5eZnD1>4!4l1M7e&1Se-BEG-vNnFR<+&H@v#*fd8(BY608#-=ihEQNJfe~@Ffy*- z)n;gXZZUXQBxUxQhQSpDAZtk|z}zk(r+H0`M7>%xfuC=IBoq zKa&}^*J!Ko9$n+hQ?)eu=3czqGr z$^d9Wx1i2*euX;XK-bR%RJBiYbE!>=RTT@tA|q6ha6SY&6TCT@kVw82K(wl0Ot}e# z%@|F6#KBgQz+CX~5-ay32b2)lQgT;7fL~sJDOhwu4fs7>3#vic=bR~Ey2|S$+fhhoQ z&INDGB!Lw0`Z#dL5U>sR!6B(apsRMH?p8|( zR1^#uZYVg}fmL|yX!qF;RN)7E)VeKInQ|SV_gME%K$=OIunTJ2snEqfMZt+qoXlz6 z;!k%V(Ga|^Z-wKk+L~wM!9+}fP%{C7aum4OS*SSL64|Hw809YO$A4>y5|NJQrrbNV z#%g=-FdkkWjH@U5VgL4(STLrW7-4f_qnM97xEKQ92NX7TZOEzX2uZJQ zYm6^zGK3Y>8U3@Xd%Q9#3wXcs^ZDwVnM!>d_d4)Y7X#WA~sE)EdoTDm)3#?eWd38m$CUDqHT- z0fPn;x(D@gH<&H3+3fH+?nKkTv4bJh%BmarkjxIE{DDcoh4aCTQ69q zB)T1#X;1=zxiuydC2n)CM&i;@l~CU`fXenhFe!Le#IE|L*_8l0+(cEh_v^r}BetXw zNil9niT6fwoCl(UKY%IWl2V3*@@7eJ%`g310*>cSRB?mE4W)p;$3q0siGX)zrMNo0 zJ&kv=X0(S)GJd=(5J`UgS z0cSh;Q$leUMZ|#uBr1q|azzWyd!<+$l1kTozXu9*oWVtDdmfnwis4IQ2|n`f%-T=6 zC*hJ$>Y!tC>4M*Fq5?@vUtZmAe&_H8x1R3B`8zvs^zv1#o;%Ub+0XjpDu0iQr}s2E zy12s8(H(Eze#HI9FR*;++%Eb5KLV!@ZBC7fjz(u^7qYW+@Y%r$Ul;0Qf179nb}#RU y4Gr-4>gww9&(YETpO?G+w~cdZvv3(e5e5K33Mf9WsKG4&0000iyTWAJqKb6Mw<&;$SpY!+t# literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data.png new file mode 100644 index 0000000000000000000000000000000000000000..c173bc0343f01226364682225e578d0b21c2cba7 GIT binary patch literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}cz{ocE4wm--#UpiszQx|%_^ zOfYJ)i_szmgSia)Ga1@9mg`JrFyFv1ui{t>(25LC7srqa#!~-gMixT>o7TTpc;x+{=G{wG z1D)reB_G5!{t$K+-k|$a>_JJ_ibrQ--JkXNCg=X&Q`4i|sle*2e&x6j&`t(VS3j3^ HP6`Uv)H4`)yU=Q-S_C<#_zx|PKsN&6CN9K%8V{QMue2gQBAO%Aw)W;G40000< KMNUMnLSTXz$8w|q literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data_selected_hovered.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data_selected_hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..7091ae36de71e254ae99b1a09939fbcfb4691f57 GIT binary patch literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAsy$sCLn;_c&o5_UGUQ=tXtnqGMNFT?uHlk{|7-TDV|mZz(q%Q~loCIAUhMcM!W literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/play.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/play.png new file mode 100644 index 0000000000000000000000000000000000000000..75a2c67c6bccb2f766dd7a35d63754dc5da67fc2 GIT binary patch literal 329 zcmV-P0k-~$P)Zn<8OG=V*-Z; z&j@XL{PV58PGHp_sNo)Miyuhne1vn}Svune?v>YQTzE&#^c(zYZ(tg`U(Tq3Yrz$& zre2Xf@Q9+3C%6=xLCt%umUaWj^b@l18IjF5h-$e(a@Q>^6ZfIwI)6>8fnn@EGW#Cj zTXTtk+Do#@H4GzmpiIp7&}yI_u#JR{TX;H6;8$}2E#D0&Sd3LOmQjhAg{Idk2QemDhjv*C{$qU3Ia<;sAbL#&K zf#r{;{?|`*ijh+2^8a`L!+Z_tuqILAZHxcxU}Hxj)Pr|r(QBJM2AjmF}av61GIs`)78&qol`;+0O)-)7XSbN literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_really.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_really.png new file mode 100644 index 0000000000000000000000000000000000000000..e48c9cd4830543e151c6c86035f8a5c6ff640750 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHY$ZW{!9W@a@|Lkr1X8A+E{-7; zjL8iR|8Fn^$SBsfH8RRJ9=*8q;jTcDgFiEbW@rg;bW6^-l(Nb}VbWOz8M&6jA`E6y V8@BcETZMrP@^tlcS?83{1OSY1Bf%~w!%ZMWiPj^DJ^r%u7xpkakgzd|IKTj;mp=|tPgdRIF9)p{C@(i zqoZRRun8cFA_SorKWt$bem1^s2bK2r_F(Yf!76}sBj;Zn<^1N&o1vC2R9)BEb2Y@X zsuUldBKGTa8#05T6Xwv|`w5dLPiEVR5|-m(*=cip4sV_;9H`odstX?+AZWkL%a#^i zWG&*Iw-E4spIz&Er1ni23lIco?-q!Q!xpf1?kF}I8fUNE;ijs}i>FVY=0h|#HohSc zoq!)iT*{0@(~9)&+n1}}G71F;dcPr9zI?e<7p^~ZP-=O^kO>nxt}UeS%A@;0gW>fy zdGX@Ki{ExIs#k@(`Tj%$`!isefm3nl6J>!O;v$O{Et1*aL98XgmZlZ*z_Kh{*G(^s zk+x0Kq+h>&Ungj3X(5xzFlf*q#*ZIQ&z?Q`6!-4kaUk7c1w^or}Nl`($fwZdQ_Q-n{ug)H~M)J~IIT;Xpa)v}d>9yJ8+!+m#8sI=b?%Iy+9+s^Lyv@^Es= zE%v580mlV$Lnbu*{N!<91<#@nhgo<3arp56tgzXPMW?%hI6C-Qyc3(1ulY=A{`%+B zGRK;N&wUy@mrCSm|DLAZetBZ3Q0sc*gO{#+QDcbI7VD8s_W2ET9)qW=pUXO@geCw` Ct5xIx literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_unlink.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_unlink.png new file mode 100644 index 0000000000000000000000000000000000000000..551679e94553fe46f47974585142eccbaf93cd20 GIT binary patch literal 589 zcmV-T0;V<1vlO}RMGo?dIxq@bW{fK`c<3qbv65{^%jf5 zRoPtr^;a%+wCI-~!K!rCFX8Yt#-dj~7<)HXXfIMlVawvwASZxWiONl#A?DJ?B!0OaTA z_pYq0yoBH1-%r4SM-Mrrs;cUgo}T`2VPWCEkB`q$dwcu0k&%(4t*tEyKyq?2frgKq z%jI4IkKUI%s4FWgd(qzB9?gP}jg5`Bo;h=7>*VC*Rsg-dy<0^h(N@-%V)Luuz@vwp zQdCrojgF3f(ACwI;pXOc!qn9CwUw0>admYi0NA}UG<@XXz@vwpl4U1HN5`ec#>NMH zKL4IrEGFIE-6So@e$$=*Dk%I$|9&$=bN@@dpdn$Hzb{8TdBA&*_$G>3LSKi*< zK>$L+6PH;17(Q}v;L-c;e_)%x++&h7FI4g#-{w-j%E)_+`Tg=(FiTkwg|;!T6urh} z)qJN~WIe{zTuN51O1ln6{qzKS(KGvlTbVZsp5t23o>i+4+2S5)mtko&--!c~PD301 b`DpwA{kwbC54?PM00000NkvXXu0mjf5XmU= literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_vars.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_vars.png new file mode 100644 index 0000000000000000000000000000000000000000..b62dcd23e24bd7a605adf8f18d80e0985c6e18f6 GIT binary patch literal 523 zcmV+m0`&cfP){ymk#Y{aHmB23U{{#w+8QVcXxMa(FS+7crtNMxa5C_ed{vkd}BBFOP)0W zz$jjw3i=leYJhG9&3LbppnnuaR+^@HmSw1oBFBy$JGOF3HNhY%d!7g1_c^w0!!%7O ziozt4Bw^>yom^60Zb|~WAPhsqam+pm*L7i87F1Pbf*=S$H`%*)FOyUeSbjof4hg8> zI1V&Tt1%?%a6$X7{f95Uu42YznT2z2>sWGIgKmd>D7vn*ClN)ls-WlE*JUHOeR#Fx zmWJ79nE(rJYFKe!$D%7LR5M@_dJ>us!!W=Fy*7OtH}Sj@F21Q^_GuY{5wTD-W6Zgv zfc~F+M#hz=1{)5|35mF1>}knfeMiT*6GHa#yGH@%)lVN2Pl;H5O~Hgif8hBMNf=zv zed)(>qYn$=f^#ya9{2-6V^6@IWX3T8^#9lczj67Y!6%pYLzOw`I`wJU&{fZ0%|0$* z@{XS@oPI>WyfYH!?*9$VijX7;L1m)mDzxg*d-&{~KQVgC4;GH!_ZxHf{zl2><;v6$ z@QqZRG)-%zF2P?48cEIt|0M&83GyjuOu4w$r2|-5(3vD;Z6y7v^A88j%9xi8inag% N002ovPDHLkV1lo->3RSF literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/zoom-plus-mini.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/zoom-plus-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..466cc7bc0e38d01873b3a358e10308339fcbb4f2 GIT binary patch literal 320 zcmV-G0l)r7cz7G|s1Jor(C;;k6-C&Vjf?WdGg)n#802HNdxAN{h$!JP5_+ws=pR$PP zl4ZRxQ7+=5W{>YThRwM%;D{;_8N$XnK@y2X-)2OHZKOcZ^@tX8B&7Wva}^9A>~0i> zAJladwe1fD!MhG)fbzRRl6(Q$isMfmlmp^A2w#H?5C_y8kI!d8uKTu?WwnITw3heB zqfj9j$AfLZ(lGqeG|e)+`~GsnR>2g=_e+}RmB#T;wk+%AhPUUH_YnGDaPWrz85z64 zxUcUt+-tqPr{Us3K^ri`2}F<^*z`BZ!eR+LfX&U9kZBOYFqk0}7=*y|GYA0g1#X`p SKyPON0000x}85_zopr0E9Xxk^lez literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_glass_95_fef1ec_1x400.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_glass_95_fef1ec_1x400.png new file mode 100644 index 0000000000000000000000000000000000000000..7172755b8eca081734b440619224c0b31d8acb37 GIT binary patch literal 185 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 hIX| .ui-controlgroup-item { + float: left; + margin-left: 0; + margin-right: 0; +} +.ui-controlgroup > .ui-controlgroup-item:focus, +.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { + z-index: 9999; +} +.ui-controlgroup-vertical > .ui-controlgroup-item { + display: block; + float: none; + width: 100%; + margin-top: 0; + margin-bottom: 0; + text-align: left; +} +.ui-controlgroup-vertical .ui-controlgroup-item { + box-sizing: border-box; +} +.ui-controlgroup .ui-controlgroup-label { + padding: .4em 1em; +} +.ui-controlgroup .ui-controlgroup-label span { + font-size: 80%; +} +.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { + border-left: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { + border-top: none; +} +.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { + border-right: none; +} +.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { + border-bottom: none; +} + +/* Spinner specific style fixes */ +.ui-controlgroup-vertical .ui-spinner-input { + + /* Support: IE8 only, Android < 4.4 only */ + width: 75%; + width: calc( 100% - 2.4em ); +} +.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { + border-top-style: solid; +} + +.ui-checkboxradio-label .ui-icon-background { + box-shadow: inset 1px 1px 1px #ccc; + border-radius: .12em; + border: none; +} +.ui-checkboxradio-radio-label .ui-icon-background { + width: 16px; + height: 16px; + border-radius: 1em; + overflow: visible; + border: none; +} +.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, +.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { + background-image: none; + width: 8px; + height: 8px; + border-width: 4px; + border-style: solid; +} +.ui-checkboxradio-disabled { + pointer-events: none; +} +.ui-datepicker { + width: 17em; + padding: .2em .2em 0; + display: none; +} +.ui-datepicker .ui-datepicker-header { + position: relative; + padding: .2em 0; +} +.ui-datepicker .ui-datepicker-prev, +.ui-datepicker .ui-datepicker-next { + position: absolute; + top: 2px; + width: 1.8em; + height: 1.8em; +} +.ui-datepicker .ui-datepicker-prev-hover, +.ui-datepicker .ui-datepicker-next-hover { + top: 1px; +} +.ui-datepicker .ui-datepicker-prev { + left: 2px; +} +.ui-datepicker .ui-datepicker-next { + right: 2px; +} +.ui-datepicker .ui-datepicker-prev-hover { + left: 1px; +} +.ui-datepicker .ui-datepicker-next-hover { + right: 1px; +} +.ui-datepicker .ui-datepicker-prev span, +.ui-datepicker .ui-datepicker-next span { + display: block; + position: absolute; + left: 50%; + margin-left: -8px; + top: 50%; + margin-top: -8px; +} +.ui-datepicker .ui-datepicker-title { + margin: 0 2.3em; + line-height: 1.8em; + text-align: center; +} +.ui-datepicker .ui-datepicker-title select { + font-size: 1em; + margin: 1px 0; +} +.ui-datepicker select.ui-datepicker-month, +.ui-datepicker select.ui-datepicker-year { + width: 45%; +} +.ui-datepicker table { + width: 100%; + font-size: .9em; + border-collapse: collapse; + margin: 0 0 .4em; +} +.ui-datepicker th { + padding: .7em .3em; + text-align: center; + font-weight: bold; + border: 0; +} +.ui-datepicker td { + border: 0; + padding: 1px; +} +.ui-datepicker td span, +.ui-datepicker td a { + display: block; + padding: .2em; + text-align: right; + text-decoration: none; +} +.ui-datepicker .ui-datepicker-buttonpane { + background-image: none; + margin: .7em 0 0 0; + padding: 0 .2em; + border-left: 0; + border-right: 0; + border-bottom: 0; +} +.ui-datepicker .ui-datepicker-buttonpane button { + float: right; + margin: .5em .2em .4em; + cursor: pointer; + padding: .2em .6em .3em .6em; + width: auto; + overflow: visible; +} +.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { + float: left; +} + +/* with multiple calendars */ +.ui-datepicker.ui-datepicker-multi { + width: auto; +} +.ui-datepicker-multi .ui-datepicker-group { + float: left; +} +.ui-datepicker-multi .ui-datepicker-group table { + width: 95%; + margin: 0 auto .4em; +} +.ui-datepicker-multi-2 .ui-datepicker-group { + width: 50%; +} +.ui-datepicker-multi-3 .ui-datepicker-group { + width: 33.3%; +} +.ui-datepicker-multi-4 .ui-datepicker-group { + width: 25%; +} +.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { + border-left-width: 0; +} +.ui-datepicker-multi .ui-datepicker-buttonpane { + clear: left; +} +.ui-datepicker-row-break { + clear: both; + width: 100%; + font-size: 0; +} + +/* RTL support */ +.ui-datepicker-rtl { + direction: rtl; +} +.ui-datepicker-rtl .ui-datepicker-prev { + right: 2px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next { + left: 2px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-prev:hover { + right: 1px; + left: auto; +} +.ui-datepicker-rtl .ui-datepicker-next:hover { + left: 1px; + right: auto; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane { + clear: right; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button { + float: left; +} +.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, +.ui-datepicker-rtl .ui-datepicker-group { + float: right; +} +.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, +.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { + border-right-width: 0; + border-left-width: 1px; +} + +/* Icons */ +.ui-datepicker .ui-icon { + display: block; + text-indent: -99999px; + overflow: hidden; + background-repeat: no-repeat; + left: .5em; + top: .3em; +} +.ui-dialog { + position: absolute; + top: 0; + left: 0; + padding: .2em; + outline: 0; +} +.ui-dialog .ui-dialog-titlebar { + padding: .4em 1em; + position: relative; +} +.ui-dialog .ui-dialog-title { + float: left; + margin: .1em 0; + white-space: nowrap; + width: 90%; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-dialog .ui-dialog-titlebar-close { + position: absolute; + right: .3em; + top: 50%; + width: 20px; + margin: -10px 0 0 0; + padding: 1px; + height: 20px; +} +.ui-dialog .ui-dialog-content { + position: relative; + border: 0; + padding: .5em 1em; + background: none; + overflow: auto; +} +.ui-dialog .ui-dialog-buttonpane { + text-align: left; + border-width: 1px 0 0 0; + background-image: none; + margin-top: .5em; + padding: .3em 1em .5em .4em; +} +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { + float: right; +} +.ui-dialog .ui-dialog-buttonpane button { + margin: .5em .4em .5em 0; + cursor: pointer; +} +.ui-dialog .ui-resizable-n { + height: 2px; + top: 0; +} +.ui-dialog .ui-resizable-e { + width: 2px; + right: 0; +} +.ui-dialog .ui-resizable-s { + height: 2px; + bottom: 0; +} +.ui-dialog .ui-resizable-w { + width: 2px; + left: 0; +} +.ui-dialog .ui-resizable-se, +.ui-dialog .ui-resizable-sw, +.ui-dialog .ui-resizable-ne, +.ui-dialog .ui-resizable-nw { + width: 7px; + height: 7px; +} +.ui-dialog .ui-resizable-se { + right: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-sw { + left: 0; + bottom: 0; +} +.ui-dialog .ui-resizable-ne { + right: 0; + top: 0; +} +.ui-dialog .ui-resizable-nw { + left: 0; + top: 0; +} +.ui-draggable .ui-dialog-titlebar { + cursor: move; +} +.ui-progressbar { + height: 2em; + text-align: left; + overflow: hidden; +} +.ui-progressbar .ui-progressbar-value { + margin: -1px; + height: 100%; +} +.ui-progressbar .ui-progressbar-overlay { + background: url("data:image/gif;base64,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"); + height: 100%; + filter: alpha(opacity=25); /* support: IE8 */ + opacity: 0.25; +} +.ui-progressbar-indeterminate .ui-progressbar-value { + background-image: none; +} +.ui-selectmenu-menu { + padding: 0; + margin: 0; + position: absolute; + top: 0; + left: 0; + display: none; +} +.ui-selectmenu-menu .ui-menu { + overflow: auto; + overflow-x: hidden; + padding-bottom: 1px; +} +.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { + font-size: 1em; + font-weight: bold; + line-height: 1.5; + padding: 2px 0.4em; + margin: 0.5em 0 0 0; + height: auto; + border: 0; +} +.ui-selectmenu-open { + display: block; +} +.ui-selectmenu-text { + display: block; + margin-right: 20px; + overflow: hidden; + text-overflow: ellipsis; +} +.ui-selectmenu-button.ui-button { + text-align: left; + white-space: nowrap; + width: 14em; +} +.ui-selectmenu-icon.ui-icon { + float: right; + margin-top: 0; +} +.ui-slider { + position: relative; + text-align: left; +} +.ui-slider .ui-slider-handle { + position: absolute; + z-index: 2; + width: 1.2em; + height: 1.2em; + cursor: default; + -ms-touch-action: none; + touch-action: none; +} +.ui-slider .ui-slider-range { + position: absolute; + z-index: 1; + font-size: .7em; + display: block; + border: 0; + background-position: 0 0; +} + +/* support: IE8 - See #6727 */ +.ui-slider.ui-state-disabled .ui-slider-handle, +.ui-slider.ui-state-disabled .ui-slider-range { + filter: inherit; +} + +.ui-slider-horizontal { + height: .8em; +} +.ui-slider-horizontal .ui-slider-handle { + top: -.3em; + margin-left: -.6em; +} +.ui-slider-horizontal .ui-slider-range { + top: 0; + height: 100%; +} +.ui-slider-horizontal .ui-slider-range-min { + left: 0; +} +.ui-slider-horizontal .ui-slider-range-max { + right: 0; +} + +.ui-slider-vertical { + width: .8em; + height: 100px; +} +.ui-slider-vertical .ui-slider-handle { + left: -.3em; + margin-left: 0; + margin-bottom: -.6em; +} +.ui-slider-vertical .ui-slider-range { + left: 0; + width: 100%; +} +.ui-slider-vertical .ui-slider-range-min { + bottom: 0; +} +.ui-slider-vertical .ui-slider-range-max { + top: 0; +} +.ui-spinner { + position: relative; + display: inline-block; + overflow: hidden; + padding: 0; + vertical-align: middle; +} +.ui-spinner-input { + border: none; + background: none; + color: inherit; + padding: .222em 0; + margin: .2em 0; + vertical-align: middle; + margin-left: .4em; + margin-right: 2em; +} +.ui-spinner-button { + width: 1.6em; + height: 50%; + font-size: .5em; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + cursor: default; + display: block; + overflow: hidden; + right: 0; +} +/* more specificity required here to override default borders */ +.ui-spinner a.ui-spinner-button { + border-top-style: none; + border-bottom-style: none; + border-right-style: none; +} +.ui-spinner-up { + top: 0; +} +.ui-spinner-down { + bottom: 0; +} +.ui-tabs { + position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ + padding: .2em; +} +.ui-tabs .ui-tabs-nav { + margin: 0; + padding: .2em .2em 0; +} +.ui-tabs .ui-tabs-nav li { + list-style: none; + float: left; + position: relative; + top: 0; + margin: 1px .2em 0 0; + border-bottom-width: 0; + padding: 0; + white-space: nowrap; +} +.ui-tabs .ui-tabs-nav .ui-tabs-anchor { + float: left; + padding: .5em 1em; + text-decoration: none; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active { + margin-bottom: -1px; + padding-bottom: 1px; +} +.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, +.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { + cursor: text; +} +.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { + cursor: pointer; +} +.ui-tabs .ui-tabs-panel { + display: block; + border-width: 0; + padding: 1em 1.4em; + background: none; +} +.ui-tooltip { + padding: 8px; + position: absolute; + z-index: 9999; + max-width: 300px; +} +body .ui-tooltip { + border-width: 2px; +} + +/* Component containers +----------------------------------*/ +.ui-widget { + font-family: Verdana,Arial,sans-serif; + font-size: 1.1em; +} +.ui-widget .ui-widget { + font-size: 1em; +} +.ui-widget input, +.ui-widget select, +.ui-widget textarea, +.ui-widget button { + font-family: Verdana,Arial,sans-serif; + font-size: 1em; +} +.ui-widget.ui-widget-content { + border: 1px solid #d3d3d3; +} +.ui-widget-content { + border: 1px solid #aaaaaa; + background: #ffffff; + color: #222222; +} +.ui-widget-content a { + color: #222222; +} +.ui-widget-header { + border: 1px solid #aaaaaa; + background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; + color: #222222; + font-weight: bold; +} +.ui-widget-header a { + color: #222222; +} + +/* Interaction states +----------------------------------*/ +.ui-state-default, +.ui-widget-content .ui-state-default, +.ui-widget-header .ui-state-default, +.ui-button, + +/* We use html here because we need a greater specificity to make sure disabled +works properly when clicked or hovered */ +html .ui-button.ui-state-disabled:hover, +html .ui-button.ui-state-disabled:active { + border: 1px solid #d3d3d3; + background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #555555; +} +.ui-state-default a, +.ui-state-default a:link, +.ui-state-default a:visited, +a.ui-button, +a:link.ui-button, +a:visited.ui-button, +.ui-button { + color: #555555; + text-decoration: none; +} +.ui-state-hover, +.ui-widget-content .ui-state-hover, +.ui-widget-header .ui-state-hover, +.ui-state-focus, +.ui-widget-content .ui-state-focus, +.ui-widget-header .ui-state-focus, +.ui-button:hover, +.ui-button:focus { + border: 1px solid #999999; + background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-state-hover a, +.ui-state-hover a:hover, +.ui-state-hover a:link, +.ui-state-hover a:visited, +.ui-state-focus a, +.ui-state-focus a:hover, +.ui-state-focus a:link, +.ui-state-focus a:visited, +a.ui-button:hover, +a.ui-button:focus { + color: #212121; + text-decoration: none; +} + +.ui-visual-focus { + box-shadow: 0 0 3px 1px rgb(94, 158, 214); +} +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + border: 1px solid #aaaaaa; + background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; + font-weight: normal; + color: #212121; +} +.ui-icon-background, +.ui-state-active .ui-icon-background { + border: #aaaaaa; + background-color: #212121; +} +.ui-state-active a, +.ui-state-active a:link, +.ui-state-active a:visited { + color: #212121; + text-decoration: none; +} + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, +.ui-widget-content .ui-state-highlight, +.ui-widget-header .ui-state-highlight { + border: 1px solid #fcefa1; + background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; + color: #363636; +} +.ui-state-checked { + border: 1px solid #fcefa1; + background: #fbf9ee; +} +.ui-state-highlight a, +.ui-widget-content .ui-state-highlight a, +.ui-widget-header .ui-state-highlight a { + color: #363636; +} +.ui-state-error, +.ui-widget-content .ui-state-error, +.ui-widget-header .ui-state-error { + border: 1px solid #cd0a0a; + background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; + color: #cd0a0a; +} +.ui-state-error a, +.ui-widget-content .ui-state-error a, +.ui-widget-header .ui-state-error a { + color: #cd0a0a; +} +.ui-state-error-text, +.ui-widget-content .ui-state-error-text, +.ui-widget-header .ui-state-error-text { + color: #cd0a0a; +} +.ui-priority-primary, +.ui-widget-content .ui-priority-primary, +.ui-widget-header .ui-priority-primary { + font-weight: bold; +} +.ui-priority-secondary, +.ui-widget-content .ui-priority-secondary, +.ui-widget-header .ui-priority-secondary { + opacity: .7; + filter:Alpha(Opacity=70); /* support: IE8 */ + font-weight: normal; +} +.ui-state-disabled, +.ui-widget-content .ui-state-disabled, +.ui-widget-header .ui-state-disabled { + opacity: .35; + filter:Alpha(Opacity=35); /* support: IE8 */ + background-image: none; +} +.ui-state-disabled .ui-icon { + filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ +} + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { + width: 16px; + height: 16px; +} +.ui-icon, +.ui-widget-content .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-widget-header .ui-icon { + background-image: url("images/ui-icons_222222_256x240.png"); +} +.ui-state-hover .ui-icon, +.ui-state-focus .ui-icon, +.ui-button:hover .ui-icon, +.ui-button:focus .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-active .ui-icon, +.ui-button:active .ui-icon { + background-image: url("images/ui-icons_454545_256x240.png"); +} +.ui-state-highlight .ui-icon, +.ui-button .ui-state-highlight.ui-icon { + background-image: url("images/ui-icons_2e83ff_256x240.png"); +} +.ui-state-error .ui-icon, +.ui-state-error-text .ui-icon { + background-image: url("images/ui-icons_cd0a0a_256x240.png"); +} +.ui-button .ui-icon { + background-image: url("images/ui-icons_888888_256x240.png"); +} + +/* positioning */ +.ui-icon-blank { background-position: 16px 16px; } +.ui-icon-caret-1-n { background-position: 0 0; } +.ui-icon-caret-1-ne { background-position: -16px 0; } +.ui-icon-caret-1-e { background-position: -32px 0; } +.ui-icon-caret-1-se { background-position: -48px 0; } +.ui-icon-caret-1-s { background-position: -65px 0; } +.ui-icon-caret-1-sw { background-position: -80px 0; } +.ui-icon-caret-1-w { background-position: -96px 0; } +.ui-icon-caret-1-nw { background-position: -112px 0; } +.ui-icon-caret-2-n-s { background-position: -128px 0; } +.ui-icon-caret-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -65px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -65px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 1px -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-on { background-position: -96px -144px; } +.ui-icon-radio-off { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, +.ui-corner-top, +.ui-corner-left, +.ui-corner-tl { + border-top-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-top, +.ui-corner-right, +.ui-corner-tr { + border-top-right-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-left, +.ui-corner-bl { + border-bottom-left-radius: 4px; +} +.ui-corner-all, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-br { + border-bottom-right-radius: 4px; +} + +/* Overlays */ +.ui-widget-overlay { + background: #aaaaaa; + opacity: .3; + filter: Alpha(Opacity=30); /* support: IE8 */ +} +.ui-widget-shadow { + -webkit-box-shadow: -8px -8px 8px #aaaaaa; + box-shadow: -8px -8px 8px #aaaaaa; +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_breadcrumb.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_breadcrumb.scss new file mode 100644 index 0000000..513f587 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_breadcrumb.scss @@ -0,0 +1,22 @@ +@import "../../bootstrap/scss/breadcrumb"; + +.breadcrumb-navbar { + text-shadow: 0 1px 0 #000; + + .breadcrumb-item { + + .breadcrumb-comment { + padding-left: 0.5rem; + } + + a { + color: #fff; + } + } + + .breadcrumb-comment { + color: #d6d6d6; + font-weight: bold; + font-style: italic; + text-shadow: none; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_designer.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_designer.scss new file mode 100644 index 0000000..9348dc6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_designer.scss @@ -0,0 +1,497 @@ +$minus-img: '../img/designer/minus.png'; +$plus-img: '../img/designer/plus.png'; +$top-panel-img: '../img/designer/top_panel.png'; +$small-tab-img: '../img/designer/small_tab.png'; +$frams1-img: '../img/designer/1.png'; +$frams2-img: '../img/designer/2.png'; +$frams3-img: '../img/designer/3.png'; +$frams4-img: '../img/designer/4.png'; +$frams5-img: '../img/designer/5.png'; +$frams6-img: '../img/designer/6.png'; +$frams7-img: '../img/designer/7.png'; +$frams8-img: '../img/designer/8.png'; +$resize-img: '../img/designer/resize.png'; + +/* Designer */ +.input_tab { + background-color: #a6c7e1; + color: #000; +} + +.content_fullscreen { + position: relative; + overflow: auto; +} + +#canvas_outer { + position: relative; + width: 100%; + display: block; +} + +#canvas { + background-color: #fff; + color: #000; +} + +canvas.designer { + display: inline-block; + overflow: hidden; + text-align: left; + + * { + behavior: url(#default#VML); + } +} + +.designer_tab { + background-color: #fff; + color: #000; + border-collapse: collapse; + border: 1px solid #aaa; + z-index: 1; + user-select: none; + + .header { + background: linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%); + } +} + +.tab_zag { + text-align: center; + cursor: move; + padding: 1px; + font-weight: bold; +} + +.tab_zag_2 { + background: linear-gradient(#fffa96 0%, #fffa96 39%, #ffe796 40%, #ffe796 100%); + background-repeat: repeat-x; + text-align: center; + cursor: move; + padding: 1px; + font-weight: bold; +} + +.tab_field { + background: #fff; + color: #000; + cursor: default; + + &:hover { + background-color: #cfc; + color: #000; + background-repeat: repeat-x; + cursor: default; + } +} + +.tab_field_3 { + background-color: #ffe6e6 !important; + color: #000; + cursor: default; + + &:hover { + background-color: #cfc; + color: #000; + background-repeat: repeat-x; + cursor: default; + } +} + +#designer_hint { + white-space: nowrap; + position: absolute; + background-color: #9f9; + color: #000; + z-index: 3; + border: #0c6 solid 1px; + display: none; +} + +#designer_body #page_content { + margin: 0; +} + +.scroll_tab { + overflow: auto; + width: 100%; + height: 500px; +} + +.designer_Tabs { + cursor: default; + color: #05b; + white-space: nowrap; + text-decoration: none; + text-indent: 3px; + font-weight: bold; + margin-left: 2px; + text-align: left; + background: linear-gradient(#fff, #dfe5e7 70%, #fff 70%, #fff 100%); + border: #ccc solid 1px; + + &:hover { + cursor: default; + color: #05b; + background: #fe9; + text-indent: 3px; + font-weight: bold; + white-space: nowrap; + text-decoration: none; + border: #99f solid 1px; + text-align: left; + } +} + +.owner { + font-weight: normal; + color: #888; +} + +.option_tab { + padding-left: 2px; + padding-right: 2px; + width: 5px; +} + +.select_all { + vertical-align: top; + padding-left: 2px; + padding-right: 2px; + cursor: default; + width: 1px; + color: #000; + background: linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%); +} + +.small_tab { + vertical-align: top; + background-color: #0064ea; + color: #fff; + background-image: url($small-tab-img); + cursor: default; + text-align: center; + font-weight: bold; + padding-left: 2px; + padding-right: 2px; + width: 1px; + text-decoration: none; + + &:hover { + vertical-align: top; + color: #fff; + background-color: #f96; + cursor: default; + padding-left: 2px; + padding-right: 2px; + text-align: center; + font-weight: bold; + width: 1px; + text-decoration: none; + } +} + +.small_tab_pref { + background: linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%); + text-align: center; + width: 1px; + + &:hover { + vertical-align: top; + color: #fff; + background-color: #f96; + cursor: default; + text-align: center; + font-weight: bold; + width: 1px; + text-decoration: none; + } +} + +.butt { + border: #47a solid 1px; + font-weight: bold; + background-color: #fff; + color: #000; + vertical-align: baseline; +} + +.L_butt2_1 { + padding: 1px; + text-decoration: none; + vertical-align: middle; + cursor: default; + + &:hover { + padding: 0; + border: #09c solid 1px; + background: #fe9; + color: #000; + text-decoration: none; + vertical-align: middle; + cursor: default; + } +} + +/* --------------------------------------------------------------------------- */ +.bor { + width: 10px; + height: 10px; +} + +.frams1 { + background: url($frams1-img) no-repeat right bottom; +} + +.frams2 { + background: url($frams2-img) no-repeat left bottom; +} + +.frams3 { + background: url($frams3-img) no-repeat left top; +} + +.frams4 { + background: url($frams4-img) no-repeat right top; +} + +.frams5 { + background: url($frams5-img) repeat-x center bottom; +} + +.frams6 { + background: url($frams6-img) repeat-y left; +} + +.frams7 { + background: url($frams7-img) repeat-x top; +} + +.frams8 { + background: url($frams8-img) repeat-y right; +} + +#osn_tab { + position: absolute; + background-color: #fff; + color: #000; +} + +.designer_header { + background-color: #eaeef0; + color: #000; + text-align: center; + font-weight: bold; + margin: 0; + padding: 0; + background-image: url($top-panel-img); + background-position: top; + background-repeat: repeat-x; + border-right: #999 solid 1px; + border-left: #999 solid 1px; + height: 28px; + z-index: 101; + width: 100%; + position: fixed; + + a, + span { + display: block; + float: left; + margin: 3px 1px 4px; + height: 20px; + border: 1px dotted #fff; + } + + .M_bord { + display: block; + float: left; + margin: 4px; + height: 20px; + width: 2px; + } + + a { + &.first { + margin-right: 1em; + } + + &.last { + margin-left: 1em; + } + } +} + +a { + &.M_butt_Selected_down_IE, + &.M_butt_Selected_down { + border: 1px solid #c0c0bb; + background-color: #9f9; + color: #000; + + &:hover { + border: 1px solid #09c; + background-color: #fe9; + color: #000; + } + } + + &.M_butt:hover { + border: 1px solid #09c; + background-color: #fe9; + color: #000; + } +} + +#layer_menu { + z-index: 98; + position: relative; + float: right; + background-color: #eaeef0; + border: #999 solid 1px; +} + +#layer_upd_relation { + position: absolute; + left: 637px; + top: 224px; + z-index: 100; +} + +#layer_new_relation, +#designer_optionse { + position: absolute; + left: 636px; + top: 85px; + z-index: 100; + width: 153px; +} + +#layer_menu_sizer { + background-image: url($resize-img); + cursor: ew-resize; + + .icon { + margin: 0; + } +} + +.panel { + position: fixed; + top: 60px; + right: 0; + width: 350px; + max-height: 500px; + display: none; + overflow: auto; + padding-top: 34px; + z-index: 102; +} + +a { + &.trigger { + position: fixed; + text-decoration: none; + top: 60px; + right: 0; + color: #fff; + padding: 10px 40px 10px 15px; + background: #333 url($plus-img) 85% 55% no-repeat; + border: 1px solid #444; + display: block; + z-index: 102; + + &:hover { + color: #080808; + background: #fff696 url($plus-img) 85% 55% no-repeat; + border: 1px solid #999; + } + } + + &.active.trigger { + background: #222 url($minus-img) 85% 55% no-repeat; + z-index: 999; + + &:hover { + background: #fff696 url($minus-img) 85% 55% no-repeat; + } + } +} + +.toggle_container .block { + background-color: #dbe4e8; + border-top: 1px solid #999; +} + +.history_table { + text-align: center; + cursor: pointer; + background-color: #dbe4e8; + + &:hover { + background-color: #99c; + } +} + +#ab { + min-width: 300px; + + .ui-accordion-content { + padding: 0; + } +} + +#foreignkeychk { + text-align: left; + cursor: pointer; +} + +.side-menu { + float: left; + position: fixed; + width: auto; + height: auto; + background: #efefef; + border: 1px solid grey; + overflow: hidden; + z-index: 50; + padding: 2px; + + &.right { + float: right; + right: 0; + } + + .hide { + display: none; + } + + a { + display: block; + float: none; + overflow: hidden; + line-height: 1em; + } + + img, + .text { + float: left; + } +} + +#name-panel { + border-bottom: 1px solid grey; + text-align: center; + background: #efefef; + width: 100%; + font-size: 1.2em; + padding: 5px; + font-weight: bold; +} + +#container-form { + width: 100%; + position: absolute; + left: 0; +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_forms.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_forms.scss new file mode 100644 index 0000000..da3ffce --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_forms.scss @@ -0,0 +1,5 @@ +select#fieldsSelect, +textarea#sqlquery { + margin: 0; + height: 20rem; +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_jqplot.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_jqplot.scss new file mode 100644 index 0000000..f3d92f8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_jqplot.scss @@ -0,0 +1,275 @@ +/* jqPlot */ + +// rules for the plot target div. These will be cascaded down to all plot elements according to css rules +.jqplot-target { + position: relative; + color: #222; + font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; + font-size: 1em; +} + +// rules applied to all axes +.jqplot-axis { + font-size: 0.75em; +} + +.jqplot-xaxis { + margin-top: 10px; +} + +.jqplot-x2axis { + margin-bottom: 10px; +} + +.jqplot-yaxis { + margin-right: 10px; +} + +.jqplot-y2axis, +.jqplot-y3axis, +.jqplot-y4axis, +.jqplot-y5axis, +.jqplot-y6axis, +.jqplot-y7axis, +.jqplot-y8axis, +.jqplot-y9axis, +.jqplot-yMidAxis { + margin-left: 10px; + margin-right: 10px; +} + +// rules applied to all axis tick divs +.jqplot-axis-tick, +.jqplot-xaxis-tick, +.jqplot-yaxis-tick, +.jqplot-x2axis-tick, +.jqplot-y2axis-tick, +.jqplot-y3axis-tick, +.jqplot-y4axis-tick, +.jqplot-y5axis-tick, +.jqplot-y6axis-tick, +.jqplot-y7axis-tick, +.jqplot-y8axis-tick, +.jqplot-y9axis-tick, +.jqplot-yMidAxis-tick { + position: absolute; + white-space: pre; +} + +.jqplot-xaxis-tick { + top: 0; + // initial position untill tick is drawn in proper place + left: 15px; + vertical-align: top; +} + +.jqplot-x2axis-tick { + bottom: 0; + // initial position untill tick is drawn in proper place + left: 15px; + vertical-align: bottom; +} + +.jqplot-yaxis-tick { + right: 0; + // initial position untill tick is drawn in proper place + top: 15px; + text-align: right; + + &.jqplot-breakTick { + right: -20px; + margin-right: 0; + padding: 1px 5px 1px; + z-index: 2; + font-size: 1.5em; + } +} + +.jqplot-y2axis-tick, +.jqplot-y3axis-tick, +.jqplot-y4axis-tick, +.jqplot-y5axis-tick, +.jqplot-y6axis-tick, +.jqplot-y7axis-tick, +.jqplot-y8axis-tick, +.jqplot-y9axis-tick { + left: 0; + // initial position untill tick is drawn in proper place + top: 15px; + text-align: left; +} + +.jqplot-yMidAxis-tick { + text-align: center; + white-space: nowrap; +} + +.jqplot-xaxis-label { + margin-top: 10px; + font-size: 11pt; + position: absolute; +} + +.jqplot-x2axis-label { + margin-bottom: 10px; + font-size: 11pt; + position: absolute; +} + +.jqplot-yaxis-label { + margin-right: 10px; + font-size: 11pt; + position: absolute; +} + +.jqplot-yMidAxis-label { + font-size: 11pt; + position: absolute; +} + +.jqplot-y2axis-label, +.jqplot-y3axis-label, +.jqplot-y4axis-label, +.jqplot-y5axis-label, +.jqplot-y6axis-label, +.jqplot-y7axis-label, +.jqplot-y8axis-label, +.jqplot-y9axis-label { + font-size: 11pt; + margin-left: 10px; + position: absolute; +} + +.jqplot-meterGauge-tick { + font-size: 0.75em; + color: #999; +} + +.jqplot-meterGauge-label { + font-size: 1em; + color: #999; +} + +table { + &.jqplot-table-legend { + margin-top: 12px; + margin-bottom: 12px; + margin-left: 12px; + margin-right: 12px; + background-color: rgba(255, 255, 255, 0.6); + border: 1px solid #ccc; + position: absolute; + font-size: 0.75em; + } + + &.jqplot-cursor-legend { + background-color: rgba(255, 255, 255, 0.6); + border: 1px solid #ccc; + position: absolute; + font-size: 0.75em; + } +} + +td { + &.jqplot-table-legend { + vertical-align: middle; + } + + &.jqplot-seriesToggle { + &:hover, + &:active { + cursor: pointer; + } + } +} + +.jqplot-table-legend .jqplot-series-hidden { + text-decoration: line-through; +} + +div { + &.jqplot-table-legend-swatch-outline { + border: 1px solid #ccc; + padding: 1px; + } + + &.jqplot-table-legend-swatch { + width: 0; + height: 0; + border-top-width: 5px; + border-bottom-width: 5px; + border-left-width: 6px; + border-right-width: 6px; + border-top-style: solid; + border-bottom-style: solid; + border-left-style: solid; + border-right-style: solid; + } +} + +.jqplot-title { + top: 0; + left: 0; + padding-bottom: 0.5em; + font-size: 1.2em; +} + +table.jqplot-cursor-tooltip { + border: 1px solid #ccc; + font-size: 0.75em; +} + +.jqplot-cursor-tooltip, +.jqplot-highlighter-tooltip, +.jqplot-canvasOverlay-tooltip { + border: 1px solid #ccc; + font-size: 1em; + white-space: nowrap; + background: rgba(208, 208, 208, 0.8); + padding: 1px; +} + +.jqplot-point-label { + font-size: 0.75em; + z-index: 2; +} + +td.jqplot-cursor-legend-swatch { + vertical-align: middle; + text-align: center; +} + +div.jqplot-cursor-legend-swatch { + width: 1.2em; + height: 0.7em; +} + +.jqplot-error { + // Styles added to the plot target container when there is an error go here. + text-align: center; +} + +.jqplot-error-message { + // Styling of the custom error message div goes here. + position: relative; + top: 46%; + display: inline-block; +} + +div { + &.jqplot-bubble-label { + font-size: 0.8em; + padding-left: 2px; + padding-right: 2px; + color: rgb(20%, 20%, 20%); + + &.jqplot-bubble-label-highlight { + background: rgba(90%, 90%, 90%, 0.7); + } + } + + &.jqplot-noData-container { + text-align: center; + background-color: rgba(96%, 96%, 96%, 0.3); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_modal.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_modal.scss new file mode 100644 index 0000000..2d6d99a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_modal.scss @@ -0,0 +1,3 @@ +.modal-header { + background-image: linear-gradient(#f8f8f8, #d8d8d8); +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_navigation.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_navigation.scss new file mode 100644 index 0000000..be107c7 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_navigation.scss @@ -0,0 +1,463 @@ +// Navigation styles for the pmahomme theme +#pma_navigation { + width: $navi-width; + position: fixed; + top: 0; + left: 0; + height: 100vh; + background: linear-gradient(to right, $navi-background, $navi-right-gradient); + color: $navi-color; + z-index: 800; + + ul { + margin: 0; + } + + form { + margin: 0; + padding: 0; + display: inline; + } + + select { + &#select_server, + &#lightm_db { + width: 100%; + } + } + + div { + &.pageselector { + text-align: center; + margin: 0; + margin-left: 0.75em; + border-left: 1px solid #666; + } + } + + #pmalogo, + #serverChoice, + #navipanellinks, + #recentTableList, + #favoriteTableList, + #databaseList, + div.pageselector.dbselector { + text-align: center; + padding: 5px 10px 0; + border: 0; + } + + #navipanellinks .icon { + margin: 0; + } + + #recentTable, + #favoriteTable { + width: 200px; + } + + #favoriteTableList select, + #serverChoice select { + width: 80%; + } +} + +#pma_navigation_header { + overflow: hidden; +} + +#pma_navigation_content { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: 0; + + > img.throbber { + display: none; + margin: 0.3em auto 0; + } +} + +#pma_navigation_select_database { + text-align: left; + padding: 0 0 0; + border: 0; + margin: 0; +} + +#pma_navigation_db_select { + margin-top: 0.5em; + margin-left: 0.75em; + + select { + background: linear-gradient(#fff, #f1f1f1, #fff); + -webkit-border-radius: 2px; + border-radius: 2px; + border: 1px solid #bbb; + border-top: 1px solid #bbb; + color: #333; + padding: 4px 6px; + margin: 0 0 0; + width: 92%; + font-size: 1.11em; + } +} + +#pma_navigation_tree_content { + width: 100%; + overflow: hidden; + overflow-y: auto; + position: absolute; + height: 100%; + + a.hover_show_full { + position: relative; + z-index: 100; + vertical-align: sub; + } +} + +#pma_navigation_tree { + margin: 0; + margin-left: 5px; + overflow: hidden; + color: #444; + height: 74%; + position: relative; + + a { + color: $navi-color; + padding-left: 0; + + &:hover { + text-decoration: underline; + } + } + + ul { + clear: both; + padding: 0; + list-style-type: none; + margin: 0; + + ul { + position: relative; + } + } + + li { + margin-bottom: 0; + + &.activePointer, + &.selected { + color: $navi-pointer-color; + background-color: $navi-pointer-background; + } + + .dbItemControls { + padding-right: 4px; + float: right; + } + + .navItemControls { + display: none; + padding-right: 4px; + float: right; + } + + &.activePointer .navItemControls { + display: block; + opacity: 0.5; + + &:hover { + opacity: 1; + } + } + } + + li { + white-space: nowrap; + clear: both; + min-height: 16px; + + &.fast_filter { + white-space: nowrap; + clear: both; + min-height: 16px; + } + } + + img { + margin: 0; + } + + i { + display: block; + } + + div { + &.block { + position: relative; + width: 1.5em; + height: 1.5em; + min-width: 16px; + min-height: 16px; + float: left; + + &.double { + width: 2.5em; + } + + i, + b { + width: 1.5em; + height: 1.7em; + min-width: 16px; + min-height: 8px; + position: absolute; + bottom: 0.7em; + left: 0.75em; + z-index: 0; + } + + // Top and right segments for the tree element connections + i { + display: block; + border-left: 1px solid #666; + border-bottom: 1px solid #666; + position: relative; + z-index: 0; + + // Removes top segment + &.first { + border-left: 0; + } + } + + // Bottom segment for the tree element connections + b { + display: block; + height: 0.75em; + bottom: 0; + left: 0.75em; + border-left: 1px solid #666; + } + + a, + u { + position: absolute; + left: 50%; + top: 50%; + z-index: 10; + } + + a + a { + left: 100%; + } + + &.double { + a, + u { + left: 33%; + } + + a + a { + left: 85%; + } + } + + img { + position: relative; + top: -0.6em; + left: 0; + margin-left: -7px; + } + } + + &.throbber img { + top: 2px; + left: 2px; + } + } + + li { + &.last > ul { + background: none; + } + + > { + a, + i { + line-height: 1.5em; + height: 1.5em; + padding-left: 0.3em; + } + } + } + + .list_container { + border-left: 1px solid #666; + margin-left: 0.75em; + padding-left: 0.75em; + + li.last.database { + // Revert the effect of the rule that is applied on all the tree + margin-bottom: 0 !important; + } + } + + .last > .list_container { + border-left: 0 solid #666; + } +} + +// Fast filter +li.fast_filter { + padding-left: 0.75em; + margin-left: 0.75em; + padding-right: 35px; + border-left: 1px solid #666; + list-style: none; + + input { + font-size: 0.7em; + } + + .searchClauseClear { + border: 0; + font-weight: bold; + color: #800; + font-size: 0.7em; + } + + .searchClauseClear:hover { + background-color: transparent; + border-color: transparent; + } + + &.db_fast_filter { + border: 0; + margin-left: 0; + } +} + +#navigation_controls_outer { + min-height: 21px !important; + + &.activePointer { + background-color: transparent !important; + } +} + +#navigation_controls { + float: right; + padding-right: 23px; +} + +// Resize handler +#pma_navigation_resizer { + width: 3px; + height: 100%; + background-color: #aaa; + cursor: col-resize; + position: fixed; + top: 0; + left: 240px; + z-index: 801; +} + +#pma_navigation_collapser { + width: 20px; + height: 22px; + line-height: 22px; + background: #eee; + color: #555; + font-weight: bold; + position: fixed; + top: 0; + left: $navi-width; + text-align: center; + cursor: pointer; + z-index: 800; + text-shadow: 0 1px 0 #fff; + filter: dropshadow(color = #fff, offx = 0, offy = 1); + border: 1px solid #888; +} + +// Quick warp links +.pma_quick_warp { + margin-top: 5px; + margin-left: 2px; + position: relative; + + .drop_list { + float: left; + margin-left: 3px; + padding: 2px 0; + + &:hover { + .drop_button { + background: #fff; + } + + ul { + display: block; + } + } + + ul { + position: absolute; + margin: 0; + padding: 0; + overflow: hidden; + overflow-y: auto; + list-style: none; + background: #fff; + border: 1px solid #ddd; + border-radius: 0.3em; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + box-shadow: 0 0 5px #ccc; + top: 100%; + left: 3px; + right: 0; + display: none; + z-index: 802; + } + + li { + white-space: nowrap; + padding: 0; + border-radius: 0; + + img { + vertical-align: sub; + } + + &:hover { + background: #f2f2f2; + } + } + + a { + display: block; + padding: 0.2em 0.3em; + + &.favorite_table_anchor { + clear: left; + float: left; + padding: 0.1em 0.3em 0; + } + } + } + + .drop_button { + padding: 0.3em; + border: 1px solid #ddd; + border-radius: 0.3em; + background: #f2f2f2; + cursor: pointer; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_variables.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_variables.scss new file mode 100644 index 0000000..0df06fe --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_variables.scss @@ -0,0 +1,177 @@ +// configures general layout for detailed layout configuration please refer to the css files + +// navi frame + +// navi frame width +$navi-width: 240px; + +// foreground (text) color for the navi frame +$navi-color: #000; + +// background for the navi frame +$navi-background: #f3f3f3; +$navi-right-gradient: #dadcde; + +// foreground (text) color of the pointer in navi frame +$navi-pointer-color: #000; + +// background of the pointer in navi frame +$navi-pointer-background: #ddd; + +// main frame + +// foreground (text) color for the main frame +$main-color: #444; + +// foreground (text) color of the pointer in browse mode +$browse-pointer-color: #000; + +// background of the pointer in browse mode +$browse-pointer-background: #cfc; + +// foreground (text) color of the marker (visually marks row by clicking on it) +// in browse mode +$browse-marker-color: #000; + +// background of the marker (visually marks row by clicking on it) in browse mode +$browse-marker-background: #fc9; + +// tables + +// border +$border: 0; +// table header and footer color +$th-background: #d3dce3; +// table header and footer background +$th-color: #000; +// table data row background +$bg-one: #e5e5e5; +// table data row background, alternate +$bg-two: #d5d5d5; + +// Bootstrap +// --------- + +// Body + +$body-color: $main-color; + +// Links + +$link-color: #235a81; +$link-decoration: none; +$link-hover-color: #235a81; +$link-hover-decoration: underline; + +// Typography + +$font-family-base: sans-serif; +$font-family-monospace: monospace; + +$font-size-base: 0.82rem; + +$h1-font-size: 140%; +$h2-font-size: 2em; +$h3-font-size: 1rem; + +// Tables + +$table-cell-padding: 0.1em 0.3em; +$table-cell-padding-sm: $table-cell-padding; +$table-head-bg: #fff; +$table-head-color: $th-color; +$table-striped-order: even; +$table-hover-color: $browse-pointer-color; +$table-border-color: #fff; +$table-border-width: 0; + +// Buttons + +$enable-gradients: true; +$enable-shadows: true; +$enable-transitions: false; + +$primary: #ddd; +$secondary: #ddd; + +$btn-border-radius: 0.85rem; +$btn-line-height: 1.15; + +// Dropdowns + +$dropdown-padding-y: 0; +$dropdown-item-padding-y: 0; +$dropdown-item-padding-x: 0; + +// Forms + +$form-check-input-margin-y: 0.1rem; +$form-check-input-checked-bg-color: #0075ff; + +// Navs + +$nav-tabs-border-color: #aaa; +$nav-tabs-link-active-border-color: #aaa #aaa #fff; +$nav-tabs-link-hover-border-color: $bg-two $bg-two #aaa; +$nav-tabs-link-active-color: #000; + +// Navbar + +$enable-caret: false; +$navbar-padding-y: 0; +$navbar-padding-x: 0; +$navbar-light-color: #235a81; +$navbar-light-hover-color: #235a81; +$navbar-light-active-color: #235a81; +$navbar-light-disabled-color: #235a81; + +// Pagination + +$pagination-active-color: #235a81; +$pagination-border-color: #aaa; +$pagination-hover-border-color: #aaa; +$pagination-active-border-color: #aaa; +$pagination-disabled-border-color: #aaa; + +// Card + +$card-border-color: #aaa; +$card-bg: #eee; +$card-cap-bg: #fff; + +// Accordion + +$accordion-button-padding-y: 0.375rem; +$accordion-button-padding-x: 0.75rem; +$accordion-button-active-color: #235a81; +$accordion-button-active-bg: $navi-background; + +// Breadcrumbs + +$breadcrumb-navbar-padding-y: 0.1rem; +$breadcrumb-navbar-padding-x: 2.2em; +$breadcrumb-navbar-margin-bottom: 0; +$breadcrumb-navbar-bg: #888; +$breadcrumb-divider-color: #fff; +$breadcrumb-divider: quote("»"); + +// Modals + +$modal-inner-padding: 0.75rem; +$modal-footer-margin-between: 0.1rem; +$modal-header-padding-y: 0.4rem; + +// Alert + +$alert-margin-bottom: 0.5em; +$alert-border-radius: 5px; + +// List group + +$list-group-bg: inherit; +$list-group-item-padding-x: 0.75rem; +$list-group-item-padding-y: 0.375rem; + +// Forms + +$label-margin-bottom: 0; diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/0b/0bcbee1e66d755177eefc8651966f2f3.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/0b/0bcbee1e66d755177eefc8651966f2f3.php new file mode 100644 index 0000000..f7e1769 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/0b/0bcbee1e66d755177eefc8651966f2f3.php @@ -0,0 +1,83 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + if ((twig_get_attribute($this->env, $this->source, ($context["comments_map"] ?? null), ($context["table_name"] ?? null), [], "array", true, true, false, 1) && twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, // line 2 +($context["comments_map"] ?? null), ($context["table_name"] ?? null), [], "array", false, true, false, 2), ($context["column_name"] ?? null), [], "array", true, true, false, 2))) { + // line 3 + echo "
        env, (($__internal_compile_0 = (($__internal_compile_1 = ($context["comments_map"] ?? null)) && is_array($__internal_compile_1) || $__internal_compile_1 instanceof ArrayAccess ? ($__internal_compile_1[($context["table_name"] ?? null)] ?? null) : null)) && is_array($__internal_compile_0) || $__internal_compile_0 instanceof ArrayAccess ? ($__internal_compile_0[($context["column_name"] ?? null)] ?? null) : null), "html", null, true); + echo "\"> + "; + // line 4 + if ((twig_length_filter($this->env, (($__internal_compile_2 = (($__internal_compile_3 = ($context["comments_map"] ?? null)) && is_array($__internal_compile_3) || $__internal_compile_3 instanceof ArrayAccess ? ($__internal_compile_3[($context["table_name"] ?? null)] ?? null) : null)) && is_array($__internal_compile_2) || $__internal_compile_2 instanceof ArrayAccess ? ($__internal_compile_2[($context["column_name"] ?? null)] ?? null) : null)) > ($context["limit_chars"] ?? null))) { + // line 5 + echo " "; + echo twig_escape_filter($this->env, twig_slice($this->env, (($__internal_compile_4 = (($__internal_compile_5 = ($context["comments_map"] ?? null)) && is_array($__internal_compile_5) || $__internal_compile_5 instanceof ArrayAccess ? ($__internal_compile_5[($context["table_name"] ?? null)] ?? null) : null)) && is_array($__internal_compile_4) || $__internal_compile_4 instanceof ArrayAccess ? ($__internal_compile_4[($context["column_name"] ?? null)] ?? null) : null), 0, ($context["limit_chars"] ?? null)), "html", null, true); + echo "… + "; + } else { + // line 7 + echo " "; + echo twig_escape_filter($this->env, (($__internal_compile_6 = (($__internal_compile_7 = ($context["comments_map"] ?? null)) && is_array($__internal_compile_7) || $__internal_compile_7 instanceof ArrayAccess ? ($__internal_compile_7[($context["table_name"] ?? null)] ?? null) : null)) && is_array($__internal_compile_6) || $__internal_compile_6 instanceof ArrayAccess ? ($__internal_compile_6[($context["column_name"] ?? null)] ?? null) : null), "html", null, true); + echo " + "; + } + // line 9 + echo " +"; + } + } + + public function getTemplateName() + { + return "display/results/comment_for_row.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 59 => 9, 53 => 7, 47 => 5, 45 => 4, 40 => 3, 38 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "display/results/comment_for_row.twig", "C:\\xampp\\phpMyAdmin\\templates\\display\\results\\comment_for_row.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/15/156fd6d20ca5599b0aedac6af12c13cb.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/15/156fd6d20ca5599b0aedac6af12c13cb.php new file mode 100644 index 0000000..0572281 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/15/156fd6d20ca5599b0aedac6af12c13cb.php @@ -0,0 +1,294 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo " + + + + "; + // line 5 + ob_start(function () { return ''; }); +echo _ngettext("%s table", "%s tables", abs( // line 6 +($context["num_tables"] ?? null))); + $context["num_tables_trans"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); + // line 8 + echo " "; + echo twig_escape_filter($this->env, twig_sprintf(($context["num_tables_trans"] ?? null), PhpMyAdmin\Util::formatNumber(($context["num_tables"] ?? null), 0)), "html", null, true); + echo " + + "; + // line 10 + if (($context["server_replica_status"] ?? null)) { + // line 11 + echo " "; +echo _gettext("Replication"); + echo " + "; + } + // line 13 + echo " "; + $context["sum_colspan"] = ((($context["db_is_system_schema"] ?? null)) ? (4) : (7)); + // line 14 + echo " "; + if ((($context["num_favorite_tables"] ?? null) == 0)) { + // line 15 + echo " "; + $context["sum_colspan"] = (($context["sum_colspan"] ?? null) - 1); + // line 16 + echo " "; + } + // line 17 + echo " env, ($context["sum_colspan"] ?? null), "html", null, true); + echo "\" class=\"d-print-none\">"; +echo _gettext("Sum"); + echo " + "; + // line 18 + $context["row_count_sum"] = PhpMyAdmin\Util::formatNumber(($context["sum_entries"] ?? null), 0); + // line 19 + echo " "; + // line 20 + echo " "; + $context["row_sum_url"] = []; + // line 21 + echo " "; + if (array_key_exists("approx_rows", $context)) { + // line 22 + echo " "; + $context["row_sum_url"] = ["ajax_request" => true, "db" => // line 24 +($context["db"] ?? null), "real_row_count_all" => "true"]; + // line 27 + echo " "; + } + // line 28 + echo " "; + if (($context["approx_rows"] ?? null)) { + // line 29 + echo " "; + ob_start(function () { return ''; }); + // line 30 + echo "~"; + // line 31 + echo twig_escape_filter($this->env, ($context["row_count_sum"] ?? null), "html", null, true); + // line 32 + echo ""; + $context["cell_text"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); + // line 34 + echo " "; + } else { + // line 35 + echo " "; + $context["cell_text"] = ($context["row_count_sum"] ?? null); + // line 36 + echo " "; + } + // line 37 + echo " "; + echo twig_escape_filter($this->env, ($context["cell_text"] ?? null), "html", null, true); + echo " + "; + // line 38 + if ( !(($context["properties_num_columns"] ?? null) > 1)) { + // line 39 + echo " "; + // line 40 + echo " "; + $context["default_engine"] = twig_get_attribute($this->env, $this->source, ($context["dbi"] ?? null), "fetchValue", [0 => "SELECT @@storage_engine;"], "method", false, false, false, 40); + // line 41 + echo " "; + if (twig_test_empty(($context["default_engine"] ?? null))) { + // line 42 + echo " "; + // line 43 + echo " "; + $context["default_engine"] = twig_get_attribute($this->env, $this->source, ($context["dbi"] ?? null), "fetchValue", [0 => "SELECT @@default_storage_engine;"], "method", false, false, false, 43); + // line 44 + echo " "; + } + // line 45 + echo " + env, twig_sprintf(_gettext("%s is the default storage engine on this MySQL server."), ($context["default_engine"] ?? null)), "html", null, true); + echo "\"> + "; + // line 47 + echo twig_escape_filter($this->env, ($context["default_engine"] ?? null), "html", null, true); + echo " + + + + "; + // line 51 + if ( !twig_test_empty(($context["database_collation"] ?? null))) { + // line 52 + echo " env, twig_get_attribute($this->env, $this->source, ($context["database_collation"] ?? null), "description", [], "any", false, false, false, 52), "html", null, true); + echo " ("; +echo _gettext("Default"); + echo ")\"> + "; + // line 53 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_collation"] ?? null), "name", [], "any", false, false, false, 53), "html", null, true); + echo " + + "; + } + // line 56 + echo " + "; + } + // line 58 + echo " + "; + // line 59 + if (($context["is_show_stats"] ?? null)) { + // line 60 + echo " "; + $context["sum"] = PhpMyAdmin\Util::formatByteDown(($context["sum_size"] ?? null), 3, 1); + // line 61 + echo " "; + $context["sum_formatted"] = (($__internal_compile_0 = ($context["sum"] ?? null)) && is_array($__internal_compile_0) || $__internal_compile_0 instanceof ArrayAccess ? ($__internal_compile_0[0] ?? null) : null); + // line 62 + echo " "; + $context["sum_unit"] = (($__internal_compile_1 = ($context["sum"] ?? null)) && is_array($__internal_compile_1) || $__internal_compile_1 instanceof ArrayAccess ? ($__internal_compile_1[1] ?? null) : null); + // line 63 + echo " "; + echo twig_escape_filter($this->env, ($context["sum_formatted"] ?? null), "html", null, true); + echo " "; + echo twig_escape_filter($this->env, ($context["sum_unit"] ?? null), "html", null, true); + echo " + + "; + // line 65 + $context["overhead"] = PhpMyAdmin\Util::formatByteDown(($context["overhead_size"] ?? null), 3, 1); + // line 66 + echo " "; + $context["overhead_formatted"] = (($__internal_compile_2 = ($context["overhead"] ?? null)) && is_array($__internal_compile_2) || $__internal_compile_2 instanceof ArrayAccess ? ($__internal_compile_2[0] ?? null) : null); + // line 67 + echo " "; + $context["overhead_unit"] = (($__internal_compile_3 = ($context["overhead"] ?? null)) && is_array($__internal_compile_3) || $__internal_compile_3 instanceof ArrayAccess ? ($__internal_compile_3[1] ?? null) : null); + // line 68 + echo " "; + echo twig_escape_filter($this->env, ($context["overhead_formatted"] ?? null), "html", null, true); + echo " "; + echo twig_escape_filter($this->env, ($context["overhead_unit"] ?? null), "html", null, true); + echo " + "; + } + // line 70 + echo " + "; + // line 71 + if (($context["show_charset"] ?? null)) { + // line 72 + echo " "; + echo twig_escape_filter($this->env, ($context["database_charset"] ?? null), "html", null, true); + echo " + "; + } + // line 74 + echo " "; + if (($context["show_comment"] ?? null)) { + // line 75 + echo " + "; + } + // line 77 + echo " "; + if (($context["show_creation"] ?? null)) { + // line 78 + echo " + "; + // line 79 + echo twig_escape_filter($this->env, ($context["create_time_all"] ?? null), "html", null, true); + echo " + + "; + } + // line 82 + echo " "; + if (($context["show_last_update"] ?? null)) { + // line 83 + echo " + "; + // line 84 + echo twig_escape_filter($this->env, ($context["update_time_all"] ?? null), "html", null, true); + echo " + + "; + } + // line 87 + echo " "; + if (($context["show_last_check"] ?? null)) { + // line 88 + echo " + "; + // line 89 + echo twig_escape_filter($this->env, ($context["check_time_all"] ?? null), "html", null, true); + echo " + + "; + } + // line 92 + echo " + +"; + } + + public function getTemplateName() + { + return "database/structure/body_for_table_summary.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 270 => 92, 264 => 89, 261 => 88, 258 => 87, 252 => 84, 249 => 83, 246 => 82, 240 => 79, 237 => 78, 234 => 77, 230 => 75, 227 => 74, 221 => 72, 219 => 71, 216 => 70, 208 => 68, 205 => 67, 202 => 66, 200 => 65, 192 => 63, 189 => 62, 186 => 61, 183 => 60, 181 => 59, 178 => 58, 174 => 56, 168 => 53, 161 => 52, 159 => 51, 152 => 47, 148 => 46, 145 => 45, 142 => 44, 139 => 43, 137 => 42, 134 => 41, 131 => 40, 129 => 39, 127 => 38, 122 => 37, 119 => 36, 116 => 35, 113 => 34, 110 => 32, 108 => 31, 104 => 30, 101 => 29, 98 => 28, 95 => 27, 93 => 24, 91 => 22, 88 => 21, 85 => 20, 83 => 19, 81 => 18, 74 => 17, 71 => 16, 68 => 15, 65 => 14, 62 => 13, 56 => 11, 54 => 10, 48 => 8, 45 => 6, 43 => 5, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "database/structure/body_for_table_summary.twig", "C:\\xampp\\phpMyAdmin\\templates\\database\\structure\\body_for_table_summary.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/22/220b04883aa1be571bcd1ea00366d93d.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/22/220b04883aa1be571bcd1ea00366d93d.php new file mode 100644 index 0000000..ca17ddf --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/22/220b04883aa1be571bcd1ea00366d93d.php @@ -0,0 +1,99 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(($context["columns"] ?? null)); + foreach ($context['_seq'] as $context["_key"] => $context["column"]) { + // line 2 + echo " env, $this->source, $context["column"], "is_column_numeric", [], "any", false, false, false, 2)) ? (" text-end") : ("")); + echo ((twig_get_attribute($this->env, $this->source, $context["column"], "is_column_hidden", [], "any", false, false, false, 2)) ? (" hide") : ("")); + // line 3 + echo ((($context["is_sortable"] ?? null)) ? (" column_heading") : ("")); + echo (((($context["is_sortable"] ?? null) && twig_get_attribute($this->env, $this->source, $context["column"], "is_browse_marker_enabled", [], "any", false, false, false, 3))) ? (" marker") : ("")); + echo (((($context["is_sortable"] ?? null) && twig_get_attribute($this->env, $this->source, $context["column"], "is_browse_pointer_enabled", [], "any", false, false, false, 3))) ? (" pointer") : ("")); + // line 4 + echo ((( !($context["is_sortable"] ?? null) && twig_get_attribute($this->env, $this->source, $context["column"], "has_condition", [], "any", false, false, false, 4))) ? (" condition") : ("")); + echo "\" data-column=\""; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["column"], "column_name", [], "any", false, false, false, 4), "html", null, true); + echo "\"> + "; + // line 5 + if (($context["is_sortable"] ?? null)) { + // line 6 + echo " "; + echo twig_get_attribute($this->env, $this->source, $context["column"], "order_link", [], "any", false, false, false, 6); + echo " + "; + } else { + // line 8 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["column"], "column_name", [], "any", false, false, false, 8), "html", null, true); + echo " + "; + } + // line 10 + echo " "; + echo twig_get_attribute($this->env, $this->source, $context["column"], "comments", [], "any", false, false, false, 10); + echo " + +"; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['column'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + } + + public function getTemplateName() + { + return "display/results/table_headers_for_columns.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 69 => 10, 63 => 8, 57 => 6, 55 => 5, 49 => 4, 45 => 3, 41 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "display/results/table_headers_for_columns.twig", "C:\\xampp\\phpMyAdmin\\templates\\display\\results\\table_headers_for_columns.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/26/26578e154a0dc2df1ffe8e4fc27dd743.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/26/26578e154a0dc2df1ffe8e4fc27dd743.php new file mode 100644 index 0000000..9439a2b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/26/26578e154a0dc2df1ffe8e4fc27dd743.php @@ -0,0 +1,92 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "

        +
        + "; + // line 3 + echo ($context["hidden_inputs"] ?? null); + echo " + + + env, ($context["return_url"] ?? null), "html", null, true); + echo "\"> + "; +echo _gettext("Your browser has phpMyAdmin configuration for this domain. Would you like to import it for current session?"); + // line 10 + echo "
        + "; +echo _gettext("Yes"); + // line 11 + echo " + / "; +echo _gettext("No"); + // line 12 + echo " + / "; +echo _gettext("Delete settings"); + // line 13 + echo " +
        +
        +"; + } + + public function getTemplateName() + { + return "preferences/autoload.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 67 => 13, 63 => 12, 59 => 11, 55 => 10, 50 => 6, 44 => 3, 40 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "preferences/autoload.twig", "C:\\xampp\\phpMyAdmin\\templates\\preferences\\autoload.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/26/269ac5a202dc23f6c0a1e4a38cb7c094.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/26/269ac5a202dc23f6c0a1e4a38cb7c094.php new file mode 100644 index 0000000..3ebdc49 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/26/269ac5a202dc23f6c0a1e4a38cb7c094.php @@ -0,0 +1,212 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo " +env, ($context["lang"] ?? null), "html", null, true); + echo "\" dir=\""; + echo twig_escape_filter($this->env, ($context["text_dir"] ?? null), "html", null, true); + echo "\"> + + + + + + "; + // line 8 + if ( !($context["allow_third_party_framing"] ?? null)) { + // line 9 + echo ""; + } + // line 11 + echo " + + + env, ($context["theme_path"] ?? null), "html", null, true); + echo "/jquery/jquery-ui.css\"> + env, ($context["base_dir"] ?? null), "html", null, true); + echo "js/vendor/codemirror/lib/codemirror.css?"; + echo twig_escape_filter($this->env, ($context["version"] ?? null), "html", null, true); + echo "\"> + env, ($context["base_dir"] ?? null), "html", null, true); + echo "js/vendor/codemirror/addon/hint/show-hint.css?"; + echo twig_escape_filter($this->env, ($context["version"] ?? null), "html", null, true); + echo "\"> + env, ($context["base_dir"] ?? null), "html", null, true); + echo "js/vendor/codemirror/addon/lint/lint.css?"; + echo twig_escape_filter($this->env, ($context["version"] ?? null), "html", null, true); + echo "\"> + env, ($context["theme_path"] ?? null), "html", null, true); + echo "/css/theme"; + echo (((($context["text_dir"] ?? null) == "rtl")) ? (".rtl") : ("")); + echo ".css?"; + echo twig_escape_filter($this->env, ($context["version"] ?? null), "html", null, true); + echo "\"> + "; + // line 19 + echo twig_escape_filter($this->env, ($context["title"] ?? null), "html", null, true); + echo " + "; + // line 20 + echo ($context["scripts"] ?? null); + echo " + + +env, (" id=" . ($context["body_id"] ?? null)), "html", null, true))) : (print (""))); + echo "> + "; + // line 24 + echo ($context["navigation"] ?? null); + echo " + "; + // line 25 + echo ($context["custom_header"] ?? null); + echo " + "; + // line 26 + echo ($context["load_user_preferences"] ?? null); + echo " + + "; + // line 28 + if ( !($context["show_hint"] ?? null)) { + // line 29 + echo " + "; + } + // line 31 + echo " + "; + // line 32 + if (($context["is_warnings_enabled"] ?? null)) { + // line 33 + echo " + "; + } + // line 37 + echo " + "; + // line 38 + if ((($context["is_menu_enabled"] ?? null) && (($context["server"] ?? null) > 0))) { + // line 39 + echo " "; + echo ($context["menu"] ?? null); + echo " + + + + "; + // line 43 + echo PhpMyAdmin\Html\Generator::getImage("s_cog", _gettext("Page-related settings")); + echo " + + "; + // line 45 + echo PhpMyAdmin\Html\Generator::getImage("s_top", _gettext("Click on the bar to scroll to top of page")); + echo " + + "; + } + // line 48 + echo " + "; + // line 49 + echo ($context["console"] ?? null); + echo " + +
        + "; + // line 52 + echo ($context["messages"] ?? null); + echo " + + "; + // line 54 + echo ($context["recent_table"] ?? null); + echo " + "; + // line 55 + echo twig_include($this->env, $context, "modals/preview_sql_modal.twig"); + echo " + "; + // line 56 + echo twig_include($this->env, $context, "modals/enum_set_editor.twig"); + echo " + "; + // line 57 + echo twig_include($this->env, $context, "modals/create_view.twig"); + echo " +"; + } + + public function getTemplateName() + { + return "header.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 188 => 57, 184 => 56, 180 => 55, 176 => 54, 171 => 52, 165 => 49, 162 => 48, 156 => 45, 151 => 43, 143 => 39, 141 => 38, 138 => 37, 132 => 34, 129 => 33, 127 => 32, 124 => 31, 120 => 29, 118 => 28, 113 => 26, 109 => 25, 105 => 24, 101 => 23, 95 => 20, 91 => 19, 83 => 18, 77 => 17, 71 => 16, 65 => 15, 61 => 14, 56 => 11, 53 => 9, 51 => 8, 40 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "header.twig", "C:\\xampp\\phpMyAdmin\\templates\\header.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2ab50c07c679324bfe0210bb386f1b4e.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2ab50c07c679324bfe0210bb386f1b4e.php new file mode 100644 index 0000000..92671d8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2ab50c07c679324bfe0210bb386f1b4e.php @@ -0,0 +1,243 @@ +source = $this->getSourceContext(); + + $this->blocks = [ + 'content' => [$this, 'block_content'], + ]; + } + + protected function doGetParent(array $context) + { + // line 1 + return "server/status/base.twig"; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 2 + $context["active"] = "status"; + // line 1 + $this->parent = $this->loadTemplate("server/status/base.twig", "server/status/status/index.twig", 1); + $this->parent->display($context, array_merge($this->blocks, $blocks)); + } + + // line 3 + public function block_content($context, array $blocks = []) + { + $macros = $this->macros; + // line 4 + echo " +"; + // line 5 + if (($context["is_data_loaded"] ?? null)) { + // line 6 + echo "

        "; + echo twig_escape_filter($this->env, twig_sprintf(_gettext("Network traffic since startup: %s"), ($context["network_traffic"] ?? null)), "html", null, true); + echo "

        +

        "; + // line 7 + echo twig_escape_filter($this->env, twig_sprintf(_gettext("This MySQL server has been running for %1\$s. It started up on %2\$s."), ($context["uptime"] ?? null), ($context["start_time"] ?? null)), "html", null, true); + echo "

        + +
        + + + + + + + + + + + "; + // line 23 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(($context["traffic"] ?? null)); + foreach ($context['_seq'] as $context["_key"] => $context["each_traffic"]) { + // line 24 + echo " + + + + + "; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['each_traffic'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 30 + echo " +
        + "; +echo _gettext("Traffic"); + // line 15 + echo " "; + echo PhpMyAdmin\Html\Generator::showHint(_gettext("On a busy server, the byte counters may overrun, so those statistics as reported by the MySQL server may be incorrect.")); + echo " + #"; +echo _gettext("ø per hour"); + // line 18 + echo "
        "; + // line 25 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["each_traffic"], "name", [], "any", false, false, false, 25), "html", null, true); + echo ""; + // line 26 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["each_traffic"], "number", [], "any", false, false, false, 26), "html", null, true); + echo ""; + // line 27 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["each_traffic"], "per_hour", [], "any", false, false, false, 27), "html", null, true); + echo "
        + + + + + + + + + + + + + "; + // line 44 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(($context["connections"] ?? null)); + foreach ($context['_seq'] as $context["_key"] => $context["connection"]) { + // line 45 + echo " + + + + + + "; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['connection'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 52 + echo " +
        "; +echo _gettext("Connections"); + // line 36 + echo "#"; +echo _gettext("ø per hour"); + // line 38 + echo "%
        "; + // line 46 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["connection"], "name", [], "any", false, false, false, 46), "html", null, true); + echo ""; + // line 47 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["connection"], "number", [], "any", false, false, false, 47), "html", null, true); + echo ""; + // line 48 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["connection"], "per_hour", [], "any", false, false, false, 48), "html", null, true); + echo ""; + // line 49 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["connection"], "percentage", [], "any", false, false, false, 49), "html", null, true); + echo "
        +
        + + "; + // line 56 + if ((($context["is_primary"] ?? null) || ($context["is_replica"] ?? null))) { + // line 57 + echo "

        + "; + // line 58 + if ((($context["is_primary"] ?? null) && ($context["is_replica"] ?? null))) { + // line 59 + echo " "; +echo _gettext("This MySQL server works as primary and replica in replication process."); + // line 60 + echo " "; + } elseif (($context["is_primary"] ?? null)) { + // line 61 + echo " "; +echo _gettext("This MySQL server works as primary in replication process."); + // line 62 + echo " "; + } elseif (($context["is_replica"] ?? null)) { + // line 63 + echo " "; +echo _gettext("This MySQL server works as replica in replication process."); + // line 64 + echo " "; + } + // line 65 + echo "

        + +
        + +

        "; +echo _gettext("Replication status"); + // line 69 + echo "

        + + "; + // line 71 + echo ($context["replication"] ?? null); + echo " + "; + } + // line 73 + echo " +"; + } else { + // line 75 + echo " "; + echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("Not enough privilege to view server status.")]); + echo " +"; + } + // line 77 + echo " +"; + } + + public function getTemplateName() + { + return "server/status/status/index.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 220 => 77, 214 => 75, 210 => 73, 205 => 71, 201 => 69, 194 => 65, 191 => 64, 188 => 63, 185 => 62, 182 => 61, 179 => 60, 176 => 59, 174 => 58, 171 => 57, 169 => 56, 163 => 52, 154 => 49, 150 => 48, 146 => 47, 142 => 46, 139 => 45, 135 => 44, 127 => 38, 122 => 36, 113 => 30, 104 => 27, 100 => 26, 96 => 25, 93 => 24, 89 => 23, 82 => 18, 74 => 15, 63 => 7, 58 => 6, 56 => 5, 53 => 4, 49 => 3, 44 => 1, 42 => 2, 35 => 1,); + } + + public function getSourceContext() + { + return new Source("", "server/status/status/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\status\\status\\index.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2af2f76feaa582e62dc48d1b2407c504.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2af2f76feaa582e62dc48d1b2407c504.php new file mode 100644 index 0000000..6352102 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2af2f76feaa582e62dc48d1b2407c504.php @@ -0,0 +1,99 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
        env, ($context["parent_div_classes"] ?? null), "html", null, true); + echo "\"> + "; + // line 2 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(($context["content_array"] ?? null)); + foreach ($context['_seq'] as $context["_key"] => $context["content"]) { + // line 3 + echo " "; + if (array_key_exists("content", $context)) { + // line 4 + echo " env, (($__internal_compile_0 = $context["content"]) && is_array($__internal_compile_0) || $__internal_compile_0 instanceof ArrayAccess ? ($__internal_compile_0[0] ?? null) : null), "html", null, true); + echo "\"> + "; + // line 5 + echo twig_escape_filter($this->env, (($__internal_compile_1 = $context["content"]) && is_array($__internal_compile_1) || $__internal_compile_1 instanceof ArrayAccess ? ($__internal_compile_1[1] ?? null) : null), "html", null, true); + echo " + "; + // line 6 + if (twig_get_attribute($this->env, $this->source, $context["content"], "extraSpan", [], "array", true, true, false, 6)) { + // line 7 + echo " : "; + echo twig_escape_filter($this->env, (($__internal_compile_2 = $context["content"]) && is_array($__internal_compile_2) || $__internal_compile_2 instanceof ArrayAccess ? ($__internal_compile_2["extraSpan"] ?? null) : null), "html", null, true); + echo " + "; + } + // line 9 + echo " + "; + } + // line 11 + echo " "; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['content'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 12 + echo "
        +"; + } + + public function getTemplateName() + { + return "console/query_action.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 76 => 12, 70 => 11, 66 => 9, 60 => 7, 58 => 6, 54 => 5, 49 => 4, 46 => 3, 42 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "console/query_action.twig", "C:\\xampp\\phpMyAdmin\\templates\\console\\query_action.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/2d/2d4c4b72820f2074a6b15627c7661a83.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/2d/2d4c4b72820f2074a6b15627c7661a83.php new file mode 100644 index 0000000..63d830d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/2d/2d4c4b72820f2074a6b15627c7661a83.php @@ -0,0 +1,90 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
        +
        +
        +
        +
        "; +echo _gettext("Loading"); + // line 5 + echo "
        + +
        +
        + +
        
        +        
        +
        +
        + + +
        +
        +
        +
        +"; + } + + public function getTemplateName() + { + return "modals/preview_sql_confirmation.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 63 => 15, 59 => 14, 48 => 6, 44 => 5, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "modals/preview_sql_confirmation.twig", "C:\\xampp\\phpMyAdmin\\templates\\modals\\preview_sql_confirmation.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/35/353f61a45fe879514c449781542c6495.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/35/353f61a45fe879514c449781542c6495.php new file mode 100644 index 0000000..d5fa0ce --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/35/353f61a45fe879514c449781542c6495.php @@ -0,0 +1,67 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
        env, ($context["context"] ?? null), "html", null, true); + echo "\" role=\"alert\"> + "; + // line 2 + echo ($context["message"] ?? null); + echo " +
        +"; + } + + public function getTemplateName() + { + return "message.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 42 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "message.twig", "C:\\xampp\\phpMyAdmin\\templates\\message.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/4a/4a543b9337678ea9ce355445527b6e00.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/4a/4a543b9337678ea9ce355445527b6e00.php new file mode 100644 index 0000000..a391a11 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/4a/4a543b9337678ea9ce355445527b6e00.php @@ -0,0 +1,118 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + if (($context["allowed_to_send_error_reports"] ?? null)) { + // line 2 + echo "

        + "; +echo _gettext("This report automatically includes data about the error and information about relevant configuration settings. It will be sent to the phpMyAdmin team for debugging the error."); + // line 6 + echo "

        +
        +
        + + +
        + +
        + "; +echo _gettext("You may examine the data in the error report:"); + // line 19 + echo "
        ";
        +            echo twig_escape_filter($this->env, json_encode(($context["report_data"] ?? null), (twig_constant("JSON_PRETTY_PRINT") | twig_constant("JSON_UNESCAPED_SLASHES"))), "html", null, true);
        +            echo "
        +
        + +
        + + +
        + + "; + // line 29 + echo ($context["hidden_inputs"] ?? null); + echo " + "; + // line 30 + echo ($context["hidden_fields"] ?? null); + echo " +
        +"; + } else { + // line 33 + echo "
        +
        ";
        +            // line 34
        +            echo twig_escape_filter($this->env, json_encode(($context["report_data"] ?? null), (twig_constant("JSON_PRETTY_PRINT") | twig_constant("JSON_UNESCAPED_SLASHES"))), "html", null, true);
        +            echo "
        +
        +"; + } + } + + public function getTemplateName() + { + return "error/report_form.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 92 => 34, 89 => 33, 83 => 30, 79 => 29, 74 => 26, 63 => 19, 54 => 12, 46 => 7, 43 => 6, 39 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "error/report_form.twig", "C:\\xampp\\phpMyAdmin\\templates\\error\\report_form.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/53/53d8ffa9e99720fa10d62959fe772d31.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/53/53d8ffa9e99720fa10d62959fe772d31.php new file mode 100644 index 0000000..61802d9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/53/53d8ffa9e99720fa10d62959fe772d31.php @@ -0,0 +1,476 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
        +
        + "; +echo _gettext("Information"); + // line 3 + echo " + "; + // line 4 + if ((($__internal_compile_0 = ($context["showtable"] ?? null)) && is_array($__internal_compile_0) || $__internal_compile_0 instanceof ArrayAccess ? ($__internal_compile_0["TABLE_COMMENT"] ?? null) : null)) { + // line 5 + echo "

        + "; +echo _gettext("Table comments:"); + // line 6 + echo " + "; + // line 7 + echo twig_escape_filter($this->env, (($__internal_compile_1 = ($context["showtable"] ?? null)) && is_array($__internal_compile_1) || $__internal_compile_1 instanceof ArrayAccess ? ($__internal_compile_1["TABLE_COMMENT"] ?? null) : null), "html", null, true); + echo " +

        + "; + } + // line 10 + echo " + + "; + // line 12 + if (( !($context["tbl_is_view"] ?? null) && !($context["db_is_system_schema"] ?? null))) { + // line 13 + echo " + + + + + + + + + "; + // line 22 + if (array_key_exists("index_size", $context)) { + // line 23 + echo " + + + + + "; + } + // line 29 + echo " + "; + // line 30 + if (array_key_exists("free_size", $context)) { + // line 31 + echo " + + + + + + + + + + "; + } + // line 42 + echo " + "; + // line 43 + if ((array_key_exists("tot_size", $context) && (($context["mergetable"] ?? null) == false))) { + // line 44 + echo " + + + + + "; + } + // line 50 + echo " + + "; + // line 53 + echo " "; + if (((array_key_exists("free_size", $context) && (((( // line 54 +($context["tbl_storage_engine"] ?? null) == "MYISAM") || ( // line 55 +($context["tbl_storage_engine"] ?? null) == "ARIA")) || ( // line 56 +($context["tbl_storage_engine"] ?? null) == "MARIA")) || ( // line 57 +($context["tbl_storage_engine"] ?? null) == "BDB"))) || (( // line 58 +($context["tbl_storage_engine"] ?? null) == "INNODB") && (($context["innodb_file_per_table"] ?? null) == true)))) { + // line 59 + echo " + + + + + "; + } + // line 74 + echo "
        "; +echo _gettext("Space usage"); + // line 14 + echo "
        "; +echo _gettext("Data"); + // line 17 + echo ""; + // line 18 + echo twig_escape_filter($this->env, ($context["data_size"] ?? null), "html", null, true); + echo ""; + // line 19 + echo twig_escape_filter($this->env, ($context["data_unit"] ?? null), "html", null, true); + echo "
        "; +echo _gettext("Index"); + // line 24 + echo ""; + // line 25 + echo twig_escape_filter($this->env, ($context["index_size"] ?? null), "html", null, true); + echo ""; + // line 26 + echo twig_escape_filter($this->env, ($context["index_unit"] ?? null), "html", null, true); + echo "
        "; +echo _gettext("Overhead"); + // line 32 + echo ""; + // line 33 + echo twig_escape_filter($this->env, ($context["free_size"] ?? null), "html", null, true); + echo ""; + // line 34 + echo twig_escape_filter($this->env, ($context["free_unit"] ?? null), "html", null, true); + echo "
        "; +echo _gettext("Effective"); + // line 37 + echo ""; + // line 38 + echo twig_escape_filter($this->env, ($context["effect_size"] ?? null), "html", null, true); + echo ""; + // line 39 + echo twig_escape_filter($this->env, ($context["effect_unit"] ?? null), "html", null, true); + echo "
        "; +echo _gettext("Total"); + // line 45 + echo ""; + // line 46 + echo twig_escape_filter($this->env, ($context["tot_size"] ?? null), "html", null, true); + echo ""; + // line 47 + echo twig_escape_filter($this->env, ($context["tot_unit"] ?? null), "html", null, true); + echo "
        + // line 63 +($context["db"] ?? null), "table" => // line 64 +($context["table"] ?? null), "sql_query" => ("OPTIMIZE TABLE " . PhpMyAdmin\Util::backquote( // line 65 +($context["table"] ?? null))), "pos" => 0]); + // line 67 + echo "\"> + "; + // line 68 + echo PhpMyAdmin\Html\Generator::getIcon("b_tbloptimize", _gettext("Optimize table")); + echo " + +
        + "; + } + // line 76 + echo " + "; + // line 77 + $context["avg_size"] = ((array_key_exists("avg_size", $context)) ? (($context["avg_size"] ?? null)) : (null)); + // line 78 + echo " "; + $context["avg_unit"] = ((array_key_exists("avg_unit", $context)) ? (($context["avg_unit"] ?? null)) : (null)); + // line 79 + echo " + + + "; + // line 82 + if (twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Row_format", [], "array", true, true, false, 82)) { + // line 83 + echo " + + "; + // line 85 + if (((($__internal_compile_2 = ($context["showtable"] ?? null)) && is_array($__internal_compile_2) || $__internal_compile_2 instanceof ArrayAccess ? ($__internal_compile_2["Row_format"] ?? null) : null) == "Fixed")) { + // line 86 + echo " + "; + } elseif (((($__internal_compile_3 = // line 87 +($context["showtable"] ?? null)) && is_array($__internal_compile_3) || $__internal_compile_3 instanceof ArrayAccess ? ($__internal_compile_3["Row_format"] ?? null) : null) == "Dynamic")) { + // line 88 + echo " + "; + } else { + // line 90 + echo " + "; + } + // line 92 + echo " + "; + } + // line 94 + echo " + "; + // line 95 + if ( !twig_test_empty((($__internal_compile_5 = ($context["showtable"] ?? null)) && is_array($__internal_compile_5) || $__internal_compile_5 instanceof ArrayAccess ? ($__internal_compile_5["Create_options"] ?? null) : null))) { + // line 96 + echo " + + "; + // line 98 + if (((($__internal_compile_6 = ($context["showtable"] ?? null)) && is_array($__internal_compile_6) || $__internal_compile_6 instanceof ArrayAccess ? ($__internal_compile_6["Create_options"] ?? null) : null) == "partitioned")) { + // line 99 + echo " + "; + } else { + // line 101 + echo " + "; + } + // line 103 + echo " + "; + } + // line 105 + echo " + "; + // line 106 + if ( !twig_test_empty(($context["table_collation"] ?? null))) { + // line 107 + echo " + + + + "; + } + // line 116 + echo " + "; + // line 117 + if (( !($context["is_innodb"] ?? null) && twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Rows", [], "array", true, true, false, 117))) { + // line 118 + echo " + + + + "; + } + // line 123 + echo " + "; + // line 124 + if ((( !($context["is_innodb"] ?? null) && twig_get_attribute($this->env, $this->source, // line 125 +($context["showtable"] ?? null), "Avg_row_length", [], "array", true, true, false, 125)) && ((($__internal_compile_9 = // line 126 +($context["showtable"] ?? null)) && is_array($__internal_compile_9) || $__internal_compile_9 instanceof ArrayAccess ? ($__internal_compile_9["Avg_row_length"] ?? null) : null) > 0))) { + // line 127 + echo " + + "; + // line 129 + $context["avg_row_length"] = PhpMyAdmin\Util::formatByteDown((($__internal_compile_10 = ($context["showtable"] ?? null)) && is_array($__internal_compile_10) || $__internal_compile_10 instanceof ArrayAccess ? ($__internal_compile_10["Avg_row_length"] ?? null) : null), 6, 1); + // line 130 + echo " + + "; + } + // line 133 + echo " + "; + // line 134 + if ((((( !($context["is_innodb"] ?? null) && twig_get_attribute($this->env, $this->source, // line 135 +($context["showtable"] ?? null), "Data_length", [], "array", true, true, false, 135)) && twig_get_attribute($this->env, $this->source, // line 136 +($context["showtable"] ?? null), "Rows", [], "array", true, true, false, 136)) && ((($__internal_compile_13 = // line 137 +($context["showtable"] ?? null)) && is_array($__internal_compile_13) || $__internal_compile_13 instanceof ArrayAccess ? ($__internal_compile_13["Rows"] ?? null) : null) > 0)) && ( // line 138 +($context["mergetable"] ?? null) == false))) { + // line 139 + echo " + + + + "; + } + // line 144 + echo " + "; + // line 145 + if (twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Auto_increment", [], "array", true, true, false, 145)) { + // line 146 + echo " + + + + "; + } + // line 151 + echo " + "; + // line 152 + if (twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Create_time", [], "array", true, true, false, 152)) { + // line 153 + echo " + + + + "; + } + // line 158 + echo " + "; + // line 159 + if (twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Update_time", [], "array", true, true, false, 159)) { + // line 160 + echo " + + + + "; + } + // line 165 + echo " + "; + // line 166 + if (twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Check_time", [], "array", true, true, false, 166)) { + // line 167 + echo " + + + + "; + } + // line 172 + echo " +
        "; +echo _gettext("Row statistics"); + // line 80 + echo "
        "; +echo _gettext("Format"); + // line 84 + echo ""; +echo _gettext("static"); + echo ""; +echo _gettext("dynamic"); + echo ""; + echo twig_escape_filter($this->env, (($__internal_compile_4 = ($context["showtable"] ?? null)) && is_array($__internal_compile_4) || $__internal_compile_4 instanceof ArrayAccess ? ($__internal_compile_4["Row_format"] ?? null) : null), "html", null, true); + echo "
        "; +echo _gettext("Options"); + // line 97 + echo ""; +echo _gettext("partitioned"); + echo ""; + echo twig_escape_filter($this->env, (($__internal_compile_7 = ($context["showtable"] ?? null)) && is_array($__internal_compile_7) || $__internal_compile_7 instanceof ArrayAccess ? ($__internal_compile_7["Create_options"] ?? null) : null), "html", null, true); + echo "
        "; +echo _gettext("Collation"); + // line 108 + echo " + env, twig_get_attribute($this->env, $this->source, ($context["table_collation"] ?? null), "description", [], "any", false, false, false, 110), "html", null, true); + echo "\"> + "; + // line 111 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["table_collation"] ?? null), "name", [], "any", false, false, false, 111), "html", null, true); + echo " + +
        "; +echo _gettext("Rows"); + // line 119 + echo ""; + // line 120 + echo twig_escape_filter($this->env, PhpMyAdmin\Util::formatNumber((($__internal_compile_8 = ($context["showtable"] ?? null)) && is_array($__internal_compile_8) || $__internal_compile_8 instanceof ArrayAccess ? ($__internal_compile_8["Rows"] ?? null) : null), 0), "html", null, true); + echo "
        "; +echo _gettext("Row length"); + // line 128 + echo ""; + echo twig_escape_filter($this->env, (($__internal_compile_11 = ($context["avg_row_length"] ?? null)) && is_array($__internal_compile_11) || $__internal_compile_11 instanceof ArrayAccess ? ($__internal_compile_11[0] ?? null) : null), "html", null, true); + echo " "; + echo twig_escape_filter($this->env, (($__internal_compile_12 = ($context["avg_row_length"] ?? null)) && is_array($__internal_compile_12) || $__internal_compile_12 instanceof ArrayAccess ? ($__internal_compile_12[1] ?? null) : null), "html", null, true); + echo "
        "; +echo _gettext("Row size"); + // line 140 + echo ""; + // line 141 + echo twig_escape_filter($this->env, ($context["avg_size"] ?? null), "html", null, true); + echo " "; + echo twig_escape_filter($this->env, ($context["avg_unit"] ?? null), "html", null, true); + echo "
        "; +echo _gettext("Next autoindex"); + // line 147 + echo ""; + // line 148 + echo twig_escape_filter($this->env, PhpMyAdmin\Util::formatNumber((($__internal_compile_14 = ($context["showtable"] ?? null)) && is_array($__internal_compile_14) || $__internal_compile_14 instanceof ArrayAccess ? ($__internal_compile_14["Auto_increment"] ?? null) : null), 0), "html", null, true); + echo "
        "; +echo _gettext("Creation"); + // line 154 + echo ""; + // line 155 + echo twig_escape_filter($this->env, PhpMyAdmin\Util::localisedDate(twig_date_format_filter($this->env, (($__internal_compile_15 = ($context["showtable"] ?? null)) && is_array($__internal_compile_15) || $__internal_compile_15 instanceof ArrayAccess ? ($__internal_compile_15["Create_time"] ?? null) : null), "U")), "html", null, true); + echo "
        "; +echo _gettext("Last update"); + // line 161 + echo ""; + // line 162 + echo twig_escape_filter($this->env, PhpMyAdmin\Util::localisedDate(twig_date_format_filter($this->env, (($__internal_compile_16 = ($context["showtable"] ?? null)) && is_array($__internal_compile_16) || $__internal_compile_16 instanceof ArrayAccess ? ($__internal_compile_16["Update_time"] ?? null) : null), "U")), "html", null, true); + echo "
        "; +echo _gettext("Last check"); + // line 168 + echo ""; + // line 169 + echo twig_escape_filter($this->env, PhpMyAdmin\Util::localisedDate(twig_date_format_filter($this->env, (($__internal_compile_17 = ($context["showtable"] ?? null)) && is_array($__internal_compile_17) || $__internal_compile_17 instanceof ArrayAccess ? ($__internal_compile_17["Check_time"] ?? null) : null), "U")), "html", null, true); + echo "
        +
        +
        +"; + } + + public function getTemplateName() + { + return "table/structure/display_table_stats.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 450 => 172, 444 => 169, 441 => 168, 437 => 167, 435 => 166, 432 => 165, 426 => 162, 423 => 161, 419 => 160, 417 => 159, 414 => 158, 408 => 155, 405 => 154, 401 => 153, 399 => 152, 396 => 151, 390 => 148, 387 => 147, 383 => 146, 381 => 145, 378 => 144, 370 => 141, 367 => 140, 363 => 139, 361 => 138, 360 => 137, 359 => 136, 358 => 135, 357 => 134, 354 => 133, 345 => 130, 343 => 129, 340 => 128, 336 => 127, 334 => 126, 333 => 125, 332 => 124, 329 => 123, 323 => 120, 320 => 119, 316 => 118, 314 => 117, 311 => 116, 303 => 111, 299 => 110, 295 => 108, 291 => 107, 289 => 106, 286 => 105, 282 => 103, 276 => 101, 270 => 99, 268 => 98, 265 => 97, 261 => 96, 259 => 95, 256 => 94, 252 => 92, 246 => 90, 240 => 88, 238 => 87, 233 => 86, 231 => 85, 228 => 84, 224 => 83, 222 => 82, 218 => 80, 214 => 79, 211 => 78, 209 => 77, 206 => 76, 202 => 74, 193 => 68, 190 => 67, 188 => 65, 187 => 64, 186 => 63, 183 => 62, 178 => 59, 176 => 58, 175 => 57, 174 => 56, 173 => 55, 172 => 54, 170 => 53, 166 => 50, 160 => 47, 156 => 46, 153 => 45, 149 => 44, 147 => 43, 144 => 42, 138 => 39, 134 => 38, 131 => 37, 124 => 34, 120 => 33, 117 => 32, 113 => 31, 111 => 30, 108 => 29, 102 => 26, 98 => 25, 95 => 24, 91 => 23, 89 => 22, 83 => 19, 79 => 18, 76 => 17, 70 => 14, 66 => 13, 64 => 12, 60 => 10, 54 => 7, 51 => 6, 47 => 5, 45 => 4, 42 => 3, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "table/structure/display_table_stats.twig", "C:\\xampp\\phpMyAdmin\\templates\\table\\structure\\display_table_stats.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/5d/5d66fa2f3301978ff7ecb03a98299ab8.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/5d/5d66fa2f3301978ff7ecb03a98299ab8.php new file mode 100644 index 0000000..92a69c8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/5d/5d66fa2f3301978ff7ecb03a98299ab8.php @@ -0,0 +1,79 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(($context["filesList"] ?? null)); + foreach ($context['_seq'] as $context["_key"] => $context["file"]) { + // line 2 + echo " +"; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['file'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + } + + public function getTemplateName() + { + return "file_select_options.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 50 => 3, 41 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "file_select_options.twig", "C:\\xampp\\phpMyAdmin\\templates\\file_select_options.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/64/64faf96ca52d1d9dcc8936ca6d240dd9.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/64/64faf96ca52d1d9dcc8936ca6d240dd9.php new file mode 100644 index 0000000..d51c08c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/64/64faf96ca52d1d9dcc8936ca6d240dd9.php @@ -0,0 +1,1594 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + if ( !twig_test_empty(($context["columns"] ?? null))) { + // line 2 + echo " + env, twig_length_filter($this->env, ($context["row"] ?? null)), "html", null, true); + echo "\"> + env, twig_length_filter($this->env, ($context["columns"] ?? null)), "html", null, true); + echo "\"> +
        + + "; +echo _gettext("Table-specific privileges"); + // line 8 + echo " +

        + "; +echo _gettext("Note: MySQL privilege names are expressed in English."); + // line 10 + echo " +

        + +
        + + + + +
        + +
        + + "; +echo _gettext("Or"); + // line 32 + echo " + +
        + +
        + + + + +
        + +
        + + "; +echo _gettext("Or"); + // line 59 + echo " + +
        + +
        + + + + +
        + +
        + + "; +echo _gettext("Or"); + // line 86 + echo " + +
        + +
        + + + + +
        + +
        + + "; +echo _gettext("Or"); + // line 113 + echo " + +
        + +
        +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + + "; + // line 231 + if ((twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Delete versioning rows_priv", [], "array", true, true, false, 231) || twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Delete_history_priv", [], "array", true, true, false, 231))) { + // line 232 + echo "
        + + +
        + "; + } + // line 245 + echo "
        +
        +
        + +"; + } else { + // line 250 + echo " +"; + // line 251 + $context["grant_count"] = 0; + // line 252 + echo "
        + + "; + // line 261 + if (($context["is_global"] ?? null)) { + // line 262 + echo " "; +echo _gettext("Global privileges"); + // line 263 + echo " "; + } elseif (($context["is_database"] ?? null)) { + // line 264 + echo " "; +echo _gettext("Database-specific privileges"); + // line 265 + echo " "; + } else { + // line 266 + echo " "; +echo _gettext("Table-specific privileges"); + // line 267 + echo " "; + } + // line 268 + echo " + + +

        + "; +echo _gettext("Note: MySQL privilege names are expressed in English."); + // line 272 + echo " +

        + +
        + + + + + +
        + "; + // line 282 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 283 + echo " + +
        + +
        + "; + // line 295 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 296 + echo " + +
        + +
        + "; + // line 308 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 309 + echo " + +
        + +
        + "; + // line 321 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 322 + echo " + +
        + + "; + // line 333 + if (($context["is_global"] ?? null)) { + // line 334 + echo "
        + "; + // line 335 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 336 + echo " + +
        + "; + } + // line 347 + echo "
        + +
        + + + + + +
        + "; + // line 356 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 357 + echo " + +
        + +
        + "; + // line 378 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 379 + echo " + +
        + +
        + "; + // line 391 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 392 + echo " + +
        + +
        + "; + // line 404 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 405 + echo " + +
        + +
        + "; + // line 426 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 427 + echo " + +
        + +
        + "; + // line 439 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 440 + echo " + +
        + +
        + "; + // line 452 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 453 + echo " + +
        + +
        + "; + // line 465 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 466 + echo " + +
        + +
        + "; + // line 478 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 479 + echo " + +
        + + "; + // line 490 + if (twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Create_view_priv", [], "array", true, true, false, 490)) { + // line 491 + echo "
        + "; + // line 492 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 493 + echo " + +
        + "; + } + // line 504 + echo " + "; + // line 505 + if (twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Create View_priv", [], "array", true, true, false, 505)) { + // line 506 + echo "
        + "; + // line 507 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 508 + echo " + +
        + "; + } + // line 519 + echo " + "; + // line 520 + if (twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Event_priv", [], "array", true, true, false, 520)) { + // line 521 + echo "
        + "; + // line 522 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 523 + echo " + +
        + +
        + "; + // line 535 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 536 + echo " + +
        + "; + } + // line 547 + echo "
        + +
        + + + + + + "; + // line 555 + if (($context["is_global"] ?? null)) { + // line 556 + echo "
        + "; + // line 557 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 558 + echo " + +
        + +
        + "; + // line 570 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 571 + echo " + +
        + +
        + "; + // line 584 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 585 + echo " + +
        + +
        + "; + // line 597 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 598 + echo " + +
        + +
        + "; + // line 610 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 611 + echo " + +
        + +
        + "; + // line 623 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 624 + echo " + +
        + "; + } else { + // line 635 + echo "
        + "; + // line 636 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 637 + echo " + +
        + "; + } + // line 649 + echo " +
        + "; + // line 651 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 652 + echo " + +
        + +
        + "; + // line 664 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 665 + echo " + +
        + + "; + // line 677 + if (($context["is_global"] ?? null)) { + // line 678 + echo "
        + "; + // line 679 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 680 + echo " + +
        + +
        + "; + // line 692 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 693 + echo " + +
        + +
        + "; + // line 705 + $context["grant_count"] = (($context["grant_count"] ?? null) + 1); + // line 706 + echo " + +
        + "; + } + // line 717 + echo "
        + + "; + // line 719 + if (($context["is_global"] ?? null)) { + // line 720 + echo "
        + "; +echo _gettext("Resource limits"); + // line 721 + echo " +

        + "; +echo _gettext("Note: Setting these options to 0 (zero) removes the limit."); + // line 723 + echo " +

        + +
        + + env, $this->source, ($context["row"] ?? null), "max_questions", [], "any", true, true, false, 735) && !(null === twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_questions", [], "any", false, false, false, 735)))) ? (print (twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_questions", [], "any", false, false, false, 735), "html", null, true))) : (print ("0"))); + echo "\" title=\""; +echo _gettext("Limits the number of queries the user may send to the server per hour."); + // line 736 + echo "\"> +
        + +
        + + env, $this->source, ($context["row"] ?? null), "max_updates", [], "any", true, true, false, 748) && !(null === twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_updates", [], "any", false, false, false, 748)))) ? (print (twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_updates", [], "any", false, false, false, 748), "html", null, true))) : (print ("0"))); + echo "\" title=\""; +echo _gettext("Limits the number of commands that change any table or database the user may execute per hour."); + // line 749 + echo "\"> +
        + +
        + + env, $this->source, ($context["row"] ?? null), "max_connections", [], "any", true, true, false, 761) && !(null === twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_connections", [], "any", false, false, false, 761)))) ? (print (twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_connections", [], "any", false, false, false, 761), "html", null, true))) : (print ("0"))); + echo "\" title=\""; +echo _gettext("Limits the number of new connections the user may open per hour."); + // line 762 + echo "\"> +
        + +
        + + env, $this->source, ($context["row"] ?? null), "max_user_connections", [], "any", true, true, false, 774) && !(null === twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_user_connections", [], "any", false, false, false, 774)))) ? (print (twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_user_connections", [], "any", false, false, false, 774), "html", null, true))) : (print ("0"))); + echo "\" title=\""; +echo _gettext("Limits the number of simultaneous connections the user may have."); + // line 775 + echo "\"> +
        +
        + +
        + SSL +
        +
        + env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 785) == "NONE") || (twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 785) == ""))) ? (" checked") : ("")); + echo "> + +
        + +
        + env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 794) == "ANY")) ? (" checked") : ("")); + echo "> + +
        + +
        + env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 803) == "X509")) ? (" checked") : ("")); + echo "> + +
        + +
        + env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 811) == "SPECIFIED")) ? (" checked") : ("")); + echo "> + +
        + +
        +
        + + env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "ssl_cipher", [], "any", false, false, false, 822), "html", null, true); + echo "\" size=\"80\" title=\""; +echo _gettext("Requires that a specific cipher method be used for a connection."); + // line 823 + echo "\""; + // line 824 + echo (((twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 824) != "SPECIFIED")) ? (" disabled") : ("")); + echo "> +
        + +
        + + env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "x509_issuer", [], "any", false, false, false, 831), "html", null, true); + echo "\" size=\"80\" title=\""; +echo _gettext("Requires that a valid X509 certificate issued by this CA be presented."); + // line 832 + echo "\""; + // line 833 + echo (((twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 833) != "SPECIFIED")) ? (" disabled") : ("")); + echo "> +
        + +
        + + env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "x509_subject", [], "any", false, false, false, 840), "html", null, true); + echo "\" size=\"80\" title=\""; +echo _gettext("Requires that a valid X509 certificate with this subject be presented."); + // line 841 + echo "\""; + // line 842 + echo (((twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 842) != "SPECIFIED")) ? (" disabled") : ("")); + echo "> +
        +
        +
        +
        + "; + } + // line 848 + echo " +
        +
        +env, (($context["grant_count"] ?? null) - ((twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Grant_priv", [], "array", true, true, false, 851)) ? (1) : (0))), "html", null, true); + echo "\"> + +"; + } + // line 854 + echo " +"; + // line 855 + if (($context["has_submit"] ?? null)) { + // line 856 + echo "
        + + +
        +"; + } + } + + public function getTemplateName() + { + return "server/privileges/privileges_table.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 1569 => 858, 1564 => 856, 1562 => 855, 1559 => 854, 1553 => 851, 1548 => 848, 1539 => 842, 1537 => 841, 1533 => 840, 1523 => 833, 1521 => 832, 1517 => 831, 1507 => 824, 1505 => 823, 1501 => 822, 1487 => 811, 1477 => 803, 1475 => 802, 1464 => 794, 1462 => 793, 1451 => 785, 1449 => 784, 1438 => 775, 1434 => 774, 1427 => 768, 1418 => 762, 1414 => 761, 1407 => 755, 1398 => 749, 1394 => 748, 1387 => 742, 1378 => 736, 1374 => 735, 1367 => 729, 1358 => 723, 1353 => 721, 1349 => 720, 1347 => 719, 1343 => 717, 1334 => 710, 1326 => 707, 1323 => 706, 1321 => 705, 1311 => 697, 1303 => 694, 1300 => 693, 1298 => 692, 1288 => 684, 1280 => 681, 1277 => 680, 1275 => 679, 1272 => 678, 1270 => 677, 1259 => 670, 1252 => 666, 1249 => 665, 1247 => 664, 1237 => 656, 1229 => 653, 1226 => 652, 1224 => 651, 1220 => 649, 1211 => 642, 1204 => 639, 1202 => 638, 1199 => 637, 1197 => 636, 1194 => 635, 1185 => 628, 1177 => 625, 1174 => 624, 1172 => 623, 1162 => 615, 1154 => 612, 1151 => 611, 1149 => 610, 1139 => 602, 1131 => 599, 1128 => 598, 1126 => 597, 1116 => 589, 1108 => 586, 1105 => 585, 1103 => 584, 1093 => 576, 1086 => 573, 1084 => 572, 1081 => 571, 1079 => 570, 1069 => 562, 1061 => 559, 1058 => 558, 1056 => 557, 1053 => 556, 1051 => 555, 1046 => 552, 1042 => 551, 1035 => 547, 1026 => 540, 1018 => 537, 1015 => 536, 1013 => 535, 1003 => 527, 995 => 524, 992 => 523, 990 => 522, 987 => 521, 985 => 520, 982 => 519, 973 => 512, 965 => 509, 962 => 508, 960 => 507, 957 => 506, 955 => 505, 952 => 504, 943 => 497, 935 => 494, 932 => 493, 930 => 492, 927 => 491, 925 => 490, 916 => 483, 908 => 480, 905 => 479, 903 => 478, 893 => 470, 885 => 467, 882 => 466, 880 => 465, 870 => 457, 862 => 454, 859 => 453, 857 => 452, 847 => 444, 839 => 441, 836 => 440, 834 => 439, 824 => 431, 816 => 428, 813 => 427, 811 => 426, 801 => 418, 795 => 414, 788 => 410, 782 => 406, 780 => 405, 778 => 404, 768 => 396, 760 => 393, 757 => 392, 755 => 391, 745 => 383, 737 => 380, 734 => 379, 732 => 378, 722 => 370, 716 => 366, 709 => 362, 703 => 358, 701 => 357, 699 => 356, 693 => 352, 689 => 351, 682 => 347, 673 => 340, 665 => 337, 662 => 336, 660 => 335, 657 => 334, 655 => 333, 646 => 326, 638 => 323, 635 => 322, 633 => 321, 623 => 313, 615 => 310, 612 => 309, 610 => 308, 600 => 300, 592 => 297, 589 => 296, 587 => 295, 577 => 287, 569 => 284, 566 => 283, 564 => 282, 558 => 278, 554 => 277, 546 => 272, 540 => 269, 534 => 268, 531 => 267, 528 => 266, 525 => 265, 522 => 264, 519 => 263, 516 => 262, 514 => 261, 511 => 260, 505 => 256, 502 => 254, 499 => 252, 497 => 251, 494 => 250, 487 => 245, 478 => 238, 471 => 235, 469 => 234, 465 => 232, 463 => 231, 454 => 224, 446 => 221, 435 => 212, 427 => 209, 416 => 200, 408 => 197, 397 => 188, 389 => 185, 378 => 176, 370 => 173, 359 => 164, 352 => 161, 350 => 160, 339 => 151, 331 => 148, 320 => 139, 312 => 136, 301 => 127, 293 => 124, 285 => 118, 281 => 116, 276 => 113, 270 => 110, 263 => 105, 254 => 102, 247 => 101, 243 => 100, 237 => 96, 229 => 91, 225 => 89, 220 => 86, 214 => 83, 207 => 78, 198 => 75, 191 => 74, 187 => 73, 181 => 69, 173 => 64, 169 => 62, 164 => 59, 158 => 56, 151 => 51, 142 => 48, 135 => 47, 131 => 46, 125 => 42, 117 => 37, 113 => 35, 108 => 32, 102 => 29, 95 => 24, 86 => 21, 79 => 20, 75 => 19, 69 => 15, 61 => 10, 56 => 8, 52 => 6, 46 => 4, 42 => 3, 39 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "server/privileges/privileges_table.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\privileges\\privileges_table.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/68/6815bcfe05c216aa56060e7c8acaadc1.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/68/6815bcfe05c216aa56060e7c8acaadc1.php new file mode 100644 index 0000000..72a059b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/68/6815bcfe05c216aa56060e7c8acaadc1.php @@ -0,0 +1,373 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
        +

        + "; + // line 3 + echo PhpMyAdmin\Html\Generator::getIcon("b_usredit"); + echo " + "; +echo _gettext("Edit privileges:"); + // line 5 + echo " "; +echo _gettext("User account"); + // line 6 + echo " + "; + // line 7 + if ( !twig_test_empty(($context["database"] ?? null))) { + // line 8 + echo " + // line 10 +($context["username"] ?? null), "hostname" => // line 11 +($context["hostname"] ?? null), "dbname" => "", "tablename" => ""]); + // line 14 + echo "\"> + '"; + // line 15 + echo twig_escape_filter($this->env, ($context["username"] ?? null), "html", null, true); + echo "'@'"; + echo twig_escape_filter($this->env, ($context["hostname"] ?? null), "html", null, true); + echo "' + + + - + "; + // line 19 + if (($context["is_databases"] ?? null)) { + // line 20 + echo " "; +echo _gettext("Databases"); + // line 21 + echo " "; + } else { + // line 22 + echo " "; +echo _gettext("Database"); + // line 23 + echo " "; + } + // line 24 + echo " + "; + // line 25 + if ( !twig_test_empty(($context["table"] ?? null))) { + // line 26 + echo " + // line 28 +($context["username"] ?? null), "hostname" => // line 29 +($context["hostname"] ?? null), "dbname" => // line 30 +($context["dbname"] ?? null), "tablename" => ""]); + // line 32 + echo "\"> + "; + // line 33 + echo twig_escape_filter($this->env, ($context["database"] ?? null), "html", null, true); + echo " + + + - + "; +echo _gettext("Table"); + // line 38 + echo " "; + echo twig_escape_filter($this->env, ($context["table"] ?? null), "html", null, true); + echo " + "; + } else { + // line 40 + echo " "; + if ( !twig_test_iterable(($context["database"] ?? null))) { + // line 41 + echo " "; + $context["database"] = [0 => ($context["database"] ?? null)]; + // line 42 + echo " "; + } + // line 43 + echo " + "; + // line 44 + echo twig_escape_filter($this->env, twig_join_filter(($context["database"] ?? null), ", "), "html", null, true); + echo " + + "; + } + // line 47 + echo " "; + } else { + // line 48 + echo " '"; + echo twig_escape_filter($this->env, ($context["username"] ?? null), "html", null, true); + echo "'@'"; + echo twig_escape_filter($this->env, ($context["hostname"] ?? null), "html", null, true); + echo "' + "; + } + // line 50 + echo "

        + + "; + // line 52 + if ((($context["current_user"] ?? null) == ((($context["username"] ?? null) . "@") . ($context["hostname"] ?? null)))) { + // line 53 + echo " "; + echo call_user_func_array($this->env->getFilter('notice')->getCallable(), [_gettext("Note: You are attempting to edit privileges of the user with which you are currently logged in.")]); + echo " + "; + } + // line 55 + echo " + "; + // line 56 + if (($context["user_does_not_exists"] ?? null)) { + // line 57 + echo " "; + echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("The selected user was not found in the privilege table.")]); + echo " + "; + // line 58 + echo ($context["login_information_fields"] ?? null); + echo " + "; + } + // line 60 + echo " +
        + "; + // line 62 + echo PhpMyAdmin\Url::getHiddenInputs(($context["params"] ?? null)); + echo " + + "; + // line 64 + echo ($context["privileges_table"] ?? null); + echo " +
        + + "; + // line 67 + echo ($context["table_specific_rights"] ?? null); + echo " + + "; + // line 69 + if ((( !twig_test_iterable(($context["database"] ?? null)) && (twig_length_filter($this->env, ($context["database"] ?? null)) > 0)) && !($context["is_wildcard"] ?? null))) { + // line 70 + echo " [ + "; +echo _gettext("Database"); + // line 72 + echo " twig_replace_filter( // line 73 +($context["database"] ?? null), ["\\_" => "_", "\\%" => "%"]), "reload" => true], "&"); + // line 75 + echo "\"> + "; + // line 76 + echo twig_escape_filter($this->env, twig_replace_filter(($context["database"] ?? null), ["\\_" => "_", "\\%" => "%"]), "html", null, true); + echo ": + "; + // line 77 + echo twig_escape_filter($this->env, ($context["database_url_title"] ?? null), "html", null, true); + echo " + + ] + "; + // line 80 + if ((twig_length_filter($this->env, ($context["table"] ?? null)) > 0)) { + // line 81 + echo " [ + "; +echo _gettext("Table"); + // line 83 + echo " twig_replace_filter( // line 84 +($context["database"] ?? null), ["\\_" => "_", "\\%" => "%"]), "table" => // line 85 +($context["table"] ?? null), "reload" => true], "&"); + // line 87 + echo "\"> + "; + // line 88 + echo twig_escape_filter($this->env, ($context["table"] ?? null), "html", null, true); + echo ": + "; + // line 89 + echo twig_escape_filter($this->env, ($context["table_url_title"] ?? null), "html", null, true); + echo " + + ] + "; + } + // line 93 + echo " "; + } + // line 94 + echo " + "; + // line 95 + echo ($context["change_password"] ?? null); + echo " + +
        + "; + // line 98 + echo PhpMyAdmin\Url::getHiddenInputs(); + echo " + env, ($context["username"] ?? null), "html", null, true); + echo "\"> + env, ($context["hostname"] ?? null), "html", null, true); + echo "\"> + "; + // line 101 + if ( !twig_test_empty(($context["user_group"] ?? null))) { + // line 102 + echo " env, ($context["user_group"] ?? null), "html", null, true); + echo "\"> + "; + } + // line 104 + echo " +
        + + "; +echo _gettext("Change login information / Copy user account"); + // line 108 + echo " + + "; + // line 110 + echo ($context["change_login_info_fields"] ?? null); + echo " + +
        + + "; +echo _gettext("Create a new user account with the same privileges and …"); + // line 115 + echo " + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        +
        +
        + +
        + + +
        +
        +
        +"; + } + + public function getTemplateName() + { + return "server/privileges/user_properties.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 347 => 149, 337 => 142, 328 => 135, 319 => 128, 310 => 121, 302 => 115, 294 => 110, 290 => 108, 286 => 106, 281 => 104, 275 => 102, 273 => 101, 269 => 100, 265 => 99, 261 => 98, 257 => 97, 252 => 95, 249 => 94, 246 => 93, 239 => 89, 235 => 88, 232 => 87, 230 => 85, 229 => 84, 226 => 83, 222 => 81, 220 => 80, 214 => 77, 210 => 76, 207 => 75, 205 => 73, 202 => 72, 198 => 70, 196 => 69, 191 => 67, 185 => 64, 180 => 62, 176 => 61, 173 => 60, 168 => 58, 163 => 57, 161 => 56, 158 => 55, 152 => 53, 150 => 52, 146 => 50, 138 => 48, 135 => 47, 129 => 44, 126 => 43, 123 => 42, 120 => 41, 117 => 40, 111 => 38, 103 => 33, 100 => 32, 98 => 30, 97 => 29, 96 => 28, 95 => 27, 92 => 26, 90 => 25, 87 => 24, 84 => 23, 81 => 22, 78 => 21, 75 => 20, 73 => 19, 64 => 15, 61 => 14, 59 => 11, 58 => 10, 57 => 9, 54 => 8, 52 => 7, 49 => 6, 46 => 5, 41 => 3, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "server/privileges/user_properties.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\privileges\\user_properties.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/6b/6bd853fb5225b6a7aef98f477cad0eae.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/6b/6bd853fb5225b6a7aef98f477cad0eae.php new file mode 100644 index 0000000..846ab1e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/6b/6bd853fb5225b6a7aef98f477cad0eae.php @@ -0,0 +1,133 @@ +source = $this->getSourceContext(); + + $this->blocks = [ + 'title' => [$this, 'block_title'], + 'selection_options' => [$this, 'block_selection_options'], + ]; + } + + protected function doGetParent(array $context) + { + // line 1 + return "export.twig"; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 25 + ob_start(function () { return ''; }); + // line 26 + echo " "; +echo _gettext("@SERVER@ will become the server name."); + $context["filename_hint"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); + // line 1 + $this->parent = $this->loadTemplate("export.twig", "server/export/index.twig", 1); + $this->parent->display($context, array_merge($this->blocks, $blocks)); + } + + // line 3 + public function block_title($context, array $blocks = []) + { + $macros = $this->macros; +echo _gettext("Exporting databases from the current server"); + } + + // line 5 + public function block_selection_options($context, array $blocks = []) + { + $macros = $this->macros; + // line 6 + echo "
        +
        "; +echo _gettext("Databases"); + // line 7 + echo "
        +
        +
        + + +
        + + +
        +
        +"; + } + + public function getTemplateName() + { + return "server/export/index.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 108 => 20, 99 => 17, 92 => 16, 88 => 15, 85 => 14, 79 => 11, 75 => 10, 69 => 7, 65 => 6, 61 => 5, 54 => 3, 49 => 1, 45 => 26, 43 => 25, 36 => 1,); + } + + public function getSourceContext() + { + return new Source("", "server/export/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\export\\index.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/73/73d2652d8fdb24e553f8c2c859c85abb.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/73/73d2652d8fdb24e553f8c2c859c85abb.php new file mode 100644 index 0000000..bc596cd --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/73/73d2652d8fdb24e553f8c2c859c85abb.php @@ -0,0 +1,90 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
        +
        +
        +
        +
        "; +echo _gettext("Loading"); + // line 5 + echo "
        + +
        +
        +
        + + + +
        +
        +
        +
        +"; + } + + public function getTemplateName() + { + return "modals/index_dialog_modal.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 63 => 12, 59 => 11, 55 => 10, 48 => 6, 44 => 5, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "modals/index_dialog_modal.twig", "C:\\xampp\\phpMyAdmin\\templates\\modals\\index_dialog_modal.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/7e/7ec8ff79d0910373bda2ab5f7b775566.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/7e/7ec8ff79d0910373bda2ab5f7b775566.php new file mode 100644 index 0000000..0503891 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/7e/7ec8ff79d0910373bda2ab5f7b775566.php @@ -0,0 +1,141 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable($this->env->getRuntime('PhpMyAdmin\FlashMessages')->getMessages()); + foreach ($context['_seq'] as $context["flash_key"] => $context["flash_messages"]) { + // line 2 + echo " "; + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable($context["flash_messages"]); + foreach ($context['_seq'] as $context["_key"] => $context["flash_message"]) { + // line 3 + echo "
        env, $context["flash_key"], "html", null, true); + echo "\" role=\"alert\"> + "; + // line 4 + echo twig_escape_filter($this->env, $context["flash_message"], "html", null, true); + echo " +
        + "; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['flash_message'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['flash_key'], $context['flash_messages'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 8 + echo " +"; + // line 9 + if (($context["has_tables"] ?? null)) { + // line 10 + echo "
        + "; + // line 11 + echo ($context["list_navigator_html"] ?? null); + echo " + + "; + // line 13 + echo ($context["table_list_html"] ?? null); + echo " + + "; + // line 15 + echo ($context["list_navigator_html"] ?? null); + echo " +
        +
        +

        + + ($context["database"] ?? null), "goto" => PhpMyAdmin\Url::getFromRoute("/database/structure")]); + echo "\"> + "; + // line 21 + echo PhpMyAdmin\Html\Generator::getIcon("b_tblanalyse", _gettext("Data dictionary"), true); + echo " + +

        +"; + } else { + // line 25 + echo " "; + echo call_user_func_array($this->env->getFilter('notice')->getCallable(), [_gettext("No tables found in database.")]); + echo " +"; + } + // line 27 + echo " +"; + // line 28 + if ( !($context["is_system_schema"] ?? null)) { + // line 29 + echo " "; + echo ($context["create_table_html"] ?? null); + echo " +"; + } + } + + public function getTemplateName() + { + return "database/structure/index.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 115 => 29, 113 => 28, 110 => 27, 104 => 25, 97 => 21, 93 => 20, 89 => 19, 82 => 15, 77 => 13, 72 => 11, 69 => 10, 67 => 9, 64 => 8, 51 => 4, 46 => 3, 41 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "database/structure/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\database\\structure\\index.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/7f/7f9d7eb1fce94f372f4786ece6d9b303.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/7f/7f9d7eb1fce94f372f4786ece6d9b303.php new file mode 100644 index 0000000..9890526 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/7f/7f9d7eb1fce94f372f4786ece6d9b303.php @@ -0,0 +1,757 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + ob_start(function () { return ''; }); + // line 2 + echo " "; + if ( !twig_test_empty(($context["navigation"] ?? null))) { + // line 3 + echo " + + + + "; + // line 7 + echo twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "move_backward_buttons", [], "any", false, false, false, 7); + echo " + "; + // line 8 + echo twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "page_selector", [], "any", false, false, false, 8); + echo " + "; + // line 9 + echo twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "move_forward_buttons", [], "any", false, false, false, 9); + echo " + + "; + // line 11 + if ((twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "number_total_page", [], "any", false, false, false, 11) != 1)) { + // line 12 + echo " + "; + } + // line 14 + echo " + "; + // line 15 + if (twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "has_show_all", [], "any", false, false, false, 15)) { + // line 16 + echo " + + "; + } + // line 29 + echo " + + + + + + + + +
        |
        +
        + "; + // line 18 + echo PhpMyAdmin\Url::getHiddenFields(twig_array_merge(twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "hidden_fields", [], "any", false, false, false, 18), ["session_max_rows" => twig_get_attribute($this->env, $this->source, // line 19 +($context["navigation"] ?? null), "session_max_rows", [], "any", false, false, false, 19), "pos" => "0"])); + // line 21 + echo " + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\" class=\"showAllRows\" value=\"all\""; + // line 23 + echo ((twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "is_showing_all", [], "any", false, false, false, 23)) ? (" checked") : ("")); + echo "> + +
        +
        |
        +
        + +
        |
        +
        +
        +
        + +
        |
        +
        +
        +
        + "; + // line 44 + echo PhpMyAdmin\Url::getHiddenFields(twig_array_merge(twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "hidden_fields", [], "any", false, false, false, 44), ["pos" => twig_get_attribute($this->env, $this->source, // line 45 +($context["navigation"] ?? null), "pos", [], "any", false, false, false, 45), "unlim_num_rows" => // line 46 +($context["unlim_num_rows"] ?? null)])); + // line 47 + echo " + + + +
        +
        + "; +echo _gettext("Filter rows"); + // line 62 + echo ": + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\"> + + "; + // line 67 + if ( !twig_test_empty(twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "sort_by_key", [], "any", false, false, false, 67))) { + // line 68 + echo "
        + "; + // line 69 + echo PhpMyAdmin\Url::getHiddenFields(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "sort_by_key", [], "any", false, false, false, 69), "hidden_fields", [], "any", false, false, false, 69)); + echo " + "; +echo _gettext("Sort by key:"); + // line 71 + echo " +
        + "; + } + // line 78 + echo "
        + "; + } + $context["navigation_html"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); + // line 84 + echo " +"; + // line 85 + echo ($context["sql_query_message"] ?? null); + echo " + +"; + // line 87 + echo twig_escape_filter($this->env, ($context["navigation_html"] ?? null), "html", null, true); + echo " + +env, ($context["save_cells_at_once"] ?? null), "html", null, true); + echo "\"> +
        + "; + // line 91 + echo PhpMyAdmin\Url::getHiddenInputs(($context["db"] ?? null), ($context["table"] ?? null)); + echo " +
        + +"; + // line 94 + if ( !twig_test_empty(twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 94))) { + // line 95 + echo " "; + if (twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 95), "order", [], "any", false, false, false, 95)) { + // line 96 + echo " env, twig_join_filter(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 96), "order", [], "any", false, false, false, 96), ","), "html", null, true); + echo "\"> + "; + } + // line 98 + echo " "; + if (twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 98), "visibility", [], "any", false, false, false, 98)) { + // line 99 + echo " env, twig_join_filter(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 99), "visibility", [], "any", false, false, false, 99), ","), "html", null, true); + echo "\"> + "; + } + // line 101 + echo " "; + if ( !twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 101), "is_view", [], "any", false, false, false, 101)) { + // line 102 + echo " env, twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 102), "table_create_time", [], "any", false, false, false, 102), "html", null, true); + echo "\"> + "; + } + } + // line 105 + echo " +"; + // line 106 + if ( !twig_test_empty(twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 106))) { + // line 107 + echo "
        + "; + // line 108 + echo PhpMyAdmin\Url::getHiddenInputs(["db" => // line 109 +($context["db"] ?? null), "table" => // line 110 +($context["table"] ?? null), "sql_query" => // line 111 +($context["sql_query"] ?? null), "goto" => // line 112 +($context["goto"] ?? null), "display_options_form" => 1]); + // line 114 + echo " + + "; + // line 116 + if ((($context["default_sliders_state"] ?? null) != "disabled")) { + // line 117 + echo "
        + +
        +
        + "; + } + // line 124 + echo " +
        +
        +
        + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\" value=\"P\""; + echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 128), "pftext", [], "any", false, false, false, 128) == "P")) ? (" checked") : ("")); + echo "> + +
        +
        + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\" value=\"F\""; + echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 132), "pftext", [], "any", false, false, false, 132) == "F")) ? (" checked") : ("")); + echo "> + +
        +
        + + "; + // line 137 + if ((($context["relwork"] ?? null) && ($context["displaywork"] ?? null))) { + // line 138 + echo "
        +
        + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\" value=\"K\""; + echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 140), "relational_display", [], "any", false, false, false, 140) == "K")) ? (" checked") : ("")); + echo "> + +
        +
        + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\" value=\"D\""; + echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 144), "relational_display", [], "any", false, false, false, 144) == "D")) ? (" checked") : ("")); + echo "> + +
        +
        + "; + } + // line 149 + echo " +
        + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\""; + // line 152 + echo (( !twig_test_empty(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 152), "display_binary", [], "any", false, false, false, 152))) ? (" checked") : ("")); + echo "> + + + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\""; + // line 156 + echo (( !twig_test_empty(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 156), "display_blob", [], "any", false, false, false, 156))) ? (" checked") : ("")); + echo "> + +
        + + "; + // line 164 + echo "
        + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\""; + // line 166 + echo (( !twig_test_empty(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 166), "hide_transformation", [], "any", false, false, false, 166))) ? (" checked") : ("")); + echo "> + +
        + +
        + "; + // line 171 + if (twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 171), "possible_as_geometry", [], "any", false, false, false, 171)) { + // line 172 + echo "
        + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\" value=\"GEOM\""; + echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 173), "geo_option", [], "any", false, false, false, 173) == "GEOM")) ? (" checked") : ("")); + echo "> + +
        + "; + } + // line 177 + echo "
        + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\" value=\"WKT\""; + echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 178), "geo_option", [], "any", false, false, false, 178) == "WKT")) ? (" checked") : ("")); + echo "> + +
        +
        + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\" value=\"WKB\""; + echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 182), "geo_option", [], "any", false, false, false, 182) == "WKB")) ? (" checked") : ("")); + echo "> + +
        +
        +
        +
        + +
        + +
        + "; + // line 192 + if ((($context["default_sliders_state"] ?? null) != "disabled")) { + // line 193 + echo "
        + "; + } + // line 195 + echo "
        +"; + } + // line 197 + echo " +"; + // line 198 + if (twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "has_bulk_actions_form", [], "any", false, false, false, 198)) { + // line 199 + echo "
        env, ($context["unique_id"] ?? null), "html", null, true); + echo "\" class=\"ajax\"> + "; + // line 200 + echo PhpMyAdmin\Url::getHiddenInputs(($context["db"] ?? null), ($context["table"] ?? null), 1); + echo " + +"; + } + // line 203 + echo " +
        + env, ($context["unique_id"] ?? null), "html", null, true); + echo "\"> + + "; + // line 207 + echo twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "button", [], "any", false, false, false, 207); + echo " + "; + // line 208 + echo twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "table_headers_for_columns", [], "any", false, false, false, 208); + echo " + "; + // line 209 + echo twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_at_right_side", [], "any", false, false, false, 209); + echo " + + + + + + "; + // line 215 + echo ($context["body"] ?? null); + echo " + +
        +
        + +"; + // line 220 + if ( !twig_test_empty(($context["bulk_links"] ?? null))) { + // line 221 + echo "
        + env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath((("arrow_" . ($context["text_dir"] ?? null)) . ".png")), "html", null, true); + echo "\" width=\"38\" height=\"22\" alt=\""; +echo _gettext("With selected:"); + echo "\"> + env, ($context["unique_id"] ?? null), "html", null, true); + echo "_checkall\" class=\"checkall_box\" title=\""; +echo _gettext("Check all"); + echo "\"> + + "; +echo _gettext("With selected:"); + // line 225 + echo " + + + + + + + + "; + // line 239 + if (twig_get_attribute($this->env, $this->source, ($context["bulk_links"] ?? null), "has_export_button", [], "any", false, false, false, 239)) { + // line 240 + echo " + "; + } + // line 244 + echo "
        + + env, twig_get_attribute($this->env, $this->source, ($context["bulk_links"] ?? null), "clause_is_unique", [], "any", false, false, false, 246), "html", null, true); + echo "\"> + env, ($context["sql_query"] ?? null), "html", null, true); + echo "\"> +
        +"; + } + // line 250 + echo " +"; + // line 251 + echo twig_escape_filter($this->env, ($context["navigation_html"] ?? null), "html", null, true); + echo " + +"; + // line 253 + if ( !twig_test_empty(($context["operations"] ?? null))) { + // line 254 + echo "
        + "; +echo _gettext("Query results operations"); + // line 255 + echo " + + "; + // line 257 + if (twig_get_attribute($this->env, $this->source, ($context["operations"] ?? null), "has_print_link", [], "any", false, false, false, 257)) { + // line 258 + echo " + + "; + // line 260 + echo PhpMyAdmin\Html\Generator::linkOrButton("#", null, PhpMyAdmin\Html\Generator::getIcon("b_insrow", _gettext("Copy to clipboard"), true), ["id" => "copyToClipBoard", "class" => "btn"]); + // line 265 + echo " + "; + } + // line 267 + echo " + "; + // line 268 + if ( !twig_get_attribute($this->env, $this->source, ($context["operations"] ?? null), "has_procedure", [], "any", false, false, false, 268)) { + // line 269 + echo " "; + if (twig_get_attribute($this->env, $this->source, ($context["operations"] ?? null), "has_export_link", [], "any", false, false, false, 269)) { + // line 270 + echo " "; + echo PhpMyAdmin\Html\Generator::linkOrButton(PhpMyAdmin\Url::getFromRoute("/table/export"), twig_get_attribute($this->env, $this->source, // line 272 +($context["operations"] ?? null), "url_params", [], "any", false, false, false, 272), PhpMyAdmin\Html\Generator::getIcon("b_tblexport", _gettext("Export"), true), ["class" => "btn"]); + // line 275 + echo " + + "; + // line 277 + echo PhpMyAdmin\Html\Generator::linkOrButton(PhpMyAdmin\Url::getFromRoute("/table/chart"), twig_get_attribute($this->env, $this->source, // line 279 +($context["operations"] ?? null), "url_params", [], "any", false, false, false, 279), PhpMyAdmin\Html\Generator::getIcon("b_chart", _gettext("Display chart"), true), ["class" => "btn"]); + // line 282 + echo " + + "; + // line 284 + if (twig_get_attribute($this->env, $this->source, ($context["operations"] ?? null), "has_geometry", [], "any", false, false, false, 284)) { + // line 285 + echo " "; + echo PhpMyAdmin\Html\Generator::linkOrButton(PhpMyAdmin\Url::getFromRoute("/table/gis-visualization"), twig_get_attribute($this->env, $this->source, // line 287 +($context["operations"] ?? null), "url_params", [], "any", false, false, false, 287), PhpMyAdmin\Html\Generator::getIcon("b_globe", _gettext("Visualize GIS data"), true), ["class" => "btn"]); + // line 290 + echo " + "; + } + // line 292 + echo " "; + } + // line 293 + echo " + + "; + // line 295 + echo PhpMyAdmin\Html\Generator::linkOrButton(PhpMyAdmin\Url::getFromRoute("/view/create"), ["db" => // line 297 +($context["db"] ?? null), "table" => ($context["table"] ?? null), "sql_query" => ($context["sql_query"] ?? null), "printview" => true], PhpMyAdmin\Html\Generator::getIcon("b_view_add", _gettext("Create view"), true), ["class" => "btn create_view ajax"]); + // line 300 + echo " + + "; + } + // line 303 + echo "
        +"; + } + } + + public function getTemplateName() + { + return "display/results/table.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 733 => 303, 728 => 300, 726 => 297, 725 => 295, 721 => 293, 718 => 292, 714 => 290, 712 => 287, 710 => 285, 708 => 284, 704 => 282, 702 => 279, 701 => 277, 697 => 275, 695 => 272, 693 => 270, 690 => 269, 688 => 268, 685 => 267, 681 => 265, 679 => 260, 673 => 258, 671 => 257, 667 => 255, 663 => 254, 661 => 253, 656 => 251, 653 => 250, 647 => 247, 643 => 246, 639 => 244, 633 => 241, 628 => 240, 626 => 239, 620 => 236, 617 => 235, 610 => 232, 607 => 231, 600 => 228, 597 => 227, 592 => 225, 585 => 224, 579 => 223, 573 => 222, 570 => 221, 568 => 220, 560 => 215, 551 => 209, 547 => 208, 543 => 207, 538 => 205, 534 => 203, 529 => 201, 525 => 200, 520 => 199, 518 => 198, 515 => 197, 511 => 195, 507 => 193, 505 => 192, 501 => 190, 488 => 183, 482 => 182, 474 => 179, 468 => 178, 465 => 177, 457 => 174, 451 => 173, 448 => 172, 446 => 171, 437 => 167, 433 => 166, 430 => 165, 427 => 164, 419 => 157, 415 => 156, 412 => 155, 405 => 153, 401 => 152, 398 => 151, 394 => 149, 385 => 145, 379 => 144, 371 => 141, 365 => 140, 361 => 138, 359 => 137, 350 => 133, 344 => 132, 336 => 129, 330 => 128, 324 => 124, 319 => 122, 315 => 120, 310 => 118, 307 => 117, 305 => 116, 301 => 114, 299 => 112, 298 => 111, 297 => 110, 296 => 109, 295 => 108, 290 => 107, 288 => 106, 285 => 105, 278 => 102, 275 => 101, 269 => 99, 266 => 98, 260 => 96, 257 => 95, 255 => 94, 249 => 91, 244 => 89, 239 => 87, 234 => 85, 231 => 84, 223 => 78, 218 => 75, 205 => 73, 201 => 72, 198 => 71, 193 => 69, 188 => 68, 186 => 67, 179 => 64, 175 => 62, 167 => 57, 154 => 55, 149 => 54, 143 => 52, 141 => 51, 137 => 49, 132 => 47, 130 => 46, 129 => 45, 128 => 44, 124 => 43, 117 => 38, 108 => 32, 102 => 29, 92 => 24, 88 => 23, 85 => 22, 82 => 21, 80 => 19, 79 => 18, 75 => 17, 72 => 16, 70 => 15, 67 => 14, 63 => 12, 61 => 11, 56 => 9, 52 => 8, 48 => 7, 42 => 3, 39 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "display/results/table.twig", "C:\\xampp\\phpMyAdmin\\templates\\display\\results\\table.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/8f/8f49fb1d1444954616e2f57a568edd17.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/8f/8f49fb1d1444954616e2f57a568edd17.php new file mode 100644 index 0000000..e91f1b5 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/8f/8f49fb1d1444954616e2f57a568edd17.php @@ -0,0 +1,258 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
        + env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath((("arrow_" . ($context["text_dir"] ?? null)) . ".png")), "html", null, true); + echo "\" width=\"38\" height=\"22\" alt=\""; +echo _gettext("With selected:"); + echo "\"> + + + "; + // line 5 + if ((($context["overhead_check"] ?? null) != "")) { + // line 6 + echo " / "; +echo _gettext("Check tables having overhead"); + echo " + "; + } + // line 8 + echo " + "; + // line 39 + echo twig_join_filter(($context["hidden_fields"] ?? null), " +"); + echo " +
        + +
        +
        +
        +
        +
        + +
        +
        +
        + + +
        +
        +
        +
        + +"; + // line 59 + if ((array_key_exists("central_columns_work", $context) && ($context["central_columns_work"] ?? null))) { + // line 60 + echo "
        +
        +
        +
        +
        "; +echo _gettext("Are you sure?"); + // line 65 + echo "
        + +
        +
        + "; + // line 69 + echo PhpMyAdmin\Sanitize::sanitizeMessage(_gettext("This action may change some of the columns definition.[br]Are you sure you want to continue?")); + echo " +
        +
        + + +
        +
        +
        +
        +"; + } + } + + public function getTemplateName() + { + return "database/structure/check_all_tables.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 230 => 73, 226 => 72, 219 => 69, 214 => 66, 210 => 65, 202 => 60, 200 => 59, 192 => 53, 188 => 52, 181 => 48, 167 => 39, 164 => 38, 159 => 35, 155 => 34, 151 => 33, 145 => 32, 142 => 31, 137 => 28, 133 => 27, 129 => 26, 125 => 25, 120 => 23, 116 => 22, 112 => 21, 108 => 20, 104 => 19, 100 => 18, 95 => 16, 91 => 15, 85 => 14, 83 => 13, 80 => 12, 76 => 11, 72 => 10, 66 => 9, 62 => 8, 56 => 6, 54 => 5, 51 => 4, 47 => 3, 40 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "database/structure/check_all_tables.twig", "C:\\xampp\\phpMyAdmin\\templates\\database\\structure\\check_all_tables.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/90/903bb4d86a52617f11388acd5e8b630b.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/90/903bb4d86a52617f11388acd5e8b630b.php new file mode 100644 index 0000000..40b5a2f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/90/903bb4d86a52617f11388acd5e8b630b.php @@ -0,0 +1,73 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo " +
      • +
        + "; + // line 4 + echo ($context["collapse_all"] ?? null); + echo " + "; + // line 5 + echo ($context["unlink"] ?? null); + echo " +
        +
      • + +"; + } + + public function getTemplateName() + { + return "navigation/tree/controls.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 46 => 5, 42 => 4, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "navigation/tree/controls.twig", "C:\\xampp\\phpMyAdmin\\templates\\navigation\\tree\\controls.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/9e/9e86da622528ad18f875b9906ddc7e47.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/9e/9e86da622528ad18f875b9906ddc7e47.php new file mode 100644 index 0000000..b2bd2cb --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/9e/9e86da622528ad18f875b9906ddc7e47.php @@ -0,0 +1,428 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + if (($context["is_superuser"] ?? null)) { + // line 2 + echo "
        + "; + // line 3 + echo PhpMyAdmin\Url::getHiddenInputs(($context["db"] ?? null), ($context["table"] ?? null)); + echo " + +
        + + "; + // line 7 + echo PhpMyAdmin\Html\Generator::getIcon("b_usrcheck"); + echo " + "; + // line 8 + echo twig_sprintf(_gettext("Users having access to \"%s\""), (((((((" // line 9 +($context["db"] ?? null), "table" => // line 10 +($context["table"] ?? null)], "&")) . "\">") . twig_escape_filter($this->env, // line 11 +($context["db"] ?? null), "html")) . ".") . twig_escape_filter($this->env, ($context["table"] ?? null), "html")) . "")); + echo " + + +
        + + + + + + + + + + + + + + + "; + // line 29 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(($context["privileges"] ?? null)); + $context['_iterated'] = false; + $context['loop'] = [ + 'parent' => $context['_parent'], + 'index0' => 0, + 'index' => 1, + 'first' => true, + ]; + if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) { + $length = count($context['_seq']); + $context['loop']['revindex0'] = $length - 1; + $context['loop']['revindex'] = $length; + $context['loop']['length'] = $length; + $context['loop']['last'] = 1 === $length; + } + foreach ($context['_seq'] as $context["_key"] => $context["privilege"]) { + // line 30 + echo " "; + $context["privileges_amount"] = twig_length_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "privileges", [], "any", false, false, false, 30)); + // line 31 + echo " + 1)) { + echo " class=\"align-middle\" rowspan=\""; + echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); + echo "\""; + } + echo "> + env, twig_get_attribute($this->env, $this->source, $context["loop"], "index0", [], "any", false, false, false, 33), "html", null, true); + echo "\" value=\""; + // line 34 + echo twig_escape_filter($this->env, ((twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 34) . "&#27;") . twig_get_attribute($this->env, $this->source, $context["privilege"], "host", [], "any", false, false, false, 34)), "html", null, true); + echo "\"> + + 1)) { + echo " class=\"align-middle\" rowspan=\""; + echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); + echo "\""; + } + echo "> + "; + // line 37 + if (twig_test_empty(twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 37))) { + // line 38 + echo " "; +echo _gettext("Any"); + echo " + "; + } else { + // line 40 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 40), "html", null, true); + echo " + "; + } + // line 42 + echo " + 1)) { + echo " class=\"align-middle\" rowspan=\""; + echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); + echo "\""; + } + echo "> + "; + // line 44 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "host", [], "any", false, false, false, 44), "html", null, true); + echo " + + "; + // line 46 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env, $this->source, $context["privilege"], "privileges", [], "any", false, false, false, 46)); + foreach ($context['_seq'] as $context["_key"] => $context["priv"]) { + // line 47 + echo " + + + + + + "; + // line 99 + if ((($context["privileges_amount"] ?? null) > 1)) { + // line 100 + echo " + "; + } + // line 102 + echo " "; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['priv'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 103 + echo " "; + $context['_iterated'] = true; + ++$context['loop']['index0']; + ++$context['loop']['index']; + $context['loop']['first'] = false; + if (isset($context['loop']['length'])) { + --$context['loop']['revindex0']; + --$context['loop']['revindex']; + $context['loop']['last'] = 0 === $context['loop']['revindex0']; + } + } + if (!$context['_iterated']) { + // line 104 + echo " + + + "; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['privilege'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 110 + echo " +
        "; +echo _gettext("User name"); + // line 19 + echo ""; +echo _gettext("Host name"); + // line 20 + echo ""; +echo _gettext("Type"); + // line 21 + echo ""; +echo _gettext("Privileges"); + // line 22 + echo ""; +echo _gettext("Grant"); + // line 23 + echo ""; +echo _gettext("Action"); + // line 24 + echo "
        + "; + // line 48 + if ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 48) == "g")) { + // line 49 + echo " "; +echo _gettext("global"); + // line 50 + echo " "; + } elseif ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 50) == "d")) { + // line 51 + echo " "; + if ((twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 51) == twig_replace_filter(($context["db"] ?? null), ["_" => "\\_", "%" => "\\%"]))) { + // line 52 + echo " "; +echo _gettext("database-specific"); + // line 53 + echo " "; + } else { + // line 54 + echo " "; +echo _gettext("wildcard"); + echo ": "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 54), "html", null, true); + echo " + "; + } + // line 56 + echo " "; + } elseif ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 56) == "t")) { + // line 57 + echo " "; +echo _gettext("table-specific"); + // line 58 + echo " "; + } elseif ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 58) == "r")) { + // line 59 + echo " "; +echo _gettext("routine"); + // line 60 + echo " "; + } + // line 61 + echo " + + "; + // line 64 + if ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 64) == "r")) { + // line 65 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 65), "html", null, true); + echo " + ("; + // line 66 + echo twig_escape_filter($this->env, twig_upper_filter($this->env, twig_join_filter(twig_get_attribute($this->env, $this->source, $context["priv"], "privileges", [], "any", false, false, false, 66), ", ")), "html", null, true); + echo ") + "; + } else { + // line 68 + echo " "; + echo twig_join_filter(twig_get_attribute($this->env, $this->source, $context["priv"], "privileges", [], "any", false, false, false, 68), ", "); + echo " + "; + } + // line 70 + echo " + + "; + // line 73 + echo twig_escape_filter($this->env, ((twig_get_attribute($this->env, $this->source, $context["priv"], "has_grant", [], "any", false, false, false, 73)) ? (_gettext("Yes")) : (_gettext("No"))), "html", null, true); + echo " + + "; + // line 76 + if (($context["is_grantuser"] ?? null)) { + // line 77 + echo " twig_get_attribute($this->env, $this->source, // line 78 +$context["privilege"], "user", [], "any", false, false, false, 78), "hostname" => twig_get_attribute($this->env, $this->source, // line 79 +$context["privilege"], "host", [], "any", false, false, false, 79), "dbname" => (((twig_get_attribute($this->env, $this->source, // line 80 +$context["priv"], "database", [], "any", false, false, false, 80) != "*")) ? (twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 80)) : ("")), "tablename" => (((twig_get_attribute($this->env, $this->source, // line 81 +$context["priv"], "table", [], "any", true, true, false, 81) && (twig_get_attribute($this->env, $this->source, $context["priv"], "table", [], "any", false, false, false, 81) != "*"))) ? (twig_get_attribute($this->env, $this->source, $context["priv"], "table", [], "any", false, false, false, 81)) : ("")), "routinename" => (((twig_get_attribute($this->env, $this->source, // line 82 +$context["priv"], "routine", [], "any", true, true, false, 82) && !(null === twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 82)))) ? (twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 82)) : (""))]); + // line 83 + echo "\"> + "; + // line 84 + echo PhpMyAdmin\Html\Generator::getIcon("b_usredit", _gettext("Edit privileges")); + echo " + + "; + } + // line 87 + echo " + twig_get_attribute($this->env, $this->source, // line 90 +$context["privilege"], "user", [], "any", false, false, false, 90), "hostname" => twig_get_attribute($this->env, $this->source, // line 91 +$context["privilege"], "host", [], "any", false, false, false, 91), "export" => true, "initial" => ""]); + // line 94 + echo "\"> + "; + // line 95 + echo PhpMyAdmin\Html\Generator::getIcon("b_tblexport", _gettext("Export")); + echo " + +
        + "; +echo _gettext("No user found."); + // line 107 + echo "
        +
        + +
        + env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath((("arrow_" . ($context["text_dir"] ?? null)) . ".png")), "html", null, true); + echo "\" alt=\""; +echo _gettext("With selected:"); + // line 116 + echo "\" width=\"38\" height=\"22\"> + + + "; +echo _gettext("With selected:"); + // line 119 + echo " + +
        +
        +
        +"; + } else { + // line 127 + echo " "; + echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("Not enough privilege to view users.")]); + echo " +"; + } + // line 129 + echo " +"; + // line 130 + if (($context["is_createuser"] ?? null)) { + // line 131 + echo " +"; + } + } + + public function getTemplateName() + { + return "table/privileges/index.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 399 => 140, 394 => 139, 392 => 138, 391 => 137, 390 => 135, 387 => 134, 381 => 131, 379 => 130, 376 => 129, 370 => 127, 361 => 121, 358 => 120, 354 => 119, 350 => 118, 346 => 117, 342 => 116, 338 => 115, 331 => 110, 323 => 107, 318 => 104, 305 => 103, 299 => 102, 295 => 100, 293 => 99, 286 => 95, 283 => 94, 281 => 91, 280 => 90, 279 => 89, 275 => 87, 269 => 84, 266 => 83, 264 => 82, 263 => 81, 262 => 80, 261 => 79, 260 => 78, 258 => 77, 256 => 76, 250 => 73, 245 => 70, 239 => 68, 234 => 66, 229 => 65, 227 => 64, 222 => 61, 219 => 60, 216 => 59, 213 => 58, 210 => 57, 207 => 56, 199 => 54, 196 => 53, 193 => 52, 190 => 51, 187 => 50, 184 => 49, 182 => 48, 179 => 47, 175 => 46, 170 => 44, 162 => 43, 159 => 42, 153 => 40, 147 => 38, 145 => 37, 137 => 36, 132 => 34, 129 => 33, 121 => 32, 118 => 31, 115 => 30, 97 => 29, 90 => 24, 86 => 23, 82 => 22, 78 => 21, 74 => 20, 70 => 19, 58 => 11, 57 => 10, 56 => 9, 55 => 8, 51 => 7, 44 => 3, 39 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "table/privileges/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\table\\privileges\\index.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/ac/ac3dec8d7b12e3b2b4ad59bc47b74b50.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/ac/ac3dec8d7b12e3b2b4ad59bc47b74b50.php new file mode 100644 index 0000000..29f9b44 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/ac/ac3dec8d7b12e3b2b4ad59bc47b74b50.php @@ -0,0 +1,324 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
        +
        "; +echo _gettext("Replica replication"); + // line 2 + echo "
        +
        + "; + // line 4 + if (($context["server_replica_multi_replication"] ?? null)) { + // line 5 + echo " "; +echo _gettext("Primary connection:"); + // line 6 + echo "
        + "; + // line 7 + echo PhpMyAdmin\Url::getHiddenInputs(($context["url_params"] ?? null)); + echo " + + +
        +
        +
        + "; + } + // line 21 + echo " + "; + // line 22 + if (($context["server_replica_status"] ?? null)) { + // line 23 + echo "
        + "; + // line 24 + if ( !($context["replica_sql_running"] ?? null)) { + // line 25 + echo " "; + echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("Replica SQL Thread not running!")]); + echo " + "; + } + // line 27 + echo " "; + if ( !($context["replica_io_running"] ?? null)) { + // line 28 + echo " "; + echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("Replica IO Thread not running!")]); + echo " + "; + } + // line 30 + echo " +

        "; +echo _gettext("Server is configured as replica in a replication process. Would you like to:"); + // line 31 + echo "

        + +
        + "; + } elseif ( ! // line 102 +($context["has_replica_configure"] ?? null)) { + // line 103 + echo " "; + ob_start(function () { return ''; }); + // line 107 + echo " "; +echo _gettext("This server is not configured as replica in a replication process. Would you like to %sconfigure%s it?"); + // line 108 + echo " "; + $___internal_parse_0_ = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); + // line 103 + echo twig_sprintf($___internal_parse_0_, ((((" true, "repl_clear_scr" => true]))) . "\">"), ""); + // line 109 + echo " "; + } + // line 110 + echo "
        +
        +"; + } + + public function getTemplateName() + { + return "server/replication/replica_configuration.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 300 => 110, 297 => 109, 295 => 103, 292 => 108, 289 => 107, 286 => 103, 284 => 102, 278 => 98, 271 => 96, 261 => 88, 256 => 87, 252 => 86, 248 => 85, 243 => 82, 236 => 80, 230 => 77, 226 => 75, 216 => 67, 213 => 66, 210 => 65, 207 => 64, 204 => 63, 202 => 62, 196 => 61, 191 => 58, 188 => 57, 185 => 56, 182 => 55, 179 => 54, 177 => 53, 171 => 52, 166 => 49, 159 => 47, 152 => 43, 146 => 42, 140 => 38, 133 => 35, 130 => 34, 124 => 31, 120 => 30, 114 => 28, 111 => 27, 105 => 25, 103 => 24, 100 => 23, 98 => 22, 95 => 21, 88 => 16, 84 => 15, 75 => 12, 68 => 11, 64 => 10, 61 => 9, 55 => 7, 50 => 6, 47 => 5, 45 => 4, 41 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "server/replication/replica_configuration.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\replication\\replica_configuration.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/b8/b8a339fcf028465119a68f7bc5023668.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/b8/b8a339fcf028465119a68f7bc5023668.php new file mode 100644 index 0000000..4712988 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/b8/b8a339fcf028465119a68f7bc5023668.php @@ -0,0 +1,299 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "\$( function() { + "; + // line 3 + echo " \$(\"#buttonGo\").on(\"click\", function() { + "; + // line 5 + echo " \$(\"#upload_form_form\").css(\"display\", \"none\"); + + "; + // line 7 + if ((($context["handler"] ?? null) != "PhpMyAdmin\\Plugins\\Import\\Upload\\UploadNoplugin")) { + // line 8 + echo " "; + // line 9 + echo " "; + $context["ajax_url"] = (("index.php?route=/import-status&id=" . ($context["upload_id"] ?? null)) . PhpMyAdmin\Url::getCommonRaw(["import_status" => 1], "&")); + // line 12 + echo " "; + $context["promot_str"] = PhpMyAdmin\Sanitize::jsFormat(_gettext("The file being uploaded is probably larger than the maximum allowed size or this is a known bug in webkit based (Safari, Google Chrome, Arora etc.) browsers."), false); + // line 13 + echo " "; + $context["statustext_str"] = PhpMyAdmin\Sanitize::escapeJsString(_gettext("%s of %s")); + // line 14 + echo " "; + $context["second_str"] = PhpMyAdmin\Sanitize::jsFormat(_gettext("%s/sec."), false); + // line 15 + echo " "; + $context["remaining_min"] = PhpMyAdmin\Sanitize::jsFormat(_gettext("About %MIN min. %SEC sec. remaining."), false); + // line 16 + echo " "; + $context["remaining_second"] = PhpMyAdmin\Sanitize::jsFormat(_gettext("About %SEC sec. remaining."), false); + // line 17 + echo " "; + $context["processed_str"] = PhpMyAdmin\Sanitize::jsFormat(_gettext("The file is being processed, please be patient."), false); + // line 18 + echo " "; + $context["import_url"] = PhpMyAdmin\Url::getCommonRaw(["import_status" => 1], "&"); + // line 19 + echo " + "; + // line 20 + ob_start(function () { return ''; }); + // line 21 + echo "
        +
        +
        +
        +
        +
        +
        +
        + env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath("ajax_clock_small.gif"), "html", null, true); + echo "\" width=\"16\" height=\"16\" alt=\"ajax clock\"> "; + echo PhpMyAdmin\Sanitize::jsFormat(_gettext("Uploading your import file…"), false); + // line 30 + echo "
        +
        +
        + "; + $context["upload_html"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); + // line 34 + echo " + "; + // line 36 + echo " var finished = false; + var percent = 0.0; + var total = 0; + var complete = 0; + var original_title = parent && parent.document ? parent.document.title : false; + var import_start; + + var perform_upload = function () { + new \$.getJSON( + \""; + // line 45 + echo ($context["ajax_url"] ?? null); + echo "\", + {}, + function(response) { + finished = response.finished; + percent = response.percent; + total = response.total; + complete = response.complete; + + if (total==0 && complete==0 && percent==0) { + \$(\"#upload_form_status_info\").html('env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath("ajax_clock_small.gif"), "html", null, true); + echo "\" width=\"16\" height=\"16\" alt=\"ajax clock\"> "; + echo ($context["promot_str"] ?? null); + echo "'); + \$(\"#upload_form_status\").css(\"display\", \"none\"); + } else { + var now = new Date(); + now = Date.UTC( + now.getFullYear(), + now.getMonth(), + now.getDate(), + now.getHours(), + now.getMinutes(), + now.getSeconds()) + + now.getMilliseconds() - 1000; + var statustext = Functions.sprintf( + \""; + // line 67 + echo ($context["statustext_str"] ?? null); + echo "\", + Functions.formatBytes( + complete, 1, Messages.strDecimalSeparator + ), + Functions.formatBytes( + total, 1, Messages.strDecimalSeparator + ) + ); + + if (\$(\"#importmain\").is(\":visible\")) { + "; + // line 78 + echo " \$(\"#importmain\").hide(); + \$(\"#import_form_status\") + .html('"; + // line 80 + echo twig_spaceless(($context["upload_html"] ?? null)); + echo "') + .show(); + import_start = now; + } + else if (percent > 9 || complete > 2000000) { + "; + // line 86 + echo " var used_time = now - import_start; + var seconds = parseInt(((total - complete) / complete) * used_time / 1000); + var speed = Functions.sprintf( + \""; + // line 89 + echo ($context["second_str"] ?? null); + echo "\", + Functions.formatBytes(complete / used_time * 1000, 1, Messages.strDecimalSeparator) + ); + + var minutes = parseInt(seconds / 60); + seconds %= 60; + var estimated_time; + if (minutes > 0) { + estimated_time = \""; + // line 97 + echo ($context["remaining_min"] ?? null); + echo "\" + .replace(\"%MIN\", minutes) + .replace(\"%SEC\", seconds); + } + else { + estimated_time = \""; + // line 102 + echo ($context["remaining_second"] ?? null); + echo "\" + .replace(\"%SEC\", seconds); + } + + statustext += \"
        \" + speed + \"

        \" + estimated_time; + } + + var percent_str = Math.round(percent) + \"%\"; + \$(\"#status\").animate({width: percent_str}, 150); + \$(\".percentage\").text(percent_str); + + "; + // line 114 + echo " if (original_title !== false) { + parent.document.title + = percent_str + \" - \" + original_title; + } + else { + document.title + = percent_str + \" - \" + original_title; + } + \$(\"#statustext\").html(statustext); + } + + if (finished == true) { + if (original_title !== false) { + parent.document.title = original_title; + } + else { + document.title = original_title; + } + \$(\"#importmain\").hide(); + "; + // line 134 + echo " \$(\"#import_form_status\") + .html('env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath("ajax_clock_small.gif"), "html", null, true); + echo "\" width=\"16\" height=\"16\" alt=\"ajax clock\"> "; + echo ($context["processed_str"] ?? null); + echo "') + .show(); + \$(\"#import_form_status\").load(\"index.php?route=/import-status&message=true&"; + // line 137 + echo ($context["import_url"] ?? null); + echo "\"); + Navigation.reload(); + + "; + // line 141 + echo " } + else { + setTimeout(perform_upload, 1000); + } + }); + }; + setTimeout(perform_upload, 1000); + "; + } else { + // line 149 + echo " "; + // line 150 + echo " "; + ob_start(function () { return ''; }); + // line 151 + echo "env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath("ajax_clock_small.gif"), "html", null, true); + echo "\" width=\"16\" height=\"16\" alt=\"ajax clock\">"; + // line 152 + echo PhpMyAdmin\Sanitize::jsFormat(_gettext("Please be patient, the file is being uploaded. Details about the upload are not available."), false); + // line 153 + echo PhpMyAdmin\Html\MySQLDocumentation::showDocumentation("faq", "faq2-9"); + $context["image_tag"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); + // line 155 + echo " \$('#upload_form_status_info').html('"; + echo ($context["image_tag"] ?? null); + echo "'); + \$(\"#upload_form_status\").css(\"display\", \"none\"); + "; + } + // line 158 + echo " }); +}); +"; + } + + public function getTemplateName() + { + return "import/javascript.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 275 => 158, 268 => 155, 265 => 153, 263 => 152, 259 => 151, 256 => 150, 254 => 149, 244 => 141, 238 => 137, 231 => 135, 228 => 134, 207 => 114, 193 => 102, 185 => 97, 174 => 89, 169 => 86, 161 => 80, 157 => 78, 144 => 67, 126 => 54, 114 => 45, 103 => 36, 100 => 34, 94 => 30, 90 => 29, 80 => 21, 78 => 20, 75 => 19, 72 => 18, 69 => 17, 66 => 16, 63 => 15, 60 => 14, 57 => 13, 54 => 12, 51 => 9, 49 => 8, 47 => 7, 43 => 5, 40 => 3, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "import/javascript.twig", "C:\\xampp\\phpMyAdmin\\templates\\import\\javascript.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/ce/cec3d5ebad23eec1dee19af09f0c53ac.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/ce/cec3d5ebad23eec1dee19af09f0c53ac.php new file mode 100644 index 0000000..c03e162 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/ce/cec3d5ebad23eec1dee19af09f0c53ac.php @@ -0,0 +1,309 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + echo "
        + "; +echo _gettext("Login Information"); + // line 2 + echo " +
        + + + + + env, ($context["username_length"] ?? null), "html", null, true); + echo "\" title=\""; +echo _gettext("User name"); + echo "\""; + // line 12 + if ( !twig_test_empty(($context["username"] ?? null))) { + echo " value=\""; + echo twig_escape_filter($this->env, (( !(null === ($context["new_username"] ?? null))) ? (($context["new_username"] ?? null)) : (($context["username"] ?? null))), "html", null, true); + echo "\""; + } + // line 13 + echo ((((null === ($context["pred_username"] ?? null)) || (($context["pred_username"] ?? null) == "userdefined"))) ? (" required") : ("")); + echo "> + +
        + "; + // line 16 + echo call_user_func_array($this->env->getFilter('notice')->getCallable(), [_gettext("An account already exists with the same username but possibly a different hostname.")]); + echo " +
        +
        + +
        + + + + + env, ($context["hostname_length"] ?? null), "html", null, true); + echo "\" value=\""; + echo twig_escape_filter($this->env, ((array_key_exists("hostname", $context)) ? (_twig_default_filter(($context["hostname"] ?? null), "%")) : ("%")), "html", null, true); + echo "\" title=\""; +echo _gettext("Host name"); + // line 37 + echo "\""; + echo (((($context["pred_hostname"] ?? null) == "userdefined")) ? (" required") : ("")); + echo "> + + "; + // line 39 + echo PhpMyAdmin\Html\Generator::showHint(_gettext("When Host table is used, this field is ignored and values stored in Host table are used instead.")); + echo " +
        + +
        + + + + + + "; +echo _pgettext("Password strength", "Strength:"); + // line 54 + echo " + + +
        + +
        + +   + +
        + +
        + +   + + + +
        + "; + // line 82 + ob_start(function () { return ''; }); + // line 83 + echo " "; +echo _gettext("This method requires using an 'SSL connection' or an 'unencrypted connection that encrypts the password using RSA'; while connecting to the server."); + // line 86 + echo " "; + echo PhpMyAdmin\Html\MySQLDocumentation::show("sha256-authentication-plugin"); + echo " + "; + $___internal_parse_0_ = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); + // line 82 + echo call_user_func_array($this->env->getFilter('notice')->getCallable(), [$___internal_parse_0_]); + // line 88 + echo "
        +
        + "; + // line 91 + echo "
        +"; + } + + public function getTemplateName() + { + return "server/privileges/login_information_fields.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 286 => 91, 282 => 88, 280 => 82, 274 => 86, 271 => 83, 269 => 82, 265 => 81, 261 => 79, 248 => 77, 244 => 76, 238 => 72, 235 => 71, 232 => 70, 229 => 69, 226 => 68, 224 => 67, 215 => 62, 210 => 60, 201 => 54, 195 => 53, 186 => 50, 179 => 49, 173 => 47, 171 => 46, 168 => 45, 163 => 43, 155 => 39, 149 => 37, 143 => 36, 135 => 33, 128 => 32, 120 => 30, 118 => 29, 112 => 28, 106 => 27, 102 => 26, 100 => 25, 95 => 23, 85 => 16, 79 => 13, 73 => 12, 68 => 11, 60 => 8, 54 => 7, 51 => 6, 46 => 4, 41 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "server/privileges/login_information_fields.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\privileges\\login_information_fields.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/d6/d68297e98d7671d85978d6198ae77b26.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/d6/d68297e98d7671d85978d6198ae77b26.php new file mode 100644 index 0000000..0bf396c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/d6/d68297e98d7671d85978d6198ae77b26.php @@ -0,0 +1,419 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + if (($context["is_superuser"] ?? null)) { + // line 2 + echo "
        + "; + // line 3 + echo PhpMyAdmin\Url::getHiddenInputs(($context["db"] ?? null)); + echo " + +
        +
        + + "; + // line 8 + echo PhpMyAdmin\Html\Generator::getIcon("b_usrcheck"); + echo " + "; + // line 9 + echo twig_sprintf(_gettext("Users having access to \"%s\""), (((((" ($context["db"] ?? null)], "&")) . "\">") . twig_escape_filter($this->env, ($context["db"] ?? null), "html")) . "")); + echo " + + +
        + + + + + + + + + + + + + + + "; + // line 27 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(($context["privileges"] ?? null)); + $context['_iterated'] = false; + $context['loop'] = [ + 'parent' => $context['_parent'], + 'index0' => 0, + 'index' => 1, + 'first' => true, + ]; + if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) { + $length = count($context['_seq']); + $context['loop']['revindex0'] = $length - 1; + $context['loop']['revindex'] = $length; + $context['loop']['length'] = $length; + $context['loop']['last'] = 1 === $length; + } + foreach ($context['_seq'] as $context["_key"] => $context["privilege"]) { + // line 28 + echo " "; + $context["privileges_amount"] = twig_length_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "privileges", [], "any", false, false, false, 28)); + // line 29 + echo " + 1)) { + echo " class=\"align-middle\" rowspan=\""; + echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); + echo "\""; + } + echo "> + env, twig_get_attribute($this->env, $this->source, $context["loop"], "index0", [], "any", false, false, false, 31), "html", null, true); + echo "\" value=\""; + // line 32 + echo twig_escape_filter($this->env, ((twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 32) . "&#27;") . twig_get_attribute($this->env, $this->source, $context["privilege"], "host", [], "any", false, false, false, 32)), "html", null, true); + echo "\"> + + 1)) { + echo " class=\"align-middle\" rowspan=\""; + echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); + echo "\""; + } + echo "> + "; + // line 35 + if (twig_test_empty(twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 35))) { + // line 36 + echo " "; +echo _gettext("Any"); + echo " + "; + } else { + // line 38 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 38), "html", null, true); + echo " + "; + } + // line 40 + echo " + 1)) { + echo " class=\"align-middle\" rowspan=\""; + echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); + echo "\""; + } + echo "> + "; + // line 42 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "host", [], "any", false, false, false, 42), "html", null, true); + echo " + + "; + // line 44 + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env, $this->source, $context["privilege"], "privileges", [], "any", false, false, false, 44)); + foreach ($context['_seq'] as $context["_key"] => $context["priv"]) { + // line 45 + echo " + + + + + + "; + // line 95 + if ((($context["privileges_amount"] ?? null) > 1)) { + // line 96 + echo " + "; + } + // line 98 + echo " "; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['priv'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 99 + echo " "; + $context['_iterated'] = true; + ++$context['loop']['index0']; + ++$context['loop']['index']; + $context['loop']['first'] = false; + if (isset($context['loop']['length'])) { + --$context['loop']['revindex0']; + --$context['loop']['revindex']; + $context['loop']['last'] = 0 === $context['loop']['revindex0']; + } + } + if (!$context['_iterated']) { + // line 100 + echo " + + + "; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['privilege'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 106 + echo " +
        "; +echo _gettext("User name"); + // line 17 + echo ""; +echo _gettext("Host name"); + // line 18 + echo ""; +echo _gettext("Type"); + // line 19 + echo ""; +echo _gettext("Privileges"); + // line 20 + echo ""; +echo _gettext("Grant"); + // line 21 + echo ""; +echo _gettext("Action"); + // line 22 + echo "
        + "; + // line 46 + if ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 46) == "g")) { + // line 47 + echo " "; +echo _gettext("global"); + // line 48 + echo " "; + } elseif ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 48) == "d")) { + // line 49 + echo " "; + if ((twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 49) == twig_replace_filter(($context["db"] ?? null), ["_" => "\\_", "%" => "\\%"]))) { + // line 50 + echo " "; +echo _gettext("database-specific"); + // line 51 + echo " "; + } else { + // line 52 + echo " "; +echo _gettext("wildcard"); + echo ": "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 52), "html", null, true); + echo " + "; + } + // line 54 + echo " "; + } elseif ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 54) == "r")) { + // line 55 + echo " "; +echo _gettext("routine"); + // line 56 + echo " "; + } + // line 57 + echo " + + "; + // line 60 + if ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 60) == "r")) { + // line 61 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 61), "html", null, true); + echo " + ("; + // line 62 + echo twig_escape_filter($this->env, twig_upper_filter($this->env, twig_join_filter(twig_get_attribute($this->env, $this->source, $context["priv"], "privileges", [], "any", false, false, false, 62), ", ")), "html", null, true); + echo ") + "; + } else { + // line 64 + echo " "; + echo twig_join_filter(twig_get_attribute($this->env, $this->source, $context["priv"], "privileges", [], "any", false, false, false, 64), ", "); + echo " + "; + } + // line 66 + echo " + + "; + // line 69 + echo twig_escape_filter($this->env, ((twig_get_attribute($this->env, $this->source, $context["priv"], "has_grant", [], "any", false, false, false, 69)) ? (_gettext("Yes")) : (_gettext("No"))), "html", null, true); + echo " + + "; + // line 72 + if (($context["is_grantuser"] ?? null)) { + // line 73 + echo " twig_get_attribute($this->env, $this->source, // line 74 +$context["privilege"], "user", [], "any", false, false, false, 74), "hostname" => twig_get_attribute($this->env, $this->source, // line 75 +$context["privilege"], "host", [], "any", false, false, false, 75), "dbname" => (((twig_get_attribute($this->env, $this->source, // line 76 +$context["priv"], "database", [], "any", false, false, false, 76) != "*")) ? (twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 76)) : ("")), "tablename" => "", "routinename" => (((twig_get_attribute($this->env, $this->source, // line 78 +$context["priv"], "routine", [], "any", true, true, false, 78) && !(null === twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 78)))) ? (twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 78)) : (""))]); + // line 79 + echo "\"> + "; + // line 80 + echo PhpMyAdmin\Html\Generator::getIcon("b_usredit", _gettext("Edit privileges")); + echo " + + "; + } + // line 83 + echo " + twig_get_attribute($this->env, $this->source, // line 86 +$context["privilege"], "user", [], "any", false, false, false, 86), "hostname" => twig_get_attribute($this->env, $this->source, // line 87 +$context["privilege"], "host", [], "any", false, false, false, 87), "export" => true, "initial" => ""]); + // line 90 + echo "\"> + "; + // line 91 + echo PhpMyAdmin\Html\Generator::getIcon("b_tblexport", _gettext("Export")); + echo " + +
        + "; +echo _gettext("No user found."); + // line 103 + echo "
        +
        + +
        + env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath((("arrow_" . ($context["text_dir"] ?? null)) . ".png")), "html", null, true); + echo "\" alt=\""; +echo _gettext("With selected:"); + // line 112 + echo "\" width=\"38\" height=\"22\"> + + + "; +echo _gettext("With selected:"); + // line 115 + echo " + +
        +
        +
        +
        +"; + } else { + // line 124 + echo " "; + echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("Not enough privilege to view users.")]); + echo " +"; + } + // line 126 + echo " +"; + // line 127 + if (($context["is_createuser"] ?? null)) { + // line 128 + echo " +"; + } + } + + public function getTemplateName() + { + return "database/privileges/index.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 390 => 136, 385 => 135, 383 => 134, 382 => 132, 379 => 131, 373 => 128, 371 => 127, 368 => 126, 362 => 124, 352 => 117, 349 => 116, 345 => 115, 341 => 114, 337 => 113, 333 => 112, 329 => 111, 322 => 106, 314 => 103, 309 => 100, 296 => 99, 290 => 98, 286 => 96, 284 => 95, 277 => 91, 274 => 90, 272 => 87, 271 => 86, 270 => 85, 266 => 83, 260 => 80, 257 => 79, 255 => 78, 254 => 76, 253 => 75, 252 => 74, 250 => 73, 248 => 72, 242 => 69, 237 => 66, 231 => 64, 226 => 62, 221 => 61, 219 => 60, 214 => 57, 211 => 56, 208 => 55, 205 => 54, 197 => 52, 194 => 51, 191 => 50, 188 => 49, 185 => 48, 182 => 47, 180 => 46, 177 => 45, 173 => 44, 168 => 42, 160 => 41, 157 => 40, 151 => 38, 145 => 36, 143 => 35, 135 => 34, 130 => 32, 127 => 31, 119 => 30, 116 => 29, 113 => 28, 95 => 27, 88 => 22, 84 => 21, 80 => 20, 76 => 19, 72 => 18, 68 => 17, 56 => 9, 52 => 8, 44 => 3, 39 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "database/privileges/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\database\\privileges\\index.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/e1/e16bfe2d50d183748778b292c372d154.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/e1/e16bfe2d50d183748778b292c372d154.php new file mode 100644 index 0000000..c9dae9a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/tmp/twig/e1/e16bfe2d50d183748778b292c372d154.php @@ -0,0 +1,703 @@ +source = $this->getSourceContext(); + + $this->parent = false; + + $this->blocks = [ + ]; + } + + protected function doDisplay(array $context, array $blocks = []) + { + $macros = $this->macros; + // line 1 + if (($context["is_git_revision"] ?? null)) { + // line 2 + echo "
        +"; + } + // line 4 + echo " +"; + // line 5 + echo ($context["message"] ?? null); + echo " + +"; + // line 7 + echo ($context["partial_logout"] ?? null); + echo " + +
        + "; + // line 10 + echo ($context["sync_favorite_tables"] ?? null); + echo " +
        +
        +
        + "; + // line 14 + if (($context["has_server"] ?? null)) { + // line 15 + echo " "; + if (($context["is_demo"] ?? null)) { + // line 16 + echo "
        +
        + "; +echo _gettext("phpMyAdmin Demo Server"); + // line 19 + echo "
        +
        + "; + // line 21 + ob_start(function () { return ''; }); + // line 22 + echo " "; +echo _gettext("You are using the demo server. You can do anything here, but please do not change root, debian-sys-maint and pma users. More information is available at %s."); + // line 25 + echo " "; + $___internal_parse_0_ = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); + // line 21 + echo twig_sprintf($___internal_parse_0_, "demo.phpmyadmin.net"); + // line 26 + echo "
        +
        + "; + } + // line 29 + echo " +
        +
        + "; +echo _gettext("General settings"); + // line 33 + echo "
        +
          + "; + // line 35 + if (($context["has_server_selection"] ?? null)) { + // line 36 + echo "
        • + "; + // line 37 + echo PhpMyAdmin\Html\Generator::getImage("s_host"); + echo " + "; + // line 38 + echo ($context["server_selection"] ?? null); + echo " +
        • + "; + } + // line 41 + echo " + "; + // line 42 + if ((($context["server"] ?? null) > 0)) { + // line 43 + echo " "; + if (($context["has_change_password_link"] ?? null)) { + // line 44 + echo "
        • + + "; + // line 46 + echo PhpMyAdmin\Html\Generator::getIcon("s_passwd", _gettext("Change password"), true); + echo " + +
        • + "; + } + // line 50 + echo " +
        • +
          + "; + // line 53 + echo PhpMyAdmin\Url::getHiddenInputs(null, null, 4, "collation_connection"); + echo " +
          + +
          + "; + // line 61 + if ( !twig_test_empty(($context["charsets"] ?? null))) { + // line 62 + echo "
          + +
          + "; + } + // line 78 + echo "
          +
        • + +
        • + + "; + // line 83 + echo PhpMyAdmin\Html\Generator::getIcon("b_tblops", _gettext("More settings"), true); + echo " + +
        • + "; + } + // line 87 + echo "
        +
        + "; + } + // line 90 + echo " +
        +
        + "; +echo _gettext("Appearance settings"); + // line 94 + echo "
        +
          + "; + // line 96 + if ( !twig_test_empty(($context["available_languages"] ?? null))) { + // line 97 + echo "
        • +
          + "; + // line 99 + echo PhpMyAdmin\Url::getHiddenInputs(["db" => ($context["db"] ?? null), "table" => ($context["table"] ?? null)]); + echo " +
          + +
          +
          + +
          +
          +
        • + "; + } + // line 124 + echo " + "; + // line 125 + if (($context["has_theme_manager"] ?? null)) { + // line 126 + echo "
        • +
          + "; + // line 128 + echo PhpMyAdmin\Url::getHiddenInputs(); + echo " +
          + +
          +
          +
          + + +
          +
          +
          +
        • + "; + } + // line 149 + echo "
        +
        +
        + +
        + "; + // line 154 + if ( !twig_test_empty(($context["database_server"] ?? null))) { + // line 155 + echo "
        +
        + "; +echo _gettext("Database server"); + // line 158 + echo "
        +
          +
        • + "; +echo _gettext("Server:"); + // line 162 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "host", [], "any", false, false, false, 162), "html", null, true); + echo " +
        • +
        • + "; +echo _gettext("Server type:"); + // line 166 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "type", [], "any", false, false, false, 166), "html", null, true); + echo " +
        • +
        • + "; +echo _gettext("Server connection:"); + // line 170 + echo " "; + echo twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "connection", [], "any", false, false, false, 170); + echo " +
        • +
        • + "; +echo _gettext("Server version:"); + // line 174 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "version", [], "any", false, false, false, 174), "html", null, true); + echo " +
        • +
        • + "; +echo _gettext("Protocol version:"); + // line 178 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "protocol", [], "any", false, false, false, 178), "html", null, true); + echo " +
        • +
        • + "; +echo _gettext("User:"); + // line 182 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "user", [], "any", false, false, false, 182), "html", null, true); + echo " +
        • +
        • + "; +echo _gettext("Server charset:"); + // line 186 + echo " + "; + // line 187 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "charset", [], "any", false, false, false, 187), "html", null, true); + echo " + +
        • +
        +
        + "; + } + // line 193 + echo " + "; + // line 194 + if (( !twig_test_empty(($context["web_server"] ?? null)) || ($context["show_php_info"] ?? null))) { + // line 195 + echo "
        +
        + "; +echo _gettext("Web server"); + // line 198 + echo "
        +
          + "; + // line 200 + if ( !twig_test_empty(($context["web_server"] ?? null))) { + // line 201 + echo " "; + if ( !(null === twig_get_attribute($this->env, $this->source, ($context["web_server"] ?? null), "software", [], "any", false, false, false, 201))) { + // line 202 + echo "
        • + "; + // line 203 + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["web_server"] ?? null), "software", [], "any", false, false, false, 203), "html", null, true); + echo " +
        • + "; + } + // line 206 + echo "
        • + "; +echo _gettext("Database client version:"); + // line 208 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["web_server"] ?? null), "database", [], "any", false, false, false, 208), "html", null, true); + echo " +
        • +
        • + "; +echo _gettext("PHP extension:"); + // line 212 + echo " "; + $context['_parent'] = $context; + $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env, $this->source, ($context["web_server"] ?? null), "php_extensions", [], "any", false, false, false, 212)); + foreach ($context['_seq'] as $context["_key"] => $context["extension"]) { + // line 213 + echo " "; + echo twig_escape_filter($this->env, $context["extension"], "html", null, true); + echo " + "; + // line 214 + echo PhpMyAdmin\Html\Generator::showPHPDocumentation((("book." . $context["extension"]) . ".php")); + echo " + "; + } + $_parent = $context['_parent']; + unset($context['_seq'], $context['_iterated'], $context['_key'], $context['extension'], $context['_parent'], $context['loop']); + $context = array_intersect_key($context, $_parent) + $_parent; + // line 216 + echo "
        • +
        • + "; +echo _gettext("PHP version:"); + // line 219 + echo " "; + echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["web_server"] ?? null), "php_version", [], "any", false, false, false, 219), "html", null, true); + echo " +
        • + "; + } + // line 222 + echo " "; + if (($context["show_php_info"] ?? null)) { + // line 223 + echo "
        • + + "; +echo _gettext("Show PHP information"); + // line 226 + echo " +
        • + "; + } + // line 229 + echo "
        +
        + "; + } + // line 232 + echo " + +
        +
        +
        +
        + +"; + // line 279 + if (($context["has_theme_manager"] ?? null)) { + // line 280 + echo " +"; + } + // line 302 + echo " +"; + // line 303 + echo ($context["config_storage_message"] ?? null); + echo " +"; + } + + public function getTemplateName() + { + return "home/index.twig"; + } + + public function isTraitable() + { + return false; + } + + public function getDebugInfo() + { + return array ( 679 => 303, 676 => 302, 668 => 296, 661 => 294, 658 => 293, 651 => 289, 644 => 285, 640 => 284, 633 => 280, 631 => 279, 620 => 270, 615 => 268, 610 => 265, 605 => 263, 600 => 260, 595 => 258, 590 => 255, 585 => 253, 580 => 250, 575 => 248, 570 => 245, 565 => 243, 558 => 240, 553 => 238, 545 => 232, 540 => 229, 535 => 226, 530 => 224, 527 => 223, 524 => 222, 517 => 219, 512 => 216, 504 => 214, 499 => 213, 494 => 212, 486 => 208, 482 => 206, 476 => 203, 473 => 202, 470 => 201, 468 => 200, 464 => 198, 459 => 195, 457 => 194, 454 => 193, 445 => 187, 442 => 186, 434 => 182, 426 => 178, 418 => 174, 410 => 170, 402 => 166, 394 => 162, 388 => 158, 383 => 155, 381 => 154, 374 => 149, 366 => 143, 361 => 140, 348 => 138, 344 => 137, 335 => 131, 329 => 128, 325 => 127, 322 => 126, 320 => 125, 317 => 124, 310 => 119, 303 => 117, 301 => 116, 295 => 115, 291 => 114, 282 => 109, 278 => 107, 276 => 105, 273 => 104, 268 => 102, 262 => 99, 258 => 98, 255 => 97, 253 => 96, 249 => 94, 243 => 90, 238 => 87, 231 => 83, 227 => 82, 221 => 78, 216 => 75, 209 => 73, 202 => 71, 200 => 70, 192 => 69, 188 => 68, 181 => 67, 177 => 66, 173 => 64, 168 => 62, 166 => 61, 159 => 58, 154 => 56, 148 => 53, 144 => 52, 140 => 50, 133 => 46, 129 => 45, 126 => 44, 123 => 43, 121 => 42, 118 => 41, 112 => 38, 108 => 37, 105 => 36, 103 => 35, 99 => 33, 93 => 29, 88 => 26, 86 => 21, 83 => 25, 80 => 22, 78 => 21, 74 => 19, 69 => 16, 66 => 15, 64 => 14, 57 => 10, 51 => 7, 46 => 5, 43 => 4, 39 => 2, 37 => 1,); + } + + public function getSourceContext() + { + return new Source("", "home/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\home\\index.twig"); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/LICENSE b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/LICENSE new file mode 100644 index 0000000..d45a356 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2017, Ben Scholzen 'DASPRiD' +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/README.md b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/README.md new file mode 100644 index 0000000..9c099fe --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/README.md @@ -0,0 +1,39 @@ +# QR Code generator + +[![PHP CI](https://github.com/Bacon/BaconQrCode/actions/workflows/ci.yml/badge.svg)](https://github.com/Bacon/BaconQrCode/actions/workflows/ci.yml) +[![codecov](https://codecov.io/gh/Bacon/BaconQrCode/branch/master/graph/badge.svg?token=rD0HcAiEEx)](https://codecov.io/gh/Bacon/BaconQrCode) +[![Latest Stable Version](https://poser.pugx.org/bacon/bacon-qr-code/v/stable)](https://packagist.org/packages/bacon/bacon-qr-code) +[![Total Downloads](https://poser.pugx.org/bacon/bacon-qr-code/downloads)](https://packagist.org/packages/bacon/bacon-qr-code) +[![License](https://poser.pugx.org/bacon/bacon-qr-code/license)](https://packagist.org/packages/bacon/bacon-qr-code) + + +## Introduction +BaconQrCode is a port of QR code portion of the ZXing library. It currently +only features the encoder part, but could later receive the decoder part as +well. + +As the Reed Solomon codec implementation of the ZXing library performs quite +slow in PHP, it was exchanged with the implementation by Phil Karn. + + +## Example usage +```php +use BaconQrCode\Renderer\ImageRenderer; +use BaconQrCode\Renderer\Image\ImagickImageBackEnd; +use BaconQrCode\Renderer\RendererStyle\RendererStyle; +use BaconQrCode\Writer; + +$renderer = new ImageRenderer( + new RendererStyle(400), + new ImagickImageBackEnd() +); +$writer = new Writer($renderer); +$writer->writeFile('Hello World!', 'qrcode.png'); +``` + +## Available image renderer back ends +BaconQrCode comes with multiple back ends for rendering images. Currently included are the following: + +- `ImagickImageBackEnd`: renders raster images using the Imagick library +- `SvgImageBackEnd`: renders SVG files using XMLWriter +- `EpsImageBackEnd`: renders EPS files diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php new file mode 100644 index 0000000..a9a1d07 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php @@ -0,0 +1,49 @@ +count = $count; + $this->dataCodewords = $dataCodewords; + } + + /** + * Returns how many times the block is used. + */ + public function getCount() : int + { + return $this->count; + } + + /** + * Returns the number of data codewords. + */ + public function getDataCodewords() : int + { + return $this->dataCodewords; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php new file mode 100644 index 0000000..b58cc0a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php @@ -0,0 +1,150 @@ +> + */ + private $bytes; + + /** + * Width of the matrix. + * + * @var int + */ + private $width; + + /** + * Height of the matrix. + * + * @var int + */ + private $height; + + public function __construct(int $width, int $height) + { + $this->height = $height; + $this->width = $width; + $this->bytes = new SplFixedArray($height); + + for ($y = 0; $y < $height; ++$y) { + $this->bytes[$y] = SplFixedArray::fromArray(array_fill(0, $width, 0)); + } + } + + /** + * Gets the width of the matrix. + */ + public function getWidth() : int + { + return $this->width; + } + + /** + * Gets the height of the matrix. + */ + public function getHeight() : int + { + return $this->height; + } + + /** + * Gets the internal representation of the matrix. + * + * @return SplFixedArray> + */ + public function getArray() : SplFixedArray + { + return $this->bytes; + } + + /** + * @return Traversable + */ + public function getBytes() : Traversable + { + foreach ($this->bytes as $row) { + foreach ($row as $byte) { + yield $byte; + } + } + } + + /** + * Gets the byte for a specific position. + */ + public function get(int $x, int $y) : int + { + return $this->bytes[$y][$x]; + } + + /** + * Sets the byte for a specific position. + */ + public function set(int $x, int $y, int $value) : void + { + $this->bytes[$y][$x] = $value; + } + + /** + * Clears the matrix with a specific value. + */ + public function clear(int $value) : void + { + for ($y = 0; $y < $this->height; ++$y) { + for ($x = 0; $x < $this->width; ++$x) { + $this->bytes[$y][$x] = $value; + } + } + } + + public function __clone() + { + $this->bytes = clone $this->bytes; + + foreach ($this->bytes as $index => $row) { + $this->bytes[$index] = clone $row; + } + } + + /** + * Returns a string representation of the matrix. + */ + public function __toString() : string + { + $result = ''; + + for ($y = 0; $y < $this->height; $y++) { + for ($x = 0; $x < $this->width; $x++) { + switch ($this->bytes[$y][$x]) { + case 0: + $result .= ' 0'; + break; + + case 1: + $result .= ' 1'; + break; + + default: + $result .= ' '; + break; + } + } + + $result .= "\n"; + } + + return $result; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php new file mode 100644 index 0000000..cf4fde0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php @@ -0,0 +1,668 @@ +getSize() + + $mode->getCharacterCountBits(Version::getVersionForNumber(1)) + + $dataBits->getSize(); + $provisionalVersion = self::chooseVersion($provisionalBitsNeeded, $ecLevel); + + // Use that guess to calculate the right version. I am still not sure + // this works in 100% of cases. + $bitsNeeded = $headerBits->getSize() + + $mode->getCharacterCountBits($provisionalVersion) + + $dataBits->getSize(); + $version = self::chooseVersion($bitsNeeded, $ecLevel); + + if (null !== $forcedVersion) { + // Forced version check + if ($version->getVersionNumber() <= $forcedVersion->getVersionNumber()) { + // Calculated minimum version is same or equal as forced version + $version = $forcedVersion; + } else { + throw new WriterException( + 'Invalid version! Calculated version: ' + . $version->getVersionNumber() + . ', requested version: ' + . $forcedVersion->getVersionNumber() + ); + } + } + + $headerAndDataBits = new BitArray(); + $headerAndDataBits->appendBitArray($headerBits); + + // Find "length" of main segment and write it. + $numLetters = (Mode::BYTE() === $mode ? $dataBits->getSizeInBytes() : strlen($content)); + self::appendLengthInfo($numLetters, $version, $mode, $headerAndDataBits); + + // Put data together into the overall payload. + $headerAndDataBits->appendBitArray($dataBits); + $ecBlocks = $version->getEcBlocksForLevel($ecLevel); + $numDataBytes = $version->getTotalCodewords() - $ecBlocks->getTotalEcCodewords(); + + // Terminate the bits properly. + self::terminateBits($numDataBytes, $headerAndDataBits); + + // Interleave data bits with error correction code. + $finalBits = self::interleaveWithEcBytes( + $headerAndDataBits, + $version->getTotalCodewords(), + $numDataBytes, + $ecBlocks->getNumBlocks() + ); + + // Choose the mask pattern. + $dimension = $version->getDimensionForVersion(); + $matrix = new ByteMatrix($dimension, $dimension); + $maskPattern = self::chooseMaskPattern($finalBits, $ecLevel, $version, $matrix); + + // Build the matrix. + MatrixUtil::buildMatrix($finalBits, $ecLevel, $version, $maskPattern, $matrix); + + return new QrCode($mode, $ecLevel, $version, $maskPattern, $matrix); + } + + /** + * Gets the alphanumeric code for a byte. + */ + private static function getAlphanumericCode(int $code) : int + { + if (isset(self::ALPHANUMERIC_TABLE[$code])) { + return self::ALPHANUMERIC_TABLE[$code]; + } + + return -1; + } + + /** + * Chooses the best mode for a given content. + */ + private static function chooseMode(string $content, string $encoding = null) : Mode + { + if (null !== $encoding && 0 === strcasecmp($encoding, 'SHIFT-JIS')) { + return self::isOnlyDoubleByteKanji($content) ? Mode::KANJI() : Mode::BYTE(); + } + + $hasNumeric = false; + $hasAlphanumeric = false; + $contentLength = strlen($content); + + for ($i = 0; $i < $contentLength; ++$i) { + $char = $content[$i]; + + if (ctype_digit($char)) { + $hasNumeric = true; + } elseif (-1 !== self::getAlphanumericCode(ord($char))) { + $hasAlphanumeric = true; + } else { + return Mode::BYTE(); + } + } + + if ($hasAlphanumeric) { + return Mode::ALPHANUMERIC(); + } elseif ($hasNumeric) { + return Mode::NUMERIC(); + } + + return Mode::BYTE(); + } + + /** + * Calculates the mask penalty for a matrix. + */ + private static function calculateMaskPenalty(ByteMatrix $matrix) : int + { + return ( + MaskUtil::applyMaskPenaltyRule1($matrix) + + MaskUtil::applyMaskPenaltyRule2($matrix) + + MaskUtil::applyMaskPenaltyRule3($matrix) + + MaskUtil::applyMaskPenaltyRule4($matrix) + ); + } + + /** + * Checks if content only consists of double-byte kanji characters. + */ + private static function isOnlyDoubleByteKanji(string $content) : bool + { + $bytes = @iconv('utf-8', 'SHIFT-JIS', $content); + + if (false === $bytes) { + return false; + } + + $length = strlen($bytes); + + if (0 !== $length % 2) { + return false; + } + + for ($i = 0; $i < $length; $i += 2) { + $byte = $bytes[$i] & 0xff; + + if (($byte < 0x81 || $byte > 0x9f) && $byte < 0xe0 || $byte > 0xeb) { + return false; + } + } + + return true; + } + + /** + * Chooses the best mask pattern for a matrix. + */ + private static function chooseMaskPattern( + BitArray $bits, + ErrorCorrectionLevel $ecLevel, + Version $version, + ByteMatrix $matrix + ) : int { + $minPenalty = PHP_INT_MAX; + $bestMaskPattern = -1; + + for ($maskPattern = 0; $maskPattern < QrCode::NUM_MASK_PATTERNS; ++$maskPattern) { + MatrixUtil::buildMatrix($bits, $ecLevel, $version, $maskPattern, $matrix); + $penalty = self::calculateMaskPenalty($matrix); + + if ($penalty < $minPenalty) { + $minPenalty = $penalty; + $bestMaskPattern = $maskPattern; + } + } + + return $bestMaskPattern; + } + + /** + * Chooses the best version for the input. + * + * @throws WriterException if data is too big + */ + private static function chooseVersion(int $numInputBits, ErrorCorrectionLevel $ecLevel) : Version + { + for ($versionNum = 1; $versionNum <= 40; ++$versionNum) { + $version = Version::getVersionForNumber($versionNum); + $numBytes = $version->getTotalCodewords(); + + $ecBlocks = $version->getEcBlocksForLevel($ecLevel); + $numEcBytes = $ecBlocks->getTotalEcCodewords(); + + $numDataBytes = $numBytes - $numEcBytes; + $totalInputBytes = intdiv($numInputBits + 8, 8); + + if ($numDataBytes >= $totalInputBytes) { + return $version; + } + } + + throw new WriterException('Data too big'); + } + + /** + * Terminates the bits in a bit array. + * + * @throws WriterException if data bits cannot fit in the QR code + * @throws WriterException if bits size does not equal the capacity + */ + private static function terminateBits(int $numDataBytes, BitArray $bits) : void + { + $capacity = $numDataBytes << 3; + + if ($bits->getSize() > $capacity) { + throw new WriterException('Data bits cannot fit in the QR code'); + } + + for ($i = 0; $i < 4 && $bits->getSize() < $capacity; ++$i) { + $bits->appendBit(false); + } + + $numBitsInLastByte = $bits->getSize() & 0x7; + + if ($numBitsInLastByte > 0) { + for ($i = $numBitsInLastByte; $i < 8; ++$i) { + $bits->appendBit(false); + } + } + + $numPaddingBytes = $numDataBytes - $bits->getSizeInBytes(); + + for ($i = 0; $i < $numPaddingBytes; ++$i) { + $bits->appendBits(0 === ($i & 0x1) ? 0xec : 0x11, 8); + } + + if ($bits->getSize() !== $capacity) { + throw new WriterException('Bits size does not equal capacity'); + } + } + + /** + * Gets number of data- and EC bytes for a block ID. + * + * @return int[] + * @throws WriterException if block ID is too large + * @throws WriterException if EC bytes mismatch + * @throws WriterException if RS blocks mismatch + * @throws WriterException if total bytes mismatch + */ + private static function getNumDataBytesAndNumEcBytesForBlockId( + int $numTotalBytes, + int $numDataBytes, + int $numRsBlocks, + int $blockId + ) : array { + if ($blockId >= $numRsBlocks) { + throw new WriterException('Block ID too large'); + } + + $numRsBlocksInGroup2 = $numTotalBytes % $numRsBlocks; + $numRsBlocksInGroup1 = $numRsBlocks - $numRsBlocksInGroup2; + $numTotalBytesInGroup1 = intdiv($numTotalBytes, $numRsBlocks); + $numTotalBytesInGroup2 = $numTotalBytesInGroup1 + 1; + $numDataBytesInGroup1 = intdiv($numDataBytes, $numRsBlocks); + $numDataBytesInGroup2 = $numDataBytesInGroup1 + 1; + $numEcBytesInGroup1 = $numTotalBytesInGroup1 - $numDataBytesInGroup1; + $numEcBytesInGroup2 = $numTotalBytesInGroup2 - $numDataBytesInGroup2; + + if ($numEcBytesInGroup1 !== $numEcBytesInGroup2) { + throw new WriterException('EC bytes mismatch'); + } + + if ($numRsBlocks !== $numRsBlocksInGroup1 + $numRsBlocksInGroup2) { + throw new WriterException('RS blocks mismatch'); + } + + if ($numTotalBytes !== + (($numDataBytesInGroup1 + $numEcBytesInGroup1) * $numRsBlocksInGroup1) + + (($numDataBytesInGroup2 + $numEcBytesInGroup2) * $numRsBlocksInGroup2) + ) { + throw new WriterException('Total bytes mismatch'); + } + + if ($blockId < $numRsBlocksInGroup1) { + return [$numDataBytesInGroup1, $numEcBytesInGroup1]; + } else { + return [$numDataBytesInGroup2, $numEcBytesInGroup2]; + } + } + + /** + * Interleaves data with EC bytes. + * + * @throws WriterException if number of bits and data bytes does not match + * @throws WriterException if data bytes does not match offset + * @throws WriterException if an interleaving error occurs + */ + private static function interleaveWithEcBytes( + BitArray $bits, + int $numTotalBytes, + int $numDataBytes, + int $numRsBlocks + ) : BitArray { + if ($bits->getSizeInBytes() !== $numDataBytes) { + throw new WriterException('Number of bits and data bytes does not match'); + } + + $dataBytesOffset = 0; + $maxNumDataBytes = 0; + $maxNumEcBytes = 0; + + $blocks = new SplFixedArray($numRsBlocks); + + for ($i = 0; $i < $numRsBlocks; ++$i) { + list($numDataBytesInBlock, $numEcBytesInBlock) = self::getNumDataBytesAndNumEcBytesForBlockId( + $numTotalBytes, + $numDataBytes, + $numRsBlocks, + $i + ); + + $size = $numDataBytesInBlock; + $dataBytes = $bits->toBytes(8 * $dataBytesOffset, $size); + $ecBytes = self::generateEcBytes($dataBytes, $numEcBytesInBlock); + $blocks[$i] = new BlockPair($dataBytes, $ecBytes); + + $maxNumDataBytes = max($maxNumDataBytes, $size); + $maxNumEcBytes = max($maxNumEcBytes, count($ecBytes)); + $dataBytesOffset += $numDataBytesInBlock; + } + + if ($numDataBytes !== $dataBytesOffset) { + throw new WriterException('Data bytes does not match offset'); + } + + $result = new BitArray(); + + for ($i = 0; $i < $maxNumDataBytes; ++$i) { + foreach ($blocks as $block) { + $dataBytes = $block->getDataBytes(); + + if ($i < count($dataBytes)) { + $result->appendBits($dataBytes[$i], 8); + } + } + } + + for ($i = 0; $i < $maxNumEcBytes; ++$i) { + foreach ($blocks as $block) { + $ecBytes = $block->getErrorCorrectionBytes(); + + if ($i < count($ecBytes)) { + $result->appendBits($ecBytes[$i], 8); + } + } + } + + if ($numTotalBytes !== $result->getSizeInBytes()) { + throw new WriterException( + 'Interleaving error: ' . $numTotalBytes . ' and ' . $result->getSizeInBytes() . ' differ' + ); + } + + return $result; + } + + /** + * Generates EC bytes for given data. + * + * @param SplFixedArray $dataBytes + * @return SplFixedArray + */ + private static function generateEcBytes(SplFixedArray $dataBytes, int $numEcBytesInBlock) : SplFixedArray + { + $numDataBytes = count($dataBytes); + $toEncode = new SplFixedArray($numDataBytes + $numEcBytesInBlock); + + for ($i = 0; $i < $numDataBytes; $i++) { + $toEncode[$i] = $dataBytes[$i] & 0xff; + } + + $ecBytes = new SplFixedArray($numEcBytesInBlock); + $codec = self::getCodec($numDataBytes, $numEcBytesInBlock); + $codec->encode($toEncode, $ecBytes); + + return $ecBytes; + } + + /** + * Gets an RS codec and caches it. + */ + private static function getCodec(int $numDataBytes, int $numEcBytesInBlock) : ReedSolomonCodec + { + $cacheId = $numDataBytes . '-' . $numEcBytesInBlock; + + if (isset(self::$codecs[$cacheId])) { + return self::$codecs[$cacheId]; + } + + return self::$codecs[$cacheId] = new ReedSolomonCodec( + 8, + 0x11d, + 0, + 1, + $numEcBytesInBlock, + 255 - $numDataBytes - $numEcBytesInBlock + ); + } + + /** + * Appends mode information to a bit array. + */ + private static function appendModeInfo(Mode $mode, BitArray $bits) : void + { + $bits->appendBits($mode->getBits(), 4); + } + + /** + * Appends length information to a bit array. + * + * @throws WriterException if num letters is bigger than expected + */ + private static function appendLengthInfo(int $numLetters, Version $version, Mode $mode, BitArray $bits) : void + { + $numBits = $mode->getCharacterCountBits($version); + + if ($numLetters >= (1 << $numBits)) { + throw new WriterException($numLetters . ' is bigger than ' . ((1 << $numBits) - 1)); + } + + $bits->appendBits($numLetters, $numBits); + } + + /** + * Appends bytes to a bit array in a specific mode. + * + * @throws WriterException if an invalid mode was supplied + */ + private static function appendBytes(string $content, Mode $mode, BitArray $bits, string $encoding) : void + { + switch ($mode) { + case Mode::NUMERIC(): + self::appendNumericBytes($content, $bits); + break; + + case Mode::ALPHANUMERIC(): + self::appendAlphanumericBytes($content, $bits); + break; + + case Mode::BYTE(): + self::append8BitBytes($content, $bits, $encoding); + break; + + case Mode::KANJI(): + self::appendKanjiBytes($content, $bits); + break; + + default: + throw new WriterException('Invalid mode: ' . $mode); + } + } + + /** + * Appends numeric bytes to a bit array. + */ + private static function appendNumericBytes(string $content, BitArray $bits) : void + { + $length = strlen($content); + $i = 0; + + while ($i < $length) { + $num1 = (int) $content[$i]; + + if ($i + 2 < $length) { + // Encode three numeric letters in ten bits. + $num2 = (int) $content[$i + 1]; + $num3 = (int) $content[$i + 2]; + $bits->appendBits($num1 * 100 + $num2 * 10 + $num3, 10); + $i += 3; + } elseif ($i + 1 < $length) { + // Encode two numeric letters in seven bits. + $num2 = (int) $content[$i + 1]; + $bits->appendBits($num1 * 10 + $num2, 7); + $i += 2; + } else { + // Encode one numeric letter in four bits. + $bits->appendBits($num1, 4); + ++$i; + } + } + } + + /** + * Appends alpha-numeric bytes to a bit array. + * + * @throws WriterException if an invalid alphanumeric code was found + */ + private static function appendAlphanumericBytes(string $content, BitArray $bits) : void + { + $length = strlen($content); + $i = 0; + + while ($i < $length) { + $code1 = self::getAlphanumericCode(ord($content[$i])); + + if (-1 === $code1) { + throw new WriterException('Invalid alphanumeric code'); + } + + if ($i + 1 < $length) { + $code2 = self::getAlphanumericCode(ord($content[$i + 1])); + + if (-1 === $code2) { + throw new WriterException('Invalid alphanumeric code'); + } + + // Encode two alphanumeric letters in 11 bits. + $bits->appendBits($code1 * 45 + $code2, 11); + $i += 2; + } else { + // Encode one alphanumeric letter in six bits. + $bits->appendBits($code1, 6); + ++$i; + } + } + } + + /** + * Appends regular 8-bit bytes to a bit array. + * + * @throws WriterException if content cannot be encoded to target encoding + */ + private static function append8BitBytes(string $content, BitArray $bits, string $encoding) : void + { + $bytes = @iconv('utf-8', $encoding, $content); + + if (false === $bytes) { + throw new WriterException('Could not encode content to ' . $encoding); + } + + $length = strlen($bytes); + + for ($i = 0; $i < $length; $i++) { + $bits->appendBits(ord($bytes[$i]), 8); + } + } + + /** + * Appends KANJI bytes to a bit array. + * + * @throws WriterException if content does not seem to be encoded in SHIFT-JIS + * @throws WriterException if an invalid byte sequence occurs + */ + private static function appendKanjiBytes(string $content, BitArray $bits) : void + { + if (strlen($content) % 2 > 0) { + // We just do a simple length check here. The for loop will check + // individual characters. + throw new WriterException('Content does not seem to be encoded in SHIFT-JIS'); + } + + $length = strlen($content); + + for ($i = 0; $i < $length; $i += 2) { + $byte1 = ord($content[$i]) & 0xff; + $byte2 = ord($content[$i + 1]) & 0xff; + $code = ($byte1 << 8) | $byte2; + + if ($code >= 0x8140 && $code <= 0x9ffc) { + $subtracted = $code - 0x8140; + } elseif ($code >= 0xe040 && $code <= 0xebbf) { + $subtracted = $code - 0xc140; + } else { + throw new WriterException('Invalid byte sequence'); + } + + $encoded = (($subtracted >> 8) * 0xc0) + ($subtracted & 0xff); + + $bits->appendBits($encoded, 13); + } + } + + /** + * Appends ECI information to a bit array. + */ + private static function appendEci(CharacterSetEci $eci, BitArray $bits) : void + { + $mode = Mode::ECI(); + $bits->appendBits($mode->getBits(), 4); + $bits->appendBits($eci->getValue(), 8); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php new file mode 100644 index 0000000..0967e29 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php @@ -0,0 +1,513 @@ +clear(-1); + } + + /** + * Builds a complete matrix. + */ + public static function buildMatrix( + BitArray $dataBits, + ErrorCorrectionLevel $level, + Version $version, + int $maskPattern, + ByteMatrix $matrix + ) : void { + self::clearMatrix($matrix); + self::embedBasicPatterns($version, $matrix); + self::embedTypeInfo($level, $maskPattern, $matrix); + self::maybeEmbedVersionInfo($version, $matrix); + self::embedDataBits($dataBits, $maskPattern, $matrix); + } + + /** + * Removes the position detection patterns from a matrix. + * + * This can be useful if you need to render those patterns separately. + */ + public static function removePositionDetectionPatterns(ByteMatrix $matrix) : void + { + $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]); + + self::removePositionDetectionPattern(0, 0, $matrix); + self::removePositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix); + self::removePositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix); + } + + /** + * Embeds type information into a matrix. + */ + private static function embedTypeInfo(ErrorCorrectionLevel $level, int $maskPattern, ByteMatrix $matrix) : void + { + $typeInfoBits = new BitArray(); + self::makeTypeInfoBits($level, $maskPattern, $typeInfoBits); + + $typeInfoBitsSize = $typeInfoBits->getSize(); + + for ($i = 0; $i < $typeInfoBitsSize; ++$i) { + $bit = $typeInfoBits->get($typeInfoBitsSize - 1 - $i); + + $x1 = self::TYPE_INFO_COORDINATES[$i][0]; + $y1 = self::TYPE_INFO_COORDINATES[$i][1]; + + $matrix->set($x1, $y1, (int) $bit); + + if ($i < 8) { + $x2 = $matrix->getWidth() - $i - 1; + $y2 = 8; + } else { + $x2 = 8; + $y2 = $matrix->getHeight() - 7 + ($i - 8); + } + + $matrix->set($x2, $y2, (int) $bit); + } + } + + /** + * Generates type information bits and appends them to a bit array. + * + * @throws RuntimeException if bit array resulted in invalid size + */ + private static function makeTypeInfoBits(ErrorCorrectionLevel $level, int $maskPattern, BitArray $bits) : void + { + $typeInfo = ($level->getBits() << 3) | $maskPattern; + $bits->appendBits($typeInfo, 5); + + $bchCode = self::calculateBchCode($typeInfo, self::TYPE_INFO_POLY); + $bits->appendBits($bchCode, 10); + + $maskBits = new BitArray(); + $maskBits->appendBits(self::TYPE_INFO_MASK_PATTERN, 15); + $bits->xorBits($maskBits); + + if (15 !== $bits->getSize()) { + throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize()); + } + } + + /** + * Embeds version information if required. + */ + private static function maybeEmbedVersionInfo(Version $version, ByteMatrix $matrix) : void + { + if ($version->getVersionNumber() < 7) { + return; + } + + $versionInfoBits = new BitArray(); + self::makeVersionInfoBits($version, $versionInfoBits); + + $bitIndex = 6 * 3 - 1; + + for ($i = 0; $i < 6; ++$i) { + for ($j = 0; $j < 3; ++$j) { + $bit = $versionInfoBits->get($bitIndex); + --$bitIndex; + + $matrix->set($i, $matrix->getHeight() - 11 + $j, (int) $bit); + $matrix->set($matrix->getHeight() - 11 + $j, $i, (int) $bit); + } + } + } + + /** + * Generates version information bits and appends them to a bit array. + * + * @throws RuntimeException if bit array resulted in invalid size + */ + private static function makeVersionInfoBits(Version $version, BitArray $bits) : void + { + $bits->appendBits($version->getVersionNumber(), 6); + + $bchCode = self::calculateBchCode($version->getVersionNumber(), self::VERSION_INFO_POLY); + $bits->appendBits($bchCode, 12); + + if (18 !== $bits->getSize()) { + throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize()); + } + } + + /** + * Calculates the BCH code for a value and a polynomial. + */ + private static function calculateBchCode(int $value, int $poly) : int + { + $msbSetInPoly = self::findMsbSet($poly); + $value <<= $msbSetInPoly - 1; + + while (self::findMsbSet($value) >= $msbSetInPoly) { + $value ^= $poly << (self::findMsbSet($value) - $msbSetInPoly); + } + + return $value; + } + + /** + * Finds and MSB set. + */ + private static function findMsbSet(int $value) : int + { + $numDigits = 0; + + while (0 !== $value) { + $value >>= 1; + ++$numDigits; + } + + return $numDigits; + } + + /** + * Embeds basic patterns into a matrix. + */ + private static function embedBasicPatterns(Version $version, ByteMatrix $matrix) : void + { + self::embedPositionDetectionPatternsAndSeparators($matrix); + self::embedDarkDotAtLeftBottomCorner($matrix); + self::maybeEmbedPositionAdjustmentPatterns($version, $matrix); + self::embedTimingPatterns($matrix); + } + + /** + * Embeds position detection patterns and separators into a byte matrix. + */ + private static function embedPositionDetectionPatternsAndSeparators(ByteMatrix $matrix) : void + { + $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]); + + self::embedPositionDetectionPattern(0, 0, $matrix); + self::embedPositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix); + self::embedPositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix); + + $hspWidth = 8; + + self::embedHorizontalSeparationPattern(0, $hspWidth - 1, $matrix); + self::embedHorizontalSeparationPattern($matrix->getWidth() - $hspWidth, $hspWidth - 1, $matrix); + self::embedHorizontalSeparationPattern(0, $matrix->getWidth() - $hspWidth, $matrix); + + $vspSize = 7; + + self::embedVerticalSeparationPattern($vspSize, 0, $matrix); + self::embedVerticalSeparationPattern($matrix->getHeight() - $vspSize - 1, 0, $matrix); + self::embedVerticalSeparationPattern($vspSize, $matrix->getHeight() - $vspSize, $matrix); + } + + /** + * Embeds a single position detection pattern into a byte matrix. + */ + private static function embedPositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void + { + for ($y = 0; $y < 7; ++$y) { + for ($x = 0; $x < 7; ++$x) { + $matrix->set($xStart + $x, $yStart + $y, self::POSITION_DETECTION_PATTERN[$y][$x]); + } + } + } + + private static function removePositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void + { + for ($y = 0; $y < 7; ++$y) { + for ($x = 0; $x < 7; ++$x) { + $matrix->set($xStart + $x, $yStart + $y, 0); + } + } + } + + /** + * Embeds a single horizontal separation pattern. + * + * @throws RuntimeException if a byte was already set + */ + private static function embedHorizontalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void + { + for ($x = 0; $x < 8; $x++) { + if (-1 !== $matrix->get($xStart + $x, $yStart)) { + throw new RuntimeException('Byte already set'); + } + + $matrix->set($xStart + $x, $yStart, 0); + } + } + + /** + * Embeds a single vertical separation pattern. + * + * @throws RuntimeException if a byte was already set + */ + private static function embedVerticalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void + { + for ($y = 0; $y < 7; $y++) { + if (-1 !== $matrix->get($xStart, $yStart + $y)) { + throw new RuntimeException('Byte already set'); + } + + $matrix->set($xStart, $yStart + $y, 0); + } + } + + /** + * Embeds a dot at the left bottom corner. + * + * @throws RuntimeException if a byte was already set to 0 + */ + private static function embedDarkDotAtLeftBottomCorner(ByteMatrix $matrix) : void + { + if (0 === $matrix->get(8, $matrix->getHeight() - 8)) { + throw new RuntimeException('Byte already set to 0'); + } + + $matrix->set(8, $matrix->getHeight() - 8, 1); + } + + /** + * Embeds position adjustment patterns if required. + */ + private static function maybeEmbedPositionAdjustmentPatterns(Version $version, ByteMatrix $matrix) : void + { + if ($version->getVersionNumber() < 2) { + return; + } + + $index = $version->getVersionNumber() - 1; + + $coordinates = self::POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[$index]; + $numCoordinates = count($coordinates); + + for ($i = 0; $i < $numCoordinates; ++$i) { + for ($j = 0; $j < $numCoordinates; ++$j) { + $y = $coordinates[$i]; + $x = $coordinates[$j]; + + if (null === $x || null === $y) { + continue; + } + + if (-1 === $matrix->get($x, $y)) { + self::embedPositionAdjustmentPattern($x - 2, $y - 2, $matrix); + } + } + } + } + + /** + * Embeds a single position adjustment pattern. + */ + private static function embedPositionAdjustmentPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void + { + for ($y = 0; $y < 5; $y++) { + for ($x = 0; $x < 5; $x++) { + $matrix->set($xStart + $x, $yStart + $y, self::POSITION_ADJUSTMENT_PATTERN[$y][$x]); + } + } + } + + /** + * Embeds timing patterns into a matrix. + */ + private static function embedTimingPatterns(ByteMatrix $matrix) : void + { + $matrixWidth = $matrix->getWidth(); + + for ($i = 8; $i < $matrixWidth - 8; ++$i) { + $bit = ($i + 1) % 2; + + if (-1 === $matrix->get($i, 6)) { + $matrix->set($i, 6, $bit); + } + + if (-1 === $matrix->get(6, $i)) { + $matrix->set(6, $i, $bit); + } + } + } + + /** + * Embeds "dataBits" using "getMaskPattern". + * + * For debugging purposes, it skips masking process if "getMaskPattern" is -1. See 8.7 of JISX0510:2004 (p.38) for + * how to embed data bits. + * + * @throws WriterException if not all bits could be consumed + */ + private static function embedDataBits(BitArray $dataBits, int $maskPattern, ByteMatrix $matrix) : void + { + $bitIndex = 0; + $direction = -1; + + // Start from the right bottom cell. + $x = $matrix->getWidth() - 1; + $y = $matrix->getHeight() - 1; + + while ($x > 0) { + // Skip vertical timing pattern. + if (6 === $x) { + --$x; + } + + while ($y >= 0 && $y < $matrix->getHeight()) { + for ($i = 0; $i < 2; $i++) { + $xx = $x - $i; + + // Skip the cell if it's not empty. + if (-1 !== $matrix->get($xx, $y)) { + continue; + } + + if ($bitIndex < $dataBits->getSize()) { + $bit = $dataBits->get($bitIndex); + ++$bitIndex; + } else { + // Padding bit. If there is no bit left, we'll fill the + // left cells with 0, as described in 8.4.9 of + // JISX0510:2004 (p. 24). + $bit = false; + } + + // Skip masking if maskPattern is -1. + if (-1 !== $maskPattern && MaskUtil::getDataMaskBit($maskPattern, $xx, $y)) { + $bit = ! $bit; + } + + $matrix->set($xx, $y, (int) $bit); + } + + $y += $direction; + } + + $direction = -$direction; + $y += $direction; + $x -= 2; + } + + // All bits should be consumed + if ($dataBits->getSize() !== $bitIndex) { + throw new WriterException('Not all bits consumed (' . $bitIndex . ' out of ' . $dataBits->getSize() .')'); + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php new file mode 100644 index 0000000..79e53af --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php @@ -0,0 +1,8 @@ + 100) { + throw new Exception\InvalidArgumentException('Cyan must be between 0 and 100'); + } + + if ($magenta < 0 || $magenta > 100) { + throw new Exception\InvalidArgumentException('Magenta must be between 0 and 100'); + } + + if ($yellow < 0 || $yellow > 100) { + throw new Exception\InvalidArgumentException('Yellow must be between 0 and 100'); + } + + if ($black < 0 || $black > 100) { + throw new Exception\InvalidArgumentException('Black must be between 0 and 100'); + } + + $this->cyan = $cyan; + $this->magenta = $magenta; + $this->yellow = $yellow; + $this->black = $black; + } + + public function getCyan() : int + { + return $this->cyan; + } + + public function getMagenta() : int + { + return $this->magenta; + } + + public function getYellow() : int + { + return $this->yellow; + } + + public function getBlack() : int + { + return $this->black; + } + + public function toRgb() : Rgb + { + $k = $this->black / 100; + $c = (-$k * $this->cyan + $k * 100 + $this->cyan) / 100; + $m = (-$k * $this->magenta + $k * 100 + $this->magenta) / 100; + $y = (-$k * $this->yellow + $k * 100 + $this->yellow) / 100; + + return new Rgb( + (int) (-$c * 255 + 255), + (int) (-$m * 255 + 255), + (int) (-$y * 255 + 255) + ); + } + + public function toCmyk() : Cmyk + { + return $this; + } + + public function toGray() : Gray + { + return $this->toRgb()->toGray(); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php new file mode 100644 index 0000000..0d03125 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php @@ -0,0 +1,38 @@ +externalEye = $externalEye; + $this->internalEye = $internalEye; + } + + public function getExternalPath() : Path + { + return $this->externalEye->getExternalPath(); + } + + public function getInternalPath() : Path + { + return $this->internalEye->getInternalPath(); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php new file mode 100644 index 0000000..ab68f3c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php @@ -0,0 +1,26 @@ +eps = "%!PS-Adobe-3.0 EPSF-3.0\n" + . "%%Creator: BaconQrCode\n" + . sprintf("%%%%BoundingBox: 0 0 %d %d \n", $size, $size) + . "%%BeginProlog\n" + . "save\n" + . "50 dict begin\n" + . "/q { gsave } bind def\n" + . "/Q { grestore } bind def\n" + . "/s { scale } bind def\n" + . "/t { translate } bind def\n" + . "/r { rotate } bind def\n" + . "/n { newpath } bind def\n" + . "/m { moveto } bind def\n" + . "/l { lineto } bind def\n" + . "/c { curveto } bind def\n" + . "/z { closepath } bind def\n" + . "/f { eofill } bind def\n" + . "/rgb { setrgbcolor } bind def\n" + . "/cmyk { setcmykcolor } bind def\n" + . "/gray { setgray } bind def\n" + . "%%EndProlog\n" + . "1 -1 s\n" + . sprintf("0 -%d t\n", $size); + + if ($backgroundColor instanceof Alpha && 0 === $backgroundColor->getAlpha()) { + return; + } + + $this->eps .= wordwrap( + '0 0 m' + . sprintf(' %s 0 l', (string) $size) + . sprintf(' %s %s l', (string) $size, (string) $size) + . sprintf(' 0 %s l', (string) $size) + . ' z' + . ' ' .$this->getColorSetString($backgroundColor) . " f\n", + 75, + "\n " + ); + } + + public function scale(float $size) : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= sprintf("%1\$s %1\$s s\n", round($size, self::PRECISION)); + } + + public function translate(float $x, float $y) : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= sprintf("%s %s t\n", round($x, self::PRECISION), round($y, self::PRECISION)); + } + + public function rotate(int $degrees) : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= sprintf("%d r\n", $degrees); + } + + public function push() : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= "q\n"; + } + + public function pop() : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= "Q\n"; + } + + public function drawPathWithColor(Path $path, ColorInterface $color) : void + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $fromX = 0; + $fromY = 0; + $this->eps .= wordwrap( + 'n ' + . $this->drawPathOperations($path, $fromX, $fromY) + . ' ' . $this->getColorSetString($color) . " f\n", + 75, + "\n " + ); + } + + public function drawPathWithGradient( + Path $path, + Gradient $gradient, + float $x, + float $y, + float $width, + float $height + ) : void { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $fromX = 0; + $fromY = 0; + $this->eps .= wordwrap( + 'q n ' . $this->drawPathOperations($path, $fromX, $fromY) . "\n", + 75, + "\n " + ); + + $this->createGradientFill($gradient, $x, $y, $width, $height); + } + + public function done() : string + { + if (null === $this->eps) { + throw new RuntimeException('No image has been started'); + } + + $this->eps .= "%%TRAILER\nend restore\n%%EOF"; + $blob = $this->eps; + $this->eps = null; + + return $blob; + } + + private function drawPathOperations(Iterable $ops, &$fromX, &$fromY) : string + { + $pathData = []; + + foreach ($ops as $op) { + switch (true) { + case $op instanceof Move: + $fromX = $toX = round($op->getX(), self::PRECISION); + $fromY = $toY = round($op->getY(), self::PRECISION); + $pathData[] = sprintf('%s %s m', $toX, $toY); + break; + + case $op instanceof Line: + $fromX = $toX = round($op->getX(), self::PRECISION); + $fromY = $toY = round($op->getY(), self::PRECISION); + $pathData[] = sprintf('%s %s l', $toX, $toY); + break; + + case $op instanceof EllipticArc: + $pathData[] = $this->drawPathOperations($op->toCurves($fromX, $fromY), $fromX, $fromY); + break; + + case $op instanceof Curve: + $x1 = round($op->getX1(), self::PRECISION); + $y1 = round($op->getY1(), self::PRECISION); + $x2 = round($op->getX2(), self::PRECISION); + $y2 = round($op->getY2(), self::PRECISION); + $fromX = $x3 = round($op->getX3(), self::PRECISION); + $fromY = $y3 = round($op->getY3(), self::PRECISION); + $pathData[] = sprintf('%s %s %s %s %s %s c', $x1, $y1, $x2, $y2, $x3, $y3); + break; + + case $op instanceof Close: + $pathData[] = 'z'; + break; + + default: + throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); + } + } + + return implode(' ', $pathData); + } + + private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : void + { + $startColor = $gradient->getStartColor(); + $endColor = $gradient->getEndColor(); + + if ($startColor instanceof Alpha) { + $startColor = $startColor->getBaseColor(); + } + + $startColorType = get_class($startColor); + + if (! in_array($startColorType, [Rgb::class, Cmyk::class, Gray::class])) { + $startColorType = Cmyk::class; + $startColor = $startColor->toCmyk(); + } + + if (get_class($endColor) !== $startColorType) { + switch ($startColorType) { + case Cmyk::class: + $endColor = $endColor->toCmyk(); + break; + + case Rgb::class: + $endColor = $endColor->toRgb(); + break; + + case Gray::class: + $endColor = $endColor->toGray(); + break; + } + } + + $this->eps .= "eoclip\n<<\n"; + + if ($gradient->getType() === GradientType::RADIAL()) { + $this->eps .= " /ShadingType 3\n"; + } else { + $this->eps .= " /ShadingType 2\n"; + } + + $this->eps .= " /Extend [ true true ]\n" + . " /AntiAlias true\n"; + + switch ($startColorType) { + case Cmyk::class: + $this->eps .= " /ColorSpace /DeviceCMYK\n"; + break; + + case Rgb::class: + $this->eps .= " /ColorSpace /DeviceRGB\n"; + break; + + case Gray::class: + $this->eps .= " /ColorSpace /DeviceGray\n"; + break; + } + + switch ($gradient->getType()) { + case GradientType::HORIZONTAL(): + $this->eps .= sprintf( + " /Coords [ %s %s %s %s ]\n", + round($x, self::PRECISION), + round($y, self::PRECISION), + round($x + $width, self::PRECISION), + round($y, self::PRECISION) + ); + break; + + case GradientType::VERTICAL(): + $this->eps .= sprintf( + " /Coords [ %s %s %s %s ]\n", + round($x, self::PRECISION), + round($y, self::PRECISION), + round($x, self::PRECISION), + round($y + $height, self::PRECISION) + ); + break; + + case GradientType::DIAGONAL(): + $this->eps .= sprintf( + " /Coords [ %s %s %s %s ]\n", + round($x, self::PRECISION), + round($y, self::PRECISION), + round($x + $width, self::PRECISION), + round($y + $height, self::PRECISION) + ); + break; + + case GradientType::INVERSE_DIAGONAL(): + $this->eps .= sprintf( + " /Coords [ %s %s %s %s ]\n", + round($x, self::PRECISION), + round($y + $height, self::PRECISION), + round($x + $width, self::PRECISION), + round($y, self::PRECISION) + ); + break; + + case GradientType::RADIAL(): + $centerX = ($x + $width) / 2; + $centerY = ($y + $height) / 2; + + $this->eps .= sprintf( + " /Coords [ %s %s 0 %s %s %s ]\n", + round($centerX, self::PRECISION), + round($centerY, self::PRECISION), + round($centerX, self::PRECISION), + round($centerY, self::PRECISION), + round(max($width, $height) / 2, self::PRECISION) + ); + break; + } + + $this->eps .= " /Function\n" + . " <<\n" + . " /FunctionType 2\n" + . " /Domain [ 0 1 ]\n" + . sprintf(" /C0 [ %s ]\n", $this->getColorString($startColor)) + . sprintf(" /C1 [ %s ]\n", $this->getColorString($endColor)) + . " /N 1\n" + . " >>\n>>\nshfill\nQ\n"; + } + + private function getColorSetString(ColorInterface $color) : string + { + if ($color instanceof Rgb) { + return $this->getColorString($color) . ' rgb'; + } + + if ($color instanceof Cmyk) { + return $this->getColorString($color) . ' cmyk'; + } + + if ($color instanceof Gray) { + return $this->getColorString($color) . ' gray'; + } + + return $this->getColorSetString($color->toCmyk()); + } + + private function getColorString(ColorInterface $color) : string + { + if ($color instanceof Rgb) { + return sprintf('%s %s %s', $color->getRed() / 255, $color->getGreen() / 255, $color->getBlue() / 255); + } + + if ($color instanceof Cmyk) { + return sprintf( + '%s %s %s %s', + $color->getCyan() / 100, + $color->getMagenta() / 100, + $color->getYellow() / 100, + $color->getBlack() / 100 + ); + } + + if ($color instanceof Gray) { + return sprintf('%s', $color->getGray() / 100); + } + + return $this->getColorString($color->toCmyk()); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php new file mode 100644 index 0000000..f536e5a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php @@ -0,0 +1,63 @@ + 1) { + throw new InvalidArgumentException('Size must between 0 (exclusive) and 1 (inclusive)'); + } + + $this->size = $size; + } + + public function createPath(ByteMatrix $matrix) : Path + { + $width = $matrix->getWidth(); + $height = $matrix->getHeight(); + $path = new Path(); + $halfSize = $this->size / 2; + $margin = (1 - $this->size) / 2; + + for ($y = 0; $y < $height; ++$y) { + for ($x = 0; $x < $width; ++$x) { + if (! $matrix->get($x, $y)) { + continue; + } + + $pathX = $x + $margin; + $pathY = $y + $margin; + + $path = $path + ->move($pathX + $this->size, $pathY + $halfSize) + ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY + $this->size) + ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX, $pathY + $halfSize) + ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY) + ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $this->size, $pathY + $halfSize) + ->close() + ; + } + } + + return $path; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php new file mode 100644 index 0000000..90482f2 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php @@ -0,0 +1,100 @@ + + */ + private $points = []; + + /** + * @var array|null + */ + private $simplifiedPoints; + + /** + * @var int + */ + private $minX = PHP_INT_MAX; + + /** + * @var int + */ + private $minY = PHP_INT_MAX; + + /** + * @var int + */ + private $maxX = -1; + + /** + * @var int + */ + private $maxY = -1; + + public function __construct(bool $positive) + { + $this->positive = $positive; + } + + public function addPoint(int $x, int $y) : void + { + $this->points[] = [$x, $y]; + $this->minX = min($this->minX, $x); + $this->minY = min($this->minY, $y); + $this->maxX = max($this->maxX, $x); + $this->maxY = max($this->maxY, $y); + } + + public function isPositive() : bool + { + return $this->positive; + } + + /** + * @return array + */ + public function getPoints() : array + { + return $this->points; + } + + public function getMaxX() : int + { + return $this->maxX; + } + + public function getSimplifiedPoints() : array + { + if (null !== $this->simplifiedPoints) { + return $this->simplifiedPoints; + } + + $points = []; + $length = count($this->points); + + for ($i = 0; $i < $length; ++$i) { + $previousPoint = $this->points[(0 === $i ? $length : $i) - 1]; + $nextPoint = $this->points[($length - 1 === $i ? -1 : $i) + 1]; + $currentPoint = $this->points[$i]; + + if (($previousPoint[0] === $currentPoint[0] && $currentPoint[0] === $nextPoint[0]) + || ($previousPoint[1] === $currentPoint[1] && $currentPoint[1] === $nextPoint[1]) + ) { + continue; + } + + $points[] = $currentPoint; + } + + return $this->simplifiedPoints = $points; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php new file mode 100644 index 0000000..0ccb0e0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php @@ -0,0 +1,18 @@ + 1) { + throw new InvalidArgumentException('Intensity must between 0 (exclusive) and 1 (inclusive)'); + } + + $this->intensity = $intensity / 2; + } + + public function createPath(ByteMatrix $matrix) : Path + { + $path = new Path(); + + foreach (new EdgeIterator($matrix) as $edge) { + $points = $edge->getSimplifiedPoints(); + $length = count($points); + + $currentPoint = $points[0]; + $nextPoint = $points[1]; + $horizontal = ($currentPoint[1] === $nextPoint[1]); + + if ($horizontal) { + $right = $nextPoint[0] > $currentPoint[0]; + $path = $path->move( + $currentPoint[0] + ($right ? $this->intensity : -$this->intensity), + $currentPoint[1] + ); + } else { + $up = $nextPoint[0] < $currentPoint[0]; + $path = $path->move( + $currentPoint[0], + $currentPoint[1] + ($up ? -$this->intensity : $this->intensity) + ); + } + + for ($i = 1; $i <= $length; ++$i) { + if ($i === $length) { + $previousPoint = $points[$length - 1]; + $currentPoint = $points[0]; + $nextPoint = $points[1]; + } else { + $previousPoint = $points[(0 === $i ? $length : $i) - 1]; + $currentPoint = $points[$i]; + $nextPoint = $points[($length - 1 === $i ? -1 : $i) + 1]; + } + + $horizontal = ($previousPoint[1] === $currentPoint[1]); + + if ($horizontal) { + $right = $previousPoint[0] < $currentPoint[0]; + $up = $nextPoint[1] < $currentPoint[1]; + $sweep = ($up xor $right); + + if ($this->intensity < 0.5 + || ($right && $previousPoint[0] !== $currentPoint[0] - 1) + || (! $right && $previousPoint[0] - 1 !== $currentPoint[0]) + ) { + $path = $path->line( + $currentPoint[0] + ($right ? -$this->intensity : $this->intensity), + $currentPoint[1] + ); + } + + $path = $path->ellipticArc( + $this->intensity, + $this->intensity, + 0, + false, + $sweep, + $currentPoint[0], + $currentPoint[1] + ($up ? -$this->intensity : $this->intensity) + ); + } else { + $up = $previousPoint[1] > $currentPoint[1]; + $right = $nextPoint[0] > $currentPoint[0]; + $sweep = ! ($up xor $right); + + if ($this->intensity < 0.5 + || ($up && $previousPoint[1] !== $currentPoint[1] + 1) + || (! $up && $previousPoint[0] + 1 !== $currentPoint[0]) + ) { + $path = $path->line( + $currentPoint[0], + $currentPoint[1] + ($up ? $this->intensity : -$this->intensity) + ); + } + + $path = $path->ellipticArc( + $this->intensity, + $this->intensity, + 0, + false, + $sweep, + $currentPoint[0] + ($right ? $this->intensity : -$this->intensity), + $currentPoint[1] + ); + } + } + + $path = $path->close(); + } + + return $path; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php new file mode 100644 index 0000000..eff7deb --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php @@ -0,0 +1,278 @@ +xRadius = abs($xRadius); + $this->yRadius = abs($yRadius); + $this->xAxisAngle = $xAxisAngle % 360; + $this->largeArc = $largeArc; + $this->sweep = $sweep; + $this->x = $x; + $this->y = $y; + } + + public function getXRadius() : float + { + return $this->xRadius; + } + + public function getYRadius() : float + { + return $this->yRadius; + } + + public function getXAxisAngle() : float + { + return $this->xAxisAngle; + } + + public function isLargeArc() : bool + { + return $this->largeArc; + } + + public function isSweep() : bool + { + return $this->sweep; + } + + public function getX() : float + { + return $this->x; + } + + public function getY() : float + { + return $this->y; + } + + /** + * @return self + */ + public function translate(float $x, float $y) : OperationInterface + { + return new self( + $this->xRadius, + $this->yRadius, + $this->xAxisAngle, + $this->largeArc, + $this->sweep, + $this->x + $x, + $this->y + $y + ); + } + + /** + * Converts the elliptic arc to multiple curves. + * + * Since not all image back ends support elliptic arcs, this method allows to convert the arc into multiple curves + * resembling the same result. + * + * @see https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/ + * @return array + */ + public function toCurves(float $fromX, float $fromY) : array + { + if (sqrt(($fromX - $this->x) ** 2 + ($fromY - $this->y) ** 2) < self::ZERO_TOLERANCE) { + return []; + } + + if ($this->xRadius < self::ZERO_TOLERANCE || $this->yRadius < self::ZERO_TOLERANCE) { + return [new Line($this->x, $this->y)]; + } + + return $this->createCurves($fromX, $fromY); + } + + /** + * @return Curve[] + */ + private function createCurves(float $fromX, $fromY) : array + { + $xAngle = deg2rad($this->xAxisAngle); + list($centerX, $centerY, $radiusX, $radiusY, $startAngle, $deltaAngle) = + $this->calculateCenterPointParameters($fromX, $fromY, $xAngle); + + $s = $startAngle; + $e = $s + $deltaAngle; + $sign = ($e < $s) ? -1 : 1; + $remain = abs($e - $s); + $p1 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s); + $curves = []; + + while ($remain > self::ZERO_TOLERANCE) { + $step = min($remain, pi() / 2); + $signStep = $step * $sign; + $p2 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s + $signStep); + + $alphaT = tan($signStep / 2); + $alpha = sin($signStep) * (sqrt(4 + 3 * $alphaT ** 2) - 1) / 3; + $d1 = self::derivative($radiusX, $radiusY, $xAngle, $s); + $d2 = self::derivative($radiusX, $radiusY, $xAngle, $s + $signStep); + + $curves[] = new Curve( + $p1[0] + $alpha * $d1[0], + $p1[1] + $alpha * $d1[1], + $p2[0] - $alpha * $d2[0], + $p2[1] - $alpha * $d2[1], + $p2[0], + $p2[1] + ); + + $s += $signStep; + $remain -= $step; + $p1 = $p2; + } + + return $curves; + } + + /** + * @return float[] + */ + private function calculateCenterPointParameters(float $fromX, float $fromY, float $xAngle) + { + $rX = $this->xRadius; + $rY = $this->yRadius; + + // F.6.5.1 + $dx2 = ($fromX - $this->x) / 2; + $dy2 = ($fromY - $this->y) / 2; + $x1p = cos($xAngle) * $dx2 + sin($xAngle) * $dy2; + $y1p = -sin($xAngle) * $dx2 + cos($xAngle) * $dy2; + + // F.6.5.2 + $rxs = $rX ** 2; + $rys = $rY ** 2; + $x1ps = $x1p ** 2; + $y1ps = $y1p ** 2; + $cr = $x1ps / $rxs + $y1ps / $rys; + + if ($cr > 1) { + $s = sqrt($cr); + $rX *= $s; + $rY *= $s; + $rxs = $rX ** 2; + $rys = $rY ** 2; + } + + $dq = ($rxs * $y1ps + $rys * $x1ps); + $pq = ($rxs * $rys - $dq) / $dq; + $q = sqrt(max(0, $pq)); + + if ($this->largeArc === $this->sweep) { + $q = -$q; + } + + $cxp = $q * $rX * $y1p / $rY; + $cyp = -$q * $rY * $x1p / $rX; + + // F.6.5.3 + $cx = cos($xAngle) * $cxp - sin($xAngle) * $cyp + ($fromX + $this->x) / 2; + $cy = sin($xAngle) * $cxp + cos($xAngle) * $cyp + ($fromY + $this->y) / 2; + + // F.6.5.5 + $theta = self::angle(1, 0, ($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY); + + // F.6.5.6 + $delta = self::angle(($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY, (-$x1p - $cxp) / $rX, (-$y1p - $cyp) / $rY); + $delta = fmod($delta, pi() * 2); + + if (! $this->sweep) { + $delta -= 2 * pi(); + } + + return [$cx, $cy, $rX, $rY, $theta, $delta]; + } + + private static function angle(float $ux, float $uy, float $vx, float $vy) : float + { + // F.6.5.4 + $dot = $ux * $vx + $uy * $vy; + $length = sqrt($ux ** 2 + $uy ** 2) * sqrt($vx ** 2 + $vy ** 2); + $angle = acos(min(1, max(-1, $dot / $length))); + + if (($ux * $vy - $uy * $vx) < 0) { + return -$angle; + } + + return $angle; + } + + /** + * @return float[] + */ + private static function point( + float $centerX, + float $centerY, + float $radiusX, + float $radiusY, + float $xAngle, + float $angle + ) : array { + return [ + $centerX + $radiusX * cos($xAngle) * cos($angle) - $radiusY * sin($xAngle) * sin($angle), + $centerY + $radiusX * sin($xAngle) * cos($angle) + $radiusY * cos($xAngle) * sin($angle), + ]; + } + + /** + * @return float[] + */ + private static function derivative(float $radiusX, float $radiusY, float $xAngle, float $angle) : array + { + return [ + -$radiusX * cos($xAngle) * sin($angle) - $radiusY * sin($xAngle) * cos($angle), + -$radiusX * sin($xAngle) * sin($angle) + $radiusY * cos($xAngle) * cos($angle), + ]; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php new file mode 100644 index 0000000..481d0dd --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php @@ -0,0 +1,41 @@ +x = $x; + $this->y = $y; + } + + public function getX() : float + { + return $this->x; + } + + public function getY() : float + { + return $this->y; + } + + /** + * @return self + */ + public function translate(float $x, float $y) : OperationInterface + { + return new self($this->x + $x, $this->y + $y); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php new file mode 100644 index 0000000..3813dfd --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php @@ -0,0 +1,46 @@ +startColor = $startColor; + $this->endColor = $endColor; + $this->type = $type; + } + + public function getStartColor() : ColorInterface + { + return $this->startColor; + } + + public function getEndColor() : ColorInterface + { + return $this->endColor; + } + + public function getType() : GradientType + { + return $this->type; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/LICENCE b/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/LICENCE new file mode 100644 index 0000000..22c3ef9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/LICENCE @@ -0,0 +1,26 @@ +BSD 2-Clause License + +Copyright (c) 2016-2018, Samyoul +Copyright (c) 2020, William Desportes +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/composer.json new file mode 100644 index 0000000..026f4cd --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/composer.json @@ -0,0 +1,39 @@ +{ + "name": "code-lts/u2f-php-server", + "description": "Server side handling class for FIDO U2F registration and authentication", + "license":"BSD-2-Clause", + "homepage": "https://github.com/code-lts/U2F-php-server#readme", + "authors": [ + { + "name": "Samuel Hawksby-Robinson", + "email": "samuel@samyoul.com" + }, + { + "name": "William Desportes", + "email": "williamdes@wdes.fr" + } + ], + "support": { + "issues": "https://github.com/code-lts/U2F-php-server/issues", + "source": "https://github.com/code-lts/U2F-php-server" + }, + "scripts": { + "phpunit": "./vendor/bin/phpunit" + }, + "require": { + "php": "^7.1 || ^8.0", + "ext-openssl":"*" + }, + "require-dev": { + "phpunit/phpunit": "^7 || ^8 || ^9" + }, + "autoload": { + "psr-4": { "CodeLts\\U2F\\U2FServer\\": ["src/"] } + }, + "autoload-dev": { + "psr-4": { "CodeLts\\U2F\\U2FServer\\Tests\\": ["test/"] } + }, + "replace": { + "samyoul/u2f-php-server": "*" + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_namespaces.php b/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_namespaces.php new file mode 100644 index 0000000..b7fc012 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_namespaces.php @@ -0,0 +1,9 @@ + array($vendorDir . '/williamdes/mariadb-mysql-kbs/src'), + 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), + 'Twig\\' => array($vendorDir . '/twig/twig/src'), + 'Symfony\\Polyfill\\Php81\\' => array($vendorDir . '/symfony/polyfill-php81'), + 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), + 'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'), + 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), + 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), + 'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'), + 'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'), + 'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'), + 'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'), + 'Symfony\\Component\\ExpressionLanguage\\' => array($vendorDir . '/symfony/expression-language'), + 'Symfony\\Component\\DependencyInjection\\' => array($vendorDir . '/symfony/dependency-injection'), + 'Symfony\\Component\\Config\\' => array($vendorDir . '/symfony/config'), + 'Symfony\\Component\\Cache\\' => array($vendorDir . '/symfony/cache'), + 'Slim\\Psr7\\' => array($vendorDir . '/slim/psr7/src'), + 'ReCaptcha\\' => array($vendorDir . '/google/recaptcha/src/ReCaptcha'), + 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), + 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), + 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), + 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), + 'PragmaRX\\Google2FA\\' => array($vendorDir . '/pragmarx/google2fa/src'), + 'PragmaRX\\Google2FAQRCode\\Tests\\' => array($vendorDir . '/pragmarx/google2fa-qrcode/tests'), + 'PragmaRX\\Google2FAQRCode\\' => array($vendorDir . '/pragmarx/google2fa-qrcode/src'), + 'PhpMyAdmin\\Twig\\Extensions\\' => array($vendorDir . '/phpmyadmin/twig-i18n-extension/src'), + 'PhpMyAdmin\\SqlParser\\' => array($vendorDir . '/phpmyadmin/sql-parser/src'), + 'PhpMyAdmin\\ShapeFile\\' => array($vendorDir . '/phpmyadmin/shapefile/src'), + 'PhpMyAdmin\\MoTranslator\\' => array($vendorDir . '/phpmyadmin/motranslator/src'), + 'PhpMyAdmin\\' => array($baseDir . '/libraries/classes'), + 'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'), + 'Fig\\Http\\Message\\' => array($vendorDir . '/fig/http-message-util/src'), + 'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'), + 'DASPRiD\\Enum\\' => array($vendorDir . '/dasprid/enum/src'), + 'Composer\\CaBundle\\' => array($vendorDir . '/composer/ca-bundle/src'), + 'CodeLts\\U2F\\U2FServer\\' => array($vendorDir . '/code-lts/u2f-php-server/src'), + 'BaconQrCode\\' => array($vendorDir . '/bacon/bacon-qr-code/src'), +); diff --git a/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_real.php b/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_real.php new file mode 100644 index 0000000..15f2eea --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_real.php @@ -0,0 +1,80 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInit30dc56dbcd95b1f5db28729d0c4615c4::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + if ($useStaticLoader) { + $includeFiles = Composer\Autoload\ComposerStaticInit30dc56dbcd95b1f5db28729d0c4615c4::$files; + } else { + $includeFiles = require __DIR__ . '/autoload_files.php'; + } + foreach ($includeFiles as $fileIdentifier => $file) { + composerRequire30dc56dbcd95b1f5db28729d0c4615c4($fileIdentifier, $file); + } + + return $loader; + } +} + +/** + * @param string $fileIdentifier + * @param string $file + * @return void + */ +function composerRequire30dc56dbcd95b1f5db28729d0c4615c4($fileIdentifier, $file) +{ + if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { + $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; + + require $file; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/composer/ca-bundle/res/cacert.pem b/Sources/php_script/script/phpMyAdmin/vendor/composer/ca-bundle/res/cacert.pem new file mode 100644 index 0000000..0bf312f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/composer/ca-bundle/res/cacert.pem @@ -0,0 +1,3232 @@ +## +## Bundle of CA Root Certificates +## +## Certificate data from Mozilla as of: Tue Oct 26 03:12:05 2021 GMT +## +## This is a bundle of X.509 certificates of public Certificate Authorities +## (CA). These were automatically extracted from Mozilla's root certificates +## file (certdata.txt). This file can be found in the mozilla source tree: +## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt +## +## It contains the certificates in PEM format and therefore +## can be directly used with curl / libcurl / php_curl, or with +## an Apache+mod_ssl webserver for SSL client authentication. +## Just configure this file as the SSLCACertificateFile. +## +## Conversion done with mk-ca-bundle.pl version 1.28. +## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f +## + + +GlobalSign Root CA +================== +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx +GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds +b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD +VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa +DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc +THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb +Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP +c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX +gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF +AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj +Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG +j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH +hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC +X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- + +GlobalSign Root CA - R2 +======================= +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 +ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp +s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN +S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL +TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C +ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i +YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN +BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp +9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu +01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 +9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- + +Entrust.net Premium 2048 Secure Server CA +========================================= +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp +bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV +BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl +MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u +ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL +Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr +hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW +nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- + +Baltimore CyberTrust Root +========================= +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE +ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li +ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC +SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs +dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME +uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB +UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C +G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 +XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr +l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI +VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB +BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh +cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 +hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa +Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H +RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- + +Entrust Root Certification Authority +==================================== +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw +b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG +A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 +MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu +MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu +Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v +dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz +A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww +Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 +j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN +rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 +MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH +hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM +Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa +v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS +W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 +tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- + +Comodo AAA Services root +======================== +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS +R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg +TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw +MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl +c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV +BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG +C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs +i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW +Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH +Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK +Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f +BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl +cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz +LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm +7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z +8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C +12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- + +QuoVadis Root CA 2 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +QuoVadis Root CA 3 +================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Security Communication Root CA +============================== +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP +U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw +8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM +DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX +5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd +DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 +JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw +DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g +0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a +mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ +s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ +6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi +FL39vmwLAw== +-----END CERTIFICATE----- + +XRamp Global CA Root +==================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE +BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj +dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx +HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg +U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu +IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx +foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE +zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs +AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry +xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap +oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC +AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc +/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n +nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz +8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- + +Go Daddy Class 2 CA +=================== +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY +VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG +A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g +RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD +ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv +2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 +qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j +YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY +vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O +BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o +atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu +MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG +A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim +PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt +I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI +Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b +vZ8= +-----END CERTIFICATE----- + +Starfield Class 2 CA +==================== +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc +U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg +Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo +MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG +A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG +SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY +bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ +JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm +epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN +F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF +MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f +hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo +bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g +QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs +afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM +PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD +KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 +QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- + +DigiCert Assured ID Root CA +=========================== +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx +MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO +9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy +UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW +/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy +oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf +GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF +66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq +hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc +EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn +SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i +8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- + +DigiCert Global Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw +MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn +TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 +BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H +4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y +7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB +o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm +8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF +BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr +EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt +tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 +UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- + +DigiCert High Assurance EV Root CA +================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw +KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw +MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu +Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t +Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS +OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 +MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ +NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe +h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB +Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY +JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ +V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp +myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK +mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K +-----END CERTIFICATE----- + +SwissSign Gold CA - G2 +====================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +SwissSign Silver CA - G2 +======================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +SecureTrust CA +============== +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy +dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe +BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX +OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t +DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH +GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b +01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH +ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj +aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ +KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu +SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf +mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ +nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- + +Secure Global CA +================ +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG +EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH +bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg +MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg +Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx +YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ +bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g +8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV +HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi +0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn +oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA +MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ +OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn +CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 +3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- + +COMODO Certification Authority +============================== +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb +MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD +T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH ++7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww +xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV +4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA +1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI +rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k +b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC +AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP +OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc +IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN ++8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== +-----END CERTIFICATE----- + +Network Solutions Certificate Authority +======================================= +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG +EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr +IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx +MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx +jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT +aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT +crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc +/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB +AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv +bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA +A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q +4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ +GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD +ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- + +COMODO ECC Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix +GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR +Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X +4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni +wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG +FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA +U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= +-----END CERTIFICATE----- + +Certigna +======== +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw +EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 +MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI +Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q +XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH +GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p +ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg +DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf +Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ +tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ +BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J +SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA +hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ +ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu +PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY +1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- + +Cybertrust Global Root +====================== +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li +ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 +MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD +ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA ++Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW +0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL +AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin +89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT +8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 +MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G +A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO +lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi +5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 +hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T +X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW +WL1WMRJOEcgh4LMRkWXbtKaIOM5V +-----END CERTIFICATE----- + +ePKI Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG +EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg +Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx +MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq +MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs +IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi +lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv +qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX +12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O +WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ +ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao +lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ +vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi +Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi +MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 +1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq +KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV +xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP +NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r +GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE +xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx +gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy +sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD +BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- + +certSIGN ROOT CA +================ +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD +VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa +Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE +CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I +JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH +rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 +ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD +0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 +AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB +AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 +SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 +x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt +vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz +TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- + +NetLock Arany (Class Gold) Főtanúsítvány +======================================== +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G +A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 +dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB +cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx +MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO +ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv +biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 +c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu +0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw +/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk +H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw +fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 +neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW +qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta +YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna +NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu +dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- + +Hongkong Post Root CA 1 +======================= +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT +DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx +NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n +IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 +ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr +auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh +qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY +V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV +HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i +h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio +l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei +IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps +T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT +c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== +-----END CERTIFICATE----- + +SecureSign RootCA11 +=================== +-----BEGIN CERTIFICATE----- +MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi +SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS +b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw +KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 +cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL +TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO +wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq +g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP +O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA +bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX +t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh +OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r +bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ +Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 +y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 +lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= +-----END CERTIFICATE----- + +Microsec e-Szigno Root CA 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER +MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv +c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE +BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt +U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA +fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG +0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA +pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm +1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC +AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf +QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE +FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o +lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX +I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 +yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi +LXpUq3DDfSJlgnCW +-----END CERTIFICATE----- + +GlobalSign Root CA - R3 +======================= +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv +YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh +bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT +aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln +bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt +iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ +0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 +rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl +OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 +xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 +lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 +EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E +bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 +YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r +kpeDMdmztcpHWD9f +-----END CERTIFICATE----- + +Autoridad de Certificacion Firmaprofesional CIF A62634068 +========================================================= +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA +BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 +MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw +QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB +NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD +Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P +B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY +7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH +ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI +plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX +MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX +LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK +bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU +vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud +EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH +DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA +bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx +ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx +51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk +R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP +T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f +Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl +osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR +crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR +saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD +KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi +6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- + +Izenpe.com +========== +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG +EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz +MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu +QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ +03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK +ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU ++zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC +PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT +OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK +F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK +0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ +0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB +leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID +AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ +SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG +NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l +Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga +kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q +hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs +g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 +aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 +nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC +ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo +Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z +WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- + +Go Daddy Root Certificate Authority - G2 +======================================== +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu +MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G +A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq +9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD ++qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd +fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl +NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 +BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac +vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r +5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV +N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 +-----END CERTIFICATE----- + +Starfield Root Certificate Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw +DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg +VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB +dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv +W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs +bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk +N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf +ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU +JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol +TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx +4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw +F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ +c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- + +Starfield Services Root Certificate Authority - G2 +================================================== +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT +B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s +b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl +IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT +dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 +h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa +hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP +LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB +rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG +SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP +E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy +xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza +YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 +-----END CERTIFICATE----- + +AffirmTrust Commercial +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw +MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb +DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV +C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 +BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww +MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV +HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG +hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi +qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv +0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh +sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- + +AffirmTrust Networking +====================== +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw +MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly +bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE +Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI +dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 +/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb +h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV +HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu +UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 +12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 +WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 +/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- + +AffirmTrust Premium +=================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS +BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy +OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy +dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn +BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV +5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs ++7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd +GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R +p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI +S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 +6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 +/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo ++Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB +/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv +MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC +6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S +L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK ++4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV +BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg +IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 +g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb +zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== +-----END CERTIFICATE----- + +AffirmTrust Premium ECC +======================= +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV +BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx +MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U +cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ +N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW +BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK +BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X +57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM +eQ== +-----END CERTIFICATE----- + +Certum Trusted Network CA +========================= +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK +ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy +MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU +ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC +l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J +J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 +fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 +cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB +Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw +DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj +jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 +mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj +Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- + +TWCA Root Certification Authority +================================= +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ +VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG +EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB +IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx +QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC +oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP +4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r +y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG +9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC +mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW +QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY +T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny +Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE----- + +Security Communication RootCA2 +============================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc +U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh +dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC +SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy +aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ ++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R +3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV +spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K +EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 +QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB +CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj +u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk +3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q +tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 +mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- + +EC-ACC +====== +-----BEGIN CERTIFICATE----- +MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE +BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w +ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD +VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE +CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT +BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 +MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt +SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl +Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh +cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK +w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT +ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 +HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a +E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw +0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD +VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 +Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l +dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ +lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa +Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe +l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 +E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D +5EI= +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2011 +======================================================= +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT +O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y +aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT +AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z +IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo +IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI +1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa +71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u +8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH +3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ +MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 +MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu +b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt +XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD +/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N +7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- + +Actalis Authentication Root CA +============================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Buypass Class 2 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X +DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 +g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn +9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b +/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU +CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff +awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI +zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn +Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX +Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs +M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI +osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S +aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd +DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD +LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 +oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC +wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS +CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN +rJgWVqA= +-----END CERTIFICATE----- + +Buypass Class 3 Root CA +======================= +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU +QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X +DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 +eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH +sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR +5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh +7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ +ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH +2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV +/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ +RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA +Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq +j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF +AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G +uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG +Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 +ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 +KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz +6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug +UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe +eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi +Cp/HuZc= +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 3 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx +MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK +9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU +NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF +iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W +0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr +AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb +fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT +ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h +P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +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 +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +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 +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl +OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV +MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF +JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +SZAFIR ROOT CA2 +=============== +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG +A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV +BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ +BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD +VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q +qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK +DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE +2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ +ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi +ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P +AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC +AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 +O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 +oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul +4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 ++/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +Certum Trusted Network CA 2 +=========================== +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE +BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 +bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y +ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ +TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB +IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 +7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o +CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b +Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p +uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 +GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ +9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB +Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye +hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM +BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI +hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW +Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA +L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo +clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM +pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb +w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo +J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm +ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX +is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 +zAYspsbiDrW5viSP +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2015 +======================================================= +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT +BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 +aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx +MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg +QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV +BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw +MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv +bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh +iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ +6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd +FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr +i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F +GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 +fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu +iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI +hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ +D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM +d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y +d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn +82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb +davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F +Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt +J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa +JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q +p/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions ECC RootCA 2015 +=========================================================== +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 +aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw +MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj +IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD +VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 +Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP +dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK +Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA +GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn +dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +ISRG Root X1 +============ +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE +BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD +EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG +EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT +DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r +Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 +3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K +b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN +Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ +4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf +1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu +hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH +usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r +OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G +A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY +9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV +0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt +hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw +TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx +e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA +JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD +YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n +JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ +m+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM +================ +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +Amazon Root CA 1 +================ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 +MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH +FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ +gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t +dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce +VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 +DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM +CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy +8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa +2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 +xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +Amazon Root CA 2 +================ +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 +MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 +kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp +N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 +AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd +fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx +kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS +btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 +Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN +c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ +3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw +DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA +A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE +YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW +xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ +gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW +aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV +Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 +KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi +JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= +-----END CERTIFICATE----- + +Amazon Root CA 3 +================ +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB +f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr +Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 +rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc +eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +Amazon Root CA 4 +================ +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN +/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri +83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA +MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 +AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 +============================================= +-----BEGIN CERTIFICATE----- +MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT +D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr +IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g +TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp +ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD +VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt +c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth +bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 +IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 +6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc +wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 +3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 +WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU +ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ +KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh +AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc +lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R +e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j +q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= +-----END CERTIFICATE----- + +GDCA TrustAUTH R5 ROOT +====================== +-----BEGIN CERTIFICATE----- +MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw +BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD +DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow +YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ +IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B +AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs +AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p +OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr +pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ +9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ +xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM +R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ +D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 +oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx +9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg +p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 +H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 +6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd ++PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ +HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD +F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ +8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv +/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT +aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== +-----END CERTIFICATE----- + +TrustCor RootCert CA-1 +====================== +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx +MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu +YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe +VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy +dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq +jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 +pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 +JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h +gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw +/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j +BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 +mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf +ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C +qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P +3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= +-----END CERTIFICATE----- + +TrustCor RootCert CA-2 +====================== +-----BEGIN CERTIFICATE----- +MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w +DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT +eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 +eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy +MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h +bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U +cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 +IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb +ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk +RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 +oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb +XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 +/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q +jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP +eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg +rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh +8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU +2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h +Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp +kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv +2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 +S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw +PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv +DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU +RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE +xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX +RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ +-----END CERTIFICATE----- + +TrustCor ECA-1 +============== +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP +MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig +U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw +N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 +MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y +IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR +MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 +xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc +p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ +fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj +YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL +f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF +AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u +/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F +hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs +J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC +jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== +-----END CERTIFICATE----- + +SSL.com Root Certification Authority RSA +======================================== +-----BEGIN CERTIFICATE----- +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 +WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= +-----END CERTIFICATE----- + +SSL.com Root Certification Authority ECC +======================================== +-----BEGIN CERTIFICATE----- +MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv +BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy +MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO +BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv +bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ +8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR +hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT +jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW +e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z +5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority RSA R2 +============================================== +-----BEGIN CERTIFICATE----- +MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w +DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u +MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy +MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI +DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD +VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh +hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w +cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO +Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ +B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh +CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim +9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto +RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm +JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 ++qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV +HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp +qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 +++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx +Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G +guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz +OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 +CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq +lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR +rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 +hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX +9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== +-----END CERTIFICATE----- + +SSL.com EV Root Certification Authority ECC +=========================================== +-----BEGIN CERTIFICATE----- +MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV +BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy +BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw +MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx +EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM +LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB +BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy +3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O +BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe +5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ +N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm +m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== +-----END CERTIFICATE----- + +GlobalSign Root CA - R6 +======================= +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMX +R2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds +b2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i +YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs +U2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQss +grRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE +3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbF +vuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM +PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+ +azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05O +WgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguy +CLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP +0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kN +b7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQE +AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNV +HSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN +nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0 +lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrY +BzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym +Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr +3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB1 +0jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/T +uTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItK +oZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t +JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GC CA +=============================== +-----BEGIN CERTIFICATE----- +MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD +SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo +MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa +Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL +ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr +VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab +NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E +AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk +AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 +-----END CERTIFICATE----- + +GTS Root R1 +=========== +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG +EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv +b3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG +A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx +9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7r +aKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnW +r4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqM +LnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly +4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr +06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 +wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om +3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNu +JLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEM +BQADggIBADiWCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 +d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73sv +fuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xm +ld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9b +gsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq +4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWEr +tXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyyF62ARPBo +pY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9SQ98POyDGCBDTtWTurQ0 +sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQcu51OyLemGhmW/HGY0dVHLql +CFF1pkgl +-----END CERTIFICATE----- + +GTS Root R2 +=========== +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG +EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv +b3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG +A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTuk +k3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo +7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWI +m8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5Gm +dFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbu +ak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscsz +cTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW +Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73Vululycsl +aVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy +5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEM +BQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT +vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ ++YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw +c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3Da +WsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5r +n/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56Gtmwfu +Nmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ +7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXs +gWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ld +o/DUhgkC +-----END CERTIFICATE----- + +GTS Root R3 +=========== +-----BEGIN CERTIFICATE----- +MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU +Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej +QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP +0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0 +glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa +KaqW04MjyaR7YbPMAuhd +-----END CERTIFICATE----- + +GTS Root R4 +=========== +-----BEGIN CERTIFICATE----- +MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV +UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg +UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE +ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa +6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj +QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV +2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI +N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x +zPKwTdb+mciUqXWi4w== +-----END CERTIFICATE----- + +UCA Global G2 Root +================== +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG +EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x +NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU +cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT +oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV +8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS +h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o +LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/ +R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe +KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa +4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc +OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97 +8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo +5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 +1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A +Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9 +yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX +c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo +jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk +bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x +ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn +RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A== +-----END CERTIFICATE----- + +UCA Extended Validation Root +============================ +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG +EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u +IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G +A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs +iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF +Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu +eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR +59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH +0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR +el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv +B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth +WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS +NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS +3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL +BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR +ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM +aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4 +dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb ++7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW +F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi +GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc +GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi +djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr +dhh2n1ax +-----END CERTIFICATE----- + +Certigna Root CA +================ +-----BEGIN CERTIFICATE----- +MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE +BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ +MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda +MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz +MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX +stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz +KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8 +JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16 +XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq +4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej +wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ +lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI +jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/ +/TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of +1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy +dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h +LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl +cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt +OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP +TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq +7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3 +4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd +8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS +6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY +tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS +aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde +E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= +-----END CERTIFICATE----- + +emSign Root CA - G1 +=================== +-----BEGIN CERTIFICATE----- +MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET +MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl +ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx +ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk +aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN +LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1 +cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW +DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ +6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH +hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2 +vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q +NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q ++Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih +U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx +iN66zB+Afko= +-----END CERTIFICATE----- + +emSign ECC Root CA - G3 +======================= +-----BEGIN CERTIFICATE----- +MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG +A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg +MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4 +MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11 +ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g +RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc +58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr +MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D +CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7 +jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj +-----END CERTIFICATE----- + +emSign Root CA - C1 +=================== +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx +EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp +Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE +BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD +ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up +ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/ +Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX +OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V +I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms +lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+ +XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD +ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp +/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1 +NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9 +wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ +BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI= +-----END CERTIFICATE----- + +emSign ECC Root CA - C3 +======================= +-----BEGIN CERTIFICATE----- +MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG +A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF +Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE +BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD +ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd +6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9 +SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA +B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA +MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU +ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== +-----END CERTIFICATE----- + +Hongkong Post Root CA 3 +======================= +-----BEGIN CERTIFICATE----- +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 +dBb9HxEGmpv0 +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G4 +========================================= +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu +bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1 +dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT +AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv +cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D +umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV +3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds +8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ +e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7 +ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X +xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV +7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 +dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW +Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T +AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n +MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q +jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht +7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK +YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt +jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+ +m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW +RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA +JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G ++TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT +kcpG2om3PVODLAgfi49T3f+sHw== +-----END CERTIFICATE----- + +Microsoft ECC Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND +IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4 +MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw +NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6 +thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB +eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM ++Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf +Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR +eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= +-----END CERTIFICATE----- + +Microsoft RSA Root Certificate Authority 2017 +============================================= +-----BEGIN CERTIFICATE----- +MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG +EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg +UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw +NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u +MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml +7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e +S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7 +1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+ +dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F +yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS +MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr +lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ +0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ +ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og +6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80 +dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk ++ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex +/2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy +AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW +ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE +7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT +c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D +5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E +-----END CERTIFICATE----- + +e-Szigno Root CA 2017 +===================== +-----BEGIN CERTIFICATE----- +MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw +DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt +MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa +Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE +CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp +Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx +s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G +A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv +vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA +tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO +svxyqltZ+efcMQ== +-----END CERTIFICATE----- + +certSIGN Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw +EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy +MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH +TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05 +N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk +abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg +wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp +dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh +ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732 +jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf +95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc +z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL +iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB +ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC +b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB +/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5 +8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5 +BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW +atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU +Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M +NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N +0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc= +-----END CERTIFICATE----- + +Trustwave Global Certification Authority +======================================== +-----BEGIN CERTIFICATE----- +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 +29FpHOTKyeC2nOnOcXHebD8WpHk= +-----END CERTIFICATE----- + +Trustwave Global ECC P256 Certification Authority +================================================= +-----BEGIN CERTIFICATE----- +MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy +dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1 +NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj +43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm +P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt +0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz +RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 +-----END CERTIFICATE----- + +Trustwave Global ECC P384 Certification Authority +================================================= +-----BEGIN CERTIFICATE----- +MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER +MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI +b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD +VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy +dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4 +NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH +Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr +/TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV +HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn +ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl +CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw== +-----END CERTIFICATE----- + +NAVER Global Root Certification Authority +========================================= +-----BEGIN CERTIFICATE----- +MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG +A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD +DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4 +NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT +UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb +UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW ++j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7 +XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2 +aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4 +Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z +VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B +A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai +cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy +YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV +HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB +Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK +21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB +jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx +hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg +E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH +D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ +A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY +qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG +I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg +kpzNNIaRkPpkUZ3+/uul9XXeifdy +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM SERVIDORES SEGUROS +=================================== +-----BEGIN CERTIFICATE----- +MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF +UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy +NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4 +MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt +UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB +QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2 +LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG +SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD +zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c= +-----END CERTIFICATE----- + +GlobalSign Root R46 +=================== +-----BEGIN CERTIFICATE----- +MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV +BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv +b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX +BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es +CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/ +r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje +2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt +bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj +K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4 +12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on +ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls +eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9 +vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM +BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg +JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy +gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92 +CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm +OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq +JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye +qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz +nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7 +DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3 +QEUxeCp6 +-----END CERTIFICATE----- + +GlobalSign Root E46 +=================== +-----BEGIN CERTIFICATE----- +MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT +AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg +RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV +BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB +jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj +QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL +gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk +vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+ +CAezNIm8BZ/3Hobui3A= +-----END CERTIFICATE----- + +GLOBALTRUST 2020 +================ +-----BEGIN CERTIFICATE----- +MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx +IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT +VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh +BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy +MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi +D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO +VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM +CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm +fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA +A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR +JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG +DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU +clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ +mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud +IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA +VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw +4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9 +iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS +8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2 +HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS +vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918 +oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF +YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl +gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== +-----END CERTIFICATE----- + +ANF Secure Server Root CA +========================= +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +Certum EC-384 CA +================ +-----BEGIN CERTIFICATE----- +MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ +TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2 +MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh +dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx +GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq +vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn +iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo +ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0 +QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= +-----END CERTIFICATE----- + +Certum Trusted Root CA +====================== +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +TunTrust Root CA +================ +-----BEGIN CERTIFICATE----- +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 +-----END CERTIFICATE----- + +HARICA TLS RSA Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG +EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz +OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl +bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB +IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN +JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu +a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y +Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K +5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv +dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR +0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH +GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm +haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ +CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE +AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU +EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq +QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD +QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR +j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5 +vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0 +qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6 +Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/ +PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn +kf3/W9b3raYvAwtt41dU63ZTGI0RmLo= +-----END CERTIFICATE----- + +HARICA TLS ECC Root CA 2021 +=========================== +-----BEGIN CERTIFICATE----- +MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH +UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD +QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX +DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj +IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv +b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l +AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b +ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW +0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi +rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw +CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps +-----END CERTIFICATE----- diff --git a/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/README.md b/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/README.md new file mode 100644 index 0000000..9e9ca12 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/README.md @@ -0,0 +1,164 @@ +# PHP 7.1 enums + +[![Build Status](https://travis-ci.org/DASPRiD/Enum.svg?branch=master)](https://travis-ci.org/DASPRiD/Enum) +[![Coverage Status](https://coveralls.io/repos/github/DASPRiD/Enum/badge.svg?branch=master)](https://coveralls.io/github/DASPRiD/Enum?branch=master) +[![Latest Stable Version](https://poser.pugx.org/dasprid/enum/v/stable)](https://packagist.org/packages/dasprid/enum) +[![Total Downloads](https://poser.pugx.org/dasprid/enum/downloads)](https://packagist.org/packages/dasprid/enum) +[![License](https://poser.pugx.org/dasprid/enum/license)](https://packagist.org/packages/dasprid/enum) + +It is a well known fact that PHP is missing a basic enum type, ignoring the rather incomplete `SplEnum` implementation +which is only available as a PECL extension. There are also quite a few other userland enum implementations around, +but all of them have one or another compromise. This library tries to close that gap as far as PHP allows it to. + +## Usage + +### Basics + +At its core, there is the `DASPRiD\Enum\AbstractEnum` class, which by default will work with constants like any other +enum implementation you might know. The first clear difference is that you should define all the constants as protected +(so nobody outside your class can read them but the `AbstractEnum` can still do so). The other even mightier difference +is that, for simple enums, the value of the constant doesn't matter at all. Let's have a look at a simple example: + +```php +use DASPRiD\Enum\AbstractEnum; + +/** + * @method static self MONDAY() + * @method static self TUESDAY() + * @method static self WEDNESDAY() + * @method static self THURSDAY() + * @method static self FRIDAY() + * @method static self SATURDAY() + * @method static self SUNDAY() + */ +final class WeekDay extends AbstractEnum +{ + protected const MONDAY = null; + protected const TUESDAY = null; + protected const WEDNESDAY = null; + protected const THURSDAY = null; + protected const FRIDAY = null; + protected const SATURDAY = null; + protected const SUNDAY = null; +} +``` + +If you need to provide constants for either internal use or public use, you can mark them as either private or public, +in which case they will be ignored by the enum, which only considers protected constants as valid values. As you can +see, we specifically defined the generated magic methods in a class level doc block, so anyone using this class will +automatically have proper auto-completion in their IDE. Now since you have defined the enum, you can simply use it like +that: + +```php +function tellItLikeItIs(WeekDay $weekDay) +{ + switch ($weekDay) { + case WeekDay::MONDAY(): + echo 'Mondays are bad.'; + break; + + case WeekDay::FRIDAY(): + echo 'Fridays are better.'; + break; + + case WeekDay::SATURDAY(): + case WeekDay::SUNDAY(): + echo 'Weekends are best.'; + break; + + default: + echo 'Midweek days are so-so.'; + } +} + +tellItLikeItIs(WeekDay::MONDAY()); +tellItLikeItIs(WeekDay::WEDNESDAY()); +tellItLikeItIs(WeekDay::FRIDAY()); +tellItLikeItIs(WeekDay::SATURDAY()); +tellItLikeItIs(WeekDay::SUNDAY()); +``` + +### More complex example + +Of course, all enums are singletons, which are not cloneable or serializable. Thus you can be sure that there is always +just one instance of the same type. Of course, the values of constants are not completely useless, let's have a look at +a more complex example: + +```php +use DASPRiD\Enum\AbstractEnum; + +/** + * @method static self MERCURY() + * @method static self VENUS() + * @method static self EARTH() + * @method static self MARS() + * @method static self JUPITER() + * @method static self SATURN() + * @method static self URANUS() + * @method static self NEPTUNE() + */ +final class Planet extends AbstractEnum +{ + protected const MERCURY = [3.303e+23, 2.4397e6]; + protected const VENUS = [4.869e+24, 6.0518e6]; + protected const EARTH = [5.976e+24, 6.37814e6]; + protected const MARS = [6.421e+23, 3.3972e6]; + protected const JUPITER = [1.9e+27, 7.1492e7]; + protected const SATURN = [5.688e+26, 6.0268e7]; + protected const URANUS = [8.686e+25, 2.5559e7]; + protected const NEPTUNE = [1.024e+26, 2.4746e7]; + + /** + * Universal gravitational constant. + * + * @var float + */ + private const G = 6.67300E-11; + + /** + * Mass in kilograms. + * + * @var float + */ + private $mass; + + /** + * Radius in meters. + * + * @var float + */ + private $radius; + + protected function __construct(float $mass, float $radius) + { + $this->mass = $mass; + $this->radius = $radius; + } + + public function mass() : float + { + return $this->mass; + } + + public function radius() : float + { + return $this->radius; + } + + public function surfaceGravity() : float + { + return self::G * $this->mass / ($this->radius * $this->radius); + } + + public function surfaceWeight(float $otherMass) : float + { + return $otherMass * $this->surfaceGravity(); + } +} + +$myMass = 80; + +foreach (Planet::values() as $planet) { + printf("Your weight on %s is %f\n", $planet, $planet->surfaceWeight($myMass)); +} +``` diff --git a/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/composer.json new file mode 100644 index 0000000..b3d745a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/composer.json @@ -0,0 +1,31 @@ +{ + "name": "dasprid/enum", + "description": "PHP 7.1 enum implementation", + "license": "BSD-2-Clause", + "authors": [ + { + "name": "Ben Scholzen 'DASPRiD'", + "email": "mail@dasprids.de", + "homepage": "https://dasprids.de/", + "role": "Developer" + } + ], + "keywords": [ + "enum", + "map" + ], + "require-dev": { + "phpunit/phpunit": "^7 | ^8 | ^9", + "squizlabs/php_codesniffer": "^3.4" + }, + "autoload": { + "psr-4": { + "DASPRiD\\Enum\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "DASPRiD\\EnumTest\\": "test/" + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/ExceptionInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/ExceptionInterface.php new file mode 100644 index 0000000..16a6005 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/ExceptionInterface.php @@ -0,0 +1,10 @@ + + * class ResponseFactory implements StatusCodeInterface + * { + * public function createResponse($code = self::STATUS_OK) + * { + * } + * } + * + */ +interface StatusCodeInterface +{ + // Informational 1xx + const STATUS_CONTINUE = 100; + const STATUS_SWITCHING_PROTOCOLS = 101; + const STATUS_PROCESSING = 102; + const STATUS_EARLY_HINTS = 103; + // Successful 2xx + const STATUS_OK = 200; + const STATUS_CREATED = 201; + const STATUS_ACCEPTED = 202; + const STATUS_NON_AUTHORITATIVE_INFORMATION = 203; + const STATUS_NO_CONTENT = 204; + const STATUS_RESET_CONTENT = 205; + const STATUS_PARTIAL_CONTENT = 206; + const STATUS_MULTI_STATUS = 207; + const STATUS_ALREADY_REPORTED = 208; + const STATUS_IM_USED = 226; + // Redirection 3xx + const STATUS_MULTIPLE_CHOICES = 300; + const STATUS_MOVED_PERMANENTLY = 301; + const STATUS_FOUND = 302; + const STATUS_SEE_OTHER = 303; + const STATUS_NOT_MODIFIED = 304; + const STATUS_USE_PROXY = 305; + const STATUS_RESERVED = 306; + const STATUS_TEMPORARY_REDIRECT = 307; + const STATUS_PERMANENT_REDIRECT = 308; + // Client Errors 4xx + const STATUS_BAD_REQUEST = 400; + const STATUS_UNAUTHORIZED = 401; + const STATUS_PAYMENT_REQUIRED = 402; + const STATUS_FORBIDDEN = 403; + const STATUS_NOT_FOUND = 404; + const STATUS_METHOD_NOT_ALLOWED = 405; + const STATUS_NOT_ACCEPTABLE = 406; + const STATUS_PROXY_AUTHENTICATION_REQUIRED = 407; + const STATUS_REQUEST_TIMEOUT = 408; + const STATUS_CONFLICT = 409; + const STATUS_GONE = 410; + const STATUS_LENGTH_REQUIRED = 411; + const STATUS_PRECONDITION_FAILED = 412; + const STATUS_PAYLOAD_TOO_LARGE = 413; + const STATUS_URI_TOO_LONG = 414; + const STATUS_UNSUPPORTED_MEDIA_TYPE = 415; + const STATUS_RANGE_NOT_SATISFIABLE = 416; + const STATUS_EXPECTATION_FAILED = 417; + const STATUS_IM_A_TEAPOT = 418; + const STATUS_MISDIRECTED_REQUEST = 421; + const STATUS_UNPROCESSABLE_ENTITY = 422; + const STATUS_LOCKED = 423; + const STATUS_FAILED_DEPENDENCY = 424; + const STATUS_TOO_EARLY = 425; + const STATUS_UPGRADE_REQUIRED = 426; + const STATUS_PRECONDITION_REQUIRED = 428; + const STATUS_TOO_MANY_REQUESTS = 429; + const STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; + const STATUS_UNAVAILABLE_FOR_LEGAL_REASONS = 451; + // Server Errors 5xx + const STATUS_INTERNAL_SERVER_ERROR = 500; + const STATUS_NOT_IMPLEMENTED = 501; + const STATUS_BAD_GATEWAY = 502; + const STATUS_SERVICE_UNAVAILABLE = 503; + const STATUS_GATEWAY_TIMEOUT = 504; + const STATUS_VERSION_NOT_SUPPORTED = 505; + const STATUS_VARIANT_ALSO_NEGOTIATES = 506; + const STATUS_INSUFFICIENT_STORAGE = 507; + const STATUS_LOOP_DETECTED = 508; + const STATUS_NOT_EXTENDED = 510; + const STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511; +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/composer.json new file mode 100644 index 0000000..ab6b4f1 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/composer.json @@ -0,0 +1,39 @@ +{ + "name": "google/recaptcha", + "description": "Client library for reCAPTCHA, a free service that protects websites from spam and abuse.", + "type": "library", + "keywords": ["recaptcha", "captcha", "spam", "abuse"], + "homepage": "https://www.google.com/recaptcha/", + "license": "BSD-3-Clause", + "support": { + "forum": "https://groups.google.com/forum/#!forum/recaptcha", + "source": "https://github.com/google/recaptcha" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.36|^5.7.27|^6.59|^7.5.11", + "friendsofphp/php-cs-fixer": "^2.2.20|^2.15", + "php-coveralls/php-coveralls": "^2.1" + }, + "autoload": { + "psr-4": { + "ReCaptcha\\": "src/ReCaptcha" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "scripts": { + "lint": "vendor/bin/php-cs-fixer -vvv fix --using-cache=no --dry-run .", + "lint-fix": "vendor/bin/php-cs-fixer -vvv fix --using-cache=no .", + "test": "vendor/bin/phpunit --colors=always", + "serve-examples": "@php -S localhost:8080 -t examples" + }, + "config": { + "process-timeout": 0 + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php b/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php new file mode 100644 index 0000000..eb99842 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php @@ -0,0 +1,82 @@ +curl = (is_null($curl)) ? new Curl() : $curl; + $this->siteVerifyUrl = (is_null($siteVerifyUrl)) ? ReCaptcha::SITE_VERIFY_URL : $siteVerifyUrl; + } + + /** + * Submit the cURL request with the specified parameters. + * + * @param RequestParameters $params Request parameters + * @return string Body of the reCAPTCHA response + */ + public function submit(RequestParameters $params) + { + $handle = $this->curl->init($this->siteVerifyUrl); + + $options = array( + CURLOPT_POST => true, + CURLOPT_POSTFIELDS => $params->toQueryString(), + CURLOPT_HTTPHEADER => array( + 'Content-Type: application/x-www-form-urlencoded' + ), + CURLINFO_HEADER_OUT => false, + CURLOPT_HEADER => false, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_SSL_VERIFYPEER => true + ); + $this->curl->setoptArray($handle, $options); + + $response = $this->curl->exec($handle); + $this->curl->close($handle); + + if ($response !== false) { + return $response; + } + + return '{"success": false, "error-codes": ["'.ReCaptcha::E_CONNECTION_FAILED.'"]}'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php b/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php new file mode 100644 index 0000000..a4ff716 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php @@ -0,0 +1,88 @@ +siteVerifyUrl = (is_null($siteVerifyUrl)) ? ReCaptcha::SITE_VERIFY_URL : $siteVerifyUrl; + } + + /** + * Submit the POST request with the specified parameters. + * + * @param RequestParameters $params Request parameters + * @return string Body of the reCAPTCHA response + */ + public function submit(RequestParameters $params) + { + $options = array( + 'http' => array( + 'header' => "Content-type: application/x-www-form-urlencoded\r\n", + 'method' => 'POST', + 'content' => $params->toQueryString(), + // Force the peer to validate (not needed in 5.6.0+, but still works) + 'verify_peer' => true, + ), + ); + $context = stream_context_create($options); + $response = file_get_contents($this->siteVerifyUrl, false, $context); + + if ($response !== false) { + return $response; + } + + return '{"success": false, "error-codes": ["'.ReCaptcha::E_CONNECTION_FAILED.'"]}'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/LICENSE b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/LICENSE new file mode 100644 index 0000000..478e764 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/LICENSE @@ -0,0 +1,31 @@ +Copyright (c) 2013 by Nikita Popov. + +Some rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + * The names of the contributors may not be used to endorse or + promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/BadRouteException.php b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/BadRouteException.php new file mode 100644 index 0000000..62262ec --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/BadRouteException.php @@ -0,0 +1,7 @@ + 'value', ...]] + * + * @param string $httpMethod + * @param string $uri + * + * @return array + */ + public function dispatch($httpMethod, $uri); +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/Route.php b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/Route.php new file mode 100644 index 0000000..e1bf7dd --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/Route.php @@ -0,0 +1,47 @@ +httpMethod = $httpMethod; + $this->handler = $handler; + $this->regex = $regex; + $this->variables = $variables; + } + + /** + * Tests whether this route matches the given string. + * + * @param string $str + * + * @return bool + */ + public function matches($str) + { + $regex = '~^' . $this->regex . '$~'; + return (bool) preg_match($regex, $str); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteCollector.php b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteCollector.php new file mode 100644 index 0000000..c1c1762 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteCollector.php @@ -0,0 +1,152 @@ +routeParser = $routeParser; + $this->dataGenerator = $dataGenerator; + $this->currentGroupPrefix = ''; + } + + /** + * Adds a route to the collection. + * + * The syntax used in the $route string depends on the used route parser. + * + * @param string|string[] $httpMethod + * @param string $route + * @param mixed $handler + */ + public function addRoute($httpMethod, $route, $handler) + { + $route = $this->currentGroupPrefix . $route; + $routeDatas = $this->routeParser->parse($route); + foreach ((array) $httpMethod as $method) { + foreach ($routeDatas as $routeData) { + $this->dataGenerator->addRoute($method, $routeData, $handler); + } + } + } + + /** + * Create a route group with a common prefix. + * + * All routes created in the passed callback will have the given group prefix prepended. + * + * @param string $prefix + * @param callable $callback + */ + public function addGroup($prefix, callable $callback) + { + $previousGroupPrefix = $this->currentGroupPrefix; + $this->currentGroupPrefix = $previousGroupPrefix . $prefix; + $callback($this); + $this->currentGroupPrefix = $previousGroupPrefix; + } + + /** + * Adds a GET route to the collection + * + * This is simply an alias of $this->addRoute('GET', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function get($route, $handler) + { + $this->addRoute('GET', $route, $handler); + } + + /** + * Adds a POST route to the collection + * + * This is simply an alias of $this->addRoute('POST', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function post($route, $handler) + { + $this->addRoute('POST', $route, $handler); + } + + /** + * Adds a PUT route to the collection + * + * This is simply an alias of $this->addRoute('PUT', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function put($route, $handler) + { + $this->addRoute('PUT', $route, $handler); + } + + /** + * Adds a DELETE route to the collection + * + * This is simply an alias of $this->addRoute('DELETE', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function delete($route, $handler) + { + $this->addRoute('DELETE', $route, $handler); + } + + /** + * Adds a PATCH route to the collection + * + * This is simply an alias of $this->addRoute('PATCH', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function patch($route, $handler) + { + $this->addRoute('PATCH', $route, $handler); + } + + /** + * Adds a HEAD route to the collection + * + * This is simply an alias of $this->addRoute('HEAD', $route, $handler) + * + * @param string $route + * @param mixed $handler + */ + public function head($route, $handler) + { + $this->addRoute('HEAD', $route, $handler); + } + + /** + * Returns the collected route data, as provided by the data generator. + * + * @return array + */ + public function getData() + { + return $this->dataGenerator->getData(); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteParser/Std.php b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteParser/Std.php new file mode 100644 index 0000000..4fbdee1 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteParser/Std.php @@ -0,0 +1,87 @@ + $segment) { + if ($segment === '' && $n !== 0) { + throw new BadRouteException('Empty optional part'); + } + + $currentRoute .= $segment; + $routeDatas[] = $this->parsePlaceholders($currentRoute); + } + return $routeDatas; + } + + /** + * Parses a route string that does not contain optional segments. + * + * @param string + * @return mixed[] + */ + private function parsePlaceholders($route) + { + if (!preg_match_all( + '~' . self::VARIABLE_REGEX . '~x', $route, $matches, + PREG_OFFSET_CAPTURE | PREG_SET_ORDER + )) { + return [$route]; + } + + $offset = 0; + $routeData = []; + foreach ($matches as $set) { + if ($set[0][1] > $offset) { + $routeData[] = substr($route, $offset, $set[0][1] - $offset); + } + $routeData[] = [ + $set[1][0], + isset($set[2]) ? trim($set[2][0]) : self::DEFAULT_DISPATCH_REGEX + ]; + $offset = $set[0][1] + strlen($set[0][0]); + } + + if ($offset !== strlen($route)) { + $routeData[] = substr($route, $offset); + } + + return $routeData; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/functions.php b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/functions.php new file mode 100644 index 0000000..876a5d9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/functions.php @@ -0,0 +1,74 @@ + 'FastRoute\\RouteParser\\Std', + 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', + 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', + 'routeCollector' => 'FastRoute\\RouteCollector', + ]; + + /** @var RouteCollector $routeCollector */ + $routeCollector = new $options['routeCollector']( + new $options['routeParser'], new $options['dataGenerator'] + ); + $routeDefinitionCallback($routeCollector); + + return new $options['dispatcher']($routeCollector->getData()); + } + + /** + * @param callable $routeDefinitionCallback + * @param array $options + * + * @return Dispatcher + */ + function cachedDispatcher(callable $routeDefinitionCallback, array $options = []) + { + $options += [ + 'routeParser' => 'FastRoute\\RouteParser\\Std', + 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', + 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', + 'routeCollector' => 'FastRoute\\RouteCollector', + 'cacheDisabled' => false, + ]; + + if (!isset($options['cacheFile'])) { + throw new \LogicException('Must specify "cacheFile" option'); + } + + if (!$options['cacheDisabled'] && file_exists($options['cacheFile'])) { + $dispatchData = require $options['cacheFile']; + if (!is_array($dispatchData)) { + throw new \RuntimeException('Invalid cache file "' . $options['cacheFile'] . '"'); + } + return new $options['dispatcher']($dispatchData); + } + + $routeCollector = new $options['routeCollector']( + new $options['routeParser'], new $options['dataGenerator'] + ); + $routeDefinitionCallback($routeCollector); + + /** @var RouteCollector $routeCollector */ + $dispatchData = $routeCollector->getData(); + if (!$options['cacheDisabled']) { + file_put_contents( + $options['cacheFile'], + ' 0x2d && $src < 0x30) ret += $src - 0x2e + 1; // -45 + $ret += (((0x2d - $src) & ($src - 0x30)) >> 8) & ($src - 45); + + // if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 2 + 1; // -62 + $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 62); + + // if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 28 + 1; // -68 + $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 68); + + // if ($src > 0x2f && $src < 0x3a) ret += $src - 0x30 + 54 + 1; // 7 + $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 7); + + return $ret; + } + + /** + * Uses bitwise operators instead of table-lookups to turn 8-bit integers + * into 6-bit integers. + * + * @param int $src + * @return string + */ + protected static function encode6Bits(int $src): string + { + $src += 0x2e; + + // if ($src > 0x2f) $src += 0x41 - 0x30; // 17 + $src += ((0x2f - $src) >> 8) & 17; + + // if ($src > 0x5a) $src += 0x61 - 0x5b; // 6 + $src += ((0x5a - $src) >> 8) & 6; + + // if ($src > 0x7a) $src += 0x30 - 0x7b; // -75 + $src -= ((0x7a - $src) >> 8) & 75; + + return \pack('C', $src); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php new file mode 100644 index 0000000..dd1459e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php @@ -0,0 +1,82 @@ + 0x2d && $src < 0x3a) ret += $src - 0x2e + 1; // -45 + $ret += (((0x2d - $src) & ($src - 0x3a)) >> 8) & ($src - 45); + + // if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 12 + 1; // -52 + $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 52); + + // if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 38 + 1; // -58 + $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 58); + + return $ret; + } + + /** + * Uses bitwise operators instead of table-lookups to turn 8-bit integers + * into 6-bit integers. + * + * @param int $src + * @return string + */ + protected static function encode6Bits(int $src): string + { + $src += 0x2e; + + // if ($src > 0x39) $src += 0x41 - 0x3a; // 7 + $src += ((0x39 - $src) >> 8) & 7; + + // if ($src > 0x5a) $src += 0x61 - 0x5b; // 6 + $src += ((0x5a - $src) >> 8) & 6; + + return \pack('C', $src); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Binary.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Binary.php new file mode 100644 index 0000000..add0522 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Binary.php @@ -0,0 +1,87 @@ + +Copyright (c) 2013-2019, Frank Denis + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/appveyor.yml b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/appveyor.yml new file mode 100644 index 0000000..9621e9a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/appveyor.yml @@ -0,0 +1,27 @@ +build: false +shallow_clone: false +platform: + - x86 + - x64 +clone_folder: C:\projects\sodium_compat +image: Visual Studio 2017 + +install: + - cinst -y OpenSSL.Light + - SET PATH=C:\Program Files\OpenSSL;%PATH% + - sc config wuauserv start= auto + - net start wuauserv + - cinst -y php --version 5.6.30 + - cd c:\tools\php56 + - copy php.ini-production php.ini + - echo date.timezone="UTC" >> php.ini + - echo extension_dir=ext >> php.ini + - echo extension=php_openssl.dll >> php.ini + - cd C:\projects\sodium_compat + - SET PATH=C:\tools\php56;%PATH% + - php.exe -r "readfile('http://getcomposer.org/installer');" | php.exe + - php.exe composer.phar install --prefer-source --no-interaction + +test_script: + - cd C:\projects\sodium_compat + - vendor\bin\phpunit.bat tests/Windows32Test.php diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/autoload-php7.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/autoload-php7.php new file mode 100644 index 0000000..4824860 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/autoload-php7.php @@ -0,0 +1,31 @@ +=1" + }, + "require-dev": { + "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" + }, + "scripts": { + "test": "phpunit" + }, + "suggest": { + "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", + "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/constants.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/constants.php new file mode 100644 index 0000000..b6a120e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/constants.php @@ -0,0 +1,52 @@ +getMessage() === 'Argument 2 must be CRYPTO_BOX_KEYPAIRBYTES long.') { + throw $ex; + } + return false; + } + } +} +if (!is_callable('sodium_crypto_box_secretkey')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_box_secretkey() + * @param string $keypair + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_box_secretkey($keypair) + { + return ParagonIE_Sodium_Compat::crypto_box_secretkey($keypair); + } +} +if (!is_callable('sodium_crypto_box_seed_keypair')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_box_seed_keypair() + * @param string $seed + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_box_seed_keypair($seed) + { + return ParagonIE_Sodium_Compat::crypto_box_seed_keypair($seed); + } +} +if (!is_callable('sodium_crypto_generichash')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_generichash() + * @param string $message + * @param string|null $key + * @param int $outLen + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_generichash($message, $key = null, $outLen = 32) + { + return ParagonIE_Sodium_Compat::crypto_generichash($message, $key, $outLen); + } +} +if (!is_callable('sodium_crypto_generichash_final')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_generichash_final() + * @param string|null $ctx + * @param int $outputLength + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_generichash_final(&$ctx, $outputLength = 32) + { + return ParagonIE_Sodium_Compat::crypto_generichash_final($ctx, $outputLength); + } +} +if (!is_callable('sodium_crypto_generichash_init')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_generichash_init() + * @param string|null $key + * @param int $outLen + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_generichash_init($key = null, $outLen = 32) + { + return ParagonIE_Sodium_Compat::crypto_generichash_init($key, $outLen); + } +} +if (!is_callable('sodium_crypto_generichash_keygen')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_generichash_keygen() + * @return string + * @throws Exception + */ + function sodium_crypto_generichash_keygen() + { + return ParagonIE_Sodium_Compat::crypto_generichash_keygen(); + } +} +if (!is_callable('sodium_crypto_generichash_update')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_generichash_update() + * @param string|null $ctx + * @param string $message + * @return void + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_generichash_update(&$ctx, $message = '') + { + ParagonIE_Sodium_Compat::crypto_generichash_update($ctx, $message); + } +} +if (!is_callable('sodium_crypto_kdf_keygen')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_kdf_keygen() + * @return string + * @throws Exception + */ + function sodium_crypto_kdf_keygen() + { + return ParagonIE_Sodium_Compat::crypto_kdf_keygen(); + } +} +if (!is_callable('sodium_crypto_kdf_derive_from_key')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key() + * @param int $subkey_len + * @param int $subkey_id + * @param string $context + * @param string $key + * @return string + * @throws Exception + */ + function sodium_crypto_kdf_derive_from_key($subkey_len, $subkey_id, $context, $key) + { + return ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key( + $subkey_len, + $subkey_id, + $context, + $key + ); + } +} +if (!is_callable('sodium_crypto_kx')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_kx() + * @param string $my_secret + * @param string $their_public + * @param string $client_public + * @param string $server_public + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_kx($my_secret, $their_public, $client_public, $server_public) + { + return ParagonIE_Sodium_Compat::crypto_kx( + $my_secret, + $their_public, + $client_public, + $server_public + ); + } +} +if (!is_callable('sodium_crypto_kx_seed_keypair')) { + /** + * @param string $seed + * @return string + * @throws Exception + */ + function sodium_crypto_kx_seed_keypair($seed) + { + return ParagonIE_Sodium_Compat::crypto_kx_seed_keypair($seed); + } +} +if (!is_callable('sodium_crypto_kx_keypair')) { + /** + * @return string + * @throws Exception + */ + function sodium_crypto_kx_keypair() + { + return ParagonIE_Sodium_Compat::crypto_kx_keypair(); + } +} +if (!is_callable('sodium_crypto_kx_client_session_keys')) { + /** + * @param string $keypair + * @param string $serverPublicKey + * @return array{0: string, 1: string} + * @throws SodiumException + */ + function sodium_crypto_kx_client_session_keys($keypair, $serverPublicKey) + { + return ParagonIE_Sodium_Compat::crypto_kx_client_session_keys($keypair, $serverPublicKey); + } +} +if (!is_callable('sodium_crypto_kx_server_session_keys')) { + /** + * @param string $keypair + * @param string $clientPublicKey + * @return array{0: string, 1: string} + * @throws SodiumException + */ + function sodium_crypto_kx_server_session_keys($keypair, $clientPublicKey) + { + return ParagonIE_Sodium_Compat::crypto_kx_server_session_keys($keypair, $clientPublicKey); + } +} +if (!is_callable('sodium_crypto_kx_secretkey')) { + /** + * @param string $keypair + * @return string + * @throws Exception + */ + function sodium_crypto_kx_secretkey($keypair) + { + return ParagonIE_Sodium_Compat::crypto_kx_secretkey($keypair); + } +} +if (!is_callable('sodium_crypto_kx_publickey')) { + /** + * @param string $keypair + * @return string + * @throws Exception + */ + function sodium_crypto_kx_publickey($keypair) + { + return ParagonIE_Sodium_Compat::crypto_kx_publickey($keypair); + } +} +if (!is_callable('sodium_crypto_pwhash')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_pwhash() + * @param int $outlen + * @param string $passwd + * @param string $salt + * @param int $opslimit + * @param int $memlimit + * @param int|null $algo + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit, $algo = null) + { + return ParagonIE_Sodium_Compat::crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit, $algo); + } +} +if (!is_callable('sodium_crypto_pwhash_str')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_pwhash_str() + * @param string $passwd + * @param int $opslimit + * @param int $memlimit + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_pwhash_str($passwd, $opslimit, $memlimit) + { + return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit); + } +} +if (!is_callable('sodium_crypto_pwhash_str_needs_rehash')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash() + * @param string $hash + * @param int $opslimit + * @param int $memlimit + * @return bool + * + * @throws SodiumException + */ + function sodium_crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit) + { + return ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit); + } +} +if (!is_callable('sodium_crypto_pwhash_str_verify')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_verify() + * @param string $passwd + * @param string $hash + * @return bool + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_pwhash_str_verify($passwd, $hash) + { + return ParagonIE_Sodium_Compat::crypto_pwhash_str_verify($passwd, $hash); + } +} +if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256() + * @param int $outlen + * @param string $passwd + * @param string $salt + * @param int $opslimit + * @param int $memlimit + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, $memlimit) + { + return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, $memlimit); + } +} +if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str() + * @param string $passwd + * @param int $opslimit + * @param int $memlimit + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit) + { + return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit); + } +} +if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str_verify')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify() + * @param string $passwd + * @param string $hash + * @return bool + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash) + { + return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash); + } +} +if (!is_callable('sodium_crypto_scalarmult')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_scalarmult() + * @param string $n + * @param string $p + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_scalarmult($n, $p) + { + return ParagonIE_Sodium_Compat::crypto_scalarmult($n, $p); + } +} +if (!is_callable('sodium_crypto_scalarmult_base')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_scalarmult_base() + * @param string $n + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_scalarmult_base($n) + { + return ParagonIE_Sodium_Compat::crypto_scalarmult_base($n); + } +} +if (!is_callable('sodium_crypto_secretbox')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_secretbox() + * @param string $message + * @param string $nonce + * @param string $key + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_secretbox($message, $nonce, $key) + { + return ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key); + } +} +if (!is_callable('sodium_crypto_secretbox_keygen')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_secretbox_keygen() + * @return string + * @throws Exception + */ + function sodium_crypto_secretbox_keygen() + { + return ParagonIE_Sodium_Compat::crypto_secretbox_keygen(); + } +} +if (!is_callable('sodium_crypto_secretbox_open')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_secretbox_open() + * @param string $message + * @param string $nonce + * @param string $key + * @return string|bool + */ + function sodium_crypto_secretbox_open($message, $nonce, $key) + { + try { + return ParagonIE_Sodium_Compat::crypto_secretbox_open($message, $nonce, $key); + } catch (Error $ex) { + return false; + } catch (Exception $ex) { + return false; + } + } +} +if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_push')) { + /** + * @param string $key + * @return array + * @throws SodiumException + */ + function sodium_crypto_secretstream_xchacha20poly1305_init_push($key) + { + return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_push($key); + } +} +if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_push')) { + /** + * @param string $state + * @param string $msg + * @param string $aad + * @param int $tag + * @return string + * @throws SodiumException + */ + function sodium_crypto_secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0) + { + return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_push($state, $msg, $aad, $tag); + } +} +if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_pull')) { + /** + * @param string $header + * @param string $key + * @return string + * @throws Exception + */ + function sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key) + { + return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_pull($header, $key); + } +} +if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_pull')) { + /** + * @param string $state + * @param string $cipher + * @param string $aad + * @return bool|array{0: string, 1: int} + * @throws SodiumException + */ + function sodium_crypto_secretstream_xchacha20poly1305_pull(&$state, $cipher, $aad = '') + { + return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_pull($state, $cipher, $aad); + } +} +if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_rekey')) { + /** + * @param string $state + * @return void + * @throws SodiumException + */ + function sodium_crypto_secretstream_xchacha20poly1305_rekey(&$state) + { + ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_rekey($state); + } +} +if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_keygen')) { + /** + * @return string + * @throws Exception + */ + function sodium_crypto_secretstream_xchacha20poly1305_keygen() + { + return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_keygen(); + } +} +if (!is_callable('sodium_crypto_shorthash')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_shorthash() + * @param string $message + * @param string $key + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_shorthash($message, $key = '') + { + return ParagonIE_Sodium_Compat::crypto_shorthash($message, $key); + } +} +if (!is_callable('sodium_crypto_shorthash_keygen')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_shorthash_keygen() + * @return string + * @throws Exception + */ + function sodium_crypto_shorthash_keygen() + { + return ParagonIE_Sodium_Compat::crypto_shorthash_keygen(); + } +} +if (!is_callable('sodium_crypto_sign')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign() + * @param string $message + * @param string $sk + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign($message, $sk) + { + return ParagonIE_Sodium_Compat::crypto_sign($message, $sk); + } +} +if (!is_callable('sodium_crypto_sign_detached')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_detached() + * @param string $message + * @param string $sk + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign_detached($message, $sk) + { + return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $sk); + } +} +if (!is_callable('sodium_crypto_sign_keypair_from_secretkey_and_publickey')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey() + * @param string $sk + * @param string $pk + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk) + { + return ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk); + } +} +if (!is_callable('sodium_crypto_sign_keypair')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_keypair() + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign_keypair() + { + return ParagonIE_Sodium_Compat::crypto_sign_keypair(); + } +} +if (!is_callable('sodium_crypto_sign_open')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_open() + * @param string $signedMessage + * @param string $pk + * @return string|bool + */ + function sodium_crypto_sign_open($signedMessage, $pk) + { + try { + return ParagonIE_Sodium_Compat::crypto_sign_open($signedMessage, $pk); + } catch (Error $ex) { + return false; + } catch (Exception $ex) { + return false; + } + } +} +if (!is_callable('sodium_crypto_sign_publickey')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_publickey() + * @param string $keypair + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign_publickey($keypair) + { + return ParagonIE_Sodium_Compat::crypto_sign_publickey($keypair); + } +} +if (!is_callable('sodium_crypto_sign_publickey_from_secretkey')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey() + * @param string $sk + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign_publickey_from_secretkey($sk) + { + return ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey($sk); + } +} +if (!is_callable('sodium_crypto_sign_secretkey')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_secretkey() + * @param string $keypair + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign_secretkey($keypair) + { + return ParagonIE_Sodium_Compat::crypto_sign_secretkey($keypair); + } +} +if (!is_callable('sodium_crypto_sign_seed_keypair')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_seed_keypair() + * @param string $seed + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign_seed_keypair($seed) + { + return ParagonIE_Sodium_Compat::crypto_sign_seed_keypair($seed); + } +} +if (!is_callable('sodium_crypto_sign_verify_detached')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_verify_detached() + * @param string $signature + * @param string $message + * @param string $pk + * @return bool + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign_verify_detached($signature, $message, $pk) + { + return ParagonIE_Sodium_Compat::crypto_sign_verify_detached($signature, $message, $pk); + } +} +if (!is_callable('sodium_crypto_sign_ed25519_pk_to_curve25519')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519() + * @param string $pk + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign_ed25519_pk_to_curve25519($pk) + { + return ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519($pk); + } +} +if (!is_callable('sodium_crypto_sign_ed25519_sk_to_curve25519')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519() + * @param string $sk + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_sign_ed25519_sk_to_curve25519($sk) + { + return ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519($sk); + } +} +if (!is_callable('sodium_crypto_stream')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_stream() + * @param int $len + * @param string $nonce + * @param string $key + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_stream($len, $nonce, $key) + { + return ParagonIE_Sodium_Compat::crypto_stream($len, $nonce, $key); + } +} +if (!is_callable('sodium_crypto_stream_keygen')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_stream_keygen() + * @return string + * @throws Exception + */ + function sodium_crypto_stream_keygen() + { + return ParagonIE_Sodium_Compat::crypto_stream_keygen(); + } +} +if (!is_callable('sodium_crypto_stream_xor')) { + /** + * @see ParagonIE_Sodium_Compat::crypto_stream_xor() + * @param string $message + * @param string $nonce + * @param string $key + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_crypto_stream_xor($message, $nonce, $key) + { + return ParagonIE_Sodium_Compat::crypto_stream_xor($message, $nonce, $key); + } +} +require_once dirname(__FILE__) . '/stream-xchacha20.php'; +if (!is_callable('sodium_hex2bin')) { + /** + * @see ParagonIE_Sodium_Compat::hex2bin() + * @param string $string + * @return string + * @throws SodiumException + * @throws TypeError + */ + function sodium_hex2bin($string) + { + return ParagonIE_Sodium_Compat::hex2bin($string); + } +} +if (!is_callable('sodium_increment')) { + /** + * @see ParagonIE_Sodium_Compat::increment() + * @param string $string + * @return void + * @throws SodiumException + * @throws TypeError + */ + function sodium_increment(&$string) + { + ParagonIE_Sodium_Compat::increment($string); + } +} +if (!is_callable('sodium_library_version_major')) { + /** + * @see ParagonIE_Sodium_Compat::library_version_major() + * @return int + */ + function sodium_library_version_major() + { + return ParagonIE_Sodium_Compat::library_version_major(); + } +} +if (!is_callable('sodium_library_version_minor')) { + /** + * @see ParagonIE_Sodium_Compat::library_version_minor() + * @return int + */ + function sodium_library_version_minor() + { + return ParagonIE_Sodium_Compat::library_version_minor(); + } +} +if (!is_callable('sodium_version_string')) { + /** + * @see ParagonIE_Sodium_Compat::version_string() + * @return string + */ + function sodium_version_string() + { + return ParagonIE_Sodium_Compat::version_string(); + } +} +if (!is_callable('sodium_memcmp')) { + /** + * @see ParagonIE_Sodium_Compat::memcmp() + * @param string $a + * @param string $b + * @return int + * @throws SodiumException + * @throws TypeError + */ + function sodium_memcmp($a, $b) + { + return ParagonIE_Sodium_Compat::memcmp($a, $b); + } +} +if (!is_callable('sodium_memzero')) { + /** + * @see ParagonIE_Sodium_Compat::memzero() + * @param string $str + * @return void + * @throws SodiumException + * @throws TypeError + */ + function sodium_memzero(&$str) + { + ParagonIE_Sodium_Compat::memzero($str); + } +} +if (!is_callable('sodium_pad')) { + /** + * @see ParagonIE_Sodium_Compat::pad() + * @param string $unpadded + * @param int $blockSize + * @return int + * @throws SodiumException + * @throws TypeError + */ + function sodium_pad($unpadded, $blockSize) + { + return ParagonIE_Sodium_Compat::pad($unpadded, $blockSize, true); + } +} +if (!is_callable('sodium_unpad')) { + /** + * @see ParagonIE_Sodium_Compat::pad() + * @param string $padded + * @param int $blockSize + * @return int + * @throws SodiumException + * @throws TypeError + */ + function sodium_unpad($padded, $blockSize) + { + return ParagonIE_Sodium_Compat::unpad($padded, $blockSize, true); + } +} +if (!is_callable('sodium_randombytes_buf')) { + /** + * @see ParagonIE_Sodium_Compat::randombytes_buf() + * @param int $amount + * @return string + * @throws Exception + */ + function sodium_randombytes_buf($amount) + { + return ParagonIE_Sodium_Compat::randombytes_buf($amount); + } +} + +if (!is_callable('sodium_randombytes_uniform')) { + /** + * @see ParagonIE_Sodium_Compat::randombytes_uniform() + * @param int $upperLimit + * @return int + * @throws Exception + */ + function sodium_randombytes_uniform($upperLimit) + { + return ParagonIE_Sodium_Compat::randombytes_uniform($upperLimit); + } +} + +if (!is_callable('sodium_randombytes_random16')) { + /** + * @see ParagonIE_Sodium_Compat::randombytes_random16() + * @return int + * @throws Exception + */ + function sodium_randombytes_random16() + { + return ParagonIE_Sodium_Compat::randombytes_random16(); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/php72compat_const.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/php72compat_const.php new file mode 100644 index 0000000..baa0f1e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/php72compat_const.php @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/psalm-below-3.xml b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/psalm-below-3.xml new file mode 100644 index 0000000..a92a6cf --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/psalm-below-3.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php new file mode 100644 index 0000000..6ad4ab7 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php @@ -0,0 +1,797 @@ +> + */ + protected static $sigma = array( + array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), + array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3), + array( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4), + array( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8), + array( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13), + array( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9), + array( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11), + array( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10), + array( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5), + array( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0), + array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), + array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3) + ); + + const BLOCKBYTES = 128; + const OUTBYTES = 64; + const KEYBYTES = 64; + + /** + * Turn two 32-bit integers into a fixed array representing a 64-bit integer. + * + * @internal You should not use this directly from another application + * + * @param int $high + * @param int $low + * @return SplFixedArray + * @psalm-suppress MixedAssignment + */ + public static function new64($high, $low) + { + if (PHP_INT_SIZE === 4) { + throw new SodiumException("Error, use 32-bit"); + } + $i64 = new SplFixedArray(2); + $i64[0] = $high & 0xffffffff; + $i64[1] = $low & 0xffffffff; + return $i64; + } + + /** + * Convert an arbitrary number into an SplFixedArray of two 32-bit integers + * that represents a 64-bit integer. + * + * @internal You should not use this directly from another application + * + * @param int $num + * @return SplFixedArray + */ + protected static function to64($num) + { + list($hi, $lo) = self::numericTo64BitInteger($num); + return self::new64($hi, $lo); + } + + /** + * Adds two 64-bit integers together, returning their sum as a SplFixedArray + * containing two 32-bit integers (representing a 64-bit integer). + * + * @internal You should not use this directly from another application + * + * @param SplFixedArray $x + * @param SplFixedArray $y + * @return SplFixedArray + * @psalm-suppress MixedArgument + * @psalm-suppress MixedAssignment + * @psalm-suppress MixedOperand + */ + protected static function add64($x, $y) + { + if (PHP_INT_SIZE === 4) { + throw new SodiumException("Error, use 32-bit"); + } + $l = ($x[1] + $y[1]) & 0xffffffff; + return self::new64( + (int) ($x[0] + $y[0] + ( + ($l < $x[1]) ? 1 : 0 + )), + (int) $l + ); + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $x + * @param SplFixedArray $y + * @param SplFixedArray $z + * @return SplFixedArray + */ + protected static function add364($x, $y, $z) + { + return self::add64($x, self::add64($y, $z)); + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $x + * @param SplFixedArray $y + * @return SplFixedArray + * @throws SodiumException + * @throws TypeError + */ + protected static function xor64(SplFixedArray $x, SplFixedArray $y) + { + if (PHP_INT_SIZE === 4) { + throw new SodiumException("Error, use 32-bit"); + } + if (!is_numeric($x[0])) { + throw new SodiumException('x[0] is not an integer'); + } + if (!is_numeric($x[1])) { + throw new SodiumException('x[1] is not an integer'); + } + if (!is_numeric($y[0])) { + throw new SodiumException('y[0] is not an integer'); + } + if (!is_numeric($y[1])) { + throw new SodiumException('y[1] is not an integer'); + } + return self::new64( + (int) (($x[0] ^ $y[0]) & 0xffffffff), + (int) (($x[1] ^ $y[1]) & 0xffffffff) + ); + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $x + * @param int $c + * @return SplFixedArray + * @psalm-suppress MixedAssignment + */ + public static function rotr64($x, $c) + { + if (PHP_INT_SIZE === 4) { + throw new SodiumException("Error, use 32-bit"); + } + if ($c >= 64) { + $c %= 64; + } + if ($c >= 32) { + /** @var int $tmp */ + $tmp = $x[0]; + $x[0] = $x[1]; + $x[1] = $tmp; + $c -= 32; + } + if ($c === 0) { + return $x; + } + + $l0 = 0; + $c = 64 - $c; + + /** @var int $c */ + if ($c < 32) { + $h0 = ((int) ($x[0]) << $c) | ( + ( + (int) ($x[1]) & ((1 << $c) - 1) + << + (32 - $c) + ) >> (32 - $c) + ); + $l0 = (int) ($x[1]) << $c; + } else { + $h0 = (int) ($x[1]) << ($c - 32); + } + + $h1 = 0; + $c1 = 64 - $c; + + if ($c1 < 32) { + $h1 = (int) ($x[0]) >> $c1; + $l1 = ((int) ($x[1]) >> $c1) | ((int) ($x[0]) & ((1 << $c1) - 1)) << (32 - $c1); + } else { + $l1 = (int) ($x[0]) >> ($c1 - 32); + } + + return self::new64($h0 | $h1, $l0 | $l1); + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $x + * @return int + * @psalm-suppress MixedOperand + */ + protected static function flatten64($x) + { + return (int) ($x[0] * 4294967296 + $x[1]); + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $x + * @param int $i + * @return SplFixedArray + * @psalm-suppress MixedArgument + * @psalm-suppress MixedArrayOffset + */ + protected static function load64(SplFixedArray $x, $i) + { + /** @var int $l */ + $l = (int) ($x[$i]) + | ((int) ($x[$i+1]) << 8) + | ((int) ($x[$i+2]) << 16) + | ((int) ($x[$i+3]) << 24); + /** @var int $h */ + $h = (int) ($x[$i+4]) + | ((int) ($x[$i+5]) << 8) + | ((int) ($x[$i+6]) << 16) + | ((int) ($x[$i+7]) << 24); + return self::new64($h, $l); + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $x + * @param int $i + * @param SplFixedArray $u + * @return void + * @psalm-suppress MixedAssignment + */ + protected static function store64(SplFixedArray $x, $i, SplFixedArray $u) + { + $maxLength = $x->getSize() - 1; + for ($j = 0; $j < 8; ++$j) { + /* + [0, 1, 2, 3, 4, 5, 6, 7] + ... becomes ... + [0, 0, 0, 0, 1, 1, 1, 1] + */ + /** @var int $uIdx */ + $uIdx = ((7 - $j) & 4) >> 2; + $x[$i] = ((int) ($u[$uIdx]) & 0xff); + if (++$i > $maxLength) { + return; + } + /** @psalm-suppress MixedOperand */ + $u[$uIdx] >>= 8; + } + } + + /** + * This just sets the $iv static variable. + * + * @internal You should not use this directly from another application + * + * @return void + */ + public static function pseudoConstructor() + { + static $called = false; + if ($called) { + return; + } + self::$iv = new SplFixedArray(8); + self::$iv[0] = self::new64(0x6a09e667, 0xf3bcc908); + self::$iv[1] = self::new64(0xbb67ae85, 0x84caa73b); + self::$iv[2] = self::new64(0x3c6ef372, 0xfe94f82b); + self::$iv[3] = self::new64(0xa54ff53a, 0x5f1d36f1); + self::$iv[4] = self::new64(0x510e527f, 0xade682d1); + self::$iv[5] = self::new64(0x9b05688c, 0x2b3e6c1f); + self::$iv[6] = self::new64(0x1f83d9ab, 0xfb41bd6b); + self::$iv[7] = self::new64(0x5be0cd19, 0x137e2179); + + $called = true; + } + + /** + * Returns a fresh BLAKE2 context. + * + * @internal You should not use this directly from another application + * + * @return SplFixedArray + * @psalm-suppress MixedAssignment + * @psalm-suppress MixedArrayAccess + * @psalm-suppress MixedArrayAssignment + */ + protected static function context() + { + $ctx = new SplFixedArray(6); + $ctx[0] = new SplFixedArray(8); // h + $ctx[1] = new SplFixedArray(2); // t + $ctx[2] = new SplFixedArray(2); // f + $ctx[3] = new SplFixedArray(256); // buf + $ctx[4] = 0; // buflen + $ctx[5] = 0; // last_node (uint8_t) + + for ($i = 8; $i--;) { + $ctx[0][$i] = self::$iv[$i]; + } + for ($i = 256; $i--;) { + $ctx[3][$i] = 0; + } + + $zero = self::new64(0, 0); + $ctx[1][0] = $zero; + $ctx[1][1] = $zero; + $ctx[2][0] = $zero; + $ctx[2][1] = $zero; + + return $ctx; + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $ctx + * @param SplFixedArray $buf + * @return void + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + * @psalm-suppress MixedAssignment + * @psalm-suppress MixedArrayAccess + * @psalm-suppress MixedArrayAssignment + * @psalm-suppress MixedArrayOffset + */ + protected static function compress(SplFixedArray $ctx, SplFixedArray $buf) + { + $m = new SplFixedArray(16); + $v = new SplFixedArray(16); + + for ($i = 16; $i--;) { + $m[$i] = self::load64($buf, $i << 3); + } + + for ($i = 8; $i--;) { + $v[$i] = $ctx[0][$i]; + } + + $v[ 8] = self::$iv[0]; + $v[ 9] = self::$iv[1]; + $v[10] = self::$iv[2]; + $v[11] = self::$iv[3]; + + $v[12] = self::xor64($ctx[1][0], self::$iv[4]); + $v[13] = self::xor64($ctx[1][1], self::$iv[5]); + $v[14] = self::xor64($ctx[2][0], self::$iv[6]); + $v[15] = self::xor64($ctx[2][1], self::$iv[7]); + + for ($r = 0; $r < 12; ++$r) { + $v = self::G($r, 0, 0, 4, 8, 12, $v, $m); + $v = self::G($r, 1, 1, 5, 9, 13, $v, $m); + $v = self::G($r, 2, 2, 6, 10, 14, $v, $m); + $v = self::G($r, 3, 3, 7, 11, 15, $v, $m); + $v = self::G($r, 4, 0, 5, 10, 15, $v, $m); + $v = self::G($r, 5, 1, 6, 11, 12, $v, $m); + $v = self::G($r, 6, 2, 7, 8, 13, $v, $m); + $v = self::G($r, 7, 3, 4, 9, 14, $v, $m); + } + + for ($i = 8; $i--;) { + $ctx[0][$i] = self::xor64( + $ctx[0][$i], self::xor64($v[$i], $v[$i+8]) + ); + } + } + + /** + * @internal You should not use this directly from another application + * + * @param int $r + * @param int $i + * @param int $a + * @param int $b + * @param int $c + * @param int $d + * @param SplFixedArray $v + * @param SplFixedArray $m + * @return SplFixedArray + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + * @psalm-suppress MixedArrayOffset + */ + public static function G($r, $i, $a, $b, $c, $d, SplFixedArray $v, SplFixedArray $m) + { + $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][$i << 1]]); + $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 32); + $v[$c] = self::add64($v[$c], $v[$d]); + $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 24); + $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][($i << 1) + 1]]); + $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 16); + $v[$c] = self::add64($v[$c], $v[$d]); + $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 63); + return $v; + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $ctx + * @param int $inc + * @return void + * @throws SodiumException + * @psalm-suppress MixedArgument + * @psalm-suppress MixedArrayAccess + * @psalm-suppress MixedArrayAssignment + */ + public static function increment_counter($ctx, $inc) + { + if ($inc < 0) { + throw new SodiumException('Increasing by a negative number makes no sense.'); + } + $t = self::to64($inc); + # S->t is $ctx[1] in our implementation + + # S->t[0] = ( uint64_t )( t >> 0 ); + $ctx[1][0] = self::add64($ctx[1][0], $t); + + # S->t[1] += ( S->t[0] < inc ); + if (self::flatten64($ctx[1][0]) < $inc) { + $ctx[1][1] = self::add64($ctx[1][1], self::to64(1)); + } + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $ctx + * @param SplFixedArray $p + * @param int $plen + * @return void + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + * @psalm-suppress MixedAssignment + * @psalm-suppress MixedArrayAccess + * @psalm-suppress MixedArrayAssignment + * @psalm-suppress MixedArrayOffset + * @psalm-suppress MixedOperand + */ + public static function update(SplFixedArray $ctx, SplFixedArray $p, $plen) + { + self::pseudoConstructor(); + + $offset = 0; + while ($plen > 0) { + $left = $ctx[4]; + $fill = 256 - $left; + + if ($plen > $fill) { + # memcpy( S->buf + left, in, fill ); /* Fill buffer */ + for ($i = $fill; $i--;) { + $ctx[3][$i + $left] = $p[$i + $offset]; + } + + # S->buflen += fill; + $ctx[4] += $fill; + + # blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); + self::increment_counter($ctx, 128); + + # blake2b_compress( S, S->buf ); /* Compress */ + self::compress($ctx, $ctx[3]); + + # memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); /* Shift buffer left */ + for ($i = 128; $i--;) { + $ctx[3][$i] = $ctx[3][$i + 128]; + } + + # S->buflen -= BLAKE2B_BLOCKBYTES; + $ctx[4] -= 128; + + # in += fill; + $offset += $fill; + + # inlen -= fill; + $plen -= $fill; + } else { + for ($i = $plen; $i--;) { + $ctx[3][$i + $left] = $p[$i + $offset]; + } + $ctx[4] += $plen; + $offset += $plen; + $plen -= $plen; + } + } + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $ctx + * @param SplFixedArray $out + * @return SplFixedArray + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + * @psalm-suppress MixedAssignment + * @psalm-suppress MixedArrayAccess + * @psalm-suppress MixedArrayAssignment + * @psalm-suppress MixedArrayOffset + * @psalm-suppress MixedOperand + */ + public static function finish(SplFixedArray $ctx, SplFixedArray $out) + { + self::pseudoConstructor(); + if ($ctx[4] > 128) { + self::increment_counter($ctx, 128); + self::compress($ctx, $ctx[3]); + $ctx[4] -= 128; + if ($ctx[4] > 128) { + throw new SodiumException('Failed to assert that buflen <= 128 bytes'); + } + for ($i = $ctx[4]; $i--;) { + $ctx[3][$i] = $ctx[3][$i + 128]; + } + } + + self::increment_counter($ctx, $ctx[4]); + $ctx[2][0] = self::new64(0xffffffff, 0xffffffff); + + for ($i = 256 - $ctx[4]; $i--;) { + $ctx[3][$i+$ctx[4]] = 0; + } + + self::compress($ctx, $ctx[3]); + + $i = (int) (($out->getSize() - 1) / 8); + for (; $i >= 0; --$i) { + self::store64($out, $i << 3, $ctx[0][$i]); + } + return $out; + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray|null $key + * @param int $outlen + * @param SplFixedArray|null $salt + * @param SplFixedArray|null $personal + * @return SplFixedArray + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + * @psalm-suppress MixedAssignment + * @psalm-suppress MixedArrayAccess + * @psalm-suppress MixedArrayAssignment + * @psalm-suppress MixedArrayOffset + */ + public static function init( + $key = null, + $outlen = 64, + $salt = null, + $personal = null + ) { + self::pseudoConstructor(); + $klen = 0; + + if ($key !== null) { + if (count($key) > 64) { + throw new SodiumException('Invalid key size'); + } + $klen = count($key); + } + + if ($outlen > 64) { + throw new SodiumException('Invalid output size'); + } + + $ctx = self::context(); + + $p = new SplFixedArray(64); + // Zero our param buffer... + for ($i = 64; --$i;) { + $p[$i] = 0; + } + + $p[0] = $outlen; // digest_length + $p[1] = $klen; // key_length + $p[2] = 1; // fanout + $p[3] = 1; // depth + + if ($salt instanceof SplFixedArray) { + // salt: [32] through [47] + for ($i = 0; $i < 16; ++$i) { + $p[32 + $i] = (int) $salt[$i]; + } + } + if ($personal instanceof SplFixedArray) { + // personal: [48] through [63] + for ($i = 0; $i < 16; ++$i) { + $p[48 + $i] = (int) $personal[$i]; + } + } + + $ctx[0][0] = self::xor64( + $ctx[0][0], + self::load64($p, 0) + ); + if ($salt instanceof SplFixedArray || $personal instanceof SplFixedArray) { + // We need to do what blake2b_init_param() does: + for ($i = 1; $i < 8; ++$i) { + $ctx[0][$i] = self::xor64( + $ctx[0][$i], + self::load64($p, $i << 3) + ); + } + } + + if ($klen > 0 && $key instanceof SplFixedArray) { + $block = new SplFixedArray(128); + for ($i = 128; $i--;) { + $block[$i] = 0; + } + for ($i = $klen; $i--;) { + $block[$i] = $key[$i]; + } + self::update($ctx, $block, 128); + $ctx[4] = 128; + } + + return $ctx; + } + + /** + * Convert a string into an SplFixedArray of integers + * + * @internal You should not use this directly from another application + * + * @param string $str + * @return SplFixedArray + * @psalm-suppress MixedArgumentTypeCoercion + */ + public static function stringToSplFixedArray($str = '') + { + $values = unpack('C*', $str); + return SplFixedArray::fromArray(array_values($values)); + } + + /** + * Convert an SplFixedArray of integers into a string + * + * @internal You should not use this directly from another application + * + * @param SplFixedArray $a + * @return string + * @throws TypeError + */ + public static function SplFixedArrayToString(SplFixedArray $a) + { + /** + * @var array $arr + */ + $arr = $a->toArray(); + $c = $a->count(); + array_unshift($arr, str_repeat('C', $c)); + return (string) (call_user_func_array('pack', $arr)); + } + + /** + * @internal You should not use this directly from another application + * + * @param SplFixedArray $ctx + * @return string + * @throws TypeError + * @psalm-suppress MixedArgument + * @psalm-suppress MixedAssignment + * @psalm-suppress MixedArrayAccess + * @psalm-suppress MixedArrayAssignment + * @psalm-suppress MixedArrayOffset + * @psalm-suppress MixedMethodCall + */ + public static function contextToString(SplFixedArray $ctx) + { + $str = ''; + /** @var array> $ctxA */ + $ctxA = $ctx[0]->toArray(); + + # uint64_t h[8]; + for ($i = 0; $i < 8; ++$i) { + $str .= self::store32_le($ctxA[$i][1]); + $str .= self::store32_le($ctxA[$i][0]); + } + + # uint64_t t[2]; + # uint64_t f[2]; + for ($i = 1; $i < 3; ++$i) { + $ctxA = $ctx[$i]->toArray(); + $str .= self::store32_le($ctxA[0][1]); + $str .= self::store32_le($ctxA[0][0]); + $str .= self::store32_le($ctxA[1][1]); + $str .= self::store32_le($ctxA[1][0]); + } + + # uint8_t buf[2 * 128]; + $str .= self::SplFixedArrayToString($ctx[3]); + + /** @var int $ctx4 */ + $ctx4 = (int) $ctx[4]; + + # size_t buflen; + $str .= implode('', array( + self::intToChr($ctx4 & 0xff), + self::intToChr(($ctx4 >> 8) & 0xff), + self::intToChr(($ctx4 >> 16) & 0xff), + self::intToChr(($ctx4 >> 24) & 0xff), + self::intToChr(($ctx4 >> 32) & 0xff), + self::intToChr(($ctx4 >> 40) & 0xff), + self::intToChr(($ctx4 >> 48) & 0xff), + self::intToChr(($ctx4 >> 56) & 0xff) + )); + # uint8_t last_node; + return $str . self::intToChr($ctx[5]) . str_repeat("\x00", 23); + } + + /** + * Creates an SplFixedArray containing other SplFixedArray elements, from + * a string (compatible with \Sodium\crypto_generichash_{init, update, final}) + * + * @internal You should not use this directly from another application + * + * @param string $string + * @return SplFixedArray + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArrayAssignment + */ + public static function stringToContext($string) + { + $ctx = self::context(); + + # uint64_t h[8]; + for ($i = 0; $i < 8; ++$i) { + $ctx[0][$i] = SplFixedArray::fromArray( + array( + self::load_4( + self::substr($string, (($i << 3) + 4), 4) + ), + self::load_4( + self::substr($string, (($i << 3) + 0), 4) + ) + ) + ); + } + + # uint64_t t[2]; + # uint64_t f[2]; + for ($i = 1; $i < 3; ++$i) { + $ctx[$i][1] = SplFixedArray::fromArray( + array( + self::load_4(self::substr($string, 76 + (($i - 1) << 4), 4)), + self::load_4(self::substr($string, 72 + (($i - 1) << 4), 4)) + ) + ); + $ctx[$i][0] = SplFixedArray::fromArray( + array( + self::load_4(self::substr($string, 68 + (($i - 1) << 4), 4)), + self::load_4(self::substr($string, 64 + (($i - 1) << 4), 4)) + ) + ); + } + + # uint8_t buf[2 * 128]; + $ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256)); + + # uint8_t buf[2 * 128]; + $int = 0; + for ($i = 0; $i < 8; ++$i) { + $int |= self::chrToInt($string[352 + $i]) << ($i << 3); + } + $ctx[4] = $int; + + return $ctx; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519.php new file mode 100644 index 0000000..dfcf26a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519.php @@ -0,0 +1,3836 @@ + $arr */ + $arr = array(); + for ($i = 0; $i < 10; ++$i) { + $arr[$i] = (int) ($f[$i] + $g[$i]); + } + return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($arr); + } + + /** + * Constant-time conditional move. + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $f + * @param ParagonIE_Sodium_Core_Curve25519_Fe $g + * @param int $b + * @return ParagonIE_Sodium_Core_Curve25519_Fe + * @psalm-suppress MixedAssignment + */ + public static function fe_cmov( + ParagonIE_Sodium_Core_Curve25519_Fe $f, + ParagonIE_Sodium_Core_Curve25519_Fe $g, + $b = 0 + ) { + /** @var array $h */ + $h = array(); + $b *= -1; + for ($i = 0; $i < 10; ++$i) { + $x = (($f[$i] ^ $g[$i]) & $b); + $h[$i] = ($f[$i]) ^ $x; + } + return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($h); + } + + /** + * Create a copy of a field element. + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $f + * @return ParagonIE_Sodium_Core_Curve25519_Fe + */ + public static function fe_copy(ParagonIE_Sodium_Core_Curve25519_Fe $f) + { + $h = clone $f; + return $h; + } + + /** + * Give: 32-byte string. + * Receive: A field element object to use for internal calculations. + * + * @internal You should not use this directly from another application + * + * @param string $s + * @return ParagonIE_Sodium_Core_Curve25519_Fe + * @throws RangeException + * @throws TypeError + */ + public static function fe_frombytes($s) + { + if (self::strlen($s) !== 32) { + throw new RangeException('Expected a 32-byte string.'); + } + $h0 = self::load_4($s); + $h1 = self::load_3(self::substr($s, 4, 3)) << 6; + $h2 = self::load_3(self::substr($s, 7, 3)) << 5; + $h3 = self::load_3(self::substr($s, 10, 3)) << 3; + $h4 = self::load_3(self::substr($s, 13, 3)) << 2; + $h5 = self::load_4(self::substr($s, 16, 4)); + $h6 = self::load_3(self::substr($s, 20, 3)) << 7; + $h7 = self::load_3(self::substr($s, 23, 3)) << 5; + $h8 = self::load_3(self::substr($s, 26, 3)) << 4; + $h9 = (self::load_3(self::substr($s, 29, 3)) & 8388607) << 2; + + $carry9 = ($h9 + (1 << 24)) >> 25; + $h0 += self::mul($carry9, 19, 5); + $h9 -= $carry9 << 25; + $carry1 = ($h1 + (1 << 24)) >> 25; + $h2 += $carry1; + $h1 -= $carry1 << 25; + $carry3 = ($h3 + (1 << 24)) >> 25; + $h4 += $carry3; + $h3 -= $carry3 << 25; + $carry5 = ($h5 + (1 << 24)) >> 25; + $h6 += $carry5; + $h5 -= $carry5 << 25; + $carry7 = ($h7 + (1 << 24)) >> 25; + $h8 += $carry7; + $h7 -= $carry7 << 25; + + $carry0 = ($h0 + (1 << 25)) >> 26; + $h1 += $carry0; + $h0 -= $carry0 << 26; + $carry2 = ($h2 + (1 << 25)) >> 26; + $h3 += $carry2; + $h2 -= $carry2 << 26; + $carry4 = ($h4 + (1 << 25)) >> 26; + $h5 += $carry4; + $h4 -= $carry4 << 26; + $carry6 = ($h6 + (1 << 25)) >> 26; + $h7 += $carry6; + $h6 -= $carry6 << 26; + $carry8 = ($h8 + (1 << 25)) >> 26; + $h9 += $carry8; + $h8 -= $carry8 << 26; + + return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( + array( + (int) $h0, + (int) $h1, + (int) $h2, + (int) $h3, + (int) $h4, + (int) $h5, + (int) $h6, + (int) $h7, + (int) $h8, + (int) $h9 + ) + ); + } + + /** + * Convert a field element to a byte string. + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $h + * @return string + */ + public static function fe_tobytes(ParagonIE_Sodium_Core_Curve25519_Fe $h) + { + $h0 = (int) $h[0]; + $h1 = (int) $h[1]; + $h2 = (int) $h[2]; + $h3 = (int) $h[3]; + $h4 = (int) $h[4]; + $h5 = (int) $h[5]; + $h6 = (int) $h[6]; + $h7 = (int) $h[7]; + $h8 = (int) $h[8]; + $h9 = (int) $h[9]; + + $q = (self::mul($h9, 19, 5) + (1 << 24)) >> 25; + $q = ($h0 + $q) >> 26; + $q = ($h1 + $q) >> 25; + $q = ($h2 + $q) >> 26; + $q = ($h3 + $q) >> 25; + $q = ($h4 + $q) >> 26; + $q = ($h5 + $q) >> 25; + $q = ($h6 + $q) >> 26; + $q = ($h7 + $q) >> 25; + $q = ($h8 + $q) >> 26; + $q = ($h9 + $q) >> 25; + + $h0 += self::mul($q, 19, 5); + + $carry0 = $h0 >> 26; + $h1 += $carry0; + $h0 -= $carry0 << 26; + $carry1 = $h1 >> 25; + $h2 += $carry1; + $h1 -= $carry1 << 25; + $carry2 = $h2 >> 26; + $h3 += $carry2; + $h2 -= $carry2 << 26; + $carry3 = $h3 >> 25; + $h4 += $carry3; + $h3 -= $carry3 << 25; + $carry4 = $h4 >> 26; + $h5 += $carry4; + $h4 -= $carry4 << 26; + $carry5 = $h5 >> 25; + $h6 += $carry5; + $h5 -= $carry5 << 25; + $carry6 = $h6 >> 26; + $h7 += $carry6; + $h6 -= $carry6 << 26; + $carry7 = $h7 >> 25; + $h8 += $carry7; + $h7 -= $carry7 << 25; + $carry8 = $h8 >> 26; + $h9 += $carry8; + $h8 -= $carry8 << 26; + $carry9 = $h9 >> 25; + $h9 -= $carry9 << 25; + + /** + * @var array + */ + $s = array( + (int) (($h0 >> 0) & 0xff), + (int) (($h0 >> 8) & 0xff), + (int) (($h0 >> 16) & 0xff), + (int) ((($h0 >> 24) | ($h1 << 2)) & 0xff), + (int) (($h1 >> 6) & 0xff), + (int) (($h1 >> 14) & 0xff), + (int) ((($h1 >> 22) | ($h2 << 3)) & 0xff), + (int) (($h2 >> 5) & 0xff), + (int) (($h2 >> 13) & 0xff), + (int) ((($h2 >> 21) | ($h3 << 5)) & 0xff), + (int) (($h3 >> 3) & 0xff), + (int) (($h3 >> 11) & 0xff), + (int) ((($h3 >> 19) | ($h4 << 6)) & 0xff), + (int) (($h4 >> 2) & 0xff), + (int) (($h4 >> 10) & 0xff), + (int) (($h4 >> 18) & 0xff), + (int) (($h5 >> 0) & 0xff), + (int) (($h5 >> 8) & 0xff), + (int) (($h5 >> 16) & 0xff), + (int) ((($h5 >> 24) | ($h6 << 1)) & 0xff), + (int) (($h6 >> 7) & 0xff), + (int) (($h6 >> 15) & 0xff), + (int) ((($h6 >> 23) | ($h7 << 3)) & 0xff), + (int) (($h7 >> 5) & 0xff), + (int) (($h7 >> 13) & 0xff), + (int) ((($h7 >> 21) | ($h8 << 4)) & 0xff), + (int) (($h8 >> 4) & 0xff), + (int) (($h8 >> 12) & 0xff), + (int) ((($h8 >> 20) | ($h9 << 6)) & 0xff), + (int) (($h9 >> 2) & 0xff), + (int) (($h9 >> 10) & 0xff), + (int) (($h9 >> 18) & 0xff) + ); + return self::intArrayToString($s); + } + + /** + * Is a field element negative? (1 = yes, 0 = no. Used in calculations.) + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $f + * @return int + * @throws SodiumException + * @throws TypeError + */ + public static function fe_isnegative(ParagonIE_Sodium_Core_Curve25519_Fe $f) + { + $str = self::fe_tobytes($f); + return (int) (self::chrToInt($str[0]) & 1); + } + + /** + * Returns 0 if this field element results in all NUL bytes. + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $f + * @return bool + * @throws SodiumException + * @throws TypeError + */ + public static function fe_isnonzero(ParagonIE_Sodium_Core_Curve25519_Fe $f) + { + static $zero; + if ($zero === null) { + $zero = str_repeat("\x00", 32); + } + /** @var string $zero */ + /** @var string $str */ + $str = self::fe_tobytes($f); + return !self::verify_32($str, (string) $zero); + } + + /** + * Multiply two field elements + * + * h = f * g + * + * @internal You should not use this directly from another application + * + * @security Is multiplication a source of timing leaks? If so, can we do + * anything to prevent that from happening? + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $f + * @param ParagonIE_Sodium_Core_Curve25519_Fe $g + * @return ParagonIE_Sodium_Core_Curve25519_Fe + */ + public static function fe_mul( + ParagonIE_Sodium_Core_Curve25519_Fe $f, + ParagonIE_Sodium_Core_Curve25519_Fe $g + ) { + // Ensure limbs aren't oversized. + $f = self::fe_normalize($f); + $g = self::fe_normalize($g); + $f0 = $f[0]; + $f1 = $f[1]; + $f2 = $f[2]; + $f3 = $f[3]; + $f4 = $f[4]; + $f5 = $f[5]; + $f6 = $f[6]; + $f7 = $f[7]; + $f8 = $f[8]; + $f9 = $f[9]; + $g0 = $g[0]; + $g1 = $g[1]; + $g2 = $g[2]; + $g3 = $g[3]; + $g4 = $g[4]; + $g5 = $g[5]; + $g6 = $g[6]; + $g7 = $g[7]; + $g8 = $g[8]; + $g9 = $g[9]; + $g1_19 = self::mul($g1, 19, 5); + $g2_19 = self::mul($g2, 19, 5); + $g3_19 = self::mul($g3, 19, 5); + $g4_19 = self::mul($g4, 19, 5); + $g5_19 = self::mul($g5, 19, 5); + $g6_19 = self::mul($g6, 19, 5); + $g7_19 = self::mul($g7, 19, 5); + $g8_19 = self::mul($g8, 19, 5); + $g9_19 = self::mul($g9, 19, 5); + $f1_2 = $f1 << 1; + $f3_2 = $f3 << 1; + $f5_2 = $f5 << 1; + $f7_2 = $f7 << 1; + $f9_2 = $f9 << 1; + $f0g0 = self::mul($f0, $g0, 26); + $f0g1 = self::mul($f0, $g1, 25); + $f0g2 = self::mul($f0, $g2, 26); + $f0g3 = self::mul($f0, $g3, 25); + $f0g4 = self::mul($f0, $g4, 26); + $f0g5 = self::mul($f0, $g5, 25); + $f0g6 = self::mul($f0, $g6, 26); + $f0g7 = self::mul($f0, $g7, 25); + $f0g8 = self::mul($f0, $g8, 26); + $f0g9 = self::mul($f0, $g9, 26); + $f1g0 = self::mul($f1, $g0, 26); + $f1g1_2 = self::mul($f1_2, $g1, 25); + $f1g2 = self::mul($f1, $g2, 26); + $f1g3_2 = self::mul($f1_2, $g3, 25); + $f1g4 = self::mul($f1, $g4, 26); + $f1g5_2 = self::mul($f1_2, $g5, 25); + $f1g6 = self::mul($f1, $g6, 26); + $f1g7_2 = self::mul($f1_2, $g7, 25); + $f1g8 = self::mul($f1, $g8, 26); + $f1g9_38 = self::mul($g9_19, $f1_2, 26); + $f2g0 = self::mul($f2, $g0, 26); + $f2g1 = self::mul($f2, $g1, 25); + $f2g2 = self::mul($f2, $g2, 26); + $f2g3 = self::mul($f2, $g3, 25); + $f2g4 = self::mul($f2, $g4, 26); + $f2g5 = self::mul($f2, $g5, 25); + $f2g6 = self::mul($f2, $g6, 26); + $f2g7 = self::mul($f2, $g7, 25); + $f2g8_19 = self::mul($g8_19, $f2, 26); + $f2g9_19 = self::mul($g9_19, $f2, 26); + $f3g0 = self::mul($f3, $g0, 26); + $f3g1_2 = self::mul($f3_2, $g1, 25); + $f3g2 = self::mul($f3, $g2, 26); + $f3g3_2 = self::mul($f3_2, $g3, 25); + $f3g4 = self::mul($f3, $g4, 26); + $f3g5_2 = self::mul($f3_2, $g5, 25); + $f3g6 = self::mul($f3, $g6, 26); + $f3g7_38 = self::mul($g7_19, $f3_2, 26); + $f3g8_19 = self::mul($g8_19, $f3, 25); + $f3g9_38 = self::mul($g9_19, $f3_2, 26); + $f4g0 = self::mul($f4, $g0, 26); + $f4g1 = self::mul($f4, $g1, 25); + $f4g2 = self::mul($f4, $g2, 26); + $f4g3 = self::mul($f4, $g3, 25); + $f4g4 = self::mul($f4, $g4, 26); + $f4g5 = self::mul($f4, $g5, 25); + $f4g6_19 = self::mul($g6_19, $f4, 26); + $f4g7_19 = self::mul($g7_19, $f4, 26); + $f4g8_19 = self::mul($g8_19, $f4, 26); + $f4g9_19 = self::mul($g9_19, $f4, 26); + $f5g0 = self::mul($f5, $g0, 26); + $f5g1_2 = self::mul($f5_2, $g1, 25); + $f5g2 = self::mul($f5, $g2, 26); + $f5g3_2 = self::mul($f5_2, $g3, 25); + $f5g4 = self::mul($f5, $g4, 26); + $f5g5_38 = self::mul($g5_19, $f5_2, 26); + $f5g6_19 = self::mul($g6_19, $f5, 25); + $f5g7_38 = self::mul($g7_19, $f5_2, 26); + $f5g8_19 = self::mul($g8_19, $f5, 25); + $f5g9_38 = self::mul($g9_19, $f5_2, 26); + $f6g0 = self::mul($f6, $g0, 26); + $f6g1 = self::mul($f6, $g1, 25); + $f6g2 = self::mul($f6, $g2, 26); + $f6g3 = self::mul($f6, $g3, 25); + $f6g4_19 = self::mul($g4_19, $f6, 26); + $f6g5_19 = self::mul($g5_19, $f6, 26); + $f6g6_19 = self::mul($g6_19, $f6, 26); + $f6g7_19 = self::mul($g7_19, $f6, 26); + $f6g8_19 = self::mul($g8_19, $f6, 26); + $f6g9_19 = self::mul($g9_19, $f6, 26); + $f7g0 = self::mul($f7, $g0, 26); + $f7g1_2 = self::mul($f7_2, $g1, 25); + $f7g2 = self::mul($f7, $g2, 26); + $f7g3_38 = self::mul($g3_19, $f7_2, 26); + $f7g4_19 = self::mul($g4_19, $f7, 26); + $f7g5_38 = self::mul($g5_19, $f7_2, 26); + $f7g6_19 = self::mul($g6_19, $f7, 25); + $f7g7_38 = self::mul($g7_19, $f7_2, 26); + $f7g8_19 = self::mul($g8_19, $f7, 25); + $f7g9_38 = self::mul($g9_19,$f7_2, 26); + $f8g0 = self::mul($f8, $g0, 26); + $f8g1 = self::mul($f8, $g1, 25); + $f8g2_19 = self::mul($g2_19, $f8, 26); + $f8g3_19 = self::mul($g3_19, $f8, 26); + $f8g4_19 = self::mul($g4_19, $f8, 26); + $f8g5_19 = self::mul($g5_19, $f8, 26); + $f8g6_19 = self::mul($g6_19, $f8, 26); + $f8g7_19 = self::mul($g7_19, $f8, 26); + $f8g8_19 = self::mul($g8_19, $f8, 26); + $f8g9_19 = self::mul($g9_19, $f8, 26); + $f9g0 = self::mul($f9, $g0, 26); + $f9g1_38 = self::mul($g1_19, $f9_2, 26); + $f9g2_19 = self::mul($g2_19, $f9, 25); + $f9g3_38 = self::mul($g3_19, $f9_2, 26); + $f9g4_19 = self::mul($g4_19, $f9, 25); + $f9g5_38 = self::mul($g5_19, $f9_2, 26); + $f9g6_19 = self::mul($g6_19, $f9, 25); + $f9g7_38 = self::mul($g7_19, $f9_2, 26); + $f9g8_19 = self::mul($g8_19, $f9, 25); + $f9g9_38 = self::mul($g9_19, $f9_2, 26); + + $h0 = $f0g0 + $f1g9_38 + $f2g8_19 + $f3g7_38 + $f4g6_19 + $f5g5_38 + $f6g4_19 + $f7g3_38 + $f8g2_19 + $f9g1_38; + $h1 = $f0g1 + $f1g0 + $f2g9_19 + $f3g8_19 + $f4g7_19 + $f5g6_19 + $f6g5_19 + $f7g4_19 + $f8g3_19 + $f9g2_19; + $h2 = $f0g2 + $f1g1_2 + $f2g0 + $f3g9_38 + $f4g8_19 + $f5g7_38 + $f6g6_19 + $f7g5_38 + $f8g4_19 + $f9g3_38; + $h3 = $f0g3 + $f1g2 + $f2g1 + $f3g0 + $f4g9_19 + $f5g8_19 + $f6g7_19 + $f7g6_19 + $f8g5_19 + $f9g4_19; + $h4 = $f0g4 + $f1g3_2 + $f2g2 + $f3g1_2 + $f4g0 + $f5g9_38 + $f6g8_19 + $f7g7_38 + $f8g6_19 + $f9g5_38; + $h5 = $f0g5 + $f1g4 + $f2g3 + $f3g2 + $f4g1 + $f5g0 + $f6g9_19 + $f7g8_19 + $f8g7_19 + $f9g6_19; + $h6 = $f0g6 + $f1g5_2 + $f2g4 + $f3g3_2 + $f4g2 + $f5g1_2 + $f6g0 + $f7g9_38 + $f8g8_19 + $f9g7_38; + $h7 = $f0g7 + $f1g6 + $f2g5 + $f3g4 + $f4g3 + $f5g2 + $f6g1 + $f7g0 + $f8g9_19 + $f9g8_19; + $h8 = $f0g8 + $f1g7_2 + $f2g6 + $f3g5_2 + $f4g4 + $f5g3_2 + $f6g2 + $f7g1_2 + $f8g0 + $f9g9_38; + $h9 = $f0g9 + $f1g8 + $f2g7 + $f3g6 + $f4g5 + $f5g4 + $f6g3 + $f7g2 + $f8g1 + $f9g0 ; + + $carry0 = ($h0 + (1 << 25)) >> 26; + $h1 += $carry0; + $h0 -= $carry0 << 26; + $carry4 = ($h4 + (1 << 25)) >> 26; + $h5 += $carry4; + $h4 -= $carry4 << 26; + + $carry1 = ($h1 + (1 << 24)) >> 25; + $h2 += $carry1; + $h1 -= $carry1 << 25; + $carry5 = ($h5 + (1 << 24)) >> 25; + $h6 += $carry5; + $h5 -= $carry5 << 25; + + $carry2 = ($h2 + (1 << 25)) >> 26; + $h3 += $carry2; + $h2 -= $carry2 << 26; + $carry6 = ($h6 + (1 << 25)) >> 26; + $h7 += $carry6; + $h6 -= $carry6 << 26; + + $carry3 = ($h3 + (1 << 24)) >> 25; + $h4 += $carry3; + $h3 -= $carry3 << 25; + $carry7 = ($h7 + (1 << 24)) >> 25; + $h8 += $carry7; + $h7 -= $carry7 << 25; + + $carry4 = ($h4 + (1 << 25)) >> 26; + $h5 += $carry4; + $h4 -= $carry4 << 26; + $carry8 = ($h8 + (1 << 25)) >> 26; + $h9 += $carry8; + $h8 -= $carry8 << 26; + + $carry9 = ($h9 + (1 << 24)) >> 25; + $h0 += self::mul($carry9, 19, 5); + $h9 -= $carry9 << 25; + + $carry0 = ($h0 + (1 << 25)) >> 26; + $h1 += $carry0; + $h0 -= $carry0 << 26; + + return self::fe_normalize( + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( + array( + (int) $h0, + (int) $h1, + (int) $h2, + (int) $h3, + (int) $h4, + (int) $h5, + (int) $h6, + (int) $h7, + (int) $h8, + (int) $h9 + ) + ) + ); + } + + /** + * Get the negative values for each piece of the field element. + * + * h = -f + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $f + * @return ParagonIE_Sodium_Core_Curve25519_Fe + * @psalm-suppress MixedAssignment + */ + public static function fe_neg(ParagonIE_Sodium_Core_Curve25519_Fe $f) + { + $h = new ParagonIE_Sodium_Core_Curve25519_Fe(); + for ($i = 0; $i < 10; ++$i) { + $h[$i] = -$f[$i]; + } + return self::fe_normalize($h); + } + + /** + * Square a field element + * + * h = f * f + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $f + * @return ParagonIE_Sodium_Core_Curve25519_Fe + */ + public static function fe_sq(ParagonIE_Sodium_Core_Curve25519_Fe $f) + { + $f = self::fe_normalize($f); + $f0 = (int) $f[0]; + $f1 = (int) $f[1]; + $f2 = (int) $f[2]; + $f3 = (int) $f[3]; + $f4 = (int) $f[4]; + $f5 = (int) $f[5]; + $f6 = (int) $f[6]; + $f7 = (int) $f[7]; + $f8 = (int) $f[8]; + $f9 = (int) $f[9]; + + $f0_2 = $f0 << 1; + $f1_2 = $f1 << 1; + $f2_2 = $f2 << 1; + $f3_2 = $f3 << 1; + $f4_2 = $f4 << 1; + $f5_2 = $f5 << 1; + $f6_2 = $f6 << 1; + $f7_2 = $f7 << 1; + $f5_38 = self::mul($f5, 38, 6); + $f6_19 = self::mul($f6, 19, 5); + $f7_38 = self::mul($f7, 38, 6); + $f8_19 = self::mul($f8, 19, 5); + $f9_38 = self::mul($f9, 38, 6); + $f0f0 = self::mul($f0, $f0, 26); + $f0f1_2 = self::mul($f0_2, $f1, 26); + $f0f2_2 = self::mul($f0_2, $f2, 26); + $f0f3_2 = self::mul($f0_2, $f3, 26); + $f0f4_2 = self::mul($f0_2, $f4, 26); + $f0f5_2 = self::mul($f0_2, $f5, 26); + $f0f6_2 = self::mul($f0_2, $f6, 26); + $f0f7_2 = self::mul($f0_2, $f7, 26); + $f0f8_2 = self::mul($f0_2, $f8, 26); + $f0f9_2 = self::mul($f0_2, $f9, 26); + $f1f1_2 = self::mul($f1_2, $f1, 26); + $f1f2_2 = self::mul($f1_2, $f2, 26); + $f1f3_4 = self::mul($f1_2, $f3_2, 26); + $f1f4_2 = self::mul($f1_2, $f4, 26); + $f1f5_4 = self::mul($f1_2, $f5_2, 26); + $f1f6_2 = self::mul($f1_2, $f6, 26); + $f1f7_4 = self::mul($f1_2, $f7_2, 26); + $f1f8_2 = self::mul($f1_2, $f8, 26); + $f1f9_76 = self::mul($f9_38, $f1_2, 27); + $f2f2 = self::mul($f2, $f2, 27); + $f2f3_2 = self::mul($f2_2, $f3, 27); + $f2f4_2 = self::mul($f2_2, $f4, 27); + $f2f5_2 = self::mul($f2_2, $f5, 27); + $f2f6_2 = self::mul($f2_2, $f6, 27); + $f2f7_2 = self::mul($f2_2, $f7, 27); + $f2f8_38 = self::mul($f8_19, $f2_2, 27); + $f2f9_38 = self::mul($f9_38, $f2, 26); + $f3f3_2 = self::mul($f3_2, $f3, 26); + $f3f4_2 = self::mul($f3_2, $f4, 26); + $f3f5_4 = self::mul($f3_2, $f5_2, 26); + $f3f6_2 = self::mul($f3_2, $f6, 26); + $f3f7_76 = self::mul($f7_38, $f3_2, 26); + $f3f8_38 = self::mul($f8_19, $f3_2, 26); + $f3f9_76 = self::mul($f9_38, $f3_2, 26); + $f4f4 = self::mul($f4, $f4, 26); + $f4f5_2 = self::mul($f4_2, $f5, 26); + $f4f6_38 = self::mul($f6_19, $f4_2, 27); + $f4f7_38 = self::mul($f7_38, $f4, 26); + $f4f8_38 = self::mul($f8_19, $f4_2, 27); + $f4f9_38 = self::mul($f9_38, $f4, 26); + $f5f5_38 = self::mul($f5_38, $f5, 26); + $f5f6_38 = self::mul($f6_19, $f5_2, 26); + $f5f7_76 = self::mul($f7_38, $f5_2, 26); + $f5f8_38 = self::mul($f8_19, $f5_2, 26); + $f5f9_76 = self::mul($f9_38, $f5_2, 26); + $f6f6_19 = self::mul($f6_19, $f6, 26); + $f6f7_38 = self::mul($f7_38, $f6, 26); + $f6f8_38 = self::mul($f8_19, $f6_2, 27); + $f6f9_38 = self::mul($f9_38, $f6, 26); + $f7f7_38 = self::mul($f7_38, $f7, 26); + $f7f8_38 = self::mul($f8_19, $f7_2, 26); + $f7f9_76 = self::mul($f9_38, $f7_2, 26); + $f8f8_19 = self::mul($f8_19, $f8, 26); + $f8f9_38 = self::mul($f9_38, $f8, 26); + $f9f9_38 = self::mul($f9_38, $f9, 26); + $h0 = $f0f0 + $f1f9_76 + $f2f8_38 + $f3f7_76 + $f4f6_38 + $f5f5_38; + $h1 = $f0f1_2 + $f2f9_38 + $f3f8_38 + $f4f7_38 + $f5f6_38; + $h2 = $f0f2_2 + $f1f1_2 + $f3f9_76 + $f4f8_38 + $f5f7_76 + $f6f6_19; + $h3 = $f0f3_2 + $f1f2_2 + $f4f9_38 + $f5f8_38 + $f6f7_38; + $h4 = $f0f4_2 + $f1f3_4 + $f2f2 + $f5f9_76 + $f6f8_38 + $f7f7_38; + $h5 = $f0f5_2 + $f1f4_2 + $f2f3_2 + $f6f9_38 + $f7f8_38; + $h6 = $f0f6_2 + $f1f5_4 + $f2f4_2 + $f3f3_2 + $f7f9_76 + $f8f8_19; + $h7 = $f0f7_2 + $f1f6_2 + $f2f5_2 + $f3f4_2 + $f8f9_38; + $h8 = $f0f8_2 + $f1f7_4 + $f2f6_2 + $f3f5_4 + $f4f4 + $f9f9_38; + $h9 = $f0f9_2 + $f1f8_2 + $f2f7_2 + $f3f6_2 + $f4f5_2; + + $carry0 = ($h0 + (1 << 25)) >> 26; + $h1 += $carry0; + $h0 -= $carry0 << 26; + $carry4 = ($h4 + (1 << 25)) >> 26; + $h5 += $carry4; + $h4 -= $carry4 << 26; + + $carry1 = ($h1 + (1 << 24)) >> 25; + $h2 += $carry1; + $h1 -= $carry1 << 25; + $carry5 = ($h5 + (1 << 24)) >> 25; + $h6 += $carry5; + $h5 -= $carry5 << 25; + + $carry2 = ($h2 + (1 << 25)) >> 26; + $h3 += $carry2; + $h2 -= $carry2 << 26; + $carry6 = ($h6 + (1 << 25)) >> 26; + $h7 += $carry6; + $h6 -= $carry6 << 26; + + $carry3 = ($h3 + (1 << 24)) >> 25; + $h4 += $carry3; + $h3 -= $carry3 << 25; + $carry7 = ($h7 + (1 << 24)) >> 25; + $h8 += $carry7; + $h7 -= $carry7 << 25; + + $carry4 = ($h4 + (1 << 25)) >> 26; + $h5 += $carry4; + $h4 -= $carry4 << 26; + $carry8 = ($h8 + (1 << 25)) >> 26; + $h9 += $carry8; + $h8 -= $carry8 << 26; + + $carry9 = ($h9 + (1 << 24)) >> 25; + $h0 += self::mul($carry9, 19, 5); + $h9 -= $carry9 << 25; + + $carry0 = ($h0 + (1 << 25)) >> 26; + $h1 += $carry0; + $h0 -= $carry0 << 26; + + return self::fe_normalize( + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( + array( + (int) $h0, + (int) $h1, + (int) $h2, + (int) $h3, + (int) $h4, + (int) $h5, + (int) $h6, + (int) $h7, + (int) $h8, + (int) $h9 + ) + ) + ); + } + + + /** + * Square and double a field element + * + * h = 2 * f * f + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $f + * @return ParagonIE_Sodium_Core_Curve25519_Fe + */ + public static function fe_sq2(ParagonIE_Sodium_Core_Curve25519_Fe $f) + { + $f = self::fe_normalize($f); + $f0 = (int) $f[0]; + $f1 = (int) $f[1]; + $f2 = (int) $f[2]; + $f3 = (int) $f[3]; + $f4 = (int) $f[4]; + $f5 = (int) $f[5]; + $f6 = (int) $f[6]; + $f7 = (int) $f[7]; + $f8 = (int) $f[8]; + $f9 = (int) $f[9]; + + $f0_2 = $f0 << 1; + $f1_2 = $f1 << 1; + $f2_2 = $f2 << 1; + $f3_2 = $f3 << 1; + $f4_2 = $f4 << 1; + $f5_2 = $f5 << 1; + $f6_2 = $f6 << 1; + $f7_2 = $f7 << 1; + $f5_38 = self::mul($f5, 38, 6); /* 1.959375*2^30 */ + $f6_19 = self::mul($f6, 19, 5); /* 1.959375*2^30 */ + $f7_38 = self::mul($f7, 38, 6); /* 1.959375*2^30 */ + $f8_19 = self::mul($f8, 19, 5); /* 1.959375*2^30 */ + $f9_38 = self::mul($f9, 38, 6); /* 1.959375*2^30 */ + $f0f0 = self::mul($f0, $f0, 24); + $f0f1_2 = self::mul($f0_2, $f1, 24); + $f0f2_2 = self::mul($f0_2, $f2, 24); + $f0f3_2 = self::mul($f0_2, $f3, 24); + $f0f4_2 = self::mul($f0_2, $f4, 24); + $f0f5_2 = self::mul($f0_2, $f5, 24); + $f0f6_2 = self::mul($f0_2, $f6, 24); + $f0f7_2 = self::mul($f0_2, $f7, 24); + $f0f8_2 = self::mul($f0_2, $f8, 24); + $f0f9_2 = self::mul($f0_2, $f9, 24); + $f1f1_2 = self::mul($f1_2, $f1, 24); + $f1f2_2 = self::mul($f1_2, $f2, 24); + $f1f3_4 = self::mul($f1_2, $f3_2, 24); + $f1f4_2 = self::mul($f1_2, $f4, 24); + $f1f5_4 = self::mul($f1_2, $f5_2, 24); + $f1f6_2 = self::mul($f1_2, $f6, 24); + $f1f7_4 = self::mul($f1_2, $f7_2, 24); + $f1f8_2 = self::mul($f1_2, $f8, 24); + $f1f9_76 = self::mul($f9_38, $f1_2, 24); + $f2f2 = self::mul($f2, $f2, 24); + $f2f3_2 = self::mul($f2_2, $f3, 24); + $f2f4_2 = self::mul($f2_2, $f4, 24); + $f2f5_2 = self::mul($f2_2, $f5, 24); + $f2f6_2 = self::mul($f2_2, $f6, 24); + $f2f7_2 = self::mul($f2_2, $f7, 24); + $f2f8_38 = self::mul($f8_19, $f2_2, 25); + $f2f9_38 = self::mul($f9_38, $f2, 24); + $f3f3_2 = self::mul($f3_2, $f3, 24); + $f3f4_2 = self::mul($f3_2, $f4, 24); + $f3f5_4 = self::mul($f3_2, $f5_2, 24); + $f3f6_2 = self::mul($f3_2, $f6, 24); + $f3f7_76 = self::mul($f7_38, $f3_2, 24); + $f3f8_38 = self::mul($f8_19, $f3_2, 24); + $f3f9_76 = self::mul($f9_38, $f3_2, 24); + $f4f4 = self::mul($f4, $f4, 24); + $f4f5_2 = self::mul($f4_2, $f5, 24); + $f4f6_38 = self::mul($f6_19, $f4_2, 25); + $f4f7_38 = self::mul($f7_38, $f4, 24); + $f4f8_38 = self::mul($f8_19, $f4_2, 25); + $f4f9_38 = self::mul($f9_38, $f4, 24); + $f5f5_38 = self::mul($f5_38, $f5, 24); + $f5f6_38 = self::mul($f6_19, $f5_2, 24); + $f5f7_76 = self::mul($f7_38, $f5_2, 24); + $f5f8_38 = self::mul($f8_19, $f5_2, 24); + $f5f9_76 = self::mul($f9_38, $f5_2, 24); + $f6f6_19 = self::mul($f6_19, $f6, 24); + $f6f7_38 = self::mul($f7_38, $f6, 24); + $f6f8_38 = self::mul($f8_19, $f6_2, 25); + $f6f9_38 = self::mul($f9_38, $f6, 24); + $f7f7_38 = self::mul($f7_38, $f7, 24); + $f7f8_38 = self::mul($f8_19, $f7_2, 24); + $f7f9_76 = self::mul($f9_38, $f7_2, 24); + $f8f8_19 = self::mul($f8_19, $f8, 24); + $f8f9_38 = self::mul($f9_38, $f8, 24); + $f9f9_38 = self::mul($f9_38, $f9, 24); + + $h0 = (int) ($f0f0 + $f1f9_76 + $f2f8_38 + $f3f7_76 + $f4f6_38 + $f5f5_38) << 1; + $h1 = (int) ($f0f1_2 + $f2f9_38 + $f3f8_38 + $f4f7_38 + $f5f6_38) << 1; + $h2 = (int) ($f0f2_2 + $f1f1_2 + $f3f9_76 + $f4f8_38 + $f5f7_76 + $f6f6_19) << 1; + $h3 = (int) ($f0f3_2 + $f1f2_2 + $f4f9_38 + $f5f8_38 + $f6f7_38) << 1; + $h4 = (int) ($f0f4_2 + $f1f3_4 + $f2f2 + $f5f9_76 + $f6f8_38 + $f7f7_38) << 1; + $h5 = (int) ($f0f5_2 + $f1f4_2 + $f2f3_2 + $f6f9_38 + $f7f8_38) << 1; + $h6 = (int) ($f0f6_2 + $f1f5_4 + $f2f4_2 + $f3f3_2 + $f7f9_76 + $f8f8_19) << 1; + $h7 = (int) ($f0f7_2 + $f1f6_2 + $f2f5_2 + $f3f4_2 + $f8f9_38) << 1; + $h8 = (int) ($f0f8_2 + $f1f7_4 + $f2f6_2 + $f3f5_4 + $f4f4 + $f9f9_38) << 1; + $h9 = (int) ($f0f9_2 + $f1f8_2 + $f2f7_2 + $f3f6_2 + $f4f5_2) << 1; + + $carry0 = ($h0 + (1 << 25)) >> 26; + $h1 += $carry0; + $h0 -= $carry0 << 26; + $carry4 = ($h4 + (1 << 25)) >> 26; + $h5 += $carry4; + $h4 -= $carry4 << 26; + + $carry1 = ($h1 + (1 << 24)) >> 25; + $h2 += $carry1; + $h1 -= $carry1 << 25; + $carry5 = ($h5 + (1 << 24)) >> 25; + $h6 += $carry5; + $h5 -= $carry5 << 25; + + $carry2 = ($h2 + (1 << 25)) >> 26; + $h3 += $carry2; + $h2 -= $carry2 << 26; + $carry6 = ($h6 + (1 << 25)) >> 26; + $h7 += $carry6; + $h6 -= $carry6 << 26; + + $carry3 = ($h3 + (1 << 24)) >> 25; + $h4 += $carry3; + $h3 -= $carry3 << 25; + $carry7 = ($h7 + (1 << 24)) >> 25; + $h8 += $carry7; + $h7 -= $carry7 << 25; + + $carry4 = ($h4 + (1 << 25)) >> 26; + $h5 += $carry4; + $h4 -= $carry4 << 26; + $carry8 = ($h8 + (1 << 25)) >> 26; + $h9 += $carry8; + $h8 -= $carry8 << 26; + + $carry9 = ($h9 + (1 << 24)) >> 25; + $h0 += self::mul($carry9, 19, 5); + $h9 -= $carry9 << 25; + + $carry0 = ($h0 + (1 << 25)) >> 26; + $h1 += $carry0; + $h0 -= $carry0 << 26; + + return self::fe_normalize( + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( + array( + (int) $h0, + (int) $h1, + (int) $h2, + (int) $h3, + (int) $h4, + (int) $h5, + (int) $h6, + (int) $h7, + (int) $h8, + (int) $h9 + ) + ) + ); + } + + /** + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $Z + * @return ParagonIE_Sodium_Core_Curve25519_Fe + */ + public static function fe_invert(ParagonIE_Sodium_Core_Curve25519_Fe $Z) + { + $z = clone $Z; + $t0 = self::fe_sq($z); + $t1 = self::fe_sq($t0); + $t1 = self::fe_sq($t1); + $t1 = self::fe_mul($z, $t1); + $t0 = self::fe_mul($t0, $t1); + $t2 = self::fe_sq($t0); + $t1 = self::fe_mul($t1, $t2); + $t2 = self::fe_sq($t1); + for ($i = 1; $i < 5; ++$i) { + $t2 = self::fe_sq($t2); + } + $t1 = self::fe_mul($t2, $t1); + $t2 = self::fe_sq($t1); + for ($i = 1; $i < 10; ++$i) { + $t2 = self::fe_sq($t2); + } + $t2 = self::fe_mul($t2, $t1); + $t3 = self::fe_sq($t2); + for ($i = 1; $i < 20; ++$i) { + $t3 = self::fe_sq($t3); + } + $t2 = self::fe_mul($t3, $t2); + $t2 = self::fe_sq($t2); + for ($i = 1; $i < 10; ++$i) { + $t2 = self::fe_sq($t2); + } + $t1 = self::fe_mul($t2, $t1); + $t2 = self::fe_sq($t1); + for ($i = 1; $i < 50; ++$i) { + $t2 = self::fe_sq($t2); + } + $t2 = self::fe_mul($t2, $t1); + $t3 = self::fe_sq($t2); + for ($i = 1; $i < 100; ++$i) { + $t3 = self::fe_sq($t3); + } + $t2 = self::fe_mul($t3, $t2); + $t2 = self::fe_sq($t2); + for ($i = 1; $i < 50; ++$i) { + $t2 = self::fe_sq($t2); + } + $t1 = self::fe_mul($t2, $t1); + $t1 = self::fe_sq($t1); + for ($i = 1; $i < 5; ++$i) { + $t1 = self::fe_sq($t1); + } + return self::fe_mul($t1, $t0); + } + + /** + * @internal You should not use this directly from another application + * + * @ref https://github.com/jedisct1/libsodium/blob/68564326e1e9dc57ef03746f85734232d20ca6fb/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1054-L1106 + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $z + * @return ParagonIE_Sodium_Core_Curve25519_Fe + */ + public static function fe_pow22523(ParagonIE_Sodium_Core_Curve25519_Fe $z) + { + $z = self::fe_normalize($z); + # fe_sq(t0, z); + # fe_sq(t1, t0); + # fe_sq(t1, t1); + # fe_mul(t1, z, t1); + # fe_mul(t0, t0, t1); + # fe_sq(t0, t0); + # fe_mul(t0, t1, t0); + # fe_sq(t1, t0); + $t0 = self::fe_sq($z); + $t1 = self::fe_sq($t0); + $t1 = self::fe_sq($t1); + $t1 = self::fe_mul($z, $t1); + $t0 = self::fe_mul($t0, $t1); + $t0 = self::fe_sq($t0); + $t0 = self::fe_mul($t1, $t0); + $t1 = self::fe_sq($t0); + + # for (i = 1; i < 5; ++i) { + # fe_sq(t1, t1); + # } + for ($i = 1; $i < 5; ++$i) { + $t1 = self::fe_sq($t1); + } + + # fe_mul(t0, t1, t0); + # fe_sq(t1, t0); + $t0 = self::fe_mul($t1, $t0); + $t1 = self::fe_sq($t0); + + # for (i = 1; i < 10; ++i) { + # fe_sq(t1, t1); + # } + for ($i = 1; $i < 10; ++$i) { + $t1 = self::fe_sq($t1); + } + + # fe_mul(t1, t1, t0); + # fe_sq(t2, t1); + $t1 = self::fe_mul($t1, $t0); + $t2 = self::fe_sq($t1); + + # for (i = 1; i < 20; ++i) { + # fe_sq(t2, t2); + # } + for ($i = 1; $i < 20; ++$i) { + $t2 = self::fe_sq($t2); + } + + # fe_mul(t1, t2, t1); + # fe_sq(t1, t1); + $t1 = self::fe_mul($t2, $t1); + $t1 = self::fe_sq($t1); + + # for (i = 1; i < 10; ++i) { + # fe_sq(t1, t1); + # } + for ($i = 1; $i < 10; ++$i) { + $t1 = self::fe_sq($t1); + } + + # fe_mul(t0, t1, t0); + # fe_sq(t1, t0); + $t0 = self::fe_mul($t1, $t0); + $t1 = self::fe_sq($t0); + + # for (i = 1; i < 50; ++i) { + # fe_sq(t1, t1); + # } + for ($i = 1; $i < 50; ++$i) { + $t1 = self::fe_sq($t1); + } + + # fe_mul(t1, t1, t0); + # fe_sq(t2, t1); + $t1 = self::fe_mul($t1, $t0); + $t2 = self::fe_sq($t1); + + # for (i = 1; i < 100; ++i) { + # fe_sq(t2, t2); + # } + for ($i = 1; $i < 100; ++$i) { + $t2 = self::fe_sq($t2); + } + + # fe_mul(t1, t2, t1); + # fe_sq(t1, t1); + $t1 = self::fe_mul($t2, $t1); + $t1 = self::fe_sq($t1); + + # for (i = 1; i < 50; ++i) { + # fe_sq(t1, t1); + # } + for ($i = 1; $i < 50; ++$i) { + $t1 = self::fe_sq($t1); + } + + # fe_mul(t0, t1, t0); + # fe_sq(t0, t0); + # fe_sq(t0, t0); + # fe_mul(out, t0, z); + $t0 = self::fe_mul($t1, $t0); + $t0 = self::fe_sq($t0); + $t0 = self::fe_sq($t0); + return self::fe_mul($t0, $z); + } + + /** + * Subtract two field elements. + * + * h = f - g + * + * Preconditions: + * |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. + * |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. + * + * Postconditions: + * |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $f + * @param ParagonIE_Sodium_Core_Curve25519_Fe $g + * @return ParagonIE_Sodium_Core_Curve25519_Fe + * @psalm-suppress MixedOperand + */ + public static function fe_sub(ParagonIE_Sodium_Core_Curve25519_Fe $f, ParagonIE_Sodium_Core_Curve25519_Fe $g) + { + return self::fe_normalize( + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( + array( + (int) ($f[0] - $g[0]), + (int) ($f[1] - $g[1]), + (int) ($f[2] - $g[2]), + (int) ($f[3] - $g[3]), + (int) ($f[4] - $g[4]), + (int) ($f[5] - $g[5]), + (int) ($f[6] - $g[6]), + (int) ($f[7] - $g[7]), + (int) ($f[8] - $g[8]), + (int) ($f[9] - $g[9]) + ) + ) + ); + } + + /** + * Add two group elements. + * + * r = p + q + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p + * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 + */ + public static function ge_add( + ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, + ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q + ) { + $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); + $r->X = self::fe_add($p->Y, $p->X); + $r->Y = self::fe_sub($p->Y, $p->X); + $r->Z = self::fe_mul($r->X, $q->YplusX); + $r->Y = self::fe_mul($r->Y, $q->YminusX); + $r->T = self::fe_mul($q->T2d, $p->T); + $r->X = self::fe_mul($p->Z, $q->Z); + $t0 = self::fe_add($r->X, $r->X); + $r->X = self::fe_sub($r->Z, $r->Y); + $r->Y = self::fe_add($r->Z, $r->Y); + $r->Z = self::fe_add($t0, $r->T); + $r->T = self::fe_sub($t0, $r->T); + return $r; + } + + /** + * @internal You should not use this directly from another application + * + * @ref https://github.com/jedisct1/libsodium/blob/157c4a80c13b117608aeae12178b2d38825f9f8f/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1185-L1215 + * @param string $a + * @return array + * @throws SodiumException + * @throws TypeError + */ + public static function slide($a) + { + if (self::strlen($a) < 256) { + if (self::strlen($a) < 16) { + $a = str_pad($a, 256, '0', STR_PAD_RIGHT); + } + } + /** @var array $r */ + $r = array(); + + /** @var int $i */ + for ($i = 0; $i < 256; ++$i) { + $r[$i] = (int) ( + 1 & ( + self::chrToInt($a[(int) ($i >> 3)]) + >> + ($i & 7) + ) + ); + } + + for ($i = 0;$i < 256;++$i) { + if ($r[$i]) { + for ($b = 1;$b <= 6 && $i + $b < 256;++$b) { + if ($r[$i + $b]) { + if ($r[$i] + ($r[$i + $b] << $b) <= 15) { + $r[$i] += $r[$i + $b] << $b; + $r[$i + $b] = 0; + } elseif ($r[$i] - ($r[$i + $b] << $b) >= -15) { + $r[$i] -= $r[$i + $b] << $b; + for ($k = $i + $b; $k < 256; ++$k) { + if (!$r[$k]) { + $r[$k] = 1; + break; + } + $r[$k] = 0; + } + } else { + break; + } + } + } + } + } + return $r; + } + + /** + * @internal You should not use this directly from another application + * + * @param string $s + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 + * @throws SodiumException + * @throws TypeError + */ + public static function ge_frombytes_negate_vartime($s) + { + static $d = null; + if (!$d) { + $d = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d); + } + + # fe_frombytes(h->Y,s); + # fe_1(h->Z); + $h = new ParagonIE_Sodium_Core_Curve25519_Ge_P3( + self::fe_0(), + self::fe_frombytes($s), + self::fe_1() + ); + + # fe_sq(u,h->Y); + # fe_mul(v,u,d); + # fe_sub(u,u,h->Z); /* u = y^2-1 */ + # fe_add(v,v,h->Z); /* v = dy^2+1 */ + $u = self::fe_sq($h->Y); + /** @var ParagonIE_Sodium_Core_Curve25519_Fe $d */ + $v = self::fe_mul($u, $d); + $u = self::fe_sub($u, $h->Z); /* u = y^2 - 1 */ + $v = self::fe_add($v, $h->Z); /* v = dy^2 + 1 */ + + # fe_sq(v3,v); + # fe_mul(v3,v3,v); /* v3 = v^3 */ + # fe_sq(h->X,v3); + # fe_mul(h->X,h->X,v); + # fe_mul(h->X,h->X,u); /* x = uv^7 */ + $v3 = self::fe_sq($v); + $v3 = self::fe_mul($v3, $v); /* v3 = v^3 */ + $h->X = self::fe_sq($v3); + $h->X = self::fe_mul($h->X, $v); + $h->X = self::fe_mul($h->X, $u); /* x = uv^7 */ + + # fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */ + # fe_mul(h->X,h->X,v3); + # fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */ + $h->X = self::fe_pow22523($h->X); /* x = (uv^7)^((q-5)/8) */ + $h->X = self::fe_mul($h->X, $v3); + $h->X = self::fe_mul($h->X, $u); /* x = uv^3(uv^7)^((q-5)/8) */ + + # fe_sq(vxx,h->X); + # fe_mul(vxx,vxx,v); + # fe_sub(check,vxx,u); /* vx^2-u */ + $vxx = self::fe_sq($h->X); + $vxx = self::fe_mul($vxx, $v); + $check = self::fe_sub($vxx, $u); /* vx^2 - u */ + + # if (fe_isnonzero(check)) { + # fe_add(check,vxx,u); /* vx^2+u */ + # if (fe_isnonzero(check)) { + # return -1; + # } + # fe_mul(h->X,h->X,sqrtm1); + # } + if (self::fe_isnonzero($check)) { + $check = self::fe_add($vxx, $u); /* vx^2 + u */ + if (self::fe_isnonzero($check)) { + throw new RangeException('Internal check failed.'); + } + $h->X = self::fe_mul( + $h->X, + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1) + ); + } + + # if (fe_isnegative(h->X) == (s[31] >> 7)) { + # fe_neg(h->X,h->X); + # } + $i = self::chrToInt($s[31]); + if (self::fe_isnegative($h->X) === ($i >> 7)) { + $h->X = self::fe_neg($h->X); + } + + # fe_mul(h->T,h->X,h->Y); + $h->T = self::fe_mul($h->X, $h->Y); + return $h; + } + + /** + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p + * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 + */ + public static function ge_madd( + ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R, + ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, + ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q + ) { + $r = clone $R; + $r->X = self::fe_add($p->Y, $p->X); + $r->Y = self::fe_sub($p->Y, $p->X); + $r->Z = self::fe_mul($r->X, $q->yplusx); + $r->Y = self::fe_mul($r->Y, $q->yminusx); + $r->T = self::fe_mul($q->xy2d, $p->T); + $t0 = self::fe_add(clone $p->Z, clone $p->Z); + $r->X = self::fe_sub($r->Z, $r->Y); + $r->Y = self::fe_add($r->Z, $r->Y); + $r->Z = self::fe_add($t0, $r->T); + $r->T = self::fe_sub($t0, $r->T); + + return $r; + } + + /** + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p + * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 + */ + public static function ge_msub( + ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R, + ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, + ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q + ) { + $r = clone $R; + + $r->X = self::fe_add($p->Y, $p->X); + $r->Y = self::fe_sub($p->Y, $p->X); + $r->Z = self::fe_mul($r->X, $q->yminusx); + $r->Y = self::fe_mul($r->Y, $q->yplusx); + $r->T = self::fe_mul($q->xy2d, $p->T); + $t0 = self::fe_add($p->Z, $p->Z); + $r->X = self::fe_sub($r->Z, $r->Y); + $r->Y = self::fe_add($r->Z, $r->Y); + $r->Z = self::fe_sub($t0, $r->T); + $r->T = self::fe_add($t0, $r->T); + + return $r; + } + + /** + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 + */ + public static function ge_p1p1_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p) + { + $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P2(); + $r->X = self::fe_mul($p->X, $p->T); + $r->Y = self::fe_mul($p->Y, $p->Z); + $r->Z = self::fe_mul($p->Z, $p->T); + return $r; + } + + /** + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 + */ + public static function ge_p1p1_to_p3(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p) + { + $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P3(); + $r->X = self::fe_mul($p->X, $p->T); + $r->Y = self::fe_mul($p->Y, $p->Z); + $r->Z = self::fe_mul($p->Z, $p->T); + $r->T = self::fe_mul($p->X, $p->Y); + return $r; + } + + /** + * @internal You should not use this directly from another application + * + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 + */ + public static function ge_p2_0() + { + return new ParagonIE_Sodium_Core_Curve25519_Ge_P2( + self::fe_0(), + self::fe_1(), + self::fe_1() + ); + } + + /** + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 + */ + public static function ge_p2_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p) + { + $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); + + $r->X = self::fe_sq($p->X); + $r->Z = self::fe_sq($p->Y); + $r->T = self::fe_sq2($p->Z); + $r->Y = self::fe_add($p->X, $p->Y); + $t0 = self::fe_sq($r->Y); + $r->Y = self::fe_add($r->Z, $r->X); + $r->Z = self::fe_sub($r->Z, $r->X); + $r->X = self::fe_sub($t0, $r->Y); + $r->T = self::fe_sub($r->T, $r->Z); + + return $r; + } + + /** + * @internal You should not use this directly from another application + * + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 + */ + public static function ge_p3_0() + { + return new ParagonIE_Sodium_Core_Curve25519_Ge_P3( + self::fe_0(), + self::fe_1(), + self::fe_1(), + self::fe_0() + ); + } + + /** + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p + * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached + */ + public static function ge_p3_to_cached(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) + { + static $d2 = null; + if ($d2 === null) { + $d2 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d2); + } + /** @var ParagonIE_Sodium_Core_Curve25519_Fe $d2 */ + $r = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(); + $r->YplusX = self::fe_add($p->Y, $p->X); + $r->YminusX = self::fe_sub($p->Y, $p->X); + $r->Z = self::fe_copy($p->Z); + $r->T2d = self::fe_mul($p->T, $d2); + return $r; + } + + /** + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 + */ + public static function ge_p3_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) + { + return new ParagonIE_Sodium_Core_Curve25519_Ge_P2( + self::fe_copy($p->X), + self::fe_copy($p->Y), + self::fe_copy($p->Z) + ); + } + + /** + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h + * @return string + * @throws SodiumException + * @throws TypeError + */ + public static function ge_p3_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h) + { + $recip = self::fe_invert($h->Z); + $x = self::fe_mul($h->X, $recip); + $y = self::fe_mul($h->Y, $recip); + $s = self::fe_tobytes($y); + $s[31] = self::intToChr( + self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) + ); + return $s; + } + + /** + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 + */ + public static function ge_p3_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) + { + $q = self::ge_p3_to_p2($p); + return self::ge_p2_dbl($q); + } + + /** + * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp + */ + public static function ge_precomp_0() + { + return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( + self::fe_1(), + self::fe_1(), + self::fe_0() + ); + } + + /** + * @internal You should not use this directly from another application + * + * @param int $b + * @param int $c + * @return int + */ + public static function equal($b, $c) + { + return (int) ((($b ^ $c) - 1) >> 31) & 1; + } + + /** + * @internal You should not use this directly from another application + * + * @param int|string $char + * @return int (1 = yes, 0 = no) + * @throws SodiumException + * @throws TypeError + */ + public static function negative($char) + { + if (is_int($char)) { + return ($char >> 63) & 1; + } + $x = self::chrToInt(self::substr($char, 0, 1)); + return (int) ($x >> 63); + } + + /** + * Conditional move + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t + * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u + * @param int $b + * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp + */ + public static function cmov( + ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t, + ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u, + $b + ) { + if (!is_int($b)) { + throw new InvalidArgumentException('Expected an integer.'); + } + return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( + self::fe_cmov($t->yplusx, $u->yplusx, $b), + self::fe_cmov($t->yminusx, $u->yminusx, $b), + self::fe_cmov($t->xy2d, $u->xy2d, $b) + ); + } + + /** + * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $t + * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $u + * @param int $b + * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached + */ + public static function ge_cmov_cached( + ParagonIE_Sodium_Core_Curve25519_Ge_Cached $t, + ParagonIE_Sodium_Core_Curve25519_Ge_Cached $u, + $b + ) { + $b &= 1; + $ret = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(); + $ret->YplusX = self::fe_cmov($t->YplusX, $u->YplusX, $b); + $ret->YminusX = self::fe_cmov($t->YminusX, $u->YminusX, $b); + $ret->Z = self::fe_cmov($t->Z, $u->Z, $b); + $ret->T2d = self::fe_cmov($t->T2d, $u->T2d, $b); + return $ret; + } + + /** + * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached[] $cached + * @param int $b + * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached + * @throws SodiumException + */ + public static function ge_cmov8_cached(array $cached, $b) + { + // const unsigned char bnegative = negative(b); + // const unsigned char babs = b - (((-bnegative) & b) * ((signed char) 1 << 1)); + $bnegative = self::negative($b); + $babs = $b - (((-$bnegative) & $b) << 1); + + // ge25519_cached_0(t); + $t = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached( + self::fe_1(), + self::fe_1(), + self::fe_1(), + self::fe_0() + ); + + // ge25519_cmov_cached(t, &cached[0], equal(babs, 1)); + // ge25519_cmov_cached(t, &cached[1], equal(babs, 2)); + // ge25519_cmov_cached(t, &cached[2], equal(babs, 3)); + // ge25519_cmov_cached(t, &cached[3], equal(babs, 4)); + // ge25519_cmov_cached(t, &cached[4], equal(babs, 5)); + // ge25519_cmov_cached(t, &cached[5], equal(babs, 6)); + // ge25519_cmov_cached(t, &cached[6], equal(babs, 7)); + // ge25519_cmov_cached(t, &cached[7], equal(babs, 8)); + for ($x = 0; $x < 8; ++$x) { + $t = self::ge_cmov_cached($t, $cached[$x], self::equal($babs, $x + 1)); + } + + // fe25519_copy(minust.YplusX, t->YminusX); + // fe25519_copy(minust.YminusX, t->YplusX); + // fe25519_copy(minust.Z, t->Z); + // fe25519_neg(minust.T2d, t->T2d); + $minust = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached( + self::fe_copy($t->YminusX), + self::fe_copy($t->YplusX), + self::fe_copy($t->Z), + self::fe_neg($t->T2d) + ); + return self::ge_cmov_cached($t, $minust, $bnegative); + } + + /** + * @internal You should not use this directly from another application + * + * @param int $pos + * @param int $b + * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + * @psalm-suppress MixedArrayAccess + * @psalm-suppress MixedArrayOffset + */ + public static function ge_select($pos = 0, $b = 0) + { + static $base = null; + if ($base === null) { + $base = array(); + /** @var int $i */ + foreach (self::$base as $i => $bas) { + for ($j = 0; $j < 8; ++$j) { + $base[$i][$j] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][0]), + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][1]), + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][2]) + ); + } + } + } + /** @var array> $base */ + if (!is_int($pos)) { + throw new InvalidArgumentException('Position must be an integer'); + } + if ($pos < 0 || $pos > 31) { + throw new RangeException('Position is out of range [0, 31]'); + } + + $bnegative = self::negative($b); + $babs = $b - (((-$bnegative) & $b) << 1); + + $t = self::ge_precomp_0(); + for ($i = 0; $i < 8; ++$i) { + $t = self::cmov( + $t, + $base[$pos][$i], + self::equal($babs, $i + 1) + ); + } + $minusT = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( + self::fe_copy($t->yminusx), + self::fe_copy($t->yplusx), + self::fe_neg($t->xy2d) + ); + return self::cmov($t, $minusT, $bnegative); + } + + /** + * Subtract two group elements. + * + * r = p - q + * + * @internal You should not use this directly from another application + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p + * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 + */ + public static function ge_sub( + ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, + ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q + ) { + $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); + + $r->X = self::fe_add($p->Y, $p->X); + $r->Y = self::fe_sub($p->Y, $p->X); + $r->Z = self::fe_mul($r->X, $q->YminusX); + $r->Y = self::fe_mul($r->Y, $q->YplusX); + $r->T = self::fe_mul($q->T2d, $p->T); + $r->X = self::fe_mul($p->Z, $q->Z); + $t0 = self::fe_add($r->X, $r->X); + $r->X = self::fe_sub($r->Z, $r->Y); + $r->Y = self::fe_add($r->Z, $r->Y); + $r->Z = self::fe_sub($t0, $r->T); + $r->T = self::fe_add($t0, $r->T); + + return $r; + } + + /** + * Convert a group element to a byte string. + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h + * @return string + * @throws SodiumException + * @throws TypeError + */ + public static function ge_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h) + { + $recip = self::fe_invert($h->Z); + $x = self::fe_mul($h->X, $recip); + $y = self::fe_mul($h->Y, $recip); + $s = self::fe_tobytes($y); + $s[31] = self::intToChr( + self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) + ); + return $s; + } + + /** + * @internal You should not use this directly from another application + * + * @param string $a + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A + * @param string $b + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedArgument + * @psalm-suppress MixedArrayAccess + */ + public static function ge_double_scalarmult_vartime( + $a, + ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A, + $b + ) { + /** @var array $Ai */ + $Ai = array(); + + /** @var array $Bi */ + static $Bi = array(); + if (!$Bi) { + for ($i = 0; $i < 8; ++$i) { + $Bi[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][0]), + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][1]), + ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][2]) + ); + } + } + for ($i = 0; $i < 8; ++$i) { + $Ai[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached( + self::fe_0(), + self::fe_0(), + self::fe_0(), + self::fe_0() + ); + } + + # slide(aslide,a); + # slide(bslide,b); + /** @var array $aslide */ + $aslide = self::slide($a); + /** @var array $bslide */ + $bslide = self::slide($b); + + # ge_p3_to_cached(&Ai[0],A); + # ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t); + $Ai[0] = self::ge_p3_to_cached($A); + $t = self::ge_p3_dbl($A); + $A2 = self::ge_p1p1_to_p3($t); + + # ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u); + # ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u); + # ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u); + # ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u); + # ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u); + # ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u); + # ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u); + for ($i = 0; $i < 7; ++$i) { + $t = self::ge_add($A2, $Ai[$i]); + $u = self::ge_p1p1_to_p3($t); + $Ai[$i + 1] = self::ge_p3_to_cached($u); + } + + # ge_p2_0(r); + $r = self::ge_p2_0(); + + # for (i = 255;i >= 0;--i) { + # if (aslide[i] || bslide[i]) break; + # } + $i = 255; + for (; $i >= 0; --$i) { + if ($aslide[$i] || $bslide[$i]) { + break; + } + } + + # for (;i >= 0;--i) { + for (; $i >= 0; --$i) { + # ge_p2_dbl(&t,r); + $t = self::ge_p2_dbl($r); + + # if (aslide[i] > 0) { + if ($aslide[$i] > 0) { + # ge_p1p1_to_p3(&u,&t); + # ge_add(&t,&u,&Ai[aslide[i]/2]); + $u = self::ge_p1p1_to_p3($t); + $t = self::ge_add( + $u, + $Ai[(int) floor($aslide[$i] / 2)] + ); + # } else if (aslide[i] < 0) { + } elseif ($aslide[$i] < 0) { + # ge_p1p1_to_p3(&u,&t); + # ge_sub(&t,&u,&Ai[(-aslide[i])/2]); + $u = self::ge_p1p1_to_p3($t); + $t = self::ge_sub( + $u, + $Ai[(int) floor(-$aslide[$i] / 2)] + ); + } + + # if (bslide[i] > 0) { + if ($bslide[$i] > 0) { + /** @var int $index */ + $index = (int) floor($bslide[$i] / 2); + # ge_p1p1_to_p3(&u,&t); + # ge_madd(&t,&u,&Bi[bslide[i]/2]); + $u = self::ge_p1p1_to_p3($t); + $t = self::ge_madd($t, $u, $Bi[$index]); + # } else if (bslide[i] < 0) { + } elseif ($bslide[$i] < 0) { + /** @var int $index */ + $index = (int) floor(-$bslide[$i] / 2); + # ge_p1p1_to_p3(&u,&t); + # ge_msub(&t,&u,&Bi[(-bslide[i])/2]); + $u = self::ge_p1p1_to_p3($t); + $t = self::ge_msub($t, $u, $Bi[$index]); + } + # ge_p1p1_to_p2(r,&t); + $r = self::ge_p1p1_to_p2($t); + } + return $r; + } + + /** + * @internal You should not use this directly from another application + * + * @param string $a + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedAssignment + * @psalm-suppress MixedOperand + */ + public static function ge_scalarmult($a, $p) + { + $e = array_fill(0, 64, 0); + + /** @var ParagonIE_Sodium_Core_Curve25519_Ge_Cached[] $pi */ + $pi = array(); + + // ge25519_p3_to_cached(&pi[1 - 1], p); /* p */ + $pi[0] = self::ge_p3_to_cached($p); + + // ge25519_p3_dbl(&t2, p); + // ge25519_p1p1_to_p3(&p2, &t2); + // ge25519_p3_to_cached(&pi[2 - 1], &p2); /* 2p = 2*p */ + $t2 = self::ge_p3_dbl($p); + $p2 = self::ge_p1p1_to_p3($t2); + $pi[1] = self::ge_p3_to_cached($p2); + + // ge25519_add_cached(&t3, p, &pi[2 - 1]); + // ge25519_p1p1_to_p3(&p3, &t3); + // ge25519_p3_to_cached(&pi[3 - 1], &p3); /* 3p = 2p+p */ + $t3 = self::ge_add($p, $pi[1]); + $p3 = self::ge_p1p1_to_p3($t3); + $pi[2] = self::ge_p3_to_cached($p3); + + // ge25519_p3_dbl(&t4, &p2); + // ge25519_p1p1_to_p3(&p4, &t4); + // ge25519_p3_to_cached(&pi[4 - 1], &p4); /* 4p = 2*2p */ + $t4 = self::ge_p3_dbl($p2); + $p4 = self::ge_p1p1_to_p3($t4); + $pi[3] = self::ge_p3_to_cached($p4); + + // ge25519_add_cached(&t5, p, &pi[4 - 1]); + // ge25519_p1p1_to_p3(&p5, &t5); + // ge25519_p3_to_cached(&pi[5 - 1], &p5); /* 5p = 4p+p */ + $t5 = self::ge_add($p, $pi[3]); + $p5 = self::ge_p1p1_to_p3($t5); + $pi[4] = self::ge_p3_to_cached($p5); + + // ge25519_p3_dbl(&t6, &p3); + // ge25519_p1p1_to_p3(&p6, &t6); + // ge25519_p3_to_cached(&pi[6 - 1], &p6); /* 6p = 2*3p */ + $t6 = self::ge_p3_dbl($p3); + $p6 = self::ge_p1p1_to_p3($t6); + $pi[5] = self::ge_p3_to_cached($p6); + + // ge25519_add_cached(&t7, p, &pi[6 - 1]); + // ge25519_p1p1_to_p3(&p7, &t7); + // ge25519_p3_to_cached(&pi[7 - 1], &p7); /* 7p = 6p+p */ + $t7 = self::ge_add($p, $pi[5]); + $p7 = self::ge_p1p1_to_p3($t7); + $pi[6] = self::ge_p3_to_cached($p7); + + // ge25519_p3_dbl(&t8, &p4); + // ge25519_p1p1_to_p3(&p8, &t8); + // ge25519_p3_to_cached(&pi[8 - 1], &p8); /* 8p = 2*4p */ + $t8 = self::ge_p3_dbl($p4); + $p8 = self::ge_p1p1_to_p3($t8); + $pi[7] = self::ge_p3_to_cached($p8); + + + // for (i = 0; i < 32; ++i) { + // e[2 * i + 0] = (a[i] >> 0) & 15; + // e[2 * i + 1] = (a[i] >> 4) & 15; + // } + for ($i = 0; $i < 32; ++$i) { + $e[($i << 1) ] = self::chrToInt($a[$i]) & 15; + $e[($i << 1) + 1] = (self::chrToInt($a[$i]) >> 4) & 15; + } + // /* each e[i] is between 0 and 15 */ + // /* e[63] is between 0 and 7 */ + + // carry = 0; + // for (i = 0; i < 63; ++i) { + // e[i] += carry; + // carry = e[i] + 8; + // carry >>= 4; + // e[i] -= carry * ((signed char) 1 << 4); + // } + $carry = 0; + for ($i = 0; $i < 63; ++$i) { + $e[$i] += $carry; + $carry = $e[$i] + 8; + $carry >>= 4; + $e[$i] -= $carry << 4; + } + // e[63] += carry; + // /* each e[i] is between -8 and 8 */ + $e[63] += $carry; + + // ge25519_p3_0(h); + $h = self::ge_p3_0(); + + // for (i = 63; i != 0; i--) { + for ($i = 63; $i != 0; --$i) { + // ge25519_cmov8_cached(&t, pi, e[i]); + $t = self::ge_cmov8_cached($pi, $e[$i]); + // ge25519_add_cached(&r, h, &t); + $r = self::ge_add($h, $t); + + // ge25519_p1p1_to_p2(&s, &r); + // ge25519_p2_dbl(&r, &s); + // ge25519_p1p1_to_p2(&s, &r); + // ge25519_p2_dbl(&r, &s); + // ge25519_p1p1_to_p2(&s, &r); + // ge25519_p2_dbl(&r, &s); + // ge25519_p1p1_to_p2(&s, &r); + // ge25519_p2_dbl(&r, &s); + $s = self::ge_p1p1_to_p2($r); + $r = self::ge_p2_dbl($s); + $s = self::ge_p1p1_to_p2($r); + $r = self::ge_p2_dbl($s); + $s = self::ge_p1p1_to_p2($r); + $r = self::ge_p2_dbl($s); + $s = self::ge_p1p1_to_p2($r); + $r = self::ge_p2_dbl($s); + + // ge25519_p1p1_to_p3(h, &r); /* *16 */ + $h = self::ge_p1p1_to_p3($r); /* *16 */ + } + + // ge25519_cmov8_cached(&t, pi, e[i]); + // ge25519_add_cached(&r, h, &t); + // ge25519_p1p1_to_p3(h, &r); + $t = self::ge_cmov8_cached($pi, $e[0]); + $r = self::ge_add($h, $t); + return self::ge_p1p1_to_p3($r); + } + + /** + * @internal You should not use this directly from another application + * + * @param string $a + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 + * @throws SodiumException + * @throws TypeError + * @psalm-suppress MixedAssignment + * @psalm-suppress MixedOperand + */ + public static function ge_scalarmult_base($a) + { + /** @var array $e */ + $e = array(); + $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); + + for ($i = 0; $i < 32; ++$i) { + $dbl = (int) $i << 1; + $e[$dbl] = (int) self::chrToInt($a[$i]) & 15; + $e[$dbl + 1] = (int) (self::chrToInt($a[$i]) >> 4) & 15; + } + + $carry = 0; + for ($i = 0; $i < 63; ++$i) { + $e[$i] += $carry; + $carry = $e[$i] + 8; + $carry >>= 4; + $e[$i] -= $carry << 4; + } + $e[63] += (int) $carry; + + $h = self::ge_p3_0(); + + for ($i = 1; $i < 64; $i += 2) { + $t = self::ge_select((int) floor($i / 2), (int) $e[$i]); + $r = self::ge_madd($r, $h, $t); + $h = self::ge_p1p1_to_p3($r); + } + + $r = self::ge_p3_dbl($h); + + $s = self::ge_p1p1_to_p2($r); + $r = self::ge_p2_dbl($s); + $s = self::ge_p1p1_to_p2($r); + $r = self::ge_p2_dbl($s); + $s = self::ge_p1p1_to_p2($r); + $r = self::ge_p2_dbl($s); + + $h = self::ge_p1p1_to_p3($r); + + for ($i = 0; $i < 64; $i += 2) { + $t = self::ge_select($i >> 1, (int) $e[$i]); + $r = self::ge_madd($r, $h, $t); + $h = self::ge_p1p1_to_p3($r); + } + return $h; + } + + /** + * Calculates (ab + c) mod l + * where l = 2^252 + 27742317777372353535851937790883648493 + * + * @internal You should not use this directly from another application + * + * @param string $a + * @param string $b + * @param string $c + * @return string + * @throws TypeError + */ + public static function sc_muladd($a, $b, $c) + { + $a0 = 2097151 & self::load_3(self::substr($a, 0, 3)); + $a1 = 2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5); + $a2 = 2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2); + $a3 = 2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7); + $a4 = 2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4); + $a5 = 2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1); + $a6 = 2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6); + $a7 = 2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3); + $a8 = 2097151 & self::load_3(self::substr($a, 21, 3)); + $a9 = 2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5); + $a10 = 2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2); + $a11 = (self::load_4(self::substr($a, 28, 4)) >> 7); + + $b0 = 2097151 & self::load_3(self::substr($b, 0, 3)); + $b1 = 2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5); + $b2 = 2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2); + $b3 = 2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7); + $b4 = 2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4); + $b5 = 2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1); + $b6 = 2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6); + $b7 = 2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3); + $b8 = 2097151 & self::load_3(self::substr($b, 21, 3)); + $b9 = 2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5); + $b10 = 2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2); + $b11 = (self::load_4(self::substr($b, 28, 4)) >> 7); + + $c0 = 2097151 & self::load_3(self::substr($c, 0, 3)); + $c1 = 2097151 & (self::load_4(self::substr($c, 2, 4)) >> 5); + $c2 = 2097151 & (self::load_3(self::substr($c, 5, 3)) >> 2); + $c3 = 2097151 & (self::load_4(self::substr($c, 7, 4)) >> 7); + $c4 = 2097151 & (self::load_4(self::substr($c, 10, 4)) >> 4); + $c5 = 2097151 & (self::load_3(self::substr($c, 13, 3)) >> 1); + $c6 = 2097151 & (self::load_4(self::substr($c, 15, 4)) >> 6); + $c7 = 2097151 & (self::load_3(self::substr($c, 18, 3)) >> 3); + $c8 = 2097151 & self::load_3(self::substr($c, 21, 3)); + $c9 = 2097151 & (self::load_4(self::substr($c, 23, 4)) >> 5); + $c10 = 2097151 & (self::load_3(self::substr($c, 26, 3)) >> 2); + $c11 = (self::load_4(self::substr($c, 28, 4)) >> 7); + + /* Can't really avoid the pyramid here: */ + $s0 = $c0 + self::mul($a0, $b0, 24); + $s1 = $c1 + self::mul($a0, $b1, 24) + self::mul($a1, $b0, 24); + $s2 = $c2 + self::mul($a0, $b2, 24) + self::mul($a1, $b1, 24) + self::mul($a2, $b0, 24); + $s3 = $c3 + self::mul($a0, $b3, 24) + self::mul($a1, $b2, 24) + self::mul($a2, $b1, 24) + self::mul($a3, $b0, 24); + $s4 = $c4 + self::mul($a0, $b4, 24) + self::mul($a1, $b3, 24) + self::mul($a2, $b2, 24) + self::mul($a3, $b1, 24) + + self::mul($a4, $b0, 24); + $s5 = $c5 + self::mul($a0, $b5, 24) + self::mul($a1, $b4, 24) + self::mul($a2, $b3, 24) + self::mul($a3, $b2, 24) + + self::mul($a4, $b1, 24) + self::mul($a5, $b0, 24); + $s6 = $c6 + self::mul($a0, $b6, 24) + self::mul($a1, $b5, 24) + self::mul($a2, $b4, 24) + self::mul($a3, $b3, 24) + + self::mul($a4, $b2, 24) + self::mul($a5, $b1, 24) + self::mul($a6, $b0, 24); + $s7 = $c7 + self::mul($a0, $b7, 24) + self::mul($a1, $b6, 24) + self::mul($a2, $b5, 24) + self::mul($a3, $b4, 24) + + self::mul($a4, $b3, 24) + self::mul($a5, $b2, 24) + self::mul($a6, $b1, 24) + self::mul($a7, $b0, 24); + $s8 = $c8 + self::mul($a0, $b8, 24) + self::mul($a1, $b7, 24) + self::mul($a2, $b6, 24) + self::mul($a3, $b5, 24) + + self::mul($a4, $b4, 24) + self::mul($a5, $b3, 24) + self::mul($a6, $b2, 24) + self::mul($a7, $b1, 24) + + self::mul($a8, $b0, 24); + $s9 = $c9 + self::mul($a0, $b9, 24) + self::mul($a1, $b8, 24) + self::mul($a2, $b7, 24) + self::mul($a3, $b6, 24) + + self::mul($a4, $b5, 24) + self::mul($a5, $b4, 24) + self::mul($a6, $b3, 24) + self::mul($a7, $b2, 24) + + self::mul($a8, $b1, 24) + self::mul($a9, $b0, 24); + $s10 = $c10 + self::mul($a0, $b10, 24) + self::mul($a1, $b9, 24) + self::mul($a2, $b8, 24) + self::mul($a3, $b7, 24) + + self::mul($a4, $b6, 24) + self::mul($a5, $b5, 24) + self::mul($a6, $b4, 24) + self::mul($a7, $b3, 24) + + self::mul($a8, $b2, 24) + self::mul($a9, $b1, 24) + self::mul($a10, $b0, 24); + $s11 = $c11 + self::mul($a0, $b11, 24) + self::mul($a1, $b10, 24) + self::mul($a2, $b9, 24) + self::mul($a3, $b8, 24) + + self::mul($a4, $b7, 24) + self::mul($a5, $b6, 24) + self::mul($a6, $b5, 24) + self::mul($a7, $b4, 24) + + self::mul($a8, $b3, 24) + self::mul($a9, $b2, 24) + self::mul($a10, $b1, 24) + self::mul($a11, $b0, 24); + $s12 = self::mul($a1, $b11, 24) + self::mul($a2, $b10, 24) + self::mul($a3, $b9, 24) + self::mul($a4, $b8, 24) + + self::mul($a5, $b7, 24) + self::mul($a6, $b6, 24) + self::mul($a7, $b5, 24) + self::mul($a8, $b4, 24) + + self::mul($a9, $b3, 24) + self::mul($a10, $b2, 24) + self::mul($a11, $b1, 24); + $s13 = self::mul($a2, $b11, 24) + self::mul($a3, $b10, 24) + self::mul($a4, $b9, 24) + self::mul($a5, $b8, 24) + + self::mul($a6, $b7, 24) + self::mul($a7, $b6, 24) + self::mul($a8, $b5, 24) + self::mul($a9, $b4, 24) + + self::mul($a10, $b3, 24) + self::mul($a11, $b2, 24); + $s14 = self::mul($a3, $b11, 24) + self::mul($a4, $b10, 24) + self::mul($a5, $b9, 24) + self::mul($a6, $b8, 24) + + self::mul($a7, $b7, 24) + self::mul($a8, $b6, 24) + self::mul($a9, $b5, 24) + self::mul($a10, $b4, 24) + + self::mul($a11, $b3, 24); + $s15 = self::mul($a4, $b11, 24) + self::mul($a5, $b10, 24) + self::mul($a6, $b9, 24) + self::mul($a7, $b8, 24) + + self::mul($a8, $b7, 24) + self::mul($a9, $b6, 24) + self::mul($a10, $b5, 24) + self::mul($a11, $b4, 24); + $s16 = self::mul($a5, $b11, 24) + self::mul($a6, $b10, 24) + self::mul($a7, $b9, 24) + self::mul($a8, $b8, 24) + + self::mul($a9, $b7, 24) + self::mul($a10, $b6, 24) + self::mul($a11, $b5, 24); + $s17 = self::mul($a6, $b11, 24) + self::mul($a7, $b10, 24) + self::mul($a8, $b9, 24) + self::mul($a9, $b8, 24) + + self::mul($a10, $b7, 24) + self::mul($a11, $b6, 24); + $s18 = self::mul($a7, $b11, 24) + self::mul($a8, $b10, 24) + self::mul($a9, $b9, 24) + self::mul($a10, $b8, 24) + + self::mul($a11, $b7, 24); + $s19 = self::mul($a8, $b11, 24) + self::mul($a9, $b10, 24) + self::mul($a10, $b9, 24) + self::mul($a11, $b8, 24); + $s20 = self::mul($a9, $b11, 24) + self::mul($a10, $b10, 24) + self::mul($a11, $b9, 24); + $s21 = self::mul($a10, $b11, 24) + self::mul($a11, $b10, 24); + $s22 = self::mul($a11, $b11, 24); + $s23 = 0; + + $carry0 = ($s0 + (1 << 20)) >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + $carry2 = ($s2 + (1 << 20)) >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + $carry4 = ($s4 + (1 << 20)) >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + $carry6 = ($s6 + (1 << 20)) >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + $carry8 = ($s8 + (1 << 20)) >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + $carry10 = ($s10 + (1 << 20)) >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + $carry12 = ($s12 + (1 << 20)) >> 21; + $s13 += $carry12; + $s12 -= $carry12 << 21; + $carry14 = ($s14 + (1 << 20)) >> 21; + $s15 += $carry14; + $s14 -= $carry14 << 21; + $carry16 = ($s16 + (1 << 20)) >> 21; + $s17 += $carry16; + $s16 -= $carry16 << 21; + $carry18 = ($s18 + (1 << 20)) >> 21; + $s19 += $carry18; + $s18 -= $carry18 << 21; + $carry20 = ($s20 + (1 << 20)) >> 21; + $s21 += $carry20; + $s20 -= $carry20 << 21; + $carry22 = ($s22 + (1 << 20)) >> 21; + $s23 += $carry22; + $s22 -= $carry22 << 21; + + $carry1 = ($s1 + (1 << 20)) >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + $carry3 = ($s3 + (1 << 20)) >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + $carry5 = ($s5 + (1 << 20)) >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + $carry7 = ($s7 + (1 << 20)) >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + $carry9 = ($s9 + (1 << 20)) >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + $carry11 = ($s11 + (1 << 20)) >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + $carry13 = ($s13 + (1 << 20)) >> 21; + $s14 += $carry13; + $s13 -= $carry13 << 21; + $carry15 = ($s15 + (1 << 20)) >> 21; + $s16 += $carry15; + $s15 -= $carry15 << 21; + $carry17 = ($s17 + (1 << 20)) >> 21; + $s18 += $carry17; + $s17 -= $carry17 << 21; + $carry19 = ($s19 + (1 << 20)) >> 21; + $s20 += $carry19; + $s19 -= $carry19 << 21; + $carry21 = ($s21 + (1 << 20)) >> 21; + $s22 += $carry21; + $s21 -= $carry21 << 21; + + $s11 += self::mul($s23, 666643, 20); + $s12 += self::mul($s23, 470296, 19); + $s13 += self::mul($s23, 654183, 20); + $s14 -= self::mul($s23, 997805, 20); + $s15 += self::mul($s23, 136657, 18); + $s16 -= self::mul($s23, 683901, 20); + + $s10 += self::mul($s22, 666643, 20); + $s11 += self::mul($s22, 470296, 19); + $s12 += self::mul($s22, 654183, 20); + $s13 -= self::mul($s22, 997805, 20); + $s14 += self::mul($s22, 136657, 18); + $s15 -= self::mul($s22, 683901, 20); + + $s9 += self::mul($s21, 666643, 20); + $s10 += self::mul($s21, 470296, 19); + $s11 += self::mul($s21, 654183, 20); + $s12 -= self::mul($s21, 997805, 20); + $s13 += self::mul($s21, 136657, 18); + $s14 -= self::mul($s21, 683901, 20); + + $s8 += self::mul($s20, 666643, 20); + $s9 += self::mul($s20, 470296, 19); + $s10 += self::mul($s20, 654183, 20); + $s11 -= self::mul($s20, 997805, 20); + $s12 += self::mul($s20, 136657, 18); + $s13 -= self::mul($s20, 683901, 20); + + $s7 += self::mul($s19, 666643, 20); + $s8 += self::mul($s19, 470296, 19); + $s9 += self::mul($s19, 654183, 20); + $s10 -= self::mul($s19, 997805, 20); + $s11 += self::mul($s19, 136657, 18); + $s12 -= self::mul($s19, 683901, 20); + + $s6 += self::mul($s18, 666643, 20); + $s7 += self::mul($s18, 470296, 19); + $s8 += self::mul($s18, 654183, 20); + $s9 -= self::mul($s18, 997805, 20); + $s10 += self::mul($s18, 136657, 18); + $s11 -= self::mul($s18, 683901, 20); + + $carry6 = ($s6 + (1 << 20)) >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + $carry8 = ($s8 + (1 << 20)) >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + $carry10 = ($s10 + (1 << 20)) >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + $carry12 = ($s12 + (1 << 20)) >> 21; + $s13 += $carry12; + $s12 -= $carry12 << 21; + $carry14 = ($s14 + (1 << 20)) >> 21; + $s15 += $carry14; + $s14 -= $carry14 << 21; + $carry16 = ($s16 + (1 << 20)) >> 21; + $s17 += $carry16; + $s16 -= $carry16 << 21; + + $carry7 = ($s7 + (1 << 20)) >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + $carry9 = ($s9 + (1 << 20)) >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + $carry11 = ($s11 + (1 << 20)) >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + $carry13 = ($s13 + (1 << 20)) >> 21; + $s14 += $carry13; + $s13 -= $carry13 << 21; + $carry15 = ($s15 + (1 << 20)) >> 21; + $s16 += $carry15; + $s15 -= $carry15 << 21; + + $s5 += self::mul($s17, 666643, 20); + $s6 += self::mul($s17, 470296, 19); + $s7 += self::mul($s17, 654183, 20); + $s8 -= self::mul($s17, 997805, 20); + $s9 += self::mul($s17, 136657, 18); + $s10 -= self::mul($s17, 683901, 20); + + $s4 += self::mul($s16, 666643, 20); + $s5 += self::mul($s16, 470296, 19); + $s6 += self::mul($s16, 654183, 20); + $s7 -= self::mul($s16, 997805, 20); + $s8 += self::mul($s16, 136657, 18); + $s9 -= self::mul($s16, 683901, 20); + + $s3 += self::mul($s15, 666643, 20); + $s4 += self::mul($s15, 470296, 19); + $s5 += self::mul($s15, 654183, 20); + $s6 -= self::mul($s15, 997805, 20); + $s7 += self::mul($s15, 136657, 18); + $s8 -= self::mul($s15, 683901, 20); + + $s2 += self::mul($s14, 666643, 20); + $s3 += self::mul($s14, 470296, 19); + $s4 += self::mul($s14, 654183, 20); + $s5 -= self::mul($s14, 997805, 20); + $s6 += self::mul($s14, 136657, 18); + $s7 -= self::mul($s14, 683901, 20); + + $s1 += self::mul($s13, 666643, 20); + $s2 += self::mul($s13, 470296, 19); + $s3 += self::mul($s13, 654183, 20); + $s4 -= self::mul($s13, 997805, 20); + $s5 += self::mul($s13, 136657, 18); + $s6 -= self::mul($s13, 683901, 20); + + $s0 += self::mul($s12, 666643, 20); + $s1 += self::mul($s12, 470296, 19); + $s2 += self::mul($s12, 654183, 20); + $s3 -= self::mul($s12, 997805, 20); + $s4 += self::mul($s12, 136657, 18); + $s5 -= self::mul($s12, 683901, 20); + $s12 = 0; + + $carry0 = ($s0 + (1 << 20)) >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + $carry2 = ($s2 + (1 << 20)) >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + $carry4 = ($s4 + (1 << 20)) >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + $carry6 = ($s6 + (1 << 20)) >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + $carry8 = ($s8 + (1 << 20)) >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + $carry10 = ($s10 + (1 << 20)) >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + + $carry1 = ($s1 + (1 << 20)) >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + $carry3 = ($s3 + (1 << 20)) >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + $carry5 = ($s5 + (1 << 20)) >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + $carry7 = ($s7 + (1 << 20)) >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + $carry9 = ($s9 + (1 << 20)) >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + $carry11 = ($s11 + (1 << 20)) >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + + $s0 += self::mul($s12, 666643, 20); + $s1 += self::mul($s12, 470296, 19); + $s2 += self::mul($s12, 654183, 20); + $s3 -= self::mul($s12, 997805, 20); + $s4 += self::mul($s12, 136657, 18); + $s5 -= self::mul($s12, 683901, 20); + $s12 = 0; + + $carry0 = $s0 >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + $carry1 = $s1 >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + $carry2 = $s2 >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + $carry3 = $s3 >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + $carry4 = $s4 >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + $carry5 = $s5 >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + $carry6 = $s6 >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + $carry7 = $s7 >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + $carry8 = $s8 >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + $carry9 = $s9 >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + $carry10 = $s10 >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + $carry11 = $s11 >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + + $s0 += self::mul($s12, 666643, 20); + $s1 += self::mul($s12, 470296, 19); + $s2 += self::mul($s12, 654183, 20); + $s3 -= self::mul($s12, 997805, 20); + $s4 += self::mul($s12, 136657, 18); + $s5 -= self::mul($s12, 683901, 20); + + $carry0 = $s0 >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + $carry1 = $s1 >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + $carry2 = $s2 >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + $carry3 = $s3 >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + $carry4 = $s4 >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + $carry5 = $s5 >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + $carry6 = $s6 >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + $carry7 = $s7 >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + $carry8 = $s8 >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + $carry9 = $s9 >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + $carry10 = $s10 >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + + /** + * @var array + */ + $arr = array( + (int) (0xff & ($s0 >> 0)), + (int) (0xff & ($s0 >> 8)), + (int) (0xff & (($s0 >> 16) | $s1 << 5)), + (int) (0xff & ($s1 >> 3)), + (int) (0xff & ($s1 >> 11)), + (int) (0xff & (($s1 >> 19) | $s2 << 2)), + (int) (0xff & ($s2 >> 6)), + (int) (0xff & (($s2 >> 14) | $s3 << 7)), + (int) (0xff & ($s3 >> 1)), + (int) (0xff & ($s3 >> 9)), + (int) (0xff & (($s3 >> 17) | $s4 << 4)), + (int) (0xff & ($s4 >> 4)), + (int) (0xff & ($s4 >> 12)), + (int) (0xff & (($s4 >> 20) | $s5 << 1)), + (int) (0xff & ($s5 >> 7)), + (int) (0xff & (($s5 >> 15) | $s6 << 6)), + (int) (0xff & ($s6 >> 2)), + (int) (0xff & ($s6 >> 10)), + (int) (0xff & (($s6 >> 18) | $s7 << 3)), + (int) (0xff & ($s7 >> 5)), + (int) (0xff & ($s7 >> 13)), + (int) (0xff & ($s8 >> 0)), + (int) (0xff & ($s8 >> 8)), + (int) (0xff & (($s8 >> 16) | $s9 << 5)), + (int) (0xff & ($s9 >> 3)), + (int) (0xff & ($s9 >> 11)), + (int) (0xff & (($s9 >> 19) | $s10 << 2)), + (int) (0xff & ($s10 >> 6)), + (int) (0xff & (($s10 >> 14) | $s11 << 7)), + (int) (0xff & ($s11 >> 1)), + (int) (0xff & ($s11 >> 9)), + 0xff & ($s11 >> 17) + ); + return self::intArrayToString($arr); + } + + /** + * @internal You should not use this directly from another application + * + * @param string $s + * @return string + * @throws TypeError + */ + public static function sc_reduce($s) + { + $s0 = 2097151 & self::load_3(self::substr($s, 0, 3)); + $s1 = 2097151 & (self::load_4(self::substr($s, 2, 4)) >> 5); + $s2 = 2097151 & (self::load_3(self::substr($s, 5, 3)) >> 2); + $s3 = 2097151 & (self::load_4(self::substr($s, 7, 4)) >> 7); + $s4 = 2097151 & (self::load_4(self::substr($s, 10, 4)) >> 4); + $s5 = 2097151 & (self::load_3(self::substr($s, 13, 3)) >> 1); + $s6 = 2097151 & (self::load_4(self::substr($s, 15, 4)) >> 6); + $s7 = 2097151 & (self::load_3(self::substr($s, 18, 4)) >> 3); + $s8 = 2097151 & self::load_3(self::substr($s, 21, 3)); + $s9 = 2097151 & (self::load_4(self::substr($s, 23, 4)) >> 5); + $s10 = 2097151 & (self::load_3(self::substr($s, 26, 3)) >> 2); + $s11 = 2097151 & (self::load_4(self::substr($s, 28, 4)) >> 7); + $s12 = 2097151 & (self::load_4(self::substr($s, 31, 4)) >> 4); + $s13 = 2097151 & (self::load_3(self::substr($s, 34, 3)) >> 1); + $s14 = 2097151 & (self::load_4(self::substr($s, 36, 4)) >> 6); + $s15 = 2097151 & (self::load_3(self::substr($s, 39, 4)) >> 3); + $s16 = 2097151 & self::load_3(self::substr($s, 42, 3)); + $s17 = 2097151 & (self::load_4(self::substr($s, 44, 4)) >> 5); + $s18 = 2097151 & (self::load_3(self::substr($s, 47, 3)) >> 2); + $s19 = 2097151 & (self::load_4(self::substr($s, 49, 4)) >> 7); + $s20 = 2097151 & (self::load_4(self::substr($s, 52, 4)) >> 4); + $s21 = 2097151 & (self::load_3(self::substr($s, 55, 3)) >> 1); + $s22 = 2097151 & (self::load_4(self::substr($s, 57, 4)) >> 6); + $s23 = 0x1fffffff & (self::load_4(self::substr($s, 60, 4)) >> 3); + + $s11 += self::mul($s23, 666643, 20); + $s12 += self::mul($s23, 470296, 19); + $s13 += self::mul($s23, 654183, 20); + $s14 -= self::mul($s23, 997805, 20); + $s15 += self::mul($s23, 136657, 18); + $s16 -= self::mul($s23, 683901, 20); + + $s10 += self::mul($s22, 666643, 20); + $s11 += self::mul($s22, 470296, 19); + $s12 += self::mul($s22, 654183, 20); + $s13 -= self::mul($s22, 997805, 20); + $s14 += self::mul($s22, 136657, 18); + $s15 -= self::mul($s22, 683901, 20); + + $s9 += self::mul($s21, 666643, 20); + $s10 += self::mul($s21, 470296, 19); + $s11 += self::mul($s21, 654183, 20); + $s12 -= self::mul($s21, 997805, 20); + $s13 += self::mul($s21, 136657, 18); + $s14 -= self::mul($s21, 683901, 20); + + $s8 += self::mul($s20, 666643, 20); + $s9 += self::mul($s20, 470296, 19); + $s10 += self::mul($s20, 654183, 20); + $s11 -= self::mul($s20, 997805, 20); + $s12 += self::mul($s20, 136657, 18); + $s13 -= self::mul($s20, 683901, 20); + + $s7 += self::mul($s19, 666643, 20); + $s8 += self::mul($s19, 470296, 19); + $s9 += self::mul($s19, 654183, 20); + $s10 -= self::mul($s19, 997805, 20); + $s11 += self::mul($s19, 136657, 18); + $s12 -= self::mul($s19, 683901, 20); + + $s6 += self::mul($s18, 666643, 20); + $s7 += self::mul($s18, 470296, 19); + $s8 += self::mul($s18, 654183, 20); + $s9 -= self::mul($s18, 997805, 20); + $s10 += self::mul($s18, 136657, 18); + $s11 -= self::mul($s18, 683901, 20); + + $carry6 = ($s6 + (1 << 20)) >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + $carry8 = ($s8 + (1 << 20)) >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + $carry10 = ($s10 + (1 << 20)) >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + $carry12 = ($s12 + (1 << 20)) >> 21; + $s13 += $carry12; + $s12 -= $carry12 << 21; + $carry14 = ($s14 + (1 << 20)) >> 21; + $s15 += $carry14; + $s14 -= $carry14 << 21; + $carry16 = ($s16 + (1 << 20)) >> 21; + $s17 += $carry16; + $s16 -= $carry16 << 21; + + $carry7 = ($s7 + (1 << 20)) >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + $carry9 = ($s9 + (1 << 20)) >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + $carry11 = ($s11 + (1 << 20)) >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + $carry13 = ($s13 + (1 << 20)) >> 21; + $s14 += $carry13; + $s13 -= $carry13 << 21; + $carry15 = ($s15 + (1 << 20)) >> 21; + $s16 += $carry15; + $s15 -= $carry15 << 21; + + $s5 += self::mul($s17, 666643, 20); + $s6 += self::mul($s17, 470296, 19); + $s7 += self::mul($s17, 654183, 20); + $s8 -= self::mul($s17, 997805, 20); + $s9 += self::mul($s17, 136657, 18); + $s10 -= self::mul($s17, 683901, 20); + + $s4 += self::mul($s16, 666643, 20); + $s5 += self::mul($s16, 470296, 19); + $s6 += self::mul($s16, 654183, 20); + $s7 -= self::mul($s16, 997805, 20); + $s8 += self::mul($s16, 136657, 18); + $s9 -= self::mul($s16, 683901, 20); + + $s3 += self::mul($s15, 666643, 20); + $s4 += self::mul($s15, 470296, 19); + $s5 += self::mul($s15, 654183, 20); + $s6 -= self::mul($s15, 997805, 20); + $s7 += self::mul($s15, 136657, 18); + $s8 -= self::mul($s15, 683901, 20); + + $s2 += self::mul($s14, 666643, 20); + $s3 += self::mul($s14, 470296, 19); + $s4 += self::mul($s14, 654183, 20); + $s5 -= self::mul($s14, 997805, 20); + $s6 += self::mul($s14, 136657, 18); + $s7 -= self::mul($s14, 683901, 20); + + $s1 += self::mul($s13, 666643, 20); + $s2 += self::mul($s13, 470296, 19); + $s3 += self::mul($s13, 654183, 20); + $s4 -= self::mul($s13, 997805, 20); + $s5 += self::mul($s13, 136657, 18); + $s6 -= self::mul($s13, 683901, 20); + + $s0 += self::mul($s12, 666643, 20); + $s1 += self::mul($s12, 470296, 19); + $s2 += self::mul($s12, 654183, 20); + $s3 -= self::mul($s12, 997805, 20); + $s4 += self::mul($s12, 136657, 18); + $s5 -= self::mul($s12, 683901, 20); + $s12 = 0; + + $carry0 = ($s0 + (1 << 20)) >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + $carry2 = ($s2 + (1 << 20)) >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + $carry4 = ($s4 + (1 << 20)) >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + $carry6 = ($s6 + (1 << 20)) >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + $carry8 = ($s8 + (1 << 20)) >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + $carry10 = ($s10 + (1 << 20)) >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + + $carry1 = ($s1 + (1 << 20)) >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + $carry3 = ($s3 + (1 << 20)) >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + $carry5 = ($s5 + (1 << 20)) >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + $carry7 = ($s7 + (1 << 20)) >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + $carry9 = ($s9 + (1 << 20)) >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + $carry11 = ($s11 + (1 << 20)) >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + + $s0 += self::mul($s12, 666643, 20); + $s1 += self::mul($s12, 470296, 19); + $s2 += self::mul($s12, 654183, 20); + $s3 -= self::mul($s12, 997805, 20); + $s4 += self::mul($s12, 136657, 18); + $s5 -= self::mul($s12, 683901, 20); + $s12 = 0; + + $carry0 = $s0 >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + $carry1 = $s1 >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + $carry2 = $s2 >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + $carry3 = $s3 >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + $carry4 = $s4 >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + $carry5 = $s5 >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + $carry6 = $s6 >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + $carry7 = $s7 >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + $carry8 = $s8 >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + $carry9 = $s9 >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + $carry10 = $s10 >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + $carry11 = $s11 >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + + $s0 += self::mul($s12, 666643, 20); + $s1 += self::mul($s12, 470296, 19); + $s2 += self::mul($s12, 654183, 20); + $s3 -= self::mul($s12, 997805, 20); + $s4 += self::mul($s12, 136657, 18); + $s5 -= self::mul($s12, 683901, 20); + + $carry0 = $s0 >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + $carry1 = $s1 >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + $carry2 = $s2 >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + $carry3 = $s3 >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + $carry4 = $s4 >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + $carry5 = $s5 >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + $carry6 = $s6 >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + $carry7 = $s7 >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + $carry8 = $s8 >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + $carry9 = $s9 >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + $carry10 = $s10 >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + + /** + * @var array + */ + $arr = array( + (int) ($s0 >> 0), + (int) ($s0 >> 8), + (int) (($s0 >> 16) | $s1 << 5), + (int) ($s1 >> 3), + (int) ($s1 >> 11), + (int) (($s1 >> 19) | $s2 << 2), + (int) ($s2 >> 6), + (int) (($s2 >> 14) | $s3 << 7), + (int) ($s3 >> 1), + (int) ($s3 >> 9), + (int) (($s3 >> 17) | $s4 << 4), + (int) ($s4 >> 4), + (int) ($s4 >> 12), + (int) (($s4 >> 20) | $s5 << 1), + (int) ($s5 >> 7), + (int) (($s5 >> 15) | $s6 << 6), + (int) ($s6 >> 2), + (int) ($s6 >> 10), + (int) (($s6 >> 18) | $s7 << 3), + (int) ($s7 >> 5), + (int) ($s7 >> 13), + (int) ($s8 >> 0), + (int) ($s8 >> 8), + (int) (($s8 >> 16) | $s9 << 5), + (int) ($s9 >> 3), + (int) ($s9 >> 11), + (int) (($s9 >> 19) | $s10 << 2), + (int) ($s10 >> 6), + (int) (($s10 >> 14) | $s11 << 7), + (int) ($s11 >> 1), + (int) ($s11 >> 9), + (int) $s11 >> 17 + ); + return self::intArrayToString($arr); + } + + /** + * multiply by the order of the main subgroup l = 2^252+27742317777372353535851937790883648493 + * + * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A + * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 + */ + public static function ge_mul_l(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A) + { + $aslide = array( + 13, 0, 0, 0, 0, -1, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, + 0, 0, 0, -3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, + 0, 0, 0, -13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, + 0, 0, 11, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -1, + 0, 0, 0, 0, 3, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, + 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 + ); + + /** @var array $Ai size 8 */ + $Ai = array(); + + # ge_p3_to_cached(&Ai[0], A); + $Ai[0] = self::ge_p3_to_cached($A); + # ge_p3_dbl(&t, A); + $t = self::ge_p3_dbl($A); + # ge_p1p1_to_p3(&A2, &t); + $A2 = self::ge_p1p1_to_p3($t); + + for ($i = 1; $i < 8; ++$i) { + # ge_add(&t, &A2, &Ai[0]); + $t = self::ge_add($A2, $Ai[$i - 1]); + # ge_p1p1_to_p3(&u, &t); + $u = self::ge_p1p1_to_p3($t); + # ge_p3_to_cached(&Ai[i], &u); + $Ai[$i] = self::ge_p3_to_cached($u); + } + + $r = self::ge_p3_0(); + for ($i = 252; $i >= 0; --$i) { + $t = self::ge_p3_dbl($r); + if ($aslide[$i] > 0) { + # ge_p1p1_to_p3(&u, &t); + $u = self::ge_p1p1_to_p3($t); + # ge_add(&t, &u, &Ai[aslide[i] / 2]); + $t = self::ge_add($u, $Ai[(int)($aslide[$i] / 2)]); + } elseif ($aslide[$i] < 0) { + # ge_p1p1_to_p3(&u, &t); + $u = self::ge_p1p1_to_p3($t); + # ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]); + $t = self::ge_sub($u, $Ai[(int)(-$aslide[$i] / 2)]); + } + } + + # ge_p1p1_to_p3(r, &t); + return self::ge_p1p1_to_p3($t); + } + + /** + * @param string $a + * @param string $b + * @return string + */ + public static function sc25519_mul($a, $b) + { + // int64_t a0 = 2097151 & load_3(a); + // int64_t a1 = 2097151 & (load_4(a + 2) >> 5); + // int64_t a2 = 2097151 & (load_3(a + 5) >> 2); + // int64_t a3 = 2097151 & (load_4(a + 7) >> 7); + // int64_t a4 = 2097151 & (load_4(a + 10) >> 4); + // int64_t a5 = 2097151 & (load_3(a + 13) >> 1); + // int64_t a6 = 2097151 & (load_4(a + 15) >> 6); + // int64_t a7 = 2097151 & (load_3(a + 18) >> 3); + // int64_t a8 = 2097151 & load_3(a + 21); + // int64_t a9 = 2097151 & (load_4(a + 23) >> 5); + // int64_t a10 = 2097151 & (load_3(a + 26) >> 2); + // int64_t a11 = (load_4(a + 28) >> 7); + $a0 = 2097151 & self::load_3(self::substr($a, 0, 3)); + $a1 = 2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5); + $a2 = 2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2); + $a3 = 2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7); + $a4 = 2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4); + $a5 = 2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1); + $a6 = 2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6); + $a7 = 2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3); + $a8 = 2097151 & self::load_3(self::substr($a, 21, 3)); + $a9 = 2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5); + $a10 = 2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2); + $a11 = (self::load_4(self::substr($a, 28, 4)) >> 7); + + // int64_t b0 = 2097151 & load_3(b); + // int64_t b1 = 2097151 & (load_4(b + 2) >> 5); + // int64_t b2 = 2097151 & (load_3(b + 5) >> 2); + // int64_t b3 = 2097151 & (load_4(b + 7) >> 7); + // int64_t b4 = 2097151 & (load_4(b + 10) >> 4); + // int64_t b5 = 2097151 & (load_3(b + 13) >> 1); + // int64_t b6 = 2097151 & (load_4(b + 15) >> 6); + // int64_t b7 = 2097151 & (load_3(b + 18) >> 3); + // int64_t b8 = 2097151 & load_3(b + 21); + // int64_t b9 = 2097151 & (load_4(b + 23) >> 5); + // int64_t b10 = 2097151 & (load_3(b + 26) >> 2); + // int64_t b11 = (load_4(b + 28) >> 7); + $b0 = 2097151 & self::load_3(self::substr($b, 0, 3)); + $b1 = 2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5); + $b2 = 2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2); + $b3 = 2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7); + $b4 = 2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4); + $b5 = 2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1); + $b6 = 2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6); + $b7 = 2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3); + $b8 = 2097151 & self::load_3(self::substr($b, 21, 3)); + $b9 = 2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5); + $b10 = 2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2); + $b11 = (self::load_4(self::substr($b, 28, 4)) >> 7); + + // s0 = a0 * b0; + // s1 = a0 * b1 + a1 * b0; + // s2 = a0 * b2 + a1 * b1 + a2 * b0; + // s3 = a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0; + // s4 = a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0; + // s5 = a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0; + // s6 = a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0; + // s7 = a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 + + // a6 * b1 + a7 * b0; + // s8 = a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 + + // a6 * b2 + a7 * b1 + a8 * b0; + // s9 = a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 + + // a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0; + // s10 = a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 + + // a6 * b4 + a7 * b3 + a8 * b2 + a9 * b1 + a10 * b0; + // s11 = a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 + + // a6 * b5 + a7 * b4 + a8 * b3 + a9 * b2 + a10 * b1 + a11 * b0; + // s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 + + // a7 * b5 + a8 * b4 + a9 * b3 + a10 * b2 + a11 * b1; + // s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 + + // a8 * b5 + a9 * b4 + a10 * b3 + a11 * b2; + // s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 + + // a9 * b5 + a10 * b4 + a11 * b3; + // s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 + + // a10 * b5 + a11 * b4; + // s16 = + // a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5; + // s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6; + // s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7; + // s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8; + // s20 = a9 * b11 + a10 * b10 + a11 * b9; + // s21 = a10 * b11 + a11 * b10; + // s22 = a11 * b11; + // s23 = 0; + $s0 = self::mul($a0, $b0, 22); + $s1 = self::mul($a0, $b1, 22) + self::mul($a1, $b0, 22); + $s2 = self::mul($a0, $b2, 22) + self::mul($a1, $b1, 22) + self::mul($a2, $b0, 22); + $s3 = self::mul($a0, $b3, 22) + self::mul($a1, $b2, 22) + self::mul($a2, $b1, 22) + self::mul($a3, $b0, 22); + $s4 = self::mul($a0, $b4, 22) + self::mul($a1, $b3, 22) + self::mul($a2, $b2, 22) + self::mul($a3, $b1, 22) + + self::mul($a4, $b0, 22); + $s5 = self::mul($a0, $b5, 22) + self::mul($a1, $b4, 22) + self::mul($a2, $b3, 22) + self::mul($a3, $b2, 22) + + self::mul($a4, $b1, 22) + self::mul($a5, $b0, 22); + $s6 = self::mul($a0, $b6, 22) + self::mul($a1, $b5, 22) + self::mul($a2, $b4, 22) + self::mul($a3, $b3, 22) + + self::mul($a4, $b2, 22) + self::mul($a5, $b1, 22) + self::mul($a6, $b0, 22); + $s7 = self::mul($a0, $b7, 22) + self::mul($a1, $b6, 22) + self::mul($a2, $b5, 22) + self::mul($a3, $b4, 22) + + self::mul($a4, $b3, 22) + self::mul($a5, $b2, 22) + self::mul($a6, $b1, 22) + self::mul($a7, $b0, 22); + $s8 = self::mul($a0, $b8, 22) + self::mul($a1, $b7, 22) + self::mul($a2, $b6, 22) + self::mul($a3, $b5, 22) + + self::mul($a4, $b4, 22) + self::mul($a5, $b3, 22) + self::mul($a6, $b2, 22) + self::mul($a7, $b1, 22) + + self::mul($a8, $b0, 22); + $s9 = self::mul($a0, $b9, 22) + self::mul($a1, $b8, 22) + self::mul($a2, $b7, 22) + self::mul($a3, $b6, 22) + + self::mul($a4, $b5, 22) + self::mul($a5, $b4, 22) + self::mul($a6, $b3, 22) + self::mul($a7, $b2, 22) + + self::mul($a8, $b1, 22) + self::mul($a9, $b0, 22); + $s10 = self::mul($a0, $b10, 22) + self::mul($a1, $b9, 22) + self::mul($a2, $b8, 22) + self::mul($a3, $b7, 22) + + self::mul($a4, $b6, 22) + self::mul($a5, $b5, 22) + self::mul($a6, $b4, 22) + self::mul($a7, $b3, 22) + + self::mul($a8, $b2, 22) + self::mul($a9, $b1, 22) + self::mul($a10, $b0, 22); + $s11 = self::mul($a0, $b11, 22) + self::mul($a1, $b10, 22) + self::mul($a2, $b9, 22) + self::mul($a3, $b8, 22) + + self::mul($a4, $b7, 22) + self::mul($a5, $b6, 22) + self::mul($a6, $b5, 22) + self::mul($a7, $b4, 22) + + self::mul($a8, $b3, 22) + self::mul($a9, $b2, 22) + self::mul($a10, $b1, 22) + self::mul($a11, $b0, 22); + $s12 = self::mul($a1, $b11, 22) + self::mul($a2, $b10, 22) + self::mul($a3, $b9, 22) + self::mul($a4, $b8, 22) + + self::mul($a5, $b7, 22) + self::mul($a6, $b6, 22) + self::mul($a7, $b5, 22) + self::mul($a8, $b4, 22) + + self::mul($a9, $b3, 22) + self::mul($a10, $b2, 22) + self::mul($a11, $b1, 22); + $s13 = self::mul($a2, $b11, 22) + self::mul($a3, $b10, 22) + self::mul($a4, $b9, 22) + self::mul($a5, $b8, 22) + + self::mul($a6, $b7, 22) + self::mul($a7, $b6, 22) + self::mul($a8, $b5, 22) + self::mul($a9, $b4, 22) + + self::mul($a10, $b3, 22) + self::mul($a11, $b2, 22); + $s14 = self::mul($a3, $b11, 22) + self::mul($a4, $b10, 22) + self::mul($a5, $b9, 22) + self::mul($a6, $b8, 22) + + self::mul($a7, $b7, 22) + self::mul($a8, $b6, 22) + self::mul($a9, $b5, 22) + self::mul($a10, $b4, 22) + + self::mul($a11, $b3, 22); + $s15 = self::mul($a4, $b11, 22) + self::mul($a5, $b10, 22) + self::mul($a6, $b9, 22) + self::mul($a7, $b8, 22) + + self::mul($a8, $b7, 22) + self::mul($a9, $b6, 22) + self::mul($a10, $b5, 22) + self::mul($a11, $b4, 22); + $s16 = + self::mul($a5, $b11, 22) + self::mul($a6, $b10, 22) + self::mul($a7, $b9, 22) + self::mul($a8, $b8, 22) + + self::mul($a9, $b7, 22) + self::mul($a10, $b6, 22) + self::mul($a11, $b5, 22); + $s17 = self::mul($a6, $b11, 22) + self::mul($a7, $b10, 22) + self::mul($a8, $b9, 22) + self::mul($a9, $b8, 22) + + self::mul($a10, $b7, 22) + self::mul($a11, $b6, 22); + $s18 = self::mul($a7, $b11, 22) + self::mul($a8, $b10, 22) + self::mul($a9, $b9, 22) + self::mul($a10, $b8, 22) + + self::mul($a11, $b7, 22); + $s19 = self::mul($a8, $b11, 22) + self::mul($a9, $b10, 22) + self::mul($a10, $b9, 22) + + self::mul($a11, $b8, 22); + $s20 = self::mul($a9, $b11, 22) + self::mul($a10, $b10, 22) + self::mul($a11, $b9, 22); + $s21 = self::mul($a10, $b11, 22) + self::mul($a11, $b10, 22); + $s22 = self::mul($a11, $b11, 22); + $s23 = 0; + + // carry0 = (s0 + (int64_t) (1L << 20)) >> 21; + // s1 += carry0; + // s0 -= carry0 * ((uint64_t) 1L << 21); + $carry0 = ($s0 + (1 << 20)) >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + // carry2 = (s2 + (int64_t) (1L << 20)) >> 21; + // s3 += carry2; + // s2 -= carry2 * ((uint64_t) 1L << 21); + $carry2 = ($s2 + (1 << 20)) >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + // carry4 = (s4 + (int64_t) (1L << 20)) >> 21; + // s5 += carry4; + // s4 -= carry4 * ((uint64_t) 1L << 21); + $carry4 = ($s4 + (1 << 20)) >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + // carry6 = (s6 + (int64_t) (1L << 20)) >> 21; + // s7 += carry6; + // s6 -= carry6 * ((uint64_t) 1L << 21); + $carry6 = ($s6 + (1 << 20)) >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + // carry8 = (s8 + (int64_t) (1L << 20)) >> 21; + // s9 += carry8; + // s8 -= carry8 * ((uint64_t) 1L << 21); + $carry8 = ($s8 + (1 << 20)) >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + // carry10 = (s10 + (int64_t) (1L << 20)) >> 21; + // s11 += carry10; + // s10 -= carry10 * ((uint64_t) 1L << 21); + $carry10 = ($s10 + (1 << 20)) >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + // carry12 = (s12 + (int64_t) (1L << 20)) >> 21; + // s13 += carry12; + // s12 -= carry12 * ((uint64_t) 1L << 21); + $carry12 = ($s12 + (1 << 20)) >> 21; + $s13 += $carry12; + $s12 -= $carry12 << 21; + // carry14 = (s14 + (int64_t) (1L << 20)) >> 21; + // s15 += carry14; + // s14 -= carry14 * ((uint64_t) 1L << 21); + $carry14 = ($s14 + (1 << 20)) >> 21; + $s15 += $carry14; + $s14 -= $carry14 << 21; + // carry16 = (s16 + (int64_t) (1L << 20)) >> 21; + // s17 += carry16; + // s16 -= carry16 * ((uint64_t) 1L << 21); + $carry16 = ($s16 + (1 << 20)) >> 21; + $s17 += $carry16; + $s16 -= $carry16 << 21; + // carry18 = (s18 + (int64_t) (1L << 20)) >> 21; + // s19 += carry18; + // s18 -= carry18 * ((uint64_t) 1L << 21); + $carry18 = ($s18 + (1 << 20)) >> 21; + $s19 += $carry18; + $s18 -= $carry18 << 21; + // carry20 = (s20 + (int64_t) (1L << 20)) >> 21; + // s21 += carry20; + // s20 -= carry20 * ((uint64_t) 1L << 21); + $carry20 = ($s20 + (1 << 20)) >> 21; + $s21 += $carry20; + $s20 -= $carry20 << 21; + // carry22 = (s22 + (int64_t) (1L << 20)) >> 21; + // s23 += carry22; + // s22 -= carry22 * ((uint64_t) 1L << 21); + $carry22 = ($s22 + (1 << 20)) >> 21; + $s23 += $carry22; + $s22 -= $carry22 << 21; + + // carry1 = (s1 + (int64_t) (1L << 20)) >> 21; + // s2 += carry1; + // s1 -= carry1 * ((uint64_t) 1L << 21); + $carry1 = ($s1 + (1 << 20)) >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + // carry3 = (s3 + (int64_t) (1L << 20)) >> 21; + // s4 += carry3; + // s3 -= carry3 * ((uint64_t) 1L << 21); + $carry3 = ($s3 + (1 << 20)) >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + // carry5 = (s5 + (int64_t) (1L << 20)) >> 21; + // s6 += carry5; + // s5 -= carry5 * ((uint64_t) 1L << 21); + $carry5 = ($s5 + (1 << 20)) >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + // carry7 = (s7 + (int64_t) (1L << 20)) >> 21; + // s8 += carry7; + // s7 -= carry7 * ((uint64_t) 1L << 21); + $carry7 = ($s7 + (1 << 20)) >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + // carry9 = (s9 + (int64_t) (1L << 20)) >> 21; + // s10 += carry9; + // s9 -= carry9 * ((uint64_t) 1L << 21); + $carry9 = ($s9 + (1 << 20)) >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + // carry11 = (s11 + (int64_t) (1L << 20)) >> 21; + // s12 += carry11; + // s11 -= carry11 * ((uint64_t) 1L << 21); + $carry11 = ($s11 + (1 << 20)) >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + // carry13 = (s13 + (int64_t) (1L << 20)) >> 21; + // s14 += carry13; + // s13 -= carry13 * ((uint64_t) 1L << 21); + $carry13 = ($s13 + (1 << 20)) >> 21; + $s14 += $carry13; + $s13 -= $carry13 << 21; + // carry15 = (s15 + (int64_t) (1L << 20)) >> 21; + // s16 += carry15; + // s15 -= carry15 * ((uint64_t) 1L << 21); + $carry15 = ($s15 + (1 << 20)) >> 21; + $s16 += $carry15; + $s15 -= $carry15 << 21; + // carry17 = (s17 + (int64_t) (1L << 20)) >> 21; + // s18 += carry17; + // s17 -= carry17 * ((uint64_t) 1L << 21); + $carry17 = ($s17 + (1 << 20)) >> 21; + $s18 += $carry17; + $s17 -= $carry17 << 21; + // carry19 = (s19 + (int64_t) (1L << 20)) >> 21; + // s20 += carry19; + // s19 -= carry19 * ((uint64_t) 1L << 21); + $carry19 = ($s19 + (1 << 20)) >> 21; + $s20 += $carry19; + $s19 -= $carry19 << 21; + // carry21 = (s21 + (int64_t) (1L << 20)) >> 21; + // s22 += carry21; + // s21 -= carry21 * ((uint64_t) 1L << 21); + $carry21 = ($s21 + (1 << 20)) >> 21; + $s22 += $carry21; + $s21 -= $carry21 << 21; + + // s11 += s23 * 666643; + // s12 += s23 * 470296; + // s13 += s23 * 654183; + // s14 -= s23 * 997805; + // s15 += s23 * 136657; + // s16 -= s23 * 683901; + $s11 += self::mul($s23, 666643, 20); + $s12 += self::mul($s23, 470296, 19); + $s13 += self::mul($s23, 654183, 20); + $s14 -= self::mul($s23, 997805, 20); + $s15 += self::mul($s23, 136657, 18); + $s16 -= self::mul($s23, 683901, 20); + + // s10 += s22 * 666643; + // s11 += s22 * 470296; + // s12 += s22 * 654183; + // s13 -= s22 * 997805; + // s14 += s22 * 136657; + // s15 -= s22 * 683901; + $s10 += self::mul($s22, 666643, 20); + $s11 += self::mul($s22, 470296, 19); + $s12 += self::mul($s22, 654183, 20); + $s13 -= self::mul($s22, 997805, 20); + $s14 += self::mul($s22, 136657, 18); + $s15 -= self::mul($s22, 683901, 20); + + // s9 += s21 * 666643; + // s10 += s21 * 470296; + // s11 += s21 * 654183; + // s12 -= s21 * 997805; + // s13 += s21 * 136657; + // s14 -= s21 * 683901; + $s9 += self::mul($s21, 666643, 20); + $s10 += self::mul($s21, 470296, 19); + $s11 += self::mul($s21, 654183, 20); + $s12 -= self::mul($s21, 997805, 20); + $s13 += self::mul($s21, 136657, 18); + $s14 -= self::mul($s21, 683901, 20); + + // s8 += s20 * 666643; + // s9 += s20 * 470296; + // s10 += s20 * 654183; + // s11 -= s20 * 997805; + // s12 += s20 * 136657; + // s13 -= s20 * 683901; + $s8 += self::mul($s20, 666643, 20); + $s9 += self::mul($s20, 470296, 19); + $s10 += self::mul($s20, 654183, 20); + $s11 -= self::mul($s20, 997805, 20); + $s12 += self::mul($s20, 136657, 18); + $s13 -= self::mul($s20, 683901, 20); + + // s7 += s19 * 666643; + // s8 += s19 * 470296; + // s9 += s19 * 654183; + // s10 -= s19 * 997805; + // s11 += s19 * 136657; + // s12 -= s19 * 683901; + $s7 += self::mul($s19, 666643, 20); + $s8 += self::mul($s19, 470296, 19); + $s9 += self::mul($s19, 654183, 20); + $s10 -= self::mul($s19, 997805, 20); + $s11 += self::mul($s19, 136657, 18); + $s12 -= self::mul($s19, 683901, 20); + + // s6 += s18 * 666643; + // s7 += s18 * 470296; + // s8 += s18 * 654183; + // s9 -= s18 * 997805; + // s10 += s18 * 136657; + // s11 -= s18 * 683901; + $s6 += self::mul($s18, 666643, 20); + $s7 += self::mul($s18, 470296, 19); + $s8 += self::mul($s18, 654183, 20); + $s9 -= self::mul($s18, 997805, 20); + $s10 += self::mul($s18, 136657, 18); + $s11 -= self::mul($s18, 683901, 20); + + // carry6 = (s6 + (int64_t) (1L << 20)) >> 21; + // s7 += carry6; + // s6 -= carry6 * ((uint64_t) 1L << 21); + $carry6 = ($s6 + (1 << 20)) >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + // carry8 = (s8 + (int64_t) (1L << 20)) >> 21; + // s9 += carry8; + // s8 -= carry8 * ((uint64_t) 1L << 21); + $carry8 = ($s8 + (1 << 20)) >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + // carry10 = (s10 + (int64_t) (1L << 20)) >> 21; + // s11 += carry10; + // s10 -= carry10 * ((uint64_t) 1L << 21); + $carry10 = ($s10 + (1 << 20)) >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + // carry12 = (s12 + (int64_t) (1L << 20)) >> 21; + // s13 += carry12; + // s12 -= carry12 * ((uint64_t) 1L << 21); + $carry12 = ($s12 + (1 << 20)) >> 21; + $s13 += $carry12; + $s12 -= $carry12 << 21; + // carry14 = (s14 + (int64_t) (1L << 20)) >> 21; + // s15 += carry14; + // s14 -= carry14 * ((uint64_t) 1L << 21); + $carry14 = ($s14 + (1 << 20)) >> 21; + $s15 += $carry14; + $s14 -= $carry14 << 21; + // carry16 = (s16 + (int64_t) (1L << 20)) >> 21; + // s17 += carry16; + // s16 -= carry16 * ((uint64_t) 1L << 21); + $carry16 = ($s16 + (1 << 20)) >> 21; + $s17 += $carry16; + $s16 -= $carry16 << 21; + + // carry7 = (s7 + (int64_t) (1L << 20)) >> 21; + // s8 += carry7; + // s7 -= carry7 * ((uint64_t) 1L << 21); + $carry7 = ($s7 + (1 << 20)) >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + // carry9 = (s9 + (int64_t) (1L << 20)) >> 21; + // s10 += carry9; + // s9 -= carry9 * ((uint64_t) 1L << 21); + $carry9 = ($s9 + (1 << 20)) >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + // carry11 = (s11 + (int64_t) (1L << 20)) >> 21; + // s12 += carry11; + // s11 -= carry11 * ((uint64_t) 1L << 21); + $carry11 = ($s11 + (1 << 20)) >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + // carry13 = (s13 + (int64_t) (1L << 20)) >> 21; + // s14 += carry13; + // s13 -= carry13 * ((uint64_t) 1L << 21); + $carry13 = ($s13 + (1 << 20)) >> 21; + $s14 += $carry13; + $s13 -= $carry13 << 21; + // carry15 = (s15 + (int64_t) (1L << 20)) >> 21; + // s16 += carry15; + // s15 -= carry15 * ((uint64_t) 1L << 21); + $carry15 = ($s15 + (1 << 20)) >> 21; + $s16 += $carry15; + $s15 -= $carry15 << 21; + + // s5 += s17 * 666643; + // s6 += s17 * 470296; + // s7 += s17 * 654183; + // s8 -= s17 * 997805; + // s9 += s17 * 136657; + // s10 -= s17 * 683901; + $s5 += self::mul($s17, 666643, 20); + $s6 += self::mul($s17, 470296, 19); + $s7 += self::mul($s17, 654183, 20); + $s8 -= self::mul($s17, 997805, 20); + $s9 += self::mul($s17, 136657, 18); + $s10 -= self::mul($s17, 683901, 20); + + // s4 += s16 * 666643; + // s5 += s16 * 470296; + // s6 += s16 * 654183; + // s7 -= s16 * 997805; + // s8 += s16 * 136657; + // s9 -= s16 * 683901; + $s4 += self::mul($s16, 666643, 20); + $s5 += self::mul($s16, 470296, 19); + $s6 += self::mul($s16, 654183, 20); + $s7 -= self::mul($s16, 997805, 20); + $s8 += self::mul($s16, 136657, 18); + $s9 -= self::mul($s16, 683901, 20); + + // s3 += s15 * 666643; + // s4 += s15 * 470296; + // s5 += s15 * 654183; + // s6 -= s15 * 997805; + // s7 += s15 * 136657; + // s8 -= s15 * 683901; + $s3 += self::mul($s15, 666643, 20); + $s4 += self::mul($s15, 470296, 19); + $s5 += self::mul($s15, 654183, 20); + $s6 -= self::mul($s15, 997805, 20); + $s7 += self::mul($s15, 136657, 18); + $s8 -= self::mul($s15, 683901, 20); + + // s2 += s14 * 666643; + // s3 += s14 * 470296; + // s4 += s14 * 654183; + // s5 -= s14 * 997805; + // s6 += s14 * 136657; + // s7 -= s14 * 683901; + $s2 += self::mul($s14, 666643, 20); + $s3 += self::mul($s14, 470296, 19); + $s4 += self::mul($s14, 654183, 20); + $s5 -= self::mul($s14, 997805, 20); + $s6 += self::mul($s14, 136657, 18); + $s7 -= self::mul($s14, 683901, 20); + + // s1 += s13 * 666643; + // s2 += s13 * 470296; + // s3 += s13 * 654183; + // s4 -= s13 * 997805; + // s5 += s13 * 136657; + // s6 -= s13 * 683901; + $s1 += self::mul($s13, 666643, 20); + $s2 += self::mul($s13, 470296, 19); + $s3 += self::mul($s13, 654183, 20); + $s4 -= self::mul($s13, 997805, 20); + $s5 += self::mul($s13, 136657, 18); + $s6 -= self::mul($s13, 683901, 20); + + // s0 += s12 * 666643; + // s1 += s12 * 470296; + // s2 += s12 * 654183; + // s3 -= s12 * 997805; + // s4 += s12 * 136657; + // s5 -= s12 * 683901; + // s12 = 0; + $s0 += self::mul($s12, 666643, 20); + $s1 += self::mul($s12, 470296, 19); + $s2 += self::mul($s12, 654183, 20); + $s3 -= self::mul($s12, 997805, 20); + $s4 += self::mul($s12, 136657, 18); + $s5 -= self::mul($s12, 683901, 20); + $s12 = 0; + + // carry0 = (s0 + (int64_t) (1L << 20)) >> 21; + // s1 += carry0; + // s0 -= carry0 * ((uint64_t) 1L << 21); + $carry0 = ($s0 + (1 << 20)) >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + // carry2 = (s2 + (int64_t) (1L << 20)) >> 21; + // s3 += carry2; + // s2 -= carry2 * ((uint64_t) 1L << 21); + $carry2 = ($s2 + (1 << 20)) >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + // carry4 = (s4 + (int64_t) (1L << 20)) >> 21; + // s5 += carry4; + // s4 -= carry4 * ((uint64_t) 1L << 21); + $carry4 = ($s4 + (1 << 20)) >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + // carry6 = (s6 + (int64_t) (1L << 20)) >> 21; + // s7 += carry6; + // s6 -= carry6 * ((uint64_t) 1L << 21); + $carry6 = ($s6 + (1 << 20)) >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + // carry8 = (s8 + (int64_t) (1L << 20)) >> 21; + // s9 += carry8; + // s8 -= carry8 * ((uint64_t) 1L << 21); + $carry8 = ($s8 + (1 << 20)) >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + // carry10 = (s10 + (int64_t) (1L << 20)) >> 21; + // s11 += carry10; + // s10 -= carry10 * ((uint64_t) 1L << 21); + $carry10 = ($s10 + (1 << 20)) >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + + // carry1 = (s1 + (int64_t) (1L << 20)) >> 21; + // s2 += carry1; + // s1 -= carry1 * ((uint64_t) 1L << 21); + $carry1 = ($s1 + (1 << 20)) >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + // carry3 = (s3 + (int64_t) (1L << 20)) >> 21; + // s4 += carry3; + // s3 -= carry3 * ((uint64_t) 1L << 21); + $carry3 = ($s3 + (1 << 20)) >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + // carry5 = (s5 + (int64_t) (1L << 20)) >> 21; + // s6 += carry5; + // s5 -= carry5 * ((uint64_t) 1L << 21); + $carry5 = ($s5 + (1 << 20)) >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + // carry7 = (s7 + (int64_t) (1L << 20)) >> 21; + // s8 += carry7; + // s7 -= carry7 * ((uint64_t) 1L << 21); + $carry7 = ($s7 + (1 << 20)) >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + // carry9 = (s9 + (int64_t) (1L << 20)) >> 21; + // s10 += carry9; + // s9 -= carry9 * ((uint64_t) 1L << 21); + $carry9 = ($s9 + (1 << 20)) >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + // carry11 = (s11 + (int64_t) (1L << 20)) >> 21; + // s12 += carry11; + // s11 -= carry11 * ((uint64_t) 1L << 21); + $carry11 = ($s11 + (1 << 20)) >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + + // s0 += s12 * 666643; + // s1 += s12 * 470296; + // s2 += s12 * 654183; + // s3 -= s12 * 997805; + // s4 += s12 * 136657; + // s5 -= s12 * 683901; + // s12 = 0; + $s0 += self::mul($s12, 666643, 20); + $s1 += self::mul($s12, 470296, 19); + $s2 += self::mul($s12, 654183, 20); + $s3 -= self::mul($s12, 997805, 20); + $s4 += self::mul($s12, 136657, 18); + $s5 -= self::mul($s12, 683901, 20); + $s12 = 0; + + // carry0 = s0 >> 21; + // s1 += carry0; + // s0 -= carry0 * ((uint64_t) 1L << 21); + $carry0 = $s0 >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + // carry1 = s1 >> 21; + // s2 += carry1; + // s1 -= carry1 * ((uint64_t) 1L << 21); + $carry1 = $s1 >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + // carry2 = s2 >> 21; + // s3 += carry2; + // s2 -= carry2 * ((uint64_t) 1L << 21); + $carry2 = $s2 >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + // carry3 = s3 >> 21; + // s4 += carry3; + // s3 -= carry3 * ((uint64_t) 1L << 21); + $carry3 = $s3 >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + // carry4 = s4 >> 21; + // s5 += carry4; + // s4 -= carry4 * ((uint64_t) 1L << 21); + $carry4 = $s4 >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + // carry5 = s5 >> 21; + // s6 += carry5; + // s5 -= carry5 * ((uint64_t) 1L << 21); + $carry5 = $s5 >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + // carry6 = s6 >> 21; + // s7 += carry6; + // s6 -= carry6 * ((uint64_t) 1L << 21); + $carry6 = $s6 >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + // carry7 = s7 >> 21; + // s8 += carry7; + // s7 -= carry7 * ((uint64_t) 1L << 21); + $carry7 = $s7 >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + // carry8 = s8 >> 21; + // s9 += carry8; + // s8 -= carry8 * ((uint64_t) 1L << 21); + $carry8 = $s8 >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + // carry9 = s9 >> 21; + // s10 += carry9; + // s9 -= carry9 * ((uint64_t) 1L << 21); + $carry9 = $s9 >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + // carry10 = s10 >> 21; + // s11 += carry10; + // s10 -= carry10 * ((uint64_t) 1L << 21); + $carry10 = $s10 >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + // carry11 = s11 >> 21; + // s12 += carry11; + // s11 -= carry11 * ((uint64_t) 1L << 21); + $carry11 = $s11 >> 21; + $s12 += $carry11; + $s11 -= $carry11 << 21; + + // s0 += s12 * 666643; + // s1 += s12 * 470296; + // s2 += s12 * 654183; + // s3 -= s12 * 997805; + // s4 += s12 * 136657; + // s5 -= s12 * 683901; + $s0 += self::mul($s12, 666643, 20); + $s1 += self::mul($s12, 470296, 19); + $s2 += self::mul($s12, 654183, 20); + $s3 -= self::mul($s12, 997805, 20); + $s4 += self::mul($s12, 136657, 18); + $s5 -= self::mul($s12, 683901, 20); + + // carry0 = s0 >> 21; + // s1 += carry0; + // s0 -= carry0 * ((uint64_t) 1L << 21); + $carry0 = $s0 >> 21; + $s1 += $carry0; + $s0 -= $carry0 << 21; + // carry1 = s1 >> 21; + // s2 += carry1; + // s1 -= carry1 * ((uint64_t) 1L << 21); + $carry1 = $s1 >> 21; + $s2 += $carry1; + $s1 -= $carry1 << 21; + // carry2 = s2 >> 21; + // s3 += carry2; + // s2 -= carry2 * ((uint64_t) 1L << 21); + $carry2 = $s2 >> 21; + $s3 += $carry2; + $s2 -= $carry2 << 21; + // carry3 = s3 >> 21; + // s4 += carry3; + // s3 -= carry3 * ((uint64_t) 1L << 21); + $carry3 = $s3 >> 21; + $s4 += $carry3; + $s3 -= $carry3 << 21; + // carry4 = s4 >> 21; + // s5 += carry4; + // s4 -= carry4 * ((uint64_t) 1L << 21); + $carry4 = $s4 >> 21; + $s5 += $carry4; + $s4 -= $carry4 << 21; + // carry5 = s5 >> 21; + // s6 += carry5; + // s5 -= carry5 * ((uint64_t) 1L << 21); + $carry5 = $s5 >> 21; + $s6 += $carry5; + $s5 -= $carry5 << 21; + // carry6 = s6 >> 21; + // s7 += carry6; + // s6 -= carry6 * ((uint64_t) 1L << 21); + $carry6 = $s6 >> 21; + $s7 += $carry6; + $s6 -= $carry6 << 21; + // carry7 = s7 >> 21; + // s8 += carry7; + // s7 -= carry7 * ((uint64_t) 1L << 21); + $carry7 = $s7 >> 21; + $s8 += $carry7; + $s7 -= $carry7 << 21; + // carry8 = s8 >> 21; + // s9 += carry8; + // s8 -= carry8 * ((uint64_t) 1L << 21); + $carry8 = $s8 >> 21; + $s9 += $carry8; + $s8 -= $carry8 << 21; + // carry9 = s9 >> 21; + // s10 += carry9; + // s9 -= carry9 * ((uint64_t) 1L << 21); + $carry9 = $s9 >> 21; + $s10 += $carry9; + $s9 -= $carry9 << 21; + // carry10 = s10 >> 21; + // s11 += carry10; + // s10 -= carry10 * ((uint64_t) 1L << 21); + $carry10 = $s10 >> 21; + $s11 += $carry10; + $s10 -= $carry10 << 21; + + $s = array_fill(0, 32, 0); + // s[0] = s0 >> 0; + $s[0] = $s0 >> 0; + // s[1] = s0 >> 8; + $s[1] = $s0 >> 8; + // s[2] = (s0 >> 16) | (s1 * ((uint64_t) 1 << 5)); + $s[2] = ($s0 >> 16) | ($s1 << 5); + // s[3] = s1 >> 3; + $s[3] = $s1 >> 3; + // s[4] = s1 >> 11; + $s[4] = $s1 >> 11; + // s[5] = (s1 >> 19) | (s2 * ((uint64_t) 1 << 2)); + $s[5] = ($s1 >> 19) | ($s2 << 2); + // s[6] = s2 >> 6; + $s[6] = $s2 >> 6; + // s[7] = (s2 >> 14) | (s3 * ((uint64_t) 1 << 7)); + $s[7] = ($s2 >> 14) | ($s3 << 7); + // s[8] = s3 >> 1; + $s[8] = $s3 >> 1; + // s[9] = s3 >> 9; + $s[9] = $s3 >> 9; + // s[10] = (s3 >> 17) | (s4 * ((uint64_t) 1 << 4)); + $s[10] = ($s3 >> 17) | ($s4 << 4); + // s[11] = s4 >> 4; + $s[11] = $s4 >> 4; + // s[12] = s4 >> 12; + $s[12] = $s4 >> 12; + // s[13] = (s4 >> 20) | (s5 * ((uint64_t) 1 << 1)); + $s[13] = ($s4 >> 20) | ($s5 << 1); + // s[14] = s5 >> 7; + $s[14] = $s5 >> 7; + // s[15] = (s5 >> 15) | (s6 * ((uint64_t) 1 << 6)); + $s[15] = ($s5 >> 15) | ($s6 << 6); + // s[16] = s6 >> 2; + $s[16] = $s6 >> 2; + // s[17] = s6 >> 10; + $s[17] = $s6 >> 10; + // s[18] = (s6 >> 18) | (s7 * ((uint64_t) 1 << 3)); + $s[18] = ($s6 >> 18) | ($s7 << 3); + // s[19] = s7 >> 5; + $s[19] = $s7 >> 5; + // s[20] = s7 >> 13; + $s[20] = $s7 >> 13; + // s[21] = s8 >> 0; + $s[21] = $s8 >> 0; + // s[22] = s8 >> 8; + $s[22] = $s8 >> 8; + // s[23] = (s8 >> 16) | (s9 * ((uint64_t) 1 << 5)); + $s[23] = ($s8 >> 16) | ($s9 << 5); + // s[24] = s9 >> 3; + $s[24] = $s9 >> 3; + // s[25] = s9 >> 11; + $s[25] = $s9 >> 11; + // s[26] = (s9 >> 19) | (s10 * ((uint64_t) 1 << 2)); + $s[26] = ($s9 >> 19) | ($s10 << 2); + // s[27] = s10 >> 6; + $s[27] = $s10 >> 6; + // s[28] = (s10 >> 14) | (s11 * ((uint64_t) 1 << 7)); + $s[28] = ($s10 >> 14) | ($s11 << 7); + // s[29] = s11 >> 1; + $s[29] = $s11 >> 1; + // s[30] = s11 >> 9; + $s[30] = $s11 >> 9; + // s[31] = s11 >> 17; + $s[31] = $s11 >> 17; + return self::intArrayToString($s); + } + + /** + * @param string $s + * @return string + */ + public static function sc25519_sq($s) + { + return self::sc25519_mul($s, $s); + } + + /** + * @param string $s + * @param int $n + * @param string $a + * @return string + */ + public static function sc25519_sqmul($s, $n, $a) + { + for ($i = 0; $i < $n; ++$i) { + $s = self::sc25519_sq($s); + } + return self::sc25519_mul($s, $a); + } + + /** + * @param string $s + * @return string + */ + public static function sc25519_invert($s) + { + $_10 = self::sc25519_sq($s); + $_11 = self::sc25519_mul($s, $_10); + $_100 = self::sc25519_mul($s, $_11); + $_1000 = self::sc25519_sq($_100); + $_1010 = self::sc25519_mul($_10, $_1000); + $_1011 = self::sc25519_mul($s, $_1010); + $_10000 = self::sc25519_sq($_1000); + $_10110 = self::sc25519_sq($_1011); + $_100000 = self::sc25519_mul($_1010, $_10110); + $_100110 = self::sc25519_mul($_10000, $_10110); + $_1000000 = self::sc25519_sq($_100000); + $_1010000 = self::sc25519_mul($_10000, $_1000000); + $_1010011 = self::sc25519_mul($_11, $_1010000); + $_1100011 = self::sc25519_mul($_10000, $_1010011); + $_1100111 = self::sc25519_mul($_100, $_1100011); + $_1101011 = self::sc25519_mul($_100, $_1100111); + $_10010011 = self::sc25519_mul($_1000000, $_1010011); + $_10010111 = self::sc25519_mul($_100, $_10010011); + $_10111101 = self::sc25519_mul($_100110, $_10010111); + $_11010011 = self::sc25519_mul($_10110, $_10111101); + $_11100111 = self::sc25519_mul($_1010000, $_10010111); + $_11101011 = self::sc25519_mul($_100, $_11100111); + $_11110101 = self::sc25519_mul($_1010, $_11101011); + + $recip = self::sc25519_mul($_1011, $_11110101); + $recip = self::sc25519_sqmul($recip, 126, $_1010011); + $recip = self::sc25519_sqmul($recip, 9, $_10); + $recip = self::sc25519_mul($recip, $_11110101); + $recip = self::sc25519_sqmul($recip, 7, $_1100111); + $recip = self::sc25519_sqmul($recip, 9, $_11110101); + $recip = self::sc25519_sqmul($recip, 11, $_10111101); + $recip = self::sc25519_sqmul($recip, 8, $_11100111); + $recip = self::sc25519_sqmul($recip, 9, $_1101011); + $recip = self::sc25519_sqmul($recip, 6, $_1011); + $recip = self::sc25519_sqmul($recip, 14, $_10010011); + $recip = self::sc25519_sqmul($recip, 10, $_1100011); + $recip = self::sc25519_sqmul($recip, 9, $_10010111); + $recip = self::sc25519_sqmul($recip, 10, $_11110101); + $recip = self::sc25519_sqmul($recip, 8, $_11010011); + return self::sc25519_sqmul($recip, 8, $_11101011); + } + + /** + * @param string $s + * @return string + */ + public static function clamp($s) + { + $s_ = self::stringToIntArray($s); + $s_[0] &= 248; + $s_[31] |= 64; + $s_[31] &= 128; + return self::intArrayToString($s_); + } + + /** + * Ensure limbs are less than 28 bits long to prevent float promotion. + * + * This uses a constant-time conditional swap under the hood. + * + * @param ParagonIE_Sodium_Core_Curve25519_Fe $f + * @return ParagonIE_Sodium_Core_Curve25519_Fe + */ + public static function fe_normalize(ParagonIE_Sodium_Core_Curve25519_Fe $f) + { + $x = (PHP_INT_SIZE << 3) - 1; // 31 or 63 + + $g = self::fe_copy($f); + for ($i = 0; $i < 10; ++$i) { + $mask = -(($g[$i] >> $x) & 1); + + /* + * Get two candidate normalized values for $g[$i], depending on the sign of $g[$i]: + */ + $a = $g[$i] & 0x7ffffff; + $b = -((-$g[$i]) & 0x7ffffff); + + /* + * Return the appropriate candidate value, based on the sign of the original input: + * + * The following is equivalent to this ternary: + * + * $g[$i] = (($g[$i] >> $x) & 1) ? $a : $b; + * + * Except what's written doesn't contain timing leaks. + */ + $g[$i] = ($a ^ (($a ^ $b) & $mask)); + } + return $g; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php new file mode 100644 index 0000000..39bf897 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php @@ -0,0 +1,65 @@ +YplusX = $YplusX; + if ($YminusX === null) { + $YminusX = new ParagonIE_Sodium_Core_Curve25519_Fe(); + } + $this->YminusX = $YminusX; + if ($Z === null) { + $Z = new ParagonIE_Sodium_Core_Curve25519_Fe(); + } + $this->Z = $Z; + if ($T2d === null) { + $T2d = new ParagonIE_Sodium_Core_Curve25519_Fe(); + } + $this->T2d = $T2d; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Ed25519.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Ed25519.php new file mode 100644 index 0000000..f135b1c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Ed25519.php @@ -0,0 +1,551 @@ +X)) { + throw new SodiumException('Unexpected zero result'); + } + + # fe_1(one_minus_y); + # fe_sub(one_minus_y, one_minus_y, A.Y); + # fe_invert(one_minus_y, one_minus_y); + $one_minux_y = self::fe_invert( + self::fe_sub( + self::fe_1(), + $A->Y + ) + ); + + # fe_1(x); + # fe_add(x, x, A.Y); + # fe_mul(x, x, one_minus_y); + $x = self::fe_mul( + self::fe_add(self::fe_1(), $A->Y), + $one_minux_y + ); + + # fe_tobytes(curve25519_pk, x); + return self::fe_tobytes($x); + } + + /** + * @internal You should not use this directly from another application + * + * @param string $sk + * @return string + * @throws SodiumException + * @throws TypeError + */ + public static function sk_to_pk($sk) + { + return self::ge_p3_tobytes( + self::ge_scalarmult_base( + self::substr($sk, 0, 32) + ) + ); + } + + /** + * @internal You should not use this directly from another application + * + * @param string $message + * @param string $sk + * @return string + * @throws SodiumException + * @throws TypeError + */ + public static function sign($message, $sk) + { + /** @var string $signature */ + $signature = self::sign_detached($message, $sk); + return $signature . $message; + } + + /** + * @internal You should not use this directly from another application + * + * @param string $message A signed message + * @param string $pk Public key + * @return string Message (without signature) + * @throws SodiumException + * @throws TypeError + */ + public static function sign_open($message, $pk) + { + /** @var string $signature */ + $signature = self::substr($message, 0, 64); + + /** @var string $message */ + $message = self::substr($message, 64); + + if (self::verify_detached($signature, $message, $pk)) { + return $message; + } + throw new SodiumException('Invalid signature'); + } + + /** + * @internal You should not use this directly from another application + * + * @param string $message + * @param string $sk + * @return string + * @throws SodiumException + * @throws TypeError + */ + public static function sign_detached($message, $sk) + { + # crypto_hash_sha512(az, sk, 32); + $az = hash('sha512', self::substr($sk, 0, 32), true); + + # az[0] &= 248; + # az[31] &= 63; + # az[31] |= 64; + $az[0] = self::intToChr(self::chrToInt($az[0]) & 248); + $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64); + + # crypto_hash_sha512_init(&hs); + # crypto_hash_sha512_update(&hs, az + 32, 32); + # crypto_hash_sha512_update(&hs, m, mlen); + # crypto_hash_sha512_final(&hs, nonce); + $hs = hash_init('sha512'); + hash_update($hs, self::substr($az, 32, 32)); + hash_update($hs, $message); + $nonceHash = hash_final($hs, true); + + # memmove(sig + 32, sk + 32, 32); + $pk = self::substr($sk, 32, 32); + + # sc_reduce(nonce); + # ge_scalarmult_base(&R, nonce); + # ge_p3_tobytes(sig, &R); + $nonce = self::sc_reduce($nonceHash) . self::substr($nonceHash, 32); + $sig = self::ge_p3_tobytes( + self::ge_scalarmult_base($nonce) + ); + + # crypto_hash_sha512_init(&hs); + # crypto_hash_sha512_update(&hs, sig, 64); + # crypto_hash_sha512_update(&hs, m, mlen); + # crypto_hash_sha512_final(&hs, hram); + $hs = hash_init('sha512'); + hash_update($hs, self::substr($sig, 0, 32)); + hash_update($hs, self::substr($pk, 0, 32)); + hash_update($hs, $message); + $hramHash = hash_final($hs, true); + + # sc_reduce(hram); + # sc_muladd(sig + 32, hram, az, nonce); + $hram = self::sc_reduce($hramHash); + $sigAfter = self::sc_muladd($hram, $az, $nonce); + $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32); + + try { + ParagonIE_Sodium_Compat::memzero($az); + } catch (SodiumException $ex) { + $az = null; + } + return $sig; + } + + /** + * @internal You should not use this directly from another application + * + * @param string $sig + * @param string $message + * @param string $pk + * @return bool + * @throws SodiumException + * @throws TypeError + */ + public static function verify_detached($sig, $message, $pk) + { + if (self::strlen($sig) < 64) { + throw new SodiumException('Signature is too short'); + } + if ((self::chrToInt($sig[63]) & 240) && self::check_S_lt_L(self::substr($sig, 32, 32))) { + throw new SodiumException('S < L - Invalid signature'); + } + if (self::small_order($sig)) { + throw new SodiumException('Signature is on too small of an order'); + } + if ((self::chrToInt($sig[63]) & 224) !== 0) { + throw new SodiumException('Invalid signature'); + } + $d = 0; + for ($i = 0; $i < 32; ++$i) { + $d |= self::chrToInt($pk[$i]); + } + if ($d === 0) { + throw new SodiumException('All zero public key'); + } + + /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */ + $orig = ParagonIE_Sodium_Compat::$fastMult; + + // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification. + ParagonIE_Sodium_Compat::$fastMult = true; + + /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A */ + $A = self::ge_frombytes_negate_vartime($pk); + + /** @var string $hDigest */ + $hDigest = hash( + 'sha512', + self::substr($sig, 0, 32) . + self::substr($pk, 0, 32) . + $message, + true + ); + + /** @var string $h */ + $h = self::sc_reduce($hDigest) . self::substr($hDigest, 32); + + /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P2 $R */ + $R = self::ge_double_scalarmult_vartime( + $h, + $A, + self::substr($sig, 32) + ); + + /** @var string $rcheck */ + $rcheck = self::ge_tobytes($R); + + // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before. + ParagonIE_Sodium_Compat::$fastMult = $orig; + + return self::verify_32($rcheck, self::substr($sig, 0, 32)); + } + + /** + * @internal You should not use this directly from another application + * + * @param string $S + * @return bool + * @throws SodiumException + * @throws TypeError + */ + public static function check_S_lt_L($S) + { + if (self::strlen($S) < 32) { + throw new SodiumException('Signature must be 32 bytes'); + } + $L = array( + 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, + 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 + ); + $c = 0; + $n = 1; + $i = 32; + + /** @var array $L */ + do { + --$i; + $x = self::chrToInt($S[$i]); + $c |= ( + (($x - $L[$i]) >> 8) & $n + ); + $n &= ( + (($x ^ $L[$i]) - 1) >> 8 + ); + } while ($i !== 0); + + return $c === 0; + } + + /** + * @param string $R + * @return bool + * @throws SodiumException + * @throws TypeError + */ + public static function small_order($R) + { + /** @var array> $blocklist */ + $blocklist = array( + /* 0 (order 4) */ + array( + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ), + /* 1 (order 1) */ + array( + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 + ), + /* 2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ + array( + 0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, + 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, + 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, + 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05 + ), + /* 55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ + array( + 0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, + 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, + 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, + 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a + ), + /* p-1 (order 2) */ + array( + 0x13, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, + 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, + 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, + 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x85 + ), + /* p (order 4) */ + array( + 0xb4, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, + 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, + 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, + 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0xfa + ), + /* p+1 (order 1) */ + array( + 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f + ), + /* p+2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ + array( + 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f + ), + /* p+55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ + array( + 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f + ), + /* 2p-1 (order 2) */ + array( + 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + ), + /* 2p (order 4) */ + array( + 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + ), + /* 2p+1 (order 1) */ + array( + 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff + ) + ); + /** @var int $countBlocklist */ + $countBlocklist = count($blocklist); + + for ($i = 0; $i < $countBlocklist; ++$i) { + $c = 0; + for ($j = 0; $j < 32; ++$j) { + $c |= self::chrToInt($R[$j]) ^ (int) $blocklist[$i][$j]; + } + if ($c === 0) { + return true; + } + } + return false; + } + + /** + * @param string $s + * @return string + * @throws SodiumException + */ + public static function scalar_complement($s) + { + $t_ = self::L . str_repeat("\x00", 32); + sodium_increment($t_); + $s_ = $s . str_repeat("\x00", 32); + ParagonIE_Sodium_Compat::sub($t_, $s_); + return self::sc_reduce($t_); + } + + /** + * @return string + * @throws SodiumException + */ + public static function scalar_random() + { + do { + $r = ParagonIE_Sodium_Compat::randombytes_buf(self::SCALAR_BYTES); + $r[self::SCALAR_BYTES - 1] = self::intToChr( + self::chrToInt($r[self::SCALAR_BYTES - 1]) & 0x1f + ); + } while ( + !self::check_S_lt_L($r) || ParagonIE_Sodium_Compat::is_zero($r) + ); + return $r; + } + + /** + * @param string $s + * @return string + * @throws SodiumException + */ + public static function scalar_negate($s) + { + $t_ = self::L . str_repeat("\x00", 32) ; + $s_ = $s . str_repeat("\x00", 32) ; + ParagonIE_Sodium_Compat::sub($t_, $s_); + return self::sc_reduce($t_); + } + + /** + * @param string $a + * @param string $b + * @return string + * @throws SodiumException + */ + public static function scalar_add($a, $b) + { + $a_ = $a . str_repeat("\x00", 32); + $b_ = $b . str_repeat("\x00", 32); + ParagonIE_Sodium_Compat::add($a_, $b_); + return self::sc_reduce($a_); + } + + /** + * @param string $x + * @param string $y + * @return string + * @throws SodiumException + */ + public static function scalar_sub($x, $y) + { + $yn = self::scalar_negate($y); + return self::scalar_add($x, $yn); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305.php new file mode 100644 index 0000000..3301821 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305.php @@ -0,0 +1,63 @@ +update($m) + ->finish(); + } + + /** + * @internal You should not use this directly from another application + * + * @param string $mac + * @param string $m + * @param string $key + * @return bool + * @throws SodiumException + * @throws TypeError + */ + public static function onetimeauth_verify($mac, $m, $key) + { + if (self::strlen($key) < 32) { + throw new InvalidArgumentException( + 'Key must be 32 bytes long.' + ); + } + $state = new ParagonIE_Sodium_Core_Poly1305_State( + self::substr($key, 0, 32) + ); + $calc = $state + ->update($m) + ->finish(); + return self::verify_16($calc, $mac); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php new file mode 100644 index 0000000..4b64e04 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php @@ -0,0 +1,445 @@ + + */ + protected $buffer = array(); + + /** + * @var bool + */ + protected $final = false; + + /** + * @var array + */ + public $h; + + /** + * @var int + */ + protected $leftover = 0; + + /** + * @var int[] + */ + public $r; + + /** + * @var int[] + */ + public $pad; + + /** + * ParagonIE_Sodium_Core_Poly1305_State constructor. + * + * @internal You should not use this directly from another application + * + * @param string $key + * @throws InvalidArgumentException + * @throws TypeError + */ + public function __construct($key = '') + { + if (self::strlen($key) < 32) { + throw new InvalidArgumentException( + 'Poly1305 requires a 32-byte key' + ); + } + /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ + $this->r = array( + (int) ((self::load_4(self::substr($key, 0, 4))) & 0x3ffffff), + (int) ((self::load_4(self::substr($key, 3, 4)) >> 2) & 0x3ffff03), + (int) ((self::load_4(self::substr($key, 6, 4)) >> 4) & 0x3ffc0ff), + (int) ((self::load_4(self::substr($key, 9, 4)) >> 6) & 0x3f03fff), + (int) ((self::load_4(self::substr($key, 12, 4)) >> 8) & 0x00fffff) + ); + + /* h = 0 */ + $this->h = array(0, 0, 0, 0, 0); + + /* save pad for later */ + $this->pad = array( + self::load_4(self::substr($key, 16, 4)), + self::load_4(self::substr($key, 20, 4)), + self::load_4(self::substr($key, 24, 4)), + self::load_4(self::substr($key, 28, 4)), + ); + + $this->leftover = 0; + $this->final = false; + } + + /** + * Zero internal buffer upon destruction + */ + public function __destruct() + { + $this->r[0] ^= $this->r[0]; + $this->r[1] ^= $this->r[1]; + $this->r[2] ^= $this->r[2]; + $this->r[3] ^= $this->r[3]; + $this->r[4] ^= $this->r[4]; + $this->h[0] ^= $this->h[0]; + $this->h[1] ^= $this->h[1]; + $this->h[2] ^= $this->h[2]; + $this->h[3] ^= $this->h[3]; + $this->h[4] ^= $this->h[4]; + $this->pad[0] ^= $this->pad[0]; + $this->pad[1] ^= $this->pad[1]; + $this->pad[2] ^= $this->pad[2]; + $this->pad[3] ^= $this->pad[3]; + $this->leftover = 0; + $this->final = true; + } + + /** + * @internal You should not use this directly from another application + * + * @param string $message + * @return self + * @throws SodiumException + * @throws TypeError + */ + public function update($message = '') + { + $bytes = self::strlen($message); + if ($bytes < 1) { + return $this; + } + + /* handle leftover */ + if ($this->leftover) { + $want = ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - $this->leftover; + if ($want > $bytes) { + $want = $bytes; + } + for ($i = 0; $i < $want; ++$i) { + $mi = self::chrToInt($message[$i]); + $this->buffer[$this->leftover + $i] = $mi; + } + // We snip off the leftmost bytes. + $message = self::substr($message, $want); + $bytes = self::strlen($message); + $this->leftover += $want; + if ($this->leftover < ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { + // We still don't have enough to run $this->blocks() + return $this; + } + + $this->blocks( + self::intArrayToString($this->buffer), + ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE + ); + $this->leftover = 0; + } + + /* process full blocks */ + if ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { + /** @var int $want */ + $want = $bytes & ~(ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - 1); + if ($want >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { + $block = self::substr($message, 0, $want); + if (self::strlen($block) >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { + $this->blocks($block, $want); + $message = self::substr($message, $want); + $bytes = self::strlen($message); + } + } + } + + /* store leftover */ + if ($bytes) { + for ($i = 0; $i < $bytes; ++$i) { + $mi = self::chrToInt($message[$i]); + $this->buffer[$this->leftover + $i] = $mi; + } + $this->leftover = (int) $this->leftover + $bytes; + } + return $this; + } + + /** + * @internal You should not use this directly from another application + * + * @param string $message + * @param int $bytes + * @return self + * @throws TypeError + */ + public function blocks($message, $bytes) + { + if (self::strlen($message) < 16) { + $message = str_pad($message, 16, "\x00", STR_PAD_RIGHT); + } + /** @var int $hibit */ + $hibit = $this->final ? 0 : 1 << 24; /* 1 << 128 */ + $r0 = (int) $this->r[0]; + $r1 = (int) $this->r[1]; + $r2 = (int) $this->r[2]; + $r3 = (int) $this->r[3]; + $r4 = (int) $this->r[4]; + + $s1 = self::mul($r1, 5, 3); + $s2 = self::mul($r2, 5, 3); + $s3 = self::mul($r3, 5, 3); + $s4 = self::mul($r4, 5, 3); + + $h0 = $this->h[0]; + $h1 = $this->h[1]; + $h2 = $this->h[2]; + $h3 = $this->h[3]; + $h4 = $this->h[4]; + + while ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { + /* h += m[i] */ + $h0 += self::load_4(self::substr($message, 0, 4)) & 0x3ffffff; + $h1 += (self::load_4(self::substr($message, 3, 4)) >> 2) & 0x3ffffff; + $h2 += (self::load_4(self::substr($message, 6, 4)) >> 4) & 0x3ffffff; + $h3 += (self::load_4(self::substr($message, 9, 4)) >> 6) & 0x3ffffff; + $h4 += (self::load_4(self::substr($message, 12, 4)) >> 8) | $hibit; + + /* h *= r */ + $d0 = ( + self::mul($h0, $r0, 25) + + self::mul($s4, $h1, 26) + + self::mul($s3, $h2, 26) + + self::mul($s2, $h3, 26) + + self::mul($s1, $h4, 26) + ); + + $d1 = ( + self::mul($h0, $r1, 25) + + self::mul($h1, $r0, 25) + + self::mul($s4, $h2, 26) + + self::mul($s3, $h3, 26) + + self::mul($s2, $h4, 26) + ); + + $d2 = ( + self::mul($h0, $r2, 25) + + self::mul($h1, $r1, 25) + + self::mul($h2, $r0, 25) + + self::mul($s4, $h3, 26) + + self::mul($s3, $h4, 26) + ); + + $d3 = ( + self::mul($h0, $r3, 25) + + self::mul($h1, $r2, 25) + + self::mul($h2, $r1, 25) + + self::mul($h3, $r0, 25) + + self::mul($s4, $h4, 26) + ); + + $d4 = ( + self::mul($h0, $r4, 25) + + self::mul($h1, $r3, 25) + + self::mul($h2, $r2, 25) + + self::mul($h3, $r1, 25) + + self::mul($h4, $r0, 25) + ); + + /* (partial) h %= p */ + /** @var int $c */ + $c = $d0 >> 26; + /** @var int $h0 */ + $h0 = $d0 & 0x3ffffff; + $d1 += $c; + + /** @var int $c */ + $c = $d1 >> 26; + /** @var int $h1 */ + $h1 = $d1 & 0x3ffffff; + $d2 += $c; + + /** @var int $c */ + $c = $d2 >> 26; + /** @var int $h2 */ + $h2 = $d2 & 0x3ffffff; + $d3 += $c; + + /** @var int $c */ + $c = $d3 >> 26; + /** @var int $h3 */ + $h3 = $d3 & 0x3ffffff; + $d4 += $c; + + /** @var int $c */ + $c = $d4 >> 26; + /** @var int $h4 */ + $h4 = $d4 & 0x3ffffff; + $h0 += (int) self::mul($c, 5, 3); + + /** @var int $c */ + $c = $h0 >> 26; + /** @var int $h0 */ + $h0 &= 0x3ffffff; + $h1 += $c; + + // Chop off the left 32 bytes. + $message = self::substr( + $message, + ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE + ); + $bytes -= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE; + } + + $this->h = array( + (int) ($h0 & 0xffffffff), + (int) ($h1 & 0xffffffff), + (int) ($h2 & 0xffffffff), + (int) ($h3 & 0xffffffff), + (int) ($h4 & 0xffffffff) + ); + return $this; + } + + /** + * @internal You should not use this directly from another application + * + * @return string + * @throws TypeError + */ + public function finish() + { + /* process the remaining block */ + if ($this->leftover) { + $i = $this->leftover; + $this->buffer[$i++] = 1; + for (; $i < ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE; ++$i) { + $this->buffer[$i] = 0; + } + $this->final = true; + $this->blocks( + self::substr( + self::intArrayToString($this->buffer), + 0, + ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE + ), + ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE + ); + } + + $h0 = (int) $this->h[0]; + $h1 = (int) $this->h[1]; + $h2 = (int) $this->h[2]; + $h3 = (int) $this->h[3]; + $h4 = (int) $this->h[4]; + + /** @var int $c */ + $c = $h1 >> 26; + /** @var int $h1 */ + $h1 &= 0x3ffffff; + /** @var int $h2 */ + $h2 += $c; + /** @var int $c */ + $c = $h2 >> 26; + /** @var int $h2 */ + $h2 &= 0x3ffffff; + $h3 += $c; + /** @var int $c */ + $c = $h3 >> 26; + $h3 &= 0x3ffffff; + $h4 += $c; + /** @var int $c */ + $c = $h4 >> 26; + $h4 &= 0x3ffffff; + /** @var int $h0 */ + $h0 += self::mul($c, 5, 3); + /** @var int $c */ + $c = $h0 >> 26; + /** @var int $h0 */ + $h0 &= 0x3ffffff; + /** @var int $h1 */ + $h1 += $c; + + /* compute h + -p */ + /** @var int $g0 */ + $g0 = $h0 + 5; + /** @var int $c */ + $c = $g0 >> 26; + /** @var int $g0 */ + $g0 &= 0x3ffffff; + + /** @var int $g1 */ + $g1 = $h1 + $c; + /** @var int $c */ + $c = $g1 >> 26; + $g1 &= 0x3ffffff; + + /** @var int $g2 */ + $g2 = $h2 + $c; + /** @var int $c */ + $c = $g2 >> 26; + /** @var int $g2 */ + $g2 &= 0x3ffffff; + + /** @var int $g3 */ + $g3 = $h3 + $c; + /** @var int $c */ + $c = $g3 >> 26; + /** @var int $g3 */ + $g3 &= 0x3ffffff; + + /** @var int $g4 */ + $g4 = ($h4 + $c - (1 << 26)) & 0xffffffff; + + /* select h if h < p, or h + -p if h >= p */ + /** @var int $mask */ + $mask = ($g4 >> 31) - 1; + + $g0 &= $mask; + $g1 &= $mask; + $g2 &= $mask; + $g3 &= $mask; + $g4 &= $mask; + + /** @var int $mask */ + $mask = ~$mask & 0xffffffff; + /** @var int $h0 */ + $h0 = ($h0 & $mask) | $g0; + /** @var int $h1 */ + $h1 = ($h1 & $mask) | $g1; + /** @var int $h2 */ + $h2 = ($h2 & $mask) | $g2; + /** @var int $h3 */ + $h3 = ($h3 & $mask) | $g3; + /** @var int $h4 */ + $h4 = ($h4 & $mask) | $g4; + + /* h = h % (2^128) */ + /** @var int $h0 */ + $h0 = (($h0) | ($h1 << 26)) & 0xffffffff; + /** @var int $h1 */ + $h1 = (($h1 >> 6) | ($h2 << 20)) & 0xffffffff; + /** @var int $h2 */ + $h2 = (($h2 >> 12) | ($h3 << 14)) & 0xffffffff; + /** @var int $h3 */ + $h3 = (($h3 >> 18) | ($h4 << 8)) & 0xffffffff; + + /* mac = (h + pad) % (2^128) */ + $f = (int) ($h0 + $this->pad[0]); + $h0 = (int) $f; + $f = (int) ($h1 + $this->pad[1] + ($f >> 32)); + $h1 = (int) $f; + $f = (int) ($h2 + $this->pad[2] + ($f >> 32)); + $h2 = (int) $f; + $f = (int) ($h3 + $this->pad[3] + ($f >> 32)); + $h3 = (int) $f; + + return self::store32_le($h0 & 0xffffffff) . + self::store32_le($h1 & 0xffffffff) . + self::store32_le($h2 & 0xffffffff) . + self::store32_le($h3 & 0xffffffff); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php new file mode 100644 index 0000000..37b058f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php @@ -0,0 +1,130 @@ + + */ + protected $container; + + /** + * ParagonIE_Sodium_Core_ChaCha20_Ctx constructor. + * + * @internal You should not use this directly from another application + * + * @param string $key ChaCha20 key. + * @param string $iv Initialization Vector (a.k.a. nonce). + * @param string $counter The initial counter value. + * Defaults to 8 0x00 bytes. + * @throws InvalidArgumentException + * @throws SodiumException + * @throws TypeError + */ + public function __construct($key = '', $iv = '', $counter = '') + { + if (self::strlen($key) !== 32) { + throw new InvalidArgumentException('ChaCha20 expects a 256-bit key.'); + } + if (self::strlen($iv) !== 8) { + throw new InvalidArgumentException('ChaCha20 expects a 64-bit nonce.'); + } + $this->container = new SplFixedArray(16); + + /* "expand 32-byte k" as per ChaCha20 spec */ + $this->container[0] = new ParagonIE_Sodium_Core32_Int32(array(0x6170, 0x7865)); + $this->container[1] = new ParagonIE_Sodium_Core32_Int32(array(0x3320, 0x646e)); + $this->container[2] = new ParagonIE_Sodium_Core32_Int32(array(0x7962, 0x2d32)); + $this->container[3] = new ParagonIE_Sodium_Core32_Int32(array(0x6b20, 0x6574)); + + $this->container[4] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 0, 4)); + $this->container[5] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 4, 4)); + $this->container[6] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 8, 4)); + $this->container[7] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 12, 4)); + $this->container[8] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 16, 4)); + $this->container[9] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 20, 4)); + $this->container[10] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 24, 4)); + $this->container[11] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 28, 4)); + + if (empty($counter)) { + $this->container[12] = new ParagonIE_Sodium_Core32_Int32(); + $this->container[13] = new ParagonIE_Sodium_Core32_Int32(); + } else { + $this->container[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 0, 4)); + $this->container[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 4, 4)); + } + $this->container[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 0, 4)); + $this->container[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 4, 4)); + } + + /** + * @internal You should not use this directly from another application + * + * @param int $offset + * @param int|ParagonIE_Sodium_Core32_Int32 $value + * @return void + */ + #[ReturnTypeWillChange] + public function offsetSet($offset, $value) + { + if (!is_int($offset)) { + throw new InvalidArgumentException('Expected an integer'); + } + if ($value instanceof ParagonIE_Sodium_Core32_Int32) { + /* + } elseif (is_int($value)) { + $value = ParagonIE_Sodium_Core32_Int32::fromInt($value); + */ + } else { + throw new InvalidArgumentException('Expected an integer'); + } + $this->container[$offset] = $value; + } + + /** + * @internal You should not use this directly from another application + * + * @param int $offset + * @return bool + * @psalm-suppress MixedArrayOffset + */ + #[ReturnTypeWillChange] + public function offsetExists($offset) + { + return isset($this->container[$offset]); + } + + /** + * @internal You should not use this directly from another application + * + * @param int $offset + * @return void + * @psalm-suppress MixedArrayOffset + */ + #[ReturnTypeWillChange] + public function offsetUnset($offset) + { + unset($this->container[$offset]); + } + + /** + * @internal You should not use this directly from another application + * + * @param int $offset + * @return mixed|null + * @psalm-suppress MixedArrayOffset + */ + #[ReturnTypeWillChange] + public function offsetGet($offset) + { + return isset($this->container[$offset]) + ? $this->container[$offset] + : null; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php new file mode 100644 index 0000000..eea08de --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php @@ -0,0 +1,39 @@ +container[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 0, 4)); + } + $this->container[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 0, 4)); + $this->container[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 4, 4)); + $this->container[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 8, 4)); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php new file mode 100644 index 0000000..970481f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php @@ -0,0 +1,65 @@ +YplusX = $YplusX; + if ($YminusX === null) { + $YminusX = new ParagonIE_Sodium_Core32_Curve25519_Fe(); + } + $this->YminusX = $YminusX; + if ($Z === null) { + $Z = new ParagonIE_Sodium_Core32_Curve25519_Fe(); + } + $this->Z = $Z; + if ($T2d === null) { + $T2d = new ParagonIE_Sodium_Core32_Curve25519_Fe(); + } + $this->T2d = $T2d; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php new file mode 100644 index 0000000..c9e4b16 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php @@ -0,0 +1,65 @@ +X = $x; + if ($y === null) { + $y = new ParagonIE_Sodium_Core32_Curve25519_Fe(); + } + $this->Y = $y; + if ($z === null) { + $z = new ParagonIE_Sodium_Core32_Curve25519_Fe(); + } + $this->Z = $z; + if ($t === null) { + $t = new ParagonIE_Sodium_Core32_Curve25519_Fe(); + } + $this->T = $t; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/CHANGELOG.md new file mode 100644 index 0000000..fe2c7d4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/CHANGELOG.md @@ -0,0 +1,100 @@ +# Change Log + +## [5.3.0] - 2022-04-26 + +* Add support for Symfony 6 +* Split out `.mo` parsing to separate `MoParser` class +* Added `CacheInterface` so alternate cache implementations are pluggable +* Added `ApcuCache` implementation to leverage shared in-memory translation cache + +## [5.2.0] - 2021-02-05 + +* Fix "Translator::selectString() must be of the type integer, boolean returned" (#37) +* Fix "TypeError: StringReader::readintarray() ($count) must be of type int, float given" failing tests on ARM (#36) +* Add support for getting and setting all translations (#30) + +## [5.1.0] - 2020-11-15 + +* Allow PHPUnit 9 (#35) +* Fix some typos +* Sync config files +* Allow PHP 8.0 + +## [5.0.0] - 2020-02-28 + +* Drop support for PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6, PHP 7.0 and HHVM +* Enabled strict mode on PHP files +* Add support for Symfony 5 (#34) +* Add support for phpunit 8 +* Rename CHANGES.md to CHANGELOG.md and follow a standard format + +## [4.0] - 2018-02-12 + +* The library no longer changes system locales. + +## [3.4] - 2017-12-15 + +* Added Translator::setTranslation method. + +## [3.3] - 2017-06-01 + +* Add support for switching locales for Loader instance. + +## [3.2] - 2017-05-23 + +* Various fixes when handling corrupted mo files. + +## [3.1] - 2017-05-15 + +* Documentation improvements. + +## [3.0] - 2017-01-23 + +* All classes moved to the PhpMyAdmin namespace. + +## [2.2] - 2017-01-07 + +* Coding style cleanup. +* Avoid installing tests using composer. + +## [2.1] - 2016-12-21 + +* Various code cleanups. +* Added support for PHP 5.3. + +## [2.0] - 2016-10-13 + +* Consistently use camelCase in API. +* No more relies on using eval(). +* Depends on symfony/expression-language for calculations. + +## [1.2] - 2016-09-22 + +* Stricter validation of plural expression. + +## [1.1] - 2016-08-29 + +* Improved handling of corrupted mo files. +* Minor performance improvements. +* Stricter validation of plural expression. + +## [1.0] - 2016-04-27 + +* Documentation improvements. +* Testsuite improvements. + +## [0.4] - 2016-03-02 + +* Fixed test failures with hhvm due to broken putenv. + +## [0.3] - 2016-03-01 + +* Added Loader::detectlocale method. + +## [0.2] - 2016-02-24 + +* Marked PHP 5.4 and 5.5 as supported. + +## [0.1] - 2016-02-23 + +* Initial release. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Cache/ApcuCacheFactory.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Cache/ApcuCacheFactory.php new file mode 100644 index 0000000..e30540d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Cache/ApcuCacheFactory.php @@ -0,0 +1,29 @@ +ttl = $ttl; + $this->reloadOnMiss = $reloadOnMiss; + $this->prefix = $prefix; + } + + public function getInstance(MoParser $parser, string $locale, string $domain): CacheInterface + { + return new ApcuCache($parser, $locale, $domain, $this->ttl, $this->reloadOnMiss, $this->prefix); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/StringReader.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/StringReader.php new file mode 100644 index 0000000..a40a9f6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/StringReader.php @@ -0,0 +1,116 @@ +. + Copyright (c) 2016 Michal Čihař + + This file is part of MoTranslator. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +namespace PhpMyAdmin\MoTranslator; + +use function file_get_contents; +use function strlen; +use function substr; +use function unpack; + +use const PHP_INT_MAX; + +/** + * Simple wrapper around string buffer for + * random access and values parsing. + */ +class StringReader +{ + /** @var string */ + private $string; + /** @var int */ + private $length; + + /** + * @param string $filename Name of file to load + */ + public function __construct(string $filename) + { + $this->string = (string) file_get_contents($filename); + $this->length = strlen($this->string); + } + + /** + * Read number of bytes from given offset. + * + * @param int $pos Offset + * @param int $bytes Number of bytes to read + */ + public function read(int $pos, int $bytes): string + { + if ($pos + $bytes > $this->length) { + throw new ReaderException('Not enough bytes!'); + } + + $data = substr($this->string, $pos, $bytes); + + return $data === false ? '' : $data; + } + + /** + * Reads a 32bit integer from the stream. + * + * @param string $unpack Unpack string + * @param int $pos Position + * + * @return int Integer from the stream + */ + public function readint(string $unpack, int $pos): int + { + $data = unpack($unpack, $this->read($pos, 4)); + if ($data === false) { + return PHP_INT_MAX; + } + + $result = $data[1]; + + /* We're reading unsigned int, but PHP will happily + * give us negative number on 32-bit platforms. + * + * See also documentation: + * https://secure.php.net/manual/en/function.unpack.php#refsect1-function.unpack-notes + */ + return $result < 0 ? PHP_INT_MAX : $result; + } + + /** + * Reads an array of integers from the stream. + * + * @param string $unpack Unpack string + * @param int $pos Position + * @param int $count How many elements should be read + * + * @return int[] Array of Integers + */ + public function readintarray(string $unpack, int $pos, int $count): array + { + $data = unpack($unpack . $count, $this->read($pos, 4 * $count)); + if ($data === false) { + return []; + } + + return $data; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Translator.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Translator.php new file mode 100644 index 0000000..bb423cf --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Translator.php @@ -0,0 +1,388 @@ +. + Copyright (c) 2005 Nico Kaiser + Copyright (c) 2016 Michal Čihař + + This file is part of MoTranslator. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +namespace PhpMyAdmin\MoTranslator; + +use PhpMyAdmin\MoTranslator\Cache\CacheInterface; +use PhpMyAdmin\MoTranslator\Cache\GetAllInterface; +use PhpMyAdmin\MoTranslator\Cache\InMemoryCache; +use Symfony\Component\ExpressionLanguage\ExpressionLanguage; +use Throwable; + +use function chr; +use function count; +use function explode; +use function get_class; +use function implode; +use function intval; +use function ltrim; +use function preg_replace; +use function rtrim; +use function sprintf; +use function stripos; +use function strpos; +use function strtolower; +use function substr; +use function trim; + +/** + * Provides a simple gettext replacement that works independently from + * the system's gettext abilities. + * It can read MO files and use them for translating strings. + * + * It caches ll strings and translations to speed up the string lookup. + */ +class Translator +{ + /** + * None error. + */ + public const ERROR_NONE = 0; + /** + * File does not exist. + */ + public const ERROR_DOES_NOT_EXIST = 1; + /** + * File has bad magic number. + */ + public const ERROR_BAD_MAGIC = 2; + /** + * Error while reading file, probably too short. + */ + public const ERROR_READING = 3; + + /** + * Big endian mo file magic bytes. + */ + public const MAGIC_BE = "\x95\x04\x12\xde"; + /** + * Little endian mo file magic bytes. + */ + public const MAGIC_LE = "\xde\x12\x04\x95"; + + /** + * Parse error code (0 if no error). + * + * @var int + */ + public $error = self::ERROR_NONE; + + /** + * Cache header field for plural forms. + * + * @var string|null + */ + private $pluralEquation = null; + + /** @var ExpressionLanguage|null Evaluator for plurals */ + private $pluralExpression = null; + + /** @var int|null number of plurals */ + private $pluralCount = null; + + /** @var CacheInterface */ + private $cache; + + /** + * @param CacheInterface|string|null $cache Mo file to load (null for no file) or a CacheInterface implementation + */ + public function __construct($cache) + { + if (! $cache instanceof CacheInterface) { + $cache = new InMemoryCache(new MoParser($cache)); + } + + $this->cache = $cache; + } + + /** + * Translates a string. + * + * @param string $msgid String to be translated + * + * @return string translated string (or original, if not found) + */ + public function gettext(string $msgid): string + { + return $this->cache->get($msgid); + } + + /** + * Check if a string is translated. + * + * @param string $msgid String to be checked + */ + public function exists(string $msgid): bool + { + return $this->cache->has($msgid); + } + + /** + * Sanitize plural form expression for use in ExpressionLanguage. + * + * @param string $expr Expression to sanitize + * + * @return string sanitized plural form expression + */ + public static function sanitizePluralExpression(string $expr): string + { + // Parse equation + $expr = explode(';', $expr); + if (count($expr) >= 2) { + $expr = $expr[1]; + } else { + $expr = $expr[0]; + } + + $expr = trim(strtolower($expr)); + // Strip plural prefix + if (substr($expr, 0, 6) === 'plural') { + $expr = ltrim(substr($expr, 6)); + } + + // Strip equals + if (substr($expr, 0, 1) === '=') { + $expr = ltrim(substr($expr, 1)); + } + + // Cleanup from unwanted chars + $expr = preg_replace('@[^n0-9:\(\)\?=!<>/%&| ]@', '', $expr); + + return (string) $expr; + } + + /** + * Extracts number of plurals from plurals form expression. + * + * @param string $expr Expression to process + * + * @return int Total number of plurals + */ + public static function extractPluralCount(string $expr): int + { + $parts = explode(';', $expr, 2); + $nplurals = explode('=', trim($parts[0]), 2); + if (strtolower(rtrim($nplurals[0])) !== 'nplurals') { + return 1; + } + + if (count($nplurals) === 1) { + return 1; + } + + return intval($nplurals[1]); + } + + /** + * Parse full PO header and extract only plural forms line. + * + * @param string $header Gettext header + * + * @return string verbatim plural form header field + */ + public static function extractPluralsForms(string $header): string + { + $headers = explode("\n", $header); + $expr = 'nplurals=2; plural=n == 1 ? 0 : 1;'; + foreach ($headers as $header) { + if (stripos($header, 'Plural-Forms:') !== 0) { + continue; + } + + $expr = substr($header, 13); + } + + return $expr; + } + + /** + * Get possible plural forms from MO header. + * + * @return string plural form header + */ + private function getPluralForms(): string + { + // lets assume message number 0 is header + // this is true, right? + + // cache header field for plural forms + if ($this->pluralEquation === null) { + $header = $this->cache->get(''); + + $expr = $this->extractPluralsForms($header); + $this->pluralEquation = $this->sanitizePluralExpression($expr); + $this->pluralCount = $this->extractPluralCount($expr); + } + + return $this->pluralEquation; + } + + /** + * Detects which plural form to take. + * + * @param int $n count of objects + * + * @return int array index of the right plural form + */ + private function selectString(int $n): int + { + if ($this->pluralExpression === null) { + $this->pluralExpression = new ExpressionLanguage(); + } + + try { + $plural = (int) $this->pluralExpression->evaluate( + $this->getPluralForms(), + ['n' => $n] + ); + } catch (Throwable $e) { + $plural = 0; + } + + if ($plural >= $this->pluralCount) { + $plural = $this->pluralCount - 1; + } + + return $plural; + } + + /** + * Plural version of gettext. + * + * @param string $msgid Single form + * @param string $msgidPlural Plural form + * @param int $number Number of objects + * + * @return string translated plural form + */ + public function ngettext(string $msgid, string $msgidPlural, int $number): string + { + // this should contains all strings separated by NULLs + $key = implode(chr(0), [$msgid, $msgidPlural]); + if (! $this->cache->has($key)) { + return $number !== 1 ? $msgidPlural : $msgid; + } + + $result = $this->cache->get($key); + + // find out the appropriate form + $select = $this->selectString($number); + + $list = explode(chr(0), $result); + // @codeCoverageIgnoreStart + if ($list === false) { + // This was added in 3ff2c63bcf85f81b3a205ce7222de11b33e2bf56 for phpstan + // But according to the php manual it should never happen + return ''; + } + + // @codeCoverageIgnoreEnd + + if (! isset($list[$select])) { + return $list[0]; + } + + return $list[$select]; + } + + /** + * Translate with context. + * + * @param string $msgctxt Context + * @param string $msgid String to be translated + * + * @return string translated plural form + */ + public function pgettext(string $msgctxt, string $msgid): string + { + $key = implode(chr(4), [$msgctxt, $msgid]); + $ret = $this->gettext($key); + if (strpos($ret, chr(4)) !== false) { + return $msgid; + } + + return $ret; + } + + /** + * Plural version of pgettext. + * + * @param string $msgctxt Context + * @param string $msgid Single form + * @param string $msgidPlural Plural form + * @param int $number Number of objects + * + * @return string translated plural form + */ + public function npgettext(string $msgctxt, string $msgid, string $msgidPlural, int $number): string + { + $key = implode(chr(4), [$msgctxt, $msgid]); + $ret = $this->ngettext($key, $msgidPlural, $number); + if (strpos($ret, chr(4)) !== false) { + return $msgid; + } + + return $ret; + } + + /** + * Set translation in place + * + * @param string $msgid String to be set + * @param string $msgstr Translation + */ + public function setTranslation(string $msgid, string $msgstr): void + { + $this->cache->set($msgid, $msgstr); + } + + /** + * Set the translations + * + * @param array $translations The translations "key => value" array + */ + public function setTranslations(array $translations): void + { + $this->cache->setAll($translations); + } + + /** + * Get the translations + * + * @return array The translations "key => value" array + */ + public function getTranslations(): array + { + if ($this->cache instanceof GetAllInterface) { + return $this->cache->getAll(); + } + + throw new CacheException(sprintf( + "Cache '%s' does not support getting translations", + get_class($this->cache) + )); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/functions.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/functions.php new file mode 100644 index 0000000..6f96952 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/functions.php @@ -0,0 +1,200 @@ + + Copyright (c) 2009 Danilo Segan + Copyright (c) 2016 Michal Čihař + + This file is part of MoTranslator. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +use PhpMyAdmin\MoTranslator\Loader; + +/** + * Sets a requested locale. + * + * @param int $category Locale category, ignored + * @param string $locale Locale name + * + * @return string Set or current locale + */ +function _setlocale(int $category, string $locale): string +{ + return Loader::getInstance()->setlocale($locale); +} + +/** + * Sets the path for a domain. + * + * @param string $domain Domain name + * @param string $path Path where to find locales + */ +function _bindtextdomain(string $domain, string $path): void +{ + Loader::getInstance()->bindtextdomain($domain, $path); +} + +/** + * Dummy compatibility function, MoTranslator assumes + * everything is using same character set on input and + * output. + * + * Generally it is wise to output in UTF-8 and have + * mo files in UTF-8. + * + * @param string $domain Domain where to set character set + * @param string $codeset Character set to set + */ +function _bind_textdomain_codeset($domain, $codeset): void +{ +} + +/** + * Sets the default domain. + * + * @param string $domain Domain name + */ +function _textdomain(string $domain): void +{ + Loader::getInstance()->textdomain($domain); +} + +/** + * Translates a string. + * + * @param string $msgid String to be translated + * + * @return string translated string (or original, if not found) + */ +function _gettext(string $msgid): string +{ + return Loader::getInstance()->getTranslator()->gettext($msgid); +} + +/** + * Translates a string, alias for _gettext. + * + * @param string $msgid String to be translated + * + * @return string translated string (or original, if not found) + */ +function __(string $msgid): string +{ + return Loader::getInstance()->getTranslator()->gettext($msgid); +} + +/** + * Plural version of gettext. + * + * @param string $msgid Single form + * @param string $msgidPlural Plural form + * @param int $number Number of objects + * + * @return string translated plural form + */ +function _ngettext(string $msgid, string $msgidPlural, int $number): string +{ + return Loader::getInstance()->getTranslator()->ngettext($msgid, $msgidPlural, $number); +} + +/** + * Translate with context. + * + * @param string $msgctxt Context + * @param string $msgid String to be translated + * + * @return string translated plural form + */ +function _pgettext(string $msgctxt, string $msgid): string +{ + return Loader::getInstance()->getTranslator()->pgettext($msgctxt, $msgid); +} + +/** + * Plural version of pgettext. + * + * @param string $msgctxt Context + * @param string $msgid Single form + * @param string $msgidPlural Plural form + * @param int $number Number of objects + * + * @return string translated plural form + */ +function _npgettext(string $msgctxt, string $msgid, string $msgidPlural, int $number): string +{ + return Loader::getInstance()->getTranslator()->npgettext($msgctxt, $msgid, $msgidPlural, $number); +} + +/** + * Translates a string. + * + * @param string $domain Domain to use + * @param string $msgid String to be translated + * + * @return string translated string (or original, if not found) + */ +function _dgettext(string $domain, string $msgid): string +{ + return Loader::getInstance()->getTranslator($domain)->gettext($msgid); +} + +/** + * Plural version of gettext. + * + * @param string $domain Domain to use + * @param string $msgid Single form + * @param string $msgidPlural Plural form + * @param int $number Number of objects + * + * @return string translated plural form + */ +function _dngettext(string $domain, string $msgid, string $msgidPlural, int $number): string +{ + return Loader::getInstance()->getTranslator($domain)->ngettext($msgid, $msgidPlural, $number); +} + +/** + * Translate with context. + * + * @param string $domain Domain to use + * @param string $msgctxt Context + * @param string $msgid String to be translated + * + * @return string translated plural form + */ +function _dpgettext(string $domain, string $msgctxt, string $msgid): string +{ + return Loader::getInstance()->getTranslator($domain)->pgettext($msgctxt, $msgid); +} + +/** + * Plural version of pgettext. + * + * @param string $domain Domain to use + * @param string $msgctxt Context + * @param string $msgid Single form + * @param string $msgidPlural Plural form + * @param int $number Number of objects + * + * @return string translated plural form + */ +function _dnpgettext(string $domain, string $msgctxt, string $msgid, string $msgidPlural, int $number): string +{ + return Loader::getInstance()->getTranslator($domain)->npgettext($msgctxt, $msgid, $msgidPlural, $number); +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/CHANGELOG.md new file mode 100644 index 0000000..3cea1f8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/CHANGELOG.md @@ -0,0 +1,131 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). + +## [3.0.1] - 2021-02-05 +### Fixed +- Fix method signature of ShapeFile::getDBFHeader() + +## [3.0.0] - 2021-02-05 +### Added +- Support for PHPUnit 8 and 9 +- Support PHP 8 + +### Changed +- Enable strict mode on PHP files +- Rename ShapeFile::$FileName property to ShapeFile::$fileName +- Rename ShapeRecord::$SHPData property to ShapeRecord::$shpData +- Rename ShapeRecord::$DBFData property to ShapeRecord::$dbfData +- ShapeRecord::getContentLength returns `null` when the shape type is not supported instead of `false`. + +### Removed +- Drop support for PHP 5.4, PHP 5.5, PHP 5.6, PHP 7.0 and HHVM + +## [2.1] - 2017-05-15 +### Changed +- Documentation improvements. + +## [2.0] - 2017-01-23 +### Changed +- Switched to PhpMyAdmin vendor namespace to follow PSR-4. + +## [1.2] - 2017-01-07 +### Added +- PHP 7.2 support. + +### Changed +- Coding style cleanup. +- Avoid installing tests and test data using composer. + +## [1.1] - 2016-11-21 +### Fixed +- Fixed adjusting of record bounding box + +## [1.0] - 2016-11-21 +### Changed +- Documentation improvements +- Code cleanups + +## [0.13] - 2016-11-21 +### Changed +- Code cleanups +- Improved test coverage + +## [0.12] - 2016-11-17 +### Changed +- Improved test coverage + +### Fixed +- Fixed DBF search + +## [0.11] - 2016-11-16 +### Changed +- Code cleanups + +### Fixed +- Fixed behavior without configured DBF header +- Fixed saving Polygon/Polyline creation with multiple parts +- Fixed saving Multipont records + +## [0.10] - 2016-09-05 +### Changed +- Improved error handling on loading + +## [0.9] - 2016-08-04 +### Changed +- Code cleanups + +## [0.8] - 2016-06-24 +### Changed +- Code cleanups + +### Fixed +- Fixed loading of records with optional data + +## [0.7] - 2016-06-24 +### Fixed +- Properly fail on loading corrupted files + +## [0.6] - 2016-06-24 +### Fixed +- Fixed detection of end of file when loading + +## [0.5] - 2016-06-24 +### Added +- Added getShapeName method to ShapeFile + +## [0.4] - 2016-06-24 +### Changed +- Make API work even without real file open + +## [0.3] - 2016-06-24 +### Added +- Better support for subclassing + +## [0.2] - 2016-06-24 +### Changed +- Make the dbase extension optional dependency + +## 0.1 - 2016-06-14 +### Added +- Inital release based on bfShapeFiles + +[Unreleased]: https://github.com/phpmyadmin/shapefile/compare/2.1...HEAD +[2.1]: https://github.com/phpmyadmin/shapefile/compare/2.0...2.1 +[2.0]: https://github.com/phpmyadmin/shapefile/compare/1.2...2.0 +[1.2]: https://github.com/phpmyadmin/shapefile/compare/1.1...1.2 +[1.1]: https://github.com/phpmyadmin/shapefile/compare/1.0...1.1 +[1.0]: https://github.com/phpmyadmin/shapefile/compare/0.13...1.0 +[0.13]: https://github.com/phpmyadmin/shapefile/compare/0.12...0.13 +[0.12]: https://github.com/phpmyadmin/shapefile/compare/0.11...0.12 +[0.11]: https://github.com/phpmyadmin/shapefile/compare/0.10...0.11 +[0.10]: https://github.com/phpmyadmin/shapefile/compare/0.9...0.10 +[0.9]: https://github.com/phpmyadmin/shapefile/compare/0.8...0.9 +[0.8]: https://github.com/phpmyadmin/shapefile/compare/0.7...0.8 +[0.7]: https://github.com/phpmyadmin/shapefile/compare/0.6...0.7 +[0.6]: https://github.com/phpmyadmin/shapefile/compare/0.5...0.6 +[0.5]: https://github.com/phpmyadmin/shapefile/compare/0.4...0.5 +[0.4]: https://github.com/phpmyadmin/shapefile/compare/0.3...0.4 +[0.3]: https://github.com/phpmyadmin/shapefile/compare/0.2...0.3 +[0.2]: https://github.com/phpmyadmin/shapefile/compare/0.1...0.2 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/README.md b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/README.md new file mode 100644 index 0000000..20d1806 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/README.md @@ -0,0 +1,57 @@ +# shapefile +ShapeFile library for PHP + +![Test-suite](https://github.com/phpmyadmin/shapefile/workflows/Run%20tests/badge.svg?branch=master) +[![codecov.io](https://codecov.io/github/phpmyadmin/shapefile/coverage.svg?branch=master)](https://codecov.io/github/phpmyadmin/shapefile?branch=master) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/phpmyadmin/shapefile/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/phpmyadmin/shapefile/?branch=master) +[![Packagist](https://img.shields.io/packagist/dt/phpmyadmin/shapefile.svg)](https://packagist.org/packages/phpmyadmin/shapefile) + +## Features + +Currently the 2D and 3D variants except MultiPatch of the ShapeFile format as +defined in https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf. The +library currently supports reading and editing of ShapeFiles and the Associated +information (DBF file). There are a lot of things that can be improved in the +code, if you are interested in developing, helping with the documentation, +making translations or offering new ideas please contact us. + +## Installation + +Please use [Composer][1] to install: + +```sh +composer require phpmyadmin/shapefile +``` + +To be able to read and write the associated DBF file, you need ``dbase`` +extension: + +```sh +pecl install dbase +echo "extension=dbase.so" > /etc/php7/conf.d/dbase.ini +``` + +## Documentation + +The API documentation is available at +. + +## Usage + +To read shape file: + +```php +$shp = new \PhpMyAdmin\ShapeFile\ShapeFile(0); +$shp->loadFromFile('path/file.*'); +``` + +## History + +This library is based on BytesFall ShapeFiles library written by Ovidio (ovidio +AT users.sourceforge.net). The library has been embedded in phpMyAdmin for +years and slowly developed there. At one point people started to use our +version rather than the original library and that was the point we decided to +make it separate package. + +[1]:https://getcomposer.org/ + diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/src/ShapeRecord.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/src/ShapeRecord.php new file mode 100644 index 0000000..473b1c2 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/src/ShapeRecord.php @@ -0,0 +1,900 @@ +. + * + * Copyright 2006-2007 Ovidio + * Copyright 2016 - 2017 Michal Čihař + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you can download one from + * https://www.gnu.org/copyleft/gpl.html. + */ + +namespace PhpMyAdmin\ShapeFile; + +use function array_values; +use function count; +use function fwrite; +use function in_array; +use function is_array; +use function pack; +use function sprintf; +use function strlen; + +/** + * ShapeFile record class. + */ +class ShapeRecord +{ + /** @var resource */ + private $shpFile = null; + /** @var resource */ + private $dbfFile = null; + /** @var ShapeFile */ + private $shapeFile = null; + + /** @var int */ + private $size = 0; + /** @var int */ + private $read = 0; + + /** @var int|null */ + public $recordNumber = null; + + /** @var int */ + public $shapeType = null; + + /** @var string */ + public $lastError = ''; + + /** @var array */ + public $shpData = []; + /** @var array */ + public $dbfData = []; + + public function __construct(int $shapeType) + { + $this->shapeType = $shapeType; + } + + /** + * Loads record from files. + * + * @param ShapeFile $shapeFile The ShapeFile object + * @param resource $shpFile Opened SHP file (by reference) + * @param resource $dbfFile Opened DBF file (by reference) + */ + public function loadFromFile(ShapeFile &$shapeFile, &$shpFile, &$dbfFile): void + { + $this->shapeFile = $shapeFile; + $this->shpFile = $shpFile; + $this->dbfFile = $dbfFile; + $this->loadHeaders(); + + /* No header read */ + if ($this->read === 0) { + return; + } + + switch ($this->shapeType) { + case 0: + $this->loadNullRecord(); + break; + case 1: + $this->loadPointRecord(); + break; + case 21: + $this->loadPointMRecord(); + break; + case 11: + $this->loadPointZRecord(); + break; + case 3: + $this->loadPolyLineRecord(); + break; + case 23: + $this->loadPolyLineMRecord(); + break; + case 13: + $this->loadPolyLineZRecord(); + break; + case 5: + $this->loadPolygonRecord(); + break; + case 25: + $this->loadPolygonMRecord(); + break; + case 15: + $this->loadPolygonZRecord(); + break; + case 8: + $this->loadMultiPointRecord(); + break; + case 28: + $this->loadMultiPointMRecord(); + break; + case 18: + $this->loadMultiPointZRecord(); + break; + default: + $this->setError(sprintf('The Shape Type "%s" is not supported.', $this->shapeType)); + break; + } + + /* We need to skip rest of the record */ + while ($this->read < $this->size) { + $this->loadData('V', 4); + } + + /* Check if we didn't read too much */ + if ($this->read !== $this->size) { + $this->setError(sprintf('Failed to parse record, read=%d, size=%d', $this->read, $this->size)); + } + + if (! ShapeFile::supportsDbase() || ! isset($this->dbfFile)) { + return; + } + + $this->loadDBFData(); + } + + /** + * Saves record to files. + * + * @param resource $shpFile Opened SHP file + * @param resource $dbfFile Opened DBF file + * @param int $recordNumber Record number + */ + public function saveToFile(&$shpFile, &$dbfFile, int $recordNumber): void + { + $this->shpFile = $shpFile; + $this->dbfFile = $dbfFile; + $this->recordNumber = $recordNumber; + $this->saveHeaders(); + + switch ($this->shapeType) { + case 0: + // Nothing to save + break; + case 1: + $this->savePointRecord(); + break; + case 21: + $this->savePointMRecord(); + break; + case 11: + $this->savePointZRecord(); + break; + case 3: + $this->savePolyLineRecord(); + break; + case 23: + $this->savePolyLineMRecord(); + break; + case 13: + $this->savePolyLineZRecord(); + break; + case 5: + $this->savePolygonRecord(); + break; + case 25: + $this->savePolygonMRecord(); + break; + case 15: + $this->savePolygonZRecord(); + break; + case 8: + $this->saveMultiPointRecord(); + break; + case 28: + $this->saveMultiPointMRecord(); + break; + case 18: + $this->saveMultiPointZRecord(); + break; + default: + $this->setError(sprintf('The Shape Type "%s" is not supported.', $this->shapeType)); + break; + } + + if (! ShapeFile::supportsDbase() || $this->dbfFile === null) { + return; + } + + $this->saveDBFData(); + } + + /** + * Updates DBF data to match header. + * + * @param array $header DBF structure header + */ + public function updateDBFInfo(array $header): void + { + $tmp = $this->dbfData; + unset($this->dbfData); + $this->dbfData = []; + foreach ($header as $value) { + $this->dbfData[$value[0]] = $tmp[$value[0]] ?? ''; + } + } + + /** + * Reads data. + * + * @param string $type type for unpack() + * @param int $count number of bytes + * + * @return mixed + */ + private function loadData(string $type, int $count) + { + $data = $this->shapeFile->readSHP($count); + if ($data === false) { + return false; + } + + $this->read += strlen($data); + + return Util::loadData($type, $data); + } + + /** + * Loads metadata header from a file. + */ + private function loadHeaders(): void + { + $this->shapeType = false; + $this->recordNumber = $this->loadData('N', 4); + if ($this->recordNumber === false) { + return; + } + + // We read the length of the record + $this->size = $this->loadData('N', 4); + if ($this->size === false) { + return; + } + + $this->size = ($this->size * 2) + 8; + $this->shapeType = $this->loadData('V', 4); + } + + /** + * Saves metadata header to a file. + */ + private function saveHeaders(): void + { + fwrite($this->shpFile, pack('N', $this->recordNumber)); + fwrite($this->shpFile, pack('N', $this->getContentLength())); + fwrite($this->shpFile, pack('V', $this->shapeType)); + } + + private function loadPoint(): array + { + $data = []; + + $data['x'] = $this->loadData('d', 8); + $data['y'] = $this->loadData('d', 8); + + return $data; + } + + private function loadPointM(): array + { + $data = $this->loadPoint(); + + $data['m'] = $this->loadData('d', 8); + + return $data; + } + + private function loadPointZ(): array + { + $data = $this->loadPoint(); + + $data['z'] = $this->loadData('d', 8); + $data['m'] = $this->loadData('d', 8); + + return $data; + } + + private function savePoint(array $data): void + { + fwrite($this->shpFile, Util::packDouble($data['x'])); + fwrite($this->shpFile, Util::packDouble($data['y'])); + } + + private function savePointM(array $data): void + { + fwrite($this->shpFile, Util::packDouble($data['x'])); + fwrite($this->shpFile, Util::packDouble($data['y'])); + fwrite($this->shpFile, Util::packDouble($data['m'])); + } + + private function savePointZ(array $data): void + { + fwrite($this->shpFile, Util::packDouble($data['x'])); + fwrite($this->shpFile, Util::packDouble($data['y'])); + fwrite($this->shpFile, Util::packDouble($data['z'])); + fwrite($this->shpFile, Util::packDouble($data['m'])); + } + + private function loadNullRecord(): void + { + $this->shpData = []; + } + + private function loadPointRecord(): void + { + $this->shpData = $this->loadPoint(); + } + + private function loadPointMRecord(): void + { + $this->shpData = $this->loadPointM(); + } + + private function loadPointZRecord(): void + { + $this->shpData = $this->loadPointZ(); + } + + private function savePointRecord(): void + { + $this->savePoint($this->shpData); + } + + private function savePointMRecord(): void + { + $this->savePointM($this->shpData); + } + + private function savePointZRecord(): void + { + $this->savePointZ($this->shpData); + } + + private function loadBBox(): void + { + $this->shpData['xmin'] = $this->loadData('d', 8); + $this->shpData['ymin'] = $this->loadData('d', 8); + $this->shpData['xmax'] = $this->loadData('d', 8); + $this->shpData['ymax'] = $this->loadData('d', 8); + } + + private function loadMultiPointRecord(): void + { + $this->shpData = []; + $this->loadBBox(); + + $this->shpData['numpoints'] = $this->loadData('V', 4); + + for ($i = 0; $i < $this->shpData['numpoints']; ++$i) { + $this->shpData['points'][] = $this->loadPoint(); + } + } + + private function loadMultiPointMZRecord(string $type): void + { + /* The m dimension is optional, depends on bounding box data */ + if ($type === 'm' && ! $this->shapeFile->hasMeasure()) { + return; + } + + $this->shpData[$type . 'min'] = $this->loadData('d', 8); + $this->shpData[$type . 'max'] = $this->loadData('d', 8); + + for ($i = 0; $i < $this->shpData['numpoints']; ++$i) { + $this->shpData['points'][$i][$type] = $this->loadData('d', 8); + } + } + + private function loadMultiPointMRecord(): void + { + $this->loadMultiPointRecord(); + + $this->loadMultiPointMZRecord('m'); + } + + private function loadMultiPointZRecord(): void + { + $this->loadMultiPointRecord(); + + $this->loadMultiPointMZRecord('z'); + $this->loadMultiPointMZRecord('m'); + } + + private function saveMultiPointRecord(): void + { + fwrite($this->shpFile, pack( + 'dddd', + $this->shpData['xmin'], + $this->shpData['ymin'], + $this->shpData['xmax'], + $this->shpData['ymax'] + )); + + fwrite($this->shpFile, pack('V', $this->shpData['numpoints'])); + + for ($i = 0; $i < $this->shpData['numpoints']; ++$i) { + $this->savePoint($this->shpData['points'][$i]); + } + } + + private function saveMultiPointMZRecord(string $type): void + { + fwrite($this->shpFile, pack('dd', $this->shpData[$type . 'min'], $this->shpData[$type . 'max'])); + + for ($i = 0; $i < $this->shpData['numpoints']; ++$i) { + fwrite($this->shpFile, Util::packDouble($this->shpData['points'][$i][$type])); + } + } + + private function saveMultiPointMRecord(): void + { + $this->saveMultiPointRecord(); + + $this->saveMultiPointMZRecord('m'); + } + + private function saveMultiPointZRecord(): void + { + $this->saveMultiPointRecord(); + + $this->saveMultiPointMZRecord('z'); + $this->saveMultiPointMZRecord('m'); + } + + private function loadPolyLineRecord(): void + { + $this->shpData = []; + $this->loadBBox(); + + $this->shpData['numparts'] = $this->loadData('V', 4); + $this->shpData['numpoints'] = $this->loadData('V', 4); + + $numparts = $this->shpData['numparts']; + $numpoints = $this->shpData['numpoints']; + + for ($i = 0; $i < $numparts; ++$i) { + $this->shpData['parts'][$i] = $this->loadData('V', 4); + } + + $part = 0; + for ($i = 0; $i < $numpoints; ++$i) { + if ($part + 1 < $numparts && $i === $this->shpData['parts'][$part + 1]) { + ++$part; + } + + if (! isset($this->shpData['parts'][$part]['points']) + || ! is_array($this->shpData['parts'][$part]['points']) + ) { + $this->shpData['parts'][$part] = ['points' => []]; + } + + $this->shpData['parts'][$part]['points'][] = $this->loadPoint(); + } + } + + private function loadPolyLineMZRecord(string $type): void + { + /* The m dimension is optional, depends on bounding box data */ + if ($type === 'm' && ! $this->shapeFile->hasMeasure()) { + return; + } + + $this->shpData[$type . 'min'] = $this->loadData('d', 8); + $this->shpData[$type . 'max'] = $this->loadData('d', 8); + + $numparts = $this->shpData['numparts']; + $numpoints = $this->shpData['numpoints']; + + $part = 0; + for ($i = 0; $i < $numpoints; ++$i) { + if ($part + 1 < $numparts && $i === $this->shpData['parts'][$part + 1]) { + ++$part; + } + + $this->shpData['parts'][$part]['points'][$i][$type] = $this->loadData('d', 8); + } + } + + private function loadPolyLineMRecord(): void + { + $this->loadPolyLineRecord(); + + $this->loadPolyLineMZRecord('m'); + } + + private function loadPolyLineZRecord(): void + { + $this->loadPolyLineRecord(); + + $this->loadPolyLineMZRecord('z'); + $this->loadPolyLineMZRecord('m'); + } + + private function savePolyLineRecord(): void + { + fwrite($this->shpFile, pack( + 'dddd', + $this->shpData['xmin'], + $this->shpData['ymin'], + $this->shpData['xmax'], + $this->shpData['ymax'] + )); + + fwrite($this->shpFile, pack('VV', $this->shpData['numparts'], $this->shpData['numpoints'])); + + $partIndex = 0; + for ($i = 0; $i < $this->shpData['numparts']; ++$i) { + fwrite($this->shpFile, pack('V', $partIndex)); + $partIndex += count($this->shpData['parts'][$i]['points']); + } + + foreach ($this->shpData['parts'] as $partData) { + foreach ($partData['points'] as $pointData) { + $this->savePoint($pointData); + } + } + } + + private function savePolyLineMZRecord(string $type): void + { + fwrite($this->shpFile, pack('dd', $this->shpData[$type . 'min'], $this->shpData[$type . 'max'])); + + foreach ($this->shpData['parts'] as $partData) { + foreach ($partData['points'] as $pointData) { + fwrite($this->shpFile, Util::packDouble($pointData[$type])); + } + } + } + + private function savePolyLineMRecord(): void + { + $this->savePolyLineRecord(); + + $this->savePolyLineMZRecord('m'); + } + + private function savePolyLineZRecord(): void + { + $this->savePolyLineRecord(); + + $this->savePolyLineMZRecord('z'); + $this->savePolyLineMZRecord('m'); + } + + private function loadPolygonRecord(): void + { + $this->loadPolyLineRecord(); + } + + private function loadPolygonMRecord(): void + { + $this->loadPolyLineMRecord(); + } + + private function loadPolygonZRecord(): void + { + $this->loadPolyLineZRecord(); + } + + private function savePolygonRecord(): void + { + $this->savePolyLineRecord(); + } + + private function savePolygonMRecord(): void + { + $this->savePolyLineMRecord(); + } + + private function savePolygonZRecord(): void + { + $this->savePolyLineZRecord(); + } + + private function adjustBBox(array $point): void + { + // Adjusts bounding box based on point + $directions = [ + 'x', + 'y', + 'z', + 'm', + ]; + foreach ($directions as $direction) { + if (! isset($point[$direction])) { + continue; + } + + $min = $direction . 'min'; + $max = $direction . 'max'; + if (! isset($this->shpData[$min]) || ($this->shpData[$min] > $point[$direction])) { + $this->shpData[$min] = $point[$direction]; + } + + if (isset($this->shpData[$max]) && ($this->shpData[$max] >= $point[$direction])) { + continue; + } + + $this->shpData[$max] = $point[$direction]; + } + } + + /** + * Sets dimension to 0 if not set. + * + * @param array $point Point to check + * @param string $dimension Dimension to check + * + * @return array + */ + private function fixPoint(array $point, string $dimension): array + { + if (! isset($point[$dimension])) { + $point[$dimension] = 0.0; // no_value + } + + return $point; + } + + /** + * Adjust point and bounding box when adding point. + * + * @param array $point Point data + * + * @return array Fixed point data + */ + private function adjustPoint(array $point): array + { + $type = $this->shapeType / 10; + if ($type >= 2) { + $point = $this->fixPoint($point, 'm'); + } elseif ($type >= 1) { + $point = $this->fixPoint($point, 'z'); + $point = $this->fixPoint($point, 'm'); + } + + return $point; + } + + /** + * Adds point to a record. + * + * @param array $point Point data + * @param int $partIndex Part index + */ + public function addPoint(array $point, int $partIndex = 0): void + { + $point = $this->adjustPoint($point); + switch ($this->shapeType) { + case 0: + //Don't add anything + return; + case 1: + case 11: + case 21: + //Substitutes the value of the current point + $this->shpData = $point; + break; + case 3: + case 5: + case 13: + case 15: + case 23: + case 25: + //Adds a new point to the selected part + $this->shpData['parts'][$partIndex]['points'][] = $point; + $this->shpData['numparts'] = count($this->shpData['parts']); + $this->shpData['numpoints'] = 1 + ($this->shpData['numpoints'] ?? 0); + break; + case 8: + case 18: + case 28: + //Adds a new point + $this->shpData['points'][] = $point; + $this->shpData['numpoints'] = 1 + ($this->shpData['numpoints'] ?? 0); + break; + default: + $this->setError(sprintf('The Shape Type "%s" is not supported.', $this->shapeType)); + + return; + } + + $this->adjustBBox($point); + } + + /** + * Deletes point from a record. + * + * @param int $pointIndex Point index + * @param int $partIndex Part index + */ + public function deletePoint(int $pointIndex = 0, int $partIndex = 0): void + { + switch ($this->shapeType) { + case 0: + //Don't delete anything + break; + case 1: + case 11: + case 21: + //Sets the value of the point to zero + $this->shpData['x'] = 0.0; + $this->shpData['y'] = 0.0; + if (in_array($this->shapeType, [11, 21])) { + $this->shpData['m'] = 0.0; + } + + if (in_array($this->shapeType, [11])) { + $this->shpData['z'] = 0.0; + } + + break; + case 3: + case 5: + case 13: + case 15: + case 23: + case 25: + //Deletes the point from the selected part, if exists + if (isset($this->shpData['parts'][$partIndex]) + && isset($this->shpData['parts'][$partIndex]['points'][$pointIndex]) + ) { + $count = count($this->shpData['parts'][$partIndex]['points']) - 1; + for ($i = $pointIndex; $i < $count; ++$i) { + $point = $this->shpData['parts'][$partIndex]['points'][$i + 1]; + $this->shpData['parts'][$partIndex]['points'][$i] = $point; + } + + $count = count($this->shpData['parts'][$partIndex]['points']) - 1; + unset($this->shpData['parts'][$partIndex]['points'][$count]); + + $this->shpData['numparts'] = count($this->shpData['parts']); + --$this->shpData['numpoints']; + } + + break; + case 8: + case 18: + case 28: + //Deletes the point, if exists + if (isset($this->shpData['points'][$pointIndex])) { + $count = count($this->shpData['points']) - 1; + for ($i = $pointIndex; $i < $count; ++$i) { + $this->shpData['points'][$i] = $this->shpData['points'][$i + 1]; + } + + unset($this->shpData['points'][count($this->shpData['points']) - 1]); + + --$this->shpData['numpoints']; + } + + break; + default: + $this->setError(sprintf('The Shape Type "%s" is not supported.', $this->shapeType)); + break; + } + } + + /** + * Returns length of content. + */ + public function getContentLength(): ?int + { + // The content length for a record is the length of the record contents section measured in 16-bit words. + // one coordinate makes 4 16-bit words (64 bit double) + switch ($this->shapeType) { + case 0: + $result = 0; + break; + case 1: + $result = 10; + break; + case 21: + $result = 10 + 4; + break; + case 11: + $result = 10 + 8; + break; + case 3: + case 5: + $count = count($this->shpData['parts']); + $result = 22 + 2 * $count; + for ($i = 0; $i < $count; ++$i) { + $result += 8 * count($this->shpData['parts'][$i]['points']); + } + + break; + case 23: + case 25: + $count = count($this->shpData['parts']); + $result = 22 + (2 * 4) + 2 * $count; + for ($i = 0; $i < $count; ++$i) { + $result += (8 + 4) * count($this->shpData['parts'][$i]['points']); + } + + break; + case 13: + case 15: + $count = count($this->shpData['parts']); + $result = 22 + (4 * 4) + 2 * $count; + for ($i = 0; $i < $count; ++$i) { + $result += (8 + 8) * count($this->shpData['parts'][$i]['points']); + } + + break; + case 8: + $result = 20 + 8 * count($this->shpData['points']); + break; + case 28: + $result = 20 + (2 * 4) + (8 + 4) * count($this->shpData['points']); + break; + case 18: + $result = 20 + (4 * 4) + (8 + 8) * count($this->shpData['points']); + break; + default: + $result = null; + $this->setError(sprintf('The Shape Type "%s" is not supported.', $this->shapeType)); + break; + } + + return $result; + } + + private function loadDBFData(): void + { + $this->dbfData = @dbase_get_record_with_names($this->dbfFile, $this->recordNumber); + unset($this->dbfData['deleted']); + } + + private function saveDBFData(): void + { + if (count($this->dbfData) === 0) { + return; + } + + unset($this->dbfData['deleted']); + if ($this->recordNumber <= dbase_numrecords($this->dbfFile)) { + if (! dbase_replace_record($this->dbfFile, array_values($this->dbfData), $this->recordNumber)) { + $this->setError('I wasn\'t possible to update the information in the DBF file.'); + } + } else { + if (! dbase_add_record($this->dbfFile, array_values($this->dbfData))) { + $this->setError('I wasn\'t possible to add the information to the DBF file.'); + } + } + } + + /** + * Sets error message. + */ + public function setError(string $error): void + { + $this->lastError = $error; + } + + /** + * Returns shape name. + */ + public function getShapeName(): string + { + return Util::nameShape($this->shapeType); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/LICENSE.txt b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/LICENSE.txt new file mode 100644 index 0000000..d159169 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/LICENSE.txt @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/README.md b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/README.md new file mode 100644 index 0000000..ddf1627 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/README.md @@ -0,0 +1,137 @@ +# SQL Parser + +A validating SQL lexer and parser with a focus on MySQL dialect. + +## Code status + +![Tests](https://github.com/phpmyadmin/sql-parser/workflows/Run%20tests/badge.svg?branch=master) +[![Code Coverage](https://scrutinizer-ci.com/g/phpmyadmin/sql-parser/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/phpmyadmin/sql-parser/?branch=master) +[![codecov.io](https://codecov.io/github/phpmyadmin/sql-parser/coverage.svg?branch=master)](https://codecov.io/github/phpmyadmin/sql-parser?branch=master) +[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/phpmyadmin/sql-parser/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/phpmyadmin/sql-parser/?branch=master) +[![Translation status](https://hosted.weblate.org/widgets/phpmyadmin/-/svg-badge.svg)](https://hosted.weblate.org/engage/phpmyadmin/?utm_source=widget) +[![Packagist](https://img.shields.io/packagist/dt/phpmyadmin/sql-parser.svg)](https://packagist.org/packages/phpmyadmin/sql-parser) +[![Open Source Helpers](https://www.codetriage.com/phpmyadmin/sql-parser/badges/users.svg)](https://www.codetriage.com/phpmyadmin/sql-parser) +[![Type coverage](https://shepherd.dev/github/phpmyadmin/sql-parser/coverage.svg)](https://shepherd.dev/github/phpmyadmin/sql-parser) +[![Infection MSI](https://badge.stryker-mutator.io/github.com/phpmyadmin/sql-parser/master)](https://infection.github.io) + +## Installation + +Please use [Composer][1] to install: + +```sh +composer require phpmyadmin/sql-parser +``` + +## Documentation + +The API documentation is available at +. + +## Usage + +### Command line utilities + +Command line utility to syntax highlight SQL query: + +```sh +./vendor/bin/highlight-query --query "SELECT 1" +``` + +Command line utility to lint SQL query: + +```sh +./vendor/bin/lint-query --query "SELECT 1" +``` + +Command line utility to tokenize SQL query: + +```sh +./vendor/bin/tokenize-query --query "SELECT 1" +``` + +All commands are able to parse input from stdin (standard in), such as: + +```sh +echo "SELECT 1" | ./vendor/bin/highlight-query +cat example.sql | ./vendor/bin/lint-query +``` + +### Formatting SQL query + +```php +echo PhpMyAdmin\SqlParser\Utils\Formatter::format($query, ['type' => 'html']); +``` + +### Discoverying query type + +```php +use PhpMyAdmin\SqlParser\Parser; +use PhpMyAdmin\SqlParser\Utils\Query; + +$query = 'OPTIMIZE TABLE tbl'; +$parser = new Parser($query); +$flags = Query::getFlags($parser->statements[0]); + +echo $flags['querytype']; +``` + +### Parsing and building SQL query + +```php +require __DIR__ . '/vendor/autoload.php'; + +$query1 = 'select * from a'; +$parser = new PhpMyAdmin\SqlParser\Parser($query1); + +// inspect query +var_dump($parser->statements[0]); // outputs object(PhpMyAdmin\SqlParser\Statements\SelectStatement) + +// modify query by replacing table a with table b +$table2 = new \PhpMyAdmin\SqlParser\Components\Expression('', 'b', '', ''); +$parser->statements[0]->from[0] = $table2; + +// build query again from an array of object(PhpMyAdmin\SqlParser\Statements\SelectStatement) to a string +$statement = $parser->statements[0]; +$query2 = $statement->build(); +var_dump($query2); // outputs string(19) 'SELECT * FROM `b` ' + +// Change SQL mode +PhpMyAdmin\SqlParser\Context::setMode('ANSI_QUOTES'); + +// build the query again using different quotes +$query2 = $statement->build(); +var_dump($query2); // outputs string(19) 'SELECT * FROM "b" ' +``` + +## Localization + +You can localize error messages installing `phpmyadmin/motranslator` version `5.0` or newer: + +```sh +composer require phpmyadmin/motranslator:^5.0 +``` + +The locale is automatically detected from your environment, you can also set a different locale + +**From cli**: + +```sh +LC_ALL=pl ./vendor/bin/lint-query --query "SELECT 1" +``` + +**From php**: + +```php +require __DIR__ . '/vendor/autoload.php'; + +$GLOBALS['lang'] = 'pl'; + +$query1 = 'select * from a'; +$parser = new PhpMyAdmin\SqlParser\Parser($query1); +``` + +## More information + +This library was originally created during the Google Summer of Code 2015 and has been used by phpMyAdmin since version 4.5. + +[1]:https://getcomposer.org/ diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/az/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/az/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..0b4ee08b3b381e4df30d0ff7557475125901d44d GIT binary patch literal 3420 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 CGG?Oy literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/bn/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/bn/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..980c2851e29679604973a67db0bdad161fb277ab GIT binary patch literal 1093 zcmZuuPfyf99Ib+h*`x93;pYt_vnvJ@Qoy*#q9j`&u=p=tX6dk7)6SI6tjJ9<%7GXU z1UyLef?YyXj0d8Lfv?~vF!LS!0=~8q5@VCs{^mDt-n{qguXDYd4xV1%0x$xc0UiR` z69aW%2^a(pf%Cv`VDpsYoCSWOes|h&Ht}v<1b9cpRvXCM8AL@dB*_*`fs% zMI7`+m559`F{BoW=U4GClTxurxCxXjJ5$O~5XE7Bzwl{An6fjIs7GSKut}fY5s3!T zr7k&1T^&JIKb7&87Rb>MZl7 z*?5(1PrKgaoisMYBW;ws+08_)$#G!+T7fAP-Uyb zTY@zNk51f-w2g_iTdA~_Ho`A2izcK*StYGXT%^zyIF43$=D4DlLKgExi=@(&l@nQ) znzH0gdbN|l1LZ5Fn@Sq|7uHyb5yFTkrV@udki)dl&Q#3kd}D$Qo$#_Oiy~n)xuAUf z43~zQfho;|orH&MLM4%QNyhn7k6s<7q8#m$ba9jhE)AFNv0FlBzbBi=-69SRmaml@ zo4&T`rcK}5^oVS_YttRueTD*ykLYFZ?(?jh@9)|4(54$U-M8rv)L^}_-8GxO#k(IX z@Ni%a6?FfKqJq>adV99JYSS;a`zmjtThzGoX+cK^yw5i6=A`{XYtweub8{QmENp$s zoovHATDzdxbj^O)asJ8h!lqwyC3u1JOdPEu2JXhGgCguf9vdx$&sZ;uWT-G5_{pMf z<+~tk7qy9XVFX*b&2_X90Gw~Rt$bd`NAh{^fbso!z{d)I00YbB A@Bjb+ literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/cy/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/cy/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..4b29a261edcd87c0f24f249dc30a853704d96ec7 GIT binary patch literal 544 zcmYL`&raMh5XPz6Q;t3NFb58;S|?5*XzL~I3d$m+U6s=9pQ}lxiL1o6Y%gWsfhz~z z2VSE`o`dm%*pWWjKY2W!`TYO&tLrU_7o<0&ZPH892U3g?>7EWh(i(G~GFrg*Z!@scd2~=FXK0NJZ0=jtu!Cjm*}@12PHNxFV4R=W&JHWt3`(aOLvs3+ zo#BOwrPvo4P(Z=+lI5J`CFHr_yYG3yc`}neu*Gv70drM%vWMF%)ycaX*dNwBsR>K9qe}@STC}yGd^IG{=;)>3{&IU%sx)%vrUiLK<}c<>Q%NW zD4<>?^OO0}#)LfO$)V8!HFdeNG)BP7kl9`;JqGHO{0Y^M#gvUUd2yOQ=-832O`~)x zV05m?l78uA&!)x=UVyf1^wr)N9=Fw7T~+)Yd2AhvzpR2!gMGzXcb;_rNE>gAbSEPl1u-!AWolly zKM6YU82A%V_I(Q!zwcJ_?}1P8{%`P8;1eGVg2Uj~z@y-ID*O?+#QU4zY4B}O;(X*o z<@hrAY2G)$kAW7H_(!1l@j57e{TloP_*d{t;Jcv2^IuTbKmOs;zXmArehd8lfgtFD zE#8lOr2O7ig*U+lbI zK;hvI_*L-lpv3>^N6Yms@M+%HKpFo5coh5v_*w8ScoO_4DBn8-DYD;_;4$!<;0bUW zJPy7AJ_FtbTj0Tum-bJCl9%s+!dnVH3H})T9QaF6fqw+W|93&z|3B6IQ5MPg1yJ(w zeeekQLl9ag59R?9c;83%5uXblK*=96DE4K$B9Ed8$+!3*kN7ChWBj0^__hKc;zz0` zk8mV9lpINX!X?r!9??Ja7msK{9^sgyRd6cjM6`{B3a*4tj#03{57`uY434ZEj?|8h zhbC9MCNs+1Oik!bbW(MOUUl6tiPVwR!%;K1pq8$$ZEjt^vazIYn9;7wBDJgY$qKOu zW0%{cr#hJqZy3LS-VFv?xlHN*Ynqr{m3!^Yz$E2Hg)^mJiBpk@?ZA4IsgCix#w5ym zrSaDHjY>1KW8E-UE-~U)W)eLx%B3dL-nwL;WBF*%aj`0_>On2C_`Y*WHqK49W1IzS>-!FBJ2138bl&9Rpx2$)?EgGdiPEuUm%3MT!{cb< zQJJt}nndDUeve=i<+|N`e|8v8O;S%^*Tu2hC5q07C}fH2PSi4+`u&UN9QGJXcn1UKbrHXFybWC4NI-e(kpf@jvm0yawyWm+t4N5*oGc<(WF`uqL;)k zO#CQi!!D;(BV)ygh?+uSBV`k{K8(F>l#Xl zY*MIhmhPHK*w@q(j{3~P$U$Pws>;~K3ma>-9MvtVsx`BUDu(-{brLL*)OPjmhDl^3 zGokAx_LiLKSjx_%n9R*a+UtV9x$)Z9YkN%uRxNo&XZC)z;9BNhgS5trQR5Yp$9D z@w{3&yYTJC3lKqvaamivS_Y$5n-ChAorPe7?wU&n>d+&`jhEt-pHz%GN)9K|XM1<5 zhFh~&!$gzjSkqXiZMa$A5) zhBhK%l2XVbd2PsI36v5pl6#gKY3pO52Hf?#)yk|y5_ zu2m!Xm+_;aii?TNiyU+L z+WVc{0jC`wKWE+KXiVje3wXe1=!FtBbML_7g_i~uh&~0x~ z*^0XW*I+1b1{XPKCb39Zp%qkSZ<%+OxS*;4!mgE1tZi=ER6p+20>PFEF{s&KyIzs>e literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/he/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/he/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..49d04c87013192379b1bc21853d957dce99f0041 GIT binary patch literal 6153 zcmb`KU2Ggz6~`x#1TeHfp@l$cZ`>rco9y}{sYo^-t(!Pas6T?^1gJn_ynAgA*`3+U z&c-qDP$VQC`hZiflelplCs?iRCnTZ@iiCK82Of~%rPCKG(KjRn0*Qw{mEXBDJ3C&l zlOQpY^PhX~Ip>~_|2eaH?~$!@7SDeE9_R1w7R!1O9QY{z@Jw#CtY<(6+zHmeC&9Pk z{dd3t)?2n&mI8;sFM}SK2VVuh1pX6z3T)dR>1V;mSPy|ufEpCNAA?^2m%t<7FF^(V z2iylf_OVF+IQTi%d9VYV0_C11P~!MCcmRAC6uE~!ZdrT4o#5xeQ(y-C4!8?^6?_`} zd5rIZ?X0a&Sk^({DNyq8ZBX`q0zL|^fu9C{3rc?e6rcY)UO(Cv$$u4mg!7j{@uvhz z9)ARW7Q7991^fjl@&6eV`+ox^o)1CE&*Pu8tPi%}6WGtX_aVzV16~FXgMR=|gWDdq ztO7U;N*?cm65qeT*TEe)-6{LvdGI~(Iq=!fM0u)$;?F|7ejAiL{T1}V?Ku54a2k~R zeg{4eK1`63=V9;#@DeC~{t6WR55eQ$E|S2jH3>>Se*j8+i{LTvZBXj-0Vr`jP0?1X%>E`YniTcG&;dr)}xcTn_q zU`*^Dim?ES+)rbC3*5{4FCb+xkLb&u=*iO)fwdJB-zBg0NA4Eh$|G@X=kJTM;DNeU zH-DtS^vX6+9_bg#VEj;^Jd(>U{yxRu4*tYHCHPkXSghHlfw20v-V7T=WdEpUWK?kdiKgtt5yL)yO)Fr!E)fF|ReXaE6vd#y( zuuqLu12yhd-GbWPyQ`43`c(T!|LD1qp|kDkf}Wo8{DPXYD~X0ku+k!7uJXpmD;q1!ep$O|3XFTjqBlh*#-_=H zsCeTE<5F>%3!9aj91c`b+Z8Ohx}MX59(P=)MNRwNg1BK)te`pkUUyr6O!NkkvR1M; zH3_pSWjn7sDxK7F+@m!T#$~OSV*a;}4!1YitsmKe(y)G$aEIfdm zL+_SNY^Yg zNVBz46faZxE89N3o3+llWWtO?I56S3hS=*Xni9!R+KfGlw@$I(k@A#OOp2yFw~!bZ zKK|0WN^CS@L{ju>A>rjOY-S`L;_0j7t#uAF=gAzTP4Y|wI6P zUNeW+ofhoCHl=IQO5L8amBbgToVR^vvuSz8_r6EHGN%if^V*lel~bqmm=85O%9G{6 z>AphAaXZ^ablLNR%wT20DP&%#PE<0ZUQV^086M3X_qF*%WKPf*In~?U+nwp&pXuGN zdV6xu9@@*g8^O#7Ul_R{mitzJ-$-U~ICG*;of^&!p5FWN@KAr-0MjZnDvesS1JBQ? zljjBo)KK4GzdF)C*mrv1`Mwh;M*7d5J%*?|QMD&@W>njy#OouIK~S#by1FL43SZ^y zlpe#9&U*etS2+r{(nVyYXhUFD+fxQCUHnPGkO+~~>7!G@fKGOqnhznk}DzUI`yF(+s{Q>^-SF>})M zOO>2*%Vt?Qdf>2%UXOOT>gZ9`)2W_Q-72R#qIIvVd*bym)zhu^>`|`TEpLc-%W*Hq z`#U=iw|z77qITu`EqVM#lm~Sn+np)sOKnzI3+KZ*70!f<;as@F;-(50qTO&!J^%$3 z-r?Ye9PJaq*HyTL^c%d+#lLY9^_nuO^Wj>^Yr_um^DNgCFUuTWQ}4gB82>DK|CO7n zgZ*paRfJZ;T4&Zu3>tr8A5-RT7%uEg^0}$pYPe7rmc&R_R-yu~Qm(~tRYHo2$Ste93R`%+!m*Jx z*WED(vr+L)awOM_p^5)GaV*La=7?fmb$mBf>P=m{&K;D#QP@_JLeDrcGn9xb$WOfv zRPn1*Lc&NCgJhn})N6as+_W$o*53I|%Jc)eg;@PU(@L?gS4hc~aOK`c65iZfOuFQD zcpag8_jEJm7s=KfUfe;SyezYzL8HYSi8I;6reV`;RCPm_WGwt2uWW=UM3F!?&XNUu zye3|Xz-x5TioB+%CqA#GEXAT`(4~fm&{+l>b3hE#CxI;F$5O*UE5gYfGrisri&D06 zSV?;4>KPU1h5NYP%EYEYCj&Ini%00_a5OzqeKSySL!sNWzf zE0h9-RMXwSO-5gRjK(9l20_UovK{h!@Ii)1#H3Y>rHIk0t~D7La$tg$QOE5yJbr*7 zl<3Z*#>i`-yUeEW0lrjkKRRgz~mePJ{UU~2iB0o9t<%HJ{W@!EnS@u0=b3YYaoZ@lvDhF-Sf2{#3|_g zZB@T|{XVPaZ;#ynhKKPup6}y1_XW>uf*W7NABQSkWvp7$;AH24_!EXeBu{5E(8yac`h68LBE4ES%5_0t2M_jT|JxD2+z?}2x~ zC&9PCZ-5_zC&9mfPl5j#bMZ@_w}kmMknLCF`J3Q3G5-)e4*m)J8u)kc2jIUzw(rE3 zYq@2RR6wIn3{Ztnb)YJnt0fg9N?;vixn(2Y&-{Ts{I%gMS^*@B3=)$7A4ku>Lg2 za@RrLw+)^L-vZgcPe6|MKR}Mle?gAR@rPooO>Ru z^F;NZ=fSjUaGZG$LRjUR>*E+6wvTo5KpLvCh`;kmjMjh#fQfi7E30Uj;lG02LB9mJ(TC!c4)FP2&Qke-C8GXnw zJ4!l6Q6)9+)S|bhNvH^Z&M!mf{PN^;YE(z8dW}eC(%K`wrpa`>_HcNxo=QC*zphcr z3}r~25kkgWOm~{D{jop1`GCQWloS>kw4}hOJkf|@H`37&0a@1}oAGLHoFvr9LGRbc zRWi#$!<()R`$&sTMIe{$DP*T>P*>A*HM|$c#k17DzH}g}TZUXFv=zbBsJYmp95R$< z!`m{Bq9j#SZ6G=$=^9=ed9SnFt!e;e6S>iW4^%>^ta(8vI!YcPXH@uq$VDi!w6ZoZ zx~rnVAy|>?(-OyRiS2@j8>J|}E~;MSw*J_hW2wk2`*l-K+7DstMY^g5?3(t$K9Qg= z&}Qg>eXF5CEantB6HCo2nG8%%M+M>~6!*=v8xFh;g%g#*2iC_;e_(ZL+jz?@kwsNN z5A{;Rdnq&9I9>c}p?^ze+!`%<`6nAx`Jd7Gg&Q(8ne#VoFADu<^PctFrd5}O63%4y zO4?78kqDDWH?(vMFJ1RaVWQ%K6s$3#ZRwENr0i{Wh0Y zrKd%k5yGeF?ysZ1xc6JSlvML80j60aFv&C6qID)7nGZoY~p5uPVRxu-VU>GsP|H=L?(HHrHptSZSPHc+O~t+V$Hg z8Tc-5yJo6Hq%RUD9B07go9(Oqg_#_C)s>mQt^>nu+oB7d2%%AVCX|2GWQlE&POGWC zyn2!9e=loVyi6+>7k=tLFEt;GCTr0vwKKHZSUI~;Uk~MO=E~hz#xyX>iI}7slsnl# zoIzJtmjgMW${p1guH0*QbJs+!0&5E~5RQ0@%XQrFeun?bJ&HvdSYxTErrT2CbejpS z_eM0p@mbt^9S0sJ5>G8U+fmEo=)t@4!)?l)u;qKM+(E<5EUL^zD+Rc#*m5Oo0YfP+ zKPYg#mAjTifmiol=a2Df`GG?dRa$qPmIGNpD5B)v`-7R8wSX<6q*Lzkaa!&UYJ(QX zTh(l7qOD$vO;+x7I;f=t&Ql_LwYdXP%f(SwZdV_jczC_KF!n`gYZO&p91+H`OQLY> z&Okc&HO=Bw2~zPtbj(t*A$uImPN&L&v4t`zOy+FwWCl606D!x2i&OP=G0s#Jmb)Cg ziNFi>9#!tm=X#CCy0Bj5!8x);xmTxRIhLp9rK@WrKC-g5WKz{A%>s;H2|7eg80h4y zr4Vrtag}bCyFIF_0?yzkP`Sso!zoxpHSp!Zo^kdk)~^wk(CbyL9r+@I(rDkF^#T{S zl6}sB1*%sFO@jLTeKT$wZLy0SH73#R?Ionl?wXc zO=wil6m0J;f4x4!yw4pV)P_80wHjx?ZmQKNt qq}&V5q`4-IaD<$|?NJ+j#LIEkIQ)k`Ff)C!9abub`r4asqt5_xUQe6= literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ksh/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ksh/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..ed9b5602adfd273b33748669cfa74eb1a7009a9e GIT binary patch literal 498 zcmYLF%TB{E5Cp*~N6sAfzzv)@1*Fz(pyDYcDoQDjtJ^GzA+asn0s0~Q3tz*xu%S}B z(#W&ghj-?8XZw4DVw12-*duHa4hU^@2|rZq(cAW{V(iQt&I7y2*%Laij27^4e+yPR zj}DHb30mU<8~H-z?5rs~n;HSZN$o2cjPpZV+Ik`LTIpD0h{ktpf*-0~#V%w(0Ue$m zv6M63f%I7L-ahYe9^FbG*mSi=z_@WHFC`3YGpp3_6K8RbC)B5lMi$7XC~E=drZRIl}AEHa%eVMGc3ZOh1-Ha~R`qP+4=SBzA zbl}30f`DHkv6WQ15A(9MCS;G(E7o22wL)Ieu}eKSxzdGz?o5#zRpVsEu8ga_0B!$M spB?sLNi&^g98Q4)RkJK5niB2wqZf9K8eQwLfaj$)NMrIb$B$^^4+2V-wg3PC literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/mk/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/mk/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..96866cc57aa5a75bbbbbedabca0f932c3748b3f3 GIT binary patch literal 507 zcmYLF%TC)s6ir1}Ub1F!7qEh{Jw}nz2?oTgLLw@Uv~)YMFZK}6Lo*X75}(j*7ko~o z_BZ-1y-p-@rK7o5b06oNf14kF4JbYkwg}sV4Z^6wiQ=w*FeQR&ml z>O&ea%|bTFrYJQH$O>y~lr(VA#^{2`vet%(b^44mVuz{qP3Be-L$)TGX*!NR)AMY- zRe+u+lgr8Z+6kWK$*DCF4N-k@q$T2yn7K|WGX|ndCdKmW^n#7neZ8ay^z7VJwpOMQ zFq$dyrCWH}u?y>U5MbQ03}rEfRa%;|w`-}#C@3w&Zl`<&O KA*=Bz8T<$FLYt`o literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ne/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ne/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..b9eadb09de0712da4f5e89c830b5f48791e0fae0 GIT binary patch literal 486 zcmYLF%TB{E5Cp*~N6s7;i5obNqDaMUQ3bRJspT0SSCcG>QDR%R3-lkja^N5M4EPPc zg$>Fhr?9nm8jwCO;+Oj1NzNhKg_AMVXm74`l8C2 zD3N6-8V+Y@L@l9Td2bw#qDniDMfidbqzprC%g8M3xo9aeYG^UqNMW>Op;QQ0FqvC&rVRGZG+`-w=e>oFl7Zk2P?lAwUy-n literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/nl/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/nl/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..929858c4c133d05f0a4682f3e00967dbc9a6a838 GIT binary patch literal 5255 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 KRK)HD0{#z43J3E5 literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/pl/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/pl/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..76f0a7200c3b2a33c0a11ce587109d683591470b GIT binary patch literal 4884 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 T#5X*Xwzpdmq>WL@ot*Pu>IRs# literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/sq/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/sq/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..0ba3ae6ca98a227337f7d77c427613ce139a2c6e GIT binary patch literal 4385 zcma)8ON<;>6)lr5!zYl0n18MZJ85HAPtQ0=R{KLtJPyGg+wru`M`H21>vh-bu6nPg z-mB@fcM&UCv0(#}w+Pu1unMfQ7$i24V8IUYld?r@Ss=l=ud1u7dmNLJ+h^*1?z{Kg zbMLFaKKuAj0z9Yi`yzhsND!O@zV{LQhvzqs1;JN=zXcuxz7Kp6_~hf|_)EZRcz+W} zz{rV;F)4)FfzXbdTkmLC;koO<`Xz5=F{b zPlF`p=LC@7Uk6?TM!+`k*FXaP9mw{Me5&N_1t90A1!Q|WK;~lzWS)Oijo$;Z-FK?@ zKLI)Ze^&Suk^oxk2g3m*@W_YlF=wm;(B|_88TdFjr_77b5wL|HKYS)X&*F#BgA@1> zeq1g{RsC=dScl9p$HSaM+WukwK(~Kb6Z~-OkKxB$aGkKWAtBGzNg&E7Si=vp@p=qS zY#xtjUnGUJG?lp|`Bo+ePDZDxUpN|?LPvCB>v+@-F46j}?cVKM*LT-xB4<;RM>G|- z-oYydiLpwLsGp0$M7qQCCQSvIoW%cKs^yfd6Hca5mxjDErC-`mBomb?Cv)mcHsl@C;A*Aa_1=y3 z6;|g{!jXiM5Nxf$cCe$sCcIh@+YYW9a=Fk}4C*Kv$-w3urNqk|sWeNxmOSnSs8wn>oe=FmS(;K#GfmK`Xh+KV8FSwbTF-QyFh{8KE=hE)d?wi-h zvzpV_)^5qnC#S{|D8|Usp8)H>L?W|X%9?#5o`6R z5F;7(q)5ATDd`KX&=t?e&Skc{u@M`~RWX%)7?W+2k2bP0GP|+xZ^P~-VHp|z+*sJ{ zlHFU|d1GgLLBeLcv-X|dCYD{=mmnY|^a-rNU#gy#X|70>j#|Z+ zusXIBjo(4@De|5#k;J~=#U)&boY>uzKUp{qb|pgdci3GXP}-W9gfF2?EZxCP2FrD5 zZ!%fow!Dj5nUzIkv`SB+xigpbzzU0x;KasAR6Jfe0I{IALO8ARlEwi|&*r(56pM_L zgd9g>IVlkPNK`Z;;(b=1jUTzWp0pf*m=xu9rfnc54*4pXs@LJeg#~q2;M5^l#s?SQ z8SUV5`7OpDk;+Tm#s~M)dLLYcJQOt25+|{@FY*WrxNkM2rO?i+P&vP1UITnhx7aCA zaYZHg>f=KM1O=7i&xMTP$!UuyvMuf!u6!R%?I>q`=&2{o^x`vv3l%nOTySwZv5)%FC{7r2DqFTS zx5G`BWA)`MkhKrN`&FcJ!nfigH3(Qua41(=nJn1h+FUHbpYtlP#46;=JGjzpfz92w zy==IBEZeB~5c^2YZY+H|oBQsR-KV^^`E)%tae=Ri9w^{W!D`ef7jJexdB~0V1n-)Q W4xdI1dzF0WJuS*-Hbw(N?*9ix-Z7W} literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/te/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/te/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..2e6fb50c6a1202c88017fa05cfb8cd318fd28471 GIT binary patch literal 1051 zcmY*WO=}cE5FIsM_9z||%CqU&4-LjiBJm^9K%y~j)Po?sna=FUZ1-fkH|u&b0TqOJ z5Q5-E0wD$wGaC?Z@jvKY<}ZkUz}LOT)rQyIRsHH!y_p{;hBiH{A>b4+4jcy_0CuIo zEU*Hc1P*}Hz;}B;;(0%D{sQu&p2u)*AM?B$IKSbTKSW=OUpCH2%E2L79aT6=)d-IukB$f=D3E5qdY2*UBb9gN(&-YnPGD} zibHm#9cflq0hx?Top7TvJ()JsR+opZSo%_!()=y9fT64uy9QeU)hg8sta6@JYg8Qx zsu#~zuu8LB8&?0T6Huecvxu+8q%_MisuwqH@~ztILC_%X%eYeZOTR$^%u{6s5VDxv9aY zsrr@DRV5966{~ksm^0$BDW?gK%33-gnYvI<)W)cPose{9f~sSs`|P@q_K&G7pnH8YRP(FnN?wt_F7izRir&j2 z-!6I^*b#p&@&lJeyjSGwj*{;d`PU-<;P&+*e|vb@!DYBlLDg>2dx~HOhYf7WCU&Gg z6?yLBy`s0~;@+C$V~6UyJ_~A2<^RI>ZniyCy|PSOh#@h>pQHz(k>id!%yfXaXKpMo>_9g6FWs`=xL#JtejqE{xBjunxBC82h>j=($*Mee OZV;f+7w2!o_kIKE2+dgl literal 0 HcmV?d00001 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/tr/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/tr/LC_MESSAGES/sqlparser.mo new file mode 100644 index 0000000000000000000000000000000000000000..e4f9d33cece962d3fc4f190a54fb8ec4ae161f6f GIT binary patch literal 5223 zcma)9O^h5z6>fuLU?BuT5<&=2UfX0HyLRKjNXIV&zkv5Ta0b`~(mJmLDUP>+F96>KlHH@9beyjPj{~0oUIV(o?*UH& z?*pF$zM0{>z-hcYpK_e@fD=IC;k!U;e+~E~@Rz{HfPVlIKYz~p|CPNzIhER<13r%a zSApbD8%R9f1AZR(2JkDuw}2G?Uw}0K-+>g*2SDQI*-typ?~lMIAo1~^&!m2zdNlQ~ z0wmt<0M~)P0nPv)`D{9m2fT;(8$ep;PrwD>-+;u=(+K8i;5UKf-^)PC(;XoB@nhgJ z@K?aoz<&a1+%unZoLOKA_$A=&?EOBF_<9@2fbRj%0Y3o3b>|#{C*D_pl$Qud^W6gy zAHM*SAAij7ec&m)9|M_}foFkpz!1oQKL-+TzXRgWc?VxK&-*~q*-?;B?=ffsaVa? z`oo7}q4numz~>k~v<^Lxu8j>#T3=8?_94GPpXG_!mNZu4pExDIh%-pg=6(@~G!-7o zJw1?-txNlYujBYoJoIE+fQ{F~JEUZ}fmCcxQ6iRWfaU08^aBs+0%>v}S({S;k~V+R zXInfQwly-}{-+F0A1W})bHmG)Ve$D=$j&Xi{SLrtaVve}VFxopp<|WWjQKY(HqSgZw zG(UhvN8=kYKn9*Fuygmv&mq9zDK+Uc}9znYk*&;#?dct_lO^8mKfJe+v zI#EzZjb$2xv&*H;GL>|ech9M!oYLZH*wUh*rZ*9^HG=PX!&K5m(#cLm{ztG2P`e!) zTV2TpyfjE4N{3BTE~m*an3!G%6E?7!a8w&Z3)LR>v%qJ8WR)Z`ftxyVI}tjdVmoLc zd70y{!!>Hxb8bm6VYfqQpczOj>|#c9CiND_wuj^u2Kow==d3bOOz?bw#p?Rsy{@QXD&Z;Job9CH#RjyacV`k>Pxv6C(X*Y1Is3e$(J7%^M@jzZ+Bxh{b zmu^+By64As6iY*Bw=C<5cGx9$z809Nn^B^9duOq$~Y};c!jD&29(1^1**y}vB7ZDtL5iTW(=Zvo- zT=Et+Q5?d!6NorKwT{MOv*sNh4R%;9fJOh|-ZrclDB_6xZqf7#Otu2u?C(ab$C=Mr z_|XTyf`iX45;V9khJFrxuO)0tu>M0?7h%A#dOX;XSfCa3A29ko*wGR14R-2qwWmVQ zq4|8=Yq%fbUW0C2or1k>Y~~XIlGm}Y7Z?t^d`QQg|JTV%Jw4co+Jl|FZR>fFNXS9s zemB?-LT0eOiorom2_Cm7e3{sY@aYwlAQ*YF!@P6KJ`q=Re3q`W_5jzVZEUu^vZU8cKv~vkk7qj(?rXS7K#O1oqUvB<7>dqwa27!j1Lz{F zfC8yj_=pkLF6<2Z)i~-GF_AzDFO0vEpsf23uwRDRwTA`xFQNZ{hg7kHou0y716HQL ztFd26`q8e#;x!dUXtsqH8hkmp{Y; z?{!Zl&Qw4NgEY%UmWnKgER$(|ln&A~nkgT|@|{P*To<)!;N`Eb)$0?C+qeF-;FjXT zwkNz|s!mlXmZ(|@D=Iq}*C9ABlccsjU>X0$HS5CIQkA%kIiGALCM|!9lysDA`6P4{ z&8PG8Z3bDKM&GOnXjtTfV;2Gcgv2#Un-Q>3jwei3%L_5w&h=()k;J(vY^hBpVYt?u yNYjyO#D%5SOEB)O^^?H}HrL5#1D__49gd [ + 1, + 'var', + ], + 'CHARSET' => [ + 1, + 'var', + ], + 'DEFAULT CHARACTER SET' => [ + 1, + 'var', + ], + 'DEFAULT CHARSET' => [ + 1, + 'var', + ], + 'UPGRADE' => [ + 1, + 'var', + ], + 'COLLATE' => [ + 2, + 'var', + ], + 'DEFAULT COLLATE' => [ + 2, + 'var', + ], + ]; + + /** + * All table options. + * + * @var array + */ + public static $TABLE_OPTIONS = [ + 'ENGINE' => [ + 1, + 'var=', + ], + 'AUTO_INCREMENT' => [ + 1, + 'var=', + ], + 'AVG_ROW_LENGTH' => [ + 1, + 'var', + ], + 'MAX_ROWS' => [ + 1, + 'var', + ], + 'ROW_FORMAT' => [ + 1, + 'var', + ], + 'COMMENT' => [ + 1, + 'var', + ], + 'ADD' => 1, + 'ALTER' => 1, + 'ANALYZE' => 1, + 'CHANGE' => 1, + 'CHARSET' => 1, + 'CHECK' => 1, + 'COALESCE' => 1, + 'CONVERT' => 1, + 'DEFAULT CHARSET' => 1, + 'DISABLE' => 1, + 'DISCARD' => 1, + 'DROP' => 1, + 'ENABLE' => 1, + 'IMPORT' => 1, + 'MODIFY' => 1, + 'OPTIMIZE' => 1, + 'ORDER' => 1, + 'PARTITION' => 1, + 'REBUILD' => 1, + 'REMOVE' => 1, + 'RENAME' => 1, + 'REORGANIZE' => 1, + 'REPAIR' => 1, + 'UPGRADE' => 1, + + 'COLUMN' => 2, + 'CONSTRAINT' => 2, + 'DEFAULT' => 2, + 'TO' => 2, + 'BY' => 2, + 'FOREIGN' => 2, + 'FULLTEXT' => 2, + 'KEY' => 2, + 'KEYS' => 2, + 'PARTITIONING' => 2, + 'PRIMARY KEY' => 2, + 'SPATIAL' => 2, + 'TABLESPACE' => 2, + 'INDEX' => 2, + + 'CHARACTER SET' => 3, + ]; + + /** + * All user options. + * + * @var array + */ + public static $USER_OPTIONS = [ + 'ATTRIBUTE' => [ + 1, + 'var', + ], + 'COMMENT' => [ + 1, + 'var', + ], + 'REQUIRE' => [ + 1, + 'var', + ], + 'BY' => [ + 2, + 'expr', + ], + 'PASSWORD' => [ + 2, + 'var', + ], + 'WITH' => [ + 2, + 'var', + ], + + 'ACCOUNT' => 1, + 'DEFAULT' => 1, + + 'LOCK' => 2, + 'UNLOCK' => 2, + + 'IDENTIFIED' => 3, + ]; + + /** + * All view options. + * + * @var array + */ + public static $VIEW_OPTIONS = ['AS' => 1]; + + /** + * Options of this operation. + * + * @var OptionsArray + */ + public $options; + + /** + * The altered field. + * + * @var Expression + */ + public $field; + + /** + * Unparsed tokens. + * + * @var Token[]|string + */ + public $unknown = []; + + /** + * @param OptionsArray $options options of alter operation + * @param Expression $field altered field + * @param array $unknown unparsed tokens found at the end of operation + */ + public function __construct( + $options = null, + $field = null, + $unknown = [] + ) { + $this->options = $options; + $this->field = $field; + $this->unknown = $unknown; + } + + /** + * @param Parser $parser the parser that serves as context + * @param TokensList $list the list of tokens that are being parsed + * @param array $options parameters for parsing + * + * @return AlterOperation + */ + public static function parse(Parser $parser, TokensList $list, array $options = []) + { + $ret = new static(); + + /** + * Counts brackets. + * + * @var int + */ + $brackets = 0; + + /** + * The state of the parser. + * + * Below are the states of the parser. + * + * 0 ---------------------[ options ]---------------------> 1 + * + * 1 ----------------------[ field ]----------------------> 2 + * + * 2 -------------------------[ , ]-----------------------> 0 + * + * @var int + */ + $state = 0; + + for (; $list->idx < $list->count; ++$list->idx) { + /** + * Token parsed at this moment. + * + * @var Token + */ + $token = $list->tokens[$list->idx]; + + // End of statement. + if ($token->type === Token::TYPE_DELIMITER) { + break; + } + + // Skipping comments. + if ($token->type === Token::TYPE_COMMENT) { + continue; + } + + // Skipping whitespaces. + if ($token->type === Token::TYPE_WHITESPACE) { + if ($state === 2) { + // When parsing the unknown part, the whitespaces are + // included to not break anything. + $ret->unknown[] = $token; + } + + continue; + } + + if ($state === 0) { + $ret->options = OptionsArray::parse($parser, $list, $options); + + if ($ret->options->has('AS')) { + for (; $list->idx < $list->count; ++$list->idx) { + if ($list->tokens[$list->idx]->type === Token::TYPE_DELIMITER) { + break; + } + + $ret->unknown[] = $list->tokens[$list->idx]; + } + + break; + } + + $state = 1; + } elseif ($state === 1) { + $ret->field = Expression::parse( + $parser, + $list, + [ + 'breakOnAlias' => true, + 'parseField' => 'column', + ] + ); + if ($ret->field === null) { + // No field was read. We go back one token so the next + // iteration will parse the same token, but in state 2. + --$list->idx; + } + + $state = 2; + } elseif ($state === 2) { + $arrayKey = ''; + if (is_string($token->value) || is_numeric($token->value)) { + $arrayKey = $token->value; + } else { + $arrayKey = $token->token; + } + + if ($token->type === Token::TYPE_OPERATOR) { + if ($token->value === '(') { + ++$brackets; + } elseif ($token->value === ')') { + --$brackets; + } elseif (($token->value === ',') && ($brackets === 0)) { + break; + } + } elseif (! self::checkIfTokenQuotedSymbol($token)) { + if (! empty(Parser::$STATEMENT_PARSERS[$token->value])) { + // We want to get the next non-comment and non-space token after $token + // therefore, the first getNext call will start with the current $idx which's $token, + // will return it and increase $idx by 1, which's not guaranteed to be non-comment + // and non-space, that's why we're calling getNext again. + + $list->getNext(); + $nextToken = $list->getNext(); + + if ($token->value === 'SET' && $nextToken !== null && $nextToken->value === '(') { + // To avoid adding the tokens between the SET() parentheses to the unknown tokens + $list->getNextOfTypeAndValue(Token::TYPE_OPERATOR, ')'); + } elseif ($token->value === 'SET' && $nextToken !== null && $nextToken->value === 'DEFAULT') { + // to avoid adding the `DEFAULT` token to the unknown tokens. + ++$list->idx; + } else { + // We have reached the end of ALTER operation and suddenly found + // a start to new statement, but have not find a delimiter between them + $parser->error( + 'A new statement was found, but no delimiter between it and the previous one.', + $token + ); + break; + } + } elseif ( + (array_key_exists($arrayKey, self::$DB_OPTIONS) + || array_key_exists($arrayKey, self::$TABLE_OPTIONS)) + && ! self::checkIfColumnDefinitionKeyword($arrayKey) + ) { + // This alter operation has finished, which means a comma + // was missing before start of new alter operation + $parser->error('Missing comma before start of a new alter operation.', $token); + break; + } + } + + $ret->unknown[] = $token; + } + } + + if ($ret->options->isEmpty()) { + $parser->error('Unrecognized alter operation.', $list->tokens[$list->idx]); + } + + --$list->idx; + + return $ret; + } + + /** + * @param AlterOperation $component the component to be built + * @param array $options parameters for building + * + * @return string + */ + public static function build($component, array $options = []) + { + $ret = $component->options . ' '; + if (isset($component->field) && ($component->field !== '')) { + $ret .= $component->field . ' '; + } + + $ret .= TokensList::build($component->unknown); + + return $ret; + } + + /** + * Check if token's value is one of the common keywords + * between column and table alteration + * + * @param string $tokenValue Value of current token + * + * @return bool + */ + private static function checkIfColumnDefinitionKeyword($tokenValue) + { + $commonOptions = [ + 'AUTO_INCREMENT', + 'COMMENT', + 'DEFAULT', + 'CHARACTER SET', + 'COLLATE', + 'PRIMARY', + 'UNIQUE', + 'PRIMARY KEY', + 'UNIQUE KEY', + ]; + + // Since these options can be used for + // both table as well as a specific column in the table + return in_array($tokenValue, $commonOptions); + } + + /** + * Check if token is symbol and quoted with backtick + * + * @param Token $token token to check + * + * @return bool + */ + private static function checkIfTokenQuotedSymbol($token) + { + return $token->type === Token::TYPE_SYMBOL && $token->flags === Token::FLAG_SYMBOL_BACKTICK; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/CaseExpression.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/CaseExpression.php new file mode 100644 index 0000000..3033854 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/CaseExpression.php @@ -0,0 +1,308 @@ +idx; // Skip 'CASE' + + for (; $list->idx < $list->count; ++$list->idx) { + /** + * Token parsed at this moment. + * + * @var Token + */ + $token = $list->tokens[$list->idx]; + + // Skipping whitespaces and comments. + if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { + continue; + } + + if ($state === 0) { + if ($token->type === Token::TYPE_KEYWORD) { + switch ($token->keyword) { + case 'WHEN': + ++$list->idx; // Skip 'WHEN' + $newCondition = Condition::parse($parser, $list); + $type = 1; + $state = 1; + $ret->conditions[] = $newCondition; + break; + case 'ELSE': + ++$list->idx; // Skip 'ELSE' + $ret->else_result = Expression::parse($parser, $list); + $state = 0; // last clause of CASE expression + break; + case 'END': + $state = 3; // end of CASE expression + ++$list->idx; + break 2; + default: + $parser->error('Unexpected keyword.', $token); + break 2; + } + } else { + $ret->value = Expression::parse($parser, $list); + $type = 0; + $state = 1; + } + } elseif ($state === 1) { + if ($type === 0) { + if ($token->type === Token::TYPE_KEYWORD) { + switch ($token->keyword) { + case 'WHEN': + ++$list->idx; // Skip 'WHEN' + $newValue = Expression::parse($parser, $list); + $state = 2; + $ret->compare_values[] = $newValue; + break; + case 'ELSE': + ++$list->idx; // Skip 'ELSE' + $ret->else_result = Expression::parse($parser, $list); + $state = 0; // last clause of CASE expression + break; + case 'END': + $state = 3; // end of CASE expression + ++$list->idx; + break 2; + default: + $parser->error('Unexpected keyword.', $token); + break 2; + } + } + } else { + if ($token->type === Token::TYPE_KEYWORD && $token->keyword === 'THEN') { + ++$list->idx; // Skip 'THEN' + $newResult = Expression::parse($parser, $list); + $state = 0; + $ret->results[] = $newResult; + } elseif ($token->type === Token::TYPE_KEYWORD) { + $parser->error('Unexpected keyword.', $token); + break; + } + } + } elseif ($state === 2) { + if ($type === 0) { + if ($token->type === Token::TYPE_KEYWORD && $token->keyword === 'THEN') { + ++$list->idx; // Skip 'THEN' + $newResult = Expression::parse($parser, $list); + $ret->results[] = $newResult; + $state = 1; + } elseif ($token->type === Token::TYPE_KEYWORD) { + $parser->error('Unexpected keyword.', $token); + break; + } + } + } + } + + if ($state !== 3) { + $parser->error('Unexpected end of CASE expression', $list->tokens[$list->idx - 1]); + } else { + // Parse for alias of CASE expression + $asFound = false; + for (; $list->idx < $list->count; ++$list->idx) { + $token = $list->tokens[$list->idx]; + + // End of statement. + if ($token->type === Token::TYPE_DELIMITER) { + break; + } + + // Skipping whitespaces and comments. + if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { + continue; + } + + // Handle optional AS keyword before alias + if ($token->type === Token::TYPE_KEYWORD && $token->keyword === 'AS') { + if ($asFound || ! empty($ret->alias)) { + $parser->error('Potential duplicate alias of CASE expression.', $token); + break; + } + + $asFound = true; + continue; + } + + if ( + $asFound + && $token->type === Token::TYPE_KEYWORD + && ($token->flags & Token::FLAG_KEYWORD_RESERVED || $token->flags & Token::FLAG_KEYWORD_FUNCTION) + ) { + $parser->error('An alias expected after AS but got ' . $token->value, $token); + $asFound = false; + break; + } + + if ( + $asFound + || $token->type === Token::TYPE_STRING + || ($token->type === Token::TYPE_SYMBOL && ! $token->flags & Token::FLAG_SYMBOL_VARIABLE) + || $token->type === Token::TYPE_NONE + ) { + // An alias is expected (the keyword `AS` was previously found). + if (! empty($ret->alias)) { + $parser->error('An alias was previously found.', $token); + break; + } + + $ret->alias = $token->value; + $asFound = false; + + continue; + } + + break; + } + + if ($asFound) { + $parser->error('An alias was expected after AS.', $list->tokens[$list->idx - 1]); + } + + $ret->expr = self::build($ret); + } + + --$list->idx; + + return $ret; + } + + /** + * @param CaseExpression $component the component to be built + * @param array $options parameters for building + * + * @return string + */ + public static function build($component, array $options = []) + { + $ret = 'CASE '; + if (isset($component->value)) { + // Syntax type 0 + $ret .= $component->value . ' '; + $valuesCount = count($component->compare_values); + $resultsCount = count($component->results); + for ($i = 0; $i < $valuesCount && $i < $resultsCount; ++$i) { + $ret .= 'WHEN ' . $component->compare_values[$i] . ' '; + $ret .= 'THEN ' . $component->results[$i] . ' '; + } + } else { + // Syntax type 1 + $valuesCount = count($component->conditions); + $resultsCount = count($component->results); + for ($i = 0; $i < $valuesCount && $i < $resultsCount; ++$i) { + $ret .= 'WHEN ' . Condition::build($component->conditions[$i]) . ' '; + $ret .= 'THEN ' . $component->results[$i] . ' '; + } + } + + if (isset($component->else_result)) { + $ret .= 'ELSE ' . $component->else_result . ' '; + } + + $ret .= 'END'; + + if ($component->alias) { + $ret .= ' AS ' . Context::escape($component->alias); + } + + return $ret; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/DataType.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/DataType.php new file mode 100644 index 0000000..812385e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/DataType.php @@ -0,0 +1,179 @@ + 1, + 'CHARACTER SET' => [ + 2, + 'var', + ], + 'CHARSET' => [ + 2, + 'var', + ], + 'COLLATE' => [ + 3, + 'var', + ], + 'UNSIGNED' => 4, + 'ZEROFILL' => 5, + ]; + + /** + * The name of the data type. + * + * @var string + */ + public $name; + + /** + * The parameters of this data type. + * + * Some data types have no parameters. + * Numeric types might have parameters for the maximum number of digits, + * precision, etc. + * String types might have parameters for the maximum length stored. + * `ENUM` and `SET` have parameters for possible values. + * + * For more information, check the MySQL manual. + * + * @var array + */ + public $parameters = []; + + /** + * The options of this data type. + * + * @var OptionsArray + */ + public $options; + + /** + * @param string $name the name of this data type + * @param array $parameters the parameters (size or possible values) + * @param OptionsArray $options the options of this data type + */ + public function __construct( + $name = null, + array $parameters = [], + $options = null + ) { + $this->name = $name; + $this->parameters = $parameters; + $this->options = $options; + } + + /** + * @param Parser $parser the parser that serves as context + * @param TokensList $list the list of tokens that are being parsed + * @param array $options parameters for parsing + * + * @return DataType|null + */ + public static function parse(Parser $parser, TokensList $list, array $options = []) + { + $ret = new static(); + + /** + * The state of the parser. + * + * Below are the states of the parser. + * + * 0 -------------------[ data type ]--------------------> 1 + * + * 1 ----------------[ size and options ]----------------> 2 + * + * @var int + */ + $state = 0; + + for (; $list->idx < $list->count; ++$list->idx) { + /** + * Token parsed at this moment. + * + * @var Token + */ + $token = $list->tokens[$list->idx]; + + // Skipping whitespaces and comments. + if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { + continue; + } + + if ($state === 0) { + $ret->name = strtoupper((string) $token->value); + if (($token->type !== Token::TYPE_KEYWORD) || (! ($token->flags & Token::FLAG_KEYWORD_DATA_TYPE))) { + $parser->error('Unrecognized data type.', $token); + } + + $state = 1; + } elseif ($state === 1) { + if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '(')) { + $parameters = ArrayObj::parse($parser, $list); + ++$list->idx; + $ret->parameters = ($ret->name === 'ENUM') || ($ret->name === 'SET') ? + $parameters->raw : $parameters->values; + } + + $ret->options = OptionsArray::parse($parser, $list, static::$DATA_TYPE_OPTIONS); + ++$list->idx; + break; + } + } + + if (empty($ret->name)) { + return null; + } + + --$list->idx; + + return $ret; + } + + /** + * @param DataType $component the component to be built + * @param array $options parameters for building + * + * @return string + */ + public static function build($component, array $options = []) + { + $name = empty($options['lowercase']) ? + $component->name : strtolower($component->name); + + $parameters = ''; + if (! empty($component->parameters)) { + $parameters = '(' . implode(',', $component->parameters) . ')'; + } + + return trim($name . $parameters . ' ' . $component->options); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/IndexHint.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/IndexHint.php new file mode 100644 index 0000000..1f0ce4b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/IndexHint.php @@ -0,0 +1,212 @@ +type = $type; + $this->indexOrKey = $indexOrKey; + $this->for = $for; + $this->indexes = $indexes; + } + + /** + * @param Parser $parser the parser that serves as context + * @param TokensList $list the list of tokens that are being parsed + * @param array $options parameters for parsing + * + * @return IndexHint|Component[] + */ + public static function parse(Parser $parser, TokensList $list, array $options = []) + { + $ret = []; + $expr = new static(); + $expr->type = $options['type'] ?? null; + /** + * The state of the parser. + * + * Below are the states of the parser. + * 0 ----------------- [ USE/IGNORE/FORCE ]-----------------> 1 + * 1 -------------------- [ INDEX/KEY ] --------------------> 2 + * 2 ----------------------- [ FOR ] -----------------------> 3 + * 2 -------------------- [ expr_list ] --------------------> 0 + * 3 -------------- [ JOIN/GROUP BY/ORDER BY ] -------------> 4 + * 4 -------------------- [ expr_list ] --------------------> 0 + * + * @var int + */ + $state = 0; + + // By design, the parser will parse first token after the keyword. So, the keyword + // must be analyzed too, in order to determine the type of this index hint. + if ($list->idx > 0) { + --$list->idx; + } + + for (; $list->idx < $list->count; ++$list->idx) { + /** + * Token parsed at this moment. + * + * @var Token + */ + $token = $list->tokens[$list->idx]; + + // End of statement. + if ($token->type === Token::TYPE_DELIMITER) { + break; + } + + // Skipping whitespaces and comments. + if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { + continue; + } + + switch ($state) { + case 0: + if ($token->type === Token::TYPE_KEYWORD) { + if ($token->keyword !== 'USE' && $token->keyword !== 'IGNORE' && $token->keyword !== 'FORCE') { + break 2; + } + + $expr->type = $token->keyword; + $state = 1; + } + + break; + case 1: + if ($token->type === Token::TYPE_KEYWORD) { + if ($token->keyword === 'INDEX' || $token->keyword === 'KEY') { + $expr->indexOrKey = $token->keyword; + } else { + $parser->error('Unexpected keyword.', $token); + } + + $state = 2; + } else { + // we expect the token to be a keyword + $parser->error('Unexpected token.', $token); + } + + break; + case 2: + if ($token->type === Token::TYPE_KEYWORD && $token->keyword === 'FOR') { + $state = 3; + } else { + $expr->indexes = ExpressionArray::parse($parser, $list); + $state = 0; + $ret[] = $expr; + $expr = new static(); + } + + break; + case 3: + if ($token->type === Token::TYPE_KEYWORD) { + if ( + $token->keyword === 'JOIN' + || $token->keyword === 'GROUP BY' + || $token->keyword === 'ORDER BY' + ) { + $expr->for = $token->keyword; + } else { + $parser->error('Unexpected keyword.', $token); + } + + $state = 4; + } else { + // we expect the token to be a keyword + $parser->error('Unexpected token.', $token); + } + + break; + case 4: + $expr->indexes = ExpressionArray::parse($parser, $list); + $state = 0; + $ret[] = $expr; + $expr = new static(); + break; + } + } + + --$list->idx; + + return $ret; + } + + /** + * @param IndexHint|IndexHint[] $component the component to be built + * @param array $options parameters for building + * + * @return string + */ + public static function build($component, array $options = []) + { + if (is_array($component)) { + return implode(' ', $component); + } + + $ret = $component->type . ' ' . $component->indexOrKey . ' '; + if ($component->for !== null) { + $ret .= 'FOR ' . $component->for . ' '; + } + + return $ret . ExpressionArray::build($component->indexes); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/Reference.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/Reference.php new file mode 100644 index 0000000..8f01112 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/Reference.php @@ -0,0 +1,162 @@ + [ + 1, + 'var', + ], + 'ON DELETE' => [ + 2, + 'var', + ], + 'ON UPDATE' => [ + 3, + 'var', + ], + ]; + + /** + * The referenced table. + * + * @var Expression + */ + public $table; + + /** + * The referenced columns. + * + * @var array + */ + public $columns; + + /** + * The options of the referencing. + * + * @var OptionsArray + */ + public $options; + + /** + * @param Expression $table the name of the table referenced + * @param array $columns the columns referenced + * @param OptionsArray $options the options + */ + public function __construct($table = null, array $columns = [], $options = null) + { + $this->table = $table; + $this->columns = $columns; + $this->options = $options; + } + + /** + * @param Parser $parser the parser that serves as context + * @param TokensList $list the list of tokens that are being parsed + * @param array $options parameters for parsing + * + * @return Reference + */ + public static function parse(Parser $parser, TokensList $list, array $options = []) + { + $ret = new static(); + + /** + * The state of the parser. + * + * Below are the states of the parser. + * + * 0 ----------------------[ table ]---------------------> 1 + * + * 1 ---------------------[ columns ]--------------------> 2 + * + * 2 ---------------------[ options ]--------------------> (END) + * + * @var int + */ + $state = 0; + + for (; $list->idx < $list->count; ++$list->idx) { + /** + * Token parsed at this moment. + * + * @var Token + */ + $token = $list->tokens[$list->idx]; + + // End of statement. + if ($token->type === Token::TYPE_DELIMITER) { + break; + } + + // Skipping whitespaces and comments. + if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { + continue; + } + + if ($state === 0) { + $ret->table = Expression::parse( + $parser, + $list, + [ + 'parseField' => 'table', + 'breakOnAlias' => true, + ] + ); + $state = 1; + } elseif ($state === 1) { + $ret->columns = ArrayObj::parse($parser, $list)->values; + $state = 2; + } elseif ($state === 2) { + $ret->options = OptionsArray::parse($parser, $list, static::$REFERENCES_OPTIONS); + ++$list->idx; + break; + } + } + + --$list->idx; + + return $ret; + } + + /** + * @param Reference $component the component to be built + * @param array $options parameters for building + * + * @return string + */ + public static function build($component, array $options = []) + { + return trim( + $component->table + . ' (' . implode(', ', Context::escape($component->columns)) . ') ' + . $component->options + ); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/UnionKeyword.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/UnionKeyword.php new file mode 100644 index 0000000..68d1563 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/UnionKeyword.php @@ -0,0 +1,36 @@ + $component the component to be built + * @param array $options parameters for building + * + * @return string + */ + public static function build($component, array $options = []) + { + $tmp = []; + foreach ($component as $componentPart) { + $tmp[] = $componentPart[0] . ' ' . $componentPart[1]; + } + + return implode(' ', $tmp); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100300.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100300.php new file mode 100644 index 0000000..08b26f1 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100300.php @@ -0,0 +1,347 @@ + + * @phpstan-var non-empty-array + */ + public static $KEYWORDS = [ + 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, + 'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1, + 'ONE' => 1, 'ROW' => 1, 'XID' => 1, + 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, + 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, + 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1, + 'NAME' => 1, 'NEXT' => 1, 'NONE' => 1, 'ONLY' => 1, 'OPEN' => 1, 'PAGE' => 1, + 'PORT' => 1, 'PREV' => 1, 'SLOW' => 1, 'SOME' => 1, 'STOP' => 1, 'THAN' => 1, + 'TYPE' => 1, 'VIEW' => 1, 'WAIT' => 1, 'WORK' => 1, 'X509' => 1, + 'AFTER' => 1, 'BEGIN' => 1, 'BLOCK' => 1, 'BTREE' => 1, 'CACHE' => 1, + 'CHAIN' => 1, 'CLOSE' => 1, 'ERROR' => 1, 'EVENT' => 1, 'EVERY' => 1, + 'FIRST' => 1, 'FIXED' => 1, 'FLUSH' => 1, 'FOUND' => 1, 'HOSTS' => 1, + 'LEVEL' => 1, 'LOCAL' => 1, 'LOCKS' => 1, 'MERGE' => 1, 'MUTEX' => 1, + 'NAMES' => 1, 'NCHAR' => 1, 'NEVER' => 1, 'OWNER' => 1, 'PHASE' => 1, + 'PROXY' => 1, 'QUERY' => 1, 'QUICK' => 1, 'RELAY' => 1, 'RESET' => 1, + 'RTREE' => 1, 'SHARE' => 1, 'SLAVE' => 1, 'START' => 1, 'SUPER' => 1, + 'SWAPS' => 1, 'TYPES' => 1, 'UNTIL' => 1, 'VALUE' => 1, + 'ACTION' => 1, 'ALWAYS' => 1, 'BACKUP' => 1, 'BINLOG' => 1, 'CIPHER' => 1, + 'CLIENT' => 1, 'COMMIT' => 1, 'ENABLE' => 1, 'ENGINE' => 1, 'ERRORS' => 1, + 'ESCAPE' => 1, 'EVENTS' => 1, 'EXPIRE' => 1, 'EXPORT' => 1, 'FAULTS' => 1, + 'FIELDS' => 1, 'FILTER' => 1, 'GLOBAL' => 1, 'GRANTS' => 1, 'IMPORT' => 1, + 'ISSUER' => 1, 'LEAVES' => 1, 'MASTER' => 1, 'MEDIUM' => 1, 'MEMORY' => 1, + 'MODIFY' => 1, 'NUMBER' => 1, 'OFFSET' => 1, 'PARSER' => 1, 'PLUGIN' => 1, + 'RELOAD' => 1, 'REMOVE' => 1, 'REPAIR' => 1, 'RESUME' => 1, 'ROLLUP' => 1, + 'SERVER' => 1, 'SIGNED' => 1, 'SIMPLE' => 1, 'SOCKET' => 1, 'SONAME' => 1, + 'SOUNDS' => 1, 'SOURCE' => 1, 'STARTS' => 1, 'STATUS' => 1, 'STRING' => 1, + 'TABLES' => 1, + 'ACCOUNT' => 1, 'ANALYSE' => 1, 'CHANGED' => 1, 'CHANNEL' => 1, 'COLUMNS' => 1, + 'COMMENT' => 1, 'COMPACT' => 1, 'CONTEXT' => 1, 'CURRENT' => 1, 'DEFINER' => 1, + 'DISABLE' => 1, 'DISCARD' => 1, 'DYNAMIC' => 1, 'ENGINES' => 1, 'EXECUTE' => 1, + 'FOLLOWS' => 1, 'GENERAL' => 1, 'HANDLER' => 1, 'INDEXES' => 1, 'INSTALL' => 1, + 'INVOKER' => 1, 'LOGFILE' => 1, 'MIGRATE' => 1, 'NO_WAIT' => 1, 'OPTIONS' => 1, + 'PARTIAL' => 1, 'PLUGINS' => 1, 'PREPARE' => 1, 'PROFILE' => 1, 'REBUILD' => 1, + 'RECOVER' => 1, 'RESTORE' => 1, 'RETURNS' => 1, 'ROUTINE' => 1, 'SESSION' => 1, + 'STACKED' => 1, 'STORAGE' => 1, 'SUBJECT' => 1, 'SUSPEND' => 1, 'UNICODE' => 1, + 'UNKNOWN' => 1, 'UPGRADE' => 1, 'USE_FRM' => 1, 'WITHOUT' => 1, 'WRAPPER' => 1, + 'CASCADED' => 1, 'CHECKSUM' => 1, 'DATAFILE' => 1, 'DUMPFILE' => 1, 'EXCHANGE' => 1, + 'EXTENDED' => 1, 'FUNCTION' => 1, 'LANGUAGE' => 1, 'MAX_ROWS' => 1, 'MAX_SIZE' => 1, + 'MIN_ROWS' => 1, 'NATIONAL' => 1, 'NVARCHAR' => 1, 'PRECEDES' => 1, 'PRESERVE' => 1, + 'PROFILES' => 1, 'REDOFILE' => 1, 'RELAYLOG' => 1, 'ROLLBACK' => 1, 'SCHEDULE' => 1, + 'SECURITY' => 1, 'SEQUENCE' => 1, 'SHUTDOWN' => 1, 'SNAPSHOT' => 1, 'SWITCHES' => 1, + 'TRIGGERS' => 1, 'UNDOFILE' => 1, 'WARNINGS' => 1, + 'AGGREGATE' => 1, 'ALGORITHM' => 1, 'COMMITTED' => 1, 'DIRECTORY' => 1, + 'DUPLICATE' => 1, 'EXPANSION' => 1, 'INVISIBLE' => 1, 'IO_THREAD' => 1, + 'ISOLATION' => 1, 'NODEGROUP' => 1, 'PACK_KEYS' => 1, 'READ_ONLY' => 1, + 'REDUNDANT' => 1, 'SAVEPOINT' => 1, 'SQL_CACHE' => 1, 'TEMPORARY' => 1, + 'TEMPTABLE' => 1, 'UNDEFINED' => 1, 'UNINSTALL' => 1, 'VARIABLES' => 1, + 'COMPLETION' => 1, 'COMPRESSED' => 1, 'CONCURRENT' => 1, 'CONNECTION' => 1, + 'CONSISTENT' => 1, 'DEALLOCATE' => 1, 'IDENTIFIED' => 1, 'MASTER_SSL' => 1, + 'NDBCLUSTER' => 1, 'PARTITIONS' => 1, 'PERSISTENT' => 1, 'PLUGIN_DIR' => 1, + 'PRIVILEGES' => 1, 'REORGANIZE' => 1, 'REPEATABLE' => 1, 'ROW_FORMAT' => 1, + 'SQL_THREAD' => 1, 'TABLESPACE' => 1, 'TABLE_NAME' => 1, 'VALIDATION' => 1, + 'COLUMN_NAME' => 1, 'COMPRESSION' => 1, 'CURSOR_NAME' => 1, 'DIAGNOSTICS' => 1, + 'EXTENT_SIZE' => 1, 'MASTER_HOST' => 1, 'MASTER_PORT' => 1, 'MASTER_USER' => 1, + 'MYSQL_ERRNO' => 1, 'NONBLOCKING' => 1, 'PROCESSLIST' => 1, 'REPLICATION' => 1, + 'SCHEMA_NAME' => 1, 'SQL_TSI_DAY' => 1, 'TRANSACTION' => 1, 'UNCOMMITTED' => 1, + 'CATALOG_NAME' => 1, 'CLASS_ORIGIN' => 1, 'DEFAULT_AUTH' => 1, 'DES_KEY_FILE' => 1, + 'INITIAL_SIZE' => 1, 'MASTER_DELAY' => 1, 'MESSAGE_TEXT' => 1, 'PARTITIONING' => 1, + 'RELAY_THREAD' => 1, 'SERIALIZABLE' => 1, 'SQL_NO_CACHE' => 1, 'SQL_TSI_HOUR' => 1, + 'SQL_TSI_WEEK' => 1, 'SQL_TSI_YEAR' => 1, 'SUBPARTITION' => 1, + 'COLUMN_FORMAT' => 1, 'INSERT_METHOD' => 1, 'MASTER_SSL_CA' => 1, 'RELAY_LOG_POS' => 1, + 'SQL_TSI_MONTH' => 1, 'SUBPARTITIONS' => 1, + 'AUTO_INCREMENT' => 1, 'AVG_ROW_LENGTH' => 1, 'KEY_BLOCK_SIZE' => 1, 'MASTER_LOG_POS' => 1, + 'MASTER_SSL_CRL' => 1, 'MASTER_SSL_KEY' => 1, 'RELAY_LOG_FILE' => 1, 'SQL_TSI_MINUTE' => 1, + 'SQL_TSI_SECOND' => 1, 'TABLE_CHECKSUM' => 1, 'USER_RESOURCES' => 1, + 'AUTOEXTEND_SIZE' => 1, 'CONSTRAINT_NAME' => 1, 'DELAY_KEY_WRITE' => 1, 'FILE_BLOCK_SIZE' => 1, + 'MASTER_LOG_FILE' => 1, 'MASTER_PASSWORD' => 1, 'MASTER_SSL_CERT' => 1, 'PARSE_GCOL_EXPR' => 1, + 'REPLICATE_DO_DB' => 1, 'SQL_AFTER_GTIDS' => 1, 'SQL_TSI_QUARTER' => 1, 'SUBCLASS_ORIGIN' => 1, + 'MASTER_SERVER_ID' => 1, 'REDO_BUFFER_SIZE' => 1, 'SQL_BEFORE_GTIDS' => 1, + 'STATS_PERSISTENT' => 1, 'UNDO_BUFFER_SIZE' => 1, + 'CONSTRAINT_SCHEMA' => 1, 'GROUP_REPLICATION' => 1, 'IGNORE_SERVER_IDS' => 1, + 'MASTER_SSL_CAPATH' => 1, 'MASTER_SSL_CIPHER' => 1, 'RETURNED_SQLSTATE' => 1, + 'SQL_BUFFER_RESULT' => 1, 'STATS_AUTO_RECALC' => 1, + 'CONSTRAINT_CATALOG' => 1, 'MASTER_RETRY_COUNT' => 1, 'MASTER_SSL_CRLPATH' => 1, + 'MAX_STATEMENT_TIME' => 1, 'REPLICATE_DO_TABLE' => 1, 'SQL_AFTER_MTS_GAPS' => 1, + 'STATS_SAMPLE_PAGES' => 1, + 'REPLICATE_IGNORE_DB' => 1, + 'MASTER_AUTO_POSITION' => 1, 'MASTER_CONNECT_RETRY' => 1, 'MAX_QUERIES_PER_HOUR' => 1, + 'MAX_UPDATES_PER_HOUR' => 1, 'MAX_USER_CONNECTIONS' => 1, 'REPLICATE_REWRITE_DB' => 1, + 'REPLICATE_IGNORE_TABLE' => 1, + 'MASTER_HEARTBEAT_PERIOD' => 1, 'REPLICATE_WILD_DO_TABLE' => 1, + 'MAX_CONNECTIONS_PER_HOUR' => 1, + 'REPLICATE_WILD_IGNORE_TABLE' => 1, + + 'AS' => 3, 'BY' => 3, 'IS' => 3, 'ON' => 3, 'OR' => 3, 'TO' => 3, + 'ADD' => 3, 'ALL' => 3, 'AND' => 3, 'ASC' => 3, 'DEC' => 3, 'DIV' => 3, + 'FOR' => 3, 'GET' => 3, 'NOT' => 3, 'OUT' => 3, 'SQL' => 3, 'SSL' => 3, + 'USE' => 3, 'XOR' => 3, + 'BOTH' => 3, 'CALL' => 3, 'CASE' => 3, 'DESC' => 3, 'DROP' => 3, 'DUAL' => 3, + 'EACH' => 3, 'ELSE' => 3, 'EXIT' => 3, 'FROM' => 3, 'INT1' => 3, 'INT2' => 3, + 'INT3' => 3, 'INT4' => 3, 'INT8' => 3, 'INTO' => 3, 'JOIN' => 3, 'KEYS' => 3, + 'KILL' => 3, 'LIKE' => 3, 'LOAD' => 3, 'LOCK' => 3, 'LONG' => 3, 'LOOP' => 3, + 'NULL' => 3, 'OVER' => 3, 'READ' => 3, 'ROWS' => 3, 'SHOW' => 3, 'THEN' => 3, + 'TRUE' => 3, 'UNDO' => 3, 'WHEN' => 3, 'WITH' => 3, + 'ALTER' => 3, 'CHECK' => 3, 'CROSS' => 3, 'FALSE' => 3, 'FETCH' => 3, + 'FORCE' => 3, 'GRANT' => 3, 'GROUP' => 3, 'INNER' => 3, 'INOUT' => 3, + 'LEAVE' => 3, 'LIMIT' => 3, 'LINES' => 3, 'ORDER' => 3, 'OUTER' => 3, + 'PURGE' => 3, 'RANGE' => 3, 'READS' => 3, 'RLIKE' => 3, 'TABLE' => 3, + 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, + 'WRITE' => 3, + 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'EXCEPT' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, + 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, + 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, + 'SIGNAL' => 3, 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, + 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, + 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, + 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, + 'REQUIRE' => 3, 'SCHEMAS' => 3, 'TRIGGER' => 3, 'VARYING' => 3, 'VIRTUAL' => 3, + 'CONTINUE' => 3, 'DAY_HOUR' => 3, 'DESCRIBE' => 3, 'DISTINCT' => 3, 'ENCLOSED' => 3, + 'MAXVALUE' => 3, 'MODIFIES' => 3, 'OPTIMIZE' => 3, 'RESIGNAL' => 3, 'RESTRICT' => 3, + 'SPECIFIC' => 3, 'SQLSTATE' => 3, 'STARTING' => 3, 'TRAILING' => 3, 'UNSIGNED' => 3, + 'ZEROFILL' => 3, + 'CONDITION' => 3, 'DATABASES' => 3, 'GENERATED' => 3, 'INTERSECT' => 3, + 'MIDDLEINT' => 3, 'PARTITION' => 3, 'PRECISION' => 3, 'PROCEDURE' => 3, + 'RECURSIVE' => 3, 'SENSITIVE' => 3, 'SEPARATOR' => 3, + 'ACCESSIBLE' => 3, 'ASENSITIVE' => 3, 'CONSTRAINT' => 3, 'DAY_MINUTE' => 3, + 'DAY_SECOND' => 3, 'OPTIONALLY' => 3, 'READ_WRITE' => 3, 'REFERENCES' => 3, + 'SQLWARNING' => 3, 'TERMINATED' => 3, 'YEAR_MONTH' => 3, + 'DISTINCTROW' => 3, 'HOUR_MINUTE' => 3, 'HOUR_SECOND' => 3, 'INSENSITIVE' => 3, + 'MASTER_BIND' => 3, + 'LOW_PRIORITY' => 3, 'SQLEXCEPTION' => 3, 'VARCHARACTER' => 3, + 'DETERMINISTIC' => 3, 'HIGH_PRIORITY' => 3, 'MINUTE_SECOND' => 3, 'STRAIGHT_JOIN' => 3, + 'IO_AFTER_GTIDS' => 3, 'SQL_BIG_RESULT' => 3, + 'DAY_MICROSECOND' => 3, 'IO_BEFORE_GTIDS' => 3, 'OPTIMIZER_COSTS' => 3, + 'HOUR_MICROSECOND' => 3, 'SQL_SMALL_RESULT' => 3, + 'MINUTE_MICROSECOND' => 3, 'NO_WRITE_TO_BINLOG' => 3, 'SECOND_MICROSECOND' => 3, + 'SQL_CALC_FOUND_ROWS' => 3, + 'MASTER_SSL_VERIFY_SERVER_CERT' => 3, + + 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7, + 'AND CHAIN' => 7, 'FULL JOIN' => 7, 'IF EXISTS' => 7, 'LEFT JOIN' => 7, + 'LESS THAN' => 7, 'LOAD DATA' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, + 'ON UPDATE' => 7, 'UNION ALL' => 7, + 'CROSS JOIN' => 7, 'ESCAPED BY' => 7, 'FOR UPDATE' => 7, 'INNER JOIN' => 7, + 'LINEAR KEY' => 7, 'NO RELEASE' => 7, 'OR REPLACE' => 7, 'RIGHT JOIN' => 7, + 'ENCLOSED BY' => 7, 'LINEAR HASH' => 7, 'STARTING BY' => 7, + 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'NATURAL JOIN' => 7, 'PARTITION BY' => 7, + 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, + 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'TERMINATED BY' => 7, + 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7, + 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'FULL OUTER JOIN' => 7, 'INDEX DIRECTORY' => 7, + 'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7, + 'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7, + 'NATURAL LEFT JOIN' => 7, 'START TRANSACTION' => 7, + 'LOCK IN SHARE MODE' => 7, 'NATURAL RIGHT JOIN' => 7, 'SELECT TRANSACTION' => 7, + 'DEFAULT CHARACTER SET' => 7, + 'NATURAL LEFT OUTER JOIN' => 7, + 'NATURAL RIGHT OUTER JOIN' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, + + 'BIT' => 9, 'XML' => 9, + 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, + 'ARRAY' => 9, + 'SERIAL' => 9, + 'BOOLEAN' => 9, + 'DATETIME' => 9, 'GEOMETRY' => 9, 'MULTISET' => 9, + 'MULTILINEPOINT' => 9, + 'MULTILINEPOLYGON' => 9, + + 'INT' => 11, 'SET' => 11, + 'BLOB' => 11, 'REAL' => 11, + 'FLOAT' => 11, + 'BIGINT' => 11, 'DOUBLE' => 11, + 'DECIMAL' => 11, 'INTEGER' => 11, 'NUMERIC' => 11, 'TINYINT' => 11, 'VARCHAR' => 11, + 'LONGBLOB' => 11, 'LONGTEXT' => 11, 'SMALLINT' => 11, 'TINYBLOB' => 11, 'TINYTEXT' => 11, + 'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11, + 'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11, + + 'BINARY VARYING' => 15, + + 'KEY' => 19, + 'INDEX' => 19, + 'UNIQUE' => 19, + 'SPATIAL' => 19, + 'FULLTEXT' => 19, + + 'INDEX KEY' => 23, + 'UNIQUE KEY' => 23, + 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23, + 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23, + 'SPATIAL INDEX' => 23, + 'FULLTEXT INDEX' => 23, + + 'X' => 33, 'Y' => 33, + 'LN' => 33, 'PI' => 33, + 'ABS' => 33, 'AVG' => 33, 'BIN' => 33, 'COS' => 33, 'COT' => 33, 'DAY' => 33, + 'ELT' => 33, 'EXP' => 33, 'HEX' => 33, 'LOG' => 33, 'MAX' => 33, 'MD5' => 33, + 'MID' => 33, 'MIN' => 33, 'NOW' => 33, 'OCT' => 33, 'ORD' => 33, 'POW' => 33, + 'SHA' => 33, 'SIN' => 33, 'STD' => 33, 'SUM' => 33, 'TAN' => 33, + 'ACOS' => 33, 'AREA' => 33, 'ASIN' => 33, 'ATAN' => 33, 'CAST' => 33, 'CEIL' => 33, + 'CONV' => 33, 'HOUR' => 33, 'LOG2' => 33, 'LPAD' => 33, 'RAND' => 33, 'RPAD' => 33, + 'SHA1' => 33, 'SHA2' => 33, 'SIGN' => 33, 'SQRT' => 33, 'SRID' => 33, 'ST_X' => 33, + 'ST_Y' => 33, 'TRIM' => 33, 'USER' => 33, 'UUID' => 33, 'WEEK' => 33, + 'ASCII' => 33, 'ASWKB' => 33, 'ASWKT' => 33, 'ATAN2' => 33, 'COUNT' => 33, + 'CRC32' => 33, 'FIELD' => 33, 'FLOOR' => 33, 'INSTR' => 33, 'LCASE' => 33, + 'LEAST' => 33, 'LOG10' => 33, 'LOWER' => 33, 'LTRIM' => 33, 'MONTH' => 33, + 'POWER' => 33, 'QUOTE' => 33, 'ROUND' => 33, 'RTRIM' => 33, 'SLEEP' => 33, + 'SPACE' => 33, 'UCASE' => 33, 'UNHEX' => 33, 'UPPER' => 33, + 'ASTEXT' => 33, 'BIT_OR' => 33, 'BUFFER' => 33, 'CONCAT' => 33, 'DECODE' => 33, + 'ENCODE' => 33, 'EQUALS' => 33, 'FORMAT' => 33, 'IFNULL' => 33, 'ISNULL' => 33, + 'LENGTH' => 33, 'LOCATE' => 33, 'MINUTE' => 33, 'NULLIF' => 33, 'POINTN' => 33, + 'SECOND' => 33, 'STDDEV' => 33, 'STRCMP' => 33, 'SUBSTR' => 33, 'WITHIN' => 33, + 'ADDDATE' => 33, 'ADDTIME' => 33, 'AGAINST' => 33, 'BIT_AND' => 33, 'BIT_XOR' => 33, + 'CEILING' => 33, 'CHARSET' => 33, 'CROSSES' => 33, 'CURDATE' => 33, 'CURTIME' => 33, + 'DAYNAME' => 33, 'DEGREES' => 33, 'ENCRYPT' => 33, 'EXTRACT' => 33, 'GLENGTH' => 33, + 'ISEMPTY' => 33, 'IS_IPV4' => 33, 'IS_IPV6' => 33, 'QUARTER' => 33, 'RADIANS' => 33, + 'REVERSE' => 33, 'SOUNDEX' => 33, 'ST_AREA' => 33, 'ST_SRID' => 33, 'SUBDATE' => 33, + 'SUBTIME' => 33, 'SYSDATE' => 33, 'TOUCHES' => 33, 'TO_DAYS' => 33, 'VAR_POP' => 33, + 'VERSION' => 33, 'WEEKDAY' => 33, + 'ASBINARY' => 33, 'CENTROID' => 33, 'COALESCE' => 33, 'COMPRESS' => 33, 'CONTAINS' => 33, + 'DATEDIFF' => 33, 'DATE_ADD' => 33, 'DATE_SUB' => 33, 'DISJOINT' => 33, 'DISTANCE' => 33, + 'ENDPOINT' => 33, 'ENVELOPE' => 33, 'GET_LOCK' => 33, 'GREATEST' => 33, 'ISCLOSED' => 33, + 'ISSIMPLE' => 33, 'JSON_SET' => 33, 'MAKEDATE' => 33, 'MAKETIME' => 33, 'MAKE_SET' => 33, + 'MBREQUAL' => 33, 'OVERLAPS' => 33, 'PASSWORD' => 33, 'POSITION' => 33, 'ST_ASWKB' => 33, + 'ST_ASWKT' => 33, 'ST_UNION' => 33, 'TIMEDIFF' => 33, 'TRUNCATE' => 33, 'VARIANCE' => 33, + 'VAR_SAMP' => 33, 'YEARWEEK' => 33, + 'ANY_VALUE' => 33, 'BENCHMARK' => 33, 'BIT_COUNT' => 33, 'COLLATION' => 33, + 'CONCAT_WS' => 33, 'DAYOFWEEK' => 33, 'DAYOFYEAR' => 33, 'DIMENSION' => 33, + 'FROM_DAYS' => 33, 'GEOMETRYN' => 33, 'INET_ATON' => 33, 'INET_NTOA' => 33, + 'JSON_KEYS' => 33, 'JSON_TYPE' => 33, 'LOAD_FILE' => 33, 'MBRCOVERS' => 33, + 'MBREQUALS' => 33, 'MBRWITHIN' => 33, 'MONTHNAME' => 33, 'NUMPOINTS' => 33, + 'ROW_COUNT' => 33, 'ST_ASTEXT' => 33, 'ST_BUFFER' => 33, 'ST_EQUALS' => 33, + 'ST_LENGTH' => 33, 'ST_POINTN' => 33, 'ST_WITHIN' => 33, 'SUBSTRING' => 33, + 'TO_BASE64' => 33, 'UPDATEXML' => 33, + 'BIT_LENGTH' => 33, 'CONVERT_TZ' => 33, 'CONVEXHULL' => 33, 'DAYOFMONTH' => 33, + 'EXPORT_SET' => 33, 'FOUND_ROWS' => 33, 'GET_FORMAT' => 33, 'INET6_ATON' => 33, + 'INET6_NTOA' => 33, 'INTERSECTS' => 33, 'JSON_ARRAY' => 33, 'JSON_DEPTH' => 33, + 'JSON_MERGE' => 33, 'JSON_QUOTE' => 33, 'JSON_VALID' => 33, 'MBRTOUCHES' => 33, + 'MULTIPOINT' => 33, 'NAME_CONST' => 33, 'PERIOD_ADD' => 33, 'STARTPOINT' => 33, + 'STDDEV_POP' => 33, 'ST_CROSSES' => 33, 'ST_GEOHASH' => 33, 'ST_ISEMPTY' => 33, + 'ST_ISVALID' => 33, 'ST_TOUCHES' => 33, 'TO_SECONDS' => 33, 'UNCOMPRESS' => 33, + 'UUID_SHORT' => 33, 'WEEKOFYEAR' => 33, + 'AES_DECRYPT' => 33, 'AES_ENCRYPT' => 33, 'CHAR_LENGTH' => 33, 'DATE_FORMAT' => 33, + 'DES_DECRYPT' => 33, 'DES_ENCRYPT' => 33, 'FIND_IN_SET' => 33, 'FROM_BASE64' => 33, + 'GEOMFROMWKB' => 33, 'GTID_SUBSET' => 33, 'JSON_INSERT' => 33, 'JSON_LENGTH' => 33, + 'JSON_OBJECT' => 33, 'JSON_PRETTY' => 33, 'JSON_REMOVE' => 33, 'JSON_SEARCH' => 33, + 'LINEFROMWKB' => 33, 'MBRCONTAINS' => 33, 'MBRDISJOINT' => 33, 'MBROVERLAPS' => 33, + 'MICROSECOND' => 33, 'PERIOD_DIFF' => 33, 'POLYFROMWKB' => 33, 'SEC_TO_TIME' => 33, + 'STDDEV_SAMP' => 33, 'STR_TO_DATE' => 33, 'ST_ASBINARY' => 33, 'ST_CENTROID' => 33, + 'ST_CONTAINS' => 33, 'ST_DISJOINT' => 33, 'ST_DISTANCE' => 33, 'ST_ENDPOINT' => 33, + 'ST_ENVELOPE' => 33, 'ST_ISCLOSED' => 33, 'ST_ISSIMPLE' => 33, 'ST_OVERLAPS' => 33, + 'ST_SIMPLIFY' => 33, 'ST_VALIDATE' => 33, 'SYSTEM_USER' => 33, 'TIME_FORMAT' => 33, + 'TIME_TO_SEC' => 33, + 'COERCIBILITY' => 33, 'EXTERIORRING' => 33, 'EXTRACTVALUE' => 33, 'GEOMETRYTYPE' => 33, + 'GEOMFROMTEXT' => 33, 'GROUP_CONCAT' => 33, 'IS_FREE_LOCK' => 33, 'IS_USED_LOCK' => 33, + 'JSON_EXTRACT' => 33, 'JSON_REPLACE' => 33, 'JSON_UNQUOTE' => 33, 'LINEFROMTEXT' => 33, + 'MBRCOVEREDBY' => 33, 'MLINEFROMWKB' => 33, 'MPOLYFROMWKB' => 33, 'MULTIPOLYGON' => 33, + 'OCTET_LENGTH' => 33, 'OLD_PASSWORD' => 33, 'POINTFROMWKB' => 33, 'POLYFROMTEXT' => 33, + 'RANDOM_BYTES' => 33, 'RELEASE_LOCK' => 33, 'SESSION_USER' => 33, 'ST_ASGEOJSON' => 33, + 'ST_DIMENSION' => 33, 'ST_GEOMETRYN' => 33, 'ST_NUMPOINTS' => 33, 'TIMESTAMPADD' => 33, + 'CONNECTION_ID' => 33, 'FROM_UNIXTIME' => 33, 'GTID_SUBTRACT' => 33, 'INTERIORRINGN' => 33, + 'JSON_CONTAINS' => 33, 'MBRINTERSECTS' => 33, 'MLINEFROMTEXT' => 33, 'MPOINTFROMWKB' => 33, + 'MPOLYFROMTEXT' => 33, 'NUMGEOMETRIES' => 33, 'POINTFROMTEXT' => 33, 'ST_CONVEXHULL' => 33, + 'ST_DIFFERENCE' => 33, 'ST_INTERSECTS' => 33, 'ST_STARTPOINT' => 33, 'TIMESTAMPDIFF' => 33, + 'WEIGHT_STRING' => 33, + 'IS_IPV4_COMPAT' => 33, 'IS_IPV4_MAPPED' => 33, 'LAST_INSERT_ID' => 33, 'MPOINTFROMTEXT' => 33, + 'POLYGONFROMWKB' => 33, 'ST_GEOMFROMWKB' => 33, 'ST_LINEFROMWKB' => 33, 'ST_POLYFROMWKB' => 33, + 'UNIX_TIMESTAMP' => 33, + 'GEOMCOLLFROMWKB' => 33, 'MASTER_POS_WAIT' => 33, 'POLYGONFROMTEXT' => 33, 'ST_EXTERIORRING' => 33, + 'ST_GEOMETRYTYPE' => 33, 'ST_GEOMFROMTEXT' => 33, 'ST_INTERSECTION' => 33, 'ST_LINEFROMTEXT' => 33, + 'ST_MAKEENVELOPE' => 33, 'ST_MLINEFROMWKB' => 33, 'ST_MPOLYFROMWKB' => 33, 'ST_POINTFROMWKB' => 33, + 'ST_POLYFROMTEXT' => 33, 'SUBSTRING_INDEX' => 33, + 'CHARACTER_LENGTH' => 33, 'GEOMCOLLFROMTEXT' => 33, 'GEOMETRYFROMTEXT' => 33, + 'JSON_MERGE_PATCH' => 33, 'NUMINTERIORRINGS' => 33, 'ST_INTERIORRINGN' => 33, + 'ST_MLINEFROMTEXT' => 33, 'ST_MPOINTFROMWKB' => 33, 'ST_MPOLYFROMTEXT' => 33, + 'ST_NUMGEOMETRIES' => 33, 'ST_POINTFROMTEXT' => 33, 'ST_SYMDIFFERENCE' => 33, + 'JSON_ARRAY_APPEND' => 33, 'JSON_ARRAY_INSERT' => 33, 'JSON_STORAGE_FREE' => 33, + 'JSON_STORAGE_SIZE' => 33, 'LINESTRINGFROMWKB' => 33, 'MULTIPOINTFROMWKB' => 33, + 'RELEASE_ALL_LOCKS' => 33, 'ST_LATFROMGEOHASH' => 33, 'ST_MPOINTFROMTEXT' => 33, + 'ST_POLYGONFROMWKB' => 33, + 'JSON_CONTAINS_PATH' => 33, 'MULTIPOINTFROMTEXT' => 33, 'ST_BUFFER_STRATEGY' => 33, + 'ST_DISTANCE_SPHERE' => 33, 'ST_GEOMCOLLFROMTXT' => 33, 'ST_GEOMCOLLFROMWKB' => 33, + 'ST_GEOMFROMGEOJSON' => 33, 'ST_LONGFROMGEOHASH' => 33, 'ST_POLYGONFROMTEXT' => 33, + 'JSON_MERGE_PRESERVE' => 33, 'MULTIPOLYGONFROMWKB' => 33, 'ST_GEOMCOLLFROMTEXT' => 33, + 'ST_GEOMETRYFROMTEXT' => 33, 'ST_NUMINTERIORRINGS' => 33, 'ST_POINTFROMGEOHASH' => 33, + 'UNCOMPRESSED_LENGTH' => 33, + 'MULTIPOLYGONFROMTEXT' => 33, 'ST_LINESTRINGFROMWKB' => 33, 'ST_MULTIPOINTFROMWKB' => 33, + 'ST_MULTIPOINTFROMTEXT' => 33, + 'MULTILINESTRINGFROMWKB' => 33, 'ST_MULTIPOLYGONFROMWKB' => 33, + 'MULTILINESTRINGFROMTEXT' => 33, 'ST_MULTIPOLYGONFROMTEXT' => 33, + 'GEOMETRYCOLLECTIONFROMWKB' => 33, 'ST_MULTILINESTRINGFROMWKB' => 33, + 'GEOMETRYCOLLECTIONFROMTEXT' => 33, 'ST_MULTILINESTRINGFROMTEXT' => 33, 'VALIDATE_PASSWORD_STRENGTH' => 33, + 'WAIT_FOR_EXECUTED_GTID_SET' => 33, + 'ST_GEOMETRYCOLLECTIONFROMWKB' => 33, + 'ST_GEOMETRYCOLLECTIONFROMTEXT' => 33, + 'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS' => 33, + + 'IF' => 35, 'IN' => 35, + 'MOD' => 35, + 'LEFT' => 35, + 'MATCH' => 35, 'RIGHT' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, + 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, + 'LOCALTIME' => 35, + 'CURRENT_DATE' => 35, 'CURRENT_TIME' => 35, 'CURRENT_USER' => 35, + 'UTC_TIMESTAMP' => 35, + 'LOCALTIMESTAMP' => 35, + 'CURRENT_TIMESTAMP' => 35, + + 'NOT IN' => 39, + + 'DATE' => 41, 'TIME' => 41, 'YEAR' => 41, + 'POINT' => 41, + 'POLYGON' => 41, + 'TIMESTAMP' => 41, + 'LINESTRING' => 41, + 'MULTILINESTRING' => 41, + 'GEOMETRYCOLLECTION' => 41, + + 'CHAR' => 43, + 'BINARY' => 43, + 'INTERVAL' => 43, + ]; +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50100.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50100.php new file mode 100644 index 0000000..098344a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50100.php @@ -0,0 +1,294 @@ + + * @phpstan-var non-empty-array + */ + public static $KEYWORDS = [ + 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, + 'ANY' => 1, 'BDB' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, + 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, + 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, + 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'GOTO' => 1, 'HASH' => 1, + 'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, + 'MODE' => 1, 'NAME' => 1, 'NEXT' => 1, 'NONE' => 1, 'OPEN' => 1, 'PAGE' => 1, + 'PORT' => 1, 'PREV' => 1, 'ROWS' => 1, 'SOME' => 1, 'STOP' => 1, 'THAN' => 1, + 'TYPE' => 1, 'VIEW' => 1, 'WAIT' => 1, 'WORK' => 1, 'X509' => 1, + 'AFTER' => 1, 'BEGIN' => 1, 'BLOCK' => 1, 'BTREE' => 1, 'CACHE' => 1, + 'CHAIN' => 1, 'CLOSE' => 1, 'EVENT' => 1, 'EVERY' => 1, 'FIRST' => 1, + 'FIXED' => 1, 'FLUSH' => 1, 'FOUND' => 1, 'HOSTS' => 1, 'LABEL' => 1, + 'LEVEL' => 1, 'LOCAL' => 1, 'LOCKS' => 1, 'MERGE' => 1, 'MUTEX' => 1, + 'NAMES' => 1, 'NCHAR' => 1, 'OWNER' => 1, 'PHASE' => 1, 'QUERY' => 1, + 'QUICK' => 1, 'RAID0' => 1, 'RESET' => 1, 'RTREE' => 1, 'SHARE' => 1, + 'SLAVE' => 1, 'START' => 1, 'SUPER' => 1, 'SWAPS' => 1, 'TYPES' => 1, + 'UNTIL' => 1, 'VALUE' => 1, + 'ACTION' => 1, 'BACKUP' => 1, 'BINLOG' => 1, 'CIPHER' => 1, 'CLIENT' => 1, + 'COMMIT' => 1, 'ENABLE' => 1, 'ENGINE' => 1, 'ERRORS' => 1, 'ESCAPE' => 1, + 'EVENTS' => 1, 'FAULTS' => 1, 'FIELDS' => 1, 'GLOBAL' => 1, 'GRANTS' => 1, + 'IMPORT' => 1, 'INNODB' => 1, 'ISSUER' => 1, 'LEAVES' => 1, 'MASTER' => 1, + 'MEDIUM' => 1, 'MEMORY' => 1, 'MODIFY' => 1, 'OFFSET' => 1, 'PARSER' => 1, + 'PLUGIN' => 1, 'RELOAD' => 1, 'REMOVE' => 1, 'REPAIR' => 1, 'RESUME' => 1, + 'ROLLUP' => 1, 'SERVER' => 1, 'SIGNED' => 1, 'SIMPLE' => 1, 'SOCKET' => 1, + 'SONAME' => 1, 'SOUNDS' => 1, 'SOURCE' => 1, 'STARTS' => 1, 'STATUS' => 1, + 'STRING' => 1, 'TABLES' => 1, + 'AUTHORS' => 1, 'CHANGED' => 1, 'COLUMNS' => 1, 'COMMENT' => 1, 'COMPACT' => 1, + 'CONTEXT' => 1, 'DEFINER' => 1, 'DISABLE' => 1, 'DISCARD' => 1, 'DYNAMIC' => 1, + 'ENGINES' => 1, 'EXECUTE' => 1, 'HANDLER' => 1, 'INDEXES' => 1, 'INSTALL' => 1, + 'INVOKER' => 1, 'LOGFILE' => 1, 'MIGRATE' => 1, 'NO_WAIT' => 1, 'OPTIONS' => 1, + 'PARTIAL' => 1, 'PLUGINS' => 1, 'PREPARE' => 1, 'PROFILE' => 1, 'REBUILD' => 1, + 'RECOVER' => 1, 'RESTORE' => 1, 'RETURNS' => 1, 'ROUTINE' => 1, 'SESSION' => 1, + 'STORAGE' => 1, 'STRIPED' => 1, 'SUBJECT' => 1, 'SUSPEND' => 1, 'UNICODE' => 1, + 'UNKNOWN' => 1, 'UPGRADE' => 1, 'USE_FRM' => 1, 'VIRTUAL' => 1, 'WRAPPER' => 1, + 'CASCADED' => 1, 'CHECKSUM' => 1, 'DATAFILE' => 1, 'DUMPFILE' => 1, 'EXTENDED' => 1, + 'FUNCTION' => 1, 'INNOBASE' => 1, 'LANGUAGE' => 1, 'MAXVALUE' => 1, 'MAX_ROWS' => 1, + 'MAX_SIZE' => 1, 'MIN_ROWS' => 1, 'NATIONAL' => 1, 'NVARCHAR' => 1, 'ONE_SHOT' => 1, + 'PRESERVE' => 1, 'PROFILES' => 1, 'REDOFILE' => 1, 'ROLLBACK' => 1, 'SCHEDULE' => 1, + 'SECURITY' => 1, 'SHUTDOWN' => 1, 'SNAPSHOT' => 1, 'SWITCHES' => 1, 'TRIGGERS' => 1, + 'UNDOFILE' => 1, 'WARNINGS' => 1, + 'AGGREGATE' => 1, 'ALGORITHM' => 1, 'COMMITTED' => 1, 'DIRECTORY' => 1, + 'DUPLICATE' => 1, 'EXPANSION' => 1, 'IO_THREAD' => 1, 'ISOLATION' => 1, + 'NODEGROUP' => 1, 'PACK_KEYS' => 1, 'PARTITION' => 1, 'RAID_TYPE' => 1, + 'READ_ONLY' => 1, 'REDUNDANT' => 1, 'SAVEPOINT' => 1, 'SCHEDULER' => 1, + 'SQL_CACHE' => 1, 'TEMPORARY' => 1, 'TEMPTABLE' => 1, 'UNDEFINED' => 1, + 'UNINSTALL' => 1, 'VARIABLES' => 1, + 'BERKELEYDB' => 1, 'COMPLETION' => 1, 'COMPRESSED' => 1, 'CONCURRENT' => 1, + 'CONNECTION' => 1, 'CONSISTENT' => 1, 'DEALLOCATE' => 1, 'IDENTIFIED' => 1, + 'MASTER_SSL' => 1, 'NDBCLUSTER' => 1, 'PARTITIONS' => 1, 'PERSISTENT' => 1, + 'PRIVILEGES' => 1, 'REORGANISE' => 1, 'REORGANIZE' => 1, 'REPEATABLE' => 1, + 'ROW_FORMAT' => 1, 'SQL_THREAD' => 1, 'TABLESPACE' => 1, + 'EXTENT_SIZE' => 1, 'FRAC_SECOND' => 1, 'MASTER_HOST' => 1, 'MASTER_PORT' => 1, + 'MASTER_USER' => 1, 'PROCESSLIST' => 1, 'RAID_CHUNKS' => 1, 'REPLICATION' => 1, + 'SQL_TSI_DAY' => 1, 'TRANSACTION' => 1, 'UNCOMMITTED' => 1, + 'CONTRIBUTORS' => 1, 'DES_KEY_FILE' => 1, 'INITIAL_SIZE' => 1, 'PARTITIONING' => 1, + 'RELAY_THREAD' => 1, 'SERIALIZABLE' => 1, 'SQL_NO_CACHE' => 1, 'SQL_TSI_HOUR' => 1, + 'SQL_TSI_WEEK' => 1, 'SQL_TSI_YEAR' => 1, 'SUBPARTITION' => 1, + 'INSERT_METHOD' => 1, 'MASTER_SSL_CA' => 1, 'PAGE_CHECKSUM' => 1, 'RELAY_LOG_POS' => 1, + 'SQL_TSI_MONTH' => 1, 'SUBPARTITIONS' => 1, 'TRANSACTIONAL' => 1, + 'AUTO_INCREMENT' => 1, 'AVG_ROW_LENGTH' => 1, 'KEY_BLOCK_SIZE' => 1, 'MASTER_LOG_POS' => 1, + 'MASTER_SSL_KEY' => 1, 'RAID_CHUNKSIZE' => 1, 'RELAY_LOG_FILE' => 1, 'SQL_TSI_MINUTE' => 1, + 'SQL_TSI_SECOND' => 1, 'TABLE_CHECKSUM' => 1, 'USER_RESOURCES' => 1, + 'AUTOEXTEND_SIZE' => 1, 'DELAY_KEY_WRITE' => 1, 'MASTER_LOG_FILE' => 1, 'MASTER_PASSWORD' => 1, + 'MASTER_SSL_CERT' => 1, 'SQL_TSI_QUARTER' => 1, + 'MASTER_SERVER_ID' => 1, 'REDO_BUFFER_SIZE' => 1, 'UNDO_BUFFER_SIZE' => 1, + 'MASTER_SSL_CAPATH' => 1, 'MASTER_SSL_CIPHER' => 1, 'SQL_BUFFER_RESULT' => 1, + 'SQL_TSI_FRAC_SECOND' => 1, + 'MASTER_CONNECT_RETRY' => 1, 'MAX_QUERIES_PER_HOUR' => 1, 'MAX_UPDATES_PER_HOUR' => 1, + 'MAX_USER_CONNECTIONS' => 1, + 'MAX_CONNECTIONS_PER_HOUR' => 1, + + 'AS' => 3, 'BY' => 3, 'IS' => 3, 'ON' => 3, 'OR' => 3, 'TO' => 3, + 'ADD' => 3, 'ALL' => 3, 'AND' => 3, 'ASC' => 3, 'DEC' => 3, 'DIV' => 3, + 'FOR' => 3, 'NOT' => 3, 'OUT' => 3, 'SQL' => 3, 'SSL' => 3, 'USE' => 3, + 'XOR' => 3, + 'BOTH' => 3, 'CALL' => 3, 'CASE' => 3, 'DESC' => 3, 'DROP' => 3, 'DUAL' => 3, + 'EACH' => 3, 'ELSE' => 3, 'EXIT' => 3, 'FROM' => 3, 'INT1' => 3, 'INT2' => 3, + 'INT3' => 3, 'INT4' => 3, 'INT8' => 3, 'INTO' => 3, 'JOIN' => 3, 'KEYS' => 3, + 'KILL' => 3, 'LIKE' => 3, 'LOAD' => 3, 'LOCK' => 3, 'LONG' => 3, 'LOOP' => 3, + 'NULL' => 3, 'READ' => 3, 'SHOW' => 3, 'THEN' => 3, 'TRUE' => 3, 'UNDO' => 3, + 'WHEN' => 3, 'WITH' => 3, + 'ALTER' => 3, 'CHECK' => 3, 'CROSS' => 3, 'FALSE' => 3, 'FETCH' => 3, + 'FORCE' => 3, 'GRANT' => 3, 'GROUP' => 3, 'INNER' => 3, 'INOUT' => 3, + 'LEAVE' => 3, 'LIMIT' => 3, 'LINES' => 3, 'ORDER' => 3, 'OUTER' => 3, + 'PURGE' => 3, 'RANGE' => 3, 'READS' => 3, 'RLIKE' => 3, 'TABLE' => 3, + 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, + 'WRITE' => 3, + 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, + 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'UNLOCK' => 3, + 'UPDATE' => 3, + 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, + 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, + 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, + 'REQUIRE' => 3, 'SCHEMAS' => 3, 'TRIGGER' => 3, 'VARYING' => 3, + 'CONTINUE' => 3, 'DAY_HOUR' => 3, 'DESCRIBE' => 3, 'DISTINCT' => 3, 'ENCLOSED' => 3, + 'MODIFIES' => 3, 'OPTIMIZE' => 3, 'RESTRICT' => 3, 'SPECIFIC' => 3, 'SQLSTATE' => 3, + 'STARTING' => 3, 'TRAILING' => 3, 'UNSIGNED' => 3, 'ZEROFILL' => 3, + 'CONDITION' => 3, 'DATABASES' => 3, 'MIDDLEINT' => 3, 'PRECISION' => 3, + 'PROCEDURE' => 3, 'SENSITIVE' => 3, 'SEPARATOR' => 3, + 'ACCESSIBLE' => 3, 'ASENSITIVE' => 3, 'CONSTRAINT' => 3, 'DAY_MINUTE' => 3, + 'DAY_SECOND' => 3, 'OPTIONALLY' => 3, 'READ_WRITE' => 3, 'REFERENCES' => 3, + 'SQLWARNING' => 3, 'TERMINATED' => 3, 'YEAR_MONTH' => 3, + 'DISTINCTROW' => 3, 'HOUR_MINUTE' => 3, 'HOUR_SECOND' => 3, 'INSENSITIVE' => 3, + 'LOW_PRIORITY' => 3, 'SQLEXCEPTION' => 3, 'VARCHARACTER' => 3, + 'DETERMINISTIC' => 3, 'HIGH_PRIORITY' => 3, 'MINUTE_SECOND' => 3, 'STRAIGHT_JOIN' => 3, + 'SQL_BIG_RESULT' => 3, + 'DAY_MICROSECOND' => 3, + 'HOUR_MICROSECOND' => 3, 'SQL_SMALL_RESULT' => 3, + 'MINUTE_MICROSECOND' => 3, 'NO_WRITE_TO_BINLOG' => 3, 'SECOND_MICROSECOND' => 3, + 'SQL_CALC_FOUND_ROWS' => 3, + 'MASTER_SSL_VERIFY_SERVER_CERT' => 3, + + 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7, + 'AND CHAIN' => 7, 'FULL JOIN' => 7, 'IF EXISTS' => 7, 'LEFT JOIN' => 7, + 'LESS THAN' => 7, 'LOAD DATA' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, + 'ON UPDATE' => 7, 'UNION ALL' => 7, + 'CROSS JOIN' => 7, 'ESCAPED BY' => 7, 'FOR UPDATE' => 7, 'INNER JOIN' => 7, + 'LINEAR KEY' => 7, 'NO RELEASE' => 7, 'OR REPLACE' => 7, 'RIGHT JOIN' => 7, + 'ENCLOSED BY' => 7, 'LINEAR HASH' => 7, 'STARTING BY' => 7, + 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'NATURAL JOIN' => 7, 'PARTITION BY' => 7, + 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, + 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'TERMINATED BY' => 7, + 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7, + 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'FULL OUTER JOIN' => 7, 'INDEX DIRECTORY' => 7, + 'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7, + 'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7, + 'NATURAL LEFT JOIN' => 7, 'START TRANSACTION' => 7, + 'LOCK IN SHARE MODE' => 7, 'NATURAL RIGHT JOIN' => 7, 'SELECT TRANSACTION' => 7, + 'DEFAULT CHARACTER SET' => 7, + 'NATURAL LEFT OUTER JOIN' => 7, + 'NATURAL RIGHT OUTER JOIN' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, + + 'BIT' => 9, 'XML' => 9, + 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, + 'ARRAY' => 9, + 'SERIAL' => 9, + 'BOOLEAN' => 9, + 'DATETIME' => 9, 'GEOMETRY' => 9, 'MULTISET' => 9, + 'MULTILINEPOINT' => 9, + 'MULTILINEPOLYGON' => 9, + + 'INT' => 11, 'SET' => 11, + 'BLOB' => 11, 'REAL' => 11, + 'FLOAT' => 11, + 'BIGINT' => 11, 'DOUBLE' => 11, + 'DECIMAL' => 11, 'INTEGER' => 11, 'NUMERIC' => 11, 'TINYINT' => 11, 'VARCHAR' => 11, + 'LONGBLOB' => 11, 'LONGTEXT' => 11, 'SMALLINT' => 11, 'TINYBLOB' => 11, 'TINYTEXT' => 11, + 'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11, + 'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11, + + 'BINARY VARYING' => 15, + + 'KEY' => 19, + 'INDEX' => 19, + 'UNIQUE' => 19, + 'SPATIAL' => 19, + 'FULLTEXT' => 19, + + 'INDEX KEY' => 23, + 'UNIQUE KEY' => 23, + 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23, + 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23, + 'SPATIAL INDEX' => 23, + 'FULLTEXT INDEX' => 23, + + 'X' => 33, 'Y' => 33, + 'LN' => 33, 'PI' => 33, + 'ABS' => 33, 'AVG' => 33, 'BIN' => 33, 'COS' => 33, 'COT' => 33, 'DAY' => 33, + 'ELT' => 33, 'EXP' => 33, 'HEX' => 33, 'LOG' => 33, 'MAX' => 33, 'MD5' => 33, + 'MID' => 33, 'MIN' => 33, 'NOW' => 33, 'OCT' => 33, 'ORD' => 33, 'POW' => 33, + 'SHA' => 33, 'SIN' => 33, 'STD' => 33, 'SUM' => 33, 'TAN' => 33, + 'ACOS' => 33, 'AREA' => 33, 'ASIN' => 33, 'ATAN' => 33, 'CAST' => 33, 'CEIL' => 33, + 'CONV' => 33, 'HOUR' => 33, 'LOG2' => 33, 'LPAD' => 33, 'RAND' => 33, 'RPAD' => 33, + 'SHA1' => 33, 'SIGN' => 33, 'SQRT' => 33, 'SRID' => 33, 'TRIM' => 33, 'USER' => 33, + 'UUID' => 33, 'WEEK' => 33, + 'ASCII' => 33, 'ASWKB' => 33, 'ASWKT' => 33, 'ATAN2' => 33, 'COUNT' => 33, + 'CRC32' => 33, 'DECOD' => 33, 'FIELD' => 33, 'FLOOR' => 33, 'INSTR' => 33, + 'LCASE' => 33, 'LEAST' => 33, 'LOG10' => 33, 'LOWER' => 33, 'LTRIM' => 33, + 'MONTH' => 33, 'POWER' => 33, 'QUOTE' => 33, 'ROUND' => 33, 'RTRIM' => 33, + 'SLEEP' => 33, 'SPACE' => 33, 'UCASE' => 33, 'UNHEX' => 33, 'UPPER' => 33, + 'ASTEXT' => 33, 'BIT_OR' => 33, 'CONCAT' => 33, 'ENCODE' => 33, 'EQUALS' => 33, + 'FORMAT' => 33, 'IFNULL' => 33, 'ISNULL' => 33, 'LENGTH' => 33, 'LOCATE' => 33, + 'MINUTE' => 33, 'NULLIF' => 33, 'POINTN' => 33, 'SECOND' => 33, 'STDDEV' => 33, + 'STRCMP' => 33, 'SUBSTR' => 33, 'WITHIN' => 33, + 'ADDDATE' => 33, 'ADDTIME' => 33, 'AGAINST' => 33, 'BIT_AND' => 33, 'BIT_XOR' => 33, + 'CEILING' => 33, 'CHARSET' => 33, 'CROSSES' => 33, 'CURDATE' => 33, 'CURTIME' => 33, + 'DAYNAME' => 33, 'DEGREES' => 33, 'ENCRYPT' => 33, 'EXTRACT' => 33, 'GLENGTH' => 33, + 'ISEMPTY' => 33, 'QUARTER' => 33, 'RADIANS' => 33, 'REVERSE' => 33, 'SOUNDEX' => 33, + 'SUBDATE' => 33, 'SUBTIME' => 33, 'SYSDATE' => 33, 'TOUCHES' => 33, 'TO_DAYS' => 33, + 'VAR_POP' => 33, 'VERSION' => 33, 'WEEKDAY' => 33, + 'ASBINARY' => 33, 'CENTROID' => 33, 'COALESCE' => 33, 'COMPRESS' => 33, 'CONTAINS' => 33, + 'DATEDIFF' => 33, 'DATE_ADD' => 33, 'DATE_SUB' => 33, 'DISJOINT' => 33, 'ENDPOINT' => 33, + 'ENVELOPE' => 33, 'GET_LOCK' => 33, 'GREATEST' => 33, 'ISCLOSED' => 33, 'ISSIMPLE' => 33, + 'MAKEDATE' => 33, 'MAKETIME' => 33, 'MAKE_SET' => 33, 'MBREQUAL' => 33, 'OVERLAPS' => 33, + 'PASSWORD' => 33, 'POSITION' => 33, 'TIMEDIFF' => 33, 'TRUNCATE' => 33, 'VARIANCE' => 33, + 'VAR_SAMP' => 33, 'YEARWEEK' => 33, + 'BENCHMARK' => 33, 'BIT_COUNT' => 33, 'COLLATION' => 33, 'CONCAT_WS' => 33, + 'DAYOFWEEK' => 33, 'DAYOFYEAR' => 33, 'DIMENSION' => 33, 'FROM_DAYS' => 33, + 'GEOMETRYN' => 33, 'INET_ATON' => 33, 'INET_NTOA' => 33, 'LOAD_FILE' => 33, + 'MBRWITHIN' => 33, 'MONTHNAME' => 33, 'NUMPOINTS' => 33, 'ROW_COUNT' => 33, + 'SUBSTRING' => 33, 'UPDATEXML' => 33, + 'BIT_LENGTH' => 33, 'CONVERT_TZ' => 33, 'DAYOFMONTH' => 33, 'EXPORT_SET' => 33, + 'FOUND_ROWS' => 33, 'GET_FORMAT' => 33, 'INTERSECTS' => 33, 'MBRTOUCHES' => 33, + 'MULTIPOINT' => 33, 'NAME_CONST' => 33, 'PERIOD_ADD' => 33, 'STARTPOINT' => 33, + 'STDDEV_POP' => 33, 'UNCOMPRESS' => 33, 'UUID_SHORT' => 33, 'WEEKOFYEAR' => 33, + 'AES_DECRYPT' => 33, 'AES_ENCRYPT' => 33, 'CHAR_LENGTH' => 33, 'DATE_FORMAT' => 33, + 'DES_DECRYPT' => 33, 'DES_ENCRYPT' => 33, 'FIND_IN_SET' => 33, 'GEOMFROMWKB' => 33, + 'LINEFROMWKB' => 33, 'MBRCONTAINS' => 33, 'MBRDISJOINT' => 33, 'MBROVERLAPS' => 33, + 'MICROSECOND' => 33, 'PERIOD_DIFF' => 33, 'POLYFROMWKB' => 33, 'SEC_TO_TIME' => 33, + 'STDDEV_SAMP' => 33, 'STR_TO_DATE' => 33, 'SYSTEM_USER' => 33, 'TIME_FORMAT' => 33, + 'TIME_TO_SEC' => 33, + 'COERCIBILITY' => 33, 'EXTERIORRING' => 33, 'EXTRACTVALUE' => 33, 'GEOMETRYTYPE' => 33, + 'GEOMFROMTEXT' => 33, 'GROUP_CONCAT' => 33, 'IS_FREE_LOCK' => 33, 'IS_USED_LOCK' => 33, + 'LINEFROMTEXT' => 33, 'MLINEFROMWKB' => 33, 'MPOLYFROMWKB' => 33, 'MULTIPOLYGON' => 33, + 'OCTET_LENGTH' => 33, 'OLD_PASSWORD' => 33, 'POINTFROMWKB' => 33, 'POLYFROMTEXT' => 33, + 'RELEASE_LOCK' => 33, 'SESSION_USER' => 33, 'TIMESTAMPADD' => 33, + 'CONNECTION_ID' => 33, 'FROM_UNIXTIME' => 33, 'INTERIORRINGN' => 33, 'MBRINTERSECTS' => 33, + 'MLINEFROMTEXT' => 33, 'MPOINTFROMWKB' => 33, 'MPOLYFROMTEXT' => 33, 'NUMGEOMETRIES' => 33, + 'POINTFROMTEXT' => 33, 'TIMESTAMPDIFF' => 33, + 'LAST_INSERT_ID' => 33, 'MPOINTFROMTEXT' => 33, 'POLYGONFROMWKB' => 33, 'UNIX_TIMESTAMP' => 33, + 'GEOMCOLLFROMWKB' => 33, 'MASTER_POS_WAIT' => 33, 'POLYGONFROMTEXT' => 33, 'SUBSTRING_INDEX' => 33, + 'CHARACTER_LENGTH' => 33, 'GEOMCOLLFROMTEXT' => 33, 'GEOMETRYFROMTEXT' => 33, + 'NUMINTERIORRINGS' => 33, + 'LINESTRINGFROMWKB' => 33, 'MULTIPOINTFROMWKB' => 33, + 'MULTIPOINTFROMTEXT' => 33, + 'MULTIPOLYGONFROMWKB' => 33, 'UNCOMPRESSED_LENGTH' => 33, + 'MULTIPOLYGONFROMTEXT' => 33, + 'MULTILINESTRINGFROMWKB' => 33, + 'MULTILINESTRINGFROMTEXT' => 33, + 'GEOMETRYCOLLECTIONFROMWKB' => 33, + 'GEOMETRYCOLLECTIONFROMTEXT' => 33, + + 'IF' => 35, 'IN' => 35, + 'MOD' => 35, + 'LEFT' => 35, + 'MATCH' => 35, 'RIGHT' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, + 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, + 'LOCALTIME' => 35, + 'CURRENT_DATE' => 35, 'CURRENT_TIME' => 35, 'CURRENT_USER' => 35, + 'UTC_TIMESTAMP' => 35, + 'LOCALTIMESTAMP' => 35, + 'CURRENT_TIMESTAMP' => 35, + + 'NOT IN' => 39, + + 'DATE' => 41, 'TIME' => 41, 'YEAR' => 41, + 'POINT' => 41, + 'POLYGON' => 41, + 'TIMESTAMP' => 41, + 'LINESTRING' => 41, + 'MULTILINESTRING' => 41, + 'GEOMETRYCOLLECTION' => 41, + + 'CHAR' => 43, + 'BINARY' => 43, + 'INTERVAL' => 43, + ]; +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50700.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50700.php new file mode 100644 index 0000000..6d06c4c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50700.php @@ -0,0 +1,347 @@ + + * @phpstan-var non-empty-array + */ + public static $KEYWORDS = [ + 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, + 'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1, + 'ONE' => 1, 'ROW' => 1, 'XID' => 1, + 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, + 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, + 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1, + 'NAME' => 1, 'NEXT' => 1, 'NONE' => 1, 'ONLY' => 1, 'OPEN' => 1, 'PAGE' => 1, + 'PORT' => 1, 'PREV' => 1, 'ROWS' => 1, 'SLOW' => 1, 'SOME' => 1, 'STOP' => 1, + 'THAN' => 1, 'TYPE' => 1, 'VIEW' => 1, 'WAIT' => 1, 'WORK' => 1, 'X509' => 1, + 'AFTER' => 1, 'BEGIN' => 1, 'BLOCK' => 1, 'BTREE' => 1, 'CACHE' => 1, + 'CHAIN' => 1, 'CLOSE' => 1, 'ERROR' => 1, 'EVENT' => 1, 'EVERY' => 1, + 'FIRST' => 1, 'FIXED' => 1, 'FLUSH' => 1, 'FOUND' => 1, 'HOSTS' => 1, + 'LEVEL' => 1, 'LOCAL' => 1, 'LOCKS' => 1, 'MERGE' => 1, 'MUTEX' => 1, + 'NAMES' => 1, 'NCHAR' => 1, 'NEVER' => 1, 'OWNER' => 1, 'PHASE' => 1, + 'PROXY' => 1, 'QUERY' => 1, 'QUICK' => 1, 'RELAY' => 1, 'RESET' => 1, + 'RTREE' => 1, 'SHARE' => 1, 'SLAVE' => 1, 'START' => 1, 'SUPER' => 1, + 'SWAPS' => 1, 'TYPES' => 1, 'UNTIL' => 1, 'VALUE' => 1, + 'ACTION' => 1, 'ALWAYS' => 1, 'BACKUP' => 1, 'BINLOG' => 1, 'CIPHER' => 1, + 'CLIENT' => 1, 'COMMIT' => 1, 'ENABLE' => 1, 'ENGINE' => 1, 'ERRORS' => 1, + 'ESCAPE' => 1, 'EVENTS' => 1, 'EXPIRE' => 1, 'EXPORT' => 1, 'FAULTS' => 1, + 'FIELDS' => 1, 'FILTER' => 1, 'GLOBAL' => 1, 'GRANTS' => 1, 'IMPORT' => 1, + 'ISSUER' => 1, 'LEAVES' => 1, 'MASTER' => 1, 'MEDIUM' => 1, 'MEMORY' => 1, + 'MODIFY' => 1, 'NUMBER' => 1, 'OFFSET' => 1, 'PARSER' => 1, 'PLUGIN' => 1, + 'RELOAD' => 1, 'REMOVE' => 1, 'REPAIR' => 1, 'RESUME' => 1, 'ROLLUP' => 1, + 'SERVER' => 1, 'SIGNED' => 1, 'SIMPLE' => 1, 'SOCKET' => 1, 'SONAME' => 1, + 'SOUNDS' => 1, 'SOURCE' => 1, 'STARTS' => 1, 'STATUS' => 1, 'STRING' => 1, + 'TABLES' => 1, + 'ACCOUNT' => 1, 'ANALYSE' => 1, 'CHANGED' => 1, 'CHANNEL' => 1, 'COLUMNS' => 1, + 'COMMENT' => 1, 'COMPACT' => 1, 'CONTEXT' => 1, 'CURRENT' => 1, 'DEFINER' => 1, + 'DISABLE' => 1, 'DISCARD' => 1, 'DYNAMIC' => 1, 'ENGINES' => 1, 'EXECUTE' => 1, + 'FOLLOWS' => 1, 'GENERAL' => 1, 'HANDLER' => 1, 'INDEXES' => 1, 'INSTALL' => 1, + 'INVOKER' => 1, 'LOGFILE' => 1, 'MIGRATE' => 1, 'NO_WAIT' => 1, 'OPTIONS' => 1, + 'PARTIAL' => 1, 'PLUGINS' => 1, 'PREPARE' => 1, 'PROFILE' => 1, 'REBUILD' => 1, + 'RECOVER' => 1, 'RESTORE' => 1, 'RETURNS' => 1, 'ROUTINE' => 1, 'SESSION' => 1, + 'STACKED' => 1, 'STORAGE' => 1, 'SUBJECT' => 1, 'SUSPEND' => 1, 'UNICODE' => 1, + 'UNKNOWN' => 1, 'UPGRADE' => 1, 'USE_FRM' => 1, 'WITHOUT' => 1, 'WRAPPER' => 1, + 'CASCADED' => 1, 'CHECKSUM' => 1, 'DATAFILE' => 1, 'DUMPFILE' => 1, 'EXCHANGE' => 1, + 'EXTENDED' => 1, 'FUNCTION' => 1, 'LANGUAGE' => 1, 'MAX_ROWS' => 1, 'MAX_SIZE' => 1, + 'MIN_ROWS' => 1, 'NATIONAL' => 1, 'NVARCHAR' => 1, 'PRECEDES' => 1, 'PRESERVE' => 1, + 'PROFILES' => 1, 'REDOFILE' => 1, 'RELAYLOG' => 1, 'ROLLBACK' => 1, 'SCHEDULE' => 1, + 'SECURITY' => 1, 'SHUTDOWN' => 1, 'SNAPSHOT' => 1, 'SWITCHES' => 1, 'TRIGGERS' => 1, + 'UNDOFILE' => 1, 'WARNINGS' => 1, + 'AGGREGATE' => 1, 'ALGORITHM' => 1, 'COMMITTED' => 1, 'DIRECTORY' => 1, + 'DUPLICATE' => 1, 'EXPANSION' => 1, 'IO_THREAD' => 1, 'ISOLATION' => 1, + 'NODEGROUP' => 1, 'PACK_KEYS' => 1, 'READ_ONLY' => 1, 'REDUNDANT' => 1, + 'SAVEPOINT' => 1, 'SQL_CACHE' => 1, 'TEMPORARY' => 1, 'TEMPTABLE' => 1, + 'UNDEFINED' => 1, 'UNINSTALL' => 1, 'VARIABLES' => 1, + 'COMPLETION' => 1, 'COMPRESSED' => 1, 'CONCURRENT' => 1, 'CONNECTION' => 1, + 'CONSISTENT' => 1, 'DEALLOCATE' => 1, 'IDENTIFIED' => 1, 'MASTER_SSL' => 1, + 'NDBCLUSTER' => 1, 'PARTITIONS' => 1, 'PERSISTENT' => 1, 'PLUGIN_DIR' => 1, + 'PRIVILEGES' => 1, 'REORGANIZE' => 1, 'REPEATABLE' => 1, 'ROW_FORMAT' => 1, + 'SQL_THREAD' => 1, 'TABLESPACE' => 1, 'TABLE_NAME' => 1, 'VALIDATION' => 1, + 'COLUMN_NAME' => 1, 'COMPRESSION' => 1, 'CURSOR_NAME' => 1, 'DIAGNOSTICS' => 1, + 'EXTENT_SIZE' => 1, 'MASTER_HOST' => 1, 'MASTER_PORT' => 1, 'MASTER_USER' => 1, + 'MYSQL_ERRNO' => 1, 'NONBLOCKING' => 1, 'PROCESSLIST' => 1, 'REPLICATION' => 1, + 'SCHEMA_NAME' => 1, 'SQL_TSI_DAY' => 1, 'TRANSACTION' => 1, 'UNCOMMITTED' => 1, + 'CATALOG_NAME' => 1, 'CLASS_ORIGIN' => 1, 'DEFAULT_AUTH' => 1, 'DES_KEY_FILE' => 1, + 'INITIAL_SIZE' => 1, 'MASTER_DELAY' => 1, 'MESSAGE_TEXT' => 1, 'PARTITIONING' => 1, + 'RELAY_THREAD' => 1, 'SERIALIZABLE' => 1, 'SQL_NO_CACHE' => 1, 'SQL_TSI_HOUR' => 1, + 'SQL_TSI_WEEK' => 1, 'SQL_TSI_YEAR' => 1, 'SUBPARTITION' => 1, + 'COLUMN_FORMAT' => 1, 'INSERT_METHOD' => 1, 'MASTER_SSL_CA' => 1, 'RELAY_LOG_POS' => 1, + 'SQL_TSI_MONTH' => 1, 'SUBPARTITIONS' => 1, + 'AUTO_INCREMENT' => 1, 'AVG_ROW_LENGTH' => 1, 'KEY_BLOCK_SIZE' => 1, 'MASTER_LOG_POS' => 1, + 'MASTER_SSL_CRL' => 1, 'MASTER_SSL_KEY' => 1, 'RELAY_LOG_FILE' => 1, 'SQL_TSI_MINUTE' => 1, + 'SQL_TSI_SECOND' => 1, 'TABLE_CHECKSUM' => 1, 'USER_RESOURCES' => 1, + 'AUTOEXTEND_SIZE' => 1, 'CONSTRAINT_NAME' => 1, 'DELAY_KEY_WRITE' => 1, 'FILE_BLOCK_SIZE' => 1, + 'MASTER_LOG_FILE' => 1, 'MASTER_PASSWORD' => 1, 'MASTER_SSL_CERT' => 1, 'PARSE_GCOL_EXPR' => 1, + 'REPLICATE_DO_DB' => 1, 'SQL_AFTER_GTIDS' => 1, 'SQL_TSI_QUARTER' => 1, 'SUBCLASS_ORIGIN' => 1, + 'MASTER_SERVER_ID' => 1, 'REDO_BUFFER_SIZE' => 1, 'SQL_BEFORE_GTIDS' => 1, + 'STATS_PERSISTENT' => 1, 'UNDO_BUFFER_SIZE' => 1, + 'CONSTRAINT_SCHEMA' => 1, 'GROUP_REPLICATION' => 1, 'IGNORE_SERVER_IDS' => 1, + 'MASTER_SSL_CAPATH' => 1, 'MASTER_SSL_CIPHER' => 1, 'RETURNED_SQLSTATE' => 1, + 'SQL_BUFFER_RESULT' => 1, 'STATS_AUTO_RECALC' => 1, + 'CONSTRAINT_CATALOG' => 1, 'MASTER_RETRY_COUNT' => 1, 'MASTER_SSL_CRLPATH' => 1, + 'MAX_STATEMENT_TIME' => 1, 'REPLICATE_DO_TABLE' => 1, 'SQL_AFTER_MTS_GAPS' => 1, + 'STATS_SAMPLE_PAGES' => 1, + 'REPLICATE_IGNORE_DB' => 1, + 'MASTER_AUTO_POSITION' => 1, 'MASTER_CONNECT_RETRY' => 1, 'MAX_QUERIES_PER_HOUR' => 1, + 'MAX_UPDATES_PER_HOUR' => 1, 'MAX_USER_CONNECTIONS' => 1, 'REPLICATE_REWRITE_DB' => 1, + 'REPLICATE_IGNORE_TABLE' => 1, + 'MASTER_HEARTBEAT_PERIOD' => 1, 'REPLICATE_WILD_DO_TABLE' => 1, + 'MAX_CONNECTIONS_PER_HOUR' => 1, + 'REPLICATE_WILD_IGNORE_TABLE' => 1, + + 'AS' => 3, 'BY' => 3, 'IS' => 3, 'ON' => 3, 'OR' => 3, 'TO' => 3, + 'ADD' => 3, 'ALL' => 3, 'AND' => 3, 'ASC' => 3, 'DEC' => 3, 'DIV' => 3, + 'FOR' => 3, 'GET' => 3, 'NOT' => 3, 'OUT' => 3, 'SQL' => 3, 'SSL' => 3, + 'USE' => 3, 'XOR' => 3, + 'BOTH' => 3, 'CALL' => 3, 'CASE' => 3, 'DESC' => 3, 'DROP' => 3, 'DUAL' => 3, + 'EACH' => 3, 'ELSE' => 3, 'EXIT' => 3, 'FROM' => 3, 'INT1' => 3, 'INT2' => 3, + 'INT3' => 3, 'INT4' => 3, 'INT8' => 3, 'INTO' => 3, 'JOIN' => 3, 'KEYS' => 3, + 'KILL' => 3, 'LIKE' => 3, 'LOAD' => 3, 'LOCK' => 3, 'LONG' => 3, 'LOOP' => 3, + 'NULL' => 3, 'READ' => 3, 'SHOW' => 3, 'THEN' => 3, 'TRUE' => 3, 'UNDO' => 3, + 'WHEN' => 3, 'WITH' => 3, + 'ALTER' => 3, 'CHECK' => 3, 'CROSS' => 3, 'FALSE' => 3, 'FETCH' => 3, + 'FORCE' => 3, 'GRANT' => 3, 'GROUP' => 3, 'INNER' => 3, 'INOUT' => 3, + 'LEAVE' => 3, 'LIMIT' => 3, 'LINES' => 3, 'ORDER' => 3, 'OUTER' => 3, + 'PURGE' => 3, 'RANGE' => 3, 'READS' => 3, 'RLIKE' => 3, 'TABLE' => 3, + 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, + 'WRITE' => 3, + 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, + 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, + 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, + 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SIGNAL' => 3, + 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, + 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, + 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, + 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, + 'REQUIRE' => 3, 'SCHEMAS' => 3, 'TRIGGER' => 3, 'VARYING' => 3, 'VIRTUAL' => 3, + 'CONTINUE' => 3, 'DAY_HOUR' => 3, 'DESCRIBE' => 3, 'DISTINCT' => 3, 'ENCLOSED' => 3, + 'MAXVALUE' => 3, 'MODIFIES' => 3, 'OPTIMIZE' => 3, 'RESIGNAL' => 3, 'RESTRICT' => 3, + 'SPECIFIC' => 3, 'SQLSTATE' => 3, 'STARTING' => 3, 'TRAILING' => 3, 'UNSIGNED' => 3, + 'ZEROFILL' => 3, + 'CONDITION' => 3, 'DATABASES' => 3, 'GENERATED' => 3, 'MIDDLEINT' => 3, + 'PARTITION' => 3, 'PRECISION' => 3, 'PROCEDURE' => 3, 'SENSITIVE' => 3, + 'SEPARATOR' => 3, + 'ACCESSIBLE' => 3, 'ASENSITIVE' => 3, 'CONSTRAINT' => 3, 'DAY_MINUTE' => 3, + 'DAY_SECOND' => 3, 'OPTIONALLY' => 3, 'READ_WRITE' => 3, 'REFERENCES' => 3, + 'SQLWARNING' => 3, 'TERMINATED' => 3, 'YEAR_MONTH' => 3, + 'DISTINCTROW' => 3, 'HOUR_MINUTE' => 3, 'HOUR_SECOND' => 3, 'INSENSITIVE' => 3, + 'MASTER_BIND' => 3, + 'LOW_PRIORITY' => 3, 'SQLEXCEPTION' => 3, 'VARCHARACTER' => 3, + 'DETERMINISTIC' => 3, 'HIGH_PRIORITY' => 3, 'MINUTE_SECOND' => 3, 'STRAIGHT_JOIN' => 3, + 'IO_AFTER_GTIDS' => 3, 'SQL_BIG_RESULT' => 3, + 'DAY_MICROSECOND' => 3, 'IO_BEFORE_GTIDS' => 3, 'OPTIMIZER_COSTS' => 3, + 'HOUR_MICROSECOND' => 3, 'SQL_SMALL_RESULT' => 3, + 'MINUTE_MICROSECOND' => 3, 'NO_WRITE_TO_BINLOG' => 3, 'SECOND_MICROSECOND' => 3, + 'SQL_CALC_FOUND_ROWS' => 3, + 'MASTER_SSL_VERIFY_SERVER_CERT' => 3, + + 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7, + 'AND CHAIN' => 7, 'FULL JOIN' => 7, 'IF EXISTS' => 7, 'LEFT JOIN' => 7, + 'LESS THAN' => 7, 'LOAD DATA' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, + 'ON UPDATE' => 7, 'UNION ALL' => 7, + 'CROSS JOIN' => 7, 'ESCAPED BY' => 7, 'FOR UPDATE' => 7, 'INNER JOIN' => 7, + 'LINEAR KEY' => 7, 'NO RELEASE' => 7, 'OR REPLACE' => 7, 'RIGHT JOIN' => 7, + 'ENCLOSED BY' => 7, 'LINEAR HASH' => 7, 'STARTING BY' => 7, + 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'NATURAL JOIN' => 7, 'PARTITION BY' => 7, + 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, + 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'TERMINATED BY' => 7, + 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7, + 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'FULL OUTER JOIN' => 7, 'INDEX DIRECTORY' => 7, + 'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7, + 'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7, + 'NATURAL LEFT JOIN' => 7, 'START TRANSACTION' => 7, + 'LOCK IN SHARE MODE' => 7, 'NATURAL RIGHT JOIN' => 7, 'SELECT TRANSACTION' => 7, + 'DEFAULT CHARACTER SET' => 7, + 'NATURAL LEFT OUTER JOIN' => 7, + 'NATURAL RIGHT OUTER JOIN' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, + + 'BIT' => 9, 'XML' => 9, + 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, + 'ARRAY' => 9, + 'SERIAL' => 9, + 'BOOLEAN' => 9, + 'DATETIME' => 9, 'GEOMETRY' => 9, 'MULTISET' => 9, + 'MULTILINEPOINT' => 9, + 'MULTILINEPOLYGON' => 9, + + 'INT' => 11, 'SET' => 11, + 'BLOB' => 11, 'REAL' => 11, + 'FLOAT' => 11, + 'BIGINT' => 11, 'DOUBLE' => 11, + 'DECIMAL' => 11, 'INTEGER' => 11, 'NUMERIC' => 11, 'TINYINT' => 11, 'VARCHAR' => 11, + 'LONGBLOB' => 11, 'LONGTEXT' => 11, 'SMALLINT' => 11, 'TINYBLOB' => 11, 'TINYTEXT' => 11, + 'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11, + 'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11, + + 'BINARY VARYING' => 15, + + 'KEY' => 19, + 'INDEX' => 19, + 'UNIQUE' => 19, + 'SPATIAL' => 19, + 'FULLTEXT' => 19, + + 'INDEX KEY' => 23, + 'UNIQUE KEY' => 23, + 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23, + 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23, + 'SPATIAL INDEX' => 23, + 'FULLTEXT INDEX' => 23, + + 'X' => 33, 'Y' => 33, + 'LN' => 33, 'PI' => 33, + 'ABS' => 33, 'AVG' => 33, 'BIN' => 33, 'COS' => 33, 'COT' => 33, 'DAY' => 33, + 'ELT' => 33, 'EXP' => 33, 'HEX' => 33, 'LOG' => 33, 'MAX' => 33, 'MD5' => 33, + 'MID' => 33, 'MIN' => 33, 'NOW' => 33, 'OCT' => 33, 'ORD' => 33, 'POW' => 33, + 'SHA' => 33, 'SIN' => 33, 'STD' => 33, 'SUM' => 33, 'TAN' => 33, + 'ACOS' => 33, 'AREA' => 33, 'ASIN' => 33, 'ATAN' => 33, 'CAST' => 33, 'CEIL' => 33, + 'CONV' => 33, 'HOUR' => 33, 'LOG2' => 33, 'LPAD' => 33, 'RAND' => 33, 'RPAD' => 33, + 'SHA1' => 33, 'SHA2' => 33, 'SIGN' => 33, 'SQRT' => 33, 'SRID' => 33, 'ST_X' => 33, + 'ST_Y' => 33, 'TRIM' => 33, 'USER' => 33, 'UUID' => 33, 'WEEK' => 33, + 'ASCII' => 33, 'ASWKB' => 33, 'ASWKT' => 33, 'ATAN2' => 33, 'COUNT' => 33, + 'CRC32' => 33, 'FIELD' => 33, 'FLOOR' => 33, 'INSTR' => 33, 'LCASE' => 33, + 'LEAST' => 33, 'LOG10' => 33, 'LOWER' => 33, 'LTRIM' => 33, 'MONTH' => 33, + 'POWER' => 33, 'QUOTE' => 33, 'ROUND' => 33, 'RTRIM' => 33, 'SLEEP' => 33, + 'SPACE' => 33, 'UCASE' => 33, 'UNHEX' => 33, 'UPPER' => 33, + 'ASTEXT' => 33, 'BIT_OR' => 33, 'BUFFER' => 33, 'CONCAT' => 33, 'DECODE' => 33, + 'ENCODE' => 33, 'EQUALS' => 33, 'FORMAT' => 33, 'IFNULL' => 33, 'ISNULL' => 33, + 'LENGTH' => 33, 'LOCATE' => 33, 'MINUTE' => 33, 'NULLIF' => 33, 'POINTN' => 33, + 'SECOND' => 33, 'STDDEV' => 33, 'STRCMP' => 33, 'SUBSTR' => 33, 'WITHIN' => 33, + 'ADDDATE' => 33, 'ADDTIME' => 33, 'AGAINST' => 33, 'BIT_AND' => 33, 'BIT_XOR' => 33, + 'CEILING' => 33, 'CHARSET' => 33, 'CROSSES' => 33, 'CURDATE' => 33, 'CURTIME' => 33, + 'DAYNAME' => 33, 'DEGREES' => 33, 'ENCRYPT' => 33, 'EXTRACT' => 33, 'GLENGTH' => 33, + 'ISEMPTY' => 33, 'IS_IPV4' => 33, 'IS_IPV6' => 33, 'QUARTER' => 33, 'RADIANS' => 33, + 'REVERSE' => 33, 'SOUNDEX' => 33, 'ST_AREA' => 33, 'ST_SRID' => 33, 'SUBDATE' => 33, + 'SUBTIME' => 33, 'SYSDATE' => 33, 'TOUCHES' => 33, 'TO_DAYS' => 33, 'VAR_POP' => 33, + 'VERSION' => 33, 'WEEKDAY' => 33, + 'ASBINARY' => 33, 'CENTROID' => 33, 'COALESCE' => 33, 'COMPRESS' => 33, 'CONTAINS' => 33, + 'DATEDIFF' => 33, 'DATE_ADD' => 33, 'DATE_SUB' => 33, 'DISJOINT' => 33, 'DISTANCE' => 33, + 'ENDPOINT' => 33, 'ENVELOPE' => 33, 'GET_LOCK' => 33, 'GREATEST' => 33, 'ISCLOSED' => 33, + 'ISSIMPLE' => 33, 'JSON_SET' => 33, 'MAKEDATE' => 33, 'MAKETIME' => 33, 'MAKE_SET' => 33, + 'MBREQUAL' => 33, 'OVERLAPS' => 33, 'PASSWORD' => 33, 'POSITION' => 33, 'ST_ASWKB' => 33, + 'ST_ASWKT' => 33, 'ST_UNION' => 33, 'TIMEDIFF' => 33, 'TRUNCATE' => 33, 'VARIANCE' => 33, + 'VAR_SAMP' => 33, 'YEARWEEK' => 33, + 'ANY_VALUE' => 33, 'BENCHMARK' => 33, 'BIT_COUNT' => 33, 'COLLATION' => 33, + 'CONCAT_WS' => 33, 'DAYOFWEEK' => 33, 'DAYOFYEAR' => 33, 'DIMENSION' => 33, + 'FROM_DAYS' => 33, 'GEOMETRYN' => 33, 'INET_ATON' => 33, 'INET_NTOA' => 33, + 'JSON_KEYS' => 33, 'JSON_TYPE' => 33, 'LOAD_FILE' => 33, 'MBRCOVERS' => 33, + 'MBREQUALS' => 33, 'MBRWITHIN' => 33, 'MONTHNAME' => 33, 'NUMPOINTS' => 33, + 'ROW_COUNT' => 33, 'ST_ASTEXT' => 33, 'ST_BUFFER' => 33, 'ST_EQUALS' => 33, + 'ST_LENGTH' => 33, 'ST_POINTN' => 33, 'ST_WITHIN' => 33, 'SUBSTRING' => 33, + 'TO_BASE64' => 33, 'UPDATEXML' => 33, + 'BIT_LENGTH' => 33, 'CONVERT_TZ' => 33, 'CONVEXHULL' => 33, 'DAYOFMONTH' => 33, + 'EXPORT_SET' => 33, 'FOUND_ROWS' => 33, 'GET_FORMAT' => 33, 'INET6_ATON' => 33, + 'INET6_NTOA' => 33, 'INTERSECTS' => 33, 'JSON_ARRAY' => 33, 'JSON_DEPTH' => 33, + 'JSON_MERGE' => 33, 'JSON_QUOTE' => 33, 'JSON_VALID' => 33, 'MBRTOUCHES' => 33, + 'MULTIPOINT' => 33, 'NAME_CONST' => 33, 'PERIOD_ADD' => 33, 'STARTPOINT' => 33, + 'STDDEV_POP' => 33, 'ST_CROSSES' => 33, 'ST_GEOHASH' => 33, 'ST_ISEMPTY' => 33, + 'ST_ISVALID' => 33, 'ST_TOUCHES' => 33, 'TO_SECONDS' => 33, 'UNCOMPRESS' => 33, + 'UUID_SHORT' => 33, 'WEEKOFYEAR' => 33, + 'AES_DECRYPT' => 33, 'AES_ENCRYPT' => 33, 'CHAR_LENGTH' => 33, 'DATE_FORMAT' => 33, + 'DES_DECRYPT' => 33, 'DES_ENCRYPT' => 33, 'FIND_IN_SET' => 33, 'FROM_BASE64' => 33, + 'GEOMFROMWKB' => 33, 'GTID_SUBSET' => 33, 'JSON_INSERT' => 33, 'JSON_LENGTH' => 33, + 'JSON_OBJECT' => 33, 'JSON_PRETTY' => 33, 'JSON_REMOVE' => 33, 'JSON_SEARCH' => 33, + 'LINEFROMWKB' => 33, 'MBRCONTAINS' => 33, 'MBRDISJOINT' => 33, 'MBROVERLAPS' => 33, + 'MICROSECOND' => 33, 'PERIOD_DIFF' => 33, 'POLYFROMWKB' => 33, 'SEC_TO_TIME' => 33, + 'STDDEV_SAMP' => 33, 'STR_TO_DATE' => 33, 'ST_ASBINARY' => 33, 'ST_CENTROID' => 33, + 'ST_CONTAINS' => 33, 'ST_DISJOINT' => 33, 'ST_DISTANCE' => 33, 'ST_ENDPOINT' => 33, + 'ST_ENVELOPE' => 33, 'ST_ISCLOSED' => 33, 'ST_ISSIMPLE' => 33, 'ST_OVERLAPS' => 33, + 'ST_SIMPLIFY' => 33, 'ST_VALIDATE' => 33, 'SYSTEM_USER' => 33, 'TIME_FORMAT' => 33, + 'TIME_TO_SEC' => 33, + 'COERCIBILITY' => 33, 'EXTERIORRING' => 33, 'EXTRACTVALUE' => 33, 'GEOMETRYTYPE' => 33, + 'GEOMFROMTEXT' => 33, 'GROUP_CONCAT' => 33, 'IS_FREE_LOCK' => 33, 'IS_USED_LOCK' => 33, + 'JSON_EXTRACT' => 33, 'JSON_REPLACE' => 33, 'JSON_UNQUOTE' => 33, 'LINEFROMTEXT' => 33, + 'MBRCOVEREDBY' => 33, 'MLINEFROMWKB' => 33, 'MPOLYFROMWKB' => 33, 'MULTIPOLYGON' => 33, + 'OCTET_LENGTH' => 33, 'OLD_PASSWORD' => 33, 'POINTFROMWKB' => 33, 'POLYFROMTEXT' => 33, + 'RANDOM_BYTES' => 33, 'RELEASE_LOCK' => 33, 'SESSION_USER' => 33, 'ST_ASGEOJSON' => 33, + 'ST_DIMENSION' => 33, 'ST_GEOMETRYN' => 33, 'ST_NUMPOINTS' => 33, 'TIMESTAMPADD' => 33, + 'CONNECTION_ID' => 33, 'FROM_UNIXTIME' => 33, 'GTID_SUBTRACT' => 33, 'INTERIORRINGN' => 33, + 'JSON_CONTAINS' => 33, 'MBRINTERSECTS' => 33, 'MLINEFROMTEXT' => 33, 'MPOINTFROMWKB' => 33, + 'MPOLYFROMTEXT' => 33, 'NUMGEOMETRIES' => 33, 'POINTFROMTEXT' => 33, 'ST_CONVEXHULL' => 33, + 'ST_DIFFERENCE' => 33, 'ST_INTERSECTS' => 33, 'ST_STARTPOINT' => 33, 'TIMESTAMPDIFF' => 33, + 'WEIGHT_STRING' => 33, + 'IS_IPV4_COMPAT' => 33, 'IS_IPV4_MAPPED' => 33, 'LAST_INSERT_ID' => 33, 'MPOINTFROMTEXT' => 33, + 'POLYGONFROMWKB' => 33, 'ST_GEOMFROMWKB' => 33, 'ST_LINEFROMWKB' => 33, 'ST_POLYFROMWKB' => 33, + 'UNIX_TIMESTAMP' => 33, + 'GEOMCOLLFROMWKB' => 33, 'MASTER_POS_WAIT' => 33, 'POLYGONFROMTEXT' => 33, 'ST_EXTERIORRING' => 33, + 'ST_GEOMETRYTYPE' => 33, 'ST_GEOMFROMTEXT' => 33, 'ST_INTERSECTION' => 33, 'ST_LINEFROMTEXT' => 33, + 'ST_MAKEENVELOPE' => 33, 'ST_MLINEFROMWKB' => 33, 'ST_MPOLYFROMWKB' => 33, 'ST_POINTFROMWKB' => 33, + 'ST_POLYFROMTEXT' => 33, 'SUBSTRING_INDEX' => 33, + 'CHARACTER_LENGTH' => 33, 'GEOMCOLLFROMTEXT' => 33, 'GEOMETRYFROMTEXT' => 33, + 'JSON_MERGE_PATCH' => 33, 'NUMINTERIORRINGS' => 33, 'ST_INTERIORRINGN' => 33, + 'ST_MLINEFROMTEXT' => 33, 'ST_MPOINTFROMWKB' => 33, 'ST_MPOLYFROMTEXT' => 33, + 'ST_NUMGEOMETRIES' => 33, 'ST_POINTFROMTEXT' => 33, 'ST_SYMDIFFERENCE' => 33, + 'JSON_ARRAY_APPEND' => 33, 'JSON_ARRAY_INSERT' => 33, 'JSON_STORAGE_FREE' => 33, + 'JSON_STORAGE_SIZE' => 33, 'LINESTRINGFROMWKB' => 33, 'MULTIPOINTFROMWKB' => 33, + 'RELEASE_ALL_LOCKS' => 33, 'ST_LATFROMGEOHASH' => 33, 'ST_MPOINTFROMTEXT' => 33, + 'ST_POLYGONFROMWKB' => 33, + 'JSON_CONTAINS_PATH' => 33, 'MULTIPOINTFROMTEXT' => 33, 'ST_BUFFER_STRATEGY' => 33, + 'ST_DISTANCE_SPHERE' => 33, 'ST_GEOMCOLLFROMTXT' => 33, 'ST_GEOMCOLLFROMWKB' => 33, + 'ST_GEOMFROMGEOJSON' => 33, 'ST_LONGFROMGEOHASH' => 33, 'ST_POLYGONFROMTEXT' => 33, + 'JSON_MERGE_PRESERVE' => 33, 'MULTIPOLYGONFROMWKB' => 33, 'ST_GEOMCOLLFROMTEXT' => 33, + 'ST_GEOMETRYFROMTEXT' => 33, 'ST_NUMINTERIORRINGS' => 33, 'ST_POINTFROMGEOHASH' => 33, + 'UNCOMPRESSED_LENGTH' => 33, + 'MULTIPOLYGONFROMTEXT' => 33, 'ST_LINESTRINGFROMWKB' => 33, 'ST_MULTIPOINTFROMWKB' => 33, + 'ST_MULTIPOINTFROMTEXT' => 33, + 'MULTILINESTRINGFROMWKB' => 33, 'ST_MULTIPOLYGONFROMWKB' => 33, + 'MULTILINESTRINGFROMTEXT' => 33, 'ST_MULTIPOLYGONFROMTEXT' => 33, + 'GEOMETRYCOLLECTIONFROMWKB' => 33, 'ST_MULTILINESTRINGFROMWKB' => 33, + 'GEOMETRYCOLLECTIONFROMTEXT' => 33, 'ST_MULTILINESTRINGFROMTEXT' => 33, 'VALIDATE_PASSWORD_STRENGTH' => 33, + 'WAIT_FOR_EXECUTED_GTID_SET' => 33, + 'ST_GEOMETRYCOLLECTIONFROMWKB' => 33, + 'ST_GEOMETRYCOLLECTIONFROMTEXT' => 33, + 'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS' => 33, + + 'IF' => 35, 'IN' => 35, + 'MOD' => 35, + 'LEFT' => 35, + 'MATCH' => 35, 'RIGHT' => 35, + 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, + 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, + 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, + 'LOCALTIME' => 35, + 'CURRENT_DATE' => 35, 'CURRENT_TIME' => 35, 'CURRENT_USER' => 35, + 'UTC_TIMESTAMP' => 35, + 'LOCALTIMESTAMP' => 35, + 'CURRENT_TIMESTAMP' => 35, + + 'NOT IN' => 39, + + 'DATE' => 41, 'TIME' => 41, 'YEAR' => 41, + 'POINT' => 41, + 'POLYGON' => 41, + 'TIMESTAMP' => 41, + 'LINESTRING' => 41, + 'MULTILINESTRING' => 41, + 'GEOMETRYCOLLECTION' => 41, + + 'CHAR' => 43, + 'BINARY' => 43, + 'INTERVAL' => 43, + ]; +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Core.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Core.php new file mode 100644 index 0000000..e529920 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Core.php @@ -0,0 +1,51 @@ +strict) { + throw $error; + } + + $this->errors[] = $error; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Exceptions/LoaderException.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Exceptions/LoaderException.php new file mode 100644 index 0000000..35d4b16 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Exceptions/LoaderException.php @@ -0,0 +1,34 @@ +name = $name; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Lexer.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Lexer.php new file mode 100644 index 0000000..9e905f5 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Lexer.php @@ -0,0 +1,1050 @@ +list; + } + + /** + * @param string|UtfString $str the query to be lexed + * @param bool $strict whether strict mode should be + * enabled or not + * @param string $delimiter the delimiter to be used + */ + public function __construct($str, $strict = false, $delimiter = null) + { + // `strlen` is used instead of `mb_strlen` because the lexer needs to + // parse each byte of the input. + $len = $str instanceof UtfString ? $str->length() : strlen($str); + + // For multi-byte strings, a new instance of `UtfString` is + // initialized (only if `UtfString` usage is forced. + if (! $str instanceof UtfString && USE_UTF_STRINGS && $len !== mb_strlen($str, 'UTF-8')) { + $str = new UtfString($str); + } + + $this->str = $str; + $this->len = $str instanceof UtfString ? $str->length() : $len; + + $this->strict = $strict; + + // Setting the delimiter. + $this->setDelimiter(! empty($delimiter) ? $delimiter : static::$DEFAULT_DELIMITER); + + $this->lex(); + } + + /** + * Sets the delimiter. + * + * @param string $delimiter the new delimiter + */ + public function setDelimiter($delimiter) + { + $this->delimiter = $delimiter; + $this->delimiterLen = strlen($delimiter); + } + + /** + * Parses the string and extracts lexemes. + */ + public function lex() + { + // TODO: Sometimes, static::parse* functions make unnecessary calls to + // is* functions. For a better performance, some rules can be deduced + // from context. + // For example, in `parseBool` there is no need to compare the token + // every time with `true` and `false`. The first step would be to + // compare with 'true' only and just after that add another letter from + // context and compare again with `false`. + // Another example is `parseComment`. + + $list = new TokensList(); + + /** + * Last processed token. + * + * @var Token + */ + $lastToken = null; + + for ($this->last = 0, $lastIdx = 0; $this->last < $this->len; $lastIdx = ++$this->last) { + /** + * The new token. + * + * @var Token + */ + $token = null; + + foreach (static::$PARSER_METHODS as $method) { + $token = $this->$method(); + + if ($token) { + break; + } + } + + if ($token === null) { + // @assert($this->last === $lastIdx); + $token = new Token($this->str[$this->last]); + $this->error('Unexpected character.', $this->str[$this->last], $this->last); + } elseif ( + $lastToken !== null + && $token->type === Token::TYPE_SYMBOL + && $token->flags & Token::FLAG_SYMBOL_VARIABLE + && ( + $lastToken->type === Token::TYPE_STRING + || ( + $lastToken->type === Token::TYPE_SYMBOL + && $lastToken->flags & Token::FLAG_SYMBOL_BACKTICK + ) + ) + ) { + // Handles ```... FROM 'user'@'%' ...```. + $lastToken->token .= $token->token; + $lastToken->type = Token::TYPE_SYMBOL; + $lastToken->flags = Token::FLAG_SYMBOL_USER; + $lastToken->value .= '@' . $token->value; + continue; + } elseif ( + $lastToken !== null + && $token->type === Token::TYPE_KEYWORD + && $lastToken->type === Token::TYPE_OPERATOR + && $lastToken->value === '.' + ) { + // Handles ```... tbl.FROM ...```. In this case, FROM is not + // a reserved word. + $token->type = Token::TYPE_NONE; + $token->flags = 0; + $token->value = $token->token; + } + + $token->position = $lastIdx; + + $list->tokens[$list->count++] = $token; + + // Handling delimiters. + if ($token->type === Token::TYPE_NONE && $token->value === 'DELIMITER') { + if ($this->last + 1 >= $this->len) { + $this->error('Expected whitespace(s) before delimiter.', '', $this->last + 1); + continue; + } + + // Skipping last R (from `delimiteR`) and whitespaces between + // the keyword `DELIMITER` and the actual delimiter. + $pos = ++$this->last; + $token = $this->parseWhitespace(); + + if ($token !== null) { + $token->position = $pos; + $list->tokens[$list->count++] = $token; + } + + // Preparing the token that holds the new delimiter. + if ($this->last + 1 >= $this->len) { + $this->error('Expected delimiter.', '', $this->last + 1); + continue; + } + + $pos = $this->last + 1; + + // Parsing the delimiter. + $this->delimiter = null; + $delimiterLen = 0; + while ( + ++$this->last < $this->len + && ! Context::isWhitespace($this->str[$this->last]) + && $delimiterLen < 15 + ) { + $this->delimiter .= $this->str[$this->last]; + ++$delimiterLen; + } + + if (empty($this->delimiter)) { + $this->error('Expected delimiter.', '', $this->last); + $this->delimiter = ';'; + } + + --$this->last; + + // Saving the delimiter and its token. + $this->delimiterLen = strlen($this->delimiter); + $token = new Token($this->delimiter, Token::TYPE_DELIMITER); + $token->position = $pos; + $list->tokens[$list->count++] = $token; + } + + $lastToken = $token; + } + + // Adding a final delimiter to mark the ending. + $list->tokens[$list->count++] = new Token(null, Token::TYPE_DELIMITER); + + // Saving the tokens list. + $this->list = $list; + + $this->solveAmbiguityOnStarOperator(); + } + + /** + * Resolves the ambiguity when dealing with the "*" operator. + * + * In SQL statements, the "*" operator can be an arithmetic operator (like in 2*3) or an SQL wildcard (like in + * SELECT a.* FROM ...). To solve this ambiguity, the solution is to find the next token, excluding whitespaces and + * comments, right after the "*" position. The "*" is for sure an SQL wildcard if the next token found is any of: + * - "FROM" (the FROM keyword like in "SELECT * FROM..."); + * - "USING" (the USING keyword like in "DELETE table_name.* USING..."); + * - "," (a comma separator like in "SELECT *, field FROM..."); + * - ")" (a closing parenthesis like in "COUNT(*)"). + * This methods will change the flag of the "*" tokens when any of those condition above is true. Otherwise, the + * default flag (arithmetic) will be kept. + * + * @return void + */ + private function solveAmbiguityOnStarOperator() + { + $iBak = $this->list->idx; + while (($starToken = $this->list->getNextOfTypeAndValue(Token::TYPE_OPERATOR, '*')) !== null) { + // getNext() already gets rid of whitespaces and comments. + $next = $this->list->getNext(); + + if ($next === null) { + continue; + } + + if ( + ($next->type !== Token::TYPE_KEYWORD || ! in_array($next->value, ['FROM', 'USING'], true)) + && ($next->type !== Token::TYPE_OPERATOR || ! in_array($next->value, [',', ')'], true)) + ) { + continue; + } + + $starToken->flags = Token::FLAG_OPERATOR_SQL; + } + + $this->list->idx = $iBak; + } + + /** + * Creates a new error log. + * + * @param string $msg the error message + * @param string $str the character that produced the error + * @param int $pos the position of the character + * @param int $code the code of the error + * + * @throws LexerException throws the exception, if strict mode is enabled. + */ + public function error($msg, $str = '', $pos = 0, $code = 0) + { + $error = new LexerException( + Translator::gettext($msg), + $str, + $pos, + $code + ); + parent::error($error); + } + + /** + * Parses a keyword. + * + * @return Token|null + */ + public function parseKeyword() + { + $token = ''; + + /** + * Value to be returned. + * + * @var Token + */ + $ret = null; + + /** + * The value of `$this->last` where `$token` ends in `$this->str`. + * + * @var int + */ + $iEnd = $this->last; + + /** + * Whether last parsed character is a whitespace. + * + * @var bool + */ + $lastSpace = false; + + for ($j = 1; $j < Context::KEYWORD_MAX_LENGTH && $this->last < $this->len; ++$j, ++$this->last) { + // Composed keywords shouldn't have more than one whitespace between + // keywords. + if (Context::isWhitespace($this->str[$this->last])) { + if ($lastSpace) { + --$j; // The size of the keyword didn't increase. + continue; + } + + $lastSpace = true; + } else { + $lastSpace = false; + } + + $token .= $this->str[$this->last]; + $flags = Context::isKeyword($token); + + if (($this->last + 1 !== $this->len && ! Context::isSeparator($this->str[$this->last + 1])) || ! $flags) { + continue; + } + + $ret = new Token($token, Token::TYPE_KEYWORD, $flags); + $iEnd = $this->last; + + // We don't break so we find longest keyword. + // For example, `OR` and `ORDER` have a common prefix `OR`. + // If we stopped at `OR`, the parsing would be invalid. + } + + $this->last = $iEnd; + + return $ret; + } + + /** + * Parses a label. + * + * @return Token|null + */ + public function parseLabel() + { + $token = ''; + + /** + * Value to be returned. + * + * @var Token + */ + $ret = null; + + /** + * The value of `$this->last` where `$token` ends in `$this->str`. + * + * @var int + */ + $iEnd = $this->last; + for ($j = 1; $j < Context::LABEL_MAX_LENGTH && $this->last < $this->len; ++$j, ++$this->last) { + if ($this->str[$this->last] === ':' && $j > 1) { + // End of label + $token .= $this->str[$this->last]; + $ret = new Token($token, Token::TYPE_LABEL); + $iEnd = $this->last; + break; + } + + if (Context::isWhitespace($this->str[$this->last]) && $j > 1) { + // Whitespace between label and : + // The size of the keyword didn't increase. + --$j; + } elseif (Context::isSeparator($this->str[$this->last])) { + // Any other separator + break; + } + + $token .= $this->str[$this->last]; + } + + $this->last = $iEnd; + + return $ret; + } + + /** + * Parses an operator. + * + * @return Token|null + */ + public function parseOperator() + { + $token = ''; + + /** + * Value to be returned. + * + * @var Token + */ + $ret = null; + + /** + * The value of `$this->last` where `$token` ends in `$this->str`. + * + * @var int + */ + $iEnd = $this->last; + + for ($j = 1; $j < Context::OPERATOR_MAX_LENGTH && $this->last < $this->len; ++$j, ++$this->last) { + $token .= $this->str[$this->last]; + $flags = Context::isOperator($token); + + if (! $flags) { + continue; + } + + $ret = new Token($token, Token::TYPE_OPERATOR, $flags); + $iEnd = $this->last; + } + + $this->last = $iEnd; + + return $ret; + } + + /** + * Parses a whitespace. + * + * @return Token|null + */ + public function parseWhitespace() + { + $token = $this->str[$this->last]; + + if (! Context::isWhitespace($token)) { + return null; + } + + while (++$this->last < $this->len && Context::isWhitespace($this->str[$this->last])) { + $token .= $this->str[$this->last]; + } + + --$this->last; + + return new Token($token, Token::TYPE_WHITESPACE); + } + + /** + * Parses a comment. + * + * @return Token|null + */ + public function parseComment() + { + $iBak = $this->last; + $token = $this->str[$this->last]; + + // Bash style comments. (#comment\n) + if (Context::isComment($token)) { + while (++$this->last < $this->len && $this->str[$this->last] !== "\n") { + $token .= $this->str[$this->last]; + } + + // Include trailing \n as whitespace token + if ($this->last < $this->len) { + --$this->last; + } + + return new Token($token, Token::TYPE_COMMENT, Token::FLAG_COMMENT_BASH); + } + + // C style comments. (/*comment*\/) + if (++$this->last < $this->len) { + $token .= $this->str[$this->last]; + if (Context::isComment($token)) { + // There might be a conflict with "*" operator here, when string is "*/*". + // This can occurs in the following statements: + // - "SELECT */* comment */ FROM ..." + // - "SELECT 2*/* comment */3 AS `six`;" + $next = $this->last + 1; + if (($next < $this->len) && $this->str[$next] === '*') { + // Conflict in "*/*": first "*" was not for ending a comment. + // Stop here and let other parsing method define the true behavior of that first star. + $this->last = $iBak; + + return null; + } + + $flags = Token::FLAG_COMMENT_C; + + // This comment already ended. It may be a part of a + // previous MySQL specific command. + if ($token === '*/') { + return new Token($token, Token::TYPE_COMMENT, $flags); + } + + // Checking if this is a MySQL-specific command. + if ($this->last + 1 < $this->len && $this->str[$this->last + 1] === '!') { + $flags |= Token::FLAG_COMMENT_MYSQL_CMD; + $token .= $this->str[++$this->last]; + + while ( + ++$this->last < $this->len + && $this->str[$this->last] >= '0' + && $this->str[$this->last] <= '9' + ) { + $token .= $this->str[$this->last]; + } + + --$this->last; + + // We split this comment and parse only its beginning + // here. + return new Token($token, Token::TYPE_COMMENT, $flags); + } + + // Parsing the comment. + while ( + ++$this->last < $this->len + && ( + $this->str[$this->last - 1] !== '*' + || $this->str[$this->last] !== '/' + ) + ) { + $token .= $this->str[$this->last]; + } + + // Adding the ending. + if ($this->last < $this->len) { + $token .= $this->str[$this->last]; + } + + return new Token($token, Token::TYPE_COMMENT, $flags); + } + } + + // SQL style comments. (-- comment\n) + if (++$this->last < $this->len) { + $token .= $this->str[$this->last]; + $end = false; + } else { + --$this->last; + $end = true; + } + + if (Context::isComment($token, $end)) { + // Checking if this comment did not end already (```--\n```). + if ($this->str[$this->last] !== "\n") { + while (++$this->last < $this->len && $this->str[$this->last] !== "\n") { + $token .= $this->str[$this->last]; + } + } + + // Include trailing \n as whitespace token + if ($this->last < $this->len) { + --$this->last; + } + + return new Token($token, Token::TYPE_COMMENT, Token::FLAG_COMMENT_SQL); + } + + $this->last = $iBak; + + return null; + } + + /** + * Parses a boolean. + * + * @return Token|null + */ + public function parseBool() + { + if ($this->last + 3 >= $this->len) { + // At least `min(strlen('TRUE'), strlen('FALSE'))` characters are + // required. + return null; + } + + $iBak = $this->last; + $token = $this->str[$this->last] . $this->str[++$this->last] + . $this->str[++$this->last] . $this->str[++$this->last]; // _TRUE_ or _FALS_e + + if (Context::isBool($token)) { + return new Token($token, Token::TYPE_BOOL); + } + + if (++$this->last < $this->len) { + $token .= $this->str[$this->last]; // fals_E_ + if (Context::isBool($token)) { + return new Token($token, Token::TYPE_BOOL, 1); + } + } + + $this->last = $iBak; + + return null; + } + + /** + * Parses a number. + * + * @return Token|null + */ + public function parseNumber() + { + // A rudimentary state machine is being used to parse numbers due to + // the various forms of their notation. + // + // Below are the states of the machines and the conditions to change + // the state. + // + // 1 --------------------[ + or - ]-------------------> 1 + // 1 -------------------[ 0x or 0X ]------------------> 2 + // 1 --------------------[ 0 to 9 ]-------------------> 3 + // 1 -----------------------[ . ]---------------------> 4 + // 1 -----------------------[ b ]---------------------> 7 + // + // 2 --------------------[ 0 to F ]-------------------> 2 + // + // 3 --------------------[ 0 to 9 ]-------------------> 3 + // 3 -----------------------[ . ]---------------------> 4 + // 3 --------------------[ e or E ]-------------------> 5 + // + // 4 --------------------[ 0 to 9 ]-------------------> 4 + // 4 --------------------[ e or E ]-------------------> 5 + // + // 5 ---------------[ + or - or 0 to 9 ]--------------> 6 + // + // 7 -----------------------[ ' ]---------------------> 8 + // + // 8 --------------------[ 0 or 1 ]-------------------> 8 + // 8 -----------------------[ ' ]---------------------> 9 + // + // State 1 may be reached by negative numbers. + // State 2 is reached only by hex numbers. + // State 4 is reached only by float numbers. + // State 5 is reached only by numbers in approximate form. + // State 7 is reached only by numbers in bit representation. + // + // Valid final states are: 2, 3, 4 and 6. Any parsing that finished in a + // state other than these is invalid. + // Also, negative states are invalid states. + $iBak = $this->last; + $token = ''; + $flags = 0; + $state = 1; + for (; $this->last < $this->len; ++$this->last) { + if ($state === 1) { + if ($this->str[$this->last] === '-') { + $flags |= Token::FLAG_NUMBER_NEGATIVE; + } elseif ( + $this->last + 1 < $this->len + && $this->str[$this->last] === '0' + && ( + $this->str[$this->last + 1] === 'x' + || $this->str[$this->last + 1] === 'X' + ) + ) { + $token .= $this->str[$this->last++]; + $state = 2; + } elseif ($this->str[$this->last] >= '0' && $this->str[$this->last] <= '9') { + $state = 3; + } elseif ($this->str[$this->last] === '.') { + $state = 4; + } elseif ($this->str[$this->last] === 'b') { + $state = 7; + } elseif ($this->str[$this->last] !== '+') { + // `+` is a valid character in a number. + break; + } + } elseif ($state === 2) { + $flags |= Token::FLAG_NUMBER_HEX; + if ( + ! ( + ($this->str[$this->last] >= '0' && $this->str[$this->last] <= '9') + || ($this->str[$this->last] >= 'A' && $this->str[$this->last] <= 'F') + || ($this->str[$this->last] >= 'a' && $this->str[$this->last] <= 'f') + ) + ) { + break; + } + } elseif ($state === 3) { + if ($this->str[$this->last] === '.') { + $state = 4; + } elseif ($this->str[$this->last] === 'e' || $this->str[$this->last] === 'E') { + $state = 5; + } elseif ( + ($this->str[$this->last] >= 'a' && $this->str[$this->last] <= 'z') + || ($this->str[$this->last] >= 'A' && $this->str[$this->last] <= 'Z') + ) { + // A number can't be directly followed by a letter + $state = -$state; + } elseif ($this->str[$this->last] < '0' || $this->str[$this->last] > '9') { + // Just digits and `.`, `e` and `E` are valid characters. + break; + } + } elseif ($state === 4) { + $flags |= Token::FLAG_NUMBER_FLOAT; + if ($this->str[$this->last] === 'e' || $this->str[$this->last] === 'E') { + $state = 5; + } elseif ( + ($this->str[$this->last] >= 'a' && $this->str[$this->last] <= 'z') + || ($this->str[$this->last] >= 'A' && $this->str[$this->last] <= 'Z') + ) { + // A number can't be directly followed by a letter + $state = -$state; + } elseif ($this->str[$this->last] < '0' || $this->str[$this->last] > '9') { + // Just digits, `e` and `E` are valid characters. + break; + } + } elseif ($state === 5) { + $flags |= Token::FLAG_NUMBER_APPROXIMATE; + if ( + $this->str[$this->last] === '+' || $this->str[$this->last] === '-' + || ($this->str[$this->last] >= '0' && $this->str[$this->last] <= '9') + ) { + $state = 6; + } elseif ( + ($this->str[$this->last] >= 'a' && $this->str[$this->last] <= 'z') + || ($this->str[$this->last] >= 'A' && $this->str[$this->last] <= 'Z') + ) { + // A number can't be directly followed by a letter + $state = -$state; + } else { + break; + } + } elseif ($state === 6) { + if ($this->str[$this->last] < '0' || $this->str[$this->last] > '9') { + // Just digits are valid characters. + break; + } + } elseif ($state === 7) { + $flags |= Token::FLAG_NUMBER_BINARY; + if ($this->str[$this->last] !== '\'') { + break; + } + + $state = 8; + } elseif ($state === 8) { + if ($this->str[$this->last] === '\'') { + $state = 9; + } elseif ($this->str[$this->last] !== '0' && $this->str[$this->last] !== '1') { + break; + } + } elseif ($state === 9) { + break; + } + + $token .= $this->str[$this->last]; + } + + if ($state === 2 || $state === 3 || ($token !== '.' && $state === 4) || $state === 6 || $state === 9) { + --$this->last; + + return new Token($token, Token::TYPE_NUMBER, $flags); + } + + $this->last = $iBak; + + return null; + } + + /** + * Parses a string. + * + * @param string $quote additional starting symbol + * + * @return Token|null + * + * @throws LexerException + */ + public function parseString($quote = '') + { + $token = $this->str[$this->last]; + $flags = Context::isString($token); + + if (! $flags && $token !== $quote) { + return null; + } + + $quote = $token; + + while (++$this->last < $this->len) { + if ( + $this->last + 1 < $this->len + && ( + ($this->str[$this->last] === $quote && $this->str[$this->last + 1] === $quote) + || ($this->str[$this->last] === '\\' && $quote !== '`') + ) + ) { + $token .= $this->str[$this->last] . $this->str[++$this->last]; + } else { + if ($this->str[$this->last] === $quote) { + break; + } + + $token .= $this->str[$this->last]; + } + } + + if ($this->last >= $this->len || $this->str[$this->last] !== $quote) { + $this->error( + sprintf( + Translator::gettext('Ending quote %1$s was expected.'), + $quote + ), + '', + $this->last + ); + } else { + $token .= $this->str[$this->last]; + } + + return new Token($token, Token::TYPE_STRING, $flags); + } + + /** + * Parses a symbol. + * + * @return Token|null + * + * @throws LexerException + */ + public function parseSymbol() + { + $token = $this->str[$this->last]; + $flags = Context::isSymbol($token); + + if (! $flags) { + return null; + } + + if ($flags & Token::FLAG_SYMBOL_VARIABLE) { + if ($this->last + 1 < $this->len && $this->str[++$this->last] === '@') { + // This is a system variable (e.g. `@@hostname`). + $token .= $this->str[$this->last++]; + $flags |= Token::FLAG_SYMBOL_SYSTEM; + } + } elseif ($flags & Token::FLAG_SYMBOL_PARAMETER) { + if ($token !== '?' && $this->last + 1 < $this->len) { + ++$this->last; + } + } else { + $token = ''; + } + + $str = null; + + if ($this->last < $this->len) { + $str = $this->parseString('`'); + + if ($str === null) { + $str = $this->parseUnknown(); + + if ($str === null) { + $this->error('Variable name was expected.', $this->str[$this->last], $this->last); + } + } + } + + if ($str !== null) { + $token .= $str->token; + } + + return new Token($token, Token::TYPE_SYMBOL, $flags); + } + + /** + * Parses unknown parts of the query. + * + * @return Token|null + */ + public function parseUnknown() + { + $token = $this->str[$this->last]; + if (Context::isSeparator($token)) { + return null; + } + + while (++$this->last < $this->len && ! Context::isSeparator($this->str[$this->last])) { + $token .= $this->str[$this->last]; + + // Test if end of token equals the current delimiter. If so, remove it from the token. + if (substr($token, -$this->delimiterLen) === $this->delimiter) { + $token = substr($token, 0, -$this->delimiterLen); + $this->last -= $this->delimiterLen - 1; + break; + } + } + + --$this->last; + + return new Token($token); + } + + /** + * Parses the delimiter of the query. + * + * @return Token|null + */ + public function parseDelimiter() + { + $idx = 0; + + while ($idx < $this->delimiterLen && $this->last + $idx < $this->len) { + if ($this->delimiter[$idx] !== $this->str[$this->last + $idx]) { + return null; + } + + ++$idx; + } + + $this->last += $this->delimiterLen - 1; + + return new Token($this->delimiter, Token::TYPE_DELIMITER); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/CallStatement.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/CallStatement.php new file mode 100644 index 0000000..f7db88e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/CallStatement.php @@ -0,0 +1,43 @@ +call->name . '(' + . ($this->call->parameters ? implode(',', $this->call->parameters->raw) : '') . ')'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/DeleteStatement.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/DeleteStatement.php new file mode 100644 index 0000000..b718b3c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/DeleteStatement.php @@ -0,0 +1,377 @@ + 1, + 'QUICK' => 2, + 'IGNORE' => 3, + ]; + + /** + * The clauses of this statement, in order. + * + * @see Statement::$CLAUSES + * + * @var array + */ + public static $CLAUSES = [ + 'DELETE' => [ + 'DELETE', + 2, + ], + // Used for options. + '_OPTIONS' => [ + '_OPTIONS', + 1, + ], + 'FROM' => [ + 'FROM', + 3, + ], + 'PARTITION' => [ + 'PARTITION', + 3, + ], + 'USING' => [ + 'USING', + 3, + ], + 'WHERE' => [ + 'WHERE', + 3, + ], + 'ORDER BY' => [ + 'ORDER BY', + 3, + ], + 'LIMIT' => [ + 'LIMIT', + 3, + ], + ]; + + /** + * Table(s) used as sources for this statement. + * + * @var Expression[] + */ + public $from; + + /** + * Joins. + * + * @var JoinKeyword[] + */ + public $join; + + /** + * Tables used as sources for this statement. + * + * @var Expression[] + */ + public $using; + + /** + * Columns used in this statement. + * + * @var Expression[] + */ + public $columns; + + /** + * Partitions used as source for this statement. + * + * @var ArrayObj + */ + public $partition; + + /** + * Conditions used for filtering each row of the result set. + * + * @var Condition[] + */ + public $where; + + /** + * Specifies the order of the rows in the result set. + * + * @var OrderKeyword[] + */ + public $order; + + /** + * Conditions used for limiting the size of the result set. + * + * @var Limit + */ + public $limit; + + /** + * @return string + */ + public function build() + { + $ret = 'DELETE ' . OptionsArray::build($this->options); + + if ($this->columns !== null && count($this->columns) > 0) { + $ret .= ' ' . ExpressionArray::build($this->columns); + } + + if ($this->from !== null && count($this->from) > 0) { + $ret .= ' FROM ' . ExpressionArray::build($this->from); + } + + if ($this->join !== null && count($this->join) > 0) { + $ret .= ' ' . JoinKeyword::build($this->join); + } + + if ($this->using !== null && count($this->using) > 0) { + $ret .= ' USING ' . ExpressionArray::build($this->using); + } + + if ($this->where !== null && count($this->where) > 0) { + $ret .= ' WHERE ' . Condition::build($this->where); + } + + if ($this->order !== null && count($this->order) > 0) { + $ret .= ' ORDER BY ' . ExpressionArray::build($this->order); + } + + if ($this->limit !== null && strlen((string) $this->limit) > 0) { + $ret .= ' LIMIT ' . Limit::build($this->limit); + } + + return $ret; + } + + /** + * @param Parser $parser the instance that requests parsing + * @param TokensList $list the list of tokens to be parsed + */ + public function parse(Parser $parser, TokensList $list) + { + ++$list->idx; // Skipping `DELETE`. + + // parse any options if provided + $this->options = OptionsArray::parse($parser, $list, static::$OPTIONS); + ++$list->idx; + + /** + * The state of the parser. + * + * Below are the states of the parser. + * + * 0 ---------------------------------[ FROM ]----------------------------------> 2 + * 0 ------------------------------[ table[.*] ]--------------------------------> 1 + * 1 ---------------------------------[ FROM ]----------------------------------> 2 + * 2 --------------------------------[ USING ]----------------------------------> 3 + * 2 --------------------------------[ WHERE ]----------------------------------> 4 + * 2 --------------------------------[ ORDER ]----------------------------------> 5 + * 2 --------------------------------[ LIMIT ]----------------------------------> 6 + * + * @var int + */ + $state = 0; + + /** + * If the query is multi-table or not. + * + * @var bool + */ + $multiTable = false; + + for (; $list->idx < $list->count; ++$list->idx) { + /** + * Token parsed at this moment. + * + * @var Token + */ + $token = $list->tokens[$list->idx]; + + // End of statement. + if ($token->type === Token::TYPE_DELIMITER) { + break; + } + + if ($state === 0) { + if ($token->type === Token::TYPE_KEYWORD) { + if ($token->keyword !== 'FROM') { + $parser->error('Unexpected keyword.', $token); + break; + } + + ++$list->idx; // Skip 'FROM' + $this->from = ExpressionArray::parse($parser, $list); + + $state = 2; + } else { + $this->columns = ExpressionArray::parse($parser, $list); + $state = 1; + } + } elseif ($state === 1) { + if ($token->type !== Token::TYPE_KEYWORD) { + $parser->error('Unexpected token.', $token); + break; + } + + if ($token->keyword !== 'FROM') { + $parser->error('Unexpected keyword.', $token); + break; + } + + ++$list->idx; // Skip 'FROM' + $this->from = ExpressionArray::parse($parser, $list); + + $state = 2; + } elseif ($state === 2) { + if ($token->type === Token::TYPE_KEYWORD) { + if (stripos($token->keyword, 'JOIN') !== false) { + ++$list->idx; + $this->join = JoinKeyword::parse($parser, $list); + + // remain in state = 2 + } else { + switch ($token->keyword) { + case 'USING': + ++$list->idx; // Skip 'USING' + $this->using = ExpressionArray::parse($parser, $list); + $state = 3; + + $multiTable = true; + break; + case 'WHERE': + ++$list->idx; // Skip 'WHERE' + $this->where = Condition::parse($parser, $list); + $state = 4; + break; + case 'ORDER BY': + ++$list->idx; // Skip 'ORDER BY' + $this->order = OrderKeyword::parse($parser, $list); + $state = 5; + break; + case 'LIMIT': + ++$list->idx; // Skip 'LIMIT' + $this->limit = Limit::parse($parser, $list); + $state = 6; + break; + default: + $parser->error('Unexpected keyword.', $token); + break 2; + } + } + } + } elseif ($state === 3) { + if ($token->type !== Token::TYPE_KEYWORD) { + $parser->error('Unexpected token.', $token); + break; + } + + if ($token->keyword !== 'WHERE') { + $parser->error('Unexpected keyword.', $token); + break; + } + + ++$list->idx; // Skip 'WHERE' + $this->where = Condition::parse($parser, $list); + $state = 4; + } elseif ($state === 4) { + if ($multiTable === true && $token->type === Token::TYPE_KEYWORD) { + $parser->error('This type of clause is not valid in Multi-table queries.', $token); + break; + } + + if ($token->type === Token::TYPE_KEYWORD) { + switch ($token->keyword) { + case 'ORDER BY': + ++$list->idx; // Skip 'ORDER BY' + $this->order = OrderKeyword::parse($parser, $list); + $state = 5; + break; + case 'LIMIT': + ++$list->idx; // Skip 'LIMIT' + $this->limit = Limit::parse($parser, $list); + $state = 6; + break; + default: + $parser->error('Unexpected keyword.', $token); + break 2; + } + } + } elseif ($state === 5) { + if ($token->type === Token::TYPE_KEYWORD) { + if ($token->keyword !== 'LIMIT') { + $parser->error('Unexpected keyword.', $token); + break; + } + + ++$list->idx; // Skip 'LIMIT' + $this->limit = Limit::parse($parser, $list); + $state = 6; + } + } + } + + if ($state >= 2) { + foreach ($this->from as $fromExpr) { + $fromExpr->database = $fromExpr->table; + $fromExpr->table = $fromExpr->column; + $fromExpr->column = null; + } + } + + --$list->idx; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ExplainStatement.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ExplainStatement.php new file mode 100644 index 0000000..5c4ea17 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ExplainStatement.php @@ -0,0 +1,15 @@ + 1, + 'CONCURRENT' => 1, + 'LOCAL' => 2, + ]; + + /** + * FIELDS/COLUMNS Options for `LOAD DATA...INFILE` statements. + * + * @var array + */ + public static $FIELDS_OPTIONS = [ + 'TERMINATED BY' => [ + 1, + 'expr', + ], + 'OPTIONALLY' => 2, + 'ENCLOSED BY' => [ + 3, + 'expr', + ], + 'ESCAPED BY' => [ + 4, + 'expr', + ], + ]; + + /** + * LINES Options for `LOAD DATA...INFILE` statements. + * + * @var array + */ + public static $LINES_OPTIONS = [ + 'STARTING BY' => [ + 1, + 'expr', + ], + 'TERMINATED BY' => [ + 2, + 'expr', + ], + ]; + + /** + * File name being used to load data. + * + * @var Expression + */ + public $file_name; + + /** + * Table used as destination for this statement. + * + * @var Expression + */ + public $table; + + /** + * Partitions used as source for this statement. + * + * @var ArrayObj + */ + public $partition; + + /** + * Character set used in this statement. + * + * @var Expression + */ + public $charset_name; + + /** + * Options for FIELDS/COLUMNS keyword. + * + * @see static::$FIELDS_OPTIONS + * + * @var OptionsArray + */ + public $fields_options; + + /** + * Whether to use `FIELDS` or `COLUMNS` while building. + * + * @var string + */ + public $fields_keyword; + + /** + * Options for OPTIONS keyword. + * + * @see static::$LINES_OPTIONS + * + * @var OptionsArray + */ + public $lines_options; + + /** + * Column names or user variables. + * + * @var Expression[] + */ + public $col_name_or_user_var; + + /** + * SET clause's updated values(optional). + * + * @var SetOperation[] + */ + public $set; + + /** + * Ignore 'number' LINES/ROWS. + * + * @var Expression + */ + public $ignore_number; + + /** + * REPLACE/IGNORE Keyword. + * + * @var string + */ + public $replace_ignore; + + /** + * LINES/ROWS Keyword. + * + * @var string + */ + public $lines_rows; + + /** + * @return string + */ + public function build() + { + $ret = 'LOAD DATA ' . $this->options + . ' INFILE ' . $this->file_name; + + if ($this->replace_ignore !== null) { + $ret .= ' ' . trim($this->replace_ignore); + } + + $ret .= ' INTO TABLE ' . $this->table; + + if ($this->partition !== null && strlen((string) $this->partition) > 0) { + $ret .= ' PARTITION ' . ArrayObj::build($this->partition); + } + + if ($this->charset_name !== null) { + $ret .= ' CHARACTER SET ' . $this->charset_name; + } + + if ($this->fields_keyword !== null) { + $ret .= ' ' . $this->fields_keyword . ' ' . $this->fields_options; + } + + if ($this->lines_options !== null && strlen((string) $this->lines_options) > 0) { + $ret .= ' LINES ' . $this->lines_options; + } + + if ($this->ignore_number !== null) { + $ret .= ' IGNORE ' . $this->ignore_number . ' ' . $this->lines_rows; + } + + if ($this->col_name_or_user_var !== null && count($this->col_name_or_user_var) > 0) { + $ret .= ' ' . ExpressionArray::build($this->col_name_or_user_var); + } + + if ($this->set !== null && count($this->set) > 0) { + $ret .= ' SET ' . SetOperation::build($this->set); + } + + return $ret; + } + + /** + * @param Parser $parser the instance that requests parsing + * @param TokensList $list the list of tokens to be parsed + */ + public function parse(Parser $parser, TokensList $list) + { + ++$list->idx; // Skipping `LOAD DATA`. + + // parse any options if provided + $this->options = OptionsArray::parse($parser, $list, static::$OPTIONS); + ++$list->idx; + + /** + * The state of the parser. + * + * @var int + */ + $state = 0; + + for (; $list->idx < $list->count; ++$list->idx) { + /** + * Token parsed at this moment. + * + * @var Token + */ + $token = $list->tokens[$list->idx]; + + // End of statement. + if ($token->type === Token::TYPE_DELIMITER) { + break; + } + + // Skipping whitespaces and comments. + if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { + continue; + } + + if ($state === 0) { + if ($token->type === Token::TYPE_KEYWORD && $token->keyword !== 'INFILE') { + $parser->error('Unexpected keyword.', $token); + break; + } + + if ($token->type !== Token::TYPE_KEYWORD) { + $parser->error('Unexpected token.', $token); + break; + } + + ++$list->idx; + $this->file_name = Expression::parse( + $parser, + $list, + ['parseField' => 'file'] + ); + $state = 1; + } elseif ($state === 1) { + if ($token->type === Token::TYPE_KEYWORD) { + if ($token->keyword === 'REPLACE' || $token->keyword === 'IGNORE') { + $this->replace_ignore = trim($token->keyword); + } elseif ($token->keyword === 'INTO') { + $state = 2; + } + } + } elseif ($state === 2) { + if ($token->type !== Token::TYPE_KEYWORD || $token->keyword !== 'TABLE') { + $parser->error('Unexpected token.', $token); + break; + } + + ++$list->idx; + $this->table = Expression::parse($parser, $list, ['parseField' => 'table']); + $state = 3; + } elseif ($state >= 3 && $state <= 7) { + if ($token->type === Token::TYPE_KEYWORD) { + $newState = $this->parseKeywordsAccordingToState($parser, $list, $state); + if ($newState === $state) { + // Avoid infinite loop + break; + } + } elseif ($token->type === Token::TYPE_OPERATOR && $token->token === '(') { + $this->col_name_or_user_var + = ExpressionArray::parse($parser, $list); + $state = 7; + } else { + $parser->error('Unexpected token.', $token); + break; + } + } + } + + --$list->idx; + } + + /** + * @param Parser $parser The parser + * @param TokensList $list A token list + * @param string $keyword The keyword + */ + public function parseFileOptions(Parser $parser, TokensList $list, $keyword = 'FIELDS'): void + { + ++$list->idx; + + if ($keyword === 'FIELDS' || $keyword === 'COLUMNS') { + // parse field options + $this->fields_options = OptionsArray::parse($parser, $list, static::$FIELDS_OPTIONS); + + $this->fields_keyword = $keyword; + } else { + // parse line options + $this->lines_options = OptionsArray::parse($parser, $list, static::$LINES_OPTIONS); + } + } + + /** + * @param Parser $parser + * @param TokensList $list + * @param int $state + * + * @return int + */ + public function parseKeywordsAccordingToState($parser, $list, $state) + { + $token = $list->tokens[$list->idx]; + + switch ($state) { + case 3: + if ($token->keyword === 'PARTITION') { + ++$list->idx; + $this->partition = ArrayObj::parse($parser, $list); + + return 4; + } + + // no break + case 4: + if ($token->keyword === 'CHARACTER SET') { + ++$list->idx; + $this->charset_name = Expression::parse($parser, $list); + + return 5; + } + + // no break + case 5: + if ($token->keyword === 'FIELDS' || $token->keyword === 'COLUMNS' || $token->keyword === 'LINES') { + $this->parseFileOptions($parser, $list, $token->value); + + return 6; + } + + // no break + case 6: + if ($token->keyword === 'IGNORE') { + ++$list->idx; + + $this->ignore_number = Expression::parse($parser, $list); + $nextToken = $list->getNextOfType(Token::TYPE_KEYWORD); + + if ( + $nextToken->type === Token::TYPE_KEYWORD + && (($nextToken->keyword === 'LINES') + || ($nextToken->keyword === 'ROWS')) + ) { + $this->lines_rows = $nextToken->token; + } + + return 7; + } + + // no break + case 7: + if ($token->keyword === 'SET') { + ++$list->idx; + $this->set = SetOperation::parse($parser, $list); + + return 8; + } + + // no break + default: + } + + return $state; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ShowStatement.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ShowStatement.php new file mode 100644 index 0000000..15ce499 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ShowStatement.php @@ -0,0 +1,63 @@ + 1, + 'AUTHORS' => 2, + 'BINARY' => 2, + 'BINLOG' => 2, + 'CHARACTER' => 2, + 'CODE' => 2, + 'COLLATION' => 2, + 'COLUMNS' => 2, + 'CONTRIBUTORS' => 2, + 'DATABASE' => 2, + 'DATABASES' => 2, + 'ENGINE' => 2, + 'ENGINES' => 2, + 'ERRORS' => 2, + 'EVENT' => 2, + 'EVENTS' => 2, + 'FUNCTION' => 2, + 'GRANTS' => 2, + 'HOSTS' => 2, + 'INDEX' => 2, + 'INNODB' => 2, + 'LOGS' => 2, + 'MASTER' => 2, + 'OPEN' => 2, + 'PLUGINS' => 2, + 'PRIVILEGES' => 2, + 'PROCEDURE' => 2, + 'PROCESSLIST' => 2, + 'PROFILE' => 2, + 'PROFILES' => 2, + 'SCHEDULER' => 2, + 'SET' => 2, + 'SLAVE' => 2, + 'STATUS' => 2, + 'TABLE' => 2, + 'TABLES' => 2, + 'TRIGGER' => 2, + 'TRIGGERS' => 2, + 'VARIABLES' => 2, + 'VIEW' => 2, + 'WARNINGS' => 2, + ]; +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/CLI.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/CLI.php new file mode 100644 index 0000000..7446563 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/CLI.php @@ -0,0 +1,319 @@ +getopt('hq:f:a', $longopts); + if ($params === false) { + return false; + } + + $this->mergeLongOpts($params, $longopts); + if (! isset($params['f'])) { + $params['f'] = 'cli'; + } + + if (! in_array($params['f'], ['html', 'cli', 'text'])) { + echo "ERROR: Invalid value for format!\n"; + + return false; + } + + return $params; + } + + /** + * @return int + */ + public function runHighlight() + { + $params = $this->parseHighlight(); + if ($params === false) { + return 1; + } + + if (isset($params['h'])) { + $this->usageHighlight(); + + return 0; + } + + if (! isset($params['q'])) { + $stdIn = $this->readStdin(); + + if ($stdIn) { + $params['q'] = $stdIn; + } + } + + if (isset($params['a'])) { + Context::setMode('ANSI_QUOTES'); + } + + if (isset($params['q'])) { + echo Formatter::format( + $params['q'], + ['type' => $params['f']] + ); + echo "\n"; + + return 0; + } + + echo "ERROR: Missing parameters!\n"; + $this->usageHighlight(); + + return 1; + } + + /** + * @return void + */ + public function usageLint() + { + echo "Usage: lint-query --query SQL [--ansi]\n"; + echo " cat file.sql | lint-query\n"; + } + + /** + * @return mixed + */ + public function parseLint() + { + $longopts = [ + 'help', + 'query:', + 'context:', + 'ansi', + ]; + $params = $this->getopt('hq:c:a', $longopts); + $this->mergeLongOpts($params, $longopts); + + return $params; + } + + /** + * @return int + */ + public function runLint() + { + $params = $this->parseLint(); + if ($params === false) { + return 1; + } + + if (isset($params['h'])) { + $this->usageLint(); + + return 0; + } + + if (isset($params['c'])) { + Context::load($params['c']); + } + + if (! isset($params['q'])) { + $stdIn = $this->readStdin(); + + if ($stdIn) { + $params['q'] = $stdIn; + } + } + + if (isset($params['a'])) { + Context::setMode('ANSI_QUOTES'); + } + + if (isset($params['q'])) { + $lexer = new Lexer($params['q'], false); + $parser = new Parser($lexer->list); + $errors = Error::get([$lexer, $parser]); + if (count($errors) === 0) { + return 0; + } + + $output = Error::format($errors); + echo implode("\n", $output); + echo "\n"; + + return 10; + } + + echo "ERROR: Missing parameters!\n"; + $this->usageLint(); + + return 1; + } + + /** + * @return void + */ + public function usageTokenize() + { + echo "Usage: tokenize-query --query SQL [--ansi]\n"; + echo " cat file.sql | tokenize-query\n"; + } + + /** + * @return mixed + */ + public function parseTokenize() + { + $longopts = [ + 'help', + 'query:', + 'ansi', + ]; + $params = $this->getopt('hq:a', $longopts); + $this->mergeLongOpts($params, $longopts); + + return $params; + } + + /** + * @return int + */ + public function runTokenize() + { + $params = $this->parseTokenize(); + if ($params === false) { + return 1; + } + + if (isset($params['h'])) { + $this->usageTokenize(); + + return 0; + } + + if (! isset($params['q'])) { + $stdIn = $this->readStdin(); + + if ($stdIn) { + $params['q'] = $stdIn; + } + } + + if (isset($params['a'])) { + Context::setMode('ANSI_QUOTES'); + } + + if (isset($params['q'])) { + $lexer = new Lexer($params['q'], false); + foreach ($lexer->list->tokens as $idx => $token) { + echo '[TOKEN ', $idx, "]\n"; + echo 'Type = ', $token->type, "\n"; + echo 'Flags = ', $token->flags, "\n"; + echo 'Value = '; + var_export($token->value); + echo "\n"; + echo 'Token = '; + var_export($token->token); + echo "\n"; + echo "\n"; + } + + return 0; + } + + echo "ERROR: Missing parameters!\n"; + $this->usageTokenize(); + + return 1; + } + + /** + * @return string|false + */ + public function readStdin() + { + $read = [STDIN]; + $write = []; + $except = []; + + // Assume there's nothing to be read from STDIN. + $stdin = null; + + // Try to read from STDIN. Wait 0.2 second before timing out. + $result = stream_select($read, $write, $except, 0, 2000); + + if ($result > 0) { + $stdin = stream_get_contents(STDIN); + } + + return $stdin; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/Routine.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/Routine.php new file mode 100644 index 0000000..2d08c36 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/Routine.php @@ -0,0 +1,144 @@ +list); + + if ($type === null) { + return [ + '', + '', + '', + '', + '', + ]; + } + + $options = []; + foreach ($type->options->options as $opt) { + $options[] = is_string($opt) ? $opt : $opt['value']; + } + + return [ + '', + '', + $type->name, + implode(',', $type->parameters), + implode(' ', $options), + ]; + } + + /** + * Parses a parameter of a routine. + * + * @param string $param parameter's definition + * + * @return array + */ + public static function getParameter($param) + { + $lexer = new Lexer('(' . $param . ')'); + + // A dummy parser is used for error reporting. + $param = ParameterDefinition::parse(new Parser(), $lexer->list); + + if (empty($param[0])) { + return [ + '', + '', + '', + '', + '', + ]; + } + + $param = $param[0]; + + $options = []; + foreach ($param->type->options->options as $opt) { + $options[] = is_string($opt) ? $opt : $opt['value']; + } + + return [ + empty($param->inOut) ? '' : $param->inOut, + $param->name, + $param->type->name, + implode(',', $param->type->parameters), + implode(' ', $options), + ]; + } + + /** + * Gets the parameters of a routine from the parse tree. + * + * @param CreateStatement $statement the statement to be processed + * + * @return array + */ + public static function getParameters($statement) + { + $retval = [ + 'num' => 0, + 'dir' => [], + 'name' => [], + 'type' => [], + 'length' => [], + 'length_arr' => [], + 'opts' => [], + ]; + + if (! empty($statement->parameters)) { + $idx = 0; + foreach ($statement->parameters as $param) { + $retval['dir'][$idx] = $param->inOut; + $retval['name'][$idx] = $param->name; + $retval['type'][$idx] = $param->type->name; + $retval['length'][$idx] = implode(',', $param->type->parameters); + $retval['length_arr'][$idx] = $param->type->parameters; + $retval['opts'][$idx] = []; + foreach ($param->type->options->options as $opt) { + $retval['opts'][$idx][] = is_string($opt) ? + $opt : $opt['value']; + } + + $retval['opts'][$idx] = implode(' ', $retval['opts'][$idx]); + ++$idx; + } + + $retval['num'] = $idx; + } + + return $retval; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/CHANGELOG.md new file mode 100644 index 0000000..aadbdac --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/CHANGELOG.md @@ -0,0 +1,33 @@ +# Change Log + +## [Unreleased] - + +## [4.0.1] - 2021-06-10 + +* Fix TransNode constructor optional parameters + +## [4.0.0] - 2021-02-25 + +* Add support for domain translation (#4) +* TransNode constructor signature changed, new $domain parameter `?Node $notes, ?Node $domain = null, int $lineno` (#4) +* TransNode constructor signature changed, new $context parameter `?AbstractExpression $count, ?Node $context = null, ?Node $notes` (#6) +* Add support for contexts in translations (#6) +* Add support for enabling `phpmyadmin/motranslator` or complex non php-gettext supported functions (#6) +* Add support for custom notes labels (#6) +* Make debug info disabled by default, `TransNode::$enableAddDebugInfo = true;` will add it back +* Some slight performance improvements +* Added tests for all the code + +## [3.0.0] - 2020-06-14 + +* Add a .gitattributes file +* Support Twig 3 +* Remove extra field from composer.json +* Add support field in composer.json +* Require php >= 7.1 +* Setup and apply phpmyadmin/coding-standard +* Apply changes for php 8.0 compatibility (https://github.com/twigphp/Twig/issues/3327) + +## [2.0.0] - 2020-01-14 + +* First release of this library. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/LICENSE b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/LICENSE new file mode 100644 index 0000000..5fec1a8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2010-2019 Fabien Potencier +Copyright (c) 2019-2021 phpMyAdmin contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/composer.json new file mode 100644 index 0000000..2619ae0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/composer.json @@ -0,0 +1,47 @@ +{ + "name": "phpmyadmin/twig-i18n-extension", + "description": "Internationalization support for Twig via the gettext library", + "keywords": ["i18n","gettext"], + "type": "library", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "The phpMyAdmin Team", + "email": "developers@phpmyadmin.net", + "homepage": "https://www.phpmyadmin.net/team/" + } + ], + "support": { + "issues": "https://github.com/phpmyadmin/twig-i18n-extension/issues", + "source": "https://github.com/phpmyadmin/twig-i18n-extension" + }, + "require": { + "php": "^7.1 || ^8.0", + "twig/twig": "^1.42.3|^2.0|^3.0" + }, + "require-dev": { + "phpmyadmin/coding-standard": "^3.0.0", + "phpmyadmin/motranslator": "^5.2", + "phpstan/phpstan": "^0.12.66", + "phpunit/phpunit": "^7 || ^8 || ^9" + }, + "scripts": { + "phpstan": "./vendor/bin/phpstan analyse", + "phpunit": "phpunit", + "phpcs": "phpcs", + "phpcbf": "phpcbf" + }, + "autoload": { + "psr-4": { "PhpMyAdmin\\Twig\\Extensions\\": "src/" } + }, + "autoload-dev": { + "psr-4": { "PhpMyAdmin\\Tests\\Twig\\Extensions\\": "test/" } + }, + "config":{ + "sort-packages": true + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/src/Node/TransNode.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/src/Node/TransNode.php new file mode 100644 index 0000000..9acaaec --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/src/Node/TransNode.php @@ -0,0 +1,315 @@ + + */ +class TransNode extends Node +{ + /** + * The label for gettext notes to be exported + * + * @var string + */ + public static $notesLabel = '// notes: '; + + /** + * Enable MoTranslator functions + * + * @var bool + */ + public static $enableMoTranslator = false; + + /** + * Enable calls to addDebugInfo + * + * @var bool + */ + public static $enableAddDebugInfo = false; + + /** + * Enables context functions usage + * + * @var bool + */ + public static $hasContextFunctions = false; + + public function __construct( + Node $body, + ?Node $plural, + ?AbstractExpression $count, + ?Node $context = null, + ?Node $notes = null, + ?Node $domain = null, + int $lineno = 0, + ?string $tag = null + ) { + $nodes = ['body' => $body]; + if ($count !== null) { + $nodes['count'] = $count; + } + + if ($plural !== null) { + $nodes['plural'] = $plural; + } + + if ($notes !== null) { + $nodes['notes'] = $notes; + } + + if ($domain !== null) { + $nodes['domain'] = $domain; + } + + if ($context !== null) { + $nodes['context'] = $context; + } + + parent::__construct($nodes, [], $lineno, $tag); + } + + /** + * {@inheritdoc} + */ + public function compile(Compiler $compiler) + { + if (self::$enableAddDebugInfo) { + $compiler->addDebugInfo($this); + } + + [$msg, $vars] = $this->compileString($this->getNode('body')); + + $hasPlural = $this->hasNode('plural'); + + if ($hasPlural) { + [$msg1, $vars1] = $this->compileString($this->getNode('plural')); + + $vars = array_merge($vars, $vars1); + } + + $hasDomain = $this->hasNode('domain'); + $hasContext = $this->hasNode('context'); + + $function = $this->getTransFunction($hasPlural, $hasContext, $hasDomain); + + if ($this->hasNode('notes')) { + $message = trim($this->getNode('notes')->getAttribute('data')); + + // line breaks are not allowed cause we want a single line comment + $message = str_replace(["\n", "\r"], ' ', $message); + $compiler->raw(static::$notesLabel . $message . "\n"); + } + + if ($vars) { + $compiler + ->raw('echo strtr(' . $function . '('); + + if ($hasDomain) { + [$domain] = $this->compileString($this->getNode('domain')); + $compiler + ->subcompile($domain) + ->raw(', '); + } + + if ($hasContext && (static::$hasContextFunctions || static::$enableMoTranslator)) { + [$context] = $this->compileString($this->getNode('context')); + $compiler + ->subcompile($context) + ->raw(', '); + } + + $compiler + ->subcompile($msg); + + if ($hasPlural) { + $compiler + ->raw(', ') + ->subcompile($msg1) + ->raw(', abs(') + ->subcompile($this->getNode('count')) + ->raw(')'); + } + + $compiler->raw('), array('); + + foreach ($vars as $var) { + $attributeName = $var->getAttribute('name'); + if ($attributeName === 'count') { + $compiler + ->string('%count%') + ->raw(' => abs(') + ->subcompile($this->getNode('count')) + ->raw('), '); + } else { + $compiler + ->string('%' . $attributeName . '%') + ->raw(' => ') + ->subcompile($var) + ->raw(', '); + } + } + + $compiler->raw("));\n"); + } else { + $compiler + ->raw('echo ' . $function . '('); + + if ($hasDomain) { + [$domain] = $this->compileString($this->getNode('domain')); + $compiler + ->subcompile($domain) + ->raw(', '); + } + + if ($hasContext) { + if (static::$hasContextFunctions || static::$enableMoTranslator) { + [$context] = $this->compileString($this->getNode('context')); + $compiler + ->subcompile($context) + ->raw(', '); + } + } + + $compiler + ->subcompile($msg); + + if ($hasPlural) { + $compiler + ->raw(', ') + ->subcompile($msg1) + ->raw(', abs(') + ->subcompile($this->getNode('count')) + ->raw(')'); + } + + $compiler->raw(");\n"); + } + } + + /** + * Keep this method protected instead of private some implementations may use it + */ + protected function compileString(Node $body): array + { + if ( + $body instanceof NameExpression + || $body instanceof ConstantExpression + || $body instanceof TempNameExpression + ) { + return [$body, []]; + } + + $vars = []; + if (count($body)) { + $msg = ''; + + foreach ($body as $node) { + if ($node instanceof PrintNode) { + $n = $node->getNode('expr'); + while ($n instanceof FilterExpression) { + $n = $n->getNode('node'); + } + + while ($n instanceof CheckToStringNode) { + $n = $n->getNode('expr'); + } + + $attributeName = $n->getAttribute('name'); + $msg .= sprintf('%%%s%%', $attributeName); + $vars[] = new NameExpression($attributeName, $n->getTemplateLine()); + } else { + $msg .= $node->getAttribute('data'); + } + } + } else { + $msg = $body->getAttribute('data'); + } + + return [new Node([new ConstantExpression(trim($msg), $body->getTemplateLine())]), $vars]; + } + + /** + * Keep this protected to allow people to override it with their own logic + */ + protected function getTransFunction(bool $hasPlural, bool $hasContext, bool $hasDomain): string + { + $functionPrefix = ''; + + if (static::$enableMoTranslator) { + // The functions are prefixed with an underscore + $functionPrefix = '_'; + } + + // If it has not context function support or not MoTranslator + if (! static::$hasContextFunctions && ! static::$enableMoTranslator) { + // Not found on native PHP: dnpgettext, npgettext, dpgettext, pgettext + // No domain plural context support + // No domain context support + // No context support + // No plural context support + + if ($hasDomain) { + // dngettext($domain, $msgid, $msgidPlural, $number); + // dgettext($domain, $msgid); + return $functionPrefix . ($hasPlural ? 'dngettext' : 'dgettext'); + } + + // ngettext($msgid, $msgidPlural, $number); + // gettext($msgid); + return $functionPrefix . ($hasPlural ? 'ngettext' : 'gettext'); + } + + if ($hasDomain) { + if ($hasPlural) { + // dnpgettext($domain, $msgctxt, $msgid, $msgidPlural, $number); + // dngettext($domain, $msgid, $msgidPlural, $number); + return $functionPrefix . ($hasContext ? 'dnpgettext' : 'dngettext'); + } + + // dpgettext($domain, $msgctxt, $msgid); + // dgettext($domain, $msgid); + return $functionPrefix . ($hasContext ? 'dpgettext' : 'dgettext'); + } + + if ($hasPlural) { + // npgettext($msgctxt, $msgid, $msgidPlural, $number); + // ngettext($msgid, $msgidPlural, $number); + return $functionPrefix . ($hasContext ? 'npgettext' : 'ngettext'); + } + + // pgettext($msgctxt, $msgid); + // gettext($msgid); + return $functionPrefix . ($hasContext ? 'pgettext' : 'gettext'); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/LICENSE.md b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/LICENSE.md new file mode 100644 index 0000000..7300640 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/LICENSE.md @@ -0,0 +1,7 @@ +Copyright 2014-2018 Phil, Antonio Carlos Ribeiro and All Contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/README.md b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/README.md new file mode 100644 index 0000000..4a5b9ad --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/README.md @@ -0,0 +1,149 @@ +# Google2FA QRCode + +

        + Latest Stable Version + License + Code Quality + Build +

        +

        + Downloads + Coverage + StyleCI + PHP +

        + +### QRCode For Google2FA + +This is package is [Goole2FA](https://github.com/antonioribeiro/google2fa) integrated with a QRCode generator, providing an easy way to plot QRCode for your two factor authentication. For documentation related to Google2FA, please check the [documentation of the main package](https://github.com/antonioribeiro/google2fa). + +## Requirements + +- PHP 5.4+ + +## Installing + +Use Composer to install it: + +``` +composer require pragmarx/google2fa-qrcode +``` + +## Using It + +### Instantiate it directly + +```php +use PragmaRX\Google2FAQRCode\Google2FA; + +$google2fa = new Google2FA(); + +return $google2fa->generateSecretKey(); +``` + +## Generating QRCodes + +The securer way of creating QRCode is to do it yourself or using a library. First you have to install the BaconQrCode package, as stated above, then you just have to generate the inline string using: + +```php +$inlineUrl = $google2fa->getQRCodeInline( + $companyName, + $companyEmail, + $secretKey +); +``` + +And use it in your blade template this way: + +```html + +``` + +```php +$secretKey = $google2fa->generateSecretKey(16, $userId); +``` + +## Show the QR Code to your user, via Google Apis + +It's insecure to use it via Google Apis, so you have to enable it before using it. + +```php +$google2fa->setAllowInsecureCallToGoogleApis(true); + +$google2fa_url = $google2fa->getQRCodeGoogleUrl( + 'YourCompany', + $user->email, + $user->google2fa_secret +); + +/// and in your view: + + +``` + +And they should see and scan the QR code to their applications: + +![QRCode](https://chart.googleapis.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth%3A%2F%2Ftotp%2FPragmaRX%3Aacr%2Bpragmarx%40antoniocarlosribeiro.com%3Fsecret%3DADUMJO5634NPDEKW%26issuer%3DPragmaRX) + +And to verify, you just have to: + +```php +$secret = $request->input('secret'); + +$valid = $google2fa->verifyKey($user->google2fa_secret, $secret); +``` + +## Replacing the QRCode rendering service + +If you want to use a different service, you just have to + +```php +$google2fa->setQrcodeService(new YourService()) + ->getQRCodeInline( + $companyName, + $companyEmail, + $secretKey + ); +``` + +## Built-in QRCode rendering services + +Beginning on version 2.0 the rendering service is optional, so you have to manually install one of those packages in order to generate QRCodes: + +- [BaconQrCode](https://github.com/Bacon/BaconQrCode): renders PNG by default, but requires the Imagick PHP extension. You can configure it to use different backends, but you'll have to instantiate it yourself. +- [chillerlan/php-qrcode](https://github.com/chillerlan/php-qrcode): renders SVG by default and don't require the Imagick PHP extension, but can also generate other formats, which may require Imagick. + +## Using a diffent image backend + +```php +$google2fa->setQrcodeService( + new \PragmaRX\Google2FAQRCode\QRCode\Bacon( + new \BaconQrCode\Renderer\Image\SvgImageBackEnd() + ) +); + +// or + +$google2fa = new Google2FA( + new Bacon( + new \BaconQrCode\Renderer\Image\SvgImageBackEnd() + ) +); +``` + +## Tests + +The package tests were written with [PHPUnit](https://phpunit.de/). + +## Authors + +- [Antonio Carlos Ribeiro](http://twitter.com/iantonioribeiro) +- [All Contributors](https://github.com/antonioribeiro/google2fa/graphs/contributors) + +## License + +Google2FAQRCode is licensed under the MIT License - see the [LICENSE](LICENSE.md) file for details. + +## Contributing + +Pull requests and issues are more than welcome. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/src/QRCode/Bacon.php b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/src/QRCode/Bacon.php new file mode 100644 index 0000000..3afce12 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/src/QRCode/Bacon.php @@ -0,0 +1,97 @@ +imageBackEnd = $imageBackEnd; + } + + /** + * Generates a QR code data url to display inline. + * + * @param string $string + * @param int $size + * @param string $encoding Default to UTF-8 + * + * @return string + */ + public function getQRCodeInline($string, $size = 200, $encoding = 'utf-8') + { + $renderer = new ImageRenderer( + (new RendererStyle($size))->withSize($size), + $this->getImageBackEnd() + ); + + $bacon = new Writer($renderer); + + $data = $bacon->writeString($string, $encoding); + + if ($this->getImageBackEnd() instanceof ImagickImageBackEnd) { + return 'data:image/png;base64,' . base64_encode($data); + } + + return $data; + } + + /** + * Check if Imagick is available + * + * @return int + */ + public function imagickIsAvailable() + { + return extension_loaded('imagick'); + } + + /** + * Get image backend + * + * @return ImageRenderer + */ + public function getImageBackend() + { + if (empty($this->imageBackEnd)) { + $this->imageBackEnd = !$this->imagickIsAvailable() + ? new SvgImageBackEnd() + : new ImagickImageBackEnd(); + } + + $this->setImageBackEnd($this->imageBackEnd); + + return $this->imageBackEnd; + } + + /** + * Set image backend + * + * @param $imageBackEnd + * @return $this + */ + public function setImageBackend($imageBackEnd) + { + $this->imageBackEnd = $imageBackEnd; + + return $this; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa/src/Exceptions/IncompatibleWithGoogleAuthenticatorException.php b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa/src/Exceptions/IncompatibleWithGoogleAuthenticatorException.php new file mode 100644 index 0000000..778a57f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa/src/Exceptions/IncompatibleWithGoogleAuthenticatorException.php @@ -0,0 +1,11 @@ +getAlgorithm())). + '&digits='. + rawurlencode(strtoupper((string) $this->getOneTimePasswordLength())). + '&period='. + rawurlencode(strtoupper((string) $this->getKeyRegeneration())). + ''; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/psr/cache/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/psr/cache/composer.json new file mode 100644 index 0000000..e828fec --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/psr/cache/composer.json @@ -0,0 +1,25 @@ +{ + "name": "psr/cache", + "description": "Common interface for caching libraries", + "keywords": ["psr", "psr-6", "cache"], + "license": "MIT", + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "require": { + "php": ">=5.3.0" + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/psr/container/LICENSE b/Sources/php_script/script/phpMyAdmin/vendor/psr/container/LICENSE new file mode 100644 index 0000000..2877a48 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/psr/container/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2013-2016 container-interop +Copyright (c) 2016 PHP Framework Interoperability Group + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/psr/http-factory/src/UriFactoryInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/psr/http-factory/src/UriFactoryInterface.php new file mode 100644 index 0000000..06df0b4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/psr/http-factory/src/UriFactoryInterface.php @@ -0,0 +1,17 @@ +logger = $logger; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/psr/log/Psr/Log/LoggerTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/psr/log/Psr/Log/LoggerTrait.php new file mode 100644 index 0000000..e392fef --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/psr/log/Psr/Log/LoggerTrait.php @@ -0,0 +1,142 @@ +log(LogLevel::EMERGENCY, $message, $context); + } + + /** + * Action must be taken immediately. + * + * Example: Entire website down, database unavailable, etc. This should + * trigger the SMS alerts and wake you up. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function alert($message, array $context = array()) + { + $this->log(LogLevel::ALERT, $message, $context); + } + + /** + * Critical conditions. + * + * Example: Application component unavailable, unexpected exception. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function critical($message, array $context = array()) + { + $this->log(LogLevel::CRITICAL, $message, $context); + } + + /** + * Runtime errors that do not require immediate action but should typically + * be logged and monitored. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function error($message, array $context = array()) + { + $this->log(LogLevel::ERROR, $message, $context); + } + + /** + * Exceptional occurrences that are not errors. + * + * Example: Use of deprecated APIs, poor use of an API, undesirable things + * that are not necessarily wrong. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function warning($message, array $context = array()) + { + $this->log(LogLevel::WARNING, $message, $context); + } + + /** + * Normal but significant events. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function notice($message, array $context = array()) + { + $this->log(LogLevel::NOTICE, $message, $context); + } + + /** + * Interesting events. + * + * Example: User logs in, SQL logs. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function info($message, array $context = array()) + { + $this->log(LogLevel::INFO, $message, $context); + } + + /** + * Detailed debug information. + * + * @param string $message + * @param array $context + * + * @return void + */ + public function debug($message, array $context = array()) + { + $this->log(LogLevel::DEBUG, $message, $context); + } + + /** + * Logs with an arbitrary level. + * + * @param mixed $level + * @param string $message + * @param array $context + * + * @return void + * + * @throws \Psr\Log\InvalidArgumentException + */ + abstract public function log($level, $message, array $context = array()); +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/ralouphie/getallheaders/README.md b/Sources/php_script/script/phpMyAdmin/vendor/ralouphie/getallheaders/README.md new file mode 100644 index 0000000..9430d76 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/ralouphie/getallheaders/README.md @@ -0,0 +1,27 @@ +getallheaders +============= + +PHP `getallheaders()` polyfill. Compatible with PHP >= 5.3. + +[![Build Status](https://travis-ci.org/ralouphie/getallheaders.svg?branch=master)](https://travis-ci.org/ralouphie/getallheaders) +[![Coverage Status](https://coveralls.io/repos/ralouphie/getallheaders/badge.png?branch=master)](https://coveralls.io/r/ralouphie/getallheaders?branch=master) +[![Latest Stable Version](https://poser.pugx.org/ralouphie/getallheaders/v/stable.png)](https://packagist.org/packages/ralouphie/getallheaders) +[![Latest Unstable Version](https://poser.pugx.org/ralouphie/getallheaders/v/unstable.png)](https://packagist.org/packages/ralouphie/getallheaders) +[![License](https://poser.pugx.org/ralouphie/getallheaders/license.png)](https://packagist.org/packages/ralouphie/getallheaders) + + +This is a simple polyfill for [`getallheaders()`](http://www.php.net/manual/en/function.getallheaders.php). + +## Install + +For PHP version **`>= 5.6`**: + +``` +composer require ralouphie/getallheaders +``` + +For PHP version **`< 5.6`**: + +``` +composer require ralouphie/getallheaders "^2" +``` diff --git a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Cookies.php b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Cookies.php new file mode 100644 index 0000000..db8174f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Cookies.php @@ -0,0 +1,221 @@ + '', + 'domain' => null, + 'hostonly' => null, + 'path' => null, + 'expires' => null, + 'secure' => false, + 'httponly' => false, + 'samesite' => null + ]; + + /** + * @param array $cookies + */ + public function __construct(array $cookies = []) + { + $this->requestCookies = $cookies; + } + + /** + * Set default cookie properties + * + * @param array $settings + * + * @return static + */ + public function setDefaults(array $settings): self + { + $this->defaults = array_replace($this->defaults, $settings); + + return $this; + } + + /** + * Get cookie + * + * @param string $name + * @param string|array|null $default + * @return mixed|null + */ + public function get(string $name, $default = null) + { + return array_key_exists($name, $this->requestCookies) ? $this->requestCookies[$name] : $default; + } + + /** + * Set cookie + * + * @param string $name + * @param string|array $value + * @return static + */ + public function set(string $name, $value): self + { + if (!is_array($value)) { + $value = ['value' => $value]; + } + + $this->responseCookies[$name] = array_replace($this->defaults, $value); + + return $this; + } + + /** + * Convert all response cookies into an associate array of header values + * + * @return array + */ + public function toHeaders(): array + { + $headers = []; + + foreach ($this->responseCookies as $name => $properties) { + $headers[] = $this->toHeader($name, $properties); + } + + return $headers; + } + + /** + * Convert to `Set-Cookie` header + * + * @param string $name Cookie name + * @param array $properties Cookie properties + * + * @return string + */ + protected function toHeader(string $name, array $properties): string + { + $result = urlencode($name) . '=' . urlencode($properties['value']); + + if (isset($properties['domain'])) { + $result .= '; domain=' . $properties['domain']; + } + + if (isset($properties['path'])) { + $result .= '; path=' . $properties['path']; + } + + if (isset($properties['expires'])) { + if (is_string($properties['expires'])) { + $timestamp = strtotime($properties['expires']); + } else { + $timestamp = (int) $properties['expires']; + } + if ($timestamp && $timestamp !== 0) { + $result .= '; expires=' . gmdate('D, d-M-Y H:i:s e', $timestamp); + } + } + + if (isset($properties['secure']) && $properties['secure']) { + $result .= '; secure'; + } + + if (isset($properties['hostonly']) && $properties['hostonly']) { + $result .= '; HostOnly'; + } + + if (isset($properties['httponly']) && $properties['httponly']) { + $result .= '; HttpOnly'; + } + + if (isset($properties['samesite']) && in_array(strtolower($properties['samesite']), ['lax', 'strict'], true)) { + // While strtolower is needed for correct comparison, the RFC doesn't care about case + $result .= '; SameSite=' . $properties['samesite']; + } + + return $result; + } + + /** + * Parse cookie values from header value + * + * Returns an associative array of cookie names and values + * + * @param string|array $header + * + * @return array + */ + public static function parseHeader($header): array + { + if (is_array($header)) { + $header = isset($header[0]) ? $header[0] : ''; + } + + if (!is_string($header)) { + throw new InvalidArgumentException('Cannot parse Cookie data. Header value must be a string.'); + } + + $header = rtrim($header, "\r\n"); + $pieces = preg_split('@[;]\s*@', $header); + $cookies = []; + + if (is_array($pieces)) { + foreach ($pieces as $cookie) { + $cookie = explode('=', $cookie, 2); + + if (count($cookie) === 2) { + $key = urldecode($cookie[0]); + $value = urldecode($cookie[1]); + + if (!isset($cookies[$key])) { + $cookies[$key] = $value; + } + } + } + } + + return $cookies; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Factory/RequestFactory.php b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Factory/RequestFactory.php new file mode 100644 index 0000000..333af40 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Factory/RequestFactory.php @@ -0,0 +1,73 @@ +streamFactory = $streamFactory; + $this->uriFactory = $uriFactory; + } + + /** + * {@inheritdoc} + */ + public function createRequest(string $method, $uri): RequestInterface + { + if (is_string($uri)) { + $uri = $this->uriFactory->createUri($uri); + } + + if (!$uri instanceof UriInterface) { + throw new InvalidArgumentException( + 'Parameter 2 of RequestFactory::createRequest() must be a string or a compatible UriInterface.' + ); + } + + $body = $this->streamFactory->createStream(); + + return new Request($method, $uri, new Headers(), [], [], $body); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Headers.php b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Headers.php new file mode 100644 index 0000000..afde205 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Headers.php @@ -0,0 +1,321 @@ +globals = $globals ?? $_SERVER; + $this->setHeaders($headers); + } + + /** + * {@inheritdoc} + */ + public function addHeader($name, $value): HeadersInterface + { + [$values, $originalName, $normalizedName] = $this->prepareHeader($name, $value); + + if (isset($this->headers[$normalizedName])) { + $header = $this->headers[$normalizedName]; + $header->addValues($values); + } else { + $this->headers[$normalizedName] = new Header($originalName, $normalizedName, $values); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function removeHeader(string $name): HeadersInterface + { + $name = $this->normalizeHeaderName($name); + unset($this->headers[$name]); + return $this; + } + + /** + * {@inheritdoc} + */ + public function getHeader(string $name, $default = []): array + { + $name = $this->normalizeHeaderName($name); + + if (isset($this->headers[$name])) { + $header = $this->headers[$name]; + return $header->getValues(); + } + + if (empty($default)) { + return $default; + } + + $this->validateHeader($name, $default); + return $this->trimHeaderValue($default); + } + + /** + * {@inheritdoc} + */ + public function setHeader($name, $value): HeadersInterface + { + [$values, $originalName, $normalizedName] = $this->prepareHeader($name, $value); + + // Ensure we preserve original case if the header already exists in the stack + if (isset($this->headers[$normalizedName])) { + $existingHeader = $this->headers[$normalizedName]; + $originalName = $existingHeader->getOriginalName(); + } + + $this->headers[$normalizedName] = new Header($originalName, $normalizedName, $values); + + return $this; + } + + /** + * {@inheritdoc} + */ + public function setHeaders(array $headers): HeadersInterface + { + $this->headers = []; + + foreach ($this->parseAuthorizationHeader($headers) as $name => $value) { + $this->addHeader($name, $value); + } + + return $this; + } + + /** + * {@inheritdoc} + */ + public function hasHeader(string $name): bool + { + $name = $this->normalizeHeaderName($name); + return isset($this->headers[$name]); + } + + /** + * {@inheritdoc} + */ + public function getHeaders(bool $originalCase = false): array + { + $headers = []; + + foreach ($this->headers as $header) { + $name = $originalCase ? $header->getOriginalName() : $header->getNormalizedName(); + $headers[$name] = $header->getValues(); + } + + return $headers; + } + + /** + * @param string $name + * @param bool $preserveCase + * @return string + */ + protected function normalizeHeaderName(string $name, bool $preserveCase = false): string + { + $name = strtr($name, '_', '-'); + + if (!$preserveCase) { + $name = strtolower($name); + } + + if (strpos(strtolower($name), 'http-') === 0) { + $name = substr($name, 5); + } + + return $name; + } + + /** + * Parse incoming headers and determine Authorization header from original headers + * + * @param array $headers + * @return array + */ + protected function parseAuthorizationHeader(array $headers): array + { + $hasAuthorizationHeader = false; + foreach ($headers as $name => $value) { + if (strtolower($name) === 'authorization') { + $hasAuthorizationHeader = true; + break; + } + } + + if (!$hasAuthorizationHeader) { + if (isset($this->globals['REDIRECT_HTTP_AUTHORIZATION'])) { + $headers['Authorization'] = $this->globals['REDIRECT_HTTP_AUTHORIZATION']; + } elseif (isset($this->globals['PHP_AUTH_USER'])) { + $pw = isset($this->globals['PHP_AUTH_PW']) ? $this->globals['PHP_AUTH_PW'] : ''; + $headers['Authorization'] = 'Basic ' . base64_encode($this->globals['PHP_AUTH_USER'] . ':' . $pw); + } elseif (isset($this->globals['PHP_AUTH_DIGEST'])) { + $headers['Authorization'] = $this->globals['PHP_AUTH_DIGEST']; + } + } + + return $headers; + } + + /** + * @param array|string $value + * + * @return array + */ + protected function trimHeaderValue($value): array + { + $items = is_array($value) ? $value : [$value]; + $result = []; + foreach ($items as $item) { + $result[] = trim((string) $item, " \t"); + } + return $result; + } + + /** + * @param string $name + * @param array|string $value + * + * @throws InvalidArgumentException + * + * @return array + */ + protected function prepareHeader($name, $value): array + { + $this->validateHeader($name, $value); + $values = $this->trimHeaderValue($value); + $originalName = $this->normalizeHeaderName($name, true); + $normalizedName = $this->normalizeHeaderName($name); + return [$values, $originalName, $normalizedName]; + } + + /** + * Make sure the header complies with RFC 7230. + * + * Header names must be a non-empty string consisting of token characters. + * + * Header values must be strings consisting of visible characters with all optional + * leading and trailing whitespace stripped. This method will always strip such + * optional whitespace. Note that the method does not allow folding whitespace within + * the values as this was deprecated for almost all instances by the RFC. + * + * header-field = field-name ":" OWS field-value OWS + * field-name = 1*( "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" + * / "_" / "`" / "|" / "~" / %x30-39 / ( %x41-5A / %x61-7A ) ) + * OWS = *( SP / HTAB ) + * field-value = *( ( %x21-7E / %x80-FF ) [ 1*( SP / HTAB ) ( %x21-7E / %x80-FF ) ] ) + * + * @see https://tools.ietf.org/html/rfc7230#section-3.2.4 + * + * @param string $name + * @param array|string $value + * + * @throws InvalidArgumentException; + */ + protected function validateHeader($name, $value): void + { + $this->validateHeaderName($name); + $this->validateHeaderValue($value); + } + + /** + * @param mixed $name + * + * @throws InvalidArgumentException + */ + protected function validateHeaderName($name): void + { + if (!is_string($name) || preg_match("@^[!#$%&'*+.^_`|~0-9A-Za-z-]+$@", $name) !== 1) { + throw new InvalidArgumentException('Header name must be an RFC 7230 compatible string.'); + } + } + + /** + * @param mixed $value + * + * @throws InvalidArgumentException + */ + protected function validateHeaderValue($value): void + { + $items = is_array($value) ? $value : [$value]; + + if (empty($items)) { + throw new InvalidArgumentException( + 'Header values must be a string or an array of strings, empty array given.' + ); + } + + $pattern = "@^[ \t\x21-\x7E\x80-\xFF]*$@"; + foreach ($items as $item) { + $hasInvalidType = !is_numeric($item) && !is_string($item); + $rejected = $hasInvalidType || preg_match($pattern, (string) $item) !== 1; + if ($rejected) { + throw new InvalidArgumentException( + 'Header values must be RFC 7230 compatible strings.' + ); + } + } + } + + /** + * @return static + */ + public static function createFromGlobals() + { + $headers = null; + + if (function_exists('getallheaders')) { + $headers = getallheaders(); + } + + if (!is_array($headers)) { + $headers = []; + } + + return new static($headers); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Message.php b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Message.php new file mode 100644 index 0000000..264540e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Message.php @@ -0,0 +1,191 @@ + true, + '1.1' => true, + '2.0' => true, + '2' => true, + ]; + + /** + * @var HeadersInterface + */ + protected $headers; + + /** + * @var StreamInterface + */ + protected $body; + + /** + * Disable magic setter to ensure immutability + * + * @param string $name The property name + * @param mixed $value The property value + * + * @return void + */ + public function __set($name, $value): void + { + // Do nothing + } + + /** + * {@inheritdoc} + */ + public function getProtocolVersion(): string + { + return $this->protocolVersion; + } + + /** + * @return static + * {@inheritdoc} + */ + public function withProtocolVersion($version) + { + if (!isset(self::$validProtocolVersions[$version])) { + throw new InvalidArgumentException( + 'Invalid HTTP version. Must be one of: ' + . implode(', ', array_keys(self::$validProtocolVersions)) + ); + } + + $clone = clone $this; + $clone->protocolVersion = $version; + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getHeaders(): array + { + return $this->headers->getHeaders(true); + } + + /** + * {@inheritdoc} + */ + public function hasHeader($name): bool + { + return $this->headers->hasHeader($name); + } + + /** + * {@inheritdoc} + */ + public function getHeader($name): array + { + return $this->headers->getHeader($name); + } + + /** + * {@inheritdoc} + */ + public function getHeaderLine($name): string + { + $values = $this->headers->getHeader($name); + return implode(',', $values); + } + + /** + * @return static + * {@inheritdoc} + */ + public function withHeader($name, $value) + { + $clone = clone $this; + $clone->headers->setHeader($name, $value); + + if ($this instanceof Response && $this->body instanceof NonBufferedBody) { + header(sprintf('%s: %s', $name, $clone->getHeaderLine($name))); + } + + return $clone; + } + + /** + * @return static + * {@inheritdoc} + */ + public function withAddedHeader($name, $value) + { + $clone = clone $this; + $clone->headers->addHeader($name, $value); + + if ($this instanceof Response && $this->body instanceof NonBufferedBody) { + header(sprintf('%s: %s', $name, $clone->getHeaderLine($name))); + } + + return $clone; + } + + /** + * @return static + * {@inheritdoc} + */ + public function withoutHeader($name) + { + $clone = clone $this; + $clone->headers->removeHeader($name); + + if ($this instanceof Response && $this->body instanceof NonBufferedBody) { + header_remove($name); + } + + return $clone; + } + + /** + * {@inheritdoc} + */ + public function getBody(): StreamInterface + { + return $this->body; + } + + /** + * @return static + * {@inheritdoc} + */ + public function withBody(StreamInterface $body) + { + $clone = clone $this; + $clone->body = $body; + + return $clone; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CHANGELOG.md new file mode 100644 index 0000000..7932e26 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CHANGELOG.md @@ -0,0 +1,5 @@ +CHANGELOG +========= + +The changelog is maintained for all Symfony contracts at the following URL: +https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CacheTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CacheTrait.php new file mode 100644 index 0000000..d340e06 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CacheTrait.php @@ -0,0 +1,80 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Cache; + +use Psr\Cache\CacheItemPoolInterface; +use Psr\Cache\InvalidArgumentException; +use Psr\Log\LoggerInterface; + +// Help opcache.preload discover always-needed symbols +class_exists(InvalidArgumentException::class); + +/** + * An implementation of CacheInterface for PSR-6 CacheItemPoolInterface classes. + * + * @author Nicolas Grekas + */ +trait CacheTrait +{ + /** + * {@inheritdoc} + * + * @return mixed + */ + public function get(string $key, callable $callback, float $beta = null, array &$metadata = null) + { + return $this->doGet($this, $key, $callback, $beta, $metadata); + } + + /** + * {@inheritdoc} + */ + public function delete(string $key): bool + { + return $this->deleteItem($key); + } + + private function doGet(CacheItemPoolInterface $pool, string $key, callable $callback, ?float $beta, array &$metadata = null, LoggerInterface $logger = null) + { + if (0 > $beta = $beta ?? 1.0) { + throw new class(sprintf('Argument "$beta" provided to "%s::get()" must be a positive number, %f given.', static::class, $beta)) extends \InvalidArgumentException implements InvalidArgumentException { }; + } + + $item = $pool->getItem($key); + $recompute = !$item->isHit() || \INF === $beta; + $metadata = $item instanceof ItemInterface ? $item->getMetadata() : []; + + if (!$recompute && $metadata) { + $expiry = $metadata[ItemInterface::METADATA_EXPIRY] ?? false; + $ctime = $metadata[ItemInterface::METADATA_CTIME] ?? false; + + if ($recompute = $ctime && $expiry && $expiry <= ($now = microtime(true)) - $ctime / 1000 * $beta * log(random_int(1, \PHP_INT_MAX) / \PHP_INT_MAX)) { + // force applying defaultLifetime to expiry + $item->expiresAt(null); + $logger && $logger->info('Item "{key}" elected for early recomputation {delta}s before its expiration', [ + 'key' => $key, + 'delta' => sprintf('%.1f', $expiry - $now), + ]); + } + } + + if ($recompute) { + $save = true; + $item->set($callback($item, $save)); + if ($save) { + $pool->save($item); + } + } + + return $item->get(); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ApcuAdapter.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ApcuAdapter.php new file mode 100644 index 0000000..5fc8f62 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ApcuAdapter.php @@ -0,0 +1,138 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Adapter; + +use Symfony\Component\Cache\CacheItem; +use Symfony\Component\Cache\Exception\CacheException; +use Symfony\Component\Cache\Marshaller\MarshallerInterface; + +/** + * @author Nicolas Grekas + */ +class ApcuAdapter extends AbstractAdapter +{ + private $marshaller; + + /** + * @throws CacheException if APCu is not enabled + */ + public function __construct(string $namespace = '', int $defaultLifetime = 0, string $version = null, MarshallerInterface $marshaller = null) + { + if (!static::isSupported()) { + throw new CacheException('APCu is not enabled.'); + } + if ('cli' === \PHP_SAPI) { + ini_set('apc.use_request_time', 0); + } + parent::__construct($namespace, $defaultLifetime); + + if (null !== $version) { + CacheItem::validateKey($version); + + if (!apcu_exists($version.'@'.$namespace)) { + $this->doClear($namespace); + apcu_add($version.'@'.$namespace, null); + } + } + + $this->marshaller = $marshaller; + } + + public static function isSupported() + { + return \function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), \FILTER_VALIDATE_BOOLEAN); + } + + /** + * {@inheritdoc} + */ + protected function doFetch(array $ids) + { + $unserializeCallbackHandler = ini_set('unserialize_callback_func', __CLASS__.'::handleUnserializeCallback'); + try { + $values = []; + $ids = array_flip($ids); + foreach (apcu_fetch(array_keys($ids), $ok) ?: [] as $k => $v) { + if (!isset($ids[$k])) { + // work around https://github.com/krakjoe/apcu/issues/247 + $k = key($ids); + } + unset($ids[$k]); + + if (null !== $v || $ok) { + $values[$k] = null !== $this->marshaller ? $this->marshaller->unmarshall($v) : $v; + } + } + + return $values; + } catch (\Error $e) { + throw new \ErrorException($e->getMessage(), $e->getCode(), \E_ERROR, $e->getFile(), $e->getLine()); + } finally { + ini_set('unserialize_callback_func', $unserializeCallbackHandler); + } + } + + /** + * {@inheritdoc} + */ + protected function doHave(string $id) + { + return apcu_exists($id); + } + + /** + * {@inheritdoc} + */ + protected function doClear(string $namespace) + { + return isset($namespace[0]) && class_exists(\APCuIterator::class, false) && ('cli' !== \PHP_SAPI || filter_var(ini_get('apc.enable_cli'), \FILTER_VALIDATE_BOOLEAN)) + ? apcu_delete(new \APCuIterator(sprintf('/^%s/', preg_quote($namespace, '/')), \APC_ITER_KEY)) + : apcu_clear_cache(); + } + + /** + * {@inheritdoc} + */ + protected function doDelete(array $ids) + { + foreach ($ids as $id) { + apcu_delete($id); + } + + return true; + } + + /** + * {@inheritdoc} + */ + protected function doSave(array $values, int $lifetime) + { + if (null !== $this->marshaller && (!$values = $this->marshaller->marshall($values, $failed))) { + return $failed; + } + + try { + if (false === $failures = apcu_store($values, null, $lifetime)) { + $failures = $values; + } + + return array_keys($failures); + } catch (\Throwable $e) { + if (1 === \count($values)) { + // Workaround https://github.com/krakjoe/apcu/issues/170 + apcu_delete(array_key_first($values)); + } + + throw $e; + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php new file mode 100644 index 0000000..73f0ea6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php @@ -0,0 +1,397 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Adapter; + +use Doctrine\DBAL\Connection; +use Doctrine\DBAL\Driver\ServerInfoAwareConnection; +use Doctrine\DBAL\DriverManager; +use Doctrine\DBAL\Exception as DBALException; +use Doctrine\DBAL\Exception\TableNotFoundException; +use Doctrine\DBAL\ParameterType; +use Doctrine\DBAL\Schema\Schema; +use Symfony\Component\Cache\Exception\InvalidArgumentException; +use Symfony\Component\Cache\Marshaller\DefaultMarshaller; +use Symfony\Component\Cache\Marshaller\MarshallerInterface; +use Symfony\Component\Cache\PruneableInterface; + +class DoctrineDbalAdapter extends AbstractAdapter implements PruneableInterface +{ + protected $maxIdLength = 255; + + private $marshaller; + private $conn; + private $platformName; + private $serverVersion; + private $table = 'cache_items'; + private $idCol = 'item_id'; + private $dataCol = 'item_data'; + private $lifetimeCol = 'item_lifetime'; + private $timeCol = 'item_time'; + private $namespace; + + /** + * You can either pass an existing database Doctrine DBAL Connection or + * a DSN string that will be used to connect to the database. + * + * The cache table is created automatically when possible. + * Otherwise, use the createTable() method. + * + * List of available options: + * * db_table: The name of the table [default: cache_items] + * * db_id_col: The column where to store the cache id [default: item_id] + * * db_data_col: The column where to store the cache data [default: item_data] + * * db_lifetime_col: The column where to store the lifetime [default: item_lifetime] + * * db_time_col: The column where to store the timestamp [default: item_time] + * + * @param Connection|string $connOrDsn + * + * @throws InvalidArgumentException When namespace contains invalid characters + */ + public function __construct($connOrDsn, string $namespace = '', int $defaultLifetime = 0, array $options = [], MarshallerInterface $marshaller = null) + { + if (isset($namespace[0]) && preg_match('#[^-+.A-Za-z0-9]#', $namespace, $match)) { + throw new InvalidArgumentException(sprintf('Namespace contains "%s" but only characters in [-+.A-Za-z0-9] are allowed.', $match[0])); + } + + if ($connOrDsn instanceof Connection) { + $this->conn = $connOrDsn; + } elseif (\is_string($connOrDsn)) { + if (!class_exists(DriverManager::class)) { + throw new InvalidArgumentException(sprintf('Failed to parse the DSN "%s". Try running "composer require doctrine/dbal".', $connOrDsn)); + } + $this->conn = DriverManager::getConnection(['url' => $connOrDsn]); + } else { + throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be "%s" or string, "%s" given.', __METHOD__, Connection::class, get_debug_type($connOrDsn))); + } + + $this->table = $options['db_table'] ?? $this->table; + $this->idCol = $options['db_id_col'] ?? $this->idCol; + $this->dataCol = $options['db_data_col'] ?? $this->dataCol; + $this->lifetimeCol = $options['db_lifetime_col'] ?? $this->lifetimeCol; + $this->timeCol = $options['db_time_col'] ?? $this->timeCol; + $this->namespace = $namespace; + $this->marshaller = $marshaller ?? new DefaultMarshaller(); + + parent::__construct($namespace, $defaultLifetime); + } + + /** + * Creates the table to store cache items which can be called once for setup. + * + * Cache ID are saved in a column of maximum length 255. Cache data is + * saved in a BLOB. + * + * @throws DBALException When the table already exists + */ + public function createTable() + { + $schema = new Schema(); + $this->addTableToSchema($schema); + + foreach ($schema->toSql($this->conn->getDatabasePlatform()) as $sql) { + $this->conn->executeStatement($sql); + } + } + + /** + * {@inheritdoc} + */ + public function configureSchema(Schema $schema, Connection $forConnection): void + { + // only update the schema for this connection + if ($forConnection !== $this->conn) { + return; + } + + if ($schema->hasTable($this->table)) { + return; + } + + $this->addTableToSchema($schema); + } + + /** + * {@inheritdoc} + */ + public function prune(): bool + { + $deleteSql = "DELETE FROM $this->table WHERE $this->lifetimeCol + $this->timeCol <= ?"; + $params = [time()]; + $paramTypes = [ParameterType::INTEGER]; + + if ('' !== $this->namespace) { + $deleteSql .= " AND $this->idCol LIKE ?"; + $params[] = sprintf('%s%%', $this->namespace); + $paramTypes[] = ParameterType::STRING; + } + + try { + $this->conn->executeStatement($deleteSql, $params, $paramTypes); + } catch (TableNotFoundException $e) { + } + + return true; + } + + /** + * {@inheritdoc} + */ + protected function doFetch(array $ids): iterable + { + $now = time(); + $expired = []; + + $sql = "SELECT $this->idCol, CASE WHEN $this->lifetimeCol IS NULL OR $this->lifetimeCol + $this->timeCol > ? THEN $this->dataCol ELSE NULL END FROM $this->table WHERE $this->idCol IN (?)"; + $result = $this->conn->executeQuery($sql, [ + $now, + $ids, + ], [ + ParameterType::INTEGER, + Connection::PARAM_STR_ARRAY, + ])->iterateNumeric(); + + foreach ($result as $row) { + if (null === $row[1]) { + $expired[] = $row[0]; + } else { + yield $row[0] => $this->marshaller->unmarshall(\is_resource($row[1]) ? stream_get_contents($row[1]) : $row[1]); + } + } + + if ($expired) { + $sql = "DELETE FROM $this->table WHERE $this->lifetimeCol + $this->timeCol <= ? AND $this->idCol IN (?)"; + $this->conn->executeStatement($sql, [ + $now, + $expired, + ], [ + ParameterType::INTEGER, + Connection::PARAM_STR_ARRAY, + ]); + } + } + + /** + * {@inheritdoc} + */ + protected function doHave(string $id): bool + { + $sql = "SELECT 1 FROM $this->table WHERE $this->idCol = ? AND ($this->lifetimeCol IS NULL OR $this->lifetimeCol + $this->timeCol > ?)"; + $result = $this->conn->executeQuery($sql, [ + $id, + time(), + ], [ + ParameterType::STRING, + ParameterType::INTEGER, + ]); + + return (bool) $result->fetchOne(); + } + + /** + * {@inheritdoc} + */ + protected function doClear(string $namespace): bool + { + if ('' === $namespace) { + if ('sqlite' === $this->getPlatformName()) { + $sql = "DELETE FROM $this->table"; + } else { + $sql = "TRUNCATE TABLE $this->table"; + } + } else { + $sql = "DELETE FROM $this->table WHERE $this->idCol LIKE '$namespace%'"; + } + + try { + $this->conn->executeStatement($sql); + } catch (TableNotFoundException $e) { + } + + return true; + } + + /** + * {@inheritdoc} + */ + protected function doDelete(array $ids): bool + { + $sql = "DELETE FROM $this->table WHERE $this->idCol IN (?)"; + try { + $this->conn->executeStatement($sql, [array_values($ids)], [Connection::PARAM_STR_ARRAY]); + } catch (TableNotFoundException $e) { + } + + return true; + } + + /** + * {@inheritdoc} + */ + protected function doSave(array $values, int $lifetime) + { + if (!$values = $this->marshaller->marshall($values, $failed)) { + return $failed; + } + + $platformName = $this->getPlatformName(); + $insertSql = "INSERT INTO $this->table ($this->idCol, $this->dataCol, $this->lifetimeCol, $this->timeCol) VALUES (?, ?, ?, ?)"; + + switch (true) { + case 'mysql' === $platformName: + $sql = $insertSql." ON DUPLICATE KEY UPDATE $this->dataCol = VALUES($this->dataCol), $this->lifetimeCol = VALUES($this->lifetimeCol), $this->timeCol = VALUES($this->timeCol)"; + break; + case 'oci' === $platformName: + // DUAL is Oracle specific dummy table + $sql = "MERGE INTO $this->table USING DUAL ON ($this->idCol = ?) ". + "WHEN NOT MATCHED THEN INSERT ($this->idCol, $this->dataCol, $this->lifetimeCol, $this->timeCol) VALUES (?, ?, ?, ?) ". + "WHEN MATCHED THEN UPDATE SET $this->dataCol = ?, $this->lifetimeCol = ?, $this->timeCol = ?"; + break; + case 'sqlsrv' === $platformName && version_compare($this->getServerVersion(), '10', '>='): + // MERGE is only available since SQL Server 2008 and must be terminated by semicolon + // It also requires HOLDLOCK according to http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx + $sql = "MERGE INTO $this->table WITH (HOLDLOCK) USING (SELECT 1 AS dummy) AS src ON ($this->idCol = ?) ". + "WHEN NOT MATCHED THEN INSERT ($this->idCol, $this->dataCol, $this->lifetimeCol, $this->timeCol) VALUES (?, ?, ?, ?) ". + "WHEN MATCHED THEN UPDATE SET $this->dataCol = ?, $this->lifetimeCol = ?, $this->timeCol = ?;"; + break; + case 'sqlite' === $platformName: + $sql = 'INSERT OR REPLACE'.substr($insertSql, 6); + break; + case 'pgsql' === $platformName && version_compare($this->getServerVersion(), '9.5', '>='): + $sql = $insertSql." ON CONFLICT ($this->idCol) DO UPDATE SET ($this->dataCol, $this->lifetimeCol, $this->timeCol) = (EXCLUDED.$this->dataCol, EXCLUDED.$this->lifetimeCol, EXCLUDED.$this->timeCol)"; + break; + default: + $platformName = null; + $sql = "UPDATE $this->table SET $this->dataCol = ?, $this->lifetimeCol = ?, $this->timeCol = ? WHERE $this->idCol = ?"; + break; + } + + $now = time(); + $lifetime = $lifetime ?: null; + try { + $stmt = $this->conn->prepare($sql); + } catch (TableNotFoundException $e) { + if (!$this->conn->isTransactionActive() || \in_array($platformName, ['pgsql', 'sqlite', 'sqlsrv'], true)) { + $this->createTable(); + } + $stmt = $this->conn->prepare($sql); + } + + // $id and $data are defined later in the loop. Binding is done by reference, values are read on execution. + if ('sqlsrv' === $platformName || 'oci' === $platformName) { + $stmt->bindParam(1, $id); + $stmt->bindParam(2, $id); + $stmt->bindParam(3, $data, ParameterType::LARGE_OBJECT); + $stmt->bindValue(4, $lifetime, ParameterType::INTEGER); + $stmt->bindValue(5, $now, ParameterType::INTEGER); + $stmt->bindParam(6, $data, ParameterType::LARGE_OBJECT); + $stmt->bindValue(7, $lifetime, ParameterType::INTEGER); + $stmt->bindValue(8, $now, ParameterType::INTEGER); + } elseif (null !== $platformName) { + $stmt->bindParam(1, $id); + $stmt->bindParam(2, $data, ParameterType::LARGE_OBJECT); + $stmt->bindValue(3, $lifetime, ParameterType::INTEGER); + $stmt->bindValue(4, $now, ParameterType::INTEGER); + } else { + $stmt->bindParam(1, $data, ParameterType::LARGE_OBJECT); + $stmt->bindValue(2, $lifetime, ParameterType::INTEGER); + $stmt->bindValue(3, $now, ParameterType::INTEGER); + $stmt->bindParam(4, $id); + + $insertStmt = $this->conn->prepare($insertSql); + $insertStmt->bindParam(1, $id); + $insertStmt->bindParam(2, $data, ParameterType::LARGE_OBJECT); + $insertStmt->bindValue(3, $lifetime, ParameterType::INTEGER); + $insertStmt->bindValue(4, $now, ParameterType::INTEGER); + } + + foreach ($values as $id => $data) { + try { + $rowCount = $stmt->executeStatement(); + } catch (TableNotFoundException $e) { + if (!$this->conn->isTransactionActive() || \in_array($platformName, ['pgsql', 'sqlite', 'sqlsrv'], true)) { + $this->createTable(); + } + $rowCount = $stmt->executeStatement(); + } + if (null === $platformName && 0 === $rowCount) { + try { + $insertStmt->executeStatement(); + } catch (DBALException $e) { + // A concurrent write won, let it be + } + } + } + + return $failed; + } + + private function getPlatformName(): string + { + if (isset($this->platformName)) { + return $this->platformName; + } + + $platform = $this->conn->getDatabasePlatform(); + + switch (true) { + case $platform instanceof \Doctrine\DBAL\Platforms\MySQLPlatform: + case $platform instanceof \Doctrine\DBAL\Platforms\MySQL57Platform: + return $this->platformName = 'mysql'; + + case $platform instanceof \Doctrine\DBAL\Platforms\SqlitePlatform: + return $this->platformName = 'sqlite'; + + case $platform instanceof \Doctrine\DBAL\Platforms\PostgreSQLPlatform: + case $platform instanceof \Doctrine\DBAL\Platforms\PostgreSQL94Platform: + return $this->platformName = 'pgsql'; + + case $platform instanceof \Doctrine\DBAL\Platforms\OraclePlatform: + return $this->platformName = 'oci'; + + case $platform instanceof \Doctrine\DBAL\Platforms\SQLServerPlatform: + case $platform instanceof \Doctrine\DBAL\Platforms\SQLServer2012Platform: + return $this->platformName = 'sqlsrv'; + + default: + return $this->platformName = \get_class($platform); + } + } + + private function getServerVersion(): string + { + if (isset($this->serverVersion)) { + return $this->serverVersion; + } + + $conn = $this->conn->getWrappedConnection(); + if ($conn instanceof ServerInfoAwareConnection) { + return $this->serverVersion = $conn->getServerVersion(); + } + + return $this->serverVersion = '0'; + } + + private function addTableToSchema(Schema $schema): void + { + $types = [ + 'mysql' => 'binary', + 'sqlite' => 'text', + ]; + + $table = $schema->createTable($this->table); + $table->addColumn($this->idCol, $types[$this->getPlatformName()] ?? 'string', ['length' => 255]); + $table->addColumn($this->dataCol, 'blob', ['length' => 16777215]); + $table->addColumn($this->lifetimeCol, 'integer', ['unsigned' => true, 'notnull' => false]); + $table->addColumn($this->timeCol, 'integer', ['unsigned' => true]); + $table->setPrimaryKey([$this->idCol]); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/MemcachedAdapter.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/MemcachedAdapter.php new file mode 100644 index 0000000..5c2933f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/MemcachedAdapter.php @@ -0,0 +1,353 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Adapter; + +use Symfony\Component\Cache\Exception\CacheException; +use Symfony\Component\Cache\Exception\InvalidArgumentException; +use Symfony\Component\Cache\Marshaller\DefaultMarshaller; +use Symfony\Component\Cache\Marshaller\MarshallerInterface; + +/** + * @author Rob Frawley 2nd + * @author Nicolas Grekas + */ +class MemcachedAdapter extends AbstractAdapter +{ + /** + * We are replacing characters that are illegal in Memcached keys with reserved characters from + * {@see \Symfony\Contracts\Cache\ItemInterface::RESERVED_CHARACTERS} that are legal in Memcached. + * Note: don’t use {@see \Symfony\Component\Cache\Adapter\AbstractAdapter::NS_SEPARATOR}. + */ + private const RESERVED_MEMCACHED = " \n\r\t\v\f\0"; + private const RESERVED_PSR6 = '@()\{}/'; + + protected $maxIdLength = 250; + + private const DEFAULT_CLIENT_OPTIONS = [ + 'persistent_id' => null, + 'username' => null, + 'password' => null, + \Memcached::OPT_SERIALIZER => \Memcached::SERIALIZER_PHP, + ]; + + private $marshaller; + private $client; + private $lazyClient; + + /** + * Using a MemcachedAdapter with a TagAwareAdapter for storing tags is discouraged. + * Using a RedisAdapter is recommended instead. If you cannot do otherwise, be aware that: + * - the Memcached::OPT_BINARY_PROTOCOL must be enabled + * (that's the default when using MemcachedAdapter::createConnection()); + * - tags eviction by Memcached's LRU algorithm will break by-tags invalidation; + * your Memcached memory should be large enough to never trigger LRU. + * + * Using a MemcachedAdapter as a pure items store is fine. + */ + public function __construct(\Memcached $client, string $namespace = '', int $defaultLifetime = 0, MarshallerInterface $marshaller = null) + { + if (!static::isSupported()) { + throw new CacheException('Memcached '.(\PHP_VERSION_ID >= 80100 ? '> 3.1.5' : '>= 2.2.0').' is required.'); + } + if ('Memcached' === \get_class($client)) { + $opt = $client->getOption(\Memcached::OPT_SERIALIZER); + if (\Memcached::SERIALIZER_PHP !== $opt && \Memcached::SERIALIZER_IGBINARY !== $opt) { + throw new CacheException('MemcachedAdapter: "serializer" option must be "php" or "igbinary".'); + } + $this->maxIdLength -= \strlen($client->getOption(\Memcached::OPT_PREFIX_KEY)); + $this->client = $client; + } else { + $this->lazyClient = $client; + } + + parent::__construct($namespace, $defaultLifetime); + $this->enableVersioning(); + $this->marshaller = $marshaller ?? new DefaultMarshaller(); + } + + public static function isSupported() + { + return \extension_loaded('memcached') && version_compare(phpversion('memcached'), \PHP_VERSION_ID >= 80100 ? '3.1.6' : '2.2.0', '>='); + } + + /** + * Creates a Memcached instance. + * + * By default, the binary protocol, no block, and libketama compatible options are enabled. + * + * Examples for servers: + * - 'memcached://user:pass@localhost?weight=33' + * - [['localhost', 11211, 33]] + * + * @param array[]|string|string[] $servers An array of servers, a DSN, or an array of DSNs + * + * @return \Memcached + * + * @throws \ErrorException When invalid options or servers are provided + */ + public static function createConnection($servers, array $options = []) + { + if (\is_string($servers)) { + $servers = [$servers]; + } elseif (!\is_array($servers)) { + throw new InvalidArgumentException(sprintf('MemcachedAdapter::createClient() expects array or string as first argument, "%s" given.', get_debug_type($servers))); + } + if (!static::isSupported()) { + throw new CacheException('Memcached '.(\PHP_VERSION_ID >= 80100 ? '> 3.1.5' : '>= 2.2.0').' is required.'); + } + set_error_handler(function ($type, $msg, $file, $line) { throw new \ErrorException($msg, 0, $type, $file, $line); }); + try { + $options += static::DEFAULT_CLIENT_OPTIONS; + $client = new \Memcached($options['persistent_id']); + $username = $options['username']; + $password = $options['password']; + + // parse any DSN in $servers + foreach ($servers as $i => $dsn) { + if (\is_array($dsn)) { + continue; + } + if (!str_starts_with($dsn, 'memcached:')) { + throw new InvalidArgumentException(sprintf('Invalid Memcached DSN: "%s" does not start with "memcached:".', $dsn)); + } + $params = preg_replace_callback('#^memcached:(//)?(?:([^@]*+)@)?#', function ($m) use (&$username, &$password) { + if (!empty($m[2])) { + [$username, $password] = explode(':', $m[2], 2) + [1 => null]; + } + + return 'file:'.($m[1] ?? ''); + }, $dsn); + if (false === $params = parse_url($params)) { + throw new InvalidArgumentException(sprintf('Invalid Memcached DSN: "%s".', $dsn)); + } + $query = $hosts = []; + if (isset($params['query'])) { + parse_str($params['query'], $query); + + if (isset($query['host'])) { + if (!\is_array($hosts = $query['host'])) { + throw new InvalidArgumentException(sprintf('Invalid Memcached DSN: "%s".', $dsn)); + } + foreach ($hosts as $host => $weight) { + if (false === $port = strrpos($host, ':')) { + $hosts[$host] = [$host, 11211, (int) $weight]; + } else { + $hosts[$host] = [substr($host, 0, $port), (int) substr($host, 1 + $port), (int) $weight]; + } + } + $hosts = array_values($hosts); + unset($query['host']); + } + if ($hosts && !isset($params['host']) && !isset($params['path'])) { + unset($servers[$i]); + $servers = array_merge($servers, $hosts); + continue; + } + } + if (!isset($params['host']) && !isset($params['path'])) { + throw new InvalidArgumentException(sprintf('Invalid Memcached DSN: "%s".', $dsn)); + } + if (isset($params['path']) && preg_match('#/(\d+)$#', $params['path'], $m)) { + $params['weight'] = $m[1]; + $params['path'] = substr($params['path'], 0, -\strlen($m[0])); + } + $params += [ + 'host' => $params['host'] ?? $params['path'], + 'port' => isset($params['host']) ? 11211 : null, + 'weight' => 0, + ]; + if ($query) { + $params += $query; + $options = $query + $options; + } + + $servers[$i] = [$params['host'], $params['port'], $params['weight']]; + + if ($hosts) { + $servers = array_merge($servers, $hosts); + } + } + + // set client's options + unset($options['persistent_id'], $options['username'], $options['password'], $options['weight'], $options['lazy']); + $options = array_change_key_case($options, \CASE_UPPER); + $client->setOption(\Memcached::OPT_BINARY_PROTOCOL, true); + $client->setOption(\Memcached::OPT_NO_BLOCK, true); + $client->setOption(\Memcached::OPT_TCP_NODELAY, true); + if (!\array_key_exists('LIBKETAMA_COMPATIBLE', $options) && !\array_key_exists(\Memcached::OPT_LIBKETAMA_COMPATIBLE, $options)) { + $client->setOption(\Memcached::OPT_LIBKETAMA_COMPATIBLE, true); + } + foreach ($options as $name => $value) { + if (\is_int($name)) { + continue; + } + if ('HASH' === $name || 'SERIALIZER' === $name || 'DISTRIBUTION' === $name) { + $value = \constant('Memcached::'.$name.'_'.strtoupper($value)); + } + unset($options[$name]); + + if (\defined('Memcached::OPT_'.$name)) { + $options[\constant('Memcached::OPT_'.$name)] = $value; + } + } + $client->setOptions($options); + + // set client's servers, taking care of persistent connections + if (!$client->isPristine()) { + $oldServers = []; + foreach ($client->getServerList() as $server) { + $oldServers[] = [$server['host'], $server['port']]; + } + + $newServers = []; + foreach ($servers as $server) { + if (1 < \count($server)) { + $server = array_values($server); + unset($server[2]); + $server[1] = (int) $server[1]; + } + $newServers[] = $server; + } + + if ($oldServers !== $newServers) { + $client->resetServerList(); + $client->addServers($servers); + } + } else { + $client->addServers($servers); + } + + if (null !== $username || null !== $password) { + if (!method_exists($client, 'setSaslAuthData')) { + trigger_error('Missing SASL support: the memcached extension must be compiled with --enable-memcached-sasl.'); + } + $client->setSaslAuthData($username, $password); + } + + return $client; + } finally { + restore_error_handler(); + } + } + + /** + * {@inheritdoc} + */ + protected function doSave(array $values, int $lifetime) + { + if (!$values = $this->marshaller->marshall($values, $failed)) { + return $failed; + } + + if ($lifetime && $lifetime > 30 * 86400) { + $lifetime += time(); + } + + $encodedValues = []; + foreach ($values as $key => $value) { + $encodedValues[self::encodeKey($key)] = $value; + } + + return $this->checkResultCode($this->getClient()->setMulti($encodedValues, $lifetime)) ? $failed : false; + } + + /** + * {@inheritdoc} + */ + protected function doFetch(array $ids) + { + try { + $encodedIds = array_map([__CLASS__, 'encodeKey'], $ids); + + $encodedResult = $this->checkResultCode($this->getClient()->getMulti($encodedIds)); + + $result = []; + foreach ($encodedResult as $key => $value) { + $result[self::decodeKey($key)] = $this->marshaller->unmarshall($value); + } + + return $result; + } catch (\Error $e) { + throw new \ErrorException($e->getMessage(), $e->getCode(), \E_ERROR, $e->getFile(), $e->getLine()); + } + } + + /** + * {@inheritdoc} + */ + protected function doHave(string $id) + { + return false !== $this->getClient()->get(self::encodeKey($id)) || $this->checkResultCode(\Memcached::RES_SUCCESS === $this->client->getResultCode()); + } + + /** + * {@inheritdoc} + */ + protected function doDelete(array $ids) + { + $ok = true; + $encodedIds = array_map([__CLASS__, 'encodeKey'], $ids); + foreach ($this->checkResultCode($this->getClient()->deleteMulti($encodedIds)) as $result) { + if (\Memcached::RES_SUCCESS !== $result && \Memcached::RES_NOTFOUND !== $result) { + $ok = false; + } + } + + return $ok; + } + + /** + * {@inheritdoc} + */ + protected function doClear(string $namespace) + { + return '' === $namespace && $this->getClient()->flush(); + } + + private function checkResultCode($result) + { + $code = $this->client->getResultCode(); + + if (\Memcached::RES_SUCCESS === $code || \Memcached::RES_NOTFOUND === $code) { + return $result; + } + + throw new CacheException('MemcachedAdapter client error: '.strtolower($this->client->getResultMessage())); + } + + private function getClient(): \Memcached + { + if ($this->client) { + return $this->client; + } + + $opt = $this->lazyClient->getOption(\Memcached::OPT_SERIALIZER); + if (\Memcached::SERIALIZER_PHP !== $opt && \Memcached::SERIALIZER_IGBINARY !== $opt) { + throw new CacheException('MemcachedAdapter: "serializer" option must be "php" or "igbinary".'); + } + if ('' !== $prefix = (string) $this->lazyClient->getOption(\Memcached::OPT_PREFIX_KEY)) { + throw new CacheException(sprintf('MemcachedAdapter: "prefix_key" option must be empty when using proxified connections, "%s" given.', $prefix)); + } + + return $this->client = $this->lazyClient; + } + + private static function encodeKey(string $key): string + { + return strtr($key, self::RESERVED_MEMCACHED, self::RESERVED_PSR6); + } + + private static function decodeKey(string $key): string + { + return strtr($key, self::RESERVED_PSR6, self::RESERVED_MEMCACHED); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ParameterNormalizer.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ParameterNormalizer.php new file mode 100644 index 0000000..e33ae9f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ParameterNormalizer.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Adapter; + +/** + * @author Lars Strojny + */ +final class ParameterNormalizer +{ + public static function normalizeDuration(string $duration): int + { + if (is_numeric($duration)) { + return $duration; + } + + if (false !== $time = strtotime($duration, 0)) { + return $time; + } + + try { + return \DateTime::createFromFormat('U', 0)->add(new \DateInterval($duration))->getTimestamp(); + } catch (\Exception $e) { + throw new \InvalidArgumentException(sprintf('Cannot parse date interval "%s".', $duration), 0, $e); + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php new file mode 100644 index 0000000..69461b8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Adapter; + +use Symfony\Contracts\Cache\TagAwareCacheInterface; + +/** + * @author Robin Chalas + */ +class TraceableTagAwareAdapter extends TraceableAdapter implements TagAwareAdapterInterface, TagAwareCacheInterface +{ + public function __construct(TagAwareAdapterInterface $pool) + { + parent::__construct($pool); + } + + /** + * {@inheritdoc} + */ + public function invalidateTags(array $tags) + { + $event = $this->start(__FUNCTION__); + try { + return $event->result = $this->pool->invalidateTags($tags); + } finally { + $event->end = microtime(true); + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/CHANGELOG.md new file mode 100644 index 0000000..60a8627 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/CHANGELOG.md @@ -0,0 +1,108 @@ +CHANGELOG +========= + +5.4 +--- + + * Deprecate `DoctrineProvider` and `DoctrineAdapter` because these classes have been added to the `doctrine/cache` package + * Add `DoctrineDbalAdapter` identical to `PdoAdapter` for `Doctrine\DBAL\Connection` or DBAL URL + * Deprecate usage of `PdoAdapter` with `Doctrine\DBAL\Connection` or DBAL URL + +5.3 +--- + + * added support for connecting to Redis Sentinel clusters when using the Redis PHP extension + * add support for a custom serializer to the `ApcuAdapter` class + +5.2.0 +----- + + * added integration with Messenger to allow computing cached values in a worker + * allow ISO 8601 time intervals to specify default lifetime + +5.1.0 +----- + + * added max-items + LRU + max-lifetime capabilities to `ArrayCache` + * added `CouchbaseBucketAdapter` + * added context `cache-adapter` to log messages + +5.0.0 +----- + + * removed all PSR-16 implementations in the `Simple` namespace + * removed `SimpleCacheAdapter` + * removed `AbstractAdapter::unserialize()` + * removed `CacheItem::getPreviousTags()` + +4.4.0 +----- + + * added support for connecting to Redis Sentinel clusters + * added argument `$prefix` to `AdapterInterface::clear()` + * improved `RedisTagAwareAdapter` to support Redis server >= 2.8 and up to 4B items per tag + * added `TagAwareMarshaller` for optimized data storage when using `AbstractTagAwareAdapter` + * added `DeflateMarshaller` to compress serialized values + * removed support for phpredis 4 `compression` + * [BC BREAK] `RedisTagAwareAdapter` is not compatible with `RedisCluster` from `Predis` anymore, use `phpredis` instead + * Marked the `CacheDataCollector` class as `@final`. + * added `SodiumMarshaller` to encrypt/decrypt values using libsodium + +4.3.0 +----- + + * removed `psr/simple-cache` dependency, run `composer require psr/simple-cache` if you need it + * deprecated all PSR-16 adapters, use `Psr16Cache` or `Symfony\Contracts\Cache\CacheInterface` implementations instead + * deprecated `SimpleCacheAdapter`, use `Psr16Adapter` instead + +4.2.0 +----- + + * added support for connecting to Redis clusters via DSN + * added support for configuring multiple Memcached servers via DSN + * added `MarshallerInterface` and `DefaultMarshaller` to allow changing the serializer and provide one that automatically uses igbinary when available + * implemented `CacheInterface`, which provides stampede protection via probabilistic early expiration and should become the preferred way to use a cache + * added sub-second expiry accuracy for backends that support it + * added support for phpredis 4 `compression` and `tcp_keepalive` options + * added automatic table creation when using Doctrine DBAL with PDO-based backends + * throw `LogicException` when `CacheItem::tag()` is called on an item coming from a non tag-aware pool + * deprecated `CacheItem::getPreviousTags()`, use `CacheItem::getMetadata()` instead + * deprecated the `AbstractAdapter::unserialize()` and `AbstractCache::unserialize()` methods + * added `CacheCollectorPass` (originally in `FrameworkBundle`) + * added `CachePoolClearerPass` (originally in `FrameworkBundle`) + * added `CachePoolPass` (originally in `FrameworkBundle`) + * added `CachePoolPrunerPass` (originally in `FrameworkBundle`) + +3.4.0 +----- + + * added using options from Memcached DSN + * added PruneableInterface so PSR-6 or PSR-16 cache implementations can declare support for manual stale cache pruning + * added prune logic to FilesystemTrait, PhpFilesTrait, PdoTrait, TagAwareAdapter and ChainTrait + * now FilesystemAdapter, PhpFilesAdapter, FilesystemCache, PhpFilesCache, PdoAdapter, PdoCache, ChainAdapter, and + ChainCache implement PruneableInterface and support manual stale cache pruning + +3.3.0 +----- + + * added CacheItem::getPreviousTags() to get bound tags coming from the pool storage if any + * added PSR-16 "Simple Cache" implementations for all existing PSR-6 adapters + * added Psr6Cache and SimpleCacheAdapter for bidirectional interoperability between PSR-6 and PSR-16 + * added MemcachedAdapter (PSR-6) and MemcachedCache (PSR-16) + * added TraceableAdapter (PSR-6) and TraceableCache (PSR-16) + +3.2.0 +----- + + * added TagAwareAdapter for tags-based invalidation + * added PdoAdapter with PDO and Doctrine DBAL support + * added PhpArrayAdapter and PhpFilesAdapter for OPcache-backed shared memory storage (PHP 7+ only) + * added NullAdapter + +3.1.0 +----- + + * added the component with strict PSR-6 implementations + * added ApcuAdapter, ArrayAdapter, FilesystemAdapter and RedisAdapter + * added AbstractAdapter, ChainAdapter and ProxyAdapter + * added DoctrineAdapter and DoctrineProvider for bidirectional interoperability with Doctrine Cache diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php new file mode 100644 index 0000000..843232e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php @@ -0,0 +1,94 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\DependencyInjection; + +use Symfony\Component\Cache\Adapter\TagAwareAdapterInterface; +use Symfony\Component\Cache\Adapter\TraceableAdapter; +use Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter; +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Reference; + +/** + * Inject a data collector to all the cache services to be able to get detailed statistics. + * + * @author Tobias Nyholm + */ +class CacheCollectorPass implements CompilerPassInterface +{ + private $dataCollectorCacheId; + private $cachePoolTag; + private $cachePoolRecorderInnerSuffix; + + public function __construct(string $dataCollectorCacheId = 'data_collector.cache', string $cachePoolTag = 'cache.pool', string $cachePoolRecorderInnerSuffix = '.recorder_inner') + { + if (0 < \func_num_args()) { + trigger_deprecation('symfony/cache', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); + } + + $this->dataCollectorCacheId = $dataCollectorCacheId; + $this->cachePoolTag = $cachePoolTag; + $this->cachePoolRecorderInnerSuffix = $cachePoolRecorderInnerSuffix; + } + + /** + * {@inheritdoc} + */ + public function process(ContainerBuilder $container) + { + if (!$container->hasDefinition($this->dataCollectorCacheId)) { + return; + } + + foreach ($container->findTaggedServiceIds($this->cachePoolTag) as $id => $attributes) { + $poolName = $attributes[0]['name'] ?? $id; + + $this->addToCollector($id, $poolName, $container); + } + } + + private function addToCollector(string $id, string $name, ContainerBuilder $container) + { + $definition = $container->getDefinition($id); + if ($definition->isAbstract()) { + return; + } + + $collectorDefinition = $container->getDefinition($this->dataCollectorCacheId); + $recorder = new Definition(is_subclass_of($definition->getClass(), TagAwareAdapterInterface::class) ? TraceableTagAwareAdapter::class : TraceableAdapter::class); + $recorder->setTags($definition->getTags()); + if (!$definition->isPublic() || !$definition->isPrivate()) { + $recorder->setPublic($definition->isPublic()); + } + $recorder->setArguments([new Reference($innerId = $id.$this->cachePoolRecorderInnerSuffix)]); + + foreach ($definition->getMethodCalls() as [$method, $args]) { + if ('setCallbackWrapper' !== $method || !$args[0] instanceof Definition || !($args[0]->getArguments()[2] ?? null) instanceof Definition) { + continue; + } + if ([new Reference($id), 'setCallbackWrapper'] == $args[0]->getArguments()[2]->getFactory()) { + $args[0]->getArguments()[2]->setFactory([new Reference($innerId), 'setCallbackWrapper']); + } + } + + $definition->setTags([]); + $definition->setPublic(false); + + $container->setDefinition($innerId, $definition); + $container->setDefinition($id, $recorder); + + // Tell the collector to add the new instance + $collectorDefinition->addMethodCall('addInstance', [$name, new Reference($id)]); + $collectorDefinition->setPublic(false); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPass.php new file mode 100644 index 0000000..14ac2bd --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPass.php @@ -0,0 +1,274 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\DependencyInjection; + +use Symfony\Component\Cache\Adapter\AbstractAdapter; +use Symfony\Component\Cache\Adapter\ArrayAdapter; +use Symfony\Component\Cache\Adapter\ChainAdapter; +use Symfony\Component\Cache\Adapter\NullAdapter; +use Symfony\Component\Cache\Adapter\ParameterNormalizer; +use Symfony\Component\Cache\Messenger\EarlyExpirationDispatcher; +use Symfony\Component\DependencyInjection\ChildDefinition; +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Reference; + +/** + * @author Nicolas Grekas + */ +class CachePoolPass implements CompilerPassInterface +{ + private $cachePoolTag; + private $kernelResetTag; + private $cacheClearerId; + private $cachePoolClearerTag; + private $cacheSystemClearerId; + private $cacheSystemClearerTag; + private $reverseContainerId; + private $reversibleTag; + private $messageHandlerId; + + public function __construct(string $cachePoolTag = 'cache.pool', string $kernelResetTag = 'kernel.reset', string $cacheClearerId = 'cache.global_clearer', string $cachePoolClearerTag = 'cache.pool.clearer', string $cacheSystemClearerId = 'cache.system_clearer', string $cacheSystemClearerTag = 'kernel.cache_clearer', string $reverseContainerId = 'reverse_container', string $reversibleTag = 'container.reversible', string $messageHandlerId = 'cache.early_expiration_handler') + { + if (0 < \func_num_args()) { + trigger_deprecation('symfony/cache', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); + } + + $this->cachePoolTag = $cachePoolTag; + $this->kernelResetTag = $kernelResetTag; + $this->cacheClearerId = $cacheClearerId; + $this->cachePoolClearerTag = $cachePoolClearerTag; + $this->cacheSystemClearerId = $cacheSystemClearerId; + $this->cacheSystemClearerTag = $cacheSystemClearerTag; + $this->reverseContainerId = $reverseContainerId; + $this->reversibleTag = $reversibleTag; + $this->messageHandlerId = $messageHandlerId; + } + + /** + * {@inheritdoc} + */ + public function process(ContainerBuilder $container) + { + if ($container->hasParameter('cache.prefix.seed')) { + $seed = $container->getParameterBag()->resolveValue($container->getParameter('cache.prefix.seed')); + } else { + $seed = '_'.$container->getParameter('kernel.project_dir'); + $seed .= '.'.$container->getParameter('kernel.container_class'); + } + + $needsMessageHandler = false; + $allPools = []; + $clearers = []; + $attributes = [ + 'provider', + 'name', + 'namespace', + 'default_lifetime', + 'early_expiration_message_bus', + 'reset', + ]; + foreach ($container->findTaggedServiceIds($this->cachePoolTag) as $id => $tags) { + $adapter = $pool = $container->getDefinition($id); + if ($pool->isAbstract()) { + continue; + } + $class = $adapter->getClass(); + while ($adapter instanceof ChildDefinition) { + $adapter = $container->findDefinition($adapter->getParent()); + $class = $class ?: $adapter->getClass(); + if ($t = $adapter->getTag($this->cachePoolTag)) { + $tags[0] += $t[0]; + } + } + $name = $tags[0]['name'] ?? $id; + if (!isset($tags[0]['namespace'])) { + $namespaceSeed = $seed; + if (null !== $class) { + $namespaceSeed .= '.'.$class; + } + + $tags[0]['namespace'] = $this->getNamespace($namespaceSeed, $name); + } + if (isset($tags[0]['clearer'])) { + $clearer = $tags[0]['clearer']; + while ($container->hasAlias($clearer)) { + $clearer = (string) $container->getAlias($clearer); + } + } else { + $clearer = null; + } + unset($tags[0]['clearer'], $tags[0]['name']); + + if (isset($tags[0]['provider'])) { + $tags[0]['provider'] = new Reference(static::getServiceProvider($container, $tags[0]['provider'])); + } + + if (ChainAdapter::class === $class) { + $adapters = []; + foreach ($adapter->getArgument(0) as $provider => $adapter) { + if ($adapter instanceof ChildDefinition) { + $chainedPool = $adapter; + } else { + $chainedPool = $adapter = new ChildDefinition($adapter); + } + + $chainedTags = [\is_int($provider) ? [] : ['provider' => $provider]]; + $chainedClass = ''; + + while ($adapter instanceof ChildDefinition) { + $adapter = $container->findDefinition($adapter->getParent()); + $chainedClass = $chainedClass ?: $adapter->getClass(); + if ($t = $adapter->getTag($this->cachePoolTag)) { + $chainedTags[0] += $t[0]; + } + } + + if (ChainAdapter::class === $chainedClass) { + throw new InvalidArgumentException(sprintf('Invalid service "%s": chain of adapters cannot reference another chain, found "%s".', $id, $chainedPool->getParent())); + } + + $i = 0; + + if (isset($chainedTags[0]['provider'])) { + $chainedPool->replaceArgument($i++, new Reference(static::getServiceProvider($container, $chainedTags[0]['provider']))); + } + + if (isset($tags[0]['namespace']) && !\in_array($adapter->getClass(), [ArrayAdapter::class, NullAdapter::class], true)) { + $chainedPool->replaceArgument($i++, $tags[0]['namespace']); + } + + if (isset($tags[0]['default_lifetime'])) { + $chainedPool->replaceArgument($i++, $tags[0]['default_lifetime']); + } + + $adapters[] = $chainedPool; + } + + $pool->replaceArgument(0, $adapters); + unset($tags[0]['provider'], $tags[0]['namespace']); + $i = 1; + } else { + $i = 0; + } + + foreach ($attributes as $attr) { + if (!isset($tags[0][$attr])) { + // no-op + } elseif ('reset' === $attr) { + if ($tags[0][$attr]) { + $pool->addTag($this->kernelResetTag, ['method' => $tags[0][$attr]]); + } + } elseif ('early_expiration_message_bus' === $attr) { + $needsMessageHandler = true; + $pool->addMethodCall('setCallbackWrapper', [(new Definition(EarlyExpirationDispatcher::class)) + ->addArgument(new Reference($tags[0]['early_expiration_message_bus'])) + ->addArgument(new Reference($this->reverseContainerId)) + ->addArgument((new Definition('callable')) + ->setFactory([new Reference($id), 'setCallbackWrapper']) + ->addArgument(null) + ), + ]); + $pool->addTag($this->reversibleTag); + } elseif ('namespace' !== $attr || !\in_array($class, [ArrayAdapter::class, NullAdapter::class], true)) { + $argument = $tags[0][$attr]; + + if ('default_lifetime' === $attr && !is_numeric($argument)) { + $argument = (new Definition('int', [$argument])) + ->setFactory([ParameterNormalizer::class, 'normalizeDuration']); + } + + $pool->replaceArgument($i++, $argument); + } + unset($tags[0][$attr]); + } + if (!empty($tags[0])) { + throw new InvalidArgumentException(sprintf('Invalid "%s" tag for service "%s": accepted attributes are "clearer", "provider", "name", "namespace", "default_lifetime", "early_expiration_message_bus" and "reset", found "%s".', $this->cachePoolTag, $id, implode('", "', array_keys($tags[0])))); + } + + if (null !== $clearer) { + $clearers[$clearer][$name] = new Reference($id, $container::IGNORE_ON_UNINITIALIZED_REFERENCE); + } + + $allPools[$name] = new Reference($id, $container::IGNORE_ON_UNINITIALIZED_REFERENCE); + } + + if (!$needsMessageHandler) { + $container->removeDefinition($this->messageHandlerId); + } + + $notAliasedCacheClearerId = $this->cacheClearerId; + while ($container->hasAlias($this->cacheClearerId)) { + $this->cacheClearerId = (string) $container->getAlias($this->cacheClearerId); + } + if ($container->hasDefinition($this->cacheClearerId)) { + $clearers[$notAliasedCacheClearerId] = $allPools; + } + + foreach ($clearers as $id => $pools) { + $clearer = $container->getDefinition($id); + if ($clearer instanceof ChildDefinition) { + $clearer->replaceArgument(0, $pools); + } else { + $clearer->setArgument(0, $pools); + } + $clearer->addTag($this->cachePoolClearerTag); + + if ($this->cacheSystemClearerId === $id) { + $clearer->addTag($this->cacheSystemClearerTag); + } + } + + $allPoolsKeys = array_keys($allPools); + + if ($container->hasDefinition('console.command.cache_pool_list')) { + $container->getDefinition('console.command.cache_pool_list')->replaceArgument(0, $allPoolsKeys); + } + + if ($container->hasDefinition('console.command.cache_pool_clear')) { + $container->getDefinition('console.command.cache_pool_clear')->addArgument($allPoolsKeys); + } + + if ($container->hasDefinition('console.command.cache_pool_delete')) { + $container->getDefinition('console.command.cache_pool_delete')->addArgument($allPoolsKeys); + } + } + + private function getNamespace(string $seed, string $id) + { + return substr(str_replace('/', '-', base64_encode(hash('sha256', $id.$seed, true))), 0, 10); + } + + /** + * @internal + */ + public static function getServiceProvider(ContainerBuilder $container, string $name) + { + $container->resolveEnvPlaceholders($name, null, $usedEnvs); + + if ($usedEnvs || preg_match('#^[a-z]++:#', $name)) { + $dsn = $name; + + if (!$container->hasDefinition($name = '.cache_connection.'.ContainerBuilder::hash($dsn))) { + $definition = new Definition(AbstractAdapter::class); + $definition->setPublic(false); + $definition->setFactory([AbstractAdapter::class, 'createConnection']); + $definition->setArguments([$dsn, ['lazy' => true]]); + $container->setDefinition($name, $definition); + } + } + + return $name; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php new file mode 100644 index 0000000..86a1906 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php @@ -0,0 +1,64 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\DependencyInjection; + +use Symfony\Component\Cache\PruneableInterface; +use Symfony\Component\DependencyInjection\Argument\IteratorArgument; +use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Reference; + +/** + * @author Rob Frawley 2nd + */ +class CachePoolPrunerPass implements CompilerPassInterface +{ + private $cacheCommandServiceId; + private $cachePoolTag; + + public function __construct(string $cacheCommandServiceId = 'console.command.cache_pool_prune', string $cachePoolTag = 'cache.pool') + { + if (0 < \func_num_args()) { + trigger_deprecation('symfony/cache', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); + } + + $this->cacheCommandServiceId = $cacheCommandServiceId; + $this->cachePoolTag = $cachePoolTag; + } + + /** + * {@inheritdoc} + */ + public function process(ContainerBuilder $container) + { + if (!$container->hasDefinition($this->cacheCommandServiceId)) { + return; + } + + $services = []; + + foreach ($container->findTaggedServiceIds($this->cachePoolTag) as $id => $tags) { + $class = $container->getParameterBag()->resolveValue($container->getDefinition($id)->getClass()); + + if (!$reflection = $container->getReflectionClass($class)) { + throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id)); + } + + if ($reflection->implementsInterface(PruneableInterface::class)) { + $services[$id] = new Reference($id); + } + } + + $container->getDefinition($this->cacheCommandServiceId)->replaceArgument(0, new IteratorArgument($services)); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DoctrineProvider.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DoctrineProvider.php new file mode 100644 index 0000000..7b55aae --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DoctrineProvider.php @@ -0,0 +1,124 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache; + +use Doctrine\Common\Cache\CacheProvider; +use Psr\Cache\CacheItemPoolInterface; +use Symfony\Contracts\Service\ResetInterface; + +if (!class_exists(CacheProvider::class)) { + return; +} + +/** + * @author Nicolas Grekas + * + * @deprecated Use Doctrine\Common\Cache\Psr6\DoctrineProvider instead + */ +class DoctrineProvider extends CacheProvider implements PruneableInterface, ResettableInterface +{ + private $pool; + + public function __construct(CacheItemPoolInterface $pool) + { + trigger_deprecation('symfony/cache', '5.4', '"%s" is deprecated, use "Doctrine\Common\Cache\Psr6\DoctrineProvider" instead.', __CLASS__); + + $this->pool = $pool; + } + + /** + * {@inheritdoc} + */ + public function prune() + { + return $this->pool instanceof PruneableInterface && $this->pool->prune(); + } + + /** + * {@inheritdoc} + */ + public function reset() + { + if ($this->pool instanceof ResetInterface) { + $this->pool->reset(); + } + $this->setNamespace($this->getNamespace()); + } + + /** + * {@inheritdoc} + * + * @return mixed + */ + protected function doFetch($id) + { + $item = $this->pool->getItem(rawurlencode($id)); + + return $item->isHit() ? $item->get() : false; + } + + /** + * {@inheritdoc} + * + * @return bool + */ + protected function doContains($id) + { + return $this->pool->hasItem(rawurlencode($id)); + } + + /** + * {@inheritdoc} + * + * @return bool + */ + protected function doSave($id, $data, $lifeTime = 0) + { + $item = $this->pool->getItem(rawurlencode($id)); + + if (0 < $lifeTime) { + $item->expiresAfter($lifeTime); + } + + return $this->pool->save($item->set($data)); + } + + /** + * {@inheritdoc} + * + * @return bool + */ + protected function doDelete($id) + { + return $this->pool->deleteItem(rawurlencode($id)); + } + + /** + * {@inheritdoc} + * + * @return bool + */ + protected function doFlush() + { + return $this->pool->clear(); + } + + /** + * {@inheritdoc} + * + * @return array|null + */ + protected function doGetStats() + { + return null; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/DeflateMarshaller.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/DeflateMarshaller.php new file mode 100644 index 0000000..5544806 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/DeflateMarshaller.php @@ -0,0 +1,53 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Marshaller; + +use Symfony\Component\Cache\Exception\CacheException; + +/** + * Compresses values using gzdeflate(). + * + * @author Nicolas Grekas + */ +class DeflateMarshaller implements MarshallerInterface +{ + private $marshaller; + + public function __construct(MarshallerInterface $marshaller) + { + if (!\function_exists('gzdeflate')) { + throw new CacheException('The "zlib" PHP extension is not loaded.'); + } + + $this->marshaller = $marshaller; + } + + /** + * {@inheritdoc} + */ + public function marshall(array $values, ?array &$failed): array + { + return array_map('gzdeflate', $this->marshaller->marshall($values, $failed)); + } + + /** + * {@inheritdoc} + */ + public function unmarshall(string $value) + { + if (false !== $inflatedValue = @gzinflate($value)) { + $value = $inflatedValue; + } + + return $this->marshaller->unmarshall($value); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php new file mode 100644 index 0000000..5d1e303 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php @@ -0,0 +1,89 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Marshaller; + +/** + * A marshaller optimized for data structures generated by AbstractTagAwareAdapter. + * + * @author Nicolas Grekas + */ +class TagAwareMarshaller implements MarshallerInterface +{ + private $marshaller; + + public function __construct(MarshallerInterface $marshaller = null) + { + $this->marshaller = $marshaller ?? new DefaultMarshaller(); + } + + /** + * {@inheritdoc} + */ + public function marshall(array $values, ?array &$failed): array + { + $failed = $notSerialized = $serialized = []; + + foreach ($values as $id => $value) { + if (\is_array($value) && \is_array($value['tags'] ?? null) && \array_key_exists('value', $value) && \count($value) === 2 + (\is_string($value['meta'] ?? null) && 8 === \strlen($value['meta']))) { + // if the value is an array with keys "tags", "value" and "meta", use a compact serialization format + // magic numbers in the form 9D-..-..-..-..-00-..-..-..-5F allow detecting this format quickly in unmarshall() + + $v = $this->marshaller->marshall($value, $f); + + if ($f) { + $f = []; + $failed[] = $id; + } else { + if ([] === $value['tags']) { + $v['tags'] = ''; + } + + $serialized[$id] = "\x9D".($value['meta'] ?? "\0\0\0\0\0\0\0\0").pack('N', \strlen($v['tags'])).$v['tags'].$v['value']; + $serialized[$id][9] = "\x5F"; + } + } else { + // other arbitratry values are serialized using the decorated marshaller below + $notSerialized[$id] = $value; + } + } + + if ($notSerialized) { + $serialized += $this->marshaller->marshall($notSerialized, $f); + $failed = array_merge($failed, $f); + } + + return $serialized; + } + + /** + * {@inheritdoc} + */ + public function unmarshall(string $value) + { + // detect the compact format used in marshall() using magic numbers in the form 9D-..-..-..-..-00-..-..-..-5F + if (13 >= \strlen($value) || "\x9D" !== $value[0] || "\0" !== $value[5] || "\x5F" !== $value[9]) { + return $this->marshaller->unmarshall($value); + } + + // data consists of value, tags and metadata which we need to unpack + $meta = substr($value, 1, 12); + $meta[8] = "\0"; + $tagLen = unpack('Nlen', $meta, 8)['len']; + $meta = substr($meta, 0, 8); + + return [ + 'value' => $this->marshaller->unmarshall(substr($value, 13 + $tagLen)), + 'tags' => $tagLen ? $this->marshaller->unmarshall(substr($value, 13, $tagLen)) : [], + 'meta' => "\0\0\0\0\0\0\0\0" === $meta ? null : $meta, + ]; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php new file mode 100644 index 0000000..6f11b8b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php @@ -0,0 +1,61 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Cache\Messenger; + +use Psr\Log\LoggerInterface; +use Symfony\Component\Cache\Adapter\AdapterInterface; +use Symfony\Component\Cache\CacheItem; +use Symfony\Component\DependencyInjection\ReverseContainer; +use Symfony\Component\Messenger\MessageBusInterface; +use Symfony\Component\Messenger\Stamp\HandledStamp; + +/** + * Sends the computation of cached values to a message bus. + */ +class EarlyExpirationDispatcher +{ + private $bus; + private $reverseContainer; + private $callbackWrapper; + + public function __construct(MessageBusInterface $bus, ReverseContainer $reverseContainer, callable $callbackWrapper = null) + { + $this->bus = $bus; + $this->reverseContainer = $reverseContainer; + $this->callbackWrapper = $callbackWrapper; + } + + public function __invoke(callable $callback, CacheItem $item, bool &$save, AdapterInterface $pool, \Closure $setMetadata, LoggerInterface $logger = null) + { + if (!$item->isHit() || null === $message = EarlyExpirationMessage::create($this->reverseContainer, $callback, $item, $pool)) { + // The item is stale or the callback cannot be reversed: we must compute the value now + $logger && $logger->info('Computing item "{key}" online: '.($item->isHit() ? 'callback cannot be reversed' : 'item is stale'), ['key' => $item->getKey()]); + + return null !== $this->callbackWrapper ? ($this->callbackWrapper)($callback, $item, $save, $pool, $setMetadata, $logger) : $callback($item, $save); + } + + $envelope = $this->bus->dispatch($message); + + if ($logger) { + if ($envelope->last(HandledStamp::class)) { + $logger->info('Item "{key}" was computed online', ['key' => $item->getKey()]); + } else { + $logger->info('Item "{key}" sent for recomputation', ['key' => $item->getKey()]); + } + } + + // The item's value is not stale, no need to write it to the backend + $save = false; + + return $message->getItem()->get() ?? $item->get(); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/README.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/README.md new file mode 100644 index 0000000..7405205 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/README.md @@ -0,0 +1,19 @@ +Symfony PSR-6 implementation for caching +======================================== + +The Cache component provides an extended +[PSR-6](http://www.php-fig.org/psr/psr-6/) implementation for adding cache to +your applications. It is designed to have a low overhead so that caching is +fastest. It ships with a few caching adapters for the most widespread and +suited to caching backends. It also provides a `doctrine/cache` proxy adapter +to cover more advanced caching needs and a proxy adapter for greater +interoperability between PSR-6 implementations. + +Resources +--------- + + * [Documentation](https://symfony.com/doc/current/components/cache.html) + * [Contributing](https://symfony.com/doc/current/contributing/index.html) + * [Report issues](https://github.com/symfony/symfony/issues) and + [send Pull Requests](https://github.com/symfony/symfony/pulls) + in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Builder/Property.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Builder/Property.php new file mode 100644 index 0000000..1b24c47 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Builder/Property.php @@ -0,0 +1,75 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Builder; + +/** + * Represents a property when building classes. + * + * @internal + * + * @author Tobias Nyholm + */ +class Property +{ + private $name; + private $originalName; + private $array = false; + private $type = null; + private $content; + + public function __construct(string $originalName, string $name) + { + $this->name = $name; + $this->originalName = $originalName; + } + + public function getName(): string + { + return $this->name; + } + + public function getOriginalName(): string + { + return $this->originalName; + } + + public function setType(string $type): void + { + $this->array = false; + $this->type = $type; + + if ('[]' === substr($type, -2)) { + $this->array = true; + $this->type = substr($type, 0, -2); + } + } + + public function getType(): ?string + { + return $this->type; + } + + public function getContent(): ?string + { + return $this->content; + } + + public function setContent(string $content): void + { + $this->content = $content; + } + + public function isArray(): bool + { + return $this->array; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/ExprBuilder.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/ExprBuilder.php new file mode 100644 index 0000000..14387b5 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/ExprBuilder.php @@ -0,0 +1,246 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Builder; + +use Symfony\Component\Config\Definition\Exception\UnsetKeyException; + +/** + * This class builds an if expression. + * + * @author Johannes M. Schmitt + * @author Christophe Coevoet + */ +class ExprBuilder +{ + protected $node; + public $ifPart; + public $thenPart; + + public function __construct(NodeDefinition $node) + { + $this->node = $node; + } + + /** + * Marks the expression as being always used. + * + * @return $this + */ + public function always(\Closure $then = null) + { + $this->ifPart = function () { return true; }; + + if (null !== $then) { + $this->thenPart = $then; + } + + return $this; + } + + /** + * Sets a closure to use as tests. + * + * The default one tests if the value is true. + * + * @return $this + */ + public function ifTrue(\Closure $closure = null) + { + if (null === $closure) { + $closure = function ($v) { return true === $v; }; + } + + $this->ifPart = $closure; + + return $this; + } + + /** + * Tests if the value is a string. + * + * @return $this + */ + public function ifString() + { + $this->ifPart = function ($v) { return \is_string($v); }; + + return $this; + } + + /** + * Tests if the value is null. + * + * @return $this + */ + public function ifNull() + { + $this->ifPart = function ($v) { return null === $v; }; + + return $this; + } + + /** + * Tests if the value is empty. + * + * @return $this + */ + public function ifEmpty() + { + $this->ifPart = function ($v) { return empty($v); }; + + return $this; + } + + /** + * Tests if the value is an array. + * + * @return $this + */ + public function ifArray() + { + $this->ifPart = function ($v) { return \is_array($v); }; + + return $this; + } + + /** + * Tests if the value is in an array. + * + * @return $this + */ + public function ifInArray(array $array) + { + $this->ifPart = function ($v) use ($array) { return \in_array($v, $array, true); }; + + return $this; + } + + /** + * Tests if the value is not in an array. + * + * @return $this + */ + public function ifNotInArray(array $array) + { + $this->ifPart = function ($v) use ($array) { return !\in_array($v, $array, true); }; + + return $this; + } + + /** + * Transforms variables of any type into an array. + * + * @return $this + */ + public function castToArray() + { + $this->ifPart = function ($v) { return !\is_array($v); }; + $this->thenPart = function ($v) { return [$v]; }; + + return $this; + } + + /** + * Sets the closure to run if the test pass. + * + * @return $this + */ + public function then(\Closure $closure) + { + $this->thenPart = $closure; + + return $this; + } + + /** + * Sets a closure returning an empty array. + * + * @return $this + */ + public function thenEmptyArray() + { + $this->thenPart = function () { return []; }; + + return $this; + } + + /** + * Sets a closure marking the value as invalid at processing time. + * + * if you want to add the value of the node in your message just use a %s placeholder. + * + * @return $this + * + * @throws \InvalidArgumentException + */ + public function thenInvalid(string $message) + { + $this->thenPart = function ($v) use ($message) { throw new \InvalidArgumentException(sprintf($message, json_encode($v))); }; + + return $this; + } + + /** + * Sets a closure unsetting this key of the array at processing time. + * + * @return $this + * + * @throws UnsetKeyException + */ + public function thenUnset() + { + $this->thenPart = function () { throw new UnsetKeyException('Unsetting key.'); }; + + return $this; + } + + /** + * Returns the related node. + * + * @return NodeDefinition|ArrayNodeDefinition|VariableNodeDefinition + * + * @throws \RuntimeException + */ + public function end() + { + if (null === $this->ifPart) { + throw new \RuntimeException('You must specify an if part.'); + } + if (null === $this->thenPart) { + throw new \RuntimeException('You must specify a then part.'); + } + + return $this->node; + } + + /** + * Builds the expressions. + * + * @param ExprBuilder[] $expressions An array of ExprBuilder instances to build + * + * @return array + */ + public static function buildExpressions(array $expressions) + { + foreach ($expressions as $k => $expr) { + if ($expr instanceof self) { + $if = $expr->ifPart; + $then = $expr->thenPart; + $expressions[$k] = function ($v) use ($if, $then) { + return $if($v) ? $then($v) : $v; + }; + } + } + + return $expressions; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php new file mode 100644 index 0000000..d28e5ae --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php @@ -0,0 +1,32 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Builder; + +use Symfony\Component\Config\Definition\IntegerNode; + +/** + * This class provides a fluent interface for defining an integer node. + * + * @author Jeanmonod David + */ +class IntegerNodeDefinition extends NumericNodeDefinition +{ + /** + * Instantiates a Node. + * + * @return IntegerNode + */ + protected function instantiateNode() + { + return new IntegerNode($this->name, $this->parent, $this->min, $this->max, $this->pathSeparator); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/MergeBuilder.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/MergeBuilder.php new file mode 100644 index 0000000..a88d49b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/MergeBuilder.php @@ -0,0 +1,63 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Builder; + +/** + * This class builds merge conditions. + * + * @author Johannes M. Schmitt + */ +class MergeBuilder +{ + protected $node; + public $allowFalse = false; + public $allowOverwrite = true; + + public function __construct(NodeDefinition $node) + { + $this->node = $node; + } + + /** + * Sets whether the node can be unset. + * + * @return $this + */ + public function allowUnset(bool $allow = true) + { + $this->allowFalse = $allow; + + return $this; + } + + /** + * Sets whether the node can be overwritten. + * + * @return $this + */ + public function denyOverwrite(bool $deny = true) + { + $this->allowOverwrite = !$deny; + + return $this; + } + + /** + * Returns the related node. + * + * @return NodeDefinition|ArrayNodeDefinition|VariableNodeDefinition + */ + public function end() + { + return $this->node; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NodeParentInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NodeParentInterface.php new file mode 100644 index 0000000..305e993 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NodeParentInterface.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Builder; + +/** + * An interface that must be implemented by all node parents. + * + * @author Victor Berchet + */ +interface NodeParentInterface +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php new file mode 100644 index 0000000..c4bff17 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Builder; + +use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException; + +/** + * Abstract class that contains common code of integer and float node definitions. + * + * @author David Jeanmonod + */ +abstract class NumericNodeDefinition extends ScalarNodeDefinition +{ + protected $min; + protected $max; + + /** + * Ensures that the value is smaller than the given reference. + * + * @param int|float $max + * + * @return $this + * + * @throws \InvalidArgumentException when the constraint is inconsistent + */ + public function max($max) + { + if (isset($this->min) && $this->min > $max) { + throw new \InvalidArgumentException(sprintf('You cannot define a max(%s) as you already have a min(%s).', $max, $this->min)); + } + $this->max = $max; + + return $this; + } + + /** + * Ensures that the value is bigger than the given reference. + * + * @param int|float $min + * + * @return $this + * + * @throws \InvalidArgumentException when the constraint is inconsistent + */ + public function min($min) + { + if (isset($this->max) && $this->max < $min) { + throw new \InvalidArgumentException(sprintf('You cannot define a min(%s) as you already have a max(%s).', $min, $this->max)); + } + $this->min = $min; + + return $this; + } + + /** + * {@inheritdoc} + * + * @throws InvalidDefinitionException + */ + public function cannotBeEmpty() + { + throw new InvalidDefinitionException('->cannotBeEmpty() is not applicable to NumericNodeDefinition.'); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidDefinitionException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidDefinitionException.php new file mode 100644 index 0000000..98310da --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidDefinitionException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Exception; + +/** + * Thrown when an error is detected in a node Definition. + * + * @author Victor Berchet + */ +class InvalidDefinitionException extends Exception +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidTypeException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidTypeException.php new file mode 100644 index 0000000..d7ca8c9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidTypeException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Exception; + +/** + * This exception is thrown if an invalid type is encountered. + * + * @author Johannes M. Schmitt + */ +class InvalidTypeException extends InvalidConfigurationException +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/UnsetKeyException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/UnsetKeyException.php new file mode 100644 index 0000000..863181a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/UnsetKeyException.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition\Exception; + +/** + * This exception is usually not encountered by the end-user, but only used + * internally to signal the parent scope to unset a key. + * + * @author Johannes M. Schmitt + */ +class UnsetKeyException extends Exception +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/IntegerNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/IntegerNode.php new file mode 100644 index 0000000..dfb4cc6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/IntegerNode.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Definition; + +use Symfony\Component\Config\Definition\Exception\InvalidTypeException; + +/** + * This node represents an integer value in the config tree. + * + * @author Jeanmonod David + */ +class IntegerNode extends NumericNode +{ + /** + * {@inheritdoc} + */ + protected function validateType($value) + { + if (!\is_int($value)) { + $ex = new InvalidTypeException(sprintf('Invalid type for path "%s". Expected "int", but got "%s".', $this->getPath(), get_debug_type($value))); + if ($hint = $this->getInfo()) { + $ex->addHint($hint); + } + $ex->setPath($this->getPath()); + + throw $ex; + } + } + + /** + * {@inheritdoc} + */ + protected function getValidPlaceholderTypes(): array + { + return ['int']; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderInterface.php new file mode 100644 index 0000000..93a160b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderInterface.php @@ -0,0 +1,52 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Loader; + +/** + * LoaderInterface is the interface implemented by all loader classes. + * + * @author Fabien Potencier + */ +interface LoaderInterface +{ + /** + * Loads a resource. + * + * @param mixed $resource The resource + * + * @return mixed + * + * @throws \Exception If something went wrong + */ + public function load($resource, string $type = null); + + /** + * Returns whether this class supports the given resource. + * + * @param mixed $resource A resource + * + * @return bool + */ + public function supports($resource, string $type = null); + + /** + * Gets the loader resolver. + * + * @return LoaderResolverInterface + */ + public function getResolver(); + + /** + * Sets the loader resolver. + */ + public function setResolver(LoaderResolverInterface $resolver); +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolver.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolver.php new file mode 100644 index 0000000..cce0702 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolver.php @@ -0,0 +1,68 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Loader; + +/** + * LoaderResolver selects a loader for a given resource. + * + * A resource can be anything (e.g. a full path to a config file or a Closure). + * Each loader determines whether it can load a resource and how. + * + * @author Fabien Potencier + */ +class LoaderResolver implements LoaderResolverInterface +{ + /** + * @var LoaderInterface[] An array of LoaderInterface objects + */ + private $loaders = []; + + /** + * @param LoaderInterface[] $loaders An array of loaders + */ + public function __construct(array $loaders = []) + { + foreach ($loaders as $loader) { + $this->addLoader($loader); + } + } + + /** + * {@inheritdoc} + */ + public function resolve($resource, string $type = null) + { + foreach ($this->loaders as $loader) { + if ($loader->supports($resource, $type)) { + return $loader; + } + } + + return false; + } + + public function addLoader(LoaderInterface $loader) + { + $this->loaders[] = $loader; + $loader->setResolver($this); + } + + /** + * Returns the registered loaders. + * + * @return LoaderInterface[] + */ + public function getLoaders() + { + return $this->loaders; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolverInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolverInterface.php new file mode 100644 index 0000000..8a48419 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolverInterface.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Loader; + +/** + * LoaderResolverInterface selects a loader for a given resource. + * + * @author Fabien Potencier + */ +interface LoaderResolverInterface +{ + /** + * Returns a loader able to load the resource. + * + * @param mixed $resource A resource + * @param string|null $type The resource type or null if unknown + * + * @return LoaderInterface|false + */ + public function resolve($resource, string $type = null); +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/InvalidXmlException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/InvalidXmlException.php new file mode 100644 index 0000000..155571c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/InvalidXmlException.php @@ -0,0 +1,22 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Util\Exception; + +/** + * Exception class for when XML parsing with an XSD schema file path or a callable validator produces errors unrelated + * to the actual XML parsing. + * + * @author Ole Rößner + */ +class InvalidXmlException extends XmlParsingException +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/XmlParsingException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/XmlParsingException.php new file mode 100644 index 0000000..9bceed6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/XmlParsingException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Config\Util\Exception; + +/** + * Exception class for when XML cannot be parsed properly. + * + * @author Ole Rößner + */ +class XmlParsingException extends \InvalidArgumentException +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/AbstractArgument.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/AbstractArgument.php new file mode 100644 index 0000000..3ba5ff3 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/AbstractArgument.php @@ -0,0 +1,41 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Argument; + +/** + * Represents an abstract service argument, which have to be set by a compiler pass or a DI extension. + */ +final class AbstractArgument +{ + private $text; + private $context; + + public function __construct(string $text = '') + { + $this->text = trim($text, '. '); + } + + public function setContext(string $context): void + { + $this->context = $context.' is abstract'.('' === $this->text ? '' : ': '); + } + + public function getText(): string + { + return $this->text; + } + + public function getTextWithContext(): string + { + return $this->context.$this->text.'.'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php new file mode 100644 index 0000000..150c9bf --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php @@ -0,0 +1,54 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Argument; + +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Reference; + +/** + * @author Titouan Galopin + * @author Nicolas Grekas + */ +trait ReferenceSetArgumentTrait +{ + private $values; + + /** + * @param Reference[] $values + */ + public function __construct(array $values) + { + $this->setValues($values); + } + + /** + * @return Reference[] + */ + public function getValues() + { + return $this->values; + } + + /** + * @param Reference[] $values The service references to put in the set + */ + public function setValues(array $values) + { + foreach ($values as $k => $v) { + if (null !== $v && !$v instanceof Reference) { + throw new InvalidArgumentException(sprintf('A "%s" must hold only Reference instances, "%s" given.', __CLASS__, get_debug_type($v))); + } + } + + $this->values = $values; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php new file mode 100644 index 0000000..41fec78 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Argument; + +/** + * @internal + */ +class RewindableGenerator implements \IteratorAggregate, \Countable +{ + private $generator; + private $count; + + /** + * @param int|callable $count + */ + public function __construct(callable $generator, $count) + { + $this->generator = $generator; + $this->count = $count; + } + + public function getIterator(): \Traversable + { + $g = $this->generator; + + return $g(); + } + + public function count(): int + { + if (\is_callable($count = $this->count)) { + $this->count = $count(); + } + + return $this->count; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php new file mode 100644 index 0000000..1ba8de7 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php @@ -0,0 +1,73 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Argument; + +/** + * Represents a collection of services found by tag name to lazily iterate over. + * + * @author Roland Franssen + */ +class TaggedIteratorArgument extends IteratorArgument +{ + private $tag; + private $indexAttribute; + private $defaultIndexMethod; + private $defaultPriorityMethod; + private $needsIndexes = false; + + /** + * @param string $tag The name of the tag identifying the target services + * @param string|null $indexAttribute The name of the attribute that defines the key referencing each service in the tagged collection + * @param string|null $defaultIndexMethod The static method that should be called to get each service's key when their tag doesn't define the previous attribute + * @param bool $needsIndexes Whether indexes are required and should be generated when computing the map + * @param string|null $defaultPriorityMethod The static method that should be called to get each service's priority when their tag doesn't define the "priority" attribute + */ + public function __construct(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null, bool $needsIndexes = false, string $defaultPriorityMethod = null) + { + parent::__construct([]); + + if (null === $indexAttribute && $needsIndexes) { + $indexAttribute = preg_match('/[^.]++$/', $tag, $m) ? $m[0] : $tag; + } + + $this->tag = $tag; + $this->indexAttribute = $indexAttribute; + $this->defaultIndexMethod = $defaultIndexMethod ?: ($indexAttribute ? 'getDefault'.str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $indexAttribute))).'Name' : null); + $this->needsIndexes = $needsIndexes; + $this->defaultPriorityMethod = $defaultPriorityMethod ?: ($indexAttribute ? 'getDefault'.str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $indexAttribute))).'Priority' : null); + } + + public function getTag() + { + return $this->tag; + } + + public function getIndexAttribute(): ?string + { + return $this->indexAttribute; + } + + public function getDefaultIndexMethod(): ?string + { + return $this->defaultIndexMethod; + } + + public function needsIndexes(): bool + { + return $this->needsIndexes; + } + + public function getDefaultPriorityMethod(): ?string + { + return $this->defaultPriorityMethod; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php new file mode 100644 index 0000000..00ebdfe --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php @@ -0,0 +1,223 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; +use Symfony\Component\DependencyInjection\Reference; + +/** + * Inline service definitions where this is possible. + * + * @author Johannes M. Schmitt + */ +class InlineServiceDefinitionsPass extends AbstractRecursivePass +{ + private $analyzingPass; + private $cloningIds = []; + private $connectedIds = []; + private $notInlinedIds = []; + private $inlinedIds = []; + private $notInlinableIds = []; + private $graph; + + public function __construct(AnalyzeServiceReferencesPass $analyzingPass = null) + { + $this->analyzingPass = $analyzingPass; + } + + public function process(ContainerBuilder $container) + { + $this->container = $container; + if ($this->analyzingPass) { + $analyzedContainer = new ContainerBuilder(); + $analyzedContainer->setAliases($container->getAliases()); + $analyzedContainer->setDefinitions($container->getDefinitions()); + foreach ($container->getExpressionLanguageProviders() as $provider) { + $analyzedContainer->addExpressionLanguageProvider($provider); + } + } else { + $analyzedContainer = $container; + } + try { + $remainingInlinedIds = []; + $this->connectedIds = $this->notInlinedIds = $container->getDefinitions(); + do { + if ($this->analyzingPass) { + $analyzedContainer->setDefinitions(array_intersect_key($analyzedContainer->getDefinitions(), $this->connectedIds)); + $this->analyzingPass->process($analyzedContainer); + } + $this->graph = $analyzedContainer->getCompiler()->getServiceReferenceGraph(); + $notInlinedIds = $this->notInlinedIds; + $this->connectedIds = $this->notInlinedIds = $this->inlinedIds = []; + + foreach ($analyzedContainer->getDefinitions() as $id => $definition) { + if (!$this->graph->hasNode($id)) { + continue; + } + foreach ($this->graph->getNode($id)->getOutEdges() as $edge) { + if (isset($notInlinedIds[$edge->getSourceNode()->getId()])) { + $this->currentId = $id; + $this->processValue($definition, true); + break; + } + } + } + + foreach ($this->inlinedIds as $id => $isPublicOrNotShared) { + if ($isPublicOrNotShared) { + $remainingInlinedIds[$id] = $id; + } else { + $container->removeDefinition($id); + $analyzedContainer->removeDefinition($id); + } + } + } while ($this->inlinedIds && $this->analyzingPass); + + foreach ($remainingInlinedIds as $id) { + if (isset($this->notInlinableIds[$id])) { + continue; + } + + $definition = $container->getDefinition($id); + + if (!$definition->isShared() && !$definition->isPublic()) { + $container->removeDefinition($id); + } + } + } finally { + $this->container = null; + $this->connectedIds = $this->notInlinedIds = $this->inlinedIds = []; + $this->notInlinableIds = []; + $this->graph = null; + } + } + + /** + * {@inheritdoc} + */ + protected function processValue($value, bool $isRoot = false) + { + if ($value instanceof ArgumentInterface) { + // References found in ArgumentInterface::getValues() are not inlineable + return $value; + } + + if ($value instanceof Definition && $this->cloningIds) { + if ($value->isShared()) { + return $value; + } + $value = clone $value; + } + + if (!$value instanceof Reference) { + return parent::processValue($value, $isRoot); + } elseif (!$this->container->hasDefinition($id = (string) $value)) { + return $value; + } + + $definition = $this->container->getDefinition($id); + + if (!$this->isInlineableDefinition($id, $definition)) { + $this->notInlinableIds[$id] = true; + + return $value; + } + + $this->container->log($this, sprintf('Inlined service "%s" to "%s".', $id, $this->currentId)); + $this->inlinedIds[$id] = $definition->isPublic() || !$definition->isShared(); + $this->notInlinedIds[$this->currentId] = true; + + if ($definition->isShared()) { + return $definition; + } + + if (isset($this->cloningIds[$id])) { + $ids = array_keys($this->cloningIds); + $ids[] = $id; + + throw new ServiceCircularReferenceException($id, \array_slice($ids, array_search($id, $ids))); + } + + $this->cloningIds[$id] = true; + try { + return $this->processValue($definition); + } finally { + unset($this->cloningIds[$id]); + } + } + + /** + * Checks if the definition is inlineable. + */ + private function isInlineableDefinition(string $id, Definition $definition): bool + { + if ($definition->hasErrors() || $definition->isDeprecated() || $definition->isLazy() || $definition->isSynthetic()) { + return false; + } + + if (!$definition->isShared()) { + if (!$this->graph->hasNode($id)) { + return true; + } + + foreach ($this->graph->getNode($id)->getInEdges() as $edge) { + $srcId = $edge->getSourceNode()->getId(); + $this->connectedIds[$srcId] = true; + if ($edge->isWeak() || $edge->isLazy()) { + return !$this->connectedIds[$id] = true; + } + } + + return true; + } + + if ($definition->isPublic()) { + return false; + } + + if (!$this->graph->hasNode($id)) { + return true; + } + + if ($this->currentId == $id) { + return false; + } + $this->connectedIds[$id] = true; + + $srcIds = []; + $srcCount = 0; + foreach ($this->graph->getNode($id)->getInEdges() as $edge) { + $srcId = $edge->getSourceNode()->getId(); + $this->connectedIds[$srcId] = true; + if ($edge->isWeak() || $edge->isLazy()) { + return false; + } + $srcIds[$srcId] = true; + ++$srcCount; + } + + if (1 !== \count($srcIds)) { + $this->notInlinedIds[$id] = true; + + return false; + } + + if ($srcCount > 1 && \is_array($factory = $definition->getFactory()) && ($factory[0] instanceof Reference || $factory[0] instanceof Definition)) { + return false; + } + + return $this->container->getDefinition($srcId)->isShared(); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php new file mode 100644 index 0000000..04b6852 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php @@ -0,0 +1,33 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\ContainerBuilder; + +/** + * Removes abstract Definitions. + */ +class RemoveAbstractDefinitionsPass implements CompilerPassInterface +{ + /** + * Removes abstract definitions from the ContainerBuilder. + */ + public function process(ContainerBuilder $container) + { + foreach ($container->getDefinitions() as $id => $definition) { + if ($definition->isAbstract()) { + $container->removeDefinition($id); + $container->log($this, sprintf('Removed service "%s"; reason: abstract.', $id)); + } + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php new file mode 100644 index 0000000..75b36d2 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php @@ -0,0 +1,39 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\ContainerBuilder; + +/** + * Remove private aliases from the container. They were only used to establish + * dependencies between services, and these dependencies have been resolved in + * one of the previous passes. + * + * @author Johannes M. Schmitt + */ +class RemovePrivateAliasesPass implements CompilerPassInterface +{ + /** + * Removes private aliases from the ContainerBuilder. + */ + public function process(ContainerBuilder $container) + { + foreach ($container->getAliases() as $id => $alias) { + if ($alias->isPublic()) { + continue; + } + + $container->removeAlias($id); + $container->log($this, sprintf('Removed service "%s"; reason: private alias.', $id)); + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php new file mode 100644 index 0000000..5bc3791 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php @@ -0,0 +1,246 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\Argument\BoundArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; +use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; +use Symfony\Component\DependencyInjection\Attribute\Target; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\LazyProxy\ProxyHelper; +use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\DependencyInjection\TypedReference; + +/** + * @author Guilhem Niot + */ +class ResolveBindingsPass extends AbstractRecursivePass +{ + private $usedBindings = []; + private $unusedBindings = []; + private $errorMessages = []; + + /** + * {@inheritdoc} + */ + public function process(ContainerBuilder $container) + { + $this->usedBindings = $container->getRemovedBindingIds(); + + try { + parent::process($container); + + foreach ($this->unusedBindings as [$key, $serviceId, $bindingType, $file]) { + $argumentType = $argumentName = $message = null; + + if (str_contains($key, ' ')) { + [$argumentType, $argumentName] = explode(' ', $key, 2); + } elseif ('$' === $key[0]) { + $argumentName = $key; + } else { + $argumentType = $key; + } + + if ($argumentType) { + $message .= sprintf('of type "%s" ', $argumentType); + } + + if ($argumentName) { + $message .= sprintf('named "%s" ', $argumentName); + } + + if (BoundArgument::DEFAULTS_BINDING === $bindingType) { + $message .= 'under "_defaults"'; + } elseif (BoundArgument::INSTANCEOF_BINDING === $bindingType) { + $message .= 'under "_instanceof"'; + } else { + $message .= sprintf('for service "%s"', $serviceId); + } + + if ($file) { + $message .= sprintf(' in file "%s"', $file); + } + + $message = sprintf('A binding is configured for an argument %s, but no corresponding argument has been found. It may be unused and should be removed, or it may have a typo.', $message); + + if ($this->errorMessages) { + $message .= sprintf("\nCould be related to%s:", 1 < \count($this->errorMessages) ? ' one of' : ''); + } + foreach ($this->errorMessages as $m) { + $message .= "\n - ".$m; + } + throw new InvalidArgumentException($message); + } + } finally { + $this->usedBindings = []; + $this->unusedBindings = []; + $this->errorMessages = []; + } + } + + /** + * {@inheritdoc} + */ + protected function processValue($value, bool $isRoot = false) + { + if ($value instanceof TypedReference && $value->getType() === (string) $value) { + // Already checked + $bindings = $this->container->getDefinition($this->currentId)->getBindings(); + $name = $value->getName(); + + if (isset($name, $bindings[$name = $value.' $'.$name])) { + return $this->getBindingValue($bindings[$name]); + } + + if (isset($bindings[$value->getType()])) { + return $this->getBindingValue($bindings[$value->getType()]); + } + + return parent::processValue($value, $isRoot); + } + + if (!$value instanceof Definition || !$bindings = $value->getBindings()) { + return parent::processValue($value, $isRoot); + } + + $bindingNames = []; + + foreach ($bindings as $key => $binding) { + [$bindingValue, $bindingId, $used, $bindingType, $file] = $binding->getValues(); + if ($used) { + $this->usedBindings[$bindingId] = true; + unset($this->unusedBindings[$bindingId]); + } elseif (!isset($this->usedBindings[$bindingId])) { + $this->unusedBindings[$bindingId] = [$key, $this->currentId, $bindingType, $file]; + } + + if (preg_match('/^(?:(?:array|bool|float|int|string|iterable|([^ $]++)) )\$/', $key, $m)) { + $bindingNames[substr($key, \strlen($m[0]))] = $binding; + } + + if (!isset($m[1])) { + continue; + } + + if (is_subclass_of($m[1], \UnitEnum::class)) { + $bindingNames[substr($key, \strlen($m[0]))] = $binding; + continue; + } + + if (null !== $bindingValue && !$bindingValue instanceof Reference && !$bindingValue instanceof Definition && !$bindingValue instanceof TaggedIteratorArgument && !$bindingValue instanceof ServiceLocatorArgument) { + throw new InvalidArgumentException(sprintf('Invalid value for binding key "%s" for service "%s": expected "%s", "%s", "%s", "%s" or null, "%s" given.', $key, $this->currentId, Reference::class, Definition::class, TaggedIteratorArgument::class, ServiceLocatorArgument::class, get_debug_type($bindingValue))); + } + } + + if ($value->isAbstract()) { + return parent::processValue($value, $isRoot); + } + + $calls = $value->getMethodCalls(); + + try { + if ($constructor = $this->getConstructor($value, false)) { + $calls[] = [$constructor, $value->getArguments()]; + } + } catch (RuntimeException $e) { + $this->errorMessages[] = $e->getMessage(); + $this->container->getDefinition($this->currentId)->addError($e->getMessage()); + + return parent::processValue($value, $isRoot); + } + + foreach ($calls as $i => $call) { + [$method, $arguments] = $call; + + if ($method instanceof \ReflectionFunctionAbstract) { + $reflectionMethod = $method; + } else { + try { + $reflectionMethod = $this->getReflectionMethod($value, $method); + } catch (RuntimeException $e) { + if ($value->getFactory()) { + continue; + } + throw $e; + } + } + + foreach ($reflectionMethod->getParameters() as $key => $parameter) { + if (\array_key_exists($key, $arguments) && '' !== $arguments[$key]) { + continue; + } + + $typeHint = ProxyHelper::getTypeHint($reflectionMethod, $parameter); + $name = Target::parseName($parameter); + + if ($typeHint && \array_key_exists($k = ltrim($typeHint, '\\').' $'.$name, $bindings)) { + $arguments[$key] = $this->getBindingValue($bindings[$k]); + + continue; + } + + if (\array_key_exists('$'.$name, $bindings)) { + $arguments[$key] = $this->getBindingValue($bindings['$'.$name]); + + continue; + } + + if ($typeHint && '\\' === $typeHint[0] && isset($bindings[$typeHint = substr($typeHint, 1)])) { + $arguments[$key] = $this->getBindingValue($bindings[$typeHint]); + + continue; + } + + if (isset($bindingNames[$name]) || isset($bindingNames[$parameter->name])) { + $bindingKey = array_search($binding, $bindings, true); + $argumentType = substr($bindingKey, 0, strpos($bindingKey, ' ')); + $this->errorMessages[] = sprintf('Did you forget to add the type "%s" to argument "$%s" of method "%s::%s()"?', $argumentType, $parameter->name, $reflectionMethod->class, $reflectionMethod->name); + } + } + + if ($arguments !== $call[1]) { + ksort($arguments); + $calls[$i][1] = $arguments; + } + } + + if ($constructor) { + [, $arguments] = array_pop($calls); + + if ($arguments !== $value->getArguments()) { + $value->setArguments($arguments); + } + } + + if ($calls !== $value->getMethodCalls()) { + $value->setMethodCalls($calls); + } + + return parent::processValue($value, $isRoot); + } + + /** + * @return mixed + */ + private function getBindingValue(BoundArgument $binding) + { + [$bindingValue, $bindingId] = $binding->getValues(); + + $this->usedBindings[$bindingId] = true; + unset($this->unusedBindings[$bindingId]); + + return $bindingValue; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php new file mode 100644 index 0000000..46a2d78 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php @@ -0,0 +1,198 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\ChildDefinition; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\ExceptionInterface; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; + +/** + * This replaces all ChildDefinition instances with their equivalent fully + * merged Definition instance. + * + * @author Johannes M. Schmitt + * @author Nicolas Grekas + */ +class ResolveChildDefinitionsPass extends AbstractRecursivePass +{ + private $currentPath; + + protected function processValue($value, bool $isRoot = false) + { + if (!$value instanceof Definition) { + return parent::processValue($value, $isRoot); + } + if ($isRoot) { + // yes, we are specifically fetching the definition from the + // container to ensure we are not operating on stale data + $value = $this->container->getDefinition($this->currentId); + } + if ($value instanceof ChildDefinition) { + $this->currentPath = []; + $value = $this->resolveDefinition($value); + if ($isRoot) { + $this->container->setDefinition($this->currentId, $value); + } + } + + return parent::processValue($value, $isRoot); + } + + /** + * Resolves the definition. + * + * @throws RuntimeException When the definition is invalid + */ + private function resolveDefinition(ChildDefinition $definition): Definition + { + try { + return $this->doResolveDefinition($definition); + } catch (ServiceCircularReferenceException $e) { + throw $e; + } catch (ExceptionInterface $e) { + $r = new \ReflectionProperty($e, 'message'); + $r->setAccessible(true); + $r->setValue($e, sprintf('Service "%s": %s', $this->currentId, $e->getMessage())); + + throw $e; + } + } + + private function doResolveDefinition(ChildDefinition $definition): Definition + { + if (!$this->container->has($parent = $definition->getParent())) { + throw new RuntimeException(sprintf('Parent definition "%s" does not exist.', $parent)); + } + + $searchKey = array_search($parent, $this->currentPath); + $this->currentPath[] = $parent; + + if (false !== $searchKey) { + throw new ServiceCircularReferenceException($parent, \array_slice($this->currentPath, $searchKey)); + } + + $parentDef = $this->container->findDefinition($parent); + if ($parentDef instanceof ChildDefinition) { + $id = $this->currentId; + $this->currentId = $parent; + $parentDef = $this->resolveDefinition($parentDef); + $this->container->setDefinition($parent, $parentDef); + $this->currentId = $id; + } + + $this->container->log($this, sprintf('Resolving inheritance for "%s" (parent: %s).', $this->currentId, $parent)); + $def = new Definition(); + + // merge in parent definition + // purposely ignored attributes: abstract, shared, tags, autoconfigured + $def->setClass($parentDef->getClass()); + $def->setArguments($parentDef->getArguments()); + $def->setMethodCalls($parentDef->getMethodCalls()); + $def->setProperties($parentDef->getProperties()); + if ($parentDef->isDeprecated()) { + $deprecation = $parentDef->getDeprecation('%service_id%'); + $def->setDeprecated($deprecation['package'], $deprecation['version'], $deprecation['message']); + } + $def->setFactory($parentDef->getFactory()); + $def->setConfigurator($parentDef->getConfigurator()); + $def->setFile($parentDef->getFile()); + $def->setPublic($parentDef->isPublic()); + $def->setLazy($parentDef->isLazy()); + $def->setAutowired($parentDef->isAutowired()); + $def->setChanges($parentDef->getChanges()); + + $def->setBindings($definition->getBindings() + $parentDef->getBindings()); + + $def->setSynthetic($definition->isSynthetic()); + + // overwrite with values specified in the decorator + $changes = $definition->getChanges(); + if (isset($changes['class'])) { + $def->setClass($definition->getClass()); + } + if (isset($changes['factory'])) { + $def->setFactory($definition->getFactory()); + } + if (isset($changes['configurator'])) { + $def->setConfigurator($definition->getConfigurator()); + } + if (isset($changes['file'])) { + $def->setFile($definition->getFile()); + } + if (isset($changes['public'])) { + $def->setPublic($definition->isPublic()); + } else { + $def->setPublic($parentDef->isPublic()); + } + if (isset($changes['lazy'])) { + $def->setLazy($definition->isLazy()); + } + if (isset($changes['deprecated'])) { + if ($definition->isDeprecated()) { + $deprecation = $definition->getDeprecation('%service_id%'); + $def->setDeprecated($deprecation['package'], $deprecation['version'], $deprecation['message']); + } else { + $def->setDeprecated(false); + } + } + if (isset($changes['autowired'])) { + $def->setAutowired($definition->isAutowired()); + } + if (isset($changes['shared'])) { + $def->setShared($definition->isShared()); + } + if (isset($changes['decorated_service'])) { + $decoratedService = $definition->getDecoratedService(); + if (null === $decoratedService) { + $def->setDecoratedService($decoratedService); + } else { + $def->setDecoratedService($decoratedService[0], $decoratedService[1], $decoratedService[2], $decoratedService[3] ?? ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE); + } + } + + // merge arguments + foreach ($definition->getArguments() as $k => $v) { + if (is_numeric($k)) { + $def->addArgument($v); + } elseif (str_starts_with($k, 'index_')) { + $def->replaceArgument((int) substr($k, \strlen('index_')), $v); + } else { + $def->setArgument($k, $v); + } + } + + // merge properties + foreach ($definition->getProperties() as $k => $v) { + $def->setProperty($k, $v); + } + + // append method calls + if ($calls = $definition->getMethodCalls()) { + $def->setMethodCalls(array_merge($def->getMethodCalls(), $calls)); + } + + $def->addError($parentDef); + $def->addError($definition); + + // these attributes are always taken from the child + $def->setAbstract($definition->isAbstract()); + $def->setTags($definition->getTags()); + // autoconfigure is never taken from parent (on purpose) + // and it's not legal on an instanceof + $def->setAutoconfigured($definition->isAutoconfigured()); + + return $def; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php new file mode 100644 index 0000000..e67a2a8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\ChildDefinition; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; + +/** + * @author Nicolas Grekas + */ +class ResolveClassPass implements CompilerPassInterface +{ + /** + * {@inheritdoc} + */ + public function process(ContainerBuilder $container) + { + foreach ($container->getDefinitions() as $id => $definition) { + if ($definition->isSynthetic() || null !== $definition->getClass()) { + continue; + } + if (preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)++$/', $id)) { + if ($definition instanceof ChildDefinition && !class_exists($id)) { + throw new InvalidArgumentException(sprintf('Service definition "%s" has a parent but no class, and its name looks like an FQCN. Either the class is missing or you want to inherit it from the parent service. To resolve this ambiguity, please rename this service to a non-FQCN (e.g. using dots), or create the missing class.', $id)); + } + $definition->setClass($id); + } + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php new file mode 100644 index 0000000..c1c5748 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php @@ -0,0 +1,127 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\Argument\AbstractArgument; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\LazyProxy\ProxyHelper; +use Symfony\Component\DependencyInjection\Reference; + +/** + * Resolves named arguments to their corresponding numeric index. + * + * @author Kévin Dunglas + */ +class ResolveNamedArgumentsPass extends AbstractRecursivePass +{ + /** + * {@inheritdoc} + */ + protected function processValue($value, bool $isRoot = false) + { + if ($value instanceof AbstractArgument && $value->getText().'.' === $value->getTextWithContext()) { + $value->setContext(sprintf('A value found in service "%s"', $this->currentId)); + } + + if (!$value instanceof Definition) { + return parent::processValue($value, $isRoot); + } + + $calls = $value->getMethodCalls(); + $calls[] = ['__construct', $value->getArguments()]; + + foreach ($calls as $i => $call) { + [$method, $arguments] = $call; + $parameters = null; + $resolvedArguments = []; + + foreach ($arguments as $key => $argument) { + if ($argument instanceof AbstractArgument && $argument->getText().'.' === $argument->getTextWithContext()) { + $argument->setContext(sprintf('Argument '.(\is_int($key) ? 1 + $key : '"%3$s"').' of '.('__construct' === $method ? 'service "%s"' : 'method call "%s::%s()"'), $this->currentId, $method, $key)); + } + + if (\is_int($key)) { + $resolvedArguments[$key] = $argument; + continue; + } + + if (null === $parameters) { + $r = $this->getReflectionMethod($value, $method); + $class = $r instanceof \ReflectionMethod ? $r->class : $this->currentId; + $method = $r->getName(); + $parameters = $r->getParameters(); + } + + if (isset($key[0]) && '$' !== $key[0] && !class_exists($key) && !interface_exists($key, false)) { + throw new InvalidArgumentException(sprintf('Invalid service "%s": did you forget to add the "$" prefix to argument "%s"?', $this->currentId, $key)); + } + + if (isset($key[0]) && '$' === $key[0]) { + foreach ($parameters as $j => $p) { + if ($key === '$'.$p->name) { + if ($p->isVariadic() && \is_array($argument)) { + foreach ($argument as $variadicArgument) { + $resolvedArguments[$j++] = $variadicArgument; + } + } else { + $resolvedArguments[$j] = $argument; + } + + continue 2; + } + } + + throw new InvalidArgumentException(sprintf('Invalid service "%s": method "%s()" has no argument named "%s". Check your service definition.', $this->currentId, $class !== $this->currentId ? $class.'::'.$method : $method, $key)); + } + + if (null !== $argument && !$argument instanceof Reference && !$argument instanceof Definition) { + throw new InvalidArgumentException(sprintf('Invalid service "%s": the value of argument "%s" of method "%s()" must be null, an instance of "%s" or an instance of "%s", "%s" given.', $this->currentId, $key, $class !== $this->currentId ? $class.'::'.$method : $method, Reference::class, Definition::class, get_debug_type($argument))); + } + + $typeFound = false; + foreach ($parameters as $j => $p) { + if (!\array_key_exists($j, $resolvedArguments) && ProxyHelper::getTypeHint($r, $p, true) === $key) { + $resolvedArguments[$j] = $argument; + $typeFound = true; + } + } + + if (!$typeFound) { + throw new InvalidArgumentException(sprintf('Invalid service "%s": method "%s()" has no argument type-hinted as "%s". Check your service definition.', $this->currentId, $class !== $this->currentId ? $class.'::'.$method : $method, $key)); + } + } + + if ($resolvedArguments !== $call[1]) { + ksort($resolvedArguments); + $calls[$i][1] = $resolvedArguments; + } + } + + [, $arguments] = array_pop($calls); + + if ($arguments !== $value->getArguments()) { + $value->setArguments($arguments); + } + if ($calls !== $value->getMethodCalls()) { + $value->setMethodCalls($calls); + } + + foreach ($value->getProperties() as $key => $argument) { + if ($argument instanceof AbstractArgument && $argument->getText().'.' === $argument->getTextWithContext()) { + $argument->setContext(sprintf('Property "%s" of service "%s"', $key, $this->currentId)); + } + } + + return parent::processValue($value, $isRoot); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php new file mode 100644 index 0000000..b1c81ee --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php @@ -0,0 +1,98 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; + +/** + * Resolves all parameter placeholders "%somevalue%" to their real values. + * + * @author Johannes M. Schmitt + */ +class ResolveParameterPlaceHoldersPass extends AbstractRecursivePass +{ + private $bag; + private $resolveArrays; + private $throwOnResolveException; + + public function __construct($resolveArrays = true, $throwOnResolveException = true) + { + $this->resolveArrays = $resolveArrays; + $this->throwOnResolveException = $throwOnResolveException; + } + + /** + * {@inheritdoc} + * + * @throws ParameterNotFoundException + */ + public function process(ContainerBuilder $container) + { + $this->bag = $container->getParameterBag(); + + try { + parent::process($container); + + $aliases = []; + foreach ($container->getAliases() as $name => $target) { + $this->currentId = $name; + $aliases[$this->bag->resolveValue($name)] = $target; + } + $container->setAliases($aliases); + } catch (ParameterNotFoundException $e) { + $e->setSourceId($this->currentId); + + throw $e; + } + + $this->bag->resolve(); + $this->bag = null; + } + + protected function processValue($value, bool $isRoot = false) + { + if (\is_string($value)) { + try { + $v = $this->bag->resolveValue($value); + } catch (ParameterNotFoundException $e) { + if ($this->throwOnResolveException) { + throw $e; + } + + $v = null; + $this->container->getDefinition($this->currentId)->addError($e->getMessage()); + } + + return $this->resolveArrays || !$v || !\is_array($v) ? $v : $value; + } + if ($value instanceof Definition) { + $value->setBindings($this->processValue($value->getBindings())); + $changes = $value->getChanges(); + if (isset($changes['class'])) { + $value->setClass($this->bag->resolveValue($value->getClass())); + } + if (isset($changes['file'])) { + $value->setFile($this->bag->resolveValue($value->getFile())); + } + } + + $value = parent::processValue($value, $isRoot); + + if ($value && \is_array($value)) { + $value = array_combine($this->bag->resolveValue(array_keys($value)), $value); + } + + return $value; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php new file mode 100644 index 0000000..518c03d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php @@ -0,0 +1,52 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Psr\Container\ContainerInterface; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Reference; +use Symfony\Contracts\Service\ServiceProviderInterface; + +/** + * Compiler pass to inject their service locator to service subscribers. + * + * @author Nicolas Grekas + */ +class ResolveServiceSubscribersPass extends AbstractRecursivePass +{ + private $serviceLocator; + + protected function processValue($value, bool $isRoot = false) + { + if ($value instanceof Reference && $this->serviceLocator && \in_array((string) $value, [ContainerInterface::class, ServiceProviderInterface::class], true)) { + return new Reference($this->serviceLocator); + } + + if (!$value instanceof Definition) { + return parent::processValue($value, $isRoot); + } + + $serviceLocator = $this->serviceLocator; + $this->serviceLocator = null; + + if ($value->hasTag('container.service_subscriber.locator')) { + $this->serviceLocator = $value->getTag('container.service_subscriber.locator')[0]['id']; + $value->clearTag('container.service_subscriber.locator'); + } + + try { + return parent::processValue($value); + } finally { + $this->serviceLocator = $serviceLocator; + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php new file mode 100644 index 0000000..1225514 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php @@ -0,0 +1,99 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Reference; + +/** + * This is a directed graph of your services. + * + * This information can be used by your compiler passes instead of collecting + * it themselves which improves performance quite a lot. + * + * @author Johannes M. Schmitt + * + * @final + */ +class ServiceReferenceGraph +{ + /** + * @var ServiceReferenceGraphNode[] + */ + private $nodes = []; + + public function hasNode(string $id): bool + { + return isset($this->nodes[$id]); + } + + /** + * Gets a node by identifier. + * + * @throws InvalidArgumentException if no node matches the supplied identifier + */ + public function getNode(string $id): ServiceReferenceGraphNode + { + if (!isset($this->nodes[$id])) { + throw new InvalidArgumentException(sprintf('There is no node with id "%s".', $id)); + } + + return $this->nodes[$id]; + } + + /** + * Returns all nodes. + * + * @return ServiceReferenceGraphNode[] + */ + public function getNodes(): array + { + return $this->nodes; + } + + /** + * Clears all nodes. + */ + public function clear() + { + foreach ($this->nodes as $node) { + $node->clear(); + } + $this->nodes = []; + } + + /** + * Connects 2 nodes together in the Graph. + */ + public function connect(?string $sourceId, $sourceValue, ?string $destId, $destValue = null, Reference $reference = null, bool $lazy = false, bool $weak = false, bool $byConstructor = false) + { + if (null === $sourceId || null === $destId) { + return; + } + + $sourceNode = $this->createNode($sourceId, $sourceValue); + $destNode = $this->createNode($destId, $destValue); + $edge = new ServiceReferenceGraphEdge($sourceNode, $destNode, $reference, $lazy, $weak, $byConstructor); + + $sourceNode->addOutEdge($edge); + $destNode->addInEdge($edge); + } + + private function createNode(string $id, $value): ServiceReferenceGraphNode + { + if (isset($this->nodes[$id]) && $this->nodes[$id]->getValue() === $value) { + return $this->nodes[$id]; + } + + return $this->nodes[$id] = new ServiceReferenceGraphNode($id, $value); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php new file mode 100644 index 0000000..9861456 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php @@ -0,0 +1,99 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +/** + * Represents an edge in your service graph. + * + * Value is typically a reference. + * + * @author Johannes M. Schmitt + */ +class ServiceReferenceGraphEdge +{ + private $sourceNode; + private $destNode; + private $value; + private $lazy; + private $weak; + private $byConstructor; + + public function __construct(ServiceReferenceGraphNode $sourceNode, ServiceReferenceGraphNode $destNode, $value = null, bool $lazy = false, bool $weak = false, bool $byConstructor = false) + { + $this->sourceNode = $sourceNode; + $this->destNode = $destNode; + $this->value = $value; + $this->lazy = $lazy; + $this->weak = $weak; + $this->byConstructor = $byConstructor; + } + + /** + * Returns the value of the edge. + * + * @return mixed + */ + public function getValue() + { + return $this->value; + } + + /** + * Returns the source node. + * + * @return ServiceReferenceGraphNode + */ + public function getSourceNode() + { + return $this->sourceNode; + } + + /** + * Returns the destination node. + * + * @return ServiceReferenceGraphNode + */ + public function getDestNode() + { + return $this->destNode; + } + + /** + * Returns true if the edge is lazy, meaning it's a dependency not requiring direct instantiation. + * + * @return bool + */ + public function isLazy() + { + return $this->lazy; + } + + /** + * Returns true if the edge is weak, meaning it shouldn't prevent removing the target service. + * + * @return bool + */ + public function isWeak() + { + return $this->weak; + } + + /** + * Returns true if the edge links with a constructor argument. + * + * @return bool + */ + public function isReferencedByConstructor() + { + return $this->byConstructor; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php new file mode 100644 index 0000000..ba96da2 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php @@ -0,0 +1,118 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Compiler; + +use Symfony\Component\DependencyInjection\Alias; +use Symfony\Component\DependencyInjection\Definition; + +/** + * Represents a node in your service graph. + * + * Value is typically a definition, or an alias. + * + * @author Johannes M. Schmitt + */ +class ServiceReferenceGraphNode +{ + private $id; + private $inEdges = []; + private $outEdges = []; + private $value; + + /** + * @param string $id The node identifier + * @param mixed $value The node value + */ + public function __construct(string $id, $value) + { + $this->id = $id; + $this->value = $value; + } + + public function addInEdge(ServiceReferenceGraphEdge $edge) + { + $this->inEdges[] = $edge; + } + + public function addOutEdge(ServiceReferenceGraphEdge $edge) + { + $this->outEdges[] = $edge; + } + + /** + * Checks if the value of this node is an Alias. + * + * @return bool + */ + public function isAlias() + { + return $this->value instanceof Alias; + } + + /** + * Checks if the value of this node is a Definition. + * + * @return bool + */ + public function isDefinition() + { + return $this->value instanceof Definition; + } + + /** + * Returns the identifier. + * + * @return string + */ + public function getId() + { + return $this->id; + } + + /** + * Returns the in edges. + * + * @return ServiceReferenceGraphEdge[] + */ + public function getInEdges() + { + return $this->inEdges; + } + + /** + * Returns the out edges. + * + * @return ServiceReferenceGraphEdge[] + */ + public function getOutEdges() + { + return $this->outEdges; + } + + /** + * Returns the value of this Node. + * + * @return mixed + */ + public function getValue() + { + return $this->value; + } + + /** + * Clears all edges. + */ + public function clear() + { + $this->inEdges = $this->outEdges = []; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Container.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Container.php new file mode 100644 index 0000000..6f61eb8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Container.php @@ -0,0 +1,434 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection; + +use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; +use Symfony\Component\DependencyInjection\Argument\ServiceLocator as ArgumentServiceLocator; +use Symfony\Component\DependencyInjection\Exception\EnvNotFoundException; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; +use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; +use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; +use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag; +use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; +use Symfony\Contracts\Service\ResetInterface; + +// Help opcache.preload discover always-needed symbols +class_exists(RewindableGenerator::class); +class_exists(ArgumentServiceLocator::class); + +/** + * Container is a dependency injection container. + * + * It gives access to object instances (services). + * Services and parameters are simple key/pair stores. + * The container can have four possible behaviors when a service + * does not exist (or is not initialized for the last case): + * + * * EXCEPTION_ON_INVALID_REFERENCE: Throws an exception (the default) + * * NULL_ON_INVALID_REFERENCE: Returns null + * * IGNORE_ON_INVALID_REFERENCE: Ignores the wrapping command asking for the reference + * (for instance, ignore a setter if the service does not exist) + * * IGNORE_ON_UNINITIALIZED_REFERENCE: Ignores/returns null for uninitialized services or invalid references + * + * @author Fabien Potencier + * @author Johannes M. Schmitt + */ +class Container implements ContainerInterface, ResetInterface +{ + protected $parameterBag; + protected $services = []; + protected $privates = []; + protected $fileMap = []; + protected $methodMap = []; + protected $factories = []; + protected $aliases = []; + protected $loading = []; + protected $resolving = []; + protected $syntheticIds = []; + + private $envCache = []; + private $compiled = false; + private $getEnv; + + public function __construct(ParameterBagInterface $parameterBag = null) + { + $this->parameterBag = $parameterBag ?? new EnvPlaceholderParameterBag(); + } + + /** + * Compiles the container. + * + * This method does two things: + * + * * Parameter values are resolved; + * * The parameter bag is frozen. + */ + public function compile() + { + $this->parameterBag->resolve(); + + $this->parameterBag = new FrozenParameterBag($this->parameterBag->all()); + + $this->compiled = true; + } + + /** + * Returns true if the container is compiled. + * + * @return bool + */ + public function isCompiled() + { + return $this->compiled; + } + + /** + * Gets the service container parameter bag. + * + * @return ParameterBagInterface + */ + public function getParameterBag() + { + return $this->parameterBag; + } + + /** + * Gets a parameter. + * + * @return array|bool|string|int|float|\UnitEnum|null + * + * @throws InvalidArgumentException if the parameter is not defined + */ + public function getParameter(string $name) + { + return $this->parameterBag->get($name); + } + + /** + * @return bool + */ + public function hasParameter(string $name) + { + return $this->parameterBag->has($name); + } + + /** + * Sets a parameter. + * + * @param string $name The parameter name + * @param array|bool|string|int|float|\UnitEnum|null $value The parameter value + */ + public function setParameter(string $name, $value) + { + $this->parameterBag->set($name, $value); + } + + /** + * Sets a service. + * + * Setting a synthetic service to null resets it: has() returns false and get() + * behaves in the same way as if the service was never created. + */ + public function set(string $id, ?object $service) + { + // Runs the internal initializer; used by the dumped container to include always-needed files + if (isset($this->privates['service_container']) && $this->privates['service_container'] instanceof \Closure) { + $initialize = $this->privates['service_container']; + unset($this->privates['service_container']); + $initialize(); + } + + if ('service_container' === $id) { + throw new InvalidArgumentException('You cannot set service "service_container".'); + } + + if (!(isset($this->fileMap[$id]) || isset($this->methodMap[$id]))) { + if (isset($this->syntheticIds[$id]) || !isset($this->getRemovedIds()[$id])) { + // no-op + } elseif (null === $service) { + throw new InvalidArgumentException(sprintf('The "%s" service is private, you cannot unset it.', $id)); + } else { + throw new InvalidArgumentException(sprintf('The "%s" service is private, you cannot replace it.', $id)); + } + } elseif (isset($this->services[$id])) { + throw new InvalidArgumentException(sprintf('The "%s" service is already initialized, you cannot replace it.', $id)); + } + + if (isset($this->aliases[$id])) { + unset($this->aliases[$id]); + } + + if (null === $service) { + unset($this->services[$id]); + + return; + } + + $this->services[$id] = $service; + } + + /** + * Returns true if the given service is defined. + * + * @param string $id The service identifier + * + * @return bool + */ + public function has(string $id) + { + if (isset($this->aliases[$id])) { + $id = $this->aliases[$id]; + } + if (isset($this->services[$id])) { + return true; + } + if ('service_container' === $id) { + return true; + } + + return isset($this->fileMap[$id]) || isset($this->methodMap[$id]); + } + + /** + * Gets a service. + * + * @return object|null + * + * @throws ServiceCircularReferenceException When a circular reference is detected + * @throws ServiceNotFoundException When the service is not defined + * @throws \Exception if an exception has been thrown when the service has been resolved + * + * @see Reference + */ + public function get(string $id, int $invalidBehavior = /* self::EXCEPTION_ON_INVALID_REFERENCE */ 1) + { + return $this->services[$id] + ?? $this->services[$id = $this->aliases[$id] ?? $id] + ?? ('service_container' === $id ? $this : ($this->factories[$id] ?? [$this, 'make'])($id, $invalidBehavior)); + } + + /** + * Creates a service. + * + * As a separate method to allow "get()" to use the really fast `??` operator. + */ + private function make(string $id, int $invalidBehavior) + { + if (isset($this->loading[$id])) { + throw new ServiceCircularReferenceException($id, array_merge(array_keys($this->loading), [$id])); + } + + $this->loading[$id] = true; + + try { + if (isset($this->fileMap[$id])) { + return /* self::IGNORE_ON_UNINITIALIZED_REFERENCE */ 4 === $invalidBehavior ? null : $this->load($this->fileMap[$id]); + } elseif (isset($this->methodMap[$id])) { + return /* self::IGNORE_ON_UNINITIALIZED_REFERENCE */ 4 === $invalidBehavior ? null : $this->{$this->methodMap[$id]}(); + } + } catch (\Exception $e) { + unset($this->services[$id]); + + throw $e; + } finally { + unset($this->loading[$id]); + } + + if (/* self::EXCEPTION_ON_INVALID_REFERENCE */ 1 === $invalidBehavior) { + if (!$id) { + throw new ServiceNotFoundException($id); + } + if (isset($this->syntheticIds[$id])) { + throw new ServiceNotFoundException($id, null, null, [], sprintf('The "%s" service is synthetic, it needs to be set at boot time before it can be used.', $id)); + } + if (isset($this->getRemovedIds()[$id])) { + throw new ServiceNotFoundException($id, null, null, [], sprintf('The "%s" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.', $id)); + } + + $alternatives = []; + foreach ($this->getServiceIds() as $knownId) { + if ('' === $knownId || '.' === $knownId[0]) { + continue; + } + $lev = levenshtein($id, $knownId); + if ($lev <= \strlen($id) / 3 || str_contains($knownId, $id)) { + $alternatives[] = $knownId; + } + } + + throw new ServiceNotFoundException($id, null, null, $alternatives); + } + + return null; + } + + /** + * Returns true if the given service has actually been initialized. + * + * @return bool + */ + public function initialized(string $id) + { + if (isset($this->aliases[$id])) { + $id = $this->aliases[$id]; + } + + if ('service_container' === $id) { + return false; + } + + return isset($this->services[$id]); + } + + /** + * {@inheritdoc} + */ + public function reset() + { + $services = $this->services + $this->privates; + $this->services = $this->factories = $this->privates = []; + + foreach ($services as $service) { + try { + if ($service instanceof ResetInterface) { + $service->reset(); + } + } catch (\Throwable $e) { + continue; + } + } + } + + /** + * Gets all service ids. + * + * @return string[] + */ + public function getServiceIds() + { + return array_map('strval', array_unique(array_merge(['service_container'], array_keys($this->fileMap), array_keys($this->methodMap), array_keys($this->aliases), array_keys($this->services)))); + } + + /** + * Gets service ids that existed at compile time. + * + * @return array + */ + public function getRemovedIds() + { + return []; + } + + /** + * Camelizes a string. + * + * @return string + */ + public static function camelize(string $id) + { + return strtr(ucwords(strtr($id, ['_' => ' ', '.' => '_ ', '\\' => '_ '])), [' ' => '']); + } + + /** + * A string to underscore. + * + * @return string + */ + public static function underscore(string $id) + { + return strtolower(preg_replace(['/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'], ['\\1_\\2', '\\1_\\2'], str_replace('_', '.', $id))); + } + + /** + * Creates a service by requiring its factory file. + */ + protected function load(string $file) + { + return require $file; + } + + /** + * Fetches a variable from the environment. + * + * @return mixed + * + * @throws EnvNotFoundException When the environment variable is not found and has no default value + */ + protected function getEnv(string $name) + { + if (isset($this->resolving[$envName = "env($name)"])) { + throw new ParameterCircularReferenceException(array_keys($this->resolving)); + } + if (isset($this->envCache[$name]) || \array_key_exists($name, $this->envCache)) { + return $this->envCache[$name]; + } + if (!$this->has($id = 'container.env_var_processors_locator')) { + $this->set($id, new ServiceLocator([])); + } + if (!$this->getEnv) { + $this->getEnv = \Closure::fromCallable([$this, 'getEnv']); + } + $processors = $this->get($id); + + if (false !== $i = strpos($name, ':')) { + $prefix = substr($name, 0, $i); + $localName = substr($name, 1 + $i); + } else { + $prefix = 'string'; + $localName = $name; + } + $processor = $processors->has($prefix) ? $processors->get($prefix) : new EnvVarProcessor($this); + + $this->resolving[$envName] = true; + try { + return $this->envCache[$name] = $processor->getEnv($prefix, $localName, $this->getEnv); + } finally { + unset($this->resolving[$envName]); + } + } + + /** + * @param string|false $registry + * @param string|bool $load + * + * @return mixed + * + * @internal + */ + final protected function getService($registry, string $id, ?string $method, $load) + { + if ('service_container' === $id) { + return $this; + } + if (\is_string($load)) { + throw new RuntimeException($load); + } + if (null === $method) { + return false !== $registry ? $this->{$registry}[$id] ?? null : null; + } + if (false !== $registry) { + return $this->{$registry}[$id] ?? $this->{$registry}[$id] = $load ? $this->load($method) : $this->{$method}(); + } + if (!$load) { + return $this->{$method}(); + } + + return ($factory = $this->factories[$id] ?? $this->factories['service_container'][$id] ?? null) ? $factory() : $this->load($method); + } + + private function __clone() + { + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ContainerAwareInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ContainerAwareInterface.php new file mode 100644 index 0000000..e7b9d57 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ContainerAwareInterface.php @@ -0,0 +1,25 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection; + +/** + * ContainerAwareInterface should be implemented by classes that depends on a Container. + * + * @author Fabien Potencier + */ +interface ContainerAwareInterface +{ + /** + * Sets the container. + */ + public function setContainer(ContainerInterface $container = null); +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Dumper.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Dumper.php new file mode 100644 index 0000000..e7407b0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Dumper.php @@ -0,0 +1,29 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Dumper; + +use Symfony\Component\DependencyInjection\ContainerBuilder; + +/** + * Dumper is the abstract class for all built-in dumpers. + * + * @author Fabien Potencier + */ +abstract class Dumper implements DumperInterface +{ + protected $container; + + public function __construct(ContainerBuilder $container) + { + $this->container = $container; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Preloader.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Preloader.php new file mode 100644 index 0000000..c61b08e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Preloader.php @@ -0,0 +1,131 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Dumper; + +/** + * @author Nicolas Grekas + */ +final class Preloader +{ + public static function append(string $file, array $list): void + { + if (!file_exists($file)) { + throw new \LogicException(sprintf('File "%s" does not exist.', $file)); + } + + $cacheDir = \dirname($file); + $classes = []; + + foreach ($list as $item) { + if (0 === strpos($item, $cacheDir)) { + file_put_contents($file, sprintf("require_once __DIR__.%s;\n", var_export(strtr(substr($item, \strlen($cacheDir)), \DIRECTORY_SEPARATOR, '/'), true)), \FILE_APPEND); + continue; + } + + $classes[] = sprintf("\$classes[] = %s;\n", var_export($item, true)); + } + + file_put_contents($file, sprintf("\n\$classes = [];\n%s\$preloaded = Preloader::preload(\$classes, \$preloaded);\n", implode('', $classes)), \FILE_APPEND); + } + + public static function preload(array $classes, array $preloaded = []): array + { + set_error_handler(function ($t, $m, $f, $l) { + if (error_reporting() & $t) { + if (__FILE__ !== $f) { + throw new \ErrorException($m, 0, $t, $f, $l); + } + + throw new \ReflectionException($m); + } + }); + + $prev = []; + + try { + while ($prev !== $classes) { + $prev = $classes; + foreach ($classes as $c) { + if (!isset($preloaded[$c])) { + self::doPreload($c, $preloaded); + } + } + $classes = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits()); + } + } finally { + restore_error_handler(); + } + + return $preloaded; + } + + private static function doPreload(string $class, array &$preloaded): void + { + if (isset($preloaded[$class]) || \in_array($class, ['self', 'static', 'parent'], true)) { + return; + } + + $preloaded[$class] = true; + + try { + if (!class_exists($class) && !interface_exists($class, false) && !trait_exists($class, false)) { + return; + } + + $r = new \ReflectionClass($class); + + if ($r->isInternal()) { + return; + } + + $r->getConstants(); + $r->getDefaultProperties(); + + if (\PHP_VERSION_ID >= 70400) { + foreach ($r->getProperties(\ReflectionProperty::IS_PUBLIC) as $p) { + self::preloadType($p->getType(), $preloaded); + } + } + + foreach ($r->getMethods(\ReflectionMethod::IS_PUBLIC) as $m) { + foreach ($m->getParameters() as $p) { + if ($p->isDefaultValueAvailable() && $p->isDefaultValueConstant()) { + $c = $p->getDefaultValueConstantName(); + + if ($i = strpos($c, '::')) { + self::doPreload(substr($c, 0, $i), $preloaded); + } + } + + self::preloadType($p->getType(), $preloaded); + } + + self::preloadType($m->getReturnType(), $preloaded); + } + } catch (\Throwable $e) { + // ignore missing classes + } + } + + private static function preloadType(?\ReflectionType $t, array &$preloaded): void + { + if (!$t) { + return; + } + + foreach (($t instanceof \ReflectionUnionType || $t instanceof \ReflectionIntersectionType) ? $t->getTypes() : [$t] as $t) { + if (!$t->isBuiltin()) { + self::doPreload($t instanceof \ReflectionNamedType ? $t->getName() : $t, $preloaded); + } + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/XmlDumper.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/XmlDumper.php new file mode 100644 index 0000000..4f7b16d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/XmlDumper.php @@ -0,0 +1,395 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Dumper; + +use Symfony\Component\DependencyInjection\Alias; +use Symfony\Component\DependencyInjection\Argument\AbstractArgument; +use Symfony\Component\DependencyInjection\Argument\IteratorArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; +use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; +use Symfony\Component\DependencyInjection\ContainerInterface; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; +use Symfony\Component\DependencyInjection\Parameter; +use Symfony\Component\DependencyInjection\Reference; +use Symfony\Component\ExpressionLanguage\Expression; + +/** + * XmlDumper dumps a service container as an XML string. + * + * @author Fabien Potencier + * @author Martin Hasoň + */ +class XmlDumper extends Dumper +{ + /** + * @var \DOMDocument + */ + private $document; + + /** + * Dumps the service container as an XML string. + * + * @return string + */ + public function dump(array $options = []) + { + $this->document = new \DOMDocument('1.0', 'utf-8'); + $this->document->formatOutput = true; + + $container = $this->document->createElementNS('http://symfony.com/schema/dic/services', 'container'); + $container->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); + $container->setAttribute('xsi:schemaLocation', 'http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd'); + + $this->addParameters($container); + $this->addServices($container); + + $this->document->appendChild($container); + $xml = $this->document->saveXML(); + $this->document = null; + + return $this->container->resolveEnvPlaceholders($xml); + } + + private function addParameters(\DOMElement $parent) + { + $data = $this->container->getParameterBag()->all(); + if (!$data) { + return; + } + + if ($this->container->isCompiled()) { + $data = $this->escape($data); + } + + $parameters = $this->document->createElement('parameters'); + $parent->appendChild($parameters); + $this->convertParameters($data, 'parameter', $parameters); + } + + private function addMethodCalls(array $methodcalls, \DOMElement $parent) + { + foreach ($methodcalls as $methodcall) { + $call = $this->document->createElement('call'); + $call->setAttribute('method', $methodcall[0]); + if (\count($methodcall[1])) { + $this->convertParameters($methodcall[1], 'argument', $call); + } + if ($methodcall[2] ?? false) { + $call->setAttribute('returns-clone', 'true'); + } + $parent->appendChild($call); + } + } + + private function addService(Definition $definition, ?string $id, \DOMElement $parent) + { + $service = $this->document->createElement('service'); + if (null !== $id) { + $service->setAttribute('id', $id); + } + if ($class = $definition->getClass()) { + if ('\\' === substr($class, 0, 1)) { + $class = substr($class, 1); + } + + $service->setAttribute('class', $class); + } + if (!$definition->isShared()) { + $service->setAttribute('shared', 'false'); + } + if ($definition->isPublic()) { + $service->setAttribute('public', 'true'); + } + if ($definition->isSynthetic()) { + $service->setAttribute('synthetic', 'true'); + } + if ($definition->isLazy()) { + $service->setAttribute('lazy', 'true'); + } + if (null !== $decoratedService = $definition->getDecoratedService()) { + [$decorated, $renamedId, $priority] = $decoratedService; + $service->setAttribute('decorates', $decorated); + + $decorationOnInvalid = $decoratedService[3] ?? ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; + if (\in_array($decorationOnInvalid, [ContainerInterface::IGNORE_ON_INVALID_REFERENCE, ContainerInterface::NULL_ON_INVALID_REFERENCE], true)) { + $invalidBehavior = ContainerInterface::NULL_ON_INVALID_REFERENCE === $decorationOnInvalid ? 'null' : 'ignore'; + $service->setAttribute('decoration-on-invalid', $invalidBehavior); + } + if (null !== $renamedId) { + $service->setAttribute('decoration-inner-name', $renamedId); + } + if (0 !== $priority) { + $service->setAttribute('decoration-priority', $priority); + } + } + + foreach ($definition->getTags() as $name => $tags) { + foreach ($tags as $attributes) { + $tag = $this->document->createElement('tag'); + if (!\array_key_exists('name', $attributes)) { + $tag->setAttribute('name', $name); + } else { + $tag->appendChild($this->document->createTextNode($name)); + } + foreach ($attributes as $key => $value) { + $tag->setAttribute($key, $value ?? ''); + } + $service->appendChild($tag); + } + } + + if ($definition->getFile()) { + $file = $this->document->createElement('file'); + $file->appendChild($this->document->createTextNode($definition->getFile())); + $service->appendChild($file); + } + + if ($parameters = $definition->getArguments()) { + $this->convertParameters($parameters, 'argument', $service); + } + + if ($parameters = $definition->getProperties()) { + $this->convertParameters($parameters, 'property', $service, 'name'); + } + + $this->addMethodCalls($definition->getMethodCalls(), $service); + + if ($callable = $definition->getFactory()) { + $factory = $this->document->createElement('factory'); + + if (\is_array($callable) && $callable[0] instanceof Definition) { + $this->addService($callable[0], null, $factory); + $factory->setAttribute('method', $callable[1]); + } elseif (\is_array($callable)) { + if (null !== $callable[0]) { + $factory->setAttribute($callable[0] instanceof Reference ? 'service' : 'class', $callable[0]); + } + $factory->setAttribute('method', $callable[1]); + } else { + $factory->setAttribute('function', $callable); + } + $service->appendChild($factory); + } + + if ($definition->isDeprecated()) { + $deprecation = $definition->getDeprecation('%service_id%'); + $deprecated = $this->document->createElement('deprecated'); + $deprecated->appendChild($this->document->createTextNode($definition->getDeprecation('%service_id%')['message'])); + $deprecated->setAttribute('package', $deprecation['package']); + $deprecated->setAttribute('version', $deprecation['version']); + + $service->appendChild($deprecated); + } + + if ($definition->isAutowired()) { + $service->setAttribute('autowire', 'true'); + } + + if ($definition->isAutoconfigured()) { + $service->setAttribute('autoconfigure', 'true'); + } + + if ($definition->isAbstract()) { + $service->setAttribute('abstract', 'true'); + } + + if ($callable = $definition->getConfigurator()) { + $configurator = $this->document->createElement('configurator'); + + if (\is_array($callable) && $callable[0] instanceof Definition) { + $this->addService($callable[0], null, $configurator); + $configurator->setAttribute('method', $callable[1]); + } elseif (\is_array($callable)) { + $configurator->setAttribute($callable[0] instanceof Reference ? 'service' : 'class', $callable[0]); + $configurator->setAttribute('method', $callable[1]); + } else { + $configurator->setAttribute('function', $callable); + } + $service->appendChild($configurator); + } + + $parent->appendChild($service); + } + + private function addServiceAlias(string $alias, Alias $id, \DOMElement $parent) + { + $service = $this->document->createElement('service'); + $service->setAttribute('id', $alias); + $service->setAttribute('alias', $id); + if ($id->isPublic()) { + $service->setAttribute('public', 'true'); + } + + if ($id->isDeprecated()) { + $deprecation = $id->getDeprecation('%alias_id%'); + $deprecated = $this->document->createElement('deprecated'); + $deprecated->appendChild($this->document->createTextNode($deprecation['message'])); + $deprecated->setAttribute('package', $deprecation['package']); + $deprecated->setAttribute('version', $deprecation['version']); + + $service->appendChild($deprecated); + } + + $parent->appendChild($service); + } + + private function addServices(\DOMElement $parent) + { + $definitions = $this->container->getDefinitions(); + if (!$definitions) { + return; + } + + $services = $this->document->createElement('services'); + foreach ($definitions as $id => $definition) { + $this->addService($definition, $id, $services); + } + + $aliases = $this->container->getAliases(); + foreach ($aliases as $alias => $id) { + while (isset($aliases[(string) $id])) { + $id = $aliases[(string) $id]; + } + $this->addServiceAlias($alias, $id, $services); + } + $parent->appendChild($services); + } + + private function convertParameters(array $parameters, string $type, \DOMElement $parent, string $keyAttribute = 'key') + { + $withKeys = !array_is_list($parameters); + foreach ($parameters as $key => $value) { + $element = $this->document->createElement($type); + if ($withKeys) { + $element->setAttribute($keyAttribute, $key); + } + + if (\is_array($tag = $value)) { + $element->setAttribute('type', 'collection'); + $this->convertParameters($value, $type, $element, 'key'); + } elseif ($value instanceof TaggedIteratorArgument || ($value instanceof ServiceLocatorArgument && $tag = $value->getTaggedIteratorArgument())) { + $element->setAttribute('type', $value instanceof TaggedIteratorArgument ? 'tagged_iterator' : 'tagged_locator'); + $element->setAttribute('tag', $tag->getTag()); + + if (null !== $tag->getIndexAttribute()) { + $element->setAttribute('index-by', $tag->getIndexAttribute()); + + if (null !== $tag->getDefaultIndexMethod()) { + $element->setAttribute('default-index-method', $tag->getDefaultIndexMethod()); + } + if (null !== $tag->getDefaultPriorityMethod()) { + $element->setAttribute('default-priority-method', $tag->getDefaultPriorityMethod()); + } + } + } elseif ($value instanceof IteratorArgument) { + $element->setAttribute('type', 'iterator'); + $this->convertParameters($value->getValues(), $type, $element, 'key'); + } elseif ($value instanceof ServiceLocatorArgument) { + $element->setAttribute('type', 'service_locator'); + $this->convertParameters($value->getValues(), $type, $element, 'key'); + } elseif ($value instanceof Reference || $value instanceof ServiceClosureArgument) { + $element->setAttribute('type', 'service'); + if ($value instanceof ServiceClosureArgument) { + $element->setAttribute('type', 'service_closure'); + $value = $value->getValues()[0]; + } + $element->setAttribute('id', (string) $value); + $behavior = $value->getInvalidBehavior(); + if (ContainerInterface::NULL_ON_INVALID_REFERENCE == $behavior) { + $element->setAttribute('on-invalid', 'null'); + } elseif (ContainerInterface::IGNORE_ON_INVALID_REFERENCE == $behavior) { + $element->setAttribute('on-invalid', 'ignore'); + } elseif (ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE == $behavior) { + $element->setAttribute('on-invalid', 'ignore_uninitialized'); + } + } elseif ($value instanceof Definition) { + $element->setAttribute('type', 'service'); + $this->addService($value, null, $element); + } elseif ($value instanceof Expression) { + $element->setAttribute('type', 'expression'); + $text = $this->document->createTextNode(self::phpToXml((string) $value)); + $element->appendChild($text); + } elseif (\is_string($value) && !preg_match('/^[^\x00-\x08\x0B\x0E-\x1A\x1C-\x1F\x7F]*+$/u', $value)) { + $element->setAttribute('type', 'binary'); + $text = $this->document->createTextNode(self::phpToXml(base64_encode($value))); + $element->appendChild($text); + } elseif ($value instanceof \UnitEnum) { + $element->setAttribute('type', 'constant'); + $element->appendChild($this->document->createTextNode(self::phpToXml($value))); + } elseif ($value instanceof AbstractArgument) { + $element->setAttribute('type', 'abstract'); + $text = $this->document->createTextNode(self::phpToXml($value->getText())); + $element->appendChild($text); + } else { + if (\in_array($value, ['null', 'true', 'false'], true)) { + $element->setAttribute('type', 'string'); + } + + if (\is_string($value) && (is_numeric($value) || preg_match('/^0b[01]*$/', $value) || preg_match('/^0x[0-9a-f]++$/i', $value))) { + $element->setAttribute('type', 'string'); + } + + $text = $this->document->createTextNode(self::phpToXml($value)); + $element->appendChild($text); + } + $parent->appendChild($element); + } + } + + /** + * Escapes arguments. + */ + private function escape(array $arguments): array + { + $args = []; + foreach ($arguments as $k => $v) { + if (\is_array($v)) { + $args[$k] = $this->escape($v); + } elseif (\is_string($v)) { + $args[$k] = str_replace('%', '%%', $v); + } else { + $args[$k] = $v; + } + } + + return $args; + } + + /** + * Converts php types to xml types. + * + * @param mixed $value Value to convert + * + * @throws RuntimeException When trying to dump object or resource + */ + public static function phpToXml($value): string + { + switch (true) { + case null === $value: + return 'null'; + case true === $value: + return 'true'; + case false === $value: + return 'false'; + case $value instanceof Parameter: + return '%'.$value.'%'; + case $value instanceof \UnitEnum: + return sprintf('%s::%s', \get_class($value), $value->name); + case \is_object($value) || \is_resource($value): + throw new RuntimeException('Unable to dump a service container if a parameter is an object or a resource.'); + default: + return (string) $value; + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php new file mode 100644 index 0000000..2a11626 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Exception; + +/** + * Thrown when trying to inject a parameter into a constructor/method with an incompatible type. + * + * @author Nicolas Grekas + * @author Julien Maulny + */ +class InvalidParameterTypeException extends InvalidArgumentException +{ + public function __construct(string $serviceId, string $type, \ReflectionParameter $parameter) + { + $acceptedType = $parameter->getType(); + $acceptedType = $acceptedType instanceof \ReflectionNamedType ? $acceptedType->getName() : (string) $acceptedType; + $this->code = $type; + + $function = $parameter->getDeclaringFunction(); + $functionName = $function instanceof \ReflectionMethod + ? sprintf('%s::%s', $function->getDeclaringClass()->getName(), $function->getName()) + : $function->getName(); + + parent::__construct(sprintf('Invalid definition for service "%s": argument %d of "%s()" accepts "%s", "%s" passed.', $serviceId, 1 + $parameter->getPosition(), $functionName, $acceptedType, $type)); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/RuntimeException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/RuntimeException.php new file mode 100644 index 0000000..5c24541 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/RuntimeException.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Exception; + +/** + * Base RuntimeException for Dependency Injection component. + * + * @author Johannes M. Schmitt + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php new file mode 100644 index 0000000..a38671b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php @@ -0,0 +1,41 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Exception; + +/** + * This exception is thrown when a circular reference is detected. + * + * @author Johannes M. Schmitt + */ +class ServiceCircularReferenceException extends RuntimeException +{ + private $serviceId; + private $path; + + public function __construct(string $serviceId, array $path, \Throwable $previous = null) + { + parent::__construct(sprintf('Circular reference detected for service "%s", path: "%s".', $serviceId, implode(' -> ', $path)), 0, $previous); + + $this->serviceId = $serviceId; + $this->path = $path; + } + + public function getServiceId() + { + return $this->serviceId; + } + + public function getPath() + { + return $this->path; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php new file mode 100644 index 0000000..f91afae --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php @@ -0,0 +1,67 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Exception; + +use Psr\Container\NotFoundExceptionInterface; + +/** + * This exception is thrown when a non-existent service is requested. + * + * @author Johannes M. Schmitt + */ +class ServiceNotFoundException extends InvalidArgumentException implements NotFoundExceptionInterface +{ + private $id; + private $sourceId; + private $alternatives; + + public function __construct(string $id, string $sourceId = null, \Throwable $previous = null, array $alternatives = [], string $msg = null) + { + if (null !== $msg) { + // no-op + } elseif (null === $sourceId) { + $msg = sprintf('You have requested a non-existent service "%s".', $id); + } else { + $msg = sprintf('The service "%s" has a dependency on a non-existent service "%s".', $sourceId, $id); + } + + if ($alternatives) { + if (1 == \count($alternatives)) { + $msg .= ' Did you mean this: "'; + } else { + $msg .= ' Did you mean one of these: "'; + } + $msg .= implode('", "', $alternatives).'"?'; + } + + parent::__construct($msg, 0, $previous); + + $this->id = $id; + $this->sourceId = $sourceId; + $this->alternatives = $alternatives; + } + + public function getId() + { + return $this->id; + } + + public function getSourceId() + { + return $this->sourceId; + } + + public function getAlternatives() + { + return $this->alternatives; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ExpressionLanguageProvider.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ExpressionLanguageProvider.php new file mode 100644 index 0000000..9198ca0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ExpressionLanguageProvider.php @@ -0,0 +1,50 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection; + +use Symfony\Component\ExpressionLanguage\ExpressionFunction; +use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface; + +/** + * Define some ExpressionLanguage functions. + * + * To get a service, use service('request'). + * To get a parameter, use parameter('kernel.debug'). + * + * @author Fabien Potencier + */ +class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface +{ + private $serviceCompiler; + + public function __construct(callable $serviceCompiler = null) + { + $this->serviceCompiler = $serviceCompiler; + } + + public function getFunctions() + { + return [ + new ExpressionFunction('service', $this->serviceCompiler ?: function ($arg) { + return sprintf('$this->get(%s)', $arg); + }, function (array $variables, $value) { + return $variables['container']->get($value); + }), + + new ExpressionFunction('parameter', function ($arg) { + return sprintf('$this->getParameter(%s)', $arg); + }, function (array $variables, $value) { + return $variables['container']->getParameter($value); + }), + ]; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php new file mode 100644 index 0000000..7e0f14c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php @@ -0,0 +1,48 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\LazyProxy\PhpDumper; + +use Symfony\Component\DependencyInjection\Definition; + +/** + * Null dumper, negates any proxy code generation for any given service definition. + * + * @author Marco Pivetta + * + * @final + */ +class NullDumper implements DumperInterface +{ + /** + * {@inheritdoc} + */ + public function isProxyCandidate(Definition $definition): bool + { + return false; + } + + /** + * {@inheritdoc} + */ + public function getProxyFactoryCode(Definition $definition, string $id, string $factoryCode): string + { + return ''; + } + + /** + * {@inheritdoc} + */ + public function getProxyCode(Definition $definition): string + { + return ''; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php new file mode 100644 index 0000000..8eb45b5 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php @@ -0,0 +1,77 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\LazyProxy; + +/** + * @author Nicolas Grekas + * + * @internal + */ +class ProxyHelper +{ + /** + * @return string|null The FQCN or builtin name of the type hint, or null when the type hint references an invalid self|parent context + */ + public static function getTypeHint(\ReflectionFunctionAbstract $r, \ReflectionParameter $p = null, bool $noBuiltin = false): ?string + { + if ($p instanceof \ReflectionParameter) { + $type = $p->getType(); + } else { + $type = $r->getReturnType(); + } + if (!$type) { + return null; + } + + $types = []; + $glue = '|'; + if ($type instanceof \ReflectionUnionType) { + $reflectionTypes = $type->getTypes(); + } elseif ($type instanceof \ReflectionIntersectionType) { + $reflectionTypes = $type->getTypes(); + $glue = '&'; + } elseif ($type instanceof \ReflectionNamedType) { + $reflectionTypes = [$type]; + } else { + return null; + } + + foreach ($reflectionTypes as $type) { + if ($type->isBuiltin()) { + if (!$noBuiltin) { + $types[] = $type->getName(); + } + continue; + } + + $lcName = strtolower($type->getName()); + $prefix = $noBuiltin ? '' : '\\'; + + if ('self' !== $lcName && 'parent' !== $lcName) { + $types[] = $prefix.$type->getName(); + continue; + } + if (!$r instanceof \ReflectionMethod) { + continue; + } + if ('self' === $lcName) { + $types[] = $prefix.$r->getDeclaringClass()->name; + } else { + $types[] = ($parent = $r->getDeclaringClass()->getParentClass()) ? $prefix.$parent->name : null; + } + } + + sort($types); + + return $types ? implode($glue, $types) : null; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/ClosureLoader.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/ClosureLoader.php new file mode 100644 index 0000000..fe2b91a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/ClosureLoader.php @@ -0,0 +1,49 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader; + +use Symfony\Component\Config\Loader\Loader; +use Symfony\Component\DependencyInjection\ContainerBuilder; + +/** + * ClosureLoader loads service definitions from a PHP closure. + * + * The Closure has access to the container as its first argument. + * + * @author Fabien Potencier + */ +class ClosureLoader extends Loader +{ + private $container; + + public function __construct(ContainerBuilder $container, string $env = null) + { + $this->container = $container; + parent::__construct($env); + } + + /** + * {@inheritdoc} + */ + public function load($resource, string $type = null) + { + return $resource($this->container, $this->env); + } + + /** + * {@inheritdoc} + */ + public function supports($resource, string $type = null) + { + return $resource instanceof \Closure; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php new file mode 100644 index 0000000..ac6fdb6 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php @@ -0,0 +1,212 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader\Configurator; + +use Symfony\Component\Config\Loader\ParamConfigurator; +use Symfony\Component\DependencyInjection\Argument\AbstractArgument; +use Symfony\Component\DependencyInjection\Argument\IteratorArgument; +use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; +use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; +use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; +use Symfony\Component\ExpressionLanguage\Expression; + +/** + * @author Nicolas Grekas + */ +class ContainerConfigurator extends AbstractConfigurator +{ + public const FACTORY = 'container'; + + private $container; + private $loader; + private $instanceof; + private $path; + private $file; + private $anonymousCount = 0; + private $env; + + public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, string $path, string $file, string $env = null) + { + $this->container = $container; + $this->loader = $loader; + $this->instanceof = &$instanceof; + $this->path = $path; + $this->file = $file; + $this->env = $env; + } + + final public function extension(string $namespace, array $config) + { + if (!$this->container->hasExtension($namespace)) { + $extensions = array_filter(array_map(function (ExtensionInterface $ext) { return $ext->getAlias(); }, $this->container->getExtensions())); + throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s" (in "%s"). Looked for namespace "%s", found "%s".', $namespace, $this->file, $namespace, $extensions ? implode('", "', $extensions) : 'none')); + } + + $this->container->loadFromExtension($namespace, static::processValue($config)); + } + + final public function import(string $resource, string $type = null, $ignoreErrors = false) + { + $this->loader->setCurrentDir(\dirname($this->path)); + $this->loader->import($resource, $type, $ignoreErrors, $this->file); + } + + final public function parameters(): ParametersConfigurator + { + return new ParametersConfigurator($this->container); + } + + final public function services(): ServicesConfigurator + { + return new ServicesConfigurator($this->container, $this->loader, $this->instanceof, $this->path, $this->anonymousCount); + } + + /** + * Get the current environment to be able to write conditional configuration. + */ + final public function env(): ?string + { + return $this->env; + } + + /** + * @return static + */ + final public function withPath(string $path): self + { + $clone = clone $this; + $clone->path = $clone->file = $path; + $clone->loader->setCurrentDir(\dirname($path)); + + return $clone; + } +} + +/** + * Creates a parameter. + */ +function param(string $name): ParamConfigurator +{ + return new ParamConfigurator($name); +} + +/** + * Creates a service reference. + * + * @deprecated since Symfony 5.1, use service() instead. + */ +function ref(string $id): ReferenceConfigurator +{ + trigger_deprecation('symfony/dependency-injection', '5.1', '"%s()" is deprecated, use "service()" instead.', __FUNCTION__); + + return new ReferenceConfigurator($id); +} + +/** + * Creates a reference to a service. + */ +function service(string $serviceId): ReferenceConfigurator +{ + return new ReferenceConfigurator($serviceId); +} + +/** + * Creates an inline service. + * + * @deprecated since Symfony 5.1, use inline_service() instead. + */ +function inline(string $class = null): InlineServiceConfigurator +{ + trigger_deprecation('symfony/dependency-injection', '5.1', '"%s()" is deprecated, use "inline_service()" instead.', __FUNCTION__); + + return new InlineServiceConfigurator(new Definition($class)); +} + +/** + * Creates an inline service. + */ +function inline_service(string $class = null): InlineServiceConfigurator +{ + return new InlineServiceConfigurator(new Definition($class)); +} + +/** + * Creates a service locator. + * + * @param ReferenceConfigurator[] $values + */ +function service_locator(array $values): ServiceLocatorArgument +{ + return new ServiceLocatorArgument(AbstractConfigurator::processValue($values, true)); +} + +/** + * Creates a lazy iterator. + * + * @param ReferenceConfigurator[] $values + */ +function iterator(array $values): IteratorArgument +{ + return new IteratorArgument(AbstractConfigurator::processValue($values, true)); +} + +/** + * Creates a lazy iterator by tag name. + */ +function tagged_iterator(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null, string $defaultPriorityMethod = null): TaggedIteratorArgument +{ + return new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod, false, $defaultPriorityMethod); +} + +/** + * Creates a service locator by tag name. + */ +function tagged_locator(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null, string $defaultPriorityMethod = null): ServiceLocatorArgument +{ + return new ServiceLocatorArgument(new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod, true, $defaultPriorityMethod)); +} + +/** + * Creates an expression. + */ +function expr(string $expression): Expression +{ + return new Expression($expression); +} + +/** + * Creates an abstract argument. + */ +function abstract_arg(string $description): AbstractArgument +{ + return new AbstractArgument($description); +} + +/** + * Creates an environment variable reference. + */ +function env(string $name): EnvConfigurator +{ + return new EnvConfigurator($name); +} + +/** + * Creates a closure service reference. + */ +function service_closure(string $serviceId): ClosureReferenceConfigurator +{ + return new ClosureReferenceConfigurator($serviceId); +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php new file mode 100644 index 0000000..d1864f5 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php @@ -0,0 +1,224 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader\Configurator; + +use Symfony\Component\Config\Loader\ParamConfigurator; + +class EnvConfigurator extends ParamConfigurator +{ + /** + * @var string[] + */ + private $stack; + + public function __construct(string $name) + { + $this->stack = explode(':', $name); + } + + public function __toString(): string + { + return '%env('.implode(':', $this->stack).')%'; + } + + /** + * @return $this + */ + public function __call(string $name, array $arguments): self + { + $processor = strtolower(preg_replace(['/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'], '\1_\2', $name)); + + $this->custom($processor, ...$arguments); + + return $this; + } + + /** + * @return $this + */ + public function custom(string $processor, ...$args): self + { + array_unshift($this->stack, $processor, ...$args); + + return $this; + } + + /** + * @return $this + */ + public function base64(): self + { + array_unshift($this->stack, 'base64'); + + return $this; + } + + /** + * @return $this + */ + public function bool(): self + { + array_unshift($this->stack, 'bool'); + + return $this; + } + + /** + * @return $this + */ + public function not(): self + { + array_unshift($this->stack, 'not'); + + return $this; + } + + /** + * @return $this + */ + public function const(): self + { + array_unshift($this->stack, 'const'); + + return $this; + } + + /** + * @return $this + */ + public function csv(): self + { + array_unshift($this->stack, 'csv'); + + return $this; + } + + /** + * @return $this + */ + public function file(): self + { + array_unshift($this->stack, 'file'); + + return $this; + } + + /** + * @return $this + */ + public function float(): self + { + array_unshift($this->stack, 'float'); + + return $this; + } + + /** + * @return $this + */ + public function int(): self + { + array_unshift($this->stack, 'int'); + + return $this; + } + + /** + * @return $this + */ + public function json(): self + { + array_unshift($this->stack, 'json'); + + return $this; + } + + /** + * @return $this + */ + public function key(string $key): self + { + array_unshift($this->stack, 'key', $key); + + return $this; + } + + /** + * @return $this + */ + public function url(): self + { + array_unshift($this->stack, 'url'); + + return $this; + } + + /** + * @return $this + */ + public function queryString(): self + { + array_unshift($this->stack, 'query_string'); + + return $this; + } + + /** + * @return $this + */ + public function resolve(): self + { + array_unshift($this->stack, 'resolve'); + + return $this; + } + + /** + * @return $this + */ + public function default(string $fallbackParam): self + { + array_unshift($this->stack, 'default', $fallbackParam); + + return $this; + } + + /** + * @return $this + */ + public function string(): self + { + array_unshift($this->stack, 'string'); + + return $this; + } + + /** + * @return $this + */ + public function trim(): self + { + array_unshift($this->stack, 'trim'); + + return $this; + } + + /** + * @return $this + */ + public function require(): self + { + array_unshift($this->stack, 'require'); + + return $this; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php new file mode 100644 index 0000000..f0cf177 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php @@ -0,0 +1,57 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader\Configurator; + +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\ExpressionLanguage\Expression; + +/** + * @author Nicolas Grekas + */ +class ParametersConfigurator extends AbstractConfigurator +{ + public const FACTORY = 'parameters'; + + private $container; + + public function __construct(ContainerBuilder $container) + { + $this->container = $container; + } + + /** + * Creates a parameter. + * + * @return $this + */ + final public function set(string $name, $value): self + { + if ($value instanceof Expression) { + throw new InvalidArgumentException(sprintf('Using an expression in parameter "%s" is not allowed.', $name)); + } + + $this->container->setParameter($name, static::processValue($value, true)); + + return $this; + } + + /** + * Creates a parameter. + * + * @return $this + */ + final public function __invoke(string $name, $value): self + { + return $this->set($name, $value); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php new file mode 100644 index 0000000..9eab22c --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; + +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; + +trait AutoconfigureTrait +{ + /** + * Sets whether or not instanceof conditionals should be prepended with a global set. + * + * @return $this + * + * @throws InvalidArgumentException when a parent is already set + */ + final public function autoconfigure(bool $autoconfigured = true): self + { + $this->definition->setAutoconfigured($autoconfigured); + + return $this; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php new file mode 100644 index 0000000..1286ba4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php @@ -0,0 +1,38 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; + +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Loader\Configurator\ReferenceConfigurator; + +trait FactoryTrait +{ + /** + * Sets a factory. + * + * @param string|array|ReferenceConfigurator $factory A PHP callable reference + * + * @return $this + */ + final public function factory($factory): self + { + if (\is_string($factory) && 1 === substr_count($factory, ':')) { + $factoryParts = explode(':', $factory); + + throw new InvalidArgumentException(sprintf('Invalid factory "%s": the "service:method" notation is not available when using PHP-based DI configuration. Use "[service(\'%s\'), \'%s\']" instead.', $factory, $factoryParts[0], $factoryParts[1])); + } + + $this->definition->setFactory(static::processValue($factory, true)); + + return $this; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php new file mode 100644 index 0000000..5f42aef --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; + +trait FileTrait +{ + /** + * Sets a file to require before creating the service. + * + * @return $this + */ + final public function file(string $file): self + { + $this->definition->setFile($file); + + return $this; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php new file mode 100644 index 0000000..37194e5 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php @@ -0,0 +1,46 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; + +use Symfony\Component\DependencyInjection\ChildDefinition; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; + +trait ParentTrait +{ + /** + * Sets the Definition to inherit from. + * + * @return $this + * + * @throws InvalidArgumentException when parent cannot be set + */ + final public function parent(string $parent): self + { + if (!$this->allowParent) { + throw new InvalidArgumentException(sprintf('A parent cannot be defined when either "_instanceof" or "_defaults" are also defined for service prototype "%s".', $this->id)); + } + + if ($this->definition instanceof ChildDefinition) { + $this->definition->setParent($parent); + } else { + // cast Definition to ChildDefinition + $definition = serialize($this->definition); + $definition = substr_replace($definition, '53', 2, 2); + $definition = substr_replace($definition, 'Child', 44, 0); + $definition = unserialize($definition); + + $this->definition = $definition->setParent($parent); + } + + return $this; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php new file mode 100644 index 0000000..10fdcfb --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php @@ -0,0 +1,27 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; + +trait PropertyTrait +{ + /** + * Sets a specific property. + * + * @return $this + */ + final public function property(string $name, $value): self + { + $this->definition->setProperty($name, static::processValue($value, true)); + + return $this; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/FileLoader.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/FileLoader.php new file mode 100644 index 0000000..f5f78e3 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/FileLoader.php @@ -0,0 +1,247 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader; + +use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException; +use Symfony\Component\Config\Exception\LoaderLoadException; +use Symfony\Component\Config\FileLocatorInterface; +use Symfony\Component\Config\Loader\FileLoader as BaseFileLoader; +use Symfony\Component\Config\Loader\Loader; +use Symfony\Component\Config\Resource\GlobResource; +use Symfony\Component\DependencyInjection\Attribute\When; +use Symfony\Component\DependencyInjection\ChildDefinition; +use Symfony\Component\DependencyInjection\Compiler\RegisterAutoconfigureAttributesPass; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; + +/** + * FileLoader is the abstract class used by all built-in loaders that are file based. + * + * @author Fabien Potencier + */ +abstract class FileLoader extends BaseFileLoader +{ + public const ANONYMOUS_ID_REGEXP = '/^\.\d+_[^~]*+~[._a-zA-Z\d]{7}$/'; + + protected $container; + protected $isLoadingInstanceof = false; + protected $instanceof = []; + protected $interfaces = []; + protected $singlyImplemented = []; + protected $autoRegisterAliasesForSinglyImplementedInterfaces = true; + + public function __construct(ContainerBuilder $container, FileLocatorInterface $locator, string $env = null) + { + $this->container = $container; + + parent::__construct($locator, $env); + } + + /** + * {@inheritdoc} + * + * @param bool|string $ignoreErrors Whether errors should be ignored; pass "not_found" to ignore only when the loaded resource is not found + */ + public function import($resource, string $type = null, $ignoreErrors = false, string $sourceResource = null, $exclude = null) + { + $args = \func_get_args(); + + if ($ignoreNotFound = 'not_found' === $ignoreErrors) { + $args[2] = false; + } elseif (!\is_bool($ignoreErrors)) { + throw new \TypeError(sprintf('Invalid argument $ignoreErrors provided to "%s::import()": boolean or "not_found" expected, "%s" given.', static::class, get_debug_type($ignoreErrors))); + } + + try { + return parent::import(...$args); + } catch (LoaderLoadException $e) { + if (!$ignoreNotFound || !($prev = $e->getPrevious()) instanceof FileLocatorFileNotFoundException) { + throw $e; + } + + foreach ($prev->getTrace() as $frame) { + if ('import' === ($frame['function'] ?? null) && is_a($frame['class'] ?? '', Loader::class, true)) { + break; + } + } + + if (__FILE__ !== $frame['file']) { + throw $e; + } + } + + return null; + } + + /** + * Registers a set of classes as services using PSR-4 for discovery. + * + * @param Definition $prototype A definition to use as template + * @param string $namespace The namespace prefix of classes in the scanned directory + * @param string $resource The directory to look for classes, glob-patterns allowed + * @param string|string[]|null $exclude A globbed path of files to exclude or an array of globbed paths of files to exclude + */ + public function registerClasses(Definition $prototype, string $namespace, string $resource, $exclude = null) + { + if (!str_ends_with($namespace, '\\')) { + throw new InvalidArgumentException(sprintf('Namespace prefix must end with a "\\": "%s".', $namespace)); + } + if (!preg_match('/^(?:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+\\\\)++$/', $namespace)) { + throw new InvalidArgumentException(sprintf('Namespace is not a valid PSR-4 prefix: "%s".', $namespace)); + } + + $autoconfigureAttributes = new RegisterAutoconfigureAttributesPass(); + $autoconfigureAttributes = $autoconfigureAttributes->accept($prototype) ? $autoconfigureAttributes : null; + $classes = $this->findClasses($namespace, $resource, (array) $exclude, $autoconfigureAttributes); + // prepare for deep cloning + $serializedPrototype = serialize($prototype); + + foreach ($classes as $class => $errorMessage) { + if (null === $errorMessage && $autoconfigureAttributes && $this->env) { + $r = $this->container->getReflectionClass($class); + $attribute = null; + foreach ($r->getAttributes(When::class) as $attribute) { + if ($this->env === $attribute->newInstance()->env) { + $attribute = null; + break; + } + } + if (null !== $attribute) { + continue; + } + } + + if (interface_exists($class, false)) { + $this->interfaces[] = $class; + } else { + $this->setDefinition($class, $definition = unserialize($serializedPrototype)); + if (null !== $errorMessage) { + $definition->addError($errorMessage); + + continue; + } + foreach (class_implements($class, false) as $interface) { + $this->singlyImplemented[$interface] = ($this->singlyImplemented[$interface] ?? $class) !== $class ? false : $class; + } + } + } + + if ($this->autoRegisterAliasesForSinglyImplementedInterfaces) { + $this->registerAliasesForSinglyImplementedInterfaces(); + } + } + + public function registerAliasesForSinglyImplementedInterfaces() + { + foreach ($this->interfaces as $interface) { + if (!empty($this->singlyImplemented[$interface]) && !$this->container->has($interface)) { + $this->container->setAlias($interface, $this->singlyImplemented[$interface]); + } + } + + $this->interfaces = $this->singlyImplemented = []; + } + + /** + * Registers a definition in the container with its instanceof-conditionals. + */ + protected function setDefinition(string $id, Definition $definition) + { + $this->container->removeBindings($id); + + if ($this->isLoadingInstanceof) { + if (!$definition instanceof ChildDefinition) { + throw new InvalidArgumentException(sprintf('Invalid type definition "%s": ChildDefinition expected, "%s" given.', $id, get_debug_type($definition))); + } + $this->instanceof[$id] = $definition; + } else { + $this->container->setDefinition($id, $definition->setInstanceofConditionals($this->instanceof)); + } + } + + private function findClasses(string $namespace, string $pattern, array $excludePatterns, ?RegisterAutoconfigureAttributesPass $autoconfigureAttributes): array + { + $parameterBag = $this->container->getParameterBag(); + + $excludePaths = []; + $excludePrefix = null; + $excludePatterns = $parameterBag->unescapeValue($parameterBag->resolveValue($excludePatterns)); + foreach ($excludePatterns as $excludePattern) { + foreach ($this->glob($excludePattern, true, $resource, true, true) as $path => $info) { + if (null === $excludePrefix) { + $excludePrefix = $resource->getPrefix(); + } + + // normalize Windows slashes and remove trailing slashes + $excludePaths[rtrim(str_replace('\\', '/', $path), '/')] = true; + } + } + + $pattern = $parameterBag->unescapeValue($parameterBag->resolveValue($pattern)); + $classes = []; + $extRegexp = '/\\.php$/'; + $prefixLen = null; + foreach ($this->glob($pattern, true, $resource, false, false, $excludePaths) as $path => $info) { + if (null === $prefixLen) { + $prefixLen = \strlen($resource->getPrefix()); + + if ($excludePrefix && !str_starts_with($excludePrefix, $resource->getPrefix())) { + throw new InvalidArgumentException(sprintf('Invalid "exclude" pattern when importing classes for "%s": make sure your "exclude" pattern (%s) is a subset of the "resource" pattern (%s).', $namespace, $excludePattern, $pattern)); + } + } + + if (isset($excludePaths[str_replace('\\', '/', $path)])) { + continue; + } + + if (!preg_match($extRegexp, $path, $m) || !$info->isReadable()) { + continue; + } + $class = $namespace.ltrim(str_replace('/', '\\', substr($path, $prefixLen, -\strlen($m[0]))), '\\'); + + if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)*+$/', $class)) { + continue; + } + + try { + $r = $this->container->getReflectionClass($class); + } catch (\ReflectionException $e) { + $classes[$class] = $e->getMessage(); + continue; + } + // check to make sure the expected class exists + if (!$r) { + throw new InvalidArgumentException(sprintf('Expected to find class "%s" in file "%s" while importing services from resource "%s", but it was not found! Check the namespace prefix used with the resource.', $class, $path, $pattern)); + } + + if ($r->isInstantiable() || $r->isInterface()) { + $classes[$class] = null; + } + + if ($autoconfigureAttributes && !$r->isInstantiable()) { + $autoconfigureAttributes->processClass($this->container, $r); + } + } + + // track only for new & removed files + if ($resource instanceof GlobResource) { + $this->container->addResource($resource); + } else { + foreach ($resource as $path) { + $this->container->fileExists($path, false); + } + } + + return $classes; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php new file mode 100644 index 0000000..3815b28 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php @@ -0,0 +1,211 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\Loader; + +use Symfony\Component\Config\Builder\ConfigBuilderGenerator; +use Symfony\Component\Config\Builder\ConfigBuilderGeneratorInterface; +use Symfony\Component\Config\Builder\ConfigBuilderInterface; +use Symfony\Component\Config\FileLocatorInterface; +use Symfony\Component\DependencyInjection\Attribute\When; +use Symfony\Component\DependencyInjection\Container; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface; +use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; +use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; + +/** + * PhpFileLoader loads service definitions from a PHP file. + * + * The PHP file is required and the $container variable can be + * used within the file to change the container. + * + * @author Fabien Potencier + */ +class PhpFileLoader extends FileLoader +{ + protected $autoRegisterAliasesForSinglyImplementedInterfaces = false; + private $generator; + + public function __construct(ContainerBuilder $container, FileLocatorInterface $locator, string $env = null, ConfigBuilderGeneratorInterface $generator = null) + { + parent::__construct($container, $locator, $env); + $this->generator = $generator; + } + + /** + * {@inheritdoc} + */ + public function load($resource, string $type = null) + { + // the container and loader variables are exposed to the included file below + $container = $this->container; + $loader = $this; + + $path = $this->locator->locate($resource); + $this->setCurrentDir(\dirname($path)); + $this->container->fileExists($path); + + // the closure forbids access to the private scope in the included file + $load = \Closure::bind(function ($path, $env) use ($container, $loader, $resource, $type) { + return include $path; + }, $this, ProtectedPhpFileLoader::class); + + try { + $callback = $load($path, $this->env); + + if (\is_object($callback) && \is_callable($callback)) { + $this->executeCallback($callback, new ContainerConfigurator($this->container, $this, $this->instanceof, $path, $resource, $this->env), $path); + } + } finally { + $this->instanceof = []; + $this->registerAliasesForSinglyImplementedInterfaces(); + } + + return null; + } + + /** + * {@inheritdoc} + */ + public function supports($resource, string $type = null) + { + if (!\is_string($resource)) { + return false; + } + + if (null === $type && 'php' === pathinfo($resource, \PATHINFO_EXTENSION)) { + return true; + } + + return 'php' === $type; + } + + /** + * Resolve the parameters to the $callback and execute it. + */ + private function executeCallback(callable $callback, ContainerConfigurator $containerConfigurator, string $path) + { + if (!$callback instanceof \Closure) { + $callback = \Closure::fromCallable($callback); + } + + $arguments = []; + $configBuilders = []; + $r = new \ReflectionFunction($callback); + + if (\PHP_VERSION_ID >= 80000) { + $attribute = null; + foreach ($r->getAttributes(When::class) as $attribute) { + if ($this->env === $attribute->newInstance()->env) { + $attribute = null; + break; + } + } + if (null !== $attribute) { + return; + } + } + + foreach ($r->getParameters() as $parameter) { + $reflectionType = $parameter->getType(); + if (!$reflectionType instanceof \ReflectionNamedType) { + throw new \InvalidArgumentException(sprintf('Could not resolve argument "$%s" for "%s". You must typehint it (for example with "%s" or "%s").', $parameter->getName(), $path, ContainerConfigurator::class, ContainerBuilder::class)); + } + $type = $reflectionType->getName(); + + switch ($type) { + case ContainerConfigurator::class: + $arguments[] = $containerConfigurator; + break; + case ContainerBuilder::class: + $arguments[] = $this->container; + break; + case FileLoader::class: + case self::class: + $arguments[] = $this; + break; + default: + try { + $configBuilder = $this->configBuilder($type); + } catch (InvalidArgumentException|\LogicException $e) { + throw new \InvalidArgumentException(sprintf('Could not resolve argument "%s" for "%s".', $type.' $'.$parameter->getName(), $path), 0, $e); + } + $configBuilders[] = $configBuilder; + $arguments[] = $configBuilder; + } + } + + // Force load ContainerConfigurator to make env(), param() etc available. + class_exists(ContainerConfigurator::class); + + $callback(...$arguments); + + /** @var ConfigBuilderInterface $configBuilder */ + foreach ($configBuilders as $configBuilder) { + $containerConfigurator->extension($configBuilder->getExtensionAlias(), $configBuilder->toArray()); + } + } + + /** + * @param string $namespace FQCN string for a class implementing ConfigBuilderInterface + */ + private function configBuilder(string $namespace): ConfigBuilderInterface + { + if (!class_exists(ConfigBuilderGenerator::class)) { + throw new \LogicException('You cannot use the config builder as the Config component is not installed. Try running "composer require symfony/config".'); + } + + if (null === $this->generator) { + throw new \LogicException('You cannot use the ConfigBuilders without providing a class implementing ConfigBuilderGeneratorInterface.'); + } + + // If class exists and implements ConfigBuilderInterface + if (class_exists($namespace) && is_subclass_of($namespace, ConfigBuilderInterface::class)) { + return new $namespace(); + } + + // If it does not start with Symfony\Config\ we dont know how to handle this + if ('Symfony\\Config\\' !== substr($namespace, 0, 15)) { + throw new InvalidArgumentException(sprintf('Could not find or generate class "%s".', $namespace)); + } + + // Try to get the extension alias + $alias = Container::underscore(substr($namespace, 15, -6)); + + if (false !== strpos($alias, '\\')) { + throw new InvalidArgumentException('You can only use "root" ConfigBuilders from "Symfony\\Config\\" namespace. Nested classes like "Symfony\\Config\\Framework\\CacheConfig" cannot be used.'); + } + + if (!$this->container->hasExtension($alias)) { + $extensions = array_filter(array_map(function (ExtensionInterface $ext) { return $ext->getAlias(); }, $this->container->getExtensions())); + throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s". Looked for namespace "%s", found "%s".', $namespace, $alias, $extensions ? implode('", "', $extensions) : 'none')); + } + + $extension = $this->container->getExtension($alias); + if (!$extension instanceof ConfigurationExtensionInterface) { + throw new \LogicException(sprintf('You cannot use the config builder for "%s" because the extension does not implement "%s".', $namespace, ConfigurationExtensionInterface::class)); + } + + $configuration = $extension->getConfiguration([], $this->container); + $loader = $this->generator->build($configuration); + + return $loader(); + } +} + +/** + * @internal + */ +final class ProtectedPhpFileLoader extends PhpFileLoader +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Parameter.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Parameter.php new file mode 100644 index 0000000..e182e12 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Parameter.php @@ -0,0 +1,35 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection; + +/** + * Parameter represents a parameter reference. + * + * @author Fabien Potencier + */ +class Parameter +{ + private $id; + + public function __construct(string $id) + { + $this->id = $id; + } + + /** + * @return string + */ + public function __toString() + { + return $this->id; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php new file mode 100644 index 0000000..67b8aee --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php @@ -0,0 +1,154 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\ParameterBag; + +use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; +use Symfony\Component\DependencyInjection\Exception\RuntimeException; + +/** + * @author Nicolas Grekas + */ +class EnvPlaceholderParameterBag extends ParameterBag +{ + private $envPlaceholderUniquePrefix; + private $envPlaceholders = []; + private $unusedEnvPlaceholders = []; + private $providedTypes = []; + + private static $counter = 0; + + /** + * {@inheritdoc} + */ + public function get(string $name) + { + if (str_starts_with($name, 'env(') && str_ends_with($name, ')') && 'env()' !== $name) { + $env = substr($name, 4, -1); + + if (isset($this->envPlaceholders[$env])) { + foreach ($this->envPlaceholders[$env] as $placeholder) { + return $placeholder; // return first result + } + } + if (isset($this->unusedEnvPlaceholders[$env])) { + foreach ($this->unusedEnvPlaceholders[$env] as $placeholder) { + return $placeholder; // return first result + } + } + if (!preg_match('/^(?:[-.\w]*+:)*+\w++$/', $env)) { + throw new InvalidArgumentException(sprintf('Invalid %s name: only "word" characters are allowed.', $name)); + } + if ($this->has($name) && null !== ($defaultValue = parent::get($name)) && !\is_string($defaultValue)) { + throw new RuntimeException(sprintf('The default value of an env() parameter must be a string or null, but "%s" given to "%s".', get_debug_type($defaultValue), $name)); + } + + $uniqueName = md5($name.'_'.self::$counter++); + $placeholder = sprintf('%s_%s_%s', $this->getEnvPlaceholderUniquePrefix(), strtr($env, ':-.', '___'), $uniqueName); + $this->envPlaceholders[$env][$placeholder] = $placeholder; + + return $placeholder; + } + + return parent::get($name); + } + + /** + * Gets the common env placeholder prefix for env vars created by this bag. + */ + public function getEnvPlaceholderUniquePrefix(): string + { + if (null === $this->envPlaceholderUniquePrefix) { + $reproducibleEntropy = unserialize(serialize($this->parameters)); + array_walk_recursive($reproducibleEntropy, function (&$v) { $v = null; }); + $this->envPlaceholderUniquePrefix = 'env_'.substr(md5(serialize($reproducibleEntropy)), -16); + } + + return $this->envPlaceholderUniquePrefix; + } + + /** + * Returns the map of env vars used in the resolved parameter values to their placeholders. + * + * @return string[][] A map of env var names to their placeholders + */ + public function getEnvPlaceholders() + { + return $this->envPlaceholders; + } + + public function getUnusedEnvPlaceholders(): array + { + return $this->unusedEnvPlaceholders; + } + + public function clearUnusedEnvPlaceholders() + { + $this->unusedEnvPlaceholders = []; + } + + /** + * Merges the env placeholders of another EnvPlaceholderParameterBag. + */ + public function mergeEnvPlaceholders(self $bag) + { + if ($newPlaceholders = $bag->getEnvPlaceholders()) { + $this->envPlaceholders += $newPlaceholders; + + foreach ($newPlaceholders as $env => $placeholders) { + $this->envPlaceholders[$env] += $placeholders; + } + } + + if ($newUnusedPlaceholders = $bag->getUnusedEnvPlaceholders()) { + $this->unusedEnvPlaceholders += $newUnusedPlaceholders; + + foreach ($newUnusedPlaceholders as $env => $placeholders) { + $this->unusedEnvPlaceholders[$env] += $placeholders; + } + } + } + + /** + * Maps env prefixes to their corresponding PHP types. + */ + public function setProvidedTypes(array $providedTypes) + { + $this->providedTypes = $providedTypes; + } + + /** + * Gets the PHP types corresponding to env() parameter prefixes. + * + * @return string[][] + */ + public function getProvidedTypes() + { + return $this->providedTypes; + } + + /** + * {@inheritdoc} + */ + public function resolve() + { + if ($this->resolved) { + return; + } + parent::resolve(); + + foreach ($this->envPlaceholders as $env => $placeholders) { + if ($this->has($name = "env($env)") && null !== ($default = $this->parameters[$name]) && !\is_string($default)) { + throw new RuntimeException(sprintf('The default value of env parameter "%s" must be a string or null, "%s" given.', $env, get_debug_type($default))); + } + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php new file mode 100644 index 0000000..808a0fa --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php @@ -0,0 +1,106 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection\ParameterBag; + +use Symfony\Component\DependencyInjection\Exception\LogicException; +use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; + +/** + * ParameterBagInterface is the interface implemented by objects that manage service container parameters. + * + * @author Fabien Potencier + */ +interface ParameterBagInterface +{ + /** + * Clears all parameters. + * + * @throws LogicException if the ParameterBagInterface cannot be cleared + */ + public function clear(); + + /** + * Adds parameters to the service container parameters. + * + * @throws LogicException if the parameter cannot be added + */ + public function add(array $parameters); + + /** + * Gets the service container parameters. + * + * @return array + */ + public function all(); + + /** + * Gets a service container parameter. + * + * @return array|bool|string|int|float|\UnitEnum|null + * + * @throws ParameterNotFoundException if the parameter is not defined + */ + public function get(string $name); + + /** + * Removes a parameter. + */ + public function remove(string $name); + + /** + * Sets a service container parameter. + * + * @param array|bool|string|int|float|\UnitEnum|null $value The parameter value + * + * @throws LogicException if the parameter cannot be set + */ + public function set(string $name, $value); + + /** + * Returns true if a parameter name is defined. + * + * @return bool + */ + public function has(string $name); + + /** + * Replaces parameter placeholders (%name%) by their values for all parameters. + */ + public function resolve(); + + /** + * Replaces parameter placeholders (%name%) by their values. + * + * @param mixed $value A value + * + * @throws ParameterNotFoundException if a placeholder references a parameter that does not exist + */ + public function resolveValue($value); + + /** + * Escape parameter placeholders %. + * + * @param mixed $value + * + * @return mixed + */ + public function escapeValue($value); + + /** + * Unescape parameter placeholders %. + * + * @param mixed $value + * + * @return mixed + */ + public function unescapeValue($value); +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ReverseContainer.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ReverseContainer.php new file mode 100644 index 0000000..280e9e2 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ReverseContainer.php @@ -0,0 +1,81 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection; + +use Psr\Container\ContainerInterface; +use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; + +/** + * Turns public and "container.reversible" services back to their ids. + * + * @author Nicolas Grekas + */ +final class ReverseContainer +{ + private $serviceContainer; + private $reversibleLocator; + private $tagName; + private $getServiceId; + + public function __construct(Container $serviceContainer, ContainerInterface $reversibleLocator, string $tagName = 'container.reversible') + { + $this->serviceContainer = $serviceContainer; + $this->reversibleLocator = $reversibleLocator; + $this->tagName = $tagName; + $this->getServiceId = \Closure::bind(function (object $service): ?string { + return array_search($service, $this->services, true) ?: array_search($service, $this->privates, true) ?: null; + }, $serviceContainer, Container::class); + } + + /** + * Returns the id of the passed object when it exists as a service. + * + * To be reversible, services need to be either public or be tagged with "container.reversible". + */ + public function getId(object $service): ?string + { + if ($this->serviceContainer === $service) { + return 'service_container'; + } + + if (null === $id = ($this->getServiceId)($service)) { + return null; + } + + if ($this->serviceContainer->has($id) || $this->reversibleLocator->has($id)) { + return $id; + } + + return null; + } + + /** + * @throws ServiceNotFoundException When the service is not reversible + */ + public function getService(string $id): object + { + if ($this->serviceContainer->has($id)) { + return $this->serviceContainer->get($id); + } + + if ($this->reversibleLocator->has($id)) { + return $this->reversibleLocator->get($id); + } + + if (isset($this->serviceContainer->getRemovedIds()[$id])) { + throw new ServiceNotFoundException($id, null, null, [], sprintf('The "%s" service is private and cannot be accessed by reference. You should either make it public, or tag it as "%s".', $id, $this->tagName)); + } + + // will throw a ServiceNotFoundException + $this->serviceContainer->get($id); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Variable.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Variable.php new file mode 100644 index 0000000..21d33eb --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Variable.php @@ -0,0 +1,43 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\DependencyInjection; + +/** + * Represents a variable. + * + * $var = new Variable('a'); + * + * will be dumped as + * + * $a + * + * by the PHP dumper. + * + * @author Johannes M. Schmitt + */ +class Variable +{ + private $name; + + public function __construct(string $name) + { + $this->name = $name; + } + + /** + * @return string + */ + public function __toString() + { + return $this->name; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/composer.json new file mode 100644 index 0000000..cb891c7 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/composer.json @@ -0,0 +1,56 @@ +{ + "name": "symfony/dependency-injection", + "type": "library", + "description": "Allows you to standardize and centralize the way objects are constructed in your application", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-php80": "^1.16", + "symfony/polyfill-php81": "^1.22", + "symfony/service-contracts": "^1.1.6|^2" + }, + "require-dev": { + "symfony/yaml": "^4.4.26|^5.0|^6.0", + "symfony/config": "^5.3|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0" + }, + "suggest": { + "symfony/yaml": "", + "symfony/config": "", + "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", + "symfony/expression-language": "For using expressions in service container configuration", + "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them" + }, + "conflict": { + "ext-psr": "<1.1|>=2", + "symfony/config": "<5.3", + "symfony/finder": "<4.4", + "symfony/proxy-manager-bridge": "<4.4", + "symfony/yaml": "<4.4.26" + }, + "provide": { + "psr/container-implementation": "1.0", + "symfony/service-implementation": "1.0|2.0" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\DependencyInjection\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev" +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/CHANGELOG.md new file mode 100644 index 0000000..7932e26 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/CHANGELOG.md @@ -0,0 +1,5 @@ +CHANGELOG +========= + +The changelog is maintained for all Symfony contracts at the following URL: +https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/LICENSE b/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/LICENSE new file mode 100644 index 0000000..406242f --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2020-2022 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/composer.json new file mode 100644 index 0000000..cc7cc12 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/composer.json @@ -0,0 +1,35 @@ +{ + "name": "symfony/deprecation-contracts", + "type": "library", + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Compiler.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Compiler.php new file mode 100644 index 0000000..e8a064d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Compiler.php @@ -0,0 +1,147 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\ExpressionLanguage; + +use Symfony\Contracts\Service\ResetInterface; + +/** + * Compiles a node to PHP code. + * + * @author Fabien Potencier + */ +class Compiler implements ResetInterface +{ + private $source; + private $functions; + + public function __construct(array $functions) + { + $this->functions = $functions; + } + + public function getFunction(string $name) + { + return $this->functions[$name]; + } + + /** + * Gets the current PHP code after compilation. + * + * @return string + */ + public function getSource() + { + return $this->source; + } + + /** + * @return $this + */ + public function reset() + { + $this->source = ''; + + return $this; + } + + /** + * Compiles a node. + * + * @return $this + */ + public function compile(Node\Node $node) + { + $node->compile($this); + + return $this; + } + + public function subcompile(Node\Node $node) + { + $current = $this->source; + $this->source = ''; + + $node->compile($this); + + $source = $this->source; + $this->source = $current; + + return $source; + } + + /** + * Adds a raw string to the compiled code. + * + * @return $this + */ + public function raw(string $string) + { + $this->source .= $string; + + return $this; + } + + /** + * Adds a quoted string to the compiled code. + * + * @return $this + */ + public function string(string $value) + { + $this->source .= sprintf('"%s"', addcslashes($value, "\0\t\"\$\\")); + + return $this; + } + + /** + * Returns a PHP representation of a given value. + * + * @param mixed $value The value to convert + * + * @return $this + */ + public function repr($value) + { + if (\is_int($value) || \is_float($value)) { + if (false !== $locale = setlocale(\LC_NUMERIC, 0)) { + setlocale(\LC_NUMERIC, 'C'); + } + + $this->raw($value); + + if (false !== $locale) { + setlocale(\LC_NUMERIC, $locale); + } + } elseif (null === $value) { + $this->raw('null'); + } elseif (\is_bool($value)) { + $this->raw($value ? 'true' : 'false'); + } elseif (\is_array($value)) { + $this->raw('['); + $first = true; + foreach ($value as $key => $value) { + if (!$first) { + $this->raw(', '); + } + $first = false; + $this->repr($key); + $this->raw(' => '); + $this->repr($value); + } + $this->raw(']'); + } else { + $this->string($value); + } + + return $this; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Expression.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Expression.php new file mode 100644 index 0000000..6b81478 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Expression.php @@ -0,0 +1,37 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\ExpressionLanguage; + +/** + * Represents an expression. + * + * @author Fabien Potencier + */ +class Expression +{ + protected $expression; + + public function __construct(string $expression) + { + $this->expression = $expression; + } + + /** + * Gets the expression. + * + * @return string + */ + public function __toString() + { + return $this->expression; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/ExpressionLanguage.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/ExpressionLanguage.php new file mode 100644 index 0000000..001f49d --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/ExpressionLanguage.php @@ -0,0 +1,182 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\ExpressionLanguage; + +use Psr\Cache\CacheItemPoolInterface; +use Symfony\Component\Cache\Adapter\ArrayAdapter; + +// Help opcache.preload discover always-needed symbols +class_exists(ParsedExpression::class); + +/** + * Allows to compile and evaluate expressions written in your own DSL. + * + * @author Fabien Potencier + */ +class ExpressionLanguage +{ + private $cache; + private $lexer; + private $parser; + private $compiler; + + protected $functions = []; + + /** + * @param ExpressionFunctionProviderInterface[] $providers + */ + public function __construct(CacheItemPoolInterface $cache = null, array $providers = []) + { + $this->cache = $cache ?? new ArrayAdapter(); + $this->registerFunctions(); + foreach ($providers as $provider) { + $this->registerProvider($provider); + } + } + + /** + * Compiles an expression source code. + * + * @param Expression|string $expression The expression to compile + * + * @return string + */ + public function compile($expression, array $names = []) + { + return $this->getCompiler()->compile($this->parse($expression, $names)->getNodes())->getSource(); + } + + /** + * Evaluate an expression. + * + * @param Expression|string $expression The expression to compile + * + * @return mixed + */ + public function evaluate($expression, array $values = []) + { + return $this->parse($expression, array_keys($values))->getNodes()->evaluate($this->functions, $values); + } + + /** + * Parses an expression. + * + * @param Expression|string $expression The expression to parse + * + * @return ParsedExpression + */ + public function parse($expression, array $names) + { + if ($expression instanceof ParsedExpression) { + return $expression; + } + + asort($names); + $cacheKeyItems = []; + + foreach ($names as $nameKey => $name) { + $cacheKeyItems[] = \is_int($nameKey) ? $name : $nameKey.':'.$name; + } + + $cacheItem = $this->cache->getItem(rawurlencode($expression.'//'.implode('|', $cacheKeyItems))); + + if (null === $parsedExpression = $cacheItem->get()) { + $nodes = $this->getParser()->parse($this->getLexer()->tokenize((string) $expression), $names); + $parsedExpression = new ParsedExpression((string) $expression, $nodes); + + $cacheItem->set($parsedExpression); + $this->cache->save($cacheItem); + } + + return $parsedExpression; + } + + /** + * Validates the syntax of an expression. + * + * @param Expression|string $expression The expression to validate + * @param array|null $names The list of acceptable variable names in the expression, or null to accept any names + * + * @throws SyntaxError When the passed expression is invalid + */ + public function lint($expression, ?array $names): void + { + if ($expression instanceof ParsedExpression) { + return; + } + + $this->getParser()->lint($this->getLexer()->tokenize((string) $expression), $names); + } + + /** + * Registers a function. + * + * @param callable $compiler A callable able to compile the function + * @param callable $evaluator A callable able to evaluate the function + * + * @throws \LogicException when registering a function after calling evaluate(), compile() or parse() + * + * @see ExpressionFunction + */ + public function register(string $name, callable $compiler, callable $evaluator) + { + if (null !== $this->parser) { + throw new \LogicException('Registering functions after calling evaluate(), compile() or parse() is not supported.'); + } + + $this->functions[$name] = ['compiler' => $compiler, 'evaluator' => $evaluator]; + } + + public function addFunction(ExpressionFunction $function) + { + $this->register($function->getName(), $function->getCompiler(), $function->getEvaluator()); + } + + public function registerProvider(ExpressionFunctionProviderInterface $provider) + { + foreach ($provider->getFunctions() as $function) { + $this->addFunction($function); + } + } + + protected function registerFunctions() + { + $this->addFunction(ExpressionFunction::fromPhp('constant')); + } + + private function getLexer(): Lexer + { + if (null === $this->lexer) { + $this->lexer = new Lexer(); + } + + return $this->lexer; + } + + private function getParser(): Parser + { + if (null === $this->parser) { + $this->parser = new Parser($this->functions); + } + + return $this->parser; + } + + private function getCompiler(): Compiler + { + if (null === $this->compiler) { + $this->compiler = new Compiler($this->functions); + } + + return $this->compiler->reset(); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ArgumentsNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ArgumentsNode.php new file mode 100644 index 0000000..e9849a4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ArgumentsNode.php @@ -0,0 +1,40 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\ExpressionLanguage\Node; + +use Symfony\Component\ExpressionLanguage\Compiler; + +/** + * @author Fabien Potencier + * + * @internal + */ +class ArgumentsNode extends ArrayNode +{ + public function compile(Compiler $compiler) + { + $this->compileArguments($compiler, false); + } + + public function toArray() + { + $array = []; + + foreach ($this->getKeyValuePairs() as $pair) { + $array[] = $pair['value']; + $array[] = ', '; + } + array_pop($array); + + return $array; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ConstantNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ConstantNode.php new file mode 100644 index 0000000..b86abd4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ConstantNode.php @@ -0,0 +1,81 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\ExpressionLanguage\Node; + +use Symfony\Component\ExpressionLanguage\Compiler; + +/** + * @author Fabien Potencier + * + * @internal + */ +class ConstantNode extends Node +{ + private $isIdentifier; + + public function __construct($value, bool $isIdentifier = false) + { + $this->isIdentifier = $isIdentifier; + parent::__construct( + [], + ['value' => $value] + ); + } + + public function compile(Compiler $compiler) + { + $compiler->repr($this->attributes['value']); + } + + public function evaluate(array $functions, array $values) + { + return $this->attributes['value']; + } + + public function toArray() + { + $array = []; + $value = $this->attributes['value']; + + if ($this->isIdentifier) { + $array[] = $value; + } elseif (true === $value) { + $array[] = 'true'; + } elseif (false === $value) { + $array[] = 'false'; + } elseif (null === $value) { + $array[] = 'null'; + } elseif (is_numeric($value)) { + $array[] = $value; + } elseif (!\is_array($value)) { + $array[] = $this->dumpString($value); + } elseif ($this->isHash($value)) { + foreach ($value as $k => $v) { + $array[] = ', '; + $array[] = new self($k); + $array[] = ': '; + $array[] = new self($v); + } + $array[0] = '{'; + $array[] = '}'; + } else { + foreach ($value as $v) { + $array[] = ', '; + $array[] = new self($v); + } + $array[0] = '['; + $array[] = ']'; + } + + return $array; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/NameNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/NameNode.php new file mode 100644 index 0000000..e017e96 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/NameNode.php @@ -0,0 +1,45 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\ExpressionLanguage\Node; + +use Symfony\Component\ExpressionLanguage\Compiler; + +/** + * @author Fabien Potencier + * + * @internal + */ +class NameNode extends Node +{ + public function __construct(string $name) + { + parent::__construct( + [], + ['name' => $name] + ); + } + + public function compile(Compiler $compiler) + { + $compiler->raw('$'.$this->attributes['name']); + } + + public function evaluate(array $functions, array $values) + { + return $values[$this->attributes['name']]; + } + + public function toArray() + { + return [$this->attributes['name']]; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/UnaryNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/UnaryNode.php new file mode 100644 index 0000000..9bd9d9b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/UnaryNode.php @@ -0,0 +1,66 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\ExpressionLanguage\Node; + +use Symfony\Component\ExpressionLanguage\Compiler; + +/** + * @author Fabien Potencier + * + * @internal + */ +class UnaryNode extends Node +{ + private const OPERATORS = [ + '!' => '!', + 'not' => '!', + '+' => '+', + '-' => '-', + ]; + + public function __construct(string $operator, Node $node) + { + parent::__construct( + ['node' => $node], + ['operator' => $operator] + ); + } + + public function compile(Compiler $compiler) + { + $compiler + ->raw('(') + ->raw(self::OPERATORS[$this->attributes['operator']]) + ->compile($this->nodes['node']) + ->raw(')') + ; + } + + public function evaluate(array $functions, array $values) + { + $value = $this->nodes['node']->evaluate($functions, $values); + switch ($this->attributes['operator']) { + case 'not': + case '!': + return !$value; + case '-': + return -$value; + } + + return $value; + } + + public function toArray(): array + { + return ['(', $this->attributes['operator'].' ', $this->nodes['node'], ')']; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/composer.json new file mode 100644 index 0000000..9319974 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/composer.json @@ -0,0 +1,30 @@ +{ + "name": "symfony/expression-language", + "type": "library", + "description": "Provides an engine that can compile and evaluate expressions", + "keywords": [], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.2.5", + "symfony/cache": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "autoload": { + "psr-4": { "Symfony\\Component\\ExpressionLanguage\\": "" }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "minimum-stability": "dev" +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/CHANGELOG.md new file mode 100644 index 0000000..fcb7170 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/CHANGELOG.md @@ -0,0 +1,82 @@ +CHANGELOG +========= + +5.4 +--- + + * Add `Path` class + * Add `$lock` argument to `Filesystem::appendToFile()` + +5.0.0 +----- + + * `Filesystem::dumpFile()` and `appendToFile()` don't accept arrays anymore + +4.4.0 +----- + + * support for passing a `null` value to `Filesystem::isAbsolutePath()` is deprecated and will be removed in 5.0 + * `tempnam()` now accepts a third argument `$suffix`. + +4.3.0 +----- + + * support for passing arrays to `Filesystem::dumpFile()` is deprecated and will be removed in 5.0 + * support for passing arrays to `Filesystem::appendToFile()` is deprecated and will be removed in 5.0 + +4.0.0 +----- + + * removed `LockHandler` + * Support for passing relative paths to `Filesystem::makePathRelative()` has been removed. + +3.4.0 +----- + + * support for passing relative paths to `Filesystem::makePathRelative()` is deprecated and will be removed in 4.0 + +3.3.0 +----- + + * added `appendToFile()` to append contents to existing files + +3.2.0 +----- + + * added `readlink()` as a platform independent method to read links + +3.0.0 +----- + + * removed `$mode` argument from `Filesystem::dumpFile()` + +2.8.0 +----- + + * added tempnam() a stream aware version of PHP's native tempnam() + +2.6.0 +----- + + * added LockHandler + +2.3.12 +------ + + * deprecated dumpFile() file mode argument. + +2.3.0 +----- + + * added the dumpFile() method to atomically write files + +2.2.0 +----- + + * added a delete option for the mirror() method + +2.1.0 +----- + + * 24eb396 : BC Break : mkdir() function now throws exception in case of failure instead of returning Boolean value + * created the component diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/ExceptionInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/ExceptionInterface.php new file mode 100644 index 0000000..fc438d9 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/ExceptionInterface.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Filesystem\Exception; + +/** + * Exception interface for all exceptions thrown by the component. + * + * @author Romain Neutron + */ +interface ExceptionInterface extends \Throwable +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/FileNotFoundException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/FileNotFoundException.php new file mode 100644 index 0000000..48b6408 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/FileNotFoundException.php @@ -0,0 +1,34 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Filesystem\Exception; + +/** + * Exception class thrown when a file couldn't be found. + * + * @author Fabien Potencier + * @author Christian Gärtner + */ +class FileNotFoundException extends IOException +{ + public function __construct(string $message = null, int $code = 0, \Throwable $previous = null, string $path = null) + { + if (null === $message) { + if (null === $path) { + $message = 'File could not be found.'; + } else { + $message = sprintf('File "%s" could not be found.', $path); + } + } + + parent::__construct($message, $code, $previous, $path); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/RuntimeException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/RuntimeException.php new file mode 100644 index 0000000..a7512dc --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/RuntimeException.php @@ -0,0 +1,19 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\Filesystem\Exception; + +/** + * @author Théo Fidry + */ +class RuntimeException extends \RuntimeException implements ExceptionInterface +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Mbstring.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Mbstring.php new file mode 100644 index 0000000..b65c54a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -0,0 +1,873 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Mbstring; + +/** + * Partial mbstring implementation in PHP, iconv based, UTF-8 centric. + * + * Implemented: + * - mb_chr - Returns a specific character from its Unicode code point + * - mb_convert_encoding - Convert character encoding + * - mb_convert_variables - Convert character code in variable(s) + * - mb_decode_mimeheader - Decode string in MIME header field + * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED + * - mb_decode_numericentity - Decode HTML numeric string reference to character + * - mb_encode_numericentity - Encode character to HTML numeric string reference + * - mb_convert_case - Perform case folding on a string + * - mb_detect_encoding - Detect character encoding + * - mb_get_info - Get internal settings of mbstring + * - mb_http_input - Detect HTTP input character encoding + * - mb_http_output - Set/Get HTTP output character encoding + * - mb_internal_encoding - Set/Get internal character encoding + * - mb_list_encodings - Returns an array of all supported encodings + * - mb_ord - Returns the Unicode code point of a character + * - mb_output_handler - Callback function converts character encoding in output buffer + * - mb_scrub - Replaces ill-formed byte sequences with substitute characters + * - mb_strlen - Get string length + * - mb_strpos - Find position of first occurrence of string in a string + * - mb_strrpos - Find position of last occurrence of a string in a string + * - mb_str_split - Convert a string to an array + * - mb_strtolower - Make a string lowercase + * - mb_strtoupper - Make a string uppercase + * - mb_substitute_character - Set/Get substitution character + * - mb_substr - Get part of string + * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive + * - mb_stristr - Finds first occurrence of a string within another, case insensitive + * - mb_strrchr - Finds the last occurrence of a character in a string within another + * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive + * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive + * - mb_strstr - Finds first occurrence of a string within another + * - mb_strwidth - Return width of string + * - mb_substr_count - Count the number of substring occurrences + * + * Not implemented: + * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) + * - mb_ereg_* - Regular expression with multibyte support + * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable + * - mb_preferred_mime_name - Get MIME charset string + * - mb_regex_encoding - Returns current encoding for multibyte regex as string + * - mb_regex_set_options - Set/Get the default options for mbregex functions + * - mb_send_mail - Send encoded mail + * - mb_split - Split multibyte string using regular expression + * - mb_strcut - Get part of string + * - mb_strimwidth - Get truncated string with specified width + * + * @author Nicolas Grekas + * + * @internal + */ +final class Mbstring +{ + public const MB_CASE_FOLD = \PHP_INT_MAX; + + private const CASE_FOLD = [ + ['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"], + ['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'], + ]; + + private static $encodingList = ['ASCII', 'UTF-8']; + private static $language = 'neutral'; + private static $internalEncoding = 'UTF-8'; + + public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) + { + if (\is_array($fromEncoding) || ($fromEncoding !== null && false !== strpos($fromEncoding, ','))) { + $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); + } else { + $fromEncoding = self::getEncoding($fromEncoding); + } + + $toEncoding = self::getEncoding($toEncoding); + + if ('BASE64' === $fromEncoding) { + $s = base64_decode($s); + $fromEncoding = $toEncoding; + } + + if ('BASE64' === $toEncoding) { + return base64_encode($s); + } + + if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) { + if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) { + $fromEncoding = 'Windows-1252'; + } + if ('UTF-8' !== $fromEncoding) { + $s = \iconv($fromEncoding, 'UTF-8//IGNORE', $s); + } + + return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s); + } + + if ('HTML-ENTITIES' === $fromEncoding) { + $s = html_entity_decode($s, \ENT_COMPAT, 'UTF-8'); + $fromEncoding = 'UTF-8'; + } + + return \iconv($fromEncoding, $toEncoding.'//IGNORE', $s); + } + + public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars) + { + $ok = true; + array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) { + if (false === $v = self::mb_convert_encoding($v, $toEncoding, $fromEncoding)) { + $ok = false; + } + }); + + return $ok ? $fromEncoding : false; + } + + public static function mb_decode_mimeheader($s) + { + return \iconv_mime_decode($s, 2, self::$internalEncoding); + } + + public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) + { + trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', \E_USER_WARNING); + } + + public static function mb_decode_numericentity($s, $convmap, $encoding = null) + { + if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { + trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { + return false; + } + + if (null !== $encoding && !is_scalar($encoding)) { + trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return ''; // Instead of null (cf. mb_encode_numericentity). + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $cnt = floor(\count($convmap) / 4) * 4; + + for ($i = 0; $i < $cnt; $i += 4) { + // collector_decode_htmlnumericentity ignores $convmap[$i + 3] + $convmap[$i] += $convmap[$i + 2]; + $convmap[$i + 1] += $convmap[$i + 2]; + } + + $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) { + $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; + for ($i = 0; $i < $cnt; $i += 4) { + if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { + return self::mb_chr($c - $convmap[$i + 2]); + } + } + + return $m[0]; + }, $s); + + if (null === $encoding) { + return $s; + } + + return \iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) + { + if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { + trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { + return false; + } + + if (null !== $encoding && !is_scalar($encoding)) { + trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); + + return null; // Instead of '' (cf. mb_decode_numericentity). + } + + if (null !== $is_hex && !is_scalar($is_hex)) { + trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING); + + return null; + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + } + + static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; + + $cnt = floor(\count($convmap) / 4) * 4; + $i = 0; + $len = \strlen($s); + $result = ''; + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + $c = self::mb_ord($uchr); + + for ($j = 0; $j < $cnt; $j += 4) { + if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { + $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; + $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; + continue 2; + } + } + $result .= $uchr; + } + + if (null === $encoding) { + return $result; + } + + return \iconv('UTF-8', $encoding.'//IGNORE', $result); + } + + public static function mb_convert_case($s, $mode, $encoding = null) + { + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + } + + if (\MB_CASE_TITLE == $mode) { + static $titleRegexp = null; + if (null === $titleRegexp) { + $titleRegexp = self::getData('titleCaseRegexp'); + } + $s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s); + } else { + if (\MB_CASE_UPPER == $mode) { + static $upper = null; + if (null === $upper) { + $upper = self::getData('upperCase'); + } + $map = $upper; + } else { + if (self::MB_CASE_FOLD === $mode) { + $s = str_replace(self::CASE_FOLD[0], self::CASE_FOLD[1], $s); + } + + static $lower = null; + if (null === $lower) { + $lower = self::getData('lowerCase'); + } + $map = $lower; + } + + static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; + + $i = 0; + $len = \strlen($s); + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + + if (isset($map[$uchr])) { + $uchr = $map[$uchr]; + $nlen = \strlen($uchr); + + if ($nlen == $ulen) { + $nlen = $i; + do { + $s[--$nlen] = $uchr[--$ulen]; + } while ($ulen); + } else { + $s = substr_replace($s, $uchr, $i - $ulen, $ulen); + $len += $nlen - $ulen; + $i += $nlen - $ulen; + } + } + } + } + + if (null === $encoding) { + return $s; + } + + return \iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_internal_encoding($encoding = null) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + $normalizedEncoding = self::getEncoding($encoding); + + if ('UTF-8' === $normalizedEncoding || false !== @\iconv($normalizedEncoding, $normalizedEncoding, ' ')) { + self::$internalEncoding = $normalizedEncoding; + + return true; + } + + if (80000 > \PHP_VERSION_ID) { + return false; + } + + throw new \ValueError(sprintf('Argument #1 ($encoding) must be a valid encoding, "%s" given', $encoding)); + } + + public static function mb_language($lang = null) + { + if (null === $lang) { + return self::$language; + } + + switch ($normalizedLang = strtolower($lang)) { + case 'uni': + case 'neutral': + self::$language = $normalizedLang; + + return true; + } + + if (80000 > \PHP_VERSION_ID) { + return false; + } + + throw new \ValueError(sprintf('Argument #1 ($language) must be a valid language, "%s" given', $lang)); + } + + public static function mb_list_encodings() + { + return ['UTF-8']; + } + + public static function mb_encoding_aliases($encoding) + { + switch (strtoupper($encoding)) { + case 'UTF8': + case 'UTF-8': + return ['utf8']; + } + + return false; + } + + public static function mb_check_encoding($var = null, $encoding = null) + { + if (null === $encoding) { + if (null === $var) { + return false; + } + $encoding = self::$internalEncoding; + } + + return self::mb_detect_encoding($var, [$encoding]) || false !== @\iconv($encoding, $encoding, $var); + } + + public static function mb_detect_encoding($str, $encodingList = null, $strict = false) + { + if (null === $encodingList) { + $encodingList = self::$encodingList; + } else { + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + } + + foreach ($encodingList as $enc) { + switch ($enc) { + case 'ASCII': + if (!preg_match('/[\x80-\xFF]/', $str)) { + return $enc; + } + break; + + case 'UTF8': + case 'UTF-8': + if (preg_match('//u', $str)) { + return 'UTF-8'; + } + break; + + default: + if (0 === strncmp($enc, 'ISO-8859-', 9)) { + return $enc; + } + } + } + + return false; + } + + public static function mb_detect_order($encodingList = null) + { + if (null === $encodingList) { + return self::$encodingList; + } + + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + + foreach ($encodingList as $enc) { + switch ($enc) { + default: + if (strncmp($enc, 'ISO-8859-', 9)) { + return false; + } + // no break + case 'ASCII': + case 'UTF8': + case 'UTF-8': + } + } + + self::$encodingList = $encodingList; + + return true; + } + + public static function mb_strlen($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return \strlen($s); + } + + return @\iconv_strlen($s, $encoding); + } + + public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strpos($haystack, $needle, $offset); + } + + $needle = (string) $needle; + if ('' === $needle) { + if (80000 > \PHP_VERSION_ID) { + trigger_error(__METHOD__.': Empty delimiter', \E_USER_WARNING); + + return false; + } + + return 0; + } + + return \iconv_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strrpos($haystack, $needle, $offset); + } + + if ($offset != (int) $offset) { + $offset = 0; + } elseif ($offset = (int) $offset) { + if ($offset < 0) { + if (0 > $offset += self::mb_strlen($needle)) { + $haystack = self::mb_substr($haystack, 0, $offset, $encoding); + } + $offset = 0; + } else { + $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); + } + } + + $pos = '' !== $needle || 80000 > \PHP_VERSION_ID + ? \iconv_strrpos($haystack, $needle, $encoding) + : self::mb_strlen($haystack, $encoding); + + return false !== $pos ? $offset + $pos : false; + } + + public static function mb_str_split($string, $split_length = 1, $encoding = null) + { + if (null !== $string && !is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) { + trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING); + + return null; + } + + if (1 > $split_length = (int) $split_length) { + if (80000 > \PHP_VERSION_ID) { + trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING); + return false; + } + + throw new \ValueError('Argument #2 ($length) must be greater than 0'); + } + + if (null === $encoding) { + $encoding = mb_internal_encoding(); + } + + if ('UTF-8' === $encoding = self::getEncoding($encoding)) { + $rx = '/('; + while (65535 < $split_length) { + $rx .= '.{65535}'; + $split_length -= 65535; + } + $rx .= '.{'.$split_length.'})/us'; + + return preg_split($rx, $string, null, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY); + } + + $result = []; + $length = mb_strlen($string, $encoding); + + for ($i = 0; $i < $length; $i += $split_length) { + $result[] = mb_substr($string, $i, $split_length, $encoding); + } + + return $result; + } + + public static function mb_strtolower($s, $encoding = null) + { + return self::mb_convert_case($s, \MB_CASE_LOWER, $encoding); + } + + public static function mb_strtoupper($s, $encoding = null) + { + return self::mb_convert_case($s, \MB_CASE_UPPER, $encoding); + } + + public static function mb_substitute_character($c = null) + { + if (null === $c) { + return 'none'; + } + if (0 === strcasecmp($c, 'none')) { + return true; + } + if (80000 > \PHP_VERSION_ID) { + return false; + } + if (\is_int($c) || 'long' === $c || 'entity' === $c) { + return false; + } + + throw new \ValueError('Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint'); + } + + public static function mb_substr($s, $start, $length = null, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return (string) substr($s, $start, null === $length ? 2147483647 : $length); + } + + if ($start < 0) { + $start = \iconv_strlen($s, $encoding) + $start; + if ($start < 0) { + $start = 0; + } + } + + if (null === $length) { + $length = 2147483647; + } elseif ($length < 0) { + $length = \iconv_strlen($s, $encoding) + $length - $start; + if ($length < 0) { + return ''; + } + } + + return (string) \iconv_substr($s, $start, $length, $encoding); + } + + public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) + { + $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); + $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + + return self::mb_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_stristr($haystack, $needle, $part = false, $encoding = null) + { + $pos = self::mb_stripos($haystack, $needle, 0, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + $pos = strrpos($haystack, $needle); + } else { + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = \iconv_strrpos($haystack, $needle, $encoding); + } + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null) + { + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = self::mb_strripos($haystack, $needle, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) + { + $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); + $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + + return self::mb_strrpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strstr($haystack, $needle, $part = false, $encoding = null) + { + $pos = strpos($haystack, $needle); + if (false === $pos) { + return false; + } + if ($part) { + return substr($haystack, 0, $pos); + } + + return substr($haystack, $pos); + } + + public static function mb_get_info($type = 'all') + { + $info = [ + 'internal_encoding' => self::$internalEncoding, + 'http_output' => 'pass', + 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)', + 'func_overload' => 0, + 'func_overload_list' => 'no overload', + 'mail_charset' => 'UTF-8', + 'mail_header_encoding' => 'BASE64', + 'mail_body_encoding' => 'BASE64', + 'illegal_chars' => 0, + 'encoding_translation' => 'Off', + 'language' => self::$language, + 'detect_order' => self::$encodingList, + 'substitute_character' => 'none', + 'strict_detection' => 'Off', + ]; + + if ('all' === $type) { + return $info; + } + if (isset($info[$type])) { + return $info[$type]; + } + + return false; + } + + public static function mb_http_input($type = '') + { + return false; + } + + public static function mb_http_output($encoding = null) + { + return null !== $encoding ? 'pass' === $encoding : 'pass'; + } + + public static function mb_strwidth($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + + if ('UTF-8' !== $encoding) { + $s = \iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); + + return ($wide << 1) + \iconv_strlen($s, 'UTF-8'); + } + + public static function mb_substr_count($haystack, $needle, $encoding = null) + { + return substr_count($haystack, $needle); + } + + public static function mb_output_handler($contents, $status) + { + return $contents; + } + + public static function mb_chr($code, $encoding = null) + { + if (0x80 > $code %= 0x200000) { + $s = \chr($code); + } elseif (0x800 > $code) { + $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); + } elseif (0x10000 > $code) { + $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } else { + $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } + + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, $encoding, 'UTF-8'); + } + + return $s; + } + + public static function mb_ord($s, $encoding = null) + { + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, 'UTF-8', $encoding); + } + + if (1 === \strlen($s)) { + return \ord($s); + } + + $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; + if (0xF0 <= $code) { + return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; + } + if (0xE0 <= $code) { + return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; + } + if (0xC0 <= $code) { + return (($code - 0xC0) << 6) + $s[2] - 0x80; + } + + return $code; + } + + private static function getSubpart($pos, $part, $haystack, $encoding) + { + if (false === $pos) { + return false; + } + if ($part) { + return self::mb_substr($haystack, 0, $pos, $encoding); + } + + return self::mb_substr($haystack, $pos, null, $encoding); + } + + private static function html_encoding_callback(array $m) + { + $i = 1; + $entities = ''; + $m = unpack('C*', htmlentities($m[0], \ENT_COMPAT, 'UTF-8')); + + while (isset($m[$i])) { + if (0x80 > $m[$i]) { + $entities .= \chr($m[$i++]); + continue; + } + if (0xF0 <= $m[$i]) { + $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } elseif (0xE0 <= $m[$i]) { + $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } else { + $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80; + } + + $entities .= '&#'.$c.';'; + } + + return $entities; + } + + private static function title_case(array $s) + { + return self::mb_convert_case($s[1], \MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], \MB_CASE_LOWER, 'UTF-8'); + } + + private static function getData($file) + { + if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { + return require $file; + } + + return false; + } + + private static function getEncoding($encoding) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + if ('UTF-8' === $encoding) { + return 'UTF-8'; + } + + $encoding = strtoupper($encoding); + + if ('8BIT' === $encoding || 'BINARY' === $encoding) { + return 'CP850'; + } + + if ('UTF8' === $encoding) { + return 'UTF-8'; + } + + return $encoding; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php new file mode 100644 index 0000000..fac60b0 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php @@ -0,0 +1,1397 @@ + 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + 'À' => 'à', + 'Á' => 'á', + 'Â' => 'â', + 'Ã' => 'ã', + 'Ä' => 'ä', + 'Å' => 'å', + 'Æ' => 'æ', + 'Ç' => 'ç', + 'È' => 'è', + 'É' => 'é', + 'Ê' => 'ê', + 'Ë' => 'ë', + 'Ì' => 'ì', + 'Í' => 'í', + 'Î' => 'î', + 'Ï' => 'ï', + 'Ð' => 'ð', + 'Ñ' => 'ñ', + 'Ò' => 'ò', + 'Ó' => 'ó', + 'Ô' => 'ô', + 'Õ' => 'õ', + 'Ö' => 'ö', + 'Ø' => 'ø', + 'Ù' => 'ù', + 'Ú' => 'ú', + 'Û' => 'û', + 'Ü' => 'ü', + 'Ý' => 'ý', + 'Þ' => 'þ', + 'Ā' => 'ā', + 'Ă' => 'ă', + 'Ą' => 'ą', + 'Ć' => 'ć', + 'Ĉ' => 'ĉ', + 'Ċ' => 'ċ', + 'Č' => 'č', + 'Ď' => 'ď', + 'Đ' => 'đ', + 'Ē' => 'ē', + 'Ĕ' => 'ĕ', + 'Ė' => 'ė', + 'Ę' => 'ę', + 'Ě' => 'ě', + 'Ĝ' => 'ĝ', + 'Ğ' => 'ğ', + 'Ġ' => 'ġ', + 'Ģ' => 'ģ', + 'Ĥ' => 'ĥ', + 'Ħ' => 'ħ', + 'Ĩ' => 'ĩ', + 'Ī' => 'ī', + 'Ĭ' => 'ĭ', + 'Į' => 'į', + 'İ' => 'i̇', + 'IJ' => 'ij', + 'Ĵ' => 'ĵ', + 'Ķ' => 'ķ', + 'Ĺ' => 'ĺ', + 'Ļ' => 'ļ', + 'Ľ' => 'ľ', + 'Ŀ' => 'ŀ', + 'Ł' => 'ł', + 'Ń' => 'ń', + 'Ņ' => 'ņ', + 'Ň' => 'ň', + 'Ŋ' => 'ŋ', + 'Ō' => 'ō', + 'Ŏ' => 'ŏ', + 'Ő' => 'ő', + 'Œ' => 'œ', + 'Ŕ' => 'ŕ', + 'Ŗ' => 'ŗ', + 'Ř' => 'ř', + 'Ś' => 'ś', + 'Ŝ' => 'ŝ', + 'Ş' => 'ş', + 'Š' => 'š', + 'Ţ' => 'ţ', + 'Ť' => 'ť', + 'Ŧ' => 'ŧ', + 'Ũ' => 'ũ', + 'Ū' => 'ū', + 'Ŭ' => 'ŭ', + 'Ů' => 'ů', + 'Ű' => 'ű', + 'Ų' => 'ų', + 'Ŵ' => 'ŵ', + 'Ŷ' => 'ŷ', + 'Ÿ' => 'ÿ', + 'Ź' => 'ź', + 'Ż' => 'ż', + 'Ž' => 'ž', + 'Ɓ' => 'ɓ', + 'Ƃ' => 'ƃ', + 'Ƅ' => 'ƅ', + 'Ɔ' => 'ɔ', + 'Ƈ' => 'ƈ', + 'Ɖ' => 'ɖ', + 'Ɗ' => 'ɗ', + 'Ƌ' => 'ƌ', + 'Ǝ' => 'ǝ', + 'Ə' => 'ə', + 'Ɛ' => 'ɛ', + 'Ƒ' => 'ƒ', + 'Ɠ' => 'ɠ', + 'Ɣ' => 'ɣ', + 'Ɩ' => 'ɩ', + 'Ɨ' => 'ɨ', + 'Ƙ' => 'ƙ', + 'Ɯ' => 'ɯ', + 'Ɲ' => 'ɲ', + 'Ɵ' => 'ɵ', + 'Ơ' => 'ơ', + 'Ƣ' => 'ƣ', + 'Ƥ' => 'ƥ', + 'Ʀ' => 'ʀ', + 'Ƨ' => 'ƨ', + 'Ʃ' => 'ʃ', + 'Ƭ' => 'ƭ', + 'Ʈ' => 'ʈ', + 'Ư' => 'ư', + 'Ʊ' => 'ʊ', + 'Ʋ' => 'ʋ', + 'Ƴ' => 'ƴ', + 'Ƶ' => 'ƶ', + 'Ʒ' => 'ʒ', + 'Ƹ' => 'ƹ', + 'Ƽ' => 'ƽ', + 'DŽ' => 'dž', + 'Dž' => 'dž', + 'LJ' => 'lj', + 'Lj' => 'lj', + 'NJ' => 'nj', + 'Nj' => 'nj', + 'Ǎ' => 'ǎ', + 'Ǐ' => 'ǐ', + 'Ǒ' => 'ǒ', + 'Ǔ' => 'ǔ', + 'Ǖ' => 'ǖ', + 'Ǘ' => 'ǘ', + 'Ǚ' => 'ǚ', + 'Ǜ' => 'ǜ', + 'Ǟ' => 'ǟ', + 'Ǡ' => 'ǡ', + 'Ǣ' => 'ǣ', + 'Ǥ' => 'ǥ', + 'Ǧ' => 'ǧ', + 'Ǩ' => 'ǩ', + 'Ǫ' => 'ǫ', + 'Ǭ' => 'ǭ', + 'Ǯ' => 'ǯ', + 'DZ' => 'dz', + 'Dz' => 'dz', + 'Ǵ' => 'ǵ', + 'Ƕ' => 'ƕ', + 'Ƿ' => 'ƿ', + 'Ǹ' => 'ǹ', + 'Ǻ' => 'ǻ', + 'Ǽ' => 'ǽ', + 'Ǿ' => 'ǿ', + 'Ȁ' => 'ȁ', + 'Ȃ' => 'ȃ', + 'Ȅ' => 'ȅ', + 'Ȇ' => 'ȇ', + 'Ȉ' => 'ȉ', + 'Ȋ' => 'ȋ', + 'Ȍ' => 'ȍ', + 'Ȏ' => 'ȏ', + 'Ȑ' => 'ȑ', + 'Ȓ' => 'ȓ', + 'Ȕ' => 'ȕ', + 'Ȗ' => 'ȗ', + 'Ș' => 'ș', + 'Ț' => 'ț', + 'Ȝ' => 'ȝ', + 'Ȟ' => 'ȟ', + 'Ƞ' => 'ƞ', + 'Ȣ' => 'ȣ', + 'Ȥ' => 'ȥ', + 'Ȧ' => 'ȧ', + 'Ȩ' => 'ȩ', + 'Ȫ' => 'ȫ', + 'Ȭ' => 'ȭ', + 'Ȯ' => 'ȯ', + 'Ȱ' => 'ȱ', + 'Ȳ' => 'ȳ', + 'Ⱥ' => 'ⱥ', + 'Ȼ' => 'ȼ', + 'Ƚ' => 'ƚ', + 'Ⱦ' => 'ⱦ', + 'Ɂ' => 'ɂ', + 'Ƀ' => 'ƀ', + 'Ʉ' => 'ʉ', + 'Ʌ' => 'ʌ', + 'Ɇ' => 'ɇ', + 'Ɉ' => 'ɉ', + 'Ɋ' => 'ɋ', + 'Ɍ' => 'ɍ', + 'Ɏ' => 'ɏ', + 'Ͱ' => 'ͱ', + 'Ͳ' => 'ͳ', + 'Ͷ' => 'ͷ', + 'Ϳ' => 'ϳ', + 'Ά' => 'ά', + 'Έ' => 'έ', + 'Ή' => 'ή', + 'Ί' => 'ί', + 'Ό' => 'ό', + 'Ύ' => 'ύ', + 'Ώ' => 'ώ', + 'Α' => 'α', + 'Β' => 'β', + 'Γ' => 'γ', + 'Δ' => 'δ', + 'Ε' => 'ε', + 'Ζ' => 'ζ', + 'Η' => 'η', + 'Θ' => 'θ', + 'Ι' => 'ι', + 'Κ' => 'κ', + 'Λ' => 'λ', + 'Μ' => 'μ', + 'Ν' => 'ν', + 'Ξ' => 'ξ', + 'Ο' => 'ο', + 'Π' => 'π', + 'Ρ' => 'ρ', + 'Σ' => 'σ', + 'Τ' => 'τ', + 'Υ' => 'υ', + 'Φ' => 'φ', + 'Χ' => 'χ', + 'Ψ' => 'ψ', + 'Ω' => 'ω', + 'Ϊ' => 'ϊ', + 'Ϋ' => 'ϋ', + 'Ϗ' => 'ϗ', + 'Ϙ' => 'ϙ', + 'Ϛ' => 'ϛ', + 'Ϝ' => 'ϝ', + 'Ϟ' => 'ϟ', + 'Ϡ' => 'ϡ', + 'Ϣ' => 'ϣ', + 'Ϥ' => 'ϥ', + 'Ϧ' => 'ϧ', + 'Ϩ' => 'ϩ', + 'Ϫ' => 'ϫ', + 'Ϭ' => 'ϭ', + 'Ϯ' => 'ϯ', + 'ϴ' => 'θ', + 'Ϸ' => 'ϸ', + 'Ϲ' => 'ϲ', + 'Ϻ' => 'ϻ', + 'Ͻ' => 'ͻ', + 'Ͼ' => 'ͼ', + 'Ͽ' => 'ͽ', + 'Ѐ' => 'ѐ', + 'Ё' => 'ё', + 'Ђ' => 'ђ', + 'Ѓ' => 'ѓ', + 'Є' => 'є', + 'Ѕ' => 'ѕ', + 'І' => 'і', + 'Ї' => 'ї', + 'Ј' => 'ј', + 'Љ' => 'љ', + 'Њ' => 'њ', + 'Ћ' => 'ћ', + 'Ќ' => 'ќ', + 'Ѝ' => 'ѝ', + 'Ў' => 'ў', + 'Џ' => 'џ', + 'А' => 'а', + 'Б' => 'б', + 'В' => 'в', + 'Г' => 'г', + 'Д' => 'д', + 'Е' => 'е', + 'Ж' => 'ж', + 'З' => 'з', + 'И' => 'и', + 'Й' => 'й', + 'К' => 'к', + 'Л' => 'л', + 'М' => 'м', + 'Н' => 'н', + 'О' => 'о', + 'П' => 'п', + 'Р' => 'р', + 'С' => 'с', + 'Т' => 'т', + 'У' => 'у', + 'Ф' => 'ф', + 'Х' => 'х', + 'Ц' => 'ц', + 'Ч' => 'ч', + 'Ш' => 'ш', + 'Щ' => 'щ', + 'Ъ' => 'ъ', + 'Ы' => 'ы', + 'Ь' => 'ь', + 'Э' => 'э', + 'Ю' => 'ю', + 'Я' => 'я', + 'Ѡ' => 'ѡ', + 'Ѣ' => 'ѣ', + 'Ѥ' => 'ѥ', + 'Ѧ' => 'ѧ', + 'Ѩ' => 'ѩ', + 'Ѫ' => 'ѫ', + 'Ѭ' => 'ѭ', + 'Ѯ' => 'ѯ', + 'Ѱ' => 'ѱ', + 'Ѳ' => 'ѳ', + 'Ѵ' => 'ѵ', + 'Ѷ' => 'ѷ', + 'Ѹ' => 'ѹ', + 'Ѻ' => 'ѻ', + 'Ѽ' => 'ѽ', + 'Ѿ' => 'ѿ', + 'Ҁ' => 'ҁ', + 'Ҋ' => 'ҋ', + 'Ҍ' => 'ҍ', + 'Ҏ' => 'ҏ', + 'Ґ' => 'ґ', + 'Ғ' => 'ғ', + 'Ҕ' => 'ҕ', + 'Җ' => 'җ', + 'Ҙ' => 'ҙ', + 'Қ' => 'қ', + 'Ҝ' => 'ҝ', + 'Ҟ' => 'ҟ', + 'Ҡ' => 'ҡ', + 'Ң' => 'ң', + 'Ҥ' => 'ҥ', + 'Ҧ' => 'ҧ', + 'Ҩ' => 'ҩ', + 'Ҫ' => 'ҫ', + 'Ҭ' => 'ҭ', + 'Ү' => 'ү', + 'Ұ' => 'ұ', + 'Ҳ' => 'ҳ', + 'Ҵ' => 'ҵ', + 'Ҷ' => 'ҷ', + 'Ҹ' => 'ҹ', + 'Һ' => 'һ', + 'Ҽ' => 'ҽ', + 'Ҿ' => 'ҿ', + 'Ӏ' => 'ӏ', + 'Ӂ' => 'ӂ', + 'Ӄ' => 'ӄ', + 'Ӆ' => 'ӆ', + 'Ӈ' => 'ӈ', + 'Ӊ' => 'ӊ', + 'Ӌ' => 'ӌ', + 'Ӎ' => 'ӎ', + 'Ӑ' => 'ӑ', + 'Ӓ' => 'ӓ', + 'Ӕ' => 'ӕ', + 'Ӗ' => 'ӗ', + 'Ә' => 'ә', + 'Ӛ' => 'ӛ', + 'Ӝ' => 'ӝ', + 'Ӟ' => 'ӟ', + 'Ӡ' => 'ӡ', + 'Ӣ' => 'ӣ', + 'Ӥ' => 'ӥ', + 'Ӧ' => 'ӧ', + 'Ө' => 'ө', + 'Ӫ' => 'ӫ', + 'Ӭ' => 'ӭ', + 'Ӯ' => 'ӯ', + 'Ӱ' => 'ӱ', + 'Ӳ' => 'ӳ', + 'Ӵ' => 'ӵ', + 'Ӷ' => 'ӷ', + 'Ӹ' => 'ӹ', + 'Ӻ' => 'ӻ', + 'Ӽ' => 'ӽ', + 'Ӿ' => 'ӿ', + 'Ԁ' => 'ԁ', + 'Ԃ' => 'ԃ', + 'Ԅ' => 'ԅ', + 'Ԇ' => 'ԇ', + 'Ԉ' => 'ԉ', + 'Ԋ' => 'ԋ', + 'Ԍ' => 'ԍ', + 'Ԏ' => 'ԏ', + 'Ԑ' => 'ԑ', + 'Ԓ' => 'ԓ', + 'Ԕ' => 'ԕ', + 'Ԗ' => 'ԗ', + 'Ԙ' => 'ԙ', + 'Ԛ' => 'ԛ', + 'Ԝ' => 'ԝ', + 'Ԟ' => 'ԟ', + 'Ԡ' => 'ԡ', + 'Ԣ' => 'ԣ', + 'Ԥ' => 'ԥ', + 'Ԧ' => 'ԧ', + 'Ԩ' => 'ԩ', + 'Ԫ' => 'ԫ', + 'Ԭ' => 'ԭ', + 'Ԯ' => 'ԯ', + 'Ա' => 'ա', + 'Բ' => 'բ', + 'Գ' => 'գ', + 'Դ' => 'դ', + 'Ե' => 'ե', + 'Զ' => 'զ', + 'Է' => 'է', + 'Ը' => 'ը', + 'Թ' => 'թ', + 'Ժ' => 'ժ', + 'Ի' => 'ի', + 'Լ' => 'լ', + 'Խ' => 'խ', + 'Ծ' => 'ծ', + 'Կ' => 'կ', + 'Հ' => 'հ', + 'Ձ' => 'ձ', + 'Ղ' => 'ղ', + 'Ճ' => 'ճ', + 'Մ' => 'մ', + 'Յ' => 'յ', + 'Ն' => 'ն', + 'Շ' => 'շ', + 'Ո' => 'ո', + 'Չ' => 'չ', + 'Պ' => 'պ', + 'Ջ' => 'ջ', + 'Ռ' => 'ռ', + 'Ս' => 'ս', + 'Վ' => 'վ', + 'Տ' => 'տ', + 'Ր' => 'ր', + 'Ց' => 'ց', + 'Ւ' => 'ւ', + 'Փ' => 'փ', + 'Ք' => 'ք', + 'Օ' => 'օ', + 'Ֆ' => 'ֆ', + 'Ⴀ' => 'ⴀ', + 'Ⴁ' => 'ⴁ', + 'Ⴂ' => 'ⴂ', + 'Ⴃ' => 'ⴃ', + 'Ⴄ' => 'ⴄ', + 'Ⴅ' => 'ⴅ', + 'Ⴆ' => 'ⴆ', + 'Ⴇ' => 'ⴇ', + 'Ⴈ' => 'ⴈ', + 'Ⴉ' => 'ⴉ', + 'Ⴊ' => 'ⴊ', + 'Ⴋ' => 'ⴋ', + 'Ⴌ' => 'ⴌ', + 'Ⴍ' => 'ⴍ', + 'Ⴎ' => 'ⴎ', + 'Ⴏ' => 'ⴏ', + 'Ⴐ' => 'ⴐ', + 'Ⴑ' => 'ⴑ', + 'Ⴒ' => 'ⴒ', + 'Ⴓ' => 'ⴓ', + 'Ⴔ' => 'ⴔ', + 'Ⴕ' => 'ⴕ', + 'Ⴖ' => 'ⴖ', + 'Ⴗ' => 'ⴗ', + 'Ⴘ' => 'ⴘ', + 'Ⴙ' => 'ⴙ', + 'Ⴚ' => 'ⴚ', + 'Ⴛ' => 'ⴛ', + 'Ⴜ' => 'ⴜ', + 'Ⴝ' => 'ⴝ', + 'Ⴞ' => 'ⴞ', + 'Ⴟ' => 'ⴟ', + 'Ⴠ' => 'ⴠ', + 'Ⴡ' => 'ⴡ', + 'Ⴢ' => 'ⴢ', + 'Ⴣ' => 'ⴣ', + 'Ⴤ' => 'ⴤ', + 'Ⴥ' => 'ⴥ', + 'Ⴧ' => 'ⴧ', + 'Ⴭ' => 'ⴭ', + 'Ꭰ' => 'ꭰ', + 'Ꭱ' => 'ꭱ', + 'Ꭲ' => 'ꭲ', + 'Ꭳ' => 'ꭳ', + 'Ꭴ' => 'ꭴ', + 'Ꭵ' => 'ꭵ', + 'Ꭶ' => 'ꭶ', + 'Ꭷ' => 'ꭷ', + 'Ꭸ' => 'ꭸ', + 'Ꭹ' => 'ꭹ', + 'Ꭺ' => 'ꭺ', + 'Ꭻ' => 'ꭻ', + 'Ꭼ' => 'ꭼ', + 'Ꭽ' => 'ꭽ', + 'Ꭾ' => 'ꭾ', + 'Ꭿ' => 'ꭿ', + 'Ꮀ' => 'ꮀ', + 'Ꮁ' => 'ꮁ', + 'Ꮂ' => 'ꮂ', + 'Ꮃ' => 'ꮃ', + 'Ꮄ' => 'ꮄ', + 'Ꮅ' => 'ꮅ', + 'Ꮆ' => 'ꮆ', + 'Ꮇ' => 'ꮇ', + 'Ꮈ' => 'ꮈ', + 'Ꮉ' => 'ꮉ', + 'Ꮊ' => 'ꮊ', + 'Ꮋ' => 'ꮋ', + 'Ꮌ' => 'ꮌ', + 'Ꮍ' => 'ꮍ', + 'Ꮎ' => 'ꮎ', + 'Ꮏ' => 'ꮏ', + 'Ꮐ' => 'ꮐ', + 'Ꮑ' => 'ꮑ', + 'Ꮒ' => 'ꮒ', + 'Ꮓ' => 'ꮓ', + 'Ꮔ' => 'ꮔ', + 'Ꮕ' => 'ꮕ', + 'Ꮖ' => 'ꮖ', + 'Ꮗ' => 'ꮗ', + 'Ꮘ' => 'ꮘ', + 'Ꮙ' => 'ꮙ', + 'Ꮚ' => 'ꮚ', + 'Ꮛ' => 'ꮛ', + 'Ꮜ' => 'ꮜ', + 'Ꮝ' => 'ꮝ', + 'Ꮞ' => 'ꮞ', + 'Ꮟ' => 'ꮟ', + 'Ꮠ' => 'ꮠ', + 'Ꮡ' => 'ꮡ', + 'Ꮢ' => 'ꮢ', + 'Ꮣ' => 'ꮣ', + 'Ꮤ' => 'ꮤ', + 'Ꮥ' => 'ꮥ', + 'Ꮦ' => 'ꮦ', + 'Ꮧ' => 'ꮧ', + 'Ꮨ' => 'ꮨ', + 'Ꮩ' => 'ꮩ', + 'Ꮪ' => 'ꮪ', + 'Ꮫ' => 'ꮫ', + 'Ꮬ' => 'ꮬ', + 'Ꮭ' => 'ꮭ', + 'Ꮮ' => 'ꮮ', + 'Ꮯ' => 'ꮯ', + 'Ꮰ' => 'ꮰ', + 'Ꮱ' => 'ꮱ', + 'Ꮲ' => 'ꮲ', + 'Ꮳ' => 'ꮳ', + 'Ꮴ' => 'ꮴ', + 'Ꮵ' => 'ꮵ', + 'Ꮶ' => 'ꮶ', + 'Ꮷ' => 'ꮷ', + 'Ꮸ' => 'ꮸ', + 'Ꮹ' => 'ꮹ', + 'Ꮺ' => 'ꮺ', + 'Ꮻ' => 'ꮻ', + 'Ꮼ' => 'ꮼ', + 'Ꮽ' => 'ꮽ', + 'Ꮾ' => 'ꮾ', + 'Ꮿ' => 'ꮿ', + 'Ᏸ' => 'ᏸ', + 'Ᏹ' => 'ᏹ', + 'Ᏺ' => 'ᏺ', + 'Ᏻ' => 'ᏻ', + 'Ᏼ' => 'ᏼ', + 'Ᏽ' => 'ᏽ', + 'Ა' => 'ა', + 'Ბ' => 'ბ', + 'Გ' => 'გ', + 'Დ' => 'დ', + 'Ე' => 'ე', + 'Ვ' => 'ვ', + 'Ზ' => 'ზ', + 'Თ' => 'თ', + 'Ი' => 'ი', + 'Კ' => 'კ', + 'Ლ' => 'ლ', + 'Მ' => 'მ', + 'Ნ' => 'ნ', + 'Ო' => 'ო', + 'Პ' => 'პ', + 'Ჟ' => 'ჟ', + 'Რ' => 'რ', + 'Ს' => 'ს', + 'Ტ' => 'ტ', + 'Უ' => 'უ', + 'Ფ' => 'ფ', + 'Ქ' => 'ქ', + 'Ღ' => 'ღ', + 'Ყ' => 'ყ', + 'Შ' => 'შ', + 'Ჩ' => 'ჩ', + 'Ც' => 'ც', + 'Ძ' => 'ძ', + 'Წ' => 'წ', + 'Ჭ' => 'ჭ', + 'Ხ' => 'ხ', + 'Ჯ' => 'ჯ', + 'Ჰ' => 'ჰ', + 'Ჱ' => 'ჱ', + 'Ჲ' => 'ჲ', + 'Ჳ' => 'ჳ', + 'Ჴ' => 'ჴ', + 'Ჵ' => 'ჵ', + 'Ჶ' => 'ჶ', + 'Ჷ' => 'ჷ', + 'Ჸ' => 'ჸ', + 'Ჹ' => 'ჹ', + 'Ჺ' => 'ჺ', + 'Ჽ' => 'ჽ', + 'Ჾ' => 'ჾ', + 'Ჿ' => 'ჿ', + 'Ḁ' => 'ḁ', + 'Ḃ' => 'ḃ', + 'Ḅ' => 'ḅ', + 'Ḇ' => 'ḇ', + 'Ḉ' => 'ḉ', + 'Ḋ' => 'ḋ', + 'Ḍ' => 'ḍ', + 'Ḏ' => 'ḏ', + 'Ḑ' => 'ḑ', + 'Ḓ' => 'ḓ', + 'Ḕ' => 'ḕ', + 'Ḗ' => 'ḗ', + 'Ḙ' => 'ḙ', + 'Ḛ' => 'ḛ', + 'Ḝ' => 'ḝ', + 'Ḟ' => 'ḟ', + 'Ḡ' => 'ḡ', + 'Ḣ' => 'ḣ', + 'Ḥ' => 'ḥ', + 'Ḧ' => 'ḧ', + 'Ḩ' => 'ḩ', + 'Ḫ' => 'ḫ', + 'Ḭ' => 'ḭ', + 'Ḯ' => 'ḯ', + 'Ḱ' => 'ḱ', + 'Ḳ' => 'ḳ', + 'Ḵ' => 'ḵ', + 'Ḷ' => 'ḷ', + 'Ḹ' => 'ḹ', + 'Ḻ' => 'ḻ', + 'Ḽ' => 'ḽ', + 'Ḿ' => 'ḿ', + 'Ṁ' => 'ṁ', + 'Ṃ' => 'ṃ', + 'Ṅ' => 'ṅ', + 'Ṇ' => 'ṇ', + 'Ṉ' => 'ṉ', + 'Ṋ' => 'ṋ', + 'Ṍ' => 'ṍ', + 'Ṏ' => 'ṏ', + 'Ṑ' => 'ṑ', + 'Ṓ' => 'ṓ', + 'Ṕ' => 'ṕ', + 'Ṗ' => 'ṗ', + 'Ṙ' => 'ṙ', + 'Ṛ' => 'ṛ', + 'Ṝ' => 'ṝ', + 'Ṟ' => 'ṟ', + 'Ṡ' => 'ṡ', + 'Ṣ' => 'ṣ', + 'Ṥ' => 'ṥ', + 'Ṧ' => 'ṧ', + 'Ṩ' => 'ṩ', + 'Ṫ' => 'ṫ', + 'Ṭ' => 'ṭ', + 'Ṯ' => 'ṯ', + 'Ṱ' => 'ṱ', + 'Ṳ' => 'ṳ', + 'Ṵ' => 'ṵ', + 'Ṷ' => 'ṷ', + 'Ṹ' => 'ṹ', + 'Ṻ' => 'ṻ', + 'Ṽ' => 'ṽ', + 'Ṿ' => 'ṿ', + 'Ẁ' => 'ẁ', + 'Ẃ' => 'ẃ', + 'Ẅ' => 'ẅ', + 'Ẇ' => 'ẇ', + 'Ẉ' => 'ẉ', + 'Ẋ' => 'ẋ', + 'Ẍ' => 'ẍ', + 'Ẏ' => 'ẏ', + 'Ẑ' => 'ẑ', + 'Ẓ' => 'ẓ', + 'Ẕ' => 'ẕ', + 'ẞ' => 'ß', + 'Ạ' => 'ạ', + 'Ả' => 'ả', + 'Ấ' => 'ấ', + 'Ầ' => 'ầ', + 'Ẩ' => 'ẩ', + 'Ẫ' => 'ẫ', + 'Ậ' => 'ậ', + 'Ắ' => 'ắ', + 'Ằ' => 'ằ', + 'Ẳ' => 'ẳ', + 'Ẵ' => 'ẵ', + 'Ặ' => 'ặ', + 'Ẹ' => 'ẹ', + 'Ẻ' => 'ẻ', + 'Ẽ' => 'ẽ', + 'Ế' => 'ế', + 'Ề' => 'ề', + 'Ể' => 'ể', + 'Ễ' => 'ễ', + 'Ệ' => 'ệ', + 'Ỉ' => 'ỉ', + 'Ị' => 'ị', + 'Ọ' => 'ọ', + 'Ỏ' => 'ỏ', + 'Ố' => 'ố', + 'Ồ' => 'ồ', + 'Ổ' => 'ổ', + 'Ỗ' => 'ỗ', + 'Ộ' => 'ộ', + 'Ớ' => 'ớ', + 'Ờ' => 'ờ', + 'Ở' => 'ở', + 'Ỡ' => 'ỡ', + 'Ợ' => 'ợ', + 'Ụ' => 'ụ', + 'Ủ' => 'ủ', + 'Ứ' => 'ứ', + 'Ừ' => 'ừ', + 'Ử' => 'ử', + 'Ữ' => 'ữ', + 'Ự' => 'ự', + 'Ỳ' => 'ỳ', + 'Ỵ' => 'ỵ', + 'Ỷ' => 'ỷ', + 'Ỹ' => 'ỹ', + 'Ỻ' => 'ỻ', + 'Ỽ' => 'ỽ', + 'Ỿ' => 'ỿ', + 'Ἀ' => 'ἀ', + 'Ἁ' => 'ἁ', + 'Ἂ' => 'ἂ', + 'Ἃ' => 'ἃ', + 'Ἄ' => 'ἄ', + 'Ἅ' => 'ἅ', + 'Ἆ' => 'ἆ', + 'Ἇ' => 'ἇ', + 'Ἐ' => 'ἐ', + 'Ἑ' => 'ἑ', + 'Ἒ' => 'ἒ', + 'Ἓ' => 'ἓ', + 'Ἔ' => 'ἔ', + 'Ἕ' => 'ἕ', + 'Ἠ' => 'ἠ', + 'Ἡ' => 'ἡ', + 'Ἢ' => 'ἢ', + 'Ἣ' => 'ἣ', + 'Ἤ' => 'ἤ', + 'Ἥ' => 'ἥ', + 'Ἦ' => 'ἦ', + 'Ἧ' => 'ἧ', + 'Ἰ' => 'ἰ', + 'Ἱ' => 'ἱ', + 'Ἲ' => 'ἲ', + 'Ἳ' => 'ἳ', + 'Ἴ' => 'ἴ', + 'Ἵ' => 'ἵ', + 'Ἶ' => 'ἶ', + 'Ἷ' => 'ἷ', + 'Ὀ' => 'ὀ', + 'Ὁ' => 'ὁ', + 'Ὂ' => 'ὂ', + 'Ὃ' => 'ὃ', + 'Ὄ' => 'ὄ', + 'Ὅ' => 'ὅ', + 'Ὑ' => 'ὑ', + 'Ὓ' => 'ὓ', + 'Ὕ' => 'ὕ', + 'Ὗ' => 'ὗ', + 'Ὠ' => 'ὠ', + 'Ὡ' => 'ὡ', + 'Ὢ' => 'ὢ', + 'Ὣ' => 'ὣ', + 'Ὤ' => 'ὤ', + 'Ὥ' => 'ὥ', + 'Ὦ' => 'ὦ', + 'Ὧ' => 'ὧ', + 'ᾈ' => 'ᾀ', + 'ᾉ' => 'ᾁ', + 'ᾊ' => 'ᾂ', + 'ᾋ' => 'ᾃ', + 'ᾌ' => 'ᾄ', + 'ᾍ' => 'ᾅ', + 'ᾎ' => 'ᾆ', + 'ᾏ' => 'ᾇ', + 'ᾘ' => 'ᾐ', + 'ᾙ' => 'ᾑ', + 'ᾚ' => 'ᾒ', + 'ᾛ' => 'ᾓ', + 'ᾜ' => 'ᾔ', + 'ᾝ' => 'ᾕ', + 'ᾞ' => 'ᾖ', + 'ᾟ' => 'ᾗ', + 'ᾨ' => 'ᾠ', + 'ᾩ' => 'ᾡ', + 'ᾪ' => 'ᾢ', + 'ᾫ' => 'ᾣ', + 'ᾬ' => 'ᾤ', + 'ᾭ' => 'ᾥ', + 'ᾮ' => 'ᾦ', + 'ᾯ' => 'ᾧ', + 'Ᾰ' => 'ᾰ', + 'Ᾱ' => 'ᾱ', + 'Ὰ' => 'ὰ', + 'Ά' => 'ά', + 'ᾼ' => 'ᾳ', + 'Ὲ' => 'ὲ', + 'Έ' => 'έ', + 'Ὴ' => 'ὴ', + 'Ή' => 'ή', + 'ῌ' => 'ῃ', + 'Ῐ' => 'ῐ', + 'Ῑ' => 'ῑ', + 'Ὶ' => 'ὶ', + 'Ί' => 'ί', + 'Ῠ' => 'ῠ', + 'Ῡ' => 'ῡ', + 'Ὺ' => 'ὺ', + 'Ύ' => 'ύ', + 'Ῥ' => 'ῥ', + 'Ὸ' => 'ὸ', + 'Ό' => 'ό', + 'Ὼ' => 'ὼ', + 'Ώ' => 'ώ', + 'ῼ' => 'ῳ', + 'Ω' => 'ω', + 'K' => 'k', + 'Å' => 'å', + 'Ⅎ' => 'ⅎ', + 'Ⅰ' => 'ⅰ', + 'Ⅱ' => 'ⅱ', + 'Ⅲ' => 'ⅲ', + 'Ⅳ' => 'ⅳ', + 'Ⅴ' => 'ⅴ', + 'Ⅵ' => 'ⅵ', + 'Ⅶ' => 'ⅶ', + 'Ⅷ' => 'ⅷ', + 'Ⅸ' => 'ⅸ', + 'Ⅹ' => 'ⅹ', + 'Ⅺ' => 'ⅺ', + 'Ⅻ' => 'ⅻ', + 'Ⅼ' => 'ⅼ', + 'Ⅽ' => 'ⅽ', + 'Ⅾ' => 'ⅾ', + 'Ⅿ' => 'ⅿ', + 'Ↄ' => 'ↄ', + 'Ⓐ' => 'ⓐ', + 'Ⓑ' => 'ⓑ', + 'Ⓒ' => 'ⓒ', + 'Ⓓ' => 'ⓓ', + 'Ⓔ' => 'ⓔ', + 'Ⓕ' => 'ⓕ', + 'Ⓖ' => 'ⓖ', + 'Ⓗ' => 'ⓗ', + 'Ⓘ' => 'ⓘ', + 'Ⓙ' => 'ⓙ', + 'Ⓚ' => 'ⓚ', + 'Ⓛ' => 'ⓛ', + 'Ⓜ' => 'ⓜ', + 'Ⓝ' => 'ⓝ', + 'Ⓞ' => 'ⓞ', + 'Ⓟ' => 'ⓟ', + 'Ⓠ' => 'ⓠ', + 'Ⓡ' => 'ⓡ', + 'Ⓢ' => 'ⓢ', + 'Ⓣ' => 'ⓣ', + 'Ⓤ' => 'ⓤ', + 'Ⓥ' => 'ⓥ', + 'Ⓦ' => 'ⓦ', + 'Ⓧ' => 'ⓧ', + 'Ⓨ' => 'ⓨ', + 'Ⓩ' => 'ⓩ', + 'Ⰰ' => 'ⰰ', + 'Ⰱ' => 'ⰱ', + 'Ⰲ' => 'ⰲ', + 'Ⰳ' => 'ⰳ', + 'Ⰴ' => 'ⰴ', + 'Ⰵ' => 'ⰵ', + 'Ⰶ' => 'ⰶ', + 'Ⰷ' => 'ⰷ', + 'Ⰸ' => 'ⰸ', + 'Ⰹ' => 'ⰹ', + 'Ⰺ' => 'ⰺ', + 'Ⰻ' => 'ⰻ', + 'Ⰼ' => 'ⰼ', + 'Ⰽ' => 'ⰽ', + 'Ⰾ' => 'ⰾ', + 'Ⰿ' => 'ⰿ', + 'Ⱀ' => 'ⱀ', + 'Ⱁ' => 'ⱁ', + 'Ⱂ' => 'ⱂ', + 'Ⱃ' => 'ⱃ', + 'Ⱄ' => 'ⱄ', + 'Ⱅ' => 'ⱅ', + 'Ⱆ' => 'ⱆ', + 'Ⱇ' => 'ⱇ', + 'Ⱈ' => 'ⱈ', + 'Ⱉ' => 'ⱉ', + 'Ⱊ' => 'ⱊ', + 'Ⱋ' => 'ⱋ', + 'Ⱌ' => 'ⱌ', + 'Ⱍ' => 'ⱍ', + 'Ⱎ' => 'ⱎ', + 'Ⱏ' => 'ⱏ', + 'Ⱐ' => 'ⱐ', + 'Ⱑ' => 'ⱑ', + 'Ⱒ' => 'ⱒ', + 'Ⱓ' => 'ⱓ', + 'Ⱔ' => 'ⱔ', + 'Ⱕ' => 'ⱕ', + 'Ⱖ' => 'ⱖ', + 'Ⱗ' => 'ⱗ', + 'Ⱘ' => 'ⱘ', + 'Ⱙ' => 'ⱙ', + 'Ⱚ' => 'ⱚ', + 'Ⱛ' => 'ⱛ', + 'Ⱜ' => 'ⱜ', + 'Ⱝ' => 'ⱝ', + 'Ⱞ' => 'ⱞ', + 'Ⱡ' => 'ⱡ', + 'Ɫ' => 'ɫ', + 'Ᵽ' => 'ᵽ', + 'Ɽ' => 'ɽ', + 'Ⱨ' => 'ⱨ', + 'Ⱪ' => 'ⱪ', + 'Ⱬ' => 'ⱬ', + 'Ɑ' => 'ɑ', + 'Ɱ' => 'ɱ', + 'Ɐ' => 'ɐ', + 'Ɒ' => 'ɒ', + 'Ⱳ' => 'ⱳ', + 'Ⱶ' => 'ⱶ', + 'Ȿ' => 'ȿ', + 'Ɀ' => 'ɀ', + 'Ⲁ' => 'ⲁ', + 'Ⲃ' => 'ⲃ', + 'Ⲅ' => 'ⲅ', + 'Ⲇ' => 'ⲇ', + 'Ⲉ' => 'ⲉ', + 'Ⲋ' => 'ⲋ', + 'Ⲍ' => 'ⲍ', + 'Ⲏ' => 'ⲏ', + 'Ⲑ' => 'ⲑ', + 'Ⲓ' => 'ⲓ', + 'Ⲕ' => 'ⲕ', + 'Ⲗ' => 'ⲗ', + 'Ⲙ' => 'ⲙ', + 'Ⲛ' => 'ⲛ', + 'Ⲝ' => 'ⲝ', + 'Ⲟ' => 'ⲟ', + 'Ⲡ' => 'ⲡ', + 'Ⲣ' => 'ⲣ', + 'Ⲥ' => 'ⲥ', + 'Ⲧ' => 'ⲧ', + 'Ⲩ' => 'ⲩ', + 'Ⲫ' => 'ⲫ', + 'Ⲭ' => 'ⲭ', + 'Ⲯ' => 'ⲯ', + 'Ⲱ' => 'ⲱ', + 'Ⲳ' => 'ⲳ', + 'Ⲵ' => 'ⲵ', + 'Ⲷ' => 'ⲷ', + 'Ⲹ' => 'ⲹ', + 'Ⲻ' => 'ⲻ', + 'Ⲽ' => 'ⲽ', + 'Ⲿ' => 'ⲿ', + 'Ⳁ' => 'ⳁ', + 'Ⳃ' => 'ⳃ', + 'Ⳅ' => 'ⳅ', + 'Ⳇ' => 'ⳇ', + 'Ⳉ' => 'ⳉ', + 'Ⳋ' => 'ⳋ', + 'Ⳍ' => 'ⳍ', + 'Ⳏ' => 'ⳏ', + 'Ⳑ' => 'ⳑ', + 'Ⳓ' => 'ⳓ', + 'Ⳕ' => 'ⳕ', + 'Ⳗ' => 'ⳗ', + 'Ⳙ' => 'ⳙ', + 'Ⳛ' => 'ⳛ', + 'Ⳝ' => 'ⳝ', + 'Ⳟ' => 'ⳟ', + 'Ⳡ' => 'ⳡ', + 'Ⳣ' => 'ⳣ', + 'Ⳬ' => 'ⳬ', + 'Ⳮ' => 'ⳮ', + 'Ⳳ' => 'ⳳ', + 'Ꙁ' => 'ꙁ', + 'Ꙃ' => 'ꙃ', + 'Ꙅ' => 'ꙅ', + 'Ꙇ' => 'ꙇ', + 'Ꙉ' => 'ꙉ', + 'Ꙋ' => 'ꙋ', + 'Ꙍ' => 'ꙍ', + 'Ꙏ' => 'ꙏ', + 'Ꙑ' => 'ꙑ', + 'Ꙓ' => 'ꙓ', + 'Ꙕ' => 'ꙕ', + 'Ꙗ' => 'ꙗ', + 'Ꙙ' => 'ꙙ', + 'Ꙛ' => 'ꙛ', + 'Ꙝ' => 'ꙝ', + 'Ꙟ' => 'ꙟ', + 'Ꙡ' => 'ꙡ', + 'Ꙣ' => 'ꙣ', + 'Ꙥ' => 'ꙥ', + 'Ꙧ' => 'ꙧ', + 'Ꙩ' => 'ꙩ', + 'Ꙫ' => 'ꙫ', + 'Ꙭ' => 'ꙭ', + 'Ꚁ' => 'ꚁ', + 'Ꚃ' => 'ꚃ', + 'Ꚅ' => 'ꚅ', + 'Ꚇ' => 'ꚇ', + 'Ꚉ' => 'ꚉ', + 'Ꚋ' => 'ꚋ', + 'Ꚍ' => 'ꚍ', + 'Ꚏ' => 'ꚏ', + 'Ꚑ' => 'ꚑ', + 'Ꚓ' => 'ꚓ', + 'Ꚕ' => 'ꚕ', + 'Ꚗ' => 'ꚗ', + 'Ꚙ' => 'ꚙ', + 'Ꚛ' => 'ꚛ', + 'Ꜣ' => 'ꜣ', + 'Ꜥ' => 'ꜥ', + 'Ꜧ' => 'ꜧ', + 'Ꜩ' => 'ꜩ', + 'Ꜫ' => 'ꜫ', + 'Ꜭ' => 'ꜭ', + 'Ꜯ' => 'ꜯ', + 'Ꜳ' => 'ꜳ', + 'Ꜵ' => 'ꜵ', + 'Ꜷ' => 'ꜷ', + 'Ꜹ' => 'ꜹ', + 'Ꜻ' => 'ꜻ', + 'Ꜽ' => 'ꜽ', + 'Ꜿ' => 'ꜿ', + 'Ꝁ' => 'ꝁ', + 'Ꝃ' => 'ꝃ', + 'Ꝅ' => 'ꝅ', + 'Ꝇ' => 'ꝇ', + 'Ꝉ' => 'ꝉ', + 'Ꝋ' => 'ꝋ', + 'Ꝍ' => 'ꝍ', + 'Ꝏ' => 'ꝏ', + 'Ꝑ' => 'ꝑ', + 'Ꝓ' => 'ꝓ', + 'Ꝕ' => 'ꝕ', + 'Ꝗ' => 'ꝗ', + 'Ꝙ' => 'ꝙ', + 'Ꝛ' => 'ꝛ', + 'Ꝝ' => 'ꝝ', + 'Ꝟ' => 'ꝟ', + 'Ꝡ' => 'ꝡ', + 'Ꝣ' => 'ꝣ', + 'Ꝥ' => 'ꝥ', + 'Ꝧ' => 'ꝧ', + 'Ꝩ' => 'ꝩ', + 'Ꝫ' => 'ꝫ', + 'Ꝭ' => 'ꝭ', + 'Ꝯ' => 'ꝯ', + 'Ꝺ' => 'ꝺ', + 'Ꝼ' => 'ꝼ', + 'Ᵹ' => 'ᵹ', + 'Ꝿ' => 'ꝿ', + 'Ꞁ' => 'ꞁ', + 'Ꞃ' => 'ꞃ', + 'Ꞅ' => 'ꞅ', + 'Ꞇ' => 'ꞇ', + 'Ꞌ' => 'ꞌ', + 'Ɥ' => 'ɥ', + 'Ꞑ' => 'ꞑ', + 'Ꞓ' => 'ꞓ', + 'Ꞗ' => 'ꞗ', + 'Ꞙ' => 'ꞙ', + 'Ꞛ' => 'ꞛ', + 'Ꞝ' => 'ꞝ', + 'Ꞟ' => 'ꞟ', + 'Ꞡ' => 'ꞡ', + 'Ꞣ' => 'ꞣ', + 'Ꞥ' => 'ꞥ', + 'Ꞧ' => 'ꞧ', + 'Ꞩ' => 'ꞩ', + 'Ɦ' => 'ɦ', + 'Ɜ' => 'ɜ', + 'Ɡ' => 'ɡ', + 'Ɬ' => 'ɬ', + 'Ɪ' => 'ɪ', + 'Ʞ' => 'ʞ', + 'Ʇ' => 'ʇ', + 'Ʝ' => 'ʝ', + 'Ꭓ' => 'ꭓ', + 'Ꞵ' => 'ꞵ', + 'Ꞷ' => 'ꞷ', + 'Ꞹ' => 'ꞹ', + 'Ꞻ' => 'ꞻ', + 'Ꞽ' => 'ꞽ', + 'Ꞿ' => 'ꞿ', + 'Ꟃ' => 'ꟃ', + 'Ꞔ' => 'ꞔ', + 'Ʂ' => 'ʂ', + 'Ᶎ' => 'ᶎ', + 'Ꟈ' => 'ꟈ', + 'Ꟊ' => 'ꟊ', + 'Ꟶ' => 'ꟶ', + 'A' => 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + '𐐀' => '𐐨', + '𐐁' => '𐐩', + '𐐂' => '𐐪', + '𐐃' => '𐐫', + '𐐄' => '𐐬', + '𐐅' => '𐐭', + '𐐆' => '𐐮', + '𐐇' => '𐐯', + '𐐈' => '𐐰', + '𐐉' => '𐐱', + '𐐊' => '𐐲', + '𐐋' => '𐐳', + '𐐌' => '𐐴', + '𐐍' => '𐐵', + '𐐎' => '𐐶', + '𐐏' => '𐐷', + '𐐐' => '𐐸', + '𐐑' => '𐐹', + '𐐒' => '𐐺', + '𐐓' => '𐐻', + '𐐔' => '𐐼', + '𐐕' => '𐐽', + '𐐖' => '𐐾', + '𐐗' => '𐐿', + '𐐘' => '𐑀', + '𐐙' => '𐑁', + '𐐚' => '𐑂', + '𐐛' => '𐑃', + '𐐜' => '𐑄', + '𐐝' => '𐑅', + '𐐞' => '𐑆', + '𐐟' => '𐑇', + '𐐠' => '𐑈', + '𐐡' => '𐑉', + '𐐢' => '𐑊', + '𐐣' => '𐑋', + '𐐤' => '𐑌', + '𐐥' => '𐑍', + '𐐦' => '𐑎', + '𐐧' => '𐑏', + '𐒰' => '𐓘', + '𐒱' => '𐓙', + '𐒲' => '𐓚', + '𐒳' => '𐓛', + '𐒴' => '𐓜', + '𐒵' => '𐓝', + '𐒶' => '𐓞', + '𐒷' => '𐓟', + '𐒸' => '𐓠', + '𐒹' => '𐓡', + '𐒺' => '𐓢', + '𐒻' => '𐓣', + '𐒼' => '𐓤', + '𐒽' => '𐓥', + '𐒾' => '𐓦', + '𐒿' => '𐓧', + '𐓀' => '𐓨', + '𐓁' => '𐓩', + '𐓂' => '𐓪', + '𐓃' => '𐓫', + '𐓄' => '𐓬', + '𐓅' => '𐓭', + '𐓆' => '𐓮', + '𐓇' => '𐓯', + '𐓈' => '𐓰', + '𐓉' => '𐓱', + '𐓊' => '𐓲', + '𐓋' => '𐓳', + '𐓌' => '𐓴', + '𐓍' => '𐓵', + '𐓎' => '𐓶', + '𐓏' => '𐓷', + '𐓐' => '𐓸', + '𐓑' => '𐓹', + '𐓒' => '𐓺', + '𐓓' => '𐓻', + '𐲀' => '𐳀', + '𐲁' => '𐳁', + '𐲂' => '𐳂', + '𐲃' => '𐳃', + '𐲄' => '𐳄', + '𐲅' => '𐳅', + '𐲆' => '𐳆', + '𐲇' => '𐳇', + '𐲈' => '𐳈', + '𐲉' => '𐳉', + '𐲊' => '𐳊', + '𐲋' => '𐳋', + '𐲌' => '𐳌', + '𐲍' => '𐳍', + '𐲎' => '𐳎', + '𐲏' => '𐳏', + '𐲐' => '𐳐', + '𐲑' => '𐳑', + '𐲒' => '𐳒', + '𐲓' => '𐳓', + '𐲔' => '𐳔', + '𐲕' => '𐳕', + '𐲖' => '𐳖', + '𐲗' => '𐳗', + '𐲘' => '𐳘', + '𐲙' => '𐳙', + '𐲚' => '𐳚', + '𐲛' => '𐳛', + '𐲜' => '𐳜', + '𐲝' => '𐳝', + '𐲞' => '𐳞', + '𐲟' => '𐳟', + '𐲠' => '𐳠', + '𐲡' => '𐳡', + '𐲢' => '𐳢', + '𐲣' => '𐳣', + '𐲤' => '𐳤', + '𐲥' => '𐳥', + '𐲦' => '𐳦', + '𐲧' => '𐳧', + '𐲨' => '𐳨', + '𐲩' => '𐳩', + '𐲪' => '𐳪', + '𐲫' => '𐳫', + '𐲬' => '𐳬', + '𐲭' => '𐳭', + '𐲮' => '𐳮', + '𐲯' => '𐳯', + '𐲰' => '𐳰', + '𐲱' => '𐳱', + '𐲲' => '𐳲', + '𑢠' => '𑣀', + '𑢡' => '𑣁', + '𑢢' => '𑣂', + '𑢣' => '𑣃', + '𑢤' => '𑣄', + '𑢥' => '𑣅', + '𑢦' => '𑣆', + '𑢧' => '𑣇', + '𑢨' => '𑣈', + '𑢩' => '𑣉', + '𑢪' => '𑣊', + '𑢫' => '𑣋', + '𑢬' => '𑣌', + '𑢭' => '𑣍', + '𑢮' => '𑣎', + '𑢯' => '𑣏', + '𑢰' => '𑣐', + '𑢱' => '𑣑', + '𑢲' => '𑣒', + '𑢳' => '𑣓', + '𑢴' => '𑣔', + '𑢵' => '𑣕', + '𑢶' => '𑣖', + '𑢷' => '𑣗', + '𑢸' => '𑣘', + '𑢹' => '𑣙', + '𑢺' => '𑣚', + '𑢻' => '𑣛', + '𑢼' => '𑣜', + '𑢽' => '𑣝', + '𑢾' => '𑣞', + '𑢿' => '𑣟', + '𖹀' => '𖹠', + '𖹁' => '𖹡', + '𖹂' => '𖹢', + '𖹃' => '𖹣', + '𖹄' => '𖹤', + '𖹅' => '𖹥', + '𖹆' => '𖹦', + '𖹇' => '𖹧', + '𖹈' => '𖹨', + '𖹉' => '𖹩', + '𖹊' => '𖹪', + '𖹋' => '𖹫', + '𖹌' => '𖹬', + '𖹍' => '𖹭', + '𖹎' => '𖹮', + '𖹏' => '𖹯', + '𖹐' => '𖹰', + '𖹑' => '𖹱', + '𖹒' => '𖹲', + '𖹓' => '𖹳', + '𖹔' => '𖹴', + '𖹕' => '𖹵', + '𖹖' => '𖹶', + '𖹗' => '𖹷', + '𖹘' => '𖹸', + '𖹙' => '𖹹', + '𖹚' => '𖹺', + '𖹛' => '𖹻', + '𖹜' => '𖹼', + '𖹝' => '𖹽', + '𖹞' => '𖹾', + '𖹟' => '𖹿', + '𞤀' => '𞤢', + '𞤁' => '𞤣', + '𞤂' => '𞤤', + '𞤃' => '𞤥', + '𞤄' => '𞤦', + '𞤅' => '𞤧', + '𞤆' => '𞤨', + '𞤇' => '𞤩', + '𞤈' => '𞤪', + '𞤉' => '𞤫', + '𞤊' => '𞤬', + '𞤋' => '𞤭', + '𞤌' => '𞤮', + '𞤍' => '𞤯', + '𞤎' => '𞤰', + '𞤏' => '𞤱', + '𞤐' => '𞤲', + '𞤑' => '𞤳', + '𞤒' => '𞤴', + '𞤓' => '𞤵', + '𞤔' => '𞤶', + '𞤕' => '𞤷', + '𞤖' => '𞤸', + '𞤗' => '𞤹', + '𞤘' => '𞤺', + '𞤙' => '𞤻', + '𞤚' => '𞤼', + '𞤛' => '𞤽', + '𞤜' => '𞤾', + '𞤝' => '𞤿', + '𞤞' => '𞥀', + '𞤟' => '𞥁', + '𞤠' => '𞥂', + '𞤡' => '𞥃', +); diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php new file mode 100644 index 0000000..56b9cb8 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php @@ -0,0 +1,1489 @@ + 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + 'µ' => 'Μ', + 'à' => 'À', + 'á' => 'Á', + 'â' => 'Â', + 'ã' => 'Ã', + 'ä' => 'Ä', + 'å' => 'Å', + 'æ' => 'Æ', + 'ç' => 'Ç', + 'è' => 'È', + 'é' => 'É', + 'ê' => 'Ê', + 'ë' => 'Ë', + 'ì' => 'Ì', + 'í' => 'Í', + 'î' => 'Î', + 'ï' => 'Ï', + 'ð' => 'Ð', + 'ñ' => 'Ñ', + 'ò' => 'Ò', + 'ó' => 'Ó', + 'ô' => 'Ô', + 'õ' => 'Õ', + 'ö' => 'Ö', + 'ø' => 'Ø', + 'ù' => 'Ù', + 'ú' => 'Ú', + 'û' => 'Û', + 'ü' => 'Ü', + 'ý' => 'Ý', + 'þ' => 'Þ', + 'ÿ' => 'Ÿ', + 'ā' => 'Ā', + 'ă' => 'Ă', + 'ą' => 'Ą', + 'ć' => 'Ć', + 'ĉ' => 'Ĉ', + 'ċ' => 'Ċ', + 'č' => 'Č', + 'ď' => 'Ď', + 'đ' => 'Đ', + 'ē' => 'Ē', + 'ĕ' => 'Ĕ', + 'ė' => 'Ė', + 'ę' => 'Ę', + 'ě' => 'Ě', + 'ĝ' => 'Ĝ', + 'ğ' => 'Ğ', + 'ġ' => 'Ġ', + 'ģ' => 'Ģ', + 'ĥ' => 'Ĥ', + 'ħ' => 'Ħ', + 'ĩ' => 'Ĩ', + 'ī' => 'Ī', + 'ĭ' => 'Ĭ', + 'į' => 'Į', + 'ı' => 'I', + 'ij' => 'IJ', + 'ĵ' => 'Ĵ', + 'ķ' => 'Ķ', + 'ĺ' => 'Ĺ', + 'ļ' => 'Ļ', + 'ľ' => 'Ľ', + 'ŀ' => 'Ŀ', + 'ł' => 'Ł', + 'ń' => 'Ń', + 'ņ' => 'Ņ', + 'ň' => 'Ň', + 'ŋ' => 'Ŋ', + 'ō' => 'Ō', + 'ŏ' => 'Ŏ', + 'ő' => 'Ő', + 'œ' => 'Œ', + 'ŕ' => 'Ŕ', + 'ŗ' => 'Ŗ', + 'ř' => 'Ř', + 'ś' => 'Ś', + 'ŝ' => 'Ŝ', + 'ş' => 'Ş', + 'š' => 'Š', + 'ţ' => 'Ţ', + 'ť' => 'Ť', + 'ŧ' => 'Ŧ', + 'ũ' => 'Ũ', + 'ū' => 'Ū', + 'ŭ' => 'Ŭ', + 'ů' => 'Ů', + 'ű' => 'Ű', + 'ų' => 'Ų', + 'ŵ' => 'Ŵ', + 'ŷ' => 'Ŷ', + 'ź' => 'Ź', + 'ż' => 'Ż', + 'ž' => 'Ž', + 'ſ' => 'S', + 'ƀ' => 'Ƀ', + 'ƃ' => 'Ƃ', + 'ƅ' => 'Ƅ', + 'ƈ' => 'Ƈ', + 'ƌ' => 'Ƌ', + 'ƒ' => 'Ƒ', + 'ƕ' => 'Ƕ', + 'ƙ' => 'Ƙ', + 'ƚ' => 'Ƚ', + 'ƞ' => 'Ƞ', + 'ơ' => 'Ơ', + 'ƣ' => 'Ƣ', + 'ƥ' => 'Ƥ', + 'ƨ' => 'Ƨ', + 'ƭ' => 'Ƭ', + 'ư' => 'Ư', + 'ƴ' => 'Ƴ', + 'ƶ' => 'Ƶ', + 'ƹ' => 'Ƹ', + 'ƽ' => 'Ƽ', + 'ƿ' => 'Ƿ', + 'Dž' => 'DŽ', + 'dž' => 'DŽ', + 'Lj' => 'LJ', + 'lj' => 'LJ', + 'Nj' => 'NJ', + 'nj' => 'NJ', + 'ǎ' => 'Ǎ', + 'ǐ' => 'Ǐ', + 'ǒ' => 'Ǒ', + 'ǔ' => 'Ǔ', + 'ǖ' => 'Ǖ', + 'ǘ' => 'Ǘ', + 'ǚ' => 'Ǚ', + 'ǜ' => 'Ǜ', + 'ǝ' => 'Ǝ', + 'ǟ' => 'Ǟ', + 'ǡ' => 'Ǡ', + 'ǣ' => 'Ǣ', + 'ǥ' => 'Ǥ', + 'ǧ' => 'Ǧ', + 'ǩ' => 'Ǩ', + 'ǫ' => 'Ǫ', + 'ǭ' => 'Ǭ', + 'ǯ' => 'Ǯ', + 'Dz' => 'DZ', + 'dz' => 'DZ', + 'ǵ' => 'Ǵ', + 'ǹ' => 'Ǹ', + 'ǻ' => 'Ǻ', + 'ǽ' => 'Ǽ', + 'ǿ' => 'Ǿ', + 'ȁ' => 'Ȁ', + 'ȃ' => 'Ȃ', + 'ȅ' => 'Ȅ', + 'ȇ' => 'Ȇ', + 'ȉ' => 'Ȉ', + 'ȋ' => 'Ȋ', + 'ȍ' => 'Ȍ', + 'ȏ' => 'Ȏ', + 'ȑ' => 'Ȑ', + 'ȓ' => 'Ȓ', + 'ȕ' => 'Ȕ', + 'ȗ' => 'Ȗ', + 'ș' => 'Ș', + 'ț' => 'Ț', + 'ȝ' => 'Ȝ', + 'ȟ' => 'Ȟ', + 'ȣ' => 'Ȣ', + 'ȥ' => 'Ȥ', + 'ȧ' => 'Ȧ', + 'ȩ' => 'Ȩ', + 'ȫ' => 'Ȫ', + 'ȭ' => 'Ȭ', + 'ȯ' => 'Ȯ', + 'ȱ' => 'Ȱ', + 'ȳ' => 'Ȳ', + 'ȼ' => 'Ȼ', + 'ȿ' => 'Ȿ', + 'ɀ' => 'Ɀ', + 'ɂ' => 'Ɂ', + 'ɇ' => 'Ɇ', + 'ɉ' => 'Ɉ', + 'ɋ' => 'Ɋ', + 'ɍ' => 'Ɍ', + 'ɏ' => 'Ɏ', + 'ɐ' => 'Ɐ', + 'ɑ' => 'Ɑ', + 'ɒ' => 'Ɒ', + 'ɓ' => 'Ɓ', + 'ɔ' => 'Ɔ', + 'ɖ' => 'Ɖ', + 'ɗ' => 'Ɗ', + 'ə' => 'Ə', + 'ɛ' => 'Ɛ', + 'ɜ' => 'Ɜ', + 'ɠ' => 'Ɠ', + 'ɡ' => 'Ɡ', + 'ɣ' => 'Ɣ', + 'ɥ' => 'Ɥ', + 'ɦ' => 'Ɦ', + 'ɨ' => 'Ɨ', + 'ɩ' => 'Ɩ', + 'ɪ' => 'Ɪ', + 'ɫ' => 'Ɫ', + 'ɬ' => 'Ɬ', + 'ɯ' => 'Ɯ', + 'ɱ' => 'Ɱ', + 'ɲ' => 'Ɲ', + 'ɵ' => 'Ɵ', + 'ɽ' => 'Ɽ', + 'ʀ' => 'Ʀ', + 'ʂ' => 'Ʂ', + 'ʃ' => 'Ʃ', + 'ʇ' => 'Ʇ', + 'ʈ' => 'Ʈ', + 'ʉ' => 'Ʉ', + 'ʊ' => 'Ʊ', + 'ʋ' => 'Ʋ', + 'ʌ' => 'Ʌ', + 'ʒ' => 'Ʒ', + 'ʝ' => 'Ʝ', + 'ʞ' => 'Ʞ', + 'ͅ' => 'Ι', + 'ͱ' => 'Ͱ', + 'ͳ' => 'Ͳ', + 'ͷ' => 'Ͷ', + 'ͻ' => 'Ͻ', + 'ͼ' => 'Ͼ', + 'ͽ' => 'Ͽ', + 'ά' => 'Ά', + 'έ' => 'Έ', + 'ή' => 'Ή', + 'ί' => 'Ί', + 'α' => 'Α', + 'β' => 'Β', + 'γ' => 'Γ', + 'δ' => 'Δ', + 'ε' => 'Ε', + 'ζ' => 'Ζ', + 'η' => 'Η', + 'θ' => 'Θ', + 'ι' => 'Ι', + 'κ' => 'Κ', + 'λ' => 'Λ', + 'μ' => 'Μ', + 'ν' => 'Ν', + 'ξ' => 'Ξ', + 'ο' => 'Ο', + 'π' => 'Π', + 'ρ' => 'Ρ', + 'ς' => 'Σ', + 'σ' => 'Σ', + 'τ' => 'Τ', + 'υ' => 'Υ', + 'φ' => 'Φ', + 'χ' => 'Χ', + 'ψ' => 'Ψ', + 'ω' => 'Ω', + 'ϊ' => 'Ϊ', + 'ϋ' => 'Ϋ', + 'ό' => 'Ό', + 'ύ' => 'Ύ', + 'ώ' => 'Ώ', + 'ϐ' => 'Β', + 'ϑ' => 'Θ', + 'ϕ' => 'Φ', + 'ϖ' => 'Π', + 'ϗ' => 'Ϗ', + 'ϙ' => 'Ϙ', + 'ϛ' => 'Ϛ', + 'ϝ' => 'Ϝ', + 'ϟ' => 'Ϟ', + 'ϡ' => 'Ϡ', + 'ϣ' => 'Ϣ', + 'ϥ' => 'Ϥ', + 'ϧ' => 'Ϧ', + 'ϩ' => 'Ϩ', + 'ϫ' => 'Ϫ', + 'ϭ' => 'Ϭ', + 'ϯ' => 'Ϯ', + 'ϰ' => 'Κ', + 'ϱ' => 'Ρ', + 'ϲ' => 'Ϲ', + 'ϳ' => 'Ϳ', + 'ϵ' => 'Ε', + 'ϸ' => 'Ϸ', + 'ϻ' => 'Ϻ', + 'а' => 'А', + 'б' => 'Б', + 'в' => 'В', + 'г' => 'Г', + 'д' => 'Д', + 'е' => 'Е', + 'ж' => 'Ж', + 'з' => 'З', + 'и' => 'И', + 'й' => 'Й', + 'к' => 'К', + 'л' => 'Л', + 'м' => 'М', + 'н' => 'Н', + 'о' => 'О', + 'п' => 'П', + 'р' => 'Р', + 'с' => 'С', + 'т' => 'Т', + 'у' => 'У', + 'ф' => 'Ф', + 'х' => 'Х', + 'ц' => 'Ц', + 'ч' => 'Ч', + 'ш' => 'Ш', + 'щ' => 'Щ', + 'ъ' => 'Ъ', + 'ы' => 'Ы', + 'ь' => 'Ь', + 'э' => 'Э', + 'ю' => 'Ю', + 'я' => 'Я', + 'ѐ' => 'Ѐ', + 'ё' => 'Ё', + 'ђ' => 'Ђ', + 'ѓ' => 'Ѓ', + 'є' => 'Є', + 'ѕ' => 'Ѕ', + 'і' => 'І', + 'ї' => 'Ї', + 'ј' => 'Ј', + 'љ' => 'Љ', + 'њ' => 'Њ', + 'ћ' => 'Ћ', + 'ќ' => 'Ќ', + 'ѝ' => 'Ѝ', + 'ў' => 'Ў', + 'џ' => 'Џ', + 'ѡ' => 'Ѡ', + 'ѣ' => 'Ѣ', + 'ѥ' => 'Ѥ', + 'ѧ' => 'Ѧ', + 'ѩ' => 'Ѩ', + 'ѫ' => 'Ѫ', + 'ѭ' => 'Ѭ', + 'ѯ' => 'Ѯ', + 'ѱ' => 'Ѱ', + 'ѳ' => 'Ѳ', + 'ѵ' => 'Ѵ', + 'ѷ' => 'Ѷ', + 'ѹ' => 'Ѹ', + 'ѻ' => 'Ѻ', + 'ѽ' => 'Ѽ', + 'ѿ' => 'Ѿ', + 'ҁ' => 'Ҁ', + 'ҋ' => 'Ҋ', + 'ҍ' => 'Ҍ', + 'ҏ' => 'Ҏ', + 'ґ' => 'Ґ', + 'ғ' => 'Ғ', + 'ҕ' => 'Ҕ', + 'җ' => 'Җ', + 'ҙ' => 'Ҙ', + 'қ' => 'Қ', + 'ҝ' => 'Ҝ', + 'ҟ' => 'Ҟ', + 'ҡ' => 'Ҡ', + 'ң' => 'Ң', + 'ҥ' => 'Ҥ', + 'ҧ' => 'Ҧ', + 'ҩ' => 'Ҩ', + 'ҫ' => 'Ҫ', + 'ҭ' => 'Ҭ', + 'ү' => 'Ү', + 'ұ' => 'Ұ', + 'ҳ' => 'Ҳ', + 'ҵ' => 'Ҵ', + 'ҷ' => 'Ҷ', + 'ҹ' => 'Ҹ', + 'һ' => 'Һ', + 'ҽ' => 'Ҽ', + 'ҿ' => 'Ҿ', + 'ӂ' => 'Ӂ', + 'ӄ' => 'Ӄ', + 'ӆ' => 'Ӆ', + 'ӈ' => 'Ӈ', + 'ӊ' => 'Ӊ', + 'ӌ' => 'Ӌ', + 'ӎ' => 'Ӎ', + 'ӏ' => 'Ӏ', + 'ӑ' => 'Ӑ', + 'ӓ' => 'Ӓ', + 'ӕ' => 'Ӕ', + 'ӗ' => 'Ӗ', + 'ә' => 'Ә', + 'ӛ' => 'Ӛ', + 'ӝ' => 'Ӝ', + 'ӟ' => 'Ӟ', + 'ӡ' => 'Ӡ', + 'ӣ' => 'Ӣ', + 'ӥ' => 'Ӥ', + 'ӧ' => 'Ӧ', + 'ө' => 'Ө', + 'ӫ' => 'Ӫ', + 'ӭ' => 'Ӭ', + 'ӯ' => 'Ӯ', + 'ӱ' => 'Ӱ', + 'ӳ' => 'Ӳ', + 'ӵ' => 'Ӵ', + 'ӷ' => 'Ӷ', + 'ӹ' => 'Ӹ', + 'ӻ' => 'Ӻ', + 'ӽ' => 'Ӽ', + 'ӿ' => 'Ӿ', + 'ԁ' => 'Ԁ', + 'ԃ' => 'Ԃ', + 'ԅ' => 'Ԅ', + 'ԇ' => 'Ԇ', + 'ԉ' => 'Ԉ', + 'ԋ' => 'Ԋ', + 'ԍ' => 'Ԍ', + 'ԏ' => 'Ԏ', + 'ԑ' => 'Ԑ', + 'ԓ' => 'Ԓ', + 'ԕ' => 'Ԕ', + 'ԗ' => 'Ԗ', + 'ԙ' => 'Ԙ', + 'ԛ' => 'Ԛ', + 'ԝ' => 'Ԝ', + 'ԟ' => 'Ԟ', + 'ԡ' => 'Ԡ', + 'ԣ' => 'Ԣ', + 'ԥ' => 'Ԥ', + 'ԧ' => 'Ԧ', + 'ԩ' => 'Ԩ', + 'ԫ' => 'Ԫ', + 'ԭ' => 'Ԭ', + 'ԯ' => 'Ԯ', + 'ա' => 'Ա', + 'բ' => 'Բ', + 'գ' => 'Գ', + 'դ' => 'Դ', + 'ե' => 'Ե', + 'զ' => 'Զ', + 'է' => 'Է', + 'ը' => 'Ը', + 'թ' => 'Թ', + 'ժ' => 'Ժ', + 'ի' => 'Ի', + 'լ' => 'Լ', + 'խ' => 'Խ', + 'ծ' => 'Ծ', + 'կ' => 'Կ', + 'հ' => 'Հ', + 'ձ' => 'Ձ', + 'ղ' => 'Ղ', + 'ճ' => 'Ճ', + 'մ' => 'Մ', + 'յ' => 'Յ', + 'ն' => 'Ն', + 'շ' => 'Շ', + 'ո' => 'Ո', + 'չ' => 'Չ', + 'պ' => 'Պ', + 'ջ' => 'Ջ', + 'ռ' => 'Ռ', + 'ս' => 'Ս', + 'վ' => 'Վ', + 'տ' => 'Տ', + 'ր' => 'Ր', + 'ց' => 'Ց', + 'ւ' => 'Ւ', + 'փ' => 'Փ', + 'ք' => 'Ք', + 'օ' => 'Օ', + 'ֆ' => 'Ֆ', + 'ა' => 'Ა', + 'ბ' => 'Ბ', + 'გ' => 'Გ', + 'დ' => 'Დ', + 'ე' => 'Ე', + 'ვ' => 'Ვ', + 'ზ' => 'Ზ', + 'თ' => 'Თ', + 'ი' => 'Ი', + 'კ' => 'Კ', + 'ლ' => 'Ლ', + 'მ' => 'Მ', + 'ნ' => 'Ნ', + 'ო' => 'Ო', + 'პ' => 'Პ', + 'ჟ' => 'Ჟ', + 'რ' => 'Რ', + 'ს' => 'Ს', + 'ტ' => 'Ტ', + 'უ' => 'Უ', + 'ფ' => 'Ფ', + 'ქ' => 'Ქ', + 'ღ' => 'Ღ', + 'ყ' => 'Ყ', + 'შ' => 'Შ', + 'ჩ' => 'Ჩ', + 'ც' => 'Ც', + 'ძ' => 'Ძ', + 'წ' => 'Წ', + 'ჭ' => 'Ჭ', + 'ხ' => 'Ხ', + 'ჯ' => 'Ჯ', + 'ჰ' => 'Ჰ', + 'ჱ' => 'Ჱ', + 'ჲ' => 'Ჲ', + 'ჳ' => 'Ჳ', + 'ჴ' => 'Ჴ', + 'ჵ' => 'Ჵ', + 'ჶ' => 'Ჶ', + 'ჷ' => 'Ჷ', + 'ჸ' => 'Ჸ', + 'ჹ' => 'Ჹ', + 'ჺ' => 'Ჺ', + 'ჽ' => 'Ჽ', + 'ჾ' => 'Ჾ', + 'ჿ' => 'Ჿ', + 'ᏸ' => 'Ᏸ', + 'ᏹ' => 'Ᏹ', + 'ᏺ' => 'Ᏺ', + 'ᏻ' => 'Ᏻ', + 'ᏼ' => 'Ᏼ', + 'ᏽ' => 'Ᏽ', + 'ᲀ' => 'В', + 'ᲁ' => 'Д', + 'ᲂ' => 'О', + 'ᲃ' => 'С', + 'ᲄ' => 'Т', + 'ᲅ' => 'Т', + 'ᲆ' => 'Ъ', + 'ᲇ' => 'Ѣ', + 'ᲈ' => 'Ꙋ', + 'ᵹ' => 'Ᵹ', + 'ᵽ' => 'Ᵽ', + 'ᶎ' => 'Ᶎ', + 'ḁ' => 'Ḁ', + 'ḃ' => 'Ḃ', + 'ḅ' => 'Ḅ', + 'ḇ' => 'Ḇ', + 'ḉ' => 'Ḉ', + 'ḋ' => 'Ḋ', + 'ḍ' => 'Ḍ', + 'ḏ' => 'Ḏ', + 'ḑ' => 'Ḑ', + 'ḓ' => 'Ḓ', + 'ḕ' => 'Ḕ', + 'ḗ' => 'Ḗ', + 'ḙ' => 'Ḙ', + 'ḛ' => 'Ḛ', + 'ḝ' => 'Ḝ', + 'ḟ' => 'Ḟ', + 'ḡ' => 'Ḡ', + 'ḣ' => 'Ḣ', + 'ḥ' => 'Ḥ', + 'ḧ' => 'Ḧ', + 'ḩ' => 'Ḩ', + 'ḫ' => 'Ḫ', + 'ḭ' => 'Ḭ', + 'ḯ' => 'Ḯ', + 'ḱ' => 'Ḱ', + 'ḳ' => 'Ḳ', + 'ḵ' => 'Ḵ', + 'ḷ' => 'Ḷ', + 'ḹ' => 'Ḹ', + 'ḻ' => 'Ḻ', + 'ḽ' => 'Ḽ', + 'ḿ' => 'Ḿ', + 'ṁ' => 'Ṁ', + 'ṃ' => 'Ṃ', + 'ṅ' => 'Ṅ', + 'ṇ' => 'Ṇ', + 'ṉ' => 'Ṉ', + 'ṋ' => 'Ṋ', + 'ṍ' => 'Ṍ', + 'ṏ' => 'Ṏ', + 'ṑ' => 'Ṑ', + 'ṓ' => 'Ṓ', + 'ṕ' => 'Ṕ', + 'ṗ' => 'Ṗ', + 'ṙ' => 'Ṙ', + 'ṛ' => 'Ṛ', + 'ṝ' => 'Ṝ', + 'ṟ' => 'Ṟ', + 'ṡ' => 'Ṡ', + 'ṣ' => 'Ṣ', + 'ṥ' => 'Ṥ', + 'ṧ' => 'Ṧ', + 'ṩ' => 'Ṩ', + 'ṫ' => 'Ṫ', + 'ṭ' => 'Ṭ', + 'ṯ' => 'Ṯ', + 'ṱ' => 'Ṱ', + 'ṳ' => 'Ṳ', + 'ṵ' => 'Ṵ', + 'ṷ' => 'Ṷ', + 'ṹ' => 'Ṹ', + 'ṻ' => 'Ṻ', + 'ṽ' => 'Ṽ', + 'ṿ' => 'Ṿ', + 'ẁ' => 'Ẁ', + 'ẃ' => 'Ẃ', + 'ẅ' => 'Ẅ', + 'ẇ' => 'Ẇ', + 'ẉ' => 'Ẉ', + 'ẋ' => 'Ẋ', + 'ẍ' => 'Ẍ', + 'ẏ' => 'Ẏ', + 'ẑ' => 'Ẑ', + 'ẓ' => 'Ẓ', + 'ẕ' => 'Ẕ', + 'ẛ' => 'Ṡ', + 'ạ' => 'Ạ', + 'ả' => 'Ả', + 'ấ' => 'Ấ', + 'ầ' => 'Ầ', + 'ẩ' => 'Ẩ', + 'ẫ' => 'Ẫ', + 'ậ' => 'Ậ', + 'ắ' => 'Ắ', + 'ằ' => 'Ằ', + 'ẳ' => 'Ẳ', + 'ẵ' => 'Ẵ', + 'ặ' => 'Ặ', + 'ẹ' => 'Ẹ', + 'ẻ' => 'Ẻ', + 'ẽ' => 'Ẽ', + 'ế' => 'Ế', + 'ề' => 'Ề', + 'ể' => 'Ể', + 'ễ' => 'Ễ', + 'ệ' => 'Ệ', + 'ỉ' => 'Ỉ', + 'ị' => 'Ị', + 'ọ' => 'Ọ', + 'ỏ' => 'Ỏ', + 'ố' => 'Ố', + 'ồ' => 'Ồ', + 'ổ' => 'Ổ', + 'ỗ' => 'Ỗ', + 'ộ' => 'Ộ', + 'ớ' => 'Ớ', + 'ờ' => 'Ờ', + 'ở' => 'Ở', + 'ỡ' => 'Ỡ', + 'ợ' => 'Ợ', + 'ụ' => 'Ụ', + 'ủ' => 'Ủ', + 'ứ' => 'Ứ', + 'ừ' => 'Ừ', + 'ử' => 'Ử', + 'ữ' => 'Ữ', + 'ự' => 'Ự', + 'ỳ' => 'Ỳ', + 'ỵ' => 'Ỵ', + 'ỷ' => 'Ỷ', + 'ỹ' => 'Ỹ', + 'ỻ' => 'Ỻ', + 'ỽ' => 'Ỽ', + 'ỿ' => 'Ỿ', + 'ἀ' => 'Ἀ', + 'ἁ' => 'Ἁ', + 'ἂ' => 'Ἂ', + 'ἃ' => 'Ἃ', + 'ἄ' => 'Ἄ', + 'ἅ' => 'Ἅ', + 'ἆ' => 'Ἆ', + 'ἇ' => 'Ἇ', + 'ἐ' => 'Ἐ', + 'ἑ' => 'Ἑ', + 'ἒ' => 'Ἒ', + 'ἓ' => 'Ἓ', + 'ἔ' => 'Ἔ', + 'ἕ' => 'Ἕ', + 'ἠ' => 'Ἠ', + 'ἡ' => 'Ἡ', + 'ἢ' => 'Ἢ', + 'ἣ' => 'Ἣ', + 'ἤ' => 'Ἤ', + 'ἥ' => 'Ἥ', + 'ἦ' => 'Ἦ', + 'ἧ' => 'Ἧ', + 'ἰ' => 'Ἰ', + 'ἱ' => 'Ἱ', + 'ἲ' => 'Ἲ', + 'ἳ' => 'Ἳ', + 'ἴ' => 'Ἴ', + 'ἵ' => 'Ἵ', + 'ἶ' => 'Ἶ', + 'ἷ' => 'Ἷ', + 'ὀ' => 'Ὀ', + 'ὁ' => 'Ὁ', + 'ὂ' => 'Ὂ', + 'ὃ' => 'Ὃ', + 'ὄ' => 'Ὄ', + 'ὅ' => 'Ὅ', + 'ὑ' => 'Ὑ', + 'ὓ' => 'Ὓ', + 'ὕ' => 'Ὕ', + 'ὗ' => 'Ὗ', + 'ὠ' => 'Ὠ', + 'ὡ' => 'Ὡ', + 'ὢ' => 'Ὢ', + 'ὣ' => 'Ὣ', + 'ὤ' => 'Ὤ', + 'ὥ' => 'Ὥ', + 'ὦ' => 'Ὦ', + 'ὧ' => 'Ὧ', + 'ὰ' => 'Ὰ', + 'ά' => 'Ά', + 'ὲ' => 'Ὲ', + 'έ' => 'Έ', + 'ὴ' => 'Ὴ', + 'ή' => 'Ή', + 'ὶ' => 'Ὶ', + 'ί' => 'Ί', + 'ὸ' => 'Ὸ', + 'ό' => 'Ό', + 'ὺ' => 'Ὺ', + 'ύ' => 'Ύ', + 'ὼ' => 'Ὼ', + 'ώ' => 'Ώ', + 'ᾀ' => 'ἈΙ', + 'ᾁ' => 'ἉΙ', + 'ᾂ' => 'ἊΙ', + 'ᾃ' => 'ἋΙ', + 'ᾄ' => 'ἌΙ', + 'ᾅ' => 'ἍΙ', + 'ᾆ' => 'ἎΙ', + 'ᾇ' => 'ἏΙ', + 'ᾐ' => 'ἨΙ', + 'ᾑ' => 'ἩΙ', + 'ᾒ' => 'ἪΙ', + 'ᾓ' => 'ἫΙ', + 'ᾔ' => 'ἬΙ', + 'ᾕ' => 'ἭΙ', + 'ᾖ' => 'ἮΙ', + 'ᾗ' => 'ἯΙ', + 'ᾠ' => 'ὨΙ', + 'ᾡ' => 'ὩΙ', + 'ᾢ' => 'ὪΙ', + 'ᾣ' => 'ὫΙ', + 'ᾤ' => 'ὬΙ', + 'ᾥ' => 'ὭΙ', + 'ᾦ' => 'ὮΙ', + 'ᾧ' => 'ὯΙ', + 'ᾰ' => 'Ᾰ', + 'ᾱ' => 'Ᾱ', + 'ᾳ' => 'ΑΙ', + 'ι' => 'Ι', + 'ῃ' => 'ΗΙ', + 'ῐ' => 'Ῐ', + 'ῑ' => 'Ῑ', + 'ῠ' => 'Ῠ', + 'ῡ' => 'Ῡ', + 'ῥ' => 'Ῥ', + 'ῳ' => 'ΩΙ', + 'ⅎ' => 'Ⅎ', + 'ⅰ' => 'Ⅰ', + 'ⅱ' => 'Ⅱ', + 'ⅲ' => 'Ⅲ', + 'ⅳ' => 'Ⅳ', + 'ⅴ' => 'Ⅴ', + 'ⅵ' => 'Ⅵ', + 'ⅶ' => 'Ⅶ', + 'ⅷ' => 'Ⅷ', + 'ⅸ' => 'Ⅸ', + 'ⅹ' => 'Ⅹ', + 'ⅺ' => 'Ⅺ', + 'ⅻ' => 'Ⅻ', + 'ⅼ' => 'Ⅼ', + 'ⅽ' => 'Ⅽ', + 'ⅾ' => 'Ⅾ', + 'ⅿ' => 'Ⅿ', + 'ↄ' => 'Ↄ', + 'ⓐ' => 'Ⓐ', + 'ⓑ' => 'Ⓑ', + 'ⓒ' => 'Ⓒ', + 'ⓓ' => 'Ⓓ', + 'ⓔ' => 'Ⓔ', + 'ⓕ' => 'Ⓕ', + 'ⓖ' => 'Ⓖ', + 'ⓗ' => 'Ⓗ', + 'ⓘ' => 'Ⓘ', + 'ⓙ' => 'Ⓙ', + 'ⓚ' => 'Ⓚ', + 'ⓛ' => 'Ⓛ', + 'ⓜ' => 'Ⓜ', + 'ⓝ' => 'Ⓝ', + 'ⓞ' => 'Ⓞ', + 'ⓟ' => 'Ⓟ', + 'ⓠ' => 'Ⓠ', + 'ⓡ' => 'Ⓡ', + 'ⓢ' => 'Ⓢ', + 'ⓣ' => 'Ⓣ', + 'ⓤ' => 'Ⓤ', + 'ⓥ' => 'Ⓥ', + 'ⓦ' => 'Ⓦ', + 'ⓧ' => 'Ⓧ', + 'ⓨ' => 'Ⓨ', + 'ⓩ' => 'Ⓩ', + 'ⰰ' => 'Ⰰ', + 'ⰱ' => 'Ⰱ', + 'ⰲ' => 'Ⰲ', + 'ⰳ' => 'Ⰳ', + 'ⰴ' => 'Ⰴ', + 'ⰵ' => 'Ⰵ', + 'ⰶ' => 'Ⰶ', + 'ⰷ' => 'Ⰷ', + 'ⰸ' => 'Ⰸ', + 'ⰹ' => 'Ⰹ', + 'ⰺ' => 'Ⰺ', + 'ⰻ' => 'Ⰻ', + 'ⰼ' => 'Ⰼ', + 'ⰽ' => 'Ⰽ', + 'ⰾ' => 'Ⰾ', + 'ⰿ' => 'Ⰿ', + 'ⱀ' => 'Ⱀ', + 'ⱁ' => 'Ⱁ', + 'ⱂ' => 'Ⱂ', + 'ⱃ' => 'Ⱃ', + 'ⱄ' => 'Ⱄ', + 'ⱅ' => 'Ⱅ', + 'ⱆ' => 'Ⱆ', + 'ⱇ' => 'Ⱇ', + 'ⱈ' => 'Ⱈ', + 'ⱉ' => 'Ⱉ', + 'ⱊ' => 'Ⱊ', + 'ⱋ' => 'Ⱋ', + 'ⱌ' => 'Ⱌ', + 'ⱍ' => 'Ⱍ', + 'ⱎ' => 'Ⱎ', + 'ⱏ' => 'Ⱏ', + 'ⱐ' => 'Ⱐ', + 'ⱑ' => 'Ⱑ', + 'ⱒ' => 'Ⱒ', + 'ⱓ' => 'Ⱓ', + 'ⱔ' => 'Ⱔ', + 'ⱕ' => 'Ⱕ', + 'ⱖ' => 'Ⱖ', + 'ⱗ' => 'Ⱗ', + 'ⱘ' => 'Ⱘ', + 'ⱙ' => 'Ⱙ', + 'ⱚ' => 'Ⱚ', + 'ⱛ' => 'Ⱛ', + 'ⱜ' => 'Ⱜ', + 'ⱝ' => 'Ⱝ', + 'ⱞ' => 'Ⱞ', + 'ⱡ' => 'Ⱡ', + 'ⱥ' => 'Ⱥ', + 'ⱦ' => 'Ⱦ', + 'ⱨ' => 'Ⱨ', + 'ⱪ' => 'Ⱪ', + 'ⱬ' => 'Ⱬ', + 'ⱳ' => 'Ⱳ', + 'ⱶ' => 'Ⱶ', + 'ⲁ' => 'Ⲁ', + 'ⲃ' => 'Ⲃ', + 'ⲅ' => 'Ⲅ', + 'ⲇ' => 'Ⲇ', + 'ⲉ' => 'Ⲉ', + 'ⲋ' => 'Ⲋ', + 'ⲍ' => 'Ⲍ', + 'ⲏ' => 'Ⲏ', + 'ⲑ' => 'Ⲑ', + 'ⲓ' => 'Ⲓ', + 'ⲕ' => 'Ⲕ', + 'ⲗ' => 'Ⲗ', + 'ⲙ' => 'Ⲙ', + 'ⲛ' => 'Ⲛ', + 'ⲝ' => 'Ⲝ', + 'ⲟ' => 'Ⲟ', + 'ⲡ' => 'Ⲡ', + 'ⲣ' => 'Ⲣ', + 'ⲥ' => 'Ⲥ', + 'ⲧ' => 'Ⲧ', + 'ⲩ' => 'Ⲩ', + 'ⲫ' => 'Ⲫ', + 'ⲭ' => 'Ⲭ', + 'ⲯ' => 'Ⲯ', + 'ⲱ' => 'Ⲱ', + 'ⲳ' => 'Ⲳ', + 'ⲵ' => 'Ⲵ', + 'ⲷ' => 'Ⲷ', + 'ⲹ' => 'Ⲹ', + 'ⲻ' => 'Ⲻ', + 'ⲽ' => 'Ⲽ', + 'ⲿ' => 'Ⲿ', + 'ⳁ' => 'Ⳁ', + 'ⳃ' => 'Ⳃ', + 'ⳅ' => 'Ⳅ', + 'ⳇ' => 'Ⳇ', + 'ⳉ' => 'Ⳉ', + 'ⳋ' => 'Ⳋ', + 'ⳍ' => 'Ⳍ', + 'ⳏ' => 'Ⳏ', + 'ⳑ' => 'Ⳑ', + 'ⳓ' => 'Ⳓ', + 'ⳕ' => 'Ⳕ', + 'ⳗ' => 'Ⳗ', + 'ⳙ' => 'Ⳙ', + 'ⳛ' => 'Ⳛ', + 'ⳝ' => 'Ⳝ', + 'ⳟ' => 'Ⳟ', + 'ⳡ' => 'Ⳡ', + 'ⳣ' => 'Ⳣ', + 'ⳬ' => 'Ⳬ', + 'ⳮ' => 'Ⳮ', + 'ⳳ' => 'Ⳳ', + 'ⴀ' => 'Ⴀ', + 'ⴁ' => 'Ⴁ', + 'ⴂ' => 'Ⴂ', + 'ⴃ' => 'Ⴃ', + 'ⴄ' => 'Ⴄ', + 'ⴅ' => 'Ⴅ', + 'ⴆ' => 'Ⴆ', + 'ⴇ' => 'Ⴇ', + 'ⴈ' => 'Ⴈ', + 'ⴉ' => 'Ⴉ', + 'ⴊ' => 'Ⴊ', + 'ⴋ' => 'Ⴋ', + 'ⴌ' => 'Ⴌ', + 'ⴍ' => 'Ⴍ', + 'ⴎ' => 'Ⴎ', + 'ⴏ' => 'Ⴏ', + 'ⴐ' => 'Ⴐ', + 'ⴑ' => 'Ⴑ', + 'ⴒ' => 'Ⴒ', + 'ⴓ' => 'Ⴓ', + 'ⴔ' => 'Ⴔ', + 'ⴕ' => 'Ⴕ', + 'ⴖ' => 'Ⴖ', + 'ⴗ' => 'Ⴗ', + 'ⴘ' => 'Ⴘ', + 'ⴙ' => 'Ⴙ', + 'ⴚ' => 'Ⴚ', + 'ⴛ' => 'Ⴛ', + 'ⴜ' => 'Ⴜ', + 'ⴝ' => 'Ⴝ', + 'ⴞ' => 'Ⴞ', + 'ⴟ' => 'Ⴟ', + 'ⴠ' => 'Ⴠ', + 'ⴡ' => 'Ⴡ', + 'ⴢ' => 'Ⴢ', + 'ⴣ' => 'Ⴣ', + 'ⴤ' => 'Ⴤ', + 'ⴥ' => 'Ⴥ', + 'ⴧ' => 'Ⴧ', + 'ⴭ' => 'Ⴭ', + 'ꙁ' => 'Ꙁ', + 'ꙃ' => 'Ꙃ', + 'ꙅ' => 'Ꙅ', + 'ꙇ' => 'Ꙇ', + 'ꙉ' => 'Ꙉ', + 'ꙋ' => 'Ꙋ', + 'ꙍ' => 'Ꙍ', + 'ꙏ' => 'Ꙏ', + 'ꙑ' => 'Ꙑ', + 'ꙓ' => 'Ꙓ', + 'ꙕ' => 'Ꙕ', + 'ꙗ' => 'Ꙗ', + 'ꙙ' => 'Ꙙ', + 'ꙛ' => 'Ꙛ', + 'ꙝ' => 'Ꙝ', + 'ꙟ' => 'Ꙟ', + 'ꙡ' => 'Ꙡ', + 'ꙣ' => 'Ꙣ', + 'ꙥ' => 'Ꙥ', + 'ꙧ' => 'Ꙧ', + 'ꙩ' => 'Ꙩ', + 'ꙫ' => 'Ꙫ', + 'ꙭ' => 'Ꙭ', + 'ꚁ' => 'Ꚁ', + 'ꚃ' => 'Ꚃ', + 'ꚅ' => 'Ꚅ', + 'ꚇ' => 'Ꚇ', + 'ꚉ' => 'Ꚉ', + 'ꚋ' => 'Ꚋ', + 'ꚍ' => 'Ꚍ', + 'ꚏ' => 'Ꚏ', + 'ꚑ' => 'Ꚑ', + 'ꚓ' => 'Ꚓ', + 'ꚕ' => 'Ꚕ', + 'ꚗ' => 'Ꚗ', + 'ꚙ' => 'Ꚙ', + 'ꚛ' => 'Ꚛ', + 'ꜣ' => 'Ꜣ', + 'ꜥ' => 'Ꜥ', + 'ꜧ' => 'Ꜧ', + 'ꜩ' => 'Ꜩ', + 'ꜫ' => 'Ꜫ', + 'ꜭ' => 'Ꜭ', + 'ꜯ' => 'Ꜯ', + 'ꜳ' => 'Ꜳ', + 'ꜵ' => 'Ꜵ', + 'ꜷ' => 'Ꜷ', + 'ꜹ' => 'Ꜹ', + 'ꜻ' => 'Ꜻ', + 'ꜽ' => 'Ꜽ', + 'ꜿ' => 'Ꜿ', + 'ꝁ' => 'Ꝁ', + 'ꝃ' => 'Ꝃ', + 'ꝅ' => 'Ꝅ', + 'ꝇ' => 'Ꝇ', + 'ꝉ' => 'Ꝉ', + 'ꝋ' => 'Ꝋ', + 'ꝍ' => 'Ꝍ', + 'ꝏ' => 'Ꝏ', + 'ꝑ' => 'Ꝑ', + 'ꝓ' => 'Ꝓ', + 'ꝕ' => 'Ꝕ', + 'ꝗ' => 'Ꝗ', + 'ꝙ' => 'Ꝙ', + 'ꝛ' => 'Ꝛ', + 'ꝝ' => 'Ꝝ', + 'ꝟ' => 'Ꝟ', + 'ꝡ' => 'Ꝡ', + 'ꝣ' => 'Ꝣ', + 'ꝥ' => 'Ꝥ', + 'ꝧ' => 'Ꝧ', + 'ꝩ' => 'Ꝩ', + 'ꝫ' => 'Ꝫ', + 'ꝭ' => 'Ꝭ', + 'ꝯ' => 'Ꝯ', + 'ꝺ' => 'Ꝺ', + 'ꝼ' => 'Ꝼ', + 'ꝿ' => 'Ꝿ', + 'ꞁ' => 'Ꞁ', + 'ꞃ' => 'Ꞃ', + 'ꞅ' => 'Ꞅ', + 'ꞇ' => 'Ꞇ', + 'ꞌ' => 'Ꞌ', + 'ꞑ' => 'Ꞑ', + 'ꞓ' => 'Ꞓ', + 'ꞔ' => 'Ꞔ', + 'ꞗ' => 'Ꞗ', + 'ꞙ' => 'Ꞙ', + 'ꞛ' => 'Ꞛ', + 'ꞝ' => 'Ꞝ', + 'ꞟ' => 'Ꞟ', + 'ꞡ' => 'Ꞡ', + 'ꞣ' => 'Ꞣ', + 'ꞥ' => 'Ꞥ', + 'ꞧ' => 'Ꞧ', + 'ꞩ' => 'Ꞩ', + 'ꞵ' => 'Ꞵ', + 'ꞷ' => 'Ꞷ', + 'ꞹ' => 'Ꞹ', + 'ꞻ' => 'Ꞻ', + 'ꞽ' => 'Ꞽ', + 'ꞿ' => 'Ꞿ', + 'ꟃ' => 'Ꟃ', + 'ꟈ' => 'Ꟈ', + 'ꟊ' => 'Ꟊ', + 'ꟶ' => 'Ꟶ', + 'ꭓ' => 'Ꭓ', + 'ꭰ' => 'Ꭰ', + 'ꭱ' => 'Ꭱ', + 'ꭲ' => 'Ꭲ', + 'ꭳ' => 'Ꭳ', + 'ꭴ' => 'Ꭴ', + 'ꭵ' => 'Ꭵ', + 'ꭶ' => 'Ꭶ', + 'ꭷ' => 'Ꭷ', + 'ꭸ' => 'Ꭸ', + 'ꭹ' => 'Ꭹ', + 'ꭺ' => 'Ꭺ', + 'ꭻ' => 'Ꭻ', + 'ꭼ' => 'Ꭼ', + 'ꭽ' => 'Ꭽ', + 'ꭾ' => 'Ꭾ', + 'ꭿ' => 'Ꭿ', + 'ꮀ' => 'Ꮀ', + 'ꮁ' => 'Ꮁ', + 'ꮂ' => 'Ꮂ', + 'ꮃ' => 'Ꮃ', + 'ꮄ' => 'Ꮄ', + 'ꮅ' => 'Ꮅ', + 'ꮆ' => 'Ꮆ', + 'ꮇ' => 'Ꮇ', + 'ꮈ' => 'Ꮈ', + 'ꮉ' => 'Ꮉ', + 'ꮊ' => 'Ꮊ', + 'ꮋ' => 'Ꮋ', + 'ꮌ' => 'Ꮌ', + 'ꮍ' => 'Ꮍ', + 'ꮎ' => 'Ꮎ', + 'ꮏ' => 'Ꮏ', + 'ꮐ' => 'Ꮐ', + 'ꮑ' => 'Ꮑ', + 'ꮒ' => 'Ꮒ', + 'ꮓ' => 'Ꮓ', + 'ꮔ' => 'Ꮔ', + 'ꮕ' => 'Ꮕ', + 'ꮖ' => 'Ꮖ', + 'ꮗ' => 'Ꮗ', + 'ꮘ' => 'Ꮘ', + 'ꮙ' => 'Ꮙ', + 'ꮚ' => 'Ꮚ', + 'ꮛ' => 'Ꮛ', + 'ꮜ' => 'Ꮜ', + 'ꮝ' => 'Ꮝ', + 'ꮞ' => 'Ꮞ', + 'ꮟ' => 'Ꮟ', + 'ꮠ' => 'Ꮠ', + 'ꮡ' => 'Ꮡ', + 'ꮢ' => 'Ꮢ', + 'ꮣ' => 'Ꮣ', + 'ꮤ' => 'Ꮤ', + 'ꮥ' => 'Ꮥ', + 'ꮦ' => 'Ꮦ', + 'ꮧ' => 'Ꮧ', + 'ꮨ' => 'Ꮨ', + 'ꮩ' => 'Ꮩ', + 'ꮪ' => 'Ꮪ', + 'ꮫ' => 'Ꮫ', + 'ꮬ' => 'Ꮬ', + 'ꮭ' => 'Ꮭ', + 'ꮮ' => 'Ꮮ', + 'ꮯ' => 'Ꮯ', + 'ꮰ' => 'Ꮰ', + 'ꮱ' => 'Ꮱ', + 'ꮲ' => 'Ꮲ', + 'ꮳ' => 'Ꮳ', + 'ꮴ' => 'Ꮴ', + 'ꮵ' => 'Ꮵ', + 'ꮶ' => 'Ꮶ', + 'ꮷ' => 'Ꮷ', + 'ꮸ' => 'Ꮸ', + 'ꮹ' => 'Ꮹ', + 'ꮺ' => 'Ꮺ', + 'ꮻ' => 'Ꮻ', + 'ꮼ' => 'Ꮼ', + 'ꮽ' => 'Ꮽ', + 'ꮾ' => 'Ꮾ', + 'ꮿ' => 'Ꮿ', + 'a' => 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + '𐐨' => '𐐀', + '𐐩' => '𐐁', + '𐐪' => '𐐂', + '𐐫' => '𐐃', + '𐐬' => '𐐄', + '𐐭' => '𐐅', + '𐐮' => '𐐆', + '𐐯' => '𐐇', + '𐐰' => '𐐈', + '𐐱' => '𐐉', + '𐐲' => '𐐊', + '𐐳' => '𐐋', + '𐐴' => '𐐌', + '𐐵' => '𐐍', + '𐐶' => '𐐎', + '𐐷' => '𐐏', + '𐐸' => '𐐐', + '𐐹' => '𐐑', + '𐐺' => '𐐒', + '𐐻' => '𐐓', + '𐐼' => '𐐔', + '𐐽' => '𐐕', + '𐐾' => '𐐖', + '𐐿' => '𐐗', + '𐑀' => '𐐘', + '𐑁' => '𐐙', + '𐑂' => '𐐚', + '𐑃' => '𐐛', + '𐑄' => '𐐜', + '𐑅' => '𐐝', + '𐑆' => '𐐞', + '𐑇' => '𐐟', + '𐑈' => '𐐠', + '𐑉' => '𐐡', + '𐑊' => '𐐢', + '𐑋' => '𐐣', + '𐑌' => '𐐤', + '𐑍' => '𐐥', + '𐑎' => '𐐦', + '𐑏' => '𐐧', + '𐓘' => '𐒰', + '𐓙' => '𐒱', + '𐓚' => '𐒲', + '𐓛' => '𐒳', + '𐓜' => '𐒴', + '𐓝' => '𐒵', + '𐓞' => '𐒶', + '𐓟' => '𐒷', + '𐓠' => '𐒸', + '𐓡' => '𐒹', + '𐓢' => '𐒺', + '𐓣' => '𐒻', + '𐓤' => '𐒼', + '𐓥' => '𐒽', + '𐓦' => '𐒾', + '𐓧' => '𐒿', + '𐓨' => '𐓀', + '𐓩' => '𐓁', + '𐓪' => '𐓂', + '𐓫' => '𐓃', + '𐓬' => '𐓄', + '𐓭' => '𐓅', + '𐓮' => '𐓆', + '𐓯' => '𐓇', + '𐓰' => '𐓈', + '𐓱' => '𐓉', + '𐓲' => '𐓊', + '𐓳' => '𐓋', + '𐓴' => '𐓌', + '𐓵' => '𐓍', + '𐓶' => '𐓎', + '𐓷' => '𐓏', + '𐓸' => '𐓐', + '𐓹' => '𐓑', + '𐓺' => '𐓒', + '𐓻' => '𐓓', + '𐳀' => '𐲀', + '𐳁' => '𐲁', + '𐳂' => '𐲂', + '𐳃' => '𐲃', + '𐳄' => '𐲄', + '𐳅' => '𐲅', + '𐳆' => '𐲆', + '𐳇' => '𐲇', + '𐳈' => '𐲈', + '𐳉' => '𐲉', + '𐳊' => '𐲊', + '𐳋' => '𐲋', + '𐳌' => '𐲌', + '𐳍' => '𐲍', + '𐳎' => '𐲎', + '𐳏' => '𐲏', + '𐳐' => '𐲐', + '𐳑' => '𐲑', + '𐳒' => '𐲒', + '𐳓' => '𐲓', + '𐳔' => '𐲔', + '𐳕' => '𐲕', + '𐳖' => '𐲖', + '𐳗' => '𐲗', + '𐳘' => '𐲘', + '𐳙' => '𐲙', + '𐳚' => '𐲚', + '𐳛' => '𐲛', + '𐳜' => '𐲜', + '𐳝' => '𐲝', + '𐳞' => '𐲞', + '𐳟' => '𐲟', + '𐳠' => '𐲠', + '𐳡' => '𐲡', + '𐳢' => '𐲢', + '𐳣' => '𐲣', + '𐳤' => '𐲤', + '𐳥' => '𐲥', + '𐳦' => '𐲦', + '𐳧' => '𐲧', + '𐳨' => '𐲨', + '𐳩' => '𐲩', + '𐳪' => '𐲪', + '𐳫' => '𐲫', + '𐳬' => '𐲬', + '𐳭' => '𐲭', + '𐳮' => '𐲮', + '𐳯' => '𐲯', + '𐳰' => '𐲰', + '𐳱' => '𐲱', + '𐳲' => '𐲲', + '𑣀' => '𑢠', + '𑣁' => '𑢡', + '𑣂' => '𑢢', + '𑣃' => '𑢣', + '𑣄' => '𑢤', + '𑣅' => '𑢥', + '𑣆' => '𑢦', + '𑣇' => '𑢧', + '𑣈' => '𑢨', + '𑣉' => '𑢩', + '𑣊' => '𑢪', + '𑣋' => '𑢫', + '𑣌' => '𑢬', + '𑣍' => '𑢭', + '𑣎' => '𑢮', + '𑣏' => '𑢯', + '𑣐' => '𑢰', + '𑣑' => '𑢱', + '𑣒' => '𑢲', + '𑣓' => '𑢳', + '𑣔' => '𑢴', + '𑣕' => '𑢵', + '𑣖' => '𑢶', + '𑣗' => '𑢷', + '𑣘' => '𑢸', + '𑣙' => '𑢹', + '𑣚' => '𑢺', + '𑣛' => '𑢻', + '𑣜' => '𑢼', + '𑣝' => '𑢽', + '𑣞' => '𑢾', + '𑣟' => '𑢿', + '𖹠' => '𖹀', + '𖹡' => '𖹁', + '𖹢' => '𖹂', + '𖹣' => '𖹃', + '𖹤' => '𖹄', + '𖹥' => '𖹅', + '𖹦' => '𖹆', + '𖹧' => '𖹇', + '𖹨' => '𖹈', + '𖹩' => '𖹉', + '𖹪' => '𖹊', + '𖹫' => '𖹋', + '𖹬' => '𖹌', + '𖹭' => '𖹍', + '𖹮' => '𖹎', + '𖹯' => '𖹏', + '𖹰' => '𖹐', + '𖹱' => '𖹑', + '𖹲' => '𖹒', + '𖹳' => '𖹓', + '𖹴' => '𖹔', + '𖹵' => '𖹕', + '𖹶' => '𖹖', + '𖹷' => '𖹗', + '𖹸' => '𖹘', + '𖹹' => '𖹙', + '𖹺' => '𖹚', + '𖹻' => '𖹛', + '𖹼' => '𖹜', + '𖹽' => '𖹝', + '𖹾' => '𖹞', + '𖹿' => '𖹟', + '𞤢' => '𞤀', + '𞤣' => '𞤁', + '𞤤' => '𞤂', + '𞤥' => '𞤃', + '𞤦' => '𞤄', + '𞤧' => '𞤅', + '𞤨' => '𞤆', + '𞤩' => '𞤇', + '𞤪' => '𞤈', + '𞤫' => '𞤉', + '𞤬' => '𞤊', + '𞤭' => '𞤋', + '𞤮' => '𞤌', + '𞤯' => '𞤍', + '𞤰' => '𞤎', + '𞤱' => '𞤏', + '𞤲' => '𞤐', + '𞤳' => '𞤑', + '𞤴' => '𞤒', + '𞤵' => '𞤓', + '𞤶' => '𞤔', + '𞤷' => '𞤕', + '𞤸' => '𞤖', + '𞤹' => '𞤗', + '𞤺' => '𞤘', + '𞤻' => '𞤙', + '𞤼' => '𞤚', + '𞤽' => '𞤛', + '𞤾' => '𞤜', + '𞤿' => '𞤝', + '𞥀' => '𞤞', + '𞥁' => '𞤟', + '𞥂' => '𞤠', + '𞥃' => '𞤡', + 'ß' => 'SS', + 'ff' => 'FF', + 'fi' => 'FI', + 'fl' => 'FL', + 'ffi' => 'FFI', + 'ffl' => 'FFL', + 'ſt' => 'ST', + 'st' => 'ST', + 'և' => 'ԵՒ', + 'ﬓ' => 'ՄՆ', + 'ﬔ' => 'ՄԵ', + 'ﬕ' => 'ՄԻ', + 'ﬖ' => 'ՎՆ', + 'ﬗ' => 'ՄԽ', + 'ʼn' => 'ʼN', + 'ΐ' => 'Ϊ́', + 'ΰ' => 'Ϋ́', + 'ǰ' => 'J̌', + 'ẖ' => 'H̱', + 'ẗ' => 'T̈', + 'ẘ' => 'W̊', + 'ẙ' => 'Y̊', + 'ẚ' => 'Aʾ', + 'ὐ' => 'Υ̓', + 'ὒ' => 'Υ̓̀', + 'ὔ' => 'Υ̓́', + 'ὖ' => 'Υ̓͂', + 'ᾶ' => 'Α͂', + 'ῆ' => 'Η͂', + 'ῒ' => 'Ϊ̀', + 'ΐ' => 'Ϊ́', + 'ῖ' => 'Ι͂', + 'ῗ' => 'Ϊ͂', + 'ῢ' => 'Ϋ̀', + 'ΰ' => 'Ϋ́', + 'ῤ' => 'Ρ̓', + 'ῦ' => 'Υ͂', + 'ῧ' => 'Ϋ͂', + 'ῶ' => 'Ω͂', + 'ᾈ' => 'ἈΙ', + 'ᾉ' => 'ἉΙ', + 'ᾊ' => 'ἊΙ', + 'ᾋ' => 'ἋΙ', + 'ᾌ' => 'ἌΙ', + 'ᾍ' => 'ἍΙ', + 'ᾎ' => 'ἎΙ', + 'ᾏ' => 'ἏΙ', + 'ᾘ' => 'ἨΙ', + 'ᾙ' => 'ἩΙ', + 'ᾚ' => 'ἪΙ', + 'ᾛ' => 'ἫΙ', + 'ᾜ' => 'ἬΙ', + 'ᾝ' => 'ἭΙ', + 'ᾞ' => 'ἮΙ', + 'ᾟ' => 'ἯΙ', + 'ᾨ' => 'ὨΙ', + 'ᾩ' => 'ὩΙ', + 'ᾪ' => 'ὪΙ', + 'ᾫ' => 'ὫΙ', + 'ᾬ' => 'ὬΙ', + 'ᾭ' => 'ὭΙ', + 'ᾮ' => 'ὮΙ', + 'ᾯ' => 'ὯΙ', + 'ᾼ' => 'ΑΙ', + 'ῌ' => 'ΗΙ', + 'ῼ' => 'ΩΙ', + 'ᾲ' => 'ᾺΙ', + 'ᾴ' => 'ΆΙ', + 'ῂ' => 'ῊΙ', + 'ῄ' => 'ΉΙ', + 'ῲ' => 'ῺΙ', + 'ῴ' => 'ΏΙ', + 'ᾷ' => 'Α͂Ι', + 'ῇ' => 'Η͂Ι', + 'ῷ' => 'Ω͂Ι', +); diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/composer.json new file mode 100644 index 0000000..1fa21ca --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/composer.json @@ -0,0 +1,41 @@ +{ + "name": "symfony/polyfill-mbstring", + "type": "library", + "description": "Symfony polyfill for the Mbstring extension", + "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/README.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/README.md new file mode 100644 index 0000000..b3ebbce --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/README.md @@ -0,0 +1,18 @@ +Symfony Polyfill / Php73 +======================== + +This component provides functions added to PHP 7.3 core: + +- [`array_key_first`](https://php.net/array_key_first) +- [`array_key_last`](https://php.net/array_key_last) +- [`hrtime`](https://php.net/function.hrtime) +- [`is_countable`](https://php.net/is_countable) +- [`JsonException`](https://php.net/JsonException) + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php new file mode 100644 index 0000000..f06d6c2 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +if (\PHP_VERSION_ID < 70300) { + class JsonException extends Exception + { + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/bootstrap.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/bootstrap.php new file mode 100644 index 0000000..d6b2153 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/bootstrap.php @@ -0,0 +1,31 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Php73 as p; + +if (\PHP_VERSION_ID >= 70300) { + return; +} + +if (!function_exists('is_countable')) { + function is_countable($value) { return is_array($value) || $value instanceof Countable || $value instanceof ResourceBundle || $value instanceof SimpleXmlElement; } +} +if (!function_exists('hrtime')) { + require_once __DIR__.'/Php73.php'; + p\Php73::$startAt = (int) microtime(true); + function hrtime($as_number = false) { return p\Php73::hrtime($as_number); } +} +if (!function_exists('array_key_first')) { + function array_key_first(array $array) { foreach ($array as $key => $value) { return $key; } } +} +if (!function_exists('array_key_last')) { + function array_key_last(array $array) { return key(array_slice($array, -1, 1, true)); } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/composer.json new file mode 100644 index 0000000..a7fe478 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/composer.json @@ -0,0 +1,36 @@ +{ + "name": "symfony/polyfill-php73", + "type": "library", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "keywords": ["polyfill", "shim", "compatibility", "portable"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Php73\\": "" }, + "files": [ "bootstrap.php" ], + "classmap": [ "Resources/stubs" ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/PhpToken.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/PhpToken.php new file mode 100644 index 0000000..fe6e691 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/PhpToken.php @@ -0,0 +1,103 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php80; + +/** + * @author Fedonyuk Anton + * + * @internal + */ +class PhpToken implements \Stringable +{ + /** + * @var int + */ + public $id; + + /** + * @var string + */ + public $text; + + /** + * @var int + */ + public $line; + + /** + * @var int + */ + public $pos; + + public function __construct(int $id, string $text, int $line = -1, int $position = -1) + { + $this->id = $id; + $this->text = $text; + $this->line = $line; + $this->pos = $position; + } + + public function getTokenName(): ?string + { + if ('UNKNOWN' === $name = token_name($this->id)) { + $name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text; + } + + return $name; + } + + /** + * @param int|string|array $kind + */ + public function is($kind): bool + { + foreach ((array) $kind as $value) { + if (\in_array($value, [$this->id, $this->text], true)) { + return true; + } + } + + return false; + } + + public function isIgnorable(): bool + { + return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true); + } + + public function __toString(): string + { + return (string) $this->text; + } + + /** + * @return static[] + */ + public static function tokenize(string $code, int $flags = 0): array + { + $line = 1; + $position = 0; + $tokens = token_get_all($code, $flags); + foreach ($tokens as $index => $token) { + if (\is_string($token)) { + $id = \ord($token); + $text = $token; + } else { + [$id, $text, $line] = $token; + } + $tokens[$index] = new static($id, $text, $line, $position); + $position += \strlen($text); + } + + return $tokens; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php new file mode 100644 index 0000000..37937cb --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php @@ -0,0 +1,7 @@ +=7.1" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, + "files": [ "bootstrap.php" ], + "classmap": [ "Resources/stubs" ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php81/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php81/composer.json new file mode 100644 index 0000000..c39ccf4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php81/composer.json @@ -0,0 +1,36 @@ +{ + "name": "symfony/polyfill-php81", + "type": "library", + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "keywords": ["polyfill", "shim", "compatibility", "portable"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=7.1" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Php81\\": "" }, + "files": [ "bootstrap.php" ], + "classmap": [ "Resources/stubs" ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-main": "1.23-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/CHANGELOG.md new file mode 100644 index 0000000..7932e26 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/CHANGELOG.md @@ -0,0 +1,5 @@ +CHANGELOG +========= + +The changelog is maintained for all Symfony contracts at the following URL: +https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/ResetInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/ResetInterface.php new file mode 100644 index 0000000..1af1075 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/ResetInterface.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Contracts\Service; + +/** + * Provides a way to reset an object to its initial state. + * + * When calling the "reset()" method on an object, it should be put back to its + * initial state. This usually means clearing any internal buffers and forwarding + * the call to internal dependencies. All properties of the object should be put + * back to the same state it had when it was first ready to use. + * + * This method could be called, for example, to recycle objects that are used as + * services, so that they can be used to handle several requests in the same + * process loop (note that we advise making your services stateless instead of + * implementing this interface when possible.) + */ +interface ResetInterface +{ + public function reset(); +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/CHANGELOG.md new file mode 100644 index 0000000..3406c30 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/CHANGELOG.md @@ -0,0 +1,12 @@ +CHANGELOG +========= + +5.1.0 +----- + + * added argument `array &$foundClasses` to `VarExporter::export()` to ease with preloading exported values + +4.2.0 +----- + + * added the component diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Exception/ExceptionInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Exception/ExceptionInterface.php new file mode 100644 index 0000000..adfaed4 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Exception/ExceptionInterface.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarExporter\Exception; + +interface ExceptionInterface extends \Throwable +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Internal/Reference.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Internal/Reference.php new file mode 100644 index 0000000..e371c07 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Internal/Reference.php @@ -0,0 +1,30 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Component\VarExporter\Internal; + +/** + * @author Nicolas Grekas + * + * @internal + */ +class Reference +{ + public $id; + public $value; + public $count = 0; + + public function __construct(int $id, $value = null) + { + $this->id = $id; + $this->value = $value; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/fonts/dejavusans.php b/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/fonts/dejavusans.php new file mode 100644 index 0000000..72147be --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/fonts/dejavusans.php @@ -0,0 +1,16 @@ +32,'FontBBox'=>'[-1021 -415 1681 1167]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>34,'StemH'=>15,'AvgWidth'=>507,'MaxWidth'=>1735,'MissingWidth'=>600); +$cbbox=array(0=>array(50,-177,550,705),33=>array(151,0,250,729),34=>array(96,458,364,729),35=>array(77,0,761,718),36=>array(83,-147,553,760),37=>array(55,-14,895,742),38=>array(63,-14,749,742),39=>array(96,458,179,729),40=>array(86,-132,310,759),41=>array(80,-132,304,759),42=>array(30,286,470,742),43=>array(106,0,732,627),44=>array(77,-116,220,124),45=>array(49,234,312,314),46=>array(107,0,210,124),47=>array(0,-93,337,729),48=>array(66,-14,570,742),49=>array(110,0,544,729),50=>array(73,0,536,742),51=>array(76,-14,556,742),52=>array(49,0,580,729),53=>array(77,-14,549,729),54=>array(70,-14,573,742),55=>array(82,0,551,729),56=>array(68,-14,568,742),57=>array(63,-14,566,742),58=>array(117,0,220,517),59=>array(77,-116,220,517),60=>array(106,46,732,581),61=>array(106,172,732,454),62=>array(106,46,732,581),63=>array(72,0,461,742),64=>array(66,-174,930,704),65=>array(8,0,676,729),66=>array(98,0,615,729),67=>array(56,-14,644,742),68=>array(98,0,711,729),69=>array(98,0,568,729),70=>array(98,0,517,729),71=>array(56,-14,693,742),72=>array(98,0,654,729),73=>array(98,0,197,729),74=>array(-52,-200,197,729),75=>array(98,0,677,729),76=>array(98,0,552,729),77=>array(98,0,765,729),78=>array(98,0,650,729),79=>array(56,-14,731,742),80=>array(98,0,569,729),81=>array(56,-129,731,742),82=>array(98,0,666,729),83=>array(66,-14,579,742),84=>array(-3,0,614,729),85=>array(87,-14,645,729),86=>array(8,0,676,729),87=>array(33,0,956,729),88=>array(30,0,654,729),89=>array(-2,0,613,729),90=>array(45,0,640,729),91=>array(86,-132,293,760),92=>array(0,-93,337,729),93=>array(97,-132,304,760),94=>array(106,457,732,729),95=>array(-10,-236,510,-166),96=>array(83,617,317,800),97=>array(60,-14,522,560),98=>array(91,-14,580,760),99=>array(55,-14,488,560),100=>array(55,-14,544,760),101=>array(55,-14,562,560),102=>array(23,0,371,760),103=>array(55,-208,544,560),104=>array(91,0,549,760),105=>array(94,0,184,760),106=>array(-18,-208,184,760),107=>array(91,0,576,760),108=>array(94,0,184,760),109=>array(91,0,889,560),110=>array(91,0,549,560),111=>array(55,-14,557,560),112=>array(91,-208,580,560),113=>array(55,-208,544,560),114=>array(91,0,411,560),115=>array(54,-14,472,560),116=>array(27,0,368,702),117=>array(85,-14,543,560),118=>array(30,0,562,547),119=>array(42,0,776,547),120=>array(29,0,559,547),121=>array(30,-208,562,547),122=>array(43,0,482,547),123=>array(125,-163,511,760),124=>array(127,-236,210,764),125=>array(125,-163,511,760),126=>array(106,228,732,399),161=>array(151,0,250,729),162=>array(84,-153,517,699),163=>array(63,0,548,742),164=>array(46,40,592,587),165=>array(40,0,595,729),166=>array(127,-171,210,699),167=>array(45,-95,454,742),168=>array(105,659,395,758),169=>array(138,0,862,725),170=>array(56,229,404,742),171=>array(77,69,518,517),172=>array(106,140,732,421),173=>array(49,234,312,314),174=>array(138,0,862,725),175=>array(104,673,396,745),176=>array(95,432,405,742),177=>array(106,0,732,627),178=>array(46,326,338,742),179=>array(48,319,350,742),180=>array(181,616,415,800),181=>array(85,-208,612,547),182=>array(77,-96,528,729),183=>array(107,285,210,409),184=>array(142,-193,344,0),185=>array(67,326,346,734),186=>array(47,229,424,742),187=>array(94,69,535,517),188=>array(67,-14,937,742),189=>array(67,-14,906,742),190=>array(48,-14,937,742),191=>array(70,-14,459,729),192=>array(8,0,676,927),193=>array(8,0,676,927),194=>array(8,0,676,928),195=>array(8,0,676,921),196=>array(8,0,676,913),197=>array(8,0,676,928),198=>array(4,0,910,729),199=>array(56,-193,644,742),200=>array(98,0,568,927),201=>array(98,0,568,927),202=>array(98,0,568,928),203=>array(98,0,568,913),204=>array(29,0,216,927),205=>array(79,0,265,927),206=>array(-1,0,297,928),207=>array(3,0,293,913),208=>array(5,0,716,729),209=>array(98,0,650,921),210=>array(56,-14,731,927),211=>array(56,-14,731,927),212=>array(56,-14,731,928),213=>array(56,-14,731,921),214=>array(56,-14,731,913),215=>array(137,31,701,596),216=>array(50,-34,737,761),217=>array(87,-14,645,927),218=>array(87,-14,645,927),219=>array(87,-14,645,928),220=>array(87,-14,645,913),221=>array(-2,0,613,927),222=>array(98,0,569,729),223=>array(91,-14,584,760),224=>array(60,-14,522,800),225=>array(60,-14,522,800),226=>array(60,-14,522,800),227=>array(60,-14,522,777),228=>array(60,-14,522,758),229=>array(60,-14,522,878),230=>array(60,-14,929,560),231=>array(55,-193,488,560),232=>array(55,-14,562,800),233=>array(55,-14,562,800),234=>array(55,-14,562,800),235=>array(55,-14,562,758),236=>array(-28,0,206,800),237=>array(70,0,304,800),238=>array(-17,0,295,800),239=>array(-6,0,284,758),240=>array(55,-14,557,760),241=>array(91,0,549,777),242=>array(55,-14,557,800),243=>array(55,-14,557,800),244=>array(55,-14,557,800),245=>array(55,-14,557,777),246=>array(55,-14,557,758),247=>array(106,73,732,554),248=>array(35,-46,576,592),249=>array(85,-14,543,800),250=>array(85,-14,543,800),251=>array(85,-14,543,800),252=>array(85,-14,543,758),253=>array(30,-208,562,800),254=>array(91,-208,580,760),255=>array(30,-208,562,758),256=>array(8,0,676,899),257=>array(60,-14,522,745),258=>array(8,0,676,946),259=>array(60,-14,522,765),260=>array(8,-193,706,729),261=>array(60,-193,563,560),262=>array(56,-14,644,927),263=>array(55,-14,488,800),264=>array(56,-14,644,928),265=>array(55,-14,488,800),266=>array(56,-14,644,914),267=>array(55,-14,488,760),268=>array(56,-14,644,928),269=>array(55,-14,488,800),270=>array(98,0,711,928),271=>array(55,-14,732,760),272=>array(5,0,716,729),273=>array(55,-14,619,760),274=>array(98,0,568,900),275=>array(55,-14,562,745),276=>array(98,0,568,928),277=>array(55,-14,562,785),278=>array(98,0,568,914),279=>array(55,-14,562,760),280=>array(98,-193,569,729),281=>array(55,-193,562,560),282=>array(98,0,568,925),283=>array(55,-14,562,797),284=>array(56,-14,693,928),285=>array(55,-208,544,800),286=>array(56,-14,693,928),287=>array(55,-208,544,785),288=>array(56,-14,693,914),289=>array(55,-208,544,760),290=>array(56,-250,693,742),291=>array(55,-208,544,775),292=>array(98,0,654,928),293=>array(-13,0,549,928),294=>array(98,0,818,729),295=>array(59,0,578,760),296=>array(-14,0,309,921),297=>array(-22,0,300,777),298=>array(1,0,293,899),299=>array(-7,0,285,745),300=>array(-5,0,300,928),301=>array(-14,0,292,785),302=>array(86,-193,268,729),303=>array(73,-193,255,760),304=>array(98,0,198,914),305=>array(94,0,184,560),306=>array(98,-200,492,729),307=>array(94,-208,461,760),308=>array(-52,-200,296,928),309=>array(-18,-208,295,800),310=>array(98,-235,677,729),311=>array(91,-235,576,760),312=>array(91,0,576,547),313=>array(98,0,552,928),314=>array(94,0,286,928),315=>array(98,-235,552,729),316=>array(66,-235,209,760),317=>array(98,0,552,729),318=>array(94,0,375,760),319=>array(98,0,552,729),320=>array(94,0,314,760),321=>array(-7,0,557,729),322=>array(1,0,285,760),323=>array(98,0,650,928),324=>array(91,0,549,803),325=>array(98,-235,650,729),326=>array(91,-235,549,560),327=>array(98,0,650,921),328=>array(91,0,549,800),329=>array(100,0,715,729),330=>array(98,-208,637,742),331=>array(91,-208,549,560),332=>array(56,-14,731,899),333=>array(55,-14,557,745),334=>array(56,-14,731,928),335=>array(55,-14,557,785),336=>array(56,-14,731,927),337=>array(55,-14,557,800),338=>array(56,0,1006,729),339=>array(55,-14,970,560),340=>array(98,0,666,928),341=>array(91,0,447,803),342=>array(98,-235,666,729),343=>array(63,-235,411,560),344=>array(98,0,666,921),345=>array(91,0,419,800),346=>array(66,-14,579,928),347=>array(54,-14,472,803),348=>array(66,-14,579,928),349=>array(54,-14,472,800),350=>array(66,-193,579,742),351=>array(54,-193,472,560),352=>array(66,-14,579,928),353=>array(54,-14,472,800),354=>array(-3,-193,614,729),355=>array(27,-193,368,702),356=>array(-3,0,614,921),357=>array(27,0,374,813),358=>array(-3,0,614,729),359=>array(27,0,368,702),360=>array(87,-14,645,921),361=>array(85,-14,543,777),362=>array(87,-14,645,899),363=>array(85,-14,543,745),364=>array(87,-14,645,928),365=>array(85,-14,543,785),366=>array(87,-14,645,929),367=>array(85,-14,543,849),368=>array(87,-14,645,927),369=>array(85,-14,546,800),370=>array(87,-193,645,729),371=>array(85,-193,613,560),372=>array(33,0,956,932),373=>array(42,0,776,803),374=>array(-2,0,613,932),375=>array(30,-208,562,803),376=>array(-2,0,613,913),377=>array(45,0,640,928),378=>array(43,0,482,803),379=>array(45,0,640,914),380=>array(43,0,482,760),381=>array(45,0,640,928),382=>array(43,0,482,800),383=>array(23,0,371,760),384=>array(16,-14,580,760),385=>array(-51,0,664,729),386=>array(98,0,615,729),387=>array(91,-14,580,760),388=>array(0,0,615,729),389=>array(0,-14,580,760),390=>array(56,-14,644,742),391=>array(56,-14,794,924),392=>array(55,-14,600,760),393=>array(5,0,716,729),394=>array(-51,0,760,729),395=>array(98,0,615,729),396=>array(55,-14,544,760),397=>array(55,-208,557,548),398=>array(64,0,534,729),399=>array(57,-14,731,742),400=>array(80,-14,560,742),401=>array(-52,-200,517,729),402=>array(-63,-208,371,760),403=>array(56,-14,824,924),404=>array(4,-210,683,729),405=>array(91,0,910,760),406=>array(98,0,347,729),407=>array(5,0,290,729),408=>array(98,0,746,742),409=>array(90,0,576,760),410=>array(5,0,271,760),411=>array(30,0,562,760),412=>array(87,-14,894,729),413=>array(-52,-200,650,729),414=>array(91,-208,549,560),415=>array(56,-14,731,742),416=>array(50,-14,764,760),417=>array(58,-14,603,615),418=>array(56,-14,851,742),419=>array(55,-208,668,560),420=>array(-51,0,618,729),421=>array(90,-208,580,760),422=>array(98,-129,666,729),423=>array(56,-14,569,742),424=>array(49,-14,467,560),425=>array(98,0,568,729),426=>array(-132,-208,355,760),427=>array(27,-208,368,702),428=>array(12,0,614,729),429=>array(27,0,368,760),430=>array(-3,-200,614,729),431=>array(84,-4,796,760),432=>array(86,-14,676,615),433=>array(38,-14,726,724),434=>array(98,-15,683,729),435=>array(-2,0,742,742),436=>array(30,-208,730,560),437=>array(45,0,640,729),438=>array(43,0,482,547),439=>array(78,-31,621,729),440=>array(45,-31,588,729),441=>array(51,-213,531,547),442=>array(55,-208,488,547),443=>array(73,0,536,742),444=>array(45,-31,622,729),445=>array(51,-213,531,547),446=>array(43,-14,456,702),447=>array(91,-208,580,560),448=>array(98,-208,197,729),449=>array(98,-208,394,729),450=>array(10,-208,451,729),451=>array(98,0,197,729),452=>array(98,0,1352,928),453=>array(98,0,1211,800),454=>array(55,-14,1071,800),455=>array(98,-200,768,729),456=>array(98,-208,733,760),457=>array(94,-208,367,760),458=>array(98,-200,868,729),459=>array(98,-208,839,760),460=>array(91,-208,733,760),461=>array(8,0,676,928),462=>array(60,-14,522,800),463=>array(-1,0,297,928),464=>array(-16,0,296,800),465=>array(56,-14,731,928),466=>array(55,-14,557,800),467=>array(87,-14,645,928),468=>array(85,-14,543,800),469=>array(87,-14,645,1025),470=>array(85,-14,543,899),471=>array(87,-14,645,1044),472=>array(85,-14,543,892),473=>array(87,-14,645,1044),474=>array(85,-14,543,892),475=>array(87,-14,645,1047),476=>array(85,-14,543,892),477=>array(55,-14,562,560),478=>array(8,0,676,1025),479=>array(60,-14,522,899),480=>array(8,0,676,1025),481=>array(60,-14,522,869),482=>array(4,0,910,900),483=>array(60,-14,929,743),484=>array(56,-14,752,742),485=>array(55,-208,622,560),486=>array(56,-14,693,928),487=>array(55,-208,544,798),488=>array(98,0,677,928),489=>array(-11,0,576,928),490=>array(56,-193,731,742),491=>array(55,-193,557,560),492=>array(56,-193,731,899),493=>array(55,-193,557,745),494=>array(78,-31,621,928),495=>array(43,-213,523,800),496=>array(-18,-208,299,800),497=>array(98,0,1352,729),498=>array(98,0,1211,729),499=>array(55,-14,1071,760),500=>array(56,-14,693,928),501=>array(55,-208,544,798),502=>array(98,-14,1022,729),503=>array(98,-208,626,742),504=>array(98,0,650,927),505=>array(91,0,549,799),506=>array(8,0,676,931),507=>array(60,-14,607,931),508=>array(4,0,910,928),509=>array(60,-14,929,798),510=>array(50,-34,737,928),511=>array(35,-46,576,798),512=>array(8,0,676,930),513=>array(60,-14,522,799),514=>array(8,0,676,901),515=>array(60,-14,522,785),516=>array(98,0,568,930),517=>array(55,-14,562,798),518=>array(98,0,568,901),519=>array(55,-14,562,785),520=>array(-43,0,306,930),521=>array(-30,0,313,798),522=>array(2,0,308,901),523=>array(-14,0,292,785),524=>array(56,-14,731,930),525=>array(55,-14,557,799),526=>array(56,-14,731,901),527=>array(55,-14,557,785),528=>array(97,0,666,930),529=>array(63,0,411,798),530=>array(98,0,666,901),531=>array(91,0,421,785),532=>array(87,-14,645,930),533=>array(85,-14,543,799),534=>array(87,-14,645,901),535=>array(85,-14,543,785),536=>array(66,-240,579,742),537=>array(54,-240,472,560),538=>array(-3,-240,614,729),539=>array(27,-240,368,702),540=>array(76,-210,556,742),541=>array(35,-211,467,560),542=>array(98,0,654,928),543=>array(-8,0,549,928),544=>array(98,-208,637,742),545=>array(55,-70,783,760),546=>array(55,-14,643,742),547=>array(55,-14,555,632),548=>array(45,-208,640,729),549=>array(43,-208,482,547),550=>array(8,0,676,914),551=>array(60,-14,522,760),552=>array(98,-193,568,729),553=>array(55,-193,562,560),554=>array(56,-14,731,1025),555=>array(55,-14,557,899),556=>array(56,-14,731,1025),557=>array(55,-14,557,864),558=>array(56,-14,731,914),559=>array(55,-14,557,760),560=>array(56,-14,731,1025),561=>array(55,-14,557,899),562=>array(-2,0,613,899),563=>array(30,-208,562,745),564=>array(67,-70,420,757),565=>array(91,-70,788,560),566=>array(27,-70,422,702),567=>array(-18,-208,184,547),568=>array(55,-14,943,760),569=>array(55,-208,943,560),570=>array(-1,-34,686,761),571=>array(6,-34,692,761),572=>array(4,-46,545,592),573=>array(5,0,552,729),574=>array(-38,-34,649,761),575=>array(54,-242,512,560),576=>array(43,-242,525,547),577=>array(39,0,569,729),578=>array(39,0,445,560),579=>array(5,0,615,729),580=>array(6,-14,726,729),581=>array(8,0,676,729),582=>array(98,-93,568,822),583=>array(55,-93,562,640),584=>array(-52,-200,290,729),585=>array(-18,-208,264,760),586=>array(56,-200,836,743),587=>array(55,-208,656,560),588=>array(5,0,666,729),589=>array(7,0,411,560),590=>array(-5,0,615,729),591=>array(5,-208,588,547),592=>array(85,-14,547,560),593=>array(55,-14,544,560),594=>array(91,-14,580,560),595=>array(91,-14,580,760),596=>array(62,-14,495,560),597=>array(55,-69,488,560),598=>array(55,-208,656,760),599=>array(55,-14,715,760),600=>array(55,-14,562,560),601=>array(55,-14,562,560),602=>array(61,-14,814,560),603=>array(65,-14,473,561),604=>array(65,-14,473,561),605=>array(65,-14,771,561),606=>array(55,-14,596,561),607=>array(-18,-208,264,547),608=>array(55,-208,715,760),609=>array(55,-208,544,547),610=>array(55,-14,539,560),611=>array(47,-210,549,547),612=>array(47,-14,549,547),613=>array(85,-208,543,547),614=>array(91,0,549,760),615=>array(91,-208,549,760),616=>array(7,0,265,760),617=>array(81,0,304,547),618=>array(57,0,314,547),619=>array(37,0,359,760),620=>array(38,0,416,760),621=>array(94,-208,296,760),622=>array(94,-213,651,760),623=>array(91,-13,889,548),624=>array(91,-208,889,548),625=>array(91,-208,889,560),626=>array(-18,-208,552,560),627=>array(91,-208,661,560),628=>array(87,0,549,547),629=>array(55,-14,557,560),630=>array(55,0,768,547),631=>array(72,-18,655,561),632=>array(55,-208,602,760),633=>array(0,-13,320,547),634=>array(0,-13,320,755),635=>array(0,-208,433,547),636=>array(91,-207,411,560),637=>array(91,-208,411,560),638=>array(64,0,437,560),639=>array(57,0,437,560),640=>array(91,0,574,547),641=>array(91,0,574,547),642=>array(54,-208,472,560),643=>array(-19,-208,355,760),644=>array(-19,-208,355,760),645=>array(27,-208,401,549),646=>array(-132,-208,355,760),647=>array(27,-156,368,546),648=>array(27,-208,370,702),649=>array(0,-14,634,547),650=>array(55,-15,564,547),651=>array(94,0,545,548),652=>array(30,0,562,547),653=>array(42,0,776,547),654=>array(30,0,562,760),655=>array(50,0,552,547),656=>array(43,-208,593,547),657=>array(43,-54,482,547),658=>array(43,-213,523,547),659=>array(53,-213,553,547),660=>array(43,0,456,759),661=>array(43,0,456,759),662=>array(43,0,456,759),663=>array(43,-213,456,760),664=>array(56,-14,731,742),665=>array(91,0,530,547),666=>array(55,-14,596,561),667=>array(55,-14,724,760),668=>array(91,0,563,547),669=>array(-132,-208,272,760),670=>array(91,-213,576,547),671=>array(91,0,493,547),672=>array(55,-208,746,759),673=>array(43,0,456,759),674=>array(43,0,456,759),675=>array(55,-14,970,760),676=>array(55,-213,1014,760),677=>array(55,-54,970,760),678=>array(27,0,781,702),679=>array(27,-208,629,760),680=>array(27,-70,723,702),681=>array(23,-208,804,760),682=>array(94,0,657,760),683=>array(94,0,610,760),684=>array(26,-15,489,640),685=>array(26,84,489,640),686=>array(0,-214,570,760),687=>array(0,-208,683,760),688=>array(57,326,346,751),689=>array(57,326,346,751),690=>array(-11,209,116,751),691=>array(57,326,259,640),692=>array(35,319,236,632),693=>array(35,209,307,632),694=>array(16,326,320,632),695=>array(26,326,489,632),696=>array(19,209,354,632),697=>array(78,557,203,800),698=>array(78,557,384,800),699=>array(85,489,228,729),700=>array(87,499,230,729),701=>array(96,616,239,856),702=>array(57,492,191,760),703=>array(57,492,191,760),704=>array(57,326,317,751),705=>array(57,326,317,751),706=>array(130,524,370,836),707=>array(130,524,370,836),708=>array(94,561,406,800),709=>array(94,561,406,800),710=>array(94,616,406,800),711=>array(94,616,406,800),712=>array(104,488,171,759),713=>array(104,673,396,745),714=>array(181,616,415,800),715=>array(83,617,317,800),716=>array(104,-148,171,123),717=>array(104,-156,396,-84),718=>array(83,-236,317,-54),719=>array(181,-236,415,-53),720=>array(54,0,229,517),721=>array(54,356,229,517),722=>array(57,249,191,517),723=>array(57,249,191,517),724=>array(140,229,360,448),725=>array(140,229,360,448),726=>array(49,125,341,417),727=>array(49,234,269,307),728=>array(97,645,403,785),729=>array(200,658,300,758),730=>array(116,610,384,878),731=>array(162,-193,344,0),732=>array(89,639,411,777),733=>array(117,616,460,800),734=>array(-0,233,334,504),735=>array(117,616,383,800),736=>array(57,208,374,632),737=>array(60,326,116,751),738=>array(57,326,320,648),739=>array(57,326,391,632),740=>array(57,326,317,751),741=>array(104,0,389,668),742=>array(104,0,389,668),743=>array(104,0,389,668),744=>array(104,0,389,668),745=>array(104,0,389,668),748=>array(94,-260,406,-21),749=>array(104,610,396,808),750=>array(85,489,428,729),755=>array(116,-240,384,28),759=>array(89,-192,411,-55),768=>array(-418,560,-184,800),769=>array(-320,560,-86,800),770=>array(-406,560,-94,800),771=>array(-412,639,-90,777),772=>array(-394,673,-102,745),773=>array(-510,686,10,755),774=>array(-407,645,-101,785),775=>array(-296,560,-206,760),776=>array(-395,560,-105,758),777=>array(-348,618,-129,810),778=>array(-385,610,-117,878),779=>array(-381,616,-38,800),780=>array(-404,560,-92,800),781=>array(-283,615,-217,832),782=>array(-383,615,-117,832),783=>array(-455,616,-112,800),784=>array(-407,645,-101,917),785=>array(-407,645,-101,785),786=>array(-235,489,-92,645),787=>array(-305,595,-187,844),788=>array(-305,595,-187,844),789=>array(-66,575,66,759),790=>array(-418,-266,-184,-83),791=>array(-320,-267,-86,-83),792=>array(-357,-240,-221,-24),793=>array(-279,-240,-143,-24),794=>array(-208,690,31,930),795=>array(-133,427,60,609),796=>array(-313,-241,-208,-32),797=>array(-370,-240,-130,-87),798=>array(-370,-240,-130,-87),799=>array(-357,-240,-143,-24),800=>array(-370,-184,-130,-117),801=>array(-315,-208,-23,63),802=>array(-317,-208,-25,63),803=>array(-296,-183,-206,-69),804=>array(-396,-183,-106,-84),805=>array(-355,-241,-146,-32),806=>array(-323,-240,-180,-84),807=>array(-358,-193,-156,0),808=>array(-338,-193,-156,0),809=>array(-283,-240,-217,-47),810=>array(-383,-211,-114,-50),811=>array(-452,-222,-51,-82),812=>array(-404,-240,-92,-57),813=>array(-407,-240,-95,-57),814=>array(-407,-222,-101,-82),815=>array(-407,-224,-101,-83),816=>array(-412,-222,-90,-84),817=>array(-394,-156,-102,-84),818=>array(-510,-236,10,-166),819=>array(-510,-236,10,-9),820=>array(-557,240,-41,381),821=>array(-316,221,-59,301),822=>array(-634,221,-0,301),823=>array(-574,-46,-33,592),824=>array(-741,-34,-54,761),825=>array(-291,-241,-187,-32),826=>array(-382,-206,-113,-44),827=>array(-359,-240,-139,-21),828=>array(-452,-222,-51,-82),829=>array(-354,619,-138,834),830=>array(-247,595,-109,853),831=>array(-510,528,10,755),832=>array(-418,617,-184,800),833=>array(-320,616,-86,800),834=>array(-412,639,-90,777),835=>array(-305,595,-187,844),836=>array(-387,659,-77,978),837=>array(-278,-208,-171,-45),838=>array(-396,639,-104,786),839=>array(-360,-226,-140,-35),840=>array(-365,-240,-135,-47),841=>array(-360,-240,-140,-21),842=>array(-411,616,-89,800),843=>array(-411,567,-89,850),844=>array(-411,596,-89,820),845=>array(-452,-230,-48,-30),846=>array(-350,-240,-150,-45),849=>array(-316,610,-184,878),850=>array(-407,547,-101,855),851=>array(-354,-240,-138,-24),855=>array(-316,610,-184,878),856=>array(-103,658,-3,758),858=>array(-430,-241,-71,-32),860=>array(-445,-237,445,-60),861=>array(-445,802,445,979),862=>array(-445,855,445,927),863=>array(-445,-156,445,-84),864=>array(-354,756,354,894),865=>array(-445,752,445,929),866=>array(-442,-230,447,-30),880=>array(98,0,555,729),881=>array(94,0,477,547),882=>array(98,0,764,729),883=>array(98,0,549,729),884=>array(78,557,203,800),885=>array(78,-208,203,35),886=>array(98,0,650,729),887=>array(91,0,559,547),890=>array(214,-208,321,-45),891=>array(62,-14,495,560),892=>array(55,-14,488,560),893=>array(62,-14,495,560),894=>array(77,-116,220,517),900=>array(181,616,415,800),901=>array(105,659,415,978),902=>array(8,0,676,800),903=>array(107,285,210,409),904=>array(-12,0,682,800),905=>array(-6,0,765,800),906=>array(-9,0,311,800),908=>array(-7,-14,750,800),910=>array(-15,0,821,800),911=>array(-18,0,752,800),912=>array(2,0,313,978),913=>array(8,0,676,729),914=>array(98,0,615,729),915=>array(98,0,552,729),916=>array(8,0,676,729),917=>array(98,0,568,729),918=>array(45,0,640,729),919=>array(98,0,654,729),920=>array(56,-14,731,742),921=>array(98,0,197,729),922=>array(98,0,677,729),923=>array(8,0,676,729),924=>array(98,0,765,729),925=>array(98,0,650,729),926=>array(98,0,548,729),927=>array(56,-14,731,742),928=>array(98,0,654,729),929=>array(98,0,569,729),931=>array(98,0,568,729),932=>array(-3,0,614,729),933=>array(-2,0,613,729),934=>array(56,0,731,729),935=>array(30,0,654,729),936=>array(56,0,732,729),937=>array(38,0,726,738),938=>array(3,0,293,913),939=>array(-2,0,613,913),940=>array(55,-12,611,800),941=>array(65,-14,473,800),942=>array(91,-208,549,800),943=>array(81,0,324,800),944=>array(73,-14,521,978),945=>array(55,-12,611,559),946=>array(94,-208,566,766),947=>array(16,-208,562,547),948=>array(55,-14,557,742),949=>array(65,-14,473,561),950=>array(52,-210,496,760),951=>array(91,-208,549,560),952=>array(55,-11,557,768),953=>array(81,0,304,547),954=>array(93,0,565,547),955=>array(30,0,562,760),956=>array(85,-208,612,547),957=>array(36,0,512,547),958=>array(52,-210,500,760),959=>array(55,-14,557,560),960=>array(36,-19,574,547),961=>array(91,-208,580,560),962=>array(55,-210,488,560),963=>array(55,-14,604,547),964=>array(49,0,553,547),965=>array(73,-14,521,547),966=>array(55,-208,602,551),967=>array(29,-208,549,547),968=>array(55,-208,602,547),969=>array(66,-14,769,547),970=>array(2,0,311,758),971=>array(73,-14,521,758),972=>array(55,-14,557,800),973=>array(73,-14,521,800),974=>array(66,-14,769,800),975=>array(98,-208,677,729),976=>array(82,-11,538,768),977=>array(55,-11,557,768),978=>array(42,0,665,734),979=>array(-15,0,829,800),980=>array(42,0,665,913),981=>array(55,-208,602,760),982=>array(32,-14,803,547),983=>array(55,-206,600,550),984=>array(56,-207,731,742),985=>array(55,-208,557,560),986=>array(68,-210,583,729),987=>array(55,-210,540,547),988=>array(98,0,517,729),989=>array(-94,-208,409,760),990=>array(87,-2,604,729),991=>array(93,0,566,759),992=>array(56,-208,797,742),993=>array(58,-180,573,559),994=>array(56,-213,877,729),995=>array(66,-208,769,547),996=>array(56,-208,660,742),997=>array(55,-208,568,560),998=>array(98,-213,735,729),999=>array(22,-14,571,575),1000=>array(39,-208,630,745),1001=>array(49,-208,552,560),1002=>array(56,0,714,742),1003=>array(26,0,599,560),1004=>array(56,-14,643,758),1005=>array(55,-14,544,758),1006=>array(21,-208,589,729),1007=>array(27,-208,510,726),1008=>array(55,-7,600,550),1009=>array(91,-208,580,560),1010=>array(55,-14,488,560),1011=>array(-18,-208,184,760),1012=>array(56,-14,731,742),1013=>array(55,-14,480,560),1014=>array(96,-14,521,560),1015=>array(98,0,569,729),1016=>array(91,-208,580,760),1017=>array(56,-14,644,742),1018=>array(98,0,765,729),1019=>array(62,-208,587,547),1020=>array(42,-208,580,560),1021=>array(56,-14,644,742),1022=>array(56,-14,644,742),1023=>array(56,-14,644,742),1024=>array(98,0,568,927),1025=>array(98,0,568,913),1026=>array(-3,-200,709,729),1027=>array(98,0,552,927),1028=>array(56,-14,644,742),1029=>array(66,-14,579,742),1030=>array(98,0,197,729),1031=>array(3,0,293,913),1032=>array(-52,-200,197,729),1033=>array(41,0,1023,729),1034=>array(98,0,975,729),1035=>array(-3,0,709,729),1036=>array(98,0,690,927),1037=>array(98,0,650,927),1038=>array(17,0,592,928),1039=>array(98,-157,654,729),1040=>array(8,0,676,729),1041=>array(98,0,615,729),1042=>array(98,0,615,729),1043=>array(98,0,552,729),1044=>array(49,-157,732,729),1045=>array(98,0,568,729),1046=>array(20,0,1058,729),1047=>array(66,-14,575,742),1048=>array(98,0,650,729),1049=>array(98,0,650,928),1050=>array(98,0,690,729),1051=>array(41,0,653,729),1052=>array(98,0,765,729),1053=>array(98,0,654,729),1054=>array(56,-14,731,742),1055=>array(98,0,654,729),1056=>array(98,0,569,729),1057=>array(56,-14,644,742),1058=>array(-3,0,614,729),1059=>array(17,0,592,729),1060=>array(59,0,802,729),1061=>array(30,0,654,729),1062=>array(98,-157,737,729),1063=>array(85,0,587,729),1064=>array(98,0,971,729),1065=>array(98,-157,1054,729),1066=>array(29,0,762,729),1067=>array(98,0,784,729),1068=>array(98,0,615,729),1069=>array(54,-14,642,742),1070=>array(103,-14,1023,742),1071=>array(66,0,597,729),1072=>array(60,-14,522,560),1073=>array(55,-14,562,777),1074=>array(91,0,530,547),1075=>array(91,0,477,547),1076=>array(52,-138,639,547),1077=>array(55,-14,562,560),1078=>array(34,0,867,547),1079=>array(65,-14,473,561),1080=>array(91,0,559,547),1081=>array(91,0,559,760),1082=>array(91,0,571,547),1083=>array(37,0,556,547),1084=>array(91,0,664,547),1085=>array(91,0,563,547),1086=>array(55,-14,557,560),1087=>array(91,0,563,547),1088=>array(91,-208,580,560),1089=>array(55,-14,488,560),1090=>array(29,0,553,547),1091=>array(30,-208,562,547),1092=>array(55,-208,800,729),1093=>array(29,0,559,547),1094=>array(91,-138,635,547),1095=>array(73,0,500,547),1096=>array(91,0,824,547),1097=>array(91,-138,896,547),1098=>array(30,0,647,547),1099=>array(91,0,701,560),1100=>array(91,0,530,547),1101=>array(55,-14,488,560),1102=>array(94,-14,787,560),1103=>array(57,0,517,547),1104=>array(55,-14,562,802),1105=>array(55,-14,562,758),1106=>array(23,-208,570,760),1107=>array(91,0,480,803),1108=>array(55,-14,488,560),1109=>array(54,-14,472,560),1110=>array(94,0,184,760),1111=>array(-6,0,284,758),1112=>array(-18,-208,184,760),1113=>array(37,0,843,547),1114=>array(91,0,839,547),1115=>array(23,0,567,760),1116=>array(91,0,571,803),1117=>array(91,0,559,802),1118=>array(30,-208,562,760),1119=>array(91,-138,563,547),1120=>array(56,-14,877,729),1121=>array(66,-14,769,547),1122=>array(15,0,711,729),1123=>array(15,0,613,760),1124=>array(103,-14,888,742),1125=>array(94,-14,688,560),1126=>array(8,0,871,729),1127=>array(25,0,758,547),1128=>array(98,0,1135,729),1129=>array(94,0,977,547),1130=>array(56,0,731,729),1131=>array(52,0,560,547),1132=>array(98,0,971,729),1133=>array(94,0,772,547),1134=>array(56,-208,556,935),1135=>array(44,-193,473,753),1136=>array(8,0,844,729),1137=>array(24,-208,852,765),1138=>array(56,-14,731,742),1139=>array(55,-14,557,560),1140=>array(8,0,769,742),1141=>array(24,0,640,560),1142=>array(8,0,769,930),1143=>array(24,0,640,800),1144=>array(56,-208,962,742),1145=>array(55,-208,875,560),1146=>array(56,-14,897,742),1147=>array(55,-14,704,560),1148=>array(58,-14,1122,932),1149=>array(74,-14,954,758),1150=>array(56,-14,877,900),1151=>array(66,-14,769,734),1152=>array(56,-208,644,742),1153=>array(55,-208,488,560),1154=>array(29,-44,474,457),1155=>array(-519,608,-93,810),1156=>array(-372,645,4,788),1157=>array(-288,595,-169,797),1158=>array(-288,595,-169,797),1159=>array(-776,606,4,788),1160=>array(-1021,-180,409,922),1161=>array(-957,-280,345,1022),1162=>array(98,-208,748,928),1163=>array(94,-208,652,760),1164=>array(16,0,615,729),1165=>array(19,0,534,702),1166=>array(98,0,610,729),1167=>array(91,-208,580,560),1168=>array(98,0,552,878),1169=>array(91,0,477,700),1170=>array(35,0,617,729),1171=>array(27,0,542,547),1172=>array(98,-200,600,729),1173=>array(91,-208,505,547),1174=>array(20,-157,1071,729),1175=>array(34,-138,876,547),1176=>array(66,-193,575,742),1177=>array(65,-193,473,561),1178=>array(98,-157,713,729),1179=>array(91,-138,587,547),1180=>array(98,0,690,729),1181=>array(91,0,571,547),1182=>array(16,0,690,729),1183=>array(30,0,571,760),1184=>array(24,0,837,729),1185=>array(21,0,688,547),1186=>array(98,-157,752,729),1187=>array(94,-138,656,547),1188=>array(98,0,1009,729),1189=>array(94,0,862,547),1190=>array(98,-200,1057,729),1191=>array(94,-208,891,547),1192=>array(56,-14,871,743),1193=>array(55,-14,684,560),1194=>array(56,-193,644,742),1195=>array(55,-193,488,560),1196=>array(-3,-157,614,729),1197=>array(29,-138,553,547),1198=>array(-2,0,613,729),1199=>array(30,-208,562,547),1200=>array(-2,0,613,729),1201=>array(30,-208,562,547),1202=>array(30,-157,654,729),1203=>array(29,-138,559,547),1204=>array(-3,-157,910,729),1205=>array(2,-138,782,547),1206=>array(85,-157,686,729),1207=>array(73,-138,590,547),1208=>array(85,0,587,729),1209=>array(73,0,500,547),1210=>array(85,0,587,729),1211=>array(91,0,549,760),1212=>array(10,-14,885,742),1213=>array(7,-14,675,560),1214=>array(10,-184,885,742),1215=>array(7,-161,675,560),1216=>array(98,0,197,729),1217=>array(20,0,1058,928),1218=>array(34,0,867,785),1219=>array(98,-200,651,729),1220=>array(93,-208,566,547),1221=>array(26,-208,751,729),1222=>array(22,-208,646,547),1223=>array(98,-200,654,729),1224=>array(94,-208,566,547),1225=>array(98,-208,752,729),1226=>array(94,-208,656,547),1227=>array(85,-157,587,729),1228=>array(73,-138,500,547),1229=>array(98,-208,863,729),1230=>array(94,-208,750,547),1231=>array(94,0,184,760),1232=>array(8,0,676,946),1233=>array(60,-14,522,765),1234=>array(8,0,676,913),1235=>array(60,-14,522,758),1236=>array(4,0,910,729),1237=>array(60,-14,929,560),1238=>array(98,0,568,928),1239=>array(55,-14,562,785),1240=>array(57,-14,731,742),1241=>array(55,-14,562,560),1242=>array(57,-14,731,913),1243=>array(55,-14,562,758),1244=>array(20,0,1058,913),1245=>array(34,0,867,758),1246=>array(66,-14,575,913),1247=>array(65,-14,473,758),1248=>array(78,-31,621,729),1249=>array(43,-213,523,547),1250=>array(98,0,650,899),1251=>array(91,0,559,745),1252=>array(98,0,650,913),1253=>array(91,0,559,758),1254=>array(56,-14,731,913),1255=>array(55,-14,557,758),1256=>array(56,-14,731,742),1257=>array(55,-14,557,560),1258=>array(56,-14,731,913),1259=>array(55,-14,557,758),1260=>array(54,-14,642,913),1261=>array(55,-14,488,758),1262=>array(17,0,592,899),1263=>array(30,-208,562,745),1264=>array(17,0,592,913),1265=>array(30,-208,562,758),1266=>array(17,0,592,927),1267=>array(30,-208,562,800),1268=>array(85,0,587,913),1269=>array(73,0,500,758),1270=>array(98,-157,552,729),1271=>array(91,-138,477,547),1272=>array(98,0,784,913),1273=>array(91,0,701,758),1274=>array(35,-208,617,729),1275=>array(27,-208,542,547),1276=>array(30,-200,646,729),1277=>array(29,-208,549,547),1278=>array(30,0,654,729),1279=>array(29,0,559,547),1280=>array(71,0,588,729),1281=>array(55,0,495,547),1282=>array(71,-14,908,729),1283=>array(55,-14,806,547),1284=>array(98,-14,876,742),1285=>array(83,-14,784,561),1286=>array(98,-208,654,742),1287=>array(83,-208,564,561),1288=>array(26,-14,974,729),1289=>array(22,-14,866,547),1290=>array(98,-14,1022,729),1291=>array(94,-14,876,547),1292=>array(56,-14,692,742),1293=>array(55,-14,534,560),1294=>array(-3,-14,675,729),1295=>array(2,-14,620,547),1296=>array(80,-14,560,742),1297=>array(65,-14,473,561),1298=>array(41,-200,653,729),1299=>array(37,-208,556,547),1300=>array(41,0,1139,729),1301=>array(37,0,962,547),1302=>array(98,0,863,729),1303=>array(91,-208,832,560),1304=>array(66,0,967,729),1305=>array(57,-14,933,560),1306=>array(56,-129,731,742),1307=>array(55,-208,544,560),1308=>array(33,0,956,729),1309=>array(42,0,776,547),1310=>array(98,0,690,729),1311=>array(91,0,571,547),1312=>array(41,-200,1056,729),1313=>array(37,-208,881,547),1314=>array(98,-200,1057,729),1315=>array(91,-208,888,547),1316=>array(98,-157,752,729),1317=>array(91,-138,653,547),1329=>array(87,-29,680,729),1330=>array(87,0,650,743),1331=>array(45,0,729,743),1332=>array(44,0,724,743),1333=>array(87,-14,650,729),1334=>array(87,0,692,744),1335=>array(92,0,616,729),1336=>array(87,0,650,743),1337=>array(87,-14,835,743),1338=>array(45,-14,729,729),1339=>array(92,0,650,729),1340=>array(92,0,533,729),1341=>array(92,-14,849,729),1342=>array(129,-13,763,742),1343=>array(87,0,645,729),1344=>array(34,-26,638,729),1345=>array(82,-23,688,744),1346=>array(49,0,729,743),1347=>array(51,0,715,735),1348=>array(87,-14,767,729),1349=>array(71,-14,668,743),1350=>array(0,-14,680,729),1351=>array(78,-15,684,729),1352=>array(87,0,645,743),1353=>array(59,-28,664,744),1354=>array(44,0,713,743),1355=>array(82,0,686,744),1356=>array(87,0,767,743),1357=>array(87,-14,645,729),1358=>array(49,0,729,729),1359=>array(73,-14,632,741),1360=>array(87,0,645,743),1361=>array(78,-14,675,743),1362=>array(92,0,538,729),1363=>array(59,0,752,729),1364=>array(24,0,679,743),1365=>array(56,-14,731,742),1366=>array(54,-13,746,729),1369=>array(57,492,191,760),1370=>array(87,499,230,729),1371=>array(0,620,234,803),1372=>array(2,618,356,893),1373=>array(-0,617,233,800),1374=>array(4,613,401,866),1375=>array(44,618,462,760),1377=>array(85,-14,883,547),1378=>array(91,-208,549,560),1379=>array(55,-208,648,560),1380=>array(91,-208,653,560),1381=>array(85,-14,548,760),1382=>array(55,-208,648,560),1383=>array(91,0,490,760),1384=>array(91,-208,549,560),1385=>array(91,-208,738,560),1386=>array(55,-14,648,760),1387=>array(91,-208,549,760),1388=>array(91,-208,303,547),1389=>array(91,-208,889,760),1390=>array(55,-14,557,760),1391=>array(85,-208,543,760),1392=>array(91,0,549,760),1393=>array(52,-15,523,760),1394=>array(91,-208,653,560),1395=>array(68,-14,544,768),1396=>array(85,-14,647,760),1397=>array(-21,-208,181,547),1398=>array(-19,-14,543,760),1399=>array(0,-208,435,560),1400=>array(91,0,549,560),1401=>array(5,-208,370,547),1402=>array(85,-208,883,547),1403=>array(54,-208,494,561),1404=>array(91,0,609,560),1405=>array(85,-14,543,560),1406=>array(85,-208,647,760),1407=>array(85,-14,889,560),1408=>array(91,-208,549,560),1409=>array(54,-208,543,560),1410=>array(91,0,449,547),1411=>array(85,-208,889,760),1412=>array(20,-208,580,560),1413=>array(54,-14,556,560),1414=>array(34,-208,766,760),1415=>array(85,-14,812,760),1417=>array(117,0,220,415),1418=>array(49,212,312,314),1456=>array(283,-217,356,-22),1457=>array(83,-217,438,-22),1458=>array(125,-217,454,-22),1459=>array(125,-217,454,-22),1460=>array(283,-159,356,-85),1461=>array(222,-159,417,-85),1462=>array(222,-217,417,-22),1463=>array(173,-159,466,-85),1464=>array(173,-193,466,-46),1465=>array(0,625,73,698),1466=>array(0,625,73,698),1467=>array(148,-237,465,-17),1468=>array(288,237,361,310),1469=>array(283,-217,356,-22),1470=>array(49,472,312,552),1471=>array(173,625,466,698),1472=>array(102,-98,193,645),1473=>array(637,625,710,698),1474=>array(96,625,169,698),1475=>array(102,0,193,547),1478=>array(50,0,357,547),1479=>array(173,-217,466,-22),1488=>array(91,0,578,547),1489=>array(43,0,535,547),1490=>array(43,-5,383,547),1491=>array(43,0,511,547),1492=>array(91,0,563,547),1493=>array(91,0,182,547),1494=>array(43,0,303,547),1495=>array(91,0,563,547),1496=>array(90,-14,593,552),1497=>array(66,204,157,547),1498=>array(43,-208,446,547),1499=>array(43,0,474,547),1500=>array(43,0,492,729),1501=>array(91,0,573,547),1502=>array(43,0,588,555),1503=>array(91,-208,182,547),1504=>array(43,0,309,547),1505=>array(90,-14,593,547),1506=>array(43,-93,535,547),1507=>array(91,-208,549,547),1508=>array(91,0,569,547),1509=>array(43,-208,497,548),1510=>array(43,0,502,547),1511=>array(91,-208,633,546),1512=>array(43,0,474,547),1513=>array(43,0,666,547),1514=>array(10,-4,566,547),1520=>array(91,0,380,547),1521=>array(66,0,332,547),1522=>array(66,204,312,547),1523=>array(91,361,325,547),1524=>array(91,361,554,547),1542=>array(0,-20,607,892),1543=>array(0,-20,607,895),1545=>array(65,0,685,635),1546=>array(65,0,904,635),1548=>array(107,0,250,240),1557=>array(123,624,377,868),1563=>array(107,0,250,633),1567=>array(72,0,461,742),1569=>array(80,42,390,483),1570=>array(-37,0,315,939),1571=>array(53,0,220,999),1572=>array(-42,-244,406,588),1573=>array(53,-244,220,760),1574=>array(63,-131,719,588),1575=>array(94,0,184,760),1576=>array(63,-171,865,327),1577=>array(68,-28,453,513),1578=>array(63,-10,865,391),1579=>array(63,-10,865,513),1580=>array(77,-244,645,425),1581=>array(77,-244,645,425),1582=>array(77,-244,645,586),1583=>array(61,-19,388,415),1584=>array(61,-19,388,586),1585=>array(-42,-244,423,269),1586=>array(-42,-244,423,464),1587=>array(63,-244,1138,366),1588=>array(63,-244,1138,586),1589=>array(63,-244,1134,362),1590=>array(63,-244,1134,464),1591=>array(70,0,857,760),1592=>array(70,0,857,760),1593=>array(57,-244,587,521),1594=>array(57,-244,587,659),1600=>array(-10,0,303,90),1601=>array(63,-45,952,635),1602=>array(52,-215,701,635),1603=>array(70,-27,722,760),1604=>array(70,-152,637,760),1605=>array(68,-240,546,369),1606=>array(72,-162,660,464),1607=>array(68,-28,453,358),1608=>array(-42,-244,406,315),1609=>array(63,-131,719,411),1610=>array(63,-244,719,411),1611=>array(107,591,393,825),1612=>array(107,591,393,874),1613=>array(107,-239,393,-5),1614=>array(107,591,393,708),1615=>array(107,590,393,874),1616=>array(107,-137,393,-20),1617=>array(98,599,402,869),1618=>array(115,610,383,878),1619=>array(74,590,426,719),1620=>array(164,593,331,808),1621=>array(164,-244,331,-29),1623=>array(107,615,393,898),1626=>array(119,616,381,775),1632=>array(215,220,322,342),1633=>array(136,0,342,635),1634=>array(40,0,492,635),1635=>array(37,0,509,635),1636=>array(85,-10,457,641),1637=>array(66,-10,471,643),1638=>array(42,0,493,635),1639=>array(29,0,508,635),1640=>array(29,0,508,635),1641=>array(49,0,493,640),1642=>array(65,0,472,635),1643=>array(0,-110,300,318),1644=>array(87,499,230,729),1645=>array(42,101,502,537),1646=>array(63,-10,865,327),1647=>array(52,-215,701,481),1648=>array(223,602,277,887),1652=>array(60,649,227,864),1657=>array(63,-10,865,575),1658=>array(63,-10,865,513),1659=>array(63,-244,865,327),1660=>array(63,-180,865,391),1661=>array(63,-10,865,464),1662=>array(63,-244,865,327),1663=>array(63,-10,865,513),1664=>array(63,-244,865,327),1665=>array(77,-244,645,710),1666=>array(77,-244,645,708),1667=>array(77,-244,645,425),1668=>array(77,-244,645,425),1669=>array(77,-244,645,708),1670=>array(77,-244,645,425),1671=>array(77,-244,645,425),1672=>array(61,-19,388,746),1673=>array(61,-180,388,415),1674=>array(61,-171,388,415),1675=>array(61,-171,388,746),1676=>array(61,-19,388,586),1677=>array(61,-146,388,415),1678=>array(61,-19,388,708),1679=>array(61,-19,388,684),1680=>array(61,-19,388,708),1681=>array(-42,-244,469,648),1682=>array(-42,-244,473,556),1683=>array(-42,-244,507,269),1684=>array(-42,-244,474,269),1685=>array(-42,-244,634,269),1686=>array(-42,-244,474,269),1687=>array(-42,-244,439,464),1688=>array(-42,-244,439,586),1689=>array(-42,-244,439,586),1690=>array(63,-244,1138,464),1691=>array(63,-244,1138,366),1692=>array(63,-244,1138,586),1693=>array(63,-244,1134,362),1694=>array(63,-244,1134,586),1695=>array(70,0,857,760),1696=>array(57,-244,587,781),1697=>array(63,-45,952,481),1698=>array(63,-171,952,481),1699=>array(63,-171,952,635),1700=>array(63,-45,952,757),1701=>array(63,-293,952,481),1702=>array(63,-45,952,757),1703=>array(52,-215,701,635),1704=>array(52,-215,701,757),1705=>array(63,-43,895,760),1706=>array(63,-43,1000,760),1707=>array(63,-43,895,760),1708=>array(70,-27,722,760),1709=>array(70,-27,722,854),1710=>array(70,-293,722,760),1711=>array(63,-43,895,896),1712=>array(63,-43,895,896),1713=>array(63,-43,895,903),1714=>array(63,-171,895,896),1715=>array(63,-293,895,896),1716=>array(63,-43,895,1025),1717=>array(70,-152,723,971),1718=>array(70,-152,637,952),1719=>array(70,-152,684,1025),1720=>array(70,-391,637,760),1721=>array(72,-317,660,464),1722=>array(72,-162,660,366),1723=>array(72,-162,660,636),1724=>array(72,-330,660,464),1725=>array(72,-162,660,586),1726=>array(70,-33,638,487),1727=>array(77,-244,645,586),1734=>array(-42,-244,406,556),1740=>array(63,-131,719,411),1742=>array(63,-131,719,556),1749=>array(68,-28,453,358),1776=>array(215,220,322,342),1777=>array(136,0,342,635),1778=>array(40,0,492,635),1779=>array(37,0,509,635),1780=>array(40,0,471,643),1781=>array(52,-5,485,643),1782=>array(102,0,445,640),1783=>array(29,0,508,635),1784=>array(29,0,508,635),1785=>array(49,0,493,640),1984=>array(66,-14,570,742),1985=>array(110,0,544,729),1986=>array(110,0,530,729),1987=>array(110,0,530,729),1988=>array(110,0,530,729),1989=>array(110,0,530,729),1990=>array(110,0,530,729),1991=>array(104,0,532,729),1992=>array(104,0,532,729),1993=>array(77,0,560,741),1994=>array(94,0,184,729),1995=>array(55,-14,516,447),1996=>array(30,0,394,731),1997=>array(30,0,562,430),1998=>array(91,0,563,430),1999=>array(91,0,563,430),2000=>array(55,0,539,735),2001=>array(91,0,563,581),2002=>array(55,0,738,741),2003=>array(94,0,408,729),2004=>array(30,0,344,729),2005=>array(91,0,504,729),2006=>array(94,0,518,729),2007=>array(30,0,256,729),2008=>array(94,0,865,513),2009=>array(30,0,443,729),2010=>array(30,0,754,729),2011=>array(91,0,563,430),2012=>array(30,0,595,729),2013=>array(94,0,679,729),2014=>array(94,0,436,729),2015=>array(55,0,630,729),2016=>array(30,0,443,729),2017=>array(30,0,595,729),2018=>array(55,0,539,729),2019=>array(94,0,436,729),2020=>array(94,0,436,612),2021=>array(94,0,428,729),2022=>array(55,0,539,729),2023=>array(55,0,539,729),2027=>array(106,673,398,745),2028=>array(32,609,468,800),2029=>array(205,658,305,758),2030=>array(93,616,405,800),2031=>array(44,616,456,800),2032=>array(32,609,468,800),2033=>array(44,616,456,800),2034=>array(200,-184,300,-84),2035=>array(104,659,394,758),2036=>array(98,557,216,760),2037=>array(98,557,216,760),2040=>array(49,0,511,498),2041=>array(49,0,511,483),2042=>array(-10,0,371,72),3647=>array(86,-138,571,769),3713=>array(63,-10,607,560),3714=>array(68,-17,691,568),3716=>array(67,-10,619,568),3719=>array(53,-238,415,568),3720=>array(62,-0,574,575),3722=>array(68,-234,690,568),3725=>array(56,-8,619,573),3732=>array(91,-14,592,560),3733=>array(63,-15,564,579),3734=>array(0,-240,587,560),3735=>array(42,-8,599,571),3737=>array(46,-14,593,568),3738=>array(36,-8,556,561),3739=>array(36,-8,556,760),3740=>array(43,-8,725,614),3741=>array(91,-14,676,760),3742=>array(51,-8,636,561),3743=>array(51,-8,636,760),3745=>array(31,-14,636,547),3746=>array(56,-8,619,760),3747=>array(68,-8,634,568),3749=>array(39,-8,583,568),3751=>array(56,-13,558,560),3754=>array(39,-8,688,679),3755=>array(62,-12,762,575),3757=>array(56,-14,558,560),3758=>array(68,-8,684,605),3759=>array(99,-166,742,579),3760=>array(54,-13,589,563),3761=>array(-578,639,-43,880),3762=>array(60,0,473,560),3763=>array(-425,0,473,806),3764=>array(-594,615,-73,926),3765=>array(-594,615,0,926),3766=>array(-594,615,-73,926),3767=>array(-594,615,0,926),3768=>array(-376,-350,-161,-38),3769=>array(-418,-306,-152,-40),3771=>array(-578,639,-43,880),3772=>array(-611,-278,6,-39),3773=>array(63,-240,619,715),3776=>array(60,-14,324,560),3777=>array(60,-14,598,560),3778=>array(-22,-5,398,896),3779=>array(45,-14,490,892),3780=>array(92,-11,445,886),3782=>array(72,-232,574,557),3784=>array(-366,618,-278,792),3785=>array(-563,609,-45,891),3786=>array(-595,598,22,869),3787=>array(-462,609,-182,890),3788=>array(-611,636,6,875),3789=>array(-425,620,-220,806),3792=>array(66,-14,570,547),3793=>array(48,-75,582,576),3794=>array(48,-66,545,711),3795=>array(11,-9,692,830),3796=>array(48,-83,601,711),3797=>array(48,-83,601,711),3798=>array(43,-8,744,812),3799=>array(63,-240,607,560),3800=>array(73,-210,680,557),3801=>array(51,-4,621,571),3804=>array(62,-12,947,575),3805=>array(62,-12,973,575),4256=>array(59,-15,815,828),4257=>array(54,-0,704,828),4258=>array(54,-148,649,837),4259=>array(54,-15,781,828),4260=>array(49,0,552,837),4261=>array(39,0,714,837),4262=>array(29,-15,695,828),4263=>array(59,-15,885,837),4264=>array(29,0,390,874),4265=>array(59,0,561,828),4266=>array(29,-15,784,828),4267=>array(59,-15,824,828),4268=>array(63,0,566,828),4269=>array(49,-167,806,837),4270=>array(24,-15,717,837),4271=>array(39,0,566,828),4272=>array(54,-15,853,828),4273=>array(63,-15,567,828),4274=>array(63,-0,566,837),4275=>array(49,-182,806,837),4276=>array(49,0,817,834),4277=>array(44,0,680,828),4278=>array(64,-15,566,837),4279=>array(54,0,557,828),4280=>array(59,-15,562,828),4281=>array(63,0,566,828),4282=>array(59,-15,764,837),4283=>array(59,-15,810,828),4284=>array(63,-0,566,828),4285=>array(49,-15,574,837),4286=>array(63,-0,566,828),4287=>array(29,0,695,828),4288=>array(29,-15,785,828),4289=>array(63,0,566,828),4290=>array(54,-15,635,837),4291=>array(29,0,532,828),4292=>array(54,0,540,828),4293=>array(39,-15,699,837),4304=>array(49,-15,459,592),4305=>array(49,-14,469,837),4306=>array(44,-235,537,551),4307=>array(49,-230,759,547),4308=>array(49,-236,449,547),4309=>array(49,-236,459,547),4310=>array(20,-14,452,838),4311=>array(49,-14,752,547),4312=>array(49,0,469,547),4313=>array(44,-236,456,542),4314=>array(49,-230,1016,552),4315=>array(49,-15,459,837),4316=>array(63,-15,474,833),4317=>array(49,-0,737,547),4318=>array(49,-15,459,833),4319=>array(49,-236,458,551),4320=>array(49,0,747,833),4321=>array(63,-15,474,827),4322=>array(44,-236,610,680),4323=>array(5,-236,464,571),4324=>array(49,-236,766,547),4325=>array(49,-236,449,828),4326=>array(49,-230,737,546),4327=>array(49,-236,459,538),4328=>array(29,-15,454,837),4329=>array(63,0,474,837),4330=>array(44,-236,527,532),4331=>array(49,-14,458,828),4332=>array(64,-15,488,837),4333=>array(49,-236,471,827),4334=>array(63,-15,474,827),4335=>array(10,-235,444,572),4336=>array(49,-15,459,837),4337=>array(59,-15,469,837),4338=>array(49,-141,458,547),4339=>array(49,-236,459,546),4340=>array(49,-236,458,837),4341=>array(49,-15,515,837),4342=>array(49,-236,778,547),4343=>array(44,-236,508,547),4344=>array(49,-236,459,538),4345=>array(39,-236,532,551),4346=>array(49,-77,459,547),4347=>array(54,-10,394,484),4348=>array(49,420,270,837),5121=>array(8,1,676,730),5122=>array(8,0,676,1037),5123=>array(8,0,676,729),5124=>array(8,0,676,914),5125=>array(98,0,711,729),5126=>array(98,0,711,914),5127=>array(98,0,711,913),5129=>array(98,0,711,729),5130=>array(58,0,671,729),5131=>array(58,0,671,914),5132=>array(98,1,827,730),5133=>array(8,1,776,730),5134=>array(98,0,827,729),5135=>array(8,0,776,729),5136=>array(98,0,827,914),5137=>array(8,0,776,914),5138=>array(98,0,909,729),5139=>array(98,0,909,729),5140=>array(98,0,909,914),5141=>array(98,0,909,914),5142=>array(98,0,711,914),5143=>array(98,0,869,729),5144=>array(58,0,909,729),5145=>array(98,0,869,914),5146=>array(58,0,909,914),5147=>array(58,0,671,914),5149=>array(98,629,198,729),5150=>array(67,326,488,734),5151=>array(46,356,362,714),5152=>array(46,356,362,714),5153=>array(67,398,334,674),5154=>array(67,391,334,667),5155=>array(67,398,338,667),5156=>array(67,398,334,667),5157=>array(35,327,405,733),5158=>array(67,326,331,734),5159=>array(98,312,198,412),5160=>array(67,503,334,563),5161=>array(67,399,334,667),5162=>array(67,399,334,691),5163=>array(8,1,1028,730),5164=>array(8,0,847,729),5165=>array(98,0,892,729),5166=>array(58,0,1055,729),5167=>array(8,0,676,729),5168=>array(8,0,676,1037),5169=>array(8,0,676,729),5170=>array(8,0,676,914),5171=>array(58,0,671,729),5172=>array(58,0,671,914),5173=>array(58,0,671,913),5175=>array(58,0,671,729),5176=>array(58,0,671,729),5177=>array(58,0,671,914),5178=>array(98,0,827,729),5179=>array(8,0,776,729),5180=>array(98,0,827,729),5181=>array(8,0,776,729),5182=>array(98,0,827,914),5183=>array(8,0,776,914),5184=>array(98,0,869,729),5185=>array(58,0,909,729),5186=>array(98,0,869,914),5187=>array(58,0,909,914),5188=>array(98,0,869,729),5189=>array(58,0,909,729),5190=>array(98,0,869,914),5191=>array(58,0,909,914),5192=>array(58,0,671,913),5193=>array(67,326,453,734),5194=>array(67,326,137,734),5196=>array(87,-14,645,729),5197=>array(87,0,645,1037),5198=>array(87,0,645,743),5199=>array(87,0,645,914),5200=>array(58,0,671,729),5201=>array(58,0,671,914),5202=>array(58,0,671,913),5204=>array(58,0,671,729),5205=>array(59,0,672,729),5206=>array(59,0,672,914),5207=>array(98,-14,834,729),5208=>array(87,-14,831,729),5209=>array(98,0,834,743),5210=>array(87,0,831,743),5211=>array(98,0,834,914),5212=>array(87,0,831,914),5213=>array(98,0,869,729),5214=>array(58,0,842,729),5215=>array(98,0,869,914),5216=>array(58,0,842,914),5217=>array(98,0,889,729),5218=>array(59,0,842,729),5219=>array(98,0,889,914),5220=>array(59,0,842,914),5221=>array(117,0,889,729),5222=>array(67,326,379,734),5223=>array(87,-14,823,734),5224=>array(87,0,823,743),5225=>array(58,0,811,734),5226=>array(59,0,835,734),5227=>array(34,0,530,743),5228=>array(98,0,594,1037),5229=>array(98,0,594,743),5230=>array(98,0,594,914),5231=>array(34,-14,530,729),5232=>array(34,-14,530,914),5233=>array(34,-14,623,913),5234=>array(98,-14,594,729),5235=>array(98,-14,594,914),5236=>array(98,0,762,743),5237=>array(34,0,712,743),5238=>array(98,0,781,743),5239=>array(98,0,758,743),5240=>array(98,0,781,914),5241=>array(98,0,758,914),5242=>array(98,-14,762,729),5243=>array(34,-14,712,729),5244=>array(98,-14,762,914),5245=>array(34,-14,712,914),5246=>array(98,-14,781,729),5247=>array(98,-14,758,729),5248=>array(98,-14,781,914),5249=>array(98,-14,758,914),5250=>array(117,-14,781,729),5251=>array(67,318,379,734),5252=>array(27,318,340,734),5253=>array(34,0,696,743),5254=>array(98,0,720,743),5255=>array(34,-14,696,734),5256=>array(98,-14,720,734),5257=>array(34,0,530,743),5258=>array(98,0,594,1037),5259=>array(98,0,594,743),5260=>array(98,0,594,914),5261=>array(34,-14,530,729),5262=>array(34,-14,530,914),5263=>array(34,-14,623,913),5264=>array(98,-14,594,729),5265=>array(98,-14,594,914),5266=>array(98,0,762,743),5267=>array(34,0,712,743),5268=>array(98,0,781,743),5269=>array(98,0,758,743),5270=>array(98,0,781,914),5271=>array(98,0,758,914),5272=>array(98,-14,762,729),5273=>array(34,-14,712,729),5274=>array(98,-14,762,914),5275=>array(34,-14,712,914),5276=>array(98,-14,781,729),5277=>array(98,-14,758,729),5278=>array(98,-14,781,914),5279=>array(98,-14,758,914),5280=>array(117,-14,781,729),5281=>array(67,318,379,734),5282=>array(67,318,379,734),5283=>array(58,0,512,729),5284=>array(98,0,552,1037),5285=>array(98,0,552,729),5286=>array(98,0,552,914),5287=>array(58,0,512,729),5288=>array(58,0,512,914),5289=>array(58,0,607,913),5290=>array(98,0,552,729),5291=>array(98,0,552,914),5292=>array(98,0,651,729),5293=>array(58,0,710,729),5294=>array(98,0,741,729),5295=>array(98,0,706,729),5296=>array(98,0,741,914),5297=>array(98,0,706,914),5298=>array(98,0,651,729),5299=>array(58,0,710,729),5300=>array(98,0,651,914),5301=>array(58,0,710,914),5302=>array(98,0,741,729),5303=>array(98,0,706,729),5304=>array(98,0,741,914),5305=>array(98,0,706,914),5306=>array(117,0,741,729),5307=>array(67,326,331,734),5308=>array(67,326,453,734),5309=>array(67,326,331,734),5312=>array(58,-14,817,436),5313=>array(34,-14,793,755),5314=>array(34,-14,793,436),5315=>array(5,-14,765,636),5316=>array(58,0,817,450),5317=>array(58,0,817,636),5318=>array(58,0,817,635),5319=>array(34,0,793,450),5320=>array(34,0,793,636),5321=>array(98,-14,1035,436),5322=>array(58,-14,977,436),5323=>array(98,0,1025,450),5324=>array(34,0,793,450),5325=>array(98,0,1025,636),5326=>array(34,0,793,636),5327=>array(34,0,793,635),5328=>array(67,484,545,736),5329=>array(67,318,397,734),5330=>array(67,484,545,736),5331=>array(58,0,817,450),5332=>array(34,0,793,755),5333=>array(34,0,793,450),5334=>array(34,0,793,636),5335=>array(58,0,817,450),5336=>array(58,0,817,636),5337=>array(58,0,817,635),5338=>array(34,0,793,450),5339=>array(34,0,793,636),5340=>array(98,0,1035,450),5341=>array(58,0,977,450),5342=>array(98,0,1025,450),5343=>array(34,0,972,450),5344=>array(98,0,1025,636),5345=>array(34,0,972,636),5346=>array(98,0,1035,450),5347=>array(58,0,977,450),5348=>array(98,0,1035,636),5349=>array(58,0,977,636),5350=>array(98,0,1025,450),5351=>array(34,0,972,450),5352=>array(98,0,1025,636),5353=>array(34,0,972,636),5354=>array(67,484,545,736),5356=>array(58,0,671,729),5357=>array(34,0,505,729),5358=>array(98,0,649,1037),5359=>array(98,0,569,729),5360=>array(98,0,569,914),5361=>array(34,0,505,729),5362=>array(34,0,505,914),5363=>array(34,0,600,913),5364=>array(98,0,569,729),5365=>array(98,0,569,914),5366=>array(98,0,736,729),5367=>array(34,0,696,729),5368=>array(98,0,758,729),5369=>array(98,0,713,729),5370=>array(98,0,758,914),5371=>array(98,0,713,914),5372=>array(98,0,736,729),5373=>array(34,0,696,729),5374=>array(98,0,736,914),5375=>array(34,0,696,914),5376=>array(98,0,758,729),5377=>array(98,0,713,729),5378=>array(98,0,758,914),5379=>array(98,0,713,914),5380=>array(117,0,758,729),5381=>array(67,326,363,734),5382=>array(67,318,365,741),5383=>array(67,326,363,734),5392=>array(34,-14,678,743),5393=>array(34,-14,678,743),5394=>array(34,-14,678,914),5395=>array(34,-14,857,464),5396=>array(34,-14,857,636),5397=>array(34,-14,857,464),5398=>array(34,-14,857,636),5399=>array(98,-14,875,743),5400=>array(34,-14,814,743),5401=>array(98,-14,875,743),5402=>array(34,-14,814,743),5403=>array(98,-14,875,914),5404=>array(34,-14,814,914),5405=>array(98,-14,1106,464),5406=>array(34,-14,1042,464),5407=>array(98,-14,1106,636),5408=>array(34,-14,1042,636),5409=>array(98,-14,1106,464),5410=>array(34,-14,1042,464),5411=>array(98,-14,1106,636),5412=>array(34,-14,1042,636),5413=>array(67,476,585,737),5414=>array(58,0,529,729),5415=>array(98,0,569,1037),5416=>array(98,0,569,729),5417=>array(98,0,569,914),5418=>array(58,0,529,729),5419=>array(58,0,531,914),5420=>array(58,0,626,913),5421=>array(98,0,569,729),5422=>array(98,0,569,914),5423=>array(98,0,746,729),5424=>array(58,0,723,729),5425=>array(98,0,758,729),5426=>array(98,0,760,729),5427=>array(98,0,758,914),5428=>array(98,0,760,914),5429=>array(98,0,746,729),5430=>array(58,0,723,729),5431=>array(98,0,749,914),5432=>array(58,0,723,914),5433=>array(98,0,758,729),5434=>array(98,0,760,729),5435=>array(98,0,758,914),5436=>array(98,0,760,914),5437=>array(117,0,758,729),5438=>array(67,326,363,734),5440=>array(67,399,334,667),5441=>array(67,326,429,734),5442=>array(98,-14,857,436),5443=>array(58,-14,817,436),5444=>array(58,0,817,450),5445=>array(98,0,857,755),5446=>array(98,0,857,450),5447=>array(98,0,857,636),5448=>array(98,0,569,729),5449=>array(98,0,569,914),5450=>array(98,0,569,729),5451=>array(34,0,505,729),5452=>array(34,0,505,914),5453=>array(34,0,505,729),5454=>array(98,0,736,914),5455=>array(34,0,696,914),5456=>array(67,326,363,734),5458=>array(58,0,671,729),5459=>array(73,0,676,744),5460=>array(73,-15,676,1037),5461=>array(73,-15,676,729),5462=>array(73,-15,676,914),5463=>array(38,0,668,662),5464=>array(38,0,668,914),5465=>array(58,0,688,662),5466=>array(58,0,688,914),5467=>array(98,0,886,914),5468=>array(58,0,909,914),5469=>array(67,326,462,695),5470=>array(87,-14,645,743),5471=>array(87,-14,645,743),5472=>array(87,-14,645,743),5473=>array(87,-14,645,743),5474=>array(87,-14,645,914),5475=>array(87,-14,645,914),5476=>array(41,0,671,729),5477=>array(41,0,671,914),5478=>array(59,0,689,729),5479=>array(59,0,689,914),5480=>array(98,0,907,914),5481=>array(59,0,842,914),5482=>array(67,326,467,734),5492=>array(34,0,772,743),5493=>array(58,0,796,743),5494=>array(58,0,796,914),5495=>array(34,-14,772,729),5496=>array(34,-14,772,914),5497=>array(58,-14,796,729),5498=>array(58,-14,796,914),5499=>array(67,318,508,734),5500=>array(98,0,654,729),5501=>array(67,326,429,734),5502=>array(67,0,1013,1037),5503=>array(67,0,1013,743),5504=>array(67,0,1013,914),5505=>array(67,-14,949,734),5506=>array(67,-14,949,914),5507=>array(67,-14,1013,734),5508=>array(67,-14,1013,914),5509=>array(67,318,798,734),5514=>array(34,0,772,743),5515=>array(58,0,796,743),5516=>array(34,-14,772,729),5517=>array(58,-14,796,729),5518=>array(67,0,1225,1037),5519=>array(67,0,1225,743),5520=>array(67,0,1225,914),5521=>array(67,-14,904,736),5522=>array(67,-14,904,914),5523=>array(67,-14,1225,736),5524=>array(67,-14,1225,914),5525=>array(67,332,645,736),5526=>array(67,332,1018,736),5536=>array(34,0,793,692),5537=>array(34,0,793,692),5538=>array(58,-242,817,450),5539=>array(58,-242,817,636),5540=>array(34,-242,793,450),5541=>array(34,-242,793,636),5542=>array(67,338,545,736),5543=>array(58,0,627,729),5544=>array(16,0,585,729),5545=>array(16,0,585,914),5546=>array(58,0,627,729),5547=>array(58,0,627,914),5548=>array(16,0,585,729),5549=>array(16,0,585,914),5550=>array(5,326,363,734),5551=>array(98,-14,594,729),5598=>array(98,0,711,729),5601=>array(56,0,669,729),5702=>array(67,326,413,734),5703=>array(67,240,413,820),5742=>array(57,0,391,306),5743=>array(67,0,949,743),5744=>array(67,0,1211,743),5745=>array(67,0,1598,743),5746=>array(67,0,1598,914),5747=>array(67,-14,1277,736),5748=>array(67,-14,1277,914),5749=>array(67,-14,1598,736),5750=>array(67,-14,1598,914),5760=>array(-10,246,487,328),5761=>array(-10,-125,502,328),5762=>array(-10,-125,722,328),5763=>array(-10,-125,941,328),5764=>array(-10,-125,1160,328),5765=>array(-10,-125,1379,328),5766=>array(-10,246,502,697),5767=>array(-10,246,722,697),5768=>array(-10,246,941,697),5769=>array(-10,246,1160,697),5770=>array(-10,246,1379,697),5771=>array(-10,-125,508,697),5772=>array(-10,-125,728,697),5773=>array(-10,-125,948,697),5774=>array(-10,-125,1168,697),5775=>array(-10,-125,1389,697),5776=>array(-10,41,502,533),5777=>array(-10,41,722,533),5778=>array(-10,41,939,533),5779=>array(-10,41,1159,533),5780=>array(-10,41,1379,533),5781=>array(-10,-125,508,697),5782=>array(-10,-125,762,697),5783=>array(-10,-83,798,328),5784=>array(-10,-240,1214,328),5785=>array(-10,246,1160,902),5786=>array(-10,82,693,328),5787=>array(55,28,517,544),5788=>array(-10,28,452,544),7424=>array(30,0,562,547),7425=>array(5,0,669,547),7426=>array(60,-14,929,560),7427=>array(30,0,530,547),7428=>array(55,-14,488,560),7429=>array(91,0,550,547),7430=>array(18,0,550,547),7431=>array(91,0,443,547),7432=>array(63,-14,471,561),7433=>array(94,-213,184,547),7434=>array(0,-14,310,547),7435=>array(91,0,576,547),7436=>array(1,0,498,560),7437=>array(91,0,664,547),7438=>array(91,0,559,547),7439=>array(55,-14,557,560),7440=>array(62,-14,495,560),7441=>array(55,22,629,524),7442=>array(55,57,629,489),7443=>array(25,2,663,543),7444=>array(55,-14,970,560),7446=>array(55,273,557,560),7447=>array(55,-14,557,273),7448=>array(74,0,475,547),7449=>array(24,0,507,547),7450=>array(24,0,507,547),7451=>array(29,0,553,547),7452=>array(91,-16,510,547),7453=>array(85,37,646,495),7454=>array(85,38,857,496),7455=>array(23,-238,583,560),7456=>array(30,0,562,547),7457=>array(42,0,776,547),7458=>array(43,0,482,547),7459=>array(59,-14,466,547),7462=>array(87,0,498,560),7463=>array(30,0,562,547),7464=>array(74,0,490,547),7465=>array(74,0,475,547),7466=>array(44,0,546,547),7467=>array(37,0,556,547),7468=>array(5,326,426,734),7469=>array(2,326,573,734),7470=>array(62,326,388,734),7472=>array(62,326,448,734),7473=>array(62,326,358,734),7474=>array(41,326,336,734),7475=>array(35,318,437,742),7476=>array(62,326,412,734),7477=>array(62,326,124,734),7478=>array(-33,214,124,734),7479=>array(62,326,426,734),7480=>array(62,326,348,734),7481=>array(62,326,482,734),7482=>array(62,326,410,734),7483=>array(62,326,410,734),7484=>array(35,318,460,742),7485=>array(35,318,405,742),7486=>array(62,326,358,734),7487=>array(62,326,419,734),7488=>array(-2,326,387,734),7489=>array(55,318,406,734),7490=>array(21,326,603,734),7491=>array(38,318,329,640),7492=>array(38,318,329,640),7493=>array(35,318,343,640),7494=>array(38,318,585,640),7495=>array(57,318,365,751),7496=>array(35,318,343,751),7497=>array(35,318,354,640),7498=>array(35,318,354,640),7499=>array(41,318,298,640),7500=>array(40,318,297,640),7501=>array(35,209,343,640),7502=>array(60,207,116,632),7503=>array(57,326,363,751),7504=>array(57,326,560,640),7505=>array(57,209,346,640),7506=>array(35,318,351,640),7507=>array(35,318,307,640),7508=>array(35,479,351,640),7509=>array(35,318,351,479),7510=>array(57,209,365,640),7511=>array(17,326,232,719),7512=>array(54,318,342,632),7513=>array(54,347,407,604),7514=>array(57,319,560,633),7515=>array(19,326,354,632),7517=>array(59,209,357,755),7518=>array(10,209,354,632),7519=>array(35,318,351,742),7520=>array(35,209,379,635),7521=>array(18,209,346,633),7522=>array(60,0,116,425),7523=>array(57,0,259,313),7524=>array(54,-8,342,306),7525=>array(19,0,354,306),7526=>array(59,-117,357,429),7527=>array(10,-117,354,306),7528=>array(59,-117,367,313),7529=>array(35,-117,379,309),7530=>array(18,-117,346,307),7543=>array(91,-208,580,560),7544=>array(62,326,412,734),7547=>array(57,0,314,547),7549=>array(24,-208,643,560),7557=>array(71,-208,273,760),7579=>array(35,318,343,640),7580=>array(35,318,307,640),7581=>array(35,287,307,640),7582=>array(35,318,351,751),7583=>array(41,318,298,640),7584=>array(15,326,234,751),7585=>array(-11,209,170,632),7586=>array(35,209,343,632),7587=>array(54,209,342,632),7588=>array(36,326,198,751),7589=>array(60,326,187,632),7590=>array(36,326,198,632),7591=>array(36,326,198,632),7592=>array(-83,209,172,751),7593=>array(60,209,187,751),7594=>array(44,209,172,751),7595=>array(55,326,314,640),7596=>array(57,209,560,640),7597=>array(57,209,560,633),7598=>array(-11,209,348,640),7599=>array(57,209,417,640),7600=>array(55,326,346,640),7601=>array(35,318,351,640),7602=>array(35,210,351,751),7603=>array(34,209,297,640),7604=>array(-11,209,224,751),7605=>array(17,209,232,719),7606=>array(46,318,445,632),7607=>array(35,318,355,632),7608=>array(57,317,321,632),7609=>array(60,326,343,632),7610=>array(19,326,354,632),7611=>array(27,326,304,632),7612=>array(27,209,374,632),7613=>array(27,296,304,632),7614=>array(27,207,330,632),7615=>array(35,320,351,756),7620=>array(-456,616,-44,800),7621=>array(-456,616,-44,800),7622=>array(-456,616,-44,800),7623=>array(-456,616,-44,800),7624=>array(-468,616,-32,800),7625=>array(-468,616,-32,800),7680=>array(8,-241,676,729),7681=>array(60,-241,522,560),7682=>array(98,0,615,914),7683=>array(90,-14,580,915),7684=>array(98,-183,615,729),7685=>array(91,-183,580,760),7686=>array(98,-156,615,729),7687=>array(91,-156,580,760),7688=>array(56,-193,644,928),7689=>array(55,-193,488,800),7690=>array(98,0,711,914),7691=>array(55,-14,544,942),7692=>array(98,-183,711,729),7693=>array(55,-183,544,760),7694=>array(98,-156,711,729),7695=>array(55,-156,544,760),7696=>array(98,-192,711,729),7697=>array(55,-193,544,760),7698=>array(98,-240,711,729),7699=>array(55,-240,544,760),7700=>array(98,0,568,1044),7701=>array(55,-14,562,921),7702=>array(98,0,568,1044),7703=>array(55,-14,562,921),7704=>array(98,-213,568,729),7705=>array(55,-213,562,560),7706=>array(98,-192,568,729),7707=>array(55,-192,562,560),7708=>array(98,-193,568,928),7709=>array(55,-193,562,785),7710=>array(98,0,517,914),7711=>array(23,0,371,942),7712=>array(56,-14,693,887),7713=>array(55,-208,544,745),7714=>array(98,0,654,913),7715=>array(90,0,549,915),7716=>array(98,-183,654,729),7717=>array(91,-183,549,760),7718=>array(98,0,654,914),7719=>array(-9,0,549,913),7720=>array(8,-193,654,729),7721=>array(1,-193,549,760),7722=>array(98,-222,654,729),7723=>array(91,-222,549,760),7724=>array(0,-192,322,729),7725=>array(-22,-192,300,760),7726=>array(3,0,293,1044),7727=>array(-6,0,284,886),7728=>array(98,0,677,928),7729=>array(91,0,576,928),7730=>array(98,-183,677,729),7731=>array(91,-183,576,760),7732=>array(98,-156,677,729),7733=>array(91,-156,576,760),7734=>array(98,-183,552,729),7735=>array(98,-183,189,760),7736=>array(1,-183,552,927),7737=>array(-1,-183,291,899),7738=>array(98,-156,552,729),7739=>array(-6,-156,286,760),7740=>array(98,-240,552,729),7741=>array(-17,-240,295,760),7742=>array(98,0,765,928),7743=>array(91,0,889,800),7744=>array(98,0,765,914),7745=>array(91,0,889,760),7746=>array(98,-183,765,729),7747=>array(91,-183,889,560),7748=>array(98,0,650,914),7749=>array(91,0,549,760),7750=>array(98,-183,650,729),7751=>array(91,-183,549,560),7752=>array(98,-156,650,729),7753=>array(91,-156,549,560),7754=>array(98,-240,650,729),7755=>array(91,-240,549,560),7756=>array(56,-14,731,1044),7757=>array(55,-14,557,881),7758=>array(56,-14,731,1042),7759=>array(55,-14,557,882),7760=>array(56,-14,731,1044),7761=>array(55,-14,557,921),7762=>array(56,-14,731,1044),7763=>array(55,-14,557,921),7764=>array(98,0,569,928),7765=>array(91,-208,580,800),7766=>array(98,0,569,914),7767=>array(91,-208,580,760),7768=>array(98,0,666,913),7769=>array(91,0,411,760),7770=>array(98,-183,666,729),7771=>array(91,-183,411,560),7772=>array(98,-183,666,899),7773=>array(91,-183,411,745),7774=>array(98,-156,666,729),7775=>array(41,-156,411,560),7776=>array(66,-14,579,914),7777=>array(54,-14,472,760),7778=>array(66,-183,579,742),7779=>array(54,-183,472,560),7780=>array(66,-14,579,928),7781=>array(54,-14,485,800),7782=>array(66,-14,579,1042),7783=>array(54,-14,472,973),7784=>array(66,-183,579,914),7785=>array(54,-183,472,733),7786=>array(-3,0,614,914),7787=>array(27,0,368,942),7788=>array(-3,-183,614,729),7789=>array(27,-183,368,702),7790=>array(-3,-156,614,729),7791=>array(27,-156,390,702),7792=>array(-3,-240,614,729),7793=>array(27,-240,394,702),7794=>array(87,-183,645,729),7795=>array(85,-183,543,560),7796=>array(87,-192,645,729),7797=>array(85,-192,543,560),7798=>array(87,-213,645,729),7799=>array(85,-213,543,560),7800=>array(87,-14,645,1044),7801=>array(85,-14,543,990),7802=>array(87,-14,645,1025),7803=>array(85,-14,543,869),7804=>array(8,0,676,936),7805=>array(30,0,562,777),7806=>array(8,-183,676,729),7807=>array(30,-183,562,547),7808=>array(33,0,956,931),7809=>array(42,0,776,802),7810=>array(33,0,956,931),7811=>array(42,0,776,803),7812=>array(33,0,956,913),7813=>array(42,0,776,758),7814=>array(33,0,956,913),7815=>array(42,0,776,760),7816=>array(33,-183,956,729),7817=>array(42,-183,776,547),7818=>array(30,0,654,914),7819=>array(29,0,559,760),7820=>array(30,0,654,913),7821=>array(29,0,559,758),7822=>array(-2,0,613,914),7823=>array(30,-208,562,760),7824=>array(45,0,640,928),7825=>array(43,0,482,800),7826=>array(45,-183,640,729),7827=>array(43,-183,482,547),7828=>array(45,-156,640,729),7829=>array(43,-156,482,547),7830=>array(91,-156,549,760),7831=>array(2,0,368,913),7832=>array(42,0,776,878),7833=>array(30,-208,562,878),7834=>array(60,-14,672,760),7835=>array(23,0,371,942),7836=>array(1,0,371,760),7837=>array(23,0,371,760),7838=>array(87,-14,713,743),7839=>array(55,-14,557,742),7840=>array(8,-183,676,729),7841=>array(60,-183,522,560),7842=>array(8,0,676,992),7843=>array(60,-14,522,810),7844=>array(8,0,676,1028),7845=>array(60,-14,585,846),7846=>array(8,0,676,1028),7847=>array(60,-14,522,847),7848=>array(8,0,676,1044),7849=>array(60,-14,577,862),7850=>array(8,0,676,1057),7851=>array(60,-14,522,875),7852=>array(8,-183,676,928),7853=>array(60,-183,522,800),7854=>array(8,0,676,1044),7855=>array(60,-14,522,877),7856=>array(8,0,676,1044),7857=>array(60,-14,522,877),7858=>array(8,0,676,1068),7859=>array(60,-14,522,901),7860=>array(8,0,676,1043),7861=>array(60,-14,522,876),7862=>array(8,-183,676,946),7863=>array(60,-183,522,765),7864=>array(98,-183,568,729),7865=>array(55,-183,562,560),7866=>array(98,0,568,992),7867=>array(55,-14,562,810),7868=>array(98,0,568,921),7869=>array(55,-14,562,777),7870=>array(98,0,637,1028),7871=>array(55,-14,613,846),7872=>array(98,0,568,1028),7873=>array(55,-14,562,847),7874=>array(98,0,620,1044),7875=>array(55,-14,605,862),7876=>array(98,0,568,1057),7877=>array(55,-14,562,875),7878=>array(98,-183,568,928),7879=>array(55,-183,562,800),7880=>array(44,0,263,992),7881=>array(33,0,252,811),7882=>array(98,-183,197,729),7883=>array(93,-183,184,760),7884=>array(56,-183,731,742),7885=>array(55,-183,557,560),7886=>array(56,-14,731,992),7887=>array(55,-14,557,810),7888=>array(56,-14,731,1028),7889=>array(55,-14,601,846),7890=>array(56,-14,731,1028),7891=>array(55,-14,557,847),7892=>array(56,-14,731,1044),7893=>array(55,-14,592,862),7894=>array(56,-14,731,1057),7895=>array(55,-14,557,875),7896=>array(56,-183,731,928),7897=>array(55,-183,557,800),7898=>array(50,-14,764,927),7899=>array(58,-14,603,800),7900=>array(50,-14,764,927),7901=>array(58,-14,603,800),7902=>array(50,-14,764,992),7903=>array(58,-14,603,810),7904=>array(50,-14,764,921),7905=>array(58,-14,603,777),7906=>array(50,-183,764,760),7907=>array(58,-183,603,615),7908=>array(87,-183,645,729),7909=>array(85,-183,543,560),7910=>array(87,-14,645,992),7911=>array(85,-14,543,810),7912=>array(84,-4,796,927),7913=>array(86,-14,676,800),7914=>array(84,-4,796,927),7915=>array(86,-14,676,800),7916=>array(84,-4,796,992),7917=>array(86,-14,676,810),7918=>array(84,-4,796,921),7919=>array(86,-14,676,777),7920=>array(84,-183,796,760),7921=>array(86,-183,676,615),7922=>array(-2,0,613,931),7923=>array(30,-208,562,802),7924=>array(-2,-183,613,729),7925=>array(30,-208,562,547),7926=>array(-2,0,613,996),7927=>array(30,-208,562,813),7928=>array(-2,0,613,921),7929=>array(30,-208,562,777),7930=>array(98,0,764,729),7931=>array(16,0,462,760),7936=>array(55,-12,611,797),7937=>array(55,-12,611,797),7938=>array(55,-12,611,800),7939=>array(55,-12,611,800),7940=>array(55,-12,611,800),7941=>array(55,-12,611,800),7942=>array(55,-12,611,928),7943=>array(55,-12,611,928),7944=>array(8,0,676,797),7945=>array(8,0,676,797),7946=>array(2,0,869,800),7947=>array(3,0,869,800),7948=>array(3,0,761,800),7949=>array(2,0,793,800),7950=>array(3,0,700,928),7951=>array(2,0,734,928),7952=>array(65,-14,473,797),7953=>array(65,-14,473,797),7954=>array(65,-14,473,800),7955=>array(65,-14,473,800),7956=>array(65,-14,486,800),7957=>array(65,-14,501,800),7960=>array(3,0,647,797),7961=>array(3,0,647,797),7962=>array(2,0,902,800),7963=>array(3,0,911,800),7964=>array(3,0,834,800),7965=>array(2,0,864,800),7968=>array(91,-208,549,797),7969=>array(91,-208,549,797),7970=>array(91,-208,549,800),7971=>array(91,-208,549,800),7972=>array(91,-208,549,800),7973=>array(91,-208,549,800),7974=>array(91,-208,549,928),7975=>array(91,-208,549,928),7976=>array(3,0,739,797),7977=>array(3,0,737,797),7978=>array(2,0,988,800),7979=>array(3,0,991,800),7980=>array(3,0,929,800),7981=>array(2,0,953,800),7982=>array(3,0,835,928),7983=>array(2,0,849,928),7984=>array(76,0,304,797),7985=>array(71,0,304,797),7986=>array(-39,0,340,800),7987=>array(-34,0,347,800),7988=>array(2,0,362,800),7989=>array(-22,0,366,800),7990=>array(-26,0,304,928),7991=>array(-28,0,304,928),7992=>array(3,0,282,797),7993=>array(3,0,276,797),7994=>array(2,0,537,800),7995=>array(3,0,537,800),7996=>array(3,0,472,800),7997=>array(2,0,501,800),7998=>array(3,0,392,928),7999=>array(2,0,395,928),8000=>array(55,-14,557,797),8001=>array(55,-14,557,797),8002=>array(55,-14,557,800),8003=>array(55,-14,557,800),8004=>array(55,-14,557,800),8005=>array(55,-14,557,800),8008=>array(3,-14,748,797),8009=>array(3,-14,792,797),8010=>array(2,-14,1039,800),8011=>array(3,-14,1043,800),8012=>array(3,-14,882,800),8013=>array(2,-14,914,800),8016=>array(73,-14,521,797),8017=>array(73,-14,521,797),8018=>array(73,-14,521,800),8019=>array(73,-14,521,800),8020=>array(73,-14,521,800),8021=>array(73,-14,521,800),8022=>array(73,-14,521,928),8023=>array(73,-14,521,928),8025=>array(3,0,786,797),8027=>array(3,0,1000,800),8029=>array(2,0,1014,800),8031=>array(2,0,900,928),8032=>array(66,-14,769,797),8033=>array(66,-14,769,797),8034=>array(66,-14,769,800),8035=>array(66,-14,769,800),8036=>array(66,-14,769,800),8037=>array(66,-14,769,800),8038=>array(66,-14,769,928),8039=>array(66,-14,769,928),8040=>array(3,0,764,797),8041=>array(3,0,805,797),8042=>array(2,0,1051,800),8043=>array(3,0,1057,800),8044=>array(3,0,908,800),8045=>array(2,0,934,800),8046=>array(3,0,883,928),8047=>array(2,0,914,928),8048=>array(55,-12,611,800),8049=>array(55,-12,611,800),8050=>array(65,-14,473,800),8051=>array(65,-14,473,800),8052=>array(91,-208,549,800),8053=>array(91,-208,549,800),8054=>array(-56,0,304,800),8055=>array(81,0,324,800),8056=>array(55,-14,557,800),8057=>array(55,-14,557,800),8058=>array(73,-14,521,800),8059=>array(73,-14,521,800),8060=>array(66,-14,769,800),8061=>array(66,-14,769,800),8064=>array(55,-208,611,797),8065=>array(55,-208,611,797),8066=>array(55,-208,611,800),8067=>array(55,-208,611,800),8068=>array(55,-208,611,800),8069=>array(55,-208,611,800),8070=>array(55,-208,611,928),8071=>array(55,-208,611,928),8072=>array(8,-208,676,797),8073=>array(8,-208,676,797),8074=>array(2,-208,869,800),8075=>array(3,-208,869,800),8076=>array(3,-208,761,800),8077=>array(2,-208,793,800),8078=>array(3,-208,700,928),8079=>array(2,-208,734,928),8080=>array(91,-208,549,797),8081=>array(91,-208,549,797),8082=>array(91,-208,549,800),8083=>array(91,-208,549,800),8084=>array(91,-208,549,800),8085=>array(91,-208,549,800),8086=>array(91,-208,549,928),8087=>array(91,-208,549,928),8088=>array(3,-208,739,797),8089=>array(3,-208,737,797),8090=>array(2,-208,988,800),8091=>array(3,-208,991,800),8092=>array(3,-208,929,800),8093=>array(2,-208,953,800),8094=>array(3,-208,835,928),8095=>array(2,-208,849,928),8096=>array(66,-208,769,797),8097=>array(66,-208,769,797),8098=>array(66,-208,769,800),8099=>array(66,-208,769,800),8100=>array(66,-208,769,800),8101=>array(66,-208,769,800),8102=>array(66,-208,769,928),8103=>array(66,-208,769,928),8104=>array(3,-208,764,797),8105=>array(3,-208,805,797),8106=>array(2,-208,1051,800),8107=>array(3,-208,1057,800),8108=>array(3,-208,908,800),8109=>array(2,-208,934,800),8110=>array(3,-208,883,928),8111=>array(2,-208,914,928),8112=>array(55,-12,611,785),8113=>array(55,-12,611,745),8114=>array(55,-208,611,800),8115=>array(55,-208,611,559),8116=>array(55,-208,611,800),8118=>array(55,-12,611,777),8119=>array(55,-208,611,777),8120=>array(8,0,676,928),8121=>array(8,0,676,899),8122=>array(-2,0,708,800),8123=>array(8,0,676,800),8124=>array(8,-208,676,729),8125=>array(190,595,309,797),8126=>array(214,-208,321,-45),8127=>array(190,595,309,797),8128=>array(89,639,411,777),8129=>array(89,659,411,928),8130=>array(91,-208,549,800),8131=>array(91,-208,549,560),8132=>array(91,-208,549,800),8134=>array(91,-208,549,777),8135=>array(91,-208,549,777),8136=>array(-2,0,741,800),8137=>array(-12,0,682,800),8138=>array(-2,0,833,800),8139=>array(-6,0,765,800),8140=>array(98,-208,654,729),8141=>array(67,595,446,800),8142=>array(88,595,447,800),8143=>array(89,595,411,928),8144=>array(-10,0,304,785),8145=>array(-14,0,304,745),8146=>array(-20,0,304,978),8147=>array(2,0,313,978),8150=>array(-14,0,309,777),8151=>array(-13,0,310,928),8152=>array(-5,0,300,928),8153=>array(1,0,293,899),8154=>array(-2,0,377,800),8155=>array(-9,0,311,800),8157=>array(62,595,443,800),8158=>array(73,595,461,800),8159=>array(89,595,411,928),8160=>array(73,-14,521,785),8161=>array(73,-14,521,745),8162=>array(73,-14,521,978),8163=>array(73,-14,521,978),8164=>array(91,-208,580,797),8165=>array(91,-208,580,797),8166=>array(73,-14,521,777),8167=>array(73,-14,521,928),8168=>array(-2,0,613,928),8169=>array(-2,0,613,899),8170=>array(-2,0,847,800),8171=>array(-15,0,821,800),8172=>array(3,0,651,797),8173=>array(83,659,395,978),8174=>array(105,659,415,978),8175=>array(83,617,317,800),8178=>array(66,-208,769,800),8179=>array(66,-208,769,547),8180=>array(66,-208,769,800),8182=>array(66,-14,769,777),8183=>array(66,-208,769,777),8184=>array(-2,-14,885,800),8185=>array(-7,-14,750,800),8186=>array(-2,0,884,800),8187=>array(-18,0,752,800),8188=>array(38,-208,726,738),8189=>array(181,616,415,800),8190=>array(190,595,309,797),8208=>array(49,234,312,314),8209=>array(49,234,312,314),8210=>array(49,239,587,309),8211=>array(49,239,451,309),8212=>array(49,239,951,309),8213=>array(0,239,1000,309),8214=>array(127,-236,371,764),8215=>array(-10,-236,510,-9),8216=>array(85,489,228,729),8217=>array(87,499,230,729),8218=>array(85,-116,228,124),8219=>array(87,499,230,729),8220=>array(85,489,428,729),8221=>array(85,489,428,729),8222=>array(85,-116,428,124),8223=>array(85,489,428,729),8224=>array(28,-96,472,729),8225=>array(28,-96,472,729),8226=>array(150,227,440,516),8227=>array(150,188,479,555),8228=>array(115,0,219,124),8229=>array(115,0,552,124),8230=>array(115,0,885,124),8231=>array(107,302,210,426),8240=>array(55,-14,1287,742),8241=>array(55,-14,1681,742),8242=>array(20,547,203,729),8243=>array(20,547,350,729),8244=>array(20,547,496,729),8245=>array(20,547,203,729),8246=>array(20,547,350,729),8247=>array(20,547,496,729),8248=>array(5,-236,333,-30),8249=>array(77,69,306,517),8250=>array(94,69,323,517),8251=>array(95,2,740,725),8252=>array(72,0,414,729),8253=>array(72,0,461,742),8254=>array(-10,686,510,755),8255=>array(-43,-237,847,-60),8256=>array(-43,752,847,929),8257=>array(-42,-236,286,229),8258=>array(30,-29,970,814),8259=>array(108,313,400,421),8260=>array(-183,-14,350,742),8261=>array(86,-132,293,760),8262=>array(86,-132,293,760),8263=>array(36,0,886,742),8264=>array(72,0,661,742),8265=>array(72,0,661,742),8266=>array(49,-123,448,545),8267=>array(115,-96,566,729),8268=>array(105,220,395,509),8269=>array(105,220,395,509),8270=>array(30,-29,470,427),8271=>array(139,-116,282,517),8272=>array(-43,-237,847,929),8273=>array(30,-7,470,929),8274=>array(71,-93,408,729),8275=>array(49,228,951,399),8276=>array(-43,-240,847,-63),8277=>array(152,98,686,631),8278=>array(122,149,464,589),8279=>array(20,547,643,729),8280=>array(175,125,663,613),8281=>array(175,120,663,608),8282=>array(107,0,210,729),8283=>array(49,-138,749,867),8284=>array(55,0,783,729),8285=>array(107,39,210,655),8286=>array(107,8,210,683),8304=>array(42,319,366,742),8305=>array(60,326,116,751),8308=>array(31,326,369,734),8309=>array(50,319,353,734),8310=>array(45,319,369,742),8311=>array(53,326,354,734),8312=>array(43,319,365,742),8313=>array(41,319,364,742),8314=>array(67,326,461,677),8315=>array(67,479,461,525),8316=>array(67,422,461,581),8317=>array(54,252,195,751),8318=>array(50,252,191,751),8319=>array(57,326,346,640),8320=>array(42,-7,366,416),8321=>array(67,0,346,408),8322=>array(46,0,338,416),8323=>array(48,-7,350,416),8324=>array(31,0,369,408),8325=>array(50,-7,353,408),8326=>array(45,-7,369,416),8327=>array(53,0,354,408),8328=>array(43,-7,365,416),8329=>array(41,-7,364,416),8330=>array(67,0,461,351),8331=>array(67,152,461,199),8332=>array(67,96,461,254),8333=>array(54,-74,195,425),8334=>array(50,-74,191,425),8336=>array(38,-8,329,313),8337=>array(35,-8,354,313),8338=>array(35,-8,351,313),8339=>array(57,0,391,306),8340=>array(35,-8,354,313),8341=>array(57,0,346,425),8342=>array(57,0,363,425),8343=>array(60,0,116,425),8344=>array(57,0,560,313),8345=>array(57,0,346,313),8346=>array(57,-117,365,313),8347=>array(57,0,320,322),8348=>array(17,0,232,393),8352=>array(42,0,835,729),8353=>array(56,-44,593,778),8354=>array(47,-14,587,742),8355=>array(65,0,599,729),8356=>array(63,0,548,742),8357=>array(91,-93,889,640),8358=>array(57,0,691,729),8359=>array(98,-14,1226,729),8360=>array(98,-14,1025,729),8361=>array(29,0,960,729),8362=>array(46,-14,743,729),8363=>array(55,-156,619,760),8364=>array(0,-14,570,742),8365=>array(20,0,636,729),8366=>array(10,0,626,729),8367=>array(102,-222,1205,742),8368=>array(22,-14,569,742),8369=>array(33,0,579,729),8370=>array(45,-81,586,809),8371=>array(8,0,627,729),8372=>array(57,-14,717,742),8373=>array(81,-147,556,760),8376=>array(10,0,626,729),8377=>array(52,0,585,729),8378=>array(5,2,649,731),8400=>array(-491,635,-26,760),8401=>array(-470,635,-5,760),8406=>array(-470,560,-26,760),8407=>array(-470,560,-26,760),8411=>array(-491,560,-10,758),8412=>array(-586,560,86,758),8417=>array(-470,560,-26,760),8448=>array(33,-24,980,752),8449=>array(33,-24,999,752),8450=>array(56,-14,644,742),8451=>array(95,-14,1053,742),8452=>array(-21,0,637,729),8453=>array(29,-24,987,752),8454=>array(29,-24,1038,752),8455=>array(80,-14,560,742),8456=>array(54,-146,642,611),8457=>array(95,0,894,742),8459=>array(36,-14,943,748),8460=>array(1,-128,693,731),8461=>array(98,0,751,729),8462=>array(35,0,566,760),8463=>array(44,0,566,760),8464=>array(29,-15,432,742),8465=>array(52,-14,659,742),8466=>array(33,-14,679,743),8467=>array(-14,-14,353,742),8468=>array(16,-14,763,760),8469=>array(97,0,704,729),8470=>array(26,0,969,729),8471=>array(138,0,862,724),8472=>array(54,-221,658,495),8473=>array(98,0,666,729),8474=>array(56,-129,731,742),8475=>array(32,-9,764,774),8476=>array(41,-14,803,743),8477=>array(98,0,774,729),8478=>array(83,0,814,729),8479=>array(98,-107,666,847),8480=>array(126,443,770,730),8481=>array(-2,0,1023,547),8482=>array(144,447,784,729),8483=>array(8,-108,676,846),8484=>array(45,0,700,729),8485=>array(43,-213,523,760),8486=>array(38,0,726,738),8487=>array(38,-14,726,724),8488=>array(12,-149,573,783),8489=>array(33,0,255,547),8490=>array(98,0,677,729),8491=>array(8,0,676,928),8492=>array(45,0,734,772),8493=>array(63,-12,652,742),8494=>array(61,-12,793,647),8495=>array(42,-14,547,533),8496=>array(79,-14,565,742),8497=>array(41,-16,758,755),8498=>array(98,0,517,729),8499=>array(28,-28,1032,751),8500=>array(51,-12,411,395),8501=>array(50,-14,712,742),8502=>array(-2,-14,653,743),8503=>array(13,-35,407,742),8504=>array(42,-35,591,742),8505=>array(34,0,355,760),8506=>array(44,-21,915,654),8507=>array(74,0,1162,547),8508=>array(18,-8,685,547),8509=>array(0,-194,669,560),8510=>array(98,0,648,729),8511=>array(98,0,750,729),8512=>array(12,-192,791,719),8513=>array(80,-14,716,742),8514=>array(4,0,458,729),8515=>array(3,0,457,729),8516=>array(-2,0,613,729),8517=>array(42,0,786,729),8518=>array(44,-14,709,760),8519=>array(44,-14,572,560),8520=>array(39,0,313,760),8521=>array(-114,-208,313,760),8523=>array(29,-14,715,742),8526=>array(40,0,441,547),8528=>array(67,-14,922,742),8529=>array(67,-14,932,742),8530=>array(67,-14,1335,742),8531=>array(67,-14,918,742),8532=>array(46,-14,918,742),8533=>array(67,-14,921,742),8534=>array(46,-14,921,742),8535=>array(48,-14,921,742),8536=>array(31,-14,921,742),8537=>array(67,-14,937,742),8538=>array(50,-14,937,742),8539=>array(67,-14,933,742),8540=>array(48,-14,933,742),8541=>array(50,-14,933,742),8542=>array(53,-14,933,742),8543=>array(67,-14,751,742),8544=>array(98,0,197,729),8545=>array(98,0,394,729),8546=>array(98,0,591,729),8547=>array(98,0,915,729),8548=>array(8,0,676,729),8549=>array(8,0,824,729),8550=>array(8,0,1021,729),8551=>array(8,0,1219,729),8552=>array(98,0,886,729),8553=>array(30,0,654,729),8554=>array(30,0,835,729),8555=>array(30,0,1032,729),8556=>array(98,0,552,729),8557=>array(56,-14,644,742),8558=>array(98,0,711,729),8559=>array(98,0,765,729),8560=>array(94,0,184,760),8561=>array(94,0,364,760),8562=>array(94,0,543,760),8563=>array(94,0,782,760),8564=>array(30,0,562,547),8565=>array(30,0,717,760),8566=>array(30,0,897,760),8567=>array(30,0,1077,760),8568=>array(94,0,786,760),8569=>array(29,0,559,547),8570=>array(29,0,729,760),8571=>array(29,0,908,760),8572=>array(94,0,184,760),8573=>array(55,-14,488,560),8574=>array(55,-14,544,760),8575=>array(91,0,889,560),8576=>array(59,0,1186,729),8577=>array(98,0,711,729),8578=>array(59,0,1186,729),8579=>array(56,-14,644,742),8580=>array(62,-14,495,560),8581=>array(56,-208,644,742),8585=>array(42,-14,918,742),8592=>array(49,100,781,527),8593=>array(205,0,632,732),8594=>array(57,100,789,527),8595=>array(205,-3,632,729),8596=>array(49,100,789,527),8597=>array(205,-8,632,732),8598=>array(141,25,703,587),8599=>array(141,25,703,587),8600=>array(141,25,703,587),8601=>array(141,25,703,587),8602=>array(49,100,781,527),8603=>array(57,100,789,527),8604=>array(21,103,827,414),8605=>array(11,103,816,414),8606=>array(49,100,781,527),8607=>array(206,0,633,732),8608=>array(57,100,789,527),8609=>array(206,-3,633,729),8610=>array(49,100,781,527),8611=>array(57,100,789,527),8612=>array(49,100,781,527),8613=>array(206,0,632,732),8614=>array(57,100,789,527),8615=>array(206,-3,632,729),8616=>array(206,0,632,732),8617=>array(49,100,780,565),8618=>array(58,100,789,565),8619=>array(49,100,780,565),8620=>array(58,100,789,565),8621=>array(49,100,789,527),8622=>array(49,93,789,534),8623=>array(146,-2,702,730),8624=>array(169,0,629,743),8625=>array(209,0,669,743),8626=>array(169,-14,629,729),8627=>array(209,-14,669,729),8628=>array(233,-3,760,604),8629=>array(49,100,656,626),8630=>array(22,203,799,668),8631=>array(39,203,816,668),8632=>array(108,25,788,729),8633=>array(55,-46,783,673),8634=>array(103,62,762,680),8635=>array(77,62,736,680),8636=>array(49,272,781,527),8637=>array(49,100,781,355),8638=>array(377,0,632,732),8639=>array(205,0,460,732),8640=>array(57,272,789,527),8641=>array(57,100,789,355),8642=>array(377,0,632,732),8643=>array(205,0,460,732),8644=>array(49,-47,789,674),8645=>array(58,-3,779,732),8646=>array(49,-47,789,674),8647=>array(49,-47,781,674),8648=>array(59,0,779,732),8649=>array(58,-47,790,674),8650=>array(59,-3,779,729),8651=>array(49,7,789,620),8652=>array(49,7,789,620),8653=>array(49,100,781,527),8654=>array(49,94,789,533),8655=>array(57,100,789,527),8656=>array(49,100,781,527),8657=>array(206,0,633,732),8658=>array(57,100,789,527),8659=>array(206,-3,633,729),8660=>array(49,100,789,527),8661=>array(205,-8,633,732),8662=>array(141,-23,751,587),8663=>array(92,-23,703,587),8664=>array(92,25,703,636),8665=>array(141,25,751,636),8666=>array(49,100,781,527),8667=>array(57,100,789,527),8668=>array(49,100,781,527),8669=>array(57,100,789,527),8670=>array(205,0,632,732),8671=>array(205,-3,632,729),8672=>array(49,100,781,527),8673=>array(205,0,633,732),8674=>array(57,100,789,527),8675=>array(205,-3,633,729),8676=>array(52,99,781,528),8677=>array(57,99,786,528),8678=>array(27,65,781,562),8679=>array(171,0,667,754),8680=>array(35,65,789,562),8681=>array(171,-25,667,729),8682=>array(171,0,667,754),8683=>array(171,0,667,754),8684=>array(156,0,682,754),8685=>array(171,0,667,754),8686=>array(171,0,667,754),8687=>array(171,0,667,754),8688=>array(57,65,811,562),8689=>array(60,0,788,729),8690=>array(60,0,788,729),8691=>array(171,-25,667,754),8692=>array(57,100,789,527),8693=>array(58,-3,779,732),8694=>array(57,-193,789,820),8695=>array(49,94,781,533),8696=>array(57,94,789,533),8697=>array(49,94,789,533),8698=>array(49,94,781,533),8699=>array(57,94,789,533),8700=>array(49,94,789,533),8701=>array(27,96,781,531),8702=>array(57,96,811,531),8703=>array(27,96,811,531),8704=>array(8,0,676,729),8705=>array(66,-14,554,742),8706=>array(46,-14,471,662),8707=>array(98,0,568,729),8708=>array(98,-46,568,776),8709=>array(76,-10,795,710),8710=>array(-3,0,672,719),8711=>array(-3,0,672,719),8712=>array(85,-10,786,710),8713=>array(85,-138,786,835),8714=>array(106,76,612,550),8715=>array(85,-10,786,710),8716=>array(85,-138,786,835),8717=>array(106,76,612,550),8718=>array(146,0,490,485),8719=>array(76,-192,680,719),8720=>array(76,-192,680,719),8721=>array(12,-192,654,719),8722=>array(106,272,732,355),8723=>array(106,0,732,627),8724=>array(106,0,732,729),8725=>array(0,-93,337,729),8726=>array(192,-54,529,768),8727=>array(127,0,710,627),8728=>array(158,160,468,470),8729=>array(168,168,458,458),8730=>array(30,-20,637,811),8731=>array(30,-20,637,933),8732=>array(30,-20,637,924),8733=>array(107,112,607,487),8734=>array(107,112,726,487),8735=>array(138,99,700,661),8736=>array(85,0,786,729),8737=>array(85,-53,786,729),8738=>array(116,-3,732,727),8739=>array(211,-214,289,771),8740=>array(50,-214,451,771),8741=>array(133,-214,367,771),8742=>array(50,-214,451,771),8743=>array(129,0,603,579),8744=>array(129,0,603,579),8745=>array(129,0,603,579),8746=>array(129,0,603,579),8747=>array(57,-212,464,757),8748=>array(57,-212,732,757),8749=>array(57,-212,1000,757),8750=>array(57,-212,464,757),8751=>array(57,-212,732,757),8752=>array(57,-212,1000,757),8753=>array(57,-213,522,757),8754=>array(57,-212,514,757),8755=>array(57,-212,515,757),8756=>array(59,100,577,604),8757=>array(59,100,577,604),8758=>array(79,100,182,604),8759=>array(59,100,577,604),8760=>array(106,272,732,552),8761=>array(106,78,732,552),8762=>array(105,78,732,552),8763=>array(106,78,732,552),8764=>array(106,228,732,399),8765=>array(106,228,732,399),8766=>array(79,149,759,479),8767=>array(106,42,732,584),8768=>array(102,0,273,626),8769=>array(106,77,732,553),8770=>array(106,133,732,454),8771=>array(106,172,732,494),8772=>array(106,48,732,603),8773=>array(106,90,732,594),8774=>array(106,12,732,594),8775=>array(106,-5,732,657),8776=>array(106,133,732,494),8777=>array(106,2,732,625),8778=>array(106,90,732,598),8779=>array(106,59,732,602),8780=>array(106,90,732,594),8781=>array(105,105,732,521),8782=>array(106,26,732,601),8783=>array(106,172,732,601),8784=>array(106,172,732,625),8785=>array(106,1,732,625),8786=>array(106,2,733,625),8787=>array(106,2,733,625),8788=>array(101,151,899,476),8789=>array(100,151,900,475),8790=>array(106,172,732,454),8791=>array(106,172,732,760),8792=>array(106,172,732,662),8793=>array(106,172,732,812),8794=>array(106,172,732,812),8795=>array(106,172,732,849),8796=>array(106,172,732,854),8797=>array(106,172,732,764),8798=>array(106,172,732,760),8799=>array(106,172,732,856),8800=>array(106,19,732,608),8801=>array(106,90,732,537),8802=>array(106,-24,732,650),8803=>array(106,0,732,629),8804=>array(106,0,732,582),8805=>array(106,0,732,582),8806=>array(106,-83,732,638),8807=>array(106,-83,732,638),8808=>array(106,-164,732,638),8809=>array(106,-164,732,638),8810=>array(72,22,975,609),8811=>array(72,22,975,609),8812=>array(86,-132,378,759),8813=>array(105,13,732,613),8814=>array(106,2,732,674),8815=>array(106,-47,732,625),8816=>array(106,-102,732,667),8817=>array(106,-102,732,667),8818=>array(106,-55,732,582),8819=>array(106,-39,732,582),8820=>array(106,-105,732,664),8821=>array(106,-102,732,667),8822=>array(102,-87,732,686),8823=>array(102,-87,732,686),8824=>array(102,-197,732,797),8825=>array(102,-197,732,797),8826=>array(106,-38,732,664),8827=>array(106,-38,732,664),8828=>array(106,-105,732,667),8829=>array(106,-105,732,667),8830=>array(106,-85,732,667),8831=>array(106,-85,732,667),8832=>array(106,-61,732,764),8833=>array(106,-138,732,687),8834=>array(100,80,738,546),8835=>array(100,80,738,546),8836=>array(100,-96,738,726),8837=>array(100,-100,738,722),8838=>array(93,0,732,613),8839=>array(106,0,745,613),8840=>array(93,-116,732,730),8841=>array(106,-116,745,730),8842=>array(93,-73,732,614),8843=>array(93,-73,732,614),8844=>array(129,0,603,579),8845=>array(129,0,603,579),8846=>array(129,2,603,582),8847=>array(106,0,732,568),8848=>array(106,0,732,568),8849=>array(106,-83,732,630),8850=>array(106,-83,732,630),8851=>array(106,0,674,626),8852=>array(106,0,674,626),8853=>array(91,-14,747,643),8854=>array(91,-14,747,643),8855=>array(91,-14,747,643),8856=>array(91,-14,747,643),8857=>array(91,-14,747,643),8858=>array(91,-14,747,643),8859=>array(91,-14,747,643),8860=>array(91,-14,747,643),8861=>array(91,-14,747,643),8862=>array(91,-14,747,643),8863=>array(91,-14,747,643),8864=>array(91,-14,747,643),8865=>array(91,-14,747,643),8866=>array(85,0,786,700),8867=>array(85,0,786,700),8868=>array(85,0,786,700),8869=>array(85,0,786,700),8870=>array(85,0,436,700),8871=>array(85,0,436,700),8872=>array(85,0,786,700),8873=>array(85,0,786,700),8874=>array(85,0,786,700),8875=>array(85,0,786,700),8876=>array(85,-40,786,740),8877=>array(85,-40,786,740),8878=>array(85,-40,786,740),8879=>array(85,-40,786,740),8880=>array(106,-43,724,670),8881=>array(106,-43,724,670),8882=>array(106,15,732,612),8883=>array(106,15,732,612),8884=>array(106,-48,732,674),8885=>array(106,-48,732,674),8886=>array(59,175,941,454),8887=>array(59,175,941,454),8888=>array(48,175,790,454),8889=>array(59,-47,779,674),8890=>array(116,0,404,701),8891=>array(98,0,634,740),8892=>array(98,0,634,740),8893=>array(98,0,634,740),8894=>array(138,0,700,562),8895=>array(138,0,700,562),8896=>array(-3,-192,823,719),8897=>array(-3,-192,823,719),8898=>array(68,-192,752,719),8899=>array(68,-192,752,719),8900=>array(3,-233,491,807),8901=>array(107,285,210,409),8902=>array(122,149,504,512),8903=>array(106,15,732,613),8904=>array(106,-30,894,657),8905=>array(106,-30,894,657),8906=>array(106,-30,894,657),8907=>array(106,-30,894,657),8908=>array(106,-30,894,657),8909=>array(106,172,732,494),8910=>array(48,0,684,579),8911=>array(48,0,684,579),8912=>array(93,-3,732,630),8913=>array(106,-3,745,630),8914=>array(103,0,735,663),8915=>array(103,-14,735,649),8916=>array(186,0,652,729),8917=>array(106,-100,732,729),8918=>array(106,46,732,581),8919=>array(106,46,732,581),8920=>array(72,22,1350,609),8921=>array(72,22,1350,609),8922=>array(106,-228,732,854),8923=>array(106,-228,732,854),8924=>array(106,0,732,582),8925=>array(106,0,732,582),8926=>array(106,-105,732,667),8927=>array(106,-105,732,667),8928=>array(106,-178,732,764),8929=>array(106,-178,732,764),8930=>array(106,-141,732,767),8931=>array(106,-141,732,767),8932=>array(106,-94,732,619),8933=>array(106,-94,732,619),8934=>array(106,-138,732,582),8935=>array(106,-138,732,582),8936=>array(106,-169,732,667),8937=>array(110,-171,736,667),8938=>array(106,-130,732,756),8939=>array(106,-130,732,756),8940=>array(106,-189,732,815),8941=>array(104,-189,730,815),8942=>array(448,-93,551,715),8943=>array(115,249,884,373),8944=>array(115,-93,884,715),8945=>array(115,-93,884,715),8946=>array(43,-10,957,710),8947=>array(85,-10,786,710),8948=>array(106,76,612,550),8949=>array(85,-10,786,910),8950=>array(85,-10,786,853),8951=>array(106,76,612,686),8952=>array(85,-144,786,710),8953=>array(85,-10,786,710),8954=>array(43,-10,957,710),8955=>array(85,-10,786,710),8956=>array(106,76,612,550),8957=>array(85,-10,786,853),8958=>array(106,76,612,686),8959=>array(106,0,765,720),8960=>array(36,-18,567,514),8961=>array(56,162,540,443),8962=>array(71,0,563,596),8963=>array(205,481,632,732),8964=>array(205,0,632,251),8965=>array(205,0,632,406),8966=>array(205,0,632,513),8967=>array(154,-29,334,788),8968=>array(86,-132,293,760),8969=>array(97,-132,304,760),8970=>array(86,-132,293,760),8971=>array(97,-132,304,760),8972=>array(369,-77,759,313),8973=>array(49,-77,439,313),8974=>array(369,243,759,634),8975=>array(49,243,439,634),8976=>array(106,140,732,421),8977=>array(3,126,510,634),8984=>array(121,0,879,759),8985=>array(106,140,732,421),8988=>array(86,425,403,760),8989=>array(65,425,383,760),8990=>array(86,-70,403,264),8991=>array(65,-70,383,264),8992=>array(210,-250,497,928),8993=>array(21,-237,307,942),8996=>array(76,227,1076,575),8997=>array(76,0,1076,575),8998=>array(76,0,1414,760),8999=>array(76,0,1076,760),9000=>array(59,0,1385,729),9003=>array(0,0,1338,760),9004=>array(73,-91,800,748),9075=>array(81,0,304,547),9076=>array(91,-208,580,560),9077=>array(66,-14,769,547),9082=>array(55,-12,611,559),9085=>array(13,-228,745,102),9095=>array(76,0,1096,748),9108=>array(17,0,856,727),9115=>array(86,-252,414,946),9116=>array(86,-252,181,942),9117=>array(86,-240,414,942),9118=>array(86,-252,414,946),9119=>array(319,-252,414,942),9120=>array(86,-240,414,942),9121=>array(86,-252,414,928),9122=>array(86,-252,181,942),9123=>array(86,-240,414,942),9124=>array(86,-252,414,928),9125=>array(319,-252,414,935),9126=>array(86,-240,414,935),9127=>array(330,-261,668,928),9128=>array(82,-252,420,940),9129=>array(330,-240,668,940),9130=>array(330,-256,420,943),9131=>array(82,-261,420,928),9132=>array(330,-252,668,940),9133=>array(82,-240,420,940),9134=>array(210,-250,307,942),9166=>array(27,65,781,729),9167=>array(91,0,854,596),9187=>array(73,-91,800,748),9189=>array(3,75,766,444),9192=>array(43,-129,601,294),9250=>array(-62,-14,580,760),9251=>array(71,-228,563,102),9312=>array(74,-10,822,738),9313=>array(74,-10,822,738),9314=>array(74,-10,822,738),9315=>array(74,-10,822,738),9316=>array(74,-10,822,738),9317=>array(74,-10,822,738),9318=>array(74,-10,822,738),9319=>array(74,-10,822,738),9320=>array(74,-10,822,738),9321=>array(74,-10,822,738),9472=>array(-10,242,612,326),9473=>array(-10,200,612,368),9474=>array(262,-302,340,973),9475=>array(223,-302,379,973),9476=>array(-10,242,612,326),9477=>array(-10,200,612,368),9478=>array(262,-302,340,973),9479=>array(223,-302,379,973),9480=>array(-10,242,612,326),9481=>array(-10,200,612,368),9482=>array(262,-302,340,973),9483=>array(223,-302,379,973),9484=>array(262,-302,612,326),9485=>array(262,-302,612,368),9486=>array(223,-302,612,326),9487=>array(223,-302,612,368),9488=>array(-10,-302,340,326),9489=>array(-10,-302,340,368),9490=>array(-10,-302,379,326),9491=>array(-10,-302,379,368),9492=>array(262,242,612,973),9493=>array(262,200,612,973),9494=>array(223,242,612,973),9495=>array(223,200,612,973),9496=>array(-10,242,340,973),9497=>array(-10,200,340,973),9498=>array(-10,242,379,973),9499=>array(-10,200,379,973),9500=>array(262,-302,612,973),9501=>array(262,-302,612,973),9502=>array(223,-302,612,973),9503=>array(223,-302,612,973),9504=>array(223,-302,612,973),9505=>array(223,-302,612,973),9506=>array(223,-302,612,973),9507=>array(223,-302,612,973),9508=>array(-10,-302,340,973),9509=>array(-10,-302,340,973),9510=>array(-10,-302,379,973),9511=>array(-10,-302,379,973),9512=>array(-10,-302,379,973),9513=>array(-10,-302,379,973),9514=>array(-10,-302,379,973),9515=>array(-10,-302,379,973),9516=>array(-10,-302,612,326),9517=>array(-10,-302,612,368),9518=>array(-10,-302,612,368),9519=>array(-10,-302,612,368),9520=>array(-10,-302,612,326),9521=>array(-10,-302,612,368),9522=>array(-10,-302,612,368),9523=>array(-10,-302,612,368),9524=>array(-10,242,612,973),9525=>array(-10,200,612,973),9526=>array(-10,200,612,973),9527=>array(-10,200,612,973),9528=>array(-10,242,612,973),9529=>array(-10,200,612,973),9530=>array(-10,200,612,973),9531=>array(-10,200,612,973),9532=>array(-10,-302,612,973),9533=>array(-10,-302,612,973),9534=>array(-10,-302,612,973),9535=>array(-10,-302,612,973),9536=>array(-10,-302,612,973),9537=>array(-10,-302,612,973),9538=>array(-10,-302,612,973),9539=>array(-10,-302,612,973),9540=>array(-10,-302,612,973),9541=>array(-10,-302,612,973),9542=>array(-10,-302,612,973),9543=>array(-10,-302,612,973),9544=>array(-10,-302,612,973),9545=>array(-10,-302,612,973),9546=>array(-10,-302,612,973),9547=>array(-10,-302,612,973),9548=>array(-10,242,612,326),9549=>array(-10,200,612,368),9550=>array(262,-302,340,973),9551=>array(223,-302,379,973),9552=>array(-10,158,612,410),9553=>array(184,-302,418,973),9554=>array(262,-302,612,410),9555=>array(184,-302,612,326),9556=>array(184,-302,612,410),9557=>array(-10,-302,340,410),9558=>array(-10,-302,418,326),9559=>array(-10,-302,418,410),9560=>array(262,158,612,973),9561=>array(184,242,612,973),9562=>array(184,158,612,973),9563=>array(-10,158,340,973),9564=>array(-10,242,418,973),9565=>array(-10,158,418,973),9566=>array(262,-302,612,973),9567=>array(184,-302,612,973),9568=>array(184,-302,612,973),9569=>array(-10,-302,340,973),9570=>array(-10,-302,418,973),9571=>array(-10,-302,418,973),9572=>array(-10,-302,612,410),9573=>array(-10,-302,612,326),9574=>array(-10,-302,612,410),9575=>array(-10,158,612,973),9576=>array(-10,242,612,973),9577=>array(-10,158,612,973),9578=>array(-10,-302,612,973),9579=>array(-10,-302,612,973),9580=>array(-10,-302,612,973),9581=>array(262,-302,612,326),9582=>array(-10,-302,340,326),9583=>array(-10,242,340,973),9584=>array(262,242,612,973),9585=>array(-53,-302,655,973),9586=>array(-53,-302,655,973),9587=>array(-53,-302,655,973),9588=>array(-10,242,311,326),9589=>array(262,284,340,973),9590=>array(311,242,612,326),9591=>array(262,-302,340,284),9592=>array(-10,200,311,368),9593=>array(223,284,379,973),9594=>array(311,200,612,368),9595=>array(223,-302,379,284),9596=>array(-10,200,612,368),9597=>array(223,-302,379,973),9598=>array(-10,200,612,368),9599=>array(223,-302,379,973),9600=>array(-10,260,779,770),9601=>array(-10,-250,779,-123),9602=>array(-10,-250,779,-5),9603=>array(-10,-250,779,132),9604=>array(-10,-250,779,260),9605=>array(-10,-250,779,387),9606=>array(-10,-250,779,515),9607=>array(-10,-250,779,642),9608=>array(-10,-250,779,770),9609=>array(-10,-250,680,770),9610=>array(-10,-250,582,770),9611=>array(-10,-250,483,770),9612=>array(-10,-250,384,770),9613=>array(-10,-250,286,770),9614=>array(-10,-250,187,770),9615=>array(-10,-250,88,770),9616=>array(384,-250,778,770),9617=>array(-10,-250,680,770),9618=>array(-10,-250,775,770),9619=>array(-10,-250,779,770),9620=>array(-10,642,779,770),9621=>array(680,-250,778,770),9622=>array(-10,-250,385,260),9623=>array(384,-250,779,260),9624=>array(-10,260,385,770),9625=>array(-10,-250,779,770),9626=>array(-10,-250,779,770),9627=>array(-10,-250,779,770),9628=>array(-10,-250,779,770),9629=>array(384,260,779,770),9630=>array(-10,-250,779,770),9631=>array(-10,-250,779,770),9632=>array(91,-123,854,643),9633=>array(91,-123,854,643),9634=>array(91,-123,854,643),9635=>array(91,-123,854,643),9636=>array(91,-123,854,643),9637=>array(91,-123,854,643),9638=>array(91,-123,854,643),9639=>array(91,-123,854,643),9640=>array(91,-123,854,643),9641=>array(91,-123,854,643),9642=>array(91,11,587,509),9643=>array(91,11,587,509),9644=>array(91,75,854,444),9645=>array(91,75,854,444),9646=>array(91,-122,459,642),9647=>array(91,-122,459,642),9648=>array(3,75,766,444),9649=>array(3,75,766,444),9650=>array(3,-123,766,643),9651=>array(3,-123,766,643),9652=>array(3,11,499,509),9653=>array(3,11,499,509),9654=>array(3,-123,766,643),9655=>array(3,-123,766,643),9656=>array(3,11,499,509),9657=>array(3,11,499,509),9658=>array(3,11,766,509),9659=>array(3,11,766,509),9660=>array(3,-123,766,643),9661=>array(3,-123,766,643),9662=>array(3,11,499,509),9663=>array(3,11,499,509),9664=>array(3,-123,766,643),9665=>array(3,-123,766,643),9666=>array(3,11,499,509),9667=>array(3,11,499,509),9668=>array(3,11,766,509),9669=>array(3,11,766,509),9670=>array(3,-123,766,643),9671=>array(3,-123,766,643),9672=>array(3,-123,766,643),9673=>array(55,-125,818,645),9674=>array(3,-233,491,807),9675=>array(55,-125,818,645),9676=>array(56,-125,817,644),9677=>array(55,-125,818,645),9678=>array(55,-125,818,645),9679=>array(55,-123,818,641),9680=>array(55,-123,818,641),9681=>array(55,-123,818,641),9682=>array(55,-123,818,641),9683=>array(55,-123,818,641),9684=>array(55,-123,818,641),9685=>array(55,-123,818,641),9686=>array(55,-125,436,645),9687=>array(91,-125,472,645),9688=>array(91,-10,700,770),9689=>array(91,-250,879,770),9690=>array(91,260,879,770),9691=>array(91,-250,879,260),9692=>array(3,260,384,645),9693=>array(3,260,384,645),9694=>array(3,-125,384,260),9695=>array(3,-125,384,260),9696=>array(55,260,818,645),9697=>array(55,-125,818,260),9698=>array(3,-123,766,643),9699=>array(3,-123,766,643),9700=>array(3,-123,766,643),9701=>array(3,-123,766,643),9702=>array(150,227,440,516),9703=>array(91,-123,854,643),9704=>array(91,-123,854,643),9705=>array(91,-123,854,643),9706=>array(91,-123,854,643),9707=>array(91,-123,854,643),9708=>array(3,-123,766,643),9709=>array(3,-123,766,643),9710=>array(3,-123,766,643),9711=>array(55,-250,1064,770),9712=>array(91,-123,854,643),9713=>array(91,-123,854,643),9714=>array(91,-123,854,643),9715=>array(91,-123,854,643),9716=>array(55,-123,818,641),9717=>array(55,-123,818,641),9718=>array(55,-123,818,641),9719=>array(55,-123,818,641),9720=>array(3,-123,766,643),9721=>array(3,-123,766,643),9722=>array(3,-123,766,643),9723=>array(91,-66,739,585),9724=>array(91,-66,739,585),9725=>array(91,-17,642,537),9726=>array(91,-17,642,537),9727=>array(3,-123,766,643),9728=>array(83,0,813,729),9729=>array(51,-2,949,360),9730=>array(49,0,848,729),9731=>array(83,-0,813,927),9732=>array(64,0,833,880),9733=>array(65,-4,832,723),9734=>array(65,-4,832,723),9735=>array(83,2,490,729),9736=>array(83,0,813,731),9737=>array(83,0,813,730),9738=>array(61,0,828,727),9739=>array(61,0,828,723),9740=>array(61,-1,610,722),9741=>array(61,0,952,723),9742=>array(68,0,1177,729),9743=>array(71,0,1180,729),9744=>array(90,0,807,729),9745=>array(89,0,808,729),9746=>array(89,0,808,729),9747=>array(75,78,457,656),9748=>array(49,0,870,933),9749=>array(74,0,822,731),9750=>array(84,0,813,731),9751=>array(84,0,813,727),9752=>array(78,0,819,729),9753=>array(83,140,813,574),9754=>array(84,113,813,569),9755=>array(84,113,813,569),9756=>array(87,104,810,569),9757=>array(72,0,537,724),9758=>array(86,103,810,569),9759=>array(72,-3,537,720),9760=>array(61,0,835,730),9761=>array(84,0,813,730),9762=>array(83,0,813,730),9763=>array(49,0,848,730),9764=>array(49,-2,620,727),9765=>array(83,0,663,731),9766=>array(83,-1,566,731),9767=>array(83,0,701,911),9768=>array(83,0,462,730),9769=>array(83,-1,813,729),9770=>array(87,0,810,730),9771=>array(83,0,814,731),9772=>array(83,0,627,731),9773=>array(83,0,813,730),9774=>array(83,0,813,730),9775=>array(83,0,813,730),9776=>array(83,0,813,729),9777=>array(83,0,814,729),9778=>array(83,0,813,729),9779=>array(83,0,813,729),9780=>array(83,0,813,729),9781=>array(83,0,813,729),9782=>array(83,0,813,729),9783=>array(83,0,813,729),9784=>array(66,-11,831,735),9785=>array(83,-73,959,804),9786=>array(83,-73,959,804),9787=>array(83,-73,959,804),9788=>array(83,0,813,730),9789=>array(358,0,814,730),9790=>array(83,0,539,730),9791=>array(85,-102,528,732),9792=>array(85,-125,647,731),9793=>array(85,-14,647,843),9794=>array(79,-14,831,720),9795=>array(166,0,730,730),9796=>array(219,0,677,730),9797=>array(121,0,774,730),9798=>array(127,0,769,730),9799=>array(240,0,656,730),9800=>array(45,0,851,731),9801=>array(89,0,807,730),9802=>array(94,0,802,731),9803=>array(113,31,784,679),9804=>array(140,0,756,730),9805=>array(53,-180,843,730),9806=>array(83,52,813,653),9807=>array(34,-96,863,730),9808=>array(83,-0,813,730),9809=>array(94,0,802,730),9810=>array(86,153,810,579),9811=>array(157,0,739,730),9812=>array(98,0,798,730),9813=>array(110,0,786,730),9814=>array(167,-1,729,729),9815=>array(214,0,683,730),9816=>array(165,0,732,730),9817=>array(148,-0,748,730),9818=>array(98,0,798,730),9819=>array(110,0,786,730),9820=>array(167,-1,729,729),9821=>array(214,0,683,730),9822=>array(162,0,734,730),9823=>array(148,-0,748,730),9824=>array(158,0,738,729),9825=>array(90,0,806,727),9826=>array(168,0,728,729),9827=>array(111,0,785,729),9828=>array(157,0,739,729),9829=>array(89,0,808,729),9830=>array(168,0,728,729),9831=>array(111,0,785,732),9832=>array(105,-1,791,729),9833=>array(84,-5,339,729),9834=>array(84,-5,554,729),9835=>array(184,-102,712,729),9836=>array(92,-5,804,729),9837=>array(88,-3,392,731),9838=>array(84,0,273,731),9839=>array(84,0,400,731),9840=>array(84,0,664,731),9841=>array(64,0,701,731),9842=>array(84,0,813,709),9843=>array(76,16,820,731),9844=>array(76,16,820,731),9845=>array(76,16,820,731),9846=>array(76,16,820,731),9847=>array(76,16,820,731),9848=>array(76,16,820,731),9849=>array(76,16,820,731),9850=>array(76,16,820,731),9851=>array(84,0,812,704),9852=>array(83,0,814,731),9853=>array(83,0,814,731),9854=>array(83,0,814,731),9855=>array(149,1,747,731),9856=>array(73,0,797,725),9857=>array(73,0,797,725),9858=>array(73,0,797,725),9859=>array(73,0,797,725),9860=>array(73,0,797,725),9861=>array(73,0,797,725),9862=>array(83,0,813,731),9863=>array(83,0,813,731),9864=>array(83,0,813,731),9865=>array(83,0,813,731),9866=>array(83,0,813,98),9867=>array(83,0,813,98),9868=>array(83,0,813,413),9869=>array(83,0,813,413),9870=>array(83,0,813,413),9871=>array(83,0,813,413),9872=>array(168,3,728,731),9873=>array(168,3,728,731),9874=>array(52,0,844,731),9875=>array(97,-10,799,732),9876=>array(131,0,765,729),9877=>array(61,-10,479,732),9878=>array(59,-10,837,732),9879=>array(61,0,835,732),9880=>array(145,0,750,732),9881=>array(95,-17,802,727),9882=>array(128,-9,768,733),9883=>array(127,0,769,728),9884=>array(127,0,769,729),9888=>array(49,0,848,729),9889=>array(83,2,619,730),9890=>array(85,-125,919,731),9891=>array(79,-206,1023,720),9892=>array(85,-186,1109,856),9893=>array(85,-125,837,917),9894=>array(131,-14,727,869),9895=>array(101,-170,741,884),9896=>array(188,-14,650,869),9897=>array(4,133,829,596),9898=>array(187,133,651,596),9899=>array(187,133,651,596),9900=>array(247,194,591,537),9901=>array(174,194,664,537),9902=>array(41,169,797,560),9903=>array(5,194,833,536),9904=>array(103,237,757,540),9905=>array(211,42,626,698),9906=>array(85,-125,647,731),9907=>array(168,-125,646,731),9908=>array(86,-125,646,731),9909=>array(86,-125,646,731),9910=>array(59,-118,791,643),9911=>array(194,-104,595,710),9912=>array(158,-125,543,731),9920=>array(42,4,796,553),9921=>array(42,4,796,724),9922=>array(42,4,796,553),9923=>array(42,4,796,724),9954=>array(85,-14,647,843),9985=>array(11,190,803,635),9986=>array(42,141,784,588),9987=>array(11,94,803,539),9988=>array(36,119,824,613),9990=>array(42,-14,796,742),9991=>array(42,-14,796,742),9992=>array(59,21,782,708),9993=>array(64,107,773,622),9996=>array(212,0,561,742),9997=>array(21,83,802,678),9998=>array(89,75,724,710),9999=>array(26,198,819,530),10000=>array(89,75,724,710),10001=>array(43,185,757,544),10002=>array(67,209,757,520),10003=>array(150,97,667,630),10004=>array(116,87,721,631),10005=>array(126,72,711,657),10006=>array(85,31,752,698),10007=>array(118,-9,701,732),10008=>array(123,0,754,739),10009=>array(55,0,783,729),10010=>array(55,0,783,729),10011=>array(55,0,783,729),10012=>array(55,0,783,729),10013=>array(165,0,673,729),10014=>array(131,0,678,729),10015=>array(155,0,683,729),10016=>array(55,0,783,729),10017=>array(91,-13,747,744),10018=>array(41,-14,797,742),10019=>array(42,-12,796,742),10020=>array(41,-14,797,742),10021=>array(41,-13,797,743),10022=>array(42,-14,796,745),10023=>array(42,-14,796,745),10025=>array(23,-10,815,744),10026=>array(42,-14,796,742),10027=>array(23,-9,814,743),10028=>array(23,-10,815,744),10029=>array(23,-9,814,743),10030=>array(23,-9,814,743),10031=>array(23,-9,814,743),10032=>array(24,12,815,714),10033=>array(64,0,773,729),10034=>array(74,0,764,729),10035=>array(55,0,783,729),10036=>array(31,-14,787,742),10037=>array(41,-14,797,742),10038=>array(91,-14,747,742),10039=>array(41,-14,797,742),10040=>array(41,-14,797,742),10041=>array(41,-14,797,742),10042=>array(55,0,783,729),10043=>array(82,-14,756,742),10044=>array(82,-14,756,742),10045=>array(79,-14,759,742),10046=>array(79,-14,759,742),10047=>array(54,0,784,709),10048=>array(54,0,784,709),10049=>array(41,-14,797,742),10050=>array(42,-14,796,742),10051=>array(79,-14,759,742),10052=>array(89,0,749,729),10053=>array(76,0,762,729),10054=>array(63,2,773,729),10055=>array(79,-13,759,742),10056=>array(47,-13,791,730),10057=>array(47,-13,791,730),10058=>array(41,-13,797,743),10059=>array(41,-13,797,743),10061=>array(50,-10,847,738),10063=>array(60,-49,837,729),10064=>array(60,0,837,777),10065=>array(60,-49,837,729),10066=>array(60,0,837,777),10070=>array(83,-2,813,728),10072=>array(377,-240,460,760),10073=>array(336,-240,502,760),10074=>array(253,-240,585,760),10075=>array(85,395,264,729),10076=>array(59,395,237,729),10077=>array(85,395,479,729),10078=>array(59,395,453,729),10081=>array(155,-93,772,851),10082=>array(202,-17,636,742),10083=>array(163,-17,675,742),10084=>array(54,83,784,645),10085=>array(168,-1,729,729),10086=>array(62,21,724,702),10087=>array(78,169,759,564),10088=>array(196,-139,648,769),10089=>array(196,-139,648,769),10090=>array(264,-132,574,758),10091=>array(264,-132,574,758),10092=>array(215,-240,607,760),10093=>array(232,-240,623,760),10094=>array(142,-240,685,760),10095=>array(153,-240,696,760),10096=>array(167,-240,656,760),10097=>array(183,-240,672,760),10098=>array(346,-241,535,760),10099=>array(303,-241,492,760),10100=>array(175,-163,634,760),10101=>array(204,-163,663,760),10102=>array(74,-10,822,738),10103=>array(74,-10,822,738),10104=>array(74,-10,822,738),10105=>array(74,-10,822,738),10106=>array(74,-10,822,738),10107=>array(74,-10,822,738),10108=>array(74,-10,822,738),10109=>array(74,-10,822,738),10110=>array(74,-10,822,738),10111=>array(74,-10,822,738),10112=>array(4,-52,833,780),10113=>array(4,-52,833,780),10114=>array(4,-52,833,780),10115=>array(4,-52,833,780),10116=>array(4,-52,833,780),10117=>array(4,-52,833,780),10118=>array(4,-52,833,780),10119=>array(4,-52,833,780),10120=>array(4,-52,833,780),10121=>array(4,-52,833,780),10122=>array(4,-52,833,780),10123=>array(4,-52,833,780),10124=>array(4,-52,833,780),10125=>array(4,-52,833,780),10126=>array(4,-52,833,780),10127=>array(4,-52,833,780),10128=>array(4,-52,833,780),10129=>array(4,-52,833,780),10130=>array(4,-52,833,780),10131=>array(4,-52,833,780),10132=>array(57,75,789,552),10136=>array(123,55,682,614),10137=>array(57,100,789,527),10138=>array(123,13,682,572),10139=>array(57,129,789,498),10140=>array(57,57,764,570),10141=>array(57,100,789,527),10142=>array(57,100,789,527),10143=>array(57,100,789,527),10144=>array(57,100,789,527),10145=>array(57,65,811,562),10146=>array(111,94,789,533),10147=>array(111,94,789,533),10148=>array(111,-4,789,631),10149=>array(57,100,789,548),10150=>array(57,79,789,527),10151=>array(240,-7,606,634),10152=>array(57,100,789,527),10153=>array(57,75,765,552),10154=>array(57,75,765,552),10155=>array(21,12,794,586),10156=>array(21,12,794,586),10157=>array(135,0,774,574),10158=>array(135,0,774,574),10159=>array(62,49,799,574),10161=>array(62,49,799,574),10162=>array(154,-20,721,585),10163=>array(63,157,789,470),10164=>array(81,55,682,655),10165=>array(57,173,789,454),10166=>array(82,-29,682,572),10167=>array(82,55,682,655),10168=>array(57,172,789,455),10169=>array(82,-28,682,572),10170=>array(56,84,789,543),10171=>array(73,140,779,487),10172=>array(79,167,774,460),10173=>array(79,118,774,509),10174=>array(57,81,789,546),10181=>array(54,-163,352,769),10182=>array(39,-163,336,769),10208=>array(3,-233,491,807),10214=>array(86,-132,398,760),10215=>array(85,-132,398,760),10216=>array(89,-132,310,759),10217=>array(80,-132,301,759),10218=>array(89,-132,476,759),10219=>array(80,-132,467,759),10224=>array(44,0,794,732),10225=>array(43,-3,793,729),10226=>array(39,53,814,658),10227=>array(39,61,814,666),10228=>array(57,-14,1108,643),10229=>array(49,100,1376,527),10230=>array(57,100,1385,527),10231=>array(49,100,1385,527),10232=>array(49,100,1376,527),10233=>array(57,100,1385,527),10234=>array(49,100,1385,527),10235=>array(49,100,1376,527),10236=>array(57,100,1385,527),10237=>array(49,100,1376,527),10238=>array(57,100,1385,527),10239=>array(57,100,1385,527),10241=>array(146,635,293,781),10242=>array(146,358,293,504),10243=>array(146,358,293,781),10244=>array(146,82,293,228),10245=>array(146,82,293,781),10246=>array(146,82,293,504),10247=>array(146,82,293,781),10248=>array(439,635,586,781),10249=>array(146,635,586,781),10250=>array(146,358,586,781),10251=>array(146,358,586,781),10252=>array(146,82,586,781),10253=>array(146,82,586,781),10254=>array(146,82,586,781),10255=>array(146,82,586,781),10256=>array(439,358,586,504),10257=>array(146,358,586,781),10258=>array(146,358,586,504),10259=>array(146,358,586,781),10260=>array(146,82,586,504),10261=>array(146,82,586,781),10262=>array(146,82,586,504),10263=>array(146,82,586,781),10264=>array(439,358,586,781),10265=>array(146,358,586,781),10266=>array(146,358,586,781),10267=>array(146,358,586,781),10268=>array(146,82,586,781),10269=>array(146,82,586,781),10270=>array(146,82,586,781),10271=>array(146,82,586,781),10272=>array(439,82,586,228),10273=>array(146,82,586,781),10274=>array(146,82,586,504),10275=>array(146,82,586,781),10276=>array(146,82,586,228),10277=>array(146,82,586,781),10278=>array(146,82,586,504),10279=>array(146,82,586,781),10280=>array(439,82,586,781),10281=>array(146,82,586,781),10282=>array(146,82,586,781),10283=>array(146,82,586,781),10284=>array(146,82,586,781),10285=>array(146,82,586,781),10286=>array(146,82,586,781),10287=>array(146,82,586,781),10288=>array(439,82,586,504),10289=>array(146,82,586,781),10290=>array(146,82,586,504),10291=>array(146,82,586,781),10292=>array(146,82,586,504),10293=>array(146,82,586,781),10294=>array(146,82,586,504),10295=>array(146,82,586,781),10296=>array(439,82,586,781),10297=>array(146,82,586,781),10298=>array(146,82,586,781),10299=>array(146,82,586,781),10300=>array(146,82,586,781),10301=>array(146,82,586,781),10302=>array(146,82,586,781),10303=>array(146,82,586,781),10304=>array(146,-195,293,-49),10305=>array(146,-195,293,781),10306=>array(146,-195,293,504),10307=>array(146,-195,293,781),10308=>array(146,-195,293,228),10309=>array(146,-195,293,781),10310=>array(146,-195,293,504),10311=>array(146,-195,293,781),10312=>array(146,-195,586,781),10313=>array(146,-195,586,781),10314=>array(146,-195,586,781),10315=>array(146,-195,586,781),10316=>array(146,-195,586,781),10317=>array(146,-195,586,781),10318=>array(146,-195,586,781),10319=>array(146,-195,586,781),10320=>array(146,-195,586,504),10321=>array(146,-195,586,781),10322=>array(146,-195,586,504),10323=>array(146,-195,586,781),10324=>array(146,-195,586,504),10325=>array(146,-195,586,781),10326=>array(146,-195,586,504),10327=>array(146,-195,586,781),10328=>array(146,-195,586,781),10329=>array(146,-195,586,781),10330=>array(146,-195,586,781),10331=>array(146,-195,586,781),10332=>array(146,-195,586,781),10333=>array(146,-195,586,781),10334=>array(146,-195,586,781),10335=>array(146,-195,586,781),10336=>array(146,-195,586,228),10337=>array(146,-195,586,781),10338=>array(146,-195,586,504),10339=>array(146,-195,586,781),10340=>array(146,-195,586,228),10341=>array(146,-195,586,781),10342=>array(146,-195,586,504),10343=>array(146,-195,586,781),10344=>array(146,-195,586,781),10345=>array(146,-195,586,781),10346=>array(146,-195,586,781),10347=>array(146,-195,586,781),10348=>array(146,-195,586,781),10349=>array(146,-195,586,781),10350=>array(146,-195,586,781),10351=>array(146,-195,586,781),10352=>array(146,-195,586,504),10353=>array(146,-195,586,781),10354=>array(146,-195,586,504),10355=>array(146,-195,586,781),10356=>array(146,-195,586,504),10357=>array(146,-195,586,781),10358=>array(146,-195,586,504),10359=>array(146,-195,586,781),10360=>array(146,-195,586,781),10361=>array(146,-195,586,781),10362=>array(146,-195,586,781),10363=>array(146,-195,586,781),10364=>array(146,-195,586,781),10365=>array(146,-195,586,781),10366=>array(146,-195,586,781),10367=>array(146,-195,586,781),10368=>array(439,-195,586,-49),10369=>array(146,-195,586,781),10370=>array(146,-195,586,504),10371=>array(146,-195,586,781),10372=>array(146,-195,586,228),10373=>array(146,-195,586,781),10374=>array(146,-195,586,504),10375=>array(146,-195,586,781),10376=>array(439,-195,586,781),10377=>array(146,-195,586,781),10378=>array(146,-195,586,781),10379=>array(146,-195,586,781),10380=>array(146,-195,586,781),10381=>array(146,-195,586,781),10382=>array(146,-195,586,781),10383=>array(146,-195,586,781),10384=>array(439,-195,586,504),10385=>array(146,-195,586,781),10386=>array(146,-195,586,504),10387=>array(146,-195,586,781),10388=>array(146,-195,586,504),10389=>array(146,-195,586,781),10390=>array(146,-195,586,504),10391=>array(146,-195,586,781),10392=>array(439,-195,586,781),10393=>array(146,-195,586,781),10394=>array(146,-195,586,781),10395=>array(146,-195,586,781),10396=>array(146,-195,586,781),10397=>array(146,-195,586,781),10398=>array(146,-195,586,781),10399=>array(146,-195,586,781),10400=>array(439,-195,586,228),10401=>array(146,-195,586,781),10402=>array(146,-195,586,504),10403=>array(146,-195,586,781),10404=>array(146,-195,586,228),10405=>array(146,-195,586,781),10406=>array(146,-195,586,504),10407=>array(146,-195,586,781),10408=>array(439,-195,586,781),10409=>array(146,-195,586,781),10410=>array(146,-195,586,781),10411=>array(146,-195,586,781),10412=>array(146,-195,586,781),10413=>array(146,-195,586,781),10414=>array(146,-195,586,781),10415=>array(146,-195,586,781),10416=>array(439,-195,586,504),10417=>array(146,-195,586,781),10418=>array(146,-195,586,504),10419=>array(146,-195,586,781),10420=>array(146,-195,586,504),10421=>array(146,-195,586,781),10422=>array(146,-195,586,504),10423=>array(146,-195,586,781),10424=>array(439,-195,586,781),10425=>array(146,-195,586,781),10426=>array(146,-195,586,781),10427=>array(146,-195,586,781),10428=>array(146,-195,586,781),10429=>array(146,-195,586,781),10430=>array(146,-195,586,781),10431=>array(146,-195,586,781),10432=>array(146,-195,586,-49),10433=>array(146,-195,586,781),10434=>array(146,-195,586,504),10435=>array(146,-195,586,781),10436=>array(146,-195,586,228),10437=>array(146,-195,586,781),10438=>array(146,-195,586,504),10439=>array(146,-195,586,781),10440=>array(146,-195,586,781),10441=>array(146,-195,586,781),10442=>array(146,-195,586,781),10443=>array(146,-195,586,781),10444=>array(146,-195,586,781),10445=>array(146,-195,586,781),10446=>array(146,-195,586,781),10447=>array(146,-195,586,781),10448=>array(146,-195,586,504),10449=>array(146,-195,586,781),10450=>array(146,-195,586,504),10451=>array(146,-195,586,781),10452=>array(146,-195,586,504),10453=>array(146,-195,586,781),10454=>array(146,-195,586,504),10455=>array(146,-195,586,781),10456=>array(146,-195,586,781),10457=>array(146,-195,586,781),10458=>array(146,-195,586,781),10459=>array(146,-195,586,781),10460=>array(146,-195,586,781),10461=>array(146,-195,586,781),10462=>array(146,-195,586,781),10463=>array(146,-195,586,781),10464=>array(146,-195,586,228),10465=>array(146,-195,586,781),10466=>array(146,-195,586,504),10467=>array(146,-195,586,781),10468=>array(146,-195,586,228),10469=>array(146,-195,586,781),10470=>array(146,-195,586,504),10471=>array(146,-195,586,781),10472=>array(146,-195,586,781),10473=>array(146,-195,586,781),10474=>array(146,-195,586,781),10475=>array(146,-195,586,781),10476=>array(146,-195,586,781),10477=>array(146,-195,586,781),10478=>array(146,-195,586,781),10479=>array(146,-195,586,781),10480=>array(146,-195,586,504),10481=>array(146,-195,586,781),10482=>array(146,-195,586,504),10483=>array(146,-195,586,781),10484=>array(146,-195,586,504),10485=>array(146,-195,586,781),10486=>array(146,-195,586,504),10487=>array(146,-195,586,781),10488=>array(146,-195,586,781),10489=>array(146,-195,586,781),10490=>array(146,-195,586,781),10491=>array(146,-195,586,781),10492=>array(146,-195,586,781),10493=>array(146,-195,586,781),10494=>array(146,-195,586,781),10495=>array(146,-195,586,781),10502=>array(49,100,781,527),10503=>array(57,100,789,527),10506=>array(125,0,713,732),10507=>array(125,-3,713,729),10560=>array(39,63,644,838),10561=>array(39,63,644,838),10627=>array(125,-163,609,760),10628=>array(125,-163,609,760),10702=>array(106,-226,732,747),10703=>array(106,15,894,612),10704=>array(106,15,894,612),10705=>array(106,-30,894,657),10706=>array(106,-30,894,657),10707=>array(106,-30,894,657),10708=>array(106,-30,894,657),10709=>array(106,-30,894,657),10731=>array(3,-233,491,807),10746=>array(106,0,732,627),10747=>array(106,0,732,627),10752=>array(28,-198,972,748),10753=>array(28,-198,972,748),10754=>array(28,-198,972,748),10764=>array(57,-212,1268,757),10765=>array(57,-212,464,757),10766=>array(57,-212,464,757),10767=>array(57,-212,464,757),10768=>array(57,-212,464,757),10769=>array(57,-212,522,757),10770=>array(57,-212,464,757),10771=>array(57,-212,464,757),10772=>array(57,-212,555,757),10773=>array(57,-212,464,757),10774=>array(57,-212,464,757),10775=>array(-32,-212,553,757),10776=>array(57,-212,464,757),10777=>array(57,-212,464,757),10778=>array(57,-212,464,757),10779=>array(57,-212,469,872),10780=>array(52,-327,464,757),10799=>array(137,31,701,596),10858=>array(106,228,732,552),10859=>array(106,78,732,552),10877=>array(106,-123,732,581),10878=>array(106,-123,732,581),10879=>array(106,-123,733,581),10880=>array(106,-123,732,581),10881=>array(106,-123,732,644),10882=>array(106,-123,732,644),10883=>array(106,-123,733,759),10884=>array(106,-123,732,756),10885=>array(106,-132,732,663),10886=>array(106,-132,732,663),10887=>array(106,-121,732,582),10888=>array(106,-121,732,582),10889=>array(106,-204,732,663),10890=>array(106,-204,732,663),10891=>array(106,-311,732,791),10892=>array(106,-311,732,791),10893=>array(106,-124,732,663),10894=>array(106,-124,732,663),10895=>array(106,-241,732,756),10896=>array(106,-241,732,756),10897=>array(106,-229,732,730),10898=>array(106,-229,732,730),10899=>array(106,-224,732,741),10900=>array(106,-224,732,741),10901=>array(106,-61,732,644),10902=>array(106,-61,732,644),10903=>array(106,-61,733,644),10904=>array(106,-61,732,644),10905=>array(106,-36,732,685),10906=>array(106,-36,732,685),10907=>array(106,-31,732,725),10908=>array(106,-31,732,725),10909=>array(106,8,732,645),10910=>array(106,23,732,645),10911=>array(106,-176,732,729),10912=>array(106,-176,732,729),10926=>array(106,50,732,601),10927=>array(106,-24,732,667),10928=>array(106,-24,732,667),10929=>array(106,-145,732,667),10930=>array(106,-145,732,667),10931=>array(106,-121,732,662),10932=>array(106,-121,732,662),10933=>array(106,-195,732,662),10934=>array(106,-195,732,662),10935=>array(106,-191,732,693),10936=>array(106,-191,732,693),10937=>array(106,-259,732,693),10938=>array(106,-259,732,693),11001=>array(106,-171,732,585),11002=>array(106,-171,732,585),11008=>array(88,-27,703,587),11009=>array(141,-27,755,587),11010=>array(88,25,703,640),11011=>array(141,25,755,640),11012=>array(27,65,789,562),11013=>array(27,65,781,562),11014=>array(171,0,667,754),11015=>array(171,-25,667,729),11016=>array(88,-27,703,587),11017=>array(141,-27,755,587),11018=>array(88,25,703,640),11019=>array(141,25,755,640),11020=>array(27,65,789,562),11021=>array(171,-25,667,754),11022=>array(57,-3,790,355),11023=>array(57,272,790,630),11024=>array(35,-3,768,355),11025=>array(35,272,768,630),11026=>array(91,-123,854,643),11027=>array(91,-123,854,643),11028=>array(91,-123,854,643),11029=>array(91,-123,854,643),11030=>array(3,-123,766,643),11031=>array(3,-123,766,643),11032=>array(3,-123,766,643),11033=>array(3,-123,766,643),11034=>array(91,-123,854,643),11039=>array(18,-26,852,767),11040=>array(18,-26,852,767),11041=>array(73,-91,800,748),11042=>array(73,-91,800,748),11043=>array(17,-35,856,692),11044=>array(55,-250,1064,770),11091=>array(38,-47,832,788),11092=>array(38,-47,832,788),11360=>array(5,0,552,729),11361=>array(5,0,271,760),11362=>array(-20,0,552,729),11363=>array(5,0,569,729),11364=>array(98,-200,666,729),11365=>array(35,-46,576,592),11366=>array(-12,-93,384,822),11367=>array(98,-157,752,729),11368=>array(91,-138,639,760),11369=>array(98,-157,677,729),11370=>array(91,-138,576,760),11371=>array(45,-157,738,729),11372=>array(43,-138,572,547),11373=>array(56,-14,683,743),11374=>array(98,-200,765,729),11375=>array(8,0,676,729),11376=>array(56,-14,683,743),11377=>array(30,0,734,560),11378=>array(33,0,1128,742),11379=>array(42,0,961,560),11380=>array(51,0,562,587),11381=>array(98,0,555,729),11382=>array(94,0,477,547),11383=>array(55,-12,602,551),11385=>array(0,-13,320,760),11386=>array(55,-14,557,560),11387=>array(48,0,400,547),11388=>array(-11,-117,116,425),11389=>array(5,326,426,734),11390=>array(66,-242,598,742),11391=>array(45,-242,640,729),11520=>array(60,-63,544,547),11521=>array(24,-235,556,546),11522=>array(39,-235,535,546),11523=>array(62,-10,572,807),11524=>array(51,-235,537,546),11525=>array(39,-236,862,546),11526=>array(0,-8,575,816),11527=>array(53,0,900,546),11528=>array(69,0,542,546),11529=>array(51,-235,556,816),11530=>array(39,0,903,546),11531=>array(53,-8,595,816),11532=>array(39,0,544,816),11533=>array(51,0,887,546),11534=>array(51,0,556,546),11535=>array(69,-235,767,816),11536=>array(51,0,880,816),11537=>array(51,0,545,816),11538=>array(50,-235,536,546),11539=>array(51,-235,884,661),11540=>array(60,-235,892,546),11541=>array(49,-235,784,816),11542=>array(39,0,545,546),11543=>array(51,-235,556,547),11544=>array(51,-235,551,546),11545=>array(39,-235,541,816),11546=>array(42,-235,532,547),11547=>array(60,-9,596,816),11548=>array(39,-235,870,547),11549=>array(29,-235,545,546),11550=>array(47,-235,547,546),11551=>array(34,-235,547,567),11552=>array(39,0,875,546),11553=>array(49,-235,544,816),11554=>array(60,0,538,626),11555=>array(61,-235,553,816),11556=>array(51,-235,603,546),11557=>array(60,-8,841,816),11568=>array(55,-14,591,380),11569=>array(56,-14,832,742),11570=>array(56,-14,832,742),11571=>array(31,0,651,729),11572=>array(33,0,652,729),11573=>array(31,0,604,729),11574=>array(73,0,488,729),11575=>array(8,0,676,729),11576=>array(8,0,676,729),11577=>array(98,0,568,729),11578=>array(64,0,534,729),11579=>array(73,-14,609,742),11580=>array(107,0,811,729),11581=>array(45,0,665,729),11582=>array(73,0,437,729),11583=>array(45,0,665,729),11584=>array(56,-14,832,742),11585=>array(56,-52,832,781),11586=>array(73,0,197,729),11587=>array(20,0,610,729),11588=>array(98,0,654,729),11589=>array(30,0,654,729),11590=>array(73,0,454,729),11591=>array(45,0,629,729),11592=>array(73,301,571,426),11593=>array(98,0,568,729),11594=>array(54,0,448,729),11595=>array(54,-15,899,742),11596=>array(54,0,725,729),11597=>array(98,0,650,729),11598=>array(100,0,566,729),11599=>array(98,0,197,729),11600=>array(54,0,725,729),11601=>array(98,0,198,729),11602=>array(78,-14,705,729),11603=>array(48,-14,584,742),11604=>array(56,-14,832,742),11605=>array(56,-54,832,742),11606=>array(98,0,654,729),11607=>array(98,0,222,729),11608=>array(73,0,676,729),11609=>array(56,-14,832,742),11610=>array(56,-14,832,780),11611=>array(56,-14,681,742),11612=>array(49,0,719,729),11613=>array(30,0,654,729),11614=>array(56,-14,681,742),11615=>array(98,0,568,729),11616=>array(8,0,676,729),11617=>array(98,0,654,729),11618=>array(98,0,559,729),11619=>array(56,0,732,729),11620=>array(98,0,495,729),11621=>array(56,0,732,729),11631=>array(26,522,489,729),11800=>array(70,-14,459,728),11806=>array(106,78,732,399),11810=>array(86,403,293,760),11811=>array(97,403,304,760),11812=>array(86,-132,293,225),11813=>array(97,-132,304,225),11822=>array(72,0,461,742),19904=>array(83,-158,813,729),19905=>array(83,-158,813,729),19906=>array(83,-158,813,729),19907=>array(83,-158,813,729),19908=>array(83,-158,813,729),19909=>array(83,-158,813,729),19910=>array(83,-158,813,729),19911=>array(83,-158,813,729),19912=>array(83,-158,813,729),19913=>array(83,-158,814,729),19914=>array(83,-158,813,729),19915=>array(83,-158,813,729),19916=>array(83,-158,813,729),19917=>array(83,-158,813,729),19918=>array(83,-158,813,729),19919=>array(83,-158,813,729),19920=>array(83,-158,814,729),19921=>array(83,-158,813,729),19922=>array(83,-158,814,729),19923=>array(83,-158,813,729),19924=>array(83,-158,813,729),19925=>array(83,-158,813,729),19926=>array(83,-158,813,729),19927=>array(83,-158,813,729),19928=>array(83,-158,813,729),19929=>array(83,-158,813,729),19930=>array(83,-158,813,729),19931=>array(83,-158,814,729),19932=>array(83,-158,813,729),19933=>array(83,-158,813,729),19934=>array(83,-158,814,729),19935=>array(83,-158,813,729),19936=>array(83,-158,813,729),19937=>array(83,-158,813,729),19938=>array(83,-158,813,729),19939=>array(83,-158,813,729),19940=>array(83,-158,813,729),19941=>array(83,-158,814,729),19942=>array(83,-158,813,729),19943=>array(83,-158,813,729),19944=>array(83,-158,814,729),19945=>array(83,-158,813,729),19946=>array(83,-158,814,729),19947=>array(83,-158,813,729),19948=>array(83,-158,814,729),19949=>array(83,-158,813,729),19950=>array(83,-158,814,729),19951=>array(83,-158,813,729),19952=>array(83,-158,814,729),19953=>array(83,-158,813,729),19954=>array(83,-158,813,729),19955=>array(83,-158,813,729),19956=>array(83,-158,813,729),19957=>array(83,-158,814,729),19958=>array(83,-158,813,729),19959=>array(83,-158,813,729),19960=>array(83,-158,813,729),19961=>array(83,-158,814,729),19962=>array(83,-158,813,729),19963=>array(83,-158,814,729),19964=>array(83,-158,814,729),19965=>array(83,-158,813,729),19966=>array(83,-158,813,729),19967=>array(83,-158,813,729),42192=>array(98,0,615,729),42193=>array(98,0,569,729),42194=>array(34,0,505,729),42195=>array(98,0,711,729),42196=>array(-3,0,614,729),42197=>array(-3,0,614,729),42198=>array(56,-14,693,742),42199=>array(98,0,677,729),42200=>array(-21,0,558,729),42201=>array(0,-14,414,729),42202=>array(56,-14,644,742),42203=>array(56,-14,644,742),42204=>array(45,0,640,729),42205=>array(98,0,517,729),42206=>array(98,0,517,729),42207=>array(98,0,765,729),42208=>array(98,0,650,729),42209=>array(98,0,552,729),42210=>array(66,-14,579,742),42211=>array(98,0,666,729),42212=>array(29,0,597,729),42213=>array(8,0,676,729),42214=>array(8,0,676,729),42215=>array(98,0,654,729),42216=>array(80,-14,716,742),42217=>array(98,0,512,743),42218=>array(33,0,956,729),42219=>array(30,0,654,729),42220=>array(-2,0,613,729),42221=>array(71,0,588,729),42222=>array(8,0,676,729),42223=>array(8,0,676,729),42224=>array(98,0,568,729),42225=>array(64,0,534,729),42226=>array(98,0,197,729),42227=>array(56,-14,731,742),42228=>array(87,-14,645,729),42229=>array(87,0,645,743),42230=>array(4,0,458,729),42231=>array(56,0,669,729),42232=>array(85,0,214,155),42233=>array(71,-156,214,155),42234=>array(85,0,511,155),42235=>array(85,-156,511,155),42236=>array(71,-156,214,517),42237=>array(85,0,214,517),42238=>array(85,0,502,354),42239=>array(85,172,502,454),42564=>array(56,-14,569,742),42565=>array(49,-14,467,560),42566=>array(98,0,347,729),42567=>array(81,0,304,547),42572=>array(58,-14,1122,645),42573=>array(74,-14,954,471),42576=>array(29,0,931,729),42577=>array(30,0,817,560),42580=>array(56,-14,977,742),42581=>array(55,-14,748,560),42582=>array(103,0,968,729),42583=>array(94,-14,752,560),42594=>array(49,-157,1004,729),42595=>array(52,-138,863,547),42596=>array(41,0,1008,729),42597=>array(37,0,852,547),42598=>array(98,0,1120,729),42599=>array(91,0,959,547),42600=>array(56,-14,731,742),42601=>array(55,-14,557,560),42602=>array(56,-14,799,742),42603=>array(55,-14,658,560),42604=>array(56,-14,1302,742),42605=>array(55,-14,964,560),42606=>array(28,-208,851,743),42634=>array(-3,-200,758,729),42635=>array(29,-208,660,547),42636=>array(-3,0,614,729),42637=>array(29,0,553,547),42644=>array(85,0,587,729),42645=>array(91,0,549,760),42760=>array(104,0,389,668),42761=>array(104,0,389,668),42762=>array(104,0,389,668),42763=>array(104,0,389,668),42764=>array(104,0,389,668),42765=>array(104,0,389,668),42766=>array(104,0,389,668),42767=>array(104,0,389,668),42768=>array(104,0,389,668),42769=>array(104,0,389,668),42770=>array(104,0,389,668),42771=>array(104,0,389,668),42772=>array(104,0,389,668),42773=>array(104,0,389,668),42774=>array(104,0,389,668),42779=>array(50,326,319,736),42780=>array(50,324,319,734),42781=>array(95,326,158,734),42782=>array(95,326,158,734),42783=>array(95,0,158,408),42786=>array(67,0,350,729),42787=>array(67,0,321,547),42788=>array(56,224,411,742),42789=>array(56,42,411,560),42790=>array(98,-200,654,729),42791=>array(91,-208,549,760),42792=>array(-3,-213,819,729),42793=>array(27,-213,650,702),42794=>array(80,-14,560,742),42795=>array(65,-200,473,561),42800=>array(91,0,437,547),42801=>array(54,-14,472,560),42802=>array(8,0,1241,729),42803=>array(60,-14,894,560),42804=>array(8,-14,1147,742),42805=>array(60,-14,935,560),42806=>array(8,-14,1055,729),42807=>array(60,-14,890,560),42808=>array(8,0,963,729),42809=>array(60,-14,788,560),42810=>array(8,0,963,729),42811=>array(60,-14,788,560),42812=>array(8,-208,951,729),42813=>array(60,-208,788,560),42814=>array(56,-14,644,742),42815=>array(62,-14,495,560),42816=>array(5,0,677,729),42817=>array(7,0,580,760),42822=>array(98,0,675,729),42823=>array(94,0,298,760),42824=>array(41,0,576,729),42825=>array(59,0,368,760),42826=>array(5,-14,802,742),42827=>array(5,-14,694,560),42830=>array(56,-14,1302,742),42831=>array(55,-14,964,560),42832=>array(5,0,569,729),42833=>array(-2,-208,580,560),42834=>array(24,0,700,729),42835=>array(24,-208,720,560),42838=>array(56,-178,731,742),42839=>array(55,-208,637,560),42852=>array(5,0,569,729),42853=>array(-2,-208,580,760),42854=>array(5,0,569,729),42855=>array(-2,-208,580,760),42880=>array(5,0,459,729),42881=>array(94,-208,184,560),42882=>array(98,-208,637,742),42883=>array(91,-208,549,560),42889=>array(117,0,220,517),42890=>array(78,161,298,380),42891=>array(151,235,250,729),42892=>array(96,458,179,729),42893=>array(85,0,587,729),42894=>array(38,-208,416,760),42896=>array(98,-157,733,729),42897=>array(91,-138,621,560),42912=>array(2,-14,778,742),42913=>array(2,-208,633,560),42914=>array(2,0,677,729),42915=>array(2,0,577,760),42916=>array(2,0,746,729),42917=>array(2,0,633,560),42918=>array(2,0,693,729),42919=>array(2,0,411,560),42920=>array(2,-14,633,742),42921=>array(2,-14,519,560),42922=>array(-51,0,703,729),43002=>array(91,0,824,547),43003=>array(58,0,477,729),43004=>array(34,0,505,729),43005=>array(98,0,765,729),43006=>array(98,0,197,928),43007=>array(33,0,1167,729),61184=>array(95,602,323,668),61185=>array(69,451,342,668),61186=>array(54,301,361,668),61187=>array(47,150,368,668),61188=>array(44,0,372,668),61189=>array(69,451,342,668),61190=>array(95,451,323,518),61191=>array(69,301,342,518),61192=>array(54,150,361,518),61193=>array(47,0,368,518),61194=>array(54,301,361,668),61195=>array(69,301,342,518),61196=>array(95,301,323,367),61197=>array(69,150,342,367),61198=>array(54,0,361,367),61199=>array(47,150,368,668),61200=>array(54,150,361,518),61201=>array(69,150,342,367),61202=>array(95,150,323,217),61203=>array(69,0,342,217),61204=>array(44,0,372,668),61205=>array(47,0,368,518),61206=>array(54,0,361,367),61207=>array(69,0,342,217),61208=>array(95,0,323,66),61209=>array(104,0,171,668),61440=>array(73,0,903,732),61441=>array(73,0,903,732),61442=>array(73,0,903,732),61443=>array(73,0,903,732),62464=>array(54,-15,526,828),62465=>array(54,-15,526,828),62466=>array(54,-15,570,837),62467=>array(54,0,835,837),62468=>array(54,-15,526,837),62469=>array(54,-15,526,837),62470=>array(54,-15,599,837),62471=>array(54,-15,828,837),62472=>array(54,0,501,837),62473=>array(54,-15,526,828),62474=>array(54,0,1115,837),62475=>array(54,-15,525,837),62476=>array(63,-15,536,828),62477=>array(54,0,815,837),62478=>array(54,-15,526,828),62479=>array(54,-15,526,844),62480=>array(54,0,860,837),62481=>array(63,-15,536,828),62482=>array(54,-15,677,837),62483=>array(24,-15,519,837),62484=>array(54,-15,818,837),62485=>array(54,-15,526,828),62486=>array(54,-15,841,837),62487=>array(54,-15,525,829),62488=>array(54,-15,525,837),62489=>array(64,0,536,837),62490=>array(55,-15,595,828),62491=>array(54,-15,525,828),62492=>array(64,-15,536,837),62493=>array(54,-15,545,828),62494=>array(63,-15,536,828),62495=>array(24,-15,492,837),62496=>array(54,-15,526,837),62497=>array(59,-15,530,837),62498=>array(54,-79,526,837),62499=>array(54,-15,525,838),62500=>array(54,-15,532,838),62501=>array(54,-15,594,837),62502=>array(54,-15,901,838),62504=>array(60,-235,872,816),62505=>array(49,-230,759,853),62506=>array(49,-15,459,765),62507=>array(49,-15,459,777),62508=>array(49,-15,459,875),62509=>array(49,-15,459,818),62510=>array(49,-15,459,887),62511=>array(49,-15,459,809),62512=>array(49,-236,449,765),62513=>array(49,-236,449,799),62514=>array(49,-236,449,901),62515=>array(49,-236,449,809),62516=>array(49,0,469,765),62517=>array(49,0,469,799),62518=>array(49,0,469,809),62519=>array(49,-0,737,765),62520=>array(49,-0,737,777),62521=>array(49,-0,737,895),62522=>array(49,-0,737,799),62523=>array(49,-0,737,809),62524=>array(29,-236,488,765),62525=>array(29,-236,488,777),62526=>array(29,-236,488,904),62527=>array(29,-236,488,799),62528=>array(29,-236,488,809),62529=>array(29,-236,488,852),63173=>array(55,-14,557,760),64256=>array(23,0,708,760),64257=>array(23,0,536,760),64258=>array(23,0,536,760),64259=>array(23,0,873,760),64260=>array(23,0,873,760),64261=>array(23,0,662,760),64262=>array(54,-14,837,742),64275=>array(83,-14,1111,760),64276=>array(85,-14,1111,760),64277=>array(85,-208,1111,760),64278=>array(85,-208,1111,760),64279=>array(85,-208,1451,760),64285=>array(66,44,157,547),64286=>array(167,625,473,765),64287=>array(36,44,329,547),64288=>array(38,0,562,547),64289=>array(85,0,772,547),64290=>array(43,0,717,547),64291=>array(91,0,764,547),64292=>array(43,0,716,547),64293=>array(43,0,716,760),64294=>array(91,0,764,547),64295=>array(43,0,716,547),64296=>array(47,-4,716,547),64297=>array(106,272,732,627),64298=>array(43,0,666,698),64299=>array(38,0,666,698),64300=>array(43,0,666,698),64301=>array(43,0,666,698),64302=>array(91,-159,578,547),64303=>array(91,-193,578,547),64304=>array(91,-159,578,547),64305=>array(43,0,535,547),64306=>array(43,-5,383,547),64307=>array(43,0,511,547),64308=>array(91,0,563,547),64309=>array(43,0,265,547),64310=>array(43,0,363,547),64312=>array(90,-14,593,552),64313=>array(43,204,264,547),64314=>array(43,-208,446,547),64315=>array(43,0,474,547),64316=>array(43,0,492,729),64318=>array(43,0,588,555),64320=>array(43,0,309,547),64321=>array(90,-14,593,547),64323=>array(91,-208,549,547),64324=>array(91,0,569,547),64326=>array(43,0,502,547),64327=>array(91,-208,633,546),64328=>array(43,0,474,547),64329=>array(43,0,666,547),64330=>array(10,-4,566,547),64331=>array(91,0,182,698),64332=>array(43,0,535,698),64333=>array(43,0,474,698),64334=>array(91,0,569,698),64335=>array(43,0,571,760),64338=>array(63,-244,865,327),64339=>array(63,-244,992,327),64340=>array(-10,-244,191,293),64341=>array(-10,-244,312,293),64342=>array(63,-244,865,327),64343=>array(63,-244,992,327),64344=>array(-10,-244,244,293),64345=>array(-10,-244,312,293),64346=>array(63,-244,865,327),64347=>array(63,-244,992,327),64348=>array(-10,-244,244,293),64349=>array(-10,-244,312,293),64350=>array(63,-10,865,513),64351=>array(63,-10,992,513),64352=>array(-10,0,191,610),64353=>array(-10,0,312,610),64354=>array(63,-10,865,513),64355=>array(63,-10,992,513),64356=>array(-10,0,244,610),64357=>array(-10,0,312,610),64358=>array(63,-10,865,575),64359=>array(63,-10,992,575),64360=>array(-10,0,273,672),64361=>array(-10,0,312,672),64362=>array(63,-45,952,757),64363=>array(63,-44,1045,659),64364=>array(-10,0,406,757),64365=>array(-10,0,516,684),64366=>array(63,-45,952,757),64367=>array(63,-44,1045,659),64368=>array(-10,0,406,757),64369=>array(-10,0,516,684),64370=>array(77,-244,645,425),64371=>array(77,-244,655,425),64372=>array(-10,-220,545,398),64373=>array(-10,-220,655,398),64374=>array(77,-244,645,425),64375=>array(77,-244,655,425),64376=>array(-10,-98,545,398),64377=>array(-10,-98,655,398),64378=>array(77,-244,645,425),64379=>array(77,-244,655,425),64380=>array(-10,-220,545,398),64381=>array(-10,-220,655,398),64382=>array(77,-244,645,425),64383=>array(77,-244,655,425),64384=>array(-10,-220,545,398),64385=>array(-10,-220,655,398),64386=>array(61,-146,388,415),64387=>array(61,-146,535,415),64388=>array(61,-19,388,586),64389=>array(61,-19,535,586),64390=>array(61,-19,388,708),64391=>array(61,-19,535,708),64392=>array(61,-19,388,746),64393=>array(61,-19,535,746),64394=>array(-42,-244,439,586),64395=>array(-42,-244,562,586),64396=>array(-42,-244,469,648),64397=>array(-42,-244,562,648),64398=>array(63,-43,895,760),64399=>array(63,-43,981,760),64400=>array(-10,0,476,760),64401=>array(-10,0,562,760),64402=>array(63,-43,895,896),64403=>array(63,-43,981,896),64404=>array(-10,0,476,896),64405=>array(-10,0,562,896),64406=>array(63,-293,895,896),64407=>array(63,-293,981,896),64408=>array(-10,-269,476,896),64409=>array(-10,-269,562,896),64410=>array(63,-43,895,903),64411=>array(63,-43,981,903),64412=>array(-10,0,476,903),64413=>array(-10,0,562,903),64414=>array(72,-162,660,366),64415=>array(72,-244,771,284),64416=>array(72,-162,660,636),64417=>array(72,-244,771,514),64418=>array(-10,0,273,672),64419=>array(-10,0,312,672),64426=>array(70,-33,638,487),64427=>array(70,-244,642,333),64428=>array(-10,-33,467,487),64429=>array(-10,-244,471,333),64467=>array(70,-27,722,854),64468=>array(70,-27,853,854),64469=>array(-10,0,476,928),64470=>array(-10,0,562,928),64473=>array(-42,-244,406,556),64474=>array(-42,-244,526,556),64488=>array(-10,0,191,293),64489=>array(-10,0,312,293),64508=>array(63,-131,719,411),64509=>array(63,-133,843,251),64510=>array(-10,-146,244,293),64511=>array(-10,-146,312,293),65056=>array(-445,752,0,929),65057=>array(0,752,445,929),65058=>array(-354,756,0,894),65059=>array(0,756,354,894),65136=>array(4,591,289,825),65137=>array(-10,0,303,825),65138=>array(4,591,289,874),65139=>array(51,0,271,177),65140=>array(4,-239,289,-5),65142=>array(4,591,289,708),65143=>array(-10,0,303,708),65144=>array(4,590,289,874),65145=>array(-10,0,303,874),65146=>array(4,-137,289,-20),65147=>array(-10,-137,303,90),65148=>array(-6,599,299,869),65149=>array(-10,0,303,869),65150=>array(12,610,279,878),65151=>array(-10,0,303,878),65152=>array(80,42,390,483),65153=>array(-37,0,315,939),65154=>array(-37,0,315,939),65155=>array(53,0,220,1028),65156=>array(53,0,314,1028),65157=>array(-42,-244,406,588),65158=>array(-42,-244,526,588),65159=>array(53,-244,220,760),65160=>array(53,-244,314,760),65161=>array(63,-131,719,588),65162=>array(63,-133,843,466),65163=>array(-10,0,227,613),65164=>array(-10,0,312,613),65165=>array(94,0,184,760),65166=>array(94,0,314,760),65167=>array(63,-171,865,327),65168=>array(63,-171,992,327),65169=>array(-10,-146,191,293),65170=>array(-10,-146,312,293),65171=>array(68,-28,453,513),65172=>array(71,0,546,513),65173=>array(63,-10,865,391),65174=>array(63,-10,992,391),65175=>array(-10,0,244,488),65176=>array(-10,0,312,488),65177=>array(63,-10,865,513),65178=>array(63,-10,992,513),65179=>array(-10,0,244,610),65180=>array(-10,0,312,610),65181=>array(77,-244,645,425),65182=>array(77,-244,655,425),65183=>array(-10,-146,545,398),65184=>array(-10,-146,655,398),65185=>array(77,-244,645,425),65186=>array(77,-244,655,425),65187=>array(-10,0,545,398),65188=>array(-10,0,655,398),65189=>array(77,-244,645,586),65190=>array(77,-244,655,586),65191=>array(-10,0,545,537),65192=>array(-10,0,655,537),65193=>array(61,-19,388,415),65194=>array(61,-19,535,415),65195=>array(61,-19,388,586),65196=>array(61,-19,535,586),65197=>array(-42,-244,423,269),65198=>array(-42,-244,562,269),65199=>array(-42,-244,423,464),65200=>array(-42,-244,562,464),65201=>array(63,-244,1138,366),65202=>array(63,-244,1285,366),65203=>array(-10,-14,755,366),65204=>array(-10,-14,902,366),65205=>array(63,-244,1138,586),65206=>array(63,-244,1285,586),65207=>array(-10,-14,755,586),65208=>array(-10,-14,902,586),65209=>array(63,-244,1134,362),65210=>array(63,-244,1235,362),65211=>array(-10,0,774,362),65212=>array(-10,0,877,362),65213=>array(63,-244,1134,464),65214=>array(63,-244,1235,464),65215=>array(-10,0,774,464),65216=>array(-10,0,877,464),65217=>array(70,0,857,760),65218=>array(70,0,959,760),65219=>array(-10,0,729,760),65220=>array(-10,0,830,760),65221=>array(70,0,857,760),65222=>array(70,0,959,760),65223=>array(-10,0,729,760),65224=>array(-10,0,830,760),65225=>array(57,-244,587,521),65226=>array(57,-244,587,382),65227=>array(-10,0,496,521),65228=>array(-10,0,492,382),65229=>array(57,-244,587,659),65230=>array(57,-244,587,537),65231=>array(-10,0,496,659),65232=>array(-10,0,492,537),65233=>array(63,-45,952,635),65234=>array(63,-44,1045,537),65235=>array(-10,0,406,635),65236=>array(-10,0,516,562),65237=>array(52,-215,701,635),65238=>array(52,-244,844,500),65239=>array(-10,0,406,635),65240=>array(-10,0,516,562),65241=>array(70,-27,722,760),65242=>array(70,-27,853,760),65243=>array(-10,0,476,760),65244=>array(-10,0,562,760),65245=>array(70,-152,637,760),65246=>array(70,-152,767,760),65247=>array(-10,0,210,760),65248=>array(-10,0,341,760),65249=>array(68,-240,546,369),65250=>array(68,-240,675,307),65251=>array(-10,-25,456,303),65252=>array(-10,-24,588,303),65253=>array(72,-162,660,464),65254=>array(72,-244,771,342),65255=>array(-10,0,191,488),65256=>array(-10,0,312,488),65257=>array(68,-28,453,358),65258=>array(71,0,546,366),65259=>array(-10,-33,467,487),65260=>array(-10,-244,471,333),65261=>array(-42,-244,406,315),65262=>array(-42,-244,526,315),65263=>array(63,-131,719,411),65264=>array(63,-133,843,251),65265=>array(63,-244,719,411),65266=>array(63,-244,843,251),65267=>array(-10,-146,244,293),65268=>array(-10,-146,312,293),65269=>array(-103,-10,468,866),65270=>array(-103,-10,606,866),65271=>array(-13,-10,468,955),65272=>array(-13,-10,606,955),65273=>array(11,-244,468,760),65274=>array(11,-244,606,760),65275=>array(41,-10,468,760),65276=>array(41,-10,606,760),65533=>array(15,-84,1011,912),65535=>array(50,-177,550,705)); +$cw=array(0=>600,32=>318,33=>401,34=>460,35=>838,36=>636,37=>950,38=>780,39=>275,40=>390,41=>390,42=>500,43=>838,44=>318,45=>361,46=>318,47=>337,48=>636,49=>636,50=>636,51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838,61=>838,62=>838,63=>531,64=>1000,65=>684,66=>686,67=>698,68=>770,69=>632,70=>575,71=>775,72=>752,73=>295,74=>295,75=>656,76=>557,77=>863,78=>748,79=>787,80=>603,81=>787,82=>695,83=>635,84=>611,85=>732,86=>684,87=>989,88=>685,89=>611,90=>685,91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>613,98=>635,99=>550,100=>635,101=>615,102=>352,103=>635,104=>634,105=>278,106=>278,107=>579,108=>278,109=>974,110=>634,111=>612,112=>635,113=>635,114=>411,115=>521,116=>392,117=>634,118=>592,119=>818,120=>592,121=>592,122=>525,123=>636,124=>337,125=>636,126=>838,160=>318,161=>401,162=>636,163=>636,164=>636,165=>636,166=>337,167=>500,168=>500,169=>1000,170=>471,171=>612,172=>838,173=>361,174=>1000,175=>500,176=>500,177=>838,178=>401,179=>401,180=>500,181=>636,182=>636,183=>318,184=>500,185=>401,186=>471,187=>612,188=>969,189=>969,190=>969,191=>531,192=>684,193=>684,194=>684,195=>684,196=>684,197=>684,198=>974,199=>698,200=>632,201=>632,202=>632,203=>632,204=>295,205=>295,206=>295,207=>295,208=>775,209=>748,210=>787,211=>787,212=>787,213=>787,214=>787,215=>838,216=>787,217=>732,218=>732,219=>732,220=>732,221=>611,222=>605,223=>630,224=>613,225=>613,226=>613,227=>613,228=>613,229=>613,230=>982,231=>550,232=>615,233=>615,234=>615,235=>615,236=>278,237=>278,238=>278,239=>278,240=>612,241=>634,242=>612,243=>612,244=>612,245=>612,246=>612,247=>838,248=>612,249=>634,250=>634,251=>634,252=>634,253=>592,254=>635,255=>592,256=>684,257=>613,258=>684,259=>613,260=>684,261=>613,262=>698,263=>550,264=>698,265=>550,266=>698,267=>550,268=>698,269=>550,270=>770,271=>635,272=>775,273=>635,274=>632,275=>615,276=>632,277=>615,278=>632,279=>615,280=>632,281=>615,282=>632,283=>615,284=>775,285=>635,286=>775,287=>635,288=>775,289=>635,290=>775,291=>635,292=>752,293=>634,294=>916,295=>695,296=>295,297=>278,298=>295,299=>278,300=>295,301=>278,302=>295,303=>278,304=>295,305=>278,306=>590,307=>556,308=>295,309=>278,310=>656,311=>579,312=>579,313=>557,314=>278,315=>557,316=>278,317=>557,318=>375,319=>557,320=>342,321=>562,322=>284,323=>748,324=>634,325=>748,326=>634,327=>748,328=>634,329=>813,330=>748,331=>634,332=>787,333=>612,334=>787,335=>612,336=>787,337=>612,338=>1070,339=>1023,340=>695,341=>411,342=>695,343=>411,344=>695,345=>411,346=>635,347=>521,348=>635,349=>521,350=>635,351=>521,352=>635,353=>521,354=>611,355=>392,356=>611,357=>392,358=>611,359=>392,360=>732,361=>634,362=>732,363=>634,364=>732,365=>634,366=>732,367=>634,368=>732,369=>634,370=>732,371=>634,372=>989,373=>818,374=>611,375=>592,376=>611,377=>685,378=>525,379=>685,380=>525,381=>685,382=>525,383=>352,384=>635,385=>735,386=>686,387=>635,388=>686,389=>635,390=>703,391=>698,392=>550,393=>775,394=>819,395=>686,396=>635,397=>612,398=>632,399=>787,400=>614,401=>575,402=>352,403=>775,404=>687,405=>984,406=>354,407=>295,408=>746,409=>579,410=>278,411=>592,412=>974,413=>748,414=>634,415=>787,416=>913,417=>612,418=>949,419=>759,420=>652,421=>635,422=>695,423=>635,424=>521,425=>632,426=>336,427=>392,428=>611,429=>392,430=>611,431=>858,432=>634,433=>764,434=>721,435=>744,436=>730,437=>685,438=>525,439=>666,440=>666,441=>578,442=>525,443=>636,444=>666,445=>578,446=>510,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1422,453=>1299,454=>1154,455=>835,456=>787,457=>457,458=>931,459=>924,460=>797,461=>684,462=>613,463=>295,464=>278,465=>787,466=>612,467=>732,468=>634,469=>732,470=>634,471=>732,472=>634,473=>732,474=>634,475=>732,476=>634,477=>615,478=>684,479=>613,480=>684,481=>613,482=>974,483=>982,484=>775,485=>635,486=>775,487=>635,488=>656,489=>579,490=>787,491=>612,492=>787,493=>612,494=>666,495=>578,496=>278,497=>1422,498=>1299,499=>1154,500=>775,501=>635,502=>1113,503=>682,504=>748,505=>634,506=>684,507=>613,508=>974,509=>982,510=>787,511=>612,512=>684,513=>613,514=>684,515=>613,516=>632,517=>615,518=>632,519=>615,520=>295,521=>278,522=>295,523=>278,524=>787,525=>612,526=>787,527=>612,528=>695,529=>411,530=>695,531=>411,532=>732,533=>634,534=>732,535=>634,536=>635,537=>521,538=>611,539=>392,540=>627,541=>521,542=>752,543=>634,544=>735,545=>838,546=>698,547=>610,548=>685,549=>525,550=>684,551=>613,552=>632,553=>615,554=>787,555=>612,556=>787,557=>612,558=>787,559=>612,560=>787,561=>612,562=>611,563=>592,564=>475,565=>843,566=>477,567=>278,568=>998,569=>998,570=>684,571=>698,572=>550,573=>557,574=>611,575=>521,576=>525,577=>603,578=>479,579=>686,580=>732,581=>684,582=>632,583=>615,584=>295,585=>278,586=>781,587=>635,588=>695,589=>411,590=>611,591=>592,592=>600,593=>635,594=>635,595=>635,596=>549,597=>550,598=>635,599=>696,600=>615,601=>615,602=>819,603=>541,604=>532,605=>775,606=>664,607=>278,608=>696,609=>635,610=>629,611=>596,612=>596,613=>634,614=>634,615=>634,616=>278,617=>338,618=>372,619=>396,620=>487,621=>278,622=>706,623=>974,624=>974,625=>974,626=>646,627=>642,628=>634,629=>612,630=>858,631=>728,632=>660,633=>414,634=>414,635=>414,636=>411,637=>411,638=>530,639=>530,640=>604,641=>604,642=>521,643=>336,644=>336,645=>461,646=>336,647=>392,648=>392,649=>634,650=>618,651=>598,652=>592,653=>818,654=>592,655=>611,656=>525,657=>525,658=>578,659=>578,660=>510,661=>510,662=>510,663=>510,664=>787,665=>580,666=>664,667=>708,668=>654,669=>292,670=>667,671=>507,672=>727,673=>510,674=>510,675=>1014,676=>1058,677=>1013,678=>830,679=>610,680=>778,681=>848,682=>706,683=>654,684=>515,685=>515,686=>661,687=>664,688=>404,689=>399,690=>175,691=>259,692=>295,693=>296,694=>379,695=>515,696=>373,697=>278,698=>460,699=>318,700=>318,701=>318,702=>307,703=>307,704=>370,705=>370,706=>500,707=>500,708=>500,709=>500,710=>500,711=>500,712=>275,713=>500,714=>500,715=>500,716=>275,717=>500,718=>500,719=>500,720=>337,721=>337,722=>307,723=>307,724=>500,725=>500,726=>390,727=>317,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,734=>315,735=>500,736=>426,737=>166,738=>373,739=>444,740=>370,741=>493,742=>493,743=>493,744=>493,745=>493,748=>500,749=>500,750=>518,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>654,881=>568,882=>862,883=>647,884=>278,885=>278,886=>748,887=>650,890=>500,891=>549,892=>550,893=>549,894=>337,900=>500,901=>500,902=>692,903=>318,904=>746,905=>871,906=>408,908=>813,910=>825,911=>826,912=>338,913=>684,914=>686,915=>557,916=>684,917=>632,918=>685,919=>752,920=>787,921=>295,922=>656,923=>684,924=>863,925=>748,926=>632,927=>787,928=>752,929=>603,931=>632,932=>611,933=>611,934=>787,935=>685,936=>787,937=>764,938=>295,939=>611,940=>659,941=>541,942=>634,943=>338,944=>579,945=>659,946=>638,947=>592,948=>612,949=>541,950=>544,951=>634,952=>612,953=>338,954=>589,955=>592,956=>636,957=>559,958=>558,959=>612,960=>602,961=>635,962=>587,963=>634,964=>602,965=>579,966=>660,967=>578,968=>660,969=>837,970=>338,971=>579,972=>612,973=>579,974=>837,975=>656,976=>614,977=>619,978=>699,979=>842,980=>699,981=>660,982=>837,983=>664,984=>787,985=>612,986=>648,987=>587,988=>575,989=>458,990=>660,991=>660,992=>865,993=>627,994=>934,995=>837,996=>758,997=>659,998=>792,999=>615,1000=>687,1001=>607,1002=>768,1003=>625,1004=>699,1005=>612,1006=>611,1007=>536,1008=>664,1009=>635,1010=>550,1011=>278,1012=>787,1013=>615,1014=>615,1015=>605,1016=>635,1017=>698,1018=>863,1019=>651,1020=>635,1021=>703,1022=>698,1023=>703,1024=>632,1025=>632,1026=>786,1027=>610,1028=>698,1029=>635,1030=>295,1031=>295,1032=>295,1033=>1094,1034=>1045,1035=>786,1036=>710,1037=>748,1038=>609,1039=>752,1040=>684,1041=>686,1042=>686,1043=>610,1044=>781,1045=>632,1046=>1077,1047=>641,1048=>748,1049=>748,1050=>710,1051=>752,1052=>863,1053=>752,1054=>787,1055=>752,1056=>603,1057=>698,1058=>611,1059=>609,1060=>861,1061=>685,1062=>776,1063=>686,1064=>1069,1065=>1094,1066=>833,1067=>882,1068=>686,1069=>698,1070=>1080,1071=>695,1072=>613,1073=>617,1074=>589,1075=>525,1076=>691,1077=>615,1078=>901,1079=>532,1080=>650,1081=>650,1082=>604,1083=>639,1084=>754,1085=>654,1086=>612,1087=>654,1088=>635,1089=>550,1090=>583,1091=>592,1092=>855,1093=>592,1094=>681,1095=>591,1096=>915,1097=>942,1098=>707,1099=>790,1100=>589,1101=>549,1102=>842,1103=>602,1104=>615,1105=>615,1106=>625,1107=>525,1108=>549,1109=>521,1110=>278,1111=>278,1112=>278,1113=>902,1114=>898,1115=>652,1116=>604,1117=>650,1118=>592,1119=>654,1120=>934,1121=>837,1122=>771,1123=>672,1124=>942,1125=>749,1126=>879,1127=>783,1128=>1160,1129=>1001,1130=>787,1131=>612,1132=>1027,1133=>824,1134=>636,1135=>541,1136=>856,1137=>876,1138=>787,1139=>612,1140=>781,1141=>665,1142=>781,1143=>665,1144=>992,1145=>904,1146=>953,1147=>758,1148=>1180,1149=>1028,1150=>934,1151=>837,1152=>698,1153=>550,1154=>502,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>772,1163=>677,1164=>686,1165=>589,1166=>603,1167=>635,1168=>610,1169=>525,1170=>675,1171=>590,1172=>624,1173=>530,1174=>1077,1175=>901,1176=>641,1177=>532,1178=>710,1179=>604,1180=>710,1181=>604,1182=>710,1183=>604,1184=>856,1185=>832,1186=>752,1187=>661,1188=>1014,1189=>877,1190=>1081,1191=>916,1192=>878,1193=>693,1194=>698,1195=>550,1196=>611,1197=>583,1198=>611,1199=>592,1200=>611,1201=>592,1202=>685,1203=>592,1204=>934,1205=>807,1206=>686,1207=>591,1208=>686,1209=>591,1210=>686,1211=>634,1212=>941,1213=>728,1214=>941,1215=>728,1216=>295,1217=>1077,1218=>901,1219=>656,1220=>604,1221=>776,1222=>670,1223=>752,1224=>661,1225=>776,1226=>681,1227=>686,1228=>591,1229=>888,1230=>774,1231=>278,1232=>684,1233=>613,1234=>684,1235=>613,1236=>974,1237=>982,1238=>632,1239=>615,1240=>787,1241=>615,1242=>787,1243=>615,1244=>1077,1245=>901,1246=>641,1247=>532,1248=>666,1249=>578,1250=>748,1251=>650,1252=>748,1253=>650,1254=>787,1255=>612,1256=>787,1257=>612,1258=>787,1259=>612,1260=>698,1261=>549,1262=>609,1263=>592,1264=>609,1265=>592,1266=>609,1267=>592,1268=>686,1269=>591,1270=>610,1271=>525,1272=>882,1273=>790,1274=>675,1275=>590,1276=>685,1277=>592,1278=>685,1279=>592,1280=>686,1281=>589,1282=>1006,1283=>897,1284=>975,1285=>869,1286=>679,1287=>588,1288=>1072,1289=>957,1290=>1113,1291=>967,1292=>775,1293=>660,1294=>773,1295=>711,1296=>614,1297=>541,1298=>752,1299=>639,1300=>1169,1301=>994,1302=>894,1303=>864,1304=>1032,1305=>986,1306=>787,1307=>635,1308=>989,1309=>818,1310=>710,1311=>604,1312=>1081,1313=>905,1314=>1081,1315=>912,1316=>793,1317=>683,1329=>766,1330=>732,1331=>753,1332=>753,1333=>732,1334=>772,1335=>640,1336=>732,1337=>859,1338=>753,1339=>691,1340=>533,1341=>922,1342=>863,1343=>732,1344=>716,1345=>766,1346=>753,1347=>767,1348=>792,1349=>728,1350=>729,1351=>757,1352=>732,1353=>713,1354=>800,1355=>768,1356=>792,1357=>732,1358=>753,1359=>705,1360=>694,1361=>744,1362=>538,1363=>811,1364=>757,1365=>787,1366=>790,1369=>307,1370=>318,1371=>234,1372=>361,1373=>238,1374=>405,1375=>500,1377=>974,1378=>634,1379=>658,1380=>663,1381=>634,1382=>635,1383=>515,1384=>634,1385=>738,1386=>658,1387=>634,1388=>271,1389=>980,1390=>623,1391=>634,1392=>634,1393=>608,1394=>634,1395=>629,1396=>634,1397=>271,1398=>634,1399=>499,1400=>634,1401=>404,1402=>974,1403=>560,1404=>648,1405=>634,1406=>634,1407=>974,1408=>634,1409=>633,1410=>435,1411=>974,1412=>636,1413=>609,1414=>805,1415=>812,1417=>337,1418=>361,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>361,1471=>0,1472=>295,1473=>0,1474=>0,1475=>295,1478=>441,1479=>0,1488=>668,1489=>578,1490=>412,1491=>546,1492=>653,1493=>272,1494=>346,1495=>653,1496=>648,1497=>224,1498=>537,1499=>529,1500=>568,1501=>664,1502=>679,1503=>272,1504=>400,1505=>649,1506=>626,1507=>640,1508=>625,1509=>540,1510=>593,1511=>709,1512=>564,1513=>708,1514=>657,1520=>471,1521=>423,1522=>331,1523=>416,1524=>645,1542=>637,1543=>637,1545=>757,1546=>977,1548=>323,1557=>0,1563=>318,1567=>531,1569=>470,1570=>278,1571=>278,1572=>483,1573=>278,1574=>783,1575=>278,1576=>941,1577=>524,1578=>941,1579=>941,1580=>646,1581=>646,1582=>646,1583=>445,1584=>445,1585=>483,1586=>483,1587=>1221,1588=>1221,1589=>1209,1590=>1209,1591=>925,1592=>925,1593=>597,1594=>597,1600=>293,1601=>1037,1602=>776,1603=>824,1604=>727,1605=>619,1606=>734,1607=>524,1608=>483,1609=>783,1610=>783,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1623=>0,1626=>500,1632=>537,1633=>537,1634=>537,1635=>537,1636=>537,1637=>537,1638=>537,1639=>537,1640=>537,1641=>537,1642=>537,1643=>325,1644=>318,1645=>545,1646=>941,1647=>776,1648=>0,1652=>292,1657=>941,1658=>941,1659=>941,1660=>941,1661=>941,1662=>941,1663=>941,1664=>941,1665=>646,1666=>646,1667=>646,1668=>646,1669=>646,1670=>646,1671=>646,1672=>445,1673=>445,1674=>445,1675=>445,1676=>445,1677=>445,1678=>445,1679=>445,1680=>445,1681=>483,1682=>483,1683=>498,1684=>530,1685=>610,1686=>530,1687=>483,1688=>483,1689=>483,1690=>1221,1691=>1221,1692=>1221,1693=>1209,1694=>1209,1695=>925,1696=>597,1697=>1037,1698=>1037,1699=>1037,1700=>1037,1701=>1037,1702=>1037,1703=>776,1704=>776,1705=>895,1706=>1054,1707=>895,1708=>824,1709=>824,1710=>824,1711=>895,1712=>895,1713=>895,1714=>895,1715=>895,1716=>895,1717=>727,1718=>727,1719=>727,1720=>727,1721=>734,1722=>734,1723=>734,1724=>734,1725=>734,1726=>698,1727=>646,1734=>483,1740=>783,1742=>783,1749=>524,1776=>537,1777=>537,1778=>537,1779=>537,1780=>537,1781=>537,1782=>537,1783=>537,1784=>537,1785=>537,1984=>636,1985=>636,1986=>636,1987=>636,1988=>636,1989=>636,1990=>636,1991=>636,1992=>636,1993=>636,1994=>278,1995=>571,1996=>424,1997=>592,1998=>654,1999=>654,2000=>594,2001=>654,2002=>829,2003=>438,2004=>438,2005=>559,2006=>612,2007=>350,2008=>959,2009=>473,2010=>783,2011=>654,2012=>625,2013=>734,2014=>530,2015=>724,2016=>473,2017=>625,2018=>594,2019=>530,2020=>530,2021=>522,2022=>594,2023=>594,2027=>0,2028=>0,2029=>0,2030=>0,2031=>0,2032=>0,2033=>0,2034=>0,2035=>0,2036=>313,2037=>313,2040=>560,2041=>560,2042=>361,3647=>636,3713=>670,3714=>684,3716=>688,3719=>482,3720=>628,3722=>684,3725=>688,3732=>669,3733=>642,3734=>645,3735=>655,3737=>659,3738=>625,3739=>625,3740=>745,3741=>767,3742=>687,3743=>687,3745=>702,3746=>688,3747=>684,3749=>649,3751=>632,3754=>703,3755=>819,3757=>633,3758=>684,3759=>788,3760=>632,3761=>0,3762=>539,3763=>539,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>663,3776=>375,3777=>657,3778=>460,3779=>547,3780=>491,3782=>674,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>636,3793=>641,3794=>641,3795=>670,3796=>625,3797=>625,3798=>703,3799=>670,3800=>674,3801=>677,3804=>1028,3805=>1028,4256=>874,4257=>733,4258=>679,4259=>834,4260=>615,4261=>768,4262=>753,4263=>914,4264=>453,4265=>620,4266=>843,4267=>882,4268=>625,4269=>854,4270=>781,4271=>629,4272=>912,4273=>621,4274=>620,4275=>854,4276=>866,4277=>724,4278=>630,4279=>621,4280=>625,4281=>620,4282=>818,4283=>874,4284=>615,4285=>623,4286=>625,4287=>725,4288=>844,4289=>596,4290=>688,4291=>596,4292=>594,4293=>738,4304=>508,4305=>518,4306=>581,4307=>818,4308=>508,4309=>513,4310=>500,4311=>801,4312=>518,4313=>510,4314=>1064,4315=>522,4316=>522,4317=>786,4318=>508,4319=>518,4320=>796,4321=>522,4322=>654,4323=>522,4324=>825,4325=>513,4326=>786,4327=>518,4328=>518,4329=>522,4330=>571,4331=>522,4332=>518,4333=>520,4334=>522,4335=>454,4336=>508,4337=>518,4338=>508,4339=>508,4340=>518,4341=>554,4342=>828,4343=>552,4344=>508,4345=>571,4346=>508,4347=>448,4348=>324,5121=>684,5122=>684,5123=>684,5124=>684,5125=>769,5126=>769,5127=>769,5129=>769,5130=>769,5131=>769,5132=>835,5133=>834,5134=>835,5135=>834,5136=>835,5137=>834,5138=>967,5139=>1007,5140=>967,5141=>1007,5142=>769,5143=>967,5144=>1007,5145=>967,5146=>1007,5147=>769,5149=>256,5150=>543,5151=>423,5152=>423,5153=>389,5154=>389,5155=>393,5156=>389,5157=>466,5158=>385,5159=>256,5160=>389,5161=>389,5162=>389,5163=>1090,5164=>909,5165=>953,5166=>1117,5167=>684,5168=>684,5169=>684,5170=>684,5171=>729,5172=>729,5173=>729,5175=>729,5176=>729,5177=>729,5178=>835,5179=>684,5180=>835,5181=>834,5182=>835,5183=>834,5184=>967,5185=>1007,5186=>967,5187=>1007,5188=>967,5189=>1007,5190=>967,5191=>1007,5192=>729,5193=>508,5194=>192,5196=>732,5197=>732,5198=>732,5199=>732,5200=>730,5201=>730,5202=>730,5204=>730,5205=>730,5206=>730,5207=>921,5208=>889,5209=>921,5210=>889,5211=>921,5212=>889,5213=>928,5214=>900,5215=>928,5216=>900,5217=>947,5218=>900,5219=>947,5220=>900,5221=>947,5222=>434,5223=>877,5224=>877,5225=>866,5226=>890,5227=>628,5228=>628,5229=>628,5230=>628,5231=>628,5232=>628,5233=>628,5234=>628,5235=>628,5236=>860,5237=>771,5238=>815,5239=>816,5240=>815,5241=>816,5242=>860,5243=>771,5244=>860,5245=>771,5246=>815,5247=>816,5248=>815,5249=>816,5250=>815,5251=>407,5252=>407,5253=>750,5254=>775,5255=>750,5256=>775,5257=>628,5258=>628,5259=>628,5260=>628,5261=>628,5262=>628,5263=>628,5264=>628,5265=>628,5266=>860,5267=>771,5268=>815,5269=>816,5270=>815,5271=>816,5272=>860,5273=>771,5274=>860,5275=>771,5276=>815,5277=>816,5278=>815,5279=>816,5280=>815,5281=>435,5282=>435,5283=>610,5284=>557,5285=>557,5286=>557,5287=>610,5288=>610,5289=>610,5290=>557,5291=>557,5292=>749,5293=>769,5294=>746,5295=>764,5296=>746,5297=>764,5298=>749,5299=>769,5300=>749,5301=>769,5302=>746,5303=>764,5304=>746,5305=>764,5306=>746,5307=>386,5308=>508,5309=>386,5312=>852,5313=>852,5314=>852,5315=>852,5316=>852,5317=>852,5318=>852,5319=>852,5320=>852,5321=>1069,5322=>1035,5323=>1059,5324=>852,5325=>1059,5326=>852,5327=>852,5328=>600,5329=>453,5330=>600,5331=>852,5332=>852,5333=>852,5334=>852,5335=>852,5336=>852,5337=>852,5338=>852,5339=>852,5340=>1069,5341=>1035,5342=>1059,5343=>1030,5344=>1059,5345=>1030,5346=>1069,5347=>1035,5348=>1069,5349=>1035,5350=>1083,5351=>1030,5352=>1083,5353=>1030,5354=>600,5356=>729,5357=>603,5358=>603,5359=>603,5360=>603,5361=>603,5362=>603,5363=>603,5364=>603,5365=>603,5366=>834,5367=>754,5368=>792,5369=>771,5370=>792,5371=>771,5372=>834,5373=>754,5374=>834,5375=>754,5376=>792,5377=>771,5378=>792,5379=>771,5380=>792,5381=>418,5382=>420,5383=>418,5392=>712,5393=>712,5394=>712,5395=>892,5396=>892,5397=>892,5398=>892,5399=>910,5400=>872,5401=>910,5402=>872,5403=>910,5404=>872,5405=>1140,5406=>1100,5407=>1140,5408=>1100,5409=>1140,5410=>1100,5411=>1140,5412=>1100,5413=>641,5414=>627,5415=>627,5416=>627,5417=>627,5418=>627,5419=>627,5420=>627,5421=>627,5422=>627,5423=>844,5424=>781,5425=>816,5426=>818,5427=>816,5428=>818,5429=>844,5430=>781,5431=>844,5432=>781,5433=>816,5434=>818,5435=>816,5436=>818,5437=>816,5438=>418,5440=>389,5441=>484,5442=>916,5443=>916,5444=>916,5445=>916,5446=>916,5447=>916,5448=>603,5449=>603,5450=>603,5451=>603,5452=>603,5453=>603,5454=>834,5455=>754,5456=>418,5458=>729,5459=>684,5460=>684,5461=>684,5462=>684,5463=>726,5464=>726,5465=>726,5466=>726,5467=>924,5468=>1007,5469=>508,5470=>732,5471=>732,5472=>732,5473=>732,5474=>732,5475=>732,5476=>730,5477=>730,5478=>730,5479=>730,5480=>947,5481=>900,5482=>508,5492=>831,5493=>831,5494=>831,5495=>831,5496=>831,5497=>831,5498=>831,5499=>563,5500=>752,5501=>484,5502=>1047,5503=>1047,5504=>1047,5505=>1047,5506=>1047,5507=>1047,5508=>1047,5509=>825,5514=>831,5515=>831,5516=>831,5517=>831,5518=>1259,5519=>1259,5520=>1259,5521=>1002,5522=>1002,5523=>1259,5524=>1259,5525=>700,5526=>1073,5536=>852,5537=>852,5538=>852,5539=>852,5540=>852,5541=>852,5542=>600,5543=>643,5544=>643,5545=>643,5546=>643,5547=>643,5548=>643,5549=>643,5550=>418,5551=>628,5598=>770,5601=>767,5702=>468,5703=>468,5742=>444,5743=>1047,5744=>1310,5745=>1632,5746=>1632,5747=>1375,5748=>1375,5749=>1632,5750=>1632,5760=>477,5761=>493,5762=>712,5763=>931,5764=>1150,5765=>1370,5766=>493,5767=>712,5768=>931,5769=>1150,5770=>1370,5771=>498,5772=>718,5773=>938,5774=>1159,5775=>1379,5776=>493,5777=>712,5778=>930,5779=>1149,5780=>1370,5781=>498,5782=>752,5783=>789,5784=>1205,5785=>1150,5786=>683,5787=>507,5788=>507,7424=>592,7425=>717,7426=>982,7427=>586,7428=>550,7429=>605,7430=>605,7431=>491,7432=>541,7433=>278,7434=>395,7435=>579,7436=>583,7437=>754,7438=>650,7439=>612,7440=>550,7441=>684,7442=>684,7443=>684,7444=>1023,7446=>612,7447=>612,7448=>524,7449=>602,7450=>602,7451=>583,7452=>574,7453=>737,7454=>948,7455=>638,7456=>592,7457=>818,7458=>525,7459=>526,7462=>583,7463=>592,7464=>564,7465=>524,7466=>590,7467=>639,7468=>431,7469=>613,7470=>432,7472=>485,7473=>398,7474=>398,7475=>488,7476=>474,7477=>186,7478=>186,7479=>413,7480=>351,7481=>543,7482=>471,7483=>471,7484=>496,7485=>439,7486=>380,7487=>438,7488=>385,7489=>461,7490=>623,7491=>392,7492=>392,7493=>405,7494=>648,7495=>428,7496=>405,7497=>417,7498=>417,7499=>360,7500=>359,7501=>405,7502=>179,7503=>426,7504=>623,7505=>409,7506=>414,7507=>370,7508=>414,7509=>414,7510=>428,7511=>295,7512=>405,7513=>470,7514=>623,7515=>417,7517=>402,7518=>373,7519=>385,7520=>416,7521=>364,7522=>179,7523=>259,7524=>405,7525=>417,7526=>402,7527=>373,7528=>412,7529=>416,7530=>364,7543=>635,7544=>474,7547=>372,7549=>667,7557=>278,7579=>405,7580=>370,7581=>370,7582=>414,7583=>360,7584=>296,7585=>233,7586=>405,7587=>405,7588=>261,7589=>250,7590=>261,7591=>261,7592=>234,7593=>250,7594=>235,7595=>376,7596=>623,7597=>623,7598=>411,7599=>479,7600=>409,7601=>414,7602=>414,7603=>360,7604=>287,7605=>295,7606=>508,7607=>418,7608=>361,7609=>406,7610=>417,7611=>366,7612=>437,7613=>366,7614=>392,7615=>414,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>684,7681=>613,7682=>686,7683=>635,7684=>686,7685=>635,7686=>686,7687=>635,7688=>698,7689=>550,7690=>770,7691=>635,7692=>770,7693=>635,7694=>770,7695=>635,7696=>770,7697=>635,7698=>770,7699=>635,7700=>632,7701=>615,7702=>632,7703=>615,7704=>632,7705=>615,7706=>632,7707=>615,7708=>632,7709=>615,7710=>575,7711=>352,7712=>775,7713=>635,7714=>752,7715=>634,7716=>752,7717=>634,7718=>752,7719=>634,7720=>752,7721=>634,7722=>752,7723=>634,7724=>295,7725=>278,7726=>295,7727=>278,7728=>656,7729=>579,7730=>656,7731=>579,7732=>656,7733=>579,7734=>557,7735=>288,7736=>557,7737=>288,7738=>557,7739=>278,7740=>557,7741=>278,7742=>863,7743=>974,7744=>863,7745=>974,7746=>863,7747=>974,7748=>748,7749=>634,7750=>748,7751=>634,7752=>748,7753=>634,7754=>748,7755=>634,7756=>787,7757=>612,7758=>787,7759=>612,7760=>787,7761=>612,7762=>787,7763=>612,7764=>603,7765=>635,7766=>603,7767=>635,7768=>695,7769=>411,7770=>695,7771=>411,7772=>695,7773=>411,7774=>695,7775=>411,7776=>635,7777=>521,7778=>635,7779=>521,7780=>635,7781=>521,7782=>635,7783=>521,7784=>635,7785=>521,7786=>611,7787=>392,7788=>611,7789=>392,7790=>611,7791=>392,7792=>611,7793=>392,7794=>732,7795=>634,7796=>732,7797=>634,7798=>732,7799=>634,7800=>732,7801=>634,7802=>732,7803=>634,7804=>684,7805=>592,7806=>684,7807=>592,7808=>989,7809=>818,7810=>989,7811=>818,7812=>989,7813=>818,7814=>989,7815=>818,7816=>989,7817=>818,7818=>685,7819=>592,7820=>685,7821=>592,7822=>611,7823=>592,7824=>685,7825=>525,7826=>685,7827=>525,7828=>685,7829=>525,7830=>634,7831=>392,7832=>818,7833=>592,7834=>613,7835=>352,7836=>352,7837=>352,7838=>769,7839=>612,7840=>684,7841=>613,7842=>684,7843=>613,7844=>684,7845=>613,7846=>684,7847=>613,7848=>684,7849=>613,7850=>684,7851=>613,7852=>684,7853=>613,7854=>684,7855=>613,7856=>684,7857=>613,7858=>684,7859=>613,7860=>684,7861=>613,7862=>684,7863=>613,7864=>632,7865=>615,7866=>632,7867=>615,7868=>632,7869=>615,7870=>632,7871=>615,7872=>632,7873=>615,7874=>632,7875=>615,7876=>632,7877=>615,7878=>632,7879=>615,7880=>295,7881=>278,7882=>295,7883=>278,7884=>787,7885=>612,7886=>787,7887=>612,7888=>787,7889=>612,7890=>787,7891=>612,7892=>787,7893=>612,7894=>787,7895=>612,7896=>787,7897=>612,7898=>913,7899=>612,7900=>913,7901=>612,7902=>913,7903=>612,7904=>913,7905=>612,7906=>913,7907=>612,7908=>732,7909=>634,7910=>732,7911=>634,7912=>858,7913=>634,7914=>858,7915=>634,7916=>858,7917=>634,7918=>858,7919=>634,7920=>858,7921=>634,7922=>611,7923=>592,7924=>611,7925=>592,7926=>611,7927=>592,7928=>611,7929=>592,7930=>769,7931=>477,7936=>659,7937=>659,7938=>659,7939=>659,7940=>659,7941=>659,7942=>659,7943=>659,7944=>684,7945=>684,7946=>877,7947=>877,7948=>769,7949=>801,7950=>708,7951=>743,7952=>541,7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>711,7961=>711,7962=>966,7963=>975,7964=>898,7965=>928,7968=>634,7969=>634,7970=>634,7971=>634,7972=>634,7973=>634,7974=>634,7975=>634,7976=>837,7977=>835,7978=>1086,7979=>1089,7980=>1027,7981=>1051,7982=>934,7983=>947,7984=>338,7985=>338,7986=>338,7987=>338,7988=>338,7989=>338,7990=>338,7991=>338,7992=>380,7993=>374,7994=>635,7995=>635,7996=>570,7997=>600,7998=>489,7999=>493,8000=>612,8001=>612,8002=>612,8003=>612,8004=>612,8005=>612,8008=>804,8009=>848,8010=>1095,8011=>1100,8012=>938,8013=>970,8016=>579,8017=>579,8018=>579,8019=>579,8020=>579,8021=>579,8022=>579,8023=>579,8025=>784,8027=>998,8029=>1012,8031=>897,8032=>837,8033=>837,8034=>837,8035=>837,8036=>837,8037=>837,8038=>837,8039=>837,8040=>802,8041=>843,8042=>1089,8043=>1095,8044=>946,8045=>972,8046=>921,8047=>952,8048=>659,8049=>659,8050=>541,8051=>548,8052=>634,8053=>654,8054=>338,8055=>338,8056=>612,8057=>612,8058=>579,8059=>579,8060=>837,8061=>837,8064=>659,8065=>659,8066=>659,8067=>659,8068=>659,8069=>659,8070=>659,8071=>659,8072=>684,8073=>684,8074=>877,8075=>877,8076=>769,8077=>801,8078=>708,8079=>743,8080=>634,8081=>634,8082=>634,8083=>634,8084=>634,8085=>634,8086=>634,8087=>634,8088=>837,8089=>835,8090=>1086,8091=>1089,8092=>1027,8093=>1051,8094=>934,8095=>947,8096=>837,8097=>837,8098=>837,8099=>837,8100=>837,8101=>837,8102=>837,8103=>837,8104=>802,8105=>843,8106=>1089,8107=>1095,8108=>946,8109=>972,8110=>921,8111=>952,8112=>659,8113=>659,8114=>659,8115=>659,8116=>659,8118=>659,8119=>659,8120=>684,8121=>684,8122=>716,8123=>692,8124=>684,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>634,8131=>634,8132=>654,8134=>634,8135=>634,8136=>805,8137=>746,8138=>931,8139=>871,8140=>752,8141=>500,8142=>500,8143=>500,8144=>338,8145=>338,8146=>338,8147=>338,8150=>338,8151=>338,8152=>295,8153=>295,8154=>475,8155=>408,8157=>500,8158=>500,8159=>500,8160=>579,8161=>579,8162=>579,8163=>579,8164=>635,8165=>635,8166=>579,8167=>579,8168=>611,8169=>611,8170=>845,8171=>825,8172=>685,8173=>500,8174=>500,8175=>500,8178=>837,8179=>837,8180=>837,8182=>837,8183=>837,8184=>941,8185=>813,8186=>922,8187=>826,8188=>764,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>361,8209=>361,8210=>636,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>318,8217=>318,8218=>318,8219=>318,8220=>518,8221=>518,8222=>518,8223=>518,8224=>500,8225=>500,8226=>590,8227=>590,8228=>334,8229=>667,8230=>1000,8231=>318,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1342,8241=>1735,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8249=>400,8250=>400,8251=>838,8252=>485,8253=>531,8254=>500,8255=>804,8256=>804,8257=>250,8258=>1000,8259=>500,8260=>167,8261=>390,8262=>390,8263=>922,8264=>733,8265=>733,8266=>497,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8272=>804,8273=>500,8274=>450,8275=>1000,8276=>804,8277=>838,8278=>586,8279=>663,8280=>838,8281=>838,8282=>318,8283=>797,8284=>838,8285=>318,8286=>318,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>401,8305=>179,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528,8315=>528,8316=>528,8317=>246,8318=>246,8319=>398,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8325=>401,8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246,8336=>392,8337=>417,8338=>414,8339=>444,8340=>417,8341=>404,8342=>426,8343=>166,8344=>623,8345=>398,8346=>428,8347=>373,8348=>295,8352=>877,8353=>636,8354=>636,8355=>636,8356=>636,8357=>974,8358=>748,8359=>1272,8360=>1074,8361=>989,8362=>784,8363=>636,8364=>636,8365=>636,8366=>636,8367=>1272,8368=>636,8369=>636,8370=>636,8371=>636,8372=>774,8373=>636,8376=>636,8377=>636,8378=>679,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1019,8449=>1019,8450=>698,8451=>1123,8452=>642,8453=>1019,8454=>1067,8455=>614,8456=>698,8457=>952,8459=>988,8460=>754,8461=>850,8462=>634,8463=>634,8464=>470,8465=>697,8466=>720,8467=>413,8468=>818,8469=>801,8470=>1040,8471=>1000,8472=>697,8473=>701,8474=>787,8475=>798,8476=>814,8477=>792,8478=>896,8479=>684,8480=>1020,8481=>1074,8482=>1000,8483=>684,8484=>745,8485=>578,8486=>764,8487=>764,8488=>616,8489=>338,8490=>656,8491=>684,8492=>786,8493=>703,8494=>854,8495=>592,8496=>605,8497=>786,8498=>575,8499=>1069,8500=>462,8501=>745,8502=>674,8503=>466,8504=>645,8505=>380,8506=>926,8507=>1194,8508=>702,8509=>728,8510=>654,8511=>849,8512=>811,8513=>775,8514=>557,8515=>557,8516=>611,8517=>819,8518=>708,8519=>615,8520=>351,8521=>351,8523=>780,8526=>526,8528=>969,8529=>969,8530=>1370,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969,8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969,8543=>568,8544=>295,8545=>492,8546=>689,8547=>923,8548=>684,8549=>922,8550=>1120,8551=>1317,8552=>917,8553=>685,8554=>933,8555=>1131,8556=>557,8557=>698,8558=>770,8559=>863,8560=>278,8561=>458,8562=>637,8563=>812,8564=>592,8565=>811,8566=>991,8567=>1170,8568=>819,8569=>592,8570=>822,8571=>1002,8572=>278,8573=>550,8574=>635,8575=>974,8576=>1245,8577=>770,8578=>1245,8579=>703,8580=>549,8581=>698,8585=>969,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>684,8705=>636,8706=>517,8707=>632,8708=>632,8709=>871,8710=>669,8711=>669,8712=>871,8713=>871,8714=>718,8715=>871,8716=>871,8717=>718,8718=>636,8719=>757,8720=>757,8721=>674,8722=>838,8723=>838,8724=>838,8725=>337,8726=>637,8727=>838,8728=>626,8729=>626,8730=>637,8731=>637,8732=>637,8733=>714,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500,8742=>500,8743=>732,8744=>732,8745=>732,8746=>732,8747=>521,8748=>789,8749=>1057,8750=>521,8751=>789,8752=>1057,8753=>521,8754=>521,8755=>521,8756=>636,8757=>636,8758=>260,8759=>636,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838,8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838,8782=>838,8783=>838,8784=>838,8785=>838,8786=>839,8787=>839,8788=>1000,8789=>1000,8790=>838,8791=>838,8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838,8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>838,8809=>838,8810=>1047,8811=>1047,8812=>464,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838,8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838,8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838,8842=>838,8843=>838,8844=>732,8845=>732,8846=>732,8847=>838,8848=>838,8849=>838,8850=>838,8851=>780,8852=>780,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>871,8867=>871,8868=>871,8869=>871,8870=>521,8871=>521,8872=>871,8873=>871,8874=>871,8875=>871,8876=>871,8877=>871,8878=>871,8879=>871,8880=>838,8881=>838,8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>521,8891=>732,8892=>732,8893=>732,8894=>838,8895=>838,8896=>820,8897=>820,8898=>820,8899=>820,8900=>494,8901=>318,8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>732,8911=>732,8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422,8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838,8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838,8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1000,8947=>871,8948=>718,8949=>871,8950=>871,8951=>718,8952=>871,8953=>871,8954=>1000,8955=>871,8956=>718,8957=>871,8958=>718,8959=>871,8960=>602,8961=>602,8962=>635,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>390,8969=>390,8970=>390,8971=>390,8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>513,8984=>1000,8985=>838,8988=>469,8989=>469,8990=>469,8991=>469,8992=>521,8993=>521,8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414,9004=>873,9075=>338,9076=>635,9077=>837,9082=>659,9085=>757,9095=>1152,9108=>873,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>521,9166=>838,9167=>945,9187=>873,9189=>769,9192=>636,9250=>635,9251=>635,9312=>896,9313=>896,9314=>896,9315=>896,9316=>896,9317=>896,9318=>896,9319=>896,9320=>896,9321=>896,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573,9736=>896,9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896,9746=>896,9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896,9756=>896,9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746,9766=>649,9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896,9776=>896,9777=>896,9778=>896,9779=>896,9780=>896,9781=>896,9782=>896,9783=>896,9784=>896,9785=>1042,9786=>1042,9787=>1042,9788=>896,9789=>896,9790=>896,9791=>614,9792=>732,9793=>732,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896,9806=>896,9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896,9816=>896,9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896,9846=>896,9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896,9856=>869,9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>896,9863=>896,9864=>896,9865=>896,9866=>896,9867=>896,9868=>896,9869=>896,9870=>896,9871=>896,9872=>896,9873=>896,9874=>896,9875=>896,9876=>896,9877=>541,9878=>896,9879=>896,9880=>896,9881=>896,9882=>896,9883=>896,9884=>896,9888=>896,9889=>702,9890=>1004,9891=>1089,9892=>1175,9893=>903,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838,9899=>838,9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>732,9907=>732,9908=>732,9909=>732,9910=>850,9911=>732,9912=>732,9920=>838,9921=>838,9922=>838,9923=>838,9954=>732,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838,9991=>838,9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838,10003=>838,10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838,10013=>838,10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838,10023=>838,10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838,10034=>838,10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838,10044=>838,10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838,10054=>838,10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896,10066=>896,10070=>896,10072=>838,10073=>838,10074=>838,10075=>322,10076=>322,10077=>538,10078=>538,10081=>838,10082=>838,10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838,10092=>838,10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838,10102=>896,10103=>896,10104=>896,10105=>896,10106=>896,10107=>896,10108=>896,10109=>896,10110=>896,10111=>896,10112=>838,10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838,10122=>838,10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838,10132=>838,10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838,10145=>838,10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838,10155=>838,10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838,10166=>838,10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>390,10182=>390,10208=>494,10214=>495,10215=>495,10216=>390,10217=>390,10218=>556,10219=>556,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732,10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732,10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732,10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732,10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732,10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732,10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732,10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732,10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732,10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732,10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732,10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732,10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732,10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732,10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732,10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732,10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732,10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732,10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732,10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732,10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732,10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732,10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732,10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732,10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732,10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10502=>838,10503=>838,10506=>838,10507=>838,10560=>683,10561=>683,10627=>734,10628=>734,10702=>838,10703=>1000,10704=>1000,10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000,10754=>1000,10764=>1325,10765=>521,10766=>521,10767=>521,10768=>521,10769=>521,10770=>521,10771=>521,10772=>521,10773=>521,10774=>521,10775=>521,10776=>521,10777=>521,10778=>521,10779=>521,10780=>521,10799=>838,10858=>838,10859=>838,10877=>838,10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838,10887=>838,10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838,10897=>838,10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838,10907=>838,10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838,10930=>838,10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838,11002=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>836,11023=>836,11024=>836,11025=>836,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869,11041=>873,11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>557,11361=>278,11362=>557,11363=>603,11364=>695,11365=>613,11366=>392,11367=>752,11368=>634,11369=>656,11370=>579,11371=>685,11372=>525,11373=>781,11374=>863,11375=>684,11376=>781,11377=>734,11378=>1128,11379=>961,11380=>592,11381=>654,11382=>568,11383=>660,11385=>414,11386=>612,11387=>491,11388=>175,11389=>431,11390=>635,11391=>685,11520=>591,11521=>595,11522=>564,11523=>602,11524=>587,11525=>911,11526=>626,11527=>952,11528=>595,11529=>607,11530=>954,11531=>620,11532=>595,11533=>926,11534=>595,11535=>806,11536=>931,11537=>584,11538=>592,11539=>923,11540=>953,11541=>828,11542=>596,11543=>595,11544=>590,11545=>592,11546=>592,11547=>621,11548=>920,11549=>589,11550=>586,11551=>581,11552=>914,11553=>596,11554=>595,11555=>592,11556=>642,11557=>901,11568=>646,11569=>888,11570=>888,11571=>682,11572=>684,11573=>635,11574=>562,11575=>684,11576=>684,11577=>632,11578=>632,11579=>683,11580=>875,11581=>685,11582=>491,11583=>685,11584=>888,11585=>888,11586=>300,11587=>627,11588=>752,11589=>656,11590=>527,11591=>685,11592=>645,11593=>632,11594=>502,11595=>953,11596=>778,11597=>748,11598=>621,11599=>295,11600=>778,11601=>295,11602=>752,11603=>633,11604=>888,11605=>888,11606=>752,11607=>320,11608=>749,11609=>888,11610=>888,11611=>698,11612=>768,11613=>685,11614=>698,11615=>622,11616=>684,11617=>752,11618=>632,11619=>788,11620=>567,11621=>788,11631=>515,11800=>531,11806=>838,11810=>390,11811=>390,11812=>390,11813=>390,11822=>531,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896,19912=>896,19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896,19922=>896,19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896,19932=>896,19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896,19942=>896,19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896,19952=>896,19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896,19962=>896,19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42192=>686,42193=>603,42194=>603,42195=>770,42196=>611,42197=>611,42198=>775,42199=>656,42200=>656,42201=>512,42202=>698,42203=>703,42204=>685,42205=>575,42206=>575,42207=>863,42208=>748,42209=>557,42210=>635,42211=>695,42212=>695,42213=>684,42214=>684,42215=>752,42216=>775,42217=>512,42218=>989,42219=>685,42220=>611,42221=>686,42222=>684,42223=>684,42224=>632,42225=>632,42226=>295,42227=>787,42228=>732,42229=>732,42230=>557,42231=>767,42232=>300,42233=>300,42234=>596,42235=>596,42236=>300,42237=>300,42238=>588,42239=>588,42564=>635,42565=>521,42566=>354,42567=>338,42572=>1180,42573=>1028,42576=>1029,42577=>906,42580=>1080,42581=>842,42582=>977,42583=>843,42594=>1062,42595=>912,42596=>1066,42597=>901,42598=>1178,42599=>1008,42600=>787,42601=>612,42602=>855,42603=>712,42604=>1358,42605=>1019,42606=>879,42634=>782,42635=>685,42636=>611,42637=>583,42644=>686,42645=>634,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493,42779=>369,42780=>369,42781=>252,42782=>252,42783=>252,42786=>385,42787=>356,42788=>472,42789=>472,42790=>752,42791=>634,42792=>878,42793=>709,42794=>614,42795=>541,42800=>491,42801=>521,42802=>1250,42803=>985,42804=>1203,42805=>990,42806=>1142,42807=>981,42808=>971,42809=>818,42810=>971,42811=>818,42812=>959,42813=>818,42814=>703,42815=>549,42816=>656,42817=>583,42822=>680,42823=>392,42824=>582,42825=>427,42826=>807,42827=>704,42830=>1358,42831=>1019,42832=>603,42833=>635,42834=>734,42835=>774,42838=>787,42839=>635,42852=>605,42853=>635,42854=>605,42855=>635,42880=>557,42881=>278,42882=>735,42883=>634,42889=>337,42890=>376,42891=>401,42892=>275,42893=>686,42894=>487,42896=>772,42897=>667,42912=>775,42913=>635,42914=>656,42915=>579,42916=>748,42917=>634,42918=>695,42919=>411,42920=>635,42921=>521,42922=>801,43002=>915,43003=>575,43004=>603,43005=>863,43006=>295,43007=>1199,61184=>213,61185=>238,61186=>257,61187=>264,61188=>267,61189=>238,61190=>213,61191=>238,61192=>257,61193=>264,61194=>257,61195=>238,61196=>213,61197=>238,61198=>257,61199=>264,61200=>257,61201=>238,61202=>213,61203=>238,61204=>267,61205=>264,61206=>257,61207=>238,61208=>213,61209=>275,61440=>977,61441=>977,61442=>977,61443=>977,62464=>580,62465=>580,62466=>624,62467=>889,62468=>585,62469=>580,62470=>653,62471=>882,62472=>555,62473=>580,62474=>1168,62475=>589,62476=>590,62477=>869,62478=>580,62479=>589,62480=>914,62481=>590,62482=>731,62483=>583,62484=>872,62485=>589,62486=>895,62487=>589,62488=>589,62489=>590,62490=>649,62491=>589,62492=>589,62493=>599,62494=>590,62495=>516,62496=>580,62497=>584,62498=>580,62499=>580,62500=>581,62501=>638,62502=>955,62504=>931,62505=>808,62506=>508,62507=>508,62508=>508,62509=>508,62510=>508,62511=>508,62512=>508,62513=>508,62514=>508,62515=>508,62516=>518,62517=>518,62518=>518,62519=>787,62520=>787,62521=>787,62522=>787,62523=>787,62524=>546,62525=>546,62526=>546,62527=>546,62528=>546,62529=>546,63173=>612,64256=>689,64257=>630,64258=>630,64259=>967,64260=>967,64261=>686,64262=>861,64275=>1202,64276=>1202,64277=>1196,64278=>1186,64279=>1529,64285=>224,64286=>0,64287=>331,64288=>636,64289=>856,64290=>774,64291=>906,64292=>771,64293=>843,64294=>855,64295=>807,64296=>875,64297=>838,64298=>708,64299=>708,64300=>708,64301=>708,64302=>668,64303=>668,64304=>668,64305=>578,64306=>412,64307=>546,64308=>653,64309=>355,64310=>406,64312=>648,64313=>330,64314=>537,64315=>529,64316=>568,64318=>679,64320=>399,64321=>649,64323=>640,64324=>625,64326=>593,64327=>709,64328=>564,64329=>708,64330=>657,64331=>272,64332=>578,64333=>529,64334=>625,64335=>629,64338=>941,64339=>982,64340=>278,64341=>302,64342=>941,64343=>982,64344=>278,64345=>302,64346=>941,64347=>982,64348=>278,64349=>302,64350=>941,64351=>982,64352=>278,64353=>302,64354=>941,64355=>982,64356=>278,64357=>302,64358=>941,64359=>982,64360=>278,64361=>302,64362=>1037,64363=>1035,64364=>478,64365=>506,64366=>1037,64367=>1035,64368=>478,64369=>506,64370=>646,64371=>646,64372=>618,64373=>646,64374=>646,64375=>646,64376=>618,64377=>646,64378=>646,64379=>646,64380=>618,64381=>646,64382=>646,64383=>646,64384=>618,64385=>646,64386=>445,64387=>525,64388=>445,64389=>525,64390=>445,64391=>525,64392=>445,64393=>525,64394=>483,64395=>552,64396=>483,64397=>552,64398=>895,64399=>895,64400=>476,64401=>552,64402=>895,64403=>895,64404=>476,64405=>552,64406=>895,64407=>895,64408=>476,64409=>552,64410=>895,64411=>895,64412=>476,64413=>552,64414=>734,64415=>761,64416=>734,64417=>761,64418=>278,64419=>302,64426=>698,64427=>632,64428=>527,64429=>461,64467=>824,64468=>843,64469=>476,64470=>552,64473=>483,64474=>517,64488=>278,64489=>302,64508=>783,64509=>833,64510=>278,64511=>302,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65136=>293,65137=>293,65138=>293,65139=>262,65140=>293,65142=>293,65143=>293,65144=>293,65145=>293,65146=>293,65147=>293,65148=>293,65149=>293,65150=>293,65151=>293,65152=>470,65153=>278,65154=>305,65155=>278,65156=>305,65157=>483,65158=>517,65159=>278,65160=>305,65161=>783,65162=>833,65163=>278,65164=>302,65165=>278,65166=>305,65167=>941,65168=>982,65169=>278,65170=>302,65171=>524,65172=>536,65173=>941,65174=>982,65175=>278,65176=>302,65177=>941,65178=>982,65179=>278,65180=>302,65181=>646,65182=>646,65183=>618,65184=>646,65185=>646,65186=>646,65187=>618,65188=>646,65189=>646,65190=>646,65191=>618,65192=>646,65193=>445,65194=>525,65195=>445,65196=>525,65197=>483,65198=>552,65199=>483,65200=>552,65201=>1221,65202=>1275,65203=>838,65204=>892,65205=>1221,65206=>1275,65207=>838,65208=>892,65209=>1209,65210=>1225,65211=>849,65212=>867,65213=>1209,65214=>1225,65215=>849,65216=>867,65217=>925,65218=>949,65219=>796,65220=>820,65221=>925,65222=>949,65223=>796,65224=>820,65225=>597,65226=>532,65227=>597,65228=>482,65229=>597,65230=>532,65231=>523,65232=>482,65233=>1037,65234=>1035,65235=>478,65236=>506,65237=>776,65238=>834,65239=>478,65240=>506,65241=>824,65242=>843,65243=>476,65244=>552,65245=>727,65246=>757,65247=>305,65248=>331,65249=>619,65250=>666,65251=>536,65252=>578,65253=>734,65254=>761,65255=>278,65256=>302,65257=>524,65258=>536,65259=>527,65260=>461,65261=>483,65262=>517,65263=>783,65264=>833,65265=>783,65266=>833,65267=>278,65268=>302,65269=>570,65270=>597,65271=>570,65272=>597,65273=>570,65274=>597,65275=>570,65276=>597,65279=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025,65535=>600); +// --- EOF --- diff --git a/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/include/tcpdf_font_data.php b/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/include/tcpdf_font_data.php new file mode 100644 index 0000000..974e72e --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/include/tcpdf_font_data.php @@ -0,0 +1,18447 @@ +. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : Unicode data and encoding maps for TCPDF. +// +//============================================================+ + +/** + * @file + * Unicode data and encoding maps for TCPDF. + * @author Nicola Asuni + * @package com.tecnick.tcpdf + */ + +/** + * @class TCPDF_FONT_DATA + * Unicode data and encoding maps for TCPDF. + * @package com.tecnick.tcpdf + * @version 1.0.001 + * @author Nicola Asuni - info@tecnick.com + */ +class TCPDF_FONT_DATA { + +/** + * Unicode code for Left-to-Right Mark. + * @public + */ +public static $uni_LRM = 8206; + +/** + * Unicode code for Right-to-Left Mark. + * @public + */ +public static $uni_RLM = 8207; + +/** + * Unicode code for Left-to-Right Embedding. + * @public + */ +public static $uni_LRE = 8234; + +/** + * Unicode code for Right-to-Left Embedding. + * @public + */ +public static $uni_RLE = 8235; + +/** + * Unicode code for Pop Directional Format. + * @public + */ +public static $uni_PDF = 8236; + +/** + * Unicode code for Left-to-Right Override. + * @public + */ +public static $uni_LRO = 8237; + +/** + * Unicode code for Right-to-Left Override. + * @public + */ +public static $uni_RLO = 8238; + +/** + * Pattern to test RTL (Righ-To-Left) strings using regular expressions. + * @public + */ +public static $uni_RE_PATTERN_RTL = "/( + \xD6\xBE # R + | \xD7[\x80\x83\x86\x90-\xAA\xB0-\xB4] # R + | \xDF[\x80-\xAA\xB4\xB5\xBA] # R + | \xE2\x80\x8F # R + | \xEF\xAC[\x9D\x9F\xA0-\xA8\xAA-\xB6\xB8-\xBC\xBE] # R + | \xEF\xAD[\x80\x81\x83\x84\x86-\x8F] # R + | \xF0\x90\xA0[\x80-\x85\x88\x8A-\xB5\xB7\xB8\xBC\xBF] # R + | \xF0\x90\xA4[\x80-\x99] # R + | \xF0\x90\xA8[\x80\x90-\x93\x95-\x97\x99-\xB3] # R + | \xF0\x90\xA9[\x80-\x87\x90-\x98] # R + | \xE2\x80[\xAB\xAE] # RLE & RLO + )/x"; + +/** + * Pattern to test Arabic strings using regular expressions. Source: http://www.w3.org/International/questions/qa-forms-utf-8 + * @public + */ +public static $uni_RE_PATTERN_ARABIC = "/( + \xD8[\x80-\x83\x8B\x8D\x9B\x9E\x9F\xA1-\xBA] # AL + | \xD9[\x80-\x8A\xAD-\xAF\xB1-\xBF] # AL + | \xDA[\x80-\xBF] # AL + | \xDB[\x80-\x95\x9D\xA5\xA6\xAE\xAF\xBA-\xBF] # AL + | \xDC[\x80-\x8D\x90\x92-\xAF] # AL + | \xDD[\x8D-\xAD] # AL + | \xDE[\x80-\xA5\xB1] # AL + | \xEF\xAD[\x90-\xBF] # AL + | \xEF\xAE[\x80-\xB1] # AL + | \xEF\xAF[\x93-\xBF] # AL + | \xEF[\xB0-\xB3][\x80-\xBF] # AL + | \xEF\xB4[\x80-\xBD] # AL + | \xEF\xB5[\x90-\xBF] # AL + | \xEF\xB6[\x80-\x8F\x92-\xBF] # AL + | \xEF\xB7[\x80-\x87\xB0-\xBC] # AL + | \xEF\xB9[\xB0-\xB4\xB6-\xBF] # AL + | \xEF\xBA[\x80-\xBF] # AL + | \xEF\xBB[\x80-\xBC] # AL + | \xD9[\xA0-\xA9\xAB\xAC] # AN + )/x"; + +/** + * Array of Unicode types. + * @public + */ +public static $uni_type = array( +0=>'BN', +1=>'BN', +2=>'BN', +3=>'BN', +4=>'BN', +5=>'BN', +6=>'BN', +7=>'BN', +8=>'BN', +9=>'S', +10=>'B', +11=>'S', +12=>'WS', +13=>'B', +14=>'BN', +15=>'BN', +16=>'BN', +17=>'BN', +18=>'BN', +19=>'BN', +20=>'BN', +21=>'BN', +22=>'BN', +23=>'BN', +24=>'BN', +25=>'BN', +26=>'BN', +27=>'BN', +28=>'B', +29=>'B', +30=>'B', +31=>'S', +32=>'WS', +33=>'ON', +34=>'ON', +35=>'ET', +36=>'ET', +37=>'ET', +38=>'ON', +39=>'ON', +40=>'ON', +41=>'ON', +42=>'ON', +43=>'ES', +44=>'CS', +45=>'ES', +46=>'CS', +47=>'CS', +48=>'EN', +49=>'EN', +50=>'EN', +51=>'EN', +52=>'EN', +53=>'EN', +54=>'EN', +55=>'EN', +56=>'EN', +57=>'EN', +58=>'CS', +59=>'ON', +60=>'ON', +61=>'ON', +62=>'ON', +63=>'ON', +64=>'ON', +65=>'L', +66=>'L', +67=>'L', +68=>'L', +69=>'L', +70=>'L', +71=>'L', +72=>'L', +73=>'L', +74=>'L', +75=>'L', +76=>'L', +77=>'L', +78=>'L', +79=>'L', +80=>'L', +81=>'L', +82=>'L', +83=>'L', +84=>'L', +85=>'L', +86=>'L', +87=>'L', +88=>'L', +89=>'L', +90=>'L', +91=>'ON', +92=>'ON', +93=>'ON', +94=>'ON', +95=>'ON', +96=>'ON', +97=>'L', +98=>'L', +99=>'L', +100=>'L', +101=>'L', +102=>'L', +103=>'L', +104=>'L', +105=>'L', +106=>'L', +107=>'L', +108=>'L', +109=>'L', +110=>'L', +111=>'L', +112=>'L', +113=>'L', +114=>'L', +115=>'L', +116=>'L', +117=>'L', +118=>'L', +119=>'L', +120=>'L', +121=>'L', +122=>'L', +123=>'ON', +124=>'ON', +125=>'ON', +126=>'ON', +127=>'BN', +128=>'BN', +129=>'BN', +130=>'BN', +131=>'BN', +132=>'BN', +133=>'B', +134=>'BN', +135=>'BN', +136=>'BN', +137=>'BN', +138=>'BN', +139=>'BN', +140=>'BN', +141=>'BN', +142=>'BN', +143=>'BN', +144=>'BN', +145=>'BN', +146=>'BN', +147=>'BN', +148=>'BN', +149=>'BN', +150=>'BN', +151=>'BN', +152=>'BN', +153=>'BN', +154=>'BN', +155=>'BN', +156=>'BN', +157=>'BN', +158=>'BN', +159=>'BN', +160=>'CS', +161=>'ON', +162=>'ET', +163=>'ET', +164=>'ET', +165=>'ET', +166=>'ON', +167=>'ON', +168=>'ON', +169=>'ON', +170=>'L', +171=>'ON', +172=>'ON', +173=>'BN', +174=>'ON', +175=>'ON', +176=>'ET', +177=>'ET', +178=>'EN', +179=>'EN', +180=>'ON', +181=>'L', +182=>'ON', +183=>'ON', +184=>'ON', +185=>'EN', +186=>'L', +187=>'ON', +188=>'ON', +189=>'ON', +190=>'ON', +191=>'ON', +192=>'L', +193=>'L', +194=>'L', +195=>'L', +196=>'L', +197=>'L', +198=>'L', +199=>'L', +200=>'L', +201=>'L', +202=>'L', +203=>'L', +204=>'L', +205=>'L', +206=>'L', +207=>'L', +208=>'L', +209=>'L', +210=>'L', +211=>'L', +212=>'L', +213=>'L', +214=>'L', +215=>'ON', +216=>'L', +217=>'L', +218=>'L', +219=>'L', +220=>'L', +221=>'L', +222=>'L', +223=>'L', +224=>'L', +225=>'L', +226=>'L', +227=>'L', +228=>'L', +229=>'L', +230=>'L', +231=>'L', +232=>'L', +233=>'L', +234=>'L', +235=>'L', +236=>'L', +237=>'L', +238=>'L', +239=>'L', +240=>'L', +241=>'L', +242=>'L', +243=>'L', +244=>'L', +245=>'L', +246=>'L', +247=>'ON', +248=>'L', +249=>'L', +250=>'L', +251=>'L', +252=>'L', +253=>'L', +254=>'L', +255=>'L', +256=>'L', +257=>'L', +258=>'L', +259=>'L', +260=>'L', +261=>'L', +262=>'L', +263=>'L', +264=>'L', +265=>'L', +266=>'L', +267=>'L', +268=>'L', +269=>'L', +270=>'L', +271=>'L', +272=>'L', +273=>'L', +274=>'L', +275=>'L', +276=>'L', +277=>'L', +278=>'L', +279=>'L', +280=>'L', +281=>'L', +282=>'L', +283=>'L', +284=>'L', +285=>'L', +286=>'L', +287=>'L', +288=>'L', +289=>'L', +290=>'L', +291=>'L', +292=>'L', +293=>'L', +294=>'L', +295=>'L', +296=>'L', +297=>'L', +298=>'L', +299=>'L', +300=>'L', +301=>'L', +302=>'L', +303=>'L', +304=>'L', +305=>'L', +306=>'L', +307=>'L', +308=>'L', +309=>'L', +310=>'L', +311=>'L', +312=>'L', +313=>'L', +314=>'L', +315=>'L', +316=>'L', +317=>'L', +318=>'L', +319=>'L', +320=>'L', +321=>'L', +322=>'L', +323=>'L', +324=>'L', +325=>'L', +326=>'L', +327=>'L', +328=>'L', +329=>'L', +330=>'L', +331=>'L', +332=>'L', +333=>'L', +334=>'L', +335=>'L', +336=>'L', +337=>'L', +338=>'L', +339=>'L', +340=>'L', +341=>'L', +342=>'L', +343=>'L', +344=>'L', +345=>'L', +346=>'L', +347=>'L', +348=>'L', +349=>'L', +350=>'L', +351=>'L', +352=>'L', +353=>'L', +354=>'L', +355=>'L', +356=>'L', +357=>'L', +358=>'L', +359=>'L', +360=>'L', +361=>'L', +362=>'L', +363=>'L', +364=>'L', +365=>'L', +366=>'L', +367=>'L', +368=>'L', +369=>'L', +370=>'L', +371=>'L', +372=>'L', +373=>'L', +374=>'L', +375=>'L', +376=>'L', +377=>'L', +378=>'L', +379=>'L', +380=>'L', +381=>'L', +382=>'L', +383=>'L', +384=>'L', +385=>'L', +386=>'L', +387=>'L', +388=>'L', +389=>'L', +390=>'L', +391=>'L', +392=>'L', +393=>'L', +394=>'L', +395=>'L', +396=>'L', +397=>'L', +398=>'L', +399=>'L', +400=>'L', +401=>'L', +402=>'L', +403=>'L', +404=>'L', +405=>'L', +406=>'L', +407=>'L', +408=>'L', +409=>'L', +410=>'L', +411=>'L', +412=>'L', +413=>'L', +414=>'L', +415=>'L', +416=>'L', +417=>'L', +418=>'L', +419=>'L', +420=>'L', +421=>'L', +422=>'L', +423=>'L', +424=>'L', +425=>'L', +426=>'L', +427=>'L', +428=>'L', +429=>'L', +430=>'L', +431=>'L', +432=>'L', +433=>'L', +434=>'L', +435=>'L', +436=>'L', +437=>'L', +438=>'L', +439=>'L', +440=>'L', +441=>'L', +442=>'L', +443=>'L', +444=>'L', +445=>'L', +446=>'L', +447=>'L', +448=>'L', +449=>'L', +450=>'L', +451=>'L', +452=>'L', +453=>'L', +454=>'L', +455=>'L', +456=>'L', +457=>'L', +458=>'L', +459=>'L', +460=>'L', +461=>'L', +462=>'L', +463=>'L', +464=>'L', +465=>'L', +466=>'L', +467=>'L', +468=>'L', +469=>'L', +470=>'L', +471=>'L', +472=>'L', +473=>'L', +474=>'L', +475=>'L', +476=>'L', +477=>'L', +478=>'L', +479=>'L', +480=>'L', +481=>'L', +482=>'L', +483=>'L', +484=>'L', +485=>'L', +486=>'L', +487=>'L', +488=>'L', +489=>'L', +490=>'L', +491=>'L', +492=>'L', +493=>'L', +494=>'L', +495=>'L', +496=>'L', +497=>'L', +498=>'L', +499=>'L', +500=>'L', +501=>'L', +502=>'L', +503=>'L', +504=>'L', +505=>'L', +506=>'L', +507=>'L', +508=>'L', +509=>'L', +510=>'L', +511=>'L', +512=>'L', +513=>'L', +514=>'L', +515=>'L', +516=>'L', +517=>'L', +518=>'L', +519=>'L', +520=>'L', +521=>'L', +522=>'L', +523=>'L', +524=>'L', +525=>'L', +526=>'L', +527=>'L', +528=>'L', +529=>'L', +530=>'L', +531=>'L', +532=>'L', +533=>'L', +534=>'L', +535=>'L', +536=>'L', +537=>'L', +538=>'L', +539=>'L', +540=>'L', +541=>'L', +542=>'L', +543=>'L', +544=>'L', +545=>'L', +546=>'L', +547=>'L', +548=>'L', +549=>'L', +550=>'L', +551=>'L', +552=>'L', +553=>'L', +554=>'L', +555=>'L', +556=>'L', +557=>'L', +558=>'L', +559=>'L', +560=>'L', +561=>'L', +562=>'L', +563=>'L', +564=>'L', +565=>'L', +566=>'L', +567=>'L', +568=>'L', +569=>'L', +570=>'L', +571=>'L', +572=>'L', +573=>'L', +574=>'L', +575=>'L', +576=>'L', +577=>'L', +578=>'L', +579=>'L', +580=>'L', +581=>'L', +582=>'L', +583=>'L', +584=>'L', +585=>'L', +586=>'L', +587=>'L', +588=>'L', +589=>'L', +590=>'L', +591=>'L', +592=>'L', +593=>'L', +594=>'L', +595=>'L', +596=>'L', +597=>'L', +598=>'L', +599=>'L', +600=>'L', +601=>'L', +602=>'L', +603=>'L', +604=>'L', +605=>'L', +606=>'L', +607=>'L', +608=>'L', +609=>'L', +610=>'L', +611=>'L', +612=>'L', +613=>'L', +614=>'L', +615=>'L', +616=>'L', +617=>'L', +618=>'L', +619=>'L', +620=>'L', +621=>'L', +622=>'L', +623=>'L', +624=>'L', +625=>'L', +626=>'L', +627=>'L', +628=>'L', +629=>'L', +630=>'L', +631=>'L', +632=>'L', +633=>'L', +634=>'L', +635=>'L', +636=>'L', +637=>'L', +638=>'L', +639=>'L', +640=>'L', +641=>'L', +642=>'L', +643=>'L', +644=>'L', +645=>'L', +646=>'L', +647=>'L', +648=>'L', +649=>'L', +650=>'L', +651=>'L', +652=>'L', +653=>'L', +654=>'L', +655=>'L', +656=>'L', +657=>'L', +658=>'L', +659=>'L', +660=>'L', +661=>'L', +662=>'L', +663=>'L', +664=>'L', +665=>'L', +666=>'L', +667=>'L', +668=>'L', +669=>'L', +670=>'L', +671=>'L', +672=>'L', +673=>'L', +674=>'L', +675=>'L', +676=>'L', +677=>'L', +678=>'L', +679=>'L', +680=>'L', +681=>'L', +682=>'L', +683=>'L', +684=>'L', +685=>'L', +686=>'L', +687=>'L', +688=>'L', +689=>'L', +690=>'L', +691=>'L', +692=>'L', +693=>'L', +694=>'L', +695=>'L', +696=>'L', +697=>'ON', +698=>'ON', +699=>'L', +700=>'L', +701=>'L', +702=>'L', +703=>'L', +704=>'L', +705=>'L', +706=>'ON', +707=>'ON', +708=>'ON', +709=>'ON', +710=>'ON', +711=>'ON', +712=>'ON', +713=>'ON', +714=>'ON', +715=>'ON', +716=>'ON', +717=>'ON', +718=>'ON', +719=>'ON', +720=>'L', +721=>'L', +722=>'ON', +723=>'ON', +724=>'ON', +725=>'ON', +726=>'ON', +727=>'ON', +728=>'ON', +729=>'ON', +730=>'ON', +731=>'ON', +732=>'ON', +733=>'ON', +734=>'ON', +735=>'ON', +736=>'L', +737=>'L', +738=>'L', +739=>'L', +740=>'L', +741=>'ON', +742=>'ON', +743=>'ON', +744=>'ON', +745=>'ON', +746=>'ON', +747=>'ON', +748=>'ON', +749=>'ON', +750=>'L', +751=>'ON', +752=>'ON', +753=>'ON', +754=>'ON', +755=>'ON', +756=>'ON', +757=>'ON', +758=>'ON', +759=>'ON', +760=>'ON', +761=>'ON', +762=>'ON', +763=>'ON', +764=>'ON', +765=>'ON', +766=>'ON', +767=>'ON', +768=>'NSM', +769=>'NSM', +770=>'NSM', +771=>'NSM', +772=>'NSM', +773=>'NSM', +774=>'NSM', +775=>'NSM', +776=>'NSM', +777=>'NSM', +778=>'NSM', +779=>'NSM', +780=>'NSM', +781=>'NSM', +782=>'NSM', +783=>'NSM', +784=>'NSM', +785=>'NSM', +786=>'NSM', +787=>'NSM', +788=>'NSM', +789=>'NSM', +790=>'NSM', +791=>'NSM', +792=>'NSM', +793=>'NSM', +794=>'NSM', +795=>'NSM', +796=>'NSM', +797=>'NSM', +798=>'NSM', +799=>'NSM', +800=>'NSM', +801=>'NSM', +802=>'NSM', +803=>'NSM', +804=>'NSM', +805=>'NSM', +806=>'NSM', +807=>'NSM', +808=>'NSM', +809=>'NSM', +810=>'NSM', +811=>'NSM', +812=>'NSM', +813=>'NSM', +814=>'NSM', +815=>'NSM', +816=>'NSM', +817=>'NSM', +818=>'NSM', +819=>'NSM', +820=>'NSM', +821=>'NSM', +822=>'NSM', +823=>'NSM', +824=>'NSM', +825=>'NSM', +826=>'NSM', +827=>'NSM', +828=>'NSM', +829=>'NSM', +830=>'NSM', +831=>'NSM', +832=>'NSM', +833=>'NSM', +834=>'NSM', +835=>'NSM', +836=>'NSM', +837=>'NSM', +838=>'NSM', +839=>'NSM', +840=>'NSM', +841=>'NSM', +842=>'NSM', +843=>'NSM', +844=>'NSM', +845=>'NSM', +846=>'NSM', +847=>'NSM', +848=>'NSM', +849=>'NSM', +850=>'NSM', +851=>'NSM', +852=>'NSM', +853=>'NSM', +854=>'NSM', +855=>'NSM', +856=>'NSM', +857=>'NSM', +858=>'NSM', +859=>'NSM', +860=>'NSM', +861=>'NSM', +862=>'NSM', +863=>'NSM', +864=>'NSM', +865=>'NSM', +866=>'NSM', +867=>'NSM', +868=>'NSM', +869=>'NSM', +870=>'NSM', +871=>'NSM', +872=>'NSM', +873=>'NSM', +874=>'NSM', +875=>'NSM', +876=>'NSM', +877=>'NSM', +878=>'NSM', +879=>'NSM', +884=>'ON', +885=>'ON', +890=>'L', +891=>'L', +892=>'L', +893=>'L', +894=>'ON', +900=>'ON', +901=>'ON', +902=>'L', +903=>'ON', +904=>'L', +905=>'L', +906=>'L', +908=>'L', +910=>'L', +911=>'L', +912=>'L', +913=>'L', +914=>'L', +915=>'L', +916=>'L', +917=>'L', +918=>'L', +919=>'L', +920=>'L', +921=>'L', +922=>'L', +923=>'L', +924=>'L', +925=>'L', +926=>'L', +927=>'L', +928=>'L', +929=>'L', +931=>'L', +932=>'L', +933=>'L', +934=>'L', +935=>'L', +936=>'L', +937=>'L', +938=>'L', +939=>'L', +940=>'L', +941=>'L', +942=>'L', +943=>'L', +944=>'L', +945=>'L', +946=>'L', +947=>'L', +948=>'L', +949=>'L', +950=>'L', +951=>'L', +952=>'L', +953=>'L', +954=>'L', +955=>'L', +956=>'L', +957=>'L', +958=>'L', +959=>'L', +960=>'L', +961=>'L', +962=>'L', +963=>'L', +964=>'L', +965=>'L', +966=>'L', +967=>'L', +968=>'L', +969=>'L', +970=>'L', +971=>'L', +972=>'L', +973=>'L', +974=>'L', +976=>'L', +977=>'L', +978=>'L', +979=>'L', +980=>'L', +981=>'L', +982=>'L', +983=>'L', +984=>'L', +985=>'L', +986=>'L', +987=>'L', +988=>'L', +989=>'L', +990=>'L', +991=>'L', +992=>'L', +993=>'L', +994=>'L', +995=>'L', +996=>'L', +997=>'L', +998=>'L', +999=>'L', +1000=>'L', +1001=>'L', +1002=>'L', +1003=>'L', +1004=>'L', +1005=>'L', +1006=>'L', +1007=>'L', +1008=>'L', +1009=>'L', +1010=>'L', +1011=>'L', +1012=>'L', +1013=>'L', +1014=>'ON', +1015=>'L', +1016=>'L', +1017=>'L', +1018=>'L', +1019=>'L', +1020=>'L', +1021=>'L', +1022=>'L', +1023=>'L', +1024=>'L', +1025=>'L', +1026=>'L', +1027=>'L', +1028=>'L', +1029=>'L', +1030=>'L', +1031=>'L', +1032=>'L', +1033=>'L', +1034=>'L', +1035=>'L', +1036=>'L', +1037=>'L', +1038=>'L', +1039=>'L', +1040=>'L', +1041=>'L', +1042=>'L', +1043=>'L', +1044=>'L', +1045=>'L', +1046=>'L', +1047=>'L', +1048=>'L', +1049=>'L', +1050=>'L', +1051=>'L', +1052=>'L', +1053=>'L', +1054=>'L', +1055=>'L', +1056=>'L', +1057=>'L', +1058=>'L', +1059=>'L', +1060=>'L', +1061=>'L', +1062=>'L', +1063=>'L', +1064=>'L', +1065=>'L', +1066=>'L', +1067=>'L', +1068=>'L', +1069=>'L', +1070=>'L', +1071=>'L', +1072=>'L', +1073=>'L', +1074=>'L', +1075=>'L', +1076=>'L', +1077=>'L', +1078=>'L', +1079=>'L', +1080=>'L', +1081=>'L', +1082=>'L', +1083=>'L', +1084=>'L', +1085=>'L', +1086=>'L', +1087=>'L', +1088=>'L', +1089=>'L', +1090=>'L', +1091=>'L', +1092=>'L', +1093=>'L', +1094=>'L', +1095=>'L', +1096=>'L', +1097=>'L', +1098=>'L', +1099=>'L', +1100=>'L', +1101=>'L', +1102=>'L', +1103=>'L', +1104=>'L', +1105=>'L', +1106=>'L', +1107=>'L', +1108=>'L', +1109=>'L', +1110=>'L', +1111=>'L', +1112=>'L', +1113=>'L', +1114=>'L', +1115=>'L', +1116=>'L', +1117=>'L', +1118=>'L', +1119=>'L', +1120=>'L', +1121=>'L', +1122=>'L', +1123=>'L', +1124=>'L', +1125=>'L', +1126=>'L', +1127=>'L', +1128=>'L', +1129=>'L', +1130=>'L', +1131=>'L', +1132=>'L', +1133=>'L', +1134=>'L', +1135=>'L', +1136=>'L', +1137=>'L', +1138=>'L', +1139=>'L', +1140=>'L', +1141=>'L', +1142=>'L', +1143=>'L', +1144=>'L', +1145=>'L', +1146=>'L', +1147=>'L', +1148=>'L', +1149=>'L', +1150=>'L', +1151=>'L', +1152=>'L', +1153=>'L', +1154=>'L', +1155=>'NSM', +1156=>'NSM', +1157=>'NSM', +1158=>'NSM', +1160=>'NSM', +1161=>'NSM', +1162=>'L', +1163=>'L', +1164=>'L', +1165=>'L', +1166=>'L', +1167=>'L', +1168=>'L', +1169=>'L', +1170=>'L', +1171=>'L', +1172=>'L', +1173=>'L', +1174=>'L', +1175=>'L', +1176=>'L', +1177=>'L', +1178=>'L', +1179=>'L', +1180=>'L', +1181=>'L', +1182=>'L', +1183=>'L', +1184=>'L', +1185=>'L', +1186=>'L', +1187=>'L', +1188=>'L', +1189=>'L', +1190=>'L', +1191=>'L', +1192=>'L', +1193=>'L', +1194=>'L', +1195=>'L', +1196=>'L', +1197=>'L', +1198=>'L', +1199=>'L', +1200=>'L', +1201=>'L', +1202=>'L', +1203=>'L', +1204=>'L', +1205=>'L', +1206=>'L', +1207=>'L', +1208=>'L', +1209=>'L', +1210=>'L', +1211=>'L', +1212=>'L', +1213=>'L', +1214=>'L', +1215=>'L', +1216=>'L', +1217=>'L', +1218=>'L', +1219=>'L', +1220=>'L', +1221=>'L', +1222=>'L', +1223=>'L', +1224=>'L', +1225=>'L', +1226=>'L', +1227=>'L', +1228=>'L', +1229=>'L', +1230=>'L', +1231=>'L', +1232=>'L', +1233=>'L', +1234=>'L', +1235=>'L', +1236=>'L', +1237=>'L', +1238=>'L', +1239=>'L', +1240=>'L', +1241=>'L', +1242=>'L', +1243=>'L', +1244=>'L', +1245=>'L', +1246=>'L', +1247=>'L', +1248=>'L', +1249=>'L', +1250=>'L', +1251=>'L', +1252=>'L', +1253=>'L', +1254=>'L', +1255=>'L', +1256=>'L', +1257=>'L', +1258=>'L', +1259=>'L', +1260=>'L', +1261=>'L', +1262=>'L', +1263=>'L', +1264=>'L', +1265=>'L', +1266=>'L', +1267=>'L', +1268=>'L', +1269=>'L', +1270=>'L', +1271=>'L', +1272=>'L', +1273=>'L', +1274=>'L', +1275=>'L', +1276=>'L', +1277=>'L', +1278=>'L', +1279=>'L', +1280=>'L', +1281=>'L', +1282=>'L', +1283=>'L', +1284=>'L', +1285=>'L', +1286=>'L', +1287=>'L', +1288=>'L', +1289=>'L', +1290=>'L', +1291=>'L', +1292=>'L', +1293=>'L', +1294=>'L', +1295=>'L', +1296=>'L', +1297=>'L', +1298=>'L', +1299=>'L', +1329=>'L', +1330=>'L', +1331=>'L', +1332=>'L', +1333=>'L', +1334=>'L', +1335=>'L', +1336=>'L', +1337=>'L', +1338=>'L', +1339=>'L', +1340=>'L', +1341=>'L', +1342=>'L', +1343=>'L', +1344=>'L', +1345=>'L', +1346=>'L', +1347=>'L', +1348=>'L', +1349=>'L', +1350=>'L', +1351=>'L', +1352=>'L', +1353=>'L', +1354=>'L', +1355=>'L', +1356=>'L', +1357=>'L', +1358=>'L', +1359=>'L', +1360=>'L', +1361=>'L', +1362=>'L', +1363=>'L', +1364=>'L', +1365=>'L', +1366=>'L', +1369=>'L', +1370=>'L', +1371=>'L', +1372=>'L', +1373=>'L', +1374=>'L', +1375=>'L', +1377=>'L', +1378=>'L', +1379=>'L', +1380=>'L', +1381=>'L', +1382=>'L', +1383=>'L', +1384=>'L', +1385=>'L', +1386=>'L', +1387=>'L', +1388=>'L', +1389=>'L', +1390=>'L', +1391=>'L', +1392=>'L', +1393=>'L', +1394=>'L', +1395=>'L', +1396=>'L', +1397=>'L', +1398=>'L', +1399=>'L', +1400=>'L', +1401=>'L', +1402=>'L', +1403=>'L', +1404=>'L', +1405=>'L', +1406=>'L', +1407=>'L', +1408=>'L', +1409=>'L', +1410=>'L', +1411=>'L', +1412=>'L', +1413=>'L', +1414=>'L', +1415=>'L', +1417=>'L', +1418=>'ON', +1425=>'NSM', +1426=>'NSM', +1427=>'NSM', +1428=>'NSM', +1429=>'NSM', +1430=>'NSM', +1431=>'NSM', +1432=>'NSM', +1433=>'NSM', +1434=>'NSM', +1435=>'NSM', +1436=>'NSM', +1437=>'NSM', +1438=>'NSM', +1439=>'NSM', +1440=>'NSM', +1441=>'NSM', +1442=>'NSM', +1443=>'NSM', +1444=>'NSM', +1445=>'NSM', +1446=>'NSM', +1447=>'NSM', +1448=>'NSM', +1449=>'NSM', +1450=>'NSM', +1451=>'NSM', +1452=>'NSM', +1453=>'NSM', +1454=>'NSM', +1455=>'NSM', +1456=>'NSM', +1457=>'NSM', +1458=>'NSM', +1459=>'NSM', +1460=>'NSM', +1461=>'NSM', +1462=>'NSM', +1463=>'NSM', +1464=>'NSM', +1465=>'NSM', +1466=>'NSM', +1467=>'NSM', +1468=>'NSM', +1469=>'NSM', +1470=>'R', +1471=>'NSM', +1472=>'R', +1473=>'NSM', +1474=>'NSM', +1475=>'R', +1476=>'NSM', +1477=>'NSM', +1478=>'R', +1479=>'NSM', +1488=>'R', +1489=>'R', +1490=>'R', +1491=>'R', +1492=>'R', +1493=>'R', +1494=>'R', +1495=>'R', +1496=>'R', +1497=>'R', +1498=>'R', +1499=>'R', +1500=>'R', +1501=>'R', +1502=>'R', +1503=>'R', +1504=>'R', +1505=>'R', +1506=>'R', +1507=>'R', +1508=>'R', +1509=>'R', +1510=>'R', +1511=>'R', +1512=>'R', +1513=>'R', +1514=>'R', +1520=>'R', +1521=>'R', +1522=>'R', +1523=>'R', +1524=>'R', +1536=>'AL', +1537=>'AL', +1538=>'AL', +1539=>'AL', +1547=>'AL', +1548=>'CS', +1549=>'AL', +1550=>'ON', +1551=>'ON', +1552=>'NSM', +1553=>'NSM', +1554=>'NSM', +1555=>'NSM', +1556=>'NSM', +1557=>'NSM', +1563=>'AL', +1566=>'AL', +1567=>'AL', +1569=>'AL', +1570=>'AL', +1571=>'AL', +1572=>'AL', +1573=>'AL', +1574=>'AL', +1575=>'AL', +1576=>'AL', +1577=>'AL', +1578=>'AL', +1579=>'AL', +1580=>'AL', +1581=>'AL', +1582=>'AL', +1583=>'AL', +1584=>'AL', +1585=>'AL', +1586=>'AL', +1587=>'AL', +1588=>'AL', +1589=>'AL', +1590=>'AL', +1591=>'AL', +1592=>'AL', +1593=>'AL', +1594=>'AL', +1600=>'AL', +1601=>'AL', +1602=>'AL', +1603=>'AL', +1604=>'AL', +1605=>'AL', +1606=>'AL', +1607=>'AL', +1608=>'AL', +1609=>'AL', +1610=>'AL', +1611=>'NSM', +1612=>'NSM', +1613=>'NSM', +1614=>'NSM', +1615=>'NSM', +1616=>'NSM', +1617=>'NSM', +1618=>'NSM', +1619=>'NSM', +1620=>'NSM', +1621=>'NSM', +1622=>'NSM', +1623=>'NSM', +1624=>'NSM', +1625=>'NSM', +1626=>'NSM', +1627=>'NSM', +1628=>'NSM', +1629=>'NSM', +1630=>'NSM', +1632=>'AN', +1633=>'AN', +1634=>'AN', +1635=>'AN', +1636=>'AN', +1637=>'AN', +1638=>'AN', +1639=>'AN', +1640=>'AN', +1641=>'AN', +1642=>'ET', +1643=>'AN', +1644=>'AN', +1645=>'AL', +1646=>'AL', +1647=>'AL', +1648=>'NSM', +1649=>'AL', +1650=>'AL', +1651=>'AL', +1652=>'AL', +1653=>'AL', +1654=>'AL', +1655=>'AL', +1656=>'AL', +1657=>'AL', +1658=>'AL', +1659=>'AL', +1660=>'AL', +1661=>'AL', +1662=>'AL', +1663=>'AL', +1664=>'AL', +1665=>'AL', +1666=>'AL', +1667=>'AL', +1668=>'AL', +1669=>'AL', +1670=>'AL', +1671=>'AL', +1672=>'AL', +1673=>'AL', +1674=>'AL', +1675=>'AL', +1676=>'AL', +1677=>'AL', +1678=>'AL', +1679=>'AL', +1680=>'AL', +1681=>'AL', +1682=>'AL', +1683=>'AL', +1684=>'AL', +1685=>'AL', +1686=>'AL', +1687=>'AL', +1688=>'AL', +1689=>'AL', +1690=>'AL', +1691=>'AL', +1692=>'AL', +1693=>'AL', +1694=>'AL', +1695=>'AL', +1696=>'AL', +1697=>'AL', +1698=>'AL', +1699=>'AL', +1700=>'AL', +1701=>'AL', +1702=>'AL', +1703=>'AL', +1704=>'AL', +1705=>'AL', +1706=>'AL', +1707=>'AL', +1708=>'AL', +1709=>'AL', +1710=>'AL', +1711=>'AL', +1712=>'AL', +1713=>'AL', +1714=>'AL', +1715=>'AL', +1716=>'AL', +1717=>'AL', +1718=>'AL', +1719=>'AL', +1720=>'AL', +1721=>'AL', +1722=>'AL', +1723=>'AL', +1724=>'AL', +1725=>'AL', +1726=>'AL', +1727=>'AL', +1728=>'AL', +1729=>'AL', +1730=>'AL', +1731=>'AL', +1732=>'AL', +1733=>'AL', +1734=>'AL', +1735=>'AL', +1736=>'AL', +1737=>'AL', +1738=>'AL', +1739=>'AL', +1740=>'AL', +1741=>'AL', +1742=>'AL', +1743=>'AL', +1744=>'AL', +1745=>'AL', +1746=>'AL', +1747=>'AL', +1748=>'AL', +1749=>'AL', +1750=>'NSM', +1751=>'NSM', +1752=>'NSM', +1753=>'NSM', +1754=>'NSM', +1755=>'NSM', +1756=>'NSM', +1757=>'AL', +1758=>'NSM', +1759=>'NSM', +1760=>'NSM', +1761=>'NSM', +1762=>'NSM', +1763=>'NSM', +1764=>'NSM', +1765=>'AL', +1766=>'AL', +1767=>'NSM', +1768=>'NSM', +1769=>'ON', +1770=>'NSM', +1771=>'NSM', +1772=>'NSM', +1773=>'NSM', +1774=>'AL', +1775=>'AL', +1776=>'EN', +1777=>'EN', +1778=>'EN', +1779=>'EN', +1780=>'EN', +1781=>'EN', +1782=>'EN', +1783=>'EN', +1784=>'EN', +1785=>'EN', +1786=>'AL', +1787=>'AL', +1788=>'AL', +1789=>'AL', +1790=>'AL', +1791=>'AL', +1792=>'AL', +1793=>'AL', +1794=>'AL', +1795=>'AL', +1796=>'AL', +1797=>'AL', +1798=>'AL', +1799=>'AL', +1800=>'AL', +1801=>'AL', +1802=>'AL', +1803=>'AL', +1804=>'AL', +1805=>'AL', +1807=>'BN', +1808=>'AL', +1809=>'NSM', +1810=>'AL', +1811=>'AL', +1812=>'AL', +1813=>'AL', +1814=>'AL', +1815=>'AL', +1816=>'AL', +1817=>'AL', +1818=>'AL', +1819=>'AL', +1820=>'AL', +1821=>'AL', +1822=>'AL', +1823=>'AL', +1824=>'AL', +1825=>'AL', +1826=>'AL', +1827=>'AL', +1828=>'AL', +1829=>'AL', +1830=>'AL', +1831=>'AL', +1832=>'AL', +1833=>'AL', +1834=>'AL', +1835=>'AL', +1836=>'AL', +1837=>'AL', +1838=>'AL', +1839=>'AL', +1840=>'NSM', +1841=>'NSM', +1842=>'NSM', +1843=>'NSM', +1844=>'NSM', +1845=>'NSM', +1846=>'NSM', +1847=>'NSM', +1848=>'NSM', +1849=>'NSM', +1850=>'NSM', +1851=>'NSM', +1852=>'NSM', +1853=>'NSM', +1854=>'NSM', +1855=>'NSM', +1856=>'NSM', +1857=>'NSM', +1858=>'NSM', +1859=>'NSM', +1860=>'NSM', +1861=>'NSM', +1862=>'NSM', +1863=>'NSM', +1864=>'NSM', +1865=>'NSM', +1866=>'NSM', +1869=>'AL', +1870=>'AL', +1871=>'AL', +1872=>'AL', +1873=>'AL', +1874=>'AL', +1875=>'AL', +1876=>'AL', +1877=>'AL', +1878=>'AL', +1879=>'AL', +1880=>'AL', +1881=>'AL', +1882=>'AL', +1883=>'AL', +1884=>'AL', +1885=>'AL', +1886=>'AL', +1887=>'AL', +1888=>'AL', +1889=>'AL', +1890=>'AL', +1891=>'AL', +1892=>'AL', +1893=>'AL', +1894=>'AL', +1895=>'AL', +1896=>'AL', +1897=>'AL', +1898=>'AL', +1899=>'AL', +1900=>'AL', +1901=>'AL', +1920=>'AL', +1921=>'AL', +1922=>'AL', +1923=>'AL', +1924=>'AL', +1925=>'AL', +1926=>'AL', +1927=>'AL', +1928=>'AL', +1929=>'AL', +1930=>'AL', +1931=>'AL', +1932=>'AL', +1933=>'AL', +1934=>'AL', +1935=>'AL', +1936=>'AL', +1937=>'AL', +1938=>'AL', +1939=>'AL', +1940=>'AL', +1941=>'AL', +1942=>'AL', +1943=>'AL', +1944=>'AL', +1945=>'AL', +1946=>'AL', +1947=>'AL', +1948=>'AL', +1949=>'AL', +1950=>'AL', +1951=>'AL', +1952=>'AL', +1953=>'AL', +1954=>'AL', +1955=>'AL', +1956=>'AL', +1957=>'AL', +1958=>'NSM', +1959=>'NSM', +1960=>'NSM', +1961=>'NSM', +1962=>'NSM', +1963=>'NSM', +1964=>'NSM', +1965=>'NSM', +1966=>'NSM', +1967=>'NSM', +1968=>'NSM', +1969=>'AL', +1984=>'R', +1985=>'R', +1986=>'R', +1987=>'R', +1988=>'R', +1989=>'R', +1990=>'R', +1991=>'R', +1992=>'R', +1993=>'R', +1994=>'R', +1995=>'R', +1996=>'R', +1997=>'R', +1998=>'R', +1999=>'R', +2000=>'R', +2001=>'R', +2002=>'R', +2003=>'R', +2004=>'R', +2005=>'R', +2006=>'R', +2007=>'R', +2008=>'R', +2009=>'R', +2010=>'R', +2011=>'R', +2012=>'R', +2013=>'R', +2014=>'R', +2015=>'R', +2016=>'R', +2017=>'R', +2018=>'R', +2019=>'R', +2020=>'R', +2021=>'R', +2022=>'R', +2023=>'R', +2024=>'R', +2025=>'R', +2026=>'R', +2027=>'NSM', +2028=>'NSM', +2029=>'NSM', +2030=>'NSM', +2031=>'NSM', +2032=>'NSM', +2033=>'NSM', +2034=>'NSM', +2035=>'NSM', +2036=>'R', +2037=>'R', +2038=>'ON', +2039=>'ON', +2040=>'ON', +2041=>'ON', +2042=>'R', +2305=>'NSM', +2306=>'NSM', +2307=>'L', +2308=>'L', +2309=>'L', +2310=>'L', +2311=>'L', +2312=>'L', +2313=>'L', +2314=>'L', +2315=>'L', +2316=>'L', +2317=>'L', +2318=>'L', +2319=>'L', +2320=>'L', +2321=>'L', +2322=>'L', +2323=>'L', +2324=>'L', +2325=>'L', +2326=>'L', +2327=>'L', +2328=>'L', +2329=>'L', +2330=>'L', +2331=>'L', +2332=>'L', +2333=>'L', +2334=>'L', +2335=>'L', +2336=>'L', +2337=>'L', +2338=>'L', +2339=>'L', +2340=>'L', +2341=>'L', +2342=>'L', +2343=>'L', +2344=>'L', +2345=>'L', +2346=>'L', +2347=>'L', +2348=>'L', +2349=>'L', +2350=>'L', +2351=>'L', +2352=>'L', +2353=>'L', +2354=>'L', +2355=>'L', +2356=>'L', +2357=>'L', +2358=>'L', +2359=>'L', +2360=>'L', +2361=>'L', +2364=>'NSM', +2365=>'L', +2366=>'L', +2367=>'L', +2368=>'L', +2369=>'NSM', +2370=>'NSM', +2371=>'NSM', +2372=>'NSM', +2373=>'NSM', +2374=>'NSM', +2375=>'NSM', +2376=>'NSM', +2377=>'L', +2378=>'L', +2379=>'L', +2380=>'L', +2381=>'NSM', +2384=>'L', +2385=>'NSM', +2386=>'NSM', +2387=>'NSM', +2388=>'NSM', +2392=>'L', +2393=>'L', +2394=>'L', +2395=>'L', +2396=>'L', +2397=>'L', +2398=>'L', +2399=>'L', +2400=>'L', +2401=>'L', +2402=>'NSM', +2403=>'NSM', +2404=>'L', +2405=>'L', +2406=>'L', +2407=>'L', +2408=>'L', +2409=>'L', +2410=>'L', +2411=>'L', +2412=>'L', +2413=>'L', +2414=>'L', +2415=>'L', +2416=>'L', +2427=>'L', +2428=>'L', +2429=>'L', +2430=>'L', +2431=>'L', +2433=>'NSM', +2434=>'L', +2435=>'L', +2437=>'L', +2438=>'L', +2439=>'L', +2440=>'L', +2441=>'L', +2442=>'L', +2443=>'L', +2444=>'L', +2447=>'L', +2448=>'L', +2451=>'L', +2452=>'L', +2453=>'L', +2454=>'L', +2455=>'L', +2456=>'L', +2457=>'L', +2458=>'L', +2459=>'L', +2460=>'L', +2461=>'L', +2462=>'L', +2463=>'L', +2464=>'L', +2465=>'L', +2466=>'L', +2467=>'L', +2468=>'L', +2469=>'L', +2470=>'L', +2471=>'L', +2472=>'L', +2474=>'L', +2475=>'L', +2476=>'L', +2477=>'L', +2478=>'L', +2479=>'L', +2480=>'L', +2482=>'L', +2486=>'L', +2487=>'L', +2488=>'L', +2489=>'L', +2492=>'NSM', +2493=>'L', +2494=>'L', +2495=>'L', +2496=>'L', +2497=>'NSM', +2498=>'NSM', +2499=>'NSM', +2500=>'NSM', +2503=>'L', +2504=>'L', +2507=>'L', +2508=>'L', +2509=>'NSM', +2510=>'L', +2519=>'L', +2524=>'L', +2525=>'L', +2527=>'L', +2528=>'L', +2529=>'L', +2530=>'NSM', +2531=>'NSM', +2534=>'L', +2535=>'L', +2536=>'L', +2537=>'L', +2538=>'L', +2539=>'L', +2540=>'L', +2541=>'L', +2542=>'L', +2543=>'L', +2544=>'L', +2545=>'L', +2546=>'ET', +2547=>'ET', +2548=>'L', +2549=>'L', +2550=>'L', +2551=>'L', +2552=>'L', +2553=>'L', +2554=>'L', +2561=>'NSM', +2562=>'NSM', +2563=>'L', +2565=>'L', +2566=>'L', +2567=>'L', +2568=>'L', +2569=>'L', +2570=>'L', +2575=>'L', +2576=>'L', +2579=>'L', +2580=>'L', +2581=>'L', +2582=>'L', +2583=>'L', +2584=>'L', +2585=>'L', +2586=>'L', +2587=>'L', +2588=>'L', +2589=>'L', +2590=>'L', +2591=>'L', +2592=>'L', +2593=>'L', +2594=>'L', +2595=>'L', +2596=>'L', +2597=>'L', +2598=>'L', +2599=>'L', +2600=>'L', +2602=>'L', +2603=>'L', +2604=>'L', +2605=>'L', +2606=>'L', +2607=>'L', +2608=>'L', +2610=>'L', +2611=>'L', +2613=>'L', +2614=>'L', +2616=>'L', +2617=>'L', +2620=>'NSM', +2622=>'L', +2623=>'L', +2624=>'L', +2625=>'NSM', +2626=>'NSM', +2631=>'NSM', +2632=>'NSM', +2635=>'NSM', +2636=>'NSM', +2637=>'NSM', +2649=>'L', +2650=>'L', +2651=>'L', +2652=>'L', +2654=>'L', +2662=>'L', +2663=>'L', +2664=>'L', +2665=>'L', +2666=>'L', +2667=>'L', +2668=>'L', +2669=>'L', +2670=>'L', +2671=>'L', +2672=>'NSM', +2673=>'NSM', +2674=>'L', +2675=>'L', +2676=>'L', +2689=>'NSM', +2690=>'NSM', +2691=>'L', +2693=>'L', +2694=>'L', +2695=>'L', +2696=>'L', +2697=>'L', +2698=>'L', +2699=>'L', +2700=>'L', +2701=>'L', +2703=>'L', +2704=>'L', +2705=>'L', +2707=>'L', +2708=>'L', +2709=>'L', +2710=>'L', +2711=>'L', +2712=>'L', +2713=>'L', +2714=>'L', +2715=>'L', +2716=>'L', +2717=>'L', +2718=>'L', +2719=>'L', +2720=>'L', +2721=>'L', +2722=>'L', +2723=>'L', +2724=>'L', +2725=>'L', +2726=>'L', +2727=>'L', +2728=>'L', +2730=>'L', +2731=>'L', +2732=>'L', +2733=>'L', +2734=>'L', +2735=>'L', +2736=>'L', +2738=>'L', +2739=>'L', +2741=>'L', +2742=>'L', +2743=>'L', +2744=>'L', +2745=>'L', +2748=>'NSM', +2749=>'L', +2750=>'L', +2751=>'L', +2752=>'L', +2753=>'NSM', +2754=>'NSM', +2755=>'NSM', +2756=>'NSM', +2757=>'NSM', +2759=>'NSM', +2760=>'NSM', +2761=>'L', +2763=>'L', +2764=>'L', +2765=>'NSM', +2768=>'L', +2784=>'L', +2785=>'L', +2786=>'NSM', +2787=>'NSM', +2790=>'L', +2791=>'L', +2792=>'L', +2793=>'L', +2794=>'L', +2795=>'L', +2796=>'L', +2797=>'L', +2798=>'L', +2799=>'L', +2801=>'ET', +2817=>'NSM', +2818=>'L', +2819=>'L', +2821=>'L', +2822=>'L', +2823=>'L', +2824=>'L', +2825=>'L', +2826=>'L', +2827=>'L', +2828=>'L', +2831=>'L', +2832=>'L', +2835=>'L', +2836=>'L', +2837=>'L', +2838=>'L', +2839=>'L', +2840=>'L', +2841=>'L', +2842=>'L', +2843=>'L', +2844=>'L', +2845=>'L', +2846=>'L', +2847=>'L', +2848=>'L', +2849=>'L', +2850=>'L', +2851=>'L', +2852=>'L', +2853=>'L', +2854=>'L', +2855=>'L', +2856=>'L', +2858=>'L', +2859=>'L', +2860=>'L', +2861=>'L', +2862=>'L', +2863=>'L', +2864=>'L', +2866=>'L', +2867=>'L', +2869=>'L', +2870=>'L', +2871=>'L', +2872=>'L', +2873=>'L', +2876=>'NSM', +2877=>'L', +2878=>'L', +2879=>'NSM', +2880=>'L', +2881=>'NSM', +2882=>'NSM', +2883=>'NSM', +2887=>'L', +2888=>'L', +2891=>'L', +2892=>'L', +2893=>'NSM', +2902=>'NSM', +2903=>'L', +2908=>'L', +2909=>'L', +2911=>'L', +2912=>'L', +2913=>'L', +2918=>'L', +2919=>'L', +2920=>'L', +2921=>'L', +2922=>'L', +2923=>'L', +2924=>'L', +2925=>'L', +2926=>'L', +2927=>'L', +2928=>'L', +2929=>'L', +2946=>'NSM', +2947=>'L', +2949=>'L', +2950=>'L', +2951=>'L', +2952=>'L', +2953=>'L', +2954=>'L', +2958=>'L', +2959=>'L', +2960=>'L', +2962=>'L', +2963=>'L', +2964=>'L', +2965=>'L', +2969=>'L', +2970=>'L', +2972=>'L', +2974=>'L', +2975=>'L', +2979=>'L', +2980=>'L', +2984=>'L', +2985=>'L', +2986=>'L', +2990=>'L', +2991=>'L', +2992=>'L', +2993=>'L', +2994=>'L', +2995=>'L', +2996=>'L', +2997=>'L', +2998=>'L', +2999=>'L', +3000=>'L', +3001=>'L', +3006=>'L', +3007=>'L', +3008=>'NSM', +3009=>'L', +3010=>'L', +3014=>'L', +3015=>'L', +3016=>'L', +3018=>'L', +3019=>'L', +3020=>'L', +3021=>'NSM', +3031=>'L', +3046=>'L', +3047=>'L', +3048=>'L', +3049=>'L', +3050=>'L', +3051=>'L', +3052=>'L', +3053=>'L', +3054=>'L', +3055=>'L', +3056=>'L', +3057=>'L', +3058=>'L', +3059=>'ON', +3060=>'ON', +3061=>'ON', +3062=>'ON', +3063=>'ON', +3064=>'ON', +3065=>'ET', +3066=>'ON', +3073=>'L', +3074=>'L', +3075=>'L', +3077=>'L', +3078=>'L', +3079=>'L', +3080=>'L', +3081=>'L', +3082=>'L', +3083=>'L', +3084=>'L', +3086=>'L', +3087=>'L', +3088=>'L', +3090=>'L', +3091=>'L', +3092=>'L', +3093=>'L', +3094=>'L', +3095=>'L', +3096=>'L', +3097=>'L', +3098=>'L', +3099=>'L', +3100=>'L', +3101=>'L', +3102=>'L', +3103=>'L', +3104=>'L', +3105=>'L', +3106=>'L', +3107=>'L', +3108=>'L', +3109=>'L', +3110=>'L', +3111=>'L', +3112=>'L', +3114=>'L', +3115=>'L', +3116=>'L', +3117=>'L', +3118=>'L', +3119=>'L', +3120=>'L', +3121=>'L', +3122=>'L', +3123=>'L', +3125=>'L', +3126=>'L', +3127=>'L', +3128=>'L', +3129=>'L', +3134=>'NSM', +3135=>'NSM', +3136=>'NSM', +3137=>'L', +3138=>'L', +3139=>'L', +3140=>'L', +3142=>'NSM', +3143=>'NSM', +3144=>'NSM', +3146=>'NSM', +3147=>'NSM', +3148=>'NSM', +3149=>'NSM', +3157=>'NSM', +3158=>'NSM', +3168=>'L', +3169=>'L', +3174=>'L', +3175=>'L', +3176=>'L', +3177=>'L', +3178=>'L', +3179=>'L', +3180=>'L', +3181=>'L', +3182=>'L', +3183=>'L', +3202=>'L', +3203=>'L', +3205=>'L', +3206=>'L', +3207=>'L', +3208=>'L', +3209=>'L', +3210=>'L', +3211=>'L', +3212=>'L', +3214=>'L', +3215=>'L', +3216=>'L', +3218=>'L', +3219=>'L', +3220=>'L', +3221=>'L', +3222=>'L', +3223=>'L', +3224=>'L', +3225=>'L', +3226=>'L', +3227=>'L', +3228=>'L', +3229=>'L', +3230=>'L', +3231=>'L', +3232=>'L', +3233=>'L', +3234=>'L', +3235=>'L', +3236=>'L', +3237=>'L', +3238=>'L', +3239=>'L', +3240=>'L', +3242=>'L', +3243=>'L', +3244=>'L', +3245=>'L', +3246=>'L', +3247=>'L', +3248=>'L', +3249=>'L', +3250=>'L', +3251=>'L', +3253=>'L', +3254=>'L', +3255=>'L', +3256=>'L', +3257=>'L', +3260=>'NSM', +3261=>'L', +3262=>'L', +3263=>'L', +3264=>'L', +3265=>'L', +3266=>'L', +3267=>'L', +3268=>'L', +3270=>'L', +3271=>'L', +3272=>'L', +3274=>'L', +3275=>'L', +3276=>'NSM', +3277=>'NSM', +3285=>'L', +3286=>'L', +3294=>'L', +3296=>'L', +3297=>'L', +3298=>'NSM', +3299=>'NSM', +3302=>'L', +3303=>'L', +3304=>'L', +3305=>'L', +3306=>'L', +3307=>'L', +3308=>'L', +3309=>'L', +3310=>'L', +3311=>'L', +3313=>'ON', +3314=>'ON', +3330=>'L', +3331=>'L', +3333=>'L', +3334=>'L', +3335=>'L', +3336=>'L', +3337=>'L', +3338=>'L', +3339=>'L', +3340=>'L', +3342=>'L', +3343=>'L', +3344=>'L', +3346=>'L', +3347=>'L', +3348=>'L', +3349=>'L', +3350=>'L', +3351=>'L', +3352=>'L', +3353=>'L', +3354=>'L', +3355=>'L', +3356=>'L', +3357=>'L', +3358=>'L', +3359=>'L', +3360=>'L', +3361=>'L', +3362=>'L', +3363=>'L', +3364=>'L', +3365=>'L', +3366=>'L', +3367=>'L', +3368=>'L', +3370=>'L', +3371=>'L', +3372=>'L', +3373=>'L', +3374=>'L', +3375=>'L', +3376=>'L', +3377=>'L', +3378=>'L', +3379=>'L', +3380=>'L', +3381=>'L', +3382=>'L', +3383=>'L', +3384=>'L', +3385=>'L', +3390=>'L', +3391=>'L', +3392=>'L', +3393=>'NSM', +3394=>'NSM', +3395=>'NSM', +3398=>'L', +3399=>'L', +3400=>'L', +3402=>'L', +3403=>'L', +3404=>'L', +3405=>'NSM', +3415=>'L', +3424=>'L', +3425=>'L', +3430=>'L', +3431=>'L', +3432=>'L', +3433=>'L', +3434=>'L', +3435=>'L', +3436=>'L', +3437=>'L', +3438=>'L', +3439=>'L', +3458=>'L', +3459=>'L', +3461=>'L', +3462=>'L', +3463=>'L', +3464=>'L', +3465=>'L', +3466=>'L', +3467=>'L', +3468=>'L', +3469=>'L', +3470=>'L', +3471=>'L', +3472=>'L', +3473=>'L', +3474=>'L', +3475=>'L', +3476=>'L', +3477=>'L', +3478=>'L', +3482=>'L', +3483=>'L', +3484=>'L', +3485=>'L', +3486=>'L', +3487=>'L', +3488=>'L', +3489=>'L', +3490=>'L', +3491=>'L', +3492=>'L', +3493=>'L', +3494=>'L', +3495=>'L', +3496=>'L', +3497=>'L', +3498=>'L', +3499=>'L', +3500=>'L', +3501=>'L', +3502=>'L', +3503=>'L', +3504=>'L', +3505=>'L', +3507=>'L', +3508=>'L', +3509=>'L', +3510=>'L', +3511=>'L', +3512=>'L', +3513=>'L', +3514=>'L', +3515=>'L', +3517=>'L', +3520=>'L', +3521=>'L', +3522=>'L', +3523=>'L', +3524=>'L', +3525=>'L', +3526=>'L', +3530=>'NSM', +3535=>'L', +3536=>'L', +3537=>'L', +3538=>'NSM', +3539=>'NSM', +3540=>'NSM', +3542=>'NSM', +3544=>'L', +3545=>'L', +3546=>'L', +3547=>'L', +3548=>'L', +3549=>'L', +3550=>'L', +3551=>'L', +3570=>'L', +3571=>'L', +3572=>'L', +3585=>'L', +3586=>'L', +3587=>'L', +3588=>'L', +3589=>'L', +3590=>'L', +3591=>'L', +3592=>'L', +3593=>'L', +3594=>'L', +3595=>'L', +3596=>'L', +3597=>'L', +3598=>'L', +3599=>'L', +3600=>'L', +3601=>'L', +3602=>'L', +3603=>'L', +3604=>'L', +3605=>'L', +3606=>'L', +3607=>'L', +3608=>'L', +3609=>'L', +3610=>'L', +3611=>'L', +3612=>'L', +3613=>'L', +3614=>'L', +3615=>'L', +3616=>'L', +3617=>'L', +3618=>'L', +3619=>'L', +3620=>'L', +3621=>'L', +3622=>'L', +3623=>'L', +3624=>'L', +3625=>'L', +3626=>'L', +3627=>'L', +3628=>'L', +3629=>'L', +3630=>'L', +3631=>'L', +3632=>'L', +3633=>'NSM', +3634=>'L', +3635=>'L', +3636=>'NSM', +3637=>'NSM', +3638=>'NSM', +3639=>'NSM', +3640=>'NSM', +3641=>'NSM', +3642=>'NSM', +3647=>'ET', +3648=>'L', +3649=>'L', +3650=>'L', +3651=>'L', +3652=>'L', +3653=>'L', +3654=>'L', +3655=>'NSM', +3656=>'NSM', +3657=>'NSM', +3658=>'NSM', +3659=>'NSM', +3660=>'NSM', +3661=>'NSM', +3662=>'NSM', +3663=>'L', +3664=>'L', +3665=>'L', +3666=>'L', +3667=>'L', +3668=>'L', +3669=>'L', +3670=>'L', +3671=>'L', +3672=>'L', +3673=>'L', +3674=>'L', +3675=>'L', +3713=>'L', +3714=>'L', +3716=>'L', +3719=>'L', +3720=>'L', +3722=>'L', +3725=>'L', +3732=>'L', +3733=>'L', +3734=>'L', +3735=>'L', +3737=>'L', +3738=>'L', +3739=>'L', +3740=>'L', +3741=>'L', +3742=>'L', +3743=>'L', +3745=>'L', +3746=>'L', +3747=>'L', +3749=>'L', +3751=>'L', +3754=>'L', +3755=>'L', +3757=>'L', +3758=>'L', +3759=>'L', +3760=>'L', +3761=>'NSM', +3762=>'L', +3763=>'L', +3764=>'NSM', +3765=>'NSM', +3766=>'NSM', +3767=>'NSM', +3768=>'NSM', +3769=>'NSM', +3771=>'NSM', +3772=>'NSM', +3773=>'L', +3776=>'L', +3777=>'L', +3778=>'L', +3779=>'L', +3780=>'L', +3782=>'L', +3784=>'NSM', +3785=>'NSM', +3786=>'NSM', +3787=>'NSM', +3788=>'NSM', +3789=>'NSM', +3792=>'L', +3793=>'L', +3794=>'L', +3795=>'L', +3796=>'L', +3797=>'L', +3798=>'L', +3799=>'L', +3800=>'L', +3801=>'L', +3804=>'L', +3805=>'L', +3840=>'L', +3841=>'L', +3842=>'L', +3843=>'L', +3844=>'L', +3845=>'L', +3846=>'L', +3847=>'L', +3848=>'L', +3849=>'L', +3850=>'L', +3851=>'L', +3852=>'L', +3853=>'L', +3854=>'L', +3855=>'L', +3856=>'L', +3857=>'L', +3858=>'L', +3859=>'L', +3860=>'L', +3861=>'L', +3862=>'L', +3863=>'L', +3864=>'NSM', +3865=>'NSM', +3866=>'L', +3867=>'L', +3868=>'L', +3869=>'L', +3870=>'L', +3871=>'L', +3872=>'L', +3873=>'L', +3874=>'L', +3875=>'L', +3876=>'L', +3877=>'L', +3878=>'L', +3879=>'L', +3880=>'L', +3881=>'L', +3882=>'L', +3883=>'L', +3884=>'L', +3885=>'L', +3886=>'L', +3887=>'L', +3888=>'L', +3889=>'L', +3890=>'L', +3891=>'L', +3892=>'L', +3893=>'NSM', +3894=>'L', +3895=>'NSM', +3896=>'L', +3897=>'NSM', +3898=>'ON', +3899=>'ON', +3900=>'ON', +3901=>'ON', +3902=>'L', +3903=>'L', +3904=>'L', +3905=>'L', +3906=>'L', +3907=>'L', +3908=>'L', +3909=>'L', +3910=>'L', +3911=>'L', +3913=>'L', +3914=>'L', +3915=>'L', +3916=>'L', +3917=>'L', +3918=>'L', +3919=>'L', +3920=>'L', +3921=>'L', +3922=>'L', +3923=>'L', +3924=>'L', +3925=>'L', +3926=>'L', +3927=>'L', +3928=>'L', +3929=>'L', +3930=>'L', +3931=>'L', +3932=>'L', +3933=>'L', +3934=>'L', +3935=>'L', +3936=>'L', +3937=>'L', +3938=>'L', +3939=>'L', +3940=>'L', +3941=>'L', +3942=>'L', +3943=>'L', +3944=>'L', +3945=>'L', +3946=>'L', +3953=>'NSM', +3954=>'NSM', +3955=>'NSM', +3956=>'NSM', +3957=>'NSM', +3958=>'NSM', +3959=>'NSM', +3960=>'NSM', +3961=>'NSM', +3962=>'NSM', +3963=>'NSM', +3964=>'NSM', +3965=>'NSM', +3966=>'NSM', +3967=>'L', +3968=>'NSM', +3969=>'NSM', +3970=>'NSM', +3971=>'NSM', +3972=>'NSM', +3973=>'L', +3974=>'NSM', +3975=>'NSM', +3976=>'L', +3977=>'L', +3978=>'L', +3979=>'L', +3984=>'NSM', +3985=>'NSM', +3986=>'NSM', +3987=>'NSM', +3988=>'NSM', +3989=>'NSM', +3990=>'NSM', +3991=>'NSM', +3993=>'NSM', +3994=>'NSM', +3995=>'NSM', +3996=>'NSM', +3997=>'NSM', +3998=>'NSM', +3999=>'NSM', +4000=>'NSM', +4001=>'NSM', +4002=>'NSM', +4003=>'NSM', +4004=>'NSM', +4005=>'NSM', +4006=>'NSM', +4007=>'NSM', +4008=>'NSM', +4009=>'NSM', +4010=>'NSM', +4011=>'NSM', +4012=>'NSM', +4013=>'NSM', +4014=>'NSM', +4015=>'NSM', +4016=>'NSM', +4017=>'NSM', +4018=>'NSM', +4019=>'NSM', +4020=>'NSM', +4021=>'NSM', +4022=>'NSM', +4023=>'NSM', +4024=>'NSM', +4025=>'NSM', +4026=>'NSM', +4027=>'NSM', +4028=>'NSM', +4030=>'L', +4031=>'L', +4032=>'L', +4033=>'L', +4034=>'L', +4035=>'L', +4036=>'L', +4037=>'L', +4038=>'NSM', +4039=>'L', +4040=>'L', +4041=>'L', +4042=>'L', +4043=>'L', +4044=>'L', +4047=>'L', +4048=>'L', +4049=>'L', +4096=>'L', +4097=>'L', +4098=>'L', +4099=>'L', +4100=>'L', +4101=>'L', +4102=>'L', +4103=>'L', +4104=>'L', +4105=>'L', +4106=>'L', +4107=>'L', +4108=>'L', +4109=>'L', +4110=>'L', +4111=>'L', +4112=>'L', +4113=>'L', +4114=>'L', +4115=>'L', +4116=>'L', +4117=>'L', +4118=>'L', +4119=>'L', +4120=>'L', +4121=>'L', +4122=>'L', +4123=>'L', +4124=>'L', +4125=>'L', +4126=>'L', +4127=>'L', +4128=>'L', +4129=>'L', +4131=>'L', +4132=>'L', +4133=>'L', +4134=>'L', +4135=>'L', +4137=>'L', +4138=>'L', +4140=>'L', +4141=>'NSM', +4142=>'NSM', +4143=>'NSM', +4144=>'NSM', +4145=>'L', +4146=>'NSM', +4150=>'NSM', +4151=>'NSM', +4152=>'L', +4153=>'NSM', +4160=>'L', +4161=>'L', +4162=>'L', +4163=>'L', +4164=>'L', +4165=>'L', +4166=>'L', +4167=>'L', +4168=>'L', +4169=>'L', +4170=>'L', +4171=>'L', +4172=>'L', +4173=>'L', +4174=>'L', +4175=>'L', +4176=>'L', +4177=>'L', +4178=>'L', +4179=>'L', +4180=>'L', +4181=>'L', +4182=>'L', +4183=>'L', +4184=>'NSM', +4185=>'NSM', +4256=>'L', +4257=>'L', +4258=>'L', +4259=>'L', +4260=>'L', +4261=>'L', +4262=>'L', +4263=>'L', +4264=>'L', +4265=>'L', +4266=>'L', +4267=>'L', +4268=>'L', +4269=>'L', +4270=>'L', +4271=>'L', +4272=>'L', +4273=>'L', +4274=>'L', +4275=>'L', +4276=>'L', +4277=>'L', +4278=>'L', +4279=>'L', +4280=>'L', +4281=>'L', +4282=>'L', +4283=>'L', +4284=>'L', +4285=>'L', +4286=>'L', +4287=>'L', +4288=>'L', +4289=>'L', +4290=>'L', +4291=>'L', +4292=>'L', +4293=>'L', +4304=>'L', +4305=>'L', +4306=>'L', +4307=>'L', +4308=>'L', +4309=>'L', +4310=>'L', +4311=>'L', +4312=>'L', +4313=>'L', +4314=>'L', +4315=>'L', +4316=>'L', +4317=>'L', +4318=>'L', +4319=>'L', +4320=>'L', +4321=>'L', +4322=>'L', +4323=>'L', +4324=>'L', +4325=>'L', +4326=>'L', +4327=>'L', +4328=>'L', +4329=>'L', +4330=>'L', +4331=>'L', +4332=>'L', +4333=>'L', +4334=>'L', +4335=>'L', +4336=>'L', +4337=>'L', +4338=>'L', +4339=>'L', +4340=>'L', +4341=>'L', +4342=>'L', +4343=>'L', +4344=>'L', +4345=>'L', +4346=>'L', +4347=>'L', +4348=>'L', +4352=>'L', +4353=>'L', +4354=>'L', +4355=>'L', +4356=>'L', +4357=>'L', +4358=>'L', +4359=>'L', +4360=>'L', +4361=>'L', +4362=>'L', +4363=>'L', +4364=>'L', +4365=>'L', +4366=>'L', +4367=>'L', +4368=>'L', +4369=>'L', +4370=>'L', +4371=>'L', +4372=>'L', +4373=>'L', +4374=>'L', +4375=>'L', +4376=>'L', +4377=>'L', +4378=>'L', +4379=>'L', +4380=>'L', +4381=>'L', +4382=>'L', +4383=>'L', +4384=>'L', +4385=>'L', +4386=>'L', +4387=>'L', +4388=>'L', +4389=>'L', +4390=>'L', +4391=>'L', +4392=>'L', +4393=>'L', +4394=>'L', +4395=>'L', +4396=>'L', +4397=>'L', +4398=>'L', +4399=>'L', +4400=>'L', +4401=>'L', +4402=>'L', +4403=>'L', +4404=>'L', +4405=>'L', +4406=>'L', +4407=>'L', +4408=>'L', +4409=>'L', +4410=>'L', +4411=>'L', +4412=>'L', +4413=>'L', +4414=>'L', +4415=>'L', +4416=>'L', +4417=>'L', +4418=>'L', +4419=>'L', +4420=>'L', +4421=>'L', +4422=>'L', +4423=>'L', +4424=>'L', +4425=>'L', +4426=>'L', +4427=>'L', +4428=>'L', +4429=>'L', +4430=>'L', +4431=>'L', +4432=>'L', +4433=>'L', +4434=>'L', +4435=>'L', +4436=>'L', +4437=>'L', +4438=>'L', +4439=>'L', +4440=>'L', +4441=>'L', +4447=>'L', +4448=>'L', +4449=>'L', +4450=>'L', +4451=>'L', +4452=>'L', +4453=>'L', +4454=>'L', +4455=>'L', +4456=>'L', +4457=>'L', +4458=>'L', +4459=>'L', +4460=>'L', +4461=>'L', +4462=>'L', +4463=>'L', +4464=>'L', +4465=>'L', +4466=>'L', +4467=>'L', +4468=>'L', +4469=>'L', +4470=>'L', +4471=>'L', +4472=>'L', +4473=>'L', +4474=>'L', +4475=>'L', +4476=>'L', +4477=>'L', +4478=>'L', +4479=>'L', +4480=>'L', +4481=>'L', +4482=>'L', +4483=>'L', +4484=>'L', +4485=>'L', +4486=>'L', +4487=>'L', +4488=>'L', +4489=>'L', +4490=>'L', +4491=>'L', +4492=>'L', +4493=>'L', +4494=>'L', +4495=>'L', +4496=>'L', +4497=>'L', +4498=>'L', +4499=>'L', +4500=>'L', +4501=>'L', +4502=>'L', +4503=>'L', +4504=>'L', +4505=>'L', +4506=>'L', +4507=>'L', +4508=>'L', +4509=>'L', +4510=>'L', +4511=>'L', +4512=>'L', +4513=>'L', +4514=>'L', +4520=>'L', +4521=>'L', +4522=>'L', +4523=>'L', +4524=>'L', +4525=>'L', +4526=>'L', +4527=>'L', +4528=>'L', +4529=>'L', +4530=>'L', +4531=>'L', +4532=>'L', +4533=>'L', +4534=>'L', +4535=>'L', +4536=>'L', +4537=>'L', +4538=>'L', +4539=>'L', +4540=>'L', +4541=>'L', +4542=>'L', +4543=>'L', +4544=>'L', +4545=>'L', +4546=>'L', +4547=>'L', +4548=>'L', +4549=>'L', +4550=>'L', +4551=>'L', +4552=>'L', +4553=>'L', +4554=>'L', +4555=>'L', +4556=>'L', +4557=>'L', +4558=>'L', +4559=>'L', +4560=>'L', +4561=>'L', +4562=>'L', +4563=>'L', +4564=>'L', +4565=>'L', +4566=>'L', +4567=>'L', +4568=>'L', +4569=>'L', +4570=>'L', +4571=>'L', +4572=>'L', +4573=>'L', +4574=>'L', +4575=>'L', +4576=>'L', +4577=>'L', +4578=>'L', +4579=>'L', +4580=>'L', +4581=>'L', +4582=>'L', +4583=>'L', +4584=>'L', +4585=>'L', +4586=>'L', +4587=>'L', +4588=>'L', +4589=>'L', +4590=>'L', +4591=>'L', +4592=>'L', +4593=>'L', +4594=>'L', +4595=>'L', +4596=>'L', +4597=>'L', +4598=>'L', +4599=>'L', +4600=>'L', +4601=>'L', +4608=>'L', +4609=>'L', +4610=>'L', +4611=>'L', +4612=>'L', +4613=>'L', +4614=>'L', +4615=>'L', +4616=>'L', +4617=>'L', +4618=>'L', +4619=>'L', +4620=>'L', +4621=>'L', +4622=>'L', +4623=>'L', +4624=>'L', +4625=>'L', +4626=>'L', +4627=>'L', +4628=>'L', +4629=>'L', +4630=>'L', +4631=>'L', +4632=>'L', +4633=>'L', +4634=>'L', +4635=>'L', +4636=>'L', +4637=>'L', +4638=>'L', +4639=>'L', +4640=>'L', +4641=>'L', +4642=>'L', +4643=>'L', +4644=>'L', +4645=>'L', +4646=>'L', +4647=>'L', +4648=>'L', +4649=>'L', +4650=>'L', +4651=>'L', +4652=>'L', +4653=>'L', +4654=>'L', +4655=>'L', +4656=>'L', +4657=>'L', +4658=>'L', +4659=>'L', +4660=>'L', +4661=>'L', +4662=>'L', +4663=>'L', +4664=>'L', +4665=>'L', +4666=>'L', +4667=>'L', +4668=>'L', +4669=>'L', +4670=>'L', +4671=>'L', +4672=>'L', +4673=>'L', +4674=>'L', +4675=>'L', +4676=>'L', +4677=>'L', +4678=>'L', +4679=>'L', +4680=>'L', +4682=>'L', +4683=>'L', +4684=>'L', +4685=>'L', +4688=>'L', +4689=>'L', +4690=>'L', +4691=>'L', +4692=>'L', +4693=>'L', +4694=>'L', +4696=>'L', +4698=>'L', +4699=>'L', +4700=>'L', +4701=>'L', +4704=>'L', +4705=>'L', +4706=>'L', +4707=>'L', +4708=>'L', +4709=>'L', +4710=>'L', +4711=>'L', +4712=>'L', +4713=>'L', +4714=>'L', +4715=>'L', +4716=>'L', +4717=>'L', +4718=>'L', +4719=>'L', +4720=>'L', +4721=>'L', +4722=>'L', +4723=>'L', +4724=>'L', +4725=>'L', +4726=>'L', +4727=>'L', +4728=>'L', +4729=>'L', +4730=>'L', +4731=>'L', +4732=>'L', +4733=>'L', +4734=>'L', +4735=>'L', +4736=>'L', +4737=>'L', +4738=>'L', +4739=>'L', +4740=>'L', +4741=>'L', +4742=>'L', +4743=>'L', +4744=>'L', +4746=>'L', +4747=>'L', +4748=>'L', +4749=>'L', +4752=>'L', +4753=>'L', +4754=>'L', +4755=>'L', +4756=>'L', +4757=>'L', +4758=>'L', +4759=>'L', +4760=>'L', +4761=>'L', +4762=>'L', +4763=>'L', +4764=>'L', +4765=>'L', +4766=>'L', +4767=>'L', +4768=>'L', +4769=>'L', +4770=>'L', +4771=>'L', +4772=>'L', +4773=>'L', +4774=>'L', +4775=>'L', +4776=>'L', +4777=>'L', +4778=>'L', +4779=>'L', +4780=>'L', +4781=>'L', +4782=>'L', +4783=>'L', +4784=>'L', +4786=>'L', +4787=>'L', +4788=>'L', +4789=>'L', +4792=>'L', +4793=>'L', +4794=>'L', +4795=>'L', +4796=>'L', +4797=>'L', +4798=>'L', +4800=>'L', +4802=>'L', +4803=>'L', +4804=>'L', +4805=>'L', +4808=>'L', +4809=>'L', +4810=>'L', +4811=>'L', +4812=>'L', +4813=>'L', +4814=>'L', +4815=>'L', +4816=>'L', +4817=>'L', +4818=>'L', +4819=>'L', +4820=>'L', +4821=>'L', +4822=>'L', +4824=>'L', +4825=>'L', +4826=>'L', +4827=>'L', +4828=>'L', +4829=>'L', +4830=>'L', +4831=>'L', +4832=>'L', +4833=>'L', +4834=>'L', +4835=>'L', +4836=>'L', +4837=>'L', +4838=>'L', +4839=>'L', +4840=>'L', +4841=>'L', +4842=>'L', +4843=>'L', +4844=>'L', +4845=>'L', +4846=>'L', +4847=>'L', +4848=>'L', +4849=>'L', +4850=>'L', +4851=>'L', +4852=>'L', +4853=>'L', +4854=>'L', +4855=>'L', +4856=>'L', +4857=>'L', +4858=>'L', +4859=>'L', +4860=>'L', +4861=>'L', +4862=>'L', +4863=>'L', +4864=>'L', +4865=>'L', +4866=>'L', +4867=>'L', +4868=>'L', +4869=>'L', +4870=>'L', +4871=>'L', +4872=>'L', +4873=>'L', +4874=>'L', +4875=>'L', +4876=>'L', +4877=>'L', +4878=>'L', +4879=>'L', +4880=>'L', +4882=>'L', +4883=>'L', +4884=>'L', +4885=>'L', +4888=>'L', +4889=>'L', +4890=>'L', +4891=>'L', +4892=>'L', +4893=>'L', +4894=>'L', +4895=>'L', +4896=>'L', +4897=>'L', +4898=>'L', +4899=>'L', +4900=>'L', +4901=>'L', +4902=>'L', +4903=>'L', +4904=>'L', +4905=>'L', +4906=>'L', +4907=>'L', +4908=>'L', +4909=>'L', +4910=>'L', +4911=>'L', +4912=>'L', +4913=>'L', +4914=>'L', +4915=>'L', +4916=>'L', +4917=>'L', +4918=>'L', +4919=>'L', +4920=>'L', +4921=>'L', +4922=>'L', +4923=>'L', +4924=>'L', +4925=>'L', +4926=>'L', +4927=>'L', +4928=>'L', +4929=>'L', +4930=>'L', +4931=>'L', +4932=>'L', +4933=>'L', +4934=>'L', +4935=>'L', +4936=>'L', +4937=>'L', +4938=>'L', +4939=>'L', +4940=>'L', +4941=>'L', +4942=>'L', +4943=>'L', +4944=>'L', +4945=>'L', +4946=>'L', +4947=>'L', +4948=>'L', +4949=>'L', +4950=>'L', +4951=>'L', +4952=>'L', +4953=>'L', +4954=>'L', +4959=>'NSM', +4960=>'L', +4961=>'L', +4962=>'L', +4963=>'L', +4964=>'L', +4965=>'L', +4966=>'L', +4967=>'L', +4968=>'L', +4969=>'L', +4970=>'L', +4971=>'L', +4972=>'L', +4973=>'L', +4974=>'L', +4975=>'L', +4976=>'L', +4977=>'L', +4978=>'L', +4979=>'L', +4980=>'L', +4981=>'L', +4982=>'L', +4983=>'L', +4984=>'L', +4985=>'L', +4986=>'L', +4987=>'L', +4988=>'L', +4992=>'L', +4993=>'L', +4994=>'L', +4995=>'L', +4996=>'L', +4997=>'L', +4998=>'L', +4999=>'L', +5000=>'L', +5001=>'L', +5002=>'L', +5003=>'L', +5004=>'L', +5005=>'L', +5006=>'L', +5007=>'L', +5008=>'ON', +5009=>'ON', +5010=>'ON', +5011=>'ON', +5012=>'ON', +5013=>'ON', +5014=>'ON', +5015=>'ON', +5016=>'ON', +5017=>'ON', +5024=>'L', +5025=>'L', +5026=>'L', +5027=>'L', +5028=>'L', +5029=>'L', +5030=>'L', +5031=>'L', +5032=>'L', +5033=>'L', +5034=>'L', +5035=>'L', +5036=>'L', +5037=>'L', +5038=>'L', +5039=>'L', +5040=>'L', +5041=>'L', +5042=>'L', +5043=>'L', +5044=>'L', +5045=>'L', +5046=>'L', +5047=>'L', +5048=>'L', +5049=>'L', +5050=>'L', +5051=>'L', +5052=>'L', +5053=>'L', +5054=>'L', +5055=>'L', +5056=>'L', +5057=>'L', +5058=>'L', +5059=>'L', +5060=>'L', +5061=>'L', +5062=>'L', +5063=>'L', +5064=>'L', +5065=>'L', +5066=>'L', +5067=>'L', +5068=>'L', +5069=>'L', +5070=>'L', +5071=>'L', +5072=>'L', +5073=>'L', +5074=>'L', +5075=>'L', +5076=>'L', +5077=>'L', +5078=>'L', +5079=>'L', +5080=>'L', +5081=>'L', +5082=>'L', +5083=>'L', +5084=>'L', +5085=>'L', +5086=>'L', +5087=>'L', +5088=>'L', +5089=>'L', +5090=>'L', +5091=>'L', +5092=>'L', +5093=>'L', +5094=>'L', +5095=>'L', +5096=>'L', +5097=>'L', +5098=>'L', +5099=>'L', +5100=>'L', +5101=>'L', +5102=>'L', +5103=>'L', +5104=>'L', +5105=>'L', +5106=>'L', +5107=>'L', +5108=>'L', +5121=>'L', +5122=>'L', +5123=>'L', +5124=>'L', +5125=>'L', +5126=>'L', +5127=>'L', +5128=>'L', +5129=>'L', +5130=>'L', +5131=>'L', +5132=>'L', +5133=>'L', +5134=>'L', +5135=>'L', +5136=>'L', +5137=>'L', +5138=>'L', +5139=>'L', +5140=>'L', +5141=>'L', +5142=>'L', +5143=>'L', +5144=>'L', +5145=>'L', +5146=>'L', +5147=>'L', +5148=>'L', +5149=>'L', +5150=>'L', +5151=>'L', +5152=>'L', +5153=>'L', +5154=>'L', +5155=>'L', +5156=>'L', +5157=>'L', +5158=>'L', +5159=>'L', +5160=>'L', +5161=>'L', +5162=>'L', +5163=>'L', +5164=>'L', +5165=>'L', +5166=>'L', +5167=>'L', +5168=>'L', +5169=>'L', +5170=>'L', +5171=>'L', +5172=>'L', +5173=>'L', +5174=>'L', +5175=>'L', +5176=>'L', +5177=>'L', +5178=>'L', +5179=>'L', +5180=>'L', +5181=>'L', +5182=>'L', +5183=>'L', +5184=>'L', +5185=>'L', +5186=>'L', +5187=>'L', +5188=>'L', +5189=>'L', +5190=>'L', +5191=>'L', +5192=>'L', +5193=>'L', +5194=>'L', +5195=>'L', +5196=>'L', +5197=>'L', +5198=>'L', +5199=>'L', +5200=>'L', +5201=>'L', +5202=>'L', +5203=>'L', +5204=>'L', +5205=>'L', +5206=>'L', +5207=>'L', +5208=>'L', +5209=>'L', +5210=>'L', +5211=>'L', +5212=>'L', +5213=>'L', +5214=>'L', +5215=>'L', +5216=>'L', +5217=>'L', +5218=>'L', +5219=>'L', +5220=>'L', +5221=>'L', +5222=>'L', +5223=>'L', +5224=>'L', +5225=>'L', +5226=>'L', +5227=>'L', +5228=>'L', +5229=>'L', +5230=>'L', +5231=>'L', +5232=>'L', +5233=>'L', +5234=>'L', +5235=>'L', +5236=>'L', +5237=>'L', +5238=>'L', +5239=>'L', +5240=>'L', +5241=>'L', +5242=>'L', +5243=>'L', +5244=>'L', +5245=>'L', +5246=>'L', +5247=>'L', +5248=>'L', +5249=>'L', +5250=>'L', +5251=>'L', +5252=>'L', +5253=>'L', +5254=>'L', +5255=>'L', +5256=>'L', +5257=>'L', +5258=>'L', +5259=>'L', +5260=>'L', +5261=>'L', +5262=>'L', +5263=>'L', +5264=>'L', +5265=>'L', +5266=>'L', +5267=>'L', +5268=>'L', +5269=>'L', +5270=>'L', +5271=>'L', +5272=>'L', +5273=>'L', +5274=>'L', +5275=>'L', +5276=>'L', +5277=>'L', +5278=>'L', +5279=>'L', +5280=>'L', +5281=>'L', +5282=>'L', +5283=>'L', +5284=>'L', +5285=>'L', +5286=>'L', +5287=>'L', +5288=>'L', +5289=>'L', +5290=>'L', +5291=>'L', +5292=>'L', +5293=>'L', +5294=>'L', +5295=>'L', +5296=>'L', +5297=>'L', +5298=>'L', +5299=>'L', +5300=>'L', +5301=>'L', +5302=>'L', +5303=>'L', +5304=>'L', +5305=>'L', +5306=>'L', +5307=>'L', +5308=>'L', +5309=>'L', +5310=>'L', +5311=>'L', +5312=>'L', +5313=>'L', +5314=>'L', +5315=>'L', +5316=>'L', +5317=>'L', +5318=>'L', +5319=>'L', +5320=>'L', +5321=>'L', +5322=>'L', +5323=>'L', +5324=>'L', +5325=>'L', +5326=>'L', +5327=>'L', +5328=>'L', +5329=>'L', +5330=>'L', +5331=>'L', +5332=>'L', +5333=>'L', +5334=>'L', +5335=>'L', +5336=>'L', +5337=>'L', +5338=>'L', +5339=>'L', +5340=>'L', +5341=>'L', +5342=>'L', +5343=>'L', +5344=>'L', +5345=>'L', +5346=>'L', +5347=>'L', +5348=>'L', +5349=>'L', +5350=>'L', +5351=>'L', +5352=>'L', +5353=>'L', +5354=>'L', +5355=>'L', +5356=>'L', +5357=>'L', +5358=>'L', +5359=>'L', +5360=>'L', +5361=>'L', +5362=>'L', +5363=>'L', +5364=>'L', +5365=>'L', +5366=>'L', +5367=>'L', +5368=>'L', +5369=>'L', +5370=>'L', +5371=>'L', +5372=>'L', +5373=>'L', +5374=>'L', +5375=>'L', +5376=>'L', +5377=>'L', +5378=>'L', +5379=>'L', +5380=>'L', +5381=>'L', +5382=>'L', +5383=>'L', +5384=>'L', +5385=>'L', +5386=>'L', +5387=>'L', +5388=>'L', +5389=>'L', +5390=>'L', +5391=>'L', +5392=>'L', +5393=>'L', +5394=>'L', +5395=>'L', +5396=>'L', +5397=>'L', +5398=>'L', +5399=>'L', +5400=>'L', +5401=>'L', +5402=>'L', +5403=>'L', +5404=>'L', +5405=>'L', +5406=>'L', +5407=>'L', +5408=>'L', +5409=>'L', +5410=>'L', +5411=>'L', +5412=>'L', +5413=>'L', +5414=>'L', +5415=>'L', +5416=>'L', +5417=>'L', +5418=>'L', +5419=>'L', +5420=>'L', +5421=>'L', +5422=>'L', +5423=>'L', +5424=>'L', +5425=>'L', +5426=>'L', +5427=>'L', +5428=>'L', +5429=>'L', +5430=>'L', +5431=>'L', +5432=>'L', +5433=>'L', +5434=>'L', +5435=>'L', +5436=>'L', +5437=>'L', +5438=>'L', +5439=>'L', +5440=>'L', +5441=>'L', +5442=>'L', +5443=>'L', +5444=>'L', +5445=>'L', +5446=>'L', +5447=>'L', +5448=>'L', +5449=>'L', +5450=>'L', +5451=>'L', +5452=>'L', +5453=>'L', +5454=>'L', +5455=>'L', +5456=>'L', +5457=>'L', +5458=>'L', +5459=>'L', +5460=>'L', +5461=>'L', +5462=>'L', +5463=>'L', +5464=>'L', +5465=>'L', +5466=>'L', +5467=>'L', +5468=>'L', +5469=>'L', +5470=>'L', +5471=>'L', +5472=>'L', +5473=>'L', +5474=>'L', +5475=>'L', +5476=>'L', +5477=>'L', +5478=>'L', +5479=>'L', +5480=>'L', +5481=>'L', +5482=>'L', +5483=>'L', +5484=>'L', +5485=>'L', +5486=>'L', +5487=>'L', +5488=>'L', +5489=>'L', +5490=>'L', +5491=>'L', +5492=>'L', +5493=>'L', +5494=>'L', +5495=>'L', +5496=>'L', +5497=>'L', +5498=>'L', +5499=>'L', +5500=>'L', +5501=>'L', +5502=>'L', +5503=>'L', +5504=>'L', +5505=>'L', +5506=>'L', +5507=>'L', +5508=>'L', +5509=>'L', +5510=>'L', +5511=>'L', +5512=>'L', +5513=>'L', +5514=>'L', +5515=>'L', +5516=>'L', +5517=>'L', +5518=>'L', +5519=>'L', +5520=>'L', +5521=>'L', +5522=>'L', +5523=>'L', +5524=>'L', +5525=>'L', +5526=>'L', +5527=>'L', +5528=>'L', +5529=>'L', +5530=>'L', +5531=>'L', +5532=>'L', +5533=>'L', +5534=>'L', +5535=>'L', +5536=>'L', +5537=>'L', +5538=>'L', +5539=>'L', +5540=>'L', +5541=>'L', +5542=>'L', +5543=>'L', +5544=>'L', +5545=>'L', +5546=>'L', +5547=>'L', +5548=>'L', +5549=>'L', +5550=>'L', +5551=>'L', +5552=>'L', +5553=>'L', +5554=>'L', +5555=>'L', +5556=>'L', +5557=>'L', +5558=>'L', +5559=>'L', +5560=>'L', +5561=>'L', +5562=>'L', +5563=>'L', +5564=>'L', +5565=>'L', +5566=>'L', +5567=>'L', +5568=>'L', +5569=>'L', +5570=>'L', +5571=>'L', +5572=>'L', +5573=>'L', +5574=>'L', +5575=>'L', +5576=>'L', +5577=>'L', +5578=>'L', +5579=>'L', +5580=>'L', +5581=>'L', +5582=>'L', +5583=>'L', +5584=>'L', +5585=>'L', +5586=>'L', +5587=>'L', +5588=>'L', +5589=>'L', +5590=>'L', +5591=>'L', +5592=>'L', +5593=>'L', +5594=>'L', +5595=>'L', +5596=>'L', +5597=>'L', +5598=>'L', +5599=>'L', +5600=>'L', +5601=>'L', +5602=>'L', +5603=>'L', +5604=>'L', +5605=>'L', +5606=>'L', +5607=>'L', +5608=>'L', +5609=>'L', +5610=>'L', +5611=>'L', +5612=>'L', +5613=>'L', +5614=>'L', +5615=>'L', +5616=>'L', +5617=>'L', +5618=>'L', +5619=>'L', +5620=>'L', +5621=>'L', +5622=>'L', +5623=>'L', +5624=>'L', +5625=>'L', +5626=>'L', +5627=>'L', +5628=>'L', +5629=>'L', +5630=>'L', +5631=>'L', +5632=>'L', +5633=>'L', +5634=>'L', +5635=>'L', +5636=>'L', +5637=>'L', +5638=>'L', +5639=>'L', +5640=>'L', +5641=>'L', +5642=>'L', +5643=>'L', +5644=>'L', +5645=>'L', +5646=>'L', +5647=>'L', +5648=>'L', +5649=>'L', +5650=>'L', +5651=>'L', +5652=>'L', +5653=>'L', +5654=>'L', +5655=>'L', +5656=>'L', +5657=>'L', +5658=>'L', +5659=>'L', +5660=>'L', +5661=>'L', +5662=>'L', +5663=>'L', +5664=>'L', +5665=>'L', +5666=>'L', +5667=>'L', +5668=>'L', +5669=>'L', +5670=>'L', +5671=>'L', +5672=>'L', +5673=>'L', +5674=>'L', +5675=>'L', +5676=>'L', +5677=>'L', +5678=>'L', +5679=>'L', +5680=>'L', +5681=>'L', +5682=>'L', +5683=>'L', +5684=>'L', +5685=>'L', +5686=>'L', +5687=>'L', +5688=>'L', +5689=>'L', +5690=>'L', +5691=>'L', +5692=>'L', +5693=>'L', +5694=>'L', +5695=>'L', +5696=>'L', +5697=>'L', +5698=>'L', +5699=>'L', +5700=>'L', +5701=>'L', +5702=>'L', +5703=>'L', +5704=>'L', +5705=>'L', +5706=>'L', +5707=>'L', +5708=>'L', +5709=>'L', +5710=>'L', +5711=>'L', +5712=>'L', +5713=>'L', +5714=>'L', +5715=>'L', +5716=>'L', +5717=>'L', +5718=>'L', +5719=>'L', +5720=>'L', +5721=>'L', +5722=>'L', +5723=>'L', +5724=>'L', +5725=>'L', +5726=>'L', +5727=>'L', +5728=>'L', +5729=>'L', +5730=>'L', +5731=>'L', +5732=>'L', +5733=>'L', +5734=>'L', +5735=>'L', +5736=>'L', +5737=>'L', +5738=>'L', +5739=>'L', +5740=>'L', +5741=>'L', +5742=>'L', +5743=>'L', +5744=>'L', +5745=>'L', +5746=>'L', +5747=>'L', +5748=>'L', +5749=>'L', +5750=>'L', +5760=>'WS', +5761=>'L', +5762=>'L', +5763=>'L', +5764=>'L', +5765=>'L', +5766=>'L', +5767=>'L', +5768=>'L', +5769=>'L', +5770=>'L', +5771=>'L', +5772=>'L', +5773=>'L', +5774=>'L', +5775=>'L', +5776=>'L', +5777=>'L', +5778=>'L', +5779=>'L', +5780=>'L', +5781=>'L', +5782=>'L', +5783=>'L', +5784=>'L', +5785=>'L', +5786=>'L', +5787=>'ON', +5788=>'ON', +5792=>'L', +5793=>'L', +5794=>'L', +5795=>'L', +5796=>'L', +5797=>'L', +5798=>'L', +5799=>'L', +5800=>'L', +5801=>'L', +5802=>'L', +5803=>'L', +5804=>'L', +5805=>'L', +5806=>'L', +5807=>'L', +5808=>'L', +5809=>'L', +5810=>'L', +5811=>'L', +5812=>'L', +5813=>'L', +5814=>'L', +5815=>'L', +5816=>'L', +5817=>'L', +5818=>'L', +5819=>'L', +5820=>'L', +5821=>'L', +5822=>'L', +5823=>'L', +5824=>'L', +5825=>'L', +5826=>'L', +5827=>'L', +5828=>'L', +5829=>'L', +5830=>'L', +5831=>'L', +5832=>'L', +5833=>'L', +5834=>'L', +5835=>'L', +5836=>'L', +5837=>'L', +5838=>'L', +5839=>'L', +5840=>'L', +5841=>'L', +5842=>'L', +5843=>'L', +5844=>'L', +5845=>'L', +5846=>'L', +5847=>'L', +5848=>'L', +5849=>'L', +5850=>'L', +5851=>'L', +5852=>'L', +5853=>'L', +5854=>'L', +5855=>'L', +5856=>'L', +5857=>'L', +5858=>'L', +5859=>'L', +5860=>'L', +5861=>'L', +5862=>'L', +5863=>'L', +5864=>'L', +5865=>'L', +5866=>'L', +5867=>'L', +5868=>'L', +5869=>'L', +5870=>'L', +5871=>'L', +5872=>'L', +5888=>'L', +5889=>'L', +5890=>'L', +5891=>'L', +5892=>'L', +5893=>'L', +5894=>'L', +5895=>'L', +5896=>'L', +5897=>'L', +5898=>'L', +5899=>'L', +5900=>'L', +5902=>'L', +5903=>'L', +5904=>'L', +5905=>'L', +5906=>'NSM', +5907=>'NSM', +5908=>'NSM', +5920=>'L', +5921=>'L', +5922=>'L', +5923=>'L', +5924=>'L', +5925=>'L', +5926=>'L', +5927=>'L', +5928=>'L', +5929=>'L', +5930=>'L', +5931=>'L', +5932=>'L', +5933=>'L', +5934=>'L', +5935=>'L', +5936=>'L', +5937=>'L', +5938=>'NSM', +5939=>'NSM', +5940=>'NSM', +5941=>'L', +5942=>'L', +5952=>'L', +5953=>'L', +5954=>'L', +5955=>'L', +5956=>'L', +5957=>'L', +5958=>'L', +5959=>'L', +5960=>'L', +5961=>'L', +5962=>'L', +5963=>'L', +5964=>'L', +5965=>'L', +5966=>'L', +5967=>'L', +5968=>'L', +5969=>'L', +5970=>'NSM', +5971=>'NSM', +5984=>'L', +5985=>'L', +5986=>'L', +5987=>'L', +5988=>'L', +5989=>'L', +5990=>'L', +5991=>'L', +5992=>'L', +5993=>'L', +5994=>'L', +5995=>'L', +5996=>'L', +5998=>'L', +5999=>'L', +6000=>'L', +6002=>'NSM', +6003=>'NSM', +6016=>'L', +6017=>'L', +6018=>'L', +6019=>'L', +6020=>'L', +6021=>'L', +6022=>'L', +6023=>'L', +6024=>'L', +6025=>'L', +6026=>'L', +6027=>'L', +6028=>'L', +6029=>'L', +6030=>'L', +6031=>'L', +6032=>'L', +6033=>'L', +6034=>'L', +6035=>'L', +6036=>'L', +6037=>'L', +6038=>'L', +6039=>'L', +6040=>'L', +6041=>'L', +6042=>'L', +6043=>'L', +6044=>'L', +6045=>'L', +6046=>'L', +6047=>'L', +6048=>'L', +6049=>'L', +6050=>'L', +6051=>'L', +6052=>'L', +6053=>'L', +6054=>'L', +6055=>'L', +6056=>'L', +6057=>'L', +6058=>'L', +6059=>'L', +6060=>'L', +6061=>'L', +6062=>'L', +6063=>'L', +6064=>'L', +6065=>'L', +6066=>'L', +6067=>'L', +6068=>'L', +6069=>'L', +6070=>'L', +6071=>'NSM', +6072=>'NSM', +6073=>'NSM', +6074=>'NSM', +6075=>'NSM', +6076=>'NSM', +6077=>'NSM', +6078=>'L', +6079=>'L', +6080=>'L', +6081=>'L', +6082=>'L', +6083=>'L', +6084=>'L', +6085=>'L', +6086=>'NSM', +6087=>'L', +6088=>'L', +6089=>'NSM', +6090=>'NSM', +6091=>'NSM', +6092=>'NSM', +6093=>'NSM', +6094=>'NSM', +6095=>'NSM', +6096=>'NSM', +6097=>'NSM', +6098=>'NSM', +6099=>'NSM', +6100=>'L', +6101=>'L', +6102=>'L', +6103=>'L', +6104=>'L', +6105=>'L', +6106=>'L', +6107=>'ET', +6108=>'L', +6109=>'NSM', +6112=>'L', +6113=>'L', +6114=>'L', +6115=>'L', +6116=>'L', +6117=>'L', +6118=>'L', +6119=>'L', +6120=>'L', +6121=>'L', +6128=>'ON', +6129=>'ON', +6130=>'ON', +6131=>'ON', +6132=>'ON', +6133=>'ON', +6134=>'ON', +6135=>'ON', +6136=>'ON', +6137=>'ON', +6144=>'ON', +6145=>'ON', +6146=>'ON', +6147=>'ON', +6148=>'ON', +6149=>'ON', +6150=>'ON', +6151=>'ON', +6152=>'ON', +6153=>'ON', +6154=>'ON', +6155=>'NSM', +6156=>'NSM', +6157=>'NSM', +6158=>'WS', +6160=>'L', +6161=>'L', +6162=>'L', +6163=>'L', +6164=>'L', +6165=>'L', +6166=>'L', +6167=>'L', +6168=>'L', +6169=>'L', +6176=>'L', +6177=>'L', +6178=>'L', +6179=>'L', +6180=>'L', +6181=>'L', +6182=>'L', +6183=>'L', +6184=>'L', +6185=>'L', +6186=>'L', +6187=>'L', +6188=>'L', +6189=>'L', +6190=>'L', +6191=>'L', +6192=>'L', +6193=>'L', +6194=>'L', +6195=>'L', +6196=>'L', +6197=>'L', +6198=>'L', +6199=>'L', +6200=>'L', +6201=>'L', +6202=>'L', +6203=>'L', +6204=>'L', +6205=>'L', +6206=>'L', +6207=>'L', +6208=>'L', +6209=>'L', +6210=>'L', +6211=>'L', +6212=>'L', +6213=>'L', +6214=>'L', +6215=>'L', +6216=>'L', +6217=>'L', +6218=>'L', +6219=>'L', +6220=>'L', +6221=>'L', +6222=>'L', +6223=>'L', +6224=>'L', +6225=>'L', +6226=>'L', +6227=>'L', +6228=>'L', +6229=>'L', +6230=>'L', +6231=>'L', +6232=>'L', +6233=>'L', +6234=>'L', +6235=>'L', +6236=>'L', +6237=>'L', +6238=>'L', +6239=>'L', +6240=>'L', +6241=>'L', +6242=>'L', +6243=>'L', +6244=>'L', +6245=>'L', +6246=>'L', +6247=>'L', +6248=>'L', +6249=>'L', +6250=>'L', +6251=>'L', +6252=>'L', +6253=>'L', +6254=>'L', +6255=>'L', +6256=>'L', +6257=>'L', +6258=>'L', +6259=>'L', +6260=>'L', +6261=>'L', +6262=>'L', +6263=>'L', +6272=>'L', +6273=>'L', +6274=>'L', +6275=>'L', +6276=>'L', +6277=>'L', +6278=>'L', +6279=>'L', +6280=>'L', +6281=>'L', +6282=>'L', +6283=>'L', +6284=>'L', +6285=>'L', +6286=>'L', +6287=>'L', +6288=>'L', +6289=>'L', +6290=>'L', +6291=>'L', +6292=>'L', +6293=>'L', +6294=>'L', +6295=>'L', +6296=>'L', +6297=>'L', +6298=>'L', +6299=>'L', +6300=>'L', +6301=>'L', +6302=>'L', +6303=>'L', +6304=>'L', +6305=>'L', +6306=>'L', +6307=>'L', +6308=>'L', +6309=>'L', +6310=>'L', +6311=>'L', +6312=>'L', +6313=>'NSM', +6400=>'L', +6401=>'L', +6402=>'L', +6403=>'L', +6404=>'L', +6405=>'L', +6406=>'L', +6407=>'L', +6408=>'L', +6409=>'L', +6410=>'L', +6411=>'L', +6412=>'L', +6413=>'L', +6414=>'L', +6415=>'L', +6416=>'L', +6417=>'L', +6418=>'L', +6419=>'L', +6420=>'L', +6421=>'L', +6422=>'L', +6423=>'L', +6424=>'L', +6425=>'L', +6426=>'L', +6427=>'L', +6428=>'L', +6432=>'NSM', +6433=>'NSM', +6434=>'NSM', +6435=>'L', +6436=>'L', +6437=>'L', +6438=>'L', +6439=>'NSM', +6440=>'NSM', +6441=>'NSM', +6442=>'NSM', +6443=>'NSM', +6448=>'L', +6449=>'L', +6450=>'NSM', +6451=>'L', +6452=>'L', +6453=>'L', +6454=>'L', +6455=>'L', +6456=>'L', +6457=>'NSM', +6458=>'NSM', +6459=>'NSM', +6464=>'ON', +6468=>'ON', +6469=>'ON', +6470=>'L', +6471=>'L', +6472=>'L', +6473=>'L', +6474=>'L', +6475=>'L', +6476=>'L', +6477=>'L', +6478=>'L', +6479=>'L', +6480=>'L', +6481=>'L', +6482=>'L', +6483=>'L', +6484=>'L', +6485=>'L', +6486=>'L', +6487=>'L', +6488=>'L', +6489=>'L', +6490=>'L', +6491=>'L', +6492=>'L', +6493=>'L', +6494=>'L', +6495=>'L', +6496=>'L', +6497=>'L', +6498=>'L', +6499=>'L', +6500=>'L', +6501=>'L', +6502=>'L', +6503=>'L', +6504=>'L', +6505=>'L', +6506=>'L', +6507=>'L', +6508=>'L', +6509=>'L', +6512=>'L', +6513=>'L', +6514=>'L', +6515=>'L', +6516=>'L', +6528=>'L', +6529=>'L', +6530=>'L', +6531=>'L', +6532=>'L', +6533=>'L', +6534=>'L', +6535=>'L', +6536=>'L', +6537=>'L', +6538=>'L', +6539=>'L', +6540=>'L', +6541=>'L', +6542=>'L', +6543=>'L', +6544=>'L', +6545=>'L', +6546=>'L', +6547=>'L', +6548=>'L', +6549=>'L', +6550=>'L', +6551=>'L', +6552=>'L', +6553=>'L', +6554=>'L', +6555=>'L', +6556=>'L', +6557=>'L', +6558=>'L', +6559=>'L', +6560=>'L', +6561=>'L', +6562=>'L', +6563=>'L', +6564=>'L', +6565=>'L', +6566=>'L', +6567=>'L', +6568=>'L', +6569=>'L', +6576=>'L', +6577=>'L', +6578=>'L', +6579=>'L', +6580=>'L', +6581=>'L', +6582=>'L', +6583=>'L', +6584=>'L', +6585=>'L', +6586=>'L', +6587=>'L', +6588=>'L', +6589=>'L', +6590=>'L', +6591=>'L', +6592=>'L', +6593=>'L', +6594=>'L', +6595=>'L', +6596=>'L', +6597=>'L', +6598=>'L', +6599=>'L', +6600=>'L', +6601=>'L', +6608=>'L', +6609=>'L', +6610=>'L', +6611=>'L', +6612=>'L', +6613=>'L', +6614=>'L', +6615=>'L', +6616=>'L', +6617=>'L', +6622=>'ON', +6623=>'ON', +6624=>'ON', +6625=>'ON', +6626=>'ON', +6627=>'ON', +6628=>'ON', +6629=>'ON', +6630=>'ON', +6631=>'ON', +6632=>'ON', +6633=>'ON', +6634=>'ON', +6635=>'ON', +6636=>'ON', +6637=>'ON', +6638=>'ON', +6639=>'ON', +6640=>'ON', +6641=>'ON', +6642=>'ON', +6643=>'ON', +6644=>'ON', +6645=>'ON', +6646=>'ON', +6647=>'ON', +6648=>'ON', +6649=>'ON', +6650=>'ON', +6651=>'ON', +6652=>'ON', +6653=>'ON', +6654=>'ON', +6655=>'ON', +6656=>'L', +6657=>'L', +6658=>'L', +6659=>'L', +6660=>'L', +6661=>'L', +6662=>'L', +6663=>'L', +6664=>'L', +6665=>'L', +6666=>'L', +6667=>'L', +6668=>'L', +6669=>'L', +6670=>'L', +6671=>'L', +6672=>'L', +6673=>'L', +6674=>'L', +6675=>'L', +6676=>'L', +6677=>'L', +6678=>'L', +6679=>'NSM', +6680=>'NSM', +6681=>'L', +6682=>'L', +6683=>'L', +6686=>'L', +6687=>'L', +6912=>'NSM', +6913=>'NSM', +6914=>'NSM', +6915=>'NSM', +6916=>'L', +6917=>'L', +6918=>'L', +6919=>'L', +6920=>'L', +6921=>'L', +6922=>'L', +6923=>'L', +6924=>'L', +6925=>'L', +6926=>'L', +6927=>'L', +6928=>'L', +6929=>'L', +6930=>'L', +6931=>'L', +6932=>'L', +6933=>'L', +6934=>'L', +6935=>'L', +6936=>'L', +6937=>'L', +6938=>'L', +6939=>'L', +6940=>'L', +6941=>'L', +6942=>'L', +6943=>'L', +6944=>'L', +6945=>'L', +6946=>'L', +6947=>'L', +6948=>'L', +6949=>'L', +6950=>'L', +6951=>'L', +6952=>'L', +6953=>'L', +6954=>'L', +6955=>'L', +6956=>'L', +6957=>'L', +6958=>'L', +6959=>'L', +6960=>'L', +6961=>'L', +6962=>'L', +6963=>'L', +6964=>'NSM', +6965=>'L', +6966=>'NSM', +6967=>'NSM', +6968=>'NSM', +6969=>'NSM', +6970=>'NSM', +6971=>'L', +6972=>'NSM', +6973=>'L', +6974=>'L', +6975=>'L', +6976=>'L', +6977=>'L', +6978=>'NSM', +6979=>'L', +6980=>'L', +6981=>'L', +6982=>'L', +6983=>'L', +6984=>'L', +6985=>'L', +6986=>'L', +6987=>'L', +6992=>'L', +6993=>'L', +6994=>'L', +6995=>'L', +6996=>'L', +6997=>'L', +6998=>'L', +6999=>'L', +7000=>'L', +7001=>'L', +7002=>'L', +7003=>'L', +7004=>'L', +7005=>'L', +7006=>'L', +7007=>'L', +7008=>'L', +7009=>'L', +7010=>'L', +7011=>'L', +7012=>'L', +7013=>'L', +7014=>'L', +7015=>'L', +7016=>'L', +7017=>'L', +7018=>'L', +7019=>'NSM', +7020=>'NSM', +7021=>'NSM', +7022=>'NSM', +7023=>'NSM', +7024=>'NSM', +7025=>'NSM', +7026=>'NSM', +7027=>'NSM', +7028=>'L', +7029=>'L', +7030=>'L', +7031=>'L', +7032=>'L', +7033=>'L', +7034=>'L', +7035=>'L', +7036=>'L', +7424=>'L', +7425=>'L', +7426=>'L', +7427=>'L', +7428=>'L', +7429=>'L', +7430=>'L', +7431=>'L', +7432=>'L', +7433=>'L', +7434=>'L', +7435=>'L', +7436=>'L', +7437=>'L', +7438=>'L', +7439=>'L', +7440=>'L', +7441=>'L', +7442=>'L', +7443=>'L', +7444=>'L', +7445=>'L', +7446=>'L', +7447=>'L', +7448=>'L', +7449=>'L', +7450=>'L', +7451=>'L', +7452=>'L', +7453=>'L', +7454=>'L', +7455=>'L', +7456=>'L', +7457=>'L', +7458=>'L', +7459=>'L', +7460=>'L', +7461=>'L', +7462=>'L', +7463=>'L', +7464=>'L', +7465=>'L', +7466=>'L', +7467=>'L', +7468=>'L', +7469=>'L', +7470=>'L', +7471=>'L', +7472=>'L', +7473=>'L', +7474=>'L', +7475=>'L', +7476=>'L', +7477=>'L', +7478=>'L', +7479=>'L', +7480=>'L', +7481=>'L', +7482=>'L', +7483=>'L', +7484=>'L', +7485=>'L', +7486=>'L', +7487=>'L', +7488=>'L', +7489=>'L', +7490=>'L', +7491=>'L', +7492=>'L', +7493=>'L', +7494=>'L', +7495=>'L', +7496=>'L', +7497=>'L', +7498=>'L', +7499=>'L', +7500=>'L', +7501=>'L', +7502=>'L', +7503=>'L', +7504=>'L', +7505=>'L', +7506=>'L', +7507=>'L', +7508=>'L', +7509=>'L', +7510=>'L', +7511=>'L', +7512=>'L', +7513=>'L', +7514=>'L', +7515=>'L', +7516=>'L', +7517=>'L', +7518=>'L', +7519=>'L', +7520=>'L', +7521=>'L', +7522=>'L', +7523=>'L', +7524=>'L', +7525=>'L', +7526=>'L', +7527=>'L', +7528=>'L', +7529=>'L', +7530=>'L', +7531=>'L', +7532=>'L', +7533=>'L', +7534=>'L', +7535=>'L', +7536=>'L', +7537=>'L', +7538=>'L', +7539=>'L', +7540=>'L', +7541=>'L', +7542=>'L', +7543=>'L', +7544=>'L', +7545=>'L', +7546=>'L', +7547=>'L', +7548=>'L', +7549=>'L', +7550=>'L', +7551=>'L', +7552=>'L', +7553=>'L', +7554=>'L', +7555=>'L', +7556=>'L', +7557=>'L', +7558=>'L', +7559=>'L', +7560=>'L', +7561=>'L', +7562=>'L', +7563=>'L', +7564=>'L', +7565=>'L', +7566=>'L', +7567=>'L', +7568=>'L', +7569=>'L', +7570=>'L', +7571=>'L', +7572=>'L', +7573=>'L', +7574=>'L', +7575=>'L', +7576=>'L', +7577=>'L', +7578=>'L', +7579=>'L', +7580=>'L', +7581=>'L', +7582=>'L', +7583=>'L', +7584=>'L', +7585=>'L', +7586=>'L', +7587=>'L', +7588=>'L', +7589=>'L', +7590=>'L', +7591=>'L', +7592=>'L', +7593=>'L', +7594=>'L', +7595=>'L', +7596=>'L', +7597=>'L', +7598=>'L', +7599=>'L', +7600=>'L', +7601=>'L', +7602=>'L', +7603=>'L', +7604=>'L', +7605=>'L', +7606=>'L', +7607=>'L', +7608=>'L', +7609=>'L', +7610=>'L', +7611=>'L', +7612=>'L', +7613=>'L', +7614=>'L', +7615=>'L', +7616=>'NSM', +7617=>'NSM', +7618=>'NSM', +7619=>'NSM', +7620=>'NSM', +7621=>'NSM', +7622=>'NSM', +7623=>'NSM', +7624=>'NSM', +7625=>'NSM', +7626=>'NSM', +7678=>'NSM', +7679=>'NSM', +7680=>'L', +7681=>'L', +7682=>'L', +7683=>'L', +7684=>'L', +7685=>'L', +7686=>'L', +7687=>'L', +7688=>'L', +7689=>'L', +7690=>'L', +7691=>'L', +7692=>'L', +7693=>'L', +7694=>'L', +7695=>'L', +7696=>'L', +7697=>'L', +7698=>'L', +7699=>'L', +7700=>'L', +7701=>'L', +7702=>'L', +7703=>'L', +7704=>'L', +7705=>'L', +7706=>'L', +7707=>'L', +7708=>'L', +7709=>'L', +7710=>'L', +7711=>'L', +7712=>'L', +7713=>'L', +7714=>'L', +7715=>'L', +7716=>'L', +7717=>'L', +7718=>'L', +7719=>'L', +7720=>'L', +7721=>'L', +7722=>'L', +7723=>'L', +7724=>'L', +7725=>'L', +7726=>'L', +7727=>'L', +7728=>'L', +7729=>'L', +7730=>'L', +7731=>'L', +7732=>'L', +7733=>'L', +7734=>'L', +7735=>'L', +7736=>'L', +7737=>'L', +7738=>'L', +7739=>'L', +7740=>'L', +7741=>'L', +7742=>'L', +7743=>'L', +7744=>'L', +7745=>'L', +7746=>'L', +7747=>'L', +7748=>'L', +7749=>'L', +7750=>'L', +7751=>'L', +7752=>'L', +7753=>'L', +7754=>'L', +7755=>'L', +7756=>'L', +7757=>'L', +7758=>'L', +7759=>'L', +7760=>'L', +7761=>'L', +7762=>'L', +7763=>'L', +7764=>'L', +7765=>'L', +7766=>'L', +7767=>'L', +7768=>'L', +7769=>'L', +7770=>'L', +7771=>'L', +7772=>'L', +7773=>'L', +7774=>'L', +7775=>'L', +7776=>'L', +7777=>'L', +7778=>'L', +7779=>'L', +7780=>'L', +7781=>'L', +7782=>'L', +7783=>'L', +7784=>'L', +7785=>'L', +7786=>'L', +7787=>'L', +7788=>'L', +7789=>'L', +7790=>'L', +7791=>'L', +7792=>'L', +7793=>'L', +7794=>'L', +7795=>'L', +7796=>'L', +7797=>'L', +7798=>'L', +7799=>'L', +7800=>'L', +7801=>'L', +7802=>'L', +7803=>'L', +7804=>'L', +7805=>'L', +7806=>'L', +7807=>'L', +7808=>'L', +7809=>'L', +7810=>'L', +7811=>'L', +7812=>'L', +7813=>'L', +7814=>'L', +7815=>'L', +7816=>'L', +7817=>'L', +7818=>'L', +7819=>'L', +7820=>'L', +7821=>'L', +7822=>'L', +7823=>'L', +7824=>'L', +7825=>'L', +7826=>'L', +7827=>'L', +7828=>'L', +7829=>'L', +7830=>'L', +7831=>'L', +7832=>'L', +7833=>'L', +7834=>'L', +7835=>'L', +7840=>'L', +7841=>'L', +7842=>'L', +7843=>'L', +7844=>'L', +7845=>'L', +7846=>'L', +7847=>'L', +7848=>'L', +7849=>'L', +7850=>'L', +7851=>'L', +7852=>'L', +7853=>'L', +7854=>'L', +7855=>'L', +7856=>'L', +7857=>'L', +7858=>'L', +7859=>'L', +7860=>'L', +7861=>'L', +7862=>'L', +7863=>'L', +7864=>'L', +7865=>'L', +7866=>'L', +7867=>'L', +7868=>'L', +7869=>'L', +7870=>'L', +7871=>'L', +7872=>'L', +7873=>'L', +7874=>'L', +7875=>'L', +7876=>'L', +7877=>'L', +7878=>'L', +7879=>'L', +7880=>'L', +7881=>'L', +7882=>'L', +7883=>'L', +7884=>'L', +7885=>'L', +7886=>'L', +7887=>'L', +7888=>'L', +7889=>'L', +7890=>'L', +7891=>'L', +7892=>'L', +7893=>'L', +7894=>'L', +7895=>'L', +7896=>'L', +7897=>'L', +7898=>'L', +7899=>'L', +7900=>'L', +7901=>'L', +7902=>'L', +7903=>'L', +7904=>'L', +7905=>'L', +7906=>'L', +7907=>'L', +7908=>'L', +7909=>'L', +7910=>'L', +7911=>'L', +7912=>'L', +7913=>'L', +7914=>'L', +7915=>'L', +7916=>'L', +7917=>'L', +7918=>'L', +7919=>'L', +7920=>'L', +7921=>'L', +7922=>'L', +7923=>'L', +7924=>'L', +7925=>'L', +7926=>'L', +7927=>'L', +7928=>'L', +7929=>'L', +7936=>'L', +7937=>'L', +7938=>'L', +7939=>'L', +7940=>'L', +7941=>'L', +7942=>'L', +7943=>'L', +7944=>'L', +7945=>'L', +7946=>'L', +7947=>'L', +7948=>'L', +7949=>'L', +7950=>'L', +7951=>'L', +7952=>'L', +7953=>'L', +7954=>'L', +7955=>'L', +7956=>'L', +7957=>'L', +7960=>'L', +7961=>'L', +7962=>'L', +7963=>'L', +7964=>'L', +7965=>'L', +7968=>'L', +7969=>'L', +7970=>'L', +7971=>'L', +7972=>'L', +7973=>'L', +7974=>'L', +7975=>'L', +7976=>'L', +7977=>'L', +7978=>'L', +7979=>'L', +7980=>'L', +7981=>'L', +7982=>'L', +7983=>'L', +7984=>'L', +7985=>'L', +7986=>'L', +7987=>'L', +7988=>'L', +7989=>'L', +7990=>'L', +7991=>'L', +7992=>'L', +7993=>'L', +7994=>'L', +7995=>'L', +7996=>'L', +7997=>'L', +7998=>'L', +7999=>'L', +8000=>'L', +8001=>'L', +8002=>'L', +8003=>'L', +8004=>'L', +8005=>'L', +8008=>'L', +8009=>'L', +8010=>'L', +8011=>'L', +8012=>'L', +8013=>'L', +8016=>'L', +8017=>'L', +8018=>'L', +8019=>'L', +8020=>'L', +8021=>'L', +8022=>'L', +8023=>'L', +8025=>'L', +8027=>'L', +8029=>'L', +8031=>'L', +8032=>'L', +8033=>'L', +8034=>'L', +8035=>'L', +8036=>'L', +8037=>'L', +8038=>'L', +8039=>'L', +8040=>'L', +8041=>'L', +8042=>'L', +8043=>'L', +8044=>'L', +8045=>'L', +8046=>'L', +8047=>'L', +8048=>'L', +8049=>'L', +8050=>'L', +8051=>'L', +8052=>'L', +8053=>'L', +8054=>'L', +8055=>'L', +8056=>'L', +8057=>'L', +8058=>'L', +8059=>'L', +8060=>'L', +8061=>'L', +8064=>'L', +8065=>'L', +8066=>'L', +8067=>'L', +8068=>'L', +8069=>'L', +8070=>'L', +8071=>'L', +8072=>'L', +8073=>'L', +8074=>'L', +8075=>'L', +8076=>'L', +8077=>'L', +8078=>'L', +8079=>'L', +8080=>'L', +8081=>'L', +8082=>'L', +8083=>'L', +8084=>'L', +8085=>'L', +8086=>'L', +8087=>'L', +8088=>'L', +8089=>'L', +8090=>'L', +8091=>'L', +8092=>'L', +8093=>'L', +8094=>'L', +8095=>'L', +8096=>'L', +8097=>'L', +8098=>'L', +8099=>'L', +8100=>'L', +8101=>'L', +8102=>'L', +8103=>'L', +8104=>'L', +8105=>'L', +8106=>'L', +8107=>'L', +8108=>'L', +8109=>'L', +8110=>'L', +8111=>'L', +8112=>'L', +8113=>'L', +8114=>'L', +8115=>'L', +8116=>'L', +8118=>'L', +8119=>'L', +8120=>'L', +8121=>'L', +8122=>'L', +8123=>'L', +8124=>'L', +8125=>'ON', +8126=>'L', +8127=>'ON', +8128=>'ON', +8129=>'ON', +8130=>'L', +8131=>'L', +8132=>'L', +8134=>'L', +8135=>'L', +8136=>'L', +8137=>'L', +8138=>'L', +8139=>'L', +8140=>'L', +8141=>'ON', +8142=>'ON', +8143=>'ON', +8144=>'L', +8145=>'L', +8146=>'L', +8147=>'L', +8150=>'L', +8151=>'L', +8152=>'L', +8153=>'L', +8154=>'L', +8155=>'L', +8157=>'ON', +8158=>'ON', +8159=>'ON', +8160=>'L', +8161=>'L', +8162=>'L', +8163=>'L', +8164=>'L', +8165=>'L', +8166=>'L', +8167=>'L', +8168=>'L', +8169=>'L', +8170=>'L', +8171=>'L', +8172=>'L', +8173=>'ON', +8174=>'ON', +8175=>'ON', +8178=>'L', +8179=>'L', +8180=>'L', +8182=>'L', +8183=>'L', +8184=>'L', +8185=>'L', +8186=>'L', +8187=>'L', +8188=>'L', +8189=>'ON', +8190=>'ON', +8192=>'WS', +8193=>'WS', +8194=>'WS', +8195=>'WS', +8196=>'WS', +8197=>'WS', +8198=>'WS', +8199=>'WS', +8200=>'WS', +8201=>'WS', +8202=>'WS', +8203=>'BN', +8204=>'BN', +8205=>'BN', +8206=>'L', +8207=>'R', +8208=>'ON', +8209=>'ON', +8210=>'ON', +8211=>'ON', +8212=>'ON', +8213=>'ON', +8214=>'ON', +8215=>'ON', +8216=>'ON', +8217=>'ON', +8218=>'ON', +8219=>'ON', +8220=>'ON', +8221=>'ON', +8222=>'ON', +8223=>'ON', +8224=>'ON', +8225=>'ON', +8226=>'ON', +8227=>'ON', +8228=>'ON', +8229=>'ON', +8230=>'ON', +8231=>'ON', +8232=>'WS', +8233=>'B', +8234=>'LRE', +8235=>'RLE', +8236=>'PDF', +8237=>'LRO', +8238=>'RLO', +8239=>'CS', +8240=>'ET', +8241=>'ET', +8242=>'ET', +8243=>'ET', +8244=>'ET', +8245=>'ON', +8246=>'ON', +8247=>'ON', +8248=>'ON', +8249=>'ON', +8250=>'ON', +8251=>'ON', +8252=>'ON', +8253=>'ON', +8254=>'ON', +8255=>'ON', +8256=>'ON', +8257=>'ON', +8258=>'ON', +8259=>'ON', +8260=>'CS', +8261=>'ON', +8262=>'ON', +8263=>'ON', +8264=>'ON', +8265=>'ON', +8266=>'ON', +8267=>'ON', +8268=>'ON', +8269=>'ON', +8270=>'ON', +8271=>'ON', +8272=>'ON', +8273=>'ON', +8274=>'ON', +8275=>'ON', +8276=>'ON', +8277=>'ON', +8278=>'ON', +8279=>'ON', +8280=>'ON', +8281=>'ON', +8282=>'ON', +8283=>'ON', +8284=>'ON', +8285=>'ON', +8286=>'ON', +8287=>'WS', +8288=>'BN', +8289=>'BN', +8290=>'BN', +8291=>'BN', +8298=>'BN', +8299=>'BN', +8300=>'BN', +8301=>'BN', +8302=>'BN', +8303=>'BN', +8304=>'EN', +8305=>'L', +8308=>'EN', +8309=>'EN', +8310=>'EN', +8311=>'EN', +8312=>'EN', +8313=>'EN', +8314=>'ES', +8315=>'ES', +8316=>'ON', +8317=>'ON', +8318=>'ON', +8319=>'L', +8320=>'EN', +8321=>'EN', +8322=>'EN', +8323=>'EN', +8324=>'EN', +8325=>'EN', +8326=>'EN', +8327=>'EN', +8328=>'EN', +8329=>'EN', +8330=>'ES', +8331=>'ES', +8332=>'ON', +8333=>'ON', +8334=>'ON', +8336=>'L', +8337=>'L', +8338=>'L', +8339=>'L', +8340=>'L', +8352=>'ET', +8353=>'ET', +8354=>'ET', +8355=>'ET', +8356=>'ET', +8357=>'ET', +8358=>'ET', +8359=>'ET', +8360=>'ET', +8361=>'ET', +8362=>'ET', +8363=>'ET', +8364=>'ET', +8365=>'ET', +8366=>'ET', +8367=>'ET', +8368=>'ET', +8369=>'ET', +8370=>'ET', +8371=>'ET', +8372=>'ET', +8373=>'ET', +8400=>'NSM', +8401=>'NSM', +8402=>'NSM', +8403=>'NSM', +8404=>'NSM', +8405=>'NSM', +8406=>'NSM', +8407=>'NSM', +8408=>'NSM', +8409=>'NSM', +8410=>'NSM', +8411=>'NSM', +8412=>'NSM', +8413=>'NSM', +8414=>'NSM', +8415=>'NSM', +8416=>'NSM', +8417=>'NSM', +8418=>'NSM', +8419=>'NSM', +8420=>'NSM', +8421=>'NSM', +8422=>'NSM', +8423=>'NSM', +8424=>'NSM', +8425=>'NSM', +8426=>'NSM', +8427=>'NSM', +8428=>'NSM', +8429=>'NSM', +8430=>'NSM', +8431=>'NSM', +8448=>'ON', +8449=>'ON', +8450=>'L', +8451=>'ON', +8452=>'ON', +8453=>'ON', +8454=>'ON', +8455=>'L', +8456=>'ON', +8457=>'ON', +8458=>'L', +8459=>'L', +8460=>'L', +8461=>'L', +8462=>'L', +8463=>'L', +8464=>'L', +8465=>'L', +8466=>'L', +8467=>'L', +8468=>'ON', +8469=>'L', +8470=>'ON', +8471=>'ON', +8472=>'ON', +8473=>'L', +8474=>'L', +8475=>'L', +8476=>'L', +8477=>'L', +8478=>'ON', +8479=>'ON', +8480=>'ON', +8481=>'ON', +8482=>'ON', +8483=>'ON', +8484=>'L', +8485=>'ON', +8486=>'L', +8487=>'ON', +8488=>'L', +8489=>'ON', +8490=>'L', +8491=>'L', +8492=>'L', +8493=>'L', +8494=>'ET', +8495=>'L', +8496=>'L', +8497=>'L', +8498=>'L', +8499=>'L', +8500=>'L', +8501=>'L', +8502=>'L', +8503=>'L', +8504=>'L', +8505=>'L', +8506=>'ON', +8507=>'ON', +8508=>'L', +8509=>'L', +8510=>'L', +8511=>'L', +8512=>'ON', +8513=>'ON', +8514=>'ON', +8515=>'ON', +8516=>'ON', +8517=>'L', +8518=>'L', +8519=>'L', +8520=>'L', +8521=>'L', +8522=>'ON', +8523=>'ON', +8524=>'ON', +8525=>'ON', +8526=>'L', +8531=>'ON', +8532=>'ON', +8533=>'ON', +8534=>'ON', +8535=>'ON', +8536=>'ON', +8537=>'ON', +8538=>'ON', +8539=>'ON', +8540=>'ON', +8541=>'ON', +8542=>'ON', +8543=>'ON', +8544=>'L', +8545=>'L', +8546=>'L', +8547=>'L', +8548=>'L', +8549=>'L', +8550=>'L', +8551=>'L', +8552=>'L', +8553=>'L', +8554=>'L', +8555=>'L', +8556=>'L', +8557=>'L', +8558=>'L', +8559=>'L', +8560=>'L', +8561=>'L', +8562=>'L', +8563=>'L', +8564=>'L', +8565=>'L', +8566=>'L', +8567=>'L', +8568=>'L', +8569=>'L', +8570=>'L', +8571=>'L', +8572=>'L', +8573=>'L', +8574=>'L', +8575=>'L', +8576=>'L', +8577=>'L', +8578=>'L', +8579=>'L', +8580=>'L', +8592=>'ON', +8593=>'ON', +8594=>'ON', +8595=>'ON', +8596=>'ON', +8597=>'ON', +8598=>'ON', +8599=>'ON', +8600=>'ON', +8601=>'ON', +8602=>'ON', +8603=>'ON', +8604=>'ON', +8605=>'ON', +8606=>'ON', +8607=>'ON', +8608=>'ON', +8609=>'ON', +8610=>'ON', +8611=>'ON', +8612=>'ON', +8613=>'ON', +8614=>'ON', +8615=>'ON', +8616=>'ON', +8617=>'ON', +8618=>'ON', +8619=>'ON', +8620=>'ON', +8621=>'ON', +8622=>'ON', +8623=>'ON', +8624=>'ON', +8625=>'ON', +8626=>'ON', +8627=>'ON', +8628=>'ON', +8629=>'ON', +8630=>'ON', +8631=>'ON', +8632=>'ON', +8633=>'ON', +8634=>'ON', +8635=>'ON', +8636=>'ON', +8637=>'ON', +8638=>'ON', +8639=>'ON', +8640=>'ON', +8641=>'ON', +8642=>'ON', +8643=>'ON', +8644=>'ON', +8645=>'ON', +8646=>'ON', +8647=>'ON', +8648=>'ON', +8649=>'ON', +8650=>'ON', +8651=>'ON', +8652=>'ON', +8653=>'ON', +8654=>'ON', +8655=>'ON', +8656=>'ON', +8657=>'ON', +8658=>'ON', +8659=>'ON', +8660=>'ON', +8661=>'ON', +8662=>'ON', +8663=>'ON', +8664=>'ON', +8665=>'ON', +8666=>'ON', +8667=>'ON', +8668=>'ON', +8669=>'ON', +8670=>'ON', +8671=>'ON', +8672=>'ON', +8673=>'ON', +8674=>'ON', +8675=>'ON', +8676=>'ON', +8677=>'ON', +8678=>'ON', +8679=>'ON', +8680=>'ON', +8681=>'ON', +8682=>'ON', +8683=>'ON', +8684=>'ON', +8685=>'ON', +8686=>'ON', +8687=>'ON', +8688=>'ON', +8689=>'ON', +8690=>'ON', +8691=>'ON', +8692=>'ON', +8693=>'ON', +8694=>'ON', +8695=>'ON', +8696=>'ON', +8697=>'ON', +8698=>'ON', +8699=>'ON', +8700=>'ON', +8701=>'ON', +8702=>'ON', +8703=>'ON', +8704=>'ON', +8705=>'ON', +8706=>'ON', +8707=>'ON', +8708=>'ON', +8709=>'ON', +8710=>'ON', +8711=>'ON', +8712=>'ON', +8713=>'ON', +8714=>'ON', +8715=>'ON', +8716=>'ON', +8717=>'ON', +8718=>'ON', +8719=>'ON', +8720=>'ON', +8721=>'ON', +8722=>'ES', +8723=>'ET', +8724=>'ON', +8725=>'ON', +8726=>'ON', +8727=>'ON', +8728=>'ON', +8729=>'ON', +8730=>'ON', +8731=>'ON', +8732=>'ON', +8733=>'ON', +8734=>'ON', +8735=>'ON', +8736=>'ON', +8737=>'ON', +8738=>'ON', +8739=>'ON', +8740=>'ON', +8741=>'ON', +8742=>'ON', +8743=>'ON', +8744=>'ON', +8745=>'ON', +8746=>'ON', +8747=>'ON', +8748=>'ON', +8749=>'ON', +8750=>'ON', +8751=>'ON', +8752=>'ON', +8753=>'ON', +8754=>'ON', +8755=>'ON', +8756=>'ON', +8757=>'ON', +8758=>'ON', +8759=>'ON', +8760=>'ON', +8761=>'ON', +8762=>'ON', +8763=>'ON', +8764=>'ON', +8765=>'ON', +8766=>'ON', +8767=>'ON', +8768=>'ON', +8769=>'ON', +8770=>'ON', +8771=>'ON', +8772=>'ON', +8773=>'ON', +8774=>'ON', +8775=>'ON', +8776=>'ON', +8777=>'ON', +8778=>'ON', +8779=>'ON', +8780=>'ON', +8781=>'ON', +8782=>'ON', +8783=>'ON', +8784=>'ON', +8785=>'ON', +8786=>'ON', +8787=>'ON', +8788=>'ON', +8789=>'ON', +8790=>'ON', +8791=>'ON', +8792=>'ON', +8793=>'ON', +8794=>'ON', +8795=>'ON', +8796=>'ON', +8797=>'ON', +8798=>'ON', +8799=>'ON', +8800=>'ON', +8801=>'ON', +8802=>'ON', +8803=>'ON', +8804=>'ON', +8805=>'ON', +8806=>'ON', +8807=>'ON', +8808=>'ON', +8809=>'ON', +8810=>'ON', +8811=>'ON', +8812=>'ON', +8813=>'ON', +8814=>'ON', +8815=>'ON', +8816=>'ON', +8817=>'ON', +8818=>'ON', +8819=>'ON', +8820=>'ON', +8821=>'ON', +8822=>'ON', +8823=>'ON', +8824=>'ON', +8825=>'ON', +8826=>'ON', +8827=>'ON', +8828=>'ON', +8829=>'ON', +8830=>'ON', +8831=>'ON', +8832=>'ON', +8833=>'ON', +8834=>'ON', +8835=>'ON', +8836=>'ON', +8837=>'ON', +8838=>'ON', +8839=>'ON', +8840=>'ON', +8841=>'ON', +8842=>'ON', +8843=>'ON', +8844=>'ON', +8845=>'ON', +8846=>'ON', +8847=>'ON', +8848=>'ON', +8849=>'ON', +8850=>'ON', +8851=>'ON', +8852=>'ON', +8853=>'ON', +8854=>'ON', +8855=>'ON', +8856=>'ON', +8857=>'ON', +8858=>'ON', +8859=>'ON', +8860=>'ON', +8861=>'ON', +8862=>'ON', +8863=>'ON', +8864=>'ON', +8865=>'ON', +8866=>'ON', +8867=>'ON', +8868=>'ON', +8869=>'ON', +8870=>'ON', +8871=>'ON', +8872=>'ON', +8873=>'ON', +8874=>'ON', +8875=>'ON', +8876=>'ON', +8877=>'ON', +8878=>'ON', +8879=>'ON', +8880=>'ON', +8881=>'ON', +8882=>'ON', +8883=>'ON', +8884=>'ON', +8885=>'ON', +8886=>'ON', +8887=>'ON', +8888=>'ON', +8889=>'ON', +8890=>'ON', +8891=>'ON', +8892=>'ON', +8893=>'ON', +8894=>'ON', +8895=>'ON', +8896=>'ON', +8897=>'ON', +8898=>'ON', +8899=>'ON', +8900=>'ON', +8901=>'ON', +8902=>'ON', +8903=>'ON', +8904=>'ON', +8905=>'ON', +8906=>'ON', +8907=>'ON', +8908=>'ON', +8909=>'ON', +8910=>'ON', +8911=>'ON', +8912=>'ON', +8913=>'ON', +8914=>'ON', +8915=>'ON', +8916=>'ON', +8917=>'ON', +8918=>'ON', +8919=>'ON', +8920=>'ON', +8921=>'ON', +8922=>'ON', +8923=>'ON', +8924=>'ON', +8925=>'ON', +8926=>'ON', +8927=>'ON', +8928=>'ON', +8929=>'ON', +8930=>'ON', +8931=>'ON', +8932=>'ON', +8933=>'ON', +8934=>'ON', +8935=>'ON', +8936=>'ON', +8937=>'ON', +8938=>'ON', +8939=>'ON', +8940=>'ON', +8941=>'ON', +8942=>'ON', +8943=>'ON', +8944=>'ON', +8945=>'ON', +8946=>'ON', +8947=>'ON', +8948=>'ON', +8949=>'ON', +8950=>'ON', +8951=>'ON', +8952=>'ON', +8953=>'ON', +8954=>'ON', +8955=>'ON', +8956=>'ON', +8957=>'ON', +8958=>'ON', +8959=>'ON', +8960=>'ON', +8961=>'ON', +8962=>'ON', +8963=>'ON', +8964=>'ON', +8965=>'ON', +8966=>'ON', +8967=>'ON', +8968=>'ON', +8969=>'ON', +8970=>'ON', +8971=>'ON', +8972=>'ON', +8973=>'ON', +8974=>'ON', +8975=>'ON', +8976=>'ON', +8977=>'ON', +8978=>'ON', +8979=>'ON', +8980=>'ON', +8981=>'ON', +8982=>'ON', +8983=>'ON', +8984=>'ON', +8985=>'ON', +8986=>'ON', +8987=>'ON', +8988=>'ON', +8989=>'ON', +8990=>'ON', +8991=>'ON', +8992=>'ON', +8993=>'ON', +8994=>'ON', +8995=>'ON', +8996=>'ON', +8997=>'ON', +8998=>'ON', +8999=>'ON', +9000=>'ON', +9001=>'ON', +9002=>'ON', +9003=>'ON', +9004=>'ON', +9005=>'ON', +9006=>'ON', +9007=>'ON', +9008=>'ON', +9009=>'ON', +9010=>'ON', +9011=>'ON', +9012=>'ON', +9013=>'ON', +9014=>'L', +9015=>'L', +9016=>'L', +9017=>'L', +9018=>'L', +9019=>'L', +9020=>'L', +9021=>'L', +9022=>'L', +9023=>'L', +9024=>'L', +9025=>'L', +9026=>'L', +9027=>'L', +9028=>'L', +9029=>'L', +9030=>'L', +9031=>'L', +9032=>'L', +9033=>'L', +9034=>'L', +9035=>'L', +9036=>'L', +9037=>'L', +9038=>'L', +9039=>'L', +9040=>'L', +9041=>'L', +9042=>'L', +9043=>'L', +9044=>'L', +9045=>'L', +9046=>'L', +9047=>'L', +9048=>'L', +9049=>'L', +9050=>'L', +9051=>'L', +9052=>'L', +9053=>'L', +9054=>'L', +9055=>'L', +9056=>'L', +9057=>'L', +9058=>'L', +9059=>'L', +9060=>'L', +9061=>'L', +9062=>'L', +9063=>'L', +9064=>'L', +9065=>'L', +9066=>'L', +9067=>'L', +9068=>'L', +9069=>'L', +9070=>'L', +9071=>'L', +9072=>'L', +9073=>'L', +9074=>'L', +9075=>'L', +9076=>'L', +9077=>'L', +9078=>'L', +9079=>'L', +9080=>'L', +9081=>'L', +9082=>'L', +9083=>'ON', +9084=>'ON', +9085=>'ON', +9086=>'ON', +9087=>'ON', +9088=>'ON', +9089=>'ON', +9090=>'ON', +9091=>'ON', +9092=>'ON', +9093=>'ON', +9094=>'ON', +9095=>'ON', +9096=>'ON', +9097=>'ON', +9098=>'ON', +9099=>'ON', +9100=>'ON', +9101=>'ON', +9102=>'ON', +9103=>'ON', +9104=>'ON', +9105=>'ON', +9106=>'ON', +9107=>'ON', +9108=>'ON', +9109=>'L', +9110=>'ON', +9111=>'ON', +9112=>'ON', +9113=>'ON', +9114=>'ON', +9115=>'ON', +9116=>'ON', +9117=>'ON', +9118=>'ON', +9119=>'ON', +9120=>'ON', +9121=>'ON', +9122=>'ON', +9123=>'ON', +9124=>'ON', +9125=>'ON', +9126=>'ON', +9127=>'ON', +9128=>'ON', +9129=>'ON', +9130=>'ON', +9131=>'ON', +9132=>'ON', +9133=>'ON', +9134=>'ON', +9135=>'ON', +9136=>'ON', +9137=>'ON', +9138=>'ON', +9139=>'ON', +9140=>'ON', +9141=>'ON', +9142=>'ON', +9143=>'ON', +9144=>'ON', +9145=>'ON', +9146=>'ON', +9147=>'ON', +9148=>'ON', +9149=>'ON', +9150=>'ON', +9151=>'ON', +9152=>'ON', +9153=>'ON', +9154=>'ON', +9155=>'ON', +9156=>'ON', +9157=>'ON', +9158=>'ON', +9159=>'ON', +9160=>'ON', +9161=>'ON', +9162=>'ON', +9163=>'ON', +9164=>'ON', +9165=>'ON', +9166=>'ON', +9167=>'ON', +9168=>'ON', +9169=>'ON', +9170=>'ON', +9171=>'ON', +9172=>'ON', +9173=>'ON', +9174=>'ON', +9175=>'ON', +9176=>'ON', +9177=>'ON', +9178=>'ON', +9179=>'ON', +9180=>'ON', +9181=>'ON', +9182=>'ON', +9183=>'ON', +9184=>'ON', +9185=>'ON', +9186=>'ON', +9187=>'ON', +9188=>'ON', +9189=>'ON', +9190=>'ON', +9191=>'ON', +9216=>'ON', +9217=>'ON', +9218=>'ON', +9219=>'ON', +9220=>'ON', +9221=>'ON', +9222=>'ON', +9223=>'ON', +9224=>'ON', +9225=>'ON', +9226=>'ON', +9227=>'ON', +9228=>'ON', +9229=>'ON', +9230=>'ON', +9231=>'ON', +9232=>'ON', +9233=>'ON', +9234=>'ON', +9235=>'ON', +9236=>'ON', +9237=>'ON', +9238=>'ON', +9239=>'ON', +9240=>'ON', +9241=>'ON', +9242=>'ON', +9243=>'ON', +9244=>'ON', +9245=>'ON', +9246=>'ON', +9247=>'ON', +9248=>'ON', +9249=>'ON', +9250=>'ON', +9251=>'ON', +9252=>'ON', +9253=>'ON', +9254=>'ON', +9280=>'ON', +9281=>'ON', +9282=>'ON', +9283=>'ON', +9284=>'ON', +9285=>'ON', +9286=>'ON', +9287=>'ON', +9288=>'ON', +9289=>'ON', +9290=>'ON', +9312=>'ON', +9313=>'ON', +9314=>'ON', +9315=>'ON', +9316=>'ON', +9317=>'ON', +9318=>'ON', +9319=>'ON', +9320=>'ON', +9321=>'ON', +9322=>'ON', +9323=>'ON', +9324=>'ON', +9325=>'ON', +9326=>'ON', +9327=>'ON', +9328=>'ON', +9329=>'ON', +9330=>'ON', +9331=>'ON', +9332=>'ON', +9333=>'ON', +9334=>'ON', +9335=>'ON', +9336=>'ON', +9337=>'ON', +9338=>'ON', +9339=>'ON', +9340=>'ON', +9341=>'ON', +9342=>'ON', +9343=>'ON', +9344=>'ON', +9345=>'ON', +9346=>'ON', +9347=>'ON', +9348=>'ON', +9349=>'ON', +9350=>'ON', +9351=>'ON', +9352=>'EN', +9353=>'EN', +9354=>'EN', +9355=>'EN', +9356=>'EN', +9357=>'EN', +9358=>'EN', +9359=>'EN', +9360=>'EN', +9361=>'EN', +9362=>'EN', +9363=>'EN', +9364=>'EN', +9365=>'EN', +9366=>'EN', +9367=>'EN', +9368=>'EN', +9369=>'EN', +9370=>'EN', +9371=>'EN', +9372=>'L', +9373=>'L', +9374=>'L', +9375=>'L', +9376=>'L', +9377=>'L', +9378=>'L', +9379=>'L', +9380=>'L', +9381=>'L', +9382=>'L', +9383=>'L', +9384=>'L', +9385=>'L', +9386=>'L', +9387=>'L', +9388=>'L', +9389=>'L', +9390=>'L', +9391=>'L', +9392=>'L', +9393=>'L', +9394=>'L', +9395=>'L', +9396=>'L', +9397=>'L', +9398=>'L', +9399=>'L', +9400=>'L', +9401=>'L', +9402=>'L', +9403=>'L', +9404=>'L', +9405=>'L', +9406=>'L', +9407=>'L', +9408=>'L', +9409=>'L', +9410=>'L', +9411=>'L', +9412=>'L', +9413=>'L', +9414=>'L', +9415=>'L', +9416=>'L', +9417=>'L', +9418=>'L', +9419=>'L', +9420=>'L', +9421=>'L', +9422=>'L', +9423=>'L', +9424=>'L', +9425=>'L', +9426=>'L', +9427=>'L', +9428=>'L', +9429=>'L', +9430=>'L', +9431=>'L', +9432=>'L', +9433=>'L', +9434=>'L', +9435=>'L', +9436=>'L', +9437=>'L', +9438=>'L', +9439=>'L', +9440=>'L', +9441=>'L', +9442=>'L', +9443=>'L', +9444=>'L', +9445=>'L', +9446=>'L', +9447=>'L', +9448=>'L', +9449=>'L', +9450=>'ON', +9451=>'ON', +9452=>'ON', +9453=>'ON', +9454=>'ON', +9455=>'ON', +9456=>'ON', +9457=>'ON', +9458=>'ON', +9459=>'ON', +9460=>'ON', +9461=>'ON', +9462=>'ON', +9463=>'ON', +9464=>'ON', +9465=>'ON', +9466=>'ON', +9467=>'ON', +9468=>'ON', +9469=>'ON', +9470=>'ON', +9471=>'ON', +9472=>'ON', +9473=>'ON', +9474=>'ON', +9475=>'ON', +9476=>'ON', +9477=>'ON', +9478=>'ON', +9479=>'ON', +9480=>'ON', +9481=>'ON', +9482=>'ON', +9483=>'ON', +9484=>'ON', +9485=>'ON', +9486=>'ON', +9487=>'ON', +9488=>'ON', +9489=>'ON', +9490=>'ON', +9491=>'ON', +9492=>'ON', +9493=>'ON', +9494=>'ON', +9495=>'ON', +9496=>'ON', +9497=>'ON', +9498=>'ON', +9499=>'ON', +9500=>'ON', +9501=>'ON', +9502=>'ON', +9503=>'ON', +9504=>'ON', +9505=>'ON', +9506=>'ON', +9507=>'ON', +9508=>'ON', +9509=>'ON', +9510=>'ON', +9511=>'ON', +9512=>'ON', +9513=>'ON', +9514=>'ON', +9515=>'ON', +9516=>'ON', +9517=>'ON', +9518=>'ON', +9519=>'ON', +9520=>'ON', +9521=>'ON', +9522=>'ON', +9523=>'ON', +9524=>'ON', +9525=>'ON', +9526=>'ON', +9527=>'ON', +9528=>'ON', +9529=>'ON', +9530=>'ON', +9531=>'ON', +9532=>'ON', +9533=>'ON', +9534=>'ON', +9535=>'ON', +9536=>'ON', +9537=>'ON', +9538=>'ON', +9539=>'ON', +9540=>'ON', +9541=>'ON', +9542=>'ON', +9543=>'ON', +9544=>'ON', +9545=>'ON', +9546=>'ON', +9547=>'ON', +9548=>'ON', +9549=>'ON', +9550=>'ON', +9551=>'ON', +9552=>'ON', +9553=>'ON', +9554=>'ON', +9555=>'ON', +9556=>'ON', +9557=>'ON', +9558=>'ON', +9559=>'ON', +9560=>'ON', +9561=>'ON', +9562=>'ON', +9563=>'ON', +9564=>'ON', +9565=>'ON', +9566=>'ON', +9567=>'ON', +9568=>'ON', +9569=>'ON', +9570=>'ON', +9571=>'ON', +9572=>'ON', +9573=>'ON', +9574=>'ON', +9575=>'ON', +9576=>'ON', +9577=>'ON', +9578=>'ON', +9579=>'ON', +9580=>'ON', +9581=>'ON', +9582=>'ON', +9583=>'ON', +9584=>'ON', +9585=>'ON', +9586=>'ON', +9587=>'ON', +9588=>'ON', +9589=>'ON', +9590=>'ON', +9591=>'ON', +9592=>'ON', +9593=>'ON', +9594=>'ON', +9595=>'ON', +9596=>'ON', +9597=>'ON', +9598=>'ON', +9599=>'ON', +9600=>'ON', +9601=>'ON', +9602=>'ON', +9603=>'ON', +9604=>'ON', +9605=>'ON', +9606=>'ON', +9607=>'ON', +9608=>'ON', +9609=>'ON', +9610=>'ON', +9611=>'ON', +9612=>'ON', +9613=>'ON', +9614=>'ON', +9615=>'ON', +9616=>'ON', +9617=>'ON', +9618=>'ON', +9619=>'ON', +9620=>'ON', +9621=>'ON', +9622=>'ON', +9623=>'ON', +9624=>'ON', +9625=>'ON', +9626=>'ON', +9627=>'ON', +9628=>'ON', +9629=>'ON', +9630=>'ON', +9631=>'ON', +9632=>'ON', +9633=>'ON', +9634=>'ON', +9635=>'ON', +9636=>'ON', +9637=>'ON', +9638=>'ON', +9639=>'ON', +9640=>'ON', +9641=>'ON', +9642=>'ON', +9643=>'ON', +9644=>'ON', +9645=>'ON', +9646=>'ON', +9647=>'ON', +9648=>'ON', +9649=>'ON', +9650=>'ON', +9651=>'ON', +9652=>'ON', +9653=>'ON', +9654=>'ON', +9655=>'ON', +9656=>'ON', +9657=>'ON', +9658=>'ON', +9659=>'ON', +9660=>'ON', +9661=>'ON', +9662=>'ON', +9663=>'ON', +9664=>'ON', +9665=>'ON', +9666=>'ON', +9667=>'ON', +9668=>'ON', +9669=>'ON', +9670=>'ON', +9671=>'ON', +9672=>'ON', +9673=>'ON', +9674=>'ON', +9675=>'ON', +9676=>'ON', +9677=>'ON', +9678=>'ON', +9679=>'ON', +9680=>'ON', +9681=>'ON', +9682=>'ON', +9683=>'ON', +9684=>'ON', +9685=>'ON', +9686=>'ON', +9687=>'ON', +9688=>'ON', +9689=>'ON', +9690=>'ON', +9691=>'ON', +9692=>'ON', +9693=>'ON', +9694=>'ON', +9695=>'ON', +9696=>'ON', +9697=>'ON', +9698=>'ON', +9699=>'ON', +9700=>'ON', +9701=>'ON', +9702=>'ON', +9703=>'ON', +9704=>'ON', +9705=>'ON', +9706=>'ON', +9707=>'ON', +9708=>'ON', +9709=>'ON', +9710=>'ON', +9711=>'ON', +9712=>'ON', +9713=>'ON', +9714=>'ON', +9715=>'ON', +9716=>'ON', +9717=>'ON', +9718=>'ON', +9719=>'ON', +9720=>'ON', +9721=>'ON', +9722=>'ON', +9723=>'ON', +9724=>'ON', +9725=>'ON', +9726=>'ON', +9727=>'ON', +9728=>'ON', +9729=>'ON', +9730=>'ON', +9731=>'ON', +9732=>'ON', +9733=>'ON', +9734=>'ON', +9735=>'ON', +9736=>'ON', +9737=>'ON', +9738=>'ON', +9739=>'ON', +9740=>'ON', +9741=>'ON', +9742=>'ON', +9743=>'ON', +9744=>'ON', +9745=>'ON', +9746=>'ON', +9747=>'ON', +9748=>'ON', +9749=>'ON', +9750=>'ON', +9751=>'ON', +9752=>'ON', +9753=>'ON', +9754=>'ON', +9755=>'ON', +9756=>'ON', +9757=>'ON', +9758=>'ON', +9759=>'ON', +9760=>'ON', +9761=>'ON', +9762=>'ON', +9763=>'ON', +9764=>'ON', +9765=>'ON', +9766=>'ON', +9767=>'ON', +9768=>'ON', +9769=>'ON', +9770=>'ON', +9771=>'ON', +9772=>'ON', +9773=>'ON', +9774=>'ON', +9775=>'ON', +9776=>'ON', +9777=>'ON', +9778=>'ON', +9779=>'ON', +9780=>'ON', +9781=>'ON', +9782=>'ON', +9783=>'ON', +9784=>'ON', +9785=>'ON', +9786=>'ON', +9787=>'ON', +9788=>'ON', +9789=>'ON', +9790=>'ON', +9791=>'ON', +9792=>'ON', +9793=>'ON', +9794=>'ON', +9795=>'ON', +9796=>'ON', +9797=>'ON', +9798=>'ON', +9799=>'ON', +9800=>'ON', +9801=>'ON', +9802=>'ON', +9803=>'ON', +9804=>'ON', +9805=>'ON', +9806=>'ON', +9807=>'ON', +9808=>'ON', +9809=>'ON', +9810=>'ON', +9811=>'ON', +9812=>'ON', +9813=>'ON', +9814=>'ON', +9815=>'ON', +9816=>'ON', +9817=>'ON', +9818=>'ON', +9819=>'ON', +9820=>'ON', +9821=>'ON', +9822=>'ON', +9823=>'ON', +9824=>'ON', +9825=>'ON', +9826=>'ON', +9827=>'ON', +9828=>'ON', +9829=>'ON', +9830=>'ON', +9831=>'ON', +9832=>'ON', +9833=>'ON', +9834=>'ON', +9835=>'ON', +9836=>'ON', +9837=>'ON', +9838=>'ON', +9839=>'ON', +9840=>'ON', +9841=>'ON', +9842=>'ON', +9843=>'ON', +9844=>'ON', +9845=>'ON', +9846=>'ON', +9847=>'ON', +9848=>'ON', +9849=>'ON', +9850=>'ON', +9851=>'ON', +9852=>'ON', +9853=>'ON', +9854=>'ON', +9855=>'ON', +9856=>'ON', +9857=>'ON', +9858=>'ON', +9859=>'ON', +9860=>'ON', +9861=>'ON', +9862=>'ON', +9863=>'ON', +9864=>'ON', +9865=>'ON', +9866=>'ON', +9867=>'ON', +9868=>'ON', +9869=>'ON', +9870=>'ON', +9871=>'ON', +9872=>'ON', +9873=>'ON', +9874=>'ON', +9875=>'ON', +9876=>'ON', +9877=>'ON', +9878=>'ON', +9879=>'ON', +9880=>'ON', +9881=>'ON', +9882=>'ON', +9883=>'ON', +9884=>'ON', +9888=>'ON', +9889=>'ON', +9890=>'ON', +9891=>'ON', +9892=>'ON', +9893=>'ON', +9894=>'ON', +9895=>'ON', +9896=>'ON', +9897=>'ON', +9898=>'ON', +9899=>'ON', +9900=>'L', +9901=>'ON', +9902=>'ON', +9903=>'ON', +9904=>'ON', +9905=>'ON', +9906=>'ON', +9985=>'ON', +9986=>'ON', +9987=>'ON', +9988=>'ON', +9990=>'ON', +9991=>'ON', +9992=>'ON', +9993=>'ON', +9996=>'ON', +9997=>'ON', +9998=>'ON', +9999=>'ON', +10000=>'ON', +10001=>'ON', +10002=>'ON', +10003=>'ON', +10004=>'ON', +10005=>'ON', +10006=>'ON', +10007=>'ON', +10008=>'ON', +10009=>'ON', +10010=>'ON', +10011=>'ON', +10012=>'ON', +10013=>'ON', +10014=>'ON', +10015=>'ON', +10016=>'ON', +10017=>'ON', +10018=>'ON', +10019=>'ON', +10020=>'ON', +10021=>'ON', +10022=>'ON', +10023=>'ON', +10025=>'ON', +10026=>'ON', +10027=>'ON', +10028=>'ON', +10029=>'ON', +10030=>'ON', +10031=>'ON', +10032=>'ON', +10033=>'ON', +10034=>'ON', +10035=>'ON', +10036=>'ON', +10037=>'ON', +10038=>'ON', +10039=>'ON', +10040=>'ON', +10041=>'ON', +10042=>'ON', +10043=>'ON', +10044=>'ON', +10045=>'ON', +10046=>'ON', +10047=>'ON', +10048=>'ON', +10049=>'ON', +10050=>'ON', +10051=>'ON', +10052=>'ON', +10053=>'ON', +10054=>'ON', +10055=>'ON', +10056=>'ON', +10057=>'ON', +10058=>'ON', +10059=>'ON', +10061=>'ON', +10063=>'ON', +10064=>'ON', +10065=>'ON', +10066=>'ON', +10070=>'ON', +10072=>'ON', +10073=>'ON', +10074=>'ON', +10075=>'ON', +10076=>'ON', +10077=>'ON', +10078=>'ON', +10081=>'ON', +10082=>'ON', +10083=>'ON', +10084=>'ON', +10085=>'ON', +10086=>'ON', +10087=>'ON', +10088=>'ON', +10089=>'ON', +10090=>'ON', +10091=>'ON', +10092=>'ON', +10093=>'ON', +10094=>'ON', +10095=>'ON', +10096=>'ON', +10097=>'ON', +10098=>'ON', +10099=>'ON', +10100=>'ON', +10101=>'ON', +10102=>'ON', +10103=>'ON', +10104=>'ON', +10105=>'ON', +10106=>'ON', +10107=>'ON', +10108=>'ON', +10109=>'ON', +10110=>'ON', +10111=>'ON', +10112=>'ON', +10113=>'ON', +10114=>'ON', +10115=>'ON', +10116=>'ON', +10117=>'ON', +10118=>'ON', +10119=>'ON', +10120=>'ON', +10121=>'ON', +10122=>'ON', +10123=>'ON', +10124=>'ON', +10125=>'ON', +10126=>'ON', +10127=>'ON', +10128=>'ON', +10129=>'ON', +10130=>'ON', +10131=>'ON', +10132=>'ON', +10136=>'ON', +10137=>'ON', +10138=>'ON', +10139=>'ON', +10140=>'ON', +10141=>'ON', +10142=>'ON', +10143=>'ON', +10144=>'ON', +10145=>'ON', +10146=>'ON', +10147=>'ON', +10148=>'ON', +10149=>'ON', +10150=>'ON', +10151=>'ON', +10152=>'ON', +10153=>'ON', +10154=>'ON', +10155=>'ON', +10156=>'ON', +10157=>'ON', +10158=>'ON', +10159=>'ON', +10161=>'ON', +10162=>'ON', +10163=>'ON', +10164=>'ON', +10165=>'ON', +10166=>'ON', +10167=>'ON', +10168=>'ON', +10169=>'ON', +10170=>'ON', +10171=>'ON', +10172=>'ON', +10173=>'ON', +10174=>'ON', +10176=>'ON', +10177=>'ON', +10178=>'ON', +10179=>'ON', +10180=>'ON', +10181=>'ON', +10182=>'ON', +10183=>'ON', +10184=>'ON', +10185=>'ON', +10186=>'ON', +10192=>'ON', +10193=>'ON', +10194=>'ON', +10195=>'ON', +10196=>'ON', +10197=>'ON', +10198=>'ON', +10199=>'ON', +10200=>'ON', +10201=>'ON', +10202=>'ON', +10203=>'ON', +10204=>'ON', +10205=>'ON', +10206=>'ON', +10207=>'ON', +10208=>'ON', +10209=>'ON', +10210=>'ON', +10211=>'ON', +10212=>'ON', +10213=>'ON', +10214=>'ON', +10215=>'ON', +10216=>'ON', +10217=>'ON', +10218=>'ON', +10219=>'ON', +10224=>'ON', +10225=>'ON', +10226=>'ON', +10227=>'ON', +10228=>'ON', +10229=>'ON', +10230=>'ON', +10231=>'ON', +10232=>'ON', +10233=>'ON', +10234=>'ON', +10235=>'ON', +10236=>'ON', +10237=>'ON', +10238=>'ON', +10239=>'ON', +10240=>'L', +10241=>'L', +10242=>'L', +10243=>'L', +10244=>'L', +10245=>'L', +10246=>'L', +10247=>'L', +10248=>'L', +10249=>'L', +10250=>'L', +10251=>'L', +10252=>'L', +10253=>'L', +10254=>'L', +10255=>'L', +10256=>'L', +10257=>'L', +10258=>'L', +10259=>'L', +10260=>'L', +10261=>'L', +10262=>'L', +10263=>'L', +10264=>'L', +10265=>'L', +10266=>'L', +10267=>'L', +10268=>'L', +10269=>'L', +10270=>'L', +10271=>'L', +10272=>'L', +10273=>'L', +10274=>'L', +10275=>'L', +10276=>'L', +10277=>'L', +10278=>'L', +10279=>'L', +10280=>'L', +10281=>'L', +10282=>'L', +10283=>'L', +10284=>'L', +10285=>'L', +10286=>'L', +10287=>'L', +10288=>'L', +10289=>'L', +10290=>'L', +10291=>'L', +10292=>'L', +10293=>'L', +10294=>'L', +10295=>'L', +10296=>'L', +10297=>'L', +10298=>'L', +10299=>'L', +10300=>'L', +10301=>'L', +10302=>'L', +10303=>'L', +10304=>'L', +10305=>'L', +10306=>'L', +10307=>'L', +10308=>'L', +10309=>'L', +10310=>'L', +10311=>'L', +10312=>'L', +10313=>'L', +10314=>'L', +10315=>'L', +10316=>'L', +10317=>'L', +10318=>'L', +10319=>'L', +10320=>'L', +10321=>'L', +10322=>'L', +10323=>'L', +10324=>'L', +10325=>'L', +10326=>'L', +10327=>'L', +10328=>'L', +10329=>'L', +10330=>'L', +10331=>'L', +10332=>'L', +10333=>'L', +10334=>'L', +10335=>'L', +10336=>'L', +10337=>'L', +10338=>'L', +10339=>'L', +10340=>'L', +10341=>'L', +10342=>'L', +10343=>'L', +10344=>'L', +10345=>'L', +10346=>'L', +10347=>'L', +10348=>'L', +10349=>'L', +10350=>'L', +10351=>'L', +10352=>'L', +10353=>'L', +10354=>'L', +10355=>'L', +10356=>'L', +10357=>'L', +10358=>'L', +10359=>'L', +10360=>'L', +10361=>'L', +10362=>'L', +10363=>'L', +10364=>'L', +10365=>'L', +10366=>'L', +10367=>'L', +10368=>'L', +10369=>'L', +10370=>'L', +10371=>'L', +10372=>'L', +10373=>'L', +10374=>'L', +10375=>'L', +10376=>'L', +10377=>'L', +10378=>'L', +10379=>'L', +10380=>'L', +10381=>'L', +10382=>'L', +10383=>'L', +10384=>'L', +10385=>'L', +10386=>'L', +10387=>'L', +10388=>'L', +10389=>'L', +10390=>'L', +10391=>'L', +10392=>'L', +10393=>'L', +10394=>'L', +10395=>'L', +10396=>'L', +10397=>'L', +10398=>'L', +10399=>'L', +10400=>'L', +10401=>'L', +10402=>'L', +10403=>'L', +10404=>'L', +10405=>'L', +10406=>'L', +10407=>'L', +10408=>'L', +10409=>'L', +10410=>'L', +10411=>'L', +10412=>'L', +10413=>'L', +10414=>'L', +10415=>'L', +10416=>'L', +10417=>'L', +10418=>'L', +10419=>'L', +10420=>'L', +10421=>'L', +10422=>'L', +10423=>'L', +10424=>'L', +10425=>'L', +10426=>'L', +10427=>'L', +10428=>'L', +10429=>'L', +10430=>'L', +10431=>'L', +10432=>'L', +10433=>'L', +10434=>'L', +10435=>'L', +10436=>'L', +10437=>'L', +10438=>'L', +10439=>'L', +10440=>'L', +10441=>'L', +10442=>'L', +10443=>'L', +10444=>'L', +10445=>'L', +10446=>'L', +10447=>'L', +10448=>'L', +10449=>'L', +10450=>'L', +10451=>'L', +10452=>'L', +10453=>'L', +10454=>'L', +10455=>'L', +10456=>'L', +10457=>'L', +10458=>'L', +10459=>'L', +10460=>'L', +10461=>'L', +10462=>'L', +10463=>'L', +10464=>'L', +10465=>'L', +10466=>'L', +10467=>'L', +10468=>'L', +10469=>'L', +10470=>'L', +10471=>'L', +10472=>'L', +10473=>'L', +10474=>'L', +10475=>'L', +10476=>'L', +10477=>'L', +10478=>'L', +10479=>'L', +10480=>'L', +10481=>'L', +10482=>'L', +10483=>'L', +10484=>'L', +10485=>'L', +10486=>'L', +10487=>'L', +10488=>'L', +10489=>'L', +10490=>'L', +10491=>'L', +10492=>'L', +10493=>'L', +10494=>'L', +10495=>'L', +10496=>'ON', +10497=>'ON', +10498=>'ON', +10499=>'ON', +10500=>'ON', +10501=>'ON', +10502=>'ON', +10503=>'ON', +10504=>'ON', +10505=>'ON', +10506=>'ON', +10507=>'ON', +10508=>'ON', +10509=>'ON', +10510=>'ON', +10511=>'ON', +10512=>'ON', +10513=>'ON', +10514=>'ON', +10515=>'ON', +10516=>'ON', +10517=>'ON', +10518=>'ON', +10519=>'ON', +10520=>'ON', +10521=>'ON', +10522=>'ON', +10523=>'ON', +10524=>'ON', +10525=>'ON', +10526=>'ON', +10527=>'ON', +10528=>'ON', +10529=>'ON', +10530=>'ON', +10531=>'ON', +10532=>'ON', +10533=>'ON', +10534=>'ON', +10535=>'ON', +10536=>'ON', +10537=>'ON', +10538=>'ON', +10539=>'ON', +10540=>'ON', +10541=>'ON', +10542=>'ON', +10543=>'ON', +10544=>'ON', +10545=>'ON', +10546=>'ON', +10547=>'ON', +10548=>'ON', +10549=>'ON', +10550=>'ON', +10551=>'ON', +10552=>'ON', +10553=>'ON', +10554=>'ON', +10555=>'ON', +10556=>'ON', +10557=>'ON', +10558=>'ON', +10559=>'ON', +10560=>'ON', +10561=>'ON', +10562=>'ON', +10563=>'ON', +10564=>'ON', +10565=>'ON', +10566=>'ON', +10567=>'ON', +10568=>'ON', +10569=>'ON', +10570=>'ON', +10571=>'ON', +10572=>'ON', +10573=>'ON', +10574=>'ON', +10575=>'ON', +10576=>'ON', +10577=>'ON', +10578=>'ON', +10579=>'ON', +10580=>'ON', +10581=>'ON', +10582=>'ON', +10583=>'ON', +10584=>'ON', +10585=>'ON', +10586=>'ON', +10587=>'ON', +10588=>'ON', +10589=>'ON', +10590=>'ON', +10591=>'ON', +10592=>'ON', +10593=>'ON', +10594=>'ON', +10595=>'ON', +10596=>'ON', +10597=>'ON', +10598=>'ON', +10599=>'ON', +10600=>'ON', +10601=>'ON', +10602=>'ON', +10603=>'ON', +10604=>'ON', +10605=>'ON', +10606=>'ON', +10607=>'ON', +10608=>'ON', +10609=>'ON', +10610=>'ON', +10611=>'ON', +10612=>'ON', +10613=>'ON', +10614=>'ON', +10615=>'ON', +10616=>'ON', +10617=>'ON', +10618=>'ON', +10619=>'ON', +10620=>'ON', +10621=>'ON', +10622=>'ON', +10623=>'ON', +10624=>'ON', +10625=>'ON', +10626=>'ON', +10627=>'ON', +10628=>'ON', +10629=>'ON', +10630=>'ON', +10631=>'ON', +10632=>'ON', +10633=>'ON', +10634=>'ON', +10635=>'ON', +10636=>'ON', +10637=>'ON', +10638=>'ON', +10639=>'ON', +10640=>'ON', +10641=>'ON', +10642=>'ON', +10643=>'ON', +10644=>'ON', +10645=>'ON', +10646=>'ON', +10647=>'ON', +10648=>'ON', +10649=>'ON', +10650=>'ON', +10651=>'ON', +10652=>'ON', +10653=>'ON', +10654=>'ON', +10655=>'ON', +10656=>'ON', +10657=>'ON', +10658=>'ON', +10659=>'ON', +10660=>'ON', +10661=>'ON', +10662=>'ON', +10663=>'ON', +10664=>'ON', +10665=>'ON', +10666=>'ON', +10667=>'ON', +10668=>'ON', +10669=>'ON', +10670=>'ON', +10671=>'ON', +10672=>'ON', +10673=>'ON', +10674=>'ON', +10675=>'ON', +10676=>'ON', +10677=>'ON', +10678=>'ON', +10679=>'ON', +10680=>'ON', +10681=>'ON', +10682=>'ON', +10683=>'ON', +10684=>'ON', +10685=>'ON', +10686=>'ON', +10687=>'ON', +10688=>'ON', +10689=>'ON', +10690=>'ON', +10691=>'ON', +10692=>'ON', +10693=>'ON', +10694=>'ON', +10695=>'ON', +10696=>'ON', +10697=>'ON', +10698=>'ON', +10699=>'ON', +10700=>'ON', +10701=>'ON', +10702=>'ON', +10703=>'ON', +10704=>'ON', +10705=>'ON', +10706=>'ON', +10707=>'ON', +10708=>'ON', +10709=>'ON', +10710=>'ON', +10711=>'ON', +10712=>'ON', +10713=>'ON', +10714=>'ON', +10715=>'ON', +10716=>'ON', +10717=>'ON', +10718=>'ON', +10719=>'ON', +10720=>'ON', +10721=>'ON', +10722=>'ON', +10723=>'ON', +10724=>'ON', +10725=>'ON', +10726=>'ON', +10727=>'ON', +10728=>'ON', +10729=>'ON', +10730=>'ON', +10731=>'ON', +10732=>'ON', +10733=>'ON', +10734=>'ON', +10735=>'ON', +10736=>'ON', +10737=>'ON', +10738=>'ON', +10739=>'ON', +10740=>'ON', +10741=>'ON', +10742=>'ON', +10743=>'ON', +10744=>'ON', +10745=>'ON', +10746=>'ON', +10747=>'ON', +10748=>'ON', +10749=>'ON', +10750=>'ON', +10751=>'ON', +10752=>'ON', +10753=>'ON', +10754=>'ON', +10755=>'ON', +10756=>'ON', +10757=>'ON', +10758=>'ON', +10759=>'ON', +10760=>'ON', +10761=>'ON', +10762=>'ON', +10763=>'ON', +10764=>'ON', +10765=>'ON', +10766=>'ON', +10767=>'ON', +10768=>'ON', +10769=>'ON', +10770=>'ON', +10771=>'ON', +10772=>'ON', +10773=>'ON', +10774=>'ON', +10775=>'ON', +10776=>'ON', +10777=>'ON', +10778=>'ON', +10779=>'ON', +10780=>'ON', +10781=>'ON', +10782=>'ON', +10783=>'ON', +10784=>'ON', +10785=>'ON', +10786=>'ON', +10787=>'ON', +10788=>'ON', +10789=>'ON', +10790=>'ON', +10791=>'ON', +10792=>'ON', +10793=>'ON', +10794=>'ON', +10795=>'ON', +10796=>'ON', +10797=>'ON', +10798=>'ON', +10799=>'ON', +10800=>'ON', +10801=>'ON', +10802=>'ON', +10803=>'ON', +10804=>'ON', +10805=>'ON', +10806=>'ON', +10807=>'ON', +10808=>'ON', +10809=>'ON', +10810=>'ON', +10811=>'ON', +10812=>'ON', +10813=>'ON', +10814=>'ON', +10815=>'ON', +10816=>'ON', +10817=>'ON', +10818=>'ON', +10819=>'ON', +10820=>'ON', +10821=>'ON', +10822=>'ON', +10823=>'ON', +10824=>'ON', +10825=>'ON', +10826=>'ON', +10827=>'ON', +10828=>'ON', +10829=>'ON', +10830=>'ON', +10831=>'ON', +10832=>'ON', +10833=>'ON', +10834=>'ON', +10835=>'ON', +10836=>'ON', +10837=>'ON', +10838=>'ON', +10839=>'ON', +10840=>'ON', +10841=>'ON', +10842=>'ON', +10843=>'ON', +10844=>'ON', +10845=>'ON', +10846=>'ON', +10847=>'ON', +10848=>'ON', +10849=>'ON', +10850=>'ON', +10851=>'ON', +10852=>'ON', +10853=>'ON', +10854=>'ON', +10855=>'ON', +10856=>'ON', +10857=>'ON', +10858=>'ON', +10859=>'ON', +10860=>'ON', +10861=>'ON', +10862=>'ON', +10863=>'ON', +10864=>'ON', +10865=>'ON', +10866=>'ON', +10867=>'ON', +10868=>'ON', +10869=>'ON', +10870=>'ON', +10871=>'ON', +10872=>'ON', +10873=>'ON', +10874=>'ON', +10875=>'ON', +10876=>'ON', +10877=>'ON', +10878=>'ON', +10879=>'ON', +10880=>'ON', +10881=>'ON', +10882=>'ON', +10883=>'ON', +10884=>'ON', +10885=>'ON', +10886=>'ON', +10887=>'ON', +10888=>'ON', +10889=>'ON', +10890=>'ON', +10891=>'ON', +10892=>'ON', +10893=>'ON', +10894=>'ON', +10895=>'ON', +10896=>'ON', +10897=>'ON', +10898=>'ON', +10899=>'ON', +10900=>'ON', +10901=>'ON', +10902=>'ON', +10903=>'ON', +10904=>'ON', +10905=>'ON', +10906=>'ON', +10907=>'ON', +10908=>'ON', +10909=>'ON', +10910=>'ON', +10911=>'ON', +10912=>'ON', +10913=>'ON', +10914=>'ON', +10915=>'ON', +10916=>'ON', +10917=>'ON', +10918=>'ON', +10919=>'ON', +10920=>'ON', +10921=>'ON', +10922=>'ON', +10923=>'ON', +10924=>'ON', +10925=>'ON', +10926=>'ON', +10927=>'ON', +10928=>'ON', +10929=>'ON', +10930=>'ON', +10931=>'ON', +10932=>'ON', +10933=>'ON', +10934=>'ON', +10935=>'ON', +10936=>'ON', +10937=>'ON', +10938=>'ON', +10939=>'ON', +10940=>'ON', +10941=>'ON', +10942=>'ON', +10943=>'ON', +10944=>'ON', +10945=>'ON', +10946=>'ON', +10947=>'ON', +10948=>'ON', +10949=>'ON', +10950=>'ON', +10951=>'ON', +10952=>'ON', +10953=>'ON', +10954=>'ON', +10955=>'ON', +10956=>'ON', +10957=>'ON', +10958=>'ON', +10959=>'ON', +10960=>'ON', +10961=>'ON', +10962=>'ON', +10963=>'ON', +10964=>'ON', +10965=>'ON', +10966=>'ON', +10967=>'ON', +10968=>'ON', +10969=>'ON', +10970=>'ON', +10971=>'ON', +10972=>'ON', +10973=>'ON', +10974=>'ON', +10975=>'ON', +10976=>'ON', +10977=>'ON', +10978=>'ON', +10979=>'ON', +10980=>'ON', +10981=>'ON', +10982=>'ON', +10983=>'ON', +10984=>'ON', +10985=>'ON', +10986=>'ON', +10987=>'ON', +10988=>'ON', +10989=>'ON', +10990=>'ON', +10991=>'ON', +10992=>'ON', +10993=>'ON', +10994=>'ON', +10995=>'ON', +10996=>'ON', +10997=>'ON', +10998=>'ON', +10999=>'ON', +11000=>'ON', +11001=>'ON', +11002=>'ON', +11003=>'ON', +11004=>'ON', +11005=>'ON', +11006=>'ON', +11007=>'ON', +11008=>'ON', +11009=>'ON', +11010=>'ON', +11011=>'ON', +11012=>'ON', +11013=>'ON', +11014=>'ON', +11015=>'ON', +11016=>'ON', +11017=>'ON', +11018=>'ON', +11019=>'ON', +11020=>'ON', +11021=>'ON', +11022=>'ON', +11023=>'ON', +11024=>'ON', +11025=>'ON', +11026=>'ON', +11027=>'ON', +11028=>'ON', +11029=>'ON', +11030=>'ON', +11031=>'ON', +11032=>'ON', +11033=>'ON', +11034=>'ON', +11040=>'ON', +11041=>'ON', +11042=>'ON', +11043=>'ON', +11264=>'L', +11265=>'L', +11266=>'L', +11267=>'L', +11268=>'L', +11269=>'L', +11270=>'L', +11271=>'L', +11272=>'L', +11273=>'L', +11274=>'L', +11275=>'L', +11276=>'L', +11277=>'L', +11278=>'L', +11279=>'L', +11280=>'L', +11281=>'L', +11282=>'L', +11283=>'L', +11284=>'L', +11285=>'L', +11286=>'L', +11287=>'L', +11288=>'L', +11289=>'L', +11290=>'L', +11291=>'L', +11292=>'L', +11293=>'L', +11294=>'L', +11295=>'L', +11296=>'L', +11297=>'L', +11298=>'L', +11299=>'L', +11300=>'L', +11301=>'L', +11302=>'L', +11303=>'L', +11304=>'L', +11305=>'L', +11306=>'L', +11307=>'L', +11308=>'L', +11309=>'L', +11310=>'L', +11312=>'L', +11313=>'L', +11314=>'L', +11315=>'L', +11316=>'L', +11317=>'L', +11318=>'L', +11319=>'L', +11320=>'L', +11321=>'L', +11322=>'L', +11323=>'L', +11324=>'L', +11325=>'L', +11326=>'L', +11327=>'L', +11328=>'L', +11329=>'L', +11330=>'L', +11331=>'L', +11332=>'L', +11333=>'L', +11334=>'L', +11335=>'L', +11336=>'L', +11337=>'L', +11338=>'L', +11339=>'L', +11340=>'L', +11341=>'L', +11342=>'L', +11343=>'L', +11344=>'L', +11345=>'L', +11346=>'L', +11347=>'L', +11348=>'L', +11349=>'L', +11350=>'L', +11351=>'L', +11352=>'L', +11353=>'L', +11354=>'L', +11355=>'L', +11356=>'L', +11357=>'L', +11358=>'L', +11360=>'L', +11361=>'L', +11362=>'L', +11363=>'L', +11364=>'L', +11365=>'L', +11366=>'L', +11367=>'L', +11368=>'L', +11369=>'L', +11370=>'L', +11371=>'L', +11372=>'L', +11380=>'L', +11381=>'L', +11382=>'L', +11383=>'L', +11392=>'L', +11393=>'L', +11394=>'L', +11395=>'L', +11396=>'L', +11397=>'L', +11398=>'L', +11399=>'L', +11400=>'L', +11401=>'L', +11402=>'L', +11403=>'L', +11404=>'L', +11405=>'L', +11406=>'L', +11407=>'L', +11408=>'L', +11409=>'L', +11410=>'L', +11411=>'L', +11412=>'L', +11413=>'L', +11414=>'L', +11415=>'L', +11416=>'L', +11417=>'L', +11418=>'L', +11419=>'L', +11420=>'L', +11421=>'L', +11422=>'L', +11423=>'L', +11424=>'L', +11425=>'L', +11426=>'L', +11427=>'L', +11428=>'L', +11429=>'L', +11430=>'L', +11431=>'L', +11432=>'L', +11433=>'L', +11434=>'L', +11435=>'L', +11436=>'L', +11437=>'L', +11438=>'L', +11439=>'L', +11440=>'L', +11441=>'L', +11442=>'L', +11443=>'L', +11444=>'L', +11445=>'L', +11446=>'L', +11447=>'L', +11448=>'L', +11449=>'L', +11450=>'L', +11451=>'L', +11452=>'L', +11453=>'L', +11454=>'L', +11455=>'L', +11456=>'L', +11457=>'L', +11458=>'L', +11459=>'L', +11460=>'L', +11461=>'L', +11462=>'L', +11463=>'L', +11464=>'L', +11465=>'L', +11466=>'L', +11467=>'L', +11468=>'L', +11469=>'L', +11470=>'L', +11471=>'L', +11472=>'L', +11473=>'L', +11474=>'L', +11475=>'L', +11476=>'L', +11477=>'L', +11478=>'L', +11479=>'L', +11480=>'L', +11481=>'L', +11482=>'L', +11483=>'L', +11484=>'L', +11485=>'L', +11486=>'L', +11487=>'L', +11488=>'L', +11489=>'L', +11490=>'L', +11491=>'L', +11492=>'L', +11493=>'ON', +11494=>'ON', +11495=>'ON', +11496=>'ON', +11497=>'ON', +11498=>'ON', +11513=>'ON', +11514=>'ON', +11515=>'ON', +11516=>'ON', +11517=>'ON', +11518=>'ON', +11519=>'ON', +11520=>'L', +11521=>'L', +11522=>'L', +11523=>'L', +11524=>'L', +11525=>'L', +11526=>'L', +11527=>'L', +11528=>'L', +11529=>'L', +11530=>'L', +11531=>'L', +11532=>'L', +11533=>'L', +11534=>'L', +11535=>'L', +11536=>'L', +11537=>'L', +11538=>'L', +11539=>'L', +11540=>'L', +11541=>'L', +11542=>'L', +11543=>'L', +11544=>'L', +11545=>'L', +11546=>'L', +11547=>'L', +11548=>'L', +11549=>'L', +11550=>'L', +11551=>'L', +11552=>'L', +11553=>'L', +11554=>'L', +11555=>'L', +11556=>'L', +11557=>'L', +11568=>'L', +11569=>'L', +11570=>'L', +11571=>'L', +11572=>'L', +11573=>'L', +11574=>'L', +11575=>'L', +11576=>'L', +11577=>'L', +11578=>'L', +11579=>'L', +11580=>'L', +11581=>'L', +11582=>'L', +11583=>'L', +11584=>'L', +11585=>'L', +11586=>'L', +11587=>'L', +11588=>'L', +11589=>'L', +11590=>'L', +11591=>'L', +11592=>'L', +11593=>'L', +11594=>'L', +11595=>'L', +11596=>'L', +11597=>'L', +11598=>'L', +11599=>'L', +11600=>'L', +11601=>'L', +11602=>'L', +11603=>'L', +11604=>'L', +11605=>'L', +11606=>'L', +11607=>'L', +11608=>'L', +11609=>'L', +11610=>'L', +11611=>'L', +11612=>'L', +11613=>'L', +11614=>'L', +11615=>'L', +11616=>'L', +11617=>'L', +11618=>'L', +11619=>'L', +11620=>'L', +11621=>'L', +11631=>'L', +11648=>'L', +11649=>'L', +11650=>'L', +11651=>'L', +11652=>'L', +11653=>'L', +11654=>'L', +11655=>'L', +11656=>'L', +11657=>'L', +11658=>'L', +11659=>'L', +11660=>'L', +11661=>'L', +11662=>'L', +11663=>'L', +11664=>'L', +11665=>'L', +11666=>'L', +11667=>'L', +11668=>'L', +11669=>'L', +11670=>'L', +11680=>'L', +11681=>'L', +11682=>'L', +11683=>'L', +11684=>'L', +11685=>'L', +11686=>'L', +11688=>'L', +11689=>'L', +11690=>'L', +11691=>'L', +11692=>'L', +11693=>'L', +11694=>'L', +11696=>'L', +11697=>'L', +11698=>'L', +11699=>'L', +11700=>'L', +11701=>'L', +11702=>'L', +11704=>'L', +11705=>'L', +11706=>'L', +11707=>'L', +11708=>'L', +11709=>'L', +11710=>'L', +11712=>'L', +11713=>'L', +11714=>'L', +11715=>'L', +11716=>'L', +11717=>'L', +11718=>'L', +11720=>'L', +11721=>'L', +11722=>'L', +11723=>'L', +11724=>'L', +11725=>'L', +11726=>'L', +11728=>'L', +11729=>'L', +11730=>'L', +11731=>'L', +11732=>'L', +11733=>'L', +11734=>'L', +11736=>'L', +11737=>'L', +11738=>'L', +11739=>'L', +11740=>'L', +11741=>'L', +11742=>'L', +11776=>'ON', +11777=>'ON', +11778=>'ON', +11779=>'ON', +11780=>'ON', +11781=>'ON', +11782=>'ON', +11783=>'ON', +11784=>'ON', +11785=>'ON', +11786=>'ON', +11787=>'ON', +11788=>'ON', +11789=>'ON', +11790=>'ON', +11791=>'ON', +11792=>'ON', +11793=>'ON', +11794=>'ON', +11795=>'ON', +11796=>'ON', +11797=>'ON', +11798=>'ON', +11799=>'ON', +11804=>'ON', +11805=>'ON', +11904=>'ON', +11905=>'ON', +11906=>'ON', +11907=>'ON', +11908=>'ON', +11909=>'ON', +11910=>'ON', +11911=>'ON', +11912=>'ON', +11913=>'ON', +11914=>'ON', +11915=>'ON', +11916=>'ON', +11917=>'ON', +11918=>'ON', +11919=>'ON', +11920=>'ON', +11921=>'ON', +11922=>'ON', +11923=>'ON', +11924=>'ON', +11925=>'ON', +11926=>'ON', +11927=>'ON', +11928=>'ON', +11929=>'ON', +11931=>'ON', +11932=>'ON', +11933=>'ON', +11934=>'ON', +11935=>'ON', +11936=>'ON', +11937=>'ON', +11938=>'ON', +11939=>'ON', +11940=>'ON', +11941=>'ON', +11942=>'ON', +11943=>'ON', +11944=>'ON', +11945=>'ON', +11946=>'ON', +11947=>'ON', +11948=>'ON', +11949=>'ON', +11950=>'ON', +11951=>'ON', +11952=>'ON', +11953=>'ON', +11954=>'ON', +11955=>'ON', +11956=>'ON', +11957=>'ON', +11958=>'ON', +11959=>'ON', +11960=>'ON', +11961=>'ON', +11962=>'ON', +11963=>'ON', +11964=>'ON', +11965=>'ON', +11966=>'ON', +11967=>'ON', +11968=>'ON', +11969=>'ON', +11970=>'ON', +11971=>'ON', +11972=>'ON', +11973=>'ON', +11974=>'ON', +11975=>'ON', +11976=>'ON', +11977=>'ON', +11978=>'ON', +11979=>'ON', +11980=>'ON', +11981=>'ON', +11982=>'ON', +11983=>'ON', +11984=>'ON', +11985=>'ON', +11986=>'ON', +11987=>'ON', +11988=>'ON', +11989=>'ON', +11990=>'ON', +11991=>'ON', +11992=>'ON', +11993=>'ON', +11994=>'ON', +11995=>'ON', +11996=>'ON', +11997=>'ON', +11998=>'ON', +11999=>'ON', +12000=>'ON', +12001=>'ON', +12002=>'ON', +12003=>'ON', +12004=>'ON', +12005=>'ON', +12006=>'ON', +12007=>'ON', +12008=>'ON', +12009=>'ON', +12010=>'ON', +12011=>'ON', +12012=>'ON', +12013=>'ON', +12014=>'ON', +12015=>'ON', +12016=>'ON', +12017=>'ON', +12018=>'ON', +12019=>'ON', +12032=>'ON', +12033=>'ON', +12034=>'ON', +12035=>'ON', +12036=>'ON', +12037=>'ON', +12038=>'ON', +12039=>'ON', +12040=>'ON', +12041=>'ON', +12042=>'ON', +12043=>'ON', +12044=>'ON', +12045=>'ON', +12046=>'ON', +12047=>'ON', +12048=>'ON', +12049=>'ON', +12050=>'ON', +12051=>'ON', +12052=>'ON', +12053=>'ON', +12054=>'ON', +12055=>'ON', +12056=>'ON', +12057=>'ON', +12058=>'ON', +12059=>'ON', +12060=>'ON', +12061=>'ON', +12062=>'ON', +12063=>'ON', +12064=>'ON', +12065=>'ON', +12066=>'ON', +12067=>'ON', +12068=>'ON', +12069=>'ON', +12070=>'ON', +12071=>'ON', +12072=>'ON', +12073=>'ON', +12074=>'ON', +12075=>'ON', +12076=>'ON', +12077=>'ON', +12078=>'ON', +12079=>'ON', +12080=>'ON', +12081=>'ON', +12082=>'ON', +12083=>'ON', +12084=>'ON', +12085=>'ON', +12086=>'ON', +12087=>'ON', +12088=>'ON', +12089=>'ON', +12090=>'ON', +12091=>'ON', +12092=>'ON', +12093=>'ON', +12094=>'ON', +12095=>'ON', +12096=>'ON', +12097=>'ON', +12098=>'ON', +12099=>'ON', +12100=>'ON', +12101=>'ON', +12102=>'ON', +12103=>'ON', +12104=>'ON', +12105=>'ON', +12106=>'ON', +12107=>'ON', +12108=>'ON', +12109=>'ON', +12110=>'ON', +12111=>'ON', +12112=>'ON', +12113=>'ON', +12114=>'ON', +12115=>'ON', +12116=>'ON', +12117=>'ON', +12118=>'ON', +12119=>'ON', +12120=>'ON', +12121=>'ON', +12122=>'ON', +12123=>'ON', +12124=>'ON', +12125=>'ON', +12126=>'ON', +12127=>'ON', +12128=>'ON', +12129=>'ON', +12130=>'ON', +12131=>'ON', +12132=>'ON', +12133=>'ON', +12134=>'ON', +12135=>'ON', +12136=>'ON', +12137=>'ON', +12138=>'ON', +12139=>'ON', +12140=>'ON', +12141=>'ON', +12142=>'ON', +12143=>'ON', +12144=>'ON', +12145=>'ON', +12146=>'ON', +12147=>'ON', +12148=>'ON', +12149=>'ON', +12150=>'ON', +12151=>'ON', +12152=>'ON', +12153=>'ON', +12154=>'ON', +12155=>'ON', +12156=>'ON', +12157=>'ON', +12158=>'ON', +12159=>'ON', +12160=>'ON', +12161=>'ON', +12162=>'ON', +12163=>'ON', +12164=>'ON', +12165=>'ON', +12166=>'ON', +12167=>'ON', +12168=>'ON', +12169=>'ON', +12170=>'ON', +12171=>'ON', +12172=>'ON', +12173=>'ON', +12174=>'ON', +12175=>'ON', +12176=>'ON', +12177=>'ON', +12178=>'ON', +12179=>'ON', +12180=>'ON', +12181=>'ON', +12182=>'ON', +12183=>'ON', +12184=>'ON', +12185=>'ON', +12186=>'ON', +12187=>'ON', +12188=>'ON', +12189=>'ON', +12190=>'ON', +12191=>'ON', +12192=>'ON', +12193=>'ON', +12194=>'ON', +12195=>'ON', +12196=>'ON', +12197=>'ON', +12198=>'ON', +12199=>'ON', +12200=>'ON', +12201=>'ON', +12202=>'ON', +12203=>'ON', +12204=>'ON', +12205=>'ON', +12206=>'ON', +12207=>'ON', +12208=>'ON', +12209=>'ON', +12210=>'ON', +12211=>'ON', +12212=>'ON', +12213=>'ON', +12214=>'ON', +12215=>'ON', +12216=>'ON', +12217=>'ON', +12218=>'ON', +12219=>'ON', +12220=>'ON', +12221=>'ON', +12222=>'ON', +12223=>'ON', +12224=>'ON', +12225=>'ON', +12226=>'ON', +12227=>'ON', +12228=>'ON', +12229=>'ON', +12230=>'ON', +12231=>'ON', +12232=>'ON', +12233=>'ON', +12234=>'ON', +12235=>'ON', +12236=>'ON', +12237=>'ON', +12238=>'ON', +12239=>'ON', +12240=>'ON', +12241=>'ON', +12242=>'ON', +12243=>'ON', +12244=>'ON', +12245=>'ON', +12272=>'ON', +12273=>'ON', +12274=>'ON', +12275=>'ON', +12276=>'ON', +12277=>'ON', +12278=>'ON', +12279=>'ON', +12280=>'ON', +12281=>'ON', +12282=>'ON', +12283=>'ON', +12288=>'WS', +12289=>'ON', +12290=>'ON', +12291=>'ON', +12292=>'ON', +12293=>'L', +12294=>'L', +12295=>'L', +12296=>'ON', +12297=>'ON', +12298=>'ON', +12299=>'ON', +12300=>'ON', +12301=>'ON', +12302=>'ON', +12303=>'ON', +12304=>'ON', +12305=>'ON', +12306=>'ON', +12307=>'ON', +12308=>'ON', +12309=>'ON', +12310=>'ON', +12311=>'ON', +12312=>'ON', +12313=>'ON', +12314=>'ON', +12315=>'ON', +12316=>'ON', +12317=>'ON', +12318=>'ON', +12319=>'ON', +12320=>'ON', +12321=>'L', +12322=>'L', +12323=>'L', +12324=>'L', +12325=>'L', +12326=>'L', +12327=>'L', +12328=>'L', +12329=>'L', +12330=>'NSM', +12331=>'NSM', +12332=>'NSM', +12333=>'NSM', +12334=>'NSM', +12335=>'NSM', +12336=>'ON', +12337=>'L', +12338=>'L', +12339=>'L', +12340=>'L', +12341=>'L', +12342=>'ON', +12343=>'ON', +12344=>'L', +12345=>'L', +12346=>'L', +12347=>'L', +12348=>'L', +12349=>'ON', +12350=>'ON', +12351=>'ON', +12353=>'L', +12354=>'L', +12355=>'L', +12356=>'L', +12357=>'L', +12358=>'L', +12359=>'L', +12360=>'L', +12361=>'L', +12362=>'L', +12363=>'L', +12364=>'L', +12365=>'L', +12366=>'L', +12367=>'L', +12368=>'L', +12369=>'L', +12370=>'L', +12371=>'L', +12372=>'L', +12373=>'L', +12374=>'L', +12375=>'L', +12376=>'L', +12377=>'L', +12378=>'L', +12379=>'L', +12380=>'L', +12381=>'L', +12382=>'L', +12383=>'L', +12384=>'L', +12385=>'L', +12386=>'L', +12387=>'L', +12388=>'L', +12389=>'L', +12390=>'L', +12391=>'L', +12392=>'L', +12393=>'L', +12394=>'L', +12395=>'L', +12396=>'L', +12397=>'L', +12398=>'L', +12399=>'L', +12400=>'L', +12401=>'L', +12402=>'L', +12403=>'L', +12404=>'L', +12405=>'L', +12406=>'L', +12407=>'L', +12408=>'L', +12409=>'L', +12410=>'L', +12411=>'L', +12412=>'L', +12413=>'L', +12414=>'L', +12415=>'L', +12416=>'L', +12417=>'L', +12418=>'L', +12419=>'L', +12420=>'L', +12421=>'L', +12422=>'L', +12423=>'L', +12424=>'L', +12425=>'L', +12426=>'L', +12427=>'L', +12428=>'L', +12429=>'L', +12430=>'L', +12431=>'L', +12432=>'L', +12433=>'L', +12434=>'L', +12435=>'L', +12436=>'L', +12437=>'L', +12438=>'L', +12441=>'NSM', +12442=>'NSM', +12443=>'ON', +12444=>'ON', +12445=>'L', +12446=>'L', +12447=>'L', +12448=>'ON', +12449=>'L', +12450=>'L', +12451=>'L', +12452=>'L', +12453=>'L', +12454=>'L', +12455=>'L', +12456=>'L', +12457=>'L', +12458=>'L', +12459=>'L', +12460=>'L', +12461=>'L', +12462=>'L', +12463=>'L', +12464=>'L', +12465=>'L', +12466=>'L', +12467=>'L', +12468=>'L', +12469=>'L', +12470=>'L', +12471=>'L', +12472=>'L', +12473=>'L', +12474=>'L', +12475=>'L', +12476=>'L', +12477=>'L', +12478=>'L', +12479=>'L', +12480=>'L', +12481=>'L', +12482=>'L', +12483=>'L', +12484=>'L', +12485=>'L', +12486=>'L', +12487=>'L', +12488=>'L', +12489=>'L', +12490=>'L', +12491=>'L', +12492=>'L', +12493=>'L', +12494=>'L', +12495=>'L', +12496=>'L', +12497=>'L', +12498=>'L', +12499=>'L', +12500=>'L', +12501=>'L', +12502=>'L', +12503=>'L', +12504=>'L', +12505=>'L', +12506=>'L', +12507=>'L', +12508=>'L', +12509=>'L', +12510=>'L', +12511=>'L', +12512=>'L', +12513=>'L', +12514=>'L', +12515=>'L', +12516=>'L', +12517=>'L', +12518=>'L', +12519=>'L', +12520=>'L', +12521=>'L', +12522=>'L', +12523=>'L', +12524=>'L', +12525=>'L', +12526=>'L', +12527=>'L', +12528=>'L', +12529=>'L', +12530=>'L', +12531=>'L', +12532=>'L', +12533=>'L', +12534=>'L', +12535=>'L', +12536=>'L', +12537=>'L', +12538=>'L', +12539=>'ON', +12540=>'L', +12541=>'L', +12542=>'L', +12543=>'L', +12549=>'L', +12550=>'L', +12551=>'L', +12552=>'L', +12553=>'L', +12554=>'L', +12555=>'L', +12556=>'L', +12557=>'L', +12558=>'L', +12559=>'L', +12560=>'L', +12561=>'L', +12562=>'L', +12563=>'L', +12564=>'L', +12565=>'L', +12566=>'L', +12567=>'L', +12568=>'L', +12569=>'L', +12570=>'L', +12571=>'L', +12572=>'L', +12573=>'L', +12574=>'L', +12575=>'L', +12576=>'L', +12577=>'L', +12578=>'L', +12579=>'L', +12580=>'L', +12581=>'L', +12582=>'L', +12583=>'L', +12584=>'L', +12585=>'L', +12586=>'L', +12587=>'L', +12588=>'L', +12593=>'L', +12594=>'L', +12595=>'L', +12596=>'L', +12597=>'L', +12598=>'L', +12599=>'L', +12600=>'L', +12601=>'L', +12602=>'L', +12603=>'L', +12604=>'L', +12605=>'L', +12606=>'L', +12607=>'L', +12608=>'L', +12609=>'L', +12610=>'L', +12611=>'L', +12612=>'L', +12613=>'L', +12614=>'L', +12615=>'L', +12616=>'L', +12617=>'L', +12618=>'L', +12619=>'L', +12620=>'L', +12621=>'L', +12622=>'L', +12623=>'L', +12624=>'L', +12625=>'L', +12626=>'L', +12627=>'L', +12628=>'L', +12629=>'L', +12630=>'L', +12631=>'L', +12632=>'L', +12633=>'L', +12634=>'L', +12635=>'L', +12636=>'L', +12637=>'L', +12638=>'L', +12639=>'L', +12640=>'L', +12641=>'L', +12642=>'L', +12643=>'L', +12644=>'L', +12645=>'L', +12646=>'L', +12647=>'L', +12648=>'L', +12649=>'L', +12650=>'L', +12651=>'L', +12652=>'L', +12653=>'L', +12654=>'L', +12655=>'L', +12656=>'L', +12657=>'L', +12658=>'L', +12659=>'L', +12660=>'L', +12661=>'L', +12662=>'L', +12663=>'L', +12664=>'L', +12665=>'L', +12666=>'L', +12667=>'L', +12668=>'L', +12669=>'L', +12670=>'L', +12671=>'L', +12672=>'L', +12673=>'L', +12674=>'L', +12675=>'L', +12676=>'L', +12677=>'L', +12678=>'L', +12679=>'L', +12680=>'L', +12681=>'L', +12682=>'L', +12683=>'L', +12684=>'L', +12685=>'L', +12686=>'L', +12688=>'L', +12689=>'L', +12690=>'L', +12691=>'L', +12692=>'L', +12693=>'L', +12694=>'L', +12695=>'L', +12696=>'L', +12697=>'L', +12698=>'L', +12699=>'L', +12700=>'L', +12701=>'L', +12702=>'L', +12703=>'L', +12704=>'L', +12705=>'L', +12706=>'L', +12707=>'L', +12708=>'L', +12709=>'L', +12710=>'L', +12711=>'L', +12712=>'L', +12713=>'L', +12714=>'L', +12715=>'L', +12716=>'L', +12717=>'L', +12718=>'L', +12719=>'L', +12720=>'L', +12721=>'L', +12722=>'L', +12723=>'L', +12724=>'L', +12725=>'L', +12726=>'L', +12727=>'L', +12736=>'ON', +12737=>'ON', +12738=>'ON', +12739=>'ON', +12740=>'ON', +12741=>'ON', +12742=>'ON', +12743=>'ON', +12744=>'ON', +12745=>'ON', +12746=>'ON', +12747=>'ON', +12748=>'ON', +12749=>'ON', +12750=>'ON', +12751=>'ON', +12784=>'L', +12785=>'L', +12786=>'L', +12787=>'L', +12788=>'L', +12789=>'L', +12790=>'L', +12791=>'L', +12792=>'L', +12793=>'L', +12794=>'L', +12795=>'L', +12796=>'L', +12797=>'L', +12798=>'L', +12799=>'L', +12800=>'L', +12801=>'L', +12802=>'L', +12803=>'L', +12804=>'L', +12805=>'L', +12806=>'L', +12807=>'L', +12808=>'L', +12809=>'L', +12810=>'L', +12811=>'L', +12812=>'L', +12813=>'L', +12814=>'L', +12815=>'L', +12816=>'L', +12817=>'L', +12818=>'L', +12819=>'L', +12820=>'L', +12821=>'L', +12822=>'L', +12823=>'L', +12824=>'L', +12825=>'L', +12826=>'L', +12827=>'L', +12828=>'L', +12829=>'ON', +12830=>'ON', +12832=>'L', +12833=>'L', +12834=>'L', +12835=>'L', +12836=>'L', +12837=>'L', +12838=>'L', +12839=>'L', +12840=>'L', +12841=>'L', +12842=>'L', +12843=>'L', +12844=>'L', +12845=>'L', +12846=>'L', +12847=>'L', +12848=>'L', +12849=>'L', +12850=>'L', +12851=>'L', +12852=>'L', +12853=>'L', +12854=>'L', +12855=>'L', +12856=>'L', +12857=>'L', +12858=>'L', +12859=>'L', +12860=>'L', +12861=>'L', +12862=>'L', +12863=>'L', +12864=>'L', +12865=>'L', +12866=>'L', +12867=>'L', +12880=>'ON', +12881=>'ON', +12882=>'ON', +12883=>'ON', +12884=>'ON', +12885=>'ON', +12886=>'ON', +12887=>'ON', +12888=>'ON', +12889=>'ON', +12890=>'ON', +12891=>'ON', +12892=>'ON', +12893=>'ON', +12894=>'ON', +12895=>'ON', +12896=>'L', +12897=>'L', +12898=>'L', +12899=>'L', +12900=>'L', +12901=>'L', +12902=>'L', +12903=>'L', +12904=>'L', +12905=>'L', +12906=>'L', +12907=>'L', +12908=>'L', +12909=>'L', +12910=>'L', +12911=>'L', +12912=>'L', +12913=>'L', +12914=>'L', +12915=>'L', +12916=>'L', +12917=>'L', +12918=>'L', +12919=>'L', +12920=>'L', +12921=>'L', +12922=>'L', +12923=>'L', +12924=>'ON', +12925=>'ON', +12926=>'ON', +12927=>'L', +12928=>'L', +12929=>'L', +12930=>'L', +12931=>'L', +12932=>'L', +12933=>'L', +12934=>'L', +12935=>'L', +12936=>'L', +12937=>'L', +12938=>'L', +12939=>'L', +12940=>'L', +12941=>'L', +12942=>'L', +12943=>'L', +12944=>'L', +12945=>'L', +12946=>'L', +12947=>'L', +12948=>'L', +12949=>'L', +12950=>'L', +12951=>'L', +12952=>'L', +12953=>'L', +12954=>'L', +12955=>'L', +12956=>'L', +12957=>'L', +12958=>'L', +12959=>'L', +12960=>'L', +12961=>'L', +12962=>'L', +12963=>'L', +12964=>'L', +12965=>'L', +12966=>'L', +12967=>'L', +12968=>'L', +12969=>'L', +12970=>'L', +12971=>'L', +12972=>'L', +12973=>'L', +12974=>'L', +12975=>'L', +12976=>'L', +12977=>'ON', +12978=>'ON', +12979=>'ON', +12980=>'ON', +12981=>'ON', +12982=>'ON', +12983=>'ON', +12984=>'ON', +12985=>'ON', +12986=>'ON', +12987=>'ON', +12988=>'ON', +12989=>'ON', +12990=>'ON', +12991=>'ON', +12992=>'L', +12993=>'L', +12994=>'L', +12995=>'L', +12996=>'L', +12997=>'L', +12998=>'L', +12999=>'L', +13000=>'L', +13001=>'L', +13002=>'L', +13003=>'L', +13004=>'ON', +13005=>'ON', +13006=>'ON', +13007=>'ON', +13008=>'L', +13009=>'L', +13010=>'L', +13011=>'L', +13012=>'L', +13013=>'L', +13014=>'L', +13015=>'L', +13016=>'L', +13017=>'L', +13018=>'L', +13019=>'L', +13020=>'L', +13021=>'L', +13022=>'L', +13023=>'L', +13024=>'L', +13025=>'L', +13026=>'L', +13027=>'L', +13028=>'L', +13029=>'L', +13030=>'L', +13031=>'L', +13032=>'L', +13033=>'L', +13034=>'L', +13035=>'L', +13036=>'L', +13037=>'L', +13038=>'L', +13039=>'L', +13040=>'L', +13041=>'L', +13042=>'L', +13043=>'L', +13044=>'L', +13045=>'L', +13046=>'L', +13047=>'L', +13048=>'L', +13049=>'L', +13050=>'L', +13051=>'L', +13052=>'L', +13053=>'L', +13054=>'L', +13056=>'L', +13057=>'L', +13058=>'L', +13059=>'L', +13060=>'L', +13061=>'L', +13062=>'L', +13063=>'L', +13064=>'L', +13065=>'L', +13066=>'L', +13067=>'L', +13068=>'L', +13069=>'L', +13070=>'L', +13071=>'L', +13072=>'L', +13073=>'L', +13074=>'L', +13075=>'L', +13076=>'L', +13077=>'L', +13078=>'L', +13079=>'L', +13080=>'L', +13081=>'L', +13082=>'L', +13083=>'L', +13084=>'L', +13085=>'L', +13086=>'L', +13087=>'L', +13088=>'L', +13089=>'L', +13090=>'L', +13091=>'L', +13092=>'L', +13093=>'L', +13094=>'L', +13095=>'L', +13096=>'L', +13097=>'L', +13098=>'L', +13099=>'L', +13100=>'L', +13101=>'L', +13102=>'L', +13103=>'L', +13104=>'L', +13105=>'L', +13106=>'L', +13107=>'L', +13108=>'L', +13109=>'L', +13110=>'L', +13111=>'L', +13112=>'L', +13113=>'L', +13114=>'L', +13115=>'L', +13116=>'L', +13117=>'L', +13118=>'L', +13119=>'L', +13120=>'L', +13121=>'L', +13122=>'L', +13123=>'L', +13124=>'L', +13125=>'L', +13126=>'L', +13127=>'L', +13128=>'L', +13129=>'L', +13130=>'L', +13131=>'L', +13132=>'L', +13133=>'L', +13134=>'L', +13135=>'L', +13136=>'L', +13137=>'L', +13138=>'L', +13139=>'L', +13140=>'L', +13141=>'L', +13142=>'L', +13143=>'L', +13144=>'L', +13145=>'L', +13146=>'L', +13147=>'L', +13148=>'L', +13149=>'L', +13150=>'L', +13151=>'L', +13152=>'L', +13153=>'L', +13154=>'L', +13155=>'L', +13156=>'L', +13157=>'L', +13158=>'L', +13159=>'L', +13160=>'L', +13161=>'L', +13162=>'L', +13163=>'L', +13164=>'L', +13165=>'L', +13166=>'L', +13167=>'L', +13168=>'L', +13169=>'L', +13170=>'L', +13171=>'L', +13172=>'L', +13173=>'L', +13174=>'L', +13175=>'ON', +13176=>'ON', +13177=>'ON', +13178=>'ON', +13179=>'L', +13180=>'L', +13181=>'L', +13182=>'L', +13183=>'L', +13184=>'L', +13185=>'L', +13186=>'L', +13187=>'L', +13188=>'L', +13189=>'L', +13190=>'L', +13191=>'L', +13192=>'L', +13193=>'L', +13194=>'L', +13195=>'L', +13196=>'L', +13197=>'L', +13198=>'L', +13199=>'L', +13200=>'L', +13201=>'L', +13202=>'L', +13203=>'L', +13204=>'L', +13205=>'L', +13206=>'L', +13207=>'L', +13208=>'L', +13209=>'L', +13210=>'L', +13211=>'L', +13212=>'L', +13213=>'L', +13214=>'L', +13215=>'L', +13216=>'L', +13217=>'L', +13218=>'L', +13219=>'L', +13220=>'L', +13221=>'L', +13222=>'L', +13223=>'L', +13224=>'L', +13225=>'L', +13226=>'L', +13227=>'L', +13228=>'L', +13229=>'L', +13230=>'L', +13231=>'L', +13232=>'L', +13233=>'L', +13234=>'L', +13235=>'L', +13236=>'L', +13237=>'L', +13238=>'L', +13239=>'L', +13240=>'L', +13241=>'L', +13242=>'L', +13243=>'L', +13244=>'L', +13245=>'L', +13246=>'L', +13247=>'L', +13248=>'L', +13249=>'L', +13250=>'L', +13251=>'L', +13252=>'L', +13253=>'L', +13254=>'L', +13255=>'L', +13256=>'L', +13257=>'L', +13258=>'L', +13259=>'L', +13260=>'L', +13261=>'L', +13262=>'L', +13263=>'L', +13264=>'L', +13265=>'L', +13266=>'L', +13267=>'L', +13268=>'L', +13269=>'L', +13270=>'L', +13271=>'L', +13272=>'L', +13273=>'L', +13274=>'L', +13275=>'L', +13276=>'L', +13277=>'L', +13278=>'ON', +13279=>'ON', +13280=>'L', +13281=>'L', +13282=>'L', +13283=>'L', +13284=>'L', +13285=>'L', +13286=>'L', +13287=>'L', +13288=>'L', +13289=>'L', +13290=>'L', +13291=>'L', +13292=>'L', +13293=>'L', +13294=>'L', +13295=>'L', +13296=>'L', +13297=>'L', +13298=>'L', +13299=>'L', +13300=>'L', +13301=>'L', +13302=>'L', +13303=>'L', +13304=>'L', +13305=>'L', +13306=>'L', +13307=>'L', +13308=>'L', +13309=>'L', +13310=>'L', +13311=>'ON', +13312=>'L', +19893=>'L', +19904=>'ON', +19905=>'ON', +19906=>'ON', +19907=>'ON', +19908=>'ON', +19909=>'ON', +19910=>'ON', +19911=>'ON', +19912=>'ON', +19913=>'ON', +19914=>'ON', +19915=>'ON', +19916=>'ON', +19917=>'ON', +19918=>'ON', +19919=>'ON', +19920=>'ON', +19921=>'ON', +19922=>'ON', +19923=>'ON', +19924=>'ON', +19925=>'ON', +19926=>'ON', +19927=>'ON', +19928=>'ON', +19929=>'ON', +19930=>'ON', +19931=>'ON', +19932=>'ON', +19933=>'ON', +19934=>'ON', +19935=>'ON', +19936=>'ON', +19937=>'ON', +19938=>'ON', +19939=>'ON', +19940=>'ON', +19941=>'ON', +19942=>'ON', +19943=>'ON', +19944=>'ON', +19945=>'ON', +19946=>'ON', +19947=>'ON', +19948=>'ON', +19949=>'ON', +19950=>'ON', +19951=>'ON', +19952=>'ON', +19953=>'ON', +19954=>'ON', +19955=>'ON', +19956=>'ON', +19957=>'ON', +19958=>'ON', +19959=>'ON', +19960=>'ON', +19961=>'ON', +19962=>'ON', +19963=>'ON', +19964=>'ON', +19965=>'ON', +19966=>'ON', +19967=>'ON', +19968=>'L', +40891=>'L', +40960=>'L', +40961=>'L', +40962=>'L', +40963=>'L', +40964=>'L', +40965=>'L', +40966=>'L', +40967=>'L', +40968=>'L', +40969=>'L', +40970=>'L', +40971=>'L', +40972=>'L', +40973=>'L', +40974=>'L', +40975=>'L', +40976=>'L', +40977=>'L', +40978=>'L', +40979=>'L', +40980=>'L', +40981=>'L', +40982=>'L', +40983=>'L', +40984=>'L', +40985=>'L', +40986=>'L', +40987=>'L', +40988=>'L', +40989=>'L', +40990=>'L', +40991=>'L', +40992=>'L', +40993=>'L', +40994=>'L', +40995=>'L', +40996=>'L', +40997=>'L', +40998=>'L', +40999=>'L', +41000=>'L', +41001=>'L', +41002=>'L', +41003=>'L', +41004=>'L', +41005=>'L', +41006=>'L', +41007=>'L', +41008=>'L', +41009=>'L', +41010=>'L', +41011=>'L', +41012=>'L', +41013=>'L', +41014=>'L', +41015=>'L', +41016=>'L', +41017=>'L', +41018=>'L', +41019=>'L', +41020=>'L', +41021=>'L', +41022=>'L', +41023=>'L', +41024=>'L', +41025=>'L', +41026=>'L', +41027=>'L', +41028=>'L', +41029=>'L', +41030=>'L', +41031=>'L', +41032=>'L', +41033=>'L', +41034=>'L', +41035=>'L', +41036=>'L', +41037=>'L', +41038=>'L', +41039=>'L', +41040=>'L', +41041=>'L', +41042=>'L', +41043=>'L', +41044=>'L', +41045=>'L', +41046=>'L', +41047=>'L', +41048=>'L', +41049=>'L', +41050=>'L', +41051=>'L', +41052=>'L', +41053=>'L', +41054=>'L', +41055=>'L', +41056=>'L', +41057=>'L', +41058=>'L', +41059=>'L', +41060=>'L', +41061=>'L', +41062=>'L', +41063=>'L', +41064=>'L', +41065=>'L', +41066=>'L', +41067=>'L', +41068=>'L', +41069=>'L', +41070=>'L', +41071=>'L', +41072=>'L', +41073=>'L', +41074=>'L', +41075=>'L', +41076=>'L', +41077=>'L', +41078=>'L', +41079=>'L', +41080=>'L', +41081=>'L', +41082=>'L', +41083=>'L', +41084=>'L', +41085=>'L', +41086=>'L', +41087=>'L', +41088=>'L', +41089=>'L', +41090=>'L', +41091=>'L', +41092=>'L', +41093=>'L', +41094=>'L', +41095=>'L', +41096=>'L', +41097=>'L', +41098=>'L', +41099=>'L', +41100=>'L', +41101=>'L', +41102=>'L', +41103=>'L', +41104=>'L', +41105=>'L', +41106=>'L', +41107=>'L', +41108=>'L', +41109=>'L', +41110=>'L', +41111=>'L', +41112=>'L', +41113=>'L', +41114=>'L', +41115=>'L', +41116=>'L', +41117=>'L', +41118=>'L', +41119=>'L', +41120=>'L', +41121=>'L', +41122=>'L', +41123=>'L', +41124=>'L', +41125=>'L', +41126=>'L', +41127=>'L', +41128=>'L', +41129=>'L', +41130=>'L', +41131=>'L', +41132=>'L', +41133=>'L', +41134=>'L', +41135=>'L', +41136=>'L', +41137=>'L', +41138=>'L', +41139=>'L', +41140=>'L', +41141=>'L', +41142=>'L', +41143=>'L', +41144=>'L', +41145=>'L', +41146=>'L', +41147=>'L', +41148=>'L', +41149=>'L', +41150=>'L', +41151=>'L', +41152=>'L', +41153=>'L', +41154=>'L', +41155=>'L', +41156=>'L', +41157=>'L', +41158=>'L', +41159=>'L', +41160=>'L', +41161=>'L', +41162=>'L', +41163=>'L', +41164=>'L', +41165=>'L', +41166=>'L', +41167=>'L', +41168=>'L', +41169=>'L', +41170=>'L', +41171=>'L', +41172=>'L', +41173=>'L', +41174=>'L', +41175=>'L', +41176=>'L', +41177=>'L', +41178=>'L', +41179=>'L', +41180=>'L', +41181=>'L', +41182=>'L', +41183=>'L', +41184=>'L', +41185=>'L', +41186=>'L', +41187=>'L', +41188=>'L', +41189=>'L', +41190=>'L', +41191=>'L', +41192=>'L', +41193=>'L', +41194=>'L', +41195=>'L', +41196=>'L', +41197=>'L', +41198=>'L', +41199=>'L', +41200=>'L', +41201=>'L', +41202=>'L', +41203=>'L', +41204=>'L', +41205=>'L', +41206=>'L', +41207=>'L', +41208=>'L', +41209=>'L', +41210=>'L', +41211=>'L', +41212=>'L', +41213=>'L', +41214=>'L', +41215=>'L', +41216=>'L', +41217=>'L', +41218=>'L', +41219=>'L', +41220=>'L', +41221=>'L', +41222=>'L', +41223=>'L', +41224=>'L', +41225=>'L', +41226=>'L', +41227=>'L', +41228=>'L', +41229=>'L', +41230=>'L', +41231=>'L', +41232=>'L', +41233=>'L', +41234=>'L', +41235=>'L', +41236=>'L', +41237=>'L', +41238=>'L', +41239=>'L', +41240=>'L', +41241=>'L', +41242=>'L', +41243=>'L', +41244=>'L', +41245=>'L', +41246=>'L', +41247=>'L', +41248=>'L', +41249=>'L', +41250=>'L', +41251=>'L', +41252=>'L', +41253=>'L', +41254=>'L', +41255=>'L', +41256=>'L', +41257=>'L', +41258=>'L', +41259=>'L', +41260=>'L', +41261=>'L', +41262=>'L', +41263=>'L', +41264=>'L', +41265=>'L', +41266=>'L', +41267=>'L', +41268=>'L', +41269=>'L', +41270=>'L', +41271=>'L', +41272=>'L', +41273=>'L', +41274=>'L', +41275=>'L', +41276=>'L', +41277=>'L', +41278=>'L', +41279=>'L', +41280=>'L', +41281=>'L', +41282=>'L', +41283=>'L', +41284=>'L', +41285=>'L', +41286=>'L', +41287=>'L', +41288=>'L', +41289=>'L', +41290=>'L', +41291=>'L', +41292=>'L', +41293=>'L', +41294=>'L', +41295=>'L', +41296=>'L', +41297=>'L', +41298=>'L', +41299=>'L', +41300=>'L', +41301=>'L', +41302=>'L', +41303=>'L', +41304=>'L', +41305=>'L', +41306=>'L', +41307=>'L', +41308=>'L', +41309=>'L', +41310=>'L', +41311=>'L', +41312=>'L', +41313=>'L', +41314=>'L', +41315=>'L', +41316=>'L', +41317=>'L', +41318=>'L', +41319=>'L', +41320=>'L', +41321=>'L', +41322=>'L', +41323=>'L', +41324=>'L', +41325=>'L', +41326=>'L', +41327=>'L', +41328=>'L', +41329=>'L', +41330=>'L', +41331=>'L', +41332=>'L', +41333=>'L', +41334=>'L', +41335=>'L', +41336=>'L', +41337=>'L', +41338=>'L', +41339=>'L', +41340=>'L', +41341=>'L', +41342=>'L', +41343=>'L', +41344=>'L', +41345=>'L', +41346=>'L', +41347=>'L', +41348=>'L', +41349=>'L', +41350=>'L', +41351=>'L', +41352=>'L', +41353=>'L', +41354=>'L', +41355=>'L', +41356=>'L', +41357=>'L', +41358=>'L', +41359=>'L', +41360=>'L', +41361=>'L', +41362=>'L', +41363=>'L', +41364=>'L', +41365=>'L', +41366=>'L', +41367=>'L', +41368=>'L', +41369=>'L', +41370=>'L', +41371=>'L', +41372=>'L', +41373=>'L', +41374=>'L', +41375=>'L', +41376=>'L', +41377=>'L', +41378=>'L', +41379=>'L', +41380=>'L', +41381=>'L', +41382=>'L', +41383=>'L', +41384=>'L', +41385=>'L', +41386=>'L', +41387=>'L', +41388=>'L', +41389=>'L', +41390=>'L', +41391=>'L', +41392=>'L', +41393=>'L', +41394=>'L', +41395=>'L', +41396=>'L', +41397=>'L', +41398=>'L', +41399=>'L', +41400=>'L', +41401=>'L', +41402=>'L', +41403=>'L', +41404=>'L', +41405=>'L', +41406=>'L', +41407=>'L', +41408=>'L', +41409=>'L', +41410=>'L', +41411=>'L', +41412=>'L', +41413=>'L', +41414=>'L', +41415=>'L', +41416=>'L', +41417=>'L', +41418=>'L', +41419=>'L', +41420=>'L', +41421=>'L', +41422=>'L', +41423=>'L', +41424=>'L', +41425=>'L', +41426=>'L', +41427=>'L', +41428=>'L', +41429=>'L', +41430=>'L', +41431=>'L', +41432=>'L', +41433=>'L', +41434=>'L', +41435=>'L', +41436=>'L', +41437=>'L', +41438=>'L', +41439=>'L', +41440=>'L', +41441=>'L', +41442=>'L', +41443=>'L', +41444=>'L', +41445=>'L', +41446=>'L', +41447=>'L', +41448=>'L', +41449=>'L', +41450=>'L', +41451=>'L', +41452=>'L', +41453=>'L', +41454=>'L', +41455=>'L', +41456=>'L', +41457=>'L', +41458=>'L', +41459=>'L', +41460=>'L', +41461=>'L', +41462=>'L', +41463=>'L', +41464=>'L', +41465=>'L', +41466=>'L', +41467=>'L', +41468=>'L', +41469=>'L', +41470=>'L', +41471=>'L', +41472=>'L', +41473=>'L', +41474=>'L', +41475=>'L', +41476=>'L', +41477=>'L', +41478=>'L', +41479=>'L', +41480=>'L', +41481=>'L', +41482=>'L', +41483=>'L', +41484=>'L', +41485=>'L', +41486=>'L', +41487=>'L', +41488=>'L', +41489=>'L', +41490=>'L', +41491=>'L', +41492=>'L', +41493=>'L', +41494=>'L', +41495=>'L', +41496=>'L', +41497=>'L', +41498=>'L', +41499=>'L', +41500=>'L', +41501=>'L', +41502=>'L', +41503=>'L', +41504=>'L', +41505=>'L', +41506=>'L', +41507=>'L', +41508=>'L', +41509=>'L', +41510=>'L', +41511=>'L', +41512=>'L', +41513=>'L', +41514=>'L', +41515=>'L', +41516=>'L', +41517=>'L', +41518=>'L', +41519=>'L', +41520=>'L', +41521=>'L', +41522=>'L', +41523=>'L', +41524=>'L', +41525=>'L', +41526=>'L', +41527=>'L', +41528=>'L', +41529=>'L', +41530=>'L', +41531=>'L', +41532=>'L', +41533=>'L', +41534=>'L', +41535=>'L', +41536=>'L', +41537=>'L', +41538=>'L', +41539=>'L', +41540=>'L', +41541=>'L', +41542=>'L', +41543=>'L', +41544=>'L', +41545=>'L', +41546=>'L', +41547=>'L', +41548=>'L', +41549=>'L', +41550=>'L', +41551=>'L', +41552=>'L', +41553=>'L', +41554=>'L', +41555=>'L', +41556=>'L', +41557=>'L', +41558=>'L', +41559=>'L', +41560=>'L', +41561=>'L', +41562=>'L', +41563=>'L', +41564=>'L', +41565=>'L', +41566=>'L', +41567=>'L', +41568=>'L', +41569=>'L', +41570=>'L', +41571=>'L', +41572=>'L', +41573=>'L', +41574=>'L', +41575=>'L', +41576=>'L', +41577=>'L', +41578=>'L', +41579=>'L', +41580=>'L', +41581=>'L', +41582=>'L', +41583=>'L', +41584=>'L', +41585=>'L', +41586=>'L', +41587=>'L', +41588=>'L', +41589=>'L', +41590=>'L', +41591=>'L', +41592=>'L', +41593=>'L', +41594=>'L', +41595=>'L', +41596=>'L', +41597=>'L', +41598=>'L', +41599=>'L', +41600=>'L', +41601=>'L', +41602=>'L', +41603=>'L', +41604=>'L', +41605=>'L', +41606=>'L', +41607=>'L', +41608=>'L', +41609=>'L', +41610=>'L', +41611=>'L', +41612=>'L', +41613=>'L', +41614=>'L', +41615=>'L', +41616=>'L', +41617=>'L', +41618=>'L', +41619=>'L', +41620=>'L', +41621=>'L', +41622=>'L', +41623=>'L', +41624=>'L', +41625=>'L', +41626=>'L', +41627=>'L', +41628=>'L', +41629=>'L', +41630=>'L', +41631=>'L', +41632=>'L', +41633=>'L', +41634=>'L', +41635=>'L', +41636=>'L', +41637=>'L', +41638=>'L', +41639=>'L', +41640=>'L', +41641=>'L', +41642=>'L', +41643=>'L', +41644=>'L', +41645=>'L', +41646=>'L', +41647=>'L', +41648=>'L', +41649=>'L', +41650=>'L', +41651=>'L', +41652=>'L', +41653=>'L', +41654=>'L', +41655=>'L', +41656=>'L', +41657=>'L', +41658=>'L', +41659=>'L', +41660=>'L', +41661=>'L', +41662=>'L', +41663=>'L', +41664=>'L', +41665=>'L', +41666=>'L', +41667=>'L', +41668=>'L', +41669=>'L', +41670=>'L', +41671=>'L', +41672=>'L', +41673=>'L', +41674=>'L', +41675=>'L', +41676=>'L', +41677=>'L', +41678=>'L', +41679=>'L', +41680=>'L', +41681=>'L', +41682=>'L', +41683=>'L', +41684=>'L', +41685=>'L', +41686=>'L', +41687=>'L', +41688=>'L', +41689=>'L', +41690=>'L', +41691=>'L', +41692=>'L', +41693=>'L', +41694=>'L', +41695=>'L', +41696=>'L', +41697=>'L', +41698=>'L', +41699=>'L', +41700=>'L', +41701=>'L', +41702=>'L', +41703=>'L', +41704=>'L', +41705=>'L', +41706=>'L', +41707=>'L', +41708=>'L', +41709=>'L', +41710=>'L', +41711=>'L', +41712=>'L', +41713=>'L', +41714=>'L', +41715=>'L', +41716=>'L', +41717=>'L', +41718=>'L', +41719=>'L', +41720=>'L', +41721=>'L', +41722=>'L', +41723=>'L', +41724=>'L', +41725=>'L', +41726=>'L', +41727=>'L', +41728=>'L', +41729=>'L', +41730=>'L', +41731=>'L', +41732=>'L', +41733=>'L', +41734=>'L', +41735=>'L', +41736=>'L', +41737=>'L', +41738=>'L', +41739=>'L', +41740=>'L', +41741=>'L', +41742=>'L', +41743=>'L', +41744=>'L', +41745=>'L', +41746=>'L', +41747=>'L', +41748=>'L', +41749=>'L', +41750=>'L', +41751=>'L', +41752=>'L', +41753=>'L', +41754=>'L', +41755=>'L', +41756=>'L', +41757=>'L', +41758=>'L', +41759=>'L', +41760=>'L', +41761=>'L', +41762=>'L', +41763=>'L', +41764=>'L', +41765=>'L', +41766=>'L', +41767=>'L', +41768=>'L', +41769=>'L', +41770=>'L', +41771=>'L', +41772=>'L', +41773=>'L', +41774=>'L', +41775=>'L', +41776=>'L', +41777=>'L', +41778=>'L', +41779=>'L', +41780=>'L', +41781=>'L', +41782=>'L', +41783=>'L', +41784=>'L', +41785=>'L', +41786=>'L', +41787=>'L', +41788=>'L', +41789=>'L', +41790=>'L', +41791=>'L', +41792=>'L', +41793=>'L', +41794=>'L', +41795=>'L', +41796=>'L', +41797=>'L', +41798=>'L', +41799=>'L', +41800=>'L', +41801=>'L', +41802=>'L', +41803=>'L', +41804=>'L', +41805=>'L', +41806=>'L', +41807=>'L', +41808=>'L', +41809=>'L', +41810=>'L', +41811=>'L', +41812=>'L', +41813=>'L', +41814=>'L', +41815=>'L', +41816=>'L', +41817=>'L', +41818=>'L', +41819=>'L', +41820=>'L', +41821=>'L', +41822=>'L', +41823=>'L', +41824=>'L', +41825=>'L', +41826=>'L', +41827=>'L', +41828=>'L', +41829=>'L', +41830=>'L', +41831=>'L', +41832=>'L', +41833=>'L', +41834=>'L', +41835=>'L', +41836=>'L', +41837=>'L', +41838=>'L', +41839=>'L', +41840=>'L', +41841=>'L', +41842=>'L', +41843=>'L', +41844=>'L', +41845=>'L', +41846=>'L', +41847=>'L', +41848=>'L', +41849=>'L', +41850=>'L', +41851=>'L', +41852=>'L', +41853=>'L', +41854=>'L', +41855=>'L', +41856=>'L', +41857=>'L', +41858=>'L', +41859=>'L', +41860=>'L', +41861=>'L', +41862=>'L', +41863=>'L', +41864=>'L', +41865=>'L', +41866=>'L', +41867=>'L', +41868=>'L', +41869=>'L', +41870=>'L', +41871=>'L', +41872=>'L', +41873=>'L', +41874=>'L', +41875=>'L', +41876=>'L', +41877=>'L', +41878=>'L', +41879=>'L', +41880=>'L', +41881=>'L', +41882=>'L', +41883=>'L', +41884=>'L', +41885=>'L', +41886=>'L', +41887=>'L', +41888=>'L', +41889=>'L', +41890=>'L', +41891=>'L', +41892=>'L', +41893=>'L', +41894=>'L', +41895=>'L', +41896=>'L', +41897=>'L', +41898=>'L', +41899=>'L', +41900=>'L', +41901=>'L', +41902=>'L', +41903=>'L', +41904=>'L', +41905=>'L', +41906=>'L', +41907=>'L', +41908=>'L', +41909=>'L', +41910=>'L', +41911=>'L', +41912=>'L', +41913=>'L', +41914=>'L', +41915=>'L', +41916=>'L', +41917=>'L', +41918=>'L', +41919=>'L', +41920=>'L', +41921=>'L', +41922=>'L', +41923=>'L', +41924=>'L', +41925=>'L', +41926=>'L', +41927=>'L', +41928=>'L', +41929=>'L', +41930=>'L', +41931=>'L', +41932=>'L', +41933=>'L', +41934=>'L', +41935=>'L', +41936=>'L', +41937=>'L', +41938=>'L', +41939=>'L', +41940=>'L', +41941=>'L', +41942=>'L', +41943=>'L', +41944=>'L', +41945=>'L', +41946=>'L', +41947=>'L', +41948=>'L', +41949=>'L', +41950=>'L', +41951=>'L', +41952=>'L', +41953=>'L', +41954=>'L', +41955=>'L', +41956=>'L', +41957=>'L', +41958=>'L', +41959=>'L', +41960=>'L', +41961=>'L', +41962=>'L', +41963=>'L', +41964=>'L', +41965=>'L', +41966=>'L', +41967=>'L', +41968=>'L', +41969=>'L', +41970=>'L', +41971=>'L', +41972=>'L', +41973=>'L', +41974=>'L', +41975=>'L', +41976=>'L', +41977=>'L', +41978=>'L', +41979=>'L', +41980=>'L', +41981=>'L', +41982=>'L', +41983=>'L', +41984=>'L', +41985=>'L', +41986=>'L', +41987=>'L', +41988=>'L', +41989=>'L', +41990=>'L', +41991=>'L', +41992=>'L', +41993=>'L', +41994=>'L', +41995=>'L', +41996=>'L', +41997=>'L', +41998=>'L', +41999=>'L', +42000=>'L', +42001=>'L', +42002=>'L', +42003=>'L', +42004=>'L', +42005=>'L', +42006=>'L', +42007=>'L', +42008=>'L', +42009=>'L', +42010=>'L', +42011=>'L', +42012=>'L', +42013=>'L', +42014=>'L', +42015=>'L', +42016=>'L', +42017=>'L', +42018=>'L', +42019=>'L', +42020=>'L', +42021=>'L', +42022=>'L', +42023=>'L', +42024=>'L', +42025=>'L', +42026=>'L', +42027=>'L', +42028=>'L', +42029=>'L', +42030=>'L', +42031=>'L', +42032=>'L', +42033=>'L', +42034=>'L', +42035=>'L', +42036=>'L', +42037=>'L', +42038=>'L', +42039=>'L', +42040=>'L', +42041=>'L', +42042=>'L', +42043=>'L', +42044=>'L', +42045=>'L', +42046=>'L', +42047=>'L', +42048=>'L', +42049=>'L', +42050=>'L', +42051=>'L', +42052=>'L', +42053=>'L', +42054=>'L', +42055=>'L', +42056=>'L', +42057=>'L', +42058=>'L', +42059=>'L', +42060=>'L', +42061=>'L', +42062=>'L', +42063=>'L', +42064=>'L', +42065=>'L', +42066=>'L', +42067=>'L', +42068=>'L', +42069=>'L', +42070=>'L', +42071=>'L', +42072=>'L', +42073=>'L', +42074=>'L', +42075=>'L', +42076=>'L', +42077=>'L', +42078=>'L', +42079=>'L', +42080=>'L', +42081=>'L', +42082=>'L', +42083=>'L', +42084=>'L', +42085=>'L', +42086=>'L', +42087=>'L', +42088=>'L', +42089=>'L', +42090=>'L', +42091=>'L', +42092=>'L', +42093=>'L', +42094=>'L', +42095=>'L', +42096=>'L', +42097=>'L', +42098=>'L', +42099=>'L', +42100=>'L', +42101=>'L', +42102=>'L', +42103=>'L', +42104=>'L', +42105=>'L', +42106=>'L', +42107=>'L', +42108=>'L', +42109=>'L', +42110=>'L', +42111=>'L', +42112=>'L', +42113=>'L', +42114=>'L', +42115=>'L', +42116=>'L', +42117=>'L', +42118=>'L', +42119=>'L', +42120=>'L', +42121=>'L', +42122=>'L', +42123=>'L', +42124=>'L', +42128=>'ON', +42129=>'ON', +42130=>'ON', +42131=>'ON', +42132=>'ON', +42133=>'ON', +42134=>'ON', +42135=>'ON', +42136=>'ON', +42137=>'ON', +42138=>'ON', +42139=>'ON', +42140=>'ON', +42141=>'ON', +42142=>'ON', +42143=>'ON', +42144=>'ON', +42145=>'ON', +42146=>'ON', +42147=>'ON', +42148=>'ON', +42149=>'ON', +42150=>'ON', +42151=>'ON', +42152=>'ON', +42153=>'ON', +42154=>'ON', +42155=>'ON', +42156=>'ON', +42157=>'ON', +42158=>'ON', +42159=>'ON', +42160=>'ON', +42161=>'ON', +42162=>'ON', +42163=>'ON', +42164=>'ON', +42165=>'ON', +42166=>'ON', +42167=>'ON', +42168=>'ON', +42169=>'ON', +42170=>'ON', +42171=>'ON', +42172=>'ON', +42173=>'ON', +42174=>'ON', +42175=>'ON', +42176=>'ON', +42177=>'ON', +42178=>'ON', +42179=>'ON', +42180=>'ON', +42181=>'ON', +42182=>'ON', +42752=>'ON', +42753=>'ON', +42754=>'ON', +42755=>'ON', +42756=>'ON', +42757=>'ON', +42758=>'ON', +42759=>'ON', +42760=>'ON', +42761=>'ON', +42762=>'ON', +42763=>'ON', +42764=>'ON', +42765=>'ON', +42766=>'ON', +42767=>'ON', +42768=>'ON', +42769=>'ON', +42770=>'ON', +42771=>'ON', +42772=>'ON', +42773=>'ON', +42774=>'ON', +42775=>'ON', +42776=>'ON', +42777=>'ON', +42778=>'ON', +42784=>'ON', +42785=>'ON', +43008=>'L', +43009=>'L', +43010=>'NSM', +43011=>'L', +43012=>'L', +43013=>'L', +43014=>'NSM', +43015=>'L', +43016=>'L', +43017=>'L', +43018=>'L', +43019=>'NSM', +43020=>'L', +43021=>'L', +43022=>'L', +43023=>'L', +43024=>'L', +43025=>'L', +43026=>'L', +43027=>'L', +43028=>'L', +43029=>'L', +43030=>'L', +43031=>'L', +43032=>'L', +43033=>'L', +43034=>'L', +43035=>'L', +43036=>'L', +43037=>'L', +43038=>'L', +43039=>'L', +43040=>'L', +43041=>'L', +43042=>'L', +43043=>'L', +43044=>'L', +43045=>'NSM', +43046=>'NSM', +43047=>'L', +43048=>'ON', +43049=>'ON', +43050=>'ON', +43051=>'ON', +43072=>'L', +43073=>'L', +43074=>'L', +43075=>'L', +43076=>'L', +43077=>'L', +43078=>'L', +43079=>'L', +43080=>'L', +43081=>'L', +43082=>'L', +43083=>'L', +43084=>'L', +43085=>'L', +43086=>'L', +43087=>'L', +43088=>'L', +43089=>'L', +43090=>'L', +43091=>'L', +43092=>'L', +43093=>'L', +43094=>'L', +43095=>'L', +43096=>'L', +43097=>'L', +43098=>'L', +43099=>'L', +43100=>'L', +43101=>'L', +43102=>'L', +43103=>'L', +43104=>'L', +43105=>'L', +43106=>'L', +43107=>'L', +43108=>'L', +43109=>'L', +43110=>'L', +43111=>'L', +43112=>'L', +43113=>'L', +43114=>'L', +43115=>'L', +43116=>'L', +43117=>'L', +43118=>'L', +43119=>'L', +43120=>'L', +43121=>'L', +43122=>'L', +43123=>'L', +43124=>'ON', +43125=>'ON', +43126=>'ON', +43127=>'ON', +44032=>'L', +55203=>'L', +55296=>'L', +56191=>'L', +56192=>'L', +56319=>'L', +56320=>'L', +57343=>'L', +57344=>'L', +63743=>'L', +63744=>'L', +63745=>'L', +63746=>'L', +63747=>'L', +63748=>'L', +63749=>'L', +63750=>'L', +63751=>'L', +63752=>'L', +63753=>'L', +63754=>'L', +63755=>'L', +63756=>'L', +63757=>'L', +63758=>'L', +63759=>'L', +63760=>'L', +63761=>'L', +63762=>'L', +63763=>'L', +63764=>'L', +63765=>'L', +63766=>'L', +63767=>'L', +63768=>'L', +63769=>'L', +63770=>'L', +63771=>'L', +63772=>'L', +63773=>'L', +63774=>'L', +63775=>'L', +63776=>'L', +63777=>'L', +63778=>'L', +63779=>'L', +63780=>'L', +63781=>'L', +63782=>'L', +63783=>'L', +63784=>'L', +63785=>'L', +63786=>'L', +63787=>'L', +63788=>'L', +63789=>'L', +63790=>'L', +63791=>'L', +63792=>'L', +63793=>'L', +63794=>'L', +63795=>'L', +63796=>'L', +63797=>'L', +63798=>'L', +63799=>'L', +63800=>'L', +63801=>'L', +63802=>'L', +63803=>'L', +63804=>'L', +63805=>'L', +63806=>'L', +63807=>'L', +63808=>'L', +63809=>'L', +63810=>'L', +63811=>'L', +63812=>'L', +63813=>'L', +63814=>'L', +63815=>'L', +63816=>'L', +63817=>'L', +63818=>'L', +63819=>'L', +63820=>'L', +63821=>'L', +63822=>'L', +63823=>'L', +63824=>'L', +63825=>'L', +63826=>'L', +63827=>'L', +63828=>'L', +63829=>'L', +63830=>'L', +63831=>'L', +63832=>'L', +63833=>'L', +63834=>'L', +63835=>'L', +63836=>'L', +63837=>'L', +63838=>'L', +63839=>'L', +63840=>'L', +63841=>'L', +63842=>'L', +63843=>'L', +63844=>'L', +63845=>'L', +63846=>'L', +63847=>'L', +63848=>'L', +63849=>'L', +63850=>'L', +63851=>'L', +63852=>'L', +63853=>'L', +63854=>'L', +63855=>'L', +63856=>'L', +63857=>'L', +63858=>'L', +63859=>'L', +63860=>'L', +63861=>'L', +63862=>'L', +63863=>'L', +63864=>'L', +63865=>'L', +63866=>'L', +63867=>'L', +63868=>'L', +63869=>'L', +63870=>'L', +63871=>'L', +63872=>'L', +63873=>'L', +63874=>'L', +63875=>'L', +63876=>'L', +63877=>'L', +63878=>'L', +63879=>'L', +63880=>'L', +63881=>'L', +63882=>'L', +63883=>'L', +63884=>'L', +63885=>'L', +63886=>'L', +63887=>'L', +63888=>'L', +63889=>'L', +63890=>'L', +63891=>'L', +63892=>'L', +63893=>'L', +63894=>'L', +63895=>'L', +63896=>'L', +63897=>'L', +63898=>'L', +63899=>'L', +63900=>'L', +63901=>'L', +63902=>'L', +63903=>'L', +63904=>'L', +63905=>'L', +63906=>'L', +63907=>'L', +63908=>'L', +63909=>'L', +63910=>'L', +63911=>'L', +63912=>'L', +63913=>'L', +63914=>'L', +63915=>'L', +63916=>'L', +63917=>'L', +63918=>'L', +63919=>'L', +63920=>'L', +63921=>'L', +63922=>'L', +63923=>'L', +63924=>'L', +63925=>'L', +63926=>'L', +63927=>'L', +63928=>'L', +63929=>'L', +63930=>'L', +63931=>'L', +63932=>'L', +63933=>'L', +63934=>'L', +63935=>'L', +63936=>'L', +63937=>'L', +63938=>'L', +63939=>'L', +63940=>'L', +63941=>'L', +63942=>'L', +63943=>'L', +63944=>'L', +63945=>'L', +63946=>'L', +63947=>'L', +63948=>'L', +63949=>'L', +63950=>'L', +63951=>'L', +63952=>'L', +63953=>'L', +63954=>'L', +63955=>'L', +63956=>'L', +63957=>'L', +63958=>'L', +63959=>'L', +63960=>'L', +63961=>'L', +63962=>'L', +63963=>'L', +63964=>'L', +63965=>'L', +63966=>'L', +63967=>'L', +63968=>'L', +63969=>'L', +63970=>'L', +63971=>'L', +63972=>'L', +63973=>'L', +63974=>'L', +63975=>'L', +63976=>'L', +63977=>'L', +63978=>'L', +63979=>'L', +63980=>'L', +63981=>'L', +63982=>'L', +63983=>'L', +63984=>'L', +63985=>'L', +63986=>'L', +63987=>'L', +63988=>'L', +63989=>'L', +63990=>'L', +63991=>'L', +63992=>'L', +63993=>'L', +63994=>'L', +63995=>'L', +63996=>'L', +63997=>'L', +63998=>'L', +63999=>'L', +64000=>'L', +64001=>'L', +64002=>'L', +64003=>'L', +64004=>'L', +64005=>'L', +64006=>'L', +64007=>'L', +64008=>'L', +64009=>'L', +64010=>'L', +64011=>'L', +64012=>'L', +64013=>'L', +64014=>'L', +64015=>'L', +64016=>'L', +64017=>'L', +64018=>'L', +64019=>'L', +64020=>'L', +64021=>'L', +64022=>'L', +64023=>'L', +64024=>'L', +64025=>'L', +64026=>'L', +64027=>'L', +64028=>'L', +64029=>'L', +64030=>'L', +64031=>'L', +64032=>'L', +64033=>'L', +64034=>'L', +64035=>'L', +64036=>'L', +64037=>'L', +64038=>'L', +64039=>'L', +64040=>'L', +64041=>'L', +64042=>'L', +64043=>'L', +64044=>'L', +64045=>'L', +64048=>'L', +64049=>'L', +64050=>'L', +64051=>'L', +64052=>'L', +64053=>'L', +64054=>'L', +64055=>'L', +64056=>'L', +64057=>'L', +64058=>'L', +64059=>'L', +64060=>'L', +64061=>'L', +64062=>'L', +64063=>'L', +64064=>'L', +64065=>'L', +64066=>'L', +64067=>'L', +64068=>'L', +64069=>'L', +64070=>'L', +64071=>'L', +64072=>'L', +64073=>'L', +64074=>'L', +64075=>'L', +64076=>'L', +64077=>'L', +64078=>'L', +64079=>'L', +64080=>'L', +64081=>'L', +64082=>'L', +64083=>'L', +64084=>'L', +64085=>'L', +64086=>'L', +64087=>'L', +64088=>'L', +64089=>'L', +64090=>'L', +64091=>'L', +64092=>'L', +64093=>'L', +64094=>'L', +64095=>'L', +64096=>'L', +64097=>'L', +64098=>'L', +64099=>'L', +64100=>'L', +64101=>'L', +64102=>'L', +64103=>'L', +64104=>'L', +64105=>'L', +64106=>'L', +64112=>'L', +64113=>'L', +64114=>'L', +64115=>'L', +64116=>'L', +64117=>'L', +64118=>'L', +64119=>'L', +64120=>'L', +64121=>'L', +64122=>'L', +64123=>'L', +64124=>'L', +64125=>'L', +64126=>'L', +64127=>'L', +64128=>'L', +64129=>'L', +64130=>'L', +64131=>'L', +64132=>'L', +64133=>'L', +64134=>'L', +64135=>'L', +64136=>'L', +64137=>'L', +64138=>'L', +64139=>'L', +64140=>'L', +64141=>'L', +64142=>'L', +64143=>'L', +64144=>'L', +64145=>'L', +64146=>'L', +64147=>'L', +64148=>'L', +64149=>'L', +64150=>'L', +64151=>'L', +64152=>'L', +64153=>'L', +64154=>'L', +64155=>'L', +64156=>'L', +64157=>'L', +64158=>'L', +64159=>'L', +64160=>'L', +64161=>'L', +64162=>'L', +64163=>'L', +64164=>'L', +64165=>'L', +64166=>'L', +64167=>'L', +64168=>'L', +64169=>'L', +64170=>'L', +64171=>'L', +64172=>'L', +64173=>'L', +64174=>'L', +64175=>'L', +64176=>'L', +64177=>'L', +64178=>'L', +64179=>'L', +64180=>'L', +64181=>'L', +64182=>'L', +64183=>'L', +64184=>'L', +64185=>'L', +64186=>'L', +64187=>'L', +64188=>'L', +64189=>'L', +64190=>'L', +64191=>'L', +64192=>'L', +64193=>'L', +64194=>'L', +64195=>'L', +64196=>'L', +64197=>'L', +64198=>'L', +64199=>'L', +64200=>'L', +64201=>'L', +64202=>'L', +64203=>'L', +64204=>'L', +64205=>'L', +64206=>'L', +64207=>'L', +64208=>'L', +64209=>'L', +64210=>'L', +64211=>'L', +64212=>'L', +64213=>'L', +64214=>'L', +64215=>'L', +64216=>'L', +64217=>'L', +64256=>'L', +64257=>'L', +64258=>'L', +64259=>'L', +64260=>'L', +64261=>'L', +64262=>'L', +64275=>'L', +64276=>'L', +64277=>'L', +64278=>'L', +64279=>'L', +64285=>'R', +64286=>'NSM', +64287=>'R', +64288=>'R', +64289=>'R', +64290=>'R', +64291=>'R', +64292=>'R', +64293=>'R', +64294=>'R', +64295=>'R', +64296=>'R', +64297=>'ES', +64298=>'R', +64299=>'R', +64300=>'R', +64301=>'R', +64302=>'R', +64303=>'R', +64304=>'R', +64305=>'R', +64306=>'R', +64307=>'R', +64308=>'R', +64309=>'R', +64310=>'R', +64312=>'R', +64313=>'R', +64314=>'R', +64315=>'R', +64316=>'R', +64318=>'R', +64320=>'R', +64321=>'R', +64323=>'R', +64324=>'R', +64326=>'R', +64327=>'R', +64328=>'R', +64329=>'R', +64330=>'R', +64331=>'R', +64332=>'R', +64333=>'R', +64334=>'R', +64335=>'R', +64336=>'AL', +64337=>'AL', +64338=>'AL', +64339=>'AL', +64340=>'AL', +64341=>'AL', +64342=>'AL', +64343=>'AL', +64344=>'AL', +64345=>'AL', +64346=>'AL', +64347=>'AL', +64348=>'AL', +64349=>'AL', +64350=>'AL', +64351=>'AL', +64352=>'AL', +64353=>'AL', +64354=>'AL', +64355=>'AL', +64356=>'AL', +64357=>'AL', +64358=>'AL', +64359=>'AL', +64360=>'AL', +64361=>'AL', +64362=>'AL', +64363=>'AL', +64364=>'AL', +64365=>'AL', +64366=>'AL', +64367=>'AL', +64368=>'AL', +64369=>'AL', +64370=>'AL', +64371=>'AL', +64372=>'AL', +64373=>'AL', +64374=>'AL', +64375=>'AL', +64376=>'AL', +64377=>'AL', +64378=>'AL', +64379=>'AL', +64380=>'AL', +64381=>'AL', +64382=>'AL', +64383=>'AL', +64384=>'AL', +64385=>'AL', +64386=>'AL', +64387=>'AL', +64388=>'AL', +64389=>'AL', +64390=>'AL', +64391=>'AL', +64392=>'AL', +64393=>'AL', +64394=>'AL', +64395=>'AL', +64396=>'AL', +64397=>'AL', +64398=>'AL', +64399=>'AL', +64400=>'AL', +64401=>'AL', +64402=>'AL', +64403=>'AL', +64404=>'AL', +64405=>'AL', +64406=>'AL', +64407=>'AL', +64408=>'AL', +64409=>'AL', +64410=>'AL', +64411=>'AL', +64412=>'AL', +64413=>'AL', +64414=>'AL', +64415=>'AL', +64416=>'AL', +64417=>'AL', +64418=>'AL', +64419=>'AL', +64420=>'AL', +64421=>'AL', +64422=>'AL', +64423=>'AL', +64424=>'AL', +64425=>'AL', +64426=>'AL', +64427=>'AL', +64428=>'AL', +64429=>'AL', +64430=>'AL', +64431=>'AL', +64432=>'AL', +64433=>'AL', +64467=>'AL', +64468=>'AL', +64469=>'AL', +64470=>'AL', +64471=>'AL', +64472=>'AL', +64473=>'AL', +64474=>'AL', +64475=>'AL', +64476=>'AL', +64477=>'AL', +64478=>'AL', +64479=>'AL', +64480=>'AL', +64481=>'AL', +64482=>'AL', +64483=>'AL', +64484=>'AL', +64485=>'AL', +64486=>'AL', +64487=>'AL', +64488=>'AL', +64489=>'AL', +64490=>'AL', +64491=>'AL', +64492=>'AL', +64493=>'AL', +64494=>'AL', +64495=>'AL', +64496=>'AL', +64497=>'AL', +64498=>'AL', +64499=>'AL', +64500=>'AL', +64501=>'AL', +64502=>'AL', +64503=>'AL', +64504=>'AL', +64505=>'AL', +64506=>'AL', +64507=>'AL', +64508=>'AL', +64509=>'AL', +64510=>'AL', +64511=>'AL', +64512=>'AL', +64513=>'AL', +64514=>'AL', +64515=>'AL', +64516=>'AL', +64517=>'AL', +64518=>'AL', +64519=>'AL', +64520=>'AL', +64521=>'AL', +64522=>'AL', +64523=>'AL', +64524=>'AL', +64525=>'AL', +64526=>'AL', +64527=>'AL', +64528=>'AL', +64529=>'AL', +64530=>'AL', +64531=>'AL', +64532=>'AL', +64533=>'AL', +64534=>'AL', +64535=>'AL', +64536=>'AL', +64537=>'AL', +64538=>'AL', +64539=>'AL', +64540=>'AL', +64541=>'AL', +64542=>'AL', +64543=>'AL', +64544=>'AL', +64545=>'AL', +64546=>'AL', +64547=>'AL', +64548=>'AL', +64549=>'AL', +64550=>'AL', +64551=>'AL', +64552=>'AL', +64553=>'AL', +64554=>'AL', +64555=>'AL', +64556=>'AL', +64557=>'AL', +64558=>'AL', +64559=>'AL', +64560=>'AL', +64561=>'AL', +64562=>'AL', +64563=>'AL', +64564=>'AL', +64565=>'AL', +64566=>'AL', +64567=>'AL', +64568=>'AL', +64569=>'AL', +64570=>'AL', +64571=>'AL', +64572=>'AL', +64573=>'AL', +64574=>'AL', +64575=>'AL', +64576=>'AL', +64577=>'AL', +64578=>'AL', +64579=>'AL', +64580=>'AL', +64581=>'AL', +64582=>'AL', +64583=>'AL', +64584=>'AL', +64585=>'AL', +64586=>'AL', +64587=>'AL', +64588=>'AL', +64589=>'AL', +64590=>'AL', +64591=>'AL', +64592=>'AL', +64593=>'AL', +64594=>'AL', +64595=>'AL', +64596=>'AL', +64597=>'AL', +64598=>'AL', +64599=>'AL', +64600=>'AL', +64601=>'AL', +64602=>'AL', +64603=>'AL', +64604=>'AL', +64605=>'AL', +64606=>'AL', +64607=>'AL', +64608=>'AL', +64609=>'AL', +64610=>'AL', +64611=>'AL', +64612=>'AL', +64613=>'AL', +64614=>'AL', +64615=>'AL', +64616=>'AL', +64617=>'AL', +64618=>'AL', +64619=>'AL', +64620=>'AL', +64621=>'AL', +64622=>'AL', +64623=>'AL', +64624=>'AL', +64625=>'AL', +64626=>'AL', +64627=>'AL', +64628=>'AL', +64629=>'AL', +64630=>'AL', +64631=>'AL', +64632=>'AL', +64633=>'AL', +64634=>'AL', +64635=>'AL', +64636=>'AL', +64637=>'AL', +64638=>'AL', +64639=>'AL', +64640=>'AL', +64641=>'AL', +64642=>'AL', +64643=>'AL', +64644=>'AL', +64645=>'AL', +64646=>'AL', +64647=>'AL', +64648=>'AL', +64649=>'AL', +64650=>'AL', +64651=>'AL', +64652=>'AL', +64653=>'AL', +64654=>'AL', +64655=>'AL', +64656=>'AL', +64657=>'AL', +64658=>'AL', +64659=>'AL', +64660=>'AL', +64661=>'AL', +64662=>'AL', +64663=>'AL', +64664=>'AL', +64665=>'AL', +64666=>'AL', +64667=>'AL', +64668=>'AL', +64669=>'AL', +64670=>'AL', +64671=>'AL', +64672=>'AL', +64673=>'AL', +64674=>'AL', +64675=>'AL', +64676=>'AL', +64677=>'AL', +64678=>'AL', +64679=>'AL', +64680=>'AL', +64681=>'AL', +64682=>'AL', +64683=>'AL', +64684=>'AL', +64685=>'AL', +64686=>'AL', +64687=>'AL', +64688=>'AL', +64689=>'AL', +64690=>'AL', +64691=>'AL', +64692=>'AL', +64693=>'AL', +64694=>'AL', +64695=>'AL', +64696=>'AL', +64697=>'AL', +64698=>'AL', +64699=>'AL', +64700=>'AL', +64701=>'AL', +64702=>'AL', +64703=>'AL', +64704=>'AL', +64705=>'AL', +64706=>'AL', +64707=>'AL', +64708=>'AL', +64709=>'AL', +64710=>'AL', +64711=>'AL', +64712=>'AL', +64713=>'AL', +64714=>'AL', +64715=>'AL', +64716=>'AL', +64717=>'AL', +64718=>'AL', +64719=>'AL', +64720=>'AL', +64721=>'AL', +64722=>'AL', +64723=>'AL', +64724=>'AL', +64725=>'AL', +64726=>'AL', +64727=>'AL', +64728=>'AL', +64729=>'AL', +64730=>'AL', +64731=>'AL', +64732=>'AL', +64733=>'AL', +64734=>'AL', +64735=>'AL', +64736=>'AL', +64737=>'AL', +64738=>'AL', +64739=>'AL', +64740=>'AL', +64741=>'AL', +64742=>'AL', +64743=>'AL', +64744=>'AL', +64745=>'AL', +64746=>'AL', +64747=>'AL', +64748=>'AL', +64749=>'AL', +64750=>'AL', +64751=>'AL', +64752=>'AL', +64753=>'AL', +64754=>'AL', +64755=>'AL', +64756=>'AL', +64757=>'AL', +64758=>'AL', +64759=>'AL', +64760=>'AL', +64761=>'AL', +64762=>'AL', +64763=>'AL', +64764=>'AL', +64765=>'AL', +64766=>'AL', +64767=>'AL', +64768=>'AL', +64769=>'AL', +64770=>'AL', +64771=>'AL', +64772=>'AL', +64773=>'AL', +64774=>'AL', +64775=>'AL', +64776=>'AL', +64777=>'AL', +64778=>'AL', +64779=>'AL', +64780=>'AL', +64781=>'AL', +64782=>'AL', +64783=>'AL', +64784=>'AL', +64785=>'AL', +64786=>'AL', +64787=>'AL', +64788=>'AL', +64789=>'AL', +64790=>'AL', +64791=>'AL', +64792=>'AL', +64793=>'AL', +64794=>'AL', +64795=>'AL', +64796=>'AL', +64797=>'AL', +64798=>'AL', +64799=>'AL', +64800=>'AL', +64801=>'AL', +64802=>'AL', +64803=>'AL', +64804=>'AL', +64805=>'AL', +64806=>'AL', +64807=>'AL', +64808=>'AL', +64809=>'AL', +64810=>'AL', +64811=>'AL', +64812=>'AL', +64813=>'AL', +64814=>'AL', +64815=>'AL', +64816=>'AL', +64817=>'AL', +64818=>'AL', +64819=>'AL', +64820=>'AL', +64821=>'AL', +64822=>'AL', +64823=>'AL', +64824=>'AL', +64825=>'AL', +64826=>'AL', +64827=>'AL', +64828=>'AL', +64829=>'AL', +64830=>'ON', +64831=>'ON', +64848=>'AL', +64849=>'AL', +64850=>'AL', +64851=>'AL', +64852=>'AL', +64853=>'AL', +64854=>'AL', +64855=>'AL', +64856=>'AL', +64857=>'AL', +64858=>'AL', +64859=>'AL', +64860=>'AL', +64861=>'AL', +64862=>'AL', +64863=>'AL', +64864=>'AL', +64865=>'AL', +64866=>'AL', +64867=>'AL', +64868=>'AL', +64869=>'AL', +64870=>'AL', +64871=>'AL', +64872=>'AL', +64873=>'AL', +64874=>'AL', +64875=>'AL', +64876=>'AL', +64877=>'AL', +64878=>'AL', +64879=>'AL', +64880=>'AL', +64881=>'AL', +64882=>'AL', +64883=>'AL', +64884=>'AL', +64885=>'AL', +64886=>'AL', +64887=>'AL', +64888=>'AL', +64889=>'AL', +64890=>'AL', +64891=>'AL', +64892=>'AL', +64893=>'AL', +64894=>'AL', +64895=>'AL', +64896=>'AL', +64897=>'AL', +64898=>'AL', +64899=>'AL', +64900=>'AL', +64901=>'AL', +64902=>'AL', +64903=>'AL', +64904=>'AL', +64905=>'AL', +64906=>'AL', +64907=>'AL', +64908=>'AL', +64909=>'AL', +64910=>'AL', +64911=>'AL', +64914=>'AL', +64915=>'AL', +64916=>'AL', +64917=>'AL', +64918=>'AL', +64919=>'AL', +64920=>'AL', +64921=>'AL', +64922=>'AL', +64923=>'AL', +64924=>'AL', +64925=>'AL', +64926=>'AL', +64927=>'AL', +64928=>'AL', +64929=>'AL', +64930=>'AL', +64931=>'AL', +64932=>'AL', +64933=>'AL', +64934=>'AL', +64935=>'AL', +64936=>'AL', +64937=>'AL', +64938=>'AL', +64939=>'AL', +64940=>'AL', +64941=>'AL', +64942=>'AL', +64943=>'AL', +64944=>'AL', +64945=>'AL', +64946=>'AL', +64947=>'AL', +64948=>'AL', +64949=>'AL', +64950=>'AL', +64951=>'AL', +64952=>'AL', +64953=>'AL', +64954=>'AL', +64955=>'AL', +64956=>'AL', +64957=>'AL', +64958=>'AL', +64959=>'AL', +64960=>'AL', +64961=>'AL', +64962=>'AL', +64963=>'AL', +64964=>'AL', +64965=>'AL', +64966=>'AL', +64967=>'AL', +65008=>'AL', +65009=>'AL', +65010=>'AL', +65011=>'AL', +65012=>'AL', +65013=>'AL', +65014=>'AL', +65015=>'AL', +65016=>'AL', +65017=>'AL', +65018=>'AL', +65019=>'AL', +65020=>'AL', +65021=>'ON', +65024=>'NSM', +65025=>'NSM', +65026=>'NSM', +65027=>'NSM', +65028=>'NSM', +65029=>'NSM', +65030=>'NSM', +65031=>'NSM', +65032=>'NSM', +65033=>'NSM', +65034=>'NSM', +65035=>'NSM', +65036=>'NSM', +65037=>'NSM', +65038=>'NSM', +65039=>'NSM', +65040=>'ON', +65041=>'ON', +65042=>'ON', +65043=>'ON', +65044=>'ON', +65045=>'ON', +65046=>'ON', +65047=>'ON', +65048=>'ON', +65049=>'ON', +65056=>'NSM', +65057=>'NSM', +65058=>'NSM', +65059=>'NSM', +65072=>'ON', +65073=>'ON', +65074=>'ON', +65075=>'ON', +65076=>'ON', +65077=>'ON', +65078=>'ON', +65079=>'ON', +65080=>'ON', +65081=>'ON', +65082=>'ON', +65083=>'ON', +65084=>'ON', +65085=>'ON', +65086=>'ON', +65087=>'ON', +65088=>'ON', +65089=>'ON', +65090=>'ON', +65091=>'ON', +65092=>'ON', +65093=>'ON', +65094=>'ON', +65095=>'ON', +65096=>'ON', +65097=>'ON', +65098=>'ON', +65099=>'ON', +65100=>'ON', +65101=>'ON', +65102=>'ON', +65103=>'ON', +65104=>'CS', +65105=>'ON', +65106=>'CS', +65108=>'ON', +65109=>'CS', +65110=>'ON', +65111=>'ON', +65112=>'ON', +65113=>'ON', +65114=>'ON', +65115=>'ON', +65116=>'ON', +65117=>'ON', +65118=>'ON', +65119=>'ET', +65120=>'ON', +65121=>'ON', +65122=>'ES', +65123=>'ES', +65124=>'ON', +65125=>'ON', +65126=>'ON', +65128=>'ON', +65129=>'ET', +65130=>'ET', +65131=>'ON', +65136=>'AL', +65137=>'AL', +65138=>'AL', +65139=>'AL', +65140=>'AL', +65142=>'AL', +65143=>'AL', +65144=>'AL', +65145=>'AL', +65146=>'AL', +65147=>'AL', +65148=>'AL', +65149=>'AL', +65150=>'AL', +65151=>'AL', +65152=>'AL', +65153=>'AL', +65154=>'AL', +65155=>'AL', +65156=>'AL', +65157=>'AL', +65158=>'AL', +65159=>'AL', +65160=>'AL', +65161=>'AL', +65162=>'AL', +65163=>'AL', +65164=>'AL', +65165=>'AL', +65166=>'AL', +65167=>'AL', +65168=>'AL', +65169=>'AL', +65170=>'AL', +65171=>'AL', +65172=>'AL', +65173=>'AL', +65174=>'AL', +65175=>'AL', +65176=>'AL', +65177=>'AL', +65178=>'AL', +65179=>'AL', +65180=>'AL', +65181=>'AL', +65182=>'AL', +65183=>'AL', +65184=>'AL', +65185=>'AL', +65186=>'AL', +65187=>'AL', +65188=>'AL', +65189=>'AL', +65190=>'AL', +65191=>'AL', +65192=>'AL', +65193=>'AL', +65194=>'AL', +65195=>'AL', +65196=>'AL', +65197=>'AL', +65198=>'AL', +65199=>'AL', +65200=>'AL', +65201=>'AL', +65202=>'AL', +65203=>'AL', +65204=>'AL', +65205=>'AL', +65206=>'AL', +65207=>'AL', +65208=>'AL', +65209=>'AL', +65210=>'AL', +65211=>'AL', +65212=>'AL', +65213=>'AL', +65214=>'AL', +65215=>'AL', +65216=>'AL', +65217=>'AL', +65218=>'AL', +65219=>'AL', +65220=>'AL', +65221=>'AL', +65222=>'AL', +65223=>'AL', +65224=>'AL', +65225=>'AL', +65226=>'AL', +65227=>'AL', +65228=>'AL', +65229=>'AL', +65230=>'AL', +65231=>'AL', +65232=>'AL', +65233=>'AL', +65234=>'AL', +65235=>'AL', +65236=>'AL', +65237=>'AL', +65238=>'AL', +65239=>'AL', +65240=>'AL', +65241=>'AL', +65242=>'AL', +65243=>'AL', +65244=>'AL', +65245=>'AL', +65246=>'AL', +65247=>'AL', +65248=>'AL', +65249=>'AL', +65250=>'AL', +65251=>'AL', +65252=>'AL', +65253=>'AL', +65254=>'AL', +65255=>'AL', +65256=>'AL', +65257=>'AL', +65258=>'AL', +65259=>'AL', +65260=>'AL', +65261=>'AL', +65262=>'AL', +65263=>'AL', +65264=>'AL', +65265=>'AL', +65266=>'AL', +65267=>'AL', +65268=>'AL', +65269=>'AL', +65270=>'AL', +65271=>'AL', +65272=>'AL', +65273=>'AL', +65274=>'AL', +65275=>'AL', +65276=>'AL', +65279=>'BN', +65281=>'ON', +65282=>'ON', +65283=>'ET', +65284=>'ET', +65285=>'ET', +65286=>'ON', +65287=>'ON', +65288=>'ON', +65289=>'ON', +65290=>'ON', +65291=>'ES', +65292=>'CS', +65293=>'ES', +65294=>'CS', +65295=>'CS', +65296=>'EN', +65297=>'EN', +65298=>'EN', +65299=>'EN', +65300=>'EN', +65301=>'EN', +65302=>'EN', +65303=>'EN', +65304=>'EN', +65305=>'EN', +65306=>'CS', +65307=>'ON', +65308=>'ON', +65309=>'ON', +65310=>'ON', +65311=>'ON', +65312=>'ON', +65313=>'L', +65314=>'L', +65315=>'L', +65316=>'L', +65317=>'L', +65318=>'L', +65319=>'L', +65320=>'L', +65321=>'L', +65322=>'L', +65323=>'L', +65324=>'L', +65325=>'L', +65326=>'L', +65327=>'L', +65328=>'L', +65329=>'L', +65330=>'L', +65331=>'L', +65332=>'L', +65333=>'L', +65334=>'L', +65335=>'L', +65336=>'L', +65337=>'L', +65338=>'L', +65339=>'ON', +65340=>'ON', +65341=>'ON', +65342=>'ON', +65343=>'ON', +65344=>'ON', +65345=>'L', +65346=>'L', +65347=>'L', +65348=>'L', +65349=>'L', +65350=>'L', +65351=>'L', +65352=>'L', +65353=>'L', +65354=>'L', +65355=>'L', +65356=>'L', +65357=>'L', +65358=>'L', +65359=>'L', +65360=>'L', +65361=>'L', +65362=>'L', +65363=>'L', +65364=>'L', +65365=>'L', +65366=>'L', +65367=>'L', +65368=>'L', +65369=>'L', +65370=>'L', +65371=>'ON', +65372=>'ON', +65373=>'ON', +65374=>'ON', +65375=>'ON', +65376=>'ON', +65377=>'ON', +65378=>'ON', +65379=>'ON', +65380=>'ON', +65381=>'ON', +65382=>'L', +65383=>'L', +65384=>'L', +65385=>'L', +65386=>'L', +65387=>'L', +65388=>'L', +65389=>'L', +65390=>'L', +65391=>'L', +65392=>'L', +65393=>'L', +65394=>'L', +65395=>'L', +65396=>'L', +65397=>'L', +65398=>'L', +65399=>'L', +65400=>'L', +65401=>'L', +65402=>'L', +65403=>'L', +65404=>'L', +65405=>'L', +65406=>'L', +65407=>'L', +65408=>'L', +65409=>'L', +65410=>'L', +65411=>'L', +65412=>'L', +65413=>'L', +65414=>'L', +65415=>'L', +65416=>'L', +65417=>'L', +65418=>'L', +65419=>'L', +65420=>'L', +65421=>'L', +65422=>'L', +65423=>'L', +65424=>'L', +65425=>'L', +65426=>'L', +65427=>'L', +65428=>'L', +65429=>'L', +65430=>'L', +65431=>'L', +65432=>'L', +65433=>'L', +65434=>'L', +65435=>'L', +65436=>'L', +65437=>'L', +65438=>'L', +65439=>'L', +65440=>'L', +65441=>'L', +65442=>'L', +65443=>'L', +65444=>'L', +65445=>'L', +65446=>'L', +65447=>'L', +65448=>'L', +65449=>'L', +65450=>'L', +65451=>'L', +65452=>'L', +65453=>'L', +65454=>'L', +65455=>'L', +65456=>'L', +65457=>'L', +65458=>'L', +65459=>'L', +65460=>'L', +65461=>'L', +65462=>'L', +65463=>'L', +65464=>'L', +65465=>'L', +65466=>'L', +65467=>'L', +65468=>'L', +65469=>'L', +65470=>'L', +65474=>'L', +65475=>'L', +65476=>'L', +65477=>'L', +65478=>'L', +65479=>'L', +65482=>'L', +65483=>'L', +65484=>'L', +65485=>'L', +65486=>'L', +65487=>'L', +65490=>'L', +65491=>'L', +65492=>'L', +65493=>'L', +65494=>'L', +65495=>'L', +65498=>'L', +65499=>'L', +65500=>'L', +65504=>'ET', +65505=>'ET', +65506=>'ON', +65507=>'ON', +65508=>'ON', +65509=>'ET', +65510=>'ET', +65512=>'ON', +65513=>'ON', +65514=>'ON', +65515=>'ON', +65516=>'ON', +65517=>'ON', +65518=>'ON', +65529=>'ON', +65530=>'ON', +65531=>'ON', +65532=>'ON', +65533=>'ON', +65536=>'L', +65537=>'L', +65538=>'L', +65539=>'L', +65540=>'L', +65541=>'L', +65542=>'L', +65543=>'L', +65544=>'L', +65545=>'L', +65546=>'L', +65547=>'L', +65549=>'L', +65550=>'L', +65551=>'L', +65552=>'L', +65553=>'L', +65554=>'L', +65555=>'L', +65556=>'L', +65557=>'L', +65558=>'L', +65559=>'L', +65560=>'L', +65561=>'L', +65562=>'L', +65563=>'L', +65564=>'L', +65565=>'L', +65566=>'L', +65567=>'L', +65568=>'L', +65569=>'L', +65570=>'L', +65571=>'L', +65572=>'L', +65573=>'L', +65574=>'L', +65576=>'L', +65577=>'L', +65578=>'L', +65579=>'L', +65580=>'L', +65581=>'L', +65582=>'L', +65583=>'L', +65584=>'L', +65585=>'L', +65586=>'L', +65587=>'L', +65588=>'L', +65589=>'L', +65590=>'L', +65591=>'L', +65592=>'L', +65593=>'L', +65594=>'L', +65596=>'L', +65597=>'L', +65599=>'L', +65600=>'L', +65601=>'L', +65602=>'L', +65603=>'L', +65604=>'L', +65605=>'L', +65606=>'L', +65607=>'L', +65608=>'L', +65609=>'L', +65610=>'L', +65611=>'L', +65612=>'L', +65613=>'L', +65616=>'L', +65617=>'L', +65618=>'L', +65619=>'L', +65620=>'L', +65621=>'L', +65622=>'L', +65623=>'L', +65624=>'L', +65625=>'L', +65626=>'L', +65627=>'L', +65628=>'L', +65629=>'L', +65664=>'L', +65665=>'L', +65666=>'L', +65667=>'L', +65668=>'L', +65669=>'L', +65670=>'L', +65671=>'L', +65672=>'L', +65673=>'L', +65674=>'L', +65675=>'L', +65676=>'L', +65677=>'L', +65678=>'L', +65679=>'L', +65680=>'L', +65681=>'L', +65682=>'L', +65683=>'L', +65684=>'L', +65685=>'L', +65686=>'L', +65687=>'L', +65688=>'L', +65689=>'L', +65690=>'L', +65691=>'L', +65692=>'L', +65693=>'L', +65694=>'L', +65695=>'L', +65696=>'L', +65697=>'L', +65698=>'L', +65699=>'L', +65700=>'L', +65701=>'L', +65702=>'L', +65703=>'L', +65704=>'L', +65705=>'L', +65706=>'L', +65707=>'L', +65708=>'L', +65709=>'L', +65710=>'L', +65711=>'L', +65712=>'L', +65713=>'L', +65714=>'L', +65715=>'L', +65716=>'L', +65717=>'L', +65718=>'L', +65719=>'L', +65720=>'L', +65721=>'L', +65722=>'L', +65723=>'L', +65724=>'L', +65725=>'L', +65726=>'L', +65727=>'L', +65728=>'L', +65729=>'L', +65730=>'L', +65731=>'L', +65732=>'L', +65733=>'L', +65734=>'L', +65735=>'L', +65736=>'L', +65737=>'L', +65738=>'L', +65739=>'L', +65740=>'L', +65741=>'L', +65742=>'L', +65743=>'L', +65744=>'L', +65745=>'L', +65746=>'L', +65747=>'L', +65748=>'L', +65749=>'L', +65750=>'L', +65751=>'L', +65752=>'L', +65753=>'L', +65754=>'L', +65755=>'L', +65756=>'L', +65757=>'L', +65758=>'L', +65759=>'L', +65760=>'L', +65761=>'L', +65762=>'L', +65763=>'L', +65764=>'L', +65765=>'L', +65766=>'L', +65767=>'L', +65768=>'L', +65769=>'L', +65770=>'L', +65771=>'L', +65772=>'L', +65773=>'L', +65774=>'L', +65775=>'L', +65776=>'L', +65777=>'L', +65778=>'L', +65779=>'L', +65780=>'L', +65781=>'L', +65782=>'L', +65783=>'L', +65784=>'L', +65785=>'L', +65786=>'L', +65792=>'L', +65793=>'ON', +65794=>'L', +65799=>'L', +65800=>'L', +65801=>'L', +65802=>'L', +65803=>'L', +65804=>'L', +65805=>'L', +65806=>'L', +65807=>'L', +65808=>'L', +65809=>'L', +65810=>'L', +65811=>'L', +65812=>'L', +65813=>'L', +65814=>'L', +65815=>'L', +65816=>'L', +65817=>'L', +65818=>'L', +65819=>'L', +65820=>'L', +65821=>'L', +65822=>'L', +65823=>'L', +65824=>'L', +65825=>'L', +65826=>'L', +65827=>'L', +65828=>'L', +65829=>'L', +65830=>'L', +65831=>'L', +65832=>'L', +65833=>'L', +65834=>'L', +65835=>'L', +65836=>'L', +65837=>'L', +65838=>'L', +65839=>'L', +65840=>'L', +65841=>'L', +65842=>'L', +65843=>'L', +65847=>'L', +65848=>'L', +65849=>'L', +65850=>'L', +65851=>'L', +65852=>'L', +65853=>'L', +65854=>'L', +65855=>'L', +65856=>'ON', +65857=>'ON', +65858=>'ON', +65859=>'ON', +65860=>'ON', +65861=>'ON', +65862=>'ON', +65863=>'ON', +65864=>'ON', +65865=>'ON', +65866=>'ON', +65867=>'ON', +65868=>'ON', +65869=>'ON', +65870=>'ON', +65871=>'ON', +65872=>'ON', +65873=>'ON', +65874=>'ON', +65875=>'ON', +65876=>'ON', +65877=>'ON', +65878=>'ON', +65879=>'ON', +65880=>'ON', +65881=>'ON', +65882=>'ON', +65883=>'ON', +65884=>'ON', +65885=>'ON', +65886=>'ON', +65887=>'ON', +65888=>'ON', +65889=>'ON', +65890=>'ON', +65891=>'ON', +65892=>'ON', +65893=>'ON', +65894=>'ON', +65895=>'ON', +65896=>'ON', +65897=>'ON', +65898=>'ON', +65899=>'ON', +65900=>'ON', +65901=>'ON', +65902=>'ON', +65903=>'ON', +65904=>'ON', +65905=>'ON', +65906=>'ON', +65907=>'ON', +65908=>'ON', +65909=>'ON', +65910=>'ON', +65911=>'ON', +65912=>'ON', +65913=>'ON', +65914=>'ON', +65915=>'ON', +65916=>'ON', +65917=>'ON', +65918=>'ON', +65919=>'ON', +65920=>'ON', +65921=>'ON', +65922=>'ON', +65923=>'ON', +65924=>'ON', +65925=>'ON', +65926=>'ON', +65927=>'ON', +65928=>'ON', +65929=>'ON', +65930=>'ON', +66304=>'L', +66305=>'L', +66306=>'L', +66307=>'L', +66308=>'L', +66309=>'L', +66310=>'L', +66311=>'L', +66312=>'L', +66313=>'L', +66314=>'L', +66315=>'L', +66316=>'L', +66317=>'L', +66318=>'L', +66319=>'L', +66320=>'L', +66321=>'L', +66322=>'L', +66323=>'L', +66324=>'L', +66325=>'L', +66326=>'L', +66327=>'L', +66328=>'L', +66329=>'L', +66330=>'L', +66331=>'L', +66332=>'L', +66333=>'L', +66334=>'L', +66336=>'L', +66337=>'L', +66338=>'L', +66339=>'L', +66352=>'L', +66353=>'L', +66354=>'L', +66355=>'L', +66356=>'L', +66357=>'L', +66358=>'L', +66359=>'L', +66360=>'L', +66361=>'L', +66362=>'L', +66363=>'L', +66364=>'L', +66365=>'L', +66366=>'L', +66367=>'L', +66368=>'L', +66369=>'L', +66370=>'L', +66371=>'L', +66372=>'L', +66373=>'L', +66374=>'L', +66375=>'L', +66376=>'L', +66377=>'L', +66378=>'L', +66432=>'L', +66433=>'L', +66434=>'L', +66435=>'L', +66436=>'L', +66437=>'L', +66438=>'L', +66439=>'L', +66440=>'L', +66441=>'L', +66442=>'L', +66443=>'L', +66444=>'L', +66445=>'L', +66446=>'L', +66447=>'L', +66448=>'L', +66449=>'L', +66450=>'L', +66451=>'L', +66452=>'L', +66453=>'L', +66454=>'L', +66455=>'L', +66456=>'L', +66457=>'L', +66458=>'L', +66459=>'L', +66460=>'L', +66461=>'L', +66463=>'L', +66464=>'L', +66465=>'L', +66466=>'L', +66467=>'L', +66468=>'L', +66469=>'L', +66470=>'L', +66471=>'L', +66472=>'L', +66473=>'L', +66474=>'L', +66475=>'L', +66476=>'L', +66477=>'L', +66478=>'L', +66479=>'L', +66480=>'L', +66481=>'L', +66482=>'L', +66483=>'L', +66484=>'L', +66485=>'L', +66486=>'L', +66487=>'L', +66488=>'L', +66489=>'L', +66490=>'L', +66491=>'L', +66492=>'L', +66493=>'L', +66494=>'L', +66495=>'L', +66496=>'L', +66497=>'L', +66498=>'L', +66499=>'L', +66504=>'L', +66505=>'L', +66506=>'L', +66507=>'L', +66508=>'L', +66509=>'L', +66510=>'L', +66511=>'L', +66512=>'L', +66513=>'L', +66514=>'L', +66515=>'L', +66516=>'L', +66517=>'L', +66560=>'L', +66561=>'L', +66562=>'L', +66563=>'L', +66564=>'L', +66565=>'L', +66566=>'L', +66567=>'L', +66568=>'L', +66569=>'L', +66570=>'L', +66571=>'L', +66572=>'L', +66573=>'L', +66574=>'L', +66575=>'L', +66576=>'L', +66577=>'L', +66578=>'L', +66579=>'L', +66580=>'L', +66581=>'L', +66582=>'L', +66583=>'L', +66584=>'L', +66585=>'L', +66586=>'L', +66587=>'L', +66588=>'L', +66589=>'L', +66590=>'L', +66591=>'L', +66592=>'L', +66593=>'L', +66594=>'L', +66595=>'L', +66596=>'L', +66597=>'L', +66598=>'L', +66599=>'L', +66600=>'L', +66601=>'L', +66602=>'L', +66603=>'L', +66604=>'L', +66605=>'L', +66606=>'L', +66607=>'L', +66608=>'L', +66609=>'L', +66610=>'L', +66611=>'L', +66612=>'L', +66613=>'L', +66614=>'L', +66615=>'L', +66616=>'L', +66617=>'L', +66618=>'L', +66619=>'L', +66620=>'L', +66621=>'L', +66622=>'L', +66623=>'L', +66624=>'L', +66625=>'L', +66626=>'L', +66627=>'L', +66628=>'L', +66629=>'L', +66630=>'L', +66631=>'L', +66632=>'L', +66633=>'L', +66634=>'L', +66635=>'L', +66636=>'L', +66637=>'L', +66638=>'L', +66639=>'L', +66640=>'L', +66641=>'L', +66642=>'L', +66643=>'L', +66644=>'L', +66645=>'L', +66646=>'L', +66647=>'L', +66648=>'L', +66649=>'L', +66650=>'L', +66651=>'L', +66652=>'L', +66653=>'L', +66654=>'L', +66655=>'L', +66656=>'L', +66657=>'L', +66658=>'L', +66659=>'L', +66660=>'L', +66661=>'L', +66662=>'L', +66663=>'L', +66664=>'L', +66665=>'L', +66666=>'L', +66667=>'L', +66668=>'L', +66669=>'L', +66670=>'L', +66671=>'L', +66672=>'L', +66673=>'L', +66674=>'L', +66675=>'L', +66676=>'L', +66677=>'L', +66678=>'L', +66679=>'L', +66680=>'L', +66681=>'L', +66682=>'L', +66683=>'L', +66684=>'L', +66685=>'L', +66686=>'L', +66687=>'L', +66688=>'L', +66689=>'L', +66690=>'L', +66691=>'L', +66692=>'L', +66693=>'L', +66694=>'L', +66695=>'L', +66696=>'L', +66697=>'L', +66698=>'L', +66699=>'L', +66700=>'L', +66701=>'L', +66702=>'L', +66703=>'L', +66704=>'L', +66705=>'L', +66706=>'L', +66707=>'L', +66708=>'L', +66709=>'L', +66710=>'L', +66711=>'L', +66712=>'L', +66713=>'L', +66714=>'L', +66715=>'L', +66716=>'L', +66717=>'L', +66720=>'L', +66721=>'L', +66722=>'L', +66723=>'L', +66724=>'L', +66725=>'L', +66726=>'L', +66727=>'L', +66728=>'L', +66729=>'L', +67584=>'R', +67585=>'R', +67586=>'R', +67587=>'R', +67588=>'R', +67589=>'R', +67592=>'R', +67594=>'R', +67595=>'R', +67596=>'R', +67597=>'R', +67598=>'R', +67599=>'R', +67600=>'R', +67601=>'R', +67602=>'R', +67603=>'R', +67604=>'R', +67605=>'R', +67606=>'R', +67607=>'R', +67608=>'R', +67609=>'R', +67610=>'R', +67611=>'R', +67612=>'R', +67613=>'R', +67614=>'R', +67615=>'R', +67616=>'R', +67617=>'R', +67618=>'R', +67619=>'R', +67620=>'R', +67621=>'R', +67622=>'R', +67623=>'R', +67624=>'R', +67625=>'R', +67626=>'R', +67627=>'R', +67628=>'R', +67629=>'R', +67630=>'R', +67631=>'R', +67632=>'R', +67633=>'R', +67634=>'R', +67635=>'R', +67636=>'R', +67637=>'R', +67639=>'R', +67640=>'R', +67644=>'R', +67647=>'R', +67840=>'R', +67841=>'R', +67842=>'R', +67843=>'R', +67844=>'R', +67845=>'R', +67846=>'R', +67847=>'R', +67848=>'R', +67849=>'R', +67850=>'R', +67851=>'R', +67852=>'R', +67853=>'R', +67854=>'R', +67855=>'R', +67856=>'R', +67857=>'R', +67858=>'R', +67859=>'R', +67860=>'R', +67861=>'R', +67862=>'R', +67863=>'R', +67864=>'R', +67865=>'R', +67871=>'ON', +68096=>'R', +68097=>'NSM', +68098=>'NSM', +68099=>'NSM', +68101=>'NSM', +68102=>'NSM', +68108=>'NSM', +68109=>'NSM', +68110=>'NSM', +68111=>'NSM', +68112=>'R', +68113=>'R', +68114=>'R', +68115=>'R', +68117=>'R', +68118=>'R', +68119=>'R', +68121=>'R', +68122=>'R', +68123=>'R', +68124=>'R', +68125=>'R', +68126=>'R', +68127=>'R', +68128=>'R', +68129=>'R', +68130=>'R', +68131=>'R', +68132=>'R', +68133=>'R', +68134=>'R', +68135=>'R', +68136=>'R', +68137=>'R', +68138=>'R', +68139=>'R', +68140=>'R', +68141=>'R', +68142=>'R', +68143=>'R', +68144=>'R', +68145=>'R', +68146=>'R', +68147=>'R', +68152=>'NSM', +68153=>'NSM', +68154=>'NSM', +68159=>'NSM', +68160=>'R', +68161=>'R', +68162=>'R', +68163=>'R', +68164=>'R', +68165=>'R', +68166=>'R', +68167=>'R', +68176=>'R', +68177=>'R', +68178=>'R', +68179=>'R', +68180=>'R', +68181=>'R', +68182=>'R', +68183=>'R', +68184=>'R', +73728=>'L', +73729=>'L', +73730=>'L', +73731=>'L', +73732=>'L', +73733=>'L', +73734=>'L', +73735=>'L', +73736=>'L', +73737=>'L', +73738=>'L', +73739=>'L', +73740=>'L', +73741=>'L', +73742=>'L', +73743=>'L', +73744=>'L', +73745=>'L', +73746=>'L', +73747=>'L', +73748=>'L', +73749=>'L', +73750=>'L', +73751=>'L', +73752=>'L', +73753=>'L', +73754=>'L', +73755=>'L', +73756=>'L', +73757=>'L', +73758=>'L', +73759=>'L', +73760=>'L', +73761=>'L', +73762=>'L', +73763=>'L', +73764=>'L', +73765=>'L', +73766=>'L', +73767=>'L', +73768=>'L', +73769=>'L', +73770=>'L', +73771=>'L', +73772=>'L', +73773=>'L', +73774=>'L', +73775=>'L', +73776=>'L', +73777=>'L', +73778=>'L', +73779=>'L', +73780=>'L', +73781=>'L', +73782=>'L', +73783=>'L', +73784=>'L', +73785=>'L', +73786=>'L', +73787=>'L', +73788=>'L', +73789=>'L', +73790=>'L', +73791=>'L', +73792=>'L', +73793=>'L', +73794=>'L', +73795=>'L', +73796=>'L', +73797=>'L', +73798=>'L', +73799=>'L', +73800=>'L', +73801=>'L', +73802=>'L', +73803=>'L', +73804=>'L', +73805=>'L', +73806=>'L', +73807=>'L', +73808=>'L', +73809=>'L', +73810=>'L', +73811=>'L', +73812=>'L', +73813=>'L', +73814=>'L', +73815=>'L', +73816=>'L', +73817=>'L', +73818=>'L', +73819=>'L', +73820=>'L', +73821=>'L', +73822=>'L', +73823=>'L', +73824=>'L', +73825=>'L', +73826=>'L', +73827=>'L', +73828=>'L', +73829=>'L', +73830=>'L', +73831=>'L', +73832=>'L', +73833=>'L', +73834=>'L', +73835=>'L', +73836=>'L', +73837=>'L', +73838=>'L', +73839=>'L', +73840=>'L', +73841=>'L', +73842=>'L', +73843=>'L', +73844=>'L', +73845=>'L', +73846=>'L', +73847=>'L', +73848=>'L', +73849=>'L', +73850=>'L', +73851=>'L', +73852=>'L', +73853=>'L', +73854=>'L', +73855=>'L', +73856=>'L', +73857=>'L', +73858=>'L', +73859=>'L', +73860=>'L', +73861=>'L', +73862=>'L', +73863=>'L', +73864=>'L', +73865=>'L', +73866=>'L', +73867=>'L', +73868=>'L', +73869=>'L', +73870=>'L', +73871=>'L', +73872=>'L', +73873=>'L', +73874=>'L', +73875=>'L', +73876=>'L', +73877=>'L', +73878=>'L', +73879=>'L', +73880=>'L', +73881=>'L', +73882=>'L', +73883=>'L', +73884=>'L', +73885=>'L', +73886=>'L', +73887=>'L', +73888=>'L', +73889=>'L', +73890=>'L', +73891=>'L', +73892=>'L', +73893=>'L', +73894=>'L', +73895=>'L', +73896=>'L', +73897=>'L', +73898=>'L', +73899=>'L', +73900=>'L', +73901=>'L', +73902=>'L', +73903=>'L', +73904=>'L', +73905=>'L', +73906=>'L', +73907=>'L', +73908=>'L', +73909=>'L', +73910=>'L', +73911=>'L', +73912=>'L', +73913=>'L', +73914=>'L', +73915=>'L', +73916=>'L', +73917=>'L', +73918=>'L', +73919=>'L', +73920=>'L', +73921=>'L', +73922=>'L', +73923=>'L', +73924=>'L', +73925=>'L', +73926=>'L', +73927=>'L', +73928=>'L', +73929=>'L', +73930=>'L', +73931=>'L', +73932=>'L', +73933=>'L', +73934=>'L', +73935=>'L', +73936=>'L', +73937=>'L', +73938=>'L', +73939=>'L', +73940=>'L', +73941=>'L', +73942=>'L', +73943=>'L', +73944=>'L', +73945=>'L', +73946=>'L', +73947=>'L', +73948=>'L', +73949=>'L', +73950=>'L', +73951=>'L', +73952=>'L', +73953=>'L', +73954=>'L', +73955=>'L', +73956=>'L', +73957=>'L', +73958=>'L', +73959=>'L', +73960=>'L', +73961=>'L', +73962=>'L', +73963=>'L', +73964=>'L', +73965=>'L', +73966=>'L', +73967=>'L', +73968=>'L', +73969=>'L', +73970=>'L', +73971=>'L', +73972=>'L', +73973=>'L', +73974=>'L', +73975=>'L', +73976=>'L', +73977=>'L', +73978=>'L', +73979=>'L', +73980=>'L', +73981=>'L', +73982=>'L', +73983=>'L', +73984=>'L', +73985=>'L', +73986=>'L', +73987=>'L', +73988=>'L', +73989=>'L', +73990=>'L', +73991=>'L', +73992=>'L', +73993=>'L', +73994=>'L', +73995=>'L', +73996=>'L', +73997=>'L', +73998=>'L', +73999=>'L', +74000=>'L', +74001=>'L', +74002=>'L', +74003=>'L', +74004=>'L', +74005=>'L', +74006=>'L', +74007=>'L', +74008=>'L', +74009=>'L', +74010=>'L', +74011=>'L', +74012=>'L', +74013=>'L', +74014=>'L', +74015=>'L', +74016=>'L', +74017=>'L', +74018=>'L', +74019=>'L', +74020=>'L', +74021=>'L', +74022=>'L', +74023=>'L', +74024=>'L', +74025=>'L', +74026=>'L', +74027=>'L', +74028=>'L', +74029=>'L', +74030=>'L', +74031=>'L', +74032=>'L', +74033=>'L', +74034=>'L', +74035=>'L', +74036=>'L', +74037=>'L', +74038=>'L', +74039=>'L', +74040=>'L', +74041=>'L', +74042=>'L', +74043=>'L', +74044=>'L', +74045=>'L', +74046=>'L', +74047=>'L', +74048=>'L', +74049=>'L', +74050=>'L', +74051=>'L', +74052=>'L', +74053=>'L', +74054=>'L', +74055=>'L', +74056=>'L', +74057=>'L', +74058=>'L', +74059=>'L', +74060=>'L', +74061=>'L', +74062=>'L', +74063=>'L', +74064=>'L', +74065=>'L', +74066=>'L', +74067=>'L', +74068=>'L', +74069=>'L', +74070=>'L', +74071=>'L', +74072=>'L', +74073=>'L', +74074=>'L', +74075=>'L', +74076=>'L', +74077=>'L', +74078=>'L', +74079=>'L', +74080=>'L', +74081=>'L', +74082=>'L', +74083=>'L', +74084=>'L', +74085=>'L', +74086=>'L', +74087=>'L', +74088=>'L', +74089=>'L', +74090=>'L', +74091=>'L', +74092=>'L', +74093=>'L', +74094=>'L', +74095=>'L', +74096=>'L', +74097=>'L', +74098=>'L', +74099=>'L', +74100=>'L', +74101=>'L', +74102=>'L', +74103=>'L', +74104=>'L', +74105=>'L', +74106=>'L', +74107=>'L', +74108=>'L', +74109=>'L', +74110=>'L', +74111=>'L', +74112=>'L', +74113=>'L', +74114=>'L', +74115=>'L', +74116=>'L', +74117=>'L', +74118=>'L', +74119=>'L', +74120=>'L', +74121=>'L', +74122=>'L', +74123=>'L', +74124=>'L', +74125=>'L', +74126=>'L', +74127=>'L', +74128=>'L', +74129=>'L', +74130=>'L', +74131=>'L', +74132=>'L', +74133=>'L', +74134=>'L', +74135=>'L', +74136=>'L', +74137=>'L', +74138=>'L', +74139=>'L', +74140=>'L', +74141=>'L', +74142=>'L', +74143=>'L', +74144=>'L', +74145=>'L', +74146=>'L', +74147=>'L', +74148=>'L', +74149=>'L', +74150=>'L', +74151=>'L', +74152=>'L', +74153=>'L', +74154=>'L', +74155=>'L', +74156=>'L', +74157=>'L', +74158=>'L', +74159=>'L', +74160=>'L', +74161=>'L', +74162=>'L', +74163=>'L', +74164=>'L', +74165=>'L', +74166=>'L', +74167=>'L', +74168=>'L', +74169=>'L', +74170=>'L', +74171=>'L', +74172=>'L', +74173=>'L', +74174=>'L', +74175=>'L', +74176=>'L', +74177=>'L', +74178=>'L', +74179=>'L', +74180=>'L', +74181=>'L', +74182=>'L', +74183=>'L', +74184=>'L', +74185=>'L', +74186=>'L', +74187=>'L', +74188=>'L', +74189=>'L', +74190=>'L', +74191=>'L', +74192=>'L', +74193=>'L', +74194=>'L', +74195=>'L', +74196=>'L', +74197=>'L', +74198=>'L', +74199=>'L', +74200=>'L', +74201=>'L', +74202=>'L', +74203=>'L', +74204=>'L', +74205=>'L', +74206=>'L', +74207=>'L', +74208=>'L', +74209=>'L', +74210=>'L', +74211=>'L', +74212=>'L', +74213=>'L', +74214=>'L', +74215=>'L', +74216=>'L', +74217=>'L', +74218=>'L', +74219=>'L', +74220=>'L', +74221=>'L', +74222=>'L', +74223=>'L', +74224=>'L', +74225=>'L', +74226=>'L', +74227=>'L', +74228=>'L', +74229=>'L', +74230=>'L', +74231=>'L', +74232=>'L', +74233=>'L', +74234=>'L', +74235=>'L', +74236=>'L', +74237=>'L', +74238=>'L', +74239=>'L', +74240=>'L', +74241=>'L', +74242=>'L', +74243=>'L', +74244=>'L', +74245=>'L', +74246=>'L', +74247=>'L', +74248=>'L', +74249=>'L', +74250=>'L', +74251=>'L', +74252=>'L', +74253=>'L', +74254=>'L', +74255=>'L', +74256=>'L', +74257=>'L', +74258=>'L', +74259=>'L', +74260=>'L', +74261=>'L', +74262=>'L', +74263=>'L', +74264=>'L', +74265=>'L', +74266=>'L', +74267=>'L', +74268=>'L', +74269=>'L', +74270=>'L', +74271=>'L', +74272=>'L', +74273=>'L', +74274=>'L', +74275=>'L', +74276=>'L', +74277=>'L', +74278=>'L', +74279=>'L', +74280=>'L', +74281=>'L', +74282=>'L', +74283=>'L', +74284=>'L', +74285=>'L', +74286=>'L', +74287=>'L', +74288=>'L', +74289=>'L', +74290=>'L', +74291=>'L', +74292=>'L', +74293=>'L', +74294=>'L', +74295=>'L', +74296=>'L', +74297=>'L', +74298=>'L', +74299=>'L', +74300=>'L', +74301=>'L', +74302=>'L', +74303=>'L', +74304=>'L', +74305=>'L', +74306=>'L', +74307=>'L', +74308=>'L', +74309=>'L', +74310=>'L', +74311=>'L', +74312=>'L', +74313=>'L', +74314=>'L', +74315=>'L', +74316=>'L', +74317=>'L', +74318=>'L', +74319=>'L', +74320=>'L', +74321=>'L', +74322=>'L', +74323=>'L', +74324=>'L', +74325=>'L', +74326=>'L', +74327=>'L', +74328=>'L', +74329=>'L', +74330=>'L', +74331=>'L', +74332=>'L', +74333=>'L', +74334=>'L', +74335=>'L', +74336=>'L', +74337=>'L', +74338=>'L', +74339=>'L', +74340=>'L', +74341=>'L', +74342=>'L', +74343=>'L', +74344=>'L', +74345=>'L', +74346=>'L', +74347=>'L', +74348=>'L', +74349=>'L', +74350=>'L', +74351=>'L', +74352=>'L', +74353=>'L', +74354=>'L', +74355=>'L', +74356=>'L', +74357=>'L', +74358=>'L', +74359=>'L', +74360=>'L', +74361=>'L', +74362=>'L', +74363=>'L', +74364=>'L', +74365=>'L', +74366=>'L', +74367=>'L', +74368=>'L', +74369=>'L', +74370=>'L', +74371=>'L', +74372=>'L', +74373=>'L', +74374=>'L', +74375=>'L', +74376=>'L', +74377=>'L', +74378=>'L', +74379=>'L', +74380=>'L', +74381=>'L', +74382=>'L', +74383=>'L', +74384=>'L', +74385=>'L', +74386=>'L', +74387=>'L', +74388=>'L', +74389=>'L', +74390=>'L', +74391=>'L', +74392=>'L', +74393=>'L', +74394=>'L', +74395=>'L', +74396=>'L', +74397=>'L', +74398=>'L', +74399=>'L', +74400=>'L', +74401=>'L', +74402=>'L', +74403=>'L', +74404=>'L', +74405=>'L', +74406=>'L', +74407=>'L', +74408=>'L', +74409=>'L', +74410=>'L', +74411=>'L', +74412=>'L', +74413=>'L', +74414=>'L', +74415=>'L', +74416=>'L', +74417=>'L', +74418=>'L', +74419=>'L', +74420=>'L', +74421=>'L', +74422=>'L', +74423=>'L', +74424=>'L', +74425=>'L', +74426=>'L', +74427=>'L', +74428=>'L', +74429=>'L', +74430=>'L', +74431=>'L', +74432=>'L', +74433=>'L', +74434=>'L', +74435=>'L', +74436=>'L', +74437=>'L', +74438=>'L', +74439=>'L', +74440=>'L', +74441=>'L', +74442=>'L', +74443=>'L', +74444=>'L', +74445=>'L', +74446=>'L', +74447=>'L', +74448=>'L', +74449=>'L', +74450=>'L', +74451=>'L', +74452=>'L', +74453=>'L', +74454=>'L', +74455=>'L', +74456=>'L', +74457=>'L', +74458=>'L', +74459=>'L', +74460=>'L', +74461=>'L', +74462=>'L', +74463=>'L', +74464=>'L', +74465=>'L', +74466=>'L', +74467=>'L', +74468=>'L', +74469=>'L', +74470=>'L', +74471=>'L', +74472=>'L', +74473=>'L', +74474=>'L', +74475=>'L', +74476=>'L', +74477=>'L', +74478=>'L', +74479=>'L', +74480=>'L', +74481=>'L', +74482=>'L', +74483=>'L', +74484=>'L', +74485=>'L', +74486=>'L', +74487=>'L', +74488=>'L', +74489=>'L', +74490=>'L', +74491=>'L', +74492=>'L', +74493=>'L', +74494=>'L', +74495=>'L', +74496=>'L', +74497=>'L', +74498=>'L', +74499=>'L', +74500=>'L', +74501=>'L', +74502=>'L', +74503=>'L', +74504=>'L', +74505=>'L', +74506=>'L', +74507=>'L', +74508=>'L', +74509=>'L', +74510=>'L', +74511=>'L', +74512=>'L', +74513=>'L', +74514=>'L', +74515=>'L', +74516=>'L', +74517=>'L', +74518=>'L', +74519=>'L', +74520=>'L', +74521=>'L', +74522=>'L', +74523=>'L', +74524=>'L', +74525=>'L', +74526=>'L', +74527=>'L', +74528=>'L', +74529=>'L', +74530=>'L', +74531=>'L', +74532=>'L', +74533=>'L', +74534=>'L', +74535=>'L', +74536=>'L', +74537=>'L', +74538=>'L', +74539=>'L', +74540=>'L', +74541=>'L', +74542=>'L', +74543=>'L', +74544=>'L', +74545=>'L', +74546=>'L', +74547=>'L', +74548=>'L', +74549=>'L', +74550=>'L', +74551=>'L', +74552=>'L', +74553=>'L', +74554=>'L', +74555=>'L', +74556=>'L', +74557=>'L', +74558=>'L', +74559=>'L', +74560=>'L', +74561=>'L', +74562=>'L', +74563=>'L', +74564=>'L', +74565=>'L', +74566=>'L', +74567=>'L', +74568=>'L', +74569=>'L', +74570=>'L', +74571=>'L', +74572=>'L', +74573=>'L', +74574=>'L', +74575=>'L', +74576=>'L', +74577=>'L', +74578=>'L', +74579=>'L', +74580=>'L', +74581=>'L', +74582=>'L', +74583=>'L', +74584=>'L', +74585=>'L', +74586=>'L', +74587=>'L', +74588=>'L', +74589=>'L', +74590=>'L', +74591=>'L', +74592=>'L', +74593=>'L', +74594=>'L', +74595=>'L', +74596=>'L', +74597=>'L', +74598=>'L', +74599=>'L', +74600=>'L', +74601=>'L', +74602=>'L', +74603=>'L', +74604=>'L', +74605=>'L', +74606=>'L', +74752=>'L', +74753=>'L', +74754=>'L', +74755=>'L', +74756=>'L', +74757=>'L', +74758=>'L', +74759=>'L', +74760=>'L', +74761=>'L', +74762=>'L', +74763=>'L', +74764=>'L', +74765=>'L', +74766=>'L', +74767=>'L', +74768=>'L', +74769=>'L', +74770=>'L', +74771=>'L', +74772=>'L', +74773=>'L', +74774=>'L', +74775=>'L', +74776=>'L', +74777=>'L', +74778=>'L', +74779=>'L', +74780=>'L', +74781=>'L', +74782=>'L', +74783=>'L', +74784=>'L', +74785=>'L', +74786=>'L', +74787=>'L', +74788=>'L', +74789=>'L', +74790=>'L', +74791=>'L', +74792=>'L', +74793=>'L', +74794=>'L', +74795=>'L', +74796=>'L', +74797=>'L', +74798=>'L', +74799=>'L', +74800=>'L', +74801=>'L', +74802=>'L', +74803=>'L', +74804=>'L', +74805=>'L', +74806=>'L', +74807=>'L', +74808=>'L', +74809=>'L', +74810=>'L', +74811=>'L', +74812=>'L', +74813=>'L', +74814=>'L', +74815=>'L', +74816=>'L', +74817=>'L', +74818=>'L', +74819=>'L', +74820=>'L', +74821=>'L', +74822=>'L', +74823=>'L', +74824=>'L', +74825=>'L', +74826=>'L', +74827=>'L', +74828=>'L', +74829=>'L', +74830=>'L', +74831=>'L', +74832=>'L', +74833=>'L', +74834=>'L', +74835=>'L', +74836=>'L', +74837=>'L', +74838=>'L', +74839=>'L', +74840=>'L', +74841=>'L', +74842=>'L', +74843=>'L', +74844=>'L', +74845=>'L', +74846=>'L', +74847=>'L', +74848=>'L', +74849=>'L', +74850=>'L', +74864=>'L', +74865=>'L', +74866=>'L', +74867=>'L', +118784=>'L', +118785=>'L', +118786=>'L', +118787=>'L', +118788=>'L', +118789=>'L', +118790=>'L', +118791=>'L', +118792=>'L', +118793=>'L', +118794=>'L', +118795=>'L', +118796=>'L', +118797=>'L', +118798=>'L', +118799=>'L', +118800=>'L', +118801=>'L', +118802=>'L', +118803=>'L', +118804=>'L', +118805=>'L', +118806=>'L', +118807=>'L', +118808=>'L', +118809=>'L', +118810=>'L', +118811=>'L', +118812=>'L', +118813=>'L', +118814=>'L', +118815=>'L', +118816=>'L', +118817=>'L', +118818=>'L', +118819=>'L', +118820=>'L', +118821=>'L', +118822=>'L', +118823=>'L', +118824=>'L', +118825=>'L', +118826=>'L', +118827=>'L', +118828=>'L', +118829=>'L', +118830=>'L', +118831=>'L', +118832=>'L', +118833=>'L', +118834=>'L', +118835=>'L', +118836=>'L', +118837=>'L', +118838=>'L', +118839=>'L', +118840=>'L', +118841=>'L', +118842=>'L', +118843=>'L', +118844=>'L', +118845=>'L', +118846=>'L', +118847=>'L', +118848=>'L', +118849=>'L', +118850=>'L', +118851=>'L', +118852=>'L', +118853=>'L', +118854=>'L', +118855=>'L', +118856=>'L', +118857=>'L', +118858=>'L', +118859=>'L', +118860=>'L', +118861=>'L', +118862=>'L', +118863=>'L', +118864=>'L', +118865=>'L', +118866=>'L', +118867=>'L', +118868=>'L', +118869=>'L', +118870=>'L', +118871=>'L', +118872=>'L', +118873=>'L', +118874=>'L', +118875=>'L', +118876=>'L', +118877=>'L', +118878=>'L', +118879=>'L', +118880=>'L', +118881=>'L', +118882=>'L', +118883=>'L', +118884=>'L', +118885=>'L', +118886=>'L', +118887=>'L', +118888=>'L', +118889=>'L', +118890=>'L', +118891=>'L', +118892=>'L', +118893=>'L', +118894=>'L', +118895=>'L', +118896=>'L', +118897=>'L', +118898=>'L', +118899=>'L', +118900=>'L', +118901=>'L', +118902=>'L', +118903=>'L', +118904=>'L', +118905=>'L', +118906=>'L', +118907=>'L', +118908=>'L', +118909=>'L', +118910=>'L', +118911=>'L', +118912=>'L', +118913=>'L', +118914=>'L', +118915=>'L', +118916=>'L', +118917=>'L', +118918=>'L', +118919=>'L', +118920=>'L', +118921=>'L', +118922=>'L', +118923=>'L', +118924=>'L', +118925=>'L', +118926=>'L', +118927=>'L', +118928=>'L', +118929=>'L', +118930=>'L', +118931=>'L', +118932=>'L', +118933=>'L', +118934=>'L', +118935=>'L', +118936=>'L', +118937=>'L', +118938=>'L', +118939=>'L', +118940=>'L', +118941=>'L', +118942=>'L', +118943=>'L', +118944=>'L', +118945=>'L', +118946=>'L', +118947=>'L', +118948=>'L', +118949=>'L', +118950=>'L', +118951=>'L', +118952=>'L', +118953=>'L', +118954=>'L', +118955=>'L', +118956=>'L', +118957=>'L', +118958=>'L', +118959=>'L', +118960=>'L', +118961=>'L', +118962=>'L', +118963=>'L', +118964=>'L', +118965=>'L', +118966=>'L', +118967=>'L', +118968=>'L', +118969=>'L', +118970=>'L', +118971=>'L', +118972=>'L', +118973=>'L', +118974=>'L', +118975=>'L', +118976=>'L', +118977=>'L', +118978=>'L', +118979=>'L', +118980=>'L', +118981=>'L', +118982=>'L', +118983=>'L', +118984=>'L', +118985=>'L', +118986=>'L', +118987=>'L', +118988=>'L', +118989=>'L', +118990=>'L', +118991=>'L', +118992=>'L', +118993=>'L', +118994=>'L', +118995=>'L', +118996=>'L', +118997=>'L', +118998=>'L', +118999=>'L', +119000=>'L', +119001=>'L', +119002=>'L', +119003=>'L', +119004=>'L', +119005=>'L', +119006=>'L', +119007=>'L', +119008=>'L', +119009=>'L', +119010=>'L', +119011=>'L', +119012=>'L', +119013=>'L', +119014=>'L', +119015=>'L', +119016=>'L', +119017=>'L', +119018=>'L', +119019=>'L', +119020=>'L', +119021=>'L', +119022=>'L', +119023=>'L', +119024=>'L', +119025=>'L', +119026=>'L', +119027=>'L', +119028=>'L', +119029=>'L', +119040=>'L', +119041=>'L', +119042=>'L', +119043=>'L', +119044=>'L', +119045=>'L', +119046=>'L', +119047=>'L', +119048=>'L', +119049=>'L', +119050=>'L', +119051=>'L', +119052=>'L', +119053=>'L', +119054=>'L', +119055=>'L', +119056=>'L', +119057=>'L', +119058=>'L', +119059=>'L', +119060=>'L', +119061=>'L', +119062=>'L', +119063=>'L', +119064=>'L', +119065=>'L', +119066=>'L', +119067=>'L', +119068=>'L', +119069=>'L', +119070=>'L', +119071=>'L', +119072=>'L', +119073=>'L', +119074=>'L', +119075=>'L', +119076=>'L', +119077=>'L', +119078=>'L', +119082=>'L', +119083=>'L', +119084=>'L', +119085=>'L', +119086=>'L', +119087=>'L', +119088=>'L', +119089=>'L', +119090=>'L', +119091=>'L', +119092=>'L', +119093=>'L', +119094=>'L', +119095=>'L', +119096=>'L', +119097=>'L', +119098=>'L', +119099=>'L', +119100=>'L', +119101=>'L', +119102=>'L', +119103=>'L', +119104=>'L', +119105=>'L', +119106=>'L', +119107=>'L', +119108=>'L', +119109=>'L', +119110=>'L', +119111=>'L', +119112=>'L', +119113=>'L', +119114=>'L', +119115=>'L', +119116=>'L', +119117=>'L', +119118=>'L', +119119=>'L', +119120=>'L', +119121=>'L', +119122=>'L', +119123=>'L', +119124=>'L', +119125=>'L', +119126=>'L', +119127=>'L', +119128=>'L', +119129=>'L', +119130=>'L', +119131=>'L', +119132=>'L', +119133=>'L', +119134=>'L', +119135=>'L', +119136=>'L', +119137=>'L', +119138=>'L', +119139=>'L', +119140=>'L', +119141=>'L', +119142=>'L', +119143=>'NSM', +119144=>'NSM', +119145=>'NSM', +119146=>'L', +119147=>'L', +119148=>'L', +119149=>'L', +119150=>'L', +119151=>'L', +119152=>'L', +119153=>'L', +119154=>'L', +119155=>'BN', +119156=>'BN', +119157=>'BN', +119158=>'BN', +119159=>'BN', +119160=>'BN', +119161=>'BN', +119162=>'BN', +119163=>'NSM', +119164=>'NSM', +119165=>'NSM', +119166=>'NSM', +119167=>'NSM', +119168=>'NSM', +119169=>'NSM', +119170=>'NSM', +119171=>'L', +119172=>'L', +119173=>'NSM', +119174=>'NSM', +119175=>'NSM', +119176=>'NSM', +119177=>'NSM', +119178=>'NSM', +119179=>'NSM', +119180=>'L', +119181=>'L', +119182=>'L', +119183=>'L', +119184=>'L', +119185=>'L', +119186=>'L', +119187=>'L', +119188=>'L', +119189=>'L', +119190=>'L', +119191=>'L', +119192=>'L', +119193=>'L', +119194=>'L', +119195=>'L', +119196=>'L', +119197=>'L', +119198=>'L', +119199=>'L', +119200=>'L', +119201=>'L', +119202=>'L', +119203=>'L', +119204=>'L', +119205=>'L', +119206=>'L', +119207=>'L', +119208=>'L', +119209=>'L', +119210=>'NSM', +119211=>'NSM', +119212=>'NSM', +119213=>'NSM', +119214=>'L', +119215=>'L', +119216=>'L', +119217=>'L', +119218=>'L', +119219=>'L', +119220=>'L', +119221=>'L', +119222=>'L', +119223=>'L', +119224=>'L', +119225=>'L', +119226=>'L', +119227=>'L', +119228=>'L', +119229=>'L', +119230=>'L', +119231=>'L', +119232=>'L', +119233=>'L', +119234=>'L', +119235=>'L', +119236=>'L', +119237=>'L', +119238=>'L', +119239=>'L', +119240=>'L', +119241=>'L', +119242=>'L', +119243=>'L', +119244=>'L', +119245=>'L', +119246=>'L', +119247=>'L', +119248=>'L', +119249=>'L', +119250=>'L', +119251=>'L', +119252=>'L', +119253=>'L', +119254=>'L', +119255=>'L', +119256=>'L', +119257=>'L', +119258=>'L', +119259=>'L', +119260=>'L', +119261=>'L', +119296=>'ON', +119297=>'ON', +119298=>'ON', +119299=>'ON', +119300=>'ON', +119301=>'ON', +119302=>'ON', +119303=>'ON', +119304=>'ON', +119305=>'ON', +119306=>'ON', +119307=>'ON', +119308=>'ON', +119309=>'ON', +119310=>'ON', +119311=>'ON', +119312=>'ON', +119313=>'ON', +119314=>'ON', +119315=>'ON', +119316=>'ON', +119317=>'ON', +119318=>'ON', +119319=>'ON', +119320=>'ON', +119321=>'ON', +119322=>'ON', +119323=>'ON', +119324=>'ON', +119325=>'ON', +119326=>'ON', +119327=>'ON', +119328=>'ON', +119329=>'ON', +119330=>'ON', +119331=>'ON', +119332=>'ON', +119333=>'ON', +119334=>'ON', +119335=>'ON', +119336=>'ON', +119337=>'ON', +119338=>'ON', +119339=>'ON', +119340=>'ON', +119341=>'ON', +119342=>'ON', +119343=>'ON', +119344=>'ON', +119345=>'ON', +119346=>'ON', +119347=>'ON', +119348=>'ON', +119349=>'ON', +119350=>'ON', +119351=>'ON', +119352=>'ON', +119353=>'ON', +119354=>'ON', +119355=>'ON', +119356=>'ON', +119357=>'ON', +119358=>'ON', +119359=>'ON', +119360=>'ON', +119361=>'ON', +119362=>'NSM', +119363=>'NSM', +119364=>'NSM', +119365=>'ON', +119552=>'ON', +119553=>'ON', +119554=>'ON', +119555=>'ON', +119556=>'ON', +119557=>'ON', +119558=>'ON', +119559=>'ON', +119560=>'ON', +119561=>'ON', +119562=>'ON', +119563=>'ON', +119564=>'ON', +119565=>'ON', +119566=>'ON', +119567=>'ON', +119568=>'ON', +119569=>'ON', +119570=>'ON', +119571=>'ON', +119572=>'ON', +119573=>'ON', +119574=>'ON', +119575=>'ON', +119576=>'ON', +119577=>'ON', +119578=>'ON', +119579=>'ON', +119580=>'ON', +119581=>'ON', +119582=>'ON', +119583=>'ON', +119584=>'ON', +119585=>'ON', +119586=>'ON', +119587=>'ON', +119588=>'ON', +119589=>'ON', +119590=>'ON', +119591=>'ON', +119592=>'ON', +119593=>'ON', +119594=>'ON', +119595=>'ON', +119596=>'ON', +119597=>'ON', +119598=>'ON', +119599=>'ON', +119600=>'ON', +119601=>'ON', +119602=>'ON', +119603=>'ON', +119604=>'ON', +119605=>'ON', +119606=>'ON', +119607=>'ON', +119608=>'ON', +119609=>'ON', +119610=>'ON', +119611=>'ON', +119612=>'ON', +119613=>'ON', +119614=>'ON', +119615=>'ON', +119616=>'ON', +119617=>'ON', +119618=>'ON', +119619=>'ON', +119620=>'ON', +119621=>'ON', +119622=>'ON', +119623=>'ON', +119624=>'ON', +119625=>'ON', +119626=>'ON', +119627=>'ON', +119628=>'ON', +119629=>'ON', +119630=>'ON', +119631=>'ON', +119632=>'ON', +119633=>'ON', +119634=>'ON', +119635=>'ON', +119636=>'ON', +119637=>'ON', +119638=>'ON', +119648=>'L', +119649=>'L', +119650=>'L', +119651=>'L', +119652=>'L', +119653=>'L', +119654=>'L', +119655=>'L', +119656=>'L', +119657=>'L', +119658=>'L', +119659=>'L', +119660=>'L', +119661=>'L', +119662=>'L', +119663=>'L', +119664=>'L', +119665=>'L', +119808=>'L', +119809=>'L', +119810=>'L', +119811=>'L', +119812=>'L', +119813=>'L', +119814=>'L', +119815=>'L', +119816=>'L', +119817=>'L', +119818=>'L', +119819=>'L', +119820=>'L', +119821=>'L', +119822=>'L', +119823=>'L', +119824=>'L', +119825=>'L', +119826=>'L', +119827=>'L', +119828=>'L', +119829=>'L', +119830=>'L', +119831=>'L', +119832=>'L', +119833=>'L', +119834=>'L', +119835=>'L', +119836=>'L', +119837=>'L', +119838=>'L', +119839=>'L', +119840=>'L', +119841=>'L', +119842=>'L', +119843=>'L', +119844=>'L', +119845=>'L', +119846=>'L', +119847=>'L', +119848=>'L', +119849=>'L', +119850=>'L', +119851=>'L', +119852=>'L', +119853=>'L', +119854=>'L', +119855=>'L', +119856=>'L', +119857=>'L', +119858=>'L', +119859=>'L', +119860=>'L', +119861=>'L', +119862=>'L', +119863=>'L', +119864=>'L', +119865=>'L', +119866=>'L', +119867=>'L', +119868=>'L', +119869=>'L', +119870=>'L', +119871=>'L', +119872=>'L', +119873=>'L', +119874=>'L', +119875=>'L', +119876=>'L', +119877=>'L', +119878=>'L', +119879=>'L', +119880=>'L', +119881=>'L', +119882=>'L', +119883=>'L', +119884=>'L', +119885=>'L', +119886=>'L', +119887=>'L', +119888=>'L', +119889=>'L', +119890=>'L', +119891=>'L', +119892=>'L', +119894=>'L', +119895=>'L', +119896=>'L', +119897=>'L', +119898=>'L', +119899=>'L', +119900=>'L', +119901=>'L', +119902=>'L', +119903=>'L', +119904=>'L', +119905=>'L', +119906=>'L', +119907=>'L', +119908=>'L', +119909=>'L', +119910=>'L', +119911=>'L', +119912=>'L', +119913=>'L', +119914=>'L', +119915=>'L', +119916=>'L', +119917=>'L', +119918=>'L', +119919=>'L', +119920=>'L', +119921=>'L', +119922=>'L', +119923=>'L', +119924=>'L', +119925=>'L', +119926=>'L', +119927=>'L', +119928=>'L', +119929=>'L', +119930=>'L', +119931=>'L', +119932=>'L', +119933=>'L', +119934=>'L', +119935=>'L', +119936=>'L', +119937=>'L', +119938=>'L', +119939=>'L', +119940=>'L', +119941=>'L', +119942=>'L', +119943=>'L', +119944=>'L', +119945=>'L', +119946=>'L', +119947=>'L', +119948=>'L', +119949=>'L', +119950=>'L', +119951=>'L', +119952=>'L', +119953=>'L', +119954=>'L', +119955=>'L', +119956=>'L', +119957=>'L', +119958=>'L', +119959=>'L', +119960=>'L', +119961=>'L', +119962=>'L', +119963=>'L', +119964=>'L', +119966=>'L', +119967=>'L', +119970=>'L', +119973=>'L', +119974=>'L', +119977=>'L', +119978=>'L', +119979=>'L', +119980=>'L', +119982=>'L', +119983=>'L', +119984=>'L', +119985=>'L', +119986=>'L', +119987=>'L', +119988=>'L', +119989=>'L', +119990=>'L', +119991=>'L', +119992=>'L', +119993=>'L', +119995=>'L', +119997=>'L', +119998=>'L', +119999=>'L', +120000=>'L', +120001=>'L', +120002=>'L', +120003=>'L', +120005=>'L', +120006=>'L', +120007=>'L', +120008=>'L', +120009=>'L', +120010=>'L', +120011=>'L', +120012=>'L', +120013=>'L', +120014=>'L', +120015=>'L', +120016=>'L', +120017=>'L', +120018=>'L', +120019=>'L', +120020=>'L', +120021=>'L', +120022=>'L', +120023=>'L', +120024=>'L', +120025=>'L', +120026=>'L', +120027=>'L', +120028=>'L', +120029=>'L', +120030=>'L', +120031=>'L', +120032=>'L', +120033=>'L', +120034=>'L', +120035=>'L', +120036=>'L', +120037=>'L', +120038=>'L', +120039=>'L', +120040=>'L', +120041=>'L', +120042=>'L', +120043=>'L', +120044=>'L', +120045=>'L', +120046=>'L', +120047=>'L', +120048=>'L', +120049=>'L', +120050=>'L', +120051=>'L', +120052=>'L', +120053=>'L', +120054=>'L', +120055=>'L', +120056=>'L', +120057=>'L', +120058=>'L', +120059=>'L', +120060=>'L', +120061=>'L', +120062=>'L', +120063=>'L', +120064=>'L', +120065=>'L', +120066=>'L', +120067=>'L', +120068=>'L', +120069=>'L', +120071=>'L', +120072=>'L', +120073=>'L', +120074=>'L', +120077=>'L', +120078=>'L', +120079=>'L', +120080=>'L', +120081=>'L', +120082=>'L', +120083=>'L', +120084=>'L', +120086=>'L', +120087=>'L', +120088=>'L', +120089=>'L', +120090=>'L', +120091=>'L', +120092=>'L', +120094=>'L', +120095=>'L', +120096=>'L', +120097=>'L', +120098=>'L', +120099=>'L', +120100=>'L', +120101=>'L', +120102=>'L', +120103=>'L', +120104=>'L', +120105=>'L', +120106=>'L', +120107=>'L', +120108=>'L', +120109=>'L', +120110=>'L', +120111=>'L', +120112=>'L', +120113=>'L', +120114=>'L', +120115=>'L', +120116=>'L', +120117=>'L', +120118=>'L', +120119=>'L', +120120=>'L', +120121=>'L', +120123=>'L', +120124=>'L', +120125=>'L', +120126=>'L', +120128=>'L', +120129=>'L', +120130=>'L', +120131=>'L', +120132=>'L', +120134=>'L', +120138=>'L', +120139=>'L', +120140=>'L', +120141=>'L', +120142=>'L', +120143=>'L', +120144=>'L', +120146=>'L', +120147=>'L', +120148=>'L', +120149=>'L', +120150=>'L', +120151=>'L', +120152=>'L', +120153=>'L', +120154=>'L', +120155=>'L', +120156=>'L', +120157=>'L', +120158=>'L', +120159=>'L', +120160=>'L', +120161=>'L', +120162=>'L', +120163=>'L', +120164=>'L', +120165=>'L', +120166=>'L', +120167=>'L', +120168=>'L', +120169=>'L', +120170=>'L', +120171=>'L', +120172=>'L', +120173=>'L', +120174=>'L', +120175=>'L', +120176=>'L', +120177=>'L', +120178=>'L', +120179=>'L', +120180=>'L', +120181=>'L', +120182=>'L', +120183=>'L', +120184=>'L', +120185=>'L', +120186=>'L', +120187=>'L', +120188=>'L', +120189=>'L', +120190=>'L', +120191=>'L', +120192=>'L', +120193=>'L', +120194=>'L', +120195=>'L', +120196=>'L', +120197=>'L', +120198=>'L', +120199=>'L', +120200=>'L', +120201=>'L', +120202=>'L', +120203=>'L', +120204=>'L', +120205=>'L', +120206=>'L', +120207=>'L', +120208=>'L', +120209=>'L', +120210=>'L', +120211=>'L', +120212=>'L', +120213=>'L', +120214=>'L', +120215=>'L', +120216=>'L', +120217=>'L', +120218=>'L', +120219=>'L', +120220=>'L', +120221=>'L', +120222=>'L', +120223=>'L', +120224=>'L', +120225=>'L', +120226=>'L', +120227=>'L', +120228=>'L', +120229=>'L', +120230=>'L', +120231=>'L', +120232=>'L', +120233=>'L', +120234=>'L', +120235=>'L', +120236=>'L', +120237=>'L', +120238=>'L', +120239=>'L', +120240=>'L', +120241=>'L', +120242=>'L', +120243=>'L', +120244=>'L', +120245=>'L', +120246=>'L', +120247=>'L', +120248=>'L', +120249=>'L', +120250=>'L', +120251=>'L', +120252=>'L', +120253=>'L', +120254=>'L', +120255=>'L', +120256=>'L', +120257=>'L', +120258=>'L', +120259=>'L', +120260=>'L', +120261=>'L', +120262=>'L', +120263=>'L', +120264=>'L', +120265=>'L', +120266=>'L', +120267=>'L', +120268=>'L', +120269=>'L', +120270=>'L', +120271=>'L', +120272=>'L', +120273=>'L', +120274=>'L', +120275=>'L', +120276=>'L', +120277=>'L', +120278=>'L', +120279=>'L', +120280=>'L', +120281=>'L', +120282=>'L', +120283=>'L', +120284=>'L', +120285=>'L', +120286=>'L', +120287=>'L', +120288=>'L', +120289=>'L', +120290=>'L', +120291=>'L', +120292=>'L', +120293=>'L', +120294=>'L', +120295=>'L', +120296=>'L', +120297=>'L', +120298=>'L', +120299=>'L', +120300=>'L', +120301=>'L', +120302=>'L', +120303=>'L', +120304=>'L', +120305=>'L', +120306=>'L', +120307=>'L', +120308=>'L', +120309=>'L', +120310=>'L', +120311=>'L', +120312=>'L', +120313=>'L', +120314=>'L', +120315=>'L', +120316=>'L', +120317=>'L', +120318=>'L', +120319=>'L', +120320=>'L', +120321=>'L', +120322=>'L', +120323=>'L', +120324=>'L', +120325=>'L', +120326=>'L', +120327=>'L', +120328=>'L', +120329=>'L', +120330=>'L', +120331=>'L', +120332=>'L', +120333=>'L', +120334=>'L', +120335=>'L', +120336=>'L', +120337=>'L', +120338=>'L', +120339=>'L', +120340=>'L', +120341=>'L', +120342=>'L', +120343=>'L', +120344=>'L', +120345=>'L', +120346=>'L', +120347=>'L', +120348=>'L', +120349=>'L', +120350=>'L', +120351=>'L', +120352=>'L', +120353=>'L', +120354=>'L', +120355=>'L', +120356=>'L', +120357=>'L', +120358=>'L', +120359=>'L', +120360=>'L', +120361=>'L', +120362=>'L', +120363=>'L', +120364=>'L', +120365=>'L', +120366=>'L', +120367=>'L', +120368=>'L', +120369=>'L', +120370=>'L', +120371=>'L', +120372=>'L', +120373=>'L', +120374=>'L', +120375=>'L', +120376=>'L', +120377=>'L', +120378=>'L', +120379=>'L', +120380=>'L', +120381=>'L', +120382=>'L', +120383=>'L', +120384=>'L', +120385=>'L', +120386=>'L', +120387=>'L', +120388=>'L', +120389=>'L', +120390=>'L', +120391=>'L', +120392=>'L', +120393=>'L', +120394=>'L', +120395=>'L', +120396=>'L', +120397=>'L', +120398=>'L', +120399=>'L', +120400=>'L', +120401=>'L', +120402=>'L', +120403=>'L', +120404=>'L', +120405=>'L', +120406=>'L', +120407=>'L', +120408=>'L', +120409=>'L', +120410=>'L', +120411=>'L', +120412=>'L', +120413=>'L', +120414=>'L', +120415=>'L', +120416=>'L', +120417=>'L', +120418=>'L', +120419=>'L', +120420=>'L', +120421=>'L', +120422=>'L', +120423=>'L', +120424=>'L', +120425=>'L', +120426=>'L', +120427=>'L', +120428=>'L', +120429=>'L', +120430=>'L', +120431=>'L', +120432=>'L', +120433=>'L', +120434=>'L', +120435=>'L', +120436=>'L', +120437=>'L', +120438=>'L', +120439=>'L', +120440=>'L', +120441=>'L', +120442=>'L', +120443=>'L', +120444=>'L', +120445=>'L', +120446=>'L', +120447=>'L', +120448=>'L', +120449=>'L', +120450=>'L', +120451=>'L', +120452=>'L', +120453=>'L', +120454=>'L', +120455=>'L', +120456=>'L', +120457=>'L', +120458=>'L', +120459=>'L', +120460=>'L', +120461=>'L', +120462=>'L', +120463=>'L', +120464=>'L', +120465=>'L', +120466=>'L', +120467=>'L', +120468=>'L', +120469=>'L', +120470=>'L', +120471=>'L', +120472=>'L', +120473=>'L', +120474=>'L', +120475=>'L', +120476=>'L', +120477=>'L', +120478=>'L', +120479=>'L', +120480=>'L', +120481=>'L', +120482=>'L', +120483=>'L', +120484=>'L', +120485=>'L', +120488=>'L', +120489=>'L', +120490=>'L', +120491=>'L', +120492=>'L', +120493=>'L', +120494=>'L', +120495=>'L', +120496=>'L', +120497=>'L', +120498=>'L', +120499=>'L', +120500=>'L', +120501=>'L', +120502=>'L', +120503=>'L', +120504=>'L', +120505=>'L', +120506=>'L', +120507=>'L', +120508=>'L', +120509=>'L', +120510=>'L', +120511=>'L', +120512=>'L', +120513=>'L', +120514=>'L', +120515=>'L', +120516=>'L', +120517=>'L', +120518=>'L', +120519=>'L', +120520=>'L', +120521=>'L', +120522=>'L', +120523=>'L', +120524=>'L', +120525=>'L', +120526=>'L', +120527=>'L', +120528=>'L', +120529=>'L', +120530=>'L', +120531=>'L', +120532=>'L', +120533=>'L', +120534=>'L', +120535=>'L', +120536=>'L', +120537=>'L', +120538=>'L', +120539=>'L', +120540=>'L', +120541=>'L', +120542=>'L', +120543=>'L', +120544=>'L', +120545=>'L', +120546=>'L', +120547=>'L', +120548=>'L', +120549=>'L', +120550=>'L', +120551=>'L', +120552=>'L', +120553=>'L', +120554=>'L', +120555=>'L', +120556=>'L', +120557=>'L', +120558=>'L', +120559=>'L', +120560=>'L', +120561=>'L', +120562=>'L', +120563=>'L', +120564=>'L', +120565=>'L', +120566=>'L', +120567=>'L', +120568=>'L', +120569=>'L', +120570=>'L', +120571=>'L', +120572=>'L', +120573=>'L', +120574=>'L', +120575=>'L', +120576=>'L', +120577=>'L', +120578=>'L', +120579=>'L', +120580=>'L', +120581=>'L', +120582=>'L', +120583=>'L', +120584=>'L', +120585=>'L', +120586=>'L', +120587=>'L', +120588=>'L', +120589=>'L', +120590=>'L', +120591=>'L', +120592=>'L', +120593=>'L', +120594=>'L', +120595=>'L', +120596=>'L', +120597=>'L', +120598=>'L', +120599=>'L', +120600=>'L', +120601=>'L', +120602=>'L', +120603=>'L', +120604=>'L', +120605=>'L', +120606=>'L', +120607=>'L', +120608=>'L', +120609=>'L', +120610=>'L', +120611=>'L', +120612=>'L', +120613=>'L', +120614=>'L', +120615=>'L', +120616=>'L', +120617=>'L', +120618=>'L', +120619=>'L', +120620=>'L', +120621=>'L', +120622=>'L', +120623=>'L', +120624=>'L', +120625=>'L', +120626=>'L', +120627=>'L', +120628=>'L', +120629=>'L', +120630=>'L', +120631=>'L', +120632=>'L', +120633=>'L', +120634=>'L', +120635=>'L', +120636=>'L', +120637=>'L', +120638=>'L', +120639=>'L', +120640=>'L', +120641=>'L', +120642=>'L', +120643=>'L', +120644=>'L', +120645=>'L', +120646=>'L', +120647=>'L', +120648=>'L', +120649=>'L', +120650=>'L', +120651=>'L', +120652=>'L', +120653=>'L', +120654=>'L', +120655=>'L', +120656=>'L', +120657=>'L', +120658=>'L', +120659=>'L', +120660=>'L', +120661=>'L', +120662=>'L', +120663=>'L', +120664=>'L', +120665=>'L', +120666=>'L', +120667=>'L', +120668=>'L', +120669=>'L', +120670=>'L', +120671=>'L', +120672=>'L', +120673=>'L', +120674=>'L', +120675=>'L', +120676=>'L', +120677=>'L', +120678=>'L', +120679=>'L', +120680=>'L', +120681=>'L', +120682=>'L', +120683=>'L', +120684=>'L', +120685=>'L', +120686=>'L', +120687=>'L', +120688=>'L', +120689=>'L', +120690=>'L', +120691=>'L', +120692=>'L', +120693=>'L', +120694=>'L', +120695=>'L', +120696=>'L', +120697=>'L', +120698=>'L', +120699=>'L', +120700=>'L', +120701=>'L', +120702=>'L', +120703=>'L', +120704=>'L', +120705=>'L', +120706=>'L', +120707=>'L', +120708=>'L', +120709=>'L', +120710=>'L', +120711=>'L', +120712=>'L', +120713=>'L', +120714=>'L', +120715=>'L', +120716=>'L', +120717=>'L', +120718=>'L', +120719=>'L', +120720=>'L', +120721=>'L', +120722=>'L', +120723=>'L', +120724=>'L', +120725=>'L', +120726=>'L', +120727=>'L', +120728=>'L', +120729=>'L', +120730=>'L', +120731=>'L', +120732=>'L', +120733=>'L', +120734=>'L', +120735=>'L', +120736=>'L', +120737=>'L', +120738=>'L', +120739=>'L', +120740=>'L', +120741=>'L', +120742=>'L', +120743=>'L', +120744=>'L', +120745=>'L', +120746=>'L', +120747=>'L', +120748=>'L', +120749=>'L', +120750=>'L', +120751=>'L', +120752=>'L', +120753=>'L', +120754=>'L', +120755=>'L', +120756=>'L', +120757=>'L', +120758=>'L', +120759=>'L', +120760=>'L', +120761=>'L', +120762=>'L', +120763=>'L', +120764=>'L', +120765=>'L', +120766=>'L', +120767=>'L', +120768=>'L', +120769=>'L', +120770=>'L', +120771=>'L', +120772=>'L', +120773=>'L', +120774=>'L', +120775=>'L', +120776=>'L', +120777=>'L', +120778=>'L', +120779=>'L', +120782=>'EN', +120783=>'EN', +120784=>'EN', +120785=>'EN', +120786=>'EN', +120787=>'EN', +120788=>'EN', +120789=>'EN', +120790=>'EN', +120791=>'EN', +120792=>'EN', +120793=>'EN', +120794=>'EN', +120795=>'EN', +120796=>'EN', +120797=>'EN', +120798=>'EN', +120799=>'EN', +120800=>'EN', +120801=>'EN', +120802=>'EN', +120803=>'EN', +120804=>'EN', +120805=>'EN', +120806=>'EN', +120807=>'EN', +120808=>'EN', +120809=>'EN', +120810=>'EN', +120811=>'EN', +120812=>'EN', +120813=>'EN', +120814=>'EN', +120815=>'EN', +120816=>'EN', +120817=>'EN', +120818=>'EN', +120819=>'EN', +120820=>'EN', +120821=>'EN', +120822=>'EN', +120823=>'EN', +120824=>'EN', +120825=>'EN', +120826=>'EN', +120827=>'EN', +120828=>'EN', +120829=>'EN', +120830=>'EN', +120831=>'EN', +131072=>'L', +173782=>'L', +194560=>'L', +194561=>'L', +194562=>'L', +194563=>'L', +194564=>'L', +194565=>'L', +194566=>'L', +194567=>'L', +194568=>'L', +194569=>'L', +194570=>'L', +194571=>'L', +194572=>'L', +194573=>'L', +194574=>'L', +194575=>'L', +194576=>'L', +194577=>'L', +194578=>'L', +194579=>'L', +194580=>'L', +194581=>'L', +194582=>'L', +194583=>'L', +194584=>'L', +194585=>'L', +194586=>'L', +194587=>'L', +194588=>'L', +194589=>'L', +194590=>'L', +194591=>'L', +194592=>'L', +194593=>'L', +194594=>'L', +194595=>'L', +194596=>'L', +194597=>'L', +194598=>'L', +194599=>'L', +194600=>'L', +194601=>'L', +194602=>'L', +194603=>'L', +194604=>'L', +194605=>'L', +194606=>'L', +194607=>'L', +194608=>'L', +194609=>'L', +194610=>'L', +194611=>'L', +194612=>'L', +194613=>'L', +194614=>'L', +194615=>'L', +194616=>'L', +194617=>'L', +194618=>'L', +194619=>'L', +194620=>'L', +194621=>'L', +194622=>'L', +194623=>'L', +194624=>'L', +194625=>'L', +194626=>'L', +194627=>'L', +194628=>'L', +194629=>'L', +194630=>'L', +194631=>'L', +194632=>'L', +194633=>'L', +194634=>'L', +194635=>'L', +194636=>'L', +194637=>'L', +194638=>'L', +194639=>'L', +194640=>'L', +194641=>'L', +194642=>'L', +194643=>'L', +194644=>'L', +194645=>'L', +194646=>'L', +194647=>'L', +194648=>'L', +194649=>'L', +194650=>'L', +194651=>'L', +194652=>'L', +194653=>'L', +194654=>'L', +194655=>'L', +194656=>'L', +194657=>'L', +194658=>'L', +194659=>'L', +194660=>'L', +194661=>'L', +194662=>'L', +194663=>'L', +194664=>'L', +194665=>'L', +194666=>'L', +194667=>'L', +194668=>'L', +194669=>'L', +194670=>'L', +194671=>'L', +194672=>'L', +194673=>'L', +194674=>'L', +194675=>'L', +194676=>'L', +194677=>'L', +194678=>'L', +194679=>'L', +194680=>'L', +194681=>'L', +194682=>'L', +194683=>'L', +194684=>'L', +194685=>'L', +194686=>'L', +194687=>'L', +194688=>'L', +194689=>'L', +194690=>'L', +194691=>'L', +194692=>'L', +194693=>'L', +194694=>'L', +194695=>'L', +194696=>'L', +194697=>'L', +194698=>'L', +194699=>'L', +194700=>'L', +194701=>'L', +194702=>'L', +194703=>'L', +194704=>'L', +194705=>'L', +194706=>'L', +194707=>'L', +194708=>'L', +194709=>'L', +194710=>'L', +194711=>'L', +194712=>'L', +194713=>'L', +194714=>'L', +194715=>'L', +194716=>'L', +194717=>'L', +194718=>'L', +194719=>'L', +194720=>'L', +194721=>'L', +194722=>'L', +194723=>'L', +194724=>'L', +194725=>'L', +194726=>'L', +194727=>'L', +194728=>'L', +194729=>'L', +194730=>'L', +194731=>'L', +194732=>'L', +194733=>'L', +194734=>'L', +194735=>'L', +194736=>'L', +194737=>'L', +194738=>'L', +194739=>'L', +194740=>'L', +194741=>'L', +194742=>'L', +194743=>'L', +194744=>'L', +194745=>'L', +194746=>'L', +194747=>'L', +194748=>'L', +194749=>'L', +194750=>'L', +194751=>'L', +194752=>'L', +194753=>'L', +194754=>'L', +194755=>'L', +194756=>'L', +194757=>'L', +194758=>'L', +194759=>'L', +194760=>'L', +194761=>'L', +194762=>'L', +194763=>'L', +194764=>'L', +194765=>'L', +194766=>'L', +194767=>'L', +194768=>'L', +194769=>'L', +194770=>'L', +194771=>'L', +194772=>'L', +194773=>'L', +194774=>'L', +194775=>'L', +194776=>'L', +194777=>'L', +194778=>'L', +194779=>'L', +194780=>'L', +194781=>'L', +194782=>'L', +194783=>'L', +194784=>'L', +194785=>'L', +194786=>'L', +194787=>'L', +194788=>'L', +194789=>'L', +194790=>'L', +194791=>'L', +194792=>'L', +194793=>'L', +194794=>'L', +194795=>'L', +194796=>'L', +194797=>'L', +194798=>'L', +194799=>'L', +194800=>'L', +194801=>'L', +194802=>'L', +194803=>'L', +194804=>'L', +194805=>'L', +194806=>'L', +194807=>'L', +194808=>'L', +194809=>'L', +194810=>'L', +194811=>'L', +194812=>'L', +194813=>'L', +194814=>'L', +194815=>'L', +194816=>'L', +194817=>'L', +194818=>'L', +194819=>'L', +194820=>'L', +194821=>'L', +194822=>'L', +194823=>'L', +194824=>'L', +194825=>'L', +194826=>'L', +194827=>'L', +194828=>'L', +194829=>'L', +194830=>'L', +194831=>'L', +194832=>'L', +194833=>'L', +194834=>'L', +194835=>'L', +194836=>'L', +194837=>'L', +194838=>'L', +194839=>'L', +194840=>'L', +194841=>'L', +194842=>'L', +194843=>'L', +194844=>'L', +194845=>'L', +194846=>'L', +194847=>'L', +194848=>'L', +194849=>'L', +194850=>'L', +194851=>'L', +194852=>'L', +194853=>'L', +194854=>'L', +194855=>'L', +194856=>'L', +194857=>'L', +194858=>'L', +194859=>'L', +194860=>'L', +194861=>'L', +194862=>'L', +194863=>'L', +194864=>'L', +194865=>'L', +194866=>'L', +194867=>'L', +194868=>'L', +194869=>'L', +194870=>'L', +194871=>'L', +194872=>'L', +194873=>'L', +194874=>'L', +194875=>'L', +194876=>'L', +194877=>'L', +194878=>'L', +194879=>'L', +194880=>'L', +194881=>'L', +194882=>'L', +194883=>'L', +194884=>'L', +194885=>'L', +194886=>'L', +194887=>'L', +194888=>'L', +194889=>'L', +194890=>'L', +194891=>'L', +194892=>'L', +194893=>'L', +194894=>'L', +194895=>'L', +194896=>'L', +194897=>'L', +194898=>'L', +194899=>'L', +194900=>'L', +194901=>'L', +194902=>'L', +194903=>'L', +194904=>'L', +194905=>'L', +194906=>'L', +194907=>'L', +194908=>'L', +194909=>'L', +194910=>'L', +194911=>'L', +194912=>'L', +194913=>'L', +194914=>'L', +194915=>'L', +194916=>'L', +194917=>'L', +194918=>'L', +194919=>'L', +194920=>'L', +194921=>'L', +194922=>'L', +194923=>'L', +194924=>'L', +194925=>'L', +194926=>'L', +194927=>'L', +194928=>'L', +194929=>'L', +194930=>'L', +194931=>'L', +194932=>'L', +194933=>'L', +194934=>'L', +194935=>'L', +194936=>'L', +194937=>'L', +194938=>'L', +194939=>'L', +194940=>'L', +194941=>'L', +194942=>'L', +194943=>'L', +194944=>'L', +194945=>'L', +194946=>'L', +194947=>'L', +194948=>'L', +194949=>'L', +194950=>'L', +194951=>'L', +194952=>'L', +194953=>'L', +194954=>'L', +194955=>'L', +194956=>'L', +194957=>'L', +194958=>'L', +194959=>'L', +194960=>'L', +194961=>'L', +194962=>'L', +194963=>'L', +194964=>'L', +194965=>'L', +194966=>'L', +194967=>'L', +194968=>'L', +194969=>'L', +194970=>'L', +194971=>'L', +194972=>'L', +194973=>'L', +194974=>'L', +194975=>'L', +194976=>'L', +194977=>'L', +194978=>'L', +194979=>'L', +194980=>'L', +194981=>'L', +194982=>'L', +194983=>'L', +194984=>'L', +194985=>'L', +194986=>'L', +194987=>'L', +194988=>'L', +194989=>'L', +194990=>'L', +194991=>'L', +194992=>'L', +194993=>'L', +194994=>'L', +194995=>'L', +194996=>'L', +194997=>'L', +194998=>'L', +194999=>'L', +195000=>'L', +195001=>'L', +195002=>'L', +195003=>'L', +195004=>'L', +195005=>'L', +195006=>'L', +195007=>'L', +195008=>'L', +195009=>'L', +195010=>'L', +195011=>'L', +195012=>'L', +195013=>'L', +195014=>'L', +195015=>'L', +195016=>'L', +195017=>'L', +195018=>'L', +195019=>'L', +195020=>'L', +195021=>'L', +195022=>'L', +195023=>'L', +195024=>'L', +195025=>'L', +195026=>'L', +195027=>'L', +195028=>'L', +195029=>'L', +195030=>'L', +195031=>'L', +195032=>'L', +195033=>'L', +195034=>'L', +195035=>'L', +195036=>'L', +195037=>'L', +195038=>'L', +195039=>'L', +195040=>'L', +195041=>'L', +195042=>'L', +195043=>'L', +195044=>'L', +195045=>'L', +195046=>'L', +195047=>'L', +195048=>'L', +195049=>'L', +195050=>'L', +195051=>'L', +195052=>'L', +195053=>'L', +195054=>'L', +195055=>'L', +195056=>'L', +195057=>'L', +195058=>'L', +195059=>'L', +195060=>'L', +195061=>'L', +195062=>'L', +195063=>'L', +195064=>'L', +195065=>'L', +195066=>'L', +195067=>'L', +195068=>'L', +195069=>'L', +195070=>'L', +195071=>'L', +195072=>'L', +195073=>'L', +195074=>'L', +195075=>'L', +195076=>'L', +195077=>'L', +195078=>'L', +195079=>'L', +195080=>'L', +195081=>'L', +195082=>'L', +195083=>'L', +195084=>'L', +195085=>'L', +195086=>'L', +195087=>'L', +195088=>'L', +195089=>'L', +195090=>'L', +195091=>'L', +195092=>'L', +195093=>'L', +195094=>'L', +195095=>'L', +195096=>'L', +195097=>'L', +195098=>'L', +195099=>'L', +195100=>'L', +195101=>'L', +917505=>'BN', +917536=>'BN', +917537=>'BN', +917538=>'BN', +917539=>'BN', +917540=>'BN', +917541=>'BN', +917542=>'BN', +917543=>'BN', +917544=>'BN', +917545=>'BN', +917546=>'BN', +917547=>'BN', +917548=>'BN', +917549=>'BN', +917550=>'BN', +917551=>'BN', +917552=>'BN', +917553=>'BN', +917554=>'BN', +917555=>'BN', +917556=>'BN', +917557=>'BN', +917558=>'BN', +917559=>'BN', +917560=>'BN', +917561=>'BN', +917562=>'BN', +917563=>'BN', +917564=>'BN', +917565=>'BN', +917566=>'BN', +917567=>'BN', +917568=>'BN', +917569=>'BN', +917570=>'BN', +917571=>'BN', +917572=>'BN', +917573=>'BN', +917574=>'BN', +917575=>'BN', +917576=>'BN', +917577=>'BN', +917578=>'BN', +917579=>'BN', +917580=>'BN', +917581=>'BN', +917582=>'BN', +917583=>'BN', +917584=>'BN', +917585=>'BN', +917586=>'BN', +917587=>'BN', +917588=>'BN', +917589=>'BN', +917590=>'BN', +917591=>'BN', +917592=>'BN', +917593=>'BN', +917594=>'BN', +917595=>'BN', +917596=>'BN', +917597=>'BN', +917598=>'BN', +917599=>'BN', +917600=>'BN', +917601=>'BN', +917602=>'BN', +917603=>'BN', +917604=>'BN', +917605=>'BN', +917606=>'BN', +917607=>'BN', +917608=>'BN', +917609=>'BN', +917610=>'BN', +917611=>'BN', +917612=>'BN', +917613=>'BN', +917614=>'BN', +917615=>'BN', +917616=>'BN', +917617=>'BN', +917618=>'BN', +917619=>'BN', +917620=>'BN', +917621=>'BN', +917622=>'BN', +917623=>'BN', +917624=>'BN', +917625=>'BN', +917626=>'BN', +917627=>'BN', +917628=>'BN', +917629=>'BN', +917630=>'BN', +917631=>'BN', +917760=>'NSM', +917761=>'NSM', +917762=>'NSM', +917763=>'NSM', +917764=>'NSM', +917765=>'NSM', +917766=>'NSM', +917767=>'NSM', +917768=>'NSM', +917769=>'NSM', +917770=>'NSM', +917771=>'NSM', +917772=>'NSM', +917773=>'NSM', +917774=>'NSM', +917775=>'NSM', +917776=>'NSM', +917777=>'NSM', +917778=>'NSM', +917779=>'NSM', +917780=>'NSM', +917781=>'NSM', +917782=>'NSM', +917783=>'NSM', +917784=>'NSM', +917785=>'NSM', +917786=>'NSM', +917787=>'NSM', +917788=>'NSM', +917789=>'NSM', +917790=>'NSM', +917791=>'NSM', +917792=>'NSM', +917793=>'NSM', +917794=>'NSM', +917795=>'NSM', +917796=>'NSM', +917797=>'NSM', +917798=>'NSM', +917799=>'NSM', +917800=>'NSM', +917801=>'NSM', +917802=>'NSM', +917803=>'NSM', +917804=>'NSM', +917805=>'NSM', +917806=>'NSM', +917807=>'NSM', +917808=>'NSM', +917809=>'NSM', +917810=>'NSM', +917811=>'NSM', +917812=>'NSM', +917813=>'NSM', +917814=>'NSM', +917815=>'NSM', +917816=>'NSM', +917817=>'NSM', +917818=>'NSM', +917819=>'NSM', +917820=>'NSM', +917821=>'NSM', +917822=>'NSM', +917823=>'NSM', +917824=>'NSM', +917825=>'NSM', +917826=>'NSM', +917827=>'NSM', +917828=>'NSM', +917829=>'NSM', +917830=>'NSM', +917831=>'NSM', +917832=>'NSM', +917833=>'NSM', +917834=>'NSM', +917835=>'NSM', +917836=>'NSM', +917837=>'NSM', +917838=>'NSM', +917839=>'NSM', +917840=>'NSM', +917841=>'NSM', +917842=>'NSM', +917843=>'NSM', +917844=>'NSM', +917845=>'NSM', +917846=>'NSM', +917847=>'NSM', +917848=>'NSM', +917849=>'NSM', +917850=>'NSM', +917851=>'NSM', +917852=>'NSM', +917853=>'NSM', +917854=>'NSM', +917855=>'NSM', +917856=>'NSM', +917857=>'NSM', +917858=>'NSM', +917859=>'NSM', +917860=>'NSM', +917861=>'NSM', +917862=>'NSM', +917863=>'NSM', +917864=>'NSM', +917865=>'NSM', +917866=>'NSM', +917867=>'NSM', +917868=>'NSM', +917869=>'NSM', +917870=>'NSM', +917871=>'NSM', +917872=>'NSM', +917873=>'NSM', +917874=>'NSM', +917875=>'NSM', +917876=>'NSM', +917877=>'NSM', +917878=>'NSM', +917879=>'NSM', +917880=>'NSM', +917881=>'NSM', +917882=>'NSM', +917883=>'NSM', +917884=>'NSM', +917885=>'NSM', +917886=>'NSM', +917887=>'NSM', +917888=>'NSM', +917889=>'NSM', +917890=>'NSM', +917891=>'NSM', +917892=>'NSM', +917893=>'NSM', +917894=>'NSM', +917895=>'NSM', +917896=>'NSM', +917897=>'NSM', +917898=>'NSM', +917899=>'NSM', +917900=>'NSM', +917901=>'NSM', +917902=>'NSM', +917903=>'NSM', +917904=>'NSM', +917905=>'NSM', +917906=>'NSM', +917907=>'NSM', +917908=>'NSM', +917909=>'NSM', +917910=>'NSM', +917911=>'NSM', +917912=>'NSM', +917913=>'NSM', +917914=>'NSM', +917915=>'NSM', +917916=>'NSM', +917917=>'NSM', +917918=>'NSM', +917919=>'NSM', +917920=>'NSM', +917921=>'NSM', +917922=>'NSM', +917923=>'NSM', +917924=>'NSM', +917925=>'NSM', +917926=>'NSM', +917927=>'NSM', +917928=>'NSM', +917929=>'NSM', +917930=>'NSM', +917931=>'NSM', +917932=>'NSM', +917933=>'NSM', +917934=>'NSM', +917935=>'NSM', +917936=>'NSM', +917937=>'NSM', +917938=>'NSM', +917939=>'NSM', +917940=>'NSM', +917941=>'NSM', +917942=>'NSM', +917943=>'NSM', +917944=>'NSM', +917945=>'NSM', +917946=>'NSM', +917947=>'NSM', +917948=>'NSM', +917949=>'NSM', +917950=>'NSM', +917951=>'NSM', +917952=>'NSM', +917953=>'NSM', +917954=>'NSM', +917955=>'NSM', +917956=>'NSM', +917957=>'NSM', +917958=>'NSM', +917959=>'NSM', +917960=>'NSM', +917961=>'NSM', +917962=>'NSM', +917963=>'NSM', +917964=>'NSM', +917965=>'NSM', +917966=>'NSM', +917967=>'NSM', +917968=>'NSM', +917969=>'NSM', +917970=>'NSM', +917971=>'NSM', +917972=>'NSM', +917973=>'NSM', +917974=>'NSM', +917975=>'NSM', +917976=>'NSM', +917977=>'NSM', +917978=>'NSM', +917979=>'NSM', +917980=>'NSM', +917981=>'NSM', +917982=>'NSM', +917983=>'NSM', +917984=>'NSM', +917985=>'NSM', +917986=>'NSM', +917987=>'NSM', +917988=>'NSM', +917989=>'NSM', +917990=>'NSM', +917991=>'NSM', +917992=>'NSM', +917993=>'NSM', +917994=>'NSM', +917995=>'NSM', +917996=>'NSM', +917997=>'NSM', +917998=>'NSM', +917999=>'NSM', +983040=>'L', +1048573=>'L', +1048576=>'L', +1114109=>'L' +); + +/** + * Mirror unicode characters. For information on bidi mirroring, see UAX #9: Bidirectional Algorithm, at http://www.unicode.org/unicode/reports/tr9/ + * @public + */ +public static $uni_mirror = array ( +0x0028=>0x0029, +0x0029=>0x0028, +0x003C=>0x003E, +0x003E=>0x003C, +0x005B=>0x005D, +0x005D=>0x005B, +0x007B=>0x007D, +0x007D=>0x007B, +0x00AB=>0x00BB, +0x00BB=>0x00AB, +0x0F3A=>0x0F3B, +0x0F3B=>0x0F3A, +0x0F3C=>0x0F3D, +0x0F3D=>0x0F3C, +0x169B=>0x169C, +0x169C=>0x169B, +0x2018=>0x2019, +0x2019=>0x2018, +0x201C=>0x201D, +0x201D=>0x201C, +0x2039=>0x203A, +0x203A=>0x2039, +0x2045=>0x2046, +0x2046=>0x2045, +0x207D=>0x207E, +0x207E=>0x207D, +0x208D=>0x208E, +0x208E=>0x208D, +0x2208=>0x220B, +0x2209=>0x220C, +0x220A=>0x220D, +0x220B=>0x2208, +0x220C=>0x2209, +0x220D=>0x220A, +0x2215=>0x29F5, +0x223C=>0x223D, +0x223D=>0x223C, +0x2243=>0x22CD, +0x2252=>0x2253, +0x2253=>0x2252, +0x2254=>0x2255, +0x2255=>0x2254, +0x2264=>0x2265, +0x2265=>0x2264, +0x2266=>0x2267, +0x2267=>0x2266, +0x2268=>0x2269, +0x2269=>0x2268, +0x226A=>0x226B, +0x226B=>0x226A, +0x226E=>0x226F, +0x226F=>0x226E, +0x2270=>0x2271, +0x2271=>0x2270, +0x2272=>0x2273, +0x2273=>0x2272, +0x2274=>0x2275, +0x2275=>0x2274, +0x2276=>0x2277, +0x2277=>0x2276, +0x2278=>0x2279, +0x2279=>0x2278, +0x227A=>0x227B, +0x227B=>0x227A, +0x227C=>0x227D, +0x227D=>0x227C, +0x227E=>0x227F, +0x227F=>0x227E, +0x2280=>0x2281, +0x2281=>0x2280, +0x2282=>0x2283, +0x2283=>0x2282, +0x2284=>0x2285, +0x2285=>0x2284, +0x2286=>0x2287, +0x2287=>0x2286, +0x2288=>0x2289, +0x2289=>0x2288, +0x228A=>0x228B, +0x228B=>0x228A, +0x228F=>0x2290, +0x2290=>0x228F, +0x2291=>0x2292, +0x2292=>0x2291, +0x2298=>0x29B8, +0x22A2=>0x22A3, +0x22A3=>0x22A2, +0x22A6=>0x2ADE, +0x22A8=>0x2AE4, +0x22A9=>0x2AE3, +0x22AB=>0x2AE5, +0x22B0=>0x22B1, +0x22B1=>0x22B0, +0x22B2=>0x22B3, +0x22B3=>0x22B2, +0x22B4=>0x22B5, +0x22B5=>0x22B4, +0x22B6=>0x22B7, +0x22B7=>0x22B6, +0x22C9=>0x22CA, +0x22CA=>0x22C9, +0x22CB=>0x22CC, +0x22CC=>0x22CB, +0x22CD=>0x2243, +0x22D0=>0x22D1, +0x22D1=>0x22D0, +0x22D6=>0x22D7, +0x22D7=>0x22D6, +0x22D8=>0x22D9, +0x22D9=>0x22D8, +0x22DA=>0x22DB, +0x22DB=>0x22DA, +0x22DC=>0x22DD, +0x22DD=>0x22DC, +0x22DE=>0x22DF, +0x22DF=>0x22DE, +0x22E0=>0x22E1, +0x22E1=>0x22E0, +0x22E2=>0x22E3, +0x22E3=>0x22E2, +0x22E4=>0x22E5, +0x22E5=>0x22E4, +0x22E6=>0x22E7, +0x22E7=>0x22E6, +0x22E8=>0x22E9, +0x22E9=>0x22E8, +0x22EA=>0x22EB, +0x22EB=>0x22EA, +0x22EC=>0x22ED, +0x22ED=>0x22EC, +0x22F0=>0x22F1, +0x22F1=>0x22F0, +0x22F2=>0x22FA, +0x22F3=>0x22FB, +0x22F4=>0x22FC, +0x22F6=>0x22FD, +0x22F7=>0x22FE, +0x22FA=>0x22F2, +0x22FB=>0x22F3, +0x22FC=>0x22F4, +0x22FD=>0x22F6, +0x22FE=>0x22F7, +0x2308=>0x2309, +0x2309=>0x2308, +0x230A=>0x230B, +0x230B=>0x230A, +0x2329=>0x232A, +0x232A=>0x2329, +0x2768=>0x2769, +0x2769=>0x2768, +0x276A=>0x276B, +0x276B=>0x276A, +0x276C=>0x276D, +0x276D=>0x276C, +0x276E=>0x276F, +0x276F=>0x276E, +0x2770=>0x2771, +0x2771=>0x2770, +0x2772=>0x2773, +0x2773=>0x2772, +0x2774=>0x2775, +0x2775=>0x2774, +0x27C3=>0x27C4, +0x27C4=>0x27C3, +0x27C5=>0x27C6, +0x27C6=>0x27C5, +0x27D5=>0x27D6, +0x27D6=>0x27D5, +0x27DD=>0x27DE, +0x27DE=>0x27DD, +0x27E2=>0x27E3, +0x27E3=>0x27E2, +0x27E4=>0x27E5, +0x27E5=>0x27E4, +0x27E6=>0x27E7, +0x27E7=>0x27E6, +0x27E8=>0x27E9, +0x27E9=>0x27E8, +0x27EA=>0x27EB, +0x27EB=>0x27EA, +0x2983=>0x2984, +0x2984=>0x2983, +0x2985=>0x2986, +0x2986=>0x2985, +0x2987=>0x2988, +0x2988=>0x2987, +0x2989=>0x298A, +0x298A=>0x2989, +0x298B=>0x298C, +0x298C=>0x298B, +0x298D=>0x2990, +0x298E=>0x298F, +0x298F=>0x298E, +0x2990=>0x298D, +0x2991=>0x2992, +0x2992=>0x2991, +0x2993=>0x2994, +0x2994=>0x2993, +0x2995=>0x2996, +0x2996=>0x2995, +0x2997=>0x2998, +0x2998=>0x2997, +0x29B8=>0x2298, +0x29C0=>0x29C1, +0x29C1=>0x29C0, +0x29C4=>0x29C5, +0x29C5=>0x29C4, +0x29CF=>0x29D0, +0x29D0=>0x29CF, +0x29D1=>0x29D2, +0x29D2=>0x29D1, +0x29D4=>0x29D5, +0x29D5=>0x29D4, +0x29D8=>0x29D9, +0x29D9=>0x29D8, +0x29DA=>0x29DB, +0x29DB=>0x29DA, +0x29F5=>0x2215, +0x29F8=>0x29F9, +0x29F9=>0x29F8, +0x29FC=>0x29FD, +0x29FD=>0x29FC, +0x2A2B=>0x2A2C, +0x2A2C=>0x2A2B, +0x2A2D=>0x2A2E, +0x2A2E=>0x2A2D, +0x2A34=>0x2A35, +0x2A35=>0x2A34, +0x2A3C=>0x2A3D, +0x2A3D=>0x2A3C, +0x2A64=>0x2A65, +0x2A65=>0x2A64, +0x2A79=>0x2A7A, +0x2A7A=>0x2A79, +0x2A7D=>0x2A7E, +0x2A7E=>0x2A7D, +0x2A7F=>0x2A80, +0x2A80=>0x2A7F, +0x2A81=>0x2A82, +0x2A82=>0x2A81, +0x2A83=>0x2A84, +0x2A84=>0x2A83, +0x2A8B=>0x2A8C, +0x2A8C=>0x2A8B, +0x2A91=>0x2A92, +0x2A92=>0x2A91, +0x2A93=>0x2A94, +0x2A94=>0x2A93, +0x2A95=>0x2A96, +0x2A96=>0x2A95, +0x2A97=>0x2A98, +0x2A98=>0x2A97, +0x2A99=>0x2A9A, +0x2A9A=>0x2A99, +0x2A9B=>0x2A9C, +0x2A9C=>0x2A9B, +0x2AA1=>0x2AA2, +0x2AA2=>0x2AA1, +0x2AA6=>0x2AA7, +0x2AA7=>0x2AA6, +0x2AA8=>0x2AA9, +0x2AA9=>0x2AA8, +0x2AAA=>0x2AAB, +0x2AAB=>0x2AAA, +0x2AAC=>0x2AAD, +0x2AAD=>0x2AAC, +0x2AAF=>0x2AB0, +0x2AB0=>0x2AAF, +0x2AB3=>0x2AB4, +0x2AB4=>0x2AB3, +0x2ABB=>0x2ABC, +0x2ABC=>0x2ABB, +0x2ABD=>0x2ABE, +0x2ABE=>0x2ABD, +0x2ABF=>0x2AC0, +0x2AC0=>0x2ABF, +0x2AC1=>0x2AC2, +0x2AC2=>0x2AC1, +0x2AC3=>0x2AC4, +0x2AC4=>0x2AC3, +0x2AC5=>0x2AC6, +0x2AC6=>0x2AC5, +0x2ACD=>0x2ACE, +0x2ACE=>0x2ACD, +0x2ACF=>0x2AD0, +0x2AD0=>0x2ACF, +0x2AD1=>0x2AD2, +0x2AD2=>0x2AD1, +0x2AD3=>0x2AD4, +0x2AD4=>0x2AD3, +0x2AD5=>0x2AD6, +0x2AD6=>0x2AD5, +0x2ADE=>0x22A6, +0x2AE3=>0x22A9, +0x2AE4=>0x22A8, +0x2AE5=>0x22AB, +0x2AEC=>0x2AED, +0x2AED=>0x2AEC, +0x2AF7=>0x2AF8, +0x2AF8=>0x2AF7, +0x2AF9=>0x2AFA, +0x2AFA=>0x2AF9, +0x2E02=>0x2E03, +0x2E03=>0x2E02, +0x2E04=>0x2E05, +0x2E05=>0x2E04, +0x2E09=>0x2E0A, +0x2E0A=>0x2E09, +0x2E0C=>0x2E0D, +0x2E0D=>0x2E0C, +0x2E1C=>0x2E1D, +0x2E1D=>0x2E1C, +0x3008=>0x3009, +0x3009=>0x3008, +0x300A=>0x300B, +0x300B=>0x300A, +0x300C=>0x300D, +0x300D=>0x300C, +0x300E=>0x300F, +0x300F=>0x300E, +0x3010=>0x3011, +0x3011=>0x3010, +0x3014=>0x3015, +0x3015=>0x3014, +0x3016=>0x3017, +0x3017=>0x3016, +0x3018=>0x3019, +0x3019=>0x3018, +0x301A=>0x301B, +0x301B=>0x301A, +0x301D=>0x301E, +0x301E=>0x301D, +0xFE59=>0xFE5A, +0xFE5A=>0xFE59, +0xFE5B=>0xFE5C, +0xFE5C=>0xFE5B, +0xFE5D=>0xFE5E, +0xFE5E=>0xFE5D, +0xFE64=>0xFE65, +0xFE65=>0xFE64, +0xFF08=>0xFF09, +0xFF09=>0xFF08, +0xFF1C=>0xFF1E, +0xFF1E=>0xFF1C, +0xFF3B=>0xFF3D, +0xFF3D=>0xFF3B, +0xFF5B=>0xFF5D, +0xFF5D=>0xFF5B, +0xFF5F=>0xFF60, +0xFF60=>0xFF5F, +0xFF62=>0xFF63, +0xFF63=>0xFF62); + +/** + * Arabic shape substitutions: char code => (isolated, final, initial, medial). + * @public + */ +public static $uni_arabicsubst = array( +1569=>array(65152), +1570=>array(65153, 65154, 65153, 65154), +1571=>array(65155, 65156, 65155, 65156), +1572=>array(65157, 65158), +1573=>array(65159, 65160, 65159, 65160), +1574=>array(65161, 65162, 65163, 65164), +1575=>array(65165, 65166, 65165, 65166), +1576=>array(65167, 65168, 65169, 65170), +1577=>array(65171, 65172), +1578=>array(65173, 65174, 65175, 65176), +1579=>array(65177, 65178, 65179, 65180), +1580=>array(65181, 65182, 65183, 65184), +1581=>array(65185, 65186, 65187, 65188), +1582=>array(65189, 65190, 65191, 65192), +1583=>array(65193, 65194, 65193, 65194), +1584=>array(65195, 65196, 65195, 65196), +1585=>array(65197, 65198, 65197, 65198), +1586=>array(65199, 65200, 65199, 65200), +1587=>array(65201, 65202, 65203, 65204), +1588=>array(65205, 65206, 65207, 65208), +1589=>array(65209, 65210, 65211, 65212), +1590=>array(65213, 65214, 65215, 65216), +1591=>array(65217, 65218, 65219, 65220), +1592=>array(65221, 65222, 65223, 65224), +1593=>array(65225, 65226, 65227, 65228), +1594=>array(65229, 65230, 65231, 65232), +1601=>array(65233, 65234, 65235, 65236), +1602=>array(65237, 65238, 65239, 65240), +1603=>array(65241, 65242, 65243, 65244), +1604=>array(65245, 65246, 65247, 65248), +1605=>array(65249, 65250, 65251, 65252), +1606=>array(65253, 65254, 65255, 65256), +1607=>array(65257, 65258, 65259, 65260), +1608=>array(65261, 65262, 65261, 65262), +1609=>array(65263, 65264, 64488, 64489), +1610=>array(65265, 65266, 65267, 65268), +1649=>array(64336, 64337), +1655=>array(64477), +1657=>array(64358, 64359, 64360, 64361), +1658=>array(64350, 64351, 64352, 64353), +1659=>array(64338, 64339, 64340, 64341), +1662=>array(64342, 64343, 64344, 64345), +1663=>array(64354, 64355, 64356, 64357), +1664=>array(64346, 64347, 64348, 64349), +1667=>array(64374, 64375, 64376, 64377), +1668=>array(64370, 64371, 64372, 64373), +1670=>array(64378, 64379, 64380, 64381), +1671=>array(64382, 64383, 64384, 64385), +1672=>array(64392, 64393), +1676=>array(64388, 64389), +1677=>array(64386, 64387), +1678=>array(64390, 64391), +1681=>array(64396, 64397), +1688=>array(64394, 64395, 64394, 64395), +1700=>array(64362, 64363, 64364, 64365), +1702=>array(64366, 64367, 64368, 64369), +1705=>array(64398, 64399, 64400, 64401), +1709=>array(64467, 64468, 64469, 64470), +1711=>array(64402, 64403, 64404, 64405), +1713=>array(64410, 64411, 64412, 64413), +1715=>array(64406, 64407, 64408, 64409), +1722=>array(64414, 64415), +1723=>array(64416, 64417, 64418, 64419), +1726=>array(64426, 64427, 64428, 64429), +1728=>array(64420, 64421), +1729=>array(64422, 64423, 64424, 64425), +1733=>array(64480, 64481), +1734=>array(64473, 64474), +1735=>array(64471, 64472), +1736=>array(64475, 64476), +1737=>array(64482, 64483), +1739=>array(64478, 64479), +1740=>array(64508, 64509, 64510, 64511), +1744=>array(64484, 64485, 64486, 64487), +1746=>array(64430, 64431), +1747=>array(64432, 64433) +); + +/** + * Arabic laa letter: (char code => isolated, final, initial, medial). + * @public + */ +public static $uni_laa_array = array ( +1570 =>array(65269, 65270, 65269, 65270), +1571 =>array(65271, 65272, 65271, 65272), +1573 =>array(65273, 65274, 65273, 65274), +1575 =>array(65275, 65276, 65275, 65276) +); + +/** + * Array of character substitutions for sequences of two diacritics symbols. + * Putting the combining mark and character in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner. + * second NSM char code => substitution char + * @public + */ +public static $uni_diacritics = array ( +1612=>64606, # Shadda + Dammatan +1613=>64607, # Shadda + Kasratan +1614=>64608, # Shadda + Fatha +1615=>64609, # Shadda + Damma +1616=>64610 # Shadda + Kasra +); + +/** + * Array of character substitutions from UTF-8 Unicode to Latin1. + * @public + */ +public static $uni_utf8tolatin = array ( +8364=>128, # Euro1 +338=>140, # OE +352=>138, # Scaron +376=>159, # Ydieresis +381=>142, # Zcaron2 +8226=>149, # bullet3 +710=>136, # circumflex +8224=>134, # dagger +8225=>135, # daggerdbl +8230=>133, # ellipsis +8212=>151, # emdash +8211=>150, # endash +402=>131, # florin +8249=>139, # guilsinglleft +8250=>155, # guilsinglright +339=>156, # oe +8240=>137, # perthousand +8222=>132, # quotedblbase +8220=>147, # quotedblleft +8221=>148, # quotedblright +8216=>145, # quoteleft +8217=>146, # quoteright +8218=>130, # quotesinglbase +353=>154, # scaron +732=>152, # tilde +8482=>153, # trademark +382=>158 # zcaron2 +); + +/** + * Array of Encoding Maps. + * @public static + */ +public static $encmap = array( + +// encoding map for: cp874 +'cp874' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'ellipsis',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'kokaithai',162=>'khokhaithai',163=>'khokhuatthai',164=>'khokhwaithai',165=>'khokhonthai',166=>'khorakhangthai',167=>'ngonguthai',168=>'chochanthai',169=>'chochingthai',170=>'chochangthai',171=>'sosothai',172=>'chochoethai',173=>'yoyingthai',174=>'dochadathai',175=>'topatakthai',176=>'thothanthai',177=>'thonangmonthothai',178=>'thophuthaothai',179=>'nonenthai',180=>'dodekthai',181=>'totaothai',182=>'thothungthai',183=>'thothahanthai',184=>'thothongthai',185=>'nonuthai',186=>'bobaimaithai',187=>'poplathai',188=>'phophungthai',189=>'fofathai',190=>'phophanthai',191=>'fofanthai',192=>'phosamphaothai',193=>'momathai',194=>'yoyakthai',195=>'roruathai',196=>'ruthai',197=>'lolingthai',198=>'luthai',199=>'wowaenthai',200=>'sosalathai',201=>'sorusithai',202=>'sosuathai',203=>'hohipthai',204=>'lochulathai',205=>'oangthai',206=>'honokhukthai',207=>'paiyannoithai',208=>'saraathai',209=>'maihanakatthai',210=>'saraaathai',211=>'saraamthai',212=>'saraithai',213=>'saraiithai',214=>'sarauethai',215=>'saraueethai',216=>'sarauthai',217=>'sarauuthai',218=>'phinthuthai',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'bahtthai',224=>'saraethai',225=>'saraaethai',226=>'saraothai',227=>'saraaimaimuanthai',228=>'saraaimaimalaithai',229=>'lakkhangyaothai',230=>'maiyamokthai',231=>'maitaikhuthai',232=>'maiekthai',233=>'maithothai',234=>'maitrithai',235=>'maichattawathai',236=>'thanthakhatthai',237=>'nikhahitthai',238=>'yamakkanthai',239=>'fongmanthai',240=>'zerothai',241=>'onethai',242=>'twothai',243=>'threethai',244=>'fourthai',245=>'fivethai',246=>'sixthai',247=>'seventhai',248=>'eightthai',249=>'ninethai',250=>'angkhankhuthai',251=>'khomutthai',252=>'.notdef',253=>'.notdef',254=>'.notdef',255=>'.notdef'), + +// encoding map for: cp1250 +'cp1250' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'.notdef',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'.notdef',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'Sacute',141=>'Tcaron',142=>'Zcaron',143=>'Zacute',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'sacute',157=>'tcaron',158=>'zcaron',159=>'zacute',160=>'space',161=>'caron',162=>'breve',163=>'Lslash',164=>'currency',165=>'Aogonek',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'Scedilla',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'Zdotaccent',176=>'degree',177=>'plusminus',178=>'ogonek',179=>'lslash',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'aogonek',186=>'scedilla',187=>'guillemotright',188=>'Lcaron',189=>'hungarumlaut',190=>'lcaron',191=>'zdotaccent',192=>'Racute',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Lacute',198=>'Cacute',199=>'Ccedilla',200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Ecaron',205=>'Iacute',206=>'Icircumflex',207=>'Dcaron',208=>'Dcroat',209=>'Nacute',210=>'Ncaron',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'multiply',216=>'Rcaron',217=>'Uring',218=>'Uacute',219=>'Uhungarumlaut',220=>'Udieresis',221=>'Yacute',222=>'Tcommaaccent',223=>'germandbls',224=>'racute',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'lacute',230=>'cacute',231=>'ccedilla',232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'ecaron',237=>'iacute',238=>'icircumflex',239=>'dcaron',240=>'dcroat',241=>'nacute',242=>'ncaron',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'divide',248=>'rcaron',249=>'uring',250=>'uacute',251=>'uhungarumlaut',252=>'udieresis',253=>'yacute',254=>'tcommaaccent',255=>'dotaccent'), + +// encoding map for: cp1251 +'cp1251' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'afii10051',129=>'afii10052',130=>'quotesinglbase',131=>'afii10100',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'Euro',137=>'perthousand',138=>'afii10058',139=>'guilsinglleft',140=>'afii10059',141=>'afii10061',142=>'afii10060',143=>'afii10145',144=>'afii10099',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'afii10106',155=>'guilsinglright',156=>'afii10107',157=>'afii10109',158=>'afii10108',159=>'afii10193',160=>'space',161=>'afii10062',162=>'afii10110',163=>'afii10057',164=>'currency',165=>'afii10050',166=>'brokenbar',167=>'section',168=>'afii10023',169=>'copyright',170=>'afii10053',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'afii10056',176=>'degree',177=>'plusminus',178=>'afii10055',179=>'afii10103',180=>'afii10098',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'afii10071',185=>'afii61352',186=>'afii10101',187=>'guillemotright',188=>'afii10105',189=>'afii10054',190=>'afii10102',191=>'afii10104',192=>'afii10017',193=>'afii10018',194=>'afii10019',195=>'afii10020',196=>'afii10021',197=>'afii10022',198=>'afii10024',199=>'afii10025',200=>'afii10026',201=>'afii10027',202=>'afii10028',203=>'afii10029',204=>'afii10030',205=>'afii10031',206=>'afii10032',207=>'afii10033',208=>'afii10034',209=>'afii10035',210=>'afii10036',211=>'afii10037',212=>'afii10038',213=>'afii10039',214=>'afii10040',215=>'afii10041',216=>'afii10042',217=>'afii10043',218=>'afii10044',219=>'afii10045',220=>'afii10046',221=>'afii10047',222=>'afii10048',223=>'afii10049',224=>'afii10065',225=>'afii10066',226=>'afii10067',227=>'afii10068',228=>'afii10069',229=>'afii10070',230=>'afii10072',231=>'afii10073',232=>'afii10074',233=>'afii10075',234=>'afii10076',235=>'afii10077',236=>'afii10078',237=>'afii10079',238=>'afii10080',239=>'afii10081',240=>'afii10082',241=>'afii10083',242=>'afii10084',243=>'afii10085',244=>'afii10086',245=>'afii10087',246=>'afii10088',247=>'afii10089',248=>'afii10090',249=>'afii10091',250=>'afii10092',251=>'afii10093',252=>'afii10094',253=>'afii10095',254=>'afii10096',255=>'afii10097'), + +// encoding map for: cp1252 +'cp1252' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'Zcaron',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'zcaron',159=>'Ydieresis',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'), + +// encoding map for: cp1253 +'cp1253' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'.notdef',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'dieresistonos',162=>'Alphatonos',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'afii00208',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'tonos',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'Epsilontonos',185=>'Etatonos',186=>'Iotatonos',187=>'guillemotright',188=>'Omicrontonos',189=>'onehalf',190=>'Upsilontonos',191=>'Omegatonos',192=>'iotadieresistonos',193=>'Alpha',194=>'Beta',195=>'Gamma',196=>'Delta',197=>'Epsilon',198=>'Zeta',199=>'Eta',200=>'Theta',201=>'Iota',202=>'Kappa',203=>'Lambda',204=>'Mu',205=>'Nu',206=>'Xi',207=>'Omicron',208=>'Pi',209=>'Rho',210=>'.notdef',211=>'Sigma',212=>'Tau',213=>'Upsilon',214=>'Phi',215=>'Chi',216=>'Psi',217=>'Omega',218=>'Iotadieresis',219=>'Upsilondieresis',220=>'alphatonos',221=>'epsilontonos',222=>'etatonos',223=>'iotatonos',224=>'upsilondieresistonos',225=>'alpha',226=>'beta',227=>'gamma',228=>'delta',229=>'epsilon',230=>'zeta',231=>'eta',232=>'theta',233=>'iota',234=>'kappa',235=>'lambda',236=>'mu',237=>'nu',238=>'xi',239=>'omicron',240=>'pi',241=>'rho',242=>'sigma1',243=>'sigma',244=>'tau',245=>'upsilon',246=>'phi',247=>'chi',248=>'psi',249=>'omega',250=>'iotadieresis',251=>'upsilondieresis',252=>'omicrontonos',253=>'upsilontonos',254=>'omegatonos',255=>'.notdef'), + +// encoding map for: cp1254 +'cp1254' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'.notdef',159=>'Ydieresis',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Gbreve',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Idotaccent',222=>'Scedilla',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'gbreve',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'dotlessi',254=>'scedilla',255=>'ydieresis'), + +// encoding map for: cp1255 +'cp1255' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'afii57636',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'multiply',171=>'guillemotleft',172=>'logicalnot',173=>'sfthyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'middot',184=>'cedilla',185=>'onesuperior',186=>'divide',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'afii57799',193=>'afii57801',194=>'afii57800',195=>'afii57802',196=>'afii57793',197=>'afii57794',198=>'afii57795',199=>'afii57798',200=>'afii57797',201=>'afii57806',202=>'.notdef',203=>'afii57796',204=>'afii57807',205=>'afii57839',206=>'afii57645',207=>'afii57841',208=>'afii57842',209=>'afii57804',210=>'afii57803',211=>'afii57658',212=>'afii57716',213=>'afii57717',214=>'afii57718',215=>'gereshhebrew',216=>'gershayimhebrew',217=>'.notdef',218=>'.notdef',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'.notdef',224=>'afii57664',225=>'afii57665',226=>'afii57666',227=>'afii57667',228=>'afii57668',229=>'afii57669',230=>'afii57670',231=>'afii57671',232=>'afii57672',233=>'afii57673',234=>'afii57674',235=>'afii57675',236=>'afii57676',237=>'afii57677',238=>'afii57678',239=>'afii57679',240=>'afii57680',241=>'afii57681',242=>'afii57682',243=>'afii57683',244=>'afii57684',245=>'afii57685',246=>'afii57686',247=>'afii57687',248=>'afii57688',249=>'afii57689',250=>'afii57690',251=>'.notdef',252=>'.notdef',253=>'afii299',254=>'afii300',255=>'.notdef'), + +// encoding map for: cp1256 +'cp1256' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'afii57506',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'afii57511',139=>'guilsinglleft',140=>'OE',141=>'afii57507',142=>'afii57508',143=>'afii57512',144=>'afii57509',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'afii57513',155=>'guilsinglright',156=>'oe',157=>'afii61664',158=>'afii301',159=>'afii57514',160=>'space',161=>'afii57388',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'afii57403',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'afii57407',192=>'.notdef',193=>'afii57409',194=>'afii57410',195=>'afii57411',196=>'afii57412',197=>'afii57413',198=>'afii57414',199=>'afii57415',200=>'afii57416',201=>'afii57417',202=>'afii57418',203=>'afii57419',204=>'afii57420',205=>'afii57421',206=>'afii57422',207=>'afii57423',208=>'afii57424',209=>'afii57425',210=>'afii57426',211=>'afii57427',212=>'afii57428',213=>'afii57429',214=>'afii57430',215=>'multiply',216=>'afii57431',217=>'afii57432',218=>'afii57433',219=>'afii57434',220=>'afii57440',221=>'afii57441',222=>'afii57442',223=>'afii57443',224=>'agrave',225=>'afii57444',226=>'acircumflex',227=>'afii57445',228=>'afii57446',229=>'afii57470',230=>'afii57448',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'afii57449',237=>'afii57450',238=>'icircumflex',239=>'idieresis',240=>'afii57451',241=>'afii57452',242=>'afii57453',243=>'afii57454',244=>'ocircumflex',245=>'afii57455',246=>'afii57456',247=>'divide',248=>'afii57457',249=>'ugrave',250=>'afii57458',251=>'ucircumflex',252=>'udieresis',253=>'afii299',254=>'afii300',255=>'afii57519'), + +// encoding map for: cp1257 +'cp1257' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'.notdef',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'.notdef',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'dieresis',142=>'caron',143=>'cedilla',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'macron',158=>'ogonek',159=>'.notdef',160=>'space',161=>'.notdef',162=>'cent',163=>'sterling',164=>'currency',165=>'.notdef',166=>'brokenbar',167=>'section',168=>'Oslash',169=>'copyright',170=>'Rcommaaccent',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'AE',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'oslash',185=>'onesuperior',186=>'rcommaaccent',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'ae',192=>'Aogonek',193=>'Iogonek',194=>'Amacron',195=>'Cacute',196=>'Adieresis',197=>'Aring',198=>'Eogonek',199=>'Emacron',200=>'Ccaron',201=>'Eacute',202=>'Zacute',203=>'Edotaccent',204=>'Gcommaaccent',205=>'Kcommaaccent',206=>'Imacron',207=>'Lcommaaccent',208=>'Scaron',209=>'Nacute',210=>'Ncommaaccent',211=>'Oacute',212=>'Omacron',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Uogonek',217=>'Lslash',218=>'Sacute',219=>'Umacron',220=>'Udieresis',221=>'Zdotaccent',222=>'Zcaron',223=>'germandbls',224=>'aogonek',225=>'iogonek',226=>'amacron',227=>'cacute',228=>'adieresis',229=>'aring',230=>'eogonek',231=>'emacron',232=>'ccaron',233=>'eacute',234=>'zacute',235=>'edotaccent',236=>'gcommaaccent',237=>'kcommaaccent',238=>'imacron',239=>'lcommaaccent',240=>'scaron',241=>'nacute',242=>'ncommaaccent',243=>'oacute',244=>'omacron',245=>'otilde',246=>'odieresis',247=>'divide',248=>'uogonek',249=>'lslash',250=>'sacute',251=>'umacron',252=>'udieresis',253=>'zdotaccent',254=>'zcaron',255=>'dotaccent'), + +// encoding map for: cp1258 +'cp1258' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'.notdef',159=>'Ydieresis',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'gravecomb',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Dcroat',209=>'Ntilde',210=>'hookabovecomb',211=>'Oacute',212=>'Ocircumflex',213=>'Ohorn',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Uhorn',222=>'tildecomb',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'acutecomb',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'dcroat',241=>'ntilde',242=>'dotbelowcomb',243=>'oacute',244=>'ocircumflex',245=>'ohorn',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'uhorn',254=>'dong',255=>'ydieresis'), + +// encoding map for: iso-8859-1 +'iso-8859-1' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'), + +// encoding map for: iso-8859-2 +'iso-8859-2' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'Aogonek',162=>'breve',163=>'Lslash',164=>'currency',165=>'Lcaron',166=>'Sacute',167=>'section',168=>'dieresis',169=>'Scaron',170=>'Scedilla',171=>'Tcaron',172=>'Zacute',173=>'hyphen',174=>'Zcaron',175=>'Zdotaccent',176=>'degree',177=>'aogonek',178=>'ogonek',179=>'lslash',180=>'acute',181=>'lcaron',182=>'sacute',183=>'caron',184=>'cedilla',185=>'scaron',186=>'scedilla',187=>'tcaron',188=>'zacute',189=>'hungarumlaut',190=>'zcaron',191=>'zdotaccent',192=>'Racute',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Lacute',198=>'Cacute',199=>'Ccedilla',200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Ecaron',205=>'Iacute',206=>'Icircumflex',207=>'Dcaron',208=>'Dcroat',209=>'Nacute',210=>'Ncaron',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'multiply',216=>'Rcaron',217=>'Uring',218=>'Uacute',219=>'Uhungarumlaut',220=>'Udieresis',221=>'Yacute',222=>'Tcommaaccent',223=>'germandbls',224=>'racute',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'lacute',230=>'cacute',231=>'ccedilla',232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'ecaron',237=>'iacute',238=>'icircumflex',239=>'dcaron',240=>'dcroat',241=>'nacute',242=>'ncaron',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'divide',248=>'rcaron',249=>'uring',250=>'uacute',251=>'uhungarumlaut',252=>'udieresis',253=>'yacute',254=>'tcommaaccent',255=>'dotaccent'), + +// encoding map for: iso-8859-4 +'iso-8859-4' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'Aogonek',162=>'kgreenlandic',163=>'Rcommaaccent',164=>'currency',165=>'Itilde',166=>'Lcommaaccent',167=>'section',168=>'dieresis',169=>'Scaron',170=>'Emacron',171=>'Gcommaaccent',172=>'Tbar',173=>'hyphen',174=>'Zcaron',175=>'macron',176=>'degree',177=>'aogonek',178=>'ogonek',179=>'rcommaaccent',180=>'acute',181=>'itilde',182=>'lcommaaccent',183=>'caron',184=>'cedilla',185=>'scaron',186=>'emacron',187=>'gcommaaccent',188=>'tbar',189=>'Eng',190=>'zcaron',191=>'eng',192=>'Amacron',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Iogonek',200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Edotaccent',205=>'Iacute',206=>'Icircumflex',207=>'Imacron',208=>'Dcroat',209=>'Ncommaaccent',210=>'Omacron',211=>'Kcommaaccent',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Uogonek',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Utilde',222=>'Umacron',223=>'germandbls',224=>'amacron',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'iogonek',232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'edotaccent',237=>'iacute',238=>'icircumflex',239=>'imacron',240=>'dcroat',241=>'ncommaaccent',242=>'omacron',243=>'kcommaaccent',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'uogonek',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'utilde',254=>'umacron',255=>'dotaccent'), + +// encoding map for: iso-8859-5 +'iso-8859-5' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'afii10023',162=>'afii10051',163=>'afii10052',164=>'afii10053',165=>'afii10054',166=>'afii10055',167=>'afii10056',168=>'afii10057',169=>'afii10058',170=>'afii10059',171=>'afii10060',172=>'afii10061',173=>'hyphen',174=>'afii10062',175=>'afii10145',176=>'afii10017',177=>'afii10018',178=>'afii10019',179=>'afii10020',180=>'afii10021',181=>'afii10022',182=>'afii10024',183=>'afii10025',184=>'afii10026',185=>'afii10027',186=>'afii10028',187=>'afii10029',188=>'afii10030',189=>'afii10031',190=>'afii10032',191=>'afii10033',192=>'afii10034',193=>'afii10035',194=>'afii10036',195=>'afii10037',196=>'afii10038',197=>'afii10039',198=>'afii10040',199=>'afii10041',200=>'afii10042',201=>'afii10043',202=>'afii10044',203=>'afii10045',204=>'afii10046',205=>'afii10047',206=>'afii10048',207=>'afii10049',208=>'afii10065',209=>'afii10066',210=>'afii10067',211=>'afii10068',212=>'afii10069',213=>'afii10070',214=>'afii10072',215=>'afii10073',216=>'afii10074',217=>'afii10075',218=>'afii10076',219=>'afii10077',220=>'afii10078',221=>'afii10079',222=>'afii10080',223=>'afii10081',224=>'afii10082',225=>'afii10083',226=>'afii10084',227=>'afii10085',228=>'afii10086',229=>'afii10087',230=>'afii10088',231=>'afii10089',232=>'afii10090',233=>'afii10091',234=>'afii10092',235=>'afii10093',236=>'afii10094',237=>'afii10095',238=>'afii10096',239=>'afii10097',240=>'afii61352',241=>'afii10071',242=>'afii10099',243=>'afii10100',244=>'afii10101',245=>'afii10102',246=>'afii10103',247=>'afii10104',248=>'afii10105',249=>'afii10106',250=>'afii10107',251=>'afii10108',252=>'afii10109',253=>'section',254=>'afii10110',255=>'afii10193'), + +// encoding map for: iso-8859-7 +'iso-8859-7' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'quoteleft',162=>'quoteright',163=>'sterling',164=>'.notdef',165=>'.notdef',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'.notdef',175=>'afii00208',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'tonos',181=>'dieresistonos',182=>'Alphatonos',183=>'periodcentered',184=>'Epsilontonos',185=>'Etatonos',186=>'Iotatonos',187=>'guillemotright',188=>'Omicrontonos',189=>'onehalf',190=>'Upsilontonos',191=>'Omegatonos',192=>'iotadieresistonos',193=>'Alpha',194=>'Beta',195=>'Gamma',196=>'Delta',197=>'Epsilon',198=>'Zeta',199=>'Eta',200=>'Theta',201=>'Iota',202=>'Kappa',203=>'Lambda',204=>'Mu',205=>'Nu',206=>'Xi',207=>'Omicron',208=>'Pi',209=>'Rho',210=>'.notdef',211=>'Sigma',212=>'Tau',213=>'Upsilon',214=>'Phi',215=>'Chi',216=>'Psi',217=>'Omega',218=>'Iotadieresis',219=>'Upsilondieresis',220=>'alphatonos',221=>'epsilontonos',222=>'etatonos',223=>'iotatonos',224=>'upsilondieresistonos',225=>'alpha',226=>'beta',227=>'gamma',228=>'delta',229=>'epsilon',230=>'zeta',231=>'eta',232=>'theta',233=>'iota',234=>'kappa',235=>'lambda',236=>'mu',237=>'nu',238=>'xi',239=>'omicron',240=>'pi',241=>'rho',242=>'sigma1',243=>'sigma',244=>'tau',245=>'upsilon',246=>'phi',247=>'chi',248=>'psi',249=>'omega',250=>'iotadieresis',251=>'upsilondieresis',252=>'omicrontonos',253=>'upsilontonos',254=>'omegatonos',255=>'.notdef'), + +// encoding map for: iso-8859-9 +'iso-8859-9' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Gbreve',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Idotaccent',222=>'Scedilla',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'gbreve',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'dotlessi',254=>'scedilla',255=>'ydieresis'), + +// encoding map for: iso-8859-11 +'iso-8859-11' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'kokaithai',162=>'khokhaithai',163=>'khokhuatthai',164=>'khokhwaithai',165=>'khokhonthai',166=>'khorakhangthai',167=>'ngonguthai',168=>'chochanthai',169=>'chochingthai',170=>'chochangthai',171=>'sosothai',172=>'chochoethai',173=>'yoyingthai',174=>'dochadathai',175=>'topatakthai',176=>'thothanthai',177=>'thonangmonthothai',178=>'thophuthaothai',179=>'nonenthai',180=>'dodekthai',181=>'totaothai',182=>'thothungthai',183=>'thothahanthai',184=>'thothongthai',185=>'nonuthai',186=>'bobaimaithai',187=>'poplathai',188=>'phophungthai',189=>'fofathai',190=>'phophanthai',191=>'fofanthai',192=>'phosamphaothai',193=>'momathai',194=>'yoyakthai',195=>'roruathai',196=>'ruthai',197=>'lolingthai',198=>'luthai',199=>'wowaenthai',200=>'sosalathai',201=>'sorusithai',202=>'sosuathai',203=>'hohipthai',204=>'lochulathai',205=>'oangthai',206=>'honokhukthai',207=>'paiyannoithai',208=>'saraathai',209=>'maihanakatthai',210=>'saraaathai',211=>'saraamthai',212=>'saraithai',213=>'saraiithai',214=>'sarauethai',215=>'saraueethai',216=>'sarauthai',217=>'sarauuthai',218=>'phinthuthai',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'bahtthai',224=>'saraethai',225=>'saraaethai',226=>'saraothai',227=>'saraaimaimuanthai',228=>'saraaimaimalaithai',229=>'lakkhangyaothai',230=>'maiyamokthai',231=>'maitaikhuthai',232=>'maiekthai',233=>'maithothai',234=>'maitrithai',235=>'maichattawathai',236=>'thanthakhatthai',237=>'nikhahitthai',238=>'yamakkanthai',239=>'fongmanthai',240=>'zerothai',241=>'onethai',242=>'twothai',243=>'threethai',244=>'fourthai',245=>'fivethai',246=>'sixthai',247=>'seventhai',248=>'eightthai',249=>'ninethai',250=>'angkhankhuthai',251=>'khomutthai',252=>'.notdef',253=>'.notdef',254=>'.notdef',255=>'.notdef'), + +// encoding map for: iso-8859-15 +'iso-8859-15' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'Euro',165=>'yen',166=>'Scaron',167=>'section',168=>'scaron',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'Zcaron',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'zcaron',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'OE',189=>'oe',190=>'Ydieresis',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'), + +// encoding map for: iso-8859-16 +'iso-8859-16' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'Aogonek',162=>'aogonek',163=>'Lslash',164=>'Euro',165=>'quotedblbase',166=>'Scaron',167=>'section',168=>'scaron',169=>'copyright',170=>'Scommaaccent',171=>'guillemotleft',172=>'Zacute',173=>'hyphen',174=>'zacute',175=>'Zdotaccent',176=>'degree',177=>'plusminus',178=>'Ccaron',179=>'lslash',180=>'Zcaron',181=>'quotedblright',182=>'paragraph',183=>'periodcentered',184=>'zcaron',185=>'ccaron',186=>'scommaaccent',187=>'guillemotright',188=>'OE',189=>'oe',190=>'Ydieresis',191=>'zdotaccent',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Cacute',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Dcroat',209=>'Nacute',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'Sacute',216=>'Uhungarumlaut',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Eogonek',222=>'Tcommaaccent',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'cacute',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'dcroat',241=>'nacute',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'sacute',248=>'uhungarumlaut',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'eogonek',254=>'tcommaaccent',255=>'ydieresis'), + +// encoding map for: koi8-r +'koi8-r' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'SF100000',129=>'SF110000',130=>'SF010000',131=>'SF030000',132=>'SF020000',133=>'SF040000',134=>'SF080000',135=>'SF090000',136=>'SF060000',137=>'SF070000',138=>'SF050000',139=>'upblock',140=>'dnblock',141=>'block',142=>'lfblock',143=>'rtblock',144=>'ltshade',145=>'shade',146=>'dkshade',147=>'integraltp',148=>'filledbox',149=>'periodcentered',150=>'radical',151=>'approxequal',152=>'lessequal',153=>'greaterequal',154=>'space',155=>'integralbt',156=>'degree',157=>'twosuperior',158=>'periodcentered',159=>'divide',160=>'SF430000',161=>'SF240000',162=>'SF510000',163=>'afii10071',164=>'SF520000',165=>'SF390000',166=>'SF220000',167=>'SF210000',168=>'SF250000',169=>'SF500000',170=>'SF490000',171=>'SF380000',172=>'SF280000',173=>'SF270000',174=>'SF260000',175=>'SF360000',176=>'SF370000',177=>'SF420000',178=>'SF190000',179=>'afii10023',180=>'SF200000',181=>'SF230000',182=>'SF470000',183=>'SF480000',184=>'SF410000',185=>'SF450000',186=>'SF460000',187=>'SF400000',188=>'SF540000',189=>'SF530000',190=>'SF440000',191=>'copyright',192=>'afii10096',193=>'afii10065',194=>'afii10066',195=>'afii10088',196=>'afii10069',197=>'afii10070',198=>'afii10086',199=>'afii10068',200=>'afii10087',201=>'afii10074',202=>'afii10075',203=>'afii10076',204=>'afii10077',205=>'afii10078',206=>'afii10079',207=>'afii10080',208=>'afii10081',209=>'afii10097',210=>'afii10082',211=>'afii10083',212=>'afii10084',213=>'afii10085',214=>'afii10072',215=>'afii10067',216=>'afii10094',217=>'afii10093',218=>'afii10073',219=>'afii10090',220=>'afii10095',221=>'afii10091',222=>'afii10089',223=>'afii10092',224=>'afii10048',225=>'afii10017',226=>'afii10018',227=>'afii10040',228=>'afii10021',229=>'afii10022',230=>'afii10038',231=>'afii10020',232=>'afii10039',233=>'afii10026',234=>'afii10027',235=>'afii10028',236=>'afii10029',237=>'afii10030',238=>'afii10031',239=>'afii10032',240=>'afii10033',241=>'afii10049',242=>'afii10034',243=>'afii10035',244=>'afii10036',245=>'afii10037',246=>'afii10024',247=>'afii10019',248=>'afii10046',249=>'afii10045',250=>'afii10025',251=>'afii10042',252=>'afii10047',253=>'afii10043',254=>'afii10041',255=>'afii10044'), + +// encoding map for: koi8-u +'koi8-u' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'SF100000',129=>'SF110000',130=>'SF010000',131=>'SF030000',132=>'SF020000',133=>'SF040000',134=>'SF080000',135=>'SF090000',136=>'SF060000',137=>'SF070000',138=>'SF050000',139=>'upblock',140=>'dnblock',141=>'block',142=>'lfblock',143=>'rtblock',144=>'ltshade',145=>'shade',146=>'dkshade',147=>'integraltp',148=>'filledbox',149=>'bullet',150=>'radical',151=>'approxequal',152=>'lessequal',153=>'greaterequal',154=>'space',155=>'integralbt',156=>'degree',157=>'twosuperior',158=>'periodcentered',159=>'divide',160=>'SF430000',161=>'SF240000',162=>'SF510000',163=>'afii10071',164=>'afii10101',165=>'SF390000',166=>'afii10103',167=>'afii10104',168=>'SF250000',169=>'SF500000',170=>'SF490000',171=>'SF380000',172=>'SF280000',173=>'afii10098',174=>'SF260000',175=>'SF360000',176=>'SF370000',177=>'SF420000',178=>'SF190000',179=>'afii10023',180=>'afii10053',181=>'SF230000',182=>'afii10055',183=>'afii10056',184=>'SF410000',185=>'SF450000',186=>'SF460000',187=>'SF400000',188=>'SF540000',189=>'afii10050',190=>'SF440000',191=>'copyright',192=>'afii10096',193=>'afii10065',194=>'afii10066',195=>'afii10088',196=>'afii10069',197=>'afii10070',198=>'afii10086',199=>'afii10068',200=>'afii10087',201=>'afii10074',202=>'afii10075',203=>'afii10076',204=>'afii10077',205=>'afii10078',206=>'afii10079',207=>'afii10080',208=>'afii10081',209=>'afii10097',210=>'afii10082',211=>'afii10083',212=>'afii10084',213=>'afii10085',214=>'afii10072',215=>'afii10067',216=>'afii10094',217=>'afii10093',218=>'afii10073',219=>'afii10090',220=>'afii10095',221=>'afii10091',222=>'afii10089',223=>'afii10092',224=>'afii10048',225=>'afii10017',226=>'afii10018',227=>'afii10040',228=>'afii10021',229=>'afii10022',230=>'afii10038',231=>'afii10020',232=>'afii10039',233=>'afii10026',234=>'afii10027',235=>'afii10028',236=>'afii10029',237=>'afii10030',238=>'afii10031',239=>'afii10032',240=>'afii10033',241=>'afii10049',242=>'afii10034',243=>'afii10035',244=>'afii10036',245=>'afii10037',246=>'afii10024',247=>'afii10019',248=>'afii10046',249=>'afii10045',250=>'afii10025',251=>'afii10042',252=>'afii10047',253=>'afii10043',254=>'afii10041',255=>'afii10044'), + +// encoding map for: symbol +'symbol' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'universal',35=>'numbersign',36=>'existential',37=>'percent',38=>'ampersand',39=>'suchthat',40=>'parenleft',41=>'parenright',42=>'asteriskmath',43=>'plus',44=>'comma',45=>'minus',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'congruent',65=>'Alpha',66=>'Beta',67=>'Chi',68=>'Delta',69=>'Epsilon',70=>'Phi',71=>'Gamma',72=>'Eta',73=>'Iota',74=>'theta1',75=>'Kappa',76=>'Lambda',77=>'Mu',78=>'Nu',79=>'Omicron',80=>'Pi',81=>'Theta',82=>'Rho',83=>'Sigma',84=>'Tau',85=>'Upsilon',86=>'sigma1',87=>'Omega',88=>'Xi',89=>'Psi',90=>'Zeta',91=>'bracketleft',92=>'therefore',93=>'bracketright',94=>'perpendicular',95=>'underscore',96=>'radicalex',97=>'alpha',98=>'beta',99=>'chi',100=>'delta',101=>'epsilon',102=>'phi',103=>'gamma',104=>'eta',105=>'iota',106=>'phi1',107=>'kappa',108=>'lambda',109=>'mu',110=>'nu',111=>'omicron',112=>'pi',113=>'theta',114=>'rho',115=>'sigma',116=>'tau',117=>'upsilon',118=>'omega1',119=>'omega',120=>'xi',121=>'psi',122=>'zeta',123=>'braceleft',124=>'bar',125=>'braceright',126=>'similar',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'Euro',161=>'Upsilon1',162=>'minute',163=>'lessequal',164=>'fraction',165=>'infinity',166=>'florin',167=>'club',168=>'diamond',169=>'heart',170=>'spade',171=>'arrowboth',172=>'arrowleft',173=>'arrowup',174=>'arrowright',175=>'arrowdown',176=>'degree',177=>'plusminus',178=>'second',179=>'greaterequal',180=>'multiply',181=>'proportional',182=>'partialdiff',183=>'bullet',184=>'divide',185=>'notequal',186=>'equivalence',187=>'approxequal',188=>'ellipsis',189=>'arrowvertex',190=>'arrowhorizex',191=>'carriagereturn',192=>'aleph',193=>'Ifraktur',194=>'Rfraktur',195=>'weierstrass',196=>'circlemultiply',197=>'circleplus',198=>'emptyset',199=>'intersection',200=>'union',201=>'propersuperset',202=>'reflexsuperset',203=>'notsubset',204=>'propersubset',205=>'reflexsubset',206=>'element',207=>'notelement',208=>'angle',209=>'gradient',210=>'registerserif',211=>'copyrightserif',212=>'trademarkserif',213=>'product',214=>'radical',215=>'dotmath',216=>'logicalnot',217=>'logicaland',218=>'logicalor',219=>'arrowdblboth',220=>'arrowdblleft',221=>'arrowdblup',222=>'arrowdblright',223=>'arrowdbldown',224=>'lozenge',225=>'angleleft',226=>'registersans',227=>'copyrightsans',228=>'trademarksans',229=>'summation',230=>'parenlefttp',231=>'parenleftex',232=>'parenleftbt',233=>'bracketlefttp',234=>'bracketleftex',235=>'bracketleftbt',236=>'bracelefttp',237=>'braceleftmid',238=>'braceleftbt',239=>'braceex',240=>'.notdef',241=>'angleright',242=>'integral',243=>'integraltp',244=>'integralex',245=>'integralbt',246=>'parenrighttp',247=>'parenrightex',248=>'parenrightbt',249=>'bracketrighttp',250=>'bracketrightex',251=>'bracketrightbt',252=>'bracerighttp',253=>'bracerightmid',254=>'bracerightbt',255=>'.notdef',1226=>'registered',1227=>'copyright',1228=>'trademark') + +); // end of encoding maps + +/** + * ToUnicode map for Identity-H stream + * @public static + */ +public static $uni_identity_h = "/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n/WMode 0 def\n1 begincodespacerange\n<0000> \nendcodespacerange\n100 beginbfrange\n<0000> <00ff> <0000>\n<0100> <01ff> <0100>\n<0200> <02ff> <0200>\n<0300> <03ff> <0300>\n<0400> <04ff> <0400>\n<0500> <05ff> <0500>\n<0600> <06ff> <0600>\n<0700> <07ff> <0700>\n<0800> <08ff> <0800>\n<0900> <09ff> <0900>\n<0a00> <0aff> <0a00>\n<0b00> <0bff> <0b00>\n<0c00> <0cff> <0c00>\n<0d00> <0dff> <0d00>\n<0e00> <0eff> <0e00>\n<0f00> <0fff> <0f00>\n<1000> <10ff> <1000>\n<1100> <11ff> <1100>\n<1200> <12ff> <1200>\n<1300> <13ff> <1300>\n<1400> <14ff> <1400>\n<1500> <15ff> <1500>\n<1600> <16ff> <1600>\n<1700> <17ff> <1700>\n<1800> <18ff> <1800>\n<1900> <19ff> <1900>\n<1a00> <1aff> <1a00>\n<1b00> <1bff> <1b00>\n<1c00> <1cff> <1c00>\n<1d00> <1dff> <1d00>\n<1e00> <1eff> <1e00>\n<1f00> <1fff> <1f00>\n<2000> <20ff> <2000>\n<2100> <21ff> <2100>\n<2200> <22ff> <2200>\n<2300> <23ff> <2300>\n<2400> <24ff> <2400>\n<2500> <25ff> <2500>\n<2600> <26ff> <2600>\n<2700> <27ff> <2700>\n<2800> <28ff> <2800>\n<2900> <29ff> <2900>\n<2a00> <2aff> <2a00>\n<2b00> <2bff> <2b00>\n<2c00> <2cff> <2c00>\n<2d00> <2dff> <2d00>\n<2e00> <2eff> <2e00>\n<2f00> <2fff> <2f00>\n<3000> <30ff> <3000>\n<3100> <31ff> <3100>\n<3200> <32ff> <3200>\n<3300> <33ff> <3300>\n<3400> <34ff> <3400>\n<3500> <35ff> <3500>\n<3600> <36ff> <3600>\n<3700> <37ff> <3700>\n<3800> <38ff> <3800>\n<3900> <39ff> <3900>\n<3a00> <3aff> <3a00>\n<3b00> <3bff> <3b00>\n<3c00> <3cff> <3c00>\n<3d00> <3dff> <3d00>\n<3e00> <3eff> <3e00>\n<3f00> <3fff> <3f00>\n<4000> <40ff> <4000>\n<4100> <41ff> <4100>\n<4200> <42ff> <4200>\n<4300> <43ff> <4300>\n<4400> <44ff> <4400>\n<4500> <45ff> <4500>\n<4600> <46ff> <4600>\n<4700> <47ff> <4700>\n<4800> <48ff> <4800>\n<4900> <49ff> <4900>\n<4a00> <4aff> <4a00>\n<4b00> <4bff> <4b00>\n<4c00> <4cff> <4c00>\n<4d00> <4dff> <4d00>\n<4e00> <4eff> <4e00>\n<4f00> <4fff> <4f00>\n<5000> <50ff> <5000>\n<5100> <51ff> <5100>\n<5200> <52ff> <5200>\n<5300> <53ff> <5300>\n<5400> <54ff> <5400>\n<5500> <55ff> <5500>\n<5600> <56ff> <5600>\n<5700> <57ff> <5700>\n<5800> <58ff> <5800>\n<5900> <59ff> <5900>\n<5a00> <5aff> <5a00>\n<5b00> <5bff> <5b00>\n<5c00> <5cff> <5c00>\n<5d00> <5dff> <5d00>\n<5e00> <5eff> <5e00>\n<5f00> <5fff> <5f00>\n<6000> <60ff> <6000>\n<6100> <61ff> <6100>\n<6200> <62ff> <6200>\n<6300> <63ff> <6300>\nendbfrange\n100 beginbfrange\n<6400> <64ff> <6400>\n<6500> <65ff> <6500>\n<6600> <66ff> <6600>\n<6700> <67ff> <6700>\n<6800> <68ff> <6800>\n<6900> <69ff> <6900>\n<6a00> <6aff> <6a00>\n<6b00> <6bff> <6b00>\n<6c00> <6cff> <6c00>\n<6d00> <6dff> <6d00>\n<6e00> <6eff> <6e00>\n<6f00> <6fff> <6f00>\n<7000> <70ff> <7000>\n<7100> <71ff> <7100>\n<7200> <72ff> <7200>\n<7300> <73ff> <7300>\n<7400> <74ff> <7400>\n<7500> <75ff> <7500>\n<7600> <76ff> <7600>\n<7700> <77ff> <7700>\n<7800> <78ff> <7800>\n<7900> <79ff> <7900>\n<7a00> <7aff> <7a00>\n<7b00> <7bff> <7b00>\n<7c00> <7cff> <7c00>\n<7d00> <7dff> <7d00>\n<7e00> <7eff> <7e00>\n<7f00> <7fff> <7f00>\n<8000> <80ff> <8000>\n<8100> <81ff> <8100>\n<8200> <82ff> <8200>\n<8300> <83ff> <8300>\n<8400> <84ff> <8400>\n<8500> <85ff> <8500>\n<8600> <86ff> <8600>\n<8700> <87ff> <8700>\n<8800> <88ff> <8800>\n<8900> <89ff> <8900>\n<8a00> <8aff> <8a00>\n<8b00> <8bff> <8b00>\n<8c00> <8cff> <8c00>\n<8d00> <8dff> <8d00>\n<8e00> <8eff> <8e00>\n<8f00> <8fff> <8f00>\n<9000> <90ff> <9000>\n<9100> <91ff> <9100>\n<9200> <92ff> <9200>\n<9300> <93ff> <9300>\n<9400> <94ff> <9400>\n<9500> <95ff> <9500>\n<9600> <96ff> <9600>\n<9700> <97ff> <9700>\n<9800> <98ff> <9800>\n<9900> <99ff> <9900>\n<9a00> <9aff> <9a00>\n<9b00> <9bff> <9b00>\n<9c00> <9cff> <9c00>\n<9d00> <9dff> <9d00>\n<9e00> <9eff> <9e00>\n<9f00> <9fff> <9f00>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nendbfrange\n56 beginbfrange\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nendbfrange\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend"; + +} // END OF TCPDF_FONT_DATA CLASS + +//============================================================+ +// END OF FILE +//============================================================+ diff --git a/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/tcpdf.php b/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/tcpdf.php new file mode 100644 index 0000000..4004347 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/tcpdf.php @@ -0,0 +1,24729 @@ +. +// +// See LICENSE.TXT file for more information. +// ------------------------------------------------------------------- +// +// Description : +// This is a PHP class for generating PDF documents without requiring external extensions. +// +// NOTE: +// This class was originally derived in 2002 from the Public +// Domain FPDF class by Olivier Plathey (http://www.fpdf.org), +// but now is almost entirely rewritten and contains thousands of +// new lines of code and hundreds new features. +// +// Main features: +// * no external libraries are required for the basic functions; +// * all standard page formats, custom page formats, custom margins and units of measure; +// * UTF-8 Unicode and Right-To-Left languages; +// * TrueTypeUnicode, TrueType, Type1 and CID-0 fonts; +// * font subsetting; +// * methods to publish some XHTML + CSS code, Javascript and Forms; +// * images, graphic (geometric figures) and transformation methods; +// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImageMagick (http://www.imagemagick.org/www/formats.html) +// * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417; +// * JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies; +// * automatic page header and footer management; +// * document encryption up to 256 bit and digital signature certifications; +// * transactions to UNDO commands; +// * PDF annotations, including links, text and file attachments; +// * text rendering modes (fill, stroke and clipping); +// * multiple columns mode; +// * no-write page regions; +// * bookmarks, named destinations and table of content; +// * text hyphenation; +// * text stretching and spacing (tracking); +// * automatic page break, line break and text alignments including justification; +// * automatic page numbering and page groups; +// * move and delete pages; +// * page compression (requires php-zlib extension); +// * XOBject Templates; +// * Layers and object visibility. +// * PDF/A-1b support +//============================================================+ + +/** + * @file + * This is a PHP class for generating PDF documents without requiring external extensions.
        + * TCPDF project (http://www.tcpdf.org) was originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
        + *

        TCPDF main features are:

        + *
          + *
        • no external libraries are required for the basic functions;
        • + *
        • all standard page formats, custom page formats, custom margins and units of measure;
        • + *
        • UTF-8 Unicode and Right-To-Left languages;
        • + *
        • TrueTypeUnicode, TrueType, Type1 and CID-0 fonts;
        • + *
        • font subsetting;
        • + *
        • methods to publish some XHTML + CSS code, Javascript and Forms;
        • + *
        • images, graphic (geometric figures) and transformation methods; + *
        • supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImageMagick (http://www.imagemagick.org/www/formats.html)
        • + *
        • 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;
        • + *
        • JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;
        • + *
        • automatic page header and footer management;
        • + *
        • document encryption up to 256 bit and digital signature certifications;
        • + *
        • transactions to UNDO commands;
        • + *
        • PDF annotations, including links, text and file attachments;
        • + *
        • text rendering modes (fill, stroke and clipping);
        • + *
        • multiple columns mode;
        • + *
        • no-write page regions;
        • + *
        • bookmarks, named destinations and table of content;
        • + *
        • text hyphenation;
        • + *
        • text stretching and spacing (tracking);
        • + *
        • automatic page break, line break and text alignments including justification;
        • + *
        • automatic page numbering and page groups;
        • + *
        • move and delete pages;
        • + *
        • page compression (requires php-zlib extension);
        • + *
        • XOBject Templates;
        • + *
        • Layers and object visibility;
        • + *
        • PDF/A-1b support.
        • + *
        + * Tools to encode your unicode fonts are on fonts/utils directory.

        + * @package com.tecnick.tcpdf + * @author Nicola Asuni + * @version 6.3.2 + */ + +// TCPDF configuration +require_once(dirname(__FILE__).'/tcpdf_autoconfig.php'); +// TCPDF static font methods and data +require_once(dirname(__FILE__).'/include/tcpdf_font_data.php'); +// TCPDF static font methods and data +require_once(dirname(__FILE__).'/include/tcpdf_fonts.php'); +// TCPDF static color methods and data +require_once(dirname(__FILE__).'/include/tcpdf_colors.php'); +// TCPDF static image methods and data +require_once(dirname(__FILE__).'/include/tcpdf_images.php'); +// TCPDF static methods and data +require_once(dirname(__FILE__).'/include/tcpdf_static.php'); + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +/** + * @class TCPDF + * PHP class for generating PDF documents without requiring external extensions. + * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
        + * @package com.tecnick.tcpdf + * @brief PHP class for generating PDF documents without requiring external extensions. + * @version 6.3.2 + * @author Nicola Asuni - info@tecnick.com + * @IgnoreAnnotation("protected") + * @IgnoreAnnotation("public") + * @IgnoreAnnotation("pre") + */ +class TCPDF { + + // Protected properties + + /** + * Current page number. + * @protected + */ + protected $page; + + /** + * Current object number. + * @protected + */ + protected $n; + + /** + * Array of object offsets. + * @protected + */ + protected $offsets = array(); + + /** + * Array of object IDs for each page. + * @protected + */ + protected $pageobjects = array(); + + /** + * Buffer holding in-memory PDF. + * @protected + */ + protected $buffer; + + /** + * Array containing pages. + * @protected + */ + protected $pages = array(); + + /** + * Current document state. + * @protected + */ + protected $state; + + /** + * Compression flag. + * @protected + */ + protected $compress; + + /** + * Current page orientation (P = Portrait, L = Landscape). + * @protected + */ + protected $CurOrientation; + + /** + * Page dimensions. + * @protected + */ + protected $pagedim = array(); + + /** + * Scale factor (number of points in user unit). + * @protected + */ + protected $k; + + /** + * Width of page format in points. + * @protected + */ + protected $fwPt; + + /** + * Height of page format in points. + * @protected + */ + protected $fhPt; + + /** + * Current width of page in points. + * @protected + */ + protected $wPt; + + /** + * Current height of page in points. + * @protected + */ + protected $hPt; + + /** + * Current width of page in user unit. + * @protected + */ + protected $w; + + /** + * Current height of page in user unit. + * @protected + */ + protected $h; + + /** + * Left margin. + * @protected + */ + protected $lMargin; + + /** + * Right margin. + * @protected + */ + protected $rMargin; + + /** + * Cell left margin (used by regions). + * @protected + */ + protected $clMargin; + + /** + * Cell right margin (used by regions). + * @protected + */ + protected $crMargin; + + /** + * Top margin. + * @protected + */ + protected $tMargin; + + /** + * Page break margin. + * @protected + */ + protected $bMargin; + + /** + * Array of cell internal paddings ('T' => top, 'R' => right, 'B' => bottom, 'L' => left). + * @since 5.9.000 (2010-10-03) + * @protected + */ + protected $cell_padding = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0); + + /** + * Array of cell margins ('T' => top, 'R' => right, 'B' => bottom, 'L' => left). + * @since 5.9.000 (2010-10-04) + * @protected + */ + protected $cell_margin = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0); + + /** + * Current horizontal position in user unit for cell positioning. + * @protected + */ + protected $x; + + /** + * Current vertical position in user unit for cell positioning. + * @protected + */ + protected $y; + + /** + * Height of last cell printed. + * @protected + */ + protected $lasth; + + /** + * Line width in user unit. + * @protected + */ + protected $LineWidth; + + /** + * Array of standard font names. + * @protected + */ + protected $CoreFonts; + + /** + * Array of used fonts. + * @protected + */ + protected $fonts = array(); + + /** + * Array of font files. + * @protected + */ + protected $FontFiles = array(); + + /** + * Array of encoding differences. + * @protected + */ + protected $diffs = array(); + + /** + * Array of used images. + * @protected + */ + protected $images = array(); + + /** + * Depth of the svg tag, to keep track if the svg tag is a subtag or the root tag. + * @protected + */ + protected $svg_tag_depth = 0; + + /** + * Array of Annotations in pages. + * @protected + */ + protected $PageAnnots = array(); + + /** + * Array of internal links. + * @protected + */ + protected $links = array(); + + /** + * Current font family. + * @protected + */ + protected $FontFamily; + + /** + * Current font style. + * @protected + */ + protected $FontStyle; + + /** + * Current font ascent (distance between font top and baseline). + * @protected + * @since 2.8.000 (2007-03-29) + */ + protected $FontAscent; + + /** + * Current font descent (distance between font bottom and baseline). + * @protected + * @since 2.8.000 (2007-03-29) + */ + protected $FontDescent; + + /** + * Underlining flag. + * @protected + */ + protected $underline; + + /** + * Overlining flag. + * @protected + */ + protected $overline; + + /** + * Current font info. + * @protected + */ + protected $CurrentFont; + + /** + * Current font size in points. + * @protected + */ + protected $FontSizePt; + + /** + * Current font size in user unit. + * @protected + */ + protected $FontSize; + + /** + * Commands for drawing color. + * @protected + */ + protected $DrawColor; + + /** + * Commands for filling color. + * @protected + */ + protected $FillColor; + + /** + * Commands for text color. + * @protected + */ + protected $TextColor; + + /** + * Indicates whether fill and text colors are different. + * @protected + */ + protected $ColorFlag; + + /** + * Automatic page breaking. + * @protected + */ + protected $AutoPageBreak; + + /** + * Threshold used to trigger page breaks. + * @protected + */ + protected $PageBreakTrigger; + + /** + * Flag set when processing page header. + * @protected + */ + protected $InHeader = false; + + /** + * Flag set when processing page footer. + * @protected + */ + protected $InFooter = false; + + /** + * Zoom display mode. + * @protected + */ + protected $ZoomMode; + + /** + * Layout display mode. + * @protected + */ + protected $LayoutMode; + + /** + * If true set the document information dictionary in Unicode. + * @protected + */ + protected $docinfounicode = true; + + /** + * Document title. + * @protected + */ + protected $title = ''; + + /** + * Document subject. + * @protected + */ + protected $subject = ''; + + /** + * Document author. + * @protected + */ + protected $author = ''; + + /** + * Document keywords. + * @protected + */ + protected $keywords = ''; + + /** + * Document creator. + * @protected + */ + protected $creator = ''; + + /** + * Starting page number. + * @protected + */ + protected $starting_page_number = 1; + + /** + * The right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image. + * @since 2002-07-31 + * @author Nicola Asuni + * @protected + */ + protected $img_rb_x; + + /** + * The right-bottom corner Y coordinate of last inserted image. + * @since 2002-07-31 + * @author Nicola Asuni + * @protected + */ + protected $img_rb_y; + + /** + * Adjusting factor to convert pixels to user units. + * @since 2004-06-14 + * @author Nicola Asuni + * @protected + */ + protected $imgscale = 1; + + /** + * Boolean flag set to true when the input text is unicode (require unicode fonts). + * @since 2005-01-02 + * @author Nicola Asuni + * @protected + */ + protected $isunicode = false; + + /** + * PDF version. + * @since 1.5.3 + * @protected + */ + protected $PDFVersion = '1.7'; + + /** + * ID of the stored default header template (-1 = not set). + * @protected + */ + protected $header_xobjid = false; + + /** + * If true reset the Header Xobject template at each page + * @protected + */ + protected $header_xobj_autoreset = false; + + /** + * Minimum distance between header and top page margin. + * @protected + */ + protected $header_margin; + + /** + * Minimum distance between footer and bottom page margin. + * @protected + */ + protected $footer_margin; + + /** + * Original left margin value. + * @protected + * @since 1.53.0.TC013 + */ + protected $original_lMargin; + + /** + * Original right margin value. + * @protected + * @since 1.53.0.TC013 + */ + protected $original_rMargin; + + /** + * Default font used on page header. + * @protected + * @var array + * @phpstan-var array{0: string, 1: string, 2: float|null} + */ + protected $header_font; + + /** + * Default font used on page footer. + * @protected + * @var array + * @phpstan-var array{0: string, 1: string, 2: float|null} + */ + protected $footer_font; + + /** + * Language templates. + * @protected + */ + protected $l; + + /** + * Barcode to print on page footer (only if set). + * @protected + */ + protected $barcode = false; + + /** + * Boolean flag to print/hide page header. + * @protected + */ + protected $print_header = true; + + /** + * Boolean flag to print/hide page footer. + * @protected + */ + protected $print_footer = true; + + /** + * Header image logo. + * @protected + */ + protected $header_logo = ''; + + /** + * Width of header image logo in user units. + * @protected + */ + protected $header_logo_width = 30; + + /** + * Title to be printed on default page header. + * @protected + */ + protected $header_title = ''; + + /** + * String to print on page header after title. + * @protected + */ + protected $header_string = ''; + + /** + * Color for header text (RGB array). + * @since 5.9.174 (2012-07-25) + * @protected + * @var int[] + * @phpstan-var array{0: int, 1: int, 2: int} + */ + protected $header_text_color = array(0,0,0); + + /** + * Color for header line (RGB array). + * @since 5.9.174 (2012-07-25) + * @protected + * @var int[] + * @phpstan-var array{0: int, 1: int, 2: int} + */ + protected $header_line_color = array(0,0,0); + + /** + * Color for footer text (RGB array). + * @since 5.9.174 (2012-07-25) + * @protected + * @var int[] + * @phpstan-var array{0: int, 1: int, 2: int} + */ + protected $footer_text_color = array(0,0,0); + + /** + * Color for footer line (RGB array). + * @since 5.9.174 (2012-07-25) + * @protected + * @var int[] + * @phpstan-var array{0: int, 1: int, 2: int} + */ + protected $footer_line_color = array(0,0,0); + + /** + * Text shadow data array. + * @since 5.9.174 (2012-07-25) + * @protected + */ + protected $txtshadow = array('enabled'=>false, 'depth_w'=>0, 'depth_h'=>0, 'color'=>false, 'opacity'=>1, 'blend_mode'=>'Normal'); + + /** + * Default number of columns for html table. + * @protected + */ + protected $default_table_columns = 4; + + // variables for html parser + + /** + * HTML PARSER: array to store current link and rendering styles. + * @protected + */ + protected $HREF = array(); + + /** + * List of available fonts on filesystem. + * @protected + */ + protected $fontlist = array(); + + /** + * Current foreground color. + * @protected + */ + protected $fgcolor; + + /** + * HTML PARSER: array of boolean values, true in case of ordered list (OL), false otherwise. + * @protected + */ + protected $listordered = array(); + + /** + * HTML PARSER: array count list items on nested lists. + * @protected + */ + protected $listcount = array(); + + /** + * HTML PARSER: current list nesting level. + * @protected + */ + protected $listnum = 0; + + /** + * HTML PARSER: indent amount for lists. + * @protected + */ + protected $listindent = 0; + + /** + * HTML PARSER: current list indententation level. + * @protected + */ + protected $listindentlevel = 0; + + /** + * Current background color. + * @protected + */ + protected $bgcolor; + + /** + * Temporary font size in points. + * @protected + */ + protected $tempfontsize = 10; + + /** + * Spacer string for LI tags. + * @protected + */ + protected $lispacer = ''; + + /** + * Default encoding. + * @protected + * @since 1.53.0.TC010 + */ + protected $encoding = 'UTF-8'; + + /** + * Boolean flag to indicate if the document language is Right-To-Left. + * @protected + * @since 2.0.000 + */ + protected $rtl = false; + + /** + * Boolean flag used to force RTL or LTR string direction. + * @protected + * @since 2.0.000 + */ + protected $tmprtl = false; + + // --- Variables used for document encryption: + + /** + * IBoolean flag indicating whether document is protected. + * @protected + * @since 2.0.000 (2008-01-02) + */ + protected $encrypted; + + /** + * Array containing encryption settings. + * @protected + * @since 5.0.005 (2010-05-11) + */ + protected $encryptdata = array(); + + /** + * Last RC4 key encrypted (cached for optimisation). + * @protected + * @since 2.0.000 (2008-01-02) + */ + protected $last_enc_key; + + /** + * Last RC4 computed key. + * @protected + * @since 2.0.000 (2008-01-02) + */ + protected $last_enc_key_c; + + /** + * File ID (used on document trailer). + * @protected + * @since 5.0.005 (2010-05-12) + */ + protected $file_id; + + // --- bookmark --- + + /** + * Outlines for bookmark. + * @protected + * @since 2.1.002 (2008-02-12) + */ + protected $outlines = array(); + + /** + * Outline root for bookmark. + * @protected + * @since 2.1.002 (2008-02-12) + */ + protected $OutlineRoot; + + // --- javascript and form --- + + /** + * Javascript code. + * @protected + * @since 2.1.002 (2008-02-12) + */ + protected $javascript = ''; + + /** + * Javascript counter. + * @protected + * @since 2.1.002 (2008-02-12) + */ + protected $n_js; + + /** + * line through state + * @protected + * @since 2.8.000 (2008-03-19) + */ + protected $linethrough; + + /** + * Array with additional document-wide usage rights for the document. + * @protected + * @since 5.8.014 (2010-08-23) + */ + protected $ur = array(); + + /** + * DPI (Dot Per Inch) Document Resolution (do not change). + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $dpi = 72; + + /** + * Array of page numbers were a new page group was started (the page numbers are the keys of the array). + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $newpagegroup = array(); + + /** + * Array that contains the number of pages in each page group. + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $pagegroups = array(); + + /** + * Current page group number. + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $currpagegroup = 0; + + /** + * Array of transparency objects and parameters. + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $extgstates; + + /** + * Set the default JPEG compression quality (1-100). + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected $jpeg_quality; + + /** + * Default cell height ratio. + * @protected + * @since 3.0.014 (2008-05-23) + * @var float + */ + protected $cell_height_ratio = K_CELL_HEIGHT_RATIO; + + /** + * PDF viewer preferences. + * @protected + * @since 3.1.000 (2008-06-09) + */ + protected $viewer_preferences; + + /** + * A name object specifying how the document should be displayed when opened. + * @protected + * @since 3.1.000 (2008-06-09) + */ + protected $PageMode; + + /** + * Array for storing gradient information. + * @protected + * @since 3.1.000 (2008-06-09) + */ + protected $gradients = array(); + + /** + * Array used to store positions inside the pages buffer (keys are the page numbers). + * @protected + * @since 3.2.000 (2008-06-26) + */ + protected $intmrk = array(); + + /** + * Array used to store positions inside the pages buffer (keys are the page numbers). + * @protected + * @since 5.7.000 (2010-08-03) + */ + protected $bordermrk = array(); + + /** + * Array used to store page positions to track empty pages (keys are the page numbers). + * @protected + * @since 5.8.007 (2010-08-18) + */ + protected $emptypagemrk = array(); + + /** + * Array used to store content positions inside the pages buffer (keys are the page numbers). + * @protected + * @since 4.6.021 (2009-07-20) + */ + protected $cntmrk = array(); + + /** + * Array used to store footer positions of each page. + * @protected + * @since 3.2.000 (2008-07-01) + */ + protected $footerpos = array(); + + /** + * Array used to store footer length of each page. + * @protected + * @since 4.0.014 (2008-07-29) + */ + protected $footerlen = array(); + + /** + * Boolean flag to indicate if a new line is created. + * @protected + * @since 3.2.000 (2008-07-01) + */ + protected $newline = true; + + /** + * End position of the latest inserted line. + * @protected + * @since 3.2.000 (2008-07-01) + */ + protected $endlinex = 0; + + /** + * PDF string for width value of the last line. + * @protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleWidth = ''; + + /** + * PDF string for CAP value of the last line. + * @protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleCap = '0 J'; + + /** + * PDF string for join value of the last line. + * @protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleJoin = '0 j'; + + /** + * PDF string for dash value of the last line. + * @protected + * @since 4.0.006 (2008-07-16) + */ + protected $linestyleDash = '[] 0 d'; + + /** + * Boolean flag to indicate if marked-content sequence is open. + * @protected + * @since 4.0.013 (2008-07-28) + */ + protected $openMarkedContent = false; + + /** + * Count the latest inserted vertical spaces on HTML. + * @protected + * @since 4.0.021 (2008-08-24) + */ + protected $htmlvspace = 0; + + /** + * Array of Spot colors. + * @protected + * @since 4.0.024 (2008-09-12) + */ + protected $spot_colors = array(); + + /** + * Symbol used for HTML unordered list items. + * @protected + * @since 4.0.028 (2008-09-26) + */ + protected $lisymbol = ''; + + /** + * String used to mark the beginning and end of EPS image blocks. + * @protected + * @since 4.1.000 (2008-10-18) + */ + protected $epsmarker = 'x#!#EPS#!#x'; + + /** + * Array of transformation matrix. + * @protected + * @since 4.2.000 (2008-10-29) + */ + protected $transfmatrix = array(); + + /** + * Current key for transformation matrix. + * @protected + * @since 4.8.005 (2009-09-17) + */ + protected $transfmatrix_key = 0; + + /** + * Booklet mode for double-sided pages. + * @protected + * @since 4.2.000 (2008-10-29) + */ + protected $booklet = false; + + /** + * Epsilon value used for float calculations. + * @protected + * @since 4.2.000 (2008-10-29) + */ + protected $feps = 0.005; + + /** + * Array used for custom vertical spaces for HTML tags. + * @protected + * @since 4.2.001 (2008-10-30) + */ + protected $tagvspaces = array(); + + /** + * HTML PARSER: custom indent amount for lists. Negative value means disabled. + * @protected + * @since 4.2.007 (2008-11-12) + */ + protected $customlistindent = -1; + + /** + * Boolean flag to indicate if the border of the cell sides that cross the page should be removed. + * @protected + * @since 4.2.010 (2008-11-14) + */ + protected $opencell = true; + + /** + * Array of files to embedd. + * @protected + * @since 4.4.000 (2008-12-07) + */ + protected $embeddedfiles = array(); + + /** + * Boolean flag to indicate if we are inside a PRE tag. + * @protected + * @since 4.4.001 (2008-12-08) + */ + protected $premode = false; + + /** + * Array used to store positions of graphics transformation blocks inside the page buffer. + * keys are the page numbers + * @protected + * @since 4.4.002 (2008-12-09) + */ + protected $transfmrk = array(); + + /** + * Default color for html links. + * @protected + * @since 4.4.003 (2008-12-09) + */ + protected $htmlLinkColorArray = array(0, 0, 255); + + /** + * Default font style to add to html links. + * @protected + * @since 4.4.003 (2008-12-09) + */ + protected $htmlLinkFontStyle = 'U'; + + /** + * Counts the number of pages. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected $numpages = 0; + + /** + * Array containing page lengths in bytes. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected $pagelen = array(); + + /** + * Counts the number of pages. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected $numimages = 0; + + /** + * Store the image keys. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected $imagekeys = array(); + + /** + * Length of the buffer in bytes. + * @protected + * @since 4.5.000 (2008-12-31) + */ + protected $bufferlen = 0; + + /** + * Counts the number of fonts. + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected $numfonts = 0; + + /** + * Store the font keys. + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected $fontkeys = array(); + + /** + * Store the font object IDs. + * @protected + * @since 4.8.001 (2009-09-09) + */ + protected $font_obj_ids = array(); + + /** + * Store the fage status (true when opened, false when closed). + * @protected + * @since 4.5.000 (2009-01-02) + */ + protected $pageopen = array(); + + /** + * Default monospace font. + * @protected + * @since 4.5.025 (2009-03-10) + */ + protected $default_monospaced_font = 'courier'; + + /** + * Cloned copy of the current class object. + * @protected + * @since 4.5.029 (2009-03-19) + */ + protected $objcopy; + + /** + * Array used to store the lengths of cache files. + * @protected + * @since 4.5.029 (2009-03-19) + */ + protected $cache_file_length = array(); + + /** + * Table header content to be repeated on each new page. + * @protected + * @since 4.5.030 (2009-03-20) + */ + protected $thead = ''; + + /** + * Margins used for table header. + * @protected + * @since 4.5.030 (2009-03-20) + */ + protected $theadMargins = array(); + + /** + * Boolean flag to enable document digital signature. + * @protected + * @since 4.6.005 (2009-04-24) + */ + protected $sign = false; + + /** + * Digital signature data. + * @protected + * @since 4.6.005 (2009-04-24) + */ + protected $signature_data = array(); + + /** + * Digital signature max length. + * @protected + * @since 4.6.005 (2009-04-24) + */ + protected $signature_max_length = 11742; + + /** + * Data for digital signature appearance. + * @protected + * @since 5.3.011 (2010-06-16) + */ + protected $signature_appearance = array('page' => 1, 'rect' => '0 0 0 0'); + + /** + * Array of empty digital signature appearances. + * @protected + * @since 5.9.101 (2011-07-06) + */ + protected $empty_signature_appearance = array(); + + /** + * Boolean flag to enable document timestamping with TSA. + * @protected + * @since 6.0.085 (2014-06-19) + */ + protected $tsa_timestamp = false; + + /** + * Timestamping data. + * @protected + * @since 6.0.085 (2014-06-19) + */ + protected $tsa_data = array(); + + /** + * Regular expression used to find blank characters (required for word-wrapping). + * @protected + * @since 4.6.006 (2009-04-28) + */ + protected $re_spaces = '/[^\S\xa0]/'; + + /** + * Array of $re_spaces parts. + * @protected + * @since 5.5.011 (2010-07-09) + */ + protected $re_space = array('p' => '[^\S\xa0]', 'm' => ''); + + /** + * Digital signature object ID. + * @protected + * @since 4.6.022 (2009-06-23) + */ + protected $sig_obj_id = 0; + + /** + * ID of page objects. + * @protected + * @since 4.7.000 (2009-08-29) + */ + protected $page_obj_id = array(); + + /** + * List of form annotations IDs. + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_obj_id = array(); + + /** + * Deafult Javascript field properties. Possible values are described on official Javascript for Acrobat API reference. Annotation options can be directly specified using the 'aopt' entry. + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128)); + + /** + * Javascript objects array. + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $js_objects = array(); + + /** + * Current form action (used during XHTML rendering). + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_action = ''; + + /** + * Current form encryption type (used during XHTML rendering). + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_enctype = 'application/x-www-form-urlencoded'; + + /** + * Current method to submit forms. + * @protected + * @since 4.8.000 (2009-09-07) + */ + protected $form_mode = 'post'; + + /** + * List of fonts used on form fields (fontname => fontkey). + * @protected + * @since 4.8.001 (2009-09-09) + */ + protected $annotation_fonts = array(); + + /** + * List of radio buttons parent objects. + * @protected + * @since 4.8.001 (2009-09-09) + */ + protected $radiobutton_groups = array(); + + /** + * List of radio group objects IDs. + * @protected + * @since 4.8.001 (2009-09-09) + */ + protected $radio_groups = array(); + + /** + * Text indentation value (used for text-indent CSS attribute). + * @protected + * @since 4.8.006 (2009-09-23) + */ + protected $textindent = 0; + + /** + * Store page number when startTransaction() is called. + * @protected + * @since 4.8.006 (2009-09-23) + */ + protected $start_transaction_page = 0; + + /** + * Store Y position when startTransaction() is called. + * @protected + * @since 4.9.001 (2010-03-28) + */ + protected $start_transaction_y = 0; + + /** + * True when we are printing the thead section on a new page. + * @protected + * @since 4.8.027 (2010-01-25) + */ + protected $inthead = false; + + /** + * Array of column measures (width, space, starting Y position). + * @protected + * @since 4.9.001 (2010-03-28) + */ + protected $columns = array(); + + /** + * Number of colums. + * @protected + * @since 4.9.001 (2010-03-28) + */ + protected $num_columns = 1; + + /** + * Current column number. + * @protected + * @since 4.9.001 (2010-03-28) + */ + protected $current_column = 0; + + /** + * Starting page for columns. + * @protected + * @since 4.9.001 (2010-03-28) + */ + protected $column_start_page = 0; + + /** + * Maximum page and column selected. + * @protected + * @since 5.8.000 (2010-08-11) + */ + protected $maxselcol = array('page' => 0, 'column' => 0); + + /** + * Array of: X difference between table cell x start and starting page margin, cellspacing, cellpadding. + * @protected + * @since 5.8.000 (2010-08-11) + */ + protected $colxshift = array('x' => 0, 's' => array('H' => 0, 'V' => 0), 'p' => array('L' => 0, 'T' => 0, 'R' => 0, 'B' => 0)); + + /** + * Text rendering mode: 0 = Fill text; 1 = Stroke text; 2 = Fill, then stroke text; 3 = Neither fill nor stroke text (invisible); 4 = Fill text and add to path for clipping; 5 = Stroke text and add to path for clipping; 6 = Fill, then stroke text and add to path for clipping; 7 = Add text to path for clipping. + * @protected + * @since 4.9.008 (2010-04-03) + */ + protected $textrendermode = 0; + + /** + * Text stroke width in doc units. + * @protected + * @since 4.9.008 (2010-04-03) + */ + protected $textstrokewidth = 0; + + /** + * Current stroke color. + * @protected + * @since 4.9.008 (2010-04-03) + */ + protected $strokecolor; + + /** + * Default unit of measure for document. + * @protected + * @since 5.0.000 (2010-04-22) + */ + protected $pdfunit = 'mm'; + + /** + * Boolean flag true when we are on TOC (Table Of Content) page. + * @protected + */ + protected $tocpage = false; + + /** + * Boolean flag: if true convert vector images (SVG, EPS) to raster image using GD or ImageMagick library. + * @protected + * @since 5.0.000 (2010-04-26) + */ + protected $rasterize_vector_images = false; + + /** + * Boolean flag: if true enables font subsetting by default. + * @protected + * @since 5.3.002 (2010-06-07) + */ + protected $font_subsetting = true; + + /** + * Array of default graphic settings. + * @protected + * @since 5.5.008 (2010-07-02) + */ + protected $default_graphic_vars = array(); + + /** + * Array of XObjects. + * @protected + * @since 5.8.014 (2010-08-23) + */ + protected $xobjects = array(); + + /** + * Boolean value true when we are inside an XObject. + * @protected + * @since 5.8.017 (2010-08-24) + */ + protected $inxobj = false; + + /** + * Current XObject ID. + * @protected + * @since 5.8.017 (2010-08-24) + */ + protected $xobjid = ''; + + /** + * Percentage of character stretching. + * @protected + * @since 5.9.000 (2010-09-29) + */ + protected $font_stretching = 100; + + /** + * Increases or decreases the space between characters in a text by the specified amount (tracking). + * @protected + * @since 5.9.000 (2010-09-29) + */ + protected $font_spacing = 0; + + /** + * Array of no-write regions. + * ('page' => page number or empy for current page, 'xt' => X top, 'yt' => Y top, 'xb' => X bottom, 'yb' => Y bottom, 'side' => page side 'L' = left or 'R' = right) + * @protected + * @since 5.9.003 (2010-10-14) + */ + protected $page_regions = array(); + + /** + * Boolean value true when page region check is active. + * @protected + */ + protected $check_page_regions = true; + + /** + * Array of PDF layers data. + * @protected + * @since 5.9.102 (2011-07-13) + */ + protected $pdflayers = array(); + + /** + * A dictionary of names and corresponding destinations (Dests key on document Catalog). + * @protected + * @since 5.9.097 (2011-06-23) + */ + protected $dests = array(); + + /** + * Object ID for Named Destinations + * @protected + * @since 5.9.097 (2011-06-23) + */ + protected $n_dests; + + /** + * Embedded Files Names + * @protected + * @since 5.9.204 (2013-01-23) + */ + protected $efnames = array(); + + /** + * Directory used for the last SVG image. + * @protected + * @since 5.0.000 (2010-05-05) + */ + protected $svgdir = ''; + + /** + * Deafult unit of measure for SVG. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgunit = 'px'; + + /** + * Array of SVG gradients. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svggradients = array(); + + /** + * ID of last SVG gradient. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svggradientid = 0; + + /** + * Boolean value true when in SVG defs group. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgdefsmode = false; + + /** + * Array of SVG defs. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgdefs = array(); + + /** + * Boolean value true when in SVG clipPath tag. + * @protected + * @since 5.0.000 (2010-04-26) + */ + protected $svgclipmode = false; + + /** + * Array of SVG clipPath commands. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgclippaths = array(); + + /** + * Array of SVG clipPath tranformation matrix. + * @protected + * @since 5.8.022 (2010-08-31) + */ + protected $svgcliptm = array(); + + /** + * ID of last SVG clipPath. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgclipid = 0; + + /** + * SVG text. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgtext = ''; + + /** + * SVG text properties. + * @protected + * @since 5.8.013 (2010-08-23) + */ + protected $svgtextmode = array(); + + /** + * Array of SVG properties. + * @protected + * @since 5.0.000 (2010-05-02) + */ + protected $svgstyles = array(array( + 'alignment-baseline' => 'auto', + 'baseline-shift' => 'baseline', + 'clip' => 'auto', + 'clip-path' => 'none', + 'clip-rule' => 'nonzero', + 'color' => 'black', + 'color-interpolation' => 'sRGB', + 'color-interpolation-filters' => 'linearRGB', + 'color-profile' => 'auto', + 'color-rendering' => 'auto', + 'cursor' => 'auto', + 'direction' => 'ltr', + 'display' => 'inline', + 'dominant-baseline' => 'auto', + 'enable-background' => 'accumulate', + 'fill' => 'black', + 'fill-opacity' => 1, + 'fill-rule' => 'nonzero', + 'filter' => 'none', + 'flood-color' => 'black', + 'flood-opacity' => 1, + 'font' => '', + 'font-family' => 'helvetica', + 'font-size' => 'medium', + 'font-size-adjust' => 'none', + 'font-stretch' => 'normal', + 'font-style' => 'normal', + 'font-variant' => 'normal', + 'font-weight' => 'normal', + 'glyph-orientation-horizontal' => '0deg', + 'glyph-orientation-vertical' => 'auto', + 'image-rendering' => 'auto', + 'kerning' => 'auto', + 'letter-spacing' => 'normal', + 'lighting-color' => 'white', + 'marker' => '', + 'marker-end' => 'none', + 'marker-mid' => 'none', + 'marker-start' => 'none', + 'mask' => 'none', + 'opacity' => 1, + 'overflow' => 'auto', + 'pointer-events' => 'visiblePainted', + 'shape-rendering' => 'auto', + 'stop-color' => 'black', + 'stop-opacity' => 1, + 'stroke' => 'none', + 'stroke-dasharray' => 'none', + 'stroke-dashoffset' => 0, + 'stroke-linecap' => 'butt', + 'stroke-linejoin' => 'miter', + 'stroke-miterlimit' => 4, + 'stroke-opacity' => 1, + 'stroke-width' => 1, + 'text-anchor' => 'start', + 'text-decoration' => 'none', + 'text-rendering' => 'auto', + 'unicode-bidi' => 'normal', + 'visibility' => 'visible', + 'word-spacing' => 'normal', + 'writing-mode' => 'lr-tb', + 'text-color' => 'black', + 'transfmatrix' => array(1, 0, 0, 1, 0, 0) + )); + + /** + * If true force sRGB color profile for all document. + * @protected + * @since 5.9.121 (2011-09-28) + */ + protected $force_srgb = false; + + /** + * If true set the document to PDF/A mode. + * @protected + * @since 5.9.121 (2011-09-27) + */ + protected $pdfa_mode = false; + + /** + * version of PDF/A mode (1 - 3). + * @protected + * @since 6.2.26 (2019-03-12) + */ + protected $pdfa_version = 1; + + /** + * Document creation date-time + * @protected + * @since 5.9.152 (2012-03-22) + */ + protected $doc_creation_timestamp; + + /** + * Document modification date-time + * @protected + * @since 5.9.152 (2012-03-22) + */ + protected $doc_modification_timestamp; + + /** + * Custom XMP data. + * @protected + * @since 5.9.128 (2011-10-06) + */ + protected $custom_xmp = ''; + + /** + * Custom XMP RDF data. + * @protected + * @since 6.3.0 (2019-09-19) + */ + protected $custom_xmp_rdf = ''; + + /** + * Overprint mode array. + * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). + * @protected + * @since 5.9.152 (2012-03-23) + * @var array + */ + protected $overprint = array('OP' => false, 'op' => false, 'OPM' => 0); + + /** + * Alpha mode array. + * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). + * @protected + * @since 5.9.152 (2012-03-23) + */ + protected $alpha = array('CA' => 1, 'ca' => 1, 'BM' => '/Normal', 'AIS' => false); + + /** + * Define the page boundaries boxes to be set on document. + * @protected + * @since 5.9.152 (2012-03-23) + */ + protected $page_boxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'); + + /** + * If true print TCPDF meta link. + * @protected + * @since 5.9.152 (2012-03-23) + */ + protected $tcpdflink = true; + + /** + * Cache array for computed GD gamma values. + * @protected + * @since 5.9.1632 (2012-06-05) + */ + protected $gdgammacache = array(); + + /** + * Cache array for file content + * @protected + * @var array + * @since 6.3.5 (2020-09-28) + */ + protected $fileContentCache = array(); + + /** + * Whether to allow local file path in image html tags, when prefixed with file:// + * + * @var bool + * @protected + * @since 6.4 (2020-07-23) + */ + protected $allowLocalFiles = false; + + //------------------------------------------------------------ + // METHODS + //------------------------------------------------------------ + + /** + * This is the class constructor. + * It allows to set up the page format, the orientation and the measure unit used in all the methods (except for the font sizes). + * + * @param string $orientation page orientation. Possible values are (case insensitive):
        • P or Portrait (default)
        • L or Landscape
        • '' (empty string) for automatic orientation
        + * @param string $unit User measure unit. Possible values are:
        • pt: point
        • mm: millimeter (default)
        • cm: centimeter
        • in: inch

        A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. + * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). + * @param boolean $unicode TRUE means that the input text is unicode (default = true) + * @param string $encoding Charset encoding (used only when converting back html entities); default is UTF-8. + * @param boolean $diskcache DEPRECATED FEATURE + * @param false|integer $pdfa If not false, set the document to PDF/A mode and the good version (1 or 3). + * @public + * @see getPageSizeFromFormat(), setPageFormat() + */ + public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false, $pdfa=false) { + // set file ID for trailer + $serformat = (is_array($format) ? json_encode($format) : $format); + $this->file_id = md5(TCPDF_STATIC::getRandomSeed('TCPDF'.$orientation.$unit.$serformat.$encoding)); + $this->font_obj_ids = array(); + $this->page_obj_id = array(); + $this->form_obj_id = array(); + + // set pdf/a mode + if ($pdfa != false) { + $this->pdfa_mode = true; + $this->pdfa_version = $pdfa; // 1 or 3 + } else + $this->pdfa_mode = false; + + $this->force_srgb = false; + // set language direction + $this->rtl = false; + $this->tmprtl = false; + // some checks + $this->_dochecks(); + // initialization of properties + $this->isunicode = $unicode; + $this->page = 0; + $this->transfmrk[0] = array(); + $this->pagedim = array(); + $this->n = 2; + $this->buffer = ''; + $this->pages = array(); + $this->state = 0; + $this->fonts = array(); + $this->FontFiles = array(); + $this->diffs = array(); + $this->images = array(); + $this->links = array(); + $this->gradients = array(); + $this->InFooter = false; + $this->lasth = 0; + $this->FontFamily = defined('PDF_FONT_NAME_MAIN')?PDF_FONT_NAME_MAIN:'helvetica'; + $this->FontStyle = ''; + $this->FontSizePt = 12; + $this->underline = false; + $this->overline = false; + $this->linethrough = false; + $this->DrawColor = '0 G'; + $this->FillColor = '0 g'; + $this->TextColor = '0 g'; + $this->ColorFlag = false; + $this->pdflayers = array(); + // encryption values + $this->encrypted = false; + $this->last_enc_key = ''; + // standard Unicode fonts + $this->CoreFonts = array( + 'courier'=>'Courier', + 'courierB'=>'Courier-Bold', + 'courierI'=>'Courier-Oblique', + 'courierBI'=>'Courier-BoldOblique', + 'helvetica'=>'Helvetica', + 'helveticaB'=>'Helvetica-Bold', + 'helveticaI'=>'Helvetica-Oblique', + 'helveticaBI'=>'Helvetica-BoldOblique', + 'times'=>'Times-Roman', + 'timesB'=>'Times-Bold', + 'timesI'=>'Times-Italic', + 'timesBI'=>'Times-BoldItalic', + 'symbol'=>'Symbol', + 'zapfdingbats'=>'ZapfDingbats' + ); + // set scale factor + $this->setPageUnit($unit); + // set page format and orientation + $this->setPageFormat($format, $orientation); + // page margins (1 cm) + $margin = 28.35 / $this->k; + $this->setMargins($margin, $margin); + $this->clMargin = $this->lMargin; + $this->crMargin = $this->rMargin; + // internal cell padding + $cpadding = $margin / 10; + $this->setCellPaddings($cpadding, 0, $cpadding, 0); + // cell margins + $this->setCellMargins(0, 0, 0, 0); + // line width (0.2 mm) + $this->LineWidth = 0.57 / $this->k; + $this->linestyleWidth = sprintf('%F w', ($this->LineWidth * $this->k)); + $this->linestyleCap = '0 J'; + $this->linestyleJoin = '0 j'; + $this->linestyleDash = '[] 0 d'; + // automatic page break + $this->setAutoPageBreak(true, (2 * $margin)); + // full width display mode + $this->setDisplayMode('fullwidth'); + // compression + $this->setCompression(); + // set default PDF version number + $this->setPDFVersion(); + $this->tcpdflink = true; + $this->encoding = $encoding; + $this->HREF = array(); + $this->getFontsList(); + $this->fgcolor = array('R' => 0, 'G' => 0, 'B' => 0); + $this->strokecolor = array('R' => 0, 'G' => 0, 'B' => 0); + $this->bgcolor = array('R' => 255, 'G' => 255, 'B' => 255); + $this->extgstates = array(); + $this->setTextShadow(); + // signature + $this->sign = false; + $this->tsa_timestamp = false; + $this->tsa_data = array(); + $this->signature_appearance = array('page' => 1, 'rect' => '0 0 0 0', 'name' => 'Signature'); + $this->empty_signature_appearance = array(); + // user's rights + $this->ur['enabled'] = false; + $this->ur['document'] = '/FullSave'; + $this->ur['annots'] = '/Create/Delete/Modify/Copy/Import/Export'; + $this->ur['form'] = '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate'; + $this->ur['signature'] = '/Modify'; + $this->ur['ef'] = '/Create/Delete/Modify/Import'; + $this->ur['formex'] = ''; + // set default JPEG quality + $this->jpeg_quality = 75; + // initialize some settings + TCPDF_FONTS::utf8Bidi(array(), '', false, $this->isunicode, $this->CurrentFont); + // set default font + $this->setFont($this->FontFamily, $this->FontStyle, $this->FontSizePt); + $this->setHeaderFont(array($this->FontFamily, $this->FontStyle, $this->FontSizePt)); + $this->setFooterFont(array($this->FontFamily, $this->FontStyle, $this->FontSizePt)); + // check if PCRE Unicode support is enabled + if ($this->isunicode AND (@preg_match('/\pL/u', 'a') == 1)) { + // PCRE unicode support is turned ON + // \s : any whitespace character + // \p{Z} : any separator + // \p{Lo} : Unicode letter or ideograph that does not have lowercase and uppercase variants. Is used to chunk chinese words. + // \xa0 : Unicode Character 'NO-BREAK SPACE' (U+00A0) + //$this->setSpacesRE('/(?!\xa0)[\s\p{Z}\p{Lo}]/u'); + $this->setSpacesRE('/(?!\xa0)[\s\p{Z}]/u'); + } else { + // PCRE unicode support is turned OFF + $this->setSpacesRE('/[^\S\xa0]/'); + } + $this->default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128)); + // set document creation and modification timestamp + $this->doc_creation_timestamp = time(); + $this->doc_modification_timestamp = $this->doc_creation_timestamp; + // get default graphic vars + $this->default_graphic_vars = $this->getGraphicVars(); + $this->header_xobj_autoreset = false; + $this->custom_xmp = ''; + $this->custom_xmp_rdf = ''; + // Call cleanup method after script execution finishes or exit() is called. + // NOTE: This will not be executed if the process is killed with a SIGTERM or SIGKILL signal. + register_shutdown_function(array($this, '_destroy'), true); + } + + /** + * Default destructor. + * @public + * @since 1.53.0.TC016 + */ + public function __destruct() { + // cleanup + $this->_destroy(true); + } + + /** + * Set the units of measure for the document. + * @param string $unit User measure unit. Possible values are:
        • pt: point
        • mm: millimeter (default)
        • cm: centimeter
        • in: inch

        A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. + * @public + * @since 3.0.015 (2008-06-06) + */ + public function setPageUnit($unit) { + $unit = strtolower($unit); + //Set scale factor + switch ($unit) { + // points + case 'px': + case 'pt': { + $this->k = 1; + break; + } + // millimeters + case 'mm': { + $this->k = $this->dpi / 25.4; + break; + } + // centimeters + case 'cm': { + $this->k = $this->dpi / 2.54; + break; + } + // inches + case 'in': { + $this->k = $this->dpi; + break; + } + // unsupported unit + default : { + $this->Error('Incorrect unit: '.$unit); + break; + } + } + $this->pdfunit = $unit; + if (isset($this->CurOrientation)) { + $this->setPageOrientation($this->CurOrientation); + } + } + + /** + * Change the format of the current page + * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() documentation or an array of two numbers (width, height) or an array containing the following measures and options:
          + *
        • ['format'] = page format name (one of the above);
        • + *
        • ['Rotate'] : The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
        • + *
        • ['PZ'] : The page's preferred zoom (magnification) factor.
        • + *
        • ['MediaBox'] : the boundaries of the physical medium on which the page shall be displayed or printed:
        • + *
        • ['MediaBox']['llx'] : lower-left x coordinate
        • + *
        • ['MediaBox']['lly'] : lower-left y coordinate
        • + *
        • ['MediaBox']['urx'] : upper-right x coordinate
        • + *
        • ['MediaBox']['ury'] : upper-right y coordinate
        • + *
        • ['CropBox'] : the visible region of default user space:
        • + *
        • ['CropBox']['llx'] : lower-left x coordinate
        • + *
        • ['CropBox']['lly'] : lower-left y coordinate
        • + *
        • ['CropBox']['urx'] : upper-right x coordinate
        • + *
        • ['CropBox']['ury'] : upper-right y coordinate
        • + *
        • ['BleedBox'] : the region to which the contents of the page shall be clipped when output in a production environment:
        • + *
        • ['BleedBox']['llx'] : lower-left x coordinate
        • + *
        • ['BleedBox']['lly'] : lower-left y coordinate
        • + *
        • ['BleedBox']['urx'] : upper-right x coordinate
        • + *
        • ['BleedBox']['ury'] : upper-right y coordinate
        • + *
        • ['TrimBox'] : the intended dimensions of the finished page after trimming:
        • + *
        • ['TrimBox']['llx'] : lower-left x coordinate
        • + *
        • ['TrimBox']['lly'] : lower-left y coordinate
        • + *
        • ['TrimBox']['urx'] : upper-right x coordinate
        • + *
        • ['TrimBox']['ury'] : upper-right y coordinate
        • + *
        • ['ArtBox'] : the extent of the page's meaningful content:
        • + *
        • ['ArtBox']['llx'] : lower-left x coordinate
        • + *
        • ['ArtBox']['lly'] : lower-left y coordinate
        • + *
        • ['ArtBox']['urx'] : upper-right x coordinate
        • + *
        • ['ArtBox']['ury'] : upper-right y coordinate
        • + *
        • ['BoxColorInfo'] :specify the colours and other visual characteristics that should be used in displaying guidelines on the screen for each of the possible page boundaries other than the MediaBox:
        • + *
        • ['BoxColorInfo'][BOXTYPE]['C'] : an array of three numbers in the range 0-255, representing the components in the DeviceRGB colour space.
        • + *
        • ['BoxColorInfo'][BOXTYPE]['W'] : the guideline width in default user units
        • + *
        • ['BoxColorInfo'][BOXTYPE]['S'] : the guideline style: S = Solid; D = Dashed
        • + *
        • ['BoxColorInfo'][BOXTYPE]['D'] : dash array defining a pattern of dashes and gaps to be used in drawing dashed guidelines
        • + *
        • ['trans'] : the style and duration of the visual transition to use when moving from another page to the given page during a presentation
        • + *
        • ['trans']['Dur'] : The page's display duration (also called its advance timing): the maximum length of time, in seconds, that the page shall be displayed during presentations before the viewer application shall automatically advance to the next page.
        • + *
        • ['trans']['S'] : transition style : Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade
        • + *
        • ['trans']['D'] : The duration of the transition effect, in seconds.
        • + *
        • ['trans']['Dm'] : (Split and Blinds transition styles only) The dimension in which the specified transition effect shall occur: H = Horizontal, V = Vertical. Default value: H.
        • + *
        • ['trans']['M'] : (Split, Box and Fly transition styles only) The direction of motion for the specified transition effect: I = Inward from the edges of the page, O = Outward from the center of the pageDefault value: I.
        • + *
        • ['trans']['Di'] : (Wipe, Glitter, Fly, Cover, Uncover and Push transition styles only) The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting from a left-to-right direction. If the value is a number, it shall be one of: 0 = Left to right, 90 = Bottom to top (Wipe only), 180 = Right to left (Wipe only), 270 = Top to bottom, 315 = Top-left to bottom-right (Glitter only). If the value is a name, it shall be None, which is relevant only for the Fly transition when the value of SS is not 1.0. Default value: 0.
        • + *
        • ['trans']['SS'] : (Fly transition style only) The starting or ending scale at which the changes shall be drawn. If M specifies an inward transition, the scale of the changes drawn shall progress from SS to 1.0 over the course of the transition. If M specifies an outward transition, the scale of the changes drawn shall progress from 1.0 to SS over the course of the transition. Default: 1.0.
        • + *
        • ['trans']['B'] : (Fly transition style only) If true, the area that shall be flown in is rectangular and opaque. Default: false.
        • + *
        + * @param string $orientation page orientation. Possible values are (case insensitive):
          + *
        • P or Portrait (default)
        • + *
        • L or Landscape
        • + *
        • '' (empty string) for automatic orientation
        • + *
        + * @protected + * @since 3.0.015 (2008-06-06) + * @see getPageSizeFromFormat() + */ + protected function setPageFormat($format, $orientation='P') { + if (!empty($format) AND isset($this->pagedim[$this->page])) { + // remove inherited values + unset($this->pagedim[$this->page]); + } + if (is_string($format)) { + // get page measures from format name + $pf = TCPDF_STATIC::getPageSizeFromFormat($format); + $this->fwPt = $pf[0]; + $this->fhPt = $pf[1]; + } else { + // the boundaries of the physical medium on which the page shall be displayed or printed + if (isset($format['MediaBox'])) { + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'MediaBox', $format['MediaBox']['llx'], $format['MediaBox']['lly'], $format['MediaBox']['urx'], $format['MediaBox']['ury'], false, $this->k, $this->pagedim); + $this->fwPt = (($format['MediaBox']['urx'] - $format['MediaBox']['llx']) * $this->k); + $this->fhPt = (($format['MediaBox']['ury'] - $format['MediaBox']['lly']) * $this->k); + } else { + if (isset($format[0]) AND is_numeric($format[0]) AND isset($format[1]) AND is_numeric($format[1])) { + $pf = array(($format[0] * $this->k), ($format[1] * $this->k)); + } else { + if (!isset($format['format'])) { + // default value + $format['format'] = 'A4'; + } + $pf = TCPDF_STATIC::getPageSizeFromFormat($format['format']); + } + $this->fwPt = $pf[0]; + $this->fhPt = $pf[1]; + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'MediaBox', 0, 0, $this->fwPt, $this->fhPt, true, $this->k, $this->pagedim); + } + // the visible region of default user space + if (isset($format['CropBox'])) { + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'CropBox', $format['CropBox']['llx'], $format['CropBox']['lly'], $format['CropBox']['urx'], $format['CropBox']['ury'], false, $this->k, $this->pagedim); + } + // the region to which the contents of the page shall be clipped when output in a production environment + if (isset($format['BleedBox'])) { + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'BleedBox', $format['BleedBox']['llx'], $format['BleedBox']['lly'], $format['BleedBox']['urx'], $format['BleedBox']['ury'], false, $this->k, $this->pagedim); + } + // the intended dimensions of the finished page after trimming + if (isset($format['TrimBox'])) { + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'TrimBox', $format['TrimBox']['llx'], $format['TrimBox']['lly'], $format['TrimBox']['urx'], $format['TrimBox']['ury'], false, $this->k, $this->pagedim); + } + // the page's meaningful content (including potential white space) + if (isset($format['ArtBox'])) { + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'ArtBox', $format['ArtBox']['llx'], $format['ArtBox']['lly'], $format['ArtBox']['urx'], $format['ArtBox']['ury'], false, $this->k, $this->pagedim); + } + // specify the colours and other visual characteristics that should be used in displaying guidelines on the screen for the various page boundaries + if (isset($format['BoxColorInfo'])) { + $this->pagedim[$this->page]['BoxColorInfo'] = $format['BoxColorInfo']; + } + if (isset($format['Rotate']) AND (($format['Rotate'] % 90) == 0)) { + // The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90. + $this->pagedim[$this->page]['Rotate'] = intval($format['Rotate']); + } + if (isset($format['PZ'])) { + // The page's preferred zoom (magnification) factor + $this->pagedim[$this->page]['PZ'] = floatval($format['PZ']); + } + if (isset($format['trans'])) { + // The style and duration of the visual transition to use when moving from another page to the given page during a presentation + if (isset($format['trans']['Dur'])) { + // The page's display duration + $this->pagedim[$this->page]['trans']['Dur'] = floatval($format['trans']['Dur']); + } + $stansition_styles = array('Split', 'Blinds', 'Box', 'Wipe', 'Dissolve', 'Glitter', 'R', 'Fly', 'Push', 'Cover', 'Uncover', 'Fade'); + if (isset($format['trans']['S']) AND in_array($format['trans']['S'], $stansition_styles)) { + // The transition style that shall be used when moving to this page from another during a presentation + $this->pagedim[$this->page]['trans']['S'] = $format['trans']['S']; + $valid_effect = array('Split', 'Blinds'); + $valid_vals = array('H', 'V'); + if (isset($format['trans']['Dm']) AND in_array($format['trans']['S'], $valid_effect) AND in_array($format['trans']['Dm'], $valid_vals)) { + $this->pagedim[$this->page]['trans']['Dm'] = $format['trans']['Dm']; + } + $valid_effect = array('Split', 'Box', 'Fly'); + $valid_vals = array('I', 'O'); + if (isset($format['trans']['M']) AND in_array($format['trans']['S'], $valid_effect) AND in_array($format['trans']['M'], $valid_vals)) { + $this->pagedim[$this->page]['trans']['M'] = $format['trans']['M']; + } + $valid_effect = array('Wipe', 'Glitter', 'Fly', 'Cover', 'Uncover', 'Push'); + if (isset($format['trans']['Di']) AND in_array($format['trans']['S'], $valid_effect)) { + if (((($format['trans']['Di'] == 90) OR ($format['trans']['Di'] == 180)) AND ($format['trans']['S'] == 'Wipe')) + OR (($format['trans']['Di'] == 315) AND ($format['trans']['S'] == 'Glitter')) + OR (($format['trans']['Di'] == 0) OR ($format['trans']['Di'] == 270))) { + $this->pagedim[$this->page]['trans']['Di'] = intval($format['trans']['Di']); + } + } + if (isset($format['trans']['SS']) AND ($format['trans']['S'] == 'Fly')) { + $this->pagedim[$this->page]['trans']['SS'] = floatval($format['trans']['SS']); + } + if (isset($format['trans']['B']) AND ($format['trans']['B'] === true) AND ($format['trans']['S'] == 'Fly')) { + $this->pagedim[$this->page]['trans']['B'] = 'true'; + } + } else { + $this->pagedim[$this->page]['trans']['S'] = 'R'; + } + if (isset($format['trans']['D'])) { + // The duration of the transition effect, in seconds + $this->pagedim[$this->page]['trans']['D'] = floatval($format['trans']['D']); + } else { + $this->pagedim[$this->page]['trans']['D'] = 1; + } + } + } + $this->setPageOrientation($orientation); + } + + /** + * Set page orientation. + * @param string $orientation page orientation. Possible values are (case insensitive):
        • P or Portrait (default)
        • L or Landscape
        • '' (empty string) for automatic orientation
        + * @param boolean|null $autopagebreak Boolean indicating if auto-page-break mode should be on or off. + * @param float|null $bottommargin bottom margin of the page. + * @public + * @since 3.0.015 (2008-06-06) + */ + public function setPageOrientation($orientation, $autopagebreak=null, $bottommargin=null) { + if (!isset($this->pagedim[$this->page]['MediaBox'])) { + // the boundaries of the physical medium on which the page shall be displayed or printed + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'MediaBox', 0, 0, $this->fwPt, $this->fhPt, true, $this->k, $this->pagedim); + } + if (!isset($this->pagedim[$this->page]['CropBox'])) { + // the visible region of default user space + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'CropBox', $this->pagedim[$this->page]['MediaBox']['llx'], $this->pagedim[$this->page]['MediaBox']['lly'], $this->pagedim[$this->page]['MediaBox']['urx'], $this->pagedim[$this->page]['MediaBox']['ury'], true, $this->k, $this->pagedim); + } + if (!isset($this->pagedim[$this->page]['BleedBox'])) { + // the region to which the contents of the page shall be clipped when output in a production environment + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'BleedBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true, $this->k, $this->pagedim); + } + if (!isset($this->pagedim[$this->page]['TrimBox'])) { + // the intended dimensions of the finished page after trimming + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'TrimBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true, $this->k, $this->pagedim); + } + if (!isset($this->pagedim[$this->page]['ArtBox'])) { + // the page's meaningful content (including potential white space) + $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'ArtBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true, $this->k, $this->pagedim); + } + if (!isset($this->pagedim[$this->page]['Rotate'])) { + // The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90. + $this->pagedim[$this->page]['Rotate'] = 0; + } + if (!isset($this->pagedim[$this->page]['PZ'])) { + // The page's preferred zoom (magnification) factor + $this->pagedim[$this->page]['PZ'] = 1; + } + if ($this->fwPt > $this->fhPt) { + // landscape + $default_orientation = 'L'; + } else { + // portrait + $default_orientation = 'P'; + } + $valid_orientations = array('P', 'L'); + if (empty($orientation)) { + $orientation = $default_orientation; + } else { + $orientation = strtoupper($orientation[0]); + } + if (in_array($orientation, $valid_orientations) AND ($orientation != $default_orientation)) { + $this->CurOrientation = $orientation; + $this->wPt = $this->fhPt; + $this->hPt = $this->fwPt; + } else { + $this->CurOrientation = $default_orientation; + $this->wPt = $this->fwPt; + $this->hPt = $this->fhPt; + } + if ((abs($this->pagedim[$this->page]['MediaBox']['urx'] - $this->hPt) < $this->feps) AND (abs($this->pagedim[$this->page]['MediaBox']['ury'] - $this->wPt) < $this->feps)){ + // swap X and Y coordinates (change page orientation) + $this->pagedim = TCPDF_STATIC::swapPageBoxCoordinates($this->page, $this->pagedim); + } + $this->w = ($this->wPt / $this->k); + $this->h = ($this->hPt / $this->k); + if (TCPDF_STATIC::empty_string($autopagebreak)) { + if (isset($this->AutoPageBreak)) { + $autopagebreak = $this->AutoPageBreak; + } else { + $autopagebreak = true; + } + } + if (TCPDF_STATIC::empty_string($bottommargin)) { + if (isset($this->bMargin)) { + $bottommargin = $this->bMargin; + } else { + // default value = 2 cm + $bottommargin = 2 * 28.35 / $this->k; + } + } + $this->setAutoPageBreak($autopagebreak, $bottommargin); + // store page dimensions + $this->pagedim[$this->page]['w'] = $this->wPt; + $this->pagedim[$this->page]['h'] = $this->hPt; + $this->pagedim[$this->page]['wk'] = $this->w; + $this->pagedim[$this->page]['hk'] = $this->h; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + $this->pagedim[$this->page]['bm'] = $bottommargin; + $this->pagedim[$this->page]['lm'] = $this->lMargin; + $this->pagedim[$this->page]['rm'] = $this->rMargin; + $this->pagedim[$this->page]['pb'] = $autopagebreak; + $this->pagedim[$this->page]['or'] = $this->CurOrientation; + $this->pagedim[$this->page]['olm'] = $this->original_lMargin; + $this->pagedim[$this->page]['orm'] = $this->original_rMargin; + } + + /** + * Set regular expression to detect withespaces or word separators. + * The pattern delimiter must be the forward-slash character "/". + * Some example patterns are: + *
        +	 * Non-Unicode or missing PCRE unicode support: "/[^\S\xa0]/"
        +	 * Unicode and PCRE unicode support: "/(?!\xa0)[\s\p{Z}]/u"
        +	 * Unicode and PCRE unicode support in Chinese mode: "/(?!\xa0)[\s\p{Z}\p{Lo}]/u"
        +	 * if PCRE unicode support is turned ON ("\P" is the negate class of "\p"):
        +	 *      \s     : any whitespace character
        +	 *      \p{Z}  : any separator
        +	 *      \p{Lo} : Unicode letter or ideograph that does not have lowercase and uppercase variants. Is used to chunk chinese words.
        +	 *      \xa0   : Unicode Character 'NO-BREAK SPACE' (U+00A0)
        +	 * 
        + * @param string $re regular expression (leave empty for default). + * @public + * @since 4.6.016 (2009-06-15) + */ + public function setSpacesRE($re='/[^\S\xa0]/') { + $this->re_spaces = $re; + $re_parts = explode('/', $re); + // get pattern parts + $this->re_space = array(); + if (isset($re_parts[1]) AND !empty($re_parts[1])) { + $this->re_space['p'] = $re_parts[1]; + } else { + $this->re_space['p'] = '[\s]'; + } + // set pattern modifiers + if (isset($re_parts[2]) AND !empty($re_parts[2])) { + $this->re_space['m'] = $re_parts[2]; + } else { + $this->re_space['m'] = ''; + } + } + + /** + * Enable or disable Right-To-Left language mode + * @param boolean $enable if true enable Right-To-Left language mode. + * @param boolean $resetx if true reset the X position on direction change. + * @public + * @since 2.0.000 (2008-01-03) + */ + public function setRTL($enable, $resetx=true) { + $enable = $enable ? true : false; + $resetx = ($resetx AND ($enable != $this->rtl)); + $this->rtl = $enable; + $this->tmprtl = false; + if ($resetx) { + $this->Ln(0); + } + } + + /** + * Return the RTL status + * @return bool + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getRTL() { + return $this->rtl; + } + + /** + * Force temporary RTL language direction + * @param false|string $mode can be false, 'L' for LTR or 'R' for RTL + * @public + * @since 2.1.000 (2008-01-09) + */ + public function setTempRTL($mode) { + $newmode = false; + switch (strtoupper($mode)) { + case 'LTR': + case 'L': { + if ($this->rtl) { + $newmode = 'L'; + } + break; + } + case 'RTL': + case 'R': { + if (!$this->rtl) { + $newmode = 'R'; + } + break; + } + case false: + default: { + $newmode = false; + break; + } + } + $this->tmprtl = $newmode; + } + + /** + * Return the current temporary RTL status + * @return bool + * @public + * @since 4.8.014 (2009-11-04) + */ + public function isRTLTextDir() { + return ($this->rtl OR ($this->tmprtl == 'R')); + } + + /** + * Set the last cell height. + * @param float $h cell height. + * @author Nicola Asuni + * @public + * @since 1.53.0.TC034 + */ + public function setLastH($h) { + $this->lasth = $h; + } + + /** + * Return the cell height + * @param int $fontsize Font size in internal units + * @param boolean $padding If true add cell padding + * @public + * @return float + */ + public function getCellHeight($fontsize, $padding=TRUE) { + $height = ($fontsize * $this->cell_height_ratio); + if ($padding) { + $height += ($this->cell_padding['T'] + $this->cell_padding['B']); + } + return round($height, 6); + } + + /** + * Reset the last cell height. + * @public + * @since 5.9.000 (2010-10-03) + */ + public function resetLastH() { + $this->lasth = $this->getCellHeight($this->FontSize); + } + + /** + * Get the last cell height. + * @return float last cell height + * @public + * @since 4.0.017 (2008-08-05) + */ + public function getLastH() { + return $this->lasth; + } + + /** + * Set the adjusting factor to convert pixels to user units. + * @param float $scale adjusting factor to convert pixels to user units. + * @author Nicola Asuni + * @public + * @since 1.5.2 + */ + public function setImageScale($scale) { + $this->imgscale = $scale; + } + + /** + * Returns the adjusting factor to convert pixels to user units. + * @return float adjusting factor to convert pixels to user units. + * @author Nicola Asuni + * @public + * @since 1.5.2 + */ + public function getImageScale() { + return $this->imgscale; + } + + /** + * Returns an array of page dimensions: + *
        • $this->pagedim[$this->page]['w'] = page width in points
        • $this->pagedim[$this->page]['h'] = height in points
        • $this->pagedim[$this->page]['wk'] = page width in user units
        • $this->pagedim[$this->page]['hk'] = page height in user units
        • $this->pagedim[$this->page]['tm'] = top margin
        • $this->pagedim[$this->page]['bm'] = bottom margin
        • $this->pagedim[$this->page]['lm'] = left margin
        • $this->pagedim[$this->page]['rm'] = right margin
        • $this->pagedim[$this->page]['pb'] = auto page break
        • $this->pagedim[$this->page]['or'] = page orientation
        • $this->pagedim[$this->page]['olm'] = original left margin
        • $this->pagedim[$this->page]['orm'] = original right margin
        • $this->pagedim[$this->page]['Rotate'] = The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
        • $this->pagedim[$this->page]['PZ'] = The page's preferred zoom (magnification) factor.
        • $this->pagedim[$this->page]['trans'] : the style and duration of the visual transition to use when moving from another page to the given page during a presentation
          • $this->pagedim[$this->page]['trans']['Dur'] = The page's display duration (also called its advance timing): the maximum length of time, in seconds, that the page shall be displayed during presentations before the viewer application shall automatically advance to the next page.
          • $this->pagedim[$this->page]['trans']['S'] = transition style : Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade
          • $this->pagedim[$this->page]['trans']['D'] = The duration of the transition effect, in seconds.
          • $this->pagedim[$this->page]['trans']['Dm'] = (Split and Blinds transition styles only) The dimension in which the specified transition effect shall occur: H = Horizontal, V = Vertical. Default value: H.
          • $this->pagedim[$this->page]['trans']['M'] = (Split, Box and Fly transition styles only) The direction of motion for the specified transition effect: I = Inward from the edges of the page, O = Outward from the center of the pageDefault value: I.
          • $this->pagedim[$this->page]['trans']['Di'] = (Wipe, Glitter, Fly, Cover, Uncover and Push transition styles only) The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting from a left-to-right direction. If the value is a number, it shall be one of: 0 = Left to right, 90 = Bottom to top (Wipe only), 180 = Right to left (Wipe only), 270 = Top to bottom, 315 = Top-left to bottom-right (Glitter only). If the value is a name, it shall be None, which is relevant only for the Fly transition when the value of SS is not 1.0. Default value: 0.
          • $this->pagedim[$this->page]['trans']['SS'] = (Fly transition style only) The starting or ending scale at which the changes shall be drawn. If M specifies an inward transition, the scale of the changes drawn shall progress from SS to 1.0 over the course of the transition. If M specifies an outward transition, the scale of the changes drawn shall progress from 1.0 to SS over the course of the transition. Default: 1.0.
          • $this->pagedim[$this->page]['trans']['B'] = (Fly transition style only) If true, the area that shall be flown in is rectangular and opaque. Default: false.
        • $this->pagedim[$this->page]['MediaBox'] : the boundaries of the physical medium on which the page shall be displayed or printed
          • $this->pagedim[$this->page]['MediaBox']['llx'] = lower-left x coordinate in points
          • $this->pagedim[$this->page]['MediaBox']['lly'] = lower-left y coordinate in points
          • $this->pagedim[$this->page]['MediaBox']['urx'] = upper-right x coordinate in points
          • $this->pagedim[$this->page]['MediaBox']['ury'] = upper-right y coordinate in points
        • $this->pagedim[$this->page]['CropBox'] : the visible region of default user space
          • $this->pagedim[$this->page]['CropBox']['llx'] = lower-left x coordinate in points
          • $this->pagedim[$this->page]['CropBox']['lly'] = lower-left y coordinate in points
          • $this->pagedim[$this->page]['CropBox']['urx'] = upper-right x coordinate in points
          • $this->pagedim[$this->page]['CropBox']['ury'] = upper-right y coordinate in points
        • $this->pagedim[$this->page]['BleedBox'] : the region to which the contents of the page shall be clipped when output in a production environment
          • $this->pagedim[$this->page]['BleedBox']['llx'] = lower-left x coordinate in points
          • $this->pagedim[$this->page]['BleedBox']['lly'] = lower-left y coordinate in points
          • $this->pagedim[$this->page]['BleedBox']['urx'] = upper-right x coordinate in points
          • $this->pagedim[$this->page]['BleedBox']['ury'] = upper-right y coordinate in points
        • $this->pagedim[$this->page]['TrimBox'] : the intended dimensions of the finished page after trimming
          • $this->pagedim[$this->page]['TrimBox']['llx'] = lower-left x coordinate in points
          • $this->pagedim[$this->page]['TrimBox']['lly'] = lower-left y coordinate in points
          • $this->pagedim[$this->page]['TrimBox']['urx'] = upper-right x coordinate in points
          • $this->pagedim[$this->page]['TrimBox']['ury'] = upper-right y coordinate in points
        • $this->pagedim[$this->page]['ArtBox'] : the extent of the page's meaningful content
          • $this->pagedim[$this->page]['ArtBox']['llx'] = lower-left x coordinate in points
          • $this->pagedim[$this->page]['ArtBox']['lly'] = lower-left y coordinate in points
          • $this->pagedim[$this->page]['ArtBox']['urx'] = upper-right x coordinate in points
          • $this->pagedim[$this->page]['ArtBox']['ury'] = upper-right y coordinate in points
        + * @param int|null $pagenum page number (empty = current page) + * @return array of page dimensions. + * @author Nicola Asuni + * @public + * @since 4.5.027 (2009-03-16) + */ + public function getPageDimensions($pagenum=null) { + if (empty($pagenum)) { + $pagenum = $this->page; + } + return $this->pagedim[$pagenum]; + } + + /** + * Returns the page width in units. + * @param int|null $pagenum page number (empty = current page) + * @return int page width. + * @author Nicola Asuni + * @public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getPageWidth($pagenum=null) { + if (empty($pagenum)) { + return $this->w; + } + return $this->pagedim[$pagenum]['w']; + } + + /** + * Returns the page height in units. + * @param int|null $pagenum page number (empty = current page) + * @return int page height. + * @author Nicola Asuni + * @public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getPageHeight($pagenum=null) { + if (empty($pagenum)) { + return $this->h; + } + return $this->pagedim[$pagenum]['h']; + } + + /** + * Returns the page break margin. + * @param int|null $pagenum page number (empty = current page) + * @return int page break margin. + * @author Nicola Asuni + * @public + * @since 1.5.2 + * @see getPageDimensions() + */ + public function getBreakMargin($pagenum=null) { + if (empty($pagenum)) { + return $this->bMargin; + } + return $this->pagedim[$pagenum]['bm']; + } + + /** + * Returns the scale factor (number of points in user unit). + * @return int scale factor. + * @author Nicola Asuni + * @public + * @since 1.5.2 + */ + public function getScaleFactor() { + return $this->k; + } + + /** + * Defines the left, top and right margins. + * @param float $left Left margin. + * @param float $top Top margin. + * @param float $right Right margin. Default value is the left one. + * @param boolean $keepmargins if true overwrites the default page margins + * @public + * @since 1.0 + * @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak() + */ + public function setMargins($left, $top, $right=null, $keepmargins=false) { + //Set left, top and right margins + $this->lMargin = $left; + $this->tMargin = $top; + if ($right == -1 OR $right === null) { + $right = $left; + } + $this->rMargin = $right; + if ($keepmargins) { + // overwrite original values + $this->original_lMargin = $this->lMargin; + $this->original_rMargin = $this->rMargin; + } + } + + /** + * Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin. + * @param float $margin The margin. + * @public + * @since 1.4 + * @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() + */ + public function setLeftMargin($margin) { + //Set left margin + $this->lMargin = $margin; + if (($this->page > 0) AND ($this->x < $margin)) { + $this->x = $margin; + } + } + + /** + * Defines the top margin. The method can be called before creating the first page. + * @param float $margin The margin. + * @public + * @since 1.5 + * @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() + */ + public function setTopMargin($margin) { + //Set top margin + $this->tMargin = $margin; + if (($this->page > 0) AND ($this->y < $margin)) { + $this->y = $margin; + } + } + + /** + * Defines the right margin. The method can be called before creating the first page. + * @param float $margin The margin. + * @public + * @since 1.5 + * @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins() + */ + public function setRightMargin($margin) { + $this->rMargin = $margin; + if (($this->page > 0) AND ($this->x > ($this->w - $margin))) { + $this->x = $this->w - $margin; + } + } + + /** + * Set the same internal Cell padding for top, right, bottom, left- + * @param float $pad internal padding. + * @public + * @since 2.1.000 (2008-01-09) + * @see getCellPaddings(), setCellPaddings() + */ + public function setCellPadding($pad) { + if ($pad >= 0) { + $this->cell_padding['L'] = $pad; + $this->cell_padding['T'] = $pad; + $this->cell_padding['R'] = $pad; + $this->cell_padding['B'] = $pad; + } + } + + /** + * Set the internal Cell paddings. + * @param float|null $left left padding + * @param float|null $top top padding + * @param float|null $right right padding + * @param float|null $bottom bottom padding + * @public + * @since 5.9.000 (2010-10-03) + * @see getCellPaddings(), SetCellPadding() + */ + public function setCellPaddings($left=null, $top=null, $right=null, $bottom=null) { + if (!TCPDF_STATIC::empty_string($left) AND ($left >= 0)) { + $this->cell_padding['L'] = $left; + } + if (!TCPDF_STATIC::empty_string($top) AND ($top >= 0)) { + $this->cell_padding['T'] = $top; + } + if (!TCPDF_STATIC::empty_string($right) AND ($right >= 0)) { + $this->cell_padding['R'] = $right; + } + if (!TCPDF_STATIC::empty_string($bottom) AND ($bottom >= 0)) { + $this->cell_padding['B'] = $bottom; + } + } + + /** + * Get the internal Cell padding array. + * @return array of padding values + * @public + * @since 5.9.000 (2010-10-03) + * @see setCellPaddings(), SetCellPadding() + */ + public function getCellPaddings() { + return $this->cell_padding; + } + + /** + * Set the internal Cell margins. + * @param float|null $left left margin + * @param float|null $top top margin + * @param float|null $right right margin + * @param float|null $bottom bottom margin + * @public + * @since 5.9.000 (2010-10-03) + * @see getCellMargins() + */ + public function setCellMargins($left=null, $top=null, $right=null, $bottom=null) { + if (!TCPDF_STATIC::empty_string($left) AND ($left >= 0)) { + $this->cell_margin['L'] = $left; + } + if (!TCPDF_STATIC::empty_string($top) AND ($top >= 0)) { + $this->cell_margin['T'] = $top; + } + if (!TCPDF_STATIC::empty_string($right) AND ($right >= 0)) { + $this->cell_margin['R'] = $right; + } + if (!TCPDF_STATIC::empty_string($bottom) AND ($bottom >= 0)) { + $this->cell_margin['B'] = $bottom; + } + } + + /** + * Get the internal Cell margin array. + * @return array of margin values + * @public + * @since 5.9.000 (2010-10-03) + * @see setCellMargins() + */ + public function getCellMargins() { + return $this->cell_margin; + } + + /** + * Adjust the internal Cell padding array to take account of the line width. + * @param string|array|int $brd Indicates if borders must be drawn around the cell. The value can be a number:
        • 0: no border (default)
        • 1: frame
        or a string containing some or all of the following characters (in any order):
        • L: left
        • T: top
        • R: right
        • B: bottom
        or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @return void|array array of adjustments + * @public + * @since 5.9.000 (2010-10-03) + */ + protected function adjustCellPadding($brd=0) { + if (empty($brd)) { + return; + } + if (is_string($brd)) { + // convert string to array + $slen = strlen($brd); + $newbrd = array(); + for ($i = 0; $i < $slen; ++$i) { + $newbrd[$brd[$i]] = true; + } + $brd = $newbrd; + } elseif ( + ($brd === 1) + || ($brd === true) + || (is_numeric($brd) && ((int)$brd > 0)) + ) { + $brd = array('LRTB' => true); + } + if (!is_array($brd)) { + return; + } + // store current cell padding + $cp = $this->cell_padding; + // select border mode + if (isset($brd['mode'])) { + $mode = $brd['mode']; + unset($brd['mode']); + } else { + $mode = 'normal'; + } + // process borders + foreach ($brd as $border => $style) { + $line_width = $this->LineWidth; + if (is_array($style) && isset($style['width'])) { + // get border width + $line_width = $style['width']; + } + $adj = 0; // line width inside the cell + switch ($mode) { + case 'ext': { + $adj = 0; + break; + } + case 'int': { + $adj = $line_width; + break; + } + case 'normal': + default: { + $adj = ($line_width / 2); + break; + } + } + // correct internal cell padding if required to avoid overlap between text and lines + if ( + is_numeric($this->cell_padding['T']) + && ($this->cell_padding['T'] < $adj) + && (strpos($border, 'T') !== false) + ) { + $this->cell_padding['T'] = $adj; + } + if ( + is_numeric($this->cell_padding['R']) + && ($this->cell_padding['R'] < $adj) + && (strpos($border, 'R') !== false) + ) { + $this->cell_padding['R'] = $adj; + } + if ( + is_numeric($this->cell_padding['B']) + && ($this->cell_padding['B'] < $adj) + && (strpos($border, 'B') !== false) + ) { + $this->cell_padding['B'] = $adj; + } + if ( + is_numeric($this->cell_padding['L']) + && ($this->cell_padding['L'] < $adj) + && (strpos($border, 'L') !== false) + ) { + $this->cell_padding['L'] = $adj; + } + + } + + return array( + 'T' => ($this->cell_padding['T'] - $cp['T']), + 'R' => ($this->cell_padding['R'] - $cp['R']), + 'B' => ($this->cell_padding['B'] - $cp['B']), + 'L' => ($this->cell_padding['L'] - $cp['L']), + ); + } + + /** + * Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm. + * @param boolean $auto Boolean indicating if mode should be on or off. + * @param float $margin Distance from the bottom of the page. + * @public + * @since 1.0 + * @see Cell(), MultiCell(), AcceptPageBreak() + */ + public function setAutoPageBreak($auto, $margin=0) { + $this->AutoPageBreak = $auto ? true : false; + $this->bMargin = $margin; + $this->PageBreakTrigger = $this->h - $margin; + } + + /** + * Return the auto-page-break mode (true or false). + * @return bool auto-page-break mode + * @public + * @since 5.9.088 + */ + public function getAutoPageBreak() { + return $this->AutoPageBreak; + } + + /** + * Defines the way the document is to be displayed by the viewer. + * @param mixed $zoom The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use.
        • fullpage: displays the entire page on screen
        • fullwidth: uses maximum width of window
        • real: uses real size (equivalent to 100% zoom)
        • default: uses viewer default mode
        + * @param string $layout The page layout. Possible values are:
        • SinglePage Display one page at a time
        • OneColumn Display the pages in one column
        • TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left
        • TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right
        • TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left
        • TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right
        + * @param string $mode A name object specifying how the document should be displayed when opened:
        • UseNone Neither document outline nor thumbnail images visible
        • UseOutlines Document outline visible
        • UseThumbs Thumbnail images visible
        • FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible
        • UseOC (PDF 1.5) Optional content group panel visible
        • UseAttachments (PDF 1.6) Attachments panel visible
        + * @public + * @since 1.2 + */ + public function setDisplayMode($zoom, $layout='SinglePage', $mode='UseNone') { + if (($zoom == 'fullpage') OR ($zoom == 'fullwidth') OR ($zoom == 'real') OR ($zoom == 'default') OR (!is_string($zoom))) { + $this->ZoomMode = $zoom; + } else { + $this->Error('Incorrect zoom display mode: '.$zoom); + } + $this->LayoutMode = TCPDF_STATIC::getPageLayoutMode($layout); + $this->PageMode = TCPDF_STATIC::getPageMode($mode); + } + + /** + * Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default. + * Note: the Zlib extension is required for this feature. If not present, compression will be turned off. + * @param boolean $compress Boolean indicating if compression must be enabled. + * @public + * @since 1.4 + */ + public function setCompression($compress=true) { + $this->compress = false; + if (function_exists('gzcompress')) { + if ($compress) { + if ( !$this->pdfa_mode) { + $this->compress = true; + } + } + } + } + + /** + * Set flag to force sRGB_IEC61966-2.1 black scaled ICC color profile for the whole document. + * @param boolean $mode If true force sRGB output intent. + * @public + * @since 5.9.121 (2011-09-28) + */ + public function setSRGBmode($mode=false) { + $this->force_srgb = $mode ? true : false; + } + + /** + * Turn on/off Unicode mode for document information dictionary (meta tags). + * This has effect only when unicode mode is set to false. + * @param boolean $unicode if true set the meta information in Unicode + * @since 5.9.027 (2010-12-01) + * @public + */ + public function setDocInfoUnicode($unicode=true) { + $this->docinfounicode = $unicode ? true : false; + } + + /** + * Defines the title of the document. + * @param string $title The title. + * @public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject() + */ + public function setTitle($title) { + $this->title = $title; + } + + /** + * Defines the subject of the document. + * @param string $subject The subject. + * @public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle() + */ + public function setSubject($subject) { + $this->subject = $subject; + } + + /** + * Defines the author of the document. + * @param string $author The name of the author. + * @public + * @since 1.2 + * @see SetCreator(), SetKeywords(), SetSubject(), SetTitle() + */ + public function setAuthor($author) { + $this->author = $author; + } + + /** + * Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'. + * @param string $keywords The list of keywords. + * @public + * @since 1.2 + * @see SetAuthor(), SetCreator(), SetSubject(), SetTitle() + */ + public function setKeywords($keywords) { + $this->keywords = $keywords; + } + + /** + * Defines the creator of the document. This is typically the name of the application that generates the PDF. + * @param string $creator The name of the creator. + * @public + * @since 1.2 + * @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle() + */ + public function setCreator($creator) { + $this->creator = $creator; + } + + /** + * Whether to allow local file path in image html tags, when prefixed with file:// + * + * @param bool $allowLocalFiles true, when local files should be allowed. Otherwise false. + * @public + * @since 6.4 + */ + public function setAllowLocalFiles($allowLocalFiles) { + $this->allowLocalFiles = (bool) $allowLocalFiles; + } + + + /** + * Throw an exception or print an error message and die if the K_TCPDF_PARSER_THROW_EXCEPTION_ERROR constant is set to true. + * @param string $msg The error message + * @public + * @since 1.0 + */ + public function Error($msg) { + // unset all class variables + $this->_destroy(true); + if (defined('K_TCPDF_THROW_EXCEPTION_ERROR') AND !K_TCPDF_THROW_EXCEPTION_ERROR) { + die('TCPDF ERROR: '.$msg); + } else { + throw new Exception('TCPDF ERROR: '.$msg); + } + } + + /** + * This method begins the generation of the PDF document. + * It is not necessary to call it explicitly because AddPage() does it automatically. + * Note: no page is created by this method + * @public + * @since 1.0 + * @see AddPage(), Close() + */ + public function Open() { + $this->state = 1; + } + + /** + * Terminates the PDF document. + * It is not necessary to call this method explicitly because Output() does it automatically. + * If the document contains no page, AddPage() is called to prevent from getting an invalid document. + * @public + * @since 1.0 + * @see Open(), Output() + */ + public function Close() { + if ($this->state == 3) { + return; + } + if ($this->page == 0) { + $this->AddPage(); + } + $this->endLayer(); + if ($this->tcpdflink) { + // save current graphic settings + $gvars = $this->getGraphicVars(); + $this->setEqualColumns(); + $this->lastpage(true); + $this->setAutoPageBreak(false); + $this->x = 0; + $this->y = $this->h - (1 / $this->k); + $this->lMargin = 0; + $this->_outSaveGraphicsState(); + $font = defined('PDF_FONT_NAME_MAIN')?PDF_FONT_NAME_MAIN:'helvetica'; + $this->setFont($font, '', 1); + $this->setTextRenderingMode(0, false, false); + $msg = "\x50\x6f\x77\x65\x72\x65\x64\x20\x62\x79\x20\x54\x43\x50\x44\x46\x20\x28\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67\x29"; + $lnk = "\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67"; + $this->Cell(0, 0, $msg, 0, 0, 'L', 0, $lnk, 0, false, 'D', 'B'); + $this->_outRestoreGraphicsState(); + // restore graphic settings + $this->setGraphicVars($gvars); + } + // close page + $this->endPage(); + // close document + $this->_enddoc(); + // unset all class variables (except critical ones) + $this->_destroy(false); + } + + /** + * Move pointer at the specified document page and update page dimensions. + * @param int $pnum page number (1 ... numpages) + * @param boolean $resetmargins if true reset left, right, top margins and Y position. + * @public + * @since 2.1.000 (2008-01-07) + * @see getPage(), lastpage(), getNumPages() + */ + public function setPage($pnum, $resetmargins=false) { + if (($pnum == $this->page) AND ($this->state == 2)) { + return; + } + if (($pnum > 0) AND ($pnum <= $this->numpages)) { + $this->state = 2; + // save current graphic settings + //$gvars = $this->getGraphicVars(); + $oldpage = $this->page; + $this->page = $pnum; + $this->wPt = $this->pagedim[$this->page]['w']; + $this->hPt = $this->pagedim[$this->page]['h']; + $this->w = $this->pagedim[$this->page]['wk']; + $this->h = $this->pagedim[$this->page]['hk']; + $this->tMargin = $this->pagedim[$this->page]['tm']; + $this->bMargin = $this->pagedim[$this->page]['bm']; + $this->original_lMargin = $this->pagedim[$this->page]['olm']; + $this->original_rMargin = $this->pagedim[$this->page]['orm']; + $this->AutoPageBreak = $this->pagedim[$this->page]['pb']; + $this->CurOrientation = $this->pagedim[$this->page]['or']; + $this->setAutoPageBreak($this->AutoPageBreak, $this->bMargin); + // restore graphic settings + //$this->setGraphicVars($gvars); + if ($resetmargins) { + $this->lMargin = $this->pagedim[$this->page]['olm']; + $this->rMargin = $this->pagedim[$this->page]['orm']; + $this->setY($this->tMargin); + } else { + // account for booklet mode + if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) { + $deltam = $this->pagedim[$this->page]['olm'] - $this->pagedim[$this->page]['orm']; + $this->lMargin += $deltam; + $this->rMargin -= $deltam; + } + } + } else { + $this->Error('Wrong page number on setPage() function: '.$pnum); + } + } + + /** + * Reset pointer to the last document page. + * @param boolean $resetmargins if true reset left, right, top margins and Y position. + * @public + * @since 2.0.000 (2008-01-04) + * @see setPage(), getPage(), getNumPages() + */ + public function lastPage($resetmargins=false) { + $this->setPage($this->getNumPages(), $resetmargins); + } + + /** + * Get current document page number. + * @return int page number + * @public + * @since 2.1.000 (2008-01-07) + * @see setPage(), lastpage(), getNumPages() + */ + public function getPage() { + return $this->page; + } + + /** + * Get the total number of insered pages. + * @return int number of pages + * @public + * @since 2.1.000 (2008-01-07) + * @see setPage(), getPage(), lastpage() + */ + public function getNumPages() { + return $this->numpages; + } + + /** + * Adds a new TOC (Table Of Content) page to the document. + * @param string $orientation page orientation. + * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). + * @param boolean $keepmargins if true overwrites the default page margins with the current margins + * @public + * @since 5.0.001 (2010-05-06) + * @see AddPage(), startPage(), endPage(), endTOCPage() + */ + public function addTOCPage($orientation='', $format='', $keepmargins=false) { + $this->AddPage($orientation, $format, $keepmargins, true); + } + + /** + * Terminate the current TOC (Table Of Content) page + * @public + * @since 5.0.001 (2010-05-06) + * @see AddPage(), startPage(), endPage(), addTOCPage() + */ + public function endTOCPage() { + $this->endPage(true); + } + + /** + * Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer (if enabled). Then the page is added, the current position set to the top-left corner according to the left and top margins (or top-right if in RTL mode), and Header() is called to display the header (if enabled). + * The origin of the coordinate system is at the top-left corner (or top-right for RTL) and increasing ordinates go downwards. + * @param string $orientation page orientation. Possible values are (case insensitive):
        • P or PORTRAIT (default)
        • L or LANDSCAPE
        + * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). + * @param boolean $keepmargins if true overwrites the default page margins with the current margins + * @param boolean $tocpage if true set the tocpage state to true (the added page will be used to display Table Of Content). + * @public + * @since 1.0 + * @see startPage(), endPage(), addTOCPage(), endTOCPage(), getPageSizeFromFormat(), setPageFormat() + */ + public function AddPage($orientation='', $format='', $keepmargins=false, $tocpage=false) { + if ($this->inxobj) { + // we are inside an XObject template + return; + } + if (!isset($this->original_lMargin) OR $keepmargins) { + $this->original_lMargin = $this->lMargin; + } + if (!isset($this->original_rMargin) OR $keepmargins) { + $this->original_rMargin = $this->rMargin; + } + // terminate previous page + $this->endPage(); + // start new page + $this->startPage($orientation, $format, $tocpage); + } + + /** + * Terminate the current page + * @param boolean $tocpage if true set the tocpage state to false (end the page used to display Table Of Content). + * @public + * @since 4.2.010 (2008-11-14) + * @see AddPage(), startPage(), addTOCPage(), endTOCPage() + */ + public function endPage($tocpage=false) { + // check if page is already closed + if (($this->page == 0) OR ($this->numpages > $this->page) OR (!$this->pageopen[$this->page])) { + return; + } + // print page footer + $this->setFooter(); + // close page + $this->_endpage(); + // mark page as closed + $this->pageopen[$this->page] = false; + if ($tocpage) { + $this->tocpage = false; + } + } + + /** + * Starts a new page to the document. The page must be closed using the endPage() function. + * The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards. + * @param string $orientation page orientation. Possible values are (case insensitive):
        • P or PORTRAIT (default)
        • L or LANDSCAPE
        + * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). + * @param boolean $tocpage if true the page is designated to contain the Table-Of-Content. + * @since 4.2.010 (2008-11-14) + * @see AddPage(), endPage(), addTOCPage(), endTOCPage(), getPageSizeFromFormat(), setPageFormat() + * @public + */ + public function startPage($orientation='', $format='', $tocpage=false) { + if ($tocpage) { + $this->tocpage = true; + } + // move page numbers of documents to be attached + if ($this->tocpage) { + // move reference to unexistent pages (used for page attachments) + // adjust outlines + $tmpoutlines = $this->outlines; + foreach ($tmpoutlines as $key => $outline) { + if (!$outline['f'] AND ($outline['p'] > $this->numpages)) { + $this->outlines[$key]['p'] = ($outline['p'] + 1); + } + } + // adjust dests + $tmpdests = $this->dests; + foreach ($tmpdests as $key => $dest) { + if (!$dest['f'] AND ($dest['p'] > $this->numpages)) { + $this->dests[$key]['p'] = ($dest['p'] + 1); + } + } + // adjust links + $tmplinks = $this->links; + foreach ($tmplinks as $key => $link) { + if (!$link['f'] AND ($link['p'] > $this->numpages)) { + $this->links[$key]['p'] = ($link['p'] + 1); + } + } + } + if ($this->numpages > $this->page) { + // this page has been already added + $this->setPage($this->page + 1); + $this->setY($this->tMargin); + return; + } + // start a new page + if ($this->state == 0) { + $this->Open(); + } + ++$this->numpages; + $this->swapMargins($this->booklet); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // start new page + $this->_beginpage($orientation, $format); + // mark page as open + $this->pageopen[$this->page] = true; + // restore graphic settings + $this->setGraphicVars($gvars); + // mark this point + $this->setPageMark(); + // print page header + $this->setHeader(); + // restore graphic settings + $this->setGraphicVars($gvars); + // mark this point + $this->setPageMark(); + // print table header (if any) + $this->setTableHeader(); + // set mark for empty page check + $this->emptypagemrk[$this->page]= $this->pagelen[$this->page]; + } + + /** + * Set start-writing mark on current page stream used to put borders and fills. + * Borders and fills are always created after content and inserted on the position marked by this method. + * This function must be called after calling Image() function for a background image. + * Background images must be always inserted before calling Multicell() or WriteHTMLCell() or WriteHTML() functions. + * @public + * @since 4.0.016 (2008-07-30) + */ + public function setPageMark() { + $this->intmrk[$this->page] = $this->pagelen[$this->page]; + $this->bordermrk[$this->page] = $this->intmrk[$this->page]; + $this->setContentMark(); + } + + /** + * Set start-writing mark on selected page. + * Borders and fills are always created after content and inserted on the position marked by this method. + * @param int $page page number (default is the current page) + * @protected + * @since 4.6.021 (2009-07-20) + */ + protected function setContentMark($page=0) { + if ($page <= 0) { + $page = $this->page; + } + if (isset($this->footerlen[$page])) { + $this->cntmrk[$page] = $this->pagelen[$page] - $this->footerlen[$page]; + } else { + $this->cntmrk[$page] = $this->pagelen[$page]; + } + } + + /** + * Set header data. + * @param string $ln header image logo + * @param int $lw header image logo width in mm + * @param string $ht string to print as title on document header + * @param string $hs string to print on document header + * @param int[] $tc RGB array color for text. + * @param int[] $lc RGB array color for line. + * @public + */ + public function setHeaderData($ln='', $lw=0, $ht='', $hs='', $tc=array(0,0,0), $lc=array(0,0,0)) { + $this->header_logo = $ln; + $this->header_logo_width = $lw; + $this->header_title = $ht; + $this->header_string = $hs; + $this->header_text_color = $tc; + $this->header_line_color = $lc; + } + + /** + * Set footer data. + * @param int[] $tc RGB array color for text. + * @param int[] $lc RGB array color for line. + * @public + */ + public function setFooterData($tc=array(0,0,0), $lc=array(0,0,0)) { + $this->footer_text_color = $tc; + $this->footer_line_color = $lc; + } + + /** + * Returns header data: + *
        • $ret['logo'] = logo image
        • $ret['logo_width'] = width of the image logo in user units
        • $ret['title'] = header title
        • $ret['string'] = header description string
        + * @return array + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getHeaderData() { + $ret = array(); + $ret['logo'] = $this->header_logo; + $ret['logo_width'] = $this->header_logo_width; + $ret['title'] = $this->header_title; + $ret['string'] = $this->header_string; + $ret['text_color'] = $this->header_text_color; + $ret['line_color'] = $this->header_line_color; + return $ret; + } + + /** + * Set header margin. + * (minimum distance between header and top page margin) + * @param int $hm distance in user units + * @public + */ + public function setHeaderMargin($hm=10) { + $this->header_margin = $hm; + } + + /** + * Returns header margin in user units. + * @return float + * @since 4.0.012 (2008-07-24) + * @public + */ + public function getHeaderMargin() { + return $this->header_margin; + } + + /** + * Set footer margin. + * (minimum distance between footer and bottom page margin) + * @param int $fm distance in user units + * @public + */ + public function setFooterMargin($fm=10) { + $this->footer_margin = $fm; + } + + /** + * Returns footer margin in user units. + * @return float + * @since 4.0.012 (2008-07-24) + * @public + */ + public function getFooterMargin() { + return $this->footer_margin; + } + /** + * Set a flag to print page header. + * @param boolean $val set to true to print the page header (default), false otherwise. + * @public + */ + public function setPrintHeader($val=true) { + $this->print_header = $val ? true : false; + } + + /** + * Set a flag to print page footer. + * @param boolean $val set to true to print the page footer (default), false otherwise. + * @public + */ + public function setPrintFooter($val=true) { + $this->print_footer = $val ? true : false; + } + + /** + * Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image + * @return float + * @public + */ + public function getImageRBX() { + return $this->img_rb_x; + } + + /** + * Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image + * @return float + * @public + */ + public function getImageRBY() { + return $this->img_rb_y; + } + + /** + * Reset the xobject template used by Header() method. + * @public + */ + public function resetHeaderTemplate() { + $this->header_xobjid = false; + } + + /** + * Set a flag to automatically reset the xobject template used by Header() method at each page. + * @param boolean $val set to true to reset Header xobject template at each page, false otherwise. + * @public + */ + public function setHeaderTemplateAutoreset($val=true) { + $this->header_xobj_autoreset = $val ? true : false; + } + + /** + * This method is used to render the page header. + * It is automatically called by AddPage() and could be overwritten in your own inherited class. + * @public + */ + public function Header() { + if ($this->header_xobjid === false) { + // start a new XObject Template + $this->header_xobjid = $this->startTemplate($this->w, $this->tMargin); + $headerfont = $this->getHeaderFont(); + $headerdata = $this->getHeaderData(); + $this->y = $this->header_margin; + if ($this->rtl) { + $this->x = $this->w - $this->original_rMargin; + } else { + $this->x = $this->original_lMargin; + } + if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) { + $imgtype = TCPDF_IMAGES::getImageFileType(K_PATH_IMAGES.$headerdata['logo']); + if (($imgtype == 'eps') OR ($imgtype == 'ai')) { + $this->ImageEps(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); + } elseif ($imgtype == 'svg') { + $this->ImageSVG(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); + } else { + $this->Image(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); + } + $imgy = $this->getImageRBY(); + } else { + $imgy = $this->y; + } + $cell_height = $this->getCellHeight($headerfont[2] / $this->k); + // set starting margin for text data cell + if ($this->getRTL()) { + $header_x = $this->original_rMargin + ($headerdata['logo_width'] * 1.1); + } else { + $header_x = $this->original_lMargin + ($headerdata['logo_width'] * 1.1); + } + $cw = $this->w - $this->original_lMargin - $this->original_rMargin - ($headerdata['logo_width'] * 1.1); + $this->setTextColorArray($this->header_text_color); + // header title + $this->setFont($headerfont[0], 'B', $headerfont[2] + 1); + $this->setX($header_x); + $this->Cell($cw, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0); + // header string + $this->setFont($headerfont[0], $headerfont[1], $headerfont[2]); + $this->setX($header_x); + $this->MultiCell($cw, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false, true, 0, 'T', false); + // print an ending header line + $this->setLineStyle(array('width' => 0.85 / $this->k, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $headerdata['line_color'])); + $this->setY((2.835 / $this->k) + max($imgy, $this->y)); + if ($this->rtl) { + $this->setX($this->original_rMargin); + } else { + $this->setX($this->original_lMargin); + } + $this->Cell(($this->w - $this->original_lMargin - $this->original_rMargin), 0, '', 'T', 0, 'C'); + $this->endTemplate(); + } + // print header template + $x = 0; + $dx = 0; + if (!$this->header_xobj_autoreset AND $this->booklet AND (($this->page % 2) == 0)) { + // adjust margins for booklet mode + $dx = ($this->original_lMargin - $this->original_rMargin); + } + if ($this->rtl) { + $x = $this->w + $dx; + } else { + $x = 0 + $dx; + } + $this->printTemplate($this->header_xobjid, $x, 0, 0, 0, '', '', false); + if ($this->header_xobj_autoreset) { + // reset header xobject template at each page + $this->header_xobjid = false; + } + } + + /** + * This method is used to render the page footer. + * It is automatically called by AddPage() and could be overwritten in your own inherited class. + * @public + */ + public function Footer() { + $cur_y = $this->y; + $this->setTextColorArray($this->footer_text_color); + //set style for cell border + $line_width = (0.85 / $this->k); + $this->setLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $this->footer_line_color)); + //print document barcode + $barcode = $this->getBarcode(); + if (!empty($barcode)) { + $this->Ln($line_width); + $barcode_width = round(($this->w - $this->original_lMargin - $this->original_rMargin) / 3); + $style = array( + 'position' => $this->rtl?'R':'L', + 'align' => $this->rtl?'R':'L', + 'stretch' => false, + 'fitwidth' => true, + 'cellfitalign' => '', + 'border' => false, + 'padding' => 0, + 'fgcolor' => array(0,0,0), + 'bgcolor' => false, + 'text' => false + ); + $this->write1DBarcode($barcode, 'C128', '', $cur_y + $line_width, '', (($this->footer_margin / 3) - $line_width), 0.3, $style, ''); + } + $w_page = isset($this->l['w_page']) ? $this->l['w_page'].' ' : ''; + if (empty($this->pagegroups)) { + $pagenumtxt = $w_page.$this->getAliasNumPage().' / '.$this->getAliasNbPages(); + } else { + $pagenumtxt = $w_page.$this->getPageNumGroupAlias().' / '.$this->getPageGroupAlias(); + } + $this->setY($cur_y); + //Print page number + if ($this->getRTL()) { + $this->setX($this->original_rMargin); + $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L'); + } else { + $this->setX($this->original_lMargin); + $this->Cell(0, 0, $this->getAliasRightShift().$pagenumtxt, 'T', 0, 'R'); + } + } + + /** + * This method is used to render the page header. + * @protected + * @since 4.0.012 (2008-07-24) + */ + protected function setHeader() { + if (!$this->print_header OR ($this->state != 2)) { + return; + } + $this->InHeader = true; + $this->setGraphicVars($this->default_graphic_vars); + $temp_thead = $this->thead; + $temp_theadMargins = $this->theadMargins; + $lasth = $this->lasth; + $newline = $this->newline; + $this->_outSaveGraphicsState(); + $this->rMargin = $this->original_rMargin; + $this->lMargin = $this->original_lMargin; + $this->setCellPadding(0); + //set current position + if ($this->rtl) { + $this->setXY($this->original_rMargin, $this->header_margin); + } else { + $this->setXY($this->original_lMargin, $this->header_margin); + } + $this->setFont($this->header_font[0], $this->header_font[1], $this->header_font[2]); + $this->Header(); + //restore position + if ($this->rtl) { + $this->setXY($this->original_rMargin, $this->tMargin); + } else { + $this->setXY($this->original_lMargin, $this->tMargin); + } + $this->_outRestoreGraphicsState(); + $this->lasth = $lasth; + $this->thead = $temp_thead; + $this->theadMargins = $temp_theadMargins; + $this->newline = $newline; + $this->InHeader = false; + } + + /** + * This method is used to render the page footer. + * @protected + * @since 4.0.012 (2008-07-24) + */ + protected function setFooter() { + if ($this->state != 2) { + return; + } + $this->InFooter = true; + // save current graphic settings + $gvars = $this->getGraphicVars(); + // mark this point + $this->footerpos[$this->page] = $this->pagelen[$this->page]; + $this->_out("\n"); + if ($this->print_footer) { + $this->setGraphicVars($this->default_graphic_vars); + $this->current_column = 0; + $this->num_columns = 1; + $temp_thead = $this->thead; + $temp_theadMargins = $this->theadMargins; + $lasth = $this->lasth; + $this->_outSaveGraphicsState(); + $this->rMargin = $this->original_rMargin; + $this->lMargin = $this->original_lMargin; + $this->setCellPadding(0); + //set current position + $footer_y = $this->h - $this->footer_margin; + if ($this->rtl) { + $this->setXY($this->original_rMargin, $footer_y); + } else { + $this->setXY($this->original_lMargin, $footer_y); + } + $this->setFont($this->footer_font[0], $this->footer_font[1], $this->footer_font[2]); + $this->Footer(); + //restore position + if ($this->rtl) { + $this->setXY($this->original_rMargin, $this->tMargin); + } else { + $this->setXY($this->original_lMargin, $this->tMargin); + } + $this->_outRestoreGraphicsState(); + $this->lasth = $lasth; + $this->thead = $temp_thead; + $this->theadMargins = $temp_theadMargins; + } + // restore graphic settings + $this->setGraphicVars($gvars); + $this->current_column = $gvars['current_column']; + $this->num_columns = $gvars['num_columns']; + // calculate footer length + $this->footerlen[$this->page] = $this->pagelen[$this->page] - $this->footerpos[$this->page] + 1; + $this->InFooter = false; + } + + /** + * Check if we are on the page body (excluding page header and footer). + * @return bool true if we are not in page header nor in page footer, false otherwise. + * @protected + * @since 5.9.091 (2011-06-15) + */ + protected function inPageBody() { + return (($this->InHeader === false) AND ($this->InFooter === false)); + } + + /** + * This method is used to render the table header on new page (if any). + * @protected + * @since 4.5.030 (2009-03-25) + */ + protected function setTableHeader() { + if ($this->num_columns > 1) { + // multi column mode + return; + } + if (isset($this->theadMargins['top'])) { + // restore the original top-margin + $this->tMargin = $this->theadMargins['top']; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + $this->y = $this->tMargin; + } + if (!TCPDF_STATIC::empty_string($this->thead) AND (!$this->inthead)) { + // set margins + $prev_lMargin = $this->lMargin; + $prev_rMargin = $this->rMargin; + $prev_cell_padding = $this->cell_padding; + $this->lMargin = $this->theadMargins['lmargin'] + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$this->theadMargins['page']]['olm']); + $this->rMargin = $this->theadMargins['rmargin'] + ($this->pagedim[$this->page]['orm'] - $this->pagedim[$this->theadMargins['page']]['orm']); + $this->cell_padding = $this->theadMargins['cell_padding']; + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + // account for special "cell" mode + if ($this->theadMargins['cell']) { + if ($this->rtl) { + $this->x -= $this->cell_padding['R']; + } else { + $this->x += $this->cell_padding['L']; + } + } + $gvars = $this->getGraphicVars(); + if (!empty($this->theadMargins['gvars'])) { + // set the correct graphic style + $this->setGraphicVars($this->theadMargins['gvars']); + $this->rMargin = $gvars['rMargin']; + $this->lMargin = $gvars['lMargin']; + } + // print table header + $this->writeHTML($this->thead, false, false, false, false, ''); + $this->setGraphicVars($gvars); + // set new top margin to skip the table headers + if (!isset($this->theadMargins['top'])) { + $this->theadMargins['top'] = $this->tMargin; + } + // store end of header position + if (!isset($this->columns[0]['th'])) { + $this->columns[0]['th'] = array(); + } + $this->columns[0]['th']['\''.$this->page.'\''] = $this->y; + $this->tMargin = $this->y; + $this->pagedim[$this->page]['tm'] = $this->tMargin; + $this->lasth = 0; + $this->lMargin = $prev_lMargin; + $this->rMargin = $prev_rMargin; + $this->cell_padding = $prev_cell_padding; + } + } + + /** + * Returns the current page number. + * @return int page number + * @public + * @since 1.0 + * @see getAliasNbPages() + */ + public function PageNo() { + return $this->page; + } + + /** + * Returns the array of spot colors. + * @return array Spot colors array. + * @public + * @since 6.0.038 (2013-09-30) + */ + public function getAllSpotColors() { + return $this->spot_colors; + } + + /** + * Defines a new spot color. + * It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param string $name Full name of the spot color. + * @param float $c Cyan color for CMYK. Value between 0 and 100. + * @param float $m Magenta color for CMYK. Value between 0 and 100. + * @param float $y Yellow color for CMYK. Value between 0 and 100. + * @param float $k Key (Black) color for CMYK. Value between 0 and 100. + * @public + * @since 4.0.024 (2008-09-12) + * @see SetDrawSpotColor(), SetFillSpotColor(), SetTextSpotColor() + */ + public function AddSpotColor($name, $c, $m, $y, $k) { + if (!isset($this->spot_colors[$name])) { + $i = (1 + count($this->spot_colors)); + $this->spot_colors[$name] = array('C' => $c, 'M' => $m, 'Y' => $y, 'K' => $k, 'name' => $name, 'i' => $i); + } + } + + /** + * Set the spot color for the specified type ('draw', 'fill', 'text'). + * @param string $type Type of object affected by this color: ('draw', 'fill', 'text'). + * @param string $name Name of the spot color. + * @param float $tint Intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @return string PDF color command. + * @public + * @since 5.9.125 (2011-10-03) + */ + public function setSpotColor($type, $name, $tint=100) { + $spotcolor = TCPDF_COLORS::getSpotColor($name, $this->spot_colors); + if ($spotcolor === false) { + $this->Error('Undefined spot color: '.$name.', you must add it using the AddSpotColor() method.'); + } + $tint = (max(0, min(100, $tint)) / 100); + $pdfcolor = sprintf('/CS%d ', $this->spot_colors[$name]['i']); + switch ($type) { + case 'draw': { + $pdfcolor .= sprintf('CS %F SCN', $tint); + $this->DrawColor = $pdfcolor; + $this->strokecolor = $spotcolor; + break; + } + case 'fill': { + $pdfcolor .= sprintf('cs %F scn', $tint); + $this->FillColor = $pdfcolor; + $this->bgcolor = $spotcolor; + break; + } + case 'text': { + $pdfcolor .= sprintf('cs %F scn', $tint); + $this->TextColor = $pdfcolor; + $this->fgcolor = $spotcolor; + break; + } + } + $this->ColorFlag = ($this->FillColor != $this->TextColor); + if ($this->state == 2) { + $this->_out($pdfcolor); + } + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['spot_colors'][$name] = $this->spot_colors[$name]; + } + return $pdfcolor; + } + + /** + * Defines the spot color used for all drawing operations (lines, rectangles and cell borders). + * @param string $name Name of the spot color. + * @param float $tint Intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetFillSpotColor(), SetTextSpotColor() + */ + public function setDrawSpotColor($name, $tint=100) { + $this->setSpotColor('draw', $name, $tint); + } + + /** + * Defines the spot color used for all filling operations (filled rectangles and cell backgrounds). + * @param string $name Name of the spot color. + * @param float $tint Intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetDrawSpotColor(), SetTextSpotColor() + */ + public function setFillSpotColor($name, $tint=100) { + $this->setSpotColor('fill', $name, $tint); + } + + /** + * Defines the spot color used for text. + * @param string $name Name of the spot color. + * @param int $tint Intensity of the color (from 0 to 100 ; 100 = full intensity by default). + * @public + * @since 4.0.024 (2008-09-12) + * @see AddSpotColor(), SetDrawSpotColor(), SetFillSpotColor() + */ + public function setTextSpotColor($name, $tint=100) { + $this->setSpotColor('text', $name, $tint); + } + + /** + * Set the color array for the specified type ('draw', 'fill', 'text'). + * It can be expressed in RGB, CMYK or GRAY SCALE components. + * The method can be called before the first page is created and the value is retained from page to page. + * @param string $type Type of object affected by this color: ('draw', 'fill', 'text'). + * @param array $color Array of colors (1=gray, 3=RGB, 4=CMYK or 5=spotcolor=CMYK+name values). + * @param boolean $ret If true do not send the PDF command. + * @return string The PDF command or empty string. + * @public + * @since 3.1.000 (2008-06-11) + */ + public function setColorArray($type, $color, $ret=false) { + if (is_array($color)) { + $color = array_values($color); + // component: grey, RGB red or CMYK cyan + $c = isset($color[0]) ? $color[0] : -1; + // component: RGB green or CMYK magenta + $m = isset($color[1]) ? $color[1] : -1; + // component: RGB blue or CMYK yellow + $y = isset($color[2]) ? $color[2] : -1; + // component: CMYK black + $k = isset($color[3]) ? $color[3] : -1; + // color name + $name = isset($color[4]) ? $color[4] : ''; + if ($c >= 0) { + return $this->setColor($type, $c, $m, $y, $k, $ret, $name); + } + } + return ''; + } + + /** + * Defines the color used for all drawing operations (lines, rectangles and cell borders). + * It can be expressed in RGB, CMYK or GRAY SCALE components. + * The method can be called before the first page is created and the value is retained from page to page. + * @param array $color Array of colors (1, 3 or 4 values). + * @param boolean $ret If true do not send the PDF command. + * @return string the PDF command + * @public + * @since 3.1.000 (2008-06-11) + * @see SetDrawColor() + */ + public function setDrawColorArray($color, $ret=false) { + return $this->setColorArray('draw', $color, $ret); + } + + /** + * Defines the color used for all filling operations (filled rectangles and cell backgrounds). + * It can be expressed in RGB, CMYK or GRAY SCALE components. + * The method can be called before the first page is created and the value is retained from page to page. + * @param array $color Array of colors (1, 3 or 4 values). + * @param boolean $ret If true do not send the PDF command. + * @public + * @since 3.1.000 (2008-6-11) + * @see SetFillColor() + */ + public function setFillColorArray($color, $ret=false) { + return $this->setColorArray('fill', $color, $ret); + } + + /** + * Defines the color used for text. It can be expressed in RGB components or gray scale. + * The method can be called before the first page is created and the value is retained from page to page. + * @param array $color Array of colors (1, 3 or 4 values). + * @param boolean $ret If true do not send the PDF command. + * @public + * @since 3.1.000 (2008-6-11) + * @see SetFillColor() + */ + public function setTextColorArray($color, $ret=false) { + return $this->setColorArray('text', $color, $ret); + } + + /** + * Defines the color used by the specified type ('draw', 'fill', 'text'). + * @param string $type Type of object affected by this color: ('draw', 'fill', 'text'). + * @param float $col1 GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). + * @param float $col2 GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). + * @param float $col3 BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). + * @param float $col4 KEY (BLACK) color for CMYK (0-100). + * @param boolean $ret If true do not send the command. + * @param string $name spot color name (if any) + * @return string The PDF command or empty string. + * @public + * @since 5.9.125 (2011-10-03) + */ + public function setColor($type, $col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { + // set default values + if (!is_numeric($col1)) { + $col1 = 0; + } + if (!is_numeric($col2)) { + $col2 = -1; + } + if (!is_numeric($col3)) { + $col3 = -1; + } + if (!is_numeric($col4)) { + $col4 = -1; + } + // set color by case + $suffix = ''; + if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) { + // Grey scale + $col1 = max(0, min(255, $col1)); + $intcolor = array('G' => $col1); + $pdfcolor = sprintf('%F ', ($col1 / 255)); + $suffix = 'g'; + } elseif ($col4 == -1) { + // RGB + $col1 = max(0, min(255, $col1)); + $col2 = max(0, min(255, $col2)); + $col3 = max(0, min(255, $col3)); + $intcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3); + $pdfcolor = sprintf('%F %F %F ', ($col1 / 255), ($col2 / 255), ($col3 / 255)); + $suffix = 'rg'; + } else { + $col1 = max(0, min(100, $col1)); + $col2 = max(0, min(100, $col2)); + $col3 = max(0, min(100, $col3)); + $col4 = max(0, min(100, $col4)); + if (empty($name)) { + // CMYK + $intcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4); + $pdfcolor = sprintf('%F %F %F %F ', ($col1 / 100), ($col2 / 100), ($col3 / 100), ($col4 / 100)); + $suffix = 'k'; + } else { + // SPOT COLOR + $intcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4, 'name' => $name); + $this->AddSpotColor($name, $col1, $col2, $col3, $col4); + $pdfcolor = $this->setSpotColor($type, $name, 100); + } + } + switch ($type) { + case 'draw': { + $pdfcolor .= strtoupper($suffix); + $this->DrawColor = $pdfcolor; + $this->strokecolor = $intcolor; + break; + } + case 'fill': { + $pdfcolor .= $suffix; + $this->FillColor = $pdfcolor; + $this->bgcolor = $intcolor; + break; + } + case 'text': { + $pdfcolor .= $suffix; + $this->TextColor = $pdfcolor; + $this->fgcolor = $intcolor; + break; + } + } + $this->ColorFlag = ($this->FillColor != $this->TextColor); + if (($type != 'text') AND ($this->state == 2) AND $type !== 0) { + if (!$ret) { + $this->_out($pdfcolor); + } + return $pdfcolor; + } + return ''; + } + + /** + * Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param float $col1 GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). + * @param float $col2 GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). + * @param float $col3 BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). + * @param float $col4 KEY (BLACK) color for CMYK (0-100). + * @param boolean $ret If true do not send the command. + * @param string $name spot color name (if any) + * @return string the PDF command + * @public + * @since 1.3 + * @see SetDrawColorArray(), SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell() + */ + public function setDrawColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { + return $this->setColor('draw', $col1, $col2, $col3, $col4, $ret, $name); + } + + /** + * Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param float $col1 GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). + * @param float $col2 GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). + * @param float $col3 BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). + * @param float $col4 KEY (BLACK) color for CMYK (0-100). + * @param boolean $ret If true do not send the command. + * @param string $name Spot color name (if any). + * @return string The PDF command. + * @public + * @since 1.3 + * @see SetFillColorArray(), SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell() + */ + public function setFillColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { + return $this->setColor('fill', $col1, $col2, $col3, $col4, $ret, $name); + } + + /** + * Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. + * @param float $col1 GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). + * @param float $col2 GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). + * @param float $col3 BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). + * @param float $col4 KEY (BLACK) color for CMYK (0-100). + * @param boolean $ret If true do not send the command. + * @param string $name Spot color name (if any). + * @return string Empty string. + * @public + * @since 1.3 + * @see SetTextColorArray(), SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell() + */ + public function setTextColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { + return $this->setColor('text', $col1, $col2, $col3, $col4, $ret, $name); + } + + /** + * Returns the length of a string in user unit. A font must be selected.
        + * @param string $s The string whose length is to be computed + * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained. + * @param string $fontstyle Font style. Possible values are (case insensitive):
        • empty string: regular
        • B: bold
        • I: italic
        • U: underline
        • D: line-through
        • O: overline
        or any combination. The default value is regular. + * @param float $fontsize Font size in points. The default value is the current size. + * @param boolean $getarray if true returns an array of characters widths, if false returns the total length. + * @return float[]|float total string length or array of characted widths + * @author Nicola Asuni + * @public + * @since 1.2 + */ + public function GetStringWidth($s, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) { + return $this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($s, $this->isunicode, $this->CurrentFont), $s, $this->tmprtl, $this->isunicode, $this->CurrentFont), $fontname, $fontstyle, $fontsize, $getarray); + } + + /** + * Returns the string length of an array of chars in user unit or an array of characters widths. A font must be selected.
        + * @param array $sa The array of chars whose total length is to be computed + * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained. + * @param string $fontstyle Font style. Possible values are (case insensitive):
        • empty string: regular
        • B: bold
        • I: italic
        • U: underline
        • D: line through
        • O: overline
        or any combination. The default value is regular. + * @param float $fontsize Font size in points. The default value is the current size. + * @param boolean $getarray if true returns an array of characters widths, if false returns the total length. + * @return float[]|float total string length or array of characted widths + * @author Nicola Asuni + * @public + * @since 2.4.000 (2008-03-06) + */ + public function GetArrStringWidth($sa, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) { + // store current values + if (!TCPDF_STATIC::empty_string($fontname)) { + $prev_FontFamily = $this->FontFamily; + $prev_FontStyle = $this->FontStyle; + $prev_FontSizePt = $this->FontSizePt; + $this->setFont($fontname, $fontstyle, $fontsize, '', 'default', false); + } + // convert UTF-8 array to Latin1 if required + if ($this->isunicode AND (!$this->isUnicodeFont())) { + $sa = TCPDF_FONTS::UTF8ArrToLatin1Arr($sa); + } + $w = 0; // total width + $wa = array(); // array of characters widths + foreach ($sa as $ck => $char) { + // character width + $cw = $this->GetCharWidth($char, isset($sa[($ck + 1)])); + $wa[] = $cw; + $w += $cw; + } + // restore previous values + if (!TCPDF_STATIC::empty_string($fontname)) { + $this->setFont($prev_FontFamily, $prev_FontStyle, $prev_FontSizePt, '', 'default', false); + } + if ($getarray) { + return $wa; + } + return $w; + } + + /** + * Returns the length of the char in user unit for the current font considering current stretching and spacing (tracking). + * @param int $char The char code whose length is to be returned + * @param boolean $notlast If false ignore the font-spacing. + * @return float char width + * @author Nicola Asuni + * @public + * @since 2.4.000 (2008-03-06) + */ + public function GetCharWidth($char, $notlast=true) { + // get raw width + $chw = $this->getRawCharWidth($char); + if (($this->font_spacing < 0) OR (($this->font_spacing > 0) AND $notlast)) { + // increase/decrease font spacing + $chw += $this->font_spacing; + } + if ($this->font_stretching != 100) { + // fixed stretching mode + $chw *= ($this->font_stretching / 100); + } + return $chw; + } + + /** + * Returns the length of the char in user unit for the current font. + * @param int $char The char code whose length is to be returned + * @return float char width + * @author Nicola Asuni + * @public + * @since 5.9.000 (2010-09-28) + */ + public function getRawCharWidth($char) { + if ($char == 173) { + // SHY character will not be printed + return (0); + } + if (isset($this->CurrentFont['cw'][intval($char)])) { + $w = $this->CurrentFont['cw'][intval($char)]; + } elseif (isset($this->CurrentFont['dw'])) { + // default width + $w = $this->CurrentFont['dw']; + } elseif (isset($this->CurrentFont['cw'][32])) { + // default width + $w = $this->CurrentFont['cw'][32]; + } else { + $w = 600; + } + return $this->getAbsFontMeasure($w); + } + + /** + * Returns the numbero of characters in a string. + * @param string $s The input string. + * @return int number of characters + * @public + * @since 2.0.0001 (2008-01-07) + */ + public function GetNumChars($s) { + if ($this->isUnicodeFont()) { + return count(TCPDF_FONTS::UTF8StringToArray($s, $this->isunicode, $this->CurrentFont)); + } + return strlen($s); + } + + /** + * Fill the list of available fonts ($this->fontlist). + * @protected + * @since 4.0.013 (2008-07-28) + */ + protected function getFontsList() { + if (($fontsdir = opendir(TCPDF_FONTS::_getfontpath())) !== false) { + while (($file = readdir($fontsdir)) !== false) { + if (substr($file, -4) == '.php') { + array_push($this->fontlist, strtolower(basename($file, '.php'))); + } + } + closedir($fontsdir); + } + } + + /** + * Imports a TrueType, Type1, core, or CID0 font and makes it available. + * It is necessary to generate a font definition file first (read /fonts/utils/README.TXT). + * The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by K_PATH_FONTS if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated. + * @param string $family Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font. + * @param string $style Font style. Possible values are (case insensitive):
        • empty string: regular (default)
        • B: bold
        • I: italic
        • BI or IB: bold italic
        + * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces. + * @return array|false array containing the font data, or false in case of error. + * @param mixed $subset if true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. + * @public + * @since 1.5 + * @see SetFont(), setFontSubsetting() + */ + public function AddFont($family, $style='', $fontfile='', $subset='default') { + if ($subset === 'default') { + $subset = $this->font_subsetting; + } + if ($this->pdfa_mode) { + $subset = false; + } + if (TCPDF_STATIC::empty_string($family)) { + if (!TCPDF_STATIC::empty_string($this->FontFamily)) { + $family = $this->FontFamily; + } else { + $this->Error('Empty font family'); + } + } + // move embedded styles on $style + if (substr($family, -1) == 'I') { + $style .= 'I'; + $family = substr($family, 0, -1); + } + if (substr($family, -1) == 'B') { + $style .= 'B'; + $family = substr($family, 0, -1); + } + // normalize family name + $family = strtolower($family); + if ((!$this->isunicode) AND ($family == 'arial')) { + $family = 'helvetica'; + } + if (($family == 'symbol') OR ($family == 'zapfdingbats')) { + $style = ''; + } + if ($this->pdfa_mode AND (isset($this->CoreFonts[$family]))) { + // all fonts must be embedded + $family = 'pdfa'.$family; + } + $tempstyle = strtoupper($style); + $style = ''; + // underline + if (strpos($tempstyle, 'U') !== false) { + $this->underline = true; + } else { + $this->underline = false; + } + // line-through (deleted) + if (strpos($tempstyle, 'D') !== false) { + $this->linethrough = true; + } else { + $this->linethrough = false; + } + // overline + if (strpos($tempstyle, 'O') !== false) { + $this->overline = true; + } else { + $this->overline = false; + } + // bold + if (strpos($tempstyle, 'B') !== false) { + $style .= 'B'; + } + // oblique + if (strpos($tempstyle, 'I') !== false) { + $style .= 'I'; + } + $bistyle = $style; + $fontkey = $family.$style; + $font_style = $style.($this->underline ? 'U' : '').($this->linethrough ? 'D' : '').($this->overline ? 'O' : ''); + $fontdata = array('fontkey' => $fontkey, 'family' => $family, 'style' => $font_style); + // check if the font has been already added + $fb = $this->getFontBuffer($fontkey); + if ($fb !== false) { + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['fonts'][$fontkey] = $fb['i']; + } + return $fontdata; + } + // get specified font directory (if any) + $fontdir = false; + if (!TCPDF_STATIC::empty_string($fontfile)) { + $fontdir = dirname($fontfile); + if (TCPDF_STATIC::empty_string($fontdir) OR ($fontdir == '.')) { + $fontdir = ''; + } else { + $fontdir .= '/'; + } + } + // true when the font style variation is missing + $missing_style = false; + // search and include font file + if (TCPDF_STATIC::empty_string($fontfile) OR (!@TCPDF_STATIC::file_exists($fontfile))) { + // build a standard filenames for specified font + $tmp_fontfile = str_replace(' ', '', $family).strtolower($style).'.php'; + $fontfile = TCPDF_FONTS::getFontFullPath($tmp_fontfile, $fontdir); + if (TCPDF_STATIC::empty_string($fontfile)) { + $missing_style = true; + // try to remove the style part + $tmp_fontfile = str_replace(' ', '', $family).'.php'; + $fontfile = TCPDF_FONTS::getFontFullPath($tmp_fontfile, $fontdir); + } + } + // include font file + if (!TCPDF_STATIC::empty_string($fontfile) AND (@TCPDF_STATIC::file_exists($fontfile))) { + include($fontfile); + } else { + $this->Error('Could not include font definition file: '.$family.''); + } + // check font parameters + if ((!isset($type)) OR (!isset($cw))) { + $this->Error('The font definition file has a bad format: '.$fontfile.''); + } + // SET default parameters + if (!isset($file) OR TCPDF_STATIC::empty_string($file)) { + $file = ''; + } + if (!isset($enc) OR TCPDF_STATIC::empty_string($enc)) { + $enc = ''; + } + if (!isset($cidinfo) OR TCPDF_STATIC::empty_string($cidinfo)) { + $cidinfo = array('Registry'=>'Adobe', 'Ordering'=>'Identity', 'Supplement'=>0); + $cidinfo['uni2cid'] = array(); + } + if (!isset($ctg) OR TCPDF_STATIC::empty_string($ctg)) { + $ctg = ''; + } + if (!isset($desc) OR TCPDF_STATIC::empty_string($desc)) { + $desc = array(); + } + if (!isset($up) OR TCPDF_STATIC::empty_string($up)) { + $up = -100; + } + if (!isset($ut) OR TCPDF_STATIC::empty_string($ut)) { + $ut = 50; + } + if (!isset($cw) OR TCPDF_STATIC::empty_string($cw)) { + $cw = array(); + } + if (!isset($dw) OR TCPDF_STATIC::empty_string($dw)) { + // set default width + if (isset($desc['MissingWidth']) AND ($desc['MissingWidth'] > 0)) { + $dw = $desc['MissingWidth']; + } elseif (isset($cw[32])) { + $dw = $cw[32]; + } else { + $dw = 600; + } + } + ++$this->numfonts; + if ($type == 'core') { + $name = $this->CoreFonts[$fontkey]; + $subset = false; + } elseif (($type == 'TrueType') OR ($type == 'Type1')) { + $subset = false; + } elseif ($type == 'TrueTypeUnicode') { + $enc = 'Identity-H'; + } elseif ($type == 'cidfont0') { + if ($this->pdfa_mode) { + $this->Error('All fonts must be embedded in PDF/A mode!'); + } + } else { + $this->Error('Unknow font type: '.$type.''); + } + // set name if unset + if (!isset($name) OR empty($name)) { + $name = $fontkey; + } + // create artificial font style variations if missing (only works with non-embedded fonts) + if (($type != 'core') AND $missing_style) { + // style variations + $styles = array('' => '', 'B' => ',Bold', 'I' => ',Italic', 'BI' => ',BoldItalic'); + $name .= $styles[$bistyle]; + // artificial bold + if (strpos($bistyle, 'B') !== false) { + if (isset($desc['StemV'])) { + // from normal to bold + $desc['StemV'] = round($desc['StemV'] * 1.75); + } else { + // bold + $desc['StemV'] = 123; + } + } + // artificial italic + if (strpos($bistyle, 'I') !== false) { + if (isset($desc['ItalicAngle'])) { + $desc['ItalicAngle'] -= 11; + } else { + $desc['ItalicAngle'] = -11; + } + if (isset($desc['Flags'])) { + $desc['Flags'] |= 64; //bit 7 + } else { + $desc['Flags'] = 64; + } + } + } + // check if the array of characters bounding boxes is defined + if (!isset($cbbox)) { + $cbbox = array(); + } + // initialize subsetchars + $subsetchars = array_fill(0, 255, true); + $this->setFontBuffer($fontkey, array('fontkey' => $fontkey, 'i' => $this->numfonts, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'cbbox' => $cbbox, 'dw' => $dw, 'enc' => $enc, 'cidinfo' => $cidinfo, 'file' => $file, 'ctg' => $ctg, 'subset' => $subset, 'subsetchars' => $subsetchars)); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['fonts'][$fontkey] = $this->numfonts; + } + if (isset($diff) AND (!empty($diff))) { + //Search existing encodings + $d = 0; + $nb = count($this->diffs); + for ($i=1; $i <= $nb; ++$i) { + if ($this->diffs[$i] == $diff) { + $d = $i; + break; + } + } + if ($d == 0) { + $d = $nb + 1; + $this->diffs[$d] = $diff; + } + $this->setFontSubBuffer($fontkey, 'diff', $d); + } + if (!TCPDF_STATIC::empty_string($file)) { + if (!isset($this->FontFiles[$file])) { + if ((strcasecmp($type,'TrueType') == 0) OR (strcasecmp($type, 'TrueTypeUnicode') == 0)) { + $this->FontFiles[$file] = array('length1' => $originalsize, 'fontdir' => $fontdir, 'subset' => $subset, 'fontkeys' => array($fontkey)); + } elseif ($type != 'core') { + $this->FontFiles[$file] = array('length1' => $size1, 'length2' => $size2, 'fontdir' => $fontdir, 'subset' => $subset, 'fontkeys' => array($fontkey)); + } + } else { + // update fontkeys that are sharing this font file + $this->FontFiles[$file]['subset'] = ($this->FontFiles[$file]['subset'] AND $subset); + if (!in_array($fontkey, $this->FontFiles[$file]['fontkeys'])) { + $this->FontFiles[$file]['fontkeys'][] = $fontkey; + } + } + } + return $fontdata; + } + + /** + * Sets the font used to print character strings. + * The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe). + * The method can be called before the first page is created and the font is retained from page to page. + * If you just wish to change the current font size, it is simpler to call SetFontSize(). + * Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:
        • They are in the current directory (the one where the running script lies)
        • They are in one of the directories defined by the include_path parameter
        • They are in the directory defined by the K_PATH_FONTS constant

        + * @param string $family Family font. It can be either a name defined by AddFont() or one of the standard Type1 families (case insensitive):
        • times (Times-Roman)
        • timesb (Times-Bold)
        • timesi (Times-Italic)
        • timesbi (Times-BoldItalic)
        • helvetica (Helvetica)
        • helveticab (Helvetica-Bold)
        • helveticai (Helvetica-Oblique)
        • helveticabi (Helvetica-BoldOblique)
        • courier (Courier)
        • courierb (Courier-Bold)
        • courieri (Courier-Oblique)
        • courierbi (Courier-BoldOblique)
        • symbol (Symbol)
        • zapfdingbats (ZapfDingbats)
        It is also possible to pass an empty string. In that case, the current family is retained. + * @param string $style Font style. Possible values are (case insensitive):
        • empty string: regular
        • B: bold
        • I: italic
        • U: underline
        • D: line through
        • O: overline
        or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined. + * @param float|null $size Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12 + * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces. + * @param mixed $subset if true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. + * @param boolean $out if true output the font size command, otherwise only set the font properties. + * @author Nicola Asuni + * @public + * @since 1.0 + * @see AddFont(), SetFontSize() + */ + public function setFont($family, $style='', $size=null, $fontfile='', $subset='default', $out=true) { + //Select a font; size given in points + if ($size === null) { + $size = $this->FontSizePt; + } + if ($size < 0) { + $size = 0; + } + // try to add font (if not already added) + $fontdata = $this->AddFont($family, $style, $fontfile, $subset); + $this->FontFamily = $fontdata['family']; + $this->FontStyle = $fontdata['style']; + if (isset($this->CurrentFont['fontkey']) AND isset($this->CurrentFont['subsetchars'])) { + // save subset chars of the previous font + $this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']); + } + $this->CurrentFont = $this->getFontBuffer($fontdata['fontkey']); + $this->setFontSize($size, $out); + } + + /** + * Defines the size of the current font. + * @param float $size The font size in points. + * @param boolean $out if true output the font size command, otherwise only set the font properties. + * @public + * @since 1.0 + * @see SetFont() + */ + public function setFontSize($size, $out=true) { + $size = (float)$size; + // font size in points + $this->FontSizePt = $size; + // font size in user units + $this->FontSize = $size / $this->k; + // calculate some font metrics + if (isset($this->CurrentFont['desc']['FontBBox'])) { + $bbox = explode(' ', substr($this->CurrentFont['desc']['FontBBox'], 1, -1)); + $font_height = ((intval($bbox[3]) - intval($bbox[1])) * $size / 1000); + } else { + $font_height = $size * 1.219; + } + if (isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent'] > 0)) { + $font_ascent = ($this->CurrentFont['desc']['Ascent'] * $size / 1000); + } + if (isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent'] <= 0)) { + $font_descent = (- $this->CurrentFont['desc']['Descent'] * $size / 1000); + } + if (!isset($font_ascent) AND !isset($font_descent)) { + // core font + $font_ascent = 0.76 * $font_height; + $font_descent = $font_height - $font_ascent; + } elseif (!isset($font_descent)) { + $font_descent = $font_height - $font_ascent; + } elseif (!isset($font_ascent)) { + $font_ascent = $font_height - $font_descent; + } + $this->FontAscent = ($font_ascent / $this->k); + $this->FontDescent = ($font_descent / $this->k); + if ($out AND ($this->page > 0) AND (isset($this->CurrentFont['i'])) AND ($this->state == 2)) { + $this->_out(sprintf('BT /F%d %F Tf ET', $this->CurrentFont['i'], $this->FontSizePt)); + } + } + + /** + * Returns the bounding box of the current font in user units. + * @return array + * @public + * @since 5.9.152 (2012-03-23) + */ + public function getFontBBox() { + $fbbox = array(); + if (isset($this->CurrentFont['desc']['FontBBox'])) { + $tmpbbox = explode(' ', substr($this->CurrentFont['desc']['FontBBox'], 1, -1)); + $fbbox = array_map(array($this,'getAbsFontMeasure'), $tmpbbox); + } else { + // Find max width + if (isset($this->CurrentFont['desc']['MaxWidth'])) { + $maxw = $this->getAbsFontMeasure(intval($this->CurrentFont['desc']['MaxWidth'])); + } else { + $maxw = 0; + if (isset($this->CurrentFont['desc']['MissingWidth'])) { + $maxw = max($maxw, $this->CurrentFont['desc']['MissingWidth']); + } + if (isset($this->CurrentFont['desc']['AvgWidth'])) { + $maxw = max($maxw, $this->CurrentFont['desc']['AvgWidth']); + } + if (isset($this->CurrentFont['dw'])) { + $maxw = max($maxw, $this->CurrentFont['dw']); + } + foreach ($this->CurrentFont['cw'] as $char => $w) { + $maxw = max($maxw, $w); + } + if ($maxw == 0) { + $maxw = 600; + } + $maxw = $this->getAbsFontMeasure($maxw); + } + $fbbox = array(0, (0 - $this->FontDescent), $maxw, $this->FontAscent); + } + return $fbbox; + } + + /** + * Convert a relative font measure into absolute value. + * @param int $s Font measure. + * @return float Absolute measure. + * @since 5.9.186 (2012-09-13) + */ + public function getAbsFontMeasure($s) { + return ($s * $this->FontSize / 1000); + } + + /** + * Returns the glyph bounding box of the specified character in the current font in user units. + * @param int $char Input character code. + * @return false|array array(xMin, yMin, xMax, yMax) or FALSE if not defined. + * @since 5.9.186 (2012-09-13) + */ + public function getCharBBox($char) { + $c = intval($char); + if (isset($this->CurrentFont['cw'][$c])) { + // glyph is defined ... use zero width & height for glyphs without outlines + $result = array(0,0,0,0); + if (isset($this->CurrentFont['cbbox'][$c])) { + $result = $this->CurrentFont['cbbox'][$c]; + } + return array_map(array($this,'getAbsFontMeasure'), $result); + } + return false; + } + + /** + * Return the font descent value + * @param string $font font name + * @param string $style font style + * @param float $size The size (in points) + * @return int font descent + * @public + * @author Nicola Asuni + * @since 4.9.003 (2010-03-30) + */ + public function getFontDescent($font, $style='', $size=0) { + $fontdata = $this->AddFont($font, $style); + $fontinfo = $this->getFontBuffer($fontdata['fontkey']); + if (isset($fontinfo['desc']['Descent']) AND ($fontinfo['desc']['Descent'] <= 0)) { + $descent = (- $fontinfo['desc']['Descent'] * $size / 1000); + } else { + $descent = (1.219 * 0.24 * $size); + } + return ($descent / $this->k); + } + + /** + * Return the font ascent value. + * @param string $font font name + * @param string $style font style + * @param float $size The size (in points) + * @return int font ascent + * @public + * @author Nicola Asuni + * @since 4.9.003 (2010-03-30) + */ + public function getFontAscent($font, $style='', $size=0) { + $fontdata = $this->AddFont($font, $style); + $fontinfo = $this->getFontBuffer($fontdata['fontkey']); + if (isset($fontinfo['desc']['Ascent']) AND ($fontinfo['desc']['Ascent'] > 0)) { + $ascent = ($fontinfo['desc']['Ascent'] * $size / 1000); + } else { + $ascent = 1.219 * 0.76 * $size; + } + return ($ascent / $this->k); + } + + /** + * Return true in the character is present in the specified font. + * @param mixed $char Character to check (integer value or string) + * @param string $font Font name (family name). + * @param string $style Font style. + * @return bool true if the char is defined, false otherwise. + * @public + * @since 5.9.153 (2012-03-28) + */ + public function isCharDefined($char, $font='', $style='') { + if (is_string($char)) { + // get character code + $char = TCPDF_FONTS::UTF8StringToArray($char, $this->isunicode, $this->CurrentFont); + $char = $char[0]; + } + if (TCPDF_STATIC::empty_string($font)) { + if (TCPDF_STATIC::empty_string($style)) { + return (isset($this->CurrentFont['cw'][intval($char)])); + } + $font = $this->FontFamily; + } + $fontdata = $this->AddFont($font, $style); + $fontinfo = $this->getFontBuffer($fontdata['fontkey']); + return (isset($fontinfo['cw'][intval($char)])); + } + + /** + * Replace missing font characters on selected font with specified substitutions. + * @param string $text Text to process. + * @param string $font Font name (family name). + * @param string $style Font style. + * @param array $subs Array of possible character substitutions. The key is the character to check (integer value) and the value is a single intege value or an array of possible substitutes. + * @return string Processed text. + * @public + * @since 5.9.153 (2012-03-28) + */ + public function replaceMissingChars($text, $font='', $style='', $subs=array()) { + if (empty($subs)) { + return $text; + } + if (TCPDF_STATIC::empty_string($font)) { + $font = $this->FontFamily; + } + $fontdata = $this->AddFont($font, $style); + $fontinfo = $this->getFontBuffer($fontdata['fontkey']); + $uniarr = TCPDF_FONTS::UTF8StringToArray($text, $this->isunicode, $this->CurrentFont); + foreach ($uniarr as $k => $chr) { + if (!isset($fontinfo['cw'][$chr])) { + // this character is missing on the selected font + if (isset($subs[$chr])) { + // we have available substitutions + if (is_array($subs[$chr])) { + foreach($subs[$chr] as $s) { + if (isset($fontinfo['cw'][$s])) { + $uniarr[$k] = $s; + break; + } + } + } elseif (isset($fontinfo['cw'][$subs[$chr]])) { + $uniarr[$k] = $subs[$chr]; + } + } + } + } + return TCPDF_FONTS::UniArrSubString(TCPDF_FONTS::UTF8ArrayToUniArray($uniarr, $this->isunicode)); + } + + /** + * Defines the default monospaced font. + * @param string $font Font name. + * @public + * @since 4.5.025 + */ + public function setDefaultMonospacedFont($font) { + $this->default_monospaced_font = $font; + } + + /** + * Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.
        + * The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink(). + * @public + * @since 1.5 + * @see Cell(), Write(), Image(), Link(), SetLink() + */ + public function AddLink() { + // create a new internal link + $n = count($this->links) + 1; + $this->links[$n] = array('p' => 0, 'y' => 0, 'f' => false); + return $n; + } + + /** + * Defines the page and position a link points to. + * @param int $link The link identifier returned by AddLink() + * @param float $y Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page) + * @param int|string $page Number of target page; -1 indicates the current page (default value). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. + * @public + * @since 1.5 + * @see AddLink() + */ + public function setLink($link, $y=0, $page=-1) { + $fixed = false; + if (!empty($page) AND (substr($page, 0, 1) == '*')) { + $page = intval(substr($page, 1)); + // this page number will not be changed when moving/add/deleting pages + $fixed = true; + } + if ($page < 0) { + $page = $this->page; + } + if ($y == -1) { + $y = $this->y; + } + $this->links[$link] = array('p' => $page, 'y' => $y, 'f' => $fixed); + } + + /** + * Puts a link on a rectangular area of the page. + * Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image. + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param float $w Width of the rectangle + * @param float $h Height of the rectangle + * @param mixed $link URL or identifier returned by AddLink() + * @param int $spaces number of spaces on the text to link + * @public + * @since 1.5 + * @see AddLink(), Annotation(), Cell(), Write(), Image() + */ + public function Link($x, $y, $w, $h, $link, $spaces=0) { + $this->Annotation($x, $y, $w, $h, $link, array('Subtype'=>'Link'), $spaces); + } + + /** + * Puts a markup annotation on a rectangular area of the page. + * !!!!THE ANNOTATION SUPPORT IS NOT YET FULLY IMPLEMENTED !!!! + * @param float $x Abscissa of the upper-left corner of the rectangle + * @param float $y Ordinate of the upper-left corner of the rectangle + * @param float $w Width of the rectangle + * @param float $h Height of the rectangle + * @param string $text annotation text or alternate content + * @param array $opt array of options (see section 8.4 of PDF reference 1.7). + * @param int $spaces number of spaces on the text to link + * @public + * @since 4.0.018 (2008-08-06) + */ + public function Annotation($x, $y, $w, $h, $text, $opt=array('Subtype'=>'Text'), $spaces=0) { + if ($this->inxobj) { + // store parameters for later use on template + $this->xobjects[$this->xobjid]['annotations'][] = array('x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'text' => $text, 'opt' => $opt, 'spaces' => $spaces); + return; + } + if ($x === '') { + $x = $this->x; + } + if ($y === '') { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + // recalculate coordinates to account for graphic transformations + if (isset($this->transfmatrix) AND !empty($this->transfmatrix)) { + for ($i=$this->transfmatrix_key; $i > 0; --$i) { + $maxid = count($this->transfmatrix[$i]) - 1; + for ($j=$maxid; $j >= 0; --$j) { + $ctm = $this->transfmatrix[$i][$j]; + if (isset($ctm['a'])) { + $x = $x * $this->k; + $y = ($this->h - $y) * $this->k; + $w = $w * $this->k; + $h = $h * $this->k; + // top left + $xt = $x; + $yt = $y; + $x1 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y1 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // top right + $xt = $x + $w; + $yt = $y; + $x2 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y2 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // bottom left + $xt = $x; + $yt = $y - $h; + $x3 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y3 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // bottom right + $xt = $x + $w; + $yt = $y - $h; + $x4 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; + $y4 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; + // new coordinates (rectangle area) + $x = min($x1, $x2, $x3, $x4); + $y = max($y1, $y2, $y3, $y4); + $w = (max($x1, $x2, $x3, $x4) - $x) / $this->k; + $h = ($y - min($y1, $y2, $y3, $y4)) / $this->k; + $x = $x / $this->k; + $y = $this->h - ($y / $this->k); + } + } + } + } + if ($this->page <= 0) { + $page = 1; + } else { + $page = $this->page; + } + if (!isset($this->PageAnnots[$page])) { + $this->PageAnnots[$page] = array(); + } + $this->PageAnnots[$page][] = array('n' => ++$this->n, 'x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces); + if (!$this->pdfa_mode || ($this->pdfa_mode && $this->pdfa_version == 3)) { + if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!TCPDF_STATIC::empty_string($opt['FS'])) + AND (@TCPDF_STATIC::file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS'])) + AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) { + $this->embeddedfiles[basename($opt['FS'])] = array('f' => ++$this->n, 'n' => ++$this->n, 'file' => $opt['FS']); + } + } + // Add widgets annotation's icons + if (isset($opt['mk']['i']) AND @TCPDF_STATIC::file_exists($opt['mk']['i'])) { + $this->Image($opt['mk']['i'], '', '', 10, 10, '', '', '', false, 300, '', false, false, 0, false, true); + } + if (isset($opt['mk']['ri']) AND @TCPDF_STATIC::file_exists($opt['mk']['ri'])) { + $this->Image($opt['mk']['ri'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true); + } + if (isset($opt['mk']['ix']) AND @TCPDF_STATIC::file_exists($opt['mk']['ix'])) { + $this->Image($opt['mk']['ix'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true); + } + } + + /** + * Embedd the attached files. + * @since 4.4.000 (2008-12-07) + * @protected + * @see Annotation() + */ + protected function _putEmbeddedFiles() { + if ($this->pdfa_mode && $this->pdfa_version != 3) { + // embedded files are not allowed in PDF/A mode version 1 and 2 + return; + } + reset($this->embeddedfiles); + foreach ($this->embeddedfiles as $filename => $filedata) { + $data = $this->getCachedFileContents($filedata['file']); + if ($data !== FALSE) { + $rawsize = strlen($data); + if ($rawsize > 0) { + // update name tree + $this->efnames[$filename] = $filedata['f'].' 0 R'; + // embedded file specification object + $out = $this->_getobj($filedata['f'])."\n"; + $out .= '<_datastring($filename, $filedata['f']); + $out .= ' /UF '.$this->_datastring($filename, $filedata['f']); + $out .= ' /AFRelationship /Source'; + $out .= ' /EF <> >>'; + $out .= "\n".'endobj'; + $this->_out($out); + // embedded file object + $filter = ''; + if ($this->compress) { + $data = gzcompress($data); + $filter = ' /Filter /FlateDecode'; + } + + if ($this->pdfa_version == 3) { + $filter = ' /Subtype /text#2Fxml'; + } + + $stream = $this->_getrawstream($data, $filedata['n']); + $out = $this->_getobj($filedata['n'])."\n"; + $out .= '<< /Type /EmbeddedFile'.$filter.' /Length '.strlen($stream).' /Params <> >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + } + } + + /** + * Prints a text cell at the specified position. + * This method allows to place a string precisely on the page. + * @param float $x Abscissa of the cell origin + * @param float $y Ordinate of the cell origin + * @param string $txt String to print + * @param int $fstroke outline size in user units (0 = disable) + * @param boolean $fclip if true activate clipping mode (you must call StartTransform() before this function and StopTransform() to stop the clipping tranformation). + * @param boolean $ffill if true fills the text + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
        • 0: no border (default)
        • 1: frame
        or a string containing some or all of the following characters (in any order):
        • L: left
        • T: top
        • R: right
        • B: bottom
        or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param int $ln Indicates where the current position should go after the call. Possible values are:
        • 0: to the right (or left for RTL languages)
        • 1: to the beginning of the next line
        • 2: below
        Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
        • L or empty string: left align (default value)
        • C: center
        • R: right align
        • J: justify
        + * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). + * @param mixed $link URL or identifier returned by AddLink(). + * @param int $stretch font stretch mode:
        • 0 = disabled
        • 1 = horizontal scaling only if text is larger than cell width
        • 2 = forced horizontal scaling to fit cell width
        • 3 = character spacing only if text is larger than cell width
        • 4 = forced character spacing to fit cell width
        General font stretching and scaling values will be preserved when possible. + * @param boolean $ignore_min_height if true ignore automatic minimum height value. + * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
        • T : cell top
        • A : font top
        • L : font baseline
        • D : font bottom
        • B : cell bottom
        + * @param string $valign text vertical alignment inside the cell. Possible values are:
        • T : top
        • C : center
        • B : bottom
        + * @param boolean $rtloff if true uses the page top-left corner as origin of axis for $x and $y initial position. + * @public + * @since 1.0 + * @see Cell(), Write(), MultiCell(), WriteHTML(), WriteHTMLCell() + */ + public function Text($x, $y, $txt, $fstroke=0, $fclip=false, $ffill=true, $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M', $rtloff=false) { + $textrendermode = $this->textrendermode; + $textstrokewidth = $this->textstrokewidth; + $this->setTextRenderingMode($fstroke, $ffill, $fclip); + $this->setXY($x, $y, $rtloff); + $this->Cell(0, 0, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height, $calign, $valign); + // restore previous rendering mode + $this->textrendermode = $textrendermode; + $this->textstrokewidth = $textstrokewidth; + } + + /** + * Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value. + * The default implementation returns a value according to the mode selected by SetAutoPageBreak().
        + * This method is called automatically and should not be called directly by the application. + * @return bool + * @public + * @since 1.4 + * @see SetAutoPageBreak() + */ + public function AcceptPageBreak() { + if ($this->num_columns > 1) { + // multi column mode + if ($this->current_column < ($this->num_columns - 1)) { + // go to next column + $this->selectColumn($this->current_column + 1); + } elseif ($this->AutoPageBreak) { + // add a new page + $this->AddPage(); + // set first column + $this->selectColumn(0); + } + // avoid page breaking from checkPageBreak() + return false; + } + return $this->AutoPageBreak; + } + + /** + * Add page if needed. + * @param float $h Cell height. Default value: 0. + * @param float|null $y starting y position, leave empty for current position. + * @param bool $addpage if true add a page, otherwise only return the true/false state + * @return bool true in case of page break, false otherwise. + * @since 3.2.000 (2008-07-01) + * @protected + */ + protected function checkPageBreak($h=0, $y=null, $addpage=true) { + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + $current_page = $this->page; + if ((($y + $h) > $this->PageBreakTrigger) AND ($this->inPageBody()) AND ($this->AcceptPageBreak())) { + if ($addpage) { + //Automatic page break + $x = $this->x; + $this->AddPage($this->CurOrientation); + $this->y = $this->tMargin; + $oldpage = $this->page - 1; + if ($this->rtl) { + if ($this->pagedim[$this->page]['orm'] != $this->pagedim[$oldpage]['orm']) { + $this->x = $x - ($this->pagedim[$this->page]['orm'] - $this->pagedim[$oldpage]['orm']); + } else { + $this->x = $x; + } + } else { + if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) { + $this->x = $x + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$oldpage]['olm']); + } else { + $this->x = $x; + } + } + } + return true; + } + if ($current_page != $this->page) { + // account for columns mode + return true; + } + return false; + } + + /** + * Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
        + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * @param float $w Cell width. If 0, the cell extends up to the right margin. + * @param float $h Cell height. Default value: 0. + * @param string $txt String to print. Default value: empty string. + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
        • 0: no border (default)
        • 1: frame
        or a string containing some or all of the following characters (in any order):
        • L: left
        • T: top
        • R: right
        • B: bottom
        or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param int $ln Indicates where the current position should go after the call. Possible values are:
        • 0: to the right (or left for RTL languages)
        • 1: to the beginning of the next line
        • 2: below
        Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
        • L or empty string: left align (default value)
        • C: center
        • R: right align
        • J: justify
        + * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). + * @param mixed $link URL or identifier returned by AddLink(). + * @param int $stretch font stretch mode:
        • 0 = disabled
        • 1 = horizontal scaling only if text is larger than cell width
        • 2 = forced horizontal scaling to fit cell width
        • 3 = character spacing only if text is larger than cell width
        • 4 = forced character spacing to fit cell width
        General font stretching and scaling values will be preserved when possible. + * @param boolean $ignore_min_height if true ignore automatic minimum height value. + * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
        • T : cell top
        • C : center
        • B : cell bottom
        • A : font top
        • L : font baseline
        • D : font bottom
        + * @param string $valign text vertical alignment inside the cell. Possible values are:
        • T : top
        • C : center
        • B : bottom
        + * @public + * @since 1.0 + * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak() + */ + public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') { + $prev_cell_margin = $this->cell_margin; + $prev_cell_padding = $this->cell_padding; + $this->adjustCellPadding($border); + if (!$ignore_min_height) { + $min_cell_height = $this->getCellHeight($this->FontSize); + if ($h < $min_cell_height) { + $h = $min_cell_height; + } + } + $this->checkPageBreak($h + $this->cell_margin['T'] + $this->cell_margin['B']); + // apply text shadow if enabled + if ($this->txtshadow['enabled']) { + // save data + $x = $this->x; + $y = $this->y; + $bc = $this->bgcolor; + $fc = $this->fgcolor; + $sc = $this->strokecolor; + $alpha = $this->alpha; + // print shadow + $this->x += $this->txtshadow['depth_w']; + $this->y += $this->txtshadow['depth_h']; + $this->setFillColorArray($this->txtshadow['color']); + $this->setTextColorArray($this->txtshadow['color']); + $this->setDrawColorArray($this->txtshadow['color']); + if ($this->txtshadow['opacity'] != $alpha['CA']) { + $this->setAlpha($this->txtshadow['opacity'], $this->txtshadow['blend_mode']); + } + if ($this->state == 2) { + $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, true, $calign, $valign)); + } + //restore data + $this->x = $x; + $this->y = $y; + $this->setFillColorArray($bc); + $this->setTextColorArray($fc); + $this->setDrawColorArray($sc); + if ($this->txtshadow['opacity'] != $alpha['CA']) { + $this->setAlpha($alpha['CA'], $alpha['BM'], $alpha['ca'], $alpha['AIS']); + } + } + if ($this->state == 2) { + $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, true, $calign, $valign)); + } + $this->cell_padding = $prev_cell_padding; + $this->cell_margin = $prev_cell_margin; + } + + /** + * Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
        + * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. + * @param float $w Cell width. If 0, the cell extends up to the right margin. + * @param float $h Cell height. Default value: 0. + * @param string $txt String to print. Default value: empty string. + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
        • 0: no border (default)
        • 1: frame
        or a string containing some or all of the following characters (in any order):
        • L: left
        • T: top
        • R: right
        • B: bottom
        or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param int $ln Indicates where the current position should go after the call. Possible values are:
        • 0: to the right (or left for RTL languages)
        • 1: to the beginning of the next line
        • 2: below
        Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. + * @param string $align Allows to center or align the text. Possible values are:
        • L or empty string: left align (default value)
        • C: center
        • R: right align
        • J: justify
        + * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). + * @param mixed $link URL or identifier returned by AddLink(). + * @param int $stretch font stretch mode:
        • 0 = disabled
        • 1 = horizontal scaling only if text is larger than cell width
        • 2 = forced horizontal scaling to fit cell width
        • 3 = character spacing only if text is larger than cell width
        • 4 = forced character spacing to fit cell width
        General font stretching and scaling values will be preserved when possible. + * @param boolean $ignore_min_height if true ignore automatic minimum height value. + * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
        • T : cell top
        • C : center
        • B : cell bottom
        • A : font top
        • L : font baseline
        • D : font bottom
        + * @param string $valign text vertical alignment inside the cell. Possible values are:
        • T : top
        • M : middle
        • B : bottom
        + * @return string containing cell code + * @protected + * @since 1.0 + * @see Cell() + */ + protected function getCellCode($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') { + // replace 'NO-BREAK SPACE' (U+00A0) character with a simple space + $txt = str_replace(TCPDF_FONTS::unichr(160, $this->isunicode), ' ', $txt); + $prev_cell_margin = $this->cell_margin; + $prev_cell_padding = $this->cell_padding; + $txt = TCPDF_STATIC::removeSHY($txt, $this->isunicode); + $rs = ''; //string to be returned + $this->adjustCellPadding($border); + if (!$ignore_min_height) { + $min_cell_height = $this->getCellHeight($this->FontSize); + if ($h < $min_cell_height) { + $h = $min_cell_height; + } + } + $k = $this->k; + // check page for no-write regions and adapt page margins if necessary + list($this->x, $this->y) = $this->checkPageRegions($h, $this->x, $this->y); + if ($this->rtl) { + $x = $this->x - $this->cell_margin['R']; + } else { + $x = $this->x + $this->cell_margin['L']; + } + $y = $this->y + $this->cell_margin['T']; + $prev_font_stretching = $this->font_stretching; + $prev_font_spacing = $this->font_spacing; + // cell vertical alignment + switch ($calign) { + case 'A': { + // font top + switch ($valign) { + case 'T': { + // top + $y -= $this->cell_padding['T']; + break; + } + case 'B': { + // bottom + $y -= ($h - $this->cell_padding['B'] - $this->FontAscent - $this->FontDescent); + break; + } + default: + case 'C': + case 'M': { + // center + $y -= (($h - $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + break; + } + case 'L': { + // font baseline + switch ($valign) { + case 'T': { + // top + $y -= ($this->cell_padding['T'] + $this->FontAscent); + break; + } + case 'B': { + // bottom + $y -= ($h - $this->cell_padding['B'] - $this->FontDescent); + break; + } + default: + case 'C': + case 'M': { + // center + $y -= (($h + $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + break; + } + case 'D': { + // font bottom + switch ($valign) { + case 'T': { + // top + $y -= ($this->cell_padding['T'] + $this->FontAscent + $this->FontDescent); + break; + } + case 'B': { + // bottom + $y -= ($h - $this->cell_padding['B']); + break; + } + default: + case 'C': + case 'M': { + // center + $y -= (($h + $this->FontAscent + $this->FontDescent) / 2); + break; + } + } + break; + } + case 'B': { + // cell bottom + $y -= $h; + break; + } + case 'C': + case 'M': { + // cell center + $y -= ($h / 2); + break; + } + default: + case 'T': { + // cell top + break; + } + } + // text vertical alignment + switch ($valign) { + case 'T': { + // top + $yt = $y + $this->cell_padding['T']; + break; + } + case 'B': { + // bottom + $yt = $y + $h - $this->cell_padding['B'] - $this->FontAscent - $this->FontDescent; + break; + } + default: + case 'C': + case 'M': { + // center + $yt = $y + (($h - $this->FontAscent - $this->FontDescent) / 2); + break; + } + } + $basefonty = $yt + $this->FontAscent; + if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $x; + } + } + $s = ''; + // fill and borders + if (is_string($border) AND (strlen($border) == 4)) { + // full border + $border = 1; + } + if ($fill OR ($border == 1)) { + if ($fill) { + $op = ($border == 1) ? 'B' : 'f'; + } else { + $op = 'S'; + } + if ($this->rtl) { + $xk = (($x - $w) * $k); + } else { + $xk = ($x * $k); + } + $s .= sprintf('%F %F %F %F re %s ', $xk, (($this->h - $y) * $k), ($w * $k), (-$h * $k), $op); + } + // draw borders + $s .= $this->getCellBorder($x, $y, $w, $h, $border); + if ($txt != '') { + $txt2 = $txt; + if ($this->isunicode) { + if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) { + $txt2 = TCPDF_FONTS::UTF8ToLatin1($txt2, $this->isunicode, $this->CurrentFont); + } else { + $unicode = TCPDF_FONTS::UTF8StringToArray($txt, $this->isunicode, $this->CurrentFont); // array of UTF-8 unicode values + $unicode = TCPDF_FONTS::utf8Bidi($unicode, '', $this->tmprtl, $this->isunicode, $this->CurrentFont); + // replace thai chars (if any) + if (defined('K_THAI_TOPCHARS') AND (K_THAI_TOPCHARS == true)) { + // number of chars + $numchars = count($unicode); + // po pla, for far, for fan + $longtail = array(0x0e1b, 0x0e1d, 0x0e1f); + // do chada, to patak + $lowtail = array(0x0e0e, 0x0e0f); + // mai hun arkad, sara i, sara ii, sara ue, sara uee + $upvowel = array(0x0e31, 0x0e34, 0x0e35, 0x0e36, 0x0e37); + // mai ek, mai tho, mai tri, mai chattawa, karan + $tonemark = array(0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c); + // sara u, sara uu, pinthu + $lowvowel = array(0x0e38, 0x0e39, 0x0e3a); + $output = array(); + for ($i = 0; $i < $numchars; $i++) { + if (($unicode[$i] >= 0x0e00) && ($unicode[$i] <= 0x0e5b)) { + $ch0 = $unicode[$i]; + $ch1 = ($i > 0) ? $unicode[($i - 1)] : 0; + $ch2 = ($i > 1) ? $unicode[($i - 2)] : 0; + $chn = ($i < ($numchars - 1)) ? $unicode[($i + 1)] : 0; + if (in_array($ch0, $tonemark)) { + if ($chn == 0x0e33) { + // sara um + if (in_array($ch1, $longtail)) { + // tonemark at upper left + $output[] = $this->replaceChar($ch0, (0xf713 + $ch0 - 0x0e48)); + } else { + // tonemark at upper right (normal position) + $output[] = $ch0; + } + } elseif (in_array($ch1, $longtail) OR (in_array($ch2, $longtail) AND in_array($ch1, $lowvowel))) { + // tonemark at lower left + $output[] = $this->replaceChar($ch0, (0xf705 + $ch0 - 0x0e48)); + } elseif (in_array($ch1, $upvowel)) { + if (in_array($ch2, $longtail)) { + // tonemark at upper left + $output[] = $this->replaceChar($ch0, (0xf713 + $ch0 - 0x0e48)); + } else { + // tonemark at upper right (normal position) + $output[] = $ch0; + } + } else { + // tonemark at lower right + $output[] = $this->replaceChar($ch0, (0xf70a + $ch0 - 0x0e48)); + } + } elseif (($ch0 == 0x0e33) AND (in_array($ch1, $longtail) OR (in_array($ch2, $longtail) AND in_array($ch1, $tonemark)))) { + // add lower left nikhahit and sara aa + if ($this->isCharDefined(0xf711) AND $this->isCharDefined(0x0e32)) { + $output[] = 0xf711; + $this->CurrentFont['subsetchars'][0xf711] = true; + $output[] = 0x0e32; + $this->CurrentFont['subsetchars'][0x0e32] = true; + } else { + $output[] = $ch0; + } + } elseif (in_array($ch1, $longtail)) { + if ($ch0 == 0x0e31) { + // lower left mai hun arkad + $output[] = $this->replaceChar($ch0, 0xf710); + } elseif (in_array($ch0, $upvowel)) { + // lower left + $output[] = $this->replaceChar($ch0, (0xf701 + $ch0 - 0x0e34)); + } elseif ($ch0 == 0x0e47) { + // lower left mai tai koo + $output[] = $this->replaceChar($ch0, 0xf712); + } else { + // normal character + $output[] = $ch0; + } + } elseif (in_array($ch1, $lowtail) AND in_array($ch0, $lowvowel)) { + // lower vowel + $output[] = $this->replaceChar($ch0, (0xf718 + $ch0 - 0x0e38)); + } elseif (($ch0 == 0x0e0d) AND in_array($chn, $lowvowel)) { + // yo ying without lower part + $output[] = $this->replaceChar($ch0, 0xf70f); + } elseif (($ch0 == 0x0e10) AND in_array($chn, $lowvowel)) { + // tho santan without lower part + $output[] = $this->replaceChar($ch0, 0xf700); + } else { + $output[] = $ch0; + } + } else { + // non-thai character + $output[] = $unicode[$i]; + } + } + $unicode = $output; + // update font subsetchars + $this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']); + } // end of K_THAI_TOPCHARS + $txt2 = TCPDF_FONTS::arrUTF8ToUTF16BE($unicode, false); + } + } + $txt2 = TCPDF_STATIC::_escape($txt2); + // get current text width (considering general font stretching and spacing) + $txwidth = $this->GetStringWidth($txt); + $width = $txwidth; + // check for stretch mode + if ($stretch > 0) { + // calculate ratio between cell width and text width + if ($width <= 0) { + $ratio = 1; + } else { + $ratio = (($w - $this->cell_padding['L'] - $this->cell_padding['R']) / $width); + } + // check if stretching is required + if (($ratio < 1) OR (($ratio > 1) AND (($stretch % 2) == 0))) { + // the text will be stretched to fit cell width + if ($stretch > 2) { + // set new character spacing + $this->font_spacing += ($w - $this->cell_padding['L'] - $this->cell_padding['R'] - $width) / (max(($this->GetNumChars($txt) - 1), 1) * ($this->font_stretching / 100)); + } else { + // set new horizontal stretching + $this->font_stretching *= $ratio; + } + // recalculate text width (the text fills the entire cell) + $width = $w - $this->cell_padding['L'] - $this->cell_padding['R']; + // reset alignment + $align = ''; + } + } + if ($this->font_stretching != 100) { + // apply font stretching + $rs .= sprintf('BT %F Tz ET ', $this->font_stretching); + } + if ($this->font_spacing != 0) { + // increase/decrease font spacing + $rs .= sprintf('BT %F Tc ET ', ($this->font_spacing * $this->k)); + } + if ($this->ColorFlag AND ($this->textrendermode < 4)) { + $s .= 'q '.$this->TextColor.' '; + } + // rendering mode + $s .= sprintf('BT %d Tr %F w ET ', $this->textrendermode, ($this->textstrokewidth * $this->k)); + // count number of spaces + $ns = substr_count($txt, chr(32)); + // Justification + $spacewidth = 0; + if (($align == 'J') AND ($ns > 0)) { + if ($this->isUnicodeFont()) { + // get string width without spaces + $width = $this->GetStringWidth(str_replace(' ', '', $txt)); + // calculate average space width + $spacewidth = -1000 * ($w - $width - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1) / ($this->FontSize?$this->FontSize:1); + if ($this->font_stretching != 100) { + // word spacing is affected by stretching + $spacewidth /= ($this->font_stretching / 100); + } + // set word position to be used with TJ operator + $txt2 = str_replace(chr(0).chr(32), ') '.sprintf('%F', $spacewidth).' (', $txt2); + $unicode_justification = true; + } else { + // get string width + $width = $txwidth; + // new space width + $spacewidth = (($w - $width - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1)) * $this->k; + if ($this->font_stretching != 100) { + // word spacing (Tw) is affected by stretching + $spacewidth /= ($this->font_stretching / 100); + } + // set word spacing + $rs .= sprintf('BT %F Tw ET ', $spacewidth); + } + $width = $w - $this->cell_padding['L'] - $this->cell_padding['R']; + } + // replace carriage return characters + $txt2 = str_replace("\r", ' ', $txt2); + switch ($align) { + case 'C': { + $dx = ($w - $width) / 2; + break; + } + case 'R': { + if ($this->rtl) { + $dx = $this->cell_padding['R']; + } else { + $dx = $w - $width - $this->cell_padding['R']; + } + break; + } + case 'L': { + if ($this->rtl) { + $dx = $w - $width - $this->cell_padding['L']; + } else { + $dx = $this->cell_padding['L']; + } + break; + } + case 'J': + default: { + if ($this->rtl) { + $dx = $this->cell_padding['R']; + } else { + $dx = $this->cell_padding['L']; + } + break; + } + } + if ($this->rtl) { + $xdx = $x - $dx - $width; + } else { + $xdx = $x + $dx; + } + $xdk = $xdx * $k; + // print text + $s .= sprintf('BT %F %F Td [(%s)] TJ ET', $xdk, (($this->h - $basefonty) * $k), $txt2); + if (isset($uniblock)) { + // print overlapping characters as separate string + $xshift = 0; // horizontal shift + $ty = (($this->h - $basefonty + (0.2 * $this->FontSize)) * $k); + $spw = (($w - $txwidth - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1)); + foreach ($uniblock as $uk => $uniarr) { + if (($uk % 2) == 0) { + // x space to skip + if ($spacewidth != 0) { + // justification shift + $xshift += (count(array_keys($uniarr, 32)) * $spw); + } + $xshift += $this->GetArrStringWidth($uniarr); // + shift justification + } else { + // character to print + $topchr = TCPDF_FONTS::arrUTF8ToUTF16BE($uniarr, false); + $topchr = TCPDF_STATIC::_escape($topchr); + $s .= sprintf(' BT %F %F Td [(%s)] TJ ET', ($xdk + ($xshift * $k)), $ty, $topchr); + } + } + } + if ($this->underline) { + $s .= ' '.$this->_dounderlinew($xdx, $basefonty, $width); + } + if ($this->linethrough) { + $s .= ' '.$this->_dolinethroughw($xdx, $basefonty, $width); + } + if ($this->overline) { + $s .= ' '.$this->_dooverlinew($xdx, $basefonty, $width); + } + if ($this->ColorFlag AND ($this->textrendermode < 4)) { + $s .= ' Q'; + } + if ($link) { + $this->Link($xdx, $yt, $width, ($this->FontAscent + $this->FontDescent), $link, $ns); + } + } + // output cell + if ($s) { + // output cell + $rs .= $s; + if ($this->font_spacing != 0) { + // reset font spacing mode + $rs .= ' BT 0 Tc ET'; + } + if ($this->font_stretching != 100) { + // reset font stretching mode + $rs .= ' BT 100 Tz ET'; + } + } + // reset word spacing + if (!$this->isUnicodeFont() AND ($align == 'J')) { + $rs .= ' BT 0 Tw ET'; + } + // reset stretching and spacing + $this->font_stretching = $prev_font_stretching; + $this->font_spacing = $prev_font_spacing; + $this->lasth = $h; + if ($ln > 0) { + //Go to the beginning of the next line + $this->y = $y + $h + $this->cell_margin['B']; + if ($ln == 1) { + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + } + } else { + // go left or right by case + if ($this->rtl) { + $this->x = $x - $w - $this->cell_margin['L']; + } else { + $this->x = $x + $w + $this->cell_margin['R']; + } + } + $gstyles = ''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor."\n"; + $rs = $gstyles.$rs; + $this->cell_padding = $prev_cell_padding; + $this->cell_margin = $prev_cell_margin; + return $rs; + } + + /** + * Replace a char if is defined on the current font. + * @param int $oldchar Integer code (unicode) of the character to replace. + * @param int $newchar Integer code (unicode) of the new character. + * @return int the replaced char or the old char in case the new char i not defined + * @protected + * @since 5.9.167 (2012-06-22) + */ + protected function replaceChar($oldchar, $newchar) { + if ($this->isCharDefined($newchar)) { + // add the new char on the subset list + $this->CurrentFont['subsetchars'][$newchar] = true; + // return the new character + return $newchar; + } + // return the old char + return $oldchar; + } + + /** + * Returns the code to draw the cell border + * @param float $x X coordinate. + * @param float $y Y coordinate. + * @param float $w Cell width. + * @param float $h Cell height. + * @param string|array|int $brd Indicates if borders must be drawn around the cell. The value can be a number:
        • 0: no border (default)
        • 1: frame
        or a string containing some or all of the following characters (in any order):
        • L: left
        • T: top
        • R: right
        • B: bottom
        or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @return string containing cell border code + * @protected + * @see SetLineStyle() + * @since 5.7.000 (2010-08-02) + */ + protected function getCellBorder($x, $y, $w, $h, $brd) { + $s = ''; // string to be returned + if (empty($brd)) { + return $s; + } + if ($brd == 1) { + $brd = array('LRTB' => true); + } + // calculate coordinates for border + $k = $this->k; + if ($this->rtl) { + $xeL = ($x - $w) * $k; + $xeR = $x * $k; + } else { + $xeL = $x * $k; + $xeR = ($x + $w) * $k; + } + $yeL = (($this->h - ($y + $h)) * $k); + $yeT = (($this->h - $y) * $k); + $xeT = $xeL; + $xeB = $xeR; + $yeR = $yeT; + $yeB = $yeL; + if (is_string($brd)) { + // convert string to array + $slen = strlen($brd); + $newbrd = array(); + for ($i = 0; $i < $slen; ++$i) { + $newbrd[$brd[$i]] = array('cap' => 'square', 'join' => 'miter'); + } + $brd = $newbrd; + } + if (isset($brd['mode'])) { + $mode = $brd['mode']; + unset($brd['mode']); + } else { + $mode = 'normal'; + } + foreach ($brd as $border => $style) { + if (is_array($style) AND !empty($style)) { + // apply border style + $prev_style = $this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '; + $s .= $this->setLineStyle($style, true)."\n"; + } + switch ($mode) { + case 'ext': { + $off = (($this->LineWidth / 2) * $k); + $xL = $xeL - $off; + $xR = $xeR + $off; + $yT = $yeT + $off; + $yL = $yeL - $off; + $xT = $xL; + $xB = $xR; + $yR = $yT; + $yB = $yL; + $w += $this->LineWidth; + $h += $this->LineWidth; + break; + } + case 'int': { + $off = ($this->LineWidth / 2) * $k; + $xL = $xeL + $off; + $xR = $xeR - $off; + $yT = $yeT - $off; + $yL = $yeL + $off; + $xT = $xL; + $xB = $xR; + $yR = $yT; + $yB = $yL; + $w -= $this->LineWidth; + $h -= $this->LineWidth; + break; + } + case 'normal': + default: { + $xL = $xeL; + $xT = $xeT; + $xB = $xeB; + $xR = $xeR; + $yL = $yeL; + $yT = $yeT; + $yB = $yeB; + $yR = $yeR; + break; + } + } + // draw borders by case + if (strlen($border) == 4) { + $s .= sprintf('%F %F %F %F re S ', $xT, $yT, ($w * $k), (-$h * $k)); + } elseif (strlen($border) == 3) { + if (strpos($border,'B') === false) { // LTR + $s .= sprintf('%F %F m ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= 'S '; + } elseif (strpos($border,'L') === false) { // TRB + $s .= sprintf('%F %F m ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= 'S '; + } elseif (strpos($border,'T') === false) { // RBL + $s .= sprintf('%F %F m ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= 'S '; + } elseif (strpos($border,'R') === false) { // BLT + $s .= sprintf('%F %F m ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= 'S '; + } + } elseif (strlen($border) == 2) { + if ((strpos($border,'L') !== false) AND (strpos($border,'T') !== false)) { // LT + $s .= sprintf('%F %F m ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= 'S '; + } elseif ((strpos($border,'T') !== false) AND (strpos($border,'R') !== false)) { // TR + $s .= sprintf('%F %F m ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= 'S '; + } elseif ((strpos($border,'R') !== false) AND (strpos($border,'B') !== false)) { // RB + $s .= sprintf('%F %F m ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= 'S '; + } elseif ((strpos($border,'B') !== false) AND (strpos($border,'L') !== false)) { // BL + $s .= sprintf('%F %F m ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= 'S '; + } elseif ((strpos($border,'L') !== false) AND (strpos($border,'R') !== false)) { // LR + $s .= sprintf('%F %F m ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= 'S '; + $s .= sprintf('%F %F m ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= 'S '; + } elseif ((strpos($border,'T') !== false) AND (strpos($border,'B') !== false)) { // TB + $s .= sprintf('%F %F m ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= 'S '; + $s .= sprintf('%F %F m ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= 'S '; + } + } else { // strlen($border) == 1 + if (strpos($border,'L') !== false) { // L + $s .= sprintf('%F %F m ', $xL, $yL); + $s .= sprintf('%F %F l ', $xT, $yT); + $s .= 'S '; + } elseif (strpos($border,'T') !== false) { // T + $s .= sprintf('%F %F m ', $xT, $yT); + $s .= sprintf('%F %F l ', $xR, $yR); + $s .= 'S '; + } elseif (strpos($border,'R') !== false) { // R + $s .= sprintf('%F %F m ', $xR, $yR); + $s .= sprintf('%F %F l ', $xB, $yB); + $s .= 'S '; + } elseif (strpos($border,'B') !== false) { // B + $s .= sprintf('%F %F m ', $xB, $yB); + $s .= sprintf('%F %F l ', $xL, $yL); + $s .= 'S '; + } + } + if (is_array($style) AND !empty($style)) { + // reset border style to previous value + $s .= "\n".$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor."\n"; + } + } + return $s; + } + + /** + * This method allows printing text with line breaks. + * They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.
        + * Text can be aligned, centered or justified. The cell block can be framed and the background painted. + * @param float $w Width of cells. If 0, they extend up to the right margin of the page. + * @param float $h Cell minimum height. The cell extends automatically if needed. + * @param string $txt String to print + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
        • 0: no border (default)
        • 1: frame
        or a string containing some or all of the following characters (in any order):
        • L: left
        • T: top
        • R: right
        • B: bottom
        or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param string $align Allows to center or align the text. Possible values are:
        • L or empty string: left align
        • C: center
        • R: right align
        • J: justification (default value when $ishtml=false)
        + * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). + * @param int $ln Indicates where the current position should go after the call. Possible values are:
        • 0: to the right
        • 1: to the beginning of the next line [DEFAULT]
        • 2: below
        + * @param float|null $x x position in user units + * @param float|null $y y position in user units + * @param boolean $reseth if true reset the last cell height (default true). + * @param int $stretch font stretch mode:
        • 0 = disabled
        • 1 = horizontal scaling only if text is larger than cell width
        • 2 = forced horizontal scaling to fit cell width
        • 3 = character spacing only if text is larger than cell width
        • 4 = forced character spacing to fit cell width
        General font stretching and scaling values will be preserved when possible. + * @param boolean $ishtml INTERNAL USE ONLY -- set to true if $txt is HTML content (default = false). Never set this parameter to true, use instead writeHTMLCell() or writeHTML() methods. + * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width. + * @param float $maxh maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. This feature works only when $ishtml=false. + * @param string $valign Vertical alignment of text (requires $maxh = $h > 0). Possible values are:
        • T: TOP
        • M: middle
        • B: bottom
        . This feature works only when $ishtml=false and the cell must fit in a single page. + * @param boolean $fitcell if true attempt to fit all the text within the cell by reducing the font size (do not work in HTML mode). $maxh must be greater than 0 and equal to $h. + * @return int Return the number of cells or 1 for html mode. + * @public + * @since 1.3 + * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak() + */ + public function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false, $ln=1, $x=null, $y=null, $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0, $valign='T', $fitcell=false) { + $prev_cell_margin = $this->cell_margin; + $prev_cell_padding = $this->cell_padding; + // adjust internal padding + $this->adjustCellPadding($border); + $mc_padding = $this->cell_padding; + $mc_margin = $this->cell_margin; + $this->cell_padding['T'] = 0; + $this->cell_padding['B'] = 0; + $this->setCellMargins(0, 0, 0, 0); + if (TCPDF_STATIC::empty_string($this->lasth) OR $reseth) { + // reset row height + $this->resetLastH(); + } + if (!TCPDF_STATIC::empty_string($y)) { + $this->setY($y); // set y in order to convert negative y values to positive ones + } + $y = $this->GetY(); + $resth = 0; + if (($h > 0) AND $this->inPageBody() AND (($y + $h + $mc_margin['T'] + $mc_margin['B']) > $this->PageBreakTrigger)) { + // spit cell in more pages/columns + $newh = ($this->PageBreakTrigger - $y); + $resth = ($h - $newh); // cell to be printed on the next page/column + $h = $newh; + } + // get current page number + $startpage = $this->page; + // get current column + $startcolumn = $this->current_column; + if (!TCPDF_STATIC::empty_string($x)) { + $this->setX($x); + } else { + $x = $this->GetX(); + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions(0, $x, $y); + // apply margins + $oy = $y + $mc_margin['T']; + if ($this->rtl) { + $ox = ($this->w - $x - $mc_margin['R']); + } else { + $ox = ($x + $mc_margin['L']); + } + $this->x = $ox; + $this->y = $oy; + // set width + if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = ($this->x - $this->lMargin - $mc_margin['L']); + } else { + $w = ($this->w - $this->x - $this->rMargin - $mc_margin['R']); + } + } + // store original margin values + $lMargin = $this->lMargin; + $rMargin = $this->rMargin; + if ($this->rtl) { + $this->rMargin = ($this->w - $this->x); + $this->lMargin = ($this->x - $w); + } else { + $this->lMargin = ($this->x); + $this->rMargin = ($this->w - $this->x - $w); + } + $this->clMargin = $this->lMargin; + $this->crMargin = $this->rMargin; + if ($autopadding) { + // add top padding + $this->y += $mc_padding['T']; + } + if ($ishtml) { // ******* Write HTML text + $this->writeHTML($txt, true, false, $reseth, true, $align); + $nl = 1; + } else { // ******* Write simple text + $prev_FontSizePt = $this->FontSizePt; + if ($fitcell) { + // ajust height values + $tobottom = ($this->h - $this->y - $this->bMargin - $this->cell_padding['T'] - $this->cell_padding['B']); + $h = $maxh = max(min($h, $tobottom), min($maxh, $tobottom)); + } + // vertical alignment + if ($maxh > 0) { + // get text height + $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border); + if ($fitcell AND ($text_height > $maxh) AND ($this->FontSizePt > 1)) { + // try to reduce font size to fit text on cell (use a quick search algorithm) + $fmin = 1; + $fmax = $this->FontSizePt; + $diff_epsilon = (1 / $this->k); // one point (min resolution) + $maxit = (2 * min(100, max(10, intval($fmax)))); // max number of iterations + while ($maxit >= 0) { + $fmid = (($fmax + $fmin) / 2); + $this->setFontSize($fmid, false); + $this->resetLastH(); + $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border); + $diff = ($maxh - $text_height); + if ($diff >= 0) { + if ($diff <= $diff_epsilon) { + break; + } + $fmin = $fmid; + } else { + $fmax = $fmid; + } + --$maxit; + } + if ($maxit < 0) { + // premature exit, we get the minimum font value to fit the cell + $this->setFontSize($fmin); + $this->resetLastH(); + $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border); + } else { + $this->setFontSize($fmid); + $this->resetLastH(); + } + } + if ($text_height < $maxh) { + if ($valign == 'M') { + // text vertically centered + $this->y += (($maxh - $text_height) / 2); + } elseif ($valign == 'B') { + // text vertically aligned on bottom + $this->y += ($maxh - $text_height); + } + } + } + $nl = $this->Write($this->lasth, $txt, '', 0, $align, true, $stretch, false, true, $maxh, 0, $mc_margin); + if ($fitcell) { + // restore font size + $this->setFontSize($prev_FontSizePt); + } + } + if ($autopadding) { + // add bottom padding + $this->y += $mc_padding['B']; + } + // Get end-of-text Y position + $currentY = $this->y; + // get latest page number + $endpage = $this->page; + if ($resth > 0) { + $skip = ($endpage - $startpage); + $tmpresth = $resth; + while ($tmpresth > 0) { + if ($skip <= 0) { + // add a page (or trig AcceptPageBreak() for multicolumn mode) + $this->checkPageBreak($this->PageBreakTrigger + 1); + } + if ($this->num_columns > 1) { + $tmpresth -= ($this->h - $this->y - $this->bMargin); + } else { + $tmpresth -= ($this->h - $this->tMargin - $this->bMargin); + } + --$skip; + } + $currentY = $this->y; + $endpage = $this->page; + } + // get latest column + $endcolumn = $this->current_column; + if ($this->num_columns == 0) { + $this->num_columns = 1; + } + // disable page regions check + $check_page_regions = $this->check_page_regions; + $this->check_page_regions = false; + // get border modes + $border_start = TCPDF_STATIC::getBorderMode($border, $position='start', $this->opencell); + $border_end = TCPDF_STATIC::getBorderMode($border, $position='end', $this->opencell); + $border_middle = TCPDF_STATIC::getBorderMode($border, $position='middle', $this->opencell); + // design borders around HTML cells. + for ($page = $startpage; $page <= $endpage; ++$page) { // for each page + $ccode = ''; + $this->setPage($page); + if ($this->num_columns < 2) { + // single-column mode + $this->setX($x); + $this->y = $this->tMargin; + } + // account for margin changes + if ($page > $startpage) { + if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) { + $this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']); + } elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) { + $this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']); + } + } + if ($startpage == $endpage) { + // single page + for ($column = $startcolumn; $column <= $endcolumn; ++$column) { // for each column + if ($column != $this->current_column) { + $this->selectColumn($column); + } + if ($this->rtl) { + $this->x -= $mc_margin['R']; + } else { + $this->x += $mc_margin['L']; + } + if ($startcolumn == $endcolumn) { // single column + $cborder = $border; + $h = max($h, ($currentY - $oy)); + $this->y = $oy; + } elseif ($column == $startcolumn) { // first column + $cborder = $border_start; + $this->y = $oy; + $h = $this->h - $this->y - $this->bMargin; + } elseif ($column == $endcolumn) { // end column + $cborder = $border_end; + $h = $currentY - $this->y; + if ($resth > $h) { + $h = $resth; + } + } else { // middle column + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + $resth -= $h; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } elseif ($page == $startpage) { // first page + for ($column = $startcolumn; $column < $this->num_columns; ++$column) { // for each column + if ($column != $this->current_column) { + $this->selectColumn($column); + } + if ($this->rtl) { + $this->x -= $mc_margin['R']; + } else { + $this->x += $mc_margin['L']; + } + if ($column == $startcolumn) { // first column + $cborder = $border_start; + $this->y = $oy; + $h = $this->h - $this->y - $this->bMargin; + } else { // middle column + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + $resth -= $h; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } elseif ($page == $endpage) { // last page + for ($column = 0; $column <= $endcolumn; ++$column) { // for each column + if ($column != $this->current_column) { + $this->selectColumn($column); + } + if ($this->rtl) { + $this->x -= $mc_margin['R']; + } else { + $this->x += $mc_margin['L']; + } + if ($column == $endcolumn) { + // end column + $cborder = $border_end; + $h = $currentY - $this->y; + if ($resth > $h) { + $h = $resth; + } + } else { + // middle column + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + $resth -= $h; + } + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } else { // middle page + for ($column = 0; $column < $this->num_columns; ++$column) { // for each column + $this->selectColumn($column); + if ($this->rtl) { + $this->x -= $mc_margin['R']; + } else { + $this->x += $mc_margin['L']; + } + $cborder = $border_middle; + $h = $this->h - $this->y - $this->bMargin; + $resth -= $h; + $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; + } // end for each column + } + if ($cborder OR $fill) { + $offsetlen = strlen($ccode); + // draw border and fill + if ($this->inxobj) { + // we are inside an XObject template + if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) { + $pagemarkkey = key($this->xobjects[$this->xobjid]['transfmrk']); + $pagemark = $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey]; + $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey] += $offsetlen; + } else { + $pagemark = $this->xobjects[$this->xobjid]['intmrk']; + $this->xobjects[$this->xobjid]['intmrk'] += $offsetlen; + } + $pagebuff = $this->xobjects[$this->xobjid]['outdata']; + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->xobjects[$this->xobjid]['outdata'] = $pstart.$ccode.$pend; + } else { + if (end($this->transfmrk[$this->page]) !== false) { + $pagemarkkey = key($this->transfmrk[$this->page]); + $pagemark = $this->transfmrk[$this->page][$pagemarkkey]; + $this->transfmrk[$this->page][$pagemarkkey] += $offsetlen; + } elseif ($this->InFooter) { + $pagemark = $this->footerpos[$this->page]; + $this->footerpos[$this->page] += $offsetlen; + } else { + $pagemark = $this->intmrk[$this->page]; + $this->intmrk[$this->page] += $offsetlen; + } + $pagebuff = $this->getPageBuffer($this->page); + $pstart = substr($pagebuff, 0, $pagemark); + $pend = substr($pagebuff, $pagemark); + $this->setPageBuffer($this->page, $pstart.$ccode.$pend); + } + } + } // end for each page + // restore page regions check + $this->check_page_regions = $check_page_regions; + // Get end-of-cell Y position + $currentY = $this->GetY(); + // restore previous values + if ($this->num_columns > 1) { + $this->selectColumn(); + } else { + // restore original margins + $this->lMargin = $lMargin; + $this->rMargin = $rMargin; + if ($this->page > $startpage) { + // check for margin variations between pages (i.e. booklet mode) + $dl = ($this->pagedim[$this->page]['olm'] - $this->pagedim[$startpage]['olm']); + $dr = ($this->pagedim[$this->page]['orm'] - $this->pagedim[$startpage]['orm']); + if (($dl != 0) OR ($dr != 0)) { + $this->lMargin += $dl; + $this->rMargin += $dr; + } + } + } + if ($ln > 0) { + //Go to the beginning of the next line + $this->setY($currentY + $mc_margin['B']); + if ($ln == 2) { + $this->setX($x + $w + $mc_margin['L'] + $mc_margin['R']); + } + } else { + // go left or right by case + $this->setPage($startpage); + $this->y = $y; + $this->setX($x + $w + $mc_margin['L'] + $mc_margin['R']); + } + $this->setContentMark(); + $this->cell_padding = $prev_cell_padding; + $this->cell_margin = $prev_cell_margin; + $this->clMargin = $this->lMargin; + $this->crMargin = $this->rMargin; + return $nl; + } + + /** + * This method return the estimated number of lines for print a simple text string using Multicell() method. + * @param string $txt String for calculating his height + * @param float $w Width of cells. If 0, they extend up to the right margin of the page. + * @param boolean $reseth if true reset the last cell height (default false). + * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width (default true). + * @param array|null $cellpadding Internal cell padding, if empty uses default cell padding. + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
        • 0: no border (default)
        • 1: frame
        or a string containing some or all of the following characters (in any order):
        • L: left
        • T: top
        • R: right
        • B: bottom
        or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @return float Return the minimal height needed for multicell method for printing the $txt param. + * @author Alexander Escalona Fern\E1ndez, Nicola Asuni + * @public + * @since 4.5.011 + */ + public function getNumLines($txt, $w=0, $reseth=false, $autopadding=true, $cellpadding=null, $border=0) { + if ($txt === NULL) { + return 0; + } + if ($txt === '') { + // empty string + return 1; + } + // adjust internal padding + $prev_cell_padding = $this->cell_padding; + $prev_lasth = $this->lasth; + if (is_array($cellpadding)) { + $this->cell_padding = $cellpadding; + } + $this->adjustCellPadding($border); + if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + } + $wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R']; + if ($reseth) { + // reset row height + $this->resetLastH(); + } + $lines = 1; + $sum = 0; + $chars = TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($txt, $this->isunicode, $this->CurrentFont), $txt, $this->tmprtl, $this->isunicode, $this->CurrentFont); + $charsWidth = $this->GetArrStringWidth($chars, '', '', 0, true); + $length = count($chars); + $lastSeparator = -1; + for ($i = 0; $i < $length; ++$i) { + $c = $chars[$i]; + $charWidth = $charsWidth[$i]; + if (($c != 160) + AND (($c == 173) + OR preg_match($this->re_spaces, TCPDF_FONTS::unichr($c, $this->isunicode)) + OR (($c == 45) + AND ($i > 0) AND ($i < ($length - 1)) + AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i - 1)], $this->isunicode)) + AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i + 1)], $this->isunicode)) + ) + ) + ) { + $lastSeparator = $i; + } + if ((($sum + $charWidth) > $wmax) OR ($c == 10)) { + ++$lines; + if ($c == 10) { + $lastSeparator = -1; + $sum = 0; + } elseif ($lastSeparator != -1) { + $i = $lastSeparator; + $lastSeparator = -1; + $sum = 0; + } else { + $sum = $charWidth; + } + } else { + $sum += $charWidth; + } + } + if ($chars[($length - 1)] == 10) { + --$lines; + } + $this->cell_padding = $prev_cell_padding; + $this->lasth = $prev_lasth; + return $lines; + } + + /** + * This method return the estimated height needed for printing a simple text string using the Multicell() method. + * Generally, if you want to know the exact height for a block of content you can use the following alternative technique: + * @pre + * // store current object + * $pdf->startTransaction(); + * // store starting values + * $start_y = $pdf->GetY(); + * $start_page = $pdf->getPage(); + * // call your printing functions with your parameters + * // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + * $pdf->MultiCell($w=0, $h=0, $txt, $border=1, $align='L', $fill=false, $ln=1, $x=null, $y=null, $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0); + * // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + * // get the new Y + * $end_y = $pdf->GetY(); + * $end_page = $pdf->getPage(); + * // calculate height + * $height = 0; + * if ($end_page == $start_page) { + * $height = $end_y - $start_y; + * } else { + * for ($page=$start_page; $page <= $end_page; ++$page) { + * $this->setPage($page); + * if ($page == $start_page) { + * // first page + * $height += $this->h - $start_y - $this->bMargin; + * } elseif ($page == $end_page) { + * // last page + * $height += $end_y - $this->tMargin; + * } else { + * $height += $this->h - $this->tMargin - $this->bMargin; + * } + * } + * } + * // restore previous object + * $pdf = $pdf->rollbackTransaction(); + * + * @param float $w Width of cells. If 0, they extend up to the right margin of the page. + * @param string $txt String for calculating his height + * @param boolean $reseth if true reset the last cell height (default false). + * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width (default true). + * @param array|null $cellpadding Internal cell padding, if empty uses default cell padding. + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
        • 0: no border (default)
        • 1: frame
        or a string containing some or all of the following characters (in any order):
        • L: left
        • T: top
        • R: right
        • B: bottom
        or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @return float Return the minimal height needed for multicell method for printing the $txt param. + * @author Nicola Asuni, Alexander Escalona Fern\E1ndez + * @public + */ + public function getStringHeight($w, $txt, $reseth=false, $autopadding=true, $cellpadding=null, $border=0) { + // adjust internal padding + $prev_cell_padding = $this->cell_padding; + $prev_lasth = $this->lasth; + if (is_array($cellpadding)) { + $this->cell_padding = $cellpadding; + } + $this->adjustCellPadding($border); + $lines = $this->getNumLines($txt, $w, $reseth, $autopadding, $cellpadding, $border); + $height = $this->getCellHeight(($lines * $this->FontSize), $autopadding); + $this->cell_padding = $prev_cell_padding; + $this->lasth = $prev_lasth; + return $height; + } + + /** + * This method prints text from the current position.
        + * @param float $h Line height + * @param string $txt String to print + * @param mixed $link URL or identifier returned by AddLink() + * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). + * @param string $align Allows to center or align the text. Possible values are:
        • L or empty string: left align (default value)
        • C: center
        • R: right align
        • J: justify
        + * @param boolean $ln if true set cursor at the bottom of the line, otherwise set cursor at the top of the line. + * @param int $stretch font stretch mode:
        • 0 = disabled
        • 1 = horizontal scaling only if text is larger than cell width
        • 2 = forced horizontal scaling to fit cell width
        • 3 = character spacing only if text is larger than cell width
        • 4 = forced character spacing to fit cell width
        General font stretching and scaling values will be preserved when possible. + * @param boolean $firstline if true prints only the first line and return the remaining string. + * @param boolean $firstblock if true the string is the starting of a line. + * @param float $maxh maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. + * @param float $wadj first line width will be reduced by this amount (used in HTML mode). + * @param array|null $margin margin array of the parent container + * @return mixed Return the number of cells or the remaining string if $firstline = true. + * @public + * @since 1.5 + */ + public function Write($h, $txt, $link='', $fill=false, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0, $wadj=0, $margin=null) { + // check page for no-write regions and adapt page margins if necessary + list($this->x, $this->y) = $this->checkPageRegions($h, $this->x, $this->y); + if (strlen($txt) == 0) { + // fix empty text + $txt = ' '; + } + if (!is_array($margin)) { + // set default margins + $margin = $this->cell_margin; + } + // remove carriage returns + $s = str_replace("\r", '', $txt); + // check if string contains arabic text + if (preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_ARABIC, $s)) { + $arabic = true; + } else { + $arabic = false; + } + // check if string contains RTL text + if ($arabic OR ($this->tmprtl == 'R') OR preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_RTL, $s)) { + $rtlmode = true; + } else { + $rtlmode = false; + } + // get a char width + $chrwidth = $this->GetCharWidth(46); // dot character + // get array of unicode values + $chars = TCPDF_FONTS::UTF8StringToArray($s, $this->isunicode, $this->CurrentFont); + // calculate maximum width for a single character on string + $chrw = $this->GetArrStringWidth($chars, '', '', 0, true); + array_walk($chrw, array($this, 'getRawCharWidth')); + $maxchwidth = max($chrw); + // get array of chars + $uchars = TCPDF_FONTS::UTF8ArrayToUniArray($chars, $this->isunicode); + // get the number of characters + $nb = count($chars); + // replacement for SHY character (minus symbol) + $shy_replacement = 45; + $shy_replacement_char = TCPDF_FONTS::unichr($shy_replacement, $this->isunicode); + // widht for SHY replacement + $shy_replacement_width = $this->GetCharWidth($shy_replacement); + // page width + $pw = $w = $this->w - $this->lMargin - $this->rMargin; + // calculate remaining line width ($w) + if ($this->rtl) { + $w = $this->x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $this->x; + } + // max column width + $wmax = ($w - $wadj); + if (!$firstline) { + $wmax -= ($this->cell_padding['L'] + $this->cell_padding['R']); + } + if ((!$firstline) AND (($chrwidth > $wmax) OR ($maxchwidth > $wmax))) { + // the maximum width character do not fit on column + return ''; + } + // minimum row height + $row_height = max($h, $this->getCellHeight($this->FontSize)); + // max Y + $maxy = $this->y + $maxh - max($row_height, $h); + $start_page = $this->page; + $i = 0; // character position + $j = 0; // current starting position + $sep = -1; // position of the last blank space + $prevsep = $sep; // previous separator + $shy = false; // true if the last blank is a soft hypen (SHY) + $prevshy = $shy; // previous shy mode + $l = 0; // current string length + $nl = 0; //number of lines + $linebreak = false; + $pc = 0; // previous character + // for each character + while ($i < $nb) { + if (($maxh > 0) AND ($this->y > $maxy) ) { + break; + } + //Get the current character + $c = $chars[$i]; + if ($c == 10) { // 10 = "\n" = new line + //Explicit line break + if ($align == 'J') { + if ($this->rtl) { + $talign = 'R'; + } else { + $talign = 'L'; + } + } else { + $talign = $align; + } + $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $i); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($i - $j)); + if ($rtlmode) { + $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcellpadding = $this->cell_padding; + if ($maxh == 0) { + $this->setCellPadding(0); + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = $this->stringRightTrim($tmpstr); + } + // Skip newlines at the beginning of a page or column + if (!empty($tmpstr) OR ($this->y < ($this->PageBreakTrigger - $row_height))) { + $this->Cell($w, $h, $tmpstr, 0, 1, $talign, $fill, $link, $stretch); + } + unset($tmpstr); + if ($firstline) { + $this->cell_padding = $tmpcellpadding; + return (TCPDF_FONTS::UniArrSubString($uchars, $i)); + } + ++$nl; + $j = $i + 1; + $l = 0; + $sep = -1; + $prevsep = $sep; + $shy = false; + // account for margin changes + if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND ($this->inPageBody())) { + $this->AcceptPageBreak(); + if ($this->rtl) { + $this->x -= $margin['R']; + } else { + $this->x += $margin['L']; + } + $this->lMargin += $margin['L']; + $this->rMargin += $margin['R']; + } + $w = $this->getRemainingWidth(); + $wmax = ($w - $this->cell_padding['L'] - $this->cell_padding['R']); + } else { + // 160 is the non-breaking space. + // 173 is SHY (Soft Hypen). + // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator. + // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants. + // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between. + if (($c != 160) + AND (($c == 173) + OR preg_match($this->re_spaces, TCPDF_FONTS::unichr($c, $this->isunicode)) + OR (($c == 45) + AND ($i < ($nb - 1)) + AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($pc, $this->isunicode)) + AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i + 1)], $this->isunicode)) + ) + ) + ) { + // update last blank space position + $prevsep = $sep; + $sep = $i; + // check if is a SHY + if (($c == 173) OR ($c == 45)) { + $prevshy = $shy; + $shy = true; + if ($pc == 45) { + $tmp_shy_replacement_width = 0; + $tmp_shy_replacement_char = ''; + } else { + $tmp_shy_replacement_width = $shy_replacement_width; + $tmp_shy_replacement_char = $shy_replacement_char; + } + } else { + $shy = false; + } + } + // update string length + if ($this->isUnicodeFont() AND ($arabic)) { + // with bidirectional algorithm some chars may be changed affecting the line length + // *** very slow *** + $l = $this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(array_slice($chars, $j, ($i - $j)), '', $this->tmprtl, $this->isunicode, $this->CurrentFont)); + } else { + $l += $this->GetCharWidth($c, ($i+1 < $nb)); + } + if (($l > $wmax) OR (($c == 173) AND (($l + $tmp_shy_replacement_width) >= $wmax))) { + if (($c == 173) AND (($l + $tmp_shy_replacement_width) > $wmax)) { + $sep = $prevsep; + $shy = $prevshy; + } + // we have reached the end of column + if ($sep == -1) { + // check if the line was already started + if (($this->rtl AND ($this->x <= ($this->w - $this->rMargin - $this->cell_padding['R'] - $margin['R'] - $chrwidth))) + OR ((!$this->rtl) AND ($this->x >= ($this->lMargin + $this->cell_padding['L'] + $margin['L'] + $chrwidth)))) { + // print a void cell and go to next line + $this->Cell($w, $h, '', 0, 1); + $linebreak = true; + if ($firstline) { + return (TCPDF_FONTS::UniArrSubString($uchars, $j)); + } + } else { + // truncate the word because do not fit on column + $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $i); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($i - $j)); + if ($rtlmode) { + $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcellpadding = $this->cell_padding; + if ($maxh == 0) { + $this->setCellPadding(0); + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = $this->stringRightTrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cell_padding = $tmpcellpadding; + return (TCPDF_FONTS::UniArrSubString($uchars, $i)); + } + $j = $i; + --$i; + } + } else { + // word wrapping + if ($this->rtl AND (!$firstblock) AND ($sep < $i)) { + $endspace = 1; + } else { + $endspace = 0; + } + // check the length of the next string + $strrest = TCPDF_FONTS::UniArrSubString($uchars, ($sep + $endspace)); + $nextstr = TCPDF_STATIC::pregSplit('/'.$this->re_space['p'].'/', $this->re_space['m'], $this->stringTrim($strrest)); + if (isset($nextstr[0]) AND ($this->GetStringWidth($nextstr[0]) > $pw)) { + // truncate the word because do not fit on a full page width + $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $i); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($i - $j)); + if ($rtlmode) { + $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = ($startx - $linew); + } else { + $this->endlinex = ($startx + $linew); + } + $w = $linew; + $tmpcellpadding = $this->cell_padding; + if ($maxh == 0) { + $this->setCellPadding(0); + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = $this->stringRightTrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cell_padding = $tmpcellpadding; + return (TCPDF_FONTS::UniArrSubString($uchars, $i)); + } + $j = $i; + --$i; + } else { + // word wrapping + if ($shy) { + // add hypen (minus symbol) at the end of the line + $shy_width = $tmp_shy_replacement_width; + if ($this->rtl) { + $shy_char_left = $tmp_shy_replacement_char; + $shy_char_right = ''; + } else { + $shy_char_left = ''; + $shy_char_right = $tmp_shy_replacement_char; + } + } else { + $shy_width = 0; + $shy_char_left = ''; + $shy_char_right = ''; + } + $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, ($sep + $endspace)); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, (($sep + $endspace) - $j)); + if ($rtlmode) { + $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew - $shy_width; + } else { + $this->endlinex = $startx + $linew + $shy_width; + } + $w = $linew; + $tmpcellpadding = $this->cell_padding; + if ($maxh == 0) { + $this->setCellPadding(0); + } + } + // print the line + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = $this->stringRightTrim($tmpstr); + } + $this->Cell($w, $h, $shy_char_left.$tmpstr.$shy_char_right, 0, 1, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + if ($chars[$sep] == 45) { + $endspace += 1; + } + // return the remaining text + $this->cell_padding = $tmpcellpadding; + return (TCPDF_FONTS::UniArrSubString($uchars, ($sep + $endspace))); + } + $i = $sep; + $sep = -1; + $shy = false; + $j = ($i + 1); + } + } + // account for margin changes + if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND ($this->inPageBody())) { + $this->AcceptPageBreak(); + if ($this->rtl) { + $this->x -= $margin['R']; + } else { + $this->x += $margin['L']; + } + $this->lMargin += $margin['L']; + $this->rMargin += $margin['R']; + } + $w = $this->getRemainingWidth(); + $wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R']; + if ($linebreak) { + $linebreak = false; + } else { + ++$nl; + $l = 0; + } + } + } + // save last character + $pc = $c; + ++$i; + } // end while i < nb + // print last substring (if any) + if ($l > 0) { + switch ($align) { + case 'J': + case 'C': { + break; + } + case 'L': { + if (!$this->rtl) { + $w = $l; + } + break; + } + case 'R': { + if ($this->rtl) { + $w = $l; + } + break; + } + default: { + $w = $l; + break; + } + } + $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $nb); + if ($firstline) { + $startx = $this->x; + $tmparr = array_slice($chars, $j, ($nb - $j)); + if ($rtlmode) { + $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); + } + $linew = $this->GetArrStringWidth($tmparr); + unset($tmparr); + if ($this->rtl) { + $this->endlinex = $startx - $linew; + } else { + $this->endlinex = $startx + $linew; + } + $w = $linew; + $tmpcellpadding = $this->cell_padding; + if ($maxh == 0) { + $this->setCellPadding(0); + } + } + if ($firstblock AND $this->isRTLTextDir()) { + $tmpstr = $this->stringRightTrim($tmpstr); + } + $this->Cell($w, $h, $tmpstr, 0, $ln, $align, $fill, $link, $stretch); + unset($tmpstr); + if ($firstline) { + $this->cell_padding = $tmpcellpadding; + return (TCPDF_FONTS::UniArrSubString($uchars, $nb)); + } + ++$nl; + } + if ($firstline) { + return ''; + } + return $nl; + } + + /** + * Returns the remaining width between the current position and margins. + * @return float Return the remaining width + * @protected + */ + protected function getRemainingWidth() { + list($this->x, $this->y) = $this->checkPageRegions(0, $this->x, $this->y); + if ($this->rtl) { + return ($this->x - $this->lMargin); + } else { + return ($this->w - $this->rMargin - $this->x); + } + } + + /** + * Set the block dimensions accounting for page breaks and page/column fitting + * @param float $w width + * @param float $h height + * @param float $x X coordinate + * @param float $y Y coodiante + * @param boolean $fitonpage if true the block is resized to not exceed page dimensions. + * @return array array($w, $h, $x, $y) + * @protected + * @since 5.5.009 (2010-07-05) + */ + protected function fitBlock($w, $h, $x, $y, $fitonpage=false) { + if ($w <= 0) { + // set maximum width + $w = ($this->w - $this->lMargin - $this->rMargin); + if ($w <= 0) { + $w = 1; + } + } + if ($h <= 0) { + // set maximum height + $h = ($this->PageBreakTrigger - $this->tMargin); + if ($h <= 0) { + $h = 1; + } + } + // resize the block to be vertically contained on a single page or single column + if ($fitonpage OR $this->AutoPageBreak) { + $ratio_wh = ($w / $h); + if ($h > ($this->PageBreakTrigger - $this->tMargin)) { + $h = $this->PageBreakTrigger - $this->tMargin; + $w = ($h * $ratio_wh); + } + // resize the block to be horizontally contained on a single page or single column + if ($fitonpage) { + $maxw = ($this->w - $this->lMargin - $this->rMargin); + if ($w > $maxw) { + $w = $maxw; + $h = ($w / $ratio_wh); + } + } + } + // Check whether we need a new page or new column first as this does not fit + $prev_x = $this->x; + $prev_y = $this->y; + if ($this->checkPageBreak($h, $y) OR ($this->y < $prev_y)) { + $y = $this->y; + if ($this->rtl) { + $x += ($prev_x - $this->x); + } else { + $x += ($this->x - $prev_x); + } + $this->newline = true; + } + // resize the block to be contained on the remaining available page or column space + if ($fitonpage) { + $ratio_wh = ($w / $h); + if (($y + $h) > $this->PageBreakTrigger) { + $h = $this->PageBreakTrigger - $y; + $w = ($h * $ratio_wh); + } + if ((!$this->rtl) AND (($x + $w) > ($this->w - $this->rMargin))) { + $w = $this->w - $this->rMargin - $x; + $h = ($w / $ratio_wh); + } elseif (($this->rtl) AND (($x - $w) < ($this->lMargin))) { + $w = $x - $this->lMargin; + $h = ($w / $ratio_wh); + } + } + return array($w, $h, $x, $y); + } + + /** + * Puts an image in the page. + * The upper-left corner must be given. + * The dimensions can be specified in different ways:
          + *
        • explicit width and height (expressed in user unit)
        • + *
        • one explicit dimension, the other being calculated automatically in order to keep the original proportions
        • + *
        • no explicit dimension, in which case the image is put at 72 dpi
        + * Supported formats are JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM; + * The format can be specified explicitly or inferred from the file extension.
        + * It is possible to put a link on the image.
        + * Remark: if an image is used several times, only one copy will be embedded in the file.
        + * @param string $file Name of the file containing the image or a '@' character followed by the image data string. To link an image without embedding it on the document, set an asterisk character before the URL (i.e.: '*http://www.example.com/image.jpg'). + * @param float|null $x Abscissa of the upper-left corner (LTR) or upper-right corner (RTL). + * @param float|null $y Ordinate of the upper-left corner (LTR) or upper-right corner (RTL). + * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension. + * @param mixed $link URL or identifier returned by AddLink(). + * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
        • T: top-right for LTR or top-left for RTL
        • M: middle-right for LTR or middle-left for RTL
        • B: bottom-right for LTR or bottom-left for RTL
        • N: next line
        + * @param mixed $resize If true resize (reduce) the image to fit $w and $h (requires GD or ImageMagick library); if false do not resize; if 2 force resize in all cases (upscaling and downscaling). + * @param int $dpi dot-per-inch resolution used on resize + * @param string $palign Allows to center or align the image on the current line. Possible values are:
        • L : left align
        • C : center
        • R : right align
        • '' : empty string : left for LTR or right for RTL
        + * @param boolean $ismask true if this image is a mask, false otherwise + * @param mixed $imgmask image object returned by this function or false + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
        • 0: no border (default)
        • 1: frame
        or a string containing some or all of the following characters (in any order):
        • L: left
        • T: top
        • R: right
        • B: bottom
        or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param mixed $fitbox If not false scale image dimensions proportionally to fit within the ($w, $h) box. $fitbox can be true or a 2 characters string indicating the image alignment inside the box. The first character indicate the horizontal alignment (L = left, C = center, R = right) the second character indicate the vertical algnment (T = top, M = middle, B = bottom). + * @param boolean $hidden If true do not display the image. + * @param boolean $fitonpage If true the image is resized to not exceed page dimensions. + * @param boolean $alt If true the image will be added as alternative and not directly printed (the ID of the image will be returned). + * @param array $altimgs Array of alternate images IDs. Each alternative image must be an array with two values: an integer representing the image ID (the value returned by the Image method) and a boolean value to indicate if the image is the default for printing. + * @return mixed|false image information + * @public + * @since 1.1 + */ + public function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false, $alt=false, $altimgs=array()) { + if ($this->state != 2) { + return false; + } + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + $exurl = ''; // external streams + $imsize = FALSE; + + // Make sure the file variable is not empty or null because accessing $file[0] later + // results in error when running PHP 7.4 + if (empty($file)) { + return false; + } + // check if we are passing an image as file or string + if ($file[0] === '@') { + // image from string + $imgdata = substr($file, 1); + } else { // image file + if ($file[0] === '*') { + // image as external stream + $file = substr($file, 1); + $exurl = $file; + } + // check if file exist and it is valid + if (!@$this->fileExists($file)) { + return false; + } + if (false !== $info = $this->getImageBuffer($file)) { + $imsize = array($info['w'], $info['h']); + } elseif (($imsize = @getimagesize($file)) === FALSE && strpos($file, '__tcpdf_'.$this->file_id.'_img') === FALSE){ + $imgdata = $this->getCachedFileContents($file); + } + } + if (!empty($imgdata)) { + // copy image to cache + $original_file = $file; + $file = TCPDF_STATIC::getObjFilename('img', $this->file_id); + $fp = TCPDF_STATIC::fopenLocal($file, 'w'); + if (!$fp) { + $this->Error('Unable to write file: '.$file); + } + fwrite($fp, $imgdata); + fclose($fp); + unset($imgdata); + $imsize = @getimagesize($file); + if ($imsize === FALSE) { + unlink($file); + $file = $original_file; + } + } + if ($imsize === FALSE) { + if (($w > 0) AND ($h > 0)) { + // get measures from specified data + $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k; + $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k; + $imsize = array($pw, $ph); + } else { + $this->Error('[Image] Unable to get the size of the image: '.$file); + } + } + // file hash + $filehash = md5($file); + // get original image width and height in pixels + list($pixw, $pixh) = $imsize; + // calculate image width and height on document + if (($w <= 0) AND ($h <= 0)) { + // convert image size to document unit + $w = $this->pixelsToUnits($pixw); + $h = $this->pixelsToUnits($pixh); + } elseif ($w <= 0) { + $w = $h * $pixw / $pixh; + } elseif ($h <= 0) { + $h = $w * $pixh / $pixw; + } elseif (($fitbox !== false) AND ($w > 0) AND ($h > 0)) { + if (strlen($fitbox) !== 2) { + // set default alignment + $fitbox = '--'; + } + // scale image dimensions proportionally to fit within the ($w, $h) box + if ((($w * $pixh) / ($h * $pixw)) < 1) { + // store current height + $oldh = $h; + // calculate new height + $h = $w * $pixh / $pixw; + // height difference + $hdiff = ($oldh - $h); + // vertical alignment + switch (strtoupper($fitbox[1])) { + case 'T': { + break; + } + case 'M': { + $y += ($hdiff / 2); + break; + } + case 'B': { + $y += $hdiff; + break; + } + } + } else { + // store current width + $oldw = $w; + // calculate new width + $w = $h * $pixw / $pixh; + // width difference + $wdiff = ($oldw - $w); + // horizontal alignment + switch (strtoupper($fitbox[0])) { + case 'L': { + if ($this->rtl) { + $x -= $wdiff; + } + break; + } + case 'C': { + if ($this->rtl) { + $x -= ($wdiff / 2); + } else { + $x += ($wdiff / 2); + } + break; + } + case 'R': { + if (!$this->rtl) { + $x += $wdiff; + } + break; + } + } + } + } + // fit the image on available space + list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, $fitonpage); + // calculate new minimum dimensions in pixels + $neww = round($w * $this->k * $dpi / $this->dpi); + $newh = round($h * $this->k * $dpi / $this->dpi); + // check if resize is necessary (resize is used only to reduce the image) + $newsize = ($neww * $newh); + $pixsize = ($pixw * $pixh); + if (intval($resize) == 2) { + $resize = true; + } elseif ($newsize >= $pixsize) { + $resize = false; + } + // check if image has been already added on document + $newimage = true; + if (in_array($file, $this->imagekeys)) { + $newimage = false; + // get existing image data + $info = $this->getImageBuffer($file); + if (strpos($file, '__tcpdf_'.$this->file_id.'_imgmask_') === FALSE) { + // check if the newer image is larger + $oldsize = ($info['w'] * $info['h']); + if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) { + $newimage = true; + } + } + } elseif (($ismask === false) AND ($imgmask === false) AND (strpos($file, '__tcpdf_'.$this->file_id.'_imgmask_') === FALSE)) { + // create temp image file (without alpha channel) + $tempfile_plain = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_plain_'.$filehash; + // create temp alpha file + $tempfile_alpha = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_alpha_'.$filehash; + // check for cached images + if (in_array($tempfile_plain, $this->imagekeys)) { + // get existing image data + $info = $this->getImageBuffer($tempfile_plain); + // check if the newer image is larger + $oldsize = ($info['w'] * $info['h']); + if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) { + $newimage = true; + } else { + $newimage = false; + // embed mask image + $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false); + // embed image, masked with previously embedded mask + return $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask); + } + } + } + if ($newimage) { + //First use of image, get info + $type = strtolower($type); + if ($type == '') { + $type = TCPDF_IMAGES::getImageFileType($file, $imsize); + } elseif ($type == 'jpg') { + $type = 'jpeg'; + } + $mqr = TCPDF_STATIC::get_mqr(); + TCPDF_STATIC::set_mqr(false); + // Specific image handlers (defined on TCPDF_IMAGES CLASS) + $mtd = '_parse'.$type; + // GD image handler function + $gdfunction = 'imagecreatefrom'.$type; + $info = false; + if ((method_exists('TCPDF_IMAGES', $mtd)) AND (!($resize AND (function_exists($gdfunction) OR extension_loaded('imagick'))))) { + // TCPDF image functions + $info = TCPDF_IMAGES::$mtd($file); + if (($ismask === false) AND ($imgmask === false) AND (strpos($file, '__tcpdf_'.$this->file_id.'_imgmask_') === FALSE) + AND (($info === 'pngalpha') OR (isset($info['trns']) AND !empty($info['trns'])))) { + return $this->ImagePngAlpha($file, $x, $y, $pixw, $pixh, $w, $h, 'PNG', $link, $align, $resize, $dpi, $palign, $filehash); + } + } + if (($info === false) AND function_exists($gdfunction)) { + try { + // GD library + $img = $gdfunction($file); + if ($img !== false) { + if ($resize) { + $imgr = imagecreatetruecolor($neww, $newh); + if (($type == 'gif') OR ($type == 'png')) { + $imgr = TCPDF_IMAGES::setGDImageTransparency($imgr, $img); + } + imagecopyresampled($imgr, $img, 0, 0, 0, 0, $neww, $newh, $pixw, $pixh); + $img = $imgr; + } + if (($type == 'gif') OR ($type == 'png')) { + $info = TCPDF_IMAGES::_toPNG($img, TCPDF_STATIC::getObjFilename('img', $this->file_id)); + } else { + $info = TCPDF_IMAGES::_toJPEG($img, $this->jpeg_quality, TCPDF_STATIC::getObjFilename('img', $this->file_id)); + } + } + } catch(Exception $e) { + $info = false; + } + } + if (($info === false) AND extension_loaded('imagick')) { + try { + // ImageMagick library + $img = new Imagick(); + if ($type == 'svg') { + if ($file[0] === '@') { + // image from string + $svgimg = substr($file, 1); + } else { + // get SVG file content + $svgimg = $this->getCachedFileContents($file); + } + if ($svgimg !== FALSE) { + // get width and height + $regs = array(); + if (preg_match('/]*)>/si', $svgimg, $regs)) { + $svgtag = $regs[1]; + $tmp = array(); + if (preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si', $svgtag, $tmp)) { + $ow = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false); + $owu = sprintf('%F', ($ow * $dpi / 72)).$this->pdfunit; + $svgtag = preg_replace('/[\s]+width[\s]*=[\s]*"[^"]*"/si', ' width="'.$owu.'"', $svgtag, 1); + } else { + $ow = $w; + } + $tmp = array(); + if (preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si', $svgtag, $tmp)) { + $oh = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false); + $ohu = sprintf('%F', ($oh * $dpi / 72)).$this->pdfunit; + $svgtag = preg_replace('/[\s]+height[\s]*=[\s]*"[^"]*"/si', ' height="'.$ohu.'"', $svgtag, 1); + } else { + $oh = $h; + } + $tmp = array(); + if (!preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si', $svgtag, $tmp)) { + $vbw = ($ow * $this->imgscale * $this->k); + $vbh = ($oh * $this->imgscale * $this->k); + $vbox = sprintf(' viewBox="0 0 %F %F" ', $vbw, $vbh); + $svgtag = $vbox.$svgtag; + } + $svgimg = preg_replace('/]*)>/si', '', $svgimg, 1); + } + $img->readImageBlob($svgimg); + } + } else { + $img->readImage($file); + } + if ($resize) { + $img->resizeImage($neww, $newh, 10, 1, false); + } + $img->setCompressionQuality($this->jpeg_quality); + $img->setImageFormat('jpeg'); + $tempname = TCPDF_STATIC::getObjFilename('img', $this->file_id); + $img->writeImage($tempname); + $info = TCPDF_IMAGES::_parsejpeg($tempname); + unlink($tempname); + $img->destroy(); + } catch(Exception $e) { + $info = false; + } + } + if ($info === false) { + // unable to process image + return false; + } + TCPDF_STATIC::set_mqr($mqr); + if ($ismask) { + // force grayscale + $info['cs'] = 'DeviceGray'; + } + if ($imgmask !== false) { + $info['masked'] = $imgmask; + } + if (!empty($exurl)) { + $info['exurl'] = $exurl; + } + // array of alternative images + $info['altimgs'] = $altimgs; + // add image to document + $info['i'] = $this->setImageBuffer($file, $info); + } + // set alignment + $this->img_rb_x = $x + $w; + $this->img_rb_y = $y + $h; + + // set alignment + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x; + } + + if ($ismask OR $hidden) { + // image is not displayed + return $info['i']; + } + $xkimg = $ximg * $this->k; + if (!$alt) { + // only non-alternative immages will be set + $this->_out(sprintf('q %F 0 0 %F %F %F cm /I%u Do Q', ($w * $this->k), ($h * $this->k), $xkimg, (($this->h - ($y + $h)) * $this->k), $info['i'])); + } + if (!empty($border)) { + $bx = $this->x; + $by = $this->y; + $this->x = $ximg; + if ($this->rtl) { + $this->x += $w; + } + $this->y = $y; + $this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true); + $this->x = $bx; + $this->y = $by; + } + if ($link) { + $this->Link($ximg, $y, $w, $h, $link, 0); + } + // set pointer to align the next text/objects + switch($align) { + case 'T': { + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M': { + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B': { + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N': { + $this->setY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['images'][] = $info['i']; + } + return $info['i']; + } + + /** + * Extract info from a PNG image with alpha channel using the Imagick or GD library. + * @param string $file Name of the file containing the image. + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $wpx Original width of the image in pixels. + * @param float $hpx original height of the image in pixels. + * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension. + * @param mixed $link URL or identifier returned by AddLink(). + * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
        • T: top-right for LTR or top-left for RTL
        • M: middle-right for LTR or middle-left for RTL
        • B: bottom-right for LTR or bottom-left for RTL
        • N: next line
        + * @param boolean $resize If true resize (reduce) the image to fit $w and $h (requires GD library). + * @param int $dpi dot-per-inch resolution used on resize + * @param string $palign Allows to center or align the image on the current line. Possible values are:
        • L : left align
        • C : center
        • R : right align
        • '' : empty string : left for LTR or right for RTL
        + * @param string $filehash File hash used to build unique file names. + * @author Nicola Asuni + * @protected + * @since 4.3.007 (2008-12-04) + * @see Image() + */ + protected function ImagePngAlpha($file, $x, $y, $wpx, $hpx, $w, $h, $type, $link, $align, $resize, $dpi, $palign, $filehash='') { + // create temp images + if (empty($filehash)) { + $filehash = md5($file); + } + // create temp image file (without alpha channel) + $tempfile_plain = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_plain_'.$filehash; + // create temp alpha file + $tempfile_alpha = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_alpha_'.$filehash; + $parsed = false; + $parse_error = ''; + // ImageMagick extension + if (($parsed === false) AND extension_loaded('imagick')) { + try { + // ImageMagick library + $img = new Imagick(); + $img->readImage($file); + // clone image object + $imga = TCPDF_STATIC::objclone($img); + // extract alpha channel + if (method_exists($img, 'setImageAlphaChannel') AND defined('Imagick::ALPHACHANNEL_EXTRACT')) { + $img->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT); + } else { + $img->separateImageChannel(8); // 8 = (imagick::CHANNEL_ALPHA | imagick::CHANNEL_OPACITY | imagick::CHANNEL_MATTE); + $img->negateImage(true); + } + $img->setImageFormat('png'); + $img->writeImage($tempfile_alpha); + // remove alpha channel + if (method_exists($imga, 'setImageMatte')) { + $imga->setImageMatte(false); + } else { + $imga->separateImageChannel(39); // 39 = (imagick::CHANNEL_ALL & ~(imagick::CHANNEL_ALPHA | imagick::CHANNEL_OPACITY | imagick::CHANNEL_MATTE)); + } + $imga->setImageFormat('png'); + $imga->writeImage($tempfile_plain); + $parsed = true; + } catch (Exception $e) { + // Imagemagick fails, try with GD + $parse_error = 'Imagick library error: '.$e->getMessage(); + } + } + // GD extension + if (($parsed === false) AND function_exists('imagecreatefrompng')) { + try { + // generate images + $img = imagecreatefrompng($file); + $imgalpha = imagecreate($wpx, $hpx); + // generate gray scale palette (0 -> 255) + for ($c = 0; $c < 256; ++$c) { + ImageColorAllocate($imgalpha, $c, $c, $c); + } + // extract alpha channel + for ($xpx = 0; $xpx < $wpx; ++$xpx) { + for ($ypx = 0; $ypx < $hpx; ++$ypx) { + $color = imagecolorat($img, $xpx, $ypx); + // get and correct gamma color + $alpha = $this->getGDgamma($img, $color); + imagesetpixel($imgalpha, (int) $xpx, (int) $ypx, (int) $alpha); + } + } + imagepng($imgalpha, $tempfile_alpha); + imagedestroy($imgalpha); + // extract image without alpha channel + $imgplain = imagecreatetruecolor($wpx, $hpx); + imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx); + imagepng($imgplain, $tempfile_plain); + imagedestroy($imgplain); + $parsed = true; + } catch (Exception $e) { + // GD fails + $parse_error = 'GD library error: '.$e->getMessage(); + } + } + if ($parsed === false) { + if (empty($parse_error)) { + $this->Error('TCPDF requires the Imagick or GD extension to handle PNG images with alpha channel.'); + } else { + $this->Error($parse_error); + } + } + // embed mask image + $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false); + // embed image, masked with previously embedded mask + $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask); + } + + /** + * Get the GD-corrected PNG gamma value from alpha color + * @param resource $img GD image Resource ID. + * @param int $c alpha color + * @protected + * @since 4.3.007 (2008-12-04) + */ + protected function getGDgamma($img, $c) { + if (!isset($this->gdgammacache['#'.$c])) { + $colors = imagecolorsforindex($img, $c); + // GD alpha is only 7 bit (0 -> 127) + $this->gdgammacache['#'.$c] = (int) (((127 - $colors['alpha']) / 127) * 255); + // correct gamma + $this->gdgammacache['#'.$c] = (int) (pow(($this->gdgammacache['#'.$c] / 255), 2.2) * 255); + // store the latest values on cache to improve performances + if (count($this->gdgammacache) > 8) { + // remove one element from the cache array + array_shift($this->gdgammacache); + } + } + return $this->gdgammacache['#'.$c]; + } + + /** + * Performs a line break. + * The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter. + * @param float|null $h The height of the break. By default, the value equals the height of the last printed cell. + * @param boolean $cell if true add the current left (or right o for RTL) padding to the X coordinate + * @public + * @since 1.0 + * @see Cell() + */ + public function Ln($h=null, $cell=false) { + if (($this->num_columns > 1) AND ($this->y == $this->columns[$this->current_column]['y']) AND isset($this->columns[$this->current_column]['x']) AND ($this->x == $this->columns[$this->current_column]['x'])) { + // revove vertical space from the top of the column + return; + } + if ($cell) { + if ($this->rtl) { + $cellpadding = $this->cell_padding['R']; + } else { + $cellpadding = $this->cell_padding['L']; + } + } else { + $cellpadding = 0; + } + if ($this->rtl) { + $this->x = $this->w - $this->rMargin - $cellpadding; + } else { + $this->x = $this->lMargin + $cellpadding; + } + if (TCPDF_STATIC::empty_string($h)) { + $h = $this->lasth; + } + $this->y += $h; + $this->newline = true; + } + + /** + * Returns the relative X value of current position. + * The value is relative to the left border for LTR languages and to the right border for RTL languages. + * @return float + * @public + * @since 1.2 + * @see SetX(), GetY(), SetY() + */ + public function GetX() { + //Get x position + if ($this->rtl) { + return ($this->w - $this->x); + } else { + return $this->x; + } + } + + /** + * Returns the absolute X value of current position. + * @return float + * @public + * @since 1.2 + * @see SetX(), GetY(), SetY() + */ + public function GetAbsX() { + return $this->x; + } + + /** + * Returns the ordinate of the current position. + * @return float + * @public + * @since 1.0 + * @see SetY(), GetX(), SetX() + */ + public function GetY() { + return $this->y; + } + + /** + * Defines the abscissa of the current position. + * If the passed value is negative, it is relative to the right of the page (or left if language is RTL). + * @param float $x The value of the abscissa in user units. + * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. + * @public + * @since 1.2 + * @see GetX(), GetY(), SetY(), SetXY() + */ + public function setX($x, $rtloff=false) { + $x = floatval($x); + if (!$rtloff AND $this->rtl) { + if ($x >= 0) { + $this->x = $this->w - $x; + } else { + $this->x = abs($x); + } + } else { + if ($x >= 0) { + $this->x = $x; + } else { + $this->x = $this->w + $x; + } + } + if ($this->x < 0) { + $this->x = 0; + } + if ($this->x > $this->w) { + $this->x = $this->w; + } + } + + /** + * Moves the current abscissa back to the left margin and sets the ordinate. + * If the passed value is negative, it is relative to the bottom of the page. + * @param float $y The value of the ordinate in user units. + * @param bool $resetx if true (default) reset the X position. + * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. + * @public + * @since 1.0 + * @see GetX(), GetY(), SetY(), SetXY() + */ + public function setY($y, $resetx=true, $rtloff=false) { + $y = floatval($y); + if ($resetx) { + //reset x + if (!$rtloff AND $this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + } + if ($y >= 0) { + $this->y = $y; + } else { + $this->y = $this->h + $y; + } + if ($this->y < 0) { + $this->y = 0; + } + if ($this->y > $this->h) { + $this->y = $this->h; + } + } + + /** + * Defines the abscissa and ordinate of the current position. + * If the passed values are negative, they are relative respectively to the right and bottom of the page. + * @param float $x The value of the abscissa. + * @param float $y The value of the ordinate. + * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. + * @public + * @since 1.2 + * @see SetX(), SetY() + */ + public function setXY($x, $y, $rtloff=false) { + $this->setY($y, false, $rtloff); + $this->setX($x, $rtloff); + } + + /** + * Set the absolute X coordinate of the current pointer. + * @param float $x The value of the abscissa in user units. + * @public + * @since 5.9.186 (2012-09-13) + * @see setAbsX(), setAbsY(), SetAbsXY() + */ + public function setAbsX($x) { + $this->x = floatval($x); + } + + /** + * Set the absolute Y coordinate of the current pointer. + * @param float $y (float) The value of the ordinate in user units. + * @public + * @since 5.9.186 (2012-09-13) + * @see setAbsX(), setAbsY(), SetAbsXY() + */ + public function setAbsY($y) { + $this->y = floatval($y); + } + + /** + * Set the absolute X and Y coordinates of the current pointer. + * @param float $x The value of the abscissa in user units. + * @param float $y (float) The value of the ordinate in user units. + * @public + * @since 5.9.186 (2012-09-13) + * @see setAbsX(), setAbsY(), SetAbsXY() + */ + public function setAbsXY($x, $y) { + $this->setAbsX($x); + $this->setAbsY($y); + } + + /** + * Send the document to a given destination: string, local file or browser. + * In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.
        + * The method first calls Close() if necessary to terminate the document. + * @param string $name The name of the file when saved. Note that special characters are removed and blanks characters are replaced with the underscore character. + * @param string $dest Destination where to send the document. It can take one of the following values:
        • I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.
        • D: send to the browser and force a file download with the name given by name.
        • F: save to a local server file with the name given by name.
        • S: return the document as a string (name is ignored).
        • FI: equivalent to F + I option
        • FD: equivalent to F + D option
        • E: return the document as base64 mime multi-part email attachment (RFC 2045)
        + * @return string + * @public + * @since 1.0 + * @see Close() + */ + public function Output($name='doc.pdf', $dest='I') { + //Output PDF to some destination + //Finish document if necessary + if ($this->state < 3) { + $this->Close(); + } + //Normalize parameters + if (is_bool($dest)) { + $dest = $dest ? 'D' : 'F'; + } + $dest = strtoupper($dest); + if ($dest[0] != 'F') { + $name = preg_replace('/[\s]+/', '_', $name); + $name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name); + } + if ($this->sign) { + // *** apply digital signature to the document *** + // get the document content + $pdfdoc = $this->getBuffer(); + // remove last newline + $pdfdoc = substr($pdfdoc, 0, -1); + // remove filler space + $byterange_string_len = strlen(TCPDF_STATIC::$byterange_string); + // define the ByteRange + $byte_range = array(); + $byte_range[0] = 0; + $byte_range[1] = strpos($pdfdoc, TCPDF_STATIC::$byterange_string) + $byterange_string_len + 10; + $byte_range[2] = $byte_range[1] + $this->signature_max_length + 2; + $byte_range[3] = strlen($pdfdoc) - $byte_range[2]; + $pdfdoc = substr($pdfdoc, 0, $byte_range[1]).substr($pdfdoc, $byte_range[2]); + // replace the ByteRange + $byterange = sprintf('/ByteRange[0 %u %u %u]', $byte_range[1], $byte_range[2], $byte_range[3]); + $byterange .= str_repeat(' ', ($byterange_string_len - strlen($byterange))); + $pdfdoc = str_replace(TCPDF_STATIC::$byterange_string, $byterange, $pdfdoc); + // write the document to a temporary folder + $tempdoc = TCPDF_STATIC::getObjFilename('doc', $this->file_id); + $f = TCPDF_STATIC::fopenLocal($tempdoc, 'wb'); + if (!$f) { + $this->Error('Unable to create temporary file: '.$tempdoc); + } + $pdfdoc_length = strlen($pdfdoc); + fwrite($f, $pdfdoc, $pdfdoc_length); + fclose($f); + // get digital signature via openssl library + $tempsign = TCPDF_STATIC::getObjFilename('sig', $this->file_id); + if (empty($this->signature_data['extracerts'])) { + openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED); + } else { + openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED, $this->signature_data['extracerts']); + } + // read signature + $signature = file_get_contents($tempsign); + // extract signature + $signature = substr($signature, $pdfdoc_length); + $signature = substr($signature, (strpos($signature, "%%EOF\n\n------") + 13)); + $tmparr = explode("\n\n", $signature); + $signature = $tmparr[1]; + // decode signature + $signature = base64_decode(trim($signature)); + // add TSA timestamp to signature + $signature = $this->applyTSA($signature); + // convert signature to hex + $signature = current(unpack('H*', $signature)); + $signature = str_pad($signature, $this->signature_max_length, '0'); + // Add signature to the document + $this->buffer = substr($pdfdoc, 0, $byte_range[1]).'<'.$signature.'>'.substr($pdfdoc, $byte_range[1]); + $this->bufferlen = strlen($this->buffer); + } + switch($dest) { + case 'I': { + // Send PDF to the standard output + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + if (php_sapi_name() != 'cli') { + // send output to a browser + header('Content-Type: application/pdf'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); + //header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Disposition: inline; filename="'.basename($name).'"'); + TCPDF_STATIC::sendOutputData($this->getBuffer(), $this->bufferlen); + } else { + echo $this->getBuffer(); + } + break; + } + case 'D': { + // download PDF as file + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + header('Content-Description: File Transfer'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); + //header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + // force download dialog + if (strpos(php_sapi_name(), 'cgi') === false) { + header('Content-Type: application/force-download'); + header('Content-Type: application/octet-stream', false); + header('Content-Type: application/download', false); + header('Content-Type: application/pdf', false); + } else { + header('Content-Type: application/pdf'); + } + // use the Content-Disposition header to supply a recommended filename + header('Content-Disposition: attachment; filename="'.basename($name).'"'); + header('Content-Transfer-Encoding: binary'); + TCPDF_STATIC::sendOutputData($this->getBuffer(), $this->bufferlen); + break; + } + case 'F': + case 'FI': + case 'FD': { + // save PDF to a local file + $f = TCPDF_STATIC::fopenLocal($name, 'wb'); + if (!$f) { + $this->Error('Unable to create output file: '.$name); + } + fwrite($f, $this->getBuffer(), $this->bufferlen); + fclose($f); + if ($dest == 'FI') { + // send headers to browser + header('Content-Type: application/pdf'); + header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); + //header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + header('Content-Disposition: inline; filename="'.basename($name).'"'); + TCPDF_STATIC::sendOutputData(file_get_contents($name), filesize($name)); + } elseif ($dest == 'FD') { + // send headers to browser + if (ob_get_contents()) { + $this->Error('Some data has already been output, can\'t send PDF file'); + } + header('Content-Description: File Transfer'); + if (headers_sent()) { + $this->Error('Some data has already been output to browser, can\'t send PDF file'); + } + header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); + header('Pragma: public'); + header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past + header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); + // force download dialog + if (strpos(php_sapi_name(), 'cgi') === false) { + header('Content-Type: application/force-download'); + header('Content-Type: application/octet-stream', false); + header('Content-Type: application/download', false); + header('Content-Type: application/pdf', false); + } else { + header('Content-Type: application/pdf'); + } + // use the Content-Disposition header to supply a recommended filename + header('Content-Disposition: attachment; filename="'.basename($name).'"'); + header('Content-Transfer-Encoding: binary'); + TCPDF_STATIC::sendOutputData(file_get_contents($name), filesize($name)); + } + break; + } + case 'E': { + // return PDF as base64 mime multi-part email attachment (RFC 2045) + $retval = 'Content-Type: application/pdf;'."\r\n"; + $retval .= ' name="'.$name.'"'."\r\n"; + $retval .= 'Content-Transfer-Encoding: base64'."\r\n"; + $retval .= 'Content-Disposition: attachment;'."\r\n"; + $retval .= ' filename="'.$name.'"'."\r\n\r\n"; + $retval .= chunk_split(base64_encode($this->getBuffer()), 76, "\r\n"); + return $retval; + } + case 'S': { + // returns PDF as a string + return $this->getBuffer(); + } + default: { + $this->Error('Incorrect output destination: '.$dest); + } + } + return ''; + } + + protected static $cleaned_ids = array(); + /** + * Unset all class variables except the following critical variables. + * @param boolean $destroyall if true destroys all class variables, otherwise preserves critical variables. + * @param boolean $preserve_objcopy if true preserves the objcopy variable + * @public + * @since 4.5.016 (2009-02-24) + */ + public function _destroy($destroyall=false, $preserve_objcopy=false) { + if (isset(self::$cleaned_ids[$this->file_id])) { + $destroyall = false; + } + if ($destroyall AND !$preserve_objcopy && isset($this->file_id)) { + self::$cleaned_ids[$this->file_id] = true; + // remove all temporary files + if ($handle = @opendir(K_PATH_CACHE)) { + while ( false !== ( $file_name = readdir( $handle ) ) ) { + if (strpos($file_name, '__tcpdf_'.$this->file_id.'_') === 0) { + unlink(K_PATH_CACHE.$file_name); + } + } + closedir($handle); + } + if (isset($this->imagekeys)) { + foreach($this->imagekeys as $file) { + if (strpos($file, K_PATH_CACHE) === 0 && TCPDF_STATIC::file_exists($file)) { + @unlink($file); + } + } + } + } + $preserve = array( + 'file_id', + 'state', + 'bufferlen', + 'buffer', + 'cached_files', + 'imagekeys', + 'sign', + 'signature_data', + 'signature_max_length', + 'byterange_string', + 'tsa_timestamp', + 'tsa_data' + ); + foreach (array_keys(get_object_vars($this)) as $val) { + if ($destroyall OR !in_array($val, $preserve)) { + if ((!$preserve_objcopy OR ($val != 'objcopy')) AND ($val != 'file_id') AND isset($this->$val)) { + unset($this->$val); + } + } + } + } + + /** + * Check for locale-related bug + * @protected + */ + protected function _dochecks() { + //Check for locale-related bug + if (1.1 == 1) { + $this->Error('Don\'t alter the locale before including class file'); + } + //Check for decimal separator + if (sprintf('%.1F', 1.0) != '1.0') { + setlocale(LC_NUMERIC, 'C'); + } + } + + /** + * Return an array containing variations for the basic page number alias. + * @param string $a Base alias. + * @return array of page number aliases + * @protected + */ + protected function getInternalPageNumberAliases($a= '') { + $alias = array(); + // build array of Unicode + ASCII variants (the order is important) + $alias = array('u' => array(), 'a' => array()); + $u = '{'.$a.'}'; + $alias['u'][] = TCPDF_STATIC::_escape($u); + if ($this->isunicode) { + $alias['u'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::UTF8ToLatin1($u, $this->isunicode, $this->CurrentFont)); + $alias['u'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::utf8StrRev($u, false, $this->tmprtl, $this->isunicode, $this->CurrentFont)); + $alias['a'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::UTF8ToLatin1($a, $this->isunicode, $this->CurrentFont)); + $alias['a'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::utf8StrRev($a, false, $this->tmprtl, $this->isunicode, $this->CurrentFont)); + } + $alias['a'][] = TCPDF_STATIC::_escape($a); + return $alias; + } + + /** + * Return an array containing all internal page aliases. + * @return array of page number aliases + * @protected + */ + protected function getAllInternalPageNumberAliases() { + $basic_alias = array(TCPDF_STATIC::$alias_tot_pages, TCPDF_STATIC::$alias_num_page, TCPDF_STATIC::$alias_group_tot_pages, TCPDF_STATIC::$alias_group_num_page, TCPDF_STATIC::$alias_right_shift); + $pnalias = array(); + foreach($basic_alias as $k => $a) { + $pnalias[$k] = $this->getInternalPageNumberAliases($a); + } + return $pnalias; + } + + /** + * Replace right shift page number aliases with spaces to correct right alignment. + * This works perfectly only when using monospaced fonts. + * @param string $page Page content. + * @param array $aliases Array of page aliases. + * @param int $diff initial difference to add. + * @return string replaced page content. + * @protected + */ + protected function replaceRightShiftPageNumAliases($page, $aliases, $diff) { + foreach ($aliases as $type => $alias) { + foreach ($alias as $a) { + // find position of compensation factor + $startnum = (strpos($a, ':') + 1); + $a = substr($a, 0, $startnum); + if (($pos = strpos($page, $a)) !== false) { + // end of alias + $endnum = strpos($page, '}', $pos); + // string to be replaced + $aa = substr($page, $pos, ($endnum - $pos + 1)); + // get compensation factor + $ratio = substr($page, ($pos + $startnum), ($endnum - $pos - $startnum)); + $ratio = preg_replace('/[^0-9\.]/', '', $ratio); + $ratio = floatval($ratio); + if ($type == 'u') { + $chrdiff = floor(($diff + 12) * $ratio); + $shift = str_repeat(' ', $chrdiff); + $shift = TCPDF_FONTS::UTF8ToUTF16BE($shift, false, $this->isunicode, $this->CurrentFont); + } else { + $chrdiff = floor(($diff + 11) * $ratio); + $shift = str_repeat(' ', $chrdiff); + } + $page = str_replace($aa, $shift, $page); + } + } + } + return $page; + } + + /** + * Set page boxes to be included on page descriptions. + * @param array $boxes Array of page boxes to set on document: ('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'). + * @protected + */ + protected function setPageBoxTypes($boxes) { + $this->page_boxes = array(); + foreach ($boxes as $box) { + if (in_array($box, TCPDF_STATIC::$pageboxes)) { + $this->page_boxes[] = $box; + } + } + } + + /** + * Output pages (and replace page number aliases). + * @protected + */ + protected function _putpages() { + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + // get internal aliases for page numbers + $pnalias = $this->getAllInternalPageNumberAliases(); + $num_pages = $this->numpages; + $ptpa = TCPDF_STATIC::formatPageNumber(($this->starting_page_number + $num_pages - 1)); + $ptpu = TCPDF_FONTS::UTF8ToUTF16BE($ptpa, false, $this->isunicode, $this->CurrentFont); + $ptp_num_chars = $this->GetNumChars($ptpa); + $pagegroupnum = 0; + $groupnum = 0; + $ptgu = 1; + $ptga = 1; + $ptg_num_chars = 1; + for ($n = 1; $n <= $num_pages; ++$n) { + // get current page + $temppage = $this->getPageBuffer($n); + $pagelen = strlen($temppage); + // set replacements for total pages number + $pnpa = TCPDF_STATIC::formatPageNumber(($this->starting_page_number + $n - 1)); + $pnpu = TCPDF_FONTS::UTF8ToUTF16BE($pnpa, false, $this->isunicode, $this->CurrentFont); + $pnp_num_chars = $this->GetNumChars($pnpa); + $pdiff = 0; // difference used for right shift alignment of page numbers + $gdiff = 0; // difference used for right shift alignment of page group numbers + if (!empty($this->pagegroups)) { + if (isset($this->newpagegroup[$n])) { + $pagegroupnum = 0; + ++$groupnum; + $ptga = TCPDF_STATIC::formatPageNumber($this->pagegroups[$groupnum]); + $ptgu = TCPDF_FONTS::UTF8ToUTF16BE($ptga, false, $this->isunicode, $this->CurrentFont); + $ptg_num_chars = $this->GetNumChars($ptga); + } + ++$pagegroupnum; + $pnga = TCPDF_STATIC::formatPageNumber($pagegroupnum); + $pngu = TCPDF_FONTS::UTF8ToUTF16BE($pnga, false, $this->isunicode, $this->CurrentFont); + $png_num_chars = $this->GetNumChars($pnga); + // replace page numbers + $replace = array(); + $replace[] = array($ptgu, $ptg_num_chars, 9, $pnalias[2]['u']); + $replace[] = array($ptga, $ptg_num_chars, 7, $pnalias[2]['a']); + $replace[] = array($pngu, $png_num_chars, 9, $pnalias[3]['u']); + $replace[] = array($pnga, $png_num_chars, 7, $pnalias[3]['a']); + list($temppage, $gdiff) = TCPDF_STATIC::replacePageNumAliases($temppage, $replace, $gdiff); + } + // replace page numbers + $replace = array(); + $replace[] = array($ptpu, $ptp_num_chars, 9, $pnalias[0]['u']); + $replace[] = array($ptpa, $ptp_num_chars, 7, $pnalias[0]['a']); + $replace[] = array($pnpu, $pnp_num_chars, 9, $pnalias[1]['u']); + $replace[] = array($pnpa, $pnp_num_chars, 7, $pnalias[1]['a']); + list($temppage, $pdiff) = TCPDF_STATIC::replacePageNumAliases($temppage, $replace, $pdiff); + // replace right shift alias + $temppage = $this->replaceRightShiftPageNumAliases($temppage, $pnalias[4], max($pdiff, $gdiff)); + // replace EPS marker + $temppage = str_replace($this->epsmarker, '', $temppage); + //Page + $this->page_obj_id[$n] = $this->_newobj(); + $out = '<<'; + $out .= ' /Type /Page'; + $out .= ' /Parent 1 0 R'; + if (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A')) { + $out .= ' /LastModified '.$this->_datestring(0, $this->doc_modification_timestamp); + } + $out .= ' /Resources 2 0 R'; + foreach ($this->page_boxes as $box) { + $out .= ' /'.$box; + $out .= sprintf(' [%F %F %F %F]', $this->pagedim[$n][$box]['llx'], $this->pagedim[$n][$box]['lly'], $this->pagedim[$n][$box]['urx'], $this->pagedim[$n][$box]['ury']); + } + if (isset($this->pagedim[$n]['BoxColorInfo']) AND !empty($this->pagedim[$n]['BoxColorInfo'])) { + $out .= ' /BoxColorInfo <<'; + foreach ($this->page_boxes as $box) { + if (isset($this->pagedim[$n]['BoxColorInfo'][$box])) { + $out .= ' /'.$box.' <<'; + if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['C'])) { + $color = $this->pagedim[$n]['BoxColorInfo'][$box]['C']; + $out .= ' /C ['; + $out .= sprintf(' %F %F %F', ($color[0] / 255), ($color[1] / 255), ($color[2] / 255)); + $out .= ' ]'; + } + if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['W'])) { + $out .= ' /W '.($this->pagedim[$n]['BoxColorInfo'][$box]['W'] * $this->k); + } + if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['S'])) { + $out .= ' /S /'.$this->pagedim[$n]['BoxColorInfo'][$box]['S']; + } + if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['D'])) { + $dashes = $this->pagedim[$n]['BoxColorInfo'][$box]['D']; + $out .= ' /D ['; + foreach ($dashes as $dash) { + $out .= sprintf(' %F', ($dash * $this->k)); + } + $out .= ' ]'; + } + $out .= ' >>'; + } + } + $out .= ' >>'; + } + $out .= ' /Contents '.($this->n + 1).' 0 R'; + $out .= ' /Rotate '.$this->pagedim[$n]['Rotate']; + if (!$this->pdfa_mode || $this->pdfa_version >= 2) { + $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceRGB >>'; + } + if (isset($this->pagedim[$n]['trans']) AND !empty($this->pagedim[$n]['trans'])) { + // page transitions + if (isset($this->pagedim[$n]['trans']['Dur'])) { + $out .= ' /Dur '.$this->pagedim[$n]['trans']['Dur']; + } + $out .= ' /Trans <<'; + $out .= ' /Type /Trans'; + if (isset($this->pagedim[$n]['trans']['S'])) { + $out .= ' /S /'.$this->pagedim[$n]['trans']['S']; + } + if (isset($this->pagedim[$n]['trans']['D'])) { + $out .= ' /D '.$this->pagedim[$n]['trans']['D']; + } + if (isset($this->pagedim[$n]['trans']['Dm'])) { + $out .= ' /Dm /'.$this->pagedim[$n]['trans']['Dm']; + } + if (isset($this->pagedim[$n]['trans']['M'])) { + $out .= ' /M /'.$this->pagedim[$n]['trans']['M']; + } + if (isset($this->pagedim[$n]['trans']['Di'])) { + $out .= ' /Di '.$this->pagedim[$n]['trans']['Di']; + } + if (isset($this->pagedim[$n]['trans']['SS'])) { + $out .= ' /SS '.$this->pagedim[$n]['trans']['SS']; + } + if (isset($this->pagedim[$n]['trans']['B'])) { + $out .= ' /B '.$this->pagedim[$n]['trans']['B']; + } + $out .= ' >>'; + } + $out .= $this->_getannotsrefs($n); + $out .= ' /PZ '.$this->pagedim[$n]['PZ']; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + //Page content + $p = ($this->compress) ? gzcompress($temppage) : $temppage; + $this->_newobj(); + $p = $this->_getrawstream($p); + $this->_out('<<'.$filter.'/Length '.strlen($p).'>> stream'."\n".$p."\n".'endstream'."\n".'endobj'); + } + //Pages root + $out = $this->_getobj(1)."\n"; + $out .= '<< /Type /Pages /Kids ['; + foreach($this->page_obj_id as $page_obj) { + $out .= ' '.$page_obj.' 0 R'; + } + $out .= ' ] /Count '.$num_pages.' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + + /** + * Get references to page annotations. + * @param int $n page number + * @return string + * @protected + * @author Nicola Asuni + * @since 5.0.010 (2010-05-17) + */ + protected function _getannotsrefs($n) { + if (!(isset($this->PageAnnots[$n]) OR ($this->sign AND isset($this->signature_data['cert_type'])))) { + return ''; + } + $out = ' /Annots ['; + if (isset($this->PageAnnots[$n])) { + foreach ($this->PageAnnots[$n] as $key => $val) { + if (!in_array($val['n'], $this->radio_groups)) { + $out .= ' '.$val['n'].' 0 R'; + } + } + // add radiobutton groups + if (isset($this->radiobutton_groups[$n])) { + foreach ($this->radiobutton_groups[$n] as $key => $data) { + if (isset($data['n'])) { + $out .= ' '.$data['n'].' 0 R'; + } + } + } + } + if ($this->sign AND ($n == $this->signature_appearance['page']) AND isset($this->signature_data['cert_type'])) { + // set reference for signature object + $out .= ' '.$this->sig_obj_id.' 0 R'; + } + if (!empty($this->empty_signature_appearance)) { + foreach ($this->empty_signature_appearance as $esa) { + if ($esa['page'] == $n) { + // set reference for empty signature objects + $out .= ' '.$esa['objid'].' 0 R'; + } + } + } + $out .= ' ]'; + return $out; + } + + /** + * Output annotations objects for all pages. + * !!! THIS METHOD IS NOT YET COMPLETED !!! + * See section 12.5 of PDF 32000_2008 reference. + * @protected + * @author Nicola Asuni + * @since 4.0.018 (2008-08-06) + */ + protected function _putannotsobjs() { + // reset object counter + for ($n=1; $n <= $this->numpages; ++$n) { + if (isset($this->PageAnnots[$n])) { + // set page annotations + foreach ($this->PageAnnots[$n] as $key => $pl) { + $annot_obj_id = $this->PageAnnots[$n][$key]['n']; + // create annotation object for grouping radiobuttons + if (isset($this->radiobutton_groups[$n][$pl['txt']]) AND is_array($this->radiobutton_groups[$n][$pl['txt']])) { + $radio_button_obj_id = $this->radiobutton_groups[$n][$pl['txt']]['n']; + $annots = '<<'; + $annots .= ' /Type /Annot'; + $annots .= ' /Subtype /Widget'; + $annots .= ' /Rect [0 0 0 0]'; + if ($this->radiobutton_groups[$n][$pl['txt']]['#readonly#']) { + // read only + $annots .= ' /F 68'; + $annots .= ' /Ff 49153'; + } else { + $annots .= ' /F 4'; // default print for PDF/A + $annots .= ' /Ff 49152'; + } + $annots .= ' /T '.$this->_datastring($pl['txt'], $radio_button_obj_id); + if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) { + $annots .= ' /TU '.$this->_datastring($pl['opt']['tu'], $radio_button_obj_id); + } + $annots .= ' /FT /Btn'; + $annots .= ' /Kids ['; + $defval = ''; + foreach ($this->radiobutton_groups[$n][$pl['txt']] as $key => $data) { + if (isset($data['kid'])) { + $annots .= ' '.$data['kid'].' 0 R'; + if ($data['def'] !== 'Off') { + $defval = $data['def']; + } + } + } + $annots .= ' ]'; + if (!empty($defval)) { + $annots .= ' /V /'.$defval; + } + $annots .= ' >>'; + $this->_out($this->_getobj($radio_button_obj_id)."\n".$annots."\n".'endobj'); + $this->form_obj_id[] = $radio_button_obj_id; + // store object id to be used on Parent entry of Kids + $this->radiobutton_groups[$n][$pl['txt']] = $radio_button_obj_id; + } + $formfield = false; + $pl['opt'] = array_change_key_case($pl['opt'], CASE_LOWER); + $a = $pl['x'] * $this->k; + $b = $this->pagedim[$n]['h'] - (($pl['y'] + $pl['h']) * $this->k); + $c = $pl['w'] * $this->k; + $d = $pl['h'] * $this->k; + $rect = sprintf('%F %F %F %F', $a, $b, $a+$c, $b+$d); + // create new annotation object + $annots = '<_textstring($pl['txt'], $annot_obj_id); + } + $annots .= ' /P '.$this->page_obj_id[$n].' 0 R'; + $annots .= ' /NM '.$this->_datastring(sprintf('%04u-%04u', $n, $key), $annot_obj_id); + $annots .= ' /M '.$this->_datestring($annot_obj_id, $this->doc_modification_timestamp); + if (isset($pl['opt']['f'])) { + $fval = 0; + if (is_array($pl['opt']['f'])) { + foreach ($pl['opt']['f'] as $f) { + switch (strtolower($f)) { + case 'invisible': { + $fval += 1 << 0; + break; + } + case 'hidden': { + $fval += 1 << 1; + break; + } + case 'print': { + $fval += 1 << 2; + break; + } + case 'nozoom': { + $fval += 1 << 3; + break; + } + case 'norotate': { + $fval += 1 << 4; + break; + } + case 'noview': { + $fval += 1 << 5; + break; + } + case 'readonly': { + $fval += 1 << 6; + break; + } + case 'locked': { + $fval += 1 << 8; + break; + } + case 'togglenoview': { + $fval += 1 << 9; + break; + } + case 'lockedcontents': { + $fval += 1 << 10; + break; + } + default: { + break; + } + } + } + } else { + $fval = intval($pl['opt']['f']); + } + } else { + $fval = 4; + } + if ($this->pdfa_mode) { + // force print flag for PDF/A mode + $fval |= 4; + } + $annots .= ' /F '.intval($fval); + if (isset($pl['opt']['as']) AND is_string($pl['opt']['as'])) { + $annots .= ' /AS /'.$pl['opt']['as']; + } + if (isset($pl['opt']['ap'])) { + // appearance stream + $annots .= ' /AP <<'; + if (is_array($pl['opt']['ap'])) { + foreach ($pl['opt']['ap'] as $apmode => $apdef) { + // $apmode can be: n = normal; r = rollover; d = down; + $annots .= ' /'.strtoupper($apmode); + if (is_array($apdef)) { + $annots .= ' <<'; + foreach ($apdef as $apstate => $stream) { + // reference to XObject that define the appearance for this mode-state + $apsobjid = $this->_putAPXObject($c, $d, $stream); + $annots .= ' /'.$apstate.' '.$apsobjid.' 0 R'; + } + $annots .= ' >>'; + } else { + // reference to XObject that define the appearance for this mode + $apsobjid = $this->_putAPXObject($c, $d, $apdef); + $annots .= ' '.$apsobjid.' 0 R'; + } + } + } else { + $annots .= $pl['opt']['ap']; + } + $annots .= ' >>'; + } + if (isset($pl['opt']['bs']) AND (is_array($pl['opt']['bs']))) { + $annots .= ' /BS <<'; + $annots .= ' /Type /Border'; + if (isset($pl['opt']['bs']['w'])) { + $annots .= ' /W '.intval($pl['opt']['bs']['w']); + } + $bstyles = array('S', 'D', 'B', 'I', 'U'); + if (isset($pl['opt']['bs']['s']) AND in_array($pl['opt']['bs']['s'], $bstyles)) { + $annots .= ' /S /'.$pl['opt']['bs']['s']; + } + if (isset($pl['opt']['bs']['d']) AND (is_array($pl['opt']['bs']['d']))) { + $annots .= ' /D ['; + foreach ($pl['opt']['bs']['d'] as $cord) { + $annots .= ' '.intval($cord); + } + $annots .= ']'; + } + $annots .= ' >>'; + } else { + $annots .= ' /Border ['; + if (isset($pl['opt']['border']) AND (count($pl['opt']['border']) >= 3)) { + $annots .= intval($pl['opt']['border'][0]).' '; + $annots .= intval($pl['opt']['border'][1]).' '; + $annots .= intval($pl['opt']['border'][2]); + if (isset($pl['opt']['border'][3]) AND is_array($pl['opt']['border'][3])) { + $annots .= ' ['; + foreach ($pl['opt']['border'][3] as $dash) { + $annots .= intval($dash).' '; + } + $annots .= ']'; + } + } else { + $annots .= '0 0 0'; + } + $annots .= ']'; + } + if (isset($pl['opt']['be']) AND (is_array($pl['opt']['be']))) { + $annots .= ' /BE <<'; + $bstyles = array('S', 'C'); + if (isset($pl['opt']['be']['s']) AND in_array($pl['opt']['be']['s'], $bstyles)) { + $annots .= ' /S /'.$pl['opt']['bs']['s']; + } else { + $annots .= ' /S /S'; + } + if (isset($pl['opt']['be']['i']) AND ($pl['opt']['be']['i'] >= 0) AND ($pl['opt']['be']['i'] <= 2)) { + $annots .= ' /I '.sprintf(' %F', $pl['opt']['be']['i']); + } + $annots .= '>>'; + } + if (isset($pl['opt']['c']) AND (is_array($pl['opt']['c'])) AND !empty($pl['opt']['c'])) { + $annots .= ' /C '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['c']); + } + //$annots .= ' /StructParent '; + //$annots .= ' /OC '; + $markups = array('text', 'freetext', 'line', 'square', 'circle', 'polygon', 'polyline', 'highlight', 'underline', 'squiggly', 'strikeout', 'stamp', 'caret', 'ink', 'fileattachment', 'sound'); + if (in_array(strtolower($pl['opt']['subtype']), $markups)) { + // this is a markup type + if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { + $annots .= ' /T '.$this->_textstring($pl['opt']['t'], $annot_obj_id); + } + //$annots .= ' /Popup '; + if (isset($pl['opt']['ca'])) { + $annots .= ' /CA '.sprintf('%F', floatval($pl['opt']['ca'])); + } + if (isset($pl['opt']['rc'])) { + $annots .= ' /RC '.$this->_textstring($pl['opt']['rc'], $annot_obj_id); + } + $annots .= ' /CreationDate '.$this->_datestring($annot_obj_id, $this->doc_creation_timestamp); + //$annots .= ' /IRT '; + if (isset($pl['opt']['subj'])) { + $annots .= ' /Subj '.$this->_textstring($pl['opt']['subj'], $annot_obj_id); + } + //$annots .= ' /RT '; + //$annots .= ' /IT '; + //$annots .= ' /ExData '; + } + $lineendings = array('Square', 'Circle', 'Diamond', 'OpenArrow', 'ClosedArrow', 'None', 'Butt', 'ROpenArrow', 'RClosedArrow', 'Slash'); + // Annotation types + switch (strtolower($pl['opt']['subtype'])) { + case 'text': { + if (isset($pl['opt']['open'])) { + $annots .= ' /Open '. (strtolower($pl['opt']['open']) == 'true' ? 'true' : 'false'); + } + $iconsapp = array('Comment', 'Help', 'Insert', 'Key', 'NewParagraph', 'Note', 'Paragraph'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /Note'; + } + $hasStateModel = isset($pl['opt']['statemodel']); + $hasState = isset($pl['opt']['state']); + $statemodels = array('Marked', 'Review'); + if (!$hasStateModel && !$hasState) { + break; + } + if ($hasStateModel AND in_array($pl['opt']['statemodel'], $statemodels)) { + $annots .= ' /StateModel /'.$pl['opt']['statemodel']; + } else { + $pl['opt']['statemodel'] = 'Marked'; + $annots .= ' /StateModel /'.$pl['opt']['statemodel']; + } + if ($pl['opt']['statemodel'] == 'Marked') { + $states = array('Accepted', 'Unmarked'); + } else { + $states = array('Accepted', 'Rejected', 'Cancelled', 'Completed', 'None'); + } + if ($hasState AND in_array($pl['opt']['state'], $states)) { + $annots .= ' /State /'.$pl['opt']['state']; + } else { + if ($pl['opt']['statemodel'] == 'Marked') { + $annots .= ' /State /Unmarked'; + } else { + $annots .= ' /State /None'; + } + } + break; + } + case 'link': { + if (is_string($pl['txt']) && !empty($pl['txt'])) { + if ($pl['txt'][0] == '#') { + // internal destination + $annots .= ' /A <
        >'; + } elseif ($pl['txt'][0] == '%') { + // embedded PDF file + $filename = basename(substr($pl['txt'], 1)); + $annots .= ' /A << /S /GoToE /D [0 /Fit] /NewWindow true /T << /R /C /P '.($n - 1).' /A '.$this->embeddedfiles[$filename]['a'].' >> >>'; + } elseif ($pl['txt'][0] == '*') { + // embedded generic file + $filename = basename(substr($pl['txt'], 1)); + $jsa = 'var D=event.target.doc;var MyData=D.dataObjects;for (var i in MyData) if (MyData[i].path=="'.$filename.'") D.exportDataObject( { cName : MyData[i].name, nLaunch : 2});'; + $annots .= ' /A << /S /JavaScript /JS '.$this->_textstring($jsa, $annot_obj_id).'>>'; + } else { + $parsedUrl = parse_url($pl['txt']); + if (empty($parsedUrl['scheme']) AND (!empty($parsedUrl['path']) && strtolower(substr($parsedUrl['path'], -4)) == '.pdf')) { + // relative link to a PDF file + $dest = '[0 /Fit]'; // default page 0 + if (!empty($parsedUrl['fragment'])) { + // check for named destination + $tmp = explode('=', $parsedUrl['fragment']); + $dest = '('.((count($tmp) == 2) ? $tmp[1] : $tmp[0]).')'; + } + $annots .= ' /A <
        _datastring($this->unhtmlentities($parsedUrl['path']), $annot_obj_id).' /NewWindow true>>'; + } else { + // external URI link + $annots .= ' /A <
        _datastring($this->unhtmlentities($pl['txt']), $annot_obj_id).'>>'; + } + } + } elseif (isset($this->links[$pl['txt']])) { + // internal link ID + $l = $this->links[$pl['txt']]; + if (isset($this->page_obj_id[($l['p'])])) { + $annots .= sprintf(' /Dest [%u 0 R /XYZ 0 %F null]', $this->page_obj_id[($l['p'])], ($this->pagedim[$l['p']]['h'] - ($l['y'] * $this->k))); + } + } + $hmodes = array('N', 'I', 'O', 'P'); + if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmodes)) { + $annots .= ' /H /'.$pl['opt']['h']; + } else { + $annots .= ' /H /I'; + } + //$annots .= ' /PA '; + //$annots .= ' /Quadpoints '; + break; + } + case 'freetext': { + if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) { + $annots .= ' /DA ('.$pl['opt']['da'].')'; + } + if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) { + $annots .= ' /Q '.intval($pl['opt']['q']); + } + if (isset($pl['opt']['rc'])) { + $annots .= ' /RC '.$this->_textstring($pl['opt']['rc'], $annot_obj_id); + } + if (isset($pl['opt']['ds'])) { + $annots .= ' /DS '.$this->_textstring($pl['opt']['ds'], $annot_obj_id); + } + if (isset($pl['opt']['cl']) AND is_array($pl['opt']['cl'])) { + $annots .= ' /CL ['; + foreach ($pl['opt']['cl'] as $cl) { + $annots .= sprintf('%F ', $cl * $this->k); + } + $annots .= ']'; + } + $tfit = array('FreeText', 'FreeTextCallout', 'FreeTextTypeWriter'); + if (isset($pl['opt']['it']) AND in_array($pl['opt']['it'], $tfit)) { + $annots .= ' /IT /'.$pl['opt']['it']; + } + if (isset($pl['opt']['rd']) AND is_array($pl['opt']['rd'])) { + $l = $pl['opt']['rd'][0] * $this->k; + $r = $pl['opt']['rd'][1] * $this->k; + $t = $pl['opt']['rd'][2] * $this->k; + $b = $pl['opt']['rd'][3] * $this->k; + $annots .= ' /RD ['.sprintf('%F %F %F %F', $l, $r, $t, $b).']'; + } + if (isset($pl['opt']['le']) AND in_array($pl['opt']['le'], $lineendings)) { + $annots .= ' /LE /'.$pl['opt']['le']; + } + break; + } + case 'line': { + break; + } + case 'square': { + break; + } + case 'circle': { + break; + } + case 'polygon': { + break; + } + case 'polyline': { + break; + } + case 'highlight': { + break; + } + case 'underline': { + break; + } + case 'squiggly': { + break; + } + case 'strikeout': { + break; + } + case 'stamp': { + break; + } + case 'caret': { + break; + } + case 'ink': { + break; + } + case 'popup': { + break; + } + case 'fileattachment': { + if ($this->pdfa_mode && $this->pdfa_version != 3) { + // embedded files are not allowed in PDF/A mode version 1 and 2 + break; + } + if (!isset($pl['opt']['fs'])) { + break; + } + $filename = basename($pl['opt']['fs']); + if (isset($this->embeddedfiles[$filename]['f'])) { + $annots .= ' /FS '.$this->embeddedfiles[$filename]['f'].' 0 R'; + $iconsapp = array('Graph', 'Paperclip', 'PushPin', 'Tag'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /PushPin'; + } + // index (zero-based) of the annotation in the Annots array of this page + $this->embeddedfiles[$filename]['a'] = $key; + } + break; + } + case 'sound': { + if (!isset($pl['opt']['fs'])) { + break; + } + $filename = basename($pl['opt']['fs']); + if (isset($this->embeddedfiles[$filename]['f'])) { + // ... TO BE COMPLETED ... + // /R /C /B /E /CO /CP + $annots .= ' /Sound '.$this->embeddedfiles[$filename]['f'].' 0 R'; + $iconsapp = array('Speaker', 'Mic'); + if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { + $annots .= ' /Name /'.$pl['opt']['name']; + } else { + $annots .= ' /Name /Speaker'; + } + } + break; + } + case 'movie': { + break; + } + case 'widget': { + $hmode = array('N', 'I', 'O', 'P', 'T'); + if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmode)) { + $annots .= ' /H /'.$pl['opt']['h']; + } + if (isset($pl['opt']['mk']) AND (is_array($pl['opt']['mk'])) AND !empty($pl['opt']['mk'])) { + $annots .= ' /MK <<'; + if (isset($pl['opt']['mk']['r'])) { + $annots .= ' /R '.$pl['opt']['mk']['r']; + } + if (isset($pl['opt']['mk']['bc']) AND (is_array($pl['opt']['mk']['bc']))) { + $annots .= ' /BC '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['mk']['bc']); + } + if (isset($pl['opt']['mk']['bg']) AND (is_array($pl['opt']['mk']['bg']))) { + $annots .= ' /BG '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['mk']['bg']); + } + if (isset($pl['opt']['mk']['ca'])) { + $annots .= ' /CA '.$pl['opt']['mk']['ca']; + } + if (isset($pl['opt']['mk']['rc'])) { + $annots .= ' /RC '.$pl['opt']['mk']['rc']; + } + if (isset($pl['opt']['mk']['ac'])) { + $annots .= ' /AC '.$pl['opt']['mk']['ac']; + } + if (isset($pl['opt']['mk']['i'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['i']); + if ($info !== false) { + $annots .= ' /I '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['ri'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['ri']); + if ($info !== false) { + $annots .= ' /RI '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['ix'])) { + $info = $this->getImageBuffer($pl['opt']['mk']['ix']); + if ($info !== false) { + $annots .= ' /IX '.$info['n'].' 0 R'; + } + } + if (isset($pl['opt']['mk']['if']) AND (is_array($pl['opt']['mk']['if'])) AND !empty($pl['opt']['mk']['if'])) { + $annots .= ' /IF <<'; + $if_sw = array('A', 'B', 'S', 'N'); + if (isset($pl['opt']['mk']['if']['sw']) AND in_array($pl['opt']['mk']['if']['sw'], $if_sw)) { + $annots .= ' /SW /'.$pl['opt']['mk']['if']['sw']; + } + $if_s = array('A', 'P'); + if (isset($pl['opt']['mk']['if']['s']) AND in_array($pl['opt']['mk']['if']['s'], $if_s)) { + $annots .= ' /S /'.$pl['opt']['mk']['if']['s']; + } + if (isset($pl['opt']['mk']['if']['a']) AND (is_array($pl['opt']['mk']['if']['a'])) AND !empty($pl['opt']['mk']['if']['a'])) { + $annots .= sprintf(' /A [%F %F]', $pl['opt']['mk']['if']['a'][0], $pl['opt']['mk']['if']['a'][1]); + } + if (isset($pl['opt']['mk']['if']['fb']) AND ($pl['opt']['mk']['if']['fb'])) { + $annots .= ' /FB true'; + } + $annots .= '>>'; + } + if (isset($pl['opt']['mk']['tp']) AND ($pl['opt']['mk']['tp'] >= 0) AND ($pl['opt']['mk']['tp'] <= 6)) { + $annots .= ' /TP '.intval($pl['opt']['mk']['tp']); + } + $annots .= '>>'; + } // end MK + // --- Entries for field dictionaries --- + if (isset($this->radiobutton_groups[$n][$pl['txt']])) { + // set parent + $annots .= ' /Parent '.$this->radiobutton_groups[$n][$pl['txt']].' 0 R'; + } + if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { + $annots .= ' /T '.$this->_datastring($pl['opt']['t'], $annot_obj_id); + } + if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) { + $annots .= ' /TU '.$this->_datastring($pl['opt']['tu'], $annot_obj_id); + } + if (isset($pl['opt']['tm']) AND is_string($pl['opt']['tm'])) { + $annots .= ' /TM '.$this->_datastring($pl['opt']['tm'], $annot_obj_id); + } + if (isset($pl['opt']['ff'])) { + if (is_array($pl['opt']['ff'])) { + // array of bit settings + $flag = 0; + foreach($pl['opt']['ff'] as $val) { + $flag += 1 << ($val - 1); + } + } else { + $flag = intval($pl['opt']['ff']); + } + $annots .= ' /Ff '.$flag; + } + if (isset($pl['opt']['maxlen'])) { + $annots .= ' /MaxLen '.intval($pl['opt']['maxlen']); + } + if (isset($pl['opt']['v'])) { + $annots .= ' /V'; + if (is_array($pl['opt']['v'])) { + foreach ($pl['opt']['v'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textstring($pl['opt']['v'], $annot_obj_id); + } + } + if (isset($pl['opt']['dv'])) { + $annots .= ' /DV'; + if (is_array($pl['opt']['dv'])) { + foreach ($pl['opt']['dv'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textstring($pl['opt']['dv'], $annot_obj_id); + } + } + if (isset($pl['opt']['rv'])) { + $annots .= ' /RV'; + if (is_array($pl['opt']['rv'])) { + foreach ($pl['opt']['rv'] AS $optval) { + if (is_float($optval)) { + $optval = sprintf('%F', $optval); + } + $annots .= ' '.$optval; + } + } else { + $annots .= ' '.$this->_textstring($pl['opt']['rv'], $annot_obj_id); + } + } + if (isset($pl['opt']['a']) AND !empty($pl['opt']['a'])) { + $annots .= ' /A << '.$pl['opt']['a'].' >>'; + } + if (isset($pl['opt']['aa']) AND !empty($pl['opt']['aa'])) { + $annots .= ' /AA << '.$pl['opt']['aa'].' >>'; + } + if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) { + $annots .= ' /DA ('.$pl['opt']['da'].')'; + } + if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) { + $annots .= ' /Q '.intval($pl['opt']['q']); + } + if (isset($pl['opt']['opt']) AND (is_array($pl['opt']['opt'])) AND !empty($pl['opt']['opt'])) { + $annots .= ' /Opt ['; + foreach($pl['opt']['opt'] AS $copt) { + if (is_array($copt)) { + $annots .= ' ['.$this->_textstring($copt[0], $annot_obj_id).' '.$this->_textstring($copt[1], $annot_obj_id).']'; + } else { + $annots .= ' '.$this->_textstring($copt, $annot_obj_id); + } + } + $annots .= ']'; + } + if (isset($pl['opt']['ti'])) { + $annots .= ' /TI '.intval($pl['opt']['ti']); + } + if (isset($pl['opt']['i']) AND (is_array($pl['opt']['i'])) AND !empty($pl['opt']['i'])) { + $annots .= ' /I ['; + foreach($pl['opt']['i'] AS $copt) { + $annots .= intval($copt).' '; + } + $annots .= ']'; + } + break; + } + case 'screen': { + break; + } + case 'printermark': { + break; + } + case 'trapnet': { + break; + } + case 'watermark': { + break; + } + case '3d': { + break; + } + default: { + break; + } + } + $annots .= '>>'; + // create new annotation object + $this->_out($this->_getobj($annot_obj_id)."\n".$annots."\n".'endobj'); + if ($formfield AND !isset($this->radiobutton_groups[$n][$pl['txt']])) { + // store reference of form object + $this->form_obj_id[] = $annot_obj_id; + } + } + } + } // end for each page + } + + /** + * Put appearance streams XObject used to define annotation's appearance states. + * @param int $w annotation width + * @param int $h annotation height + * @param string $stream appearance stream + * @return int object ID + * @protected + * @since 4.8.001 (2009-09-09) + */ + protected function _putAPXObject($w=0, $h=0, $stream='') { + $stream = trim($stream); + $out = $this->_getobj()."\n"; + $this->xobjects['AX'.$this->n] = array('n' => $this->n); + $out .= '<<'; + $out .= ' /Type /XObject'; + $out .= ' /Subtype /Form'; + $out .= ' /FormType 1'; + if ($this->compress) { + $stream = gzcompress($stream); + $out .= ' /Filter /FlateDecode'; + } + $rect = sprintf('%F %F', $w, $h); + $out .= ' /BBox [0 0 '.$rect.']'; + $out .= ' /Matrix [1 0 0 1 0 0]'; + $out .= ' /Resources 2 0 R'; + $stream = $this->_getrawstream($stream); + $out .= ' /Length '.strlen($stream); + $out .= ' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + return $this->n; + } + + /** + * Output fonts. + * @author Nicola Asuni + * @protected + */ + protected function _putfonts() { + $nf = $this->n; + foreach ($this->diffs as $diff) { + //Encodings + $this->_newobj(); + $this->_out('<< /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.'] >>'."\n".'endobj'); + } + $mqr = TCPDF_STATIC::get_mqr(); + TCPDF_STATIC::set_mqr(false); + foreach ($this->FontFiles as $file => $info) { + // search and get font file to embedd + $fontfile = TCPDF_FONTS::getFontFullPath($file, $info['fontdir']); + if (!TCPDF_STATIC::empty_string($fontfile)) { + $font = file_get_contents($fontfile); + $compressed = (substr($file, -2) == '.z'); + if ((!$compressed) AND (isset($info['length2']))) { + $header = (ord($font[0]) == 128); + if ($header) { + // strip first binary header + $font = substr($font, 6); + } + if ($header AND (ord($font[$info['length1']]) == 128)) { + // strip second binary header + $font = substr($font, 0, $info['length1']).substr($font, ($info['length1'] + 6)); + } + } elseif ($info['subset'] AND ((!$compressed) OR ($compressed AND function_exists('gzcompress')))) { + if ($compressed) { + // uncompress font + $font = gzuncompress($font); + } + // merge subset characters + $subsetchars = array(); // used chars + foreach ($info['fontkeys'] as $fontkey) { + $fontinfo = $this->getFontBuffer($fontkey); + $subsetchars += $fontinfo['subsetchars']; + } + // rebuild a font subset + $font = TCPDF_FONTS::_getTrueTypeFontSubset($font, $subsetchars); + // calculate new font length + $info['length1'] = strlen($font); + if ($compressed) { + // recompress font + $font = gzcompress($font); + } + } + $this->_newobj(); + $this->FontFiles[$file]['n'] = $this->n; + $stream = $this->_getrawstream($font); + $out = '<< /Length '.strlen($stream); + if ($compressed) { + $out .= ' /Filter /FlateDecode'; + } + $out .= ' /Length1 '.$info['length1']; + if (isset($info['length2'])) { + $out .= ' /Length2 '.$info['length2'].' /Length3 0'; + } + $out .= ' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + TCPDF_STATIC::set_mqr($mqr); + foreach ($this->fontkeys as $k) { + //Font objects + $font = $this->getFontBuffer($k); + $type = $font['type']; + $name = $font['name']; + if ($type == 'core') { + // standard core font + $out = $this->_getobj($this->font_obj_ids[$k])."\n"; + $out .= '<annotation_fonts[$k] = $font['i']; + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } elseif (($type == 'Type1') OR ($type == 'TrueType')) { + // additional Type1 or TrueType font + $out = $this->_getobj($this->font_obj_ids[$k])."\n"; + $out .= '<n + 1).' 0 R'; + $out .= ' /FontDescriptor '.($this->n + 2).' 0 R'; + if ($font['enc']) { + if (isset($font['diff'])) { + $out .= ' /Encoding '.($nf + $font['diff']).' 0 R'; + } else { + $out .= ' /Encoding /WinAnsiEncoding'; + } + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + // Widths + $this->_newobj(); + $s = '['; + for ($i = 32; $i < 256; ++$i) { + if (isset($font['cw'][$i])) { + $s .= $font['cw'][$i].' '; + } else { + $s .= $font['dw'].' '; + } + } + $s .= ']'; + $s .= "\n".'endobj'; + $this->_out($s); + //Descriptor + $this->_newobj(); + $s = '< $fdv) { + if (is_float($fdv)) { + $fdv = sprintf('%F', $fdv); + } + $s .= ' /'.$fdk.' '.$fdv.''; + } + if (!TCPDF_STATIC::empty_string($font['file'])) { + $s .= ' /FontFile'.($type == 'Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R'; + } + $s .= '>>'; + $s .= "\n".'endobj'; + $this->_out($s); + } else { + // additional types + $mtd = '_put'.strtolower($type); + if (!method_exists($this, $mtd)) { + $this->Error('Unsupported font type: '.$type); + } + $this->$mtd($font); + } + } + } + + /** + * Adds unicode fonts.
        + * Based on PDF Reference 1.3 (section 5) + * @param array $font font data + * @protected + * @author Nicola Asuni + * @since 1.52.0.TC005 (2005-01-05) + */ + protected function _puttruetypeunicode($font) { + $fontname = ''; + if ($font['subset']) { + // change name for font subsetting + $subtag = sprintf('%06u', $font['i']); + $subtag = strtr($subtag, '0123456789', 'ABCDEFGHIJ'); + $fontname .= $subtag.'+'; + } + $fontname .= $font['name']; + // Type0 Font + // A composite font composed of other fonts, organized hierarchically + $out = $this->_getobj($this->font_obj_ids[$font['fontkey']])."\n"; + $out .= '<< /Type /Font'; + $out .= ' /Subtype /Type0'; + $out .= ' /BaseFont /'.$fontname; + $out .= ' /Name /F'.$font['i']; + $out .= ' /Encoding /'.$font['enc']; + $out .= ' /ToUnicode '.($this->n + 1).' 0 R'; + $out .= ' /DescendantFonts ['.($this->n + 2).' 0 R]'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + // ToUnicode map for Identity-H + $stream = TCPDF_FONT_DATA::$uni_identity_h; + // ToUnicode Object + $this->_newobj(); + $stream = ($this->compress) ? gzcompress($stream) : $stream; + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + $stream = $this->_getrawstream($stream); + $this->_out('<<'.$filter.'/Length '.strlen($stream).'>> stream'."\n".$stream."\n".'endstream'."\n".'endobj'); + // CIDFontType2 + // A CIDFont whose glyph descriptions are based on TrueType font technology + $oid = $this->_newobj(); + $out = '<< /Type /Font'; + $out .= ' /Subtype /CIDFontType2'; + $out .= ' /BaseFont /'.$fontname; + // A dictionary containing entries that define the character collection of the CIDFont. + $cidinfo = '/Registry '.$this->_datastring($font['cidinfo']['Registry'], $oid); + $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering'], $oid); + $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement']; + $out .= ' /CIDSystemInfo << '.$cidinfo.' >>'; + $out .= ' /FontDescriptor '.($this->n + 1).' 0 R'; + $out .= ' /DW '.$font['dw']; // default width + $out .= "\n".TCPDF_FONTS::_putfontwidths($font, 0); + if (isset($font['ctg']) AND (!TCPDF_STATIC::empty_string($font['ctg']))) { + $out .= "\n".'/CIDToGIDMap '.($this->n + 2).' 0 R'; + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + // Font descriptor + // A font descriptor describing the CIDFont default metrics other than its glyph widths + $this->_newobj(); + $out = '<< /Type /FontDescriptor'; + $out .= ' /FontName /'.$fontname; + foreach ($font['desc'] as $key => $value) { + if (is_float($value)) { + $value = sprintf('%F', $value); + } + $out .= ' /'.$key.' '.$value; + } + $fontdir = false; + if (!TCPDF_STATIC::empty_string($font['file'])) { + // A stream containing a TrueType font + $out .= ' /FontFile2 '.$this->FontFiles[$font['file']]['n'].' 0 R'; + $fontdir = $this->FontFiles[$font['file']]['fontdir']; + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + if (isset($font['ctg']) AND (!TCPDF_STATIC::empty_string($font['ctg']))) { + $this->_newobj(); + // Embed CIDToGIDMap + // A specification of the mapping from CIDs to glyph indices + // search and get CTG font file to embedd + $ctgfile = strtolower($font['ctg']); + // search and get ctg font file to embedd + $fontfile = TCPDF_FONTS::getFontFullPath($ctgfile, $fontdir); + if (TCPDF_STATIC::empty_string($fontfile)) { + $this->Error('Font file not found: '.$ctgfile); + } + $stream = $this->_getrawstream(file_get_contents($fontfile)); + $out = '<< /Length '.strlen($stream).''; + if (substr($fontfile, -2) == '.z') { // check file extension + // Decompresses data encoded using the public-domain + // zlib/deflate compression method, reproducing the + // original text or binary data + $out .= ' /Filter /FlateDecode'; + } + $out .= ' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + + /** + * Output CID-0 fonts. + * A Type 0 CIDFont contains glyph descriptions based on the Adobe Type 1 font format + * @param array $font font data + * @protected + * @author Andrew Whitehead, Nicola Asuni, Yukihiro Nakadaira + * @since 3.2.000 (2008-06-23) + */ + protected function _putcidfont0($font) { + $cidoffset = 0; + if (!isset($font['cw'][1])) { + $cidoffset = 31; + } + if (isset($font['cidinfo']['uni2cid'])) { + // convert unicode to cid. + $uni2cid = $font['cidinfo']['uni2cid']; + $cw = array(); + foreach ($font['cw'] as $uni => $width) { + if (isset($uni2cid[$uni])) { + $cw[($uni2cid[$uni] + $cidoffset)] = $width; + } elseif ($uni < 256) { + $cw[$uni] = $width; + } // else unknown character + } + $font = array_merge($font, array('cw' => $cw)); + } + $name = $font['name']; + $enc = $font['enc']; + if ($enc) { + $longname = $name.'-'.$enc; + } else { + $longname = $name; + } + $out = $this->_getobj($this->font_obj_ids[$font['fontkey']])."\n"; + $out .= '<n + 1).' 0 R]'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + $oid = $this->_newobj(); + $out = '<_datastring($font['cidinfo']['Registry'], $oid); + $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering'], $oid); + $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement']; + $out .= ' /CIDSystemInfo <<'.$cidinfo.'>>'; + $out .= ' /FontDescriptor '.($this->n + 1).' 0 R'; + $out .= ' /DW '.$font['dw']; + $out .= "\n".TCPDF_FONTS::_putfontwidths($font, $cidoffset); + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + $this->_newobj(); + $s = '< $v) { + if ($k != 'Style') { + if (is_float($v)) { + $v = sprintf('%F', $v); + } + $s .= ' /'.$k.' '.$v.''; + } + } + $s .= '>>'; + $s .= "\n".'endobj'; + $this->_out($s); + } + + /** + * Output images. + * @protected + */ + protected function _putimages() { + $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; + foreach ($this->imagekeys as $file) { + $info = $this->getImageBuffer($file); + // set object for alternate images array + if ((!$this->pdfa_mode) AND isset($info['altimgs']) AND !empty($info['altimgs'])) { + $altoid = $this->_newobj(); + $out = '['; + foreach ($info['altimgs'] as $altimage) { + if (isset($this->xobjects['I'.$altimage[0]]['n'])) { + $out .= ' << /Image '.$this->xobjects['I'.$altimage[0]]['n'].' 0 R'; + $out .= ' /DefaultForPrinting'; + if ($altimage[1] === true) { + $out .= ' true'; + } else { + $out .= ' false'; + } + $out .= ' >>'; + } + } + $out .= ' ]'; + $out .= "\n".'endobj'; + $this->_out($out); + } + // set image object + $oid = $this->_newobj(); + $this->xobjects['I'.$info['i']] = array('n' => $oid); + $this->setImageSubBuffer($file, 'n', $this->n); + $out = '<n - 1).' 0 R'; + } + // set color space + $icc = false; + if (isset($info['icc']) AND ($info['icc'] !== false)) { + // ICC Colour Space + $icc = true; + $out .= ' /ColorSpace [/ICCBased '.($this->n + 1).' 0 R]'; + } elseif ($info['cs'] == 'Indexed') { + // Indexed Colour Space + $out .= ' /ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal']) / 3) - 1).' '.($this->n + 1).' 0 R]'; + } else { + // Device Colour Space + $out .= ' /ColorSpace /'.$info['cs']; + } + if ($info['cs'] == 'DeviceCMYK') { + $out .= ' /Decode [1 0 1 0 1 0 1 0]'; + } + $out .= ' /BitsPerComponent '.$info['bpc']; + if (isset($altoid) AND ($altoid > 0)) { + // reference to alternate images dictionary + $out .= ' /Alternates '.$altoid.' 0 R'; + } + if (isset($info['exurl']) AND !empty($info['exurl'])) { + // external stream + $out .= ' /Length 0'; + $out .= ' /F << /FS /URL /F '.$this->_datastring($info['exurl'], $oid).' >>'; + if (isset($info['f'])) { + $out .= ' /FFilter /'.$info['f']; + } + $out .= ' >>'; + $out .= ' stream'."\n".'endstream'; + } else { + if (isset($info['f'])) { + $out .= ' /Filter /'.$info['f']; + } + if (isset($info['parms'])) { + $out .= ' '.$info['parms']; + } + if (isset($info['trns']) AND is_array($info['trns'])) { + $trns = ''; + $count_info = count($info['trns']); + if ($info['cs'] == 'Indexed') { + $maxval =(pow(2, $info['bpc']) - 1); + for ($i = 0; $i < $count_info; ++$i) { + if (($info['trns'][$i] != 0) AND ($info['trns'][$i] != $maxval)) { + // this is not a binary type mask @TODO: create a SMask + $trns = ''; + break; + } elseif (empty($trns) AND ($info['trns'][$i] == 0)) { + // store the first fully transparent value + $trns .= $i.' '.$i.' '; + } + } + } else { + // grayscale or RGB + for ($i = 0; $i < $count_info; ++$i) { + if ($info['trns'][$i] == 0) { + $trns .= $info['trns'][$i].' '.$info['trns'][$i].' '; + } + } + } + // Colour Key Masking + if (!empty($trns)) { + $out .= ' /Mask ['.$trns.']'; + } + } + $stream = $this->_getrawstream($info['data']); + $out .= ' /Length '.strlen($stream).' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + } + $out .= "\n".'endobj'; + $this->_out($out); + if ($icc) { + // ICC colour profile + $this->_newobj(); + $icc = ($this->compress) ? gzcompress($info['icc']) : $info['icc']; + $icc = $this->_getrawstream($icc); + $this->_out('<> stream'."\n".$icc."\n".'endstream'."\n".'endobj'); + } elseif ($info['cs'] == 'Indexed') { + // colour palette + $this->_newobj(); + $pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal']; + $pal = $this->_getrawstream($pal); + $this->_out('<<'.$filter.'/Length '.strlen($pal).'>> stream'."\n".$pal."\n".'endstream'."\n".'endobj'); + } + } + } + + /** + * Output Form XObjects Templates. + * @author Nicola Asuni + * @since 5.8.017 (2010-08-24) + * @protected + * @see startTemplate(), endTemplate(), printTemplate() + */ + protected function _putxobjects() { + foreach ($this->xobjects as $key => $data) { + if (isset($data['outdata'])) { + $stream = str_replace($this->epsmarker, '', trim($data['outdata'])); + $out = $this->_getobj($data['n'])."\n"; + $out .= '<<'; + $out .= ' /Type /XObject'; + $out .= ' /Subtype /Form'; + $out .= ' /FormType 1'; + if ($this->compress) { + $stream = gzcompress($stream); + $out .= ' /Filter /FlateDecode'; + } + $out .= sprintf(' /BBox [%F %F %F %F]', ($data['x'] * $this->k), (-$data['y'] * $this->k), (($data['w'] + $data['x']) * $this->k), (($data['h'] - $data['y']) * $this->k)); + $out .= ' /Matrix [1 0 0 1 0 0]'; + $out .= ' /Resources <<'; + $out .= ' /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'; + if (!$this->pdfa_mode || $this->pdfa_version >= 2) { + // transparency + if (isset($data['extgstates']) AND !empty($data['extgstates'])) { + $out .= ' /ExtGState <<'; + foreach ($data['extgstates'] as $k => $extgstate) { + if (isset($this->extgstates[$k]['name'])) { + $out .= ' /'.$this->extgstates[$k]['name']; + } else { + $out .= ' /GS'.$k; + } + $out .= ' '.$this->extgstates[$k]['n'].' 0 R'; + } + $out .= ' >>'; + } + if (isset($data['gradients']) AND !empty($data['gradients'])) { + $gp = ''; + $gs = ''; + foreach ($data['gradients'] as $id => $grad) { + // gradient patterns + $gp .= ' /p'.$id.' '.$this->gradients[$id]['pattern'].' 0 R'; + // gradient shadings + $gs .= ' /Sh'.$id.' '.$this->gradients[$id]['id'].' 0 R'; + } + $out .= ' /Pattern <<'.$gp.' >>'; + $out .= ' /Shading <<'.$gs.' >>'; + } + } + // spot colors + if (isset($data['spot_colors']) AND !empty($data['spot_colors'])) { + $out .= ' /ColorSpace <<'; + foreach ($data['spot_colors'] as $name => $color) { + $out .= ' /CS'.$color['i'].' '.$this->spot_colors[$name]['n'].' 0 R'; + } + $out .= ' >>'; + } + // fonts + if (!empty($data['fonts'])) { + $out .= ' /Font <<'; + foreach ($data['fonts'] as $fontkey => $fontid) { + $out .= ' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R'; + } + $out .= ' >>'; + } + // images or nested xobjects + if (!empty($data['images']) OR !empty($data['xobjects'])) { + $out .= ' /XObject <<'; + foreach ($data['images'] as $imgid) { + $out .= ' /I'.$imgid.' '.$this->xobjects['I'.$imgid]['n'].' 0 R'; + } + foreach ($data['xobjects'] as $sub_id => $sub_objid) { + $out .= ' /'.$sub_id.' '.$sub_objid['n'].' 0 R'; + } + $out .= ' >>'; + } + $out .= ' >>'; //end resources + if (isset($data['group']) AND ($data['group'] !== false)) { + // set transparency group + $out .= ' /Group << /Type /Group /S /Transparency'; + if (is_array($data['group'])) { + if (isset($data['group']['CS']) AND !empty($data['group']['CS'])) { + $out .= ' /CS /'.$data['group']['CS']; + } + if (isset($data['group']['I'])) { + $out .= ' /I /'.($data['group']['I']===true?'true':'false'); + } + if (isset($data['group']['K'])) { + $out .= ' /K /'.($data['group']['K']===true?'true':'false'); + } + } + $out .= ' >>'; + } + $stream = $this->_getrawstream($stream, $data['n']); + $out .= ' /Length '.strlen($stream); + $out .= ' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + } + + /** + * Output Spot Colors Resources. + * @protected + * @since 4.0.024 (2008-09-12) + */ + protected function _putspotcolors() { + foreach ($this->spot_colors as $name => $color) { + $this->_newobj(); + $this->spot_colors[$name]['n'] = $this->n; + $out = '[/Separation /'.str_replace(' ', '#20', $name); + $out .= ' /DeviceCMYK <<'; + $out .= ' /Range [0 1 0 1 0 1 0 1] /C0 [0 0 0 0]'; + $out .= ' '.sprintf('/C1 [%F %F %F %F] ', ($color['C'] / 100), ($color['M'] / 100), ($color['Y'] / 100), ($color['K'] / 100)); + $out .= ' /FunctionType 2 /Domain [0 1] /N 1>>]'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + + /** + * Return XObjects Dictionary. + * @return string XObjects dictionary + * @protected + * @since 5.8.014 (2010-08-23) + */ + protected function _getxobjectdict() { + $out = ''; + foreach ($this->xobjects as $id => $objid) { + $out .= ' /'.$id.' '.$objid['n'].' 0 R'; + } + return $out; + } + + /** + * Output Resources Dictionary. + * @protected + */ + protected function _putresourcedict() { + $out = $this->_getobj(2)."\n"; + $out .= '<< /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'; + $out .= ' /Font <<'; + foreach ($this->fontkeys as $fontkey) { + $font = $this->getFontBuffer($fontkey); + $out .= ' /F'.$font['i'].' '.$font['n'].' 0 R'; + } + $out .= ' >>'; + $out .= ' /XObject <<'; + $out .= $this->_getxobjectdict(); + $out .= ' >>'; + // layers + if (!empty($this->pdflayers)) { + $out .= ' /Properties <<'; + foreach ($this->pdflayers as $layer) { + $out .= ' /'.$layer['layer'].' '.$layer['objid'].' 0 R'; + } + $out .= ' >>'; + } + if (!$this->pdfa_mode || $this->pdfa_version >= 2) { + // transparency + if (isset($this->extgstates) AND !empty($this->extgstates)) { + $out .= ' /ExtGState <<'; + foreach ($this->extgstates as $k => $extgstate) { + if (isset($extgstate['name'])) { + $out .= ' /'.$extgstate['name']; + } else { + $out .= ' /GS'.$k; + } + $out .= ' '.$extgstate['n'].' 0 R'; + } + $out .= ' >>'; + } + if (isset($this->gradients) AND !empty($this->gradients)) { + $gp = ''; + $gs = ''; + foreach ($this->gradients as $id => $grad) { + // gradient patterns + $gp .= ' /p'.$id.' '.$grad['pattern'].' 0 R'; + // gradient shadings + $gs .= ' /Sh'.$id.' '.$grad['id'].' 0 R'; + } + $out .= ' /Pattern <<'.$gp.' >>'; + $out .= ' /Shading <<'.$gs.' >>'; + } + } + // spot colors + if (isset($this->spot_colors) AND !empty($this->spot_colors)) { + $out .= ' /ColorSpace <<'; + foreach ($this->spot_colors as $color) { + $out .= ' /CS'.$color['i'].' '.$color['n'].' 0 R'; + } + $out .= ' >>'; + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + + /** + * Output Resources. + * @protected + */ + protected function _putresources() { + $this->_putextgstates(); + $this->_putocg(); + $this->_putfonts(); + $this->_putimages(); + $this->_putspotcolors(); + $this->_putshaders(); + $this->_putxobjects(); + $this->_putresourcedict(); + $this->_putdests(); + $this->_putEmbeddedFiles(); + $this->_putannotsobjs(); + $this->_putjavascript(); + $this->_putbookmarks(); + $this->_putencryption(); + } + + /** + * Adds some Metadata information (Document Information Dictionary) + * (see Chapter 14.3.3 Document Information Dictionary of PDF32000_2008.pdf Reference) + * @return int object id + * @protected + */ + protected function _putinfo() { + $oid = $this->_newobj(); + $out = '<<'; + // store current isunicode value + $prev_isunicode = $this->isunicode; + if ($this->docinfounicode) { + $this->isunicode = true; + } + if (!TCPDF_STATIC::empty_string($this->title)) { + // The document's title. + $out .= ' /Title '.$this->_textstring($this->title, $oid); + } + if (!TCPDF_STATIC::empty_string($this->author)) { + // The name of the person who created the document. + $out .= ' /Author '.$this->_textstring($this->author, $oid); + } + if (!TCPDF_STATIC::empty_string($this->subject)) { + // The subject of the document. + $out .= ' /Subject '.$this->_textstring($this->subject, $oid); + } + if (!TCPDF_STATIC::empty_string($this->keywords)) { + // Keywords associated with the document. + $out .= ' /Keywords '.$this->_textstring($this->keywords, $oid); + } + if (!TCPDF_STATIC::empty_string($this->creator)) { + // If the document was converted to PDF from another format, the name of the conforming product that created the original document from which it was converted. + $out .= ' /Creator '.$this->_textstring($this->creator, $oid); + } + // restore previous isunicode value + $this->isunicode = $prev_isunicode; + // default producer + $out .= ' /Producer '.$this->_textstring(TCPDF_STATIC::getTCPDFProducer(), $oid); + // The date and time the document was created, in human-readable form + $out .= ' /CreationDate '.$this->_datestring(0, $this->doc_creation_timestamp); + // The date and time the document was most recently modified, in human-readable form + $out .= ' /ModDate '.$this->_datestring(0, $this->doc_modification_timestamp); + // A name object indicating whether the document has been modified to include trapping information + $out .= ' /Trapped /False'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + return $oid; + } + + /** + * Set additional XMP data to be added on the default XMP data just before the end of "x:xmpmeta" tag. + * IMPORTANT: This data is added as-is without controls, so you have to validate your data before using this method! + * @param string $xmp Custom XMP data. + * @since 5.9.128 (2011-10-06) + * @public + */ + public function setExtraXMP($xmp) { + $this->custom_xmp = $xmp; + } + + /** + * Set additional XMP data to be added on the default XMP data just before the end of "rdf:RDF" tag. + * IMPORTANT: This data is added as-is without controls, so you have to validate your data before using this method! + * @param string $xmp Custom XMP RDF data. + * @since 6.3.0 (2019-09-19) + * @public + */ + public function setExtraXMPRDF($xmp) { + $this->custom_xmp_rdf = $xmp; + } + + /** + * Put XMP data object and return ID. + * @return int The object ID. + * @since 5.9.121 (2011-09-28) + * @protected + */ + protected function _putXMP() { + $oid = $this->_newobj(); + // store current isunicode value + $prev_isunicode = $this->isunicode; + $this->isunicode = true; + $prev_encrypted = $this->encrypted; + $this->encrypted = false; + // set XMP data + $xmp = 'isunicode).'" id="W5M0MpCehiHzreSzNTczkc9d"?>'."\n"; + $xmp .= ''."\n"; + $xmp .= "\t".''."\n"; + $xmp .= "\t\t".''."\n"; + $xmp .= "\t\t\t".'application/pdf'."\n"; + $xmp .= "\t\t\t".''."\n"; + $xmp .= "\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t".''.TCPDF_STATIC::_escapeXML($this->title).''."\n"; + $xmp .= "\t\t\t\t".''."\n"; + $xmp .= "\t\t\t".''."\n"; + $xmp .= "\t\t\t".''."\n"; + $xmp .= "\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t".''.TCPDF_STATIC::_escapeXML($this->author).''."\n"; + $xmp .= "\t\t\t\t".''."\n"; + $xmp .= "\t\t\t".''."\n"; + $xmp .= "\t\t\t".''."\n"; + $xmp .= "\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t".''.TCPDF_STATIC::_escapeXML($this->subject).''."\n"; + $xmp .= "\t\t\t\t".''."\n"; + $xmp .= "\t\t\t".''."\n"; + $xmp .= "\t\t\t".''."\n"; + $xmp .= "\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t".''.TCPDF_STATIC::_escapeXML($this->keywords).''."\n"; + $xmp .= "\t\t\t\t".''."\n"; + $xmp .= "\t\t\t".''."\n"; + $xmp .= "\t\t".''."\n"; + // convert doc creation date format + $dcdate = TCPDF_STATIC::getFormattedDate($this->doc_creation_timestamp); + $doccreationdate = substr($dcdate, 0, 4).'-'.substr($dcdate, 4, 2).'-'.substr($dcdate, 6, 2); + $doccreationdate .= 'T'.substr($dcdate, 8, 2).':'.substr($dcdate, 10, 2).':'.substr($dcdate, 12, 2); + $doccreationdate .= substr($dcdate, 14, 3).':'.substr($dcdate, 18, 2); + $doccreationdate = TCPDF_STATIC::_escapeXML($doccreationdate); + // convert doc modification date format + $dmdate = TCPDF_STATIC::getFormattedDate($this->doc_modification_timestamp); + $docmoddate = substr($dmdate, 0, 4).'-'.substr($dmdate, 4, 2).'-'.substr($dmdate, 6, 2); + $docmoddate .= 'T'.substr($dmdate, 8, 2).':'.substr($dmdate, 10, 2).':'.substr($dmdate, 12, 2); + $docmoddate .= substr($dmdate, 14, 3).':'.substr($dmdate, 18, 2); + $docmoddate = TCPDF_STATIC::_escapeXML($docmoddate); + $xmp .= "\t\t".''."\n"; + $xmp .= "\t\t\t".''.$doccreationdate.''."\n"; + $xmp .= "\t\t\t".''.$this->creator.''."\n"; + $xmp .= "\t\t\t".''.$docmoddate.''."\n"; + $xmp .= "\t\t\t".''.$doccreationdate.''."\n"; + $xmp .= "\t\t".''."\n"; + $xmp .= "\t\t".''."\n"; + $xmp .= "\t\t\t".''.TCPDF_STATIC::_escapeXML($this->keywords).''."\n"; + $xmp .= "\t\t\t".''.TCPDF_STATIC::_escapeXML(TCPDF_STATIC::getTCPDFProducer()).''."\n"; + $xmp .= "\t\t".''."\n"; + $xmp .= "\t\t".''."\n"; + $uuid = 'uuid:'.substr($this->file_id, 0, 8).'-'.substr($this->file_id, 8, 4).'-'.substr($this->file_id, 12, 4).'-'.substr($this->file_id, 16, 4).'-'.substr($this->file_id, 20, 12); + $xmp .= "\t\t\t".''.$uuid.''."\n"; + $xmp .= "\t\t\t".''.$uuid.''."\n"; + $xmp .= "\t\t".''."\n"; + if ($this->pdfa_mode) { + $xmp .= "\t\t".''."\n"; + $xmp .= "\t\t\t".''.$this->pdfa_version.''."\n"; + $xmp .= "\t\t\t".'B'."\n"; + $xmp .= "\t\t".''."\n"; + } + // XMP extension schemas + $xmp .= "\t\t".''."\n"; + $xmp .= "\t\t\t".''."\n"; + $xmp .= "\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t".'http://ns.adobe.com/pdf/1.3/'."\n"; + $xmp .= "\t\t\t\t\t\t".'pdf'."\n"; + $xmp .= "\t\t\t\t\t\t".'Adobe PDF Schema'."\n"; + $xmp .= "\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'internal'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'Adobe PDF Schema'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'InstanceID'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'URI'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t".'http://ns.adobe.com/xap/1.0/mm/'."\n"; + $xmp .= "\t\t\t\t\t\t".'xmpMM'."\n"; + $xmp .= "\t\t\t\t\t\t".'XMP Media Management Schema'."\n"; + $xmp .= "\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'internal'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'UUID based identifier for specific incarnation of a document'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'InstanceID'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'URI'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t".'http://www.aiim.org/pdfa/ns/id/'."\n"; + $xmp .= "\t\t\t\t\t\t".'pdfaid'."\n"; + $xmp .= "\t\t\t\t\t\t".'PDF/A ID Schema'."\n"; + $xmp .= "\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'internal'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'Part of PDF/A standard'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'part'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'Integer'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'internal'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'Amendment of PDF/A standard'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'amd'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'Text'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'internal'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'Conformance level of PDF/A standard'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'conformance'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t\t".'Text'."\n"; + $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t\t".''."\n"; + $xmp .= "\t\t\t\t".''."\n"; + $xmp .= "\t\t\t".''."\n"; + $xmp .= "\t\t".''."\n"; + $xmp .= $this->custom_xmp_rdf; + $xmp .= "\t".''."\n"; + $xmp .= $this->custom_xmp; + $xmp .= ''."\n"; + $xmp .= ''; + $out = '<< /Type /Metadata /Subtype /XML /Length '.strlen($xmp).' >> stream'."\n".$xmp."\n".'endstream'."\n".'endobj'; + // restore previous isunicode value + $this->isunicode = $prev_isunicode; + $this->encrypted = $prev_encrypted; + $this->_out($out); + return $oid; + } + + /** + * Output Catalog. + * @return int object id + * @protected + */ + protected function _putcatalog() { + // put XMP + $xmpobj = $this->_putXMP(); + // if required, add standard sRGB ICC colour profile + if ($this->pdfa_mode OR $this->force_srgb) { + $iccobj = $this->_newobj(); + $icc = file_get_contents(dirname(__FILE__).'/include/sRGB.icc'); + $filter = ''; + if ($this->compress) { + $filter = ' /Filter /FlateDecode'; + $icc = gzcompress($icc); + } + $icc = $this->_getrawstream($icc); + $this->_out('<> stream'."\n".$icc."\n".'endstream'."\n".'endobj'); + } + // start catalog + $oid = $this->_newobj(); + $out = '<< /Type /Catalog'; + $out .= ' /Version /'.$this->PDFVersion; + //$out .= ' /Extensions <<>>'; + $out .= ' /Pages 1 0 R'; + //$out .= ' /PageLabels ' //...; + $out .= ' /Names <<'; + if ((!$this->pdfa_mode) AND !empty($this->n_js)) { + $out .= ' /JavaScript '.$this->n_js; + } + if (!empty($this->efnames)) { + $out .= ' /EmbeddedFiles <efnames AS $fn => $fref) { + $out .= ' '.$this->_datastring($fn).' '.$fref; + } + $out .= ' ]>>'; + } + $out .= ' >>'; + if (!empty($this->dests)) { + $out .= ' /Dests '.($this->n_dests).' 0 R'; + } + $out .= $this->_putviewerpreferences(); + if (isset($this->LayoutMode) AND (!TCPDF_STATIC::empty_string($this->LayoutMode))) { + $out .= ' /PageLayout /'.$this->LayoutMode; + } + if (isset($this->PageMode) AND (!TCPDF_STATIC::empty_string($this->PageMode))) { + $out .= ' /PageMode /'.$this->PageMode; + } + if (count($this->outlines) > 0) { + $out .= ' /Outlines '.$this->OutlineRoot.' 0 R'; + $out .= ' /PageMode /UseOutlines'; + } + //$out .= ' /Threads []'; + if ($this->ZoomMode == 'fullpage') { + $out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /Fit]'; + } elseif ($this->ZoomMode == 'fullwidth') { + $out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /FitH null]'; + } elseif ($this->ZoomMode == 'real') { + $out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /XYZ null null 1]'; + } elseif (!is_string($this->ZoomMode)) { + $out .= sprintf(' /OpenAction ['.$this->page_obj_id[1].' 0 R /XYZ null null %F]', ($this->ZoomMode / 100)); + } + //$out .= ' /AA <<>>'; + //$out .= ' /URI <<>>'; + $out .= ' /Metadata '.$xmpobj.' 0 R'; + //$out .= ' /StructTreeRoot <<>>'; + //$out .= ' /MarkInfo <<>>'; + if (isset($this->l['a_meta_language'])) { + $out .= ' /Lang '.$this->_textstring($this->l['a_meta_language'], $oid); + } + //$out .= ' /SpiderInfo <<>>'; + // set OutputIntent to sRGB IEC61966-2.1 if required + if ($this->pdfa_mode OR $this->force_srgb) { + $out .= ' /OutputIntents [<<'; + $out .= ' /Type /OutputIntent'; + $out .= ' /S /GTS_PDFA1'; + $out .= ' /OutputCondition '.$this->_textstring('sRGB IEC61966-2.1', $oid); + $out .= ' /OutputConditionIdentifier '.$this->_textstring('sRGB IEC61966-2.1', $oid); + $out .= ' /RegistryName '.$this->_textstring('http://www.color.org', $oid); + $out .= ' /Info '.$this->_textstring('sRGB IEC61966-2.1', $oid); + $out .= ' /DestOutputProfile '.$iccobj.' 0 R'; + $out .= ' >>]'; + } + //$out .= ' /PieceInfo <<>>'; + if (!empty($this->pdflayers)) { + $lyrobjs = ''; + $lyrobjs_off = ''; + $lyrobjs_lock = ''; + foreach ($this->pdflayers as $layer) { + $layer_obj_ref = ' '.$layer['objid'].' 0 R'; + $lyrobjs .= $layer_obj_ref; + if ($layer['view'] === false) { + $lyrobjs_off .= $layer_obj_ref; + } + if ($layer['lock']) { + $lyrobjs_lock .= $layer_obj_ref; + } + } + $out .= ' /OCProperties << /OCGs ['.$lyrobjs.']'; + $out .= ' /D <<'; + $out .= ' /Name '.$this->_textstring('Layers', $oid); + $out .= ' /Creator '.$this->_textstring('TCPDF', $oid); + $out .= ' /BaseState /ON'; + $out .= ' /OFF ['.$lyrobjs_off.']'; + $out .= ' /Locked ['.$lyrobjs_lock.']'; + $out .= ' /Intent /View'; + $out .= ' /AS ['; + $out .= ' << /Event /Print /OCGs ['.$lyrobjs.'] /Category [/Print] >>'; + $out .= ' << /Event /View /OCGs ['.$lyrobjs.'] /Category [/View] >>'; + $out .= ' ]'; + $out .= ' /Order ['.$lyrobjs.']'; + $out .= ' /ListMode /AllPages'; + //$out .= ' /RBGroups ['..']'; + //$out .= ' /Locked ['..']'; + $out .= ' >>'; + $out .= ' >>'; + } + // AcroForm + if (!empty($this->form_obj_id) + OR ($this->sign AND isset($this->signature_data['cert_type'])) + OR !empty($this->empty_signature_appearance)) { + $out .= ' /AcroForm <<'; + $objrefs = ''; + if ($this->sign AND isset($this->signature_data['cert_type'])) { + // set reference for signature object + $objrefs .= $this->sig_obj_id.' 0 R'; + } + if (!empty($this->empty_signature_appearance)) { + foreach ($this->empty_signature_appearance as $esa) { + // set reference for empty signature objects + $objrefs .= ' '.$esa['objid'].' 0 R'; + } + } + if (!empty($this->form_obj_id)) { + foreach($this->form_obj_id as $objid) { + $objrefs .= ' '.$objid.' 0 R'; + } + } + $out .= ' /Fields ['.$objrefs.']'; + // It's better to turn off this value and set the appearance stream for each annotation (/AP) to avoid conflicts with signature fields. + if (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A')) { + $out .= ' /NeedAppearances false'; + } + if ($this->sign AND isset($this->signature_data['cert_type'])) { + if ($this->signature_data['cert_type'] > 0) { + $out .= ' /SigFlags 3'; + } else { + $out .= ' /SigFlags 1'; + } + } + //$out .= ' /CO '; + if (isset($this->annotation_fonts) AND !empty($this->annotation_fonts)) { + $out .= ' /DR <<'; + $out .= ' /Font <<'; + foreach ($this->annotation_fonts as $fontkey => $fontid) { + $out .= ' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R'; + } + $out .= ' >> >>'; + } + $font = $this->getFontBuffer('helvetica'); + $out .= ' /DA (/F'.$font['i'].' 0 Tf 0 g)'; + $out .= ' /Q '.(($this->rtl)?'2':'0'); + //$out .= ' /XFA '; + $out .= ' >>'; + // signatures + if ($this->sign AND isset($this->signature_data['cert_type']) + AND (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A'))) { + if ($this->signature_data['cert_type'] > 0) { + $out .= ' /Perms << /DocMDP '.($this->sig_obj_id + 1).' 0 R >>'; + } else { + $out .= ' /Perms << /UR3 '.($this->sig_obj_id + 1).' 0 R >>'; + } + } + } + //$out .= ' /Legal <<>>'; + //$out .= ' /Requirements []'; + //$out .= ' /Collection <<>>'; + //$out .= ' /NeedsRendering true'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + return $oid; + } + + /** + * Output viewer preferences. + * @return string for viewer preferences + * @author Nicola asuni + * @since 3.1.000 (2008-06-09) + * @protected + */ + protected function _putviewerpreferences() { + $vp = $this->viewer_preferences; + $out = ' /ViewerPreferences <<'; + if ($this->rtl) { + $out .= ' /Direction /R2L'; + } else { + $out .= ' /Direction /L2R'; + } + if (isset($vp['HideToolbar']) AND ($vp['HideToolbar'])) { + $out .= ' /HideToolbar true'; + } + if (isset($vp['HideMenubar']) AND ($vp['HideMenubar'])) { + $out .= ' /HideMenubar true'; + } + if (isset($vp['HideWindowUI']) AND ($vp['HideWindowUI'])) { + $out .= ' /HideWindowUI true'; + } + if (isset($vp['FitWindow']) AND ($vp['FitWindow'])) { + $out .= ' /FitWindow true'; + } + if (isset($vp['CenterWindow']) AND ($vp['CenterWindow'])) { + $out .= ' /CenterWindow true'; + } + if (isset($vp['DisplayDocTitle']) AND ($vp['DisplayDocTitle'])) { + $out .= ' /DisplayDocTitle true'; + } + if (isset($vp['NonFullScreenPageMode'])) { + $out .= ' /NonFullScreenPageMode /'.$vp['NonFullScreenPageMode']; + } + if (isset($vp['ViewArea'])) { + $out .= ' /ViewArea /'.$vp['ViewArea']; + } + if (isset($vp['ViewClip'])) { + $out .= ' /ViewClip /'.$vp['ViewClip']; + } + if (isset($vp['PrintArea'])) { + $out .= ' /PrintArea /'.$vp['PrintArea']; + } + if (isset($vp['PrintClip'])) { + $out .= ' /PrintClip /'.$vp['PrintClip']; + } + if (isset($vp['PrintScaling'])) { + $out .= ' /PrintScaling /'.$vp['PrintScaling']; + } + if (isset($vp['Duplex']) AND (!TCPDF_STATIC::empty_string($vp['Duplex']))) { + $out .= ' /Duplex /'.$vp['Duplex']; + } + if (isset($vp['PickTrayByPDFSize'])) { + if ($vp['PickTrayByPDFSize']) { + $out .= ' /PickTrayByPDFSize true'; + } else { + $out .= ' /PickTrayByPDFSize false'; + } + } + if (isset($vp['PrintPageRange'])) { + $PrintPageRangeNum = ''; + foreach ($vp['PrintPageRange'] as $k => $v) { + $PrintPageRangeNum .= ' '.($v - 1).''; + } + $out .= ' /PrintPageRange ['.substr($PrintPageRangeNum,1).']'; + } + if (isset($vp['NumCopies'])) { + $out .= ' /NumCopies '.intval($vp['NumCopies']); + } + $out .= ' >>'; + return $out; + } + + /** + * Output PDF File Header (7.5.2). + * @protected + */ + protected function _putheader() { + $this->_out('%PDF-'.$this->PDFVersion); + $this->_out('%'.chr(0xe2).chr(0xe3).chr(0xcf).chr(0xd3)); + } + + /** + * Output end of document (EOF). + * @protected + */ + protected function _enddoc() { + if (isset($this->CurrentFont['fontkey']) AND isset($this->CurrentFont['subsetchars'])) { + // save subset chars of the previous font + $this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']); + } + $this->state = 1; + $this->_putheader(); + $this->_putpages(); + $this->_putresources(); + // empty signature fields + if (!empty($this->empty_signature_appearance)) { + foreach ($this->empty_signature_appearance as $key => $esa) { + // widget annotation for empty signature + $out = $this->_getobj($esa['objid'])."\n"; + $out .= '<< /Type /Annot'; + $out .= ' /Subtype /Widget'; + $out .= ' /Rect ['.$esa['rect'].']'; + $out .= ' /P '.$this->page_obj_id[($esa['page'])].' 0 R'; // link to signature appearance page + $out .= ' /F 4'; + $out .= ' /FT /Sig'; + $signame = $esa['name'].sprintf(' [%03d]', ($key + 1)); + $out .= ' /T '.$this->_textstring($signame, $esa['objid']); + $out .= ' /Ff 0'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + // Signature + if ($this->sign AND isset($this->signature_data['cert_type'])) { + // widget annotation for signature + $out = $this->_getobj($this->sig_obj_id)."\n"; + $out .= '<< /Type /Annot'; + $out .= ' /Subtype /Widget'; + $out .= ' /Rect ['.$this->signature_appearance['rect'].']'; + $out .= ' /P '.$this->page_obj_id[($this->signature_appearance['page'])].' 0 R'; // link to signature appearance page + $out .= ' /F 4'; + $out .= ' /FT /Sig'; + $out .= ' /T '.$this->_textstring($this->signature_appearance['name'], $this->sig_obj_id); + $out .= ' /Ff 0'; + $out .= ' /V '.($this->sig_obj_id + 1).' 0 R'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + // signature + $this->_putsignature(); + } + // Info + $objid_info = $this->_putinfo(); + // Catalog + $objid_catalog = $this->_putcatalog(); + // Cross-ref + $o = $this->bufferlen; + // XREF section + $this->_out('xref'); + $this->_out('0 '.($this->n + 1)); + $this->_out('0000000000 65535 f '); + $freegen = ($this->n + 2); + for ($i=1; $i <= $this->n; ++$i) { + if (!isset($this->offsets[$i]) AND ($i > 1)) { + $this->_out(sprintf('0000000000 %05d f ', $freegen)); + ++$freegen; + } else { + $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); + } + } + // TRAILER + $out = 'trailer'."\n"; + $out .= '<<'; + $out .= ' /Size '.($this->n + 1); + $out .= ' /Root '.$objid_catalog.' 0 R'; + $out .= ' /Info '.$objid_info.' 0 R'; + if ($this->encrypted) { + $out .= ' /Encrypt '.$this->encryptdata['objid'].' 0 R'; + } + $out .= ' /ID [ <'.$this->file_id.'> <'.$this->file_id.'> ]'; + $out .= ' >>'; + $this->_out($out); + $this->_out('startxref'); + $this->_out($o); + $this->_out('%%EOF'); + $this->state = 3; // end-of-doc + } + + /** + * Initialize a new page. + * @param string $orientation page orientation. Possible values are (case insensitive):
        • P or PORTRAIT (default)
        • L or LANDSCAPE
        + * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). + * @protected + * @see getPageSizeFromFormat(), setPageFormat() + */ + protected function _beginpage($orientation='', $format='') { + ++$this->page; + $this->pageobjects[$this->page] = array(); + $this->setPageBuffer($this->page, ''); + // initialize array for graphics tranformation positions inside a page buffer + $this->transfmrk[$this->page] = array(); + $this->state = 2; + if (TCPDF_STATIC::empty_string($orientation)) { + if (isset($this->CurOrientation)) { + $orientation = $this->CurOrientation; + } elseif ($this->fwPt > $this->fhPt) { + // landscape + $orientation = 'L'; + } else { + // portrait + $orientation = 'P'; + } + } + if (TCPDF_STATIC::empty_string($format)) { + $this->pagedim[$this->page] = $this->pagedim[($this->page - 1)]; + $this->setPageOrientation($orientation); + } else { + $this->setPageFormat($format, $orientation); + } + if ($this->rtl) { + $this->x = $this->w - $this->rMargin; + } else { + $this->x = $this->lMargin; + } + $this->y = $this->tMargin; + if (isset($this->newpagegroup[$this->page])) { + // start a new group + $this->currpagegroup = $this->newpagegroup[$this->page]; + $this->pagegroups[$this->currpagegroup] = 1; + } elseif (isset($this->currpagegroup) AND ($this->currpagegroup > 0)) { + ++$this->pagegroups[$this->currpagegroup]; + } + } + + /** + * Mark end of page. + * @protected + */ + protected function _endpage() { + $this->setVisibility('all'); + $this->state = 1; + } + + /** + * Begin a new object and return the object number. + * @return int object number + * @protected + */ + protected function _newobj() { + $this->_out($this->_getobj()); + return $this->n; + } + + /** + * Return the starting object string for the selected object ID. + * @param int|null $objid Object ID (leave empty to get a new ID). + * @return string the starting object string + * @protected + * @since 5.8.009 (2010-08-20) + */ + protected function _getobj($objid=null) { + if (TCPDF_STATIC::empty_string($objid)) { + ++$this->n; + $objid = $this->n; + } + $this->offsets[$objid] = $this->bufferlen; + $this->pageobjects[$this->page][] = $objid; + return $objid.' 0 obj'; + } + + /** + * Underline text. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to underline + * @protected + */ + protected function _dounderline($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dounderlinew($x, $y, $w); + } + + /** + * Underline for rectangular text area. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param int $w width to underline + * @protected + * @since 4.8.008 (2009-09-29) + */ + protected function _dounderlinew($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%F %F %F %F re f', $x * $this->k, ((($this->h - $y) * $this->k) + $linew), $w * $this->k, $linew); + } + + /** + * Line through text. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to linethrough + * @protected + */ + protected function _dolinethrough($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dolinethroughw($x, $y, $w); + } + + /** + * Line through for rectangular text area. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param int $w line length (width) + * @protected + * @since 4.9.008 (2009-09-29) + */ + protected function _dolinethroughw($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%F %F %F %F re f', $x * $this->k, ((($this->h - $y) * $this->k) + $linew + ($this->FontSizePt / 3)), $w * $this->k, $linew); + } + + /** + * Overline text. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param string $txt text to overline + * @protected + * @since 4.9.015 (2010-04-19) + */ + protected function _dooverline($x, $y, $txt) { + $w = $this->GetStringWidth($txt); + return $this->_dooverlinew($x, $y, $w); + } + + /** + * Overline for rectangular text area. + * @param int $x X coordinate + * @param int $y Y coordinate + * @param int $w width to overline + * @protected + * @since 4.9.015 (2010-04-19) + */ + protected function _dooverlinew($x, $y, $w) { + $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; + return sprintf('%F %F %F %F re f', $x * $this->k, (($this->h - $y + $this->FontAscent) * $this->k) - $linew, $w * $this->k, $linew); + + } + + /** + * Format a data string for meta information + * @param string $s data string to escape. + * @param int $n object ID + * @return string escaped string. + * @protected + */ + protected function _datastring($s, $n=0) { + if ($n == 0) { + $n = $this->n; + } + $s = $this->_encrypt_data($n, $s); + return '('. TCPDF_STATIC::_escape($s).')'; + } + + /** + * Set the document creation timestamp + * @param mixed $time Document creation timestamp in seconds or date-time string. + * @public + * @since 5.9.152 (2012-03-23) + */ + public function setDocCreationTimestamp($time) { + if (is_string($time)) { + $time = TCPDF_STATIC::getTimestamp($time); + } + $this->doc_creation_timestamp = intval($time); + } + + /** + * Set the document modification timestamp + * @param mixed $time Document modification timestamp in seconds or date-time string. + * @public + * @since 5.9.152 (2012-03-23) + */ + public function setDocModificationTimestamp($time) { + if (is_string($time)) { + $time = TCPDF_STATIC::getTimestamp($time); + } + $this->doc_modification_timestamp = intval($time); + } + + /** + * Returns document creation timestamp in seconds. + * @return int Creation timestamp in seconds. + * @public + * @since 5.9.152 (2012-03-23) + */ + public function getDocCreationTimestamp() { + return $this->doc_creation_timestamp; + } + + /** + * Returns document modification timestamp in seconds. + * @return int Modfication timestamp in seconds. + * @public + * @since 5.9.152 (2012-03-23) + */ + public function getDocModificationTimestamp() { + return $this->doc_modification_timestamp; + } + + /** + * Returns a formatted date for meta information + * @param int $n Object ID. + * @param int $timestamp Timestamp to convert. + * @return string escaped date string. + * @protected + * @since 4.6.028 (2009-08-25) + */ + protected function _datestring($n=0, $timestamp=0) { + if ((empty($timestamp)) OR ($timestamp < 0)) { + $timestamp = $this->doc_creation_timestamp; + } + return $this->_datastring('D:'.TCPDF_STATIC::getFormattedDate($timestamp), $n); + } + + /** + * Format a text string for meta information + * @param string $s string to escape. + * @param int $n object ID + * @return string escaped string. + * @protected + */ + protected function _textstring($s, $n=0) { + if ($this->isunicode) { + //Convert string to UTF-16BE + $s = TCPDF_FONTS::UTF8ToUTF16BE($s, true, $this->isunicode, $this->CurrentFont); + } + return $this->_datastring($s, $n); + } + + /** + * get raw output stream. + * @param string $s string to output. + * @param int $n object reference for encryption mode + * @protected + * @author Nicola Asuni + * @since 5.5.000 (2010-06-22) + */ + protected function _getrawstream($s, $n=0) { + if ($n <= 0) { + // default to current object + $n = $this->n; + } + return $this->_encrypt_data($n, $s); + } + + /** + * Output a string to the document. + * @param string $s string to output. + * @protected + */ + protected function _out($s) { + if ($this->state == 2) { + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['outdata'] .= $s."\n"; + } elseif ((!$this->InFooter) AND isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page] > 0)) { + // puts data before page footer + $pagebuff = $this->getPageBuffer($this->page); + $page = substr($pagebuff, 0, -$this->footerlen[$this->page]); + $footer = substr($pagebuff, -$this->footerlen[$this->page]); + $this->setPageBuffer($this->page, $page.$s."\n".$footer); + // update footer position + $this->footerpos[$this->page] += strlen($s."\n"); + } else { + // set page data + $this->setPageBuffer($this->page, $s."\n", true); + } + } elseif ($this->state > 0) { + // set general data + $this->setBuffer($s."\n"); + } + } + + /** + * Set header font. + * @param array $font Array describing the basic font parameters: (family, style, size). + * @phpstan-param array{0: string, 1: string, 2: float|null} $font + * @public + * @since 1.1 + */ + public function setHeaderFont($font) { + $this->header_font = $font; + } + + /** + * Get header font. + * @return array Array describing the basic font parameters: (family, style, size). + * @phpstan-return array{0: string, 1: string, 2: float|null} + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getHeaderFont() { + return $this->header_font; + } + + /** + * Set footer font. + * @param array $font Array describing the basic font parameters: (family, style, size). + * @phpstan-param array{0: string, 1: string, 2: float|null} $font + * @public + * @since 1.1 + */ + public function setFooterFont($font) { + $this->footer_font = $font; + } + + /** + * Get Footer font. + * @return array Array describing the basic font parameters: (family, style, size). + * @phpstan-return array{0: string, 1: string, 2: float|null} $font + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getFooterFont() { + return $this->footer_font; + } + + /** + * Set language array. + * @param array $language + * @public + * @since 1.1 + */ + public function setLanguageArray($language) { + $this->l = $language; + if (isset($this->l['a_meta_dir'])) { + $this->rtl = $this->l['a_meta_dir']=='rtl' ? true : false; + } else { + $this->rtl = false; + } + } + + /** + * Returns the PDF data. + * @public + */ + public function getPDFData() { + if ($this->state < 3) { + $this->Close(); + } + return $this->buffer; + } + + /** + * Output anchor link. + * @param string $url link URL or internal link (i.e.: <a href="#23,4.5">link to page 23 at 4.5 Y position</a>) + * @param string $name link name + * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). + * @param boolean $firstline if true prints only the first line and return the remaining string. + * @param array|null $color array of RGB text color + * @param string $style font style (U, D, B, I) + * @param boolean $firstblock if true the string is the starting of a line. + * @return int the number of cells used or the remaining text if $firstline = true; + * @public + */ + public function addHtmlLink($url, $name, $fill=false, $firstline=false, $color=null, $style=-1, $firstblock=false) { + if (isset($url[1]) AND ($url[0] == '#') AND is_numeric($url[1])) { + // convert url to internal link + $lnkdata = explode(',', $url); + if (isset($lnkdata[0]) ) { + $page = substr($lnkdata[0], 1); + if (isset($lnkdata[1]) AND (strlen($lnkdata[1]) > 0)) { + $lnky = floatval($lnkdata[1]); + } else { + $lnky = 0; + } + $url = $this->AddLink(); + $this->setLink($url, $lnky, $page); + } + } + // store current settings + $prevcolor = $this->fgcolor; + $prevstyle = $this->FontStyle; + if (empty($color)) { + $this->setTextColorArray($this->htmlLinkColorArray); + } else { + $this->setTextColorArray($color); + } + if ($style == -1) { + $this->setFont('', $this->FontStyle.$this->htmlLinkFontStyle); + } else { + $this->setFont('', $this->FontStyle.$style); + } + $ret = $this->Write($this->lasth, $name, $url, $fill, '', false, 0, $firstline, $firstblock, 0); + // restore settings + $this->setFont('', $prevstyle); + $this->setTextColorArray($prevcolor); + return $ret; + } + + /** + * Converts pixels to User's Units. + * @param int $px pixels + * @return float value in user's unit + * @public + * @see setImageScale(), getImageScale() + */ + public function pixelsToUnits($px) { + return ($px / ($this->imgscale * $this->k)); + } + + /** + * Reverse function for htmlentities. + * Convert entities in UTF-8. + * @param string $text_to_convert Text to convert. + * @return string converted text string + * @public + */ + public function unhtmlentities($text_to_convert) { + return @html_entity_decode($text_to_convert, ENT_QUOTES, $this->encoding); + } + + // ENCRYPTION METHODS ---------------------------------- + + /** + * Compute encryption key depending on object number where the encrypted data is stored. + * This is used for all strings and streams without crypt filter specifier. + * @param int $n object number + * @return int object key + * @protected + * @author Nicola Asuni + * @since 2.0.000 (2008-01-02) + */ + protected function _objectkey($n) { + $objkey = $this->encryptdata['key'].pack('VXxx', $n); + if ($this->encryptdata['mode'] == 2) { // AES-128 + // AES padding + $objkey .= "\x73\x41\x6C\x54"; // sAlT + } + $objkey = substr(TCPDF_STATIC::_md5_16($objkey), 0, (($this->encryptdata['Length'] / 8) + 5)); + $objkey = substr($objkey, 0, 16); + return $objkey; + } + + /** + * Encrypt the input string. + * @param int $n object number + * @param string $s data string to encrypt + * @return string encrypted string + * @protected + * @author Nicola Asuni + * @since 5.0.005 (2010-05-11) + */ + protected function _encrypt_data($n, $s) { + if (!$this->encrypted) { + return $s; + } + switch ($this->encryptdata['mode']) { + case 0: // RC4-40 + case 1: { // RC4-128 + $s = TCPDF_STATIC::_RC4($this->_objectkey($n), $s, $this->last_enc_key, $this->last_enc_key_c); + break; + } + case 2: { // AES-128 + $s = TCPDF_STATIC::_AES($this->_objectkey($n), $s); + break; + } + case 3: { // AES-256 + $s = TCPDF_STATIC::_AES($this->encryptdata['key'], $s); + break; + } + } + return $s; + } + + /** + * Put encryption on PDF document. + * @protected + * @author Nicola Asuni + * @since 2.0.000 (2008-01-02) + */ + protected function _putencryption() { + if (!$this->encrypted) { + return; + } + $this->encryptdata['objid'] = $this->_newobj(); + $out = '<<'; + if (!isset($this->encryptdata['Filter']) OR empty($this->encryptdata['Filter'])) { + $this->encryptdata['Filter'] = 'Standard'; + } + $out .= ' /Filter /'.$this->encryptdata['Filter']; + if (isset($this->encryptdata['SubFilter']) AND !empty($this->encryptdata['SubFilter'])) { + $out .= ' /SubFilter /'.$this->encryptdata['SubFilter']; + } + if (!isset($this->encryptdata['V']) OR empty($this->encryptdata['V'])) { + $this->encryptdata['V'] = 1; + } + // V is a code specifying the algorithm to be used in encrypting and decrypting the document + $out .= ' /V '.$this->encryptdata['V']; + if (isset($this->encryptdata['Length']) AND !empty($this->encryptdata['Length'])) { + // The length of the encryption key, in bits. The value shall be a multiple of 8, in the range 40 to 256 + $out .= ' /Length '.$this->encryptdata['Length']; + } else { + $out .= ' /Length 40'; + } + if ($this->encryptdata['V'] >= 4) { + if (!isset($this->encryptdata['StmF']) OR empty($this->encryptdata['StmF'])) { + $this->encryptdata['StmF'] = 'Identity'; + } + if (!isset($this->encryptdata['StrF']) OR empty($this->encryptdata['StrF'])) { + // The name of the crypt filter that shall be used when decrypting all strings in the document. + $this->encryptdata['StrF'] = 'Identity'; + } + // A dictionary whose keys shall be crypt filter names and whose values shall be the corresponding crypt filter dictionaries. + if (isset($this->encryptdata['CF']) AND !empty($this->encryptdata['CF'])) { + $out .= ' /CF <<'; + $out .= ' /'.$this->encryptdata['StmF'].' <<'; + $out .= ' /Type /CryptFilter'; + if (isset($this->encryptdata['CF']['CFM']) AND !empty($this->encryptdata['CF']['CFM'])) { + // The method used + $out .= ' /CFM /'.$this->encryptdata['CF']['CFM']; + if ($this->encryptdata['pubkey']) { + $out .= ' /Recipients ['; + foreach ($this->encryptdata['Recipients'] as $rec) { + $out .= ' <'.$rec.'>'; + } + $out .= ' ]'; + if (isset($this->encryptdata['CF']['EncryptMetadata']) AND (!$this->encryptdata['CF']['EncryptMetadata'])) { + $out .= ' /EncryptMetadata false'; + } else { + $out .= ' /EncryptMetadata true'; + } + } + } else { + $out .= ' /CFM /None'; + } + if (isset($this->encryptdata['CF']['AuthEvent']) AND !empty($this->encryptdata['CF']['AuthEvent'])) { + // The event to be used to trigger the authorization that is required to access encryption keys used by this filter. + $out .= ' /AuthEvent /'.$this->encryptdata['CF']['AuthEvent']; + } else { + $out .= ' /AuthEvent /DocOpen'; + } + if (isset($this->encryptdata['CF']['Length']) AND !empty($this->encryptdata['CF']['Length'])) { + // The bit length of the encryption key. + $out .= ' /Length '.$this->encryptdata['CF']['Length']; + } + $out .= ' >> >>'; + } + // The name of the crypt filter that shall be used by default when decrypting streams. + $out .= ' /StmF /'.$this->encryptdata['StmF']; + // The name of the crypt filter that shall be used when decrypting all strings in the document. + $out .= ' /StrF /'.$this->encryptdata['StrF']; + if (isset($this->encryptdata['EFF']) AND !empty($this->encryptdata['EFF'])) { + // The name of the crypt filter that shall be used when encrypting embedded file streams that do not have their own crypt filter specifier. + $out .= ' /EFF /'.$this->encryptdata['']; + } + } + // Additional encryption dictionary entries for the standard security handler + if ($this->encryptdata['pubkey']) { + if (($this->encryptdata['V'] < 4) AND isset($this->encryptdata['Recipients']) AND !empty($this->encryptdata['Recipients'])) { + $out .= ' /Recipients ['; + foreach ($this->encryptdata['Recipients'] as $rec) { + $out .= ' <'.$rec.'>'; + } + $out .= ' ]'; + } + } else { + $out .= ' /R'; + if ($this->encryptdata['V'] == 5) { // AES-256 + $out .= ' 5'; + $out .= ' /OE ('.TCPDF_STATIC::_escape($this->encryptdata['OE']).')'; + $out .= ' /UE ('.TCPDF_STATIC::_escape($this->encryptdata['UE']).')'; + $out .= ' /Perms ('.TCPDF_STATIC::_escape($this->encryptdata['perms']).')'; + } elseif ($this->encryptdata['V'] == 4) { // AES-128 + $out .= ' 4'; + } elseif ($this->encryptdata['V'] < 2) { // RC-40 + $out .= ' 2'; + } else { // RC-128 + $out .= ' 3'; + } + $out .= ' /O ('.TCPDF_STATIC::_escape($this->encryptdata['O']).')'; + $out .= ' /U ('.TCPDF_STATIC::_escape($this->encryptdata['U']).')'; + $out .= ' /P '.$this->encryptdata['P']; + if (isset($this->encryptdata['EncryptMetadata']) AND (!$this->encryptdata['EncryptMetadata'])) { + $out .= ' /EncryptMetadata false'; + } else { + $out .= ' /EncryptMetadata true'; + } + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + + /** + * Compute U value (used for encryption) + * @return string U value + * @protected + * @since 2.0.000 (2008-01-02) + * @author Nicola Asuni + */ + protected function _Uvalue() { + if ($this->encryptdata['mode'] == 0) { // RC4-40 + return TCPDF_STATIC::_RC4($this->encryptdata['key'], TCPDF_STATIC::$enc_padding, $this->last_enc_key, $this->last_enc_key_c); + } elseif ($this->encryptdata['mode'] < 3) { // RC4-128, AES-128 + $tmp = TCPDF_STATIC::_md5_16(TCPDF_STATIC::$enc_padding.$this->encryptdata['fileid']); + $enc = TCPDF_STATIC::_RC4($this->encryptdata['key'], $tmp, $this->last_enc_key, $this->last_enc_key_c); + $len = strlen($tmp); + for ($i = 1; $i <= 19; ++$i) { + $ek = ''; + for ($j = 0; $j < $len; ++$j) { + $ek .= chr(ord($this->encryptdata['key'][$j]) ^ $i); + } + $enc = TCPDF_STATIC::_RC4($ek, $enc, $this->last_enc_key, $this->last_enc_key_c); + } + $enc .= str_repeat("\x00", 16); + return substr($enc, 0, 32); + } elseif ($this->encryptdata['mode'] == 3) { // AES-256 + $seed = TCPDF_STATIC::_md5_16(TCPDF_STATIC::getRandomSeed()); + // User Validation Salt + $this->encryptdata['UVS'] = substr($seed, 0, 8); + // User Key Salt + $this->encryptdata['UKS'] = substr($seed, 8, 16); + return hash('sha256', $this->encryptdata['user_password'].$this->encryptdata['UVS'], true).$this->encryptdata['UVS'].$this->encryptdata['UKS']; + } + } + + /** + * Compute UE value (used for encryption) + * @return string UE value + * @protected + * @since 5.9.006 (2010-10-19) + * @author Nicola Asuni + */ + protected function _UEvalue() { + $hashkey = hash('sha256', $this->encryptdata['user_password'].$this->encryptdata['UKS'], true); + return TCPDF_STATIC::_AESnopad($hashkey, $this->encryptdata['key']); + } + + /** + * Compute O value (used for encryption) + * @return string O value + * @protected + * @since 2.0.000 (2008-01-02) + * @author Nicola Asuni + */ + protected function _Ovalue() { + if ($this->encryptdata['mode'] < 3) { // RC4-40, RC4-128, AES-128 + $tmp = TCPDF_STATIC::_md5_16($this->encryptdata['owner_password']); + if ($this->encryptdata['mode'] > 0) { + for ($i = 0; $i < 50; ++$i) { + $tmp = TCPDF_STATIC::_md5_16($tmp); + } + } + $owner_key = substr($tmp, 0, ($this->encryptdata['Length'] / 8)); + $enc = TCPDF_STATIC::_RC4($owner_key, $this->encryptdata['user_password'], $this->last_enc_key, $this->last_enc_key_c); + if ($this->encryptdata['mode'] > 0) { + $len = strlen($owner_key); + for ($i = 1; $i <= 19; ++$i) { + $ek = ''; + for ($j = 0; $j < $len; ++$j) { + $ek .= chr(ord($owner_key[$j]) ^ $i); + } + $enc = TCPDF_STATIC::_RC4($ek, $enc, $this->last_enc_key, $this->last_enc_key_c); + } + } + return $enc; + } elseif ($this->encryptdata['mode'] == 3) { // AES-256 + $seed = TCPDF_STATIC::_md5_16(TCPDF_STATIC::getRandomSeed()); + // Owner Validation Salt + $this->encryptdata['OVS'] = substr($seed, 0, 8); + // Owner Key Salt + $this->encryptdata['OKS'] = substr($seed, 8, 16); + return hash('sha256', $this->encryptdata['owner_password'].$this->encryptdata['OVS'].$this->encryptdata['U'], true).$this->encryptdata['OVS'].$this->encryptdata['OKS']; + } + } + + /** + * Compute OE value (used for encryption) + * @return string OE value + * @protected + * @since 5.9.006 (2010-10-19) + * @author Nicola Asuni + */ + protected function _OEvalue() { + $hashkey = hash('sha256', $this->encryptdata['owner_password'].$this->encryptdata['OKS'].$this->encryptdata['U'], true); + return TCPDF_STATIC::_AESnopad($hashkey, $this->encryptdata['key']); + } + + /** + * Convert password for AES-256 encryption mode + * @param string $password password + * @return string password + * @protected + * @since 5.9.006 (2010-10-19) + * @author Nicola Asuni + */ + protected function _fixAES256Password($password) { + $psw = ''; // password to be returned + $psw_array = TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($password, $this->isunicode, $this->CurrentFont), $password, $this->rtl, $this->isunicode, $this->CurrentFont); + foreach ($psw_array as $c) { + $psw .= TCPDF_FONTS::unichr($c, $this->isunicode); + } + return substr($psw, 0, 127); + } + + /** + * Compute encryption key + * @protected + * @since 2.0.000 (2008-01-02) + * @author Nicola Asuni + */ + protected function _generateencryptionkey() { + $keybytelen = ($this->encryptdata['Length'] / 8); + if (!$this->encryptdata['pubkey']) { // standard mode + if ($this->encryptdata['mode'] == 3) { // AES-256 + // generate 256 bit random key + $this->encryptdata['key'] = substr(hash('sha256', TCPDF_STATIC::getRandomSeed(), true), 0, $keybytelen); + // truncate passwords + $this->encryptdata['user_password'] = $this->_fixAES256Password($this->encryptdata['user_password']); + $this->encryptdata['owner_password'] = $this->_fixAES256Password($this->encryptdata['owner_password']); + // Compute U value + $this->encryptdata['U'] = $this->_Uvalue(); + // Compute UE value + $this->encryptdata['UE'] = $this->_UEvalue(); + // Compute O value + $this->encryptdata['O'] = $this->_Ovalue(); + // Compute OE value + $this->encryptdata['OE'] = $this->_OEvalue(); + // Compute P value + $this->encryptdata['P'] = $this->encryptdata['protection']; + // Computing the encryption dictionary's Perms (permissions) value + $perms = TCPDF_STATIC::getEncPermissionsString($this->encryptdata['protection']); // bytes 0-3 + $perms .= chr(255).chr(255).chr(255).chr(255); // bytes 4-7 + if (isset($this->encryptdata['CF']['EncryptMetadata']) AND (!$this->encryptdata['CF']['EncryptMetadata'])) { // byte 8 + $perms .= 'F'; + } else { + $perms .= 'T'; + } + $perms .= 'adb'; // bytes 9-11 + $perms .= 'nick'; // bytes 12-15 + $this->encryptdata['perms'] = TCPDF_STATIC::_AESnopad($this->encryptdata['key'], $perms); + } else { // RC4-40, RC4-128, AES-128 + // Pad passwords + $this->encryptdata['user_password'] = substr($this->encryptdata['user_password'].TCPDF_STATIC::$enc_padding, 0, 32); + $this->encryptdata['owner_password'] = substr($this->encryptdata['owner_password'].TCPDF_STATIC::$enc_padding, 0, 32); + // Compute O value + $this->encryptdata['O'] = $this->_Ovalue(); + // get default permissions (reverse byte order) + $permissions = TCPDF_STATIC::getEncPermissionsString($this->encryptdata['protection']); + // Compute encryption key + $tmp = TCPDF_STATIC::_md5_16($this->encryptdata['user_password'].$this->encryptdata['O'].$permissions.$this->encryptdata['fileid']); + if ($this->encryptdata['mode'] > 0) { + for ($i = 0; $i < 50; ++$i) { + $tmp = TCPDF_STATIC::_md5_16(substr($tmp, 0, $keybytelen)); + } + } + $this->encryptdata['key'] = substr($tmp, 0, $keybytelen); + // Compute U value + $this->encryptdata['U'] = $this->_Uvalue(); + // Compute P value + $this->encryptdata['P'] = $this->encryptdata['protection']; + } + } else { // Public-Key mode + // random 20-byte seed + $seed = sha1(TCPDF_STATIC::getRandomSeed(), true); + $recipient_bytes = ''; + foreach ($this->encryptdata['pubkeys'] as $pubkey) { + // for each public certificate + if (isset($pubkey['p'])) { + $pkprotection = TCPDF_STATIC::getUserPermissionCode($pubkey['p'], $this->encryptdata['mode']); + } else { + $pkprotection = $this->encryptdata['protection']; + } + // get default permissions (reverse byte order) + $pkpermissions = TCPDF_STATIC::getEncPermissionsString($pkprotection); + // envelope data + $envelope = $seed.$pkpermissions; + // write the envelope data to a temporary file + $tempkeyfile = TCPDF_STATIC::getObjFilename('key', $this->file_id); + $f = TCPDF_STATIC::fopenLocal($tempkeyfile, 'wb'); + if (!$f) { + $this->Error('Unable to create temporary key file: '.$tempkeyfile); + } + $envelope_length = strlen($envelope); + fwrite($f, $envelope, $envelope_length); + fclose($f); + $tempencfile = TCPDF_STATIC::getObjFilename('enc', $this->file_id); + if (!openssl_pkcs7_encrypt($tempkeyfile, $tempencfile, $pubkey['c'], array(), PKCS7_BINARY | PKCS7_DETACHED)) { + $this->Error('Unable to encrypt the file: '.$tempkeyfile); + } + // read encryption signature + $signature = file_get_contents($tempencfile, false, null, $envelope_length); + // extract signature + $signature = substr($signature, strpos($signature, 'Content-Disposition')); + $tmparr = explode("\n\n", $signature); + $signature = trim($tmparr[1]); + unset($tmparr); + // decode signature + $signature = base64_decode($signature); + // convert signature to hex + $hexsignature = current(unpack('H*', $signature)); + // store signature on recipients array + $this->encryptdata['Recipients'][] = $hexsignature; + // The bytes of each item in the Recipients array of PKCS#7 objects in the order in which they appear in the array + $recipient_bytes .= $signature; + } + // calculate encryption key + if ($this->encryptdata['mode'] == 3) { // AES-256 + $this->encryptdata['key'] = substr(hash('sha256', $seed.$recipient_bytes, true), 0, $keybytelen); + } else { // RC4-40, RC4-128, AES-128 + $this->encryptdata['key'] = substr(sha1($seed.$recipient_bytes, true), 0, $keybytelen); + } + } + } + + /** + * Set document protection + * Remark: the protection against modification is for people who have the full Acrobat product. + * If you don't set any password, the document will open as usual. If you set a user password, the PDF viewer will ask for it before displaying the document. The master password, if different from the user one, can be used to get full access. + * Note: protecting a document requires to encrypt it, which increases the processing time a lot. This can cause a PHP time-out in some cases, especially if the document contains images or fonts. + * @param array $permissions the set of permissions (specify the ones you want to block):
        • print : Print the document;
        • modify : Modify the contents of the document by operations other than those controlled by 'fill-forms', 'extract' and 'assemble';
        • copy : Copy or otherwise extract text and graphics from the document;
        • annot-forms : Add or modify text annotations, fill in interactive form fields, and, if 'modify' is also set, create or modify interactive form fields (including signature fields);
        • fill-forms : Fill in existing interactive form fields (including signature fields), even if 'annot-forms' is not specified;
        • extract : Extract text and graphics (in support of accessibility to users with disabilities or for other purposes);
        • assemble : Assemble the document (insert, rotate, or delete pages and create bookmarks or thumbnail images), even if 'modify' is not set;
        • print-high : Print the document to a representation from which a faithful digital copy of the PDF content could be generated. When this is not set, printing is limited to a low-level representation of the appearance, possibly of degraded quality.
        • owner : (inverted logic - only for public-key) when set permits change of encryption and enables all other permissions.
        + * @param string $user_pass user password. Empty by default. + * @param string|null $owner_pass owner password. If not specified, a random value is used. + * @param int $mode encryption strength: 0 = RC4 40 bit; 1 = RC4 128 bit; 2 = AES 128 bit; 3 = AES 256 bit. + * @param array|null $pubkeys array of recipients containing public-key certificates ('c') and permissions ('p'). For example: array(array('c' => 'file://../examples/data/cert/tcpdf.crt', 'p' => array('print'))) + * @public + * @since 2.0.000 (2008-01-02) + * @author Nicola Asuni + */ + public function setProtection($permissions=array('print', 'modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble', 'print-high'), $user_pass='', $owner_pass=null, $mode=0, $pubkeys=null) { + if ($this->pdfa_mode) { + // encryption is not allowed in PDF/A mode + return; + } + $this->encryptdata['protection'] = TCPDF_STATIC::getUserPermissionCode($permissions, $mode); + if (($pubkeys !== null) AND (is_array($pubkeys))) { + // public-key mode + $this->encryptdata['pubkeys'] = $pubkeys; + if ($mode == 0) { + // public-Key Security requires at least 128 bit + $mode = 1; + } + if (!function_exists('openssl_pkcs7_encrypt')) { + $this->Error('Public-Key Security requires openssl library.'); + } + // Set Public-Key filter (available are: Entrust.PPKEF, Adobe.PPKLite, Adobe.PubSec) + $this->encryptdata['pubkey'] = true; + $this->encryptdata['Filter'] = 'Adobe.PubSec'; + $this->encryptdata['StmF'] = 'DefaultCryptFilter'; + $this->encryptdata['StrF'] = 'DefaultCryptFilter'; + } else { + // standard mode (password mode) + $this->encryptdata['pubkey'] = false; + $this->encryptdata['Filter'] = 'Standard'; + $this->encryptdata['StmF'] = 'StdCF'; + $this->encryptdata['StrF'] = 'StdCF'; + } + if ($mode > 1) { // AES + if (!extension_loaded('openssl') && !extension_loaded('mcrypt')) { + $this->Error('AES encryption requires openssl or mcrypt extension (http://www.php.net/manual/en/mcrypt.requirements.php).'); + } + if (extension_loaded('openssl') && !in_array('aes-256-cbc', openssl_get_cipher_methods())) { + $this->Error('AES encryption requires openssl/aes-256-cbc cypher.'); + } + if (extension_loaded('mcrypt') && mcrypt_get_cipher_name(MCRYPT_RIJNDAEL_128) === false) { + $this->Error('AES encryption requires MCRYPT_RIJNDAEL_128 cypher.'); + } + if (($mode == 3) AND !function_exists('hash')) { + // the Hash extension requires no external libraries and is enabled by default as of PHP 5.1.2. + $this->Error('AES 256 encryption requires HASH Message Digest Framework (http://www.php.net/manual/en/book.hash.php).'); + } + } + if ($owner_pass === null) { + $owner_pass = md5(TCPDF_STATIC::getRandomSeed()); + } + $this->encryptdata['user_password'] = $user_pass; + $this->encryptdata['owner_password'] = $owner_pass; + $this->encryptdata['mode'] = $mode; + switch ($mode) { + case 0: { // RC4 40 bit + $this->encryptdata['V'] = 1; + $this->encryptdata['Length'] = 40; + $this->encryptdata['CF']['CFM'] = 'V2'; + break; + } + case 1: { // RC4 128 bit + $this->encryptdata['V'] = 2; + $this->encryptdata['Length'] = 128; + $this->encryptdata['CF']['CFM'] = 'V2'; + if ($this->encryptdata['pubkey']) { + $this->encryptdata['SubFilter'] = 'adbe.pkcs7.s4'; + $this->encryptdata['Recipients'] = array(); + } + break; + } + case 2: { // AES 128 bit + $this->encryptdata['V'] = 4; + $this->encryptdata['Length'] = 128; + $this->encryptdata['CF']['CFM'] = 'AESV2'; + $this->encryptdata['CF']['Length'] = 128; + if ($this->encryptdata['pubkey']) { + $this->encryptdata['SubFilter'] = 'adbe.pkcs7.s5'; + $this->encryptdata['Recipients'] = array(); + } + break; + } + case 3: { // AES 256 bit + $this->encryptdata['V'] = 5; + $this->encryptdata['Length'] = 256; + $this->encryptdata['CF']['CFM'] = 'AESV3'; + $this->encryptdata['CF']['Length'] = 256; + if ($this->encryptdata['pubkey']) { + $this->encryptdata['SubFilter'] = 'adbe.pkcs7.s5'; + $this->encryptdata['Recipients'] = array(); + } + break; + } + } + $this->encrypted = true; + $this->encryptdata['fileid'] = TCPDF_STATIC::convertHexStringToString($this->file_id); + $this->_generateencryptionkey(); + } + + // END OF ENCRYPTION FUNCTIONS ------------------------- + + // START TRANSFORMATIONS SECTION ----------------------- + + /** + * Starts a 2D tranformation saving current graphic state. + * This function must be called before scaling, mirroring, translation, rotation and skewing. + * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function StartTransform() { + if ($this->state != 2) { + return; + } + $this->_outSaveGraphicsState(); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['transfmrk'][] = strlen($this->xobjects[$this->xobjid]['outdata']); + } else { + $this->transfmrk[$this->page][] = $this->pagelen[$this->page]; + } + ++$this->transfmatrix_key; + $this->transfmatrix[$this->transfmatrix_key] = array(); + } + + /** + * Stops a 2D tranformation restoring previous graphic state. + * This function must be called after scaling, mirroring, translation, rotation and skewing. + * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function StopTransform() { + if ($this->state != 2) { + return; + } + $this->_outRestoreGraphicsState(); + if (isset($this->transfmatrix[$this->transfmatrix_key])) { + array_pop($this->transfmatrix[$this->transfmatrix_key]); + --$this->transfmatrix_key; + } + if ($this->inxobj) { + // we are inside an XObject template + array_pop($this->xobjects[$this->xobjid]['transfmrk']); + } else { + array_pop($this->transfmrk[$this->page]); + } + } + /** + * Horizontal Scaling. + * @param float $s_x scaling factor for width as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleX($s_x, $x='', $y='') { + $this->Scale($s_x, 100, $x, $y); + } + + /** + * Vertical Scaling. + * @param float $s_y scaling factor for height as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleY($s_y, $x='', $y='') { + $this->Scale(100, $s_y, $x, $y); + } + + /** + * Vertical and horizontal proportional Scaling. + * @param float $s scaling factor for width and height as percent. 0 is not allowed. + * @param int $x abscissa of the scaling center. Default is current x position + * @param int $y ordinate of the scaling center. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function ScaleXY($s, $x='', $y='') { + $this->Scale($s, $s, $x, $y); + } + + /** + * Vertical and horizontal non-proportional Scaling. + * @param float $s_x scaling factor for width as percent. 0 is not allowed. + * @param float $s_y scaling factor for height as percent. 0 is not allowed. + * @param float|null $x abscissa of the scaling center. Default is current x position + * @param float|null $y ordinate of the scaling center. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Scale($s_x, $s_y, $x=null, $y=null) { + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + if (($s_x == 0) OR ($s_y == 0)) { + $this->Error('Please do not use values equal to zero for scaling'); + } + $y = ($this->h - $y) * $this->k; + $x *= $this->k; + //calculate elements of transformation matrix + $s_x /= 100; + $s_y /= 100; + $tm = array(); + $tm[0] = $s_x; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = $s_y; + $tm[4] = $x * (1 - $s_x); + $tm[5] = $y * (1 - $s_y); + //scale the coordinate system + $this->Transform($tm); + } + + /** + * Horizontal Mirroring. + * @param float|null $x abscissa of the point. Default is current x position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorH($x=null) { + $this->Scale(-100, 100, $x); + } + + /** + * Verical Mirroring. + * @param float|null $y ordinate of the point. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorV($y=null) { + $this->Scale(100, -100, null, $y); + } + + /** + * Point reflection mirroring. + * @param float|null $x abscissa of the point. Default is current x position + * @param float|null $y ordinate of the point. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorP($x=null,$y=null) { + $this->Scale(-100, -100, $x, $y); + } + + /** + * Reflection against a straight line through point (x, y) with the gradient angle (angle). + * @param float $angle gradient angle of the straight line. Default is 0 (horizontal line). + * @param float|null $x abscissa of the point. Default is current x position + * @param float|null $y ordinate of the point. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function MirrorL($angle=0, $x=null,$y=null) { + $this->Scale(-100, 100, $x, $y); + $this->Rotate(-2*($angle-90), $x, $y); + } + + /** + * Translate graphic object horizontally. + * @param int $t_x movement to the right (or left for RTL) + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function TranslateX($t_x) { + $this->Translate($t_x, 0); + } + + /** + * Translate graphic object vertically. + * @param int $t_y movement to the bottom + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function TranslateY($t_y) { + $this->Translate(0, $t_y); + } + + /** + * Translate graphic object horizontally and vertically. + * @param int $t_x movement to the right + * @param int $t_y movement to the bottom + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Translate($t_x, $t_y) { + //calculate elements of transformation matrix + $tm = array(); + $tm[0] = 1; + $tm[1] = 0; + $tm[2] = 0; + $tm[3] = 1; + $tm[4] = $t_x * $this->k; + $tm[5] = -$t_y * $this->k; + //translate the coordinate system + $this->Transform($tm); + } + + /** + * Rotate object. + * @param float $angle angle in degrees for counter-clockwise rotation + * @param float|null $x abscissa of the rotation center. Default is current x position + * @param float|null $y ordinate of the rotation center. Default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Rotate($angle, $x=null, $y=null) { + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + $y = ($this->h - $y) * $this->k; + $x *= $this->k; + //calculate elements of transformation matrix + $tm = array(); + $tm[0] = cos(deg2rad($angle)); + $tm[1] = sin(deg2rad($angle)); + $tm[2] = -$tm[1]; + $tm[3] = $tm[0]; + $tm[4] = $x + ($tm[1] * $y) - ($tm[0] * $x); + $tm[5] = $y - ($tm[0] * $y) - ($tm[1] * $x); + //rotate the coordinate system around ($x,$y) + $this->Transform($tm); + } + + /** + * Skew horizontally. + * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right) + * @param float|null $x abscissa of the skewing center. default is current x position + * @param float|null $y ordinate of the skewing center. default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function SkewX($angle_x, $x=null, $y=null) { + $this->Skew($angle_x, 0, $x, $y); + } + + /** + * Skew vertically. + * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top) + * @param float|null $x abscissa of the skewing center. default is current x position + * @param float|null $y ordinate of the skewing center. default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function SkewY($angle_y, $x=null, $y=null) { + $this->Skew(0, $angle_y, $x, $y); + } + + /** + * Skew. + * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right) + * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top) + * @param float|null $x abscissa of the skewing center. default is current x position + * @param float|null $y ordinate of the skewing center. default is current y position + * @public + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + public function Skew($angle_x, $angle_y, $x=null, $y=null) { + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + if (($angle_x <= -90) OR ($angle_x >= 90) OR ($angle_y <= -90) OR ($angle_y >= 90)) { + $this->Error('Please use values between -90 and +90 degrees for Skewing.'); + } + $x *= $this->k; + $y = ($this->h - $y) * $this->k; + //calculate elements of transformation matrix + $tm = array(); + $tm[0] = 1; + $tm[1] = tan(deg2rad($angle_y)); + $tm[2] = tan(deg2rad($angle_x)); + $tm[3] = 1; + $tm[4] = -$tm[2] * $y; + $tm[5] = -$tm[1] * $x; + //skew the coordinate system + $this->Transform($tm); + } + + /** + * Apply graphic transformations. + * @param array $tm transformation matrix + * @protected + * @since 2.1.000 (2008-01-07) + * @see StartTransform(), StopTransform() + */ + protected function Transform($tm) { + if ($this->state != 2) { + return; + } + $this->_out(sprintf('%F %F %F %F %F %F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5])); + // add tranformation matrix + $this->transfmatrix[$this->transfmatrix_key][] = array('a' => $tm[0], 'b' => $tm[1], 'c' => $tm[2], 'd' => $tm[3], 'e' => $tm[4], 'f' => $tm[5]); + // update transformation mark + if ($this->inxobj) { + // we are inside an XObject template + if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) { + $key = key($this->xobjects[$this->xobjid]['transfmrk']); + $this->xobjects[$this->xobjid]['transfmrk'][$key] = strlen($this->xobjects[$this->xobjid]['outdata']); + } + } elseif (end($this->transfmrk[$this->page]) !== false) { + $key = key($this->transfmrk[$this->page]); + $this->transfmrk[$this->page][$key] = $this->pagelen[$this->page]; + } + } + + // END TRANSFORMATIONS SECTION ------------------------- + + // START GRAPHIC FUNCTIONS SECTION --------------------- + // The following section is based on the code provided by David Hernandez Sanz + + /** + * Defines the line width. By default, the value equals 0.2 mm. The method can be called before the first page is created and the value is retained from page to page. + * @param float $width The width. + * @public + * @since 1.0 + * @see Line(), Rect(), Cell(), MultiCell() + */ + public function setLineWidth($width) { + //Set line width + $this->LineWidth = $width; + $this->linestyleWidth = sprintf('%F w', ($width * $this->k)); + if ($this->state == 2) { + $this->_out($this->linestyleWidth); + } + } + + /** + * Returns the current the line width. + * @return int Line width + * @public + * @since 2.1.000 (2008-01-07) + * @see Line(), SetLineWidth() + */ + public function GetLineWidth() { + return $this->LineWidth; + } + + /** + * Set line style. + * @param array $style Line style. Array with keys among the following: + *
          + *
        • width (float): Width of the line in user units.
        • + *
        • cap (string): Type of cap to put on the line. Possible values are: + * butt, round, square. The difference between "square" and "butt" is that + * "square" projects a flat end past the end of the line.
        • + *
        • join (string): Type of join. Possible values are: miter, round, + * bevel.
        • + *
        • dash (mixed): Dash pattern. Is 0 (without dash) or string with + * series of length values, which are the lengths of the on and off dashes. + * For example: "2" represents 2 on, 2 off, 2 on, 2 off, ...; "2,1" is 2 on, + * 1 off, 2 on, 1 off, ...
        • + *
        • phase (integer): Modifier on the dash pattern which is used to shift + * the point at which the pattern starts.
        • + *
        • color (array): Draw color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName).
        • + *
        + * @param boolean $ret if true do not send the command. + * @return string the PDF command + * @public + * @since 2.1.000 (2008-01-08) + */ + public function setLineStyle($style, $ret=false) { + $s = ''; // string to be returned + if (!is_array($style)) { + return $s; + } + if (isset($style['width'])) { + $this->LineWidth = $style['width']; + $this->linestyleWidth = sprintf('%F w', ($style['width'] * $this->k)); + $s .= $this->linestyleWidth.' '; + } + if (isset($style['cap'])) { + $ca = array('butt' => 0, 'round'=> 1, 'square' => 2); + if (isset($ca[$style['cap']])) { + $this->linestyleCap = $ca[$style['cap']].' J'; + $s .= $this->linestyleCap.' '; + } + } + if (isset($style['join'])) { + $ja = array('miter' => 0, 'round' => 1, 'bevel' => 2); + if (isset($ja[$style['join']])) { + $this->linestyleJoin = $ja[$style['join']].' j'; + $s .= $this->linestyleJoin.' '; + } + } + if (isset($style['dash'])) { + $dash_string = ''; + if ($style['dash']) { + if (preg_match('/^.+,/', $style['dash']) > 0) { + $tab = explode(',', $style['dash']); + } else { + $tab = array($style['dash']); + } + $dash_string = ''; + foreach ($tab as $i => $v) { + if ($i) { + $dash_string .= ' '; + } + $dash_string .= sprintf('%F', $v); + } + } + if (!isset($style['phase']) OR !$style['dash']) { + $style['phase'] = 0; + } + $this->linestyleDash = sprintf('[%s] %F d', $dash_string, $style['phase']); + $s .= $this->linestyleDash.' '; + } + if (isset($style['color'])) { + $s .= $this->setDrawColorArray($style['color'], true).' '; + } + if (!$ret AND ($this->state == 2)) { + $this->_out($s); + } + return $s; + } + + /** + * Begin a new subpath by moving the current point to coordinates (x, y), omitting any connecting line segment. + * @param float $x Abscissa of point. + * @param float $y Ordinate of point. + * @protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outPoint($x, $y) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F m', ($x * $this->k), (($this->h - $y) * $this->k))); + } + } + + /** + * Append a straight line segment from the current point to the point (x, y). + * The new current point shall be (x, y). + * @param float $x Abscissa of end point. + * @param float $y Ordinate of end point. + * @protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outLine($x, $y) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F l', ($x * $this->k), (($this->h - $y) * $this->k))); + } + } + + /** + * Append a rectangle to the current path as a complete subpath, with lower-left corner (x, y) and dimensions widthand height in user space. + * @param float $x Abscissa of upper-left corner. + * @param float $y Ordinate of upper-left corner. + * @param float $w Width. + * @param float $h Height. + * @param string $op options + * @protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outRect($x, $y, $w, $h, $op) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F %F %F re %s', ($x * $this->k), (($this->h - $y) * $this->k), ($w * $this->k), (-$h * $this->k), $op)); + } + } + + /** + * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x2, y2) as the Bezier control points. + * The new current point shall be (x3, y3). + * @param float $x1 Abscissa of control point 1. + * @param float $y1 Ordinate of control point 1. + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outCurve($x1, $y1, $x2, $y2, $x3, $y3) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F %F %F %F %F c', ($x1 * $this->k), (($this->h - $y1) * $this->k), ($x2 * $this->k), (($this->h - $y2) * $this->k), ($x3 * $this->k), (($this->h - $y3) * $this->k))); + } + } + + /** + * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using the current point and (x2, y2) as the Bezier control points. + * The new current point shall be (x3, y3). + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @protected + * @since 4.9.019 (2010-04-26) + */ + protected function _outCurveV($x2, $y2, $x3, $y3) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F %F %F v', ($x2 * $this->k), (($this->h - $y2) * $this->k), ($x3 * $this->k), (($this->h - $y3) * $this->k))); + } + } + + /** + * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x3, y3) as the Bezier control points. + * The new current point shall be (x3, y3). + * @param float $x1 Abscissa of control point 1. + * @param float $y1 Ordinate of control point 1. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @protected + * @since 2.1.000 (2008-01-08) + */ + protected function _outCurveY($x1, $y1, $x3, $y3) { + if ($this->state == 2) { + $this->_out(sprintf('%F %F %F %F y', ($x1 * $this->k), (($this->h - $y1) * $this->k), ($x3 * $this->k), (($this->h - $y3) * $this->k))); + } + } + + /** + * Draws a line between two points. + * @param float $x1 Abscissa of first point. + * @param float $y1 Ordinate of first point. + * @param float $x2 Abscissa of second point. + * @param float $y2 Ordinate of second point. + * @param array $style Line style. Array like for SetLineStyle(). Default value: default line style (empty array). + * @public + * @since 1.0 + * @see SetLineWidth(), SetDrawColor(), SetLineStyle() + */ + public function Line($x1, $y1, $x2, $y2, $style=array()) { + if ($this->state != 2) { + return; + } + if (is_array($style)) { + $this->setLineStyle($style); + } + $this->_outPoint($x1, $y1); + $this->_outLine($x2, $y2); + $this->_out('S'); + } + + /** + * Draws a rectangle. + * @param float $x Abscissa of upper-left corner. + * @param float $y Ordinate of upper-left corner. + * @param float $w Width. + * @param float $h Height. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $border_style Border style of rectangle. Array with keys among the following: + *
          + *
        • all: Line style of all borders. Array like for SetLineStyle().
        • + *
        • L, T, R, B or combinations: Line style of left, top, right or bottom border. Array like for SetLineStyle().
        • + *
        + * If a key is not present or is null, the correspondent border is not drawn. Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @public + * @since 1.0 + * @see SetLineStyle() + */ + public function Rect($x, $y, $w, $h, $style='', $border_style=array(), $fill_color=array()) { + if ($this->state != 2) { + return; + } + if (empty($style)) { + $style = 'S'; + } + if (!(strpos($style, 'F') === false) AND !empty($fill_color)) { + // set background color + $this->setFillColorArray($fill_color); + } + if (!empty($border_style)) { + if (isset($border_style['all']) AND !empty($border_style['all'])) { + //set global style for border + $this->setLineStyle($border_style['all']); + $border_style = array(); + } else { + // remove stroke operator from style + $opnostroke = array('S' => '', 'D' => '', 's' => '', 'd' => '', 'B' => 'F', 'FD' => 'F', 'DF' => 'F', 'B*' => 'F*', 'F*D' => 'F*', 'DF*' => 'F*', 'b' => 'f', 'fd' => 'f', 'df' => 'f', 'b*' => 'f*', 'f*d' => 'f*', 'df*' => 'f*' ); + if (isset($opnostroke[$style])) { + $style = $opnostroke[$style]; + } + } + } + if (!empty($style)) { + $op = TCPDF_STATIC::getPathPaintOperator($style); + $this->_outRect($x, $y, $w, $h, $op); + } + if (!empty($border_style)) { + $border_style2 = array(); + foreach ($border_style as $line => $value) { + $length = strlen($line); + for ($i = 0; $i < $length; ++$i) { + $border_style2[$line[$i]] = $value; + } + } + $border_style = $border_style2; + if (isset($border_style['L']) AND $border_style['L']) { + $this->Line($x, $y, $x, $y + $h, $border_style['L']); + } + if (isset($border_style['T']) AND $border_style['T']) { + $this->Line($x, $y, $x + $w, $y, $border_style['T']); + } + if (isset($border_style['R']) AND $border_style['R']) { + $this->Line($x + $w, $y, $x + $w, $y + $h, $border_style['R']); + } + if (isset($border_style['B']) AND $border_style['B']) { + $this->Line($x, $y + $h, $x + $w, $y + $h, $border_style['B']); + } + } + } + + /** + * Draws a Bezier curve. + * The Bezier curve is a tangent to the line between the control points at + * either end of the curve. + * @param float $x0 Abscissa of start point. + * @param float $y0 Ordinate of start point. + * @param float $x1 Abscissa of control point 1. + * @param float $y1 Ordinate of control point 1. + * @param float $x2 Abscissa of control point 2. + * @param float $y2 Ordinate of control point 2. + * @param float $x3 Abscissa of end point. + * @param float $y3 Ordinate of end point. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of curve. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @public + * @see SetLineStyle() + * @since 2.1.000 (2008-01-08) + */ + public function Curve($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3, $style='', $line_style=array(), $fill_color=array()) { + if ($this->state != 2) { + return; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->setFillColorArray($fill_color); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($line_style) { + $this->setLineStyle($line_style); + } + $this->_outPoint($x0, $y0); + $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3); + $this->_out($op); + } + + /** + * Draws a poly-Bezier curve. + * Each Bezier curve segment is a tangent to the line between the control points at + * either end of the curve. + * @param float $x0 Abscissa of start point. + * @param float $y0 Ordinate of start point. + * @param float[] $segments An array of bezier descriptions. Format: array(x1, y1, x2, y2, x3, y3). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of curve. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @public + * @see SetLineStyle() + * @since 3.0008 (2008-05-12) + */ + public function Polycurve($x0, $y0, $segments, $style='', $line_style=array(), $fill_color=array()) { + if ($this->state != 2) { + return; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->setFillColorArray($fill_color); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($line_style) { + $this->setLineStyle($line_style); + } + $this->_outPoint($x0, $y0); + foreach ($segments as $segment) { + list($x1, $y1, $x2, $y2, $x3, $y3) = $segment; + $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3); + } + $this->_out($op); + } + + /** + * Draws an ellipse. + * An ellipse is formed from n Bezier curves. + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $rx Horizontal radius. + * @param float $ry Vertical radius (if ry = 0 then is a circle, see Circle()). Default value: 0. + * @param float $angle Angle oriented (anti-clockwise). Default value: 0. + * @param float $astart Angle start of draw line. Default value: 0. + * @param float $afinish Angle finish of draw line. Default value: 360. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of ellipse. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @param integer $nc Number of curves used to draw a 90 degrees portion of ellipse. + * @author Nicola Asuni + * @public + * @since 2.1.000 (2008-01-08) + */ + public function Ellipse($x0, $y0, $rx, $ry=0, $angle=0, $astart=0, $afinish=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) { + if ($this->state != 2) { + return; + } + if (TCPDF_STATIC::empty_string($ry) OR ($ry == 0)) { + $ry = $rx; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->setFillColorArray($fill_color); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($line_style) { + $this->setLineStyle($line_style); + } + $this->_outellipticalarc($x0, $y0, $rx, $ry, $angle, $astart, $afinish, false, $nc, true, true, false); + $this->_out($op); + } + + /** + * Append an elliptical arc to the current path. + * An ellipse is formed from n Bezier curves. + * @param float $xc Abscissa of center point. + * @param float $yc Ordinate of center point. + * @param float $rx Horizontal radius. + * @param float $ry Vertical radius (if ry = 0 then is a circle, see Circle()). Default value: 0. + * @param float $xang Angle between the X-axis and the major axis of the ellipse. Default value: 0. + * @param float $angs Angle start of draw line. Default value: 0. + * @param float $angf Angle finish of draw line. Default value: 360. + * @param boolean $pie if true do not mark the border point (used to draw pie sectors). + * @param integer $nc Number of curves used to draw a 90 degrees portion of ellipse. + * @param boolean $startpoint if true output a starting point. + * @param boolean $ccw if true draws in counter-clockwise. + * @param boolean $svg if true the angles are in svg mode (already calculated). + * @return array bounding box coordinates (x min, y min, x max, y max) + * @author Nicola Asuni + * @protected + * @since 4.9.019 (2010-04-26) + */ + protected function _outellipticalarc($xc, $yc, $rx, $ry, $xang=0, $angs=0, $angf=360, $pie=false, $nc=2, $startpoint=true, $ccw=true, $svg=false) { + if (($rx <= 0) OR ($ry < 0)) { + return; + } + $k = $this->k; + if ($nc < 2) { + $nc = 2; + } + $xmin = 2147483647; + $ymin = 2147483647; + $xmax = 0; + $ymax = 0; + if ($pie) { + // center of the arc + $this->_outPoint($xc, $yc); + } + $xang = deg2rad((float) $xang); + $angs = deg2rad((float) $angs); + $angf = deg2rad((float) $angf); + if ($svg) { + $as = $angs; + $af = $angf; + } else { + $as = atan2((sin($angs) / $ry), (cos($angs) / $rx)); + $af = atan2((sin($angf) / $ry), (cos($angf) / $rx)); + } + if ($as < 0) { + $as += (2 * M_PI); + } + if ($af < 0) { + $af += (2 * M_PI); + } + if ($ccw AND ($as > $af)) { + // reverse rotation + $as -= (2 * M_PI); + } elseif (!$ccw AND ($as < $af)) { + // reverse rotation + $af -= (2 * M_PI); + } + $total_angle = ($af - $as); + if ($nc < 2) { + $nc = 2; + } + // total arcs to draw + $nc *= (2 * abs($total_angle) / M_PI); + $nc = round($nc) + 1; + // angle of each arc + $arcang = ($total_angle / $nc); + // center point in PDF coordinates + $x0 = $xc; + $y0 = ($this->h - $yc); + // starting angle + $ang = $as; + $alpha = sin($arcang) * ((sqrt(4 + (3 * pow(tan(($arcang) / 2), 2))) - 1) / 3); + $cos_xang = cos($xang); + $sin_xang = sin($xang); + $cos_ang = cos($ang); + $sin_ang = sin($ang); + // first arc point + $px1 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang); + $py1 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang); + // first Bezier control point + $qx1 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang))); + $qy1 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang))); + if ($pie) { + // line from center to arc starting point + $this->_outLine($px1, $this->h - $py1); + } elseif ($startpoint) { + // arc starting point + $this->_outPoint($px1, $this->h - $py1); + } + // draw arcs + for ($i = 1; $i <= $nc; ++$i) { + // starting angle + $ang = $as + ($i * $arcang); + if ($i == $nc) { + $ang = $af; + } + $cos_ang = cos($ang); + $sin_ang = sin($ang); + // second arc point + $px2 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang); + $py2 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang); + // second Bezier control point + $qx2 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang))); + $qy2 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang))); + // draw arc + $cx1 = ($px1 + $qx1); + $cy1 = ($this->h - ($py1 + $qy1)); + $cx2 = ($px2 - $qx2); + $cy2 = ($this->h - ($py2 - $qy2)); + $cx3 = $px2; + $cy3 = ($this->h - $py2); + $this->_outCurve($cx1, $cy1, $cx2, $cy2, $cx3, $cy3); + // get bounding box coordinates + $xmin = min($xmin, $cx1, $cx2, $cx3); + $ymin = min($ymin, $cy1, $cy2, $cy3); + $xmax = max($xmax, $cx1, $cx2, $cx3); + $ymax = max($ymax, $cy1, $cy2, $cy3); + // move to next point + $px1 = $px2; + $py1 = $py2; + $qx1 = $qx2; + $qy1 = $qy2; + } + if ($pie) { + $this->_outLine($xc, $yc); + // get bounding box coordinates + $xmin = min($xmin, $xc); + $ymin = min($ymin, $yc); + $xmax = max($xmax, $xc); + $ymax = max($ymax, $yc); + } + return array($xmin, $ymin, $xmax, $ymax); + } + + /** + * Draws a circle. + * A circle is formed from n Bezier curves. + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $r Radius. + * @param float $angstr Angle start of draw line. Default value: 0. + * @param float $angend Angle finish of draw line. Default value: 360. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of circle. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param integer $nc Number of curves used to draw a 90 degrees portion of circle. + * @public + * @since 2.1.000 (2008-01-08) + */ + public function Circle($x0, $y0, $r, $angstr=0, $angend=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) { + $this->Ellipse($x0, $y0, $r, $r, 0, $angstr, $angend, $style, $line_style, $fill_color, $nc); + } + + /** + * Draws a polygonal line + * @param array $p Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1)) + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon. Array with keys among the following: + *
          + *
        • all: Line style of all lines. Array like for SetLineStyle().
        • + *
        • 0 to ($np - 1): Line style of each line. Array like for SetLineStyle().
        • + *
        + * If a key is not present or is null, not draws the line. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @since 4.8.003 (2009-09-15) + * @public + */ + public function PolyLine($p, $style='', $line_style=array(), $fill_color=array()) { + $this->Polygon($p, $style, $line_style, $fill_color, false); + } + + /** + * Draws a polygon. + * @param array $p Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1)) + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon. Array with keys among the following: + *
          + *
        • all: Line style of all lines. Array like for SetLineStyle().
        • + *
        • 0 to ($np - 1): Line style of each line. Array like for SetLineStyle().
        • + *
        + * If a key is not present or is null, not draws the line. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @param boolean $closed if true the polygon is closes, otherwise will remain open + * @public + * @since 2.1.000 (2008-01-08) + */ + public function Polygon($p, $style='', $line_style=array(), $fill_color=array(), $closed=true) { + if ($this->state != 2) { + return; + } + $nc = count($p); // number of coordinates + $np = $nc / 2; // number of points + if ($closed) { + // close polygon by adding the first 2 points at the end (one line) + for ($i = 0; $i < 4; ++$i) { + $p[$nc + $i] = $p[$i]; + } + // copy style for the last added line + if (isset($line_style[0])) { + $line_style[$np] = $line_style[0]; + } + $nc += 4; + } + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->setFillColorArray($fill_color); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + $draw = true; + if ($line_style) { + if (isset($line_style['all'])) { + $this->setLineStyle($line_style['all']); + } else { + $draw = false; + if ($op == 'B') { + // draw fill + $op = 'f'; + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $this->_outLine($p[$i], $p[$i + 1]); + } + $this->_out($op); + } + // draw outline + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $line_num = ($i / 2) - 1; + if (isset($line_style[$line_num])) { + if ($line_style[$line_num] != 0) { + if (is_array($line_style[$line_num])) { + $this->_out('S'); + $this->setLineStyle($line_style[$line_num]); + $this->_outPoint($p[$i - 2], $p[$i - 1]); + $this->_outLine($p[$i], $p[$i + 1]); + $this->_out('S'); + $this->_outPoint($p[$i], $p[$i + 1]); + } else { + $this->_outLine($p[$i], $p[$i + 1]); + } + } + } else { + $this->_outLine($p[$i], $p[$i + 1]); + } + } + $this->_out($op); + } + } + if ($draw) { + $this->_outPoint($p[0], $p[1]); + for ($i = 2; $i < $nc; $i = $i + 2) { + $this->_outLine($p[$i], $p[$i + 1]); + } + $this->_out($op); + } + } + + /** + * Draws a regular polygon. + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $r Radius of inscribed circle. + * @param integer $ns Number of sides. + * @param float $angle Angle oriented (anti-clockwise). Default value: 0. + * @param boolean $draw_circle Draw inscribed circle or not. Default value: false. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon sides. Array with keys among the following: + *
          + *
        • all: Line style of all sides. Array like for SetLineStyle().
        • + *
        • 0 to ($ns - 1): Line style of each side. Array like for SetLineStyle().
        • + *
        + * If a key is not present or is null, not draws the side. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are: + *
          + *
        • D or empty string: Draw (default).
        • + *
        • F: Fill.
        • + *
        • DF or FD: Draw and fill.
        • + *
        • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
        • + *
        • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
        • + *
        + * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for SetLineStyle(). Default value: default line style (empty array). + * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). + * @public + * @since 2.1.000 (2008-01-08) + */ + public function RegularPolygon($x0, $y0, $r, $ns, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) { + if (3 > $ns) { + $ns = 3; + } + if ($draw_circle) { + $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color); + } + $p = array(); + for ($i = 0; $i < $ns; ++$i) { + $a = $angle + ($i * 360 / $ns); + $a_rad = deg2rad((float) $a); + $p[] = $x0 + ($r * sin($a_rad)); + $p[] = $y0 + ($r * cos($a_rad)); + } + $this->Polygon($p, $style, $line_style, $fill_color); + } + + /** + * Draws a star polygon + * @param float $x0 Abscissa of center point. + * @param float $y0 Ordinate of center point. + * @param float $r Radius of inscribed circle. + * @param integer $nv Number of vertices. + * @param integer $ng Number of gap (if ($ng % $nv = 1) then is a regular polygon). + * @param float $angle Angle oriented (anti-clockwise). Default value: 0. + * @param boolean $draw_circle Draw inscribed circle or not. Default value is false. + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $line_style Line style of polygon sides. Array with keys among the following: + *
          + *
        • all: Line style of all sides. Array like for + * SetLineStyle().
        • + *
        • 0 to (n - 1): Line style of each side. Array like for SetLineStyle().
        • + *
        + * If a key is not present or is null, not draws the side. Default value is default line style (empty array). + * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). + * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are: + *
          + *
        • D or empty string: Draw (default).
        • + *
        • F: Fill.
        • + *
        • DF or FD: Draw and fill.
        • + *
        • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
        • + *
        • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
        • + *
        + * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for SetLineStyle(). Default value: default line style (empty array). + * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). + * @public + * @since 2.1.000 (2008-01-08) + */ + public function StarPolygon($x0, $y0, $r, $nv, $ng, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) { + if ($nv < 2) { + $nv = 2; + } + if ($draw_circle) { + $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color); + } + $p2 = array(); + $visited = array(); + for ($i = 0; $i < $nv; ++$i) { + $a = $angle + ($i * 360 / $nv); + $a_rad = deg2rad((float) $a); + $p2[] = $x0 + ($r * sin($a_rad)); + $p2[] = $y0 + ($r * cos($a_rad)); + $visited[] = false; + } + $p = array(); + $i = 0; + do { + $p[] = $p2[$i * 2]; + $p[] = $p2[($i * 2) + 1]; + $visited[$i] = true; + $i += $ng; + $i %= $nv; + } while (!$visited[$i]); + $this->Polygon($p, $style, $line_style, $fill_color); + } + + /** + * Draws a rounded rectangle. + * @param float $x Abscissa of upper-left corner. + * @param float $y Ordinate of upper-left corner. + * @param float $w Width. + * @param float $h Height. + * @param float $r the radius of the circle used to round off the corners of the rectangle. + * @param string $round_corner Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top right, bottom right, bottom left and top left. Default value: all rounded corner ("1111"). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $border_style Border style of rectangle. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @public + * @since 2.1.000 (2008-01-08) + */ + public function RoundedRect($x, $y, $w, $h, $r, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) { + $this->RoundedRectXY($x, $y, $w, $h, $r, $r, $round_corner, $style, $border_style, $fill_color); + } + + /** + * Draws a rounded rectangle. + * @param float $x Abscissa of upper-left corner. + * @param float $y Ordinate of upper-left corner. + * @param float $w Width. + * @param float $h Height. + * @param float $rx the x-axis radius of the ellipse used to round off the corners of the rectangle. + * @param float $ry the y-axis radius of the ellipse used to round off the corners of the rectangle. + * @param string $round_corner Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top right, bottom right, bottom left and top left. Default value: all rounded corner ("1111"). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param array $border_style Border style of rectangle. Array like for SetLineStyle(). Default value: default line style (empty array). + * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). + * @public + * @since 4.9.019 (2010-04-22) + */ + public function RoundedRectXY($x, $y, $w, $h, $rx, $ry, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) { + if ($this->state != 2) { + return; + } + if (($round_corner == '0000') OR (($rx == $ry) AND ($rx == 0))) { + // Not rounded + $this->Rect($x, $y, $w, $h, $style, $border_style, $fill_color); + return; + } + // Rounded + if (!(false === strpos($style, 'F')) AND isset($fill_color)) { + $this->setFillColorArray($fill_color); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($op == 'f') { + $border_style = array(); + } + if ($border_style) { + $this->setLineStyle($border_style); + } + $MyArc = 4 / 3 * (sqrt(2) - 1); + $this->_outPoint($x + $rx, $y); + $xc = $x + $w - $rx; + $yc = $y + $ry; + $this->_outLine($xc, $y); + if ($round_corner[0]) { + $this->_outCurve($xc + ($rx * $MyArc), $yc - $ry, $xc + $rx, $yc - ($ry * $MyArc), $xc + $rx, $yc); + } else { + $this->_outLine($x + $w, $y); + } + $xc = $x + $w - $rx; + $yc = $y + $h - $ry; + $this->_outLine($x + $w, $yc); + if ($round_corner[1]) { + $this->_outCurve($xc + $rx, $yc + ($ry * $MyArc), $xc + ($rx * $MyArc), $yc + $ry, $xc, $yc + $ry); + } else { + $this->_outLine($x + $w, $y + $h); + } + $xc = $x + $rx; + $yc = $y + $h - $ry; + $this->_outLine($xc, $y + $h); + if ($round_corner[2]) { + $this->_outCurve($xc - ($rx * $MyArc), $yc + $ry, $xc - $rx, $yc + ($ry * $MyArc), $xc - $rx, $yc); + } else { + $this->_outLine($x, $y + $h); + } + $xc = $x + $rx; + $yc = $y + $ry; + $this->_outLine($x, $yc); + if ($round_corner[3]) { + $this->_outCurve($xc - $rx, $yc - ($ry * $MyArc), $xc - ($rx * $MyArc), $yc - $ry, $xc, $yc - $ry); + } else { + $this->_outLine($x, $y); + $this->_outLine($x + $rx, $y); + } + $this->_out($op); + } + + /** + * Draws a grahic arrow. + * @param float $x0 Abscissa of first point. + * @param float $y0 Ordinate of first point. + * @param float $x1 Abscissa of second point. + * @param float $y1 Ordinate of second point. + * @param int $head_style (0 = draw only arrowhead arms, 1 = draw closed arrowhead, but no fill, 2 = closed and filled arrowhead, 3 = filled arrowhead) + * @param float $arm_size length of arrowhead arms + * @param int $arm_angle angle between an arm and the shaft + * @author Piotr Galecki, Nicola Asuni, Andy Meier + * @since 4.6.018 (2009-07-10) + */ + public function Arrow($x0, $y0, $x1, $y1, $head_style=0, $arm_size=5, $arm_angle=15) { + // getting arrow direction angle + // 0 deg angle is when both arms go along X axis. angle grows clockwise. + $dir_angle = atan2(($y0 - $y1), ($x0 - $x1)); + if ($dir_angle < 0) { + $dir_angle += (2 * M_PI); + } + $arm_angle = deg2rad($arm_angle); + $sx1 = $x1; + $sy1 = $y1; + if ($head_style > 0) { + // calculate the stopping point for the arrow shaft + $sx1 = $x1 + (($arm_size - $this->LineWidth) * cos($dir_angle)); + $sy1 = $y1 + (($arm_size - $this->LineWidth) * sin($dir_angle)); + } + // main arrow line / shaft + $this->Line($x0, $y0, $sx1, $sy1); + // left arrowhead arm tip + $x2L = $x1 + ($arm_size * cos($dir_angle + $arm_angle)); + $y2L = $y1 + ($arm_size * sin($dir_angle + $arm_angle)); + // right arrowhead arm tip + $x2R = $x1 + ($arm_size * cos($dir_angle - $arm_angle)); + $y2R = $y1 + ($arm_size * sin($dir_angle - $arm_angle)); + $mode = 'D'; + $style = array(); + switch ($head_style) { + case 0: { + // draw only arrowhead arms + $mode = 'D'; + $style = array(1, 1, 0); + break; + } + case 1: { + // draw closed arrowhead, but no fill + $mode = 'D'; + break; + } + case 2: { + // closed and filled arrowhead + $mode = 'DF'; + break; + } + case 3: { + // filled arrowhead + $mode = 'F'; + break; + } + } + $this->Polygon(array($x2L, $y2L, $x1, $y1, $x2R, $y2R), $mode, $style, array()); + } + + // END GRAPHIC FUNCTIONS SECTION ----------------------- + + /** + * Add a Named Destination. + * NOTE: destination names are unique, so only last entry will be saved. + * @param string $name Destination name. + * @param float $y Y position in user units of the destiantion on the selected page (default = -1 = current position; 0 = page start;). + * @param int|string $page Target page number (leave empty for current page). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. + * @param float $x X position in user units of the destiantion on the selected page (default = -1 = current position;). + * @return string|false Stripped named destination identifier or false in case of error. + * @public + * @author Christian Deligant, Nicola Asuni + * @since 5.9.097 (2011-06-23) + */ + public function setDestination($name, $y=-1, $page='', $x=-1) { + // remove unsupported characters + $name = TCPDF_STATIC::encodeNameObject($name); + if (TCPDF_STATIC::empty_string($name)) { + return false; + } + if ($y == -1) { + $y = $this->GetY(); + } elseif ($y < 0) { + $y = 0; + } elseif ($y > $this->h) { + $y = $this->h; + } + if ($x == -1) { + $x = $this->GetX(); + } elseif ($x < 0) { + $x = 0; + } elseif ($x > $this->w) { + $x = $this->w; + } + $fixed = false; + if (!empty($page) AND (substr($page, 0, 1) == '*')) { + $page = intval(substr($page, 1)); + // this page number will not be changed when moving/add/deleting pages + $fixed = true; + } + if (empty($page)) { + $page = $this->PageNo(); + if (empty($page)) { + return; + } + } + $this->dests[$name] = array('x' => $x, 'y' => $y, 'p' => $page, 'f' => $fixed); + return $name; + } + + /** + * Return the Named Destination array. + * @return array Named Destination array. + * @public + * @author Nicola Asuni + * @since 5.9.097 (2011-06-23) + */ + public function getDestination() { + return $this->dests; + } + + /** + * Insert Named Destinations. + * @protected + * @author Johannes G\FCntert, Nicola Asuni + * @since 5.9.098 (2011-06-23) + */ + protected function _putdests() { + if (empty($this->dests)) { + return; + } + $this->n_dests = $this->_newobj(); + $out = ' <<'; + foreach($this->dests as $name => $o) { + $out .= ' /'.$name.' '.sprintf('[%u 0 R /XYZ %F %F null]', $this->page_obj_id[($o['p'])], ($o['x'] * $this->k), ($this->pagedim[$o['p']]['h'] - ($o['y'] * $this->k))); + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + + /** + * Adds a bookmark - alias for Bookmark(). + * @param string $txt Bookmark description. + * @param int $level Bookmark level (minimum value is 0). + * @param float $y Y position in user units of the bookmark on the selected page (default = -1 = current position; 0 = page start;). + * @param int|string $page Target page number (leave empty for current page). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. + * @param string $style Font style: B = Bold, I = Italic, BI = Bold + Italic. + * @param array $color RGB color array (values from 0 to 255). + * @param float $x X position in user units of the bookmark on the selected page (default = -1 = current position;). + * @param mixed $link URL, or numerical link ID, or named destination (# character followed by the destination name), or embedded file (* character followed by the file name). + * @public + */ + public function setBookmark($txt, $level=0, $y=-1, $page='', $style='', $color=array(0,0,0), $x=-1, $link='') { + $this->Bookmark($txt, $level, $y, $page, $style, $color, $x, $link); + } + + /** + * Adds a bookmark. + * @param string $txt Bookmark description. + * @param int $level Bookmark level (minimum value is 0). + * @param float $y Y position in user units of the bookmark on the selected page (default = -1 = current position; 0 = page start;). + * @param int|string $page Target page number (leave empty for current page). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. + * @param string $style Font style: B = Bold, I = Italic, BI = Bold + Italic. + * @param array $color RGB color array (values from 0 to 255). + * @param float $x X position in user units of the bookmark on the selected page (default = -1 = current position;). + * @param mixed $link URL, or numerical link ID, or named destination (# character followed by the destination name), or embedded file (* character followed by the file name). + * @public + * @since 2.1.002 (2008-02-12) + */ + public function Bookmark($txt, $level=0, $y=-1, $page='', $style='', $color=array(0,0,0), $x=-1, $link='') { + if ($level < 0) { + $level = 0; + } + if (isset($this->outlines[0])) { + $lastoutline = end($this->outlines); + $maxlevel = $lastoutline['l'] + 1; + } else { + $maxlevel = 0; + } + if ($level > $maxlevel) { + $level = $maxlevel; + } + if ($y == -1) { + $y = $this->GetY(); + } elseif ($y < 0) { + $y = 0; + } elseif ($y > $this->h) { + $y = $this->h; + } + if ($x == -1) { + $x = $this->GetX(); + } elseif ($x < 0) { + $x = 0; + } elseif ($x > $this->w) { + $x = $this->w; + } + $fixed = false; + $pageAsString = (string) $page; + if ($pageAsString && $pageAsString[0] == '*') { + $page = intval(substr($page, 1)); + // this page number will not be changed when moving/add/deleting pages + $fixed = true; + } + if (empty($page)) { + $page = $this->PageNo(); + if (empty($page)) { + return; + } + } + $this->outlines[] = array('t' => $txt, 'l' => $level, 'x' => $x, 'y' => $y, 'p' => $page, 'f' => $fixed, 's' => strtoupper($style), 'c' => $color, 'u' => $link); + } + + /** + * Sort bookmarks for page and key. + * @protected + * @since 5.9.119 (2011-09-19) + */ + protected function sortBookmarks() { + // get sorting columns + $outline_p = array(); + $outline_y = array(); + foreach ($this->outlines as $key => $row) { + $outline_p[$key] = $row['p']; + $outline_k[$key] = $key; + } + // sort outlines by page and original position + array_multisort($outline_p, SORT_NUMERIC, SORT_ASC, $outline_k, SORT_NUMERIC, SORT_ASC, $this->outlines); + } + + /** + * Create a bookmark PDF string. + * @protected + * @author Olivier Plathey, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _putbookmarks() { + $nb = count($this->outlines); + if ($nb == 0) { + return; + } + // sort bookmarks + $this->sortBookmarks(); + $lru = array(); + $level = 0; + foreach ($this->outlines as $i => $o) { + if ($o['l'] > 0) { + $parent = $lru[($o['l'] - 1)]; + //Set parent and last pointers + $this->outlines[$i]['parent'] = $parent; + $this->outlines[$parent]['last'] = $i; + if ($o['l'] > $level) { + //Level increasing: set first pointer + $this->outlines[$parent]['first'] = $i; + } + } else { + $this->outlines[$i]['parent'] = $nb; + } + if (($o['l'] <= $level) AND ($i > 0)) { + //Set prev and next pointers + $prev = $lru[$o['l']]; + $this->outlines[$prev]['next'] = $i; + $this->outlines[$i]['prev'] = $prev; + } + $lru[$o['l']] = $i; + $level = $o['l']; + } + //Outline items + $n = $this->n + 1; + $nltags = '/|<\/(blockquote|dd|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|p|pre|ul|tcpdf|table|tr|td)>/si'; + foreach ($this->outlines as $i => $o) { + $oid = $this->_newobj(); + // covert HTML title to string + $title = preg_replace($nltags, "\n", $o['t']); + $title = preg_replace("/[\r]+/si", '', $title); + $title = preg_replace("/[\n]+/si", "\n", $title); + $title = strip_tags($title); + $title = $this->stringTrim($title); + $out = '<_textstring($title, $oid); + $out .= ' /Parent '.($n + $o['parent']).' 0 R'; + if (isset($o['prev'])) { + $out .= ' /Prev '.($n + $o['prev']).' 0 R'; + } + if (isset($o['next'])) { + $out .= ' /Next '.($n + $o['next']).' 0 R'; + } + if (isset($o['first'])) { + $out .= ' /First '.($n + $o['first']).' 0 R'; + } + if (isset($o['last'])) { + $out .= ' /Last '.($n + $o['last']).' 0 R'; + } + if (isset($o['u']) AND !empty($o['u'])) { + // link + if (is_string($o['u'])) { + if ($o['u'][0] == '#') { + // internal destination + $out .= ' /Dest /'.TCPDF_STATIC::encodeNameObject(substr($o['u'], 1)); + } elseif ($o['u'][0] == '%') { + // embedded PDF file + $filename = basename(substr($o['u'], 1)); + $out .= ' /A <
        embeddedfiles[$filename]['a'].' >> >>'; + } elseif ($o['u'][0] == '*') { + // embedded generic file + $filename = basename(substr($o['u'], 1)); + $jsa = 'var D=event.target.doc;var MyData=D.dataObjects;for (var i in MyData) if (MyData[i].path=="'.$filename.'") D.exportDataObject( { cName : MyData[i].name, nLaunch : 2});'; + $out .= ' /A <
        _textstring($jsa, $oid).'>>'; + } else { + // external URI link + $out .= ' /A <
        _datastring($this->unhtmlentities($o['u']), $oid).'>>'; + } + } elseif (isset($this->links[$o['u']])) { + // internal link ID + $l = $this->links[$o['u']]; + if (isset($this->page_obj_id[($l['p'])])) { + $out .= sprintf(' /Dest [%u 0 R /XYZ 0 %F null]', $this->page_obj_id[($l['p'])], ($this->pagedim[$l['p']]['h'] - ($l['y'] * $this->k))); + } + } + } elseif (isset($this->page_obj_id[($o['p'])])) { + // link to a page + $out .= ' '.sprintf('/Dest [%u 0 R /XYZ %F %F null]', $this->page_obj_id[($o['p'])], ($o['x'] * $this->k), ($this->pagedim[$o['p']]['h'] - ($o['y'] * $this->k))); + } + // set font style + $style = 0; + if (!empty($o['s'])) { + // bold + if (strpos($o['s'], 'B') !== false) { + $style |= 2; + } + // oblique + if (strpos($o['s'], 'I') !== false) { + $style |= 1; + } + } + $out .= sprintf(' /F %d', $style); + // set bookmark color + if (isset($o['c']) AND is_array($o['c']) AND (count($o['c']) == 3)) { + $color = array_values($o['c']); + $out .= sprintf(' /C [%F %F %F]', ($color[0] / 255), ($color[1] / 255), ($color[2] / 255)); + } else { + // black + $out .= ' /C [0.0 0.0 0.0]'; + } + $out .= ' /Count 0'; // normally closed item + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + //Outline root + $this->OutlineRoot = $this->_newobj(); + $this->_out('<< /Type /Outlines /First '.$n.' 0 R /Last '.($n + $lru[0]).' 0 R >>'."\n".'endobj'); + } + + // --- JAVASCRIPT ------------------------------------------------------ + + /** + * Adds a javascript + * @param string $script Javascript code + * @public + * @author Johannes G\FCntert, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + public function IncludeJS($script) { + $this->javascript .= $script; + } + + /** + * Adds a javascript object and return object ID + * @param string $script Javascript code + * @param boolean $onload if true executes this object when opening the document + * @return int internal object ID + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function addJavascriptObject($script, $onload=false) { + if ($this->pdfa_mode) { + // javascript is not allowed in PDF/A mode + return false; + } + ++$this->n; + $this->js_objects[$this->n] = array('n' => $this->n, 'js' => $script, 'onload' => $onload); + return $this->n; + } + + /** + * Create a javascript PDF string. + * @protected + * @author Johannes G\FCntert, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _putjavascript() { + if ($this->pdfa_mode OR (empty($this->javascript) AND empty($this->js_objects))) { + return; + } + if (strpos($this->javascript, 'this.addField') > 0) { + if (!$this->ur['enabled']) { + //$this->setUserRights(); + } + // the following two lines are used to avoid form fields duplication after saving + // The addField method only works when releasing user rights (UR3) + $jsa = sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d,[%F,%F,%F,%F]);", 'tcpdfdocsaved', 'text', 0, 0, 1, 0, 1); + $jsb = "getField('tcpdfdocsaved').value='saved';"; + $this->javascript = $jsa."\n".$this->javascript."\n".$jsb; + } + // name tree for javascript + $this->n_js = '<< /Names ['; + if (!empty($this->javascript)) { + $this->n_js .= ' (EmbeddedJS) '.($this->n + 1).' 0 R'; + } + if (!empty($this->js_objects)) { + foreach ($this->js_objects as $key => $val) { + if ($val['onload']) { + $this->n_js .= ' (JS'.$key.') '.$key.' 0 R'; + } + } + } + $this->n_js .= ' ] >>'; + // default Javascript object + if (!empty($this->javascript)) { + $obj_id = $this->_newobj(); + $out = '<< /S /JavaScript'; + $out .= ' /JS '.$this->_textstring($this->javascript, $obj_id); + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + // additional Javascript objects + if (!empty($this->js_objects)) { + foreach ($this->js_objects as $key => $val) { + $out = $this->_getobj($key)."\n".' << /S /JavaScript /JS '.$this->_textstring($val['js'], $key).' >>'."\n".'endobj'; + $this->_out($out); + } + } + } + + /** + * Adds a javascript form field. + * @param string $type field type + * @param string $name field name + * @param int $x horizontal position + * @param int $y vertical position + * @param int $w width + * @param int $h height + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @protected + * @author Denis Van Nuffelen, Nicola Asuni + * @since 2.1.002 (2008-02-12) + */ + protected function _addfield($type, $name, $x, $y, $w, $h, $prop) { + if ($this->rtl) { + $x = $x - $w; + } + // the followind avoid fields duplication after saving the document + $this->javascript .= "if (getField('tcpdfdocsaved').value != 'saved') {"; + $k = $this->k; + $this->javascript .= sprintf("f".$name."=this.addField('%s','%s',%u,[%F,%F,%F,%F]);", $name, $type, $this->PageNo()-1, $x*$k, ($this->h-$y)*$k+1, ($x+$w)*$k, ($this->h-$y-$h)*$k+1)."\n"; + $this->javascript .= 'f'.$name.'.textSize='.$this->FontSizePt.";\n"; + foreach($prop as $key => $val) { + if (strcmp(substr($key, -5), 'Color') == 0) { + $val = TCPDF_COLORS::_JScolor($val); + } else { + $val = "'".$val."'"; + } + $this->javascript .= 'f'.$name.'.'.$key.'='.$val.";\n"; + } + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + $this->javascript .= '}'; + } + + // --- FORM FIELDS ----------------------------------------------------- + + + + /** + * Set default properties for form fields. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + */ + public function setFormDefaultProp($prop=array()) { + $this->default_form_prop = $prop; + } + + /** + * Return the default properties for form fields. + * @return array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-06) + */ + public function getFormDefaultProp() { + return $this->default_form_prop; + } + + /** + * Creates a text field + * @param string $name field name + * @param float $w Width of the rectangle + * @param float $h Height of the rectangle + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float|null $x Abscissa of the upper-left corner of the rectangle + * @param float|null $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function TextField($name, $w, $h, $prop=array(), $opt=array(), $x=null, $y=null, $js=false) { + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + if ($js) { + $this->_addfield('text', $name, $x, $y, $w, $h, $prop); + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + // set default appearance stream + $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; + $text = ''; + if (isset($prop['value']) AND !empty($prop['value'])) { + $text = $prop['value']; + } elseif (isset($opt['v']) AND !empty($opt['v'])) { + $text = $opt['v']; + } + $tmpid = $this->startTemplate($w, $h, false); + $align = ''; + if (isset($popt['q'])) { + switch ($popt['q']) { + case 0: { + $align = 'L'; + break; + } + case 1: { + $align = 'C'; + break; + } + case 2: { + $align = 'R'; + break; + } + default: { + $align = ''; + break; + } + } + } + $this->MultiCell($w, $h, $text, 0, $align, false, 0, 0, 0, true, 0, false, true, 0, 'T', false); + $this->endTemplate(); + --$this->n; + $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; + unset($this->xobjects[$tmpid]); + $popt['ap']['n'] .= 'Q EMC'; + // merge options + $opt = array_merge($popt, $opt); + // remove some conflicting options + unset($opt['bs']); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Tx'; + $opt['t'] = $name; + // Additional annotation's parameters (check _putannotsobj() method): + //$opt['f'] + //$opt['as'] + //$opt['bs'] + //$opt['be'] + //$opt['c'] + //$opt['border'] + //$opt['h'] + //$opt['mk']; + //$opt['mk']['r'] + //$opt['mk']['bc']; + //$opt['mk']['bg']; + unset($opt['mk']['ca']); + unset($opt['mk']['rc']); + unset($opt['mk']['ac']); + unset($opt['mk']['i']); + unset($opt['mk']['ri']); + unset($opt['mk']['ix']); + unset($opt['mk']['if']); + //$opt['mk']['if']['sw']; + //$opt['mk']['if']['s']; + //$opt['mk']['if']['a']; + //$opt['mk']['if']['fb']; + unset($opt['mk']['tp']); + //$opt['tu'] + //$opt['tm'] + //$opt['ff'] + //$opt['v'] + //$opt['dv'] + //$opt['a'] + //$opt['aa'] + //$opt['q'] + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a RadioButton field. + * @param string $name Field name. + * @param int $w Width of the radio button. + * @param array $prop Javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt Annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param string $onvalue Value to be returned if selected. + * @param boolean $checked Define the initial state. + * @param float|null $x Abscissa of the upper-left corner of the rectangle + * @param float|null $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js If true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function RadioButton($name, $w, $prop=array(), $opt=array(), $onvalue='On', $checked=false, $x=null, $y=null, $js=false) { + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($w, $x, $y); + if ($js) { + $this->_addfield('radiobutton', $name, $x, $y, $w, $w, $prop); + return; + } + if (TCPDF_STATIC::empty_string($onvalue)) { + $onvalue = 'On'; + } + if ($checked) { + $defval = $onvalue; + } else { + $defval = 'Off'; + } + // set font + $font = 'zapfdingbats'; + if ($this->pdfa_mode) { + // all fonts must be embedded + $font = 'pdfa'.$font; + } + $this->AddFont($font); + $tmpfont = $this->getFontBuffer($font); + // set data for parent group + if (!isset($this->radiobutton_groups[$this->page])) { + $this->radiobutton_groups[$this->page] = array(); + } + if (!isset($this->radiobutton_groups[$this->page][$name])) { + $this->radiobutton_groups[$this->page][$name] = array(); + ++$this->n; + $this->radiobutton_groups[$this->page][$name]['n'] = $this->n; + $this->radio_groups[] = $this->n; + } + $kid = ($this->n + 1); + // save object ID to be added on Kids entry on parent object + $this->radiobutton_groups[$this->page][$name][] = array('kid' => $kid, 'def' => $defval); + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['NoToggleToOff'] = 'true'; + $prop['Radio'] = 'true'; + $prop['borderStyle'] = 'inset'; + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + // set additional default options + $this->annotation_fonts[$tmpfont['fontkey']] = $tmpfont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $tmpfont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = array(); + $fx = ((($w - $this->getAbsFontMeasure($tmpfont['cw'][108])) / 2) * $this->k); + $fy = (($w - ((($tmpfont['desc']['Ascent'] - $tmpfont['desc']['Descent']) * $this->FontSizePt / 1000) / $this->k)) * $this->k); + $popt['ap']['n'][$onvalue] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(108).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); + $popt['ap']['n']['Off'] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(109).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); + if (!isset($popt['mk'])) { + $popt['mk'] = array(); + } + $popt['mk']['ca'] = '(l)'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + if ($checked) { + $opt['v'] = array('/'.$onvalue); + $opt['as'] = $onvalue; + } else { + $opt['as'] = 'Off'; + } + // store readonly flag + if (!isset($this->radiobutton_groups[$this->page][$name]['#readonly#'])) { + $this->radiobutton_groups[$this->page][$name]['#readonly#'] = false; + } + $this->radiobutton_groups[$this->page][$name]['#readonly#'] |= ($opt['f'] & 64); + $this->Annotation($x, $y, $w, $w, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a List-box field + * @param string $name field name + * @param int $w width + * @param int $h height + * @param array $values array containing the list of values. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float|null $x Abscissa of the upper-left corner of the rectangle + * @param float|null $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function ListBox($name, $w, $h, $values, $prop=array(), $opt=array(), $x=null, $y=null, $js=false) { + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + if ($js) { + $this->_addfield('listbox', $name, $x, $y, $w, $h, $prop); + $s = ''; + foreach ($values as $value) { + if (is_array($value)) { + $s .= ',[\''.addslashes($value[1]).'\',\''.addslashes($value[0]).'\']'; + } else { + $s .= ',[\''.addslashes($value).'\',\''.addslashes($value).'\']'; + } + } + $this->javascript .= 'f'.$name.'.setItems('.substr($s, 1).');'."\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + // set additional default values + $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; + $text = ''; + foreach($values as $item) { + if (is_array($item)) { + $text .= $item[1]."\n"; + } else { + $text .= $item."\n"; + } + } + $tmpid = $this->startTemplate($w, $h, false); + $this->MultiCell($w, $h, $text, 0, '', false, 0, 0, 0, true, 0, false, true, 0, 'T', false); + $this->endTemplate(); + --$this->n; + $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; + unset($this->xobjects[$tmpid]); + $popt['ap']['n'] .= 'Q EMC'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Ch'; + $opt['t'] = $name; + $opt['opt'] = $values; + unset($opt['mk']['ca']); + unset($opt['mk']['rc']); + unset($opt['mk']['ac']); + unset($opt['mk']['i']); + unset($opt['mk']['ri']); + unset($opt['mk']['ix']); + unset($opt['mk']['if']); + unset($opt['mk']['tp']); + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a Combo-box field + * @param string $name field name + * @param int $w width + * @param int $h height + * @param array $values array containing the list of values. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float|null $x Abscissa of the upper-left corner of the rectangle + * @param float|null $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function ComboBox($name, $w, $h, $values, $prop=array(), $opt=array(), $x=null, $y=null, $js=false) { + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + if ($js) { + $this->_addfield('combobox', $name, $x, $y, $w, $h, $prop); + $s = ''; + foreach ($values as $value) { + if (is_array($value)) { + $s .= ',[\''.addslashes($value[1]).'\',\''.addslashes($value[0]).'\']'; + } else { + $s .= ',[\''.addslashes($value).'\',\''.addslashes($value).'\']'; + } + } + $this->javascript .= 'f'.$name.'.setItems('.substr($s, 1).');'."\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['Combo'] = true; + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + // set additional default options + $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; + $text = ''; + foreach($values as $item) { + if (is_array($item)) { + $text .= $item[1]."\n"; + } else { + $text .= $item."\n"; + } + } + $tmpid = $this->startTemplate($w, $h, false); + $this->MultiCell($w, $h, $text, 0, '', false, 0, 0, 0, true, 0, false, true, 0, 'T', false); + $this->endTemplate(); + --$this->n; + $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; + unset($this->xobjects[$tmpid]); + $popt['ap']['n'] .= 'Q EMC'; + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Ch'; + $opt['t'] = $name; + $opt['opt'] = $values; + unset($opt['mk']['ca']); + unset($opt['mk']['rc']); + unset($opt['mk']['ac']); + unset($opt['mk']['i']); + unset($opt['mk']['ri']); + unset($opt['mk']['ix']); + unset($opt['mk']['if']); + unset($opt['mk']['tp']); + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a CheckBox field + * @param string $name field name + * @param int $w width + * @param boolean $checked define the initial state. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param string $onvalue value to be returned if selected. + * @param float|null $x Abscissa of the upper-left corner of the rectangle + * @param float|null $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function CheckBox($name, $w, $checked=false, $prop=array(), $opt=array(), $onvalue='Yes', $x=null, $y=null, $js=false) { + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($w, $x, $y); + if ($js) { + $this->_addfield('checkbox', $name, $x, $y, $w, $w, $prop); + return; + } + if (!isset($prop['value'])) { + $prop['value'] = array('Yes'); + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['borderStyle'] = 'inset'; + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + // set additional default options + $font = 'zapfdingbats'; + if ($this->pdfa_mode) { + // all fonts must be embedded + $font = 'pdfa'.$font; + } + $this->AddFont($font); + $tmpfont = $this->getFontBuffer($font); + $this->annotation_fonts[$tmpfont['fontkey']] = $tmpfont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $tmpfont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = array(); + $fx = ((($w - $this->getAbsFontMeasure($tmpfont['cw'][110])) / 2) * $this->k); + $fy = (($w - ((($tmpfont['desc']['Ascent'] - $tmpfont['desc']['Descent']) * $this->FontSizePt / 1000) / $this->k)) * $this->k); + $popt['ap']['n']['Yes'] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(110).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); + $popt['ap']['n']['Off'] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(111).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + $opt['t'] = $name; + if (TCPDF_STATIC::empty_string($onvalue)) { + $onvalue = 'Yes'; + } + $opt['opt'] = array($onvalue); + if ($checked) { + $opt['v'] = array('/Yes'); + $opt['as'] = 'Yes'; + } else { + $opt['v'] = array('/Off'); + $opt['as'] = 'Off'; + } + $this->Annotation($x, $y, $w, $w, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + /** + * Creates a button field + * @param string $name field name + * @param int $w width + * @param int $h height + * @param string $caption caption. + * @param mixed $action action triggered by pressing the button. Use a string to specify a javascript action. Use an array to specify a form action options as on section 12.7.5 of PDF32000_2008. + * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. + * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. + * @param float|null $x Abscissa of the upper-left corner of the rectangle + * @param float|null $y Ordinate of the upper-left corner of the rectangle + * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). + * @public + * @author Nicola Asuni + * @since 4.8.000 (2009-09-07) + */ + public function Button($name, $w, $h, $caption, $action, $prop=array(), $opt=array(), $x=null, $y=null, $js=false) { + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + if ($js) { + $this->_addfield('button', $name, $this->x, $this->y, $w, $h, $prop); + $this->javascript .= 'f'.$name.".buttonSetCaption('".addslashes($caption)."');\n"; + $this->javascript .= 'f'.$name.".setAction('MouseUp','".addslashes($action)."');\n"; + $this->javascript .= 'f'.$name.".highlight='push';\n"; + $this->javascript .= 'f'.$name.".print=false;\n"; + return; + } + // get default style + $prop = array_merge($this->getFormDefaultProp(), $prop); + $prop['Pushbutton'] = 'true'; + $prop['highlight'] = 'push'; + $prop['display'] = 'display.noPrint'; + // get annotation data + $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); + $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; + $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); + $popt['da'] = $fontstyle; + // build appearance stream + $popt['ap'] = array(); + $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; + $tmpid = $this->startTemplate($w, $h, false); + $bw = (2 / $this->k); // border width + $border = array( + 'L' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(231)), + 'R' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(51)), + 'T' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(231)), + 'B' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(51))); + $this->setFillColor(204); + $this->Cell($w, $h, $caption, $border, 0, 'C', true, '', 1, false, 'T', 'M'); + $this->endTemplate(); + --$this->n; + $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; + unset($this->xobjects[$tmpid]); + $popt['ap']['n'] .= 'Q EMC'; + // set additional default options + if (!isset($popt['mk'])) { + $popt['mk'] = array(); + } + $ann_obj_id = ($this->n + 1); + if (!empty($action) AND !is_array($action)) { + $ann_obj_id = ($this->n + 2); + } + $popt['mk']['ca'] = $this->_textstring($caption, $ann_obj_id); + $popt['mk']['rc'] = $this->_textstring($caption, $ann_obj_id); + $popt['mk']['ac'] = $this->_textstring($caption, $ann_obj_id); + // merge options + $opt = array_merge($popt, $opt); + // set remaining annotation data + $opt['Subtype'] = 'Widget'; + $opt['ft'] = 'Btn'; + $opt['t'] = $caption; + $opt['v'] = $name; + if (!empty($action)) { + if (is_array($action)) { + // form action options as on section 12.7.5 of PDF32000_2008. + $opt['aa'] = '/D <<'; + $bmode = array('SubmitForm', 'ResetForm', 'ImportData'); + foreach ($action AS $key => $val) { + if (($key == 'S') AND in_array($val, $bmode)) { + $opt['aa'] .= ' /S /'.$val; + } elseif (($key == 'F') AND (!empty($val))) { + $opt['aa'] .= ' /F '.$this->_datastring($val, $ann_obj_id); + } elseif (($key == 'Fields') AND is_array($val) AND !empty($val)) { + $opt['aa'] .= ' /Fields ['; + foreach ($val AS $field) { + $opt['aa'] .= ' '.$this->_textstring($field, $ann_obj_id); + } + $opt['aa'] .= ']'; + } elseif (($key == 'Flags')) { + $ff = 0; + if (is_array($val)) { + foreach ($val AS $flag) { + switch ($flag) { + case 'Include/Exclude': { + $ff += 1 << 0; + break; + } + case 'IncludeNoValueFields': { + $ff += 1 << 1; + break; + } + case 'ExportFormat': { + $ff += 1 << 2; + break; + } + case 'GetMethod': { + $ff += 1 << 3; + break; + } + case 'SubmitCoordinates': { + $ff += 1 << 4; + break; + } + case 'XFDF': { + $ff += 1 << 5; + break; + } + case 'IncludeAppendSaves': { + $ff += 1 << 6; + break; + } + case 'IncludeAnnotations': { + $ff += 1 << 7; + break; + } + case 'SubmitPDF': { + $ff += 1 << 8; + break; + } + case 'CanonicalFormat': { + $ff += 1 << 9; + break; + } + case 'ExclNonUserAnnots': { + $ff += 1 << 10; + break; + } + case 'ExclFKey': { + $ff += 1 << 11; + break; + } + case 'EmbedForm': { + $ff += 1 << 13; + break; + } + } + } + } else { + $ff = intval($val); + } + $opt['aa'] .= ' /Flags '.$ff; + } + } + $opt['aa'] .= ' >>'; + } else { + // Javascript action or raw action command + $js_obj_id = $this->addJavascriptObject($action); + $opt['aa'] = '/D '.$js_obj_id.' 0 R'; + } + } + $this->Annotation($x, $y, $w, $h, $name, $opt, 0); + if ($this->rtl) { + $this->x -= $w; + } else { + $this->x += $w; + } + } + + // --- END FORMS FIELDS ------------------------------------------------ + + /** + * Add certification signature (DocMDP or UR3) + * You can set only one signature type + * @protected + * @author Nicola Asuni + * @since 4.6.008 (2009-05-07) + */ + protected function _putsignature() { + if ((!$this->sign) OR (!isset($this->signature_data['cert_type']))) { + return; + } + $sigobjid = ($this->sig_obj_id + 1); + $out = $this->_getobj($sigobjid)."\n"; + $out .= '<< /Type /Sig'; + $out .= ' /Filter /Adobe.PPKLite'; + $out .= ' /SubFilter /adbe.pkcs7.detached'; + $out .= ' '.TCPDF_STATIC::$byterange_string; + $out .= ' /Contents<'.str_repeat('0', $this->signature_max_length).'>'; + if (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A')) { + $out .= ' /Reference ['; // array of signature reference dictionaries + $out .= ' << /Type /SigRef'; + if ($this->signature_data['cert_type'] > 0) { + $out .= ' /TransformMethod /DocMDP'; + $out .= ' /TransformParams <<'; + $out .= ' /Type /TransformParams'; + $out .= ' /P '.$this->signature_data['cert_type']; + $out .= ' /V /1.2'; + } else { + $out .= ' /TransformMethod /UR3'; + $out .= ' /TransformParams <<'; + $out .= ' /Type /TransformParams'; + $out .= ' /V /2.2'; + if (!TCPDF_STATIC::empty_string($this->ur['document'])) { + $out .= ' /Document['.$this->ur['document'].']'; + } + if (!TCPDF_STATIC::empty_string($this->ur['form'])) { + $out .= ' /Form['.$this->ur['form'].']'; + } + if (!TCPDF_STATIC::empty_string($this->ur['signature'])) { + $out .= ' /Signature['.$this->ur['signature'].']'; + } + if (!TCPDF_STATIC::empty_string($this->ur['annots'])) { + $out .= ' /Annots['.$this->ur['annots'].']'; + } + if (!TCPDF_STATIC::empty_string($this->ur['ef'])) { + $out .= ' /EF['.$this->ur['ef'].']'; + } + if (!TCPDF_STATIC::empty_string($this->ur['formex'])) { + $out .= ' /FormEX['.$this->ur['formex'].']'; + } + } + $out .= ' >>'; // close TransformParams + // optional digest data (values must be calculated and replaced later) + //$out .= ' /Data ********** 0 R'; + //$out .= ' /DigestMethod/MD5'; + //$out .= ' /DigestLocation[********** 34]'; + //$out .= ' /DigestValue<********************************>'; + $out .= ' >>'; + $out .= ' ]'; // end of reference + } + if (isset($this->signature_data['info']['Name']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Name'])) { + $out .= ' /Name '.$this->_textstring($this->signature_data['info']['Name'], $sigobjid); + } + if (isset($this->signature_data['info']['Location']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Location'])) { + $out .= ' /Location '.$this->_textstring($this->signature_data['info']['Location'], $sigobjid); + } + if (isset($this->signature_data['info']['Reason']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Reason'])) { + $out .= ' /Reason '.$this->_textstring($this->signature_data['info']['Reason'], $sigobjid); + } + if (isset($this->signature_data['info']['ContactInfo']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['ContactInfo'])) { + $out .= ' /ContactInfo '.$this->_textstring($this->signature_data['info']['ContactInfo'], $sigobjid); + } + $out .= ' /M '.$this->_datestring($sigobjid, $this->doc_modification_timestamp); + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + + /** + * Set User's Rights for PDF Reader + * WARNING: This is experimental and currently do not work. + * Check the PDF Reference 8.7.1 Transform Methods, + * Table 8.105 Entries in the UR transform parameters dictionary + * @param boolean $enable if true enable user's rights on PDF reader + * @param string $document Names specifying additional document-wide usage rights for the document. The only defined value is "/FullSave", which permits a user to save the document along with modified form and/or annotation data. + * @param string $annots Names specifying additional annotation-related usage rights for the document. Valid names in PDF 1.5 and later are /Create/Delete/Modify/Copy/Import/Export, which permit the user to perform the named operation on annotations. + * @param string $form Names specifying additional form-field-related usage rights for the document. Valid names are: /Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate + * @param string $signature Names specifying additional signature-related usage rights for the document. The only defined value is /Modify, which permits a user to apply a digital signature to an existing signature form field or clear a signed signature form field. + * @param string $ef Names specifying additional usage rights for named embedded files in the document. Valid names are /Create/Delete/Modify/Import, which permit the user to perform the named operation on named embedded files + Names specifying additional embedded-files-related usage rights for the document. + * @param string $formex Names specifying additional form-field-related usage rights. The only valid name is BarcodePlaintext, which permits text form field data to be encoded as a plaintext two-dimensional barcode. + * @public + * @author Nicola Asuni + * @since 2.9.000 (2008-03-26) + */ + public function setUserRights( + $enable=true, + $document='/FullSave', + $annots='/Create/Delete/Modify/Copy/Import/Export', + $form='/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate', + $signature='/Modify', + $ef='/Create/Delete/Modify/Import', + $formex='') { + $this->ur['enabled'] = $enable; + $this->ur['document'] = $document; + $this->ur['annots'] = $annots; + $this->ur['form'] = $form; + $this->ur['signature'] = $signature; + $this->ur['ef'] = $ef; + $this->ur['formex'] = $formex; + if (!$this->sign) { + $this->setSignature('', '', '', '', 0, array()); + } + } + + /** + * Enable document signature (requires the OpenSSL Library). + * The digital signature improve document authenticity and integrity and allows o enable extra features on Acrobat Reader. + * To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt + * To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 + * To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes + * @param mixed $signing_cert signing certificate (string or filename prefixed with 'file://') + * @param mixed $private_key private key (string or filename prefixed with 'file://') + * @param string $private_key_password password + * @param string $extracerts specifies the name of a file containing a bunch of extra certificates to include in the signature which can for example be used to help the recipient to verify the certificate that you used. + * @param int $cert_type The access permissions granted for this document. Valid values shall be: 1 = No changes to the document shall be permitted; any change to the document shall invalidate the signature; 2 = Permitted changes shall be filling in forms, instantiating page templates, and signing; other changes shall invalidate the signature; 3 = Permitted changes shall be the same as for 2, as well as annotation creation, deletion, and modification; other changes shall invalidate the signature. + * @param array $info array of option information: Name, Location, Reason, ContactInfo. + * @param string $approval Enable approval signature eg. for PDF incremental update + * @public + * @author Nicola Asuni + * @since 4.6.005 (2009-04-24) + */ + public function setSignature($signing_cert='', $private_key='', $private_key_password='', $extracerts='', $cert_type=2, $info=array(), $approval='') { + // to create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt + // to export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 + // to convert pfx certificate to pem: openssl + // OpenSSL> pkcs12 -in -out -nodes + $this->sign = true; + ++$this->n; + $this->sig_obj_id = $this->n; // signature widget + ++$this->n; // signature object ($this->sig_obj_id + 1) + $this->signature_data = array(); + if (strlen($signing_cert) == 0) { + $this->Error('Please provide a certificate file and password!'); + } + if (strlen($private_key) == 0) { + $private_key = $signing_cert; + } + $this->signature_data['signcert'] = $signing_cert; + $this->signature_data['privkey'] = $private_key; + $this->signature_data['password'] = $private_key_password; + $this->signature_data['extracerts'] = $extracerts; + $this->signature_data['cert_type'] = $cert_type; + $this->signature_data['info'] = $info; + $this->signature_data['approval'] = $approval; + } + + /** + * Set the digital signature appearance (a cliccable rectangle area to get signature properties) + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $w Width of the signature area. + * @param float $h Height of the signature area. + * @param int $page option page number (if < 0 the current page is used). + * @param string $name Name of the signature. + * @public + * @author Nicola Asuni + * @since 5.3.011 (2010-06-17) + */ + public function setSignatureAppearance($x=0, $y=0, $w=0, $h=0, $page=-1, $name='') { + $this->signature_appearance = $this->getSignatureAppearanceArray($x, $y, $w, $h, $page, $name); + } + + /** + * Add an empty digital signature appearance (a cliccable rectangle area to get signature properties) + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $w Width of the signature area. + * @param float $h Height of the signature area. + * @param int $page option page number (if < 0 the current page is used). + * @param string $name Name of the signature. + * @public + * @author Nicola Asuni + * @since 5.9.101 (2011-07-06) + */ + public function addEmptySignatureAppearance($x=0, $y=0, $w=0, $h=0, $page=-1, $name='') { + ++$this->n; + $this->empty_signature_appearance[] = array('objid' => $this->n) + $this->getSignatureAppearanceArray($x, $y, $w, $h, $page, $name); + } + + /** + * Get the array that defines the signature appearance (page and rectangle coordinates). + * @param float $x Abscissa of the upper-left corner. + * @param float $y Ordinate of the upper-left corner. + * @param float $w Width of the signature area. + * @param float $h Height of the signature area. + * @param int $page option page number (if < 0 the current page is used). + * @param string $name Name of the signature. + * @return array Array defining page and rectangle coordinates of signature appearance. + * @protected + * @author Nicola Asuni + * @since 5.9.101 (2011-07-06) + */ + protected function getSignatureAppearanceArray($x=0, $y=0, $w=0, $h=0, $page=-1, $name='') { + $sigapp = array(); + if (($page < 1) OR ($page > $this->numpages)) { + $sigapp['page'] = $this->page; + } else { + $sigapp['page'] = intval($page); + } + if (empty($name)) { + $sigapp['name'] = 'Signature'; + } else { + $sigapp['name'] = $name; + } + $a = $x * $this->k; + $b = $this->pagedim[($sigapp['page'])]['h'] - (($y + $h) * $this->k); + $c = $w * $this->k; + $d = $h * $this->k; + $sigapp['rect'] = sprintf('%F %F %F %F', $a, $b, ($a + $c), ($b + $d)); + return $sigapp; + } + + /** + * Enable document timestamping (requires the OpenSSL Library). + * The trusted timestamping improve document security that means that no one should be able to change the document once it has been recorded. + * Use with digital signature only! + * @param string $tsa_host Time Stamping Authority (TSA) server (prefixed with 'https://') + * @param string $tsa_username Specifies the username for TSA authorization (optional) OR specifies the TSA authorization PEM file (see: example_66.php, optional) + * @param string $tsa_password Specifies the password for TSA authorization (optional) + * @param string $tsa_cert Specifies the location of TSA certificate for authorization (optional for cURL) + * @public + * @author Richard Stockinger + * @since 6.0.090 (2014-06-16) + */ + public function setTimeStamp($tsa_host='', $tsa_username='', $tsa_password='', $tsa_cert='') { + $this->tsa_data = array(); + if (!function_exists('curl_init')) { + $this->Error('Please enable cURL PHP extension!'); + } + if (strlen($tsa_host) == 0) { + $this->Error('Please specify the host of Time Stamping Authority (TSA)!'); + } + $this->tsa_data['tsa_host'] = $tsa_host; + if (is_file($tsa_username)) { + $this->tsa_data['tsa_auth'] = $tsa_username; + } else { + $this->tsa_data['tsa_username'] = $tsa_username; + } + $this->tsa_data['tsa_password'] = $tsa_password; + $this->tsa_data['tsa_cert'] = $tsa_cert; + $this->tsa_timestamp = true; + } + + /** + * NOT YET IMPLEMENTED + * Request TSA for a timestamp + * @param string $signature Digital signature as binary string + * @return string Timestamped digital signature + * @protected + * @author Richard Stockinger + * @since 6.0.090 (2014-06-16) + */ + protected function applyTSA($signature) { + if (!$this->tsa_timestamp) { + return $signature; + } + //@TODO: implement this feature + return $signature; + } + + /** + * Create a new page group. + * NOTE: call this function before calling AddPage() + * @param int|null $page starting group page (leave empty for next page). + * @public + * @since 3.0.000 (2008-03-27) + */ + public function startPageGroup($page=null) { + if (empty($page)) { + $page = $this->page + 1; + } + $this->newpagegroup[$page] = sizeof($this->newpagegroup) + 1; + } + + /** + * Set the starting page number. + * @param int $num Starting page number. + * @since 5.9.093 (2011-06-16) + * @public + */ + public function setStartingPageNumber($num=1) { + $this->starting_page_number = max(0, intval($num)); + } + + /** + * Returns the string alias used right align page numbers. + * If the current font is unicode type, the returned string wil contain an additional open curly brace. + * @return string + * @since 5.9.099 (2011-06-27) + * @public + */ + public function getAliasRightShift() { + // calculate aproximatively the ratio between widths of aliases and replacements. + $ref = '{'.TCPDF_STATIC::$alias_right_shift.'}{'.TCPDF_STATIC::$alias_tot_pages.'}{'.TCPDF_STATIC::$alias_num_page.'}'; + $rep = str_repeat(' ', $this->GetNumChars($ref)); + $wrep = $this->GetStringWidth($rep); + if ($wrep > 0) { + $wdiff = max(1, ($this->GetStringWidth($ref) / $wrep)); + } else { + $wdiff = 1; + } + $sdiff = sprintf('%F', $wdiff); + $alias = TCPDF_STATIC::$alias_right_shift.$sdiff.'}'; + if ($this->isUnicodeFont()) { + $alias = '{'.$alias; + } + return $alias; + } + + /** + * Returns the string alias used for the total number of pages. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * This alias will be replaced by the total number of pages in the document. + * @return string + * @since 4.0.018 (2008-08-08) + * @public + */ + public function getAliasNbPages() { + if ($this->isUnicodeFont()) { + return '{'.TCPDF_STATIC::$alias_tot_pages.'}'; + } + return TCPDF_STATIC::$alias_tot_pages; + } + + /** + * Returns the string alias used for the page number. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * This alias will be replaced by the page number. + * @return string + * @since 4.5.000 (2009-01-02) + * @public + */ + public function getAliasNumPage() { + if ($this->isUnicodeFont()) { + return '{'.TCPDF_STATIC::$alias_num_page.'}'; + } + return TCPDF_STATIC::$alias_num_page; + } + + /** + * Return the alias for the total number of pages in the current page group. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * This alias will be replaced by the total number of pages in this group. + * @return string alias of the current page group + * @public + * @since 3.0.000 (2008-03-27) + */ + public function getPageGroupAlias() { + if ($this->isUnicodeFont()) { + return '{'.TCPDF_STATIC::$alias_group_tot_pages.'}'; + } + return TCPDF_STATIC::$alias_group_tot_pages; + } + + /** + * Return the alias for the page number on the current page group. + * If the current font is unicode type, the returned string is surrounded by additional curly braces. + * This alias will be replaced by the page number (relative to the belonging group). + * @return string alias of the current page group + * @public + * @since 4.5.000 (2009-01-02) + */ + public function getPageNumGroupAlias() { + if ($this->isUnicodeFont()) { + return '{'.TCPDF_STATIC::$alias_group_num_page.'}'; + } + return TCPDF_STATIC::$alias_group_num_page; + } + + /** + * Return the current page in the group. + * @return int current page in the group + * @public + * @since 3.0.000 (2008-03-27) + */ + public function getGroupPageNo() { + return $this->pagegroups[$this->currpagegroup]; + } + + /** + * Returns the current group page number formatted as a string. + * @public + * @since 4.3.003 (2008-11-18) + * @see PaneNo(), formatPageNumber() + */ + public function getGroupPageNoFormatted() { + return TCPDF_STATIC::formatPageNumber($this->getGroupPageNo()); + } + + /** + * Returns the current page number formatted as a string. + * @public + * @since 4.2.005 (2008-11-06) + * @see PaneNo(), formatPageNumber() + */ + public function PageNoFormatted() { + return TCPDF_STATIC::formatPageNumber($this->PageNo()); + } + + /** + * Put pdf layers. + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected function _putocg() { + if (empty($this->pdflayers)) { + return; + } + foreach ($this->pdflayers as $key => $layer) { + $this->pdflayers[$key]['objid'] = $this->_newobj(); + $out = '<< /Type /OCG'; + $out .= ' /Name '.$this->_textstring($layer['name'], $this->pdflayers[$key]['objid']); + $out .= ' /Usage <<'; + if (isset($layer['print']) AND ($layer['print'] !== NULL)) { + $out .= ' /Print <>'; + } + $out .= ' /View <>'; + $out .= ' >> >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + + /** + * Start a new pdf layer. + * @param string $name Layer name (only a-z letters and numbers). Leave empty for automatic name. + * @param boolean|null $print Set to TRUE to print this layer, FALSE to not print and NULL to not set this option + * @param boolean $view Set to true to view this layer. + * @param boolean $lock If true lock the layer + * @public + * @since 5.9.102 (2011-07-13) + */ + public function startLayer($name='', $print=true, $view=true, $lock=true) { + if ($this->state != 2) { + return; + } + $layer = sprintf('LYR%03d', (count($this->pdflayers) + 1)); + if (empty($name)) { + $name = $layer; + } else { + $name = preg_replace('/[^a-zA-Z0-9_\-]/', '', $name); + } + $this->pdflayers[] = array('layer' => $layer, 'name' => $name, 'print' => $print, 'view' => $view, 'lock' => $lock); + $this->openMarkedContent = true; + $this->_out('/OC /'.$layer.' BDC'); + } + + /** + * End the current PDF layer. + * @public + * @since 5.9.102 (2011-07-13) + */ + public function endLayer() { + if ($this->state != 2) { + return; + } + if ($this->openMarkedContent) { + // close existing open marked-content layer + $this->_out('EMC'); + $this->openMarkedContent = false; + } + } + + /** + * Set the visibility of the successive elements. + * This can be useful, for instance, to put a background + * image or color that will show on screen but won't print. + * @param string $v visibility mode. Legal values are: all, print, screen or view. + * @public + * @since 3.0.000 (2008-03-27) + */ + public function setVisibility($v) { + if ($this->state != 2) { + return; + } + $this->endLayer(); + switch($v) { + case 'print': { + $this->startLayer('Print', true, false); + break; + } + case 'view': + case 'screen': { + $this->startLayer('View', false, true); + break; + } + case 'all': { + $this->_out(''); + break; + } + default: { + $this->Error('Incorrect visibility: '.$v); + break; + } + } + } + + /** + * Add transparency parameters to the current extgstate + * @param array $parms parameters + * @return int|void the number of extgstates + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected function addExtGState($parms) { + if ($this->pdfa_mode || $this->pdfa_version >= 2) { + // transparencies are not allowed in PDF/A mode + return; + } + // check if this ExtGState already exist + foreach ($this->extgstates as $i => $ext) { + if ($ext['parms'] == $parms) { + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['extgstates'][$i] = $ext; + } + // return reference to existing ExtGState + return $i; + } + } + $n = (count($this->extgstates) + 1); + $this->extgstates[$n] = array('parms' => $parms); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['extgstates'][$n] = $this->extgstates[$n]; + } + return $n; + } + + /** + * Add an extgstate + * @param int $gs extgstate + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected function setExtGState($gs) { + if (($this->pdfa_mode && $this->pdfa_version < 2) OR ($this->state != 2)) { + // transparency is not allowed in PDF/A-1 mode + return; + } + $this->_out(sprintf('/GS%d gs', $gs)); + } + + /** + * Put extgstates for object transparency + * @protected + * @since 3.0.000 (2008-03-27) + */ + protected function _putextgstates() { + foreach ($this->extgstates as $i => $ext) { + $this->extgstates[$i]['n'] = $this->_newobj(); + $out = '<< /Type /ExtGState'; + foreach ($ext['parms'] as $k => $v) { + if (is_float($v)) { + $v = sprintf('%F', $v); + } elseif ($v === true) { + $v = 'true'; + } elseif ($v === false) { + $v = 'false'; + } + $out .= ' /'.$k.' '.$v; + } + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + + /** + * Set overprint mode for stroking (OP) and non-stroking (op) painting operations. + * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). + * @param boolean $stroking If true apply overprint for stroking operations. + * @param boolean|null $nonstroking If true apply overprint for painting operations other than stroking. + * @param integer $mode Overprint mode: (0 = each source colour component value replaces the value previously painted for the corresponding device colorant; 1 = a tint value of 0.0 for a source colour component shall leave the corresponding component of the previously painted colour unchanged). + * @public + * @since 5.9.152 (2012-03-23) + */ + public function setOverprint($stroking=true, $nonstroking=null, $mode=0) { + if ($this->state != 2) { + return; + } + $stroking = $stroking ? true : false; + if (TCPDF_STATIC::empty_string($nonstroking)) { + // default value if not set + $nonstroking = $stroking; + } else { + $nonstroking = $nonstroking ? true : false; + } + if (($mode != 0) AND ($mode != 1)) { + $mode = 0; + } + $this->overprint = array('OP' => $stroking, 'op' => $nonstroking, 'OPM' => $mode); + $gs = $this->addExtGState($this->overprint); + $this->setExtGState($gs); + } + + /** + * Get the overprint mode array (OP, op, OPM). + * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). + * @return array + * @public + * @since 5.9.152 (2012-03-23) + */ + public function getOverprint() { + return $this->overprint; + } + + /** + * Set alpha for stroking (CA) and non-stroking (ca) operations. + * @param float $stroking Alpha value for stroking operations: real value from 0 (transparent) to 1 (opaque). + * @param string $bm blend mode, one of the following: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity + * @param float|null $nonstroking Alpha value for non-stroking operations: real value from 0 (transparent) to 1 (opaque). + * @param boolean $ais + * @public + * @since 3.0.000 (2008-03-27) + */ + public function setAlpha($stroking=1, $bm='Normal', $nonstroking=null, $ais=false) { + if ($this->pdfa_mode && $this->pdfa_version < 2) { + // transparency is not allowed in PDF/A-1 mode + return; + } + $stroking = floatval($stroking); + if (TCPDF_STATIC::empty_string($nonstroking)) { + // default value if not set + $nonstroking = $stroking; + } else { + $nonstroking = floatval($nonstroking); + } + if ($bm[0] == '/') { + // remove trailing slash + $bm = substr($bm, 1); + } + if (!in_array($bm, array('Normal', 'Multiply', 'Screen', 'Overlay', 'Darken', 'Lighten', 'ColorDodge', 'ColorBurn', 'HardLight', 'SoftLight', 'Difference', 'Exclusion', 'Hue', 'Saturation', 'Color', 'Luminosity'))) { + $bm = 'Normal'; + } + $ais = $ais ? true : false; + $this->alpha = array('CA' => $stroking, 'ca' => $nonstroking, 'BM' => '/'.$bm, 'AIS' => $ais); + $gs = $this->addExtGState($this->alpha); + $this->setExtGState($gs); + } + + /** + * Get the alpha mode array (CA, ca, BM, AIS). + * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). + * @return array + * @public + * @since 5.9.152 (2012-03-23) + */ + public function getAlpha() { + return $this->alpha; + } + + /** + * Set the default JPEG compression quality (1-100) + * @param int $quality JPEG quality, integer between 1 and 100 + * @public + * @since 3.0.000 (2008-03-27) + */ + public function setJPEGQuality($quality) { + if (($quality < 1) OR ($quality > 100)) { + $quality = 75; + } + $this->jpeg_quality = intval($quality); + } + + /** + * Set the default number of columns in a row for HTML tables. + * @param int $cols number of columns + * @public + * @since 3.0.014 (2008-06-04) + */ + public function setDefaultTableColumns($cols=4) { + $this->default_table_columns = intval($cols); + } + + /** + * Set the height of the cell (line height) respect the font height. + * @param float $h cell proportion respect font height (typical value = 1.25). + * @public + * @since 3.0.014 (2008-06-04) + */ + public function setCellHeightRatio($h) { + $this->cell_height_ratio = $h; + } + + /** + * return the height of cell repect font height. + * @public + * @return float + * @since 4.0.012 (2008-07-24) + */ + public function getCellHeightRatio() { + return $this->cell_height_ratio; + } + + /** + * Set the PDF version (check PDF reference for valid values). + * @param string $version PDF document version. + * @public + * @since 3.1.000 (2008-06-09) + */ + public function setPDFVersion($version='1.7') { + if ($this->pdfa_mode && $this->pdfa_version == 1 ) { + // PDF/A-1 mode + $this->PDFVersion = '1.4'; + } elseif ($this->pdfa_mode && $this->pdfa_version >= 2 ) { + // PDF/A-2 mode + $this->PDFVersion = '1.7'; + } else { + $this->PDFVersion = $version; + } + } + + /** + * Set the viewer preferences dictionary controlling the way the document is to be presented on the screen or in print. + * (see Section 8.1 of PDF reference, "Viewer Preferences"). + *
        • HideToolbar boolean (Optional) A flag specifying whether to hide the viewer application's tool bars when the document is active. Default value: false.
        • HideMenubar boolean (Optional) A flag specifying whether to hide the viewer application's menu bar when the document is active. Default value: false.
        • HideWindowUI boolean (Optional) A flag specifying whether to hide user interface elements in the document's window (such as scroll bars and navigation controls), leaving only the document's contents displayed. Default value: false.
        • FitWindow boolean (Optional) A flag specifying whether to resize the document's window to fit the size of the first displayed page. Default value: false.
        • CenterWindow boolean (Optional) A flag specifying whether to position the document's window in the center of the screen. Default value: false.
        • DisplayDocTitle boolean (Optional; PDF 1.4) A flag specifying whether the window's title bar should display the document title taken from the Title entry of the document information dictionary (see Section 10.2.1, "Document Information Dictionary"). If false, the title bar should instead display the name of the PDF file containing the document. Default value: false.
        • NonFullScreenPageMode name (Optional) The document's page mode, specifying how to display the document on exiting full-screen mode:
          • UseNone Neither document outline nor thumbnail images visible
          • UseOutlines Document outline visible
          • UseThumbs Thumbnail images visible
          • UseOC Optional content group panel visible
          This entry is meaningful only if the value of the PageMode entry in the catalog dictionary (see Section 3.6.1, "Document Catalog") is FullScreen; it is ignored otherwise. Default value: UseNone.
        • ViewArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be displayed when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:
          • MediaBox
          • CropBox (default)
          • BleedBox
          • TrimBox
          • ArtBox
        • ViewClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:
          • MediaBox
          • CropBox (default)
          • BleedBox
          • TrimBox
          • ArtBox
        • PrintArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be rendered when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:
          • MediaBox
          • CropBox (default)
          • BleedBox
          • TrimBox
          • ArtBox
        • PrintClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:
          • MediaBox
          • CropBox (default)
          • BleedBox
          • TrimBox
          • ArtBox
        • PrintScaling name (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document. Valid values are:
          • None, which indicates that the print dialog should reflect no page scaling
          • AppDefault (default), which indicates that applications should use the current print scaling
        • Duplex name (Optional; PDF 1.7) The paper handling option to use when printing the file from the print dialog. The following values are valid:
          • Simplex - Print single-sided
          • DuplexFlipShortEdge - Duplex and flip on the short edge of the sheet
          • DuplexFlipLongEdge - Duplex and flip on the long edge of the sheet
          Default value: none
        • PickTrayByPDFSize boolean (Optional; PDF 1.7) A flag specifying whether the PDF page size is used to select the input paper tray. This setting influences only the preset values used to populate the print dialog presented by a PDF viewer application. If PickTrayByPDFSize is true, the check box in the print dialog associated with input paper tray is checked. Note: This setting has no effect on Mac OS systems, which do not provide the ability to pick the input tray by size.
        • PrintPageRange array (Optional; PDF 1.7) The page numbers used to initialize the print dialog box when the file is printed. The first page of the PDF file is denoted by 1. Each pair consists of the first and last pages in the sub-range. An odd number of integers causes this entry to be ignored. Negative numbers cause the entire array to be ignored. Default value: as defined by PDF viewer application
        • NumCopies integer (Optional; PDF 1.7) The number of copies to be printed when the print dialog is opened for this file. Supported values are the integers 2 through 5. Values outside this range are ignored. Default value: as defined by PDF viewer application, but typically 1
        + * @param array $preferences array of options. + * @author Nicola Asuni + * @public + * @since 3.1.000 (2008-06-09) + */ + public function setViewerPreferences($preferences) { + $this->viewer_preferences = $preferences; + } + + /** + * Paints color transition registration bars + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param boolean $transition if true prints tcolor transitions to white. + * @param boolean $vertical if true prints bar vertically. + * @param string $colors colors to print separated by comma. Valid values are: A,W,R,G,B,C,M,Y,K,RGB,CMYK,ALL,ALLSPOT,. Where: A = grayscale black, W = grayscale white, R = RGB red, G RGB green, B RGB blue, C = CMYK cyan, M = CMYK magenta, Y = CMYK yellow, K = CMYK key/black, RGB = RGB registration color, CMYK = CMYK registration color, ALL = Spot registration color, ALLSPOT = print all defined spot colors, = name of the spot color to print. + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @public + */ + public function colorRegistrationBar($x, $y, $w, $h, $transition=true, $vertical=false, $colors='A,R,G,B,C,M,Y,K') { + if (strpos($colors, 'ALLSPOT') !== false) { + // expand spot colors + $spot_colors = ''; + foreach ($this->spot_colors as $spot_color_name => $v) { + $spot_colors .= ','.$spot_color_name; + } + if (!empty($spot_colors)) { + $spot_colors = substr($spot_colors, 1); + $colors = str_replace('ALLSPOT', $spot_colors, $colors); + } else { + $colors = str_replace('ALLSPOT', 'NONE', $colors); + } + } + $bars = explode(',', $colors); + $numbars = count($bars); // number of bars to print + if ($numbars <= 0) { + return; + } + // set bar measures + if ($vertical) { + $coords = array(0, 0, 0, 1); + $wb = $w / $numbars; // bar width + $hb = $h; // bar height + $xd = $wb; // delta x + $yd = 0; // delta y + } else { + $coords = array(1, 0, 0, 0); + $wb = $w; // bar width + $hb = $h / $numbars; // bar height + $xd = 0; // delta x + $yd = $hb; // delta y + } + $xb = $x; + $yb = $y; + foreach ($bars as $col) { + switch ($col) { + // set transition colors + case 'A': { // BLACK (GRAYSCALE) + $col_a = array(255); + $col_b = array(0); + break; + } + case 'W': { // WHITE (GRAYSCALE) + $col_a = array(0); + $col_b = array(255); + break; + } + case 'R': { // RED (RGB) + $col_a = array(255,255,255); + $col_b = array(255,0,0); + break; + } + case 'G': { // GREEN (RGB) + $col_a = array(255,255,255); + $col_b = array(0,255,0); + break; + } + case 'B': { // BLUE (RGB) + $col_a = array(255,255,255); + $col_b = array(0,0,255); + break; + } + case 'C': { // CYAN (CMYK) + $col_a = array(0,0,0,0); + $col_b = array(100,0,0,0); + break; + } + case 'M': { // MAGENTA (CMYK) + $col_a = array(0,0,0,0); + $col_b = array(0,100,0,0); + break; + } + case 'Y': { // YELLOW (CMYK) + $col_a = array(0,0,0,0); + $col_b = array(0,0,100,0); + break; + } + case 'K': { // KEY - BLACK (CMYK) + $col_a = array(0,0,0,0); + $col_b = array(0,0,0,100); + break; + } + case 'RGB': { // BLACK REGISTRATION (RGB) + $col_a = array(255,255,255); + $col_b = array(0,0,0); + break; + } + case 'CMYK': { // BLACK REGISTRATION (CMYK) + $col_a = array(0,0,0,0); + $col_b = array(100,100,100,100); + break; + } + case 'ALL': { // SPOT COLOR REGISTRATION + $col_a = array(0,0,0,0,'None'); + $col_b = array(100,100,100,100,'All'); + break; + } + case 'NONE': { // SKIP THIS COLOR + $col_a = array(0,0,0,0,'None'); + $col_b = array(0,0,0,0,'None'); + break; + } + default: { // SPECIFIC SPOT COLOR NAME + $col_a = array(0,0,0,0,'None'); + $col_b = TCPDF_COLORS::getSpotColor($col, $this->spot_colors); + if ($col_b === false) { + // in case of error defaults to the registration color + $col_b = array(100,100,100,100,'All'); + } + break; + } + } + if ($col != 'NONE') { + if ($transition) { + // color gradient + $this->LinearGradient($xb, $yb, $wb, $hb, $col_a, $col_b, $coords); + } else { + $this->setFillColorArray($col_b); + // colored rectangle + $this->Rect($xb, $yb, $wb, $hb, 'F', array()); + } + $xb += $xd; + $yb += $yd; + } + } + } + + /** + * Paints crop marks. + * @param float $x abscissa of the crop mark center. + * @param float $y ordinate of the crop mark center. + * @param float $w width of the crop mark. + * @param float $h height of the crop mark. + * @param string $type type of crop mark, one symbol per type separated by comma: T = TOP, F = BOTTOM, L = LEFT, R = RIGHT, TL = A = TOP-LEFT, TR = B = TOP-RIGHT, BL = C = BOTTOM-LEFT, BR = D = BOTTOM-RIGHT. + * @param array $color crop mark color (default spot registration color). + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @public + */ + public function cropMark($x, $y, $w, $h, $type='T,R,B,L', $color=array(100,100,100,100,'All')) { + $this->setLineStyle(array('width' => (0.5 / $this->k), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $color)); + $type = strtoupper($type); + $type = preg_replace('/[^A-Z\-\,]*/', '', $type); + // split type in single components + $type = str_replace('-', ',', $type); + $type = str_replace('TL', 'T,L', $type); + $type = str_replace('TR', 'T,R', $type); + $type = str_replace('BL', 'F,L', $type); + $type = str_replace('BR', 'F,R', $type); + $type = str_replace('A', 'T,L', $type); + $type = str_replace('B', 'T,R', $type); + $type = str_replace('T,RO', 'BO', $type); + $type = str_replace('C', 'F,L', $type); + $type = str_replace('D', 'F,R', $type); + $crops = explode(',', strtoupper($type)); + // remove duplicates + $crops = array_unique($crops); + $dw = ($w / 4); // horizontal space to leave before the intersection point + $dh = ($h / 4); // vertical space to leave before the intersection point + foreach ($crops as $crop) { + switch ($crop) { + case 'T': + case 'TOP': { + $x1 = $x; + $y1 = ($y - $h); + $x2 = $x; + $y2 = ($y - $dh); + break; + } + case 'F': + case 'BOTTOM': { + $x1 = $x; + $y1 = ($y + $dh); + $x2 = $x; + $y2 = ($y + $h); + break; + } + case 'L': + case 'LEFT': { + $x1 = ($x - $w); + $y1 = $y; + $x2 = ($x - $dw); + $y2 = $y; + break; + } + case 'R': + case 'RIGHT': { + $x1 = ($x + $dw); + $y1 = $y; + $x2 = ($x + $w); + $y2 = $y; + break; + } + } + $this->Line($x1, $y1, $x2, $y2); + } + } + + /** + * Paints a registration mark + * @param float $x abscissa of the registration mark center. + * @param float $y ordinate of the registration mark center. + * @param float $r radius of the crop mark. + * @param boolean $double if true print two concentric crop marks. + * @param array $cola crop mark color (default spot registration color 'All'). + * @param array $colb second crop mark color (default spot registration color 'None'). + * @author Nicola Asuni + * @since 4.9.000 (2010-03-26) + * @public + */ + public function registrationMark($x, $y, $r, $double=false, $cola=array(100,100,100,100,'All'), $colb=array(0,0,0,0,'None')) { + $line_style = array('width' => max((0.5 / $this->k),($r / 30)), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $cola); + $this->setFillColorArray($cola); + $this->PieSector($x, $y, $r, 90, 180, 'F'); + $this->PieSector($x, $y, $r, 270, 360, 'F'); + $this->Circle($x, $y, $r, 0, 360, 'C', $line_style, array(), 8); + if ($double) { + $ri = $r * 0.5; + $this->setFillColorArray($colb); + $this->PieSector($x, $y, $ri, 90, 180, 'F'); + $this->PieSector($x, $y, $ri, 270, 360, 'F'); + $this->setFillColorArray($cola); + $this->PieSector($x, $y, $ri, 0, 90, 'F'); + $this->PieSector($x, $y, $ri, 180, 270, 'F'); + $this->Circle($x, $y, $ri, 0, 360, 'C', $line_style, array(), 8); + } + } + + /** + * Paints a CMYK registration mark + * @param float $x abscissa of the registration mark center. + * @param float $y ordinate of the registration mark center. + * @param float $r radius of the crop mark. + * @author Nicola Asuni + * @since 6.0.038 (2013-09-30) + * @public + */ + public function registrationMarkCMYK($x, $y, $r) { + // line width + $lw = max((0.5 / $this->k),($r / 8)); + // internal radius + $ri = ($r * 0.6); + // external radius + $re = ($r * 1.3); + // Cyan + $this->setFillColorArray(array(100,0,0,0)); + $this->PieSector($x, $y, $ri, 270, 360, 'F'); + // Magenta + $this->setFillColorArray(array(0,100,0,0)); + $this->PieSector($x, $y, $ri, 0, 90, 'F'); + // Yellow + $this->setFillColorArray(array(0,0,100,0)); + $this->PieSector($x, $y, $ri, 90, 180, 'F'); + // Key - black + $this->setFillColorArray(array(0,0,0,100)); + $this->PieSector($x, $y, $ri, 180, 270, 'F'); + // registration color + $line_style = array('width' => $lw, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(100,100,100,100,'All')); + $this->setFillColorArray(array(100,100,100,100,'All')); + // external circle + $this->Circle($x, $y, $r, 0, 360, 'C', $line_style, array(), 8); + // cross lines + $this->Line($x, ($y - $re), $x, ($y - $ri)); + $this->Line($x, ($y + $ri), $x, ($y + $re)); + $this->Line(($x - $re), $y, ($x - $ri), $y); + $this->Line(($x + $ri), $y, ($x + $re), $y); + } + + /** + * Paints a linear colour gradient. + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param array $col1 first color (Grayscale, RGB or CMYK components). + * @param array $col2 second color (Grayscale, RGB or CMYK components). + * @param array $coords array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). The default value is from left to right (x1=0, y1=0, x2=1, y2=0). + * @author Andreas W\FCrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function LinearGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0,0,1,0)) { + $this->Clip($x, $y, $w, $h); + $this->Gradient(2, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false); + } + + /** + * Paints a radial colour gradient. + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param array $col1 first color (Grayscale, RGB or CMYK components). + * @param array $col2 second color (Grayscale, RGB or CMYK components). + * @param array $coords array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). (fx, fy) should be inside the circle, otherwise some areas will not be defined. + * @author Andreas W\FCrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function RadialGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0.5,0.5,0.5,0.5,1)) { + $this->Clip($x, $y, $w, $h); + $this->Gradient(3, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false); + } + + /** + * Paints a coons patch mesh. + * @param float $x abscissa of the top left corner of the rectangle. + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @param array $col1 first color (lower left corner) (RGB components). + * @param array $col2 second color (lower right corner) (RGB components). + * @param array $col3 third color (upper right corner) (RGB components). + * @param array $col4 fourth color (upper left corner) (RGB components). + * @param array $coords
        • for one patch mesh: array(float x1, float y1, .... float x12, float y12): 12 pairs of coordinates (normally from 0 to 1) which specify the Bezier control points that define the patch. First pair is the lower left edge point, next is its right control point (control point 2). Then the other points are defined in the order: control point 1, edge point, control point 2 going counter-clockwise around the patch. Last (x12, y12) is the first edge point's left control point (control point 1).
        • for two or more patch meshes: array[number of patches]: arrays with the following keys for each patch: f: where to put that patch (0 = first patch, 1, 2, 3 = right, top and left of precedent patch - I didn't figure this out completely - just try and error ;-) points: 12 pairs of coordinates of the Bezier control points as above for the first patch, 8 pairs of coordinates for the following patches, ignoring the coordinates already defined by the precedent patch (I also didn't figure out the order of these - also: try and see what's happening) colors: must be 4 colors for the first patch, 2 colors for the following patches
        + * @param array $coords_min minimum value used by the coordinates. If a coordinate's value is smaller than this it will be cut to coords_min. default: 0 + * @param array $coords_max maximum value used by the coordinates. If a coordinate's value is greater than this it will be cut to coords_max. default: 1 + * @param boolean $antialias A flag indicating whether to filter the shading function to prevent aliasing artifacts. + * @author Andreas W\FCrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function CoonsPatchMesh($x, $y, $w, $h, $col1=array(), $col2=array(), $col3=array(), $col4=array(), $coords=array(0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33), $coords_min=0, $coords_max=1, $antialias=false) { + if (($this->pdfa_mode && $this->pdfa_version < 2) OR ($this->state != 2)) { + return; + } + $this->Clip($x, $y, $w, $h); + $n = count($this->gradients) + 1; + $this->gradients[$n] = array(); + $this->gradients[$n]['type'] = 6; //coons patch mesh + $this->gradients[$n]['coords'] = array(); + $this->gradients[$n]['antialias'] = $antialias; + $this->gradients[$n]['colors'] = array(); + $this->gradients[$n]['transparency'] = false; + //check the coords array if it is the simple array or the multi patch array + if (!isset($coords[0]['f'])) { + //simple array -> convert to multi patch array + if (!isset($col1[1])) { + $col1[1] = $col1[2] = $col1[0]; + } + if (!isset($col2[1])) { + $col2[1] = $col2[2] = $col2[0]; + } + if (!isset($col3[1])) { + $col3[1] = $col3[2] = $col3[0]; + } + if (!isset($col4[1])) { + $col4[1] = $col4[2] = $col4[0]; + } + $patch_array[0]['f'] = 0; + $patch_array[0]['points'] = $coords; + $patch_array[0]['colors'][0]['r'] = $col1[0]; + $patch_array[0]['colors'][0]['g'] = $col1[1]; + $patch_array[0]['colors'][0]['b'] = $col1[2]; + $patch_array[0]['colors'][1]['r'] = $col2[0]; + $patch_array[0]['colors'][1]['g'] = $col2[1]; + $patch_array[0]['colors'][1]['b'] = $col2[2]; + $patch_array[0]['colors'][2]['r'] = $col3[0]; + $patch_array[0]['colors'][2]['g'] = $col3[1]; + $patch_array[0]['colors'][2]['b'] = $col3[2]; + $patch_array[0]['colors'][3]['r'] = $col4[0]; + $patch_array[0]['colors'][3]['g'] = $col4[1]; + $patch_array[0]['colors'][3]['b'] = $col4[2]; + } else { + //multi patch array + $patch_array = $coords; + } + $bpcd = 65535; //16 bits per coordinate + //build the data stream + $this->gradients[$n]['stream'] = ''; + $count_patch = count($patch_array); + for ($i=0; $i < $count_patch; ++$i) { + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['f']); //start with the edge flag as 8 bit + $count_points = count($patch_array[$i]['points']); + for ($j=0; $j < $count_points; ++$j) { + //each point as 16 bit + $patch_array[$i]['points'][$j] = (($patch_array[$i]['points'][$j] - $coords_min) / ($coords_max - $coords_min)) * $bpcd; + if ($patch_array[$i]['points'][$j] < 0) { + $patch_array[$i]['points'][$j] = 0; + } + if ($patch_array[$i]['points'][$j] > $bpcd) { + $patch_array[$i]['points'][$j] = $bpcd; + } + $this->gradients[$n]['stream'] .= chr((int) floor($patch_array[$i]['points'][$j] / 256)); + $this->gradients[$n]['stream'] .= chr((int) floor(intval($patch_array[$i]['points'][$j]) % 256)); + } + $count_cols = count($patch_array[$i]['colors']); + for ($j=0; $j < $count_cols; ++$j) { + //each color component as 8 bit + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['r']); + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['g']); + $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['b']); + } + } + //paint the gradient + $this->_out('/Sh'.$n.' sh'); + //restore previous Graphic State + $this->_outRestoreGraphicsState(); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['gradients'][$n] = $this->gradients[$n]; + } + } + + /** + * Set a rectangular clipping area. + * @param float $x abscissa of the top left corner of the rectangle (or top right corner for RTL mode). + * @param float $y ordinate of the top left corner of the rectangle. + * @param float $w width of the rectangle. + * @param float $h height of the rectangle. + * @author Andreas W\FCrmser, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @protected + */ + protected function Clip($x, $y, $w, $h) { + if ($this->state != 2) { + return; + } + if ($this->rtl) { + $x = $this->w - $x - $w; + } + //save current Graphic State + $s = 'q'; + //set clipping area + $s .= sprintf(' %F %F %F %F re W n', $x*$this->k, ($this->h-$y)*$this->k, $w*$this->k, -$h*$this->k); + //set up transformation matrix for gradient + $s .= sprintf(' %F 0 0 %F %F %F cm', $w*$this->k, $h*$this->k, $x*$this->k, ($this->h-($y+$h))*$this->k); + $this->_out($s); + } + + /** + * Output gradient. + * @param int $type type of gradient (1 Function-based shading; 2 Axial shading; 3 Radial shading; 4 Free-form Gouraud-shaded triangle mesh; 5 Lattice-form Gouraud-shaded triangle mesh; 6 Coons patch mesh; 7 Tensor-product patch mesh). (Not all types are currently supported) + * @param array $coords array of coordinates. + * @param array $stops array gradient color components: color = array of GRAY, RGB or CMYK color components; offset = (0 to 1) represents a location along the gradient vector; exponent = exponent of the exponential interpolation function (default = 1). + * @param array $background An array of colour components appropriate to the colour space, specifying a single background colour value. + * @param boolean $antialias A flag indicating whether to filter the shading function to prevent aliasing artifacts. + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function Gradient($type, $coords, $stops, $background=array(), $antialias=false) { + if (($this->pdfa_mode && $this->pdfa_version < 2) OR ($this->state != 2)) { + return; + } + $n = count($this->gradients) + 1; + $this->gradients[$n] = array(); + $this->gradients[$n]['type'] = $type; + $this->gradients[$n]['coords'] = $coords; + $this->gradients[$n]['antialias'] = $antialias; + $this->gradients[$n]['colors'] = array(); + $this->gradients[$n]['transparency'] = false; + // color space + $numcolspace = count($stops[0]['color']); + $bcolor = array_values($background); + switch($numcolspace) { + case 5: // SPOT + case 4: { // CMYK + $this->gradients[$n]['colspace'] = 'DeviceCMYK'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%F %F %F %F', $bcolor[0]/100, $bcolor[1]/100, $bcolor[2]/100, $bcolor[3]/100); + } + break; + } + case 3: { // RGB + $this->gradients[$n]['colspace'] = 'DeviceRGB'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%F %F %F', $bcolor[0]/255, $bcolor[1]/255, $bcolor[2]/255); + } + break; + } + case 1: { // GRAY SCALE + $this->gradients[$n]['colspace'] = 'DeviceGray'; + if (!empty($background)) { + $this->gradients[$n]['background'] = sprintf('%F', $bcolor[0]/255); + } + break; + } + } + $num_stops = count($stops); + $last_stop_id = $num_stops - 1; + foreach ($stops as $key => $stop) { + $this->gradients[$n]['colors'][$key] = array(); + // offset represents a location along the gradient vector + if (isset($stop['offset'])) { + $this->gradients[$n]['colors'][$key]['offset'] = $stop['offset']; + } else { + if ($key == 0) { + $this->gradients[$n]['colors'][$key]['offset'] = 0; + } elseif ($key == $last_stop_id) { + $this->gradients[$n]['colors'][$key]['offset'] = 1; + } else { + $offsetstep = (1 - $this->gradients[$n]['colors'][($key - 1)]['offset']) / ($num_stops - $key); + $this->gradients[$n]['colors'][$key]['offset'] = $this->gradients[$n]['colors'][($key - 1)]['offset'] + $offsetstep; + } + } + if (isset($stop['opacity'])) { + $this->gradients[$n]['colors'][$key]['opacity'] = $stop['opacity']; + if ((!($this->pdfa_mode && $this->pdfa_version < 2)) AND ($stop['opacity'] < 1)) { + $this->gradients[$n]['transparency'] = true; + } + } else { + $this->gradients[$n]['colors'][$key]['opacity'] = 1; + } + // exponent for the exponential interpolation function + if (isset($stop['exponent'])) { + $this->gradients[$n]['colors'][$key]['exponent'] = $stop['exponent']; + } else { + $this->gradients[$n]['colors'][$key]['exponent'] = 1; + } + // set colors + $color = array_values($stop['color']); + switch($numcolspace) { + case 5: // SPOT + case 4: { // CMYK + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%F %F %F %F', $color[0]/100, $color[1]/100, $color[2]/100, $color[3]/100); + break; + } + case 3: { // RGB + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%F %F %F', $color[0]/255, $color[1]/255, $color[2]/255); + break; + } + case 1: { // GRAY SCALE + $this->gradients[$n]['colors'][$key]['color'] = sprintf('%F', $color[0]/255); + break; + } + } + } + if ($this->gradients[$n]['transparency']) { + // paint luminosity gradient + $this->_out('/TGS'.$n.' gs'); + } + //paint the gradient + $this->_out('/Sh'.$n.' sh'); + //restore previous Graphic State + $this->_outRestoreGraphicsState(); + if ($this->inxobj) { + // we are inside an XObject template + $this->xobjects[$this->xobjid]['gradients'][$n] = $this->gradients[$n]; + } + } + + /** + * Output gradient shaders. + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @protected + */ + function _putshaders() { + if ($this->pdfa_mode && $this->pdfa_version < 2) { + return; + } + $idt = count($this->gradients); //index for transparency gradients + foreach ($this->gradients as $id => $grad) { + if (($grad['type'] == 2) OR ($grad['type'] == 3)) { + $fc = $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 3'; + $out .= ' /Domain [0 1]'; + $functions = ''; + $bounds = ''; + $encode = ''; + $i = 1; + $num_cols = count($grad['colors']); + $lastcols = $num_cols - 1; + for ($i = 1; $i < $num_cols; ++$i) { + $functions .= ($fc + $i).' 0 R '; + if ($i < $lastcols) { + $bounds .= sprintf('%F ', $grad['colors'][$i]['offset']); + } + $encode .= '0 1 '; + } + $out .= ' /Functions ['.trim($functions).']'; + $out .= ' /Bounds ['.trim($bounds).']'; + $out .= ' /Encode ['.trim($encode).']'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + for ($i = 1; $i < $num_cols; ++$i) { + $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 2'; + $out .= ' /Domain [0 1]'; + $out .= ' /C0 ['.$grad['colors'][($i - 1)]['color'].']'; + $out .= ' /C1 ['.$grad['colors'][$i]['color'].']'; + $out .= ' /N '.$grad['colors'][$i]['exponent']; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + // set transparency functions + if ($grad['transparency']) { + $ft = $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 3'; + $out .= ' /Domain [0 1]'; + $functions = ''; + $i = 1; + $num_cols = count($grad['colors']); + for ($i = 1; $i < $num_cols; ++$i) { + $functions .= ($ft + $i).' 0 R '; + } + $out .= ' /Functions ['.trim($functions).']'; + $out .= ' /Bounds ['.trim($bounds).']'; + $out .= ' /Encode ['.trim($encode).']'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + for ($i = 1; $i < $num_cols; ++$i) { + $this->_newobj(); + $out = '<<'; + $out .= ' /FunctionType 2'; + $out .= ' /Domain [0 1]'; + $out .= ' /C0 ['.$grad['colors'][($i - 1)]['opacity'].']'; + $out .= ' /C1 ['.$grad['colors'][$i]['opacity'].']'; + $out .= ' /N '.$grad['colors'][$i]['exponent']; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + } + } + } + // set shading object + $this->_newobj(); + $out = '<< /ShadingType '.$grad['type']; + if (isset($grad['colspace'])) { + $out .= ' /ColorSpace /'.$grad['colspace']; + } else { + $out .= ' /ColorSpace /DeviceRGB'; + } + if (isset($grad['background']) AND !empty($grad['background'])) { + $out .= ' /Background ['.$grad['background'].']'; + } + if (isset($grad['antialias']) AND ($grad['antialias'] === true)) { + $out .= ' /AntiAlias true'; + } + if ($grad['type'] == 2) { + $out .= ' '.sprintf('/Coords [%F %F %F %F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3]); + $out .= ' /Domain [0 1]'; + $out .= ' /Function '.$fc.' 0 R'; + $out .= ' /Extend [true true]'; + $out .= ' >>'; + } elseif ($grad['type'] == 3) { + //x0, y0, r0, x1, y1, r1 + //at this this time radius of inner circle is 0 + $out .= ' '.sprintf('/Coords [%F %F 0 %F %F %F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3], $grad['coords'][4]); + $out .= ' /Domain [0 1]'; + $out .= ' /Function '.$fc.' 0 R'; + $out .= ' /Extend [true true]'; + $out .= ' >>'; + } elseif ($grad['type'] == 6) { + $out .= ' /BitsPerCoordinate 16'; + $out .= ' /BitsPerComponent 8'; + $out .= ' /Decode[0 1 0 1 0 1 0 1 0 1]'; + $out .= ' /BitsPerFlag 8'; + $stream = $this->_getrawstream($grad['stream']); + $out .= ' /Length '.strlen($stream); + $out .= ' >>'; + $out .= ' stream'."\n".$stream."\n".'endstream'; + } + $out .= "\n".'endobj'; + $this->_out($out); + if ($grad['transparency']) { + $shading_transparency = preg_replace('/\/ColorSpace \/[^\s]+/si', '/ColorSpace /DeviceGray', $out); + $shading_transparency = preg_replace('/\/Function [0-9]+ /si', '/Function '.$ft.' ', $shading_transparency); + } + $this->gradients[$id]['id'] = $this->n; + // set pattern object + $this->_newobj(); + $out = '<< /Type /Pattern /PatternType 2'; + $out .= ' /Shading '.$this->gradients[$id]['id'].' 0 R'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + $this->gradients[$id]['pattern'] = $this->n; + // set shading and pattern for transparency mask + if ($grad['transparency']) { + // luminosity pattern + $idgs = $id + $idt; + $this->_newobj(); + $this->_out($shading_transparency); + $this->gradients[$idgs]['id'] = $this->n; + $this->_newobj(); + $out = '<< /Type /Pattern /PatternType 2'; + $out .= ' /Shading '.$this->gradients[$idgs]['id'].' 0 R'; + $out .= ' >>'; + $out .= "\n".'endobj'; + $this->_out($out); + $this->gradients[$idgs]['pattern'] = $this->n; + // luminosity XObject + $oid = $this->_newobj(); + $this->xobjects['LX'.$oid] = array('n' => $oid); + $filter = ''; + $stream = 'q /a0 gs /Pattern cs /p'.$idgs.' scn 0 0 '.$this->wPt.' '.$this->hPt.' re f Q'; + if ($this->compress) { + $filter = ' /Filter /FlateDecode'; + $stream = gzcompress($stream); + } + $stream = $this->_getrawstream($stream); + $out = '<< /Type /XObject /Subtype /Form /FormType 1'.$filter; + $out .= ' /Length '.strlen($stream); + $rect = sprintf('%F %F', $this->wPt, $this->hPt); + $out .= ' /BBox [0 0 '.$rect.']'; + $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceGray >>'; + $out .= ' /Resources <<'; + $out .= ' /ExtGState << /a0 << /ca 1 /CA 1 >> >>'; + $out .= ' /Pattern << /p'.$idgs.' '.$this->gradients[$idgs]['pattern'].' 0 R >>'; + $out .= ' >>'; + $out .= ' >> '; + $out .= ' stream'."\n".$stream."\n".'endstream'; + $out .= "\n".'endobj'; + $this->_out($out); + // SMask + $this->_newobj(); + $out = '<< /Type /Mask /S /Luminosity /G '.($this->n - 1).' 0 R >>'."\n".'endobj'; + $this->_out($out); + // ExtGState + $this->_newobj(); + $out = '<< /Type /ExtGState /SMask '.($this->n - 1).' 0 R /AIS false >>'."\n".'endobj'; + $this->_out($out); + $this->extgstates[] = array('n' => $this->n, 'name' => 'TGS'.$id); + } + } + } + + /** + * Draw the sector of a circle. + * It can be used for instance to render pie charts. + * @param float $xc abscissa of the center. + * @param float $yc ordinate of the center. + * @param float $r radius. + * @param float $a start angle (in degrees). + * @param float $b end angle (in degrees). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param float $cw indicates whether to go clockwise (default: true). + * @param float $o origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). Default: 90. + * @author Maxime Delorme, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function PieSector($xc, $yc, $r, $a, $b, $style='FD', $cw=true, $o=90) { + $this->PieSectorXY($xc, $yc, $r, $r, $a, $b, $style, $cw, $o); + } + + /** + * Draw the sector of an ellipse. + * It can be used for instance to render pie charts. + * @param float $xc abscissa of the center. + * @param float $yc ordinate of the center. + * @param float $rx the x-axis radius. + * @param float $ry the y-axis radius. + * @param float $a start angle (in degrees). + * @param float $b end angle (in degrees). + * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. + * @param float $cw indicates whether to go clockwise. + * @param float $o origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). + * @param integer $nc Number of curves used to draw a 90 degrees portion of arc. + * @author Maxime Delorme, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function PieSectorXY($xc, $yc, $rx, $ry, $a, $b, $style='FD', $cw=false, $o=0, $nc=2) { + if ($this->state != 2) { + return; + } + if ($this->rtl) { + $xc = ($this->w - $xc); + } + $op = TCPDF_STATIC::getPathPaintOperator($style); + if ($op == 'f') { + $line_style = array(); + } + if ($cw) { + $d = $b; + $b = (360 - $a + $o); + $a = (360 - $d + $o); + } else { + $b += $o; + $a += $o; + } + $this->_outellipticalarc($xc, $yc, $rx, $ry, 0, $a, $b, true, $nc); + $this->_out($op); + } + + /** + * Embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. + * NOTE: EPS is not yet fully implemented, use the setRasterizeVectorImages() method to enable/disable rasterization of vector images using ImageMagick library. + * Only vector drawing is supported, not text or bitmap. + * Although the script was successfully tested with various AI format versions, best results are probably achieved with files that were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2). + * @param string $file Name of the file containing the image or a '@' character followed by the EPS/AI data string. + * @param float|null $x Abscissa of the upper-left corner. + * @param float|null $y Ordinate of the upper-left corner. + * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. + * @param mixed $link URL or identifier returned by AddLink(). + * @param boolean $useBoundingBox specifies whether to position the bounding box (true) or the complete canvas (false) at location (x,y). Default value is true. + * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
        • T: top-right for LTR or top-left for RTL
        • M: middle-right for LTR or middle-left for RTL
        • B: bottom-right for LTR or bottom-left for RTL
        • N: next line
        + * @param string $palign Allows to center or align the image on the current line. Possible values are:
        • L : left align
        • C : center
        • R : right align
        • '' : empty string : left for LTR or right for RTL
        + * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
        • 0: no border (default)
        • 1: frame
        or a string containing some or all of the following characters (in any order):
        • L: left
        • T: top
        • R: right
        • B: bottom
        or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) + * @param boolean $fitonpage if true the image is resized to not exceed page dimensions. + * @param boolean $fixoutvals if true remove values outside the bounding box. + * @author Valentin Schmidt, Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function ImageEps($file, $x=null, $y=null, $w=0, $h=0, $link='', $useBoundingBox=true, $align='', $palign='', $border=0, $fitonpage=false, $fixoutvals=false) { + if ($this->state != 2) { + return; + } + if ($this->rasterize_vector_images AND ($w > 0) AND ($h > 0)) { + // convert EPS to raster image using GD or ImageMagick libraries + return $this->Image($file, $x, $y, $w, $h, 'EPS', $link, $align, true, 300, $palign, false, false, $border, false, false, $fitonpage); + } + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + $k = $this->k; + if ($file[0] === '@') { // image from string + $data = substr($file, 1); + } else { // EPS/AI file + $data = $this->getCachedFileContents($file); + } + if ($data === FALSE) { + $this->Error('EPS file not found: '.$file); + } + $regs = array(); + // EPS/AI compatibility check (only checks files created by Adobe Illustrator!) + preg_match("/%%Creator:([^\r\n]+)/", $data, $regs); # find Creator + if (count($regs) > 1) { + $version_str = trim($regs[1]); # e.g. "Adobe Illustrator(R) 8.0" + if (strpos($version_str, 'Adobe Illustrator') !== false) { + $versexp = explode(' ', $version_str); + $version = (float)array_pop($versexp); + if ($version >= 9) { + $this->Error('This version of Adobe Illustrator file is not supported: '.$file); + } + } + } + // strip binary bytes in front of PS-header + $start = strpos($data, '%!PS-Adobe'); + if ($start > 0) { + $data = substr($data, $start); + } + // find BoundingBox params + preg_match("/%%BoundingBox:([^\r\n]+)/", $data, $regs); + if (count($regs) > 1) { + list($x1, $y1, $x2, $y2) = explode(' ', trim($regs[1])); + } else { + $this->Error('No BoundingBox found in EPS/AI file: '.$file); + } + $start = strpos($data, '%%EndSetup'); + if ($start === false) { + $start = strpos($data, '%%EndProlog'); + } + if ($start === false) { + $start = strpos($data, '%%BoundingBox'); + } + $data = substr($data, $start); + $end = strpos($data, '%%PageTrailer'); + if ($end===false) { + $end = strpos($data, 'showpage'); + } + if ($end) { + $data = substr($data, 0, $end); + } + // calculate image width and height on document + if (($w <= 0) AND ($h <= 0)) { + $w = ($x2 - $x1) / $k; + $h = ($y2 - $y1) / $k; + } elseif ($w <= 0) { + $w = ($x2-$x1) / $k * ($h / (($y2 - $y1) / $k)); + } elseif ($h <= 0) { + $h = ($y2 - $y1) / $k * ($w / (($x2 - $x1) / $k)); + } + // fit the image on available space + list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, $fitonpage); + if ($this->rasterize_vector_images) { + // convert EPS to raster image using GD or ImageMagick libraries + return $this->Image($file, $x, $y, $w, $h, 'EPS', $link, $align, true, 300, $palign, false, false, $border, false, false, $fitonpage); + } + // set scaling factors + $scale_x = $w / (($x2 - $x1) / $k); + $scale_y = $h / (($y2 - $y1) / $k); + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x - $w; + } + $this->img_rb_x = $ximg; + } else { + if ($palign == 'L') { + $ximg = $this->lMargin; + } elseif ($palign == 'C') { + $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($palign == 'R') { + $ximg = $this->w - $this->rMargin - $w; + } else { + $ximg = $x; + } + $this->img_rb_x = $ximg + $w; + } + if ($useBoundingBox) { + $dx = $ximg * $k - $x1; + $dy = $y * $k - $y1; + } else { + $dx = $ximg * $k; + $dy = $y * $k; + } + // save the current graphic state + $this->_out('q'.$this->epsmarker); + // translate + $this->_out(sprintf('%F %F %F %F %F %F cm', 1, 0, 0, 1, $dx, $dy + ($this->hPt - (2 * $y * $k) - ($y2 - $y1)))); + // scale + if (isset($scale_x)) { + $this->_out(sprintf('%F %F %F %F %F %F cm', $scale_x, 0, 0, $scale_y, $x1 * (1 - $scale_x), $y2 * (1 - $scale_y))); + } + // handle pc/unix/mac line endings + $lines = preg_split('/[\r\n]+/si', $data, -1, PREG_SPLIT_NO_EMPTY); + $u=0; + $cnt = count($lines); + for ($i=0; $i < $cnt; ++$i) { + $line = $lines[$i]; + if (($line == '') OR ($line[0] == '%')) { + continue; + } + $len = strlen($line); + // check for spot color names + $color_name = ''; + if (strcasecmp('x', substr(trim($line), -1)) == 0) { + if (preg_match('/\([^\)]*\)/', $line, $matches) > 0) { + // extract spot color name + $color_name = $matches[0]; + // remove color name from string + $line = str_replace(' '.$color_name, '', $line); + // remove pharentesis from color name + $color_name = substr($color_name, 1, -1); + } + } + $chunks = explode(' ', $line); + $cmd = trim(array_pop($chunks)); + // RGB + if (($cmd == 'Xa') OR ($cmd == 'XA')) { + $b = array_pop($chunks); + $g = array_pop($chunks); + $r = array_pop($chunks); + $this->_out(''.$r.' '.$g.' '.$b.' '.($cmd=='Xa'?'rg':'RG')); //substr($line, 0, -2).'rg' -> in EPS (AI8): c m y k r g b rg! + continue; + } + $skip = false; + if ($fixoutvals) { + // check for values outside the bounding box + switch ($cmd) { + case 'm': + case 'l': + case 'L': { + // skip values outside bounding box + foreach ($chunks as $key => $val) { + if ((($key % 2) == 0) AND (($val < $x1) OR ($val > $x2))) { + $skip = true; + } elseif ((($key % 2) != 0) AND (($val < $y1) OR ($val > $y2))) { + $skip = true; + } + } + } + } + } + switch ($cmd) { + case 'm': + case 'l': + case 'v': + case 'y': + case 'c': + case 'k': + case 'K': + case 'g': + case 'G': + case 's': + case 'S': + case 'J': + case 'j': + case 'w': + case 'M': + case 'd': + case 'n': { + if ($skip) { + break; + } + $this->_out($line); + break; + } + case 'x': {// custom fill color + if (empty($color_name)) { + // CMYK color + list($col_c, $col_m, $col_y, $col_k) = $chunks; + $this->_out(''.$col_c.' '.$col_m.' '.$col_y.' '.$col_k.' k'); + } else { + // Spot Color (CMYK + tint) + list($col_c, $col_m, $col_y, $col_k, $col_t) = $chunks; + $this->AddSpotColor($color_name, ($col_c * 100), ($col_m * 100), ($col_y * 100), ($col_k * 100)); + $color_cmd = sprintf('/CS%d cs %F scn', $this->spot_colors[$color_name]['i'], (1 - $col_t)); + $this->_out($color_cmd); + } + break; + } + case 'X': { // custom stroke color + if (empty($color_name)) { + // CMYK color + list($col_c, $col_m, $col_y, $col_k) = $chunks; + $this->_out(''.$col_c.' '.$col_m.' '.$col_y.' '.$col_k.' K'); + } else { + // Spot Color (CMYK + tint) + list($col_c, $col_m, $col_y, $col_k, $col_t) = $chunks; + $this->AddSpotColor($color_name, ($col_c * 100), ($col_m * 100), ($col_y * 100), ($col_k * 100)); + $color_cmd = sprintf('/CS%d CS %F SCN', $this->spot_colors[$color_name]['i'], (1 - $col_t)); + $this->_out($color_cmd); + } + break; + } + case 'Y': + case 'N': + case 'V': + case 'L': + case 'C': { + if ($skip) { + break; + } + $line[($len - 1)] = strtolower($cmd); + $this->_out($line); + break; + } + case 'b': + case 'B': { + $this->_out($cmd . '*'); + break; + } + case 'f': + case 'F': { + if ($u > 0) { + $isU = false; + $max = min(($i + 5), $cnt); + for ($j = ($i + 1); $j < $max; ++$j) { + $isU = ($isU OR (($lines[$j] == 'U') OR ($lines[$j] == '*U'))); + } + if ($isU) { + $this->_out('f*'); + } + } else { + $this->_out('f*'); + } + break; + } + case '*u': { + ++$u; + break; + } + case '*U': { + --$u; + break; + } + } + } + // restore previous graphic state + $this->_out($this->epsmarker.'Q'); + if (!empty($border)) { + $bx = $this->x; + $by = $this->y; + $this->x = $ximg; + if ($this->rtl) { + $this->x += $w; + } + $this->y = $y; + $this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true); + $this->x = $bx; + $this->y = $by; + } + if ($link) { + $this->Link($ximg, $y, $w, $h, $link, 0); + } + // set pointer to align the next text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h/2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->setY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + } + + /** + * Set document barcode. + * @param string $bc barcode + * @public + */ + public function setBarcode($bc='') { + $this->barcode = $bc; + } + + /** + * Get current barcode. + * @return string + * @public + * @since 4.0.012 (2008-07-24) + */ + public function getBarcode() { + return $this->barcode; + } + + /** + * Print a Linear Barcode. + * @param string $code code to print + * @param string $type type of barcode (see tcpdf_barcodes_1d.php for supported formats). + * @param float|null $x x position in user units (null = current x position) + * @param float|null $y y position in user units (null = current y position) + * @param float|null $w width in user units (null = remaining page width) + * @param float|null $h height in user units (null = remaining page height) + * @param float|null $xres width of the smallest bar in user units (null = default value = 0.4mm) + * @param array $style array of options:
          + *
        • boolean $style['border'] if true prints a border
        • + *
        • int $style['padding'] padding to leave around the barcode in user units (set to 'auto' for automatic padding)
        • + *
        • int $style['hpadding'] horizontal padding in user units (set to 'auto' for automatic padding)
        • + *
        • int $style['vpadding'] vertical padding in user units (set to 'auto' for automatic padding)
        • + *
        • array $style['fgcolor'] color array for bars and text
        • + *
        • mixed $style['bgcolor'] color array for background (set to false for transparent)
        • + *
        • boolean $style['text'] if true prints text below the barcode
        • + *
        • string $style['label'] override default label
        • + *
        • string $style['font'] font name for text
        • int $style['fontsize'] font size for text
        • + *
        • int $style['stretchtext']: 0 = disabled; 1 = horizontal scaling only if necessary; 2 = forced horizontal scaling; 3 = character spacing only if necessary; 4 = forced character spacing.
        • + *
        • string $style['position'] horizontal position of the containing barcode cell on the page: L = left margin; C = center; R = right margin.
        • + *
        • string $style['align'] horizontal position of the barcode on the containing rectangle: L = left; C = center; R = right.
        • + *
        • string $style['stretch'] if true stretch the barcode to best fit the available width, otherwise uses $xres resolution for a single bar.
        • + *
        • string $style['fitwidth'] if true reduce the width to fit the barcode width + padding. When this option is enabled the 'stretch' option is automatically disabled.
        • + *
        • string $style['cellfitalign'] this option works only when 'fitwidth' is true and 'position' is unset or empty. Set the horizontal position of the containing barcode cell inside the specified rectangle: L = left; C = center; R = right.
        + * @param string $align Indicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:
        • T: top-right for LTR or top-left for RTL
        • M: middle-right for LTR or middle-left for RTL
        • B: bottom-right for LTR or bottom-left for RTL
        • N: next line
        + * @author Nicola Asuni + * @since 3.1.000 (2008-06-09) + * @public + */ + public function write1DBarcode($code, $type, $x=null, $y=null, $w=null, $h=null, $xres=null, $style=array(), $align='') { + if (TCPDF_STATIC::empty_string(trim($code))) { + return; + } + require_once(dirname(__FILE__).'/tcpdf_barcodes_1d.php'); + // save current graphic settings + $gvars = $this->getGraphicVars(); + // create new barcode object + $barcodeobj = new TCPDFBarcode($code, $type); + $arrcode = $barcodeobj->getBarcodeArray(); + if (empty($arrcode) OR ($arrcode['maxw'] <= 0)) { + $this->Error('Error in 1D barcode string'); + } + if ($arrcode['maxh'] <= 0) { + $arrcode['maxh'] = 1; + } + // set default values + if (!isset($style['position'])) { + $style['position'] = ''; + } elseif ($style['position'] == 'S') { + // keep this for backward compatibility + $style['position'] = ''; + $style['stretch'] = true; + } + if (!isset($style['fitwidth'])) { + if (!isset($style['stretch'])) { + $style['fitwidth'] = true; + } else { + $style['fitwidth'] = false; + } + } + if ($style['fitwidth']) { + // disable stretch + $style['stretch'] = false; + } + if (!isset($style['stretch'])) { + if (($w === '') OR ($w <= 0)) { + $style['stretch'] = false; + } else { + $style['stretch'] = true; + } + } + if (!isset($style['fgcolor'])) { + $style['fgcolor'] = array(0,0,0); // default black + } + if (!isset($style['bgcolor'])) { + $style['bgcolor'] = false; // default transparent + } + if (!isset($style['border'])) { + $style['border'] = false; + } + $fontsize = 0; + if (!isset($style['text'])) { + $style['text'] = false; + } + if ($style['text'] AND isset($style['font'])) { + if (isset($style['fontsize'])) { + $fontsize = $style['fontsize']; + } + $this->setFont($style['font'], '', $fontsize); + } + if (!isset($style['stretchtext'])) { + $style['stretchtext'] = 4; + } + if (TCPDF_STATIC::empty_string($x)) { + $x = $this->x; + } + if (TCPDF_STATIC::empty_string($y)) { + $y = $this->y; + } + // check page for no-write regions and adapt page margins if necessary + list($x, $y) = $this->checkPageRegions($h, $x, $y); + if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { + if ($this->rtl) { + $w = $x - $this->lMargin; + } else { + $w = $this->w - $this->rMargin - $x; + } + } + // padding + if (!isset($style['padding'])) { + $padding = 0; + } elseif ($style['padding'] === 'auto') { + $padding = 10 * ($w / ($arrcode['maxw'] + 20)); + } else { + $padding = floatval($style['padding']); + } + // horizontal padding + if (!isset($style['hpadding'])) { + $hpadding = $padding; + } elseif ($style['hpadding'] === 'auto') { + $hpadding = 10 * ($w / ($arrcode['maxw'] + 20)); + } else { + $hpadding = floatval($style['hpadding']); + } + // vertical padding + if (!isset($style['vpadding'])) { + $vpadding = $padding; + } elseif ($style['vpadding'] === 'auto') { + $vpadding = ($hpadding / 2); + } else { + $vpadding = floatval($style['vpadding']); + } + // calculate xres (single bar width) + $max_xres = ($w - (2 * $hpadding)) / $arrcode['maxw']; + if ($style['stretch']) { + $xres = $max_xres; + } else { + if (TCPDF_STATIC::empty_string($xres)) { + $xres = (0.141 * $this->k); // default bar width = 0.4 mm + } + if ($xres > $max_xres) { + // correct xres to fit on $w + $xres = $max_xres; + } + if ((isset($style['padding']) AND ($style['padding'] === 'auto')) + OR (isset($style['hpadding']) AND ($style['hpadding'] === 'auto'))) { + $hpadding = 10 * $xres; + if (isset($style['vpadding']) AND ($style['vpadding'] === 'auto')) { + $vpadding = ($hpadding / 2); + } + } + } + if ($style['fitwidth']) { + $wold = $w; + $w = (($arrcode['maxw'] * $xres) + (2 * $hpadding)); + if (isset($style['cellfitalign'])) { + switch ($style['cellfitalign']) { + case 'L': { + if ($this->rtl) { + $x -= ($wold - $w); + } + break; + } + case 'R': { + if (!$this->rtl) { + $x += ($wold - $w); + } + break; + } + case 'C': { + if ($this->rtl) { + $x -= (($wold - $w) / 2); + } else { + $x += (($wold - $w) / 2); + } + break; + } + default : { + break; + } + } + } + } + $text_height = $this->getCellHeight($fontsize / $this->k); + // height + if (TCPDF_STATIC::empty_string($h) OR ($h <= 0)) { + // set default height + $h = (($arrcode['maxw'] * $xres) / 3) + (2 * $vpadding) + $text_height; + } + $barh = $h - $text_height - (2 * $vpadding); + if ($barh <=0) { + // try to reduce font or padding to fit barcode on available height + if ($text_height > $h) { + $fontsize = (($h * $this->k) / (4 * $this->cell_height_ratio)); + $text_height = $this->getCellHeight($fontsize / $this->k); + $this->setFont($style['font'], '', $fontsize); + } + if ($vpadding > 0) { + $vpadding = (($h - $text_height) / 4); + } + $barh = $h - $text_height - (2 * $vpadding); + } + // fit the barcode on available space + list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, false); + // set alignment + $this->img_rb_y = $y + $h; + // set alignment + if ($this->rtl) { + if ($style['position'] == 'L') { + $xpos = $this->lMargin; + } elseif ($style['position'] == 'C') { + $xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($style['position'] == 'R') { + $xpos = $this->w - $this->rMargin - $w; + } else { + $xpos = $x - $w; + } + $this->img_rb_x = $xpos; + } else { + if ($style['position'] == 'L') { + $xpos = $this->lMargin; + } elseif ($style['position'] == 'C') { + $xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; + } elseif ($style['position'] == 'R') { + $xpos = $this->w - $this->rMargin - $w; + } else { + $xpos = $x; + } + $this->img_rb_x = $xpos + $w; + } + $xpos_rect = $xpos; + if (!isset($style['align'])) { + $style['align'] = 'C'; + } + switch ($style['align']) { + case 'L': { + $xpos = $xpos_rect + $hpadding; + break; + } + case 'R': { + $xpos = $xpos_rect + ($w - ($arrcode['maxw'] * $xres)) - $hpadding; + break; + } + case 'C': + default : { + $xpos = $xpos_rect + (($w - ($arrcode['maxw'] * $xres)) / 2); + break; + } + } + $xpos_text = $xpos; + // barcode is always printed in LTR direction + $tempRTL = $this->rtl; + $this->rtl = false; + // print background color + if ($style['bgcolor']) { + $this->Rect($xpos_rect, $y, $w, $h, $style['border'] ? 'DF' : 'F', '', $style['bgcolor']); + } elseif ($style['border']) { + $this->Rect($xpos_rect, $y, $w, $h, 'D'); + } + // set foreground color + $this->setDrawColorArray($style['fgcolor']); + $this->setTextColorArray($style['fgcolor']); + // print bars + foreach ($arrcode['bcode'] as $k => $v) { + $bw = ($v['w'] * $xres); + if ($v['t']) { + // draw a vertical bar + $ypos = $y + $vpadding + ($v['p'] * $barh / $arrcode['maxh']); + $this->Rect($xpos, $ypos, $bw, ($v['h'] * $barh / $arrcode['maxh']), 'F', array(), $style['fgcolor']); + } + $xpos += $bw; + } + // print text + if ($style['text']) { + if (isset($style['label']) AND !TCPDF_STATIC::empty_string($style['label'])) { + $label = $style['label']; + } else { + $label = $code; + } + $txtwidth = ($arrcode['maxw'] * $xres); + if ($this->GetStringWidth($label) > $txtwidth) { + $style['stretchtext'] = 2; + } + // print text + $this->x = $xpos_text; + $this->y = $y + $vpadding + $barh; + $cellpadding = $this->cell_padding; + $this->setCellPadding(0); + $this->Cell($txtwidth, 0, $label, 0, 0, 'C', false, '', $style['stretchtext'], false, 'T', 'T'); + $this->cell_padding = $cellpadding; + } + // restore original direction + $this->rtl = $tempRTL; + // restore previous settings + $this->setGraphicVars($gvars); + // set pointer to align the next text/objects + switch($align) { + case 'T':{ + $this->y = $y; + $this->x = $this->img_rb_x; + break; + } + case 'M':{ + $this->y = $y + round($h / 2); + $this->x = $this->img_rb_x; + break; + } + case 'B':{ + $this->y = $this->img_rb_y; + $this->x = $this->img_rb_x; + break; + } + case 'N':{ + $this->setY($this->img_rb_y); + break; + } + default:{ + break; + } + } + $this->endlinex = $this->img_rb_x; + } + + /** + * Print 2D Barcode. + * @param string $code code to print + * @param string $type type of barcode (see tcpdf_barcodes_2d.php for supported formats). + * @param float|null $x x position in user units + * @param float|null $y y position in user units + * @param float|null $w width in user units + * @param float|null $h height in user units + * @param array $style array of options: + * {% endif %} + * + * @internal + */ +final class IfTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $expr = $this->parser->getExpressionParser()->parseExpression(); + $stream = $this->parser->getStream(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideIfFork']); + $tests = [$expr, $body]; + $else = null; + + $end = false; + while (!$end) { + switch ($stream->next()->getValue()) { + case 'else': + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $else = $this->parser->subparse([$this, 'decideIfEnd']); + break; + + case 'elseif': + $expr = $this->parser->getExpressionParser()->parseExpression(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $body = $this->parser->subparse([$this, 'decideIfFork']); + $tests[] = $expr; + $tests[] = $body; + break; + + case 'endif': + $end = true; + break; + + default: + throw new SyntaxError(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d).', $lineno), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return new IfNode(new Node($tests), $else, $lineno, $this->getTag()); + } + + public function decideIfFork(Token $token): bool + { + return $token->test(['elseif', 'else', 'endif']); + } + + public function decideIfEnd(Token $token): bool + { + return $token->test(['endif']); + } + + public function getTag(): string + { + return 'if'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php b/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php new file mode 100644 index 0000000..28beb8a --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php @@ -0,0 +1,69 @@ +parser->getExpressionParser()->parseExpression(); + + list($variables, $only, $ignoreMissing) = $this->parseArguments(); + + return new IncludeNode($expr, $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); + } + + protected function parseArguments() + { + $stream = $this->parser->getStream(); + + $ignoreMissing = false; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'ignore')) { + $stream->expect(/* Token::NAME_TYPE */ 5, 'missing'); + + $ignoreMissing = true; + } + + $variables = null; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'with')) { + $variables = $this->parser->getExpressionParser()->parseExpression(); + } + + $only = false; + if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'only')) { + $only = true; + } + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + return [$variables, $only, $ignoreMissing]; + } + + public function getTag(): string + { + return 'include'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/MacroTokenParser.php b/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/MacroTokenParser.php new file mode 100644 index 0000000..f584927 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/MacroTokenParser.php @@ -0,0 +1,66 @@ + + * {% endmacro %} + * + * @internal + */ +final class MacroTokenParser extends AbstractTokenParser +{ + public function parse(Token $token): Node + { + $lineno = $token->getLine(); + $stream = $this->parser->getStream(); + $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); + + $arguments = $this->parser->getExpressionParser()->parseArguments(true, true); + + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + $this->parser->pushLocalScope(); + $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); + if ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) { + $value = $token->getValue(); + + if ($value != $name) { + throw new SyntaxError(sprintf('Expected endmacro for macro "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext()); + } + } + $this->parser->popLocalScope(); + $stream->expect(/* Token::BLOCK_END_TYPE */ 3); + + $this->parser->setMacro($name, new MacroNode($name, new BodyNode([$body]), $arguments, $lineno, $this->getTag())); + + return new Node(); + } + + public function decideBlockEnd(Token $token): bool + { + return $token->test('endmacro'); + } + + public function getTag(): string + { + return 'macro'; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TwigFunction.php b/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TwigFunction.php new file mode 100644 index 0000000..494d45b --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TwigFunction.php @@ -0,0 +1,122 @@ + + * + * @see https://twig.symfony.com/doc/templates.html#functions + */ +final class TwigFunction +{ + private $name; + private $callable; + private $options; + private $arguments = []; + + /** + * @param callable|null $callable A callable implementing the function. If null, you need to overwrite the "node_class" option to customize compilation. + */ + public function __construct(string $name, $callable = null, array $options = []) + { + $this->name = $name; + $this->callable = $callable; + $this->options = array_merge([ + 'needs_environment' => false, + 'needs_context' => false, + 'is_variadic' => false, + 'is_safe' => null, + 'is_safe_callback' => null, + 'node_class' => FunctionExpression::class, + 'deprecated' => false, + 'alternative' => null, + ], $options); + } + + public function getName(): string + { + return $this->name; + } + + /** + * Returns the callable to execute for this function. + * + * @return callable|null + */ + public function getCallable() + { + return $this->callable; + } + + public function getNodeClass(): string + { + return $this->options['node_class']; + } + + public function setArguments(array $arguments): void + { + $this->arguments = $arguments; + } + + public function getArguments(): array + { + return $this->arguments; + } + + public function needsEnvironment(): bool + { + return $this->options['needs_environment']; + } + + public function needsContext(): bool + { + return $this->options['needs_context']; + } + + public function getSafe(Node $functionArgs): ?array + { + if (null !== $this->options['is_safe']) { + return $this->options['is_safe']; + } + + if (null !== $this->options['is_safe_callback']) { + return $this->options['is_safe_callback']($functionArgs); + } + + return []; + } + + public function isVariadic(): bool + { + return (bool) $this->options['is_variadic']; + } + + public function isDeprecated(): bool + { + return (bool) $this->options['deprecated']; + } + + public function getDeprecatedVersion(): string + { + return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; + } + + public function getAlternative(): ?string + { + return $this->options['alternative']; + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Assert.php b/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Assert.php new file mode 100644 index 0000000..e0fbabc --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Assert.php @@ -0,0 +1,2066 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Webmozart\Assert; + +use ArrayAccess; +use BadMethodCallException; +use Closure; +use Countable; +use DateTime; +use DateTimeImmutable; +use Exception; +use ResourceBundle; +use SimpleXMLElement; +use Throwable; +use Traversable; + +/** + * Efficient assertions to validate the input/output of your methods. + * + * @since 1.0 + * + * @author Bernhard Schussek + */ +class Assert +{ + use Mixin; + + /** + * @psalm-pure + * @psalm-assert string $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function string($value, $message = '') + { + if (!\is_string($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a string. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert non-empty-string $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function stringNotEmpty($value, $message = '') + { + static::string($value, $message); + static::notEq($value, '', $message); + } + + /** + * @psalm-pure + * @psalm-assert int $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function integer($value, $message = '') + { + if (!\is_int($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an integer. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert numeric $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function integerish($value, $message = '') + { + if (!\is_numeric($value) || $value != (int) $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an integerish value. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert positive-int $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function positiveInteger($value, $message = '') + { + if (!(\is_int($value) && $value > 0)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a positive integer. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert float $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function float($value, $message = '') + { + if (!\is_float($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a float. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert numeric $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function numeric($value, $message = '') + { + if (!\is_numeric($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a numeric. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert positive-int|0 $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function natural($value, $message = '') + { + if (!\is_int($value) || $value < 0) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a non-negative integer. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert bool $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function boolean($value, $message = '') + { + if (!\is_bool($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a boolean. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert scalar $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function scalar($value, $message = '') + { + if (!\is_scalar($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a scalar. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert object $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function object($value, $message = '') + { + if (!\is_object($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an object. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert resource $value + * + * @param mixed $value + * @param string|null $type type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function resource($value, $type = null, $message = '') + { + if (!\is_resource($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a resource. Got: %s', + static::typeToString($value) + )); + } + + if ($type && $type !== \get_resource_type($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a resource of type %2$s. Got: %s', + static::typeToString($value), + $type + )); + } + } + + /** + * @psalm-pure + * @psalm-assert callable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isCallable($value, $message = '') + { + if (!\is_callable($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a callable. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert array $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isArray($value, $message = '') + { + if (!\is_array($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @deprecated use "isIterable" or "isInstanceOf" instead + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isTraversable($value, $message = '') + { + @\trigger_error( + \sprintf( + 'The "%s" assertion is deprecated. You should stop using it, as it will soon be removed in 2.0 version. Use "isIterable" or "isInstanceOf" instead.', + __METHOD__ + ), + \E_USER_DEPRECATED + ); + + if (!\is_array($value) && !($value instanceof Traversable)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a traversable. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert array|ArrayAccess $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isArrayAccessible($value, $message = '') + { + if (!\is_array($value) && !($value instanceof ArrayAccess)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array accessible. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert countable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isCountable($value, $message = '') + { + if ( + !\is_array($value) + && !($value instanceof Countable) + && !($value instanceof ResourceBundle) + && !($value instanceof SimpleXMLElement) + ) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a countable. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isIterable($value, $message = '') + { + if (!\is_array($value) && !($value instanceof Traversable)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an iterable. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * @psalm-assert ExpectedType $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isInstanceOf($value, $class, $message = '') + { + if (!($value instanceof $class)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an instance of %2$s. Got: %s', + static::typeToString($value), + $class + )); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * @psalm-assert !ExpectedType $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notInstanceOf($value, $class, $message = '') + { + if ($value instanceof $class) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an instance other than %2$s. Got: %s', + static::typeToString($value), + $class + )); + } + } + + /** + * @psalm-pure + * @psalm-param array $classes + * + * @param mixed $value + * @param array $classes + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isInstanceOfAny($value, array $classes, $message = '') + { + foreach ($classes as $class) { + if ($value instanceof $class) { + return; + } + } + + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an instance of any of %2$s. Got: %s', + static::typeToString($value), + \implode(', ', \array_map(array('static', 'valueToString'), $classes)) + )); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * @psalm-assert ExpectedType|class-string $value + * + * @param object|string $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isAOf($value, $class, $message = '') + { + static::string($class, 'Expected class as a string. Got: %s'); + + if (!\is_a($value, $class, \is_string($value))) { + static::reportInvalidArgument(sprintf( + $message ?: 'Expected an instance of this class or to this class among his parents %2$s. Got: %s', + static::typeToString($value), + $class + )); + } + } + + /** + * @psalm-pure + * @psalm-template UnexpectedType of object + * @psalm-param class-string $class + * @psalm-assert !UnexpectedType $value + * @psalm-assert !class-string $value + * + * @param object|string $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isNotA($value, $class, $message = '') + { + static::string($class, 'Expected class as a string. Got: %s'); + + if (\is_a($value, $class, \is_string($value))) { + static::reportInvalidArgument(sprintf( + $message ?: 'Expected an instance of this class or to this class among his parents other than %2$s. Got: %s', + static::typeToString($value), + $class + )); + } + } + + /** + * @psalm-pure + * @psalm-param array $classes + * + * @param object|string $value + * @param string[] $classes + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isAnyOf($value, array $classes, $message = '') + { + foreach ($classes as $class) { + static::string($class, 'Expected class as a string. Got: %s'); + + if (\is_a($value, $class, \is_string($value))) { + return; + } + } + + static::reportInvalidArgument(sprintf( + $message ?: 'Expected an any of instance of this class or to this class among his parents other than %2$s. Got: %s', + static::typeToString($value), + \implode(', ', \array_map(array('static', 'valueToString'), $classes)) + )); + } + + /** + * @psalm-pure + * @psalm-assert empty $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isEmpty($value, $message = '') + { + if (!empty($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an empty value. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert !empty $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notEmpty($value, $message = '') + { + if (empty($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a non-empty value. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function null($value, $message = '') + { + if (null !== $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected null. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert !null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notNull($value, $message = '') + { + if (null === $value) { + static::reportInvalidArgument( + $message ?: 'Expected a value other than null.' + ); + } + } + + /** + * @psalm-pure + * @psalm-assert true $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function true($value, $message = '') + { + if (true !== $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be true. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert false $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function false($value, $message = '') + { + if (false !== $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be false. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert !false $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notFalse($value, $message = '') + { + if (false === $value) { + static::reportInvalidArgument( + $message ?: 'Expected a value other than false.' + ); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function ip($value, $message = '') + { + if (false === \filter_var($value, \FILTER_VALIDATE_IP)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be an IP. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function ipv4($value, $message = '') + { + if (false === \filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be an IPv4. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function ipv6($value, $message = '') + { + if (false === \filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be an IPv6. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function email($value, $message = '') + { + if (false === \filter_var($value, FILTER_VALIDATE_EMAIL)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to be a valid e-mail address. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * Does non strict comparisons on the items, so ['3', 3] will not pass the assertion. + * + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function uniqueValues(array $values, $message = '') + { + $allValues = \count($values); + $uniqueValues = \count(\array_unique($values)); + + if ($allValues !== $uniqueValues) { + $difference = $allValues - $uniqueValues; + + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array of unique values, but %s of them %s duplicated', + $difference, + (1 === $difference ? 'is' : 'are') + )); + } + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function eq($value, $expect, $message = '') + { + if ($expect != $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value equal to %2$s. Got: %s', + static::valueToString($value), + static::valueToString($expect) + )); + } + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notEq($value, $expect, $message = '') + { + if ($expect == $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a different value than %s.', + static::valueToString($expect) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function same($value, $expect, $message = '') + { + if ($expect !== $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value identical to %2$s. Got: %s', + static::valueToString($value), + static::valueToString($expect) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notSame($value, $expect, $message = '') + { + if ($expect === $value) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value not identical to %s.', + static::valueToString($expect) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function greaterThan($value, $limit, $message = '') + { + if ($value <= $limit) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value greater than %2$s. Got: %s', + static::valueToString($value), + static::valueToString($limit) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function greaterThanEq($value, $limit, $message = '') + { + if ($value < $limit) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value greater than or equal to %2$s. Got: %s', + static::valueToString($value), + static::valueToString($limit) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function lessThan($value, $limit, $message = '') + { + if ($value >= $limit) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value less than %2$s. Got: %s', + static::valueToString($value), + static::valueToString($limit) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function lessThanEq($value, $limit, $message = '') + { + if ($value > $limit) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value less than or equal to %2$s. Got: %s', + static::valueToString($value), + static::valueToString($limit) + )); + } + } + + /** + * Inclusive range, so Assert::(3, 3, 5) passes. + * + * @psalm-pure + * + * @param mixed $value + * @param mixed $min + * @param mixed $max + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function range($value, $min, $max, $message = '') + { + if ($value < $min || $value > $max) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value between %2$s and %3$s. Got: %s', + static::valueToString($value), + static::valueToString($min), + static::valueToString($max) + )); + } + } + + /** + * A more human-readable alias of Assert::inArray(). + * + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function oneOf($value, array $values, $message = '') + { + static::inArray($value, $values, $message); + } + + /** + * Does strict comparison, so Assert::inArray(3, ['3']) does not pass the assertion. + * + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function inArray($value, array $values, $message = '') + { + if (!\in_array($value, $values, true)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected one of: %2$s. Got: %s', + static::valueToString($value), + \implode(', ', \array_map(array('static', 'valueToString'), $values)) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function contains($value, $subString, $message = '') + { + if (false === \strpos($value, $subString)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain %2$s. Got: %s', + static::valueToString($value), + static::valueToString($subString) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notContains($value, $subString, $message = '') + { + if (false !== \strpos($value, $subString)) { + static::reportInvalidArgument(\sprintf( + $message ?: '%2$s was not expected to be contained in a value. Got: %s', + static::valueToString($value), + static::valueToString($subString) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notWhitespaceOnly($value, $message = '') + { + if (\preg_match('/^\s*$/', $value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a non-whitespace string. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function startsWith($value, $prefix, $message = '') + { + if (0 !== \strpos($value, $prefix)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to start with %2$s. Got: %s', + static::valueToString($value), + static::valueToString($prefix) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notStartsWith($value, $prefix, $message = '') + { + if (0 === \strpos($value, $prefix)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value not to start with %2$s. Got: %s', + static::valueToString($value), + static::valueToString($prefix) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function startsWithLetter($value, $message = '') + { + static::string($value); + + $valid = isset($value[0]); + + if ($valid) { + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = \ctype_alpha($value[0]); + \setlocale(LC_CTYPE, $locale); + } + + if (!$valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to start with a letter. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function endsWith($value, $suffix, $message = '') + { + if ($suffix !== \substr($value, -\strlen($suffix))) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to end with %2$s. Got: %s', + static::valueToString($value), + static::valueToString($suffix) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notEndsWith($value, $suffix, $message = '') + { + if ($suffix === \substr($value, -\strlen($suffix))) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value not to end with %2$s. Got: %s', + static::valueToString($value), + static::valueToString($suffix) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function regex($value, $pattern, $message = '') + { + if (!\preg_match($pattern, $value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The value %s does not match the expected pattern.', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function notRegex($value, $pattern, $message = '') + { + if (\preg_match($pattern, $value, $matches, PREG_OFFSET_CAPTURE)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The value %s matches the pattern %s (at offset %d).', + static::valueToString($value), + static::valueToString($pattern), + $matches[0][1] + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function unicodeLetters($value, $message = '') + { + static::string($value); + + if (!\preg_match('/^\p{L}+$/u', $value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain only Unicode letters. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function alpha($value, $message = '') + { + static::string($value); + + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = !\ctype_alpha($value); + \setlocale(LC_CTYPE, $locale); + + if ($valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain only letters. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function digits($value, $message = '') + { + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = !\ctype_digit($value); + \setlocale(LC_CTYPE, $locale); + + if ($valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain digits only. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function alnum($value, $message = '') + { + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = !\ctype_alnum($value); + \setlocale(LC_CTYPE, $locale); + + if ($valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain letters and digits only. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert lowercase-string $value + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function lower($value, $message = '') + { + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = !\ctype_lower($value); + \setlocale(LC_CTYPE, $locale); + + if ($valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain lowercase characters only. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-assert !lowercase-string $value + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function upper($value, $message = '') + { + $locale = \setlocale(LC_CTYPE, 0); + \setlocale(LC_CTYPE, 'C'); + $valid = !\ctype_upper($value); + \setlocale(LC_CTYPE, $locale); + + if ($valid) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain uppercase characters only. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * + * @param string $value + * @param int $length + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function length($value, $length, $message = '') + { + if ($length !== static::strlen($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain %2$s characters. Got: %s', + static::valueToString($value), + $length + )); + } + } + + /** + * Inclusive min. + * + * @psalm-pure + * + * @param string $value + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function minLength($value, $min, $message = '') + { + if (static::strlen($value) < $min) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain at least %2$s characters. Got: %s', + static::valueToString($value), + $min + )); + } + } + + /** + * Inclusive max. + * + * @psalm-pure + * + * @param string $value + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function maxLength($value, $max, $message = '') + { + if (static::strlen($value) > $max) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain at most %2$s characters. Got: %s', + static::valueToString($value), + $max + )); + } + } + + /** + * Inclusive , so Assert::lengthBetween('asd', 3, 5); passes the assertion. + * + * @psalm-pure + * + * @param string $value + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function lengthBetween($value, $min, $max, $message = '') + { + $length = static::strlen($value); + + if ($length < $min || $length > $max) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a value to contain between %2$s and %3$s characters. Got: %s', + static::valueToString($value), + $min, + $max + )); + } + } + + /** + * Will also pass if $value is a directory, use Assert::file() instead if you need to be sure it is a file. + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function fileExists($value, $message = '') + { + static::string($value); + + if (!\file_exists($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The file %s does not exist.', + static::valueToString($value) + )); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function file($value, $message = '') + { + static::fileExists($value, $message); + + if (!\is_file($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The path %s is not a file.', + static::valueToString($value) + )); + } + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function directory($value, $message = '') + { + static::fileExists($value, $message); + + if (!\is_dir($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The path %s is no directory.', + static::valueToString($value) + )); + } + } + + /** + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function readable($value, $message = '') + { + if (!\is_readable($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The path %s is not readable.', + static::valueToString($value) + )); + } + } + + /** + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function writable($value, $message = '') + { + if (!\is_writable($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'The path %s is not writable.', + static::valueToString($value) + )); + } + } + + /** + * @psalm-assert class-string $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function classExists($value, $message = '') + { + if (!\class_exists($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an existing class name. Got: %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * @psalm-assert class-string|ExpectedType $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function subclassOf($value, $class, $message = '') + { + if (!\is_subclass_of($value, $class)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected a sub-class of %2$s. Got: %s', + static::valueToString($value), + static::valueToString($class) + )); + } + } + + /** + * @psalm-assert class-string $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function interfaceExists($value, $message = '') + { + if (!\interface_exists($value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an existing interface name. got %s', + static::valueToString($value) + )); + } + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $interface + * @psalm-assert class-string $value + * + * @param mixed $value + * @param mixed $interface + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function implementsInterface($value, $interface, $message = '') + { + if (!\in_array($interface, \class_implements($value))) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an implementation of %2$s. Got: %s', + static::valueToString($value), + static::valueToString($interface) + )); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object $classOrObject + * + * @param string|object $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function propertyExists($classOrObject, $property, $message = '') + { + if (!\property_exists($classOrObject, $property)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the property %s to exist.', + static::valueToString($property) + )); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object $classOrObject + * + * @param string|object $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function propertyNotExists($classOrObject, $property, $message = '') + { + if (\property_exists($classOrObject, $property)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the property %s to not exist.', + static::valueToString($property) + )); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object $classOrObject + * + * @param string|object $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function methodExists($classOrObject, $method, $message = '') + { + if (!(\is_string($classOrObject) || \is_object($classOrObject)) || !\method_exists($classOrObject, $method)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the method %s to exist.', + static::valueToString($method) + )); + } + } + + /** + * @psalm-pure + * @psalm-param class-string|object $classOrObject + * + * @param string|object $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function methodNotExists($classOrObject, $method, $message = '') + { + if ((\is_string($classOrObject) || \is_object($classOrObject)) && \method_exists($classOrObject, $method)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the method %s to not exist.', + static::valueToString($method) + )); + } + } + + /** + * @psalm-pure + * + * @param array $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function keyExists($array, $key, $message = '') + { + if (!(isset($array[$key]) || \array_key_exists($key, $array))) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the key %s to exist.', + static::valueToString($key) + )); + } + } + + /** + * @psalm-pure + * + * @param array $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function keyNotExists($array, $key, $message = '') + { + if (isset($array[$key]) || \array_key_exists($key, $array)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected the key %s to not exist.', + static::valueToString($key) + )); + } + } + + /** + * Checks if a value is a valid array key (int or string). + * + * @psalm-pure + * @psalm-assert array-key $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function validArrayKey($value, $message = '') + { + if (!(\is_int($value) || \is_string($value))) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected string or integer. Got: %s', + static::typeToString($value) + )); + } + } + + /** + * Does not check if $array is countable, this can generate a warning on php versions after 7.2. + * + * @param Countable|array $array + * @param int $number + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function count($array, $number, $message = '') + { + static::eq( + \count($array), + $number, + \sprintf( + $message ?: 'Expected an array to contain %d elements. Got: %d.', + $number, + \count($array) + ) + ); + } + + /** + * Does not check if $array is countable, this can generate a warning on php versions after 7.2. + * + * @param Countable|array $array + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function minCount($array, $min, $message = '') + { + if (\count($array) < $min) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array to contain at least %2$d elements. Got: %d', + \count($array), + $min + )); + } + } + + /** + * Does not check if $array is countable, this can generate a warning on php versions after 7.2. + * + * @param Countable|array $array + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function maxCount($array, $max, $message = '') + { + if (\count($array) > $max) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array to contain at most %2$d elements. Got: %d', + \count($array), + $max + )); + } + } + + /** + * Does not check if $array is countable, this can generate a warning on php versions after 7.2. + * + * @param Countable|array $array + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function countBetween($array, $min, $max, $message = '') + { + $count = \count($array); + + if ($count < $min || $count > $max) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Expected an array to contain between %2$d and %3$d elements. Got: %d', + $count, + $min, + $max + )); + } + } + + /** + * @psalm-pure + * @psalm-assert list $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isList($array, $message = '') + { + if (!\is_array($array) || $array !== \array_values($array)) { + static::reportInvalidArgument( + $message ?: 'Expected list - non-associative array.' + ); + } + } + + /** + * @psalm-pure + * @psalm-assert non-empty-list $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isNonEmptyList($array, $message = '') + { + static::isList($array, $message); + static::notEmpty($array, $message); + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param mixed|array $array + * @psalm-assert array $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isMap($array, $message = '') + { + if ( + !\is_array($array) || + \array_keys($array) !== \array_filter(\array_keys($array), '\is_string') + ) { + static::reportInvalidArgument( + $message ?: 'Expected map - associative array with string keys.' + ); + } + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param mixed|array $array + * @psalm-assert array $array + * @psalm-assert !empty $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function isNonEmptyMap($array, $message = '') + { + static::isMap($array, $message); + static::notEmpty($array, $message); + } + + /** + * @psalm-pure + * + * @param string $value + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function uuid($value, $message = '') + { + $value = \str_replace(array('urn:', 'uuid:', '{', '}'), '', $value); + + // The nil UUID is special form of UUID that is specified to have all + // 128 bits set to zero. + if ('00000000-0000-0000-0000-000000000000' === $value) { + return; + } + + if (!\preg_match('/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/', $value)) { + static::reportInvalidArgument(\sprintf( + $message ?: 'Value %s is not a valid UUID.', + static::valueToString($value) + )); + } + } + + /** + * @psalm-param class-string $class + * + * @param Closure $expression + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + */ + public static function throws(Closure $expression, $class = 'Exception', $message = '') + { + static::string($class); + + $actual = 'none'; + + try { + $expression(); + } catch (Exception $e) { + $actual = \get_class($e); + if ($e instanceof $class) { + return; + } + } catch (Throwable $e) { + $actual = \get_class($e); + if ($e instanceof $class) { + return; + } + } + + static::reportInvalidArgument($message ?: \sprintf( + 'Expected to throw "%s", got "%s"', + $class, + $actual + )); + } + + /** + * @throws BadMethodCallException + */ + public static function __callStatic($name, $arguments) + { + if ('nullOr' === \substr($name, 0, 6)) { + if (null !== $arguments[0]) { + $method = \lcfirst(\substr($name, 6)); + \call_user_func_array(array('static', $method), $arguments); + } + + return; + } + + if ('all' === \substr($name, 0, 3)) { + static::isIterable($arguments[0]); + + $method = \lcfirst(\substr($name, 3)); + $args = $arguments; + + foreach ($arguments[0] as $entry) { + $args[0] = $entry; + + \call_user_func_array(array('static', $method), $args); + } + + return; + } + + throw new BadMethodCallException('No such method: '.$name); + } + + /** + * @param mixed $value + * + * @return string + */ + protected static function valueToString($value) + { + if (null === $value) { + return 'null'; + } + + if (true === $value) { + return 'true'; + } + + if (false === $value) { + return 'false'; + } + + if (\is_array($value)) { + return 'array'; + } + + if (\is_object($value)) { + if (\method_exists($value, '__toString')) { + return \get_class($value).': '.self::valueToString($value->__toString()); + } + + if ($value instanceof DateTime || $value instanceof DateTimeImmutable) { + return \get_class($value).': '.self::valueToString($value->format('c')); + } + + return \get_class($value); + } + + if (\is_resource($value)) { + return 'resource'; + } + + if (\is_string($value)) { + return '"'.$value.'"'; + } + + return (string) $value; + } + + /** + * @param mixed $value + * + * @return string + */ + protected static function typeToString($value) + { + return \is_object($value) ? \get_class($value) : \gettype($value); + } + + protected static function strlen($value) + { + if (!\function_exists('mb_detect_encoding')) { + return \strlen($value); + } + + if (false === $encoding = \mb_detect_encoding($value)) { + return \strlen($value); + } + + return \mb_strlen($value, $encoding); + } + + /** + * @param string $message + * + * @throws InvalidArgumentException + * + * @psalm-pure this method is not supposed to perform side-effects + */ + protected static function reportInvalidArgument($message) + { + throw new InvalidArgumentException($message); + } + + private function __construct() + { + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/InvalidArgumentException.php b/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/InvalidArgumentException.php new file mode 100644 index 0000000..9d95a58 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/InvalidArgumentException.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Webmozart\Assert; + +class InvalidArgumentException extends \InvalidArgumentException +{ +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Mixin.php b/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Mixin.php new file mode 100644 index 0000000..5e98823 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Mixin.php @@ -0,0 +1,2916 @@ + $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allString($value, $message = '') + { + static::__callStatic('allString', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert non-empty-string|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrStringNotEmpty($value, $message = '') + { + static::__callStatic('nullOrStringNotEmpty', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allStringNotEmpty($value, $message = '') + { + static::__callStatic('allStringNotEmpty', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert int|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrInteger($value, $message = '') + { + static::__callStatic('nullOrInteger', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allInteger($value, $message = '') + { + static::__callStatic('allInteger', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert numeric|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIntegerish($value, $message = '') + { + static::__callStatic('nullOrIntegerish', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIntegerish($value, $message = '') + { + static::__callStatic('allIntegerish', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert positive-int|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrPositiveInteger($value, $message = '') + { + static::__callStatic('nullOrPositiveInteger', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allPositiveInteger($value, $message = '') + { + static::__callStatic('allPositiveInteger', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert float|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrFloat($value, $message = '') + { + static::__callStatic('nullOrFloat', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allFloat($value, $message = '') + { + static::__callStatic('allFloat', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert numeric|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNumeric($value, $message = '') + { + static::__callStatic('nullOrNumeric', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNumeric($value, $message = '') + { + static::__callStatic('allNumeric', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert positive-int|0|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNatural($value, $message = '') + { + static::__callStatic('nullOrNatural', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNatural($value, $message = '') + { + static::__callStatic('allNatural', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert bool|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrBoolean($value, $message = '') + { + static::__callStatic('nullOrBoolean', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allBoolean($value, $message = '') + { + static::__callStatic('allBoolean', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert scalar|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrScalar($value, $message = '') + { + static::__callStatic('nullOrScalar', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allScalar($value, $message = '') + { + static::__callStatic('allScalar', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert object|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrObject($value, $message = '') + { + static::__callStatic('nullOrObject', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allObject($value, $message = '') + { + static::__callStatic('allObject', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert resource|null $value + * + * @param mixed $value + * @param string|null $type type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrResource($value, $type = null, $message = '') + { + static::__callStatic('nullOrResource', array($value, $type, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string|null $type type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allResource($value, $type = null, $message = '') + { + static::__callStatic('allResource', array($value, $type, $message)); + } + + /** + * @psalm-pure + * @psalm-assert callable|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsCallable($value, $message = '') + { + static::__callStatic('nullOrIsCallable', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsCallable($value, $message = '') + { + static::__callStatic('allIsCallable', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert array|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsArray($value, $message = '') + { + static::__callStatic('nullOrIsArray', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsArray($value, $message = '') + { + static::__callStatic('allIsArray', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable|null $value + * + * @deprecated use "isIterable" or "isInstanceOf" instead + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsTraversable($value, $message = '') + { + static::__callStatic('nullOrIsTraversable', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @deprecated use "isIterable" or "isInstanceOf" instead + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsTraversable($value, $message = '') + { + static::__callStatic('allIsTraversable', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert array|ArrayAccess|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsArrayAccessible($value, $message = '') + { + static::__callStatic('nullOrIsArrayAccessible', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsArrayAccessible($value, $message = '') + { + static::__callStatic('allIsArrayAccessible', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert countable|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsCountable($value, $message = '') + { + static::__callStatic('nullOrIsCountable', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsCountable($value, $message = '') + { + static::__callStatic('allIsCountable', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsIterable($value, $message = '') + { + static::__callStatic('nullOrIsIterable', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsIterable($value, $message = '') + { + static::__callStatic('allIsIterable', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * @psalm-assert ExpectedType|null $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsInstanceOf($value, $class, $message = '') + { + static::__callStatic('nullOrIsInstanceOf', array($value, $class, $message)); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsInstanceOf($value, $class, $message = '') + { + static::__callStatic('allIsInstanceOf', array($value, $class, $message)); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotInstanceOf($value, $class, $message = '') + { + static::__callStatic('nullOrNotInstanceOf', array($value, $class, $message)); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotInstanceOf($value, $class, $message = '') + { + static::__callStatic('allNotInstanceOf', array($value, $class, $message)); + } + + /** + * @psalm-pure + * @psalm-param array $classes + * + * @param mixed $value + * @param array $classes + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsInstanceOfAny($value, $classes, $message = '') + { + static::__callStatic('nullOrIsInstanceOfAny', array($value, $classes, $message)); + } + + /** + * @psalm-pure + * @psalm-param array $classes + * + * @param mixed $value + * @param array $classes + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsInstanceOfAny($value, $classes, $message = '') + { + static::__callStatic('allIsInstanceOfAny', array($value, $classes, $message)); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * @psalm-assert ExpectedType|class-string|null $value + * + * @param object|string|null $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsAOf($value, $class, $message = '') + { + static::__callStatic('nullOrIsAOf', array($value, $class, $message)); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * @psalm-assert iterable> $value + * + * @param iterable $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsAOf($value, $class, $message = '') + { + static::__callStatic('allIsAOf', array($value, $class, $message)); + } + + /** + * @psalm-pure + * @psalm-template UnexpectedType of object + * @psalm-param class-string $class + * + * @param object|string|null $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsNotA($value, $class, $message = '') + { + static::__callStatic('nullOrIsNotA', array($value, $class, $message)); + } + + /** + * @psalm-pure + * @psalm-template UnexpectedType of object + * @psalm-param class-string $class + * + * @param iterable $value + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsNotA($value, $class, $message = '') + { + static::__callStatic('allIsNotA', array($value, $class, $message)); + } + + /** + * @psalm-pure + * @psalm-param array $classes + * + * @param object|string|null $value + * @param string[] $classes + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsAnyOf($value, $classes, $message = '') + { + static::__callStatic('nullOrIsAnyOf', array($value, $classes, $message)); + } + + /** + * @psalm-pure + * @psalm-param array $classes + * + * @param iterable $value + * @param string[] $classes + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsAnyOf($value, $classes, $message = '') + { + static::__callStatic('allIsAnyOf', array($value, $classes, $message)); + } + + /** + * @psalm-pure + * @psalm-assert empty $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsEmpty($value, $message = '') + { + static::__callStatic('nullOrIsEmpty', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsEmpty($value, $message = '') + { + static::__callStatic('allIsEmpty', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotEmpty($value, $message = '') + { + static::__callStatic('nullOrNotEmpty', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotEmpty($value, $message = '') + { + static::__callStatic('allNotEmpty', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNull($value, $message = '') + { + static::__callStatic('allNull', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotNull($value, $message = '') + { + static::__callStatic('allNotNull', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert true|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrTrue($value, $message = '') + { + static::__callStatic('nullOrTrue', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allTrue($value, $message = '') + { + static::__callStatic('allTrue', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert false|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrFalse($value, $message = '') + { + static::__callStatic('nullOrFalse', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allFalse($value, $message = '') + { + static::__callStatic('allFalse', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotFalse($value, $message = '') + { + static::__callStatic('nullOrNotFalse', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotFalse($value, $message = '') + { + static::__callStatic('allNotFalse', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIp($value, $message = '') + { + static::__callStatic('nullOrIp', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIp($value, $message = '') + { + static::__callStatic('allIp', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIpv4($value, $message = '') + { + static::__callStatic('nullOrIpv4', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIpv4($value, $message = '') + { + static::__callStatic('allIpv4', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIpv6($value, $message = '') + { + static::__callStatic('nullOrIpv6', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIpv6($value, $message = '') + { + static::__callStatic('allIpv6', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrEmail($value, $message = '') + { + static::__callStatic('nullOrEmail', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allEmail($value, $message = '') + { + static::__callStatic('allEmail', array($value, $message)); + } + + /** + * @param array|null $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrUniqueValues($values, $message = '') + { + static::__callStatic('nullOrUniqueValues', array($values, $message)); + } + + /** + * @param iterable $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allUniqueValues($values, $message = '') + { + static::__callStatic('allUniqueValues', array($values, $message)); + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrEq($value, $expect, $message = '') + { + static::__callStatic('nullOrEq', array($value, $expect, $message)); + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allEq($value, $expect, $message = '') + { + static::__callStatic('allEq', array($value, $expect, $message)); + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotEq($value, $expect, $message = '') + { + static::__callStatic('nullOrNotEq', array($value, $expect, $message)); + } + + /** + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotEq($value, $expect, $message = '') + { + static::__callStatic('allNotEq', array($value, $expect, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrSame($value, $expect, $message = '') + { + static::__callStatic('nullOrSame', array($value, $expect, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allSame($value, $expect, $message = '') + { + static::__callStatic('allSame', array($value, $expect, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotSame($value, $expect, $message = '') + { + static::__callStatic('nullOrNotSame', array($value, $expect, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $expect + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotSame($value, $expect, $message = '') + { + static::__callStatic('allNotSame', array($value, $expect, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrGreaterThan($value, $limit, $message = '') + { + static::__callStatic('nullOrGreaterThan', array($value, $limit, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allGreaterThan($value, $limit, $message = '') + { + static::__callStatic('allGreaterThan', array($value, $limit, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrGreaterThanEq($value, $limit, $message = '') + { + static::__callStatic('nullOrGreaterThanEq', array($value, $limit, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allGreaterThanEq($value, $limit, $message = '') + { + static::__callStatic('allGreaterThanEq', array($value, $limit, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrLessThan($value, $limit, $message = '') + { + static::__callStatic('nullOrLessThan', array($value, $limit, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allLessThan($value, $limit, $message = '') + { + static::__callStatic('allLessThan', array($value, $limit, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrLessThanEq($value, $limit, $message = '') + { + static::__callStatic('nullOrLessThanEq', array($value, $limit, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $limit + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allLessThanEq($value, $limit, $message = '') + { + static::__callStatic('allLessThanEq', array($value, $limit, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $min + * @param mixed $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrRange($value, $min, $max, $message = '') + { + static::__callStatic('nullOrRange', array($value, $min, $max, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param mixed $min + * @param mixed $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allRange($value, $min, $max, $message = '') + { + static::__callStatic('allRange', array($value, $min, $max, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrOneOf($value, $values, $message = '') + { + static::__callStatic('nullOrOneOf', array($value, $values, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allOneOf($value, $values, $message = '') + { + static::__callStatic('allOneOf', array($value, $values, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrInArray($value, $values, $message = '') + { + static::__callStatic('nullOrInArray', array($value, $values, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param array $values + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allInArray($value, $values, $message = '') + { + static::__callStatic('allInArray', array($value, $values, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrContains($value, $subString, $message = '') + { + static::__callStatic('nullOrContains', array($value, $subString, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allContains($value, $subString, $message = '') + { + static::__callStatic('allContains', array($value, $subString, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotContains($value, $subString, $message = '') + { + static::__callStatic('nullOrNotContains', array($value, $subString, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $subString + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotContains($value, $subString, $message = '') + { + static::__callStatic('allNotContains', array($value, $subString, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotWhitespaceOnly($value, $message = '') + { + static::__callStatic('nullOrNotWhitespaceOnly', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotWhitespaceOnly($value, $message = '') + { + static::__callStatic('allNotWhitespaceOnly', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrStartsWith($value, $prefix, $message = '') + { + static::__callStatic('nullOrStartsWith', array($value, $prefix, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allStartsWith($value, $prefix, $message = '') + { + static::__callStatic('allStartsWith', array($value, $prefix, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotStartsWith($value, $prefix, $message = '') + { + static::__callStatic('nullOrNotStartsWith', array($value, $prefix, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $prefix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotStartsWith($value, $prefix, $message = '') + { + static::__callStatic('allNotStartsWith', array($value, $prefix, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrStartsWithLetter($value, $message = '') + { + static::__callStatic('nullOrStartsWithLetter', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allStartsWithLetter($value, $message = '') + { + static::__callStatic('allStartsWithLetter', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrEndsWith($value, $suffix, $message = '') + { + static::__callStatic('nullOrEndsWith', array($value, $suffix, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allEndsWith($value, $suffix, $message = '') + { + static::__callStatic('allEndsWith', array($value, $suffix, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotEndsWith($value, $suffix, $message = '') + { + static::__callStatic('nullOrNotEndsWith', array($value, $suffix, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $suffix + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotEndsWith($value, $suffix, $message = '') + { + static::__callStatic('allNotEndsWith', array($value, $suffix, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrRegex($value, $pattern, $message = '') + { + static::__callStatic('nullOrRegex', array($value, $pattern, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allRegex($value, $pattern, $message = '') + { + static::__callStatic('allRegex', array($value, $pattern, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrNotRegex($value, $pattern, $message = '') + { + static::__callStatic('nullOrNotRegex', array($value, $pattern, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $pattern + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allNotRegex($value, $pattern, $message = '') + { + static::__callStatic('allNotRegex', array($value, $pattern, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrUnicodeLetters($value, $message = '') + { + static::__callStatic('nullOrUnicodeLetters', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allUnicodeLetters($value, $message = '') + { + static::__callStatic('allUnicodeLetters', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrAlpha($value, $message = '') + { + static::__callStatic('nullOrAlpha', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allAlpha($value, $message = '') + { + static::__callStatic('allAlpha', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrDigits($value, $message = '') + { + static::__callStatic('nullOrDigits', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allDigits($value, $message = '') + { + static::__callStatic('allDigits', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrAlnum($value, $message = '') + { + static::__callStatic('nullOrAlnum', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allAlnum($value, $message = '') + { + static::__callStatic('allAlnum', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert lowercase-string|null $value + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrLower($value, $message = '') + { + static::__callStatic('nullOrLower', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param iterable $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allLower($value, $message = '') + { + static::__callStatic('allLower', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrUpper($value, $message = '') + { + static::__callStatic('nullOrUpper', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allUpper($value, $message = '') + { + static::__callStatic('allUpper', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param int $length + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrLength($value, $length, $message = '') + { + static::__callStatic('nullOrLength', array($value, $length, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param int $length + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allLength($value, $length, $message = '') + { + static::__callStatic('allLength', array($value, $length, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMinLength($value, $min, $message = '') + { + static::__callStatic('nullOrMinLength', array($value, $min, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMinLength($value, $min, $message = '') + { + static::__callStatic('allMinLength', array($value, $min, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMaxLength($value, $max, $message = '') + { + static::__callStatic('nullOrMaxLength', array($value, $max, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMaxLength($value, $max, $message = '') + { + static::__callStatic('allMaxLength', array($value, $max, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrLengthBetween($value, $min, $max, $message = '') + { + static::__callStatic('nullOrLengthBetween', array($value, $min, $max, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allLengthBetween($value, $min, $max, $message = '') + { + static::__callStatic('allLengthBetween', array($value, $min, $max, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrFileExists($value, $message = '') + { + static::__callStatic('nullOrFileExists', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allFileExists($value, $message = '') + { + static::__callStatic('allFileExists', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrFile($value, $message = '') + { + static::__callStatic('nullOrFile', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allFile($value, $message = '') + { + static::__callStatic('allFile', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrDirectory($value, $message = '') + { + static::__callStatic('nullOrDirectory', array($value, $message)); + } + + /** + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allDirectory($value, $message = '') + { + static::__callStatic('allDirectory', array($value, $message)); + } + + /** + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrReadable($value, $message = '') + { + static::__callStatic('nullOrReadable', array($value, $message)); + } + + /** + * @param iterable $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allReadable($value, $message = '') + { + static::__callStatic('allReadable', array($value, $message)); + } + + /** + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrWritable($value, $message = '') + { + static::__callStatic('nullOrWritable', array($value, $message)); + } + + /** + * @param iterable $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allWritable($value, $message = '') + { + static::__callStatic('allWritable', array($value, $message)); + } + + /** + * @psalm-assert class-string|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrClassExists($value, $message = '') + { + static::__callStatic('nullOrClassExists', array($value, $message)); + } + + /** + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allClassExists($value, $message = '') + { + static::__callStatic('allClassExists', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * @psalm-assert class-string|ExpectedType|null $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrSubclassOf($value, $class, $message = '') + { + static::__callStatic('nullOrSubclassOf', array($value, $class, $message)); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $class + * @psalm-assert iterable|ExpectedType> $value + * + * @param mixed $value + * @param string|object $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allSubclassOf($value, $class, $message = '') + { + static::__callStatic('allSubclassOf', array($value, $class, $message)); + } + + /** + * @psalm-assert class-string|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrInterfaceExists($value, $message = '') + { + static::__callStatic('nullOrInterfaceExists', array($value, $message)); + } + + /** + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allInterfaceExists($value, $message = '') + { + static::__callStatic('allInterfaceExists', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $interface + * @psalm-assert class-string|null $value + * + * @param mixed $value + * @param mixed $interface + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrImplementsInterface($value, $interface, $message = '') + { + static::__callStatic('nullOrImplementsInterface', array($value, $interface, $message)); + } + + /** + * @psalm-pure + * @psalm-template ExpectedType of object + * @psalm-param class-string $interface + * @psalm-assert iterable> $value + * + * @param mixed $value + * @param mixed $interface + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allImplementsInterface($value, $interface, $message = '') + { + static::__callStatic('allImplementsInterface', array($value, $interface, $message)); + } + + /** + * @psalm-pure + * @psalm-param class-string|object|null $classOrObject + * + * @param string|object|null $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrPropertyExists($classOrObject, $property, $message = '') + { + static::__callStatic('nullOrPropertyExists', array($classOrObject, $property, $message)); + } + + /** + * @psalm-pure + * @psalm-param iterable $classOrObject + * + * @param iterable $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allPropertyExists($classOrObject, $property, $message = '') + { + static::__callStatic('allPropertyExists', array($classOrObject, $property, $message)); + } + + /** + * @psalm-pure + * @psalm-param class-string|object|null $classOrObject + * + * @param string|object|null $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrPropertyNotExists($classOrObject, $property, $message = '') + { + static::__callStatic('nullOrPropertyNotExists', array($classOrObject, $property, $message)); + } + + /** + * @psalm-pure + * @psalm-param iterable $classOrObject + * + * @param iterable $classOrObject + * @param mixed $property + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allPropertyNotExists($classOrObject, $property, $message = '') + { + static::__callStatic('allPropertyNotExists', array($classOrObject, $property, $message)); + } + + /** + * @psalm-pure + * @psalm-param class-string|object|null $classOrObject + * + * @param string|object|null $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMethodExists($classOrObject, $method, $message = '') + { + static::__callStatic('nullOrMethodExists', array($classOrObject, $method, $message)); + } + + /** + * @psalm-pure + * @psalm-param iterable $classOrObject + * + * @param iterable $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMethodExists($classOrObject, $method, $message = '') + { + static::__callStatic('allMethodExists', array($classOrObject, $method, $message)); + } + + /** + * @psalm-pure + * @psalm-param class-string|object|null $classOrObject + * + * @param string|object|null $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMethodNotExists($classOrObject, $method, $message = '') + { + static::__callStatic('nullOrMethodNotExists', array($classOrObject, $method, $message)); + } + + /** + * @psalm-pure + * @psalm-param iterable $classOrObject + * + * @param iterable $classOrObject + * @param mixed $method + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMethodNotExists($classOrObject, $method, $message = '') + { + static::__callStatic('allMethodNotExists', array($classOrObject, $method, $message)); + } + + /** + * @psalm-pure + * + * @param array|null $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrKeyExists($array, $key, $message = '') + { + static::__callStatic('nullOrKeyExists', array($array, $key, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allKeyExists($array, $key, $message = '') + { + static::__callStatic('allKeyExists', array($array, $key, $message)); + } + + /** + * @psalm-pure + * + * @param array|null $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrKeyNotExists($array, $key, $message = '') + { + static::__callStatic('nullOrKeyNotExists', array($array, $key, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $array + * @param string|int $key + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allKeyNotExists($array, $key, $message = '') + { + static::__callStatic('allKeyNotExists', array($array, $key, $message)); + } + + /** + * @psalm-pure + * @psalm-assert array-key|null $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrValidArrayKey($value, $message = '') + { + static::__callStatic('nullOrValidArrayKey', array($value, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $value + * + * @param mixed $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allValidArrayKey($value, $message = '') + { + static::__callStatic('allValidArrayKey', array($value, $message)); + } + + /** + * @param Countable|array|null $array + * @param int $number + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrCount($array, $number, $message = '') + { + static::__callStatic('nullOrCount', array($array, $number, $message)); + } + + /** + * @param iterable $array + * @param int $number + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allCount($array, $number, $message = '') + { + static::__callStatic('allCount', array($array, $number, $message)); + } + + /** + * @param Countable|array|null $array + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMinCount($array, $min, $message = '') + { + static::__callStatic('nullOrMinCount', array($array, $min, $message)); + } + + /** + * @param iterable $array + * @param int|float $min + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMinCount($array, $min, $message = '') + { + static::__callStatic('allMinCount', array($array, $min, $message)); + } + + /** + * @param Countable|array|null $array + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrMaxCount($array, $max, $message = '') + { + static::__callStatic('nullOrMaxCount', array($array, $max, $message)); + } + + /** + * @param iterable $array + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allMaxCount($array, $max, $message = '') + { + static::__callStatic('allMaxCount', array($array, $max, $message)); + } + + /** + * @param Countable|array|null $array + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrCountBetween($array, $min, $max, $message = '') + { + static::__callStatic('nullOrCountBetween', array($array, $min, $max, $message)); + } + + /** + * @param iterable $array + * @param int|float $min + * @param int|float $max + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allCountBetween($array, $min, $max, $message = '') + { + static::__callStatic('allCountBetween', array($array, $min, $max, $message)); + } + + /** + * @psalm-pure + * @psalm-assert list|null $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsList($array, $message = '') + { + static::__callStatic('nullOrIsList', array($array, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsList($array, $message = '') + { + static::__callStatic('allIsList', array($array, $message)); + } + + /** + * @psalm-pure + * @psalm-assert non-empty-list|null $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsNonEmptyList($array, $message = '') + { + static::__callStatic('nullOrIsNonEmptyList', array($array, $message)); + } + + /** + * @psalm-pure + * @psalm-assert iterable $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsNonEmptyList($array, $message = '') + { + static::__callStatic('allIsNonEmptyList', array($array, $message)); + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param mixed|array|null $array + * @psalm-assert array|null $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsMap($array, $message = '') + { + static::__callStatic('nullOrIsMap', array($array, $message)); + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param iterable> $array + * @psalm-assert iterable> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsMap($array, $message = '') + { + static::__callStatic('allIsMap', array($array, $message)); + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param mixed|array|null $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrIsNonEmptyMap($array, $message = '') + { + static::__callStatic('nullOrIsNonEmptyMap', array($array, $message)); + } + + /** + * @psalm-pure + * @psalm-template T + * @psalm-param iterable> $array + * + * @param mixed $array + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allIsNonEmptyMap($array, $message = '') + { + static::__callStatic('allIsNonEmptyMap', array($array, $message)); + } + + /** + * @psalm-pure + * + * @param string|null $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrUuid($value, $message = '') + { + static::__callStatic('nullOrUuid', array($value, $message)); + } + + /** + * @psalm-pure + * + * @param iterable $value + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allUuid($value, $message = '') + { + static::__callStatic('allUuid', array($value, $message)); + } + + /** + * @psalm-param class-string $class + * + * @param Closure|null $expression + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function nullOrThrows($expression, $class = 'Exception', $message = '') + { + static::__callStatic('nullOrThrows', array($expression, $class, $message)); + } + + /** + * @psalm-param class-string $class + * + * @param iterable $expression + * @param string $class + * @param string $message + * + * @throws InvalidArgumentException + * + * @return void + */ + public static function allThrows($expression, $class = 'Exception', $message = '') + { + static::__callStatic('allThrows', array($expression, $class, $message)); + } +} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/CHANGELOG.md new file mode 100644 index 0000000..aa6bc88 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/CHANGELOG.md @@ -0,0 +1,732 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [v1.2.13] + +### Changed + +- [e96314f](https://github.com/williamdes/mariadb-mysql-kbs/commit/e96314f47373a45c1829a91d1cd5fa574343ea4a) update: [MariaDB] && [MySQL] updates +- [d4cbcc7](https://github.com/williamdes/mariadb-mysql-kbs/commit/d4cbcc7acf033e7cf4a22aeda749f9870e2d1beb) update: [MariaDB] updates +- [6d0aed2](https://github.com/williamdes/mariadb-mysql-kbs/commit/6d0aed2a94f4247655cc1ccbd47a1950abac6eb3) update: [MariaDB] && [MySQL] updates +- [6646d76](https://github.com/williamdes/mariadb-mysql-kbs/commit/6646d764c62136474f0ffaa42ba7bb1a324f3c0f) update: [MySQL] updates +- [be98073](https://github.com/williamdes/mariadb-mysql-kbs/commit/be9807377b13d08ed6998ae185400d27686f4f38) update: [MariaDB] && [MySQL] updates +- [f6fd5f6](https://github.com/williamdes/mariadb-mysql-kbs/commit/f6fd5f6a2f06d4116266833b3f68d7a8a1d10be6) update: [MariaDB] && [MySQL] updates +- [cb8f850](https://github.com/williamdes/mariadb-mysql-kbs/commit/cb8f850bb4cf0b9619986313696d476aad53e8ee) update: [MariaDB] updates +- [05e1883](https://github.com/williamdes/mariadb-mysql-kbs/commit/05e18834cbd44f544d8a131a477f90af9df439f0) update: [MariaDB] updates +- [15deeb9](https://github.com/williamdes/mariadb-mysql-kbs/commit/15deeb9672cb3309adcdd7b2554e5abb5e6ebc56) update: [MySQL] updates +- [1a8bf0a](https://github.com/williamdes/mariadb-mysql-kbs/commit/1a8bf0a2c31013b3bcf11f0862ef0e39f5b9ba74) update: [MariaDB] updates +- [90a0b26](https://github.com/williamdes/mariadb-mysql-kbs/commit/90a0b26638e67e32e230a1a1022878dbe8e7dd35) update: [MariaDB] && [MySQL] updates +- [50ab914](https://github.com/williamdes/mariadb-mysql-kbs/commit/50ab914b6df67ce5a4d63121bd8b1772bcadf872) update: [MariaDB] && [MySQL] updates +- [4b57142](https://github.com/williamdes/mariadb-mysql-kbs/commit/4b57142e4705617280ad3da9729240348b494f90) update: [MySQL] updates +- [daa313e](https://github.com/williamdes/mariadb-mysql-kbs/commit/daa313ea4fc19400ddc6fb5350dc79daf85d1a21) update: [MySQL] updates +- [1f02417](https://github.com/williamdes/mariadb-mysql-kbs/commit/1f024175e0deb70eff34e36d7305b58c0cef68d4) update: [MySQL] updates +- [bc011b7](https://github.com/williamdes/mariadb-mysql-kbs/commit/bc011b7ea4f36b10de81c4f58f55b6ff079ff2e2) update: [MariaDB] updates +- [925f01f](https://github.com/williamdes/mariadb-mysql-kbs/commit/925f01fd8dae8f8e4a72e680bce6223f1ab1084b) update: [MariaDB] updates +- [1eb110b](https://github.com/williamdes/mariadb-mysql-kbs/commit/1eb110b8c9238a88d406f0e232d63d8aa3d18053) update: [MariaDB] && [MySQL] updates +- [886d599](https://github.com/williamdes/mariadb-mysql-kbs/commit/886d599fb4ecd2e886629c177b2f9815c1fae957) update: [MariaDB] && [MySQL] updates +- [fbc1e98](https://github.com/williamdes/mariadb-mysql-kbs/commit/fbc1e98d0c4b98506b03ee30b60ee08fdbbe9440) update: [MySQL] updates +- [4726cd1](https://github.com/williamdes/mariadb-mysql-kbs/commit/4726cd1c799e3dad815f7113f3e62a7f383a7f40) update: [MariaDB] && [MySQL] updates +- [b7bc2db](https://github.com/williamdes/mariadb-mysql-kbs/commit/b7bc2dbf779c55c13f804a1cc4ce459e46f0e3e0) update: [MariaDB] && [MySQL] updates +- [ef773a7](https://github.com/williamdes/mariadb-mysql-kbs/commit/ef773a7a118e275b98b57cf18d0ad6cbfe514def) update: [MariaDB] && [MySQL] updates +- [9837411](https://github.com/williamdes/mariadb-mysql-kbs/commit/9837411eedb53b0cb61047699ad7081480f9c458) update: [MariaDB] && [MySQL] updates +- [1da68a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/1da68a28fcbcf1f9fa9f886aab84526b0408424b) update: [MySQL] updates +- [8b290ce](https://github.com/williamdes/mariadb-mysql-kbs/commit/8b290ce7109586eca5a259f63cda60551da8ab61) update: [MySQL] updates +- [9a30263](https://github.com/williamdes/mariadb-mysql-kbs/commit/9a302637313e79c392467e28c925a39ab573b61d) update: [MySQL] updates +- [a1fbb55](https://github.com/williamdes/mariadb-mysql-kbs/commit/a1fbb55335510afabfe1b544564f24639ad6f668) update: [MySQL] updates + +### Fixed + +- [a402856](https://github.com/williamdes/mariadb-mysql-kbs/commit/a4028565d062339f18a504f39c61cfa04a962802) fix: exclude merge.php from Doctum +- [c69d529](https://github.com/williamdes/mariadb-mysql-kbs/commit/c69d5296b09e7a5478b23d00ab865e3b3564a0cd) fix: cleanup the accepted values for an enum +- [2104623](https://github.com/williamdes/mariadb-mysql-kbs/commit/21046232efaa4f5ec355477fe50b0dab19a44ca2) fix: MariaDb enum values without a code tag +- [66c6992](https://github.com/williamdes/mariadb-mysql-kbs/commit/66c69927e3945cdc65f7919e7a757bd50dfe75c3) fix: create PR script install in "/usr/local/bin" +- [4f10b0e](https://github.com/williamdes/mariadb-mysql-kbs/commit/4f10b0eb4f2551fa1d2643fead412bb8b6f9dd2d) fix: yarn binary path +- [de8ef42](https://github.com/williamdes/mariadb-mysql-kbs/commit/de8ef42628bcfeb04627aa850783d88d82046ba6) fix: binary path for sudo-bot +- [c1528ea](https://github.com/williamdes/mariadb-mysql-kbs/commit/c1528ea35b0838ceefc18dbbf82141848a8c0213) fix: coding standard migration mistake +- [de8945b](https://github.com/williamdes/mariadb-mysql-kbs/commit/de8945b622f3360245784f7fa7653537c72b592b) fix: data URLs +- [0f31076](https://github.com/williamdes/mariadb-mysql-kbs/commit/0f31076dae1ebe2af5c13521e6a2031bc2381f14) fix: do not try to match another scope than global or session for MariaDB + +### Improvements + +- [0e7508c](https://github.com/williamdes/mariadb-mysql-kbs/commit/0e7508c01dfc6bb783032345007cab8b2bdbb603) style: stop using old array syntax +- [2784c48](https://github.com/williamdes/mariadb-mysql-kbs/commit/2784c48571fb629758f821bef07e55729efcf98c) style: coding standard fixes and ignore for tests +- [ce5e57b](https://github.com/williamdes/mariadb-mysql-kbs/commit/ce5e57b79cf9fb7e7960dcef6bd0df94c58162c4) style: run prettier +- [daeec8f](https://github.com/williamdes/mariadb-mysql-kbs/commit/daeec8f36ab548854fc035fed214d2887f563a34) style: migrate to wdes/coding-standard and composer json cleanup + +### Features + +- [1b8f387](https://github.com/williamdes/mariadb-mysql-kbs/commit/1b8f3874c595b9ee5991041c4926ce062e80bef4) feat: pass phpstan v1 max level +- [0273dbf](https://github.com/williamdes/mariadb-mysql-kbs/commit/0273dbfdfa6c7b808954235fd40c9897ad8ad121) feat: simplify PHP 8 composer installs +- [7c6a94e](https://github.com/williamdes/mariadb-mysql-kbs/commit/7c6a94e557d593b2cd168a462c43dbbac2b1b52c) feat: add new S3 data file +- [29960a3](https://github.com/williamdes/mariadb-mysql-kbs/commit/29960a349e49bb6be5e299593f6dd6829cae5a25) feat: add new data sets + +### Documentation + +- [b0af14e](https://github.com/williamdes/mariadb-mysql-kbs/commit/b0af14ef9e78259da65be9fc3756013fe50dc7b4) docs: update CHANGELOG +- [41631bf](https://github.com/williamdes/mariadb-mysql-kbs/commit/41631bf402f20242aa55e2f2815488dafe9508de) docs: add FUNDING and SECURITY +- [474885d](https://github.com/williamdes/mariadb-mysql-kbs/commit/474885d4eb22a3bab8e81b72dd7cf002a5723c29) docs: update docs submodule + +### Others + +- [5a708dd](https://github.com/williamdes/mariadb-mysql-kbs/commit/5a708ddd0d444fde62eee557350677ffb538ea23) chore: do not try to change version in composer.json +- [b492531](https://github.com/williamdes/mariadb-mysql-kbs/commit/b492531f6ee0eb067ef6cea95b7039729d8acd8d) ci: set back coverage to xdebug for PHP 7.1 +- [095d6bf](https://github.com/williamdes/mariadb-mysql-kbs/commit/095d6bfbd2bd71665959d824f2edfdfa667da6a2) ci: set PHP 8.1 as a normal tested version and nightly as an experimental version +- [848c359](https://github.com/williamdes/mariadb-mysql-kbs/commit/848c359c933f90568ff65ce4a6efb9267430c968) chore: ignore composer.lock +- [7f56820](https://github.com/williamdes/mariadb-mysql-kbs/commit/7f5682015cb6728ab7871da69d92e49a112ed213) chore: remove version field from composer.json +- [ed98920](https://github.com/williamdes/mariadb-mysql-kbs/commit/ed98920339eecdae90c986a6c7dc8e11337add96) chore: upgrade phpstan to ^1.2.0 +- [4dc14cd](https://github.com/williamdes/mariadb-mysql-kbs/commit/4dc14cd791e74e929274b6a276d8b8c80015a2a6) ci: do not require SKIP_DOCS_STEPS ENV +- [624b71e](https://github.com/williamdes/mariadb-mysql-kbs/commit/624b71e435557946d45ea387abe4d6bcf32f5a09) chore: update jshint, mocha, prettier +- [af0326c](https://github.com/williamdes/mariadb-mysql-kbs/commit/af0326c04ccefffed1f1bbe26c5f086387985883) ci: add new workflow environment names +- [2e6ae05](https://github.com/williamdes/mariadb-mysql-kbs/commit/2e6ae05b8fa1ba7ba8339ecb10a5baa09a112ae0) chore: update dependencies +- [a5a3627](https://github.com/williamdes/mariadb-mysql-kbs/commit/a5a36270c7a1423d404dbeb21257ed3556af0fc5) ci: fix workflow +- [12cb0c7](https://github.com/williamdes/mariadb-mysql-kbs/commit/12cb0c705abedc4f7eca992fc8e32c41dc68b905) ci: adjust lint and analyse CI config and run tests on PHP 8.1 +- [9c72287](https://github.com/williamdes/mariadb-mysql-kbs/commit/9c7228749af60ad40f2f522803a518bb21f54921) ci: test on node 12, 14, 15, 16 +- [6954d32](https://github.com/williamdes/mariadb-mysql-kbs/commit/6954d326fdda0b041396997112fe3c45a56541c2) chore: require node 12 +- [13bf7a5](https://github.com/williamdes/mariadb-mysql-kbs/commit/13bf7a53327c9b89a32ec95bdc27e2469f478a01) chore: upgrade jshint, mocha, prettier +- [e120770](https://github.com/williamdes/mariadb-mysql-kbs/commit/e12077002cae75b0ac2d3f5515ac6d7d21fca403) ci: remove sudo for pages build +- [8e31e3b](https://github.com/williamdes/mariadb-mysql-kbs/commit/8e31e3b5bdf748cc3454deed0c113fb37815b4df) ci: remove composer arguments +- [2552a4b](https://github.com/williamdes/mariadb-mysql-kbs/commit/2552a4b103ffcf73635c67150fff95f47696d061) ci: use different templates for each workflow +- [2944134](https://github.com/williamdes/mariadb-mysql-kbs/commit/294413447143adf4c4a525eec5327fba67d88124) ci: allow access to secrets +- [ca5bb42](https://github.com/williamdes/mariadb-mysql-kbs/commit/ca5bb42fd68d0ba38b761f75368af6e3c3364618) ci: handle non docs workflow +- [3cc68cb](https://github.com/williamdes/mariadb-mysql-kbs/commit/3cc68cb8c8f2a7365a78d710e8087d704107b5a7) ci: fix NodeJs not expanding ~ of paths +- [852e2c3](https://github.com/williamdes/mariadb-mysql-kbs/commit/852e2c3f7fc13729b7a91800a5718d8725b295a5) ci: fix build process missing files +- [80eb36d](https://github.com/williamdes/mariadb-mysql-kbs/commit/80eb36dcdf817da45c7a392d7a268cb9dcfc0eaa) ci: use non relative paths for some file arguments on sudo-bot +- [61263ca](https://github.com/williamdes/mariadb-mysql-kbs/commit/61263ca257ead278e377748bce45ed9fb8f2d25f) ci: fix secret for sudo-bot GPG passphrase +- [547e15e](https://github.com/williamdes/mariadb-mysql-kbs/commit/547e15ece69560a45556916edc7e7a58d99ce576) ci: remove duplicates lines on the sudo-bot script That simple..., wtf keyboard what did you do /o\ +- [a208602](https://github.com/williamdes/mariadb-mysql-kbs/commit/a2086022e8c68c151fcc0cf29753e2aa0430cf1d) ci: add more debugs for sudo-bot script What is wrong ? :/ +- [c8255a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/c8255a254c6fc782a86ce8a62050662558914628) ci: fix sudo-bot, use bash instead of sh +- [3f0f318](https://github.com/williamdes/mariadb-mysql-kbs/commit/3f0f3185a346292a16ee71e0f9b9db4279545e0b) ci: debug command line issue +- [fa11e54](https://github.com/williamdes/mariadb-mysql-kbs/commit/fa11e54d410ba435f660afed58ee80d275b4be18) ci: use bash equals for sudo-bot +- [4329113](https://github.com/williamdes/mariadb-mysql-kbs/commit/432911397912e4fd29d513058ed7be9b571c09a3) ci: fix move to root dir for API docs +- [373a22f](https://github.com/williamdes/mariadb-mysql-kbs/commit/373a22febd0253d04a5c6c656633878b49b08987) ci: rename cache to tmp +- [085abed](https://github.com/williamdes/mariadb-mysql-kbs/commit/085abeda4486d41ee274b5ee72b33fa11b14796c) ci: fetch all the repository to have the gh-pages branch available +- [43d7ecd](https://github.com/williamdes/mariadb-mysql-kbs/commit/43d7ecd45999b0720ca7bd9939c1c6727d00332a) ci: fix root dir path for sudo-bot docs +- [5cfd151](https://github.com/williamdes/mariadb-mysql-kbs/commit/5cfd151f09e78643ac42dc2c4029069eadd2ad8c) ci: make sudo-bot script executable +- [44293ad](https://github.com/williamdes/mariadb-mysql-kbs/commit/44293ad4f9bb3377c237e75f0d7591eec59963e6) ci: fix PHP documentation workflow +- [6b0f012](https://github.com/williamdes/mariadb-mysql-kbs/commit/6b0f012cfec344d8b49b7a3fb9e788d3e1f50a5f) ci: drop all the old sudo-bot process and re-build it +- [dcad6c8](https://github.com/williamdes/mariadb-mysql-kbs/commit/dcad6c83674b26f50885281bd03d51c3cade077b) ci: rename GPG_PRIV_PASSWORD ENV to GPG_PASSPHRASE +- [3ba3766](https://github.com/williamdes/mariadb-mysql-kbs/commit/3ba37668d67e29b31ac0f96c860d279464298f47) chore: upgrade chai and mocha +- [e48d0c0](https://github.com/williamdes/mariadb-mysql-kbs/commit/e48d0c01895a397198b6751fafd310420b15e575) ci: Update actions/checkout to v2 + +## [v1.2.12] + +### Changed + +- [b78197e](https://github.com/williamdes/mariadb-mysql-kbs/commit/b78197e1c16522c86fab4b23c8b75050efd27dd0) update: [MySQL] updates +- [537d185](https://github.com/williamdes/mariadb-mysql-kbs/commit/537d1853dbe02c175ad917f17bd1fbf852a7ff06) update: [MySQL] updates +- [1f7868b](https://github.com/williamdes/mariadb-mysql-kbs/commit/1f7868baba0df415ec7fb5e4358494127915bafe) update: [MariaDB] updates +- [fce5e6a](https://github.com/williamdes/mariadb-mysql-kbs/commit/fce5e6ab7c105d8e1b9493724ea942ee8aea84c3) update: [MariaDB] && [MySQL] updates +- [8aabb2b](https://github.com/williamdes/mariadb-mysql-kbs/commit/8aabb2b929f601a29645df0c8c55166f18e64a76) update: [MariaDB] && [MySQL] updates +- [deaa820](https://github.com/williamdes/mariadb-mysql-kbs/commit/deaa8204e46a2af4947489d348a58331367d5d94) update: [MariaDB] && [MySQL] updates +- [fd5e5de](https://github.com/williamdes/mariadb-mysql-kbs/commit/fd5e5de7c0019df37d905ae1e28ee4340d16cc51) update: 🤖 Some updates 🤖 +- [4278ad9](https://github.com/williamdes/mariadb-mysql-kbs/commit/4278ad9b212e6679d5c19d27d49f516f01f03863) update: [MariaDB] && [MySQL] updates +- [37a7156](https://github.com/williamdes/mariadb-mysql-kbs/commit/37a7156d2027122955fc8087b1d056f54dd1ca74) update: [MariaDB] && [MySQL] updates +- [74c152c](https://github.com/williamdes/mariadb-mysql-kbs/commit/74c152cc366fa0bd9fcdf5e774aa6a4002a52fa8) update: [MariaDB] updates +- [3b86e1f](https://github.com/williamdes/mariadb-mysql-kbs/commit/3b86e1f34a60651c071289b920bd52a6ad0bac4c) update: [MySQL] updates + +### Fixed + +- [a8a7893](https://github.com/williamdes/mariadb-mysql-kbs/commit/a8a78939ccad4937600d06364f265b79745b1b9a) fix: KBEntry::jsonSerialize phpdoc block +- [4d33f7e](https://github.com/williamdes/mariadb-mysql-kbs/commit/4d33f7eb822920e5336e64d0e8f4930e336257c9) fix: Rename master to source for MySQL replication options + +### Features + +- [2402554](https://github.com/williamdes/mariadb-mysql-kbs/commit/240255492c4f19a895e0422e8e509caecce27928) feat: improve release script +- [632dc1c](https://github.com/williamdes/mariadb-mysql-kbs/commit/632dc1cc09142588f5443c8d6c419215d233cb70) feat: update documentation submodule +- [c9bcc1c](https://github.com/williamdes/mariadb-mysql-kbs/commit/c9bcc1cacde7f2932e1015499b4fc277f6621e62) feat: improve API docs config + +### Others + +- [bba46a3](https://github.com/williamdes/mariadb-mysql-kbs/commit/bba46a3ac03b1d999786a4f1f0bb9de3c6f1d59c) ci: use sudo-bot/action-doctum +- [3550bd1](https://github.com/williamdes/mariadb-mysql-kbs/commit/3550bd164152a29e1bce45285f208d97032a2d4d) chore: update dependencies +- [35b9c29](https://github.com/williamdes/mariadb-mysql-kbs/commit/35b9c2998f2f8c2abd2c136836c157e5a0749755) ci: update lint and analyse workflows +- [7c08136](https://github.com/williamdes/mariadb-mysql-kbs/commit/7c08136d1042b62c50a076e4ecc4f2415576de02) chore: change php requirements to "^7.1 || ^8.0" +- [b48b3be](https://github.com/williamdes/mariadb-mysql-kbs/commit/b48b3bedd294dfb873f2992692ff8cf19b3d6924) chore: remove .gitignore from vendor bundles + +## [v1.2.11] + +### Changed + +- [749afd6](https://github.com/williamdes/mariadb-mysql-kbs/commit/749afd6b2dec8e203109628b3ee4d62d3ae5437a) update: [MariaDB] updates +- [238e5ae](https://github.com/williamdes/mariadb-mysql-kbs/commit/238e5ae2aa76868164f2a7f0de9e08dcdebde304) update: [MariaDB] && [MySQL] updates +- [eb62400](https://github.com/williamdes/mariadb-mysql-kbs/commit/eb62400bc18d0e9d2f845434cc367707fe68daa0) update: [MariaDB] && [MySQL] updates +- [bf0405b](https://github.com/williamdes/mariadb-mysql-kbs/commit/bf0405b255e1b79c358175f1391acdd94286f261) update: [MySQL] updates +- [85e3b2b](https://github.com/williamdes/mariadb-mysql-kbs/commit/85e3b2b0402948b01f4d2751d2776fedbee4ced1) update: [MariaDB] && [MySQL] updates +- [5f24772](https://github.com/williamdes/mariadb-mysql-kbs/commit/5f24772774a2e6753183aa14d6381a66fe63f819) update: [MariaDB] updates +- [17e905f](https://github.com/williamdes/mariadb-mysql-kbs/commit/17e905f2ba8cbc42193398c6718169564700627d) update: [MariaDB] updates +- [7fb17c1](https://github.com/williamdes/mariadb-mysql-kbs/commit/7fb17c1a1f7f29d9e623f5702d696b7744356cda) update: [MariaDB] updates +- [2ab4b94](https://github.com/williamdes/mariadb-mysql-kbs/commit/2ab4b9445dda64d4d76206b20d4680802197d06f) update: [MySQL] updates +- [6dca35c](https://github.com/williamdes/mariadb-mysql-kbs/commit/6dca35c3d7e138db1df9fa91cbb3acae045e33ad) update: [MariaDB] updates +- [25cc2f5](https://github.com/williamdes/mariadb-mysql-kbs/commit/25cc2f5c6ae9702d68d07fa7b2673824762b6942) update: [MariaDB] updates +- [a106adc](https://github.com/williamdes/mariadb-mysql-kbs/commit/a106adce4673a781299c05ad71a2f03d5f8f2762) update: [MariaDB] && [MySQL] updates +- [f32aa3c](https://github.com/williamdes/mariadb-mysql-kbs/commit/f32aa3c94886a030a9405d2d64fb32d7665111a9) update: [MySQL] updates +- [1a9712e](https://github.com/williamdes/mariadb-mysql-kbs/commit/1a9712ef486c366e4eab4796da6cc71207a035a0) update: [MariaDB] updates +- [e68823d](https://github.com/williamdes/mariadb-mysql-kbs/commit/e68823d481781ec91642414baba745b5009efd54) update: [MariaDB] && [MySQL] updates +- [25327b8](https://github.com/williamdes/mariadb-mysql-kbs/commit/25327b891ca02d0b5f2639532829e086b2b97755) update: [MariaDB] && [MySQL] updates +- [c70c4d5](https://github.com/williamdes/mariadb-mysql-kbs/commit/c70c4d5d87067e6ce7a3cc7a398bb618a27f31f6) update: [MariaDB] && [MySQL] updates +- [24a7590](https://github.com/williamdes/mariadb-mysql-kbs/commit/24a75905df8b1baad20ff5a6a74a2a200b75d7cb) update: [MySQL] updates +- [86688c6](https://github.com/williamdes/mariadb-mysql-kbs/commit/86688c678cba028750b6678faef3d398bdecf11d) update: [MySQL] updates +- [62e472b](https://github.com/williamdes/mariadb-mysql-kbs/commit/62e472b485c5008fe5c2db1b3569efa8f83735cd) update: [MariaDB] updates +- [8715b00](https://github.com/williamdes/mariadb-mysql-kbs/commit/8715b00fe605af5cf27dec34b2402ecb6ee21271) update: [MySQL] updates + +### Fixed + +- [438f58b](https://github.com/williamdes/mariadb-mysql-kbs/commit/438f58b093f9e97e6a50f3ad6b8c7ff15fc1636d) fix: use another way to validate variables in MySQL documentation +- [e23b886](https://github.com/williamdes/mariadb-mysql-kbs/commit/e23b8868e34fbe922ba0e83bcf5b55ee0c9b6966) fix: use stdout instead of stderr for phpunit +- [633e667](https://github.com/williamdes/mariadb-mysql-kbs/commit/633e667efd6d05b4497b672af6e2a110234df81e) fix: rename mysql options slave to replica +- [1da576b](https://github.com/williamdes/mariadb-mysql-kbs/commit/1da576b61e661762e41c3bf501b9e163f8a2f298) fix: remove an invalid edge case +- [6cb4b61](https://github.com/williamdes/mariadb-mysql-kbs/commit/6cb4b611d443f038e22e3ea2821dbb7b10e3328c) fix: support bad naming for enums +- [f836f84](https://github.com/williamdes/mariadb-mysql-kbs/commit/f836f84a0ee1d0c4e19cd848af50494fea33a7ae) fix: activate back h3 detection +- [894cce5](https://github.com/williamdes/mariadb-mysql-kbs/commit/894cce551c007c232b41cd696cc447db507d5c63) fix: detect nodes until next header +- [ff6fa4a](https://github.com/williamdes/mariadb-mysql-kbs/commit/ff6fa4a23e0d5735b035f2b66f4cfc20880cb866) fix: ignore non variables headings +- [c4d3a15](https://github.com/williamdes/mariadb-mysql-kbs/commit/c4d3a1506299dc0bc09b4e8d76df78cbefe9f8aa) fix: detect all the nodes until a separation line +- [8dbe3d1](https://github.com/williamdes/mariadb-mysql-kbs/commit/8dbe3d151413070ed35b0451265e503bc054aedd) fix: headers can be td or th elements on some MySQL pages +- [8d5ff2e](https://github.com/williamdes/mariadb-mysql-kbs/commit/8d5ff2eb867ea8e17b6cb2957e66846e0f3e7bb4) fix: update XSD url for phpunit +- [f127419](https://github.com/williamdes/mariadb-mysql-kbs/commit/f1274199744eb6d6ffdbe80a5aafd98a85ea7376) fix: remove incompatible expectExceptionMessage with phpunit 7 +- [239fa7f](https://github.com/williamdes/mariadb-mysql-kbs/commit/239fa7f50ea27d7e1b0c90bbe613c2407ea90e61) fix: phpunit test must use expectExceptionMessageMatches intead of expectExceptionMessageRegExp +- [45f5288](https://github.com/williamdes/mariadb-mysql-kbs/commit/45f5288456765d6f91f06251e0cba550304191a8) fix: add target folder to .npmignore + +### Features + +- [7823f6b](https://github.com/williamdes/mariadb-mysql-kbs/commit/7823f6ba556f393a329028b4e049e2e3a737cd0f) feat: move to phar method to generate docs +- [b0b51b9](https://github.com/williamdes/mariadb-mysql-kbs/commit/b0b51b9473c450fd1ba967d477f700695a5339e9) feat: add a PR template for documentation updates +- [6e0e3c4](https://github.com/williamdes/mariadb-mysql-kbs/commit/6e0e3c4a8fff19ed2832078d974aea52e55291ea) feat: remove sami/sami and use code-lts/doctum +- [00439a0](https://github.com/williamdes/mariadb-mysql-kbs/commit/00439a01b887dd21d22e2d364e73674c0a35cac5) feat: set main as the default branch +- [bb22aac](https://github.com/williamdes/mariadb-mysql-kbs/commit/bb22aac607c5a5f5118b36b358e447877dcc998b) feat: add test cases for the MariaDB extraction script +- [44ca8ce](https://github.com/williamdes/mariadb-mysql-kbs/commit/44ca8ce4f1ae2ce4e5717484d1b047e560434ad7) feat: export MariaDB functions for testing +- [d3e5cab](https://github.com/williamdes/mariadb-mysql-kbs/commit/d3e5cab043426498926d8abde07469f3ffeb5c74) feat: Allow phpunit 9 + +### Documentation + +- [f457e52](https://github.com/williamdes/mariadb-mysql-kbs/commit/f457e52f1274efc3b6f6c813e4f055e1ae6b07bd) docs: Update Repology badge after the merge of Fedora and Debian data + +### Others + +- [dc34e69](https://github.com/williamdes/mariadb-mysql-kbs/commit/dc34e69cf2358156b79913010afd221337a3f1f8) ci: update some commands +- [c304be5](https://github.com/williamdes/mariadb-mysql-kbs/commit/c304be5bddc74d02b991aa21a001667f66fa39a4) ci: use actions/cache@v2 +- [5e0e575](https://github.com/williamdes/mariadb-mysql-kbs/commit/5e0e57542b669cbaf125160e3ea62ce08389a9dd) chore: update phpstan config +- [bd06752](https://github.com/williamdes/mariadb-mysql-kbs/commit/bd067524ca5e0f38fe444d580f38a44f41399d86) chore: upgrade dependabot to v2 +- [b945b95](https://github.com/williamdes/mariadb-mysql-kbs/commit/b945b95fc7944800eb960a7f7e09c0d6319ddcc5) chore: upgrade @sudo-bot/sudo-bot to ^1.2.3 +- [9d4752e](https://github.com/williamdes/mariadb-mysql-kbs/commit/9d4752ebb4be10870363eb70e105b96693fecbd9) chore: upgrade @sudo-bot/sudo-bot to ^1.2.2 +- [ef3e911](https://github.com/williamdes/mariadb-mysql-kbs/commit/ef3e911dba1d68f9877f82ed0f3b9e9ffced1ccf) chore: upgrade @sudo-bot/sudo-bot to ^1.2.1 +- [87feee1](https://github.com/williamdes/mariadb-mysql-kbs/commit/87feee104b810e70869495a705111518f871875a) chore: improve doctum config +- [5ae8538](https://github.com/williamdes/mariadb-mysql-kbs/commit/5ae85389ce9fd94992dda42bac6583316a448316) ci: make the script render instead of parse +- [ce383e6](https://github.com/williamdes/mariadb-mysql-kbs/commit/ce383e63f65da54ea1cbfbfef491035a4533c59f) chore: upgrade crawler and mocha +- [2444a8d](https://github.com/williamdes/mariadb-mysql-kbs/commit/2444a8d4a8ed7c8c8778655a488f63f0b6708c86) chore: upgrade @sudo-bot/sudo-bot to ^1.2.0 +- [5cb8e6f](https://github.com/williamdes/mariadb-mysql-kbs/commit/5cb8e6f332462831a04ae265bf8371a9f95daa34) ci: upgrade sudo-bot/action-pull-request-merge to 1.1.1 +- [390ee9c](https://github.com/williamdes/mariadb-mysql-kbs/commit/390ee9cc96c7137476ea7b4c4a90ca4c39319c94) ci: Ignore php 8.0 because of phpunit +- [7f72d9c](https://github.com/williamdes/mariadb-mysql-kbs/commit/7f72d9c4b39b9ef0190b434801d2cc56d9faeb76) ci: add php 7.4 and 8.0 to the matrix +- [5ca10f0](https://github.com/williamdes/mariadb-mysql-kbs/commit/5ca10f0a9615bae11e22d27f2c37bf9836b9cfa7) ci: remove the need of upload token, upgrade shivammathur/setup-php to v2 +- [d37a838](https://github.com/williamdes/mariadb-mysql-kbs/commit/d37a838ff32938de91d94669cfb4370dc121e829) chore: change php versions requirements from ^7.1 to >=7.1 +- [0d21cc7](https://github.com/williamdes/mariadb-mysql-kbs/commit/0d21cc7306fc45d87d02fe33bfb372c8817346f5) chore: upgrade some dependencies to require recent versions +- [c4c75df](https://github.com/williamdes/mariadb-mysql-kbs/commit/c4c75df0bd0a2ba4e0d27c18b26b17bedfb1e7f5) chore: upgrade dependencies + +## [v1.2.10] + +### Changed + +- [8b61506](https://github.com/williamdes/mariadb-mysql-kbs/commit/8b61506fe329efcfaaa6b66e969ba23248c52dd6) update: [MariaDB] updates and other changes +- [3826dad](https://github.com/williamdes/mariadb-mysql-kbs/commit/3826dad219b15ff3f6cc0aabd85a4b8f30bf9b17) update: [MariaDB] updates +- [3300c03](https://github.com/williamdes/mariadb-mysql-kbs/commit/3300c03b0a24f742be901960bd87d6e4c984a8e3) update: [MariaDB] updates +- [dd877a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/dd877a282f24f44bd58ccc69424f2181cd1add20) update: [MySQL] updates + +### Features + +- [969103e](https://github.com/williamdes/mariadb-mysql-kbs/commit/969103e09c5550bead53592755b5bed058a945cb) feat: exclude some files from git archive version of the repo "export-ignore" +- [f564f47](https://github.com/williamdes/mariadb-mysql-kbs/commit/f564f47d03459a2eab97c79aa1290b9d39fa93ac) feat: move all commands to yarn +- [4ac523a](https://github.com/williamdes/mariadb-mysql-kbs/commit/4ac523abc11da0de15cb2defd1639562cea98449) feat: move to yarn + +### Others + +- [937d0d1](https://github.com/williamdes/mariadb-mysql-kbs/commit/937d0d1904a43e5f1c6bb0412979bf7d53e0fa71) chore: remove codecov npm dependency + +## [v1.2.9] + +### Added + +- [d9742f4](https://github.com/williamdes/mariadb-mysql-kbs/commit/d9742f4bb8e6962c5149c725a7baadf5a79da359) add: Travis CI cron +- [403f751](https://github.com/williamdes/mariadb-mysql-kbs/commit/403f751af50c2a7c5d8c57cffbee552e6c8b7cf1) add: Workflows +- [fad58a0](https://github.com/williamdes/mariadb-mysql-kbs/commit/fad58a0793ac5279de779371cf9429f85a5f12ca) add: get clean type from mixed string +- [58f6ce1](https://github.com/williamdes/mariadb-mysql-kbs/commit/58f6ce174bf326e91345509ee49703b234af503d) add: test case 4 before type detection enhancement + +### Changed + +- [4d67c9c](https://github.com/williamdes/mariadb-mysql-kbs/commit/4d67c9c891aaa9576faf635a8c2acde506a29826) update: [MySQL] updates and other changes +- [3231ac4](https://github.com/williamdes/mariadb-mysql-kbs/commit/3231ac4cc4a4497c45580686bf2d587141a860e8) update: [MySQL] updates +- [a50744f](https://github.com/williamdes/mariadb-mysql-kbs/commit/a50744f4555c79200e80ae8a104f47e99980fb80) update: [MySQL] updates +- [034b517](https://github.com/williamdes/mariadb-mysql-kbs/commit/034b517927997297f2bc07eb700dc71003fa51f2) update: [MySQL] updates +- [a551a29](https://github.com/williamdes/mariadb-mysql-kbs/commit/a551a299b11b50ab0e282741976bd49adf8eca67) update: [MariaDB] updates +- [af7a10c](https://github.com/williamdes/mariadb-mysql-kbs/commit/af7a10cb89c1df513dff2e697f850fae6af6e113) update: [MariaDB] updates +- [7a979e2](https://github.com/williamdes/mariadb-mysql-kbs/commit/7a979e26722661e4faa78c0ee04b65b37f6ebeeb) update: [MySQL] updates + +### Removed + +- [fd20335](https://github.com/williamdes/mariadb-mysql-kbs/commit/fd203354b733a73d42d70c360724b0e5d08523fb) remove: release script + +### Fixed + +- [4c7126f](https://github.com/williamdes/mariadb-mysql-kbs/commit/4c7126ff4ff9c035351549ae7c0808cef3848a45) fix: use new build command and convention for changelog-generator-twig +- [ed7158c](https://github.com/williamdes/mariadb-mysql-kbs/commit/ed7158c890e0b5b7d6b4306520503189e5305348) fix: Improve docs generation script +- [4176e94](https://github.com/williamdes/mariadb-mysql-kbs/commit/4176e9440dd3d556d32d9479142b19565b51062e) fix: phpdoc errors reported by phpstan +- [8369147](https://github.com/williamdes/mariadb-mysql-kbs/commit/8369147444eb5b488b748b598df611c58c56bb21) fix: phpdoc block +- [3faaae7](https://github.com/williamdes/mariadb-mysql-kbs/commit/3faaae71a507438aba3d8c8f2fbdab64bc104c6b) fix: Use version 1.0.5 of sudo-bot/action-pull-request-lock +- [4b06ebe](https://github.com/williamdes/mariadb-mysql-kbs/commit/4b06ebe880fd33e4749cf96b261677f313def6da) fix: test case 4 after adding support for 'type: default, range' in MySQL pages + +### Features + +- [6e928c7](https://github.com/williamdes/mariadb-mysql-kbs/commit/6e928c70e38780007b145800e240f8f747b1578d) feat: Add a release script +- [03809c5](https://github.com/williamdes/mariadb-mysql-kbs/commit/03809c5af460f1c806826dd2a6308d99719bcb4b) feat: make Swaggest\JsonSchema\Schema optional for Debian packaging vendors +- [22744bb](https://github.com/williamdes/mariadb-mysql-kbs/commit/22744bb96b45aef525119dfc9cef2fcdd9650d98) feat: get rid of the url:: resolver to make the vendor optional +- [ab4a210](https://github.com/williamdes/mariadb-mysql-kbs/commit/ab4a2109604528b40581ac4a036d219f8feef7ce) feat: added sign-release script +- [7e58e57](https://github.com/williamdes/mariadb-mysql-kbs/commit/7e58e571772d4bfff49c628876eaaae7e32f1f99) feat: Improve sudo-bot template file +- [668f1a0](https://github.com/williamdes/mariadb-mysql-kbs/commit/668f1a014870202ea994404baedbb6d60bae1676) feat: Add docs build and PR +- [530f0c1](https://github.com/williamdes/mariadb-mysql-kbs/commit/530f0c148d180430329d01a8788389b51c2334de) feat: Add packaging status badge from repology +- [0e37662](https://github.com/williamdes/mariadb-mysql-kbs/commit/0e37662ab711fd99c2948057d219cf878b2c7980) feat: Add workflow to lock a closed pull-request +- [8c65961](https://github.com/williamdes/mariadb-mysql-kbs/commit/8c659616e3a7fe7c264e234bcc983b06de9a5585) feat: Add script to trigger a workflow +- [74fbc90](https://github.com/williamdes/mariadb-mysql-kbs/commit/74fbc90329639523581617c693a04f4b6a4a797a) feat: support 'type: default, range' in MySQL pages + +### Others + +- [89c3397](https://github.com/williamdes/mariadb-mysql-kbs/commit/89c339730a3728dd35dbbc8018464fba5688c652) chore: remove /schemas folder for dist archives (composer) +- [976d936](https://github.com/williamdes/mariadb-mysql-kbs/commit/976d936f6dd8a8cc8002e2d254df91315401025a) chore: remove /target folder for dist archives (rust support) +- [7634363](https://github.com/williamdes/mariadb-mysql-kbs/commit/7634363f0ab12eddf80aba61f04483da53c0412c) chore: Add .gitattributes to ignored dir for dist archives +- [73dfae0](https://github.com/williamdes/mariadb-mysql-kbs/commit/73dfae02cf268b03972fc0e5b4c869375e372717) chore: move tests to a more standard place +- [dc37421](https://github.com/williamdes/mariadb-mysql-kbs/commit/dc374211df97b2187317028a40171d5adc39bfa3) chore: simplify phpunit version regex +- [9fc286a](https://github.com/williamdes/mariadb-mysql-kbs/commit/9fc286ab32ca693c5978474495a66b3f737edb6e) ci: Add merge pull-request workflow +- [44d115e](https://github.com/williamdes/mariadb-mysql-kbs/commit/44d115ed3d27355b75f3d6e081411c18003f0049) ci: add --no-interaction and fix docs build +- [a1596a5](https://github.com/williamdes/mariadb-mysql-kbs/commit/a1596a526084da7df3212cf26876950d7560436b) chore: update phpstan/phpstan to 0.12 +- [f96a3d1](https://github.com/williamdes/mariadb-mysql-kbs/commit/f96a3d19220bc4444629520a40e2d27785e8f46e) chore: update slevomat/coding-standard to 6.0 +- [6248da5](https://github.com/williamdes/mariadb-mysql-kbs/commit/6248da5b030f35b6e6adde216e173d2534024129) chore: Update docs submodule +- [f3ac5ee](https://github.com/williamdes/mariadb-mysql-kbs/commit/f3ac5ee6b54ca2557a1822947776787d00c90a4d) chore: replace badge in README.md +- [42cf92f](https://github.com/williamdes/mariadb-mysql-kbs/commit/42cf92ffc22dc973420586dadf643693312efa23) ci: finish migration to GitHub actions +- [f0cb417](https://github.com/williamdes/mariadb-mysql-kbs/commit/f0cb417661ecdd039dbeccb10873fe2fe722da59) ci: remove all TravisCI files + +## [v1.2.8] + +### Added + +- [8ca6999](https://github.com/williamdes/mariadb-mysql-kbs/commit/8ca6999e1487a9f43846530a3cc241ef7109b5bf) add: .gitattributes file + +### Changed + +- [b4afbca](https://github.com/williamdes/mariadb-mysql-kbs/commit/b4afbcabc7b40ebfb5b072de568f60063cf86adb) update: dependencies +- [856b39c](https://github.com/williamdes/mariadb-mysql-kbs/commit/856b39cbc7027bfee0f22c661960f694bbf08b32) update: [MySQL] updates +- [9d7b3c3](https://github.com/williamdes/mariadb-mysql-kbs/commit/9d7b3c3b973a3b0fa8fae5adc25f5ef02909203d) update: .gitattributes file +- [9eab800](https://github.com/williamdes/mariadb-mysql-kbs/commit/9eab8008ee3fc91c8817e744fc3755e7815cee47) update: .gitattributes file +- [530c6a6](https://github.com/williamdes/mariadb-mysql-kbs/commit/530c6a68d0f12eca9f1b0f4fd0f7d55f825847ae) update: [MariaDB] updates +- [53bae92](https://github.com/williamdes/mariadb-mysql-kbs/commit/53bae92f735f39271c881858074961fe3bc2e39e) update: [MariaDB] && [MySQL] updates +- [aeb2ffd](https://github.com/williamdes/mariadb-mysql-kbs/commit/aeb2ffd26fb7810d16a92330978f87f06da280a7) update: [MariaDB] && [MySQL] updates +- [fd9ac5e](https://github.com/williamdes/mariadb-mysql-kbs/commit/fd9ac5e27e321e4625150e70dac8cb645fcfbfb6) update: [MariaDB] && [MySQL] updates +- [0860955](https://github.com/williamdes/mariadb-mysql-kbs/commit/0860955d111d44d4e0a6ee3e8392724cbfc32e2a) update: dependencies +- [215fcf3](https://github.com/williamdes/mariadb-mysql-kbs/commit/215fcf3849a0441c55abd64d7f56119428994218) update: [MySQL] updates +- [0434d0a](https://github.com/williamdes/mariadb-mysql-kbs/commit/0434d0a918087e1f0f3679ba007ab12d06b6c00d) update: [MySQL] updates +- [9a65d87](https://github.com/williamdes/mariadb-mysql-kbs/commit/9a65d879cbb67aaf34450d518b6df3d651ee23f5) update: [MariaDB] && [MySQL] updates +- [6f6f19f](https://github.com/williamdes/mariadb-mysql-kbs/commit/6f6f19fd404bee47239fe6648bca607ceb0b97e0) update: dependencies + +### Fixed + +- [baee0c0](https://github.com/williamdes/mariadb-mysql-kbs/commit/baee0c02d1428d8d1c8d7e0824bdb5463e68cc7f) fix: some MySQL and MariaDB fixes +- [185ebb2](https://github.com/williamdes/mariadb-mysql-kbs/commit/185ebb223ba0904e65395f226a13b3bc708014fb) fix: cleanCli undefined + +### Features + +- [14d2a95](https://github.com/williamdes/mariadb-mysql-kbs/commit/14d2a95d61e0c1831e82d0a8d2c67132c18de4d8) feat: add tests for MySQL parser +- [228ee4a](https://github.com/williamdes/mariadb-mysql-kbs/commit/228ee4aba365dea063806c059a96c2d7c3c7902a) feat: Add cleaner for default values + +## [v1.2.7] + +### Changed + +- [6416780](https://github.com/williamdes/mariadb-mysql-kbs/commit/64167803686aff4090f72a6d89826364b1d88d7d) update: package version to 1.2.7 +- [520d89c](https://github.com/williamdes/mariadb-mysql-kbs/commit/520d89cbe75a088444e3536e7a2f0be31449efba) update: [security] bump lodash from 4.17.11 to 4.17.14 +- [cf60c43](https://github.com/williamdes/mariadb-mysql-kbs/commit/cf60c43cc4e7d7c284fa5181707343145f2d88f5) update: [security] bump lodash.merge from 4.6.1 to 4.6.2 +- [dfda544](https://github.com/williamdes/mariadb-mysql-kbs/commit/dfda544ecf47bf8cd995e3aebfb445d07f25bf5c) update: [MariaDB] && [MySQL] updates +- [4b31b18](https://github.com/williamdes/mariadb-mysql-kbs/commit/4b31b18c50a25f3e32a19d2b13218ef18166daa8) update: [MariaDB] && [MySQL] updates and other changes + +## [v1.2.6] + +### Added + +- [1c5ccf2](https://github.com/williamdes/mariadb-mysql-kbs/commit/1c5ccf288d2f96e8e18451bf17964de4bc8f38f4) add: SECURITY.md +- [61a933f](https://github.com/williamdes/mariadb-mysql-kbs/commit/61a933f6e0d67f4287ba73243f2d69417b76f609) added: dependencies up to date badge +- [a55aa0c](https://github.com/williamdes/mariadb-mysql-kbs/commit/a55aa0c33ed0f9a70921a5b5ee205f3a79442413) added: php lint to CI and removed apt cache key +- [b3edac6](https://github.com/williamdes/mariadb-mysql-kbs/commit/b3edac617d653623b1840f7dbc89bac9276c3f82) add: .phpunit.result.cache to ignores +- [77830b6](https://github.com/williamdes/mariadb-mysql-kbs/commit/77830b64be3803c7880702e0ba900d5946a11501) add: test command to composer.json +- [0daf1a8](https://github.com/williamdes/mariadb-mysql-kbs/commit/0daf1a866d8ae22033297df652e6795052ab2ebe) added: jshint to dev dependencies +- [3987131](https://github.com/williamdes/mariadb-mysql-kbs/commit/398713113a0387a3b666d52c55766a8dbb8bbad5) added: .jshintignore + +### Changed + +- [09de4e1](https://github.com/williamdes/mariadb-mysql-kbs/commit/09de4e1288b236fb38686f926c5567b88d2bb661) update: prettier from 1.17.1 to 1.18.2 +- [e4a96c9](https://github.com/williamdes/mariadb-mysql-kbs/commit/e4a96c94f85ca7e1fefe3a93761d20895790f857) update: package version to 1.2.6 +- [57a2f9c](https://github.com/williamdes/mariadb-mysql-kbs/commit/57a2f9cac2a45792cdc1ae214bc33308614cf9f2) update: [MariaDB] && [MySQL] updates +- [1ba2bdd](https://github.com/williamdes/mariadb-mysql-kbs/commit/1ba2bdd21b634d29aff5dd4dd0620e24b4fee2c7) update: [MariaDB] && [MySQL] updates +- [10e8854](https://github.com/williamdes/mariadb-mysql-kbs/commit/10e88548866862ef2c4313ec591c075ac7d70fa6) update: .travis.yml +- [414e4a6](https://github.com/williamdes/mariadb-mysql-kbs/commit/414e4a670f64056824c9712d6d3f067fcd27c6bc) update: @sudo-bot from 1.1.7 to 1.1.8 +- [2f8f42c](https://github.com/williamdes/mariadb-mysql-kbs/commit/2f8f42c8ceeae3c3cfdaeebd93d5ac299fad2c0e) update: @sudo-bot from 1.1.6 to 1.1.7 +- [9477c48](https://github.com/williamdes/mariadb-mysql-kbs/commit/9477c4866349d8e997ffd534a53297bd88e4b690) update: @sudo-bot from 1.1.5 to 1.1.6 +- [824f4f0](https://github.com/williamdes/mariadb-mysql-kbs/commit/824f4f01517dbf5e0654d486402545001d3f2015) update: [MySQL] data +- [55d6f72](https://github.com/williamdes/mariadb-mysql-kbs/commit/55d6f72913e24c2f32f2c9c3df285ba117f10f8a) update: [MariaDB] data +- [f679d22](https://github.com/williamdes/mariadb-mysql-kbs/commit/f679d2207b5c8d99044471de6e492b3ccd5b4a78) updated: dependencies and package-lock.json +- [46f52d8](https://github.com/williamdes/mariadb-mysql-kbs/commit/46f52d8c91a332480b7f5907d28fea3e391662df) update: [MySQL] data +- [22a609b](https://github.com/williamdes/mariadb-mysql-kbs/commit/22a609b4072296a943102965f79b6e9a2be61fc2) updated: swaggest/json-schema from 0.12.3+ to 0.12.9+ & phpunit command +- [18d2e32](https://github.com/williamdes/mariadb-mysql-kbs/commit/18d2e3237f3ed8a316fe3c4c2683012196b2ac9d) update: [MySQL] data +- [c5cafc6](https://github.com/williamdes/mariadb-mysql-kbs/commit/c5cafc66b59aee56e0db8ca42a0ddb8e0fc14f7e) update: [MariaDB] && [MySQL] updates +- [b2f66ca](https://github.com/williamdes/mariadb-mysql-kbs/commit/b2f66ca3851a5908d491769cacb4cbc726c558bd) updated: dependencies and package-lock.json +- [ac490c2](https://github.com/williamdes/mariadb-mysql-kbs/commit/ac490c2c6f3b7267fb72cb06d7990e547dd435d3) update: @sudo-bot cron script and README.md +- [13b93dc](https://github.com/williamdes/mariadb-mysql-kbs/commit/13b93dc37cb2f2e1d5ebfe6cc990a1065920da7a) update: [MariaDB] && [MySQL] updates +- [a9ddf62](https://github.com/williamdes/mariadb-mysql-kbs/commit/a9ddf62d554500b04a52ca0d425cceab955a656a) updated: prettier and mocha dependencies +- [1df9f60](https://github.com/williamdes/mariadb-mysql-kbs/commit/1df9f6031d72257f4b2e5223ed78d3ded32bfa6a) update: [MariaDB] && [MySQL] updates +- [1862d41](https://github.com/williamdes/mariadb-mysql-kbs/commit/1862d4158b6b285da798b9919af39686de683205) updated: sudo-bot and codecov npm dependencies +- [d2c8b8e](https://github.com/williamdes/mariadb-mysql-kbs/commit/d2c8b8ebdcdc603084c4235e78f93fd4c9f24c8d) update: [MySQL] updates + +### Removed + +- [f2d43b0](https://github.com/williamdes/mariadb-mysql-kbs/commit/f2d43b099df2442e5599130c86a72200811c4dbf) removed: spy script (useless) + +### Fixed + +- [4277ed2](https://github.com/williamdes/mariadb-mysql-kbs/commit/4277ed250f2500cb4c47253796f35dfba69d88b2) fix: alert detected by lgtm +- [6d386ce](https://github.com/williamdes/mariadb-mysql-kbs/commit/6d386ce5f1a7f225dd8b38f82f7a0c4aa2f3bdd2) fix: CI @sudo-bot script +- [b8ab559](https://github.com/williamdes/mariadb-mysql-kbs/commit/b8ab5592c5d54a35a6767b3a10c26d7fd53a7689) fix: MariaDB script +- [2362512](https://github.com/williamdes/mariadb-mysql-kbs/commit/2362512aa8da242158303620d4d2509229769e85) fix: move crawler to dev-dependencies +- [f106ca1](https://github.com/williamdes/mariadb-mysql-kbs/commit/f106ca1f2e2e6ba92bbae29bf343de90b0292717) fix: CI and .gitignore and phpstan command +- [ba2631e](https://github.com/williamdes/mariadb-mysql-kbs/commit/ba2631e1fd3265e58764ee06ce1a8bc37ab11813) fix: cleaner and add tests +- [e80c410](https://github.com/williamdes/mariadb-mysql-kbs/commit/e80c410f72cb8f899cab74eb72026db1026e6457) fix: @sudo-bot CI +- [a7cf7bd](https://github.com/williamdes/mariadb-mysql-kbs/commit/a7cf7bdf0a9ce4e49d6f7b56e26a58c71fa79ec0) fix: remove renamed file +- [8fd2d9f](https://github.com/williamdes/mariadb-mysql-kbs/commit/8fd2d9fc7a0507f35a44266a0c1a84f927f1a770) fix: @sudo-bot CI +- [cc7aac7](https://github.com/williamdes/mariadb-mysql-kbs/commit/cc7aac74f2ba0341661b65ab49b65ebd1afd1e41) fixed: CI reporting for non mocha tests +- [b40a61b](https://github.com/williamdes/mariadb-mysql-kbs/commit/b40a61bd0c0d3a2ecf3bdf6532bee02009fc1245) fix: @sudo-bot use 'npm ci' when package-lock.json exists +- [43b8e95](https://github.com/williamdes/mariadb-mysql-kbs/commit/43b8e95d27bfdba9a242b04c7e105e418a7fc816) fix: CI rename style to lint +- [7bb4a5b](https://github.com/williamdes/mariadb-mysql-kbs/commit/7bb4a5b6f6e062e775b6a54ab30a6d86528916a0) fixed: jshint setup +- [9143014](https://github.com/williamdes/mariadb-mysql-kbs/commit/91430143cc7687ca6650761b66f20ea39ff9ebc8) fixed: .npmignore + +### Improvements + +- [b4d600b](https://github.com/williamdes/mariadb-mysql-kbs/commit/b4d600b77993743c52b2f962b444a54be34b1107) improved: Improved extraction process and fixed bugs +- [7e81a29](https://github.com/williamdes/mariadb-mysql-kbs/commit/7e81a2943dd7bb6bfa369f056548b3239b9fbbaf) improved: move MariaDB and MySQL script to crawler and jquery +- [8190342](https://github.com/williamdes/mariadb-mysql-kbs/commit/8190342314ab1fa767c25b3960d2f8c17660a145) improved: Replace jsdom by crawler +- [be05dea](https://github.com/williamdes/mariadb-mysql-kbs/commit/be05dea67bb8cbc8f0ebb766d6236fdcfd89fea3) improved: CI install of npm and composer packages +- [e4b65db](https://github.com/williamdes/mariadb-mysql-kbs/commit/e4b65dbc851f623564afb3464014dc4ff49ada52) improved: Moved phpcs and phpcbf commands to composer +- [53bd313](https://github.com/williamdes/mariadb-mysql-kbs/commit/53bd31394c5b4a3f42692a54933f083d94347e9b) improved: Use namespace for tests +- [97f6095](https://github.com/williamdes/mariadb-mysql-kbs/commit/97f609580f412cdcd38ff61b20bfa69507661e60) improved: schemas testing +- [ed45a4d](https://github.com/williamdes/mariadb-mysql-kbs/commit/ed45a4db9216193a1e9ef42ea06a11fdd1c089ab) improved: added tests for each .json file format +- [5b51377](https://github.com/williamdes/mariadb-mysql-kbs/commit/5b51377f96821bb8778cf301f05d8573ea873c52) improved: Use phpunit for exception expectations +- [e646cd4](https://github.com/williamdes/mariadb-mysql-kbs/commit/e646cd4118a57131b99bdd8ac3d4d15b700b0ca4) improved: Move spy to cleaner and add tests +- [bc65814](https://github.com/williamdes/mariadb-mysql-kbs/commit/bc658145bde334580b3b495211081aa361099a4f) improved: extract scripts and use Promise and callbacks + +## [v1.2.5] + +### Added + +- [046c3fe](https://github.com/williamdes/mariadb-mysql-kbs/commit/046c3fe15cbf57d89e283b62f5a8b03c576a0337) added: php7.3 and osx php7.3 to test matrix +- [2491c41](https://github.com/williamdes/mariadb-mysql-kbs/commit/2491c415adaa65ab37b47d52cfb322d95fe7767d) added: snyk and dependabot to README.md +- [3fa4313](https://github.com/williamdes/mariadb-mysql-kbs/commit/3fa43131b44f8b5407bb63411589ffa61dcb75b9) added: dependabot config +- [571ccf3](https://github.com/williamdes/mariadb-mysql-kbs/commit/571ccf3edc1b3b5cfa0245d5518063a9434d0835) added: LGTM and fixed changelog +- [a068fde](https://github.com/williamdes/mariadb-mysql-kbs/commit/a068fde4a0421f96d4e1897170b409d638f9aabe) added: merged data and tests to PR template +- [effd148](https://github.com/williamdes/mariadb-mysql-kbs/commit/effd1487a0227d1092455838abd73e145808fd01) added: template for sudo-bot and mocha +- [d17883b](https://github.com/williamdes/mariadb-mysql-kbs/commit/d17883bc5b41d187f9c3132a8577fd470fb3213e) added: sudo-bot + +### Changed + +- [44264b0](https://github.com/williamdes/mariadb-mysql-kbs/commit/44264b03e02d0908749b696f68721fac99cbd133) update: package version to 1.2.5 +- [97ec035](https://github.com/williamdes/mariadb-mysql-kbs/commit/97ec035605cca060e3b7abf92d46ada85465a6d2) update: [MySQL] updates +- [9eb743f](https://github.com/williamdes/mariadb-mysql-kbs/commit/9eb743f65f4a1fbc80abab0247fe6e3896c98930) update: commit message format +- [5366e10](https://github.com/williamdes/mariadb-mysql-kbs/commit/5366e10a0625fa9f95f7eac7a43dfb9af43f72b6) updated: package-lock.json and package.json and changelog +- [2786d1a](https://github.com/williamdes/mariadb-mysql-kbs/commit/2786d1a5c98dd3b93bfca8706cc9d7e92b1770a7) updated: MySQL data +- [9cffbf6](https://github.com/williamdes/mariadb-mysql-kbs/commit/9cffbf64046836229d9c3f83674b213848833036) updated: MariaDB data +- [13d7ba4](https://github.com/williamdes/mariadb-mysql-kbs/commit/13d7ba4510e9957352790a02551eb247f4b17ad6) updated: composer.json && updated: composer.lock +- [7e80648](https://github.com/williamdes/mariadb-mysql-kbs/commit/7e80648f583ce760ab717a0a942bd6f576ede4bc) updated: composer.lock +- [affedaf](https://github.com/williamdes/mariadb-mysql-kbs/commit/affedaf9c5762fc01c5b6084b31f321de5e50140) updated: package-lock.json and dependabot config +- [0f8b1a0](https://github.com/williamdes/mariadb-mysql-kbs/commit/0f8b1a05978fc5d0573c0eacc23a97df17cc032e) updated: changelog 📖 +- [e031ee1](https://github.com/williamdes/mariadb-mysql-kbs/commit/e031ee1af193878dfccf7892c2aa553bc76f4f00) updated: package.json & package-lock.json +- [b4675f3](https://github.com/williamdes/mariadb-mysql-kbs/commit/b4675f313ad67ef4bee7a661014d0ffcf9911bd2) updated: sudo-bot +- [dd0ff5c](https://github.com/williamdes/mariadb-mysql-kbs/commit/dd0ff5c9448f65dde6d5ef829589e2115292aa20) updated: [MySQL] & [MariaDB] data +- [852b3a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/852b3a2a527f620310fe2b90877d15ef315a60c9) updated: composer.lock and package-lock.json and updated package.json +- [ef766fd](https://github.com/williamdes/mariadb-mysql-kbs/commit/ef766fd9991e4fd1e80bb7b14abb2a352ecd4689) updated: changelog 📖 + +### Removed + +- [16a3d25](https://github.com/williamdes/mariadb-mysql-kbs/commit/16a3d259263d00eab648fa9bce2249e993be0aeb) removed: composer.lock +- [b0f997d](https://github.com/williamdes/mariadb-mysql-kbs/commit/b0f997d2abc033740a35d14cf16982356b207f16) removed: old changelog script +- [ab83775](https://github.com/williamdes/mariadb-mysql-kbs/commit/ab83775286f122b186526c106079e798525ca307) removed: deploy on tag + +### Fixed + +- [741b07e](https://github.com/williamdes/mariadb-mysql-kbs/commit/741b07e927b55cf35e918085462e0052153ff8dc) fix: .npmignore .gitignore and composer archive ignore +- [3e5ca71](https://github.com/williamdes/mariadb-mysql-kbs/commit/3e5ca71a782aeedd4e6a726ae1737905ca74d7e6) fix: composer non feature branches and nyc coverage +- [b00a8b0](https://github.com/williamdes/mariadb-mysql-kbs/commit/b00a8b09496f193c3289bf6f3c2ece4cd3a95967) fix: osx CI +- [9ac6e9b](https://github.com/williamdes/mariadb-mysql-kbs/commit/9ac6e9bf898de7760f7f53ddabdc28a2c5a548bb) fixed: changelog +- [127889d](https://github.com/williamdes/mariadb-mysql-kbs/commit/127889df59911291084b8b7815b98519002abd04) fixed: changelog +- [2b23349](https://github.com/williamdes/mariadb-mysql-kbs/commit/2b23349f867450f308a37045486ac6b61eb25a99) fixed: Travis CI +- [5377cec](https://github.com/williamdes/mariadb-mysql-kbs/commit/5377cec845b0cc0888a23a8185e24553f7c2a476) fixed: NPM package name in README.md +- [1b433f8](https://github.com/williamdes/mariadb-mysql-kbs/commit/1b433f8f30c6f1cb4ad42540f869614f13239fbb) fixed: nyc coverage +- [2f24409](https://github.com/williamdes/mariadb-mysql-kbs/commit/2f244099934d2d125d01d55dbe5c2388c09693ff) fixed: Coverage report and ignore files +- [8bee75a](https://github.com/williamdes/mariadb-mysql-kbs/commit/8bee75af85dc02e8be72fae9ff9e29c0670c7b77) fixed: CI coverage +- [ae75ce8](https://github.com/williamdes/mariadb-mysql-kbs/commit/ae75ce8c4fd44cdae42748f3ab769cdd0401868c) fixed: CI & mocha tests installation +- [8fa12ea](https://github.com/williamdes/mariadb-mysql-kbs/commit/8fa12eaab4a917677828a4f12f0b07f936c8a023) fixed: composer namespace +- [ee2c058](https://github.com/williamdes/mariadb-mysql-kbs/commit/ee2c05800e170ed0743b5905db43450359ca10e6) fixed: travis CI and other files +- [a4974c5](https://github.com/williamdes/mariadb-mysql-kbs/commit/a4974c5050132cd38945d2c639fdd614fb080d11) fix: OSX CI +- [a6a9ed8](https://github.com/williamdes/mariadb-mysql-kbs/commit/a6a9ed8d17fc672413bbebc5908928a1ad80a679) fix: OSX on CI +- [4762da9](https://github.com/williamdes/mariadb-mysql-kbs/commit/4762da9723c8da0378d990a3a9062b89ac71f4f6) fixed: npm ignore + +### Improvements + +- [f4cd7a0](https://github.com/williamdes/mariadb-mysql-kbs/commit/f4cd7a000f32939649796c8880f34dc2c8ceee93) style: prettier +- [40ca56a](https://github.com/williamdes/mariadb-mysql-kbs/commit/40ca56af22aafc5fc314e1c1dee7520ae2cf69b9) style: prettier on changelog.js + +## [v1.2.4] + +### Added + +- [5c00bb6](https://github.com/williamdes/mariadb-mysql-kbs/commit/5c00bb63e8423d092b5e21689e14ee83e9fc918f) added: deploy on tag +- [83b9b19](https://github.com/williamdes/mariadb-mysql-kbs/commit/83b9b19fe47b2a62065c5c3f3f67d1582b6554f1) added: Travis CI labels +- [00a10ea](https://github.com/williamdes/mariadb-mysql-kbs/commit/00a10eab8e00aaa0d073062957de291a02a472e5) added: sudo-bot cron script :factory: +- [071ef1d](https://github.com/williamdes/mariadb-mysql-kbs/commit/071ef1d991a718e972cf551f962e9a5f7b2f51c3) added: CODEOWNERS :lock: +- [4f71020](https://github.com/williamdes/mariadb-mysql-kbs/commit/4f7102047f310df55c85b0967aa872ada8d9fec5) added: [MariaDB] system-versioned-tables + +### Changed + +- [3092bc0](https://github.com/williamdes/mariadb-mysql-kbs/commit/3092bc0a3d03d580466b86de4036130e644ec94d) updated: composer.json & package.json - version 1.2.4 +- [797b1f3](https://github.com/williamdes/mariadb-mysql-kbs/commit/797b1f304443c18076cfa5e910af8c5f23703601) updated: [MySQL] & [MariaDB] data +- [c999377](https://github.com/williamdes/mariadb-mysql-kbs/commit/c9993779f679c7b02161977b6733706b7e793f08) updated: [MySQL] data +- [03d5d6e](https://github.com/williamdes/mariadb-mysql-kbs/commit/03d5d6ea73e29023466449021cb5441b67ffeea6) updated: [MariaDB] data +- [68f2187](https://github.com/williamdes/mariadb-mysql-kbs/commit/68f2187842df8cba506394ccbbb3ddcc7bc401fc) updated: changelog :book: + +### Fixed + +- [247f98b](https://github.com/williamdes/mariadb-mysql-kbs/commit/247f98b3d21ddd43d336e9f62af5808980bc3806) fixed: OSX tests +- [10e4ff6](https://github.com/williamdes/mariadb-mysql-kbs/commit/10e4ff6ff34c65248815d64c2699e5f2f7847c24) fixed: typo +- [cb792c8](https://github.com/williamdes/mariadb-mysql-kbs/commit/cb792c8133d5c48116d940a3e92657c51f8b4f64) fixed: npm ignore + +## [v1.2.3] + +### Added + +- [03cb762](https://github.com/williamdes/mariadb-mysql-kbs/commit/03cb7629b06f8d64e7b6ebced942a10d3d59c410) added: json schema validation for merged-ultraslim.json +- [fd46f68](https://github.com/williamdes/mariadb-mysql-kbs/commit/fd46f68ba96ffe28c53eeda1c2e41bb9e157d936) added: swaggest/json-schema + +### Changed + +- [8076644](https://github.com/williamdes/mariadb-mysql-kbs/commit/80766444c4443ba3101e4da6d0b3cfeef3c06351) updated: composer.json & package.json - version 1.2.3 +- [9bd0602](https://github.com/williamdes/mariadb-mysql-kbs/commit/9bd06026ca172822f806a7d0625b2ddf85e47e54) updated: api docs :book: +- [fb2f2f6](https://github.com/williamdes/mariadb-mysql-kbs/commit/fb2f2f6f6cdba32d4518529a272cbbf3ed37391f) updated: changelog :book: +- [6696ca7](https://github.com/williamdes/mariadb-mysql-kbs/commit/6696ca745ce172a24d1fb5ae1fefe82ae10b222a) updated: merged data +- [143e1f2](https://github.com/williamdes/mariadb-mysql-kbs/commit/143e1f24f559469f2f13bab7da5366d59d54e2fd) updated: [MariaDB] data +- [c99e2f7](https://github.com/williamdes/mariadb-mysql-kbs/commit/c99e2f7e07faedef1db039c5fc5c7c44f5dc8c52) updated: [MySQL] data +- [c2903a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/c2903a29e2f2f60988276f21dc1f23464133ac4b) updated: composer.lock :lock: +- [5378614](https://github.com/williamdes/mariadb-mysql-kbs/commit/53786144f25bf89d0a040f3be6bc0378a17661f0) updated: changelog :book: + +### Removed + +- [2ab9b3c](https://github.com/williamdes/mariadb-mysql-kbs/commit/2ab9b3ce7aa43af77c47d0c096b3c7363203a053) removed: validate file +- [84fe040](https://github.com/williamdes/mariadb-mysql-kbs/commit/84fe040254d39f239286bbe77427298d590e5547) removed: testbench file + +### Fixed + +- [8abb014](https://github.com/williamdes/mariadb-mysql-kbs/commit/8abb01492af0b8c054cb878fa79560b774a637be) fixed: npm ignore + +### Improvements + +- [c920fd8](https://github.com/williamdes/mariadb-mysql-kbs/commit/c920fd8ea1c9a4be5d01237dd93ab3aef8caaa4e) improved: Tests :rocket: :package: + +## [v1.2.2] + +### Added + +- [e95b8dc](https://github.com/williamdes/mariadb-mysql-kbs/commit/e95b8dc10379bf00236ed0ee24abc0723b6a743a) added: phpcs rules +- [e402e0c](https://github.com/williamdes/mariadb-mysql-kbs/commit/e402e0c03086b8712b68d084bca1f5118ec282af) added: getVariable +- [4e7ae6f](https://github.com/williamdes/mariadb-mysql-kbs/commit/4e7ae6f4e2b349f25f68c028b1e5c3dab171b8b5) added: badges and install intructions :book: +- [9bed254](https://github.com/williamdes/mariadb-mysql-kbs/commit/9bed254abc3ac85b46aa8f6ddd3eb0fd03f32008) added: npm ignore +- [47c5d56](https://github.com/williamdes/mariadb-mysql-kbs/commit/47c5d56b7549050fc7b71da971cc5fc64f5790fb) added: changelog :book: +- [bbeed46](https://github.com/williamdes/mariadb-mysql-kbs/commit/bbeed466908936e25fa7685509e4b0834d2636f6) added: changelog generator :book: +- [5cf8a17](https://github.com/williamdes/mariadb-mysql-kbs/commit/5cf8a17fe58762591da828de2aeb930d55d70027) added: [MariaDB] more documentation + +### Changed + +- [5b6a4bd](https://github.com/williamdes/mariadb-mysql-kbs/commit/5b6a4bdca787a6204fd8ce9fdfffa3ea7cd43ee7) updated: composer.json & package.json + :lock: - version 1.2.2 +- [aa546c7](https://github.com/williamdes/mariadb-mysql-kbs/commit/aa546c73a3cd940d01f0866663c3a0ea99f1be4e) updated: changelog :book: +- [1777f13](https://github.com/williamdes/mariadb-mysql-kbs/commit/1777f13df5866179ce749ecb5b5c00988897f757) updated: prettier +- [e94a9db](https://github.com/williamdes/mariadb-mysql-kbs/commit/e94a9db838d678ccc3db039dccf116eb38586b2a) updated: [MySQL] & [MariaDB] data +- [59e5baa](https://github.com/williamdes/mariadb-mysql-kbs/commit/59e5baa7a31ac72c2ff4a17b5aefec40f98ed6a1) updated: release script +- [5140d06](https://github.com/williamdes/mariadb-mysql-kbs/commit/5140d062bb32ea80fe9155843d99f6a32e178782) updated: api docs +- [2bc0164](https://github.com/williamdes/mariadb-mysql-kbs/commit/2bc016434ed62141a45f3890cf5711bbd0f8755f) updated: composer.lock :lock: +- [c6cb704](https://github.com/williamdes/mariadb-mysql-kbs/commit/c6cb704b8711f2510769494362c60c63cc7cab6f) updated: composer.json & package.json +- [e2c6706](https://github.com/williamdes/mariadb-mysql-kbs/commit/e2c6706c74d9274f63f4185b108e6b335ecff14f) updated: changelog generator :book: +- [fb4cabe](https://github.com/williamdes/mariadb-mysql-kbs/commit/fb4cabe90393f1a7ec863f759be3795cdea36f84) updated: submodule commit hash + +### Fixed + +- [06737df](https://github.com/williamdes/mariadb-mysql-kbs/commit/06737dfb47665487ce9fb5cf7b490f54614fc0b2) fixed: phpcs rule +- [9acaab8](https://github.com/williamdes/mariadb-mysql-kbs/commit/9acaab87b15b2e9be1a21d9a3703faeb04bcaaf8) fixes: @throws is allowed in phpdoc +- [d4870a6](https://github.com/williamdes/mariadb-mysql-kbs/commit/d4870a6d02ff314001403cc1a1c45b93cce734ea) fixes: dataType bug + +### Improvements + +- [8af998f](https://github.com/williamdes/mariadb-mysql-kbs/commit/8af998fec0d2e95ddcedb3c586b44bd4df46eead) style: composer.json & package.json +- [5241c13](https://github.com/williamdes/mariadb-mysql-kbs/commit/5241c1338a87293d25ed25413aac50a801c1bcb2) style: phpcs & prettier +- [e5d987c](https://github.com/williamdes/mariadb-mysql-kbs/commit/e5d987c475b64bc002ffac46daab7068a8d7f506) style: phpcs & prettier + +## [v1.2.1] + +### Added + +- [fe488b8](https://github.com/williamdes/mariadb-mysql-kbs/commit/fe488b8008f153ba71e7b4a30432182db9c78e29) added: KBException>Exception +- [016346b](https://github.com/williamdes/mariadb-mysql-kbs/commit/016346bb53487b9761475468b35bffa1d73103f1) added: markdown format :package: :book: +- [8742aa0](https://github.com/williamdes/mariadb-mysql-kbs/commit/8742aa0cb2cb669b6df9e8d3637f18b12fc1fab7) added: markdown format in data :package: +- [5c01220](https://github.com/williamdes/mariadb-mysql-kbs/commit/5c0122006d029180bf358ece53c94194f8b58035) added: API docs :book: + +### Changed + +- [057b23f](https://github.com/williamdes/mariadb-mysql-kbs/commit/057b23face95ef95e977d7e145e58cb4b68aac3f) updated: composer.json & package.* - version 1.2.1 +- [bdaf01a](https://github.com/williamdes/mariadb-mysql-kbs/commit/bdaf01ae451c3b221b65ac7fe6462a17532055cd) updated: prettier ignore & composer archive & phpcs +- [f8786b2](https://github.com/williamdes/mariadb-mysql-kbs/commit/f8786b2d0519aaa1d37d4a74631830e360347975) updated: [MySQL] & [MariaDB] data +- [f64d72c](https://github.com/williamdes/mariadb-mysql-kbs/commit/f64d72c8db530449f3b72e9a71e3819518a5374d) updated: travis config +- [7df7e60](https://github.com/williamdes/mariadb-mysql-kbs/commit/7df7e60acf154fada34f3346669672b12f885732) updated: README :book: +- [bdf4e22](https://github.com/williamdes/mariadb-mysql-kbs/commit/bdf4e22b2d75523a63cc03c91b640485aceed1be) updated: phpcs & phpstan config + +### Fixed + +- [c16e655](https://github.com/williamdes/mariadb-mysql-kbs/commit/c16e655bd9ed2eebdb0cb8292184911794f3f808) fixes: command line bug in data +- [3637458](https://github.com/williamdes/mariadb-mysql-kbs/commit/3637458d2df6c1642ec323a405e73fc403aa693e) fixes: bug in validValues + +### Improvements + +- [08a29f0](https://github.com/williamdes/mariadb-mysql-kbs/commit/08a29f07bb2f600a06cf552fdca8426d95f9ba96) style: phpcs fixes + +## [v1.2.0] + +### Added + +- [1928c75](https://github.com/williamdes/mariadb-mysql-kbs/commit/1928c755602b21f6f80b6480216b2defed345950) added: getVariableType in API :rocket: +- [94b083c](https://github.com/williamdes/mariadb-mysql-kbs/commit/94b083cea9e669693d1be369fb454ae002a2a40b) added: variable type & ultraslim php :package: +- [e7368b7](https://github.com/williamdes/mariadb-mysql-kbs/commit/e7368b75acf63b22c87fa311b7bf784ddbf56540) added: spy script :eye: +- [ab2594e](https://github.com/williamdes/mariadb-mysql-kbs/commit/ab2594e07a2c7fdfb246f6a63c7f8a79eca47db8) added: [MySQL] documentation +- [e16eb29](https://github.com/williamdes/mariadb-mysql-kbs/commit/e16eb29a36a1cdc94e18041c6cd0fda1e468bda8) added: [MySQL] documentation +- [4e86741](https://github.com/williamdes/mariadb-mysql-kbs/commit/4e86741f2fc5d91f3011569ad78e6cafb63f4462) added: [MySQL] documentations +- [e156e4f](https://github.com/williamdes/mariadb-mysql-kbs/commit/e156e4f1301a9368e7ce4c63e631a4d6cd57911a) added: [MySQL] documentations +- [58751e1](https://github.com/williamdes/mariadb-mysql-kbs/commit/58751e1ebc7ada1a958886ce6ec9c572848a1572) added: JSON key sorter +- [0a66b68](https://github.com/williamdes/mariadb-mysql-kbs/commit/0a66b680e8ad0eddb88a683dc8dea9a148eb3740) added: [MySQL] data +- [f744088](https://github.com/williamdes/mariadb-mysql-kbs/commit/f744088ae963d7d060e120102465750fc5d7ab06) added: [MySQL] replication options documentation + +### Changed + +- [bf3be0f](https://github.com/williamdes/mariadb-mysql-kbs/commit/bf3be0f2f91e4299e23665cfe97df9e2489b578c) updated: composer.* & package.* - version 1.2.0 +- [599dee7](https://github.com/williamdes/mariadb-mysql-kbs/commit/599dee7e07f72826e339442d00fe0ee1ace42cc0) updated: phpcs & phpstan config +- [0dee19e](https://github.com/williamdes/mariadb-mysql-kbs/commit/0dee19efb1081b196b2fd9100b52b2174bbed786) updated: composer.json archive +- [a7f947e](https://github.com/williamdes/mariadb-mysql-kbs/commit/a7f947efc9ca76126482c052937b1e6bbc332457) updated: merged data +- [414021d](https://github.com/williamdes/mariadb-mysql-kbs/commit/414021daa725c39190cbc402ccee2f0b1740b132) updated: [MySQL] & [MariaDB] data +- [84fe8e7](https://github.com/williamdes/mariadb-mysql-kbs/commit/84fe8e7d46006f7b25e087f953b6db0ed3f5c07c) updated: phpstan config +- [e8eb1d4](https://github.com/williamdes/mariadb-mysql-kbs/commit/e8eb1d4b8400ea54efbc1a82217dc1af26c115df) updated: [MySQL] data +- [9d78bfc](https://github.com/williamdes/mariadb-mysql-kbs/commit/9d78bfc93c86776418591bb66242c867bedca8fb) updated: merged data +- [17370d6](https://github.com/williamdes/mariadb-mysql-kbs/commit/17370d6c621cda7008775bbaa2bfc5be4c9b66b2) updated: [MySQL] data +- [5e57001](https://github.com/williamdes/mariadb-mysql-kbs/commit/5e5700191aab19fc29411b7ecda0b0d597433a84) updated: merged data +- [c6badc1](https://github.com/williamdes/mariadb-mysql-kbs/commit/c6badc1a999df9d8b1b04fa9ba96800023d19348) updated: merged data +- [76281af](https://github.com/williamdes/mariadb-mysql-kbs/commit/76281af259455b8efd2b1a91597fb738afd2d607) updated: merged data +- [89ae61b](https://github.com/williamdes/mariadb-mysql-kbs/commit/89ae61bf3c68f0217167b4002fe0771620330558) updated: [MySQL] data +- [93f47a5](https://github.com/williamdes/mariadb-mysql-kbs/commit/93f47a54eedaef85b4b581ee5062d7eb7139f3f6) updated: [MySQL] & [MariaDB] data +- [9519e64](https://github.com/williamdes/mariadb-mysql-kbs/commit/9519e64c826e823599cbcb8f2054ee7fc19105a0) updated: merged data + +### Removed + +- [0c37939](https://github.com/williamdes/mariadb-mysql-kbs/commit/0c37939a1ac2fc5b206b0b4954ee48b3cef089d8) removed: :bug: dataType from data, now type + +### Fixed + +- [d33d2a1](https://github.com/williamdes/mariadb-mysql-kbs/commit/d33d2a1e7a99b77ef9aa2c37b2c06a52c9942c24) fixes: reported errors +- [34a58da](https://github.com/williamdes/mariadb-mysql-kbs/commit/34a58daba6097f2ad7ca4790b6afd51a81fcd3ef) fixes: dataType bug in spy :eye +- [42720e2](https://github.com/williamdes/mariadb-mysql-kbs/commit/42720e214b4821063636822e49d8dc8326d8dfa2) fixes: type bug +- [6e012b3](https://github.com/williamdes/mariadb-mysql-kbs/commit/6e012b3e511de60f2ebfb43e49a166762e0806a5) fixes: not array bug in merge +- [69484ae](https://github.com/williamdes/mariadb-mysql-kbs/commit/69484ae383825aa464895fd15190c057834ea498) fixes: key does not exist + +### Improvements + +- [0335da9](https://github.com/williamdes/mariadb-mysql-kbs/commit/0335da9b73afa5a8be956efc7766b1687225bb0e) improved: API :rocket: +- [362e136](https://github.com/williamdes/mariadb-mysql-kbs/commit/362e136166d6fbdaee17a4a409f9bcfc2a37920c) improved: [MySQL] extract script +- [042d762](https://github.com/williamdes/mariadb-mysql-kbs/commit/042d762b739bf8d84790246fedb6f04d1d0d3d2a) style: phpstan & prettier + +## [v1.1.0] + +### Added + +- [1dc3bf7](https://github.com/williamdes/mariadb-mysql-kbs/commit/1dc3bf7a651060398b9b6a28e1cb3b99cdf1f71e) added: prettier +- [797487a](https://github.com/williamdes/mariadb-mysql-kbs/commit/797487abd268ad01f6ecf05b8c3577d147ca5083) added: Search & phpcs & phpstan & travis & phpunit & test +- [ccb19a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/ccb19a2a9a8c9d453ae8fec4c1b3d36771edd370) added: data from data builder +- [5586808](https://github.com/williamdes/mariadb-mysql-kbs/commit/55868083a95b6e7926e1fb4f51cde2cd08129fac) added: data builder + +### Changed + +- [0a0b691](https://github.com/williamdes/mariadb-mysql-kbs/commit/0a0b6913a40827ca9a9f4c094f7788a16c154436) updated: composer.json - version 1.1.0 +- [d5a006d](https://github.com/williamdes/mariadb-mysql-kbs/commit/d5a006dbee72acc89feb60a867a7c8342cff6f61) updated: merge script +- [d891c83](https://github.com/williamdes/mariadb-mysql-kbs/commit/d891c83d44039bd9b74ea9b490b22a0d3c1e24da) updated: [MariaDB] kb url +- [5879b6f](https://github.com/williamdes/mariadb-mysql-kbs/commit/5879b6fa1ee361c7ede73b76f8939bde26033797) updated: .gitignore +- [29523ef](https://github.com/williamdes/mariadb-mysql-kbs/commit/29523efca1f4e65d8df7516a4dc004292511b365) updated: composer.json +- [1d0bcea](https://github.com/williamdes/mariadb-mysql-kbs/commit/1d0bcea1d4df934e7ac019826274e6705cb89eb5) updated: [MariaDB] data +- [39d5440](https://github.com/williamdes/mariadb-mysql-kbs/commit/39d54407d4ee11d76b6f074ba525a49d89466e1c) updated: [MySQL] & [MariaDB] data + +### Fixed + +- [8adc939](https://github.com/williamdes/mariadb-mysql-kbs/commit/8adc939a8128c20f11e806b97231d083cb5a9af0) fixed: phpcs config +- [e1bd1e6](https://github.com/williamdes/mariadb-mysql-kbs/commit/e1bd1e6a188f37780c988c58a929bae979d6c4ef) fixed: composer.json autoload +- [04865bb](https://github.com/williamdes/mariadb-mysql-kbs/commit/04865bb1f58c16d2faa74ebf516ebda64a4c4623) fixed: scope bug + +### Improvements + +- [bbd013e](https://github.com/williamdes/mariadb-mysql-kbs/commit/bbd013e4fbf23ea437e0e5cbde05af471906ef49) style: phpstan & prettier + +## [v1.0.0] + +### Added + +- [7a8fb1b](https://github.com/williamdes/mariadb-mysql-kbs/commit/7a8fb1ba9b28671c73b2f1cea54ce52bb3d7048b) added: composer.json +- [9719ee0](https://github.com/williamdes/mariadb-mysql-kbs/commit/9719ee02f688922ce43643035d93d4a93151cea2) added: [MySQL] data +- [d5b9751](https://github.com/williamdes/mariadb-mysql-kbs/commit/d5b975183c319a5ac0a9f341e69afe4eb15cfb8b) added: more MySQL documentations +- [b536a33](https://github.com/williamdes/mariadb-mysql-kbs/commit/b536a33ff4a3d95fa996aa269eb02687a5761c65) added: [MariaDB] data +- [951a927](https://github.com/williamdes/mariadb-mysql-kbs/commit/951a9272f1880f666425e4c1742778ef5bdd4f00) added: more MariaDB system variables +- [c03f2a6](https://github.com/williamdes/mariadb-mysql-kbs/commit/c03f2a63c002b28cae44d8f060ac09d2969e229c) added: [MariaDB] data +- [f45ad15](https://github.com/williamdes/mariadb-mysql-kbs/commit/f45ad15cfff626159a60396abbb5ff085514ccd1) added: [MariaDB] server status variables documentation +- [dc2e800](https://github.com/williamdes/mariadb-mysql-kbs/commit/dc2e800d6d493c30be62bc1e78e84404f994e8d3) added: [MySQL] data +- [4a1e8da](https://github.com/williamdes/mariadb-mysql-kbs/commit/4a1e8da123a15738288bdac1504333ef69df1ebf) added: more documentations for MySQL +- [b35e824](https://github.com/williamdes/mariadb-mysql-kbs/commit/b35e824cc58be1f2b3c7fece095e0a331fb09a9d) added: support for command line +- [6404ab5](https://github.com/williamdes/mariadb-mysql-kbs/commit/6404ab5ad48a2f76702dcbd2fbf40bf7c8976fde) added: [MySQL] data +- [3d7fec8](https://github.com/williamdes/mariadb-mysql-kbs/commit/3d7fec83c1debca9ef636d32c51073e56b354ea6) added: MySQL script +- [cb6e800](https://github.com/williamdes/mariadb-mysql-kbs/commit/cb6e800fd15eb7e2a582d489a17bf86dec079d58) test: Added test for common.js +- [ecccb66](https://github.com/williamdes/mariadb-mysql-kbs/commit/ecccb6694c6b80b3a14b707fdda2318e68c9f5da) added: [MariaDB] data +- [b99b2b5](https://github.com/williamdes/mariadb-mysql-kbs/commit/b99b2b5482c9d089092a6106080299574629443c) added: files +- [e05b05a](https://github.com/williamdes/mariadb-mysql-kbs/commit/e05b05aa96895dee2c3222e93cdddfcb4055d950) added: package.json & :lock: +- [9783044](https://github.com/williamdes/mariadb-mysql-kbs/commit/9783044b051820a9ae893da2d7e488bc4a3f37c6) added: .gitignore & README +- [28e9e01](https://github.com/williamdes/mariadb-mysql-kbs/commit/28e9e010dc027dee17a55f5eedad776dcf983e95) added: LICENSE + +### Changed + +- [c0c22b9](https://github.com/williamdes/mariadb-mysql-kbs/commit/c0c22b92e6f8bd77addeae4a5e097f56cb4cc88e) updated: data +- [1f61c63](https://github.com/williamdes/mariadb-mysql-kbs/commit/1f61c634686785d7cca3d291368c9a3e737ebff8) updated: data +- [4f7f893](https://github.com/williamdes/mariadb-mysql-kbs/commit/4f7f893870fe295e698b4f6df91b5ba9ae1e88ea) updated: [MariaDB] data +- [0a95903](https://github.com/williamdes/mariadb-mysql-kbs/commit/0a95903495d9f293b419b41e763845ee3146f989) changed: Moved code in common.js + +### Fixed + +- [dded735](https://github.com/williamdes/mariadb-mysql-kbs/commit/dded735a2f1a16a31973fa623a29000c6e8e0fea) fixed: [MySQL] link +- [d9cd2a8](https://github.com/williamdes/mariadb-mysql-kbs/commit/d9cd2a8123a67d6adfddf0414988b98fcac9f082) fixed: bug in MariaDB script + + +[v1.2.13]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.12...v1.2.13 +[v1.2.12]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.11...v1.2.12 +[v1.2.11]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.10...v1.2.11 +[v1.2.10]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.9...v1.2.10 +[v1.2.9]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.8...v1.2.9 +[v1.2.8]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.7...v1.2.8 +[v1.2.7]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.6...v1.2.7 +[v1.2.6]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.5...v1.2.6 +[v1.2.5]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.4...v1.2.5 +[v1.2.4]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.3...v1.2.4 +[v1.2.3]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.2...v1.2.3 +[v1.2.2]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.1...v1.2.2 +[v1.2.1]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.0...v1.2.1 +[v1.2.0]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.1.0...v1.2.0 +[v1.1.0]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.0.0...v1.1.0 +[v1.0.0]: https://github.com/williamdes/mariadb-mysql-kbs/compare/28e9e010dc027dee17a55f5eedad776dcf983e95...v1.0.0 + diff --git a/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/README.md b/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/README.md new file mode 100644 index 0000000..7019101 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/README.md @@ -0,0 +1,54 @@ +# An index of the MariaDB and MySQL Knowledge bases + +[![Actions Status](https://github.com/williamdes/mariadb-mysql-kbs/workflows/Run%20tests/badge.svg)](https://github.com/williamdes/mariadb-mysql-kbs/actions) +[![Actions Status](https://github.com/williamdes/mariadb-mysql-kbs/workflows/Lint%20and%20analyse%20files/badge.svg)](https://github.com/williamdes/mariadb-mysql-kbs/actions) +[![Codacy Badge](https://app.codacy.com/project/badge/Grade/e89ffd4b2c8a4f14ae98c282c8934f31)](https://www.codacy.com/gh/williamdes/mariadb-mysql-kbs/dashboard?utm_source=github.com&utm_medium=referral&utm_content=williamdes/mariadb-mysql-kbs&utm_campaign=Badge_Grade) +[![codecov](https://codecov.io/gh/williamdes/mariadb-mysql-kbs/branch/main/graph/badge.svg)](https://codecov.io/gh/williamdes/mariadb-mysql-kbs) +[![License](https://poser.pugx.org/williamdes/mariadb-mysql-kbs/license)](https://packagist.org/packages/williamdes/mariadb-mysql-kbs) +[![Latest Stable Version](https://poser.pugx.org/williamdes/mariadb-mysql-kbs/v/stable)](https://packagist.org/packages/williamdes/mariadb-mysql-kbs) +[![npm version](https://badge.fury.io/js/mariadb-mysql-kbs.svg)](https://badge.fury.io/js/mariadb-mysql-kbs) +[![Total alerts](https://img.shields.io/lgtm/alerts/g/williamdes/mariadb-mysql-kbs.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/williamdes/mariadb-mysql-kbs/alerts/) +[![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/williamdes/mariadb-mysql-kbs.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/williamdes/mariadb-mysql-kbs/context:javascript) +[![Known Vulnerabilities](https://snyk.io/test/github/williamdes/mariadb-mysql-kbs/badge.svg)](https://snyk.io/test/github/williamdes/mariadb-mysql-kbs) +[![Dependabot](https://badgen.net/badge/Dependabot/enabled/green?icon=dependabot)](https://dependabot.com/) +[![dependencies Status](https://david-dm.org/williamdes/mariadb-mysql-kbs/status.svg)](https://david-dm.org/williamdes/mariadb-mysql-kbs) + +[API doc](https://williamdes.github.io/mariadb-mysql-kbs/Williamdes/MariaDBMySQLKBS.html) + +### In this respository you can find some data from knowledge bases + +Raw extracted data : `/data/` + +Merged data : `/dist/` + +### Merged data +- JSON format (raw, slim, ultraslim) +- PHP format (ultraslim) + +### Update the data + +```bash +yarn run build +``` + +```bash +composer run build +``` + +### Install + +```bash +composer require williamdes/mariadb-mysql-kbs +``` + +```bash +npm install --save mariadb-mysql-kbs +``` + +```bash +yarn add mariadb-mysql-kbs +``` + +### Packaging status + +[![Packaging status](https://repology.org/badge/vertical-allrepos/mariadb-mysql-kbs.svg)](https://repology.org/project/mariadb-mysql-kbs/versions) diff --git a/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/src/Search.php b/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/src/Search.php new file mode 100644 index 0000000..7896a24 --- /dev/null +++ b/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/src/Search.php @@ -0,0 +1,185 @@ +a)) { + foreach ($kbEntries->a as $kbEntry) { + if ($type === Search::ANY) { + return Search::$data->urls[$kbEntry->u] . '#' . $kbEntry->a; + } elseif ($type === Search::MYSQL) { + if ($kbEntry->t === Search::MYSQL) { + return Search::$data->urls[$kbEntry->u] . '#' . $kbEntry->a; + } + } elseif ($type === Search::MARIADB) { + if ($kbEntry->t === Search::MARIADB) { + return Search::$data->urls[$kbEntry->u] . '#' . $kbEntry->a; + } + } + } + } + + throw new KBException($name . ' does not exist for this type of documentation !'); + } + + /** + * Get a variable + * + * @param string $name Name of variable + * @return stdClass + * @throws KBException + */ + public static function getVariable(string $name): stdClass + { + self::loadData(); + if (isset(Search::$data->vars->{$name})) { + return Search::$data->vars->{$name}; + } else { + throw new KBException($name . ' does not exist !'); + } + } + + /** + * get the type of the variable + * + * @param string $name Name of variable + * @return string + * @throws KBException + */ + public static function getVariableType(string $name): string + { + self::loadData(); + $kbEntry = self::getVariable($name); + if (isset($kbEntry->t)) { + return Search::$data->varTypes->{$kbEntry->t}; + } else { + throw new KBException($name . ' does have a known type !'); + } + } + + /** + * Return the list of static variables + * + * @return array + */ + public static function getStaticVariables(): array + { + return self::getVariablesWithDynamic(false); + } + + /** + * Return the list of dynamic variables + * + * @return array + */ + public static function getDynamicVariables(): array + { + return self::getVariablesWithDynamic(true); + } + + /** + * Return the list of variables having dynamic = $dynamic + * + * @param bool $dynamic dynamic=true/dynamic=false + * @return array + */ + public static function getVariablesWithDynamic(bool $dynamic): array + { + self::loadData(); + $staticVars = []; + foreach (Search::$data->vars as $name => $var) { + if (isset($var->d)) { + if ($var->d === $dynamic) { + $staticVars[] = $name; + } + } + } + return $staticVars; + } + +} From 698735d1d57d1b03552963fb0b980b5e0b7dd00b Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 21:10:06 +0100 Subject: [PATCH 090/107] .drone.yml update --- .drone.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.drone.yml b/.drone.yml index b60aeff..7b752c9 100644 --- a/.drone.yml +++ b/.drone.yml @@ -83,11 +83,5 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_PASSWORD: from_secret: db_password - networks: - - php_script depends_on: [ php_script ] -networks : - network_mode : open - external : true - name : php_script \ No newline at end of file From 8261371867f43f13cec5804f303073ab5068c27f Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 21:15:14 +0100 Subject: [PATCH 091/107] Remove the try --- .../script/phpMyAdmin/config.sample.inc.php | 160 - .../phpMyAdmin/dafldev/.idea/dafldev.iml | 8 - .../script/phpMyAdmin/dafldev/config.php | 14 - .../script/phpMyAdmin/dafldev/db.php | 10 - .../script/phpMyAdmin/dafldev/distance.php | 61 - .../doc/html/_images/line_chart.png | Bin 12716 -> 0 bytes .../html/_images/query_result_operations.png | Bin 6750 -> 0 bytes .../doc/html/_images/scatter_chart.png | Bin 8451 -> 0 bytes .../phpMyAdmin/doc/html/_sources/faq.rst.txt | 2251 -- .../doc/html/_sources/glossary.rst.txt | 440 - .../doc/html/_sources/privileges.rst.txt | 74 - .../doc/html/_sources/setup.rst.txt | 1166 - .../doc/html/_sources/transformations.rst.txt | 158 - .../doc/html/_sources/two_factor.rst.txt | 69 - .../phpMyAdmin/doc/html/_static/classic.css | 266 - .../doc/html/_static/language_data.js | 297 - .../script/phpMyAdmin/doc/html/config.html | 6161 ---- .../script/phpMyAdmin/doc/html/copyright.html | 143 - .../script/phpMyAdmin/doc/html/faq.html | 2000 -- .../script/phpMyAdmin/doc/html/genindex.html | 2407 -- .../script/phpMyAdmin/doc/html/other.html | 149 - .../phpMyAdmin/doc/html/transformations.html | 251 - .../script/phpMyAdmin/doc/html/vendors.html | 158 - .../script/phpMyAdmin/js/dist/common.js | 176 - .../script/phpMyAdmin/js/dist/console.js | 1591 - .../js/dist/cross_framing_protection.js | 13 - .../phpMyAdmin/js/dist/database/events.js | 611 - .../phpMyAdmin/js/dist/database/operations.js | 170 - .../js/dist/database/query_generator.js | 147 - .../phpMyAdmin/js/dist/database/search.js | 260 - .../phpMyAdmin/js/dist/database/tracking.js | 105 - .../phpMyAdmin/js/dist/designer/init.js | 74 - .../phpMyAdmin/js/dist/designer/page.js | 208 - .../phpMyAdmin/js/dist/export_output.js | 12 - .../phpMyAdmin/js/dist/gis_data_editor.js | 368 - .../script/phpMyAdmin/js/dist/indexes.js | 795 - .../script/phpMyAdmin/js/dist/menu_resizer.js | 208 - .../phpMyAdmin/js/dist/server/privileges.js | 455 - .../js/dist/server/status/monitor.js | 2281 -- .../js/dist/server/status/variables.js | 96 - .../phpMyAdmin/js/dist/server/user_groups.js | 35 - .../script/phpMyAdmin/js/dist/table/change.js | 836 - .../script/phpMyAdmin/js/dist/table/chart.js | 435 - .../script/phpMyAdmin/js/dist/table/select.js | 310 - .../js/dist/transformations/sql_editor.js | 10 - .../script/phpMyAdmin/js/dist/u2f.js | 90 - .../js/src/cross_framing_protection.js | 13 - .../phpMyAdmin/js/src/database/search.js | 261 - .../phpMyAdmin/js/src/database/tracking.js | 93 - .../phpMyAdmin/js/src/database/triggers.js | 530 - .../script/phpMyAdmin/js/src/designer/page.js | 178 - .../script/phpMyAdmin/js/src/import.js | 154 - .../script/phpMyAdmin/js/src/indexes.js | 819 - .../script/phpMyAdmin/js/src/makegrid.js | 2324 -- .../script/phpMyAdmin/js/src/normalization.js | 792 - .../script/phpMyAdmin/js/src/replication.js | 106 - .../phpMyAdmin/js/src/server/plugins.js | 15 - .../js/src/server/status/queries.js | 45 - .../script/phpMyAdmin/js/src/setup/scripts.js | 241 - .../script/phpMyAdmin/js/src/sql.js | 1090 - .../phpMyAdmin/js/src/table/find_replace.js | 46 - .../phpMyAdmin/js/src/table/relation.js | 255 - .../js/src/transformations/sql_editor.js | 10 - .../vendor/bootstrap/bootstrap.bundle.min.js | 7 - .../codemirror/addon/runmode/runmode.js | 76 - .../plugins/jqplot.canvasAxisLabelRenderer.js | 203 - .../jqplot/plugins/jqplot.highlighter.js | 484 - .../js/vendor/jquery/MIT-LICENSE.txt | 20 - .../js/vendor/jquery/jquery.debounce-1.0.6.js | 82 - .../js/vendor/openlayers/OpenLayers.js | 9 - .../js/vendor/openlayers/theme/ol.css | 285 - .../phpMyAdmin/js/vendor/zxcvbn-ts.js.map | 1 - .../advisory_rules_mysql_before80003.php | 122 - .../classes/Command/TwigLintCommand.php | 271 - .../libraries/classes/Config/FormDisplay.php | 889 - .../classes/Config/FormDisplayTemplate.php | 177 - .../classes/Config/Forms/BaseForm.php | 86 - .../classes/Config/Forms/Page/ExportForm.php | 12 - .../classes/Config/Forms/Page/NaviForm.php | 12 - .../classes/Config/Forms/Setup/ConfigForm.php | 26 - .../classes/Config/Forms/User/ExportForm.php | 155 - .../classes/Config/Forms/User/SqlForm.php | 50 - .../classes/Config/ServerConfigChecks.php | 553 - .../classes/Config/Settings/Console.php | 205 - .../classes/Config/Settings/Debug.php | 82 - .../classes/Config/Settings/Import.php | 489 - .../Config/Settings/Transformations.php | 391 - .../classes/Config/SpecialSchemaLinks.php | 485 - .../Features/BookmarkFeature.php | 26 - .../Features/ExportTemplatesFeature.php | 26 - .../Features/FavoriteTablesFeature.php | 26 - .../Features/SqlHistoryFeature.php | 26 - .../Features/TrackingFeature.php | 26 - .../classes/ConfigStorage/Relation.php | 1813 -- .../Controllers/CheckRelationsController.php | 69 - .../CollationConnectionController.php | 34 - .../Controllers/Database/EventsController.php | 86 - .../Database/PrivilegesController.php | 63 - .../Database/QueryByExampleController.php | 168 - .../Controllers/Database/SearchController.php | 85 - .../Database/SqlFormatController.php | 22 - .../Structure/AddPrefixTableController.php | 64 - .../CentralColumns/AddController.php | 59 - .../Structure/CopyTableController.php | 72 - .../CopyTableWithPrefixController.php | 67 - .../Database/Structure/DropFormController.php | 81 - .../Structure/EmptyTableController.php | 118 - .../Structure/FavoriteTableController.php | 184 - .../Database/TriggersController.php | 87 - .../Controllers/ErrorReportController.php | 164 - .../Export/Template/LoadController.php | 62 - .../Controllers/Import/StatusController.php | 83 - .../classes/Controllers/LicenseController.php | 42 - .../Preferences/ImportController.php | 114 - .../Preferences/MainPanelController.php | 114 - .../Preferences/TwoFactorController.php | 77 - .../Server/CollationsController.php | 80 - .../Controllers/Server/ExportController.php | 95 - .../Controllers/Server/PluginsController.php | 75 - .../Privileges/AccountUnlockController.php | 52 - .../Server/ReplicationController.php | 109 - .../Server/Status/AdvisorController.php | 35 - .../Monitor/QueryAnalyzerController.php | 60 - .../Variables/GetVariableController.php | 62 - .../Controllers/Setup/ConfigController.php | 40 - .../Controllers/Setup/ServersController.php | 70 - .../Sql/RelationalValuesController.php | 57 - .../Controllers/Table/ChartController.php | 229 - .../Table/DeleteConfirmController.php | 46 - .../DropColumnConfirmationController.php | 42 - .../Controllers/Table/ExportController.php | 132 - .../Table/FindReplaceController.php | 360 - .../Table/IndexRenameController.php | 100 - .../Table/OperationsController.php | 499 - .../Table/Partition/AnalyzeController.php | 66 - .../Table/RecentFavoriteController.php | 27 - .../Table/Structure/BrowseController.php | 84 - .../Structure/PartitioningController.php | 282 - .../Structure/ReservedWordCheckController.php | 56 - .../Controllers/Table/TriggersController.php | 92 - .../classes/Controllers/TableController.php | 34 - .../Controllers/VersionCheckController.php | 49 - .../Controllers/View/CreateController.php | 276 - .../Controllers/View/OperationsController.php | 115 - .../libraries/classes/Crypto/Crypto.php | 67 - .../libraries/classes/Database/Search.php | 316 - .../libraries/classes/Dbal/DbiExtension.php | 143 - .../libraries/classes/Dbal/MysqliResult.php | 276 - .../classes/Dbal/ResultInterface.php | 111 - .../libraries/classes/Dbal/TableName.php | 66 - .../phpMyAdmin/libraries/classes/Encoding.php | 354 - .../libraries/classes/Engines/Binlog.php | 27 - .../libraries/classes/Engines/Memory.php | 28 - .../phpMyAdmin/libraries/classes/Error.php | 549 - .../libraries/classes/Export/Options.php | 236 - .../libraries/classes/Export/Template.php | 70 - .../libraries/classes/FieldMetadata.php | 448 - .../phpMyAdmin/libraries/classes/Font.php | 244 - .../phpMyAdmin/libraries/classes/Header.php | 675 - .../phpMyAdmin/libraries/classes/Language.php | 209 - .../classes/Navigation/NodeFactory.php | 122 - .../classes/Navigation/Nodes/Node.php | 877 - .../classes/Navigation/Nodes/NodeColumn.php | 120 - .../Nodes/NodeFunctionContainer.php | 48 - .../Navigation/Nodes/NodeProcedure.php | 52 - .../Navigation/Nodes/NodeTableContainer.php | 43 - .../Navigation/Nodes/NodeTriggerContainer.php | 42 - .../libraries/classes/Normalization.php | 1160 - .../libraries/classes/OutputBuffering.php | 174 - .../classes/Partitioning/SubPartition.php | 154 - .../Partitioning/TablePartitionDefinition.php | 198 - .../classes/Plugins/Export/ExportOds.php | 325 - .../classes/Plugins/Export/ExportSql.php | 2848 -- .../classes/Plugins/Export/ExportTexytext.php | 625 - .../Plugins/Import/ImportMediawiki.php | 591 - .../classes/Plugins/Import/ImportSql.php | 193 - .../Plugins/Import/ShapeFileImport.php | 39 - .../Plugins/Import/Upload/UploadNoplugin.php | 61 - .../Plugins/Import/Upload/UploadProgress.php | 101 - .../classes/Plugins/ImportPlugin.php | 97 - .../Plugins/Schema/Dia/DiaRelationSchema.php | 236 - .../classes/Plugins/SchemaPlugin.php | 99 - .../Abs/Bool2TextTransformationsPlugin.php | 65 - .../Abs/FormattedTransformationsPlugin.php | 62 - .../Abs/HexTransformationsPlugin.php | 71 - .../Abs/InlineTransformationsPlugin.php | 76 - .../Abs/LongToIPv4TransformationsPlugin.php | 60 - .../Abs/PreApPendTransformationsPlugin.php | 65 - .../RegexValidationTransformationsPlugin.php | 73 - .../Abs/SQLTransformationsPlugin.php | 56 - .../TextFileUploadTransformationsPlugin.php | 98 - .../Input/Text_Plain_Iptobinary.php | 135 - .../Input/Text_Plain_Iptolong.php | 127 - .../Input/Text_Plain_RegexValidation.php | 37 - .../Input/Text_Plain_XmlEditor.php | 78 - .../Application_Octetstream_Download.php | 36 - .../Output/Image_JPEG_Link.php | 36 - .../Output/Text_Plain_Dateformat.php | 36 - .../Output/Text_Plain_Formatted.php | 36 - .../Output/Text_Plain_Imagelink.php | 36 - .../Output/Text_Plain_Json.php | 94 - .../Transformations/Output/Text_Plain_Xml.php | 94 - .../classes/Plugins/TransformationsPlugin.php | 64 - .../classes/Plugins/TwoFactor/Key.php | 216 - .../classes/Plugins/TwoFactorPlugin.php | 183 - .../Options/Items/TextPropertyItem.php | 28 - .../Options/OptionsPropertyGroup.php | 101 - .../Plugins/ExportPluginProperties.php | 52 - .../Properties/Plugins/PluginPropertyItem.php | 170 - .../classes/Properties/PropertyItem.php | 44 - .../libraries/classes/Query/Cache.php | 107 - .../libraries/classes/Query/Utilities.php | 200 - .../libraries/classes/Replication.php | 171 - .../libraries/classes/ReplicationInfo.php | 191 - .../libraries/classes/ResponseRenderer.php | 508 - .../libraries/classes/Server/Plugin.php | 207 - .../libraries/classes/Server/Select.php | 120 - .../libraries/classes/Server/Status/Data.php | 456 - .../classes/Server/Status/Monitor.php | 549 - .../libraries/classes/Server/SysInfo/Base.php | 48 - .../classes/Server/SysInfo/Linux.php | 115 - .../classes/Setup/FormProcessing.php | 80 - .../phpMyAdmin/libraries/classes/Sql.php | 1811 -- .../libraries/classes/StorageEngine.php | 547 - .../libraries/classes/Table/Maintenance.php | 184 - .../libraries/classes/Table/Search.php | 353 - .../phpMyAdmin/libraries/classes/Template.php | 158 - .../phpMyAdmin/libraries/classes/Theme.php | 334 - .../classes/Twig/RelationExtension.php | 49 - .../libraries/classes/UserPassword.php | 217 - .../classes/Utils/FormatConverter.php | 96 - .../libraries/classes/Utils/SessionCache.php | 58 - .../libraries/classes/ZipExtension.php | 334 - .../phpMyAdmin/libraries/config.default.php | 3125 -- .../script/phpMyAdmin/libraries/routes.php | 286 - .../locale/bn/LC_MESSAGES/phpmyadmin.mo | Bin 342211 -> 0 bytes .../locale/el/LC_MESSAGES/phpmyadmin.mo | Bin 469435 -> 0 bytes .../locale/he/LC_MESSAGES/phpmyadmin.mo | Bin 141077 -> 0 bytes .../locale/ia/LC_MESSAGES/phpmyadmin.mo | Bin 258356 -> 0 bytes .../locale/si/LC_MESSAGES/phpmyadmin.mo | Bin 235642 -> 0 bytes .../locale/tr/LC_MESSAGES/phpmyadmin.mo | Bin 392243 -> 0 bytes .../locale/zh_TW/LC_MESSAGES/phpmyadmin.mo | Bin 333827 -> 0 bytes .../php_script/script/phpMyAdmin/package.json | 62 - .../script/phpMyAdmin/setup/config.php | 54 - .../script/phpMyAdmin/setup/styles.css.map | 1 - .../columns_definitions/column_name.twig | 42 - .../columns_definitions/partitions.twig | 180 - .../templates/components/error_message.twig | 4 - .../database/central_columns/edit.twig | 25 - .../central_columns/edit_table_row.twig | 85 - .../database/designer/schema_export.twig | 18 - .../database/events/editor_form.twig | 119 - .../templates/database/events/row.twig | 56 - .../database/multi_table_query/form.twig | 179 - .../templates/database/operations/index.twig | 230 - .../database/routines/editor_form.twig | 180 - .../database/routines/parameter_row.twig | 54 - .../templates/database/search/main.twig | 95 - .../database/structure/overhead.twig | 4 - .../structure/structure_table_row.twig | 226 - .../templates/database/tracking/tables.twig | 192 - .../templates/database/triggers/list.twig | 59 - .../templates/display/results/table.twig | 304 - .../templates/error/report_form.twig | 36 - .../script/phpMyAdmin/templates/filter.twig | 9 - .../templates/modals/unhide_nav_item.twig | 14 - .../templates/navigation/tree/node.twig | 68 - .../templates/navigation/tree/quick_warp.twig | 5 - .../templates/preferences/autoload.twig | 15 - .../preferences/two_factor/configure.twig | 17 - .../preferences/two_factor/confirm.twig | 18 - .../recent_favorite_table_recent.twig | 7 - .../phpMyAdmin/templates/select_all.twig | 6 - .../templates/server/binlog/index.twig | 107 - .../templates/server/engines/index.twig | 33 - .../templates/server/privileges/add_user.twig | 38 - .../server/privileges/change_password.twig | 72 - .../server/privileges/get_user_link.twig | 11 - .../server/privileges/initials_row.twig | 20 - .../privileges/login_information_fields.twig | 91 - .../server/privileges/new_user_ajax.twig | 66 - .../server/privileges/privileges_summary.twig | 104 - .../server/privileges/user_properties.twig | 152 - .../server/privileges/users_overview.twig | 182 - .../replication/primary_add_replica_user.twig | 84 - .../server/status/processes/index.twig | 61 - .../server/status/processes/list.twig | 65 - .../server/user_groups/edit_user_groups.twig | 23 - .../templates/server/variables/index.twig | 83 - .../templates/setup/servers/index.twig | 20 - .../templates/sql/sql_query_results.twig | 8 - .../templates/table/chart/tbl_chart.twig | 155 - .../templates/table/delete/confirm.twig | 32 - .../table/find_replace/replace_preview.twig | 39 - .../gis_visualization/gis_visualization.twig | 62 - .../templates/table/import/index.twig | 3 - .../templates/table/maintenance/check.twig | 41 - .../templates/table/maintenance/optimize.twig | 39 - .../templates/table/operations/view.twig | 49 - .../templates/table/partition/optimize.twig | 36 - .../templates/table/relation/common_form.twig | 244 - .../templates/table/search/index.twig | 203 - .../table/structure/display_structure.twig | 614 - .../tracking/structure_snapshot_columns.twig | 56 - .../templates/test/gettext/notes.twig | 5 - .../templates/test/gettext/pgettext.twig | 5 - .../phpMyAdmin/templates/test/raw_output.twig | 2 - .../phpMyAdmin/templates/test/static.twig | 1 - .../script/phpMyAdmin/templates/top_menu.twig | 22 - .../phpMyAdmin/templates/user_password.twig | 2 - .../phpMyAdmin/themes/bootstrap/css/theme.css | 3 - .../themes/bootstrap/img/arrow_ltr.png | Bin 101 -> 0 bytes .../themes/bootstrap/img/asc_order.png | Bin 146 -> 0 bytes .../themes/bootstrap/img/b_dbstatistics.png | Bin 449 -> 0 bytes .../themes/bootstrap/img/b_docsql.png | Bin 133 -> 0 bytes .../phpMyAdmin/themes/bootstrap/img/b_key.png | Bin 294 -> 0 bytes .../themes/bootstrap/img/b_lastpage.png | Bin 661 -> 0 bytes .../themes/bootstrap/img/b_left.png | Bin 114 -> 0 bytes .../themes/bootstrap/img/b_tipp.png | Bin 696 -> 0 bytes .../themes/bootstrap/img/bd_drop.png | Bin 340 -> 0 bytes .../themes/bootstrap/img/bd_firstpage.png | Bin 405 -> 0 bytes .../themes/bootstrap/img/bd_lastpage.png | Bin 402 -> 0 bytes .../themes/bootstrap/img/bd_spatial.png | Bin 243 -> 0 bytes .../phpMyAdmin/themes/bootstrap/img/col.svg | 1 - .../themes/bootstrap/img/col_drop.png | Bin 111 -> 0 bytes .../themes/bootstrap/img/col_pointer.png | Bin 102 -> 0 bytes .../themes/bootstrap/img/col_pointer_ver.png | Bin 107 -> 0 bytes .../themes/bootstrap/img/console.svg | 1 - .../themes/bootstrap/img/database-minus.svg | 1 - .../themes/bootstrap/img/database-plus.svg | 1 - .../themes/bootstrap/img/designer/1.png | Bin 90 -> 0 bytes .../themes/bootstrap/img/designer/4.png | Bin 141 -> 0 bytes .../themes/bootstrap/img/designer/7.png | Bin 94 -> 0 bytes .../bootstrap/img/designer/Field_small.png | Bin 240 -> 0 bytes .../bootstrap/img/designer/and_icon.png | Bin 715 -> 0 bytes .../themes/bootstrap/img/designer/bord.png | Bin 75 -> 0 bytes .../themes/bootstrap/img/designer/bottom.png | Bin 646 -> 0 bytes .../bootstrap/img/designer/downarrow1.png | Bin 671 -> 0 bytes .../themes/bootstrap/img/designer/favicon.ico | Bin 1150 -> 0 bytes .../themes/bootstrap/img/designer/grid.png | Bin 602 -> 0 bytes .../themes/bootstrap/img/designer/help.png | Bin 654 -> 0 bytes .../themes/bootstrap/img/designer/or_icon.png | Bin 549 -> 0 bytes .../bootstrap/img/designer/other_table.png | Bin 558 -> 0 bytes .../themes/bootstrap/img/designer/pdf.png | Bin 798 -> 0 bytes .../themes/bootstrap/img/designer/reload.png | Bin 762 -> 0 bytes .../bootstrap/img/designer/rightarrow2.png | Bin 666 -> 0 bytes .../bootstrap/img/designer/top_panel.png | Bin 125 -> 0 bytes .../themes/bootstrap/img/export.svg | 1 - .../themes/bootstrap/img/field-index-text.svg | 1 - .../themes/bootstrap/img/flag-plus.svg | 1 - .../phpMyAdmin/themes/bootstrap/img/flag.svg | 1 - .../themes/bootstrap/img/lightbulb.png | Bin 696 -> 0 bytes .../themes/bootstrap/img/link-broken.svg | 1 - .../themes/bootstrap/img/new_data.png | Bin 260 -> 0 bytes .../img/new_data_selected_hovered.png | Bin 180 -> 0 bytes .../themes/bootstrap/img/new_struct.png | Bin 293 -> 0 bytes .../bootstrap/img/new_struct_selected.png | Bin 188 -> 0 bytes .../img/new_struct_selected_hovered.png | Bin 196 -> 0 bytes .../themes/bootstrap/img/notice.svg | 1 - .../themes/bootstrap/img/pma_logo2.png | Bin 1366 -> 0 bytes .../themes/bootstrap/img/replication.svg | 1 - .../themes/bootstrap/img/routine-plus.svg | 1 - .../themes/bootstrap/img/routine.svg | 1 - .../themes/bootstrap/img/s_really.png | Bin 128 -> 0 bytes .../phpMyAdmin/themes/bootstrap/img/save.svg | 1 - .../themes/bootstrap/img/search-replace.svg | 1 - .../phpMyAdmin/themes/bootstrap/img/table.svg | 1 - .../themes/bootstrap/img/tree-collapse.svg | 1 - .../themes/bootstrap/img/triangle-right-1.svg | 1 - .../themes/bootstrap/img/user-props.svg | 1 - .../themes/bootstrap/img/version.svg | 1 - .../themes/bootstrap/img/vertical_line.png | Bin 67 -> 0 bytes .../bootstrap/img/visibility-hidden.svg | 1 - .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 121 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 122 -> 0 bytes .../jquery/images/ui-icons_888888_256x240.png | Bin 3765 -> 0 bytes .../jquery/images/ui-icons_cd0a0a_256x240.png | Bin 3765 -> 0 bytes .../themes/bootstrap/jquery/jquery-ui.css | 1312 - .../themes/metro/css/mono-theme.rtl.css | 2 - .../phpMyAdmin/themes/metro/css/theme.css | 3 - .../themes/metro/img/ajax_clock_small.gif | Bin 1810 -> 0 bytes .../phpMyAdmin/themes/metro/img/arrow_ltr.png | Bin 147 -> 0 bytes .../phpMyAdmin/themes/metro/img/arrow_rtl.png | Bin 145 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_chart.png | Bin 174 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_close.png | Bin 156 -> 0 bytes .../themes/metro/img/b_column_add.png | Bin 1171 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_edit.png | Bin 1073 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_empty.png | Bin 169 -> 0 bytes .../themes/metro/img/b_event_add.png | Bin 272 -> 0 bytes .../themes/metro/img/b_favorite.png | Bin 351 -> 0 bytes .../themes/metro/img/b_find_replace.png | Bin 641 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_home.png | Bin 172 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_key.png | Bin 1063 -> 0 bytes .../themes/metro/img/b_lastpage.png | Bin 164 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_more.png | Bin 146 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_move.png | Bin 1202 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_pdfdoc.png | Bin 234 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_plus.png | Bin 130 -> 0 bytes .../themes/metro/img/b_routine_add.png | Bin 285 -> 0 bytes .../themes/metro/img/b_saveimage.png | Bin 597 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_sbrowse.png | Bin 162 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_sqldoc.png | Bin 166 -> 0 bytes .../themes/metro/img/b_tblanalyse.png | Bin 171 -> 0 bytes .../themes/metro/img/b_tbloptimize.png | Bin 175 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_unique.png | Bin 1067 -> 0 bytes .../phpMyAdmin/themes/metro/img/b_usrlist.png | Bin 245 -> 0 bytes .../themes/metro/img/b_versions.png | Bin 446 -> 0 bytes .../phpMyAdmin/themes/metro/img/bd_empty.png | Bin 177 -> 0 bytes .../phpMyAdmin/themes/metro/img/bd_insrow.png | Bin 188 -> 0 bytes .../themes/metro/img/bd_lastpage.png | Bin 161 -> 0 bytes .../themes/metro/img/bd_primary.png | Bin 147 -> 0 bytes .../themes/metro/img/bd_spatial.png | Bin 167 -> 0 bytes .../themes/metro/img/centralColumns_add.png | Bin 635 -> 0 bytes .../metro/img/centralColumns_delete.png | Bin 649 -> 0 bytes .../themes/metro/img/col_pointer.png | Bin 981 -> 0 bytes .../phpMyAdmin/themes/metro/img/database.png | Bin 1069 -> 0 bytes .../themes/metro/img/designer/2leftarrow.png | Bin 2842 -> 0 bytes .../themes/metro/img/designer/2rightarrow.png | Bin 991 -> 0 bytes .../metro/img/designer/2rightarrow_m.png | Bin 991 -> 0 bytes .../themes/metro/img/designer/anchor.png | Bin 503 -> 0 bytes .../themes/metro/img/designer/ang_direct.png | Bin 3617 -> 0 bytes .../metro/img/designer/display_field.png | Bin 983 -> 0 bytes .../themes/metro/img/designer/downarrow2.png | Bin 1093 -> 0 bytes .../themes/metro/img/designer/exec.png | Bin 1365 -> 0 bytes .../themes/metro/img/designer/export.png | Bin 735 -> 0 bytes .../themes/metro/img/designer/grid.png | Bin 3598 -> 0 bytes .../themes/metro/img/designer/help.png | Bin 1092 -> 0 bytes .../metro/img/designer/left_panel_tab.png | Bin 133 -> 0 bytes .../themes/metro/img/designer/minus.png | Bin 1413 -> 0 bytes .../themes/metro/img/designer/page_delete.png | Bin 630 -> 0 bytes .../themes/metro/img/designer/pdf.png | Bin 1119 -> 0 bytes .../metro/img/designer/toggle_lines.png | Bin 3595 -> 0 bytes .../metro/img/designer/viewInFullscreen.png | Bin 1180 -> 0 bytes .../phpMyAdmin/themes/metro/img/eye_grey.png | Bin 366 -> 0 bytes .../phpMyAdmin/themes/metro/img/lightbulb.png | Bin 609 -> 0 bytes .../phpMyAdmin/themes/metro/img/more.png | Bin 986 -> 0 bytes .../themes/metro/img/new_struct_hovered.png | Bin 303 -> 0 bytes .../phpMyAdmin/themes/metro/img/normalize.png | Bin 472 -> 0 bytes .../phpMyAdmin/themes/metro/img/s_asc.png | Bin 165 -> 0 bytes .../themes/metro/img/s_attention.png | Bin 233 -> 0 bytes .../phpMyAdmin/themes/metro/img/s_cancel.png | Bin 168 -> 0 bytes .../phpMyAdmin/themes/metro/img/s_link.png | Bin 386 -> 0 bytes .../phpMyAdmin/themes/metro/img/s_notice.png | Bin 1060 -> 0 bytes .../phpMyAdmin/themes/metro/img/s_success.png | Bin 1031 -> 0 bytes .../phpMyAdmin/themes/metro/img/s_top.png | Bin 2949 -> 0 bytes .../phpMyAdmin/themes/metro/img/s_vars.png | Bin 189 -> 0 bytes .../phpMyAdmin/themes/metro/img/sprites.png | Bin 22313 -> 0 bytes .../themes/metro/img/zoom-plus-mini.png | Bin 329 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 74 -> 0 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 121 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 187 -> 0 bytes .../jquery/images/ui-icons_2e83ff_256x240.png | Bin 4261 -> 0 bytes .../jquery/images/ui-icons_888888_256x240.png | Bin 4262 -> 0 bytes .../phpMyAdmin/themes/metro/scss/_card.scss | 33 - .../phpMyAdmin/themes/metro/scss/_font.scss | 27 - .../phpMyAdmin/themes/metro/scss/_print.scss | 130 - .../themes/metro/scss/_variables.scss | 279 - .../themes/metro/scss/blueeyes-theme.scss | 3 - .../script/phpMyAdmin/themes/metro/theme.json | 8 - .../themes/original/css/theme.css.map | 1 - .../themes/original/css/theme.rtl.css | 2 - .../themes/original/img/arrow_ltr.png | Bin 101 -> 0 bytes .../themes/original/img/b_calendar.png | Bin 165 -> 0 bytes .../themes/original/img/b_close.png | Bin 153 -> 0 bytes .../themes/original/img/b_column_add.png | Bin 429 -> 0 bytes .../themes/original/img/b_comment.png | Bin 298 -> 0 bytes .../themes/original/img/b_deltbl.png | Bin 211 -> 0 bytes .../themes/original/img/b_export.png | Bin 154 -> 0 bytes .../themes/original/img/b_globe.gif | Bin 1045 -> 0 bytes .../phpMyAdmin/themes/original/img/b_home.png | Bin 210 -> 0 bytes .../themes/original/img/b_index_add.png | Bin 313 -> 0 bytes .../themes/original/img/b_insrow.png | Bin 157 -> 0 bytes .../phpMyAdmin/themes/original/img/b_key.png | Bin 152 -> 0 bytes .../phpMyAdmin/themes/original/img/b_move.png | Bin 151 -> 0 bytes .../themes/original/img/b_primary.png | Bin 239 -> 0 bytes .../themes/original/img/b_relations.png | Bin 140 -> 0 bytes .../themes/original/img/b_routines.png | Bin 306 -> 0 bytes .../phpMyAdmin/themes/original/img/b_save.png | Bin 583 -> 0 bytes .../themes/original/img/b_saveimage.png | Bin 675 -> 0 bytes .../themes/original/img/b_select.png | Bin 339 -> 0 bytes .../themes/original/img/b_spatial.png | Bin 376 -> 0 bytes .../themes/original/img/b_table_add.png | Bin 265 -> 0 bytes .../themes/original/img/b_tblanalyse.png | Bin 152 -> 0 bytes .../phpMyAdmin/themes/original/img/b_tipp.png | Bin 163 -> 0 bytes .../themes/original/img/b_trigger_add.png | Bin 555 -> 0 bytes .../themes/original/img/b_triggers.png | Bin 446 -> 0 bytes .../themes/original/img/b_usrcheck.png | Bin 239 -> 0 bytes .../themes/original/img/b_usrdrop.png | Bin 270 -> 0 bytes .../phpMyAdmin/themes/original/img/b_view.png | Bin 538 -> 0 bytes .../themes/original/img/b_view_add.png | Bin 611 -> 0 bytes .../themes/original/img/b_views.png | Bin 278 -> 0 bytes .../themes/original/img/bd_deltbl.png | Bin 197 -> 0 bytes .../themes/original/img/bd_edit.png | Bin 176 -> 0 bytes .../themes/original/img/bd_export.png | Bin 139 -> 0 bytes .../themes/original/img/bd_index.png | Bin 182 -> 0 bytes .../themes/original/img/bd_insrow.png | Bin 163 -> 0 bytes .../themes/original/img/bd_routine_add.png | Bin 269 -> 0 bytes .../themes/original/img/bd_sbrowse.png | Bin 93 -> 0 bytes .../themes/original/img/bd_select.png | Bin 310 -> 0 bytes .../themes/original/img/centralColumns.png | Bin 586 -> 0 bytes .../themes/original/img/east-mini.png | Bin 287 -> 0 bytes .../phpMyAdmin/themes/original/img/error.ico | Bin 1150 -> 0 bytes .../themes/original/img/logo_right.png | Bin 4306 -> 0 bytes .../original/img/new_struct_selected.png | Bin 188 -> 0 bytes .../themes/original/img/normalize.png | Bin 511 -> 0 bytes .../themes/original/img/north-mini.png | Bin 322 -> 0 bytes .../phpMyAdmin/themes/original/img/s_desc.png | Bin 114 -> 0 bytes .../themes/original/img/s_fulltext.png | Bin 176 -> 0 bytes .../phpMyAdmin/themes/original/img/s_info.png | Bin 116 -> 0 bytes .../phpMyAdmin/themes/original/img/s_lang.png | Bin 253 -> 0 bytes .../phpMyAdmin/themes/original/img/s_link.png | Bin 280 -> 0 bytes .../themes/original/img/s_loggoff.png | Bin 142 -> 0 bytes .../phpMyAdmin/themes/original/img/s_okay.png | Bin 710 -> 0 bytes .../themes/original/img/s_really.png | Bin 128 -> 0 bytes .../phpMyAdmin/themes/original/img/s_sync.png | Bin 454 -> 0 bytes .../themes/original/img/s_theme.png | Bin 488 -> 0 bytes .../themes/original/img/s_unlink.png | Bin 589 -> 0 bytes .../themes/original/img/south-mini.png | Bin 319 -> 0 bytes .../themes/original/img/toggle-rtl.png | Bin 174 -> 0 bytes .../themes/original/img/window-new.png | Bin 468 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 122 -> 0 bytes .../jquery/images/ui-icons_cd0a0a_256x240.png | Bin 3765 -> 0 bytes .../themes/original/jquery/jquery-ui.css | 1312 - .../themes/original/scss/_common.scss | 2711 -- .../themes/original/scss/_reboot.scss | 17 - .../themes/original/scss/_variables.scss | 172 - .../themes/original/scss/theme.scss | 21 - .../phpMyAdmin/themes/original/theme.json | 8 - .../themes/pmahomme/css/theme.css.map | 1 - .../themes/pmahomme/css/theme.rtl.css | 2 - .../themes/pmahomme/img/arrow_ltr.png | Bin 101 -> 0 bytes .../themes/pmahomme/img/arrow_rtl.png | Bin 102 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/b_docs.png | Bin 705 -> 0 bytes .../themes/pmahomme/img/b_docsql.png | Bin 133 -> 0 bytes .../themes/pmahomme/img/b_find_replace.png | Bin 669 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/b_home.png | Bin 734 -> 0 bytes .../themes/pmahomme/img/b_index.png | Bin 643 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/b_key.png | Bin 294 -> 0 bytes .../themes/pmahomme/img/b_lastpage.png | Bin 661 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/b_more.png | Bin 111 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/b_move.png | Bin 381 -> 0 bytes .../themes/pmahomme/img/b_newdb.png | Bin 585 -> 0 bytes .../themes/pmahomme/img/b_no_favorite.png | Bin 377 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/b_plus.png | Bin 143 -> 0 bytes .../themes/pmahomme/img/b_props.png | Bin 573 -> 0 bytes .../themes/pmahomme/img/b_report.png | Bin 555 -> 0 bytes .../themes/pmahomme/img/b_sbrowse.png | Bin 486 -> 0 bytes .../themes/pmahomme/img/b_snewtbl.png | Bin 653 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/b_sql.png | Bin 680 -> 0 bytes .../themes/pmahomme/img/b_sqlhelp.png | Bin 512 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/b_undo.png | Bin 506 -> 0 bytes .../themes/pmahomme/img/bd_drop.png | Bin 340 -> 0 bytes .../themes/pmahomme/img/bd_index.png | Bin 335 -> 0 bytes .../themes/pmahomme/img/bd_insrow.png | Bin 163 -> 0 bytes .../themes/pmahomme/img/bd_sbrowse.png | Bin 271 -> 0 bytes .../themes/pmahomme/img/bd_select.png | Bin 325 -> 0 bytes .../pmahomme/img/centralColumns_delete.png | Bin 683 -> 0 bytes .../themes/pmahomme/img/col_drop.png | Bin 111 -> 0 bytes .../themes/pmahomme/img/col_pointer_ver.png | Bin 107 -> 0 bytes .../themes/pmahomme/img/console.png | Bin 292 -> 0 bytes .../themes/pmahomme/img/designer/1.png | Bin 90 -> 0 bytes .../themes/pmahomme/img/designer/8.png | Bin 81 -> 0 bytes .../pmahomme/img/designer/Field_small.png | Bin 240 -> 0 bytes .../themes/pmahomme/img/designer/and_icon.png | Bin 715 -> 0 bytes .../themes/pmahomme/img/designer/bottom.png | Bin 646 -> 0 bytes .../pmahomme/img/designer/downarrow2.png | Bin 682 -> 0 bytes .../themes/pmahomme/img/designer/favicon.ico | Bin 1150 -> 0 bytes .../themes/pmahomme/img/designer/minus.png | Bin 974 -> 0 bytes .../themes/pmahomme/img/designer/page_add.png | Bin 694 -> 0 bytes .../pmahomme/img/designer/query_builder.png | Bin 603 -> 0 bytes .../themes/pmahomme/img/designer/relation.png | Bin 242 -> 0 bytes .../pmahomme/img/designer/rightarrow2.png | Bin 666 -> 0 bytes .../themes/pmahomme/img/designer/save.png | Bin 402 -> 0 bytes .../pmahomme/img/designer/toggle_lines.png | Bin 415 -> 0 bytes .../pmahomme/img/designer/uparrow2_m.png | Bin 643 -> 0 bytes .../themes/pmahomme/img/lightbulb.png | Bin 696 -> 0 bytes .../themes/pmahomme/img/lightbulb_off.png | Bin 612 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/more.png | Bin 85 -> 0 bytes .../themes/pmahomme/img/new_data.png | Bin 260 -> 0 bytes .../themes/pmahomme/img/new_data_hovered.png | Bin 260 -> 0 bytes .../img/new_data_selected_hovered.png | Bin 180 -> 0 bytes .../pmahomme/img/new_struct_selected.png | Bin 188 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/play.png | Bin 329 -> 0 bytes .../themes/pmahomme/img/s_collapseall.png | Bin 143 -> 0 bytes .../themes/pmahomme/img/s_really.png | Bin 128 -> 0 bytes .../themes/pmahomme/img/s_rights.png | Bin 461 -> 0 bytes .../themes/pmahomme/img/s_sortable.png | Bin 204 -> 0 bytes .../themes/pmahomme/img/s_unlink.png | Bin 589 -> 0 bytes .../phpMyAdmin/themes/pmahomme/img/s_vars.png | Bin 523 -> 0 bytes .../themes/pmahomme/img/zoom-plus-mini.png | Bin 320 -> 0 bytes .../images/ui-bg_glass_65_ffffff_1x400.png | Bin 73 -> 0 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 126 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 185 -> 0 bytes .../jquery/images/ui-icons_cd0a0a_256x240.png | Bin 3765 -> 0 bytes .../themes/pmahomme/jquery/jquery-ui.css | 1312 - .../themes/pmahomme/scss/_breadcrumb.scss | 22 - .../themes/pmahomme/scss/_designer.scss | 497 - .../themes/pmahomme/scss/_forms.scss | 5 - .../themes/pmahomme/scss/_jqplot.scss | 275 - .../themes/pmahomme/scss/_modal.scss | 3 - .../themes/pmahomme/scss/_navigation.scss | 463 - .../themes/pmahomme/scss/_variables.scss | 177 - .../0b/0bcbee1e66d755177eefc8651966f2f3.php | 83 - .../15/156fd6d20ca5599b0aedac6af12c13cb.php | 294 - .../22/220b04883aa1be571bcd1ea00366d93d.php | 99 - .../26/26578e154a0dc2df1ffe8e4fc27dd743.php | 92 - .../26/269ac5a202dc23f6c0a1e4a38cb7c094.php | 212 - .../2a/2ab50c07c679324bfe0210bb386f1b4e.php | 243 - .../2a/2af2f76feaa582e62dc48d1b2407c504.php | 99 - .../2d/2d4c4b72820f2074a6b15627c7661a83.php | 90 - .../35/353f61a45fe879514c449781542c6495.php | 67 - .../4a/4a543b9337678ea9ce355445527b6e00.php | 118 - .../53/53d8ffa9e99720fa10d62959fe772d31.php | 476 - .../5d/5d66fa2f3301978ff7ecb03a98299ab8.php | 79 - .../64/64faf96ca52d1d9dcc8936ca6d240dd9.php | 1594 - .../68/6815bcfe05c216aa56060e7c8acaadc1.php | 373 - .../6b/6bd853fb5225b6a7aef98f477cad0eae.php | 133 - .../73/73d2652d8fdb24e553f8c2c859c85abb.php | 90 - .../7e/7ec8ff79d0910373bda2ab5f7b775566.php | 141 - .../7f/7f9d7eb1fce94f372f4786ece6d9b303.php | 757 - .../8f/8f49fb1d1444954616e2f57a568edd17.php | 258 - .../90/903bb4d86a52617f11388acd5e8b630b.php | 73 - .../9e/9e86da622528ad18f875b9906ddc7e47.php | 428 - .../ac/ac3dec8d7b12e3b2b4ad59bc47b74b50.php | 324 - .../b8/b8a339fcf028465119a68f7bc5023668.php | 299 - .../ce/cec3d5ebad23eec1dee19af09f0c53ac.php | 309 - .../d6/d68297e98d7671d85978d6198ae77b26.php | 419 - .../e1/e16bfe2d50d183748778b292c372d154.php | 703 - .../vendor/bacon/bacon-qr-code/LICENSE | 22 - .../vendor/bacon/bacon-qr-code/README.md | 39 - .../bacon-qr-code/src/Common/EcBlock.php | 49 - .../bacon-qr-code/src/Encoder/ByteMatrix.php | 150 - .../bacon-qr-code/src/Encoder/Encoder.php | 668 - .../bacon-qr-code/src/Encoder/MatrixUtil.php | 513 - .../src/Exception/OutOfBoundsException.php | 8 - .../bacon-qr-code/src/Renderer/Color/Cmyk.php | 103 - .../src/Renderer/Eye/CompositeEye.php | 38 - .../src/Renderer/Eye/EyeInterface.php | 26 - .../src/Renderer/Image/EpsImageBackEnd.php | 376 - .../src/Renderer/Module/DotsModule.php | 63 - .../src/Renderer/Module/EdgeIterator/Edge.php | 100 - .../src/Renderer/Module/ModuleInterface.php | 18 - .../src/Renderer/Module/RoundnessModule.php | 129 - .../src/Renderer/Path/EllipticArc.php | 278 - .../bacon-qr-code/src/Renderer/Path/Move.php | 41 - .../src/Renderer/RendererStyle/Gradient.php | 46 - .../vendor/code-lts/u2f-php-server/LICENCE | 26 - .../code-lts/u2f-php-server/composer.json | 39 - .../vendor/composer/autoload_namespaces.php | 9 - .../vendor/composer/autoload_psr4.php | 46 - .../vendor/composer/autoload_real.php | 80 - .../vendor/composer/ca-bundle/res/cacert.pem | 3232 -- .../phpMyAdmin/vendor/dasprid/enum/README.md | 164 - .../vendor/dasprid/enum/composer.json | 31 - .../enum/src/Exception/ExceptionInterface.php | 10 - .../SerializeNotSupportedException.php | 10 - .../UnserializeNotSupportedException.php | 10 - .../vendor/fig/http-message-util/CHANGELOG.md | 147 - .../vendor/fig/http-message-util/README.md | 17 - .../src/StatusCodeInterface.php | 107 - .../vendor/google/recaptcha/composer.json | 39 - .../src/ReCaptcha/RequestMethod/Curl.php | 82 - .../src/ReCaptcha/RequestMethod/CurlPost.php | 104 - .../src/ReCaptcha/RequestMethod/Post.php | 88 - .../vendor/nikic/fast-route/LICENSE | 31 - .../fast-route/src/BadRouteException.php | 7 - .../nikic/fast-route/src/Dispatcher.php | 26 - .../vendor/nikic/fast-route/src/Route.php | 47 - .../nikic/fast-route/src/RouteCollector.php | 152 - .../nikic/fast-route/src/RouteParser/Std.php | 87 - .../vendor/nikic/fast-route/src/functions.php | 74 - .../constant_time_encoding/LICENSE.txt | 48 - .../src/Base64DotSlash.php | 88 - .../src/Base64DotSlashOrdered.php | 82 - .../constant_time_encoding/src/Binary.php | 87 - .../sodium_compat/.github/workflows/psalm.yml | 33 - .../vendor/paragonie/sodium_compat/LICENSE | 16 - .../paragonie/sodium_compat/appveyor.yml | 27 - .../paragonie/sodium_compat/autoload-php7.php | 31 - .../paragonie/sodium_compat/composer.json | 66 - .../paragonie/sodium_compat/lib/constants.php | 52 - .../sodium_compat/lib/php72compat.php | 1369 - .../sodium_compat/lib/php72compat_const.php | 92 - .../sodium_compat/lib/ristretto255.php | 239 - .../namespaced/Core/Curve25519.php | 7 - .../namespaced/Core/XChaCha20.php | 7 - .../sodium_compat/namespaced/File.php | 7 - .../paragonie/sodium_compat/psalm-above-3.xml | 56 - .../paragonie/sodium_compat/psalm-below-3.xml | 42 - .../sodium_compat/src/Core/BLAKE2b.php | 797 - .../sodium_compat/src/Core/Curve25519.php | 3836 --- .../src/Core/Curve25519/Ge/Cached.php | 65 - .../sodium_compat/src/Core/Ed25519.php | 551 - .../sodium_compat/src/Core/Poly1305.php | 63 - .../sodium_compat/src/Core/Poly1305/State.php | 445 - .../sodium_compat/src/Core32/ChaCha20/Ctx.php | 130 - .../src/Core32/ChaCha20/IetfCtx.php | 39 - .../src/Core32/Curve25519/Ge/Cached.php | 65 - .../src/Core32/Curve25519/Ge/P3.php | 65 - .../phpmyadmin/motranslator/CHANGELOG.md | 100 - .../src/Cache/ApcuCacheFactory.php | 29 - .../motranslator/src/StringReader.php | 116 - .../motranslator/src/Translator.php | 388 - .../phpmyadmin/motranslator/src/functions.php | 200 - .../vendor/phpmyadmin/shapefile/CHANGELOG.md | 131 - .../vendor/phpmyadmin/shapefile/README.md | 57 - .../phpmyadmin/shapefile/src/ShapeRecord.php | 900 - .../vendor/phpmyadmin/sql-parser/LICENSE.txt | 339 - .../vendor/phpmyadmin/sql-parser/README.md | 137 - .../locale/az/LC_MESSAGES/sqlparser.mo | Bin 3420 -> 0 bytes .../locale/be@latin/LC_MESSAGES/sqlparser.mo | Bin 4503 -> 0 bytes .../locale/bn/LC_MESSAGES/sqlparser.mo | Bin 1093 -> 0 bytes .../locale/cy/LC_MESSAGES/sqlparser.mo | Bin 544 -> 0 bytes .../locale/es/LC_MESSAGES/sqlparser.mo | Bin 4518 -> 0 bytes .../locale/he/LC_MESSAGES/sqlparser.mo | Bin 6153 -> 0 bytes .../locale/hu/LC_MESSAGES/sqlparser.mo | Bin 3514 -> 0 bytes .../locale/ksh/LC_MESSAGES/sqlparser.mo | Bin 498 -> 0 bytes .../locale/mk/LC_MESSAGES/sqlparser.mo | Bin 507 -> 0 bytes .../locale/ne/LC_MESSAGES/sqlparser.mo | Bin 486 -> 0 bytes .../locale/nl/LC_MESSAGES/sqlparser.mo | Bin 5255 -> 0 bytes .../locale/pl/LC_MESSAGES/sqlparser.mo | Bin 4884 -> 0 bytes .../locale/pt_BR/LC_MESSAGES/sqlparser.mo | Bin 5419 -> 0 bytes .../locale/rcf/LC_MESSAGES/sqlparser.mo | Bin 524 -> 0 bytes .../locale/sk/LC_MESSAGES/sqlparser.mo | Bin 4506 -> 0 bytes .../locale/sq/LC_MESSAGES/sqlparser.mo | Bin 4385 -> 0 bytes .../locale/te/LC_MESSAGES/sqlparser.mo | Bin 1051 -> 0 bytes .../locale/tr/LC_MESSAGES/sqlparser.mo | Bin 5223 -> 0 bytes .../locale/ur/LC_MESSAGES/sqlparser.mo | Bin 486 -> 0 bytes .../src/Components/AlterOperation.php | 435 - .../src/Components/CaseExpression.php | 308 - .../sql-parser/src/Components/DataType.php | 179 - .../sql-parser/src/Components/IndexHint.php | 212 - .../sql-parser/src/Components/Reference.php | 162 - .../src/Components/UnionKeyword.php | 36 - .../src/Contexts/ContextMariaDb100300.php | 347 - .../src/Contexts/ContextMySql50100.php | 294 - .../src/Contexts/ContextMySql50700.php | 347 - .../vendor/phpmyadmin/sql-parser/src/Core.php | 51 - .../src/Exceptions/LoaderException.php | 34 - .../phpmyadmin/sql-parser/src/Lexer.php | 1050 - .../src/Statements/CallStatement.php | 43 - .../src/Statements/DeleteStatement.php | 377 - .../src/Statements/ExplainStatement.php | 15 - .../src/Statements/LoadStatement.php | 412 - .../src/Statements/ShowStatement.php | 63 - .../phpmyadmin/sql-parser/src/Utils/CLI.php | 319 - .../sql-parser/src/Utils/Routine.php | 144 - .../twig-i18n-extension/CHANGELOG.md | 33 - .../phpmyadmin/twig-i18n-extension/LICENSE | 20 - .../twig-i18n-extension/composer.json | 47 - .../src/Node/TransNode.php | 315 - .../pragmarx/google2fa-qrcode/LICENSE.md | 7 - .../pragmarx/google2fa-qrcode/README.md | 149 - .../google2fa-qrcode/src/QRCode/Bacon.php | 97 - ...atibleWithGoogleAuthenticatorException.php | 11 - .../pragmarx/google2fa/src/Support/QRCode.php | 34 - .../phpMyAdmin/vendor/psr/cache/composer.json | 25 - .../phpMyAdmin/vendor/psr/container/LICENSE | 21 - .../http-factory/src/UriFactoryInterface.php | 17 - .../vendor/psr/http-message/README.md | 13 - .../http-message/src/ResponseInterface.php | 68 - .../src/UploadedFileInterface.php | 123 - .../script/phpMyAdmin/vendor/psr/log/LICENSE | 19 - .../psr/log/Psr/Log/LoggerAwareTrait.php | 26 - .../vendor/psr/log/Psr/Log/LoggerTrait.php | 142 - .../vendor/ralouphie/getallheaders/README.md | 27 - .../vendor/slim/psr7/src/Cookies.php | 221 - .../slim/psr7/src/Factory/RequestFactory.php | 73 - .../vendor/slim/psr7/src/Headers.php | 321 - .../vendor/slim/psr7/src/Message.php | 191 - .../symfony/cache-contracts/CHANGELOG.md | 5 - .../symfony/cache-contracts/CacheTrait.php | 80 - .../symfony/cache/Adapter/ApcuAdapter.php | 138 - .../cache/Adapter/DoctrineDbalAdapter.php | 397 - .../cache/Adapter/MemcachedAdapter.php | 353 - .../cache/Adapter/ParameterNormalizer.php | 35 - .../Adapter/TraceableTagAwareAdapter.php | 38 - .../vendor/symfony/cache/CHANGELOG.md | 108 - .../CacheCollectorPass.php | 94 - .../DependencyInjection/CachePoolPass.php | 274 - .../CachePoolPrunerPass.php | 64 - .../vendor/symfony/cache/DoctrineProvider.php | 124 - .../cache/Marshaller/DeflateMarshaller.php | 53 - .../cache/Marshaller/TagAwareMarshaller.php | 89 - .../Messenger/EarlyExpirationDispatcher.php | 61 - .../phpMyAdmin/vendor/symfony/cache/README.md | 19 - .../symfony/config/Builder/Property.php | 75 - .../config/Definition/Builder/ExprBuilder.php | 246 - .../Builder/IntegerNodeDefinition.php | 32 - .../Definition/Builder/MergeBuilder.php | 63 - .../Builder/NodeParentInterface.php | 21 - .../Builder/NumericNodeDefinition.php | 73 - .../Exception/InvalidDefinitionException.php | 21 - .../Exception/InvalidTypeException.php | 21 - .../Exception/UnsetKeyException.php | 22 - .../symfony/config/Definition/IntegerNode.php | 46 - .../symfony/config/Loader/LoaderInterface.php | 52 - .../symfony/config/Loader/LoaderResolver.php | 68 - .../config/Loader/LoaderResolverInterface.php | 30 - .../Util/Exception/InvalidXmlException.php | 22 - .../Util/Exception/XmlParsingException.php | 21 - .../Argument/AbstractArgument.php | 41 - .../Argument/ReferenceSetArgumentTrait.php | 54 - .../Argument/RewindableGenerator.php | 46 - .../Argument/TaggedIteratorArgument.php | 73 - .../Compiler/InlineServiceDefinitionsPass.php | 223 - .../RemoveAbstractDefinitionsPass.php | 33 - .../Compiler/RemovePrivateAliasesPass.php | 39 - .../Compiler/ResolveBindingsPass.php | 246 - .../Compiler/ResolveChildDefinitionsPass.php | 198 - .../Compiler/ResolveClassPass.php | 40 - .../Compiler/ResolveNamedArgumentsPass.php | 127 - .../ResolveParameterPlaceHoldersPass.php | 98 - .../ResolveServiceSubscribersPass.php | 52 - .../Compiler/ServiceReferenceGraph.php | 99 - .../Compiler/ServiceReferenceGraphEdge.php | 99 - .../Compiler/ServiceReferenceGraphNode.php | 118 - .../dependency-injection/Container.php | 434 - .../ContainerAwareInterface.php | 25 - .../dependency-injection/Dumper/Dumper.php | 29 - .../dependency-injection/Dumper/Preloader.php | 131 - .../dependency-injection/Dumper/XmlDumper.php | 395 - .../InvalidParameterTypeException.php | 35 - .../Exception/RuntimeException.php | 21 - .../ServiceCircularReferenceException.php | 41 - .../Exception/ServiceNotFoundException.php | 67 - .../ExpressionLanguageProvider.php | 50 - .../LazyProxy/PhpDumper/NullDumper.php | 48 - .../LazyProxy/ProxyHelper.php | 77 - .../Loader/ClosureLoader.php | 49 - .../Configurator/ContainerConfigurator.php | 212 - .../Loader/Configurator/EnvConfigurator.php | 224 - .../Configurator/ParametersConfigurator.php | 57 - .../Traits/AutoconfigureTrait.php | 31 - .../Configurator/Traits/FactoryTrait.php | 38 - .../Loader/Configurator/Traits/FileTrait.php | 27 - .../Configurator/Traits/ParentTrait.php | 46 - .../Configurator/Traits/PropertyTrait.php | 27 - .../Loader/FileLoader.php | 247 - .../Loader/PhpFileLoader.php | 211 - .../dependency-injection/Parameter.php | 35 - .../EnvPlaceholderParameterBag.php | 154 - .../ParameterBag/ParameterBagInterface.php | 106 - .../dependency-injection/ReverseContainer.php | 81 - .../symfony/dependency-injection/Variable.php | 43 - .../dependency-injection/composer.json | 56 - .../deprecation-contracts/CHANGELOG.md | 5 - .../symfony/deprecation-contracts/LICENSE | 19 - .../deprecation-contracts/composer.json | 35 - .../symfony/expression-language/Compiler.php | 147 - .../expression-language/Expression.php | 37 - .../ExpressionLanguage.php | 182 - .../Node/ArgumentsNode.php | 40 - .../expression-language/Node/ConstantNode.php | 81 - .../expression-language/Node/NameNode.php | 45 - .../expression-language/Node/UnaryNode.php | 66 - .../symfony/expression-language/composer.json | 30 - .../vendor/symfony/filesystem/CHANGELOG.md | 82 - .../Exception/ExceptionInterface.php | 21 - .../Exception/FileNotFoundException.php | 34 - .../filesystem/Exception/RuntimeException.php | 19 - .../symfony/polyfill-mbstring/Mbstring.php | 873 - .../Resources/unidata/lowerCase.php | 1397 - .../Resources/unidata/upperCase.php | 1489 - .../symfony/polyfill-mbstring/composer.json | 41 - .../vendor/symfony/polyfill-php73/README.md | 18 - .../Resources/stubs/JsonException.php | 16 - .../symfony/polyfill-php73/bootstrap.php | 31 - .../symfony/polyfill-php73/composer.json | 36 - .../symfony/polyfill-php80/PhpToken.php | 103 - .../Resources/stubs/UnhandledMatchError.php | 7 - .../symfony/polyfill-php80/composer.json | 40 - .../symfony/polyfill-php81/composer.json | 36 - .../symfony/service-contracts/CHANGELOG.md | 5 - .../service-contracts/ResetInterface.php | 30 - .../vendor/symfony/var-exporter/CHANGELOG.md | 12 - .../Exception/ExceptionInterface.php | 16 - .../var-exporter/Internal/Reference.php | 30 - .../tecnickcom/tcpdf/fonts/dejavusans.php | 16 - .../tcpdf/include/tcpdf_font_data.php | 18447 ------------ .../vendor/tecnickcom/tcpdf/tcpdf.php | 24729 ---------------- .../vendor/tecnickcom/tcpdf/tcpdf_import.php | 104 - .../phpMyAdmin/vendor/twig/twig/composer.json | 50 - .../twig/twig/src/Cache/FilesystemCache.php | 87 - .../vendor/twig/twig/src/Cache/NullCache.php | 38 - .../twig/twig/src/Error/RuntimeError.php | 22 - .../twig/src/Extension/EscaperExtension.php | 416 - .../twig/src/Extension/ExtensionInterface.php | 68 - .../twig/src/Extension/GlobalsInterface.php | 25 - .../Extension/RuntimeExtensionInterface.php | 19 - .../twig/src/Extension/StagingExtension.php | 100 - .../src/Extension/StringLoaderExtension.php | 42 - .../twig/twig/src/Loader/ArrayLoader.php | 77 - .../twig/twig/src/Loader/ChainLoader.php | 119 - .../twig/twig/src/Loader/LoaderInterface.php | 49 - .../twig/twig/src/Node/CheckSecurityNode.php | 88 - .../src/Node/Expression/Binary/AddBinary.php | 23 - .../Node/Expression/Binary/GreaterBinary.php | 39 - .../Node/Expression/Binary/MatchesBinary.php | 33 - .../Node/Expression/Binary/NotEqualBinary.php | 39 - .../Expression/Binary/StartsWithBinary.php | 35 - .../Node/Expression/ConditionalExpression.php | 36 - .../Node/Expression/ConstantExpression.php | 28 - .../Node/Expression/Filter/DefaultFilter.php | 52 - .../src/Node/Expression/FilterExpression.php | 40 - .../src/Node/Expression/GetAttrExpression.php | 87 - .../Node/Expression/MethodCallExpression.php | 62 - .../Node/Expression/Unary/AbstractUnary.php | 34 - .../src/Node/Expression/Unary/NegUnary.php | 23 - .../vendor/twig/twig/src/Node/ForLoopNode.php | 49 - .../vendor/twig/twig/src/Node/ForNode.php | 107 - .../vendor/twig/twig/src/Node/IncludeNode.php | 106 - .../vendor/twig/twig/src/Node/PrintNode.php | 39 - .../vendor/twig/twig/src/Node/WithNode.php | 70 - .../src/NodeVisitor/EscaperNodeVisitor.php | 208 - .../twig/src/Profiler/Dumper/HtmlDumper.php | 47 - .../NodeVisitor/ProfilerNodeVisitor.php | 70 - .../vendor/twig/twig/src/Profiler/Profile.php | 181 - .../RuntimeLoader/ContainerRuntimeLoader.php | 37 - .../RuntimeLoader/RuntimeLoaderInterface.php | 27 - .../SecurityNotAllowedFunctionError.php | 33 - .../Sandbox/SecurityNotAllowedMethodError.php | 40 - .../SecurityNotAllowedPropertyError.php | 40 - .../vendor/twig/twig/src/Source.php | 51 - .../phpMyAdmin/vendor/twig/twig/src/Token.php | 178 - .../src/TokenParser/AutoEscapeTokenParser.php | 58 - .../src/TokenParser/ExtendsTokenParser.php | 52 - .../twig/src/TokenParser/FlushTokenParser.php | 38 - .../twig/src/TokenParser/IfTokenParser.php | 89 - .../src/TokenParser/IncludeTokenParser.php | 69 - .../twig/src/TokenParser/MacroTokenParser.php | 66 - .../vendor/twig/twig/src/TwigFunction.php | 122 - .../vendor/webmozart/assert/src/Assert.php | 2066 -- .../assert/src/InvalidArgumentException.php | 16 - .../vendor/webmozart/assert/src/Mixin.php | 2916 -- .../williamdes/mariadb-mysql-kbs/CHANGELOG.md | 732 - .../williamdes/mariadb-mysql-kbs/README.md | 54 - .../mariadb-mysql-kbs/src/Search.php | 185 - 938 files changed, 181267 deletions(-) delete mode 100644 Sources/php_script/script/phpMyAdmin/config.sample.inc.php delete mode 100644 Sources/php_script/script/phpMyAdmin/dafldev/.idea/dafldev.iml delete mode 100644 Sources/php_script/script/phpMyAdmin/dafldev/config.php delete mode 100644 Sources/php_script/script/phpMyAdmin/dafldev/db.php delete mode 100644 Sources/php_script/script/phpMyAdmin/dafldev/distance.php delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_images/line_chart.png delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_images/query_result_operations.png delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_images/scatter_chart.png delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/faq.rst.txt delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/glossary.rst.txt delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/privileges.rst.txt delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/setup.rst.txt delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/transformations.rst.txt delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_sources/two_factor.rst.txt delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_static/classic.css delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/_static/language_data.js delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/config.html delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/copyright.html delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/faq.html delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/genindex.html delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/other.html delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/transformations.html delete mode 100644 Sources/php_script/script/phpMyAdmin/doc/html/vendors.html delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/common.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/console.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/cross_framing_protection.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/database/events.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/database/operations.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/database/query_generator.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/database/search.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/database/tracking.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/designer/init.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/designer/page.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/export_output.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/gis_data_editor.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/indexes.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/menu_resizer.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/server/privileges.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/server/status/monitor.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/server/status/variables.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/server/user_groups.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/table/change.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/table/chart.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/table/select.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/transformations/sql_editor.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/dist/u2f.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/cross_framing_protection.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/database/search.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/database/tracking.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/database/triggers.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/designer/page.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/import.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/indexes.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/makegrid.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/normalization.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/replication.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/server/plugins.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/server/status/queries.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/setup/scripts.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/sql.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/table/find_replace.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/table/relation.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/src/transformations/sql_editor.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/bootstrap/bootstrap.bundle.min.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/codemirror/addon/runmode/runmode.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.highlighter.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/jquery/MIT-LICENSE.txt delete mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/jquery/jquery.debounce-1.0.6.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/openlayers/OpenLayers.js delete mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/openlayers/theme/ol.css delete mode 100644 Sources/php_script/script/phpMyAdmin/js/vendor/zxcvbn-ts.js.map delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/advisory_rules_mysql_before80003.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Command/TwigLintCommand.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplay.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplayTemplate.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/BaseForm.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/Page/ExportForm.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/Page/NaviForm.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/Setup/ConfigForm.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/User/ExportForm.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Forms/User/SqlForm.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/ServerConfigChecks.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Settings/Console.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Settings/Debug.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Settings/Import.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/Settings/Transformations.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Config/SpecialSchemaLinks.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Features/BookmarkFeature.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Features/ExportTemplatesFeature.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Features/FavoriteTablesFeature.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Features/SqlHistoryFeature.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Features/TrackingFeature.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ConfigStorage/Relation.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/CheckRelationsController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/CollationConnectionController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/EventsController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/PrivilegesController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/QueryByExampleController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/SearchController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/SqlFormatController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/AddPrefixTableController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/CentralColumns/AddController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/CopyTableController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/CopyTableWithPrefixController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/DropFormController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/EmptyTableController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/Structure/FavoriteTableController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Database/TriggersController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/ErrorReportController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Export/Template/LoadController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Import/StatusController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/LicenseController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Preferences/ImportController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Preferences/MainPanelController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Preferences/TwoFactorController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/CollationsController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/ExportController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/PluginsController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/Privileges/AccountUnlockController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/ReplicationController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/Status/AdvisorController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/Status/Monitor/QueryAnalyzerController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Server/Variables/GetVariableController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Setup/ConfigController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Setup/ServersController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Sql/RelationalValuesController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/ChartController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/DeleteConfirmController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/DropColumnConfirmationController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/ExportController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/FindReplaceController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/IndexRenameController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/OperationsController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/Partition/AnalyzeController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/RecentFavoriteController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/Structure/BrowseController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/Structure/PartitioningController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/Structure/ReservedWordCheckController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/Table/TriggersController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/TableController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/VersionCheckController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/View/CreateController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Controllers/View/OperationsController.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Crypto/Crypto.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Database/Search.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Dbal/DbiExtension.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Dbal/MysqliResult.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Dbal/ResultInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Dbal/TableName.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Encoding.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Engines/Binlog.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Engines/Memory.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Error.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Export/Options.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Export/Template.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/FieldMetadata.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Font.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Header.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Language.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/NodeFactory.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/Node.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/NodeColumn.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/NodeFunctionContainer.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/NodeProcedure.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/NodeTableContainer.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Navigation/Nodes/NodeTriggerContainer.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Normalization.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/OutputBuffering.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/SubPartition.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/TablePartitionDefinition.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportOds.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportSql.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportTexytext.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportMediawiki.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportSql.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ShapeFileImport.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/Upload/UploadNoplugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/Upload/UploadProgress.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/ImportPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Schema/Dia/DiaRelationSchema.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/SchemaPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/PreApPendTransformationsPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/TextFileUploadTransformationsPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptolong.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_XmlEditor.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Application_Octetstream_Download.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Image_JPEG_Link.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Dateformat.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Formatted.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Imagelink.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Json.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TransformationsPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactor/Key.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactorPlugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Options/Items/TextPropertyItem.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Options/OptionsPropertyGroup.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/ExportPluginProperties.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/PluginPropertyItem.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/PropertyItem.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Query/Cache.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Query/Utilities.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Replication.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ReplicationInfo.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ResponseRenderer.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Plugin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Select.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Data.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Monitor.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Base.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Linux.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Setup/FormProcessing.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Sql.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/StorageEngine.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Maintenance.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Search.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Template.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Theme.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Twig/RelationExtension.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/UserPassword.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/FormatConverter.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/SessionCache.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/classes/ZipExtension.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/config.default.php delete mode 100644 Sources/php_script/script/phpMyAdmin/libraries/routes.php delete mode 100644 Sources/php_script/script/phpMyAdmin/locale/bn/LC_MESSAGES/phpmyadmin.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/locale/el/LC_MESSAGES/phpmyadmin.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/locale/he/LC_MESSAGES/phpmyadmin.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/locale/ia/LC_MESSAGES/phpmyadmin.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/locale/si/LC_MESSAGES/phpmyadmin.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/locale/tr/LC_MESSAGES/phpmyadmin.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/locale/zh_TW/LC_MESSAGES/phpmyadmin.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/package.json delete mode 100644 Sources/php_script/script/phpMyAdmin/setup/config.php delete mode 100644 Sources/php_script/script/phpMyAdmin/setup/styles.css.map delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/columns_definitions/column_name.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/columns_definitions/partitions.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/components/error_message.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit_table_row.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/designer/schema_export.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/events/editor_form.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/events/row.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/multi_table_query/form.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/operations/index.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/routines/editor_form.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/routines/parameter_row.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/search/main.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/structure/overhead.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/structure/structure_table_row.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/tracking/tables.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/database/triggers/list.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/display/results/table.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/error/report_form.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/filter.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/modals/unhide_nav_item.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/navigation/tree/node.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/navigation/tree/quick_warp.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/preferences/autoload.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/configure.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/confirm.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/recent_favorite_table_recent.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/select_all.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/binlog/index.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/engines/index.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/add_user.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/change_password.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/get_user_link.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/initials_row.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/login_information_fields.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/new_user_ajax.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/privileges_summary.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/user_properties.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/privileges/users_overview.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/replication/primary_add_replica_user.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/status/processes/index.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/status/processes/list.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/user_groups/edit_user_groups.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/server/variables/index.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/setup/servers/index.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/sql/sql_query_results.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/chart/tbl_chart.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/delete/confirm.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/find_replace/replace_preview.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/gis_visualization/gis_visualization.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/import/index.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/maintenance/check.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/maintenance/optimize.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/operations/view.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/partition/optimize.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/relation/common_form.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/search/index.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/structure/display_structure.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/table/tracking/structure_snapshot_columns.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/test/gettext/notes.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/test/gettext/pgettext.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/test/raw_output.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/test/static.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/top_menu.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/templates/user_password.twig delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/css/theme.css delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/arrow_ltr.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/asc_order.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_dbstatistics.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_docsql.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_key.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_lastpage.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_left.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_tipp.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_drop.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_firstpage.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_lastpage.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_spatial.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_drop.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_pointer.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_pointer_ver.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/console.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-minus.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-plus.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/1.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/4.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/7.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/Field_small.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/and_icon.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bord.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bottom.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/downarrow1.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/favicon.ico delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/grid.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/help.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/or_icon.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/other_table.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/pdf.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/reload.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/rightarrow2.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/top_panel.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/export.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/field-index-text.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag-plus.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/lightbulb.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/link-broken.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_data.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_data_selected_hovered.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_struct.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_struct_selected.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_struct_selected_hovered.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/notice.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/pma_logo2.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/replication.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine-plus.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/s_really.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/save.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/search-replace.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/table.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/tree-collapse.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/triangle-right-1.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/user-props.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/version.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/vertical_line.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/visibility-hidden.svg delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-icons_888888_256x240.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-icons_cd0a0a_256x240.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/jquery-ui.css delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/css/mono-theme.rtl.css delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/css/theme.css delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/ajax_clock_small.gif delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_ltr.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_rtl.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_chart.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_close.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_column_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_edit.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_empty.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_event_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_favorite.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_find_replace.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_home.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_key.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_lastpage.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_more.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_move.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_pdfdoc.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_plus.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_routine_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_saveimage.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_sbrowse.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_sqldoc.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_tblanalyse.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_tbloptimize.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_unique.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_usrlist.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/b_versions.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_empty.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_insrow.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_lastpage.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_primary.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_spatial.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/centralColumns_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/centralColumns_delete.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/col_pointer.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/database.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/2leftarrow.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/2rightarrow.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/2rightarrow_m.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/anchor.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/ang_direct.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/display_field.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/downarrow2.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/exec.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/export.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/grid.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/help.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/left_panel_tab.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/minus.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/page_delete.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/pdf.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/toggle_lines.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/viewInFullscreen.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/eye_grey.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/lightbulb.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/more.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/new_struct_hovered.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/normalize.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_asc.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_attention.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_cancel.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_link.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_notice.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_success.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_top.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/s_vars.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/sprites.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/img/zoom-plus-mini.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_2e83ff_256x240.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_888888_256x240.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/scss/_card.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/scss/_font.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/scss/_print.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/scss/_variables.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/scss/blueeyes-theme.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/metro/theme.json delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/css/theme.css.map delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/css/theme.rtl.css delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/arrow_ltr.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_calendar.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_close.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_column_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_comment.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_deltbl.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_export.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_globe.gif delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_home.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_index_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_insrow.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_key.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_move.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_primary.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_relations.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_routines.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_save.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_saveimage.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_select.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_spatial.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_table_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_tblanalyse.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_tipp.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_trigger_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_triggers.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrcheck.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrdrop.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_view.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_view_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/b_views.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_deltbl.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_edit.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_export.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_index.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_insrow.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_routine_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_sbrowse.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/bd_select.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/centralColumns.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/east-mini.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/error.ico delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/logo_right.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/new_struct_selected.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/normalize.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/north-mini.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_desc.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_fulltext.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_info.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_lang.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_link.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_loggoff.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_okay.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_really.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_sync.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_theme.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/s_unlink.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/south-mini.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/toggle-rtl.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/img/window-new.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/jquery/images/ui-icons_cd0a0a_256x240.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/jquery/jquery-ui.css delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/scss/_common.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/scss/_reboot.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/scss/_variables.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/scss/theme.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/original/theme.json delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.css.map delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.rtl.css delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_ltr.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_rtl.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docs.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docsql.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_find_replace.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_home.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_index.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_key.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_lastpage.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_more.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_move.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_newdb.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_no_favorite.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_plus.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_props.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_report.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_sbrowse.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_snewtbl.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_sql.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_sqlhelp.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_undo.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/bd_drop.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/bd_index.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/bd_insrow.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/bd_sbrowse.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/bd_select.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/centralColumns_delete.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_drop.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_pointer_ver.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/console.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/1.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/8.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/Field_small.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/and_icon.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/bottom.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/downarrow2.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/favicon.ico delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/minus.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/page_add.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/query_builder.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/relation.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/rightarrow2.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/save.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/toggle_lines.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/uparrow2_m.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/lightbulb.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/lightbulb_off.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/more.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data_hovered.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data_selected_hovered.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_struct_selected.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/play.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_collapseall.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_really.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_rights.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_sortable.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_unlink.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_vars.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/zoom-plus-mini.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_glass_65_ffffff_1x400.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_glass_75_dadada_1x400.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-icons_cd0a0a_256x240.png delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/jquery-ui.css delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_breadcrumb.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_designer.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_forms.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_jqplot.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_modal.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_navigation.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_variables.scss delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/0b/0bcbee1e66d755177eefc8651966f2f3.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/15/156fd6d20ca5599b0aedac6af12c13cb.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/22/220b04883aa1be571bcd1ea00366d93d.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/26/26578e154a0dc2df1ffe8e4fc27dd743.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/26/269ac5a202dc23f6c0a1e4a38cb7c094.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2ab50c07c679324bfe0210bb386f1b4e.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2af2f76feaa582e62dc48d1b2407c504.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/2d/2d4c4b72820f2074a6b15627c7661a83.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/35/353f61a45fe879514c449781542c6495.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/4a/4a543b9337678ea9ce355445527b6e00.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/53/53d8ffa9e99720fa10d62959fe772d31.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/5d/5d66fa2f3301978ff7ecb03a98299ab8.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/64/64faf96ca52d1d9dcc8936ca6d240dd9.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/68/6815bcfe05c216aa56060e7c8acaadc1.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/6b/6bd853fb5225b6a7aef98f477cad0eae.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/73/73d2652d8fdb24e553f8c2c859c85abb.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/7e/7ec8ff79d0910373bda2ab5f7b775566.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/7f/7f9d7eb1fce94f372f4786ece6d9b303.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/8f/8f49fb1d1444954616e2f57a568edd17.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/90/903bb4d86a52617f11388acd5e8b630b.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/9e/9e86da622528ad18f875b9906ddc7e47.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/ac/ac3dec8d7b12e3b2b4ad59bc47b74b50.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/b8/b8a339fcf028465119a68f7bc5023668.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/ce/cec3d5ebad23eec1dee19af09f0c53ac.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/d6/d68297e98d7671d85978d6198ae77b26.php delete mode 100644 Sources/php_script/script/phpMyAdmin/tmp/twig/e1/e16bfe2d50d183748778b292c372d154.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/LICENSE delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/RoundnessModule.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/LICENCE delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_namespaces.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_psr4.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_real.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/composer/ca-bundle/res/cacert.pem delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/ExceptionInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/SerializeNotSupportedException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/UnserializeNotSupportedException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/fig/http-message-util/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/fig/http-message-util/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/fig/http-message-util/src/StatusCodeInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/CurlPost.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/LICENSE delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/BadRouteException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/Dispatcher.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/Route.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteCollector.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteParser/Std.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/functions.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/LICENSE.txt delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Base64DotSlash.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Binary.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/.github/workflows/psalm.yml delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/LICENSE delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/appveyor.yml delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/autoload-php7.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/constants.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/php72compat.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/php72compat_const.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/ristretto255.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/namespaced/Core/Curve25519.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/namespaced/Core/XChaCha20.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/namespaced/File.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/psalm-above-3.xml delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/psalm-below-3.xml delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Ed25519.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Cache/ApcuCacheFactory.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/StringReader.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Translator.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/functions.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/src/ShapeRecord.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/LICENSE.txt delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/az/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/be@latin/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/bn/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/cy/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/es/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/he/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/hu/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ksh/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/mk/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ne/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/nl/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/pl/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/pt_BR/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/rcf/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/sk/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/sq/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/te/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/tr/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ur/LC_MESSAGES/sqlparser.mo delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/AlterOperation.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/CaseExpression.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/DataType.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/IndexHint.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/Reference.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/UnionKeyword.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100300.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50100.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50700.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Core.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Exceptions/LoaderException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Lexer.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/CallStatement.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/DeleteStatement.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ExplainStatement.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/LoadStatement.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ShowStatement.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/CLI.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/Routine.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/LICENSE delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/src/Node/TransNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/LICENSE.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/src/QRCode/Bacon.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa/src/Exceptions/IncompatibleWithGoogleAuthenticatorException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa/src/Support/QRCode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/cache/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/container/LICENSE delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/http-factory/src/UriFactoryInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/http-message/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/http-message/src/ResponseInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/http-message/src/UploadedFileInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/log/LICENSE delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/log/Psr/Log/LoggerAwareTrait.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/psr/log/Psr/Log/LoggerTrait.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/ralouphie/getallheaders/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Cookies.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Factory/RequestFactory.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Headers.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Message.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CacheTrait.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ApcuAdapter.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/MemcachedAdapter.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ParameterNormalizer.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DoctrineProvider.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/DeflateMarshaller.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Builder/Property.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/ExprBuilder.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/MergeBuilder.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NodeParentInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidDefinitionException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidTypeException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/UnsetKeyException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/IntegerNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolver.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolverInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/InvalidXmlException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/XmlParsingException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/AbstractArgument.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Container.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ContainerAwareInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Dumper.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Preloader.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/XmlDumper.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/RuntimeException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ExpressionLanguageProvider.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/ClosureLoader.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/FileLoader.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Parameter.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ReverseContainer.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Variable.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/LICENSE delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Compiler.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Expression.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/ExpressionLanguage.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ArgumentsNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ConstantNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/NameNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/UnaryNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/ExceptionInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/FileNotFoundException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/RuntimeException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Mbstring.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/bootstrap.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/PhpToken.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php81/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/ResetInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Exception/ExceptionInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Internal/Reference.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/fonts/dejavusans.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/include/tcpdf_font_data.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/tcpdf.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/tcpdf_import.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/composer.json delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Cache/FilesystemCache.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Cache/NullCache.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Error/RuntimeError.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/EscaperExtension.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/ExtensionInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/GlobalsInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/StagingExtension.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Extension/StringLoaderExtension.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Loader/ArrayLoader.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Loader/ChainLoader.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Loader/LoaderInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/CheckSecurityNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/ConditionalExpression.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/ConstantExpression.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/FilterExpression.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/GetAttrExpression.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/MethodCallExpression.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/ForLoopNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/ForNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/IncludeNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/PrintNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Node/WithNode.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Profiler/Profile.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Source.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/Token.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/FlushTokenParser.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/IfTokenParser.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/MacroTokenParser.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TwigFunction.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Assert.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/InvalidArgumentException.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Mixin.php delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/CHANGELOG.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/README.md delete mode 100644 Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/src/Search.php diff --git a/Sources/php_script/script/phpMyAdmin/config.sample.inc.php b/Sources/php_script/script/phpMyAdmin/config.sample.inc.php deleted file mode 100644 index 34b6a9d..0000000 --- a/Sources/php_script/script/phpMyAdmin/config.sample.inc.php +++ /dev/null @@ -1,160 +0,0 @@ -. - */ - -declare(strict_types=1); - -/** - * This is needed for cookie based authentication to encrypt password in - * cookie. Needs to be 32 chars long. - */ -$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ - -/** - * Servers configuration - */ -$i = 0; - -/** - * First server - */ -$i++; -/* Authentication type */ -$cfg['Servers'][$i]['auth_type'] = 'cookie'; -/* Server parameters */ -$cfg['Servers'][$i]['host'] = 'localhost'; -$cfg['Servers'][$i]['compress'] = false; -$cfg['Servers'][$i]['AllowNoPassword'] = false; - -/** - * phpMyAdmin configuration storage settings. - */ - -/* User used to manipulate with storage */ -// $cfg['Servers'][$i]['controlhost'] = ''; -// $cfg['Servers'][$i]['controlport'] = ''; -// $cfg['Servers'][$i]['controluser'] = 'pma'; -// $cfg['Servers'][$i]['controlpass'] = 'pmapass'; - -/* Storage database and tables */ -// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin'; -// $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark'; -// $cfg['Servers'][$i]['relation'] = 'pma__relation'; -// $cfg['Servers'][$i]['table_info'] = 'pma__table_info'; -// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords'; -// $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages'; -// $cfg['Servers'][$i]['column_info'] = 'pma__column_info'; -// $cfg['Servers'][$i]['history'] = 'pma__history'; -// $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs'; -// $cfg['Servers'][$i]['tracking'] = 'pma__tracking'; -// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig'; -// $cfg['Servers'][$i]['recent'] = 'pma__recent'; -// $cfg['Servers'][$i]['favorite'] = 'pma__favorite'; -// $cfg['Servers'][$i]['users'] = 'pma__users'; -// $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups'; -// $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding'; -// $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches'; -// $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns'; -// $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings'; -// $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates'; - -/** - * End of servers configuration - */ - -/** - * Directories for saving/loading files from server - */ -$cfg['UploadDir'] = ''; -$cfg['SaveDir'] = ''; - -/** - * Whether to display icons or text or both icons and text in table row - * action segment. Value can be either of 'icons', 'text' or 'both'. - * default = 'both' - */ -//$cfg['RowActionType'] = 'icons'; - -/** - * Defines whether a user should be displayed a "show all (records)" - * button in browse mode or not. - * default = false - */ -//$cfg['ShowAll'] = true; - -/** - * Number of rows displayed when browsing a result set. If the result - * set contains more rows, "Previous" and "Next". - * Possible values: 25, 50, 100, 250, 500 - * default = 25 - */ -//$cfg['MaxRows'] = 50; - -/** - * Disallow editing of binary fields - * valid values are: - * false allow editing - * 'blob' allow editing except for BLOB fields - * 'noblob' disallow editing except for BLOB fields - * 'all' disallow editing - * default = 'blob' - */ -//$cfg['ProtectBinary'] = false; - -/** - * Default language to use, if not browser-defined or user-defined - * (you find all languages in the locale folder) - * uncomment the desired line: - * default = 'en' - */ -//$cfg['DefaultLang'] = 'en'; -//$cfg['DefaultLang'] = 'de'; - -/** - * How many columns should be used for table display of a database? - * (a value larger than 1 results in some information being hidden) - * default = 1 - */ -//$cfg['PropertiesNumColumns'] = 2; - -/** - * Set to true if you want DB-based query history.If false, this utilizes - * JS-routines to display query history (lost by window close) - * - * This requires configuration storage enabled, see above. - * default = false - */ -//$cfg['QueryHistoryDB'] = true; - -/** - * When using DB-based query history, how many entries should be kept? - * default = 25 - */ -//$cfg['QueryHistoryMax'] = 100; - -/** - * Whether or not to query the user before sending the error report to - * the phpMyAdmin team when a JavaScript error occurs - * - * Available options - * ('ask' | 'always' | 'never') - * default = 'ask' - */ -//$cfg['SendErrorReports'] = 'always'; - -/** - * 'URLQueryEncryption' defines whether phpMyAdmin will encrypt sensitive data from the URL query string. - * 'URLQueryEncryptionSecretKey' is a 32 bytes long secret key used to encrypt/decrypt the URL query string. - */ -//$cfg['URLQueryEncryption'] = true; -//$cfg['URLQueryEncryptionSecretKey'] = ''; - -/** - * You can find more configuration options in the documentation - * in the doc/ folder or at . - */ diff --git a/Sources/php_script/script/phpMyAdmin/dafldev/.idea/dafldev.iml b/Sources/php_script/script/phpMyAdmin/dafldev/.idea/dafldev.iml deleted file mode 100644 index c956989..0000000 --- a/Sources/php_script/script/phpMyAdmin/dafldev/.idea/dafldev.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/dafldev/config.php b/Sources/php_script/script/phpMyAdmin/dafldev/config.php deleted file mode 100644 index 63484ca..0000000 --- a/Sources/php_script/script/phpMyAdmin/dafldev/config.php +++ /dev/null @@ -1,14 +0,0 @@ -getMessage(); - echo $error; -} diff --git a/Sources/php_script/script/phpMyAdmin/dafldev/distance.php b/Sources/php_script/script/phpMyAdmin/dafldev/distance.php deleted file mode 100644 index a2155b0..0000000 --- a/Sources/php_script/script/phpMyAdmin/dafldev/distance.php +++ /dev/null @@ -1,61 +0,0 @@ -prepare($query); -$stm->execute(); -$row = $stm->fetchAll(PDO::FETCH_ASSOC); -$lat1=0; -$lng1=0; -$listUser=[]; -Foreach ($row as $col) { - if (strcmp($col['id'], $id) == 0) { - $lat1 = $col['latitude']; - $lng1 = $col['longitude']; - } -} -if ($lat1==0 && $lng1==0){ - print(json_encode("ERROR No user found in the database")); - exit(1); -} - -Foreach ($row as $col) { - if (strcmp($col['id'],$id)!=0) { - $lat2 = $col['latitude']; - $lng2 = $col['longitude']; - $userID = $col['id']; - $idMusic = $col['idMusic']; - $dist = (new distance)->meters($lat1, $lng1, $lat2, $lng2); - if ($dist <= 100) { - $listUser[] = ['user' => $userID, 'music' => $idMusic]; } - } -} - -print(json_encode($listUser)); - - diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_images/line_chart.png b/Sources/php_script/script/phpMyAdmin/doc/html/_images/line_chart.png deleted file mode 100644 index 4f32fdb501bef8f8bb43e659d22e44d336b51a69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12716 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 Or1DVnL9v2`-~RzJE%kZ; diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_images/query_result_operations.png b/Sources/php_script/script/phpMyAdmin/doc/html/_images/query_result_operations.png deleted file mode 100644 index c789e5331f80ce149284256a5412e9d1a4104bf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6750 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

        2s@vd<+L^`W6!N;P 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 diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/faq.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/faq.rst.txt deleted file mode 100644 index 866a920..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/faq.rst.txt +++ /dev/null @@ -1,2251 +0,0 @@ -.. _faq: - -FAQ - Frequently Asked Questions -================================ - -Please have a look at our `Link section -`_ on the official -phpMyAdmin homepage for in-depth coverage of phpMyAdmin's features and -or interface. - -.. _faqserver: - -Server -++++++ - -.. _faq1_1: - -1.1 My server is crashing each time a specific action is required or phpMyAdmin sends a blank page or a page full of cryptic characters to my browser, what can I do? ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -Try to set the :config:option:`$cfg['OBGzip']` directive to ``false`` in your -:file:`config.inc.php` file and the ``zlib.output_compression`` directive to -``Off`` in your php configuration file. - -.. _faq1_2: - -1.2 My Apache server crashes when using phpMyAdmin. ---------------------------------------------------- - -You should first try the latest versions of Apache (and possibly MySQL). If -your server keeps crashing, please ask for help in the various Apache support -groups. - -.. seealso:: :ref:`faq1_1` - -.. _faq1_3: - -1.3 (withdrawn). ----------------- - -.. _faq1_4: - -1.4 Using phpMyAdmin on IIS, I'm displayed the error message: "The specified CGI application misbehaved by not returning a complete set of HTTP headers ...". -------------------------------------------------------------------------------------------------------------------------------------------------------------- - -You just forgot to read the *install.txt* file from the PHP -distribution. Have a look at the last message in this `PHP bug report #12061 -`_ from the official PHP bug -database. - -.. _faq1_5: - -1.5 Using phpMyAdmin on IIS, I'm facing crashes and/or many error messages with the HTTP. ------------------------------------------------------------------------------------------ - -This is a known problem with the PHP :term:`ISAPI` filter: it's not so stable. -Please use instead the cookie authentication mode. - -.. _faq1_6: - -1.6 I can't use phpMyAdmin on PWS: nothing is displayed! --------------------------------------------------------- - -This seems to be a PWS bug. Filippo Simoncini found a workaround (at -this time there is no better fix): remove or comment the ``DOCTYPE`` -declarations (2 lines) from the scripts :file:`libraries/classes/Header.php` -and :file:`index.php`. - -.. _faq1_7: - -1.7 How can I gzip a dump or a CSV export? It does not seem to work. --------------------------------------------------------------------- - -This feature is based on the ``gzencode()`` -PHP function to be more independent of the platform (Unix/Windows, -Safe Mode or not, and so on). So, you must have Zlib support -(``--with-zlib``). - -.. _faq1_8: - -1.8 I cannot insert a text file in a table, and I get an error about safe mode being in effect. ------------------------------------------------------------------------------------------------ - -Your uploaded file is saved by PHP in the "upload dir", as defined in -:file:`php.ini` by the variable ``upload_tmp_dir`` (usually the system -default is */tmp*). We recommend the following setup for Apache -servers running in safe mode, to enable uploads of files while being -reasonably secure: - -* create a separate directory for uploads: :command:`mkdir /tmp/php` -* give ownership to the Apache server's user.group: :command:`chown - apache.apache /tmp/php` -* give proper permission: :command:`chmod 600 /tmp/php` -* put ``upload_tmp_dir = /tmp/php`` in :file:`php.ini` -* restart Apache - -.. _faq1_9: - -1.9 (withdrawn). ----------------- - -.. _faq1_10: - -1.10 I'm having troubles when uploading files with phpMyAdmin running on a secure server. My browser is Internet Explorer and I'm using the Apache server. ----------------------------------------------------------------------------------------------------------------------------------------------------------- - -As suggested by "Rob M" in the phpWizard forum, add this line to your -*httpd.conf*: - -.. code-block:: apache - - SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown - -It seems to clear up many problems between Internet Explorer and SSL. - -.. _faq1_11: - -1.11 I get an 'open\_basedir restriction' while uploading a file from the import tab. -------------------------------------------------------------------------------------- - -Since version 2.2.4, phpMyAdmin supports servers with open\_basedir -restrictions. However you need to create temporary directory and configure it -as :config:option:`$cfg['TempDir']`. The uploaded files will be moved there, -and after execution of your :term:`SQL` commands, removed. - -.. _faq1_12: - -1.12 I have lost my MySQL root password, what can I do? -------------------------------------------------------- - -phpMyAdmin does authenticate against MySQL server you're using, so to recover -from phpMyAdmin password loss, you need to recover at MySQL level. - -The MySQL manual explains how to `reset the permissions -`_. - -If you are using MySQL server installed by your hosting provider, please -contact their support to recover the password for you. - -.. _faq1_13: - -1.13 (withdrawn). ------------------ - -.. _faq1_14: - -1.14 (withdrawn). ------------------ - -.. _faq1_15: - -1.15 I have problems with *mysql.user* column names. ----------------------------------------------------- - -In previous MySQL versions, the ``User`` and ``Password`` columns were -named ``user`` and ``password``. Please modify your column names to -align with current standards. - -.. _faq1_16: - -1.16 I cannot upload big dump files (memory, HTTP or timeout problems). ------------------------------------------------------------------------ - -Starting with version 2.7.0, the import engine has been re–written and -these problems should not occur. If possible, upgrade your phpMyAdmin -to the latest version to take advantage of the new import features. - -The first things to check (or ask your host provider to check) are the values -of ``max_execution_time``, ``upload_max_filesize``, ``memory_limit`` and -``post_max_size`` in the :file:`php.ini` configuration file. All of these -settings limit the maximum size of data that can be submitted and handled by -PHP. Please note that ``post_max_size`` needs to be larger than -``upload_max_filesize``. There exist several workarounds if your upload is too -big or your hosting provider is unwilling to change the settings: - -* Look at the :config:option:`$cfg['UploadDir']` feature. This allows one to upload a file to the server - via scp, FTP, or your favorite file transfer method. PhpMyAdmin is - then able to import the files from the temporary directory. More - information is available in the :ref:`config` of this document. -* Using a utility (such as `BigDump - `_) to split the files before - uploading. We cannot support this or any third party applications, but - are aware of users having success with it. -* If you have shell (command line) access, use MySQL to import the files - directly. You can do this by issuing the "source" command from within - MySQL: - - .. code-block:: mysql - - source filename.sql; - -.. _faq1_17: - -1.17 Which Database versions does phpMyAdmin support? ------------------------------------------------------ - -For `MySQL `_, versions 5.5 and newer are supported. -For older MySQL versions, our `Downloads `_ page offers older phpMyAdmin versions -(which may have become unsupported). - -For `MariaDB `_, versions 5.5 and newer are supported. - -.. _faq1_17a: - -1.17a I cannot connect to the MySQL server. It always returns the error message, "Client does not support authentication protocol requested by server; consider upgrading MySQL client" ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -You tried to access MySQL with an old MySQL client library. The -version of your MySQL client library can be checked in your phpinfo() -output. In general, it should have at least the same minor version as -your server - as mentioned in :ref:`faq1_17`. This problem is -generally caused by using MySQL version 4.1 or newer. MySQL changed -the authentication hash and your PHP is trying to use the old method. -The proper solution is to use the `mysqli extension -`_ with the proper client library to match -your MySQL installation. More -information (and several workarounds) are located in the `MySQL -Documentation `_. - -.. _faq1_18: - -1.18 (withdrawn). ------------------ - -.. _faq1_19: - -1.19 I can't run the "display relations" feature because the script seems not to know the font face I'm using! --------------------------------------------------------------------------------------------------------------- - -The :term:`TCPDF` library we're using for this feature requires some special -files to use font faces. Please refers to the `TCPDF manual -`_ to build these files. - -.. _faqmysql: - -1.20 I receive an error about missing mysqli and mysql extensions. ------------------------------------------------------------------- - -To connect to a MySQL server, PHP needs a set of MySQL functions -called "MySQL extension". This extension may be part of the PHP -distribution (compiled-in), otherwise it needs to be loaded -dynamically. Its name is probably *mysqli.so* or *php\_mysqli.dll*. -phpMyAdmin tried to load the extension but failed. Usually, the -problem is solved by installing a software package called "PHP-MySQL" -or something similar. - -There was two interfaces PHP provided as MySQL extensions - ``mysql`` -and ``mysqli``. The ``mysql`` interface was removed in PHP 7.0. - -This problem can be also caused by wrong paths in the :file:`php.ini` or using -wrong :file:`php.ini`. - -Make sure that the extension files do exist in the folder which the -``extension_dir`` points to and that the corresponding lines in your -:file:`php.ini` are not commented out (you can use ``phpinfo()`` to check -current setup): - -.. code-block:: ini - - [PHP] - - ; Directory in which the loadable extensions (modules) reside. - extension_dir = "C:/Apache2/modules/php/ext" - -The :file:`php.ini` can be loaded from several locations (especially on -Windows), so please check you're updating the correct one. If using Apache, you -can tell it to use specific path for this file using ``PHPIniDir`` directive: - -.. code-block:: apache - - LoadModule php7_module "C:/php7/php7apache2_4.dll" - - PHPIniDir "C:/php7" - - AddType text/html .php - AddHandler application/x-httpd-php .php - - - -In some rare cases this problem can be also caused by other extensions loaded -in PHP which prevent MySQL extensions to be loaded. If anything else fails, you -can try commenting out extensions for other databases from :file:`php.ini`. - -.. _faq1_21: - -1.21 I am running the CGI version of PHP under Unix, and I cannot log in using cookie auth. -------------------------------------------------------------------------------------------- - -In :file:`php.ini`, set ``mysql.max_links`` higher than 1. - -.. _faq1_22: - -1.22 I don't see the "Location of text file" field, so I cannot upload. ------------------------------------------------------------------------ - -This is most likely because in :file:`php.ini`, your ``file_uploads`` -parameter is not set to "on". - -.. _faq1_23: - -1.23 I'm running MySQL on a Win32 machine. Each time I create a new table the table and column names are changed to lowercase! ------------------------------------------------------------------------------------------------------------------------------- - -This happens because the MySQL directive ``lower_case_table_names`` -defaults to 1 (``ON``) in the Win32 version of MySQL. You can change -this behavior by simply changing the directive to 0 (``OFF``): Just -edit your ``my.ini`` file that should be located in your Windows -directory and add the following line to the group [mysqld]: - -.. code-block:: ini - - set-variable = lower_case_table_names=0 - -.. note:: - - Forcing this variable to 0 with --lower-case-table-names=0 on a - case-insensitive filesystem and access MyISAM tablenames using different - lettercases, index corruption may result. - -Next, save the file and restart the MySQL service. You can always -check the value of this directive using the query - -.. code-block:: mysql - - SHOW VARIABLES LIKE 'lower_case_table_names'; - -.. seealso:: `Identifier Case Sensitivity in the MySQL Reference Manual `_ - -.. _faq1_24: - -1.24 (withdrawn). ------------------ - -.. _faq1_25: - -1.25 I am running Apache with mod\_gzip-1.3.26.1a on Windows XP, and I get problems, such as undefined variables when I run a SQL query. ----------------------------------------------------------------------------------------------------------------------------------------- - -A tip from Jose Fandos: put a comment on the following two lines in -httpd.conf, like this: - -.. code-block:: apache - - # mod_gzip_item_include file \.php$ - # mod_gzip_item_include mime "application/x-httpd-php.*" - -as this version of mod\_gzip on Apache (Windows) has problems handling -PHP scripts. Of course you have to restart Apache. - -.. _faq1_26: - -1.26 I just installed phpMyAdmin in my document root of IIS but I get the error "No input file specified" when trying to run phpMyAdmin. ----------------------------------------------------------------------------------------------------------------------------------------- - -This is a permission problem. Right-click on the phpmyadmin folder and -choose properties. Under the tab Security, click on "Add" and select -the user "IUSR\_machine" from the list. Now set their permissions and it -should work. - -.. _faq1_27: - -1.27 I get empty page when I want to view huge page (eg. db\_structure.php with plenty of tables). --------------------------------------------------------------------------------------------------- - -This was caused by a `PHP bug `_ that occur when -GZIP output buffering is enabled. If you turn off it (by -:config:option:`$cfg['OBGzip']` in :file:`config.inc.php`), it should work. -This bug will has been fixed in PHP 5.0.0. - -.. _faq1_28: - -1.28 My MySQL server sometimes refuses queries and returns the message 'Errorcode: 13'. What does this mean? ------------------------------------------------------------------------------------------------------------- - -This can happen due to a MySQL bug when having database / table names -with upper case characters although ``lower_case_table_names`` is -set to 1. To fix this, turn off this directive, convert all database -and table names to lower case and turn it on again. Alternatively, -there's a bug-fix available starting with MySQL 3.23.56 / -4.0.11-gamma. - -.. _faq1_29: - -1.29 When I create a table or modify a column, I get an error and the columns are duplicated. ---------------------------------------------------------------------------------------------- - -It is possible to configure Apache in such a way that PHP has problems -interpreting .php files. - -The problems occur when two different (and conflicting) set of -directives are used: - -.. code-block:: apache - - SetOutputFilter PHP - SetInputFilter PHP - -and - -.. code-block:: apache - - AddType application/x-httpd-php .php - -In the case we saw, one set of directives was in -``/etc/httpd/conf/httpd.conf``, while the other set was in -``/etc/httpd/conf/addon-modules/php.conf``. The recommended way is -with ``AddType``, so just comment out the first set of lines and -restart Apache: - -.. code-block:: apache - - #SetOutputFilter PHP - #SetInputFilter PHP - -.. _faq1_30: - -1.30 I get the error "navigation.php: Missing hash". ----------------------------------------------------- - -This problem is known to happen when the server is running Turck -MMCache but upgrading MMCache to version 2.3.21 solves the problem. - -.. _faq1_31: - -1.31 Which PHP versions does phpMyAdmin support? ------------------------------------------------- - -Since release 4.5, phpMyAdmin supports only PHP 5.5 and newer. Since release -4.1 phpMyAdmin supports only PHP 5.3 and newer. For PHP 5.2 you can use 4.0.x -releases. - -PHP 7 is supported since phpMyAdmin 4.6, PHP 7.1 is supported since 4.6.5, -PHP 7.2 is supported since 4.7.4. - -HHVM is supported up to phpMyAdmin 4.8. - -Since release 5.0, phpMyAdmin supports only PHP 7.1 and newer. -Since release 5.2, phpMyAdmin supports only PHP 7.2 and newer. - -.. _faq1_32: - -1.32 Can I use HTTP authentication with IIS? --------------------------------------------- - -Yes. This procedure was tested with phpMyAdmin 2.6.1, PHP 4.3.9 in -:term:`ISAPI` mode under :term:`IIS` 5.1. - -#. In your :file:`php.ini` file, set ``cgi.rfc2616_headers = 0`` -#. In ``Web Site Properties -> File/Directory Security -> Anonymous - Access`` dialog box, check the ``Anonymous access`` checkbox and - uncheck any other checkboxes (i.e. uncheck ``Basic authentication``, - ``Integrated Windows authentication``, and ``Digest`` if it's - enabled.) Click ``OK``. -#. In ``Custom Errors``, select the range of ``401;1`` through ``401;5`` - and click the ``Set to Default`` button. - -.. seealso:: :rfc:`2616` - -.. _faq1_33: - -1.33 (withdrawn). ------------------ - -.. _faq1_34: - -1.34 Can I directly access a database or table pages? ------------------------------------------------------ - -Yes. Out of the box, you can use a :term:`URL` like -``http://server/phpMyAdmin/index.php?server=X&db=database&table=table&target=script``. -For ``server`` you can use the server number -which refers to the numeric host index (from ``$i``) in -:file:`config.inc.php`. The table and script parts are optional. - -If you want a URL like -``http://server/phpMyAdmin/database[/table][/script]``, you need to do some additional configuration. The following -lines apply only for the `Apache `_ web server. -First, make sure that you have enabled some features within the Apache global -configuration. You need ``Options SymLinksIfOwnerMatch`` and ``AllowOverride -FileInfo`` enabled for directory where phpMyAdmin is installed and you -need mod\_rewrite to be enabled. Then you just need to create the -following :term:`.htaccess` file in root folder of phpMyAdmin installation (don't -forget to change directory name inside of it): - -.. code-block:: apache - - RewriteEngine On - RewriteBase /path_to_phpMyAdmin - RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&table=$2&target=$3 [R] - RewriteRule ^([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&target=$2 [R] - RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ index.php?db=$1&table=$2 [R] - RewriteRule ^([a-zA-Z0-9_]+)$ index.php?db=$1 [R] - -.. seealso:: :ref:`faq4_8` - -.. versionchanged:: 5.1.0 - - Support for using the ``target`` parameter was removed in phpMyAdmin 5.1.0. - Use the ``route`` parameter instead. - -.. _faq1_35: - -1.35 Can I use HTTP authentication with Apache CGI? ---------------------------------------------------- - -Yes. However you need to pass authentication variable to :term:`CGI` using -following rewrite rule: - -.. code-block:: apache - - RewriteEngine On - RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L] - -.. _faq1_36: - -1.36 I get an error "500 Internal Server Error". ------------------------------------------------- - -There can be many explanations to this and a look at your server's -error log file might give a clue. - -.. _faq1_37: - -1.37 I run phpMyAdmin on cluster of different machines and password encryption in cookie auth doesn't work. ------------------------------------------------------------------------------------------------------------ - -If your cluster consist of different architectures, PHP code used for -encryption/decryption won't work correctly. This is caused by use of -pack/unpack functions in code. Only solution is to use openssl -extension which works fine in this case. - -.. _faq1_38: - -1.38 Can I use phpMyAdmin on a server on which Suhosin is enabled? ------------------------------------------------------------------- - -Yes but the default configuration values of Suhosin are known to cause -problems with some operations, for example editing a table with many -columns and no :term:`primary key` or with textual :term:`primary key`. - -Suhosin configuration might lead to malfunction in some cases and it -can not be fully avoided as phpMyAdmin is kind of application which -needs to transfer big amounts of columns in single HTTP request, what -is something what Suhosin tries to prevent. Generally all -``suhosin.request.*``, ``suhosin.post.*`` and ``suhosin.get.*`` -directives can have negative effect on phpMyAdmin usability. You can -always find in your error logs which limit did cause dropping of -variable, so you can diagnose the problem and adjust matching -configuration variable. - -The default values for most Suhosin configuration options will work in -most scenarios, however you might want to adjust at least following -parameters: - -* `suhosin.request.max\_vars `_ should - be increased (eg. 2048) -* `suhosin.post.max\_vars `_ should be - increased (eg. 2048) -* `suhosin.request.max\_array\_index\_length `_ - should be increased (eg. 256) -* `suhosin.post.max\_array\_index\_length `_ - should be increased (eg. 256) -* `suhosin.request.max\_totalname\_length `_ - should be increased (eg. 8192) -* `suhosin.post.max\_totalname\_length `_ should be - increased (eg. 8192) -* `suhosin.get.max\_value\_length `_ - should be increased (eg. 1024) -* `suhosin.sql.bailout\_on\_error `_ - needs to be disabled (the default) -* `suhosin.log.\* `_ should not - include :term:`SQL`, otherwise you get big - slowdown -* `suhosin.sql.union `_ must be disabled (which is the default). -* `suhosin.sql.multiselect `_ must be disabled (which is the default). -* `suhosin.sql.comment `_ must be disabled (which is the default). - -To further improve security, we also recommend these modifications: - -* `suhosin.executor.include.max\_traversal `_ should be - enabled as a mitigation against local file inclusion attacks. We suggest - setting this to 2 as ``../`` is used with the ReCaptcha library. -* `suhosin.cookie.encrypt `_ should be enabled. -* `suhosin.executor.disable_emodifier `_ should be enabled. - -You can also disable the warning using the :config:option:`$cfg['SuhosinDisableWarning']`. - -.. _faq1_39: - -1.39 When I try to connect via https, I can log in, but then my connection is redirected back to http. What can cause this behavior? ------------------------------------------------------------------------------------------------------------------------------------- - -This is caused by the fact that PHP scripts have no knowledge that the site is -using https. Depending on used webserver, you should configure it to let PHP -know about URL and scheme used to access it. - -For example in Apache ensure that you have enabled ``SSLOptions`` and -``StdEnvVars`` in the configuration. - -.. seealso:: - -.. _faq1_40: - -1.40 When accessing phpMyAdmin via an Apache reverse proxy, cookie login does not work. ---------------------------------------------------------------------------------------- - -To be able to use cookie auth Apache must know that it has to rewrite -the set-cookie headers. Example from the Apache 2.2 documentation: - -.. code-block:: apache - - ProxyPass /mirror/foo/ http://backend.example.com/ - ProxyPassReverse /mirror/foo/ http://backend.example.com/ - ProxyPassReverseCookieDomain backend.example.com public.example.com - ProxyPassReverseCookiePath / /mirror/foo/ - -Note: if the backend url looks like ``http://server/~user/phpmyadmin``, the -tilde (~) must be url encoded as %7E in the ProxyPassReverse\* lines. -This is not specific to phpmyadmin, it's just the behavior of Apache. - -.. code-block:: apache - - ProxyPass /mirror/foo/ http://backend.example.com/~user/phpmyadmin - ProxyPassReverse /mirror/foo/ http://backend.example.com/%7Euser/phpmyadmin - ProxyPassReverseCookiePath /%7Euser/phpmyadmin /mirror/foo - -.. seealso:: , :config:option:`$cfg['PmaAbsoluteUri']` - -.. _faq1_41: - -1.41 When I view a database and ask to see its privileges, I get an error about an unknown column. --------------------------------------------------------------------------------------------------- - -The MySQL server's privilege tables are not up to date, you need to -run the :command:`mysql_upgrade` command on the server. - -.. _faq1_42: - -1.42 How can I prevent robots from accessing phpMyAdmin? --------------------------------------------------------- - -You can add various rules to :term:`.htaccess` to filter access based on user agent -field. This is quite easy to circumvent, but could prevent at least -some robots accessing your installation. - -.. code-block:: apache - - RewriteEngine on - - # Allow only GET and POST verbs - RewriteCond %{REQUEST_METHOD} !^(GET|POST)$ [NC,OR] - - # Ban Typical Vulnerability Scanners and others - # Kick out Script Kiddies - RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR] - RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|wkito|pikto|scan|acunetix).* [NC,OR] - RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR] - - # Ban Search Engines, Crawlers to your administrative panel - # No reasons to access from bots - # Ultimately Better than the useless robots.txt - # Did google respect robots.txt? - # Try google: intitle:phpMyAdmin intext:"Welcome to phpMyAdmin *.*.*" intext:"Log in" -wiki -forum -forums -questions intext:"Cookies must be enabled" - RewriteCond %{HTTP_USER_AGENT} ^.*(AdsBot-Google|ia_archiver|Scooter|Ask.Jeeves|Baiduspider|Exabot|FAST.Enterprise.Crawler|FAST-WebCrawler|www\.neomo\.de|Gigabot|Mediapartners-Google|Google.Desktop|Feedfetcher-Google|Googlebot|heise-IT-Markt-Crawler|heritrix|ibm.com\cs/crawler|ICCrawler|ichiro|MJ12bot|MetagerBot|msnbot-NewsBlogs|msnbot|msnbot-media|NG-Search|lucene.apache.org|NutchCVS|OmniExplorer_Bot|online.link.validator|psbot0|Seekbot|Sensis.Web.Crawler|SEO.search.Crawler|Seoma.\[SEO.Crawler\]|SEOsearch|Snappy|www.urltrends.com|www.tkl.iis.u-tokyo.ac.jp/~crawler|SynooBot|crawleradmin.t-info@telekom.de|TurnitinBot|voyager|W3.SiteSearch.Crawler|W3C-checklink|W3C_Validator|www.WISEnutbot.com|yacybot|Yahoo-MMCrawler|Yahoo\!.DE.Slurp|Yahoo\!.Slurp|YahooSeeker).* [NC] - RewriteRule .* - [F] - -.. _faq1_43: - -1.43 Why can't I display the structure of my table containing hundreds of columns? ----------------------------------------------------------------------------------- - -Because your PHP's ``memory_limit`` is too low; adjust it in :file:`php.ini`. - -.. _faq1:44: - -1.44 How can I reduce the installed size of phpMyAdmin on disk? ---------------------------------------------------------------- - -Some users have requested to be able to reduce the size of the phpMyAdmin installation. -This is not recommended and could lead to confusion over missing features, but can be done. -A list of files and corresponding functionality which degrade gracefully when removed include: - -* :file:`./vendor/tecnickcom/tcpdf` folder (exporting to PDF) -* :file:`./locale/` folder, or unused subfolders (interface translations) -* Any unused themes in :file:`./themes/` -* :file:`./js/vendor/jquery/src/` (included for licensing reasons) -* :file:`./js/line_counts.php` (removed in phpMyAdmin 4.8) -* :file:`./doc/` (documentation) -* :file:`./setup/` (setup script) -* :file:`./examples/` -* :file:`./sql/` (SQL scripts to configure advanced functionality) -* :file:`./js/vendor/openlayers/` (GIS visualization) - -.. _faq1_45: - -1.45 I get an error message about unknown authentication method caching_sha2_password when trying to log in ------------------------------------------------------------------------------------------------------------ - -When logging in using MySQL version 8 or newer, you may encounter an error message like this: - - mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] - - mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client - -This error is because of a version compatibility problem between PHP and MySQL. The MySQL project introduced a new authentication -method (our tests show this began with version 8.0.11) however PHP did not include the ability to use that authentication method. -PHP reports that this was fixed in PHP version 7.4. - -Users experiencing this are encouraged to upgrade their PHP installation, however a workaround exists. Your MySQL user account -can be set to use the older authentication with a command such as - -.. code-block:: mysql - - ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PASSWORD'; - -.. seealso:: , , - -.. _faqconfig: - -Configuration -+++++++++++++ - -.. _faq2_1: - -2.1 The error message "Warning: Cannot add header information - headers already sent by ..." is displayed, what's the problem? ------------------------------------------------------------------------------------------------------------------------------- - -Edit your :file:`config.inc.php` file and ensure there is nothing (I.E. no -blank lines, no spaces, no characters...) neither before the ```` tag at the end. - -.. _faq2_2: - -2.2 phpMyAdmin can't connect to MySQL. What's wrong? ----------------------------------------------------- - -Either there is an error with your PHP setup or your username/password -is wrong. Try to make a small script which uses mysql\_connect and see -if it works. If it doesn't, it may be you haven't even compiled MySQL -support into PHP. - -.. _faq2_3: - -2.3 The error message "Warning: MySQL Connection Failed: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111) ..." is displayed. What can I do? ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -The error message can also be: :guilabel:`Error #2002 - The server is not -responding (or the local MySQL server's socket is not correctly configured)`. - -First, you need to determine what socket is being used by MySQL. To do this, -connect to your server and go to the MySQL bin directory. In this directory -there should be a file named *mysqladmin*. Type ``./mysqladmin variables``, and -this should give you a bunch of info about your MySQL server, including the -socket (*/tmp/mysql.sock*, for example). You can also ask your ISP for the -connection info or, if you're hosting your own, connect from the 'mysql' -command-line client and type 'status' to get the connection type and socket or -port number. - -Then, you need to tell PHP to use this socket. You can do this for all PHP in -the :file:`php.ini` or for phpMyAdmin only in the :file:`config.inc.php`. For -example: :config:option:`$cfg['Servers'][$i]['socket']` Please also make sure -that the permissions of this file allow to be readable by your webserver. - -On my RedHat-Box the socket of MySQL is */var/lib/mysql/mysql.sock*. -In your :file:`php.ini` you will find a line - -.. code-block:: ini - - mysql.default_socket = /tmp/mysql.sock - -change it to - -.. code-block:: ini - - mysql.default_socket = /var/lib/mysql/mysql.sock - -Then restart apache and it will work. - -Have also a look at the `corresponding section of the MySQL -documentation `_. - -.. _faq2_4: - -2.4 Nothing is displayed by my browser when I try to run phpMyAdmin, what can I do? ------------------------------------------------------------------------------------ - -Try to set the :config:option:`$cfg['OBGzip']` directive to ``false`` in the phpMyAdmin configuration -file. It helps sometime. Also have a look at your PHP version number: -if it contains "b" or "alpha" it means you're running a testing -version of PHP. That's not a so good idea, please upgrade to a plain -revision. - -.. _faq2_5: - -2.5 Each time I want to insert or change a row or drop a database or a table, an error 404 (page not found) is displayed or, with HTTP or cookie authentication, I'm asked to log in again. What's wrong? ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -Check your webserver setup if it correctly fills in either PHP_SELF or REQUEST_URI variables. - -If you are running phpMyAdmin behind reverse proxy, please set the -:config:option:`$cfg['PmaAbsoluteUri']` directive in the phpMyAdmin -configuration file to match your setup. - -.. _faq2_6: - -2.6 I get an "Access denied for user: 'root@localhost' (Using password: YES)"-error when trying to access a MySQL-Server on a host which is port-forwarded for my localhost. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -When you are using a port on your localhost, which you redirect via -port-forwarding to another host, MySQL is not resolving the localhost -as expected. Erik Wasser explains: The solution is: if your host is -"localhost" MySQL (the command line tool :command:`mysql` as well) always -tries to use the socket connection for speeding up things. And that -doesn't work in this configuration with port forwarding. If you enter -"127.0.0.1" as hostname, everything is right and MySQL uses the -:term:`TCP` connection. - -.. _faqthemes: - -2.7 Using and creating themes ------------------------------ - -See :ref:`themes`. - -.. _faqmissingparameters: - -2.8 I get "Missing parameters" errors, what can I do? ------------------------------------------------------ - -Here are a few points to check: - -* In :file:`config.inc.php`, try to leave the :config:option:`$cfg['PmaAbsoluteUri']` directive empty. See also - :ref:`faq4_7`. -* Maybe you have a broken PHP installation or you need to upgrade your - Zend Optimizer. See . -* If you are using Hardened PHP with the ini directive - ``varfilter.max_request_variables`` set to the default (200) or - another low value, you could get this error if your table has a high - number of columns. Adjust this setting accordingly. (Thanks to Klaus - Dorninger for the hint). -* In the :file:`php.ini` directive ``arg_separator.input``, a value of ";" - will cause this error. Replace it with "&;". -* If you are using `Suhosin `_, you - might want to increase `request limits `_. -* The directory specified in the :file:`php.ini` directive - ``session.save_path`` does not exist or is read-only (this can be caused - by `bug in the PHP installer `_). - -.. _faq2_9: - -2.9 Seeing an upload progress bar ---------------------------------- - -To be able to see a progress bar during your uploads, your server must -have the `uploadprogress `_ extension, and -you must be running PHP 5.4.0 or higher. Moreover, the JSON extension -has to be enabled in your PHP. - -If using PHP 5.4.0 or higher, you must set -``session.upload_progress.enabled`` to ``1`` in your :file:`php.ini`. However, -starting from phpMyAdmin version 4.0.4, session-based upload progress has -been temporarily deactivated due to its problematic behavior. - -.. _faqlimitations: - -Known limitations -+++++++++++++++++ - -.. _login_bug: - -3.1 When using HTTP authentication, a user who logged out can not log in again in with the same nick. ------------------------------------------------------------------------------------------------------ - -This is related to the authentication mechanism (protocol) used by -phpMyAdmin. To bypass this problem: just close all the opened browser -windows and then go back to phpMyAdmin. You should be able to log in -again. - -.. _faq3_2: - -3.2 When dumping a large table in compressed mode, I get a memory limit error or a time limit error. ----------------------------------------------------------------------------------------------------- - -Compressed dumps are built in memory and because of this are limited -to php's memory limit. For gzip/bzip2 exports this can be overcome -since 2.5.4 using :config:option:`$cfg['CompressOnFly']` (enabled by default). -zip exports can not be handled this way, so if you need zip files for larger -dump, you have to use another way. - -.. _faq3_3: - -3.3 With InnoDB tables, I lose foreign key relationships when I rename a table or a column. -------------------------------------------------------------------------------------------- - -This is an InnoDB bug, see . - -.. _faq3_4: - -3.4 I am unable to import dumps I created with the mysqldump tool bundled with the MySQL server distribution. -------------------------------------------------------------------------------------------------------------- - -The problem is that older versions of ``mysqldump`` created invalid -comments like this: - -.. code-block:: mysql - - -- MySQL dump 8.22 - -- - -- Host: localhost Database: database - --------------------------------------------------------- - -- Server version 3.23.54 - -The invalid part of the code is the horizontal line made of dashes -that appears once in every dump created with mysqldump. If you want to -run your dump you have to turn it into valid MySQL. This means, you -have to add a whitespace after the first two dashes of the line or add -a # before it: ``-- -------------------------------------------------------`` or -``#---------------------------------------------------------`` - -.. _faq3_5: - -3.5 When using nested folders, multiple hierarchies are displayed in a wrong manner. ------------------------------------------------------------------------------------- - -Please note that you should not use the separating string multiple -times without any characters between them, or at the beginning/end of -your table name. If you have to, think about using another -TableSeparator or disabling that feature. - -.. seealso:: :config:option:`$cfg['NavigationTreeTableSeparator']` - -.. _faq3_6: - -3.6 (withdrawn). ------------------ - -.. _faq3_7: - -3.7 I have table with many (100+) columns and when I try to browse table I get series of errors like "Warning: unable to parse url". How can this be fixed? ------------------------------------------------------------------------------------------------------------------------------------------------------------ - -Your table neither have a :term:`primary key` nor an :term:`unique key`, so we must -use a long expression to identify this row. This causes problems to -parse\_url function. The workaround is to create a :term:`primary key` -or :term:`unique key`. - -.. _faq3_8: - -3.8 I cannot use (clickable) HTML-forms in columns where I put a MIME-Transformation onto! ------------------------------------------------------------------------------------------- - -Due to a surrounding form-container (for multi-row delete checkboxes), -no nested forms can be put inside the table where phpMyAdmin displays -the results. You can, however, use any form inside of a table if keep -the parent form-container with the target to tbl\_row\_delete.php and -just put your own input-elements inside. If you use a custom submit -input field, the form will submit itself to the displaying page again, -where you can validate the $HTTP\_POST\_VARS in a transformation. For -a tutorial on how to effectively use transformations, see our `Link -section `_ on the -official phpMyAdmin-homepage. - -.. _faq3_9: - -3.9 I get error messages when using "--sql\_mode=ANSI" for the MySQL server. ----------------------------------------------------------------------------- - -When MySQL is running in ANSI-compatibility mode, there are some major -differences in how :term:`SQL` is structured (see -). Most important of all, the -quote-character (") is interpreted as an identifier quote character and not as -a string quote character, which makes many internal phpMyAdmin operations into -invalid :term:`SQL` statements. There is no -workaround to this behaviour. News to this item will be posted in `issue -#7383 `_. - -.. _faq3_10: - -3.10 Homonyms and no primary key: When the results of a SELECT display more that one column with the same value (for example ``SELECT lastname from employees where firstname like 'A%'`` and two "Smith" values are displayed), if I click Edit I cannot be sure that I am editing the intended row. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - -Please make sure that your table has a :term:`primary key`, so that phpMyAdmin -can use it for the Edit and Delete links. - -.. _faq3_11: - -3.11 The number of rows for InnoDB tables is not correct. ---------------------------------------------------------- - -phpMyAdmin uses a quick method to get the row count, and this method only -returns an approximate count in the case of InnoDB tables. See -:config:option:`$cfg['MaxExactCount']` for a way to modify those results, but -this could have a serious impact on performance. -However, one can easily replace the approximate row count with exact count by -simply clicking on the approximate count. This can also be done for all tables -at once by clicking on the rows sum displayed at the bottom. - -.. seealso:: :config:option:`$cfg['MaxExactCount']` - -.. _faq3_12: - -3.12 (withdrawn). ------------------ - -.. _faq3_13: - -3.13 I get an error when entering ``USE`` followed by a db name containing an hyphen. -------------------------------------------------------------------------------------- - -The tests I have made with MySQL 5.1.49 shows that the API does not -accept this syntax for the USE command. - -.. _faq3_14: - -3.14 I am not able to browse a table when I don't have the right to SELECT one of the columns. ----------------------------------------------------------------------------------------------- - -This has been a known limitation of phpMyAdmin since the beginning and -it's not likely to be solved in the future. - -.. _faq3_15: - -3.15 (withdrawn). ------------------ - -.. _faq3_16: - -3.16 (withdrawn). ------------------ - -.. _faq3_17: - -3.17 (withdrawn). ------------------ - -.. _faq3_18: - -3.18 When I import a CSV file that contains multiple tables, they are lumped together into a single table. ----------------------------------------------------------------------------------------------------------- - -There is no reliable way to differentiate tables in :term:`CSV` format. For the -time being, you will have to break apart :term:`CSV` files containing multiple -tables. - -.. _faq3_19: - -3.19 When I import a file and have phpMyAdmin determine the appropriate data structure it only uses int, decimal, and varchar types. ------------------------------------------------------------------------------------------------------------------------------------- - -Currently, the import type-detection system can only assign these -MySQL types to columns. In future, more will likely be added but for -the time being you will have to edit the structure to your liking -post-import. Also, you should note the fact that phpMyAdmin will use -the size of the largest item in any given column as the column size -for the appropriate type. If you know you will be adding larger items -to that column then you should manually adjust the column sizes -accordingly. This is done for the sake of efficiency. - -.. _faq3_20: - -3.20 After upgrading, some bookmarks are gone or their content cannot be shown. -------------------------------------------------------------------------------- - -At some point, the character set used to store bookmark content has changed. -It's better to recreate your bookmark from the newer phpMyAdmin version. - -.. _faq3_21: - -3.21 I am unable to log in with a username containing unicode characters such as á. ------------------------------------------------------------------------------------ - -This can happen if MySQL server is not configured to use utf-8 as default -charset. This is a limitation of how PHP and the MySQL server interact; there -is no way for PHP to set the charset before authenticating. - -.. seealso:: - - `phpMyAdmin issue 12232 `_, - `MySQL documentation note `_ - -.. _faqmultiuser: - -ISPs, multi-user installations -++++++++++++++++++++++++++++++ - -.. _faq4_1: - -4.1 I'm an ISP. Can I setup one central copy of phpMyAdmin or do I need to install it for each customer? --------------------------------------------------------------------------------------------------------- - -Since version 2.0.3, you can setup a central copy of phpMyAdmin for all your -users. The development of this feature was kindly sponsored by NetCologne GmbH. -This requires a properly setup MySQL user management and phpMyAdmin -:term:`HTTP` or cookie authentication. - -.. seealso:: :ref:`authentication_modes` - -.. _faq4_2: - -4.2 What's the preferred way of making phpMyAdmin secure against evil access? ------------------------------------------------------------------------------ - -This depends on your system. If you're running a server which cannot be -accessed by other people, it's sufficient to use the directory protection -bundled with your webserver (with Apache you can use :term:`.htaccess` files, -for example). If other people have telnet access to your server, you should use -phpMyAdmin's :term:`HTTP` or cookie authentication features. - -Suggestions: - -* Your :file:`config.inc.php` file should be ``chmod 660``. -* All your phpMyAdmin files should be chown -R phpmy.apache, where phpmy - is a user whose password is only known to you, and apache is the group - under which Apache runs. -* Follow security recommendations for PHP and your webserver. - -.. _faq4_3: - -4.3 I get errors about not being able to include a file in */lang* or in */libraries*. --------------------------------------------------------------------------------------- - -Check :file:`php.ini`, or ask your sysadmin to check it. The -``include_path`` must contain "." somewhere in it, and -``open_basedir``, if used, must contain "." and "./lang" to allow -normal operation of phpMyAdmin. - -.. _faq4_4: - -4.4 phpMyAdmin always gives "Access denied" when using HTTP authentication. ---------------------------------------------------------------------------- - -This could happen for several reasons: - -* :config:option:`$cfg['Servers'][$i]['controluser']` and/or :config:option:`$cfg['Servers'][$i]['controlpass']` are wrong. -* The username/password you specify in the login dialog are invalid. -* You have already setup a security mechanism for the phpMyAdmin- - directory, eg. a :term:`.htaccess` file. This would interfere with phpMyAdmin's - authentication, so remove it. - -.. _faq4_5: - -4.5 Is it possible to let users create their own databases? ------------------------------------------------------------ - -Starting with 2.2.5, in the user management page, you can enter a -wildcard database name for a user (for example "joe%"), and put the -privileges you want. For example, adding ``SELECT, INSERT, UPDATE, -DELETE, CREATE, DROP, INDEX, ALTER`` would let a user create/manage -their database(s). - -.. _faq4_6: - -4.6 How can I use the Host-based authentication additions? ----------------------------------------------------------- - -If you have existing rules from an old :term:`.htaccess` file, you can take them and -add a username between the ``'deny'``/``'allow'`` and ``'from'`` -strings. Using the username wildcard of ``'%'`` would be a major -benefit here if your installation is suited to using it. Then you can -just add those updated lines into the -:config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` array. - -If you want a pre-made sample, you can try this fragment. It stops the -'root' user from logging in from any networks other than the private -network :term:`IP` blocks. - -.. code-block:: php - - //block root from logging in except from the private networks - $cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow'; - $cfg['Servers'][$i]['AllowDeny']['rules'] = [ - 'deny root from all', - 'allow root from localhost', - 'allow root from 10.0.0.0/8', - 'allow root from 192.168.0.0/16', - 'allow root from 172.16.0.0/12', - ]; - -.. _faq4_7: - -4.7 Authentication window is displayed more than once, why? ------------------------------------------------------------ - -This happens if you are using a :term:`URL` to start phpMyAdmin which is -different than the one set in your :config:option:`$cfg['PmaAbsoluteUri']`. For -example, a missing "www", or entering with an :term:`IP` address while a domain -name is defined in the config file. - -.. _faq4_8: - -4.8 Which parameters can I use in the URL that starts phpMyAdmin? ------------------------------------------------------------------ - -When starting phpMyAdmin, you can use the ``db`` -and ``server`` parameters. This last one can contain -either the numeric host index (from ``$i`` of the configuration file) -or one of the host names present in the configuration file. - -For example, to jump directly to a particular database, a URL can be constructed as -``https://example.com/phpmyadmin/?db=sakila``. - -.. seealso:: :ref:`faq1_34` - -.. versionchanged:: 4.9.0 - - Support for using the ``pma_username`` and ``pma_password`` parameters was removed - in phpMyAdmin 4.9.0 (see `PMASA-2019-4 `_). - -.. _faqbrowsers: - -Browsers or client OS -+++++++++++++++++++++ - -.. _faq5_1: - -5.1 I get an out of memory error, and my controls are non-functional, when trying to create a table with more than 14 columns. ------------------------------------------------------------------------------------------------------------------------------- - -We could reproduce this problem only under Win98/98SE. Testing under -WinNT4 or Win2K, we could easily create more than 60 columns. A -workaround is to create a smaller number of columns, then come back to -your table properties and add the other columns. - -.. _faq5_2: - -5.2 With Xitami 2.5b4, phpMyAdmin won't process form fields. ------------------------------------------------------------- - -This is not a phpMyAdmin problem but a Xitami known bug: you'll face -it with each script/website that use forms. Upgrade or downgrade your -Xitami server. - -.. _faq5_3: - -5.3 I have problems dumping tables with Konqueror (phpMyAdmin 2.2.2). ---------------------------------------------------------------------- - -With Konqueror 2.1.1: plain dumps, zip and gzip dumps work ok, except -that the proposed file name for the dump is always 'tbl\_dump.php'. -The bzip2 dumps don't seem to work. With Konqueror 2.2.1: plain dumps -work; zip dumps are placed into the user's temporary directory, so -they must be moved before closing Konqueror, or else they disappear. -gzip dumps give an error message. Testing needs to be done for -Konqueror 2.2.2. - -.. _faq5_4: - -5.4 I can't use the cookie authentication mode because Internet Explorer never stores the cookies. --------------------------------------------------------------------------------------------------- - -MS Internet Explorer seems to be really buggy about cookies, at least -till version 6. - -.. _faq5_5: - -5.5 (withdrawn). ----------------------------------------------------------------------------- - -.. _faq5_6: - -5.6 (withdrawn). ------------------------------------------------------------------------------------------------------------------------------------------------------------------ - -.. _faq5_7: - -5.7 I refresh (reload) my browser, and come back to the welcome page. ---------------------------------------------------------------------- - -Some browsers support right-clicking into the frame you want to -refresh, just do this in the right frame. - -.. _faq5_8: - -5.8 With Mozilla 0.9.7 I have problems sending a query modified in the query box. ---------------------------------------------------------------------------------- - -Looks like a Mozilla bug: 0.9.6 was OK. We will keep an eye on future -Mozilla versions. - -.. _faq5_9: - -5.9 With Mozilla 0.9.? to 1.0 and Netscape 7.0-PR1 I can't type a whitespace in the SQL-Query edit area: the page scrolls down. -------------------------------------------------------------------------------------------------------------------------------- - -This is a Mozilla bug (see bug #26882 at `BugZilla -`_). - -.. _faq5_10: - -5.10 (withdrawn). ------------------------------------------------------------------------------------------ - -.. _faq5_11: - -5.11 Extended-ASCII characters like German umlauts are displayed wrong. ------------------------------------------------------------------------ - -Please ensure that you have set your browser's character set to the -one of the language file you have selected on phpMyAdmin's start page. -Alternatively, you can try the auto detection mode that is supported -by the recent versions of the most browsers. - -.. _faq5_12: - -5.12 Mac OS X Safari browser changes special characters to "?". ---------------------------------------------------------------- - -This issue has been reported by a :term:`macOS` user, who adds that Chimera, -Netscape and Mozilla do not have this problem. - -.. _faq5_13: - -5.13 (withdrawn) ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -.. _faq5_14: - -5.14 (withdrawn) ------------------------------------------------------------------------------------------------------------------- - -.. _faq5_15: - -5.15 (withdrawn) ------------------------------------------ - -.. _faq5_16: - -5.16 With Internet Explorer, I get "Access is denied" Javascript errors. Or I cannot make phpMyAdmin work under Windows. ------------------------------------------------------------------------------------------------------------------------- - -Please check the following points: - -* Maybe you have defined your :config:option:`$cfg['PmaAbsoluteUri']` setting in - :file:`config.inc.php` to an :term:`IP` address and you are starting phpMyAdmin - with a :term:`URL` containing a domain name, or the reverse situation. -* Security settings in IE and/or Microsoft Security Center are too high, - thus blocking scripts execution. -* The Windows Firewall is blocking Apache and MySQL. You must allow - :term:`HTTP` ports (80 or 443) and MySQL - port (usually 3306) in the "in" and "out" directions. - -.. _faq5_17: - -5.17 With Firefox, I cannot delete rows of data or drop a database. -------------------------------------------------------------------- - -Many users have confirmed that the Tabbrowser Extensions plugin they -installed in their Firefox is causing the problem. - -.. _faq5_18: - -5.18 (withdrawn) ------------------------------------------------------------------------------------------ - -.. _faq5_19: - -5.19 I get JavaScript errors in my browser. -------------------------------------------- - -Issues have been reported with some combinations of browser -extensions. To troubleshoot, disable all extensions then clear your -browser cache to see if the problem goes away. - -.. _faq5_20: - -5.20 I get errors about violating Content Security Policy. ----------------------------------------------------------- - -If you see errors like: - -.. code-block:: text - - Refused to apply inline style because it violates the following Content Security Policy directive - -This is usually caused by some software, which wrongly rewrites -:mailheader:`Content Security Policy` headers. Usually this is caused by -antivirus proxy or browser addons which are causing such errors. - -If you see these errors, try disabling the HTTP proxy in antivirus or disable -the :mailheader:`Content Security Policy` rewriting in it. If that doesn't -help, try disabling browser extensions. - -Alternatively it can be also server configuration issue (if the webserver is -configured to emit :mailheader:`Content Security Policy` headers, they can -override the ones from phpMyAdmin). - -Programs known to cause these kind of errors: - -* Kaspersky Internet Security - -.. _faq5_21: - -5.21 I get errors about potentially unsafe operation when browsing table or executing SQL query. ------------------------------------------------------------------------------------------------- - -If you see errors like: - -.. code-block:: text - - A potentially unsafe operation has been detected in your request to this site. - -This is usually caused by web application firewall doing requests filtering. It -tries to prevent SQL injection, however phpMyAdmin is tool designed to execute -SQL queries, thus it makes it unusable. - -Please allow phpMyAdmin scripts from the web application firewall settings -or disable it completely for phpMyAdmin path. - -Programs known to cause these kind of errors: - -* Wordfence Web Application Firewall - -.. _faqusing: - -Using phpMyAdmin -++++++++++++++++ - -.. _faq6_1: - -6.1 I can't insert new rows into a table / I can't create a table - MySQL brings up a SQL error. ------------------------------------------------------------------------------------------------- - -Examine the :term:`SQL` error with care. -Often the problem is caused by specifying a wrong column-type. Common -errors include: - -* Using ``VARCHAR`` without a size argument -* Using ``TEXT`` or ``BLOB`` with a size argument - -Also, look at the syntax chapter in the MySQL manual to confirm that -your syntax is correct. - -.. _faq6_2: - -6.2 When I create a table, I set an index for two columns and phpMyAdmin generates only one index with those two columns. -------------------------------------------------------------------------------------------------------------------------- - -This is the way to create a multi-columns index. If you want two -indexes, create the first one when creating the table, save, then -display the table properties and click the Index link to create the -other index. - -.. _faq6_3: - -6.3 How can I insert a null value into my table? ------------------------------------------------- - -Since version 2.2.3, you have a checkbox for each column that can be -null. Before 2.2.3, you had to enter "null", without the quotes, as -the column's value. Since version 2.5.5, you have to use the checkbox -to get a real NULL value, so if you enter "NULL" this means you want a -literal NULL in the column, and not a NULL value (this works in PHP4). - -.. _faq6_4: - -6.4 How can I backup my database or table? ------------------------------------------- - -Click on a database or table name in the navigation panel, the properties will -be displayed. Then on the menu, click "Export", you can dump the structure, the -data, or both. This will generate standard :term:`SQL` statements that can be -used to recreate your database/table. You will need to choose "Save as file", -so that phpMyAdmin can transmit the resulting dump to your station. Depending -on your PHP configuration, you will see options to compress the dump. See also -the :config:option:`$cfg['ExecTimeLimit']` configuration variable. For -additional help on this subject, look for the word "dump" in this document. - -.. _faq6_5: - -6.5 How can I restore (upload) my database or table using a dump? How can I run a ".sql" file? ----------------------------------------------------------------------------------------------- - -Click on a database name in the navigation panel, the properties will -be displayed. Select "Import" from the list of tabs in the right–hand -frame (or ":term:`SQL`" if your phpMyAdmin -version is previous to 2.7.0). In the "Location of the text file" -section, type in the path to your dump filename, or use the Browse -button. Then click Go. With version 2.7.0, the import engine has been -re–written, if possible it is suggested that you upgrade to take -advantage of the new features. For additional help on this subject, -look for the word "upload" in this document. - -Note: For errors while importing of dumps exported from older MySQL versions to newer MySQL versions, -please check :ref:`faq6_41`. - -.. _faq6_6: - -6.6 How can I use the relation table in Query-by-example? ---------------------------------------------------------- - -Here is an example with the tables persons, towns and countries, all -located in the database "mydb". If you don't have a ``pma__relation`` -table, create it as explained in the configuration section. Then -create the example tables: - -.. code-block:: mysql - - CREATE TABLE REL_countries ( - country_code char(1) NOT NULL default '', - description varchar(10) NOT NULL default '', - PRIMARY KEY (country_code) - ) ENGINE=MyISAM; - - INSERT INTO REL_countries VALUES ('C', 'Canada'); - - CREATE TABLE REL_persons ( - id tinyint(4) NOT NULL auto_increment, - person_name varchar(32) NOT NULL default '', - town_code varchar(5) default '0', - country_code char(1) NOT NULL default '', - PRIMARY KEY (id) - ) ENGINE=MyISAM; - - INSERT INTO REL_persons VALUES (11, 'Marc', 'S', 'C'); - INSERT INTO REL_persons VALUES (15, 'Paul', 'S', 'C'); - - CREATE TABLE REL_towns ( - town_code varchar(5) NOT NULL default '0', - description varchar(30) NOT NULL default '', - PRIMARY KEY (town_code) - ) ENGINE=MyISAM; - - INSERT INTO REL_towns VALUES ('S', 'Sherbrooke'); - INSERT INTO REL_towns VALUES ('M', 'Montréal'); - -To setup appropriate links and display information: - -* on table "REL\_persons" click Structure, then Relation view -* for "town\_code", choose from dropdowns, "mydb", "REL\_towns", "town\_code" - for foreign database, table and column respectively -* for "country\_code", choose from dropdowns, "mydb", "REL\_countries", - "country\_code" for foreign database, table and column respectively -* on table "REL\_towns" click Structure, then Relation view -* in "Choose column to display", choose "description" -* repeat the two previous steps for table "REL\_countries" - -Then test like this: - -* Click on your db name in the navigation panel -* Choose "Query" -* Use tables: persons, towns, countries -* Click "Update query" -* In the columns row, choose persons.person\_name and click the "Show" - tickbox -* Do the same for towns.description and countries.descriptions in the - other 2 columns -* Click "Update query" and you will see in the query box that the - correct joins have been generated -* Click "Submit query" - -.. _faqdisplay: - -6.7 How can I use the "display column" feature? ------------------------------------------------ - -Starting from the previous example, create the ``pma__table_info`` as -explained in the configuration section, then browse your persons -table, and move the mouse over a town code or country code. See also -:ref:`faq6_21` for an additional feature that "display column" -enables: drop-down list of possible values. - -.. _faqpdf: - -6.8 How can I produce a PDF schema of my database? --------------------------------------------------- - -First the configuration variables "relation", "table\_coords" and -"pdf\_pages" have to be filled in. - -* Select your database in the navigation panel. -* Choose ":guilabel:`Designer`" in the navigation bar at the top. -* Move the tables the way you want them. -* Choose ":guilabel:`Export schema`" in the left menu. -* The export modal will open. -* Select the type of export to :term:`PDF`, you may adjust the other settings. -* Submit the form and the file will start downloading. - -.. seealso:: - - :ref:`relations` - -.. _faq6_9: - -6.9 phpMyAdmin is changing the type of one of my columns! ---------------------------------------------------------- - -No, it's MySQL that is doing `silent column type changing -`_. - -.. _underscore: - -6.10 When creating a privilege, what happens with underscores in the database name? ------------------------------------------------------------------------------------ - -If you do not put a backslash before the underscore, this is a -wildcard grant, and the underscore means "any character". So, if the -database name is "john\_db", the user would get rights to john1db, -john2db ... If you put a backslash before the underscore, it means -that the database name will have a real underscore. - -.. _faq6_11: - -6.11 What is the curious symbol ø in the statistics pages? ----------------------------------------------------------- - -It means "average". - -.. _faqexport: - -6.12 I want to understand some Export options. ----------------------------------------------- - -**Structure:** - -* "Add DROP TABLE" will add a line telling MySQL to `drop the table - `_, if it already - exists during the import. It does NOT drop the table after your - export, it only affects the import file. -* "If Not Exists" will only create the table if it doesn't exist. - Otherwise, you may get an error if the table name exists but has a - different structure. -* "Add AUTO\_INCREMENT value" ensures that AUTO\_INCREMENT value (if - any) will be included in backup. -* "Enclose table and column names with backquotes" ensures that column - and table names formed with special characters are protected. -* "Add into comments" includes column comments, relations, and media - types set in the pmadb in the dump as :term:`SQL` comments - (*/\* xxx \*/*). - -**Data:** - -* "Complete inserts" adds the column names on every INSERT command, for - better documentation (but resulting file is bigger). -* "Extended inserts" provides a shorter dump file by using only once the - INSERT verb and the table name. -* "Delayed inserts" are best explained in the `MySQL manual - INSERT DELAYED Syntax - `_. -* "Ignore inserts" treats errors as a warning instead. Again, more info - is provided in the `MySQL manual - INSERT Syntax - `_, but basically with - this selected, invalid values are adjusted and inserted rather than - causing the entire statement to fail. - -.. _faq6_13: - -6.13 I would like to create a database with a dot in its name. --------------------------------------------------------------- - -This is a bad idea, because in MySQL the syntax "database.table" is -the normal way to reference a database and table name. Worse, MySQL -will usually let you create a database with a dot, but then you cannot -work with it, nor delete it. - -.. _faqsqlvalidator: - -6.14 (withdrawn). ------------------ - -.. _faq6_15: - -6.15 I want to add a BLOB column and put an index on it, but MySQL says "BLOB column '...' used in key specification without a key length". -------------------------------------------------------------------------------------------------------------------------------------------- - -The right way to do this, is to create the column without any indexes, -then display the table structure and use the "Create an index" dialog. -On this page, you will be able to choose your BLOB column, and set a -size to the index, which is the condition to create an index on a BLOB -column. - -.. _faq6_16: - -6.16 How can I simply move in page with plenty editing fields? --------------------------------------------------------------- - -You can use :kbd:`Ctrl+arrows` (:kbd:`Option+Arrows` in Safari) for moving on -most pages with many editing fields (table structure changes, row editing, -etc.). - -.. _faq6_17: - -6.17 Transformations: I can't enter my own mimetype! What is this feature then useful for? ------------------------------------------------------------------------------------------- - -Defining mimetypes is of no use if you can't put -transformations on them. Otherwise you could just put a comment on the -column. Because entering your own mimetype will cause serious syntax -checking issues and validation, this introduces a high-risk false- -user-input situation. Instead you have to initialize mimetypes using -functions or empty mimetype definitions. - -Plus, you have a whole overview of available mimetypes. Who knows all those -mimetypes by heart so they can enter it at will? - -.. _faqbookmark: - -6.18 Bookmarks: Where can I store bookmarks? Why can't I see any bookmarks below the query box? What are these variables for? ------------------------------------------------------------------------------------------------------------------------------ - -You need to have configured the :ref:`linked-tables` for using bookmarks -feature. Once you have done that, you can use bookmarks in the :guilabel:`SQL` tab. - -.. seealso:: :ref:`bookmarks` - -.. _faq6_19: - -6.19 How can I create simple LATEX document to include exported table? ----------------------------------------------------------------------- - -You can simply include table in your LATEX documents, -minimal sample document should look like following one (assuming you -have table exported in file :file:`table.tex`): - -.. code-block:: latex - - \documentclass{article} % or any class you want - \usepackage{longtable} % for displaying table - \begin{document} % start of document - \include{table} % including exported table - \end{document} % end of document - -.. _faq6_20: - -6.20 I see a lot of databases which are not mine, and cannot access them. -------------------------------------------------------------------------- - -You have one of these global privileges: CREATE TEMPORARY TABLES, SHOW -DATABASES, LOCK TABLES. Those privileges also enable users to see all the -database names. So if your users do not need those privileges, you can remove -them and their databases list will shorten. - -.. seealso:: - -.. _faq6_21: - -6.21 In edit/insert mode, how can I see a list of possible values for a column, based on some foreign table? ------------------------------------------------------------------------------------------------------------- - -You have to setup appropriate links between the tables, and also setup -the "display column" in the foreign table. See :ref:`faq6_6` for an -example. Then, if there are 100 values or less in the foreign table, a -drop-down list of values will be available. You will see two lists of -values, the first list containing the key and the display column, the -second list containing the display column and the key. The reason for -this is to be able to type the first letter of either the key or the -display column. For 100 values or more, a distinct window will appear, -to browse foreign key values and choose one. To change the default -limit of 100, see :config:option:`$cfg['ForeignKeyMaxLimit']`. - -.. _faq6_22: - -6.22 Bookmarks: Can I execute a default bookmark automatically when entering Browse mode for a table? ------------------------------------------------------------------------------------------------------ - -Yes. If a bookmark has the same label as a table name and it's not a -public bookmark, it will be executed. - -.. seealso:: :ref:`bookmarks` - -.. _faq6_23: - -6.23 Export: I heard phpMyAdmin can export Microsoft Excel files? ------------------------------------------------------------------ - -You can use :term:`CSV` for Microsoft Excel, -which works out of the box. - -.. versionchanged:: 3.4.5 - Since phpMyAdmin 3.4.5 support for direct export to Microsoft Excel version - 97 and newer was dropped. - -.. _faq6_24: - -6.24 Now that phpMyAdmin supports native MySQL 4.1.x column comments, what happens to my column comments stored in pmadb? -------------------------------------------------------------------------------------------------------------------------- - -Automatic migration of a table's pmadb-style column comments to the -native ones is done whenever you enter Structure page for this table. - -.. _faq6_25: - -6.25 (withdrawn). ------------------ - -.. _faq6_26: - -6.26 How can I select a range of rows? --------------------------------------- - -Click the first row of the range, hold the shift key and click the -last row of the range. This works everywhere you see rows, for example -in Browse mode or on the Structure page. - -.. _faq6_27: - -6.27 What format strings can I use? ------------------------------------ - -In all places where phpMyAdmin accepts format strings, you can use -``@VARIABLE@`` expansion and `strftime `_ -format strings. The expanded variables depend on a context (for -example, if you haven't chosen a table, you can not get the table -name), but the following variables can be used: - -``@HTTP_HOST@`` - HTTP host that runs phpMyAdmin -``@SERVER@`` - MySQL server name -``@VERBOSE@`` - Verbose MySQL server name as defined in :config:option:`$cfg['Servers'][$i]['verbose']` -``@VSERVER@`` - Verbose MySQL server name if set, otherwise normal -``@DATABASE@`` - Currently opened database -``@TABLE@`` - Currently opened table -``@COLUMNS@`` - Columns of the currently opened table -``@PHPMYADMIN@`` - phpMyAdmin with version - -.. _faq6_28: - -6.28 (withdrawn). ------------------ - -.. _faq6_29: - -6.29 Why can't I get a chart from my query result table? --------------------------------------------------------- - -Not every table can be put to the chart. Only tables with one, two or -three columns can be visualised as a chart. Moreover the table must be -in a special format for chart script to understand it. Currently -supported formats can be found in :ref:`charts`. - -.. _faq6_30: - -6.30 Import: How can I import ESRI Shapefiles? ----------------------------------------------- - -An ESRI Shapefile is actually a set of several files, where .shp file -contains geometry data and .dbf file contains data related to those -geometry data. To read data from .dbf file you need to have PHP -compiled with the dBase extension (--enable-dbase). Otherwise only -geometry data will be imported. - -To upload these set of files you can use either of the following -methods: - -Configure upload directory with :config:option:`$cfg['UploadDir']`, upload both .shp and .dbf files with -the same filename and chose the .shp file from the import page. - -Create a zip archive with .shp and .dbf files and import it. For this -to work, you need to set :config:option:`$cfg['TempDir']` to a place where the web server user can -write (for example ``'./tmp'``). - -To create the temporary directory on a UNIX-based system, you can do: - -.. code-block:: sh - - cd phpMyAdmin - mkdir tmp - chmod o+rwx tmp - -.. _faq6_31: - -6.31 How do I create a relation in designer? --------------------------------------------- - -To select relation, click: The display column is shown in pink. To -set/unset a column as the display column, click the "Choose column to -display" icon, then click on the appropriate column name. - -.. _faq6_32: - -6.32 How can I use the zoom search feature? -------------------------------------------- - -The Zoom search feature is an alternative to table search feature. It allows -you to explore a table by representing its data in a scatter plot. You can -locate this feature by selecting a table and clicking the :guilabel:`Search` -tab. One of the sub-tabs in the :guilabel:`Table Search` page is -:guilabel:`Zoom Search`. - -Consider the table REL\_persons in :ref:`faq6_6` for -an example. To use zoom search, two columns need to be selected, for -example, id and town\_code. The id values will be represented on one -axis and town\_code values on the other axis. Each row will be -represented as a point in a scatter plot based on its id and -town\_code. You can include two additional search criteria apart from -the two fields to display. - -You can choose which field should be -displayed as label for each point. If a display column has been set -for the table (see :ref:`faqdisplay`), it is taken as the label unless -you specify otherwise. You can also select the maximum number of rows -you want to be displayed in the plot by specifing it in the 'Max rows -to plot' field. Once you have decided over your criteria, click 'Go' -to display the plot. - -After the plot is generated, you can use the -mouse wheel to zoom in and out of the plot. In addition, panning -feature is enabled to navigate through the plot. You can zoom-in to a -certain level of detail and use panning to locate your area of -interest. Clicking on a point opens a dialogue box, displaying field -values of the data row represented by the point. You can edit the -values if required and click on submit to issue an update query. Basic -instructions on how to use can be viewed by clicking the 'How to use?' -link located just above the plot. - -.. _faq6_33: - -6.33 When browsing a table, how can I copy a column name? ---------------------------------------------------------- - -Selecting the name of the column within the browse table header cell -for copying is difficult, as the columns support reordering by -dragging the header cells as well as sorting by clicking on the linked -column name. To copy a column name, double-click on the empty area -next to the column name, when the tooltip tells you to do so. This -will show you an input box with the column name. You may right-click -the column name within this input box to copy it to your clipboard. - -.. _faq6_34: - -6.34 How can I use the Favorite Tables feature? ---------------------------------------------------------- - -Favorite Tables feature is very much similar to Recent Tables feature. -It allows you to add a shortcut for the frequently used tables of any -database in the navigation panel . You can easily navigate to any table -in the list by simply choosing it from the list. These tables are stored -in your browser's local storage if you have not configured your -`phpMyAdmin Configuration Storage`. Otherwise these entries are stored in -`phpMyAdmin Configuration Storage`. - -IMPORTANT: In absence of `phpMyAdmin Configuration Storage`, your Favorite -tables may be different in different browsers based on your different -selections in them. - -To add a table to Favorite list simply click on the `Gray` star in front -of a table name in the list of tables of a Database and wait until it -turns to `Yellow`. -To remove a table from list, simply click on the `Yellow` star and -wait until it turns `Gray` again. - -Using :config:option:`$cfg['NumFavoriteTables']` in your :file:`config.inc.php` -file, you can define the maximum number of favorite tables shown in the -navigation panel. Its default value is `10`. - -.. _faq6_35: - -6.35 How can I use the Range search feature? ---------------------------------------------------------- - -With the help of range search feature, one can specify a range of values for -particular column(s) while performing search operation on a table from the `Search` -tab. - -To use this feature simply click on the `BETWEEN` or `NOT BETWEEN` operators -from the operator select list in front of the column name. On choosing one of the -above options, a dialog box will show up asking for the `Minimum` and `Maximum` -value for that column. Only the specified range of values will be included -in case of `BETWEEN` and excluded in case of `NOT BETWEEN` from the final results. - -Note: The Range search feature will work only `Numeric` and `Date` data type columns. - -.. _faq6_36: - -6.36 What is Central columns and how can I use this feature? ------------------------------------------------------------- - -As the name suggests, the Central columns feature enables to maintain a central list of -columns per database to avoid similar name for the same data element and bring consistency -of data type for the same data element. You can use the central list of columns to -add an element to any table structure in that database which will save from writing -similar column name and column definition. - -To add a column to central list, go to table structure page, check the columns you want -to include and then simply click on "Add to central columns". If you want to add all -unique columns from more than one table from a database then go to database structure page, -check the tables you want to include and then select "Add columns to central list". - -To remove a column from central list, go to Table structure page, check the columns you want -to remove and then simply click on "Remove from central columns". If you want to remove all -columns from more than one tables from a database then go to database structure page, -check the tables you want to include and then select "Remove columns from central list". - -To view and manage the central list, select the database you want to manage central columns -for then from the top menu click on "Central columns". You will be taken to a page where -you will have options to edit, delete or add new columns to central list. - -.. _faq6_37: - -6.37 How can I use Improve Table structure feature? ---------------------------------------------------------- - -Improve table structure feature helps to bring the table structure upto -Third Normal Form. A wizard is presented to user which asks questions about the -elements during the various steps for normalization and a new structure is proposed -accordingly to bring the table into the First/Second/Third Normal form. -On startup of the wizard, user gets to select upto what normal form they want to -normalize the table structure. - -Here is an example table which you can use to test all of the three First, Second and -Third Normal Form. - -.. code-block:: mysql - - CREATE TABLE `VetOffice` ( - `petName` varchar(64) NOT NULL, - `petBreed` varchar(64) NOT NULL, - `petType` varchar(64) NOT NULL, - `petDOB` date NOT NULL, - `ownerLastName` varchar(64) NOT NULL, - `ownerFirstName` varchar(64) NOT NULL, - `ownerPhone1` int(12) NOT NULL, - `ownerPhone2` int(12) NOT NULL, - `ownerEmail` varchar(64) NOT NULL, - ); - -The above table is not in First normal Form as no :term:`primary key` exists. Primary key -is supposed to be (`petName`,`ownerLastName`,`ownerFirstName`) . If the :term:`primary key` -is chosen as suggested the resultant table won't be in Second as well as Third Normal -form as the following dependencies exists. - -.. code-block:: mysql - - (OwnerLastName, OwnerFirstName) -> OwnerEmail - (OwnerLastName, OwnerFirstName) -> OwnerPhone - PetBreed -> PetType - -Which says, OwnerEmail depends on OwnerLastName and OwnerFirstName. -OwnerPhone depends on OwnerLastName and OwnerFirstName. -PetType depends on PetBreed. - -.. _faq6_38: - -6.38 How can I reassign auto-incremented values? ------------------------------------------------- - -Some users prefer their AUTO_INCREMENT values to be consecutive; this is not -always the case after row deletion. - -Here are the steps to accomplish this. These are manual steps because they -involve a manual verification at one point. - -* Ensure that you have exclusive access to the table to rearrange - -* On your :term:`primary key` column (i.e. id), remove the AUTO_INCREMENT setting - -* Delete your primary key in Structure > indexes - -* Create a new column future_id as primary key, AUTO_INCREMENT - -* Browse your table and verify that the new increments correspond to what - you're expecting - -* Drop your old id column - -* Rename the future_id column to id - -* Move the new id column via Structure > Move columns - -.. _faq6_39: - -6.39 What is the "Adjust privileges" option when renaming, copying, or moving a database, table, column, or procedure? ----------------------------------------------------------------------------------------------------------------------- - -When renaming/copying/moving a database/table/column/procedure, -MySQL does not adjust the original privileges relating to these objects -on its own. By selecting this option, phpMyAdmin will adjust the privilege -table so that users have the same privileges on the new items. - -For example: A user 'bob'@'localhost' has a 'SELECT' privilege on a -column named 'id'. Now, if this column is renamed to 'id_new', MySQL, -on its own, would **not** adjust the column privileges to the new column name. -phpMyAdmin can make this adjustment for you automatically. - -Notes: - -* While adjusting privileges for a database, the privileges of all - database-related elements (tables, columns and procedures) are also adjusted - to the database's new name. - -* Similarly, while adjusting privileges for a table, the privileges of all - the columns inside the new table are also adjusted. - -* While adjusting privileges, the user performing the operation **must** have the following - privileges: - - * SELECT, INSERT, UPDATE, DELETE privileges on following tables: - `mysql`.`db`, `mysql`.`columns_priv`, `mysql`.`tables_priv`, `mysql`.`procs_priv` - * FLUSH privilege (GLOBAL) - -Thus, if you want to replicate the database/table/column/procedure as it is -while renaming/copying/moving these objects, make sure you have checked this option. - -.. _faq6_40: - -6.40 I see "Bind parameters" checkbox in the "SQL" page. How do I write parameterized SQL queries? --------------------------------------------------------------------------------------------------- - -From version 4.5, phpMyAdmin allows users to execute parameterized queries in the "SQL" page. -Parameters should be prefixed with a colon(:) and when the "Bind parameters" checkbox is checked -these parameters will be identified and input fields for these parameters will be presented. -Values entered in these field will be substituted in the query before being executed. - -.. _faq6_41: - -6.41 I get import errors while importing the dumps exported from older MySQL versions (pre-5.7.6) into newer MySQL versions (5.7.7+), but they work fine when imported back on same older versions ? --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -If you get errors like *#1031 - Table storage engine for 'table_name' doesn't have this option* -while importing the dumps exported from pre-5.7.7 MySQL servers into new MySQL server versions 5.7.7+, -it might be because ROW_FORMAT=FIXED is not supported with InnoDB tables. Moreover, the value of -`innodb_strict_mode `_ would define if this would be reported as a warning or as an error. - -Since MySQL version 5.7.9, the default value for `innodb_strict_mode` is `ON` and thus would generate -an error when such a CREATE TABLE or ALTER TABLE statement is encountered. - -There are two ways of preventing such errors while importing: - -* Change the value of `innodb_strict_mode` to `OFF` before starting the import and turn it `ON` after - the import is successfully completed. -* This can be achieved in two ways: - - * Go to 'Variables' page and edit the value of `innodb_strict_mode` - * Run the query : `SET GLOBAL `innodb_strict_mode` = '[value]'` - -After the import is done, it is suggested that the value of `innodb_strict_mode` should be reset to the -original value. - -.. _faqproject: - -phpMyAdmin project -++++++++++++++++++ - -.. _faq7_1: - -7.1 I have found a bug. How do I inform developers? ---------------------------------------------------- - -Our issues tracker is located at . -For security issues, please refer to the instructions at to email -the developers directly. - -.. _faq7_2: - -7.2 I want to translate the messages to a new language or upgrade an existing language, where do I start? ---------------------------------------------------------------------------------------------------------- - -Translations are very welcome and all you need to have are the -language skills. The easiest way is to use our `online translation -service `_. You can check -out all the possibilities to translate in the `translate section on -our website `_. - -.. _faq7_3: - -7.3 I would like to help out with the development of phpMyAdmin. How should I proceed? --------------------------------------------------------------------------------------- - -We welcome every contribution to the development of phpMyAdmin. You -can check out all the possibilities to contribute in the `contribute -section on our website -`_. - -.. seealso:: :ref:`developers` - -.. _faqsecurity: - -Security -++++++++ - -.. _faq8_1: - -8.1 Where can I get information about the security alerts issued for phpMyAdmin? --------------------------------------------------------------------------------- - -Please refer to . - -.. _faq8_2: - -8.2 How can I protect phpMyAdmin against brute force attacks? -------------------------------------------------------------- - -If you use Apache web server, phpMyAdmin exports information about -authentication to the Apache environment and it can be used in Apache -logs. Currently there are two variables available: - -``userID`` - User name of currently active user (they do not have to be logged in). -``userStatus`` - Status of currently active user, one of ``ok`` (user is logged in), - ``mysql-denied`` (MySQL denied user login), ``allow-denied`` (user denied - by allow/deny rules), ``root-denied`` (root is denied in configuration), - ``empty-denied`` (empty password is denied). - -``LogFormat`` directive for Apache can look like following: - -.. code-block:: apache - - LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n" pma_combined - -You can then use any log analyzing tools to detect possible break-in -attempts. - -.. _faq8_3: - -8.3 Why are there path disclosures when directly loading certain files? ------------------------------------------------------------------------ - -This is a server configuration problem. Never enable ``display_errors`` on a production site. - -.. _faq8_4: - -8.4 CSV files exported from phpMyAdmin could allow a formula injection attack. ------------------------------------------------------------------------------- - -It is possible to generate a :term:`CSV` file that, when imported to a spreadsheet program such as Microsoft Excel, -could potentially allow the execution of arbitrary commands. - -The CSV files generated by phpMyAdmin could potentially contain text that would be interpreted by a spreadsheet program as -a formula, but we do not believe escaping those fields is the proper behavior. There is no means to properly escape and -differentiate between a desired text output and a formula that should be escaped, and CSV is a text format where function -definitions should not be interpreted anyway. We have discussed this at length and feel it is the responsibility of the -spreadsheet program to properly parse and sanitize such data on input instead. - -Google also has a `similar view `_. - -.. _faqsynchronization: - -Synchronization -+++++++++++++++ - -.. _faq9_1: - -9.1 (withdrawn). ----------------- - -.. _faq9_2: - -9.2 (withdrawn). ----------------- diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/glossary.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/glossary.rst.txt deleted file mode 100644 index 87eb074..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/glossary.rst.txt +++ /dev/null @@ -1,440 +0,0 @@ -.. _glossary: - -Glossary -======== - -From Wikipedia, the free encyclopedia - -.. glossary:: - - .htaccess - the default name of Apache's directory-level configuration file. - - .. seealso:: - - ACL - Access Control List - - Blowfish - a keyed, symmetric block cipher, designed in 1993 by `Bruce Schneier `_. - - .. seealso:: - - Browser - a software application that enables a user to display and interact with text, images, and other information typically located on a web page at a website on the World Wide Web. - - .. seealso:: - - bzip2 - a free software/open-source data compression algorithm and program developed by Julian Seward. - - .. seealso:: - - CGI - Common Gateway Interface is an important World Wide Web technology that - enables a client web browser to request data from a program executed on - the web server. - - .. seealso:: - - Changelog - a log or record of changes made to a project. - - .. seealso:: - - Client - a computer system that accesses a (remote) service on another computer by some kind of network. - - .. seealso:: - - column - a set of data values of a particularly simple type, one for each row of the table. - - .. seealso:: - - Cookie - a packet of information sent by a server to a World Wide Web browser and then sent back by the browser each time it accesses that server. - - .. seealso:: - - CSV - Comma-separated values - - .. seealso:: - - DB - look at :term:`Database` - - Database - an organized collection of data. - - .. seealso:: - - Engine - look at :term:`Storage Engines` - - PHP extension - a PHP module that extends PHP with additional functionality. - - .. seealso:: - - FAQ - Frequently Asked Questions is a list of commonly asked question and their - answers. - - .. seealso:: - - Field - one part of divided data/columns. - - .. seealso:: - - Foreign key - a column or group of columns in a database row that points to a key column - or group of columns forming a key of another database row in some - (usually different) table. - - .. seealso:: - - GD - Graphics Library by Thomas Boutell and others for dynamically manipulating images. - - .. seealso:: - - GD2 - look at :term:`GD` - - GZip - GZip is short for GNU zip, a GNU free software file compression program. - - .. seealso:: - - host - any machine connected to a computer network, a node that has a hostname. - - .. seealso:: - - hostname - the unique name by which a network-attached device is known on a network. - - .. seealso:: - - HTTP - Hypertext Transfer Protocol is the primary method used to transfer or - convey information on the World Wide Web. - - .. seealso:: - - HTTPS - a :term:`HTTP`-connection with additional security measures. - - .. seealso:: - - IEC - International Electrotechnical Commission - - IIS - Internet Information Services is a set of internet-based services for - servers using Microsoft Windows. - - .. seealso:: - - Index - a feature that allows quick access to the rows in a table. - - .. seealso:: - - IP - "Internet Protocol" is a data-oriented protocol used by source and - destination hosts for communicating data across a packet-switched - internetwork. - - .. seealso:: - - IP Address - a unique number that devices use in order to identify and communicate with each other on a network utilizing the Internet Protocol standard. - - .. seealso:: - - IPv6 - IPv6 (Internet Protocol version 6) is the latest revision of the - Internet Protocol (:term:`IP`), designed to deal with the - long-anticipated problem of its predecessor IPv4 running out of addresses. - - .. seealso:: - - ISAPI - Internet Server Application Programming Interface is the API of Internet Information Services (IIS). - - .. seealso:: - - ISP - An Internet service provider is a business or organization that offers users - access to the Internet and related services. - - .. seealso:: - - ISO - International Standards Organization - - .. seealso:: `ISO organization website `_ - .. seealso:: - - JPEG - a most commonly used standard method of lossy compression for photographic images. - - .. seealso:: - - JPG - look at :term:`JPEG` - - Key - look at :term:`Index` - - LATEX - a document preparation system for the TeX typesetting program. - - .. seealso:: - - Mac - Apple Macintosh is a line of personal computers designed, developed, manufactured, and marketed by Apple Inc. - - .. seealso:: - - macOS - the operating system which is included with all currently shipping Apple Macintosh computers in the consumer and professional markets. - - .. seealso:: - - mbstring - The PHP `mbstring` functions provide support for languages represented by multi-byte character sets, most notably UTF-8. - - If you have troubles installing this extension, please follow :ref:`faqmysql`, it provides useful hints. - - .. seealso:: - - Media type - A media type (formerly known as MIME type) is a two-part identifier - for file formats and format contents transmitted on the Internet. - - .. seealso:: - - MIME - Multipurpose Internet Mail Extensions is - an Internet Standard for the format of e-mail. - - .. seealso:: - - module - modular extension for the Apache HTTP Server httpd. - - .. seealso:: - - mod_proxy_fcgi - an Apache module implementing a Fast CGI interface; PHP can be run as a CGI module, FastCGI, or - directly as an Apache module. - - .. seealso:: - - MySQL - a multithreaded, multi-user, SQL (Structured Query Language) Database Management System (DBMS). - - .. seealso:: - - MySQLi - the improved MySQL client PHP extension. - - .. seealso:: `PHP manual for MySQL Improved Extension `_ - .. seealso:: - - mysql - the MySQL client PHP extension. - - .. seealso:: - - OpenDocument - an open standard for office documents. - - .. seealso:: - - OS X - look at :term:`macOS`. - - .. seealso:: - - PDF - Portable Document Format is a file format developed by Adobe Systems for - representing two-dimensional documents in a device-independent and - resolution-independent format. - - .. seealso:: - - PEAR - the PHP Extension and Application Repository. - - .. seealso:: `PEAR website `_ - .. seealso:: `Wikipedia page for PEAR `_ - - PCRE - Perl-Compatible Regular Expressions is the Perl-compatible regular - expression functions for PHP - - .. seealso:: - .. seealso:: `PHP manual for Perl-Compatible Regular Expressions `_ - .. seealso:: - - PHP - short for "PHP: Hypertext Preprocessor", is an open-source, reflective - programming language used mainly for developing server-side applications - and dynamic web content, and more recently, a broader range of software - applications. - - .. seealso:: - - port - a connection through which data is sent and received. - - .. seealso:: - - primary key - A primary key is an index over one or more fields in a table with - unique values for every single row in this table. Every table should have - a primary key for easier accessing/identifying data in this table. There - can only be one primary key per table and it is named always **PRIMARY**. - In fact, a primary key is just an :term:`unique key` with the name - **PRIMARY**. If no primary key is defined MySQL will use first *unique - key* as primary key if there is one. - - You can create the primary key when creating the table (in phpMyAdmin - just check the primary key radio buttons for each field you wish to be - part of the primary key). - - You can also add a primary key to an existing table with `ALTER` `TABLE` - or `CREATE` `INDEX` (in phpMyAdmin you can just click on 'add index' on - the table structure page below the listed fields). - - RFC - Request for Comments (RFC) documents are a series of memoranda - encompassing new research, innovations, and methodologies applicable to - Internet technologies. - - .. seealso:: - - RFC 1952 - GZIP file format specification version 4.3 - - .. seealso:: :rfc:`1952` - - Row (record, tuple) - represents a single, implicitly structured data item in a table. - - .. seealso:: - - Server - a computer system that provides services to other computing systems over a network. - - .. seealso:: - - Storage Engines - MySQL can use several different formats for storing data on disk, these - are called storage engines or table types. phpMyAdmin allows a user to - change their storage engine for a particular table through the operations - tab. - - Common table types are InnoDB and MyISAM, though many others exist and - may be desirable in some situations. - - .. seealso:: `MySQL doc chapter about Alternative Storage Engines `_ - .. seealso:: - - socket - a form of inter-process communication. - - .. seealso:: - - SSL - Secure Sockets Layer, (now superseded by TLS) is a cryptographic protocol - which provides secure communication on the Internet. - - .. seealso:: - - Stored procedure - a subroutine available to applications accessing a relational database system - - .. seealso:: - - SQL - Structured Query Language - - .. seealso:: - - table - a set of data elements (cells) that is organized, defined and stored as - horizontal rows and vertical columns where each item can be uniquely - identified by a label or key or by its position in relation to other - items. - - .. seealso:: - - tar - a type of archive file format, from "Tape Archive". - - .. seealso:: - - TCP - Transmission Control Protocol is one of the core protocols of the - Internet protocol suite. - - .. seealso:: - - TCPDF - PHP library to generate PDF files. - - .. seealso:: - .. seealso:: - - trigger - a procedural code that is automatically executed in response to certain events on a particular table or view in a database - - .. seealso:: - - unique key - A unique key is an index over one or more fields in a table which has a - unique value for each row. The first unique key will be treated as - :term:`primary key` if there is no *primary key* defined. - - URL - Uniform Resource Locator is a sequence of characters, conforming to a - standardized format, that is used for referring to resources, such as - documents and images on the Internet, by their location. - - .. seealso:: - - Web server - A computer (program) that is responsible for accepting HTTP requests from clients and serving them web pages. - - .. seealso:: - - XML - Extensible Markup Language is a W3C-recommended general-purpose markup - language for creating special-purpose markup languages, capable of - describing many different kinds of data. - - .. seealso:: - - ZIP - a popular data compression and archival format. - - .. seealso:: - - Zlib - an open-source, cross-platform data compression library by `Jean-loup Gailly `_ and `Mark Adler `_. - - .. seealso:: - - Content Security Policy - The HTTP `Content-Security-Policy` response header allows web site administrators - to control resources the user agent is allowed to load for a given page. - - .. seealso:: - .. seealso:: diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/privileges.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/privileges.rst.txt deleted file mode 100644 index a2647d1..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/privileges.rst.txt +++ /dev/null @@ -1,74 +0,0 @@ -User management -=============== - -User management is the process of controlling which users are allowed to -connect to the MySQL server and what permissions they have on each database. -phpMyAdmin does not handle user management, rather it passes the username and -password on to MySQL, which then determines whether a user is permitted to -perform a particular action. Within phpMyAdmin, administrators have full -control over creating users, viewing and editing privileges for existing users, -and removing users. - -Within phpMyAdmin, user management is controlled via the :guilabel:`User accounts` tab -from the main page. Users can be created, edited, and removed. - -Creating a new user -------------------- - -To create a new user, click the :guilabel:`Add user account` link near the bottom -of the :guilabel:`User accounts` page (you must be a "superuser", e.g., user "root"). -Use the textboxes and drop-downs to configure the user to your particular -needs. You can then select whether to create a database for that user and grant -specific global privileges. Once you've created the user (by clicking Go), you -can define that user's permissions on a specific database (don't grant global -privileges in that case). In general, users do not need any global privileges -(other than USAGE), only permissions for their specific database. - -Editing an existing user ------------------------- - -To edit an existing user, simply click the pencil icon to the right of that -user in the :guilabel:`User accounts` page. You can then edit their global- and -database-specific privileges, change their password, or even copy those -privileges to a new user. - -Deleting a user ---------------- - -From the :guilabel:`User accounts` page, check the checkbox for the user you wish to -remove, select whether or not to also remove any databases of the same name (if -they exist), and click Go. - -Assigning privileges to user for a specific database ----------------------------------------------------- - -Users are assigned to databases by editing the user record (from the -:guilabel:`User accounts` link on the home page). -If you are creating a user specifically for a given table -you will have to create the user first (with no global privileges) and then go -back and edit that user to add the table and privileges for the individual -table. - -.. _configurablemenus: - -Configurable menus and user groups ----------------------------------- - -By enabling :config:option:`$cfg['Servers'][$i]['users']` and -:config:option:`$cfg['Servers'][$i]['usergroups']` you can customize what users -will see in the phpMyAdmin navigation. - -.. warning:: - - This feature only limits what a user sees, they are still able to use all the - functions. So this can not be considered as a security limitation. Should - you want to limit what users can do, use MySQL privileges to achieve that. - -With this feature enabled, the :guilabel:`User accounts` management interface gains -a second tab for managing :guilabel:`User groups`, where you can define what each -group will view (see image below) and you can then assign each user to one of -these groups. Users will be presented with a simplified user interface, which might be -useful for inexperienced users who could be overwhelmed by all the features -phpMyAdmin provides. - -.. image:: images/usergroups.png diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/setup.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/setup.rst.txt deleted file mode 100644 index a2f918c..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/setup.rst.txt +++ /dev/null @@ -1,1166 +0,0 @@ -.. _setup: - -Installation -============ - -phpMyAdmin does not apply any special security methods to the MySQL -database server. It is still the system administrator's job to grant -permissions on the MySQL databases properly. phpMyAdmin's :guilabel:`Users` -page can be used for this. - -Linux distributions -+++++++++++++++++++ - -phpMyAdmin is included in most Linux distributions. It is recommended to use -distribution packages when possible - they usually provide integration to your -distribution and you will automatically get security updates from your distribution. - -.. _debian-package: - -Debian and Ubuntu ------------------ - -Most Debian and Ubuntu versions include a phpMyAdmin package, but be aware that -the configuration file is maintained in ``/etc/phpmyadmin`` and may differ in -some ways from the official phpMyAdmin documentation. Specifically, it does: - -* Configuration of a web server (works for Apache and lighttpd). -* Creating of :ref:`linked-tables` using dbconfig-common. -* Securing setup script, see :ref:`debian-setup`. - -More specific details about installing Debian or Ubuntu packages are available -`in our wiki `_. - -.. seealso:: - - More information can be found in `README.Debian `_ - (it is installed as :file:`/usr/share/doc/phpmyadmin/README.Debian` with the package). - -OpenSUSE --------- - -OpenSUSE already comes with phpMyAdmin package, just install packages from -the `openSUSE Build Service `_. - -Gentoo ------- - -Gentoo ships the phpMyAdmin package, both in a near-stock configuration as well -as in a ``webapp-config`` configuration. Use ``emerge dev-db/phpmyadmin`` to -install. - -Mandriva --------- - -Mandriva ships the phpMyAdmin package in their ``contrib`` branch and can be -installed via the usual Control Center. - -Fedora ------- - -Fedora ships the phpMyAdmin package, but be aware that the configuration file -is maintained in ``/etc/phpMyAdmin/`` and may differ in some ways from the -official phpMyAdmin documentation. - -Red Hat Enterprise Linux ------------------------- - -Red Hat Enterprise Linux itself and thus derivatives like CentOS don't -ship phpMyAdmin, but the Fedora-driven repository -`Extra Packages for Enterprise Linux (EPEL) `_ -is doing so, if it's -`enabled `_. -But be aware that the configuration file is maintained in -``/etc/phpMyAdmin/`` and may differ in some ways from the -official phpMyAdmin documentation. - -Installing on Windows -+++++++++++++++++++++ - -The easiest way to get phpMyAdmin on Windows is using third party products -which include phpMyAdmin together with a database and web server such as -`XAMPP `_. - -You can find more of such options at `Wikipedia `_. - -Installing from Git -+++++++++++++++++++ - -In order to install from Git, you'll need a few supporting applications: - -* `Git `_ to download the source, or you can download the most recent source directly from `Github `_ -* `Composer `__ -* `Node.js `_ (version 10 or higher) -* `Yarn `_ - -You can clone current phpMyAdmin source from -``https://github.com/phpmyadmin/phpmyadmin.git``: - -.. code-block:: sh - - git clone https://github.com/phpmyadmin/phpmyadmin.git - -Additionally you need to install dependencies using `Composer `__: - -.. code-block:: sh - - composer update - -If you do not intend to develop, you can skip the installation of developer tools -by invoking: - -.. code-block:: sh - - composer update --no-dev - -Finally, you'll need to use `Yarn`_ to install some JavaScript dependencies: - -.. code-block:: sh - - yarn install --production - -.. _composer: - -Installing using Composer -+++++++++++++++++++++++++ - -You can install phpMyAdmin using the `Composer tool`_, since 4.7.0 the releases -are automatically mirrored to the default `Packagist`_ repository. - -.. note:: - - The content of the Composer repository is automatically generated - separately from the releases, so the content doesn't have to be - 100% same as when you download the tarball. There should be no - functional differences though. - -To install phpMyAdmin simply run: - -.. code-block:: sh - - composer create-project phpmyadmin/phpmyadmin - -Alternatively you can use our own composer repository, which contains -the release tarballs and is available at -: - -.. code-block:: sh - - composer create-project phpmyadmin/phpmyadmin --repository-url=https://www.phpmyadmin.net/packages.json --no-dev - -.. _docker: - -Installing using Docker -+++++++++++++++++++++++ - -phpMyAdmin comes with a `Docker official image`_, which you can easily deploy. You can -download it using: - -.. code-block:: sh - - docker pull phpmyadmin - -The phpMyAdmin server will listen on port 80. It supports several ways of -configuring the link to the database server, either by Docker's link feature -by linking your database container to ``db`` for phpMyAdmin (by specifying -``--link your_db_host:db``) or by environment variables (in this case it's up -to you to set up networking in Docker to allow the phpMyAdmin container to access -the database container over the network). - -.. _docker-vars: - -Docker environment variables ----------------------------- - -You can configure several phpMyAdmin features using environment variables: - -.. envvar:: PMA_ARBITRARY - - Allows you to enter a database server hostname on login form. - - .. seealso:: :config:option:`$cfg['AllowArbitraryServer']` - -.. envvar:: PMA_HOST - - Hostname or IP address of the database server to use. - - .. seealso:: :config:option:`$cfg['Servers'][$i]['host']` - -.. envvar:: PMA_HOSTS - - Comma-separated hostnames or IP addresses of the database servers to use. - - .. note:: Used only if :envvar:`PMA_HOST` is empty. - -.. envvar:: PMA_VERBOSE - - Verbose name of the database server. - - .. seealso:: :config:option:`$cfg['Servers'][$i]['verbose']` - -.. envvar:: PMA_VERBOSES - - Comma-separated verbose name of the database servers. - - .. note:: Used only if :envvar:`PMA_VERBOSE` is empty. - -.. envvar:: PMA_USER - - User name to use for :ref:`auth_config`. - -.. envvar:: PMA_PASSWORD - - Password to use for :ref:`auth_config`. - -.. envvar:: PMA_PORT - - Port of the database server to use. - -.. envvar:: PMA_PORTS - - Comma-separated ports of the database server to use. - - .. note:: Used only if :envvar:`PMA_PORT` is empty. - -.. envvar:: PMA_ABSOLUTE_URI - - The fully-qualified path (``https://pma.example.net/``) where the reverse - proxy makes phpMyAdmin available. - - .. seealso:: :config:option:`$cfg['PmaAbsoluteUri']` - -.. envvar:: HIDE_PHP_VERSION - - If defined, this option will hide the PHP version (`expose_php = Off`). - Set to any value (such as `HIDE_PHP_VERSION=true`). - -.. envvar:: UPLOAD_LIMIT - - If set, this option will override the default value for apache and php-fpm (this will change ``upload_max_filesize`` and ``post_max_size`` values). - - .. note:: Format as `[0-9+](K,M,G)` default value is `2048K` - -.. envvar:: PMA_CONFIG_BASE64 - - If set, this option will override the default `config.inc.php` with the base64 decoded contents of the variable. - -.. envvar:: PMA_USER_CONFIG_BASE64 - - If set, this option will override the default `config.user.inc.php` with the base64 decoded contents of the variable. - - -By default, :ref:`cookie` is used, but if :envvar:`PMA_USER` and -:envvar:`PMA_PASSWORD` are set, it is switched to :ref:`auth_config`. - -.. note:: - - The credentials you need to log in are stored in the MySQL server, in case - of Docker image, there are various ways to set it (for example - :samp:`MYSQL_ROOT_PASSWORD` when starting the MySQL container). Please check - documentation for `MariaDB container `_ - or `MySQL container `_. - -.. _docker-custom: - -Customizing configuration -------------------------- - -Additionally configuration can be tweaked by :file:`/etc/phpmyadmin/config.user.inc.php`. If -this file exists, it will be loaded after configuration is generated from above -environment variables, so you can override any configuration variable. This -configuration can be added as a volume when invoking docker using -`-v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php` parameters. - -Note that the supplied configuration file is applied after :ref:`docker-vars`, -but you can override any of the values. - -For example to change the default behavior of CSV export you can use the following -configuration file: - -.. code-block:: php - - [ - 'auth_type' => 'cookie', - 'host' => 'mydb1', - 'port' => 3306, - 'verbose' => 'Verbose name 1', - ], - 2 => [ - 'auth_type' => 'cookie', - 'host' => 'mydb2', - 'port' => 3306, - 'verbose' => 'Verbose name 2', - ], - ]; - -.. seealso:: - - See :ref:`config` for detailed description of configuration options. - -Docker Volumes --------------- - -You can use the following volumes to customize image behavior: - -:file:`/etc/phpmyadmin/config.user.inc.php` - - Can be used for additional settings, see the previous chapter for more details. - -:file:`/sessions/` - - Directory where PHP sessions are stored. You might want to share this - for example when using :ref:`auth_signon`. - -:file:`/www/themes/` - - Directory where phpMyAdmin looks for themes. By default only those shipped - with phpMyAdmin are included, but you can include additional phpMyAdmin - themes (see :ref:`themes`) by using Docker volumes. - -Docker Examples ---------------- - -To connect phpMyAdmin to a given server use: - -.. code-block:: sh - - docker run --name myadmin -d -e PMA_HOST=dbhost -p 8080:80 phpmyadmin/phpmyadmin - -To connect phpMyAdmin to more servers use: - -.. code-block:: sh - - docker run --name myadmin -d -e PMA_HOSTS=dbhost1,dbhost2,dbhost3 -p 8080:80 phpmyadmin/phpmyadmin - -To use arbitrary server option: - -.. code-block:: sh - - docker run --name myadmin -d --link mysql_db_server:db -p 8080:80 -e PMA_ARBITRARY=1 phpmyadmin/phpmyadmin - -You can also link the database container using Docker: - -.. code-block:: sh - - docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 phpmyadmin/phpmyadmin - -Running with additional configuration: - -.. code-block:: sh - - docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /some/local/directory/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php phpmyadmin/phpmyadmin - -Running with additional themes: - -.. code-block:: sh - - docker run --name phpmyadmin -d --link mysql_db_server:db -p 8080:80 -v /custom/phpmyadmin/theme/:/www/themes/theme/ phpmyadmin/phpmyadmin - -Using docker-compose --------------------- - -Alternatively, you can also use docker-compose with the docker-compose.yml from -. This will run phpMyAdmin with an -arbitrary server - allowing you to specify MySQL/MariaDB server on the login page. - -.. code-block:: sh - - docker-compose up -d - -Customizing configuration file using docker-compose ---------------------------------------------------- - -You can use an external file to customize phpMyAdmin configuration and pass it -using the volumes directive: - -.. code-block:: yaml - - phpmyadmin: - image: phpmyadmin/phpmyadmin - container_name: phpmyadmin - environment: - - PMA_ARBITRARY=1 - restart: always - ports: - - 8080:80 - volumes: - - /sessions - - ~/docker/phpmyadmin/config.user.inc.php:/etc/phpmyadmin/config.user.inc.php - - /custom/phpmyadmin/theme/:/www/themes/theme/ - -.. seealso:: :ref:`docker-custom` - -Running behind haproxy in a subdirectory ----------------------------------------- - -When you want to expose phpMyAdmin running in a Docker container in a -subdirectory, you need to rewrite the request path in the server proxying the -requests. - -For example, using haproxy it can be done as: - -.. code-block:: text - - frontend http - bind *:80 - option forwardfor - option http-server-close - - ### NETWORK restriction - acl LOCALNET src 10.0.0.0/8 192.168.0.0/16 172.16.0.0/12 - - # /phpmyadmin - acl phpmyadmin path_dir /phpmyadmin - use_backend phpmyadmin if phpmyadmin LOCALNET - - backend phpmyadmin - mode http - - reqirep ^(GET|POST|HEAD)\ /phpmyadmin/(.*) \1\ /\2 - - # phpMyAdmin container IP - server localhost 172.30.21.21:80 - -When using traefik, something like following should work: - -.. code-block:: text - - defaultEntryPoints = ["http"] - [entryPoints] - [entryPoints.http] - address = ":80" - [entryPoints.http.redirect] - regex = "(http:\\/\\/[^\\/]+\\/([^\\?\\.]+)[^\\/])$" - replacement = "$1/" - - [backends] - [backends.myadmin] - [backends.myadmin.servers.myadmin] - url="http://internal.address.to.pma" - - [frontends] - [frontends.myadmin] - backend = "myadmin" - passHostHeader = true - [frontends.myadmin.routes.default] - rule="PathPrefixStrip:/phpmyadmin/;AddPrefix:/" - -You then should specify :envvar:`PMA_ABSOLUTE_URI` in the docker-compose -configuration: - -.. code-block:: yaml - - version: '2' - - services: - phpmyadmin: - restart: always - image: phpmyadmin/phpmyadmin - container_name: phpmyadmin - hostname: phpmyadmin - domainname: example.com - ports: - - 8000:80 - environment: - - PMA_HOSTS=172.26.36.7,172.26.36.8,172.26.36.9,172.26.36.10 - - PMA_VERBOSES=production-db1,production-db2,dev-db1,dev-db2 - - PMA_USER=root - - PMA_PASSWORD= - - PMA_ABSOLUTE_URI=http://example.com/phpmyadmin/ - -IBM Cloud -+++++++++ - -One of our users has created a helpful guide for installing phpMyAdmin on the -`IBM Cloud platform `_. - -.. _quick_install: - -Quick Install -+++++++++++++ - -#. Choose an appropriate distribution kit from the phpmyadmin.net - Downloads page. Some kits contain only the English messages, others - contain all languages. We'll assume you chose a kit whose name - looks like ``phpMyAdmin-x.x.x -all-languages.tar.gz``. -#. Ensure you have downloaded a genuine archive, see :ref:`verify`. -#. Untar or unzip the distribution (be sure to unzip the subdirectories): - ``tar -xzvf phpMyAdmin_x.x.x-all-languages.tar.gz`` in your - webserver's document root. If you don't have direct access to your - document root, put the files in a directory on your local machine, - and, after step 4, transfer the directory on your web server using, - for example, FTP. -#. Ensure that all the scripts have the appropriate owner (if PHP is - running in safe mode, having some scripts with an owner different from - the owner of other scripts will be a problem). See :ref:`faq4_2` and - :ref:`faq1_26` for suggestions. -#. Now you must configure your installation. There are two methods that - can be used. Traditionally, users have hand-edited a copy of - :file:`config.inc.php`, but now a wizard-style setup script is provided - for those who prefer a graphical installation. Creating a - :file:`config.inc.php` is still a quick way to get started and needed for - some advanced features. - -Manually creating the file --------------------------- - -To manually create the file, simply use your text editor to create the -file :file:`config.inc.php` (you can copy :file:`config.sample.inc.php` to get -a minimal configuration file) in the main (top-level) phpMyAdmin -directory (the one that contains :file:`index.php`). phpMyAdmin first -loads the default configuration values and then overrides those values -with anything found in :file:`config.inc.php`. If the default value is -okay for a particular setting, there is no need to include it in -:file:`config.inc.php`. You'll probably need only a few directives to get going; a -simple configuration may look like this: - -.. code-block:: xml+php - - or use setup script on our demo -server: . - -.. _verify: - -Verifying phpMyAdmin releases -+++++++++++++++++++++++++++++ - -Since July 2015 all phpMyAdmin releases are cryptographically signed by the -releasing developer, who through January 2016 was Marc Delisle. His key id is -0xFEFC65D181AF644A, his PGP fingerprint is: - -.. code-block:: console - - 436F F188 4B1A 0C3F DCBF 0D79 FEFC 65D1 81AF 644A - -and you can get more identification information from . - -Beginning in January 2016, the release manager is Isaac Bennetch. His key id is -0xCE752F178259BD92, and his PGP fingerprint is: - -.. code-block:: console - - 3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92 - -and you can get more identification information from . - -Some additional downloads (for example themes) might be signed by Michal Čihař. His key id is -0x9C27B31342B7511D, and his PGP fingerprint is: - -.. code-block:: console - - 63CB 1DF1 EF12 CF2A C0EE 5A32 9C27 B313 42B7 511D - -and you can get more identification information from . - -You should verify that the signature matches the archive you have downloaded. -This way you can be sure that you are using the same code that was released. -You should also verify the date of the signature to make sure that you -downloaded the latest version. - -Each archive is accompanied by ``.asc`` files which contain the PGP signature -for it. Once you have both of them in the same folder, you can verify the signature: - -.. code-block:: console - - $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc - gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 - gpg: Can't check signature: public key not found - -As you can see gpg complains that it does not know the public key. At this -point, you should do one of the following steps: - -* Download the keyring from `our download server `_, then import it with: - -.. code-block:: console - - $ gpg --import phpmyadmin.keyring - -* Download and import the key from one of the key servers: - -.. code-block:: console - - $ gpg --keyserver hkp://pgp.mit.edu --recv-keys 3D06A59ECE730EB71B511C17CE752F178259BD92 - gpg: requesting key 8259BD92 from hkp server pgp.mit.edu - gpg: key 8259BD92: public key "Isaac Bennetch " imported - gpg: no ultimately trusted keys found - gpg: Total number processed: 1 - gpg: imported: 1 (RSA: 1) - -This will improve the situation a bit - at this point, you can verify that the -signature from the given key is correct but you still can not trust the name used -in the key: - -.. code-block:: console - - $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc - gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 - gpg: Good signature from "Isaac Bennetch " - gpg: aka "Isaac Bennetch " - gpg: WARNING: This key is not certified with a trusted signature! - gpg: There is no indication that the signature belongs to the owner. - Primary key fingerprint: 3D06 A59E CE73 0EB7 1B51 1C17 CE75 2F17 8259 BD92 - -The problem here is that anybody could issue the key with this name. You need to -ensure that the key is actually owned by the mentioned person. The GNU Privacy -Handbook covers this topic in the chapter `Validating other keys on your public -keyring`_. The most reliable method is to meet the developer in person and -exchange key fingerprints, however, you can also rely on the web of trust. This way -you can trust the key transitively though signatures of others, who have met -the developer in person. - -Once the key is trusted, the warning will not occur: - -.. code-block:: console - - $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc - gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 - gpg: Good signature from "Isaac Bennetch " [full] - -Should the signature be invalid (the archive has been changed), you would get a -clear error regardless of the fact that the key is trusted or not: - -.. code-block:: console - - $ gpg --verify phpMyAdmin-4.5.4.1-all-languages.zip.asc - gpg: Signature made Fri 29 Jan 2016 08:59:37 AM EST using RSA key ID 8259BD92 - gpg: BAD signature from "Isaac Bennetch " [unknown] - -.. _Validating other keys on your public keyring: https://www.gnupg.org/gph/en/manual.html#AEN335 - -.. index:: - single: Configuration storage - single: phpMyAdmin configuration storage - single: pmadb - -.. _linked-tables: - -phpMyAdmin configuration storage -++++++++++++++++++++++++++++++++ - -.. versionchanged:: 3.4.0 - - Prior to phpMyAdmin 3.4.0 this was called Linked Tables Infrastructure, but - the name was changed due to the extended scope of the storage. - -For a whole set of additional features (:ref:`bookmarks`, comments, :term:`SQL`-history, -tracking mechanism, :term:`PDF`-generation, :ref:`transformations`, :ref:`relations` -etc.) you need to create a set of special tables. Those tables can be located -in your own database, or in a central database for a multi-user installation -(this database would then be accessed by the controluser, so no other user -should have rights to it). - -.. _zeroconf: - -Zero configuration ------------------- - -In many cases, this database structure can be automatically created and -configured. This is called “Zero Configuration” mode and can be particularly -useful in shared hosting situations. “Zeroconf” mode is on by default, to -disable set :config:option:`$cfg['ZeroConf']` to false. - -The following three scenarios are covered by the Zero Configuration mode: - -* When entering a database where the configuration storage tables are not - present, phpMyAdmin offers to create them from the Operations tab. -* When entering a database where the tables do already exist, the software - automatically detects this and begins using them. This is the most common - situation; after the tables are initially created automatically they are - continually used without disturbing the user; this is also most useful on - shared hosting where the user is not able to edit :file:`config.inc.php` and - usually the user only has access to one database. -* When having access to multiple databases, if the user first enters the - database containing the configuration storage tables then switches to - another database, - phpMyAdmin continues to use the tables from the first database; the user is - not prompted to create more tables in the new database. - -Manual configuration --------------------- - -Please look at your ``./sql/`` directory, where you should find a -file called *create\_tables.sql*. (If you are using a Windows server, -pay special attention to :ref:`faq1_23`). - -If you already had this infrastructure and: - -* upgraded to MySQL 4.1.2 or newer, please use - :file:`sql/upgrade_tables_mysql_4_1_2+.sql`. -* upgraded to phpMyAdmin 4.3.0 or newer from 2.5.0 or newer (<= 4.2.x), - please use :file:`sql/upgrade_column_info_4_3_0+.sql`. -* upgraded to phpMyAdmin 4.7.0 or newer from 4.3.0 or newer, - please use :file:`sql/upgrade_tables_4_7_0+.sql`. - -and then create new tables by importing :file:`sql/create_tables.sql`. - -You can use your phpMyAdmin to create the tables for you. Please be -aware that you may need special (administrator) privileges to create -the database and tables, and that the script may need some tuning, -depending on the database name. - -After having imported the :file:`sql/create_tables.sql` file, you -should specify the table names in your :file:`config.inc.php` file. The -directives used for that can be found in the :ref:`config`. - -You will also need to have a controluser -(:config:option:`$cfg['Servers'][$i]['controluser']` and -:config:option:`$cfg['Servers'][$i]['controlpass']` settings) -with the proper rights to those tables. For example you can create it -using following statement: - -And for any MariaDB version: - -.. code-block:: mysql - - CREATE USER 'pma'@'localhost' IDENTIFIED VIA mysql_native_password USING 'pmapass'; - GRANT SELECT, INSERT, UPDATE, DELETE ON ``.* TO 'pma'@'localhost'; - -For MySQL 8.0 and newer: - -.. code-block:: mysql - - CREATE USER 'pma'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'pmapass'; - GRANT SELECT, INSERT, UPDATE, DELETE ON .* TO 'pma'@'localhost'; - -For MySQL older than 8.0: - -.. code-block:: mysql - - CREATE USER 'pma'@'localhost' IDENTIFIED WITH mysql_native_password AS 'pmapass'; - GRANT SELECT, INSERT, UPDATE, DELETE ON .* TO 'pma'@'localhost'; - -Note that MySQL installations with PHP older than 7.4 and MySQL newer than 8.0 may require -using the mysql_native_password authentication as a workaround, see -:ref:`faq1_45` for details. - -.. _upgrading: - -Upgrading from an older version -+++++++++++++++++++++++++++++++ - -.. warning:: - - **Never** extract the new version over an existing installation of - phpMyAdmin, always first remove the old files keeping just the - configuration. - - This way, you will not leave any old or outdated files in the directory, - which can have severe security implications or can cause various breakages. - -Simply copy :file:`config.inc.php` from your previous installation into -the newly unpacked one. Configuration files from old versions may -require some tweaking as some options have been changed or removed. -For compatibility with PHP 5.3 and later, remove a -``set_magic_quotes_runtime(0);`` statement that you might find near -the end of your configuration file. - -The complete upgrade can be performed in a few simple steps: - -1. Download the latest phpMyAdmin version from . -2. Rename existing phpMyAdmin folder (for example to ``phpmyadmin-old``). -3. Unpack freshly downloaded phpMyAdmin to the desired location (for example ``phpmyadmin``). -4. Copy :file:`config.inc.php`` from old location (``phpmyadmin-old``) to the new one (``phpmyadmin``). -5. Test that everything works properly. -6. Remove backup of a previous version (``phpmyadmin-old``). - -If you have upgraded your MySQL server from a version previous to 4.1.2 to -version 5.x or newer and if you use the phpMyAdmin configuration storage, you -should run the :term:`SQL` script found in -:file:`sql/upgrade_tables_mysql_4_1_2+.sql`. - -If you have upgraded your phpMyAdmin to 4.3.0 or newer from 2.5.0 or -newer (<= 4.2.x) and if you use the phpMyAdmin configuration storage, you -should run the :term:`SQL` script found in -:file:`sql/upgrade_column_info_4_3_0+.sql`. - -Do not forget to clear the browser cache and to empty the old session by -logging out and logging in again. - -.. index:: Authentication mode - -.. _authentication_modes: - -Using authentication modes -++++++++++++++++++++++++++ - -:term:`HTTP` and cookie authentication modes are recommended in a **multi-user -environment** where you want to give users access to their own database and -don't want them to play around with others. Nevertheless, be aware that MS -Internet Explorer seems to be really buggy about cookies, at least till version -6. Even in a **single-user environment**, you might prefer to use :term:`HTTP` -or cookie mode so that your user/password pair are not in clear in the -configuration file. - -:term:`HTTP` and cookie authentication -modes are more secure: the MySQL login information does not need to be -set in the phpMyAdmin configuration file (except possibly for the -:config:option:`$cfg['Servers'][$i]['controluser']`). -However, keep in mind that the password travels in plain text unless -you are using the HTTPS protocol. In cookie mode, the password is -stored, encrypted with the AES algorithm, in a temporary cookie. - -Then each of the *true* users should be granted a set of privileges -on a set of particular databases. Normally you shouldn't give global -privileges to an ordinary user unless you understand the impact of those -privileges (for example, you are creating a superuser). -For example, to grant the user *real_user* with all privileges on -the database *user_base*: - -.. code-block:: mysql - - GRANT ALL PRIVILEGES ON user_base.* TO 'real_user'@localhost IDENTIFIED BY 'real_password'; - -What the user may now do is controlled entirely by the MySQL user management -system. With HTTP or cookie authentication mode, you don't need to fill the -user/password fields inside the :config:option:`$cfg['Servers']`. - -.. seealso:: - - :ref:`faq1_32`, - :ref:`faq1_35`, - :ref:`faq4_1`, - :ref:`faq4_2`, - :ref:`faq4_3` - -.. index:: pair: HTTP; Authentication mode - -.. _auth_http: - -HTTP authentication mode ------------------------- - -* Uses :term:`HTTP` Basic authentication - method and allows you to log in as any valid MySQL user. -* Is supported with most PHP configurations. For :term:`IIS` (:term:`ISAPI`) - support using :term:`CGI` PHP see :ref:`faq1_32`, for using with Apache - :term:`CGI` see :ref:`faq1_35`. -* When PHP is running under Apache's :term:`mod_proxy_fcgi` (e.g. with PHP-FPM), - ``Authorization`` headers are not passed to the underlying FCGI application, - such that your credentials will not reach the application. In this case, you can - add the following configuration directive: - - .. code-block:: apache - - SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1 - -* See also :ref:`faq4_4` about not using the :term:`.htaccess` mechanism along with - ':term:`HTTP`' authentication mode. - -.. note:: - - There is no way to do proper logout in HTTP authentication, most browsers - will remember credentials until there is no different successful - authentication. Because of this, this method has a limitation that you can not - login with the same user after logout. - -.. index:: pair: Cookie; Authentication mode - -.. _cookie: - -Cookie authentication mode --------------------------- - -* Username and password are stored in cookies during the session and password - is deleted when it ends. -* With this mode, the user can truly log out of phpMyAdmin and log - back in with the same username (this is not possible with :ref:`auth_http`). -* If you want to allow users to enter any hostname to connect (rather than only - servers that are configured in :file:`config.inc.php`), - see the :config:option:`$cfg['AllowArbitraryServer']` directive. -* As mentioned in the :ref:`require` section, having the ``openssl`` extension - will speed up access considerably, but is not required. - -.. index:: pair: Signon; Authentication mode - -.. _auth_signon: - -Signon authentication mode --------------------------- - -* This mode is a convenient way of using credentials from another - application to authenticate to phpMyAdmin to implement a single signon - solution. -* The other application has to store login information into session - data (see :config:option:`$cfg['Servers'][$i]['SignonSession']` and - :config:option:`$cfg['Servers'][$i]['SignonCookieParams']`) or you - need to implement script to return the credentials (see - :config:option:`$cfg['Servers'][$i]['SignonScript']`). -* When no credentials are available, the user is being redirected to - :config:option:`$cfg['Servers'][$i]['SignonURL']`, where you should handle - the login process. - -The very basic example of saving credentials in a session is available as -:file:`examples/signon.php`: - -.. literalinclude:: ../examples/signon.php - :language: php - -Alternatively, you can also use this way to integrate with OpenID as shown -in :file:`examples/openid.php`: - -.. literalinclude:: ../examples/openid.php - :language: php - -If you intend to pass the credentials using some other means than, you have to -implement wrapper in PHP to get that data and set it to -:config:option:`$cfg['Servers'][$i]['SignonScript']`. There is a very minimal example -in :file:`examples/signon-script.php`: - -.. literalinclude:: ../examples/signon-script.php - :language: php - -.. seealso:: - :config:option:`$cfg['Servers'][$i]['auth_type']`, - :config:option:`$cfg['Servers'][$i]['SignonSession']`, - :config:option:`$cfg['Servers'][$i]['SignonCookieParams']`, - :config:option:`$cfg['Servers'][$i]['SignonScript']`, - :config:option:`$cfg['Servers'][$i]['SignonURL']`, - :ref:`example-signon` - -.. index:: pair: Config; Authentication mode - -.. _auth_config: - -Config authentication mode --------------------------- - -* This mode is sometimes the less secure one because it requires you to fill the - :config:option:`$cfg['Servers'][$i]['user']` and - :config:option:`$cfg['Servers'][$i]['password']` - fields (and as a result, anyone who can read your :file:`config.inc.php` - can discover your username and password). -* In the :ref:`faqmultiuser` section, there is an entry explaining how - to protect your configuration file. -* For additional security in this mode, you may wish to consider the - Host authentication :config:option:`$cfg['Servers'][$i]['AllowDeny']['order']` - and :config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` configuration directives. -* Unlike cookie and http, does not require a user to log in when first - loading the phpMyAdmin site. This is by design but could allow any - user to access your installation. Use of some restriction method is - suggested, perhaps a :term:`.htaccess` file with the HTTP-AUTH directive or disallowing - incoming HTTP requests at one’s router or firewall will suffice (both - of which are beyond the scope of this manual but easily searchable - with Google). - -.. _securing: - -Securing your phpMyAdmin installation -+++++++++++++++++++++++++++++++++++++ - -The phpMyAdmin team tries hard to make the application secure, however there -are always ways to make your installation more secure: - -* Follow our `Security announcements `_ and upgrade - phpMyAdmin whenever new vulnerability is published. -* Serve phpMyAdmin on HTTPS only. Preferably, you should use HSTS as well, so that - you're protected from protocol downgrade attacks. -* Ensure your PHP setup follows recommendations for production sites, for example - `display_errors `_ - should be disabled. -* Remove the ``test`` directory from phpMyAdmin, unless you are developing and need a test suite. -* Remove the ``setup`` directory from phpMyAdmin, you will probably not - use it after the initial setup. -* Properly choose an authentication method - :ref:`cookie` - is probably the best choice for shared hosting. -* Deny access to auxiliary files in :file:`./libraries/` or - :file:`./templates/` subfolders in your webserver configuration. - Such configuration prevents from possible path exposure and cross side - scripting vulnerabilities that might happen to be found in that code. For the - Apache webserver, this is often accomplished with a :term:`.htaccess` file in - those directories. -* Deny access to temporary files, see :config:option:`$cfg['TempDir']` (if that - is placed inside your web root, see also :ref:`web-dirs`. -* It is generally a good idea to protect a public phpMyAdmin installation - against access by robots as they usually can not do anything good there. You - can do this using ``robots.txt`` file in the root of your webserver or limit - access by web server configuration, see :ref:`faq1_42`. -* In case you don't want all MySQL users to be able to access - phpMyAdmin, you can use :config:option:`$cfg['Servers'][$i]['AllowDeny']['rules']` to limit them - or :config:option:`$cfg['Servers'][$i]['AllowRoot']` to deny root user access. -* Enable :ref:`2fa` for your account. -* Consider hiding phpMyAdmin behind an authentication proxy, so that - users need to authenticate prior to providing MySQL credentials - to phpMyAdmin. You can achieve this by configuring your web server to request - HTTP authentication. For example in Apache this can be done with: - - .. code-block:: apache - - AuthType Basic - AuthName "Restricted Access" - AuthUserFile /usr/share/phpmyadmin/passwd - Require valid-user - - Once you have changed the configuration, you need to create a list of users which - can authenticate. This can be done using the :program:`htpasswd` utility: - - .. code-block:: sh - - htpasswd -c /usr/share/phpmyadmin/passwd username - -* If you are afraid of automated attacks, enabling Captcha by - :config:option:`$cfg['CaptchaLoginPublicKey']` and - :config:option:`$cfg['CaptchaLoginPrivateKey']` might be an option. -* Failed login attempts are logged to syslog (if available, see - :config:option:`$cfg['AuthLog']`). This can allow using a tool such as - fail2ban to block brute-force attempts. Note that the log file used by syslog - is not the same as the Apache error or access log files. -* In case you're running phpMyAdmin together with other PHP applications, it is - generally advised to use separate session storage for phpMyAdmin to avoid - possible session-based attacks against it. You can use - :config:option:`$cfg['SessionSavePath']` to achieve this. - -.. _ssl: - -Using SSL for connection to database server -+++++++++++++++++++++++++++++++++++++++++++ - -It is recommended to use SSL when connecting to remote database server. There -are several configuration options involved in the SSL setup: - -:config:option:`$cfg['Servers'][$i]['ssl']` - Defines whether to use SSL at all. If you enable only this, the connection - will be encrypted, but there is not authentication of the connection - you - can not verify that you are talking to the right server. -:config:option:`$cfg['Servers'][$i]['ssl_key']` and :config:option:`$cfg['Servers'][$i]['ssl_cert']` - This is used for authentication of client to the server. -:config:option:`$cfg['Servers'][$i]['ssl_ca']` and :config:option:`$cfg['Servers'][$i]['ssl_ca_path']` - The certificate authorities you trust for server certificates. - This is used to ensure that you are talking to a trusted server. -:config:option:`$cfg['Servers'][$i]['ssl_verify']` - This configuration disables server certificate verification. Use with - caution. - -When the database server is using a local connection or private network and SSL can not be configured -you can use :config:option:`$cfg['MysqlSslWarningSafeHosts']` to explicitly list the hostnames that are considered secure. - -.. seealso:: - - :ref:`example-google-ssl`, - :ref:`example-aws-ssl`, - :config:option:`$cfg['Servers'][$i]['ssl']`, - :config:option:`$cfg['Servers'][$i]['ssl_key']`, - :config:option:`$cfg['Servers'][$i]['ssl_cert']`, - :config:option:`$cfg['Servers'][$i]['ssl_ca']`, - :config:option:`$cfg['Servers'][$i]['ssl_ca_path']`, - :config:option:`$cfg['Servers'][$i]['ssl_ciphers']`, - :config:option:`$cfg['Servers'][$i]['ssl_verify']` - -Known issues -++++++++++++ - -Users with column-specific privileges are unable to "Browse" ------------------------------------------------------------- - -If a user has only column-specific privileges on some (but not all) columns in a table, "Browse" -will fail with an error message. - -As a workaround, a bookmarked query with the same name as the table can be created, this will -run when using the "Browse" link instead. `Issue 11922 `_. - -Trouble logging back in after logging out using 'http' authentication ----------------------------------------------------------------------- - -When using the 'http' ``auth_type``, it can be impossible to log back in (when the logout comes -manually or after a period of inactivity). `Issue 11898 `_. - -.. _Composer tool: https://getcomposer.org/ -.. _Packagist: https://packagist.org/ -.. _Docker official image: https://hub.docker.com/_/phpmyadmin diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/transformations.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/transformations.rst.txt deleted file mode 100644 index 152f5b4..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/transformations.rst.txt +++ /dev/null @@ -1,158 +0,0 @@ -.. _transformations: - -Transformations -=============== - -.. note:: - - You need to have configured the :ref:`linked-tables` to use the transformations - feature. - -.. _transformationsintro: - -Introduction -++++++++++++ - -To enable transformations, you have to set up the ``column_info`` -table and the proper directives. Please see the :ref:`config` on how to do so. - -phpMyAdmin has two different types of transformations: browser display -transformations, which affect only how the data is shown when browsing -through phpMyAdmin; and input transformations, which affect a value -prior to being inserted through phpMyAdmin. -You can apply different transformations to the contents of each -column. Each transformation has options to define how it will affect the -stored data. - -Say you have a column ``filename`` which contains a filename. Normally -you would see in phpMyAdmin only this filename. Using display transformations -you can transform that filename into a HTML link, so you can click -inside of the phpMyAdmin structure on the column's link and will see -the file displayed in a new browser window. Using transformation -options you can also specify strings to append/prepend to a string or -the format you want the output stored in. - -For a general overview of all available transformations and their -options, you can either go to the ``Change`` link for an existing column -or from the dialog to create a new column, in either case there is a link -on that column structure page for "Browser display transformation" and -"Input transformation" which will show more information about each -transformation that is available on your system. - -For a tutorial on how to effectively use transformations, see our -`Link section `_ on the -official phpMyAdmin homepage. - -.. _transformationshowto: - -Usage -+++++ - -Go to the table structure page (reached by clicking on -the 'Structure' link for a table). There click on "Change" (or the change -icon) and there you will see the five transformation--related fields at the end of the line. -They are called ':term:`Media type`', 'Browser transformation' and -'Transformation options'. - -* The field ':term:`Media type`' is a drop-down field. Select the :term:`Media type` that - corresponds to the column's contents. Please note that many transformations - are inactive until a :term:`Media type` is selected. -* The field 'Browser display transformation' is a drop-down field. You can - choose from a hopefully growing amount of pre-defined transformations. - See below for information on how to build your own transformation. - There are global transformations and mimetype-bound transformations. - Global transformations can be used for any mimetype. They will take - the mimetype, if necessary, into regard. Mimetype-bound - transformations usually only operate on a certain mimetype. There are - transformations which operate on the main mimetype (like 'image'), - which will most likely take the subtype into regard, and those who - only operate on a specific subtype (like 'image/jpeg'). You can use - transformations on mimetypes for which the function was not defined - for. There is no security check for you selected the right - transformation, so take care of what the output will be like. -* The field 'Browser display transformation options' is a free-type textfield. You have - to enter transform-function specific options here. Usually the - transforms can operate with default options, but it is generally a - good idea to look up the overview to see which options are necessary. - Much like the ENUM/SET-Fields, you have to split up several options - using the format 'a','b','c',...(NOTE THE MISSING BLANKS). This is - because internally the options will be parsed as an array, leaving the - first value the first element in the array, and so forth. If you want - to specify a MIME character set you can define it in the - transformation\_options. You have to put that outside of the pre- - defined options of the specific mime-transform, as the last value of - the set. Use the format "'; charset=XXX'". If you use a transform, for - which you can specify 2 options and you want to append a character - set, enter "'first parameter','second parameter','charset=us-ascii'". - You can, however use the defaults for the parameters: "'','','charset - =us-ascii'". The default options can be configured using - :config:option:`$cfg['DefaultTransformations']`. -* 'Input transformation' is another drop-down menu that corresponds exactly - with the instructions above for "Browser display transformation" except - these these affect the data before insertion in to the database. These are - most commonly used to either provide a specialized editor (for example, using - the phpMyAdmin SQL editor interface) or selector (such as for uploading an image). - It's also possible to manipulate the data such as converting an IPv4 address to binary - or parsing it through a regular expression. -* Finally, 'Input transformation options' is the equivalent of the "Browser display - transformation options" section above and is where optional and required parameters are entered. - -.. _transformationsfiles: - -File structure -++++++++++++++ - -All specific transformations for mimetypes are defined through class -files in the directory :file:`libraries/classes/Plugins/Transformations/`. Each of -them extends a certain transformation abstract class declared in -:file:`libraries/classes/Plugins/Transformations/Abs`. - -They are stored in files to ease customization and to allow easy adding of -new or custom transformations. - -Because the user cannot enter their own mimetypes, it is kept certain that -the transformations will always work. It makes no sense to apply a -transformation to a mimetype the transform-function doesn't know to -handle. - -There is a file called :file:`libraries/classes/Plugins/Transformations.php` that provides some -basic functions which can be included by any other transform function. - -The file name convention is ``[Mimetype]_[Subtype]_[Transformation -Name].php``, while the abstract class that it extends has the -name ``[Transformation Name]TransformationsPlugin``. All of the -methods that have to be implemented by a transformations plug-in are: - -#. getMIMEType() and getMIMESubtype() in the main class; -#. getName(), getInfo() and applyTransformation() in the abstract class - it extends. - -The getMIMEType(), getMIMESubtype() and getName() methods return the -name of the MIME type, MIME Subtype and transformation accordingly. -getInfo() returns the transformation's description and possible -options it may receive and applyTransformation() is the method that -does the actual work of the transformation plug-in. - -Please see the :file:`libraries/classes/Plugins/Transformations/TEMPLATE` and -:file:`libraries/classes/Plugins/Transformations/TEMPLATE\_ABSTRACT` files for adding -your own transformation plug-in. You can also generate a new -transformation plug-in (with or without the abstract transformation -class), by using -:file:`scripts/transformations_generator_plugin.sh` or -:file:`scripts/transformations_generator_main_class.sh`. - -The applyTransformation() method always gets passed three variables: - -#. **$buffer** - Contains the text inside of the column. This is the - text, you want to transform. -#. **$options** - Contains any user-passed options to a transform - function as an array. -#. **$meta** - Contains an object with information about your column. The - data is drawn from the output of the `mysql\_fetch\_field() - `_ function. This means, all - object properties described on the `manual page - `_ are available in this - variable and can be used to transform a column accordingly to - unsigned/zerofill/not\_null/... properties. The $meta->mimetype - variable contains the original :term:`Media type` of the column (i.e. - 'text/plain', 'image/jpeg' etc.) diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/two_factor.rst.txt b/Sources/php_script/script/phpMyAdmin/doc/html/_sources/two_factor.rst.txt deleted file mode 100644 index b507718..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/_sources/two_factor.rst.txt +++ /dev/null @@ -1,69 +0,0 @@ -.. _2fa: - -Two-factor authentication -========================= - -.. versionadded:: 4.8.0 - -Since phpMyAdmin 4.8.0 you can configure two-factor authentication to be -used when logging in. To use this, you first need to configure the -:ref:`linked-tables`. Once this is done, every user can opt-in for the second -authentication factor in the :guilabel:`Settings`. - -When running phpMyAdmin from the Git source repository, the dependencies must be installed -manually; the typical way of doing so is with the command: - -.. code-block:: sh - - composer require pragmarx/google2fa-qrcode bacon/bacon-qr-code - -Or when using a hardware security key with FIDO U2F: - -.. code-block:: sh - - composer require code-lts/u2f-php-server - -Authentication Application (2FA) --------------------------------- - -Using an application for authentication is a quite common approach based on HOTP and -`TOTP `_. -It is based on transmitting a private key from phpMyAdmin to the authentication -application and the application is then able to generate one time codes based -on this key. The easiest way to enter the key in to the application from phpMyAdmin is -through scanning a QR code. - -There are dozens of applications available for mobile phones to implement these -standards, the most widely used include: - -* `FreeOTP for iOS, Android and Pebble `_ -* `Authy for iOS, Android, Chrome, OS X `_ -* `Google Authenticator for iOS `_ -* `Google Authenticator for Android `_ -* `LastPass Authenticator for iOS, Android, OS X, Windows `_ - -Hardware Security Key (FIDO U2F) --------------------------------- - -Using hardware tokens is considered to be more secure than a software based -solution. phpMyAdmin supports `FIDO U2F `_ -tokens. - -There are several manufacturers of these tokens, for example: - -* `youbico FIDO U2F Security Key `_ -* `HyperFIDO `_ -* `Trezor Hardware Wallet `_ can act as an `U2F token `_ -* `List of Two Factor Auth (2FA) Dongles `_ - -.. _simple2fa: - -Simple two-factor authentication --------------------------------- - -This authentication is included for testing and demonstration purposes only as -it really does not provide two-factor authentication, it just asks the user to confirm login by -clicking on the button. - -It should not be used in the production and is disabled unless -:config:option:`$cfg['DBG']['simple2fa']` is set. diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_static/classic.css b/Sources/php_script/script/phpMyAdmin/doc/html/_static/classic.css deleted file mode 100644 index dcae946..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/_static/classic.css +++ /dev/null @@ -1,266 +0,0 @@ -/* - * classic.css_t - * ~~~~~~~~~~~~~ - * - * Sphinx stylesheet -- classic theme. - * - * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -html { - /* CSS hack for macOS's scrollbar (see #1125) */ - background-color: #FFFFFF; -} - -body { - font-family: sans-serif; - font-size: 100%; - background-color: #11303d; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - background-color: #1c4e63; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 230px; -} - -div.body { - background-color: #ffffff; - color: #000000; - padding: 0 20px 30px 20px; -} - -div.footer { - color: #ffffff; - width: 100%; - padding: 9px 0 9px 0; - text-align: center; - font-size: 75%; -} - -div.footer a { - color: #ffffff; - text-decoration: underline; -} - -div.related { - background-color: #133f52; - line-height: 30px; - color: #ffffff; -} - -div.related a { - color: #ffffff; -} - -div.sphinxsidebar { -} - -div.sphinxsidebar h3 { - font-family: 'Trebuchet MS', sans-serif; - color: #ffffff; - font-size: 1.4em; - font-weight: normal; - margin: 0; - padding: 0; -} - -div.sphinxsidebar h3 a { - color: #ffffff; -} - -div.sphinxsidebar h4 { - font-family: 'Trebuchet MS', sans-serif; - color: #ffffff; - font-size: 1.3em; - font-weight: normal; - margin: 5px 0 0 0; - padding: 0; -} - -div.sphinxsidebar p { - color: #ffffff; -} - -div.sphinxsidebar p.topless { - margin: 5px 10px 10px 10px; -} - -div.sphinxsidebar ul { - margin: 10px; - padding: 0; - color: #ffffff; -} - -div.sphinxsidebar a { - color: #98dbcc; -} - -div.sphinxsidebar input { - border: 1px solid #98dbcc; - font-family: sans-serif; - font-size: 1em; -} - - - -/* -- hyperlink styles ------------------------------------------------------ */ - -a { - color: #355f7c; - text-decoration: none; -} - -a:visited { - color: #355f7c; - text-decoration: none; -} - -a:hover { - text-decoration: underline; -} - - - -/* -- body styles ----------------------------------------------------------- */ - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Trebuchet MS', sans-serif; - background-color: #f2f2f2; - font-weight: normal; - color: #20435c; - border-bottom: 1px solid #ccc; - margin: 20px -20px 10px -20px; - padding: 3px 0 3px 10px; -} - -div.body h1 { margin-top: 0; font-size: 200%; } -div.body h2 { font-size: 160%; } -div.body h3 { font-size: 140%; } -div.body h4 { font-size: 120%; } -div.body h5 { font-size: 110%; } -div.body h6 { font-size: 100%; } - -a.headerlink { - color: #c60f0f; - font-size: 0.8em; - padding: 0 4px 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - background-color: #c60f0f; - color: white; -} - -div.body p, div.body dd, div.body li, div.body blockquote { - text-align: justify; - line-height: 130%; -} - -div.admonition p.admonition-title + p { - display: inline; -} - -div.admonition p { - margin-bottom: 5px; -} - -div.admonition pre { - margin-bottom: 5px; -} - -div.admonition ul, div.admonition ol { - margin-bottom: 5px; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -div.warning { - background-color: #ffe4e4; - border: 1px solid #f66; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre { - padding: 5px; - background-color: unset; - color: unset; - line-height: 120%; - border: 1px solid #ac9; - border-left: none; - border-right: none; -} - -code { - background-color: #ecf0f3; - padding: 0 1px 0 1px; - font-size: 0.95em; -} - -th, dl.field-list > dt { - background-color: #ede; -} - -.warning code { - background: #efc2c2; -} - -.note code { - background: #d6d6d6; -} - -.viewcode-back { - font-family: sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} - -div.code-block-caption { - color: #efefef; - background-color: #1c4e63; -} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/_static/language_data.js b/Sources/php_script/script/phpMyAdmin/doc/html/_static/language_data.js deleted file mode 100644 index 0e7dc7e..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/_static/language_data.js +++ /dev/null @@ -1,297 +0,0 @@ -/* - * language_data.js - * ~~~~~~~~~~~~~~~~ - * - * This script contains the language-specific data used by searchtools.js, - * namely the list of stopwords, stemmer, scorer and splitter. - * - * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; - - -/* Non-minified version JS is _stemmer.js if file is provided */ -/** - * Porter Stemmer - */ -var Stemmer = function() { - - var step2list = { - ational: 'ate', - tional: 'tion', - enci: 'ence', - anci: 'ance', - izer: 'ize', - bli: 'ble', - alli: 'al', - entli: 'ent', - eli: 'e', - ousli: 'ous', - ization: 'ize', - ation: 'ate', - ator: 'ate', - alism: 'al', - iveness: 'ive', - fulness: 'ful', - ousness: 'ous', - aliti: 'al', - iviti: 'ive', - biliti: 'ble', - logi: 'log' - }; - - var step3list = { - icate: 'ic', - ative: '', - alize: 'al', - iciti: 'ic', - ical: 'ic', - ful: '', - ness: '' - }; - - var c = "[^aeiou]"; // consonant - var v = "[aeiouy]"; // vowel - var C = c + "[^aeiouy]*"; // consonant sequence - var V = v + "[aeiou]*"; // vowel sequence - - var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 - var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 - var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 - var s_v = "^(" + C + ")?" + v; // vowel in stem - - this.stemWord = function (w) { - var stem; - var suffix; - var firstch; - var origword = w; - - if (w.length < 3) - return w; - - var re; - var re2; - var re3; - var re4; - - firstch = w.substr(0,1); - if (firstch == "y") - w = firstch.toUpperCase() + w.substr(1); - - // Step 1a - re = /^(.+?)(ss|i)es$/; - re2 = /^(.+?)([^s])s$/; - - if (re.test(w)) - w = w.replace(re,"$1$2"); - else if (re2.test(w)) - w = w.replace(re2,"$1$2"); - - // Step 1b - re = /^(.+?)eed$/; - re2 = /^(.+?)(ed|ing)$/; - if (re.test(w)) { - var fp = re.exec(w); - re = new RegExp(mgr0); - if (re.test(fp[1])) { - re = /.$/; - w = w.replace(re,""); - } - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1]; - re2 = new RegExp(s_v); - if (re2.test(stem)) { - w = stem; - re2 = /(at|bl|iz)$/; - re3 = new RegExp("([^aeiouylsz])\\1$"); - re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re2.test(w)) - w = w + "e"; - else if (re3.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - else if (re4.test(w)) - w = w + "e"; - } - } - - // Step 1c - re = /^(.+?)y$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(s_v); - if (re.test(stem)) - w = stem + "i"; - } - - // Step 2 - re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step2list[suffix]; - } - - // Step 3 - re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - suffix = fp[2]; - re = new RegExp(mgr0); - if (re.test(stem)) - w = stem + step3list[suffix]; - } - - // Step 4 - re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; - re2 = /^(.+?)(s|t)(ion)$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - if (re.test(stem)) - w = stem; - } - else if (re2.test(w)) { - var fp = re2.exec(w); - stem = fp[1] + fp[2]; - re2 = new RegExp(mgr1); - if (re2.test(stem)) - w = stem; - } - - // Step 5 - re = /^(.+?)e$/; - if (re.test(w)) { - var fp = re.exec(w); - stem = fp[1]; - re = new RegExp(mgr1); - re2 = new RegExp(meq1); - re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); - if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) - w = stem; - } - re = /ll$/; - re2 = new RegExp(mgr1); - if (re.test(w) && re2.test(w)) { - re = /.$/; - w = w.replace(re,""); - } - - // and turn initial Y back to y - if (firstch == "y") - w = firstch.toLowerCase() + w.substr(1); - return w; - } -} - - - - - -var splitChars = (function() { - var result = {}; - var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, - 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, - 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, - 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, - 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, - 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, - 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, - 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, - 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, - 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; - var i, j, start, end; - for (i = 0; i < singles.length; i++) { - result[singles[i]] = true; - } - var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], - [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], - [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], - [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], - [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], - [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], - [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], - [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], - [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], - [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], - [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], - [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], - [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], - [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], - [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], - [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], - [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], - [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], - [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], - [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], - [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], - [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], - [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], - [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], - [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], - [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], - [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], - [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], - [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], - [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], - [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], - [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], - [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], - [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], - [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], - [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], - [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], - [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], - [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], - [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], - [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], - [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], - [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], - [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], - [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], - [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], - [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], - [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], - [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; - for (i = 0; i < ranges.length; i++) { - start = ranges[i][0]; - end = ranges[i][1]; - for (j = start; j <= end; j++) { - result[j] = true; - } - } - return result; -})(); - -function splitQuery(query) { - var result = []; - var start = -1; - for (var i = 0; i < query.length; i++) { - if (splitChars[query.charCodeAt(i)]) { - if (start !== -1) { - result.push(query.slice(start, i)); - start = -1; - } - } else if (start === -1) { - start = i; - } - } - if (start !== -1) { - result.push(query.slice(start)); - } - return result; -} - - diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/config.html b/Sources/php_script/script/phpMyAdmin/doc/html/config.html deleted file mode 100644 index 0a1cd99..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/config.html +++ /dev/null @@ -1,6161 +0,0 @@ - - - - - - - - Configuration — phpMyAdmin 5.2.0 documentation - - - - - - - - - - - - - - -

        - -
        -
        -
        -
        - -
        -

        Configuration

        -

        All configurable data is placed in config.inc.php in phpMyAdmin’s -toplevel directory. If this file does not exist, please refer to the -Installation section to create one. This file only needs to contain the -parameters you want to change from their corresponding default value in -libraries/config.default.php (this file is not intended for changes).

        -
        -

        See also

        -

        Examples for examples of configurations

        -
        -

        If a directive is missing from your file, you can just add another line with -the file. This file is for over-writing the defaults; if you wish to use the -default value there’s no need to add a line here.

        -

        The parameters which relate to design (like colors) are placed in -themes/themename/scss/_variables.scss. You might also want to create -config.footer.inc.php and config.header.inc.php files to add -your site specific code to be included on start and end of each page.

        -
        -

        Note

        -

        Some distributions (eg. Debian or Ubuntu) store config.inc.php in -/etc/phpmyadmin instead of within phpMyAdmin sources.

        -
        -
        -

        Basic settings

        -
        -
        -$cfg['PmaAbsoluteUri']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        Changed in version 4.6.5: This setting was not available in phpMyAdmin 4.6.0 - 4.6.4.

        -
        -

        Sets here the complete URL (with full path) to your phpMyAdmin -installation’s directory. E.g. -https://www.example.net/path_to_your_phpMyAdmin_directory/. Note also -that the URL on most of web servers are case sensitive (even on -Windows). Don’t forget the trailing slash at the end.

        -

        Starting with version 2.3.0, it is advisable to try leaving this blank. In -most cases phpMyAdmin automatically detects the proper setting. Users of -port forwarding or complex reverse proxy setup might need to set this.

        -

        A good test is to browse a table, edit a row and save it. There should be -an error message if phpMyAdmin is having trouble auto–detecting the correct -value. If you get an error that this must be set or if the autodetect code -fails to detect your path, please post a bug report on our bug tracker so -we can improve the code.

        - -
        - -
        -
        -$cfg['PmaNoRelation_DisableWarning']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Starting with version 2.3.0 phpMyAdmin offers a lot of features to -work with master / foreign – tables (see $cfg['Servers'][$i]['pmadb']).

        -

        If you tried to set this -up and it does not work for you, have a look on the Structure page -of one database where you would like to use it. You will find a link -that will analyze why those features have been disabled.

        -

        If you do not want to use those features set this variable to true to -stop this message from appearing.

        -
        - -
        -
        -$cfg['AuthLog']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'auto'

        -
        -
        -
        -

        New in version 4.8.0: This is supported since phpMyAdmin 4.8.0.

        -
        -

        Configure authentication logging destination. Failed (or all, depending on -$cfg['AuthLogSuccess']) authentication attempts will be -logged according to this directive:

        -
        -
        auto

        Let phpMyAdmin automatically choose between syslog and php.

        -
        -
        syslog

        Log using syslog, using AUTH facility, on most systems this ends up -in /var/log/auth.log.

        -
        -
        php

        Log into PHP error log.

        -
        -
        sapi

        Log into PHP SAPI logging.

        -
        -
        /path/to/file

        Any other value is treated as a filename and log entries are written there.

        -
        -
        -
        -

        Note

        -

        When logging to a file, make sure its permissions are correctly set -for a web server user, the setup should closely match instructions -described in $cfg['TempDir']:

        -
        -
        - -
        -
        -$cfg['AuthLogSuccess']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -
        -

        New in version 4.8.0: This is supported since phpMyAdmin 4.8.0.

        -
        -

        Whether to log successful authentication attempts into -$cfg['AuthLog'].

        -
        - -
        -
        -$cfg['SuhosinDisableWarning']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        A warning is displayed on the main page if Suhosin is detected.

        -

        You can set this parameter to true to stop this message from appearing.

        -
        - -
        -
        -$cfg['LoginCookieValidityDisableWarning']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        A warning is displayed on the main page if the PHP parameter -session.gc_maxlifetime is lower than cookie validity configured in phpMyAdmin.

        -

        You can set this parameter to true to stop this message from appearing.

        -
        - -
        -
        -$cfg['ServerLibraryDifference_DisableWarning']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -
        -

        Deprecated since version 4.7.0: This setting was removed as the warning has been removed as well.

        -
        -

        A warning is displayed on the main page if there is a difference -between the MySQL library and server version.

        -

        You can set this parameter to true to stop this message from appearing.

        -
        - -
        -
        -$cfg['ReservedWordDisableWarning']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        This warning is displayed on the Structure page of a table if one or more -column names match with words which are MySQL reserved.

        -

        If you want to turn off this warning, you can set it to true and -warning will no longer be displayed.

        -
        - -
        -
        -$cfg['TranslationWarningThreshold']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        80

        -
        -
        -

        Show warning about incomplete translations on certain threshold.

        -
        - -
        -
        -$cfg['SendErrorReports']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'ask'

        -
        -
        -

        Valid values are:

        -
          -
        • ask

        • -
        • always

        • -
        • never

        • -
        -

        Sets the default behavior for JavaScript error reporting.

        -

        Whenever an error is detected in the JavaScript execution, an error report -may be sent to the phpMyAdmin team if the user agrees.

        -

        The default setting of 'ask' will ask the user everytime there is a new -error report. However you can set this parameter to 'always' to send error -reports without asking for confirmation or you can set it to 'never' to -never send error reports.

        -

        This directive is available both in the configuration file and in users -preferences. If the person in charge of a multi-user installation prefers -to disable this feature for all users, a value of 'never' should be -set, and the $cfg['UserprefsDisallow'] directive should -contain 'SendErrorReports' in one of its array values.

        -
        - -
        -
        -$cfg['ConsoleEnterExecutes']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Setting this to true allows the user to execute queries by pressing Enter -instead of Ctrl+Enter. A new line can be inserted by pressing Shift+Enter.

        -

        The behaviour of the console can be temporarily changed using console’s -settings interface.

        -
        - -
        -
        -$cfg['AllowThirdPartyFraming']
        -
        -
        Type
        -

        boolean|string

        -
        -
        Default value
        -

        false

        -
        -
        -

        Setting this to true allows phpMyAdmin to be included inside a frame, -and is a potential security hole allowing cross-frame scripting attacks or -clickjacking. Setting this to ‘sameorigin’ prevents phpMyAdmin to be -included from another document in a frame, unless that document belongs -to the same domain.

        -
        - -
        -
        -

        Server connection settings

        -
        -
        -$cfg['Servers']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        one server array with settings listed below

        -
        -
        -

        Since version 1.4.2, phpMyAdmin supports the administration of multiple -MySQL servers. Therefore, a $cfg['Servers']-array has been -added which contains the login information for the different servers. The -first $cfg['Servers'][$i]['host'] contains the hostname of -the first server, the second $cfg['Servers'][$i]['host'] -the hostname of the second server, etc. In -libraries/config.default.php, there is only one section for server -definition, however you can put as many as you need in -config.inc.php, copy that block or needed parts (you don’t have to -define all settings, just those you need to change).

        -
        -

        Note

        -

        The $cfg['Servers'] array starts with -$cfg[‘Servers’][1]. Do not use $cfg[‘Servers’][0]. If you want more -than one server, just copy following section (including $i -increment) several times. There is no need to define full server -array, just define values you need to change.

        -
        -
        - -
        -
        -$cfg['Servers'][$i]['host']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'localhost'

        -
        -
        -

        The hostname or IP address of your $i-th MySQL-server. E.g. -localhost.

        -

        Possible values are:

        -
          -
        • hostname, e.g., 'localhost' or 'mydb.example.org'

        • -
        • IP address, e.g., '127.0.0.1' or '192.168.10.1'

        • -
        • IPv6 address, e.g. 2001:cdba:0000:0000:0000:0000:3257:9652

        • -
        • dot - '.', i.e., use named pipes on windows systems

        • -
        • empty - '', disables this server

        • -
        -
        -

        Note

        -

        The hostname localhost is handled specially by MySQL and it uses -the socket based connection protocol. To use TCP/IP networking, use an -IP address or hostname such as 127.0.0.1 or db.example.com. You -can configure the path to the socket with -$cfg['Servers'][$i]['socket'].

        -
        - -
        - -
        -
        -$cfg['Servers'][$i]['port']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        The port-number of your $i-th MySQL-server. Default is 3306 (leave -blank).

        -
        -

        Note

        -

        If you use localhost as the hostname, MySQL ignores this port number -and connects with the socket, so if you want to connect to a port -different from the default port, use 127.0.0.1 or the real hostname -in $cfg['Servers'][$i]['host'].

        -
        - -
        - -
        -
        -$cfg['Servers'][$i]['socket']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        The path to the socket to use. Leave blank for default. To determine -the correct socket, check your MySQL configuration or, using the -mysql command–line client, issue the status command. Among the -resulting information displayed will be the socket used.

        -
        -

        Note

        -

        This takes effect only if $cfg['Servers'][$i]['host'] is set -to localhost.

        -
        - -
        - -
        -
        -$cfg['Servers'][$i]['ssl']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Whether to enable SSL for the connection between phpMyAdmin and the MySQL -server to secure the connection.

        -

        When using the 'mysql' extension, -none of the remaining 'ssl...' configuration options apply.

        -

        We strongly recommend the 'mysqli' extension when using this option.

        - -
        - -
        -
        -$cfg['Servers'][$i]['ssl_key']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        NULL

        -
        -
        -

        Path to the client key file when using SSL for connecting to the MySQL -server. This is used to authenticate the client to the server.

        -

        For example:

        -
        $cfg['Servers'][$i]['ssl_key'] = '/etc/mysql/server-key.pem';
        -
        -
        - -
        - -
        -
        -$cfg['Servers'][$i]['ssl_cert']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        NULL

        -
        -
        -

        Path to the client certificate file when using SSL for connecting to the -MySQL server. This is used to authenticate the client to the server.

        - -
        - -
        -
        -$cfg['Servers'][$i]['ssl_ca']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        NULL

        -
        -
        -

        Path to the CA file when using SSL for connecting to the MySQL server.

        - -
        - -
        -
        -$cfg['Servers'][$i]['ssl_ca_path']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        NULL

        -
        -
        -

        Directory containing trusted SSL CA certificates in PEM format.

        - -
        - -
        -
        -$cfg['Servers'][$i]['ssl_ciphers']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        NULL

        -
        -
        -

        List of allowable ciphers for SSL connections to the MySQL server.

        - -
        - -
        -
        -$cfg['Servers'][$i]['ssl_verify']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -
        -

        New in version 4.6.0: This is supported since phpMyAdmin 4.6.0.

        -
        -

        If your PHP install uses the MySQL Native Driver (mysqlnd), your -MySQL server is 5.6 or later, and your SSL certificate is self-signed, -there is a chance your SSL connection will fail due to validation. -Setting this to false will disable the validation check.

        -

        Since PHP 5.6.0 it also verifies whether server name matches CN of its -certificate. There is currently no way to disable just this check without -disabling complete SSL verification.

        -
        -

        Warning

        -

        Disabling the certificate verification defeats purpose of using SSL. -This will make the connection vulnerable to man in the middle attacks.

        -
        -
        -

        Note

        -

        This flag only works with PHP 5.6.16 or later.

        -
        - -
        - -
        -
        -$cfg['Servers'][$i]['connect_type']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'tcp'

        -
        -
        -
        -

        Deprecated since version 4.7.0: This setting is no longer used as of 4.7.0, since MySQL decides the -connection type based on host, so it could lead to unexpected results. -Please set $cfg['Servers'][$i]['host'] accordingly -instead.

        -
        -

        What type connection to use with the MySQL server. Your options are -'socket' and 'tcp'. It defaults to tcp as that is nearly guaranteed -to be available on all MySQL servers, while sockets are not supported on -some platforms. To use the socket mode, your MySQL server must be on the -same machine as the Web server.

        -
        - -
        -
        -$cfg['Servers'][$i]['compress']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Whether to use a compressed protocol for the MySQL server connection -or not (experimental).

        -
        - -
        -
        -$cfg['Servers'][$i]['controlhost']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Permits to use an alternate host to hold the configuration storage -data.

        - -
        - -
        -
        -$cfg['Servers'][$i]['controlport']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Permits to use an alternate port to connect to the host that -holds the configuration storage.

        - -
        - -
        -
        -$cfg['Servers'][$i]['controluser']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -
        - -
        -
        -$cfg['Servers'][$i]['controlpass']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        This special account is used to access phpMyAdmin configuration storage. -You don’t need it in single user case, but if phpMyAdmin is shared it -is recommended to give access to phpMyAdmin configuration storage only to this user -and configure phpMyAdmin to use it. All users will then be able to use -the features without need to have direct access to phpMyAdmin configuration storage.

        -
        -

        Changed in version 2.2.5: those were called stduser and stdpass

        -
        - -
        - -
        -
        -$cfg['Servers'][$i]['control_*']
        -
        -
        Type
        -

        mixed

        -
        -
        -
        -

        New in version 4.7.0.

        -
        -

        You can change any MySQL connection setting for control link (used to -access phpMyAdmin configuration storage) using configuration prefixed with control_.

        -

        This can be used to change any aspect of the control connection, which by -default uses same parameters as the user one.

        -

        For example you can configure SSL for the control connection:

        -
        // Enable SSL
        -$cfg['Servers'][$i]['control_ssl'] = true;
        -// Client secret key
        -$cfg['Servers'][$i]['control_ssl_key'] = '../client-key.pem';
        -// Client certificate
        -$cfg['Servers'][$i]['control_ssl_cert'] = '../client-cert.pem';
        -// Server certification authority
        -$cfg['Servers'][$i]['control_ssl_ca'] = '../server-ca.pem';
        -
        -
        - -
        - -
        -
        -$cfg['Servers'][$i]['auth_type']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'cookie'

        -
        -
        -

        Whether config or cookie or HTTP or signon authentication should be -used for this server.

        -
          -
        • ‘config’ authentication ($auth_type = 'config') is the plain old -way: username and password are stored in config.inc.php.

        • -
        • ‘cookie’ authentication mode ($auth_type = 'cookie') allows you to -log in as any valid MySQL user with the help of cookies.

        • -
        • ‘http’ authentication allows you to log in as any -valid MySQL user via HTTP-Auth.

        • -
        • ‘signon’ authentication mode ($auth_type = 'signon') allows you to -log in from prepared PHP session data or using supplied PHP script.

        • -
        - -
        - -
        -
        -$cfg['Servers'][$i]['auth_http_realm']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        When using auth_type = http, this field allows to define a custom -HTTP Basic Auth Realm which will be displayed to the user. If not -explicitly specified in your configuration, a string combined of -“phpMyAdmin ” and either $cfg['Servers'][$i]['verbose'] or -$cfg['Servers'][$i]['host'] will be used.

        -
        - -
        -
        -$cfg['Servers'][$i]['auth_swekey_config']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 3.0.0.0: This setting was named $cfg[‘Servers’][$i][‘auth_feebee_config’] and was renamed before the 3.0.0.0 release.

        -
        -
        -

        Deprecated since version 4.6.4: This setting was removed because their servers are no longer working and it was not working correctly.

        -
        -
        -

        Deprecated since version 4.0.10.17: This setting was removed in a maintenance release because their servers are no longer working and it was not working correctly.

        -
        -

        The name of the file containing swekey ids and login names for hardware -authentication. Leave empty to deactivate this feature.

        -
        - -
        -
        -$cfg['Servers'][$i]['user']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'root'

        -
        -
        -
        - -
        -
        -$cfg['Servers'][$i]['password']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        When using $cfg['Servers'][$i]['auth_type'] set to -‘config’, this is the user/password-pair which phpMyAdmin will use to -connect to the MySQL server. This user/password pair is not needed when -HTTP or cookie authentication is used -and should be empty.

        -
        - -
        -
        -$cfg['Servers'][$i]['nopassword']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -
        -

        Deprecated since version 4.7.0: This setting was removed as it can produce unexpected results.

        -
        -

        Allow attempt to log in without password when a login with password -fails. This can be used together with http authentication, when -authentication is done some other way and phpMyAdmin gets user name -from auth and uses empty password for connecting to MySQL. Password -login is still tried first, but as fallback, no password method is -tried.

        -
        - -
        -
        -$cfg['Servers'][$i]['only_db']
        -
        -
        Type
        -

        string or array

        -
        -
        Default value
        -

        ''

        -
        -
        -

        If set to a (an array of) database name(s), only this (these) -database(s) will be shown to the user. Since phpMyAdmin 2.2.1, -this/these database(s) name(s) may contain MySQL wildcards characters -(“_” and “%”): if you want to use literal instances of these -characters, escape them (I.E. use 'my\_db' and not 'my_db').

        -

        This setting is an efficient way to lower the server load since the -latter does not need to send MySQL requests to build the available -database list. But it does not replace the privileges rules of the -MySQL database server. If set, it just means only these databases -will be displayed but not that all other databases can’t be used.

        -

        An example of using more that one database:

        -
        $cfg['Servers'][$i]['only_db'] = ['db1', 'db2'];
        -
        -
        -
        -

        Changed in version 4.0.0: Previous versions permitted to specify the display order of -the database names via this directive.

        -
        -
        - -
        -
        -$cfg['Servers'][$i]['hide_db']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Regular expression for hiding some databases from unprivileged users. -This only hides them from listing, but a user is still able to access -them (using, for example, the SQL query area). To limit access, use -the MySQL privilege system. For example, to hide all databases -starting with the letter “a”, use

        -
        $cfg['Servers'][$i]['hide_db'] = '^a';
        -
        -
        -

        and to hide both “db1” and “db2” use

        -
        $cfg['Servers'][$i]['hide_db'] = '^(db1|db2)$';
        -
        -
        -

        More information on regular expressions can be found in the PCRE -pattern syntax portion -of the PHP reference manual.

        -
        - -
        -
        -$cfg['Servers'][$i]['verbose']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Only useful when using phpMyAdmin with multiple server entries. If -set, this string will be displayed instead of the hostname in the -pull-down menu on the main page. This can be useful if you want to -show only certain databases on your system, for example. For HTTP -auth, all non-US-ASCII characters will be stripped.

        -
        - -
        -
        -$cfg['Servers'][$i]['extension']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'mysqli'

        -
        -
        -
        -

        Deprecated since version 4.2.0: This setting was removed. The mysql extension will only be used when -the mysqli extension is not available. As of 5.0.0, only the -mysqli extension can be used.

        -
        -

        The PHP MySQL extension to use (mysql or mysqli).

        -

        It is recommended to use mysqli in all installations.

        -
        - -
        -
        -$cfg['Servers'][$i]['pmadb']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        The name of the database containing the phpMyAdmin configuration -storage.

        -

        See the phpMyAdmin configuration storage section in this document to see the benefits of -this feature, and for a quick way of creating this database and the needed -tables.

        -

        If you are the only user of this phpMyAdmin installation, you can use your -current database to store those special tables; in this case, just put your -current database name in $cfg['Servers'][$i]['pmadb']. For a -multi-user installation, set this parameter to the name of your central -database containing the phpMyAdmin configuration storage.

        -
        - -
        -
        -$cfg['Servers'][$i]['bookmarktable']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 2.2.0.

        -
        -

        Since release 2.2.0 phpMyAdmin allows users to bookmark queries. This -can be useful for queries you often run. To allow the usage of this -functionality:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['relation']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 2.2.4.

        -
        -

        Since release 2.2.4 you can describe, in a special ‘relation’ table, -which column is a key in another table (a foreign key). phpMyAdmin -currently uses this to:

        - -

        The keys can be numeric or character.

        -

        To allow the usage of this functionality:

        -
          -
        • set up $cfg['Servers'][$i]['pmadb'] and the phpMyAdmin configuration storage

        • -
        • put the relation table name in $cfg['Servers'][$i]['relation']

        • -
        • now as normal user open phpMyAdmin and for each one of your tables -where you want to use this feature, click Structure/Relation view/ -and choose foreign columns.

        • -
        -

        This feature can be disabled by setting the configuration to false.

        -
        -

        Note

        -

        In the current version, master_db must be the same as foreign_db. -Those columns have been put in future development of the cross-db -relations.

        -
        -
        - -
        -
        -$cfg['Servers'][$i]['table_info']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 2.3.0.

        -
        -

        Since release 2.3.0 you can describe, in a special ‘table_info’ -table, which column is to be displayed as a tool-tip when moving the -cursor over the corresponding key. This configuration variable will -hold the name of this special table. To allow the usage of this -functionality:

        - -

        This feature can be disabled by setting the configuration to false.

        - -
        - -
        -
        -$cfg['Servers'][$i]['table_coords']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -

        The designer feature can save your page layout; by pressing the “Save page” or “Save page as” -button in the expanding designer menu, you can customize the layout and have it loaded the next -time you use the designer. That layout is stored in this table. Furthermore, this table is also -required for using the PDF relation export feature, see -$cfg['Servers'][$i]['pdf_pages'] for additional details.

        -
        - -
        -
        -$cfg['Servers'][$i]['pdf_pages']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 2.3.0.

        -
        -

        Since release 2.3.0 you can have phpMyAdmin create PDF pages -showing the relations between your tables. Further, the designer interface -permits visually managing the relations. To do this it needs two tables -“pdf_pages” (storing information about the available PDF pages) -and “table_coords” (storing coordinates where each table will be placed on -a PDF schema output). You must be using the “relation” feature.

        -

        To allow the usage of this functionality:

        - -

        This feature can be disabled by setting either of the configurations to false.

        - -
        - -
        -
        -$cfg['Servers'][$i]['designer_coords']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 2.10.0: Since release 2.10.0 a Designer interface is available; it permits to -visually manage the relations.

        -
        -
        -

        Deprecated since version 4.3.0: This setting was removed and the Designer table positioning data is now stored into $cfg['Servers'][$i]['table_coords'].

        -
        -
        -

        Note

        -

        You can now delete the table pma__designer_coords from your phpMyAdmin configuration storage database and remove $cfg['Servers'][$i]['designer_coords'] from your configuration file.

        -
        -
        - -
        -
        -$cfg['Servers'][$i]['column_info']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 2.3.0.

        -
        -

        This part requires a content update! Since release 2.3.0 you can -store comments to describe each column for each table. These will then -be shown on the “printview”.

        -

        Starting with release 2.5.0, comments are consequently used on the table -property pages and table browse view, showing up as tool-tips above the -column name (properties page) or embedded within the header of table in -browse view. They can also be shown in a table dump. Please see the -relevant configuration directives later on.

        -

        Also new in release 2.5.0 is a MIME- transformation system which is also -based on the following table structure. See Transformations for -further information. To use the MIME- transformation system, your -column_info table has to have the three new columns ‘mimetype’, -‘transformation’, ‘transformation_options’.

        -

        Starting with release 4.3.0, a new input-oriented transformation system -has been introduced. Also, backward compatibility code used in the old -transformations system was removed. As a result, an update to column_info -table is necessary for previous transformations and the new input-oriented -transformation system to work. phpMyAdmin will upgrade it automatically -for you by analyzing your current column_info table structure. -However, if something goes wrong with the auto-upgrade then you can -use the SQL script found in ./sql/upgrade_column_info_4_3_0+.sql -to upgrade it manually.

        -

        To allow the usage of this functionality:

        -
          -
        • set up $cfg['Servers'][$i]['pmadb'] and the phpMyAdmin configuration storage

        • -
        • put the table name in $cfg['Servers'][$i]['column_info'] (e.g. -pma__column_info)

        • -
        • to update your PRE-2.5.0 Column_comments table use this: and -remember that the Variable in config.inc.php has been renamed from -$cfg['Servers'][$i]['column_comments'] to -$cfg['Servers'][$i]['column_info']

          -
          ALTER TABLE `pma__column_comments`
          -ADD `mimetype` VARCHAR( 255 ) NOT NULL,
          -ADD `transformation` VARCHAR( 255 ) NOT NULL,
          -ADD `transformation_options` VARCHAR( 255 ) NOT NULL;
          -
          -
          -
        • -
        • to update your PRE-4.3.0 Column_info table manually use this -./sql/upgrade_column_info_4_3_0+.sql SQL script.

        • -
        -

        This feature can be disabled by setting the configuration to false.

        -
        -

        Note

        -

        For auto-upgrade functionality to work, your -$cfg['Servers'][$i]['controluser'] must have ALTER privilege on -phpmyadmin database. See the MySQL documentation for GRANT on how to -GRANT privileges to a user.

        -
        -
        - -
        -
        -$cfg['Servers'][$i]['history']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 2.5.0.

        -
        -

        Since release 2.5.0 you can store your SQL history, which means all -queries you entered manually into the phpMyAdmin interface. If you don’t -want to use a table-based history, you can use the JavaScript-based -history.

        -

        Using that, all your history items are deleted when closing the window. -Using $cfg['QueryHistoryMax'] you can specify an amount of -history items you want to have on hold. On every login, this list gets cut -to the maximum amount.

        -

        The query history is only available if JavaScript is enabled in -your browser.

        -

        To allow the usage of this functionality:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['recent']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 3.5.0.

        -
        -

        Since release 3.5.0 you can show recently used tables in the -navigation panel. It helps you to jump across table directly, without -the need to select the database, and then select the table. Using -$cfg['NumRecentTables'] you can configure the maximum number -of recent tables shown. When you select a table from the list, it will jump to -the page specified in $cfg['NavigationTreeDefaultTabTable'].

        -

        Without configuring the storage, you can still access the recently used tables, -but it will disappear after you logout.

        -

        To allow the usage of this functionality persistently:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['favorite']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 4.2.0.

        -
        -

        Since release 4.2.0 you can show a list of selected tables in the -navigation panel. It helps you to jump to the table directly, without -the need to select the database, and then select the table. When you -select a table from the list, it will jump to the page specified in -$cfg['NavigationTreeDefaultTabTable'].

        -

        You can add tables to this list or remove tables from it in database -structure page by clicking on the star icons next to table names. Using -$cfg['NumFavoriteTables'] you can configure the maximum -number of favorite tables shown.

        -

        Without configuring the storage, you can still access the favorite tables, -but it will disappear after you logout.

        -

        To allow the usage of this functionality persistently:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['table_uiprefs']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 3.5.0.

        -
        -

        Since release 3.5.0 phpMyAdmin can be configured to remember several -things (sorted column $cfg['RememberSorting'], column order, -and column visibility from a database table) for browsing tables. Without -configuring the storage, these features still can be used, but the values will -disappear after you logout.

        -

        To allow the usage of these functionality persistently:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['users']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -

        The table used by phpMyAdmin to store user name information for associating with user groups. -See the next entry on $cfg['Servers'][$i]['usergroups'] for more details -and the suggested settings.

        -
        - -
        -
        -$cfg['Servers'][$i]['usergroups']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 4.1.0.

        -
        -

        Since release 4.1.0 you can create different user groups with menu items -attached to them. Users can be assigned to these groups and the logged in -user would only see menu items configured to the usergroup they are assigned to. -To do this it needs two tables “usergroups” (storing allowed menu items for each -user group) and “users” (storing users and their assignments to user groups).

        -

        To allow the usage of this functionality:

        - -

        This feature can be disabled by setting either of the configurations to false.

        - -
        - -
        -
        -$cfg['Servers'][$i]['navigationhiding']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 4.1.0.

        -
        -

        Since release 4.1.0 you can hide/show items in the navigation tree.

        -

        To allow the usage of this functionality:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['central_columns']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 4.3.0.

        -
        -

        Since release 4.3.0 you can have a central list of columns per database. -You can add/remove columns to the list as per your requirement. These columns -in the central list will be available to use while you create a new column for -a table or create a table itself. You can select a column from central list -while creating a new column, it will save you from writing the same column definition -over again or from writing different names for similar column.

        -

        To allow the usage of this functionality:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['designer_settings']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 4.5.0.

        -
        -

        Since release 4.5.0 your designer settings can be remembered. -Your choice regarding ‘Angular/Direct Links’, ‘Snap to Grid’, ‘Toggle Relation Lines’, -‘Small/Big All’, ‘Move Menu’ and ‘Pin Text’ can be remembered persistently.

        -

        To allow the usage of this functionality:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['savedsearches']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 4.2.0.

        -
        -

        Since release 4.2.0 you can save and load query-by-example searches from the Database > Query panel.

        -

        To allow the usage of this functionality:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['export_templates']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 4.5.0.

        -
        -

        Since release 4.5.0 you can save and load export templates.

        -

        To allow the usage of this functionality:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['tracking']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 3.3.x.

        -
        -

        Since release 3.3.x a tracking mechanism is available. It helps you to -track every SQL command which is -executed by phpMyAdmin. The mechanism supports logging of data -manipulation and data definition statements. After enabling it you can -create versions of tables.

        -

        The creation of a version has two effects:

        -
          -
        • phpMyAdmin saves a snapshot of the table, including structure and -indexes.

        • -
        • phpMyAdmin logs all commands which change the structure and/or data of -the table and links these commands with the version number.

        • -
        -

        Of course you can view the tracked changes. On the Tracking -page a complete report is available for every version. For the report you -can use filters, for example you can get a list of statements within a date -range. When you want to filter usernames you can enter * for all names or -you enter a list of names separated by ‘,’. In addition you can export the -(filtered) report to a file or to a temporary database.

        -

        To allow the usage of this functionality:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['tracking_version_auto_create']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Whether the tracking mechanism creates versions for tables and views -automatically.

        -

        If this is set to true and you create a table or view with

        -
          -
        • CREATE TABLE …

        • -
        • CREATE VIEW …

        • -
        -

        and no version exists for it, the mechanism will create a version for -you automatically.

        -
        - -
        -
        -$cfg['Servers'][$i]['tracking_default_statements']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'CREATE TABLE,ALTER TABLE,DROP TABLE,RENAME TABLE,CREATE INDEX,DROP INDEX,INSERT,UPDATE,DELETE,TRUNCATE,REPLACE,CREATE VIEW,ALTER VIEW,DROP VIEW,CREATE DATABASE,ALTER DATABASE,DROP DATABASE'

        -
        -
        -

        Defines the list of statements the auto-creation uses for new -versions.

        -
        - -
        -
        -$cfg['Servers'][$i]['tracking_add_drop_view']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether a DROP VIEW IF EXISTS statement will be added as first line to -the log when creating a view.

        -
        - -
        -
        -$cfg['Servers'][$i]['tracking_add_drop_table']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether a DROP TABLE IF EXISTS statement will be added as first line -to the log when creating a table.

        -
        - -
        -
        -$cfg['Servers'][$i]['tracking_add_drop_database']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether a DROP DATABASE IF EXISTS statement will be added as first -line to the log when creating a database.

        -
        - -
        -
        -$cfg['Servers'][$i]['userconfig']
        -
        -
        Type
        -

        string or false

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 3.4.x.

        -
        -

        Since release 3.4.x phpMyAdmin allows users to set most preferences by -themselves and store them in the database.

        -

        If you don’t allow for storing preferences in -$cfg['Servers'][$i]['pmadb'], users can still personalize -phpMyAdmin, but settings will be saved in browser’s local storage, or, it -is is unavailable, until the end of session.

        -

        To allow the usage of this functionality:

        - -

        This feature can be disabled by setting the configuration to false.

        -
        - -
        -
        -$cfg['Servers'][$i]['MaxTableUiprefs']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        100

        -
        -
        -

        Maximum number of rows saved in -$cfg['Servers'][$i]['table_uiprefs'] table.

        -

        When tables are dropped or renamed, -$cfg['Servers'][$i]['table_uiprefs'] may contain invalid data -(referring to tables which no longer exist). We only keep this number of newest -rows in $cfg['Servers'][$i]['table_uiprefs'] and automatically -delete older rows.

        -
        - -
        -
        -$cfg['Servers'][$i]['SessionTimeZone']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Sets the time zone used by phpMyAdmin. Leave blank to use the time zone of your -database server. Possible values are explained at -https://dev.mysql.com/doc/refman/8.0/en/time-zone-support.html

        -

        This is useful when your database server uses a time zone which is different from the -time zone you want to use in phpMyAdmin.

        -
        - -
        -
        -$cfg['Servers'][$i]['AllowRoot']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether to allow root access. This is just a shortcut for the -$cfg['Servers'][$i]['AllowDeny']['rules'] below.

        -
        - -
        -
        -$cfg['Servers'][$i]['AllowNoPassword']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Whether to allow logins without a password. The default value of -false for this parameter prevents unintended access to a MySQL -server with was left with an empty password for root or on which an -anonymous (blank) user is defined.

        -
        - -
        -
        -$cfg['Servers'][$i]['AllowDeny']['order']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        If your rule order is empty, then IP -authorization is disabled.

        -

        If your rule order is set to -'deny,allow' then the system applies all deny rules followed by -allow rules. Access is allowed by default. Any client which does not -match a Deny command or does match an Allow command will be allowed -access to the server.

        -

        If your rule order is set to 'allow,deny' -then the system applies all allow rules followed by deny rules. Access -is denied by default. Any client which does not match an Allow -directive or does match a Deny directive will be denied access to the -server.

        -

        If your rule order is set to 'explicit', authorization is -performed in a similar fashion to rule order ‘deny,allow’, with the -added restriction that your host/username combination must be -listed in the allow rules, and not listed in the deny rules. This -is the most secure means of using Allow/Deny rules, and was -available in Apache by specifying allow and deny rules without setting -any order.

        -

        Please also see $cfg['TrustedProxies'] for -detecting IP address behind proxies.

        -
        - -
        -
        -$cfg['Servers'][$i]['AllowDeny']['rules']
        -
        -
        Type
        -

        array of strings

        -
        -
        Default value
        -

        array()

        -
        -
        -

        The general format for the rules is as such:

        -
        <'allow' | 'deny'> <username> [from] <ipmask>
        -
        -
        -

        If you wish to match all users, it is possible to use a '%' as a -wildcard in the username field.

        -

        There are a few shortcuts you can -use in the ipmask field as well (please note that those containing -SERVER_ADDRESS might not be available on all webservers):

        -
        'all' -> 0.0.0.0/0
        -'localhost' -> 127.0.0.1/8
        -'localnetA' -> SERVER_ADDRESS/8
        -'localnetB' -> SERVER_ADDRESS/16
        -'localnetC' -> SERVER_ADDRESS/24
        -
        -
        -

        Having an empty rule list is equivalent to either using 'allow % -from all' if your rule order is set to 'deny,allow' or 'deny % -from all' if your rule order is set to 'allow,deny' or -'explicit'.

        -

        For the IP Address matching -system, the following work:

        -
          -
        • xxx.xxx.xxx.xxx (an exact IP Address)

        • -
        • xxx.xxx.xxx.[yyy-zzz] (an IP Address range)

        • -
        • xxx.xxx.xxx.xxx/nn (CIDR, Classless Inter-Domain Routing type IP addresses)

        • -
        -

        But the following does not work:

        -
          -
        • xxx.xxx.xxx.xx[yyy-zzz] (partial IP address range)

        • -
        -

        For IPv6 addresses, the following work:

        -
          -
        • xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx (an exact IPv6 address)

        • -
        • xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:[yyyy-zzzz] (an IPv6 address range)

        • -
        • xxxx:xxxx:xxxx:xxxx/nn (CIDR, Classless Inter-Domain Routing type IPv6 addresses)

        • -
        -

        But the following does not work:

        -
          -
        • xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xx[yyy-zzz] (partial IPv6 address range)

        • -
        -

        Examples:

        -
        $cfg['Servers'][$i]['AllowDeny']['order'] = 'allow,deny';
        -$cfg['Servers'][$i]['AllowDeny']['rules'] = ['allow bob from all'];
        -// Allow only 'bob' to connect from any host
        -
        -$cfg['Servers'][$i]['AllowDeny']['order'] = 'allow,deny';
        -$cfg['Servers'][$i]['AllowDeny']['rules'] = ['allow mary from 192.168.100.[50-100]'];
        -// Allow only 'mary' to connect from host 192.168.100.50 through 192.168.100.100
        -
        -$cfg['Servers'][$i]['AllowDeny']['order'] = 'allow,deny';
        -$cfg['Servers'][$i]['AllowDeny']['rules'] = ['allow % from 192.168.[5-6].10'];
        -// Allow any user to connect from host 192.168.5.10 or 192.168.6.10
        -
        -$cfg['Servers'][$i]['AllowDeny']['order'] = 'allow,deny';
        -$cfg['Servers'][$i]['AllowDeny']['rules'] = ['allow root from 192.168.5.50','allow % from 192.168.6.10'];
        -// Allow any user to connect from 192.168.6.10, and additionally allow root to connect from 192.168.5.50
        -
        -
        -
        - -
        -
        -$cfg['Servers'][$i]['DisableIS']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Disable using INFORMATION_SCHEMA to retrieve information (use -SHOW commands instead), because of speed issues when many -databases are present.

        -
        -

        Note

        -

        Enabling this option might give you a big performance boost on older -MySQL servers.

        -
        -
        - -
        -
        -$cfg['Servers'][$i]['SignonScript']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 3.5.0.

        -
        -

        Name of PHP script to be sourced and executed to obtain login -credentials. This is alternative approach to session based single -signon. The script has to provide a function called -get_login_credentials which returns list of username and -password, accepting single parameter of existing username (can be -empty). See examples/signon-script.php for an example:

        -
        <?php
        -/**
        - * Single signon for phpMyAdmin
        - *
        - * This is just example how to use script based single signon with
        - * phpMyAdmin, it is not intended to be perfect code and look, only
        - * shows how you can integrate this functionality in your application.
        - */
        -
        -declare(strict_types=1);
        -
        -// phpcs:disable Squiz.Functions.GlobalFunction
        -
        -/**
        - * This function returns username and password.
        - *
        - * It can optionally use configured username as parameter.
        - *
        - * @param string $user User name
        - *
        - * @return array
        - */
        -function get_login_credentials($user)
        -{
        -    /* Optionally we can use passed username */
        -    if (! empty($user)) {
        -        return [
        -            $user,
        -            'password',
        -        ];
        -    }
        -
        -    /* Here we would retrieve the credentials */
        -    return [
        -        'root',
        -        '',
        -    ];
        -}
        -
        -
        - -
        - -
        -
        -$cfg['Servers'][$i]['SignonSession']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Name of session which will be used for signon authentication method. -You should use something different than phpMyAdmin, because this -is session which phpMyAdmin uses internally. Takes effect only if -$cfg['Servers'][$i]['SignonScript'] is not configured.

        - -
        - -
        -
        -$cfg['Servers'][$i]['SignonCookieParams']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array()

        -
        -
        -
        -

        New in version 4.7.0.

        -
        -

        An associative array of session cookie parameters of other authentication system. -It is not needed if the other system doesn’t use session_set_cookie_params(). -Keys should include ‘lifetime’, ‘path’, ‘domain’, ‘secure’ or ‘httponly’. -Valid values are mentioned in session_get_cookie_params, they should be set to same values as the -other application uses. Takes effect only if -$cfg['Servers'][$i]['SignonScript'] is not configured.

        - -
        - -
        -
        -$cfg['Servers'][$i]['SignonURL']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        URL where user will be redirected -to log in for signon authentication method. Should be absolute -including protocol.

        - -
        - -
        -
        -$cfg['Servers'][$i]['LogoutURL']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        URL where user will be redirected -after logout (doesn’t affect config authentication method). Should be -absolute including protocol.

        -
        - -
        -
        -$cfg['Servers'][$i]['hide_connection_errors']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -
        -

        New in version 4.9.8.

        -
        -

        Whether to show or hide detailed MySQL/MariaDB connection errors on the login page.

        -
        -

        Note

        -

        This error message can contain the target database server hostname or IP address, -which may reveal information about your network to an attacker.

        -
        -
        - -
        -
        -

        Generic settings

        -
        -
        -$cfg['DisableShortcutKeys']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        You can disable phpMyAdmin shortcut keys by setting $cfg['DisableShortcutKeys'] to false.

        -
        - -
        -
        -$cfg['ServerDefault']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        1

        -
        -
        -

        If you have more than one server configured, you can set -$cfg['ServerDefault'] to any one of them to autoconnect to that -server when phpMyAdmin is started, or set it to 0 to be given a list -of servers without logging in.

        -

        If you have only one server configured, -$cfg['ServerDefault'] MUST be set to that server.

        -
        - -
        -
        -$cfg['VersionCheck']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Enables check for latest versions using JavaScript on the main phpMyAdmin -page or by directly accessing index.php?route=/version-check.

        -
        -

        Note

        -

        This setting can be adjusted by your vendor.

        -
        -
        - -
        -
        -$cfg['ProxyUrl']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        The url of the proxy to be used when phpmyadmin needs to access the outside -internet such as when retrieving the latest version info or submitting error -reports. You need this if the server where phpMyAdmin is installed does not -have direct access to the internet. -The format is: “hostname:portnumber”

        -
        - -
        -
        -$cfg['ProxyUser']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        The username for authenticating with the proxy. By default, no -authentication is performed. If a username is supplied, Basic -Authentication will be performed. No other types of authentication -are currently supported.

        -
        - -
        -
        -$cfg['ProxyPass']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        The password for authenticating with the proxy.

        -
        - -
        -
        -$cfg['MaxDbList']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        100

        -
        -
        -

        The maximum number of database names to be displayed in the main panel’s -database list.

        -
        - -
        -
        -$cfg['MaxTableList']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        250

        -
        -
        -

        The maximum number of table names to be displayed in the main panel’s -list (except on the Export page).

        -
        - -
        -
        -$cfg['ShowHint']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether or not to show hints (for example, hints when hovering over -table headers).

        -
        - -
        -
        -$cfg['MaxCharactersInDisplayedSQL']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        1000

        -
        -
        -

        The maximum number of characters when a SQL query is displayed. The -default limit of 1000 should be correct to avoid the display of tons of -hexadecimal codes that represent BLOBs, but some users have real -SQL queries that are longer than 1000 characters. Also, if a -query’s length exceeds this limit, this query is not saved in the history.

        -
        - -
        -
        -$cfg['PersistentConnections']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Whether persistent connections should be used or not.

        -
        - - -
        -
        -$cfg['ForceSSL']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -
        -

        Deprecated since version 4.6.0: This setting is no longer available since phpMyAdmin 4.6.0. Please -adjust your webserver instead.

        -
        -

        Whether to force using https while accessing phpMyAdmin. In a reverse -proxy setup, setting this to true is not supported.

        -
        -

        Note

        -

        In some setups (like separate SSL proxy or load balancer) you might -have to set $cfg['PmaAbsoluteUri'] for correct -redirection.

        -
        -
        - -
        -
        -$cfg['MysqlSslWarningSafeHosts']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        ['127.0.0.1', 'localhost']

        -
        -
        -

        This search is case-sensitive and will match the exact string only. -If your setup does not use SSL but is safe because you are using a -local connection or private network, you can add your hostname or IP to the list. -You can also remove the default entries to only include yours.

        -

        This check uses the value of $cfg['Servers'][$i]['host'].

        -
        -

        New in version 5.1.0.

        -
        -

        Example configuration

        -
        $cfg['MysqlSslWarningSafeHosts'] = ['127.0.0.1', 'localhost', 'mariadb.local'];
        -
        -
        -
        - -
        -
        -$cfg['ExecTimeLimit']
        -
        -
        Type
        -

        integer [number of seconds]

        -
        -
        Default value
        -

        300

        -
        -
        -

        Set the number of seconds a script is allowed to run. If seconds is -set to zero, no time limit is imposed. This setting is used while -importing/exporting dump files but has -no effect when PHP is running in safe mode.

        -
        - -
        -
        -$cfg['SessionSavePath']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Path for storing session data (session_save_path PHP parameter).

        -
        -

        Warning

        -

        This folder should not be publicly accessible through the webserver, -otherwise you risk leaking private data from your session.

        -
        -
        - -
        -
        -$cfg['MemoryLimit']
        -
        -
        Type
        -

        string [number of bytes]

        -
        -
        Default value
        -

        '-1'

        -
        -
        -

        Set the number of bytes a script is allowed to allocate. If set to -'-1', no limit is imposed. If set to '0', no change of the -memory limit is attempted and the php.ini memory_limit is -used.

        -

        This setting is used while importing/exporting dump files -so you definitely don’t want to put here a too low -value. It has no effect when PHP is running in safe mode.

        -

        You can also use any string as in php.ini, eg. ‘16M’. Ensure you -don’t omit the suffix (16 means 16 bytes!)

        -
        - -
        -
        -$cfg['SkipLockedTables']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Mark used tables and make it possible to show databases with locked -tables (since MySQL 3.23.30).

        -
        - -
        -
        -$cfg['ShowSQL']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether SQL queries -generated by phpMyAdmin should be displayed or not.

        -
        - -
        -
        -$cfg['RetainQueryBox']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Defines whether the SQL query box -should be kept displayed after its submission.

        -
        - -
        -
        -$cfg['CodemirrorEnable']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether to use a Javascript code editor for SQL query boxes. -CodeMirror provides syntax highlighting and line numbers. However, -middle-clicking for pasting the clipboard contents in some Linux -distributions (such as Ubuntu) is not supported by all browsers.

        -
        - -
        -
        -$cfg['DefaultForeignKeyChecks']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'default'

        -
        -
        -

        Default value of the checkbox for foreign key checks, to disable/enable -foreign key checks for certain queries. The possible values are 'default', -'enable' or 'disable'. If set to 'default', the value of the -MySQL variable FOREIGN_KEY_CHECKS is used.

        -
        - -
        -
        -$cfg['AllowUserDropDatabase']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -
        -

        Warning

        -

        This is not a security measure as there will be always ways to -circumvent this. If you want to prohibit users from dropping databases, -revoke their corresponding DROP privilege.

        -
        -

        Defines whether normal users (non-administrator) are allowed to delete -their own database or not. If set as false, the link Drop -Database will not be shown, and even a DROP DATABASE mydatabase will -be rejected. Quite practical for ISP ‘s with many customers.

        -

        This limitation of SQL queries is not as strict as when using MySQL -privileges. This is due to nature of SQL queries which might be -quite complicated. So this choice should be viewed as help to avoid -accidental dropping rather than strict privilege limitation.

        -
        - -
        -
        -$cfg['Confirm']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether a warning (“Are your really sure…”) should be displayed when -you’re about to lose data.

        -
        - -
        -
        -$cfg['UseDbSearch']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Define whether the “search string inside database” is enabled or not.

        -
        - -
        -
        -$cfg['IgnoreMultiSubmitErrors']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Define whether phpMyAdmin will continue executing a multi-query -statement if one of the queries fails. Default is to abort execution.

        -
        - -
        -
        -$cfg['enable_drag_drop_import']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether or not the drag and drop import feature is enabled. -When enabled, a user can drag a file in to their browser and phpMyAdmin will -attempt to import the file.

        -
        - -
        -
        -$cfg['URLQueryEncryption']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -
        -

        New in version 4.9.8.

        -
        -

        Define whether phpMyAdmin will encrypt sensitive data (like database name -and table name) from the URL query string. Default is to not encrypt the URL -query string.

        -
        - -
        -
        -$cfg['URLQueryEncryptionSecretKey']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -
        -

        New in version 4.9.8.

        -
        -

        A secret key used to encrypt/decrypt the URL query string. -Should be 32 bytes long.

        -
        - -
        - - -
        -

        Main panel

        -
        -
        -$cfg['ShowStats']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether or not to display space usage and statistics about -databases and tables. Note that statistics requires at least MySQL -3.23.3 and that, at this date, MySQL doesn’t return such information -for Berkeley DB tables.

        -
        - -
        -
        -$cfg['ShowServerInfo']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether to display detailed server information on main page. -You can additionally hide more information by using -$cfg['Servers'][$i]['verbose'].

        -
        - -
        -
        -$cfg['ShowPhpInfo']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Defines whether to display the PHP information or not at -the starting main (right) frame.

        -

        Please note that to block the usage of phpinfo() in scripts, you have to -put this in your php.ini:

        -
        disable_functions = phpinfo()
        -
        -
        -
        -

        Warning

        -

        Enabling phpinfo page will leak quite a lot of information about server -setup. Is it not recommended to enable this on shared installations.

        -

        This might also make easier some remote attacks on your installations, -so enable this only when needed.

        -
        -
        - -
        -
        -$cfg['ShowChgPassword']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether to display the Change password link or not at -the starting main (right) frame. This setting does not check MySQL commands -entered directly.

        -

        Please note that enabling the Change password link has no effect -with config authentication mode: because of the hard coded password value -in the configuration file, end users can’t be allowed to change their -passwords.

        -
        - -
        -
        -$cfg['ShowCreateDb']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether to display the form for creating database or not at the -starting main (right) frame. This setting does not check MySQL commands -entered directly.

        -
        - -
        -
        -$cfg['ShowGitRevision']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether to display information about the current Git revision (if -applicable) on the main panel.

        -
        - -
        -
        -$cfg['MysqlMinVersion']
        -
        -
        Type
        -

        array

        -
        -
        -

        Defines the minimum supported MySQL version. The default is chosen -by the phpMyAdmin team; however this directive was asked by a developer -of the Plesk control panel to ease integration with older MySQL servers -(where most of the phpMyAdmin features work).

        -
        - -
        -
        -

        Database structure

        -
        -
        -$cfg['ShowDbStructureCreation']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Defines whether the database structure page (tables list) has a -“Creation” column that displays when each table was created.

        -
        - -
        -
        -$cfg['ShowDbStructureLastUpdate']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Defines whether the database structure page (tables list) has a “Last -update” column that displays when each table was last updated.

        -
        - -
        -
        -$cfg['ShowDbStructureLastCheck']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Defines whether the database structure page (tables list) has a “Last -check” column that displays when each table was last checked.

        -
        - -
        -
        -$cfg['HideStructureActions']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether the table structure actions are hidden under a “More” -drop-down.

        -
        - -
        -
        -$cfg['ShowColumnComments']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether to show column comments as a column in the table structure view.

        -
        - -
        -
        -

        Browse mode

        -
        -
        -$cfg['TableNavigationLinksMode']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'icons'

        -
        -
        -

        Defines whether the table navigation links contain 'icons', 'text' -or 'both'.

        -
        - -
        -
        -$cfg['ActionLinksMode']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'both'

        -
        -
        -

        If set to icons, will display icons instead of text for db and table -properties links (like Browse, Select, -Insert, …). Can be set to 'both' -if you want icons AND text. When set to text, will only show text.

        -
        - -
        -
        -$cfg['RowActionType']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'both'

        -
        -
        -

        Whether to display icons or text or both icons and text in table row action -segment. Value can be either of 'icons', 'text' or 'both'.

        -
        - -
        -
        -$cfg['ShowAll']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Defines whether a user should be displayed a “Show all” button in browse -mode or not in all cases. By default it is shown only on small tables (less -than 500 rows) to avoid performance issues while getting too many rows.

        -
        - -
        -
        -$cfg['MaxRows']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        25

        -
        -
        -

        Number of rows displayed when browsing a result set and no LIMIT -clause is used. If the result set contains more rows, “Previous” and -“Next” links will be shown. Possible values: 25,50,100,250,500.

        -
        - -
        -
        -$cfg['Order']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'SMART'

        -
        -
        -

        Defines whether columns are displayed in ascending (ASC) order, in -descending (DESC) order or in a “smart” (SMART) order - I.E. -descending order for columns of type TIME, DATE, DATETIME and -TIMESTAMP, ascending order else- by default.

        -
        -

        Changed in version 3.4.0: Since phpMyAdmin 3.4.0 the default value is 'SMART'.

        -
        -
        - -
        -
        -$cfg['GridEditing']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'double-click'

        -
        -
        -

        Defines which action (double-click or click) triggers grid -editing. Can be deactivated with the disabled value.

        -
        - -
        -
        -$cfg['RelationalDisplay']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'K'

        -
        -
        -

        Defines the initial behavior for Options > Relational. K, which -is the default, displays the key while D shows the display column.

        -
        - -
        -
        -$cfg['SaveCellsAtOnce']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Defines whether or not to save all edited cells at once for grid -editing.

        -
        - -
        -
        -

        Editing mode

        -
        -
        -$cfg['ProtectBinary']
        -
        -
        Type
        -

        boolean or string

        -
        -
        Default value
        -

        'blob'

        -
        -
        -

        Defines whether BLOB or BINARY columns are protected from -editing when browsing a table’s content. Valid values are:

        -
          -
        • false to allow editing of all columns;

        • -
        • 'blob' to allow editing of all columns except BLOBS;

        • -
        • 'noblob' to disallow editing of all columns except BLOBS (the -opposite of 'blob');

        • -
        • 'all' to disallow editing of all BINARY or BLOB columns.

        • -
        -
        - -
        -
        -$cfg['ShowFunctionFields']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether or not MySQL functions fields should be initially -displayed in edit/insert mode. Since version 2.10, the user can toggle -this setting from the interface.

        -
        - -
        -
        -$cfg['ShowFieldTypesInDataEditView']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether or not type fields should be initially displayed in -edit/insert mode. The user can toggle this setting from the interface.

        -
        - -
        -
        -$cfg['InsertRows']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        2

        -
        -
        -

        Defines the default number of rows to be entered from the Insert page. -Users can manually change this from the bottom of that page to add or remove -blank rows.

        -
        - -
        -
        -$cfg['ForeignKeyMaxLimit']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        100

        -
        -
        -

        If there are fewer items than this in the set of foreign keys, then a -drop-down box of foreign keys is presented, in the style described by -the $cfg['ForeignKeyDropdownOrder'] setting.

        -
        - -
        -
        -$cfg['ForeignKeyDropdownOrder']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(‘content-id’, ‘id-content’)

        -
        -
        -

        For the foreign key drop-down fields, there are several methods of -display, offering both the key and value data. The contents of the -array should be one or both of the following strings: content-id, -id-content.

        -
        - -
        -
        -

        Export and import settings

        -
        -
        -$cfg['ZipDump']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -
        - -
        -
        -$cfg['GZipDump']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -
        - -
        -
        -$cfg['BZipDump']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether to allow the use of zip/GZip/BZip2 compression when -creating a dump file

        -
        - -
        -
        -$cfg['CompressOnFly']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether to allow on the fly compression for GZip/BZip2 -compressed exports. This doesn’t affect smaller dumps and allows users -to create larger dumps that won’t otherwise fit in memory due to php -memory limit. Produced files contain more GZip/BZip2 headers, but all -normal programs handle this correctly.

        -
        - -
        -
        -$cfg['Export']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(…)

        -
        -
        -

        In this array are defined default parameters for export, names of -items are similar to texts seen on export page, so you can easily -identify what they mean.

        -
        - -
        -
        -$cfg['Export']['format']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'sql'

        -
        -
        -

        Default export format.

        -
        - -
        -
        -$cfg['Export']['method']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'quick'

        -
        -
        -

        Defines how the export form is displayed when it loads. Valid values -are:

        -
          -
        • quick to display the minimum number of options to configure

        • -
        • custom to display every available option to configure

        • -
        • custom-no-form same as custom but does not display the option -of using quick export

        • -
        -
        - -
        -
        -$cfg['Export']['charset']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Defines charset for generated export. By default no charset conversion is -done assuming UTF-8.

        -
        - -
        -
        -$cfg['Export']['file_template_table']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        '@TABLE@'

        -
        -
        -

        Default filename template for table exports.

        - -
        - -
        -
        -$cfg['Export']['file_template_database']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        '@DATABASE@'

        -
        -
        -

        Default filename template for database exports.

        - -
        - -
        -
        -$cfg['Export']['file_template_server']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        '@SERVER@'

        -
        -
        -

        Default filename template for server exports.

        - -
        - -
        -
        -$cfg['Export']['remove_definer_from_definitions']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Remove DEFINER clause from the event, view and routine definitions.

        -
        -

        New in version 5.2.0.

        -
        -
        - -
        -
        -$cfg['Import']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(…)

        -
        -
        -

        In this array are defined default parameters for import, names of -items are similar to texts seen on import page, so you can easily -identify what they mean.

        -
        - -
        -
        -$cfg['Import']['charset']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Defines charset for import. By default no charset conversion is done -assuming UTF-8.

        -
        - -
        -
        -

        Tabs display settings

        -
        -
        -$cfg['TabsMode']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'both'

        -
        -
        -

        Defines whether the menu tabs contain 'icons', 'text' or 'both'.

        -
        - -
        -
        -$cfg['PropertiesNumColumns']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        1

        -
        -
        -

        How many columns will be utilized to display the tables on the database -property view? When setting this to a value larger than 1, the type of the -database will be omitted for more display space.

        -
        - -
        -
        -$cfg['DefaultTabServer']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'welcome'

        -
        -
        -

        Defines the tab displayed by default on server view. The possible values -are the localized equivalent of:

        -
          -
        • welcome (recommended for multi-user setups)

        • -
        • databases,

        • -
        • status

        • -
        • variables

        • -
        • privileges

        • -
        -
        - -
        -
        -$cfg['DefaultTabDatabase']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'structure'

        -
        -
        -

        Defines the tab displayed by default on database view. The possible values -are the localized equivalent of:

        -
          -
        • structure

        • -
        • sql

        • -
        • search

        • -
        • operations

        • -
        -
        - -
        -
        -$cfg['DefaultTabTable']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'browse'

        -
        -
        -

        Defines the tab displayed by default on table view. The possible values -are the localized equivalent of:

        -
          -
        • structure

        • -
        • sql

        • -
        • search

        • -
        • insert

        • -
        • browse

        • -
        -
        - -
        -
        -

        PDF Options

        -
        -
        -$cfg['PDFPageSizes']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array('A3', 'A4', 'A5', 'letter', 'legal')

        -
        -
        -

        Array of possible paper sizes for creating PDF pages.

        -

        You should never need to change this.

        -
        - -
        -
        -$cfg['PDFDefaultPageSize']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'A4'

        -
        -
        -

        Default page size to use when creating PDF pages. Valid values are any -listed in $cfg['PDFPageSizes'].

        -
        - -
        -
        -

        Languages

        -
        -
        -$cfg['DefaultLang']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'en'

        -
        -
        -

        Defines the default language to use, if not browser-defined or user- -defined. The corresponding language file needs to be in -locale/code/LC_MESSAGES/phpmyadmin.mo.

        -
        - -
        -
        -$cfg['DefaultConnectionCollation']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'utf8mb4_general_ci'

        -
        -
        -

        Defines the default connection collation to use, if not user-defined. -See the MySQL documentation for charsets -for list of possible values.

        -
        - -
        -
        -$cfg['Lang']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        not set

        -
        -
        -

        Force language to use. The corresponding language file needs to be in -locale/code/LC_MESSAGES/phpmyadmin.mo.

        -
        - -
        -
        -$cfg['FilterLanguages']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Limit list of available languages to those matching the given regular -expression. For example if you want only Czech and English, you should -set filter to '^(cs|en)'.

        -
        - -
        -
        -$cfg['RecodingEngine']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'auto'

        -
        -
        -

        You can select here which functions will be used for character set -conversion. Possible values are:

        -
          -
        • auto - automatically use available one (first is tested iconv, then -recode)

        • -
        • iconv - use iconv or libiconv functions

        • -
        • recode - use recode_string function

        • -
        • mb - use mbstring extension

        • -
        • none - disable encoding conversion

        • -
        -

        Enabled charset conversion activates a pull-down menu in the Export -and Import pages, to choose the character set when exporting a file. -The default value in this menu comes from -$cfg['Export']['charset'] and $cfg['Import']['charset'].

        -
        - -
        -
        -$cfg['IconvExtraParams']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        '//TRANSLIT'

        -
        -
        -

        Specify some parameters for iconv used in charset conversion. See -iconv documentation for details. By default -//TRANSLIT is used, so that invalid characters will be -transliterated.

        -
        - -
        -
        -$cfg['AvailableCharsets']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(…)

        -
        -
        -

        Available character sets for MySQL conversion. You can add your own -(any of supported by recode/iconv) or remove these which you don’t -use. Character sets will be shown in same order as here listed, so if -you frequently use some of these move them to the top.

        -
        - -
        -
        -

        Web server settings

        -
        -
        -$cfg['OBGzip']
        -
        -
        Type
        -

        string/boolean

        -
        -
        Default value
        -

        'auto'

        -
        -
        -

        Defines whether to use GZip output buffering for increased speed in -HTTP transfers. Set to -true/false for enabling/disabling. When set to ‘auto’ (string), -phpMyAdmin tries to enable output buffering and will automatically -disable it if your browser has some problems with buffering. IE6 with -a certain patch is known to cause data corruption when having enabled -buffering.

        -
        - -
        -
        -$cfg['TrustedProxies']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array()

        -
        -
        -

        Lists proxies and HTTP headers which are trusted for -$cfg['Servers'][$i]['AllowDeny']['order']. This list is by -default empty, you need to fill in some trusted proxy servers if you -want to use rules for IP addresses behind proxy.

        -

        The following example specifies that phpMyAdmin should trust a -HTTP_X_FORWARDED_FOR (X-Forwarded-For) header coming from the proxy -1.2.3.4:

        -
        $cfg['TrustedProxies'] = ['1.2.3.4' => 'HTTP_X_FORWARDED_FOR'];
        -
        -
        -

        The $cfg['Servers'][$i]['AllowDeny']['rules'] directive uses the -client’s IP address as usual.

        -
        - -
        -
        -$cfg['GD2Available']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'auto'

        -
        -
        -

        Specifies whether GD >= 2 is available. If yes it can be used for MIME -transformations. Possible values are:

        -
          -
        • auto - automatically detect

        • -
        • yes - GD 2 functions can be used

        • -
        • no - GD 2 function cannot be used

        • -
        -
        - -
        -
        -$cfg['CheckConfigurationPermissions']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        We normally check the permissions on the configuration file to ensure -it’s not world writable. However, phpMyAdmin could be installed on a -NTFS filesystem mounted on a non-Windows server, in which case the -permissions seems wrong but in fact cannot be detected. In this case a -sysadmin would set this parameter to false.

        -
        - -
        -
        -$cfg['LinkLengthLimit']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        1000

        -
        -
        -

        Limit for length of URL in links. When length would be above this -limit, it is replaced by form with button. This is required as some web -servers (IIS) have problems with long URL .

        -
        - -
        -
        -$cfg['CSPAllow']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Additional string to include in allowed script and image sources in Content -Security Policy header.

        -

        This can be useful when you want to include some external JavaScript files -in config.footer.inc.php or config.header.inc.php, which -would be normally not allowed by Content Security Policy.

        -

        To allow some sites, just list them within the string:

        -
        $cfg['CSPAllow'] = 'example.com example.net';
        -
        -
        -
        -

        New in version 4.0.4.

        -
        -
        - -
        -
        -$cfg['DisableMultiTableMaintenance']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        In the database Structure page, it’s possible to mark some tables then -choose an operation like optimizing for many tables. This can slow -down a server; therefore, setting this to true prevents this kind -of multiple maintenance operation.

        -
        - -
        -
        -

        Theme settings

        -
        -

        Please directly modify themes/themename/scss/_variables.scss, although -your changes will be overwritten with the next update.

        -
        -
        -
        -

        Design customization

        -
        -
        -$cfg['NavigationTreePointerEnable']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        When set to true, hovering over an item in the navigation panel causes that item to be marked -(the background is highlighted).

        -
        - -
        -
        -$cfg['BrowsePointerEnable']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        When set to true, hovering over a row in the Browse page causes that row to be marked (the background -is highlighted).

        -
        - -
        -
        -$cfg['BrowseMarkerEnable']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        When set to true, a data row is marked (the background is highlighted) when the row is selected -with the checkbox.

        -
        - -
        -
        -$cfg['LimitChars']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        50

        -
        -
        -

        Maximum number of characters shown in any non-numeric field on browse -view. Can be turned off by a toggle button on the browse page.

        -
        - -
        - -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'left'

        -
        -
        -

        Defines the place where table row links (Edit, Copy, Delete) would be -put when tables contents are displayed (you may have them displayed at -the left side, right side, both sides or nowhere).

        -
        - -
        -
        -$cfg['RowActionLinksWithoutUnique']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Defines whether to show row links (Edit, Copy, Delete) and checkboxes -for multiple row operations even when the selection does not have a unique key. -Using row actions in the absence of a unique key may result in different/more -rows being affected since there is no guaranteed way to select the exact row(s).

        -
        - -
        -
        -$cfg['RememberSorting']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        If enabled, remember the sorting of each table when browsing them.

        -
        - -
        -
        -$cfg['TablePrimaryKeyOrder']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'NONE'

        -
        -
        -

        This defines the default sort order for the tables, having a primary key, -when there is no sort order defines externally. -Acceptable values : [‘NONE’, ‘ASC’, ‘DESC’]

        -
        - -
        -
        -$cfg['ShowBrowseComments']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -
        - -
        -
        -$cfg['ShowPropertyComments']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        By setting the corresponding variable to true you can enable the -display of column comments in Browse or Property display. In browse -mode, the comments are shown inside the header. In property mode, -comments are displayed using a CSS-formatted dashed-line below the -name of the column. The comment is shown as a tool-tip for that -column.

        -
        - -
        -
        -$cfg['FirstDayOfCalendar']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        0

        -
        -
        -

        This will define the first day of week in the calendar. The number -can be set from 0 to 6, which represents the seven days of the week, -Sunday to Saturday respectively. This value can also be configured by the user -in Settings -> Features -> General -> First day of calendar field.

        -
        - -
        -
        -

        Text fields

        -
        -
        -$cfg['CharEditing']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'input'

        -
        -
        -

        Defines which type of editing controls should be used for CHAR and -VARCHAR columns. Applies to data editing and also to the default values -in structure editing. Possible values are:

        -
          -
        • input - this allows to limit size of text to size of columns in MySQL, -but has problems with newlines in columns

        • -
        • textarea - no problems with newlines in columns, but also no length -limitations

        • -
        -
        - -
        -
        -$cfg['MinSizeForInputField']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        4

        -
        -
        -

        Defines the minimum size for input fields generated for CHAR and -VARCHAR columns.

        -
        - -
        -
        -$cfg['MaxSizeForInputField']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        60

        -
        -
        -

        Defines the maximum size for input fields generated for CHAR and -VARCHAR columns.

        -
        - -
        -
        -$cfg['TextareaCols']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        40

        -
        -
        -
        - -
        -
        -$cfg['TextareaRows']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        15

        -
        -
        -
        - -
        -
        -$cfg['CharTextareaCols']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        40

        -
        -
        -
        - -
        -
        -$cfg['CharTextareaRows']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        7

        -
        -
        -

        Number of columns and rows for the textareas. This value will be -emphasized (*2) for SQL query -textareas and (*1.25) for SQL -textareas inside the query window.

        -

        The Char* values are used for CHAR -and VARCHAR editing (if configured via $cfg['CharEditing']).

        -
        -

        Changed in version 5.0.0: The default value was changed from 2 to 7.

        -
        -
        - -
        -
        -$cfg['LongtextDoubleTextarea']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Defines whether textarea for LONGTEXT columns should have double size.

        -
        - -
        -
        -$cfg['TextareaAutoSelect']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Defines if the whole textarea of the query box will be selected on -click.

        -
        - -
        -
        -$cfg['EnableAutocompleteForTablesAndColumns']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether to enable autocomplete for table and column names in any -SQL query box.

        -
        - -
        -
        -

        SQL query box settings

        -
        -
        -$cfg['SQLQuery']['Edit']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether to display an edit link to change a query in any SQL Query -box.

        -
        - -
        -
        -$cfg['SQLQuery']['Explain']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether to display a link to explain a SELECT query in any SQL Query -box.

        -
        - -
        -
        -$cfg['SQLQuery']['ShowAsPHP']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether to display a link to wrap a query in PHP code in any SQL Query -box.

        -
        - -
        -
        -$cfg['SQLQuery']['Refresh']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Whether to display a link to refresh a query in any SQL Query box.

        -
        - -
        -
        -

        Web server upload/save/import directories

        -

        If PHP is running in safe mode, all directories must be owned by the same user -as the owner of the phpMyAdmin scripts.

        -

        If the directory where phpMyAdmin is installed is subject to an -open_basedir restriction, you need to create a temporary directory in some -directory accessible by the PHP interpreter.

        -

        For security reasons, all directories should be outside the tree published by -webserver. If you cannot avoid having this directory published by webserver, -limit access to it either by web server configuration (for example using -.htaccess or web.config files) or place at least an empty index.html -file there, so that directory listing is not possible. However as long as the -directory is accessible by web server, an attacker can guess filenames to download -the files.

        -
        -
        -$cfg['UploadDir']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        The name of the directory where SQL files have been uploaded by -other means than phpMyAdmin (for example, FTP). Those files are available -under a drop-down box when you click the database or table name, then the -Import tab.

        -

        If -you want different directory for each user, %u will be replaced with -username.

        -

        Please note that the file names must have the suffix “.sql” -(or “.sql.bz2” or “.sql.gz” if support for compressed formats is -enabled).

        -

        This feature is useful when your file is too big to be -uploaded via HTTP, or when file -uploads are disabled in PHP.

        -
        -

        Warning

        -

        Please see top of this chapter (Web server upload/save/import directories) for instructions how -to setup this directory and how to make its usage secure.

        -
        - -
        - -
        -
        -$cfg['SaveDir']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        The name of the webserver directory where exported files can be saved.

        -

        If you want a different directory for each user, %u will be replaced with the -username.

        -

        Please note that the directory must exist and has to be writable for -the user running webserver.

        -
        -

        Warning

        -

        Please see top of this chapter (Web server upload/save/import directories) for instructions how -to setup this directory and how to make its usage secure.

        -
        -
        - -
        -
        -$cfg['TempDir']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        './tmp/'

        -
        -
        -

        The name of the directory where temporary files can be stored. It is used -for several purposes, currently:

        - -

        This directory should have as strict permissions as possible as the only -user required to access this directory is the one who runs the webserver. -If you have root privileges, simply make this user owner of this directory -and make it accessible only by it:

        -
        chown www-data:www-data tmp
        -chmod 700 tmp
        -
        -
        -

        If you cannot change owner of the directory, you can achieve a similar -setup using ACL:

        -
        chmod 700 tmp
        -setfacl -m "g:www-data:rwx" tmp
        -setfacl -d -m "g:www-data:rwx" tmp
        -
        -
        -

        If neither of above works for you, you can still make the directory -chmod 777, but it might impose risk of other users on system -reading and writing data in this directory.

        -
        -

        Warning

        -

        Please see top of this chapter (Web server upload/save/import directories) for instructions how -to setup this directory and how to make its usage secure.

        -
        -
        - -
        -
        -

        Various display setting

        -
        -
        -$cfg['RepeatCells']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        100

        -
        -
        -

        Repeat the headers every X cells, or 0 to deactivate.

        -
        - -
        -
        -$cfg['QueryHistoryDB']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -
        - -
        -
        -$cfg['QueryHistoryMax']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        25

        -
        -
        -

        If $cfg['QueryHistoryDB'] is set to true, all your -Queries are logged to a table, which has to be created by you (see -$cfg['Servers'][$i]['history']). If set to false, all your -queries will be appended to the form, but only as long as your window is -opened they remain saved.

        -

        When using the JavaScript based query window, it will always get updated -when you click on a new table/db to browse and will focus if you click on -Edit SQL after using a query. You can suppress updating the -query window by checking the box Do not overwrite this query -from outside the window below the query textarea. Then you can browse -tables/databases in the background without losing the contents of the -textarea, so this is especially useful when composing a query with tables -you first have to look in. The checkbox will get automatically checked -whenever you change the contents of the textarea. Please uncheck the button -whenever you definitely want the query window to get updated even though -you have made alterations.

        -

        If $cfg['QueryHistoryDB'] is set to true you can -specify the amount of saved history items using -$cfg['QueryHistoryMax'].

        -
        - -
        -
        -$cfg['BrowseMIME']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Enable Transformations.

        -
        - -
        -
        -$cfg['MaxExactCount']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        50000

        -
        -
        -

        For InnoDB tables, determines for how large tables phpMyAdmin should -get the exact row count using SELECT COUNT. If the approximate row -count as returned by SHOW TABLE STATUS is smaller than this value, -SELECT COUNT will be used, otherwise the approximate count will be -used.

        -
        -

        Changed in version 4.8.0: The default value was lowered to 50000 for performance reasons.

        -
        -
        -

        Changed in version 4.2.6: The default value was changed to 500000.

        -
        - -
        - -
        -
        -$cfg['MaxExactCountViews']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        0

        -
        -
        -

        For VIEWs, since obtaining the exact count could have an impact on -performance, this value is the maximum to be displayed, using a -SELECT COUNT ... LIMIT. Setting this to 0 bypasses any row -counting.

        -
        - -
        -
        -$cfg['NaturalOrder']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Sorts database and table names according to natural order (for -example, t1, t2, t10). Currently implemented in the navigation panel -and in Database view, for the table list.

        -
        - -
        -
        -$cfg['InitialSlidersState']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'closed'

        -
        -
        -

        If set to 'closed', the visual sliders are initially in a closed -state. A value of 'open' does the reverse. To completely disable -all visual sliders, use 'disabled'.

        -
        - -
        -
        -$cfg['UserprefsDisallow']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array()

        -
        -
        -

        Contains names of configuration options (keys in $cfg array) that -users can’t set through user preferences. For possible values, refer -to classes under libraries/classes/Config/Forms/User/.

        -
        - -
        -
        -$cfg['UserprefsDeveloperTab']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -
        -

        New in version 3.4.0.

        -
        -

        Activates in the user preferences a tab containing options for -developers of phpMyAdmin.

        -
        - -
        -
        -

        Page titles

        -
        -
        -$cfg['TitleTable']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@'

        -
        -
        -
        - -
        -
        -$cfg['TitleDatabase']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ | @PHPMYADMIN@'

        -
        -
        -
        - -
        -
        -$cfg['TitleServer']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        '@HTTP_HOST@ / @VSERVER@ | @PHPMYADMIN@'

        -
        -
        -
        - -
        -
        -$cfg['TitleDefault']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        '@HTTP_HOST@ | @PHPMYADMIN@'

        -
        -
        -

        Allows you to specify window’s title bar. You can use 6.27 What format strings can I use?.

        -
        - -
        -
        -

        Theme manager settings

        -
        -
        -$cfg['ThemeManager']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Enables user-selectable themes. See 2.7 Using and creating themes.

        -
        - -
        -
        -$cfg['ThemeDefault']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'pmahomme'

        -
        -
        -

        The default theme (a subdirectory under ./themes/).

        -
        - -
        -
        -$cfg['ThemePerServer']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Whether to allow different theme for each server.

        -
        - -
        -
        -$cfg['FontSize']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ‘82%’

        -
        -
        -
        -

        Deprecated since version 5.0.0: This setting was removed as the browser is more efficient, -thus no need of this option.

        -
        -

        Font size to use, is applied in CSS.

        -
        - -
        -
        -

        Default queries

        -
        -
        -$cfg['DefaultQueryTable']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'SELECT * FROM @TABLE@ WHERE 1'

        -
        -
        -
        - -
        -
        -$cfg['DefaultQueryDatabase']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ''

        -
        -
        -

        Default queries that will be displayed in query boxes when user didn’t -specify any. You can use standard 6.27 What format strings can I use?.

        -
        - -
        -
        -

        MySQL settings

        -
        -
        -$cfg['DefaultFunctions']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array('FUNC_CHAR' => '', 'FUNC_DATE' => '', 'FUNC_NUMBER' => '', 'FUNC_SPATIAL' => 'GeomFromText', 'FUNC_UUID' => 'UUID', 'first_timestamp' => 'NOW')

        -
        -
        -

        Functions selected by default when inserting/changing row, Functions -are defined for meta types as (FUNC_NUMBER, FUNC_DATE, FUNC_CHAR, -FUNC_SPATIAL, FUNC_UUID) and for first_timestamp, which is used -for first timestamp column in table.

        -

        Example configuration

        -
        $cfg['DefaultFunctions'] = [
        -    'FUNC_CHAR' => '',
        -    'FUNC_DATE' => '',
        -    'FUNC_NUMBER' => '',
        -    'FUNC_SPATIAL' => 'ST_GeomFromText',
        -    'FUNC_UUID' => 'UUID',
        -    'first_timestamp' => 'UTC_TIMESTAMP',
        -];
        -
        -
        -
        - -
        -
        -

        Default options for Transformations

        -
        -
        -$cfg['DefaultTransformations']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        An array with below listed key-values

        -
        -
        -
        - -
        -
        -$cfg['DefaultTransformations']['Substring']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(0, ‘all’, ‘…’)

        -
        -
        -
        - -
        -
        -$cfg['DefaultTransformations']['Bool2Text']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(‘T’, ‘F’)

        -
        -
        -
        - -
        -
        -$cfg['DefaultTransformations']['External']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(0, ‘-f /dev/null -i -wrap -q’, 1, 1)

        -
        -
        -
        - -
        -
        -$cfg['DefaultTransformations']['PreApPend']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(‘’, ‘’)

        -
        -
        -
        - -
        -
        -$cfg['DefaultTransformations']['Hex']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(‘2’)

        -
        -
        -
        - -
        -
        -$cfg['DefaultTransformations']['DateFormat']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(0, ‘’, ‘local’)

        -
        -
        -
        - -
        -
        -$cfg['DefaultTransformations']['Inline']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(‘100’, 100)

        -
        -
        -
        - -
        - -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(‘’, 100, 50)

        -
        -
        -
        - -
        - -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        array(‘’, ‘’, ‘’)

        -
        -
        -
        - -
        -
        -

        Console settings

        -
        -

        Note

        -

        These settings are mostly meant to be changed by user.

        -
        -
        -
        -$cfg['Console']['StartHistory']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Show query history at start

        -
        - -
        -
        -$cfg['Console']['AlwaysExpand']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Always expand query messages

        -
        - -
        -
        -$cfg['Console']['CurrentQuery']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        true

        -
        -
        -

        Show current browsing query

        -
        - -
        -
        -$cfg['Console']['EnterExecutes']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Execute queries on Enter and insert new line with Shift+Enter

        -
        - -
        -
        -$cfg['Console']['DarkTheme']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Switch to dark theme

        -
        - -
        -
        -$cfg['Console']['Mode']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        ‘info’

        -
        -
        -

        Console mode

        -
        - -
        -
        -$cfg['Console']['Height']
        -
        -
        Type
        -

        integer

        -
        -
        Default value
        -

        92

        -
        -
        -

        Console height

        -
        - -
        -
        -

        Developer

        -
        -

        Warning

        -

        These settings might have huge effect on performance or security.

        -
        -
        -
        -$cfg['environment']
        -
        -
        Type
        -

        string

        -
        -
        Default value
        -

        'production'

        -
        -
        -

        Sets the working environment.

        -

        This only needs to be changed when you are developing phpMyAdmin itself. -The development mode may display debug information in some places.

        -

        Possible values are 'production' or 'development'.

        -
        - -
        -
        -$cfg['DBG']
        -
        -
        Type
        -

        array

        -
        -
        Default value
        -

        []

        -
        -
        -
        - -
        -
        -$cfg['DBG']['sql']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Enable logging queries and execution times to be -displayed in the console’s Debug SQL tab.

        -
        - -
        -
        -$cfg['DBG']['sqllog']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Enable logging of queries and execution times to the syslog. -Requires $cfg['DBG']['sql'] to be enabled.

        -
        - -
        -
        -$cfg['DBG']['demo']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Enable to let server present itself as demo server. -This is used for phpMyAdmin demo server.

        -

        It currently changes following behavior:

        -
          -
        • There is welcome message on the main page.

        • -
        • There is footer information about demo server and used Git revision.

        • -
        • The setup script is enabled even with existing configuration.

        • -
        • The setup does not try to connect to the MySQL server.

        • -
        -
        - -
        -
        -$cfg['DBG']['simple2fa']
        -
        -
        Type
        -

        boolean

        -
        -
        Default value
        -

        false

        -
        -
        -

        Can be used for testing two-factor authentication using Simple two-factor authentication.

        -
        - -
        -
        -

        Examples

        -

        See following configuration snippets for typical setups of phpMyAdmin.

        -
        -

        Basic example

        -

        Example configuration file, which can be copied to config.inc.php to -get some core configuration layout; it is distributed with phpMyAdmin as -config.sample.inc.php. Please note that it does not contain all -configuration options, only the most frequently used ones.

        -
        <?php
        -/**
        - * phpMyAdmin sample configuration, you can use it as base for
        - * manual configuration. For easier setup you can use setup/
        - *
        - * All directives are explained in documentation in the doc/ folder
        - * or at <https://docs.phpmyadmin.net/>.
        - */
        -
        -declare(strict_types=1);
        -
        -/**
        - * This is needed for cookie based authentication to encrypt password in
        - * cookie. Needs to be 32 chars long.
        - */
        -$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
        -
        -/**
        - * Servers configuration
        - */
        -$i = 0;
        -
        -/**
        - * First server
        - */
        -$i++;
        -/* Authentication type */
        -$cfg['Servers'][$i]['auth_type'] = 'cookie';
        -/* Server parameters */
        -$cfg['Servers'][$i]['host'] = 'localhost';
        -$cfg['Servers'][$i]['compress'] = false;
        -$cfg['Servers'][$i]['AllowNoPassword'] = false;
        -
        -/**
        - * phpMyAdmin configuration storage settings.
        - */
        -
        -/* User used to manipulate with storage */
        -// $cfg['Servers'][$i]['controlhost'] = '';
        -// $cfg['Servers'][$i]['controlport'] = '';
        -// $cfg['Servers'][$i]['controluser'] = 'pma';
        -// $cfg['Servers'][$i]['controlpass'] = 'pmapass';
        -
        -/* Storage database and tables */
        -// $cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
        -// $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmark';
        -// $cfg['Servers'][$i]['relation'] = 'pma__relation';
        -// $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
        -// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
        -// $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
        -// $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
        -// $cfg['Servers'][$i]['history'] = 'pma__history';
        -// $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
        -// $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
        -// $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
        -// $cfg['Servers'][$i]['recent'] = 'pma__recent';
        -// $cfg['Servers'][$i]['favorite'] = 'pma__favorite';
        -// $cfg['Servers'][$i]['users'] = 'pma__users';
        -// $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
        -// $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
        -// $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
        -// $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
        -// $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
        -// $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
        -
        -/**
        - * End of servers configuration
        - */
        -
        -/**
        - * Directories for saving/loading files from server
        - */
        -$cfg['UploadDir'] = '';
        -$cfg['SaveDir'] = '';
        -
        -/**
        - * Whether to display icons or text or both icons and text in table row
        - * action segment. Value can be either of 'icons', 'text' or 'both'.
        - * default = 'both'
        - */
        -//$cfg['RowActionType'] = 'icons';
        -
        -/**
        - * Defines whether a user should be displayed a "show all (records)"
        - * button in browse mode or not.
        - * default = false
        - */
        -//$cfg['ShowAll'] = true;
        -
        -/**
        - * Number of rows displayed when browsing a result set. If the result
        - * set contains more rows, "Previous" and "Next".
        - * Possible values: 25, 50, 100, 250, 500
        - * default = 25
        - */
        -//$cfg['MaxRows'] = 50;
        -
        -/**
        - * Disallow editing of binary fields
        - * valid values are:
        - *   false    allow editing
        - *   'blob'   allow editing except for BLOB fields
        - *   'noblob' disallow editing except for BLOB fields
        - *   'all'    disallow editing
        - * default = 'blob'
        - */
        -//$cfg['ProtectBinary'] = false;
        -
        -/**
        - * Default language to use, if not browser-defined or user-defined
        - * (you find all languages in the locale folder)
        - * uncomment the desired line:
        - * default = 'en'
        - */
        -//$cfg['DefaultLang'] = 'en';
        -//$cfg['DefaultLang'] = 'de';
        -
        -/**
        - * How many columns should be used for table display of a database?
        - * (a value larger than 1 results in some information being hidden)
        - * default = 1
        - */
        -//$cfg['PropertiesNumColumns'] = 2;
        -
        -/**
        - * Set to true if you want DB-based query history.If false, this utilizes
        - * JS-routines to display query history (lost by window close)
        - *
        - * This requires configuration storage enabled, see above.
        - * default = false
        - */
        -//$cfg['QueryHistoryDB'] = true;
        -
        -/**
        - * When using DB-based query history, how many entries should be kept?
        - * default = 25
        - */
        -//$cfg['QueryHistoryMax'] = 100;
        -
        -/**
        - * Whether or not to query the user before sending the error report to
        - * the phpMyAdmin team when a JavaScript error occurs
        - *
        - * Available options
        - * ('ask' | 'always' | 'never')
        - * default = 'ask'
        - */
        -//$cfg['SendErrorReports'] = 'always';
        -
        -/**
        - * 'URLQueryEncryption' defines whether phpMyAdmin will encrypt sensitive data from the URL query string.
        - * 'URLQueryEncryptionSecretKey' is a 32 bytes long secret key used to encrypt/decrypt the URL query string.
        - */
        -//$cfg['URLQueryEncryption'] = true;
        -//$cfg['URLQueryEncryptionSecretKey'] = '';
        -
        -/**
        - * You can find more configuration options in the documentation
        - * in the doc/ folder or at <https://docs.phpmyadmin.net/>.
        - */
        -
        -
        -
        -

        Warning

        -

        Don’t use the controluser ‘pma’ if it does not yet exist and don’t use ‘pmapass’ -as password.

        -
        -
        -
        -

        Example for signon authentication

        -

        This example uses examples/signon.php to demonstrate usage of Signon authentication mode:

        -
        <?php
        -$i = 0;
        -$i++;
        -$cfg['Servers'][$i]['auth_type']     = 'signon';
        -$cfg['Servers'][$i]['SignonSession'] = 'SignonSession';
        -$cfg['Servers'][$i]['SignonURL']     = 'examples/signon.php';
        -
        -
        -
        -
        -

        Example for IP address limited autologin

        -

        If you want to automatically login when accessing phpMyAdmin locally while asking -for a password when accessing remotely, you can achieve it using following snippet:

        -
        if ($_SERVER['REMOTE_ADDR'] === '127.0.0.1') {
        -    $cfg['Servers'][$i]['auth_type'] = 'config';
        -    $cfg['Servers'][$i]['user'] = 'root';
        -    $cfg['Servers'][$i]['password'] = 'yourpassword';
        -} else {
        -    $cfg['Servers'][$i]['auth_type'] = 'cookie';
        -}
        -
        -
        -
        -

        Note

        -

        Filtering based on IP addresses isn’t reliable over the internet, use it -only for local address.

        -
        -
        -
        -

        Example for using multiple MySQL servers

        -

        You can configure any number of servers using $cfg['Servers'], -following example shows two of them:

        -
        <?php
        -$cfg['blowfish_secret'] = 'multiServerExample70518';
        -// any string of your choice
        -$i = 0;
        -
        -$i++; // server 1 :
        -$cfg['Servers'][$i]['auth_type'] = 'cookie';
        -$cfg['Servers'][$i]['verbose']   = 'no1';
        -$cfg['Servers'][$i]['host']      = 'localhost';
        -// more options for #1 ...
        -
        -$i++; // server 2 :
        -$cfg['Servers'][$i]['auth_type'] = 'cookie';
        -$cfg['Servers'][$i]['verbose']   = 'no2';
        -$cfg['Servers'][$i]['host']      = 'remote.host.addr';//or ip:'10.9.8.1'
        -// this server must allow remote clients, e.g., host 10.9.8.%
        -// not only in mysql.host but also in the startup configuration
        -// more options for #2 ...
        -
        -// end of server sections
        -$cfg['ServerDefault'] = 0; // to choose the server on startup
        -
        -// further general options ...
        -
        -
        -
        -
        -

        Google Cloud SQL with SSL

        -

        To connect to Google Could SQL, you currently need to disable certificate -verification. This is caused by the certificate being issued for CN matching -your instance name, but you connect to an IP address and PHP tries to match -these two. With verification you end up with error message like:

        -
        Peer certificate CN=`api-project-851612429544:pmatest' did not match expected CN=`8.8.8.8'
        -
        -
        -
        -

        Warning

        -

        With disabled verification your traffic is encrypted, but you’re open to -man in the middle attacks.

        -
        -

        To connect phpMyAdmin to Google Cloud SQL using SSL download the client and -server certificates and tell phpMyAdmin to use them:

        -
        // IP address of your instance
        -$cfg['Servers'][$i]['host'] = '8.8.8.8';
        -// Use SSL for connection
        -$cfg['Servers'][$i]['ssl'] = true;
        -// Client secret key
        -$cfg['Servers'][$i]['ssl_key'] = '../client-key.pem';
        -// Client certificate
        -$cfg['Servers'][$i]['ssl_cert'] = '../client-cert.pem';
        -// Server certification authority
        -$cfg['Servers'][$i]['ssl_ca'] = '../server-ca.pem';
        -// Disable SSL verification (see above note)
        -$cfg['Servers'][$i]['ssl_verify'] = false;
        -
        -
        - -
        -
        -

        Amazon RDS Aurora with SSL

        -

        To connect phpMyAdmin to an Amazon RDS Aurora MySQL database instance using SSL, -download the CA server certificate and tell phpMyAdmin to use it:

        -
        // Address of your instance
        -$cfg['Servers'][$i]['host'] = 'replace-me-custer-name.cluster-replace-me-id.replace-me-region.rds.amazonaws.com';
        -// Use SSL for connection
        -$cfg['Servers'][$i]['ssl'] = true;
        -// You need to have the region CA file and the authority CA file (2019 edition CA for example) in the PEM bundle for it to work
        -$cfg['Servers'][$i]['ssl_ca'] = '../rds-combined-ca-bundle.pem';
        -// Enable SSL verification
        -$cfg['Servers'][$i]['ssl_verify'] = true;
        -
        -
        - - -
        -
        -

        reCaptcha using hCaptcha

        -
        $cfg['CaptchaApi'] = 'https://www.hcaptcha.com/1/api.js';
        -$cfg['CaptchaCsp'] = 'https://hcaptcha.com https://*.hcaptcha.com';
        -$cfg['CaptchaRequestParam'] = 'h-captcha';
        -$cfg['CaptchaResponseParam'] = 'h-captcha-response';
        -$cfg['CaptchaSiteVerifyURL'] = 'https://hcaptcha.com/siteverify';
        -// This is the secret key from hCaptcha dashboard
        -$cfg['CaptchaLoginPrivateKey'] = '0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
        -// This is the site key from hCaptcha dashboard
        -$cfg['CaptchaLoginPublicKey'] = 'xxx-xxx-xxx-xxx-xxxx';
        -
        -
        -
        -

        See also

        -

        hCaptcha website

        -
        - -
        -
        -
        - - -
        -
        -
        -
        - -
        -
        - - - - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/copyright.html b/Sources/php_script/script/phpMyAdmin/doc/html/copyright.html deleted file mode 100644 index b631378..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/copyright.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - - - Copyright — phpMyAdmin 5.2.0 documentation - - - - - - - - - - - - - - - - -
        -
        -
        -
        - - - - -
        -
        -
        -
        - -
        -
        - - - - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/faq.html b/Sources/php_script/script/phpMyAdmin/doc/html/faq.html deleted file mode 100644 index 7cc526e..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/faq.html +++ /dev/null @@ -1,2000 +0,0 @@ - - - - - - - - FAQ - Frequently Asked Questions — phpMyAdmin 5.2.0 documentation - - - - - - - - - - - - - - - - -
        -
        -
        -
        - -
        -

        FAQ - Frequently Asked Questions

        -

        Please have a look at our Link section on the official -phpMyAdmin homepage for in-depth coverage of phpMyAdmin’s features and -or interface.

        -
        -

        Server

        -
        -

        1.1 My server is crashing each time a specific action is required or phpMyAdmin sends a blank page or a page full of cryptic characters to my browser, what can I do?

        -

        Try to set the $cfg['OBGzip'] directive to false in your -config.inc.php file and the zlib.output_compression directive to -Off in your php configuration file.

        -
        -
        -

        1.2 My Apache server crashes when using phpMyAdmin.

        -

        You should first try the latest versions of Apache (and possibly MySQL). If -your server keeps crashing, please ask for help in the various Apache support -groups.

        - -
        -
        -

        1.3 (withdrawn).

        -
        -
        -

        1.4 Using phpMyAdmin on IIS, I’m displayed the error message: “The specified CGI application misbehaved by not returning a complete set of HTTP headers …”.

        -

        You just forgot to read the install.txt file from the PHP -distribution. Have a look at the last message in this PHP bug report #12061 from the official PHP bug -database.

        -
        -
        -

        1.5 Using phpMyAdmin on IIS, I’m facing crashes and/or many error messages with the HTTP.

        -

        This is a known problem with the PHP ISAPI filter: it’s not so stable. -Please use instead the cookie authentication mode.

        -
        -
        -

        1.6 I can’t use phpMyAdmin on PWS: nothing is displayed!

        -

        This seems to be a PWS bug. Filippo Simoncini found a workaround (at -this time there is no better fix): remove or comment the DOCTYPE -declarations (2 lines) from the scripts libraries/classes/Header.php -and index.php.

        -
        -
        -

        1.7 How can I gzip a dump or a CSV export? It does not seem to work.

        -

        This feature is based on the gzencode() -PHP function to be more independent of the platform (Unix/Windows, -Safe Mode or not, and so on). So, you must have Zlib support -(--with-zlib).

        -
        -
        -

        1.8 I cannot insert a text file in a table, and I get an error about safe mode being in effect.

        -

        Your uploaded file is saved by PHP in the “upload dir”, as defined in -php.ini by the variable upload_tmp_dir (usually the system -default is /tmp). We recommend the following setup for Apache -servers running in safe mode, to enable uploads of files while being -reasonably secure:

        -
          -
        • create a separate directory for uploads: mkdir /tmp/php

        • -
        • give ownership to the Apache server’s user.group: chown -apache.apache /tmp/php

        • -
        • give proper permission: chmod 600 /tmp/php

        • -
        • put upload_tmp_dir = /tmp/php in php.ini

        • -
        • restart Apache

        • -
        -
        -
        -

        1.9 (withdrawn).

        -
        -
        -

        1.10 I’m having troubles when uploading files with phpMyAdmin running on a secure server. My browser is Internet Explorer and I’m using the Apache server.

        -

        As suggested by “Rob M” in the phpWizard forum, add this line to your -httpd.conf:

        -
        SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
        -
        -
        -

        It seems to clear up many problems between Internet Explorer and SSL.

        -
        -
        -

        1.11 I get an ‘open_basedir restriction’ while uploading a file from the import tab.

        -

        Since version 2.2.4, phpMyAdmin supports servers with open_basedir -restrictions. However you need to create temporary directory and configure it -as $cfg['TempDir']. The uploaded files will be moved there, -and after execution of your SQL commands, removed.

        -
        -
        -

        1.12 I have lost my MySQL root password, what can I do?

        -

        phpMyAdmin does authenticate against MySQL server you’re using, so to recover -from phpMyAdmin password loss, you need to recover at MySQL level.

        -

        The MySQL manual explains how to reset the permissions.

        -

        If you are using MySQL server installed by your hosting provider, please -contact their support to recover the password for you.

        -
        -
        -

        1.13 (withdrawn).

        -
        -
        -

        1.14 (withdrawn).

        -
        -
        -

        1.15 I have problems with mysql.user column names.

        -

        In previous MySQL versions, the User and Password columns were -named user and password. Please modify your column names to -align with current standards.

        -
        -
        -

        1.16 I cannot upload big dump files (memory, HTTP or timeout problems).

        -

        Starting with version 2.7.0, the import engine has been re–written and -these problems should not occur. If possible, upgrade your phpMyAdmin -to the latest version to take advantage of the new import features.

        -

        The first things to check (or ask your host provider to check) are the values -of max_execution_time, upload_max_filesize, memory_limit and -post_max_size in the php.ini configuration file. All of these -settings limit the maximum size of data that can be submitted and handled by -PHP. Please note that post_max_size needs to be larger than -upload_max_filesize. There exist several workarounds if your upload is too -big or your hosting provider is unwilling to change the settings:

        -
          -
        • Look at the $cfg['UploadDir'] feature. This allows one to upload a file to the server -via scp, FTP, or your favorite file transfer method. PhpMyAdmin is -then able to import the files from the temporary directory. More -information is available in the Configuration of this document.

        • -
        • Using a utility (such as BigDump) to split the files before -uploading. We cannot support this or any third party applications, but -are aware of users having success with it.

        • -
        • If you have shell (command line) access, use MySQL to import the files -directly. You can do this by issuing the “source” command from within -MySQL:

          -
          source filename.sql;
          -
          -
          -
        • -
        -
        -
        -

        1.17 Which Database versions does phpMyAdmin support?

        -

        For MySQL, versions 5.5 and newer are supported. -For older MySQL versions, our Downloads page offers older phpMyAdmin versions -(which may have become unsupported).

        -

        For MariaDB, versions 5.5 and newer are supported.

        -
        -
        -

        1.17a I cannot connect to the MySQL server. It always returns the error message, “Client does not support authentication protocol requested by server; consider upgrading MySQL client”

        -

        You tried to access MySQL with an old MySQL client library. The -version of your MySQL client library can be checked in your phpinfo() -output. In general, it should have at least the same minor version as -your server - as mentioned in 1.17 Which Database versions does phpMyAdmin support?. This problem is -generally caused by using MySQL version 4.1 or newer. MySQL changed -the authentication hash and your PHP is trying to use the old method. -The proper solution is to use the mysqli extension with the proper client library to match -your MySQL installation. More -information (and several workarounds) are located in the MySQL -Documentation.

        -
        -
        -

        1.18 (withdrawn).

        -
        -
        -

        1.19 I can’t run the “display relations” feature because the script seems not to know the font face I’m using!

        -

        The TCPDF library we’re using for this feature requires some special -files to use font faces. Please refers to the TCPDF manual to build these files.

        -
        -
        -

        1.20 I receive an error about missing mysqli and mysql extensions.

        -

        To connect to a MySQL server, PHP needs a set of MySQL functions -called “MySQL extension”. This extension may be part of the PHP -distribution (compiled-in), otherwise it needs to be loaded -dynamically. Its name is probably mysqli.so or php_mysqli.dll. -phpMyAdmin tried to load the extension but failed. Usually, the -problem is solved by installing a software package called “PHP-MySQL” -or something similar.

        -

        There was two interfaces PHP provided as MySQL extensions - mysql -and mysqli. The mysql interface was removed in PHP 7.0.

        -

        This problem can be also caused by wrong paths in the php.ini or using -wrong php.ini.

        -

        Make sure that the extension files do exist in the folder which the -extension_dir points to and that the corresponding lines in your -php.ini are not commented out (you can use phpinfo() to check -current setup):

        -
        [PHP]
        -
        -; Directory in which the loadable extensions (modules) reside.
        -extension_dir = "C:/Apache2/modules/php/ext"
        -
        -
        -

        The php.ini can be loaded from several locations (especially on -Windows), so please check you’re updating the correct one. If using Apache, you -can tell it to use specific path for this file using PHPIniDir directive:

        -
        LoadModule php7_module "C:/php7/php7apache2_4.dll"
        -<IfModule php7_module>
        -    PHPIniDir "C:/php7"
        -    <Location>
        -       AddType text/html .php
        -       AddHandler application/x-httpd-php .php
        -    </Location>
        -</IfModule>
        -
        -
        -

        In some rare cases this problem can be also caused by other extensions loaded -in PHP which prevent MySQL extensions to be loaded. If anything else fails, you -can try commenting out extensions for other databases from php.ini.

        -
        - -
        -

        1.22 I don’t see the “Location of text file” field, so I cannot upload.

        -

        This is most likely because in php.ini, your file_uploads -parameter is not set to “on”.

        -
        -
        -

        1.23 I’m running MySQL on a Win32 machine. Each time I create a new table the table and column names are changed to lowercase!

        -

        This happens because the MySQL directive lower_case_table_names -defaults to 1 (ON) in the Win32 version of MySQL. You can change -this behavior by simply changing the directive to 0 (OFF): Just -edit your my.ini file that should be located in your Windows -directory and add the following line to the group [mysqld]:

        -
        set-variable = lower_case_table_names=0
        -
        -
        -
        -

        Note

        -

        Forcing this variable to 0 with –lower-case-table-names=0 on a -case-insensitive filesystem and access MyISAM tablenames using different -lettercases, index corruption may result.

        -
        -

        Next, save the file and restart the MySQL service. You can always -check the value of this directive using the query

        -
        SHOW VARIABLES LIKE 'lower_case_table_names';
        -
        -
        - -
        -
        -

        1.24 (withdrawn).

        -
        -
        -

        1.25 I am running Apache with mod_gzip-1.3.26.1a on Windows XP, and I get problems, such as undefined variables when I run a SQL query.

        -

        A tip from Jose Fandos: put a comment on the following two lines in -httpd.conf, like this:

        -
        # mod_gzip_item_include file \.php$
        -# mod_gzip_item_include mime "application/x-httpd-php.*"
        -
        -
        -

        as this version of mod_gzip on Apache (Windows) has problems handling -PHP scripts. Of course you have to restart Apache.

        -
        -
        -

        1.26 I just installed phpMyAdmin in my document root of IIS but I get the error “No input file specified” when trying to run phpMyAdmin.

        -

        This is a permission problem. Right-click on the phpmyadmin folder and -choose properties. Under the tab Security, click on “Add” and select -the user “IUSR_machine” from the list. Now set their permissions and it -should work.

        -
        -
        -

        1.27 I get empty page when I want to view huge page (eg. db_structure.php with plenty of tables).

        -

        This was caused by a PHP bug that occur when -GZIP output buffering is enabled. If you turn off it (by -$cfg['OBGzip'] in config.inc.php), it should work. -This bug will has been fixed in PHP 5.0.0.

        -
        -
        -

        1.28 My MySQL server sometimes refuses queries and returns the message ‘Errorcode: 13’. What does this mean?

        -

        This can happen due to a MySQL bug when having database / table names -with upper case characters although lower_case_table_names is -set to 1. To fix this, turn off this directive, convert all database -and table names to lower case and turn it on again. Alternatively, -there’s a bug-fix available starting with MySQL 3.23.56 / -4.0.11-gamma.

        -
        -
        -

        1.29 When I create a table or modify a column, I get an error and the columns are duplicated.

        -

        It is possible to configure Apache in such a way that PHP has problems -interpreting .php files.

        -

        The problems occur when two different (and conflicting) set of -directives are used:

        -
        SetOutputFilter PHP
        -SetInputFilter PHP
        -
        -
        -

        and

        -
        AddType application/x-httpd-php .php
        -
        -
        -

        In the case we saw, one set of directives was in -/etc/httpd/conf/httpd.conf, while the other set was in -/etc/httpd/conf/addon-modules/php.conf. The recommended way is -with AddType, so just comment out the first set of lines and -restart Apache:

        -
        #SetOutputFilter PHP
        -#SetInputFilter PHP
        -
        -
        -
        -
        -

        1.30 I get the error “navigation.php: Missing hash”.

        -

        This problem is known to happen when the server is running Turck -MMCache but upgrading MMCache to version 2.3.21 solves the problem.

        -
        -
        -

        1.31 Which PHP versions does phpMyAdmin support?

        -

        Since release 4.5, phpMyAdmin supports only PHP 5.5 and newer. Since release -4.1 phpMyAdmin supports only PHP 5.3 and newer. For PHP 5.2 you can use 4.0.x -releases.

        -

        PHP 7 is supported since phpMyAdmin 4.6, PHP 7.1 is supported since 4.6.5, -PHP 7.2 is supported since 4.7.4.

        -

        HHVM is supported up to phpMyAdmin 4.8.

        -

        Since release 5.0, phpMyAdmin supports only PHP 7.1 and newer. -Since release 5.2, phpMyAdmin supports only PHP 7.2 and newer.

        -
        -
        -

        1.32 Can I use HTTP authentication with IIS?

        -

        Yes. This procedure was tested with phpMyAdmin 2.6.1, PHP 4.3.9 in -ISAPI mode under IIS 5.1.

        -
          -
        1. In your php.ini file, set cgi.rfc2616_headers = 0

        2. -
        3. In Web Site Properties -> File/Directory Security -> Anonymous -Access dialog box, check the Anonymous access checkbox and -uncheck any other checkboxes (i.e. uncheck Basic authentication, -Integrated Windows authentication, and Digest if it’s -enabled.) Click OK.

        4. -
        5. In Custom Errors, select the range of 401;1 through 401;5 -and click the Set to Default button.

        6. -
        -
        -

        See also

        -

        RFC 2616

        -
        -
        -
        -

        1.33 (withdrawn).

        -
        -
        -

        1.34 Can I directly access a database or table pages?

        -

        Yes. Out of the box, you can use a URL like -http://server/phpMyAdmin/index.php?server=X&db=database&table=table&target=script. -For server you can use the server number -which refers to the numeric host index (from $i) in -config.inc.php. The table and script parts are optional.

        -

        If you want a URL like -http://server/phpMyAdmin/database[/table][/script], you need to do some additional configuration. The following -lines apply only for the Apache web server. -First, make sure that you have enabled some features within the Apache global -configuration. You need Options SymLinksIfOwnerMatch and AllowOverride -FileInfo enabled for directory where phpMyAdmin is installed and you -need mod_rewrite to be enabled. Then you just need to create the -following .htaccess file in root folder of phpMyAdmin installation (don’t -forget to change directory name inside of it):

        -
        RewriteEngine On
        -RewriteBase /path_to_phpMyAdmin
        -RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&table=$2&target=$3 [R]
        -RewriteRule ^([a-zA-Z0-9_]+)/([a-z_]+\.php)$ index.php?db=$1&target=$2 [R]
        -RewriteRule ^([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)$ index.php?db=$1&table=$2 [R]
        -RewriteRule ^([a-zA-Z0-9_]+)$ index.php?db=$1 [R]
        -
        -
        - -
        -

        Changed in version 5.1.0: Support for using the target parameter was removed in phpMyAdmin 5.1.0. -Use the route parameter instead.

        -
        -
        -
        -

        1.35 Can I use HTTP authentication with Apache CGI?

        -

        Yes. However you need to pass authentication variable to CGI using -following rewrite rule:

        -
        RewriteEngine On
        -RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization},L]
        -
        -
        -
        -
        -

        1.36 I get an error “500 Internal Server Error”.

        -

        There can be many explanations to this and a look at your server’s -error log file might give a clue.

        -
        - -
        -

        1.38 Can I use phpMyAdmin on a server on which Suhosin is enabled?

        -

        Yes but the default configuration values of Suhosin are known to cause -problems with some operations, for example editing a table with many -columns and no primary key or with textual primary key.

        -

        Suhosin configuration might lead to malfunction in some cases and it -can not be fully avoided as phpMyAdmin is kind of application which -needs to transfer big amounts of columns in single HTTP request, what -is something what Suhosin tries to prevent. Generally all -suhosin.request.*, suhosin.post.* and suhosin.get.* -directives can have negative effect on phpMyAdmin usability. You can -always find in your error logs which limit did cause dropping of -variable, so you can diagnose the problem and adjust matching -configuration variable.

        -

        The default values for most Suhosin configuration options will work in -most scenarios, however you might want to adjust at least following -parameters:

        - -

        To further improve security, we also recommend these modifications:

        - -

        You can also disable the warning using the $cfg['SuhosinDisableWarning'].

        -
        -
        -

        1.39 When I try to connect via https, I can log in, but then my connection is redirected back to http. What can cause this behavior?

        -

        This is caused by the fact that PHP scripts have no knowledge that the site is -using https. Depending on used webserver, you should configure it to let PHP -know about URL and scheme used to access it.

        -

        For example in Apache ensure that you have enabled SSLOptions and -StdEnvVars in the configuration.

        - -
        - -
        -

        1.41 When I view a database and ask to see its privileges, I get an error about an unknown column.

        -

        The MySQL server’s privilege tables are not up to date, you need to -run the mysql_upgrade command on the server.

        -
        -
        -

        1.42 How can I prevent robots from accessing phpMyAdmin?

        -

        You can add various rules to .htaccess to filter access based on user agent -field. This is quite easy to circumvent, but could prevent at least -some robots accessing your installation.

        -
        RewriteEngine on
        -
        -# Allow only GET and POST verbs
        -RewriteCond %{REQUEST_METHOD} !^(GET|POST)$ [NC,OR]
        -
        -# Ban Typical Vulnerability Scanners and others
        -# Kick out Script Kiddies
        -RewriteCond %{HTTP_USER_AGENT} ^(java|curl|wget).* [NC,OR]
        -RewriteCond %{HTTP_USER_AGENT} ^.*(libwww-perl|curl|wget|python|nikto|wkito|pikto|scan|acunetix).* [NC,OR]
        -RewriteCond %{HTTP_USER_AGENT} ^.*(winhttp|HTTrack|clshttp|archiver|loader|email|harvest|extract|grab|miner).* [NC,OR]
        -
        -# Ban Search Engines, Crawlers to your administrative panel
        -# No reasons to access from bots
        -# Ultimately Better than the useless robots.txt
        -# Did google respect robots.txt?
        -# Try google: intitle:phpMyAdmin intext:"Welcome to phpMyAdmin *.*.*" intext:"Log in" -wiki -forum -forums -questions intext:"Cookies must be enabled"
        -RewriteCond %{HTTP_USER_AGENT} ^.*(AdsBot-Google|ia_archiver|Scooter|Ask.Jeeves|Baiduspider|Exabot|FAST.Enterprise.Crawler|FAST-WebCrawler|www\.neomo\.de|Gigabot|Mediapartners-Google|Google.Desktop|Feedfetcher-Google|Googlebot|heise-IT-Markt-Crawler|heritrix|ibm.com\cs/crawler|ICCrawler|ichiro|MJ12bot|MetagerBot|msnbot-NewsBlogs|msnbot|msnbot-media|NG-Search|lucene.apache.org|NutchCVS|OmniExplorer_Bot|online.link.validator|psbot0|Seekbot|Sensis.Web.Crawler|SEO.search.Crawler|Seoma.\[SEO.Crawler\]|SEOsearch|Snappy|www.urltrends.com|www.tkl.iis.u-tokyo.ac.jp/~crawler|SynooBot|crawleradmin.t-info@telekom.de|TurnitinBot|voyager|W3.SiteSearch.Crawler|W3C-checklink|W3C_Validator|www.WISEnutbot.com|yacybot|Yahoo-MMCrawler|Yahoo\!.DE.Slurp|Yahoo\!.Slurp|YahooSeeker).* [NC]
        -RewriteRule .* - [F]
        -
        -
        -
        -
        -

        1.43 Why can’t I display the structure of my table containing hundreds of columns?

        -

        Because your PHP’s memory_limit is too low; adjust it in php.ini.

        -
        -
        -

        1.44 How can I reduce the installed size of phpMyAdmin on disk?

        -

        Some users have requested to be able to reduce the size of the phpMyAdmin installation. -This is not recommended and could lead to confusion over missing features, but can be done. -A list of files and corresponding functionality which degrade gracefully when removed include:

        -
          -
        • ./vendor/tecnickcom/tcpdf folder (exporting to PDF)

        • -
        • ./locale/ folder, or unused subfolders (interface translations)

        • -
        • Any unused themes in ./themes/

        • -
        • ./js/vendor/jquery/src/ (included for licensing reasons)

        • -
        • ./js/line_counts.php (removed in phpMyAdmin 4.8)

        • -
        • ./doc/ (documentation)

        • -
        • ./setup/ (setup script)

        • -
        • ./examples/

        • -
        • ./sql/ (SQL scripts to configure advanced functionality)

        • -
        • ./js/vendor/openlayers/ (GIS visualization)

        • -
        -
        -
        -

        1.45 I get an error message about unknown authentication method caching_sha2_password when trying to log in

        -

        When logging in using MySQL version 8 or newer, you may encounter an error message like this:

        -
        -

        mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]

        -

        mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client

        -
        -

        This error is because of a version compatibility problem between PHP and MySQL. The MySQL project introduced a new authentication -method (our tests show this began with version 8.0.11) however PHP did not include the ability to use that authentication method. -PHP reports that this was fixed in PHP version 7.4.

        -

        Users experiencing this are encouraged to upgrade their PHP installation, however a workaround exists. Your MySQL user account -can be set to use the older authentication with a command such as

        -
        ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'PASSWORD';
        -
        -
        - -
        -
        -
        -

        Configuration

        -
        -

        2.1 The error message “Warning: Cannot add header information - headers already sent by …” is displayed, what’s the problem?

        -

        Edit your config.inc.php file and ensure there is nothing (I.E. no -blank lines, no spaces, no characters…) neither before the <?php tag at -the beginning, neither after the ?> tag at the end.

        -
        -
        -

        2.2 phpMyAdmin can’t connect to MySQL. What’s wrong?

        -

        Either there is an error with your PHP setup or your username/password -is wrong. Try to make a small script which uses mysql_connect and see -if it works. If it doesn’t, it may be you haven’t even compiled MySQL -support into PHP.

        -
        -
        -

        2.3 The error message “Warning: MySQL Connection Failed: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (111) …” is displayed. What can I do?

        -

        The error message can also be: Error #2002 - The server is not -responding (or the local MySQL server’s socket is not correctly configured).

        -

        First, you need to determine what socket is being used by MySQL. To do this, -connect to your server and go to the MySQL bin directory. In this directory -there should be a file named mysqladmin. Type ./mysqladmin variables, and -this should give you a bunch of info about your MySQL server, including the -socket (/tmp/mysql.sock, for example). You can also ask your ISP for the -connection info or, if you’re hosting your own, connect from the ‘mysql’ -command-line client and type ‘status’ to get the connection type and socket or -port number.

        -

        Then, you need to tell PHP to use this socket. You can do this for all PHP in -the php.ini or for phpMyAdmin only in the config.inc.php. For -example: $cfg['Servers'][$i]['socket'] Please also make sure -that the permissions of this file allow to be readable by your webserver.

        -

        On my RedHat-Box the socket of MySQL is /var/lib/mysql/mysql.sock. -In your php.ini you will find a line

        -
        mysql.default_socket = /tmp/mysql.sock
        -
        -
        -

        change it to

        -
        mysql.default_socket = /var/lib/mysql/mysql.sock
        -
        -
        -

        Then restart apache and it will work.

        -

        Have also a look at the corresponding section of the MySQL -documentation.

        -
        -
        -

        2.4 Nothing is displayed by my browser when I try to run phpMyAdmin, what can I do?

        -

        Try to set the $cfg['OBGzip'] directive to false in the phpMyAdmin configuration -file. It helps sometime. Also have a look at your PHP version number: -if it contains “b” or “alpha” it means you’re running a testing -version of PHP. That’s not a so good idea, please upgrade to a plain -revision.

        -
        - -
        -

        2.6 I get an “Access denied for user: ‘root@localhost’ (Using password: YES)”-error when trying to access a MySQL-Server on a host which is port-forwarded for my localhost.

        -

        When you are using a port on your localhost, which you redirect via -port-forwarding to another host, MySQL is not resolving the localhost -as expected. Erik Wasser explains: The solution is: if your host is -“localhost” MySQL (the command line tool mysql as well) always -tries to use the socket connection for speeding up things. And that -doesn’t work in this configuration with port forwarding. If you enter -“127.0.0.1” as hostname, everything is right and MySQL uses the -TCP connection.

        -
        -
        -

        2.7 Using and creating themes

        -

        See Custom Themes.

        -
        -
        -

        2.8 I get “Missing parameters” errors, what can I do?

        -

        Here are a few points to check:

        -
          -
        • In config.inc.php, try to leave the $cfg['PmaAbsoluteUri'] directive empty. See also -4.7 Authentication window is displayed more than once, why?.

        • -
        • Maybe you have a broken PHP installation or you need to upgrade your -Zend Optimizer. See <https://bugs.php.net/bug.php?id=31134>.

        • -
        • If you are using Hardened PHP with the ini directive -varfilter.max_request_variables set to the default (200) or -another low value, you could get this error if your table has a high -number of columns. Adjust this setting accordingly. (Thanks to Klaus -Dorninger for the hint).

        • -
        • In the php.ini directive arg_separator.input, a value of “;” -will cause this error. Replace it with “&;”.

        • -
        • If you are using Suhosin, you -might want to increase request limits.

        • -
        • The directory specified in the php.ini directive -session.save_path does not exist or is read-only (this can be caused -by bug in the PHP installer).

        • -
        -
        -
        -

        2.9 Seeing an upload progress bar

        -

        To be able to see a progress bar during your uploads, your server must -have the uploadprogress extension, and -you must be running PHP 5.4.0 or higher. Moreover, the JSON extension -has to be enabled in your PHP.

        -

        If using PHP 5.4.0 or higher, you must set -session.upload_progress.enabled to 1 in your php.ini. However, -starting from phpMyAdmin version 4.0.4, session-based upload progress has -been temporarily deactivated due to its problematic behavior.

        -
        -
        -
        -

        Known limitations

        -
        -

        3.1 When using HTTP authentication, a user who logged out can not log in again in with the same nick.

        -

        This is related to the authentication mechanism (protocol) used by -phpMyAdmin. To bypass this problem: just close all the opened browser -windows and then go back to phpMyAdmin. You should be able to log in -again.

        -
        -
        -

        3.2 When dumping a large table in compressed mode, I get a memory limit error or a time limit error.

        -

        Compressed dumps are built in memory and because of this are limited -to php’s memory limit. For gzip/bzip2 exports this can be overcome -since 2.5.4 using $cfg['CompressOnFly'] (enabled by default). -zip exports can not be handled this way, so if you need zip files for larger -dump, you have to use another way.

        -
        -
        -

        3.3 With InnoDB tables, I lose foreign key relationships when I rename a table or a column.

        -

        This is an InnoDB bug, see <https://bugs.mysql.com/bug.php?id=21704>.

        -
        -
        -

        3.4 I am unable to import dumps I created with the mysqldump tool bundled with the MySQL server distribution.

        -

        The problem is that older versions of mysqldump created invalid -comments like this:

        -
        -- MySQL dump 8.22
        ---
        --- Host: localhost Database: database
        ----------------------------------------------------------
        --- Server version 3.23.54
        -
        -
        -

        The invalid part of the code is the horizontal line made of dashes -that appears once in every dump created with mysqldump. If you want to -run your dump you have to turn it into valid MySQL. This means, you -have to add a whitespace after the first two dashes of the line or add -a # before it: -- ------------------------------------------------------- or -#---------------------------------------------------------

        -
        -
        -

        3.5 When using nested folders, multiple hierarchies are displayed in a wrong manner.

        -

        Please note that you should not use the separating string multiple -times without any characters between them, or at the beginning/end of -your table name. If you have to, think about using another -TableSeparator or disabling that feature.

        - -
        -
        -

        3.6 (withdrawn).

        -
        -
        -

        3.7 I have table with many (100+) columns and when I try to browse table I get series of errors like “Warning: unable to parse url”. How can this be fixed?

        -

        Your table neither have a primary key nor an unique key, so we must -use a long expression to identify this row. This causes problems to -parse_url function. The workaround is to create a primary key -or unique key.

        -
        -
        -

        3.8 I cannot use (clickable) HTML-forms in columns where I put a MIME-Transformation onto!

        -

        Due to a surrounding form-container (for multi-row delete checkboxes), -no nested forms can be put inside the table where phpMyAdmin displays -the results. You can, however, use any form inside of a table if keep -the parent form-container with the target to tbl_row_delete.php and -just put your own input-elements inside. If you use a custom submit -input field, the form will submit itself to the displaying page again, -where you can validate the $HTTP_POST_VARS in a transformation. For -a tutorial on how to effectively use transformations, see our Link -section on the -official phpMyAdmin-homepage.

        -
        -
        -

        3.9 I get error messages when using “–sql_mode=ANSI” for the MySQL server.

        -

        When MySQL is running in ANSI-compatibility mode, there are some major -differences in how SQL is structured (see -<https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html>). Most important of all, the -quote-character (“) is interpreted as an identifier quote character and not as -a string quote character, which makes many internal phpMyAdmin operations into -invalid SQL statements. There is no -workaround to this behaviour. News to this item will be posted in issue -#7383.

        -
        -
        -

        3.10 Homonyms and no primary key: When the results of a SELECT display more that one column with the same value (for example SELECT lastname from employees where firstname like 'A%' and two “Smith” values are displayed), if I click Edit I cannot be sure that I am editing the intended row.

        -

        Please make sure that your table has a primary key, so that phpMyAdmin -can use it for the Edit and Delete links.

        -
        -
        -

        3.11 The number of rows for InnoDB tables is not correct.

        -

        phpMyAdmin uses a quick method to get the row count, and this method only -returns an approximate count in the case of InnoDB tables. See -$cfg['MaxExactCount'] for a way to modify those results, but -this could have a serious impact on performance. -However, one can easily replace the approximate row count with exact count by -simply clicking on the approximate count. This can also be done for all tables -at once by clicking on the rows sum displayed at the bottom.

        -
        -

        See also

        -

        $cfg['MaxExactCount']

        -
        -
        -
        -

        3.12 (withdrawn).

        -
        -
        -

        3.13 I get an error when entering USE followed by a db name containing an hyphen.

        -

        The tests I have made with MySQL 5.1.49 shows that the API does not -accept this syntax for the USE command.

        -
        -
        -

        3.14 I am not able to browse a table when I don’t have the right to SELECT one of the columns.

        -

        This has been a known limitation of phpMyAdmin since the beginning and -it’s not likely to be solved in the future.

        -
        -
        -

        3.15 (withdrawn).

        -
        -
        -

        3.16 (withdrawn).

        -
        -
        -

        3.17 (withdrawn).

        -
        -
        -

        3.18 When I import a CSV file that contains multiple tables, they are lumped together into a single table.

        -

        There is no reliable way to differentiate tables in CSV format. For the -time being, you will have to break apart CSV files containing multiple -tables.

        -
        -
        -

        3.19 When I import a file and have phpMyAdmin determine the appropriate data structure it only uses int, decimal, and varchar types.

        -

        Currently, the import type-detection system can only assign these -MySQL types to columns. In future, more will likely be added but for -the time being you will have to edit the structure to your liking -post-import. Also, you should note the fact that phpMyAdmin will use -the size of the largest item in any given column as the column size -for the appropriate type. If you know you will be adding larger items -to that column then you should manually adjust the column sizes -accordingly. This is done for the sake of efficiency.

        -
        -
        -

        3.20 After upgrading, some bookmarks are gone or their content cannot be shown.

        -

        At some point, the character set used to store bookmark content has changed. -It’s better to recreate your bookmark from the newer phpMyAdmin version.

        -
        -
        -

        3.21 I am unable to log in with a username containing unicode characters such as á.

        -

        This can happen if MySQL server is not configured to use utf-8 as default -charset. This is a limitation of how PHP and the MySQL server interact; there -is no way for PHP to set the charset before authenticating.

        - -
        -
        -
        -

        ISPs, multi-user installations

        -
        -

        4.1 I’m an ISP. Can I setup one central copy of phpMyAdmin or do I need to install it for each customer?

        -

        Since version 2.0.3, you can setup a central copy of phpMyAdmin for all your -users. The development of this feature was kindly sponsored by NetCologne GmbH. -This requires a properly setup MySQL user management and phpMyAdmin -HTTP or cookie authentication.

        - -
        -
        -

        4.2 What’s the preferred way of making phpMyAdmin secure against evil access?

        -

        This depends on your system. If you’re running a server which cannot be -accessed by other people, it’s sufficient to use the directory protection -bundled with your webserver (with Apache you can use .htaccess files, -for example). If other people have telnet access to your server, you should use -phpMyAdmin’s HTTP or cookie authentication features.

        -

        Suggestions:

        -
          -
        • Your config.inc.php file should be chmod 660.

        • -
        • All your phpMyAdmin files should be chown -R phpmy.apache, where phpmy -is a user whose password is only known to you, and apache is the group -under which Apache runs.

        • -
        • Follow security recommendations for PHP and your webserver.

        • -
        -
        -
        -

        4.3 I get errors about not being able to include a file in /lang or in /libraries.

        -

        Check php.ini, or ask your sysadmin to check it. The -include_path must contain “.” somewhere in it, and -open_basedir, if used, must contain “.” and “./lang” to allow -normal operation of phpMyAdmin.

        -
        -
        -

        4.4 phpMyAdmin always gives “Access denied” when using HTTP authentication.

        -

        This could happen for several reasons:

        - -
        -
        -

        4.5 Is it possible to let users create their own databases?

        -

        Starting with 2.2.5, in the user management page, you can enter a -wildcard database name for a user (for example “joe%”), and put the -privileges you want. For example, adding SELECT, INSERT, UPDATE, -DELETE, CREATE, DROP, INDEX, ALTER would let a user create/manage -their database(s).

        -
        -
        -

        4.6 How can I use the Host-based authentication additions?

        -

        If you have existing rules from an old .htaccess file, you can take them and -add a username between the 'deny'/'allow' and 'from' -strings. Using the username wildcard of '%' would be a major -benefit here if your installation is suited to using it. Then you can -just add those updated lines into the -$cfg['Servers'][$i]['AllowDeny']['rules'] array.

        -

        If you want a pre-made sample, you can try this fragment. It stops the -‘root’ user from logging in from any networks other than the private -network IP blocks.

        -
        //block root from logging in except from the private networks
        -$cfg['Servers'][$i]['AllowDeny']['order'] = 'deny,allow';
        -$cfg['Servers'][$i]['AllowDeny']['rules'] = [
        -    'deny root from all',
        -    'allow root from localhost',
        -    'allow root from 10.0.0.0/8',
        -    'allow root from 192.168.0.0/16',
        -    'allow root from 172.16.0.0/12',
        -];
        -
        -
        -
        -
        -

        4.7 Authentication window is displayed more than once, why?

        -

        This happens if you are using a URL to start phpMyAdmin which is -different than the one set in your $cfg['PmaAbsoluteUri']. For -example, a missing “www”, or entering with an IP address while a domain -name is defined in the config file.

        -
        -
        -

        4.8 Which parameters can I use in the URL that starts phpMyAdmin?

        -

        When starting phpMyAdmin, you can use the db -and server parameters. This last one can contain -either the numeric host index (from $i of the configuration file) -or one of the host names present in the configuration file.

        -

        For example, to jump directly to a particular database, a URL can be constructed as -https://example.com/phpmyadmin/?db=sakila.

        - -
        -

        Changed in version 4.9.0: Support for using the pma_username and pma_password parameters was removed -in phpMyAdmin 4.9.0 (see PMASA-2019-4).

        -
        -
        -
        -
        -

        Browsers or client OS

        -
        -

        5.1 I get an out of memory error, and my controls are non-functional, when trying to create a table with more than 14 columns.

        -

        We could reproduce this problem only under Win98/98SE. Testing under -WinNT4 or Win2K, we could easily create more than 60 columns. A -workaround is to create a smaller number of columns, then come back to -your table properties and add the other columns.

        -
        -
        -

        5.2 With Xitami 2.5b4, phpMyAdmin won’t process form fields.

        -

        This is not a phpMyAdmin problem but a Xitami known bug: you’ll face -it with each script/website that use forms. Upgrade or downgrade your -Xitami server.

        -
        -
        -

        5.3 I have problems dumping tables with Konqueror (phpMyAdmin 2.2.2).

        -

        With Konqueror 2.1.1: plain dumps, zip and gzip dumps work ok, except -that the proposed file name for the dump is always ‘tbl_dump.php’. -The bzip2 dumps don’t seem to work. With Konqueror 2.2.1: plain dumps -work; zip dumps are placed into the user’s temporary directory, so -they must be moved before closing Konqueror, or else they disappear. -gzip dumps give an error message. Testing needs to be done for -Konqueror 2.2.2.

        -
        - -
        -

        5.5 (withdrawn).

        -
        -
        -

        5.6 (withdrawn).

        -
        -
        -

        5.7 I refresh (reload) my browser, and come back to the welcome page.

        -

        Some browsers support right-clicking into the frame you want to -refresh, just do this in the right frame.

        -
        -
        -

        5.8 With Mozilla 0.9.7 I have problems sending a query modified in the query box.

        -

        Looks like a Mozilla bug: 0.9.6 was OK. We will keep an eye on future -Mozilla versions.

        -
        -
        -

        5.9 With Mozilla 0.9.? to 1.0 and Netscape 7.0-PR1 I can’t type a whitespace in the SQL-Query edit area: the page scrolls down.

        -

        This is a Mozilla bug (see bug #26882 at BugZilla).

        -
        -
        -

        5.10 (withdrawn).

        -
        -
        -

        5.11 Extended-ASCII characters like German umlauts are displayed wrong.

        -

        Please ensure that you have set your browser’s character set to the -one of the language file you have selected on phpMyAdmin’s start page. -Alternatively, you can try the auto detection mode that is supported -by the recent versions of the most browsers.

        -
        -
        -

        5.12 Mac OS X Safari browser changes special characters to “?”.

        -

        This issue has been reported by a macOS user, who adds that Chimera, -Netscape and Mozilla do not have this problem.

        -
        -
        -

        5.13 (withdrawn)

        -
        -
        -

        5.14 (withdrawn)

        -
        -
        -

        5.15 (withdrawn)

        -
        -
        -

        5.16 With Internet Explorer, I get “Access is denied” Javascript errors. Or I cannot make phpMyAdmin work under Windows.

        -

        Please check the following points:

        -
          -
        • Maybe you have defined your $cfg['PmaAbsoluteUri'] setting in -config.inc.php to an IP address and you are starting phpMyAdmin -with a URL containing a domain name, or the reverse situation.

        • -
        • Security settings in IE and/or Microsoft Security Center are too high, -thus blocking scripts execution.

        • -
        • The Windows Firewall is blocking Apache and MySQL. You must allow -HTTP ports (80 or 443) and MySQL -port (usually 3306) in the “in” and “out” directions.

        • -
        -
        -
        -

        5.17 With Firefox, I cannot delete rows of data or drop a database.

        -

        Many users have confirmed that the Tabbrowser Extensions plugin they -installed in their Firefox is causing the problem.

        -
        -
        -

        5.18 (withdrawn)

        -
        -
        -

        5.19 I get JavaScript errors in my browser.

        -

        Issues have been reported with some combinations of browser -extensions. To troubleshoot, disable all extensions then clear your -browser cache to see if the problem goes away.

        -
        -
        -

        5.20 I get errors about violating Content Security Policy.

        -

        If you see errors like:

        -
        Refused to apply inline style because it violates the following Content Security Policy directive
        -
        -
        -

        This is usually caused by some software, which wrongly rewrites -Content Security Policy headers. Usually this is caused by -antivirus proxy or browser addons which are causing such errors.

        -

        If you see these errors, try disabling the HTTP proxy in antivirus or disable -the Content Security Policy rewriting in it. If that doesn’t -help, try disabling browser extensions.

        -

        Alternatively it can be also server configuration issue (if the webserver is -configured to emit Content Security Policy headers, they can -override the ones from phpMyAdmin).

        -

        Programs known to cause these kind of errors:

        -
          -
        • Kaspersky Internet Security

        • -
        -
        -
        -

        5.21 I get errors about potentially unsafe operation when browsing table or executing SQL query.

        -

        If you see errors like:

        -
        A potentially unsafe operation has been detected in your request to this site.
        -
        -
        -

        This is usually caused by web application firewall doing requests filtering. It -tries to prevent SQL injection, however phpMyAdmin is tool designed to execute -SQL queries, thus it makes it unusable.

        -

        Please allow phpMyAdmin scripts from the web application firewall settings -or disable it completely for phpMyAdmin path.

        -

        Programs known to cause these kind of errors:

        -
          -
        • Wordfence Web Application Firewall

        • -
        -
        -
        -
        -

        Using phpMyAdmin

        -
        -

        6.1 I can’t insert new rows into a table / I can’t create a table - MySQL brings up a SQL error.

        -

        Examine the SQL error with care. -Often the problem is caused by specifying a wrong column-type. Common -errors include:

        -
          -
        • Using VARCHAR without a size argument

        • -
        • Using TEXT or BLOB with a size argument

        • -
        -

        Also, look at the syntax chapter in the MySQL manual to confirm that -your syntax is correct.

        -
        -
        -

        6.2 When I create a table, I set an index for two columns and phpMyAdmin generates only one index with those two columns.

        -

        This is the way to create a multi-columns index. If you want two -indexes, create the first one when creating the table, save, then -display the table properties and click the Index link to create the -other index.

        -
        -
        -

        6.3 How can I insert a null value into my table?

        -

        Since version 2.2.3, you have a checkbox for each column that can be -null. Before 2.2.3, you had to enter “null”, without the quotes, as -the column’s value. Since version 2.5.5, you have to use the checkbox -to get a real NULL value, so if you enter “NULL” this means you want a -literal NULL in the column, and not a NULL value (this works in PHP4).

        -
        -
        -

        6.4 How can I backup my database or table?

        -

        Click on a database or table name in the navigation panel, the properties will -be displayed. Then on the menu, click “Export”, you can dump the structure, the -data, or both. This will generate standard SQL statements that can be -used to recreate your database/table. You will need to choose “Save as file”, -so that phpMyAdmin can transmit the resulting dump to your station. Depending -on your PHP configuration, you will see options to compress the dump. See also -the $cfg['ExecTimeLimit'] configuration variable. For -additional help on this subject, look for the word “dump” in this document.

        -
        -
        -

        6.5 How can I restore (upload) my database or table using a dump? How can I run a “.sql” file?

        -

        Click on a database name in the navigation panel, the properties will -be displayed. Select “Import” from the list of tabs in the right–hand -frame (or “SQL” if your phpMyAdmin -version is previous to 2.7.0). In the “Location of the text file” -section, type in the path to your dump filename, or use the Browse -button. Then click Go. With version 2.7.0, the import engine has been -re–written, if possible it is suggested that you upgrade to take -advantage of the new features. For additional help on this subject, -look for the word “upload” in this document.

        -

        Note: For errors while importing of dumps exported from older MySQL versions to newer MySQL versions, -please check 6.41 I get import errors while importing the dumps exported from older MySQL versions (pre-5.7.6) into newer MySQL versions (5.7.7+), but they work fine when imported back on same older versions ?.

        -
        -
        -

        6.6 How can I use the relation table in Query-by-example?

        -

        Here is an example with the tables persons, towns and countries, all -located in the database “mydb”. If you don’t have a pma__relation -table, create it as explained in the configuration section. Then -create the example tables:

        -
        CREATE TABLE REL_countries (
        -country_code char(1) NOT NULL default '',
        -description varchar(10) NOT NULL default '',
        -PRIMARY KEY (country_code)
        -) ENGINE=MyISAM;
        -
        -INSERT INTO REL_countries VALUES ('C', 'Canada');
        -
        -CREATE TABLE REL_persons (
        -id tinyint(4) NOT NULL auto_increment,
        -person_name varchar(32) NOT NULL default '',
        -town_code varchar(5) default '0',
        -country_code char(1) NOT NULL default '',
        -PRIMARY KEY (id)
        -) ENGINE=MyISAM;
        -
        -INSERT INTO REL_persons VALUES (11, 'Marc', 'S', 'C');
        -INSERT INTO REL_persons VALUES (15, 'Paul', 'S', 'C');
        -
        -CREATE TABLE REL_towns (
        -town_code varchar(5) NOT NULL default '0',
        -description varchar(30) NOT NULL default '',
        -PRIMARY KEY (town_code)
        -) ENGINE=MyISAM;
        -
        -INSERT INTO REL_towns VALUES ('S', 'Sherbrooke');
        -INSERT INTO REL_towns VALUES ('M', 'Montréal');
        -
        -
        -

        To setup appropriate links and display information:

        -
          -
        • on table “REL_persons” click Structure, then Relation view

        • -
        • for “town_code”, choose from dropdowns, “mydb”, “REL_towns”, “town_code” -for foreign database, table and column respectively

        • -
        • for “country_code”, choose from dropdowns, “mydb”, “REL_countries”, -“country_code” for foreign database, table and column respectively

        • -
        • on table “REL_towns” click Structure, then Relation view

        • -
        • in “Choose column to display”, choose “description”

        • -
        • repeat the two previous steps for table “REL_countries”

        • -
        -

        Then test like this:

        -
          -
        • Click on your db name in the navigation panel

        • -
        • Choose “Query”

        • -
        • Use tables: persons, towns, countries

        • -
        • Click “Update query”

        • -
        • In the columns row, choose persons.person_name and click the “Show” -tickbox

        • -
        • Do the same for towns.description and countries.descriptions in the -other 2 columns

        • -
        • Click “Update query” and you will see in the query box that the -correct joins have been generated

        • -
        • Click “Submit query”

        • -
        -
        -
        -

        6.7 How can I use the “display column” feature?

        -

        Starting from the previous example, create the pma__table_info as -explained in the configuration section, then browse your persons -table, and move the mouse over a town code or country code. See also -6.21 In edit/insert mode, how can I see a list of possible values for a column, based on some foreign table? for an additional feature that “display column” -enables: drop-down list of possible values.

        -
        -
        -

        6.8 How can I produce a PDF schema of my database?

        -

        First the configuration variables “relation”, “table_coords” and -“pdf_pages” have to be filled in.

        -
          -
        • Select your database in the navigation panel.

        • -
        • Choose “Designer” in the navigation bar at the top.

        • -
        • Move the tables the way you want them.

        • -
        • Choose “Export schema” in the left menu.

        • -
        • The export modal will open.

        • -
        • Select the type of export to PDF, you may adjust the other settings.

        • -
        • Submit the form and the file will start downloading.

        • -
        -
        -

        See also

        -

        Relations

        -
        -
        -
        -

        6.9 phpMyAdmin is changing the type of one of my columns!

        -

        No, it’s MySQL that is doing silent column type changing.

        -
        -
        -

        6.10 When creating a privilege, what happens with underscores in the database name?

        -

        If you do not put a backslash before the underscore, this is a -wildcard grant, and the underscore means “any character”. So, if the -database name is “john_db”, the user would get rights to john1db, -john2db … If you put a backslash before the underscore, it means -that the database name will have a real underscore.

        -
        -
        -

        6.11 What is the curious symbol ø in the statistics pages?

        -

        It means “average”.

        -
        -
        -

        6.12 I want to understand some Export options.

        -

        Structure:

        -
          -
        • “Add DROP TABLE” will add a line telling MySQL to drop the table, if it already -exists during the import. It does NOT drop the table after your -export, it only affects the import file.

        • -
        • “If Not Exists” will only create the table if it doesn’t exist. -Otherwise, you may get an error if the table name exists but has a -different structure.

        • -
        • “Add AUTO_INCREMENT value” ensures that AUTO_INCREMENT value (if -any) will be included in backup.

        • -
        • “Enclose table and column names with backquotes” ensures that column -and table names formed with special characters are protected.

        • -
        • “Add into comments” includes column comments, relations, and media -types set in the pmadb in the dump as SQL comments -(/* xxx */).

        • -
        -

        Data:

        -
          -
        • “Complete inserts” adds the column names on every INSERT command, for -better documentation (but resulting file is bigger).

        • -
        • “Extended inserts” provides a shorter dump file by using only once the -INSERT verb and the table name.

        • -
        • “Delayed inserts” are best explained in the MySQL manual - INSERT DELAYED Syntax.

        • -
        • “Ignore inserts” treats errors as a warning instead. Again, more info -is provided in the MySQL manual - INSERT Syntax, but basically with -this selected, invalid values are adjusted and inserted rather than -causing the entire statement to fail.

        • -
        -
        -
        -

        6.13 I would like to create a database with a dot in its name.

        -

        This is a bad idea, because in MySQL the syntax “database.table” is -the normal way to reference a database and table name. Worse, MySQL -will usually let you create a database with a dot, but then you cannot -work with it, nor delete it.

        -
        -
        -

        6.14 (withdrawn).

        -
        -
        -

        6.15 I want to add a BLOB column and put an index on it, but MySQL says “BLOB column ‘…’ used in key specification without a key length”.

        -

        The right way to do this, is to create the column without any indexes, -then display the table structure and use the “Create an index” dialog. -On this page, you will be able to choose your BLOB column, and set a -size to the index, which is the condition to create an index on a BLOB -column.

        -
        -
        -

        6.16 How can I simply move in page with plenty editing fields?

        -

        You can use Ctrl+arrows (Option+Arrows in Safari) for moving on -most pages with many editing fields (table structure changes, row editing, -etc.).

        -
        -
        -

        6.17 Transformations: I can’t enter my own mimetype! What is this feature then useful for?

        -

        Defining mimetypes is of no use if you can’t put -transformations on them. Otherwise you could just put a comment on the -column. Because entering your own mimetype will cause serious syntax -checking issues and validation, this introduces a high-risk false- -user-input situation. Instead you have to initialize mimetypes using -functions or empty mimetype definitions.

        -

        Plus, you have a whole overview of available mimetypes. Who knows all those -mimetypes by heart so they can enter it at will?

        -
        -
        -

        6.18 Bookmarks: Where can I store bookmarks? Why can’t I see any bookmarks below the query box? What are these variables for?

        -

        You need to have configured the phpMyAdmin configuration storage for using bookmarks -feature. Once you have done that, you can use bookmarks in the SQL tab.

        -
        -

        See also

        -

        Bookmarks

        -
        -
        -
        -

        6.19 How can I create simple LATEX document to include exported table?

        -

        You can simply include table in your LATEX documents, -minimal sample document should look like following one (assuming you -have table exported in file table.tex):

        -
        \documentclass{article} % or any class you want
        -\usepackage{longtable}  % for displaying table
        -\begin{document}        % start of document
        -\include{table}         % including exported table
        -\end{document}          % end of document
        -
        -
        -
        -
        -

        6.20 I see a lot of databases which are not mine, and cannot access them.

        -

        You have one of these global privileges: CREATE TEMPORARY TABLES, SHOW -DATABASES, LOCK TABLES. Those privileges also enable users to see all the -database names. So if your users do not need those privileges, you can remove -them and their databases list will shorten.

        - -
        -
        -

        6.21 In edit/insert mode, how can I see a list of possible values for a column, based on some foreign table?

        -

        You have to setup appropriate links between the tables, and also setup -the “display column” in the foreign table. See 6.6 How can I use the relation table in Query-by-example? for an -example. Then, if there are 100 values or less in the foreign table, a -drop-down list of values will be available. You will see two lists of -values, the first list containing the key and the display column, the -second list containing the display column and the key. The reason for -this is to be able to type the first letter of either the key or the -display column. For 100 values or more, a distinct window will appear, -to browse foreign key values and choose one. To change the default -limit of 100, see $cfg['ForeignKeyMaxLimit'].

        -
        -
        -

        6.22 Bookmarks: Can I execute a default bookmark automatically when entering Browse mode for a table?

        -

        Yes. If a bookmark has the same label as a table name and it’s not a -public bookmark, it will be executed.

        -
        -

        See also

        -

        Bookmarks

        -
        -
        -
        -

        6.23 Export: I heard phpMyAdmin can export Microsoft Excel files?

        -

        You can use CSV for Microsoft Excel, -which works out of the box.

        -
        -

        Changed in version 3.4.5: Since phpMyAdmin 3.4.5 support for direct export to Microsoft Excel version -97 and newer was dropped.

        -
        -
        -
        -

        6.24 Now that phpMyAdmin supports native MySQL 4.1.x column comments, what happens to my column comments stored in pmadb?

        -

        Automatic migration of a table’s pmadb-style column comments to the -native ones is done whenever you enter Structure page for this table.

        -
        -
        -

        6.25 (withdrawn).

        -
        -
        -

        6.26 How can I select a range of rows?

        -

        Click the first row of the range, hold the shift key and click the -last row of the range. This works everywhere you see rows, for example -in Browse mode or on the Structure page.

        -
        -
        -

        6.27 What format strings can I use?

        -

        In all places where phpMyAdmin accepts format strings, you can use -@VARIABLE@ expansion and strftime -format strings. The expanded variables depend on a context (for -example, if you haven’t chosen a table, you can not get the table -name), but the following variables can be used:

        -
        -
        @HTTP_HOST@

        HTTP host that runs phpMyAdmin

        -
        -
        @SERVER@

        MySQL server name

        -
        -
        @VERBOSE@

        Verbose MySQL server name as defined in $cfg['Servers'][$i]['verbose']

        -
        -
        @VSERVER@

        Verbose MySQL server name if set, otherwise normal

        -
        -
        @DATABASE@

        Currently opened database

        -
        -
        @TABLE@

        Currently opened table

        -
        -
        @COLUMNS@

        Columns of the currently opened table

        -
        -
        @PHPMYADMIN@

        phpMyAdmin with version

        -
        -
        -
        -
        -

        6.28 (withdrawn).

        -
        -
        -

        6.29 Why can’t I get a chart from my query result table?

        -

        Not every table can be put to the chart. Only tables with one, two or -three columns can be visualised as a chart. Moreover the table must be -in a special format for chart script to understand it. Currently -supported formats can be found in Charts.

        -
        -
        -

        6.30 Import: How can I import ESRI Shapefiles?

        -

        An ESRI Shapefile is actually a set of several files, where .shp file -contains geometry data and .dbf file contains data related to those -geometry data. To read data from .dbf file you need to have PHP -compiled with the dBase extension (–enable-dbase). Otherwise only -geometry data will be imported.

        -

        To upload these set of files you can use either of the following -methods:

        -

        Configure upload directory with $cfg['UploadDir'], upload both .shp and .dbf files with -the same filename and chose the .shp file from the import page.

        -

        Create a zip archive with .shp and .dbf files and import it. For this -to work, you need to set $cfg['TempDir'] to a place where the web server user can -write (for example './tmp').

        -

        To create the temporary directory on a UNIX-based system, you can do:

        -
        cd phpMyAdmin
        -mkdir tmp
        -chmod o+rwx tmp
        -
        -
        -
        -
        -

        6.31 How do I create a relation in designer?

        -

        To select relation, click: The display column is shown in pink. To -set/unset a column as the display column, click the “Choose column to -display” icon, then click on the appropriate column name.

        -
        -
        -

        6.32 How can I use the zoom search feature?

        -

        The Zoom search feature is an alternative to table search feature. It allows -you to explore a table by representing its data in a scatter plot. You can -locate this feature by selecting a table and clicking the Search -tab. One of the sub-tabs in the Table Search page is -Zoom Search.

        -

        Consider the table REL_persons in 6.6 How can I use the relation table in Query-by-example? for -an example. To use zoom search, two columns need to be selected, for -example, id and town_code. The id values will be represented on one -axis and town_code values on the other axis. Each row will be -represented as a point in a scatter plot based on its id and -town_code. You can include two additional search criteria apart from -the two fields to display.

        -

        You can choose which field should be -displayed as label for each point. If a display column has been set -for the table (see 6.7 How can I use the “display column” feature?), it is taken as the label unless -you specify otherwise. You can also select the maximum number of rows -you want to be displayed in the plot by specifing it in the ‘Max rows -to plot’ field. Once you have decided over your criteria, click ‘Go’ -to display the plot.

        -

        After the plot is generated, you can use the -mouse wheel to zoom in and out of the plot. In addition, panning -feature is enabled to navigate through the plot. You can zoom-in to a -certain level of detail and use panning to locate your area of -interest. Clicking on a point opens a dialogue box, displaying field -values of the data row represented by the point. You can edit the -values if required and click on submit to issue an update query. Basic -instructions on how to use can be viewed by clicking the ‘How to use?’ -link located just above the plot.

        -
        -
        -

        6.33 When browsing a table, how can I copy a column name?

        -

        Selecting the name of the column within the browse table header cell -for copying is difficult, as the columns support reordering by -dragging the header cells as well as sorting by clicking on the linked -column name. To copy a column name, double-click on the empty area -next to the column name, when the tooltip tells you to do so. This -will show you an input box with the column name. You may right-click -the column name within this input box to copy it to your clipboard.

        -
        -
        -

        6.34 How can I use the Favorite Tables feature?

        -

        Favorite Tables feature is very much similar to Recent Tables feature. -It allows you to add a shortcut for the frequently used tables of any -database in the navigation panel . You can easily navigate to any table -in the list by simply choosing it from the list. These tables are stored -in your browser’s local storage if you have not configured your -phpMyAdmin Configuration Storage. Otherwise these entries are stored in -phpMyAdmin Configuration Storage.

        -

        IMPORTANT: In absence of phpMyAdmin Configuration Storage, your Favorite -tables may be different in different browsers based on your different -selections in them.

        -

        To add a table to Favorite list simply click on the Gray star in front -of a table name in the list of tables of a Database and wait until it -turns to Yellow. -To remove a table from list, simply click on the Yellow star and -wait until it turns Gray again.

        -

        Using $cfg['NumFavoriteTables'] in your config.inc.php -file, you can define the maximum number of favorite tables shown in the -navigation panel. Its default value is 10.

        -
        -
        -

        6.35 How can I use the Range search feature?

        -

        With the help of range search feature, one can specify a range of values for -particular column(s) while performing search operation on a table from the Search -tab.

        -

        To use this feature simply click on the BETWEEN or NOT BETWEEN operators -from the operator select list in front of the column name. On choosing one of the -above options, a dialog box will show up asking for the Minimum and Maximum -value for that column. Only the specified range of values will be included -in case of BETWEEN and excluded in case of NOT BETWEEN from the final results.

        -

        Note: The Range search feature will work only Numeric and Date data type columns.

        -
        -
        -

        6.36 What is Central columns and how can I use this feature?

        -

        As the name suggests, the Central columns feature enables to maintain a central list of -columns per database to avoid similar name for the same data element and bring consistency -of data type for the same data element. You can use the central list of columns to -add an element to any table structure in that database which will save from writing -similar column name and column definition.

        -

        To add a column to central list, go to table structure page, check the columns you want -to include and then simply click on “Add to central columns”. If you want to add all -unique columns from more than one table from a database then go to database structure page, -check the tables you want to include and then select “Add columns to central list”.

        -

        To remove a column from central list, go to Table structure page, check the columns you want -to remove and then simply click on “Remove from central columns”. If you want to remove all -columns from more than one tables from a database then go to database structure page, -check the tables you want to include and then select “Remove columns from central list”.

        -

        To view and manage the central list, select the database you want to manage central columns -for then from the top menu click on “Central columns”. You will be taken to a page where -you will have options to edit, delete or add new columns to central list.

        -
        -
        -

        6.37 How can I use Improve Table structure feature?

        -

        Improve table structure feature helps to bring the table structure upto -Third Normal Form. A wizard is presented to user which asks questions about the -elements during the various steps for normalization and a new structure is proposed -accordingly to bring the table into the First/Second/Third Normal form. -On startup of the wizard, user gets to select upto what normal form they want to -normalize the table structure.

        -

        Here is an example table which you can use to test all of the three First, Second and -Third Normal Form.

        -
        CREATE TABLE `VetOffice` (
        - `petName` varchar(64) NOT NULL,
        - `petBreed` varchar(64) NOT NULL,
        - `petType` varchar(64) NOT NULL,
        - `petDOB` date NOT NULL,
        - `ownerLastName` varchar(64) NOT NULL,
        - `ownerFirstName` varchar(64) NOT NULL,
        - `ownerPhone1` int(12) NOT NULL,
        - `ownerPhone2` int(12) NOT NULL,
        - `ownerEmail` varchar(64) NOT NULL,
        -);
        -
        -
        -

        The above table is not in First normal Form as no primary key exists. Primary key -is supposed to be (petName,`ownerLastName`,`ownerFirstName`) . If the primary key -is chosen as suggested the resultant table won’t be in Second as well as Third Normal -form as the following dependencies exists.

        -
        (OwnerLastName, OwnerFirstName) -> OwnerEmail
        -(OwnerLastName, OwnerFirstName) -> OwnerPhone
        -PetBreed -> PetType
        -
        -
        -

        Which says, OwnerEmail depends on OwnerLastName and OwnerFirstName. -OwnerPhone depends on OwnerLastName and OwnerFirstName. -PetType depends on PetBreed.

        -
        -
        -

        6.38 How can I reassign auto-incremented values?

        -

        Some users prefer their AUTO_INCREMENT values to be consecutive; this is not -always the case after row deletion.

        -

        Here are the steps to accomplish this. These are manual steps because they -involve a manual verification at one point.

        -
          -
        • Ensure that you have exclusive access to the table to rearrange

        • -
        • On your primary key column (i.e. id), remove the AUTO_INCREMENT setting

        • -
        • Delete your primary key in Structure > indexes

        • -
        • Create a new column future_id as primary key, AUTO_INCREMENT

        • -
        • Browse your table and verify that the new increments correspond to what -you’re expecting

        • -
        • Drop your old id column

        • -
        • Rename the future_id column to id

        • -
        • Move the new id column via Structure > Move columns

        • -
        -
        -
        -

        6.39 What is the “Adjust privileges” option when renaming, copying, or moving a database, table, column, or procedure?

        -

        When renaming/copying/moving a database/table/column/procedure, -MySQL does not adjust the original privileges relating to these objects -on its own. By selecting this option, phpMyAdmin will adjust the privilege -table so that users have the same privileges on the new items.

        -

        For example: A user ‘bob’@’localhost’ has a ‘SELECT’ privilege on a -column named ‘id’. Now, if this column is renamed to ‘id_new’, MySQL, -on its own, would not adjust the column privileges to the new column name. -phpMyAdmin can make this adjustment for you automatically.

        -

        Notes:

        -
          -
        • While adjusting privileges for a database, the privileges of all -database-related elements (tables, columns and procedures) are also adjusted -to the database’s new name.

        • -
        • Similarly, while adjusting privileges for a table, the privileges of all -the columns inside the new table are also adjusted.

        • -
        • While adjusting privileges, the user performing the operation must have the following -privileges:

          -
            -
          • SELECT, INSERT, UPDATE, DELETE privileges on following tables: -mysql.`db`, mysql.`columns_priv`, mysql.`tables_priv`, mysql.`procs_priv`

          • -
          • FLUSH privilege (GLOBAL)

          • -
          -
        • -
        -

        Thus, if you want to replicate the database/table/column/procedure as it is -while renaming/copying/moving these objects, make sure you have checked this option.

        -
        -
        -

        6.40 I see “Bind parameters” checkbox in the “SQL” page. How do I write parameterized SQL queries?

        -

        From version 4.5, phpMyAdmin allows users to execute parameterized queries in the “SQL” page. -Parameters should be prefixed with a colon(:) and when the “Bind parameters” checkbox is checked -these parameters will be identified and input fields for these parameters will be presented. -Values entered in these field will be substituted in the query before being executed.

        -
        -
        -

        6.41 I get import errors while importing the dumps exported from older MySQL versions (pre-5.7.6) into newer MySQL versions (5.7.7+), but they work fine when imported back on same older versions ?

        -

        If you get errors like #1031 - Table storage engine for ‘table_name’ doesn’t have this option -while importing the dumps exported from pre-5.7.7 MySQL servers into new MySQL server versions 5.7.7+, -it might be because ROW_FORMAT=FIXED is not supported with InnoDB tables. Moreover, the value of -innodb_strict_mode would define if this would be reported as a warning or as an error.

        -

        Since MySQL version 5.7.9, the default value for innodb_strict_mode is ON and thus would generate -an error when such a CREATE TABLE or ALTER TABLE statement is encountered.

        -

        There are two ways of preventing such errors while importing:

        -
          -
        • Change the value of innodb_strict_mode to OFF before starting the import and turn it ON after -the import is successfully completed.

        • -
        • This can be achieved in two ways:

          -
            -
          • Go to ‘Variables’ page and edit the value of innodb_strict_mode

          • -
          • Run the query : SET GLOBAL `innodb_strict_mode = ‘[value]’`

          • -
          -
        • -
        -

        After the import is done, it is suggested that the value of innodb_strict_mode should be reset to the -original value.

        -
        -
        -
        -

        phpMyAdmin project

        -
        -

        7.1 I have found a bug. How do I inform developers?

        -

        Our issues tracker is located at <https://github.com/phpmyadmin/phpmyadmin/issues>. -For security issues, please refer to the instructions at <https://www.phpmyadmin.net/security> to email -the developers directly.

        -
        -
        -

        7.2 I want to translate the messages to a new language or upgrade an existing language, where do I start?

        -

        Translations are very welcome and all you need to have are the -language skills. The easiest way is to use our online translation -service. You can check -out all the possibilities to translate in the translate section on -our website.

        -
        -
        -

        7.3 I would like to help out with the development of phpMyAdmin. How should I proceed?

        -

        We welcome every contribution to the development of phpMyAdmin. You -can check out all the possibilities to contribute in the contribute -section on our website.

        - -
        -
        -
        -

        Security

        -
        -

        8.1 Where can I get information about the security alerts issued for phpMyAdmin?

        -

        Please refer to <https://www.phpmyadmin.net/security/>.

        -
        -
        -

        8.2 How can I protect phpMyAdmin against brute force attacks?

        -

        If you use Apache web server, phpMyAdmin exports information about -authentication to the Apache environment and it can be used in Apache -logs. Currently there are two variables available:

        -
        -
        userID

        User name of currently active user (they do not have to be logged in).

        -
        -
        userStatus

        Status of currently active user, one of ok (user is logged in), -mysql-denied (MySQL denied user login), allow-denied (user denied -by allow/deny rules), root-denied (root is denied in configuration), -empty-denied (empty password is denied).

        -
        -
        -

        LogFormat directive for Apache can look like following:

        -
        LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %{userID}n %{userStatus}n"   pma_combined
        -
        -
        -

        You can then use any log analyzing tools to detect possible break-in -attempts.

        -
        -
        -

        8.3 Why are there path disclosures when directly loading certain files?

        -

        This is a server configuration problem. Never enable display_errors on a production site.

        -
        -
        -

        8.4 CSV files exported from phpMyAdmin could allow a formula injection attack.

        -

        It is possible to generate a CSV file that, when imported to a spreadsheet program such as Microsoft Excel, -could potentially allow the execution of arbitrary commands.

        -

        The CSV files generated by phpMyAdmin could potentially contain text that would be interpreted by a spreadsheet program as -a formula, but we do not believe escaping those fields is the proper behavior. There is no means to properly escape and -differentiate between a desired text output and a formula that should be escaped, and CSV is a text format where function -definitions should not be interpreted anyway. We have discussed this at length and feel it is the responsibility of the -spreadsheet program to properly parse and sanitize such data on input instead.

        -

        Google also has a similar view.

        -
        -
        -
        -

        Synchronization

        -
        -

        9.1 (withdrawn).

        -
        -
        -

        9.2 (withdrawn).

        -
        -
        -
        - - -
        -
        -
        -
        - -
        -
        - - - - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/genindex.html b/Sources/php_script/script/phpMyAdmin/doc/html/genindex.html deleted file mode 100644 index a8c98cf..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/genindex.html +++ /dev/null @@ -1,2407 +0,0 @@ - - - - - - - - Index — phpMyAdmin 5.2.0 documentation - - - - - - - - - - - - - - -
        -
        -
        -
        - - -

        Index

        - -
        - Symbols - | A - | B - | C - | D - | E - | F - | G - | H - | I - | J - | K - | L - | M - | N - | O - | P - | Q - | R - | S - | T - | U - | V - | W - | X - | Z - -
        -

        Symbols

        - - - -
        - -

        A

        - - - -
        - -

        B

        - - - -
        - -

        C

        - - - -
        - -

        D

        - - - -
        - -

        E

        - - - -
        - -

        F

        - - - -
        - -

        G

        - - - -
        - -

        H

        - - - -
        - -

        I

        - - - -
        - -

        J

        - - - -
        - -

        K

        - - -
        - -

        L

        - - - -
        - -

        M

        - - - -
        - -

        N

        - - - -
        - -

        O

        - - - -
        - -

        P

        - - - -
        - -

        Q

        - - - -
        - -

        R

        - - - -
        - -

        S

        - - - -
        - -

        T

        - - - -
        - -

        U

        - - - -
        - -

        V

        - - - -
        - -

        W

        - - -
        - -

        X

        - - -
        - -

        Z

        - - - -
        - - - -
        -
        -
        -
        - -
        -
        - - - - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/other.html b/Sources/php_script/script/phpMyAdmin/doc/html/other.html deleted file mode 100644 index 08e99e9..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/other.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - - - Other sources of information — phpMyAdmin 5.2.0 documentation - - - - - - - - - - - - - - - - -
        -
        -
        -
        - -
        -

        Other sources of information

        -
        -

        Printed Book

        -

        The definitive guide to using phpMyAdmin is the book Mastering phpMyAdmin for -Effective MySQL Management by Marc Delisle. You can get information on that -book and other officially endorsed books at the phpMyAdmin site.

        -
        -
        -

        Tutorials

        -

        Third party tutorials and articles which you might find interesting:

        -
        -

        Česky (Czech)

        - -
        - -
        -

        Русский (Russian)

        - -
        -
        -
        - - -
        -
        -
        -
        - -
        -
        - - - - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/transformations.html b/Sources/php_script/script/phpMyAdmin/doc/html/transformations.html deleted file mode 100644 index d50063a..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/transformations.html +++ /dev/null @@ -1,251 +0,0 @@ - - - - - - - - Transformations — phpMyAdmin 5.2.0 documentation - - - - - - - - - - - - - - - - -
        -
        -
        -
        - -
        -

        Transformations

        -
        -

        Note

        -

        You need to have configured the phpMyAdmin configuration storage to use the transformations -feature.

        -
        -
        -

        Introduction

        -

        To enable transformations, you have to set up the column_info -table and the proper directives. Please see the Configuration on how to do so.

        -

        phpMyAdmin has two different types of transformations: browser display -transformations, which affect only how the data is shown when browsing -through phpMyAdmin; and input transformations, which affect a value -prior to being inserted through phpMyAdmin. -You can apply different transformations to the contents of each -column. Each transformation has options to define how it will affect the -stored data.

        -

        Say you have a column filename which contains a filename. Normally -you would see in phpMyAdmin only this filename. Using display transformations -you can transform that filename into a HTML link, so you can click -inside of the phpMyAdmin structure on the column’s link and will see -the file displayed in a new browser window. Using transformation -options you can also specify strings to append/prepend to a string or -the format you want the output stored in.

        -

        For a general overview of all available transformations and their -options, you can either go to the Change link for an existing column -or from the dialog to create a new column, in either case there is a link -on that column structure page for “Browser display transformation” and -“Input transformation” which will show more information about each -transformation that is available on your system.

        -

        For a tutorial on how to effectively use transformations, see our -Link section on the -official phpMyAdmin homepage.

        -
        -
        -

        Usage

        -

        Go to the table structure page (reached by clicking on -the ‘Structure’ link for a table). There click on “Change” (or the change -icon) and there you will see the five transformation–related fields at the end of the line. -They are called ‘Media type’, ‘Browser transformation’ and -‘Transformation options’.

        -
          -
        • The field ‘Media type’ is a drop-down field. Select the Media type that -corresponds to the column’s contents. Please note that many transformations -are inactive until a Media type is selected.

        • -
        • The field ‘Browser display transformation’ is a drop-down field. You can -choose from a hopefully growing amount of pre-defined transformations. -See below for information on how to build your own transformation. -There are global transformations and mimetype-bound transformations. -Global transformations can be used for any mimetype. They will take -the mimetype, if necessary, into regard. Mimetype-bound -transformations usually only operate on a certain mimetype. There are -transformations which operate on the main mimetype (like ‘image’), -which will most likely take the subtype into regard, and those who -only operate on a specific subtype (like ‘image/jpeg’). You can use -transformations on mimetypes for which the function was not defined -for. There is no security check for you selected the right -transformation, so take care of what the output will be like.

        • -
        • The field ‘Browser display transformation options’ is a free-type textfield. You have -to enter transform-function specific options here. Usually the -transforms can operate with default options, but it is generally a -good idea to look up the overview to see which options are necessary. -Much like the ENUM/SET-Fields, you have to split up several options -using the format ‘a’,’b’,’c’,…(NOTE THE MISSING BLANKS). This is -because internally the options will be parsed as an array, leaving the -first value the first element in the array, and so forth. If you want -to specify a MIME character set you can define it in the -transformation_options. You have to put that outside of the pre- -defined options of the specific mime-transform, as the last value of -the set. Use the format “’; charset=XXX’”. If you use a transform, for -which you can specify 2 options and you want to append a character -set, enter “‘first parameter’,’second parameter’,’charset=us-ascii’”. -You can, however use the defaults for the parameters: “’’,’’,’charset -=us-ascii’”. The default options can be configured using -$cfg['DefaultTransformations'].

        • -
        • ‘Input transformation’ is another drop-down menu that corresponds exactly -with the instructions above for “Browser display transformation” except -these these affect the data before insertion in to the database. These are -most commonly used to either provide a specialized editor (for example, using -the phpMyAdmin SQL editor interface) or selector (such as for uploading an image). -It’s also possible to manipulate the data such as converting an IPv4 address to binary -or parsing it through a regular expression.

        • -
        • Finally, ‘Input transformation options’ is the equivalent of the “Browser display -transformation options” section above and is where optional and required parameters are entered.

        • -
        -
        -
        -

        File structure

        -

        All specific transformations for mimetypes are defined through class -files in the directory libraries/classes/Plugins/Transformations/. Each of -them extends a certain transformation abstract class declared in -libraries/classes/Plugins/Transformations/Abs.

        -

        They are stored in files to ease customization and to allow easy adding of -new or custom transformations.

        -

        Because the user cannot enter their own mimetypes, it is kept certain that -the transformations will always work. It makes no sense to apply a -transformation to a mimetype the transform-function doesn’t know to -handle.

        -

        There is a file called libraries/classes/Plugins/Transformations.php that provides some -basic functions which can be included by any other transform function.

        -

        The file name convention is [Mimetype]_[Subtype]_[Transformation -Name].php, while the abstract class that it extends has the -name [Transformation Name]TransformationsPlugin. All of the -methods that have to be implemented by a transformations plug-in are:

        -
          -
        1. getMIMEType() and getMIMESubtype() in the main class;

        2. -
        3. getName(), getInfo() and applyTransformation() in the abstract class -it extends.

        4. -
        -

        The getMIMEType(), getMIMESubtype() and getName() methods return the -name of the MIME type, MIME Subtype and transformation accordingly. -getInfo() returns the transformation’s description and possible -options it may receive and applyTransformation() is the method that -does the actual work of the transformation plug-in.

        -

        Please see the libraries/classes/Plugins/Transformations/TEMPLATE and -libraries/classes/Plugins/Transformations/TEMPLATE_ABSTRACT files for adding -your own transformation plug-in. You can also generate a new -transformation plug-in (with or without the abstract transformation -class), by using -scripts/transformations_generator_plugin.sh or -scripts/transformations_generator_main_class.sh.

        -

        The applyTransformation() method always gets passed three variables:

        -
          -
        1. $buffer - Contains the text inside of the column. This is the -text, you want to transform.

        2. -
        3. $options - Contains any user-passed options to a transform -function as an array.

        4. -
        5. $meta - Contains an object with information about your column. The -data is drawn from the output of the mysql_fetch_field() function. This means, all -object properties described on the manual page are available in this -variable and can be used to transform a column accordingly to -unsigned/zerofill/not_null/… properties. The $meta->mimetype -variable contains the original Media type of the column (i.e. -‘text/plain’, ‘image/jpeg’ etc.)

        6. -
        -
        -
        - - -
        -
        -
        -
        - -
        -
        - - - - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/doc/html/vendors.html b/Sources/php_script/script/phpMyAdmin/doc/html/vendors.html deleted file mode 100644 index b7329b6..0000000 --- a/Sources/php_script/script/phpMyAdmin/doc/html/vendors.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - - - - Distributing and packaging phpMyAdmin — phpMyAdmin 5.2.0 documentation - - - - - - - - - - - - - - - - -
        -
        -
        -
        - -
        -

        Distributing and packaging phpMyAdmin

        -

        This document is intended to give pieces of advice to people who want to -redistribute phpMyAdmin inside other software packages such as Linux -distribution or some all in one package including web server and MySQL -server.

        -

        Generally, you can customize some basic aspects (paths to some files and -behavior) in libraries/vendor_config.php.

        -

        For example, if you want setup script to generate a config file in var, change -SETUP_CONFIG_FILE to /var/lib/phpmyadmin/config.inc.php and you -will also probably want to skip directory writable check, so set -SETUP_DIR_WRITABLE to false.

        -
        -

        External libraries

        -

        phpMyAdmin includes several external libraries, you might want to -replace them with system ones if they are available, but please note -that you should test whether the version you provide is compatible with the -one we ship.

        -

        Currently known list of external libraries:

        -
        -
        js/vendor

        jQuery js framework libraries and various js libraries.

        -
        -
        vendor/

        The download kit includes various Composer packages as -dependencies.

        -
        -
        -
        -
        -

        Specific files LICENSES

        -

        phpMyAdmin distributed themes contain some content that is under licenses.

        - -

        CC BY 4.0 or GPL

        -
        -
        -

        Licenses for vendors

        - -
        -
        - - -
        -
        -
        -
        - -
        -
        - - - - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/common.js b/Sources/php_script/script/phpMyAdmin/js/dist/common.js deleted file mode 100644 index 4793ea4..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/common.js +++ /dev/null @@ -1,176 +0,0 @@ -$(function () { - Functions.checkNumberOfFields(); -}); -/** - * Holds common parameters such as server, db, table, etc - * - * The content for this is normally loaded from Header.php or - * Response.php and executed by ajax.js - * - * @test-module CommonParams - */ - -var CommonParams = function () { - /** - * @var {Object} params An associative array of key value pairs - * @access private - */ - var params = {}; // The returned object is the public part of the module - - return { - /** - * Saves all the key value pair that - * are provided in the input array - * - * @param obj hash The input array - * - * @return {void} - */ - setAll: function (obj) { - var updateNavigation = false; - - for (var i in obj) { - if (params[i] !== undefined && params[i] !== obj[i]) { - if (i === 'db' || i === 'table') { - updateNavigation = true; - } - } - - params[i] = obj[i]; - } - - if (updateNavigation && $('#pma_navigation_tree').hasClass('synced')) { - Navigation.showCurrent(); - } - }, - - /** - * Retrieves a value given its key - * Returns empty string for undefined values - * - * @param {string} name The key - * - * @return {string} - */ - get: function (name) { - return params[name]; - }, - - /** - * Saves a single key value pair - * - * @param {string} name The key - * @param {string} value The value - * - * @return {CommonParams} For chainability - */ - set: function (name, value) { - var updateNavigation = false; - - if (name === 'db' || name === 'table' && params[name] !== value) { - updateNavigation = true; - } - - params[name] = value; - - if (updateNavigation && $('#pma_navigation_tree').hasClass('synced')) { - Navigation.showCurrent(); - } - - return this; - }, - - /** - * Returns the url query string using the saved parameters - * - * @param {string} separator New separator - * - * @return {string} - */ - getUrlQuery: function (separator) { - var sep = typeof separator !== 'undefined' ? separator : '?'; - var common = this.get('common_query'); - var argsep = CommonParams.get('arg_separator'); - - if (typeof common === 'string' && common.length > 0) { - // If the last char is the separator, do not add it - // Else add it - common = common.substr(common.length - 1, common.length) === argsep ? common : common + argsep; - } - - return Functions.sprintf('%s%sserver=%s' + argsep + 'db=%s' + argsep + 'table=%s', sep, common, encodeURIComponent(this.get('server')), encodeURIComponent(this.get('db')), encodeURIComponent(this.get('table'))); - } - }; -}(); -/** - * Holds common parameters such as server, db, table, etc - * - * The content for this is normally loaded from Header.php or - * Response.php and executed by ajax.js - */ -// eslint-disable-next-line no-unused-vars - - -var CommonActions = { - /** - * Saves the database name when it's changed - * and reloads the query window, if necessary - * - * @param {string} newDb new_db The name of the new database - * - * @return {void} - */ - setDb: function (newDb) { - if (newDb !== CommonParams.get('db')) { - CommonParams.setAll({ - 'db': newDb, - 'table': '' - }); - } - }, - - /** - * Opens a database in the main part of the page - * - * @param {string} newDb The name of the new database - * - * @return {void} - */ - openDb: function (newDb) { - CommonParams.set('db', newDb).set('table', ''); - this.refreshMain(CommonParams.get('opendb_url')); - }, - - /** - * Refreshes the main frame - * - * @param {any} url Undefined to refresh to the same page - * String to go to a different page, e.g: 'index.php' - * @param {function | undefined} callback - * - * @return {void} - */ - refreshMain: function (url) { - let callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; - var newUrl = url; - - if (!newUrl) { - newUrl = $('#selflink').find('a').attr('href') || window.location.pathname; - newUrl = newUrl.substring(0, newUrl.indexOf('?')); - } - - if (newUrl.indexOf('?') !== -1) { - newUrl += CommonParams.getUrlQuery(CommonParams.get('arg_separator')); - } else { - newUrl += CommonParams.getUrlQuery('?'); - } - - $('', { - href: newUrl - }).appendTo('body').trigger('click').remove(); - - if (typeof callback !== 'undefined') { - AJAX.callback = callback; - } - } -}; \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/console.js b/Sources/php_script/script/phpMyAdmin/js/dist/console.js deleted file mode 100644 index b2a63fe..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/console.js +++ /dev/null @@ -1,1591 +0,0 @@ -/** - * Used in or for console - * - * @package phpMyAdmin-Console - */ - -/* global debugSQLInfo */ -// libraries/classes/Footer.php - -/** - * Console object - */ -var Console = { - /** - * @var {JQuery}, jQuery object, selector is '#pma_console>.content' - * @access private - */ - $consoleContent: null, - - /** - * @var {Jquery}, jQuery object, selector is '#pma_console .content', - * used for resizer - * @access private - */ - $consoleAllContents: null, - - /** - * @var {JQuery}, jQuery object, selector is '#pma_console .toolbar' - * @access private - */ - $consoleToolbar: null, - - /** - * @var {JQuery}, jQuery object, selector is '#pma_console .template' - * @access private - */ - $consoleTemplates: null, - - /** - * @var {JQuery}, jQuery object, form for submit - * @access private - */ - $requestForm: null, - - /** - * @var {object}, contain console config - * @access private - */ - config: null, - - /** - * @var {boolean}, if console element exist, it'll be true - * @access public - */ - isEnabled: false, - - /** - * @var {boolean}, make sure console events bind only once - * @access private - */ - isInitialized: false, - - /** - * Used for console initialize, reinit is ok, just some variable assignment - * - * @return {void} - */ - initialize: function () { - if ($('#pma_console').length === 0) { - return; - } - - Functions.configGet('Console', false, data => { - Console.config = data; - Console.setupAfterInit(); - }); - }, - - /** - * Setup the console after the config has been set at initialize stage - */ - setupAfterInit: function () { - Console.isEnabled = true; // Vars init - - Console.$consoleToolbar = $('#pma_console').find('>.toolbar'); - Console.$consoleContent = $('#pma_console').find('>.content'); - Console.$consoleAllContents = $('#pma_console').find('.content'); - Console.$consoleTemplates = $('#pma_console').find('>.templates'); // Generate a form for post - - Console.$requestForm = $('
        ' + '' + '' + '' + '' + '' + '' + '' + '
        '); - Console.$requestForm.children('[name=token]').val(CommonParams.get('token')); - Console.$requestForm.on('submit', AJAX.requestHandler); // Event binds shouldn't run again - - if (Console.isInitialized === false) { - // Load config first - if (Console.config.AlwaysExpand === true) { - $('#pma_console_options input[name=always_expand]').prop('checked', true); - } - - if (Console.config.StartHistory === true) { - $('#pma_console_options').find('input[name=start_history]').prop('checked', true); - } - - if (Console.config.CurrentQuery === true) { - $('#pma_console_options').find('input[name=current_query]').prop('checked', true); - } - - if (Console.config.EnterExecutes === true) { - $('#pma_console_options').find('input[name=enter_executes]').prop('checked', true); - } - - if (Console.config.DarkTheme === true) { - $('#pma_console_options').find('input[name=dark_theme]').prop('checked', true); - $('#pma_console').find('>.content').addClass('console_dark_theme'); - } - - ConsoleResizer.initialize(); - ConsoleInput.initialize(); - ConsoleMessages.initialize(); - ConsoleBookmarks.initialize(); - ConsoleDebug.initialize(); - Console.$consoleToolbar.children('.console_switch').on('click', Console.toggle); - $('#pma_console').find('.toolbar').children().on('mousedown', function (event) { - event.preventDefault(); - event.stopImmediatePropagation(); - }); - $('#pma_console').find('.button.clear').on('click', function () { - ConsoleMessages.clear(); - }); - $('#pma_console').find('.button.history').on('click', function () { - ConsoleMessages.showHistory(); - }); - $('#pma_console').find('.button.options').on('click', function () { - Console.showCard('#pma_console_options'); - }); - $('#pma_console').find('.button.debug').on('click', function () { - Console.showCard('#debug_console'); - }); - Console.$consoleContent.on('click', function (event) { - if (event.target === this) { - ConsoleInput.focus(); - } - }); - $('#pma_console').find('.mid_layer').on('click', function () { - Console.hideCard($(this).parent().children('.card')); - }); - $('#debug_console').find('.switch_button').on('click', function () { - Console.hideCard($(this).closest('.card')); - }); - $('#pma_bookmarks').find('.switch_button').on('click', function () { - Console.hideCard($(this).closest('.card')); - }); - $('#pma_console_options').find('.switch_button').on('click', function () { - Console.hideCard($(this).closest('.card')); - }); - $('#pma_console_options').find('input[type=checkbox]').on('change', function () { - Console.updateConfig(); - }); - $('#pma_console_options').find('.button.default').on('click', function () { - $('#pma_console_options input[name=always_expand]').prop('checked', false); - $('#pma_console_options').find('input[name=start_history]').prop('checked', false); - $('#pma_console_options').find('input[name=current_query]').prop('checked', true); - $('#pma_console_options').find('input[name=enter_executes]').prop('checked', false); - $('#pma_console_options').find('input[name=dark_theme]').prop('checked', false); - Console.updateConfig(); - }); - $('#pma_console_options').find('input[name=enter_executes]').on('change', function () { - ConsoleMessages.showInstructions(Console.config.EnterExecutes); - }); - $(document).on('ajaxComplete', function (event, xhr, ajaxOptions) { - if (ajaxOptions.dataType && ajaxOptions.dataType.indexOf('json') !== -1) { - return; - } - - if (xhr.status !== 200) { - return; - } - - try { - var data = JSON.parse(xhr.responseText); - Console.ajaxCallback(data); - } catch (e) { - // eslint-disable-next-line no-console, compat/compat - console.trace(); // eslint-disable-next-line no-console - - console.log('Failed to parse JSON: ' + e.message); - } - }); - Console.isInitialized = true; - } // Change console mode from cookie - - - switch (Console.config.Mode) { - case 'collapse': - Console.collapse(); - break; - - case 'info': - Console.info(); - break; - - case 'show': - Console.show(true); - Console.scrollBottom(); - break; - - default: - Console.setConfig('Mode', 'info'); - Console.info(); - } - }, - - /** - * Execute query and show results in console - * - * @param {string} queryString - * @param {object} options - * - * @return {void} - */ - execute: function (queryString, options) { - if (typeof queryString !== 'string' || !/[a-z]|[A-Z]/.test(queryString)) { - return; - } - - Console.$requestForm.children('textarea').val(queryString); - Console.$requestForm.children('[name=server]').attr('value', CommonParams.get('server')); - - if (options && options.db) { - Console.$requestForm.children('[name=db]').val(options.db); - - if (options.table) { - Console.$requestForm.children('[name=table]').val(options.table); - } else { - Console.$requestForm.children('[name=table]').val(''); - } - } else { - Console.$requestForm.children('[name=db]').val(CommonParams.get('db').length > 0 ? CommonParams.get('db') : ''); - } - - Console.$requestForm.find('[name=profiling]').remove(); - - if (options && options.profiling === true) { - Console.$requestForm.append(''); - } - - if (!Functions.confirmQuery(Console.$requestForm[0], Console.$requestForm.children('textarea')[0].value)) { - return; - } - - Console.$requestForm.children('[name=console_message_id]').val(ConsoleMessages.appendQuery({ - 'sql_query': queryString - }).message_id); - Console.$requestForm.trigger('submit'); - ConsoleInput.clear(); - Navigation.reload(); - }, - ajaxCallback: function (data) { - if (data && data.console_message_id) { - ConsoleMessages.updateQuery(data.console_message_id, data.success, data.reloadQuerywindow ? data.reloadQuerywindow : false); - } else if (data && data.reloadQuerywindow) { - if (data.reloadQuerywindow.sql_query.length > 0) { - ConsoleMessages.appendQuery(data.reloadQuerywindow, 'successed').$message.addClass(Console.config.CurrentQuery ? '' : 'hide'); - } - } - }, - - /** - * Change console to collapse mode - * - * @return {void} - */ - collapse: function () { - Console.setConfig('Mode', 'collapse'); - var pmaConsoleHeight = Math.max(92, Console.config.Height); - Console.$consoleToolbar.addClass('collapsed'); - Console.$consoleAllContents.height(pmaConsoleHeight); - Console.$consoleContent.stop(); - Console.$consoleContent.animate({ - 'margin-bottom': -1 * Console.$consoleContent.outerHeight() + 'px' - }, 'fast', 'easeOutQuart', function () { - Console.$consoleContent.css({ - display: 'none' - }); - $(window).trigger('resize'); - }); - Console.hideCard(); - }, - - /** - * Show console - * - * @param {boolean} inputFocus If true, focus the input line after show() - * @return {void} - */ - show: function (inputFocus) { - Console.setConfig('Mode', 'show'); - var pmaConsoleHeight = Math.max(92, Console.config.Height); // eslint-disable-next-line compat/compat - - pmaConsoleHeight = Math.min(Console.config.Height, (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight) - 25); - Console.$consoleContent.css({ - display: 'block' - }); - - if (Console.$consoleToolbar.hasClass('collapsed')) { - Console.$consoleToolbar.removeClass('collapsed'); - } - - Console.$consoleAllContents.height(pmaConsoleHeight); - Console.$consoleContent.stop(); - Console.$consoleContent.animate({ - 'margin-bottom': 0 - }, 'fast', 'easeOutQuart', function () { - $(window).trigger('resize'); - - if (inputFocus) { - ConsoleInput.focus(); - } - }); - }, - - /** - * Change console to SQL information mode - * this mode shows current SQL query - * This mode is the default mode - * - * @return {void} - */ - info: function () { - // Under construction - Console.collapse(); - }, - - /** - * Toggle console mode between collapse/show - * Used for toggle buttons and shortcuts - * - * @return {void} - */ - toggle: function () { - switch (Console.config.Mode) { - case 'collapse': - case 'info': - Console.show(true); - break; - - case 'show': - Console.collapse(); - break; - } - }, - - /** - * Scroll console to bottom - * - * @return {void} - */ - scrollBottom: function () { - Console.$consoleContent.scrollTop(Console.$consoleContent.prop('scrollHeight')); - }, - - /** - * Show card - * - * @param {string | JQuery} cardSelector Selector, select string will be "#pma_console " + cardSelector - * this param also can be JQuery object, if you need. - * - * @return {void} - */ - showCard: function (cardSelector) { - var $card = null; - - if (typeof cardSelector !== 'string') { - if (cardSelector.length > 0) { - $card = cardSelector; - } else { - return; - } - } else { - $card = $('#pma_console ' + cardSelector); - } - - if ($card.length === 0) { - return; - } - - $card.parent().children('.mid_layer').show().fadeTo(0, 0.15); - $card.addClass('show'); - ConsoleInput.blur(); - - if ($card.parents('.card').length > 0) { - Console.showCard($card.parents('.card')); - } - }, - - /** - * Scroll console to bottom - * - * @param {object} $targetCard Target card JQuery object, if it's empty, function will hide all cards - * @return {void} - */ - hideCard: function ($targetCard) { - if (!$targetCard) { - $('#pma_console').find('.mid_layer').fadeOut(140); - $('#pma_console').find('.card').removeClass('show'); - } else if ($targetCard.length > 0) { - $targetCard.parent().find('.mid_layer').fadeOut(140); - $targetCard.find('.card').removeClass('show'); - $targetCard.removeClass('show'); - } - }, - - /** - * Used for update console config - * - * @return {void} - */ - updateConfig: function () { - Console.setConfig('AlwaysExpand', $('#pma_console_options input[name=always_expand]').prop('checked')); - Console.setConfig('StartHistory', $('#pma_console_options').find('input[name=start_history]').prop('checked')); - Console.setConfig('CurrentQuery', $('#pma_console_options').find('input[name=current_query]').prop('checked')); - Console.setConfig('EnterExecutes', $('#pma_console_options').find('input[name=enter_executes]').prop('checked')); - Console.setConfig('DarkTheme', $('#pma_console_options').find('input[name=dark_theme]').prop('checked')); - /* Setting the dark theme of the console*/ - - if (Console.config.DarkTheme) { - $('#pma_console').find('>.content').addClass('console_dark_theme'); - } else { - $('#pma_console').find('>.content').removeClass('console_dark_theme'); - } - }, - setConfig: function (key, value) { - Console.config[key] = value; - Functions.configSet('Console/' + key, value); - }, - isSelect: function (queryString) { - var regExp = /^SELECT\s+/i; - return regExp.test(queryString); - } -}; -/** - * Resizer object - * Careful: this object UI logics highly related with functions under Console - * Resizing min-height is 32, if small than it, console will collapse - */ - -var ConsoleResizer = { - posY: 0, - height: 0, - resultHeight: 0, - - /** - * Mousedown event handler for bind to resizer - * - * @param {MouseEvent} event - * - * @return {void} - */ - mouseDown: function (event) { - if (Console.config.Mode !== 'show') { - return; - } - - ConsoleResizer.posY = event.pageY; - ConsoleResizer.height = Console.$consoleContent.height(); - $(document).on('mousemove', ConsoleResizer.mouseMove); - $(document).on('mouseup', ConsoleResizer.mouseUp); // Disable text selection while resizing - - $(document).on('selectstart', function () { - return false; - }); - }, - - /** - * Mousemove event handler for bind to resizer - * - * @param {MouseEvent} event - * - * @return {void} - */ - mouseMove: function (event) { - if (event.pageY < 35) { - event.pageY = 35; - } - - ConsoleResizer.resultHeight = ConsoleResizer.height + (ConsoleResizer.posY - event.pageY); // Content min-height is 32, if adjusting height small than it we'll move it out of the page - - if (ConsoleResizer.resultHeight <= 32) { - Console.$consoleAllContents.height(32); - Console.$consoleContent.css('margin-bottom', ConsoleResizer.resultHeight - 32); - } else { - // Logic below makes viewable area always at bottom when adjusting height and content already at bottom - if (Console.$consoleContent.scrollTop() + Console.$consoleContent.innerHeight() + 16 >= Console.$consoleContent.prop('scrollHeight')) { - Console.$consoleAllContents.height(ConsoleResizer.resultHeight); - Console.scrollBottom(); - } else { - Console.$consoleAllContents.height(ConsoleResizer.resultHeight); - } - } - }, - - /** - * Mouseup event handler for bind to resizer - * - * @return {void} - */ - mouseUp: function () { - Console.setConfig('Height', ConsoleResizer.resultHeight); - Console.show(); - $(document).off('mousemove'); - $(document).off('mouseup'); - $(document).off('selectstart'); - }, - - /** - * Used for console resizer initialize - * - * @return {void} - */ - initialize: function () { - $('#pma_console').find('.toolbar').off('mousedown'); - $('#pma_console').find('.toolbar').on('mousedown', ConsoleResizer.mouseDown); - } -}; -/** - * Console input object - */ - -var ConsoleInput = { - /** - * @var array, contains Codemirror objects or input jQuery objects - * @access private - */ - inputs: null, - - /** - * @var {boolean}, if codemirror enabled - * @access private - */ - codeMirror: false, - - /** - * @var {number}, count for history navigation, 0 for current input - * @access private - */ - historyCount: 0, - - /** - * @var {string}, current input when navigating through history - * @access private - */ - historyPreserveCurrent: null, - - /** - * Used for console input initialize - * - * @return {void} - */ - initialize: function () { - // _cm object can't be reinitialize - if (ConsoleInput.inputs !== null) { - return; - } - - if (typeof CodeMirror !== 'undefined') { - ConsoleInput.codeMirror = true; - } - - ConsoleInput.inputs = []; - - if (ConsoleInput.codeMirror) { - // eslint-disable-next-line new-cap - ConsoleInput.inputs.console = CodeMirror($('#pma_console').find('.console_query_input')[0], { - theme: 'pma', - mode: 'text/x-sql', - lineWrapping: true, - extraKeys: { - 'Ctrl-Space': 'autocomplete' - }, - hintOptions: { - 'completeSingle': false, - 'completeOnSingleClick': true - }, - gutters: ['CodeMirror-lint-markers'], - lint: { - 'getAnnotations': CodeMirror.sqlLint, - 'async': true - } - }); - ConsoleInput.inputs.console.on('inputRead', Functions.codeMirrorAutoCompleteOnInputRead); - ConsoleInput.inputs.console.on('keydown', function (instance, event) { - ConsoleInput.historyNavigate(event); - }); - - if ($('#pma_bookmarks').length !== 0) { - // eslint-disable-next-line new-cap - ConsoleInput.inputs.bookmark = CodeMirror($('#pma_console').find('.bookmark_add_input')[0], { - theme: 'pma', - mode: 'text/x-sql', - lineWrapping: true, - extraKeys: { - 'Ctrl-Space': 'autocomplete' - }, - hintOptions: { - 'completeSingle': false, - 'completeOnSingleClick': true - }, - gutters: ['CodeMirror-lint-markers'], - lint: { - 'getAnnotations': CodeMirror.sqlLint, - 'async': true - } - }); - ConsoleInput.inputs.bookmark.on('inputRead', Functions.codeMirrorAutoCompleteOnInputRead); - } - } else { - ConsoleInput.inputs.console = $(''; - var $ajaxDialog = $('
        ' + data.message + '
        ').dialog({ - width: 500, - buttons: buttonOptions, - title: data.title - }); // Attach syntax highlighted editor to export dialog - - /** - * @var $elm jQuery object containing the reference - * to the Export textarea. - */ - - var $elm = $ajaxDialog.find('textarea'); - Functions.getSqlEditor($elm); - } else { - Functions.ajaxShowMessage(data.error, false); - } - } // end showExport() - - }, - // end exportDialog() - editorDialog: function (isNew, $this) { - var that = this; - /** - * @var $edit_row jQuery object containing the reference to - * the row of the the item being edited - * from the list of items - */ - - var $editRow = null; - - if ($this.hasClass('edit_anchor')) { - // Remember the row of the item being edited for later, - // so that if the edit is successful, we can replace the - // row with info about the modified item. - $editRow = $this.parents('tr'); - } - /** - * @var $msg jQuery object containing the reference to - * the AJAX message shown to the user - */ - - - var $msg = Functions.ajaxShowMessage(); - $.get($this.attr('href'), { - 'ajax_request': true - }, function (data) { - if (data.success === true) { - // We have successfully fetched the editor form - Functions.ajaxRemoveMessage($msg); // Now define the function that is called when - // the user presses the "Go" button - - that.buttonOptions[Messages.strGo] = function () { - // Move the data from the codemirror editor back to the - // textarea, where it can be used in the form submission. - if (typeof CodeMirror !== 'undefined') { - that.syntaxHiglighter.save(); - } // Validate editor and submit request, if passed. - - - if (that.validate()) { - /** - * @var data Form data to be sent in the AJAX request - */ - var data = $('form.rte_form').last().serialize(); - $msg = Functions.ajaxShowMessage(Messages.strProcessingRequest); - var url = $('form.rte_form').last().attr('action'); - $.post(url, data, function (data) { - if (data.success === true) { - // Item created successfully - Functions.ajaxRemoveMessage($msg); - Functions.slidingMessage(data.message); - that.$ajaxDialog.dialog('close'); // If we are in 'edit' mode, we must - // remove the reference to the old row. - - if (mode === 'edit' && $editRow !== null) { - $editRow.remove(); - } // Sometimes, like when moving a trigger from - // a table to another one, the new row should - // not be inserted into the list. In this case - // "data.insert" will be set to false. - - - if (data.insert) { - // Insert the new row at the correct - // location in the list of items - - /** - * @var text Contains the name of an item from - * the list that is used in comparisons - * to find the correct location where - * to insert a new row. - */ - var text = ''; - /** - * @var inserted Whether a new item has been - * inserted in the list or not - */ - - var inserted = false; - $('table.data').find('tr').each(function () { - text = $(this).children('td').eq(0).find('strong').text().toUpperCase().trim(); - - if (text !== '' && text > data.name) { - $(this).before(data.new_row); - inserted = true; - return false; - } - }); - - if (!inserted) { - // If we didn't manage to insert the row yet, - // it must belong at the end of the list, - // so we insert it there. - $('table.data').append(data.new_row); - } // Fade-in the new row - - - $('tr.ajaxInsert').show('slow').removeClass('ajaxInsert'); - } else if ($('table.data').find('tr').has('td').length === 0) { - // If we are not supposed to insert the new row, - // we will now check if the table is empty and - // needs to be hidden. This will be the case if - // we were editing the only item in the list, - // which we removed and will not be inserting - // something else in its place. - $('table.data').hide('slow', function () { - $('#nothing2display').show('slow'); - }); - } // Now we have inserted the row at the correct - // position, but surely at least some row classes - // are wrong now. So we will iterate through - // all rows and assign correct classes to them - - /** - * @var ct Count of processed rows - */ - - - var ct = 0; - /** - * @var rowclass Class to be attached to the row - * that is being processed - */ - - var rowclass = ''; - $('table.data').find('tr').has('td').each(function () { - rowclass = ct % 2 === 0 ? 'odd' : 'even'; - $(this).removeClass().addClass(rowclass); - ct++; - }); // If this is the first item being added, remove - // the "No items" message and show the list. - - if ($('table.data').find('tr').has('td').length > 0 && $('#nothing2display').is(':visible')) { - $('#nothing2display').hide('slow', function () { - $('table.data').show('slow'); - }); - } - - Navigation.reload(); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.post() - } // end "if (that.validate())" - - }; // end of function that handles the submission of the Editor - - - that.buttonOptions[Messages.strClose] = function () { - $(this).dialog('close'); - }; - /** - * Display the dialog to the user - */ - - - that.$ajaxDialog = $('
        ' + data.message + '
        ').dialog({ - width: 700, - minWidth: 500, - buttons: that.buttonOptions, - // Issue #15810 - use button titles for modals (eg: new procedure) - // Respect the order: title on href tag, href content, title sent in response - title: $this.attr('title') || $this.text() || $(data.title).text(), - modal: true, - open: function () { - $('#rteDialog').dialog('option', 'max-height', $(window).height()); - - if ($('#rteDialog').parents('.ui-dialog').height() > $(window).height()) { - $('#rteDialog').dialog('option', 'height', $(window).height()); - } - - $(this).find('input[name=item_name]').trigger('focus'); - $(this).find('input.datefield').each(function () { - Functions.addDatepicker($(this).css('width', '95%'), 'date'); - }); - $(this).find('input.datetimefield').each(function () { - Functions.addDatepicker($(this).css('width', '95%'), 'datetime'); - }); - $.datepicker.initialized = false; - }, - close: function () { - $(this).remove(); - } - }); - /** - * @var mode Used to remember whether the editor is in - * "Edit" or "Add" mode - */ - - var mode = 'add'; - - if ($('input[name=editor_process_edit]').length > 0) { - mode = 'edit'; - } // Attach syntax highlighted editor to the definition - - /** - * @var elm jQuery object containing the reference to - * the Definition textarea. - */ - - - var $elm = $('textarea[name=item_definition]').last(); - var linterOptions = {}; - linterOptions.eventEditor = true; - that.syntaxHiglighter = Functions.getSqlEditor($elm, {}, 'both', linterOptions); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.get() - }, - dropDialog: function ($this) { - /** - * @var $curr_row Object containing reference to the current row - */ - var $currRow = $this.parents('tr'); - /** - * @var question String containing the question to be asked for confirmation - */ - - var question = $('
        ').text($currRow.children('td').children('.drop_sql').html()); // We ask for confirmation first here, before submitting the ajax request - - $this.confirm(question, $this.attr('href'), function (url) { - /** - * @var msg jQuery object containing the reference to - * the AJAX message shown to the user - */ - var $msg = Functions.ajaxShowMessage(Messages.strProcessingRequest); - var params = Functions.getJsConfirmCommonParam(this, $this.getPostData()); - $.post(url, params, function (data) { - if (data.success === true) { - /** - * @var $table Object containing reference - * to the main list of elements - */ - var $table = $currRow.parent(); // Check how many rows will be left after we remove - // the one that the user has requested us to remove - - if ($table.find('tr').length === 3) { - // If there are two rows left, it means that they are - // the header of the table and the rows that we are - // about to remove, so after the removal there will be - // nothing to show in the table, so we hide it. - $table.hide('slow', function () { - $(this).find('tr.even, tr.odd').remove(); - $('.withSelected').remove(); - $('#nothing2display').show('slow'); - }); - } else { - $currRow.hide('slow', function () { - $(this).remove(); // Now we have removed the row from the list, but maybe - // some row classes are wrong now. So we will iterate - // through all rows and assign correct classes to them. - - /** - * @var ct Count of processed rows - */ - - var ct = 0; - /** - * @var rowclass Class to be attached to the row - * that is being processed - */ - - var rowclass = ''; - $table.find('tr').has('td').each(function () { - rowclass = ct % 2 === 1 ? 'odd' : 'even'; - $(this).removeClass().addClass(rowclass); - ct++; - }); - }); - } // Get rid of the "Loading" message - - - Functions.ajaxRemoveMessage($msg); // Show the query that we just executed - - Functions.slidingMessage(data.sql_query); - Navigation.reload(); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.post() - }); - }, - dropMultipleDialog: function ($this) { - // We ask for confirmation here - $this.confirm(Messages.strDropRTEitems, '', function () { - /** - * @var msg jQuery object containing the reference to - * the AJAX message shown to the user - */ - var $msg = Functions.ajaxShowMessage(Messages.strProcessingRequest); // drop anchors of all selected rows - - var dropAnchors = $('input.checkall:checked').parents('tr').find('.drop_anchor'); - var success = true; - var count = dropAnchors.length; - var returnCount = 0; - dropAnchors.each(function () { - var $anchor = $(this); - /** - * @var $curr_row Object containing reference to the current row - */ - - var $currRow = $anchor.parents('tr'); - var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); - $.post($anchor.attr('href'), params, function (data) { - returnCount++; - - if (data.success === true) { - /** - * @var $table Object containing reference - * to the main list of elements - */ - var $table = $currRow.parent(); // Check how many rows will be left after we remove - // the one that the user has requested us to remove - - if ($table.find('tr').length === 3) { - // If there are two rows left, it means that they are - // the header of the table and the rows that we are - // about to remove, so after the removal there will be - // nothing to show in the table, so we hide it. - $table.hide('slow', function () { - $(this).find('tr.even, tr.odd').remove(); - $('.withSelected').remove(); - $('#nothing2display').show('slow'); - }); - } else { - $currRow.hide('fast', function () { - // we will iterate - // through all rows and assign correct classes to them. - - /** - * @var ct Count of processed rows - */ - var ct = 0; - /** - * @var rowclass Class to be attached to the row - * that is being processed - */ - - var rowclass = ''; - $table.find('tr').has('td').each(function () { - rowclass = ct % 2 === 1 ? 'odd' : 'even'; - $(this).removeClass().addClass(rowclass); - ct++; - }); - }); - $currRow.remove(); - } - - if (returnCount === count) { - if (success) { - // Get rid of the "Loading" message - Functions.ajaxRemoveMessage($msg); - $('#rteListForm_checkall').prop({ - checked: false, - indeterminate: false - }); - } - - Navigation.reload(); - } - } else { - Functions.ajaxShowMessage(data.error, false); - success = false; - - if (returnCount === count) { - Navigation.reload(); - } - } - }); // end $.post() - }); // end drop_anchors.each() - }); - }, - - /** - * Validate custom editor form fields. - * - * @return {bool} - */ - validateCustom: function () { - /** - * @var elm a jQuery object containing the reference - * to an element that is being validated - */ - var $elm = null; - - if (this.$ajaxDialog.find('select[name=item_type]').find(':selected').val() === 'RECURRING') { - // The interval field must not be empty for recurring events - $elm = this.$ajaxDialog.find('input[name=item_interval_value]'); - - if ($elm.val() === '') { - $elm.trigger('focus'); - alert(Messages.strFormEmpty); - return false; - } - } else { - // The execute_at field must not be empty for "once off" events - $elm = this.$ajaxDialog.find('input[name=item_execute_at]'); - - if ($elm.val() === '') { - $elm.trigger('focus'); - alert(Messages.strFormEmpty); - return false; - } - } - - return true; - } -}; -AJAX.registerOnload('database/events.js', function () { - /** - * Attach Ajax event handlers for the Add/Edit functionality. - */ - $(document).on('click', 'a.ajax.add_anchor, a.ajax.edit_anchor', function (event) { - event.preventDefault(); - - if ($(this).hasClass('add_anchor')) { - $.datepicker.initialized = false; - } - - DatabaseEvents.editorDialog($(this).hasClass('add_anchor'), $(this)); - }); - /** - * Attach Ajax event handlers for Export - */ - - $(document).on('click', 'a.ajax.export_anchor', function (event) { - event.preventDefault(); - DatabaseEvents.exportDialog($(this)); - }); // end $(document).on() - - $(document).on('click', '#bulkActionExportButton', function (event) { - event.preventDefault(); - DatabaseEvents.exportDialog($(this)); - }); // end $(document).on() - - /** - * Attach Ajax event handlers for Drop functionality - */ - - $(document).on('click', 'a.ajax.drop_anchor', function (event) { - event.preventDefault(); - DatabaseEvents.dropDialog($(this)); - }); // end $(document).on() - - $(document).on('click', '#bulkActionDropButton', function (event) { - event.preventDefault(); - DatabaseEvents.dropMultipleDialog($(this)); - }); // end $(document).on() - - /** - * Attach Ajax event handlers for the "Change event type" functionality, so that the correct - * rows are shown in the editor when changing the event type - */ - - $(document).on('change', 'select[name=item_type]', function () { - $(this).closest('table').find('tr.recurring_event_row, tr.onetime_event_row').toggle(); - }); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/database/operations.js b/Sources/php_script/script/phpMyAdmin/js/dist/database/operations.js deleted file mode 100644 index 3312b51..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/database/operations.js +++ /dev/null @@ -1,170 +0,0 @@ -/** - * @fileoverview function used in server privilege pages - * @name Database Operations - * - * @requires jQuery - * @requires jQueryUI - * @requires js/functions.js - * - */ - -/** - * Ajax event handlers here for /database/operations - * - * Actions Ajaxified here: - * Rename Database - * Copy Database - * Change Charset - * Drop Database - */ - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('database/operations.js', function () { - $(document).off('submit', '#rename_db_form.ajax'); - $(document).off('submit', '#copy_db_form.ajax'); - $(document).off('submit', '#change_db_charset_form.ajax'); - $(document).off('click', '#drop_db_anchor.ajax'); -}); -AJAX.registerOnload('database/operations.js', function () { - /** - * Ajax event handlers for 'Rename Database' - */ - $(document).on('submit', '#rename_db_form.ajax', function (event) { - event.preventDefault(); - - if (Functions.emptyCheckTheField(this, 'newname')) { - Functions.ajaxShowMessage(Messages.strFormEmpty, false, 'error'); - return false; - } - - var oldDbName = CommonParams.get('db'); - var newDbName = $('#new_db_name').val(); - - if (newDbName === oldDbName) { - Functions.ajaxShowMessage(Messages.strDatabaseRenameToSameName, false, 'error'); - return false; - } - - var $form = $(this); - var question = Functions.escapeHtml('CREATE DATABASE ' + newDbName + ' / DROP DATABASE ' + oldDbName); - Functions.prepareForAjaxRequest($form); - $form.confirm(question, $form.attr('action'), function (url) { - Functions.ajaxShowMessage(Messages.strRenamingDatabases, false); - $.post(url, $('#rename_db_form').serialize() + CommonParams.get('arg_separator') + 'is_js_confirmed=1', function (data) { - if (typeof data !== 'undefined' && data.success === true) { - Functions.ajaxShowMessage(data.message); - CommonParams.set('db', data.newname); - Navigation.reload(function () { - $('#pma_navigation_tree').find('a:not(\'.expander\')').each(function () { - var $thisAnchor = $(this); - - if ($thisAnchor.text() === data.newname) { - // simulate a click on the new db name - // in navigation - $thisAnchor.trigger('click'); - } - }); - }); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.post() - }); - }); // end Rename Database - - /** - * Ajax Event Handler for 'Copy Database' - */ - - $(document).on('submit', '#copy_db_form.ajax', function (event) { - event.preventDefault(); - - if (Functions.emptyCheckTheField(this, 'newname')) { - Functions.ajaxShowMessage(Messages.strFormEmpty, false, 'error'); - return false; - } - - Functions.ajaxShowMessage(Messages.strCopyingDatabase, false); - var $form = $(this); - Functions.prepareForAjaxRequest($form); - $.post($form.attr('action'), $form.serialize(), function (data) { - // use messages that stay on screen - $('.alert-success, .alert-danger').fadeOut(); - - if (typeof data !== 'undefined' && data.success === true) { - if ($('#checkbox_switch').is(':checked')) { - CommonParams.set('db', data.newname); - CommonActions.refreshMain(false, function () { - Functions.ajaxShowMessage(data.message); - }); - } else { - CommonParams.set('db', data.db); - Functions.ajaxShowMessage(data.message); - } - - Navigation.reload(); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.post() - }); // end copy database - - /** - * Change tables columns visible only if change tables is checked - */ - - $('#span_change_all_tables_columns_collations').hide(); - $('#checkbox_change_all_tables_collations').on('click', function () { - $('#span_change_all_tables_columns_collations').toggle(); - }); - /** - * Ajax Event handler for 'Change Charset' of the database - */ - - $(document).on('submit', '#change_db_charset_form.ajax', function (event) { - event.preventDefault(); - var $form = $(this); - Functions.prepareForAjaxRequest($form); - Functions.ajaxShowMessage(Messages.strChangingCharset); - $.post($form.attr('action'), $form.serialize(), function (data) { - if (typeof data !== 'undefined' && data.success === true) { - Functions.ajaxShowMessage(data.message); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.post() - }); // end change charset - - /** - * Ajax event handlers for Drop Database - */ - - $(document).on('click', '#drop_db_anchor.ajax', function (event) { - event.preventDefault(); - var $link = $(this); - /** - * @var {String} question String containing the question to be asked for confirmation - */ - - var question = Messages.strDropDatabaseStrongWarning + ' '; - question += Functions.sprintf(Messages.strDoYouReally, 'DROP DATABASE `' + Functions.escapeHtml(CommonParams.get('db') + '`')); - var params = Functions.getJsConfirmCommonParam(this, $link.getPostData()); - $(this).confirm(question, $(this).attr('href'), function (url) { - Functions.ajaxShowMessage(Messages.strProcessingRequest); - $.post(url, params, function (data) { - if (typeof data !== 'undefined' && data.success) { - // Database deleted successfully, refresh both the frames - Navigation.reload(); - CommonParams.set('db', ''); - CommonActions.refreshMain('index.php?route=/server/databases', function () { - Functions.ajaxShowMessage(data.message); - }); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); - }); - }); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/database/query_generator.js b/Sources/php_script/script/phpMyAdmin/js/dist/database/query_generator.js deleted file mode 100644 index 3b215be..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/database/query_generator.js +++ /dev/null @@ -1,147 +0,0 @@ -/** - * @fileoverview function used in QBE for DB - * @name Database Operations - * - * @requires jQuery - * @requires jQueryUI - * @requires js/functions.js - * - */ - -/* global sprintf */ -// js/vendor/sprintf.js -function getFormatsText() { - return { - '=': ' = \'%s\'', - '>': ' > \'%s\'', - '>=': ' >= \'%s\'', - '<': ' < \'%s\'', - '<=': ' <= \'%s\'', - '!=': ' != \'%s\'', - 'LIKE': ' LIKE \'%s\'', - 'LIKE %...%': ' LIKE \'%%%s%%\'', - 'NOT LIKE': ' NOT LIKE \'%s\'', - 'NOT LIKE %...%': ' NOT LIKE \'%%%s%%\'', - 'BETWEEN': ' BETWEEN \'%s\'', - 'NOT BETWEEN': ' NOT BETWEEN \'%s\'', - 'IS NULL': ' \'%s\' IS NULL', - 'IS NOT NULL': ' \'%s\' IS NOT NULL', - 'REGEXP': ' REGEXP \'%s\'', - 'REGEXP ^...$': ' REGEXP \'^%s$\'', - 'NOT REGEXP': ' NOT REGEXP \'%s\'' - }; -} - -function generateCondition(criteriaDiv, table) { - var query = '`' + Functions.escapeBacktick(table.val()) + '`.'; - query += '`' + Functions.escapeBacktick(table.siblings('.columnNameSelect').first().val()) + '`'; - - if (criteriaDiv.find('.criteria_rhs').first().val() === 'text') { - var formatsText = getFormatsText(); - query += sprintf(formatsText[criteriaDiv.find('.criteria_op').first().val()], Functions.escapeSingleQuote(criteriaDiv.find('.rhs_text_val').first().val())); - } else { - query += ' ' + criteriaDiv.find('.criteria_op').first().val(); - query += ' `' + Functions.escapeBacktick(criteriaDiv.find('.tableNameSelect').first().val()) + '`.'; - query += '`' + Functions.escapeBacktick(criteriaDiv.find('.columnNameSelect').first().val()) + '`'; - } - - return query; -} // eslint-disable-next-line no-unused-vars - - -function generateWhereBlock() { - var count = 0; - var query = ''; - $('.tableNameSelect').each(function () { - var criteriaDiv = $(this).siblings('.jsCriteriaOptions').first(); - var useCriteria = $(this).siblings('.criteria_col').first(); - - if ($(this).val() !== '' && useCriteria.prop('checked')) { - if (count > 0) { - criteriaDiv.find('input.logical_op').each(function () { - if ($(this).prop('checked')) { - query += ' ' + $(this).val() + ' '; - } - }); - } - - query += generateCondition(criteriaDiv, $(this)); - count++; - } - }); - return query; -} - -function generateJoin(newTable, tableAliases, fk) { - var query = ''; - query += ' \n\tLEFT JOIN ' + '`' + Functions.escapeBacktick(newTable) + '`'; - - if (tableAliases[fk.TABLE_NAME][0] !== '') { - query += ' AS `' + Functions.escapeBacktick(tableAliases[newTable][0]) + '`'; - query += ' ON `' + Functions.escapeBacktick(tableAliases[fk.TABLE_NAME][0]) + '`'; - } else { - query += ' ON `' + Functions.escapeBacktick(fk.TABLE_NAME) + '`'; - } - - query += '.`' + fk.COLUMN_NAME + '`'; - - if (tableAliases[fk.REFERENCED_TABLE_NAME][0] !== '') { - query += ' = `' + Functions.escapeBacktick(tableAliases[fk.REFERENCED_TABLE_NAME][0]) + '`'; - } else { - query += ' = `' + Functions.escapeBacktick(fk.REFERENCED_TABLE_NAME) + '`'; - } - - query += '.`' + fk.REFERENCED_COLUMN_NAME + '`'; - return query; -} - -function existReference(table, fk, usedTables) { - var isReferredBy = fk.TABLE_NAME === table && usedTables.includes(fk.REFERENCED_TABLE_NAME); - var isReferencedBy = fk.REFERENCED_TABLE_NAME === table && usedTables.includes(fk.TABLE_NAME); - return isReferredBy || isReferencedBy; -} - -function tryJoinTable(table, tableAliases, usedTables, foreignKeys) { - for (var i = 0; i < foreignKeys.length; i++) { - var fk = foreignKeys[i]; - - if (existReference(table, fk, usedTables)) { - return generateJoin(table, tableAliases, fk); - } - } - - return ''; -} - -function appendTable(table, tableAliases, usedTables, foreignKeys) { - var query = tryJoinTable(table, tableAliases, usedTables, foreignKeys); - - if (query === '') { - if (usedTables.length > 0) { - query += '\n\t, '; - } - - query += '`' + Functions.escapeBacktick(table) + '`'; - - if (tableAliases[table][0] !== '') { - query += ' AS `' + Functions.escapeBacktick(tableAliases[table][0]) + '`'; - } - } - - usedTables.push(table); - return query; -} // eslint-disable-next-line no-unused-vars - - -function generateFromBlock(tableAliases, foreignKeys) { - var usedTables = []; - var query = ''; - - for (var table in tableAliases) { - if (tableAliases.hasOwnProperty(table)) { - query += appendTable(table, tableAliases, usedTables, foreignKeys); - } - } - - return query; -} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/database/search.js b/Sources/php_script/script/phpMyAdmin/js/dist/database/search.js deleted file mode 100644 index 718c1d0..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/database/search.js +++ /dev/null @@ -1,260 +0,0 @@ -/** - * JavaScript functions used on Database Search page - * - * @requires jQuery - * @requires js/functions.js - * - * @package PhpMyAdmin - */ - -/* global makeGrid */ -// js/makegrid.js - -/** - * AJAX script for the Database Search page. - * - * Actions ajaxified here: - * Retrieve result of SQL query - */ - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('database/search.js', function () { - $('a.browse_results').off('click'); - $('a.delete_results').off('click'); - $('#buttonGo').off('click'); - $('#togglesearchresultlink').off('click'); - $('#togglequerybox').off('click'); - $('#togglesearchformlink').off('click'); - $('#select_all').off('click'); - $('#unselect_all').off('click'); - $(document).off('submit', '#db_search_form.ajax'); -}); -AJAX.registerOnload('database/search.js', function () { - /** Hide the table link in the initial search result */ - var icon = Functions.getImage('s_tbl', '', { - 'id': 'table-image' - }).toString(); - $('#table-info').prepend(icon).hide(); - /** Hide the browse and deleted results in the new search criteria */ - - $('#buttonGo').on('click', function () { - $('#table-info').hide(); - $('#browse-results').hide(); - $('#sqlqueryform').hide(); - $('#togglequerybox').hide(); - }); - /** - * Prepare a div containing a link for toggle the search results - */ - - $('#togglesearchresultsdiv') - /** don't show it until we have results on-screen */ - .hide(); - /** - * Changing the displayed text according to - * the hide/show criteria in search result forms - */ - - $('#togglesearchresultlink').html(Messages.strHideSearchResults).on('click', function () { - var $link = $(this); - $('#searchresults').slideToggle(); - - if ($link.text() === Messages.strHideSearchResults) { - $link.text(Messages.strShowSearchResults); - } else { - $link.text(Messages.strHideSearchResults); - } - /** avoid default click action */ - - - return false; - }); - /** - * Prepare a div containing a link for toggle the search form, - * otherwise it's incorrectly displayed after a couple of clicks - */ - - $('#togglesearchformdiv').hide(); // don't show it until we have results on-screen - - /** - * Changing the displayed text according to - * the hide/show criteria in search form - */ - - $('#togglequerybox').hide().on('click', function () { - var $link = $(this); - $('#sqlqueryform').slideToggle('medium'); - - if ($link.text() === Messages.strHideQueryBox) { - $link.text(Messages.strShowQueryBox); - } else { - $link.text(Messages.strHideQueryBox); - } - /** avoid default click action */ - - - return false; - }); - /** don't show it until we have results on-screen */ - - /** - * Changing the displayed text according to - * the hide/show criteria in search criteria form - */ - - $('#togglesearchformlink').html(Messages.strShowSearchCriteria).on('click', function () { - var $link = $(this); - $('#db_search_form').slideToggle(); - - if ($link.text() === Messages.strHideSearchCriteria) { - $link.text(Messages.strShowSearchCriteria); - } else { - $link.text(Messages.strHideSearchCriteria); - } - /** avoid default click action */ - - - return false; - }); - /* - * Ajax Event handler for retrieving the results from a table - */ - - $(document).on('click', 'a.browse_results', function (e) { - e.preventDefault(); - /** Hides the results shown by the delete criteria */ - - var $msg = Functions.ajaxShowMessage(Messages.strBrowsing, false); - $('#sqlqueryform').hide(); - $('#togglequerybox').hide(); - /** Load the browse results to the page */ - - $('#table-info').show(); - var tableName = $(this).data('table-name'); - $('#table-link').attr({ - 'href': $(this).attr('href') - }).text(tableName); - var url = $(this).attr('href') + '#searchresults'; - var browseSql = $(this).data('browse-sql'); - var params = { - 'ajax_request': true, - 'is_js_confirmed': true, - 'sql_query': browseSql - }; - $.post(url, params, function (data) { - if (typeof data !== 'undefined' && data.success) { - $('#browse-results').html(data.message); - Functions.ajaxRemoveMessage($msg); - $('.table_results').each(function () { - makeGrid(this, true, true, true, true); - }); - $('#browse-results').show(); - Functions.highlightSql($('#browse-results')); - $('html, body').animate({ - scrollTop: $('#browse-results').offset().top - }, 1000); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); - }); - /* - * Ajax Event handler for deleting the results from a table - */ - - $(document).on('click', 'a.delete_results', function (e) { - e.preventDefault(); - /** Hides the results shown by the browse criteria */ - - $('#table-info').hide(); - $('#sqlqueryform').hide(); - $('#togglequerybox').hide(); - /** Conformation message for deletion */ - - var msg = Functions.sprintf(Messages.strConfirmDeleteResults, $(this).data('table-name')); - - if (confirm(msg)) { - var $msg = Functions.ajaxShowMessage(Messages.strDeleting, false); - /** Load the deleted option to the page*/ - - $('#sqlqueryform').html(''); - var params = { - 'ajax_request': true, - 'is_js_confirmed': true, - 'sql_query': $(this).data('delete-sql') - }; - var url = $(this).attr('href'); - $.post(url, params, function (data) { - if (typeof data === 'undefined' || !data.success) { - Functions.ajaxShowMessage(data.error, false); - return; - } - - $('#sqlqueryform').html(data.sql_query); - /** Refresh the search results after the deletion */ - - $('#buttonGo').trigger('click'); - $('#togglequerybox').html(Messages.strHideQueryBox); - /** Show the results of the deletion option */ - - $('#browse-results').hide(); - $('#sqlqueryform').show(); - $('#togglequerybox').show(); - $('html, body').animate({ - scrollTop: $('#browse-results').offset().top - }, 1000); - Functions.ajaxRemoveMessage($msg); - }); - } - }); - /** - * Ajax Event handler for retrieving the result of an SQL Query - */ - - $(document).on('submit', '#db_search_form.ajax', function (event) { - event.preventDefault(); - - if ($('#criteriaTables :selected').length === 0) { - Functions.ajaxShowMessage(Messages.strNoTableSelected); - return; - } - - var $msgbox = Functions.ajaxShowMessage(Messages.strSearching, false); // jQuery object to reuse - - var $form = $(this); - Functions.prepareForAjaxRequest($form); - var url = $form.serialize() + CommonParams.get('arg_separator') + 'submit_search=' + $('#buttonGo').val(); - $.post($form.attr('action'), url, function (data) { - if (typeof data !== 'undefined' && data.success === true) { - // found results - $('#searchresults').html(data.message); - $('#togglesearchresultlink') // always start with the Show message - .text(Messages.strHideSearchResults); - $('#togglesearchresultsdiv') // now it's time to show the div containing the link - .show(); - $('#searchresults').show(); - $('#db_search_form') // workaround for Chrome problem (bug #3168569) - .slideToggle().hide(); - $('#togglesearchformlink') // always start with the Show message - .text(Messages.strShowSearchCriteria); - $('#togglesearchformdiv') // now it's time to show the div containing the link - .show(); - } else { - // error message (zero rows) - $('#searchresults').html(data.error).show(); - } - - Functions.ajaxRemoveMessage($msgbox); - }); - }); - $('#select_all').on('click', function () { - Functions.setSelectOptions('db_search', 'criteriaTables[]', true); - return false; - }); - $('#unselect_all').on('click', function () { - Functions.setSelectOptions('db_search', 'criteriaTables[]', false); - return false; - }); -}); // end $() \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/database/tracking.js b/Sources/php_script/script/phpMyAdmin/js/dist/database/tracking.js deleted file mode 100644 index d9eabf3..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/database/tracking.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * Unbind all event handlers before tearing down the page - */ -AJAX.registerTeardown('database/tracking.js', function () { - $('body').off('click', '#trackedForm.ajax button[name="submit_mult"], #trackedForm.ajax input[name="submit_mult"]'); - $('body').off('click', '#untrackedForm.ajax button[name="submit_mult"], #untrackedForm.ajax input[name="submit_mult"]'); - $('body').off('click', 'a.delete_tracking_anchor.ajax'); -}); -/** - * Bind event handlers - */ - -AJAX.registerOnload('database/tracking.js', function () { - var $versions = $('#versions'); - $versions.find('tr').first().find('th').append($('
        ')); - $versions.tablesorter({ - sortList: [[1, 0]], - headers: { - 0: { - sorter: false - }, - 2: { - sorter: 'integer' - }, - 5: { - sorter: false - }, - 6: { - sorter: false - }, - 7: { - sorter: false - } - } - }); - var $noVersions = $('#noversions'); - $noVersions.find('tr').first().find('th').append($('
        ')); - $noVersions.tablesorter({ - sortList: [[1, 0]], - headers: { - 0: { - sorter: false - }, - 2: { - sorter: false - } - } - }); - var $body = $('body'); - /** - * Handles multi submit for tracked tables - */ - - $body.on('click', '#trackedForm.ajax button[name="submit_mult"], #trackedForm.ajax input[name="submit_mult"]', function (e) { - e.preventDefault(); - var $button = $(this); - var $form = $button.parent('form'); - var argsep = CommonParams.get('arg_separator'); - var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep + 'submit_mult=' + $button.val(); - - if ($button.val() === 'delete_tracking') { - var question = Messages.strDeleteTrackingDataMultiple; - $button.confirm(question, $form.attr('action'), function (url) { - Functions.ajaxShowMessage(Messages.strDeletingTrackingData); - AJAX.source = $form; - $.post(url, submitData, AJAX.responseHandler); - }); - } else { - Functions.ajaxShowMessage(); - AJAX.source = $form; - $.post($form.attr('action'), submitData, AJAX.responseHandler); - } - }); - /** - * Handles multi submit for untracked tables - */ - - $body.on('click', '#untrackedForm.ajax button[name="submit_mult"], #untrackedForm.ajax input[name="submit_mult"]', function (e) { - e.preventDefault(); - var $button = $(this); - var $form = $button.parent('form'); - var argsep = CommonParams.get('arg_separator'); - var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep + 'submit_mult=' + $button.val(); - Functions.ajaxShowMessage(); - AJAX.source = $form; - $.post($form.attr('action'), submitData, AJAX.responseHandler); - }); - /** - * Ajax Event handler for 'Delete tracking' - */ - - $body.on('click', 'a.delete_tracking_anchor.ajax', function (e) { - e.preventDefault(); - var $anchor = $(this); - var question = Messages.strDeleteTrackingData; - $anchor.confirm(question, $anchor.attr('href'), function (url) { - Functions.ajaxShowMessage(Messages.strDeletingTrackingData); - AJAX.source = $anchor; - var argSep = CommonParams.get('arg_separator'); - var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); - params += argSep + 'ajax_page_request=1'; - $.post(url, params, AJAX.responseHandler); - }); - }); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/designer/init.js b/Sources/php_script/script/phpMyAdmin/js/dist/designer/init.js deleted file mode 100644 index 762c776..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/designer/init.js +++ /dev/null @@ -1,74 +0,0 @@ -/** - * Initializes the data required to run Designer, then fires it up. - */ - -/* global DesignerOfflineDB */ -// js/designer/database.js - -/* global DesignerHistory */ -// js/designer/history.js - -/* global DesignerMove */ -// js/designer/move.js - -/* global DesignerPage */ -// js/designer/page.js - -/* global designerConfig */ -// templates/database/designer/main.twig - -/* eslint-disable no-unused-vars */ -var jTabs; -var hTabs; -var contr; -var displayField; -var server; -var selectedPage; -/* eslint-enable no-unused-vars */ - -var db; -var designerTablesEnabled; -AJAX.registerTeardown('designer/init.js', function () { - $('.trigger').off('click'); -}); -AJAX.registerOnload('designer/init.js', function () { - $('.trigger').on('click', function () { - $('.panel').toggle('fast'); - $(this).toggleClass('active'); - $('#ab').accordion('refresh'); - return false; - }); - jTabs = designerConfig.scriptTables.j_tabs; - hTabs = designerConfig.scriptTables.h_tabs; - contr = designerConfig.scriptContr; - displayField = designerConfig.scriptDisplayField; - server = designerConfig.server; - selectedPage = designerConfig.displayPage; - db = designerConfig.db; - designerTablesEnabled = designerConfig.tablesEnabled; - DesignerMove.main(); - - if (!designerTablesEnabled) { - DesignerOfflineDB.open(function (success) { - if (success) { - DesignerPage.showTablesInLandingPage(db); - } - }); - } - - $('#query_Aggregate_Button').on('click', function () { - $('#query_Aggregate').css('display', 'none'); - }); - $('#query_having_button').on('click', function () { - $('#query_having').css('display', 'none'); - }); - $('#query_rename_to_button').on('click', function () { - $('#query_rename_to').css('display', 'none'); - }); - $('#build_query_button').on('click', function () { - DesignerHistory.buildQuery('SQL Query on Database', 0); - }); - $('#query_where_button').on('click', function () { - $('#query_where').css('display', 'none'); - }); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/designer/page.js b/Sources/php_script/script/phpMyAdmin/js/dist/designer/page.js deleted file mode 100644 index 9e7ab7e..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/designer/page.js +++ /dev/null @@ -1,208 +0,0 @@ -/* global DesignerOfflineDB */ -// js/designer/database.js -// eslint-disable-next-line no-unused-vars - -/* global db, selectedPage:writable */ -// js/designer/init.js - -/* global DesignerMove */ -// js/designer/move.js - -/* global DesignerObjects */ -// js/designer/objects.js -var DesignerPage = {}; - -DesignerPage.showTablesInLandingPage = function (db) { - DesignerPage.loadFirstPage(db, function (page) { - if (page) { - DesignerPage.loadHtmlForPage(page.pgNr); - selectedPage = page.pgNr; - } else { - DesignerPage.showNewPageTables(true); - } - }); -}; - -DesignerPage.saveToNewPage = function (db, pageName, tablePositions, callback) { - DesignerPage.createNewPage(db, pageName, function (page) { - if (page) { - var tblCords = []; - - var saveCallback = function (id) { - tblCords.push(id); - - if (tablePositions.length === tblCords.length) { - page.tblCords = tblCords; - DesignerOfflineDB.addObject('pdf_pages', page); - } - }; - - for (var pos = 0; pos < tablePositions.length; pos++) { - tablePositions[pos].pdfPgNr = page.pgNr; - DesignerPage.saveTablePositions(tablePositions[pos], saveCallback); - } - - if (typeof callback !== 'undefined') { - callback(page); - } - } - }); -}; - -DesignerPage.saveToSelectedPage = function (db, pageId, pageName, tablePositions, callback) { - DesignerPage.deletePage(pageId); - DesignerPage.saveToNewPage(db, pageName, tablePositions, function (page) { - if (typeof callback !== 'undefined') { - callback(page); - } - - selectedPage = page.pgNr; - }); -}; - -DesignerPage.createNewPage = function (db, pageName, callback) { - var newPage = new DesignerObjects.PdfPage(db, pageName); - DesignerOfflineDB.addObject('pdf_pages', newPage, function (pgNr) { - newPage.pgNr = pgNr; - - if (typeof callback !== 'undefined') { - callback(newPage); - } - }); -}; - -DesignerPage.saveTablePositions = function (positions, callback) { - DesignerOfflineDB.addObject('table_coords', positions, callback); -}; - -DesignerPage.createPageList = function (db, callback) { - DesignerOfflineDB.loadAllObjects('pdf_pages', function (pages) { - var html = ''; - - for (var p = 0; p < pages.length; p++) { - var page = pages[p]; - - if (page.dbName === db) { - html += ''; - } - } - - if (typeof callback !== 'undefined') { - callback(html); - } - }); -}; - -DesignerPage.deletePage = function (pageId, callback) { - DesignerOfflineDB.loadObject('pdf_pages', pageId, function (page) { - if (page) { - for (var i = 0; i < page.tblCords.length; i++) { - DesignerOfflineDB.deleteObject('table_coords', page.tblCords[i]); - } - - DesignerOfflineDB.deleteObject('pdf_pages', pageId, callback); - } - }); -}; - -DesignerPage.loadFirstPage = function (db, callback) { - DesignerOfflineDB.loadAllObjects('pdf_pages', function (pages) { - var firstPage = null; - - for (var i = 0; i < pages.length; i++) { - var page = pages[i]; - - if (page.dbName === db) { - // give preference to a page having same name as the db - if (page.pageDescr === db) { - callback(page); - return; - } - - if (firstPage === null) { - firstPage = page; - } - } - } - - callback(firstPage); - }); -}; - -DesignerPage.showNewPageTables = function (check) { - var allTables = $('#id_scroll_tab').find('td input:checkbox'); - allTables.prop('checked', check); - - for (var tab = 0; tab < allTables.length; tab++) { - var input = allTables[tab]; - - if (input.value) { - var element = document.getElementById(input.value); - element.style.top = DesignerPage.getRandom(550, 20) + 'px'; - element.style.left = DesignerPage.getRandom(700, 20) + 'px'; - DesignerMove.visibleTab(input, input.value); - } - } - - selectedPage = -1; - $('#page_name').text(Messages.strUntitled); - DesignerMove.markUnsaved(); -}; - -DesignerPage.loadHtmlForPage = function (pageId) { - DesignerPage.showNewPageTables(true); - DesignerPage.loadPageObjects(pageId, function (page, tblCords) { - $('#name-panel').find('#page_name').text(page.pageDescr); - var tableMissing = false; - - for (var t = 0; t < tblCords.length; t++) { - var tbId = db + '.' + tblCords[t].tableName; - var table = document.getElementById(tbId); - - if (table === null) { - tableMissing = true; - continue; - } - - table.style.top = tblCords[t].y + 'px'; - table.style.left = tblCords[t].x + 'px'; - var checkbox = document.getElementById('check_vis_' + tbId); - checkbox.checked = true; - DesignerMove.visibleTab(checkbox, checkbox.value); - } - - DesignerMove.markSaved(); - - if (tableMissing === true) { - DesignerMove.markUnsaved(); - Functions.ajaxShowMessage(Messages.strSavedPageTableMissing); - } - - selectedPage = page.pgNr; - }); -}; - -DesignerPage.loadPageObjects = function (pageId, callback) { - DesignerOfflineDB.loadObject('pdf_pages', pageId, function (page) { - var tblCords = []; - var count = page.tblCords.length; - - for (var i = 0; i < count; i++) { - DesignerOfflineDB.loadObject('table_coords', page.tblCords[i], function (tblCord) { - tblCords.push(tblCord); - - if (tblCords.length === count) { - if (typeof callback !== 'undefined') { - callback(page, tblCords); - } - } - }); - } - }); -}; - -DesignerPage.getRandom = function (max, min) { - var val = Math.random() * (max - min) + min; - return Math.floor(val); -}; \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/export_output.js b/Sources/php_script/script/phpMyAdmin/js/dist/export_output.js deleted file mode 100644 index 5423bd9..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/export_output.js +++ /dev/null @@ -1,12 +0,0 @@ -AJAX.registerOnload('export_output.js', function () { - $(document).on('keydown', function (e) { - if ((e.which || e.keyCode) === 116) { - e.preventDefault(); - $('#export_refresh_form').trigger('submit'); - } - }); - $('.export_refresh_btn').on('click', function (e) { - e.preventDefault(); - $('#export_refresh_form').trigger('submit'); - }); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/gis_data_editor.js b/Sources/php_script/script/phpMyAdmin/js/dist/gis_data_editor.js deleted file mode 100644 index 346e569..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/gis_data_editor.js +++ /dev/null @@ -1,368 +0,0 @@ -/** - * @fileoverview functions used in GIS data editor - * - * @requires jQuery - * - */ - -/* global addZoomPanControllers, storeGisSvgRef, selectVisualization, styleOSM, zoomAndPan */ -// js/table/gis_visualization.js - -/* global themeImagePath */ -// templates/javascript/variables.twig -// eslint-disable-next-line no-unused-vars -var gisEditorLoaded = false; -/** - * Closes the GIS data editor and perform necessary clean up work. - */ - -function closeGISEditor() { - $('#popup_background').fadeOut('fast'); - $('#gis_editor').fadeOut('fast', function () { - $(this).empty(); - }); -} -/** - * Prepares the HTML received via AJAX. - */ - - -function prepareJSVersion() { - // Change the text on the submit button - $('#gis_editor').find('input[name=\'gis_data[save]\']').val(Messages.strCopy).insertAfter($('#gis_data_textarea')).before('

        '); // Add close and cancel links - - $('#gis_data_editor').prepend('' + Messages.strClose + ''); - $(' ' + Messages.strCancel + '').insertAfter($('input[name=\'gis_data[save]\']')); // Remove the unnecessary text - - $('div#gis_data_output p').remove(); // Remove 'add' buttons and add links - - $('#gis_editor').find('input.add').each(function () { - var $button = $(this); - $button.addClass('addJs').removeClass('add'); - var classes = $button.attr('class'); - $button.replaceWith('+ ' + $button.val() + ''); - }); -} -/** - * Returns the HTML for a data point. - * - * @param {number} pointNumber point number - * @param {string} prefix prefix of the name - * @return {string} the HTML for a data point - */ - - -function addDataPoint(pointNumber, prefix) { - return '
        ' + Functions.sprintf(Messages.strPointN, pointNumber + 1) + ': ' + '' + '' + '' + ''; -} -/** - * Initialize the visualization in the GIS data editor. - */ - - -function initGISEditorVisualization() { - storeGisSvgRef(); // Loads either SVG or OSM visualization based on the choice - - selectVisualization(); // Adds necessary styles to the div that contains the openStreetMap - - styleOSM(); // Adds controllers for zooming and panning - - addZoomPanControllers(); - zoomAndPan(); -} -/** - * Loads JavaScript files and the GIS editor. - * - * @param value current value of the geometry field - * @param field field name - * @param type geometry type - * @param inputName name of the input field - * @param token token - */ -// eslint-disable-next-line no-unused-vars - - -function loadJSAndGISEditor(value, field, type, inputName) { - var head = document.getElementsByTagName('head')[0]; - var script; - script = document.createElement('script'); - script.type = 'text/javascript'; - script.src = 'js/dist/table/gis_visualization.js'; - head.appendChild(script); // OpenLayers.js is BIG and takes time. So asynchronous loading would not work. - // Load the JS and do a callback to load the content for the GIS Editor. - - script = document.createElement('script'); - script.type = 'text/javascript'; - - script.onreadystatechange = function () { - if (this.readyState === 'complete') { - loadGISEditor(value, field, type, inputName); - } - }; - - script.onload = function () { - loadGISEditor(value, field, type, inputName); - }; - - script.onerror = function () { - loadGISEditor(value, field, type, inputName); - }; - - script.src = 'js/vendor/openlayers/OpenLayers.js'; - head.appendChild(script); - gisEditorLoaded = true; -} -/** - * Loads the GIS editor via AJAX - * - * @param value current value of the geometry field - * @param field field name - * @param type geometry type - * @param inputName name of the input field - */ - - -function loadGISEditor(value, field, type, inputName) { - var $gisEditor = $('#gis_editor'); - $.post('index.php?route=/gis-data-editor', { - 'field': field, - 'value': value, - 'type': type, - 'input_name': inputName, - 'get_gis_editor': true, - 'ajax_request': true, - 'server': CommonParams.get('server') - }, function (data) { - if (typeof data !== 'undefined' && data.success === true) { - $gisEditor.html(data.gis_editor); - initGISEditorVisualization(); - prepareJSVersion(); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }, 'json'); -} -/** - * Opens up the dialog for the GIS data editor. - */ -// eslint-disable-next-line no-unused-vars - - -function openGISEditor() { - // Center the popup - var windowWidth = document.documentElement.clientWidth; - var windowHeight = document.documentElement.clientHeight; - var popupWidth = windowWidth * 0.9; - var popupHeight = windowHeight * 0.9; - var popupOffsetTop = windowHeight / 2 - popupHeight / 2; - var popupOffsetLeft = windowWidth / 2 - popupWidth / 2; - var $gisEditor = $('#gis_editor'); - var $background = $('#popup_background'); - $gisEditor.css({ - 'top': popupOffsetTop, - 'left': popupOffsetLeft, - 'width': popupWidth, - 'height': popupHeight - }); - $background.css({ - 'opacity': '0.7' - }); - $gisEditor.append('
        ' + '' + '
        '); // Make it appear - - $background.fadeIn('fast'); - $gisEditor.fadeIn('fast'); -} -/** - * Prepare and insert the GIS data in Well Known Text format - * to the input field. - */ - - -function insertDataAndClose() { - var $form = $('form#gis_data_editor_form'); - var inputName = $form.find('input[name=\'input_name\']').val(); - var argsep = CommonParams.get('arg_separator'); - $.post('index.php?route=/gis-data-editor', $form.serialize() + argsep + 'generate=true' + argsep + 'ajax_request=true', function (data) { - if (typeof data !== 'undefined' && data.success === true) { - $('input[name=\'' + inputName + '\']').val(data.result); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }, 'json'); - closeGISEditor(); -} -/** - * Unbind all event handlers before tearing down a page - */ - - -AJAX.registerTeardown('gis_data_editor.js', function () { - $(document).off('click', '#gis_editor input[name=\'gis_data[save]\']'); - $(document).off('submit', '#gis_editor'); - $(document).off('change', '#gis_editor input[type=\'text\']'); - $(document).off('change', '#gis_editor select.gis_type'); - $(document).off('click', '#gis_editor a.close_gis_editor, #gis_editor a.cancel_gis_editor'); - $(document).off('click', '#gis_editor a.addJs.addPoint'); - $(document).off('click', '#gis_editor a.addLine.addJs'); - $(document).off('click', '#gis_editor a.addJs.addPolygon'); - $(document).off('click', '#gis_editor a.addJs.addGeom'); -}); -AJAX.registerOnload('gis_data_editor.js', function () { - /** - * Prepares and insert the GIS data to the input field on clicking 'copy'. - */ - $(document).on('click', '#gis_editor input[name=\'gis_data[save]\']', function (event) { - event.preventDefault(); - insertDataAndClose(); - }); - /** - * Prepares and insert the GIS data to the input field on pressing 'enter'. - */ - - $(document).on('submit', '#gis_editor', function (event) { - event.preventDefault(); - insertDataAndClose(); - }); - /** - * Trigger asynchronous calls on data change and update the output. - */ - - $(document).on('change', '#gis_editor input[type=\'text\']', function () { - var $form = $('form#gis_data_editor_form'); - var argsep = CommonParams.get('arg_separator'); - $.post('index.php?route=/gis-data-editor', $form.serialize() + argsep + 'generate=true' + argsep + 'ajax_request=true', function (data) { - if (typeof data !== 'undefined' && data.success === true) { - $('#gis_data_textarea').val(data.result); - $('#placeholder').empty().removeClass('hasSVG').html(data.visualization); - $('#openlayersmap').empty(); - /* TODO: the gis_data_editor should rather return JSON than JS code to eval */ - // eslint-disable-next-line no-eval - - eval(data.openLayers); - initGISEditorVisualization(); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }, 'json'); - }); - /** - * Update the form on change of the GIS type. - */ - - $(document).on('change', '#gis_editor select.gis_type', function () { - var $gisEditor = $('#gis_editor'); - var $form = $('form#gis_data_editor_form'); - var argsep = CommonParams.get('arg_separator'); - $.post('index.php?route=/gis-data-editor', $form.serialize() + argsep + 'get_gis_editor=true' + argsep + 'ajax_request=true', function (data) { - if (typeof data !== 'undefined' && data.success === true) { - $gisEditor.html(data.gis_editor); - initGISEditorVisualization(); - prepareJSVersion(); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }, 'json'); - }); - /** - * Handles closing of the GIS data editor. - */ - - $(document).on('click', '#gis_editor a.close_gis_editor, #gis_editor a.cancel_gis_editor', function () { - closeGISEditor(); - }); - /** - * Handles adding data points - */ - - $(document).on('click', '#gis_editor a.addJs.addPoint', function () { - var $a = $(this); - var name = $a.attr('name'); // Eg. name = gis_data[0][MULTIPOINT][add_point] => prefix = gis_data[0][MULTIPOINT] - - var prefix = name.substr(0, name.length - 11); // Find the number of points - - var $noOfPointsInput = $('input[name=\'' + prefix + '[no_of_points]' + '\']'); - var noOfPoints = parseInt($noOfPointsInput.val(), 10); // Add the new data point - - var html = addDataPoint(noOfPoints, prefix); - $a.before(html); - $noOfPointsInput.val(noOfPoints + 1); - }); - /** - * Handles adding linestrings and inner rings - */ - - $(document).on('click', '#gis_editor a.addLine.addJs', function () { - var $a = $(this); - var name = $a.attr('name'); // Eg. name = gis_data[0][MULTILINESTRING][add_line] => prefix = gis_data[0][MULTILINESTRING] - - var prefix = name.substr(0, name.length - 10); - var type = prefix.slice(prefix.lastIndexOf('[') + 1, prefix.lastIndexOf(']')); // Find the number of lines - - var $noOfLinesInput = $('input[name=\'' + prefix + '[no_of_lines]' + '\']'); - var noOfLines = parseInt($noOfLinesInput.val(), 10); // Add the new linesting of inner ring based on the type - - var html = '
        '; - var noOfPoints; - - if (type === 'MULTILINESTRING') { - html += Messages.strLineString + ' ' + (noOfLines + 1) + ':'; - noOfPoints = 2; - } else { - html += Messages.strInnerRing + ' ' + noOfLines + ':'; - noOfPoints = 4; - } - - html += ''; - - for (var i = 0; i < noOfPoints; i++) { - html += addDataPoint(i, prefix + '[' + noOfLines + ']'); - } - - html += '+ ' + Messages.strAddPoint + '
        '; - $a.before(html); - $noOfLinesInput.val(noOfLines + 1); - }); - /** - * Handles adding polygons - */ - - $(document).on('click', '#gis_editor a.addJs.addPolygon', function () { - var $a = $(this); - var name = $a.attr('name'); // Eg. name = gis_data[0][MULTIPOLYGON][add_polygon] => prefix = gis_data[0][MULTIPOLYGON] - - var prefix = name.substr(0, name.length - 13); // Find the number of polygons - - var $noOfPolygonsInput = $('input[name=\'' + prefix + '[no_of_polygons]' + '\']'); - var noOfPolygons = parseInt($noOfPolygonsInput.val(), 10); // Add the new polygon - - var html = Messages.strPolygon + ' ' + (noOfPolygons + 1) + ':
        '; - html += '' + '
        ' + Messages.strOuterRing + ':' + ''; - - for (var i = 0; i < 4; i++) { - html += addDataPoint(i, prefix + '[' + noOfPolygons + '][0]'); - } - - html += '+ ' + Messages.strAddPoint + '
        ' + '+ ' + Messages.strAddInnerRing + '

        '; - $a.before(html); - $noOfPolygonsInput.val(noOfPolygons + 1); - }); - /** - * Handles adding geoms - */ - - $(document).on('click', '#gis_editor a.addJs.addGeom', function () { - var $a = $(this); - var prefix = 'gis_data[GEOMETRYCOLLECTION]'; // Find the number of geoms - - var $noOfGeomsInput = $('input[name=\'' + prefix + '[geom_count]' + '\']'); - var noOfGeoms = parseInt($noOfGeomsInput.val(), 10); - var html1 = Messages.strGeometry + ' ' + (noOfGeoms + 1) + ':
        '; - var $geomType = $('select[name=\'gis_data[' + (noOfGeoms - 1) + '][gis_type]\']').clone(); - $geomType.attr('name', 'gis_data[' + noOfGeoms + '][gis_type]').val('POINT'); - var html2 = '
        ' + Messages.strPoint + ' :' + '' + '' + '' + '' + '

        '; - $a.before(html1); - $geomType.insertBefore($a); - $a.before(html2); - $noOfGeomsInput.val(noOfGeoms + 1); - }); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/indexes.js b/Sources/php_script/script/phpMyAdmin/js/dist/indexes.js deleted file mode 100644 index 7cad042..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/indexes.js +++ /dev/null @@ -1,795 +0,0 @@ -/** - * @fileoverview function used for index manipulation pages - * @name Table Structure - * - * @requires jQuery - * @requires jQueryUI - * @required js/functions.js - */ - -/* global fulltextIndexes:writable, indexes:writable, primaryIndexes:writable, spatialIndexes:writable, uniqueIndexes:writable */ -// js/functions.js -var Indexes = {}; -/** - * Returns the array of indexes based on the index choice - * - * @param {string} indexChoice index choice - * - * @return {null|object} - */ - -Indexes.getIndexArray = function (indexChoice) { - var sourceArray = null; - - switch (indexChoice.toLowerCase()) { - case 'primary': - sourceArray = primaryIndexes; - break; - - case 'unique': - sourceArray = uniqueIndexes; - break; - - case 'index': - sourceArray = indexes; - break; - - case 'fulltext': - sourceArray = fulltextIndexes; - break; - - case 'spatial': - sourceArray = spatialIndexes; - break; - - default: - return null; - } - - return sourceArray; -}; -/** - * Hides/shows the inputs and submits appropriately depending - * on whether the index type chosen is 'SPATIAL' or not. - */ - - -Indexes.checkIndexType = function () { - /** - * @var {JQuery= 0) { - // Remove column from other indexes (if any). - Indexes.removeColumnFromIndex(colIndex); - } - - var indexName = $('input[name="index[Key_name]"]').val(); - var indexComment = $('input[name="index[Index_comment]"]').val(); - var keyBlockSize = $('input[name="index[Key_block_size]"]').val(); - var parser = $('input[name="index[Parser]"]').val(); - var indexType = $('select[name="index[Index_type]"]').val(); - var columns = []; - $('#index_columns').find('tbody').find('tr').each(function () { - // Get columns in particular order. - var colIndex = $(this).find('select[name="index[columns][names][]"]').val(); - var size = $(this).find('input[name="index[columns][sub_parts][]"]').val(); - columns.push({ - 'col_index': colIndex, - 'size': size - }); - }); // Update or create an index. - - sourceArray[arrayIndex] = { - 'Key_name': indexName, - 'Index_comment': indexComment, - 'Index_choice': indexChoice.toUpperCase(), - 'Key_block_size': keyBlockSize, - 'Parser': parser, - 'Index_type': indexType, - 'columns': columns - }; // Display index name (or column list) - - var displayName = indexName; - - if (displayName === '') { - var columnNames = []; - $.each(columns, function () { - columnNames.push($('input[name="field_name[' + this.col_index + ']"]').val()); - }); - displayName = '[' + columnNames.join(', ') + ']'; - } - - $.each(columns, function () { - var id = 'index_name_' + this.col_index + '_8'; - var $name = $('#' + id); - - if ($name.length === 0) { - $name = $(''); - $name.insertAfter($('select[name="field_key[' + this.col_index + ']"]')); - } - - var $text = $('').text(displayName); - $name.html($text); - }); - - if (colIndex >= 0) { - // Update index details on form. - $('select[name="field_key[' + colIndex + ']"]').attr('data-index', indexChoice + ',' + arrayIndex); - } - - Indexes.setIndexFormParameters(sourceArray, indexChoice.toLowerCase()); -}; -/** - * Get choices list for a column to create a composite index with. - * - * @param {any[]} sourceArray Array hodling columns for particular index - * @param {string} colIndex Choice of index - * - * @return {JQuery} jQuery Object - */ - - -Indexes.getCompositeIndexList = function (sourceArray, colIndex) { - // Remove any previous list. - if ($('#composite_index_list').length) { - $('#composite_index_list').remove(); - } // Html list. - - - var $compositeIndexList = $('
          ' + '
          ' + Messages.strCompositeWith + '
          ' + '
        '); // Add each column to list available for composite index. - - var sourceLength = sourceArray.length; - var alreadyPresent = false; - - for (var i = 0; i < sourceLength; i++) { - var subArrayLen = sourceArray[i].columns.length; - var columnNames = []; - - for (var j = 0; j < subArrayLen; j++) { - columnNames.push($('input[name="field_name[' + sourceArray[i].columns[j].col_index + ']"]').val()); - - if (colIndex === sourceArray[i].columns[j].col_index) { - alreadyPresent = true; - } - } - - $compositeIndexList.append('
      • ' + '' + '' + '
      • '); - } - - return $compositeIndexList; -}; -/** - * Shows 'Add Index' dialog. - * - * @param {any[]} sourceArray Array holding particular index - * @param {string} arrayIndex Index of an INDEX in array - * @param {any[]} targetColumns Columns for an INDEX - * @param {string} colIndex Index of column on form - * @param {object} index Index detail object - * @param {boolean} showDialog Whether to show index creation dialog or not - * - * @return {void} - */ - - -Indexes.showAddIndexDialog = function (sourceArray, arrayIndex, targetColumns, colIndex, index, showDialog) { - var showDialogLocal = typeof showDialog !== 'undefined' ? showDialog : true; // Prepare post-data. - - var $table = $('input[name="table"]'); - var table = $table.length > 0 ? $table.val() : ''; - var postData = { - 'server': CommonParams.get('server'), - 'db': $('input[name="db"]').val(), - 'table': table, - 'ajax_request': 1, - 'create_edit_table': 1, - 'index': index - }; - var columns = {}; - - for (var i = 0; i < targetColumns.length; i++) { - var columnName = $('input[name="field_name[' + targetColumns[i] + ']"]').val(); - var columnType = $('select[name="field_type[' + targetColumns[i] + ']"]').val().toLowerCase(); - columns[columnName] = [columnType, targetColumns[i]]; - } - - postData.columns = JSON.stringify(columns); - var buttonOptions = {}; - - buttonOptions[Messages.strGo] = function () { - var isMissingValue = false; - $('select[name="index[columns][names][]"]').each(function () { - if ($(this).val() === '') { - isMissingValue = true; - } - }); - - if (!isMissingValue) { - Indexes.addColumnToIndex(sourceArray, arrayIndex, index.Index_choice, colIndex); - } else { - Functions.ajaxShowMessage('', false); - return false; - } - - $(this).remove(); - }; - - buttonOptions[Messages.strCancel] = function () { - if (colIndex >= 0) { - // Handle state on 'Cancel'. - var $selectList = $('select[name="field_key[' + colIndex + ']"]'); - - if (!$selectList.attr('data-index').length) { - $selectList.find('option[value*="none"]').attr('selected', 'selected'); - } else { - var previousIndex = $selectList.attr('data-index').split(','); - $selectList.find('option[value*="' + previousIndex[0].toLowerCase() + '"]').attr('selected', 'selected'); - } - } - - $(this).dialog('close'); - }; - - var $msgbox = Functions.ajaxShowMessage(); - $.post('index.php?route=/table/indexes', postData, function (data) { - if (data.success === false) { - // in the case of an error, show the error message returned. - Functions.ajaxShowMessage(data.error, false); - } else { - Functions.ajaxRemoveMessage($msgbox); - var $div = $('
        '); - - if (showDialogLocal) { - // Show dialog if the request was successful - if ($('#addIndex').length > 0) { - $('#addIndex').remove(); - } - - $div.append(data.message).dialog({ - title: Messages.strAddIndex, - width: 450, - minHeight: 250, - create: function () { - $(this).on('keypress', function (e) { - if (e.which === 13 || e.keyCode === 13 || window.event.keyCode === 13) { - e.preventDefault(); - buttonOptions[Messages.strGo](); - $(this).remove(); - } - }); - }, - open: function () { - Functions.checkIndexName('index_frm'); - Functions.showHints($div); - $('#index_columns').find('td').each(function () { - $(this).css('width', $(this).width() + 'px'); - }); - $('#index_columns').find('tbody').sortable({ - axis: 'y', - containment: $('#index_columns').find('tbody'), - tolerance: 'pointer' - }); - }, - modal: true, - buttons: buttonOptions, - close: function () { - $(this).remove(); - } - }); - } else { - $div.append(data.message); - $div.css({ - 'display': 'none' - }); - $div.appendTo($('body')); - $div.attr({ - 'id': 'addIndex' - }); - var isMissingValue = false; - $('select[name="index[columns][names][]"]').each(function () { - if ($(this).val() === '') { - isMissingValue = true; - } - }); - - if (!isMissingValue) { - Indexes.addColumnToIndex(sourceArray, arrayIndex, index.Index_choice, colIndex); - } else { - Functions.ajaxShowMessage('', false); - return false; - } - } - } - }); -}; -/** - * Creates a advanced index type selection dialog. - * - * @param {any[]} sourceArray Array holding a particular type of indexes - * @param {string} indexChoice Choice of index - * @param {string} colIndex Index of new column on form - * - * @return {void} - */ - - -Indexes.indexTypeSelectionDialog = function (sourceArray, indexChoice, colIndex) { - var $singleColumnRadio = $('' + ''); - var $compositeIndexRadio = $('' + ''); - var $dialogContent = $('
        '); - $dialogContent.append('' + indexChoice.toUpperCase() + ''); // For UNIQUE/INDEX type, show choice for single-column and composite index. - - $dialogContent.append($singleColumnRadio); - $dialogContent.append($compositeIndexRadio); - var buttonOptions = {}; // 'OK' operation. - - buttonOptions[Messages.strGo] = function () { - if ($('#single_column').is(':checked')) { - var index = { - 'Key_name': indexChoice === 'primary' ? 'PRIMARY' : '', - 'Index_choice': indexChoice.toUpperCase() - }; - Indexes.showAddIndexDialog(sourceArray, sourceArray.length, [colIndex], colIndex, index); - } - - if ($('#composite_index').is(':checked')) { - if ($('input[name="composite_with"]').length !== 0 && $('input[name="composite_with"]:checked').length === 0) { - Functions.ajaxShowMessage('', false); - return false; - } - - var arrayIndex = $('input[name="composite_with"]:checked').val(); - var sourceLength = sourceArray[arrayIndex].columns.length; - var targetColumns = []; - - for (var i = 0; i < sourceLength; i++) { - targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); - } - - targetColumns.push(colIndex); - Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, colIndex, sourceArray[arrayIndex]); - } - - $(this).remove(); - }; - - buttonOptions[Messages.strCancel] = function () { - // Handle state on 'Cancel'. - var $selectList = $('select[name="field_key[' + colIndex + ']"]'); - - if (!$selectList.attr('data-index').length) { - $selectList.find('option[value*="none"]').attr('selected', 'selected'); - } else { - var previousIndex = $selectList.attr('data-index').split(','); - $selectList.find('option[value*="' + previousIndex[0].toLowerCase() + '"]').attr('selected', 'selected'); - } - - $(this).remove(); - }; - - $('
        ').append($dialogContent).dialog({ - minWidth: 525, - minHeight: 200, - modal: true, - title: Messages.strAddIndex, - resizable: false, - buttons: buttonOptions, - open: function () { - $('#composite_index').on('change', function () { - if ($(this).is(':checked')) { - $dialogContent.append(Indexes.getCompositeIndexList(sourceArray, colIndex)); - } - }); - $('#single_column').on('change', function () { - if ($(this).is(':checked')) { - if ($('#composite_index_list').length) { - $('#composite_index_list').remove(); - } - } - }); - }, - close: function () { - $('#composite_index').off('change'); - $('#single_column').off('change'); - $(this).remove(); - } - }); -}; -/** - * Unbind all event handlers before tearing down a page - */ - - -AJAX.registerTeardown('indexes.js', function () { - $(document).off('click', '#save_index_frm'); - $(document).off('click', '#preview_index_frm'); - $(document).off('change', '#select_index_choice'); - $(document).off('click', 'a.drop_primary_key_index_anchor.ajax'); - $(document).off('click', '#table_index tbody tr td.edit_index.ajax, #index_div .add_index.ajax'); - $(document).off('click', '#table_index tbody tr td.rename_index.ajax'); - $(document).off('click', '#index_frm input[type=submit]'); - $('body').off('change', 'select[name*="field_key"]'); - $(document).off('click', '.show_index_dialog'); -}); -/** - * @description

        Ajax scripts for table index page

        - * - * Actions ajaxified here: - *
          - *
        • Showing/hiding inputs depending on the index type chosen
        • - *
        • create/edit/drop indexes
        • - *
        - */ - -AJAX.registerOnload('indexes.js', function () { - // Re-initialize variables. - primaryIndexes = []; - uniqueIndexes = []; - indexes = []; - fulltextIndexes = []; - spatialIndexes = []; // for table creation form - - var $engineSelector = $('.create_table_form select[name=tbl_storage_engine]'); - - if ($engineSelector.length) { - Functions.hideShowConnection($engineSelector); - } - - var $form = $('#index_frm'); - - if ($form.length > 0) { - Functions.showIndexEditDialog($form); - } - - $(document).on('click', '#save_index_frm', function (event) { - event.preventDefault(); - var $form = $('#index_frm'); - var argsep = CommonParams.get('arg_separator'); - var submitData = $form.serialize() + argsep + 'do_save_data=1' + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true'; - Functions.ajaxShowMessage(Messages.strProcessingRequest); - AJAX.source = $form; - $.post($form.attr('action'), submitData, AJAX.responseHandler); - }); - $(document).on('click', '#preview_index_frm', function (event) { - event.preventDefault(); - Functions.previewSql($('#index_frm')); - }); - $(document).on('change', '#select_index_choice', function (event) { - event.preventDefault(); - Indexes.checkIndexType(); - Functions.checkIndexName('index_frm'); - }); - /** - * Ajax Event handler for 'Drop Index' - */ - - $(document).on('click', 'a.drop_primary_key_index_anchor.ajax', function (event) { - event.preventDefault(); - var $anchor = $(this); - /** - * @var $currRow Object containing reference to the current field's row - */ - - var $currRow = $anchor.parents('tr'); - /** @var {number} rows Number of columns in the key */ - - var rows = $anchor.parents('td').attr('rowspan') || 1; - /** @var {number} $rowsToHide Rows that should be hidden */ - - var $rowsToHide = $currRow; - - for (var i = 1, $lastRow = $currRow.next(); i < rows; i++, $lastRow = $lastRow.next()) { - $rowsToHide = $rowsToHide.add($lastRow); - } - - var question = $currRow.children('td').children('.drop_primary_key_index_msg').val(); - Functions.confirmPreviewSql(question, $anchor.attr('href'), function (url) { - var $msg = Functions.ajaxShowMessage(Messages.strDroppingPrimaryKeyIndex, false); - var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); - $.post(url, params, function (data) { - if (typeof data !== 'undefined' && data.success === true) { - Functions.ajaxRemoveMessage($msg); - var $tableRef = $rowsToHide.closest('table'); - - if ($rowsToHide.length === $tableRef.find('tbody > tr').length) { - // We are about to remove all rows from the table - $tableRef.hide('medium', function () { - $('div.no_indexes_defined').show('medium'); - $rowsToHide.remove(); - }); - $tableRef.siblings('.alert-primary').hide('medium'); - } else { - // We are removing some of the rows only - $rowsToHide.hide('medium', function () { - $(this).remove(); - }); - } - - if ($('.result_query').length) { - $('.result_query').remove(); - } - - if (data.sql_query) { - $('
        ').html(data.sql_query).prependTo('#structure_content'); - Functions.highlightSql($('#page_content')); - } - - Navigation.reload(); - CommonActions.refreshMain('index.php?route=/table/structure'); - } else { - Functions.ajaxShowMessage(Messages.strErrorProcessingRequest + ' : ' + data.error, false); - } - }); // end $.post() - }); - }); // end Drop Primary Key/Index - - /** - * Ajax event handler for index edit - **/ - - $(document).on('click', '#table_index tbody tr td.edit_index.ajax, #index_div .add_index.ajax', function (event) { - event.preventDefault(); - var url; - var title; - - if ($(this).find('a').length === 0) { - // Add index - var valid = Functions.checkFormElementInRange($(this).closest('form')[0], 'added_fields', 'Column count has to be larger than zero.'); - - if (!valid) { - return; - } - - url = $(this).closest('form').serialize(); - title = Messages.strAddIndex; - } else { - // Edit index - url = $(this).find('a').getPostData(); - title = Messages.strEditIndex; - } - - url += CommonParams.get('arg_separator') + 'ajax_request=true'; - Functions.indexEditorDialog(url, title, function (data) { - CommonParams.set('db', data.params.db); - CommonParams.set('table', data.params.table); - CommonActions.refreshMain('index.php?route=/table/structure'); - }); - }); - /** - * Ajax event handler for index rename - **/ - - $(document).on('click', '#table_index tbody tr td.rename_index.ajax', function (event) { - event.preventDefault(); - var url = $(this).find('a').getPostData(); - var title = Messages.strRenameIndex; - url += CommonParams.get('arg_separator') + 'ajax_request=true'; - Functions.indexRenameDialog(url, title, function (data) { - CommonParams.set('db', data.params.db); - CommonParams.set('table', data.params.table); - CommonActions.refreshMain('index.php?route=/table/structure'); - }); - }); - /** - * Ajax event handler for advanced index creation during table creation - * and column addition. - */ - - $('body').on('change', 'select[name*="field_key"]', function (e, showDialog) { - var showDialogLocal = typeof showDialog !== 'undefined' ? showDialog : true; // Index of column on Table edit and create page. - - var colIndex = /\d+/.exec($(this).attr('name')); - colIndex = colIndex[0]; // Choice of selected index. - - var indexChoice = /[a-z]+/.exec($(this).val()); - indexChoice = indexChoice[0]; // Array containing corresponding indexes. - - var sourceArray = null; - - if (indexChoice === 'none') { - Indexes.removeColumnFromIndex(colIndex); - var id = 'index_name_' + '0' + '_8'; - var $name = $('#' + id); - - if ($name.length === 0) { - $name = $(''); - $name.insertAfter($('select[name="field_key[' + '0' + ']"]')); - } - - $name.html(''); - return false; - } // Select a source array. - - - sourceArray = Indexes.getIndexArray(indexChoice); - - if (sourceArray === null) { - return; - } - - if (sourceArray.length === 0) { - var index = { - 'Key_name': indexChoice === 'primary' ? 'PRIMARY' : '', - 'Index_choice': indexChoice.toUpperCase() - }; - Indexes.showAddIndexDialog(sourceArray, 0, [colIndex], colIndex, index, showDialogLocal); - } else { - if (indexChoice === 'primary') { - var arrayIndex = 0; - var sourceLength = sourceArray[arrayIndex].columns.length; - var targetColumns = []; - - for (var i = 0; i < sourceLength; i++) { - targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); - } - - targetColumns.push(colIndex); - Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, colIndex, sourceArray[arrayIndex], showDialogLocal); - } else { - // If there are multiple columns selected for an index, show advanced dialog. - Indexes.indexTypeSelectionDialog(sourceArray, indexChoice, colIndex); - } - } - }); - $(document).on('click', '.show_index_dialog', function (e) { - e.preventDefault(); // Get index details. - - var previousIndex = $(this).prev('select').attr('data-index').split(','); - var indexChoice = previousIndex[0]; - var arrayIndex = previousIndex[1]; - var sourceArray = Indexes.getIndexArray(indexChoice); - - if (sourceArray !== null) { - var sourceLength = sourceArray[arrayIndex].columns.length; - var targetColumns = []; - - for (var i = 0; i < sourceLength; i++) { - targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); - } - - Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, -1, sourceArray[arrayIndex]); - } - }); - $('#index_frm').on('submit', function () { - if (typeof this.elements['index[Key_name]'].disabled !== 'undefined') { - this.elements['index[Key_name]'].disabled = false; - } - }); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/menu_resizer.js b/Sources/php_script/script/phpMyAdmin/js/dist/menu_resizer.js deleted file mode 100644 index 41aca77..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/menu_resizer.js +++ /dev/null @@ -1,208 +0,0 @@ -/** - * Handles the resizing of a menu according to the available screen width - * - * Uses themes/original/css/resizable-menu.css.php - * - * To initialize: - * $('#myMenu').menuResizer(function () { - * // This function will be called to find out how much - * // available horizontal space there is for the menu - * return $('body').width() - 5; // Some extra margin for good measure - * }); - * - * To trigger a resize operation: - * $('#myMenu').menuResizer('resize'); // Bind this to $(window).resize() - * - * To restore the menu to a state like before it was initialized: - * $('#myMenu').menuResizer('destroy'); - * - * @package PhpMyAdmin - */ -(function ($) { - function MenuResizer($container, widthCalculator) { - var self = this; - self.$container = $container; - self.widthCalculator = widthCalculator; - var windowWidth = $(window).width(); - - if (windowWidth < 768) { - $('#pma_navigation_resizer').css({ - 'width': '0px' - }); - } // create submenu container - - - var link = $('', { - 'href': '#', - 'class': 'nav-link dropdown-toggle', - 'id': 'navbarDropdown', - 'role': 'button', - 'data-bs-toggle': 'dropdown', - 'aria-haspopup': 'true', - 'aria-expanded': 'false' - }).text(Messages.strMore); - var img = $container.find('li img'); - - if (img.length) { - $(Functions.getImage('b_more').toString()).prependTo(link); - } - - var $submenu = $('
      • ', { - 'class': 'nav-item dropdown d-none' - }).append(link).append($('
          ', { - 'class': 'dropdown-menu dropdown-menu-end', - 'aria-labelledby': 'navbarDropdown' - })); - $container.append($submenu); - setTimeout(function () { - self.resize(); - }, 4); - } - - MenuResizer.prototype.resize = function () { - var wmax = this.widthCalculator.call(this.$container); - var windowWidth = $(window).width(); - var $submenu = this.$container.find('.nav-item.dropdown').last(); - var submenuW = $submenu.outerWidth(true); - var $submenuUl = $submenu.find('.dropdown-menu'); - var $li = this.$container.find('> li'); - var $li2 = $submenuUl.find('.dropdown-item'); - var moreShown = $li2.length > 0; // Calculate the total width used by all the shown tabs - - var totalLen = moreShown ? submenuW : 0; - var l = $li.length - 1; - var i; - - for (i = 0; i < l; i++) { - totalLen += $($li[i]).outerWidth(true); - } // eslint-disable-next-line compat/compat - - - var hasVScroll = document.body.scrollHeight > document.body.clientHeight; - - if (hasVScroll) { - windowWidth += 15; - } - - if (windowWidth < 768) { - wmax = 2000; - } // Now hide menu elements that don't fit into the menubar - - - var hidden = false; // Whether we have hidden any tabs - - while (totalLen >= wmax && --l >= 0) { - // Process the tabs backwards - hidden = true; - var el = $($li[l]); - el.removeClass('nav-item').addClass('dropdown-item'); - var elWidth = el.outerWidth(true); - el.data('width', elWidth); - - if (!moreShown) { - totalLen -= elWidth; - el.prependTo($submenuUl); - totalLen += submenuW; - moreShown = true; - } else { - totalLen -= elWidth; - el.prependTo($submenuUl); - } - } // If we didn't hide any tabs, then there might be some space to show some - - - if (!hidden) { - // Show menu elements that do fit into the menubar - for (i = 0, l = $li2.length; i < l; i++) { - totalLen += $($li2[i]).data('width'); // item fits or (it is the last item - // and it would fit if More got removed) - - if (totalLen < wmax || i === $li2.length - 1 && totalLen - submenuW < wmax) { - $($li2[i]).removeClass('dropdown-item').addClass('nav-item'); - $($li2[i]).insertBefore($submenu); - } else { - break; - } - } - } // Show/hide the "More" tab as needed - - - if (windowWidth < 768) { - $('.navbar-collapse').css({ - 'width': windowWidth - 80 - $('#pma_navigation').width() - }); - $submenu.addClass('d-none'); - $('.navbar-collapse').css({ - 'overflow': 'hidden' - }); - } else { - $('.navbar-collapse').css({ - 'width': 'auto' - }); - $('.navbar-collapse').css({ - 'overflow': 'visible' - }); - - if ($submenuUl.find('li').length > 0) { - $submenu.removeClass('d-none'); - } else { - $submenu.addClass('d-none'); - } - } - }; - - MenuResizer.prototype.destroy = function () { - var $submenu = this.$container.find('.nav-item.dropdown').removeData(); - $submenu.find('li').appendTo(this.$container); - $submenu.remove(); - }; - /** Public API */ - - - var methods = { - init: function (widthCalculator) { - return this.each(function () { - var $this = $(this); - - if (!$this.data('menuResizer')) { - $this.data('menuResizer', new MenuResizer($this, widthCalculator)); - } - }); - }, - resize: function () { - return this.each(function () { - var self = $(this).data('menuResizer'); - - if (self) { - self.resize(); - } - }); - }, - destroy: function () { - return this.each(function () { - var self = $(this).data('menuResizer'); - - if (self) { - self.destroy(); - } - }); - } - }; - /** - * Extend jQuery - * - * @param {string} method - * - * @return {any} - */ - - $.fn.menuResizer = function (method) { - if (methods[method]) { - return methods[method].call(this); - } else if (typeof method === 'function') { - return methods.init.apply(this, [method]); - } else { - $.error('Method ' + method + ' does not exist on jQuery.menuResizer'); - } - }; -})(jQuery); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/server/privileges.js b/Sources/php_script/script/phpMyAdmin/js/dist/server/privileges.js deleted file mode 100644 index ddc1cca..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/server/privileges.js +++ /dev/null @@ -1,455 +0,0 @@ -/** - * @fileoverview functions used in server privilege pages - * @name Server Privileges - * - * @requires jQuery - * @requires jQueryUI - * @requires js/functions.js - * - */ - -/** - * Validates the "add a user" form - * - * @param theForm - * - * @return {bool} whether the form is validated or not - */ -function checkAddUser(theForm) { - if (theForm.elements.hostname.value === '') { - alert(Messages.strHostEmpty); - theForm.elements.hostname.focus(); - return false; - } - - if (theForm.elements.pred_username && theForm.elements.pred_username.value === 'userdefined' && theForm.elements.username.value === '') { - alert(Messages.strUserEmpty); - theForm.elements.username.focus(); - return false; - } - - return Functions.checkPassword($(theForm)); -} -/** - * Export privileges modal handler - * - * @param {object} data - * - * @param {JQuery} msgbox - * - */ - - -function exportPrivilegesModalHandler(data, msgbox) { - if (typeof data !== 'undefined' && data.success === true) { - var modal = $('#exportPrivilegesModal'); // Remove any previous privilege modal data, if any - - modal.find('.modal-body').first().html(''); - $('#exportPrivilegesModalLabel').first().html('Loading'); - modal.modal('show'); - modal.on('shown.bs.modal', function () { - modal.find('.modal-body').first().html(data.message); - $('#exportPrivilegesModalLabel').first().html(data.title); - Functions.ajaxRemoveMessage(msgbox); // Attach syntax highlighted editor to export dialog - - Functions.getSqlEditor(modal.find('textarea')); - }); - return; - } - - Functions.ajaxShowMessage(data.error, false); -} -/** - * @implements EventListener - */ - - -const EditUserGroup = { - /** - * @param {MouseEvent} event - */ - handleEvent: function (event) { - const editUserGroupModal = document.getElementById('editUserGroupModal'); - const button = event.relatedTarget; - const username = button.getAttribute('data-username'); - $.get('index.php?route=/server/user-groups/edit-form', { - 'username': username, - 'server': CommonParams.get('server') - }, data => { - if (typeof data === 'undefined' || data.success !== true) { - Functions.ajaxShowMessage(data.error, false, 'error'); - return; - } - - const modal = bootstrap.Modal.getInstance(editUserGroupModal); - const modalBody = editUserGroupModal.querySelector('.modal-body'); - const saveButton = editUserGroupModal.querySelector('#editUserGroupModalSaveButton'); - modalBody.innerHTML = data.message; - saveButton.addEventListener('click', () => { - const form = $(editUserGroupModal.querySelector('#changeUserGroupForm')); - $.post('index.php?route=/server/privileges', form.serialize() + CommonParams.get('arg_separator') + 'ajax_request=1', data => { - if (typeof data === 'undefined' || data.success !== true) { - Functions.ajaxShowMessage(data.error, false, 'error'); - return; - } - - const userGroup = form.serializeArray().find(el => el.name === 'userGroup').value; // button -> td -> tr -> td.usrGroup - - const userGroupTableCell = button.parentElement.parentElement.querySelector('.usrGroup'); - userGroupTableCell.textContent = userGroup; - }); - modal.hide(); - }); - }); - } -}; -/** - * @implements EventListener - */ - -const AccountLocking = { - handleEvent: function () { - const button = this; - const isLocked = button.dataset.isLocked === 'true'; - const url = isLocked ? 'index.php?route=/server/privileges/account-unlock' : 'index.php?route=/server/privileges/account-lock'; - const params = { - 'username': button.dataset.userName, - 'hostname': button.dataset.hostName, - 'ajax_request': true, - 'server': CommonParams.get('server') - }; - $.post(url, params, data => { - if (data.success === false) { - Functions.ajaxShowMessage(data.error); - return; - } - - if (isLocked) { - const lockIcon = Functions.getImage('s_lock', Messages.strLock, {}).toString(); - button.innerHTML = '' + lockIcon + ' ' + Messages.strLock + ''; - button.title = Messages.strLockAccount; - button.dataset.isLocked = 'false'; - } else { - const unlockIcon = Functions.getImage('s_unlock', Messages.strUnlock, {}).toString(); - button.innerHTML = '' + unlockIcon + ' ' + Messages.strUnlock + ''; - button.title = Messages.strUnlockAccount; - button.dataset.isLocked = 'true'; - } - - Functions.ajaxShowMessage(data.message); - }); - } -}; -/** - * AJAX scripts for /server/privileges page. - * - * Actions ajaxified here: - * Add user - * Revoke a user - * Edit privileges - * Export privileges - * Paginate table of users - * Flush privileges - * - * @memberOf jQuery - * @name document.ready - */ - -/** - * Unbind all event handlers before tearing down a page - */ - -AJAX.registerTeardown('server/privileges.js', function () { - $('#fieldset_add_user_login').off('change', 'input[name=\'username\']'); - $(document).off('click', '#deleteUserCard .btn.ajax'); - const editUserGroupModal = document.getElementById('editUserGroupModal'); - - if (editUserGroupModal) { - editUserGroupModal.removeEventListener('show.bs.modal', EditUserGroup); - } - - $(document).off('click', 'button.mult_submit[value=export]'); - $(document).off('click', 'a.export_user_anchor.ajax'); - $('button.jsAccountLocking').off('click'); - $('#dropUsersDbCheckbox').off('click'); - $(document).off('click', '.checkall_box'); - $(document).off('change', '#checkbox_SSL_priv'); - $(document).off('change', 'input[name="ssl_type"]'); - $(document).off('change', '#select_authentication_plugin'); -}); -AJAX.registerOnload('server/privileges.js', function () { - /** - * Display a warning if there is already a user by the name entered as the username. - */ - $('#fieldset_add_user_login').on('change', 'input[name=\'username\']', function () { - var username = $(this).val(); - var $warning = $('#user_exists_warning'); - - if ($('#select_pred_username').val() === 'userdefined' && username !== '') { - var href = $('form[name=\'usersForm\']').attr('action'); - var params = { - 'ajax_request': true, - 'server': CommonParams.get('server'), - 'validate_username': true, - 'username': username - }; - $.get(href, params, function (data) { - if (data.user_exists) { - $warning.show(); - } else { - $warning.hide(); - } - }); - } else { - $warning.hide(); - } - }); - /** - * Indicating password strength - */ - - $('#text_pma_pw').on('keyup', function () { - var meterObj = $('#password_strength_meter'); - var meterObjLabel = $('#password_strength'); - var username = $('input[name="username"]'); - username = username.val(); - Functions.checkPasswordStrength($(this).val(), meterObj, meterObjLabel, username); - }); - /** - * Automatically switching to 'Use Text field' from 'No password' once start writing in text area - */ - - $('#text_pma_pw').on('input', function () { - if ($('#text_pma_pw').val() !== '') { - $('#select_pred_password').val('userdefined'); - } - }); - $('#text_pma_change_pw').on('keyup', function () { - var meterObj = $('#change_password_strength_meter'); - var meterObjLabel = $('#change_password_strength'); - Functions.checkPasswordStrength($(this).val(), meterObj, meterObjLabel, CommonParams.get('user')); - }); - /** - * Display a notice if sha256_password is selected - */ - - $(document).on('change', '#select_authentication_plugin', function () { - var selectedPlugin = $(this).val(); - - if (selectedPlugin === 'sha256_password') { - $('#ssl_reqd_warning').show(); - } else { - $('#ssl_reqd_warning').hide(); - } - }); - /** - * AJAX handler for 'Revoke User' - * - * @see Functions.ajaxShowMessage() - * @memberOf jQuery - * @name revoke_user_click - */ - - $(document).on('click', '#deleteUserCard .btn.ajax', function (event) { - event.preventDefault(); - var $thisButton = $(this); - var $form = $('#usersForm'); - $thisButton.confirm(Messages.strDropUserWarning, $form.attr('action'), function (url) { - var $dropUsersDbCheckbox = $('#dropUsersDbCheckbox'); - - if ($dropUsersDbCheckbox.is(':checked')) { - var isConfirmed = confirm(Messages.strDropDatabaseStrongWarning + '\n' + Functions.sprintf(Messages.strDoYouReally, 'DROP DATABASE')); - - if (!isConfirmed) { - // Uncheck the drop users database checkbox - $dropUsersDbCheckbox.prop('checked', false); - } - } - - Functions.ajaxShowMessage(Messages.strRemovingSelectedUsers); - var argsep = CommonParams.get('arg_separator'); - $.post(url, $form.serialize() + argsep + 'delete=' + $thisButton.val() + argsep + 'ajax_request=true', function (data) { - if (typeof data !== 'undefined' && data.success === true) { - Functions.ajaxShowMessage(data.message); // Refresh navigation, if we dropped some databases with the name - // that is the same as the username of the deleted user - - if ($('#dropUsersDbCheckbox:checked').length) { - Navigation.reload(); - } // Remove the revoked user from the users list - - - $form.find('input:checkbox:checked').parents('tr').slideUp('medium', function () { - var thisUserInitial = $(this).find('input:checkbox').val().charAt(0).toUpperCase(); - $(this).remove(); // If this is the last user with thisUserInitial, remove the link from #userAccountsPagination - - if ($('#userRightsTable').find('input:checkbox[value^="' + thisUserInitial + '"], input:checkbox[value^="' + thisUserInitial.toLowerCase() + '"]').length === 0) { - $('#userAccountsPagination').find('.page-item > .page-link:contains(' + thisUserInitial + ')').parent('.page-item').addClass('disabled').html('' + thisUserInitial + ''); - } // Re-check the classes of each row - - - $form.find('tbody').find('tr').each(function (index) { - if (index >= 0 && index % 2 === 0) { - $(this).removeClass('odd').addClass('even'); - } else if (index >= 0 && index % 2 !== 0) { - $(this).removeClass('even').addClass('odd'); - } - }); // update the checkall checkbox - - $(Functions.checkboxesSel).trigger('change'); - }); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.post() - }); - }); // end Revoke User - - const editUserGroupModal = document.getElementById('editUserGroupModal'); - - if (editUserGroupModal) { - editUserGroupModal.addEventListener('show.bs.modal', EditUserGroup); - } - /** - * AJAX handler for 'Export Privileges' - * - * @see Functions.ajaxShowMessage() - * @memberOf jQuery - * @name export_user_click - */ - - - $(document).on('click', 'button.mult_submit[value=export]', function (event) { - event.preventDefault(); // can't export if no users checked - - if ($(this.form).find('input:checked').length === 0) { - Functions.ajaxShowMessage(Messages.strNoAccountSelected, 2000, 'success'); - return; - } - - var msgbox = Functions.ajaxShowMessage(); - var argsep = CommonParams.get('arg_separator'); - var serverId = CommonParams.get('server'); - var selectedUsers = $('#usersForm input[name*=\'selected_usr\']:checkbox').serialize(); - var postStr = selectedUsers + '&submit_mult=export' + argsep + 'ajax_request=true&server=' + serverId; - $.post($(this.form).prop('action'), postStr, function (data) { - exportPrivilegesModalHandler(data, msgbox); - }); // end $.post - }); // if exporting non-ajax, highlight anyways - - Functions.getSqlEditor($('textarea.export')); - $(document).on('click', 'a.export_user_anchor.ajax', function (event) { - event.preventDefault(); - var msgbox = Functions.ajaxShowMessage(); - $.get($(this).attr('href'), { - 'ajax_request': true - }, function (data) { - exportPrivilegesModalHandler(data, msgbox); - }); // end $.get - }); // end export privileges - - $('button.jsAccountLocking').on('click', AccountLocking.handleEvent); - $(document).on('change', 'input[name="ssl_type"]', function () { - var $div = $('#specified_div'); - - if ($('#ssl_type_SPECIFIED').is(':checked')) { - $div.find('input').prop('disabled', false); - } else { - $div.find('input').prop('disabled', true); - } - }); - $(document).on('change', '#checkbox_SSL_priv', function () { - var $div = $('#require_ssl_div'); - - if ($(this).is(':checked')) { - $div.find('input').prop('disabled', false); - $('#ssl_type_SPECIFIED').trigger('change'); - } else { - $div.find('input').prop('disabled', true); - } - }); - $('#checkbox_SSL_priv').trigger('change'); - /* - * Create submenu for simpler interface - */ - - var addOrUpdateSubmenu = function () { - var $subNav = $('.nav-pills'); - var $editUserDialog = $('#edit_user_dialog'); - var submenuLabel; - var submenuLink; - var linkNumber; // if submenu exists yet, remove it first - - if ($subNav.length > 0) { - $subNav.remove(); - } // construct a submenu from the existing fieldsets - - - $subNav = $('
            ').prop('class', 'nav nav-pills m-2'); - $('#edit_user_dialog .submenu-item').each(function () { - submenuLabel = $(this).find('legend[data-submenu-label]').data('submenu-label'); - submenuLink = $('').prop('class', 'nav-link').prop('href', '#').html(submenuLabel); - $('
          • ').prop('class', 'nav-item').append(submenuLink).appendTo($subNav); - }); // click handlers for submenu - - $subNav.find('a').on('click', function (e) { - e.preventDefault(); // if already active, ignore click - - if ($(this).hasClass('active')) { - return; - } - - $subNav.find('a').removeClass('active'); - $(this).addClass('active'); // which section to show now? - - linkNumber = $subNav.find('a').index($(this)); // hide all sections but the one to show - - $('#edit_user_dialog .submenu-item').hide().eq(linkNumber).show(); - }); // make first menu item active - // TODO: support URL hash history - - $subNav.find('> :first-child a').addClass('active'); - $editUserDialog.prepend($subNav); // hide all sections but the first - - $('#edit_user_dialog .submenu-item').hide().eq(0).show(); // scroll to the top - - $('html, body').animate({ - scrollTop: 0 - }, 'fast'); - }; - - $('input.autofocus').trigger('focus'); - $(Functions.checkboxesSel).trigger('change'); - Functions.displayPasswordGenerateButton(); - - if ($('#edit_user_dialog').length > 0) { - addOrUpdateSubmenu(); - } - /** - * Select all privileges - * - * @param {HTMLElement} e - * @return {void} - */ - - - var tableSelectAll = function (e) { - const method = e.target.getAttribute('data-select-target'); - var options = $(method).first().children(); - options.each(function (_, obj) { - obj.selected = true; - }); - }; - - $('#select_priv_all').on('click', tableSelectAll); - $('#insert_priv_all').on('click', tableSelectAll); - $('#update_priv_all').on('click', tableSelectAll); - $('#references_priv_all').on('click', tableSelectAll); - var windowWidth = $(window).width(); - $('.jsresponsive').css('max-width', windowWidth - 35 + 'px'); - $('#addUsersForm').on('submit', function () { - return checkAddUser(this); - }); - $('#copyUserForm').on('submit', function () { - return checkAddUser(this); - }); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/server/status/monitor.js b/Sources/php_script/script/phpMyAdmin/js/dist/server/status/monitor.js deleted file mode 100644 index 1697d8c..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/server/status/monitor.js +++ /dev/null @@ -1,2281 +0,0 @@ -/** - * @fileoverview Javascript functions used in server status monitor page - * @name Server Status Monitor - * - * @requires jQuery - * @requires jQueryUI - * @requires js/functions.js - */ - -/* global isStorageSupported */ -// js/config.js - -/* global codeMirrorEditor:writable */ -// js/functions.js - -/* global firstDayOfCalendar, themeImagePath */ -// templates/javascript/variables.twig - -/* global variableNames */ -// templates/server/status/monitor/index.twig -var runtime = {}; -var serverTimeDiff; -var serverOs; -var isSuperUser; -var serverDbIsLocal; -var chartSize; -var monitorSettings; - -function serverResponseError() { - var btns = {}; - - btns[Messages.strReloadPage] = function () { - window.location.reload(); - }; - - $('#emptyDialog').dialog({ - title: Messages.strRefreshFailed - }); - $('#emptyDialog').html(Functions.getImage('s_attention') + Messages.strInvalidResponseExplanation); - $('#emptyDialog').dialog({ - buttons: btns - }); -} -/** - * Destroys all monitor related resources - */ - - -function destroyGrid() { - if (runtime.charts) { - $.each(runtime.charts, function (key, value) { - try { - value.chart.destroy(); - } catch (err) {// continue regardless of error - } - }); - } - - try { - runtime.refreshRequest.abort(); - } catch (err) {// continue regardless of error - } - - try { - clearTimeout(runtime.refreshTimeout); - } catch (err) {// continue regardless of error - } - - $('#chartGrid').html(''); - runtime.charts = null; - runtime.chartAI = 0; - monitorSettings = null; -} - -AJAX.registerOnload('server/status/monitor.js', function () { - var $jsDataForm = $('#js_data'); - serverTimeDiff = new Date().getTime() - $jsDataForm.find('input[name=server_time]').val(); - serverOs = $jsDataForm.find('input[name=server_os]').val(); - isSuperUser = $jsDataForm.find('input[name=is_superuser]').val(); - serverDbIsLocal = $jsDataForm.find('input[name=server_db_isLocal]').val(); -}); -/** - * Unbind all event handlers before tearing down a page - */ - -AJAX.registerTeardown('server/status/monitor.js', function () { - $('#emptyDialog').remove(); - $('a.popupLink').off('click'); - $('body').off('click'); -}); -/** - * Popup behaviour - */ - -AJAX.registerOnload('server/status/monitor.js', function () { - $('
            ').attr('id', 'emptyDialog').appendTo('#page_content'); - $('a.popupLink').on('click', function () { - var $link = $(this); - $('div.' + $link.attr('href').substr(1)).show().offset({ - top: $link.offset().top + $link.height() + 5, - left: $link.offset().left - }).addClass('openedPopup'); - return false; - }); - $('body').on('click', function (event) { - $('div.openedPopup').each(function () { - var $cnt = $(this); - var pos = $cnt.offset(); // Hide if the mouseclick is outside the popupcontent - - if (event.pageX < pos.left || event.pageY < pos.top || event.pageX > pos.left + $cnt.outerWidth() || event.pageY > pos.top + $cnt.outerHeight()) { - $cnt.hide().removeClass('openedPopup'); - } - }); - }); -}); -AJAX.registerTeardown('server/status/monitor.js', function () { - $('a[href="#rearrangeCharts"], a[href="#endChartEditMode"]').off('click'); - $('div.popupContent select[name="chartColumns"]').off('change'); - $('div.popupContent select[name="gridChartRefresh"]').off('change'); - $('a[href="#addNewChart"]').off('click'); - $('a[href="#exportMonitorConfig"]').off('click'); - $('a[href="#importMonitorConfig"]').off('click'); - $('a[href="#clearMonitorConfig"]').off('click'); - $('a[href="#pauseCharts"]').off('click'); - $('a[href="#monitorInstructionsDialog"]').off('click'); - $('input[name="chartType"]').off('click'); - $('input[name="useDivisor"]').off('click'); - $('input[name="useUnit"]').off('click'); - $('select[name="varChartList"]').off('click'); - $('a[href="#kibDivisor"]').off('click'); - $('a[href="#mibDivisor"]').off('click'); - $('a[href="#submitClearSeries"]').off('click'); - $('a[href="#submitAddSeries"]').off('click'); // $("input#variableInput").destroy(); - - $('#chartPreset').off('click'); - $('#chartStatusVar').off('click'); - destroyGrid(); -}); -AJAX.registerOnload('server/status/monitor.js', function () { - // Show tab links - $('div.tabLinks').show(); - $('#loadingMonitorIcon').remove(); // Codemirror is loaded on demand so we might need to initialize it - - if (!codeMirrorEditor) { - var $elm = $('#sqlquery'); - - if ($elm.length > 0 && typeof CodeMirror !== 'undefined') { - codeMirrorEditor = CodeMirror.fromTextArea($elm[0], { - lineNumbers: true, - matchBrackets: true, - indentUnit: 4, - mode: 'text/x-mysql', - lineWrapping: true - }); - } - } // Timepicker is loaded on demand so we need to initialize - // datetime fields from the 'load log' dialog - - - $('#logAnalyseDialog').find('.datetimefield').each(function () { - Functions.addDatepicker($(this)); - }); - /** ** Monitor charting implementation ****/ - - /* Saves the previous ajax response for differential values */ - - var oldChartData = null; // Holds about to be created chart - - var newChart = null; - var chartSpacing; // Whenever the monitor object (runtime.charts) or the settings object - // (monitorSettings) changes in a way incompatible to the previous version, - // increase this number. It will reset the users monitor and settings object - // in their localStorage to the default configuration - - var monitorProtocolVersion = '1.0'; // Runtime parameter of the monitor, is being fully set in initGrid() - - runtime = { - // Holds all visible charts in the grid - charts: null, - // Stores the timeout handler so it can be cleared - refreshTimeout: null, - // Stores the GET request to refresh the charts - refreshRequest: null, - // Chart auto increment - chartAI: 0, - // To play/pause the monitor - redrawCharts: false, - // Object that contains a list of nodes that need to be retrieved - // from the server for chart updates - dataList: [], - // Current max points per chart (needed for auto calculation) - gridMaxPoints: 20, - // displayed time frame - xmin: -1, - xmax: -1 - }; - monitorSettings = null; - var defaultMonitorSettings = { - columns: 3, - chartSize: { - width: 295, - height: 250 - }, - // Max points in each chart. Settings it to 'auto' sets - // gridMaxPoints to (chartwidth - 40) / 12 - gridMaxPoints: 'auto', - - /* Refresh rate of all grid charts in ms */ - gridRefresh: 5000 - }; // Allows drag and drop rearrange and print/edit icons on charts - - var editMode = false; - /* List of preconfigured charts that the user may select */ - - var presetCharts = { - // Query cache efficiency - 'qce': { - title: Messages.strQueryCacheEfficiency, - series: [{ - label: Messages.strQueryCacheEfficiency - }], - nodes: [{ - dataPoints: [{ - type: 'statusvar', - name: 'Qcache_hits' - }, { - type: 'statusvar', - name: 'Com_select' - }], - transformFn: 'qce' - }], - maxYLabel: 0 - }, - // Query cache usage - 'qcu': { - title: Messages.strQueryCacheUsage, - series: [{ - label: Messages.strQueryCacheUsed - }], - nodes: [{ - dataPoints: [{ - type: 'statusvar', - name: 'Qcache_free_memory' - }, { - type: 'servervar', - name: 'query_cache_size' - }], - transformFn: 'qcu' - }], - maxYLabel: 0 - } - }; // time span selection - - var selectionTimeDiff = []; - var selectionStartX; - var selectionStartY; - var drawTimeSpan = false; - /* Add OS specific system info charts to the preset chart list */ - - switch (serverOs) { - case 'WINNT': - $.extend(presetCharts, { - 'cpu': { - title: Messages.strSystemCPUUsage, - series: [{ - label: Messages.strAverageLoad - }], - nodes: [{ - dataPoints: [{ - type: 'cpu', - name: 'loadavg' - }] - }], - maxYLabel: 100 - }, - 'memory': { - title: Messages.strSystemMemory, - series: [{ - label: Messages.strTotalMemory, - fill: true - }, { - dataType: 'memory', - label: Messages.strUsedMemory, - fill: true - }], - nodes: [{ - dataPoints: [{ - type: 'memory', - name: 'MemTotal' - }], - valueDivisor: 1024 - }, { - dataPoints: [{ - type: 'memory', - name: 'MemUsed' - }], - valueDivisor: 1024 - }], - maxYLabel: 0 - }, - 'swap': { - title: Messages.strSystemSwap, - series: [{ - label: Messages.strTotalSwap, - fill: true - }, { - label: Messages.strUsedSwap, - fill: true - }], - nodes: [{ - dataPoints: [{ - type: 'memory', - name: 'SwapTotal' - }] - }, { - dataPoints: [{ - type: 'memory', - name: 'SwapUsed' - }] - }], - maxYLabel: 0 - } - }); - break; - - case 'Linux': - $.extend(presetCharts, { - 'cpu': { - title: Messages.strSystemCPUUsage, - series: [{ - label: Messages.strAverageLoad - }], - nodes: [{ - dataPoints: [{ - type: 'cpu', - name: 'irrelevant' - }], - transformFn: 'cpu-linux' - }], - maxYLabel: 0 - }, - 'memory': { - title: Messages.strSystemMemory, - series: [{ - label: Messages.strBufferedMemory, - fill: true - }, { - label: Messages.strUsedMemory, - fill: true - }, { - label: Messages.strCachedMemory, - fill: true - }, { - label: Messages.strFreeMemory, - fill: true - }], - nodes: [{ - dataPoints: [{ - type: 'memory', - name: 'Buffers' - }], - valueDivisor: 1024 - }, { - dataPoints: [{ - type: 'memory', - name: 'MemUsed' - }], - valueDivisor: 1024 - }, { - dataPoints: [{ - type: 'memory', - name: 'Cached' - }], - valueDivisor: 1024 - }, { - dataPoints: [{ - type: 'memory', - name: 'MemFree' - }], - valueDivisor: 1024 - }], - maxYLabel: 0 - }, - 'swap': { - title: Messages.strSystemSwap, - series: [{ - label: Messages.strCachedSwap, - fill: true - }, { - label: Messages.strUsedSwap, - fill: true - }, { - label: Messages.strFreeSwap, - fill: true - }], - nodes: [{ - dataPoints: [{ - type: 'memory', - name: 'SwapCached' - }], - valueDivisor: 1024 - }, { - dataPoints: [{ - type: 'memory', - name: 'SwapUsed' - }], - valueDivisor: 1024 - }, { - dataPoints: [{ - type: 'memory', - name: 'SwapFree' - }], - valueDivisor: 1024 - }], - maxYLabel: 0 - } - }); - break; - - case 'SunOS': - $.extend(presetCharts, { - 'cpu': { - title: Messages.strSystemCPUUsage, - series: [{ - label: Messages.strAverageLoad - }], - nodes: [{ - dataPoints: [{ - type: 'cpu', - name: 'loadavg' - }] - }], - maxYLabel: 0 - }, - 'memory': { - title: Messages.strSystemMemory, - series: [{ - label: Messages.strUsedMemory, - fill: true - }, { - label: Messages.strFreeMemory, - fill: true - }], - nodes: [{ - dataPoints: [{ - type: 'memory', - name: 'MemUsed' - }], - valueDivisor: 1024 - }, { - dataPoints: [{ - type: 'memory', - name: 'MemFree' - }], - valueDivisor: 1024 - }], - maxYLabel: 0 - }, - 'swap': { - title: Messages.strSystemSwap, - series: [{ - label: Messages.strUsedSwap, - fill: true - }, { - label: Messages.strFreeSwap, - fill: true - }], - nodes: [{ - dataPoints: [{ - type: 'memory', - name: 'SwapUsed' - }], - valueDivisor: 1024 - }, { - dataPoints: [{ - type: 'memory', - name: 'SwapFree' - }], - valueDivisor: 1024 - }], - maxYLabel: 0 - } - }); - break; - } // Default setting for the chart grid - - - var defaultChartGrid = { - 'c0': { - title: Messages.strQuestions, - series: [{ - label: Messages.strQuestions - }], - nodes: [{ - dataPoints: [{ - type: 'statusvar', - name: 'Questions' - }], - display: 'differential' - }], - maxYLabel: 0 - }, - 'c1': { - title: Messages.strChartConnectionsTitle, - series: [{ - label: Messages.strConnections - }, { - label: Messages.strProcesses - }], - nodes: [{ - dataPoints: [{ - type: 'statusvar', - name: 'Connections' - }], - display: 'differential' - }, { - dataPoints: [{ - type: 'proc', - name: 'processes' - }] - }], - maxYLabel: 0 - }, - 'c2': { - title: Messages.strTraffic, - series: [{ - label: Messages.strBytesSent - }, { - label: Messages.strBytesReceived - }], - nodes: [{ - dataPoints: [{ - type: 'statusvar', - name: 'Bytes_sent' - }], - display: 'differential', - valueDivisor: 1024 - }, { - dataPoints: [{ - type: 'statusvar', - name: 'Bytes_received' - }], - display: 'differential', - valueDivisor: 1024 - }], - maxYLabel: 0 - } - }; // Server is localhost => We can add cpu/memory/swap to the default chart - - if (serverDbIsLocal && typeof presetCharts.cpu !== 'undefined') { - defaultChartGrid.c3 = presetCharts.cpu; - defaultChartGrid.c4 = presetCharts.memory; - defaultChartGrid.c5 = presetCharts.swap; - } - - $('a[href="#rearrangeCharts"], a[href="#endChartEditMode"]').on('click', function (event) { - event.preventDefault(); - editMode = !editMode; - - if ($(this).attr('href') === '#endChartEditMode') { - editMode = false; - } - - $('a[href="#endChartEditMode"]').toggle(editMode); - - if (editMode) { - // Close the settings popup - $('div.popupContent').hide().removeClass('openedPopup'); - $('#chartGrid').sortableTable({ - ignoreRect: { - top: 8, - left: chartSize.width - 63, - width: 54, - height: 24 - } - }); - } else { - $('#chartGrid').sortableTable('destroy'); - } - - saveMonitor(); // Save settings - - return false; - }); // global settings - - $('div.popupContent select[name="chartColumns"]').on('change', function () { - monitorSettings.columns = parseInt(this.value, 10); - calculateChartSize(); // Empty cells should keep their size so you can drop onto them - - $('#chartGrid').find('tr td').css('width', chartSize.width + 'px'); - $('#chartGrid').find('.monitorChart').css({ - width: chartSize.width + 'px', - height: chartSize.height + 'px' - }); - /* Reorder all charts that it fills all column cells */ - - var numColumns; - var $tr = $('#chartGrid').find('tr').first(); - - var tempManageCols = function () { - if (numColumns > monitorSettings.columns) { - if ($tr.next().length === 0) { - $tr.after(''); - } - - $tr.next().prepend($(this)); - } - - numColumns++; - }; - - var tempAddCol = function () { - if ($(this).next().length !== 0) { - $(this).append($(this).next().find('td').first()); - } - }; - - while ($tr.length !== 0) { - numColumns = 1; // To many cells in one row => put into next row - - $tr.find('td').each(tempManageCols); // To little cells in one row => for each cell to little, - // move all cells backwards by 1 - - if ($tr.next().length > 0) { - var cnt = monitorSettings.columns - $tr.find('td').length; - - for (var i = 0; i < cnt; i++) { - $tr.append($tr.next().find('td').first()); - $tr.nextAll().each(tempAddCol); - } - } - - $tr = $tr.next(); - } - - if (monitorSettings.gridMaxPoints === 'auto') { - runtime.gridMaxPoints = Math.round((chartSize.width - 40) / 12); - } - - runtime.xmin = new Date().getTime() - serverTimeDiff - runtime.gridMaxPoints * monitorSettings.gridRefresh; - runtime.xmax = new Date().getTime() - serverTimeDiff + monitorSettings.gridRefresh; - - if (editMode) { - $('#chartGrid').sortableTable('refresh'); - } - - refreshChartGrid(); - saveMonitor(); // Save settings - }); - $('div.popupContent select[name="gridChartRefresh"]').on('change', function () { - monitorSettings.gridRefresh = parseInt(this.value, 10) * 1000; - clearTimeout(runtime.refreshTimeout); - - if (runtime.refreshRequest) { - runtime.refreshRequest.abort(); - } - - runtime.xmin = new Date().getTime() - serverTimeDiff - runtime.gridMaxPoints * monitorSettings.gridRefresh; // fixing chart shift towards left on refresh rate change - // runtime.xmax = new Date().getTime() - serverTimeDiff + monitorSettings.gridRefresh; - - runtime.refreshTimeout = setTimeout(refreshChartGrid, monitorSettings.gridRefresh); - saveMonitor(); // Save settings - }); - $('a[href="#addNewChart"]').on('click', function (event) { - event.preventDefault(); - $('#addChartButton').on('click', function () { - var type = $('input[name="chartType"]:checked').val(); - - if (type === 'preset') { - newChart = presetCharts[$('#addChartModal').find('select[name="presetCharts"]').prop('value')]; - } else { - // If user builds their own chart, it's being set/updated - // each time they add a series - // So here we only warn if they didn't add a series yet - if (!newChart || !newChart.nodes || newChart.nodes.length === 0) { - alert(Messages.strAddOneSeriesWarning); - return; - } - } - - newChart.title = $('input[name="chartTitle"]').val(); // Add a cloned object to the chart grid - - addChart($.extend(true, {}, newChart)); - newChart = null; - saveMonitor(); // Save settings - - $('#closeModalButton').off('click'); - }); - $('#closeModalButton').on('click', function () { - newChart = null; - $('span#clearSeriesLink').hide(); - $('#seriesPreview').html(''); - $('#closeModalButton').off('click'); - }); - var $presetList = $('#addChartModal').find('select[name="presetCharts"]'); - - if ($presetList.html().length === 0) { - $.each(presetCharts, function (key, value) { - $presetList.append(''); - }); - $presetList.on('change', function () { - $('input[name="chartTitle"]').val($presetList.find(':selected').text()); - $('#chartPreset').prop('checked', true); - }); - $('#chartPreset').on('click', function () { - $('input[name="chartTitle"]').val($presetList.find(':selected').text()); - }); - $('#chartStatusVar').on('click', function () { - $('input[name="chartTitle"]').val($('#chartSeries').find(':selected').text().replace(/_/g, ' ')); - }); - $('#chartSeries').on('change', function () { - $('input[name="chartTitle"]').val($('#chartSeries').find(':selected').text().replace(/_/g, ' ')); - }); - } - - $('#addChartModal').modal('show'); - $('#seriesPreview').html('' + Messages.strNone + ''); - return false; - }); - $('a[href="#exportMonitorConfig"]').on('click', function (event) { - event.preventDefault(); - var gridCopy = {}; - $.each(runtime.charts, function (key, elem) { - gridCopy[key] = {}; - gridCopy[key].nodes = elem.nodes; - gridCopy[key].series = elem.series; - gridCopy[key].settings = elem.settings; - gridCopy[key].title = elem.title; - gridCopy[key].maxYLabel = elem.maxYLabel; - }); - var exportData = { - monitorCharts: gridCopy, - monitorSettings: monitorSettings - }; - var blob = new Blob([JSON.stringify(exportData)], { - type: 'application/octet-stream' - }); - var url = null; - var fileName = 'monitor-config.json'; - - if (window.navigator && window.navigator.msSaveOrOpenBlob) { - window.navigator.msSaveOrOpenBlob(blob, fileName); - } else { - url = URL.createObjectURL(blob); - window.location.href = url; - } - - setTimeout(function () { - // For some browsers it is necessary to delay revoking the ObjectURL - if (url !== null) { - window.URL.revokeObjectURL(url); - } - - url = undefined; - blob = undefined; - }, 100); - }); - $('a[href="#importMonitorConfig"]').on('click', function (event) { - event.preventDefault(); - $('#emptyDialog').dialog({ - title: Messages.strImportDialogTitle - }); - $('#emptyDialog').html(Messages.strImportDialogMessage + ':
            ' + '
            '); - var dlgBtns = {}; - - dlgBtns[Messages.strImport] = function () { - var input = $('#emptyDialog').find('#import_file')[0]; - var reader = new FileReader(); - - reader.onerror = function (event) { - alert(Messages.strFailedParsingConfig + '\n' + event.target.error.code); - }; - - reader.onload = function (e) { - var data = e.target.result; - var json = null; // Try loading config - - try { - json = JSON.parse(data); - } catch (err) { - alert(Messages.strFailedParsingConfig); - $('#emptyDialog').dialog('close'); - return; - } // Basic check, is this a monitor config json? - - - if (!json || !json.monitorCharts || !json.monitorCharts) { - alert(Messages.strFailedParsingConfig); - $('#emptyDialog').dialog('close'); - return; - } // If json ok, try applying config - - - try { - if (isStorageSupported('localStorage')) { - window.localStorage.monitorCharts = JSON.stringify(json.monitorCharts); - window.localStorage.monitorSettings = JSON.stringify(json.monitorSettings); - } - - rebuildGrid(); - } catch (err) { - alert(Messages.strFailedBuildingGrid); // If an exception is thrown, load default again - - if (isStorageSupported('localStorage')) { - window.localStorage.removeItem('monitorCharts'); - window.localStorage.removeItem('monitorSettings'); - } - - rebuildGrid(); - } - - $('#emptyDialog').dialog('close'); - }; - - reader.readAsText(input.files[0]); - }; - - dlgBtns[Messages.strCancel] = function () { - $(this).dialog('close'); - }; - - $('#emptyDialog').dialog({ - width: 'auto', - height: 'auto', - buttons: dlgBtns - }); - }); - $('a[href="#clearMonitorConfig"]').on('click', function (event) { - event.preventDefault(); - - if (isStorageSupported('localStorage')) { - window.localStorage.removeItem('monitorCharts'); - window.localStorage.removeItem('monitorSettings'); - window.localStorage.removeItem('monitorVersion'); - } - - $(this).hide(); - rebuildGrid(); - }); - $('a[href="#pauseCharts"]').on('click', function (event) { - event.preventDefault(); - runtime.redrawCharts = !runtime.redrawCharts; - - if (!runtime.redrawCharts) { - $(this).html(Functions.getImage('play') + Messages.strResumeMonitor); - } else { - $(this).html(Functions.getImage('pause') + Messages.strPauseMonitor); - - if (!runtime.charts) { - initGrid(); - $('a[href="#settingsPopup"]').show(); - } - } - - return false; - }); - $('a[href="#monitorInstructionsDialog"]').on('click', function (event) { - event.preventDefault(); - var $dialog = $('#monitorInstructionsDialog'); - var dlgBtns = {}; - - dlgBtns[Messages.strClose] = function () { - $(this).dialog('close'); - }; - - $dialog.dialog({ - width: '60%', - height: 'auto', - buttons: dlgBtns - }).find('img.ajaxIcon').show(); - - var loadLogVars = function (getvars) { - var vars = { - 'ajax_request': true, - 'server': CommonParams.get('server') - }; - - if (getvars) { - $.extend(vars, getvars); - } - - $.post('index.php?route=/server/status/monitor/log-vars', vars, function (data) { - var logVars; - - if (typeof data !== 'undefined' && data.success === true) { - logVars = data.message; - } else { - return serverResponseError(); - } - - var icon = Functions.getImage('s_success'); - var msg = ''; - var str = ''; - - if (logVars.general_log === 'ON') { - if (logVars.slow_query_log === 'ON') { - msg = Messages.strBothLogOn; - } else { - msg = Messages.strGenLogOn; - } - } - - if (msg.length === 0 && logVars.slow_query_log === 'ON') { - msg = Messages.strSlowLogOn; - } - - if (msg.length === 0) { - icon = Functions.getImage('s_error'); - msg = Messages.strBothLogOff; - } - - str = '' + Messages.strCurrentSettings + '
            '; - str += icon + msg + '
            '; - - if (logVars.log_output !== 'TABLE') { - str += Functions.getImage('s_error') + ' ' + Messages.strLogOutNotTable + '
            '; - } else { - str += Functions.getImage('s_success') + ' ' + Messages.strLogOutIsTable + '
            '; - } - - if (logVars.slow_query_log === 'ON') { - if (logVars.long_query_time > 2) { - str += Functions.getImage('s_attention') + ' '; - str += Functions.sprintf(Messages.strSmallerLongQueryTimeAdvice, logVars.long_query_time); - str += '
            '; - } - - if (logVars.long_query_time < 2) { - str += Functions.getImage('s_success') + ' '; - str += Functions.sprintf(Messages.strLongQueryTimeSet, logVars.long_query_time); - str += '
            '; - } - } - - str += '
            '; - - if (isSuperUser) { - str += '

            ' + Messages.strChangeSettings + ''; - str += '
            '; - str += Messages.strSettingsAppliedGlobal + '
            '; - var varValue = 'TABLE'; - - if (logVars.log_output === 'TABLE') { - varValue = 'FILE'; - } - - str += '- '; - str += Functions.sprintf(Messages.strSetLogOutput, varValue); - str += '
            '; - - if (logVars.general_log !== 'ON') { - str += '- '; - str += Functions.sprintf(Messages.strEnableVar, 'general_log'); - str += '
            '; - } else { - str += '- '; - str += Functions.sprintf(Messages.strDisableVar, 'general_log'); - str += '
            '; - } - - if (logVars.slow_query_log !== 'ON') { - str += '- '; - str += Functions.sprintf(Messages.strEnableVar, 'slow_query_log'); - str += '
            '; - } else { - str += '- '; - str += Functions.sprintf(Messages.strDisableVar, 'slow_query_log'); - str += '
            '; - } - - varValue = 5; - - if (logVars.long_query_time > 2) { - varValue = 1; - } - - str += '- '; - str += Functions.sprintf(Messages.setSetLongQueryTime, varValue); - str += '
            '; - } else { - str += Messages.strNoSuperUser + '
            '; - } - - str += '
            '; - $dialog.find('div.monitorUse').toggle(logVars.log_output === 'TABLE' && (logVars.slow_query_log === 'ON' || logVars.general_log === 'ON')); - $dialog.find('div.ajaxContent').html(str); - $dialog.find('img.ajaxIcon').hide(); - $dialog.find('a.set').on('click', function () { - var nameValue = $(this).attr('href').split('-'); - loadLogVars({ - varName: nameValue[0].substr(1), - varValue: nameValue[1] - }); - $dialog.find('img.ajaxIcon').show(); - }); - }); - }; - - loadLogVars(); - return false; - }); - $('input[name="chartType"]').on('change', function () { - $('#chartVariableSettings').toggle(this.checked && this.value === 'variable'); - var title = $('input[name="chartTitle"]').val(); - - if (title === Messages.strChartTitle || title === $('label[for="' + $('input[name="chartTitle"]').data('lastRadio') + '"]').text()) { - $('input[name="chartTitle"]').data('lastRadio', $(this).attr('id')).val($('label[for="' + $(this).attr('id') + '"]').text()); - } - }); - $('input[name="useDivisor"]').on('change', function () { - $('span.divisorInput').toggle(this.checked); - }); - $('input[name="useUnit"]').on('change', function () { - $('span.unitInput').toggle(this.checked); - }); - $('select[name="varChartList"]').on('change', function () { - if (this.selectedIndex !== 0) { - $('#variableInput').val(this.value); - } - }); - $('a[href="#kibDivisor"]').on('click', function (event) { - event.preventDefault(); - $('input[name="valueDivisor"]').val(1024); - $('input[name="valueUnit"]').val(Messages.strKiB); - $('span.unitInput').toggle(true); - $('input[name="useUnit"]').prop('checked', true); - return false; - }); - $('a[href="#mibDivisor"]').on('click', function (event) { - event.preventDefault(); - $('input[name="valueDivisor"]').val(1024 * 1024); - $('input[name="valueUnit"]').val(Messages.strMiB); - $('span.unitInput').toggle(true); - $('input[name="useUnit"]').prop('checked', true); - return false; - }); - $('a[href="#submitClearSeries"]').on('click', function (event) { - event.preventDefault(); - $('#seriesPreview').html('' + Messages.strNone + ''); - newChart = null; - $('#clearSeriesLink').hide(); - }); - $('a[href="#submitAddSeries"]').on('click', function (event) { - event.preventDefault(); - - if ($('#variableInput').val() === '') { - return false; - } - - if (newChart === null) { - $('#seriesPreview').html(''); - newChart = { - title: $('input[name="chartTitle"]').val(), - nodes: [], - series: [], - maxYLabel: 0 - }; - } - - var serie = { - dataPoints: [{ - type: 'statusvar', - name: $('#variableInput').val() - }], - display: $('input[name="differentialValue"]').prop('checked') ? 'differential' : '' - }; - - if (serie.dataPoints[0].name === 'Processes') { - serie.dataPoints[0].type = 'proc'; - } - - if ($('input[name="useDivisor"]').prop('checked')) { - serie.valueDivisor = parseInt($('input[name="valueDivisor"]').val(), 10); - } - - if ($('input[name="useUnit"]').prop('checked')) { - serie.unit = $('input[name="valueUnit"]').val(); - } - - var str = serie.display === 'differential' ? ', ' + Messages.strDifferential : ''; - str += serie.valueDivisor ? ', ' + Functions.sprintf(Messages.strDividedBy, serie.valueDivisor) : ''; - str += serie.unit ? ', ' + Messages.strUnit + ': ' + serie.unit : ''; - var newSeries = { - label: $('#variableInput').val().replace(/_/g, ' ') - }; - newChart.series.push(newSeries); - $('#seriesPreview').append('- ' + Functions.escapeHtml(newSeries.label + str) + '
            '); - newChart.nodes.push(serie); - $('#variableInput').val(''); - $('input[name="differentialValue"]').prop('checked', true); - $('input[name="useDivisor"]').prop('checked', false); - $('input[name="useUnit"]').prop('checked', false); - $('input[name="useDivisor"]').trigger('change'); - $('input[name="useUnit"]').trigger('change'); - $('select[name="varChartList"]').get(0).selectedIndex = 0; - $('#clearSeriesLink').show(); - return false; - }); - $('#variableInput').autocomplete({ - source: variableNames - }); - /* Initializes the monitor, called only once */ - - function initGrid() { - var i; - /* Apply default values & config */ - - if (isStorageSupported('localStorage')) { - if (typeof window.localStorage.monitorCharts !== 'undefined') { - runtime.charts = JSON.parse(window.localStorage.monitorCharts); - } - - if (typeof window.localStorage.monitorSettings !== 'undefined') { - monitorSettings = JSON.parse(window.localStorage.monitorSettings); - } - - $('a[href="#clearMonitorConfig"]').toggle(runtime.charts !== null); - - if (runtime.charts !== null && typeof window.localStorage.monitorVersion !== 'undefined' && monitorProtocolVersion !== window.localStorage.monitorVersion) { - $('#emptyDialog').dialog({ - title: Messages.strIncompatibleMonitorConfig - }); - $('#emptyDialog').html(Messages.strIncompatibleMonitorConfigDescription); - var dlgBtns = {}; - - dlgBtns[Messages.strClose] = function () { - $(this).dialog('close'); - }; - - $('#emptyDialog').dialog({ - width: 400, - buttons: dlgBtns - }); - } - } - - if (runtime.charts === null) { - runtime.charts = defaultChartGrid; - } - - if (monitorSettings === null) { - monitorSettings = defaultMonitorSettings; - } - - $('select[name="gridChartRefresh"]').val(monitorSettings.gridRefresh / 1000); - $('select[name="chartColumns"]').val(monitorSettings.columns); - - if (monitorSettings.gridMaxPoints === 'auto') { - runtime.gridMaxPoints = Math.round((monitorSettings.chartSize.width - 40) / 12); - } else { - runtime.gridMaxPoints = monitorSettings.gridMaxPoints; - } - - runtime.xmin = new Date().getTime() - serverTimeDiff - runtime.gridMaxPoints * monitorSettings.gridRefresh; - runtime.xmax = new Date().getTime() - serverTimeDiff + monitorSettings.gridRefresh; - /* Calculate how much spacing there is between each chart */ - - $('#chartGrid').html(''); - chartSpacing = { - width: $('#chartGrid').find('td').eq(1).offset().left - $('#chartGrid').find('td').eq(0).offset().left, - height: $('#chartGrid').find('tr').eq(1).find('td').eq(1).offset().top - $('#chartGrid').find('tr').eq(0).find('td').eq(0).offset().top - }; - $('#chartGrid').html(''); - /* Add all charts - in correct order */ - - var keys = []; - $.each(runtime.charts, function (key) { - keys.push(key); - }); - keys.sort(); - - for (i = 0; i < keys.length; i++) { - addChart(runtime.charts[keys[i]], true); - } - /* Fill in missing cells */ - - - var numCharts = $('#chartGrid').find('.monitorChart').length; - var numMissingCells = (monitorSettings.columns - numCharts % monitorSettings.columns) % monitorSettings.columns; - - for (i = 0; i < numMissingCells; i++) { - $('#chartGrid').find('tr').last().append(''); - } // Empty cells should keep their size so you can drop onto them - - - calculateChartSize(); - $('#chartGrid').find('tr td').css('width', chartSize.width + 'px'); - buildRequiredDataList(); - refreshChartGrid(); - } - /* Calls destroyGrid() and initGrid(), but before doing so it saves the chart - * data from each chart and restores it after the monitor is initialized again */ - - - function rebuildGrid() { - var oldData = null; - - if (runtime.charts) { - oldData = {}; - $.each(runtime.charts, function (key, chartObj) { - for (var i = 0, l = chartObj.nodes.length; i < l; i++) { - oldData[chartObj.nodes[i].dataPoint] = []; - - for (var j = 0, ll = chartObj.chart.series[i].data.length; j < ll; j++) { - oldData[chartObj.nodes[i].dataPoint].push([chartObj.chart.series[i].data[j].x, chartObj.chart.series[i].data[j].y]); - } - } - }); - } - - destroyGrid(); - initGrid(); - } - /* Calculates the dynamic chart size that depends on the column width */ - - - function calculateChartSize() { - var panelWidth; - - if ($('body').height() > $(window).height()) { - // has vertical scroll bar - panelWidth = $('#logTable').innerWidth(); - } else { - panelWidth = $('#logTable').innerWidth() - 10; // leave some space for vertical scroll bar - } - - var wdt = panelWidth; - var windowWidth = $(window).width(); - - if (windowWidth > 768) { - wdt = (panelWidth - monitorSettings.columns * chartSpacing.width) / monitorSettings.columns; - } - - chartSize = { - width: Math.floor(wdt), - height: Math.floor(0.75 * wdt) - }; - } - /* Adds a chart to the chart grid */ - - - function addChart(chartObj, initialize) { - var i; - var settings = { - title: Functions.escapeHtml(chartObj.title), - grid: { - drawBorder: false, - shadow: false, - background: 'rgba(0,0,0,0)' - }, - axes: { - xaxis: { - renderer: $.jqplot.DateAxisRenderer, - tickOptions: { - formatString: '%H:%M:%S', - showGridline: false - }, - min: runtime.xmin, - max: runtime.xmax - }, - yaxis: { - min: 0, - max: 100, - tickInterval: 20 - } - }, - seriesDefaults: { - rendererOptions: { - smooth: true - }, - showLine: true, - lineWidth: 2, - markerOptions: { - size: 6 - } - }, - highlighter: { - show: true - } - }; - - if (settings.title === Messages.strSystemCPUUsage || settings.title === Messages.strQueryCacheEfficiency) { - settings.axes.yaxis.tickOptions = { - formatString: '%d %%' - }; - } else if (settings.title === Messages.strSystemMemory || settings.title === Messages.strSystemSwap) { - settings.stackSeries = true; - settings.axes.yaxis.tickOptions = { - formatter: $.jqplot.byteFormatter(2) // MiB - - }; - } else if (settings.title === Messages.strTraffic) { - settings.axes.yaxis.tickOptions = { - formatter: $.jqplot.byteFormatter(1) // KiB - - }; - } else if (settings.title === Messages.strQuestions || settings.title === Messages.strConnections) { - settings.axes.yaxis.tickOptions = { - formatter: function (format, val) { - if (Math.abs(val) >= 1000000) { - return $.jqplot.sprintf('%.3g M', val / 1000000); - } else if (Math.abs(val) >= 1000) { - return $.jqplot.sprintf('%.3g k', val / 1000); - } else { - return $.jqplot.sprintf('%d', val); - } - } - }; - } - - settings.series = chartObj.series; - - if ($('#' + 'gridchart' + runtime.chartAI).length === 0) { - var numCharts = $('#chartGrid').find('.monitorChart').length; - - if (numCharts === 0 || numCharts % monitorSettings.columns === 0) { - $('#chartGrid').append(''); - } - - if (!chartSize) { - calculateChartSize(); - } - - $('#chartGrid').find('tr').last().append('
            ' + '
            ' + '
            '); - } // Set series' data as [0,0], smooth lines won't plot with data array having null values. - // also chart won't plot initially with no data and data comes on refreshChartGrid() - - - var series = []; - - for (i in chartObj.series) { - series.push([[0, 0]]); - } - - var tempTooltipContentEditor = function (str, seriesIndex, pointIndex, plot) { - var j; // TODO: move style to theme CSS - - var tooltipHtml = '
            '; // x value i.e. time - - var timeValue = str.split(',')[0]; - var seriesValue; - tooltipHtml += 'Time: ' + timeValue; - tooltipHtml += ''; // Add y values to the tooltip per series - - for (j in plot.series) { - // get y value if present - if (plot.series[j].data.length > pointIndex) { - seriesValue = plot.series[j].data[pointIndex][1]; - } else { - return; - } - - var seriesLabel = plot.series[j].label; - var seriesColor = plot.series[j].color; // format y value - - if (plot.series[0]._yaxis.tickOptions.formatter) { - // eslint-disable-line no-underscore-dangle - // using formatter function - // eslint-disable-next-line no-underscore-dangle - seriesValue = plot.series[0]._yaxis.tickOptions.formatter('%s', seriesValue); - } else if (plot.series[0]._yaxis.tickOptions.formatString) { - // eslint-disable-line no-underscore-dangle - // using format string - // eslint-disable-next-line no-underscore-dangle - seriesValue = Functions.sprintf(plot.series[0]._yaxis.tickOptions.formatString, seriesValue); - } - - tooltipHtml += '
            ' + seriesLabel + ': ' + seriesValue + ''; - } - - tooltipHtml += '
            '; - return tooltipHtml; - }; // set Tooltip for each series - - - for (i in settings.series) { - settings.series[i].highlighter = { - show: true, - tooltipContentEditor: tempTooltipContentEditor - }; - } - - chartObj.chart = $.jqplot('gridchart' + runtime.chartAI, series, settings); // remove [0,0] after plotting - - for (i in chartObj.chart.series) { - chartObj.chart.series[i].data.shift(); - } - - var $legend = $('
            ').css('padding', '0.5em'); - - for (i in chartObj.chart.series) { - $legend.append($('
            ').append($('
            ').css({ - width: '1em', - height: '1em', - background: chartObj.chart.seriesColors[i] - }).addClass('float-start')).append($('
            ').text(chartObj.chart.series[i].label).addClass('float-start')).append($('
            ')).addClass('float-start')); - } - - $('#gridchart' + runtime.chartAI).parent().append($legend); - - if (initialize !== true) { - runtime.charts['c' + runtime.chartAI] = chartObj; - buildRequiredDataList(); - } // time span selection - - - $('#gridchart' + runtime.chartAI).on('jqplotMouseDown', function (ev, gridpos, datapos) { - drawTimeSpan = true; - selectionTimeDiff.push(datapos.xaxis); - - if ($('#selection_box').length) { - $('#selection_box').remove(); - } - - var selectionBox = $('
            '); // eslint-disable-next-line compat/compat - - $(document.body).append(selectionBox); - selectionStartX = ev.pageX; - selectionStartY = ev.pageY; - selectionBox.attr({ - id: 'selection_box' - }).css({ - top: selectionStartY - gridpos.y, - left: selectionStartX - }).fadeIn(); - }); - $('#gridchart' + runtime.chartAI).on('jqplotMouseUp', function (ev, gridpos, datapos) { - if (!drawTimeSpan || editMode) { - return; - } - - selectionTimeDiff.push(datapos.xaxis); - - if (selectionTimeDiff[1] <= selectionTimeDiff[0]) { - selectionTimeDiff = []; - return; - } // get date from timestamp - - - var min = new Date(Math.ceil(selectionTimeDiff[0])); - var max = new Date(Math.ceil(selectionTimeDiff[1])); - getLogAnalyseDialog(min, max); - selectionTimeDiff = []; - drawTimeSpan = false; - }); - $('#gridchart' + runtime.chartAI).on('jqplotMouseMove', function (ev) { - if (!drawTimeSpan || editMode) { - return; - } - - if (selectionStartX !== undefined) { - $('#selection_box').css({ - width: Math.ceil(ev.pageX - selectionStartX) - }).fadeIn(); - } - }); - $('#gridchart' + runtime.chartAI).on('jqplotMouseLeave', function () { - drawTimeSpan = false; - }); // eslint-disable-next-line compat/compat - - $(document.body).on('mouseup', function () { - if ($('#selection_box').length) { - $('#selection_box').remove(); - } - }); // Edit, Print icon only in edit mode - - $('#chartGrid').find('div svg').find('*[zIndex=20], *[zIndex=21], *[zIndex=19]').toggle(editMode); - runtime.chartAI++; - } - - function getLogAnalyseDialog(min, max) { - var $logAnalyseDialog = $('#logAnalyseDialog'); - var $dateStart = $logAnalyseDialog.find('input[name="dateStart"]'); - var $dateEnd = $logAnalyseDialog.find('input[name="dateEnd"]'); - $dateStart.prop('readonly', true); - $dateEnd.prop('readonly', true); - var dlgBtns = {}; - - dlgBtns[Messages.strFromSlowLog] = function () { - loadLog('slow', min, max); - $(this).dialog('close'); - }; - - dlgBtns[Messages.strFromGeneralLog] = function () { - loadLog('general', min, max); - $(this).dialog('close'); - }; - - $logAnalyseDialog.dialog({ - width: 'auto', - height: 'auto', - buttons: dlgBtns - }); - Functions.addDatepicker($dateStart, 'datetime', { - showMillisec: false, - showMicrosec: false, - timeFormat: 'HH:mm:ss', - firstDay: firstDayOfCalendar - }); - Functions.addDatepicker($dateEnd, 'datetime', { - showMillisec: false, - showMicrosec: false, - timeFormat: 'HH:mm:ss', - firstDay: firstDayOfCalendar - }); - $dateStart.datepicker('setDate', min); - $dateEnd.datepicker('setDate', max); - } - - function loadLog(type, min, max) { - var dateStart = Date.parse($('#logAnalyseDialog').find('input[name="dateStart"]').datepicker('getDate')) || min; - var dateEnd = Date.parse($('#logAnalyseDialog').find('input[name="dateEnd"]').datepicker('getDate')) || max; - loadLogStatistics({ - src: type, - start: dateStart, - end: dateEnd, - removeVariables: $('#removeVariables').prop('checked'), - limitTypes: $('#limitTypes').prop('checked') - }); - } - /* Called in regular intervals, this function updates the values of each chart in the grid */ - - - function refreshChartGrid() { - /* Send to server */ - runtime.refreshRequest = $.post('index.php?route=/server/status/monitor/chart', { - 'ajax_request': true, - 'requiredData': JSON.stringify(runtime.dataList), - 'server': CommonParams.get('server') - }, function (data) { - var chartData; - - if (typeof data !== 'undefined' && data.success === true) { - chartData = data.message; - } else { - return serverResponseError(); - } - - var value; - var i = 0; - var diff; - var total; - /* Update values in each graph */ - - $.each(runtime.charts, function (orderKey, elem) { - var key = elem.chartID; // If newly added chart, we have no data for it yet - - if (!chartData[key]) { - return; - } // Draw all series - - - total = 0; - - for (var j = 0; j < elem.nodes.length; j++) { - // Update x-axis - if (i === 0 && j === 0) { - if (oldChartData === null) { - diff = chartData.x - runtime.xmax; - } else { - diff = parseInt(chartData.x - oldChartData.x, 10); - } - - runtime.xmin += diff; - runtime.xmax += diff; - } // elem.chart.xAxis[0].setExtremes(runtime.xmin, runtime.xmax, false); - - /* Calculate y value */ - // If transform function given, use it - - - if (elem.nodes[j].transformFn) { - value = chartValueTransform(elem.nodes[j].transformFn, chartData[key][j], // Check if first iteration (oldChartData==null), or if newly added chart oldChartData[key]==null - oldChartData === null || oldChartData[key] === null || oldChartData[key] === undefined ? null : oldChartData[key][j]); // Otherwise use original value and apply differential and divisor if given, - // in this case we have only one data point per series - located at chartData[key][j][0] - } else { - value = parseFloat(chartData[key][j][0].value); - - if (elem.nodes[j].display === 'differential') { - if (oldChartData === null || oldChartData[key] === null || oldChartData[key] === undefined) { - continue; - } - - value -= oldChartData[key][j][0].value; - } - - if (elem.nodes[j].valueDivisor) { - value = value / elem.nodes[j].valueDivisor; - } - } // Set y value, if defined - - - if (value !== undefined) { - elem.chart.series[j].data.push([chartData.x, value]); - - if (value > elem.maxYLabel) { - elem.maxYLabel = value; - } else if (elem.maxYLabel === 0) { - elem.maxYLabel = 0.5; - } // free old data point values and update maxYLabel - - - if (elem.chart.series[j].data.length > runtime.gridMaxPoints && elem.chart.series[j].data[0][0] < runtime.xmin) { - // check if the next freeable point is highest - if (elem.maxYLabel <= elem.chart.series[j].data[0][1]) { - elem.chart.series[j].data.splice(0, elem.chart.series[j].data.length - runtime.gridMaxPoints); - elem.maxYLabel = getMaxYLabel(elem.chart.series[j].data); - } else { - elem.chart.series[j].data.splice(0, elem.chart.series[j].data.length - runtime.gridMaxPoints); - } - } - - if (elem.title === Messages.strSystemMemory || elem.title === Messages.strSystemSwap) { - total += value; - } - } - } // update chart options - // keep ticks number/positioning consistent while refreshrate changes - - - var tickInterval = (runtime.xmax - runtime.xmin) / 5; - elem.chart.axes.xaxis.ticks = [runtime.xmax - tickInterval * 4, runtime.xmax - tickInterval * 3, runtime.xmax - tickInterval * 2, runtime.xmax - tickInterval, runtime.xmax]; - - if (elem.title !== Messages.strSystemCPUUsage && elem.title !== Messages.strQueryCacheEfficiency && elem.title !== Messages.strSystemMemory && elem.title !== Messages.strSystemSwap) { - elem.chart.axes.yaxis.max = Math.ceil(elem.maxYLabel * 1.1); - elem.chart.axes.yaxis.tickInterval = Math.ceil(elem.maxYLabel * 1.1 / 5); - } else if (elem.title === Messages.strSystemMemory || elem.title === Messages.strSystemSwap) { - elem.chart.axes.yaxis.max = Math.ceil(total * 1.1 / 100) * 100; - elem.chart.axes.yaxis.tickInterval = Math.ceil(total * 1.1 / 5); - } - - i++; - - if (runtime.redrawCharts) { - elem.chart.replot(); - } - }); - oldChartData = chartData; - runtime.refreshTimeout = setTimeout(refreshChartGrid, monitorSettings.gridRefresh); - }); - } - /* Function to get highest plotted point's y label, to scale the chart, - * TODO: make jqplot's autoscale:true work here - */ - - - function getMaxYLabel(dataValues) { - var maxY = dataValues[0][1]; - $.each(dataValues, function (k, v) { - maxY = v[1] > maxY ? v[1] : maxY; - }); - return maxY; - } - /* Function that supplies special value transform functions for chart values */ - - - function chartValueTransform(name, cur, prev) { - switch (name) { - case 'cpu-linux': - if (prev === null) { - return undefined; - } // cur and prev are datapoint arrays, but containing - // only 1 element for cpu-linux - - - var newCur = cur[0]; - var newPrev = prev[0]; - var diffTotal = newCur.busy + newCur.idle - (newPrev.busy + newPrev.idle); - var diffIdle = newCur.idle - newPrev.idle; - return 100 * (diffTotal - diffIdle) / diffTotal; - // Query cache efficiency (%) - - case 'qce': - if (prev === null) { - return undefined; - } // cur[0].value is Qcache_hits, cur[1].value is Com_select - - - var diffQHits = cur[0].value - prev[0].value; // No NaN please :-) - - if (cur[1].value - prev[1].value === 0) { - return 0; - } - - return diffQHits / (cur[1].value - prev[1].value + diffQHits) * 100; - // Query cache usage (%) - - case 'qcu': - if (cur[1].value === 0) { - return 0; - } // cur[0].value is Qcache_free_memory, cur[1].value is query_cache_size - - - return 100 - cur[0].value / cur[1].value * 100; - } - - return undefined; - } - /* Build list of nodes that need to be retrieved from server. - * It creates something like a stripped down version of the runtime.charts object. - */ - - - function buildRequiredDataList() { - runtime.dataList = {}; // Store an own id, because the property name is subject of reordering, - // thus destroying our mapping with runtime.charts <=> runtime.dataList - - var chartID = 0; - $.each(runtime.charts, function (key, chart) { - runtime.dataList[chartID] = []; - - for (var i = 0, l = chart.nodes.length; i < l; i++) { - runtime.dataList[chartID][i] = chart.nodes[i].dataPoints; - } - - runtime.charts[key].chartID = chartID; - chartID++; - }); - } - /* Loads the log table data, generates the table and handles the filters */ - - - function loadLogStatistics(opts) { - var logRequest = null; - - if (!opts.removeVariables) { - opts.removeVariables = false; - } - - if (!opts.limitTypes) { - opts.limitTypes = false; - } - - $('#emptyDialog').dialog({ - title: Messages.strAnalysingLogsTitle - }); - $('#emptyDialog').html(Messages.strAnalysingLogs + ' '); - var dlgBtns = {}; - - dlgBtns[Messages.strCancelRequest] = function () { - if (logRequest !== null) { - logRequest.abort(); - } - - $(this).dialog('close'); - }; - - $('#emptyDialog').dialog({ - width: 'auto', - height: 'auto', - buttons: dlgBtns - }); - var url = 'index.php?route=/server/status/monitor/slow-log'; - - if (opts.src === 'general') { - url = 'index.php?route=/server/status/monitor/general-log'; - } - - logRequest = $.post(url, { - 'ajax_request': true, - 'time_start': Math.round(opts.start / 1000), - 'time_end': Math.round(opts.end / 1000), - 'removeVariables': opts.removeVariables, - 'limitTypes': opts.limitTypes, - 'server': CommonParams.get('server') - }, function (data) { - var logData; - var dlgBtns = {}; - - if (typeof data !== 'undefined' && data.success === true) { - logData = data.message; - } else { - return serverResponseError(); - } - - if (logData.rows.length === 0) { - $('#emptyDialog').dialog({ - title: Messages.strNoDataFoundTitle - }); - $('#emptyDialog').html('

            ' + Messages.strNoDataFound + '

            '); - - dlgBtns[Messages.strClose] = function () { - $(this).dialog('close'); - }; - - $('#emptyDialog').dialog('option', 'buttons', dlgBtns); - return; - } - - runtime.logDataCols = buildLogTable(logData, opts.removeVariables); - /* Show some stats in the dialog */ - - $('#emptyDialog').dialog({ - title: Messages.strLoadingLogs - }); - $('#emptyDialog').html('

            ' + Messages.strLogDataLoaded + '

            '); - $.each(logData.sum, function (key, value) { - var newKey = key.charAt(0).toUpperCase() + key.slice(1).toLowerCase(); - - if (newKey === 'Total') { - newKey = '' + newKey + ''; - } - - $('#emptyDialog').append(newKey + ': ' + value + '
            '); - }); - /* Add filter options if more than a bunch of rows there to filter */ - - if (logData.numRows > 12) { - $('#logTable').prepend('
            ' + ' ' + Messages.strFiltersForLogTable + '' + '
            ' + ' ' + ' ' + '
            ' + (logData.numRows > 250 ? '
            ' : '') + '
            ' + ' ' + ' ' + ' '); - $('#noWHEREData').on('change', function () { - filterQueries(true); - }); - - if (logData.numRows > 250) { - $('#startFilterQueryText').on('click', filterQueries); - } else { - $('#filterQueryText').on('keyup', filterQueries); - } - } - - dlgBtns[Messages.strJumpToTable] = function () { - $(this).dialog('close'); - $(document).scrollTop($('#logTable').offset().top); - }; - - $('#emptyDialog').dialog('option', 'buttons', dlgBtns); - }); - /** - * Handles the actions performed when the user uses any of the - * log table filters which are the filter by name and grouping - * with ignoring data in WHERE clauses - * - * @param {boolean} varFilterChange Should be true when the users enabled or disabled - * to group queries ignoring data in WHERE clauses - */ - - function filterQueries(varFilterChange) { - var textFilter; - var val = $('#filterQueryText').val(); - - if (val.length === 0) { - textFilter = null; - } else { - try { - textFilter = new RegExp(val, 'i'); - $('#filterQueryText').removeClass('error'); - } catch (e) { - if (e instanceof SyntaxError) { - $('#filterQueryText').addClass('error'); - textFilter = null; - } - } - } - - var rowSum = 0; - var totalSum = 0; - var i = 0; - var q; - var noVars = $('#noWHEREData').prop('checked'); - var equalsFilter = /([^=]+)=(\d+|(('|"|).*?[^\\])\4((\s+)|$))/gi; - var functionFilter = /([a-z0-9_]+)\(.+?\)/gi; - var filteredQueries = {}; - var filteredQueriesLines = {}; - var hide = false; - var rowData; - var queryColumnName = runtime.logDataCols[runtime.logDataCols.length - 2]; - var sumColumnName = runtime.logDataCols[runtime.logDataCols.length - 1]; - var isSlowLog = opts.src === 'slow'; - var columnSums = {}; // For the slow log we have to count many columns (query_time, lock_time, rows_examined, rows_sent, etc.) - - var countRow = function (query, row) { - var cells = row.match(/(.*?)<\/td>/gi); - - if (!columnSums[query]) { - columnSums[query] = [0, 0, 0, 0]; - } // lock_time and query_time and displayed in timespan format - - - columnSums[query][0] += timeToSec(cells[2].replace(/(|<\/td>)/gi, '')); - columnSums[query][1] += timeToSec(cells[3].replace(/(|<\/td>)/gi, '')); // rows_examind and rows_sent are just numbers - - columnSums[query][2] += parseInt(cells[4].replace(/(|<\/td>)/gi, ''), 10); - columnSums[query][3] += parseInt(cells[5].replace(/(|<\/td>)/gi, ''), 10); - }; // We just assume the sql text is always in the second last column, and that the total count is right of it - - - $('#logTable').find('table tbody tr').children('td').eq(runtime.logDataCols.length - 2).each(function () { - var $t = $(this); // If query is a SELECT and user enabled or disabled to group - // queries ignoring data in where statements, we - // need to re-calculate the sums of each row - - if (varFilterChange && $t.html().match(/^SELECT/i)) { - if (noVars) { - // Group on => Sum up identical columns, and hide all but 1 - q = $t.text().replace(equalsFilter, '$1=...$6').trim(); - q = q.replace(functionFilter, ' $1(...)'); // Js does not specify a limit on property name length, - // so we can abuse it as index :-) - - if (filteredQueries[q]) { - filteredQueries[q] += parseInt($t.next().text(), 10); - totalSum += parseInt($t.next().text(), 10); - hide = true; - } else { - filteredQueries[q] = parseInt($t.next().text(), 10); - filteredQueriesLines[q] = i; - $t.text(q); - } - - if (isSlowLog) { - countRow(q, $t.parent().html()); - } - } else { - // Group off: Restore original columns - rowData = $t.parent().data('query'); // Restore SQL text - - $t.text(rowData[queryColumnName]); // Restore total count - - $t.next().text(rowData[sumColumnName]); // Restore slow log columns - - if (isSlowLog) { - $t.parent().children('td').eq(2).text(rowData.query_time); - $t.parent().children('td').eq(3).text(rowData.lock_time); - $t.parent().children('td').eq(4).text(rowData.rows_sent); - $t.parent().children('td').eq(5).text(rowData.rows_examined); - } - } - } // If not required to be hidden, do we need - // to hide because of a not matching text filter? - - - if (!hide && textFilter !== null && !textFilter.exec($t.text())) { - hide = true; - } // Now display or hide this column - - - if (hide) { - $t.parent().css('display', 'none'); - } else { - totalSum += parseInt($t.next().text(), 10); - rowSum++; - $t.parent().css('display', ''); - } - - hide = false; - i++; - }); // We finished summarizing counts => Update count values of all grouped entries - - if (varFilterChange) { - if (noVars) { - var numCol; - var row; - var $table = $('#logTable').find('table tbody'); - $.each(filteredQueriesLines, function (key, value) { - if (filteredQueries[key] <= 1) { - return; - } - - row = $table.children('tr').eq(value); - numCol = row.children().eq(runtime.logDataCols.length - 1); - numCol.text(filteredQueries[key]); - - if (isSlowLog) { - row.children('td').eq(2).text(secToTime(columnSums[key][0])); - row.children('td').eq(3).text(secToTime(columnSums[key][1])); - row.children('td').eq(4).text(columnSums[key][2]); - row.children('td').eq(5).text(columnSums[key][3]); - } - }); - } - - $('#logTable').find('table').trigger('update'); - setTimeout(function () { - $('#logTable').find('table').trigger('sorton', [[[runtime.logDataCols.length - 1, 1]]]); - }, 0); - } // Display some stats at the bottom of the table - - - $('#logTable').find('table tfoot tr').html('' + Messages.strSumRows + ' ' + rowSum + '' + Messages.strTotal + '' + totalSum + ''); - } - } - /* Turns a timespan (12:12:12) into a number */ - - - function timeToSec(timeStr) { - var time = timeStr.split(':'); - return parseInt(time[0], 10) * 3600 + parseInt(time[1], 10) * 60 + parseInt(time[2], 10); - } - /* Turns a number into a timespan (100 into 00:01:40) */ - - - function secToTime(timeInt) { - var time = timeInt; - var hours = Math.floor(time / 3600); - time -= hours * 3600; - var minutes = Math.floor(time / 60); - time -= minutes * 60; - - if (hours < 10) { - hours = '0' + hours; - } - - if (minutes < 10) { - minutes = '0' + minutes; - } - - if (time < 10) { - time = '0' + time; - } - - return hours + ':' + minutes + ':' + time; - } - /* Constructs the log table out of the retrieved server data */ - - - function buildLogTable(data, groupInserts) { - var rows = data.rows; - var cols = []; - var $table = $('
            '); - var $tBody; - var $tRow; - var $tCell; - $('#logTable').html($table); - - var tempPushKey = function (key) { - cols.push(key); - }; - - var formatValue = function (name, value) { - if (name === 'user_host') { - return value.replace(/(\[.*?\])+/g, ''); - } - - return Functions.escapeHtml(value); - }; - - for (var i = 0, l = rows.length; i < l; i++) { - if (i === 0) { - $.each(rows[0], tempPushKey); - $table.append('' + '' + cols.join('') + '' + ''); - $table.append($tBody = $('')); - } - - $tBody.append($tRow = $('')); - - for (var j = 0, ll = cols.length; j < ll; j++) { - // Assuming the query column is the second last - if (j === cols.length - 2 && rows[i][cols[j]].match(/^SELECT/i)) { - $tRow.append($tCell = $('' + formatValue(cols[j], rows[i][cols[j]]) + '')); - $tCell.on('click', openQueryAnalyzer); - } else { - $tRow.append('' + formatValue(cols[j], rows[i][cols[j]]) + ''); - } - - $tRow.data('query', rows[i]); - } - } - - $table.append('' + '' + Messages.strSumRows + ' ' + data.numRows + '' + Messages.strTotal + '' + data.sum.TOTAL + ''); // Append a tooltip to the count column, if there exist one - - if ($('#logTable').find('tr').first().find('th').last().text().indexOf('#') > -1) { - $('#logTable').find('tr').first().find('th').last().append(' ' + Functions.getImage('b_help', '', { - 'class': 'qroupedQueryInfoIcon' - })); - var tooltipContent = Messages.strCountColumnExplanation; - - if (groupInserts) { - tooltipContent += '

            ' + Messages.strMoreCountColumnExplanation + '

            '; - } - - Functions.tooltip($('img.qroupedQueryInfoIcon'), 'img', tooltipContent); - } - - $('#logTable').find('table').tablesorter({ - sortList: [[cols.length - 1, 1]], - widgets: ['fast-zebra'] - }); - $('#logTable').find('table thead th').append('
            '); - return cols; - } - /* Opens the query analyzer dialog */ - - - function openQueryAnalyzer() { - var rowData = $(this).parent().data('query'); - var query = rowData.argument || rowData.sql_text; - - if (codeMirrorEditor) { - // TODO: somehow Functions.sqlPrettyPrint messes up the query, needs be fixed - // query = Functions.sqlPrettyPrint(query); - codeMirrorEditor.setValue(query); // Codemirror is bugged, it doesn't refresh properly sometimes. - // Following lines seem to fix that - - setTimeout(function () { - codeMirrorEditor.refresh(); - }, 50); - } else { - $('#sqlquery').val(query); - } - - var profilingChart = null; - var dlgBtns = {}; - - dlgBtns[Messages.strAnalyzeQuery] = function () { - profilingChart = loadQueryAnalysis(rowData); - }; - - dlgBtns[Messages.strClose] = function () { - $(this).dialog('close'); - }; - - $('#queryAnalyzerDialog').dialog({ - width: 'auto', - height: 'auto', - resizable: false, - buttons: dlgBtns, - close: function () { - if (profilingChart !== null) { - profilingChart.destroy(); - } - - $('#queryAnalyzerDialog').find('div.placeHolder').html(''); - - if (codeMirrorEditor) { - codeMirrorEditor.setValue(''); - } else { - $('#sqlquery').val(''); - } - } - }); - } - /* Loads and displays the analyzed query data */ - - - function loadQueryAnalysis(rowData) { - var db = rowData.db || ''; - var profilingChart = null; - $('#queryAnalyzerDialog').find('div.placeHolder').html(Messages.strAnalyzing + ' '); - $.post('index.php?route=/server/status/monitor/query', { - 'ajax_request': true, - 'query': codeMirrorEditor ? codeMirrorEditor.getValue() : $('#sqlquery').val(), - 'database': db, - 'server': CommonParams.get('server') - }, function (responseData) { - var data = responseData; - var i; - var l; - - if (typeof data !== 'undefined' && data.success === true) { - data = data.message; - } - - if (data.error) { - if (data.error.indexOf('1146') !== -1 || data.error.indexOf('1046') !== -1) { - data.error = Messages.strServerLogError; - } - - $('#queryAnalyzerDialog').find('div.placeHolder').html(''); - return; - } - - var totalTime = 0; // Float sux, I'll use table :( - - $('#queryAnalyzerDialog').find('div.placeHolder').html('
            '); - var explain = '' + Messages.strExplainOutput + ' ' + $('#explain_docu').html(); - - if (data.explain.length > 1) { - explain += ' ('; - - for (i = 0; i < data.explain.length; i++) { - if (i > 0) { - explain += ', '; - } - - explain += '' + i + ''; - } - - explain += ')'; - } - - explain += '

            '; - - var tempExplain = function (key, value) { - var newValue = value === null ? 'null' : Functions.escapeHtml(value); - - if (key === 'type' && newValue.toLowerCase() === 'all') { - newValue = '' + newValue + ''; - } - - if (key === 'Extra') { - newValue = newValue.replace(/(using (temporary|filesort))/gi, '$1'); - } - - explain += key + ': ' + newValue + '
            '; - }; - - for (i = 0, l = data.explain.length; i < l; i++) { - explain += '
            0 ? 'style="display:none;"' : '') + '>'; - $.each(data.explain[i], tempExplain); - explain += '
            '; - } - - explain += '

            ' + Messages.strAffectedRows + ' ' + data.affectedRows; - $('#queryAnalyzerDialog').find('div.placeHolder td.explain').append(explain); - $('#queryAnalyzerDialog').find('div.placeHolder a[href*="#showExplain"]').on('click', function () { - var id = $(this).attr('href').split('-')[1]; - $(this).parent().find('div[class*="explain"]').hide(); - $(this).parent().find('div[class*="explain-' + id + '"]').show(); - }); - - if (data.profiling) { - var chartData = []; - var numberTable = ''; - var duration; - var otherTime = 0; - - for (i = 0, l = data.profiling.length; i < l; i++) { - duration = parseFloat(data.profiling[i].duration); - totalTime += duration; - numberTable += ''; - } // Only put those values in the pie which are > 2% - - - for (i = 0, l = data.profiling.length; i < l; i++) { - duration = parseFloat(data.profiling[i].duration); - - if (duration / totalTime > 0.02) { - chartData.push([Functions.prettyProfilingNum(duration, 2) + ' ' + data.profiling[i].state, duration]); - } else { - otherTime += duration; - } - } - - if (otherTime > 0) { - chartData.push([Functions.prettyProfilingNum(otherTime, 2) + ' ' + Messages.strOther, otherTime]); - } - - numberTable += ''; - numberTable += '
            ' + Messages.strStatus + '' + Messages.strTime + '
            ' + data.profiling[i].state + ' ' + Functions.prettyProfilingNum(duration, 2) + '
            ' + Messages.strTotalTime + '' + Functions.prettyProfilingNum(totalTime, 2) + '
            '; - $('#queryAnalyzerDialog').find('div.placeHolder td.chart').append('' + Messages.strProfilingResults + ' ' + $('#profiling_docu').html() + ' ' + '(' + Messages.strTable + ', ' + Messages.strChart + ')
            ' + numberTable + '

            '); - $('#queryAnalyzerDialog').find('div.placeHolder a[href="#showNums"]').on('click', function () { - $('#queryAnalyzerDialog').find('#queryProfiling').hide(); - $('#queryAnalyzerDialog').find('table.queryNums').show(); - return false; - }); - $('#queryAnalyzerDialog').find('div.placeHolder a[href="#showChart"]').on('click', function () { - $('#queryAnalyzerDialog').find('#queryProfiling').show(); - $('#queryAnalyzerDialog').find('table.queryNums').hide(); - return false; - }); - profilingChart = Functions.createProfilingChart('queryProfiling', chartData); - } - }); - return profilingChart; - } - /* Saves the monitor to localstorage */ - - - function saveMonitor() { - var gridCopy = {}; - $.each(runtime.charts, function (key, elem) { - gridCopy[key] = {}; - gridCopy[key].nodes = elem.nodes; - gridCopy[key].settings = elem.settings; - gridCopy[key].title = elem.title; - gridCopy[key].series = elem.series; - gridCopy[key].maxYLabel = elem.maxYLabel; - }); - - if (isStorageSupported('localStorage')) { - window.localStorage.monitorCharts = JSON.stringify(gridCopy); - window.localStorage.monitorSettings = JSON.stringify(monitorSettings); - window.localStorage.monitorVersion = monitorProtocolVersion; - } - - $('a[href="#clearMonitorConfig"]').show(); - } -}); // Run the monitor once loaded - -AJAX.registerOnload('server/status/monitor.js', function () { - $('a[href="#pauseCharts"]').trigger('click'); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/server/status/variables.js b/Sources/php_script/script/phpMyAdmin/js/dist/server/status/variables.js deleted file mode 100644 index 89b7148..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/server/status/variables.js +++ /dev/null @@ -1,96 +0,0 @@ -/** - * - * - * @package PhpMyAdmin - */ - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('server/status/variables.js', function () { - $('#filterAlert').off('change'); - $('#filterText').off('keyup'); - $('#filterCategory').off('change'); - $('#dontFormat').off('change'); -}); -AJAX.registerOnload('server/status/variables.js', function () { - // Filters for status variables - var textFilter = null; - var alertFilter = $('#filterAlert').prop('checked'); - var categoryFilter = $('#filterCategory').find(':selected').val(); - var text = ''; // Holds filter text - - /* 3 Filtering functions */ - - $('#filterAlert').on('change', function () { - alertFilter = this.checked; - filterVariables(); - }); - $('#filterCategory').on('change', function () { - categoryFilter = $(this).val(); - filterVariables(); - }); - $('#dontFormat').on('change', function () { - // Hiding the table while changing values speeds up the process a lot - const serverStatusVariables = $('#serverStatusVariables'); - serverStatusVariables.hide(); - serverStatusVariables.find('td.value span.original').toggle(this.checked); - serverStatusVariables.find('td.value span.formatted').toggle(!this.checked); - serverStatusVariables.show(); - }).trigger('change'); - $('#filterText').on('keyup', function () { - var word = $(this).val().replace(/_/g, ' '); - - if (word.length === 0) { - textFilter = null; - } else { - try { - textFilter = new RegExp('(^| )' + word, 'i'); - $(this).removeClass('error'); - } catch (e) { - if (e instanceof SyntaxError) { - $(this).addClass('error'); - textFilter = null; - } - } - } - - text = word; - filterVariables(); - }).trigger('keyup'); - /* Filters the status variables by name/category/alert in the variables tab */ - - function filterVariables() { - var usefulLinks = 0; - var section = text; - - if (categoryFilter.length > 0) { - section = categoryFilter; - } - - if (section.length > 1) { - $('#linkSuggestions').find('span').each(function () { - if ($(this).attr('class').indexOf('status_' + section) !== -1) { - usefulLinks++; - $(this).css('display', ''); - } else { - $(this).css('display', 'none'); - } - }); - } - - if (usefulLinks > 0) { - $('#linkSuggestions').css('display', ''); - } else { - $('#linkSuggestions').css('display', 'none'); - } - - $('#serverStatusVariables').find('th.name').each(function () { - if ((textFilter === null || textFilter.exec($(this).text())) && (!alertFilter || $(this).next().find('span.text-danger').length > 0) && (categoryFilter.length === 0 || $(this).parent().hasClass('s_' + categoryFilter))) { - $(this).parent().css('display', ''); - } else { - $(this).parent().css('display', 'none'); - } - }); - } -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/server/user_groups.js b/Sources/php_script/script/phpMyAdmin/js/dist/server/user_groups.js deleted file mode 100644 index 993dc86..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/server/user_groups.js +++ /dev/null @@ -1,35 +0,0 @@ -/** - * @fileoverview Javascript functions used in server user groups page - * @name Server User Groups - * - * @requires jQuery - */ - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('server/user_groups.js', function () { - $('#deleteUserGroupModal').off('show.bs.modal'); -}); -/** - * Bind event handlers - */ - -AJAX.registerOnload('server/user_groups.js', function () { - const deleteUserGroupModal = $('#deleteUserGroupModal'); - deleteUserGroupModal.on('show.bs.modal', function (event) { - const userGroupName = $(event.relatedTarget).data('user-group'); - this.querySelector('.modal-body').innerText = Functions.sprintf(Messages.strDropUserGroupWarning, Functions.escapeHtml(userGroupName)); - }); - deleteUserGroupModal.on('shown.bs.modal', function (event) { - const userGroupName = $(event.relatedTarget).data('user-group'); - $('#deleteUserGroupConfirm').on('click', function () { - $.post('index.php?route=/server/user-groups', { - 'deleteUserGroup': true, - 'userGroup': userGroupName, - 'ajax_request': true - }, AJAX.responseHandler); - $('#deleteUserGroupModal').modal('hide'); - }); - }); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/table/change.js b/Sources/php_script/script/phpMyAdmin/js/dist/table/change.js deleted file mode 100644 index 68eefae..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/table/change.js +++ /dev/null @@ -1,836 +0,0 @@ -/** - * @fileoverview function used in table data manipulation pages - * - * @requires jQuery - * @requires jQueryUI - * @requires js/functions.js - * - */ - -/* global extendingValidatorMessages */ -// templates/javascript/variables.twig - -/* global openGISEditor, gisEditorLoaded, loadJSAndGISEditor, loadGISEditor */ -// js/gis_data_editor.js - -/** - * Modify form controls when the "NULL" checkbox is checked - * - * @param {string} theType the MySQL field type - * @param {string} urlField the urlencoded field name - OBSOLETE - * @param {string} md5Field the md5 hashed field name - * @param {string} multiEdit the multi_edit row sequence number - * - * @return {boolean} always true - */ -function nullify(theType, urlField, md5Field, multiEdit) { - var rowForm = document.forms.insertForm; - - if (typeof rowForm.elements['funcs' + multiEdit + '[' + md5Field + ']'] !== 'undefined') { - rowForm.elements['funcs' + multiEdit + '[' + md5Field + ']'].selectedIndex = -1; - } // "ENUM" field with more than 20 characters - - - if (Number(theType) === 1) { - rowForm.elements['fields' + multiEdit + '[' + md5Field + ']'][1].selectedIndex = -1; // Other "ENUM" field - } else if (Number(theType) === 2) { - var elts = rowForm.elements['fields' + multiEdit + '[' + md5Field + ']']; // when there is just one option in ENUM: - - if (elts.checked) { - elts.checked = false; - } else { - var eltsCnt = elts.length; - - for (var i = 0; i < eltsCnt; i++) { - elts[i].checked = false; - } // end for - - } // end if - // "SET" field - - } else if (Number(theType) === 3) { - rowForm.elements['fields' + multiEdit + '[' + md5Field + '][]'].selectedIndex = -1; // Foreign key field (drop-down) - } else if (Number(theType) === 4) { - rowForm.elements['fields' + multiEdit + '[' + md5Field + ']'].selectedIndex = -1; // foreign key field (with browsing icon for foreign values) - } else if (Number(theType) === 6) { - rowForm.elements['fields' + multiEdit + '[' + md5Field + ']'].value = ''; // Other field types - } else - /* if (theType === 5)*/ - { - rowForm.elements['fields' + multiEdit + '[' + md5Field + ']'].value = ''; - } // end if... else if... else - - - return true; -} // end of the 'nullify()' function - -/** - * javascript DateTime format validation. - * its used to prevent adding default (0000-00-00 00:00:00) to database when user enter wrong values - * Start of validation part - */ -// function checks the number of days in febuary - - -function daysInFebruary(year) { - return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0) ? 29 : 28; -} // function to convert single digit to double digit - - -function fractionReplace(number) { - var num = parseInt(number, 10); - return num >= 1 && num <= 9 ? '0' + num : '00'; -} -/* function to check the validity of date -* The following patterns are accepted in this validation (accepted in mysql as well) -* 1) 2001-12-23 -* 2) 2001-1-2 -* 3) 02-12-23 -* 4) And instead of using '-' the following punctuations can be used (+,.,*,^,@,/) All these are accepted by mysql as well. Therefore no issues -*/ - - -function isDate(val, tmstmp) { - var value = val.replace(/[.|*|^|+|//|@]/g, '-'); - var arrayVal = value.split('-'); - - for (var a = 0; a < arrayVal.length; a++) { - if (arrayVal[a].length === 1) { - arrayVal[a] = fractionReplace(arrayVal[a]); - } - } - - value = arrayVal.join('-'); - var pos = 2; - var dtexp = new RegExp(/^([0-9]{4})-(((01|03|05|07|08|10|12)-((0[0-9])|([1-2][0-9])|(3[0-1])))|((02|04|06|09|11)-((0[0-9])|([1-2][0-9])|30))|((00)-(00)))$/); - - if (value.length === 8) { - pos = 0; - } - - if (dtexp.test(value)) { - var month = parseInt(value.substring(pos + 3, pos + 5), 10); - var day = parseInt(value.substring(pos + 6, pos + 8), 10); - var year = parseInt(value.substring(0, pos + 2), 10); - - if (month === 2 && day > daysInFebruary(year)) { - return false; - } - - if (value.substring(0, pos + 2).length === 2) { - year = parseInt('20' + value.substring(0, pos + 2), 10); - } - - if (tmstmp === true) { - if (year < 1978) { - return false; - } - - if (year > 2038 || year > 2037 && day > 19 && month >= 1 || year > 2037 && month > 1) { - return false; - } - } - } else { - return false; - } - - return true; -} -/* function to check the validity of time -* The following patterns are accepted in this validation (accepted in mysql as well) -* 1) 2:3:4 -* 2) 2:23:43 -* 3) 2:23:43.123456 -*/ - - -function isTime(val) { - var arrayVal = val.split(':'); - - for (var a = 0, l = arrayVal.length; a < l; a++) { - if (arrayVal[a].length === 1) { - arrayVal[a] = fractionReplace(arrayVal[a]); - } - } - - var newVal = arrayVal.join(':'); - var tmexp = new RegExp(/^(-)?(([0-7]?[0-9][0-9])|(8[0-2][0-9])|(83[0-8])):((0[0-9])|([1-5][0-9])):((0[0-9])|([1-5][0-9]))(\.[0-9]{1,6}){0,1}$/); - return tmexp.test(newVal); -} -/** - * To check whether insert section is ignored or not - * @param {string} multiEdit - * @return {boolean} - */ - - -function checkForCheckbox(multiEdit) { - if ($('#insert_ignore_' + multiEdit).length) { - return $('#insert_ignore_' + multiEdit).is(':unchecked'); - } - - return true; -} // used in Search page mostly for INT fields -// eslint-disable-next-line no-unused-vars - - -function verifyAfterSearchFieldChange(index, searchFormId) { - var $thisInput = $('input[name=\'criteriaValues[' + index + ']\']'); // Add data-skip-validators attribute to skip validation in changeValueFieldType function - - if ($('#fieldID_' + index).data('data-skip-validators')) { - $(searchFormId).validate().destroy(); - return; - } // validation for integer type - - - if ($thisInput.data('type') === 'INT' || $thisInput.data('type') === 'TINYINT') { - // Trim spaces if it's an integer - $thisInput.val($thisInput.val().trim()); - var hasMultiple = $thisInput.prop('multiple'); - - if (hasMultiple) { - $(searchFormId).validate({ - // update errors as we write - onkeyup: function (element) { - $(element).valid(); - } - }); // validator method for IN(...), NOT IN(...) - // BETWEEN and NOT BETWEEN - - jQuery.validator.addMethod('validationFunctionForMultipleInt', function (value) { - return value.match(/^(?:(?:\d\s*)|\s*)+(?:,\s*\d+)*$/i) !== null; - }, Messages.strEnterValidNumber); - validateMultipleIntField($thisInput, true); - } else { - $(searchFormId).validate({ - // update errors as we write - onkeyup: function (element) { - $(element).valid(); - } - }); - validateIntField($thisInput, true); - } // Update error on dropdown change - - - $thisInput.valid(); - } -} -/** - * Validate the an input contains multiple int values - * @param {jQuery} jqueryInput the Jquery object - * @param {boolean} returnValueIfFine the value to return if the validator passes - * @return {void} - */ - - -function validateMultipleIntField(jqueryInput, returnValueIfFine) { - // removing previous rules - jqueryInput.rules('remove'); - jqueryInput.rules('add', { - validationFunctionForMultipleInt: { - param: jqueryInput.value, - depends: function () { - return returnValueIfFine; - } - } - }); -} -/** - * Validate the an input contains an int value - * @param {jQuery} jqueryInput the Jquery object - * @param {boolean} returnValueIfIsNumber the value to return if the validator passes - * @return {void} - */ - - -function validateIntField(jqueryInput, returnValueIfIsNumber) { - var mini = parseInt(jqueryInput.data('min')); - var maxi = parseInt(jqueryInput.data('max')); // removing previous rules - - jqueryInput.rules('remove'); - jqueryInput.rules('add', { - number: { - param: true, - depends: function () { - return returnValueIfIsNumber; - } - }, - min: { - param: mini, - depends: function () { - if (isNaN(jqueryInput.val())) { - return false; - } else { - return returnValueIfIsNumber; - } - } - }, - max: { - param: maxi, - depends: function () { - if (isNaN(jqueryInput.val())) { - return false; - } else { - return returnValueIfIsNumber; - } - } - } - }); -} - -function verificationsAfterFieldChange(urlField, multiEdit, theType) { - var evt = window.event || arguments.callee.caller.arguments[0]; - var target = evt.target || evt.srcElement; - var $thisInput = $(':input[name^=\'fields[multi_edit][' + multiEdit + '][' + urlField + ']\']'); // the function drop-down that corresponds to this input field - - var $thisFunction = $('select[name=\'funcs[multi_edit][' + multiEdit + '][' + urlField + ']\']'); - var functionSelected = false; - - if (typeof $thisFunction.val() !== 'undefined' && $thisFunction.val() !== null && $thisFunction.val().length > 0) { - functionSelected = true; - } // To generate the textbox that can take the salt - - - var newSaltBox = '
            '; // If encrypting or decrypting functions that take salt as input is selected append the new textbox for salt - - if (target.value === 'AES_ENCRYPT' || target.value === 'AES_DECRYPT' || target.value === 'DES_ENCRYPT' || target.value === 'DES_DECRYPT' || target.value === 'ENCRYPT') { - if (!$('#salt_' + target.id).length) { - $thisInput.after(newSaltBox); - } - } else { - // Remove the textbox for salt - $('#salt_' + target.id).prev('br').remove(); - $('#salt_' + target.id).remove(); - } // Remove possible blocking rules if the user changed functions - - - $('#' + target.id).rules('remove', 'validationFunctionForMd5'); - $('#' + target.id).rules('remove', 'validationFunctionForAesDesEncrypt'); - - if (target.value === 'MD5') { - $('#' + target.id).rules('add', { - validationFunctionForMd5: { - param: $thisInput, - depends: function () { - return checkForCheckbox(multiEdit); - } - } - }); - } - - if (target.value === 'DES_ENCRYPT' || target.value === 'AES_ENCRYPT') { - $('#' + target.id).rules('add', { - validationFunctionForAesDesEncrypt: { - param: $thisInput, - depends: function () { - return checkForCheckbox(multiEdit); - } - } - }); - } - - if (target.value === 'HEX' && theType.substring(0, 3) === 'int') { - // Add note when HEX function is selected on a int - var newHexInfo = '

            ' + Messages.HexConversionInfo + '

            '; - - if (!$('#note' + target.id).length) { - $thisInput.after(newHexInfo); - } - } else { - $('#note' + target.id).prev('br').remove(); - $('#note' + target.id).remove(); - } // Unchecks the corresponding "NULL" control - - - $('input[name=\'fields_null[multi_edit][' + multiEdit + '][' + urlField + ']\']').prop('checked', false); // Unchecks the Ignore checkbox for the current row - - $('input[name=\'insert_ignore_' + multiEdit + '\']').prop('checked', false); - var charExceptionHandling; - - if (theType.substring(0, 4) === 'char') { - charExceptionHandling = theType.substring(5, 6); - } else if (theType.substring(0, 7) === 'varchar') { - charExceptionHandling = theType.substring(8, 9); - } - - if (functionSelected) { - $thisInput.removeAttr('min'); - $thisInput.removeAttr('max'); // @todo: put back attributes if corresponding function is deselected - } - - if ($thisInput.data('rulesadded') === null && !functionSelected) { - // call validate before adding rules - $($thisInput[0].form).validate(); // validate for date time - - if (theType === 'datetime' || theType === 'time' || theType === 'date' || theType === 'timestamp') { - $thisInput.rules('add', { - validationFunctionForDateTime: { - param: theType, - depends: function () { - return checkForCheckbox(multiEdit); - } - } - }); - } // validation for integer type - - - if ($thisInput.data('type') === 'INT') { - validateIntField($thisInput, checkForCheckbox(multiEdit)); // validation for CHAR types - } else if ($thisInput.data('type') === 'CHAR') { - var maxlen = $thisInput.data('maxlength'); - - if (typeof maxlen !== 'undefined') { - if (maxlen <= 4) { - maxlen = charExceptionHandling; - } - - $thisInput.rules('add', { - maxlength: { - param: maxlen, - depends: function () { - return checkForCheckbox(multiEdit); - } - } - }); - } // validate binary & blob types - - } else if ($thisInput.data('type') === 'HEX') { - $thisInput.rules('add', { - validationFunctionForHex: { - param: true, - depends: function () { - return checkForCheckbox(multiEdit); - } - } - }); - } - - $thisInput.data('rulesadded', true); - } else if ($thisInput.data('rulesadded') === true && functionSelected) { - // remove any rules added - $thisInput.rules('remove'); // remove any error messages - - $thisInput.removeClass('error').removeAttr('aria-invalid').siblings('.error').remove(); - $thisInput.data('rulesadded', null); - } -} -/* End of fields validation*/ - -/** - * Unbind all event handlers before tearing down a page - */ - - -AJAX.registerTeardown('table/change.js', function () { - $(document).off('click', 'span.open_gis_editor'); - $(document).off('click', 'input[name^=\'insert_ignore_\']'); - $(document).off('click', 'input[name=\'gis_data[save]\']'); - $(document).off('click', 'input.checkbox_null'); - $('select[name="submit_type"]').off('change'); - $(document).off('change', '#insert_rows'); -}); -/** - * Ajax handlers for Change Table page - * - * Actions Ajaxified here: - * Submit Data to be inserted into the table. - * Restart insertion with 'N' rows. - */ - -AJAX.registerOnload('table/change.js', function () { - if ($('#insertForm').length) { - // validate the comment form when it is submitted - $('#insertForm').validate(); - jQuery.validator.addMethod('validationFunctionForHex', function (value) { - return value.match(/^[a-f0-9]*$/i) !== null; - }); - jQuery.validator.addMethod('validationFunctionForMd5', function (value, element, options) { - return !(value.substring(0, 3) === 'MD5' && typeof options.data('maxlength') !== 'undefined' && options.data('maxlength') < 32); - }); - jQuery.validator.addMethod('validationFunctionForAesDesEncrypt', function (value, element, options) { - var funType = value.substring(0, 3); - - if (funType !== 'AES' && funType !== 'DES') { - return false; - } - - var dataType = options.data('type'); - - if (dataType === 'HEX' || dataType === 'CHAR') { - return true; - } - - return false; - }); - jQuery.validator.addMethod('validationFunctionForDateTime', function (value, element, options) { - var dtValue = value; - var theType = options; - - if (theType === 'date') { - return isDate(dtValue); - } else if (theType === 'time') { - return isTime(dtValue); - } else if (theType === 'datetime' || theType === 'timestamp') { - var tmstmp = false; - dtValue = dtValue.trim(); - - if (dtValue === 'CURRENT_TIMESTAMP' || dtValue === 'current_timestamp()') { - return true; - } - - if (theType === 'timestamp') { - tmstmp = true; - } - - if (dtValue === '0000-00-00 00:00:00') { - return true; - } - - var dv = dtValue.indexOf(' '); - - if (dv === -1) { - // Only the date component, which is valid - return isDate(dtValue, tmstmp); - } - - return isDate(dtValue.substring(0, dv), tmstmp) && isTime(dtValue.substring(dv + 1)); - } - }); - } - /* - * message extending script must be run - * after initiation of functions - */ - - - extendingValidatorMessages(); - $.datepicker.initialized = false; - $(document).on('click', 'span.open_gis_editor', function (event) { - event.preventDefault(); - var $span = $(this); // Current value - - var value = $span.parent('td').children('input[type=\'text\']').val(); // Field name - - var field = $span.parents('tr').children('td').first().find('input[type=\'hidden\']').val(); // Column type - - var type = $span.parents('tr').find('span.column_type').text(); // Names of input field and null checkbox - - var inputName = $span.parent('td').children('input[type=\'text\']').attr('name'); - openGISEditor(); - - if (!gisEditorLoaded) { - loadJSAndGISEditor(value, field, type, inputName); - } else { - loadGISEditor(value, field, type, inputName); - } - }); - /** - * Forced validation check of fields - */ - - $(document).on('click', 'input[name^=\'insert_ignore_\']', function () { - $('#insertForm').valid(); - }); - /** - * Uncheck the null checkbox as geometry data is placed on the input field - */ - - $(document).on('click', 'input[name=\'gis_data[save]\']', function () { - var inputName = $('form#gis_data_editor_form').find('input[name=\'input_name\']').val(); - var currentRow = $('input[name=\'' + inputName + '\']').parents('tr'); - var $nullCheckbox = currentRow.find('.checkbox_null'); - $nullCheckbox.prop('checked', false); - var rowId = currentRow.find('.open_gis_editor').data('row-id'); // Unchecks the Ignore checkbox for the current row - - $('input[name=\'insert_ignore_' + rowId + '\']').prop('checked', false); - }); - /** - * Handles all current checkboxes for Null; this only takes care of the - * checkboxes on currently displayed rows as the rows generated by - * "Continue insertion" are handled in the "Continue insertion" code - * - */ - - $(document).on('click', 'input.checkbox_null', function () { - nullify( // use hidden fields populated by /table/change - $(this).siblings('.nullify_code').val(), $(this).closest('tr').find('input:hidden').first().val(), $(this).siblings('.hashed_field').val(), $(this).siblings('.multi_edit').val()); - }); - /** - * Reset the auto_increment column to 0 when selecting any of the - * insert options in submit_type-dropdown. Only perform the reset - * when we are in edit-mode, and not in insert-mode(no previous value - * available). - */ - - $('select[name="submit_type"]').on('change', function () { - var thisElemSubmitTypeVal = $(this).val(); - var $table = $('table.insertRowTable'); - var autoIncrementColumn = $table.find('input[name^="auto_increment"]'); - autoIncrementColumn.each(function () { - var $thisElemAIField = $(this); - var thisElemName = $thisElemAIField.attr('name'); - var prevValueField = $table.find('input[name="' + thisElemName.replace('auto_increment', 'fields_prev') + '"]'); - var valueField = $table.find('input[name="' + thisElemName.replace('auto_increment', 'fields') + '"]'); - var previousValue = $(prevValueField).val(); - - if (previousValue !== undefined) { - if (thisElemSubmitTypeVal === 'insert' || thisElemSubmitTypeVal === 'insertignore' || thisElemSubmitTypeVal === 'showinsert') { - $(valueField).val(null); - } else { - $(valueField).val(previousValue); - } - } - }); - }); - /** - * Handle ENTER key when press on Continue insert with field - */ - - $('#insert_rows').on('keypress', function (e) { - var key = e.which; - - if (key === 13) { - addNewContinueInsertionFields(e); - } - }); - /** - * Continue Insertion form - */ - - $(document).on('change', '#insert_rows', addNewContinueInsertionFields); -}); - -function addNewContinueInsertionFields(event) { - event.preventDefault(); - /** - * @var columnCount Number of number of columns table has. - */ - - var columnCount = $('table.insertRowTable').first().find('tr').has('input[name*=\'fields_name\']').length; - /** - * @var curr_rows Number of current insert rows already on page - */ - - var currRows = $('table.insertRowTable').length; - /** - * @var target_rows Number of rows the user wants - */ - - var targetRows = $('#insert_rows').val(); // remove all datepickers - - $('input.datefield, input.datetimefield').each(function () { - $(this).datepicker('destroy'); - }); - - if (currRows < targetRows) { - var tempIncrementIndex = function () { - var $thisElement = $(this); - /** - * Extract the index from the name attribute for all input/select fields and increment it - * name is of format funcs[multi_edit][10][] - */ - - /** - * @var this_name String containing name of the input/select elements - */ - - var thisName = $thisElement.attr('name'); - /** split {@link thisName} at [10], so we have the parts that can be concatenated later */ - - var nameParts = thisName.split(/\[\d+\]/); - /** extract the [10] from {@link nameParts} */ - - var oldRowIndexString = thisName.match(/\[\d+\]/)[0]; - /** extract 10 - had to split into two steps to accomodate double digits */ - - var oldRowIndex = parseInt(oldRowIndexString.match(/\d+/)[0], 10); - /** calculate next index i.e. 11 */ - - newRowIndex = oldRowIndex + 1; - /** generate the new name i.e. funcs[multi_edit][11][foobarbaz] */ - - var newName = nameParts[0] + '[' + newRowIndex + ']' + nameParts[1]; - var hashedField = nameParts[1].match(/\[(.+)\]/)[1]; - $thisElement.attr('name', newName); - /** If element is select[name*='funcs'], update id */ - - if ($thisElement.is('select[name*=\'funcs\']')) { - var thisId = $thisElement.attr('id'); - var idParts = thisId.split(/_/); - var oldIdIndex = idParts[1]; - var prevSelectedValue = $('#field_' + oldIdIndex + '_1').val(); - var newIdIndex = parseInt(oldIdIndex) + columnCount; - var newId = 'field_' + newIdIndex + '_1'; - $thisElement.attr('id', newId); - $thisElement.find('option').filter(function () { - return $(this).text() === prevSelectedValue; - }).attr('selected', 'selected'); // If salt field is there then update its id. - - var nextSaltInput = $thisElement.parent().next('td').next('td').find('input[name*=\'salt\']'); - - if (nextSaltInput.length !== 0) { - nextSaltInput.attr('id', 'salt_' + newId); - } - } // handle input text fields and textareas - - - if ($thisElement.is('.textfield') || $thisElement.is('.char') || $thisElement.is('textarea')) { - // do not remove the 'value' attribute for ENUM columns - // special handling for radio fields after updating ids to unique - see below - if ($thisElement.closest('tr').find('span.column_type').html() !== 'enum') { - $thisElement.val($thisElement.closest('tr').find('span.default_value').html()); - } - - $thisElement.off('change') // Remove onchange attribute that was placed - // by /table/change; it refers to the wrong row index - .attr('onchange', null) // Keep these values to be used when the element - // will change - .data('hashed_field', hashedField).data('new_row_index', newRowIndex).on('change', function () { - var $changedElement = $(this); - verificationsAfterFieldChange($changedElement.data('hashed_field'), $changedElement.data('new_row_index'), $changedElement.closest('tr').find('span.column_type').html()); - }); - } - - if ($thisElement.is('.checkbox_null')) { - $thisElement // this event was bound earlier by jQuery but - // to the original row, not the cloned one, so unbind() - .off('click') // Keep these values to be used when the element - // will be clicked - .data('hashed_field', hashedField).data('new_row_index', newRowIndex).on('click', function () { - var $changedElement = $(this); - nullify($changedElement.siblings('.nullify_code').val(), $thisElement.closest('tr').find('input:hidden').first().val(), $changedElement.data('hashed_field'), '[multi_edit][' + $changedElement.data('new_row_index') + ']'); - }); - } - }; - - var tempReplaceAnchor = function () { - var $anchor = $(this); - var newValue = 'rownumber=' + newRowIndex; // needs improvement in case something else inside - // the href contains this pattern - - var newHref = $anchor.attr('href').replace(/rownumber=\d+/, newValue); - $anchor.attr('href', newHref); - }; - - var restoreValue = function () { - if ($(this).closest('tr').find('span.column_type').html() === 'enum') { - if ($(this).val() === $checkedValue) { - $(this).prop('checked', true); - } else { - $(this).prop('checked', false); - } - } - }; - - while (currRows < targetRows) { - /** - * @var $last_row Object referring to the last row - */ - var $lastRow = $('#insertForm').find('.insertRowTable').last(); // need to access this at more than one level - // (also needs improvement because it should be calculated - // just once per cloned row, not once per column) - - var newRowIndex = 0; - var $checkedValue = $lastRow.find('input:checked').val(); // Clone the insert tables - - $lastRow.clone(true, true).insertBefore('#actions_panel').find('input[name*=multi_edit],select[name*=multi_edit],textarea[name*=multi_edit]').each(tempIncrementIndex).end().find('.foreign_values_anchor').each(tempReplaceAnchor); - var $oldRow = $lastRow.find('.textfield'); - $oldRow.each(restoreValue); // set the value of enum field of new row to default - - var $newRow = $('#insertForm').find('.insertRowTable').last(); - $newRow.find('.textfield').each(function () { - if ($(this).closest('tr').find('span.column_type').html() === 'enum') { - if ($(this).val() === $(this).closest('tr').find('span.default_value').html()) { - $(this).prop('checked', true); - } else { - $(this).prop('checked', false); - } - } - }); // Insert/Clone the ignore checkboxes - - if (currRows === 1) { - $('').insertBefore($('table.insertRowTable').last()).after(''); - } else { - /** - * @var $last_checkbox Object reference to the last checkbox in #insertForm - */ - var $lastCheckbox = $('#insertForm').children('input:checkbox').last(); - /** name of {@link $lastCheckbox} */ - - var lastCheckboxName = $lastCheckbox.attr('name'); - /** index of {@link $lastCheckbox} */ - - var lastCheckboxIndex = parseInt(lastCheckboxName.match(/\d+/), 10); - /** name of new {@link $lastCheckbox} */ - - var newName = lastCheckboxName.replace(/\d+/, lastCheckboxIndex + 1); - $('
            ').insertBefore($('table.insertRowTable').last()); - $lastCheckbox.clone().attr({ - 'id': newName, - 'name': newName - }).prop('checked', true).insertBefore($('table.insertRowTable').last()); - $('label[for^=insert_ignore]').last().clone().attr('for', newName).insertBefore($('table.insertRowTable').last()); - $('
            ').insertBefore($('table.insertRowTable').last()); - } - - currRows++; - } // recompute tabindex for text fields and other controls at footer; - // IMO it's not really important to handle the tabindex for - // function and Null - - - var tabIndex = 0; - $('.textfield, .char, textarea').each(function () { - tabIndex++; - $(this).attr('tabindex', tabIndex); // update the IDs of textfields to ensure that they are unique - - $(this).attr('id', 'field_' + tabIndex + '_3'); - }); - $('.control_at_footer').each(function () { - tabIndex++; - $(this).attr('tabindex', tabIndex); - }); - } else if (currRows > targetRows) { - /** - * Displays alert if data loss possible on decrease - * of rows. - */ - var checkLock = jQuery.isEmptyObject(AJAX.lockedTargets); - - if (checkLock || confirm(Messages.strConfirmRowChange) === true) { - while (currRows > targetRows) { - $('input[id^=insert_ignore]').last().nextUntil('fieldset').addBack().remove(); - currRows--; - } - } else { - document.getElementById('insert_rows').value = currRows; - } - } // Add all the required datepickers back - - - Functions.addDateTimePicker(); -} // eslint-disable-next-line no-unused-vars - - -function changeValueFieldType(elem, searchIndex) { - var fieldsValue = $('input#fieldID_' + searchIndex); - - if (0 === fieldsValue.size()) { - return; - } - - var type = $(elem).val(); - - if ('LIKE' === type || 'LIKE %...%' === type || 'NOT LIKE' === type || 'NOT LIKE %...%' === type) { - $('#fieldID_' + searchIndex).data('data-skip-validators', true); - return; - } else { - $('#fieldID_' + searchIndex).data('data-skip-validators', false); - } - - if ('IN (...)' === type || 'NOT IN (...)' === type || 'BETWEEN' === type || 'NOT BETWEEN' === type) { - $('#fieldID_' + searchIndex).prop('multiple', true); - } else { - $('#fieldID_' + searchIndex).prop('multiple', false); - } -} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/table/chart.js b/Sources/php_script/script/phpMyAdmin/js/dist/table/chart.js deleted file mode 100644 index 834f063..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/table/chart.js +++ /dev/null @@ -1,435 +0,0 @@ -/* global ColumnType, DataTable, JQPlotChartFactory */ -// js/chart.js - -/* global codeMirrorEditor */ -// js/functions.js -var chartData = {}; -var tempChartTitle; -var currentChart = null; -var currentSettings = null; -var dateTimeCols = []; -var numericCols = []; - -function extractDate(dateString) { - var matches; - var match; - var dateTimeRegExp = /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/; - var dateRegExp = /[0-9]{4}-[0-9]{2}-[0-9]{2}/; - matches = dateTimeRegExp.exec(dateString); - - if (matches !== null && matches.length > 0) { - match = matches[0]; - return new Date(match.substr(0, 4), parseInt(match.substr(5, 2), 10) - 1, match.substr(8, 2), match.substr(11, 2), match.substr(14, 2), match.substr(17, 2)); - } else { - matches = dateRegExp.exec(dateString); - - if (matches !== null && matches.length > 0) { - match = matches[0]; - return new Date(match.substr(0, 4), parseInt(match.substr(5, 2), 10) - 1, match.substr(8, 2)); - } - } - - return null; -} - -function queryChart(data, columnNames, settings) { - if ($('#querychart').length === 0) { - return; - } - - var plotSettings = { - title: { - text: settings.title, - escapeHtml: true - }, - grid: { - drawBorder: false, - shadow: false, - background: 'rgba(0,0,0,0)' - }, - legend: { - show: true, - placement: 'outsideGrid', - location: 'e', - rendererOptions: { - numberColumns: 2 - } - }, - axes: { - xaxis: { - label: Functions.escapeHtml(settings.xaxisLabel) - }, - yaxis: { - label: settings.yaxisLabel - } - }, - stackSeries: settings.stackSeries - }; // create the chart - - var factory = new JQPlotChartFactory(); - var chart = factory.createChart(settings.type, 'querychart'); // create the data table and add columns - - var dataTable = new DataTable(); - - if (settings.type === 'timeline') { - dataTable.addColumn(ColumnType.DATE, columnNames[settings.mainAxis]); - } else if (settings.type === 'scatter') { - dataTable.addColumn(ColumnType.NUMBER, columnNames[settings.mainAxis]); - } else { - dataTable.addColumn(ColumnType.STRING, columnNames[settings.mainAxis]); - } - - var i; - var values = []; - - if (settings.seriesColumn === null) { - $.each(settings.selectedSeries, function (index, element) { - dataTable.addColumn(ColumnType.NUMBER, columnNames[element]); - }); // set data to the data table - - var columnsToExtract = [settings.mainAxis]; - $.each(settings.selectedSeries, function (index, element) { - columnsToExtract.push(element); - }); - var newRow; - var row; - var col; - - for (i = 0; i < data.length; i++) { - row = data[i]; - newRow = []; - - for (var j = 0; j < columnsToExtract.length; j++) { - col = columnNames[columnsToExtract[j]]; - - if (j === 0) { - if (settings.type === 'timeline') { - // first column is date type - newRow.push(extractDate(row[col])); - } else if (settings.type === 'scatter') { - newRow.push(parseFloat(row[col])); - } else { - // first column is string type - newRow.push(row[col]); - } - } else { - // subsequent columns are of type, number - newRow.push(parseFloat(row[col])); - } - } - - values.push(newRow); - } - - dataTable.setData(values); - } else { - var seriesNames = {}; - var seriesNumber = 1; - var seriesColumnName = columnNames[settings.seriesColumn]; - - for (i = 0; i < data.length; i++) { - if (!seriesNames[data[i][seriesColumnName]]) { - seriesNames[data[i][seriesColumnName]] = seriesNumber; - seriesNumber++; - } - } - - $.each(seriesNames, function (seriesName) { - dataTable.addColumn(ColumnType.NUMBER, seriesName); - }); - var valueMap = {}; - var xValue; - var value; - var mainAxisName = columnNames[settings.mainAxis]; - var valueColumnName = columnNames[settings.valueColumn]; - - for (i = 0; i < data.length; i++) { - xValue = data[i][mainAxisName]; - value = valueMap[xValue]; - - if (!value) { - value = [xValue]; - valueMap[xValue] = value; - } - - seriesNumber = seriesNames[data[i][seriesColumnName]]; - value[seriesNumber] = parseFloat(data[i][valueColumnName]); - } - - $.each(valueMap, function (index, value) { - values.push(value); - }); - dataTable.setData(values); - } // draw the chart and return the chart object - - - chart.draw(dataTable, plotSettings); - return chart; -} - -function drawChart() { - currentSettings.width = $('#resizer').width() - 20; - currentSettings.height = $('#resizer').height() - 20; // TODO: a better way using .redraw() ? - - if (currentChart !== null) { - currentChart.destroy(); - } - - var columnNames = []; - $('#chartXAxisSelect option').each(function () { - columnNames.push(Functions.escapeHtml($(this).text())); - }); - - try { - currentChart = queryChart(chartData, columnNames, currentSettings); - - if (currentChart !== null) { - $('#saveChart').attr('href', currentChart.toImageString()); - } - } catch (err) { - Functions.ajaxShowMessage(err.message, false); - } -} - -function getSelectedSeries() { - var val = $('#chartSeriesSelect').val() || []; - var ret = []; - $.each(val, function (i, v) { - ret.push(parseInt(v, 10)); - }); - return ret; -} - -function onXAxisChange() { - var $xAxisSelect = $('#chartXAxisSelect'); - currentSettings.mainAxis = parseInt($xAxisSelect.val(), 10); - - if (dateTimeCols.indexOf(currentSettings.mainAxis) !== -1) { - document.getElementById('timelineChartType').classList.remove('d-none'); - } else { - document.getElementById('timelineChartType').classList.add('d-none'); - - if (currentSettings.type === 'timeline') { - $('#lineChartTypeRadio').prop('checked', true); - currentSettings.type = 'line'; - } - } - - if (numericCols.indexOf(currentSettings.mainAxis) !== -1) { - document.getElementById('scatterChartType').classList.remove('d-none'); - } else { - document.getElementById('scatterChartType').classList.add('d-none'); - - if (currentSettings.type === 'scatter') { - $('#lineChartTypeRadio').prop('checked', true); - currentSettings.type = 'line'; - } - } - - var xAxisTitle = $xAxisSelect.children('option:selected').text(); - $('#xAxisLabelInput').val(xAxisTitle); - currentSettings.xaxisLabel = xAxisTitle; -} - -function onDataSeriesChange() { - var $seriesSelect = $('#chartSeriesSelect'); - currentSettings.selectedSeries = getSelectedSeries(); - var yAxisTitle; - - if (currentSettings.selectedSeries.length === 1) { - document.getElementById('pieChartType').classList.remove('d-none'); - yAxisTitle = $seriesSelect.children('option:selected').text(); - } else { - document.getElementById('pieChartType').classList.add('d-none'); - - if (currentSettings.type === 'pie') { - $('#lineChartTypeRadio').prop('checked', true); - currentSettings.type = 'line'; - } - - yAxisTitle = Messages.strYValues; - } - - $('#yAxisLabelInput').val(yAxisTitle); - currentSettings.yaxisLabel = yAxisTitle; -} -/** - * Unbind all event handlers before tearing down a page - */ - - -AJAX.registerTeardown('table/chart.js', function () { - $('input[name="chartType"]').off('click'); - $('#barStackedCheckbox').off('click'); - $('#seriesColumnCheckbox').off('click'); - $('#chartTitleInput').off('focus').off('keyup').off('blur'); - $('#chartXAxisSelect').off('change'); - $('#chartSeriesSelect').off('change'); - $('#chartSeriesColumnSelect').off('change'); - $('#chartValueColumnSelect').off('change'); - $('#xAxisLabelInput').off('keyup'); - $('#yAxisLabelInput').off('keyup'); - $('#resizer').off('resizestop'); - $('#tblchartform').off('submit'); -}); -AJAX.registerOnload('table/chart.js', function () { - // handle manual resize - $('#resizer').on('resizestop', function () { - // make room so that the handle will still appear - $('#querychart').height($('#resizer').height() * 0.96); - $('#querychart').width($('#resizer').width() * 0.96); - - if (currentChart !== null) { - currentChart.redraw({ - resetAxes: true - }); - } - }); // handle chart type changes - - $('input[name="chartType"]').on('click', function () { - var type = currentSettings.type = $(this).val(); - - if (type === 'bar' || type === 'column' || type === 'area') { - document.getElementById('barStacked').classList.remove('d-none'); - } else { - $('#barStackedCheckbox').prop('checked', false); - $.extend(true, currentSettings, { - stackSeries: false - }); - document.getElementById('barStacked').classList.add('d-none'); - } - - drawChart(); - }); // handle chosing alternative data format - - $('#seriesColumnCheckbox').on('click', function () { - var $seriesColumn = $('#chartSeriesColumnSelect'); - var $valueColumn = $('#chartValueColumnSelect'); - var $chartSeries = $('#chartSeriesSelect'); - - if ($(this).is(':checked')) { - $seriesColumn.prop('disabled', false); - $valueColumn.prop('disabled', false); - $chartSeries.prop('disabled', true); - currentSettings.seriesColumn = parseInt($seriesColumn.val(), 10); - currentSettings.valueColumn = parseInt($valueColumn.val(), 10); - } else { - $seriesColumn.prop('disabled', true); - $valueColumn.prop('disabled', true); - $chartSeries.prop('disabled', false); - currentSettings.seriesColumn = null; - currentSettings.valueColumn = null; - } - - drawChart(); - }); // handle stacking for bar, column and area charts - - $('#barStackedCheckbox').on('click', function () { - if ($(this).is(':checked')) { - $.extend(true, currentSettings, { - stackSeries: true - }); - } else { - $.extend(true, currentSettings, { - stackSeries: false - }); - } - - drawChart(); - }); // handle changes in chart title - - $('#chartTitleInput').on('focus', function () { - tempChartTitle = $(this).val(); - }).on('keyup', function () { - currentSettings.title = $('#chartTitleInput').val(); - drawChart(); - }).on('blur', function () { - if ($(this).val() !== tempChartTitle) { - drawChart(); - } - }); // handle changing the x-axis - - $('#chartXAxisSelect').on('change', function () { - onXAxisChange(); - drawChart(); - }); // handle changing the selected data series - - $('#chartSeriesSelect').on('change', function () { - onDataSeriesChange(); - drawChart(); - }); // handle changing the series column - - $('#chartSeriesColumnSelect').on('change', function () { - currentSettings.seriesColumn = parseInt($(this).val(), 10); - drawChart(); - }); // handle changing the value column - - $('#chartValueColumnSelect').on('change', function () { - currentSettings.valueColumn = parseInt($(this).val(), 10); - drawChart(); - }); // handle manual changes to the chart x-axis labels - - $('#xAxisLabelInput').on('keyup', function () { - currentSettings.xaxisLabel = $(this).val(); - drawChart(); - }); // handle manual changes to the chart y-axis labels - - $('#yAxisLabelInput').on('keyup', function () { - currentSettings.yaxisLabel = $(this).val(); - drawChart(); - }); // handler for ajax form submission - - $('#tblchartform').on('submit', function () { - var $form = $(this); - - if (codeMirrorEditor) { - $form[0].elements.sql_query.value = codeMirrorEditor.getValue(); - } - - if (!Functions.checkSqlQuery($form[0])) { - return false; - } - - var $msgbox = Functions.ajaxShowMessage(); - Functions.prepareForAjaxRequest($form); - $.post($form.attr('action'), $form.serialize(), function (data) { - if (typeof data !== 'undefined' && data.success === true && typeof data.chartData !== 'undefined') { - chartData = JSON.parse(data.chartData); - drawChart(); - Functions.ajaxRemoveMessage($msgbox); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }, 'json'); // end $.post() - - return false; - }); // from jQuery UI - - $('#resizer').resizable({ - minHeight: 240, - minWidth: 300 - }).width($('#div_view_options').width() - 50).trigger('resizestop'); - currentSettings = { - type: 'line', - width: $('#resizer').width() - 20, - height: $('#resizer').height() - 20, - xaxisLabel: $('#xAxisLabelInput').val(), - yaxisLabel: $('#yAxisLabelInput').val(), - title: $('#chartTitleInput').val(), - stackSeries: false, - mainAxis: parseInt($('#chartXAxisSelect').val(), 10), - selectedSeries: getSelectedSeries(), - seriesColumn: null - }; - var vals = $('input[name="dateTimeCols"]').val().split(' '); - $.each(vals, function (i, v) { - dateTimeCols.push(parseInt(v, 10)); - }); - vals = $('input[name="numericCols"]').val().split(' '); - $.each(vals, function (i, v) { - numericCols.push(parseInt(v, 10)); - }); - onXAxisChange(); - onDataSeriesChange(); - $('#tblchartform').trigger('submit'); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/table/select.js b/Sources/php_script/script/phpMyAdmin/js/dist/table/select.js deleted file mode 100644 index 9d950f3..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/table/select.js +++ /dev/null @@ -1,310 +0,0 @@ -/** - * @fileoverview JavaScript functions used on /table/search - * - * @requires jQuery - * @requires js/functions.js - */ - -/* global changeValueFieldType, verifyAfterSearchFieldChange */ -// js/table/change.js - -/* global openGISEditor, gisEditorLoaded, loadJSAndGISEditor, loadGISEditor */ -// js/gis_data_editor.js -var TableSelect = {}; -/** - * Checks if given data-type is numeric or date. - * - * @param {string} dataType Column data-type - * - * @return {boolean | string} - */ - -TableSelect.checkIfDataTypeNumericOrDate = function (dataType) { - // To test for numeric data-types. - var numericRegExp = new RegExp('TINYINT|SMALLINT|MEDIUMINT|INT|BIGINT|DECIMAL|FLOAT|DOUBLE|REAL', 'i'); // To test for date data-types. - - var dateRegExp = new RegExp('DATETIME|DATE|TIMESTAMP|TIME|YEAR', 'i'); // Return matched data-type - - if (numericRegExp.test(dataType)) { - return numericRegExp.exec(dataType)[0]; - } - - if (dateRegExp.test(dataType)) { - return dateRegExp.exec(dataType)[0]; - } - - return false; -}; -/** - * Unbind all event handlers before tearing down a page - */ - - -AJAX.registerTeardown('table/select.js', function () { - $('#togglesearchformlink').off('click'); - $(document).off('submit', '#tbl_search_form.ajax'); - $('select.geom_func').off('change'); - $(document).off('click', 'span.open_search_gis_editor'); - $('body').off('change', 'select[name*="criteriaColumnOperators"]'); // Fix for bug #13778, changed 'click' to 'change' -}); -AJAX.registerOnload('table/select.js', function () { - /** - * Prepare a div containing a link, otherwise it's incorrectly displayed - * after a couple of clicks - */ - $('
            ').insertAfter('#tbl_search_form') // don't show it until we have results on-screen - .hide(); - $('#togglesearchformlink').html(Messages.strShowSearchCriteria).on('click', function () { - var $link = $(this); - $('#tbl_search_form').slideToggle(); - - if ($link.text() === Messages.strHideSearchCriteria) { - $link.text(Messages.strShowSearchCriteria); - } else { - $link.text(Messages.strHideSearchCriteria); - } // avoid default click action - - - return false; - }); - var tableRows = $('#fieldset_table_qbe select.column-operator'); - $.each(tableRows, function (index, item) { - $(item).on('change', function () { - changeValueFieldType(this, index); - verifyAfterSearchFieldChange(index, '#tbl_search_form'); - }); - }); - /** - * Ajax event handler for Table search - */ - - $(document).on('submit', '#tbl_search_form.ajax', function (event) { - var unaryFunctions = ['IS NULL', 'IS NOT NULL', '= \'\'', '!= \'\'']; - var geomUnaryFunctions = ['IsEmpty', 'IsSimple', 'IsRing', 'IsClosed']; // jQuery object to reuse - - var $searchForm = $(this); - event.preventDefault(); // empty previous search results while we are waiting for new results - - $('#sqlqueryresultsouter').empty(); - var $msgbox = Functions.ajaxShowMessage(Messages.strSearching, false); - Functions.prepareForAjaxRequest($searchForm); - var values = {}; - $searchForm.find(':input').each(function () { - var $input = $(this); - - if ($input.attr('type') === 'checkbox' || $input.attr('type') === 'radio') { - if ($input.is(':checked')) { - values[this.name] = $input.val(); - } - } else { - values[this.name] = $input.val(); - } - }); - var columnCount = $('select[name="columnsToDisplay[]"] option').length; // Submit values only for the columns that have unary column operator or a search criteria - - for (var a = 0; a < columnCount; a++) { - if ($.inArray(values['criteriaColumnOperators[' + a + ']'], unaryFunctions) >= 0) { - continue; - } - - if (values['geom_func[' + a + ']'] && $.inArray(values['geom_func[' + a + ']'], geomUnaryFunctions) >= 0) { - continue; - } - - if (values['criteriaValues[' + a + ']'] === '' || values['criteriaValues[' + a + ']'] === null) { - delete values['criteriaValues[' + a + ']']; - delete values['criteriaColumnOperators[' + a + ']']; - delete values['criteriaColumnNames[' + a + ']']; - delete values['criteriaColumnTypes[' + a + ']']; - delete values['criteriaColumnCollations[' + a + ']']; - } - } // If all columns are selected, use a single parameter to indicate that - - - if (values['columnsToDisplay[]'] !== null) { - if (values['columnsToDisplay[]'].length === columnCount) { - delete values['columnsToDisplay[]']; - values.displayAllColumns = true; - } - } else { - values.displayAllColumns = true; - } - - $.post($searchForm.attr('action'), values, function (data) { - Functions.ajaxRemoveMessage($msgbox); - - if (typeof data !== 'undefined' && data.success === true) { - if (typeof data.sql_query !== 'undefined') { - // zero rows - $('#sqlqueryresultsouter').html(data.sql_query); - } else { - // results found - $('#sqlqueryresultsouter').html(data.message); - $('.sqlqueryresults').trigger('makegrid'); - } - - $('#tbl_search_form') // workaround for bug #3168569 - Issue on toggling the "Hide search criteria" in chrome. - .slideToggle().hide(); - $('#togglesearchformlink') // always start with the Show message - .text(Messages.strShowSearchCriteria); - $('#togglesearchformdiv') // now it's time to show the div containing the link - .show(); - $('html, body').animate({ - scrollTop: 0 - }, 'fast'); - } else { - $('#sqlqueryresultsouter').html(data.error); - } - - Functions.highlightSql($('#sqlqueryresultsouter')); - }); // end $.post() - }); // Following section is related to the 'function based search' for geometry data types. - // Initially hide all the open_gis_editor spans - - $('span.open_search_gis_editor').hide(); - $('select.geom_func').on('change', function () { - var $geomFuncSelector = $(this); - var binaryFunctions = ['Contains', 'Crosses', 'Disjoint', 'Equals', 'Intersects', 'Overlaps', 'Touches', 'Within', 'MBRContains', 'MBRDisjoint', 'MBREquals', 'MBRIntersects', 'MBROverlaps', 'MBRTouches', 'MBRWithin', 'ST_Contains', 'ST_Crosses', 'ST_Disjoint', 'ST_Equals', 'ST_Intersects', 'ST_Overlaps', 'ST_Touches', 'ST_Within']; - var tempArray = ['Envelope', 'EndPoint', 'StartPoint', 'ExteriorRing', 'Centroid', 'PointOnSurface']; - var outputGeomFunctions = binaryFunctions.concat(tempArray); // If the chosen function takes two geometry objects as parameters - - var $operator = $geomFuncSelector.parents('tr').find('td').eq(4).find('select'); - - if ($.inArray($geomFuncSelector.val(), binaryFunctions) >= 0) { - $operator.prop('readonly', true); - } else { - $operator.prop('readonly', false); - } // if the chosen function's output is a geometry, enable GIS editor - - - var $editorSpan = $geomFuncSelector.parents('tr').find('span.open_search_gis_editor'); - - if ($.inArray($geomFuncSelector.val(), outputGeomFunctions) >= 0) { - $editorSpan.show(); - } else { - $editorSpan.hide(); - } - }); - $(document).on('click', 'span.open_search_gis_editor', function (event) { - event.preventDefault(); - var $span = $(this); // Current value - - var value = $span.parent('td').children('input[type=\'text\']').val(); // Field name - - var field = 'Parameter'; // Column type - - var geomFunc = $span.parents('tr').find('.geom_func').val(); - var type; - - if (geomFunc === 'Envelope') { - type = 'polygon'; - } else if (geomFunc === 'ExteriorRing') { - type = 'linestring'; - } else { - type = 'point'; - } // Names of input field and null checkbox - - - var inputName = $span.parent('td').children('input[type=\'text\']').attr('name'); // Token - - openGISEditor(); - - if (!gisEditorLoaded) { - loadJSAndGISEditor(value, field, type, inputName); - } else { - loadGISEditor(value, field, type, inputName); - } - }); - /** - * Ajax event handler for Range-Search. - */ - - $('body').on('change', 'select[name*="criteriaColumnOperators"]', function () { - // Fix for bug #13778, changed 'click' to 'change' - var $sourceSelect = $(this); // Get the column name. - - var columnName = $(this).closest('tr').find('th').first().text(); // Get the data-type of column excluding size. - - var dataType = $(this).closest('tr').find('td[data-type]').attr('data-type'); - dataType = TableSelect.checkIfDataTypeNumericOrDate(dataType); // Get the operator. - - var operator = $(this).val(); - - if ((operator === 'BETWEEN' || operator === 'NOT BETWEEN') && dataType) { - var $msgbox = Functions.ajaxShowMessage(); - $.ajax({ - url: 'index.php?route=/table/search', - type: 'POST', - data: { - 'server': CommonParams.get('server'), - 'ajax_request': 1, - 'db': $('input[name="db"]').val(), - 'table': $('input[name="table"]').val(), - 'column': columnName, - 'range_search': 1 - }, - success: function (response) { - Functions.ajaxRemoveMessage($msgbox); - - if (response.success) { - // Get the column min value. - var min = response.column_data.min ? '(' + Messages.strColumnMin + ' ' + response.column_data.min + ')' : ''; // Get the column max value. - - var max = response.column_data.max ? '(' + Messages.strColumnMax + ' ' + response.column_data.max + ')' : ''; - $('#rangeSearchModal').modal('show'); - $('#rangeSearchLegend').first().html(operator); - $('#rangeSearchMin').first().text(min); - $('#rangeSearchMax').first().text(max); // Reset input values on reuse - - $('#min_value').first().val(''); - $('#max_value').first().val(''); // Add datepicker wherever required. - - Functions.addDatepicker($('#min_value'), dataType); - Functions.addDatepicker($('#max_value'), dataType); - $('#rangeSearchModalGo').on('click', function () { - var minValue = $('#min_value').val(); - var maxValue = $('#max_value').val(); - var finalValue = ''; - - if (minValue.length && maxValue.length) { - finalValue = minValue + ', ' + maxValue; - } - - var $targetField = $sourceSelect.closest('tr').find('[name*="criteriaValues"]'); // If target field is a select list. - - if ($targetField.is('select')) { - $targetField.val(finalValue); - var $options = $targetField.find('option'); - var $closestMin = null; - var $closestMax = null; // Find closest min and max value. - - $options.each(function () { - if ($closestMin === null || Math.abs($(this).val() - minValue) < Math.abs($closestMin.val() - minValue)) { - $closestMin = $(this); - } - - if ($closestMax === null || Math.abs($(this).val() - maxValue) < Math.abs($closestMax.val() - maxValue)) { - $closestMax = $(this); - } - }); - $closestMin.attr('selected', 'selected'); - $closestMax.attr('selected', 'selected'); - } else { - $targetField.val(finalValue); - } - - $('#rangeSearchModal').modal('hide'); - }); - } else { - Functions.ajaxShowMessage(response.error); - } - }, - error: function () { - Functions.ajaxShowMessage(Messages.strErrorProcessingRequest); - } - }); - } - }); - var windowWidth = $(window).width(); - $('.jsresponsive').css('max-width', windowWidth - 69 + 'px'); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/transformations/sql_editor.js b/Sources/php_script/script/phpMyAdmin/js/dist/transformations/sql_editor.js deleted file mode 100644 index dcb26f8..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/transformations/sql_editor.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * SQL syntax highlighting transformation plugin js - * - * @package PhpMyAdmin - */ -AJAX.registerOnload('transformations/sql_editor.js', function () { - $('textarea.transform_sql_editor').each(function () { - Functions.getSqlEditor($(this), {}, 'both'); - }); -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/dist/u2f.js b/Sources/php_script/script/phpMyAdmin/js/dist/u2f.js deleted file mode 100644 index cb3b31b..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/dist/u2f.js +++ /dev/null @@ -1,90 +0,0 @@ -/* global u2f */ -// js/vendor/u2f-api-polyfill.js -AJAX.registerOnload('u2f.js', function () { - var $inputReg = $('#u2f_registration_response'); - - if ($inputReg.length > 0) { - var $formReg = $inputReg.parents('form'); - $formReg.find('input[type=submit]').hide(); - setTimeout(function () { - // A magic JS function that talks to the USB device. This function will keep polling for the USB device until it finds one. - var request = JSON.parse($inputReg.attr('data-request')); - u2f.register(request.appId, [request], JSON.parse($inputReg.attr('data-signatures')), function (data) { - // Handle returning error data - if (data.errorCode && data.errorCode !== 0) { - switch (data.errorCode) { - case 5: - Functions.ajaxShowMessage(Messages.strU2FTimeout, false, 'error'); - break; - - case 4: - Functions.ajaxShowMessage(Messages.strU2FErrorRegister, false, 'error'); - break; - - case 3: - Functions.ajaxShowMessage(Messages.strU2FInvalidClient, false, 'error'); - break; - - case 2: - Functions.ajaxShowMessage(Messages.strU2FBadRequest, false, 'error'); - break; - - default: - Functions.ajaxShowMessage(Messages.strU2FUnknown, false, 'error'); - break; - } - - return; - } // Fill and submit form. - - - $inputReg.val(JSON.stringify(data)); - $formReg.trigger('submit'); - }); - }, 1000); - } - - var $inputAuth = $('#u2f_authentication_response'); - - if ($inputAuth.length > 0) { - var $formAuth = $inputAuth.parents('form'); - $formAuth.find('input[type=submit]').hide(); - setTimeout(function () { - // Magic JavaScript talking to your HID - // appid, challenge, authenticateRequests - var request = JSON.parse($inputAuth.attr('data-request')); - u2f.sign(request[0].appId, request[0].challenge, request, function (data) { - // Handle returning error data - if (data.errorCode && data.errorCode !== 0) { - switch (data.errorCode) { - case 5: - Functions.ajaxShowMessage(Messages.strU2FTimeout, false, 'error'); - break; - - case 4: - Functions.ajaxShowMessage(Messages.strU2FErrorAuthenticate, false, 'error'); - break; - - case 3: - Functions.ajaxShowMessage(Messages.strU2FInvalidClient, false, 'error'); - break; - - case 2: - Functions.ajaxShowMessage(Messages.strU2FBadRequest, false, 'error'); - break; - - default: - Functions.ajaxShowMessage(Messages.strU2FUnknown, false, 'error'); - break; - } - - return; - } // Fill and submit form. - - - $inputAuth.val(JSON.stringify(data)); - $formAuth.trigger('submit'); - }); - }, 1000); - } -}); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/src/cross_framing_protection.js b/Sources/php_script/script/phpMyAdmin/js/src/cross_framing_protection.js deleted file mode 100644 index 2f94fe5..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/cross_framing_protection.js +++ /dev/null @@ -1,13 +0,0 @@ -/** - * Conditionally included if framing is not allowed - */ -if (self === top) { - var styleElement = document.getElementById('cfs-style'); - // check if styleElement has already been removed - // to avoid frequently reported js error - if (typeof(styleElement) !== 'undefined' && styleElement !== null) { - styleElement.parentNode.removeChild(styleElement); - } -} else { - top.location = self.location; -} diff --git a/Sources/php_script/script/phpMyAdmin/js/src/database/search.js b/Sources/php_script/script/phpMyAdmin/js/src/database/search.js deleted file mode 100644 index bcf5f4f..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/database/search.js +++ /dev/null @@ -1,261 +0,0 @@ -/** - * JavaScript functions used on Database Search page - * - * @requires jQuery - * @requires js/functions.js - * - * @package PhpMyAdmin - */ - -/* global makeGrid */ // js/makegrid.js - -/** - * AJAX script for the Database Search page. - * - * Actions ajaxified here: - * Retrieve result of SQL query - */ - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('database/search.js', function () { - $('a.browse_results').off('click'); - $('a.delete_results').off('click'); - $('#buttonGo').off('click'); - $('#togglesearchresultlink').off('click'); - $('#togglequerybox').off('click'); - $('#togglesearchformlink').off('click'); - $('#select_all').off('click'); - $('#unselect_all').off('click'); - $(document).off('submit', '#db_search_form.ajax'); -}); - -AJAX.registerOnload('database/search.js', function () { - /** Hide the table link in the initial search result */ - var icon = Functions.getImage('s_tbl', '', { 'id': 'table-image' }).toString(); - $('#table-info').prepend(icon).hide(); - - /** Hide the browse and deleted results in the new search criteria */ - $('#buttonGo').on('click', function () { - $('#table-info').hide(); - $('#browse-results').hide(); - $('#sqlqueryform').hide(); - $('#togglequerybox').hide(); - }); - /** - * Prepare a div containing a link for toggle the search results - */ - $('#togglesearchresultsdiv') - /** don't show it until we have results on-screen */ - .hide(); - - /** - * Changing the displayed text according to - * the hide/show criteria in search result forms - */ - $('#togglesearchresultlink') - .html(Messages.strHideSearchResults) - .on('click', function () { - var $link = $(this); - $('#searchresults').slideToggle(); - if ($link.text() === Messages.strHideSearchResults) { - $link.text(Messages.strShowSearchResults); - } else { - $link.text(Messages.strHideSearchResults); - } - /** avoid default click action */ - return false; - }); - - /** - * Prepare a div containing a link for toggle the search form, - * otherwise it's incorrectly displayed after a couple of clicks - */ - $('#togglesearchformdiv') - .hide(); // don't show it until we have results on-screen - - /** - * Changing the displayed text according to - * the hide/show criteria in search form - */ - $('#togglequerybox') - .hide() - .on('click', function () { - var $link = $(this); - $('#sqlqueryform').slideToggle('medium'); - if ($link.text() === Messages.strHideQueryBox) { - $link.text(Messages.strShowQueryBox); - } else { - $link.text(Messages.strHideQueryBox); - } - /** avoid default click action */ - return false; - }); - - /** don't show it until we have results on-screen */ - - /** - * Changing the displayed text according to - * the hide/show criteria in search criteria form - */ - $('#togglesearchformlink') - .html(Messages.strShowSearchCriteria) - .on('click', function () { - var $link = $(this); - $('#db_search_form').slideToggle(); - if ($link.text() === Messages.strHideSearchCriteria) { - $link.text(Messages.strShowSearchCriteria); - } else { - $link.text(Messages.strHideSearchCriteria); - } - /** avoid default click action */ - return false; - }); - - /* - * Ajax Event handler for retrieving the results from a table - */ - $(document).on('click', 'a.browse_results', function (e) { - e.preventDefault(); - /** Hides the results shown by the delete criteria */ - var $msg = Functions.ajaxShowMessage(Messages.strBrowsing, false); - $('#sqlqueryform').hide(); - $('#togglequerybox').hide(); - /** Load the browse results to the page */ - $('#table-info').show(); - var tableName = $(this).data('table-name'); - $('#table-link').attr({ 'href' : $(this).attr('href') }).text(tableName); - - var url = $(this).attr('href') + '#searchresults'; - var browseSql = $(this).data('browse-sql'); - var params = { - 'ajax_request': true, - 'is_js_confirmed': true, - 'sql_query' : browseSql - }; - $.post(url, params, function (data) { - if (typeof data !== 'undefined' && data.success) { - $('#browse-results').html(data.message); - Functions.ajaxRemoveMessage($msg); - $('.table_results').each(function () { - makeGrid(this, true, true, true, true); - }); - $('#browse-results').show(); - Functions.highlightSql($('#browse-results')); - $('html, body') - .animate({ - scrollTop: $('#browse-results').offset().top - }, 1000); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); - }); - - /* - * Ajax Event handler for deleting the results from a table - */ - $(document).on('click', 'a.delete_results', function (e) { - e.preventDefault(); - /** Hides the results shown by the browse criteria */ - $('#table-info').hide(); - $('#sqlqueryform').hide(); - $('#togglequerybox').hide(); - /** Conformation message for deletion */ - var msg = Functions.sprintf( - Messages.strConfirmDeleteResults, - $(this).data('table-name') - ); - if (confirm(msg)) { - var $msg = Functions.ajaxShowMessage(Messages.strDeleting, false); - /** Load the deleted option to the page*/ - $('#sqlqueryform').html(''); - var params = { - 'ajax_request': true, - 'is_js_confirmed': true, - 'sql_query': $(this).data('delete-sql') - }; - var url = $(this).attr('href'); - - $.post(url, params, function (data) { - if (typeof data === 'undefined' || !data.success) { - Functions.ajaxShowMessage(data.error, false); - return; - } - - $('#sqlqueryform').html(data.sql_query); - /** Refresh the search results after the deletion */ - $('#buttonGo').trigger('click'); - $('#togglequerybox').html(Messages.strHideQueryBox); - /** Show the results of the deletion option */ - $('#browse-results').hide(); - $('#sqlqueryform').show(); - $('#togglequerybox').show(); - $('html, body') - .animate({ - scrollTop: $('#browse-results').offset().top - }, 1000); - Functions.ajaxRemoveMessage($msg); - }); - } - }); - - /** - * Ajax Event handler for retrieving the result of an SQL Query - */ - $(document).on('submit', '#db_search_form.ajax', function (event) { - event.preventDefault(); - if ($('#criteriaTables :selected').length === 0) { - Functions.ajaxShowMessage(Messages.strNoTableSelected); - return; - } - var $msgbox = Functions.ajaxShowMessage(Messages.strSearching, false); - // jQuery object to reuse - var $form = $(this); - - Functions.prepareForAjaxRequest($form); - - var url = $form.serialize() + CommonParams.get('arg_separator') + 'submit_search=' + $('#buttonGo').val(); - $.post($form.attr('action'), url, function (data) { - if (typeof data !== 'undefined' && data.success === true) { - // found results - $('#searchresults').html(data.message); - - $('#togglesearchresultlink') - // always start with the Show message - .text(Messages.strHideSearchResults); - $('#togglesearchresultsdiv') - // now it's time to show the div containing the link - .show(); - $('#searchresults').show(); - - - $('#db_search_form') - // workaround for Chrome problem (bug #3168569) - .slideToggle() - .hide(); - $('#togglesearchformlink') - // always start with the Show message - .text(Messages.strShowSearchCriteria); - $('#togglesearchformdiv') - // now it's time to show the div containing the link - .show(); - } else { - // error message (zero rows) - $('#searchresults').html(data.error).show(); - } - - Functions.ajaxRemoveMessage($msgbox); - }); - }); - - $('#select_all').on('click', function () { - Functions.setSelectOptions('db_search', 'criteriaTables[]', true); - return false; - }); - $('#unselect_all').on('click', function () { - Functions.setSelectOptions('db_search', 'criteriaTables[]', false); - return false; - }); -}); // end $() diff --git a/Sources/php_script/script/phpMyAdmin/js/src/database/tracking.js b/Sources/php_script/script/phpMyAdmin/js/src/database/tracking.js deleted file mode 100644 index 53d2e33..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/database/tracking.js +++ /dev/null @@ -1,93 +0,0 @@ -/** - * Unbind all event handlers before tearing down the page - */ -AJAX.registerTeardown('database/tracking.js', function () { - $('body').off('click', '#trackedForm.ajax button[name="submit_mult"], #trackedForm.ajax input[name="submit_mult"]'); - $('body').off('click', '#untrackedForm.ajax button[name="submit_mult"], #untrackedForm.ajax input[name="submit_mult"]'); - $('body').off('click', 'a.delete_tracking_anchor.ajax'); -}); - -/** - * Bind event handlers - */ -AJAX.registerOnload('database/tracking.js', function () { - var $versions = $('#versions'); - $versions.find('tr').first().find('th').append($('
            ')); - $versions.tablesorter({ - sortList: [[1, 0]], - headers: { - 0: { sorter: false }, - 2: { sorter: 'integer' }, - 5: { sorter: false }, - 6: { sorter: false }, - 7: { sorter: false } - } - }); - - var $noVersions = $('#noversions'); - $noVersions.find('tr').first().find('th').append($('
            ')); - $noVersions.tablesorter({ - sortList: [[1, 0]], - headers: { - 0: { sorter: false }, - 2: { sorter: false } - } - }); - - var $body = $('body'); - - /** - * Handles multi submit for tracked tables - */ - $body.on('click', '#trackedForm.ajax button[name="submit_mult"], #trackedForm.ajax input[name="submit_mult"]', function (e) { - e.preventDefault(); - var $button = $(this); - var $form = $button.parent('form'); - var argsep = CommonParams.get('arg_separator'); - var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep + 'submit_mult=' + $button.val(); - - if ($button.val() === 'delete_tracking') { - var question = Messages.strDeleteTrackingDataMultiple; - $button.confirm(question, $form.attr('action'), function (url) { - Functions.ajaxShowMessage(Messages.strDeletingTrackingData); - AJAX.source = $form; - $.post(url, submitData, AJAX.responseHandler); - }); - } else { - Functions.ajaxShowMessage(); - AJAX.source = $form; - $.post($form.attr('action'), submitData, AJAX.responseHandler); - } - }); - - /** - * Handles multi submit for untracked tables - */ - $body.on('click', '#untrackedForm.ajax button[name="submit_mult"], #untrackedForm.ajax input[name="submit_mult"]', function (e) { - e.preventDefault(); - var $button = $(this); - var $form = $button.parent('form'); - var argsep = CommonParams.get('arg_separator'); - var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep + 'submit_mult=' + $button.val(); - Functions.ajaxShowMessage(); - AJAX.source = $form; - $.post($form.attr('action'), submitData, AJAX.responseHandler); - }); - - /** - * Ajax Event handler for 'Delete tracking' - */ - $body.on('click', 'a.delete_tracking_anchor.ajax', function (e) { - e.preventDefault(); - var $anchor = $(this); - var question = Messages.strDeleteTrackingData; - $anchor.confirm(question, $anchor.attr('href'), function (url) { - Functions.ajaxShowMessage(Messages.strDeletingTrackingData); - AJAX.source = $anchor; - var argSep = CommonParams.get('arg_separator'); - var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); - params += argSep + 'ajax_page_request=1'; - $.post(url, params, AJAX.responseHandler); - }); - }); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/database/triggers.js b/Sources/php_script/script/phpMyAdmin/js/src/database/triggers.js deleted file mode 100644 index 5b1dc42..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/database/triggers.js +++ /dev/null @@ -1,530 +0,0 @@ -AJAX.registerTeardown('database/triggers.js', function () { - $(document).off('click', 'a.ajax.add_anchor, a.ajax.edit_anchor'); - $(document).off('click', 'a.ajax.export_anchor'); - $(document).off('click', '#bulkActionExportButton'); - $(document).off('click', 'a.ajax.drop_anchor'); - $(document).off('click', '#bulkActionDropButton'); -}); - -const DatabaseTriggers = { - /** - * @var $ajaxDialog Query object containing the reference to the - * dialog that contains the editor - */ - $ajaxDialog: null, - /** - * @var syntaxHiglighter Reference to the codemirror editor - */ - syntaxHiglighter: null, - /** - * @var buttonOptions Object containing options for - * the jQueryUI dialog buttons - */ - buttonOptions: {}, - /** - * Validate editor form fields. - * - * @return {bool} - */ - validate: function () { - /** - * @var $elm a jQuery object containing the reference - * to an element that is being validated - */ - var $elm = null; - // Common validation. At the very least the name - // and the definition must be provided for an item - $elm = $('table.rte_table').last().find('input[name=item_name]'); - if ($elm.val() === '') { - $elm.trigger('focus'); - alert(Messages.strFormEmpty); - return false; - } - $elm = $('table.rte_table').find('textarea[name=item_definition]'); - if ($elm.val() === '') { - if (this.syntaxHiglighter !== null) { - this.syntaxHiglighter.focus(); - } else { - $('textarea[name=item_definition]').last().trigger('focus'); - } - alert(Messages.strFormEmpty); - return false; - } - // The validation has so far passed, so now - // we can validate item-specific fields. - return this.validateCustom(); - }, // end validate() - /** - * Validate custom editor form fields. - * This function can be overridden by - * other files in this folder - * - * @return {bool} - */ - validateCustom: function () { - return true; - }, // end validateCustom() - - exportDialog: function ($this) { - var $msg = Functions.ajaxShowMessage(); - if ($this.attr('id') === 'bulkActionExportButton') { - var combined = { - success: true, - title: Messages.strExport, - message: '', - error: '' - }; - // export anchors of all selected rows - var exportAnchors = $('input.checkall:checked').parents('tr').find('.export_anchor'); - var count = exportAnchors.length; - var returnCount = 0; - var p = $.when(); - exportAnchors.each(function () { - var h = $(this).attr('href'); - p = p.then(function () { - return $.get(h, { 'ajax_request': true }, function (data) { - returnCount++; - if (data.success === true) { - combined.message += '\n' + data.message + '\n'; - if (returnCount === count) { - showExport(combined); - } - } else { - // complain even if one export is failing - combined.success = false; - combined.error += '\n' + data.error + '\n'; - if (returnCount === count) { - showExport(combined); - } - } - }); - }); - }); - } else { - $.get($this.attr('href'), { 'ajax_request': true }, showExport); - } - Functions.ajaxRemoveMessage($msg); - - function showExport (data) { - if (data.success === true) { - Functions.ajaxRemoveMessage($msg); - /** - * @var button_options Object containing options - * for jQueryUI dialog buttons - */ - var buttonOptions = {}; - buttonOptions[Messages.strClose] = function () { - $(this).dialog('close').remove(); - }; - /** - * Display the dialog to the user - */ - data.message = ''; - var $ajaxDialog = $('
            ' + data.message + '
            ').dialog({ - width: 500, - buttons: buttonOptions, - title: data.title - }); - // Attach syntax highlighted editor to export dialog - /** - * @var $elm jQuery object containing the reference - * to the Export textarea. - */ - var $elm = $ajaxDialog.find('textarea'); - Functions.getSqlEditor($elm); - } else { - Functions.ajaxShowMessage(data.error, false); - } - } // end showExport() - }, // end exportDialog() - editorDialog: function (isNew, $this) { - var that = this; - /** - * @var $edit_row jQuery object containing the reference to - * the row of the the item being edited - * from the list of items - */ - var $editRow = null; - if ($this.hasClass('edit_anchor')) { - // Remember the row of the item being edited for later, - // so that if the edit is successful, we can replace the - // row with info about the modified item. - $editRow = $this.parents('tr'); - } - /** - * @var $msg jQuery object containing the reference to - * the AJAX message shown to the user - */ - var $msg = Functions.ajaxShowMessage(); - $.get($this.attr('href'), { 'ajax_request': true }, function (data) { - if (data.success === true) { - // We have successfully fetched the editor form - Functions.ajaxRemoveMessage($msg); - // Now define the function that is called when - // the user presses the "Go" button - that.buttonOptions[Messages.strGo] = function () { - // Move the data from the codemirror editor back to the - // textarea, where it can be used in the form submission. - if (typeof CodeMirror !== 'undefined') { - that.syntaxHiglighter.save(); - } - // Validate editor and submit request, if passed. - if (that.validate()) { - /** - * @var data Form data to be sent in the AJAX request - */ - var data = $('form.rte_form').last().serialize(); - $msg = Functions.ajaxShowMessage( - Messages.strProcessingRequest - ); - var url = $('form.rte_form').last().attr('action'); - $.post(url, data, function (data) { - if (data.success === true) { - // Item created successfully - Functions.ajaxRemoveMessage($msg); - Functions.slidingMessage(data.message); - that.$ajaxDialog.dialog('close'); - // If we are in 'edit' mode, we must - // remove the reference to the old row. - if (mode === 'edit' && $editRow !== null) { - $editRow.remove(); - } - // Sometimes, like when moving a trigger from - // a table to another one, the new row should - // not be inserted into the list. In this case - // "data.insert" will be set to false. - if (data.insert) { - // Insert the new row at the correct - // location in the list of items - /** - * @var text Contains the name of an item from - * the list that is used in comparisons - * to find the correct location where - * to insert a new row. - */ - var text = ''; - /** - * @var inserted Whether a new item has been - * inserted in the list or not - */ - var inserted = false; - $('table.data').find('tr').each(function () { - text = $(this) - .children('td') - .eq(0) - .find('strong') - .text() - .toUpperCase() - .trim(); - if (text !== '' && text > data.name) { - $(this).before(data.new_row); - inserted = true; - return false; - } - }); - if (! inserted) { - // If we didn't manage to insert the row yet, - // it must belong at the end of the list, - // so we insert it there. - $('table.data').append(data.new_row); - } - // Fade-in the new row - $('tr.ajaxInsert') - .show('slow') - .removeClass('ajaxInsert'); - } else if ($('table.data').find('tr').has('td').length === 0) { - // If we are not supposed to insert the new row, - // we will now check if the table is empty and - // needs to be hidden. This will be the case if - // we were editing the only item in the list, - // which we removed and will not be inserting - // something else in its place. - $('table.data').hide('slow', function () { - $('#nothing2display').show('slow'); - }); - } - // Now we have inserted the row at the correct - // position, but surely at least some row classes - // are wrong now. So we will iterate through - // all rows and assign correct classes to them - /** - * @var ct Count of processed rows - */ - var ct = 0; - /** - * @var rowclass Class to be attached to the row - * that is being processed - */ - var rowclass = ''; - $('table.data').find('tr').has('td').each(function () { - rowclass = (ct % 2 === 0) ? 'odd' : 'even'; - $(this).removeClass().addClass(rowclass); - ct++; - }); - // If this is the first item being added, remove - // the "No items" message and show the list. - if ($('table.data').find('tr').has('td').length > 0 && - $('#nothing2display').is(':visible') - ) { - $('#nothing2display').hide('slow', function () { - $('table.data').show('slow'); - }); - } - Navigation.reload(); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.post() - } // end "if (that.validate())" - }; // end of function that handles the submission of the Editor - that.buttonOptions[Messages.strClose] = function () { - $(this).dialog('close'); - }; - /** - * Display the dialog to the user - */ - that.$ajaxDialog = $('
            ' + data.message + '
            ').dialog({ - width: 700, - minWidth: 500, - buttons: that.buttonOptions, - // Issue #15810 - use button titles for modals (eg: new procedure) - // Respect the order: title on href tag, href content, title sent in response - title: $this.attr('title') || $this.text() || $(data.title).text(), - modal: true, - open: function () { - $('#rteDialog').dialog('option', 'max-height', $(window).height()); - if ($('#rteDialog').parents('.ui-dialog').height() > $(window).height()) { - $('#rteDialog').dialog('option', 'height', $(window).height()); - } - $(this).find('input[name=item_name]').trigger('focus'); - $(this).find('input.datefield').each(function () { - Functions.addDatepicker($(this).css('width', '95%'), 'date'); - }); - $(this).find('input.datetimefield').each(function () { - Functions.addDatepicker($(this).css('width', '95%'), 'datetime'); - }); - $.datepicker.initialized = false; - }, - close: function () { - $(this).remove(); - } - }); - /** - * @var mode Used to remember whether the editor is in - * "Edit" or "Add" mode - */ - var mode = 'add'; - if ($('input[name=editor_process_edit]').length > 0) { - mode = 'edit'; - } - // Attach syntax highlighted editor to the definition - /** - * @var elm jQuery object containing the reference to - * the Definition textarea. - */ - var $elm = $('textarea[name=item_definition]').last(); - var linterOptions = {}; - linterOptions.triggerEditor = true; - that.syntaxHiglighter = Functions.getSqlEditor($elm, {}, 'both', linterOptions); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.get() - }, - - dropDialog: function ($this) { - /** - * @var $curr_row Object containing reference to the current row - */ - var $currRow = $this.parents('tr'); - /** - * @var question String containing the question to be asked for confirmation - */ - var question = $('
            ').text( - $currRow.children('td').children('.drop_sql').html() - ); - // We ask for confirmation first here, before submitting the ajax request - $this.confirm(question, $this.attr('href'), function (url) { - /** - * @var msg jQuery object containing the reference to - * the AJAX message shown to the user - */ - var $msg = Functions.ajaxShowMessage(Messages.strProcessingRequest); - var params = Functions.getJsConfirmCommonParam(this, $this.getPostData()); - $.post(url, params, function (data) { - if (data.success === true) { - /** - * @var $table Object containing reference - * to the main list of elements - */ - var $table = $currRow.parent(); - // Check how many rows will be left after we remove - // the one that the user has requested us to remove - if ($table.find('tr').length === 3) { - // If there are two rows left, it means that they are - // the header of the table and the rows that we are - // about to remove, so after the removal there will be - // nothing to show in the table, so we hide it. - $table.hide('slow', function () { - $(this).find('tr.even, tr.odd').remove(); - $('.withSelected').remove(); - $('#nothing2display').show('slow'); - }); - } else { - $currRow.hide('slow', function () { - $(this).remove(); - // Now we have removed the row from the list, but maybe - // some row classes are wrong now. So we will iterate - // through all rows and assign correct classes to them. - /** - * @var ct Count of processed rows - */ - var ct = 0; - /** - * @var rowclass Class to be attached to the row - * that is being processed - */ - var rowclass = ''; - $table.find('tr').has('td').each(function () { - rowclass = (ct % 2 === 1) ? 'odd' : 'even'; - $(this).removeClass().addClass(rowclass); - ct++; - }); - }); - } - // Get rid of the "Loading" message - Functions.ajaxRemoveMessage($msg); - // Show the query that we just executed - Functions.slidingMessage(data.sql_query); - Navigation.reload(); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.post() - }); - }, - - dropMultipleDialog: function ($this) { - // We ask for confirmation here - $this.confirm(Messages.strDropRTEitems, '', function () { - /** - * @var msg jQuery object containing the reference to - * the AJAX message shown to the user - */ - var $msg = Functions.ajaxShowMessage(Messages.strProcessingRequest); - - // drop anchors of all selected rows - var dropAnchors = $('input.checkall:checked').parents('tr').find('.drop_anchor'); - var success = true; - var count = dropAnchors.length; - var returnCount = 0; - - dropAnchors.each(function () { - var $anchor = $(this); - /** - * @var $curr_row Object containing reference to the current row - */ - var $currRow = $anchor.parents('tr'); - var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); - $.post($anchor.attr('href'), params, function (data) { - returnCount++; - if (data.success === true) { - /** - * @var $table Object containing reference - * to the main list of elements - */ - var $table = $currRow.parent(); - // Check how many rows will be left after we remove - // the one that the user has requested us to remove - if ($table.find('tr').length === 3) { - // If there are two rows left, it means that they are - // the header of the table and the rows that we are - // about to remove, so after the removal there will be - // nothing to show in the table, so we hide it. - $table.hide('slow', function () { - $(this).find('tr.even, tr.odd').remove(); - $('.withSelected').remove(); - $('#nothing2display').show('slow'); - }); - } else { - $currRow.hide('fast', function () { - // we will iterate - // through all rows and assign correct classes to them. - /** - * @var ct Count of processed rows - */ - var ct = 0; - /** - * @var rowclass Class to be attached to the row - * that is being processed - */ - var rowclass = ''; - $table.find('tr').has('td').each(function () { - rowclass = (ct % 2 === 1) ? 'odd' : 'even'; - $(this).removeClass().addClass(rowclass); - ct++; - }); - }); - $currRow.remove(); - } - if (returnCount === count) { - if (success) { - // Get rid of the "Loading" message - Functions.ajaxRemoveMessage($msg); - $('#rteListForm_checkall').prop({ checked: false, indeterminate: false }); - } - Navigation.reload(); - } - } else { - Functions.ajaxShowMessage(data.error, false); - success = false; - if (returnCount === count) { - Navigation.reload(); - } - } - }); // end $.post() - }); // end drop_anchors.each() - }); - } -}; - -AJAX.registerOnload('database/triggers.js', function () { - /** - * Attach Ajax event handlers for the Add/Edit functionality. - */ - $(document).on('click', 'a.ajax.add_anchor, a.ajax.edit_anchor', function (event) { - event.preventDefault(); - - if ($(this).hasClass('add_anchor')) { - $.datepicker.initialized = false; - } - - DatabaseTriggers.editorDialog($(this).hasClass('add_anchor'), $(this)); - }); - - /** - * Attach Ajax event handlers for Export - */ - $(document).on('click', 'a.ajax.export_anchor', function (event) { - event.preventDefault(); - DatabaseTriggers.exportDialog($(this)); - }); - - $(document).on('click', '#bulkActionExportButton', function (event) { - event.preventDefault(); - DatabaseTriggers.exportDialog($(this)); - }); - - /** - * Attach Ajax event handlers for Drop functionality - */ - $(document).on('click', 'a.ajax.drop_anchor', function (event) { - event.preventDefault(); - DatabaseTriggers.dropDialog($(this)); - }); - - $(document).on('click', '#bulkActionDropButton', function (event) { - event.preventDefault(); - DatabaseTriggers.dropMultipleDialog($(this)); - }); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/designer/page.js b/Sources/php_script/script/phpMyAdmin/js/src/designer/page.js deleted file mode 100644 index a1c1220..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/designer/page.js +++ /dev/null @@ -1,178 +0,0 @@ -/* global DesignerOfflineDB */ // js/designer/database.js -// eslint-disable-next-line no-unused-vars -/* global db, selectedPage:writable */ // js/designer/init.js -/* global DesignerMove */ // js/designer/move.js -/* global DesignerObjects */ // js/designer/objects.js - -var DesignerPage = {}; - -DesignerPage.showTablesInLandingPage = function (db) { - DesignerPage.loadFirstPage(db, function (page) { - if (page) { - DesignerPage.loadHtmlForPage(page.pgNr); - selectedPage = page.pgNr; - } else { - DesignerPage.showNewPageTables(true); - } - }); -}; - -DesignerPage.saveToNewPage = function (db, pageName, tablePositions, callback) { - DesignerPage.createNewPage(db, pageName, function (page) { - if (page) { - var tblCords = []; - var saveCallback = function (id) { - tblCords.push(id); - if (tablePositions.length === tblCords.length) { - page.tblCords = tblCords; - DesignerOfflineDB.addObject('pdf_pages', page); - } - }; - for (var pos = 0; pos < tablePositions.length; pos++) { - tablePositions[pos].pdfPgNr = page.pgNr; - DesignerPage.saveTablePositions(tablePositions[pos], saveCallback); - } - if (typeof callback !== 'undefined') { - callback(page); - } - } - }); -}; - -DesignerPage.saveToSelectedPage = function (db, pageId, pageName, tablePositions, callback) { - DesignerPage.deletePage(pageId); - DesignerPage.saveToNewPage(db, pageName, tablePositions, function (page) { - if (typeof callback !== 'undefined') { - callback(page); - } - selectedPage = page.pgNr; - }); -}; - -DesignerPage.createNewPage = function (db, pageName, callback) { - var newPage = new DesignerObjects.PdfPage(db, pageName); - DesignerOfflineDB.addObject('pdf_pages', newPage, function (pgNr) { - newPage.pgNr = pgNr; - if (typeof callback !== 'undefined') { - callback(newPage); - } - }); -}; - -DesignerPage.saveTablePositions = function (positions, callback) { - DesignerOfflineDB.addObject('table_coords', positions, callback); -}; - -DesignerPage.createPageList = function (db, callback) { - DesignerOfflineDB.loadAllObjects('pdf_pages', function (pages) { - var html = ''; - for (var p = 0; p < pages.length; p++) { - var page = pages[p]; - if (page.dbName === db) { - html += ''; - } - } - if (typeof callback !== 'undefined') { - callback(html); - } - }); -}; - -DesignerPage.deletePage = function (pageId, callback) { - DesignerOfflineDB.loadObject('pdf_pages', pageId, function (page) { - if (page) { - for (var i = 0; i < page.tblCords.length; i++) { - DesignerOfflineDB.deleteObject('table_coords', page.tblCords[i]); - } - DesignerOfflineDB.deleteObject('pdf_pages', pageId, callback); - } - }); -}; - -DesignerPage.loadFirstPage = function (db, callback) { - DesignerOfflineDB.loadAllObjects('pdf_pages', function (pages) { - var firstPage = null; - for (var i = 0; i < pages.length; i++) { - var page = pages[i]; - if (page.dbName === db) { - // give preference to a page having same name as the db - if (page.pageDescr === db) { - callback(page); - return; - } - if (firstPage === null) { - firstPage = page; - } - } - } - callback(firstPage); - }); -}; - -DesignerPage.showNewPageTables = function (check) { - var allTables = $('#id_scroll_tab').find('td input:checkbox'); - allTables.prop('checked', check); - for (var tab = 0; tab < allTables.length; tab++) { - var input = allTables[tab]; - if (input.value) { - var element = document.getElementById(input.value); - element.style.top = DesignerPage.getRandom(550, 20) + 'px'; - element.style.left = DesignerPage.getRandom(700, 20) + 'px'; - DesignerMove.visibleTab(input, input.value); - } - } - selectedPage = -1; - $('#page_name').text(Messages.strUntitled); - DesignerMove.markUnsaved(); -}; - -DesignerPage.loadHtmlForPage = function (pageId) { - DesignerPage.showNewPageTables(true); - DesignerPage.loadPageObjects(pageId, function (page, tblCords) { - $('#name-panel').find('#page_name').text(page.pageDescr); - var tableMissing = false; - for (var t = 0; t < tblCords.length; t++) { - var tbId = db + '.' + tblCords[t].tableName; - var table = document.getElementById(tbId); - if (table === null) { - tableMissing = true; - continue; - } - table.style.top = tblCords[t].y + 'px'; - table.style.left = tblCords[t].x + 'px'; - - var checkbox = document.getElementById('check_vis_' + tbId); - checkbox.checked = true; - DesignerMove.visibleTab(checkbox, checkbox.value); - } - DesignerMove.markSaved(); - if (tableMissing === true) { - DesignerMove.markUnsaved(); - Functions.ajaxShowMessage(Messages.strSavedPageTableMissing); - } - selectedPage = page.pgNr; - }); -}; - -DesignerPage.loadPageObjects = function (pageId, callback) { - DesignerOfflineDB.loadObject('pdf_pages', pageId, function (page) { - var tblCords = []; - var count = page.tblCords.length; - for (var i = 0; i < count; i++) { - DesignerOfflineDB.loadObject('table_coords', page.tblCords[i], function (tblCord) { - tblCords.push(tblCord); - if (tblCords.length === count) { - if (typeof callback !== 'undefined') { - callback(page, tblCords); - } - } - }); - } - }); -}; - -DesignerPage.getRandom = function (max, min) { - var val = Math.random() * (max - min) + min; - return Math.floor(val); -}; diff --git a/Sources/php_script/script/phpMyAdmin/js/src/import.js b/Sources/php_script/script/phpMyAdmin/js/src/import.js deleted file mode 100644 index 989b35b..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/import.js +++ /dev/null @@ -1,154 +0,0 @@ -/** - * Functions used in the import tab - * - */ - - -/** - * Toggles the hiding and showing of each plugin's options - * according to the currently selected plugin from the dropdown list - */ -function changePluginOpts () { - $('#format_specific_opts').find('div.format_specific_options').each(function () { - $(this).hide(); - }); - var selectedPluginName = $('#plugins').find('option:selected').val(); - $('#' + selectedPluginName + '_options').fadeIn('slow'); - - const importNotification = document.getElementById('import_notification'); - importNotification.innerText = ''; - if (selectedPluginName === 'csv') { - importNotification.innerHTML = ''; - } -} - -/** - * Toggles the hiding and showing of each plugin's options and sets the selected value - * in the plugin dropdown list according to the format of the selected file - * - * @param {string} fname - */ -function matchFile (fname) { - var fnameArray = fname.toLowerCase().split('.'); - var len = fnameArray.length; - if (len !== 0) { - var extension = fnameArray[len - 1]; - if (extension === 'gz' || extension === 'bz2' || extension === 'zip') { - len--; - } - // Only toggle if the format of the file can be imported - if ($('select[name=\'format\'] option').filterByValue(fnameArray[len - 1]).length === 1) { - $('select[name=\'format\'] option').filterByValue(fnameArray[len - 1]).prop('selected', true); - changePluginOpts(); - } - } -} - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('import.js', function () { - $('#plugins').off('change'); - $('#input_import_file').off('change'); - $('#select_local_import_file').off('change'); - $('#input_import_file').off('change').off('focus'); - $('#select_local_import_file').off('focus'); - $('#text_csv_enclosed').add('#text_csv_escaped').off('keyup'); -}); - -AJAX.registerOnload('import.js', function () { - // import_file_form validation. - $(document).on('submit', '#import_file_form', function () { - var radioLocalImport = $('#localFileTab'); - var radioImport = $('#uploadFileTab'); - var fileMsg = ''; - var wrongTblNameMsg = ''; - var wrongDBNameMsg = ''; - - if (radioLocalImport.length !== 0) { - // remote upload. - - if (radioImport.hasClass('active') && $('#input_import_file').val() === '') { - $('#input_import_file').trigger('focus'); - Functions.ajaxShowMessage(fileMsg, false); - return false; - } - - if (radioLocalImport.hasClass('active')) { - if ($('#select_local_import_file').length === 0) { - Functions.ajaxShowMessage('', false); - return false; - } - - if ($('#select_local_import_file').val() === '') { - $('#select_local_import_file').trigger('focus'); - Functions.ajaxShowMessage(fileMsg, false); - return false; - } - } - } else { - // local upload. - if ($('#input_import_file').val() === '') { - $('#input_import_file').trigger('focus'); - Functions.ajaxShowMessage(fileMsg, false); - return false; - } - if ($('#text_csv_new_tbl_name').length > 0) { - var newTblName = $('#text_csv_new_tbl_name').val(); - if (newTblName.length > 0 && newTblName.trim().length === 0) { - Functions.ajaxShowMessage(wrongTblNameMsg, false); - return false; - } - } - if ($('#text_csv_new_db_name').length > 0) { - var newDBName = $('#text_csv_new_db_name').val(); - if (newDBName.length > 0 && newDBName.trim().length === 0) { - Functions.ajaxShowMessage(wrongDBNameMsg, false); - return false; - } - } - } - - // show progress bar. - $('#upload_form_status').css('display', 'inline'); - $('#upload_form_status_info').css('display', 'inline'); - }); - - // Initially display the options for the selected plugin - changePluginOpts(); - - // Whenever the selected plugin changes, change the options displayed - $('#plugins').on('change', function () { - changePluginOpts(); - }); - - $('#input_import_file').on('change', function () { - matchFile($(this).val()); - }); - - $('#select_local_import_file').on('change', function () { - matchFile($(this).val()); - }); - - /** - * Set up the interface for Javascript-enabled browsers since the default is for - * Javascript-disabled browsers - */ - $('#format_specific_opts').find('div.format_specific_options') - .find('h3') - .remove(); - // $("form[name=import] *").unwrap(); - - /** - * for input element text_csv_enclosed and text_csv_escaped allow just one character to enter. - * as mysql allows just one character for these fields, - * if first character is escape then allow two including escape character. - */ - $('#text_csv_enclosed').add('#text_csv_escaped').on('keyup', function () { - if ($(this).val().length === 2 && $(this).val().charAt(0) !== '\\') { - $(this).val($(this).val().substring(0, 1)); - return false; - } - return true; - }); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/indexes.js b/Sources/php_script/script/phpMyAdmin/js/src/indexes.js deleted file mode 100644 index 1beea5b..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/indexes.js +++ /dev/null @@ -1,819 +0,0 @@ -/** - * @fileoverview function used for index manipulation pages - * @name Table Structure - * - * @requires jQuery - * @requires jQueryUI - * @required js/functions.js - */ - -/* global fulltextIndexes:writable, indexes:writable, primaryIndexes:writable, spatialIndexes:writable, uniqueIndexes:writable */ // js/functions.js - -var Indexes = {}; - -/** - * Returns the array of indexes based on the index choice - * - * @param {string} indexChoice index choice - * - * @return {null|object} - */ -Indexes.getIndexArray = function (indexChoice) { - var sourceArray = null; - - switch (indexChoice.toLowerCase()) { - case 'primary': - sourceArray = primaryIndexes; - break; - case 'unique': - sourceArray = uniqueIndexes; - break; - case 'index': - sourceArray = indexes; - break; - case 'fulltext': - sourceArray = fulltextIndexes; - break; - case 'spatial': - sourceArray = spatialIndexes; - break; - default: - return null; - } - return sourceArray; -}; - -/** - * Hides/shows the inputs and submits appropriately depending - * on whether the index type chosen is 'SPATIAL' or not. - */ -Indexes.checkIndexType = function () { - /** - * @var {JQuery= 0) { - // Remove column from other indexes (if any). - Indexes.removeColumnFromIndex(colIndex); - } - var indexName = $('input[name="index[Key_name]"]').val(); - var indexComment = $('input[name="index[Index_comment]"]').val(); - var keyBlockSize = $('input[name="index[Key_block_size]"]').val(); - var parser = $('input[name="index[Parser]"]').val(); - var indexType = $('select[name="index[Index_type]"]').val(); - var columns = []; - $('#index_columns').find('tbody').find('tr').each(function () { - // Get columns in particular order. - var colIndex = $(this).find('select[name="index[columns][names][]"]').val(); - var size = $(this).find('input[name="index[columns][sub_parts][]"]').val(); - columns.push({ - 'col_index': colIndex, - 'size': size - }); - }); - - // Update or create an index. - sourceArray[arrayIndex] = { - 'Key_name': indexName, - 'Index_comment': indexComment, - 'Index_choice': indexChoice.toUpperCase(), - 'Key_block_size': keyBlockSize, - 'Parser': parser, - 'Index_type': indexType, - 'columns': columns - }; - - // Display index name (or column list) - var displayName = indexName; - if (displayName === '') { - var columnNames = []; - $.each(columns, function () { - columnNames.push($('input[name="field_name[' + this.col_index + ']"]').val()); - }); - displayName = '[' + columnNames.join(', ') + ']'; - } - $.each(columns, function () { - var id = 'index_name_' + this.col_index + '_8'; - var $name = $('#' + id); - if ($name.length === 0) { - $name = $(''); - $name.insertAfter($('select[name="field_key[' + this.col_index + ']"]')); - } - var $text = $('').text(displayName); - $name.html($text); - }); - - if (colIndex >= 0) { - // Update index details on form. - $('select[name="field_key[' + colIndex + ']"]') - .attr('data-index', indexChoice + ',' + arrayIndex); - } - Indexes.setIndexFormParameters(sourceArray, indexChoice.toLowerCase()); -}; - -/** - * Get choices list for a column to create a composite index with. - * - * @param {any[]} sourceArray Array hodling columns for particular index - * @param {string} colIndex Choice of index - * - * @return {JQuery} jQuery Object - */ -Indexes.getCompositeIndexList = function (sourceArray, colIndex) { - // Remove any previous list. - if ($('#composite_index_list').length) { - $('#composite_index_list').remove(); - } - - // Html list. - var $compositeIndexList = $( - '
              ' + - '
              ' + Messages.strCompositeWith + '
              ' + - '
            ' - ); - - // Add each column to list available for composite index. - var sourceLength = sourceArray.length; - var alreadyPresent = false; - for (var i = 0; i < sourceLength; i++) { - var subArrayLen = sourceArray[i].columns.length; - var columnNames = []; - for (var j = 0; j < subArrayLen; j++) { - columnNames.push( - $('input[name="field_name[' + sourceArray[i].columns[j].col_index + ']"]').val() - ); - - if (colIndex === sourceArray[i].columns[j].col_index) { - alreadyPresent = true; - } - } - - $compositeIndexList.append( - '
          • ' + - '' + - '' + - '
          • ' - ); - } - - return $compositeIndexList; -}; - -/** - * Shows 'Add Index' dialog. - * - * @param {any[]} sourceArray Array holding particular index - * @param {string} arrayIndex Index of an INDEX in array - * @param {any[]} targetColumns Columns for an INDEX - * @param {string} colIndex Index of column on form - * @param {object} index Index detail object - * @param {boolean} showDialog Whether to show index creation dialog or not - * - * @return {void} - */ -Indexes.showAddIndexDialog = function (sourceArray, arrayIndex, targetColumns, colIndex, index, showDialog) { - var showDialogLocal = typeof showDialog !== 'undefined' ? showDialog : true; - // Prepare post-data. - var $table = $('input[name="table"]'); - var table = $table.length > 0 ? $table.val() : ''; - var postData = { - 'server': CommonParams.get('server'), - 'db': $('input[name="db"]').val(), - 'table': table, - 'ajax_request': 1, - 'create_edit_table': 1, - 'index': index - }; - - var columns = {}; - for (var i = 0; i < targetColumns.length; i++) { - var columnName = $('input[name="field_name[' + targetColumns[i] + ']"]').val(); - var columnType = $('select[name="field_type[' + targetColumns[i] + ']"]').val().toLowerCase(); - columns[columnName] = [columnType, targetColumns[i]]; - } - postData.columns = JSON.stringify(columns); - - var buttonOptions = {}; - buttonOptions[Messages.strGo] = function () { - var isMissingValue = false; - $('select[name="index[columns][names][]"]').each(function () { - if ($(this).val() === '') { - isMissingValue = true; - } - }); - - if (! isMissingValue) { - Indexes.addColumnToIndex( - sourceArray, - arrayIndex, - index.Index_choice, - colIndex - ); - } else { - Functions.ajaxShowMessage( - '', false - ); - - return false; - } - - $(this).remove(); - }; - buttonOptions[Messages.strCancel] = function () { - if (colIndex >= 0) { - // Handle state on 'Cancel'. - var $selectList = $('select[name="field_key[' + colIndex + ']"]'); - if (! $selectList.attr('data-index').length) { - $selectList.find('option[value*="none"]').attr('selected', 'selected'); - } else { - var previousIndex = $selectList.attr('data-index').split(','); - $selectList.find('option[value*="' + previousIndex[0].toLowerCase() + '"]') - .attr('selected', 'selected'); - } - } - $(this).dialog('close'); - }; - var $msgbox = Functions.ajaxShowMessage(); - $.post('index.php?route=/table/indexes', postData, function (data) { - if (data.success === false) { - // in the case of an error, show the error message returned. - Functions.ajaxShowMessage(data.error, false); - } else { - Functions.ajaxRemoveMessage($msgbox); - var $div = $('
            '); - if (showDialogLocal) { - // Show dialog if the request was successful - if ($('#addIndex').length > 0) { - $('#addIndex').remove(); - } - $div - .append(data.message) - .dialog({ - title: Messages.strAddIndex, - width: 450, - minHeight: 250, - create: function () { - $(this).on('keypress', function (e) { - if (e.which === 13 || e.keyCode === 13 || window.event.keyCode === 13) { - e.preventDefault(); - buttonOptions[Messages.strGo](); - $(this).remove(); - } - }); - }, - open: function () { - Functions.checkIndexName('index_frm'); - Functions.showHints($div); - $('#index_columns').find('td').each(function () { - $(this).css('width', $(this).width() + 'px'); - }); - $('#index_columns').find('tbody').sortable({ - axis: 'y', - containment: $('#index_columns').find('tbody'), - tolerance: 'pointer' - }); - }, - modal: true, - buttons: buttonOptions, - close: function () { - $(this).remove(); - } - }); - } else { - $div - .append(data.message); - $div.css({ 'display' : 'none' }); - $div.appendTo($('body')); - $div.attr({ 'id' : 'addIndex' }); - var isMissingValue = false; - $('select[name="index[columns][names][]"]').each(function () { - if ($(this).val() === '') { - isMissingValue = true; - } - }); - - if (! isMissingValue) { - Indexes.addColumnToIndex( - sourceArray, - arrayIndex, - index.Index_choice, - colIndex - ); - } else { - Functions.ajaxShowMessage( - '', false - ); - - return false; - } - } - } - }); -}; - -/** - * Creates a advanced index type selection dialog. - * - * @param {any[]} sourceArray Array holding a particular type of indexes - * @param {string} indexChoice Choice of index - * @param {string} colIndex Index of new column on form - * - * @return {void} - */ -Indexes.indexTypeSelectionDialog = function (sourceArray, indexChoice, colIndex) { - var $singleColumnRadio = $('' + - ''); - var $compositeIndexRadio = $('' + - ''); - var $dialogContent = $('
            '); - $dialogContent.append('' + indexChoice.toUpperCase() + ''); - - - // For UNIQUE/INDEX type, show choice for single-column and composite index. - $dialogContent.append($singleColumnRadio); - $dialogContent.append($compositeIndexRadio); - - var buttonOptions = {}; - // 'OK' operation. - buttonOptions[Messages.strGo] = function () { - if ($('#single_column').is(':checked')) { - var index = { - 'Key_name': (indexChoice === 'primary' ? 'PRIMARY' : ''), - 'Index_choice': indexChoice.toUpperCase() - }; - Indexes.showAddIndexDialog(sourceArray, (sourceArray.length), [colIndex], colIndex, index); - } - - if ($('#composite_index').is(':checked')) { - if ($('input[name="composite_with"]').length !== 0 && $('input[name="composite_with"]:checked').length === 0 - ) { - Functions.ajaxShowMessage( - '', - false - ); - return false; - } - - var arrayIndex = $('input[name="composite_with"]:checked').val(); - var sourceLength = sourceArray[arrayIndex].columns.length; - var targetColumns = []; - for (var i = 0; i < sourceLength; i++) { - targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); - } - targetColumns.push(colIndex); - - Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, colIndex, - sourceArray[arrayIndex]); - } - - $(this).remove(); - }; - buttonOptions[Messages.strCancel] = function () { - // Handle state on 'Cancel'. - var $selectList = $('select[name="field_key[' + colIndex + ']"]'); - if (! $selectList.attr('data-index').length) { - $selectList.find('option[value*="none"]').attr('selected', 'selected'); - } else { - var previousIndex = $selectList.attr('data-index').split(','); - $selectList.find('option[value*="' + previousIndex[0].toLowerCase() + '"]') - .attr('selected', 'selected'); - } - $(this).remove(); - }; - $('
            ').append($dialogContent).dialog({ - minWidth: 525, - minHeight: 200, - modal: true, - title: Messages.strAddIndex, - resizable: false, - buttons: buttonOptions, - open: function () { - $('#composite_index').on('change', function () { - if ($(this).is(':checked')) { - $dialogContent.append(Indexes.getCompositeIndexList(sourceArray, colIndex)); - } - }); - $('#single_column').on('change', function () { - if ($(this).is(':checked')) { - if ($('#composite_index_list').length) { - $('#composite_index_list').remove(); - } - } - }); - }, - close: function () { - $('#composite_index').off('change'); - $('#single_column').off('change'); - $(this).remove(); - } - }); -}; - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('indexes.js', function () { - $(document).off('click', '#save_index_frm'); - $(document).off('click', '#preview_index_frm'); - $(document).off('change', '#select_index_choice'); - $(document).off('click', 'a.drop_primary_key_index_anchor.ajax'); - $(document).off('click', '#table_index tbody tr td.edit_index.ajax, #index_div .add_index.ajax'); - $(document).off('click', '#table_index tbody tr td.rename_index.ajax'); - $(document).off('click', '#index_frm input[type=submit]'); - $('body').off('change', 'select[name*="field_key"]'); - $(document).off('click', '.show_index_dialog'); -}); - -/** - * @description

            Ajax scripts for table index page

            - * - * Actions ajaxified here: - *
              - *
            • Showing/hiding inputs depending on the index type chosen
            • - *
            • create/edit/drop indexes
            • - *
            - */ -AJAX.registerOnload('indexes.js', function () { - // Re-initialize variables. - primaryIndexes = []; - uniqueIndexes = []; - indexes = []; - fulltextIndexes = []; - spatialIndexes = []; - - // for table creation form - var $engineSelector = $('.create_table_form select[name=tbl_storage_engine]'); - if ($engineSelector.length) { - Functions.hideShowConnection($engineSelector); - } - - var $form = $('#index_frm'); - if ($form.length > 0) { - Functions.showIndexEditDialog($form); - } - - $(document).on('click', '#save_index_frm', function (event) { - event.preventDefault(); - var $form = $('#index_frm'); - var argsep = CommonParams.get('arg_separator'); - var submitData = $form.serialize() + argsep + 'do_save_data=1' + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true'; - Functions.ajaxShowMessage(Messages.strProcessingRequest); - AJAX.source = $form; - $.post($form.attr('action'), submitData, AJAX.responseHandler); - }); - - $(document).on('click', '#preview_index_frm', function (event) { - event.preventDefault(); - Functions.previewSql($('#index_frm')); - }); - - $(document).on('change', '#select_index_choice', function (event) { - event.preventDefault(); - Indexes.checkIndexType(); - Functions.checkIndexName('index_frm'); - }); - - /** - * Ajax Event handler for 'Drop Index' - */ - $(document).on('click', 'a.drop_primary_key_index_anchor.ajax', function (event) { - event.preventDefault(); - var $anchor = $(this); - /** - * @var $currRow Object containing reference to the current field's row - */ - var $currRow = $anchor.parents('tr'); - /** @var {number} rows Number of columns in the key */ - var rows = $anchor.parents('td').attr('rowspan') || 1; - /** @var {number} $rowsToHide Rows that should be hidden */ - var $rowsToHide = $currRow; - for (var i = 1, $lastRow = $currRow.next(); i < rows; i++, $lastRow = $lastRow.next()) { - $rowsToHide = $rowsToHide.add($lastRow); - } - - var question = $currRow.children('td') - .children('.drop_primary_key_index_msg') - .val(); - - Functions.confirmPreviewSql(question, $anchor.attr('href'), function (url) { - var $msg = Functions.ajaxShowMessage(Messages.strDroppingPrimaryKeyIndex, false); - var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); - $.post(url, params, function (data) { - if (typeof data !== 'undefined' && data.success === true) { - Functions.ajaxRemoveMessage($msg); - var $tableRef = $rowsToHide.closest('table'); - if ($rowsToHide.length === $tableRef.find('tbody > tr').length) { - // We are about to remove all rows from the table - $tableRef.hide('medium', function () { - $('div.no_indexes_defined').show('medium'); - $rowsToHide.remove(); - }); - $tableRef.siblings('.alert-primary').hide('medium'); - } else { - // We are removing some of the rows only - $rowsToHide.hide('medium', function () { - $(this).remove(); - }); - } - if ($('.result_query').length) { - $('.result_query').remove(); - } - if (data.sql_query) { - $('
            ') - .html(data.sql_query) - .prependTo('#structure_content'); - Functions.highlightSql($('#page_content')); - } - Navigation.reload(); - CommonActions.refreshMain('index.php?route=/table/structure'); - } else { - Functions.ajaxShowMessage(Messages.strErrorProcessingRequest + ' : ' + data.error, false); - } - }); // end $.post() - }); - }); // end Drop Primary Key/Index - - /** - * Ajax event handler for index edit - **/ - $(document).on('click', '#table_index tbody tr td.edit_index.ajax, #index_div .add_index.ajax', function (event) { - event.preventDefault(); - var url; - var title; - if ($(this).find('a').length === 0) { - // Add index - var valid = Functions.checkFormElementInRange( - $(this).closest('form')[0], - 'added_fields', - 'Column count has to be larger than zero.' - ); - if (! valid) { - return; - } - url = $(this).closest('form').serialize(); - title = Messages.strAddIndex; - } else { - // Edit index - url = $(this).find('a').getPostData(); - title = Messages.strEditIndex; - } - url += CommonParams.get('arg_separator') + 'ajax_request=true'; - Functions.indexEditorDialog(url, title, function (data) { - CommonParams.set('db', data.params.db); - CommonParams.set('table', data.params.table); - CommonActions.refreshMain('index.php?route=/table/structure'); - }); - }); - - /** - * Ajax event handler for index rename - **/ - $(document).on('click', '#table_index tbody tr td.rename_index.ajax', function (event) { - event.preventDefault(); - var url = $(this).find('a').getPostData(); - var title = Messages.strRenameIndex; - url += CommonParams.get('arg_separator') + 'ajax_request=true'; - Functions.indexRenameDialog(url, title, function (data) { - CommonParams.set('db', data.params.db); - CommonParams.set('table', data.params.table); - CommonActions.refreshMain('index.php?route=/table/structure'); - }); - }); - - /** - * Ajax event handler for advanced index creation during table creation - * and column addition. - */ - $('body').on('change', 'select[name*="field_key"]', function (e, showDialog) { - var showDialogLocal = typeof showDialog !== 'undefined' ? showDialog : true; - // Index of column on Table edit and create page. - var colIndex = /\d+/.exec($(this).attr('name')); - colIndex = colIndex[0]; - // Choice of selected index. - var indexChoice = /[a-z]+/.exec($(this).val()); - indexChoice = indexChoice[0]; - // Array containing corresponding indexes. - var sourceArray = null; - - if (indexChoice === 'none') { - Indexes.removeColumnFromIndex(colIndex); - var id = 'index_name_' + '0' + '_8'; - var $name = $('#' + id); - if ($name.length === 0) { - $name = $(''); - $name.insertAfter($('select[name="field_key[' + '0' + ']"]')); - } - $name.html(''); - return false; - } - - // Select a source array. - sourceArray = Indexes.getIndexArray(indexChoice); - if (sourceArray === null) { - return; - } - - if (sourceArray.length === 0) { - var index = { - 'Key_name': (indexChoice === 'primary' ? 'PRIMARY' : ''), - 'Index_choice': indexChoice.toUpperCase() - }; - Indexes.showAddIndexDialog(sourceArray, 0, [colIndex], colIndex, index, showDialogLocal); - } else { - if (indexChoice === 'primary') { - var arrayIndex = 0; - var sourceLength = sourceArray[arrayIndex].columns.length; - var targetColumns = []; - for (var i = 0; i < sourceLength; i++) { - targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); - } - targetColumns.push(colIndex); - Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, colIndex, - sourceArray[arrayIndex], showDialogLocal); - } else { - // If there are multiple columns selected for an index, show advanced dialog. - Indexes.indexTypeSelectionDialog(sourceArray, indexChoice, colIndex); - } - } - }); - - $(document).on('click', '.show_index_dialog', function (e) { - e.preventDefault(); - - // Get index details. - var previousIndex = $(this).prev('select') - .attr('data-index') - .split(','); - - var indexChoice = previousIndex[0]; - var arrayIndex = previousIndex[1]; - - var sourceArray = Indexes.getIndexArray(indexChoice); - if (sourceArray !== null) { - var sourceLength = sourceArray[arrayIndex].columns.length; - - var targetColumns = []; - for (var i = 0; i < sourceLength; i++) { - targetColumns.push(sourceArray[arrayIndex].columns[i].col_index); - } - - Indexes.showAddIndexDialog(sourceArray, arrayIndex, targetColumns, -1, sourceArray[arrayIndex]); - } - }); - - $('#index_frm').on('submit', function () { - if (typeof(this.elements['index[Key_name]'].disabled) !== 'undefined') { - this.elements['index[Key_name]'].disabled = false; - } - }); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/makegrid.js b/Sources/php_script/script/phpMyAdmin/js/src/makegrid.js deleted file mode 100644 index e30a34c..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/makegrid.js +++ /dev/null @@ -1,2324 +0,0 @@ -/* global firstDayOfCalendar */ // templates/javascript/variables.twig - -/** - * Create advanced table (resize, reorder, and show/hide columns; and also grid editing). - * This function is designed mainly for table DOM generated from browsing a table in the database. - * For using this function in other table DOM, you may need to: - * - add "draggable" class in the table header , in order to make it resizable, sortable or hidable - * - have at least one non-"draggable" header in the table DOM for placing column visibility drop-down arrow - * - pass the value "false" for the parameter "enableGridEdit" - * - adjust other parameter value, to select which features that will be enabled - * - * @param t the table DOM element - * @param enableResize Optional, if false, column resizing feature will be disabled - * @param enableReorder Optional, if false, column reordering feature will be disabled - * @param enableVisib Optional, if false, show/hide column feature will be disabled - * @param enableGridEdit Optional, if false, grid editing feature will be disabled - */ -// eslint-disable-next-line no-unused-vars -var makeGrid = function (t, enableResize, enableReorder, enableVisib, enableGridEdit) { - var isResizeEnabled = enableResize === undefined ? true : enableResize; - var isReorderEnabled = enableReorder === undefined ? true : enableReorder; - var isVisibEnabled = enableVisib === undefined ? true : enableVisib; - var isGridEditEnabled = enableGridEdit === undefined ? true : enableGridEdit; - - var g = { - /** ********* - * Constant - ***********/ - minColWidth: 15, - - - /** ********* - * Variables, assigned with default value, changed later - ***********/ - actionSpan: 5, // number of colspan in Actions header in a table - tableCreateTime: null, // table creation time, used for saving column order and visibility to server, only available in "Browse tab" - - // Column reordering variables - colOrder: [], // array of column order - - // Column visibility variables - colVisib: [], // array of column visibility - showAllColText: '', // string, text for "show all" button under column visibility list - visibleHeadersCount: 0, // number of visible data headers - - // Table hint variables - reorderHint: '', // string, hint for column reordering - sortHint: '', // string, hint for column sorting - markHint: '', // string, hint for column marking - copyHint: '', // string, hint for copy column name - showReorderHint: false, - showSortHint: false, - showMarkHint: false, - - // Grid editing - isCellEditActive: false, // true if current focus is in edit cell - isEditCellTextEditable: false, // true if current edit cell is editable in the text input box (not textarea) - currentEditCell: null, // reference to that currently being edited - cellEditHint: '', // hint shown when doing grid edit - gotoLinkText: '', // "Go to link" text - wasEditedCellNull: false, // true if last value of the edited cell was NULL - maxTruncatedLen: 0, // number of characters that can be displayed in a cell - saveCellsAtOnce: false, // $cfg[saveCellsAtOnce] - isCellEdited: false, // true if at least one cell has been edited - saveCellWarning: '', // string, warning text when user want to leave a page with unsaved edited data - lastXHR : null, // last XHR object used in AJAX request - isSaving: false, // true when currently saving edited data, used to handle double posting caused by pressing ENTER in grid edit text box in Chrome browser - alertNonUnique: '', // string, alert shown when saving edited nonunique table - - // Common hidden inputs - token: null, - server: null, - db: null, - table: null, - - - /** ********** - * Functions - ************/ - - /** - * Start to resize column. Called when clicking on column separator. - * - * @param e event - * @param obj dragged div object - */ - dragStartRsz: function (e, obj) { - var n = $(g.cRsz).find('div').index(obj); // get the index of separator (i.e., column index) - $(obj).addClass('colborder_active'); - g.colRsz = { - x0: e.pageX, - n: n, - obj: obj, - objLeft: $(obj).position().left, - objWidth: $(g.t).find('th.draggable:visible').eq(n).find('span').outerWidth() - }; - // eslint-disable-next-line compat/compat - $(document.body).css('cursor', 'col-resize').noSelect(); - if (g.isCellEditActive) { - g.hideEditCell(); - } - }, - - /** - * Start to reorder column. Called when clicking on table header. - * - * @param e event - * @param obj table header object - */ - dragStartReorder: function (e, obj) { - // prepare the cCpy (column copy) and cPointer (column pointer) from the dragged column - $(g.cCpy).text($(obj).text()); - var objPos = $(obj).position(); - $(g.cCpy).css({ - top: objPos.top + 20, - left: objPos.left, - height: $(obj).height(), - width: $(obj).width() - }); - $(g.cPointer).css({ - top: objPos.top - }); - - // get the column index, zero-based - var n = g.getHeaderIdx(obj); - - g.colReorder = { - x0: e.pageX, - y0: e.pageY, - n: n, - newn: n, - obj: obj, - objTop: objPos.top, - objLeft: objPos.left - }; - - // eslint-disable-next-line compat/compat - $(document.body).css('cursor', 'move').noSelect(); - if (g.isCellEditActive) { - g.hideEditCell(); - } - }, - - /** - * Handle mousemove event when dragging. - * - * @param e event - */ - dragMove: function (e) { - var dx; - if (g.colRsz) { - dx = e.pageX - g.colRsz.x0; - if (g.colRsz.objWidth + dx > g.minColWidth) { - $(g.colRsz.obj).css('left', g.colRsz.objLeft + dx + 'px'); - } - } else if (g.colReorder) { - // dragged column animation - dx = e.pageX - g.colReorder.x0; - $(g.cCpy) - .css('left', g.colReorder.objLeft + dx) - .show(); - - // pointer animation - var hoveredCol = g.getHoveredCol(e); - if (hoveredCol) { - var newn = g.getHeaderIdx(hoveredCol); - g.colReorder.newn = newn; - if (newn !== g.colReorder.n) { - // show the column pointer in the right place - var colPos = $(hoveredCol).position(); - var newleft = newn < g.colReorder.n ? - colPos.left : - colPos.left + $(hoveredCol).outerWidth(); - $(g.cPointer) - .css({ - left: newleft, - visibility: 'visible' - }); - } else { - // no movement to other column, hide the column pointer - $(g.cPointer).css('visibility', 'hidden'); - } - } - } - }, - - /** - * Stop the dragging action. - * - * @param e event - */ - dragEnd: function (e) { - if (g.colRsz) { - var dx = e.pageX - g.colRsz.x0; - var nw = g.colRsz.objWidth + dx; - if (nw < g.minColWidth) { - nw = g.minColWidth; - } - var n = g.colRsz.n; - // do the resizing - g.resize(n, nw); - - g.reposRsz(); - g.reposDrop(); - g.colRsz = false; - $(g.cRsz).find('div').removeClass('colborder_active'); - } else if (g.colReorder) { - // shift columns - if (g.colReorder.newn !== g.colReorder.n) { - g.shiftCol(g.colReorder.n, g.colReorder.newn); - // assign new position - var objPos = $(g.colReorder.obj).position(); - g.colReorder.objTop = objPos.top; - g.colReorder.objLeft = objPos.left; - g.colReorder.n = g.colReorder.newn; - // send request to server to remember the column order - if (g.tableCreateTime) { - g.sendColPrefs(); - } - g.refreshRestoreButton(); - } - - // animate new column position - $(g.cCpy).stop(true, true) - .animate({ - top: g.colReorder.objTop, - left: g.colReorder.objLeft - }, 'fast') - .fadeOut(); - $(g.cPointer).css('visibility', 'hidden'); - - g.colReorder = false; - } - // eslint-disable-next-line compat/compat - $(document.body).css('cursor', 'inherit').noSelect(false); - }, - - /** - * Resize column n to new width "nw" - * - * @param n zero-based column index - * @param nw new width of the column in pixel - */ - resize: function (n, nw) { - $(g.t).find('tr').each(function () { - $(this).find('th.draggable:visible').eq(n).find('span') - .add($(this).find('td:visible').eq(g.actionSpan + n).find('span')) - .css('width', nw); - }); - }, - - /** - * Reposition column resize bars. - */ - reposRsz: function () { - $(g.cRsz).find('div').hide(); - var $firstRowCols = $(g.t).find('tr').first().find('th.draggable:visible'); - var $resizeHandles = $(g.cRsz).find('div').removeClass('condition'); - $(g.t).find('table.pma_table').find('thead th').first().removeClass('before-condition'); - for (var n = 0, l = $firstRowCols.length; n < l; n++) { - var $col = $($firstRowCols[n]); - var colWidth; - if (navigator.userAgent.toLowerCase().indexOf('safari') !== -1) { - colWidth = $col.outerWidth(); - } else { - colWidth = $col.outerWidth(true); - } - $($resizeHandles[n]).css('left', $col.position().left + colWidth) - .show(); - if ($col.hasClass('condition')) { - $($resizeHandles[n]).addClass('condition'); - if (n > 0) { - $($resizeHandles[n - 1]).addClass('condition'); - } - } - } - if ($($resizeHandles[0]).hasClass('condition')) { - $(g.t).find('thead th').first().addClass('before-condition'); - } - $(g.cRsz).css('height', $(g.t).height()); - }, - - /** - * Shift column from index oldn to newn. - * - * @param oldn old zero-based column index - * @param newn new zero-based column index - */ - shiftCol: function (oldn, newn) { - $(g.t).find('tr').each(function () { - if (newn < oldn) { - $(this).find('th.draggable').eq(newn) - .add($(this).find('td').eq(g.actionSpan + newn)) - .before($(this).find('th.draggable').eq(oldn) - .add($(this).find('td').eq(g.actionSpan + oldn))); - } else { - $(this).find('th.draggable').eq(newn) - .add($(this).find('td').eq(g.actionSpan + newn)) - .after($(this).find('th.draggable').eq(oldn) - .add($(this).find('td').eq(g.actionSpan + oldn))); - } - }); - // reposition the column resize bars - g.reposRsz(); - - // adjust the column visibility list - if (newn < oldn) { - $(g.cList).find('.lDiv div').eq(newn) - .before($(g.cList).find('.lDiv div').eq(oldn)); - } else { - $(g.cList).find('.lDiv div').eq(newn) - .after($(g.cList).find('.lDiv div').eq(oldn)); - } - // adjust the colOrder - var tmp = g.colOrder[oldn]; - g.colOrder.splice(oldn, 1); - g.colOrder.splice(newn, 0, tmp); - // adjust the colVisib - if (g.colVisib.length > 0) { - tmp = g.colVisib[oldn]; - g.colVisib.splice(oldn, 1); - g.colVisib.splice(newn, 0, tmp); - } - }, - - /** - * Find currently hovered table column's header (excluding actions column). - * - * @param e event - * @return {object|undefined} the hovered column's th object or undefined if no hovered column found. - */ - getHoveredCol: function (e) { - var hoveredCol; - var $headers = $(g.t).find('th.draggable:visible'); - $headers.each(function () { - var left = $(this).offset().left; - var right = left + $(this).outerWidth(); - if (left <= e.pageX && e.pageX <= right) { - hoveredCol = this; - } - }); - return hoveredCol; - }, - - /** - * Get a zero-based index from a tag in a table. - * - * @param obj table header object - * @return {number} zero-based index of the specified table header in the set of table headers (visible or not) - */ - getHeaderIdx: function (obj) { - return $(obj).parents('tr').find('th.draggable').index(obj); - }, - - /** - * Reposition the columns back to normal order. - */ - restoreColOrder: function () { - // use insertion sort, since we already have shiftCol function - for (var i = 1; i < g.colOrder.length; i++) { - var x = g.colOrder[i]; - var j = i - 1; - while (j >= 0 && x < g.colOrder[j]) { - j--; - } - if (j !== i - 1) { - g.shiftCol(i, j + 1); - } - } - if (g.tableCreateTime) { - // send request to server to remember the column order - g.sendColPrefs(); - } - g.refreshRestoreButton(); - }, - - /** - * Send column preferences (column order and visibility) to the server. - */ - sendColPrefs: function () { - if ($(g.t).is('.ajax')) { // only send preferences if ajax class - if (typeof g.db !== 'string' && typeof g.table !== 'string') { - // The server has nothing to do with it - // Issue: https://github.com/phpmyadmin/phpmyadmin/issues/15658 - return; - } - var postParams = { - 'ajax_request': true, - 'db': g.db, - 'table': g.table, - 'token': g.token, - 'server': g.server, - 'table_create_time': g.tableCreateTime - }; - if (g.colOrder.length > 0) { - $.extend(postParams, { 'col_order': g.colOrder.toString() }); - } - if (g.colVisib.length > 0) { - $.extend(postParams, { 'col_visib': g.colVisib.toString() }); - } - $.post('index.php?route=/sql/set-column-preferences', postParams, function (data) { - if (data.success !== true) { - var $tempDiv = $(document.createElement('div')); - $tempDiv.html(data.error); - $tempDiv.addClass('alert alert-danger'); - Functions.ajaxShowMessage($tempDiv, false); - } - }); - } - }, - - /** - * Refresh restore button state. - * Make restore button disabled if the table is similar with initial state. - */ - refreshRestoreButton: function () { - // check if table state is as initial state - var isInitial = true; - for (var i = 0; i < g.colOrder.length; i++) { - if (g.colOrder[i] !== i) { - isInitial = false; - break; - } - } - // check if only one visible column left - var isOneColumn = g.visibleHeadersCount === 1; - // enable or disable restore button - if (isInitial || isOneColumn) { - $(g.o).find('div.restore_column').hide(); - } else { - $(g.o).find('div.restore_column').show(); - } - }, - - /** - * Update current hint using the boolean values (showReorderHint, showSortHint, etc.). - * - * @return {string} - * - */ - updateHint: function () { - var text = ''; - if (!g.colRsz && !g.colReorder) { // if not resizing or dragging - if (g.visibleHeadersCount > 1) { - g.showReorderHint = true; - } - if ($(t).find('th.marker').length > 0) { - g.showMarkHint = true; - } - if (g.showSortHint && g.sortHint) { - text += text.length > 0 ? '
            ' : ''; - text += '- ' + g.sortHint; - } - if (g.showMultiSortHint && g.strMultiSortHint) { - text += text.length > 0 ? '
            ' : ''; - text += '- ' + g.strMultiSortHint; - } - if (g.showMarkHint && - g.markHint && - ! g.showSortHint && // we do not show mark hint, when sort hint is shown - g.showReorderHint && - g.reorderHint - ) { - text += text.length > 0 ? '
            ' : ''; - text += '- ' + g.reorderHint; - text += text.length > 0 ? '
            ' : ''; - text += '- ' + g.markHint; - text += text.length > 0 ? '
            ' : ''; - text += '- ' + g.copyHint; - } - } - return text; - }, - - /** - * Toggle column's visibility. - * After calling this function and it returns true, afterToggleCol() must be called. - * - * @param {number} n - * - * @return {boolean} True if the column is toggled successfully. - */ - toggleCol: function (n) { - if (g.colVisib[n]) { - // can hide if more than one column is visible - if (g.visibleHeadersCount > 1) { - $(g.t).find('tr').each(function () { - $(this).find('th.draggable').eq(n) - .add($(this).find('td').eq(g.actionSpan + n)) - .hide(); - }); - g.colVisib[n] = 0; - $(g.cList).find('.lDiv div').eq(n).find('input').prop('checked', false); - } else { - // cannot hide, force the checkbox to stay checked - $(g.cList).find('.lDiv div').eq(n).find('input').prop('checked', true); - return false; - } - } else { // column n is not visible - $(g.t).find('tr').each(function () { - $(this).find('th.draggable').eq(n) - .add($(this).find('td').eq(g.actionSpan + n)) - .show(); - }); - g.colVisib[n] = 1; - $(g.cList).find('.lDiv div').eq(n).find('input').prop('checked', true); - } - return true; - }, - - /** - * This must be called if toggleCol() returns is true. - * - * This function is separated from toggleCol because, sometimes, we want to toggle - * some columns together at one time and do just one adjustment after it, e.g. in showAllColumns(). - */ - afterToggleCol: function () { - // some adjustments after hiding column - g.reposRsz(); - g.reposDrop(); - g.sendColPrefs(); - - // check visible first row headers count - g.visibleHeadersCount = $(g.t).find('tr').first().find('th.draggable:visible').length; - g.refreshRestoreButton(); - - // Display minimum of one column - disable checkbox for hiding last column - if (g.visibleHeadersCount <= 1) { - $(g.cList).find('.lDiv div').each(function () { - $(this).find('input:checkbox:checked').prop('disabled', true); - }); - } else { - // Remove disabled property if showing more than one column - $(g.cList).find('.lDiv div').each(function () { - $(this).find('input:checkbox:disabled').prop('disabled', false); - }); - } - }, - - /** - * Show columns' visibility list. - * - * @param obj The drop down arrow of column visibility list - */ - showColList: function (obj) { - // only show when not resizing or reordering - if (!g.colRsz && !g.colReorder) { - var pos = $(obj).position(); - $(g.cList).css({ - top: pos.top + $(obj).outerHeight(true) - }) - .show(); - $(obj).addClass('coldrop-hover'); - } - }, - - /** - * Hide columns' visibility list. - */ - hideColList: function () { - $(g.cList).hide(); - $(g.cDrop).find('.coldrop-hover').removeClass('coldrop-hover'); - }, - - /** - * Reposition the column visibility drop-down arrow. - */ - reposDrop: function () { - var $th = $(t).find('th:not(.draggable)'); - for (var i = 0; i < $th.length; i++) { - var $cd = $(g.cDrop).find('div').eq(i); // column drop-down arrow - var pos = $($th[i]).position(); - $cd.css({ - left: pos.left + $($th[i]).width() - $cd.width(), - top: pos.top - }); - } - }, - - /** - * Show all hidden columns. - */ - showAllColumns: function () { - for (var i = 0; i < g.colVisib.length; i++) { - if (!g.colVisib[i]) { - g.toggleCol(i); - } - } - g.afterToggleCol(); - }, - - /** - * Show edit cell, if it can be shown - * - * @param cell element to be edited - */ - showEditCell: function (cell) { - if ($(cell).is('.grid_edit') && - !g.colRsz && !g.colReorder) { - if (!g.isCellEditActive) { - var $cell = $(cell); - - if ('string' === $cell.attr('data-type') || - 'blob' === $cell.attr('data-type') || - 'json' === $cell.attr('data-type') - ) { - g.cEdit = g.cEditTextarea; - } else { - g.cEdit = g.cEditStd; - } - - // remove all edit area and hide it - $(g.cEdit).find('.edit_area').empty().hide(); - // reposition the cEdit element - $(g.cEdit).css({ - top: $cell.position().top, - left: $cell.position().left - }) - .show() - .find('.edit_box') - .css({ - width: $cell.outerWidth(), - height: $cell.outerHeight() - }); - // fill the cell edit with text from - var value = Functions.getCellValue(cell); - if ($cell.attr('data-type') === 'json' && $cell.is('.truncated') === false) { - try { - value = JSON.stringify(JSON.parse(value), null, 4); - } catch (e) { - // Show as is - } - } - $(g.cEdit).find('.edit_box').val(value); - - g.currentEditCell = cell; - $(g.cEdit).find('.edit_box').trigger('focus'); - moveCursorToEnd($(g.cEdit).find('.edit_box')); - $(g.cEdit).find('*').prop('disabled', false); - } - } - - function moveCursorToEnd (input) { - var originalValue = input.val(); - var originallength = originalValue.length; - input.val(''); - input.trigger('blur').trigger('focus').val(originalValue); - input[0].setSelectionRange(originallength, originallength); - } - }, - - /** - * Remove edit cell and the edit area, if it is shown. - * - * @param force Optional, force to hide edit cell without saving edited field. - * @param data Optional, data from the POST AJAX request to save the edited field - * or just specify "true", if we want to replace the edited field with the new value. - * @param field Optional, the edited . If not specified, the function will - * use currently edited from g.currentEditCell. - * @param options Optional, this object contains a boolean named move (true, if called from move* functions) - * and a to which the grid_edit should move - */ - hideEditCell: function (force, data, field, options) { - if (g.isCellEditActive && !force) { - // cell is being edited, save or post the edited data - if (options !== undefined) { - g.saveOrPostEditedCell(options); - } else { - g.saveOrPostEditedCell(); - } - return; - } - - // cancel any previous request - if (g.lastXHR !== null) { - g.lastXHR.abort(); - g.lastXHR = null; - } - - if (data) { - if (g.currentEditCell) { // save value of currently edited cell - // replace current edited field with the new value - var $thisField = $(g.currentEditCell); - var isNull = $thisField.data('value') === null; - if (isNull) { - $thisField.find('span').html('NULL'); - $thisField.addClass('null'); - } else { - $thisField.removeClass('null'); - var value = data.isNeedToRecheck - ? data.truncatableFieldValue - : $thisField.data('value'); - - // Truncates the text. - $thisField.removeClass('truncated'); - if (CommonParams.get('pftext') === 'P' && value.length > g.maxTruncatedLen) { - $thisField.addClass('truncated'); - value = value.substring(0, g.maxTruncatedLen) + '...'; - } - - // Add
            before carriage return. - var newHtml = Functions.escapeHtml(value); - newHtml = newHtml.replace(/\n/g, '
            \n'); - - var decimals = parseInt($thisField.attr('data-decimals')); - - // remove decimal places if column type not supported - if ((decimals === 0) && ($thisField.attr('data-type').indexOf('time') !== -1)) { - newHtml = newHtml.substring(0, newHtml.indexOf('.')); - } - - // remove additional decimal places - if ((decimals > 0) && ($thisField.attr('data-type').indexOf('time') !== -1)) { - newHtml = newHtml.substring(0, newHtml.length - (6 - decimals)); - } - - var selector = 'span'; - if ($thisField.hasClass('hex') && $thisField.find('a').length) { - selector = 'a'; - } - - // Updates the code keeping highlighting (if any). - var $target = $thisField.find(selector); - if (!Functions.updateCode($target, newHtml, value)) { - $target.html(newHtml); - } - } - if ($thisField.is('.bit')) { - $thisField.find('span').text($thisField.data('value')); - } - } - if (data.transformations !== undefined) { - $.each(data.transformations, function (cellIndex, value) { - var $thisField = $(g.t).find('.to_be_saved').eq(cellIndex); - $thisField.find('span').html(value); - }); - } - if (data.relations !== undefined) { - $.each(data.relations, function (cellIndex, value) { - var $thisField = $(g.t).find('.to_be_saved').eq(cellIndex); - $thisField.find('span').html(value); - }); - } - - // refresh the grid - g.reposRsz(); - g.reposDrop(); - } - - // hide the cell editing area - $(g.cEdit).hide(); - $(g.cEdit).find('.edit_box').trigger('blur'); - g.isCellEditActive = false; - g.currentEditCell = null; - // destroy datepicker in edit area, if exist - var $dp = $(g.cEdit).find('.hasDatepicker'); - if ($dp.length > 0) { - // eslint-disable-next-line no-underscore-dangle - $(document).on('mousedown', $.datepicker._checkExternalClick); - $dp.datepicker('destroy'); - // change the cursor in edit box back to normal - // (the cursor become a hand pointer when we add datepicker) - $(g.cEdit).find('.edit_box').css('cursor', 'inherit'); - } - }, - - /** - * Show drop-down edit area when edit cell is focused. - */ - showEditArea: function () { - if (!g.isCellEditActive) { // make sure the edit area has not been shown - g.isCellEditActive = true; - g.isEditCellTextEditable = false; - /** - * @var $td current edited cell - */ - var $td = $(g.currentEditCell); - /** - * @var $editArea the editing area - */ - var $editArea = $(g.cEdit).find('.edit_area'); - /** - * @var whereClause WHERE clause for the edited cell - */ - var whereClause = $td.parent('tr').find('.where_clause').val(); - /** - * @var fieldName String containing the name of this field. - * @see Sql.getFieldName() - */ - var fieldName = Sql.getFieldName($(t), $td); - /** - * @var relationCurrValue String current value of the field (for fields that are foreign keyed). - */ - var relationCurrValue = $td.text(); - /** - * @var relationKeyOrDisplayColumn String relational key if in 'Relational display column' mode, - * relational display column if in 'Relational key' mode (for fields that are foreign keyed). - */ - var relationKeyOrDisplayColumn = $td.find('a').attr('title'); - /** - * @var currValue String current value of the field (for fields that are of type enum or set). - */ - var currValue = $td.find('span').text(); - - // empty all edit area, then rebuild it based on $td classes - $editArea.empty(); - - // remember this instead of testing more than once - var isNull = $td.is('.null'); - - // add goto link, if this cell contains a link - if ($td.find('a').length > 0) { - var gotoLink = document.createElement('div'); - gotoLink.className = 'goto_link'; - $(gotoLink).append(g.gotoLinkText + ' ').append($td.find('a').clone()); - $editArea.append(gotoLink); - } - - g.wasEditedCellNull = false; - if ($td.is(':not(.not_null)')) { - // append a null checkbox - $editArea.append('
            '); - - var $checkbox = $editArea.find('.null_div input'); - // check if current is NULL - if (isNull) { - $checkbox.prop('checked', true); - g.wasEditedCellNull = true; - } - - // if the select/editor is changed un-check the 'checkbox_null__'. - if ($td.is('.enum, .set')) { - $editArea.on('change', 'select', function () { - $checkbox.prop('checked', false); - }); - } else if ($td.is('.relation')) { - $editArea.on('change', 'select', function () { - $checkbox.prop('checked', false); - }); - $editArea.on('click', '.browse_foreign', function () { - $checkbox.prop('checked', false); - }); - } else { - $(g.cEdit).on('keypress change paste', '.edit_box', function () { - $checkbox.prop('checked', false); - }); - // Capture ctrl+v (on IE and Chrome) - $(g.cEdit).on('keydown', '.edit_box', function (e) { - if (e.ctrlKey && e.which === 86) { - $checkbox.prop('checked', false); - } - }); - $editArea.on('keydown', 'textarea', function () { - $checkbox.prop('checked', false); - }); - } - // if some text is written in textbox automatically unmark the null checkbox and if it is emptied again mark the checkbox. - $(g.cEdit).find('.edit_box').on('input', function () { - if ($(g.cEdit).find('.edit_box').val() !== '') { - $checkbox.prop('checked', false); - } else { - $checkbox.prop('checked', true); - } - }); - // if null checkbox is clicked empty the corresponding select/editor. - $checkbox.on('click', function () { - if ($td.is('.enum')) { - $editArea.find('select').val(''); - } else if ($td.is('.set')) { - $editArea.find('select').find('option').each(function () { - var $option = $(this); - $option.prop('selected', false); - }); - } else if ($td.is('.relation')) { - // if the dropdown is there to select the foreign value - if ($editArea.find('select').length > 0) { - $editArea.find('select').val(''); - } - } else { - $editArea.find('textarea').val(''); - } - $(g.cEdit).find('.edit_box').val(''); - }); - } - - // reset the position of the edit_area div after closing datetime picker - $(g.cEdit).find('.edit_area').css({ 'top' :'0','position':'' }); - - var postParams; - if ($td.is('.relation')) { - // handle relations - $editArea.addClass('edit_area_loading'); - - // initialize the original data - $td.data('original_data', null); - - /** - * @var postParams Object containing parameters for the POST request - */ - postParams = { - 'ajax_request' : true, - 'server' : g.server, - 'db' : g.db, - 'table' : g.table, - 'column' : fieldName, - 'curr_value' : relationCurrValue, - 'relation_key_or_display_column' : relationKeyOrDisplayColumn - }; - - g.lastXHR = $.post('index.php?route=/sql/get-relational-values', postParams, function (data) { - g.lastXHR = null; - $editArea.removeClass('edit_area_loading'); - if ($(data.dropdown).is('select')) { - // save original_data - var value = $(data.dropdown).val(); - $td.data('original_data', value); - // update the text input field, in case where the "Relational display column" is checked - $(g.cEdit).find('.edit_box').val(value); - } - - $editArea.append(data.dropdown); - $editArea.append('
            ' + g.cellEditHint + '
            '); - - // for 'Browse foreign values' options, - // hide the value next to 'Browse foreign values' link - $editArea.find('span.curr_value').hide(); - // handle update for new values selected from new window - $editArea.find('span.curr_value').on('change', function () { - $(g.cEdit).find('.edit_box').val($(this).text()); - }); - }); // end $.post() - - $editArea.show(); - $editArea.on('change', 'select', function () { - $(g.cEdit).find('.edit_box').val($(this).val()); - }); - g.isEditCellTextEditable = true; - } else if ($td.is('.enum')) { - // handle enum fields - $editArea.addClass('edit_area_loading'); - - /** - * @var postParams Object containing parameters for the POST request - */ - postParams = { - 'ajax_request' : true, - 'server' : g.server, - 'db' : g.db, - 'table' : g.table, - 'column' : fieldName, - 'curr_value' : currValue - }; - g.lastXHR = $.post('index.php?route=/sql/get-enum-values', postParams, function (data) { - g.lastXHR = null; - if (typeof data === 'object' && data.success === false) { - Functions.ajaxShowMessage(data.error, undefined, 'error'); - return; - } - $editArea.removeClass('edit_area_loading'); - $editArea.append(data.dropdown); - $editArea.append('
            ' + g.cellEditHint + '
            '); - }); // end $.post() - - $editArea.show(); - $editArea.on('change', 'select', function () { - $(g.cEdit).find('.edit_box').val($(this).val()); - }); - } else if ($td.is('.set')) { - // handle set fields - $editArea.addClass('edit_area_loading'); - - // if the data is truncated, get the full data - if ($td.is('.truncated')) { - postParams = { - 'ajax_request': true, - 'server': g.server, - 'db': g.db, - 'table': g.table, - 'column': fieldName, - 'curr_value': currValue, - 'get_full_values': true, - 'where_clause': whereClause - }; - } else { - postParams = { - 'ajax_request': true, - 'server': g.server, - 'db': g.db, - 'table': g.table, - 'column': fieldName, - 'curr_value': currValue - }; - } - - g.lastXHR = $.post('index.php?route=/sql/get-set-values', postParams, function (data) { - g.lastXHR = null; - if (typeof data === 'object' && data.success === false) { - Functions.ajaxShowMessage(data.error, undefined, 'error'); - return; - } - $editArea.removeClass('edit_area_loading'); - $editArea.append(data.select); - $td.data('original_data', $(data.select).val().join()); - $editArea.append('
            ' + g.cellEditHint + '
            '); - }); // end $.post() - - $editArea.show(); - $editArea.on('change', 'select', function () { - $(g.cEdit).find('.edit_box').val($(this).val()); - }); - } else if ($td.is('.truncated, .transformed')) { - if ($td.is('.to_be_saved')) { // cell has been edited - var value = $td.data('value'); - $(g.cEdit).find('.edit_box').val(value); - $editArea.append(''); - $editArea.find('textarea').val(value); - $editArea - .on('keyup', 'textarea', function () { - $(g.cEdit).find('.edit_box').val($(this).val()); - }); - $(g.cEdit).on('keyup', '.edit_box', function () { - $editArea.find('textarea').val($(this).val()); - }); - $editArea.append('
            ' + g.cellEditHint + '
            '); - } else { - // handle truncated/transformed values values - $editArea.addClass('edit_area_loading'); - - // initialize the original data - $td.data('original_data', null); - - /** - * @var sqlQuery String containing the SQL query used to retrieve value of truncated/transformed data - */ - var sqlQuery = 'SELECT `' + fieldName + '` FROM `' + g.table + '` WHERE ' + whereClause; - - // Make the Ajax call and get the data, wrap it and insert it - g.lastXHR = $.post('index.php?route=/sql', { - 'server' : g.server, - 'db' : g.db, - 'ajax_request' : true, - 'sql_query' : sqlQuery, - 'grid_edit' : true - }, function (data) { - g.lastXHR = null; - $editArea.removeClass('edit_area_loading'); - if (typeof data !== 'undefined' && data.success === true) { - if ($td.attr('data-type') === 'json') { - try { - data.value = JSON.stringify(JSON.parse(data.value), null, 4); - } catch (e) { - // Show as is - } - } - $td.data('original_data', data.value); - $(g.cEdit).find('.edit_box').val(data.value); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); // end $.post() - } - g.isEditCellTextEditable = true; - } else if ($td.is('.timefield, .datefield, .datetimefield, .timestampfield')) { - var $inputField = $(g.cEdit).find('.edit_box'); - - // remember current datetime value in $input_field, if it is not null - var datetimeValue = !isNull ? $inputField.val() : ''; - - var showMillisec = false; - var showMicrosec = false; - var timeFormat = 'HH:mm:ss'; - // check for decimal places of seconds - if (($td.attr('data-decimals') > 0) && ($td.attr('data-type').indexOf('time') !== -1)) { - if (datetimeValue && datetimeValue.indexOf('.') === false) { - datetimeValue += '.'; - } - if ($td.attr('data-decimals') > 3) { - showMillisec = true; - showMicrosec = true; - timeFormat = 'HH:mm:ss.lc'; - - if (datetimeValue) { - datetimeValue += '000000'; - datetimeValue = datetimeValue.substring(0, datetimeValue.indexOf('.') + 7); - $inputField.val(datetimeValue); - } - } else { - showMillisec = true; - timeFormat = 'HH:mm:ss.l'; - - if (datetimeValue) { - datetimeValue += '000'; - datetimeValue = datetimeValue.substring(0, datetimeValue.indexOf('.') + 4); - $inputField.val(datetimeValue); - } - } - } - - // add datetime picker - Functions.addDatepicker($inputField, $td.attr('data-type'), { - showMillisec: showMillisec, - showMicrosec: showMicrosec, - timeFormat: timeFormat, - firstDay: firstDayOfCalendar - }); - - $inputField.on('keyup', function (e) { - if (e.which === 13) { - // post on pressing "Enter" - e.preventDefault(); - e.stopPropagation(); - g.saveOrPostEditedCell(); - } else if (e.which !== 27) { - Functions.toggleDatepickerIfInvalid($td, $inputField); - } - }); - - $inputField.datepicker('show'); - Functions.toggleDatepickerIfInvalid($td, $inputField); - - // unbind the mousedown event to prevent the problem of - // datepicker getting closed, needs to be checked for any - // change in names when updating - // eslint-disable-next-line no-underscore-dangle - $(document).off('mousedown', $.datepicker._checkExternalClick); - - // move ui-datepicker-div inside cEdit div - var datepickerDiv = $('#ui-datepicker-div'); - datepickerDiv.css({ 'top': 0, 'left': 0, 'position': 'relative' }); - $(g.cEdit).append(datepickerDiv); - - // cancel any click on the datepicker element - $editArea.find('> *').on('click', function (e) { - e.stopPropagation(); - }); - - g.isEditCellTextEditable = true; - } else { - g.isEditCellTextEditable = true; - // only append edit area hint if there is a null checkbox - if ($editArea.children().length > 0) { - $editArea.append('
            ' + g.cellEditHint + '
            '); - } - } - if ($editArea.children().length > 0) { - $editArea.show(); - } - } - }, - - /** - * Post the content of edited cell. - * - * @param options Optional, this object contains a boolean named move (true, if called from move* functions) - * and a to which the grid_edit should move - */ - postEditedCell: function (options) { - if (g.isSaving) { - return; - } - g.isSaving = true; - /** - * @var relationFields Array containing the name/value pairs of relational fields - */ - var relationFields = {}; - /** - * @var relationalDisplay string 'K' if relational key, 'D' if relational display column - */ - var relationalDisplay = $(g.o).find('input[name=relational_display]:checked').val(); - /** - * @var transformFields Array containing the name/value pairs for transformed fields - */ - var transformFields = {}; - /** - * @var transformationFields Boolean, if there are any transformed fields in the edited cells - */ - var transformationFields = false; - /** - * @var fullSqlQuery String containing the complete SQL query to update this table - */ - var fullSqlQuery = ''; - /** - * @var relFieldsList String, url encoded representation of {@link relations_fields} - */ - var relFieldsList = ''; - /** - * @var transformFieldsList String, url encoded representation of {@link transformFields} - */ - var transformFieldsList = ''; - /** - * @var fullWhereClause Array containing where clause for updated fields - */ - var fullWhereClause = []; - /** - * @var isUnique Boolean, whether the rows in this table is unique or not - */ - var isUnique = $(g.t).find('td.edit_row_anchor').is('.nonunique') ? 0 : 1; - /** - * multi edit variables - */ - var multiEditFieldsName = []; - var multiEditFieldsType = []; - var multiEditFields = []; - var multiEditFieldsNull = []; - - // alert user if edited table is not unique - if (!isUnique) { - alert(g.alertNonUnique); - } - - // loop each edited row - $(g.t).find('td.to_be_saved').parents('tr').each(function () { - var $tr = $(this); - var whereClause = $tr.find('.where_clause').val(); - if (typeof whereClause === 'undefined') { - whereClause = ''; - } - fullWhereClause.push(whereClause); - var conditionArray = JSON.parse($tr.find('.condition_array').val()); - - /** - * multi edit variables, for current row - * @TODO array indices are still not correct, they should be md5 of field's name - */ - var fieldsName = []; - var fieldsType = []; - var fields = []; - var fieldsNull = []; - - // loop each edited cell in a row - $tr.find('.to_be_saved').each(function () { - /** - * @var $thisField Object referring to the td that is being edited - */ - var $thisField = $(this); - - /** - * @var fieldName String containing the name of this field. - * @see Sql.getFieldName() - */ - var fieldName = Sql.getFieldName($(g.t), $thisField); - - /** - * @var thisFieldParams Array temporary storage for the name/value of current field - */ - var thisFieldParams = {}; - - if ($thisField.is('.transformed')) { - transformationFields = true; - } - thisFieldParams[fieldName] = $thisField.data('value'); - - /** - * @var isNull String capturing whether 'checkbox_null__' is checked. - */ - var isNull = thisFieldParams[fieldName] === null; - - fieldsName.push(fieldName); - - if (isNull) { - fieldsNull.push('on'); - fields.push(''); - } else { - if ($thisField.is('.bit')) { - fieldsType.push('bit'); - } else if ($thisField.hasClass('hex')) { - fieldsType.push('hex'); - } - fieldsNull.push(''); - fields.push($thisField.data('value')); - - var cellIndex = $thisField.index('.to_be_saved'); - if ($thisField.is(':not(.relation, .enum, .set, .bit)')) { - if ($thisField.is('.transformed')) { - transformFields[cellIndex] = {}; - $.extend(transformFields[cellIndex], thisFieldParams); - } - } else if ($thisField.is('.relation')) { - relationFields[cellIndex] = {}; - $.extend(relationFields[cellIndex], thisFieldParams); - } - } - // check if edited field appears in WHERE clause - if (whereClause.indexOf(Sql.urlEncode(fieldName)) > -1) { - var fieldStr = '`' + g.table + '`.' + '`' + fieldName + '`'; - for (var field in conditionArray) { - if (field.indexOf(fieldStr) > -1) { - conditionArray[field] = isNull ? 'IS NULL' : '= \'' + thisFieldParams[fieldName].replace(/'/g, '\'\'') + '\''; - break; - } - } - } - }); // end of loop for every edited cells in a row - - // save new_clause - var newClause = ''; - for (var field in conditionArray) { - newClause += field + ' ' + conditionArray[field] + ' AND '; - } - newClause = newClause.substring(0, newClause.length - 5); // remove the last AND - $tr.data('new_clause', newClause); - // save condition_array - $tr.find('.condition_array').val(JSON.stringify(conditionArray)); - - multiEditFieldsName.push(fieldsName); - multiEditFieldsType.push(fieldsType); - multiEditFields.push(fields); - multiEditFieldsNull.push(fieldsNull); - }); // end of loop for every edited rows - - relFieldsList = $.param(relationFields); - transformFieldsList = $.param(transformFields); - - // Make the Ajax post after setting all parameters - /** - * @var postParams Object containing parameters for the POST request - */ - var postParams = { 'ajax_request' : true, - 'sql_query' : fullSqlQuery, - 'server' : g.server, - 'db' : g.db, - 'table' : g.table, - 'clause_is_unique' : isUnique, - 'where_clause' : fullWhereClause, - 'fields[multi_edit]' : multiEditFields, - 'fields_name[multi_edit]' : multiEditFieldsName, - 'fields_type[multi_edit]' : multiEditFieldsType, - 'fields_null[multi_edit]' : multiEditFieldsNull, - 'rel_fields_list' : relFieldsList, - 'do_transformations' : transformationFields, - 'transform_fields_list' : transformFieldsList, - 'relational_display' : relationalDisplay, - 'goto' : encodeURIComponent('index.php?route=/sql'), - 'submit_type' : 'save' - }; - - if (!g.saveCellsAtOnce) { - $(g.cEdit).find('*').prop('disabled', true); - $(g.cEdit).find('.edit_box').addClass('edit_box_posting'); - } else { - $(g.o).find('div.save_edited').addClass('saving_edited_data') - .find('input').prop('disabled', true); // disable the save button - } - - $.ajax({ - type: 'POST', - url: 'index.php?route=/table/replace', - data: postParams, - success: - function (data) { - g.isSaving = false; - if (!g.saveCellsAtOnce) { - $(g.cEdit).find('*').prop('disabled', false); - $(g.cEdit).find('.edit_box').removeClass('edit_box_posting'); - } else { - $(g.o).find('div.save_edited').removeClass('saving_edited_data') - .find('input').prop('disabled', false); // enable the save button back - } - if (typeof data !== 'undefined' && data.success === true) { - if (typeof options === 'undefined' || ! options.move) { - Functions.ajaxShowMessage(data.message); - } - - // update where_clause related data in each edited row - $(g.t).find('td.to_be_saved').parents('tr').each(function () { - var newClause = $(this).data('new_clause'); - var $whereClause = $(this).find('.where_clause'); - var oldClause = $whereClause.val(); - var decodedOldClause = oldClause; - var decodedNewClause = newClause; - - $whereClause.val(newClause); - // update Edit, Copy, and Delete links also - $(this).find('a').each(function () { - $(this).attr('href', $(this).attr('href').replace(oldClause, newClause)); - // update delete confirmation in Delete link - if ($(this).attr('href').indexOf('DELETE') > -1) { - $(this).removeAttr('onclick') - .off('click') - .on('click', function () { - return Functions.confirmLink(this, 'DELETE FROM `' + g.db + '`.`' + g.table + '` WHERE ' + - decodedNewClause + (isUnique ? '' : ' LIMIT 1')); - }); - } - }); - // update the multi edit checkboxes - $(this).find('input[type=checkbox]').each(function () { - var $checkbox = $(this); - var checkboxName = $checkbox.attr('name'); - var checkboxValue = $checkbox.val(); - - $checkbox.attr('name', checkboxName.replace(oldClause, newClause)); - $checkbox.val(checkboxValue.replace(decodedOldClause, decodedNewClause)); - }); - }); - // update the display of executed SQL query command - if (typeof data.sql_query !== 'undefined') { - // extract query box - var $resultQuery = $($.parseHTML(data.sql_query)); - var sqlOuter = $resultQuery.find('.sqlOuter').wrap('

            ').parent().html(); - var tools = $resultQuery.find('.tools').wrap('

            ').parent().html(); - // sqlOuter and tools will not be present if 'Show SQL queries' configuration is off - if (typeof sqlOuter !== 'undefined' && typeof tools !== 'undefined') { - $(g.o).find('.result_query').not($(g.o).find('.result_query').last()).remove(); - var $existingQuery = $(g.o).find('.result_query'); - // If two query box exists update query in second else add a second box - if ($existingQuery.find('div.sqlOuter').length > 1) { - $existingQuery.children().eq(3).remove(); - $existingQuery.children().eq(3).remove(); - $existingQuery.append(sqlOuter + tools); - } else { - $existingQuery.append(sqlOuter + tools); - } - Functions.highlightSql($existingQuery); - } - } - // hide and/or update the successfully saved cells - g.hideEditCell(true, data); - - // remove the "Save edited cells" button - $(g.o).find('div.save_edited').hide(); - // update saved fields - $(g.t).find('.to_be_saved') - .removeClass('to_be_saved') - .data('value', null) - .data('original_data', null); - - g.isCellEdited = false; - } else { - Functions.ajaxShowMessage(data.error, false); - if (!g.saveCellsAtOnce) { - $(g.t).find('.to_be_saved') - .removeClass('to_be_saved'); - } - } - } - }).done(function () { - if (options !== undefined && options.move) { - g.showEditCell(options.cell); - } - }); // end $.ajax() - }, - - /** - * Save edited cell, so it can be posted later. - * - * @return {bool} - */ - saveEditedCell: function () { - /** - * @var $thisField Object referring to the td that is being edited - */ - var $thisField = $(g.currentEditCell); - var $testElement = ''; // to test the presence of a element - - var needToPost = false; - - /** - * @var fieldName String containing the name of this field. - * @see Sql.getFieldName() - */ - var fieldName = Sql.getFieldName($(g.t), $thisField); - - /** - * @var thisFieldParams Array temporary storage for the name/value of current field - */ - var thisFieldParams = {}; - - /** - * @var isNull String capturing whether 'checkbox_null__' is checked. - */ - var isNull = $(g.cEdit).find('input:checkbox').is(':checked'); - - if ($(g.cEdit).find('.edit_area').is('.edit_area_loading')) { - // the edit area is still loading (retrieving cell data), no need to post - needToPost = false; - } else if (isNull) { - if (!g.wasEditedCellNull) { - thisFieldParams[fieldName] = null; - needToPost = true; - } - } else { - if ($thisField.is('.bit')) { - thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); - } else if ($thisField.is('.set')) { - $testElement = $(g.cEdit).find('select'); - thisFieldParams[fieldName] = $testElement.map(function () { - return $(this).val(); - }).get().join(','); - } else if ($thisField.is('.relation, .enum')) { - // for relation and enumeration, take the results from edit box value, - // because selected value from drop-down, new window or multiple - // selection list will always be updated to the edit box - thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); - } else if ($thisField.hasClass('hex')) { - if ($(g.cEdit).find('.edit_box').val().match(/^(0x)?[a-f0-9]*$/i) !== null) { - thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); - } else { - var hexError = '

            '; - Functions.ajaxShowMessage(hexError, false); - thisFieldParams[fieldName] = Functions.getCellValue(g.currentEditCell); - } - } else { - thisFieldParams[fieldName] = $(g.cEdit).find('.edit_box').val(); - } - if (g.wasEditedCellNull || thisFieldParams[fieldName] !== Functions.getCellValue(g.currentEditCell)) { - needToPost = true; - } - } - - if (needToPost) { - $(g.currentEditCell).addClass('to_be_saved') - .data('value', thisFieldParams[fieldName]); - if (g.saveCellsAtOnce) { - $(g.o).find('div.save_edited').show(); - } - g.isCellEdited = true; - } - - return needToPost; - }, - - /** - * Save or post currently edited cell, depending on the "saveCellsAtOnce" configuration. - * - * @param options Optional, this object contains a boolean named move (true, if called from move* functions) - * and a to which the grid_edit should move - */ - saveOrPostEditedCell: function (options) { - var saved = g.saveEditedCell(); - // Check if $cfg['SaveCellsAtOnce'] is false - if (!g.saveCellsAtOnce) { - // Check if need_to_post is true - if (saved) { - // Check if this function called from 'move' functions - if (options !== undefined && options.move) { - g.postEditedCell(options); - } else { - g.postEditedCell(); - } - // need_to_post is false - } else { - // Check if this function called from 'move' functions - if (options !== undefined && options.move) { - g.hideEditCell(true); - g.showEditCell(options.cell); - // NOT called from 'move' functions - } else { - g.hideEditCell(true); - } - } - // $cfg['SaveCellsAtOnce'] is true - } else { - // If need_to_post - if (saved) { - // If this function called from 'move' functions - if (options !== undefined && options.move) { - g.hideEditCell(true, true, false, options); - g.showEditCell(options.cell); - // NOT called from 'move' functions - } else { - g.hideEditCell(true, true); - } - } else { - // If this function called from 'move' functions - if (options !== undefined && options.move) { - g.hideEditCell(true, false, false, options); - g.showEditCell(options.cell); - // NOT called from 'move' functions - } else { - g.hideEditCell(true); - } - } - } - }, - - /** - * Initialize column resize feature. - */ - initColResize: function () { - // create column resizer div - g.cRsz = document.createElement('div'); - g.cRsz.className = 'cRsz'; - - // get data columns in the first row of the table - var $firstRowCols = $(g.t).find('tr').first().find('th.draggable'); - - // create column borders - $firstRowCols.each(function () { - var cb = document.createElement('div'); // column border - $(cb).addClass('colborder') - .on('mousedown', function (e) { - g.dragStartRsz(e, this); - }); - $(g.cRsz).append(cb); - }); - g.reposRsz(); - - // attach to global div - $(g.gDiv).prepend(g.cRsz); - }, - - /** - * Initialize column reordering feature. - */ - initColReorder: function () { - g.cCpy = document.createElement('div'); // column copy, to store copy of dragged column header - g.cPointer = document.createElement('div'); // column pointer, used when reordering column - - // adjust g.cCpy - g.cCpy.className = 'cCpy'; - $(g.cCpy).hide(); - - // adjust g.cPointer - g.cPointer.className = 'cPointer'; - $(g.cPointer).css('visibility', 'hidden'); // set visibility to hidden instead of calling hide() to force browsers to cache the image in cPointer class - - // assign column reordering hint - g.reorderHint = Messages.strColOrderHint; - - // get data columns in the first row of the table - var $firstRowCols = $(g.t).find('tr').first().find('th.draggable'); - - // initialize column order - var $colOrder = $(g.o).find('.col_order'); // check if column order is passed from PHP - var i; - if ($colOrder.length > 0) { - g.colOrder = $colOrder.val().split(','); - for (i = 0; i < g.colOrder.length; i++) { - g.colOrder[i] = parseInt(g.colOrder[i], 10); - } - } else { - g.colOrder = []; - for (i = 0; i < $firstRowCols.length; i++) { - g.colOrder.push(i); - } - } - - // register events - $(g.t).find('th.draggable') - .on('mousedown', function (e) { - $(g.o).addClass('turnOffSelect'); - if (g.visibleHeadersCount > 1) { - g.dragStartReorder(e, this); - } - }) - .on('mouseenter', function () { - if (g.visibleHeadersCount > 1) { - $(this).css('cursor', 'move'); - } else { - $(this).css('cursor', 'inherit'); - } - }) - .on('mouseleave', function () { - g.showReorderHint = false; - $(this).uiTooltip('option', { - content: g.updateHint() - }); - }) - .on('dblclick', function (e) { - e.preventDefault(); - var res = Functions.copyToClipboard($(this).data('column')); - if (res) { - Functions.ajaxShowMessage(Messages.strCopyColumnSuccess, false, 'success'); - } else { - Functions.ajaxShowMessage(Messages.strCopyColumnFailure, false, 'error'); - } - }); - $(g.t).find('th.draggable a') - .on('dblclick', function (e) { - e.stopPropagation(); - }); - // restore column order when the restore button is clicked - $(g.o).find('div.restore_column').on('click', function () { - g.restoreColOrder(); - }); - - // attach to global div - $(g.gDiv).append(g.cPointer); - $(g.gDiv).append(g.cCpy); - - // prevent default "dragstart" event when dragging a link - $(g.t).find('th a').on('dragstart', function () { - return false; - }); - - // refresh the restore column button state - g.refreshRestoreButton(); - }, - - /** - * Initialize column visibility feature. - */ - initColVisib: function () { - g.cDrop = document.createElement('div'); // column drop-down arrows - g.cList = document.createElement('div'); // column visibility list - - // adjust g.cDrop - g.cDrop.className = 'cDrop'; - - // adjust g.cList - g.cList.className = 'cList'; - $(g.cList).hide(); - - // assign column visibility related hints - g.showAllColText = Messages.strShowAllCol; - - // get data columns in the first row of the table - var $firstRowCols = $(g.t).find('tr').first().find('th.draggable'); - - var i; - // initialize column visibility - var $colVisib = $(g.o).find('.col_visib'); // check if column visibility is passed from PHP - if ($colVisib.length > 0) { - g.colVisib = $colVisib.val().split(','); - for (i = 0; i < g.colVisib.length; i++) { - g.colVisib[i] = parseInt(g.colVisib[i], 10); - } - } else { - g.colVisib = []; - for (i = 0; i < $firstRowCols.length; i++) { - g.colVisib.push(1); - } - } - - // make sure we have more than one column - if ($firstRowCols.length > 1) { - var $colVisibTh = $(g.t).find('th:not(.draggable)').slice(0, 1); - Functions.tooltip( - $colVisibTh, - 'th', - Messages.strColVisibHint - ); - - // create column visibility drop-down arrow(s) - $colVisibTh.each(function () { - var cd = document.createElement('div'); // column drop-down arrow - $(cd).addClass('coldrop') - .on('click', function () { - if (g.cList.style.display === 'none') { - g.showColList(this); - } else { - g.hideColList(); - } - }); - $(g.cDrop).append(cd); - }); - - // add column visibility control - g.cList.innerHTML = '
            '; - var $listDiv = $(g.cList).find('div'); - - var tempClick = function () { - if (g.toggleCol($(this).index())) { - g.afterToggleCol(); - } - }; - - for (i = 0; i < $firstRowCols.length; i++) { - var currHeader = $firstRowCols[i]; - var listElmt = document.createElement('div'); - $(listElmt).text($(currHeader).text()) - .prepend(''); - $listDiv.append(listElmt); - // add event on click - $(listElmt).on('click', tempClick); - } - // add "show all column" button - var showAll = document.createElement('div'); - $(showAll).addClass('showAllColBtn') - .text(g.showAllColText); - $(g.cList).append(showAll); - $(showAll).on('click', function () { - g.showAllColumns(); - }); - // prepend "show all column" button at top if the list is too long - if ($firstRowCols.length > 10) { - var clone = showAll.cloneNode(true); - $(g.cList).prepend(clone); - $(clone).on('click', function () { - g.showAllColumns(); - }); - } - } - - // hide column visibility list if we move outside the list - $(g.t).find('td, th.draggable').on('mouseenter', function () { - g.hideColList(); - }); - - // attach to first row first col of the grid - var thFirst = $(g.t).find('th.d-print-none'); - $(thFirst).append(g.cDrop); - $(thFirst).append(g.cList); - - // some adjustment - g.reposDrop(); - }, - - /** - * Move currently Editing Cell to Up - * - * @param e - * - */ - moveUp: function (e) { - e.preventDefault(); - var $thisField = $(g.currentEditCell); - var fieldName = Sql.getFieldName($(g.t), $thisField); - - var whereClause = $thisField.parents('tr').first().find('.where_clause').val(); - if (typeof whereClause === 'undefined') { - whereClause = ''; - } - var found = false; - var $prevRow; - - $thisField.parents('tr').first().parents('tbody').children().each(function () { - if ($(this).find('.where_clause').val() === whereClause) { - found = true; - } - if (!found) { - $prevRow = $(this); - } - }); - - var newCell; - - if (found && $prevRow) { - $prevRow.children('td').each(function () { - if (Sql.getFieldName($(g.t), $(this)) === fieldName) { - newCell = this; - } - }); - } - - if (newCell) { - g.hideEditCell(false, false, false, { move : true, cell : newCell }); - } - }, - - /** - * Move currently Editing Cell to Down - * - * @param e - * - */ - moveDown: function (e) { - e.preventDefault(); - - var $thisField = $(g.currentEditCell); - var fieldName = Sql.getFieldName($(g.t), $thisField); - - var whereClause = $thisField.parents('tr').first().find('.where_clause').val(); - if (typeof whereClause === 'undefined') { - whereClause = ''; - } - var found = false; - var $nextRow; - var j = 0; - var nextRowFound = false; - $thisField.parents('tr').first().parents('tbody').children().each(function () { - if ($(this).find('.where_clause').val() === whereClause) { - found = true; - } - if (found) { - if (j >= 1 && ! nextRowFound) { - $nextRow = $(this); - nextRowFound = true; - } else { - j++; - } - } - }); - - var newCell; - if (found && $nextRow) { - $nextRow.children('td').each(function () { - if (Sql.getFieldName($(g.t), $(this)) === fieldName) { - newCell = this; - } - }); - } - - if (newCell) { - g.hideEditCell(false, false, false, { move : true, cell : newCell }); - } - }, - - /** - * Move currently Editing Cell to Left - * - * @param e - * - */ - moveLeft: function (e) { - e.preventDefault(); - - var $thisField = $(g.currentEditCell); - var fieldName = Sql.getFieldName($(g.t), $thisField); - - var whereClause = $thisField.parents('tr').first().find('.where_clause').val(); - if (typeof whereClause === 'undefined') { - whereClause = ''; - } - var found = false; - var $foundRow; - $thisField.parents('tr').first().parents('tbody').children().each(function () { - if ($(this).find('.where_clause').val() === whereClause) { - found = true; - $foundRow = $(this); - } - }); - - var leftCell; - var cellFound = false; - if (found) { - $foundRow.children('td.grid_edit').each(function () { - if (Sql.getFieldName($(g.t), $(this)) === fieldName) { - cellFound = true; - } - if (!cellFound) { - leftCell = this; - } - }); - } - - if (leftCell) { - g.hideEditCell(false, false, false, { move : true, cell : leftCell }); - } - }, - - /** - * Move currently Editing Cell to Right - * - * @param e - * - */ - moveRight: function (e) { - e.preventDefault(); - - var $thisField = $(g.currentEditCell); - var fieldName = Sql.getFieldName($(g.t), $thisField); - - var whereClause = $thisField.parents('tr').first().find('.where_clause').val(); - if (typeof whereClause === 'undefined') { - whereClause = ''; - } - var found = false; - var $foundRow; - var j = 0; - $thisField.parents('tr').first().parents('tbody').children().each(function () { - if ($(this).find('.where_clause').val() === whereClause) { - found = true; - $foundRow = $(this); - } - }); - - var rightCell; - var cellFound = false; - var nextCellFound = false; - if (found) { - $foundRow.children('td.grid_edit').each(function () { - if (Sql.getFieldName($(g.t), $(this)) === fieldName) { - cellFound = true; - } - if (cellFound) { - if (j >= 1 && ! nextCellFound) { - rightCell = this; - nextCellFound = true; - } else { - j++; - } - } - }); - } - - if (rightCell) { - g.hideEditCell(false, false, false, { move : true, cell : rightCell }); - } - }, - - /** - * Initialize grid editing feature. - */ - initGridEdit: function () { - function startGridEditing (e, cell) { - if (g.isCellEditActive) { - g.saveOrPostEditedCell(); - } else { - g.showEditCell(cell); - } - e.stopPropagation(); - } - - function handleCtrlNavigation (e) { - if ((e.ctrlKey && e.which === 38) || (e.altKey && e.which === 38)) { - g.moveUp(e); - } else if ((e.ctrlKey && e.which === 40) || (e.altKey && e.which === 40)) { - g.moveDown(e); - } else if ((e.ctrlKey && e.which === 37) || (e.altKey && e.which === 37)) { - g.moveLeft(e); - } else if ((e.ctrlKey && e.which === 39) || (e.altKey && e.which === 39)) { - g.moveRight(e); - } - } - - // create cell edit wrapper element - g.cEditStd = document.createElement('div'); - g.cEdit = g.cEditStd; - g.cEditTextarea = document.createElement('div'); - - // adjust g.cEditStd - g.cEditStd.className = 'cEdit'; - $(g.cEditStd).html('
            '); - $(g.cEditStd).hide(); - - // adjust g.cEdit - g.cEditTextarea.className = 'cEdit'; - $(g.cEditTextarea).html('
            '); - $(g.cEditTextarea).hide(); - - // assign cell editing hint - g.cellEditHint = Messages.strCellEditHint; - g.saveCellWarning = Messages.strSaveCellWarning; - g.alertNonUnique = Messages.strAlertNonUnique; - g.gotoLinkText = Messages.strGoToLink; - - // initialize cell editing configuration - g.saveCellsAtOnce = $(g.o).find('.save_cells_at_once').val(); - g.maxTruncatedLen = CommonParams.get('LimitChars'); - - // register events - $(g.t).find('td.data.click1') - .on('click', function (e) { - startGridEditing(e, this); - // prevent default action when clicking on "link" in a table - if ($(e.target).is('.grid_edit a')) { - e.preventDefault(); - } - }); - - $(g.t).find('td.data.click2') - .on('click', function (e) { - var $cell = $(this); - // In the case of relational link, We want single click on the link - // to goto the link and double click to start grid-editing. - var $link = $(e.target); - if ($link.is('.grid_edit.relation a')) { - e.preventDefault(); - // get the click count and increase - var clicks = $cell.data('clicks'); - clicks = (typeof clicks === 'undefined') ? 1 : clicks + 1; - - if (clicks === 1) { - // if there are no previous clicks, - // start the single click timer - var timer = setTimeout(function () { - // temporarily remove ajax class so the page loader will not handle it, - // submit and then add it back - $link.removeClass('ajax'); - AJAX.requestHandler.call($link[0]); - $link.addClass('ajax'); - $cell.data('clicks', 0); - }, 700); - $cell.data('clicks', clicks); - $cell.data('timer', timer); - } else {// When double clicking a link, switch to edit mode - // this is a double click, cancel the single click timer - // and make the click count 0 - clearTimeout($cell.data('timer')); - $cell.data('clicks', 0); - // start grid-editing - startGridEditing(e, this); - } - } - }) - .on('dblclick', function (e) { - if ($(e.target).is('.grid_edit a')) { - e.preventDefault(); - } else { - startGridEditing(e, this); - } - }); - - $(g.cEditStd).on('keydown', 'input.edit_box, select', handleCtrlNavigation); - - $(g.cEditStd).find('.edit_box').on('focus', function () { - g.showEditArea(); - }); - $(g.cEditStd).on('keydown', '.edit_box, select', function (e) { - if (e.which === 13) { - // post on pressing "Enter" - e.preventDefault(); - g.saveOrPostEditedCell(); - } - }); - $(g.cEditStd).on('keydown', function (e) { - if (!g.isEditCellTextEditable) { - // prevent text editing - e.preventDefault(); - } - }); - - $(g.cEditTextarea).on('keydown', 'textarea.edit_box, select', handleCtrlNavigation); - - $(g.cEditTextarea).find('.edit_box').on('focus', function () { - g.showEditArea(); - }); - $(g.cEditTextarea).on('keydown', '.edit_box, select', function (e) { - if (e.which === 13 && !e.shiftKey) { - // post on pressing "Enter" - e.preventDefault(); - g.saveOrPostEditedCell(); - } - }); - $(g.cEditTextarea).on('keydown', function (e) { - if (!g.isEditCellTextEditable) { - // prevent text editing - e.preventDefault(); - } - }); - $('html').on('click', function (e) { - // hide edit cell if the click is not fromDat edit area - if ($(e.target).parents().index($(g.cEdit)) === -1 && - !$(e.target).parents('.ui-datepicker-header').length && - !$('.browse_foreign_modal.ui-dialog:visible').length && - !$(e.target).closest('.dismissable').length - ) { - g.hideEditCell(); - } - }).on('keydown', function (e) { - if (e.which === 27 && g.isCellEditActive) { - // cancel on pressing "Esc" - g.hideEditCell(true); - } - }); - $(g.o).find('div.save_edited').on('click', function () { - g.hideEditCell(); - g.postEditedCell(); - }); - $(window).on('beforeunload', function () { - if (g.isCellEdited) { - return g.saveCellWarning; - } - }); - - // attach to global div - $(g.gDiv).append(g.cEditStd); - $(g.gDiv).append(g.cEditTextarea); - - // add hint for grid editing feature when hovering "Edit" link in each table row - if (Messages.strGridEditFeatureHint !== undefined) { - Functions.tooltip( - $(g.t).find('.edit_row_anchor a'), - 'a', - Messages.strGridEditFeatureHint - ); - } - } - }; - - /** **************** - * Initialize grid - ******************/ - - // wrap all truncated data cells with span indicating the original length - // todo update the original length after a grid edit - $(t).find('td.data.truncated:not(:has(span))') - .wrapInner(function () { - return ''; - }); - - // wrap remaining cells, except actions cell, with span - $(t).find('th, td:not(:has(span))') - .wrapInner(''); - - // create grid elements - g.gDiv = document.createElement('div'); // create global div - - // initialize the table variable - g.t = t; - - // enclosing .sqlqueryresults div - g.o = $(t).parents('.sqlqueryresults'); - - // get data columns in the first row of the table - var $firstRowCols = $(t).find('tr').first().find('th.draggable'); - - // initialize visible headers count - g.visibleHeadersCount = $firstRowCols.filter(':visible').length; - - // assign first column (actions) span - if (! $(t).find('tr').first().find('th').first().hasClass('draggable')) { // action header exist - g.actionSpan = $(t).find('tr').first().find('th').first().prop('colspan'); - } else { - g.actionSpan = 0; - } - - // assign table create time - // table_create_time will only available if we are in "Browse" tab - g.tableCreateTime = $(g.o).find('.table_create_time').val(); - - // assign the hints - g.sortHint = Messages.strSortHint; - g.strMultiSortHint = Messages.strMultiSortHint; - g.markHint = Messages.strColMarkHint; - g.copyHint = Messages.strColNameCopyHint; - - // assign common hidden inputs - var $commonHiddenInputs = $(g.o).find('div.common_hidden_inputs'); - g.server = $commonHiddenInputs.find('input[name=server]').val(); - g.db = $commonHiddenInputs.find('input[name=db]').val(); - g.table = $commonHiddenInputs.find('input[name=table]').val(); - - // add table class - $(t).addClass('pma_table'); - - // add relative position to global div so that resize handlers are correctly positioned - $(g.gDiv).css('position', 'relative'); - - // link the global div - $(t).before(g.gDiv); - $(g.gDiv).append(t); - - // FEATURES - if (isResizeEnabled) { - g.initColResize(); - } - // disable reordering for result from EXPLAIN or SHOW syntax, which do not have a table navigation panel - if (isReorderEnabled && - $(g.o).find('table.navigation').length > 0) { - g.initColReorder(); - } - if (isVisibEnabled) { - g.initColVisib(); - } - // make sure we have the ajax class - if (isGridEditEnabled && - $(t).is('.ajax')) { - g.initGridEdit(); - } - - // create tooltip for each with draggable class - Functions.tooltip( - $(t).find('th.draggable'), - 'th', - g.updateHint() - ); - - // register events for hint tooltip (anchors inside draggable th) - $(t).find('th.draggable a') - .on('mouseenter', function () { - g.showSortHint = true; - g.showMultiSortHint = true; - $(t).find('th.draggable').uiTooltip('option', { - content: g.updateHint() - }); - }) - .on('mouseleave', function () { - g.showSortHint = false; - g.showMultiSortHint = false; - $(t).find('th.draggable').uiTooltip('option', { - content: g.updateHint() - }); - }); - - // register events for dragging-related feature - if (isResizeEnabled || isReorderEnabled) { - $(document).on('mousemove', function (e) { - g.dragMove(e); - }); - $(document).on('mouseup', function (e) { - $(g.o).removeClass('turnOffSelect'); - g.dragEnd(e); - }); - } - - // some adjustment - $(t).removeClass('data'); - $(g.gDiv).addClass('data'); -}; - -/** - * jQuery plugin to cancel selection in HTML code. - */ -(function ($) { - $.fn.noSelect = function (p) { // no select plugin by Paulo P.Marinas - var prevent = (p === null) ? true : p; - /* eslint-disable compat/compat */ - var isMsie = navigator.userAgent.indexOf('MSIE') > -1 || !!window.navigator.userAgent.match(/Trident.*rv:11\./); - var isFirefox = navigator.userAgent.indexOf('Firefox') > -1; - var isSafari = navigator.userAgent.indexOf('Safari') > -1; - var isOpera = navigator.userAgent.indexOf('Presto') > -1; - /* eslint-enable compat/compat */ - if (prevent) { - return this.each(function () { - if (isMsie || isSafari) { - $(this).on('selectstart', false); - } else if (isFirefox) { - $(this).css('MozUserSelect', 'none'); - $('body').trigger('focus'); - } else if (isOpera) { - $(this).on('mousedown', false); - } else { - $(this).attr('unselectable', 'on'); - } - }); - } else { - return this.each(function () { - if (isMsie || isSafari) { - $(this).off('selectstart'); - } else if (isFirefox) { - $(this).css('MozUserSelect', 'inherit'); - } else if (isOpera) { - $(this).off('mousedown'); - } else { - $(this).removeAttr('unselectable'); - } - }); - } - }; // end noSelect -}(jQuery)); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/normalization.js b/Sources/php_script/script/phpMyAdmin/js/src/normalization.js deleted file mode 100644 index a8c794b..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/normalization.js +++ /dev/null @@ -1,792 +0,0 @@ -/** - * @fileoverview events handling from normalization page - * @name normalization - * - * @requires jQuery - */ - -// eslint-disable-next-line no-unused-vars -/* global centralColumnList:writable */ // js/functions.js - -/** - * AJAX scripts for normalization - * - */ - -var normalizeto = '1nf'; -var primaryKey; -var dataParsed = null; - -function appendHtmlColumnsList () { - $.post( - 'index.php?route=/normalization', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'getColumns': true - }, - function (data) { - if (data.success === true) { - $('select[name=makeAtomic]').html(data.message); - } - } - ); -} - -function goTo3NFStep1 (newTables) { - var tables = newTables; - if (Object.keys(tables).length === 1) { - tables = [CommonParams.get('table')]; - } - $.post( - 'index.php?route=/normalization', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'server': CommonParams.get('server'), - 'tables': tables, - 'step': '3.1' - }, function (data) { - $('#page_content').find('h3').html(Messages.str3NFNormalization); - $('#mainContent').find('legend').html(data.legendText); - $('#mainContent').find('h4').html(data.headText); - $('#mainContent').find('p').html(data.subText); - $('#mainContent').find('#extra').html(data.extra); - $('#extra').find('form').each(function () { - var formId = $(this).attr('id'); - var colName = $(this).data('colname'); - $('#' + formId + ' input[value=\'' + colName + '\']').next().remove(); - $('#' + formId + ' input[value=\'' + colName + '\']').remove(); - }); - $('#mainContent').find('#newCols').html(''); - $('.tblFooters').html(''); - - if (data.subText !== '') { - $('') - .attr({ - type: 'button', - value: Messages.strDone, - class: 'btn btn-primary' - }) - .on('click', function () { - processDependencies('', true); - }) - .appendTo('.tblFooters'); - } - } - ); -} - -function goTo2NFStep1 () { - $.post( - 'index.php?route=/normalization', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'step': '2.1' - }, function (data) { - $('#page_content h3').html(Messages.str2NFNormalization); - $('#mainContent legend').html(data.legendText); - $('#mainContent h4').html(data.headText); - $('#mainContent p').html(data.subText); - $('#mainContent #extra').html(data.extra); - $('#mainContent #newCols').html(''); - if (data.subText !== '') { - $('') - .attr({ - type: 'submit', - value: Messages.strDone, - class: 'btn btn-primary' - }) - .on('click', function () { - processDependencies(data.primary_key); - }) - .appendTo('.tblFooters'); - } else { - if (normalizeto === '3nf') { - $('#mainContent #newCols').html(Messages.strToNextStep); - setTimeout(function () { - goTo3NFStep1([CommonParams.get('table')]); - }, 3000); - } - } - }); -} - -function goToFinish1NF () { - if (normalizeto !== '1nf') { - goTo2NFStep1(); - return true; - } - $('#mainContent legend').html(Messages.strEndStep); - $('#mainContent h4').html( - '

            ' + Functions.sprintf(Messages.strFinishMsg, Functions.escapeHtml(CommonParams.get('table'))) + '

            ' - ); - $('#mainContent p').html(''); - $('#mainContent #extra').html(''); - $('#mainContent #newCols').html(''); - $('.tblFooters').html(''); -} - -// eslint-disable-next-line no-unused-vars -function goToStep4 () { - $.post( - 'index.php?route=/normalization', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'step4': true - }, function (data) { - $('#mainContent legend').html(data.legendText); - $('#mainContent h4').html(data.headText); - $('#mainContent p').html(data.subText); - $('#mainContent #extra').html(data.extra); - $('#mainContent #newCols').html(''); - $('.tblFooters').html(''); - for (var pk in primaryKey) { - $('#extra input[value=\'' + Functions.escapeJsString(primaryKey[pk]) + '\']').attr('disabled','disabled'); - } - } - ); -} - -function goToStep3 () { - $.post( - 'index.php?route=/normalization', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'step3': true - }, function (data) { - $('#mainContent legend').html(data.legendText); - $('#mainContent h4').html(data.headText); - $('#mainContent p').html(data.subText); - $('#mainContent #extra').html(data.extra); - $('#mainContent #newCols').html(''); - $('.tblFooters').html(''); - primaryKey = JSON.parse(data.primary_key); - for (var pk in primaryKey) { - $('#extra input[value=\'' + Functions.escapeJsString(primaryKey[pk]) + '\']').attr('disabled','disabled'); - } - } - ); -} - -function goToStep2 (extra) { - $.post( - 'index.php?route=/normalization', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'step2': true - }, function (data) { - $('#mainContent legend').html(data.legendText); - $('#mainContent h4').html(data.headText); - $('#mainContent p').html(data.subText); - $('#mainContent #extra,#mainContent #newCols').html(''); - $('.tblFooters').html(''); - if (data.hasPrimaryKey === '1') { - if (extra === 'goToStep3') { - $('#mainContent h4').html(Messages.strPrimaryKeyAdded); - $('#mainContent p').html(Messages.strToNextStep); - } - if (extra === 'goToFinish1NF') { - goToFinish1NF(); - } else { - setTimeout(function () { - goToStep3(); - }, 3000); - } - } else { - // form to select columns to make primary - $('#mainContent #extra').html(data.extra); - } - } - ); -} - -function goTo2NFFinish (pd) { - var tables = {}; - for (var dependson in pd) { - tables[dependson] = $('#extra input[name="' + dependson + '"]').val(); - } - var datastring = { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'pd': JSON.stringify(pd), - 'newTablesName':JSON.stringify(tables), - 'createNewTables2NF':1 }; - $.ajax({ - type: 'POST', - url: 'index.php?route=/normalization', - data: datastring, - async:false, - success: function (data) { - if (data.success === true) { - if (data.queryError === false) { - if (normalizeto === '3nf') { - $('#pma_navigation_reload').trigger('click'); - goTo3NFStep1(tables); - return true; - } - $('#mainContent legend').html(data.legendText); - $('#mainContent h4').html(data.headText); - $('#mainContent p').html(''); - $('#mainContent #extra').html(''); - $('.tblFooters').html(''); - } else { - Functions.ajaxShowMessage(data.extra, false); - } - $('#pma_navigation_reload').trigger('click'); - } else { - Functions.ajaxShowMessage(data.error, false); - } - } - }); -} - -function goTo3NFFinish (newTables) { - for (var table in newTables) { - for (var newtbl in newTables[table]) { - var updatedname = $('#extra input[name="' + newtbl + '"]').val(); - newTables[table][updatedname] = newTables[table][newtbl]; - if (updatedname !== newtbl) { - delete newTables[table][newtbl]; - } - } - } - var datastring = { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'server': CommonParams.get('server'), - 'newTables':JSON.stringify(newTables), - 'createNewTables3NF':1 }; - $.ajax({ - type: 'POST', - url: 'index.php?route=/normalization', - data: datastring, - async:false, - success: function (data) { - if (data.success === true) { - if (data.queryError === false) { - $('#mainContent legend').html(data.legendText); - $('#mainContent h4').html(data.headText); - $('#mainContent p').html(''); - $('#mainContent #extra').html(''); - $('.tblFooters').html(''); - } else { - Functions.ajaxShowMessage(data.extra, false); - } - $('#pma_navigation_reload').trigger('click'); - } else { - Functions.ajaxShowMessage(data.error, false); - } - } - }); -} - -var backup = ''; - -function goTo2NFStep2 (pd, primaryKey) { - $('#newCols').html(''); - $('#mainContent legend').html(Messages.strStep + ' 2.2 ' + Messages.strConfirmPd); - $('#mainContent h4').html(Messages.strSelectedPd); - $('#mainContent p').html(Messages.strPdHintNote); - var extra = '
            '; - var pdFound = false; - for (var dependson in pd) { - if (dependson !== primaryKey) { - pdFound = true; - extra += '

            ' + Functions.escapeHtml(dependson) + ' -> ' + Functions.escapeHtml(pd[dependson].toString()) + '

            '; - } - } - if (!pdFound) { - extra += '

            ' + Messages.strNoPdSelected + '

            '; - extra += '
            '; - } else { - extra += '
            '; - var datastring = { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'pd': JSON.stringify(pd), - 'getNewTables2NF':1 }; - $.ajax({ - type: 'POST', - url: 'index.php?route=/normalization', - data: datastring, - async:false, - success: function (data) { - if (data.success === true) { - extra += data.message; - } else { - Functions.ajaxShowMessage(data.error, false); - } - } - }); - } - $('#mainContent #extra').html(extra); - $('.tblFooters').html(''); - $('#goTo2NFFinish').on('click', function () { - goTo2NFFinish(pd); - }); -} - -function goTo3NFStep2 (pd, tablesTds) { - $('#newCols').html(''); - $('#mainContent legend').html(Messages.strStep + ' 3.2 ' + Messages.strConfirmTd); - $('#mainContent h4').html(Messages.strSelectedTd); - $('#mainContent p').html(Messages.strPdHintNote); - var extra = '
            '; - var pdFound = false; - for (var table in tablesTds) { - for (var i in tablesTds[table]) { - var dependson = tablesTds[table][i]; - if (dependson !== '' && dependson !== table) { - pdFound = true; - extra += '

            ' + Functions.escapeHtml(dependson) + ' -> ' + Functions.escapeHtml(pd[dependson].toString()) + '

            '; - } - } - } - if (!pdFound) { - extra += '

            ' + Messages.strNoTdSelected + '

            '; - extra += '
            '; - } else { - extra += '
            '; - var datastring = { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'tables': JSON.stringify(tablesTds), - 'server': CommonParams.get('server'), - 'pd': JSON.stringify(pd), - 'getNewTables3NF':1 }; - $.ajax({ - type: 'POST', - url: 'index.php?route=/normalization', - data: datastring, - async:false, - success: function (data) { - dataParsed = data; - if (data.success === true) { - extra += dataParsed.html; - } else { - Functions.ajaxShowMessage(data.error, false); - } - } - }); - } - $('#mainContent #extra').html(extra); - $('.tblFooters').html(''); - $('#goTo3NFFinish').on('click', function () { - if (!pdFound) { - goTo3NFFinish([]); - } else { - goTo3NFFinish(dataParsed.newTables); - } - }); -} -function processDependencies (primaryKey, isTransitive) { - var pk = primaryKey; - var pd = {}; - var tablesTds = {}; - var dependsOn; - pd[pk] = []; - $('#extra form').each(function () { - var tblname; - if (isTransitive === true) { - tblname = $(this).data('tablename'); - pk = tblname; - if (!(tblname in tablesTds)) { - tablesTds[tblname] = []; - } - tablesTds[tblname].push(pk); - } - var formId = $(this).attr('id'); - $('#' + formId + ' input[type=checkbox]:not(:checked)').prop('checked', false); - dependsOn = ''; - $('#' + formId + ' input[type=checkbox]:checked').each(function () { - dependsOn += $(this).val() + ', '; - $(this).attr('checked','checked'); - }); - if (dependsOn === '') { - dependsOn = pk; - } else { - dependsOn = dependsOn.slice(0, -2); - } - if (! (dependsOn in pd)) { - pd[dependsOn] = []; - } - pd[dependsOn].push($(this).data('colname')); - if (isTransitive === true) { - if (!(tblname in tablesTds)) { - tablesTds[tblname] = []; - } - if ($.inArray(dependsOn, tablesTds[tblname]) === -1) { - tablesTds[tblname].push(dependsOn); - } - } - }); - backup = $('#mainContent').html(); - if (isTransitive === true) { - goTo3NFStep2(pd, tablesTds); - } else { - goTo2NFStep2(pd, pk); - } - return false; -} - -function moveRepeatingGroup (repeatingCols) { - var newTable = $('input[name=repeatGroupTable]').val(); - var newColumn = $('input[name=repeatGroupColumn]').val(); - if (!newTable) { - $('input[name=repeatGroupTable]').trigger('focus'); - return false; - } - if (!newColumn) { - $('input[name=repeatGroupColumn]').trigger('focus'); - return false; - } - var datastring = { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'repeatingColumns': repeatingCols, - 'newTable':newTable, - 'newColumn':newColumn, - 'primary_columns':primaryKey.toString() - }; - $.ajax({ - type: 'POST', - url: 'index.php?route=/normalization', - data: datastring, - async:false, - success: function (data) { - if (data.success === true) { - if (data.queryError === false) { - goToStep3(); - } - Functions.ajaxShowMessage(data.message, false); - $('#pma_navigation_reload').trigger('click'); - } else { - Functions.ajaxShowMessage(data.error, false); - } - } - }); -} -AJAX.registerTeardown('normalization.js', function () { - $('#extra').off('click', '#selectNonAtomicCol'); - $('#splitGo').off('click'); - $('.tblFooters').off('click', '#saveSplit'); - $('#extra').off('click', '#addNewPrimary'); - $('.tblFooters').off('click', '#saveNewPrimary'); - $('#extra').off('click', '#removeRedundant'); - $('#mainContent p').off('click', '#createPrimaryKey'); - $('#mainContent').off('click', '#backEditPd'); - $('#mainContent').off('click', '#showPossiblePd'); - $('#mainContent').off('click', '.pickPd'); -}); - -AJAX.registerOnload('normalization.js', function () { - var selectedCol; - normalizeto = $('#mainContent').data('normalizeto'); - $('#extra').on('click', '#selectNonAtomicCol', function () { - if ($(this).val() === 'no_such_col') { - goToStep2(); - } else { - selectedCol = $(this).val(); - } - }); - - $('#splitGo').on('click', function () { - if (!selectedCol || selectedCol === '') { - return false; - } - var numField = $('#numField').val(); - $.post( - 'index.php?route=/normalization', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'splitColumn': true, - 'numFields': numField - }, - function (data) { - if (data.success === true) { - $('#newCols').html(data.message); - $('.default_value').hide(); - $('.enum_notice').hide(); - - $('') - .attr({ - type: 'submit', - id: 'saveSplit', - value: Messages.strSave, - class: 'btn btn-primary' - }) - .appendTo('.tblFooters'); - - $('') - .attr({ - type: 'submit', - id: 'cancelSplit', - value: Messages.strCancel, - class: 'btn btn-secondary' - }) - .on('click', function () { - $('#newCols').html(''); - $(this).parent().html(''); - }) - .appendTo('.tblFooters'); - } - } - ); - return false; - }); - $('.tblFooters').on('click','#saveSplit', function () { - centralColumnList = []; - if ($('#newCols #field_0_1').val() === '') { - $('#newCols #field_0_1').trigger('focus'); - return false; - } - var argsep = CommonParams.get('arg_separator'); - var datastring = $('#newCols :input').serialize(); - datastring += argsep + 'ajax_request=1' + argsep + 'do_save_data=1' + argsep + 'field_where=last'; - $.post('index.php?route=/table/add-field', datastring, function (data) { - if (data.success) { - $.post( - 'index.php?route=/sql', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'dropped_column': selectedCol, - 'purge' : 1, - 'sql_query': 'ALTER TABLE `' + CommonParams.get('table') + '` DROP `' + selectedCol + '`;', - 'is_js_confirmed': 1 - }, - function (data) { - if (data.success === true) { - appendHtmlColumnsList(); - $('#newCols').html(''); - $('.tblFooters').html(''); - } else { - Functions.ajaxShowMessage(data.error, false); - } - selectedCol = ''; - } - ); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); - }); - - $('#extra').on('click', '#addNewPrimary', function () { - $.post( - 'index.php?route=/normalization', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'addNewPrimary': true - }, - function (data) { - if (data.success === true) { - $('#newCols').html(data.message); - $('.default_value').hide(); - $('.enum_notice').hide(); - - $('') - .attr({ - type: 'submit', - id: 'saveNewPrimary', - value: Messages.strSave, - class: 'btn btn-primary' - }) - .appendTo('.tblFooters'); - $('') - .attr({ - type: 'submit', - id: 'cancelSplit', - value: Messages.strCancel, - class: 'btn btn-secondary' - }) - .on('click', function () { - $('#newCols').html(''); - $(this).parent().html(''); - }) - .appendTo('.tblFooters'); - } else { - Functions.ajaxShowMessage(data.error, false); - } - } - ); - return false; - }); - $('.tblFooters').on('click', '#saveNewPrimary', function () { - var datastring = $('#newCols :input').serialize(); - var argsep = CommonParams.get('arg_separator'); - datastring += argsep + 'field_key[0]=primary_0' + argsep + 'ajax_request=1' + argsep + 'do_save_data=1' + argsep + 'field_where=last'; - $.post('index.php?route=/table/add-field', datastring, function (data) { - if (data.success === true) { - $('#mainContent h4').html(Messages.strPrimaryKeyAdded); - $('#mainContent p').html(Messages.strToNextStep); - $('#mainContent #extra').html(''); - $('#mainContent #newCols').html(''); - $('.tblFooters').html(''); - setTimeout(function () { - goToStep3(); - }, 2000); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); - }); - $('#extra').on('click', '#removeRedundant', function () { - var dropQuery = 'ALTER TABLE `' + CommonParams.get('table') + '` '; - $('#extra input[type=checkbox]:checked').each(function () { - dropQuery += 'DROP `' + $(this).val() + '`, '; - }); - dropQuery = dropQuery.slice(0, -2); - $.post( - 'index.php?route=/sql', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'sql_query': dropQuery, - 'is_js_confirmed': 1 - }, - function (data) { - if (data.success === true) { - goToStep2('goToFinish1NF'); - } else { - Functions.ajaxShowMessage(data.error, false); - } - } - ); - }); - $('#extra').on('click', '#moveRepeatingGroup', function () { - var repeatingCols = ''; - $('#extra input[type=checkbox]:checked').each(function () { - repeatingCols += $(this).val() + ', '; - }); - - if (repeatingCols !== '') { - var newColName = $('#extra input[type=checkbox]:checked').first().val(); - repeatingCols = repeatingCols.slice(0, -2); - var confirmStr = Functions.sprintf(Messages.strMoveRepeatingGroup, Functions.escapeHtml(repeatingCols), Functions.escapeHtml(CommonParams.get('table'))); - confirmStr += '' + - '( ' + Functions.escapeHtml(primaryKey.toString()) + ', )' + - ''; - $('#newCols').html(confirmStr); - - $('') - .attr({ - type: 'submit', - value: Messages.strCancel, - class: 'btn btn-secondary' - }) - .on('click', function () { - $('#newCols').html(''); - $('#extra input[type=checkbox]').prop('checked', false); - }) - .appendTo('.tblFooters'); - $('') - .attr({ - type: 'submit', - value: Messages.strGo, - class: 'btn btn-primary' - }) - .on('click', function () { - moveRepeatingGroup(repeatingCols); - }) - .appendTo('.tblFooters'); - } - }); - $('#mainContent p').on('click', '#createPrimaryKey', function (event) { - event.preventDefault(); - var url = { - 'create_index': 1, - 'server': CommonParams.get('server'), - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'added_fields': 1, - 'add_fields':1, - 'index': { 'Key_name':'PRIMARY' }, - 'ajax_request': true - }; - var title = Messages.strAddPrimaryKey; - Functions.indexEditorDialog(url, title, function () { - // on success - $('.sqlqueryresults').remove(); - $('.result_query').remove(); - $('.tblFooters').html(''); - goToStep2('goToStep3'); - }); - return false; - }); - $('#mainContent').on('click', '#backEditPd', function () { - $('#mainContent').html(backup); - }); - $('#mainContent').on('click', '#showPossiblePd', function () { - if ($(this).hasClass('hideList')) { - $(this).html('+ ' + Messages.strShowPossiblePd); - $(this).removeClass('hideList'); - $('#newCols').slideToggle('slow'); - return false; - } - if ($('#newCols').html() !== '') { - $('#showPossiblePd').html('- ' + Messages.strHidePd); - $('#showPossiblePd').addClass('hideList'); - $('#newCols').slideToggle('slow'); - return false; - } - $('#newCols').insertAfter('#mainContent h4'); - $('#newCols').html('
            ' + Messages.strLoading + '
            ' + Messages.strWaitForPd + '
            '); - $.post( - 'index.php?route=/normalization', - { - 'ajax_request': true, - 'db': CommonParams.get('db'), - 'table': CommonParams.get('table'), - 'server': CommonParams.get('server'), - 'findPdl': true - }, function (data) { - $('#showPossiblePd').html('- ' + Messages.strHidePd); - $('#showPossiblePd').addClass('hideList'); - $('#newCols').html(data.message); - }); - }); - $('#mainContent').on('click', '.pickPd', function () { - var strColsLeft = $(this).next('.determinants').html(); - var colsLeft = strColsLeft.split(','); - var strColsRight = $(this).next().next().html(); - var colsRight = strColsRight.split(','); - for (var i in colsRight) { - $('form[data-colname="' + colsRight[i].trim() + '"] input[type="checkbox"]').prop('checked', false); - for (var j in colsLeft) { - $('form[data-colname="' + colsRight[i].trim() + '"] input[value="' + colsLeft[j].trim() + '"]').prop('checked', true); - } - } - }); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/replication.js b/Sources/php_script/script/phpMyAdmin/js/src/replication.js deleted file mode 100644 index 26b8437..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/replication.js +++ /dev/null @@ -1,106 +0,0 @@ -/** - * @fileoverview Javascript functions used in server replication page - * @name Server Replication - * - * @requires jQuery - * @requires jQueryUI - * @requires js/functions.js - */ - -var randomServerId = Math.floor(Math.random() * 10000000); -var confPrefix = 'server-id=' + randomServerId + '\nlog_bin=mysql-bin\nlog_error=mysql-bin.err\n'; - -function updateConfig () { - var confIgnore = 'binlog_ignore_db='; - var confDo = 'binlog_do_db='; - var databaseList = ''; - - if ($('#db_select option:selected').length === 0) { - $('#rep').text(confPrefix); - } else if ($('#db_type option:selected').val() === 'all') { - $('#db_select option:selected').each(function () { - databaseList += confIgnore + $(this).val() + '\n'; - }); - $('#rep').text(confPrefix + databaseList); - } else { - $('#db_select option:selected').each(function () { - databaseList += confDo + $(this).val() + '\n'; - }); - $('#rep').text(confPrefix + databaseList); - } -} - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('replication.js', function () { - $('#db_type').off('change'); - $('#db_select').off('change'); - $('#primary_status_href').off('click'); - $('#primary_replicas_href').off('click'); - $('#replica_status_href').off('click'); - $('#replica_control_href').off('click'); - $('#replica_errormanagement_href').off('click'); - $('#replica_synchronization_href').off('click'); - $('#db_reset_href').off('click'); - $('#db_select_href').off('click'); - $('#reset_replica').off('click'); -}); - -AJAX.registerOnload('replication.js', function () { - $('#rep').text(confPrefix); - $('#db_type').on('change', updateConfig); - $('#db_select').on('change', updateConfig); - - $('#primary_status_href').on('click', function () { - $('#replication_primary_section').toggle(); - }); - $('#primary_replicas_href').on('click', function () { - $('#replication_replicas_section').toggle(); - }); - $('#replica_status_href').on('click', function () { - $('#replication_replica_section').toggle(); - }); - $('#replica_control_href').on('click', function () { - $('#replica_control_gui').toggle(); - }); - $('#replica_errormanagement_href').on('click', function () { - $('#replica_errormanagement_gui').toggle(); - }); - $('#replica_synchronization_href').on('click', function () { - $('#replica_synchronization_gui').toggle(); - }); - $('#db_reset_href').on('click', function () { - $('#db_select option:selected').prop('selected', false); - $('#db_select').trigger('change'); - }); - $('#db_select_href').on('click', function () { - $('#db_select option').prop('selected', true); - $('#db_select').trigger('change'); - }); - $('#reset_replica').on('click', function (e) { - e.preventDefault(); - var $anchor = $(this); - var question = Messages.strResetReplicaWarning; - $anchor.confirm(question, $anchor.attr('href'), function (url) { - Functions.ajaxShowMessage(); - AJAX.source = $anchor; - var params = Functions.getJsConfirmCommonParam({ - 'ajax_page_request': true, - 'ajax_request': true - }, $anchor.getPostData()); - $.post(url, params, AJAX.responseHandler); - }); - }); - $('#button_generate_password').on('click', function () { - Functions.suggestPassword(this.form); - }); - $('#nopass_1').on('click', function () { - this.form.pma_pw.value = ''; - this.form.pma_pw2.value = ''; - this.checked = true; - }); - $('#nopass_0').on('click', function () { - document.getElementById('text_pma_change_pw').focus(); - }); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/server/plugins.js b/Sources/php_script/script/phpMyAdmin/js/src/server/plugins.js deleted file mode 100644 index fe96bc0..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/server/plugins.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Functions used in server plugins pages - */ -AJAX.registerOnload('server/plugins.js', function () { - // Make columns sortable, but only for tables with more than 1 data row - var $tables = $('#plugins_plugins table:has(tbody tr + tr)'); - $tables.tablesorter({ - sortList: [[0, 0]], - headers: { - 1: { sorter: false } - } - }); - $tables.find('thead th') - .append('
            '); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/server/status/queries.js b/Sources/php_script/script/phpMyAdmin/js/src/server/status/queries.js deleted file mode 100644 index e4c0503..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/server/status/queries.js +++ /dev/null @@ -1,45 +0,0 @@ -/** - * @fileoverview Javascript functions used in server status query page - * @name Server Status Query - * - * @requires jQuery - * @requires jQueryUI - * @requires js/functions.js - */ - -/* global initTableSorter */ // js/server/status/sorter.js - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('server/status/queries.js', function () { - if (document.getElementById('serverstatusquerieschart') !== null) { - var queryPieChart = $('#serverstatusquerieschart').data('queryPieChart'); - if (queryPieChart) { - queryPieChart.destroy(); - } - } -}); - -AJAX.registerOnload('server/status/queries.js', function () { - // Build query statistics chart - var cdata = []; - try { - if (document.getElementById('serverstatusquerieschart') !== null) { - $.each($('#serverstatusquerieschart').data('chart'), function (key, value) { - cdata.push([key, parseInt(value, 10)]); - }); - $('#serverstatusquerieschart').data( - 'queryPieChart', - Functions.createProfilingChart( - 'serverstatusquerieschart', - cdata - ) - ); - } - } catch (exception) { - // Could not load chart, no big deal... - } - - initTableSorter('statustabs_queries'); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/setup/scripts.js b/Sources/php_script/script/phpMyAdmin/js/src/setup/scripts.js deleted file mode 100644 index c7671c1..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/setup/scripts.js +++ /dev/null @@ -1,241 +0,0 @@ -/** - * Functions used in Setup configuration forms - */ - -/* global displayErrors, getAllValues, getIdPrefix, validators */ // js/config.js - -// show this window in top frame -if (top !== self) { - window.top.location.href = location; -} - -// ------------------------------------------------------------------ -// Messages -// - -$(function () { - if (window.location.protocol === 'https:') { - $('#no_https').remove(); - } else { - $('#no_https a').on('click', function () { - var oldLocation = window.location; - window.location.href = 'https:' + oldLocation.href.substring(oldLocation.protocol.length); - return false; - }); - } - - var hiddenMessages = $('.hiddenmessage'); - - if (hiddenMessages.length > 0) { - hiddenMessages.hide(); - var link = $('#show_hidden_messages'); - link.on('click', function (e) { - e.preventDefault(); - hiddenMessages.show(); - $(this).remove(); - }); - link.html(link.html().replace('#MSG_COUNT', hiddenMessages.length)); - link.show(); - } -}); - -// set document width -$(function () { - var width = 0; - $('ul.tabs li').each(function () { - width += $(this).width() + 10; - }); - var contentWidth = width; - width += 250; - $('body').css('min-width', width); - $('.tabs_contents').css('min-width', contentWidth); -}); - -// -// END: Messages -// ------------------------------------------------------------------ - -// ------------------------------------------------------------------ -// Form validation and field operations -// - -/** - * Calls server-side validation procedures - * - * @param {Element} parent input field in
            or
            - * @param {String} id validator id - * @param {object} values values hash {element1_id: value, ...} - * - * @return {bool|void} - */ -function ajaxValidate (parent, id, values) { - var $parent = $(parent); - // ensure that parent is a fieldset - if ($parent.attr('tagName') !== 'FIELDSET') { - $parent = $parent.closest('fieldset'); - if ($parent.length === 0) { - return false; - } - } - - if ($parent.data('ajax') !== null) { - $parent.data('ajax').abort(); - } - - $parent.data('ajax', $.ajax({ - url: 'validate.php', - cache: false, - type: 'POST', - data: { - token: $parent.closest('form').find('input[name=token]').val(), - id: id, - values: JSON.stringify(values) - }, - success: function (response) { - if (response === null) { - return; - } - - var error = {}; - if (typeof response !== 'object') { - error[$parent.id] = [response]; - } else if (typeof response.error !== 'undefined') { - error[$parent.id] = [response.error]; - } else { - for (var key in response) { - var value = response[key]; - error[key] = Array.isArray(value) ? value : [value]; - } - } - displayErrors(error); - }, - complete: function () { - $parent.removeData('ajax'); - } - })); - - return true; -} - -/** - * Automatic form submission on change. - */ -$(document).on('change', '.autosubmit', function (e) { - e.target.form.submit(); -}); - -$.extend(true, validators, { - // field validators - field: { - /** - * hide_db field - * - * @param {boolean} isKeyUp - * - * @return {true} - */ - hide_db: function (isKeyUp) { // eslint-disable-line camelcase - if (!isKeyUp && this.value !== '') { - var data = {}; - data[this.id] = this.value; - ajaxValidate(this, 'Servers/1/hide_db', data); - } - return true; - }, - /** - * TrustedProxies field - * - * @param {boolean} isKeyUp - * - * @return {true} - */ - TrustedProxies: function (isKeyUp) { - if (!isKeyUp && this.value !== '') { - var data = {}; - data[this.id] = this.value; - ajaxValidate(this, 'TrustedProxies', data); - } - return true; - } - }, - // fieldset validators - fieldset: { - /** - * Validates Server fieldset - * - * @param {boolean} isKeyUp - * - * @return {true} - */ - Server: function (isKeyUp) { - if (!isKeyUp) { - ajaxValidate(this, 'Server', getAllValues()); - } - return true; - }, - /** - * Validates Server_login_options fieldset - * - * @param {boolean} isKeyUp - * - * @return {true} - */ - Server_login_options: function (isKeyUp) { // eslint-disable-line camelcase - return validators.fieldset.Server.apply(this, [isKeyUp]); - }, - /** - * Validates Server_pmadb fieldset - * - * @param {boolean} isKeyUp - * - * @return {true} - */ - Server_pmadb: function (isKeyUp) { // eslint-disable-line camelcase - if (isKeyUp) { - return true; - } - - var prefix = getIdPrefix($(this).find('input')); - if ($('#' + prefix + 'pmadb').val() !== '') { - ajaxValidate(this, 'Server_pmadb', getAllValues()); - } - - return true; - } - } -}); - -// -// END: Form validation and field operations -// ------------------------------------------------------------------ - -// ------------------------------------------------------------------ -// User preferences allow/disallow UI -// - -$(function () { - $('.userprefs-allow').on('click', function (e) { - if (this !== e.target) { - return; - } - var el = $(this).find('input'); - if (el.prop('disabled')) { - return; - } - el.prop('checked', !el.prop('checked')); - }); -}); - -// -// END: User preferences allow/disallow UI -// ------------------------------------------------------------------ - -$(function () { - $('.delete-server').on('click', function (e) { - e.preventDefault(); - var $this = $(this); - $.post($this.attr('href'), $this.attr('data-post'), function () { - window.location.replace('index.php'); - }); - }); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/sql.js b/Sources/php_script/script/phpMyAdmin/js/src/sql.js deleted file mode 100644 index 0823294..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/sql.js +++ /dev/null @@ -1,1090 +0,0 @@ -/** - * @fileoverview functions used wherever an sql query form is used - * - * @requires jQuery - * @requires js/functions.js - * - * @test-module Sql - */ - -/* global isStorageSupported */ // js/config.js -/* global codeMirrorEditor */ // js/functions.js -/* global makeGrid */ // js/makegrid.js -/* global sqlBoxLocked */ // js/functions.js - -var Sql = {}; - -/** - * decode a string URL_encoded - * - * @param {string} str - * @return {string} the URL-decoded string - */ -Sql.urlDecode = function (str) { - if (typeof str !== 'undefined') { - return decodeURIComponent(str.replace(/\+/g, '%20')); - } -}; - -/** - * encode a string URL_decoded - * - * @param {string} str - * @return {string} the URL-encoded string - */ -Sql.urlEncode = function (str) { - if (typeof str !== 'undefined') { - return encodeURIComponent(str).replace(/%20/g, '+'); - } -}; - -/** - * Saves SQL query in local storage or cookie - * - * @param {string} query SQL query - * @return {void} - */ -Sql.autoSave = function (query) { - if (query) { - var key = Sql.getAutoSavedKey(); - if (isStorageSupported('localStorage')) { - window.localStorage.setItem(key, query); - } else { - Cookies.set(key, query); - } - } -}; - -/** - * Saves SQL query in local storage or cookie - * - * @param {string} db database name - * @param {string} table table name - * @param {string} query SQL query - * @return {void} - */ -Sql.showThisQuery = function (db, table, query) { - var showThisQueryObject = { - 'db': db, - 'table': table, - 'query': query - }; - if (isStorageSupported('localStorage')) { - window.localStorage.showThisQuery = 1; - window.localStorage.showThisQueryObject = JSON.stringify(showThisQueryObject); - } else { - Cookies.set('showThisQuery', 1); - Cookies.set('showThisQueryObject', JSON.stringify(showThisQueryObject)); - } -}; - -/** - * Set query to codemirror if show this query is - * checked and query for the db and table pair exists - */ -Sql.setShowThisQuery = function () { - var db = $('input[name="db"]').val(); - var table = $('input[name="table"]').val(); - if (isStorageSupported('localStorage')) { - if (window.localStorage.showThisQueryObject !== undefined) { - var storedDb = JSON.parse(window.localStorage.showThisQueryObject).db; - var storedTable = JSON.parse(window.localStorage.showThisQueryObject).table; - var storedQuery = JSON.parse(window.localStorage.showThisQueryObject).query; - } - if (window.localStorage.showThisQuery !== undefined - && window.localStorage.showThisQuery === '1') { - $('input[name="show_query"]').prop('checked', true); - if (db === storedDb && table === storedTable) { - if (codeMirrorEditor) { - codeMirrorEditor.setValue(storedQuery); - } else if (document.sqlform) { - document.sqlform.sql_query.value = storedQuery; - } - } - } else { - $('input[name="show_query"]').prop('checked', false); - } - } -}; - -/** - * Saves SQL query with sort in local storage or cookie - * - * @param {string} query SQL query - * @return {void} - */ -Sql.autoSaveWithSort = function (query) { - if (query) { - if (isStorageSupported('localStorage')) { - window.localStorage.setItem('autoSavedSqlSort', query); - } else { - Cookies.set('autoSavedSqlSort', query); - } - } -}; - -/** - * Clear saved SQL query with sort in local storage or cookie - * - * @return {void} - */ -Sql.clearAutoSavedSort = function () { - if (isStorageSupported('localStorage')) { - window.localStorage.removeItem('autoSavedSqlSort'); - } else { - Cookies.set('autoSavedSqlSort', ''); - } -}; - -/** - * Get the field name for the current field. Required to construct the query - * for grid editing - * - * @param $tableResults enclosing results table - * @param $thisField jQuery object that points to the current field's tr - * - * @return {string} - */ -Sql.getFieldName = function ($tableResults, $thisField) { - var thisFieldIndex = $thisField.index(); - // ltr or rtl direction does not impact how the DOM was generated - // check if the action column in the left exist - var leftActionExist = !$tableResults.find('th').first().hasClass('draggable'); - // number of column span for checkbox and Actions - var leftActionSkip = leftActionExist ? $tableResults.find('th').first().attr('colspan') - 1 : 0; - - // If this column was sorted, the text of the a element contains something - // like 1 that is useful to indicate the order in case - // of a sort on multiple columns; however, we dont want this as part - // of the column name so we strip it ( .clone() to .end() ) - var fieldName = $tableResults - .find('thead') - .find('th') - .eq(thisFieldIndex - leftActionSkip) - .find('a') - .clone() // clone the element - .children() // select all the children - .remove() // remove all of them - .end() // go back to the selected element - .text(); // grab the text - // happens when just one row (headings contain no a) - if (fieldName === '') { - var $heading = $tableResults.find('thead').find('th').eq(thisFieldIndex - leftActionSkip).children('span'); - // may contain column comment enclosed in a span - detach it temporarily to read the column name - var $tempColComment = $heading.children().detach(); - fieldName = $heading.text(); - // re-attach the column comment - $heading.append($tempColComment); - } - - fieldName = fieldName.trim(); - - return fieldName; -}; - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('sql.js', function () { - $(document).off('click', 'a.delete_row.ajax'); - $(document).off('submit', '.bookmarkQueryForm'); - $('input#bkm_label').off('input'); - $(document).off('makegrid', '.sqlqueryresults'); - $('#togglequerybox').off('click'); - $(document).off('click', '#button_submit_query'); - $(document).off('change', '#id_bookmark'); - $('input[name=\'bookmark_variable\']').off('keypress'); - $(document).off('submit', '#sqlqueryform.ajax'); - $(document).off('click', 'input[name=navig].ajax'); - $(document).off('submit', 'form[name=\'displayOptionsForm\'].ajax'); - $(document).off('mouseenter', 'th.column_heading.pointer'); - $(document).off('mouseleave', 'th.column_heading.pointer'); - $(document).off('click', 'th.column_heading.marker'); - $(document).off('scroll', window); - $(document).off('keyup', '.filter_rows'); - if (codeMirrorEditor) { - codeMirrorEditor.off('change'); - } else { - $('#sqlquery').off('input propertychange'); - } - $('body').off('click', '.navigation .showAllRows'); - $('body').off('click', 'a.browse_foreign'); - $('body').off('click', '#simulate_dml'); - $('body').off('keyup', '#sqlqueryform'); - $('body').off('click', 'form[name="resultsForm"].ajax button[name="submit_mult"], form[name="resultsForm"].ajax input[name="submit_mult"]'); - $(document).off('submit', '.maxRowsForm'); - $(document).off('click', '#view_as'); - $(document).off('click', '#sqlquery'); -}); - -/** - * @description

            Ajax scripts for sql and browse pages

            - * - * Actions ajaxified here: - *
              - *
            • Retrieve results of an SQL query
            • - *
            • Paginate the results table
            • - *
            • Sort the results table
            • - *
            • Change table according to display options
            • - *
            • Grid editing of data
            • - *
            • Saving a bookmark
            • - *
            - * - * @name document.ready - * @memberOf jQuery - */ -AJAX.registerOnload('sql.js', function () { - if (codeMirrorEditor || document.sqlform) { - Sql.setShowThisQuery(); - } - $(function () { - if (codeMirrorEditor) { - codeMirrorEditor.on('change', function () { - Sql.autoSave(codeMirrorEditor.getValue()); - }); - } else { - $('#sqlquery').on('input propertychange', function () { - Sql.autoSave($('#sqlquery').val()); - }); - var useLocalStorageValue = isStorageSupported('localStorage') && typeof window.localStorage.autoSavedSqlSort !== 'undefined'; - // Save sql query with sort - if ($('#RememberSorting') !== undefined && $('#RememberSorting').is(':checked')) { - $('select[name="sql_query"]').on('change', function () { - Sql.autoSaveWithSort($(this).val()); - }); - $('.sortlink').on('click', function () { - Sql.clearAutoSavedSort(); - }); - } else { - Sql.clearAutoSavedSort(); - } - // If sql query with sort for current table is stored, change sort by key select value - var sortStoredQuery = useLocalStorageValue ? window.localStorage.autoSavedSqlSort : Cookies.get('autoSavedSqlSort'); - if (typeof sortStoredQuery !== 'undefined' && sortStoredQuery !== $('select[name="sql_query"]').val() && $('select[name="sql_query"] option[value="' + sortStoredQuery + '"]').length !== 0) { - $('select[name="sql_query"]').val(sortStoredQuery).trigger('change'); - } - } - }); - - // Delete row from SQL results - $(document).on('click', 'a.delete_row.ajax', function (e) { - e.preventDefault(); - var question = Functions.sprintf(Messages.strDoYouReally, Functions.escapeHtml($(this).closest('td').find('div').text())); - var $link = $(this); - $link.confirm(question, $link.attr('href'), function (url) { - Functions.ajaxShowMessage(); - var argsep = CommonParams.get('arg_separator'); - var params = 'ajax_request=1' + argsep + 'is_js_confirmed=1'; - var postData = $link.getPostData(); - if (postData) { - params += argsep + postData; - } - $.post(url, params, function (data) { - if (data.success) { - Functions.ajaxShowMessage(data.message); - $link.closest('tr').remove(); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); - }); - }); - - // Ajaxification for 'Bookmark this SQL query' - $(document).on('submit', '.bookmarkQueryForm', function (e) { - e.preventDefault(); - Functions.ajaxShowMessage(); - var argsep = CommonParams.get('arg_separator'); - $.post($(this).attr('action'), 'ajax_request=1' + argsep + $(this).serialize(), function (data) { - if (data.success) { - Functions.ajaxShowMessage(data.message); - } else { - Functions.ajaxShowMessage(data.error, false); - } - }); - }); - - /* Hides the bookmarkoptions checkboxes when the bookmark label is empty */ - $('input#bkm_label').on('input', function () { - $('input#id_bkm_all_users, input#id_bkm_replace') - .parent() - .toggle($(this).val().length > 0); - }).trigger('input'); - - /** - * Attach Event Handler for 'Copy to clipboard' - */ - $(document).on('click', '#copyToClipBoard', function (event) { - event.preventDefault(); - - var textArea = document.createElement('textarea'); - - // - // *** This styling is an extra step which is likely not required. *** - // - // Why is it here? To ensure: - // 1. the element is able to have focus and selection. - // 2. if element was to flash render it has minimal visual impact. - // 3. less flakyness with selection and copying which **might** occur if - // the textarea element is not visible. - // - // The likelihood is the element won't even render, not even a flash, - // so some of these are just precautions. However in IE the element - // is visible whilst the popup box asking the user for permission for - // the web page to copy to the clipboard. - // - - // Place in top-left corner of screen regardless of scroll position. - textArea.style.position = 'fixed'; - textArea.style.top = 0; - textArea.style.left = 0; - - // Ensure it has a small width and height. Setting to 1px / 1em - // doesn't work as this gives a negative w/h on some browsers. - textArea.style.width = '2em'; - textArea.style.height = '2em'; - - // We don't need padding, reducing the size if it does flash render. - textArea.style.padding = 0; - - // Clean up any borders. - textArea.style.border = 'none'; - textArea.style.outline = 'none'; - textArea.style.boxShadow = 'none'; - - // Avoid flash of white box if rendered for any reason. - textArea.style.background = 'transparent'; - - textArea.value = ''; - - $('#server-breadcrumb a').each(function () { - textArea.value += $(this).data('raw-text') + '/'; - }); - textArea.value += '\t\t' + window.location.href; - textArea.value += '\n'; - $('.alert-success').each(function () { - textArea.value += $(this).text() + '\n\n'; - }); - - $('.sql pre').each(function () { - textArea.value += $(this).text() + '\n\n'; - }); - - $('.table_results .column_heading a').each(function () { - // Don't copy ordering number text within tag - textArea.value += $(this).clone().find('small').remove().end().text() + '\t'; - }); - - textArea.value += '\n'; - $('.table_results tbody tr').each(function () { - $(this).find('.data span').each(function () { - // Extract tag for NULL values before converting to string to not mess up formatting - var data = $(this).find('em').length !== 0 ? $(this).find('em')[0] : this; - textArea.value += $(data).text() + '\t'; - }); - textArea.value += '\n'; - }); - - // eslint-disable-next-line compat/compat - document.body.appendChild(textArea); - - textArea.select(); - - try { - document.execCommand('copy'); - } catch (err) { - alert('Sorry! Unable to copy'); - } - - // eslint-disable-next-line compat/compat - document.body.removeChild(textArea); - }); // end of Copy to Clipboard action - - /** - * Attach the {@link makegrid} function to a custom event, which will be - * triggered manually everytime the table of results is reloaded - * @memberOf jQuery - */ - $(document).on('makegrid', '.sqlqueryresults', function () { - $('.table_results').each(function () { - makeGrid(this); - }); - }); - - /** - * Append the "Show/Hide query box" message to the query input form - * - * @memberOf jQuery - * @name appendToggleSpan - */ - // do not add this link more than once - if (! $('#sqlqueryform').find('button').is('#togglequerybox')) { - $('') - .html(Messages.strHideQueryBox) - .appendTo('#sqlqueryform') - // initially hidden because at this point, nothing else - // appears under the link - .hide(); - - // Attach the toggling of the query box visibility to a click - $('#togglequerybox').on('click', function () { - var $link = $(this); - $link.siblings().slideToggle('fast'); - if ($link.text() === Messages.strHideQueryBox) { - $link.text(Messages.strShowQueryBox); - // cheap trick to add a spacer between the menu tabs - // and "Show query box"; feel free to improve! - $('#togglequerybox_spacer').remove(); - $link.before('
            '); - } else { - $link.text(Messages.strHideQueryBox); - } - // avoid default click action - return false; - }); - } - - - /** - * Event handler for sqlqueryform.ajax button_submit_query - * - * @memberOf jQuery - */ - $(document).on('click', '#button_submit_query', function () { - $('.alert-success,.alert-danger').hide(); - // hide already existing error or success message - var $form = $(this).closest('form'); - // the Go button related to query submission was clicked, - // instead of the one related to Bookmarks, so empty the - // id_bookmark selector to avoid misinterpretation in - // /import about what needs to be done - $form.find('select[name=id_bookmark]').val(''); - var isShowQuery = $('input[name="show_query"]').is(':checked'); - if (isShowQuery) { - window.localStorage.showThisQuery = '1'; - var db = $('input[name="db"]').val(); - var table = $('input[name="table"]').val(); - var query; - if (codeMirrorEditor) { - query = codeMirrorEditor.getValue(); - } else { - query = $('#sqlquery').val(); - } - Sql.showThisQuery(db, table, query); - } else { - window.localStorage.showThisQuery = '0'; - } - }); - - /** - * Event handler to show appropriate number of variable boxes - * based on the bookmarked query - */ - $(document).on('change', '#id_bookmark', function () { - var varCount = $(this).find('option:selected').data('varcount'); - if (typeof varCount === 'undefined') { - varCount = 0; - } - - var $varDiv = $('#bookmarkVariables'); - $varDiv.empty(); - for (var i = 1; i <= varCount; i++) { - $varDiv.append($('
            ')); - $varDiv.append($('')); - $varDiv.append($('')); - $varDiv.append($('
            ')); - } - - if (varCount === 0) { - $varDiv.parent().hide(); - } else { - $varDiv.parent().show(); - } - }); - - /** - * Event handler for hitting enter on sqlqueryform bookmark_variable - * (the Variable textfield in Bookmarked SQL query section) - * - * @memberOf jQuery - */ - $('input[name=bookmark_variable]').on('keypress', function (event) { - // force the 'Enter Key' to implicitly click the #button_submit_bookmark - var keycode = (event.keyCode ? event.keyCode : (event.which ? event.which : event.charCode)); - if (keycode === 13) { // keycode for enter key - // When you press enter in the sqlqueryform, which - // has 2 submit buttons, the default is to run the - // #button_submit_query, because of the tabindex - // attribute. - // This submits #button_submit_bookmark instead, - // because when you are in the Bookmarked SQL query - // section and hit enter, you expect it to do the - // same action as the Go button in that section. - $('#button_submit_bookmark').trigger('click'); - return false; - } else { - return true; - } - }); - - /** - * Ajax Event handler for 'SQL Query Submit' - * - * @see Functions.ajaxShowMessage() - * @memberOf jQuery - * @name sqlqueryform_submit - */ - $(document).on('submit', '#sqlqueryform.ajax', function (event) { - event.preventDefault(); - - var $form = $(this); - if (codeMirrorEditor) { - $form[0].elements.sql_query.value = codeMirrorEditor.getValue(); - } - if (! Functions.checkSqlQuery($form[0])) { - return false; - } - - // remove any div containing a previous error message - $('.alert-danger').remove(); - - var $msgbox = Functions.ajaxShowMessage(); - var $sqlqueryresultsouter = $('#sqlqueryresultsouter'); - - Functions.prepareForAjaxRequest($form); - - var argsep = CommonParams.get('arg_separator'); - $.post($form.attr('action'), $form.serialize() + argsep + 'ajax_page_request=true', function (data) { - if (typeof data !== 'undefined' && data.success === true) { - // success happens if the query returns rows or not - - // show a message that stays on screen - if (typeof data.action_bookmark !== 'undefined') { - // view only - if ('1' === data.action_bookmark) { - $('#sqlquery').text(data.sql_query); - // send to codemirror if possible - Functions.setQuery(data.sql_query); - } - // delete - if ('2' === data.action_bookmark) { - $('#id_bookmark option[value=\'' + data.id_bookmark + '\']').remove(); - // if there are no bookmarked queries now (only the empty option), - // remove the bookmark section - if ($('#id_bookmark option').length === 1) { - $('#fieldsetBookmarkOptions').hide(); - $('#fieldsetBookmarkOptionsFooter').hide(); - } - } - } - $sqlqueryresultsouter - .show() - .html(data.message); - Functions.highlightSql($sqlqueryresultsouter); - - if (data.menu) { - history.replaceState({ - menu : data.menu - }, - null - ); - AJAX.handleMenu.replace(data.menu); - } - - if (data.params) { - CommonParams.setAll(data.params); - } - - if (typeof data.ajax_reload !== 'undefined') { - if (data.ajax_reload.reload) { - if (data.ajax_reload.table_name) { - CommonParams.set('table', data.ajax_reload.table_name); - CommonActions.refreshMain(); - } else { - Navigation.reload(); - } - } - } else if (typeof data.reload !== 'undefined') { - // this happens if a USE or DROP command was typed - CommonActions.setDb(data.db); - var url; - if (data.db) { - if (data.table) { - url = 'index.php?route=/table/sql'; - } else { - url = 'index.php?route=/database/sql'; - } - } else { - url = 'index.php?route=/server/sql'; - } - CommonActions.refreshMain(url, function () { - $('#sqlqueryresultsouter') - .show() - .html(data.message); - Functions.highlightSql($('#sqlqueryresultsouter')); - }); - } - - $('.sqlqueryresults').trigger('makegrid'); - $('#togglequerybox').show(); - - if (typeof data.action_bookmark === 'undefined') { - if ($('#sqlqueryform input[name="retain_query_box"]').is(':checked') !== true) { - if ($('#togglequerybox').siblings(':visible').length > 0) { - $('#togglequerybox').trigger('click'); - } - } - } - } else if (typeof data !== 'undefined' && data.success === false) { - // show an error message that stays on screen - $sqlqueryresultsouter - .show() - .html(data.error); - $('html, body').animate({ scrollTop: $(document).height() }, 200); - } - Functions.ajaxRemoveMessage($msgbox); - }); // end $.post() - }); // end SQL Query submit - - /** - * Ajax Event handler for the display options - * @memberOf jQuery - * @name displayOptionsForm_submit - */ - $(document).on('submit', 'form[name=\'displayOptionsForm\'].ajax', function (event) { - event.preventDefault(); - - var $form = $(this); - - var $msgbox = Functions.ajaxShowMessage(); - var argsep = CommonParams.get('arg_separator'); - $.post($form.attr('action'), $form.serialize() + argsep + 'ajax_request=true', function (data) { - Functions.ajaxRemoveMessage($msgbox); - var $sqlqueryresults = $form.parents('.sqlqueryresults'); - $sqlqueryresults - .html(data.message) - .trigger('makegrid'); - Functions.highlightSql($sqlqueryresults); - }); // end $.post() - }); // end displayOptionsForm handler - - // Filter row handling. --STARTS-- - $(document).on('keyup', '.filter_rows', function () { - var uniqueId = $(this).data('for'); - var $targetTable = $('.table_results[data-uniqueId=\'' + uniqueId + '\']'); - var $headerCells = $targetTable.find('th[data-column]'); - var targetColumns = []; - // To handle colspan=4, in case of edit,copy etc options. - var dummyTh = ($('.edit_row_anchor').length !== 0 ? - '' - : ''); - // Selecting columns that will be considered for filtering and searching. - $headerCells.each(function () { - targetColumns.push($(this).text().trim()); - }); - - var phrase = $(this).val(); - // Set same value to both Filter rows fields. - $('.filter_rows[data-for=\'' + uniqueId + '\']').not(this).val(phrase); - // Handle colspan. - $targetTable.find('thead > tr').prepend(dummyTh); - $.uiTableFilter($targetTable, phrase, targetColumns); - $targetTable.find('th.dummy_th').remove(); - }); - // Filter row handling. --ENDS-- - - // Prompt to confirm on Show All - $('body').on('click', '.navigation .showAllRows', function (e) { - e.preventDefault(); - var $form = $(this).parents('form'); - - Sql.submitShowAllForm = function () { - var argsep = CommonParams.get('arg_separator'); - var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true'; - Functions.ajaxShowMessage(); - AJAX.source = $form; - $.post($form.attr('action'), submitData, AJAX.responseHandler); - }; - - if (! $(this).is(':checked')) { // already showing all rows - Sql.submitShowAllForm(); - } else { - $form.confirm(Messages.strShowAllRowsWarning, $form.attr('action'), function () { - Sql.submitShowAllForm(); - }); - } - }); - - $('body').on('keyup', '#sqlqueryform', function () { - Functions.handleSimulateQueryButton(); - }); - - /** - * Ajax event handler for 'Simulate DML'. - */ - $('body').on('click', '#simulate_dml', function () { - var $form = $('#sqlqueryform'); - var query = ''; - var delimiter = $('#id_sql_delimiter').val(); - var dbName = $form.find('input[name="db"]').val(); - - if (codeMirrorEditor) { - query = codeMirrorEditor.getValue(); - } else { - query = $('#sqlquery').val(); - } - - if (query.length === 0) { - alert(Messages.strFormEmpty); - $('#sqlquery').trigger('focus'); - return false; - } - - var $msgbox = Functions.ajaxShowMessage(); - $.ajax({ - type: 'POST', - url: 'index.php?route=/import/simulate-dml', - data: { - 'server': CommonParams.get('server'), - 'db': dbName, - 'ajax_request': '1', - 'sql_query': query, - 'sql_delimiter': delimiter - }, - success: function (response) { - Functions.ajaxRemoveMessage($msgbox); - if (response.success) { - var dialogContent = '
            '; - if (response.sql_data) { - var len = response.sql_data.length; - for (var i = 0; i < len; i++) { - dialogContent += '' + Messages.strSQLQuery + - '' + response.sql_data[i].sql_query + - Messages.strMatchedRows + - ' ' + response.sql_data[i].matched_rows + '
            '; - if (i < len - 1) { - dialogContent += '
            '; - } - } - } else { - dialogContent += response.message; - } - dialogContent += '
            '; - var $dialogContent = $(dialogContent); - var modal = $('#simulateDmlModal'); - modal.modal('show'); - modal.find('.modal-body').first().html($dialogContent); - modal.on('shown.bs.modal', function () { - Functions.highlightSql(modal); - }); - } else { - Functions.ajaxShowMessage(response.error); - } - }, - error: function () { - Functions.ajaxShowMessage(Messages.strErrorProcessingRequest); - } - }); - }); - - /** - * Handles multi submits of results browsing page such as edit, delete and export - */ - $('body').on('click', 'form[name="resultsForm"].ajax button[name="submit_mult"], form[name="resultsForm"].ajax input[name="submit_mult"]', function (e) { - e.preventDefault(); - var $button = $(this); - var action = $button.val(); - var $form = $button.closest('form'); - var argsep = CommonParams.get('arg_separator'); - var submitData = $form.serialize() + argsep + 'ajax_request=true' + argsep + 'ajax_page_request=true' + argsep; - Functions.ajaxShowMessage(); - AJAX.source = $form; - - var url; - if (action === 'edit') { - submitData = submitData + argsep + 'default_action=update'; - url = 'index.php?route=/table/change/rows'; - } else if (action === 'copy') { - submitData = submitData + argsep + 'default_action=insert'; - url = 'index.php?route=/table/change/rows'; - } else if (action === 'export') { - url = 'index.php?route=/table/export/rows'; - } else if (action === 'delete') { - url = 'index.php?route=/table/delete/confirm'; - } else { - return; - } - - $.post(url, submitData, AJAX.responseHandler); - }); - - $(document).on('submit', '.maxRowsForm', function () { - var unlimNumRows = $(this).find('input[name="unlim_num_rows"]').val(); - - var maxRowsCheck = Functions.checkFormElementInRange( - this, - 'session_max_rows', - Messages.strNotValidRowNumber, - 1 - ); - var posCheck = Functions.checkFormElementInRange( - this, - 'pos', - Messages.strNotValidRowNumber, - 0, - unlimNumRows > 0 ? unlimNumRows - 1 : null - ); - - return maxRowsCheck && posCheck; - }); - - $('#insertBtn').on('click', function () { - Functions.insertValueQuery(); - }); - - $('#view_as').on('click', function () { - Functions.selectContent(this, sqlBoxLocked, true); - }); - - $('#sqlquery').on('click', function () { - if ($(this).data('textarea-auto-select') === true) { - Functions.selectContent(this, sqlBoxLocked, true); - } - }); -}); // end $() - -/** - * Starting from some th, change the class of all td under it. - * If isAddClass is specified, it will be used to determine whether to add or remove the class. - * - * @param $thisTh - * @param {string} newClass - * @param isAddClass - */ -Sql.changeClassForColumn = function ($thisTh, newClass, isAddClass) { - // index 0 is the th containing the big T - var thIndex = $thisTh.index(); - var hasBigT = $thisTh.closest('tr').children().first().hasClass('column_action'); - // .eq() is zero-based - if (hasBigT) { - thIndex--; - } - var $table = $thisTh.parents('.table_results'); - if (! $table.length) { - $table = $thisTh.parents('table').siblings('.table_results'); - } - var $tds = $table.find('tbody tr').find('td.data').eq(thIndex); - if (isAddClass === undefined) { - $tds.toggleClass(newClass); - } else { - $tds.toggleClass(newClass, isAddClass); - } -}; - -/** - * Handles browse foreign values modal dialog - * - * @param {object} $thisA reference to the browse foreign value link - */ -Sql.browseForeignDialog = function ($thisA) { - var formId = '#browse_foreign_form'; - var showAllId = '#foreign_showAll'; - var tableId = '#browse_foreign_table'; - var filterId = '#input_foreign_filter'; - var $dialog = null; - var argSep = CommonParams.get('arg_separator'); - var params = $thisA.getPostData(); - params += argSep + 'ajax_request=true'; - $.post($thisA.attr('href'), params, function (data) { - // Creates browse foreign value dialog - $dialog = $('
            ').append(data.message).dialog({ - title: Messages.strBrowseForeignValues, - width: Math.min($(window).width() - 100, 700), - maxHeight: $(window).height() - 100, - dialogClass: 'browse_foreign_modal', - close: function () { - // remove event handlers attached to elements related to dialog - $(tableId).off('click', 'td a.foreign_value'); - $(formId).off('click', showAllId); - $(formId).off('submit'); - // remove dialog itself - $(this).remove(); - }, - modal: true - }); - }).done(function () { - var showAll = false; - $(tableId).on('click', 'td a.foreign_value', function (e) { - e.preventDefault(); - var $input = $thisA.prev('input[type=text]'); - // Check if input exists or get CEdit edit_box - if ($input.length === 0) { - $input = $thisA.closest('.edit_area').prev('.edit_box'); - } - // Set selected value as input value - $input.val($(this).data('key')); - // Unchecks the Ignore checkbox for the current row - $input.trigger('change'); - - $dialog.dialog('close'); - }); - $(formId).on('click', showAllId, function () { - showAll = true; - }); - $(formId).on('submit', function (e) { - e.preventDefault(); - // if filter value is not equal to old value - // then reset page number to 1 - if ($(filterId).val() !== $(filterId).data('old')) { - $(formId).find('select[name=pos]').val('0'); - } - var postParams = $(this).serializeArray(); - // if showAll button was clicked to submit form then - // add showAll button parameter to form - if (showAll) { - postParams.push({ - name: $(showAllId).attr('name'), - value: $(showAllId).val() - }); - } - // updates values in dialog - $.post($(this).attr('action') + '&ajax_request=1', postParams, function (data) { - var $obj = $('
            ').html(data.message); - $(formId).html($obj.find(formId).html()); - $(tableId).html($obj.find(tableId).html()); - }); - showAll = false; - }); - }); -}; - -/** - * Get the auto saved query key - * @return {String} - */ -Sql.getAutoSavedKey = function () { - var db = $('input[name="db"]').val(); - var table = $('input[name="table"]').val(); - var key = db; - if (table !== undefined) { - key += '.' + table; - } - return 'autoSavedSql_' + key; -}; - -Sql.checkSavedQuery = function () { - var key = Sql.getAutoSavedKey(); - - if (isStorageSupported('localStorage') && - typeof window.localStorage.getItem(key) === 'string') { - Functions.ajaxShowMessage(Messages.strPreviousSaveQuery); - } else if (Cookies.get(key)) { - Functions.ajaxShowMessage(Messages.strPreviousSaveQuery); - } -}; - -AJAX.registerOnload('sql.js', function () { - $('body').on('click', 'a.browse_foreign', function (e) { - e.preventDefault(); - Sql.browseForeignDialog($(this)); - }); - - /** - * vertical column highlighting in horizontal mode when hovering over the column header - */ - $(document).on('mouseenter', 'th.column_heading.pointer', function () { - Sql.changeClassForColumn($(this), 'hover', true); - }); - $(document).on('mouseleave', 'th.column_heading.pointer', function () { - Sql.changeClassForColumn($(this), 'hover', false); - }); - - /** - * vertical column marking in horizontal mode when clicking the column header - */ - $(document).on('click', 'th.column_heading.marker', function () { - Sql.changeClassForColumn($(this), 'marked'); - }); - - /** - * create resizable table - */ - $('.sqlqueryresults').trigger('makegrid'); - - /** - * Check if there is any saved query - */ - if (codeMirrorEditor || document.sqlform) { - Sql.checkSavedQuery(); - } -}); - -/** - * Profiling Chart - */ -Sql.makeProfilingChart = function () { - if ($('#profilingchart').length === 0 || - $('#profilingchart').html().length !== 0 || - !$.jqplot || !$.jqplot.Highlighter || !$.jqplot.PieRenderer - ) { - return; - } - - var data = []; - $.each(JSON.parse($('#profilingChartData').html()), function (key, value) { - data.push([key, parseFloat(value)]); - }); - - // Remove chart and data divs contents - $('#profilingchart').html('').show(); - $('#profilingChartData').html(''); - - Functions.createProfilingChart('profilingchart', data); -}; - -/** - * initialize profiling data tables - */ -Sql.initProfilingTables = function () { - if (!$.tablesorter) { - return; - } - // Added to allow two direction sorting - $('#profiletable') - .find('thead th') - .off('click mousedown'); - - $('#profiletable').tablesorter({ - widgets: ['zebra'], - sortList: [[0, 0]], - textExtraction: function (node) { - if (node.children.length > 0) { - return node.children[0].innerHTML; - } else { - return node.innerHTML; - } - } - }); - // Added to allow two direction sorting - $('#profilesummarytable') - .find('thead th') - .off('click mousedown'); - - $('#profilesummarytable').tablesorter({ - widgets: ['zebra'], - sortList: [[1, 1]], - textExtraction: function (node) { - if (node.children.length > 0) { - return node.children[0].innerHTML; - } else { - return node.innerHTML; - } - } - }); -}; - -AJAX.registerOnload('sql.js', function () { - Sql.makeProfilingChart(); - Sql.initProfilingTables(); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/table/find_replace.js b/Sources/php_script/script/phpMyAdmin/js/src/table/find_replace.js deleted file mode 100644 index 05cbc08..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/table/find_replace.js +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('table/find_replace.js', function () { - $('#find_replace_form').off('submit'); - $('#toggle_find').off('click'); -}); - -/** - * Bind events - */ -AJAX.registerOnload('table/find_replace.js', function () { - $('
            ') - .insertAfter('#find_replace_form') - .hide(); - - $('#toggle_find') - .html(Messages.strHideFindNReplaceCriteria) - .on('click', function () { - var $link = $(this); - $('#find_replace_form').slideToggle(); - if ($link.text() === Messages.strHideFindNReplaceCriteria) { - $link.text(Messages.strShowFindNReplaceCriteria); - } else { - $link.text(Messages.strHideFindNReplaceCriteria); - } - return false; - }); - - $('#find_replace_form').on('submit', function (e) { - e.preventDefault(); - var findReplaceForm = $('#find_replace_form'); - Functions.prepareForAjaxRequest(findReplaceForm); - var $msgbox = Functions.ajaxShowMessage(); - $.post(findReplaceForm.attr('action'), findReplaceForm.serialize(), function (data) { - Functions.ajaxRemoveMessage($msgbox); - if (data.success === true) { - $('#toggle_find_div').show(); - $('#toggle_find').trigger('click'); - $('#sqlqueryresultsouter').html(data.preview); - } else { - $('#sqlqueryresultsouter').html(data.error); - } - }); - }); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/table/relation.js b/Sources/php_script/script/phpMyAdmin/js/src/table/relation.js deleted file mode 100644 index ef1afca..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/table/relation.js +++ /dev/null @@ -1,255 +0,0 @@ -/** - * for table relation - */ - -var TableRelation = {}; - -TableRelation.showHideClauses = function ($thisDropdown) { - if ($thisDropdown.val() === '') { - $thisDropdown.parent().nextAll('span').hide(); - } else { - if ($thisDropdown.is('select[name^="destination_foreign_column"]')) { - $thisDropdown.parent().nextAll('span').show(); - } - } -}; - -/** - * Sets dropdown options to values - * @param $dropdown - * @param values - * @param selectedValue - * @return {void} - */ -TableRelation.setDropdownValues = function ($dropdown, values, selectedValue) { - $dropdown.empty(); - var optionsAsString = ''; - // add an empty string to the beginning for empty selection - values.unshift(''); - $.each(values, function () { - optionsAsString += ''; - }); - $dropdown.append($(optionsAsString)); -}; - -/** - * Retrieves and populates dropdowns to the left based on the selected value - * - * @param $dropdown the dropdown whose value got changed - * @return {void} - */ -TableRelation.getDropdownValues = function ($dropdown) { - var foreignDb = null; - var foreignTable = null; - var $databaseDd; - var $tableDd; - var $columnDd; - var foreign = ''; - // if the changed dropdown is for foreign key constraints - if ($dropdown.is('select[name^="destination_foreign"]')) { - $databaseDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_db"]'); - $tableDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_table"]'); - $columnDd = $dropdown.parent().parent().parent().find('select[name^="destination_foreign_column"]'); - foreign = '_foreign'; - } else { // internal relations - $databaseDd = $dropdown.parent().find('select[name^="destination_db"]'); - $tableDd = $dropdown.parent().find('select[name^="destination_table"]'); - $columnDd = $dropdown.parent().find('select[name^="destination_column"]'); - } - - // if the changed dropdown is a database selector - if ($dropdown.is('select[name^="destination' + foreign + '_db"]')) { - foreignDb = $dropdown.val(); - // if no database is selected empty table and column dropdowns - if (foreignDb === '') { - TableRelation.setDropdownValues($tableDd, []); - TableRelation.setDropdownValues($columnDd, []); - return; - } - } else { // if a table selector - foreignDb = $databaseDd.val(); - foreignTable = $dropdown.val(); - // if no table is selected empty the column dropdown - if (foreignTable === '') { - TableRelation.setDropdownValues($columnDd, []); - return; - } - } - var $msgbox = Functions.ajaxShowMessage(); - var $form = $dropdown.parents('form'); - var $db = $form.find('input[name="db"]').val(); - var $table = $form.find('input[name="table"]').val(); - var argsep = CommonParams.get('arg_separator'); - var params = 'getDropdownValues=true' + argsep + 'ajax_request=true' + - argsep + 'db=' + encodeURIComponent($db) + - argsep + 'table=' + encodeURIComponent($table) + - argsep + 'foreign=' + (foreign !== '') + - argsep + 'foreignDb=' + encodeURIComponent(foreignDb) + - (foreignTable !== null ? - argsep + 'foreignTable=' + encodeURIComponent(foreignTable) : '' - ); - var $server = $form.find('input[name="server"]'); - if ($server.length > 0) { - params += argsep + 'server=' + $form.find('input[name="server"]').val(); - } - $.ajax({ - type: 'POST', - url: 'index.php?route=/table/relation', - data: params, - dataType: 'json', - success: function (data) { - Functions.ajaxRemoveMessage($msgbox); - if (typeof data !== 'undefined' && data.success) { - // if the changed dropdown is a database selector - if (foreignTable === null) { - // set values for table and column dropdowns - TableRelation.setDropdownValues($tableDd, data.tables); - TableRelation.setDropdownValues($columnDd, []); - } else { // if a table selector - // set values for the column dropdown - var primary = null; - if (typeof data.primary !== 'undefined' - && 1 === data.primary.length - ) { - primary = data.primary[0]; - } - TableRelation.setDropdownValues($columnDd.first(), data.columns, primary); - TableRelation.setDropdownValues($columnDd.slice(1), data.columns); - } - } else { - Functions.ajaxShowMessage(data.error, false); - } - } - }); -}; - -/** - * Unbind all event handlers before tearing down a page - */ -AJAX.registerTeardown('table/relation.js', function () { - $('body').off('change', - 'select[name^="destination_db"], ' + - 'select[name^="destination_table"], ' + - 'select[name^="destination_foreign_db"], ' + - 'select[name^="destination_foreign_table"]' - ); - $('body').off('click', 'a.add_foreign_key_field'); - $('body').off('click', 'a.add_foreign_key'); - $('a.drop_foreign_key_anchor.ajax').off('click'); -}); - -AJAX.registerOnload('table/relation.js', function () { - /** - * Ajax event handler to fetch table/column dropdown values. - */ - $('body').on('change', - 'select[name^="destination_db"], ' + - 'select[name^="destination_table"], ' + - 'select[name^="destination_foreign_db"], ' + - 'select[name^="destination_foreign_table"]', - function () { - TableRelation.getDropdownValues($(this)); - } - ); - - /** - * Ajax event handler to add a column to a foreign key constraint. - */ - $('body').on('click', 'a.add_foreign_key_field', function (event) { - event.preventDefault(); - event.stopPropagation(); - - // Add field. - $(this) - .prev('span') - .clone(true, true) - .insertBefore($(this)) - .find('select') - .val(''); - - // Add foreign field. - var $sourceElem = $('select[name^="destination_foreign_column[' + - $(this).attr('data-index') + ']"]').last().parent(); - $sourceElem - .clone(true, true) - .insertAfter($sourceElem) - .find('select') - .val(''); - }); - - /** - * Ajax event handler to add a foreign key constraint. - */ - $('body').on('click', 'a.add_foreign_key', function (event) { - event.preventDefault(); - event.stopPropagation(); - - var $prevRow = $(this).closest('tr').prev('tr'); - var $newRow = $prevRow.clone(true, true); - - // Update serial number. - var currIndex = $newRow - .find('a.add_foreign_key_field') - .attr('data-index'); - var newIndex = parseInt(currIndex) + 1; - $newRow.find('a.add_foreign_key_field').attr('data-index', newIndex); - - // Update form parameter names. - $newRow.find('select[name^="foreign_key_fields_name"]') - .not($newRow.find('select[name^="foreign_key_fields_name"]').first()) - .find('select[name^="destination_foreign_column"]') - .not($newRow.find('select[name^="foreign_key_fields_name"]') - .not($newRow.find('select[name^="foreign_key_fields_name"]').first()) - .find('select[name^="destination_foreign_column"]').first() - ).each(function () { - $(this).parent().remove(); - }); - $newRow.find('input, select').each(function () { - $(this).attr('name', - $(this).attr('name').replace(/\d/, newIndex) - ); - }); - $newRow.find('input[type="text"]').each(function () { - $(this).val(''); - }); - // Finally add the row. - $newRow.insertAfter($prevRow); - }); - - /** - * Ajax Event handler for 'Drop Foreign key' - */ - $('a.drop_foreign_key_anchor.ajax').on('click', function (event) { - event.preventDefault(); - var $anchor = $(this); - - // Object containing reference to the current field's row - var $currRow = $anchor.parents('tr'); - - var dropQuery = Functions.escapeHtml( - $currRow.children('td') - .children('.drop_foreign_key_msg') - .val() - ); - - var question = Functions.sprintf(Messages.strDoYouReally, dropQuery); - - $anchor.confirm(question, $anchor.attr('href'), function (url) { - var $msg = Functions.ajaxShowMessage(Messages.strDroppingForeignKey, false); - var params = Functions.getJsConfirmCommonParam(this, $anchor.getPostData()); - $.post(url, params, function (data) { - if (data.success === true) { - Functions.ajaxRemoveMessage($msg); - CommonActions.refreshMain(false, function () { - // Do nothing - }); - } else { - Functions.ajaxShowMessage(Messages.strErrorProcessingRequest + ' : ' + data.error, false); - } - }); // end $.post() - }); - }); // end Drop Foreign key - - var windowWidth = $(window).width(); - $('.jsresponsive').css('max-width', (windowWidth - 35) + 'px'); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/src/transformations/sql_editor.js b/Sources/php_script/script/phpMyAdmin/js/src/transformations/sql_editor.js deleted file mode 100644 index 0e0f7fa..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/src/transformations/sql_editor.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * SQL syntax highlighting transformation plugin js - * - * @package PhpMyAdmin - */ -AJAX.registerOnload('transformations/sql_editor.js', function () { - $('textarea.transform_sql_editor').each(function () { - Functions.getSqlEditor($(this), {}, 'both'); - }); -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/bootstrap/bootstrap.bundle.min.js b/Sources/php_script/script/phpMyAdmin/js/vendor/bootstrap/bootstrap.bundle.min.js deleted file mode 100644 index cc0a255..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/vendor/bootstrap/bootstrap.bundle.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v5.1.3 (https://getbootstrap.com/) - * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t="transitionend",e=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?"element":null==(l=r)?`${l}`:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option "${n}" provided type "${a}" but expected type "${s}".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&"visible"===getComputedStyle(t).getPropertyValue("visibility"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),h=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute("data-bs-no-jquery")?t:null},p=[],m=()=>"rtl"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(p.length||document.addEventListener("DOMContentLoaded",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{"function"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\..*)\.|.*/,w=/\..*/,E=/::\d+$/,A={};let T=1;const O={mouseenter:"mouseover",mouseleave:"mouseout"},C=/^(mouseenter|mouseleave)/i,k=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;sfunction(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,""),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(".");if(void 0!==o){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach((i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach((o=>{if(o.includes(n)){const n=s[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h=l[r]||{};Object.keys(h).forEach((i=>{const n=i.replace(E,"");if(!a||e.includes(n)){const e=h[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=f(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent("HTMLEvents"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach((t=>{Object.defineProperty(d,t,{get:()=>i[t]})})),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};class B{constructor(t){(t=r(t))&&(this._element=t,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t=>{this[t]=null}))}_queueCallback(t,e,i=!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.1.3"}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;j.on(document,i,`[data-bs-dismiss="${s}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),c(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return"alert"}close(){if(j.trigger(this._element,"close.bs.alert").defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,"closed.bs.alert"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(W,"close"),g(W);const $='[data-bs-toggle="button"]';class z extends B{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}function q(t){return"true"===t||"false"!==t&&(t===Number(t).toString()?Number(t):""===t||"null"===t?null:t)}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}j.on(document,"click.bs.button.data-api",$,(t=>{t.preventDefault();const e=t.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter((t=>t.startsWith("bs"))).forEach((i=>{let n=i.replace(/^bs/,"");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=q(t.dataset[i])})),e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(", ");return this.find(e,t).filter((t=>!c(t)&&l(t)))}},K="carousel",X={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},Y={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},Q="next",G="prev",Z="left",J="right",tt={ArrowLeft:J,ArrowRight:Z},et="slid.bs.carousel",it="active",nt=".active.carousel-item";class st extends B{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(".carousel-indicators",this._element),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(".carousel-item-next, .carousel-item-prev",this._element)&&(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(nt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void j.one(this._element,et,(()=>this.to(t)));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&j.on(this._element,"keydown.bs.carousel",(t=>this._keydown(t))),"hover"===this._config.pause&&(j.on(this._element,"mouseenter.bs.carousel",(t=>this.pause(t))),j.on(this._element,"mouseleave.bs.carousel",(t=>this.cycle(t)))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>this._pointerEvent&&("pen"===t.pointerType||"touch"===t.pointerType),e=e=>{t(e)?this.touchStartX=e.clientX:this._pointerEvent||(this.touchStartX=e.touches[0].clientX)},i=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},n=e=>{t(e)&&(this.touchDeltaX=e.clientX-this.touchStartX),this._handleSwipe(),"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((t=>this.cycle(t)),500+this._config.interval))};V.find(".carousel-item img",this._element).forEach((t=>{j.on(t,"dragstart.bs.carousel",(t=>t.preventDefault()))})),this._pointerEvent?(j.on(this._element,"pointerdown.bs.carousel",(t=>e(t))),j.on(this._element,"pointerup.bs.carousel",(t=>n(t))),this._element.classList.add("pointer-event")):(j.on(this._element,"touchstart.bs.carousel",(t=>e(t))),j.on(this._element,"touchmove.bs.carousel",(t=>i(t))),j.on(this._element,"touchend.bs.carousel",(t=>n(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(".carousel-item",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,"slide.bs.carousel",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(".active",this._indicatorsElement);e.classList.remove(it),e.removeAttribute("aria-current");const i=V.find("[data-bs-target]",this._indicatorsElement);for(let e=0;e{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains("slide")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=st.getOrCreateInstance(t,e);let{_config:n}=i;"object"==typeof e&&(n={...n,...e});const s="string"==typeof e?e:n.slide;if("number"==typeof e)i.to(e);else if("string"==typeof s){if(void 0===i[s])throw new TypeError(`No method named "${s}"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains("carousel"))return;const i={...U.getDataAttributes(e),...U.getDataAttributes(this)},s=this.getAttribute("data-bs-slide-to");s&&(i.interval=!1),st.carouselInterface(e,i),s&&st.getInstance(e).to(s),t.preventDefault()}}j.on(document,"click.bs.carousel.data-api","[data-bs-slide], [data-bs-slide-to]",st.dataApiClickHandler),j.on(window,"load.bs.carousel.data-api",(()=>{const t=V.find('[data-bs-ride="carousel"]');for(let e=0,i=t.length;et===this._element));null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(ut,this._config.parent);e=V.find(".collapse.show, .collapse.collapsing",this._config.parent).filter((e=>!t.includes(e)))}const i=V.findOne(this._selector);if(e.length){const n=e.find((t=>i!==t));if(t=n?pt.getInstance(n):null,t&&t._isTransitioning)return}if(j.trigger(this._element,"show.bs.collapse").defaultPrevented)return;e.forEach((e=>{i!==e&&pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,"bs.collapse",null)}));const n=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]="",j.trigger(this._element,"shown.bs.collapse")}),this._element,!0),this._element.style[n]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,"hide.bs.collapse").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e=this._triggerArray.length;for(let t=0;t{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,"hidden.bs.collapse")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_getConfig(t){return(t={...rt,...U.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=r(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e=>!t.includes(e))).forEach((t=>{const e=n(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach((t=>{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute("aria-expanded",e)}))}static jQueryInterface(t){return this.each((function(){const e={};"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=pt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}j.on(document,"click.bs.collapse.data-api",ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this);V.find(e).forEach((t=>{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt="top",gt="bottom",_t="right",bt="left",vt="auto",yt=[mt,gt,_t,bt],wt="start",Et="end",At="clippingParents",Tt="viewport",Ot="popper",Ct="reference",kt=yt.reduce((function(t,e){return t.concat([e+"-"+wt,e+"-"+Et])}),[]),Lt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+"-"+wt,e+"-"+Et])}),[]),xt="beforeRead",Dt="read",St="afterRead",Nt="beforeMain",It="main",Pt="afterMain",jt="beforeWrite",Mt="write",Ht="afterWrite",Bt=[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||"").toLowerCase():null}function Wt(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return"undefined"!=typeof ShadowRoot&&(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Rt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});zt(n)&&Rt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function Ut(t){return t.split("-")[0]}function Vt(t,e){var i=t.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e=Vt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return["table","td","th"].indexOf(Rt(t))>=0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return"html"===Rt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)&&"fixed"!==Yt(t).position?t.offsetParent:null}function te(t){for(var e=Wt(t),i=Jt(t);i&&Qt(i)&&"static"===Yt(i).position;)i=Jt(i);return i&&("html"===Rt(i)||"body"===Rt(i)&&"static"===Yt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf("firefox");if(-1!==navigator.userAgent.indexOf("Trident")&&zt(t)&&"fixed"===Yt(t).position)return null;for(var i=Zt(t);zt(i)&&["html","body"].indexOf(Rt(i))<0;){var n=Yt(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function ee(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}var ie=Math.max,ne=Math.min,se=Math.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Ut(i.placement),l=ee(a),c=[bt,_t].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return re("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Kt(o),u="y"===l?mt:bt,f="y"===l?gt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=te(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=oe(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Xt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ce(t){return t.split("-")[1]}var he={top:"auto",right:"auto",bottom:"auto",left:"auto"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):"function"==typeof h?h(r):r,u=d.x,f=void 0===u?0:u,p=d.y,m=void 0===p?0:p,g=r.hasOwnProperty("x"),_=r.hasOwnProperty("y"),b=bt,v=mt,y=window;if(c){var w=te(i),E="clientHeight",A="clientWidth";w===Wt(i)&&"static"!==Yt(w=Gt(i)).position&&"absolute"===a&&(E="scrollHeight",A="scrollWidth"),w=w,s!==mt&&(s!==bt&&s!==_t||o!==Et)||(v=gt,m-=w[E]-n.height,m*=l?1:-1),s!==bt&&(s!==mt&&s!==gt||o!==Et)||(b=_t,f-=w[A]-n.width,f*=l?1:-1)}var T,O=Object.assign({position:a},c&&he);return l?Object.assign({},O,((T={})[v]=_?"0":"",T[b]=g?"0":"",T.transform=(y.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",T)):Object.assign({},O,((e={})[v]=_?m+"px":"",e[b]=g?f+"px":"",e.transform="",e))}const ue={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var fe={passive:!0};const pe={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Wt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,fe)})),a&&l.addEventListener("resize",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,fe)})),a&&l.removeEventListener("resize",i.update,fe)}},data:{}};var me={left:"right",right:"left",bottom:"top",top:"bottom"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e={start:"end",end:"start"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Wt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e=Yt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return["html","body","#document"].indexOf(Rt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Wt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e===Tt?Te(function(t){var e=Wt(t),i=Gt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e=Vt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=Gt(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ie(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ie(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return"rtl"===Yt(s||i).direction&&(a+=ie(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Ut(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case mt:e={x:a,y:i.y-n.height};break;case gt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?ee(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Et:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?At:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ot:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=re("number"!=typeof p?p:ae(p,yt)),g=h===Ot?Ct:Ot,_=t.rects.popper,b=t.elements[u?g:h],v=function(t,e,i){var n="clippingParents"===e?function(t){var e=Ae(Zt(t)),i=["absolute","fixed"].indexOf(Yt(t).position)>=0&&zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)&&Xt(t,i)&&"body"!==Rt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Oe(t,i);return e.top=ie(n.top,e.top),e.right=ne(n.right,e.right),e.bottom=ne(n.bottom,e.bottom),e.left=ie(n.left,e.left),e}),Oe(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y=Vt(t.elements.reference),w=Ce({reference:y,element:_,strategy:"absolute",placement:s}),E=Te(Object.assign({},_,w)),A=h===Ot?E:y,T={top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O=t.modifiersData.offset;if(h===Ot&&O){var C=O[s];Object.keys(T).forEach((function(t){var e=[_t,gt].indexOf(t)>=0?1:-1,i=[mt,gt].indexOf(t)>=0?"y":"x";T[t]+=C[i]*e}))}return T}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Lt:l,h=ce(n),d=h?a?kt:kt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=Ut(g),b=l||(_!==g&&p?function(t){if(Ut(t)===vt)return[];var e=ge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)===vt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O=0,D=x?"width":"height",S=ke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?_t:bt:L?gt:mt;y[D]>w[D]&&(N=ge(N));var I=ge(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]>=0}))}const Ne={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:"reference"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},Ie={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=Lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Ut(t),s=[bt,mt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Ce({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},je={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Ut(e.placement),b=ce(e.placement),v=!b,y=ee(_),w="x"===y?"y":"x",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k="y"===y?mt:bt,L="y"===y?gt:_t,x="y"===y?"height":"width",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P=b===wt?A[x]:T[x],j=b===wt?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?Kt(M):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],$=oe(0,A[x],H[x]),z=v?A[x]/2-I-$-R-O:P-$-R-O,q=v?-A[x]/2+I+$+W+O:j+$+W+O,F=e.elements.arrow&&te(e.elements.arrow),U=F?"y"===y?F.clientTop||0:F.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+z-V-U,X=E[y]+q-V;if(o){var Y=oe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q="x"===y?mt:bt,G="x"===y?gt:_t,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=oe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:["offset"]};function Me(t,e,i){void 0===i&&(i=!1);var n=zt(e);zt(e)&&function(t){var e=t.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r=Gt(e),a=Vt(t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(n||!n&&!i)&&(("body"!==Rt(e)||we(r))&&(l=(s=e)!==Wt(s)&&zt(s)?{scrollLeft:(o=s).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c=Vt(e)).x+=e.clientLeft,c.y+=e.clientTop):r&&(c.x=ye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:"bottom",modifiers:[],strategy:"absolute"};function Re(){for(var t=arguments.length,e=new Array(t),i=0;ij.on(t,"mouseover",d))),this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,"shown.bs.dropdown",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){j.trigger(this._element,"hide.bs.dropdown",t).defaultPrevented||("ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute("aria-expanded","false"),U.removeDataAttribute(this._menu,"popper"),j.trigger(this._element,"hidden.bs.dropdown",t))}_getConfig(t){if(t={...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),"object"==typeof t.reference&&!o(t.reference)&&"function"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return t}_createPopper(t){if(void 0===Fe)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;"parent"===this._config.reference?e=t:o(this._config.reference)?e=r(this._config.reference):"object"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find((t=>"applyStyles"===t.name&&!1===t.enabled));this._popper=qe(e,this._menu,i),n&&U.setDataAttribute(this._menu,"popper","static")}_isShown(t=this._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains("dropend"))return ri;if(t.classList.contains("dropstart"))return ai;const e="end"===getComputedStyle(this._menu).getPropertyValue("--bs-position").trim();return t.classList.contains("dropup")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(".navbar")}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return"static"===this._config.display&&(t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,..."function"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter(l);i.length&&v(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||"keyup"===t.type&&"Tab"!==t.key))return;const e=V.find(ti);for(let i=0,n=e.length;ie+t)),this._setElementAttributes(di,"paddingRight",(e=>e+t)),this._setElementAttributes(ui,"marginRight",(e=>e-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,"paddingRight"),this._resetElementAttributes(di,"paddingRight"),this._resetElementAttributes(ui,"marginRight")}_saveInitialAttribute(t,e){const i=t.style[e];i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=U.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]=i)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const pi={className:"modal-backdrop",isVisible:!0,isAnimated:!1,rootElement:"body",clickCallback:null},mi={className:"string",isVisible:"boolean",isAnimated:"boolean",rootElement:"(element|string)",clickCallback:"(function|null)"},gi="show",_i="mousedown.bs.backdrop";class bi{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()=>{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()=>{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_getConfig(t){return(t={...pi,..."object"==typeof t?t:{}}).rootElement=r(t.rootElement),a("backdrop",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()=>{_(this._config.clickCallback)})),this._isAppended=!0)}dispose(){this._isAppended&&(j.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi={trapElement:null,autofocus:!0},yi={trapElement:"element",autofocus:"boolean"},wi=".bs.focustrap",Ei="backward";class Ai{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),j.off(document,wi),j.on(document,"focusin.bs.focustrap",(t=>this._handleFocusin(t))),j.on(document,"keydown.tab.bs.focustrap",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,j.off(document,wi))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=V.focusableChildren(i);0===n.length?i.focus():this._lastTabNavDirection===Ei?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ei:"forward")}_getConfig(t){return t={...vi,..."object"==typeof t?t:{}},a("focustrap",t,yi),t}}const Ti="modal",Oi="Escape",Ci={backdrop:!0,keyboard:!0,focus:!0},ki={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean"},Li="hidden.bs.modal",xi="show.bs.modal",Di="resize.bs.modal",Si="click.dismiss.bs.modal",Ni="keydown.dismiss.bs.modal",Ii="mousedown.dismiss.bs.modal",Pi="modal-open",ji="show",Mi="modal-static";class Hi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()=>{j.one(this._element,"mouseup.dismiss.bs.modal",(t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,"hide.bs.modal").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()=>this._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t=>j.off(t,".bs.modal"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t={...Ci,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(".modal-body",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&u(this._element),this._element.classList.add(ji),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,j.trigger(this._element,"shown.bs.modal",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t=>{this._config.keyboard&&t.key===Oi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!==Oi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()=>this._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():"static"===this._config.backdrop&&this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(j.trigger(this._element,"hidePrevented.bs.modal").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&"hidden"===i.overflowY||t.contains(Mi)||(n||(i.overflowY="hidden"),t.add(Mi),this._queueCallback((()=>{t.remove(Mi),n||this._queueCallback((()=>{i.overflowY=""}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=`${e}px`),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=Hi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}j.on(document,"click.bs.modal.data-api",'[data-bs-toggle="modal"]',(function(t){const e=n(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),j.one(e,xi,(t=>{t.defaultPrevented||j.one(e,Li,(()=>{l(this)&&this.focus()}))}));const i=V.findOne(".modal.show");i&&Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi="offcanvas",Ri={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:"boolean",keyboard:"boolean",scroll:"boolean"},$i="show",zi=".offcanvas.show",qi="hidden.bs.offcanvas";class Fi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,"show.bs.offcanvas",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility="visible",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add($i),this._queueCallback((()=>{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,"shown.bs.offcanvas",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(j.trigger(this._element,"hide.bs.offcanvas").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()=>{this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._element.style.visibility="hidden",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ri,...U.getDataAttributes(this._element),..."object"==typeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:"offcanvas-backdrop",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,"keydown.dismiss.bs.offcanvas",(t=>{this._config.keyboard&&"Escape"===t.key&&this.hide()}))}static jQueryInterface(t){return this.each((function(){const e=Fi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}j.on(document,"click.bs.offcanvas.data-api",'[data-bs-toggle="offcanvas"]',(function(t){const e=n(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this))return;j.one(e,qi,(()=>{l(this)&&this.focus()}));const i=V.findOne(zi);i&&i!==e&&Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,"load.bs.offcanvas.data-api",(()=>V.find(zi).forEach((t=>Fi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Vi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ki=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i,Xi=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n=e.filter((t=>t instanceof RegExp));for(let t=0,e=n.length;t{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi="tooltip",Gi=new Set(["sanitize","allowList","sanitizeFn"]),Zi={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(array|string|function)",container:"(string|element|boolean)",fallbackPlacements:"array",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",allowList:"object",popperConfig:"(null|object|function)"},Ji={AUTO:"auto",TOP:"top",RIGHT:m()?"left":"right",BOTTOM:"bottom",LEFT:m()?"right":"left"},tn={animation:!0,template:'',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:[0,0],container:!1,fallbackPlacements:["top","right","bottom","left"],boundary:"clippingParents",customClass:"",sanitize:!0,sanitizeFn:null,allowList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},nn="fade",sn="show",on="show",rn="out",an=".tooltip-inner",ln=".modal",cn="hide.bs.modal",hn="hover",dn="focus";class un extends B{constructor(t,e){if(void 0===Fe)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this.isWithContent()||!this._isEnabled)return;const t=j.trigger(this._element,this.constructor.Event.SHOW),e=h(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;"tooltip"===this.constructor.NAME&&this.tip&&this.getTitle()!==this.tip.querySelector(an).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute("id",s),this._element.setAttribute("aria-describedby",s),this._config.animation&&n.classList.add(nn);const o="function"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=qe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(" ")),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>{j.on(t,"mouseover",d)}));const c=this.tip.classList.contains(nn);this._queueCallback((()=>{const t=this._hoverState;this._hoverState=null,j.trigger(this._element,this.constructor.Event.SHOWN),t===rn&&this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t=this.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),"ontouchstart"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,"mouseover",d))),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(nn);this._queueCallback((()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&t.remove(),this._cleanTipClass(),this._element.removeAttribute("aria-describedby"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState=""}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement("div");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n=V.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return o(e)?(e=r(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML="",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Yi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute("data-bs-original-title")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return"right"===t?"end":"left"===t?"start":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return"function"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"onChange",enabled:!0,phase:"afterWrite",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,..."function"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(" ").forEach((t=>{if("click"===t)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t=>this.toggle(t)));else if("manual"!==t){const e=t===hn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=t===hn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t=>this._enter(t))),j.on(this._element,i,this._config.selector,(t=>this._leave(t)))}})),this._hideModalHandler=()=>{this._element&&this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:"manual",selector:""}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute("title"),e=typeof this._element.getAttribute("data-bs-original-title");(t||"string"!==e)&&(this._element.setAttribute("data-bs-original-title",t||""),!t||this._element.getAttribute("aria-label")||this._element.textContent||this._element.setAttribute("aria-label",t),this._element.setAttribute("title",""))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusin"===t.type?dn:hn]=!0),e.getTipElement().classList.contains(sn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e._config.delay&&e._config.delay.show?e._timeout=setTimeout((()=>{e._hoverState===on&&e.show()}),e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger["focusout"===t.type?dn:hn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=rn,e._config.delay&&e._config.delay.hide?e._timeout=setTimeout((()=>{e._hoverState===rn&&e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=U.getDataAttributes(this._element);return Object.keys(e).forEach((t=>{Gi.has(t)&&delete e[t]})),(t={...this.constructor.Default,...e,..."object"==typeof t&&t?t:{}}).container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize&&(t.template=Yi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\s)${this._getBasicClassPrefix()}\\S+`,"g"),i=t.getAttribute("class").match(e);null!==i&&i.length>0&&i.map((t=>t.trim())).forEach((e=>t.classList.remove(e)))}_getBasicClassPrefix(){return"bs-tooltip"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(un);const fn={...un.Default,placement:"right",offset:[0,8],trigger:"click",content:"",template:''},pn={...un.DefaultType,content:"(string|element|function)"},mn={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"};class gn extends un{static get Default(){return fn}static get NAME(){return"popover"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),".popover-header"),this._sanitizeAndSetContent(t,this._getContent(),".popover-body")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return"bs-popover"}static jQueryInterface(t){return this.each((function(){const e=gn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}g(gn);const _n="scrollspy",bn={offset:10,method:"auto",target:""},vn={offset:"number",method:"string",target:"(string|element)"},yn="active",wn=".nav-link, .list-group-item, .dropdown-item",En="position";class An extends B{constructor(t,e){super(t),this._scrollElement="BODY"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,j.on(this._scrollElement,"scroll.bs.scrollspy",(()=>this._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t=this._scrollElement===this._scrollElement.window?"offset":En,e="auto"===this._config.method?t:this._config.method,n=e===En?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(wn,this._config.target).map((t=>{const s=i(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t=>t)).sort(((t,e)=>t[0]-e[0])).forEach((t=>{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,".bs.scrollspy"),super.dispose()}_getConfig(t){return(t={...bn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}}).target=r(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t`${e}[data-bs-target="${t}"],${e}[href="${t}"]`)),i=V.findOne(e.join(","),this._config.target);i.classList.add(yn),i.classList.contains("dropdown-item")?V.findOne(".dropdown-toggle",i.closest(".dropdown")).classList.add(yn):V.parents(i,".nav, .list-group").forEach((t=>{V.prev(t,".nav-link, .list-group-item").forEach((t=>t.classList.add(yn))),V.prev(t,".nav-item").forEach((t=>{V.children(t,".nav-link").forEach((t=>t.classList.add(yn)))}))})),j.trigger(this._scrollElement,"activate.bs.scrollspy",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t=>t.classList.contains(yn))).forEach((t=>t.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e=An.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(window,"load.bs.scrollspy.data-api",(()=>{V.find('[data-bs-spy="scroll"]').forEach((t=>new An(t)))})),g(An);const Tn="active",On="fade",Cn="show",kn=".active",Ln=":scope > li > .active";class xn extends B{static get NAME(){return"tab"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Tn))return;let t;const e=n(this._element),i=this._element.closest(".nav, .list-group");if(i){const e="UL"===i.nodeName||"OL"===i.nodeName?Ln:kn;t=V.find(e,i),t=t[t.length-1]}const s=t?j.trigger(t,"hide.bs.tab",{relatedTarget:this._element}):null;if(j.trigger(this._element,"show.bs.tab",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{j.trigger(t,"hidden.bs.tab",{relatedTarget:this._element}),j.trigger(this._element,"shown.bs.tab",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?V.children(e,kn):V.find(Ln,e))[0],s=i&&n&&n.classList.contains(On),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t=V.findOne(":scope > .dropdown-menu .active",e.parentNode);t&&t.classList.remove(Tn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}t.classList.add(Tn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),u(t),t.classList.contains(On)&&t.classList.add(Cn);let n=t.parentNode;if(n&&"LI"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains("dropdown-menu")){const e=t.closest(".dropdown");e&&V.find(".dropdown-toggle",e).forEach((t=>t.classList.add(Tn))),t.setAttribute("aria-expanded",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}j.on(document,"click.bs.tab.data-api",'[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn="toast",Sn="hide",Nn="show",In="showing",Pn={animation:"boolean",autohide:"boolean",delay:"number"},jn={animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,"show.bs.toast").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.remove(In),j.trigger(this._element,"shown.bs.toast"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)&&(j.trigger(this._element,"hide.bs.toast").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,"hidden.bs.toast")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)&&this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t={...jn,...U.getDataAttributes(this._element),..."object"==typeof t&&t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,"mouseover.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"mouseout.bs.toast",(t=>this._onInteraction(t,!1))),j.on(this._element,"focusin.bs.toast",(t=>this._onInteraction(t,!0))),j.on(this._element,"focusout.bs.toast",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Mn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}})); -//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/codemirror/addon/runmode/runmode.js b/Sources/php_script/script/phpMyAdmin/js/vendor/codemirror/addon/runmode/runmode.js deleted file mode 100644 index f5d58e2..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/vendor/codemirror/addon/runmode/runmode.js +++ /dev/null @@ -1,76 +0,0 @@ -// CodeMirror, copyright (c) by Marijn Haverbeke and others -// Distributed under an MIT license: https://codemirror.net/LICENSE - -(function(mod) { - if (typeof exports == "object" && typeof module == "object") // CommonJS - mod(require("../../lib/codemirror")); - else if (typeof define == "function" && define.amd) // AMD - define(["../../lib/codemirror"], mod); - else // Plain browser env - mod(CodeMirror); -})(function(CodeMirror) { -"use strict"; - -CodeMirror.runMode = function(string, modespec, callback, options) { - var mode = CodeMirror.getMode(CodeMirror.defaults, modespec); - var tabSize = (options && options.tabSize) || CodeMirror.defaults.tabSize; - - // Create a tokenizing callback function if passed-in callback is a DOM element. - if (callback.appendChild) { - var ie = /MSIE \d/.test(navigator.userAgent); - var ie_lt9 = ie && (document.documentMode == null || document.documentMode < 9); - var node = callback, col = 0; - node.innerHTML = ""; - callback = function(text, style) { - if (text == "\n") { - // Emitting LF or CRLF on IE8 or earlier results in an incorrect display. - // Emitting a carriage return makes everything ok. - node.appendChild(document.createTextNode(ie_lt9 ? '\r' : text)); - col = 0; - return; - } - var content = ""; - // replace tabs - for (var pos = 0;;) { - var idx = text.indexOf("\t", pos); - if (idx == -1) { - content += text.slice(pos); - col += text.length - pos; - break; - } else { - col += idx - pos; - content += text.slice(pos, idx); - var size = tabSize - col % tabSize; - col += size; - for (var i = 0; i < size; ++i) content += " "; - pos = idx + 1; - } - } - // Create a node with token style and append it to the callback DOM element. - if (style) { - var sp = node.appendChild(document.createElement("span")); - sp.className = "cm-" + style.replace(/ +/g, " cm-"); - sp.appendChild(document.createTextNode(content)); - } else { - node.appendChild(document.createTextNode(content)); - } - }; - } - - var lines = CodeMirror.splitLines(string), state = (options && options.state) || CodeMirror.startState(mode); - for (var i = 0, e = lines.length; i < e; ++i) { - if (i) callback("\n"); - var stream = new CodeMirror.StringStream(lines[i], null, { - lookAhead: function(n) { return lines[i + n] }, - baseToken: function() {} - }); - if (!stream.string && mode.blankLine) mode.blankLine(state); - while (!stream.eol()) { - var style = mode.token(stream, state); - callback(stream.current(), style, i, stream.start, state, mode); - stream.start = stream.pos; - } - } -}; - -}); diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js b/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js deleted file mode 100644 index 3cedcfd..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js +++ /dev/null @@ -1,203 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.9 - * Revision: dff2f04 - * - * Copyright (c) 2009-2016 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - /** - * Class: $.jqplot.CanvasAxisLabelRenderer - * Renderer to draw axis labels with a canvas element to support advanced - * featrues such as rotated text. This renderer uses a separate rendering engine - * to draw the text on the canvas. Two modes of rendering the text are available. - * If the browser has native font support for canvas fonts (currently Mozila 3.5 - * and Safari 4), you can enable text rendering with the canvas fillText method. - * You do so by setting the "enableFontSupport" option to true. - * - * Browsers lacking native font support will have the text drawn on the canvas - * using the Hershey font metrics. Even if the "enableFontSupport" option is true - * non-supporting browsers will still render with the Hershey font. - * - */ - $.jqplot.CanvasAxisLabelRenderer = function(options) { - // Group: Properties - - // prop: angle - // angle of text, measured clockwise from x axis. - this.angle = 0; - // name of the axis associated with this tick - this.axis; - // prop: show - // whether or not to show the tick (mark and label). - this.show = true; - // prop: showLabel - // whether or not to show the label. - this.showLabel = true; - // prop: label - // label for the axis. - this.label = ''; - // prop: fontFamily - // CSS spec for the font-family css attribute. - // Applies only to browsers supporting native font rendering in the - // canvas tag. Currently Mozilla 3.5 and Safari 4. - this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif'; - // prop: fontSize - // CSS spec for font size. - this.fontSize = '11pt'; - // prop: fontWeight - // CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100 - 900 - this.fontWeight = 'normal'; - // prop: fontStretch - // Multiplier to condense or expand font width. - // Applies only to browsers which don't support canvas native font rendering. - this.fontStretch = 1.0; - // prop: textColor - // css spec for the color attribute. - this.textColor = '#666666'; - // prop: enableFontSupport - // true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. - // If true, label will be drawn with canvas tag native support for fonts. - // If false, label will be drawn with Hershey font metrics. - this.enableFontSupport = true; - // prop: pt2px - // Point to pixel scaling factor, used for computing height of bounding box - // around a label. The labels text renderer has a default setting of 1.4, which - // should be suitable for most fonts. Leave as null to use default. If tops of - // letters appear clipped, increase this. If bounding box seems too big, decrease. - // This is an issue only with the native font renderering capabilities of Mozilla - // 3.5 and Safari 4 since they do not provide a method to determine the font height. - this.pt2px = null; - - this._elem; - this._ctx; - this._plotWidth; - this._plotHeight; - this._plotDimensions = {height:null, width:null}; - - $.extend(true, this, options); - - if (options.angle == null && this.axis != 'xaxis' && this.axis != 'x2axis') { - this.angle = -90; - } - - var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily}; - if (this.pt2px) { - ropts.pt2px = this.pt2px; - } - - if (this.enableFontSupport) { - if ($.jqplot.support_canvas_text()) { - this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts); - } - - else { - this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); - } - } - else { - this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts); - } - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.init = function(options) { - $.extend(true, this, options); - this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily}); - }; - - // return width along the x axis - // will check first to see if an element exists. - // if not, will return the computed text box width. - $.jqplot.CanvasAxisLabelRenderer.prototype.getWidth = function(ctx) { - if (this._elem) { - return this._elem.outerWidth(true); - } - else { - var tr = this._textRenderer; - var l = tr.getWidth(ctx); - var h = tr.getHeight(ctx); - var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l); - return w; - } - }; - - // return height along the y axis. - $.jqplot.CanvasAxisLabelRenderer.prototype.getHeight = function(ctx) { - if (this._elem) { - return this._elem.outerHeight(true); - } - else { - var tr = this._textRenderer; - var l = tr.getWidth(ctx); - var h = tr.getHeight(ctx); - var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l); - return w; - } - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad = function() { - var a = this.angle * Math.PI/180; - return a; - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.draw = function(ctx, plot) { - // Memory Leaks patch - if (this._elem) { - if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { - window.G_vmlCanvasManager.uninitElement(this._elem.get(0)); - } - - this._elem.emptyForce(); - this._elem = null; - } - - // create a canvas here, but can't draw on it untill it is appended - // to dom for IE compatability. - var elem = plot.canvasManager.getCanvas(); - - this._textRenderer.setText(this.label, ctx); - var w = this.getWidth(ctx); - var h = this.getHeight(ctx); - elem.width = w; - elem.height = h; - elem.style.width = w; - elem.style.height = h; - - elem = plot.canvasManager.initCanvas(elem); - - this._elem = $(elem); - this._elem.css({ position: 'absolute'}); - this._elem.addClass('jqplot-'+this.axis+'-label'); - - elem = null; - return this._elem; - }; - - $.jqplot.CanvasAxisLabelRenderer.prototype.pack = function() { - this._textRenderer.draw(this._elem.get(0).getContext("2d"), this.label); - }; - -})(jQuery); \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.highlighter.js b/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.highlighter.js deleted file mode 100644 index b438b3c..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/vendor/jqplot/plugins/jqplot.highlighter.js +++ /dev/null @@ -1,484 +0,0 @@ -/** - * jqPlot - * Pure JavaScript plotting plugin using jQuery - * - * Version: 1.0.9 - * Revision: dff2f04 - * - * Copyright (c) 2009-2016 Chris Leonello - * jqPlot is currently available for use in all personal or commercial projects - * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL - * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can - * choose the license that best suits your project and use it accordingly. - * - * Although not required, the author would appreciate an email letting him - * know of any substantial use of jqPlot. You can reach the author at: - * chris at jqplot dot com or see http://www.jqplot.com/info.php . - * - * If you are feeling kind and generous, consider supporting the project by - * making a donation at: http://www.jqplot.com/donate.php . - * - * sprintf functions contained in jqplot.sprintf.js by Ash Searle: - * - * version 2007.04.27 - * author Ash Searle - * http://hexmen.com/blog/2007/03/printf-sprintf/ - * http://hexmen.com/js/sprintf.js - * The author (Ash Searle) has placed this code in the public domain: - * "This code is unrestricted: you are free to use it however you like." - * - */ -(function($) { - $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]); - - /** - * Class: $.jqplot.Highlighter - * Plugin which will highlight data points when they are moused over. - * - * To use this plugin, include the js - * file in your source: - * - * > - * - * A tooltip providing information about the data point is enabled by default. - * To disable the tooltip, set "showTooltip" to false. - * - * You can control what data is displayed in the tooltip with various - * options. The "tooltipAxes" option controls whether the x, y or both - * data values are displayed. - * - * Some chart types (e.g. hi-low-close) have more than one y value per - * data point. To display the additional values in the tooltip, set the - * "yvalues" option to the desired number of y values present (3 for a hlc chart). - * - * By default, data values will be formatted with the same formatting - * specifiers as used to format the axis ticks. A custom format code - * can be supplied with the tooltipFormatString option. This will apply - * to all values in the tooltip. - * - * For more complete control, the "formatString" option can be set. This - * Allows conplete control over tooltip formatting. Values are passed to - * the format string in an order determined by the "tooltipAxes" and "yvalues" - * options. So, if you have a hi-low-close chart and you just want to display - * the hi-low-close values in the tooltip, you could set a formatString like: - * - * > highlighter: { - * > tooltipAxes: 'y', - * > yvalues: 3, - * > formatString:' - * > - * > - * >
            hi:%s
            low:%s
            close:%s
            ' - * > } - * - */ - $.jqplot.Highlighter = function(options) { - // Group: Properties - // - //prop: show - // true to show the highlight. - this.show = $.jqplot.config.enablePlugins; - // prop: markerRenderer - // Renderer used to draw the marker of the highlighted point. - // Renderer will assimilate attributes from the data point being highlighted, - // so no attributes need set on the renderer directly. - // Default is to turn off shadow drawing on the highlighted point. - this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false}); - // prop: showMarker - // true to show the marker - this.showMarker = true; - // prop: lineWidthAdjust - // Pixels to add to the lineWidth of the highlight. - this.lineWidthAdjust = 2.5; - // prop: sizeAdjust - // Pixels to add to the overall size of the highlight. - this.sizeAdjust = 5; - // prop: showTooltip - // Show a tooltip with data point values. - this.showTooltip = true; - // prop: tooltipLocation - // Where to position tooltip, 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw' - this.tooltipLocation = 'nw'; - // prop: fadeTooltip - // true = fade in/out tooltip, flase = show/hide tooltip - this.fadeTooltip = true; - // prop: tooltipFadeSpeed - // 'slow', 'def', 'fast', or number of milliseconds. - this.tooltipFadeSpeed = "fast"; - // prop: tooltipOffset - // Pixel offset of tooltip from the highlight. - this.tooltipOffset = 2; - // prop: tooltipAxes - // Which axes to display in tooltip, 'x', 'y' or 'both', 'xy' or 'yx' - // 'both' and 'xy' are equivalent, 'yx' reverses order of labels. - this.tooltipAxes = 'both'; - // prop; tooltipSeparator - // String to use to separate x and y axes in tooltip. - this.tooltipSeparator = ', '; - // prop; tooltipContentEditor - // Function used to edit/augment/replace the formatted tooltip contents. - // Called as str = tooltipContentEditor(str, seriesIndex, pointIndex) - // where str is the generated tooltip html and seriesIndex and pointIndex identify - // the data point being highlighted. Should return the html for the tooltip contents. - this.tooltipContentEditor = null; - // prop: useAxesFormatters - // Use the x and y axes formatters to format the text in the tooltip. - this.useAxesFormatters = true; - // prop: tooltipFormatString - // sprintf format string for the tooltip. - // Uses Ash Searle's javascript sprintf implementation - // found here: http://hexmen.com/blog/2007/03/printf-sprintf/ - // See http://perldoc.perl.org/functions/sprintf.html for reference. - // Additional "p" and "P" format specifiers added by Chris Leonello. - this.tooltipFormatString = '%.5P'; - // prop: formatString - // alternative to tooltipFormatString - // will format the whole tooltip text, populating with x, y values as - // indicated by tooltipAxes option. So, you could have a tooltip like: - // 'Date: %s, number of cats: %d' to format the whole tooltip at one go. - // If useAxesFormatters is true, values will be formatted according to - // Axes formatters and you can populate your tooltip string with - // %s placeholders. - this.formatString = null; - // prop: yvalues - // Number of y values to expect in the data point array. - // Typically this is 1. Certain plots, like OHLC, will - // have more y values in each data point array. - this.yvalues = 1; - // prop: bringSeriesToFront - // This option requires jQuery 1.4+ - // True to bring the series of the highlighted point to the front - // of other series. - this.bringSeriesToFront = false; - this._tooltipElem; - this.isHighlighting = false; - this.currentNeighbor = null; - - $.extend(true, this, options); - }; - - var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w']; - var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7}; - var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e']; - - // axis.renderer.tickrenderer.formatter - - // called with scope of plot - $.jqplot.Highlighter.init = function (target, data, opts){ - var options = opts || {}; - // add a highlighter attribute to the plot - this.plugins.highlighter = new $.jqplot.Highlighter(options.highlighter); - }; - - // called within scope of series - $.jqplot.Highlighter.parseOptions = function (defaults, options) { - // Add a showHighlight option to the series - // and set it to true by default. - this.showHighlight = true; - }; - - // called within context of plot - // create a canvas which we can draw on. - // insert it before the eventCanvas, so eventCanvas will still capture events. - $.jqplot.Highlighter.postPlotDraw = function() { - // Memory Leaks patch - if (this.plugins.highlighter && this.plugins.highlighter.highlightCanvas) { - this.plugins.highlighter.highlightCanvas.resetCanvas(); - this.plugins.highlighter.highlightCanvas = null; - } - - if (this.plugins.highlighter && this.plugins.highlighter._tooltipElem) { - this.plugins.highlighter._tooltipElem.emptyForce(); - this.plugins.highlighter._tooltipElem = null; - } - - this.plugins.highlighter.highlightCanvas = new $.jqplot.GenericCanvas(); - - this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding, 'jqplot-highlight-canvas', this._plotDimensions, this)); - this.plugins.highlighter.highlightCanvas.setContext(); - - var elem = document.createElement('div'); - this.plugins.highlighter._tooltipElem = $(elem); - elem = null; - this.plugins.highlighter._tooltipElem.addClass('jqplot-highlighter-tooltip'); - this.plugins.highlighter._tooltipElem.css({position:'absolute', display:'none'}); - - this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem); - }; - - $.jqplot.preInitHooks.push($.jqplot.Highlighter.init); - $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Highlighter.parseOptions); - $.jqplot.postDrawHooks.push($.jqplot.Highlighter.postPlotDraw); - - function draw(plot, neighbor) { - var hl = plot.plugins.highlighter; - var s = plot.series[neighbor.seriesIndex]; - var smr = s.markerRenderer; - var mr = hl.markerRenderer; - mr.style = smr.style; - mr.lineWidth = smr.lineWidth + hl.lineWidthAdjust; - mr.size = smr.size + hl.sizeAdjust; - var rgba = $.jqplot.getColorComponents(smr.color); - var newrgb = [rgba[0], rgba[1], rgba[2]]; - var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]); - mr.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')'; - mr.init(); - var x_pos = s.gridData[neighbor.pointIndex][0]; - var y_pos = s.gridData[neighbor.pointIndex][1]; - // Adjusting with s._barNudge - if (s.renderer.constructor == $.jqplot.BarRenderer) { - if (s.barDirection == "vertical") { - x_pos += s._barNudge; - } - else { - y_pos -= s._barNudge; - } - } - mr.draw(x_pos, y_pos, hl.highlightCanvas._ctx); - } - - function showTooltip(plot, series, neighbor) { - // neighbor looks like: {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]} - // gridData should be x,y pixel coords on the grid. - // add the plot._gridPadding to that to get x,y in the target. - var hl = plot.plugins.highlighter; - var elem = hl._tooltipElem; - var serieshl = series.highlighter || {}; - - var opts = $.extend(true, {}, hl, serieshl); - - if (opts.useAxesFormatters) { - var xf = series._xaxis._ticks[0].formatter; - var yf = series._yaxis._ticks[0].formatter; - var xfstr = series._xaxis._ticks[0].formatString; - var yfstr = series._yaxis._ticks[0].formatString; - var str; - var xstr = xf(xfstr, neighbor.data[0]); - var ystrs = []; - for (var i=1; ir;){if(o-r>600){var a=o-r+1,l=i-r+1,h=Math.log(a),u=.5*Math.exp(2*h/3),c=.5*Math.sqrt(h*u*(a-u)/a)*(l-a/2<0?-1:1);t(n,i,Math.max(r,Math.floor(i-l*u/a+c)),Math.min(o,Math.floor(i+(a-l)*u/a+c)),s)}var p=n[i],f=r,d=o;for(e(n,r,i),s(n[o],p)>0&&e(n,r,o);f0;)d--}0===s(n[r],p)?e(n,r,d):e(n,++d,o),d<=i&&(r=d+1),i<=d&&(o=d-1)}}(t,i,r||0,o||t.length-1,s||n)}function e(t,e,n){var i=t[e];t[e]=t[n],t[n]=i}function n(t,e){return te?1:0}var i=function(t){void 0===t&&(t=9),this._maxEntries=Math.max(4,t),this._minEntries=Math.max(2,Math.ceil(.4*this._maxEntries)),this.clear()};function r(t,e,n){if(!n)return e.indexOf(t);for(var i=0;i=t.minX&&e.maxY>=t.minY}function d(t){return{children:t,height:1,leaf:!0,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0}}function g(e,n,i,r,o){for(var s=[n,i];s.length;)if(!((i=s.pop())-(n=s.pop())<=r)){var a=n+Math.ceil((i-n)/r/2)*r;t(e,a,n,i,o),s.push(n,a,a,i)}}return i.prototype.all=function(){return this._all(this.data,[])},i.prototype.search=function(t){var e=this.data,n=[];if(!f(t,e))return n;for(var i=this.toBBox,r=[];e;){for(var o=0;o=0&&r[e].children.length>this._maxEntries;)this._split(r,e),e--;this._adjustParentBBoxes(i,r,e)},i.prototype._split=function(t,e){var n=t[e],i=n.children.length,r=this._minEntries;this._chooseSplitAxis(n,r,i);var s=this._chooseSplitIndex(n,r,i),a=d(n.children.splice(s,n.children.length-s));a.height=n.height,a.leaf=n.leaf,o(n,this.toBBox),o(a,this.toBBox),e?t[e-1].children.push(a):this._splitRoot(n,a)},i.prototype._splitRoot=function(t,e){this.data=d([t,e]),this.data.height=t.height+1,this.data.leaf=!1,o(this.data,this.toBBox)},i.prototype._chooseSplitIndex=function(t,e,n){for(var i,r,o,a,l,h,c,p=1/0,f=1/0,d=e;d<=n-e;d++){var g=s(t,0,d,this.toBBox),_=s(t,d,n,this.toBBox),y=(r=g,o=_,void 0,void 0,void 0,void 0,a=Math.max(r.minX,o.minX),l=Math.max(r.minY,o.minY),h=Math.min(r.maxX,o.maxX),c=Math.min(r.maxY,o.maxY),Math.max(0,h-a)*Math.max(0,c-l)),v=u(g)+u(_);y=e;f--){var d=t.children[f];a(l,t.leaf?r(d):d),h+=c(l)}return h},i.prototype._adjustParentBBoxes=function(t,e,n){for(var i=n;i>=0;i--)a(e[i],t)},i.prototype._condense=function(t){for(var e=t.length-1,n=void 0;e>=0;e--)0===t[e].children.length?e>0?(n=t[e-1].children).splice(n.indexOf(t[e]),1):this.clear():o(t[e],this.toBBox)},i}()}},e={};function n(i){var r=e[i];if(void 0!==r)return r.exports;var o=e[i]={exports:{}};return t[i].call(o.exports,o,o.exports,n),o.exports}n.d=function(t,e){for(var i in e)n.o(e,i)&&!n.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)};var i={};return function(){"use strict";n.d(i,{default:function(){return Ch}});var t=function(){function t(t){this.propagationStopped,this.defaultPrevented,this.type=t,this.target=null}return t.prototype.preventDefault=function(){this.defaultPrevented=!0},t.prototype.stopPropagation=function(){this.propagationStopped=!0},t}(),e="propertychange",r=function(){function t(){this.disposed=!1}return t.prototype.dispose=function(){this.disposed||(this.disposed=!0,this.disposeInternal())},t.prototype.disposeInternal=function(){},t}();function o(t,e){return t>e?1:t0){for(r=1;r0?r-1:r:t[r-1]-e0)},n.prototype.removeEventListener=function(t,e){var n=this.listeners_&&this.listeners_[t];if(n){var i=n.indexOf(e);-1!==i&&(this.pendingRemovals_&&t in this.pendingRemovals_?(n[i]=p,++this.pendingRemovals_[t]):(n.splice(i,1),0===n.length&&delete this.listeners_[t]))}},n}(r),x="change",C="contextmenu",w="click",S="keydown",E="keypress",T="touchmove",b="wheel";function O(t,e,n,i,r){if(i&&i!==t&&(n=n.bind(i)),r){var o=n;n=function(){t.removeEventListener(e,n),o.apply(this,arguments)}}var s={target:t,type:e,listener:n};return t.addEventListener(e,n),s}function R(t,e,n,i){return O(t,e,n,i,!0)}function I(t){t&&t.target&&(t.target.removeEventListener(t.type,t.listener),d(t))}var P=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),M=function(t){function e(){var e=t.call(this)||this;return e.on=e.onInternal,e.once=e.onceInternal,e.un=e.unInternal,e.revision_=0,e}return P(e,t),e.prototype.changed=function(){++this.revision_,this.dispatchEvent(x)},e.prototype.getRevision=function(){return this.revision_},e.prototype.onInternal=function(t,e){if(Array.isArray(t)){for(var n=t.length,i=new Array(n),r=0;r=0||N.match(/cpu (os|iphone os) 15_4 like mac os x/)),-1!==N.indexOf("webkit")&&-1==N.indexOf("edge")),K=-1!==N.indexOf("macintosh"),Z="undefined"!=typeof devicePixelRatio?devicePixelRatio:1,V="undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof OffscreenCanvas&&self instanceof WorkerGlobalScope,U="undefined"!=typeof Image&&Image.prototype.decode,H=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("_",null,e),window.removeEventListener("_",null,e)}catch(t){}return t}();function q(t,e,n,i){var r;return r=n&&n.length?n.shift():V?new OffscreenCanvas(t||300,e||300):document.createElement("canvas"),t&&(r.width=t),e&&(r.height=e),r.getContext("2d",i)}function J(t,e){var n=e.parentNode;n&&n.replaceChild(t,e)}function Q(t){return t&&t.parentNode?t.parentNode.removeChild(t):null}var $=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),tt=function(t){function e(e){var n=t.call(this)||this,i=e.element;return!i||e.target||i.style.pointerEvents||(i.style.pointerEvents="auto"),n.element=i||null,n.target_=null,n.map_=null,n.listenerKeys=[],e.render&&(n.render=e.render),e.target&&n.setTarget(e.target),n}return $(e,t),e.prototype.disposeInternal=function(){Q(this.element),t.prototype.disposeInternal.call(this)},e.prototype.getMap=function(){return this.map_},e.prototype.setMap=function(t){this.map_&&Q(this.element);for(var e=0,n=this.listenerKeys.length;e1?(n=r,i=o):l>0&&(n+=s*l,i+=a*l)}return St(t,e,n,i)}function St(t,e,n,i){var r=n-t,o=i-e;return r*r+o*o}function Et(t){return t*Math.PI/180}function Tt(t,e){var n=t%e;return n*e<0?n+e:n}function bt(t,e,n){return t+n*(e-t)}function Ot(t,e){var n=Math.pow(10,e);return Math.round(t*n)/n}function Rt(t,e){return Math.floor(Ot(t,e))}function It(t,e){return Math.ceil(Ot(t,e))}var Pt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Mt=function(t){function e(e){var n=t.call(this)||this;n.on,n.once,n.un,n.background_=e.background;var i=f({},e);return"object"==typeof e.properties&&(delete i.properties,f(i,e.properties)),i.opacity=void 0!==e.opacity?e.opacity:1,vt("number"==typeof i.opacity,64),i.visible=void 0===e.visible||e.visible,i.zIndex=e.zIndex,i.maxResolution=void 0!==e.maxResolution?e.maxResolution:1/0,i.minResolution=void 0!==e.minResolution?e.minResolution:0,i.minZoom=void 0!==e.minZoom?e.minZoom:-1/0,i.maxZoom=void 0!==e.maxZoom?e.maxZoom:1/0,n.className_=void 0!==i.className?i.className:"ol-layer",delete i.className,n.setProperties(i),n.state_=null,n}return Pt(e,t),e.prototype.getBackground=function(){return this.background_},e.prototype.getClassName=function(){return this.className_},e.prototype.getLayerState=function(t){var e=this.state_||{layer:this,managed:void 0===t||t},n=this.getZIndex();return e.opacity=mt(Math.round(100*this.getOpacity())/100,0,1),e.visible=this.getVisible(),e.extent=this.getExtent(),e.zIndex=void 0!==n||e.managed?n:1/0,e.maxResolution=this.getMaxResolution(),e.minResolution=Math.max(this.getMinResolution(),0),e.minZoom=this.getMinZoom(),e.maxZoom=this.getMaxZoom(),this.state_=e,e},e.prototype.getLayersArray=function(t){return L()},e.prototype.getLayerStatesArray=function(t){return L()},e.prototype.getExtent=function(){return this.get(ht)},e.prototype.getMaxResolution=function(){return this.get(ct)},e.prototype.getMinResolution=function(){return this.get(pt)},e.prototype.getMinZoom=function(){return this.get(dt)},e.prototype.getMaxZoom=function(){return this.get(ft)},e.prototype.getOpacity=function(){return this.get(at)},e.prototype.getSourceState=function(){return L()},e.prototype.getVisible=function(){return this.get(lt)},e.prototype.getZIndex=function(){return this.get(ut)},e.prototype.setBackground=function(t){this.background_=t,this.changed()},e.prototype.setExtent=function(t){this.set(ht,t)},e.prototype.setMaxResolution=function(t){this.set(ct,t)},e.prototype.setMinResolution=function(t){this.set(pt,t)},e.prototype.setMaxZoom=function(t){this.set(ft,t)},e.prototype.setMinZoom=function(t){this.set(dt,t)},e.prototype.setOpacity=function(t){vt("number"==typeof t,64),this.set(at,t)},e.prototype.setVisible=function(t){this.set(lt,t)},e.prototype.setZIndex=function(t){this.set(ut,t)},e.prototype.disposeInternal=function(){this.state_&&(this.state_.layer=null,this.state_=null),t.prototype.disposeInternal.call(this)},e}(G),Ft="precompose",Lt="rendercomplete",At="undefined",Dt="ready",kt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function jt(t,e){if(!t.visible)return!1;var n=e.resolution;if(n=t.maxResolution)return!1;var i=e.zoom;return i>t.minZoom&&i<=t.maxZoom}var Gt=function(t){function e(e){var n=this,i=f({},e);delete i.source,(n=t.call(this,i)||this).on,n.once,n.un,n.mapPrecomposeKey_=null,n.mapRenderKey_=null,n.sourceChangeKey_=null,n.renderer_=null,n.rendered=!1,e.render&&(n.render=e.render),e.map&&n.setMap(e.map),n.addChangeListener(gt,n.handleSourcePropertyChange_);var r=e.source?e.source:null;return n.setSource(r),n}return kt(e,t),e.prototype.getLayersArray=function(t){var e=t||[];return e.push(this),e},e.prototype.getLayerStatesArray=function(t){var e=t||[];return e.push(this.getLayerState()),e},e.prototype.getSource=function(){return this.get(gt)||null},e.prototype.getRenderSource=function(){return this.getSource()},e.prototype.getSourceState=function(){var t=this.getSource();return t?t.getState():At},e.prototype.handleSourceChange_=function(){this.changed()},e.prototype.handleSourcePropertyChange_=function(){this.sourceChangeKey_&&(I(this.sourceChangeKey_),this.sourceChangeKey_=null);var t=this.getSource();t&&(this.sourceChangeKey_=O(t,x,this.handleSourceChange_,this)),this.changed()},e.prototype.getFeatures=function(t){return this.renderer_?this.renderer_.getFeatures(t):new Promise((function(t){return t([])}))},e.prototype.getData=function(t){return this.renderer_&&this.rendered?this.renderer_.getData(t):null},e.prototype.render=function(t,e){var n=this.getRenderer();if(n.prepareFrame(t))return this.rendered=!0,n.renderFrame(t,e)},e.prototype.unrender=function(){this.rendered=!1},e.prototype.setMapInternal=function(t){t||this.unrender(),this.set("map",t)},e.prototype.getMapInternal=function(){return this.get("map")},e.prototype.setMap=function(t){this.mapPrecomposeKey_&&(I(this.mapPrecomposeKey_),this.mapPrecomposeKey_=null),t||this.changed(),this.mapRenderKey_&&(I(this.mapRenderKey_),this.mapRenderKey_=null),t&&(this.mapPrecomposeKey_=O(t,Ft,(function(t){var e=t.frameState.layerStatesArray,n=this.getLayerState(!1);vt(!e.some((function(t){return t.layer===n.layer})),67),e.push(n)}),this),this.mapRenderKey_=O(this,x,t.render,t),this.changed())},e.prototype.setSource=function(t){this.set(gt,t)},e.prototype.getRenderer=function(){return this.renderer_||(this.renderer_=this.createRenderer()),this.renderer_},e.prototype.hasRenderer=function(){return!!this.renderer_},e.prototype.createRenderer=function(){return null},e.prototype.disposeInternal=function(){this.renderer_&&(this.renderer_.dispose(),delete this.renderer_),this.setSource(null),t.prototype.disposeInternal.call(this)},e}(Mt),zt=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Wt=function(t){function e(e){var n=this,i=e||{};(n=t.call(this,{element:document.createElement("div"),render:i.render,target:i.target})||this).ulElement_=document.createElement("ul"),n.collapsed_=void 0===i.collapsed||i.collapsed,n.userCollapsed_=n.collapsed_,n.overrideCollapsible_=void 0!==i.collapsible,n.collapsible_=void 0===i.collapsible||i.collapsible,n.collapsible_||(n.collapsed_=!1);var r=void 0!==i.className?i.className:"ol-attribution",o=void 0!==i.tipLabel?i.tipLabel:"Attributions",s=void 0!==i.expandClassName?i.expandClassName:r+"-expand",a=void 0!==i.collapseLabel?i.collapseLabel:"›",l=void 0!==i.collapseClassName?i.collapseClassName:r+"-collapse";"string"==typeof a?(n.collapseLabel_=document.createElement("span"),n.collapseLabel_.textContent=a,n.collapseLabel_.className=l):n.collapseLabel_=a;var h=void 0!==i.label?i.label:"i";"string"==typeof h?(n.label_=document.createElement("span"),n.label_.textContent=h,n.label_.className=s):n.label_=h;var u=n.collapsible_&&!n.collapsed_?n.collapseLabel_:n.label_;n.toggleButton_=document.createElement("button"),n.toggleButton_.setAttribute("type","button"),n.toggleButton_.setAttribute("aria-expanded",String(!n.collapsed_)),n.toggleButton_.title=o,n.toggleButton_.appendChild(u),n.toggleButton_.addEventListener(w,n.handleClick_.bind(n),!1);var c=r+" ol-unselectable "+nt+(n.collapsed_&&n.collapsible_?" ol-collapsed":"")+(n.collapsible_?"":" ol-uncollapsible"),p=n.element;return p.className=c,p.appendChild(n.toggleButton_),p.appendChild(n.ulElement_),n.renderedAttributions_=[],n.renderedVisible_=!0,n}return zt(e,t),e.prototype.collectSourceAttributions_=function(t){for(var e={},n=[],i=!0,r=t.layerStatesArray,o=0,s=r.length;o0;if(this.renderedVisible_!=n&&(this.element.style.display=n?"":"none",this.renderedVisible_=n),!h(e,this.renderedAttributions_)){!function(t){for(;t.lastChild;)t.removeChild(t.lastChild)}(this.ulElement_);for(var i=0,r=e.length;ir&&(l|=4),ao&&(l|=2),0===l&&(l=1),l}function ve(t,e,n,i,r){return r?(r[0]=t,r[1]=e,r[2]=n,r[3]=i,r):[t,e,n,i]}function me(t){return ve(1/0,1/0,-1/0,-1/0,t)}function xe(t,e,n,i,r){return Se(me(r),t,e,n,i)}function Ce(t,e){return t[0]==e[0]&&t[2]==e[2]&&t[1]==e[1]&&t[3]==e[3]}function we(t,e){e[0]t[2]&&(t[2]=e[0]),e[1]t[3]&&(t[3]=e[1])}function Se(t,e,n,i,r){for(;ne[0]?i[0]=t[0]:i[0]=e[0],t[1]>e[1]?i[1]=t[1]:i[1]=e[1],t[2]=e[0]&&t[1]<=e[3]&&t[3]>=e[1]}function Ge(t){return t[2]=0;--i)if(t[i]!=e[i]){n=!1;break}return n}function We(t,e){var n=Math.cos(e),i=Math.sin(e),r=t[0]*n-t[1]*i,o=t[1]*n+t[0]*i;return t[0]=r,t[1]=o,t}function Xe(t,e){if(e.canWrapX()){var n=ke(e.getExtent()),i=function(t,e,n){var i=e.getExtent(),r=0;if(e.canWrapX()&&(t[0]i[2])){var o=n||ke(i);r=Math.floor((t[0]-i[0])/o)}return r}(t,e,n);i&&(t[0]-=i*n)}return t}function Ne(t,e,n){var i=n||6371008.8,r=Et(t[1]),o=Et(e[1]),s=(o-r)/2,a=Et(e[0]-t[0])/2,l=Math.sin(s)*Math.sin(s)+Math.sin(a)*Math.sin(a)*Math.cos(r)*Math.cos(o);return 2*i*Math.atan2(Math.sqrt(l),Math.sqrt(1-l))}var Ye=!0;function Be(t){Ye=!(void 0===t||t)}function Ke(t,e,n){var i;if(void 0!==e){for(var r=0,o=t.length;r1)for(var o=t[2]-t[0],s=t[3]-t[1],a=0;a=-180&&t[0]<=180&&t[1]>=-90&&t[1]<=90&&(Ye=!1,console.warn("Call useGeographic() from ol/proj once to work with [longitude, latitude] coordinates.")),t}function cn(t,e){return t}function pn(t,e){return t}function fn(t,e){return t}qe(te),qe(oe),rn=te,on=function(t,e,n){var i=t.length,r=n>1?n:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(i));for(var s=0;sQt?a=Qt:a<-Qt&&(a=-Qt),o[s+1]=a}return o},sn=function(t,e,n){var i=t.length,r=n>1?n:2,o=e;void 0===o&&(o=r>2?t.slice():new Array(i));for(var s=0;s0?(e.getAnimating()&&e.cancelAnimations(),e.animate({zoom:i,duration:this.duration_,easing:xn})):e.setZoom(i)}}},e}(tt),bn="XY",On="XYM",Rn="XYZM",In="Point",Pn="LineString",Mn="Polygon",Fn="MultiPoint",Ln="MultiLineString",An="MultiPolygon",Dn="GeometryCollection",kn="Circle";function jn(t,e){var n=e[0],i=e[1];return e[0]=t[0]*n+t[2]*i+t[4],e[1]=t[1]*n+t[3]*i+t[5],e}function Gn(t,e,n,i,r,o,s,a){var l=Math.sin(o),h=Math.cos(o);return t[0]=i*h,t[1]=r*l,t[2]=-i*l,t[3]=r*h,t[4]=s*i*h-a*i*l+e,t[5]=s*r*l+a*r*h+n,t}function zn(t,e){var n,i=(n=e)[0]*n[3]-n[1]*n[2];vt(0!==i,32);var r=e[0],o=e[1],s=e[2],a=e[3],l=e[4],h=e[5];return t[0]=a/i,t[1]=-o/i,t[2]=-s/i,t[3]=r/i,t[4]=(s*h-a*l)/i,t[5]=-(r*h-o*l)/i,t}function Wn(t){var e="matrix("+t.join(", ")+")";if(V)return e;var n=Sn||(Sn=document.createElement("div"));return n.style.transform=e,n.style.transform}function Xn(t,e,n,i,r,o){for(var s=o||[],a=0,l=e;l1)a=n;else{if(p>0){for(var f=0;fr&&(r=h),o=a,s=l}return r}function $n(t,e,n,i,r){for(var o=0,s=n.length;o0;){for(var c=h.pop(),p=h.pop(),f=0,d=t[p],g=t[p+1],_=t[c],y=t[c+1],v=p+i;vf&&(u=v,f=m)}f>r&&(l[(u-e)/i]=1,p+i0&&g>f)&&(d<0&&_0&&_>d)?(a=c,l=p):(o[s++]=a,o[s++]=l,h=a,u=l,a=c,l=p)}}return o[s++]=a,o[s++]=l,s}function ai(t,e,n,i,r,o,s,a){for(var l=0,h=n.length;l>1)],e))<0?a=i+1:(l=i,h=!r);return h?a:~a}(d,v);m<0?(h=(v-d[-m-2])/(d[-m-1]-d[-m-2]),l=e+(-m-2)*i):l=e+m*i}var x=a>1?a:2,C=s||new Array(x);for(g=0;g>1;ro&&(h-a)*(o-l)-(r-a)*(u-l)>0&&s++:u<=o&&(h-a)*(o-l)-(r-a)*(u-l)<0&&s--,a=h,l=u}return 0!==s}function _i(t,e,n,i,r,o){if(0===n.length)return!1;if(!gi(t,e,n[0],i,r,o))return!1;for(var s=1,a=n.length;s=r[0]&&o[2]<=r[2]||o[1]>=r[1]&&o[3]<=r[3]||li(t,e,n,i,(function(t,e){return function(t,e,n){var i=!1,r=ye(t,e),o=ye(t,n);if(1===r||1===o)i=!0;else{var s=t[0],a=t[1],l=t[2],h=t[3],u=e[0],c=e[1],p=n[0],f=n[1],d=(f-c)/(p-u),g=void 0,_=void 0;2&o&&!(2&r)&&(i=(g=p-(f-h)/d)>=s&&g<=l),i||!(4&o)||4&r||(i=(_=f-(p-l)*d)>=a&&_<=h),i||!(8&o)||8&r||(i=(g=p-(f-a)/d)>=s&&g<=l),i||!(16&o)||16&r||(i=(_=f-(p-s)*d)>=a&&_<=h)}return i}(r,t,e)})))}function vi(t,e,n,i,r){if(!function(t,e,n,i,r){return!!(yi(t,e,n,i,r)||gi(t,e,n,i,r[0],r[1])||gi(t,e,n,i,r[0],r[3])||gi(t,e,n,i,r[2],r[1])||gi(t,e,n,i,r[2],r[3]))}(t,e,n[0],i,r))return!1;if(1===n.length)return!0;for(var o=1,s=n.length;oC&&_i(t,e,n,i,u=(c+p)/2,g)&&(x=u,C=w),c=p}return isNaN(x)&&(x=r[s]),a?(a.push(x,g,C),a):[x,g,C]}function Gi(t,e,n,i){for(;e0}function Wi(t,e,n,i,r){for(var o=void 0!==r&&r,s=0,a=n.length;s=1024){var r=0;for(var o in t)0==(3&r++)&&(delete t[o],--e)}i=function(t){var e,n,i,r,o;if(or.exec(t)&&(t=function(t){var e=document.createElement("div");if(e.style.color=t,""!==e.style.color){document.body.appendChild(e);var n=getComputedStyle(e).color;return document.body.removeChild(e),n}return""}(t)),rr.exec(t)){var s,a=t.length-1;s=a<=4?1:2;var l=4===a||8===a;e=parseInt(t.substr(1+0*s,s),16),n=parseInt(t.substr(1+1*s,s),16),i=parseInt(t.substr(1+2*s,s),16),r=l?parseInt(t.substr(1+3*s,s),16):255,1==s&&(e=(e<<4)+e,n=(n<<4)+n,i=(i<<4)+i,l&&(r=(r<<4)+r)),o=[e,n,i,r/255]}else 0==t.indexOf("rgba(")?hr(o=t.slice(5,-1).split(",").map(Number)):0==t.indexOf("rgb(")?((o=t.slice(4,-1).split(",").map(Number)).push(1),hr(o)):vt(!1,14);return o}(n),t[n]=i,++e}return i}}();function lr(t){return Array.isArray(t)?t:ar(t)}function hr(t){return t[0]=mt(t[0]+.5|0,0,255),t[1]=mt(t[1]+.5|0,0,255),t[2]=mt(t[2]+.5|0,0,255),t[3]=mt(t[3],0,1),t}function ur(t){var e=t[0];e!=(0|e)&&(e=e+.5|0);var n=t[1];n!=(0|n)&&(n=n+.5|0);var i=t[2];return i!=(0|i)&&(i=i+.5|0),"rgba("+e+","+n+","+i+","+(void 0===t[3]?1:Math.round(100*t[3])/100)+")"}var cr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),pr=null,fr=function(t){function e(e){var n=t.call(this,e)||this;return n.container=null,n.renderedResolution,n.tempTransform=[1,0,0,1,0,0],n.pixelTransform=[1,0,0,1,0,0],n.inversePixelTransform=[1,0,0,1,0,0],n.context=null,n.containerReused=!1,n.pixelContext_=null,n.frameState=null,n}return cr(e,t),e.prototype.getImageData=function(t,e,n){var i,r;pr||((i=document.createElement("canvas")).width=1,i.height=1,pr=i.getContext("2d")),pr.clearRect(0,0,1,1);try{pr.drawImage(t,e,n,1,1,0,0,1,1),r=pr.getImageData(0,0,1,1).data}catch(t){return null}return r},e.prototype.getBackground=function(t){var e=this.getLayer().getBackground();return"function"==typeof e&&(e=e(t.viewState.resolution)),e||void 0},e.prototype.useContainer=function(t,e,n,i){var r,o,s=this.getLayer().getClassName();if(t&&t.className===s&&""===t.style.opacity&&1===n&&(!i||t.style.backgroundColor&&h(lr(t.style.backgroundColor),lr(i)))&&(l=t.firstElementChild)instanceof HTMLCanvasElement&&(o=l.getContext("2d")),o&&o.canvas.style.transform===e?(this.container=t,this.context=o,this.containerReused=!0):this.containerReused&&(this.container=null,this.context=null,this.containerReused=!1),!this.container){(r=document.createElement("div")).className=s;var a=r.style;a.position="absolute",a.width="100%",a.height="100%",i&&(a.backgroundColor=i);var l=(o=q()).canvas;r.appendChild(l),(a=l.style).position="absolute",a.left="0",a.transformOrigin="top left",this.container=r,this.context=o}},e.prototype.clipUnrotated=function(t,e,n){var i=Ae(n),r=De(n),o=Re(n),s=Oe(n);jn(e.coordinateToPixelTransform,i),jn(e.coordinateToPixelTransform,r),jn(e.coordinateToPixelTransform,o),jn(e.coordinateToPixelTransform,s);var a=this.inversePixelTransform;jn(a,i),jn(a,r),jn(a,o),jn(a,s),t.save(),t.beginPath(),t.moveTo(Math.round(i[0]),Math.round(i[1])),t.lineTo(Math.round(r[0]),Math.round(r[1])),t.lineTo(Math.round(o[0]),Math.round(o[1])),t.lineTo(Math.round(s[0]),Math.round(s[1])),t.clip()},e.prototype.dispatchRenderEvent_=function(t,e,n){var i=this.getLayer();if(i.hasListener(t)){var r=new ir(t,this.inversePixelTransform,n,e);i.dispatchEvent(r)}},e.prototype.preRender=function(t,e){this.frameState=e,this.dispatchRenderEvent_("prerender",t,e)},e.prototype.postRender=function(t,e){this.dispatchRenderEvent_("postrender",t,e)},e.prototype.getRenderTransform=function(t,e,n,i,r,o,s){var a=r/2,l=o/2,h=i/e,u=-h,c=-t[0]+s,p=-t[1];return Gn(this.tempTransform,a,l,h,u,-n,c,p)},e.prototype.getDataAtPixel=function(t,e,n){var i=jn(this.inversePixelTransform,t.slice()),r=this.context,o=this.getLayer().getExtent();if(o&&!de(o,jn(e.pixelToCoordinateTransform,t.slice())))return null;var s,a=Math.round(i[0]),l=Math.round(i[1]),h=this.pixelContext_;if(!h){var u=document.createElement("canvas");u.width=1,u.height=1,h=u.getContext("2d"),this.pixelContext_=h}h.clearRect(0,0,1,1);try{h.drawImage(r.canvas,a,l,1,1,0,0,1,1),s=h.getImageData(0,0,1,1).data}catch(t){return"SecurityError"===t.name?(this.pixelContext_=null,new Uint8Array):s}return 0===s[3]?null:s},e.prototype.disposeInternal=function(){delete this.frameState,t.prototype.disposeInternal.call(this)},e}(er),dr=fr,gr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),_r=function(t){function e(e,n,i){var r=t.call(this)||this,o=i||{};return r.tileCoord=e,r.state=n,r.interimTile=null,r.key="",r.transition_=void 0===o.transition?250:o.transition,r.transitionStarts_={},r.interpolate=!!o.interpolate,r}return gr(e,t),e.prototype.changed=function(){this.dispatchEvent(x)},e.prototype.release=function(){},e.prototype.getKey=function(){return this.key+"/"+this.tileCoord},e.prototype.getInterimTile=function(){if(!this.interimTile)return this;var t=this.interimTile;do{if(2==t.getState())return this.transition_=0,t;t=t.interimTile}while(t);return this},e.prototype.refreshInterimChain=function(){if(this.interimTile){var t=this.interimTile,e=this;do{if(2==t.getState()){t.interimTile=null;break}1==t.getState()?e=t:0==t.getState()?e.interimTile=t.interimTile:e=t,t=e.interimTile}while(t)}},e.prototype.getTileCoord=function(){return this.tileCoord},e.prototype.getState=function(){return this.state},e.prototype.setState=function(t){if(3!==this.state&&this.state>t)throw new Error("Tile load sequence violation");this.state=t,this.changed()},e.prototype.load=function(){L()},e.prototype.getAlpha=function(t,e){if(!this.transition_)return 1;var n=this.transitionStarts_[t];if(n){if(-1===n)return 1}else n=e,this.transitionStarts_[t]=n;var i=e-n+1e3/60;return i>=this.transition_?1:mn(i/this.transition_)},e.prototype.inTransition=function(t){return!!this.transition_&&-1!==this.transitionStarts_[t]},e.prototype.endTransition=function(t){this.transition_&&(this.transitionStarts_[t]=-1)},e}(m),yr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),vr=function(t){function e(e,n,i,r){var o=t.call(this)||this;return o.extent=e,o.pixelRatio_=i,o.resolution=n,o.state=r,o}return yr(e,t),e.prototype.changed=function(){this.dispatchEvent(x)},e.prototype.getExtent=function(){return this.extent},e.prototype.getImage=function(){return L()},e.prototype.getPixelRatio=function(){return this.pixelRatio_},e.prototype.getResolution=function(){return this.resolution},e.prototype.getState=function(){return this.state},e.prototype.load=function(){L()},e}(m),mr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function xr(t,e,n){var i=t,r=!0,o=!1,s=!1,a=[R(i,"load",(function(){s=!0,o||e()}))];return i.src&&U?(o=!0,i.decode().then((function(){r&&e()})).catch((function(t){r&&(s?e():n())}))):a.push(R(i,"error",n)),function(){r=!1,a.forEach(I)}}!function(t){function e(e,n,i,r,o,s){var a=t.call(this,e,n,i,0)||this;return a.src_=r,a.image_=new Image,null!==o&&(a.image_.crossOrigin=o),a.unlisten_=null,a.state=0,a.imageLoadFunction_=s,a}mr(e,t),e.prototype.getImage=function(){return this.image_},e.prototype.handleImageError_=function(){this.state=3,this.unlistenImage_(),this.changed()},e.prototype.handleImageLoad_=function(){void 0===this.resolution&&(this.resolution=Fe(this.extent)/this.image_.height),this.state=2,this.unlistenImage_(),this.changed()},e.prototype.load=function(){0!=this.state&&3!=this.state||(this.state=1,this.changed(),this.imageLoadFunction_(this,this.src_),this.unlisten_=xr(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this)))},e.prototype.setImage=function(t){this.image_=t,this.resolution=Fe(this.extent)/this.image_.height},e.prototype.unlistenImage_=function(){this.unlisten_&&(this.unlisten_(),this.unlisten_=null)}}(vr);var Cr,wr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Sr=function(t){function e(e,n,i,r,o,s){var a=t.call(this,e,n,s)||this;return a.crossOrigin_=r,a.src_=i,a.key=i,a.image_=new Image,null!==r&&(a.image_.crossOrigin=r),a.unlisten_=null,a.tileLoadFunction_=o,a}return wr(e,t),e.prototype.getImage=function(){return this.image_},e.prototype.setImage=function(t){this.image_=t,this.state=2,this.unlistenImage_(),this.changed()},e.prototype.handleImageError_=function(){var t;this.state=3,this.unlistenImage_(),this.image_=((t=q(1,1)).fillStyle="rgba(0,0,0,0)",t.fillRect(0,0,1,1),t.canvas),this.changed()},e.prototype.handleImageLoad_=function(){var t=this.image_;t.naturalWidth&&t.naturalHeight?this.state=2:this.state=4,this.unlistenImage_(),this.changed()},e.prototype.load=function(){3==this.state&&(this.state=0,this.image_=new Image,null!==this.crossOrigin_&&(this.image_.crossOrigin=this.crossOrigin_)),0==this.state&&(this.state=1,this.changed(),this.tileLoadFunction_(this,this.src_),this.unlisten_=xr(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this)))},e.prototype.unlistenImage_=function(){this.unlisten_&&(this.unlisten_(),this.unlisten_=null)},e}(_r),Er=function(){function t(t,e,n,i,r,o){this.sourceProj_=t,this.targetProj_=e;var s={},a=tn(this.targetProj_,this.sourceProj_);this.transformInv_=function(t){var e=t[0]+"/"+t[1];return s[e]||(s[e]=a(t)),s[e]},this.maxSourceExtent_=i,this.errorThresholdSquared_=r*r,this.triangles_=[],this.wrapsXInSource_=!1,this.canWrapXInSource_=this.sourceProj_.canWrapX()&&!!i&&!!this.sourceProj_.getExtent()&&ke(i)==ke(this.sourceProj_.getExtent()),this.sourceWorldWidth_=this.sourceProj_.getExtent()?ke(this.sourceProj_.getExtent()):null,this.targetWorldWidth_=this.targetProj_.getExtent()?ke(this.targetProj_.getExtent()):null;var l=Ae(n),h=De(n),u=Re(n),c=Oe(n),p=this.transformInv_(l),f=this.transformInv_(h),d=this.transformInv_(u),g=this.transformInv_(c),_=10+(o?Math.max(0,Math.ceil(Ct(be(n)/(o*o*256*256)))):0);if(this.addQuad_(l,h,u,c,p,f,d,g,_),this.wrapsXInSource_){var y=1/0;this.triangles_.forEach((function(t,e,n){y=Math.min(y,t.source[0][0],t.source[1][0],t.source[2][0])})),this.triangles_.forEach(function(t){if(Math.max(t.source[0][0],t.source[1][0],t.source[2][0])-y>this.sourceWorldWidth_/2){var e=[[t.source[0][0],t.source[0][1]],[t.source[1][0],t.source[1][1]],[t.source[2][0],t.source[2][1]]];e[0][0]-y>this.sourceWorldWidth_/2&&(e[0][0]-=this.sourceWorldWidth_),e[1][0]-y>this.sourceWorldWidth_/2&&(e[1][0]-=this.sourceWorldWidth_),e[2][0]-y>this.sourceWorldWidth_/2&&(e[2][0]-=this.sourceWorldWidth_);var n=Math.min(e[0][0],e[1][0],e[2][0]);Math.max(e[0][0],e[1][0],e[2][0])-n.5&&u<1,f=!1;if(l>0&&(this.targetProj_.isGlobal()&&this.targetWorldWidth_&&(f=ke(ue([t,e,n,i]))/this.targetWorldWidth_>.25||f),!p&&this.sourceProj_.isGlobal()&&u&&(f=u>.25||f)),!(!f&&this.maxSourceExtent_&&isFinite(h[0])&&isFinite(h[1])&&isFinite(h[2])&&isFinite(h[3]))||je(h,this.maxSourceExtent_)){var d=0;if(!(f||isFinite(r[0])&&isFinite(r[1])&&isFinite(o[0])&&isFinite(o[1])&&isFinite(s[0])&&isFinite(s[1])&&isFinite(a[0])&&isFinite(a[1])))if(l>0)f=!0;else if(1!=(d=(isFinite(r[0])&&isFinite(r[1])?0:8)+(isFinite(o[0])&&isFinite(o[1])?0:4)+(isFinite(s[0])&&isFinite(s[1])?0:2)+(isFinite(a[0])&&isFinite(a[1])?0:1))&&2!=d&&4!=d&&8!=d)return;if(l>0){if(!f){var g=[(t[0]+n[0])/2,(t[1]+n[1])/2],_=this.transformInv_(g),y=void 0;y=p?(Tt(r[0],c)+Tt(s[0],c))/2-Tt(_[0],c):(r[0]+s[0])/2-_[0];var v=(r[1]+s[1])/2-_[1];f=y*y+v*v>this.errorThresholdSquared_}if(f){if(Math.abs(t[0]-n[0])<=Math.abs(t[1]-n[1])){var m=[(e[0]+n[0])/2,(e[1]+n[1])/2],x=this.transformInv_(m),C=[(i[0]+t[0])/2,(i[1]+t[1])/2],w=this.transformInv_(C);this.addQuad_(t,e,m,C,r,o,x,w,l-1),this.addQuad_(C,m,n,i,w,x,s,a,l-1)}else{var S=[(t[0]+e[0])/2,(t[1]+e[1])/2],E=this.transformInv_(S),T=[(n[0]+i[0])/2,(n[1]+i[1])/2],b=this.transformInv_(T);this.addQuad_(t,S,T,i,r,E,b,a,l-1),this.addQuad_(S,e,n,T,E,o,s,b,l-1)}return}}if(p){if(!this.canWrapXInSource_)return;this.wrapsXInSource_=!0}0==(11&d)&&this.addTriangle_(t,n,i,r,s,a),0==(14&d)&&this.addTriangle_(t,n,e,r,s,o),d&&(0==(13&d)&&this.addTriangle_(e,i,t,o,a,r),0==(7&d)&&this.addTriangle_(e,i,n,o,a,s))}},t.prototype.calculateSourceExtent=function(){var t=[1/0,1/0,-1/0,-1/0];return this.triangles_.forEach((function(e,n,i){var r=e.source;we(t,r[0]),we(t,r[1]),we(t,r[2])})),t},t.prototype.getTriangles=function(){return this.triangles_},t}(),Tr={imageSmoothingEnabled:!1,msImageSmoothingEnabled:!1},br={imageSmoothingEnabled:!0,msImageSmoothingEnabled:!0};function Or(t,e,n,i,r){t.beginPath(),t.moveTo(0,0),t.lineTo(e,n),t.lineTo(i,r),t.closePath(),t.save(),t.clip(),t.fillRect(0,0,Math.max(e,i)+1,Math.max(n,r)),t.restore()}function Rr(t,e){return Math.abs(t[4*e]-210)>2||Math.abs(t[4*e+3]-191.25)>2}function Ir(t,e,n,i){var r=en(n,e,t),o=He(e,i,n),s=e.getMetersPerUnit();void 0!==s&&(o*=s);var a=t.getMetersPerUnit();void 0!==a&&(o/=a);var l=t.getExtent();if(!l||de(l,r)){var h=He(t,o,r)/o;isFinite(h)&&h>0&&(o/=h)}return o}var Pr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Mr=function(t){function e(e,n,i,r,o,s,a,l,h,u,c,p){var f=t.call(this,o,0,{interpolate:!!p})||this;f.renderEdges_=void 0!==c&&c,f.pixelRatio_=a,f.gutter_=l,f.canvas_=null,f.sourceTileGrid_=n,f.targetTileGrid_=r,f.wrappedTileCoord_=s||o,f.sourceTiles_=[],f.sourcesListenerKeys_=null,f.sourceZ_=0;var d=r.getTileCoordExtent(f.wrappedTileCoord_),g=f.targetTileGrid_.getExtent(),_=f.sourceTileGrid_.getExtent(),y=g?Le(d,g):d;if(0===be(y))return f.state=4,f;var v=e.getExtent();v&&(_=_?Le(_,v):v);var m=r.getResolution(f.wrappedTileCoord_[0]),x=function(t,e,n,i){var r=Ie(n),o=Ir(t,e,r,i);return(!isFinite(o)||o<=0)&&Te(n,(function(n){return o=Ir(t,e,n,i),isFinite(o)&&o>0})),o}(e,i,y,m);if(!isFinite(x)||x<=0)return f.state=4,f;var C=void 0!==u?u:.5;if(f.triangulation_=new Er(e,i,y,_,x*C,m),0===f.triangulation_.getTriangles().length)return f.state=4,f;f.sourceZ_=n.getZForResolution(x);var w=f.triangulation_.calculateSourceExtent();if(_&&(e.canWrapX()?(w[1]=mt(w[1],_[1],_[3]),w[3]=mt(w[3],_[1],_[3])):w=Le(w,_)),be(w)){for(var S=n.getTileRangeForExtentAndZ(w,f.sourceZ_),E=S.minX;E<=S.maxX;E++)for(var T=S.minY;T<=S.maxY;T++){var b=h(f.sourceZ_,E,T,a);b&&f.sourceTiles_.push(b)}0===f.sourceTiles_.length&&(f.state=4)}else f.state=4;return f}return Pr(e,t),e.prototype.getImage=function(){return this.canvas_},e.prototype.reproject_=function(){var t=[];if(this.sourceTiles_.forEach(function(e,n,i){e&&2==e.getState()&&t.push({extent:this.sourceTileGrid_.getTileCoordExtent(e.tileCoord),image:e.getImage()})}.bind(this)),this.sourceTiles_.length=0,0===t.length)this.state=3;else{var e=this.wrappedTileCoord_[0],n=this.targetTileGrid_.getTileSize(e),i="number"==typeof n?n:n[0],r="number"==typeof n?n:n[1],o=this.targetTileGrid_.getResolution(e),s=this.sourceTileGrid_.getResolution(this.sourceZ_),a=this.targetTileGrid_.getTileCoordExtent(this.wrappedTileCoord_);this.canvas_=function(t,e,n,i,r,o,s,a,l,h,u,c){var p=q(Math.round(n*t),Math.round(n*e));if(c||f(p,Tr),0===l.length)return p.canvas;function d(t){return Math.round(t*n)/n}p.scale(n,n),p.globalCompositeOperation="lighter";var g=[1/0,1/0,-1/0,-1/0];l.forEach((function(t,e,n){var i,r;i=g,(r=t.extent)[0]i[2]&&(i[2]=r[2]),r[1]i[3]&&(i[3]=r[3])}));var _=ke(g),y=Fe(g),v=q(Math.round(n*_/i),Math.round(n*y/i));c||f(v,Tr);var m=n/i;l.forEach((function(t,e,n){var i=t.extent[0]-g[0],r=-(t.extent[3]-g[3]),o=ke(t.extent),s=Fe(t.extent);t.image.width>0&&t.image.height>0&&v.drawImage(t.image,h,h,t.image.width-2*h,t.image.height-2*h,i*m,r*m,o*m,s*m)}));var x=Ae(s);return a.getTriangles().forEach((function(t,e,r){var s=t.source,a=t.target,l=s[0][0],h=s[0][1],u=s[1][0],f=s[1][1],_=s[2][0],y=s[2][1],m=d((a[0][0]-x[0])/o),C=d(-(a[0][1]-x[1])/o),w=d((a[1][0]-x[0])/o),S=d(-(a[1][1]-x[1])/o),E=d((a[2][0]-x[0])/o),T=d(-(a[2][1]-x[1])/o),b=l,O=h;l=0,h=0;var R=function(t){for(var e=t.length,n=0;nr&&(r=s,i=o)}if(0===r)return null;var a=t[i];t[i]=t[n],t[n]=a;for(var l=n+1;l=0;p--){c[p]=t[p][e]/t[p][p];for(var f=p-1;f>=0;f--)t[f][e]-=t[f][p]*c[p]}return c}([[u-=b,f-=O,0,0,w-m],[_-=b,y-=O,0,0,E-m],[0,0,u,f,S-C],[0,0,_,y,T-C]]);if(R){if(p.save(),p.beginPath(),function(){if(void 0===Cr){var t=document.createElement("canvas").getContext("2d");t.globalCompositeOperation="lighter",t.fillStyle="rgba(210, 0, 0, 0.75)",Or(t,4,5,4,0),Or(t,4,5,0,5);var e=t.getImageData(0,0,3,3).data;Cr=Rr(e,0)||Rr(e,4)||Rr(e,8)}return Cr}()||!c){p.moveTo(w,S);for(var I=m-w,P=C-S,M=0;M<4;M++)p.lineTo(w+d((M+1)*I/4),S+d(M*P/3)),3!=M&&p.lineTo(w+d((M+1)*I/4),S+d((M+1)*P/3));p.lineTo(E,T)}else p.moveTo(w,S),p.lineTo(m,C),p.lineTo(E,T);p.clip(),p.transform(R[0],R[2],R[1],R[3],m,C),p.translate(g[0]-b,g[3]-O),p.scale(i/n,-i/n),p.drawImage(v.canvas,0,0),p.restore()}})),u&&(p.save(),p.globalCompositeOperation="source-over",p.strokeStyle="black",p.lineWidth=1,a.getTriangles().forEach((function(t,e,n){var i=t.target,r=(i[0][0]-x[0])/o,s=-(i[0][1]-x[1])/o,a=(i[1][0]-x[0])/o,l=-(i[1][1]-x[1])/o,h=(i[2][0]-x[0])/o,u=-(i[2][1]-x[1])/o;p.beginPath(),p.moveTo(a,l),p.lineTo(r,s),p.lineTo(h,u),p.closePath(),p.stroke()})),p.restore()),p.canvas}(i,r,this.pixelRatio_,s,this.sourceTileGrid_.getExtent(),o,a,this.triangulation_,t,this.gutter_,this.renderEdges_,this.interpolate),this.state=2}this.changed()},e.prototype.load=function(){if(0==this.state){this.state=1,this.changed();var t=0;this.sourcesListenerKeys_=[],this.sourceTiles_.forEach(function(e,n,i){var r=e.getState();if(0==r||1==r){t++;var o=O(e,x,(function(n){var i=e.getState();2!=i&&3!=i&&4!=i||(I(o),0==--t&&(this.unlistenSources_(),this.reproject_()))}),this);this.sourcesListenerKeys_.push(o)}}.bind(this)),0===t?setTimeout(this.reproject_.bind(this),0):this.sourceTiles_.forEach((function(t,e,n){0==t.getState()&&t.load()}))}},e.prototype.unlistenSources_=function(){this.sourcesListenerKeys_.forEach(I),this.sourcesListenerKeys_=null},e}(_r),Fr=function(){function t(t,e,n,i){this.minX=t,this.maxX=e,this.minY=n,this.maxY=i}return t.prototype.contains=function(t){return this.containsXY(t[1],t[2])},t.prototype.containsTileRange=function(t){return this.minX<=t.minX&&t.maxX<=this.maxX&&this.minY<=t.minY&&t.maxY<=this.maxY},t.prototype.containsXY=function(t,e){return this.minX<=t&&t<=this.maxX&&this.minY<=e&&e<=this.maxY},t.prototype.equals=function(t){return this.minX==t.minX&&this.minY==t.minY&&this.maxX==t.maxX&&this.maxY==t.maxY},t.prototype.extend=function(t){t.minXthis.maxX&&(this.maxX=t.maxX),t.minYthis.maxY&&(this.maxY=t.maxY)},t.prototype.getHeight=function(){return this.maxY-this.minY+1},t.prototype.getSize=function(){return[this.getWidth(),this.getHeight()]},t.prototype.getWidth=function(){return this.maxX-this.minX+1},t.prototype.intersects=function(t){return this.minX<=t.maxX&&this.maxX>=t.minX&&this.minY<=t.maxY&&this.maxY>=t.minY},t}();function Lr(t,e,n,i,r){return void 0!==r?(r.minX=t,r.maxX=e,r.minY=n,r.maxY=i,r):new Fr(t,e,n,i)}var Ar=Fr;function Dr(t){return t[0]>0&&t[1]>0}function kr(t,e){return Array.isArray(t)?t:(void 0===e?e=[t,t]:(e[0]=t,e[1]=t),e)}var jr=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Gr=function(t){function e(e){var n=t.call(this,e)||this;return n.extentChanged=!0,n.renderedExtent_=null,n.renderedPixelRatio,n.renderedProjection=null,n.renderedRevision,n.renderedTiles=[],n.newTiles_=!1,n.tmpExtent=[1/0,1/0,-1/0,-1/0],n.tmpTileRange_=new Ar(0,0,0,0),n}return jr(e,t),e.prototype.isDrawableTile=function(t){var e=this.getLayer(),n=t.getState(),i=e.getUseInterimTilesOnError();return 2==n||4==n||3==n&&!i},e.prototype.getTile=function(t,e,n,i){var r=i.pixelRatio,o=i.viewState.projection,s=this.getLayer(),a=s.getSource().getTile(t,e,n,r,o);return 3==a.getState()&&(s.getUseInterimTilesOnError()?s.getPreload()>0&&(this.newTiles_=!0):a.setState(2)),this.isDrawableTile(a)||(a=a.getInterimTile()),a},e.prototype.getData=function(t){var e=this.frameState;if(!e)return null;var n=this.getLayer(),i=jn(e.pixelToCoordinateTransform,t.slice()),r=n.getExtent();if(r&&!de(r,i))return null;for(var o=e.pixelRatio,s=e.viewState.projection,a=e.viewState,l=n.getRenderSource(),h=l.getTileGridForProjection(a.projection),u=l.getTilePixelRatio(e.pixelRatio),c=h.getZForResolution(a.resolution);c>=h.getMinZoom();--c){var p=h.getTileCoordForCoordAndZ(i,c),f=l.getTile(c,p[1],p[2],o,s);if(!(f instanceof Sr||f instanceof Mr))return null;if(2===f.getState()){var d=h.getOrigin(c),g=kr(h.getTileSize(c)),_=h.getResolution(c),y=Math.floor(u*((i[0]-d[0])/_-p[1]*g[0])),v=Math.floor(u*((d[1]-i[1])/_-p[2]*g[1]));return this.getImageData(f.getImage(),y,v)}}return null},e.prototype.loadedTileCallback=function(e,n,i){return!!this.isDrawableTile(i)&&t.prototype.loadedTileCallback.call(this,e,n,i)},e.prototype.prepareFrame=function(t){return!!this.getLayer().getSource()},e.prototype.renderFrame=function(t,e){var n=t.layerStatesArray[t.layerIndex],i=t.viewState,r=i.projection,s=i.resolution,a=i.center,l=i.rotation,h=t.pixelRatio,u=this.getLayer(),c=u.getSource(),p=c.getRevision(),d=c.getTileGridForProjection(r),g=d.getZForResolution(s,c.zDirection),_=d.getResolution(g),y=t.extent,v=n.extent&&pn(n.extent);v&&(y=Le(y,pn(n.extent)));var m=c.getTilePixelRatio(h),x=Math.round(t.size[0]*m),C=Math.round(t.size[1]*m);if(l){var w=Math.round(Math.sqrt(x*x+C*C));x=w,C=w}var S=_*x/2/m,E=_*C/2/m,T=[a[0]-S,a[1]-E,a[0]+S,a[1]+E],b=d.getTileRangeForExtentAndZ(y,g),O={};O[g]={};var R=this.createLoadedTileFinder(c,r,O),I=this.tmpExtent,P=this.tmpTileRange_;this.newTiles_=!1;for(var M=b.minX;M<=b.maxX;++M)for(var F=b.minY;F<=b.maxY;++F){var L=this.getTile(g,M,F,t);if(this.isDrawableTile(L)){var A=D(this);if(2==L.getState()){O[g][L.tileCoord.toString()]=L;var k=L.inTransition(A);this.newTiles_||!k&&-1!==this.renderedTiles.indexOf(L)||(this.newTiles_=!0)}if(1===L.getAlpha(A,t.time))continue}var j=d.getTileCoordChildTileRange(L.tileCoord,P,I),G=!1;j&&(G=R(g+1,j)),G||d.forEachTileCoordParentTileRange(L.tileCoord,R,P,I)}var z=_/s;Gn(this.pixelTransform,t.size[0]/2,t.size[1]/2,1/m,1/m,l,-x/2,-C/2);var W=Wn(this.pixelTransform);this.useContainer(e,W,n.opacity,this.getBackground(t));var X=this.context,N=X.canvas;zn(this.inversePixelTransform,this.pixelTransform),Gn(this.tempTransform,x/2,C/2,z,z,0,-x/2,-C/2),N.width!=x||N.height!=C?(N.width=x,N.height=C):this.containerReused||X.clearRect(0,0,x,C),v&&this.clipUnrotated(X,t,v),c.getInterpolate()||f(X,Tr),this.preRender(X,t),this.renderedTiles.length=0;var Y,B,K,Z=Object.keys(O).map(Number);Z.sort(o),1!==n.opacity||this.containerReused&&!c.getOpaque(t.viewState.projection)?(Y=[],B=[]):Z=Z.reverse();for(var V=Z.length-1;V>=0;--V){var U=Z[V],H=c.getTilePixelSize(U,h,r),q=d.getResolution(U)/_,J=H[0]*q*z,Q=H[1]*q*z,$=d.getTileCoordForCoordAndZ(Ae(T),U),tt=d.getTileCoordExtent($),et=jn(this.tempTransform,[m*(tt[0]-T[0])/_,m*(T[3]-tt[3])/_]),nt=m*c.getGutterForProjection(r),it=O[U];for(var rt in it){var ot=(L=it[rt]).tileCoord,at=$[1]-ot[1],lt=Math.round(et[0]-(at-1)*J),ht=$[2]-ot[2],ut=Math.round(et[1]-(ht-1)*Q),ct=lt-(M=Math.round(et[0]-at*J)),pt=ut-(F=Math.round(et[1]-ht*Q)),ft=g===U,dt=!1;if(!(k=ft&&1!==L.getAlpha(D(this),t.time)))if(Y){K=[M,F,M+ct,F,M+ct,F+pt,M,F+pt];for(var gt=0,_t=Y.length;gt<_t;++gt)if(g!==U&&Uc&&(this.instructions.push([Po.CUSTOM,c,o,t,n,hi]),this.hitDetectionInstructions.push([Po.CUSTOM,c,o,t,i||n,hi]));break;case In:r=t.getFlatCoordinates(),this.coordinates.push(r[0],r[1]),o=this.coordinates.length,this.instructions.push([Po.CUSTOM,c,o,t,n]),this.hitDetectionInstructions.push([Po.CUSTOM,c,o,t,i||n])}this.endGeometry(e)},e.prototype.beginGeometry=function(t,e){this.beginGeometryInstruction1_=[Po.BEGIN_GEOMETRY,e,0,t],this.instructions.push(this.beginGeometryInstruction1_),this.beginGeometryInstruction2_=[Po.BEGIN_GEOMETRY,e,0,t],this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)},e.prototype.finish=function(){return{instructions:this.instructions,hitDetectionInstructions:this.hitDetectionInstructions,coordinates:this.coordinates}},e.prototype.reverseHitDetectionInstructions=function(){var t,e=this.hitDetectionInstructions;e.reverse();var n,i,r=e.length,o=-1;for(t=0;tthis.maxLineWidth&&(this.maxLineWidth=n.lineWidth,this.bufferedMaxExtent_=null)}else n.strokeStyle=void 0,n.lineCap=void 0,n.lineDash=null,n.lineDashOffset=void 0,n.lineJoin=void 0,n.lineWidth=void 0,n.miterLimit=void 0},e.prototype.createFill=function(t){var e=t.fillStyle,n=[Po.SET_FILL_STYLE,e];return"string"!=typeof e&&n.push(!0),n},e.prototype.applyStroke=function(t){this.instructions.push(this.createStroke(t))},e.prototype.createStroke=function(t){return[Po.SET_STROKE_STYLE,t.strokeStyle,t.lineWidth*this.pixelRatio,t.lineCap,t.lineJoin,t.miterLimit,this.applyPixelRatio(t.lineDash),t.lineDashOffset*this.pixelRatio]},e.prototype.updateFillStyle=function(t,e){var n=t.fillStyle;"string"==typeof n&&t.currentFillStyle==n||(void 0!==n&&this.instructions.push(e.call(this,t)),t.currentFillStyle=n)},e.prototype.updateStrokeStyle=function(t,e){var n=t.strokeStyle,i=t.lineCap,r=t.lineDash,o=t.lineDashOffset,s=t.lineJoin,a=t.lineWidth,l=t.miterLimit;(t.currentStrokeStyle!=n||t.currentLineCap!=i||r!=t.currentLineDash&&!h(t.currentLineDash,r)||t.currentLineDashOffset!=o||t.currentLineJoin!=s||t.currentLineWidth!=a||t.currentMiterLimit!=l)&&(void 0!==n&&e.call(this,t),t.currentStrokeStyle=n,t.currentLineCap=i,t.currentLineDash=r,t.currentLineDashOffset=o,t.currentLineJoin=s,t.currentLineWidth=a,t.currentMiterLimit=l)},e.prototype.endGeometry=function(t){this.beginGeometryInstruction1_[2]=this.instructions.length,this.beginGeometryInstruction1_=null,this.beginGeometryInstruction2_[2]=this.hitDetectionInstructions.length,this.beginGeometryInstruction2_=null;var e=[Po.END_GEOMETRY,t];this.instructions.push(e),this.hitDetectionInstructions.push(e)},e.prototype.getBufferedMaxExtent=function(){if(!this.bufferedMaxExtent_&&(this.bufferedMaxExtent_=pe(this.maxExtent),this.maxLineWidth>0)){var t=this.resolution*(this.maxLineWidth+1)/2;ce(this.bufferedMaxExtent_,t,this.bufferedMaxExtent_)}return this.bufferedMaxExtent_},e}(Mo),Ao=Lo,Do=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ko=function(t){function e(e,n,i,r){var o=t.call(this,e,n,i,r)||this;return o.hitDetectionImage_=null,o.image_=null,o.imagePixelRatio_=void 0,o.anchorX_=void 0,o.anchorY_=void 0,o.height_=void 0,o.opacity_=void 0,o.originX_=void 0,o.originY_=void 0,o.rotateWithView_=void 0,o.rotation_=void 0,o.scale_=void 0,o.width_=void 0,o.declutterImageWithText_=void 0,o}return Do(e,t),e.prototype.drawPoint=function(t,e){if(this.image_){this.beginGeometry(t,e);var n=t.getFlatCoordinates(),i=t.getStride(),r=this.coordinates.length,o=this.appendFlatPointCoordinates(n,i);this.instructions.push([Po.DRAW_IMAGE,r,o,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterImageWithText_]),this.hitDetectionInstructions.push([Po.DRAW_IMAGE,r,o,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterImageWithText_]),this.endGeometry(e)}},e.prototype.drawMultiPoint=function(t,e){if(this.image_){this.beginGeometry(t,e);var n=t.getFlatCoordinates(),i=t.getStride(),r=this.coordinates.length,o=this.appendFlatPointCoordinates(n,i);this.instructions.push([Po.DRAW_IMAGE,r,o,this.image_,this.anchorX_*this.imagePixelRatio_,this.anchorY_*this.imagePixelRatio_,Math.ceil(this.height_*this.imagePixelRatio_),this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,[this.scale_[0]*this.pixelRatio/this.imagePixelRatio_,this.scale_[1]*this.pixelRatio/this.imagePixelRatio_],Math.ceil(this.width_*this.imagePixelRatio_),this.declutterImageWithText_]),this.hitDetectionInstructions.push([Po.DRAW_IMAGE,r,o,this.hitDetectionImage_,this.anchorX_,this.anchorY_,this.height_,this.opacity_,this.originX_,this.originY_,this.rotateWithView_,this.rotation_,this.scale_,this.width_,this.declutterImageWithText_]),this.endGeometry(e)}},e.prototype.finish=function(){return this.reverseHitDetectionInstructions(),this.anchorX_=void 0,this.anchorY_=void 0,this.hitDetectionImage_=null,this.image_=null,this.imagePixelRatio_=void 0,this.height_=void 0,this.scale_=void 0,this.opacity_=void 0,this.originX_=void 0,this.originY_=void 0,this.rotateWithView_=void 0,this.rotation_=void 0,this.width_=void 0,t.prototype.finish.call(this)},e.prototype.setImageStyle=function(t,e){var n=t.getAnchor(),i=t.getSize(),r=t.getHitDetectionImage(),o=t.getImage(this.pixelRatio),s=t.getOrigin();this.imagePixelRatio_=t.getPixelRatio(this.pixelRatio),this.anchorX_=n[0],this.anchorY_=n[1],this.hitDetectionImage_=r,this.image_=o,this.height_=i[1],this.opacity_=t.getOpacity(),this.originX_=s[0]*this.imagePixelRatio_,this.originY_=s[1]*this.imagePixelRatio_,this.rotateWithView_=t.getRotateWithView(),this.rotation_=t.getRotation(),this.scale_=t.getScaleArray(),this.width_=i[0],this.declutterImageWithText_=e},e}(Ao),jo=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Go=function(t){function e(e,n,i,r){return t.call(this,e,n,i,r)||this}return jo(e,t),e.prototype.drawFlatCoordinates_=function(t,e,n,i){var r=this.coordinates.length,o=this.appendFlatLineCoordinates(t,e,n,i,!1,!1),s=[Po.MOVE_TO_LINE_TO,r,o];return this.instructions.push(s),this.hitDetectionInstructions.push(s),n},e.prototype.drawLineString=function(t,e){var n=this.state,i=n.strokeStyle,r=n.lineWidth;if(void 0!==i&&void 0!==r){this.updateStrokeStyle(n,this.applyStroke),this.beginGeometry(t,e),this.hitDetectionInstructions.push([Po.SET_STROKE_STYLE,n.strokeStyle,n.lineWidth,n.lineCap,n.lineJoin,n.miterLimit,Ur,0],Ro);var o=t.getFlatCoordinates(),s=t.getStride();this.drawFlatCoordinates_(o,0,o.length,s),this.hitDetectionInstructions.push(Oo),this.endGeometry(e)}},e.prototype.drawMultiLineString=function(t,e){var n=this.state,i=n.strokeStyle,r=n.lineWidth;if(void 0!==i&&void 0!==r){this.updateStrokeStyle(n,this.applyStroke),this.beginGeometry(t,e),this.hitDetectionInstructions.push([Po.SET_STROKE_STYLE,n.strokeStyle,n.lineWidth,n.lineCap,n.lineJoin,n.miterLimit,n.lineDash,n.lineDashOffset],Ro);for(var o=t.getEnds(),s=t.getFlatCoordinates(),a=t.getStride(),l=0,h=0,u=o.length;ht&&(y>_&&(_=y,d=v,g=o),y=0,v=o-r)),s=a,u=p,c=f),l=m,h=x}return(y+=a)>_?[v,o]:[d,g]}var Yo=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Bo={left:0,end:0,center:.5,right:1,start:1,top:0,middle:.5,hanging:.2,alphabetic:.8,ideographic:.8,bottom:1},Ko=function(t){function e(e,n,i,r){var o=t.call(this,e,n,i,r)||this;return o.labels_=null,o.text_="",o.textOffsetX_=0,o.textOffsetY_=0,o.textRotateWithView_=void 0,o.textRotation_=0,o.textFillState_=null,o.fillStates={},o.textStrokeState_=null,o.strokeStates={},o.textState_={},o.textStates={},o.textKey_="",o.fillKey_="",o.strokeKey_="",o.declutterImageWithText_=void 0,o}return Yo(e,t),e.prototype.finish=function(){var e=t.prototype.finish.call(this);return e.textStates=this.textStates,e.fillStates=this.fillStates,e.strokeStates=this.strokeStates,e},e.prototype.drawText=function(t,e){var n=this.textFillState_,i=this.textStrokeState_,r=this.textState_;if(""!==this.text_&&r&&(n||i)){var o=this.coordinates,s=o.length,a=t.getType(),l=null,h=t.getStride();if("line"!==r.placement||a!=Pn&&a!=Ln&&a!=Mn&&a!=An){var u=r.overflow?null:[];switch(a){case In:case Fn:l=t.getFlatCoordinates();break;case Pn:l=t.getFlatMidpoint();break;case kn:l=t.getCenter();break;case Ln:l=t.getFlatMidpoints(),h=2;break;case Mn:l=t.getFlatInteriorPoint(),r.overflow||u.push(l[2]/this.resolution),h=3;break;case An:var c=t.getFlatInteriorPoints();for(l=[],w=0,S=c.length;wR[2]}else T=x>b;var I,P=Math.PI,M=[],F=w+i===e;if(_=0,y=S,p=t[e=w],f=t[e+1],F){v(),I=Math.atan2(f-g,p-d),T&&(I+=I>0?-P:P);var L=(b+x)/2,A=(O+C)/2;return M[0]=[L,A,(E-o)/2,I,r],M}for(var D=0,k=r.length;D0?-P:P),void 0!==I){var G=j-I;if(G+=G>P?-2*P:G<-P?2*P:0,Math.abs(G)>s)return null}I=j;for(var z=D,W=0;D0&&t.push("\n",""),t.push(e,""),t}var us=function(){function t(t,e,n,i){this.overlaps=n,this.pixelRatio=e,this.resolution=t,this.alignFill_,this.instructions=i.instructions,this.coordinates=i.coordinates,this.coordinateCache_={},this.renderedTransform_=[1,0,0,1,0,0],this.hitDetectionInstructions=i.hitDetectionInstructions,this.pixelCoordinates_=null,this.viewRotation_=0,this.fillStates=i.fillStates||{},this.strokeStates=i.strokeStates||{},this.textStates=i.textStates||{},this.widths_={},this.labels_={}}return t.prototype.createLabel=function(t,e,n,i){var r=t+e+n+i;if(this.labels_[r])return this.labels_[r];var o=i?this.strokeStates[i]:null,s=n?this.fillStates[n]:null,a=this.textStates[e],l=this.pixelRatio,h=[a.scale[0]*l,a.scale[1]*l],u=Array.isArray(t),c=ls(u?t[0]:t,a.textAlign||Jr),p=i&&o.lineWidth?o.lineWidth:0,f=u?t:t.split("\n").reduce(hs,[]),d=function(t,e){for(var n=[],i=[],r=[],o=0,s=0,a=0,l=0,h=0,u=e.length;h<=u;h+=2){var c=e[h];if("\n"!==c&&h!==u){var p=e[h+1]||t.font,f=lo(p,c);n.push(f),s+=f;var d=so(p);i.push(d),l=Math.max(l,d)}else o=Math.max(o,s),r.push(s),s=0,a+=l}return{width:o,height:a,widths:n,heights:i,lineWidths:r}}(a,f),g=d.width,_=d.height,y=d.widths,v=d.heights,m=d.lineWidths,x=g+p,C=[],w=(x+2)*h[0],S=(_+p)*h[1],E={width:w<0?Math.floor(w):Math.ceil(w),height:S<0?Math.floor(S):Math.ceil(S),contextInstructions:C};1==h[0]&&1==h[1]||C.push("scale",h),i&&(C.push("strokeStyle",o.strokeStyle),C.push("lineWidth",p),C.push("lineCap",o.lineCap),C.push("lineJoin",o.lineJoin),C.push("miterLimit",o.miterLimit),(V?OffscreenCanvasRenderingContext2D:CanvasRenderingContext2D).prototype.setLineDash&&(C.push("setLineDash",[o.lineDash]),C.push("lineDashOffset",o.lineDashOffset))),n&&C.push("fillStyle",s.fillStyle),C.push("textBaseline","middle"),C.push("textAlign","center");for(var T,b=.5-c,O=c*x+b*p,R=[],I=[],P=0,M=0,F=0,L=0,A=0,D=f.length;At?t-l:r,x=o+h>e?e-h:o,C=f[3]+m*c[0]+f[1],w=f[0]+x*c[1]+f[2],S=y-f[3],E=v-f[0];return(d||0!==u)&&(ns[0]=S,os[0]=S,ns[1]=E,is[1]=E,is[0]=S+C,rs[0]=is[0],rs[1]=E+w,os[1]=rs[1]),0!==u?(jn(_=Gn([1,0,0,1,0,0],n,i,1,1,u,-n,-i),ns),jn(_,is),jn(_,rs),jn(_,os),ve(Math.min(ns[0],is[0],rs[0],os[0]),Math.min(ns[1],is[1],rs[1],os[1]),Math.max(ns[0],is[0],rs[0],os[0]),Math.max(ns[1],is[1],rs[1],os[1]),es)):ve(Math.min(S,S+C),Math.min(E,E+w),Math.max(S,S+C),Math.max(E,E+w),es),p&&(y=Math.round(y),v=Math.round(v)),{drawImageX:y,drawImageY:v,drawImageW:m,drawImageH:x,originX:l,originY:h,declutterBox:{minX:es[0],minY:es[1],maxX:es[2],maxY:es[3],value:g},canvasTransform:_,scale:c}},t.prototype.replayImageOrLabel_=function(t,e,n,i,r,o,s){var a=!(!o&&!s),l=i.declutterBox,h=t.canvas,u=s?s[2]*i.scale[0]/2:0;return l.minX-u<=h.width/e&&l.maxX+u>=0&&l.minY-u<=h.height/e&&l.maxY+u>=0&&(a&&this.replayTextBackground_(t,ns,is,rs,os,o,s),function(t,e,n,i,r,o,s,a,l,h,u){t.save(),1!==n&&(t.globalAlpha*=n),e&&t.setTransform.apply(t,e),i.contextInstructions?(t.translate(l,h),t.scale(u[0],u[1]),function(t,e){for(var n=t.contextInstructions,i=0,r=n.length;iz&&(this.fill_(t),M=0),F>z&&(t.stroke(),F=0),M||F||(t.beginPath(),g=NaN,_=NaN),++R;break;case Po.CIRCLE:var X=l[P=W[1]],N=l[P+1],Y=l[P+2]-X,B=l[P+3]-N,K=Math.sqrt(Y*Y+B*B);t.moveTo(X+K,N),t.arc(X,N,K,0,2*Math.PI,!0),++R;break;case Po.CLOSE_PATH:t.closePath(),++R;break;case Po.CUSTOM:P=W[1],p=W[2];var Z=W[3],V=W[4],U=6==W.length?W[5]:void 0;G.geometry=Z,G.feature=E,R in D||(D[R]=[]);var H=D[R];U?U(l,P,p,2,H):(H[0]=l[P],H[1]=l[P+1],H.length=2),V(H,G),++R;break;case Po.DRAW_IMAGE:P=W[1],p=W[2],m=W[3],f=W[4],d=W[5];var q=W[6],J=W[7],Q=W[8],$=W[9],tt=W[10],et=W[11],nt=W[12],it=W[13],rt=W[14];if(!m&&W.length>=19){x=W[18],C=W[19],w=W[20],S=W[21];var ot=this.drawLabelWithPointPlacement_(x,C,w,S);m=ot.label,W[3]=m;var st=W[22];f=(ot.anchorX-st)*this.pixelRatio,W[4]=f;var at=W[23];d=(ot.anchorY-at)*this.pixelRatio,W[5]=d,q=m.height,W[6]=q,it=m.width,W[13]=it}var lt=void 0;W.length>24&&(lt=W[24]);var ht=void 0,ut=void 0,ct=void 0;W.length>16?(ht=W[15],ut=W[16],ct=W[17]):(ht=$r,ut=!1,ct=!1),tt&&j?et+=k:tt||j||(et-=k);for(var pt=0;Pn)break;var a=i[s];a||(a=[],i[s]=a),a.push(4*((t+r)*e+(t+o))+3),r>0&&a.push(4*((t-r)*e+(t+o))+3),o>0&&(a.push(4*((t+r)*e+(t-o))+3),r>0&&a.push(4*((t-r)*e+(t-o))+3))}for(var l=[],h=(r=0,i.length);r0){if(!s||p!==qo&&p!==$o||-1!==s.indexOf(t)){var h=(f[o]-3)/4,u=i-h%a,d=i-(h/a|0),g=r(t,e,u*u+d*d);if(g)return g}c.clearRect(0,0,a,a);break}}var g,_,y,v,m,x=Object.keys(this.executorsByZIndex_).map(Number);for(x.sort(o),g=x.length-1;g>=0;--g){var C=x[g].toString();for(y=this.executorsByZIndex_[C],_=ps.length-1;_>=0;--_)if(void 0!==(v=y[p=ps[_]])&&(m=v.executeHitDetection(c,l,n,d,u)))return m}},t.prototype.getClipCoords=function(t){var e=this.maxExtent_;if(!e)return null;var n=e[0],i=e[1],r=e[2],o=e[3],s=[n,i,n,o,r,o,r,i];return Xn(s,0,8,2,t,s),s},t.prototype.isEmpty=function(){return _(this.executorsByZIndex_)},t.prototype.execute=function(t,e,n,i,r,s,a){var l=Object.keys(this.executorsByZIndex_).map(Number);l.sort(o),this.maxExtent_&&(t.save(),this.clip(t,n));var h,u,c,p,f,d,g=s||ps;for(a&&l.reverse(),h=0,u=l.length;hthis.maxCacheSize_},t.prototype.expire=function(){if(this.canExpireCache()){var t=0;for(var e in this.cache_){var n=this.cache_[e];0!=(3&t++)||n.hasListener()||(delete this.cache_[e],--this.cacheSize_)}}},t.prototype.get=function(t,e,n){var i=Ts(t,e,n);return i in this.cache_?this.cache_[i]:null},t.prototype.set=function(t,e,n,i){var r=Ts(t,e,n);this.cache_[r]=i,++this.cacheSize_},t.prototype.setSize=function(t){this.maxCacheSize_=t,this.expire()},t}()),Os=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Rs=null,Is=function(t){function e(e,n,i,r,o,s){var a=t.call(this)||this;return a.hitDetectionImage_=null,a.image_=e||new Image,null!==r&&(a.image_.crossOrigin=r),a.canvas_={},a.color_=s,a.unlisten_=null,a.imageState_=o,a.size_=i,a.src_=n,a.tainted_,a}return Os(e,t),e.prototype.isTainted_=function(){if(void 0===this.tainted_&&2===this.imageState_){Rs||(Rs=q(1,1)),Rs.drawImage(this.image_,0,0);try{Rs.getImageData(0,0,1,1),this.tainted_=!1}catch(t){Rs=null,this.tainted_=!0}}return!0===this.tainted_},e.prototype.dispatchChangeEvent_=function(){this.dispatchEvent(x)},e.prototype.handleImageError_=function(){this.imageState_=3,this.unlistenImage_(),this.dispatchChangeEvent_()},e.prototype.handleImageLoad_=function(){this.imageState_=2,this.size_?(this.image_.width=this.size_[0],this.image_.height=this.size_[1]):this.size_=[this.image_.width,this.image_.height],this.unlistenImage_(),this.dispatchChangeEvent_()},e.prototype.getImage=function(t){return this.replaceColor_(t),this.canvas_[t]?this.canvas_[t]:this.image_},e.prototype.getPixelRatio=function(t){return this.replaceColor_(t),this.canvas_[t]?t:1},e.prototype.getImageState=function(){return this.imageState_},e.prototype.getHitDetectionImage=function(){if(!this.hitDetectionImage_)if(this.isTainted_()){var t=this.size_[0],e=this.size_[1],n=q(t,e);n.fillRect(0,0,t,e),this.hitDetectionImage_=n.canvas}else this.hitDetectionImage_=this.image_;return this.hitDetectionImage_},e.prototype.getSize=function(){return this.size_},e.prototype.getSrc=function(){return this.src_},e.prototype.load=function(){if(0==this.imageState_){this.imageState_=1;try{this.image_.src=this.src_}catch(t){this.handleImageError_()}this.unlisten_=xr(this.image_,this.handleImageLoad_.bind(this),this.handleImageError_.bind(this))}},e.prototype.replaceColor_=function(t){if(this.color_&&!this.canvas_[t]&&2===this.imageState_){var e=document.createElement("canvas");this.canvas_[t]=e,e.width=Math.ceil(this.image_.width*t),e.height=Math.ceil(this.image_.height*t);var n=e.getContext("2d");if(n.scale(t,t),n.drawImage(this.image_,0,0),n.globalCompositeOperation="multiply","multiply"===n.globalCompositeOperation||this.isTainted_())n.fillStyle=sr(this.color_),n.fillRect(0,0,e.width/t,e.height/t),n.globalCompositeOperation="destination-in",n.drawImage(this.image_,0,0);else{for(var i=n.getImageData(0,0,e.width,e.height),r=i.data,o=this.color_[0]/255,s=this.color_[1]/255,a=this.color_[2]/255,l=this.color_[3],h=0,u=r.length;h0,6);var u=void 0!==i.src?0:2;return n.color_=void 0!==i.color?lr(i.color):null,n.iconImage_=function(t,e,n,i,r,o){var s=bs.get(e,i,o);return s||(s=new Is(t,e,n,i,r,o),bs.set(e,i,o,s)),s}(l,h,void 0!==n.imgSize_?n.imgSize_:null,n.crossOrigin_,u,n.color_),n.offset_=void 0!==i.offset?i.offset:[0,0],n.offsetOrigin_=void 0!==i.offsetOrigin?i.offsetOrigin:Ss,n.origin_=null,n.size_=void 0!==i.size?i.size:null,n}return Ps(e,t),e.prototype.clone=function(){var t=this.getScale();return new e({anchor:this.anchor_.slice(),anchorOrigin:this.anchorOrigin_,anchorXUnits:this.anchorXUnits_,anchorYUnits:this.anchorYUnits_,color:this.color_&&this.color_.slice?this.color_.slice():this.color_||void 0,crossOrigin:this.crossOrigin_,imgSize:this.imgSize_,offset:this.offset_.slice(),offsetOrigin:this.offsetOrigin_,opacity:this.getOpacity(),rotateWithView:this.getRotateWithView(),rotation:this.getRotation(),scale:Array.isArray(t)?t.slice():t,size:null!==this.size_?this.size_.slice():void 0,src:this.getSrc()})},e.prototype.getAnchor=function(){var t=this.normalizedAnchor_;if(!t){t=this.anchor_;var e=this.getSize();if(this.anchorXUnits_==ms||this.anchorYUnits_==ms){if(!e)return null;t=this.anchor_.slice(),this.anchorXUnits_==ms&&(t[0]*=e[0]),this.anchorYUnits_==ms&&(t[1]*=e[1])}if(this.anchorOrigin_!=Ss){if(!e)return null;t===this.anchor_&&(t=this.anchor_.slice()),this.anchorOrigin_!=Es&&this.anchorOrigin_!=ws||(t[0]=-t[0]+e[0]),this.anchorOrigin_!=Cs&&this.anchorOrigin_!=ws||(t[1]=-t[1]+e[1])}this.normalizedAnchor_=t}var n=this.getDisplacement();return[t[0]-n[0],t[1]+n[1]]},e.prototype.setAnchor=function(t){this.anchor_=t,this.normalizedAnchor_=null},e.prototype.getColor=function(){return this.color_},e.prototype.getImage=function(t){return this.iconImage_.getImage(t)},e.prototype.getPixelRatio=function(t){return this.iconImage_.getPixelRatio(t)},e.prototype.getImageSize=function(){return this.iconImage_.getSize()},e.prototype.getImageState=function(){return this.iconImage_.getImageState()},e.prototype.getHitDetectionImage=function(){return this.iconImage_.getHitDetectionImage()},e.prototype.getOrigin=function(){if(this.origin_)return this.origin_;var t=this.offset_;if(this.offsetOrigin_!=Ss){var e=this.getSize(),n=this.iconImage_.getSize();if(!e||!n)return null;t=t.slice(),this.offsetOrigin_!=Es&&this.offsetOrigin_!=ws||(t[0]=n[0]-e[0]-t[0]),this.offsetOrigin_!=Cs&&this.offsetOrigin_!=ws||(t[1]=n[1]-e[1]-t[1])}return this.origin_=t,this.origin_},e.prototype.getSrc=function(){return this.iconImage_.getSrc()},e.prototype.getSize=function(){return this.size_?this.size_:this.iconImage_.getSize()},e.prototype.listenImageChange=function(t){this.iconImage_.addEventListener(x,t)},e.prototype.load=function(){this.iconImage_.load()},e.prototype.unlistenImageChange=function(t){this.iconImage_.removeEventListener(x,t)},e}(Yr),Fs=.5,Ls={Point:function(t,e,n,i,r){var o,s=n.getImage(),a=n.getText();if(r&&(t=r,o=s&&a&&a.getText()?{}:void 0),s){if(2!=s.getImageState())return;var l=t.getBuilder(n.getZIndex(),qo);l.setImageStyle(s,o),l.drawPoint(e,i)}if(a&&a.getText()){var h=t.getBuilder(n.getZIndex(),$o);h.setTextStyle(a,o),h.drawText(e,i)}},LineString:function(t,e,n,i,r){var o=n.getStroke();if(o){var s=t.getBuilder(n.getZIndex(),Jo);s.setFillStrokeStyle(null,o),s.drawLineString(e,i)}var a=n.getText();if(a&&a.getText()){var l=(r||t).getBuilder(n.getZIndex(),$o);l.setTextStyle(a),l.drawText(e,i)}},Polygon:function(t,e,n,i,r){var o=n.getFill(),s=n.getStroke();if(o||s){var a=t.getBuilder(n.getZIndex(),Qo);a.setFillStrokeStyle(o,s),a.drawPolygon(e,i)}var l=n.getText();if(l&&l.getText()){var h=(r||t).getBuilder(n.getZIndex(),$o);h.setTextStyle(l),h.drawText(e,i)}},MultiPoint:function(t,e,n,i,r){var o,s=n.getImage(),a=n.getText();if(r&&(t=r,o=s&&a&&a.getText()?{}:void 0),s){if(2!=s.getImageState())return;var l=t.getBuilder(n.getZIndex(),qo);l.setImageStyle(s,o),l.drawMultiPoint(e,i)}if(a&&a.getText()){var h=(r||t).getBuilder(n.getZIndex(),$o);h.setTextStyle(a,o),h.drawText(e,i)}},MultiLineString:function(t,e,n,i,r){var o=n.getStroke();if(o){var s=t.getBuilder(n.getZIndex(),Jo);s.setFillStrokeStyle(null,o),s.drawMultiLineString(e,i)}var a=n.getText();if(a&&a.getText()){var l=(r||t).getBuilder(n.getZIndex(),$o);l.setTextStyle(a),l.drawText(e,i)}},MultiPolygon:function(t,e,n,i,r){var o=n.getFill(),s=n.getStroke();if(s||o){var a=t.getBuilder(n.getZIndex(),Qo);a.setFillStrokeStyle(o,s),a.drawMultiPolygon(e,i)}var l=n.getText();if(l&&l.getText()){var h=(r||t).getBuilder(n.getZIndex(),$o);h.setTextStyle(l),h.drawText(e,i)}},GeometryCollection:function(t,e,n,i,r){var o,s,a=e.getGeometriesArray();for(o=0,s=a.length;od[2];)v=_*++y,u.push(this.getRenderTransform(i,r,s,Fs,c,p,v).slice()),g-=_}this.hitDetectionImageData_=function(t,e,n,i,r,s,a){var l=q(t[0]*Fs,t[1]*Fs);l.imageSmoothingEnabled=!1;for(var h=l.canvas,u=new vs(l,Fs,r,null,a),c=n.length,p=Math.floor(16777215/c),f={},d=1;d<=c;++d){var g=n[d-1],_=g.getStyleFunction()||i;if(i){var y=_(g,s);if(y){Array.isArray(y)||(y=[y]);for(var v="#"+("000000"+(d*p).toString(16)).slice(-6),m=0,x=y.length;m=n[2])){var r=ke(n),o=Math.floor((i[0]-n[0])/r)*r;t[0]-=o,t[2]-=o}return t}(m[0],u);S[0]x[0]&&S[2]>x[2]&&m.push([S[0]-C,S[1],S[2]-C,S[3]])}if(!this.dirty_&&this.renderedResolution_==c&&this.renderedRevision_==f&&this.renderedRenderOrder_==g&&ge(this.wrappedRenderedExtent_,y))return h(this.renderedExtent_,v)||(this.hitDetectionImageData_=null,this.renderedExtent_=v),this.renderedCenter_=_,this.replayGroupChanged=!1,!0;this.replayGroup_=null,this.dirty_=!1;var E,T=new Vo(Ds(c,p),y,c,p);this.getLayer().getDeclutter()&&(E=new Vo(Ds(c,p),y,c,p));var b,O=ln();if(O){for(var R=0,I=m.length;R0&&this.getCount()>this.highWaterMark},t.prototype.expireCache=function(t){for(;this.canExpireCache();)this.pop()},t.prototype.clear=function(){this.count_=0,this.entries_={},this.oldest_=null,this.newest_=null},t.prototype.containsKey=function(t){return this.entries_.hasOwnProperty(t)},t.prototype.forEach=function(t){for(var e=this.oldest_;e;)t(e.value_,e.key_,this),e=e.newer},t.prototype.get=function(t,e){var n=this.entries_[t];return vt(void 0!==n,15),n===this.newest_||(n===this.oldest_?(this.oldest_=this.oldest_.newer,this.oldest_.older=null):(n.newer.older=n.older,n.older.newer=n.newer),n.newer=null,n.older=this.newest_,this.newest_.newer=n,this.newest_=n),n.value_},t.prototype.remove=function(t){var e=this.entries_[t];return vt(void 0!==e,15),e===this.newest_?(this.newest_=e.older,this.newest_&&(this.newest_.newer=null)):e===this.oldest_?(this.oldest_=e.newer,this.oldest_&&(this.oldest_.older=null)):(e.newer.older=e.older,e.older.newer=e.newer),delete this.entries_[t],--this.count_,e.value_},t.prototype.getCount=function(){return this.count_},t.prototype.getKeys=function(){var t,e=new Array(this.count_),n=0;for(t=this.newest_;t;t=t.older)e[n++]=t.key_;return e},t.prototype.getValues=function(){var t,e=new Array(this.count_),n=0;for(t=this.newest_;t;t=t.older)e[n++]=t.value_;return e},t.prototype.peekLast=function(){return this.oldest_.value_},t.prototype.peekLastKey=function(){return this.oldest_.key_},t.prototype.peekFirstKey=function(){return this.newest_.key_},t.prototype.pop=function(){var t=this.oldest_;return delete this.entries_[t.key_],t.newer&&(t.newer.older=null),this.oldest_=t.newer,this.oldest_||(this.newest_=null),--this.count_,t.value_},t.prototype.replace=function(t,e){this.get(t),this.entries_[t].value_=e},t.prototype.set=function(t,e){vt(!(t in this.entries_),16);var n={key_:t,newer:null,older:this.newest_,value_:e};this.newest_?this.newest_.newer=n:this.oldest_=n,this.newest_=n,this.entries_[t]=n,++this.count_},t.prototype.setSize=function(t){this.highWaterMark=t},t}();function Bs(t,e,n,i){return void 0!==i?(i[0]=t,i[1]=e,i[2]=n,i):[t,e,n]}function Ks(t,e,n){return t+"/"+e+"/"+n}function Zs(t){return Ks(t[0],t[1],t[2])}var Vs=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Us=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return Vs(e,t),e.prototype.expireCache=function(t){for(;this.canExpireCache()&&!(this.peekLast().getKey()in t);)this.pop().release()},e.prototype.pruneExceptNewestZ=function(){if(0!==this.getCount()){var t=this.peekFirstKey().split("/").map(Number)[0];this.forEach(function(e){e.tileCoord[0]!==t&&(this.remove(Zs(e.tileCoord)),e.release())}.bind(this))}},e}(Ys),Hs=Us,qs=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function Js(t){return t?Array.isArray(t)?function(e){return t}:"function"==typeof t?t:function(e){return[t]}:null}var Qs=function(t){function e(e){var n=t.call(this)||this;n.projection=Ue(e.projection),n.attributions_=Js(e.attributions),n.attributionsCollapsible_=void 0===e.attributionsCollapsible||e.attributionsCollapsible,n.loading=!1,n.state_=void 0!==e.state?e.state:Dt,n.wrapX_=void 0!==e.wrapX&&e.wrapX,n.interpolate_=!!e.interpolate,n.viewResolver=null,n.viewRejector=null;var i=n;return n.viewPromise_=new Promise((function(t,e){i.viewResolver=t,i.viewRejector=e})),n}return qs(e,t),e.prototype.getAttributions=function(){return this.attributions_},e.prototype.getAttributionsCollapsible=function(){return this.attributionsCollapsible_},e.prototype.getProjection=function(){return this.projection},e.prototype.getResolutions=function(){return L()},e.prototype.getView=function(){return this.viewPromise_},e.prototype.getState=function(){return this.state_},e.prototype.getWrapX=function(){return this.wrapX_},e.prototype.getInterpolate=function(){return this.interpolate_},e.prototype.refresh=function(){this.changed()},e.prototype.setAttributions=function(t){this.attributions_=Js(t),this.changed()},e.prototype.setState=function(t){this.state_=t,this.changed()},e}(G),$s=[0,0,0],ta=function(){function t(t){var e,n,i;if(this.minZoom=void 0!==t.minZoom?t.minZoom:0,this.resolutions_=t.resolutions,vt((e=this.resolutions_,!0,n=function(t,e){return e-t}||o,e.every((function(t,i){if(0===i)return!0;var r=n(e[i-1],t);return!(r>0||0===r)}))),17),!t.origins)for(var r=0,s=this.resolutions_.length-1;r=this.minZoom;){if(e(a,2===this.zoomFactor_?Lr(r=Math.floor(r/2),r,o=Math.floor(o/2),o,n):this.getTileRangeForExtentAndZ(s,a,n)))return!0;--a}return!1},t.prototype.getExtent=function(){return this.extent_},t.prototype.getMaxZoom=function(){return this.maxZoom},t.prototype.getMinZoom=function(){return this.minZoom},t.prototype.getOrigin=function(t){return this.origin_?this.origin_:this.origins_[t]},t.prototype.getResolution=function(t){return this.resolutions_[t]},t.prototype.getResolutions=function(){return this.resolutions_},t.prototype.getTileCoordChildTileRange=function(t,e,n){if(t[0]this.maxZoom||e0?i:Math.max(s/a[0],o/a[1]),h=r+1,u=new Array(h),c=0;cn||n>e.getMaxZoom())return!1;var o=e.getFullTileRange(n);return!o||o.containsXY(i,r)}(t,i)?t:null},e.prototype.clear=function(){this.tileCache.clear()},e.prototype.refresh=function(){this.clear(),t.prototype.refresh.call(this)},e.prototype.updateCacheSize=function(t,e){var n=this.getTileCacheForProjection(e);t>n.highWaterMark&&(n.highWaterMark=t)},e.prototype.useTile=function(t,e,n,i){},e}(Qs),sa=function(t){function e(e,n){var i=t.call(this,e)||this;return i.tile=n,i}return ra(e,t),e}(t),aa=oa;function la(t,e){var n=/\{z\}/g,i=/\{x\}/g,r=/\{y\}/g,o=/\{-y\}/g;return function(s,a,l){return s?t.replace(n,s[0].toString()).replace(i,s[1].toString()).replace(r,s[2].toString()).replace(o,(function(){var t=s[0],n=e.getFullTileRange(t);return vt(n,55),(n.getHeight()-s[2]-1).toString()})):void 0}}var ha=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ua=function(t){function e(n){var i=t.call(this,{attributions:n.attributions,cacheSize:n.cacheSize,opaque:n.opaque,projection:n.projection,state:n.state,tileGrid:n.tileGrid,tilePixelRatio:n.tilePixelRatio,wrapX:n.wrapX,transition:n.transition,interpolate:n.interpolate,key:n.key,attributionsCollapsible:n.attributionsCollapsible,zDirection:n.zDirection})||this;return i.generateTileUrlFunction_=i.tileUrlFunction===e.prototype.tileUrlFunction,i.tileLoadFunction=n.tileLoadFunction,n.tileUrlFunction&&(i.tileUrlFunction=n.tileUrlFunction),i.urls=null,n.urls?i.setUrls(n.urls):n.url&&i.setUrl(n.url),i.tileLoadingKeys_={},i}return ha(e,t),e.prototype.getTileLoadFunction=function(){return this.tileLoadFunction},e.prototype.getTileUrlFunction=function(){return Object.getPrototypeOf(this).tileUrlFunction===this.tileUrlFunction?this.tileUrlFunction.bind(this):this.tileUrlFunction},e.prototype.getUrls=function(){return this.urls},e.prototype.handleTileChange=function(t){var e,n=t.target,i=D(n),r=n.getState();1==r?(this.tileLoadingKeys_[i]=!0,e="tileloadstart"):i in this.tileLoadingKeys_&&(delete this.tileLoadingKeys_[i],e=3==r?"tileloaderror":2==r?"tileloadend":void 0),null!=e&&this.dispatchEvent(new sa(e,n))},e.prototype.setTileLoadFunction=function(t){this.tileCache.clear(),this.tileLoadFunction=t,this.changed()},e.prototype.setTileUrlFunction=function(t,e){this.tileUrlFunction=t,this.tileCache.pruneExceptNewestZ(),void 0!==e?this.setKey(e):this.changed()},e.prototype.setUrl=function(t){var e=function(t){var e=[],n=/\{([a-z])-([a-z])\}/.exec(t);if(n){var i=n[1].charCodeAt(0),r=n[2].charCodeAt(0),o=void 0;for(o=i;o<=r;++o)e.push(t.replace(n[0],String.fromCharCode(o)));return e}if(n=/\{(\d+)-(\d+)\}/.exec(t)){for(var s=parseInt(n[2],10),a=parseInt(n[1],10);a<=s;a++)e.push(t.replace(n[0],a.toString()));return e}return e.push(t),e}(t);this.urls=e,this.setUrls(e)},e.prototype.setUrls=function(t){this.urls=t;var e=t.join("\n");this.generateTileUrlFunction_?this.setTileUrlFunction(function(t,e){for(var n=t.length,i=new Array(n),r=0;rOpenStreetMap contributors.'];var o=void 0!==i.crossOrigin?i.crossOrigin:"anonymous",s=void 0!==i.url?i.url:"https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png";return t.call(this,{attributions:n,attributionsCollapsible:!1,cacheSize:i.cacheSize,crossOrigin:o,interpolate:r,maxZoom:void 0!==i.maxZoom?i.maxZoom:19,opaque:void 0===i.opaque||i.opaque,reprojectionErrorThreshold:i.reprojectionErrorThreshold,tileLoadFunction:i.tileLoadFunction,transition:i.transition,url:s,wrapX:i.wrapX,zDirection:i.zDirection})||this}return ya(e,t),e}(_a),ma="add",xa="remove",Ca=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),wa="length",Sa=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.element=n,r.index=i,r}return Ca(e,t),e}(t),Ea=function(t){function e(e,n){var i=t.call(this)||this;i.on,i.once,i.un;var r=n||{};if(i.unique_=!!r.unique,i.array_=e||[],i.unique_)for(var o=0,s=i.array_.length;o0;)this.pop()},e.prototype.extend=function(t){for(var e=0,n=t.length;e=200&&a.status<300){var i=e.getType(),l=void 0;"json"==i||"text"==i?l=a.responseText:"xml"==i?(l=a.responseXML)||(l=(new DOMParser).parseFromString(a.responseText,"application/xml")):i==Ia&&(l=a.response),l?o(e.readFeatures(l,{extent:n,featureProjection:r}),e.readProjection(l)):s()}else s()},a.onerror=s,a.send()}(t,e,n,i,r,(function(t,e){a.addFeatures(t),void 0!==o&&o(t)}),s||p)}}var Ma=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Fa=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.feature=n,r.features=i,r}return Ma(e,t),e}(t),La=function(t){function n(e){var n=this,i=e||{};(n=t.call(this,{attributions:i.attributions,interpolate:!0,projection:void 0,state:Dt,wrapX:void 0===i.wrapX||i.wrapX})||this).on,n.once,n.un,n.loader_=p,n.format_=i.format,n.overlaps_=void 0===i.overlaps||i.overlaps,n.url_=i.url,void 0!==i.loader?n.loader_=i.loader:void 0!==n.url_&&(vt(n.format_,7),n.loader_=Pa(n.url_,n.format_)),n.strategy_=void 0!==i.strategy?i.strategy:Ra;var r,o,s=void 0===i.useSpatialIndex||i.useSpatialIndex;return n.featuresRtree_=s?new Ta:null,n.loadedExtentsRtree_=new Ta,n.loadingExtentsCount_=0,n.nullGeometryFeatures_={},n.idIndex_={},n.uidIndex_={},n.featureChangeKeys_={},n.featuresCollection_=null,Array.isArray(i.features)?o=i.features:i.features&&(o=(r=i.features).getArray()),s||void 0!==r||(r=new Ea(o)),void 0!==o&&n.addFeaturesInternal(o),void 0!==r&&n.bindFeaturesCollection_(r),n}return Ma(n,t),n.prototype.addFeature=function(t){this.addFeatureInternal(t),this.changed()},n.prototype.addFeatureInternal=function(t){var e=D(t);if(this.addToIndex_(e,t)){this.setupChangeEvents_(e,t);var n=t.getGeometry();if(n){var i=n.getExtent();this.featuresRtree_&&this.featuresRtree_.insert(i,t)}else this.nullGeometryFeatures_[e]=t;this.dispatchEvent(new Fa(ba,t))}else this.featuresCollection_&&this.featuresCollection_.remove(t)},n.prototype.setupChangeEvents_=function(t,n){this.featureChangeKeys_[t]=[O(n,x,this.handleFeatureChange_,this),O(n,e,this.handleFeatureChange_,this)]},n.prototype.addToIndex_=function(t,e){var n=!0,i=e.getId();return void 0!==i&&(i.toString()in this.idIndex_?n=!1:this.idIndex_[i.toString()]=e),n&&(vt(!(t in this.uidIndex_),30),this.uidIndex_[t]=e),n},n.prototype.addFeatures=function(t){this.addFeaturesInternal(t),this.changed()},n.prototype.addFeaturesInternal=function(t){for(var e=[],n=[],i=[],r=0,o=t.length;r0},n.prototype.refresh=function(){this.clear(!0),this.loadedExtentsRtree_.clear(),t.prototype.refresh.call(this)},n.prototype.removeLoadedExtent=function(t){var e,n=this.loadedExtentsRtree_;n.forEachInExtent(t,(function(n){if(Ce(n.extent,t))return e=n,!0})),e&&n.remove(e)},n.prototype.removeFeature=function(t){if(t){var e=D(t);e in this.nullGeometryFeatures_?delete this.nullGeometryFeatures_[e]:this.featuresRtree_&&this.featuresRtree_.remove(t),this.removeFeatureInternal(t)&&this.changed()}},n.prototype.removeFeatureInternal=function(t){var e=D(t),n=this.featureChangeKeys_[e];if(n){n.forEach(I),delete this.featureChangeKeys_[e];var i=t.getId();return void 0!==i&&delete this.idIndex_[i.toString()],delete this.uidIndex_[e],this.dispatchEvent(new Fa(Oa,t)),t}},n.prototype.removeFromIdIndex_=function(t){var e=!1;for(var n in this.idIndex_)if(this.idIndex_[n]===t){delete this.idIndex_[n],e=!0;break}return e},n.prototype.setLoader=function(t){this.loader_=t},n.prototype.setUrl=function(t){vt(this.format_,7),this.url_=t,this.setLoader(Pa(t,this.format_))},n}(Qs),Aa=function(){function t(t){var e=t||{};this.font_=e.font,this.rotation_=e.rotation,this.rotateWithView_=e.rotateWithView,this.scale_=e.scale,this.scaleArray_=kr(void 0!==e.scale?e.scale:1),this.text_=e.text,this.textAlign_=e.textAlign,this.textBaseline_=e.textBaseline,this.fill_=void 0!==e.fill?e.fill:new go({color:"#333"}),this.maxAngle_=void 0!==e.maxAngle?e.maxAngle:Math.PI/4,this.placement_=void 0!==e.placement?e.placement:"point",this.overflow_=!!e.overflow,this.stroke_=void 0!==e.stroke?e.stroke:null,this.offsetX_=void 0!==e.offsetX?e.offsetX:0,this.offsetY_=void 0!==e.offsetY?e.offsetY:0,this.backgroundFill_=e.backgroundFill?e.backgroundFill:null,this.backgroundStroke_=e.backgroundStroke?e.backgroundStroke:null,this.padding_=void 0===e.padding?null:e.padding}return t.prototype.clone=function(){var e=this.getScale();return new t({font:this.getFont(),placement:this.getPlacement(),maxAngle:this.getMaxAngle(),overflow:this.getOverflow(),rotation:this.getRotation(),rotateWithView:this.getRotateWithView(),scale:Array.isArray(e)?e.slice():e,text:this.getText(),textAlign:this.getTextAlign(),textBaseline:this.getTextBaseline(),fill:this.getFill()?this.getFill().clone():void 0,stroke:this.getStroke()?this.getStroke().clone():void 0,offsetX:this.getOffsetX(),offsetY:this.getOffsetY(),backgroundFill:this.getBackgroundFill()?this.getBackgroundFill().clone():void 0,backgroundStroke:this.getBackgroundStroke()?this.getBackgroundStroke().clone():void 0,padding:this.getPadding()||void 0})},t.prototype.getOverflow=function(){return this.overflow_},t.prototype.getFont=function(){return this.font_},t.prototype.getMaxAngle=function(){return this.maxAngle_},t.prototype.getPlacement=function(){return this.placement_},t.prototype.getOffsetX=function(){return this.offsetX_},t.prototype.getOffsetY=function(){return this.offsetY_},t.prototype.getFill=function(){return this.fill_},t.prototype.getRotateWithView=function(){return this.rotateWithView_},t.prototype.getRotation=function(){return this.rotation_},t.prototype.getScale=function(){return this.scale_},t.prototype.getScaleArray=function(){return this.scaleArray_},t.prototype.getStroke=function(){return this.stroke_},t.prototype.getText=function(){return this.text_},t.prototype.getTextAlign=function(){return this.textAlign_},t.prototype.getTextBaseline=function(){return this.textBaseline_},t.prototype.getBackgroundFill=function(){return this.backgroundFill_},t.prototype.getBackgroundStroke=function(){return this.backgroundStroke_},t.prototype.getPadding=function(){return this.padding_},t.prototype.setOverflow=function(t){this.overflow_=t},t.prototype.setFont=function(t){this.font_=t},t.prototype.setMaxAngle=function(t){this.maxAngle_=t},t.prototype.setOffsetX=function(t){this.offsetX_=t},t.prototype.setOffsetY=function(t){this.offsetY_=t},t.prototype.setPlacement=function(t){this.placement_=t},t.prototype.setRotateWithView=function(t){this.rotateWithView_=t},t.prototype.setFill=function(t){this.fill_=t},t.prototype.setRotation=function(t){this.rotation_=t},t.prototype.setScale=function(t){this.scale_=t,this.scaleArray_=kr(void 0!==t?t:1)},t.prototype.setStroke=function(t){this.stroke_=t},t.prototype.setText=function(t){this.text_=t},t.prototype.setTextAlign=function(t){this.textAlign_=t},t.prototype.setTextBaseline=function(t){this.textBaseline_=t},t.prototype.setBackgroundFill=function(t){this.backgroundFill_=t},t.prototype.setBackgroundStroke=function(t){this.backgroundStroke_=t},t.prototype.setPadding=function(t){this.padding_=t},t}(),Da=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ka=function(t){function e(e){var n=t.call(this)||this;if(n.on,n.once,n.un,n.id_=void 0,n.geometryName_="geometry",n.style_=null,n.styleFunction_=void 0,n.geometryChangeKey_=null,n.addChangeListener(n.geometryName_,n.handleGeometryChanged_),e)if("function"==typeof e.getSimplifiedGeometry){var i=e;n.setGeometry(i)}else{var r=e;n.setProperties(r)}return n}return Da(e,t),e.prototype.clone=function(){var t=new e(this.hasProperties()?this.getProperties():null);t.setGeometryName(this.getGeometryName());var n=this.getGeometry();n&&t.setGeometry(n.clone());var i=this.getStyle();return i&&t.setStyle(i),t},e.prototype.getGeometry=function(){return this.get(this.geometryName_)},e.prototype.getId=function(){return this.id_},e.prototype.getGeometryName=function(){return this.geometryName_},e.prototype.getStyle=function(){return this.style_},e.prototype.getStyleFunction=function(){return this.styleFunction_},e.prototype.handleGeometryChange_=function(){this.changed()},e.prototype.handleGeometryChanged_=function(){this.geometryChangeKey_&&(I(this.geometryChangeKey_),this.geometryChangeKey_=null);var t=this.getGeometry();t&&(this.geometryChangeKey_=O(t,x,this.handleGeometryChange_,this)),this.changed()},e.prototype.setGeometry=function(t){this.set(this.geometryName_,t)},e.prototype.setStyle=function(t){var e,n;this.style_=t,this.styleFunction_=t?"function"==typeof(e=t)?e:(Array.isArray(e)?n=e:(vt("function"==typeof e.getZIndex,41),n=[e]),function(){return n}):void 0,this.changed()},e.prototype.setId=function(t){this.id_=t,this.changed()},e.prototype.setGeometryName=function(t){this.removeChangeListener(this.geometryName_,this.handleGeometryChanged_),this.geometryName_=t,this.addChangeListener(this.geometryName_,this.handleGeometryChanged_),this.handleGeometryChanged_()},e}(G),ja=ka,Ga=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),za=function(t){function e(e){var n=t.call(this)||this;return n.map_=e,n}return Ga(e,t),e.prototype.dispatchRenderEvent=function(t,e){L()},e.prototype.calculateMatrices2D=function(t){var e=t.viewState,n=t.coordinateToPixelTransform,i=t.pixelToCoordinateTransform;Gn(n,t.size[0]/2,t.size[1]/2,1/e.resolution,-1/e.resolution,-e.rotation,-e.center[0],-e.center[1]),zn(i,n)},e.prototype.forEachFeatureAtCoordinate=function(t,e,n,i,r,o,s,a){var l,h=e.viewState;function u(t,e,n,i){return r.call(o,e,t?n:null,i)}var c=h.projection,p=Xe(t.slice(),c),f=[[0,0]];if(c.canWrapX()&&i){var d=ke(c.getExtent());f.push([-d,0],[d,0])}for(var g=e.layerStatesArray,_=g.length,y=[],v=[],m=0;m=0;--x){var C=g[x],w=C.layer;if(w.hasRenderer()&&jt(C,h)&&s.call(a,w)){var S=w.getRenderer(),E=w.getSource();if(S&&E){var T=E.getWrapX()?p:t,b=u.bind(null,C.managed);v[0]=T[0]+f[m][0],v[1]=T[1]+f[m][1],l=S.forEachFeatureAtCoordinate(v,e,n,b,y)}if(l)return l}}if(0!==y.length){var O=1/y.length;return y.forEach((function(t,e){return t.distanceSq+=e*O})),y.sort((function(t,e){return t.distanceSq-e.distanceSq})),y.some((function(t){return l=t.callback(t.feature,t.layer,t.geometry)})),l}},e.prototype.forEachLayerAtPixel=function(t,e,n,i,r){return L()},e.prototype.hasFeatureAtCoordinate=function(t,e,n,i,r,o){return void 0!==this.forEachFeatureAtCoordinate(t,e,n,i,u,this,r,o)},e.prototype.getMap=function(){return this.map_},e.prototype.renderFrame=function(t){L()},e.prototype.scheduleExpireIconCache=function(t){bs.canExpireCache()&&t.postRenderFunctions.push(Wa)},e}(r);function Wa(t,e){bs.expire()}var Xa=za,Na=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Ya=function(t){function n(n){var i=t.call(this,n)||this;i.fontChangeListenerKey_=O(to,e,n.redrawText.bind(n)),i.element_=document.createElement("div");var r=i.element_.style;r.position="absolute",r.width="100%",r.height="100%",r.zIndex="0",i.element_.className="ol-unselectable ol-layers";var o=n.getViewport();return o.insertBefore(i.element_,o.firstChild||null),i.children_=[],i.renderedVisible_=!0,i}return Na(n,t),n.prototype.dispatchRenderEvent=function(t,e){var n=this.getMap();if(n.hasListener(t)){var i=new ir(t,void 0,e);n.dispatchEvent(i)}},n.prototype.disposeInternal=function(){I(this.fontChangeListenerKey_),this.element_.parentNode.removeChild(this.element_),t.prototype.disposeInternal.call(this)},n.prototype.renderFrame=function(t){if(t){this.calculateMatrices2D(t),this.dispatchRenderEvent(Ft,t);var e=t.layerStatesArray.sort((function(t,e){return t.zIndex-e.zIndex})),n=t.viewState;this.children_.length=0;for(var i=[],r=null,o=0,s=e.length;o=0;--o)i[o].renderDeclutter(t);!function(t,e){for(var n=t.childNodes,i=0;;++i){var r=n[i],o=e[i];if(!r&&!o)break;r!==o&&(r?o?t.insertBefore(o,r):(t.removeChild(r),--i):t.appendChild(o))}}(this.element_,this.children_),this.dispatchRenderEvent("postcompose",t),this.renderedVisible_||(this.element_.style.display="",this.renderedVisible_=!0),this.scheduleExpireIconCache(t)}else this.renderedVisible_&&(this.element_.style.display="none",this.renderedVisible_=!1)},n.prototype.forEachLayerAtPixel=function(t,e,n,i,r){for(var o=e.viewState,s=e.layerStatesArray,a=s.length-1;a>=0;--a){var l=s[a],h=l.layer;if(h.hasRenderer()&&jt(l,o)&&r(h)){var u=h.getRenderer().getDataAtPixel(t,e,n);if(u){var c=i(h,u);if(c)return c}}}},n}(Xa),Ba=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Ka=function(t){function e(e,n){var i=t.call(this,e)||this;return i.layer=n,i}return Ba(e,t),e}(t),Za="layers",Va=function(t){function n(e){var n=this,i=e||{},r=f({},i);delete r.layers;var o=i.layers;return(n=t.call(this,r)||this).on,n.once,n.un,n.layersListenerKeys_=[],n.listenerKeys_={},n.addChangeListener(Za,n.handleLayersChanged_),o?Array.isArray(o)?o=new Ea(o.slice(),{unique:!0}):vt("function"==typeof o.getArray,43):o=new Ea(void 0,{unique:!0}),n.setLayers(o),n}return Ba(n,t),n.prototype.handleLayerChange_=function(){this.changed()},n.prototype.handleLayersChanged_=function(){this.layersListenerKeys_.forEach(I),this.layersListenerKeys_.length=0;var t=this.getLayers();for(var e in this.layersListenerKeys_.push(O(t,ma,this.handleLayersAdd_,this),O(t,xa,this.handleLayersRemove_,this)),this.listenerKeys_)this.listenerKeys_[e].forEach(I);d(this.listenerKeys_);for(var n=t.getArray(),i=0,r=n.length;ithis.moveTolerance_||Math.abs(t.clientY-this.down_.clientY)>this.moveTolerance_},e.prototype.disposeInternal=function(){this.relayedListenerKey_&&(I(this.relayedListenerKey_),this.relayedListenerKey_=null),this.element_.removeEventListener(T,this.boundHandleTouchMove_),this.pointerdownListenerKey_&&(I(this.pointerdownListenerKey_),this.pointerdownListenerKey_=null),this.dragListenerKeys_.forEach(I),this.dragListenerKeys_.length=0,this.element_=null,t.prototype.disposeInternal.call(this)},e}(m),el="layergroup",nl="size",il="target",rl="view",ol=1/0,sl=function(){function t(t,e){this.priorityFunction_=t,this.keyFunction_=e,this.elements_=[],this.priorities_=[],this.queuedElements_={}}return t.prototype.clear=function(){this.elements_.length=0,this.priorities_.length=0,d(this.queuedElements_)},t.prototype.dequeue=function(){var t=this.elements_,e=this.priorities_,n=t[0];1==t.length?(t.length=0,e.length=0):(t[0]=t.pop(),e[0]=e.pop(),this.siftUp_(0));var i=this.keyFunction_(n);return delete this.queuedElements_[i],n},t.prototype.enqueue=function(t){vt(!(this.keyFunction_(t)in this.queuedElements_),31);var e=this.priorityFunction_(t);return e!=ol&&(this.elements_.push(t),this.priorities_.push(e),this.queuedElements_[this.keyFunction_(t)]=!0,this.siftDown_(0,this.elements_.length-1),!0)},t.prototype.getCount=function(){return this.elements_.length},t.prototype.getLeftChildIndex_=function(t){return 2*t+1},t.prototype.getRightChildIndex_=function(t){return 2*t+2},t.prototype.getParentIndex_=function(t){return t-1>>1},t.prototype.heapify_=function(){var t;for(t=(this.elements_.length>>1)-1;t>=0;t--)this.siftUp_(t)},t.prototype.isEmpty=function(){return 0===this.elements_.length},t.prototype.isKeyQueued=function(t){return t in this.queuedElements_},t.prototype.isQueued=function(t){return this.isKeyQueued(this.keyFunction_(t))},t.prototype.siftUp_=function(t){for(var e=this.elements_,n=this.priorities_,i=e.length,r=e[t],o=n[t],s=t;t>1;){var a=this.getLeftChildIndex_(t),l=this.getRightChildIndex_(t),h=lt;){var s=this.getParentIndex_(e);if(!(i[s]>o))break;n[e]=n[s],i[e]=i[s],e=s}n[e]=r,i[e]=o},t.prototype.reprioritize=function(){var t,e,n,i=this.priorityFunction_,r=this.elements_,o=this.priorities_,s=0,a=r.length;for(e=0;e0;)i=(n=this.dequeue()[0]).getKey(),0!==n.getState()||i in this.tilesLoadingKeys_||(this.tilesLoadingKeys_[i]=!0,++this.tilesLoading_,++r,n.load())},e}(sl),hl={CENTER:"center",RESOLUTION:"resolution",ROTATION:"rotation"};function ul(t,e,n){return function(i,r,o,s,a){if(i){if(!r&&!e)return i;var l=e?0:o[0]*r,h=e?0:o[1]*r,u=a?a[0]:0,c=a?a[1]:0,p=t[0]+l/2+u,f=t[2]-l/2+u,d=t[1]+h/2+c,g=t[3]-h/2+c;p>f&&(f=p=(f+p)/2),d>g&&(g=d=(g+d)/2);var _=mt(i[0],p,f),y=mt(i[1],d,g);if(s&&n&&r){var v=30*r;_+=-v*Math.log(1+Math.max(0,p-i[0])/v)+v*Math.log(1+Math.max(0,i[0]-f)/v),y+=-v*Math.log(1+Math.max(0,d-i[1])/v)+v*Math.log(1+Math.max(0,i[1]-g)/v)}return[_,y]}}}function cl(t){return t}function pl(t,e,n,i){var r=ke(e)/n[0],o=Fe(e)/n[1];return i?Math.min(t,Math.max(r,o)):Math.min(t,Math.min(r,o))}function fl(t,e,n){var i=Math.min(t,e);return i*=Math.log(1+50*Math.max(0,t/e-1))/50+1,n&&(i=Math.max(i,n),i/=Math.log(1+50*Math.max(0,n/t-1))/50+1),mt(i,n/2,2*e)}function dl(t,e,n,i,r){return function(o,s,a,l){if(void 0!==o){var h=i?pl(t,i,a,r):t;return(void 0===n||n)&&l?fl(o,h,e):mt(o,e,h)}}}function gl(t){return void 0!==t?0:void 0}function _l(t){return void 0!==t?t:void 0}var yl=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),vl=function(t){function e(e){var n=t.call(this)||this;n.on,n.once,n.un;var i=f({},e);return n.hints_=[0,0],n.animations_=[],n.updateAnimationKey_,n.projection_=Je(i.projection,"EPSG:3857"),n.viewportSize_=[100,100],n.targetCenter_=null,n.targetResolution_,n.targetRotation_,n.nextCenter_=null,n.nextResolution_,n.nextRotation_,n.cancelAnchor_=void 0,i.projection&&Be(),i.center&&(i.center=un(i.center,n.projection_)),i.extent&&(i.extent=pn(i.extent,n.projection_)),n.applyOptions_(i),n}return yl(e,t),e.prototype.applyOptions_=function(t){var e=f({},t);for(var n in hl)delete e[n];this.setProperties(e,!0);var i=function(t){var e,n,i,r=void 0!==t.minZoom?t.minZoom:0,o=void 0!==t.maxZoom?t.maxZoom:28,a=void 0!==t.zoomFactor?t.zoomFactor:2,l=void 0!==t.multiWorld&&t.multiWorld,h=void 0===t.smoothResolutionConstraint||t.smoothResolutionConstraint,u=void 0!==t.showFullExtent&&t.showFullExtent,c=Je(t.projection,"EPSG:3857"),p=c.getExtent(),f=t.constrainOnlyCenter,d=t.extent;if(l||d||!c.isGlobal()||(f=!1,d=p),void 0!==t.resolutions){var g=t.resolutions;n=g[r],i=void 0!==g[o]?g[o]:g[g.length-1],e=t.constrainResolution?function(t,e,n,i){return function(r,o,a,l){if(void 0!==r){var h=t[0],u=t[t.length-1],c=n?pl(h,n,a,i):h;if(l)return void 0===e||e?fl(r,c,u):mt(r,u,c);var p=Math.min(c,r),f=Math.floor(s(t,p,o));return t[f]>c&&f1&&"function"==typeof arguments[n-1]&&(e=arguments[n-1],--n);for(var i=0;i0},e.prototype.getInteracting=function(){return this.hints_[1]>0},e.prototype.cancelAnimations=function(){var t;this.setHint(0,-this.hints_[0]);for(var e=0,n=this.animations_.length;e=0;--n){for(var i=this.animations_[n],r=!0,o=0,s=i.length;o0?l/a.duration:1;h>=1?(a.complete=!0,h=1):r=!1;var u=a.easing(h);if(a.sourceCenter){var c=a.sourceCenter[0],p=a.sourceCenter[1],f=a.targetCenter[0],d=a.targetCenter[1];this.nextCenter_=a.targetCenter;var g=c+u*(f-c),_=p+u*(d-p);this.targetCenter_=[g,_]}if(a.sourceResolution&&a.targetResolution){var y=1===u?a.targetResolution:a.sourceResolution+u*(a.targetResolution-a.sourceResolution);if(a.anchor){var v=this.getViewportSize_(this.getRotation()),m=this.constraints_.resolution(y,0,v,!0);this.targetCenter_=this.calculateCenterZoom(m,a.anchor)}this.nextResolution_=a.targetResolution,this.targetResolution_=y,this.applyTargetState_(!0)}if(void 0!==a.sourceRotation&&void 0!==a.targetRotation){var x=1===u?Tt(a.targetRotation+Math.PI,2*Math.PI)-Math.PI:a.sourceRotation+u*(a.targetRotation-a.sourceRotation);if(a.anchor){var C=this.constraints_.rotation(x,!0);this.targetCenter_=this.calculateCenterRotate(C,a.anchor)}this.nextRotation_=a.targetRotation,this.targetRotation_=x}if(this.applyTargetState_(!0),e=!0,!a.complete)break}}if(r){this.animations_[n]=null,this.setHint(0,-1),this.nextCenter_=null,this.nextResolution_=NaN,this.nextRotation_=NaN;var w=i[0].callback;w&&ml(w,!0)}}this.animations_=this.animations_.filter(Boolean),e&&void 0===this.updateAnimationKey_&&(this.updateAnimationKey_=requestAnimationFrame(this.updateAnimations_.bind(this)))}},e.prototype.calculateCenterRotate=function(t,e){var n,i,r,o=this.getCenterInternal();return void 0!==o&&(We(n=[o[0]-e[0],o[1]-e[1]],t-this.getRotation()),r=e,(i=n)[0]+=+r[0],i[1]+=+r[1]),n},e.prototype.calculateCenterZoom=function(t,e){var n,i=this.getCenterInternal(),r=this.getResolution();return void 0!==i&&void 0!==r&&(n=[e[0]-t*(e[0]-i[0])/r,e[1]-t*(e[1]-i[1])/r]),n},e.prototype.getViewportSize_=function(t){var e=this.viewportSize_;if(t){var n=e[0],i=e[1];return[Math.abs(n*Math.cos(t))+Math.abs(i*Math.sin(t)),Math.abs(n*Math.sin(t))+Math.abs(i*Math.cos(t))]}return e},e.prototype.setViewportSize=function(t){this.viewportSize_=Array.isArray(t)?t.slice():[100,100],this.getAnimating()||this.resolveConstraints(0)},e.prototype.getCenter=function(){var t=this.getCenterInternal();return t?hn(t,this.getProjection()):t},e.prototype.getCenterInternal=function(){return this.get(hl.CENTER)},e.prototype.getConstraints=function(){return this.constraints_},e.prototype.getConstrainResolution=function(){return this.get("constrainResolution")},e.prototype.getHints=function(t){return void 0!==t?(t[0]=this.hints_[0],t[1]=this.hints_[1],t):this.hints_.slice()},e.prototype.calculateExtent=function(t){return cn(this.calculateExtentInternal(t),this.getProjection())},e.prototype.calculateExtentInternal=function(t){var e=t||this.getViewportSizeMinusPadding_(),n=this.getCenterInternal();vt(n,1);var i=this.getResolution();vt(void 0!==i,2);var r=this.getRotation();return vt(void 0!==r,3),Me(n,i,r,e)},e.prototype.getMaxResolution=function(){return this.maxResolution_},e.prototype.getMinResolution=function(){return this.minResolution_},e.prototype.getMaxZoom=function(){return this.getZoomForResolution(this.minResolution_)},e.prototype.setMaxZoom=function(t){this.applyOptions_(this.getUpdatedOptions_({maxZoom:t}))},e.prototype.getMinZoom=function(){return this.getZoomForResolution(this.maxResolution_)},e.prototype.setMinZoom=function(t){this.applyOptions_(this.getUpdatedOptions_({minZoom:t}))},e.prototype.setConstrainResolution=function(t){this.applyOptions_(this.getUpdatedOptions_({constrainResolution:t}))},e.prototype.getProjection=function(){return this.projection_},e.prototype.getResolution=function(){return this.get(hl.RESOLUTION)},e.prototype.getResolutions=function(){return this.resolutions_},e.prototype.getResolutionForExtent=function(t,e){return this.getResolutionForExtentInternal(pn(t,this.getProjection()),e)},e.prototype.getResolutionForExtentInternal=function(t,e){var n=e||this.getViewportSizeMinusPadding_(),i=ke(t)/n[0],r=Fe(t)/n[1];return Math.max(i,r)},e.prototype.getResolutionForValueFunction=function(t){var e=t||2,n=this.getConstrainedResolution(this.maxResolution_),i=this.minResolution_,r=Math.log(n/i)/Math.log(e);return function(t){return n/Math.pow(e,t*r)}},e.prototype.getRotation=function(){return this.get(hl.ROTATION)},e.prototype.getValueForResolutionFunction=function(t){var e=Math.log(t||2),n=this.getConstrainedResolution(this.maxResolution_),i=this.minResolution_,r=Math.log(n/i)/e;return function(t){return Math.log(n/t)/e/r}},e.prototype.getViewportSizeMinusPadding_=function(t){var e=this.getViewportSize_(t),n=this.padding_;return n&&(e=[e[0]-n[1]-n[3],e[1]-n[0]-n[2]]),e},e.prototype.getState=function(){var t=this.getProjection(),e=this.getResolution(),n=this.getRotation(),i=this.getCenterInternal(),r=this.padding_;if(r){var o=this.getViewportSizeMinusPadding_();i=Cl(i,this.getViewportSize_(),[o[0]/2+r[3],o[1]/2+r[0]],e,n)}return{center:i.slice(0),projection:void 0!==t?t:null,resolution:e,nextCenter:this.nextCenter_,nextResolution:this.nextResolution_,nextRotation:this.nextRotation_,rotation:n,zoom:this.getZoom()}},e.prototype.getZoom=function(){var t,e=this.getResolution();return void 0!==e&&(t=this.getZoomForResolution(e)),t},e.prototype.getZoomForResolution=function(t){var e,n,i=this.minZoom_||0;if(this.resolutions_){var r=s(this.resolutions_,t,1);i=r,e=this.resolutions_[r],n=r==this.resolutions_.length-1?2:e/this.resolutions_[r+1]}else e=this.maxResolution_,n=this.zoomFactor_;return i+Math.log(e/t)/Math.log(n)},e.prototype.getResolutionForZoom=function(t){if(this.resolutions_){if(this.resolutions_.length<=1)return 0;var e=mt(Math.floor(t),0,this.resolutions_.length-2),n=this.resolutions_[e]/this.resolutions_[e+1];return this.resolutions_[e]/Math.pow(n,mt(t-e,0,1))}return this.maxResolution_/Math.pow(this.zoomFactor_,t-this.minZoom_)},e.prototype.fit=function(t,e){var n;if(vt(Array.isArray(t)||"function"==typeof t.getSimplifiedGeometry,24),Array.isArray(t))vt(!Ge(t),25),n=Zi(i=pn(t,this.getProjection()));else if(t.getType()===kn){var i;(n=Zi(i=pn(t.getExtent(),this.getProjection()))).rotate(this.getRotation(),Ie(i))}else{var r=ln();n=r?t.clone().transform(r,this.getProjection()):t}this.fitInternal(n,e)},e.prototype.rotatedExtentForGeometry=function(t){for(var e=this.getRotation(),n=Math.cos(e),i=Math.sin(-e),r=t.getFlatCoordinates(),o=t.getStride(),s=1/0,a=1/0,l=-1/0,h=-1/0,u=0,c=r.length;u=0;a--){var l=s[a];if(l.getMap()===this&&l.getActive()&&this.getTargetElement()&&(!l.handleEvent(t)||t.propagationStopped))break}}},n.prototype.handlePostRender=function(){var t=this.frameState_,e=this.tileQueue_;if(!e.isEmpty()){var n=this.maxTilesLoading_,i=n;if(t){var r=t.viewHints;if(r[0]||r[1]){var o=Date.now()-t.time>8;n=o?0:8,i=o?0:2}}e.getTilesLoading()0&&e%(2*Math.PI)!=0?t.animate({rotation:0,duration:this.duration_,easing:xn}):t.setRotation(0))}},e.prototype.render=function(t){var e=t.frameState;if(e){var n=e.viewState.rotation;if(n!=this.rotation_){var i="rotate("+n+"rad)";if(this.autoHide_){var r=this.element.classList.contains(et);r||0!==n?r&&0!==n&&this.element.classList.remove(et):this.element.classList.add(et)}this.label_.style.transform=i}this.rotation_=n}},e}(tt),Il=Rl,Pl="active",Ml=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function Fl(t,e,n,i){var r=t.getZoom();if(void 0!==r){var o=t.getConstrainedZoom(r+e),s=t.getResolutionForZoom(o);t.getAnimating()&&t.cancelAnimations(),t.animate({resolution:s,anchor:n,duration:void 0!==i?i:250,easing:xn})}}var Ll=function(t){function e(e){var n=t.call(this)||this;return n.on,n.once,n.un,e&&e.handleEvent&&(n.handleEvent=e.handleEvent),n.map_=null,n.setActive(!0),n}return Ml(e,t),e.prototype.getActive=function(){return this.get(Pl)},e.prototype.getMap=function(){return this.map_},e.prototype.handleEvent=function(t){return!0},e.prototype.setActive=function(t){this.set(Pl,t)},e.prototype.setMap=function(t){this.map_=t},e}(G),Al=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Dl=function(t){function e(e){var n=t.call(this)||this,i=e||{};return n.delta_=i.delta?i.delta:1,n.duration_=void 0!==i.duration?i.duration:250,n}return Al(e,t),e.prototype.handleEvent=function(t){var e=!1;if(t.type==Qa.DBLCLICK){var n=t.originalEvent,i=t.map,r=t.coordinate,o=n.shiftKey?-this.delta_:this.delta_;Fl(i.getView(),o,r,this.duration_),n.preventDefault(),e=!0}return!e},e}(Ll),kl=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}();function jl(t){for(var e=t.length,n=0,i=0,r=0;r0}}else if(t.type==Qa.POINTERDOWN){var i=this.handleDownEvent(t);this.handlingDownUpSequence=i,e=this.stopDown(i)}else t.type==Qa.POINTERMOVE&&this.handleMoveEvent(t);return!e},e.prototype.handleMoveEvent=function(t){},e.prototype.handleUpEvent=function(t){return!1},e.prototype.stopDown=function(t){return t},e.prototype.updateTrackedPointers_=function(t){if(function(t){var e=t.type;return e===Qa.POINTERDOWN||e===Qa.POINTERDRAG||e===Qa.POINTERUP}(t)){var e=t.originalEvent,n=e.pointerId.toString();t.type==Qa.POINTERUP?delete this.trackedPointers_[n]:(t.type==Qa.POINTERDOWN||n in this.trackedPointers_)&&(this.trackedPointers_[n]=e),this.targetPointers=g(this.trackedPointers_)}},e}(Ll);function zl(t){var e=arguments;return function(t){for(var n=!0,i=0,r=e.length;i0&&this.condition_(t)){var e=t.map.getView();return this.lastCentroid=null,e.getAnimating()&&e.cancelAnimations(),this.kinetic_&&this.kinetic_.begin(),this.noKinetic_=this.targetPointers.length>1,!0}return!1},e}(Gl),Jl=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),Ql=function(t){function e(e){var n=this,i=e||{};return(n=t.call(this,{stopDown:c})||this).condition_=i.condition?i.condition:Wl,n.lastAngle_=void 0,n.duration_=void 0!==i.duration?i.duration:250,n}return Jl(e,t),e.prototype.handleDragEvent=function(t){if(Vl(t)){var e=t.map,n=e.getView();if(n.getConstraints().rotation!==gl){var i=e.getSize(),r=t.pixel,o=Math.atan2(i[1]/2-r[1],r[0]-i[0]/2);if(void 0!==this.lastAngle_){var s=o-this.lastAngle_;n.adjustRotationInternal(-s)}this.lastAngle_=o}}},e.prototype.handleUpEvent=function(t){return!Vl(t)||(t.map.getView().endInteraction(this.duration_),!1)},e.prototype.handleDownEvent=function(t){return!(!Vl(t)||!Yl(t)||!this.condition_(t)||(t.map.getView().beginInteraction(),this.lastAngle_=void 0,0))},e}(Gl),$l=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),th=function(t){function e(e){var n=t.call(this)||this;return n.geometry_=null,n.element_=document.createElement("div"),n.element_.style.position="absolute",n.element_.style.pointerEvents="auto",n.element_.className="ol-box "+e,n.map_=null,n.startPixel_=null,n.endPixel_=null,n}return $l(e,t),e.prototype.disposeInternal=function(){this.setMap(null)},e.prototype.render_=function(){var t=this.startPixel_,e=this.endPixel_,n="px",i=this.element_.style;i.left=Math.min(t[0],e[0])+n,i.top=Math.min(t[1],e[1])+n,i.width=Math.abs(e[0]-t[0])+n,i.height=Math.abs(e[1]-t[1])+n},e.prototype.setMap=function(t){if(this.map_){this.map_.getOverlayContainer().removeChild(this.element_);var e=this.element_.style;e.left="inherit",e.top="inherit",e.width="inherit",e.height="inherit"}this.map_=t,this.map_&&this.map_.getOverlayContainer().appendChild(this.element_)},e.prototype.setPixels=function(t,e){this.startPixel_=t,this.endPixel_=e,this.createOrUpdateGeometry(),this.render_()},e.prototype.createOrUpdateGeometry=function(){var t=this.startPixel_,e=this.endPixel_,n=[t,[t[0],e[1]],e,[e[0],t[1]]].map(this.map_.getCoordinateFromPixelInternal,this.map_);n[4]=n[0].slice(),this.geometry_?this.geometry_.setCoordinates([n]):this.geometry_=new Ki([n])},e.prototype.getGeometry=function(){return this.geometry_},e}(r),eh=th,nh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),ih=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.coordinate=n,r.mapBrowserEvent=i,r}return nh(e,t),e}(t),rh=function(t){function e(e){var n=t.call(this)||this;n.on,n.once,n.un;var i=e||{};return n.box_=new eh(i.className||"ol-dragbox"),n.minArea_=void 0!==i.minArea?i.minArea:64,i.onBoxEnd&&(n.onBoxEnd=i.onBoxEnd),n.startPixel_=null,n.condition_=i.condition?i.condition:Yl,n.boxEndCondition_=i.boxEndCondition?i.boxEndCondition:n.defaultBoxEndCondition,n}return nh(e,t),e.prototype.defaultBoxEndCondition=function(t,e,n){var i=n[0]-e[0],r=n[1]-e[1];return i*i+r*r>=this.minArea_},e.prototype.getGeometry=function(){return this.box_.getGeometry()},e.prototype.handleDragEvent=function(t){this.box_.setPixels(this.startPixel_,t.pixel),this.dispatchEvent(new ih("boxdrag",t.coordinate,t))},e.prototype.handleUpEvent=function(t){this.box_.setMap(null);var e=this.boxEndCondition_(t,this.startPixel_,t.pixel);return e&&this.onBoxEnd(t),this.dispatchEvent(new ih(e?"boxend":"boxcancel",t.coordinate,t)),!1},e.prototype.handleDownEvent=function(t){return!!this.condition_(t)&&(this.startPixel_=t.pixel,this.box_.setMap(t.map),this.box_.setPixels(this.startPixel_,this.startPixel_),this.dispatchEvent(new ih("boxstart",t.coordinate,t)),!0)},e.prototype.onBoxEnd=function(t){},e}(Gl),oh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),sh=function(t){function e(e){var n=this,i=e||{},r=i.condition?i.condition:Kl;return(n=t.call(this,{condition:r,className:i.className||"ol-dragzoom",minArea:i.minArea})||this).duration_=void 0!==i.duration?i.duration:200,n.out_=void 0!==i.out&&i.out,n}return oh(e,t),e.prototype.onBoxEnd=function(t){var e=this.getMap().getView(),n=this.getGeometry();if(this.out_){var i=e.rotatedExtentForGeometry(n),r=e.getResolutionForExtentInternal(i),o=e.getResolution()/r;(n=n.clone()).scale(o*o)}e.fitInternal(n,{duration:this.duration_,easing:xn})},e}(rh),ah=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),lh=function(t){function e(e){var n=t.call(this)||this,i=e||{};return n.defaultCondition_=function(t){return Bl(t)&&Zl(t)},n.condition_=void 0!==i.condition?i.condition:n.defaultCondition_,n.duration_=void 0!==i.duration?i.duration:100,n.pixelDelta_=void 0!==i.pixelDelta?i.pixelDelta:128,n}return ah(e,t),e.prototype.handleEvent=function(t){var e=!1;if(t.type==S){var n=t.originalEvent,i=n.keyCode;if(this.condition_(t)&&(40==i||37==i||39==i||38==i)){var r=t.map.getView(),o=r.getResolution()*this.pixelDelta_,s=0,a=0;40==i?a=-o:37==i?s=-o:39==i?s=o:a=o;var l=[s,a];We(l,r.getRotation()),function(t,e,n){var i=t.getCenterInternal();if(i){var r=[i[0]+e[0],i[1]+e[1]];t.animateInternal({duration:void 0!==n?n:250,easing:wn,center:t.getConstrainedCenter(r)})}}(r,l,this.duration_),n.preventDefault(),e=!0}}return!e},e}(Ll),hh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),uh=function(t){function e(e){var n=t.call(this)||this,i=e||{};return n.condition_=i.condition?i.condition:Zl,n.delta_=i.delta?i.delta:1,n.duration_=void 0!==i.duration?i.duration:100,n}return hh(e,t),e.prototype.handleEvent=function(t){var e=!1;if(t.type==S||t.type==E){var n=t.originalEvent,i=n.charCode;if(this.condition_(t)&&(i=="+".charCodeAt(0)||i=="-".charCodeAt(0))){var r=t.map,o=i=="+".charCodeAt(0)?this.delta_:-this.delta_;Fl(r.getView(),o,void 0,this.duration_),n.preventDefault(),e=!0}}return!e},e}(Ll),ch=function(){function t(t,e,n){this.decay_=t,this.minVelocity_=e,this.delay_=n,this.points_=[],this.angle_=0,this.initialVelocity_=0}return t.prototype.begin=function(){this.points_.length=0,this.angle_=0,this.initialVelocity_=0},t.prototype.update=function(t,e){this.points_.push(t,e,Date.now())},t.prototype.end=function(){if(this.points_.length<6)return!1;var t=Date.now()-this.delay_,e=this.points_.length-3;if(this.points_[e+2]0&&this.points_[n+2]>t;)n-=3;var i=this.points_[e+2]-this.points_[n+2];if(i<1e3/60)return!1;var r=this.points_[e]-this.points_[n],o=this.points_[e+1]-this.points_[n+1];return this.angle_=Math.atan2(o,r),this.initialVelocity_=Math.sqrt(r*r+o*o)/i,this.initialVelocity_>this.minVelocity_},t.prototype.getDistance=function(){return(this.minVelocity_-this.initialVelocity_)/this.decay_},t.prototype.getAngle=function(){return this.angle_},t}(),ph=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),fh="trackpad",dh=function(t){function e(e){var n=this,i=e||{};(n=t.call(this,i)||this).totalDelta_=0,n.lastDelta_=0,n.maxDelta_=void 0!==i.maxDelta?i.maxDelta:1,n.duration_=void 0!==i.duration?i.duration:250,n.timeout_=void 0!==i.timeout?i.timeout:80,n.useAnchor_=void 0===i.useAnchor||i.useAnchor,n.constrainResolution_=void 0!==i.constrainResolution&&i.constrainResolution;var r=i.condition?i.condition:Nl;return n.condition_=i.onFocusOnly?zl(Xl,r):r,n.lastAnchor_=null,n.startTime_=void 0,n.timeoutId_,n.mode_=void 0,n.trackpadEventGap_=400,n.trackpadTimeoutId_,n.deltaPerZoom_=300,n}return ph(e,t),e.prototype.endInteraction_=function(){this.trackpadTimeoutId_=void 0,this.getMap().getView().endInteraction(void 0,this.lastDelta_?this.lastDelta_>0?1:-1:0,this.lastAnchor_)},e.prototype.handleEvent=function(t){if(!this.condition_(t))return!0;if(t.type!==b)return!0;var e,n=t.map,i=t.originalEvent;if(i.preventDefault(),this.useAnchor_&&(this.lastAnchor_=t.coordinate),t.type==b&&(e=i.deltaY,Y&&i.deltaMode===WheelEvent.DOM_DELTA_PIXEL&&(e/=Z),i.deltaMode===WheelEvent.DOM_DELTA_LINE&&(e*=40)),0===e)return!1;this.lastDelta_=e;var r=Date.now();void 0===this.startTime_&&(this.startTime_=r),(!this.mode_||r-this.startTime_>this.trackpadEventGap_)&&(this.mode_=Math.abs(e)<4?fh:"wheel");var o=n.getView();if(this.mode_===fh&&!o.getConstrainResolution()&&!this.constrainResolution_)return this.trackpadTimeoutId_?clearTimeout(this.trackpadTimeoutId_):(o.getAnimating()&&o.cancelAnimations(),o.beginInteraction()),this.trackpadTimeoutId_=setTimeout(this.endInteraction_.bind(this),this.timeout_),o.adjustZoom(-e/this.deltaPerZoom_,this.lastAnchor_),this.startTime_=r,!1;this.totalDelta_+=e;var s=Math.max(this.timeout_-(r-this.startTime_),0);return clearTimeout(this.timeoutId_),this.timeoutId_=setTimeout(this.handleWheelZoom_.bind(this,n),s),!1},e.prototype.handleWheelZoom_=function(t){var e=t.getView();e.getAnimating()&&e.cancelAnimations();var n=-mt(this.totalDelta_,-this.maxDelta_*this.deltaPerZoom_,this.maxDelta_*this.deltaPerZoom_)/this.deltaPerZoom_;(e.getConstrainResolution()||this.constrainResolution_)&&(n=n?n>0?1:-1:0),Fl(e,n,this.lastAnchor_,this.duration_),this.mode_=void 0,this.totalDelta_=0,this.lastAnchor_=null,this.startTime_=void 0,this.timeoutId_=void 0},e.prototype.setMouseAnchor=function(t){this.useAnchor_=t,t||(this.lastAnchor_=null)},e}(Ll),gh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),_h=function(t){function e(e){var n=this,i=e||{},r=i;return r.stopDown||(r.stopDown=c),(n=t.call(this,r)||this).anchor_=null,n.lastAngle_=void 0,n.rotating_=!1,n.rotationDelta_=0,n.threshold_=void 0!==i.threshold?i.threshold:.3,n.duration_=void 0!==i.duration?i.duration:250,n}return gh(e,t),e.prototype.handleDragEvent=function(t){var e=0,n=this.targetPointers[0],i=this.targetPointers[1],r=Math.atan2(i.clientY-n.clientY,i.clientX-n.clientX);if(void 0!==this.lastAngle_){var o=r-this.lastAngle_;this.rotationDelta_+=o,!this.rotating_&&Math.abs(this.rotationDelta_)>this.threshold_&&(this.rotating_=!0),e=o}this.lastAngle_=r;var s=t.map,a=s.getView();if(a.getConstraints().rotation!==gl){var l=s.getViewport().getBoundingClientRect(),h=jl(this.targetPointers);h[0]-=l.left,h[1]-=l.top,this.anchor_=s.getCoordinateFromPixelInternal(h),this.rotating_&&(s.render(),a.adjustRotationInternal(e,this.anchor_))}},e.prototype.handleUpEvent=function(t){return!(this.targetPointers.length<2&&(t.map.getView().endInteraction(this.duration_),1))},e.prototype.handleDownEvent=function(t){if(this.targetPointers.length>=2){var e=t.map;return this.anchor_=null,this.lastAngle_=void 0,this.rotating_=!1,this.rotationDelta_=0,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1},e}(Gl),yh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),vh=function(t){function e(e){var n=this,i=e||{},r=i;return r.stopDown||(r.stopDown=c),(n=t.call(this,r)||this).anchor_=null,n.duration_=void 0!==i.duration?i.duration:400,n.lastDistance_=void 0,n.lastScaleDelta_=1,n}return yh(e,t),e.prototype.handleDragEvent=function(t){var e=1,n=this.targetPointers[0],i=this.targetPointers[1],r=n.clientX-i.clientX,o=n.clientY-i.clientY,s=Math.sqrt(r*r+o*o);void 0!==this.lastDistance_&&(e=this.lastDistance_/s),this.lastDistance_=s;var a=t.map,l=a.getView();1!=e&&(this.lastScaleDelta_=e);var h=a.getViewport().getBoundingClientRect(),u=jl(this.targetPointers);u[0]-=h.left,u[1]-=h.top,this.anchor_=a.getCoordinateFromPixelInternal(u),a.render(),l.adjustResolutionInternal(e,this.anchor_)},e.prototype.handleUpEvent=function(t){if(this.targetPointers.length<2){var e=t.map.getView(),n=this.lastScaleDelta_>1?1:-1;return e.endInteraction(this.duration_,n),!1}return!0},e.prototype.handleDownEvent=function(t){if(this.targetPointers.length>=2){var e=t.map;return this.anchor_=null,this.lastDistance_=void 0,this.lastScaleDelta_=1,this.handlingDownUpSequence||e.getView().beginInteraction(),!0}return!1},e}(Gl),mh=function(){var t=function(e,n){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},t(e,n)};return function(e,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function i(){this.constructor=e}t(e,n),e.prototype=null===n?Object.create(n):(i.prototype=n.prototype,new i)}}(),xh=function(t){function e(e){return(e=f({},e)).controls||(e.controls=function(t){var e={},n=new Ea;return(void 0===e.zoom||e.zoom)&&n.push(new Tn(e.zoomOptions)),(void 0===e.rotate||e.rotate)&&n.push(new Il(e.rotateOptions)),(void 0===e.attribution||e.attribution)&&n.push(new Wt(e.attributionOptions)),n}()),e.interactions||(e.interactions=function(t){var e={onFocusOnly:!0}||{},n=new Ea,i=new ch(-.005,.05,100);return(void 0===e.altShiftDragRotate||e.altShiftDragRotate)&&n.push(new Ql),(void 0===e.doubleClickZoom||e.doubleClickZoom)&&n.push(new Dl({delta:e.zoomDelta,duration:e.zoomDuration})),(void 0===e.dragPan||e.dragPan)&&n.push(new ql({onFocusOnly:e.onFocusOnly,kinetic:i})),(void 0===e.pinchRotate||e.pinchRotate)&&n.push(new _h),(void 0===e.pinchZoom||e.pinchZoom)&&n.push(new vh({duration:e.zoomDuration})),(void 0===e.keyboard||e.keyboard)&&(n.push(new lh),n.push(new uh({delta:e.zoomDelta,duration:e.zoomDuration}))),(void 0===e.mouseWheelZoom||e.mouseWheelZoom)&&n.push(new dh({onFocusOnly:e.onFocusOnly,duration:e.zoomDuration})),(void 0===e.shiftDragZoom||e.shiftDragZoom)&&n.push(new sh({duration:e.zoomDuration})),n}()),t.call(this,e)||this}return mh(e,t),e.prototype.createRenderer=function(){return new Ya(this)},e}(bl),Ch={control:{Attribution:Wt,MousePosition:vn,Zoom:Tn},coordinate:{createStringXY:function(t){return function(e){return function(t,e){return function(t,e,n){return t?"{x}, {y}".replace("{x}",t[0].toFixed(n)).replace("{y}",t[1].toFixed(n)):""}(t,0,e)}(e,t)}}},extent:{boundingExtent:ue},geom:{LineString:wi,LinearRing:Oi,MultiLineString:Pi,MultiPoint:ki,MultiPolygon:Hi,Point:Li,Polygon:Ki},layer:{Tile:Xr,Vector:Ns},proj:{fromLonLat:function(t,e){return Be(),en(t,"EPSG:4326",void 0!==e?e:"EPSG:3857")},get:Ue,transformExtent:nn},source:{OSM:va,Vector:La},style:{Circle:fo,Fill:go,Stroke:_o,Style:Co,Text:Aa},Feature:ja,Map:xh,View:wl}}(),i.default}()})); -//# sourceMappingURL=OpenLayers.js.map diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/openlayers/theme/ol.css b/Sources/php_script/script/phpMyAdmin/js/vendor/openlayers/theme/ol.css deleted file mode 100644 index 18ad4ac..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/vendor/openlayers/theme/ol.css +++ /dev/null @@ -1,285 +0,0 @@ -.ol-box { - box-sizing: border-box; - border-radius: 2px; - border: 1.5px solid rgb(179,197,219); - background-color: rgba(255,255,255,0.4); -} - -.ol-mouse-position { - top: 8px; - right: 8px; - position: absolute; -} - -.ol-scale-line { - background: rgba(0,60,136,0.3); - border-radius: 4px; - bottom: 8px; - left: 8px; - padding: 2px; - position: absolute; -} -.ol-scale-line-inner { - border: 1px solid #eee; - border-top: none; - color: #eee; - font-size: 10px; - text-align: center; - margin: 1px; - will-change: contents, width; - transition: all 0.25s; -} -.ol-scale-bar { - position: absolute; - bottom: 8px; - left: 8px; -} -.ol-scale-step-marker { - width: 1px; - height: 15px; - background-color: #000000; - float: right; - z-index: 10; -} -.ol-scale-step-text { - position: absolute; - bottom: -5px; - font-size: 12px; - z-index: 11; - color: #000000; - text-shadow: -2px 0 #FFFFFF, 0 2px #FFFFFF, 2px 0 #FFFFFF, 0 -2px #FFFFFF; -} -.ol-scale-text { - position: absolute; - font-size: 14px; - text-align: center; - bottom: 25px; - color: #000000; - text-shadow: -2px 0 #FFFFFF, 0 2px #FFFFFF, 2px 0 #FFFFFF, 0 -2px #FFFFFF; -} -.ol-scale-singlebar { - position: relative; - height: 10px; - z-index: 9; - box-sizing: border-box; - border: 1px solid black; -} - -.ol-unsupported { - display: none; -} -.ol-viewport, .ol-unselectable { - -webkit-touch-callout: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; - -webkit-tap-highlight-color: rgba(0,0,0,0); -} -.ol-viewport canvas { - all: unset; -} -.ol-selectable { - -webkit-touch-callout: default; - -webkit-user-select: text; - -moz-user-select: text; - -ms-user-select: text; - user-select: text; -} -.ol-grabbing { - cursor: -webkit-grabbing; - cursor: -moz-grabbing; - cursor: grabbing; -} -.ol-grab { - cursor: move; - cursor: -webkit-grab; - cursor: -moz-grab; - cursor: grab; -} -.ol-control { - position: absolute; - background-color: rgba(255,255,255,0.4); - border-radius: 4px; - padding: 2px; -} -.ol-control:hover { - background-color: rgba(255,255,255,0.6); -} -.ol-zoom { - top: .5em; - left: .5em; -} -.ol-rotate { - top: .5em; - right: .5em; - transition: opacity .25s linear, visibility 0s linear; -} -.ol-rotate.ol-hidden { - opacity: 0; - visibility: hidden; - transition: opacity .25s linear, visibility 0s linear .25s; -} -.ol-zoom-extent { - top: 4.643em; - left: .5em; -} -.ol-full-screen { - right: .5em; - top: .5em; -} - -.ol-control button { - display: block; - margin: 1px; - padding: 0; - color: white; - font-weight: bold; - text-decoration: none; - font-size: inherit; - text-align: center; - height: 1.375em; - width: 1.375em; - line-height: .4em; - background-color: rgba(0,60,136,0.5); - border: none; - border-radius: 2px; -} -.ol-control button::-moz-focus-inner { - border: none; - padding: 0; -} -.ol-zoom-extent button { - line-height: 1.4em; -} -.ol-compass { - display: block; - font-weight: normal; - font-size: 1.2em; - will-change: transform; -} -.ol-touch .ol-control button { - font-size: 1.5em; -} -.ol-touch .ol-zoom-extent { - top: 5.5em; -} -.ol-control button:hover, -.ol-control button:focus { - text-decoration: none; - background-color: rgba(0,60,136,0.7); -} -.ol-zoom .ol-zoom-in { - border-radius: 2px 2px 0 0; -} -.ol-zoom .ol-zoom-out { - border-radius: 0 0 2px 2px; -} - - -.ol-attribution { - text-align: right; - bottom: .5em; - right: .5em; - max-width: calc(100% - 1.3em); - display: flex; - flex-flow: row-reverse; - align-items: center; -} -.ol-attribution a { - color: rgba(0,60,136,0.7); - text-decoration: none; -} -.ol-attribution ul { - margin: 0; - padding: 1px .5em; - color: #000; - text-shadow: 0 0 2px #fff; - font-size: 12px; -} -.ol-attribution li { - display: inline; - list-style: none; -} -.ol-attribution li:not(:last-child):after { - content: " "; -} -.ol-attribution img { - max-height: 2em; - max-width: inherit; - vertical-align: middle; -} -.ol-attribution button { - flex-shrink: 0; -} -.ol-attribution.ol-collapsed ul { - display: none; -} -.ol-attribution:not(.ol-collapsed) { - background: rgba(255,255,255,0.8); -} -.ol-attribution.ol-uncollapsible { - bottom: 0; - right: 0; - border-radius: 4px 0 0; -} -.ol-attribution.ol-uncollapsible img { - margin-top: -.2em; - max-height: 1.6em; -} -.ol-attribution.ol-uncollapsible button { - display: none; -} - -.ol-zoomslider { - top: 4.5em; - left: .5em; - height: 200px; -} -.ol-zoomslider button { - position: relative; - height: 10px; -} - -.ol-touch .ol-zoomslider { - top: 5.5em; -} - -.ol-overviewmap { - left: 0.5em; - bottom: 0.5em; -} -.ol-overviewmap.ol-uncollapsible { - bottom: 0; - left: 0; - border-radius: 0 4px 0 0; -} -.ol-overviewmap .ol-overviewmap-map, -.ol-overviewmap button { - display: block; -} -.ol-overviewmap .ol-overviewmap-map { - border: 1px solid #7b98bc; - height: 150px; - margin: 2px; - width: 150px; -} -.ol-overviewmap:not(.ol-collapsed) button { - bottom: 2px; - left: 2px; - position: absolute; -} -.ol-overviewmap.ol-collapsed .ol-overviewmap-map, -.ol-overviewmap.ol-uncollapsible button { - display: none; -} -.ol-overviewmap:not(.ol-collapsed) { - background: rgba(255,255,255,0.8); -} -.ol-overviewmap-box { - border: 2px dotted rgba(0,60,136,0.7); -} - -.ol-overviewmap .ol-overviewmap-box:hover { - cursor: move; -} diff --git a/Sources/php_script/script/phpMyAdmin/js/vendor/zxcvbn-ts.js.map b/Sources/php_script/script/phpMyAdmin/js/vendor/zxcvbn-ts.js.map deleted file mode 100644 index 5bcb432..0000000 --- a/Sources/php_script/script/phpMyAdmin/js/vendor/zxcvbn-ts.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"zxcvbn-ts.js","sources":["../src/helper.ts","../src/data/dateSplits.ts","../src/data/const.ts","../src/matcher/date/matching.ts","../../../../node_modules/fastest-levenshtein/index.js","../src/levenshtein.ts","../src/data/l33tTable.ts","../src/data/translationKeys.ts","../src/Options.ts","../src/matcher/dictionary/variants/matching/reverse.ts","../src/matcher/dictionary/variants/matching/l33t.ts","../src/matcher/dictionary/matching.ts","../src/matcher/regex/matching.ts","../src/scoring/utils.ts","../src/matcher/bruteforce/scoring.ts","../src/matcher/date/scoring.ts","../src/matcher/dictionary/variants/scoring/uppercase.ts","../src/matcher/dictionary/variants/scoring/l33t.ts","../src/matcher/dictionary/scoring.ts","../src/matcher/regex/scoring.ts","../src/matcher/repeat/scoring.ts","../src/matcher/sequence/scoring.ts","../src/matcher/spatial/scoring.ts","../src/scoring/estimate.ts","../src/scoring/index.ts","../src/matcher/repeat/matching.ts","../src/matcher/sequence/matching.ts","../src/matcher/spatial/matching.ts","../src/Matching.ts","../src/TimeEstimates.ts","../src/matcher/bruteforce/feedback.ts","../src/matcher/date/feedback.ts","../src/matcher/dictionary/feedback.ts","../src/matcher/regex/feedback.ts","../src/matcher/repeat/feedback.ts","../src/matcher/sequence/feedback.ts","../src/matcher/spatial/feedback.ts","../src/Feedback.ts","../src/debounce.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,"\"use strict\";\nconst peq = new Uint32Array(0x10000);\nconst myers_32 = (a, b) => {\n const n = a.length;\n const m = b.length;\n const lst = 1 << (n - 1);\n let pv = -1;\n let mv = 0;\n let sc = n;\n let i = n;\n while (i--) {\n peq[a.charCodeAt(i)] |= 1 << i;\n }\n for (i = 0; i < m; i++) {\n let eq = peq[b.charCodeAt(i)];\n const xv = eq | mv;\n eq |= ((eq & pv) + pv) ^ pv;\n mv |= ~(eq | pv);\n pv &= eq;\n if (mv & lst) {\n sc++;\n }\n if (pv & lst) {\n sc--;\n }\n mv = (mv << 1) | 1;\n pv = (pv << 1) | ~(xv | mv);\n mv &= xv;\n }\n i = n;\n while (i--) {\n peq[a.charCodeAt(i)] = 0;\n }\n return sc;\n};\n\nconst myers_x = (a, b) => {\n const n = a.length;\n const m = b.length;\n const mhc = [];\n const phc = [];\n const hsize = Math.ceil(n / 32);\n const vsize = Math.ceil(m / 32);\n let score = m;\n for (let i = 0; i < hsize; i++) {\n phc[i] = -1;\n mhc[i] = 0;\n }\n let j = 0;\n for (; j < vsize - 1; j++) {\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const end = Math.min(32, m) + start;\n for (let k = start; k < end; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < end; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n }\n let mv = 0;\n let pv = -1;\n const start = j * 32;\n const end = Math.min(32, m - start) + start;\n for (let k = start; k < end; k++) {\n peq[b.charCodeAt(k)] |= 1 << k;\n }\n score = m;\n for (let i = 0; i < n; i++) {\n const eq = peq[a.charCodeAt(i)];\n const pb = (phc[(i / 32) | 0] >>> i) & 1;\n const mb = (mhc[(i / 32) | 0] >>> i) & 1;\n const xv = eq | mv;\n const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;\n let ph = mv | ~(xh | pv);\n let mh = pv & xh;\n score += (ph >>> (m - 1)) & 1;\n score -= (mh >>> (m - 1)) & 1;\n if ((ph >>> 31) ^ pb) {\n phc[(i / 32) | 0] ^= 1 << i;\n }\n if ((mh >>> 31) ^ mb) {\n mhc[(i / 32) | 0] ^= 1 << i;\n }\n ph = (ph << 1) | pb;\n mh = (mh << 1) | mb;\n pv = mh | ~(xv | ph);\n mv = ph & xv;\n }\n for (let k = start; k < end; k++) {\n peq[b.charCodeAt(k)] = 0;\n }\n return score;\n};\n\nconst distance = (a, b) => {\n if (a.length > b.length) {\n const tmp = b;\n b = a;\n a = tmp;\n }\n if (a.length === 0) {\n return b.length;\n }\n if (a.length <= 32) {\n return myers_32(a, b);\n }\n return myers_x(a, b);\n};\n\nconst closest = (str, arr) => {\n let min_distance = Infinity;\n let min_index = 0;\n for (let i = 0; i < arr.length; i++) {\n const dist = distance(str, arr[i]);\n if (dist < min_distance) {\n min_distance = dist;\n min_index = i;\n }\n }\n return arr[min_index];\n};\n\nmodule.exports = {\n closest, distance\n}\n",null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["empty","obj","Object","keys","length","extend","listToExtend","list","push","apply","translate","string","chrMap","tempArray","split","map","char","join","sorted","matches","sort","m1","m2","i","j","buildRankedDictionary","orderedList","result","counter","forEach","word","DATE_MAX_YEAR","DATE_MIN_YEAR","DATE_SPLITS","dateSplits","BRUTEFORCE_CARDINALITY","MIN_GUESSES_BEFORE_GROWING_SEQUENCE","MIN_SUBMATCH_GUESSES_SINGLE_CHAR","MIN_SUBMATCH_GUESSES_MULTI_CHAR","MIN_YEAR_SPACE","START_UPPER","END_UPPER","ALL_UPPER","ALL_UPPER_INVERTED","ALL_LOWER","ALL_LOWER_INVERTED","ONE_UPPER","ONE_LOWER","ALPHA_INVERTED","ALL_DIGIT","REFERENCE_YEAR","Date","getFullYear","REGEXEN","recentYear","MatchDate","match","password","getMatchesWithoutSeparator","getMatchesWithSeparator","filteredMatches","filterNoise","maybeDateWithSeparator","Math","abs","token","slice","regexMatch","exec","dmy","mapIntegersToDayMonthYear","parseInt","pattern","separator","year","month","day","maybeDateNoSeparator","metric","candidate","candidates","index","splittedDates","k","l","bestCandidate","minDistance","distance","filter","isSubmatch","matchesLength","o","otherMatch","integers","over12","over31","under1","len1","int","getDayMonth","possibleYearSplits","possibleYearSplitsLength","y","rest","dm","mapIntegersToDayMonth","twoToFourDigitYear","temp","reverse","data","getUsedThreshold","entry","threshold","isPasswordToShort","isThresholdLongerThanPassword","shouldUsePasswordLength","ceil","findLevenshteinDistance","rankedDictionary","foundDistance","found","find","usedThreshold","foundEntryDistance","isInThreshold","levenshteinDistance","levenshteinDistanceEntry","a","b","c","e","g","s","t","x","z","warnings","straightRow","keyPattern","simpleRepeat","extendedRepeat","sequences","recentYears","dates","topTen","topHundred","common","similarToCommon","wordByItself","namesByThemselves","commonNames","userInputs","pwned","suggestions","l33t","reverseWords","allUppercase","capitalization","associatedYears","repeated","longerKeyboardPattern","anotherWord","useWords","noNeed","timeEstimation","ltSecond","second","seconds","minute","minutes","hour","hours","days","months","years","centuries","Options","constructor","l33tTable","translationKeys","setRankedDictionaries","setOptions","options","dictionary","translations","setTranslations","graphs","useLevenshteinDistance","undefined","levenshteinThreshold","checkCustomTranslations","Error","valid","type","translationType","key","rankedDictionaries","name","getRankedDictionary","sanitizedInputs","input","inputType","toString","toLowerCase","extendUserInputsDictionary","addMatcher","matcher","matchers","console","info","zxcvbnOptions","MatchL33t","defaultMatch","passwordReversed","reversed","enumeratedSubs","enumerateL33tSubs","relevantL33tSubtable","sub","subbedPassword","matchedDictionary","matchedWord","matchSub","subbedChr","chr","indexOf","subDisplay","table","passwordChars","subTable","letter","subs","relevantSubs","tableKeys","getSubs","subDict","l33tChr","firstKey","restKeys","nextSubs","dupL33tIndex","subExtension","concat","subAlternative","splice","newSubs","dedup","deduped","members","assoc","label","v","MatchDictionary","L33t","Reverse","passwordLength","passwordLower","dictionaryName","rankedDict","usedPassword","isInDictionary","foundLevenshteinDistance","isFullPassword","isLevenshteinMatch","usedRankPassword","rank","MatchRegex","regexes","regex","lastIndex","regexName","nCk","n","count","coEff","log10","log","log2","factorial","num","rval","guesses","Number","POSITIVE_INFINITY","MAX_VALUE","minGuesses","max","yearSpace","getVariations","cleanedWord","wordArray","upperCaseCount","lowerCaseCount","variations","variationLength","min","utils","replace","commonCases","commonCasesLength","getCounts","subbed","unsubbed","chrs","subbedCount","unsubbedCount","p","possibilities","baseGuesses","uppercaseVariations","uppercaseVariant","l33tVariations","l33tVariant","reversedVariations","calculation","charClassBases","alphaLower","alphaUpper","alpha","alphanumeric","digits","symbols","repeatCount","ascending","firstChr","charAt","startingPoints","includes","calcAverageDegree","graph","average","neighbors","entries","estimatePossiblePatterns","turns","startingPosition","averageDegree","tokenLength","possibleTurns","shiftedCount","unShiftedCount","shiftedVariations","round","getMinGuesses","bruteforce","bruteforceMatcher","date","dateMatcher","dictionaryMatcher","regexMatcher","repeat","repeatMatcher","sequence","sequenceMatcher","spatial","spatialMatcher","getScoring","scoring","extraData","estimationResult","matchGuesses","guessesLog10","scoringHelper","optimal","excludeAdditive","fillArray","size","valueType","value","makeBruteforceMatch","update","sequenceLength","estimatedMatch","estimateGuesses","pi","shouldSkip","competingPatternLength","competingMetricMatch","m","bruteforceUpdate","passwordCharIndex","tmp","lastMatch","unwind","optimalMatchSequence","candidateSequenceLength","candidateMetricMatch","unshift","mostGuessableMatchSequence","matchesByCoordinateJ","optimalSequenceLength","getGuesses","MatchRepeat","omniMatch","greedyMatch","getGreedyMatch","lazyMatch","getLazyMatch","baseToken","setMatchToken","getBaseGuesses","normalizeMatch","hasPromises","some","Promise","all","baseMatch","then","resolvedBaseGuesses","greedy","lazy","lazyAnchored","resolvedMatches","baseAnalysis","MatchSequence","lastDelta","delta","charCodeAt","absoluteDelta","MAX_DELTA","sequenceName","sequenceSpace","getSequence","test","MatchSpatial","graphName","helper","checkIfShifted","SHIFTED_RX","lastDirection","prevChar","adjacents","foundDirection","curDirection","curChar","adjacentsLength","adjacent","adjacentIndex","Matching","promises","Matcher","usedMatcher","response","resolve","SECOND","MINUTE","HOUR","DAY","MONTH","YEAR","CENTURY","times","century","TimeEstimates","displayStr","estimateAttackTimes","crackTimesSeconds","onlineThrottling100PerHour","onlineNoThrottling10PerSecond","offlineSlowHashing1e4PerSecond","offlineFastHashing1e10PerSecond","crackTimesDisplay","scenario","displayTime","score","guessesToScore","DELTA","base","timeKeys","foundIndex","findIndex","time","warning","getDictionaryWarningPassword","isSoleMatch","getDictionaryWarningWikipedia","getDictionaryWarningNames","getDictionaryWarning","dictName","isAName","defaultFeedback","Feedback","setDefaultSuggestions","getFeedback","extraFeedback","longestMatch","getLongestMatch","feedback","getMatchFeedback","slicedSequence","func","wait","isImmediate","timeout","debounce","args","context","later","shouldCallNow","clearTimeout","setTimeout","getTime","createReturnValue","start","timeEstimates","matchSequence","calcTime","attackTimes","main","matching","zxcvbn","zxcvbnAsync"],"mappings":"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"} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/libraries/advisory_rules_mysql_before80003.php b/Sources/php_script/script/phpMyAdmin/libraries/advisory_rules_mysql_before80003.php deleted file mode 100644 index 4493c16..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/advisory_rules_mysql_before80003.php +++ /dev/null @@ -1,122 +0,0 @@ - 'Query cache disabled', - 'name' => __('Query cache disabled'), - 'formula' => 'query_cache_size', - 'test' => 'value == 0 || query_cache_type == \'OFF\' || query_cache_type == \'0\'', - 'issue' => __('The query cache is not enabled.'), - 'recommendation' => __( - 'The query cache is known to greatly improve performance if configured correctly. Enable it by' - . ' setting {query_cache_size} to a 2 digit MiB value and setting {query_cache_type} to \'ON\'.' - . ' Note: If you are using memcached, ignore this recommendation.' - ), - 'justification' => __('query_cache_size is set to 0 or query_cache_type is set to \'OFF\''), - ], - [ - 'id' => 'Query cache efficiency (%)', - /* xgettext:no-php-format */ - 'name' => __('Query cache efficiency (%)'), - 'precondition' => 'Com_select + Qcache_hits > 0 && !fired(\'Query cache disabled\')', - 'formula' => 'Qcache_hits / (Com_select + Qcache_hits) * 100', - 'test' => 'value < 20', - 'issue' => __('Query cache not running efficiently, it has a low hit rate.'), - 'recommendation' => __('Consider increasing {query_cache_limit}.'), - 'justification' => __('The current query cache hit rate of %s%% is below 20%%'), - 'justification_formula' => 'round(value,1)', - ], - [ - 'id' => 'Query Cache usage', - 'name' => __('Query Cache usage'), - 'precondition' => '!fired(\'Query cache disabled\')', - 'formula' => '100 - Qcache_free_memory / query_cache_size * 100', - 'test' => 'value < 80', - /* xgettext:no-php-format */ - 'issue' => __('Less than 80% of the query cache is being utilized.'), - 'recommendation' => __( - 'This might be caused by {query_cache_limit} being too low.' - . ' Flushing the query cache might help as well.' - ), - 'justification' => __( - 'The current ratio of free query cache memory to total query' - . ' cache size is %s%%. It should be above 80%%' - ), - 'justification_formula' => 'round(value,1)', - ], - [ - 'id' => 'Query cache fragmentation', - 'name' => __('Query cache fragmentation'), - 'precondition' => '!fired(\'Query cache disabled\')', - 'formula' => 'Qcache_free_blocks / (Qcache_total_blocks / 2) * 100', - 'test' => 'value > 20', - 'issue' => __('The query cache is considerably fragmented.'), - 'recommendation' => __( - 'Severe fragmentation is likely to (further) increase Qcache_lowmem_prunes. This might be' - . ' caused by many Query cache low memory prunes due to {query_cache_size} being too small. For a' - . ' immediate but short lived fix you can flush the query cache (might lock the query cache for a' - . ' long time). Carefully adjusting {query_cache_min_res_unit} to a lower value might help too,' - . ' e.g. you can set it to the average size of your queries in the cache using this formula:' - . ' (query_cache_size - qcache_free_memory) / qcache_queries_in_cache' - ), - 'justification' => __( - 'The cache is currently fragmented by %s%% , with 100%% fragmentation meaning that the query' - . ' cache is an alternating pattern of free and used blocks. This value should be below 20%%.' - ), - 'justification_formula' => 'round(value,1)', - ], - [ - 'id' => 'Query cache low memory prunes', - 'name' => __('Query cache low memory prunes'), - 'precondition' => 'Qcache_inserts > 0 && !fired(\'Query cache disabled\')', - 'formula' => 'Qcache_lowmem_prunes / Qcache_inserts * 100', - 'test' => 'value > 0.1', - 'issue' => __('Cached queries are removed due to low query cache memory from the query cache.'), - 'recommendation' => __( - 'You might want to increase {query_cache_size}, however keep in mind that the overhead of' - . ' maintaining the cache is likely to increase with its size, so do this in small increments' - . ' and monitor the results.' - ), - 'justification' => __( - 'The ratio of removed queries to inserted queries is %s%%. The lower this value is,' - . ' the better (This rules firing limit: 0.1%%)' - ), - 'justification_formula' => 'round(value,1)', - ], - [ - 'id' => 'Query cache max size', - 'name' => __('Query cache max size'), - 'precondition' => '!fired(\'Query cache disabled\')', - 'formula' => 'query_cache_size', - 'test' => 'value > 1024 * 1024 * 128', - 'issue' => __( - 'The query cache size is above 128 MiB. Big query caches may cause significant' - . ' overhead that is required to maintain the cache.' - ), - 'recommendation' => __( - 'Depending on your environment, it might be performance increasing to reduce this value.' - ), - 'justification' => __('Current query cache size: %s'), - 'justification_formula' => 'ADVISOR_formatByteDown(value, 2, 2)', - ], - [ - 'id' => 'Query cache min result size', - 'name' => __('Query cache min result size'), - 'precondition' => '!fired(\'Query cache disabled\')', - 'formula' => 'query_cache_limit', - 'test' => 'value == 1024*1024', - 'issue' => __('The max size of the result set in the query cache is the default of 1 MiB.'), - 'recommendation' => __( - 'Changing {query_cache_limit} (usually by increasing) may increase efficiency. This variable' - . ' determines the maximum size a query result may have to be inserted into the query cache.' - . ' If there are many query results above 1 MiB that are well cacheable (many reads, little writes)' - . ' then increasing {query_cache_limit} will increase efficiency. Whereas in the case of many query' - . ' results being above 1 MiB that are not very well cacheable (often invalidated due to table' - . ' updates) increasing {query_cache_limit} might reduce efficiency.' - ), - 'justification' => __('query_cache_limit is set to 1 MiB'), - ], -]; diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Command/TwigLintCommand.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Command/TwigLintCommand.php deleted file mode 100644 index 876d352..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Command/TwigLintCommand.php +++ /dev/null @@ -1,271 +0,0 @@ - - * Author: Jérôme Tamarelle - * - * Copyright (c) 2013-2021 Fabien Potencier - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is furnished - * to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -class TwigLintCommand extends Command -{ - /** @var string|null */ - protected static $defaultName = 'lint:twig'; - - /** @var string|null */ - protected static $defaultDescription = 'Lint a Twig template and outputs encountered errors'; - - protected function configure(): void - { - $this - ->setDescription((string) self::$defaultDescription) - ->addOption('show-deprecations', null, InputOption::VALUE_NONE, 'Show deprecations as errors'); - } - - protected function findFiles(string $baseFolder): array - { - /* Open the handle */ - $handle = @opendir($baseFolder); - if ($handle === false) { - return []; - } - - $foundFiles = []; - - while (($file = readdir($handle)) !== false) { - if ($file === '.' || $file === '..') { - continue; - } - - $itemPath = $baseFolder . DIRECTORY_SEPARATOR . $file; - - if (is_dir($itemPath)) { - array_push($foundFiles, ...$this->findFiles($itemPath)); - continue; - } - - if (! is_file($itemPath)) { - continue; - } - - $foundFiles[] = $itemPath; - } - - /* Close the handle */ - closedir($handle); - - return $foundFiles; - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $io = new SymfonyStyle($input, $output); - $showDeprecations = $input->getOption('show-deprecations'); - - if ($showDeprecations) { - $prevErrorHandler = set_error_handler( - static function (int $level, string $message, string $file, int $line) use (&$prevErrorHandler) { - if ($level === E_USER_DEPRECATED) { - $templateLine = 0; - if (preg_match('/ at line (\d+)[ .]/', $message, $matches)) { - $templateLine = (int) $matches[1]; - } - - throw new Error($message, $templateLine); - } - - return $prevErrorHandler ? $prevErrorHandler($level, $message, $file, $line) : false; - } - ); - } - - try { - $filesInfo = $this->getFilesInfo(ROOT_PATH . 'templates'); - } finally { - if ($showDeprecations) { - restore_error_handler(); - } - } - - return $this->display($output, $io, $filesInfo); - } - - protected function getFilesInfo(string $templatesPath): array - { - $filesInfo = []; - $filesFound = $this->findFiles($templatesPath); - foreach ($filesFound as $file) { - $filesInfo[] = $this->validate($this->getTemplateContents($file), $file); - } - - return $filesInfo; - } - - /** - * Allows easier testing - */ - protected function getTemplateContents(string $filePath): string - { - return (string) file_get_contents($filePath); - } - - private function validate(string $template, string $file): array - { - $twig = Template::getTwigEnvironment(null); - - $realLoader = $twig->getLoader(); - try { - $temporaryLoader = new ArrayLoader([$file => $template]); - $twig->setLoader($temporaryLoader); - $nodeTree = $twig->parse($twig->tokenize(new Source($template, $file))); - $twig->compile($nodeTree); - $twig->setLoader($realLoader); - } catch (Error $e) { - $twig->setLoader($realLoader); - - return [ - 'template' => $template, - 'file' => $file, - 'line' => $e->getTemplateLine(), - 'valid' => false, - 'exception' => $e, - ]; - } - - return ['template' => $template, 'file' => $file, 'valid' => true]; - } - - private function display(OutputInterface $output, SymfonyStyle $io, array $filesInfo): int - { - $errors = 0; - - foreach ($filesInfo as $info) { - if ($info['valid'] && $output->isVerbose()) { - $io->comment('OK' . ($info['file'] ? sprintf(' in %s', $info['file']) : '')); - } elseif (! $info['valid']) { - ++$errors; - $this->renderException($io, $info['template'], $info['exception'], $info['file']); - } - } - - if ($errors === 0) { - $io->success(sprintf('All %d Twig files contain valid syntax.', count($filesInfo))); - - return Command::SUCCESS; - } - - $io->warning( - sprintf( - '%d Twig files have valid syntax and %d contain errors.', - count($filesInfo) - $errors, - $errors - ) - ); - - return Command::FAILURE; - } - - private function renderException( - SymfonyStyle $output, - string $template, - Error $exception, - ?string $file = null - ): void { - $line = $exception->getTemplateLine(); - - if ($file) { - $output->text(sprintf(' ERROR in %s (line %s)', $file, $line)); - } else { - $output->text(sprintf(' ERROR (line %s)', $line)); - } - - // If the line is not known (this might happen for deprecations if we fail at detecting the line for instance), - // we render the message without context, to ensure the message is displayed. - if ($line <= 0) { - $output->text(sprintf(' >> %s ', $exception->getRawMessage())); - - return; - } - - foreach ($this->getContext($template, $line) as $lineNumber => $code) { - $output->text(sprintf( - '%s %-6s %s', - $lineNumber === $line ? ' >> ' : ' ', - $lineNumber, - $code - )); - if ($lineNumber !== $line) { - continue; - } - - $output->text(sprintf(' >> %s ', $exception->getRawMessage())); - } - } - - private function getContext(string $template, int $line, int $context = 3): array - { - $lines = explode("\n", $template); - - $position = max(0, $line - $context); - $max = min(count($lines), $line - 1 + $context); - - $result = []; - while ($position < $max) { - $result[$position + 1] = $lines[$position]; - ++$position; - } - - return $result; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplay.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplay.php deleted file mode 100644 index 7e64442..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplay.php +++ /dev/null @@ -1,889 +0,0 @@ -formDisplayTemplate = new FormDisplayTemplate($GLOBALS['config']); - $this->configFile = $cf; - // initialize validators - Validator::getValidators($this->configFile); - } - - /** - * Returns {@link ConfigFile} associated with this instance - * - * @return ConfigFile - */ - public function getConfigFile() - { - return $this->configFile; - } - - /** - * Registers form in form manager - * - * @param string $formName Form name - * @param array $form Form data - * @param int $serverId 0 if new server, validation; >= 1 if editing a server - */ - public function registerForm($formName, array $form, $serverId = null): void - { - $this->forms[$formName] = new Form($formName, $form, $this->configFile, $serverId); - $this->isValidated = false; - foreach ($this->forms[$formName]->fields as $path) { - $workPath = $serverId === null - ? $path - : str_replace('Servers/1/', 'Servers/' . $serverId . '/', $path); - $this->systemPaths[$workPath] = $path; - $this->translatedPaths[$workPath] = str_replace('/', '-', $workPath); - } - } - - /** - * Processes forms, returns true on successful save - * - * @param bool $allowPartialSave allows for partial form saving - * on failed validation - * @param bool $checkFormSubmit whether check for $_POST['submit_save'] - */ - public function process($allowPartialSave = true, $checkFormSubmit = true): bool - { - if ($checkFormSubmit && ! isset($_POST['submit_save'])) { - return false; - } - - // save forms - if (count($this->forms) > 0) { - return $this->save(array_keys($this->forms), $allowPartialSave); - } - - return false; - } - - /** - * Runs validation for all registered forms - */ - private function validate(): void - { - if ($this->isValidated) { - return; - } - - $paths = []; - $values = []; - foreach ($this->forms as $form) { - $paths[] = $form->name; - // collect values and paths - foreach ($form->fields as $path) { - $workPath = array_search($path, $this->systemPaths); - $values[$path] = $this->configFile->getValue($workPath); - $paths[] = $path; - } - } - - // run validation - $errors = Validator::validate($this->configFile, $paths, $values, false); - - // change error keys from canonical paths to work paths - if (is_array($errors) && count($errors) > 0) { - $this->errors = []; - foreach ($errors as $path => $errorList) { - $workPath = array_search($path, $this->systemPaths); - // field error - if (! $workPath) { - // form error, fix path - $workPath = $path; - } - - $this->errors[$workPath] = $errorList; - } - } - - $this->isValidated = true; - } - - /** - * Outputs HTML for forms - * - * @param bool $showButtons whether show submit and reset button - * @param string $formAction action attribute for the form - * @param array|null $hiddenFields array of form hidden fields (key: field - * name) - * - * @return string HTML for forms - */ - public function getDisplay( - $showButtons = true, - $formAction = null, - $hiddenFields = null - ) { - $js = []; - $jsDefault = []; - - /** - * We do validation on page refresh when browser remembers field values, - * add a field with known value which will be used for checks. - */ - static $hasCheckPageRefresh = false; - if (! $hasCheckPageRefresh) { - $hasCheckPageRefresh = true; - } - - $tabs = []; - foreach ($this->forms as $form) { - $tabs[$form->name] = Descriptions::get('Form_' . $form->name); - } - - // validate only when we aren't displaying a "new server" form - $isNewServer = false; - foreach ($this->forms as $form) { - if ($form->index === 0) { - $isNewServer = true; - break; - } - } - - if (! $isNewServer) { - $this->validate(); - } - - // user preferences - $this->loadUserprefsInfo(); - - $validators = Validator::getValidators($this->configFile); - $forms = []; - - foreach ($this->forms as $key => $form) { - $this->formDisplayTemplate->group = 0; - $forms[$key] = [ - 'name' => $form->name, - 'descriptions' => [ - 'name' => Descriptions::get('Form_' . $form->name, 'name'), - 'desc' => Descriptions::get('Form_' . $form->name, 'desc'), - ], - 'errors' => $this->errors[$form->name] ?? null, - 'fields_html' => '', - ]; - - foreach ($form->fields as $field => $path) { - $workPath = array_search($path, $this->systemPaths); - $translatedPath = $this->translatedPaths[$workPath]; - // always true/false for user preferences display - // otherwise null - $userPrefsAllow = isset($this->userprefsKeys[$path]) - ? ! isset($this->userprefsDisallow[$path]) - : null; - // display input - $forms[$key]['fields_html'] .= $this->displayFieldInput( - $form, - $field, - $path, - $workPath, - $translatedPath, - true, - $userPrefsAllow, - $jsDefault - ); - // register JS validators for this field - if (! isset($validators[$path])) { - continue; - } - - $this->formDisplayTemplate->addJsValidate($translatedPath, $validators[$path], $js); - } - } - - return $this->formDisplayTemplate->display([ - 'action' => $formAction, - 'has_check_page_refresh' => $hasCheckPageRefresh, - 'hidden_fields' => (array) $hiddenFields, - 'tabs' => $tabs, - 'forms' => $forms, - 'show_buttons' => $showButtons, - 'js_array' => $js, - 'js_default' => $jsDefault, - ]); - } - - /** - * Prepares data for input field display and outputs HTML code - * - * @param Form $form Form object - * @param string $field field name as it appears in $form - * @param string $systemPath field path, eg. Servers/1/verbose - * @param string $workPath work path, eg. Servers/4/verbose - * @param string $translatedPath work path changed so that it can be - * used as XHTML id - * @param bool $showRestoreDefault whether show "restore default" button - * besides the input field - * @param bool|null $userPrefsAllow whether user preferences are enabled - * for this field (null - no support, - * true/false - enabled/disabled) - * @param array $jsDefault array which stores JavaScript code - * to be displayed - * - * @return string|null HTML for input field - */ - private function displayFieldInput( - Form $form, - $field, - $systemPath, - $workPath, - $translatedPath, - $showRestoreDefault, - $userPrefsAllow, - array &$jsDefault - ) { - $name = Descriptions::get($systemPath); - $description = Descriptions::get($systemPath, 'desc'); - - $value = $this->configFile->get($workPath); - $valueDefault = $this->configFile->getDefault($systemPath); - $valueIsDefault = false; - if ($value === null || $value === $valueDefault) { - $value = $valueDefault; - $valueIsDefault = true; - } - - $opts = [ - 'doc' => $this->getDocLink($systemPath), - 'show_restore_default' => $showRestoreDefault, - 'userprefs_allow' => $userPrefsAllow, - 'userprefs_comment' => Descriptions::get($systemPath, 'cmt'), - ]; - if (isset($form->default[$systemPath])) { - $opts['setvalue'] = (string) $form->default[$systemPath]; - } - - if (isset($this->errors[$workPath])) { - $opts['errors'] = $this->errors[$workPath]; - } - - $type = ''; - switch ($form->getOptionType($field)) { - case 'string': - $type = 'text'; - break; - case 'short_string': - $type = 'short_text'; - break; - case 'double': - case 'integer': - $type = 'number_text'; - break; - case 'boolean': - $type = 'checkbox'; - break; - case 'select': - $type = 'select'; - $opts['values'] = $form->getOptionValueList($form->fields[$field]); - break; - case 'array': - $type = 'list'; - $value = (array) $value; - $valueDefault = (array) $valueDefault; - break; - case 'group': - // :group:end is changed to :group:end:{unique id} in Form class - $htmlOutput = ''; - if (mb_substr($field, 7, 4) !== 'end:') { - $htmlOutput .= $this->formDisplayTemplate->displayGroupHeader( - mb_substr($field, 7) - ); - } else { - $this->formDisplayTemplate->displayGroupFooter(); - } - - return $htmlOutput; - - case 'NULL': - trigger_error('Field ' . $systemPath . ' has no type', E_USER_WARNING); - - return null; - } - - // detect password fields - if ( - $type === 'text' - && (mb_substr($translatedPath, -9) === '-password' - || mb_substr($translatedPath, -4) === 'pass' - || mb_substr($translatedPath, -4) === 'Pass') - ) { - $type = 'password'; - } - - // TrustedProxies requires changes before displaying - if ($systemPath === 'TrustedProxies') { - foreach ($value as $ip => &$v) { - if (preg_match('/^-\d+$/', $ip)) { - continue; - } - - $v = $ip . ': ' . $v; - } - } - - $this->setComments($systemPath, $opts); - - // send default value to form's JS - $jsLine = '\'' . $translatedPath . '\': '; - switch ($type) { - case 'text': - case 'short_text': - case 'number_text': - case 'password': - $jsLine .= '\'' . Sanitize::escapeJsString($valueDefault) . '\''; - break; - case 'checkbox': - $jsLine .= $valueDefault ? 'true' : 'false'; - break; - case 'select': - $valueDefaultJs = is_bool($valueDefault) - ? (int) $valueDefault - : $valueDefault; - $jsLine .= '[\'' . Sanitize::escapeJsString($valueDefaultJs) . '\']'; - break; - case 'list': - $val = $valueDefault; - if (isset($val['wrapper_params'])) { - unset($val['wrapper_params']); - } - - $jsLine .= '\'' . Sanitize::escapeJsString(implode("\n", $val)) - . '\''; - break; - } - - $jsDefault[] = $jsLine; - - return $this->formDisplayTemplate->displayInput( - $translatedPath, - $name, - $type, - $value, - $description, - $valueIsDefault, - $opts - ); - } - - /** - * Displays errors - * - * @return string|null HTML for errors - */ - public function displayErrors() - { - $this->validate(); - if (count($this->errors) === 0) { - return null; - } - - $htmlOutput = ''; - - foreach ($this->errors as $systemPath => $errorList) { - if (isset($this->systemPaths[$systemPath])) { - $name = Descriptions::get($this->systemPaths[$systemPath]); - } else { - $name = Descriptions::get('Form_' . $systemPath); - } - - $htmlOutput .= $this->formDisplayTemplate->displayErrors($name, $errorList); - } - - return $htmlOutput; - } - - /** - * Reverts erroneous fields to their default values - */ - public function fixErrors(): void - { - $this->validate(); - if (count($this->errors) === 0) { - return; - } - - $cf = $this->configFile; - foreach (array_keys($this->errors) as $workPath) { - if (! isset($this->systemPaths[$workPath])) { - continue; - } - - $canonicalPath = $this->systemPaths[$workPath]; - $cf->set($workPath, $cf->getDefault($canonicalPath)); - } - } - - /** - * Validates select field and casts $value to correct type - * - * @param string|bool $value Current value - * @param array $allowed List of allowed values - */ - private function validateSelect(&$value, array $allowed): bool - { - $valueCmp = is_bool($value) - ? (int) $value - : $value; - foreach (array_keys($allowed) as $vk) { - // equality comparison only if both values are numeric or not numeric - // (allows to skip 0 == 'string' equalling to true) - // or identity (for string-string) - if (! (($vk == $value && ! (is_numeric($valueCmp) xor is_numeric($vk))) || $vk === $value)) { - continue; - } - - // keep boolean value as boolean - if (! is_bool($value)) { - // phpcs:ignore Generic.PHP.ForbiddenFunctions - settype($value, gettype($vk)); - } - - return true; - } - - return false; - } - - /** - * Validates and saves form data to session - * - * @param array|string $forms array of form names - * @param bool $allowPartialSave allows for partial form saving on - * failed validation - */ - public function save($forms, $allowPartialSave = true): bool - { - $result = true; - $forms = (array) $forms; - - $values = []; - $toSave = []; - $isSetupScript = $GLOBALS['config']->get('is_setup'); - if ($isSetupScript) { - $this->loadUserprefsInfo(); - } - - $this->errors = []; - foreach ($forms as $formName) { - if (! isset($this->forms[$formName])) { - continue; - } - - $form = $this->forms[$formName]; - // get current server id - $changeIndex = $form->index === 0 - ? $this->configFile->getServerCount() + 1 - : false; - // grab POST values - foreach ($form->fields as $field => $systemPath) { - $workPath = array_search($systemPath, $this->systemPaths); - $key = $this->translatedPaths[$workPath]; - $type = (string) $form->getOptionType($field); - - // skip groups - if ($type === 'group') { - continue; - } - - // ensure the value is set - if (! isset($_POST[$key])) { - // checkboxes aren't set by browsers if they're off - if ($type !== 'boolean') { - $this->errors[$form->name][] = sprintf( - __('Missing data for %s'), - '' . Descriptions::get($systemPath) . '' - ); - $result = false; - continue; - } - - $_POST[$key] = false; - } - - // user preferences allow/disallow - if ($isSetupScript && isset($this->userprefsKeys[$systemPath])) { - if (isset($this->userprefsDisallow[$systemPath], $_POST[$key . '-userprefs-allow'])) { - unset($this->userprefsDisallow[$systemPath]); - } elseif (! isset($_POST[$key . '-userprefs-allow'])) { - $this->userprefsDisallow[$systemPath] = true; - } - } - - // cast variables to correct type - switch ($type) { - case 'double': - $_POST[$key] = Util::requestString($_POST[$key]); - // phpcs:ignore Generic.PHP.ForbiddenFunctions - settype($_POST[$key], 'float'); - break; - case 'boolean': - case 'integer': - if ($_POST[$key] !== '') { - $_POST[$key] = Util::requestString($_POST[$key]); - // phpcs:ignore Generic.PHP.ForbiddenFunctions - settype($_POST[$key], $type); - } - - break; - case 'select': - $successfullyValidated = $this->validateSelect( - $_POST[$key], - $form->getOptionValueList($systemPath) - ); - if (! $successfullyValidated) { - $this->errors[$workPath][] = __('Incorrect value!'); - $result = false; - // "continue" for the $form->fields foreach-loop - continue 2; - } - - break; - case 'string': - case 'short_string': - $_POST[$key] = Util::requestString($_POST[$key]); - break; - case 'array': - // eliminate empty values and ensure we have an array - $postValues = is_array($_POST[$key]) - ? $_POST[$key] - : explode("\n", $_POST[$key]); - $_POST[$key] = []; - $this->fillPostArrayParameters($postValues, $key); - break; - } - - // now we have value with proper type - $values[$systemPath] = $_POST[$key]; - if ($changeIndex !== false) { - $workPath = str_replace( - 'Servers/' . $form->index . '/', - 'Servers/' . $changeIndex . '/', - $workPath - ); - } - - $toSave[$workPath] = $systemPath; - } - } - - // save forms - if (! $allowPartialSave && ! empty($this->errors)) { - // don't look for non-critical errors - $this->validate(); - - return $result; - } - - foreach ($toSave as $workPath => $path) { - // TrustedProxies requires changes before saving - if ($path === 'TrustedProxies') { - $proxies = []; - $i = 0; - foreach ($values[$path] as $value) { - $matches = []; - $match = preg_match('/^(.+):(?:[ ]?)(\\w+)$/', $value, $matches); - if ($match) { - // correct 'IP: HTTP header' pair - $ip = trim($matches[1]); - $proxies[$ip] = trim($matches[2]); - } else { - // save also incorrect values - $proxies['-' . $i] = $value; - $i++; - } - } - - $values[$path] = $proxies; - } - - $this->configFile->set($workPath, $values[$path], $path); - } - - if ($isSetupScript) { - $this->configFile->set( - 'UserprefsDisallow', - array_keys($this->userprefsDisallow) - ); - } - - // don't look for non-critical errors - $this->validate(); - - return $result; - } - - /** - * Tells whether form validation failed - */ - public function hasErrors(): bool - { - return count($this->errors) > 0; - } - - /** - * Returns link to documentation - * - * @param string $path Path to documentation - * - * @return string - */ - public function getDocLink($path) - { - $test = mb_substr($path, 0, 6); - if ($test === 'Import' || $test === 'Export') { - return ''; - } - - return MySQLDocumentation::getDocumentationLink( - 'config', - 'cfg_' . $this->getOptName($path), - Sanitize::isSetup() ? '../' : './' - ); - } - - /** - * Changes path so it can be used in URLs - * - * @param string $path Path - * - * @return string - */ - private function getOptName($path) - { - return str_replace(['Servers/1/', '/'], ['Servers/', '_'], $path); - } - - /** - * Fills out {@link userprefs_keys} and {@link userprefs_disallow} - */ - private function loadUserprefsInfo(): void - { - if ($this->userprefsKeys !== null) { - return; - } - - $this->userprefsKeys = array_flip(UserFormList::getFields()); - // read real config for user preferences display - $userPrefsDisallow = $GLOBALS['config']->get('is_setup') - ? $this->configFile->get('UserprefsDisallow', []) - : $GLOBALS['cfg']['UserprefsDisallow']; - $this->userprefsDisallow = array_flip($userPrefsDisallow ?? []); - } - - /** - * Sets field comments and warnings based on current environment - * - * @param string $systemPath Path to settings - * @param array $opts Chosen options - */ - private function setComments($systemPath, array &$opts): void - { - // RecodingEngine - mark unavailable types - if ($systemPath === 'RecodingEngine') { - $comment = ''; - if (! function_exists('iconv')) { - $opts['values']['iconv'] .= ' (' . __('unavailable') . ')'; - $comment = sprintf( - __('"%s" requires %s extension'), - 'iconv', - 'iconv' - ); - } - - if (! function_exists('recode_string')) { - $opts['values']['recode'] .= ' (' . __('unavailable') . ')'; - $comment .= ($comment ? ', ' : '') . sprintf( - __('"%s" requires %s extension'), - 'recode', - 'recode' - ); - } - - /* mbstring is always there thanks to polyfill */ - $opts['comment'] = $comment; - $opts['comment_warning'] = true; - } - - // ZipDump, GZipDump, BZipDump - check function availability - if ($systemPath === 'ZipDump' || $systemPath === 'GZipDump' || $systemPath === 'BZipDump') { - $comment = ''; - $funcs = [ - 'ZipDump' => [ - 'zip_open', - 'gzcompress', - ], - 'GZipDump' => [ - 'gzopen', - 'gzencode', - ], - 'BZipDump' => [ - 'bzopen', - 'bzcompress', - ], - ]; - if (! function_exists($funcs[$systemPath][0])) { - $comment = sprintf( - __( - 'Compressed import will not work due to missing function %s.' - ), - $funcs[$systemPath][0] - ); - } - - if (! function_exists($funcs[$systemPath][1])) { - $comment .= ($comment ? '; ' : '') . sprintf( - __( - 'Compressed export will not work due to missing function %s.' - ), - $funcs[$systemPath][1] - ); - } - - $opts['comment'] = $comment; - $opts['comment_warning'] = true; - } - - if ($GLOBALS['config']->get('is_setup')) { - return; - } - - if ($systemPath !== 'MaxDbList' && $systemPath !== 'MaxTableList' && $systemPath !== 'QueryHistoryMax') { - return; - } - - $opts['comment'] = sprintf( - __('maximum %s'), - $GLOBALS['cfg'][$systemPath] - ); - } - - /** - * Copy items of an array to $_POST variable - * - * @param array $postValues List of parameters - * @param string $key Array key - */ - private function fillPostArrayParameters(array $postValues, $key): void - { - foreach ($postValues as $v) { - $v = Util::requestString($v); - if ($v === '') { - continue; - } - - $_POST[$key][] = $v; - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplayTemplate.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplayTemplate.php deleted file mode 100644 index a7ae0bb..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Config/FormDisplayTemplate.php +++ /dev/null @@ -1,177 +0,0 @@ -config = $config; - $this->template = new Template(); - } - - /** - * Displays input field - * - * $opts keys: - * o doc - (string) documentation link - * o errors - error array - * o setvalue - (string) shows button allowing to set predefined value - * o show_restore_default - (boolean) whether show "restore default" button - * o userprefs_allow - whether user preferences are enabled for this field - * (null - no support, true/false - enabled/disabled) - * o userprefs_comment - (string) field comment - * o values - key - value pairs for ' - . htmlspecialchars($column) . ' [ ' - . htmlspecialchars($def['Type']) . ' ]
            '; - } else { - $selectColHtml .= ''; - } - } - - return $selectColHtml; - } - - /** - * get the html of the form to add the new column to given table - * - * @param int $numFields number of columns to add - * @param string $db current database - * @param string $table current table - * @param array $columnMeta array containing default values for the fields - * - * @return string HTML - */ - public function getHtmlForCreateNewColumn( - $numFields, - $db, - $table, - array $columnMeta = [] - ) { - $relationParameters = $this->relation->getRelationParameters(); - $contentCells = []; - $availableMime = []; - $mimeMap = []; - if ($relationParameters->browserTransformationFeature !== null && $GLOBALS['cfg']['BrowseMIME']) { - $mimeMap = $this->transformations->getMime($db, $table); - $availableMime = $this->transformations->getAvailableMimeTypes(); - } - - $commentsMap = $this->relation->getComments($db, $table); - for ($columnNumber = 0; $columnNumber < $numFields; $columnNumber++) { - $contentCells[$columnNumber] = [ - 'column_number' => $columnNumber, - 'column_meta' => $columnMeta, - 'type_upper' => '', - 'length_values_input_size' => 8, - 'length' => '', - 'extracted_columnspec' => [], - 'submit_attribute' => null, - 'comments_map' => $commentsMap, - 'fields_meta' => null, - 'is_backup' => true, - 'move_columns' => [], - 'available_mime' => $availableMime, - 'mime_map' => $mimeMap, - ]; - } - - $charsets = Charsets::getCharsets($this->dbi, $GLOBALS['cfg']['Server']['DisableIS']); - $collations = Charsets::getCollations($this->dbi, $GLOBALS['cfg']['Server']['DisableIS']); - $charsetsList = []; - foreach ($charsets as $charset) { - $collationsList = []; - foreach ($collations[$charset->getName()] as $collation) { - $collationsList[] = [ - 'name' => $collation->getName(), - 'description' => $collation->getDescription(), - ]; - } - - $charsetsList[] = [ - 'name' => $charset->getName(), - 'description' => $charset->getDescription(), - 'collations' => $collationsList, - ]; - } - - return $this->template->render('columns_definitions/table_fields_definitions', [ - 'is_backup' => true, - 'fields_meta' => null, - 'relation_parameters' => $relationParameters, - 'content_cells' => $contentCells, - 'change_column' => $_POST['change_column'] ?? $_GET['change_column'] ?? null, - 'is_virtual_columns_supported' => Compatibility::isVirtualColumnsSupported($this->dbi->getVersion()), - 'browse_mime' => $GLOBALS['cfg']['BrowseMIME'], - 'supports_stored_keyword' => Compatibility::supportsStoredKeywordForVirtualColumns( - $this->dbi->getVersion() - ), - 'server_version' => $this->dbi->getVersion(), - 'max_rows' => intval($GLOBALS['cfg']['MaxRows']), - 'char_editing' => $GLOBALS['cfg']['CharEditing'], - 'attribute_types' => $this->dbi->types->getAttributes(), - 'privs_available' => $GLOBALS['col_priv'] && $GLOBALS['is_reload_priv'], - 'max_length' => $this->dbi->getVersion() >= 50503 ? 1024 : 255, - 'charsets' => $charsetsList, - ]); - } - - /** - * build the html for step 1.1 of normalization - * - * @param string $db current database - * @param string $table current table - * @param string $normalizedTo up to which step normalization will go, - * possible values 1nf|2nf|3nf - * - * @return string HTML for step 1.1 - */ - public function getHtmlFor1NFStep1($db, $table, $normalizedTo) - { - $step = 1; - $stepTxt = __('Make all columns atomic'); - $html = "

            " - . __('First step of normalization (1NF)') . '

            '; - $html .= "
            " . - '
            ' . - '' . __('Step 1.') . $step . ' ' . $stepTxt . '' . - '

            ' . __( - 'Do you have any column which can be split into more than' - . ' one column? ' - . 'For example: address can be split into street, city, country and zip.' - ) - . "
            ( " - . __('Show me the central list of columns that are not already in this table') . ' )

            ' - . "

            " . __( - 'Select a column which can be split into more ' - . 'than one (on select of \'no such column\', it\'ll move to next step).' - ) - . '

            ' - . "
            " - . "' - . '' . __('split into ') - . "" - . '
            ' - . "
            " - . '
            ' - . '
            ' - . '
            '; - - return $html; - } - - /** - * build the html contents of various html elements in step 1.2 - * - * @param string $db current database - * @param string $table current table - * - * @return string[] HTML contents for step 1.2 - */ - public function getHtmlContentsFor1NFStep2($db, $table) - { - $step = 2; - $stepTxt = __('Have a primary key'); - $primary = Index::getPrimary($table, $db); - $hasPrimaryKey = '0'; - $legendText = __('Step 1.') . $step . ' ' . $stepTxt; - $extra = ''; - if ($primary !== false) { - $headText = __('Primary key already exists.'); - $subText = __('Taking you to next step…'); - $hasPrimaryKey = '1'; - } else { - $headText = __( - 'There is no primary key; please add one.
            ' - . 'Hint: A primary key is a column ' - . '(or combination of columns) that uniquely identify all rows.' - ); - $subText = '' - . Generator::getIcon( - 'b_index_add', - __( - 'Add a primary key on existing column(s)' - ) - ) - . ''; - $extra = __('If it\'s not possible to make existing column combinations as primary key') . '
            ' - . '' - . __('+ Add a new primary key column') . ''; - } - - return [ - 'legendText' => $legendText, - 'headText' => $headText, - 'subText' => $subText, - 'hasPrimaryKey' => $hasPrimaryKey, - 'extra' => $extra, - ]; - } - - /** - * build the html contents of various html elements in step 1.4 - * - * @param string $db current database - * @param string $table current table - * - * @return string[] HTML contents for step 1.4 - */ - public function getHtmlContentsFor1NFStep4($db, $table) - { - $step = 4; - $stepTxt = __('Remove redundant columns'); - $legendText = __('Step 1.') . $step . ' ' . $stepTxt; - $headText = __( - 'Do you have a group of columns which on combining gives an existing' - . ' column? For example, if you have first_name, last_name and' - . ' full_name then combining first_name and last_name gives full_name' - . ' which is redundant.' - ); - $subText = __( - 'Check the columns which are redundant and click on remove. ' - . "If no redundant column, click on 'No redundant column'" - ); - $extra = $this->getHtmlForColumnsList($db, $table, 'all', 'checkbox') . '
            ' - . '' - . ''; - - return [ - 'legendText' => $legendText, - 'headText' => $headText, - 'subText' => $subText, - 'extra' => $extra, - ]; - } - - /** - * build the html contents of various html elements in step 1.3 - * - * @param string $db current database - * @param string $table current table - * - * @return string[] HTML contents for step 1.3 - */ - public function getHtmlContentsFor1NFStep3($db, $table) - { - $step = 3; - $stepTxt = __('Move repeating groups'); - $legendText = __('Step 1.') . $step . ' ' . $stepTxt; - $headText = __( - 'Do you have a group of two or more columns that are closely ' - . 'related and are all repeating the same attribute? For example, ' - . 'a table that holds data on books might have columns such as book_id, ' - . 'author1, author2, author3 and so on which form a ' - . 'repeating group. In this case a new table (book_id, author) should ' - . 'be created.' - ); - $subText = __( - 'Check the columns which form a repeating group. If no such group, click on \'No repeating group\'' - ); - $extra = $this->getHtmlForColumnsList($db, $table, 'all', 'checkbox') . '
            ' - . '' - . ''; - $primary = Index::getPrimary($table, $db); - $primarycols = $primary === false ? [] : $primary->getColumns(); - $pk = []; - foreach ($primarycols as $col) { - $pk[] = $col->getName(); - } - - return [ - 'legendText' => $legendText, - 'headText' => $headText, - 'subText' => $subText, - 'extra' => $extra, - 'primary_key' => json_encode($pk), - ]; - } - - /** - * build html contents for 2NF step 2.1 - * - * @param string $db current database - * @param string $table current table - * - * @return string[] HTML contents for 2NF step 2.1 - */ - public function getHtmlFor2NFstep1($db, $table) - { - $legendText = __('Step 2.') . '1 ' . __('Find partial dependencies'); - $primary = Index::getPrimary($table, $db); - $primarycols = $primary === false ? [] : $primary->getColumns(); - $pk = []; - $subText = ''; - $selectPkForm = ''; - $extra = ''; - foreach ($primarycols as $col) { - $pk[] = $col->getName(); - $selectPkForm .= '' - . htmlspecialchars($col->getName()); - } - - $key = implode(', ', $pk); - if (count($primarycols) > 1) { - $this->dbi->selectDb($db); - $columns = $this->dbi->getColumnNames($db, $table); - if (count($pk) == count($columns)) { - $headText = sprintf( - __( - 'No partial dependencies possible as ' - . 'no non-primary column exists since primary key ( %1$s ) ' - . 'is composed of all the columns in the table.' - ), - htmlspecialchars($key) - ) . '
            '; - $extra = '

            ' . __('Table is already in second normal form.') - . '

            '; - } else { - $headText = sprintf( - __( - 'The primary key ( %1$s ) consists of more than one column ' - . 'so we need to find the partial dependencies.' - ), - htmlspecialchars($key) - ) . '
            ' . __('Please answer the following question(s) carefully to obtain a correct normalization.') - . '
            ' . __( - '+ Show me the possible partial dependencies based on data in the table' - ) . ''; - $subText = __( - 'For each column below, ' - . 'please select the minimal set of columns among given set ' - . 'whose values combined together are sufficient' - . ' to determine the value of the column.' - ); - $cnt = 0; - foreach ($columns as $column) { - if (in_array($column, $pk)) { - continue; - } - - $cnt++; - $extra .= '' . sprintf( - __('\'%1$s\' depends on:'), - htmlspecialchars($column) - ) . '
            '; - $extra .= '
            ' - . $selectPkForm . '


            '; - } - } - } else { - $headText = sprintf( - __( - 'No partial dependencies possible as the primary key ( %1$s ) has just one column.' - ), - htmlspecialchars($key) - ) . '
            '; - $extra = '

            ' . __('Table is already in second normal form.') . '

            '; - } - - return [ - 'legendText' => $legendText, - 'headText' => $headText, - 'subText' => $subText, - 'extra' => $extra, - 'primary_key' => $key, - ]; - } - - /** - * build the html for showing the tables to have in order to put current table in 2NF - * - * @param array $partialDependencies array containing all the dependencies - * @param string $table current table - * - * @return string HTML - */ - public function getHtmlForNewTables2NF(array $partialDependencies, $table) - { - $html = '

            ' . sprintf( - __( - 'In order to put the ' - . 'original table \'%1$s\' into Second normal form we need ' - . 'to create the following tables:' - ), - htmlspecialchars($table) - ) . '

            '; - $tableName = $table; - $i = 1; - foreach ($partialDependencies as $key => $dependents) { - $html .= '

            ' - . '( ' . htmlspecialchars($key) . '' - . (count($dependents) > 0 ? ', ' : '') - . htmlspecialchars(implode(', ', $dependents)) . ' )'; - $i++; - $tableName = 'table' . $i; - } - - return $html; - } - - /** - * create/alter the tables needed for 2NF - * - * @param array $partialDependencies array containing all the partial dependencies - * @param object $tablesName name of new tables - * @param string $table current table - * @param string $db current database - * - * @return array - */ - public function createNewTablesFor2NF(array $partialDependencies, $tablesName, $table, $db) - { - $dropCols = false; - $nonPKCols = []; - $queries = []; - $error = false; - $headText = '

            ' . sprintf( - __('The second step of normalization is complete for table \'%1$s\'.'), - htmlspecialchars($table) - ) . '

            '; - if (count((array) $partialDependencies) === 1) { - return [ - 'legendText' => __('End of step'), - 'headText' => $headText, - 'queryError' => $error, - ]; - } - - $message = ''; - $this->dbi->selectDb($db); - foreach ($partialDependencies as $key => $dependents) { - if ($tablesName->$key != $table) { - $keys = explode(', ', $key); - $quotedKeys = []; - foreach ($keys as $eachKey) { - $quotedKeys[] = Util::backquote($eachKey); - } - - $backquotedKey = implode(', ', $quotedKeys); - - $quotedDependents = []; - foreach ($dependents as $dependent) { - $quotedDependents[] = Util::backquote($dependent); - } - - $queries[] = 'CREATE TABLE ' . Util::backquote($tablesName->$key) - . ' SELECT DISTINCT ' . $backquotedKey - . (count($dependents) > 0 ? ', ' : '') - . implode(',', $quotedDependents) - . ' FROM ' . Util::backquote($table) . ';'; - $queries[] = 'ALTER TABLE ' . Util::backquote($tablesName->$key) - . ' ADD PRIMARY KEY(' . $backquotedKey . ');'; - $nonPKCols = array_merge($nonPKCols, $dependents); - } else { - $dropCols = true; - } - } - - if ($dropCols) { - $query = 'ALTER TABLE ' . Util::backquote($table); - foreach ($nonPKCols as $col) { - $query .= ' DROP ' . Util::backquote($col) . ','; - } - - $query = trim($query, ', '); - $query .= ';'; - $queries[] = $query; - } else { - $queries[] = 'DROP TABLE ' . Util::backquote($table); - } - - foreach ($queries as $query) { - if (! $this->dbi->tryQuery($query)) { - $message = Message::error(__('Error in processing!')); - $message->addMessage( - Message::rawError($this->dbi->getError()), - '

            ' - ); - $error = true; - break; - } - } - - return [ - 'legendText' => __('End of step'), - 'headText' => $headText, - 'queryError' => $error, - 'extra' => $message, - ]; - } - - /** - * build the html for showing the new tables to have in order - * to put given tables in 3NF - * - * @param object $dependencies containing all the dependencies - * @param array $tables tables formed after 2NF and need to convert to 3NF - * @param string $db current database - * - * @return array containing html and the list of new tables - */ - public function getHtmlForNewTables3NF($dependencies, array $tables, $db) - { - $html = ''; - $i = 1; - $newTables = []; - foreach ($tables as $table => $arrDependson) { - if (count(array_unique($arrDependson)) === 1) { - continue; - } - - $primary = Index::getPrimary($table, $db); - $primarycols = $primary === false ? [] : $primary->getColumns(); - $pk = []; - foreach ($primarycols as $col) { - $pk[] = $col->getName(); - } - - $html .= '

            ' . sprintf( - __( - 'In order to put the ' - . 'original table \'%1$s\' into Third normal form we need ' - . 'to create the following tables:' - ), - htmlspecialchars($table) - ) . '

            '; - $tableName = $table; - $columnList = []; - foreach ($arrDependson as $key) { - $dependents = $dependencies->$key; - if ($key == $table) { - $key = implode(', ', $pk); - } - - $tmpTableCols = array_merge(explode(', ', $key), $dependents); - sort($tmpTableCols); - if (in_array($tmpTableCols, $columnList)) { - continue; - } - - $columnList[] = $tmpTableCols; - $html .= '

            ' - . '( ' . htmlspecialchars($key) . '' - . (count($dependents) > 0 ? ', ' : '') - . htmlspecialchars(implode(', ', $dependents)) . ' )'; - $newTables[$table][$tableName] = [ - 'pk' => $key, - 'nonpk' => implode(', ', $dependents), - ]; - $i++; - $tableName = 'table' . $i; - } - } - - return [ - 'html' => $html, - 'newTables' => $newTables, - 'success' => true, - ]; - } - - /** - * create new tables or alter existing to get 3NF - * - * @param array $newTables list of new tables to be created - * @param string $db current database - * - * @return array - */ - public function createNewTablesFor3NF(array $newTables, $db) - { - $queries = []; - $dropCols = false; - $error = false; - $headText = '

            ' . - __('The third step of normalization is complete.') - . '

            '; - if (count($newTables) === 0) { - return [ - 'legendText' => __('End of step'), - 'headText' => $headText, - 'queryError' => $error, - ]; - } - - $message = ''; - $this->dbi->selectDb($db); - foreach ($newTables as $originalTable => $tablesList) { - foreach ($tablesList as $table => $cols) { - if ($table != $originalTable) { - $pkArray = explode(', ', $cols['pk']); - $quotedPkArray = []; - foreach ($pkArray as $pk) { - $quotedPkArray[] = Util::backquote($pk); - } - - $quotedPk = implode(', ', $quotedPkArray); - - $nonpkArray = explode(', ', $cols['nonpk']); - $quotedNonpkArray = []; - foreach ($nonpkArray as $nonpk) { - $quotedNonpkArray[] = Util::backquote($nonpk); - } - - $quotedNonpk = implode(', ', $quotedNonpkArray); - - $queries[] = 'CREATE TABLE ' . Util::backquote($table) - . ' SELECT DISTINCT ' . $quotedPk - . ', ' . $quotedNonpk - . ' FROM ' . Util::backquote($originalTable) . ';'; - $queries[] = 'ALTER TABLE ' . Util::backquote($table) - . ' ADD PRIMARY KEY(' . $quotedPk . ');'; - } else { - $dropCols = $cols; - } - } - - if ($dropCols) { - $columns = $this->dbi->getColumnNames($db, $originalTable); - $colPresent = array_merge( - explode(', ', $dropCols['pk']), - explode(', ', $dropCols['nonpk']) - ); - $query = 'ALTER TABLE ' . Util::backquote($originalTable); - foreach ($columns as $col) { - if (in_array($col, $colPresent)) { - continue; - } - - $query .= ' DROP ' . Util::backquote($col) . ','; - } - - $query = trim($query, ', '); - $query .= ';'; - $queries[] = $query; - } else { - $queries[] = 'DROP TABLE ' . Util::backquote($originalTable); - } - - $dropCols = false; - } - - foreach ($queries as $query) { - if (! $this->dbi->tryQuery($query)) { - $message = Message::error(__('Error in processing!')); - $message->addMessage( - Message::rawError($this->dbi->getError()), - '

            ' - ); - $error = true; - break; - } - } - - return [ - 'legendText' => __('End of step'), - 'headText' => $headText, - 'queryError' => $error, - 'extra' => $message, - ]; - } - - /** - * move the repeating group of columns to a new table - * - * @param string $repeatingColumns comma separated list of repeating group columns - * @param string $primaryColumns comma separated list of column in primary key - * of $table - * @param string $newTable name of the new table to be created - * @param string $newColumn name of the new column in the new table - * @param string $table current table - * @param string $db current database - * - * @return array - */ - public function moveRepeatingGroup( - $repeatingColumns, - $primaryColumns, - $newTable, - $newColumn, - $table, - $db - ) { - $repeatingColumnsArr = explode(', ', $repeatingColumns); - $primaryColumnsArray = explode(',', $primaryColumns); - $columns = []; - foreach ($primaryColumnsArray as $column) { - $columns[] = Util::backquote($column); - } - - $primaryColumns = implode(',', $columns); - $query1 = 'CREATE TABLE ' . Util::backquote($newTable); - $query2 = 'ALTER TABLE ' . Util::backquote($table); - $message = Message::success( - sprintf( - __('Selected repeating group has been moved to the table \'%s\''), - htmlspecialchars($table) - ) - ); - $first = true; - $error = false; - foreach ($repeatingColumnsArr as $repeatingColumn) { - if (! $first) { - $query1 .= ' UNION '; - } - - $first = false; - $quotedRepeatingColumn = Util::backquote($repeatingColumn); - $query1 .= ' SELECT ' . $primaryColumns . ',' . $quotedRepeatingColumn - . ' as ' . Util::backquote($newColumn) - . ' FROM ' . Util::backquote($table); - $query2 .= ' DROP ' . $quotedRepeatingColumn . ','; - } - - $query2 = trim($query2, ','); - $queries = [ - $query1, - $query2, - ]; - $this->dbi->selectDb($db); - foreach ($queries as $query) { - if (! $this->dbi->tryQuery($query)) { - $message = Message::error(__('Error in processing!')); - $message->addMessage( - Message::rawError($this->dbi->getError()), - '

            ' - ); - $error = true; - break; - } - } - - return [ - 'queryError' => $error, - 'message' => $message, - ]; - } - - /** - * build html for 3NF step 1 to find the transitive dependencies - * - * @param string $db current database - * @param array $tables tables formed after 2NF and need to process for 3NF - * - * @return string[] - */ - public function getHtmlFor3NFstep1($db, array $tables) - { - $legendText = __('Step 3.') . '1 ' . __('Find transitive dependencies'); - $extra = ''; - $headText = __('Please answer the following question(s) carefully to obtain a correct normalization.'); - $subText = __( - 'For each column below, ' - . 'please select the minimal set of columns among given set ' - . 'whose values combined together are sufficient' - . ' to determine the value of the column.
            ' - . 'Note: A column may have no transitive dependency, ' - . 'in that case you don\'t have to select any.' - ); - $cnt = 0; - foreach ($tables as $table) { - $primary = Index::getPrimary($table, $db); - $primarycols = $primary === false ? [] : $primary->getColumns(); - $selectTdForm = ''; - $pk = []; - foreach ($primarycols as $col) { - $pk[] = $col->getName(); - } - - $this->dbi->selectDb($db); - $columns = $this->dbi->getColumnNames($db, $table); - if (count($columns) - count($pk) <= 1) { - continue; - } - - foreach ($columns as $column) { - if (in_array($column, $pk)) { - continue; - } - - $selectTdForm .= '' - . '' . htmlspecialchars($column) . ''; - } - - foreach ($columns as $column) { - if (in_array($column, $pk)) { - continue; - } - - $cnt++; - $extra .= '' . sprintf( - __('\'%1$s\' depends on:'), - htmlspecialchars($column) - ) - . '
            '; - $extra .= '
            ' - . $selectTdForm - . '


            '; - } - } - - if ($extra == '') { - $headText = __( - 'No Transitive dependencies possible as the table doesn\'t have any non primary key columns' - ); - $subText = ''; - $extra = '

            ' . __('Table is already in Third normal form!') . '

            '; - } - - return [ - 'legendText' => $legendText, - 'headText' => $headText, - 'subText' => $subText, - 'extra' => $extra, - ]; - } - - /** - * get html for options to normalize table - * - * @return string HTML - */ - public function getHtmlForNormalizeTable() - { - $htmlOutput = '
            ' - . Url::getHiddenInputs($GLOBALS['db'], $GLOBALS['table']) - . ''; - $htmlOutput .= '
            '; - $htmlOutput .= '' - . __('Improve table structure (Normalization):') . ''; - $htmlOutput .= '

            ' . __('Select up to what step you want to normalize') - . '

            '; - - $htmlOutput .= '
            '; - $htmlOutput .= '
            '; - - $htmlOutput .= '
            '; - $htmlOutput .= '
            '; - - $htmlOutput .= '
            '; - $htmlOutput .= '
            '; - - $htmlOutput .= '
            ' - . "" . __( - 'Hint: Please follow the procedure carefully in order to obtain correct normalization' - ) . '' - . '' - . '
            ' - . '
            ' - . '
            '; - - return $htmlOutput; - } - - /** - * find all the possible partial dependencies based on data in the table. - * - * @param string $table current table - * @param string $db current database - * - * @return string HTML containing the list of all the possible partial dependencies - */ - public function findPartialDependencies($table, $db) - { - $dependencyList = []; - $this->dbi->selectDb($db); - $columnNames = $this->dbi->getColumnNames($db, $table); - $columns = []; - foreach ($columnNames as $column) { - $columns[] = Util::backquote($column); - } - - $totalRowsRes = $this->dbi->fetchResult( - 'SELECT COUNT(*) FROM (SELECT * FROM ' - . Util::backquote($table) . ' LIMIT 500) as dt;' - ); - $totalRows = $totalRowsRes[0]; - $primary = Index::getPrimary($table, $db); - $primarycols = $primary === false ? [] : $primary->getColumns(); - $pk = []; - foreach ($primarycols as $col) { - $pk[] = Util::backquote($col->getName()); - } - - $partialKeys = $this->getAllCombinationPartialKeys($pk); - $distinctValCount = $this->findDistinctValuesCount( - array_unique( - array_merge($columns, $partialKeys) - ), - $table - ); - foreach ($columns as $column) { - if (in_array($column, $pk)) { - continue; - } - - foreach ($partialKeys as $partialKey) { - if ( - ! $partialKey - || ! $this->checkPartialDependency( - $partialKey, - $column, - $table, - $distinctValCount[$partialKey], - $distinctValCount[$column], - $totalRows - ) - ) { - continue; - } - - $dependencyList[$partialKey][] = $column; - } - } - - $html = __('This list is based on a subset of the table\'s data and is not necessarily accurate. ') - . '
            '; - foreach ($dependencyList as $dependon => $colList) { - $html .= '' - . '' - . '' - . htmlspecialchars(str_replace('`', '', (string) $dependon)) . ' -> ' - . '' - . htmlspecialchars(str_replace('`', '', implode(', ', $colList))) - . '' - . ''; - } - - if (empty($dependencyList)) { - $html .= '

            ' - . __('No partial dependencies found!') . '

            '; - } - - $html .= '
            '; - - return $html; - } - - /** - * check whether a particular column is dependent on given subset of primary key - * - * @param string $partialKey the partial key, subset of primary key, - * each column in key supposed to be backquoted - * @param string $column backquoted column on whose dependency being checked - * @param string $table current table - * @param int $pkCnt distinct value count for given partial key - * @param int $colCnt distinct value count for given column - * @param int $totalRows total distinct rows count of the table - */ - private function checkPartialDependency( - $partialKey, - $column, - $table, - $pkCnt, - $colCnt, - $totalRows - ): bool { - $query = 'SELECT ' - . 'COUNT(DISTINCT ' . $partialKey . ',' . $column . ') as pkColCnt ' - . 'FROM (SELECT * FROM ' . Util::backquote($table) - . ' LIMIT 500) as dt;'; - $res = $this->dbi->fetchResult($query, null, null); - $pkColCnt = $res[0]; - if ($pkCnt && $pkCnt == $colCnt && $colCnt == $pkColCnt) { - return true; - } - - return $totalRows && $totalRows == $pkCnt; - } - - /** - * function to get distinct values count of all the column in the array $columns - * - * @param array $columns array of backquoted columns whose distinct values - * need to be counted. - * @param string $table table to which these columns belong - * - * @return array associative array containing the count - */ - private function findDistinctValuesCount(array $columns, $table) - { - $result = []; - $query = 'SELECT '; - foreach ($columns as $column) { - if (! $column) { - continue; - } - - //each column is already backquoted - $query .= 'COUNT(DISTINCT ' . $column . ') as \'' - . $column . '_cnt\', '; - } - - $query = trim($query, ', '); - $query .= ' FROM (SELECT * FROM ' . Util::backquote($table) - . ' LIMIT 500) as dt;'; - $res = $this->dbi->fetchResult($query, null, null); - foreach ($columns as $column) { - if (! $column) { - continue; - } - - $result[$column] = $res[0][$column . '_cnt'] ?? null; - } - - return $result; - } - - /** - * find all the possible partial keys - * - * @param array $primaryKey array containing all the column present in primary key - * - * @return array containing all the possible partial keys(subset of primary key) - */ - private function getAllCombinationPartialKeys(array $primaryKey) - { - $results = ['']; - foreach ($primaryKey as $element) { - foreach ($results as $combination) { - $results[] = trim($element . ',' . $combination, ','); - } - } - - array_pop($results); //remove key which consist of all primary key columns - - return $results; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/OutputBuffering.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/OutputBuffering.php deleted file mode 100644 index 0b1c428..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/OutputBuffering.php +++ /dev/null @@ -1,174 +0,0 @@ -mode = $this->getMode(); - $this->on = false; - } - - /** - * This function could be used eventually to support more modes. - * - * @return int the output buffer mode - */ - private function getMode() - { - $mode = 0; - if ($GLOBALS['cfg']['OBGzip'] && function_exists('ob_start')) { - if (ini_get('output_handler') === 'ob_gzhandler') { - // If a user sets the output_handler in php.ini to ob_gzhandler, then - // any right frame file in phpMyAdmin will not be handled properly by - // the browser. My fix was to check the ini file within the - // PMA_outBufferModeGet() function. - $mode = 0; - } elseif (function_exists('ob_get_level') && ob_get_level() > 0) { - // happens when php.ini's output_buffering is not Off - ob_end_clean(); - $mode = 1; - } else { - $mode = 1; - } - } - - // Zero (0) is no mode or in other words output buffering is OFF. - // Follow 2^0, 2^1, 2^2, 2^3 type values for the modes. - // Useful if we ever decide to combine modes. Then a bitmask field of - // the sum of all modes will be the natural choice. - return $mode; - } - - /** - * Returns the singleton OutputBuffering object - * - * @return OutputBuffering object - */ - public static function getInstance() - { - if (empty(self::$instance)) { - self::$instance = new OutputBuffering(); - } - - return self::$instance; - } - - /** - * This function will need to run at the top of all pages if output - * output buffering is turned on. It also needs to be passed $mode from - * the PMA_outBufferModeGet() function or it will be useless. - */ - public function start(): void - { - if ($this->on) { - return; - } - - if ($this->mode && function_exists('ob_gzhandler')) { - ob_start('ob_gzhandler'); - } - - ob_start(); - $this->sendHeader('X-ob_mode', (string) $this->mode); - - register_shutdown_function( - [ - self::class, - 'stop', - ] - ); - $this->on = true; - } - - private function sendHeader(string $name, string $value): void - { - if (defined('TESTSUITE')) { - return; - } - - header(sprintf('%s: %s', $name, $value)); - } - - /** - * This function will need to run at the bottom of all pages if output - * buffering is turned on. It also needs to be passed $mode from the - * PMA_outBufferModeGet() function or it will be useless. - */ - public static function stop(): void - { - $buffer = self::getInstance(); - if (! $buffer->on) { - return; - } - - $buffer->on = false; - $buffer->content = ob_get_contents(); - if (ob_get_length() <= 0) { - return; - } - - ob_end_clean(); - } - - /** - * Gets buffer content - * - * @return string buffer content - */ - public function getContents() - { - return $this->content; - } - - /** - * Flushes output buffer - */ - public function flush(): void - { - if (ob_get_status() && $this->mode) { - ob_flush(); - } else { - flush(); - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/SubPartition.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/SubPartition.php deleted file mode 100644 index fe3be3b..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/SubPartition.php +++ /dev/null @@ -1,154 +0,0 @@ -db = $row['TABLE_SCHEMA']; - $this->table = $row['TABLE_NAME']; - $this->loadData($row); - } - - /** - * Loads data from the fetched row from information_schema.PARTITIONS - * - * @param array $row fetched row - */ - protected function loadData(array $row): void - { - $this->name = $row['SUBPARTITION_NAME']; - $this->ordinal = $row['SUBPARTITION_ORDINAL_POSITION']; - $this->method = $row['SUBPARTITION_METHOD']; - $this->expression = $row['SUBPARTITION_EXPRESSION']; - $this->loadCommonData($row); - } - - /** - * Loads some data that is common to both partitions and sub partitions - * - * @param array $row fetched row - */ - protected function loadCommonData(array $row): void - { - $this->rows = $row['TABLE_ROWS']; - $this->dataLength = $row['DATA_LENGTH']; - $this->indexLength = $row['INDEX_LENGTH']; - $this->comment = $row['PARTITION_COMMENT']; - } - - /** - * Return the partition name - * - * @return string partition name - */ - public function getName() - { - return $this->name; - } - - /** - * Return the ordinal of the partition - * - * @return int the ordinal - */ - public function getOrdinal() - { - return $this->ordinal; - } - - /** - * Returns the partition method - * - * @return string partition method - */ - public function getMethod() - { - return $this->method; - } - - /** - * Returns the partition expression - * - * @return string partition expression - */ - public function getExpression() - { - return $this->expression; - } - - /** - * Returns the number of data rows - * - * @return int number of rows - */ - public function getRows() - { - return $this->rows; - } - - /** - * Returns the data length - * - * @return int data length - */ - public function getDataLength() - { - return $this->dataLength; - } - - /** - * Returns the index length - * - * @return int index length - */ - public function getIndexLength() - { - return $this->indexLength; - } - - /** - * Returns the partition comment - * - * @return string partition comment - */ - public function getComment() - { - return $this->comment; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/TablePartitionDefinition.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/TablePartitionDefinition.php deleted file mode 100644 index aee83e9..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Partitioning/TablePartitionDefinition.php +++ /dev/null @@ -1,198 +0,0 @@ - 1 - && isset($partitionDetails['partition_by']) - && ($partitionDetails['partition_by'] === 'RANGE' - || $partitionDetails['partition_by'] === 'RANGE COLUMNS' - || $partitionDetails['partition_by'] === 'LIST' - || $partitionDetails['partition_by'] === 'LIST COLUMNS'); - - // Values are specified only for LIST and RANGE type partitions - $partitionDetails['value_enabled'] = isset($partitionDetails['partition_by']) - && ($partitionDetails['partition_by'] === 'RANGE' - || $partitionDetails['partition_by'] === 'RANGE COLUMNS' - || $partitionDetails['partition_by'] === 'LIST' - || $partitionDetails['partition_by'] === 'LIST COLUMNS'); - - return self::extractPartitions($partitionDetails); - } - - /** - * Extract some partitioning and subpartitioning parameters from the request - * - * @return array - */ - private static function extractDetailsFromRequest(): array - { - $partitionParams = [ - 'partition_by' => null, - 'partition_expr' => null, - 'subpartition_by' => null, - 'subpartition_expr' => null, - ]; - //Initialize details with values to "null" if not in request - $details = array_merge( - $partitionParams, - //Keep $_POST values, but only for keys that are in $partitionParams - array_intersect_key($_POST, $partitionParams) - ); - - $details['partition_count'] = self::extractPartitionCount('partition_count') ?: 0; - $details['subpartition_count'] = self::extractPartitionCount('subpartition_count') ?: 0; - - return $details; - } - - /** - * @param string $paramLabel Label searched in request - */ - private static function extractPartitionCount(string $paramLabel): int - { - if (isset($_POST[$paramLabel]) && is_numeric($_POST[$paramLabel])) { - // MySQL's limit is 8192, so do not allow more - // @see https://dev.mysql.com/doc/refman/en/partitioning-limitations.html - $count = min((int) $_POST[$paramLabel], 8192); - } else { - $count = 0; - } - - return $count; - } - - /** - * @param array $partitionDetails Details of partitions - * - * @return array - */ - private static function extractPartitions(array $partitionDetails): array - { - $partitionCount = $partitionDetails['partition_count']; - $subpartitionCount = $partitionDetails['subpartition_count']; - - // No partitions - if ($partitionCount <= 1) { - return $partitionDetails; - } - - // Has partitions - $partitions = $_POST['partitions'] ?? []; - - // Remove details of the additional partitions - // when number of partitions have been reduced - array_splice($partitions, $partitionCount); - - for ($i = 0; $i < $partitionCount; $i++) { - if (! isset($partitions[$i])) { // Newly added partition - $partitions[$i] = [ - 'name' => 'p' . $i, - 'value_type' => '', - 'value' => '', - 'engine' => '', - 'comment' => '', - 'data_directory' => '', - 'index_directory' => '', - 'max_rows' => '', - 'min_rows' => '', - 'tablespace' => '', - 'node_group' => '', - ]; - } - - $partition =& $partitions[$i]; - $partition['prefix'] = 'partitions[' . $i . ']'; - - // Changing from HASH/KEY to RANGE/LIST - if (! isset($partition['value_type'])) { - $partition['value_type'] = ''; - $partition['value'] = ''; - } - - if (! isset($partition['engine'])) { // When removing subpartitioning - $partition['engine'] = ''; - $partition['comment'] = ''; - $partition['data_directory'] = ''; - $partition['index_directory'] = ''; - $partition['max_rows'] = ''; - $partition['min_rows'] = ''; - $partition['tablespace'] = ''; - $partition['node_group'] = ''; - } - - // No subpartitions - if ($subpartitionCount < 2 || $partitionDetails['can_have_subpartitions'] !== true) { - unset($partition['subpartitions'], $partition['subpartition_count']); - continue; - } - - // Has subpartitions - $partition['subpartition_count'] = $subpartitionCount; - - if (! isset($partition['subpartitions'])) { - $partition['subpartitions'] = []; - } - - $subpartitions =& $partition['subpartitions']; - - // Remove details of the additional subpartitions - // when number of subpartitions have been reduced - array_splice($subpartitions, $subpartitionCount); - - for ($j = 0; $j < $subpartitionCount; $j++) { - if (! isset($subpartitions[$j])) { // Newly added subpartition - $subpartitions[$j] = [ - 'name' => $partition['name'] . '_s' . $j, - 'engine' => '', - 'comment' => '', - 'data_directory' => '', - 'index_directory' => '', - 'max_rows' => '', - 'min_rows' => '', - 'tablespace' => '', - 'node_group' => '', - ]; - } - - $subpartitions[$j]['prefix'] = 'partitions[' . $i . ']' - . '[subpartitions][' . $j . ']'; - } - } - - $partitionDetails['partitions'] = $partitions; - - return $partitionDetails; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportOds.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportOds.php deleted file mode 100644 index 14b67c4..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportOds.php +++ /dev/null @@ -1,325 +0,0 @@ -setText('OpenDocument Spreadsheet'); - $exportPluginProperties->setExtension('ods'); - $exportPluginProperties->setMimeType('application/vnd.oasis.opendocument.spreadsheet'); - $exportPluginProperties->setForceFile(true); - $exportPluginProperties->setOptionsText(__('Options')); - - // create the root group that will be the options field for - // $exportPluginProperties - // this will be shown as "Format specific options" - $exportSpecificOptions = new OptionsPropertyRootGroup('Format Specific Options'); - - // general options main group - $generalOptions = new OptionsPropertyMainGroup('general_opts'); - // create primary items and add them to the group - $leaf = new TextPropertyItem( - 'null', - __('Replace NULL with:') - ); - $generalOptions->addProperty($leaf); - $leaf = new BoolPropertyItem( - 'columns', - __('Put columns names in the first row') - ); - $generalOptions->addProperty($leaf); - $leaf = new HiddenPropertyItem('structure_or_data'); - $generalOptions->addProperty($leaf); - // add the main group to the root group - $exportSpecificOptions->addProperty($generalOptions); - - // set the options for the export plugin property item - $exportPluginProperties->setOptions($exportSpecificOptions); - - return $exportPluginProperties; - } - - /** - * Outputs export header - */ - public function exportHeader(): bool - { - $GLOBALS['ods_buffer'] .= '' - . '' - . '' - . '' - . '' - . '/' - . '' - . '/' - . '' - . '' - . '' - . '' - . ':' - . '' - . ':' - . '' - . ' ' - . '' - . '' - . '' - . '' - . '/' - . '' - . '/' - . '' - . ' ' - . '' - . ':' - . '' - . ' ' - . '' - . '' - . '' - . '' - . '' - . '' - . '' - . ''; - - return true; - } - - /** - * Outputs export footer - */ - public function exportFooter(): bool - { - $GLOBALS['ods_buffer'] .= ''; - - return $this->export->outputHandler( - OpenDocument::create( - 'application/vnd.oasis.opendocument.spreadsheet', - $GLOBALS['ods_buffer'] - ) - ); - } - - /** - * Outputs database header - * - * @param string $db Database name - * @param string $dbAlias Aliases of db - */ - public function exportDBHeader($db, $dbAlias = ''): bool - { - return true; - } - - /** - * Outputs database footer - * - * @param string $db Database name - */ - public function exportDBFooter($db): bool - { - return true; - } - - /** - * Outputs CREATE DATABASE statement - * - * @param string $db Database name - * @param string $exportType 'server', 'database', 'table' - * @param string $dbAlias Aliases of db - */ - public function exportDBCreate($db, $exportType, $dbAlias = ''): bool - { - return true; - } - - /** - * Outputs the content of a table in NHibernate format - * - * @param string $db database name - * @param string $table table name - * @param string $crlf the end of line sequence - * @param string $errorUrl the url to go back in case of error - * @param string $sqlQuery SQL query for obtaining data - * @param array $aliases Aliases of db/table/columns - */ - public function exportData( - $db, - $table, - $crlf, - $errorUrl, - $sqlQuery, - array $aliases = [] - ): bool { - global $what, $dbi; - - $db_alias = $db; - $table_alias = $table; - $this->initAlias($aliases, $db_alias, $table_alias); - // Gets the data from the database - $result = $dbi->query($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); - $fields_cnt = $result->numFields(); - /** @var FieldMetadata[] $fieldsMeta */ - $fieldsMeta = $dbi->getFieldsMeta($result); - - $GLOBALS['ods_buffer'] .= ''; - - // If required, get fields name at the first line - if (isset($GLOBALS[$what . '_columns'])) { - $GLOBALS['ods_buffer'] .= ''; - foreach ($fieldsMeta as $field) { - $col_as = $field->name; - if (! empty($aliases[$db]['tables'][$table]['columns'][$col_as])) { - $col_as = $aliases[$db]['tables'][$table]['columns'][$col_as]; - } - - $GLOBALS['ods_buffer'] .= '' - . '' - . htmlspecialchars( - stripslashes($col_as) - ) - . '' - . ''; - } - - $GLOBALS['ods_buffer'] .= ''; - } - - // Format the data - while ($row = $result->fetchRow()) { - $GLOBALS['ods_buffer'] .= ''; - for ($j = 0; $j < $fields_cnt; $j++) { - if ($fieldsMeta[$j]->isMappedTypeGeometry) { - // export GIS types as hex - $row[$j] = '0x' . bin2hex($row[$j]); - } - - if (! isset($row[$j])) { - $GLOBALS['ods_buffer'] .= '' - . '' - . htmlspecialchars($GLOBALS[$what . '_null']) - . '' - . ''; - } elseif ($fieldsMeta[$j]->isBinary && $fieldsMeta[$j]->isBlob) { - // ignore BLOB - $GLOBALS['ods_buffer'] .= '' - . '' - . ''; - } elseif ($fieldsMeta[$j]->isType(FieldMetadata::TYPE_DATE)) { - $GLOBALS['ods_buffer'] .= '' - . '' - . htmlspecialchars($row[$j]) - . '' - . ''; - } elseif ($fieldsMeta[$j]->isType(FieldMetadata::TYPE_TIME)) { - $GLOBALS['ods_buffer'] .= '' - . '' - . htmlspecialchars($row[$j]) - . '' - . ''; - } elseif ($fieldsMeta[$j]->isType(FieldMetadata::TYPE_DATETIME)) { - $GLOBALS['ods_buffer'] .= '' - . '' - . htmlspecialchars($row[$j]) - . '' - . ''; - } elseif ( - ($fieldsMeta[$j]->isNumeric - && ! $fieldsMeta[$j]->isMappedTypeTimestamp - && ! $fieldsMeta[$j]->isBlob) - || $fieldsMeta[$j]->isType(FieldMetadata::TYPE_REAL) - ) { - $GLOBALS['ods_buffer'] .= '' - . '' - . htmlspecialchars($row[$j]) - . '' - . ''; - } else { - $GLOBALS['ods_buffer'] .= '' - . '' - . htmlspecialchars($row[$j]) - . '' - . ''; - } - } - - $GLOBALS['ods_buffer'] .= ''; - } - - $GLOBALS['ods_buffer'] .= ''; - - return true; - } - - /** - * Outputs result raw query in ODS format - * - * @param string $errorUrl the url to go back in case of error - * @param string $sqlQuery the rawquery to output - * @param string $crlf the end of line sequence - */ - public function exportRawQuery(string $errorUrl, string $sqlQuery, string $crlf): bool - { - return $this->exportData('', '', $crlf, $errorUrl, $sqlQuery); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportSql.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportSql.php deleted file mode 100644 index 8f3e1bc..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportSql.php +++ /dev/null @@ -1,2848 +0,0 @@ -setText('SQL'); - $exportPluginProperties->setExtension('sql'); - $exportPluginProperties->setMimeType('text/x-sql'); - - if ($hideSql) { - return $exportPluginProperties; - } - - $exportPluginProperties->setOptionsText(__('Options')); - - // create the root group that will be the options field for - // $exportPluginProperties - // this will be shown as "Format specific options" - $exportSpecificOptions = new OptionsPropertyRootGroup('Format Specific Options'); - - // general options main group - $generalOptions = new OptionsPropertyMainGroup('general_opts'); - - // comments - $subgroup = new OptionsPropertySubgroup('include_comments'); - $leaf = new BoolPropertyItem( - 'include_comments', - __( - 'Display comments (includes info such as export timestamp, PHP version, and server version)' - ) - ); - $subgroup->setSubgroupHeader($leaf); - - $leaf = new TextPropertyItem( - 'header_comment', - __('Additional custom header comment (\n splits lines):') - ); - $subgroup->addProperty($leaf); - $leaf = new BoolPropertyItem( - 'dates', - __( - 'Include a timestamp of when databases were created, last updated, and last checked' - ) - ); - $subgroup->addProperty($leaf); - $relationParameters = $this->relation->getRelationParameters(); - if ($relationParameters->relationFeature !== null) { - $leaf = new BoolPropertyItem( - 'relation', - __('Display foreign key relationships') - ); - $subgroup->addProperty($leaf); - } - - if ($relationParameters->browserTransformationFeature !== null) { - $leaf = new BoolPropertyItem( - 'mime', - __('Display media types') - ); - $subgroup->addProperty($leaf); - } - - $generalOptions->addProperty($subgroup); - - // enclose in a transaction - $leaf = new BoolPropertyItem( - 'use_transaction', - __('Enclose export in a transaction') - ); - $leaf->setDoc( - [ - 'programs', - 'mysqldump', - 'option_mysqldump_single-transaction', - ] - ); - $generalOptions->addProperty($leaf); - - // disable foreign key checks - $leaf = new BoolPropertyItem( - 'disable_fk', - __('Disable foreign key checks') - ); - $leaf->setDoc( - [ - 'manual_MySQL_Database_Administration', - 'server-system-variables', - 'sysvar_foreign_key_checks', - ] - ); - $generalOptions->addProperty($leaf); - - // export views as tables - $leaf = new BoolPropertyItem( - 'views_as_tables', - __('Export views as tables') - ); - $generalOptions->addProperty($leaf); - - // export metadata - $leaf = new BoolPropertyItem( - 'metadata', - __('Export metadata') - ); - $generalOptions->addProperty($leaf); - - // compatibility maximization - $compats = $dbi->getCompatibilities(); - if (count($compats) > 0) { - $values = []; - foreach ($compats as $val) { - $values[$val] = $val; - } - - $leaf = new SelectPropertyItem( - 'compatibility', - __( - 'Database system or older MySQL server to maximize output compatibility with:' - ) - ); - $leaf->setValues($values); - $leaf->setDoc( - [ - 'manual_MySQL_Database_Administration', - 'Server_SQL_mode', - ] - ); - $generalOptions->addProperty($leaf); - - unset($values); - } - - // what to dump (structure/data/both) - $subgroup = new OptionsPropertySubgroup( - 'dump_table', - __('Dump table') - ); - $leaf = new RadioPropertyItem('structure_or_data'); - $leaf->setValues( - [ - 'structure' => __('structure'), - 'data' => __('data'), - 'structure_and_data' => __('structure and data'), - ] - ); - $subgroup->setSubgroupHeader($leaf); - $generalOptions->addProperty($subgroup); - - // add the main group to the root group - $exportSpecificOptions->addProperty($generalOptions); - - // structure options main group - if (! $hideStructure) { - $structureOptions = new OptionsPropertyMainGroup( - 'structure', - __('Object creation options') - ); - $structureOptions->setForce('data'); - - // begin SQL Statements - $subgroup = new OptionsPropertySubgroup(); - $leaf = new MessageOnlyPropertyItem( - 'add_statements', - __('Add statements:') - ); - $subgroup->setSubgroupHeader($leaf); - - // server export options - if ($plugin_param['export_type'] === 'server') { - $leaf = new BoolPropertyItem( - 'drop_database', - sprintf(__('Add %s statement'), 'DROP DATABASE IF EXISTS') - ); - $subgroup->addProperty($leaf); - } - - if ($plugin_param['export_type'] === 'database') { - $createClause = 'CREATE DATABASE / USE'; - $leaf = new BoolPropertyItem( - 'create_database', - sprintf(__('Add %s statement'), $createClause) - ); - $subgroup->addProperty($leaf); - } - - if ($plugin_param['export_type'] === 'table') { - $dropClause = $dbi->getTable($GLOBALS['db'], $GLOBALS['table'])->isView() - ? 'DROP VIEW' - : 'DROP TABLE'; - } else { - $dropClause = 'DROP TABLE / VIEW / PROCEDURE / FUNCTION / EVENT'; - } - - $dropClause .= ' / TRIGGER'; - - $leaf = new BoolPropertyItem( - 'drop_table', - sprintf(__('Add %s statement'), $dropClause) - ); - $subgroup->addProperty($leaf); - - $subgroupCreateTable = new OptionsPropertySubgroup(); - - // Add table structure option - $leaf = new BoolPropertyItem( - 'create_table', - sprintf(__('Add %s statement'), 'CREATE TABLE') - ); - $subgroupCreateTable->setSubgroupHeader($leaf); - - $leaf = new BoolPropertyItem( - 'if_not_exists', - 'IF NOT EXISTS ' . __( - '(less efficient as indexes will be generated during table creation)' - ) - ); - $subgroupCreateTable->addProperty($leaf); - - $leaf = new BoolPropertyItem( - 'auto_increment', - sprintf(__('%s value'), 'AUTO_INCREMENT') - ); - $subgroupCreateTable->addProperty($leaf); - - $subgroup->addProperty($subgroupCreateTable); - - // Add view option - $subgroupCreateView = new OptionsPropertySubgroup(); - $leaf = new BoolPropertyItem( - 'create_view', - sprintf(__('Add %s statement'), 'CREATE VIEW') - ); - $subgroupCreateView->setSubgroupHeader($leaf); - - $leaf = new BoolPropertyItem( - 'simple_view_export', - /* l10n: Allow simplifying exported view syntax to only "CREATE VIEW" */ - __('Use simple view export') - ); - $subgroupCreateView->addProperty($leaf); - - $leaf = new BoolPropertyItem( - 'view_current_user', - __('Exclude definition of current user') - ); - $subgroupCreateView->addProperty($leaf); - - $leaf = new BoolPropertyItem( - 'or_replace_view', - sprintf(__('%s view'), 'OR REPLACE') - ); - $subgroupCreateView->addProperty($leaf); - - $subgroup->addProperty($subgroupCreateView); - - $leaf = new BoolPropertyItem( - 'procedure_function', - sprintf( - __('Add %s statement'), - 'CREATE PROCEDURE / FUNCTION / EVENT' - ) - ); - $subgroup->addProperty($leaf); - - // Add triggers option - $leaf = new BoolPropertyItem( - 'create_trigger', - sprintf(__('Add %s statement'), 'CREATE TRIGGER') - ); - $subgroup->addProperty($leaf); - - $structureOptions->addProperty($subgroup); - - $leaf = new BoolPropertyItem( - 'backquotes', - __( - 'Enclose table and column names with backquotes ' - . '(Protects column and table names formed with' - . ' special characters or keywords)' - ) - ); - - $structureOptions->addProperty($leaf); - - // add the main group to the root group - $exportSpecificOptions->addProperty($structureOptions); - } - - // begin Data options - $dataOptions = new OptionsPropertyMainGroup( - 'data', - __('Data creation options') - ); - $dataOptions->setForce('structure'); - $leaf = new BoolPropertyItem( - 'truncate', - __('Truncate table before insert') - ); - $dataOptions->addProperty($leaf); - - // begin SQL Statements - $subgroup = new OptionsPropertySubgroup(); - $leaf = new MessageOnlyPropertyItem( - __('Instead of INSERT statements, use:') - ); - $subgroup->setSubgroupHeader($leaf); - - $leaf = new BoolPropertyItem( - 'delayed', - __('INSERT DELAYED statements') - ); - $leaf->setDoc( - [ - 'manual_MySQL_Database_Administration', - 'insert_delayed', - ] - ); - $subgroup->addProperty($leaf); - - $leaf = new BoolPropertyItem( - 'ignore', - __('INSERT IGNORE statements') - ); - $leaf->setDoc( - [ - 'manual_MySQL_Database_Administration', - 'insert', - ] - ); - $subgroup->addProperty($leaf); - $dataOptions->addProperty($subgroup); - - // Function to use when dumping dat - $leaf = new SelectPropertyItem( - 'type', - __('Function to use when dumping data:') - ); - $leaf->setValues( - [ - 'INSERT' => 'INSERT', - 'UPDATE' => 'UPDATE', - 'REPLACE' => 'REPLACE', - ] - ); - $dataOptions->addProperty($leaf); - - /* Syntax to use when inserting data */ - $subgroup = new OptionsPropertySubgroup(); - $leaf = new MessageOnlyPropertyItem( - null, - __('Syntax to use when inserting data:') - ); - $subgroup->setSubgroupHeader($leaf); - $leaf = new RadioPropertyItem( - 'insert_syntax', - __('INSERT IGNORE statements') - ); - $leaf->setValues( - [ - 'complete' => __( - 'include column names in every INSERT statement' - . '
                  Example: INSERT INTO' - . ' tbl_name (col_A,col_B,col_C) VALUES (1,2,3)' - ), - 'extended' => __( - 'insert multiple rows in every INSERT statement' - . '
                  Example: INSERT INTO' - . ' tbl_name VALUES (1,2,3), (4,5,6), (7,8,9)' - ), - 'both' => __( - 'both of the above
                  Example:' - . ' INSERT INTO tbl_name (col_A,col_B,col_C) VALUES' - . ' (1,2,3), (4,5,6), (7,8,9)' - ), - 'none' => __( - 'neither of the above
                  Example:' - . ' INSERT INTO tbl_name VALUES (1,2,3)' - ), - ] - ); - $subgroup->addProperty($leaf); - $dataOptions->addProperty($subgroup); - - // Max length of query - $leaf = new NumberPropertyItem( - 'max_query_size', - __('Maximal length of created query') - ); - $dataOptions->addProperty($leaf); - - // Dump binary columns in hexadecimal - $leaf = new BoolPropertyItem( - 'hex_for_binary', - __( - 'Dump binary columns in hexadecimal notation (for example, "abc" becomes 0x616263)' - ) - ); - $dataOptions->addProperty($leaf); - - // Dump time in UTC - $leaf = new BoolPropertyItem( - 'utc_time', - __( - 'Dump TIMESTAMP columns in UTC (enables TIMESTAMP columns' - . ' to be dumped and reloaded between servers in different' - . ' time zones)' - ) - ); - $dataOptions->addProperty($leaf); - - // add the main group to the root group - $exportSpecificOptions->addProperty($dataOptions); - - // set the options for the export plugin property item - $exportPluginProperties->setOptions($exportSpecificOptions); - - return $exportPluginProperties; - } - - /** - * Generates SQL for routines export - * - * @param string $db Database - * @param array $aliases Aliases of db/table/columns - * @param string $type Type of exported routine - * @param string $name Verbose name of exported routine - * @param array $routines List of routines to export - * @param string $delimiter Delimiter to use in SQL - * - * @return string SQL query - */ - protected function exportRoutineSQL( - $db, - array $aliases, - $type, - $name, - array $routines, - $delimiter - ) { - global $crlf, $cfg, $dbi; - - $text = $this->exportComment() - . $this->exportComment($name) - . $this->exportComment(); - - $usedAlias = false; - $procQuery = ''; - - foreach ($routines as $routine) { - if (! empty($GLOBALS['sql_drop_table'])) { - $procQuery .= 'DROP ' . $type . ' IF EXISTS ' - . Util::backquote($routine) - . $delimiter . $crlf; - } - - $createQuery = $this->replaceWithAliases( - $dbi->getDefinition($db, $type, $routine), - $aliases, - $db, - '', - $flag - ); - if (! empty($createQuery) && $cfg['Export']['remove_definer_from_definitions']) { - // Remove definer clause from routine definitions - $parser = new Parser($createQuery); - $statement = $parser->statements[0]; - $statement->options->remove('DEFINER'); - $createQuery = $statement->build(); - } - - // One warning per database - if ($flag) { - $usedAlias = true; - } - - $procQuery .= $createQuery . $delimiter . $crlf . $crlf; - } - - if ($usedAlias) { - $text .= $this->exportComment( - __('It appears your database uses routines;') - ) - . $this->exportComment( - __('alias export may not work reliably in all cases.') - ) - . $this->exportComment(); - } - - $text .= $procQuery; - - return $text; - } - - /** - * Exports routines (procedures and functions) - * - * @param string $db Database - * @param array $aliases Aliases of db/table/columns - */ - public function exportRoutines($db, array $aliases = []): bool - { - global $crlf, $dbi; - - $dbAlias = $db; - $this->initAlias($aliases, $dbAlias); - - $text = ''; - $delimiter = '$$'; - - $procedureNames = $dbi->getProceduresOrFunctions($db, 'PROCEDURE'); - $functionNames = $dbi->getProceduresOrFunctions($db, 'FUNCTION'); - - if ($procedureNames || $functionNames) { - $text .= $crlf - . 'DELIMITER ' . $delimiter . $crlf; - - if ($procedureNames) { - $text .= $this->exportRoutineSQL( - $db, - $aliases, - 'PROCEDURE', - __('Procedures'), - $procedureNames, - $delimiter - ); - } - - if ($functionNames) { - $text .= $this->exportRoutineSQL( - $db, - $aliases, - 'FUNCTION', - __('Functions'), - $functionNames, - $delimiter - ); - } - - $text .= 'DELIMITER ;' . $crlf; - } - - if (! empty($text)) { - return $this->export->outputHandler($text); - } - - return false; - } - - /** - * Possibly outputs comment - * - * @param string $text Text of comment - * - * @return string The formatted comment - */ - private function exportComment($text = '') - { - if (isset($GLOBALS['sql_include_comments']) && $GLOBALS['sql_include_comments']) { - // see https://dev.mysql.com/doc/refman/5.0/en/ansi-diff-comments.html - if (empty($text)) { - return '--' . $GLOBALS['crlf']; - } - - $lines = preg_split("/\\r\\n|\\r|\\n/", $text); - if ($lines === false) { - return '--' . $GLOBALS['crlf']; - } - - $result = []; - foreach ($lines as $line) { - $result[] = '-- ' . $line . $GLOBALS['crlf']; - } - - return implode('', $result); - } - - return ''; - } - - /** - * Possibly outputs CRLF - * - * @return string crlf or nothing - */ - private function possibleCRLF() - { - if (isset($GLOBALS['sql_include_comments']) && $GLOBALS['sql_include_comments']) { - return $GLOBALS['crlf']; - } - - return ''; - } - - /** - * Outputs export footer - */ - public function exportFooter(): bool - { - global $crlf, $dbi; - - $foot = ''; - - if (isset($GLOBALS['sql_disable_fk'])) { - $foot .= 'SET FOREIGN_KEY_CHECKS=1;' . $crlf; - } - - if (isset($GLOBALS['sql_use_transaction'])) { - $foot .= 'COMMIT;' . $crlf; - } - - // restore connection settings - if ($this->sentCharset) { - $foot .= $crlf - . '/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;' - . $crlf - . '/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;' - . $crlf - . '/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;' - . $crlf; - $this->sentCharset = false; - } - - /* Restore timezone */ - if (isset($GLOBALS['sql_utc_time']) && $GLOBALS['sql_utc_time']) { - $dbi->query('SET time_zone = "' . $GLOBALS['old_tz'] . '"'); - } - - return $this->export->outputHandler($foot); - } - - /** - * Outputs export header. It is the first method to be called, so all - * the required variables are initialized here. - */ - public function exportHeader(): bool - { - global $crlf, $cfg, $dbi; - - if (isset($GLOBALS['sql_compatibility'])) { - $tmpCompat = $GLOBALS['sql_compatibility']; - if ($tmpCompat === 'NONE') { - $tmpCompat = ''; - } - - $dbi->tryQuery('SET SQL_MODE="' . $tmpCompat . '"'); - unset($tmpCompat); - } - - $head = $this->exportComment('phpMyAdmin SQL Dump') - . $this->exportComment('version ' . Version::VERSION) - . $this->exportComment('https://www.phpmyadmin.net/') - . $this->exportComment(); - $hostString = __('Host:') . ' ' . $cfg['Server']['host']; - if (! empty($cfg['Server']['port'])) { - $hostString .= ':' . $cfg['Server']['port']; - } - - $head .= $this->exportComment($hostString); - $head .= $this->exportComment( - __('Generation Time:') . ' ' - . Util::localisedDate() - ) - . $this->exportComment( - __('Server version:') . ' ' . $dbi->getVersionString() - ) - . $this->exportComment(__('PHP Version:') . ' ' . PHP_VERSION) - . $this->possibleCRLF(); - - if (isset($GLOBALS['sql_header_comment']) && ! empty($GLOBALS['sql_header_comment'])) { - // '\n' is not a newline (like "\n" would be), it's the characters - // backslash and n, as explained on the export interface - $lines = explode('\n', $GLOBALS['sql_header_comment']); - $head .= $this->exportComment(); - foreach ($lines as $oneLine) { - $head .= $this->exportComment($oneLine); - } - - $head .= $this->exportComment(); - } - - if (isset($GLOBALS['sql_disable_fk'])) { - $head .= 'SET FOREIGN_KEY_CHECKS=0;' . $crlf; - } - - // We want exported AUTO_INCREMENT columns to have still same value, - // do this only for recent MySQL exports - if (! isset($GLOBALS['sql_compatibility']) || $GLOBALS['sql_compatibility'] === 'NONE') { - $head .= 'SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";' . $crlf; - } - - if (isset($GLOBALS['sql_use_transaction'])) { - $head .= 'START TRANSACTION;' . $crlf; - } - - /* Change timezone if we should export timestamps in UTC */ - if (isset($GLOBALS['sql_utc_time']) && $GLOBALS['sql_utc_time']) { - $head .= 'SET time_zone = "+00:00";' . $crlf; - $GLOBALS['old_tz'] = $dbi - ->fetchValue('SELECT @@session.time_zone'); - $dbi->query('SET time_zone = "+00:00"'); - } - - $head .= $this->possibleCRLF(); - - if (! empty($GLOBALS['asfile'])) { - // we are saving as file, therefore we provide charset information - // so that a utility like the mysql client can interpret - // the file correctly - if (isset($GLOBALS['charset'], Charsets::$mysqlCharsetMap[$GLOBALS['charset']])) { - // we got a charset from the export dialog - $setNames = Charsets::$mysqlCharsetMap[$GLOBALS['charset']]; - } else { - // by default we use the connection charset - $setNames = Charsets::$mysqlCharsetMap['utf-8']; - } - - if ($setNames === 'utf8' && $dbi->getVersion() > 50503) { - $setNames = 'utf8mb4'; - } - - $head .= $crlf - . '/*!40101 SET @OLD_CHARACTER_SET_CLIENT=' - . '@@CHARACTER_SET_CLIENT */;' . $crlf - . '/*!40101 SET @OLD_CHARACTER_SET_RESULTS=' - . '@@CHARACTER_SET_RESULTS */;' . $crlf - . '/*!40101 SET @OLD_COLLATION_CONNECTION=' - . '@@COLLATION_CONNECTION */;' . $crlf - . '/*!40101 SET NAMES ' . $setNames . ' */;' . $crlf . $crlf; - $this->sentCharset = true; - } - - return $this->export->outputHandler($head); - } - - /** - * Outputs CREATE DATABASE statement - * - * @param string $db Database name - * @param string $exportType 'server', 'database', 'table' - * @param string $dbAlias Aliases of db - */ - public function exportDBCreate($db, $exportType, $dbAlias = ''): bool - { - global $crlf, $dbi; - - if (empty($dbAlias)) { - $dbAlias = $db; - } - - if (isset($GLOBALS['sql_compatibility'])) { - $compat = $GLOBALS['sql_compatibility']; - } else { - $compat = 'NONE'; - } - - if (isset($GLOBALS['sql_drop_database'])) { - if ( - ! $this->export->outputHandler( - 'DROP DATABASE IF EXISTS ' - . Util::backquoteCompat( - $dbAlias, - $compat, - isset($GLOBALS['sql_backquotes']) - ) - . ';' . $crlf - ) - ) { - return false; - } - } - - if ($exportType === 'database' && ! isset($GLOBALS['sql_create_database'])) { - return true; - } - - $createQuery = 'CREATE DATABASE IF NOT EXISTS ' - . Util::backquoteCompat($dbAlias, $compat, isset($GLOBALS['sql_backquotes'])); - $collation = $dbi->getDbCollation($db); - if (mb_strpos($collation, '_')) { - $createQuery .= ' DEFAULT CHARACTER SET ' - . mb_substr( - $collation, - 0, - (int) mb_strpos($collation, '_') - ) - . ' COLLATE ' . $collation; - } else { - $createQuery .= ' DEFAULT CHARACTER SET ' . $collation; - } - - $createQuery .= ';' . $crlf; - if (! $this->export->outputHandler($createQuery)) { - return false; - } - - return $this->exportUseStatement($dbAlias, $compat); - } - - /** - * Outputs USE statement - * - * @param string $db db to use - * @param string $compat sql compatibility - */ - private function exportUseStatement($db, $compat): bool - { - global $crlf; - - if (isset($GLOBALS['sql_compatibility']) && $GLOBALS['sql_compatibility'] === 'NONE') { - $result = $this->export->outputHandler( - 'USE ' - . Util::backquoteCompat( - $db, - $compat, - isset($GLOBALS['sql_backquotes']) - ) - . ';' . $crlf - ); - } else { - $result = $this->export->outputHandler('USE ' . $db . ';' . $crlf); - } - - return $result; - } - - /** - * Outputs database header - * - * @param string $db Database name - * @param string $dbAlias Alias of db - */ - public function exportDBHeader($db, $dbAlias = ''): bool - { - if (empty($dbAlias)) { - $dbAlias = $db; - } - - if (isset($GLOBALS['sql_compatibility'])) { - $compat = $GLOBALS['sql_compatibility']; - } else { - $compat = 'NONE'; - } - - $head = $this->exportComment() - . $this->exportComment( - __('Database:') . ' ' - . Util::backquoteCompat( - $dbAlias, - $compat, - isset($GLOBALS['sql_backquotes']) - ) - ) - . $this->exportComment(); - - return $this->export->outputHandler($head); - } - - /** - * Outputs database footer - * - * @param string $db Database name - */ - public function exportDBFooter($db): bool - { - global $crlf; - - $result = true; - - //add indexes to the sql dump file - if (isset($GLOBALS['sql_indexes'])) { - $result = $this->export->outputHandler($GLOBALS['sql_indexes']); - unset($GLOBALS['sql_indexes']); - } - - //add auto increments to the sql dump file - if (isset($GLOBALS['sql_auto_increments'])) { - $result = $this->export->outputHandler($GLOBALS['sql_auto_increments']); - unset($GLOBALS['sql_auto_increments']); - } - - //add constraints to the sql dump file - if (isset($GLOBALS['sql_constraints'])) { - $result = $this->export->outputHandler($GLOBALS['sql_constraints']); - unset($GLOBALS['sql_constraints']); - } - - return $result; - } - - /** - * Exports events - * - * @param string $db Database - */ - public function exportEvents($db): bool - { - global $crlf, $cfg, $dbi; - - $text = ''; - $delimiter = '$$'; - - $eventNames = $dbi->fetchResult( - 'SELECT EVENT_NAME FROM information_schema.EVENTS WHERE' - . " EVENT_SCHEMA= '" . $dbi->escapeString($db) - . "';" - ); - - if ($eventNames) { - $text .= $crlf - . 'DELIMITER ' . $delimiter . $crlf; - - $text .= $this->exportComment() - . $this->exportComment(__('Events')) - . $this->exportComment(); - - foreach ($eventNames as $eventName) { - if (! empty($GLOBALS['sql_drop_table'])) { - $text .= 'DROP EVENT IF EXISTS ' - . Util::backquote($eventName) - . $delimiter . $crlf; - } - - $eventDef = $dbi->getDefinition($db, 'EVENT', $eventName); - if (! empty($eventDef) && $cfg['Export']['remove_definer_from_definitions']) { - // remove definer clause from the event definition - $parser = new Parser($eventDef); - $statement = $parser->statements[0]; - $statement->options->remove('DEFINER'); - $eventDef = $statement->build(); - } - - $text .= $eventDef . $delimiter . $crlf . $crlf; - } - - $text .= 'DELIMITER ;' . $crlf; - } - - if (! empty($text)) { - return $this->export->outputHandler($text); - } - - return false; - } - - /** - * Exports metadata from Configuration Storage - * - * @param string $db database being exported - * @param string|array $tables table(s) being exported - * @param array $metadataTypes types of metadata to export - */ - public function exportMetadata( - $db, - $tables, - array $metadataTypes - ): bool { - $relationParameters = $this->relation->getRelationParameters(); - if ($relationParameters->db === null) { - return true; - } - - $comment = $this->possibleCRLF() - . $this->possibleCRLF() - . $this->exportComment() - . $this->exportComment(__('Metadata')) - . $this->exportComment(); - if (! $this->export->outputHandler($comment)) { - return false; - } - - if (! $this->exportUseStatement((string) $relationParameters->db, $GLOBALS['sql_compatibility'])) { - return false; - } - - $r = 1; - if (is_array($tables)) { - // export metadata for each table - foreach ($tables as $table) { - $r &= (int) $this->exportConfigurationMetadata($db, $table, $metadataTypes); - } - - // export metadata for the database - $r &= (int) $this->exportConfigurationMetadata($db, null, $metadataTypes); - } else { - // export metadata for single table - $r &= (int) $this->exportConfigurationMetadata($db, $tables, $metadataTypes); - } - - return (bool) $r; - } - - /** - * Exports metadata from Configuration Storage - * - * @param string $db database being exported - * @param string|null $table table being exported - * @param array $metadataTypes types of metadata to export - */ - private function exportConfigurationMetadata( - $db, - $table, - array $metadataTypes - ): bool { - global $dbi; - - $relationParameters = $this->relation->getRelationParameters(); - $relationParams = $relationParameters->toArray(); - - if (isset($table)) { - $types = [ - 'column_info' => 'db_name', - 'table_uiprefs' => 'db_name', - 'tracking' => 'db_name', - ]; - } else { - $types = [ - 'bookmark' => 'dbase', - 'relation' => 'master_db', - 'pdf_pages' => 'db_name', - 'savedsearches' => 'db_name', - 'central_columns' => 'db_name', - ]; - } - - $aliases = []; - - $comment = $this->possibleCRLF() - . $this->exportComment(); - - if (isset($table)) { - $comment .= $this->exportComment( - sprintf( - __('Metadata for table %s'), - $table - ) - ); - } else { - $comment .= $this->exportComment( - sprintf( - __('Metadata for database %s'), - $db - ) - ); - } - - $comment .= $this->exportComment(); - - if (! $this->export->outputHandler($comment)) { - return false; - } - - foreach ($types as $type => $dbNameColumn) { - if (! in_array($type, $metadataTypes) || ! isset($relationParams[$type])) { - continue; - } - - // special case, designer pages and their coordinates - if ($type === 'pdf_pages') { - if ($relationParameters->pdfFeature === null) { - continue; - } - - $sqlQuery = 'SELECT `page_nr`, `page_descr` FROM ' - . Util::backquote($relationParameters->pdfFeature->database) - . '.' . Util::backquote($relationParameters->pdfFeature->pdfPages) - . ' WHERE `db_name` = \'' . $dbi->escapeString($db) . "'"; - - $result = $dbi->fetchResult($sqlQuery, 'page_nr', 'page_descr'); - - foreach (array_keys($result) as $page) { - // insert row for pdf_page - $sqlQueryRow = 'SELECT `db_name`, `page_descr` FROM ' - . Util::backquote($relationParameters->pdfFeature->database) - . '.' . Util::backquote($relationParameters->pdfFeature->pdfPages) - . ' WHERE `db_name` = \'' . $dbi->escapeString($db) . "'" - . " AND `page_nr` = '" . intval($page) . "'"; - - if ( - ! $this->exportData( - $relationParameters->pdfFeature->database->getName(), - $relationParameters->pdfFeature->pdfPages->getName(), - $GLOBALS['crlf'], - '', - $sqlQueryRow, - $aliases - ) - ) { - return false; - } - - $lastPage = $GLOBALS['crlf'] - . 'SET @LAST_PAGE = LAST_INSERT_ID();' - . $GLOBALS['crlf']; - if (! $this->export->outputHandler($lastPage)) { - return false; - } - - $sqlQueryCoords = 'SELECT `db_name`, `table_name`, ' - . "'@LAST_PAGE' AS `pdf_page_number`, `x`, `y` FROM " - . Util::backquote($relationParameters->pdfFeature->database) - . '.' . Util::backquote($relationParameters->pdfFeature->tableCoords) - . " WHERE `pdf_page_number` = '" . $page . "'"; - - $GLOBALS['exporting_metadata'] = true; - if ( - ! $this->exportData( - $relationParameters->pdfFeature->database->getName(), - $relationParameters->pdfFeature->tableCoords->getName(), - $GLOBALS['crlf'], - '', - $sqlQueryCoords, - $aliases - ) - ) { - $GLOBALS['exporting_metadata'] = false; - - return false; - } - - $GLOBALS['exporting_metadata'] = false; - } - - continue; - } - - // remove auto_incrementing id field for some tables - if ($type === 'bookmark') { - $sqlQuery = 'SELECT `dbase`, `user`, `label`, `query` FROM '; - } elseif ($type === 'column_info') { - $sqlQuery = 'SELECT `db_name`, `table_name`, `column_name`,' - . ' `comment`, `mimetype`, `transformation`,' - . ' `transformation_options`, `input_transformation`,' - . ' `input_transformation_options` FROM'; - } elseif ($type === 'savedsearches') { - $sqlQuery = 'SELECT `username`, `db_name`, `search_name`, `search_data` FROM'; - } else { - $sqlQuery = 'SELECT * FROM '; - } - - $sqlQuery .= Util::backquote($relationParameters->db) - . '.' . Util::backquote((string) $relationParams[$type]) - . ' WHERE ' . Util::backquote($dbNameColumn) - . " = '" . $dbi->escapeString($db) . "'"; - if (isset($table)) { - $sqlQuery .= " AND `table_name` = '" - . $dbi->escapeString($table) . "'"; - } - - if ( - ! $this->exportData( - (string) $relationParameters->db, - (string) $relationParams[$type], - $GLOBALS['crlf'], - '', - $sqlQuery, - $aliases - ) - ) { - return false; - } - } - - return true; - } - - /** - * Returns a stand-in CREATE definition to resolve view dependencies - * - * @param string $db the database name - * @param string $view the view name - * @param string $crlf the end of line sequence - * @param array $aliases Aliases of db/table/columns - * - * @return string resulting definition - */ - public function getTableDefStandIn($db, $view, $crlf, $aliases = []) - { - global $dbi; - - $dbAlias = $db; - $viewAlias = $view; - $this->initAlias($aliases, $dbAlias, $viewAlias); - $createQuery = ''; - if (! empty($GLOBALS['sql_drop_table'])) { - $createQuery .= 'DROP VIEW IF EXISTS ' - . Util::backquote($viewAlias) - . ';' . $crlf; - } - - $createQuery .= 'CREATE TABLE '; - - if (isset($GLOBALS['sql_if_not_exists']) && $GLOBALS['sql_if_not_exists']) { - $createQuery .= 'IF NOT EXISTS '; - } - - $createQuery .= Util::backquote($viewAlias) . ' (' . $crlf; - $tmp = []; - $columns = $dbi->getColumnsFull($db, $view); - foreach ($columns as $columnName => $definition) { - $colAlias = $columnName; - if (! empty($aliases[$db]['tables'][$view]['columns'][$colAlias])) { - $colAlias = $aliases[$db]['tables'][$view]['columns'][$colAlias]; - } - - $tmp[] = Util::backquote($colAlias) . ' ' . - $definition['Type'] . $crlf; - } - - return $createQuery . implode(',', $tmp) . ');' . $crlf; - } - - /** - * Returns CREATE definition that matches $view's structure - * - * @param string $db the database name - * @param string $view the view name - * @param string $crlf the end of line sequence - * @param bool $addSemicolon whether to add semicolon and end-of-line at - * the end - * @param array $aliases Aliases of db/table/columns - * - * @return string resulting schema - */ - private function getTableDefForView( - $db, - $view, - $crlf, - $addSemicolon = true, - array $aliases = [] - ) { - global $dbi; - - $dbAlias = $db; - $viewAlias = $view; - $this->initAlias($aliases, $dbAlias, $viewAlias); - $createQuery = 'CREATE TABLE'; - if (isset($GLOBALS['sql_if_not_exists'])) { - $createQuery .= ' IF NOT EXISTS '; - } - - $createQuery .= Util::backquote($viewAlias) . '(' . $crlf; - - $columns = $dbi->getColumns($db, $view, true); - - $firstCol = true; - foreach ($columns as $column) { - $colAlias = $column['Field']; - if (! empty($aliases[$db]['tables'][$view]['columns'][$colAlias])) { - $colAlias = $aliases[$db]['tables'][$view]['columns'][$colAlias]; - } - - $extractedColumnspec = Util::extractColumnSpec($column['Type']); - - if (! $firstCol) { - $createQuery .= ',' . $crlf; - } - - $createQuery .= ' ' . Util::backquote($colAlias); - $createQuery .= ' ' . $column['Type']; - if ($extractedColumnspec['can_contain_collation'] && ! empty($column['Collation'])) { - $createQuery .= ' COLLATE ' . $column['Collation']; - } - - if ($column['Null'] === 'NO') { - $createQuery .= ' NOT NULL'; - } - - if (isset($column['Default'])) { - $createQuery .= " DEFAULT '" - . $dbi->escapeString($column['Default']) . "'"; - } else { - if ($column['Null'] === 'YES') { - $createQuery .= ' DEFAULT NULL'; - } - } - - if (! empty($column['Comment'])) { - $createQuery .= " COMMENT '" - . $dbi->escapeString($column['Comment']) . "'"; - } - - $firstCol = false; - } - - $createQuery .= $crlf . ')' . ($addSemicolon ? ';' : '') . $crlf; - - if (isset($GLOBALS['sql_compatibility'])) { - $compat = $GLOBALS['sql_compatibility']; - } else { - $compat = 'NONE'; - } - - if ($compat === 'MSSQL') { - $createQuery = $this->makeCreateTableMSSQLCompatible($createQuery); - } - - return $createQuery; - } - - /** - * Returns $table's CREATE definition - * - * @param string $db the database name - * @param string $table the table name - * @param string $crlf the end of line sequence - * @param string $errorUrl the url to go back in case - * of error - * @param bool $showDates whether to include creation/ - * update/check dates - * @param bool $addSemicolon whether to add semicolon and - * end-of-line at the end - * @param bool $view whether we're handling a view - * @param bool $updateIndexesIncrements whether we need to update - * two global variables - * @param array $aliases Aliases of db/table/columns - * - * @return string resulting schema - */ - public function getTableDef( - $db, - $table, - $crlf, - $errorUrl, - $showDates = false, - $addSemicolon = true, - $view = false, - $updateIndexesIncrements = true, - array $aliases = [] - ) { - global $sql_drop_table, $sql_backquotes, $sql_constraints, - $sql_constraints_query, $sql_indexes, $sql_indexes_query, - $sql_auto_increments, $sql_drop_foreign_keys, $dbi, $cfg; - - $dbAlias = $db; - $tableAlias = $table; - $this->initAlias($aliases, $dbAlias, $tableAlias); - - $schemaCreate = ''; - $newCrlf = $crlf; - - if (isset($GLOBALS['sql_compatibility'])) { - $compat = $GLOBALS['sql_compatibility']; - } else { - $compat = 'NONE'; - } - - $result = $dbi->tryQuery( - 'SHOW TABLE STATUS FROM ' . Util::backquote($db) - . ' WHERE Name = \'' . $dbi->escapeString((string) $table) . '\'' - ); - if ($result != false) { - if ($result->numRows() > 0) { - $tmpres = $result->fetchAssoc(); - - if ($showDates && isset($tmpres['Create_time']) && ! empty($tmpres['Create_time'])) { - $schemaCreate .= $this->exportComment( - __('Creation:') . ' ' - . Util::localisedDate( - strtotime($tmpres['Create_time']) - ) - ); - $newCrlf = $this->exportComment() . $crlf; - } - - if ($showDates && isset($tmpres['Update_time']) && ! empty($tmpres['Update_time'])) { - $schemaCreate .= $this->exportComment( - __('Last update:') . ' ' - . Util::localisedDate( - strtotime($tmpres['Update_time']) - ) - ); - $newCrlf = $this->exportComment() . $crlf; - } - - if ($showDates && isset($tmpres['Check_time']) && ! empty($tmpres['Check_time'])) { - $schemaCreate .= $this->exportComment( - __('Last check:') . ' ' - . Util::localisedDate( - strtotime($tmpres['Check_time']) - ) - ); - $newCrlf = $this->exportComment() . $crlf; - } - } - } - - $schemaCreate .= $newCrlf; - - if (! empty($sql_drop_table) && $dbi->getTable($db, $table)->isView()) { - $schemaCreate .= 'DROP VIEW IF EXISTS ' - . Util::backquoteCompat($tableAlias, 'NONE', $sql_backquotes) . ';' - . $crlf; - } - - // no need to generate a DROP VIEW here, it was done earlier - if (! empty($sql_drop_table) && ! $dbi->getTable($db, $table)->isView()) { - $schemaCreate .= 'DROP TABLE IF EXISTS ' - . Util::backquoteCompat($tableAlias, 'NONE', $sql_backquotes) . ';' - . $crlf; - } - - // Complete table dump, - // Whether to quote table and column names or not - if ($sql_backquotes) { - $dbi->query('SET SQL_QUOTE_SHOW_CREATE = 1'); - } else { - $dbi->query('SET SQL_QUOTE_SHOW_CREATE = 0'); - } - - // I don't see the reason why this unbuffered query could cause problems, - // because SHOW CREATE TABLE returns only one row, and we free the - // results below. Nonetheless, we got 2 user reports about this - // (see bug 1562533) so I removed the unbuffered mode. - // $result = $dbi->query('SHOW CREATE TABLE ' . backquote($db) - // . '.' . backquote($table), null, DatabaseInterface::QUERY_UNBUFFERED); - // - // Note: SHOW CREATE TABLE, at least in MySQL 5.1.23, does not - // produce a displayable result for the default value of a BIT - // column, nor does the mysqldump command. See MySQL bug 35796 - $dbi->tryQuery('USE ' . Util::backquote($db)); - $result = $dbi->tryQuery( - 'SHOW CREATE TABLE ' . Util::backquote($db) . '.' - . Util::backquote($table) - ); - // an error can happen, for example the table is crashed - $tmpError = $dbi->getError(); - if ($tmpError) { - $message = sprintf(__('Error reading structure for table %s:'), $db . '.' . $table); - $message .= ' ' . $tmpError; - if (! defined('TESTSUITE')) { - trigger_error($message, E_USER_ERROR); - } - - return $this->exportComment($message); - } - - // Old mode is stored so it can be restored once exporting is done. - $oldMode = Context::$MODE; - - $warning = ''; - - $row = null; - if ($result !== false) { - $row = $result->fetchRow(); - } - - if ($row) { - $createQuery = $row[1]; - unset($row); - - // Convert end of line chars to one that we want (note that MySQL - // doesn't return query it will accept in all cases) - if (mb_strpos($createQuery, "(\r\n ")) { - $createQuery = str_replace("\r\n", $crlf, $createQuery); - } elseif (mb_strpos($createQuery, "(\n ")) { - $createQuery = str_replace("\n", $crlf, $createQuery); - } elseif (mb_strpos($createQuery, "(\r ")) { - $createQuery = str_replace("\r", $crlf, $createQuery); - } - - /* - * Drop database name from VIEW creation. - * - * This is a bit tricky, but we need to issue SHOW CREATE TABLE with - * database name, but we don't want name to show up in CREATE VIEW - * statement. - */ - if ($view) { - //TODO: use parser - $createQuery = preg_replace( - '/' . preg_quote(Util::backquote($db), '/') . '\./', - '', - $createQuery - ); - $parser = new Parser($createQuery); - /** - * `CREATE TABLE` statement. - * - * @var CreateStatement - */ - $statement = $parser->statements[0]; - - // exclude definition of current user - if ($cfg['Export']['remove_definer_from_definitions'] || isset($GLOBALS['sql_view_current_user'])) { - $statement->options->remove('DEFINER'); - } - - if (isset($GLOBALS['sql_simple_view_export'])) { - $statement->options->remove('SQL SECURITY'); - $statement->options->remove('INVOKER'); - $statement->options->remove('ALGORITHM'); - $statement->options->remove('DEFINER'); - } - - $createQuery = $statement->build(); - - // whether to replace existing view or not - if (isset($GLOBALS['sql_or_replace_view'])) { - $createQuery = preg_replace('/^CREATE/', 'CREATE OR REPLACE', $createQuery); - } - } - - // Substitute aliases in `CREATE` query. - $createQuery = $this->replaceWithAliases($createQuery, $aliases, $db, $table, $flag); - - // One warning per view. - if ($flag && $view) { - $warning = $this->exportComment() - . $this->exportComment( - __('It appears your database uses views;') - ) - . $this->exportComment( - __('alias export may not work reliably in all cases.') - ) - . $this->exportComment(); - } - - // Adding IF NOT EXISTS, if required. - if (isset($GLOBALS['sql_if_not_exists'])) { - $createQuery = (string) preg_replace('/^CREATE TABLE/', 'CREATE TABLE IF NOT EXISTS', $createQuery); - } - - // Making the query MSSQL compatible. - if ($compat === 'MSSQL') { - $createQuery = $this->makeCreateTableMSSQLCompatible($createQuery); - } - - // Views have no constraints, indexes, etc. They do not require any - // analysis. - if (! $view) { - if (empty($sql_backquotes)) { - // Option "Enclose table and column names with backquotes" - // was checked. - Context::$MODE |= Context::SQL_MODE_NO_ENCLOSING_QUOTES; - } - - // Using appropriate quotes. - if (($compat === 'MSSQL') || ($sql_backquotes === '"')) { - Context::$MODE |= Context::SQL_MODE_ANSI_QUOTES; - } - } - - /** - * Parser used for analysis. - */ - $parser = new Parser($createQuery); - - /** - * `CREATE TABLE` statement. - * - * @var CreateStatement - */ - $statement = $parser->statements[0]; - - if (! empty($statement->entityOptions)) { - $engine = $statement->entityOptions->has('ENGINE'); - } else { - $engine = ''; - } - - /* Avoid operation on ARCHIVE tables as those can not be altered */ - if ( - (! empty($statement->fields) && is_array($statement->fields)) - && (empty($engine) || strtoupper($engine) !== 'ARCHIVE') - ) { - - /** - * Fragments containing definition of each constraint. - * - * @var array - */ - $constraints = []; - - /** - * Fragments containing definition of each index. - * - * @var array - */ - $indexes = []; - - /** - * Fragments containing definition of each FULLTEXT index. - * - * @var array - */ - $indexesFulltext = []; - - /** - * Fragments containing definition of each foreign key that will - * be dropped. - * - * @var array - */ - $dropped = []; - - /** - * Fragment containing definition of the `AUTO_INCREMENT`. - * - * @var array - */ - $autoIncrement = []; - - // Scanning each field of the `CREATE` statement to fill the arrays - // above. - // If the field is used in any of the arrays above, it is removed - // from the original definition. - // Also, AUTO_INCREMENT attribute is removed. - /** @var CreateDefinition $field */ - foreach ($statement->fields as $key => $field) { - if ($field->isConstraint) { - // Creating the parts that add constraints. - $constraints[] = $field::build($field); - unset($statement->fields[$key]); - } elseif (! empty($field->key)) { - // Creating the parts that add indexes (must not be - // constraints). - if ($field->key->type === 'FULLTEXT KEY') { - $indexesFulltext[] = $field::build($field); - unset($statement->fields[$key]); - } else { - if (empty($GLOBALS['sql_if_not_exists'])) { - $indexes[] = str_replace( - 'COMMENT=\'', - 'COMMENT \'', - $field::build($field) - ); - unset($statement->fields[$key]); - } - } - } - - // Creating the parts that drop foreign keys. - if (! empty($field->key)) { - if ($field->key->type === 'FOREIGN KEY') { - $dropped[] = 'FOREIGN KEY ' . Context::escape($field->name); - unset($statement->fields[$key]); - } - } - - // Dropping AUTO_INCREMENT. - if (empty($field->options)) { - continue; - } - - if (! $field->options->has('AUTO_INCREMENT') || ! empty($GLOBALS['sql_if_not_exists'])) { - continue; - } - - $autoIncrement[] = $field::build($field); - $field->options->remove('AUTO_INCREMENT'); - } - - /** - * The header of the `ALTER` statement (`ALTER TABLE tbl`). - * - * @var string - */ - $alterHeader = 'ALTER TABLE ' . - Util::backquoteCompat($tableAlias, $compat, $sql_backquotes); - - /** - * The footer of the `ALTER` statement (usually ';') - * - * @var string - */ - $alterFooter = ';' . $crlf; - - // Generating constraints-related query. - if (! empty($constraints)) { - $sql_constraints_query = $alterHeader . $crlf . ' ADD ' - . implode(',' . $crlf . ' ADD ', $constraints) - . $alterFooter; - - $sql_constraints = $this->generateComment( - $crlf, - $sql_constraints, - __('Constraints for dumped tables'), - __('Constraints for table'), - $tableAlias, - $compat - ) . $sql_constraints_query; - } - - // Generating indexes-related query. - $sql_indexes_query = ''; - - if (! empty($indexes)) { - $sql_indexes_query .= $alterHeader . $crlf . ' ADD ' - . implode(',' . $crlf . ' ADD ', $indexes) - . $alterFooter; - } - - if (! empty($indexesFulltext)) { - // InnoDB supports one FULLTEXT index creation at a time. - // So FULLTEXT indexes are created one-by-one after other - // indexes where created. - $sql_indexes_query .= $alterHeader . - ' ADD ' . implode($alterFooter . $alterHeader . ' ADD ', $indexesFulltext) . $alterFooter; - } - - if (! empty($indexes) || ! empty($indexesFulltext)) { - $sql_indexes = $this->generateComment( - $crlf, - $sql_indexes, - __('Indexes for dumped tables'), - __('Indexes for table'), - $tableAlias, - $compat - ) . $sql_indexes_query; - } - - // Generating drop foreign keys-related query. - if (! empty($dropped)) { - $sql_drop_foreign_keys = $alterHeader . $crlf . ' DROP ' - . implode(',' . $crlf . ' DROP ', $dropped) - . $alterFooter; - } - - // Generating auto-increment-related query. - if ($autoIncrement !== [] && $updateIndexesIncrements) { - $sqlAutoIncrementsQuery = $alterHeader . $crlf . ' MODIFY ' - . implode(',' . $crlf . ' MODIFY ', $autoIncrement); - if ( - isset($GLOBALS['sql_auto_increment']) - && ($statement->entityOptions->has('AUTO_INCREMENT') !== false) - ) { - if ( - ! isset($GLOBALS['table_data']) - || (isset($GLOBALS['table_data']) - && in_array($table, $GLOBALS['table_data'])) - ) { - $sqlAutoIncrementsQuery .= ', AUTO_INCREMENT=' - . $statement->entityOptions->has('AUTO_INCREMENT'); - } - } - - $sqlAutoIncrementsQuery .= ';' . $crlf; - - $sql_auto_increments = $this->generateComment( - $crlf, - $sql_auto_increments, - __('AUTO_INCREMENT for dumped tables'), - __('AUTO_INCREMENT for table'), - $tableAlias, - $compat - ) . $sqlAutoIncrementsQuery; - } - - // Removing the `AUTO_INCREMENT` attribute from the `CREATE TABLE` - // too. - if ( - ! empty($statement->entityOptions) - && (empty($GLOBALS['sql_if_not_exists']) - || empty($GLOBALS['sql_auto_increment'])) - ) { - $statement->entityOptions->remove('AUTO_INCREMENT'); - } - - // Rebuilding the query. - $createQuery = $statement->build(); - } - - $schemaCreate .= $createQuery; - } - - // Restoring old mode. - Context::$MODE = $oldMode; - - return $warning . $schemaCreate . ($addSemicolon ? ';' . $crlf : ''); - } - - /** - * Returns $table's comments, relations etc. - * - * @param string $db database name - * @param string $table table name - * @param bool $doRelation whether to include relation comments - * @param bool $doMime whether to include mime comments - * @param array $aliases Aliases of db/table/columns - * - * @return string resulting comments - */ - private function getTableComments( - $db, - $table, - $doRelation = false, - $doMime = false, - array $aliases = [] - ) { - global $sql_backquotes; - - $dbAlias = $db; - $tableAlias = $table; - $this->initAlias($aliases, $dbAlias, $tableAlias); - - $relationParameters = $this->relation->getRelationParameters(); - - $schemaCreate = ''; - - // Check if we can use Relations - [$resRel, $haveRel] = $this->relation->getRelationsAndStatus( - $doRelation && $relationParameters->relationFeature !== null, - $db, - $table - ); - - if ($doMime && $relationParameters->browserTransformationFeature !== null) { - $mimeMap = $this->transformations->getMime($db, $table, true); - if ($mimeMap === null) { - unset($mimeMap); - } - } - - if (isset($mimeMap) && count($mimeMap) > 0) { - $schemaCreate .= $this->possibleCRLF() - . $this->exportComment() - . $this->exportComment( - __('MEDIA TYPES FOR TABLE') . ' ' - . Util::backquoteCompat($table, 'NONE', $sql_backquotes) . ':' - ); - foreach ($mimeMap as $mimeField => $mime) { - $schemaCreate .= $this->exportComment( - ' ' - . Util::backquoteCompat($mimeField, 'NONE', $sql_backquotes) - ) - . $this->exportComment( - ' ' - . Util::backquoteCompat( - $mime['mimetype'], - 'NONE', - $sql_backquotes - ) - ); - } - - $schemaCreate .= $this->exportComment(); - } - - if ($haveRel) { - $schemaCreate .= $this->possibleCRLF() - . $this->exportComment() - . $this->exportComment( - __('RELATIONSHIPS FOR TABLE') . ' ' - . Util::backquoteCompat($tableAlias, 'NONE', $sql_backquotes) - . ':' - ); - - foreach ($resRel as $relField => $rel) { - if ($relField !== 'foreign_keys_data') { - $relFieldAlias = ! empty( - $aliases[$db]['tables'][$table]['columns'][$relField] - ) ? $aliases[$db]['tables'][$table]['columns'][$relField] - : $relField; - $schemaCreate .= $this->exportComment( - ' ' - . Util::backquoteCompat( - $relFieldAlias, - 'NONE', - $sql_backquotes - ) - ) - . $this->exportComment( - ' ' - . Util::backquoteCompat( - $rel['foreign_table'], - 'NONE', - $sql_backquotes - ) - . ' -> ' - . Util::backquoteCompat( - $rel['foreign_field'], - 'NONE', - $sql_backquotes - ) - ); - } else { - foreach ($rel as $oneKey) { - foreach ($oneKey['index_list'] as $index => $field) { - $relFieldAlias = ! empty( - $aliases[$db]['tables'][$table]['columns'][$field] - ) ? $aliases[$db]['tables'][$table]['columns'][$field] - : $field; - $schemaCreate .= $this->exportComment( - ' ' - . Util::backquoteCompat( - $relFieldAlias, - 'NONE', - $sql_backquotes - ) - ) - . $this->exportComment( - ' ' - . Util::backquoteCompat( - $oneKey['ref_table_name'], - 'NONE', - $sql_backquotes - ) - . ' -> ' - . Util::backquoteCompat( - $oneKey['ref_index_list'][$index], - 'NONE', - $sql_backquotes - ) - ); - } - } - } - } - - $schemaCreate .= $this->exportComment(); - } - - return $schemaCreate; - } - - /** - * Outputs a raw query - * - * @param string $errorUrl the url to go back in case of error - * @param string $sqlQuery the rawquery to output - * @param string $crlf the seperator for a file - */ - public function exportRawQuery(string $errorUrl, string $sqlQuery, string $crlf): bool - { - return $this->export->outputHandler($sqlQuery); - } - - /** - * Outputs table's structure - * - * @param string $db database name - * @param string $table table name - * @param string $crlf the end of line sequence - * @param string $errorUrl the url to go back in case of error - * @param string $exportMode 'create_table','triggers','create_view', - * 'stand_in' - * @param string $exportType 'server', 'database', 'table' - * @param bool $relation whether to include relation comments - * @param bool $comments whether to include the pmadb-style column - * comments as comments in the structure; this is - * deprecated but the parameter is left here - * because /export calls exportStructure() - * also for other export types which use this - * parameter - * @param bool $mime whether to include mime comments - * @param bool $dates whether to include creation/update/check dates - * @param array $aliases Aliases of db/table/columns - */ - public function exportStructure( - $db, - $table, - $crlf, - $errorUrl, - $exportMode, - $exportType, - $relation = false, - $comments = false, - $mime = false, - $dates = false, - array $aliases = [] - ): bool { - global $dbi; - - $dbAlias = $db; - $tableAlias = $table; - $this->initAlias($aliases, $dbAlias, $tableAlias); - if (isset($GLOBALS['sql_compatibility'])) { - $compat = $GLOBALS['sql_compatibility']; - } else { - $compat = 'NONE'; - } - - $formattedTableName = Util::backquoteCompat($tableAlias, $compat, isset($GLOBALS['sql_backquotes'])); - $dump = $this->possibleCRLF() - . $this->exportComment(str_repeat('-', 56)) - . $this->possibleCRLF() - . $this->exportComment(); - - switch ($exportMode) { - case 'create_table': - $dump .= $this->exportComment( - __('Table structure for table') . ' ' . $formattedTableName - ); - $dump .= $this->exportComment(); - $dump .= $this->getTableDef($db, $table, $crlf, $errorUrl, $dates, true, false, true, $aliases); - $dump .= $this->getTableComments($db, $table, $relation, $mime, $aliases); - break; - case 'triggers': - $dump = ''; - $delimiter = '$$'; - $triggers = $dbi->getTriggers($db, $table, $delimiter); - if ($triggers) { - $dump .= $this->possibleCRLF() - . $this->exportComment() - . $this->exportComment( - __('Triggers') . ' ' . $formattedTableName - ) - . $this->exportComment(); - $usedAlias = false; - $triggerQuery = ''; - foreach ($triggers as $trigger) { - if (! empty($GLOBALS['sql_drop_table'])) { - $triggerQuery .= $trigger['drop'] . ';' . $crlf; - } - - $triggerQuery .= 'DELIMITER ' . $delimiter . $crlf; - $triggerQuery .= $this->replaceWithAliases($trigger['create'], $aliases, $db, $table, $flag); - if ($flag) { - $usedAlias = true; - } - - $triggerQuery .= 'DELIMITER ;' . $crlf; - } - - // One warning per table. - if ($usedAlias) { - $dump .= $this->exportComment( - __('It appears your table uses triggers;') - ) - . $this->exportComment( - __('alias export may not work reliably in all cases.') - ) - . $this->exportComment(); - } - - $dump .= $triggerQuery; - } - - break; - case 'create_view': - if (empty($GLOBALS['sql_views_as_tables'])) { - $dump .= $this->exportComment( - __('Structure for view') - . ' ' - . $formattedTableName - ) - . $this->exportComment(); - // delete the stand-in table previously created (if any) - if ($exportType !== 'table') { - $dump .= 'DROP TABLE IF EXISTS ' - . Util::backquote($tableAlias) . ';' . $crlf; - } - - $dump .= $this->getTableDef($db, $table, $crlf, $errorUrl, $dates, true, true, true, $aliases); - } else { - $dump .= $this->exportComment( - sprintf( - __('Structure for view %s exported as a table'), - $formattedTableName - ) - ) - . $this->exportComment(); - // delete the stand-in table previously created (if any) - if ($exportType !== 'table') { - $dump .= 'DROP TABLE IF EXISTS ' - . Util::backquote($tableAlias) . ';' . $crlf; - } - - $dump .= $this->getTableDefForView($db, $table, $crlf, true, $aliases); - } - - break; - case 'stand_in': - $dump .= $this->exportComment( - __('Stand-in structure for view') . ' ' . $formattedTableName - ) - . $this->exportComment( - __('(See below for the actual view)') - ) - . $this->exportComment(); - // export a stand-in definition to resolve view dependencies - $dump .= $this->getTableDefStandIn($db, $table, $crlf, $aliases); - } - - // this one is built by getTableDef() to use in table copy/move - // but not in the case of export - unset($GLOBALS['sql_constraints_query']); - - return $this->export->outputHandler($dump); - } - - /** - * Outputs the content of a table in SQL format - * - * @param string $db database name - * @param string $table table name - * @param string $crlf the end of line sequence - * @param string $errorUrl the url to go back in case of error - * @param string $sqlQuery SQL query for obtaining data - * @param array $aliases Aliases of db/table/columns - */ - public function exportData( - $db, - $table, - $crlf, - $errorUrl, - $sqlQuery, - array $aliases = [] - ): bool { - global $current_row, $sql_backquotes, $dbi; - - // Do not export data for merge tables - if ($dbi->getTable($db, $table)->isMerge()) { - return true; - } - - $dbAlias = $db; - $tableAlias = $table; - $this->initAlias($aliases, $dbAlias, $tableAlias); - - if (isset($GLOBALS['sql_compatibility'])) { - $compat = $GLOBALS['sql_compatibility']; - } else { - $compat = 'NONE'; - } - - $formattedTableName = Util::backquoteCompat($tableAlias, $compat, $sql_backquotes); - - // Do not export data for a VIEW, unless asked to export the view as a table - // (For a VIEW, this is called only when exporting a single VIEW) - if ($dbi->getTable($db, $table)->isView() && empty($GLOBALS['sql_views_as_tables'])) { - $head = $this->possibleCRLF() - . $this->exportComment() - . $this->exportComment('VIEW ' . $formattedTableName) - . $this->exportComment(__('Data:') . ' ' . __('None')) - . $this->exportComment() - . $this->possibleCRLF(); - - return $this->export->outputHandler($head); - } - - $result = $dbi->tryQuery($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); - // a possible error: the table has crashed - $tmpError = $dbi->getError(); - if ($tmpError) { - $message = sprintf(__('Error reading data for table %s:'), $db . '.' . $table); - $message .= ' ' . $tmpError; - if (! defined('TESTSUITE')) { - trigger_error($message, E_USER_ERROR); - } - - return $this->export->outputHandler( - $this->exportComment($message) - ); - } - - if ($result === false) { - return true; - } - - $fieldsCnt = $result->numFields(); - - // Get field information - /** @var FieldMetadata[] $fieldsMeta */ - $fieldsMeta = $dbi->getFieldsMeta($result); - - $fieldSet = []; - for ($j = 0; $j < $fieldsCnt; $j++) { - $colAs = $fieldsMeta[$j]->name; - if (! empty($aliases[$db]['tables'][$table]['columns'][$colAs])) { - $colAs = $aliases[$db]['tables'][$table]['columns'][$colAs]; - } - - $fieldSet[$j] = Util::backquoteCompat($colAs, $compat, $sql_backquotes); - } - - if (isset($GLOBALS['sql_type']) && $GLOBALS['sql_type'] === 'UPDATE') { - // update - $schemaInsert = 'UPDATE '; - if (isset($GLOBALS['sql_ignore'])) { - $schemaInsert .= 'IGNORE '; - } - - // avoid EOL blank - $schemaInsert .= Util::backquoteCompat($tableAlias, $compat, $sql_backquotes) . ' SET'; - } else { - // insert or replace - if (isset($GLOBALS['sql_type']) && $GLOBALS['sql_type'] === 'REPLACE') { - $sqlCommand = 'REPLACE'; - } else { - $sqlCommand = 'INSERT'; - } - - // delayed inserts? - if (isset($GLOBALS['sql_delayed'])) { - $insertDelayed = ' DELAYED'; - } else { - $insertDelayed = ''; - } - - // insert ignore? - if (isset($GLOBALS['sql_type'], $GLOBALS['sql_ignore']) && $GLOBALS['sql_type'] === 'INSERT') { - $insertDelayed .= ' IGNORE'; - } - - //truncate table before insert - if (isset($GLOBALS['sql_truncate']) && $GLOBALS['sql_truncate'] && $sqlCommand === 'INSERT') { - $truncate = 'TRUNCATE TABLE ' - . Util::backquoteCompat($tableAlias, $compat, $sql_backquotes) . ';'; - $truncatehead = $this->possibleCRLF() - . $this->exportComment() - . $this->exportComment( - __('Truncate table before insert') . ' ' - . $formattedTableName - ) - . $this->exportComment() - . $crlf; - $this->export->outputHandler($truncatehead); - $this->export->outputHandler($truncate); - } - - // scheme for inserting fields - if ($GLOBALS['sql_insert_syntax'] === 'complete' || $GLOBALS['sql_insert_syntax'] === 'both') { - $fields = implode(', ', $fieldSet); - $schemaInsert = $sqlCommand . $insertDelayed . ' INTO ' - . Util::backquoteCompat($tableAlias, $compat, $sql_backquotes) - // avoid EOL blank - . ' (' . $fields . ') VALUES'; - } else { - $schemaInsert = $sqlCommand . $insertDelayed . ' INTO ' - . Util::backquoteCompat($tableAlias, $compat, $sql_backquotes) - . ' VALUES'; - } - } - - //\x08\\x09, not required - $current_row = 0; - $querySize = 0; - if ( - ($GLOBALS['sql_insert_syntax'] === 'extended' - || $GLOBALS['sql_insert_syntax'] === 'both') - && (! isset($GLOBALS['sql_type']) - || $GLOBALS['sql_type'] !== 'UPDATE') - ) { - $separator = ','; - $schemaInsert .= $crlf; - } else { - $separator = ';'; - } - - while ($row = $result->fetchRow()) { - if ($current_row == 0) { - $head = $this->possibleCRLF() - . $this->exportComment() - . $this->exportComment( - __('Dumping data for table') . ' ' - . $formattedTableName - ) - . $this->exportComment() - . $crlf; - if (! $this->export->outputHandler($head)) { - return false; - } - } - - // We need to SET IDENTITY_INSERT ON for MSSQL - if ( - isset($GLOBALS['sql_compatibility']) - && $GLOBALS['sql_compatibility'] === 'MSSQL' - && $current_row == 0 - ) { - if ( - ! $this->export->outputHandler( - 'SET IDENTITY_INSERT ' - . Util::backquoteCompat( - $tableAlias, - $compat, - $sql_backquotes - ) - . ' ON ;' . $crlf - ) - ) { - return false; - } - } - - $current_row++; - $values = []; - for ($j = 0; $j < $fieldsCnt; $j++) { - // NULL - if (! isset($row[$j])) { - $values[] = 'NULL'; - } elseif ( - $fieldsMeta[$j]->isNumeric - && ! $fieldsMeta[$j]->isMappedTypeTimestamp - && ! $fieldsMeta[$j]->isBlob - ) { - // a number - // timestamp is numeric on some MySQL 4.1, BLOBs are - // sometimes numeric - $values[] = $row[$j]; - } elseif ($fieldsMeta[$j]->isBinary && isset($GLOBALS['sql_hex_for_binary'])) { - // a true BLOB - // - mysqldump only generates hex data when the --hex-blob - // option is used, for fields having the binary attribute - // no hex is generated - // - a TEXT field returns type blob but a real blob - // returns also the 'binary' flag - - // empty blobs need to be different, but '0' is also empty - // :-( - if (empty($row[$j]) && $row[$j] != '0') { - $values[] = '\'\''; - } else { - $values[] = '0x' . bin2hex($row[$j]); - } - } elseif ($fieldsMeta[$j]->isMappedTypeBit) { - // detection of 'bit' works only on mysqli extension - $values[] = "b'" . $dbi->escapeString( - Util::printableBitValue( - (int) $row[$j], - (int) $fieldsMeta[$j]->length - ) - ) - . "'"; - } elseif ($fieldsMeta[$j]->isMappedTypeGeometry) { - // export GIS types as hex - $values[] = '0x' . bin2hex($row[$j]); - } elseif (! empty($GLOBALS['exporting_metadata']) && $row[$j] === '@LAST_PAGE') { - $values[] = '@LAST_PAGE'; - } else { - // something else -> treat as a string - $values[] = '\'' - . $dbi->escapeString($row[$j]) - . '\''; - } - } - - // should we make update? - if (isset($GLOBALS['sql_type']) && $GLOBALS['sql_type'] === 'UPDATE') { - $insertLine = $schemaInsert; - for ($i = 0; $i < $fieldsCnt; $i++) { - if ($i == 0) { - $insertLine .= ' '; - } - - if ($i > 0) { - // avoid EOL blank - $insertLine .= ','; - } - - $insertLine .= $fieldSet[$i] . ' = ' . $values[$i]; - } - - [$tmpUniqueCondition, $tmpClauseIsUnique] = Util::getUniqueCondition( - $fieldsCnt, - $fieldsMeta, - $row - ); - $insertLine .= ' WHERE ' . $tmpUniqueCondition; - unset($tmpUniqueCondition, $tmpClauseIsUnique); - } else { - // Extended inserts case - if ($GLOBALS['sql_insert_syntax'] === 'extended' || $GLOBALS['sql_insert_syntax'] === 'both') { - if ($current_row == 1) { - $insertLine = $schemaInsert . '(' - . implode(', ', $values) . ')'; - } else { - $insertLine = '(' . implode(', ', $values) . ')'; - $insertLineSize = mb_strlen($insertLine); - $sqlMaxSize = $GLOBALS['sql_max_query_size']; - if (isset($sqlMaxSize) && $sqlMaxSize > 0 && $querySize + $insertLineSize > $sqlMaxSize) { - if (! $this->export->outputHandler(';' . $crlf)) { - return false; - } - - $querySize = 0; - $current_row = 1; - $insertLine = $schemaInsert . $insertLine; - } - } - - $querySize += mb_strlen($insertLine); - // Other inserts case - } else { - $insertLine = $schemaInsert - . '(' . implode(', ', $values) . ')'; - } - } - - unset($values); - - if (! $this->export->outputHandler(($current_row == 1 ? '' : $separator . $crlf) . $insertLine)) { - return false; - } - } - - if ($current_row > 0) { - if (! $this->export->outputHandler(';' . $crlf)) { - return false; - } - } - - // We need to SET IDENTITY_INSERT OFF for MSSQL - if (isset($GLOBALS['sql_compatibility']) && $GLOBALS['sql_compatibility'] === 'MSSQL' && $current_row > 0) { - $outputSucceeded = $this->export->outputHandler( - $crlf . 'SET IDENTITY_INSERT ' - . Util::backquoteCompat( - $tableAlias, - $compat, - $sql_backquotes - ) - . ' OFF;' . $crlf - ); - if (! $outputSucceeded) { - return false; - } - } - - return true; - } - - /** - * Make a create table statement compatible with MSSQL - * - * @param string $createQuery MySQL create table statement - * - * @return string MSSQL compatible create table statement - */ - private function makeCreateTableMSSQLCompatible($createQuery) - { - // In MSSQL - // 1. No 'IF NOT EXISTS' in CREATE TABLE - // 2. DATE field doesn't exists, we will use DATETIME instead - // 3. UNSIGNED attribute doesn't exist - // 4. No length on INT, TINYINT, SMALLINT, BIGINT and no precision on - // FLOAT fields - // 5. No KEY and INDEX inside CREATE TABLE - // 6. DOUBLE field doesn't exists, we will use FLOAT instead - - $createQuery = (string) preg_replace('/^CREATE TABLE IF NOT EXISTS/', 'CREATE TABLE', (string) $createQuery); - // first we need to replace all lines ended with '" DATE ...,\n' - // last preg_replace preserve us from situation with date text - // inside DEFAULT field value - $createQuery = (string) preg_replace( - "/\" date DEFAULT NULL(,)?\n/", - '" datetime DEFAULT NULL$1' . "\n", - $createQuery - ); - $createQuery = (string) preg_replace("/\" date NOT NULL(,)?\n/", '" datetime NOT NULL$1' . "\n", $createQuery); - $createQuery = (string) preg_replace( - '/" date NOT NULL DEFAULT \'([^\'])/', - '" datetime NOT NULL DEFAULT \'$1', - $createQuery - ); - - // next we need to replace all lines ended with ') UNSIGNED ...,' - // last preg_replace preserve us from situation with unsigned text - // inside DEFAULT field value - $createQuery = (string) preg_replace("/\) unsigned NOT NULL(,)?\n/", ') NOT NULL$1' . "\n", $createQuery); - $createQuery = (string) preg_replace( - "/\) unsigned DEFAULT NULL(,)?\n/", - ') DEFAULT NULL$1' . "\n", - $createQuery - ); - $createQuery = (string) preg_replace( - '/\) unsigned NOT NULL DEFAULT \'([^\'])/', - ') NOT NULL DEFAULT \'$1', - $createQuery - ); - - // we need to replace all lines ended with - // '" INT|TINYINT([0-9]{1,}) ...,' last preg_replace preserve us - // from situation with int([0-9]{1,}) text inside DEFAULT field - // value - $createQuery = (string) preg_replace( - '/" (int|tinyint|smallint|bigint)\([0-9]+\) DEFAULT NULL(,)?\n/', - '" $1 DEFAULT NULL$2' . "\n", - $createQuery - ); - $createQuery = (string) preg_replace( - '/" (int|tinyint|smallint|bigint)\([0-9]+\) NOT NULL(,)?\n/', - '" $1 NOT NULL$2' . "\n", - $createQuery - ); - $createQuery = (string) preg_replace( - '/" (int|tinyint|smallint|bigint)\([0-9]+\) NOT NULL DEFAULT \'([^\'])/', - '" $1 NOT NULL DEFAULT \'$2', - $createQuery - ); - - // we need to replace all lines ended with - // '" FLOAT|DOUBLE([0-9,]{1,}) ...,' - // last preg_replace preserve us from situation with - // float([0-9,]{1,}) text inside DEFAULT field value - $createQuery = (string) preg_replace( - '/" (float|double)(\([0-9]+,[0-9,]+\))? DEFAULT NULL(,)?\n/', - '" float DEFAULT NULL$3' . "\n", - $createQuery - ); - $createQuery = (string) preg_replace( - '/" (float|double)(\([0-9,]+,[0-9,]+\))? NOT NULL(,)?\n/', - '" float NOT NULL$3' . "\n", - $createQuery - ); - - return (string) preg_replace( - '/" (float|double)(\([0-9,]+,[0-9,]+\))? NOT NULL DEFAULT \'([^\'])/', - '" float NOT NULL DEFAULT \'$3', - $createQuery - ); - - // @todo remove indexes from CREATE TABLE - } - - /** - * replaces db/table/column names with their aliases - * - * @param string $sqlQuery SQL query in which aliases are to be substituted - * @param array $aliases Alias information for db/table/column - * @param string $db the database name - * @param string $table the tablename - * @param string $flag the flag denoting whether any replacement was done - * - * @return string query replaced with aliases - */ - public function replaceWithAliases( - $sqlQuery, - array $aliases, - $db, - $table = '', - &$flag = null - ) { - $flag = false; - - /** - * The parser of this query. - */ - $parser = new Parser($sqlQuery); - - if (empty($parser->statements[0])) { - return $sqlQuery; - } - - /** - * The statement that represents the query. - * - * @var CreateStatement $statement - */ - $statement = $parser->statements[0]; - - /** - * Old database name. - */ - $oldDatabase = $db; - - // Replacing aliases in `CREATE TABLE` statement. - if ($statement->options->has('TABLE')) { - // Extracting the name of the old database and table from the - // statement to make sure the parameters are correct. - if (! empty($statement->name->database)) { - $oldDatabase = $statement->name->database; - } - - /** - * Old table name. - */ - $oldTable = $statement->name->table; - - // Finding the aliased database name. - // The database might be empty so we have to add a few checks. - $newDatabase = null; - if (! empty($statement->name->database)) { - $newDatabase = $statement->name->database; - if (! empty($aliases[$oldDatabase]['alias'])) { - $newDatabase = $aliases[$oldDatabase]['alias']; - } - } - - // Finding the aliases table name. - $newTable = $oldTable; - if (! empty($aliases[$oldDatabase]['tables'][$oldTable]['alias'])) { - $newTable = $aliases[$oldDatabase]['tables'][$oldTable]['alias']; - } - - // Replacing new values. - if (($statement->name->database !== $newDatabase) || ($statement->name->table !== $newTable)) { - $statement->name->database = $newDatabase; - $statement->name->table = $newTable; - $statement->name->expr = ''; // Force rebuild. - $flag = true; - } - - /** @var CreateDefinition[] $fields */ - $fields = $statement->fields; - foreach ($fields as $field) { - // Column name. - if (! empty($field->type)) { - if (! empty($aliases[$oldDatabase]['tables'][$oldTable]['columns'][$field->name])) { - $field->name = $aliases[$oldDatabase]['tables'][$oldTable]['columns'][$field->name]; - $flag = true; - } - } - - // Key's columns. - if (! empty($field->key)) { - foreach ($field->key->columns as $key => $column) { - if (! isset($column['name'])) { - // In case the column has no name field - continue; - } - - if (empty($aliases[$oldDatabase]['tables'][$oldTable]['columns'][$column['name']])) { - continue; - } - - $columnAliases = $aliases[$oldDatabase]['tables'][$oldTable]['columns']; - $field->key->columns[$key]['name'] = $columnAliases[$column['name']]; - $flag = true; - } - } - - // References. - if (empty($field->references)) { - continue; - } - - $refTable = $field->references->table->table; - // Replacing table. - if (! empty($aliases[$oldDatabase]['tables'][$refTable]['alias'])) { - $field->references->table->table = $aliases[$oldDatabase]['tables'][$refTable]['alias']; - $field->references->table->expr = ''; - $flag = true; - } - - // Replacing column names. - foreach ($field->references->columns as $key => $column) { - if (empty($aliases[$oldDatabase]['tables'][$refTable]['columns'][$column])) { - continue; - } - - $field->references->columns[$key] = $aliases[$oldDatabase]['tables'][$refTable]['columns'][$column]; - $flag = true; - } - } - } elseif ($statement->options->has('TRIGGER')) { - // Extracting the name of the old database and table from the - // statement to make sure the parameters are correct. - if (! empty($statement->table->database)) { - $oldDatabase = $statement->table->database; - } - - /** - * Old table name. - */ - $oldTable = $statement->table->table; - - if (! empty($aliases[$oldDatabase]['tables'][$oldTable]['alias'])) { - $statement->table->table = $aliases[$oldDatabase]['tables'][$oldTable]['alias']; - $statement->table->expr = ''; // Force rebuild. - $flag = true; - } - } - - if ( - $statement->options->has('TRIGGER') - || $statement->options->has('PROCEDURE') - || $statement->options->has('FUNCTION') - || $statement->options->has('VIEW') - ) { - // Replacing the body. - for ($i = 0, $count = count((array) $statement->body); $i < $count; ++$i) { - - /** - * Token parsed at this moment. - * - * @var Token $token - */ - $token = $statement->body[$i]; - - // Replacing only symbols (that are not variables) and unknown - // identifiers. - $isSymbol = $token->type === Token::TYPE_SYMBOL; - $isKeyword = $token->type === Token::TYPE_KEYWORD; - $isNone = $token->type === Token::TYPE_NONE; - $replaceToken = $isSymbol - && (! ($token->flags & Token::FLAG_SYMBOL_VARIABLE)) - || ($isKeyword - && (! ($token->flags & Token::FLAG_KEYWORD_RESERVED)) - || $isNone); - - if (! $replaceToken) { - continue; - } - - $alias = $this->getAlias($aliases, $token->value); - if (empty($alias)) { - continue; - } - - // Replacing the token. - $token->token = Context::escape($alias); - $flag = true; - } - } - - return $statement->build(); - } - - /** - * Generate comment - * - * @param string $crlf Carriage return character - * @param string|null $sqlStatement SQL statement - * @param string $comment1 Comment for dumped table - * @param string $comment2 Comment for current table - * @param string $tableAlias Table alias - * @param string $compat Compatibility mode - * - * @return string - */ - protected function generateComment( - $crlf, - ?string $sqlStatement, - $comment1, - $comment2, - $tableAlias, - $compat - ) { - if (! isset($sqlStatement)) { - if (isset($GLOBALS['no_constraints_comments'])) { - $sqlStatement = ''; - } else { - $sqlStatement = $crlf - . $this->exportComment() - . $this->exportComment($comment1) - . $this->exportComment(); - } - } - - // comments for current table - if (! isset($GLOBALS['no_constraints_comments'])) { - $sqlStatement .= $crlf - . $this->exportComment() - . $this->exportComment( - $comment2 . ' ' . Util::backquoteCompat( - $tableAlias, - $compat, - isset($GLOBALS['sql_backquotes']) - ) - ) - . $this->exportComment(); - } - - return $sqlStatement; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportTexytext.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportTexytext.php deleted file mode 100644 index 80008ea..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Export/ExportTexytext.php +++ /dev/null @@ -1,625 +0,0 @@ -setText('Texy! text'); - $exportPluginProperties->setExtension('txt'); - $exportPluginProperties->setMimeType('text/plain'); - $exportPluginProperties->setOptionsText(__('Options')); - - // create the root group that will be the options field for - // $exportPluginProperties - // this will be shown as "Format specific options" - $exportSpecificOptions = new OptionsPropertyRootGroup('Format Specific Options'); - - // what to dump (structure/data/both) main group - $dumpWhat = new OptionsPropertyMainGroup( - 'general_opts', - __('Dump table') - ); - // create primary items and add them to the group - $leaf = new RadioPropertyItem('structure_or_data'); - $leaf->setValues( - [ - 'structure' => __('structure'), - 'data' => __('data'), - 'structure_and_data' => __('structure and data'), - ] - ); - $dumpWhat->addProperty($leaf); - // add the main group to the root group - $exportSpecificOptions->addProperty($dumpWhat); - - // data options main group - $dataOptions = new OptionsPropertyMainGroup( - 'data', - __('Data dump options') - ); - $dataOptions->setForce('structure'); - // create primary items and add them to the group - $leaf = new BoolPropertyItem( - 'columns', - __('Put columns names in the first row') - ); - $dataOptions->addProperty($leaf); - $leaf = new TextPropertyItem( - 'null', - __('Replace NULL with:') - ); - $dataOptions->addProperty($leaf); - // add the main group to the root group - $exportSpecificOptions->addProperty($dataOptions); - - // set the options for the export plugin property item - $exportPluginProperties->setOptions($exportSpecificOptions); - - return $exportPluginProperties; - } - - /** - * Outputs export header - */ - public function exportHeader(): bool - { - return true; - } - - /** - * Outputs export footer - */ - public function exportFooter(): bool - { - return true; - } - - /** - * Outputs database header - * - * @param string $db Database name - * @param string $dbAlias Alias of db - */ - public function exportDBHeader($db, $dbAlias = ''): bool - { - if (empty($dbAlias)) { - $dbAlias = $db; - } - - return $this->export->outputHandler( - '===' . __('Database') . ' ' . $dbAlias . "\n\n" - ); - } - - /** - * Outputs database footer - * - * @param string $db Database name - */ - public function exportDBFooter($db): bool - { - return true; - } - - /** - * Outputs CREATE DATABASE statement - * - * @param string $db Database name - * @param string $exportType 'server', 'database', 'table' - * @param string $dbAlias Aliases of db - */ - public function exportDBCreate($db, $exportType, $dbAlias = ''): bool - { - return true; - } - - /** - * Outputs the content of a table in NHibernate format - * - * @param string $db database name - * @param string $table table name - * @param string $crlf the end of line sequence - * @param string $errorUrl the url to go back in case of error - * @param string $sqlQuery SQL query for obtaining data - * @param array $aliases Aliases of db/table/columns - */ - public function exportData( - $db, - $table, - $crlf, - $errorUrl, - $sqlQuery, - array $aliases = [] - ): bool { - global $what, $dbi; - - $db_alias = $db; - $table_alias = $table; - $this->initAlias($aliases, $db_alias, $table_alias); - - if ( - ! $this->export->outputHandler( - $table_alias != '' - ? '== ' . __('Dumping data for table') . ' ' . $table_alias . "\n\n" - : '==' . __('Dumping data for query result') . "\n\n" - ) - ) { - return false; - } - - // Gets the data from the database - $result = $dbi->query($sqlQuery, DatabaseInterface::CONNECT_USER, DatabaseInterface::QUERY_UNBUFFERED); - $fields_cnt = $result->numFields(); - - // If required, get fields name at the first line - if (isset($GLOBALS[$what . '_columns'])) { - $text_output = "|------\n"; - foreach ($result->getFieldNames() as $col_as) { - if (! empty($aliases[$db]['tables'][$table]['columns'][$col_as])) { - $col_as = $aliases[$db]['tables'][$table]['columns'][$col_as]; - } - - $text_output .= '|' - . htmlspecialchars(stripslashes($col_as)); - } - - $text_output .= "\n|------\n"; - if (! $this->export->outputHandler($text_output)) { - return false; - } - } - - // Format the data - while ($row = $result->fetchRow()) { - $text_output = ''; - for ($j = 0; $j < $fields_cnt; $j++) { - if (! isset($row[$j])) { - $value = $GLOBALS[$what . '_null']; - } elseif ($row[$j] == '0' || $row[$j] != '') { - $value = $row[$j]; - } else { - $value = ' '; - } - - $text_output .= '|' - . str_replace( - '|', - '|', - htmlspecialchars($value) - ); - } - - $text_output .= "\n"; - if (! $this->export->outputHandler($text_output)) { - return false; - } - } - - return true; - } - - /** - * Outputs result raw query in TexyText format - * - * @param string $errorUrl the url to go back in case of error - * @param string $sqlQuery the rawquery to output - * @param string $crlf the end of line sequence - */ - public function exportRawQuery(string $errorUrl, string $sqlQuery, string $crlf): bool - { - return $this->exportData('', '', $crlf, $errorUrl, $sqlQuery); - } - - /** - * Returns a stand-in CREATE definition to resolve view dependencies - * - * @param string $db the database name - * @param string $view the view name - * @param string $crlf the end of line sequence - * @param array $aliases Aliases of db/table/columns - * - * @return string resulting definition - */ - public function getTableDefStandIn($db, $view, $crlf, $aliases = []) - { - global $dbi; - - $text_output = ''; - - /** - * Get the unique keys in the table - */ - $unique_keys = []; - $keys = $dbi->getTableIndexes($db, $view); - foreach ($keys as $key) { - if ($key['Non_unique'] != 0) { - continue; - } - - $unique_keys[] = $key['Column_name']; - } - - /** - * Gets fields properties - */ - $dbi->selectDb($db); - - /** - * Displays the table structure - */ - - $text_output .= "|------\n" - . '|' . __('Column') - . '|' . __('Type') - . '|' . __('Null') - . '|' . __('Default') - . "\n|------\n"; - - $columns = $dbi->getColumns($db, $view); - foreach ($columns as $column) { - $col_as = $column['Field'] ?? null; - if (! empty($aliases[$db]['tables'][$view]['columns'][$col_as])) { - $col_as = $aliases[$db]['tables'][$view]['columns'][$col_as]; - } - - $text_output .= $this->formatOneColumnDefinition($column, $unique_keys, $col_as); - $text_output .= "\n"; - } - - return $text_output; - } - - /** - * Returns $table's CREATE definition - * - * @param string $db the database name - * @param string $table the table name - * @param string $crlf the end of line sequence - * @param string $error_url the url to go back in case of error - * @param bool $do_relation whether to include relation comments - * @param bool $do_comments whether to include the pmadb-style column - * comments as comments in the structure; - * this is deprecated but the parameter is - * left here because /export calls - * $this->exportStructure() also for other - * export types which use this parameter - * @param bool $do_mime whether to include mime comments - * @param bool $show_dates whether to include creation/update/check dates - * @param bool $add_semicolon whether to add semicolon and end-of-line - * at the end - * @param bool $view whether we're handling a view - * @param array $aliases Aliases of db/table/columns - * - * @return string resulting schema - */ - public function getTableDef( - $db, - $table, - $crlf, - $error_url, - $do_relation, - $do_comments, - $do_mime, - $show_dates = false, - $add_semicolon = true, - $view = false, - array $aliases = [] - ) { - global $dbi; - - $relationParameters = $this->relation->getRelationParameters(); - - $text_output = ''; - - /** - * Get the unique keys in the table - */ - $unique_keys = []; - $keys = $dbi->getTableIndexes($db, $table); - foreach ($keys as $key) { - if ($key['Non_unique'] != 0) { - continue; - } - - $unique_keys[] = $key['Column_name']; - } - - /** - * Gets fields properties - */ - $dbi->selectDb($db); - - // Check if we can use Relations - [$res_rel, $have_rel] = $this->relation->getRelationsAndStatus( - $do_relation && $relationParameters->relationFeature !== null, - $db, - $table - ); - - /** - * Displays the table structure - */ - - $text_output .= "|------\n"; - $text_output .= '|' . __('Column'); - $text_output .= '|' . __('Type'); - $text_output .= '|' . __('Null'); - $text_output .= '|' . __('Default'); - if ($do_relation && $have_rel) { - $text_output .= '|' . __('Links to'); - } - - if ($do_comments) { - $text_output .= '|' . __('Comments'); - $comments = $this->relation->getComments($db, $table); - } - - if ($do_mime && $relationParameters->browserTransformationFeature !== null) { - $text_output .= '|' . __('Media type'); - $mime_map = $this->transformations->getMime($db, $table, true); - } - - $text_output .= "\n|------\n"; - - $columns = $dbi->getColumns($db, $table); - foreach ($columns as $column) { - $col_as = $column['Field']; - if (! empty($aliases[$db]['tables'][$table]['columns'][$col_as])) { - $col_as = $aliases[$db]['tables'][$table]['columns'][$col_as]; - } - - $text_output .= $this->formatOneColumnDefinition($column, $unique_keys, $col_as); - $field_name = $column['Field']; - if ($do_relation && $have_rel) { - $text_output .= '|' . htmlspecialchars( - $this->getRelationString( - $res_rel, - $field_name, - $db, - $aliases - ) - ); - } - - if ($do_comments && $relationParameters->columnCommentsFeature !== null) { - $text_output .= '|' - . (isset($comments[$field_name]) - ? htmlspecialchars($comments[$field_name]) - : ''); - } - - if ($do_mime && $relationParameters->browserTransformationFeature !== null) { - $text_output .= '|' - . (isset($mime_map[$field_name]) - ? htmlspecialchars( - str_replace('_', '/', $mime_map[$field_name]['mimetype']) - ) - : ''); - } - - $text_output .= "\n"; - } - - return $text_output; - } - - /** - * Outputs triggers - * - * @param string $db database name - * @param string $table table name - * - * @return string Formatted triggers list - */ - public function getTriggers($db, $table) - { - global $dbi; - - $dump = "|------\n"; - $dump .= '|' . __('Name'); - $dump .= '|' . __('Time'); - $dump .= '|' . __('Event'); - $dump .= '|' . __('Definition'); - $dump .= "\n|------\n"; - - $triggers = $dbi->getTriggers($db, $table); - - foreach ($triggers as $trigger) { - $dump .= '|' . $trigger['name']; - $dump .= '|' . $trigger['action_timing']; - $dump .= '|' . $trigger['event_manipulation']; - $dump .= '|' . - str_replace( - '|', - '|', - htmlspecialchars($trigger['definition']) - ); - $dump .= "\n"; - } - - return $dump; - } - - /** - * Outputs table's structure - * - * @param string $db database name - * @param string $table table name - * @param string $crlf the end of line sequence - * @param string $errorUrl the url to go back in case of error - * @param string $exportMode 'create_table', 'triggers', 'create_view', - * 'stand_in' - * @param string $exportType 'server', 'database', 'table' - * @param bool $do_relation whether to include relation comments - * @param bool $do_comments whether to include the pmadb-style column - * comments as comments in the structure; - * this is deprecated but the parameter is - * left here because /export calls - * $this->exportStructure() also for other - * export types which use this parameter - * @param bool $do_mime whether to include mime comments - * @param bool $dates whether to include creation/update/check dates - * @param array $aliases Aliases of db/table/columns - */ - public function exportStructure( - $db, - $table, - $crlf, - $errorUrl, - $exportMode, - $exportType, - $do_relation = false, - $do_comments = false, - $do_mime = false, - $dates = false, - array $aliases = [] - ): bool { - global $dbi; - - $db_alias = $db; - $table_alias = $table; - $this->initAlias($aliases, $db_alias, $table_alias); - $dump = ''; - - switch ($exportMode) { - case 'create_table': - $dump .= '== ' . __('Table structure for table') . ' ' - . $table_alias . "\n\n"; - $dump .= $this->getTableDef( - $db, - $table, - $crlf, - $errorUrl, - $do_relation, - $do_comments, - $do_mime, - $dates, - true, - false, - $aliases - ); - break; - case 'triggers': - $dump = ''; - $triggers = $dbi->getTriggers($db, $table); - if ($triggers) { - $dump .= '== ' . __('Triggers') . ' ' . $table_alias . "\n\n"; - $dump .= $this->getTriggers($db, $table); - } - - break; - case 'create_view': - $dump .= '== ' . __('Structure for view') . ' ' . $table_alias . "\n\n"; - $dump .= $this->getTableDef( - $db, - $table, - $crlf, - $errorUrl, - $do_relation, - $do_comments, - $do_mime, - $dates, - true, - true, - $aliases - ); - break; - case 'stand_in': - $dump .= '== ' . __('Stand-in structure for view') - . ' ' . $table . "\n\n"; - // export a stand-in definition to resolve view dependencies - $dump .= $this->getTableDefStandIn($db, $table, $crlf, $aliases); - } - - return $this->export->outputHandler($dump); - } - - /** - * Formats the definition for one column - * - * @param array $column info about this column - * @param array $unique_keys unique keys for this table - * @param string $col_alias Column Alias - * - * @return string Formatted column definition - */ - public function formatOneColumnDefinition( - $column, - $unique_keys, - $col_alias = '' - ) { - if (empty($col_alias)) { - $col_alias = $column['Field']; - } - - $extracted_columnspec = Util::extractColumnSpec($column['Type']); - $type = $extracted_columnspec['print_type']; - if (empty($type)) { - $type = ' '; - } - - if (! isset($column['Default'])) { - if ($column['Null'] !== 'NO') { - $column['Default'] = 'NULL'; - } - } - - $fmt_pre = ''; - $fmt_post = ''; - if (in_array($column['Field'], $unique_keys)) { - $fmt_pre = '**' . $fmt_pre; - $fmt_post .= '**'; - } - - if ($column['Key'] === 'PRI') { - $fmt_pre = '//' . $fmt_pre; - $fmt_post .= '//'; - } - - $definition = '|' - . $fmt_pre . htmlspecialchars($col_alias) . $fmt_post; - $definition .= '|' . htmlspecialchars($type); - $definition .= '|' - . ($column['Null'] == '' || $column['Null'] === 'NO' - ? __('No') : __('Yes')); - $definition .= '|' - . htmlspecialchars($column['Default'] ?? ''); - - return $definition; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportMediawiki.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportMediawiki.php deleted file mode 100644 index 17bfd6a..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportMediawiki.php +++ /dev/null @@ -1,591 +0,0 @@ -setAnalyze(false); - if ($GLOBALS['plugin_param'] !== 'table') { - $this->setAnalyze(true); - } - - $importPluginProperties = new ImportPluginProperties(); - $importPluginProperties->setText(__('MediaWiki Table')); - $importPluginProperties->setExtension('txt'); - $importPluginProperties->setMimeType('text/plain'); - $importPluginProperties->setOptionsText(__('Options')); - - return $importPluginProperties; - } - - /** - * Handles the whole import logic - * - * @param array $sql_data 2-element array with sql data - */ - public function doImport(?File $importHandle = null, array &$sql_data = []): void - { - global $error, $timeout_passed, $finished; - - // Defaults for parser - - // The buffer that will be used to store chunks read from the imported file - $buffer = ''; - - // Used as storage for the last part of the current chunk data - // Will be appended to the first line of the next chunk, if there is one - $last_chunk_line = ''; - - // Remembers whether the current buffer line is part of a comment - $inside_comment = false; - // Remembers whether the current buffer line is part of a data comment - $inside_data_comment = false; - // Remembers whether the current buffer line is part of a structure comment - $inside_structure_comment = false; - - // MediaWiki only accepts "\n" as row terminator - $mediawiki_new_line = "\n"; - - // Initialize the name of the current table - $cur_table_name = ''; - - $cur_temp_table_headers = []; - $cur_temp_table = []; - - $in_table_header = false; - - while (! $finished && ! $error && ! $timeout_passed) { - $data = $this->import->getNextChunk($importHandle); - - if ($data === false) { - // Subtract data we didn't handle yet and stop processing - $GLOBALS['offset'] -= mb_strlen($buffer); - break; - } - - if ($data !== true) { - // Append new data to buffer - $buffer = $data; - unset($data); - // Don't parse string if we're not at the end - // and don't have a new line inside - if (! str_contains($buffer, $mediawiki_new_line)) { - continue; - } - } - - // Because of reading chunk by chunk, the first line from the buffer - // contains only a portion of an actual line from the imported file. - // Therefore, we have to append it to the last line from the previous - // chunk. If we are at the first chunk, $last_chunk_line should be empty. - $buffer = $last_chunk_line . $buffer; - - // Process the buffer line by line - $buffer_lines = explode($mediawiki_new_line, $buffer); - - $full_buffer_lines_count = count($buffer_lines); - // If the reading is not finalized, the final line of the current chunk - // will not be complete - if (! $finished) { - $last_chunk_line = $buffer_lines[--$full_buffer_lines_count]; - } - - for ($line_nr = 0; $line_nr < $full_buffer_lines_count; ++$line_nr) { - $cur_buffer_line = trim($buffer_lines[$line_nr]); - - // If the line is empty, go to the next one - if ($cur_buffer_line === '') { - continue; - } - - $first_character = $cur_buffer_line[0]; - $matches = []; - - // Check beginning of comment - if (! strcmp(mb_substr($cur_buffer_line, 0, 4), '')) { - // Only data comments are closed. The structure comments - // will be closed when a data comment begins (in order to - // skip structure tables) - if ($inside_data_comment) { - $inside_data_comment = false; - } - - // End comments that are not related to table structure - if (! $inside_structure_comment) { - $inside_comment = false; - } - } else { - // Check table name - $match_table_name = []; - if (preg_match('/^Table data for `(.*)`$/', $cur_buffer_line, $match_table_name)) { - $cur_table_name = $match_table_name[1]; - $inside_data_comment = true; - - $inside_structure_comment = $this->mngInsideStructComm($inside_structure_comment); - } elseif (preg_match('/^Table structure for `(.*)`$/', $cur_buffer_line, $match_table_name)) { - // The structure comments will be ignored - $inside_structure_comment = true; - } - } - - continue; - } - - if (preg_match('/^\{\|(.*)$/', $cur_buffer_line, $matches)) { - // Check start of table - - // This will store all the column info on all rows from - // the current table read from the buffer - $cur_temp_table = []; - - // Will be used as storage for the current row in the buffer - // Once all its columns are read, it will be added to - // $cur_temp_table and then it will be emptied - $cur_temp_line = []; - - // Helps us differentiate the header columns - // from the normal columns - $in_table_header = false; - // End processing because the current line does not - // contain any column information - } elseif ( - mb_substr($cur_buffer_line, 0, 2) === '|-' - || mb_substr($cur_buffer_line, 0, 2) === '|+' - || mb_substr($cur_buffer_line, 0, 2) === '|}' - ) { - // Check begin row or end table - - // Add current line to the values storage - if (! empty($cur_temp_line)) { - // If the current line contains header cells - // ( marked with '!' ), - // it will be marked as table header - if ($in_table_header) { - // Set the header columns - $cur_temp_table_headers = $cur_temp_line; - } else { - // Normal line, add it to the table - $cur_temp_table[] = $cur_temp_line; - } - } - - // Empty the temporary buffer - $cur_temp_line = []; - - // No more processing required at the end of the table - if (mb_substr($cur_buffer_line, 0, 2) === '|}') { - $current_table = [ - $cur_table_name, - $cur_temp_table_headers, - $cur_temp_table, - ]; - - // Import the current table data into the database - $this->importDataOneTable($current_table, $sql_data); - - // Reset table name - $cur_table_name = ''; - } - // What's after the row tag is now only attributes - } elseif (($first_character === '|') || ($first_character === '!')) { - // Check cell elements - - // Header cells - if ($first_character === '!') { - // Mark as table header, but treat as normal row - $cur_buffer_line = str_replace('!!', '||', $cur_buffer_line); - // Will be used to set $cur_temp_line as table header - $in_table_header = true; - } else { - $in_table_header = false; - } - - // Loop through each table cell - $cells = $this->explodeMarkup($cur_buffer_line); - foreach ($cells as $cell) { - $cell = $this->getCellData($cell); - - // Delete the beginning of the column, if there is one - $cell = trim($cell); - $col_start_chars = [ - '|', - '!', - ]; - foreach ($col_start_chars as $col_start_char) { - $cell = $this->getCellContent($cell, $col_start_char); - } - - // Add the cell to the row - $cur_temp_line[] = $cell; - } - } else { - // If it's none of the above, then the current line has a bad - // format - $message = Message::error( - __('Invalid format of mediawiki input on line:
            %s.') - ); - $message->addParam($cur_buffer_line); - $error = true; - } - } - } - } - - /** - * Imports data from a single table - * - * @param array $table containing all table info: - * $table[0] - string - * containing table name - * $table[1] - array[] of - * table headers $table[2] - - * array[][] of table content - * rows - * @param array $sql_data 2-element array with sql data - * - * @global bool $analyze whether to scan for column types - */ - private function importDataOneTable(array $table, array &$sql_data): void - { - $analyze = $this->getAnalyze(); - if ($analyze) { - // Set the table name - $this->setTableName($table[0]); - - // Set generic names for table headers if they don't exist - $this->setTableHeaders($table[1], $table[2][0]); - - // Create the tables array to be used in Import::buildSql() - $tables = []; - $tables[] = [ - $table[0], - $table[1], - $table[2], - ]; - - // Obtain the best-fit MySQL types for each column - $analyses = []; - $analyses[] = $this->import->analyzeTable($tables[0]); - - $this->executeImportTables($tables, $analyses, $sql_data); - } - - // Commit any possible data in buffers - $this->import->runQuery('', '', $sql_data); - } - - /** - * Sets the table name - * - * @param string $table_name reference to the name of the table - */ - private function setTableName(&$table_name): void - { - global $dbi; - - if (! empty($table_name)) { - return; - } - - $result = $dbi->fetchResult('SHOW TABLES'); - // todo check if the name below already exists - $table_name = 'TABLE ' . (count($result) + 1); - } - - /** - * Set generic names for table headers, if they don't exist - * - * @param array $table_headers reference to the array containing the headers - * of a table - * @param array $table_row array containing the first content row - */ - private function setTableHeaders(array &$table_headers, array $table_row): void - { - if (! empty($table_headers)) { - return; - } - - // The first table row should contain the number of columns - // If they are not set, generic names will be given (COL 1, COL 2, etc) - $num_cols = count($table_row); - for ($i = 0; $i < $num_cols; ++$i) { - $table_headers[$i] = 'COL ' . ($i + 1); - } - } - - /** - * Sets the database name and additional options and calls Import::buildSql() - * Used in PMA_importDataAllTables() and $this->importDataOneTable() - * - * @param array $tables structure: - * array( - * array(table_name, array() column_names, array()() - * rows) - * ) - * @param array $analyses structure: - * $analyses = array( - * array(array() column_types, array() column_sizes) - * ) - * @param array $sql_data 2-element array with sql data - * - * @global string $db name of the database to import in - */ - private function executeImportTables(array &$tables, array &$analyses, array &$sql_data): void - { - global $db; - - // $db_name : The currently selected database name, if applicable - // No backquotes - // $options : An associative array of options - [$db_name, $options] = $this->getDbnameAndOptions($db, 'mediawiki_DB'); - - // Array of SQL strings - // Non-applicable parameters - $create = null; - - // Create and execute necessary SQL statements from data - $this->import->buildSql($db_name, $tables, $analyses, $create, $options, $sql_data); - } - - /** - * Replaces all instances of the '||' separator between delimiters - * in a given string - * - * @param string $replace the string to be replaced with - * @param string $subject the text to be replaced - * - * @return string with replacements - */ - private function delimiterReplace($replace, $subject) - { - // String that will be returned - $cleaned = ''; - // Possible states of current character - $inside_tag = false; - $inside_attribute = false; - // Attributes can be declared with either " or ' - $start_attribute_character = false; - - // The full separator is "||"; - // This remembers if the previous character was '|' - $partial_separator = false; - - // Parse text char by char - for ($i = 0, $iMax = strlen($subject); $i < $iMax; $i++) { - $cur_char = $subject[$i]; - // Check for separators - if ($cur_char === '|') { - // If we're not inside a tag, then this is part of a real separator, - // so we append it to the current segment - if (! $inside_attribute) { - $cleaned .= $cur_char; - if ($partial_separator) { - $inside_tag = false; - $inside_attribute = false; - } - } elseif ($partial_separator) { - // If we are inside a tag, we replace the current char with - // the placeholder and append that to the current segment - $cleaned .= $replace; - } - - // If the previous character was also '|', then this ends a - // full separator. If not, this may be the beginning of one - $partial_separator = ! $partial_separator; - } else { - // If we're inside a tag attribute and the current character is - // not '|', but the previous one was, it means that the single '|' - // was not appended, so we append it now - if ($partial_separator && $inside_attribute) { - $cleaned .= '|'; - } - - // If the char is different from "|", no separator can be formed - $partial_separator = false; - - // any other character should be appended to the current segment - $cleaned .= $cur_char; - - if ($cur_char === '<' && ! $inside_attribute) { - // start of a tag - $inside_tag = true; - } elseif ($cur_char === '>' && ! $inside_attribute) { - // end of a tag - $inside_tag = false; - } elseif (($cur_char === '"' || $cur_char == "'") && $inside_tag) { - // start or end of an attribute - if (! $inside_attribute) { - $inside_attribute = true; - // remember the attribute`s declaration character (" or ') - $start_attribute_character = $cur_char; - } else { - if ($cur_char == $start_attribute_character) { - $inside_attribute = false; - // unset attribute declaration character - $start_attribute_character = false; - } - } - } - } - } - - return $cleaned; - } - - /** - * Separates a string into items, similarly to explode - * Uses the '||' separator (which is standard in the mediawiki format) - * and ignores any instances of it inside markup tags - * Used in parsing buffer lines containing data cells - * - * @param string $text text to be split - * - * @return array - */ - private function explodeMarkup($text) - { - $separator = '||'; - $placeholder = "\x00"; - - // Remove placeholder instances - $text = str_replace($placeholder, '', $text); - - // Replace instances of the separator inside HTML-like - // tags with the placeholder - $cleaned = $this->delimiterReplace($placeholder, $text); - // Explode, then put the replaced separators back in - $items = explode($separator, $cleaned); - foreach ($items as $i => $str) { - $items[$i] = str_replace($placeholder, $separator, $str); - } - - return $items; - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Returns true if the table should be analyzed, false otherwise - */ - private function getAnalyze(): bool - { - return $this->analyze; - } - - /** - * Sets to true if the table should be analyzed, false otherwise - * - * @param bool $analyze status - */ - private function setAnalyze($analyze): void - { - $this->analyze = $analyze; - } - - /** - * Get cell - * - * @param string $cell Cell - * - * @return mixed - */ - private function getCellData($cell) - { - // A cell could contain both parameters and data - $cell_data = explode('|', $cell, 2); - - // A '|' inside an invalid link should not - // be mistaken as delimiting cell parameters - if (! str_contains($cell_data[0], '[[')) { - return $cell; - } - - if (count($cell_data) === 1) { - return $cell_data[0]; - } - - return $cell_data[1]; - } - - /** - * Manage $inside_structure_comment - * - * @param bool $inside_structure_comment Value to test - */ - private function mngInsideStructComm($inside_structure_comment): bool - { - // End ignoring structure rows - if ($inside_structure_comment) { - $inside_structure_comment = false; - } - - return $inside_structure_comment; - } - - /** - * Get cell content - * - * @param string $cell Cell - * @param string $col_start_char Start char - * - * @return string - */ - private function getCellContent($cell, $col_start_char) - { - if (mb_strpos($cell, $col_start_char) === 0) { - $cell = trim(mb_substr($cell, 1)); - } - - return $cell; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportSql.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportSql.php deleted file mode 100644 index a881c1f..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ImportSql.php +++ /dev/null @@ -1,193 +0,0 @@ -setText('SQL'); - $importPluginProperties->setExtension('sql'); - $importPluginProperties->setOptionsText(__('Options')); - - $compats = $dbi->getCompatibilities(); - if (count($compats) > 0) { - $values = []; - foreach ($compats as $val) { - $values[$val] = $val; - } - - // create the root group that will be the options field for - // $importPluginProperties - // this will be shown as "Format specific options" - $importSpecificOptions = new OptionsPropertyRootGroup('Format Specific Options'); - - // general options main group - $generalOptions = new OptionsPropertyMainGroup('general_opts'); - // create primary items and add them to the group - $leaf = new SelectPropertyItem( - 'compatibility', - __('SQL compatibility mode:') - ); - $leaf->setValues($values); - $leaf->setDoc( - [ - 'manual_MySQL_Database_Administration', - 'Server_SQL_mode', - ] - ); - $generalOptions->addProperty($leaf); - $leaf = new BoolPropertyItem( - 'no_auto_value_on_zero', - __('Do not use AUTO_INCREMENT for zero values') - ); - $leaf->setDoc( - [ - 'manual_MySQL_Database_Administration', - 'Server_SQL_mode', - 'sqlmode_no_auto_value_on_zero', - ] - ); - $generalOptions->addProperty($leaf); - - // add the main group to the root group - $importSpecificOptions->addProperty($generalOptions); - // set the options for the import plugin property item - $importPluginProperties->setOptions($importSpecificOptions); - } - - return $importPluginProperties; - } - - /** - * Handles the whole import logic - * - * @param array $sql_data 2-element array with sql data - */ - public function doImport(?File $importHandle = null, array &$sql_data = []): void - { - global $error, $timeout_passed, $dbi; - - // Handle compatibility options. - $this->setSQLMode($dbi, $_REQUEST); - - $bq = new BufferedQuery(); - if (isset($_POST['sql_delimiter'])) { - $bq->setDelimiter($_POST['sql_delimiter']); - } - - /** - * Will be set in Import::getNextChunk(). - * - * @global bool $GLOBALS ['finished'] - */ - $GLOBALS['finished'] = false; - - while (! $error && (! $timeout_passed)) { - // Getting the first statement, the remaining data and the last - // delimiter. - $statement = $bq->extract(); - - // If there is no full statement, we are looking for more data. - if (empty($statement)) { - // Importing new data. - $newData = $this->import->getNextChunk($importHandle); - - // Subtract data we didn't handle yet and stop processing. - if ($newData === false) { - $GLOBALS['offset'] -= mb_strlen($bq->query); - break; - } - - // Checking if the input buffer has finished. - if ($newData === true) { - $GLOBALS['finished'] = true; - break; - } - - // Convert CR (but not CRLF) to LF otherwise all queries may - // not get executed on some platforms. - $bq->query .= preg_replace("/\r($|[^\n])/", "\n$1", $newData); - - continue; - } - - // Executing the query. - $this->import->runQuery($statement, $statement, $sql_data); - } - - // Extracting remaining statements. - while (! $error && ! $timeout_passed && ! empty($bq->query)) { - $statement = $bq->extract(true); - if (empty($statement)) { - continue; - } - - $this->import->runQuery($statement, $statement, $sql_data); - } - - // Finishing. - $this->import->runQuery('', '', $sql_data); - } - - /** - * Handle compatibility options - * - * @param DatabaseInterface $dbi Database interface - * @param array $request Request array - */ - private function setSQLMode($dbi, array $request): void - { - $sql_modes = []; - if (isset($request['sql_compatibility']) && $request['sql_compatibility'] !== 'NONE') { - $sql_modes[] = $request['sql_compatibility']; - } - - if (isset($request['sql_no_auto_value_on_zero'])) { - $sql_modes[] = 'NO_AUTO_VALUE_ON_ZERO'; - } - - if (count($sql_modes) <= 0) { - return; - } - - $dbi->tryQuery( - 'SET SQL_MODE="' . implode(',', $sql_modes) . '"' - ); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ShapeFileImport.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ShapeFileImport.php deleted file mode 100644 index ad33377..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/ShapeFileImport.php +++ /dev/null @@ -1,39 +0,0 @@ - $id, - 'finished' => false, - 'percent' => 0, - 'total' => 0, - 'complete' => 0, - 'plugin' => self::getIdKey(), - ]; - } - - return $_SESSION[$SESSION_KEY][$id]; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/Upload/UploadProgress.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/Upload/UploadProgress.php deleted file mode 100644 index fc971e1..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Import/Upload/UploadProgress.php +++ /dev/null @@ -1,101 +0,0 @@ - $id, - 'finished' => false, - 'percent' => 0, - 'total' => 0, - 'complete' => 0, - 'plugin' => self::getIdKey(), - ]; - } - - $ret = $_SESSION[$SESSION_KEY][$id]; - - if (! Ajax::progressCheck() || $ret['finished']) { - return $ret; - } - - $status = null; - // @see https://pecl.php.net/package/uploadprogress - if (function_exists('uploadprogress_get_info')) { - // phpcs:ignore SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly.ReferenceViaFullyQualifiedName - $status = \uploadprogress_get_info($id); - } - - if ($status) { - $ret['finished'] = false; - - if ($status['bytes_uploaded'] == $status['bytes_total']) { - $ret['finished'] = true; - } - - $ret['total'] = $status['bytes_total']; - $ret['complete'] = $status['bytes_uploaded']; - - if ($ret['total'] > 0) { - $ret['percent'] = $ret['complete'] / $ret['total'] * 100; - } - } else { - $ret = [ - 'id' => $id, - 'finished' => true, - 'percent' => 100, - 'total' => $ret['total'], - 'complete' => $ret['total'], - 'plugin' => self::getIdKey(), - ]; - } - - $_SESSION[$SESSION_KEY][$id] = $ret; - - return $ret; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/ImportPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/ImportPlugin.php deleted file mode 100644 index 4573d09..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/ImportPlugin.php +++ /dev/null @@ -1,97 +0,0 @@ -import = new Import(); - $this->init(); - $this->properties = $this->setProperties(); - } - - /** - * Plugin specific initializations. - */ - protected function init(): void - { - } - - /** - * Handles the whole import logic - * - * @param array $sql_data 2-element array with sql data - */ - abstract public function doImport(?File $importHandle = null, array &$sql_data = []): void; - - /** - * Gets the import specific format plugin properties - * - * @return ImportPluginProperties - */ - public function getProperties(): PluginPropertyItem - { - return $this->properties; - } - - /** - * Sets the export plugins properties and is implemented by each import plugin. - */ - abstract protected function setProperties(): ImportPluginProperties; - - /** - * Define DB name and options - * - * @param string $currentDb DB - * @param string $defaultDb Default DB name - * - * @return array DB name and options (an associative array of options) - */ - protected function getDbnameAndOptions($currentDb, $defaultDb) - { - $db_name = $defaultDb; - $options = null; - - if (strlen((string) $currentDb) > 0) { - $db_name = $currentDb; - $options = ['create_db' => false]; - } - - return [ - $db_name, - $options, - ]; - } - - public function isAvailable(): bool - { - return true; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Schema/Dia/DiaRelationSchema.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Schema/Dia/DiaRelationSchema.php deleted file mode 100644 index 2669779..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Schema/Dia/DiaRelationSchema.php +++ /dev/null @@ -1,236 +0,0 @@ -setShowColor(isset($_REQUEST['dia_show_color'])); - $this->setShowKeys(isset($_REQUEST['dia_show_keys'])); - $this->setOrientation((string) $_REQUEST['dia_orientation']); - $this->setPaper((string) $_REQUEST['dia_paper']); - - $this->diagram->startDiaDoc( - $this->paper, - $this->topMargin, - $this->bottomMargin, - $this->leftMargin, - $this->rightMargin, - $this->orientation - ); - - $alltables = $this->getTablesFromRequest(); - - foreach ($alltables as $table) { - if (isset($this->tables[$table])) { - continue; - } - - $this->tables[$table] = new TableStatsDia( - $this->diagram, - $this->db, - $table, - $this->pageNumber, - $this->showKeys, - $this->offline - ); - } - - $seen_a_relation = false; - foreach ($alltables as $one_table) { - $exist_rel = $this->relation->getForeigners($this->db, $one_table, '', 'both'); - if (! $exist_rel) { - continue; - } - - $seen_a_relation = true; - foreach ($exist_rel as $master_field => $rel) { - /* put the foreign table on the schema only if selected - * by the user - * (do not use array_search() because we would have to - * to do a === false and this is not PHP3 compatible) - */ - if ($master_field !== 'foreign_keys_data') { - if (in_array($rel['foreign_table'], $alltables)) { - $this->addRelation( - $one_table, - $master_field, - $rel['foreign_table'], - $rel['foreign_field'], - $this->showKeys - ); - } - - continue; - } - - foreach ($rel as $one_key) { - if (! in_array($one_key['ref_table_name'], $alltables)) { - continue; - } - - foreach ($one_key['index_list'] as $index => $one_field) { - $this->addRelation( - $one_table, - $one_field, - $one_key['ref_table_name'], - $one_key['ref_index_list'][$index], - $this->showKeys - ); - } - } - } - } - - $this->drawTables(); - - if ($seen_a_relation) { - $this->drawRelations(); - } - - $this->diagram->endDiaDoc(); - } - - /** - * Output Dia Document for download - */ - public function showOutput(): void - { - $this->diagram->showOutput($this->getFileName('.dia')); - } - - /** - * Defines relation objects - * - * @see TableStatsDia::__construct(),RelationStatsDia::__construct() - * - * @param string $masterTable The master table name - * @param string $masterField The relation field in the master table - * @param string $foreignTable The foreign table name - * @param string $foreignField The relation field in the foreign table - * @param bool $showKeys Whether to display ONLY keys or not - */ - private function addRelation( - $masterTable, - $masterField, - $foreignTable, - $foreignField, - $showKeys - ): void { - if (! isset($this->tables[$masterTable])) { - $this->tables[$masterTable] = new TableStatsDia( - $this->diagram, - $this->db, - $masterTable, - $this->pageNumber, - $showKeys - ); - } - - if (! isset($this->tables[$foreignTable])) { - $this->tables[$foreignTable] = new TableStatsDia( - $this->diagram, - $this->db, - $foreignTable, - $this->pageNumber, - $showKeys - ); - } - - $this->relations[] = new RelationStatsDia( - $this->diagram, - $this->tables[$masterTable], - $masterField, - $this->tables[$foreignTable], - $foreignField - ); - } - - /** - * Draws relation references - * - * connects master table's master field to - * foreign table's foreign field using Dia object - * type Database - Reference - * - * @see RelationStatsDia::relationDraw() - */ - private function drawRelations(): void - { - foreach ($this->relations as $relation) { - $relation->relationDraw($this->showColor); - } - } - - /** - * Draws tables - * - * Tables are generated using Dia object type Database - Table - * primary fields are underlined and bold in tables - * - * @see TableStatsDia::tableDraw() - */ - private function drawTables(): void - { - foreach ($this->tables as $table) { - $table->tableDraw($this->showColor); - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/SchemaPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/SchemaPlugin.php deleted file mode 100644 index ae3e393..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/SchemaPlugin.php +++ /dev/null @@ -1,99 +0,0 @@ -init(); - $this->properties = $this->setProperties(); - } - - /** - * Plugin specific initializations. - */ - protected function init(): void - { - } - - /** - * Gets the export specific format plugin properties - * - * @return SchemaPluginProperties - */ - public function getProperties(): PluginPropertyItem - { - return $this->properties; - } - - /** - * Sets the export plugins properties and is implemented by each schema export plugin. - */ - abstract protected function setProperties(): SchemaPluginProperties; - - /** - * Exports the schema into the specified format. - * - * @param string $db database name - */ - abstract public function exportSchema($db): bool; - - /** - * Adds export options common to all plugins. - * - * @param OptionsPropertyMainGroup $propertyGroup property group - */ - protected function addCommonOptions(OptionsPropertyMainGroup $propertyGroup): void - { - $leaf = new BoolPropertyItem('show_color', __('Show color')); - $propertyGroup->addProperty($leaf); - $leaf = new BoolPropertyItem('show_keys', __('Only show keys')); - $propertyGroup->addProperty($leaf); - } - - /** - * Returns the array of paper sizes - * - * @return array array of paper sizes - */ - protected function getPaperSizeArray() - { - $ret = []; - foreach ($GLOBALS['cfg']['PDFPageSizes'] as $val) { - $ret[$val] = $val; - } - - return $ret; - } - - public function isAvailable(): bool - { - return true; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php deleted file mode 100644 index 9ad9233..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/Bool2TextTransformationsPlugin.php +++ /dev/null @@ -1,65 +0,0 @@ -getOptions($options, $cfg['DefaultTransformations']['Bool2Text']); - - if ($buffer == '0') { - return $options[1]; // return false label - } - - return $options[0]; // or true one if nonzero - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the transformation name of the specific plugin - * - * @return string - */ - public static function getName() - { - return 'Bool2Text'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php deleted file mode 100644 index 21af094..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/FormattedTransformationsPlugin.php +++ /dev/null @@ -1,62 +0,0 @@ -'; - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the transformation name of the specific plugin - * - * @return string - */ - public static function getName() - { - return 'Formatted'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php deleted file mode 100644 index 5904dc0..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/HexTransformationsPlugin.php +++ /dev/null @@ -1,71 +0,0 @@ -getOptions($options, $cfg['DefaultTransformations']['Hex']); - $options[0] = intval($options[0]); - - if ($options[0] < 1) { - return bin2hex($buffer); - } - - return chunk_split(bin2hex($buffer), $options[0], ' '); - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the transformation name of the specific plugin - * - * @return string - */ - public static function getName() - { - return 'Hex'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php deleted file mode 100644 index d453c61..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/InlineTransformationsPlugin.php +++ /dev/null @@ -1,76 +0,0 @@ -getOptions($options, $cfg['DefaultTransformations']['Inline']); - - if ($GLOBALS['config']->get('PMA_IS_GD2') === 1) { - return '[' . htmlspecialchars($buffer) . ']'; - } - - return '[' . htmlspecialchars($buffer) . ']'; - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the transformation name of the specific plugin - * - * @return string - */ - public static function getName() - { - return 'Inline'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php deleted file mode 100644 index aac53e9..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/LongToIPv4TransformationsPlugin.php +++ /dev/null @@ -1,60 +0,0 @@ -getOptions($options, $cfg['DefaultTransformations']['PreApPend']); - - //just prepend and/or append the options to the original text - return htmlspecialchars($options[0]) . htmlspecialchars($buffer) - . htmlspecialchars($options[1]); - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the transformation name of the specific plugin - * - * @return string - */ - public static function getName() - { - return 'PreApPend'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php deleted file mode 100644 index 7a16c81..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/RegexValidationTransformationsPlugin.php +++ /dev/null @@ -1,73 +0,0 @@ -reset(); - if (! empty($options[0]) && ! preg_match($options[0], $buffer)) { - $this->success = false; - $this->error = sprintf( - __('Validation failed for the input string %s.'), - htmlspecialchars($buffer) - ); - } - - return $buffer; - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the transformation name of the specific plugin - * - * @return string - */ - public static function getName() - { - return 'Regex Validation'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php deleted file mode 100644 index 383d4a4..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Abs/SQLTransformationsPlugin.php +++ /dev/null @@ -1,56 +0,0 @@ -'; - $html .= ''; - } - - $html .= ''; - - return $html; - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the transformation name of the specific plugin - * - * @return string - */ - public static function getName() - { - return 'Text file upload'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php deleted file mode 100644 index 45debc5..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptobinary.php +++ /dev/null @@ -1,135 +0,0 @@ -'; - } - - $class = 'transform_IPToBin'; - - return $html . ''; - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the transformation name of the plugin - * - * @return string - */ - public static function getName() - { - return 'IPv4/IPv6 To Binary'; - } - - /** - * Gets the plugin`s MIME type - * - * @return string - */ - public static function getMIMEType() - { - return 'Text'; - } - - /** - * Gets the plugin`s MIME subtype - * - * @return string - */ - public static function getMIMESubtype() - { - return 'Plain'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptolong.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptolong.php deleted file mode 100644 index 594e399..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_Iptolong.php +++ /dev/null @@ -1,127 +0,0 @@ -'; - } - } - - return $html . ''; - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the transformation name of the plugin - * - * @return string - */ - public static function getName() - { - return 'IPv4/IPv6 To Long'; - } - - /** - * Gets the plugin`s MIME type - * - * @return string - */ - public static function getMIMEType() - { - return 'Text'; - } - - /** - * Gets the plugin`s MIME subtype - * - * @return string - */ - public static function getMIMESubtype() - { - return 'Plain'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php deleted file mode 100644 index aa50898..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Input/Text_Plain_RegexValidation.php +++ /dev/null @@ -1,37 +0,0 @@ -getHeader() - ->getScripts(); - $scripts->addFile('vendor/codemirror/lib/codemirror.js'); - $scripts->addFile('vendor/codemirror/mode/javascript/javascript.js'); - $scripts->addFile('vendor/codemirror/addon/runmode/runmode.js'); - $scripts->addFile('transformations/json.js'); - } - - /** - * Gets the transformation description of the specific plugin - * - * @return string - */ - public static function getInfo() - { - return __('Formats text as JSON with syntax highlighting.'); - } - - /** - * Does the actual work of each specific transformations plugin. - * - * @param string $buffer text to be transformed - * @param array $options transformation options - * @param FieldMetadata|null $meta meta information - * - * @return string - */ - public function applyTransformation($buffer, array $options = [], ?FieldMetadata $meta = null) - { - return '
            ' . "\n"
            -        . htmlspecialchars($buffer) . "\n"
            -        . '
            '; - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the plugin`s MIME type - * - * @return string - */ - public static function getMIMEType() - { - return 'Text'; - } - - /** - * Gets the plugin`s MIME subtype - * - * @return string - */ - public static function getMIMESubtype() - { - return 'Plain'; - } - - /** - * Gets the transformation name of the specific plugin - * - * @return string - */ - public static function getName() - { - return 'JSON'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php deleted file mode 100644 index e07b41c..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/Transformations/Output/Text_Plain_Xml.php +++ /dev/null @@ -1,94 +0,0 @@ -getHeader() - ->getScripts(); - $scripts->addFile('vendor/codemirror/lib/codemirror.js'); - $scripts->addFile('vendor/codemirror/mode/xml/xml.js'); - $scripts->addFile('vendor/codemirror/addon/runmode/runmode.js'); - $scripts->addFile('transformations/xml.js'); - } - - /** - * Gets the transformation description of the specific plugin - * - * @return string - */ - public static function getInfo() - { - return __('Formats text as XML with syntax highlighting.'); - } - - /** - * Does the actual work of each specific transformations plugin. - * - * @param string $buffer text to be transformed - * @param array $options transformation options - * @param FieldMetadata|null $meta meta information - * - * @return string - */ - public function applyTransformation($buffer, array $options = [], ?FieldMetadata $meta = null) - { - return '
            ' . "\n"
            -        . htmlspecialchars($buffer) . "\n"
            -        . '
            '; - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the plugin`s MIME type - * - * @return string - */ - public static function getMIMEType() - { - return 'Text'; - } - - /** - * Gets the plugin`s MIME subtype - * - * @return string - */ - public static function getMIMESubtype() - { - return 'Plain'; - } - - /** - * Gets the transformation name of the specific plugin - * - * @return string - */ - public static function getName() - { - return 'XML'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TransformationsPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TransformationsPlugin.php deleted file mode 100644 index ea96c53..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TransformationsPlugin.php +++ /dev/null @@ -1,64 +0,0 @@ - $value) { - if (isset($options[$key]) && $options[$key] !== '') { - $result[$key] = $options[$key]; - } else { - $result[$key] = $value; - } - } - - return $result; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactor/Key.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactor/Key.php deleted file mode 100644 index ef6de23..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactor/Key.php +++ /dev/null @@ -1,216 +0,0 @@ -twofactor->config['settings']['registrations'])) { - return; - } - - $this->twofactor->config['settings']['registrations'] = []; - } - - /** - * Returns array of U2F registration objects - * - * @return array - */ - public function getRegistrations() - { - $result = []; - foreach ($this->twofactor->config['settings']['registrations'] as $index => $data) { - $reg = new stdClass(); - $reg->keyHandle = $data['keyHandle']; - $reg->publicKey = $data['publicKey']; - $reg->certificate = $data['certificate']; - $reg->counter = $data['counter']; - $reg->index = $index; - $result[] = $reg; - } - - return $result; - } - - /** - * Checks authentication, returns true on success - */ - public function check(): bool - { - $this->provided = false; - if (! isset($_POST['u2f_authentication_response'], $_SESSION['authenticationRequest'])) { - return false; - } - - $this->provided = true; - try { - $response = json_decode($_POST['u2f_authentication_response']); - if (! is_object($response)) { - return false; - } - - $auth = U2FServer::authenticate( - $_SESSION['authenticationRequest'], - $this->getRegistrations(), - $response - ); - $this->twofactor->config['settings']['registrations'][$auth->index]['counter'] = $auth->counter; - $this->twofactor->save(); - - return true; - } catch (U2FException $e) { - $this->message = $e->getMessage(); - - return false; - } - } - - /** - * Loads needed javascripts into the page - */ - public function loadScripts(): void - { - $response = ResponseRenderer::getInstance(); - $scripts = $response->getHeader()->getScripts(); - $scripts->addFile('vendor/u2f-api-polyfill.js'); - $scripts->addFile('u2f.js'); - } - - /** - * Renders user interface to enter two-factor authentication - * - * @return string HTML code - */ - public function render() - { - $request = U2FServer::makeAuthentication( - $this->getRegistrations(), - $this->getAppId(true) - ); - $_SESSION['authenticationRequest'] = $request; - $this->loadScripts(); - - return $this->template->render('login/twofactor/key', [ - 'request' => json_encode($request), - 'is_https' => $GLOBALS['config']->isHttps(), - ]); - } - - /** - * Renders user interface to configure two-factor authentication - * - * @return string HTML code - * - * @throws U2FException - * @throws Throwable - * @throws LoaderError - * @throws RuntimeError - * @throws SyntaxError - */ - public function setup() - { - $registrationData = U2FServer::makeRegistration( - $this->getAppId(true), - $this->getRegistrations() - ); - $_SESSION['registrationRequest'] = $registrationData['request']; - - $this->loadScripts(); - - return $this->template->render('login/twofactor/key_configure', [ - 'request' => json_encode($registrationData['request']), - 'signatures' => json_encode($registrationData['signatures']), - 'is_https' => $GLOBALS['config']->isHttps(), - ]); - } - - /** - * Performs backend configuration - */ - public function configure(): bool - { - $this->provided = false; - if (! isset($_POST['u2f_registration_response'], $_SESSION['registrationRequest'])) { - return false; - } - - $this->provided = true; - try { - $response = json_decode($_POST['u2f_registration_response']); - if (! is_object($response)) { - return false; - } - - $registration = U2FServer::register($_SESSION['registrationRequest'], $response); - $this->twofactor->config['settings']['registrations'][] = [ - 'keyHandle' => $registration->getKeyHandle(), - 'publicKey' => $registration->getPublicKey(), - 'certificate' => $registration->getCertificate(), - 'counter' => $registration->getCounter(), - ]; - - return true; - } catch (U2FException $e) { - $this->message = $e->getMessage(); - - return false; - } - } - - /** - * Get user visible name - * - * @return string - */ - public static function getName() - { - return __('Hardware Security Key (FIDO U2F)'); - } - - /** - * Get user visible description - * - * @return string - */ - public static function getDescription() - { - return __('Provides authentication using hardware security tokens supporting FIDO U2F, such as a Yubikey.'); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactorPlugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactorPlugin.php deleted file mode 100644 index 38f8bcf..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Plugins/TwoFactorPlugin.php +++ /dev/null @@ -1,183 +0,0 @@ -twofactor = $twofactor; - $this->template = new Template(); - } - - /** - * Returns authentication error message - * - * @return string - */ - public function getError() - { - if ($this->provided) { - if (! empty($this->message)) { - return Message::rawError( - sprintf(__('Two-factor authentication failed: %s'), $this->message) - )->getDisplay(); - } - - return Message::rawError( - __('Two-factor authentication failed.') - )->getDisplay(); - } - - return ''; - } - - /** - * Checks authentication, returns true on success - */ - public function check(): bool - { - return true; - } - - /** - * Renders user interface to enter two-factor authentication - * - * @return string HTML code - */ - public function render() - { - return ''; - } - - /** - * Renders user interface to configure two-factor authentication - * - * @return string HTML code - */ - public function setup() - { - return ''; - } - - /** - * Performs backend configuration - */ - public function configure(): bool - { - return true; - } - - /** - * Get user visible name - * - * @return string - */ - public static function getName() - { - return __('No Two-Factor Authentication'); - } - - /** - * Get user visible description - * - * @return string - */ - public static function getDescription() - { - return __('Login using password only.'); - } - - /** - * Return an application ID - * - * Either hostname or hostname with scheme. - * - * @param bool $return_url Whether to generate URL - * - * @return string - */ - public function getAppId($return_url) - { - global $config; - - $url = $config->get('PmaAbsoluteUri'); - $parsed = []; - if (! empty($url)) { - $parsedUrl = parse_url($url); - - if (is_array($parsedUrl)) { - $parsed = $parsedUrl; - } - } - - if (! isset($parsed['scheme']) || strlen($parsed['scheme']) === 0) { - $parsed['scheme'] = $config->isHttps() ? 'https' : 'http'; - } - - if (! isset($parsed['host']) || strlen($parsed['host']) === 0) { - $parsed['host'] = Core::getenv('HTTP_HOST'); - } - - if ($return_url) { - $port = ''; - if (isset($parsed['port'])) { - $port = ':' . $parsed['port']; - } - - return sprintf('%s://%s%s', $parsed['scheme'], $parsed['host'], $port); - } - - return $parsed['host']; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Options/Items/TextPropertyItem.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Options/Items/TextPropertyItem.php deleted file mode 100644 index b892025..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Options/Items/TextPropertyItem.php +++ /dev/null @@ -1,28 +0,0 @@ -getProperties() == null && in_array($property, $this->getProperties(), true)) { - return; - } - - $this->properties[] = $property; - } - - /** - * Removes a property from the group of properties - * - * @param OptionsPropertyItem $property the property instance to be removed - * from the group - */ - public function removeProperty($property): void - { - $this->properties = array_diff( - $this->getProperties(), - [$property] - ); - } - - /* ~~~~~~~~~~~~~~~~~~~~ Getters and Setters ~~~~~~~~~~~~~~~~~~~~ */ - - /** - * Gets the instance of the class - * - * @return OptionsPropertyGroup - */ - public function getGroup() - { - return $this; - } - - /** - * Gets the group of properties - * - * @return array - */ - public function getProperties() - { - return $this->properties; - } - - /** - * Gets the number of properties - */ - public function getNrOfProperties(): int - { - if ($this->properties === null) { - return 0; - } - - return count($this->properties); - } - - /** - * Countable interface implementation. - */ - public function count(): int - { - return $this->getNrOfProperties(); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/ExportPluginProperties.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/ExportPluginProperties.php deleted file mode 100644 index f56ccc7..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/ExportPluginProperties.php +++ /dev/null @@ -1,52 +0,0 @@ -forceFile; - } - - /** - * Sets the force file parameter - */ - public function setForceFile(bool $forceFile): void - { - $this->forceFile = $forceFile; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/PluginPropertyItem.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/PluginPropertyItem.php deleted file mode 100644 index 1f1c9d9..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/Plugins/PluginPropertyItem.php +++ /dev/null @@ -1,170 +0,0 @@ -text; - } - - /** - * Sets the text - * - * @param string $text text - */ - public function setText($text): void - { - $this->text = $text; - } - - /** - * Gets the extension - * - * @return string - */ - public function getExtension() - { - return $this->extension; - } - - /** - * Sets the extension - * - * @param string $extension extension - */ - public function setExtension($extension): void - { - $this->extension = $extension; - } - - /** - * Gets the options - * - * @return OptionsPropertyRootGroup|null - */ - public function getOptions() - { - return $this->options; - } - - /** - * Sets the options - * - * @param OptionsPropertyRootGroup $options options - */ - public function setOptions($options): void - { - $this->options = $options; - } - - /** - * Gets the options text - * - * @return string - */ - public function getOptionsText() - { - return $this->optionsText; - } - - /** - * Sets the options text - * - * @param string $optionsText optionsText - */ - public function setOptionsText($optionsText): void - { - $this->optionsText = $optionsText; - } - - /** - * Gets the MIME type - * - * @return string - */ - public function getMimeType() - { - return $this->mimeType; - } - - /** - * Sets the MIME type - * - * @param string $mimeType MIME type - */ - public function setMimeType($mimeType): void - { - $this->mimeType = $mimeType; - } - - /** - * Returns the property type ( either "options", or "plugin" ). - * - * @return string - */ - public function getPropertyType() - { - return 'plugin'; - } - - /** - * Whether each plugin has to be saved as a file - */ - public function getForceFile(): bool - { - return false; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/PropertyItem.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/PropertyItem.php deleted file mode 100644 index eebbb8d..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Properties/PropertyItem.php +++ /dev/null @@ -1,44 +0,0 @@ - $_) { - if (isset($this->tableCache[$one_database])) { - // the + operator does not do the intended effect - // when the cache for one table already exists - if ($table && isset($this->tableCache[$one_database][$table])) { - unset($this->tableCache[$one_database][$table]); - } - - $this->tableCache[$one_database] += $tables[$one_database]; - } else { - $this->tableCache[$one_database] = $tables[$one_database]; - } - } - } - - /** - * Set an item in table cache using dot notation. - * - * @param array|null $contentPath Array with the target path - * @param mixed $value Target value - */ - public function cacheTableContent(?array $contentPath, $value): void - { - $loc = &$this->tableCache; - - if (! isset($contentPath)) { - $loc = $value; - - return; - } - - while (count($contentPath) > 1) { - $key = array_shift($contentPath); - - // If the key doesn't exist at this depth, we will just create an empty - // array to hold the next value, allowing us to create the arrays to hold - // final values at the correct depth. Then we'll keep digging into the - // array. - if (! isset($loc[$key]) || ! is_array($loc[$key])) { - $loc[$key] = []; - } - - $loc = &$loc[$key]; - } - - $loc[array_shift($contentPath)] = $value; - } - - /** - * Get a cached value from table cache. - * - * @param array $contentPath Array of the name of the target value - * @param mixed $default Return value on cache miss - * - * @return mixed cached value or default - */ - public function getCachedTableContent(array $contentPath, $default = null) - { - return Util::getValueByKey($this->tableCache, $contentPath, $default); - } - - public function getCache(): array - { - return $this->tableCache; - } - - public function clearTableCache(): void - { - $this->tableCache = []; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Query/Utilities.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Query/Utilities.php deleted file mode 100644 index 5b9beae..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Query/Utilities.php +++ /dev/null @@ -1,200 +0,0 @@ -'; - $error .= __('Logout and try as another user.') . ''; - } elseif ($error_number == 1005) { - if (str_contains($error_message, 'errno: 13')) { - $error .= ' - ' . $error_message; - $error .= $separator - . __('Please check privileges of directory containing database.'); - } else { - /** - * InnoDB constraints, see - * https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html - */ - $error .= ' - ' . $error_message . - ' (' . __('Details…') . ')'; - } - } else { - $error .= ' - ' . $error_message; - } - - return $error; - } - - /** - * usort comparison callback - * - * @param array $a first argument to sort - * @param array $b second argument to sort - * @param string $sortBy Key to sort by - * @param string $sortOrder The order (ASC/DESC) - * - * @return int a value representing whether $a should be before $b in the - * sorted array or not - */ - public static function usortComparisonCallback(array $a, array $b, string $sortBy, string $sortOrder): int - { - global $cfg; - - /* No sorting when key is not present */ - if (! isset($a[$sortBy], $b[$sortBy])) { - return 0; - } - - // produces f.e.: - // return -1 * strnatcasecmp($a['SCHEMA_TABLES'], $b['SCHEMA_TABLES']) - $compare = $cfg['NaturalOrder'] ? strnatcasecmp( - (string) $a[$sortBy], - (string) $b[$sortBy] - ) : strcasecmp( - (string) $a[$sortBy], - (string) $b[$sortBy] - ); - - return ($sortOrder === 'ASC' ? 1 : -1) * $compare; - } - - /** - * Convert version string to integer. - * - * @param string $version MySQL server version - */ - public static function versionToInt(string $version): int - { - $match = explode('.', $version); - - return (int) sprintf('%d%02d%02d', $match[0], $match[1], intval($match[2])); - } - - /** - * Stores query data into session data for debugging purposes - * - * @param string $query Query text - * @param string|null $errorMessage Error message from getError() - * @param ResultInterface|false $result Query result - * @param int|float $time Time to execute query - */ - public static function debugLogQueryIntoSession(string $query, ?string $errorMessage, $result, $time): void - { - $dbgInfo = []; - - if ($result === false && $errorMessage !== null) { - $dbgInfo['error'] = '' - . htmlspecialchars($errorMessage) . ''; - } - - $dbgInfo['query'] = htmlspecialchars($query); - $dbgInfo['time'] = $time; - // Get and slightly format backtrace, this is used - // in the javascript console. - // Strip call to debugLogQueryIntoSession - $dbgInfo['trace'] = Error::processBacktrace( - array_slice(debug_backtrace(), 1) - ); - $dbgInfo['hash'] = md5($query); - - $_SESSION['debug']['queries'][] = $dbgInfo; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Replication.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Replication.php deleted file mode 100644 index fb4170b..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Replication.php +++ /dev/null @@ -1,171 +0,0 @@ -tryQuery($action . ' SLAVE ' . $control . ';', $link); - } - - /** - * Changes primary for replication replica - * - * @param string $user replication user on primary - * @param string $password password for the user - * @param string $host primary's hostname or IP - * @param int $port port, where mysql is running - * @param array $pos position of mysql replication, array should contain fields File and Position - * @param bool $stop shall we stop replica? - * @param bool $start shall we start replica? - * @param int $link mysql link - * - * @return ResultInterface|false output of CHANGE MASTER mysql command - */ - public function replicaChangePrimary( - $user, - $password, - $host, - $port, - array $pos, - bool $stop, - bool $start, - int $link - ) { - global $dbi; - - if ($stop) { - $this->replicaControl('STOP', null, $link); - } - - $out = $dbi->tryQuery( - 'CHANGE MASTER TO ' . - 'MASTER_HOST=\'' . $host . '\',' . - 'MASTER_PORT=' . ($port * 1) . ',' . - 'MASTER_USER=\'' . $user . '\',' . - 'MASTER_PASSWORD=\'' . $password . '\',' . - 'MASTER_LOG_FILE=\'' . $pos['File'] . '\',' . - 'MASTER_LOG_POS=' . $pos['Position'] . ';', - $link - ); - - if ($start) { - $this->replicaControl('START', null, $link); - } - - return $out; - } - - /** - * This function provides connection to remote mysql server - * - * @param string $user mysql username - * @param string $password password for the user - * @param string $host mysql server's hostname or IP - * @param int $port mysql remote port - * @param string $socket path to unix socket - * - * @return mixed mysql link on success - */ - public function connectToPrimary( - $user, - $password, - $host = null, - $port = null, - $socket = null - ) { - global $dbi; - - $server = []; - $server['user'] = $user; - $server['password'] = $password; - $server['host'] = Core::sanitizeMySQLHost($host); - $server['port'] = $port; - $server['socket'] = $socket; - - // 5th parameter set to true means that it's an auxiliary connection - // and we must not go back to login page if it fails - return $dbi->connect(DatabaseInterface::CONNECT_AUXILIARY, $server); - } - - /** - * Fetches position and file of current binary log on primary - * - * @param int $link mysql link - * - * @return array an array containing File and Position in MySQL replication - * on primary server, useful for {@see Replication::replicaChangePrimary()}. - * @phpstan-return array{'File'?: string, 'Position'?: string} - */ - public function replicaBinLogPrimary(int $link): array - { - global $dbi; - - $data = $dbi->fetchResult('SHOW MASTER STATUS', null, null, $link); - $output = []; - - if (! empty($data)) { - $output['File'] = $data[0]['File']; - $output['Position'] = $data[0]['Position']; - } - - return $output; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/ReplicationInfo.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/ReplicationInfo.php deleted file mode 100644 index 982d8fc..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/ReplicationInfo.php +++ /dev/null @@ -1,191 +0,0 @@ -dbi = $dbi; - } - - public function load(?string $connection = null): void - { - global $urlParams; - - $this->setPrimaryStatus(); - - if (! empty($connection)) { - $this->setMultiPrimaryStatus(); - - if ($this->multiPrimaryStatus) { - $this->setDefaultPrimaryConnection($connection); - $urlParams['primary_connection'] = $connection; - } - } - - $this->setReplicaStatus(); - $this->setPrimaryInfo(); - $this->setReplicaInfo(); - } - - private function setPrimaryStatus(): void - { - $this->primaryStatus = $this->dbi->fetchResult('SHOW MASTER STATUS'); - } - - public function getPrimaryStatus(): array - { - return $this->primaryStatus; - } - - private function setReplicaStatus(): void - { - $this->replicaStatus = $this->dbi->fetchResult('SHOW SLAVE STATUS'); - } - - public function getReplicaStatus(): array - { - return $this->replicaStatus; - } - - private function setMultiPrimaryStatus(): void - { - $this->multiPrimaryStatus = $this->dbi->fetchResult('SHOW ALL SLAVES STATUS'); - } - - private function setDefaultPrimaryConnection(string $connection): void - { - $this->dbi->query(sprintf('SET @@default_master_connection = \'%s\'', $this->dbi->escapeString($connection))); - } - - private static function fill(array $status, string $key): array - { - if (empty($status[0][$key])) { - return []; - } - - return explode(',', $status[0][$key]); - } - - private function setPrimaryInfo(): void - { - $this->primaryInfo = ['status' => false]; - - if (count($this->primaryStatus) > 0) { - $this->primaryInfo['status'] = true; - } - - if (! $this->primaryInfo['status']) { - return; - } - - $this->primaryInfo['Do_DB'] = self::fill($this->primaryStatus, 'Binlog_Do_DB'); - $this->primaryInfo['Ignore_DB'] = self::fill($this->primaryStatus, 'Binlog_Ignore_DB'); - } - - /** - * @return array - */ - public function getPrimaryInfo(): array - { - return $this->primaryInfo; - } - - private function setReplicaInfo(): void - { - $this->replicaInfo = ['status' => false]; - - if (count($this->replicaStatus) > 0) { - $this->replicaInfo['status'] = true; - } - - if (! $this->replicaInfo['status']) { - return; - } - - $this->replicaInfo['Do_DB'] = self::fill($this->replicaStatus, 'Replicate_Do_DB'); - $this->replicaInfo['Ignore_DB'] = self::fill($this->replicaStatus, 'Replicate_Ignore_DB'); - $this->replicaInfo['Do_Table'] = self::fill($this->replicaStatus, 'Replicate_Do_Table'); - $this->replicaInfo['Ignore_Table'] = self::fill($this->replicaStatus, 'Replicate_Ignore_Table'); - $this->replicaInfo['Wild_Do_Table'] = self::fill($this->replicaStatus, 'Replicate_Wild_Do_Table'); - $this->replicaInfo['Wild_Ignore_Table'] = self::fill($this->replicaStatus, 'Replicate_Wild_Ignore_Table'); - } - - /** - * @return array - */ - public function getReplicaInfo(): array - { - return $this->replicaInfo; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/ResponseRenderer.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/ResponseRenderer.php deleted file mode 100644 index 9579003..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/ResponseRenderer.php +++ /dev/null @@ -1,508 +0,0 @@ - - */ - protected static $httpStatusMessages = [ - // Informational - 100 => 'Continue', - 101 => 'Switching Protocols', - 102 => 'Processing', - 103 => 'Early Hints', - // Success - 200 => 'OK', - 201 => 'Created', - 202 => 'Accepted', - 203 => 'Non-Authoritative Information', - 204 => 'No Content', - 205 => 'Reset Content', - 206 => 'Partial Content', - 207 => 'Multi-Status', - 208 => 'Already Reported', - 226 => 'IM Used', - // Redirection - 300 => 'Multiple Choices', - 301 => 'Moved Permanently', - 302 => 'Found', - 303 => 'See Other', - 304 => 'Not Modified', - 305 => 'Use Proxy', - 307 => 'Temporary Redirect', - 308 => 'Permanent Redirect', - // Client Error - 400 => 'Bad Request', - 401 => 'Unauthorized', - 402 => 'Payment Required', - 403 => 'Forbidden', - 404 => 'Not Found', - 405 => 'Method Not Allowed', - 406 => 'Not Acceptable', - 407 => 'Proxy Authentication Required', - 408 => 'Request Timeout', - 409 => 'Conflict', - 410 => 'Gone', - 411 => 'Length Required', - 412 => 'Precondition Failed', - 413 => 'Payload Too Large', - 414 => 'URI Too Long', - 415 => 'Unsupported Media Type', - 416 => 'Range Not Satisfiable', - 417 => 'Expectation Failed', - 421 => 'Misdirected Request', - 422 => 'Unprocessable Entity', - 423 => 'Locked', - 424 => 'Failed Dependency', - 425 => 'Too Early', - 426 => 'Upgrade Required', - 427 => 'Unassigned', - 428 => 'Precondition Required', - 429 => 'Too Many Requests', - 430 => 'Unassigned', - 431 => 'Request Header Fields Too Large', - 451 => 'Unavailable For Legal Reasons', - // Server Error - 500 => 'Internal Server Error', - 501 => 'Not Implemented', - 502 => 'Bad Gateway', - 503 => 'Service Unavailable', - 504 => 'Gateway Timeout', - 505 => 'HTTP Version Not Supported', - 506 => 'Variant Also Negotiates', - 507 => 'Insufficient Storage', - 508 => 'Loop Detected', - 509 => 'Unassigned', - 510 => 'Not Extended', - 511 => 'Network Authentication Required', - ]; - - /** - * Creates a new class instance - */ - private function __construct() - { - if (! defined('TESTSUITE')) { - $buffer = OutputBuffering::getInstance(); - $buffer->start(); - register_shutdown_function([$this, 'response']); - } - - $this->header = new Header(); - $this->HTML = ''; - $this->JSON = []; - $this->footer = new Footer(); - - $this->isSuccess = true; - $this->isDisabled = false; - $this->setAjax(! empty($_REQUEST['ajax_request'])); - } - - /** - * Set the ajax flag to indicate whether - * we are servicing an ajax request - * - * @param bool $isAjax Whether we are servicing an ajax request - */ - public function setAjax(bool $isAjax): void - { - $this->isAjax = $isAjax; - $this->header->setAjax($this->isAjax); - $this->footer->setAjax($this->isAjax); - } - - /** - * Returns the singleton Response object - * - * @return ResponseRenderer object - */ - public static function getInstance() - { - if (empty(self::$instance)) { - self::$instance = new ResponseRenderer(); - } - - return self::$instance; - } - - /** - * Set the status of an ajax response, - * whether it is a success or an error - * - * @param bool $state Whether the request was successfully processed - */ - public function setRequestStatus(bool $state): void - { - $this->isSuccess = ($state === true); - } - - /** - * Returns true or false depending on whether - * we are servicing an ajax request - */ - public function isAjax(): bool - { - return $this->isAjax; - } - - /** - * Disables the rendering of the header - * and the footer in responses - */ - public function disable(): void - { - $this->header->disable(); - $this->footer->disable(); - $this->isDisabled = true; - } - - /** - * Returns a PhpMyAdmin\Header object - * - * @return Header - */ - public function getHeader() - { - return $this->header; - } - - /** - * Returns a PhpMyAdmin\Footer object - * - * @return Footer - */ - public function getFooter() - { - return $this->footer; - } - - /** - * Append HTML code to the current output buffer - */ - public function addHTML(string $content): void - { - $this->HTML .= $content; - } - - /** - * Add JSON code to the response - * - * @param string|int|array $json Either a key (string) or an array or key-value pairs - * @param mixed|null $value Null, if passing an array in $json otherwise - * it's a string value to the key - */ - public function addJSON($json, $value = null): void - { - if (is_array($json)) { - foreach ($json as $key => $value) { - $this->addJSON($key, $value); - } - } elseif ($value instanceof Message) { - $this->JSON[$json] = $value->getDisplay(); - } else { - $this->JSON[$json] = $value; - } - } - - /** - * Renders the HTML response text - */ - private function getDisplay(): string - { - // The header may contain nothing at all, - // if its content was already rendered - // and, in this case, the header will be - // in the content part of the request - $retval = $this->header->getDisplay(); - $retval .= $this->HTML; - $retval .= $this->footer->getDisplay(); - - return $retval; - } - - /** - * Sends a JSON response to the browser - */ - private function ajaxResponse(): string - { - global $dbi; - - /* Avoid wrapping in case we're disabled */ - if ($this->isDisabled) { - return $this->getDisplay(); - } - - if (! isset($this->JSON['message'])) { - $this->JSON['message'] = $this->getDisplay(); - } elseif ($this->JSON['message'] instanceof Message) { - $this->JSON['message'] = $this->JSON['message']->getDisplay(); - } - - if ($this->isSuccess) { - $this->JSON['success'] = true; - } else { - $this->JSON['success'] = false; - $this->JSON['error'] = $this->JSON['message']; - unset($this->JSON['message']); - } - - if ($this->isSuccess) { - if (! isset($this->JSON['title'])) { - $this->addJSON('title', '' . $this->getHeader()->getPageTitle() . ''); - } - - if (isset($dbi)) { - $this->addJSON('menu', $this->getHeader()->getMenu()->getDisplay()); - } - - $this->addJSON('scripts', $this->getHeader()->getScripts()->getFiles()); - $this->addJSON('selflink', $this->getFooter()->getSelfUrl()); - $this->addJSON('displayMessage', $this->getHeader()->getMessage()); - - $debug = $this->footer->getDebugMessage(); - if (empty($_REQUEST['no_debug']) && strlen($debug) > 0) { - $this->addJSON('debug', $debug); - } - - $errors = $this->footer->getErrorMessages(); - if (strlen($errors) > 0) { - $this->addJSON('errors', $errors); - } - - $promptPhpErrors = $GLOBALS['errorHandler']->hasErrorsForPrompt(); - $this->addJSON('promptPhpErrors', $promptPhpErrors); - - if (empty($GLOBALS['error_message'])) { - // set current db, table and sql query in the querywindow - // (this is for the bottom console) - $query = ''; - $maxChars = $GLOBALS['cfg']['MaxCharactersInDisplayedSQL']; - if (isset($GLOBALS['sql_query']) && mb_strlen($GLOBALS['sql_query']) < $maxChars) { - $query = $GLOBALS['sql_query']; - } - - $this->addJSON( - 'reloadQuerywindow', - [ - 'db' => isset($GLOBALS['db']) && is_scalar($GLOBALS['db']) - ? (string) $GLOBALS['db'] : '', - 'table' => isset($GLOBALS['table']) && is_scalar($GLOBALS['table']) - ? (string) $GLOBALS['table'] : '', - 'sql_query' => $query, - ] - ); - if (! empty($GLOBALS['focus_querywindow'])) { - $this->addJSON('_focusQuerywindow', $query); - } - - if (! empty($GLOBALS['reload'])) { - $this->addJSON('reloadNavigation', 1); - } - - $this->addJSON('params', $this->getHeader()->getJsParams()); - } - } - - // Set the Content-Type header to JSON so that jQuery parses the - // response correctly. - Core::headerJSON(); - - $result = json_encode($this->JSON); - if ($result === false) { - return (string) json_encode([ - 'success' => false, - 'error' => 'JSON encoding failed: ' . json_last_error_msg(), - ]); - } - - return $result; - } - - /** - * Sends an HTML response to the browser - */ - public function response(): void - { - $buffer = OutputBuffering::getInstance(); - if (empty($this->HTML)) { - $this->HTML = $buffer->getContents(); - } - - if ($this->isAjax()) { - echo $this->ajaxResponse(); - } else { - echo $this->getDisplay(); - } - - $buffer->flush(); - exit; - } - - /** - * Wrapper around PHP's header() function. - * - * @param string $text header string - */ - public function header($text): void - { - // phpcs:ignore SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly - \header($text); - } - - /** - * Wrapper around PHP's headers_sent() function. - */ - public function headersSent(): bool - { - return headers_sent(); - } - - /** - * Wrapper around PHP's http_response_code() function. - * - * @param int $response_code will set the response code. - */ - public function httpResponseCode($response_code): void - { - http_response_code($response_code); - } - - /** - * Sets http response code. - * - * @param int $responseCode will set the response code. - */ - public function setHttpResponseCode(int $responseCode): void - { - $this->httpResponseCode($responseCode); - $header = 'status: ' . $responseCode . ' '; - if (isset(static::$httpStatusMessages[$responseCode])) { - $header .= static::$httpStatusMessages[$responseCode]; - } else { - $header .= 'Web server is down'; - } - - if (PHP_SAPI === 'cgi-fcgi') { - return; - } - - $this->header($header); - } - - /** - * Generate header for 303 - * - * @param string $location will set location to redirect. - */ - public function generateHeader303($location): void - { - $this->setHttpResponseCode(303); - $this->header('Location: ' . $location); - if (! defined('TESTSUITE')) { - exit; - } - } - - /** - * Configures response for the login page - * - * @return bool Whether caller should exit - */ - public function loginPage(): bool - { - /* Handle AJAX redirection */ - if ($this->isAjax()) { - $this->setRequestStatus(false); - // redirect_flag redirects to the login page - $this->addJSON('redirect_flag', '1'); - - return true; - } - - $this->getFooter()->setMinimal(); - $header = $this->getHeader(); - $header->setBodyId('loginform'); - $header->setTitle('phpMyAdmin'); - $header->disableMenuAndConsole(); - $header->disableWarnings(); - - return false; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Plugin.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Plugin.php deleted file mode 100644 index de96413..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Plugin.php +++ /dev/null @@ -1,207 +0,0 @@ -name = $name; - $this->version = $version; - $this->status = $status; - $this->type = $type; - $this->typeVersion = $typeVersion; - $this->library = $library; - $this->libraryVersion = $libraryVersion; - $this->author = $author; - $this->description = $description; - $this->license = $license; - $this->loadOption = $loadOption; - $this->maturity = $maturity; - $this->authVersion = $authVersion; - } - - /** - * @param array $state array with the properties - */ - public static function fromState(array $state): self - { - return new self( - $state['name'] ?? '', - $state['version'] ?? null, - $state['status'] ?? '', - $state['type'] ?? '', - $state['typeVersion'] ?? null, - $state['library'] ?? null, - $state['libraryVersion'] ?? null, - $state['author'] ?? null, - $state['description'] ?? null, - $state['license'] ?? '', - $state['loadOption'] ?? null, - $state['maturity'] ?? null, - $state['authVersion'] ?? null - ); - } - - /** - * @return array - */ - public function toArray(): array - { - return [ - 'name' => $this->getName(), - 'version' => $this->getVersion(), - 'status' => $this->getStatus(), - 'type' => $this->getType(), - 'type_version' => $this->getTypeVersion(), - 'library' => $this->getLibrary(), - 'library_version' => $this->getLibraryVersion(), - 'author' => $this->getAuthor(), - 'description' => $this->getDescription(), - 'license' => $this->getLicense(), - 'load_option' => $this->getLoadOption(), - 'maturity' => $this->getMaturity(), - 'auth_version' => $this->getAuthVersion(), - ]; - } - - public function getName(): string - { - return $this->name; - } - - public function getVersion(): ?string - { - return $this->version; - } - - public function getStatus(): string - { - return $this->status; - } - - public function getType(): string - { - return $this->type; - } - - public function getTypeVersion(): ?string - { - return $this->typeVersion; - } - - public function getLibrary(): ?string - { - return $this->library; - } - - public function getLibraryVersion(): ?string - { - return $this->libraryVersion; - } - - public function getAuthor(): ?string - { - return $this->author; - } - - public function getDescription(): ?string - { - return $this->description; - } - - public function getLicense(): string - { - return $this->license; - } - - public function getLoadOption(): ?string - { - return $this->loadOption; - } - - public function getMaturity(): ?string - { - return $this->maturity; - } - - public function getAuthVersion(): ?string - { - return $this->authVersion; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Select.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Select.php deleted file mode 100644 index f97baf6..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Select.php +++ /dev/null @@ -1,120 +0,0 @@ - $server) { - if (empty($server['host'])) { - continue; - } - - if (! empty($GLOBALS['server']) && (int) $GLOBALS['server'] === (int) $key) { - $selected = 1; - } else { - $selected = 0; - } - - if (! empty($server['verbose'])) { - $label = $server['verbose']; - } else { - $label = $server['host']; - if (! empty($server['port'])) { - $label .= ':' . $server['port']; - } - } - - if (! empty($server['only_db'])) { - if (! is_array($server['only_db'])) { - $label .= ' - ' . $server['only_db']; - // try to avoid displaying a too wide selector - } elseif (count($server['only_db']) < 4) { - $label .= ' - ' . implode(', ', $server['only_db']); - } - } - - if (! empty($server['user']) && $server['auth_type'] === 'config') { - $label .= ' (' . $server['user'] . ')'; - } - - if ($list) { - if ($selected) { - $servers['list'][] = [ - 'selected' => true, - 'label' => $label, - ]; - } else { - $scriptName = Util::getScriptNameForOption($GLOBALS['cfg']['DefaultTabServer'], 'server'); - $href = $scriptName . Url::getCommon( - ['server' => $key], - ! str_contains($scriptName, '?') ? '?' : '&' - ); - $servers['list'][] = [ - 'href' => $href, - 'label' => $label, - ]; - } - } else { - $servers['select'][] = [ - 'value' => $key, - 'selected' => $selected, - 'label' => $label, - ]; - } - } - - $renderDetails = [ - 'not_only_options' => $not_only_options, - 'omit_fieldset' => $omit_fieldset, - 'servers' => $servers, - ]; - if ($not_only_options) { - $renderDetails['form_action'] = $form_action; - } - - $template = new Template(); - - return $template->render('server/select/index', $renderDetails); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Data.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Data.php deleted file mode 100644 index ea54b61..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Data.php +++ /dev/null @@ -1,456 +0,0 @@ -replicationInfo; - } - - /** - * An empty setter makes the above properties read-only - * - * @param string $a key - * @param mixed $b value - */ - public function __set($a, $b): void - { - // Discard everything - } - - /** - * Gets the allocations for constructor - * - * @return array - */ - private function getAllocations() - { - return [ - // variable name => section - // variable names match when they begin with the given string - - 'Com_' => 'com', - 'Innodb_' => 'innodb', - 'Ndb_' => 'ndb', - 'Handler_' => 'handler', - 'Qcache_' => 'qcache', - 'Threads_' => 'threads', - 'Slow_launch_threads' => 'threads', - - 'Binlog_cache_' => 'binlog_cache', - 'Created_tmp_' => 'created_tmp', - 'Key_' => 'key', - - 'Delayed_' => 'delayed', - 'Not_flushed_delayed_rows' => 'delayed', - - 'Flush_commands' => 'query', - 'Last_query_cost' => 'query', - 'Slow_queries' => 'query', - 'Queries' => 'query', - 'Prepared_stmt_count' => 'query', - - 'Select_' => 'select', - 'Sort_' => 'sort', - - 'Open_tables' => 'table', - 'Opened_tables' => 'table', - 'Open_table_definitions' => 'table', - 'Opened_table_definitions' => 'table', - 'Table_locks_' => 'table', - - 'Rpl_status' => 'repl', - 'Slave_' => 'repl', - - 'Tc_' => 'tc', - - 'Ssl_' => 'ssl', - - 'Open_files' => 'files', - 'Open_streams' => 'files', - 'Opened_files' => 'files', - ]; - } - - /** - * Gets the sections for constructor - * - * @return array - */ - private function getSections() - { - return [ - // section => section name (description) - 'com' => 'Com', - 'query' => __('SQL query'), - 'innodb' => 'InnoDB', - 'ndb' => 'NDB', - 'handler' => __('Handler'), - 'qcache' => __('Query cache'), - 'threads' => __('Threads'), - 'binlog_cache' => __('Binary log'), - 'created_tmp' => __('Temporary data'), - 'delayed' => __('Delayed inserts'), - 'key' => __('Key cache'), - 'select' => __('Joins'), - 'repl' => __('Replication'), - 'sort' => __('Sorting'), - 'table' => __('Tables'), - 'tc' => __('Transaction coordinator'), - 'files' => __('Files'), - 'ssl' => 'SSL', - 'other' => __('Other'), - ]; - } - - /** - * Gets the links for constructor - * - * @return array - */ - private function getLinks() - { - $primaryInfo = $this->replicationInfo->getPrimaryInfo(); - $replicaInfo = $this->replicationInfo->getReplicaInfo(); - - $links = []; - // variable or section name => (name => url) - - $links['table'][__('Flush (close) all tables')] = [ - 'url' => $this->selfUrl, - 'params' => Url::getCommon(['flush' => 'TABLES'], ''), - ]; - $links['table'][__('Show open tables')] = [ - 'url' => Url::getFromRoute('/sql'), - 'params' => Url::getCommon([ - 'sql_query' => 'SHOW OPEN TABLES', - 'goto' => $this->selfUrl, - ], ''), - ]; - - if ($primaryInfo['status']) { - $links['repl'][__('Show replica hosts')] = [ - 'url' => Url::getFromRoute('/sql'), - 'params' => Url::getCommon([ - 'sql_query' => 'SHOW SLAVE HOSTS', - 'goto' => $this->selfUrl, - ], ''), - ]; - $links['repl'][__('Show primary status')] = [ - 'url' => '#replication_primary', - 'params' => '', - ]; - } - - if ($replicaInfo['status']) { - $links['repl'][__('Show replica status')] = [ - 'url' => '#replication_replica', - 'params' => '', - ]; - } - - $links['repl']['doc'] = 'replication'; - - $links['qcache'][__('Flush query cache')] = [ - 'url' => $this->selfUrl, - 'params' => Url::getCommon(['flush' => 'QUERY CACHE'], ''), - ]; - $links['qcache']['doc'] = 'query_cache'; - - $links['threads']['doc'] = 'mysql_threads'; - - $links['key']['doc'] = 'myisam_key_cache'; - - $links['binlog_cache']['doc'] = 'binary_log'; - - $links['Slow_queries']['doc'] = 'slow_query_log'; - - $links['innodb'][__('Variables')] = [ - 'url' => Url::getFromRoute('/server/engines/InnoDB'), - 'params' => '', - ]; - $links['innodb'][__('InnoDB Status')] = [ - 'url' => Url::getFromRoute('/server/engines/InnoDB/Status'), - 'params' => '', - ]; - $links['innodb']['doc'] = 'innodb'; - - return $links; - } - - /** - * Calculate some values - * - * @param array $server_status contains results of SHOW GLOBAL STATUS - * @param array $server_variables contains results of SHOW GLOBAL VARIABLES - * - * @return array - */ - private function calculateValues(array $server_status, array $server_variables) - { - // Key_buffer_fraction - if ( - isset($server_status['Key_blocks_unused'], $server_variables['key_cache_block_size']) - && isset($server_variables['key_buffer_size']) - && $server_variables['key_buffer_size'] != 0 - ) { - $server_status['Key_buffer_fraction_%'] = 100 - - $server_status['Key_blocks_unused'] - * $server_variables['key_cache_block_size'] - / $server_variables['key_buffer_size'] - * 100; - } elseif ( - isset($server_status['Key_blocks_used'], $server_variables['key_buffer_size']) - && $server_variables['key_buffer_size'] != 0 - ) { - $server_status['Key_buffer_fraction_%'] = $server_status['Key_blocks_used'] - * 1024 - / $server_variables['key_buffer_size']; - } - - // Ratio for key read/write - if ( - isset($server_status['Key_writes'], $server_status['Key_write_requests']) - && $server_status['Key_write_requests'] > 0 - ) { - $key_writes = $server_status['Key_writes']; - $key_write_requests = $server_status['Key_write_requests']; - $server_status['Key_write_ratio_%'] = 100 * $key_writes / $key_write_requests; - } - - if ( - isset($server_status['Key_reads'], $server_status['Key_read_requests']) - && $server_status['Key_read_requests'] > 0 - ) { - $key_reads = $server_status['Key_reads']; - $key_read_requests = $server_status['Key_read_requests']; - $server_status['Key_read_ratio_%'] = 100 * $key_reads / $key_read_requests; - } - - // Threads_cache_hitrate - if ( - isset($server_status['Threads_created'], $server_status['Connections']) - && $server_status['Connections'] > 0 - ) { - $server_status['Threads_cache_hitrate_%'] = 100 - $server_status['Threads_created'] - / $server_status['Connections'] * 100; - } - - return $server_status; - } - - /** - * Sort variables into arrays - * - * @param array $server_status contains results of SHOW GLOBAL STATUS - * @param array $allocations allocations for sections - * @param array $allocationMap map variables to their section - * @param array $sectionUsed is a section used? - * @param array $used_queries used queries - * - * @return array ($allocationMap, $sectionUsed, $used_queries) - */ - private function sortVariables( - array $server_status, - array $allocations, - array $allocationMap, - array $sectionUsed, - array $used_queries - ) { - foreach ($server_status as $name => $value) { - $section_found = false; - foreach ($allocations as $filter => $section) { - if (! str_contains($name, $filter)) { - continue; - } - - $allocationMap[$name] = $section; - $sectionUsed[$section] = true; - $section_found = true; - if ($section === 'com' && $value > 0) { - $used_queries[$name] = $value; - } - - break; // Only exits inner loop - } - - if ($section_found) { - continue; - } - - $allocationMap[$name] = 'other'; - $sectionUsed['other'] = true; - } - - return [ - $allocationMap, - $sectionUsed, - $used_queries, - ]; - } - - public function __construct() - { - global $dbi; - - $this->replicationInfo = new ReplicationInfo($dbi); - $this->replicationInfo->load($_POST['primary_connection'] ?? null); - - $this->selfUrl = basename($GLOBALS['PMA_PHP_SELF']); - - // get status from server - $server_status_result = $dbi->tryQuery('SHOW GLOBAL STATUS'); - if ($server_status_result === false) { - $server_status = []; - $this->dataLoaded = false; - } else { - $this->dataLoaded = true; - $server_status = $server_status_result->fetchAllKeyPair(); - unset($server_status_result); - } - - // for some calculations we require also some server settings - $server_variables = $dbi->fetchResult('SHOW GLOBAL VARIABLES', 0, 1); - - // cleanup of some deprecated values - $server_status = self::cleanDeprecated($server_status); - - // calculate some values - $server_status = $this->calculateValues($server_status, $server_variables); - - // split variables in sections - $allocations = $this->getAllocations(); - - $sections = $this->getSections(); - - // define some needful links/commands - $links = $this->getLinks(); - - // Variable to contain all com_ variables (query statistics) - $used_queries = []; - - // Variable to map variable names to their respective section name - // (used for js category filtering) - $allocationMap = []; - - // Variable to mark used sections - $sectionUsed = []; - - // sort vars into arrays - [ - $allocationMap, - $sectionUsed, - $used_queries, - ] = $this->sortVariables($server_status, $allocations, $allocationMap, $sectionUsed, $used_queries); - - // admin commands are not queries (e.g. they include COM_PING, - // which is excluded from $server_status['Questions']) - unset($used_queries['Com_admin_commands']); - - // Set all class properties - $this->dbIsLocal = false; - // can be null if $cfg['ServerDefault'] = 0; - $serverHostToLower = mb_strtolower((string) $GLOBALS['cfg']['Server']['host']); - if ( - $serverHostToLower === 'localhost' - || $GLOBALS['cfg']['Server']['host'] === '127.0.0.1' - || $GLOBALS['cfg']['Server']['host'] === '::1' - ) { - $this->dbIsLocal = true; - } - - $this->status = $server_status; - $this->sections = $sections; - $this->variables = $server_variables; - $this->usedQueries = $used_queries; - $this->allocationMap = $allocationMap; - $this->links = $links; - $this->sectionUsed = $sectionUsed; - } - - /** - * cleanup of some deprecated values - * - * @param array $server_status status array to process - * - * @return array - */ - public static function cleanDeprecated(array $server_status) - { - $deprecated = [ - 'Com_prepare_sql' => 'Com_stmt_prepare', - 'Com_execute_sql' => 'Com_stmt_execute', - 'Com_dealloc_sql' => 'Com_stmt_close', - ]; - foreach ($deprecated as $old => $new) { - if (! isset($server_status[$old], $server_status[$new])) { - continue; - } - - unset($server_status[$old]); - } - - return $server_status; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Monitor.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Monitor.php deleted file mode 100644 index d00f4e7..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/Status/Monitor.php +++ /dev/null @@ -1,549 +0,0 @@ -dbi = $dbi; - } - - /** - * Returns JSON for real-time charting data - * - * @param string $requiredData Required data - * - * @return array JSON - */ - public function getJsonForChartingData(string $requiredData): array - { - $ret = json_decode($requiredData, true); - $statusVars = []; - $serverVars = []; - $sysinfo = $cpuload = $memory = 0; - - /* Accumulate all required variables and data */ - [$serverVars, $statusVars, $ret] = $this->getJsonForChartingDataGet( - $ret, - $serverVars, - $statusVars, - $sysinfo, - $cpuload, - $memory - ); - - // Retrieve all required status variables - $statusVarValues = []; - if (count($statusVars)) { - $statusVarValues = $this->dbi->fetchResult( - "SHOW GLOBAL STATUS WHERE Variable_name='" - . implode("' OR Variable_name='", $statusVars) . "'", - 0, - 1 - ); - } - - // Retrieve all required server variables - $serverVarValues = []; - if (count($serverVars)) { - $serverVarValues = $this->dbi->fetchResult( - "SHOW GLOBAL VARIABLES WHERE Variable_name='" - . implode("' OR Variable_name='", $serverVars) . "'", - 0, - 1 - ); - } - - // ...and now assign them - $ret = $this->getJsonForChartingDataSet($ret, $statusVarValues, $serverVarValues); - - $ret['x'] = (int) (microtime(true) * 1000); - - return $ret; - } - - /** - * Assign the variables for real-time charting data - * - * @param array $ret Real-time charting data - * @param array $statusVarValues Status variable values - * @param array $serverVarValues Server variable values - * - * @return array - */ - private function getJsonForChartingDataSet( - array $ret, - array $statusVarValues, - array $serverVarValues - ): array { - foreach ($ret as $chart_id => $chartNodes) { - foreach ($chartNodes as $node_id => $nodeDataPoints) { - foreach ($nodeDataPoints as $point_id => $dataPoint) { - switch ($dataPoint['type']) { - case 'statusvar': - $ret[$chart_id][$node_id][$point_id]['value'] = $statusVarValues[$dataPoint['name']]; - break; - case 'servervar': - $ret[$chart_id][$node_id][$point_id]['value'] = $serverVarValues[$dataPoint['name']]; - break; - } - } - } - } - - return $ret; - } - - /** - * Get called to get JSON for charting data - * - * @param array $ret Real-time charting data - * @param array $serverVars Server variable values - * @param array $statusVars Status variable values - * @param mixed $sysinfo System info - * @param mixed $cpuload CPU load - * @param mixed $memory Memory - * - * @return array - */ - private function getJsonForChartingDataGet( - array $ret, - array $serverVars, - array $statusVars, - $sysinfo, - $cpuload, - $memory - ) { - // For each chart - foreach ($ret as $chartId => $chartNodes) { - // For each data series - foreach ($chartNodes as $nodeId => $nodeDataPoints) { - // For each data point in the series (usually just 1) - foreach ($nodeDataPoints as $pointId => $dataPoint) { - [$serverVars, $statusVars, $ret[$chartId][$nodeId][$pointId]] = $this->getJsonForChartingDataSwitch( - $dataPoint['type'], - $dataPoint['name'], - $serverVars, - $statusVars, - $ret[$chartId][$nodeId][$pointId], - $sysinfo, - $cpuload, - $memory - ); - } /* foreach */ - } /* foreach */ - } - - return [ - $serverVars, - $statusVars, - $ret, - ]; - } - - /** - * Switch called to get JSON for charting data - * - * @param string $type Type - * @param string $pName Name - * @param array $serverVars Server variable values - * @param array $statusVars Status variable values - * @param array $ret Real-time charting data - * @param mixed $sysinfo System info - * @param mixed $cpuload CPU load - * @param mixed $memory Memory - * - * @return array - */ - private function getJsonForChartingDataSwitch( - $type, - $pName, - array $serverVars, - array $statusVars, - array $ret, - $sysinfo, - $cpuload, - $memory - ) { - /** - * We only collect the status and server variables here to read them all in one query, - * and only afterwards assign them. Also do some allow list filtering on the names - */ - switch ($type) { - case 'servervar': - if (! preg_match('/[^a-zA-Z_]+/', $pName)) { - $serverVars[] = $pName; - } - - break; - - case 'statusvar': - if (! preg_match('/[^a-zA-Z_]+/', $pName)) { - $statusVars[] = $pName; - } - - break; - - case 'proc': - $result = $this->dbi->query('SHOW PROCESSLIST'); - $ret['value'] = $result->numRows(); - break; - - case 'cpu': - if (! $sysinfo) { - $sysinfo = SysInfo::get(); - } - - if (! $cpuload) { - $cpuload = $sysinfo->loadavg(); - } - - if (SysInfo::getOs() === 'Linux') { - $ret['idle'] = $cpuload['idle']; - $ret['busy'] = $cpuload['busy']; - } else { - $ret['value'] = $cpuload['loadavg']; - } - - break; - - case 'memory': - if (! $sysinfo) { - $sysinfo = SysInfo::get(); - } - - if (! $memory) { - $memory = $sysinfo->memory(); - } - - $ret['value'] = $memory[$pName] ?? 0; - break; - } - - return [ - $serverVars, - $statusVars, - $ret, - ]; - } - - /** - * Returns JSON for log data with type: slow - * - * @param int $start Unix Time: Start time for query - * @param int $end Unix Time: End time for query - * - * @return array - */ - public function getJsonForLogDataTypeSlow(int $start, int $end): array - { - $query = 'SELECT start_time, user_host, '; - $query .= 'Sec_to_Time(Sum(Time_to_Sec(query_time))) as query_time, '; - $query .= 'Sec_to_Time(Sum(Time_to_Sec(lock_time))) as lock_time, '; - $query .= 'SUM(rows_sent) AS rows_sent, '; - $query .= 'SUM(rows_examined) AS rows_examined, db, sql_text, '; - $query .= 'COUNT(sql_text) AS \'#\' '; - $query .= 'FROM `mysql`.`slow_log` '; - $query .= 'WHERE start_time > FROM_UNIXTIME(' . $start . ') '; - $query .= 'AND start_time < FROM_UNIXTIME(' . $end . ') GROUP BY sql_text'; - - $result = $this->dbi->tryQuery($query); - // TODO: check for false - - $return = [ - 'rows' => [], - 'sum' => [], - ]; - - while ($row = $result->fetchAssoc()) { - $type = mb_strtolower( - mb_substr( - $row['sql_text'], - 0, - (int) mb_strpos($row['sql_text'], ' ') - ) - ); - - switch ($type) { - case 'insert': - case 'update': - //Cut off big inserts and updates, but append byte count instead - if (mb_strlen($row['sql_text']) > 220) { - $implodeSqlText = implode( - ' ', - (array) Util::formatByteDown( - mb_strlen($row['sql_text']), - 2, - 2 - ) - ); - $row['sql_text'] = mb_substr($row['sql_text'], 0, 200) - . '... [' . $implodeSqlText . ']'; - } - - break; - default: - break; - } - - if (! isset($return['sum'][$type])) { - $return['sum'][$type] = 0; - } - - $return['sum'][$type] += $row['#']; - $return['rows'][] = $row; - } - - $return['sum']['TOTAL'] = array_sum($return['sum']); - $return['numRows'] = count($return['rows']); - - return $return; - } - - /** - * Returns JSon for log data with type: general - * - * @param int $start Unix Time: Start time for query - * @param int $end Unix Time: End time for query - * @param bool $isTypesLimited Whether to limit types or not - * @param bool $removeVariables Whether to remove variables or not - * - * @return array - */ - public function getJsonForLogDataTypeGeneral( - int $start, - int $end, - bool $isTypesLimited, - bool $removeVariables - ): array { - $limitTypes = ''; - if ($isTypesLimited) { - $limitTypes = 'AND argument REGEXP \'^(INSERT|SELECT|UPDATE|DELETE)\' '; - } - - $query = 'SELECT TIME(event_time) as event_time, user_host, thread_id, '; - $query .= 'server_id, argument, count(argument) as \'#\' '; - $query .= 'FROM `mysql`.`general_log` '; - $query .= 'WHERE command_type=\'Query\' '; - $query .= 'AND event_time > FROM_UNIXTIME(' . $start . ') '; - $query .= 'AND event_time < FROM_UNIXTIME(' . $end . ') '; - $query .= $limitTypes . 'GROUP by argument'; // HAVING count > 1'; - - $result = $this->dbi->tryQuery($query); - // TODO: check for false - - $return = [ - 'rows' => [], - 'sum' => [], - ]; - $insertTables = []; - $insertTablesFirst = -1; - $i = 0; - - while ($row = $result->fetchAssoc()) { - preg_match('/^(\w+)\s/', $row['argument'], $match); - $type = mb_strtolower($match[1]); - - if (! isset($return['sum'][$type])) { - $return['sum'][$type] = 0; - } - - $return['sum'][$type] += $row['#']; - - switch ($type) { - /** @noinspection PhpMissingBreakStatementInspection */ - case 'insert': - // Group inserts if selected - if ( - $removeVariables && preg_match( - '/^INSERT INTO (`|\'|"|)([^\s\\1]+)\\1/i', - $row['argument'], - $matches - ) - ) { - $insertTables[$matches[2]]++; - if ($insertTables[$matches[2]] > 1) { - $return['rows'][$insertTablesFirst]['#'] = $insertTables[$matches[2]]; - - // Add a ... to the end of this query to indicate that - // there's been other queries - $temp = $return['rows'][$insertTablesFirst]['argument']; - $return['rows'][$insertTablesFirst]['argument'] .= $this->getSuspensionPoints( - $temp[strlen($temp) - 1] - ); - - // Group this value, thus do not add to the result list - continue 2; - } - - $insertTablesFirst = $i; - $insertTables[$matches[2]] += $row['#'] - 1; - } - - // No break here - - case 'update': - // Cut off big inserts and updates, - // but append byte count therefor - if (mb_strlen($row['argument']) > 220) { - $row['argument'] = mb_substr($row['argument'], 0, 200) - . '... [' - . implode( - ' ', - (array) Util::formatByteDown( - mb_strlen($row['argument']), - 2, - 2 - ) - ) - . ']'; - } - - break; - - default: - break; - } - - $return['rows'][] = $row; - $i++; - } - - $return['sum']['TOTAL'] = array_sum($return['sum']); - $return['numRows'] = count($return['rows']); - - return $return; - } - - /** - * Return suspension points if needed - * - * @param string $lastChar Last char - * - * @return string Return suspension points if needed - */ - private function getSuspensionPoints(string $lastChar): string - { - if ($lastChar !== '.') { - return '
            ...'; - } - - return ''; - } - - /** - * Returns JSON for logging vars - * - * @param string|null $name Variable name - * @param string|null $value Variable value - * - * @return array JSON - */ - public function getJsonForLoggingVars(?string $name, ?string $value): array - { - if (isset($name, $value)) { - $escapedValue = $this->dbi->escapeString($value); - if (! is_numeric($escapedValue)) { - $escapedValue = "'" . $escapedValue . "'"; - } - - if (! preg_match('/[^a-zA-Z0-9_]+/', $name)) { - $this->dbi->query('SET GLOBAL ' . $name . ' = ' . $escapedValue); - } - } - - return $this->dbi->fetchResult( - 'SHOW GLOBAL VARIABLES WHERE Variable_name IN' - . ' ("general_log","slow_query_log","long_query_time","log_output")', - 0, - 1 - ); - } - - /** - * Returns JSON for query_analyzer - * - * @param string $database Database name - * @param string $query SQL query - * - * @return array JSON - */ - public function getJsonForQueryAnalyzer( - string $database, - string $query - ): array { - global $cached_affected_rows; - - $return = []; - - if (strlen($database) > 0) { - $this->dbi->selectDb($database); - } - - $profiling = Profiling::isSupported($this->dbi); - - if ($profiling) { - $this->dbi->query('SET PROFILING=1;'); - } - - // Do not cache query - $sqlQuery = preg_replace('/^(\s*SELECT)/i', '\\1 SQL_NO_CACHE', $query); - - $this->dbi->tryQuery($sqlQuery); - $return['affectedRows'] = $cached_affected_rows; - - $result = $this->dbi->tryQuery('EXPLAIN ' . $sqlQuery); - if ($result !== false) { - $return['explain'] = $result->fetchAllAssoc(); - } - - // In case an error happened - $return['error'] = $this->dbi->getError(); - - if ($profiling) { - $return['profiling'] = []; - $result = $this->dbi->tryQuery( - 'SELECT seq,state,duration FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID=1 ORDER BY seq' - ); - if ($result !== false) { - $return['profiling'] = $result->fetchAllAssoc(); - } - } - - return $return; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Base.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Base.php deleted file mode 100644 index 771a62c..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Base.php +++ /dev/null @@ -1,48 +0,0 @@ - 0]; - } - - /** - * Gets information about memory usage - * - * @return array with memory usage data - */ - public function memory() - { - return []; - } - - /** - * Checks whether class is supported in this environment - */ - public function supported(): bool - { - return true; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Linux.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Linux.php deleted file mode 100644 index 5aae88a..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Server/SysInfo/Linux.php +++ /dev/null @@ -1,115 +0,0 @@ - with load data - */ - public function loadavg() - { - $buf = file_get_contents('/proc/stat'); - if ($buf === false) { - $buf = ''; - } - - $pos = mb_strpos($buf, "\n"); - if ($pos === false) { - $pos = 0; - } - - $nums = preg_split( - '/\s+/', - mb_substr( - $buf, - 0, - $pos - ) - ); - - if (! is_array($nums)) { - return ['busy' => 0, 'idle' => 0]; - } - - return [ - 'busy' => (int) $nums[1] + (int) $nums[2] + (int) $nums[3], - 'idle' => (int) $nums[4], - ]; - } - - /** - * Checks whether class is supported in this environment - */ - public function supported(): bool - { - return @is_readable('/proc/meminfo') && @is_readable('/proc/stat'); - } - - /** - * Gets information about memory usage - * - * @return array with memory usage data - */ - public function memory() - { - $content = @file_get_contents('/proc/meminfo'); - if ($content === false) { - return []; - } - - preg_match_all(SysInfo::MEMORY_REGEXP, $content, $matches); - - /** @var array|false $mem */ - $mem = array_combine($matches[1], $matches[2]); - if ($mem === false) { - return []; - } - - $defaults = [ - 'MemTotal' => 0, - 'MemFree' => 0, - 'Cached' => 0, - 'Buffers' => 0, - 'SwapTotal' => 0, - 'SwapFree' => 0, - 'SwapCached' => 0, - ]; - - $mem = array_merge($defaults, $mem); - - foreach ($mem as $idx => $value) { - $mem[$idx] = intval($value); - } - - $mem['MemUsed'] = $mem['MemTotal'] - $mem['MemFree'] - $mem['Cached'] - $mem['Buffers']; - $mem['SwapUsed'] = $mem['SwapTotal'] - $mem['SwapFree'] - $mem['SwapCached']; - - return $mem; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Setup/FormProcessing.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Setup/FormProcessing.php deleted file mode 100644 index 61d18c2..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Setup/FormProcessing.php +++ /dev/null @@ -1,80 +0,0 @@ -fixErrors(); - $response = ResponseRenderer::getInstance(); - $response->disable(); - $response->generateHeader303('index.php' . Url::getCommonRaw()); - } - - if (! $form_display->process(false)) { - // handle form view and failed POST - echo $form_display->getDisplay(); - - return; - } - - // check for form errors - if (! $form_display->hasErrors()) { - $response = ResponseRenderer::getInstance(); - $response->disable(); - $response->generateHeader303('index.php' . Url::getCommonRaw()); - - return; - } - - // form has errors, show warning - $page = 'index'; - if (isset($_GET['page']) && in_array($_GET['page'], ['form', 'config', 'servers'], true)) { - $page = $_GET['page']; - } - - $formset = isset($_GET['formset']) && is_string($_GET['formset']) ? $_GET['formset'] : ''; - $formId = isset($_GET['id']) && is_numeric($_GET['id']) && (int) $_GET['id'] >= 1 ? (int) $_GET['id'] : 0; - if ($formId === 0 && $page === 'servers') { - // we've just added a new server, get its id - $formId = $form_display->getConfigFile()->getServerCount(); - } - - $urlParams = [ - 'page' => $page, - 'formset' => $formset, - 'id' => $formId, - ]; - - $template = new Template(); - echo $template->render('setup/error', [ - 'url_params' => $urlParams, - 'errors' => $form_display->displayErrors(), - ]); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Sql.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Sql.php deleted file mode 100644 index 098eef8..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Sql.php +++ /dev/null @@ -1,1811 +0,0 @@ -dbi = $dbi; - $this->relation = $relation; - $this->relationCleanup = $relationCleanup; - $this->operations = $operations; - $this->transformations = $transformations; - $this->template = $template; - } - - /** - * Handle remembered sorting order, only for single table query - * - * @param string $db database name - * @param string $table table name - * @param array $analyzedSqlResults the analyzed query results - * @param string $fullSqlQuery SQL query - */ - private function handleSortOrder( - $db, - $table, - array &$analyzedSqlResults, - &$fullSqlQuery - ): void { - $tableObject = new Table($table, $db); - - if (empty($analyzedSqlResults['order'])) { - // Retrieving the name of the column we should sort after. - $sortCol = $tableObject->getUiProp(Table::PROP_SORTED_COLUMN); - if (empty($sortCol)) { - return; - } - - // Remove the name of the table from the retrieved field name. - $sortCol = str_replace( - Util::backquote($table) . '.', - '', - $sortCol - ); - - // Create the new query. - $fullSqlQuery = Query::replaceClause( - $analyzedSqlResults['statement'], - $analyzedSqlResults['parser']->list, - 'ORDER BY ' . $sortCol - ); - - // TODO: Avoid reparsing the query. - $analyzedSqlResults = Query::getAll($fullSqlQuery); - } else { - // Store the remembered table into session. - $tableObject->setUiProp( - Table::PROP_SORTED_COLUMN, - Query::getClause( - $analyzedSqlResults['statement'], - $analyzedSqlResults['parser']->list, - 'ORDER BY' - ) - ); - } - } - - /** - * Append limit clause to SQL query - * - * @param array $analyzedSqlResults the analyzed query results - * - * @return string limit clause appended SQL query - */ - private function getSqlWithLimitClause(array $analyzedSqlResults) - { - return Query::replaceClause( - $analyzedSqlResults['statement'], - $analyzedSqlResults['parser']->list, - 'LIMIT ' . $_SESSION['tmpval']['pos'] . ', ' - . $_SESSION['tmpval']['max_rows'] - ); - } - - /** - * Verify whether the result set has columns from just one table - * - * @param array $fieldsMeta meta fields - */ - private function resultSetHasJustOneTable(array $fieldsMeta): bool - { - $justOneTable = true; - $prevTable = ''; - foreach ($fieldsMeta as $oneFieldMeta) { - if ($oneFieldMeta->table != '' && $prevTable != '' && $oneFieldMeta->table != $prevTable) { - $justOneTable = false; - } - - if ($oneFieldMeta->table == '') { - continue; - } - - $prevTable = $oneFieldMeta->table; - } - - return $justOneTable && $prevTable != ''; - } - - /** - * Verify whether the result set contains all the columns - * of at least one unique key - * - * @param string $db database name - * @param string $table table name - * @param array $fieldsMeta meta fields - */ - private function resultSetContainsUniqueKey(string $db, string $table, array $fieldsMeta): bool - { - $columns = $this->dbi->getColumns($db, $table); - $resultSetColumnNames = []; - foreach ($fieldsMeta as $oneMeta) { - $resultSetColumnNames[] = $oneMeta->name; - } - - foreach (Index::getFromTable($table, $db) as $index) { - if (! $index->isUnique()) { - continue; - } - - $indexColumns = $index->getColumns(); - $numberFound = 0; - foreach (array_keys($indexColumns) as $indexColumnName) { - if ( - ! in_array($indexColumnName, $resultSetColumnNames) - && in_array($indexColumnName, $columns) - && ! str_contains($columns[$indexColumnName]['Extra'], 'INVISIBLE') - ) { - continue; - } - - $numberFound++; - } - - if ($numberFound == count($indexColumns)) { - return true; - } - } - - return false; - } - - /** - * Get the HTML for relational column dropdown - * During grid edit, if we have a relational field, returns the html for the - * dropdown - * - * @param string $db current database - * @param string $table current table - * @param string $column current column - * @param string $currentValue current selected value - * - * @return string html for the dropdown - */ - public function getHtmlForRelationalColumnDropdown($db, $table, $column, $currentValue) - { - $foreigners = $this->relation->getForeigners($db, $table, $column); - - $foreignData = $this->relation->getForeignData($foreigners, $column, false, '', ''); - - if ($foreignData['disp_row'] == null) { - //Handle the case when number of values - //is more than $cfg['ForeignKeyMaxLimit'] - $urlParams = [ - 'db' => $db, - 'table' => $table, - 'field' => $column, - ]; - - $dropdown = $this->template->render('sql/relational_column_dropdown', [ - 'current_value' => $_POST['curr_value'], - 'params' => $urlParams, - ]); - } else { - $dropdown = $this->relation->foreignDropdown( - $foreignData['disp_row'], - $foreignData['foreign_field'], - $foreignData['foreign_display'], - $currentValue, - $GLOBALS['cfg']['ForeignKeyMaxLimit'] - ); - $dropdown = ''; - } - - return $dropdown; - } - - /** @return array */ - private function getDetailedProfilingStats(array $profilingResults): array - { - $profiling = [ - 'total_time' => 0, - 'states' => [], - 'chart' => [], - 'profile' => [], - ]; - - foreach ($profilingResults as $oneResult) { - $status = ucwords($oneResult['Status']); - $profiling['total_time'] += $oneResult['Duration']; - $profiling['profile'][] = [ - 'status' => $status, - 'duration' => Util::formatNumber($oneResult['Duration'], 3, 1), - 'duration_raw' => $oneResult['Duration'], - ]; - - if (! isset($profiling['states'][$status])) { - $profiling['states'][$status] = [ - 'total_time' => $oneResult['Duration'], - 'calls' => 1, - ]; - $profiling['chart'][$status] = $oneResult['Duration']; - } else { - $profiling['states'][$status]['calls']++; - $profiling['chart'][$status] += $oneResult['Duration']; - } - } - - return $profiling; - } - - /** - * Get value of a column for a specific row (marked by $whereClause) - */ - public function getFullValuesForSetColumn( - string $db, - string $table, - string $column, - string $whereClause - ): string { - $row = $this->dbi->fetchSingleRow(sprintf( - 'SELECT `%s` FROM `%s`.`%s` WHERE %s', - $column, - $db, - $table, - $whereClause - )); - - if ($row === null) { - return ''; - } - - return $row[$column]; - } - - /** - * Get all the values for a enum column or set column in a table - * - * @param string $db current database - * @param string $table current table - * @param string $column current column - * - * @return array|null array containing the value list for the column, null on failure - */ - public function getValuesForColumn(string $db, string $table, string $column): ?array - { - $fieldInfoQuery = QueryGenerator::getColumnsSql($db, $table, $this->dbi->escapeString($column)); - - $fieldInfoResult = $this->dbi->fetchResult($fieldInfoQuery); - - if (! isset($fieldInfoResult[0])) { - return null; - } - - return Util::parseEnumSetValues($fieldInfoResult[0]['Type']); - } - - /** - * Function to check whether to remember the sorting order or not - * - * @param array $analyzedSqlResults the analyzed query and other variables set - * after analyzing the query - */ - private function isRememberSortingOrder(array $analyzedSqlResults): bool - { - return isset($analyzedSqlResults['select_expr'], $analyzedSqlResults['select_tables']) - && $GLOBALS['cfg']['RememberSorting'] - && ! ($analyzedSqlResults['is_count'] - || $analyzedSqlResults['is_export'] - || $analyzedSqlResults['is_func'] - || $analyzedSqlResults['is_analyse']) - && $analyzedSqlResults['select_from'] - && (empty($analyzedSqlResults['select_expr']) - || ((count($analyzedSqlResults['select_expr']) === 1) - && ($analyzedSqlResults['select_expr'][0] === '*'))) - && count($analyzedSqlResults['select_tables']) === 1; - } - - /** - * Function to check whether the LIMIT clause should be appended or not - * - * @param array $analyzedSqlResults the analyzed query and other variables set - * after analyzing the query - */ - private function isAppendLimitClause(array $analyzedSqlResults): bool - { - // Assigning LIMIT clause to an syntactically-wrong query - // is not needed. Also we would want to show the true query - // and the true error message to the query executor - - return (isset($analyzedSqlResults['parser']) - && count($analyzedSqlResults['parser']->errors) === 0) - && ($_SESSION['tmpval']['max_rows'] !== 'all') - && ! ($analyzedSqlResults['is_export'] - || $analyzedSqlResults['is_analyse']) - && ($analyzedSqlResults['select_from'] - || $analyzedSqlResults['is_subquery']) - && empty($analyzedSqlResults['limit']); - } - - /** - * Function to check whether this query is for just browsing - * - * @param array $analyzedSqlResults the analyzed query and other variables set - * after analyzing the query - * @param bool|null $findRealEnd whether the real end should be found - */ - public static function isJustBrowsing(array $analyzedSqlResults, ?bool $findRealEnd): bool - { - return ! $analyzedSqlResults['is_group'] - && ! $analyzedSqlResults['is_func'] - && empty($analyzedSqlResults['union']) - && empty($analyzedSqlResults['distinct']) - && $analyzedSqlResults['select_from'] - && (count($analyzedSqlResults['select_tables']) === 1) - && (empty($analyzedSqlResults['statement']->where) - || (count($analyzedSqlResults['statement']->where) === 1 - && $analyzedSqlResults['statement']->where[0]->expr === '1')) - && empty($analyzedSqlResults['group']) - && ! isset($findRealEnd) - && ! $analyzedSqlResults['is_subquery'] - && ! $analyzedSqlResults['join'] - && empty($analyzedSqlResults['having']); - } - - /** - * Function to check whether the related transformation information should be deleted - * - * @param array $analyzedSqlResults the analyzed query and other variables set - * after analyzing the query - */ - private function isDeleteTransformationInfo(array $analyzedSqlResults): bool - { - return ! empty($analyzedSqlResults['querytype']) - && (($analyzedSqlResults['querytype'] === 'ALTER') - || ($analyzedSqlResults['querytype'] === 'DROP')); - } - - /** - * Function to check whether the user has rights to drop the database - * - * @param array $analyzedSqlResults the analyzed query and other variables set - * after analyzing the query - * @param bool $allowUserDropDatabase whether the user is allowed to drop db - * @param bool $isSuperUser whether this user is a superuser - */ - public function hasNoRightsToDropDatabase( - array $analyzedSqlResults, - $allowUserDropDatabase, - $isSuperUser - ): bool { - return ! $allowUserDropDatabase - && isset($analyzedSqlResults['drop_database']) - && $analyzedSqlResults['drop_database'] - && ! $isSuperUser; - } - - /** - * Function to set a column property - * - * @param Table $table Table instance - * @param string $requestIndex col_order|col_visib - * - * @return bool|Message - */ - public function setColumnProperty(Table $table, string $requestIndex) - { - $propertyValue = array_map('intval', explode(',', $_POST[$requestIndex])); - switch ($requestIndex) { - case 'col_order': - $propertyToSet = Table::PROP_COLUMN_ORDER; - break; - case 'col_visib': - $propertyToSet = Table::PROP_COLUMN_VISIB; - break; - default: - $propertyToSet = ''; - } - - return $table->setUiProp($propertyToSet, $propertyValue, $_POST['table_create_time'] ?? null); - } - - /** - * Function to find the real end of rows - * - * @param string $db the current database - * @param string $table the current table - * - * @return mixed the number of rows if "retain" param is true, otherwise true - */ - public function findRealEndOfRows($db, $table) - { - $unlimNumRows = $this->dbi->getTable($db, $table)->countRecords(true); - $_SESSION['tmpval']['pos'] = $this->getStartPosToDisplayRow($unlimNumRows); - - return $unlimNumRows; - } - - /** - * Function to get the default sql query for browsing page - * - * @param string $db the current database - * @param string $table the current table - * - * @return string the default $sql_query for browse page - */ - public function getDefaultSqlQueryForBrowse($db, $table): string - { - $bookmark = Bookmark::get($this->dbi, $GLOBALS['cfg']['Server']['user'], $db, $table, 'label', false, true); - - if ($bookmark !== null && $bookmark->getQuery() !== '') { - $GLOBALS['using_bookmark_message'] = Message::notice( - __('Using bookmark "%s" as default browse query.') - ); - $GLOBALS['using_bookmark_message']->addParam($table); - $GLOBALS['using_bookmark_message']->addHtml( - MySQLDocumentation::showDocumentation('faq', 'faq6-22') - ); - - return $bookmark->getQuery(); - } - - $defaultOrderByClause = ''; - - if ( - isset($GLOBALS['cfg']['TablePrimaryKeyOrder']) - && ($GLOBALS['cfg']['TablePrimaryKeyOrder'] !== 'NONE') - ) { - $primaryKey = null; - $primary = Index::getPrimary($table, $db); - - if ($primary !== false) { - $primarycols = $primary->getColumns(); - - foreach ($primarycols as $col) { - $primaryKey = $col->getName(); - break; - } - - if ($primaryKey !== null) { - $defaultOrderByClause = ' ORDER BY ' - . Util::backquote($table) . '.' - . Util::backquote($primaryKey) . ' ' - . $GLOBALS['cfg']['TablePrimaryKeyOrder']; - } - } - } - - return 'SELECT * FROM ' . Util::backquote($table) . $defaultOrderByClause; - } - - /** - * Responds an error when an error happens when executing the query - * - * @param bool $isGotoFile whether goto file or not - * @param string $error error after executing the query - * @param string $fullSqlQuery full sql query - */ - private function handleQueryExecuteError($isGotoFile, $error, $fullSqlQuery): void - { - if ($isGotoFile) { - $message = Message::rawError($error); - $response = ResponseRenderer::getInstance(); - $response->setRequestStatus(false); - $response->addJSON('message', $message); - } else { - Generator::mysqlDie($error, $fullSqlQuery, false); - } - - exit; - } - - /** - * Function to store the query as a bookmark - * - * @param string $db the current database - * @param string $bookmarkUser the bookmarking user - * @param string $sqlQueryForBookmark the query to be stored in bookmark - * @param string $bookmarkLabel bookmark label - * @param bool $bookmarkReplace whether to replace existing bookmarks - */ - public function storeTheQueryAsBookmark( - ?BookmarkFeature $bookmarkFeature, - $db, - $bookmarkUser, - $sqlQueryForBookmark, - $bookmarkLabel, - bool $bookmarkReplace - ): void { - $bfields = [ - 'bkm_database' => $db, - 'bkm_user' => $bookmarkUser, - 'bkm_sql_query' => $sqlQueryForBookmark, - 'bkm_label' => $bookmarkLabel, - ]; - - // Should we replace bookmark? - if ($bookmarkReplace && $bookmarkFeature !== null) { - $bookmarks = Bookmark::getList($bookmarkFeature, $this->dbi, $GLOBALS['cfg']['Server']['user'], $db); - foreach ($bookmarks as $bookmark) { - if ($bookmark->getLabel() != $bookmarkLabel) { - continue; - } - - $bookmark->delete(); - } - } - - $bookmark = Bookmark::createBookmark( - $this->dbi, - $bfields, - isset($_POST['bkm_all_users']) - ); - - if ($bookmark === false) { - return; - } - - $bookmark->save(); - } - - /** - * Function to get the affected or changed number of rows after executing a query - * - * @param bool $isAffected whether the query affected a table - * @param ResultInterface|false $result results of executing the query - * - * @return int|string number of rows affected or changed - * @psalm-return int|numeric-string - */ - private function getNumberOfRowsAffectedOrChanged($isAffected, $result) - { - if ($isAffected) { - return $this->dbi->affectedRows(); - } - - if ($result) { - return $result->numRows(); - } - - return 0; - } - - /** - * Checks if the current database has changed - * This could happen if the user sends a query like "USE `database`;" - * - * @param string $db the database in the query - * - * @return bool whether to reload the navigation(1) or not(0) - */ - private function hasCurrentDbChanged(string $db): bool - { - if ($db === '') { - return false; - } - - $currentDb = $this->dbi->fetchValue('SELECT DATABASE()'); - - // $current_db is false, except when a USE statement was sent - return ($currentDb != false) && ($db !== $currentDb); - } - - /** - * If a table, database or column gets dropped, clean comments. - * - * @param string $db current database - * @param string $table current table - * @param string|null $column current column - * @param bool $purge whether purge set or not - */ - private function cleanupRelations(string $db, string $table, ?string $column, bool $purge): void - { - if (! $purge || $db === '') { - return; - } - - if ($table !== '') { - if ($column !== null && $column !== '') { - $this->relationCleanup->column($db, $table, $column); - } else { - $this->relationCleanup->table($db, $table); - } - } else { - $this->relationCleanup->database($db); - } - } - - /** - * Function to count the total number of rows for the same 'SELECT' query without - * the 'LIMIT' clause that may have been programmatically added - * - * @param int|string $numRows number of rows affected/changed by the query - * @param bool $justBrowsing whether just browsing or not - * @param string $db the current database - * @param string $table the current table - * @param array $analyzedSqlResults the analyzed query and other variables set after analyzing the query - * @psalm-param int|numeric-string $numRows - * - * @return int|string unlimited number of rows - * @psalm-return int|numeric-string - */ - private function countQueryResults( - $numRows, - bool $justBrowsing, - string $db, - string $table, - array $analyzedSqlResults - ) { - /* Shortcut for not analyzed/empty query */ - if ($analyzedSqlResults === []) { - return 0; - } - - if (! $this->isAppendLimitClause($analyzedSqlResults)) { - // if we did not append a limit, set this to get a correct - // "Showing rows..." message - // $_SESSION['tmpval']['max_rows'] = 'all'; - $unlimNumRows = $numRows; - } elseif ($_SESSION['tmpval']['max_rows'] > $numRows) { - // When user has not defined a limit in query and total rows in - // result are less than max_rows to display, there is no need - // to count total rows for that query again - $unlimNumRows = $_SESSION['tmpval']['pos'] + $numRows; - } elseif ($analyzedSqlResults['querytype'] === 'SELECT' || $analyzedSqlResults['is_subquery']) { - // c o u n t q u e r y - - // If we are "just browsing", there is only one table (and no join), - // and no WHERE clause (or just 'WHERE 1 '), - // we do a quick count (which uses MaxExactCount) because - // SQL_CALC_FOUND_ROWS is not quick on large InnoDB tables - - // However, do not count again if we did it previously - // due to $find_real_end == true - if ($justBrowsing) { - // Get row count (is approximate for InnoDB) - $unlimNumRows = $this->dbi->getTable($db, $table)->countRecords(); - /** - * @todo Can we know at this point that this is InnoDB, - * (in this case there would be no need for getting - * an exact count)? - */ - if ($unlimNumRows < $GLOBALS['cfg']['MaxExactCount']) { - // Get the exact count if approximate count - // is less than MaxExactCount - /** - * @todo In countRecords(), MaxExactCount is also verified, - * so can we avoid checking it twice? - */ - $unlimNumRows = $this->dbi->getTable($db, $table) - ->countRecords(true); - } - } else { - $statement = $analyzedSqlResults['statement']; - $tokenList = $analyzedSqlResults['parser']->list; - $replaces = [ - // Remove ORDER BY to decrease unnecessary sorting time - [ - 'ORDER BY', - '', - ], - // Removes LIMIT clause that might have been added - [ - 'LIMIT', - '', - ], - ]; - $countQuery = 'SELECT COUNT(*) FROM (' . Query::replaceClauses( - $statement, - $tokenList, - $replaces - ) . ') as cnt'; - $unlimNumRows = $this->dbi->fetchValue($countQuery); - if ($unlimNumRows === false) { - $unlimNumRows = 0; - } - } - } else {// not $is_select - $unlimNumRows = 0; - } - - return $unlimNumRows; - } - - /** - * Function to handle all aspects relating to executing the query - * - * @param array $analyzedSqlResults analyzed sql results - * @param string $fullSqlQuery full sql query - * @param bool $isGotoFile whether to go to a file - * @param string $db current database - * @param string|null $table current table - * @param bool|null $findRealEnd whether to find the real end - * @param string|null $sqlQueryForBookmark sql query to be stored as bookmark - * @param array|null $extraData extra data - * - * @psalm-return array{ - * ResultInterface|false|null, - * int|numeric-string, - * int|numeric-string, - * array|null, - * array|null - * } - */ - private function executeTheQuery( - array $analyzedSqlResults, - $fullSqlQuery, - $isGotoFile, - string $db, - ?string $table, - ?bool $findRealEnd, - ?string $sqlQueryForBookmark, - $extraData - ): array { - $response = ResponseRenderer::getInstance(); - $response->getHeader()->getMenu()->setTable($table ?? ''); - - // Only if we ask to see the php code - if (isset($GLOBALS['show_as_php'])) { - $result = null; - $numRows = 0; - $unlimNumRows = 0; - $profilingResults = null; - } else { // If we don't ask to see the php code - Profiling::enable($this->dbi); - - if (! defined('TESTSUITE')) { - // close session in case the query takes too long - session_write_close(); - } - - $result = $this->dbi->tryQuery($fullSqlQuery); - $GLOBALS['querytime'] = $this->dbi->lastQueryExecutionTime; - - if (! defined('TESTSUITE')) { - // reopen session - session_start(); - } - - // Displays an error message if required and stop parsing the script - $error = $this->dbi->getError(); - if ($error && $GLOBALS['cfg']['IgnoreMultiSubmitErrors']) { - $extraData['error'] = $error; - } elseif ($error) { - $this->handleQueryExecuteError($isGotoFile, $error, $fullSqlQuery); - } - - // If there are no errors and bookmarklabel was given, - // store the query as a bookmark - if (! empty($_POST['bkm_label']) && $sqlQueryForBookmark) { - $bookmarkFeature = $this->relation->getRelationParameters()->bookmarkFeature; - $this->storeTheQueryAsBookmark( - $bookmarkFeature, - $db, - $bookmarkFeature !== null ? $GLOBALS['cfg']['Server']['user'] : '', - $sqlQueryForBookmark, - $_POST['bkm_label'], - isset($_POST['bkm_replace']) - ); - } - - // Gets the number of rows affected/returned - // (This must be done immediately after the query because - // mysql_affected_rows() reports about the last query done) - $numRows = $this->getNumberOfRowsAffectedOrChanged($analyzedSqlResults['is_affected'], $result); - - $profilingResults = Profiling::getInformation($this->dbi); - - $justBrowsing = self::isJustBrowsing($analyzedSqlResults, $findRealEnd ?? null); - - $unlimNumRows = $this->countQueryResults($numRows, $justBrowsing, $db, $table ?? '', $analyzedSqlResults); - - $this->cleanupRelations($db, $table ?? '', $_POST['dropped_column'] ?? null, ! empty($_POST['purge'])); - - if ( - isset($_POST['dropped_column']) - && $db !== '' && $table !== null && $table !== '' - ) { - // to refresh the list of indexes (Ajax mode) - - $indexes = Index::getFromTable($table, $db); - $indexesDuplicates = Index::findDuplicates($table, $db); - $template = new Template(); - - $extraData['indexes_list'] = $template->render('indexes', [ - 'url_params' => $GLOBALS['urlParams'], - 'indexes' => $indexes, - 'indexes_duplicates' => $indexesDuplicates, - ]); - } - } - - return [ - $result, - $numRows, - $unlimNumRows, - $profilingResults, - $extraData, - ]; - } - - /** - * Delete related transformation information - * - * @param string $db current database - * @param string $table current table - * @param array $analyzedSqlResults analyzed sql results - */ - private function deleteTransformationInfo(string $db, string $table, array $analyzedSqlResults): void - { - if (! isset($analyzedSqlResults['statement'])) { - return; - } - - $statement = $analyzedSqlResults['statement']; - if ($statement instanceof AlterStatement) { - if ( - ! empty($statement->altered[0]) - && $statement->altered[0]->options->has('DROP') - && ! empty($statement->altered[0]->field->column) - ) { - $this->transformations->clear($db, $table, $statement->altered[0]->field->column); - } - } elseif ($statement instanceof DropStatement) { - $this->transformations->clear($db, $table); - } - } - - /** - * Function to get the message for the no rows returned case - * - * @param string|null $messageToShow message to show - * @param array $analyzedSqlResults analyzed sql results - * @param int|string $numRows number of rows - */ - private function getMessageForNoRowsReturned( - ?string $messageToShow, - array $analyzedSqlResults, - $numRows - ): Message { - if ($analyzedSqlResults['querytype'] === 'DELETE"') { - $message = Message::getMessageForDeletedRows($numRows); - } elseif ($analyzedSqlResults['is_insert']) { - if ($analyzedSqlResults['querytype'] === 'REPLACE') { - // For REPLACE we get DELETED + INSERTED row count, - // so we have to call it affected - $message = Message::getMessageForAffectedRows($numRows); - } else { - $message = Message::getMessageForInsertedRows($numRows); - } - - $insertId = $this->dbi->insertId(); - if ($insertId !== 0) { - // insert_id is id of FIRST record inserted in one insert, - // so if we inserted multiple rows, we had to increment this - $message->addText('[br]'); - // need to use a temporary because the Message class - // currently supports adding parameters only to the first - // message - $inserted = Message::notice(__('Inserted row id: %1$d')); - $inserted->addParam($insertId + $numRows - 1); - $message->addMessage($inserted); - } - } elseif ($analyzedSqlResults['is_affected']) { - $message = Message::getMessageForAffectedRows($numRows); - - // Ok, here is an explanation for the !$is_select. - // The form generated by PhpMyAdmin\SqlQueryForm - // and /database/sql has many submit buttons - // on the same form, and some confusion arises from the - // fact that $message_to_show is sent for every case. - // The $message_to_show containing a success message and sent with - // the form should not have priority over errors - } elseif ($messageToShow && $analyzedSqlResults['querytype'] !== 'SELECT') { - $message = Message::rawSuccess(htmlspecialchars($messageToShow)); - } elseif (! empty($GLOBALS['show_as_php'])) { - $message = Message::success(__('Showing as PHP code')); - } elseif (isset($GLOBALS['show_as_php'])) { - /* User disable showing as PHP, query is only displayed */ - $message = Message::notice(__('Showing SQL query')); - } else { - $message = Message::success( - __('MySQL returned an empty result set (i.e. zero rows).') - ); - } - - if (isset($GLOBALS['querytime'])) { - $queryTime = Message::notice( - '(' . __('Query took %01.4f seconds.') . ')' - ); - $queryTime->addParam($GLOBALS['querytime']); - $message->addMessage($queryTime); - } - - // In case of ROLLBACK, notify the user. - if (isset($_POST['rollback_query'])) { - $message->addText(__('[ROLLBACK occurred.]')); - } - - return $message; - } - - /** - * Function to respond back when the query returns zero rows - * This method is called - * 1-> When browsing an empty table - * 2-> When executing a query on a non empty table which returns zero results - * 3-> When executing a query on an empty table - * 4-> When executing an INSERT, UPDATE, DELETE query from the SQL tab - * 5-> When deleting a row from BROWSE tab - * 6-> When searching using the SEARCH tab which returns zero results - * 7-> When changing the structure of the table except change operation - * - * @param array $analyzedSqlResults analyzed sql results - * @param string $db current database - * @param string|null $table current table - * @param string|null $messageToShow message to show - * @param int|string $numRows number of rows - * @param DisplayResults $displayResultsObject DisplayResult instance - * @param array|null $extraData extra data - * @param array|null $profilingResults profiling results - * @param ResultInterface|false|null $result executed query results - * @param string $sqlQuery sql query - * @param string|null $completeQuery complete sql query - * @psalm-param int|numeric-string $numRows - * - * @return string html - */ - private function getQueryResponseForNoResultsReturned( - array $analyzedSqlResults, - string $db, - ?string $table, - ?string $messageToShow, - $numRows, - $displayResultsObject, - ?array $extraData, - ?array $profilingResults, - $result, - $sqlQuery, - ?string $completeQuery - ): string { - if ($this->isDeleteTransformationInfo($analyzedSqlResults)) { - $this->deleteTransformationInfo($db, $table ?? '', $analyzedSqlResults); - } - - if (isset($extraData['error'])) { - $message = Message::rawError($extraData['error']); - } else { - $message = $this->getMessageForNoRowsReturned($messageToShow, $analyzedSqlResults, $numRows); - } - - $queryMessage = Generator::getMessage($message, $GLOBALS['sql_query'], 'success'); - - if (isset($GLOBALS['show_as_php'])) { - return $queryMessage; - } - - if (! empty($GLOBALS['reload'])) { - $extraData['reload'] = 1; - $extraData['db'] = $GLOBALS['db']; - } - - // For ajax requests add message and sql_query as JSON - if (empty($_REQUEST['ajax_page_request'])) { - $extraData['message'] = $message; - if ($GLOBALS['cfg']['ShowSQL']) { - $extraData['sql_query'] = $queryMessage; - } - } - - $response = ResponseRenderer::getInstance(); - $response->addJSON($extraData ?? []); - - if (empty($analyzedSqlResults['is_select']) || isset($extraData['error'])) { - return $queryMessage; - } - - $displayParts = [ - 'edit_lnk' => null, - 'del_lnk' => null, - 'sort_lnk' => '1', - 'nav_bar' => '0', - 'bkm_form' => '1', - 'text_btn' => '1', - 'pview_lnk' => '1', - ]; - - $sqlQueryResultsTable = $this->getHtmlForSqlQueryResultsTable( - $displayResultsObject, - $displayParts, - false, - 0, - $numRows, - null, - $result, - $analyzedSqlResults, - true - ); - - $profilingChart = ''; - if ($profilingResults !== null) { - $header = $response->getHeader(); - $scripts = $header->getScripts(); - $scripts->addFile('sql.js'); - - $profiling = $this->getDetailedProfilingStats($profilingResults); - $profilingChart = $this->template->render('sql/profiling_chart', ['profiling' => $profiling]); - } - - $bookmark = ''; - $bookmarkFeature = $this->relation->getRelationParameters()->bookmarkFeature; - if ( - $bookmarkFeature !== null - && empty($_GET['id_bookmark']) - && $sqlQuery - ) { - $bookmark = $this->template->render('sql/bookmark', [ - 'db' => $db, - 'goto' => Url::getFromRoute('/sql', [ - 'db' => $db, - 'table' => $table, - 'sql_query' => $sqlQuery, - 'id_bookmark' => 1, - ]), - 'user' => $GLOBALS['cfg']['Server']['user'], - 'sql_query' => $completeQuery ?? $sqlQuery, - ]); - } - - return $this->template->render('sql/no_results_returned', [ - 'message' => $queryMessage, - 'sql_query_results_table' => $sqlQueryResultsTable, - 'profiling_chart' => $profilingChart, - 'bookmark' => $bookmark, - 'db' => $db, - 'table' => $table, - 'sql_query' => $sqlQuery, - 'is_procedure' => ! empty($analyzedSqlResults['procedure']), - ]); - } - - /** - * Function to send response for ajax grid edit - * - * @param ResultInterface $result result of the executed query - */ - private function getResponseForGridEdit(ResultInterface $result): void - { - $row = $result->fetchRow(); - $fieldsMeta = $this->dbi->getFieldsMeta($result); - - if (isset($fieldsMeta[0]) && $fieldsMeta[0]->isBinary()) { - $row[0] = bin2hex($row[0]); - } - - $response = ResponseRenderer::getInstance(); - $response->addJSON('value', $row[0]); - } - - /** - * Returns a message for successful creation of a bookmark or null if a bookmark - * was not created - */ - private function getBookmarkCreatedMessage(): string - { - $output = ''; - if (isset($_GET['label'])) { - $message = Message::success( - __('Bookmark %s has been created.') - ); - $message->addParam($_GET['label']); - $output = $message->getDisplay(); - } - - return $output; - } - - /** - * Function to get html for the sql query results table - * - * @param DisplayResults $displayResultsObject instance of DisplayResult - * @param array $displayParts the parts to display - * @param bool $editable whether the result table is - * editable or not - * @param int|string $unlimNumRows unlimited number of rows - * @param int|string $numRows number of rows - * @param array|null $showTable table definitions - * @param ResultInterface|false|null $result result of the executed query - * @param array $analyzedSqlResults analyzed sql results - * @param bool $isLimitedDisplay Show only limited operations or not - * @psalm-param int|numeric-string $unlimNumRows - * @psalm-param int|numeric-string $numRows - */ - private function getHtmlForSqlQueryResultsTable( - $displayResultsObject, - array $displayParts, - $editable, - $unlimNumRows, - $numRows, - ?array $showTable, - $result, - array $analyzedSqlResults, - $isLimitedDisplay = false - ): string { - $printView = isset($_POST['printview']) && $_POST['printview'] == '1' ? '1' : null; - $tableHtml = ''; - $isBrowseDistinct = ! empty($_POST['is_browse_distinct']); - - if ($analyzedSqlResults['is_procedure']) { - do { - if ($result === null) { - $result = $this->dbi->storeResult(); - } - - if ($result === false) { - $result = null; - continue; - } - - $numRows = $result->numRows(); - - if ($numRows > 0) { - $fieldsMeta = $this->dbi->getFieldsMeta($result); - $fieldsCount = count($fieldsMeta); - - $displayResultsObject->setProperties( - $numRows, - $fieldsMeta, - $analyzedSqlResults['is_count'], - $analyzedSqlResults['is_export'], - $analyzedSqlResults['is_func'], - $analyzedSqlResults['is_analyse'], - $numRows, - $fieldsCount, - $GLOBALS['querytime'], - $GLOBALS['text_dir'], - $analyzedSqlResults['is_maint'], - $analyzedSqlResults['is_explain'], - $analyzedSqlResults['is_show'], - $showTable, - $printView, - $editable, - $isBrowseDistinct - ); - - $displayParts = [ - 'edit_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, - 'del_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, - 'sort_lnk' => '1', - 'nav_bar' => '1', - 'bkm_form' => '1', - 'text_btn' => '1', - 'pview_lnk' => '1', - ]; - - $tableHtml .= $displayResultsObject->getTable( - $result, - $displayParts, - $analyzedSqlResults, - $isLimitedDisplay - ); - } - - $result = null; - } while ($this->dbi->moreResults() && $this->dbi->nextResult()); - } else { - $fieldsMeta = []; - if (isset($result) && ! is_bool($result)) { - $fieldsMeta = $this->dbi->getFieldsMeta($result); - } - - $fieldsCount = count($fieldsMeta); - $_SESSION['is_multi_query'] = false; - $displayResultsObject->setProperties( - $unlimNumRows, - $fieldsMeta, - $analyzedSqlResults['is_count'], - $analyzedSqlResults['is_export'], - $analyzedSqlResults['is_func'], - $analyzedSqlResults['is_analyse'], - $numRows, - $fieldsCount, - $GLOBALS['querytime'], - $GLOBALS['text_dir'], - $analyzedSqlResults['is_maint'], - $analyzedSqlResults['is_explain'], - $analyzedSqlResults['is_show'], - $showTable, - $printView, - $editable, - $isBrowseDistinct - ); - - if (! is_bool($result)) { - $tableHtml .= $displayResultsObject->getTable( - $result, - $displayParts, - $analyzedSqlResults, - $isLimitedDisplay - ); - } - } - - return $tableHtml; - } - - /** - * Function to get html for the previous query if there is such. - * - * @param string|null $displayQuery display query - * @param bool $showSql whether to show sql - * @param array $sqlData sql data - * @param Message|string $displayMessage display message - */ - private function getHtmlForPreviousUpdateQuery( - ?string $displayQuery, - bool $showSql, - array $sqlData, - $displayMessage - ): string { - $output = ''; - if ($displayQuery !== null && $showSql && $sqlData === []) { - $output = Generator::getMessage($displayMessage, $displayQuery, 'success'); - } - - return $output; - } - - /** - * To get the message if a column index is missing. If not will return null - * - * @param string|null $table current table - * @param string $database current database - * @param bool $editable whether the results table can be editable or not - * @param bool $hasUniqueKey whether there is a unique key - */ - private function getMessageIfMissingColumnIndex( - ?string $table, - string $database, - bool $editable, - bool $hasUniqueKey - ): string { - if ($table === null) { - return ''; - } - - $output = ''; - if (Utilities::isSystemSchema($database) || ! $editable) { - $output = Message::notice( - sprintf( - __( - 'Current selection does not contain a unique column.' - . ' Grid edit, checkbox, Edit, Copy and Delete features' - . ' are not available. %s' - ), - MySQLDocumentation::showDocumentation( - 'config', - 'cfg_RowActionLinksWithoutUnique' - ) - ) - )->getDisplay(); - } elseif (! $hasUniqueKey) { - $output = Message::notice( - sprintf( - __( - 'Current selection does not contain a unique column.' - . ' Grid edit, Edit, Copy and Delete features may result in' - . ' undesired behavior. %s' - ), - MySQLDocumentation::showDocumentation( - 'config', - 'cfg_RowActionLinksWithoutUnique' - ) - ) - )->getDisplay(); - } - - return $output; - } - - /** - * Function to display results when the executed query returns non empty results - * - * @param ResultInterface|false|null $result executed query results - * @param array $analyzedSqlResults analysed sql results - * @param string $db current database - * @param string|null $table current table - * @param array|null $sqlData sql data - * @param DisplayResults $displayResultsObject Instance of DisplayResults - * @param int|string $unlimNumRows unlimited number of rows - * @param int|string $numRows number of rows - * @param string|null $dispQuery display query - * @param Message|string|null $dispMessage display message - * @param array|null $profilingResults profiling results - * @param string $sqlQuery sql query - * @param string|null $completeQuery complete sql query - * @psalm-param int|numeric-string $unlimNumRows - * @psalm-param int|numeric-string $numRows - * - * @return string html - */ - private function getQueryResponseForResultsReturned( - $result, - array $analyzedSqlResults, - string $db, - ?string $table, - ?array $sqlData, - $displayResultsObject, - $unlimNumRows, - $numRows, - ?string $dispQuery, - $dispMessage, - ?array $profilingResults, - $sqlQuery, - ?string $completeQuery - ): string { - global $showtable; - - // If we are retrieving the full value of a truncated field or the original - // value of a transformed field, show it here - if (isset($_POST['grid_edit']) && $_POST['grid_edit'] == true && is_object($result)) { - $this->getResponseForGridEdit($result); - exit; - } - - // Gets the list of fields properties - $fieldsMeta = []; - if ($result !== null && ! is_bool($result)) { - $fieldsMeta = $this->dbi->getFieldsMeta($result); - } - - // Should be initialized these parameters before parsing - if (! is_array($showtable)) { - $showtable = null; - } - - $response = ResponseRenderer::getInstance(); - $header = $response->getHeader(); - $scripts = $header->getScripts(); - - $justOneTable = $this->resultSetHasJustOneTable($fieldsMeta); - - // hide edit and delete links: - // - for information_schema - // - if the result set does not contain all the columns of a unique key - // (unless this is an updatable view) - // - if the SELECT query contains a join or a subquery - - $updatableView = false; - - $statement = $analyzedSqlResults['statement'] ?? null; - if ($statement instanceof SelectStatement) { - if ($statement->expr && $statement->expr[0]->expr === '*' && $table) { - $_table = new Table($table, $db); - $updatableView = $_table->isUpdatableView(); - } - - if ( - $analyzedSqlResults['join'] - || $analyzedSqlResults['is_subquery'] - || count($analyzedSqlResults['select_tables']) !== 1 - ) { - $justOneTable = false; - } - } - - $hasUnique = $table && $this->resultSetContainsUniqueKey($db, $table, $fieldsMeta); - - $editable = ($hasUnique - || $GLOBALS['cfg']['RowActionLinksWithoutUnique'] - || $updatableView) - && $justOneTable - && ! Utilities::isSystemSchema($db); - - $_SESSION['tmpval']['possible_as_geometry'] = $editable; - - $displayParts = [ - 'edit_lnk' => $displayResultsObject::UPDATE_ROW, - 'del_lnk' => $displayResultsObject::DELETE_ROW, - 'sort_lnk' => '1', - 'nav_bar' => '1', - 'bkm_form' => '1', - 'text_btn' => '0', - 'pview_lnk' => '1', - ]; - - if (! $editable) { - $displayParts = [ - 'edit_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, - 'del_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, - 'sort_lnk' => '1', - 'nav_bar' => '1', - 'bkm_form' => '1', - 'text_btn' => '1', - 'pview_lnk' => '1', - ]; - } - - if (isset($_POST['printview']) && $_POST['printview'] == '1') { - $displayParts = [ - 'edit_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, - 'del_lnk' => $displayResultsObject::NO_EDIT_OR_DELETE, - 'sort_lnk' => '0', - 'nav_bar' => '0', - 'bkm_form' => '0', - 'text_btn' => '0', - 'pview_lnk' => '0', - ]; - } - - if (! isset($_POST['printview']) || $_POST['printview'] != '1') { - $scripts->addFile('makegrid.js'); - $scripts->addFile('sql.js'); - unset($GLOBALS['message']); - //we don't need to buffer the output in getMessage here. - //set a global variable and check against it in the function - $GLOBALS['buffer_message'] = false; - } - - $previousUpdateQueryHtml = $this->getHtmlForPreviousUpdateQuery( - $dispQuery, - (bool) $GLOBALS['cfg']['ShowSQL'], - $sqlData ?? [], - $dispMessage ?? '' - ); - - $profilingChartHtml = ''; - if ($profilingResults) { - $profiling = $this->getDetailedProfilingStats($profilingResults); - $profilingChartHtml = $this->template->render('sql/profiling_chart', ['profiling' => $profiling]); - } - - $missingUniqueColumnMessage = $this->getMessageIfMissingColumnIndex($table, $db, $editable, $hasUnique); - - $bookmarkCreatedMessage = $this->getBookmarkCreatedMessage(); - - $tableHtml = $this->getHtmlForSqlQueryResultsTable( - $displayResultsObject, - $displayParts, - $editable, - $unlimNumRows, - $numRows, - $showtable, - $result, - $analyzedSqlResults - ); - - $bookmarkSupportHtml = ''; - $bookmarkFeature = $this->relation->getRelationParameters()->bookmarkFeature; - if ( - $bookmarkFeature !== null - && $displayParts['bkm_form'] == '1' - && empty($_GET['id_bookmark']) - && $sqlQuery - ) { - $bookmarkSupportHtml = $this->template->render('sql/bookmark', [ - 'db' => $db, - 'goto' => Url::getFromRoute('/sql', [ - 'db' => $db, - 'table' => $table, - 'sql_query' => $sqlQuery, - 'id_bookmark' => 1, - ]), - 'user' => $GLOBALS['cfg']['Server']['user'], - 'sql_query' => $completeQuery ?? $sqlQuery, - ]); - } - - return $this->template->render('sql/sql_query_results', [ - 'previous_update_query' => $previousUpdateQueryHtml, - 'profiling_chart' => $profilingChartHtml, - 'missing_unique_column_message' => $missingUniqueColumnMessage, - 'bookmark_created_message' => $bookmarkCreatedMessage, - 'table' => $tableHtml, - 'bookmark_support' => $bookmarkSupportHtml, - ]); - } - - /** - * Function to execute the query and send the response - * - * @param array|null $analyzedSqlResults analysed sql results - * @param bool $isGotoFile whether goto file or not - * @param string $db current database - * @param string|null $table current table - * @param bool|null $findRealEnd whether to find real end or not - * @param string|null $sqlQueryForBookmark the sql query to be stored as bookmark - * @param array|null $extraData extra data - * @param string|null $messageToShow message to show - * @param array|null $sqlData sql data - * @param string $goto goto page url - * @param string|null $dispQuery display query - * @param Message|string|null $dispMessage display message - * @param string $sqlQuery sql query - * @param string|null $completeQuery complete query - */ - public function executeQueryAndSendQueryResponse( - $analyzedSqlResults, - $isGotoFile, - string $db, - ?string $table, - $findRealEnd, - $sqlQueryForBookmark, - $extraData, - $messageToShow, - $sqlData, - $goto, - $dispQuery, - $dispMessage, - $sqlQuery, - $completeQuery - ): string { - if ($analyzedSqlResults == null) { - // Parse and analyze the query - [ - $analyzedSqlResults, - $db, - $tableFromSql, - ] = ParseAnalyze::sqlQuery($sqlQuery, $db); - - $table = $tableFromSql ?: $table; - } - - return $this->executeQueryAndGetQueryResponse( - $analyzedSqlResults, // analyzed_sql_results - $isGotoFile, // is_gotofile - $db, // db - $table, // table - $findRealEnd, // find_real_end - $sqlQueryForBookmark, // sql_query_for_bookmark - $extraData, // extra_data - $messageToShow, // message_to_show - $sqlData, // sql_data - $goto, // goto - $dispQuery, // disp_query - $dispMessage, // disp_message - $sqlQuery, // sql_query - $completeQuery // complete_query - ); - } - - /** - * Function to execute the query and send the response - * - * @param array $analyzedSqlResults analysed sql results - * @param bool $isGotoFile whether goto file or not - * @param string $db current database - * @param string|null $table current table - * @param bool|null $findRealEnd whether to find real end or not - * @param string|null $sqlQueryForBookmark the sql query to be stored as bookmark - * @param array|null $extraData extra data - * @param string|null $messageToShow message to show - * @param array|null $sqlData sql data - * @param string $goto goto page url - * @param string|null $dispQuery display query - * @param Message|string|null $dispMessage display message - * @param string $sqlQuery sql query - * @param string|null $completeQuery complete query - * - * @return string html - */ - public function executeQueryAndGetQueryResponse( - array $analyzedSqlResults, - $isGotoFile, - string $db, - ?string $table, - $findRealEnd, - ?string $sqlQueryForBookmark, - $extraData, - ?string $messageToShow, - $sqlData, - $goto, - ?string $dispQuery, - $dispMessage, - $sqlQuery, - ?string $completeQuery - ): string { - // Handle disable/enable foreign key checks - $defaultFkCheck = ForeignKey::handleDisableCheckInit(); - - // Handle remembered sorting order, only for single table query. - // Handling is not required when it's a union query - // (the parser never sets the 'union' key to 0). - // Handling is also not required if we came from the "Sort by key" - // drop-down. - if ( - $analyzedSqlResults !== [] - && $this->isRememberSortingOrder($analyzedSqlResults) - && empty($analyzedSqlResults['union']) - && ! isset($_POST['sort_by_key']) - ) { - if (! isset($_SESSION['sql_from_query_box'])) { - $this->handleSortOrder($db, $table, $analyzedSqlResults, $sqlQuery); - } else { - unset($_SESSION['sql_from_query_box']); - } - } - - $displayResultsObject = new DisplayResults( - $GLOBALS['dbi'], - $GLOBALS['db'], - $GLOBALS['table'], - $GLOBALS['server'], - $goto, - $sqlQuery - ); - $displayResultsObject->setConfigParamsForDisplayTable(); - - // assign default full_sql_query - $fullSqlQuery = $sqlQuery; - - // Do append a "LIMIT" clause? - if ($this->isAppendLimitClause($analyzedSqlResults)) { - $fullSqlQuery = $this->getSqlWithLimitClause($analyzedSqlResults); - } - - $GLOBALS['reload'] = $this->hasCurrentDbChanged($db); - $this->dbi->selectDb($db); - - [ - $result, - $numRows, - $unlimNumRows, - $profilingResults, - $extraData, - ] = $this->executeTheQuery( - $analyzedSqlResults, - $fullSqlQuery, - $isGotoFile, - $db, - $table, - $findRealEnd, - $sqlQueryForBookmark, - $extraData - ); - - if ($this->dbi->moreResults()) { - $this->dbi->nextResult(); - } - - $warningMessages = $this->operations->getWarningMessagesArray(); - - // No rows returned -> move back to the calling page - if (($numRows == 0 && $unlimNumRows == 0) || $analyzedSqlResults['is_affected']) { - $htmlOutput = $this->getQueryResponseForNoResultsReturned( - $analyzedSqlResults, - $db, - $table, - $messageToShow, - $numRows, - $displayResultsObject, - $extraData, - $profilingResults, - $result, - $sqlQuery, - $completeQuery - ); - } else { - // At least one row is returned -> displays a table with results - $htmlOutput = $this->getQueryResponseForResultsReturned( - $result, - $analyzedSqlResults, - $db, - $table, - $sqlData, - $displayResultsObject, - $unlimNumRows, - $numRows, - $dispQuery, - $dispMessage, - $profilingResults, - $sqlQuery, - $completeQuery - ); - } - - // Handle disable/enable foreign key checks - ForeignKey::handleDisableCheckCleanup($defaultFkCheck); - - foreach ($warningMessages as $warning) { - $message = Message::notice(Message::sanitize($warning)); - $htmlOutput .= $message->getDisplay(); - } - - return $htmlOutput; - } - - /** - * Function to define pos to display a row - * - * @param int $numberOfLine Number of the line to display - * - * @return int Start position to display the line - */ - private function getStartPosToDisplayRow($numberOfLine) - { - $maxRows = $_SESSION['tmpval']['max_rows']; - - return @((int) ceil($numberOfLine / $maxRows) - 1) * $maxRows; - } - - /** - * Function to calculate new pos if pos is higher than number of rows - * of displayed table - * - * @param string $db Database name - * @param string $table Table name - * @param int|null $pos Initial position - * - * @return int Number of pos to display last page - */ - public function calculatePosForLastPage($db, $table, $pos) - { - if ($pos === null) { - $pos = $_SESSION['tmpval']['pos']; - } - - $tableObject = new Table($table, $db); - $unlimNumRows = $tableObject->countRecords(true); - //If position is higher than number of rows - if ($unlimNumRows <= $pos && $pos != 0) { - $pos = $this->getStartPosToDisplayRow($unlimNumRows); - } - - return $pos; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/StorageEngine.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/StorageEngine.php deleted file mode 100644 index be18f51..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/StorageEngine.php +++ /dev/null @@ -1,547 +0,0 @@ -engine = $engine; - $this->title = $storage_engines[$engine]['Engine']; - $this->comment = ($storage_engines[$engine]['Comment'] ?? ''); - switch ($storage_engines[$engine]['Support']) { - case 'DEFAULT': - $this->support = self::SUPPORT_DEFAULT; - break; - case 'YES': - $this->support = self::SUPPORT_YES; - break; - case 'DISABLED': - $this->support = self::SUPPORT_DISABLED; - break; - case 'NO': - default: - $this->support = self::SUPPORT_NO; - } - } - - /** - * Returns array of storage engines - * - * @return array[] array of storage engines - * - * @static - * @staticvar array $storage_engines storage engines - */ - public static function getStorageEngines() - { - global $dbi; - - static $storage_engines = null; - - if ($storage_engines == null) { - $storage_engines = $dbi->fetchResult('SHOW STORAGE ENGINES', 'Engine'); - if (! $dbi->isMariaDB() && $dbi->getVersion() >= 50708) { - $disabled = (string) SessionCache::get( - 'disabled_storage_engines', - /** @return mixed|false */ - static function () use ($dbi) { - return $dbi->fetchValue( - 'SELECT @@disabled_storage_engines' - ); - } - ); - foreach (explode(',', $disabled) as $engine) { - if (! isset($storage_engines[$engine])) { - continue; - } - - $storage_engines[$engine]['Support'] = 'DISABLED'; - } - } - } - - return $storage_engines; - } - - /** - * Returns if Mroonga is available to be used - * - * This is public to be used in the StructureComtroller, the first release - * of this function was looking Mroonga in the engines list but this second - * method checks too that mroonga is installed successfully - */ - public static function hasMroongaEngine(): bool - { - global $dbi; - $cacheKey = 'storage-engine.mroonga.has.mroonga_command'; - - if (Cache::has($cacheKey)) { - return (bool) Cache::get($cacheKey, false); - } - - $supportsMroonga = $dbi->tryQuery('SELECT mroonga_command(\'object_list\');') !== false; - Cache::set($cacheKey, $supportsMroonga); - - return $supportsMroonga; - } - - /** - * Get the lengths of a table of database - * - * @param string $dbName DB name - * @param string $tableName Table name - * - * @return int[] - */ - public static function getMroongaLengths(string $dbName, string $tableName): array - { - global $dbi; - $cacheKey = 'storage-engine.mroonga.object_list.' . $dbName; - - $dbi->selectDb($dbName);// Needed for mroonga_command calls - - if (! Cache::has($cacheKey)) { - $result = $dbi->fetchSingleRow('SELECT mroonga_command(\'object_list\');', DatabaseInterface::FETCH_NUM); - $objectList = (array) json_decode($result[0] ?? '', true); - foreach ($objectList as $mroongaName => $mroongaData) { - /** - * We only need the objects of table or column types, more info: - * - https://groonga.org/docs/reference/commands/object_list.html#object-type - * - https://groonga.org/docs/reference/commands/object_inspect.html#table-type-id - * - https://groonga.org/docs/reference/commands/object_inspect.html#column-type-raw-id - */ - if (in_array($mroongaData['type']['id'], [48, 49, 50, 51, 64, 65, 72])) { - continue; - } - - unset($objectList[$mroongaName]); - } - - // At this point, we can remove all the data because only need the mroongaName values - Cache::set($cacheKey, array_keys($objectList)); - } - - /** @var string[] $objectList */ - $objectList = Cache::get($cacheKey, []); - - $dataLength = 0; - $indexLength = 0; - foreach ($objectList as $mroongaName) { - if (strncmp($tableName, $mroongaName, strlen($tableName)) !== 0) { - continue; - } - - $result = $dbi->fetchSingleRow( - 'SELECT mroonga_command(\'object_inspect ' . $mroongaName . '\');', - DatabaseInterface::FETCH_NUM - ); - $decodedData = json_decode($result[0] ?? '', true); - if ($decodedData === null) { - // Invalid for some strange reason, maybe query failed - continue; - } - - $indexPrefix = $tableName . '#' . $tableName; - if (strncmp($indexPrefix, $mroongaName, strlen($indexPrefix)) === 0) { - $indexLength += $decodedData['disk_usage']; - continue; - } - - $dataLength += $decodedData['disk_usage']; - } - - return [$dataLength, $indexLength]; - } - - /** - * @return array> - */ - public static function getArray(): array - { - $engines = []; - - foreach (self::getStorageEngines() as $details) { - // Don't show PERFORMANCE_SCHEMA engine (MySQL 5.5) - if ( - $details['Support'] === 'NO' - || $details['Support'] === 'DISABLED' - || $details['Engine'] === 'PERFORMANCE_SCHEMA' - ) { - continue; - } - - $engines[$details['Engine']] = [ - 'name' => $details['Engine'], - 'comment' => $details['Comment'], - 'is_default' => $details['Support'] === 'DEFAULT', - ]; - } - - return $engines; - } - - /** - * Loads the corresponding engine plugin, if available. - * - * @param string $engine The engine ID - * - * @return StorageEngine The engine plugin - * - * @static - */ - public static function getEngine($engine) - { - switch (mb_strtolower($engine)) { - case 'bdb': - return new Bdb($engine); - - case 'berkeleydb': - return new Berkeleydb($engine); - - case 'binlog': - return new Binlog($engine); - - case 'innobase': - return new Innobase($engine); - - case 'innodb': - return new Innodb($engine); - - case 'memory': - return new Memory($engine); - - case 'merge': - return new Merge($engine); - - case 'mrg_myisam': - return new MrgMyisam($engine); - - case 'myisam': - return new Myisam($engine); - - case 'ndbcluster': - return new Ndbcluster($engine); - - case 'pbxt': - return new Pbxt($engine); - - case 'performance_schema': - return new PerformanceSchema($engine); - - default: - return new StorageEngine($engine); - } - } - - /** - * Returns true if given engine name is supported/valid, otherwise false - * - * @param string $engine name of engine - * - * @static - */ - public static function isValid($engine): bool - { - if ($engine === 'PBMS') { - return true; - } - - $storage_engines = self::getStorageEngines(); - - return isset($storage_engines[$engine]); - } - - /** - * Returns as HTML table of the engine's server variables - * - * @return string The table that was generated based on the retrieved - * information - */ - public function getHtmlVariables() - { - $ret = ''; - - foreach ($this->getVariablesStatus() as $details) { - $ret .= '' . "\n" - . ' ' . "\n"; - if (! empty($details['desc'])) { - $ret .= ' ' - . Generator::showHint($details['desc']) - . "\n"; - } - - $ret .= ' ' . "\n" - . ' ' . htmlspecialchars($details['title']) . '' - . "\n" - . ' '; - switch ($details['type']) { - case self::DETAILS_TYPE_SIZE: - $parsed_size = $this->resolveTypeSize($details['value']); - if ($parsed_size !== null) { - $ret .= $parsed_size[0] . ' ' . $parsed_size[1]; - } - - break; - case self::DETAILS_TYPE_NUMERIC: - $ret .= Util::formatNumber($details['value']) . ' '; - break; - default: - $ret .= htmlspecialchars($details['value']) . ' '; - } - - $ret .= '' . "\n" - . '' . "\n"; - } - - if (! $ret) { - $ret = '

            ' . "\n" - . ' ' - . __('There is no detailed status information available for this storage engine.') - . "\n" - . '

            ' . "\n"; - } else { - $ret = '' - . "\n" . $ret . '
            ' . "\n"; - } - - return $ret; - } - - /** - * Returns the engine specific handling for - * DETAILS_TYPE_SIZE type variables. - * - * This function should be overridden when - * DETAILS_TYPE_SIZE type needs to be - * handled differently for a particular engine. - * - * @param int $value Value to format - * - * @return array|null the formatted value and its unit - */ - public function resolveTypeSize($value): ?array - { - return Util::formatByteDown($value); - } - - /** - * Returns array with detailed info about engine specific server variables - * - * @return array array with detailed info about specific engine server variables - */ - public function getVariablesStatus() - { - global $dbi; - - $variables = $this->getVariables(); - $like = $this->getVariablesLikePattern(); - - if ($like) { - $like = " LIKE '" . $like . "' "; - } else { - $like = ''; - } - - $mysql_vars = []; - - $sql_query = 'SHOW GLOBAL VARIABLES ' . $like . ';'; - $res = $dbi->query($sql_query); - foreach ($res as $row) { - if (isset($variables[$row['Variable_name']])) { - $mysql_vars[$row['Variable_name']] = $variables[$row['Variable_name']]; - } elseif (! $like && mb_stripos($row['Variable_name'], $this->engine) !== 0) { - continue; - } - - $mysql_vars[$row['Variable_name']]['value'] = $row['Value']; - - if (empty($mysql_vars[$row['Variable_name']]['title'])) { - $mysql_vars[$row['Variable_name']]['title'] = $row['Variable_name']; - } - - if (isset($mysql_vars[$row['Variable_name']]['type'])) { - continue; - } - - $mysql_vars[$row['Variable_name']]['type'] = self::DETAILS_TYPE_PLAINTEXT; - } - - return $mysql_vars; - } - - /** - * Reveals the engine's title - * - * @return string The title - */ - public function getTitle() - { - return $this->title; - } - - /** - * Fetches the server's comment about this engine - * - * @return string The comment - */ - public function getComment() - { - return $this->comment; - } - - /** - * Information message on whether this storage engine is supported - * - * @return string The localized message. - */ - public function getSupportInformationMessage() - { - switch ($this->support) { - case self::SUPPORT_DEFAULT: - $message = __('%s is the default storage engine on this MySQL server.'); - break; - case self::SUPPORT_YES: - $message = __('%s is available on this MySQL server.'); - break; - case self::SUPPORT_DISABLED: - $message = __('%s has been disabled for this MySQL server.'); - break; - case self::SUPPORT_NO: - default: - $message = __('This MySQL server does not support the %s storage engine.'); - } - - return sprintf($message, htmlspecialchars($this->title)); - } - - /** - * Generates a list of MySQL variables that provide information about this - * engine. This function should be overridden when extending this class - * for a particular engine. - * - * @return array The list of variables. - */ - public function getVariables() - { - return []; - } - - /** - * Returns string with filename for the MySQL helppage - * about this storage engine - * - * @return string MySQL help page filename - */ - public function getMysqlHelpPage() - { - return $this->engine . '-storage-engine'; - } - - /** - * Returns the pattern to be used in the query for SQL variables - * related to the storage engine - * - * @return string SQL query LIKE pattern - */ - public function getVariablesLikePattern() - { - return ''; - } - - /** - * Returns a list of available information pages with labels - * - * @return string[] The list - */ - public function getInfoPages() - { - return []; - } - - /** - * Generates the requested information page - * - * @param string $id page id - * - * @return string html output - */ - public function getPage($id) - { - if (! array_key_exists($id, $this->getInfoPages())) { - return ''; - } - - $id = 'getPage' . $id; - - return $this->$id(); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Maintenance.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Maintenance.php deleted file mode 100644 index 97c3423..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Maintenance.php +++ /dev/null @@ -1,184 +0,0 @@ -dbi = $dbi; - } - - /** - * @param TableName[] $tables - * - * @return array|string> - * @psalm-return array{array, string} - */ - public function getAnalyzeTableRows(DatabaseName $db, array $tables): array - { - $backQuotedTables = []; - foreach ($tables as $table) { - $backQuotedTables[] = Util::backquote($table->getName()); - } - - $query = 'ANALYZE TABLE ' . implode(', ', $backQuotedTables) . ';'; - - $this->dbi->selectDb($db); - /** @var array> $result */ - $result = $this->dbi->fetchResult($query); - - $rows = []; - foreach ($result as $row) { - $message = Message::fromArray($row); - $rows[$message->table][] = $message; - } - - return [$rows, $query]; - } - - /** - * @param TableName[] $tables - * - * @return array|string> - * @psalm-return array{array, string} - */ - public function getCheckTableRows(DatabaseName $db, array $tables): array - { - $backQuotedTables = []; - foreach ($tables as $table) { - $backQuotedTables[] = Util::backquote($table->getName()); - } - - $query = 'CHECK TABLE ' . implode(', ', $backQuotedTables) . ';'; - - $this->dbi->selectDb($db); - /** @var array> $result */ - $result = $this->dbi->fetchResult($query); - - $rows = []; - foreach ($result as $row) { - $message = Message::fromArray($row); - $rows[$message->table][] = $message; - } - - return [$rows, $query]; - } - - /** - * @param TableName[] $tables - * - * @return array>>|string> - * @psalm-return array{array>, string, Warning[]} - */ - public function getChecksumTableRows(DatabaseName $db, array $tables): array - { - $backQuotedTables = []; - foreach ($tables as $table) { - $backQuotedTables[] = Util::backquote($table->getName()); - } - - $query = 'CHECKSUM TABLE ' . implode(', ', $backQuotedTables) . ';'; - - $this->dbi->selectDb($db); - /** @var array> $rows */ - $rows = $this->dbi->fetchResult($query); - $warnings = $this->dbi->getWarnings(); - - return [$rows, $query, $warnings]; - } - - /** - * @param TableName[] $tables - */ - public function getIndexesProblems(DatabaseName $db, array $tables): string - { - $indexesProblems = ''; - - foreach ($tables as $table) { - $check = Index::findDuplicates($table->getName(), $db->getName()); - - if (empty($check)) { - continue; - } - - $indexesProblems .= sprintf(__('Problems with indexes of table `%s`'), $table->getName()); - $indexesProblems .= $check; - } - - return $indexesProblems; - } - - /** - * @param TableName[] $tables - * - * @return array|string> - * @psalm-return array{array, string} - */ - public function getOptimizeTableRows(DatabaseName $db, array $tables): array - { - $backQuotedTables = []; - foreach ($tables as $table) { - $backQuotedTables[] = Util::backquote($table->getName()); - } - - $query = 'OPTIMIZE TABLE ' . implode(', ', $backQuotedTables) . ';'; - - $this->dbi->selectDb($db); - /** @var array> $result */ - $result = $this->dbi->fetchResult($query); - - $rows = []; - foreach ($result as $row) { - $message = Message::fromArray($row); - $rows[$message->table][] = $message; - } - - return [$rows, $query]; - } - - /** - * @param TableName[] $tables - * - * @return array|string> - * @psalm-return array{array, string} - */ - public function getRepairTableRows(DatabaseName $db, array $tables): array - { - $backQuotedTables = []; - foreach ($tables as $table) { - $backQuotedTables[] = Util::backquote($table->getName()); - } - - $query = 'REPAIR TABLE ' . implode(', ', $backQuotedTables) . ';'; - - $this->dbi->selectDb($db); - /** @var array> $result */ - $result = $this->dbi->fetchResult($query); - - $rows = []; - foreach ($result as $row) { - $message = Message::fromArray($row); - $rows[$message->table][] = $message; - } - - return [$rows, $query]; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Search.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Search.php deleted file mode 100644 index d40ae49..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Table/Search.php +++ /dev/null @@ -1,353 +0,0 @@ -dbi = $dbi; - } - - /** - * Builds the sql search query from the post parameters - * - * @return string the generated SQL query - */ - public function buildSqlQuery(): string - { - $sql_query = 'SELECT '; - - // If only distinct values are needed - $is_distinct = isset($_POST['distinct']) ? 'true' : 'false'; - if ($is_distinct === 'true') { - $sql_query .= 'DISTINCT '; - } - - // if all column names were selected to display, we do a 'SELECT *' - // (more efficient and this helps prevent a problem in IE - // if one of the rows is edited and we come back to the Select results) - if (isset($_POST['zoom_submit']) || ! empty($_POST['displayAllColumns'])) { - $sql_query .= '* '; - } else { - $columnsToDisplay = $_POST['columnsToDisplay']; - $quotedColumns = []; - foreach ($columnsToDisplay as $column) { - $quotedColumns[] = Util::backquote($column); - } - - $sql_query .= implode(', ', $quotedColumns); - } - - $sql_query .= ' FROM ' - . Util::backquote($_POST['table']); - $whereClause = $this->generateWhereClause(); - $sql_query .= $whereClause; - - // if the search results are to be ordered - if (isset($_POST['orderByColumn']) && $_POST['orderByColumn'] !== '--nil--') { - $sql_query .= ' ORDER BY ' - . Util::backquote($_POST['orderByColumn']) - . ' ' . $_POST['order']; - } - - return $sql_query; - } - - /** - * Generates the where clause for the SQL search query to be executed - * - * @return string the generated where clause - */ - private function generateWhereClause(): string - { - if (isset($_POST['customWhereClause']) && trim($_POST['customWhereClause']) != '') { - return ' WHERE ' . $_POST['customWhereClause']; - } - - // If there are no search criteria set or no unary criteria operators, - // return - if ( - ! isset($_POST['criteriaValues']) - && ! isset($_POST['criteriaColumnOperators']) - && ! isset($_POST['geom_func']) - ) { - return ''; - } - - // else continue to form the where clause from column criteria values - $fullWhereClause = []; - foreach ($_POST['criteriaColumnOperators'] as $column_index => $operator) { - $unaryFlag = $this->dbi->types->isUnaryOperator($operator); - $tmp_geom_func = $_POST['geom_func'][$column_index] ?? null; - - $whereClause = $this->getWhereClause( - $_POST['criteriaValues'][$column_index], - $_POST['criteriaColumnNames'][$column_index], - $_POST['criteriaColumnTypes'][$column_index], - $operator, - $unaryFlag, - $tmp_geom_func - ); - - if (! $whereClause) { - continue; - } - - $fullWhereClause[] = $whereClause; - } - - if (! empty($fullWhereClause)) { - return ' WHERE ' . implode(' AND ', $fullWhereClause); - } - - return ''; - } - - /** - * Return the where clause for query generation based on the inputs provided. - * - * @param mixed $criteriaValues Search criteria input - * @param string $names Name of the column on which search is submitted - * @param string $types Type of the field - * @param string $func_type Search function/operator - * @param bool $unaryFlag Whether operator unary or not - * @param string|null $geom_func Whether geometry functions should be applied - * - * @return string generated where clause. - */ - private function getWhereClause( - $criteriaValues, - $names, - $types, - $func_type, - $unaryFlag, - $geom_func = null - ): string { - // If geometry function is set - if (! empty($geom_func)) { - return $this->getGeomWhereClause($criteriaValues, $names, $func_type, $types, $geom_func); - } - - $backquoted_name = Util::backquote($names); - $where = ''; - if ($unaryFlag) { - $where = $backquoted_name . ' ' . $func_type; - } elseif (strncasecmp($types, 'enum', 4) == 0 && ! empty($criteriaValues)) { - $where = $backquoted_name; - $where .= $this->getEnumWhereClause($criteriaValues, $func_type); - } elseif ($criteriaValues != '') { - // For these types we quote the value. Even if it's another type - // (like INT), for a LIKE we always quote the value. MySQL converts - // strings to numbers and numbers to strings as necessary - // during the comparison - if ( - preg_match('@char|binary|blob|text|set|date|time|year@i', $types) - || mb_strpos(' ' . $func_type, 'LIKE') - ) { - $quot = '\''; - } else { - $quot = ''; - } - - // LIKE %...% - if ($func_type === 'LIKE %...%') { - $func_type = 'LIKE'; - $criteriaValues = '%' . $criteriaValues . '%'; - } - - if ($func_type === 'NOT LIKE %...%') { - $func_type = 'NOT LIKE'; - $criteriaValues = '%' . $criteriaValues . '%'; - } - - if ($func_type === 'REGEXP ^...$') { - $func_type = 'REGEXP'; - $criteriaValues = '^' . $criteriaValues . '$'; - } - - if ( - $func_type !== 'IN (...)' - && $func_type !== 'NOT IN (...)' - && $func_type !== 'BETWEEN' - && $func_type !== 'NOT BETWEEN' - ) { - return $backquoted_name . ' ' . $func_type . ' ' . $quot - . $this->dbi->escapeString($criteriaValues) . $quot; - } - - $func_type = str_replace(' (...)', '', $func_type); - - //Don't explode if this is already an array - //(Case for (NOT) IN/BETWEEN.) - if (is_array($criteriaValues)) { - $values = $criteriaValues; - } else { - $values = explode(',', $criteriaValues); - } - - // quote values one by one - $emptyKey = false; - foreach ($values as $key => &$value) { - if ($value === '') { - $emptyKey = $key; - $value = 'NULL'; - continue; - } - - $value = $quot . $this->dbi->escapeString(trim($value)) - . $quot; - } - - if ($func_type === 'BETWEEN' || $func_type === 'NOT BETWEEN') { - $where = $backquoted_name . ' ' . $func_type . ' ' - . ($values[0] ?? '') - . ' AND ' . ($values[1] ?? ''); - } else { //[NOT] IN - if ($emptyKey !== false) { - unset($values[$emptyKey]); - } - - $wheres = []; - if (! empty($values)) { - $wheres[] = $backquoted_name . ' ' . $func_type - . ' (' . implode(',', $values) . ')'; - } - - if ($emptyKey !== false) { - $wheres[] = $backquoted_name . ' IS NULL'; - } - - $where = implode(' OR ', $wheres); - if (1 < count($wheres)) { - $where = '(' . $where . ')'; - } - } - } - - return $where; - } - - /** - * Return the where clause for a geometrical column. - * - * @param mixed $criteriaValues Search criteria input - * @param string $names Name of the column on which search is submitted - * @param string $func_type Search function/operator - * @param string $types Type of the field - * @param string|null $geom_func Whether geometry functions should be applied - * - * @return string part of where clause. - */ - private function getGeomWhereClause( - $criteriaValues, - $names, - $func_type, - $types, - $geom_func = null - ): string { - $geom_unary_functions = [ - 'IsEmpty' => 1, - 'IsSimple' => 1, - 'IsRing' => 1, - 'IsClosed' => 1, - ]; - $where = ''; - - // Get details about the geometry functions - $geom_funcs = Gis::getFunctions($types, true, false); - - // If the function takes multiple parameters - if (str_contains($func_type, 'IS NULL') || str_contains($func_type, 'IS NOT NULL')) { - return Util::backquote($names) . ' ' . $func_type; - } - - if ($geom_funcs[$geom_func]['params'] > 1) { - // create gis data from the criteria input - $gis_data = Gis::createData($criteriaValues, $this->dbi->getVersion()); - - return $geom_func . '(' . Util::backquote($names) - . ', ' . $gis_data . ')'; - } - - // New output type is the output type of the function being applied - $type = $geom_funcs[$geom_func]['type']; - $geom_function_applied = $geom_func - . '(' . Util::backquote($names) . ')'; - - // If the where clause is something like 'IsEmpty(`spatial_col_name`)' - if (isset($geom_unary_functions[$geom_func]) && trim($criteriaValues) == '') { - $where = $geom_function_applied; - } elseif (in_array($type, Gis::getDataTypes()) && ! empty($criteriaValues)) { - // create gis data from the criteria input - $gis_data = Gis::createData($criteriaValues, $this->dbi->getVersion()); - $where = $geom_function_applied . ' ' . $func_type . ' ' . $gis_data; - } elseif (strlen($criteriaValues) > 0) { - $where = $geom_function_applied . ' ' - . $func_type . " '" . $criteriaValues . "'"; - } - - return $where; - } - - /** - * Return the where clause in case column's type is ENUM. - * - * @param mixed $criteriaValues Search criteria input - * @param string $func_type Search function/operator - * - * @return string part of where clause. - */ - private function getEnumWhereClause($criteriaValues, $func_type): string - { - if (! is_array($criteriaValues)) { - $criteriaValues = explode(',', $criteriaValues); - } - - $enum_selected_count = count($criteriaValues); - if ($func_type === '=' && $enum_selected_count > 1) { - $func_type = 'IN'; - $parens_open = '('; - $parens_close = ')'; - } elseif ($func_type === '!=' && $enum_selected_count > 1) { - $func_type = 'NOT IN'; - $parens_open = '('; - $parens_close = ')'; - } else { - $parens_open = ''; - $parens_close = ''; - } - - $enum_where = '\'' - . $this->dbi->escapeString($criteriaValues[0]) . '\''; - for ($e = 1; $e < $enum_selected_count; $e++) { - $enum_where .= ', \'' - . $this->dbi->escapeString($criteriaValues[$e]) . '\''; - } - - return ' ' . $func_type . ' ' . $parens_open - . $enum_where . $parens_close; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Template.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Template.php deleted file mode 100644 index b638cdd..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Template.php +++ /dev/null @@ -1,158 +0,0 @@ -getTempDir('twig') : null; - - static::$twig = self::getTwigEnvironment($cacheDir); - } - - public static function getTwigEnvironment(?string $cacheDir): Environment - { - global $cfg, $containerBuilder; - - /* Twig expects false when cache is not configured */ - if ($cacheDir === null) { - $cacheDir = false; - } - - $loader = new FilesystemLoader(self::TEMPLATES_FOLDER); - $twig = new Environment($loader, [ - 'auto_reload' => true, - 'cache' => $cacheDir, - ]); - - $twig->addRuntimeLoader(new ContainerRuntimeLoader($containerBuilder)); - - if (is_array($cfg) && ($cfg['environment'] ?? '') === 'development') { - $twig->enableDebug(); - $twig->addExtension(new DebugExtension()); - // This will enable debug for the extension to print lines - // It is used in po file lines re-mapping - TransNode::$enableAddDebugInfo = true; - } - - if ($cfg['environment'] === 'production') { - $twig->disableDebug(); - TransNode::$enableAddDebugInfo = false; - } - - $twig->addExtension(new AssetExtension()); - $twig->addExtension(new CoreExtension()); - $twig->addExtension(new FlashMessagesExtension()); - $twig->addExtension(new I18nExtension()); - $twig->addExtension(new MessageExtension()); - $twig->addExtension(new RelationExtension()); - $twig->addExtension(new SanitizeExtension()); - $twig->addExtension(new TableExtension()); - $twig->addExtension(new TrackerExtension()); - $twig->addExtension(new TransformationsExtension()); - $twig->addExtension(new UrlExtension()); - $twig->addExtension(new UtilExtension()); - - return $twig; - } - - /** - * Loads a template. - * - * @param string $templateName Template path name - * - * @throws LoaderError - * @throws RuntimeError - * @throws SyntaxError - */ - private function load(string $templateName): TemplateWrapper - { - try { - $template = static::$twig->load($templateName . '.twig'); - } catch (RuntimeException $e) { - /* Retry with disabled cache */ - static::$twig->setCache(false); - $template = static::$twig->load($templateName . '.twig'); - /* - * The trigger error is intentionally after second load - * to avoid triggering error when disabling cache does not - * solve it. - */ - trigger_error( - sprintf( - __('Error while working with template cache: %s'), - $e->getMessage() - ), - E_USER_WARNING - ); - } - - return $template; - } - - /** - * @param string $template Template path name - * @param array $data Associative array of template variables - * - * @throws Throwable - * @throws LoaderError - * @throws RuntimeError - * @throws SyntaxError - */ - public function render(string $template, array $data = []): string - { - return $this->load($template)->render($data); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Theme.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Theme.php deleted file mode 100644 index 6dcb795..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Theme.php +++ /dev/null @@ -1,334 +0,0 @@ -getFsPath() . 'theme.json'; - if (! @file_exists($infofile)) { - return false; - } - - if ($this->mtimeInfo === filemtime($infofile)) { - return true; - } - - $content = @file_get_contents($infofile); - if ($content === false) { - return false; - } - - $data = json_decode($content, true); - - // Did we get expected data? - if (! is_array($data)) { - return false; - } - - // Check that all required data are there - $members = [ - 'name', - 'version', - 'supports', - ]; - foreach ($members as $member) { - if (! isset($data[$member])) { - return false; - } - } - - // Version check - if (! is_array($data['supports'])) { - return false; - } - - if (! in_array(Version::SERIES, $data['supports'])) { - return false; - } - - $this->mtimeInfo = filemtime($infofile); - $this->filesizeInfo = filesize($infofile); - - $this->setVersion($data['version']); - $this->setName($data['name']); - - return true; - } - - public static function load(string $themeUrl, string $themeFsPath, string $themeName): ?self - { - $theme = new self(); - - $theme->setPath($themeUrl); - $theme->setFsPath($themeFsPath); - - if (! $theme->loadInfo()) { - return null; - } - - $theme->checkImgPath(); - $theme->setId($themeName); - - return $theme; - } - - /** - * checks image path for existence - if not found use img from fallback theme - */ - public function checkImgPath(): bool - { - // try current theme first - if (is_dir($this->getFsPath() . 'img' . DIRECTORY_SEPARATOR)) { - $this->setImgPath($this->getPath() . '/img/'); - $this->setImgPathFs($this->getFsPath() . 'img' . DIRECTORY_SEPARATOR); - - return true; - } - - // try fallback theme - $fallbackFsPathThemeDir = ThemeManager::getThemesFsDir() . ThemeManager::FALLBACK_THEME - . DIRECTORY_SEPARATOR . 'img' . DIRECTORY_SEPARATOR; - if (is_dir($fallbackFsPathThemeDir)) { - $fallbackUrl = ThemeManager::getThemesDir() . ThemeManager::FALLBACK_THEME - . '/img/'; - $this->setImgPath($fallbackUrl); - $this->setImgPathFs($fallbackFsPathThemeDir); - - return true; - } - - // we failed - trigger_error( - sprintf( - __('No valid image path for theme %s found!'), - $this->getName() - ), - E_USER_ERROR - ); - - return false; - } - - /** - * returns path to theme - * - * @return string path to theme - */ - public function getPath() - { - return $this->path; - } - - /** - * returns file system path to the theme - * - * @return string file system path to theme - */ - public function getFsPath(): string - { - return $this->fsPath; - } - - /** - * set path to theme - * - * @param string $path path to theme - */ - public function setPath($path): void - { - $this->path = trim($path); - } - - /** - * set file system path to the theme - * - * @param string $path path to theme - */ - public function setFsPath(string $path): void - { - $this->fsPath = trim($path); - } - - /** - * sets version - * - * @param string $version version to set - */ - public function setVersion($version): void - { - $this->version = trim($version); - } - - /** - * returns version - * - * @return string version - */ - public function getVersion() - { - return $this->version; - } - - /** - * checks theme version against $version - * returns true if theme version is equal or higher to $version - * - * @param string $version version to compare to - */ - public function checkVersion($version): bool - { - return version_compare($this->getVersion(), $version, 'lt'); - } - - /** - * sets name - * - * @param string $name name to set - */ - public function setName($name): void - { - $this->name = trim($name); - } - - /** - * returns name - * - * @return string name - */ - public function getName() - { - return $this->name; - } - - /** - * sets id - * - * @param string $id new id - */ - public function setId($id): void - { - $this->id = trim($id); - } - - /** - * returns id - * - * @return string id - */ - public function getId() - { - return $this->id; - } - - /** - * Sets path to images for the theme - * - * @param string $path path to images for this theme as an URL path - */ - public function setImgPath($path): void - { - $this->imgPath = $path; - } - - /** - * Sets path to images for the theme - * - * @param string $path file-system path to images for this theme - */ - public function setImgPathFs(string $path): void - { - $this->imgPathFs = $path; - } - - /** - * Returns the path to image for the theme. - * If filename is given, it possibly fallbacks to fallback - * theme for it if image does not exist. - * - * @param string $file file name for image - * @param string $fallback fallback image - * - * @return string image path for this theme - */ - public function getImgPath($file = null, $fallback = null) - { - if ($file === null) { - return $this->imgPath; - } - - if (is_readable($this->imgPathFs . $file)) { - return $this->imgPath . $file; - } - - if ($fallback !== null) { - return $this->getImgPath($fallback); - } - - return './themes/' . ThemeManager::FALLBACK_THEME . '/img/' . $file; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Twig/RelationExtension.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Twig/RelationExtension.php deleted file mode 100644 index 2d6e1a4..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Twig/RelationExtension.php +++ /dev/null @@ -1,49 +0,0 @@ - ['html']] - ), - new TwigFunction( - 'get_display_field', - [$relation, 'getDisplayField'], - ['is_safe' => ['html']] - ), - new TwigFunction( - 'get_foreign_data', - [$relation, 'getForeignData'] - ), - new TwigFunction( - 'get_tables', - [$relation, 'getTables'] - ), - new TwigFunction( - 'search_column_in_foreigners', - [$relation, 'searchColumnInForeigners'] - ), - ]; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/UserPassword.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/UserPassword.php deleted file mode 100644 index 2e0173f..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/UserPassword.php +++ /dev/null @@ -1,217 +0,0 @@ -serverPrivileges = $serverPrivileges; - } - - /** - * Generate the message - * - * @return array error value and message - */ - public function setChangePasswordMsg() - { - $error = false; - $message = Message::success(__('The profile has been updated.')); - - if ($_POST['nopass'] != '1') { - if (strlen($_POST['pma_pw']) === 0 || strlen($_POST['pma_pw2']) === 0) { - $message = Message::error(__('The password is empty!')); - $error = true; - } elseif ($_POST['pma_pw'] !== $_POST['pma_pw2']) { - $message = Message::error( - __('The passwords aren\'t the same!') - ); - $error = true; - } elseif (strlen($_POST['pma_pw']) > 256) { - $message = Message::error(__('Password is too long!')); - $error = true; - } - } - - return [ - 'error' => $error, - 'msg' => $message, - ]; - } - - /** - * Change the password - * - * @param string $password New password - */ - public function changePassword($password): string - { - global $auth_plugin, $dbi; - - $hashing_function = $this->changePassHashingFunction(); - - [$username, $hostname] = $dbi->getCurrentUserAndHost(); - - $serverVersion = $dbi->getVersion(); - - if (isset($_POST['authentication_plugin']) && ! empty($_POST['authentication_plugin'])) { - $orig_auth_plugin = $_POST['authentication_plugin']; - } else { - $orig_auth_plugin = $this->serverPrivileges->getCurrentAuthenticationPlugin('change', $username, $hostname); - } - - $sql_query = 'SET password = ' - . ($password == '' ? '\'\'' : $hashing_function . '(\'***\')'); - - $isPerconaOrMySql = Compatibility::isMySqlOrPerconaDb(); - if ($isPerconaOrMySql && $serverVersion >= 50706) { - $sql_query = 'ALTER USER \'' . $dbi->escapeString($username) - . '\'@\'' . $dbi->escapeString($hostname) - . '\' IDENTIFIED WITH ' . $orig_auth_plugin . ' BY ' - . ($password == '' ? '\'\'' : '\'***\''); - } elseif ( - ($isPerconaOrMySql && $serverVersion >= 50507) - || (Compatibility::isMariaDb() && $serverVersion >= 50200) - ) { - // For MySQL and Percona versions 5.5.7+ and MariaDB versions 5.2+, - // explicitly set value of `old_passwords` so that - // it does not give an error while using - // the PASSWORD() function - if ($orig_auth_plugin === 'sha256_password') { - $value = 2; - } else { - $value = 0; - } - - $dbi->tryQuery('SET `old_passwords` = ' . $value . ';'); - } - - $this->changePassUrlParamsAndSubmitQuery( - $username, - $hostname, - $password, - $sql_query, - $hashing_function, - $orig_auth_plugin - ); - - $auth_plugin->handlePasswordChange($password); - - return $sql_query; - } - - /** - * Generate the hashing function - * - * @return string - */ - private function changePassHashingFunction() - { - if (isset($_POST['authentication_plugin']) && $_POST['authentication_plugin'] === 'mysql_old_password') { - $hashing_function = 'OLD_PASSWORD'; - } else { - $hashing_function = 'PASSWORD'; - } - - return $hashing_function; - } - - /** - * Changes password for a user - * - * @param string $username Username - * @param string $hostname Hostname - * @param string $password Password - * @param string $sql_query SQL query - * @param string $hashing_function Hashing function - * @param string $orig_auth_plugin Original Authentication Plugin - */ - private function changePassUrlParamsAndSubmitQuery( - $username, - $hostname, - $password, - $sql_query, - $hashing_function, - $orig_auth_plugin - ): void { - global $dbi; - - $err_url = Url::getFromRoute('/user-password'); - - $serverVersion = $dbi->getVersion(); - - if (Compatibility::isMySqlOrPerconaDb() && $serverVersion >= 50706) { - $local_query = 'ALTER USER \'' . $dbi->escapeString($username) - . '\'@\'' . $dbi->escapeString($hostname) . '\'' - . ' IDENTIFIED with ' . $orig_auth_plugin . ' BY ' - . ($password == '' - ? '\'\'' - : '\'' . $dbi->escapeString($password) . '\''); - } elseif ( - Compatibility::isMariaDb() - && $serverVersion >= 50200 - && $serverVersion < 100100 - && $orig_auth_plugin !== '' - ) { - if ($orig_auth_plugin === 'mysql_native_password') { - // Set the hashing method used by PASSWORD() - // to be 'mysql_native_password' type - $dbi->tryQuery('SET old_passwords = 0;'); - } elseif ($orig_auth_plugin === 'sha256_password') { - // Set the hashing method used by PASSWORD() - // to be 'sha256_password' type - $dbi->tryQuery('SET `old_passwords` = 2;'); - } - - $hashedPassword = $this->serverPrivileges->getHashedPassword($_POST['pma_pw']); - - $local_query = 'UPDATE `mysql`.`user` SET' - . " `authentication_string` = '" . $hashedPassword - . "', `Password` = '', " - . " `plugin` = '" . $orig_auth_plugin . "'" - . " WHERE `User` = '" . $dbi->escapeString($username) - . "' AND Host = '" . $dbi->escapeString($hostname) . "';"; - } else { - $local_query = 'SET password = ' . ($password == '' - ? '\'\'' - : $hashing_function . '(\'' - . $dbi->escapeString($password) . '\')'); - } - - if (! @$dbi->tryQuery($local_query)) { - Generator::mysqlDie( - $dbi->getError(), - $sql_query, - false, - $err_url - ); - } - - // Flush privileges after successful password change - $dbi->tryQuery('FLUSH PRIVILEGES;'); - } - - public function getFormForChangePassword(?string $username, ?string $hostname): string - { - return $this->serverPrivileges->getFormForChangePassword($username ?? '', $hostname ?? '', false); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/FormatConverter.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/FormatConverter.php deleted file mode 100644 index 06bd600..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/FormatConverter.php +++ /dev/null @@ -1,96 +0,0 @@ - 4294967295) { - return $buffer; - } - - return (string) long2ip((int) $buffer); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/SessionCache.php b/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/SessionCache.php deleted file mode 100644 index 99333e9..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/classes/Utils/SessionCache.php +++ /dev/null @@ -1,58 +0,0 @@ -zip = $zip; - } - - /** - * Gets zip file contents - * - * @param string $file path to zip file - * @param string $specificEntry regular expression to match a file - * - * @return array ($error_message, $file_data); $error_message - * is empty if no error - */ - public function getContents($file, $specificEntry = null) - { - /** - * This function is used to "import" a SQL file which has been exported earlier - * That means that this function works on the assumption that the zip file contains only a single SQL file - * It might also be an ODS file, look below - */ - - if ($this->zip === null) { - return [ - 'error' => sprintf(__('The %s extension is missing. Please check your PHP configuration.'), 'zip'), - 'data' => '', - ]; - } - - $errorMessage = ''; - $fileData = ''; - - $res = $this->zip->open($file); - - if ($res !== true) { - $errorMessage = __('Error in ZIP archive:') . ' ' . $this->zip->getStatusString(); - $this->zip->close(); - - return [ - 'error' => $errorMessage, - 'data' => $fileData, - ]; - } - - if ($this->zip->numFiles === 0) { - $errorMessage = __('No files found inside ZIP archive!'); - $this->zip->close(); - - return [ - 'error' => $errorMessage, - 'data' => $fileData, - ]; - } - - /* Is the the zip really an ODS file? */ - $odsMediaType = 'application/vnd.oasis.opendocument.spreadsheet'; - $firstZipEntry = $this->zip->getFromIndex(0); - if (! strcmp($odsMediaType, (string) $firstZipEntry)) { - $specificEntry = '/^content\.xml$/'; - } - - if (! isset($specificEntry)) { - $fileData = $firstZipEntry; - $this->zip->close(); - - return [ - 'error' => $errorMessage, - 'data' => $fileData, - ]; - } - - /* Return the correct contents, not just the first entry */ - for ($i = 0; $i < $this->zip->numFiles; $i++) { - if (preg_match($specificEntry, (string) $this->zip->getNameIndex($i))) { - $fileData = $this->zip->getFromIndex($i); - break; - } - } - - /* Couldn't find any files that matched $specific_entry */ - if (empty($fileData)) { - $errorMessage = __('Error in ZIP archive:') - . ' Could not find "' . $specificEntry . '"'; - } - - $this->zip->close(); - - return [ - 'error' => $errorMessage, - 'data' => $fileData, - ]; - } - - /** - * Returns the filename of the first file that matches the given $file_regexp. - * - * @param string $file path to zip file - * @param string $regex regular expression for the file name to match - * - * @return string|false the file name of the first file that matches the given regular expression - */ - public function findFile($file, $regex) - { - if ($this->zip === null) { - return false; - } - - $res = $this->zip->open($file); - - if ($res === true) { - for ($i = 0; $i < $this->zip->numFiles; $i++) { - if (preg_match($regex, (string) $this->zip->getNameIndex($i))) { - $filename = $this->zip->getNameIndex($i); - $this->zip->close(); - - return $filename; - } - } - } - - return false; - } - - /** - * Returns the number of files in the zip archive. - * - * @param string $file path to zip file - * - * @return int the number of files in the zip archive or 0, either if there weren't any files or an error occurred. - */ - public function getNumberOfFiles($file) - { - if ($this->zip === null) { - return 0; - } - - $num = 0; - $res = $this->zip->open($file); - - if ($res === true) { - $num = $this->zip->numFiles; - } - - return $num; - } - - /** - * Extracts the content of $entry. - * - * @param string $file path to zip file - * @param string $entry file in the archive that should be extracted - * - * @return string|false data on success, false otherwise - */ - public function extract($file, $entry) - { - if ($this->zip === null) { - return false; - } - - if ($this->zip->open($file) === true) { - $result = $this->zip->getFromName($entry); - $this->zip->close(); - - return $result; - } - - return false; - } - - /** - * Creates a zip file. - * If $data is an array and $name is a string, the filenames will be indexed. - * The function will return false if $data is a string but $name is an array - * or if $data is an array and $name is an array, but they don't have the - * same amount of elements. - * - * @param array|string $data contents of the file/files - * @param array|string $name name of the file/files in the archive - * @param int $time the current timestamp - * - * @return string|bool the ZIP file contents, or false if there was an error. - */ - public function createFile($data, $name, $time = 0) - { - $datasec = []; // Array to store compressed data - $ctrlDir = []; // Central directory - $oldOffset = 0; // Last offset position - $eofCtrlDir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; // End of central directory record - - if (is_string($data) && is_string($name)) { - $data = [$name => $data]; - } elseif (is_array($data) && is_string($name)) { - $extPos = (int) strpos($name, '.'); - $extension = substr($name, $extPos); - $newData = []; - foreach ($data as $key => $value) { - $newName = str_replace($extension, '_' . $key . $extension, $name); - $newData[$newName] = $value; - } - - $data = $newData; - } elseif (is_array($data) && is_array($name) && count($data) === count($name)) { - /** @var array $data */ - $data = array_combine($name, $data); - } else { - return false; - } - - foreach ($data as $table => $dump) { - $tempName = str_replace('\\', '/', $table); - - /* Get Local Time */ - $timearray = getdate(); - - if ($timearray['year'] < 1980) { - $timearray['year'] = 1980; - $timearray['mon'] = 1; - $timearray['mday'] = 1; - $timearray['hours'] = 0; - $timearray['minutes'] = 0; - $timearray['seconds'] = 0; - } - - $time = $timearray['year'] - 1980 << 25 - | ($timearray['mon'] << 21) - | ($timearray['mday'] << 16) - | ($timearray['hours'] << 11) - | ($timearray['minutes'] << 5) - | ($timearray['seconds'] >> 1); - - $hexdtime = pack('V', $time); - - $uncLen = strlen($dump); - $crc = crc32($dump); - $zdata = (string) gzcompress($dump); - $zdata = substr((string) substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug - $cLen = strlen($zdata); - $fr = "\x50\x4b\x03\x04" - . "\x14\x00" // ver needed to extract - . "\x00\x00" // gen purpose bit flag - . "\x08\x00" // compression method - . $hexdtime // last mod time and date - - // "local file header" segment - . pack('V', $crc) // crc32 - . pack('V', $cLen) // compressed filesize - . pack('V', $uncLen) // uncompressed filesize - . pack('v', strlen($tempName)) // length of filename - . pack('v', 0) // extra field length - . $tempName - - // "file data" segment - . $zdata; - - $datasec[] = $fr; - - // now add to central directory record - $cdrec = "\x50\x4b\x01\x02" - . "\x00\x00" // version made by - . "\x14\x00" // version needed to extract - . "\x00\x00" // gen purpose bit flag - . "\x08\x00" // compression method - . $hexdtime // last mod time & date - . pack('V', $crc) // crc32 - . pack('V', $cLen) // compressed filesize - . pack('V', $uncLen) // uncompressed filesize - . pack('v', strlen($tempName)) // length of filename - . pack('v', 0) // extra field length - . pack('v', 0) // file comment length - . pack('v', 0) // disk number start - . pack('v', 0) // internal file attributes - . pack('V', 32) // external file attributes - // - 'archive' bit set - . pack('V', $oldOffset) // relative offset of local header - . $tempName; // filename - $oldOffset += strlen($fr); - // optional extra field, file comment goes here - // save to central directory - $ctrlDir[] = $cdrec; - } - - /* Build string to return */ - $tempCtrlDir = implode('', $ctrlDir); - $header = $tempCtrlDir . - $eofCtrlDir . - pack('v', count($ctrlDir)) . //total #of entries "on this disk" - pack('v', count($ctrlDir)) . //total #of entries overall - pack('V', strlen($tempCtrlDir)) . //size of central dir - pack('V', $oldOffset) . //offset to start of central dir - "\x00\x00"; //.zip file comment length - - $data = implode('', $datasec); - - return $data . $header; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/libraries/config.default.php b/Sources/php_script/script/phpMyAdmin/libraries/config.default.php deleted file mode 100644 index 3ecb83f..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/config.default.php +++ /dev/null @@ -1,3125 +0,0 @@ - - * N N OOO !! DDDD OOO N N OOO TTTTT EEEE DDDD I TTTTT !! - * NN N O O !! D D O O NN N O O T E D D I T !! - * N N N O O !! D D O O N N N O O T EEEE D D I T !! - * N NN O O D D O O N NN O O T E D D I T - * N N OOO !! DDDD OOO N N OOO T EEEE DDDD I T !! - * - * - * DO NOT EDIT THIS FILE, EDIT config.inc.php INSTEAD !!! - * - * phpMyAdmin default configuration, you can copy values from here to your - * config.inc.php - * - * All directives are explained in the documentation - */ - -declare(strict_types=1); - -/** - * Your phpMyAdmin URL. - * - * Complete the variable below with the full URL ie - * https://example.com/path_to_your_phpMyAdmin_directory/ - * - * It must contain characters that are valid for a URL, and the path is - * case sensitive on some Web servers, for example Unix-based servers. - * - * In most cases you can leave this variable empty, as the correct value - * will be detected automatically. However, we recommend that you do - * test to see that the auto-detection code works in your system. A good - * test is to browse a table, then edit a row and save it. There will be - * an error message if phpMyAdmin cannot auto-detect the correct value. - * - * @global string $cfg['PmaAbsoluteUri'] - * @psalm-suppress PossiblyUndefinedGlobalVariable - */ -$cfg['PmaAbsoluteUri'] = ''; - -/** - * Configure authentication logging destination - * - * @global string $cfg['AuthLog'] - */ -$cfg['AuthLog'] = 'auto'; - -/** - * Whether to log successful authentication attempts - * - * @global boolean $cfg['AuthLogSuccess'] - */ -$cfg['AuthLogSuccess'] = false; - -/** - * Disable the default warning that is displayed on the DB Details Structure page if - * any of the required Tables for the configuration storage could not be found - * - * @global boolean $cfg['PmaNoRelation_DisableWarning'] - */ -$cfg['PmaNoRelation_DisableWarning'] = false; - -/** - * Disable the default warning that is displayed if Suhosin is detected - * - * @global boolean $cfg['SuhosinDisableWarning'] - */ -$cfg['SuhosinDisableWarning'] = false; - -/** - * Disable the default warning that is displayed if session.gc_maxlifetime - * is less than `LoginCookieValidity` - * - * @global boolean $cfg['LoginCookieValidityDisableWarning'] - */ -$cfg['LoginCookieValidityDisableWarning'] = false; - -/** - * Disable the default warning about MySQL reserved words in column names - * - * @global boolean $cfg['ReservedWordDisableWarning'] - */ -$cfg['ReservedWordDisableWarning'] = false; - -/** - * Show warning about incomplete translations on certain threshold. - * - * @global boolean $cfg['TranslationWarningThreshold'] - */ -$cfg['TranslationWarningThreshold'] = 80; - -/** - * Allows phpMyAdmin to be included from a other document in a frame; - * setting this to true is a potential security hole. Setting this to - * 'sameorigin' prevents phpMyAdmin to be included from another document - * in a frame, unless that document belongs to the same domain. - * - * @global boolean|string $cfg['AllowThirdPartyFraming'] - */ -$cfg['AllowThirdPartyFraming'] = false; - -/** - * The 'cookie' auth_type uses AES algorithm to encrypt the password. If - * at least one server configuration uses 'cookie' auth_type, enter here a - * pass phrase that will be used by AES. The maximum length seems to be 46 - * characters. - * - * @global string $cfg['blowfish_secret'] - */ -$cfg['blowfish_secret'] = ''; - - -/******************************************************************************* - * Server(s) configuration - * - * The $cfg['Servers'] array starts with $cfg['Servers'][1]. Do not use - * $cfg['Servers'][0]. You can disable a server configuration entry by setting host - * to ''. If you want more than one server, just copy following section - * (including $i incrementation) several times. There is no need to define - * full server array, just define values you need to change. - * - * @global array $cfg['Servers'] - */ -$cfg['Servers'] = []; - -$i = 1; - -/** - * MySQL hostname or IP address - * - * @global string $cfg['Servers'][$i]['host'] - */ -$cfg['Servers'][$i]['host'] = 'localhost'; - -/** - * MySQL port - leave blank for default port - * - * @global string $cfg['Servers'][$i]['port'] - */ -$cfg['Servers'][$i]['port'] = ''; - -/** - * Path to the socket - leave blank for default socket - * - * @global string $cfg['Servers'][$i]['socket'] - */ -$cfg['Servers'][$i]['socket'] = ''; - -/** - * Use SSL for connecting to MySQL server? - * - * @global boolean $cfg['Servers'][$i]['ssl'] - */ -$cfg['Servers'][$i]['ssl'] = false; - -/** - * Path to the key file when using SSL for connecting to the MySQL server - * - * @global string $cfg['Servers'][$i]['ssl_key'] - */ -$cfg['Servers'][$i]['ssl_key'] = null; - -/** - * Path to the cert file when using SSL for connecting to the MySQL server - * - * @global string $cfg['Servers'][$i]['ssl_cert'] - */ -$cfg['Servers'][$i]['ssl_cert'] = null; - -/** - * Path to the CA file when using SSL for connecting to the MySQL server - * - * @global string $cfg['Servers'][$i]['ssl_ca'] - */ -$cfg['Servers'][$i]['ssl_ca'] = null; - -/** - * Directory containing trusted SSL CA certificates in PEM format - * - * @global string $cfg['Servers'][$i]['ssl_ca_path'] - */ -$cfg['Servers'][$i]['ssl_ca_path'] = null; - -/** - * List of allowable ciphers for SSL connections to the MySQL server - * - * @global string $cfg['Servers'][$i]['ssl_ciphers'] - */ -$cfg['Servers'][$i]['ssl_ciphers'] = null; - -/** - * MySQL 5.6 or later triggers the mysqlnd driver in PHP to validate the - * peer_name of the SSL certifcate - * For most self-signed certificates this is a problem. Setting this to false - * will disable the check and allow the connection (PHP 5.6.16 or later) - * - * @link https://bugs.php.net/68344 - * - * @global string $cfg['Servers'][$i]['ssl_verify'] - */ -$cfg['Servers'][$i]['ssl_verify'] = true; - -/** - * Use compressed protocol for the MySQL connection - * - * @global boolean $cfg['Servers'][$i]['compress'] - */ -$cfg['Servers'][$i]['compress'] = false; - -/** - * MySQL control host. This permits to use a host different than the - * main host, for the phpMyAdmin configuration storage. If left empty, - * $cfg['Servers'][$i]['host'] is used instead. - * - * @global string $cfg['Servers'][$i]['controlhost'] - */ -$cfg['Servers'][$i]['controlhost'] = ''; - -/** - * MySQL control port. This permits to use a port different than the - * main port, for the phpMyAdmin configuration storage. If left empty, - * $cfg['Servers'][$i]['port'] is used instead. - * - * @global string $cfg['Servers'][$i]['controlport'] - */ -$cfg['Servers'][$i]['controlport'] = ''; - -/** - * MySQL control user settings (this user must have read-only - * access to the "mysql/user" and "mysql/db" tables). The controluser is also - * used for all relational features (pmadb) - * - * @global string $cfg['Servers'][$i]['controluser'] - */ -$cfg['Servers'][$i]['controluser'] = ''; - -/** - * MySQL control user settings (this user must have read-only - * access to the "mysql/user" and "mysql/db" tables). The controluser is also - * used for all relational features (pmadb) - * - * @global string $cfg['Servers'][$i]['controlpass'] - */ -$cfg['Servers'][$i]['controlpass'] = ''; - -/** - * Authentication method (valid choices: config, http, signon or cookie) - * - * @global string $cfg['Servers'][$i]['auth_type'] - */ -$cfg['Servers'][$i]['auth_type'] = 'cookie'; - -/** - * HTTP Basic Auth Realm name to display (only used with 'HTTP' auth_type) - * - * @global string $cfg['Servers'][$i]['auth_http_realm'] - */ -$cfg['Servers'][$i]['auth_http_realm'] = ''; - -/** - * MySQL user - * - * @global string $cfg['Servers'][$i]['user'] - */ -$cfg['Servers'][$i]['user'] = 'root'; - -/** - * MySQL password (only needed with 'config' auth_type) - * - * @global string $cfg['Servers'][$i]['password'] - */ -$cfg['Servers'][$i]['password'] = ''; - -/** - * Session to use for 'signon' authentication method - * - * @global string $cfg['Servers'][$i]['SignonSession'] - */ -$cfg['Servers'][$i]['SignonSession'] = ''; - -/** - * Cookie params to match session to use for 'signon' authentication method - * It should be an associative array matching result of session_get_cookie_params() in other system - * - * @global array $cfg['Servers'][$i]['SignonCookieParams'] - */ -$cfg['Servers'][$i]['SignonCookieParams'] = []; - -/** - * PHP script to use for 'signon' authentication method - * - * @global string $cfg['Servers'][$i]['SignonScript'] - */ -$cfg['Servers'][$i]['SignonScript'] = ''; - -/** - * URL where to redirect user to login for 'signon' authentication method - * - * @global string $cfg['Servers'][$i]['SignonURL'] - */ -$cfg['Servers'][$i]['SignonURL'] = ''; - -/** - * URL where to redirect user after logout - * - * @global string $cfg['Servers'][$i]['LogoutURL'] - */ -$cfg['Servers'][$i]['LogoutURL'] = ''; - -/** - * If set to a db-name, only this db is displayed in navigation panel - * It may also be an array of db-names - * - * @global string $cfg['Servers'][$i]['only_db'] - */ -$cfg['Servers'][$i]['only_db'] = ''; - -/** - * Database name to be hidden from listings - * - * @global string $cfg['Servers'][$i]['hide_db'] - */ -$cfg['Servers'][$i]['hide_db'] = ''; - -/** - * Verbose name for this host - leave blank to show the hostname - * (for HTTP authentication, all non-US-ASCII characters will be stripped) - * - * @global string $cfg['Servers'][$i]['verbose'] - */ -$cfg['Servers'][$i]['verbose'] = ''; - -/** - * Database used for Relation, Bookmark and PDF Features - * (see sql/create_tables.sql) - * - leave blank for no support - * SUGGESTED: 'phpmyadmin' - * - * @global string $cfg['Servers'][$i]['pmadb'] - */ -$cfg['Servers'][$i]['pmadb'] = ''; - -/** - * Bookmark table - * - leave blank for no bookmark support - * SUGGESTED: 'pma__bookmark' - * - * @global string $cfg['Servers'][$i]['bookmarktable'] - */ -$cfg['Servers'][$i]['bookmarktable'] = ''; - -/** - * table to describe the relation between links (see doc) - * - leave blank for no relation-links support - * SUGGESTED: 'pma__relation' - * - * @global string $cfg['Servers'][$i]['relation'] - */ -$cfg['Servers'][$i]['relation'] = ''; - -/** - * table to describe the display fields - * - leave blank for no display fields support - * SUGGESTED: 'pma__table_info' - * - * @global string $cfg['Servers'][$i]['table_info'] - */ -$cfg['Servers'][$i]['table_info'] = ''; - -/** - * table to describe the tables position for the designer and PDF schema - * - leave blank for no PDF schema support - * SUGGESTED: 'pma__table_coords' - * - * @global string $cfg['Servers'][$i]['table_coords'] - */ -$cfg['Servers'][$i]['table_coords'] = ''; - -/** - * table to describe pages of relationpdf - * - leave blank if you don't want to use this - * SUGGESTED: 'pma__pdf_pages' - * - * @global string $cfg['Servers'][$i]['pdf_pages'] - */ -$cfg['Servers'][$i]['pdf_pages'] = ''; - -/** - * table to store column information - * - leave blank for no column comments/mime types - * SUGGESTED: 'pma__column_info' - * - * @global string $cfg['Servers'][$i]['column_info'] - */ -$cfg['Servers'][$i]['column_info'] = ''; - -/** - * table to store SQL history - * - leave blank for no SQL query history - * SUGGESTED: 'pma__history' - * - * @global string $cfg['Servers'][$i]['history'] - */ -$cfg['Servers'][$i]['history'] = ''; - -/** - * table to store recently used tables - * - leave blank for no "persistent" recently used tables - * SUGGESTED: 'pma__recent' - */ -$cfg['Servers'][$i]['recent'] = ''; - -/** - * table to store favorite tables - * - leave blank for no favorite tables - * SUGGESTED: 'pma__favorite' - */ -$cfg['Servers'][$i]['favorite'] = ''; - -/** - * table to store UI preferences for tables - * - leave blank for no "persistent" UI preferences - * SUGGESTED: 'pma__table_uiprefs' - */ -$cfg['Servers'][$i]['table_uiprefs'] = ''; - -/** - * table to store SQL tracking - * - leave blank for no SQL tracking - * SUGGESTED: 'pma__tracking' - * - * @global string $cfg['Servers'][$i]['tracking'] - */ -$cfg['Servers'][$i]['tracking'] = ''; - -/** - * table to store user preferences - * - leave blank to disable server storage - * SUGGESTED: 'pma__userconfig' - * - * @global string $cfg['Servers'][$i]['userconfig'] - */ -$cfg['Servers'][$i]['userconfig'] = ''; - -/** - * table to store users and their assignment to user groups - * - leave blank to disable configurable menus feature - * SUGGESTED: 'pma__users' - * - * @global string $cfg['Servers'][$i]['users'] - */ -$cfg['Servers'][$i]['users'] = ''; - -/** - * table to store allowed menu items for each user group - * - leave blank to disable configurable menus feature - * SUGGESTED: 'pma__usergroups' - * - * @global string $cfg['Servers'][$i]['usergroups'] - */ -$cfg['Servers'][$i]['usergroups'] = ''; - -/** - * table to store information about item hidden from navigation tree - * - leave blank to disable hide/show navigation items feature - * SUGGESTED: 'pma__navigationhiding' - * - * @global string $cfg['Servers'][$i]['navigationhiding'] - */ -$cfg['Servers'][$i]['navigationhiding'] = ''; - -/** - * table to store information about saved searches from query-by-example on a db - * - leave blank to disable saved searches feature - * SUGGESTED: 'pma__savedsearches' - * - * @global string $cfg['Servers'][$i]['savedsearches'] - */ -$cfg['Servers'][$i]['savedsearches'] = ''; - -/** - * table to store central list of columns per database - * - leave blank to disable central list of columns feature - * SUGGESTED: 'pma__central_columns' - * - * @global string $cfg['Servers'][$i]['central_columns'] - */ -$cfg['Servers'][$i]['central_columns'] = ''; - -/** - * table to store designer settings - * - leave blank to disable the storage of designer settings - * SUGGESTED: 'pma__designer_settings' - * - * @global string $cfg['Servers'][$i]['designer_settings'] - */ -$cfg['Servers'][$i]['designer_settings'] = ''; - -/** - * table to store export templates - * - leave blank to disable saved searches feature - * SUGGESTED: 'pma__export_templates' - * - * @global string $cfg['Servers'][$i]['export_templates'] - */ -$cfg['Servers'][$i]['export_templates'] = ''; - -/** - * Maximum number of records saved in $cfg['Servers'][$i]['table_uiprefs'] table. - * - * In case where tables in databases is modified (e.g. dropped or renamed), - * table_uiprefs may contains invalid data (referring to tables which are not - * exist anymore). - * This configuration make sure that we only keep N (N = MaxTableUiprefs) - * newest record in table_uiprefs and automatically delete older records. - * - * @global integer $cfg['Servers'][$i]['userconfig'] = ''; - */ -$cfg['Servers'][$i]['MaxTableUiprefs'] = 100; - -/** - * Sets the time zone used by phpMyAdmin. Possible values are explained at - * https://dev.mysql.com/doc/refman/5.7/en/time-zone-support.html - * - * @global string $cfg['Servers'][$i]['SessionTimeZone'] = '' - */ -$cfg['Servers'][$i]['SessionTimeZone'] = ''; - -/** - * whether to allow root login - * - * @global boolean $cfg['Servers'][$i]['AllowRoot'] - */ -$cfg['Servers'][$i]['AllowRoot'] = true; - -/** - * whether to allow login of any user without a password - * - * @global boolean $cfg['Servers'][$i]['AllowNoPassword'] - */ -$cfg['Servers'][$i]['AllowNoPassword'] = false; - -/** - * Host authentication order, leave blank to not use - * - * @global string $cfg['Servers'][$i]['AllowDeny']['order'] - */ -$cfg['Servers'][$i]['AllowDeny']['order'] = ''; - -/** - * Host authentication rules, leave blank for defaults - * - * @global array $cfg['Servers'][$i]['AllowDeny']['rules'] - */ -$cfg['Servers'][$i]['AllowDeny']['rules'] = []; - -/** - * Disable use of INFORMATION_SCHEMA. - * - * @see https://github.com/phpmyadmin/phpmyadmin/issues/8970 - * @see https://bugs.mysql.com/19588 - * - * @global boolean $cfg['Servers'][$i]['DisableIS'] - */ -$cfg['Servers'][$i]['DisableIS'] = false; - -/** - * Whether the tracking mechanism creates - * versions for tables and views automatically. - * - * @global bool $cfg['Servers'][$i]['tracking_version_auto_create'] - */ -$cfg['Servers'][$i]['tracking_version_auto_create'] = false; - -/** - * Defines the list of statements - * the auto-creation uses for new versions. - * - * @global string $cfg['Servers'][$i]['tracking_default_statements'] - */ -$cfg['Servers'][$i]['tracking_default_statements'] = 'CREATE TABLE,ALTER TABLE,DROP TABLE,RENAME TABLE,CREATE INDEX,' . - 'DROP INDEX,INSERT,UPDATE,DELETE,TRUNCATE,REPLACE,CREATE VIEW,' . - 'ALTER VIEW,DROP VIEW,CREATE DATABASE,ALTER DATABASE,DROP DATABASE'; - -/** - * Whether a DROP VIEW IF EXISTS statement will be added - * as first line to the log when creating a view. - * - * @global bool $cfg['Servers'][$i]['tracking_add_drop_view'] - */ -$cfg['Servers'][$i]['tracking_add_drop_view'] = true; - -/** - * Whether a DROP TABLE IF EXISTS statement will be added - * as first line to the log when creating a table. - * - * @global bool $cfg['Servers'][$i]['tracking_add_drop_table'] - */ -$cfg['Servers'][$i]['tracking_add_drop_table'] = true; - -/** - * Whether a DROP DATABASE IF EXISTS statement will be added - * as first line to the log when creating a database. - * - * @global bool $cfg['Servers'][$i]['tracking_add_drop_database'] - */ -$cfg['Servers'][$i]['tracking_add_drop_database'] = true; - -/** - * Whether to show or hide detailed MySQL/MariaDB connection errors on the login page. - * - * @global bool $cfg['Servers'][$i]['hide_connection_errors'] - */ -$cfg['Servers'][$i]['hide_connection_errors'] = false; - -/** - * Default server (0 = no default server) - * - * If you have more than one server configured, you can set $cfg['ServerDefault'] - * to any one of them to auto-connect to that server when phpMyAdmin is started, - * or set it to 0 to be given a list of servers without logging in - * If you have only one server configured, $cfg['ServerDefault'] *MUST* be - * set to that server. - * - * @global integer $cfg['ServerDefault'] - */ -$cfg['ServerDefault'] = 1; - -/** - * Other core phpMyAdmin settings - */ - -/** - * whether version check is active - * - * @global boolean $cfg['VersionCheck'] - */ -if (defined('VERSION_CHECK_DEFAULT')) { - $cfg['VersionCheck'] = VERSION_CHECK_DEFAULT; -} else { - $cfg['VersionCheck'] = true; -} - -/** - * The url of the proxy to be used when retrieving the information about - * the latest version of phpMyAdmin or error reporting. You need this if - * the server where phpMyAdmin is installed does not have direct access to - * the internet. - * The format is: "hostname:portnumber" - * - * @global string $cfg['ProxyUrl'] - */ -$cfg['ProxyUrl'] = ''; - -/** - * The username for authenticating with the proxy. By default, no - * authentication is performed. If a username is supplied, Basic - * Authentication will be performed. No other types of authentication - * are currently supported. - * - * @global string $cfg['ProxyUser'] - */ -$cfg['ProxyUser'] = ''; - -/** - * The password for authenticating with the proxy. - * - * @global string $cfg['ProxyPass'] - */ -$cfg['ProxyPass'] = ''; - -/** - * maximum number of db's displayed in database list - * - * @global integer $cfg['MaxDbList'] - */ -$cfg['MaxDbList'] = 100; - -/** - * maximum number of tables displayed in table list - * - * @global integer $cfg['MaxTableList'] - */ -$cfg['MaxTableList'] = 250; - -/** - * whether to show hint or not - * - * @global boolean $cfg['ShowHint'] - */ -$cfg['ShowHint'] = true; - -/** - * maximum number of characters when a SQL query is displayed - * - * @global integer $cfg['MaxCharactersInDisplayedSQL'] - */ -$cfg['MaxCharactersInDisplayedSQL'] = 1000; - -/** - * use GZIP output buffering if possible (true|false|'auto') - * - * @global string $cfg['OBGzip'] - */ -$cfg['OBGzip'] = 'auto'; - -/** - * use persistent connections to MySQL database - * - * @global boolean $cfg['PersistentConnections'] - */ -$cfg['PersistentConnections'] = false; - -/** - * maximum execution time in seconds (0 for no limit) - * - * @global integer $cfg['ExecTimeLimit'] - */ -$cfg['ExecTimeLimit'] = 300; - -/** - * Path for storing session data (session_save_path PHP parameter). - * - * @global integer $cfg['SessionSavePath'] - */ -$cfg['SessionSavePath'] = ''; - -/** - * Hosts or IPs to consider safe when checking if SSL is used or not - * - * @global array $cfg['MysqlSslWarningSafeHosts'] - */ -$cfg['MysqlSslWarningSafeHosts'] = ['127.0.0.1', 'localhost']; - -/** - * maximum allocated bytes ('-1' for no limit, '0' for no change) - * this is a string because '16M' is a valid value; we must put here - * a string as the default value so that /setup accepts strings - * - * @global string $cfg['MemoryLimit'] - */ -$cfg['MemoryLimit'] = '-1'; - -/** - * mark used tables, make possible to show locked tables (since MySQL 3.23.30) - * - * @global boolean $cfg['SkipLockedTables'] - */ -$cfg['SkipLockedTables'] = false; - -/** - * show SQL queries as run - * - * @global boolean $cfg['ShowSQL'] - */ -$cfg['ShowSQL'] = true; - -/** - * retain SQL input on Ajax execute - * - * @global boolean $cfg['RetainQueryEditor'] - */ -$cfg['RetainQueryBox'] = false; - -/** - * use CodeMirror syntax highlighting for editing SQL - * - * @global boolean $cfg['CodemirrorEnable'] - */ -$cfg['CodemirrorEnable'] = true; - -/** - * use the parser to find any errors in the query before executing - * - * @global boolean $cfg['LintEnable'] - */ -$cfg['LintEnable'] = true; - -/** - * show a 'Drop database' link to normal users - * - * @global boolean $cfg['AllowUserDropDatabase'] - */ -$cfg['AllowUserDropDatabase'] = false; - -/** - * confirm some commands that can result in loss of data - * - * @global boolean $cfg['Confirm'] - */ -$cfg['Confirm'] = true; - -/** - * sets SameSite attribute of the Set-Cookie HTTP response header - * - * Valid values are: - * - Lax - * - Strict - * - None - * - * @global string $cfg['CookieSameSite'] - */ - $cfg['CookieSameSite'] = 'Strict'; - -/** - * recall previous login in cookie authentication mode or not - * - * @global boolean $cfg['LoginCookieRecall'] - */ -$cfg['LoginCookieRecall'] = true; - -/** - * validity of cookie login (in seconds; 1440 matches php.ini's - * session.gc_maxlifetime) - * - * @global integer $cfg['LoginCookieValidity'] - */ -$cfg['LoginCookieValidity'] = 1440; - -/** - * how long login cookie should be stored (in seconds) - * - * @global integer $cfg['LoginCookieStore'] - */ -$cfg['LoginCookieStore'] = 0; - -/** - * whether to delete all login cookies on logout - * - * @global boolean $cfg['LoginCookieDeleteAll'] - */ -$cfg['LoginCookieDeleteAll'] = true; - -/** - * whether to enable the "database search" feature or not - * - * @global boolean $cfg['UseDbSearch'] - */ -$cfg['UseDbSearch'] = true; - -/** - * if set to true, PMA continues computing multiple-statement queries - * even if one of the queries failed - * - * @global boolean $cfg['IgnoreMultiSubmitErrors'] - */ -$cfg['IgnoreMultiSubmitErrors'] = false; - -/** - * Define whether phpMyAdmin will encrypt sensitive data from the URL query string. - * - * @global bool $cfg['URLQueryEncryption'] - */ -$cfg['URLQueryEncryption'] = false; - -/** - * A secret key used to encrypt/decrypt the URL query string. Should be 32 bytes long. - * - * @global string $cfg['URLQueryEncryptionSecretKey'] - */ -$cfg['URLQueryEncryptionSecretKey'] = ''; - -/** - * allow login to any user entered server in cookie based authentication - * - * @global boolean $cfg['AllowArbitraryServer'] - */ -$cfg['AllowArbitraryServer'] = false; - -/** - * restrict by IP (with regular expression) the MySQL servers the user can enter - * when $cfg['AllowArbitraryServer'] = true - * - * @global string $cfg['ArbitraryServerRegexp'] - */ -$cfg['ArbitraryServerRegexp'] = ''; - -/** - * To enable reCaptcha v2 checkbox mode if necessary - * - * @global string $cfg['CaptchaMethod'] - */ -$cfg['CaptchaMethod'] = 'invisible'; - -/** - * URL for the reCaptcha v2 compatible API to use - * - * @global string $cfg['CaptchaApi'] - */ -$cfg['CaptchaApi'] = 'https://www.google.com/recaptcha/api.js'; - -/** - * Content-Security-Policy snippet for the reCaptcha v2 compatible API - * - * @global string $cfg['CaptchaCsp'] - */ -$cfg['CaptchaCsp'] = 'https://apis.google.com https://www.google.com/recaptcha/' - . ' https://www.gstatic.com/recaptcha/ https://ssl.gstatic.com/'; - -/** - * reCaptcha API's request parameter name - * - * @global string $cfg['CaptchaRequestParam'] - */ -$cfg['CaptchaRequestParam'] = 'g-recaptcha'; - -/** - * reCaptcha API's response parameter name - * - * @global string $cfg['CaptchaResponseParam'] - */ -$cfg['CaptchaResponseParam'] = 'g-recaptcha-response'; - -/** - * if reCaptcha is enabled it needs public key to connect with the service - * - * @global string $cfg['CaptchaLoginPublicKey'] - */ -$cfg['CaptchaLoginPublicKey'] = ''; - -/** - * if reCaptcha is enabled it needs private key to connect with the service - * - * @global string $cfg['CaptchaLoginPrivateKey'] - */ -$cfg['CaptchaLoginPrivateKey'] = ''; - -/** - * if reCaptcha is enabled may need an URL for site verify - * - * @global string $cfg['CaptchaSiteVerifyURL'] - */ -$cfg['CaptchaSiteVerifyURL'] = ''; - -/** - * Enable drag and drop import - * - * @see feature request : https://github.com/phpmyadmin/phpmyadmin/issues/13155 - * - * @global bool $cfg['enable_drag_drop_import'] - */ -$cfg['enable_drag_drop_import'] = true; - -/******************************************************************************* - * Navigation panel setup - */ - -/** - * In the navigation panel, replaces the database tree with a selector - * - * @global boolean $cfg['ShowDatabasesNavigationAsTree'] - */ -$cfg['ShowDatabasesNavigationAsTree'] = true; - -/** - * maximum number of first level databases displayed in navigation panel - * - * @global integer $cfg['FirstLevelNavigationItems'] - */ -$cfg['FirstLevelNavigationItems'] = 100; - -/** - * maximum number of items displayed in navigation panel - * - * @global integer $cfg['MaxNavigationItems'] - */ -$cfg['MaxNavigationItems'] = 50; - -/** - * turn the select-based light menu into a tree - * - * @global boolean $cfg['NavigationTreeEnableGrouping'] - */ -$cfg['NavigationTreeEnableGrouping'] = true; - -/** - * the separator to sub-tree the select-based light menu tree - * - * @global string $cfg['NavigationTreeDbSeparator'] - */ -$cfg['NavigationTreeDbSeparator'] = '_'; - -/** - * Which string will be used to generate table prefixes - * to split/nest tables into multiple categories - * - * @global string $cfg['NavigationTreeTableSeparator'] - */ -$cfg['NavigationTreeTableSeparator'] = '__'; - -/** - * How many sublevels should be displayed when splitting up tables - * by the above Separator - * - * @global integer $cfg['NavigationTreeTableLevel'] - */ -$cfg['NavigationTreeTableLevel'] = 1; - -/** - * link with main panel by highlighting the current db/table - * - * @global boolean $cfg['NavigationLinkWithMainPanel'] - */ -$cfg['NavigationLinkWithMainPanel'] = true; - -/** - * display logo at top of navigation panel - * - * @global boolean $cfg['NavigationDisplayLogo'] - */ -$cfg['NavigationDisplayLogo'] = true; - -/** - * where should logo link point to (can also contain an external URL) - * - * @global string $cfg['NavigationLogoLink'] - */ -$cfg['NavigationLogoLink'] = 'index.php'; - -/** - * whether to open the linked page in the main window ('main') or - * in a new window ('new') - * - * @global string $cfg['NavigationLogoLinkWindow'] - */ -$cfg['NavigationLogoLinkWindow'] = 'main'; - -/** - * number of recently used tables displayed in the navigation panel - * - * @global integer $cfg['NumRecentTables'] - */ -$cfg['NumRecentTables'] = 10; - -/** - * number of favorite tables displayed in the navigation panel - * - * @global integer $cfg['NumFavoriteTables'] - */ -$cfg['NumFavoriteTables'] = 10; - -/** - * display a JavaScript table filter in the navigation panel - * when more then x tables are present - * - * @global boolean $cfg['NavigationTreeDisplayItemFilterMinimum'] - */ -$cfg['NavigationTreeDisplayItemFilterMinimum'] = 30; - -/** - * display server choice at top of navigation panel - * - * @global boolean $cfg['NavigationDisplayServers'] - */ -$cfg['NavigationDisplayServers'] = true; - -/** - * server choice as links - * - * @global boolean $cfg['DisplayServersList'] - */ -$cfg['DisplayServersList'] = false; - -/** - * display a JavaScript database filter in the navigation panel - * when more then x databases are present - * - * @global boolean $cfg['NavigationTreeDisplayDbFilterMinimum'] - */ -$cfg['NavigationTreeDisplayDbFilterMinimum'] = 30; - -/** - * target of the navigation panel quick access icon - * - * Possible values: - * 'structure' = fields list - * 'sql' = SQL form - * 'search' = search page - * 'insert' = insert row page - * 'browse' = browse page - * - * @global string $cfg['NavigationTreeDefaultTabTable'] - */ -$cfg['NavigationTreeDefaultTabTable'] = 'structure'; - -/** - * target of the navigation panel quick second access icon - * - * Possible values: - * 'structure' = fields list - * 'sql' = SQL form - * 'search' = search page - * 'insert' = insert row page - * 'browse' = browse page - * '' = no link - * - * @global string $cfg['NavigationTreeDefaultTabTable2'] - */ -$cfg['NavigationTreeDefaultTabTable2'] = ''; - -/** - * Enables the possibility of navigation tree expansion - * - * @global boolean $cfg['NavigationTreeEnableExpansion'] - */ -$cfg['NavigationTreeEnableExpansion'] = true; - -/** - * Show tables in navigation panel - * - * @global boolean $cfg['NavigationTreeShowTables'] - */ -$cfg['NavigationTreeShowTables'] = true; - -/** - * Show views in navigation panel - * - * @global boolean $cfg['NavigationTreeShowViews'] - */ -$cfg['NavigationTreeShowViews'] = true; - -/** - * Show functions in navigation panel - * - * @global boolean $cfg['NavigationTreeShowFunctions'] - */ -$cfg['NavigationTreeShowFunctions'] = true; - -/** - * Show procedures in navigation panel - * - * @global boolean $cfg['NavigationTreeShowProcedures'] - */ -$cfg['NavigationTreeShowProcedures'] = true; - -/** - * Show events in navigation panel - * - * @global boolean $cfg['NavigationTreeShowEvents'] - */ -$cfg['NavigationTreeShowEvents'] = true; - -/** - * Width of navigation panel - * - * @global integer $cfg['NavigationWidth'] - */ -$cfg['NavigationWidth'] = 240; - -/** - * Automatically expands single database in navigation panel - * - * @global boolean $cfg['NavigationAutoexpandSingleDb'] - */ -$cfg['NavigationTreeAutoexpandSingleDb'] = true; - -/******************************************************************************* - * In the main panel, at startup... - */ - -/** - * allow to display statistics and space usage in the pages about database - * details and table properties - * - * @global boolean $cfg['ShowStats'] - */ -$cfg['ShowStats'] = true; - -/** - * show PHP info link - * - * @global boolean $cfg['ShowPhpInfo'] - */ -$cfg['ShowPhpInfo'] = false; - -/** - * show MySQL server and web server information - * - * @global boolean $cfg['ShowServerInfo'] - */ -$cfg['ShowServerInfo'] = true; - -/** - * show change password link - * - * @global boolean $cfg['ShowChgPassword'] - */ -$cfg['ShowChgPassword'] = true; - -/** - * show create database form - * - * @global boolean $cfg['ShowCreateDb'] - */ -$cfg['ShowCreateDb'] = true; - - -/******************************************************************************* - * Database structure - */ - -/** - * show charset column in database structure (true|false)? - * - * @global boolean $cfg['ShowDbStructureCharset'] - */ -$cfg['ShowDbStructureCharset'] = false; - -/** - * show comment column in database structure (true|false)? - * - * @global boolean $cfg['ShowDbStructureComment'] - */ -$cfg['ShowDbStructureComment'] = false; - -/** - * show creation timestamp column in database structure (true|false)? - * - * @global boolean $cfg['ShowDbStructureCreation'] - */ -$cfg['ShowDbStructureCreation'] = false; - -/** - * show last update timestamp column in database structure (true|false)? - * - * @global boolean $cfg['ShowDbStructureLastUpdate'] - */ -$cfg['ShowDbStructureLastUpdate'] = false; - -/** - * show last check timestamp column in database structure (true|false)? - * - * @global boolean $cfg['ShowDbStructureLastCheck'] - */ -$cfg['ShowDbStructureLastCheck'] = false; - -/** - * allow hide action columns to drop down menu in database structure (true|false)? - * - * @global boolean $cfg['HideStructureActions'] - */ -$cfg['HideStructureActions'] = true; - -/** - * Show column comments in table structure view (true|false)? - * - * @global boolean $cfg['ShowColumnComments'] - */ -$cfg['ShowColumnComments'] = true; - - -/******************************************************************************* - * In browse mode... - */ - -/** - * Use icons instead of text for the navigation bar buttons (table browse) - * ('text'|'icons'|'both') - * - * @global string $cfg['TableNavigationLinksMode'] - */ -$cfg['TableNavigationLinksMode'] = 'icons'; - -/** - * Defines whether a user should be displayed a "show all (records)" - * button in browse mode or not. - * - * @global boolean $cfg['ShowAll'] - */ -$cfg['ShowAll'] = false; - -/** - * Number of rows displayed when browsing a result set. If the result - * set contains more rows, "Previous" and "Next". - * Possible values: 25,50,100,250,500 - * - * @global integer $cfg['MaxRows'] - */ -$cfg['MaxRows'] = 25; - -/** - * default for 'ORDER BY' clause (valid values are 'ASC', 'DESC' or 'SMART' -ie - * descending order for fields of type TIME, DATE, DATETIME & TIMESTAMP, - * ascending order else-) - * - * @global string $cfg['Order'] - */ -$cfg['Order'] = 'SMART'; - -/** - * grid editing: save edited cell(s) in browse-mode at once - * - * @global boolean $cfg['SaveCellsAtOnce'] - */ -$cfg['SaveCellsAtOnce'] = false; - -/** - * grid editing: which action triggers it, or completely disable the feature - * - * Possible values: - * 'click' - * 'double-click' - * 'disabled' - * - * @global string $cfg['GridEditing'] - */ -$cfg['GridEditing'] = 'double-click'; - -/** - * Options > Relational display - * - * Possible values: - * 'K' for key value - * 'D' for display column - * - * @global string $cfg['RelationalDisplay'] - */ -$cfg['RelationalDisplay'] = 'K'; - - -/******************************************************************************* - * In edit mode... - */ - -/** - * disallow editing of binary fields - * valid values are: - * false allow editing - * 'blob' allow editing except for BLOB fields - * 'noblob' disallow editing except for BLOB fields - * 'all' disallow editing - * - * @global string $cfg['ProtectBinary'] - */ -$cfg['ProtectBinary'] = 'blob'; - -/** - * Display the function fields in edit/insert mode - * - * @global boolean $cfg['ShowFunctionFields'] - */ -$cfg['ShowFunctionFields'] = true; - -/** - * Display the type fields in edit/insert mode - * - * @global boolean $cfg['ShowFieldTypesInDataEditView'] - */ -$cfg['ShowFieldTypesInDataEditView'] = true; - -/** - * Which editor should be used for CHAR/VARCHAR fields: - * input - allows limiting of input length - * textarea - allows newlines in fields - * - * @global string $cfg['CharEditing'] - */ -$cfg['CharEditing'] = 'input'; - -/** - * The minimum size for character input fields - * - * @global integer $cfg['MinSizeForInputField'] - */ -$cfg['MinSizeForInputField'] = 4; - -/** - * The maximum size for character input fields - * - * @global integer $cfg['MinSizeForInputField'] - */ -$cfg['MaxSizeForInputField'] = 60; - -/** - * How many rows can be inserted at one time - * - * @global integer $cfg['InsertRows'] - */ -$cfg['InsertRows'] = 2; - -/** - * Sort order for items in a foreign-key drop-down list. - * 'content' is the referenced data, 'id' is the key value. - * - * @global array $cfg['ForeignKeyDropdownOrder'] - */ -$cfg['ForeignKeyDropdownOrder'] = [ - 'content-id', - 'id-content', -]; - -/** - * A drop-down list will be used if fewer items are present - * - * @global integer $cfg['ForeignKeyMaxLimit'] - */ -$cfg['ForeignKeyMaxLimit'] = 100; - -/** - * Whether to disable foreign key checks while importing - * - * @global boolean $cfg['DefaultForeignKeyChecks'] - */ -$cfg['DefaultForeignKeyChecks'] = 'default'; - -/******************************************************************************* - * For the export features... - */ - -/** - * Allow for the use of zip compression (requires zip support to be enabled) - * - * @global boolean $cfg['ZipDump'] - */ -$cfg['ZipDump'] = true; - -/** - * Allow for the use of gzip compression (requires zlib) - * - * @global boolean $cfg['GZipDump'] - */ -$cfg['GZipDump'] = true; - -/** - * Allow for the use of bzip2 decompression (requires bz2 extension) - * - * @global boolean $cfg['BZipDump'] - */ -$cfg['BZipDump'] = true; - -/** - * Will compress gzip exports on the fly without the need for much memory. - * If you encounter problems with created gzip files disable this feature. - * - * @global boolean $cfg['CompressOnFly'] - */ -$cfg['CompressOnFly'] = true; - - -/******************************************************************************* - * Tabs display settings - */ - -/** - * How to display the menu tabs ('icons'|'text'|'both') - * - * @global boolean $cfg['TabsMode'] - */ -$cfg['TabsMode'] = 'both'; - -/** - * How to display various action links ('icons'|'text'|'both') - * - * @global boolean $cfg['ActionLinksMode'] - */ -$cfg['ActionLinksMode'] = 'both'; - -/** - * How many columns should be used for table display of a database? - * (a value larger than 1 results in some information being hidden) - * - * @global integer $cfg['PropertiesNumColumns'] - */ -$cfg['PropertiesNumColumns'] = 1; - -/** - * Possible values: - * 'welcome' = the welcome page - * (recommended for multiuser setups) - * 'databases' = list of databases - * 'status' = runtime information - * 'variables' = MySQL server variables - * 'privileges' = user management - * - * @global string $cfg['DefaultTabServer'] - */ -$cfg['DefaultTabServer'] = 'welcome'; - -/** - * Possible values: - * 'structure' = tables list - * 'sql' = SQL form - * 'search' = search query - * 'operations' = operations on database - * - * @global string $cfg['DefaultTabDatabase'] - */ -$cfg['DefaultTabDatabase'] = 'structure'; - -/** - * Possible values: - * 'structure' = fields list - * 'sql' = SQL form - * 'search' = search page - * 'insert' = insert row page - * 'browse' = browse page - * - * @global string $cfg['DefaultTabTable'] - */ -$cfg['DefaultTabTable'] = 'browse'; - -/** - * Whether to display image or text or both image and text in table row - * action segment. Value can be either of ``image``, ``text`` or ``both``. - */ -$cfg['RowActionType'] = 'both'; - -/******************************************************************************* - * Export defaults - */ -$cfg['Export'] = []; - -/** - * codegen/csv/excel/htmlexcel/htmlword/latex/ods/odt/pdf/sql/texytext/xml/yaml - * - * @global string $cfg['Export']['format'] - */ -$cfg['Export']['format'] = 'sql'; - -/** - * quick/custom/custom-no-form - * - * @global string $cfg['Export']['format'] - */ -$cfg['Export']['method'] = 'quick'; - -/** - * none/zip/gzip - * - * @global string $cfg['Export']['compression'] - */ -$cfg['Export']['compression'] = 'none'; - -/** - * Whether to LOCK TABLES before exporting - * - * @global boolean $cfg['Export']['lock_tables'] - */ -$cfg['Export']['lock_tables'] = false; - -/** - * Whether to export databases/tables as separate files - * - * @global boolean $cfg['Export']['as_separate_files'] - */ -$cfg['Export']['as_separate_files'] = false; - -/** - * @global boolean $cfg['Export']['asfile'] - */ -$cfg['Export']['asfile'] = true; - -/** - * @global string $cfg['Export']['charset'] - */ -$cfg['Export']['charset'] = ''; - -/** - * @global boolean $cfg['Export']['onserver'] - */ -$cfg['Export']['onserver'] = false; - -/** - * @global boolean $cfg['Export']['onserver_overwrite'] - */ -$cfg['Export']['onserver_overwrite'] = false; - -/** - * @global boolean $cfg['Export']['quick_export_onserver'] - */ -$cfg['Export']['quick_export_onserver'] = false; - -/** - * @global boolean $cfg['Export']['quick_export_onserver_overwrite'] - */ -$cfg['Export']['quick_export_onserver_overwrite'] = false; - -/** - * @global boolean $cfg['Export']['remember_file_template'] - */ -$cfg['Export']['remember_file_template'] = true; - -/** - * @global string $cfg['Export']['file_template_table'] - */ -$cfg['Export']['file_template_table'] = '@TABLE@'; - -/** - * @global string $cfg['Export']['file_template_database'] - */ -$cfg['Export']['file_template_database'] = '@DATABASE@'; - -/** - * @global string $cfg['Export']['file_template_server'] - */ -$cfg['Export']['file_template_server'] = '@SERVER@'; - -/** - * @global string $cfg['Export']['codegen_structure_or_data'] - */ -$cfg['Export']['codegen_structure_or_data'] = 'data'; - -/** - * @global $cfg['Export']['codegen_format'] - */ -$cfg['Export']['codegen_format'] = 0; - -/** - * @global boolean $cfg['Export']['ods_columns'] - */ -$cfg['Export']['ods_columns'] = false; - -/** - * @global string $cfg['Export']['ods_null'] - */ -$cfg['Export']['ods_null'] = 'NULL'; - -/** - * @global string $cfg['Export']['odt_structure_or_data'] - */ -$cfg['Export']['odt_structure_or_data'] = 'structure_and_data'; - -/** - * @global boolean $cfg['Export']['odt_columns'] - */ -$cfg['Export']['odt_columns'] = true; - -/** - * @global boolean $cfg['Export']['odt_relation'] - */ -$cfg['Export']['odt_relation'] = true; - -/** - * @global boolean $cfg['Export']['odt_comments'] - */ -$cfg['Export']['odt_comments'] = true; - -/** - * @global boolean $cfg['Export']['odt_mime'] - */ -$cfg['Export']['odt_mime'] = true; - -/** - * @global string $cfg['Export']['odt_null'] - */ -$cfg['Export']['odt_null'] = 'NULL'; - -/** - * @global boolean $cfg['Export']['htmlword_structure_or_data'] - */ -$cfg['Export']['htmlword_structure_or_data'] = 'structure_and_data'; - -/** - * @global boolean $cfg['Export']['htmlword_columns'] - */ -$cfg['Export']['htmlword_columns'] = false; - -/** - * @global string $cfg['Export']['htmlword_null'] - */ -$cfg['Export']['htmlword_null'] = 'NULL'; - -/** - * @global string $cfg['Export']['texytext_structure_or_data'] - */ -$cfg['Export']['texytext_structure_or_data'] = 'structure_and_data'; - -/** - * @global boolean $cfg['Export']['texytext_columns'] - */ -$cfg['Export']['texytext_columns'] = false; - -/** - * @global string $cfg['Export']['texytext_null'] - */ -$cfg['Export']['texytext_null'] = 'NULL'; - -/** - * @global boolean $cfg['Export']['csv_columns'] - */ -$cfg['Export']['csv_columns'] = false; - -/** - * @global string $cfg['Export']['csv_structure_or_data'] - */ -$cfg['Export']['csv_structure_or_data'] = 'data'; - -/** - * @global string $cfg['Export']['csv_null'] - */ -$cfg['Export']['csv_null'] = 'NULL'; - -/** - * @global string $cfg['Export']['csv_separator'] - */ -$cfg['Export']['csv_separator'] = ','; - -/** - * @global string $cfg['Export']['csv_enclosed'] - */ -$cfg['Export']['csv_enclosed'] = '"'; - -/** - * @global string $cfg['Export']['csv_escaped'] - */ -$cfg['Export']['csv_escaped'] = '"'; - -/** - * @global string $cfg['Export']['csv_terminated'] - */ -$cfg['Export']['csv_terminated'] = 'AUTO'; - -/** - * @global string $cfg['Export']['csv_removeCRLF'] - */ -$cfg['Export']['csv_removeCRLF'] = false; - -/** - * @global boolean $cfg['Export']['excel_columns'] - */ -$cfg['Export']['excel_columns'] = true; - -/** - * @global string $cfg['Export']['excel_null'] - */ -$cfg['Export']['excel_null'] = 'NULL'; - -/** - * win/mac - * - * @global string $cfg['Export']['excel_edition'] - */ -$cfg['Export']['excel_edition'] = 'win'; - -/** - * @global string $cfg['Export']['excel_removeCRLF'] - */ -$cfg['Export']['excel_removeCRLF'] = false; - -/** - * @global string $cfg['Export']['excel_structure_or_data'] - */ -$cfg['Export']['excel_structure_or_data'] = 'data'; - -/** - * @global string $cfg['Export']['latex_structure_or_data'] - */ -$cfg['Export']['latex_structure_or_data'] = 'structure_and_data'; - -/** - * @global boolean $cfg['Export']['latex_columns'] - */ -$cfg['Export']['latex_columns'] = true; - -/** - * @global boolean $cfg['Export']['latex_relation'] - */ -$cfg['Export']['latex_relation'] = true; - -/** - * @global boolean $cfg['Export']['latex_comments'] - */ -$cfg['Export']['latex_comments'] = true; - -/** - * @global boolean $cfg['Export']['latex_mime'] - */ -$cfg['Export']['latex_mime'] = true; - -/** - * @global string $cfg['Export']['latex_null'] - */ -$cfg['Export']['latex_null'] = '\textit{NULL}'; - -/** - * @global boolean $cfg['Export']['latex_caption'] - */ -$cfg['Export']['latex_caption'] = true; - -/** - * @global string $cfg['Export']['latex_structure_caption'] - */ -$cfg['Export']['latex_structure_caption'] = 'strLatexStructure'; - -/** - * @global string $cfg['Export']['latex_structure_continued_caption'] - */ -$cfg['Export']['latex_structure_continued_caption'] = 'strLatexStructure strLatexContinued'; - -/** - * @global string $cfg['Export']['latex_data_caption'] - */ -$cfg['Export']['latex_data_caption'] = 'strLatexContent'; - -/** - * @global string $cfg['Export']['latex_data_continued_caption'] - */ -$cfg['Export']['latex_data_continued_caption'] = 'strLatexContent strLatexContinued'; - -/** - * @global string $cfg['Export']['latex_data_label'] - */ -$cfg['Export']['latex_data_label'] = 'tab:@TABLE@-data'; - -/** - * @global string $cfg['Export']['latex_structure_label'] - */ -$cfg['Export']['latex_structure_label'] = 'tab:@TABLE@-structure'; - -/** - * @global string $cfg['Export']['mediawiki_structure_or_data'] - */ -$cfg['Export']['mediawiki_structure_or_data'] = 'data'; - -/** - * @global boolean $cfg['Export']['mediawiki_caption'] - */ -$cfg['Export']['mediawiki_caption'] = true; - -/** - * @global boolean $cfg['Export']['mediawiki_headers'] - */ -$cfg['Export']['mediawiki_headers'] = true; - -/** - * @global string $cfg['Export']['ods_structure_or_data'] - */ -$cfg['Export']['ods_structure_or_data'] = 'data'; - -/** - * @global string $cfg['Export']['pdf_structure_or_data'] - */ -$cfg['Export']['pdf_structure_or_data'] = 'data'; - -/** - * @global string $cfg['Export']['phparray_structure_or_data'] - */ -$cfg['Export']['phparray_structure_or_data'] = 'data'; - -/** - * @global string $cfg['Export']['json_structure_or_data'] - */ -$cfg['Export']['json_structure_or_data'] = 'data'; - -/** - * Export functions - * - * @global string $cfg['Export']['json_pretty_print'] - */ -$cfg['Export']['json_pretty_print'] = false; - -/** - * Export functions - * - * @global string $cfg['Export']['json_unicode'] - */ -$cfg['Export']['json_unicode'] = true; - -/** - * @global string $cfg['Export']['remove_definer_from_definitions'] - */ -$cfg['Export']['remove_definer_from_definitions'] = false; - -/** - * @global string $cfg['Export']['sql_structure_or_data'] - */ -$cfg['Export']['sql_structure_or_data'] = 'structure_and_data'; - -/** - * @global string $cfg['Export']['sql_compatibility'] - */ -$cfg['Export']['sql_compatibility'] = 'NONE'; - -/** - * Whether to include comments in SQL export. - * - * @global string $cfg['Export']['sql_include_comments'] - */ -$cfg['Export']['sql_include_comments'] = true; - -/** - * @global boolean $cfg['Export']['sql_disable_fk'] - */ -$cfg['Export']['sql_disable_fk'] = false; - -/** - * @global boolean $cfg['Export']['sql_views_as_tables'] - */ -$cfg['Export']['sql_views_as_tables'] = false; - -/** - * @global boolean $cfg['Export']['sql_metadata'] - */ -$cfg['Export']['sql_metadata'] = false; - -/** - * @global boolean $cfg['Export']['sql_use_transaction'] - */ -$cfg['Export']['sql_use_transaction'] = true; - -/** - * @global boolean $cfg['Export']['sql_create_database'] - */ -$cfg['Export']['sql_create_database'] = false; - -/** - * @global boolean $cfg['Export']['sql_drop_database'] - */ -$cfg['Export']['sql_drop_database'] = false; - -/** - * @global boolean $cfg['Export']['sql_drop_table'] - */ -$cfg['Export']['sql_drop_table'] = false; - -/** - * true by default for correct behavior when dealing with exporting - * of VIEWs and the stand-in table - * - * @global boolean $cfg['Export']['sql_if_not_exists'] - */ -$cfg['Export']['sql_if_not_exists'] = false; - -/** - * @global boolean $cfg['Export']['sql_view_current_user'] - */ -$cfg['Export']['sql_view_current_user'] = false; - -/** - * @global boolean $cfg['Export']['sql_or_replace'] - */ -$cfg['Export']['sql_or_replace_view'] = false; - -/** - * @global boolean $cfg['Export']['sql_procedure_function'] - */ -$cfg['Export']['sql_procedure_function'] = true; - -/** - * @global boolean $cfg['Export']['sql_create_table'] - */ -$cfg['Export']['sql_create_table'] = true; - -/** - * @global boolean $cfg['Export']['sql_create_view'] - */ -$cfg['Export']['sql_create_view'] = true; - -/** - * @global boolean $cfg['Export']['sql_create_trigger'] - */ -$cfg['Export']['sql_create_trigger'] = true; - -/** - * @global boolean $cfg['Export']['sql_auto_increment'] - */ -$cfg['Export']['sql_auto_increment'] = true; - -/** - * @global boolean $cfg['Export']['sql_backquotes'] - */ -$cfg['Export']['sql_backquotes'] = true; - -/** - * @global boolean $cfg['Export']['sql_dates'] - */ -$cfg['Export']['sql_dates'] = false; - -/** - * @global boolean $cfg['Export']['sql_relation'] - */ -$cfg['Export']['sql_relation'] = false; - -/** - * @global boolean $cfg['Export']['sql_truncate'] - */ -$cfg['Export']['sql_truncate'] = false; - -/** - * @global boolean $cfg['Export']['sql_delayed'] - */ -$cfg['Export']['sql_delayed'] = false; - -/** - * @global boolean $cfg['Export']['sql_ignore'] - */ -$cfg['Export']['sql_ignore'] = false; - -/** - * Export time in UTC. - * - * @global boolean $cfg['Export']['sql_utc_time'] - */ -$cfg['Export']['sql_utc_time'] = true; - -/** - * @global boolean $cfg['Export']['sql_hex_for_binary'] - */ -$cfg['Export']['sql_hex_for_binary'] = true; - -/** - * insert/update/replace - * - * @global string $cfg['Export']['sql_type'] - */ -$cfg['Export']['sql_type'] = 'INSERT'; - -/** - * @global integer $cfg['Export']['sql_max_query_size'] - */ -$cfg['Export']['sql_max_query_size'] = 50000; - -/** - * @global boolean $cfg['Export']['sql_mime'] - */ -$cfg['Export']['sql_mime'] = false; - -/** - * \n is replaced by new line - * - * @global string $cfg['Export']['sql_header_comment'] - */ -$cfg['Export']['sql_header_comment'] = ''; - -/** - * Whether to use complete inserts, extended inserts, both, or neither - * - * @global string $cfg['Export']['sql_insert_syntax'] - */ -$cfg['Export']['sql_insert_syntax'] = 'both'; - -/** - * @global string $cfg['Export']['pdf_report_title'] - */ -$cfg['Export']['pdf_report_title'] = ''; - -/** - * @global string $cfg['Export']['xml_structure_or_data'] - */ -$cfg['Export']['xml_structure_or_data'] = 'data'; - -/** - * Export schema for each structure - * - * @global string $cfg['Export']['xml_export_struc'] - */ -$cfg['Export']['xml_export_struc'] = true; - -/** - * Export events - * - * @global string $cfg['Export']['xml_export_events'] - */ -$cfg['Export']['xml_export_events'] = true; - -/** - * Export functions - * - * @global string $cfg['Export']['xml_export_functions'] - */ -$cfg['Export']['xml_export_functions'] = true; - -/** - * Export procedures - * - * @global string $cfg['Export']['xml_export_procedures'] - */ -$cfg['Export']['xml_export_procedures'] = true; - -/** - * Export schema for each table - * - * @global string $cfg['Export']['xml_export_tables'] - */ -$cfg['Export']['xml_export_tables'] = true; - -/** - * Export triggers - * - * @global string $cfg['Export']['xml_export_triggers'] - */ -$cfg['Export']['xml_export_triggers'] = true; - -/** - * Export views - * - * @global string $cfg['Export']['xml_export_views'] - */ -$cfg['Export']['xml_export_views'] = true; - -/** - * Export contents data - * - * @global string $cfg['Export']['xml_export_contents'] - */ -$cfg['Export']['xml_export_contents'] = true; - -/** - * @global string $cfg['Export']['yaml_structure_or_data'] - */ -$cfg['Export']['yaml_structure_or_data'] = 'data'; - -/******************************************************************************* - * Import defaults - */ -$cfg['Import'] = []; - -/** - * @global string $cfg['Import']['format'] - */ -$cfg['Import']['format'] = 'sql'; - -/** - * Default charset for import. - * - * @global string $cfg['Import']['charset'] - */ -$cfg['Import']['charset'] = ''; - -/** - * @global boolean $cfg['Import']['allow_interrupt'] - */ -$cfg['Import']['allow_interrupt'] = true; - -/** - * @global integer $cfg['Import']['skip_queries'] - */ -$cfg['Import']['skip_queries'] = 0; - -/** - * @global string $cfg['Import']['sql_compatibility'] - */ -$cfg['Import']['sql_compatibility'] = 'NONE'; - -/** - * @global string $cfg['Import']['sql_no_auto_value_on_zero'] - */ -$cfg['Import']['sql_no_auto_value_on_zero'] = true; - -/** - * @global string $cfg['Import']['sql_read_as_multibytes'] - */ -$cfg['Import']['sql_read_as_multibytes'] = false; - -/** - * @global boolean $cfg['Import']['csv_replace'] - */ -$cfg['Import']['csv_replace'] = false; - -/** - * @global boolean $cfg['Import']['csv_ignore'] - */ -$cfg['Import']['csv_ignore'] = false; - -/** - * @global string $cfg['Import']['csv_terminated'] - */ -$cfg['Import']['csv_terminated'] = ','; - -/** - * @global string $cfg['Import']['csv_enclosed'] - */ -$cfg['Import']['csv_enclosed'] = '"'; - -/** - * @global string $cfg['Import']['csv_escaped'] - */ -$cfg['Import']['csv_escaped'] = '"'; - -/** - * @global string $cfg['Import']['csv_new_line'] - */ -$cfg['Import']['csv_new_line'] = 'auto'; - -/** - * @global string $cfg['Import']['csv_columns'] - */ -$cfg['Import']['csv_columns'] = ''; - -/** - * @global string $cfg['Import']['csv_col_names'] - */ -$cfg['Import']['csv_col_names'] = false; - -/** - * @global boolean $cfg['Import']['ldi_replace'] - */ -$cfg['Import']['ldi_replace'] = false; - -/** - * @global boolean $cfg['Import']['ldi_ignore'] - */ -$cfg['Import']['ldi_ignore'] = false; - -/** - * @global string $cfg['Import']['ldi_terminated'] - */ -$cfg['Import']['ldi_terminated'] = ';'; - -/** - * @global string $cfg['Import']['ldi_enclosed'] - */ -$cfg['Import']['ldi_enclosed'] = '"'; - -/** - * @global string $cfg['Import']['ldi_escaped'] - */ -$cfg['Import']['ldi_escaped'] = '\\'; - -/** - * @global string $cfg['Import']['ldi_new_line'] - */ -$cfg['Import']['ldi_new_line'] = 'auto'; - -/** - * @global string $cfg['Import']['ldi_columns'] - */ -$cfg['Import']['ldi_columns'] = ''; - -/** - * 'auto' for auto-detection, true or false for forcing - * - * @global string $cfg['Import']['ldi_local_option'] - */ -$cfg['Import']['ldi_local_option'] = 'auto'; - -/** - * @global string $cfg['Import']['ods_col_names'] - */ -$cfg['Import']['ods_col_names'] = false; - -/** - * @global string $cfg['Import']['ods_empty_rows'] - */ -$cfg['Import']['ods_empty_rows'] = true; - -/** - * @global string $cfg['Import']['ods_recognize_percentages'] - */ -$cfg['Import']['ods_recognize_percentages'] = true; - -/** - * @global string $cfg['Import']['ods_recognize_currency'] - */ -$cfg['Import']['ods_recognize_currency'] = true; - -/******************************************************************************* - * Schema export defaults -*/ -$cfg['Schema'] = []; - -/** - * pdf/eps/dia/svg - * - * @global string $cfg['Schema']['format'] -*/ -$cfg['Schema']['format'] = 'pdf'; - -/** - * @global string $cfg['Schema']['pdf_show_color'] - */ -$cfg['Schema']['pdf_show_color'] = true; - -/** - * @global string $cfg['Schema']['pdf_show_keys'] - */ -$cfg['Schema']['pdf_show_keys'] = false; - -/** - * @global string $cfg['Schema']['pdf_all_tables_same_width'] - */ -$cfg['Schema']['pdf_all_tables_same_width'] = false; - -/** - * L/P - * - * @global string $cfg['Schema']['pdf_orientation'] - */ -$cfg['Schema']['pdf_orientation'] = 'L'; - -/** - * @global string $cfg['Schema']['pdf_paper'] - */ -$cfg['Schema']['pdf_paper'] = 'A4'; - -/** - * @global string $cfg['Schema']['pdf_show_grid'] - */ -$cfg['Schema']['pdf_show_grid'] = false; - -/** - * @global string $cfg['Schema']['pdf_with_doc'] - */ -$cfg['Schema']['pdf_with_doc'] = true; - -/** - * @global string $cfg['Schema']['pdf_table_order'] - */ -$cfg['Schema']['pdf_table_order'] = ''; - -/** - * @global string $cfg['Schema']['dia_show_color'] - */ -$cfg['Schema']['dia_show_color'] = true; - -/** - * @global string $cfg['Schema']['dia_show_keys'] - */ -$cfg['Schema']['dia_show_keys'] = false; - -/** - * L/P - * - * @global string $cfg['Schema']['dia_orientation'] - */ -$cfg['Schema']['dia_orientation'] = 'L'; - -/** - * @global string $cfg['Schema']['dia_paper'] - */ -$cfg['Schema']['dia_paper'] = 'A4'; - -/** - * @global string $cfg['Schema']['eps_show_color'] - */ -$cfg['Schema']['eps_show_color'] = true; - -/** - * @global string $cfg['Schema']['eps_show_keys'] - */ -$cfg['Schema']['eps_show_keys'] = false; - -/** - * @global string $cfg['Schema']['eps_all_tables_same_width'] - */ -$cfg['Schema']['eps_all_tables_same_width'] = false; - -/** - * L/P - * - * @global string $cfg['Schema']['eps_orientation'] - */ -$cfg['Schema']['eps_orientation'] = 'L'; - -/** - * @global string $cfg['Schema']['svg_show_color'] - */ -$cfg['Schema']['svg_show_color'] = true; - -/** - * @global string $cfg['Schema']['svg_show_keys'] - */ -$cfg['Schema']['svg_show_keys'] = false; - -/** - * @global string $cfg['Schema']['svg_all_tables_same_width'] - */ -$cfg['Schema']['svg_all_tables_same_width'] = false; - -/******************************************************************************* - * PDF options - */ - -/** - * @global array $cfg['PDFPageSizes'] - */ -$cfg['PDFPageSizes'] = [ - 'A3', - 'A4', - 'A5', - 'letter', - 'legal', -]; - -/** - * @global string $cfg['PDFDefaultPageSize'] - */ -$cfg['PDFDefaultPageSize'] = 'A4'; - - -/******************************************************************************* - * Language and character set conversion settings - */ - -/** - * Default language to use, if not browser-defined or user-defined - * - * @global string $cfg['DefaultLang'] - */ -$cfg['DefaultLang'] = 'en'; - -/** - * Default connection collation - * - * @global string $cfg['DefaultConnectionCollation'] - */ -$cfg['DefaultConnectionCollation'] = 'utf8mb4_unicode_ci'; - -/** - * Force: always use this language, e.g. 'en' - * - * @global string $cfg['Lang'] - */ -$cfg['Lang'] = ''; - -/** - * Regular expression to limit listed languages, e.g. '^(cs|en)' for Czech and - * English only - * - * @global string $cfg['FilterLanguages'] - */ -$cfg['FilterLanguages'] = ''; - -/** - * You can select here which functions will be used for character set conversion. - * Possible values are: - * auto - automatically use available one (first is tested iconv, then - * recode) - * iconv - use iconv or libiconv functions - * recode - use recode_string function - * mb - use mbstring extension - * none - disable encoding conversion - * - * @global string $cfg['RecodingEngine'] - */ -$cfg['RecodingEngine'] = 'auto'; - -/** - * Specify some parameters for iconv used in character set conversion. See iconv - * documentation for details: - * https://www.gnu.org/savannah-checkouts/gnu/libiconv/documentation/libiconv-1.15/iconv_open.3.html - * - * @global string $cfg['IconvExtraParams'] - */ -$cfg['IconvExtraParams'] = '//TRANSLIT'; - -/** - * Available character sets for MySQL conversion. currently contains all which could - * be found in lang/* files and few more. - * Character sets will be shown in same order as here listed, so if you frequently - * use some of these move them to the top. - * - * @global array $cfg['AvailableCharsets'] - */ -$cfg['AvailableCharsets'] = [ - 'iso-8859-1', - 'iso-8859-2', - 'iso-8859-3', - 'iso-8859-4', - 'iso-8859-5', - 'iso-8859-6', - 'iso-8859-7', - 'iso-8859-8', - 'iso-8859-9', - 'iso-8859-10', - 'iso-8859-11', - 'iso-8859-12', - 'iso-8859-13', - 'iso-8859-14', - 'iso-8859-15', - 'windows-1250', - 'windows-1251', - 'windows-1252', - 'windows-1256', - 'windows-1257', - 'koi8-r', - 'big5', - 'gb2312', - 'utf-16', - 'utf-8', - 'utf-7', - 'x-user-defined', - 'euc-jp', - 'ks_c_5601-1987', - 'tis-620', - 'SHIFT_JIS', - 'SJIS', - 'SJIS-win', -]; - - -/******************************************************************************* - * Customization & design - * - * The graphical settings are now located in themes/theme-name/scss/_variables.scss - */ - -/** - * enable the left panel pointer - * - * @global boolean $cfg['NavigationTreePointerEnable'] - */ -$cfg['NavigationTreePointerEnable'] = true; - -/** - * enable the browse pointer - * - * @global boolean $cfg['BrowsePointerEnable'] - */ -$cfg['BrowsePointerEnable'] = true; - -/** - * enable the browse marker - * - * @global boolean $cfg['BrowseMarkerEnable'] - */ -$cfg['BrowseMarkerEnable'] = true; - -/** - * textarea size (columns) in edit mode - * (this value will be emphasized (*2) for SQL - * query textareas and (*1.25) for query window) - * - * @global integer $cfg['TextareaCols'] - */ -$cfg['TextareaCols'] = 40; - -/** - * textarea size (rows) in edit mode - * - * @global integer $cfg['TextareaRows'] - */ -$cfg['TextareaRows'] = 15; - -/** - * double size of textarea size for LONGTEXT columns - * - * @global boolean $cfg['LongtextDoubleTextarea'] - */ -$cfg['LongtextDoubleTextarea'] = true; - -/** - * auto-select when clicking in the textarea of the query-box - * - * @global boolean $cfg['TextareaAutoSelect'] - */ -$cfg['TextareaAutoSelect'] = false; - -/** - * textarea size (columns) for CHAR/VARCHAR - * - * @global integer $cfg['CharTextareaCols'] - */ -$cfg['CharTextareaCols'] = 40; - -/** - * textarea size (rows) for CHAR/VARCHAR - * - * @global integer $cfg['CharTextareaRows'] - */ -$cfg['CharTextareaRows'] = 7; - -/** - * Max field data length in browse mode for all non-numeric fields - * - * @global integer $cfg['LimitChars'] - */ -$cfg['LimitChars'] = 50; - -/** - * Where to show the edit/copy/delete links in browse mode - * Possible values are 'left', 'right', 'both' and 'none'. - * - * @global string $cfg['RowActionLinks'] - */ -$cfg['RowActionLinks'] = 'left'; - -/** - * Whether to show row links (Edit, Copy, Delete) and checkboxes for - * multiple row operations even when the selection does not have a unique key. - * - * @global boolean $cfg['RowActionLinksWithoutUnique'] - */ -$cfg['RowActionLinksWithoutUnique'] = false; - -/** - * Default sort order by primary key. - * - * @global string $cfg['TablePrimaryKeyOrder'] - */ -$cfg['TablePrimaryKeyOrder'] = 'NONE'; - -/** - * remember the last way a table sorted - * - * @global string $cfg['RememberSorting'] - */ -$cfg['RememberSorting'] = true; - -/** - * shows column comments in 'browse' mode. - * - * @global boolean $cfg['ShowBrowseComments'] - */ -$cfg['ShowBrowseComments'] = true; - -/** - * shows column comments in 'table property' mode. - * - * @global boolean $cfg['ShowPropertyComments'] - */ -$cfg['ShowPropertyComments'] = true; - -/** - * repeat header names every X cells? (0 = deactivate) - * - * @global integer $cfg['RepeatCells'] - */ -$cfg['RepeatCells'] = 100; - -/** - * Set to true if you want DB-based query history.If false, this utilizes - * JS-routines to display query history (lost by window close) - * - * @global boolean $cfg['QueryHistoryDB'] - */ -$cfg['QueryHistoryDB'] = false; - -/** - * When using DB-based query history, how many entries should be kept? - * - * @global integer $cfg['QueryHistoryMax'] - */ -$cfg['QueryHistoryMax'] = 25; - -/** - * Use MIME-Types (stored in column comments table) for - * - * @global boolean $cfg['BrowseMIME'] - */ -$cfg['BrowseMIME'] = true; - -/** - * When approximate count < this, PMA will get exact count for table rows. - * - * @global integer $cfg['MaxExactCount'] - */ -$cfg['MaxExactCount'] = 50000; - -/** - * Zero means that no row count is done for views; see the doc - * - * @global integer $cfg['MaxExactCountViews'] - */ -$cfg['MaxExactCountViews'] = 0; - -/** - * Sort table and database in natural order - * - * @global boolean $cfg['NaturalOrder'] - */ -$cfg['NaturalOrder'] = true; - -/** - * Initial state for sliders - * (open | closed | disabled) - * - * @global string $cfg['InitialSlidersState'] - */ -$cfg['InitialSlidersState'] = 'closed'; - -/** - * User preferences: disallow these settings - * For possible setting names look in libraries/config/user_preferences.forms.php - * - * @global array $cfg['UserprefsDisallow'] - */ -$cfg['UserprefsDisallow'] = []; - -/** - * User preferences: enable the Developer tab - */ -$cfg['UserprefsDeveloperTab'] = false; - -/******************************************************************************* - * Window title settings - */ - -/** - * title of browser window when a table is selected - * - * @global string $cfg['TitleTable'] - */ -$cfg['TitleTable'] = '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ / @TABLE@ | @PHPMYADMIN@'; - -/** - * title of browser window when a database is selected - * - * @global string $cfg['TitleDatabase'] - */ -$cfg['TitleDatabase'] = '@HTTP_HOST@ / @VSERVER@ / @DATABASE@ | @PHPMYADMIN@'; - -/** - * title of browser window when a server is selected - * - * @global string $cfg['TitleServer'] - */ -$cfg['TitleServer'] = '@HTTP_HOST@ / @VSERVER@ | @PHPMYADMIN@'; - -/** - * title of browser window when nothing is selected - * - * @global string $cfg['TitleDefault'] - */ -$cfg['TitleDefault'] = '@HTTP_HOST@ | @PHPMYADMIN@'; - - -/******************************************************************************* - * theme manager - */ - -/** - * if you want to use selectable themes and if ThemesPath not empty - * set it to true, else set it to false (default is false); - * - * @global boolean $cfg['ThemeManager'] - */ -$cfg['ThemeManager'] = true; - -/** - * set up default theme, you can set up here an valid - * path to themes or 'original' for the original pma-theme - * - * @global string $cfg['ThemeDefault'] - */ -$cfg['ThemeDefault'] = 'pmahomme'; - -/** - * allow different theme for each configured server - * - * @global boolean $cfg['ThemePerServer'] - */ -$cfg['ThemePerServer'] = false; - - -/** - * Default query for table - * - * @global string $cfg['DefaultQueryTable'] - */ -$cfg['DefaultQueryTable'] = 'SELECT * FROM @TABLE@ WHERE 1'; - -/** - * Default query for database - * - * @global string $cfg['DefaultQueryDatabase'] - */ -$cfg['DefaultQueryDatabase'] = ''; - - -/******************************************************************************* - * SQL Query box settings - * These are the links display in all of the SQL Query boxes - * - * @global array $cfg['SQLQuery'] - */ -$cfg['SQLQuery'] = []; - -/** - * Display an "Edit" link on the results page to change a query - * - * @global boolean $cfg['SQLQuery']['Edit'] - */ -$cfg['SQLQuery']['Edit'] = true; - -/** - * Display an "Explain SQL" link on the results page - * - * @global boolean $cfg['SQLQuery']['Explain'] - */ -$cfg['SQLQuery']['Explain'] = true; - -/** - * Display a "Create PHP code" link on the results page to wrap a query in PHP - * - * @global boolean $cfg['SQLQuery']['ShowAsPHP'] - */ -$cfg['SQLQuery']['ShowAsPHP'] = true; - -/** - * Display a "Refresh" link on the results page - * - * @global boolean $cfg['SQLQuery']['Refresh'] - */ -$cfg['SQLQuery']['Refresh'] = true; - -/** - * Enables autoComplete for table & column names in SQL queries - * - * default = 'true' - */ -$cfg['EnableAutocompleteForTablesAndColumns'] = true; - - -/******************************************************************************* - * Web server upload/save/import directories - */ - -/** - * Directory for uploaded files that can be executed by phpMyAdmin. - * For example './upload'. Leave empty for no upload directory support. - * Use %u for username inclusion. - * - * @global string $cfg['UploadDir'] - */ -$cfg['UploadDir'] = ''; - -/** - * Directory where phpMyAdmin can save exported data on server. - * For example './save'. Leave empty for no save directory support. - * Use %u for username inclusion. - * - * @global string $cfg['SaveDir'] - */ -$cfg['SaveDir'] = ''; - -/** - * Directory where phpMyAdmin can save temporary files. - * - * @global string $cfg['TempDir'] - */ -if (defined('TEMP_DIR')) { - $cfg['TempDir'] = TEMP_DIR; -} else { - $cfg['TempDir'] = ROOT_PATH . 'tmp' . DIRECTORY_SEPARATOR; -} - -/** - * Misc. settings - */ - -/** - * Is GD >= 2 available? Set to yes/no/auto. 'auto' does auto-detection, - * which is the only safe way to determine GD version. - * - * @global string $cfg['GD2Available'] - */ -$cfg['GD2Available'] = 'auto'; - -/** - * Lists proxy IP and HTTP header combinations which are trusted for IP allow/deny - * - * @global array $cfg['TrustedProxies'] - */ -$cfg['TrustedProxies'] = []; - -/** - * We normally check the permissions on the configuration file to ensure - * it's not world writable. However, phpMyAdmin could be installed on - * a NTFS filesystem mounted on a non-Windows server, in which case the - * permissions seems wrong but in fact cannot be detected. In this case - * a sysadmin would set the following to false. - */ -$cfg['CheckConfigurationPermissions'] = true; - -/** - * Limit for length of URL in links. When length would be above this limit, it - * is replaced by form with button. - * This is required as some web servers (IIS) have problems with long URLs. - * The recommended limit is 2000 - * (see https://www.boutell.com/newfaq/misc/urllength.html) but we put - * 1000 to accommodate Suhosin, see bug #3358750. - */ -$cfg['LinkLengthLimit'] = 1000; - -/** - * Additional string to allow in CSP headers. - */ - $cfg['CSPAllow'] = ''; - -/** - * Disable the table maintenance mass operations, like optimizing or - * repairing the selected tables of a database. An accidental execution - * of such a maintenance task can enormously slow down a bigger database. - */ -$cfg['DisableMultiTableMaintenance'] = false; - -/** - * Whether or not to query the user before sending the error report to - * the phpMyAdmin team when a JavaScript error occurs - * - * Available options - * (ask | always | never) - * - * @global string $cfg['SendErrorReports'] - */ -$cfg['SendErrorReports'] = 'ask'; - -/** - * Whether Enter or Ctrl+Enter executes queries in the console. - * - * @global boolean $cfg['ConsoleEnterExecutes'] - */ -$cfg['ConsoleEnterExecutes'] = false; - -/** - * Zero Configuration mode. - * - * @global boolean $cfg['ZeroConf'] - */ -$cfg['ZeroConf'] = true; - -/******************************************************************************* - * Developers ONLY! - * - * @global array $cfg['DBG'] - */ -$cfg['DBG'] = []; - -/** - * Output executed queries and their execution times - * - * @global boolean $cfg['DBG']['sql'] - */ -$cfg['DBG']['sql'] = false; - -/** - * Log executed queries and their execution times to syslog - * - * @global boolean $cfg['DBG']['sqllog'] - */ -$cfg['DBG']['sqllog'] = false; - -/** - * Enable to let server present itself as demo server. - * - * @global boolean $cfg['DBG']['demo'] - */ -$cfg['DBG']['demo'] = false; - -/** - * Enable Simple two-factor authentication - * - * @global boolean $cfg['DBG']['simple2fa'] - */ -$cfg['DBG']['simple2fa'] = false; - -/** - * Sets the working environment - * - * This only needs to be changed when you are developing phpMyAdmin itself. - * The development mode may display debug information in some places. - * - * Possible values are 'production' or 'development' - */ -$cfg['environment'] = 'production'; - -/******************************************************************************* - * MySQL settings - */ - -/** - * Default functions for above defined groups - * - * @global array $cfg['DefaultFunctions'] - */ -$cfg['DefaultFunctions'] = [ - 'FUNC_CHAR' => '', - 'FUNC_DATE' => '', - 'FUNC_NUMBER' => '', - 'FUNC_SPATIAL' => 'GeomFromText', - 'FUNC_UUID' => 'UUID', - 'first_timestamp' => 'NOW', -]; - -/** - * Max rows retrieved for zoom search - */ -$cfg['maxRowPlotLimit'] = 500; - -/** - * Show Git revision if applicable - * - * @global boolean $cfg['ShowGitRevision'] - */ -$cfg['ShowGitRevision'] = true; - -/** - * MySQL minimal version required - * - * @global array $cfg['MysqlMinVersion'] - */ -$cfg['MysqlMinVersion'] = [ - 'internal' => 50500, - 'human' => '5.5.0', -]; - -/** - * Disable shortcuts - * - * @global array $cfg['DisableShortcutKeys'] - */ -$cfg['DisableShortcutKeys'] = false; - -/** - * Console configuration - * - * This is mostly meant for user preferences. - */ -$cfg['Console'] = [ - 'StartHistory' => false, - 'AlwaysExpand' => false, - 'CurrentQuery' => true, - 'EnterExecutes' => false, - 'DarkTheme' => false, - 'Mode' => 'info', - 'Height' => 92, - 'GroupQueries' => false, - 'OrderBy' => 'exec', - 'Order' => 'asc', -]; - - -/******************************************************************************* - * Default options for transformations - */ - -/** - * Initialize default transformations array - * - * @global array $cfg['DefaultTransformations'] - */ -$cfg['DefaultTransformations'] = []; - -/** - * Default transformations for Substring - * - * @global array $cfg['DefaultTransformations']['Substring'] - */ -$cfg['DefaultTransformations']['Substring'] = [ - 0, - 'all', - '…', -]; - -/** - * Default transformations for Bool2Text - * - * @global array $cfg['DefaultTransformations']['Bool2Text'] - */ -$cfg['DefaultTransformations']['Bool2Text'] = [ - 'T', - 'F', -]; - -/** - * Default transformations for External - * - * @global array $cfg['DefaultTransformations']['External'] - */ -$cfg['DefaultTransformations']['External'] = [ - 0, - '-f /dev/null -i -wrap -q', - 1, - 1, -]; - -/** - * Default transformations for PreApPend - * - * @global array $cfg['DefaultTransformations']['PreApPend'] - */ -$cfg['DefaultTransformations']['PreApPend'] = [ - '', - '', -]; - -/** - * Default transformations for Hex - * - * @global array $cfg['DefaultTransformations']['Hex'] - */ -$cfg['DefaultTransformations']['Hex'] = ['2']; - -/** - * Default transformations for DateFormat - * - * @global array $cfg['DefaultTransformations']['DateFormat'] - */ -$cfg['DefaultTransformations']['DateFormat'] = [ - 0, - '', - 'local', -]; - -/** - * Set default for FirstDayOfCalendar - * - * @global integer $cfg['FirstDayOfCalendar'] - */ -$cfg['FirstDayOfCalendar'] = 0; - -/** - * Default transformations for Inline - * - * @global array $cfg['DefaultTransformations']['Inline'] - */ -$cfg['DefaultTransformations']['Inline'] = [ - '100', - 100, -]; -$cfg['DefaultTransformations']['Inline']['wrapper_link'] = null; -$cfg['DefaultTransformations']['Inline']['wrapper_params'] = []; - -/** - * Default transformations for TextImageLink - * - * @global array $cfg['DefaultTransformations']['TextImageLink'] - */ -$cfg['DefaultTransformations']['TextImageLink'] = [ - null, - 100, - 50, -]; - -/** - * Default transformations for TextLink - * - * @global array $cfg['DefaultTransformations']['TextLink'] - */ -$cfg['DefaultTransformations']['TextLink'] = [ - null, - null, - null, -]; diff --git a/Sources/php_script/script/phpMyAdmin/libraries/routes.php b/Sources/php_script/script/phpMyAdmin/libraries/routes.php deleted file mode 100644 index de2f959..0000000 --- a/Sources/php_script/script/phpMyAdmin/libraries/routes.php +++ /dev/null @@ -1,286 +0,0 @@ -addRoute(['GET', 'POST'], '[/]', HomeController::class); - $routes->addRoute(['GET', 'POST'], '/browse-foreigners', BrowseForeignersController::class); - $routes->get('/changelog', ChangeLogController::class); - $routes->addRoute(['GET', 'POST'], '/check-relations', CheckRelationsController::class); - $routes->post('/collation-connection', CollationConnectionController::class); - $routes->post('/columns', ColumnController::class); - $routes->addGroup('/config', static function (RouteCollector $routes): void { - $routes->post('/get', Config\GetConfigController::class); - $routes->post('/set', Config\SetConfigController::class); - }); - $routes->addGroup('/database', static function (RouteCollector $routes): void { - $routes->addGroup('/central-columns', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Database\CentralColumnsController::class); - $routes->post('/populate', Database\CentralColumns\PopulateColumnsController::class); - }); - $routes->get('/data-dictionary', Database\DataDictionaryController::class); - $routes->addRoute(['GET', 'POST'], '/designer', Database\DesignerController::class); - $routes->addRoute(['GET', 'POST'], '/events', Database\EventsController::class); - $routes->addRoute(['GET', 'POST'], '/export', Database\ExportController::class); - $routes->addRoute(['GET', 'POST'], '/import', Database\ImportController::class); - $routes->addGroup('/multi-table-query', static function (RouteCollector $routes): void { - $routes->get('', Database\MultiTableQueryController::class); - $routes->get('/tables', Database\MultiTableQuery\TablesController::class); - $routes->post('/query', Database\MultiTableQuery\QueryController::class); - }); - $routes->addGroup('/operations', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Database\OperationsController::class); - $routes->post('/collation', Database\Operations\CollationController::class); - }); - $routes->addRoute(['GET', 'POST'], '/qbe', Database\QueryByExampleController::class); - $routes->addRoute(['GET', 'POST'], '/routines', Database\RoutinesController::class); - $routes->addRoute(['GET', 'POST'], '/search', Database\SearchController::class); - $routes->addGroup('/sql', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Database\SqlController::class); - $routes->post('/autocomplete', Database\SqlAutoCompleteController::class); - $routes->post('/format', Database\SqlFormatController::class); - }); - $routes->addGroup('/structure', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Database\StructureController::class); - $routes->post('/add-prefix', Database\Structure\AddPrefixController::class); - $routes->post('/add-prefix-table', Database\Structure\AddPrefixTableController::class); - $routes->addGroup('/central-columns', static function (RouteCollector $routes): void { - $routes->post('/add', Database\Structure\CentralColumns\AddController::class); - $routes->post('/make-consistent', Database\Structure\CentralColumns\MakeConsistentController::class); - $routes->post('/remove', Database\Structure\CentralColumns\RemoveController::class); - }); - $routes->post('/change-prefix-form', Database\Structure\ChangePrefixFormController::class); - $routes->post('/copy-form', Database\Structure\CopyFormController::class); - $routes->post('/copy-table', Database\Structure\CopyTableController::class); - $routes->post('/copy-table-with-prefix', Database\Structure\CopyTableWithPrefixController::class); - $routes->post('/drop-form', Database\Structure\DropFormController::class); - $routes->post('/drop-table', Database\Structure\DropTableController::class); - $routes->post('/empty-form', Database\Structure\EmptyFormController::class); - $routes->post('/empty-table', Database\Structure\EmptyTableController::class); - $routes->post('/favorite-table', Database\Structure\FavoriteTableController::class); - $routes->addRoute(['GET', 'POST'], '/real-row-count', Database\Structure\RealRowCountController::class); - $routes->post('/replace-prefix', Database\Structure\ReplacePrefixController::class); - $routes->post('/show-create', Database\Structure\ShowCreateController::class); - }); - $routes->addRoute(['GET', 'POST'], '/tracking', Database\TrackingController::class); - $routes->addRoute(['GET', 'POST'], '/triggers', Database\TriggersController::class); - }); - $routes->post('/databases', DatabaseController::class); - $routes->addRoute(['GET', 'POST'], '/error-report', ErrorReportController::class); - $routes->addGroup('/export', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Export\ExportController::class); - $routes->get('/check-time-out', Export\CheckTimeOutController::class); - $routes->post('/tables', Export\TablesController::class); - $routes->addGroup('/template', static function (RouteCollector $routes): void { - $routes->post('/create', Export\Template\CreateController::class); - $routes->post('/delete', Export\Template\DeleteController::class); - $routes->post('/load', Export\Template\LoadController::class); - $routes->post('/update', Export\Template\UpdateController::class); - }); - }); - $routes->addRoute(['GET', 'POST'], '/gis-data-editor', GisDataEditorController::class); - $routes->addRoute(['GET', 'POST'], '/git-revision', GitInfoController::class); - $routes->addGroup('/import', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Import\ImportController::class); - $routes->post('/simulate-dml', Import\SimulateDmlController::class); - }); - $routes->addRoute(['GET', 'POST'], '/import-status', Import\StatusController::class); - $routes->get('/license', LicenseController::class); - $routes->addRoute(['GET', 'POST'], '/lint', LintController::class); - $routes->addRoute(['GET', 'POST'], '/logout', LogoutController::class); - $routes->addRoute(['GET', 'POST'], '/navigation', NavigationController::class); - $routes->addRoute(['GET', 'POST'], '/normalization', NormalizationController::class); - $routes->get('/phpinfo', PhpInfoController::class); - $routes->addGroup('/preferences', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '/export', Preferences\ExportController::class); - $routes->addRoute(['GET', 'POST'], '/features', Preferences\FeaturesController::class); - $routes->addRoute(['GET', 'POST'], '/import', Preferences\ImportController::class); - $routes->addRoute(['GET', 'POST'], '/main-panel', Preferences\MainPanelController::class); - $routes->addRoute(['GET', 'POST'], '/manage', Preferences\ManageController::class); - $routes->addRoute(['GET', 'POST'], '/navigation', Preferences\NavigationController::class); - $routes->addRoute(['GET', 'POST'], '/sql', Preferences\SqlController::class); - $routes->addRoute(['GET', 'POST'], '/two-factor', Preferences\TwoFactorController::class); - }); - $routes->addRoute(['GET', 'POST'], '/recent-table', RecentTablesListController::class); - $routes->addRoute(['GET', 'POST'], '/schema-export', SchemaExportController::class); - $routes->addGroup('/server', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '/binlog', Server\BinlogController::class); - $routes->get('/collations', Server\CollationsController::class); - $routes->addGroup('/databases', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Server\DatabasesController::class); - $routes->post('/create', Server\Databases\CreateController::class); - $routes->post('/destroy', Server\Databases\DestroyController::class); - }); - $routes->addGroup('/engines', static function (RouteCollector $routes): void { - $routes->get('', Server\EnginesController::class); - $routes->get('/{engine}[/{page}]', Server\ShowEngineController::class); - }); - $routes->addRoute(['GET', 'POST'], '/export', Server\ExportController::class); - $routes->addRoute(['GET', 'POST'], '/import', Server\ImportController::class); - $routes->get('/plugins', Server\PluginsController::class); - $routes->addGroup('/privileges', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Server\PrivilegesController::class); - $routes->post('/account-lock', Server\Privileges\AccountLockController::class); - $routes->post('/account-unlock', Server\Privileges\AccountUnlockController::class); - }); - $routes->addRoute(['GET', 'POST'], '/replication', Server\ReplicationController::class); - $routes->addRoute(['GET', 'POST'], '/sql', Server\SqlController::class); - $routes->addGroup('/status', static function (RouteCollector $routes): void { - $routes->get('', Server\Status\StatusController::class); - $routes->get('/advisor', Server\Status\AdvisorController::class); - $routes->addGroup('/monitor', static function (RouteCollector $routes): void { - $routes->get('', Server\Status\MonitorController::class); - $routes->post('/chart', Server\Status\Monitor\ChartingDataController::class); - $routes->post('/slow-log', Server\Status\Monitor\SlowLogController::class); - $routes->post('/general-log', Server\Status\Monitor\GeneralLogController::class); - $routes->post('/log-vars', Server\Status\Monitor\LogVarsController::class); - $routes->post('/query', Server\Status\Monitor\QueryAnalyzerController::class); - }); - $routes->addGroup('/processes', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Server\Status\ProcessesController::class); - $routes->post('/refresh', Server\Status\Processes\RefreshController::class); - $routes->post('/kill/{id:\d+}', Server\Status\Processes\KillController::class); - }); - $routes->get('/queries', Server\Status\QueriesController::class); - $routes->addRoute(['GET', 'POST'], '/variables', Server\Status\VariablesController::class); - }); - $routes->addGroup('/user-groups', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Server\UserGroupsController::class); - $routes->get('/edit-form', Server\UserGroupsFormController::class); - }); - $routes->addGroup('/variables', static function (RouteCollector $routes): void { - $routes->get('', Server\VariablesController::class); - $routes->get('/get/{name}', Server\Variables\GetVariableController::class); - $routes->post('/set/{name}', Server\Variables\SetVariableController::class); - }); - }); - $routes->addGroup('/sql', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Sql\SqlController::class); - $routes->post('/get-relational-values', Sql\RelationalValuesController::class); - $routes->post('/get-enum-values', Sql\EnumValuesController::class); - $routes->post('/get-set-values', Sql\SetValuesController::class); - $routes->get('/get-default-fk-check-value', Sql\DefaultForeignKeyCheckValueController::class); - $routes->post('/set-column-preferences', Sql\ColumnPreferencesController::class); - }); - $routes->addGroup('/table', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '/add-field', Table\AddFieldController::class); - $routes->addGroup('/change', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Table\ChangeController::class); - $routes->post('/rows', Table\ChangeRowsController::class); - }); - $routes->addRoute(['GET', 'POST'], '/chart', Table\ChartController::class); - $routes->addRoute(['GET', 'POST'], '/create', Table\CreateController::class); - $routes->addGroup('/delete', static function (RouteCollector $routes): void { - $routes->post('/confirm', Table\DeleteConfirmController::class); - $routes->post('/rows', Table\DeleteRowsController::class); - }); - $routes->addGroup('/export', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Table\ExportController::class); - $routes->post('/rows', Table\ExportRowsController::class); - }); - $routes->addRoute(['GET', 'POST'], '/find-replace', Table\FindReplaceController::class); - $routes->addRoute(['GET', 'POST'], '/get-field', Table\GetFieldController::class); - $routes->addRoute(['GET', 'POST'], '/gis-visualization', Table\GisVisualizationController::class); - $routes->addRoute(['GET', 'POST'], '/import', Table\ImportController::class); - $routes->addRoute(['GET', 'POST'], '/indexes', Table\IndexesController::class); - $routes->addRoute(['GET', 'POST'], '/indexes/rename', Table\IndexRenameController::class); - $routes->addGroup('/maintenance', static function (RouteCollector $routes): void { - $routes->post('/analyze', Table\Maintenance\AnalyzeController::class); - $routes->post('/check', Table\Maintenance\CheckController::class); - $routes->post('/checksum', Table\Maintenance\ChecksumController::class); - $routes->post('/optimize', Table\Maintenance\OptimizeController::class); - $routes->post('/repair', Table\Maintenance\RepairController::class); - }); - $routes->addGroup('/partition', static function (RouteCollector $routes): void { - $routes->post('/analyze', Table\Partition\AnalyzeController::class); - $routes->post('/check', Table\Partition\CheckController::class); - $routes->post('/drop', Table\Partition\DropController::class); - $routes->post('/optimize', Table\Partition\OptimizeController::class); - $routes->post('/rebuild', Table\Partition\RebuildController::class); - $routes->post('/repair', Table\Partition\RepairController::class); - $routes->post('/truncate', Table\Partition\TruncateController::class); - }); - $routes->addRoute(['GET', 'POST'], '/operations', Table\OperationsController::class); - $routes->addRoute(['GET', 'POST'], '/recent-favorite', Table\RecentFavoriteController::class); - $routes->addRoute(['GET', 'POST'], '/relation', Table\RelationController::class); - $routes->addRoute(['GET', 'POST'], '/replace', Table\ReplaceController::class); - $routes->addRoute(['GET', 'POST'], '/search', Table\SearchController::class); - $routes->addRoute(['GET', 'POST'], '/sql', Table\SqlController::class); - $routes->addGroup('/structure', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '', Table\StructureController::class); - $routes->post('/add-key', Table\Structure\AddKeyController::class); - $routes->post('/browse', Table\Structure\BrowseController::class); - $routes->post('/central-columns-add', Table\Structure\CentralColumnsAddController::class); - $routes->post('/central-columns-remove', Table\Structure\CentralColumnsRemoveController::class); - $routes->addRoute(['GET', 'POST'], '/change', Table\Structure\ChangeController::class); - $routes->post('/drop', Table\DropColumnController::class); - $routes->post('/drop-confirm', Table\DropColumnConfirmationController::class); - $routes->post('/fulltext', Table\Structure\FulltextController::class); - $routes->post('/index', Table\Structure\AddIndexController::class); - $routes->post('/move-columns', Table\Structure\MoveColumnsController::class); - $routes->post('/partitioning', Table\Structure\PartitioningController::class); - $routes->post('/primary', Table\Structure\PrimaryController::class); - $routes->post('/reserved-word-check', Table\Structure\ReservedWordCheckController::class); - $routes->post('/save', Table\Structure\SaveController::class); - $routes->post('/spatial', Table\Structure\SpatialController::class); - $routes->post('/unique', Table\Structure\UniqueController::class); - }); - $routes->addRoute(['GET', 'POST'], '/tracking', Table\TrackingController::class); - $routes->addRoute(['GET', 'POST'], '/triggers', Table\TriggersController::class); - $routes->addRoute(['GET', 'POST'], '/zoom-search', Table\ZoomSearchController::class); - }); - $routes->post('/tables', TableController::class); - $routes->addGroup('/themes', static function (RouteCollector $routes): void { - $routes->get('', ThemesController::class); - $routes->post('/set', ThemeSetController::class); - }); - $routes->addGroup('/transformation', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '/overview', Transformation\OverviewController::class); - $routes->addRoute(['GET', 'POST'], '/wrapper', Transformation\WrapperController::class); - }); - $routes->addRoute(['GET', 'POST'], '/user-password', UserPasswordController::class); - $routes->addRoute(['GET', 'POST'], '/version-check', VersionCheckController::class); - $routes->addGroup('/view', static function (RouteCollector $routes): void { - $routes->addRoute(['GET', 'POST'], '/create', View\CreateController::class); - $routes->addRoute(['GET', 'POST'], '/operations', View\OperationsController::class); - }); -}; diff --git a/Sources/php_script/script/phpMyAdmin/locale/bn/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/bn/LC_MESSAGES/phpmyadmin.mo deleted file mode 100644 index d726a52bc5c9977db07628b96cb7125197a7e8b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 342211 zcmZVH1(X!W{{Q{nnOWRD5Xj>0?(XjHPH=a3mtYAlA&?L(xVr}l8VH`?5C|bafIRO{ ze~aI_=lS=!lh;&rb$M0y%-NrX)y8*3unR42-n7n*abV`R!oMec6uJgdc}~cc$F{< z*2c^@9Mj?tm=DjR(na0ndGRnFmc+Ce8QWuV?1rUr9ahJ`us)XFZRx&2b-;40i3Rsi zCQicScoS3M2TX|(d##?OFpO|DOoBB~_34Pwu%|me1l1qIQ1$;7)&5gh3lr`0ye8NY z+v5=&i`n*j-eBB}(=pcp`T!5&S6Jqt=V^$p;v#Hw$n&OR@UXRWCKe}r2i1?Mj!+g> zN7c6-=D=ZC1lMDFe2PC}!lRy-8xLVMe1pBQ{4viPhr6&JmO1WuDHO)2cnwqI@0bUp zp76X;SPWa@0aU-HIq7+`uoS9(m#_f_PkCN5Y=XLOCq`iL(^l^m7@6<@ERQ3w3LZzz zw?seNd@YQz2-m|%*cM}8XH@$KU@V-8v2iIX-3E+<+feiMxC`G!UH1y(V$3sk{TCRM za5mI+MVwVJI^kySd?(a({Zaij5!GL-UHm4DM))ws#0@Jj z!bveUX2Wz?3{`$x)HwEV=T|y6yYq)J7U$2Q(%r(OnBbhnXUC?5i=p~`fs0?^+=Qy< z0Sw|POn_%GJN}NEp9#-<-WT|j^8&^p{0cQ6!hf-OlNu`#E{|DpCg#L_m=Is$28?pS z*3%BmNca{e!)O<+{^>A+a7j#wtuQZ+#)P;7wI0u6VtkEC7wZyx0Oml=r%tGPOvB8$ z8`ZvtSPDO41eUyP@vTtvrXNnh8CV#opit4{Um>4Ib(l5i*xDPcB z_fYMM^qcLo@lowdh^lW=RJ}5x%FTnHV`)@5El}mON7Z*Q>bh~59Ot6u!DiI;CsFnJ z6;(QT;vwHBV+^HC&F$?@IM1T$ ze+QNRy)*WGD=!sl9_K>kTM>1ABUJj%&S99E@Jv)ax1iD=L6v(MmHx4d|A@*b_5+*8 zDN*5ksOu`A(l>PRol*G=Ma`3$_yw+Y=TD>h>81-mL#6i~TD}QTbzmIMbolV>VR3l|ild#xA})YF`=aT!fJc zZ*lIyJcN&66#Um2dTjj>6Vc0Rr?we5i-*wcw`G{I4 zNnTrjX$sIcGqz6 zjZoKjL5<@uR6mWubT}2&FPkwvUPP^f52*f6_Qu951I8g-5><~{7!%uJBJAzrC!y-G z7&Sk3qUv`NtKbbxjG5nBKBZCZuaByCZ|6`{zm3NPxE$3#+feghw>y6db=`do;tN#! z{zlDi0dU{Hn-=)lltdj%sgfR6lk=&By+z z{u+jA*8)s~8&Lgv2{j(iTzt3}=J!V?)OyK{I$s>sZ}qS~wm{Wm8!FvFR6m|U_16_t zyC0&`y+B?69yL!Qg_-eD@e!Dj{>g-e2-gXO`JaELq4M90%I72|#Y^}FzQCLqm(J~v zrEwkZ!mijk6y|AtT|?FH17^cW;a0!A_!;4%sCir;HGX|i<2wq~p82S8T7$|jMx-#m zKeM6QQyMitYM}CKjsqDq9_Ae(ydy@K|NX{@m|@;D!ck&{`QtqgRgdpb_1}!j=OC8E$EbObHMaF%B}_uN zE#||am=QPQH+U1X;-ENT{&UJ|)P8mvmClQ6p?J-!?cBhoRaNh#%&EzKeqz_l~G>nSh!XU!&&fO4R({bKuf*FQn!8%l5GC&%1`(<0N;Yls@3Ca8JT0o5{pDv=>{SY-@U!eLYQD!q4 zCLk$K#>eT@-;BF`>)_Eyo(x#e%UPlfp~-P zaD0W$vxj*duuhIJ|9j%yc#v?EoMGNVJcTo{Q?4-YI)1>?_-k&vK1H4||K}|6^V;|i z!U)cfMD@#Z7v6wcFXyocK0?ix^!aQaWJ9g{VyJetaPd=6`^!Sq{M?Cs@D!@urSjYT zr#Y4&JR6nIC5*r~sOvxDp{W+;N9`LEQT@3DHEu^x<8=j9&I{a!fr57ZK@6iKZ==TP zZeiOO9-`8Rir9Qih{Xt}#8TM8#V<$A!*!_jw-r_HId}f9i+_%qhf#}K|0O~7TRPM{ zFNRt-eefxcL9NGL#caOxL(R{@sQ#Uf+Q;Ui%KH&DPxhhu;U22Ich0EAZ9OMJt^W$B z^;#D-FFT;}nU1+}8EU;;!r>UTggt*uM5Wt?TE8by*T2Rzn4+ZhUujgoH$#=v4^{t( z&PAyH-H2oHAa-ONDwVQ!|5V2MbsMUjeW>wyg6fx-sCD!jRiA%de9W>I9~Vmyp9r;| z*2fmu63gHL)VM`1XZgiO{qjZphnThuz~ z;ljgE`Au@pL(P|!sCBv*dtiq0b|3v3b>F^^H8Fn$yPr+K=7fJke;=wC=6}Cb4>j+P zquTKtRsJi~cm^uj{K$v(2{%HueyP}X>&u|}y*g^%)kWnq9+mGr)O}->3tvag ztH-GE_=qYmyqdKu7V5f0sD4U|nkU6j*VVvz*c!E7-eVPvSKa!pIck1(LDg?4sy-83 zcs`CJyaILq$WkNBtAQm^^K&MuJ#(-!EQ=Lal-m1>3g--}Pef`kvE_Q?;J6Thf!^{a`>uN|s?N1^7+7F7RSNA=g= zsQQQMSbs-BwYw;4{#L~ZY=lZT2-Q!+Q0<$J+9y|_%D;;$H(_1t*IekYAJqN1JnFjE zsB!6s*>NK3`D_QWEqE7E`~4NvynT%-|062DKs}3(iW-l&sD4X_S`S50>!B2?|7)Pu zX(Lp-+F>^Ag<6-(P}lE5)$125fPY{n{Gz_qzY=O*wnOFf4XV8FQ01*f_0LY!xST@u z_cPRdjoiS}#X-%p6sU2?=q%tYkLrhdsCqX<<=+-lV=q*@=A!y@DXO0~qtfk0wc{ji z!W*di&TMGyT#Ts*Z$Zt!tEl<*7}H>|k$s<$0ad?-sB!IpDsPO7pO516v^VN}0%LXA%k)Hn}7^~W%Ge!M$B4b|UsQS)m# zD*f-M^pBmdQ2X}>oQSFzr2sJK+ zQ0L2_>QmjtH+Hr~UDplOpCeG^&3EzZQS<$P^Bih_yM-E$U{|Y8dQ?7HQR$1L%BzOj zml~n+?S{H9j780hCGPwlR6qQJh4DEmzs%ii-!F>Fry45X)-K!)HD04p_lJe3`Sc@d z-XBNx!zI-Gy@l$(*O&p{V_r<#-NKDg{V*C;p9QFTZbR++mr(QbA!>d`?-Azz+#wSx zJRCJ{i!mcUMO~M;XPEzcO_@;l_3@~AbQCoo&Y;?L1=WswsCD-@*2iEkOWzoEzBTH) z-l%j#Q0sXTs-G64_M4wj{dfpf-X&DO+(3=fW9K_()ZUgp3F>?%)Vwc<>X#CzdNx4y zdmHBvRJu8s78hb6Jcz2tM^yjE>SOgxgGC7!K;_#P)lXAV>6fC$Z3C(vJ5l+cK-K@8 zi@)J~iWP`|k7{SxzSfSasC=7aI_!z+pZTbM`w>;%E{woasP*y`)y_Alc^>L##fHoHgC~Ca7}TqT16N_1rNA zRnA1z{yrU*ZZm5CJ%s9yW2p6h2{pb?QT-4;(8^DUnm;K}>GPxNSr*mKTBv?%hMEVx zQTYtT2%Lkuek-c}XI=Oj79so!bzjao$m*2`)$RhQc9cYwR}TIDMYXe)3->~mKN7WH z&2#5BqUOUvRR7;c&4*{GaS0o2^^J-;A0KOBQdId}Q0?uD+E+%Su3v^~$7WP{`%vTf zE2=-KGO&_Zx*=o8&K^%gc_gYsQx^Ss_$h~J#V`BKb(J} z#_Js_zi2~kKl}m}Ul_HoR7Ra|imGQ%tc^oa?L3d_=Ub@uK1E$0eVARJ3{{V;&b+8` zEsDCn9%>(HgDPh+YTf*Vn%|ePCjNs;Uvaqo+^as;BfK6pZz7Kf^G@RzsBw6T8pqd| z8y`O_Ek<0e$Ok5T>Tjk0|`919T4jv9v!sC0u+^JqG%oTV;)4QhP%qQ>_G zro(%v^wCG#cz=!>pTem8%DQkPRDZW|;l3_B95qj7qSo66)cx-mD&M=P{oxf>#3Ezt zd(5$@dYnVuHy)$b!GEZ7V~w@=)R>oWe$=>iLFGRL)vxnV`@wot{kEX;JBBL%I;xzf zsQN`7XZ?@@HJ>x0(ig{;SR32mX8Z<|j<s4sQmMz%CCazm&T~)tS?dXconK$w^052$oT;?5{@&)t}BEZ|4OL*+M?3;M%8m1 zYTuoSs?TgxI~Jg>+leaY5^8zsH+u@u^YyrAO^|*--PUGHPD6 z#o9O+Q{q|FKJgOOuL-Bwc%;VcgtKE-Y>ruQ3aVdspxV0+)8Hf2eiVDU?Kc@v?Wo{v z?Hr0~=X_Lo+g$t+R6pHz{)uYue^?4*&#-pZLbba!YF_q7t*2e6e*GCWo>x)np1Sja znO0r`RKBTD{gMkiVii>SEvWuH>CRtA_2+Bn2h=9YQ1kv0s=Pa>{`d>EzQew<_OwRLldhN+d!X)LbFmg)MeV;?X4^VxgPjQv z$Aw(@6g7^M=7srx2ecE55l%ecJ{Q%)^n@e64)a=J1=P5Hj~efb*cAic*yp?+*pKi6 z9Ek}Q*t(dD8vnDn6(6F;dFev?9J&ub3u8Sjvi#dD4)aQIekxAEGguy*F0t=%R-)$B zWmLQ0V?Io^)P7FX5VbGtN6mxZun(qOX5Y8ZMXlHCxDXRAw|>}!V+h|x<==6IeZHQG z*$DsYjJndsxd1jJz6RFCbyx|*zqQZJHLwNY?=eXGVyv?7dEKAVH~Re&!Fb%dsMlJez5Uvi5jP$QRDdrGhqI;_IaTNrXsuu z7vX+XJ}rKKt=#_}TtTVyOMD z6>9!|jq0z{I21pi=F8wSmTnFz-Otzn!_HdyjZpKjKmLfLwSmi`Gw5RP%d)?rp`MEFb8{&obFKGsEhekqFD$7*9@?1oxz z<1ic#q3&lVQ0w6as$RiMW@=1HxU{n^YTl1S&C3l~5r21Pzij)+08~F7Lan3ssQH}w zitVRO@e1LksPP|o)#m9BIFs;ERJ$7e8s;s*%{T+=T?_M0;RC#*`0Mt4-Mrsy-_CZ! z_VGEW@=s$948LjplMl82hGH+~d+b~G`DD~>tIw}EoAaCQ*#1=UuFa2m7=!qosD1Dl z>bdO&YF%W#XY+LgMkc%j)sNp{5RYLLJmta{F+}((YCYXR&7=6gTYr>u_QwG6Yf$T8 zEf&D^f7tl7z&M24q2_%*)OgKCwR%xmLJ>fN|@js8T@I9(s(I43QO@P`@N}<+GJ5)X9pvpgrns4t=^D)*#oA2qc4&l-m z8|R_c|97bLM^XKH4RzgJ=f9|Q@gG@#=R&QcTBvq?iK<_J)Vdmhy3a2{_3K5{_*_Bd ze;qY0_b>rIMD6<@QT>tUv7IlBN?!u?TvY+p|Mf5-_D1a!6H(){0+oKV3-3my{~1-z z6D);cPwcs+4C=Xa3`XEw)b-m?{jtw^0pk&VfST|BVk*r2)b@dTsBs#D>esJOg(^mBOf4ACHZR=(N?jZav-o=)$Z67cDkIk98E;#Prx7*_OQ}=#L|+o!_JSXFIAN_M_4r zMx{H7N_W=lj2G2kAL8NY)-Ffe!fMuKVewF z-zSTr!rieO&O`Nolt93*|3OSi_&K)3xWRyT5__S>y?7|#-*<;PSEA^qX>lPo$AhSHQ%4H;?Vg1?A2V{m|2{7_b|gFzOXDk4`T|h`{{8VgY)|+cY917f zYVGNOUlN{1}9?^4u$yAics&!W;@MD^o+RK8JT1^jsy4|QEq)OyYA!Z}g%rxa@6>58h? zSd5HQQ02^a@taWl$PUy#a0WF$?xMy$7(3ua;1`$yOQ6QRBUZ#2sC9A;mCqlje*G7t zV(T~oe}C_Ss>fhd`cbHUnTm;U1*#o8F*@!?)%P^2-4{{$-9TOc0F~}97yi$Mqs6uS z5~23%tf+RC!|*Vk*RU$#7V)hAenj=}UMzvPQRSwJZ}rWD>aU!rc~~9S<6zW!$(kVG z-%l!_+S4A@&LOCBN2BUJ54DdjL$zl!>b|!J)sEAsa<8J=cN_IQ@C5yFPiXnZ!!E>s zhW>Lh>bgT%6HlS)nIe(Zr!rP1+!Fc7BC%PvI_@9Tq!y$wppz6`?vw*h*d*Wt{ zpVZDDN9A8WS-}6jx%rrzaP-du{_k59$6)#om%U-Q=t_|Fraa46y3xEG7mvi0~LwSNt) zZR_j-j$vM8trPH{S2ooRc&#`ewO+t0g`H93who))bF7Bd>j(VjnnjqGaES(XeP2|2 zPhlerZy4~u-)n)L2p>oFOP)r|SNslD?>D#&GdB+S-;dpMW^H2S^~Lto^Dx#TUDjsS zuHnuS%>&*t;=LB^>!e$b=Lv3XY2!JjRlxh6@Fg68BU@X4zen|V#x_=uQka2oAJlzd z5o+95qwe>|F#>-@)%#y8f!W&Hcy&XK|459DdtLk)Oi%a@D!*v$0{-{dnNatwWvKhs zHjIaRQS0J7w#FBj2kW-Cbv6-o-FDP|c?LCa6Lhfo+7<^B-hq1l%HPrIKL}OMWK{iT zq2}>&Oo=y9^DV4X!2kX%E2^AcsBxZvS|@v5{BVJh5!8t)6J`_WTOgDJY%^HXX3l5hhofrqdHhIhC0)llUOL+#@$QSE5mBjA7k z-yOBS{y@$DIz8<O4kSVyfg+i52vBpx6H+_ zL*=_2H80LPAE4U%5gTB`{+lHkyz{2> z32OblMYS`@NDF5}g{z|ar#0$%t}p8T^`kp~0@aVVQ2qPJ#YY=u*F~W6&y8wdEz~;s z64kCXsQh=J=I3b_eu*kSe6(Gc3{`F(XARW#on3e^D*ZfEIX|N2{ZTB1Z&2kF9%J>b zh6*=8?FV0?@|%LnXCZ3dZ9>hXJE-(g#@c#J=B$Yt_iVRrlx)vq^D{gPe0=a8J}a*nlek3aWmOaVmyQu+JgWQSqx#_1KN7cW|OT z$7Mu4H}yvC+lMCE^K{r`vp*{T=csxHrdazEq4tTgsCBsk^?d#tYCq0C)t)PRqsm`7 z&GwOnscRLG|Mb)P3bRR>v2p z{k-H?Ht&X@>bKB&9JNpXjZHB3Z0qmosCl#x)vwpF83yOryl91u33tZIcns%ag1G_z z`}QBO0pS7jY+pN%>W?h*?fRjp^)?=t;%v-<`M>7*7~7!EUv>V0S~q{WaQtuVe1tQr zvyijAvyQVRYQA;FDL51L92l{{K0j1KeeNBDx<4#Ht&i=fd2$}Lk0x0d@V__8g&Nlq zSRcoro)dmU^+%*d){nJN&p9Je`8~xJI=?vJ|9q!C>iOpiDqWQ&whp$U?i+8hHMU=B zpOa6b?(3f|v+?hQqX=(A)id96`&=*>)qnR;?R$ldf!l=(9bx`wi7ph-EtE@duQ2n|HRqjsIee5Hu+}z(; zIh|4E%toC*hnk;}R@*!;= zOpbqG2@L&U{Zkgze|=EnHWIb&zrjlQBfiJCsQ!7q*6R1gkJkQb&Nv>KKP##_&d}3q3|2vh%o9y#=?Vkev?~UKUot*z}v)vEdY_ZSNaklb& z$G$ZkRnM5)t(*u{J8EGxY>rz0oly6qIjD8H1ogb|5=&sj4qNvvF@o@T?1rmR{r1^T zD<>mrUKK(0cTe1flTrI)#a))JDXJg4V=A10s@D&w{I+8XJdR5D0F^Fmx79NZ9wVF$ zwa@&6y1!4`p}Vvy(1wGuP!~3XxW%yOA-#OGeN&TyhdrSP5@HtFK{{64n zyqkL6o@ZnIX5VM@N9|()Dy92e7o3BmQ2m(nrp0GN-A~G(`e!+I$9?X6&RaI_<*^9y zHE{_}#afvCw$)=K>b^JcPQd@YkKL&LtaaBuhws7Egdbu>jCs%IS$#}KxGyTdnW*{m zJ8FG=bY}Y9#c1MdoG;x51U67QR6!aHGh9|diSl}sZr~$AZq@XM(uMo z-1#vWLHHYNi@Puq{hjK8rOWuxY=#GkpN09b{$u+-XX+E%hqphq@10UUv-Yh(jmJMY z17ki9cvYA;i?JNxCok-K#N03KKD-h&F6UA8eU9qqx2XO~@t3u;2kQJm)cBspZ}2wi zxpK%W`~KiZ%tbiv-}XFK23rvR1)E}?*OuQ*OhEV^Y8>98`aSJG0sr^Ds-gOAH)@@p zz?_)w4gD2j{a`%8d*0jg;yEl$IO+!*kE*D3*4>5Iq4u5gsCE4UH80|RwDxC3;PkuQyTk z$r%dz_un!Yhj}#|b^VO+px^)Ra2nx`k%IpGe2YI4ZXP-4ujg1%%r3Z@_*1BPH!^C_ zpC|KB{k;sY;eLFK3!?@7=lcoKt^NB^^Cw1(pw|kEqWWbCR>8-p^;#gN{WU3`-GmR|;pL3~Nne5i(+H+@j^ zVHRqBZb#*J5u4-hF1~DnpucWgVt(R>qS9?a)$a(Z-2YJHogtz1TVd4wdkCsO=3*f{ zjcR9d>*65BTdqv|MP)P*p2W={1;!M_LFDHZ2W?s+qy}Q zUlLyzmH&QJKV3#WzurgnQ}*OGpBp&0qV|tODT4m`uZy_|kHHGK4K;3IUj+U8L}^n1YQ7 z-@~C;BDLkW7xi551~p#s(^`HJ$X8Qd4xGvPW$A<7pPbK|(bi?UOhIoc@$oVT{ojB3 zDNE36M>s>apmz(WWe<7}NZ&nY&^t=FVXmP6^Olr(tX~u4wf!X%s$T|U30#iax9_3W zccOeYUk0GkO-7CDCai&PQR}}_erw-s%tH7D4yW7{1%m#4WN|^u?*n$^e2YRhFHfN6 zbEvSDTO2PC?%~4aiUj@7bNx~4W;be|`WrQW5)>sp!Rl46jXbcV^VyE+6SVRwS6l+s^1!8 z1n$8?)bA#0-6bs_^zX-6QTtj+RK9&t^JOxY!&^8C(^s%{|2<|Td>d8&=oM}Ja-r%w z8Z~a;ViUaL!g(tN{m-lIQQzBL#6i@jMrE7tr>fX`$y=5A#`(5b5iescOj*s^-y605 zen9o(E7ZP{ySnvn7u0_AEmkA{y-1V2ST$`u)v06Wo8ctV^+WBK!Mb+-3)Fhch`MhU zbn#7{?eQz(dtf4rR4?fNdz8s>D&fnh`OvPut)oGx{KjKA&cjr=2zC8_OpI4h>-kUA zyb5bz*GHiC^{lA=u8mP~po<^v;@6<|+jH0kU*HF<*U+rfDCj?**J>Q}zwdmDdpJL_ ziPgVi)1Y^kaIl%Jzx$|ghUP(UB*tiAQnX?`>vjXY(|?z3r>%Q1hues=OYU4;P~P?E((R$Ef+% zxdZzSE<&9T?`ZSB^}1H>miuUt0fHN9ET9H9oyi z<1rdlpEWLg8#O+WI|seLFdHhrR9&ops-w>Tfq5}zS6hFju`uEKsCh99^?MInunyr} z-Gct-y|~@2|L39R(=t4U8&UIrP!F3oo3Sb33)mTR^|X1u7|RgO+{^9*-BIi3DAvSC zy=`0?;9SDNJ~mIj!E=PO^tJuuBTgsWvR}~u-1QQ5efIu#Umt-Dbo~Ik-!(y%vl1iW zJyiW3qx!YtK%2KMQ1f;;#=zfEHemM^{@9(4fCGrs4{}W>b z;a;fq_!YLt)u{Orcc}GeY1DnWDt?A@T>N^}KDh%^;At#@Pp~9r9cK0HhI$?ujH<_c z=XU2+tVjG?)Hv4|ZqGB5QTcC0oj-xv&r^=Dc6G)Ugm#yf6uuDJ8}LAYW~$9AM{G&0&Io1a3q$VVC(J(mLmKo zsy(?U+H=xa)N{>dRK2oKvh}eQ;}ecC*^F@JaaKUSvhtds)?=b+q@$jtaV6pU(``O~ zz^H_$&ai%&hyM}&5j9VLoN4C|qvquqtc(9*5v(~Y=zpIy6%&(xq_1p$NHII;e@{{u zb)TMv>fawx^ZX*J+&eD(1alF7i|sJW97{I~HC{_l&mUW`809>}+=R2v3;MsO(Gpdk zN0=JZ&$s+5qsF~1p2vx(b=CB1>z4(n`|@!dj%B_H`rp$ZMwL5rf%zTk{<;S@;$_rx z>%@h&{;s0h^$=s?Yt;3jMRuP}ikeUPob^!o^+nZZ8mgau#(4M;HNNjr>EbN5>oZ~j z!WB{LY9wl2?ZNCASYq=j7pnXwsP)|w)i0A#^L;&P|Gb2n&vBO8dajJw2zS7WI2ZLi zbK9LSw#?RHW7PA*6x4I*YSe!44t0Iv<@PzI9IAf(Q1#u3s{cQzd~>V_`rr3WLG?q* zl|ldKqb;zm(qmqX`>j1Ml}FWUJ#NEySQR&|vi=GC&c-1nYJbj#b8t8g#>A_wK3_Sn z;3nqN=WCenc=mgnxA%Xr^__ODmD?6)aQ)Ai5?lOe{W}shUh`b|d(^n?N9{uwUHAje zBOG^~-A~t`^4WgS!#7g&~X`YpE3x}e5;DQX|yjT(pNsPQkj z)y_}E@`S%dt-EKaeIxZY+Xt&Vze4T*S5fz&9NUBb&qW5H?uX}aD(2f^`5i{>qcL~d z{#pw&5MG4px1*?bCER8As{+mesQI`9)y{`5KFV%ew-r(M<%X#JdMozBRC{c`evO*1 zmr(nC?7g;+RmWO{`(hD1j`K0nKKuNz1ivACA3Nfx{dV0`TunH^0Xx43RqsXz?S3}| zwT@?_`uQ+wUHyZ%F~K2g$7`%lIN@PyM;FvO9)cxt8*071L-l{YBeuV`Ld~1msQu`B zRQpb%`YCkO>XRE)em&GUjz>Lb>_*L#)2Mm}kJ)oaI#fT5M9u%bsOx?~&66m{?Ydg1 zdW}cjUk>3!yoTMe-3hzyGL|A7`sP(qi#qV?8Mcp4FowD^_3{}oWRQuwd zws0kENq8)Fzz3-Pspikt-r3lN@KIDd^PaK(`VuuiMxf@$6IB1SIcxjO98@_EFb$?W zXV;fQ?Z1Oj{V@kC<4M$fN_^h(tB+c5XHfYh{Kd{!!(xP|qRKmsnh*b>#_#hBHZDbQ z7~v`y6;GkAyM$_A!i$!^A*!DSU^3i*s>f-Jz?he8U1h_>gzIBQ?B>GrF)rZ^7!wbo z`r{nxzEbhB^;b94bH^CxM$AX}Ch9pL(G{C-MX?3p&Zv2M8k6H&RQnQNwSLTxYJV40 z|1HLH_!u=$a{X%c?}OS;=HLXpiRzDz*UVn1`7;Ey4yI!c{1(+Omr?n}zV7BL>OMIh z>)-*@I41th=5-a+x|oC7kG@6q%NbNTzoE+c6PID68`kfuQRxq3eSC&0r`%2JhvC?q z@DErQW8AX-ZG~$8cvL@LK(+T@?0{u%2mQYzUW1|x2XCi zxohXsVG_bcFcsECt)u>^cK?Jb{~_kWy!Wi1I-ut5BGfou#(5b0-P*YTRo}y?`_dEC z{3!f~yB@V4EJD?DGwQx_5;fmHzi;>7f|ynDsCv9b&A+k_>~r;Q)ck4l&_3sn#I=M= zKC*fK97~7s9R1kFr`Hqf-?7+&bk|Y$gQ8D^{@?w6gR=<7dS;&&mZ8RbHEKWDj@vQK zbGyIZK<&TYpSF*eLbabFj) z^K-E#{)Eae(qGoURZ#u&4d%uBxCoQK3VJ``E}V@${j*$@n3tc8~NVW=`_^7briLJBY&{{pa3fWVW{=A8kO%|OpWnB+P;<_wO>`o zLD&aJ;S1Eb_W92~58Ohnu28o#(I!;cHkHlSHw6nxQ^7^+%1{7}Ry^Q1|=oSQ=ls_ySR_eWg(2TNm|Q zI1RP#F5q%Z6fNX`&fbAN2q%vo^7q?msC{i4YTvkqy|H$TkU#FnQ1!_jGvt2`ErDwH zDlCeDSRw!C79~*g>T6WHPN3=;Id;gue^f^8gHuua=MGf+USkG~h-3Ayi0c1Qm`d^Kl+NAiNz@N8>){uWcUy(iJ@8j>WGVzUbg#4d# ztjcNqTPT-}(@50%+>7J!KYWSfbBFwWbWom<|MRLN_!seI^M?H2+bNhYNXT1)H*r1= zFBFvN6xTQqM{rl`8Zyn)ErP!zNUFnej+!D8}rR#y}&!Oe4-&JySitsNrL;m;o^=mPn+kLLY~9DJAM#dlT|GREA5r6Zs6og(P5P=0L;m-7$r{`EFGsDv$EbZI zN0X5Md+{w$?Ye}uF-BARi|bpU=Ixngmj3hRA^$n03Tl5_gJl9dC$$LqKWAv!D&+sX zH%4ol2ZM1L=l{TwA>r|C})$ z>k+<#+6M}DwR(=nZiKJn7Oc`OYYBcR3Jade# zlOtno9=9K7`^PF&eZdeguKm|_Xp-1K3;46+hbkG|2xHN>uulPv?1g_Z^zph^1n~mfchNr#io$| z_l2i%UXXtI$73UykjJCmz`m^1o*;y(`4CC-;9$iw$<$bHh;VOn4jaz_fd8 z9^JxtgcI+z`IHHh5bla8aU90L)u{g8f?wl49EXkf*?xEz74Es8b&T(@BK3-P!0KD) zAoo4u|H9-tk3BKTAseSjsOztx#;NsTo6o0F<>okI&&`EU&l%NF_oWV)05@SYJcfF{ z_yx5t{=!yR`>5@cTQDKvC#ZQEIA-?1frM|N`l<18i$8{X9?O5i?%%yopOZG?S^S84 zUO98pp5Mbx+4EW@R5`uSzwe{c9m7KS4r^fE)7HMRsPUSP>h~?Eb#Mj0!wf&$IGjWE z?+w&AJwx?Rwndr^Rr?F;=7^B--fyH zKB~Wx{%X&|Q&8iy9yOotpvrlQgE00rTd$K)`|Kl3g(a_t{GXe*!BT|d|7M?q>Y@6- z2Nu9VsOOlUQ1|Uu?tG>jHed3f>Q%{whu|&3vrzZ3-Zw-3_gF7c?JIc8=2u%(zAJD# z-os(o=eF(lf1~Qz^N!7<*{JbYhS~89X2kzc_m_-!ZGUZnn#YSU5&nd_?xc%<(4`|cAmr3cn|eCDav2APCvsKgmYmEERO1@ zW*8espvG+mYTQ!2vgdMAL?~d4#@F_fq*)oRv-&?)JbcADNvT?|Zs`pORK5!FNzxSwi#K~;+$%xv2i=*Ou zpz@iB>c0)Bb#oGx-!m7Em&L+)QT@;mwV#bd)%ypGzz?YYPLb8-Uolj@cW1Nqj>vBF zdLQ;BK28qn&vB^w%*E2U9vk5+Tph-9bWR)Bx4FXo{kw2(>xZtW{+@{H?}aYB301!% zsP_Dc+Rx+XvH0SsaqNhCE*OAyaWSUBzuozyd0CH?p9xD6KQy1smwmXO@M-Lc)AC!s zfdb+F=k_efWnPaEYbz4-BtRX5)Q3175xm#Yh4|Hx?R{tL$tx$AH_>Y7V_88&6(I;H;Qy&q%UKq{r^64*L>sB1Sp@cSiN&pR{fwu{dS4? zS;Pg%Q_nBWNVAb^ej;uuVgC6kZ!me4BAxEz`zR-sE58Qk>Qi=KoXG1u=a;+oeop!u zq}4IbrMD1kj{FyKz8dGxxO(z6y4RMx__2e3bmG7I{or?`NkQ5~oI6YS(@~N5WW?>` z+zMViR(O#J|L;+Ra^Dm2k}}d@7t&lI|Jz(U*Cm|EwfX-i-{OR)kgg?hCAh8vuOqxP z_8HtYP09Bp>2#DKt&Yfqk8{md&aEVU0@vn3obSfDy1ZJEZV>T%DSsVl{`dHSYg-VJ zkaXF3>6l7fBGNT=WpFF>I@89AycW1L#mP%YOwyHh?=x`S75Dx$@jJLqpRInOY<*_u zQT+co;*w`)`i4K#@&4g_RF^*=f4rzJz1I6iUjMqbo#lN`^8Iw=A>CcBE5`Y2L=JX! z$VtALc?BeI6oHl5>l5XoXbo;GYRvf4F5Z@WVB_c%ZGn%&_8%Q z^^XkBTKI}{ZHb-h(k3PD1$pHqt^s-U=e_oTGL&83m7knzP7>dPaAeBY(So%6xs=DF zy?-?4eG>ORF6le-exvF~JU>?RxYc>{ae}K`Rl?tJE(+m2b z|Hw}JJ{|eFmOs_enMi+%bov{uEv|fB6G7RlT>1Lm ztOW0Ca$Q$mxpJ*w(~NWRDVrZtd53wQ znfITLb-c+)ovxC0K1T4`%{AA_qYvjAV{!b7I_2cL*5vVqxL3UA@zp=(5}ssly-QrL zBOdAgBwoib-j8y1d+o~3&ADO3#UtN}X6qv!be@% z*||PDc^-86e#&MN>1(<)KXXlTPSoH!9V4mZD$d0u+!tpMH<)}nl5Pv(3|!lvxHW{*i?DnThMlD-$sT zx#j`s-(haj?5521uAhE({aA`?Y7w`RS5vO3M0|H%cZt7C+&tbl;#wZnz4qjF)YVyk zUz&zAIwlfdfx5-y)s)v#UVK#Y|5n0M(Ep_Qbny7)C31B>Lu60VN9Q$wJa=*~5ARd) z{tRhykxzbC&UW7GdyG#<8{Rx2-_+EpE!XL15@Dom<`Qh=`bxxqI*M_Qj}ZRR+~wJr zYgZDpiFDbyKEh7>{~b==`W&2^S3a)muBoAwh;F^((4$ceDDUZoxJ#GR{ekPt*6T?HGWM#I)0|U|G4}{xcqhyKb^iiM7pff zwLO75zlv)gl4oAR{D|5=hB}vU%{tOYCQTpeQHSfh6F1-G5rg*?TzT!d=4;-MbLY~N z{x)%KxmMrP>8Qf>Rb5>_$DzE+6Zh$;OZwzocNWu-Hy`o6spMCZxKzA4k$+5Ht+*~G z@vXRa8EJJK;5`3itTz|=Cw~3EVOY-f3tf4Z%Kq!B>=h!9?nJdApLnGGbPV{PYx z{JF2!hU@ja=sIR{{U*X)i9gOOfs6l%>pmU-k^c?ST_D{WUe|cvi<1jT8$q6T2(Kgk zbgoayYYE~0n2htOx%OX|Q4!*G6z7^tq%X|5?S!wAZU*_b!ED4Qc4h15yMwq!-wS;@ z_%#pz^I&bvO=Nwp`*gG+E*F6`=*IV*VNn9S@C*<0Hsn55> zohMIy7XNhA;mvX47Q3?kAw0q56`gh#;Z={go1CBN`hErPhm%(_@?A^*pN>|PQI9kO zxMnmj9i@m%N7_B)$v>Op4RrCBRZp&8L|%0`Uzcz!(xf1+JFibiZt{Ch9-aTEoK=LI z@hU`KH(h>nNw=5lH*@V_E{;QY&}ekJeqv!s%wokpG~$Y2z1q@1kOg|E2$qa)rX zK8tH_UEY5>`nvoSZpZ6quGQ~BbaM3>NB(@3=p80L9r0^VIl zToX>3ZJ5EufA6kI#&wfOucHAraqkuWg0y`oClasWgfCNvkz6;PG=CF5;?f2=KbgGs zeQN^Zwz>GCq#eSmDdD%sSHJ$zRP}Ia6fuPNS?!c}gfga)pN^xX(-Fke_SXN~TfQ>> ze-6Ix^M4+!6In<<-sQ33f6DoEQ6zVLL)!N%_4>`77>IXBpOWjtdBvnIKX86Ad2i=6 z+g+#cnRI03T$TT+%T2S^(NhDu8l&SPP=n<1^X=FK`w4QdGXb*f4spSg!j9I`u=q!d7b|M*n9K%$nvt@ zztlm!zy%aHyb5RH#7<-OUZ$sK7$)7F?#@hix~G$#g<)(eNhK*#smfGUI-MB?1OYb? zxgaWwC@8Wh!c`Oz_g!%V6h&}F5x1Yp1+Vvl{@$PGdA{eIs-&lT(EI!ASFfC$bH4lX ze4qXMJ+$dn#66ws0%LH2_X(~WiTgInU*n#BtCV{#UjB*tN4XwJ{8vz}ekVwO3-=cJ z_4{VxPefbveiPxJChg<7uBEP%gnc;5A1816{c|Z#HOl$|BEN?4KjV5gZGBrQz4BrD zu(K~NQs-lM|4Y)WaBpz`Me_WJ+Q#*#)b|6t|25&W-2a{T=acR%ao2M%|L!2oPf{N0 z>-_g3(jVt~1L?n#I>&kbWW+y@_XjDHW0xvV=K7roe=7ZbdyJ6^LY-gvF!?{k^H*?x z4r8I;qp0f-xzg{si070{SvOjyni-vH`CTHjxq*$*Y8(| zJ4@KVk?yy7ehuOOO5NYb_2-f1`;?b9Y!UxQJj)*OBh>$^2KzGA@9G) z`*(6Zo$J|@{q2P5_Z*%_xE@LVbF}47%G7T!>5g#!-gvh_{(Tl{)9+Kn{XQ?Vg#8Wq z|1$djU6k{!gg=|>7Sdcp8}xfC@vr83E$L;?`XJXH;trC2RAFi(_m6Xb0sYeNmnpZ+ z^IHi|zn`YeCsNK@l>38G@3)cQ&PcaRzPIx}NZe0TUiv+QvaX}PmvViAH2VE6X`alx zes@#m-*Wvkd48R;9z$I}Ncc4Qp2z*KxPFR!zr_0o$akFg_mb|HN&hX;o{tm%8$9C< zZT@s`q>S$-?OE#hN#eeX^mX#-hswY50^Xk+c@L5HCrI-%-2d5=*#GBH{%gs9jB;)z zy?*cE-XVNHVfS(Acgb(||0Bdbji;lu<0IVv7ilor*zYCOp}l}_<(eY?3#m`P=W=Zl z_Vw}pPU=`B&$CGLal)R@{b|HkDC-@>J(9RzP}_+6N3Jg-{Fz)|NZ5yXpXFJ&%=uqL8IR`vJLLHYY4RUw-o*PE?jPVjMZ`_y ze+KD3M13#gdL#LMlk3yOe-78H=-_d}A5XeRk^X&LALIE(!hfFopU}rPcl~~e=SPzF z{gihHc{i!&$%Oq+kGB8MAU^#r#^Al1uy3c1{~ZypAm6jO?&1CE(eFD+`*_}$Bmd_U z|6a=eP3pdhdyV+NqKu#A((ikCZ*q;qyTS%3>&t0Z`h6Yw9;BR~Ck^J<$|bG^;`fnn zhB*Bm&HcmFc{}&Fc~IqtN%J_u-b}uykygKV#u(`N?Sy{?_wOam5@~;!yl>)N{)6ea zhle%Ny@dRK&GWYrcZRgD-S%%;}JaHPn#d$d5Qc#OC6Iue?D!0 z2XW6K-G7VpFCeb}ca*&Py@y4y;8EIcl8Be55zsvOnJa0wbqj4|ieO`q9Lj?W~?Rp^>+qlecO2KD%{&DUP z(DoDD|CBuPnR-g8En|e=$hA)RBS=@J?rARl{)+Pck>}UYwoeiNUal7q{`0)+_a~)x z{b+>A=Wvzsf0_4>5&r?o_=PBMk>_o~pGQ5fC*2*bMtjxha5YQKMp zaJ{^b=YOH>S5W5jxL!yZ`aOZfkLCRy%Dq7RJGt&B?J>eXMEIwoy|Ur|6luOQ3ZLiw zJ;bNq9n^gd?;GU5gE;-3K^^brJ{Wl(psbHX+-=++P5O~|e~{;IC9i&ac>YW7ub|8y zAihQS7iQ|p7m(+-NH@pxzftxpNppwlAkS=+ z^>N<+2k(Eu{r1SKI>vcc(&t3FcTv_$XvfQVe;N1RpsZ(c{Wb4{#C?o5zm#(BBhTNc z0DhlEx{ne!O+j0v8&-k*zCYUhDDr-UY7oTO+@ICn-f0bY2 z`JYJpdF1vx_wOO^p=keesG~|9-@^N^ll~1{zrgeRNSl7&Ox|(wJ(jd> z;(wZmpX2$lJpU-yvv~g#t^=ge?{5jy??aUFLY_a({r`|Y{qEF5qC-VGN(cjM@-xTfpLE`?64BtcB{yxfhJNNsd?y1uFyn*mXNBFN3{wDIihjQ2^ zXTNKCzK!c;ynhYpo=KVMcapFd(1zOy`*@^(ZIpcv<$jRoPmuS^qYcXUv$XH0N&9A= zUrG2O@;{Dp2YDVPE$)Bjck_3|Kaz6)f-?Sq@b4tudr9|0Dumzrd4Cdl9^~4~^T){d zGg0?fk*`ad&m#QU#OwEQ?iVQMb^coE^85+PdmH(_kaRES{f3AeCS1Q~5muqCKNNlY zA=2GQ*{8|#*%9_C-hY|0uOrWwL|w0mxa)YY6F(O3R%rbD0@A-H((jM^izxpD;g5^- zpF{W;a-AdmQ`~=)`=62j@zg)9w({T^lN_sWR-TJAqZ9t$J?t(2?Zt%Tj~kCoqxc)h-X{NGQSpXd1xxIRjr zFX!4~PTokm1JpfCncorh?BV&Nr0WoV3t`{Q^>osGCuRIs!XHKWJ>>slp5IRy?D}TZB50gf}BhiK(nj75IsJw#jonD;N{o_>!b?K{*S(q2Ou zKOX5X5k5rN=Wx9x>V7-<{yQ1Jgs>0sd=J+*^8U57>6<9yB{2^3k^YZ~|9;}WE83ju zd>VE9SfqIg&#UqLdeVI{*Yl$dO8=VZ%Wc&8SCQ`XcwUWgrFjhX?B)GK_-bwsB z2s_F1E26KbNT=U#N8aBe{If~lCEW&L*OT@J!k$8z`u!W%QNsV6``r=t0@9@4H_(>x6$d*Ox^-FQ?uHac>~)J9$3H^-7-qiTjgC^9164jQ818F!%d-AEMlE zjWQHfC+tgT?~}-<-*DXZ{AS|xyOwLwo@f_opBVXXrmW8;&6{ZdH*sA@_ypJYMceC< z?pE48K)x52%6@L7`7fk7OnmyS^S;S-1LZy@@+xY9Y)CNqcvc{}a6H*Cgz9F^_jr?(=Ea$0E*CfP0C5 zHuZfr_wR~vNO6Y<`y1juL0xYw)tBO%l=n%lZ>10VeTw{N;`wgsc_MMsgugJ_pfrm- z-$1&*qug)d`Hw00ySbjr^S6=bT-0+T&$lT<{EiX+jr8G<2>+j4+l2ohbuAH=ekUk* zImYfh<&CEZ?jPWKQMB!YlywvF|G@iON&hI?soz%-etV3;V=4E!gg>3@3%ULv$~_)w zmx({X^RKDBJg-vL{XG8?&mWnX(P_Xy%!b(qPt%64qm74&KTn>Y<-NoEAC~$v zLAk5MzkvG>P~KtUwj=&8d4C(%UsC4Ja{WBv6TDwT+7+%Zi*~5qdCGke<-ePBhj>59 z`#%x?JEYg|{oKEw_*2BcGQt%8UeYX+_KPU*n|a?L?scX1y_vXA#{1_J*P*SiD)sjc z%KQ}ZFDKoHDeE72eow%Lztqm3;QgcI|2N{EL7ksV+Lu%B<9Qw=?kkBq zMf(4T`#UJ(X3G6N(jFwu2MGT$(ma(szs>Wz2tUpB26=umWju|v zzsvpg)RBHK=J~~heHnQlPrAP+;v?L@igI2|nfk5p{(A1OAk7$M{37qKpgrHfd-{D- zJbZ)NPMNPG-SfCc)h@1A@cd%pUdsJRk#B_OIn^;R*cr&$wfi>f?OG=r>}0h|-CDC# zZ#63e$IhKOn;n~)pE@!%H$9Mby47xNz1Hk@vTD1QE!8{Kg+^^@v@&q^+|22zb9WD9 zH!a+}zS-&CG`4VawouEutF^3IU9V-W<*eFVQgo}?*yhzzRI`nCeZAV=&em$%*H#9z z`TBaTGB}u>-kzD8I<3%bVRL!8*3LFNwWY%}Z*Xv!QtO@UVzseZ%Q~yA&Bl_dsxGuH z*0LK83=UQXC$3w{ma5(ALbX%NR;wN2Yt3w_-P+iwEoGg}#l>2uv%J}8Y>)OP?vR>N zu9Upp+RCalYq6`|TXh66Dm%imrCOubmug2)R&RD{?Y>lfVck}@+8E9TC+S+fnccTp zYj3OOPPSg{F0LxkWZNMnN`Vo$U_L!*J1oPS$L7HHG!1 zOoQ3nTwkcQEsj}h)P_2HmCia{0VbEK+Z{U3^t3kH{0_t?QAY}l(?Ai z0MKl?)%G@=-k!Vt6lvQRtu_XP0(P`?w^V}UrP^|Jv(aT8wA$5`T2^bW)SE>IcVq+T z2dzccCpFC;JZQCDt1i(`I@wyw8cZBe-d(LWOT8gZi>}=r&gxW~!}_?&x>&Dmac8w? zaWxv*Vxyj~O;&>eR5ricT3M(y81zXkm2&=8vk6GsjA|0Eri_WcGCEY-$rh_D*NoZT zV4zst-tEgQT$+-4J~2Kx2oRLo)L(`{*Fvq{T*1KUUMj{cee#Z`3QGvT@^fWXnZ_@RyMS6JPWAXn^n8ndaKhN&F&B$>ST>- zJD)(ywO-xMHd+irRRwI)*zK%MJB5B&B!J%fMy=gxHLDtNwW@FV(ViSFmzUbrFElH$ zcLD!L%iJ^A*;Am_r4~KcO0He1GZvLS^oV6x-NTC8WL+}IEHvSg3t$mZj>?`6D|oT? z5GjTzq08c~E$w9|>M$eAGS{LrY!c-iu8dGIi*KYdGLp^O(+JLdH!Zf7YB$f!&P|`2 z&yG!>n!0=X*iB;=SR!A&$!1Q>o;f$YORA}CVq{^vTcaP{8nZi`b?PfkC`h}?Y8CDn znV39ea58!QFi5XIdR%dn2M$!GvdJrzv~P0w`h!-OJzc)Mg9nBW>{F5Zu2kfq;eCe= z4Ido0Qq#-j3!XSQeEs#;4^K|0@cmaRd~$eV|MkQB5A7R1xZf%$2VB0A{lk+t>>s}2 zAobj!dXAhrbA*-H*j#UBTlFq01A=y`zP`DhHNdX~fZd9gWkZu+JGnm_$tLz@ni^<< zurYHInY-ZCnztP~wp_o&2)SP{j578dhVf+75gB%Xkf{B9<(Sq()>)|(Ge)_KY&k!mWSF7zRjG5Sk|2Sv} zg&CXyBUja^UKqK2V;(-BJnW`i5n?Xiy3YV?9(MC~!q4T~^YDSF+?<7acVxLgc42*zmTAlLAyez7)p#D7=B_n$49&!+`kt<09`elQBr1T`$fp0;hzTl zV6{!%z~4p-$_42|n&@sx{@7>{-r13VrPf-nb>Wg)3(us~j5R_n2pw?Z4FZ#B=Pxgx>ioF`^?Aqu1YX{lOddP3+r$=-}kOi38V9f6YE8 zYa^4RlamL=uitm*z#(pv;}iR*M~EBF#wm?nT_)bB_U^^1TZoEFtu2ux7;B_UiJw`0 zIa{uYS*^pCx(qB?3ASdGJj)22jqFy$iMhpgeFLVb-3Cod8fh&uD-fyC>`oI`w_BT8 zqrL`<41Zsvk#PN2Ok)cf2@Z2* zwL7v=U0O;cv9nP{+Eq=WcbyF;fVHrc=-}2Wkm-0bue3ZRtd`;I*j^C4vM18)@|qxZ zslKAc!hFYmSDfF zv$@Eo8P;e9=ML-GsV^}@n;R?b>JkGqiUfoXg7V-YQ-M@D2zh8Do1-CEl88Fk(Hwfu zsbq3wiPd0g5GK{e(4uXb>8a3L6!NBzdR|zE>XCn4QL(s+EYQrB+pTqz2)gRk=7#3w z;QnmAwvPO(1=V3(8rj2I9s5T2k53+&+_(SWL6(K_Vyu{n>ksU|VgJ4Z6D)^fHS~q6 z`o8RH!#1q-_PUA9^E0z|&&Cdc<3vZx!f@qLFU z_8%Ut)3t01ydHPbgWs?9ZZ1wnSBf#9h20x(_EouLWp zqAL)5UaYq3!j3s!7(^O$OyFy+W*VqE6d*0tz#z<3XVVCb>M1Wv>0dha`!y}wPP`<& zwOIhH>}+U%j&=5m>l7u9n903@5Y$gz^{%M{aq7jkk)IE5hF41(AqG~PGxEdec6()WU1Ng zom2|edX^+sgckvtD@3WD!T|UES*0GN~S6%u#O6=4HZn8S#j2H8;lS$rSWF8$smTaTRf?YEA9G{ zhuBEOBP+1YG>Lm7TkWDW8G1_V-(HH**+2w=r;7%=9BN5IB&D7JTFNMql1Nj(SZ|*I`T623Qy=d+xAq!C&CnrMm0yh89{&QnOqB0f>CNHo%gQUT&}F z&!?~B?+Go{wa91|Gq8fr!=8oD7@5}QhF+}-sNy1ueyG_hxQXac@MJ?z2R&{y#1z;} zdUYvJYANcl8mNroSP$rqSXrP)UN2U`$>`{9zSX1U`pTxqf{0qCZDQJ_e_?1)uLWGA zeX(UMW?+r=fHImTPm*m@8L}2Mse#31`T>p#6iyQy|MTdg+B#qzgXC<3jJ z2%xA$&#H`~AXy_Ev4SaMOC5|LK%}74fjLwpSQ}_#Y(1@r1dAmt4hdXp2wYstSUsyD zPY?tndM5^15JzDu#!Nwa2@OFkrZg6%)M_>0xw+WgWJ;MhQ*|n<6QsO+14@O<@Kl5b z^=PgP8`_WzktlP)kO1bn=A9v6iWXOEOE>ahW;u8(P`T923`ntF45`RMp+0VzbWen8&2^Y;@XozUaZel?-oGDZ`u_dH zC?h$Ry?7}|0T zMxUr5kdx6N>XBGN5fE2Z?V{Dgt2-$ORKc*x6cpRvAdduFM&B@PH>_$Qy>#(s(CkTnllghV96t!am6<03|-3Z<&bTcAYsnz8+ciQOKYxd!sm#`TvIMk0Bnn(!XAX%D^s|8Fjt#RcprvFs5>TKQ4O-_KTTPJ zsW8THLz&uj*gkv?d}&ZsXOUv4oToJgn5AojY=hBz1~@G&-bG@9|~jZK(yM}(_~Ni2pIpfk4}nOq@^W@%NRK_Zj1h;IzjxsGwv z5*H9^WE3Tpn`zbT9{APx1&BAP!8p;%RIYwQZ`G3KI$S(7{BqJE1;7c5E(l=D^${de z{=vQ_!Kibsy{i*?>eLtWHBmWYf(PycmvDWkRSi|1Ix~Ah_7@_X0A}3KN`^>KLn=vu zz)|H0?BjC1vr4J-kSJ{ZI2x@<#?4on_Z_;I#|ru*lxC$o4ui$3*i`wExD(E0!Vl;9 zS(xS2-POtw@xisYsed)>$_X?*(&s9k4QI#?2gqtuuw@^crq71LOdjrdu)y?)yG)&J zwHoE;%rpV`A@l^E?=Vp*WP>cO4DvE)x=%3)>JXaS&F$#OW(VH}vQejOumZ3eItHfN zUWI@vNA9n0OjeGboH_^kkWvB9GKr3~&jR!5jo7|WlN5sSI2ImgY3(hxHny#txjQOH z=k727IX#z6Us|j+EMU_R(5W+1$IN@Ja@6?g)RlPC?7_*Hc*v4rg&-H;QU<1wbZ3+6 zTuEefu1qwe6gNuYjYfz6O~aj#Q>0g>lQmK8Tgs*dJglU905dufTnsgK%t@}vV(?fs z=kl?}!pbc{_?_J0erK6&3?xJguhUTQ4@DYayOeR5e9$;NuL|4}DOfo~szmj&M+S@( z9dQ%qXOP2MaEZ9Im@>t5>@Jnd9}O|s>?W!ddPKqwbQqw(K~B7zWOQuvkd##_VlfGp zMzgb~jfaNU7S|*vsSURDN&;B1c1;Js+C5rrgNW%5aDCJQ<5tM09-MbK#nVktl}EzI zgxX92Za`Lsq(YG}efb#XluRT~cPkdvl7hS0e7zgF8G*KGy$wTqY!3gHwp&Uo?0C%- zC@{*g_aoJI`Sqx)sk|sla7tRC()-zZ&+8nzncf8RXcr=kkteIh-&s17H8g?ib#n<+ zzZ5I(6`rAFQ;CRN{B{mENlOkUk;c)f7i7;u$roABnW&W1NhEAZ^)YY)+vssjCiBpO zfnxm)91qt+bXwMbM;moby8eq35|89oFh)co zxeslN>0f|X5(>{7Aa#yvQPxmZE>IO2QD>pEG(^(c&>GSTkCd{QcC-6is1D(jy2>aa z0}a;#Y=T}|s2;VXZ7^YpyapneAps%{a84CVX7E&b5;-82a&%iO*x*zG=*MyWW(NU6 zY@ZtpoW}(|5Qe~shA3U{wpy!8t(jCaYMG-%M}9aDyE1MO)Xzi*?Py}{XBy$9JMs%; zp~(9zFIQmh!yL}Zn211$MUlQPjN+%FBygw@^^0ZU|5+pqv2&F96WF4PnSda}=4qFQkD6P?An|iguK9A8pIJ-&5exZTMtYp%%qu=tMMGRpH;rAjF9f|xUoSx&?UmjpoB)q8S3?`C@)ul? z->oSS_LeF;f%{mw@{=_*rdy>1Gf-A0q^BddRyV4BV{;o!T~GfRqKm!FIfVjqlfLyN zJ1b(@8`A3Q>^a!_zFg-vnTVcTbM@wG6$Nm42Ipv{c;X?+0qthF+j$gZP+S^LoQ!o3t-)yh-COE$)lSyx@&Nro-FF}f{D4X4D5Z~8g8>_=R^2_cg#BqU^lW<<#D3TpHc>_v!ox!wkeg7kV~ zAPc2*hqHJc30I57lFmA!QjSyuoN?21{qDsWsro|mOd00nsw|>XfEQ^?fko0zO%j*1 z1WH_lLj_Rpdqi~XlvUz6JVx_2i z>+81Pga37N(^QarX3TRSbl$s#70A{#h*r91TtTo1y=Y+}1D_{*fJnWyN=(YSoUL7i zxiPhz!IsL`u`b#LTzQl?34WPXVAc~69D#)soMjZ_7y(L638J@*Dk1fY(QutDWkLZ( zPK+D`buc~(5|A9a0neg5@`eTH;pdfNA+>>LO@d5keKJUdhCxll4ekQT46T7wJd0gt z05ozPQDkG4tc4{zoY)90!*Wp0mrFpf1y+ug*4r3>$b(E!`18<+!o~;5_q`Pm+ZCFY zp`SPFJZ7oF@)$EA56@aHyJxAjcnh$(hQE~aKKEX!__K-L&w8ZND*n-Ow-kqR~H-PcVLLFEOr1U~5QZHvZ_3+7!DC5F_rb}TaO95H^wq^?B?N4png&2q=7a+N0L zUNFUc)OneNV!AH)My(5SC3#Rx;}}5nfV9jP+Rde&Sb3C4GpEL|glx3j7Mmn(>!HJ) zY{Rhdwv9|97VjZn^!SGK$0n3+K(5L(OtM(o>M(&6*3?pEx0pl1EvkVrLk$pi720RW z0W#t$iHHa38D;<#n^I5tT=i!~02i)|v~XUe&(32^JDFk(esWtXp$I`>-Bxy6wTa}1 zn!x_$RyLwMz#Cw#3m1ci@W`jX{kf#hZv{+u6 zrD&=35}Mm+Yywp*#f`G~ZgWa7E|JcomP@znQN?GPT^)dF##9e2(Jb=rMG8h!kD-3h zt}_7Ju~_HX9Ai~o>a5mk-Ex~uv9Y7S=&_EH9A5yx!Mbm(SHp4$SH2?8ngT`92$4zw zhJe>{=EL0o?r>#_A9M2(mygq;v?LIYLXgf2k^yzmSdD9D#gcmQWdm$~xH+oy2PV?f zA8y*D{y>HpcMPare}r{%N1*$R^al&V`@dA@E}U%Q1wulg^)EfmEeZ%`}I9A!r zH~j({lm3VzyX*DKb$}h(n@zc#WhW5k+cj(-G}1@LR2v#++v>RhI4-U-q~_@pH!0o2 zP0;|=RRg&r&ef$74oa(y#pRwvBXF294QVIuu-UcBJRPnOi)&-ybcCU=zL+w~cchA~ z2Ub@Ooq-M5f?CIoM_rS2)=1q@>ILC)d?a0{w%Qe(ER&1Iw)bFNo|lv-+`X8bZa(3LQzuk;v5Zf{yKCGrjnH&RPwjEYyVDn@b%hp0tZyKN5> zmm;SFR9cNC50Xr~fl1FMOjA+>&&sqw)pM%f*4u~5X9G76p;*ZIrtR$RYgulh7<%K*;-z}(djq0C66#@ofNls?XK&>n+M z3na>2%8~Hgq>N|)6*Tc=Qak7+f3nGIeT&CYeb@^}SY}u-;H;Y$>zw2uoGavHBdDep z{wz6u^k58)t&zpxNyMGHbR^a=_@2IUk_)16rd4024rP-CEi-GapzV&Sb7gaGZ_7|8 z*{0pXsnIt{4H?kDshE2o8#+J;Hl-@j_)|LqAz!7K`^`up>b83g|2b_&MrJ_Uxn*9K z;KEe1fPK5rP!xa_xI`L`G%cwhn?vL_?J#t;N!paeI%jZDhs)}ammugAy&rQyGkB5y zQZ?z$FftygKxSV)7b9YV*;C|3RXJRnyODuvxqUj6!V|LHl!qUA4D))@(5mt~+$x+t?cEcFBHXEnm`%Z>EPcruRX9Ge*si@-^%u66z zZoG#E8O4znf}=eG8oI#rXyLbMu#cV)vd&qFn@Lc9yhEVT6~Hb<3YCg-8DyqF4K$iy z)G5Ap^ghVy60&`2Igum5A#GyVTMjo{SzmD4iD5O0K{EE*{b@WeLzX{KU-6t19OYH8 zyuWM0i2a(A61K2oLUP}5sJ@XJ@x&#y4%C^gh?}b7a zd7ye_hh)H!2*un*fLd$@N;zg76TKF*Q8`w}r(V(!K+lV57LAXM7b`lkgxNhZZr$tR zz&&Ow46-oP+GS+(>a>Wm_t3fBWREW zpc3}A@i2c2=s-(@RVpIq^>Sf_O`K8 zg(Tm?rlhevtLc*&A`KZ_kK|9oK1ek^*j8;wO7}t{iyY(@z0R3B#*oIV$hpL$TH~ea zcYI=cLn*jnHhk%d<3jS#BrOHsDxIJxTR$0tu*jVf;3|}>(4ynC`mmif~BQwsuA( z8b_N8Q*}`t3sT*gnZ*(G^wj*!nb`|-M^8?lo=O9VM8`CK5G!5_ea<5+)82O{fR4^xavObW%s_Uz8sc=J^B{LJa;Vf#NfKXv*n+soNqpg<92 z^XA4I6sKKW+tNnhw3um{50#*lm50~Zyjoy}Sr_nx9n`AU^0NF)ByVUxXMSo@;@mMO z3DR8^UQ{#$%b`QQ4rk+gN3-*Qx=Sme@=yjh?7H7@kU4A1m`aKEv2L}jjNfmAqsao-rnd8AoyP z#E@r(73-Py=4zNyt3=N7_2Y{N9!}X);cA11ug5NCDFAu4X;9~~`Z+|c;e=(PsFh)@ zf{F@3tJ&^{xw5V%lrrQCUeJL4V{uJzPqmx^*M!UPNey}3{4>>}B(rSQmvl@JI0XkC zZG&TmH#jVzVLs+eeDWTuYNAkZ3WKOgG9Me(@2OvGiDoqsVe7qnBWUR06rE-{HW|(C zmUt(U8|1$S_Day9CW{_RLu0!fQifi5VnUSCEC7aYgKRnb11)d^ZMihK88^Z2TH>%V z1#XrXNI3%NZ>7pJwNC=nwAOv??-&w>j}sg4((F%nqcuMoeVOLY+fc}NqFAEU?EJY? zni3t+WRz)OwcFk393C6n+S(eeU1Iw`+XLX9#s(Z7ddH0hLD1za8PG4`xQX{%U?xSQ zP%=F{C$QzKQIpc!5*vOye^65`5`q#4wYe?zHGB4G! zyQ8TORR`|rn{B+3a>Rr6pblFLfK!cE5#^#IDv${ypkkv9K%P|KWMXB=^vclMD~JXT z35|bflI$!JoxG9o+yJcm0N#Sdz@cZ>T-zG6{n%^&pU<+Ece%Grrzy(hS)7)?dcOk& z6x~<_hB*9A2aSl&(c%v?zs6Nd8&2NvG6@_gq=B@3+xa;u=y4I-S{Tr^tC^Eja!rxb zk92H_LCa*;tS^AcI_1$+E4419%u&VuZmvny&PW~2NHTIHs|*Mf-FRzrWi?yvt~ZR_ zR2u@!&X56uvA`$-tz;`ns{wz*b*E^t3|*O)ot!^?%4QeAA9UyjB@L6?t6dbkSQj;f z5f`%$C}jhob-?A*m*PM+1nFE_#NGNZ?z{sCzgL&e*C*~n1>p(KOeIKhXr7p2 z+&=SUNRj5Y;4~>Wl1IKUAv+#3>wH8AF}k6!cPCvs<4?q@bVy06O4)idSlf4|G<_z* zu2WqBDumHB;>da$%aVf67+8*=O&h>EG#ji1nO_WZ2a^Z5Gx+UIA`C{rMsQ-PiMhoaSufO8&> z*@0Egoun7jJZgG&+nJO^8`b3EeB~IMBDlwA$L6NzO-qU)YI^S6Og6WQvt@Q%DzE7(8Y#Cx<^+Yg@nWcDv@(r))&9j9A$s?n zT=ryJ=t$^ELKW^WKD6oC*N9;s5VGY3TibaY_EM~7k1XB~XF8(QL(Q*2=>ZPPr)BAM zpvrXpNM%}PKmTvgWrL6n&7V6zdlZRmZ)Ms*MI<4fj-sbKUDvT@DP(T$l(iC)lU(DN zgt9e|LGfa$>1>bWy(c&zU&;B;CU3|wx5tb^vqn*l1m@-tsuF+*WugmrQIalLxo@{ zP6HK3Lp(s(1tqzlLNR+hC_=L5%Nu-VD{K8k z30GTlUhDP+8u6c4udrpVeAZ$XXeCOMhDC||paWs{N6UJd%~GOQQq`3;&F-{eQ>dX;Yuz5z&|r~#n@-8b z7jmZ~4D)vG9l5o2t2$Jh z;#{C-`6l(K#7ZfG=!Te)IJ3^^06a39Rx$4eydl^3c16+7v&m-VSjY74;U%t?(jYNC zxw=#;RJIx;e@?rrJVe3{C}0qg19AL`<81PHFIRPia4HcyJiQm#XmsCZOP*X5*D`&{ zQFFYMnfEY(CVR;=m7cK};NPXDnbGnZk`Tq>vNGgMu0vZwrDBarzW0zM+iy0_$ZF@m z4zd#7OZYMuIv`rpj$7^ENEt=UZ_5J1Plx(JfVmDHI5L-%A%`^6SIE={x$|7KM;urt+1&CFSX$BvB;C*eOCVHTa=%`#-ZwEaF>&wl zsoOKo7@Tki>*x?QB4wsqD?Ksd3EVtR zH_jeAo;rq-g&1r<>RwORqH%FMoSlm!5+o}6HUL%(5^2KY*ZRmF&gNTdh>Dnd%$Qi2 z4(W|`!d$UbTuLyfU9C9NPv|6jK$9gi!$#d>M|@4VCqdYr8NciSlna z6(?H6S1^RpFe@sVsI_=uCe>`)f+4aB*u&s*w&sC@+3EU`e8Vqk`vfY9G4S^)#H1w| zo6?bAvBXSDvJUv6T&|eQ)n1$)BZZ#9tS>oS4{VdS1;scEu?mpYi%^uA&xH1giiE6h zk1jTsi4>F3Qx@Y0^Rm#m;h8;EF-FDqNtujv&zXOt?Z_1hU?q%Q*wpZ z`ZoTnX<*AIJh3BTLHK#2)iq7nzvFgp0X*|E5at%w*?gOV+Z36I{M7lu+#ik!5ZNN$e3!dd)ulB)+vZz zDXo+?o=ge{$9tt{YgRcyDw{OWeE%;suWRkhIF!{H%!`%d=B*Gn;76x~A=Y~^zQw4r z3><9Jy$*deHC(v-Lf;%tMnU{B|HjdTp4TJg@(|_a${hOdcu-=BsdFTbjiz*jLKh4W zLvOo#I=W=Le!L>XQHTxf&f#=(%=&e zfbC5+Q*0bi;iZ;O_r121$jF}cEx1Lr_s3C^p!*h=0xgADmCTjW_!!4YuYJ!2^TeLo zZ0gpjyDGcu61UjSwQyn2V1Xge8b$wZbO_bd-os5HKMexAnjS8u>`r1iWI(=qRkm-Vajd z)K{yd>{X)OVoQ8{3G@ZDq2Z6cmBQba*lH5wH)!Qy4+~cj#8&$l7NP@ul%I4RxjcpQ zHzL7i$)_TEQyv{JZVNnSiINiv3Drq2iv{OL4){%i3d~<^1(DfSkGuMX7^zr!VvKS8 zX6@33wO581%77ntg%mwO2R|a~hG{nxrGzr+NP@cNh-@^K<2qt48!|Uc+)NQ@9hF3c zDpX6Dfd~;_Xzrr-Pm-b3;=I6~s-Pr>l8m>La{x)ecLp^=Nn<%TI=>N$qX2?z z&6eJU6yjB#aN-ERX71aG8V+__g`251*1b0x&(JP9 zkn?qt6^w;sP|{J)YZ?4eev4qKbmGcMkRJSg<)jgStY)fZ2~9R@t^tmLr!3Tom6O=T z>|gE_Z+e>?&^#_pGL0vFKIieBL$wj|U`PK!BfzXSvqNV&DvUX?EQnjZspuEMT8Kj~ttmnV9J(Y3PsLP@nIANMwtGHud6{Wb}0c%N#&$YLDWCn{STnH6CKn-yE%4= z5Ti;*bb6otH@*R=07;Zp`4W$wi7tM+85H2^4n8EKrwOJj`=gCkJusA zUV?ZVI8F`~{!qtzBDJQ3j(md6tt3ywY$>^fP$3AYF-l6<$EIT^tJHW(aqzWVy&p#o z`JR)Kgo|uTd3b1lGpv)MQ_gf<;H`0W8{xC?xFXPe)U{C3HfHQ6`(j=2I+Vc_g8qxnHmC zXaFDwbO5Y7#nFp_K88vYZETeM$OWj@P)9kK%Bp*Y_bhNN?tvY>X`y{HbccX~agPhA|~>zTTuV zkakLrdD09pGHEF;o3Pwlk%*m?aKV{s<@VwNpx-ucX)wbEXy4Nmov@-*gRr@Xf+@#^ z|DtBC)TDDUni1x1Ls4Q0BQQ||c`w_bisL9BM%$y@7seXRj+Tz&0fflL0!!L>!@P_a z-qFUkOLoam-=R`XrAvBwAA0eN*h1eYV@ImRmx>`d9L4B5W-$)ttxdJ%&w?fZtl4*s za~qU~DfW!JXQ@OB^~9h?-#%6f^SC#&mFt3{b*2F|Z6({6Om`PbR=!&nO>??s4FpuA zv<|GOF_!LxkC`>HA)6uZ2H`^7u0NIRxfd4L(7alLDjuJ4Gk?V{!LTJ*leBvBbJPG! z&9kj_|L&)ICx#H~10p{?JV4=tlYUWUV^uGCD7h%^@COmWF&r>P@S^*$qb7tK2;%fx zUu4fofU5Z&fc5lMBGxbMUIPf6W#=&MIl5yn z3p9ti2jf%IqHgG0`tlqCuET9Xw)O7xE43##S`{`%$*Cv6TGyib0rf5({hza zO^!HC3q=C92Q1Z@rce;*EPZshyN65mxSCIt&)EJP$}j*K3u|V2cPhImdOdXAfl<^} z47BchcS&JRJ(ota-h{RRA&Sqn$?LZnp%EnWg!z%=o?&09(v0#9N0fEQk6b z9LKbt3hb>9BSYFY?QjxiK{_Z4F+ERhDKFA%N#_(rMOuT6l1R?@+xk0kZfbU(`7>Rj z$@QjPXB80QCxpqIytE|A%LMHr!j?VDDIW5o*Csx7LFiDUU*6;&c)q3}W zx(h$}pqmk4@Jkt3_XI4(M}O>4&U{R<2TJ@*a}Np?gQ;(vfKRj)n-9Ear*+bNM|eVr zQ|fW|mBH;NIpggp$2uP^-02mP$7-gngMFv3*wI(n1HEUpJctfOI~C+rQ`ln7IjvwW z94#Axj=lVs`OdkBv|PJo0Sb01rv~)XxX$=e5p=Va+1^q6XoSa#iuIsy4!D$r?B1k_ zCuHqZFSbx|I3vrnNY#OekqzAmb%I9#R#7dNzVLpSGtA^=4QZrZ)yy`3G3DhC=khA4 zy+{-cTyB(x<2*1i2@8PX0&W^{PD%&nQ+s`F9(&yINxs9Lstp9o=!td0r`b)R{xx}# zJyj1E>Pt_V7@s&WJ~1)DM>WR}9yqjr;;Y3HQc-8%<|+KiFpG!@5!9TOC6`)E17p_H z8S#36xj4ST-46QjC};3Qej}}Gay(L8RT#FMDql6>uxdH%k%@o;>sUQy4L>r6gYX#; z`^hS$7c{^0Wjk+yjwdQsEzw!1M=Qg@0dOXBE_u^`gA{KTa2Y#ZCn>gzi(I+&xR zw8z8_N;a-hTF0=s&$)Ft-dq)m)*ziaAK_5@bV{$L0QXZV$74&Iq$S5`HTS>Knl!fw z$(AwRlG&gNmqc2CA=|hA`N7zz_8AUoLclYiyTUJ3t?@kQRasD`9vhHZ6Lo_NG0Cb!_XcL6Got8`#idcR(j{P8 zx;C4p{YICJZh7pkuT7!(;Px~4BC_z?|K zVBwkq16QO@gt6$e@1keujgPS-@32P*k0-l(k(*!)JeuT(t|iZE1zB3-goC5-kxLE@ zhN*&yia~XK5ZwT4_2hBHpb5(RUj)&oP8PT#Ic_~wVQF8cd_)#2*x5lqolV@W4Oa-R zfC?OEn=9rtyKP*H`LD`{D;LLhJJ+&wI)k>8#?j-2_%<mW&g58)cdS7q%qF%FAOsX(M<4>Ot0w4*cpsd~M`{PdAxpE%kDnJDRz z9ViMB;hgl#`#yr=Z*-(*M6Z z7zcM;tvlGQoE*+&4iox*xu36*tIk6A$a*&o9BaeW{MS})#bnf}+`8G&waq_-7J%~< zWY`uRAr!pXtX0^cfF%Gnm12tx~WngA*>a?$DXtwdEFfhhMfu2-=+w1cu zvr7`_+o+&M(0OT7gnc$v`399XQahg|{U~VF6b%X~6bwV9{9v8U+Fq+FI4Gb}+izi` z#DGYRWcx(nCu-~WB7od8#@+V{QkQlV_|{QtuOXq^u&3UJP*OQnov+=+e{3PF4dMHE zL9tgn9rj1vKnObKTTgy^*C`FZ33r60N2TQ1Tp#3;Y;P_TmY*XT3ti^2%Bj*v;e^SP zf?#w<40eqHmS=pwWq^T`+>NwlT2LqMsNmWh0tp&3V;sYjW3j`|d2wdyg$tfFF)jT~ z=&-jnsYBwbxqmifY_J10Fvjkp5G@d-3}L#mj|w0&b~`GPqc{AU#At-~P0p(77b zUf~oG*0C$JF;ZPsiTUY558dsQ>>+vKxw#}?vQ6~ie#h}j-Xo?{5N>z4z|A{p5sG`($+*C1-<)E4pV-ehAR z)v)C*|C%e^)v-H-KRUc6nd{K_ppcR1u%zn1V8Vbd*~hLQ>mNLvkzpIpx;cLjqL}*fQ0@L1ctV~k9C7l{+l5LCLyu8~jR&&*$6^D=@}2KY6d1d^K99M1rTpIso;qQp`+St5M^YD5zw9`I|bx2#Y^~MT4P6sSDu%FY7slh zLl=-MP0E#{d;nzSnvgR?vS1{_u^^YdjJB5Y1)*cR!SFQ7L+P||nVIEODm%vKtG!xj_{UU?p$AeKUuk)-YN}CrH|v9!kPFQ?D*#UjNi}97uqB`^ zNDL2Ig5xlifZj_Q8NFHo+VmtA$gz~pB0x9Dm%Xe`W5MvT;qb9gsA}~UqA~1LPiZ#hMO#zt(cI+3C~Kd8 zHe8Jc5Ekkj#A9cGrDmF@-<^-A1R=Anvyo-53bXH!tm*iW(i{Gj=zlE$=7#f&UA0qNgddA1pNTXZ8UnDW%EDe8$*06CsYbct$T5z7&pvS z=#d%{u+3<2kNc&-FZvluhiQj)T6rxj_a7rUgDrlE2vU0B~co1akU#^ z62=GBiAxuNtEIB~U-OM_K=v`gTc2^jjxH<|m;UKC27i(X*?mJPnRG0?WtwYt4_belvcVo8#iYd*Lsr4z? zd@Od$w;R`gBXHd19NmH)+cl>&2cAS5nRgi>2dJXmYLHK$JU)st%^{4EIO(vP7h~!T zQIpd7wL2q=)uh#nV}qta+WX|M@laWG6tZD`gKC=*Z=Ri6jU|SUFeRw+zVND!+UbwD zic1TPQY?0W*~e62IK4zetC z*m)p4G{&&i_Ix0@+#A?`xD;3G&WBsr%e-BEn78Ot}2*#0Er zCPS{w>H8|R$tx$veZrqC5=KaLPHi*XshrBy@jqsrk-xji|-Nj}CF ztHq?aSX6M;`CGBB^B~nCqQHg#6LIRMy&uh{&2LHEx$#Nr8FMCO`T|lNCL?nJ5Ug6f z;RAUd_@`b7hAS`>YcWVmo=XsIyqJ#N>{-O4rdm!&l`ZH8(-!oDX$yLEN~d-(FWy6Y zVVwNDQyTy$4N0CbQ&wr`{I$yIL<40RJRSS7@(_>?5^FgeffBABNCAtdb3%>(NncJ^ z=3e?QPX^h=%|@dU^2|Z;tck_u1bcP7Rfs?dSC=Dux@aP;_0W>&RlpL5zKV>Rw=j6u zI_L4`bK=7yrp!MfMypKVvJ(09$L5BWXgq%$9tUm!uTiEjkZq2$LR4~-l_y6xtX6*Z z0#h2Q$!m&OZ;u_uSqd%2AO&J^;=C)4QOkGHYxKg*Q?@X3kdH)p@fReJ|E*fyMEDDj zZg^0(GIeo@LKA=%M@K8sQ_~pJ5obFgNw%J)XKKaq?;FcUH5^-9io~{kkr4}QnGTK8 zU~knH05sEEY1|YP*w_NC1ymWmG28%5_|ccir8(%ddIEvU4Fs)qygV5`ld*uRRMwnR zP^FfDYkMn=y&2DjL>2bZV@`gM4u#eji>0g=b@|6UW?NfWSa+4^Op;MPsd$h``ei!- znIS9}6pi|Zh{z((PZKDQfgj^9R{?CdRISmi%(6j^f9v>(n&4xI8!XlzVnC&H`^VBp z8qyhMDlAX!gr30?MJ$C&kdmha0NKe;ytHPPa~lU<2oAPu$RrkL)C$_0gJlsUtR2%S z_C`fLBp)R3xmyls=3ExZA?6{kUGr6|^L#8u7D+PQa%%~YR_|DIcIU{#$ z7&71pZgg(?)b!E$VfXPEK7aNY=ZV=IA0vXtx#VQqp<*(c!U4XMS5UP5Gmn%)SH*(Y zSyvwAD^?%;bX*)LeO)S^I1_8gKPsT0_@sbs*&spHN*4WzG!W~QgyEt7bTVQ2TYn8uMYB{leA3w-grc$IRi4~40(Vi9!$?>u2z2b zENnp{z(zmqYZFo+8QD^yUVyjTUabO(ZnF%H8$Tl_dl4H%DxT4TvUpHZ`G-OBkkD$| zCmAaCAMh>qe=K{j?c@q^Ur5`*uTj$U>iEF3Q|IPqblAN! zde)4?mBNB}IG6w%)QT9@J6xnC5ibCY%SgP!c|c{)=2C$_8J1S8L{c4W+_7gf1PFDi zF~+4Uh2iRgc_5|moJc>9={O8Mnt+a}wLo)2_S zbER(*Pa?lC8?i!r<*U4}S&B~UAA}BlUh7Mt5flAQ=B?eLCG)#^Y%&f8O-TN3M)9Dn!d_he2p2mp7N34SCPTob7{$XwJAZ$^uuXy zsd^o5484Pa*6eJdy=U0tIn|fB+sk)&Q_9yqS(nt~ zjlcr}3H)RPkUDWXD7P0?K9xx)j+0ae-q;Wsl-bx-<0FF1Niy%++(_3T=1T&G4;Az- zjc3uf5=%k(ao`3pEgdo=C%4<;gBdnSV_G+qU@+<}5c-v0622`tWkxKzeA7!07sqVb>q1zSY=Xfr7@} zOulEO(FRpGZ_vXoG9uEt*FBlVji`5X&cb%YtkE)*qrLF`C_X%Dw5F7saRQuSnPt7o>d`ZEqXLC z2C3KhJSFqTQWYQxjhJ>%`G*h#M9TE6LV8dt8!A{GvhGm`st-qNt{EK7?$p<@vM!cT zZrb`Arcsz8ELJsrOc&lh@PLGeVwN?M30IXKjU5=&a!yZO&S=Z{OX~>>2*m;K1 z_@}0eC(G!8T1qZ^7%b@4!}%snC^MaEq6u zrL$^q#ZUN333wHPFg@*AFnH3lD|YQ-GZF@(1$&*-_ipyV(IuA_Ti| zV;dz!yt?C~WeFk;mDj*6l@n-U%pZO+73>5(eL>Gz>2fL9*5f!G78Y)rou1-Q#X3V- z&VsW^jP%YpQ8J1#=t*rs<}k~yXo&erLyk!$b68Jh<=%U<#b%U}2qfbaJa3N)sgWRD z-;&kV69hmYyXO*&M-<|7Wbfi)l?{$hjPB=q8}5spS{G6$8U55S<%sjc+(d1siV@03 zZ2W)e^VqgUS!<9{GZVJsGz~M!uOgu#hS-T9*ibI8^M-N%!do)z^dGBzxNJGz~y{tkk^3g6+$L60ULhcUBrU1L#gg7AY=)q!W(3LiA_4xv9U> zrjZxJGFqDt9eq^-d}$|DD(%WVdrIl}PQ#ctrJuhK_E91QgjgUTp8jDstv2FrJmfF2 zJiOU4&w|R>I@(KSj6E5xoU4tQC4qd_$SNi$gWMY%=vZx6=~i_S!ZpjF$#Ccx<`MX@qz+7ZE{Q z{)*NDcCGvxA8aGN?Sq{&p+X68MT;BO!aiH1N1Kiz(rAb^ZW{&RJ%^>mbj1c{+S(0^ zCNfC`YQ(r@N6(!)Uh?p?)y_O7lIV%)KIdIa8R2HuF`KJpOm$bznydw>!iM{(hh8Fu zB0alGp=e@;n3o!qNNS@3)zJcdK{Zbw% ze4m$u|FpY`s${u5AP}+M(jazj%>2v*&tM4zxB0=|Vc= zfk}oiE1HtpLBmy0nE@gz1K#^S^YoU?qE70YOu5eMoW2mMBW7&B6`nK%xQP)?U)mW3 z=v!bewU1dnYLf*f<{@4KJu6B{E^_X8+-$ZCw93e#*lQ|Y*2FM3_e$o+N5mwYFh8Bs zZuQDJH~@Js+WD>dQ4ZmJN9T5pPG`6j@s6S+@kTXQPDXwj4;yMiF{8NUY^8$21y7Ib zI4;5s>(SA%9&$sZg+thEUpOv?%)886`o|+~^0{}!n1)_@YAMP7 z=gyqNH-z-MGI%|vM=no#GkssT9@+=`S-VW|VGB0|=8pXS&hDuEAsey|%OOWtf3HR4 zPKNdtJgpZN?Y4;2hgetW==1&+Pf6<)cq>oQ)AO4aZXWF1G`4VaQHhyv7uSSJ4N(*& zdK!&-;NeidK$ul}PlOw!@&n!%TN{)MR@BaNS(%dFrp_9ftMb>?wb_>6)Eur=_D}n{ zG)n%GE5H0TPFd6-djK;ESc7fj)inKD^!7pdC`3Tg1}tjr(y=G1PzUcE&Tct|nd+9x z9Ll%#{JW2XD4`OljAW*r7sT+%C_HNYCOVbUL=dB8DMXy+Or+4Q4a+XUa$}V}lD193 zPm)4!(cZ=;!lj7zMCQfPMeK2` zBy8)>Zi6|AAh3LT3@KUKc?QjFBatWxze8nB>0b5MJ_#aaM|y_FV8liTv}7z$q+s+} zf_a86UxrJZN2E|t@qMYjNY`4WZ;uv+V#$kceMsBz00_zI$+bko6|OFF;zbB$+l-ol zM#O|kXq5&`lZ$3%uEui3yVHFE=JG~6jJYoZdNv{ex@_iHdXg%MidC@1^eAykfuW68 z-<@wvahQ0!hBKpp20TPVt5FTJB8{h!*dYEh1*+-kIZ5HBZJFDo#CkJdjW#Qq)xl1W zZU{h^k`MXJb$G6~)2Lac9r=IfHHiA;T}*0nCn^aqrHmm1q|_rj`jcW(|IB~4k}>4*p$g$V4~+-)&1 zLP;B-e0E-oG|VQ~8@%qA|tMr7|wy<<>Vh1(& zsM(DXK{Kfut-I!EsJ91@BQCh7Pkj2r&w&xzU~E*qsG}-3+kEeq+EE-V*ke5G8#0r#C|?2pFKvEmY1E} zqI`J>BkF_^1BZh0VTp$r#750sGMi7ch}sqMt!mk^8gTRzO1cK=zA}e$+5Tk%`b=R? z7u~N%kdL=FUS}r0GjP&H8-r=M3M$InTbli2N4A|+ z+sB`bEJxLsKb_brEGkGOj``;MQIT6;s_^>Rt*U)f=6at(M7Go`hh7&nJOrF4|J5CO z1!i9v45L*!Pb>dEY!Pe*A^Y08@ypQ=(*zm>rvP?X+Wy-BUums`#D$#%?MGR@t{#E- zf_&fvZSf*mdNHXfS19L{bO~-A6&e4JmgGt>Gxa<~Q5(s6>86qr7@%7dxbby!seybn z#i57Xpuvs9r1Mj#ZD=D90%a#mN0?Ds4Y)?lRp!D8%xBu;g@xUgm3hT^u0jy9cT**J z6U;-?zHH$Q+l-T&q_qm+QduCt{8yD}q4+wEM!3_p#GOc$6byNQcxqq8BbnB%Po=U) zOb2E6;3SZugM^y4KQA78PvJ=k;wS-knxDhjh;vkhI}DI;bF>BJJ3&oe2Sd17N5_VN z*|gKuPJ_^4N49H`YS~`krk{dA^n}#fQ$y}U36t}mS&6KnNo6HG@4Bsyty6I=xs2Tj zMs+x;zmm*{$uK+-WbJkWBJykW&fN}@Dx%wBLnPhjP?~y&Bh#_DYeJ}2gXkCnFc4;A zy5u-CC)ZDehK7_BK!OLPO(Je@u{1qf0X>ze+2J59mF8czC1(a~ZFzu0CAbK~HFA;C zc#!E+^?sqmg&4E4fZh@&gc9YdJa&XrYNjNnG^=*jh~qE~c^k6@*mf1ep7{nu z+Xy9jZUiRLP=p=VgYM$SBu5&B3qcY#P*6}3&;$pepR9APi5OFjzf!40!xr8scOF(l zz#IH$P;8YWMyJ#0EZnBpm1{Zql%dx)gveGH`vKTR#JX?;VC*QWq@6|1303C0?lQ-{ zxdd;f6&|PXi-x#(YF^bdXK7`4r9okU>ciH zu$G1D$0terfPJi3fWxUsT&C=T>%~8pc^d5Sc~zZjZ8ol2TLX|sqCnH3;At7{jENE4 zhRSXGVeH4woM)(TiLrBC5u*+>t=YNhsZ$rG<}MsRb!KYb;7xi=m`E24`S4C&fF%J~ z{aZY=5C$ClDwfl>3u<_L(yx?)A@HwW`i}JU*4e6VROb0suK_T)CKyIKYSn;eQMyn| zakkj#Ri;N&02y6vY8yODjIxmi;WgB&@~-NP2Ab7tYS=BMfA`D;eCLBAkwkxCC7nnD zLx&4t9+4CMm}G;6XpNRi9v>8FwJ?WI-o;SXu6<$tD z==pl0^4B;$HO0njigu@h5`mDvBr|SQMb7`54QwZuIj+4_A@o1+rnCdNs<+j>|YCBp28ps7xPnPUA{?rSl!@<(3orH2X#&f|4Kr zTlHmiod?7rmWyS>v&F=0cRXXho(nCWr2->zS0ei)NWy8^Gj?GOB8@u5*VS=;iGz{! ziO0%3P_MyQ3jpBN&muOgq}bBY#4NyqJ$V?=$IxKOvwukrR{%VBHBEp;T7d9<@n*U> zmX4k6$p=Q+qs$4)=u4ImDoWs=R5mo2wGJchYV2GTGyg}G&&kVAo;MZI+>_WBad|c!!9f6vcV0J4qi-F7C zmRb12NihzP%&Pf1q6FN;Aywa_ zgfK>Dx`wLLCov7Nf>-J2ls;8Xjq$N%c`|Oa`N%Vr4j#{N6EFfzG((^hi=0C*;0@2{F>=~_BYZe=x2M9M$g&C~z}$Q0sU^ie=WM%!YQj>0dX7P@`=PI42FO40osK}IX*#^zw9{G&G5NCN*~&GfL?6+FEb)O-Zs$Y-_&d^_b2njD{8HxYG)*s3Oa*{(%L-~Mnv-%`#V zYf)>u3hEaK&GN#xBc9PL0FNt`+@^S3~iXYIav-w;77B0u_XM-yA0$5 zY4NY1vp*c5LOFUN1<~sz^LugNEQ~&8SoG!W&eL{ANXlj$8V&AoxexOg?hfhLzyqTb z-s8JYpNd)A;L8@Mfpq`|!jm7efSdwa<=Z4O(`bXIe~7U_=f309hRAGrwg}{KVj4lO zqRI#8u;;Lrgh!Z4Bxm-SE?3bTF|~FI|E?*Md*Z`N3@f7vW7j~lBL@{$u^@AyMn_O$ zxmwr1A;&z#LedTzfo6~Qjpk``|LG(BZNohee;YqGM?}ZfOXkVfpEOc2*_cBl6keuv zg*&oR_!|xH?}Wy$x1ls~;$Ysyw%MEYje(?tlcktVCL|No77YkPjgE9H+i9}9L6X|f zoA!-_-BU=*KjRbb`UVN^mSwn1hcjpZg99>soVrq7gsHM|hjCG5Yc}VoLeW4c!>2Op zs05mav#}2+KnN432oz*A$4*IL+dw+X%%#2j8(11Om=p+)nHjXP3KZ)qZkPyb59fj` z*wPj-FW@tAAHupk(@@H3uF51XXrR*jk4GL;lTe#YZA3 zuuH-f8dqQ-qWz@eB$pNtVsa^*g|)rcyqdm{RYk@=J2i7IGgXCpW0}m3Bz_|8eK7pP zM=P~4dS>?6^j%6ib!vV(a(YV)L@=-xumc4w4yM-V#?=RV2|iHjXv16gDzeancU=Hp^IA)y$ziFzsGvj+juZ z!Z~>Mp5D-?w8-h0n!+b}=E7{M@9;3G&CM7Y=c`Lt*2URA8J#l3@QL>l)s7w}R{?GF zh*L_$bOqruOekt8vDgc+V~V7Bj3n}Mabx>XYVpLu+m3J`;A!pOaodXT%MpHM@sL-U zI@;HUTV9@Dz@;P7ZR+Gmy9^ah)vOJ};voj#S@T z<_ljJJWdjXdWEi2$fzJ*+MXp4T}BPGh(SwsYiEUEs}k{2FEa@AE~WD%_yDP&~jJzz5rLgQ_QC z9J4=Z6(O5-*>bmQoZwvhvHUn*V~D*)0mII*;BdxbitZV=;j#Ji=Vrz3;%Wq>ME9W>9BBbAU;!I>QIldnt1Wj}GYtul3|Jsj22wRh?cEux zHiDTKK+>QVF`;3s>oN!FBq&=TEFc>rse zOPc_XuHprOm@&oYORD;u-{{`t2pBVBt)o3>JTSgp_{J``}Z<>6XiN4X%)4T&lySMQQgtOc*#(A!uINbA5Ak;>I6Uc&`p>W zx(;XT%;V7Lr7oX})Ih|j?no|1BLTgV^Ff?aa(TY(w&Y-L5ru`U3}4*0I;Pk z{Q@S;y~dZ=7FgjB73dmPireuqw%(!(Do`%f=zMY3A?-H30*y(hRI_l=Az{C>X$Vh2 z3CRC1b#K>W*LB``o{L=hQydfFu-MHiigfHGwBv-ND48AcC1laI;&?bkvP9L0EHW(8 zl3Fl8E9l69(W3zjJDyCsDZy49#S$&S7nTDI#EbqSg?y6v{h$A{*4lfYeX5F*lkNag z@$9|VdfwmG%U-)9hIXJEba*m9%6@6SUoo3ncwwvBDe8q&-(HpNwUf6>Pyo=Ebd;qH zPl2_J!RKEBc zXL`k64OO_5gS>p4uN+D^6?}Md%vW~aVM9s};&aF{a`qVE)TTze2ICurSf!BjK;xzK zJXtT>6v&Axs(dr!R4jritSEZiCeB~yxd;Dp-}s^peR_$P(TJytzPG^;2BMdjZ@BR$1y3IQeFcP?N zhwojhe#lFg|MpLfR&X)W5VWhsR4BsEzr@8c@x62chJctWkrj_8PW z@2t}@J&Ts_Qe&_k2&aRwlXVc4`Y73C@%ka}-RNiecszPpHy5e|W% zt(x_Cj{2-1DIr!f7!k_CrJ8^|Q$SUlM%H;!12=E0C=kG>K0%zXM`1CZGvZjsJvP-eeQ)Tm%q_U&^bK0SEou5?Il(F5nhxYCQ4~TObuD? z&L=UB(wBd+>`vyUO48J~m8-eKI9u9p&Gp{ACq?TVjFP7mm@qWv=(Pw-nXkvv#ac4` z7gx?)dU1OCC42aHY`L+`r*Ad2?dfCC^kN2IvaPHjM)%~=*bm4^;PMtjc=exDVB)|Vpy zh>9UHtu2Ov{nc~r+g%D{X0AiEP1M`v2Aa6RM@2H8M%wUEi&ymml?H95oEu)hdE7Ba=B-B=Q3?Q+)#9)S`E}| zaI@27bb3i|jPfx*HFKzr$*Ww5h{zPnC-I6}OI&rHkHdDRK6YAhC}X9zqQo|yl9Bs{ zQZXJazaRi_Vkg}kzvau1S57ZHPpU9IqMj3Qk=&jG(ZnB^&VZ zsn|tGP?p>5+I(OWHOQ9FMQ4U#p;qgi3@$rMo_Z$pW^E@5RR~Rg>}Y-3VQ9s74lO`3bvtf4i&I4pVn&Gylz46J%3_Hr;rrSA>Ra&5zCM zDP(bxs(Nu~b|= zE{3_ggYgg(`NYJ)t1q*2C}++T88wL$Ksps8d6-%NYfzYoY5dV4Pnt4ZeXwNgfq)ZWzrnsxx|s)lAhjWp+KhtE(Sfv=*zGT3Q-EnYyapR%VLbLfrcNC~?bTC-T>e%J4CASNgo@KrL z)Qi)9dAQBg)8*53BSP88c0U@;}{K_pa$#ZJ_+09 zIOI(GOHhtfHTEbyGv@hXvPSQf5If@7McGzB-dE2Mn}_Uk?V0IVE3+hJa%{R39+ciB z0aGC9RlYf~*`6F0O79_xwgQr^3Gb>gbG3(@TPEY5ZVpLb5jhR@2=VIu+jq5T@0F{G zf>^-ZLfgVxwo>)idgv7GUBYG!iQ)Ogf>J{g-p>P%{Co-E%SjlYb*7~|O{qEX0Br_~kbv{P#-PWvCWjxmE z98A63jy_6Oz&6V2#Nu=iZ^UOO?T71Sh6S~*`}c&J>tZ1ul&UuawEl@+LiQPc6EkbDF|aSOp153B2dl-q8{z+vOw4 z#%#A90@)?k+{{*IM{5$~f=M~0&hzIx^cor4Up1*2BJ6#~%`QlZM|;|KqmZm20Ar68 ztm;?!LM)?q=I+}Vu|wUQ9>`(2pLqX-4}m<`45Ajy=6Xn_kR+RmxM>!lnUg@`E8NV0 zG0?lMd9ti+RhC*xA$9egLmPV)>dKN#p!UiUNDXIeF*sU&74PG98tsn_!RPP@lUMJu zrr(A<$x^h9;Kb|A+GL9tQEiDI29&YvL&zD@C+}umRkM3cVCUzerTv^km9^I?omh3x zwg@I7gUSRfoy*R|aqjpg&rt$u*{g>(%4SdXs-L(TnZ};1a{q2Qm_uj|LMY^v>Grmw zT9z_vYt*4-*WA)qZsYZAiDXzSj5;~ftM6n&O>^X!g@Y8X=_jHa>}7#LsNhMAU1QU& zwi>i?WPFr?>ELpp(Xo)%AOEphw7oyj_T^_RkItqCMAg~%D>o4lnh_60wzEXRcW~=D zY(fXuQvttzFw4k2fq_^_PK0YSGy|rBG|t=CRy6Od(olo?ic{5dBiTMkm|9($%gDq| z?|9jb`n7(o6w$HgSc3uta_!E2c4JIA5aDG}b&qjsilwt-qDjC9G}IQ~BckX#IZ-I{ zib{OvU9;G^%3f_EPLS`2G6yjRq{P$lVFaQtLuy;OmJ-%(YFApBWEixKk7yvOn4pkB zc{_;a%&4^3hT0YourMA2yco;92ZTcsA^cL;ev zhgXpBqnj#2V79n>1zT zS{7kqezcd?Kcd&63+E55OgW13yuLc9(*mV*6RFgq@f^vvTaABkqt`RVzVX2K0NRo z|FT|*iiB5QL(Sz!Z5try8>V8K2aG;|Dc&4%D9rmJy6bUKG;}dXIOvjl^A=mp*%3OF zjWI5XqdAg}Cqc0!7N#kPyyvk>>#|!HN{*HHyt)W;Q6^c+5(a6hV#>NO99KcoHF=;> z!DXjUwc;2VkWyL9DQJw76}-ll`8>i)d#%BX!mJ7BYphkD;dCJ&5B6g}B5ZVuq8!xM z@|7qqvY&CUc)3E~6fC9gEv*NsbRg|Iv9SkJ8!~Tm&L(%r9ulzQY8l)y$9`o?FZ;$= zMs3-(kNv1+0p7L_x-T1bcyC+fo?6BE=JBAf5_3uvdPXmT(IJ8~uSpn4jS!V$_G4Ju zUVEOao->rYdncd|n}jQ)v)+@F6n&o5pe z-xxr72qtEE$&~j&wAJ_O<+FczhP#YW+RW&VNK9m-w#dirAhRD04*}*N}Rm?s}svaJr z0;dtrM=ZGW(c$_Tu^9glT;l8lttT<$)Gkm-EJT>qG9QOuE#IxKX(EOL6dx)~C}hJ~ zHBC!+m99K-8%$>-y^dHu-=aE5`+_B@W7ihzJqYZKa_e;y#VON%@)Y*7mh&Uokg z^{E%{$_A>8H(hMCWtpi9QxUTfVGxxMXDfYBkw>JeBs(Ld8jrL@Zl}h`=pGL1D%e`? zLCR&$U3)8eVKdXV5&thdGt_~E(CgWpd1OO(;k%tm;1~iIWi;jJUqH!HskFUtK+T-5 zeTs=QmoJ@VQgMwfJTe-;Y!m%7m_}e{IO*fa^t8@BS8#te>X0}gGQt8lyPJBM>OoR6 zvplyYB!#ul6E^Hw16eupSxo6g7Ur7(=QlC5K>%CN6Nywr-{22MU0~_s zn=h?FZd(-i((zJ&&h;}bZO-ROl8AZ z1%n+Gdij|I^Q#ZTGhPs5H_BC{C`Iz6JVhbZ5{q8G10?^+gInb@ER-YHPnYgqd+q*F z+vw5PC`kVU@A2`j0$sbOq?7@0&U<&^(uYcubLsTPa@5qW)&Rk&F1%A04a%`dxrD*C zN}k_)RVz6BAg*G=<+wF*muG;B17@jW%&XH0%ued7Qwlm8?%^_3>x3d_3)Q7@pi}1j z&_mWwVd$E~iFa(7dEy|2I_W~SMHC_sTi=1cP!*vdc1H#{O6A@JOAK4lnb2d z@TZP~4vFSQizzy-v$NnL*~7G68m4F1vHRVP?~~5wHdO?K5DglgRdpJk!flx+;%6D) z5J#B9lpK{EwGO4IMNcd}Xei}XodJ>+$3jresYx7(hYwpKsMH`5EOVG~fQ^Alm^xE7 z&gwei14%eU^~i1+o$|{2*?roqbA;J@MhZ{lu+ysS9PFDZx1-s zXjz|xiJ`y5=qg6U6eMQP&$RfGgWy_`p1ycxdi`~FvudG7%iTGcM3$OLtl!3z??vLH z{3Xh1en0jNeNP7N+4zAdXrk5! z_{&E-MFjwkf}=XYJlhxOpdpjleg6e3?z60{Gm?znFey<@g^)FmsVy>QOV+rVhOI*bZRV;NZCU`mD4QQQJd4 z9R+~XZRUb3K0pNbIel^B2-CIbi%sHG8nQEued9M_&h;Kak1sh8mcpYwN-E;kx7bvg zfzw+~19Qt!8h&*S7U5+Tg@(B=n+TkUkgQ_t+gS#fzCwKQTuL;Fv|QRdN7p?GBOgak zz_p>KV5AdGx^$9TlWgy-iH1=^Y+=temdpbmj%ok85kK}~X>%`ut-k*a(=no`jG7)P zhQL|B##$b$z!mC@0SYnwF&@t!=>L0LI;M7&Z=|ncw*0v-EwZdD!6R&cAC+Y$Qg=J2 zRlJmGQ&8^S$qIj}E;gY3BS8kP;Cf`;nXGEZ4dE{YjLqr;uf@7Lhx1 zK#i_As4G^F?}S3wcZDKiAN^56Je=ex->-Q(YvgO7XrMmrn2eM@-@(4H@0YpOGH1+5a~gQ~t)>JKl?{his5k%UXm01j@;lyzic-0AK1zEfvG!^07<6si z)mtnorRG}7N)+F4F(E@B^@o>fx@fv#C=1=W)}xCI3EB|*1nmk_rs~hFD5z>i5Q`^X zGd>~+i=mt)CC&?wwsjY3RzbW0B`VS73E(+~-fMSC@ZX ziS@5!2QgRciDUK8HSVY@q_GDaPizoMGm(5eJ+{LceZ%nSlOf+Fm zljRgPc|$=hY7>uF0y#Uzc`9YNKBRtO_Jv%TH!*2qK;&0e>-B^(vvV>iuiOZ189Hca zllcdJ7~?+wmwb#Pzf$J-rsnd-vR9P}jzPdvTZ`AN4;HZ#Q8zS=Glvb*PIz2C)$R9Dq`-8H>p76RZ<2syg2$FJan@AY+@ zu*?^yGt$zHYDfL>En{XT*r#=Ab#ndfh=-6H(NUk7TMrS5{9 zc;YDt8T9>1l8#lX;)uBtNlCOpe?_1!AWO)&4jO)uOF^ZV-#DjI!hm8 z_mFbteGt{f&=_L)!^lUX@YA6~!o(-rH?Het2yX*zG__c#(`&!<%rutMy|v`|lMDcT zj2ao8=WJ#uSiAkcyz)o8b^CJbhQ=5e#vhdr)miE%67)FI1d}NoozGTBH&$rLU;Y3j z_Nd6rn@*MATEB%< z2{#&)a-X@KKaaBlPsO*Wx_4GZ$G0?)`i9ok9WT)eRK@vl{EToWlW^qq-m>skOoD_( zj8Zme-Bq}&KeywBgcTzQ*9(7(N>u|@1``>m(NUb7PzhioPkaPbaVY3(!_<&iFNQFA z0sz6wr4*+}rj6ngRH5%|5QfU+nuh-B5F7mh1ymz2&A!9~Q=;i>ePazVz8qh+B49mx z>B7Z0*Xq>C%bcV7-1N-1&t6`=+^X_A9TIU=;m0-^hwOnvcqvspfDMn9SlUQ7$f1$G zG8xEx4CC(*Q!qD&CSu?35Q{#M)J2kCt(h(zIEk>MxM4m(la!j|p}0A~o4obA9Ch4h zInn$Oy%;=d@3-coiJi*o4TI!rwNZ1G&jiKj7E7&g{SCuGuQFt~y{_VaV~dmaAWf@* zgkyzb2lRkW6+=NG=J?fpU8n;y4T%YWC@2_l>Y?_V$0V%3wHNa#I*&Q{2(xhfr;$Ff zjtepWxUq?|F*)oVT^fa~YT}yzZp-KLblkE_I;XSzb=bF z+@9AHwDjv2=*kRpeTTS&3fv!=+~6o5tpRvlga9Pv*H<*|B5WXQMHF=IzlKK z;eT;ots@GIG+n)P<@{-#t=)kfhE*->&Jj(22rr6jncRSXzS@wT1$(2c21~CVzS^lEdJDXpXvKlB-OmWZ>$tM0e>01g2_GbapDRj6Z*4t2Xp(r;ncyfw$^*gK~-B`c2v9`I4x|U<@I|A3;+pIbQ znl*}Znhfp;Nc63Jk8e%Jqy-ajl{g;>h=?M!vS<;L9TD0eum*EiJCP#bw(pxS9o%A1 z>KQ^F;j3&Sk_mYVTMCYCD1Kc**0wcWu(ROb^s$o$kUDq?-XCCWcREVwA!=!X}fpn9;6Co_4SA9Xl&-DgYJl62dgVyu#g>+lMsmgj3ZSu>=IPpXrQF}gsn7^@#epA3&<7b-y^O2VAB^)>=~ z577TKBp5W6w~NYAxhq<4zFK#op&Y>9i}QK=p6$Gqn>s*;^=jX>KMxT>rZbr?V{w+s z_g^%Y4LYJy5LscqnSUpcf44csYS+)bZoINoJ3`5W|E|aH*HggFfWXu#NLmE}}C@>0Dcw}@#^z5cz z^$)LPcUkO1scMuL@IvFd6?I$tLbRVILX5&53<+&nxO#)>*>e1u?tNeBYFY2}vYEyT z%*+l1ef$hETyJ;ZL&+Cym^jtB=-;PicQAj`b12^R^fu#w-OPc?NMoIqrH z7hn*8*SjyOwG!+V-sP9#ku@6ft_Ef;C?9mHvSu;L9yZkgVJ#F+=zx+rKZDXaBs@Gv zZ*EABvFC$87gZi8Vx1OTm_W<`hg!;>PeDdz+ESU);!{=xJb$o`sG~_qIU=w1=+Hn} zbRKOP-}4N??ryPX zhM&0?Q;dlDy}Ee>-k1-8;ivIk?J(B9z>KWQYF88#IQpRX?rh&;WBC1-j{=tku#kTd zY88D-eijrsX^GQXaogojuQy-j+{0eun7;Wr-+?&~v{Ii_&jw!*J&R zn2jdRwmL&|#)_UXWuir?0Y3EXfaJw95Jq(w_K#)9_QLoa-1MTSY-4#rAm=vKgd{ls zfp7e*ArP3fM#Dk)-m)?0u=T-Rmibx34M57rC|`AZ8g0K-%oeyrV!AlycPU@>4JXb` zYl~=pjjgo%vX7B?%7a<=Q6l6JCr zv{5Z=NDegj%ILAPe?rlXL$&n*Eg#aT=vo^B&AE$KF=C-!BD}@^N$nkgK6%^xXgQ-I zqmlkBhF?%SuJ8KD+y?m)X>!; z9Kjjq>#uEW@I4i!Tsi(%GpT7-z+}K)Y-3tyYm&sIglKzawlPVz3d#)}bf^ToTZa z(N@fAw$bi&mF}3QX5F1ecs(`W4U4wnwwx~!i=B*xnH($MWsR>SeQEkUuXiso$5DVKs+q%O1_?3($FzYg<|`Q?9Ta zsfX>jXO3t&B>(CnYa*+|oi`^M=B1g! z0kujji1sRTk$~ru3vO&pv}Rvcfv7jXw?2R8YuE05efqy`Ufa6+)xke!e4@>X>DRQZ z`Sr8sLUp?zuR2d|{^yOm%#}}+)?jY)&W&pw<_<+cb7+DEQcg?;V-Yoc zW>R)LYS>FC(U5Ec6<5hYyw|HXa_N*-tc|Ss;+}vJS3Mb~~rp z+sMamem*I;SB^kIlR8aCYA?*L8sfu6jWk+y1 z)nr-XHvrT?`Rj=MBGyyF5z9J;LU!aTfOO8}k+0sKTS_AV>oAo#0iuxEodx!5OUxPy zX>Yo$M9?l%D_tpQBYXQ0l6J8Jgt}k5+~f7nI>=D&DQ`~4Sv~QMFoyd1^)e#LYixaE z`(1au9Pb@<9Q0TeRNWRakI_8%85Q;2=V4{-xjj6`P7~grWgTD=(ZDYjUyWee+T&<7 zR=i&0VK?S!>Y@bNm0@E5WkB@gea99EVJcNf=_0qjz3L2iHPvlbCI4Sq|$eD-@FlxiM3(urdEeuA6jTu+PzC z-8p$;Qs%ZNnSQb#vp!@~H{|gr{EMMY?W)+Ids*6rck3Vz#`0_Kymyi7+Iy>>DKlqP) zzVDeYyugcX%dw$4;GE$5xexCBkH^X)KyT~R0b2bR8t-g>8VzawQCxn^1MYsz z1AhJO&i4PiGka_2yg3VvS5PKmw=#~j{m$f`x_8)mtP3%E%RK8!~iB*AQ~J{8QiHr|7Gyl-)XXDNkuqaPRa7BdJ7Me!WPLGiD5wjbALfoAptQ4sR)Q6w$=n}No7egrke zk}8c-+?=fDDf``YN8uq03GE*wx;Y6Xo_#m0{8$sefyJ=)qV9v4A7M z#>Fr?ctF>-zFFv+-*4%~n;Vm_k*65}eO+(ieC=pngc)ql(z(=>13r8c@&EeiI{keR z@N4VSp7(3n(N?^1pwV#-@LeA0h`n-0M1l5g{ zbngV(U?b5v=0FSApvF`onwZ1oug9q|LlWC>J7O#mM%@*Uf%}hP7Ta8)2Dtesr0PzD z=uf+(E7MpE$Wf8qVG^-nNn&ro?e_w*B($?l7|d4iN_s(Sk|CW-xX)}hr-0}#j?!lx z@(~9hq(G~Z_y9a*D>)tlGPapG1jCPMYpXUn6T3aYW>8VvIi!^kiVUq83Kt~xABOWNWm{Ywea*|~7|R5- zM0O&wFBF?+JO}NEJl_jD28f=m-J;5(U5bT%#gR5NPt$Sd{XQ`m($N5oBL0Sp7x<{1 z4&Au(%0_&VdxK3Q9LsAWEjkoSrm)fe!*pjxut#v){1>g}oM5`NGy5k$MO!eE0Zc)- zI8f9g4o?cQJW0`E?-6(llRZbGH_1Vq(i+WWA$QMsA3AZIM6(>{d zeE-B`nFq3u2+u#@LYz*QC(8>SEKgP@y~Tk1=5)@78aZekT#z1~168)6NByp6pFe-$ z(wTks3>UEBqmbDQOpfwESEgx5f*VwaW|+d~Lt2k1;C=uG7z6MeZ~yeK$lI?#3r@^Q zzo3J7Y!=6!sCJpx*i$e{%>NKPh*JOY3w3gDj^$rI70dFiIXhZJ6=o^bffW-G3H$^5 z|HQ8keF3bVc6M+6`L+K`P$LKCGk&=e|3JrMe)--9lT$BTI0a2vrG@X~bJ9g8PR-@k zQ8_OG^?wh@zYIH`9Ui!i3b~Acpa%`2!H@7899Jn2vEuEI_`!A0;~?grxko5%g*K5z zS(MuX%s(x2$pE-u0_fPatXf`B?PIVGX^^;sl=q2oo$ zssB?P2fLN~Hg~lPG}y~lt`l?iO2RIPnXWIkE+e?W~r0mI!lmRn`jvBa>aH?x>Rv9U;0orEtNp( z==(TEP)e>2d>ZO#NR$p;hMoO#4!!;I@T9N+2s)bpje96yJudVu|5kYgFv=^Y2ojem z@Jx^fM>L^mqrxNZny!yQLiNVA3bo*fzApPROap`#9?a3MVH*Lpkg}1sz@I^+h`@yy(GAI4jEx8eaypZXs_`_+We|usdbl(Pq$iT-PXWY3=zf!5=BP;n ze6(Tm0F<=<`H{$RXb3`)ICD9kw;v3eJ@)nL$8sE0wkrv;8dB%y2J53Rmsth59t+xl zg*+BM%*L2xX%e=}cxuLA1+7t4@)uj>2PGro=C4Or+=NEoqzHd}=0C<&3^seCEe)>U z2OO>WkES#MC_NDxm;URUG~kB@a%UidCIW{a*i*YCNIu=Oxc+^R13 zMn}yghk)8(20h!b`RkC#9jV{+~_^E_{^!_9P_5Z&8CC42PAP zOy0&yY*ZgO+NwQL2Fv64Yl*}4Y^F(O%@IfVq`@PT{ZU+tI>a+R%q^-xqrl6sKnJTw zT}^K4vM4sXO$J(#%to19o{w|@ra7eIB9$-l+7hqoJbQS$OoF2c^ejv<%tI%e18e-W zm&E2|g=8al!dHtJA-fFUZQ>0A7Zb4rnfBvd@ogXO?hve|ghe%TMiQ6|CMkKF8;@pa zLNwN0tTJYl0|1&*5a(XARA1m>7=f(HUDFb2hNuxG58wC7!(KS6bR%r)y?wiJQ1oP{ z<2KWSTj8RNy2DzURJk@EHXE!N{E~8y`|w%dv7ER4>16N_%9-%Sta$i7>jcBj)g|E% z;59JFYq41^WD(!VUw}bpJW@l*z5+`J~t4|-Vj*DsK@)X)Y2`EH4K}CeL6eQ|u`$XK#e`eDwtEXeq z2W|6IwMgs54QP-1^inb6&X3hA(PQi`x&eTU98%=9V*xv8M4qsW2WFl}#N*j!CQJXn zB}M4~!P1AG{Qk+(Q?kiaaC5>*D7ytzYebHk8kP@p1z)&~?n7VdKePh{rb(96dXF$N z7f~m{wt-<2W{NNaHIBIt9rJplFpJB%?Qv;{;4=jQgyu*SYEhDaLl@AYlfOX!xuZC7 zj3$m#l5J5@iDT#+sEnyXIYAJudZhTFf-FxI9;5vnn}R)Gh*9FuQ$hpN57l49{wzt> zAt?3|(;x$@VzI;&9=VG=Miadr4D+%4aknm}Bxwl#g@OE-s3)Z|OT<0+J7JFVojse98ANf2k@|58!(&#q-fSI_Qk)j7yVBS|t(%3r^rFX%wR18pr4o|2KD@B{W zDTQNxV3WC;=Li7;g-v8Ypj5)2q4%Re5w5MPMpZV3wi$q$&(IArfJ9jTfG0HwMobAn z+mm8jm;;=V+wh>Q&RsXdxeHGTvu9T}N@#f$y@F3-Vahkv4OKkA;pBioC>$@Hys~=X z>e=(BFP%Ae=KShm2>G|hXH`2Y$i~e$gp5Cc_^M5mhQb^~B^NHZrENH}Bm^xJNmgr} zRVx{x~2Mw>P>OgV>`2%-9>@0i%L5nG+$0jFBmLz)-%3VCLzSHd6cc?7D}j8R;BN zt^u(3phR4XjKpj!pL8N2tz=^~*{jQ*rfk>6XrJuNP_mtc7=pjfkMf`a2~jccW~hs* zz{U{2AR+?U@Z5(pgA4j~N<0`GOzViFwPv$%3#;&Ec1F8$Re@O#mcFar($ zPml-wO06Nj5tS@N)zkyA)#$hjWCZ;_cQy4JIH2Fl3L&bvWfCMdWXkgoy21=YR0hpr ziWrEU5C-%<4DF>9I8;F{(eRH~XTT;E5_2sWmTuJCUci_6MaK8&}B}SQl7`4y@1X4kbNOdu81;`en0UDMULPLD?stzLv zbpMTo$giA&;}^cAF$BM;0)c_iLyr1$3#M!)GcK$m9*Pn;E@vrhIUC`*){)EyXP9Z5TiVp2a8l1mNbz_)gH;iAFPZjE{{@A_F-o+jYR0$aNO?$Tbb6KE@ESEAjrZdisI0zhmX7f zA|X*65dLhAn)C9lrjjvT7xqG|x=`%sb=-}nuLdVVi9}lZv_vm=cCBtM9Oa zFU;i0nGg7-@LE{K$fQY2A6r!Dw3Njw7h{YSk8rI*ciMSY9r;0oya8_|_*MT^lU@~9 zqQVT5K-lptVk7+_us1xVFR;>_xcCg_2*@_Tn@@U*;0!)XsE@eUaLk~bJL2lbBjvu zkU|QYm@?$dyXKe= zLc+AlDy}E5VY$`Q4IzilPJ7gH5BEUS1Ds*Ens^Uz2`qw*L3Zp_RsgEKc*1y`1_03N zh+%xgEazfc)sVbE#W(--yl{b?UH-;}Z%vu+);AJziYrP(9L&*K;!%idR{u2OLL#{T zUJ09&5t%?So6wWZ5g+n`4n#=~{4GSZI62a#ikD~qJ>oxUl5=i z_0bV3fCk*B8azw}ajY_e&TJ0$YAJo3QXWXz0D>aW^EXp3lTj2+t=<`!D4vImDLk`Y zMfC5aY-WQE@2u#82H>=jUbp}lz)j-Mxdv@3RumjP{l+K&#S#%wBxaOOfO;R=%Jml9 zM@M2|NUssGb_~_}MNP_uUebXZZ42NRkN8h-9dM5Zen+Krrvp!(4ua;dk@P-k1u5-& z3tFsZ=|wQ4!GHNmkuJCgflw=&_=gM8sg6P=Bd1>*?v(xhzR;TB$yzs(wFynpY{Mo;_a)#~-4}ioV070Nb>QuRQFl3)2pca{@ z9HZDhz${O$)LLFIg7osZ!wG6tq2@f9)T3>RD#yM@swBk-|GXD805Rh=LsV!YREcFm zG8dG&*i)|f{(GmtClnNb7=D6JXw|gy&J4V#+{qphaVe6(oa(v{3DO_KPb9P zbR0UwElf_n&#y7qlY!n^Yfz$$I;LmB2XYqg1CwQeV;HWhquZR-gxC&^gaGVDDUw@Z zVY3`QbCJTpeQ1MKIFlkXNXRf{)8ZCw2{*{eO`ljEAb}$F06bm7u7p>D2y`JYNv|?C zvd6$wwn~N0J-KkbKrlVUFJ#0+vX)gB6Xz!|;G{wqtrVJ=cY;42Xtv`cT}UdJ+7q$l zjcYvVk%S~^FdXHy@#L;D0tb$(Y(Zo}Is(Q8N>Cmp0XQ2Fn^6ihstzfh9~wcS34joS z&Cv{)g*A15XpkeY=FCGXB-l7ItA%>zEcAN!4;w7MUQvAf&kPy$_ zqzShHsd1zQf%i$6zNRydAo&N_h<=1HYz$0cr7@7yY!_`7Vr!5m;$1YEaT_xaKiA25pXLlCd4DRZODWQ{b)Q97*L}YfhtdEHQisz@AGW z3ImkuLk|k#FYyanA5L{T9}HmF8nR|2=LWpUhe3y7xSWy$7!v760*=3^iWV4<@7O~G z2XHP}Y4^)7(l_me`|d*{3C7+OM-x`Yfkg^*Gsm&Ml}=u`aQ^vxpO}~>etZ6cWW&85;Tkq_U62A=W5AqZI@ROBq=3z3Mb0=|92 zV!mHrK*^0zaxBgw@M`6W3_;$7Od!AvN#zm0h#}a6OqYuf!cAl!^fwLq)oTN9PCjr9 z7#SXVuAxXy3?!0-v>)~+dkv+hX<3*uNu%pvs4U_eR)__x2->JPI%=wBp|(<41|c?i z7!xv}02nb!#|xf>Jk&BYpS;?IGSctW(GvP7Fk~?^ImIXHI3&H|uUHUNs%?bcoo$tw z!zc#r3r&#b&68+YX@PymOvOd}x7aC?RQXGD{FbROobDlTXlPb32$@QWS27r)9BQ0v zLVIqzv~Y8V5${h{c=V4tWGXR3 z3=xUHa4g4cvZ>ZEtc%_asXU6mNDp55uRp;FpmgLg>+MguVF$3hlq$G|YE|*+SzN1+ zf2C_pij#rCVOuPOP%v28JQ1hFb5WukV!}J||McZ=PWXTN!iAI1#y8ICSJe(dX@cA} z0UD@-*>JH^2>i`LL+iIH*mpBOtQC>seG)-0d~;1lcu-Tg^Po?desl z4h=>!F`Q3Ah1g*P(V4PL%RKrmYgPEEGVU30vmxV@h0<7oR@v<{V52uqD8mfN)p-Kh zP#3fX*P9hExzmf6&hjCe7XgH+K|SDr)#;9z^U$PA?0Ya_Cra;~bR=Q#m;qtf1e6#Z z<1M_W|4LnmX@*!4(UTK&MXoXkv7F{7a(IBY;n4~JSdIwpzfv8r0(g zR$@~jWNYJM$ncz{Os<@z8D{0$6Weee6I}?Rtn<~qv*H$&6_W~M9v~?^dujsEw1;#g zXKDc}UGyqgcogk6ZyF#a$%9+&%(QfxEir?;MwylEd(oa-UCqb5NXNiS1VJ|Mn1C_L zO8Oaw4}imhjNMei$-|BmbT>!}!!4D-Ol6Zw$J3mxzp=@&@AqGy1d}5Y@dNlqv2}ve z0#hm;BR0l_L*v=4?Klv6h;~=QZ<~%00%?Xgs}?MgH)-w?2SaU1qUxHt8$iJof&R%} zZNbnQyWHf4P-+C-9sy?z!Ax@mUMtBcH@pr%lVwYh#D?K>o&Y!$ogONEjI^4o2nL8p z5MklY$p}tK0Ym`z!kCa@^d15|=Am0E@Nr?MQ06pRU-z0|Gjzsd5Es3&s19}a?Gzy3 zhkcX=pNd!`>Z=(5pu{z*2{1mJf=Sn!9)9Be@nA#+!l?n5YC9K`(zD z@KknkH=|<3U%}BZ!ms$i8mdEN*oc^bS0~ ze&_ac_wL+Yr9f44xNLDd0frEzFDwp(Z}Q6lH4PtX$O4E^*LGRiO9tEn-_$om8!3*h zQW&iP=d_axVI|P1H%%}V!R+bO4AC)-o9E+1Ly(PKW`fKyI{QA6V}ZSl2x|habj17R_whHMk0YU@ z#7Y-CG_W7?o9iyyb5@Ki(Jdjj001-!c{7fUib`&2r*aQ^Ttl7M>N{o`1_%cBY0r^j zdN`~yi>z^Phk{KwSA^zA4^fph&#eftMFAO-3H95=TeZRSp7Wy25NkAE%+e&hTOkhs z#7(+cvk^RIl8H4LEQGwcWv5<@+}m_jzngPFVqbd;*nFe0G;ni(ZY+cpAT(NIGZ4rm z^n7nV?Y$afMt^iRXDdZcGF?sY1@KV)%0xCKMdOr`RcRVF*lS8lP=zxH6+s6uHc=t8 zMO3Rt_iaK1HoL6LA0xb%yb9ja*V| z_5+na+?HMQ&%&7K@(`N+!-m171q!VNPbj8};+;jT4=gEYXdK(nVfx21Gn6`$06+qX zNCUiY@+(>8m;Li$+`B8Ux~Zi#jhFxrI`qi#I;+c0e!KPeZoDq;t|1c^@y zG0MHPf~*>DQKbSS8kTF@CIZ?>C#PzLtaSQEI#J^Qs^ExQ#n|-#I}-G;a4F07YRtYy zM6?i9ZUurLiB{1~z7h#MGaSc&g4sbvWy;8dsf_03j2I^%L_?SLuT+O>XK^djNrlj; z9YrlR0ZI(g%E*v10RPNPS{PhoK(>RA#@hqpp+JV%Xdk&`+sagYe`|~k+SRCMdxFK5 zid{$=($B}x@;&f1KJ7eR02>E&u-Ud*b!nQ}PGV!4|QkfR)>mSOl9~=tX)p*`SW2wN^(?BY#HXfB(z5TiY z0Ko@OTsX*isv}eR2$AA?QqfMY8@rT?3f=t&mlGBlc_|chGasKiWgty4lOXrC;TdA z0$t+L;T_Zv7~A%f>K=XX6o-dFDJJ>mm*D#b1j%x2lKKUyN^bljWVlDwrUJ&-*5IPUU4#Hj_11r69^?Dt$eKxRRtoY$${aLADK8P@fAe zQ3Js$WCUPoX-~8R22|z@Z^_-Nwm|^&;gTF^-~<*3@!Dv@HNSGpWpOqc9cF^Dq>g*N z02{MMM&tqwmZ3!>B@*p;kX72Cdxj#6PayhUq!$A(#Eazt*h~+`R_x;+cv<+x8l&jLgL3# z+2f8_WZrJctvC4v%*x4Q|K=|7M!FD->ZnkQo@q$+@dGXpcsz;lZ?e>8xFwf*MDy7$ z03NEFl+c?r$RdWY)3LBO;(O{>udiKydA+gMWg-h~rv!(sOg;oB?n1iQ0y)$n3j4cD zH)IVuJ@YUAl0E9(oN`#)NAmB$W{_% zV8YGmpSDDQAU)Zc!TTUk?H0u3ez=z{4h25~?;<#!ZInDd3S$}xc%QGgb!{(#`N1UM zy8w4+4Ut6{K!gaxJqp+1HF6Bv*Gk2S6Fs2^nm^&$yP+z?g~F`eTuRdOseOxP&0@Hh z%Bpq=e2O%vKq%orSt?3(G+&6mfrm*PMW!-O4+bZa0H){>NFJBpGI<`fK}dq+IloX) zdy8liyg>Q~!T#S@5H7B0j-z09I8In~<$fF%p%y?g$gngG7{sowWqe4UzY-w!j$OUW zuLx6(FkD6gi$SYpdW1%B3yo>c#ap864wb?G!;lp{dof$y@Wsg}6Fs`7OLuQQ;Nz`_ z!DWld;+^Y|*Em_kPAm%~Wri^{8ywA~1Y`#^8;0U_up#z9{z>qOIPCgQ!3ARqF`VdG9ZC-ISsGaw`OIDu0ITVG{g6HbPFT9cWcm4>SqXATI}Was&@318^S zb977!J3<8KKvNmO#r|Q?xbXt2rVmss|h^TYr74eL5ET+4!XZn-Fz2 zF2G+YV~&!k6>Xz-%(5xVsOMTw4j%h`y+9FY4jzx+`|T%xXLrt{w#ZAVM&@=WC;t_ftrFl)g$+T*+s^3#RjH8((vbEf)*u5hrtiVUNSG3^lN zF&nm3gO41Z(mN!-{ppE#6KEVrjmrqq);SCJaa1V~L{NcFq((>b*WKVc6e_wz^wFNS zaRSPC=Kk%wwy7w*_4d+{>Fu@GuD-m!Hhi!U)`&6WYfvM&Ws=Wt+&?7Mq%k3N`1&b- z5ij@gf9ZB}zFzb!(R9sEd(*CWLLnha?*Yi`~Da+QdT?Oc{nW zQpb^DP`P7HHt_^$XpV=Z@MLGEurw*-1fIlzp%`U%yRO!4x}p&gpg|+Z9*gV=bX;53 zq&49&F6FblBc9D*4ywmsV7Paj(%h_RN6@&scn6Yk-m<++@RkY}X(!XQV^ zSq|vR$>d28*=Ckou5>_XiXFDJWSQKBg#R82Y`%-+5QQem=XJ)fM}(WCTKu{nPvod0K+>H=#7yO8V`D+Bazd}TNRvpQ{_Nwputn)6L$du zskXS8>%%N%E15>62ut4{HvsB)5hs>Hm2%`$F!cJW^l6a9hnVF*ZN|uQE5zalzb&ac zNgZwBs`2eV1SB&?s3}Jk>TXqpC7&1TGhErWm6vMsQkn8ix%v-6+WLK^e`rY_FC@yu&*Vq8biH zXj{V0vi8{xukG6!*ZM4`h4+7CJ6PDUVoSO1yJ5E@JgGul*cWPOV&gVV_HyEuCUzId zp?H?c&JerI&_Yp$kk&OXGv1p9NWG$b?BBoJ<~WCSYA;qK!`YowWm&KX0cfurp*%_x zy@;ojQFx~#mBA?lxMU=w0?i@=8vhB0P}NnA7_6#?2donE;vhjY8wUht=px7yNKsPN zQ$O~0V+`GGYaY7q-`42pfJ}^o!dZw%G{6(jNKD+~qR=1>whS_^=fzx3b}@}^bs?#> zoLFL#G>1a?+k$H~`C0_ovD<(W20<$Yh4$e^qgkqXY*@hyo#j}P3)sx>xX_@lJDwH| zDYDZNP#O-*18`}TsVWQwvT5z$mPV7YMwihv_181%aH(hZX8)3 zRNdt$jOSfjgkCUE0z3qib}f!u+mYY|jlkuv4<9xW{FZ83{V=soiWz4ZmbyzVu3O`R zvfwlUJt-W}a4634&^B_nvb~$YhsyCdP5JZUu)DG3Y~h)l3cb6O}hVPohm4JxY7n1G+^wu5q*8f|cT zI~%%-oyAZcuB*S6jOq#5%!pxd*M`b7Svc1j=DSup3%W2=RXwzX+8+pboG0d3)W!%j zVU!mtY#0^QdpwP>fjIzG4*&sFA_=$Pq93DhlEo~-114^#)eJ!r9*p7CZJSDPv8{Z@ zjL|+g_w-wb^Pq8oKQ%22@k~=DwoY*Z86ljY3FO2%O(Y>5)GdOVLzl*FK!CwJiJ_$g zL=VdYOG0X>d`@JV>H$8T6)?tS6c5s1W?b|Hq`YewNn0%SKz_4} z!V`Mow|z>_YBH1bgX=lEdnjv7f};>A^3bi0QSrgh`|G#YH}BUe>5>v#kOt!X2w^5; z=81H~KQ?F+YANVp>ozpV=wkNd^IF0|BOVu@4{2Ha;6fVIl5O5H1SGg7|G#b098}K?1I+I>ii|HYM;PQcrg1SpPQ4=3?Jrz^)2U zs>?ozpq3dt>|K`6LlY!><+`#-yf7)4@RJRLo=%*(*RmdW2$f$x+~b=E#tW|l4$^F zP7n9Mj~6hLVvrfk-VJ4S7c>|tVA{c)r1yv(B_VFBe$I9Ij%inn58Uys_qFfd?XbY!kqW5A?1fTNH9#@W*zs`cS#w zen7!tUR@c_B`~V=@Q~=xLbTC24a_Tg4VjTPo!O4tNsIJVuvk6kvJ*MYb5Ya!(#= z;z706miQKsJdtH|CEFL%-Ryk;J z4)_uDlg?WR0X(yCSC2A5x?=K})DO5oB8UbSVS@(|3Gy<7!#Fa-$tfo^jakUOAQR!M zWU`fu(`tXa<#QNS034oD5PC^^Jj}&ug;ShR{9A}bxmtUM{WY|ET8=7}o)STdmEs&I3~I$vNK;7ShdC@V zmqA4|dNR#VXiQ_jSmm%yUIA9*kmKdLW*5f-gJMy!I-W6^!e8M*myiK!Me!!Pkx0=k z+%xW_6fl9VIZDW*A_S3Y#DN0#Z;{RVfU>7gb!92$v9wh%rNF zc%0phohZp~BYU0#Y!ubd(8*n@0hu81PZkfMI^}h4VF@rE!?d&KpSy7B+{x9m7tUY3 zeEJ(_7VSHw*Ep+_g%3`>aN!i)uskSvb9(CRc^}l+IN_yTSl|Kj` zh#d+fa=1ttT|@fu-F~yAQyb8qqeUfP%UE>m$>P-?#`8giK;H+17pe zP;h7_8qnTR>T&cH-y_|)i$3)*#RvX2tZ)Y`9+f#ORcm7c`fEowzCMYN%sM2Z|pq7HB8uos{uyL;%p$ZX`SDi3=55_l?LbIgAC!ME!(c{j6()H3~Qcg^PpbZ$nmU z$VJCeL`c$_hLY})TB)TkJMijakvE>2G*k%#<_YpkH?B6Axqgi!2}(1Wz$ zg8$?_g=DqR%Q4*Q+HtQ&Ooy|WjM!?-;u@hi4S^(AVVu^O+$h)K0w5`(k<{f(5RG%& zSn-l@l%NK(k)}w+tl?W`R@KnVj{c_T6RRT3FqA@@5)rLyKvg^$rYb=2W*IQ3PGJem zGV4Nu@_lR01&FXFgh0a#bnnJR%K1S-0ZXrhV+4SJQRA6=^z*hr<) z%8BVzF9YuF%k6oASaY-e1+|63OO%y_G{28R2pLm$r4$XfIU~A}3uWUlus_PG|G-i+ zjTVs!`aVx1GvnA>z(4qPC$j_tmNmyv}Zj6bfwZKNSzh^`j z-0ek({YYGb>4}5uZWsvGu3UPd+YF8Y&EJd!JnM`R54?Q;{@tw;M~}Yx>Z>d3udUs_ zdux5=`kmWHb!;(BM|4^x*yFld6X5}5`2LTI6aETNlL5CD2pQEeg&uE$4S~qzdUAn3 z6=hPeVd`-}vsIE5p1y7oZw}p_kHrsCX$YzpNs!`x*x!x7 zX2%QEhR8ts3H+0KkQ}N-n69cciq5JGA8qv#jpqzFf`WABH1a5pA znN6w{A=)>OhTlu2rYh@7tW(jv*JI2mca_M2e|fllAdeXC8Epm|5O7;m_}Bg-hHU$* zbTByt!j}EGyEsl%led+EY*#Nq9C!)I00Ap}cNqBB4k5;ta_QMar6y z)q^^$WgLTAAuy;LK!@#Shzx^s1weoxHlYBX$|UhPuDRQahkX|W89XYB4l(wRkAQ79 zvK7}TP^|a>C5+T-`cvnetl!@*7cXy?rlYF4b_elSOY8}R(U#BDVD-J zfgJh61kwzGN>EW>wa@WHSE-Y5JU7I`-}mBb&1Z?oBzGbKz+`&CkC+3DsF)sz!)vD3 zUY}-`JTP5)b>r5J>wIYA1n2x8I7~~RqXHz6E(LU~#WW~sER=Dt(Cav2XV`_!8PF`G z^!`350;6b$usp(t8%`OJ_+u{k2T40r+oly<5i!z1%Fv!+n8c!3!b53h60wvv^ck*x zRNf=n3IyPcL3#s1C^f+OIw3l*XF+FTz$yoz+(f?=nP8-`ZrLz26_>q-zEliCW+?;d z2-vT&_dgik-e4cM$IpYWs2#|dg+mMi$q{~)jx7`AA~GfMvNJX%MS0B)}Gte%OB9dTGbV!)+BG5tWHf98u zZ50IGK?sd+#iu-ISLu!Wke4#FNHo~QP~|lcMl7HZ$T3OI(){Tp4Ei(U2aiM$bRtrr z1zBL)a^K(){jrtpQoK7$t2&0() zEw>g0ff1&mHPj-@1Aruk&`~g{m1{(A{;_T^7=Se>a{2%OPKWkkeJ&PqOYW zgE@WHY6?9dUPbdA=|pZ_^DqkW!0eup%Lww^kv5C-&1B%Y zSEcO&gO~-Or(@L*Eh-BQc$rAh4JbAG3p6q)2@LbhQV8ILZfE=L4|!x(hNMRC84Ap9 zWkXGHUyIv7C3v85G@Cs{x6lGzu256Ti{L2&J((19cr;zA3k}L7Lv`j1GwuUIvl_v# zwG_$zpdpszl|kDdp^`pnt^rzFc*HLxLRyCvd7`Ci(2in`vHX@qZTfqX*@?qo&mc_q zUK|Wq87kka4}+hwI7kzz2;{0IiZr@BPQt$++cFpZhxWE9Z`0KC^13tOkc$g!+@onah{X@+jA8_|+saiRg(|5Chm??h$`! zg5#Mw+i_Yi{O9ulX<^Rlp97S%g-V2i2e=Ss@AM}S+0LP0*mnFukd{GnW}1OZUl>5x z=)@)_!>kHgKn>5aL@`vu)IfGgHl*0xf&IAax?|0q@W39-$$pF>)Au-A@PN1h4;xT} zs#<&)Lo(|2;cLw=(Y*rlLWFn|2tNwBW#H&SFbBH=0lK{V#Pra?twXRdj*3;1gRV>S?zL7Xm=EzjWpNY1Weu(+N85 z^C9h7Y%x5|Hqmn%_wKP|I8MUuhp*EKsOUK7zQ-K;@@36OkFe*vxp9x@hyxdGb`ZdR zVy0Wo(eTBVhIfheOi@HH-4hhS}WtI};=n+7RX**(Iy&%mk2R1ui zMD-p$Tb@PllSQxIl(7e_@c@-?d08<63G7lzQO10b;md`b|dBoJX(-;aU>g_|7L@C!<_SXeC3&?!sRPrJ7; zHxV8#r39fuxTK$MnNEeDJ1ssFFWsz*0K_B+I?3rjU0%L-=fVAr&2_!=*AFEn0V64q zhCZiDG{P2fVvCcCO?3u_lj7yV%FU%&l%gDr*|G^mlI9|(qxhw#2A*?vKAKQ8?#3)Ke~(&^JgjJKwTE}TEaZ^*(RZF;s0B8iM6 zfGDfz6mBa|DQ$os420nV(qWyD zgakFQYVfI)$&;7nU`8hlRM50`N2a zrqM!a@hpl1W|`bhea`z)?!f+=^*e?NL#7g#C789jAz(Ip>L*;P_vWz8R>u* z5g(+4(M;aB|8g9s?W4iBHvaSa_orXif*8&AFgnS~gK=a9soIfkj_ob^j@?51bZMt_ zFKi{#p1wi8x&GkZJ>K}ey0N*ne(yd?pUpt1fqqIV&`WPQb36n&363)DM`MKsCcs35j-W~a9JrPzL0Ok16Ou#BvBW*;1Mi?_678uVCCC1gf`SGekB zOINzEZz28Et{pT;NQm=?;ViN~%Wg59G*J+-sn~-s0)>*GVV*1{8T*`!%?iR-0fLA$ z7KSLQRmJKN*25|#7V$9c%R2o7BF3fub_9ht>5PyFrD+faT9HD~omP*!)vC-O;GSYt zDU7?Bn)ubsD8W{rMaT;(N{2z(r);fv727T4P5d+v*wBPmW=Zc4iX6#)(v+1+@WH+8 zvq~P)-=q^ngrEt+;zu1GAG8;z#ZgSXd^)|hcKwyVesJf0Bx$HXO^&VN0BHCW*M1=P zO^hG`2!zNs9P#{+yT!)0e?uef<@Jn4L=S}>sie)NwO?I>FzNOrn+y?Eum3=g!BLPU zeZA`v!G#D@haEW^7!iYGpRydCBR-U|=+HlDQUwl&+G1(C8I~R&EHAgvu_J->4&l=Ch=d*QPr~>Sj2sm~)0%d6H~4S%lUzx+utf*Av=J+d6qgcLp#mD=UO}`hNc|QwMN7$B zlPW?1Hk2<%q9?!?*$F`dYGU^|#B-IQD;U-`3i={)bPb^9wxlQ83_w*)xC>t$;V|NcZ(7>mGCNe(#nkvdhQB-*&;Vqs>p!(_0NQ+yG=IU}&tYr^n}|2}nb>DL0f(Ktev6Z5imoP@Jv=(k37t z=E@})hdmp;X`+3iXhDOXp;hEp?F?#E)OJI4Z_hR|fj~I|hn~N_a((k96N+Idl5&xz z;M-3M74x*ghmpS60jA$_+eUwMTKs0cBx1fn1mB=VEdt3t6wkA3SlonaE+v- z>USb5$oar3?)U{h$d{U>&#$db8T-BTCv_w0?brFD09)_ZG%K}sckiU<7H>Rme1sbDKjG8bRk6D`ArOK#ld#8YV`9v=yf#+*J%S zQ8y}+f*?!UApzaTCnjfJyS{!4g0YeaRWhkCLqPBHOobD!PGiNvFr!~^OFj9g>((%Y z2KDKnd?;kl~Wj=~}o) z+G3fA!zl>(56f{Xk-&xz0g+-&3tMrFx4m?9NGq91pU z!?B_F?&#>d8!UOV;(c%H@V+GNm)F4hPN-jjc8HZ*fpw-3>xUq08s#QUS`b38F!FcY zt92aLHcPdHe(7Qajf4j`JnW4(CqV!>tye2fkb1LG?}i*6rB>x9{HGG?sSs6?HNnw= zf8gNOfq*sBTESC+Tu9hF_=;Tuds;kl^w>Qfrnwwf zTZpCClbxC5MX%u|ECldF@fR`EAi1TMLk_sr$>o5IVs;PQ3!@0ohItzrxl0cupClBd zC&6^nB_LXU4C|8Oof#J}VXcslWQsJ#YLv10CFSuCQmx?u1D24d|LO9D^YKWbSql(! zc_j8n056L=;L|EiY#QokXT7DMVnX7(vY0OJ{f1)ZC~3FjXOD6 zh_SNyULPssF8%)Xmu`ON(B<`e-y{4V`tEmrf8)E;?;JX}_S)(iZxmeFxJyaTedm@^ zUaO*t3Asw{6UCmKJPbMHXP8hS*tKie!blZVm*Qbd**$q^8ev4|1V(TbzC)kXUfiP0 zSRiRK<&bZwG)y8yBNFLLYQ#u1#OX|5c>GC&_)%;g{D{DHfc%O+y@4rkDoptZW~drY zQV<%tr}Ma>hx-_zyo%=No3?G#%oDB^t0x635fV9b_x~sFeS74(t~1~IC}rLdq6Q*q z*>NUU_VqO_QLzxp(ooXGfow1>vLz8F*_`fXY>hEMn-^m#P-0y`*NP_bO_Olgr5l@~ z;TKZ;M*J#7KFR$(>sfp6vrnC>Zc>6LzyMOS&N+LpKhJvB+Ux8(Ri&cFSwD67oAxRc zMP2Pn-W5TrI@+8Lp7YkY;l?ivXGk01VnQBZh5T> z!^naU1xw?&;P?xvF3e6-<7v0eZ0*yc1k<=E7qhc=G+RwH5-Hjoz7qhUCbA~ngv?eT zVG)~NjmbOh==wW_KBuq~gnn_~jcElzBFH=EJ@ zv*0=4yz5eHHSUUWLos(FZ5RMw$a3I1xZq&Sq}eKdf~UwiR@pdtPf#zkEQAM99-6f^ zI-P(3ZfWNp5qhT4z1XxcJSEYyp+SoVM<&4mWeaXN;bb=JwR;jGf#(D&ZS~oS>Hikr zZ&-(;EfEXpAI*QXwSDRI_U0R#KfaE!6Btj(WT3#(efz}K;7D_6T)rSYVY`WpT2S0g z4pV?hAI(pC3{KVzpuYLF?vqjfK@f%!qPpxMCU67oDn%UQFWS02xw=fLKkgVLr-+7!#fZ+nF&=PRw3YpGc zT&Vt+Z8{Cl>ReEyuq%1SpLxT>V0(idc@xzdB`5|)(?jn(Iv^m#aF=ynW1*6fQqC)j zN)4dL!1mmaPP?EJ6iaEV3l!I$ZRDH~j5lA`DfHTiad_Ta`UG-@3ysXPBz?IaE%XORd_Q0#MsUTD817K+7Q zAc9!Ivxy%GI3j z?LX-;yG1=OKU8$wwQ${E23u0j@AFqm)+K8*FlI&_cV}izN_GQ?8fUUENEyd?%wM>I zXWF_M55X_225J713S7=IK338l*JMBDEUKUYy#>c^If&!;&UAYqrgPD%|B_a~tXC=nhq$KYM zWw$t{_*_E3FHeks>}(lcdusM)d@tacb1$LCo+ex*Dn7QH7;hoqAj!@s|NWQoG4e== zZgY}TE?>5W&@lZb6B)<_LmZV;L=X%{=}tsa%hWis6Q^QU%7RD{z^JrnKwa(dIV2aw z#=m*6_;~~Yr6iq8Ni1OIB}&Ji;zh~oSp@Z+@J4mZfz2gmI*?}CzCy@b^cd_yOD)0P zC_k$%%#UBvEZ_r6HSzFkFY;%JMru-xo^KxL2&IWRE(=1}krYlde)pG4w#*PZI=CaF zxYn^58Gsk}3#Fj$bBbZHcqupa^nruwJSS(6gglKJDC(2V@Fg2+iE=T?SW&4FT)xdC zY7^pYF1|2U$v8fRQp7E)5dopi$lBv5yw6?BzFzH-E6Xwn^%~mM`B8>3`E-^HUdv2zG*j32!To z%mN(6rnrhv3I!Ly2r!(Oj*b$>F1CAX8ZX?`J>V>4QAa3rEpD6*uv3r-H4X=-7@}Lt zK5cANvu;nO1&9y=gWsQ@xWU7x*EX(he*ePpd=eacpfMgZ`nDz4;=mkHiOK#77ny0! z*DENR~&!HFD_>r!zslIDRD)%E0#{%kDr?T#dpr0Kg$UStMgrM$6dE( zRBx2A5&AHqW+l)NW^7zU97K!Nc3|-x_9byzyW7bf5X9CnqEdE#mi5^?~+V zCy2pW3Y@AAukb@_7_X`zEHdx4C`SD-WpM4yS4mvp$JYP1#TQ%dV2bh?C zGh7jy@CFZXXxPUvsSytrrl%8buFEX+I3Gb?DKjzM_w)vtFbLtb>L$jsMu7oA(u)Zd z-6E8C2{ox4ce{5lq+m1=(waFA6kdo^Udzc@{VvgP42Zou3-&r={8#drMb_95Mu9qT zh*k`D2Ea7EJ?~P;6kVL0rG)`=RX~HC64ogSGDL>~`3b9iv&gd1XAz@%e3-b-&>?Q% zf|AS++}qPFUDP&boGoxt%BeN?dto=X4`lSmv$&Dq)u%?R9-FA@Vk-ICqFoKaW4t%o zj;xv&%RZWfz>lacoAT6b{YNSR1nb7S2KDv9!H2~*F#*F!OEBdimz16?1zlpK0)+4` z8b6aTaWNN^WRFfnLF2DD*qEDV6K(;OkOcGuY)@4o#9TnIyyey^#1?mIcaX~J~hHKbGWRjm?!l>~L_k)Fl zRhDFe)3y^P1Uang)dFC}Oe&t>1U$#l_abgo3?Irq4Tu0@0_b5ChHysxIcO>J9wo6+ z_hQGd=7&UbWo%7NKK5_G{!@mGtPA?3XwwB53}vOi&)aL5<71`?H#|Dv3KOu(&5$}b zs)D{6sVWg&XvE(iHoX88h=u=ML( z#Re8C@r)3HQ3gW-WyQ1XsYEM5_9NV}6P$vsWU@b@>s_sU`W94O)QPVPkyK3B9AYFI zn+3YP#k2I*2xnSzo!IP4dl(iXd%Lp4HMf|642iaO-5+w`3Ke?$(lueDXK;b)M4lO1 zU>Bbn1{~mQf@$%L!H~!bg-OAk5Fb+3KtSSUrEQPxGRKnJ%_@=^sSWowft)Z&vd}W8 zGENpnbj%1JFm^$u zR85r$a87b^DBrR`NFIBFzdwt=Z$I{Ldk5cmZTp*yDMsr9UprSecHZPW(7%67{cV`G zbNSjES2pMIQ82DN7FS{+LtnVh$Wnl10u6)ilsH?w0fsEp6Mh*M1jOC2z>2ZWn(B}~ z#{@qB5-}gmAN&6IgL_co?;k7H%FpkIn|V)Pyo;eVqd6<)Gs_8}bc?z$_(=WL8&`HO z^G&`d>rd1&s3Hy>x|MenDuAa<@}DHPB;#OcP^r@I#TejJv0ABuYjwe>p4{=Co{V=% zL|MH!?Plpysxac5t54YB>3cy`neUnb?24(&4huSUPh?a;_@~?ix-Da8g=bngZ7ODZ zm24?wC}lLfE(}s^F`&DtjhHJ~;#GD7(K$6NTZd5x6Co9Hbu|z|)8S!T3~z@XQ&^0P zl|<=X@khF(a%(Vr$*{gy)`SxPuT$F#r+zjoDztvhGU_No^ zC&Vx~vw$gZD8+<#U4)*0>$#WCJkKD+adrHyTNX{IsAb+aUc3{b+cP{Z@Q84YSDRtD zIMu?>LC@>5Cl~1*97rRHieZkT2^kF?VQ>Q?#?be0jLk`5rsfKeLdHRl!dUj15di1i z9A)L>)C9j&sxiO~@xTrXsJLUX3IsCYp>fxPL_riGmmey`CdI$j+N>+k*^AR+!BqyW zbx`Y24Vq~{uzf?LiPLc;G%gV8WQK7th2fhZSLp~`A_W3lTf_8rhr&T|L6G3QxEo1w zH(t~@23L@q1f&jXsi+l2uti%V@TTn+7iLXNNu^E;vRGX;pe7!{)v-CkS-D~9m3o|Y zPz;3f%h+Ia)hb#K0|u4~b8suVTUiaTgZu7SGn9l3;;&%nnpB8RUVuV~6b-8i4yzo&Sdj*uyb%8UL%;3yDv0&b{QTyn?`-Vy zQ$d@rUEa8M`jyviT-&`d-`u^pKEN#qW~hlGEKy@K$weqC?l?E)>hL0q3C0np^5GiW zI3bTyjvYC}6k>`*AXN}a;fDN(?aGbFcauZNvp6wP_}i#fFx*r%zea*(C^LsNlGKnA z6(QddaVW78-}Ra?%8tOEvm`SF)U%BxtqW^Lyvw<^(v?ikFbgR5B9(NushYAmb z8`=~dUUi%vgEE=E4fhn=O5QAPVr_Fe4SDn`nA2iXeAHVEdPAR4zVV{8XmiMs>sDNF z1PLcIooxs`&_?LeqUwOVP-Bahrz6ORaKgjw55_3**OEf^M1K+cak3fq!m&>=ZWbz) ze7D2Y{rD@$qx!qh$p@{~xk;Xa>u<{r4gtxD3(|95}D+8|NH)rlmvP(dy*ki-BqnKN-} zep*BmMVw5O+dYPnIHa8yCy@fNV_`f8&xe{%JyN~{m}ODOPs6A9aB7V5#lwzPvBu29&SsDbNGLX<-VVzpVgh*7ve?~>;*;Wo(p_L z)-?(I!7cl#rAn%6d5dKzh|hsD4ckJ@Yd&2p>HzY{P8KWx6?%O6)pL5qEw&cnUe*SOh70)l?!2P zz%X6X*UpMBoyWaeJ^?MaF_%Cxf@Q`^WsW6F@H@g=3%_FPv>~&I0)FvJu5r#~g^J*pv?Z7pixdzi1Eujp-@^Laz1h{S(@;f<)jk>F)=?h%x2uTe!?8 zK_Q<7YFxiJf9}Qk#-&SoBR(H+YRf9(n8=gOKe@W`;|qM6^4exR6cb;-h>iK&F+(sL zsdvKi&*ne*(Z=Q73;GE}zLU~lKq%iOi-ANYJFVR4vWc$b0$`dWT(HR~_6skI9A<%R z@GP|0-YSSW53~?-mf=}dImq>xS5y$Cc!;cBW;&>-_!8&Mq5BUON+JZRgNz%izJLw*4iu>@+ZRu&-~@H{C-0*7qPfX1nzPwF2}dmXl=+7 zxLE44j9jtXmdRG7mA590Kl5Bpl@)fD>?UoX4z`cGlIAEADKkMZa8PVjioL`2K~4LK zkoGkpDrGuEBPBw2ozn7`vs~Kz>r?RtdVB*5Um3&`Q-u6q0L{|N2y>+^S#Y2S=RTNQjA)`uR*XR-+s=q%o0( zo2)>hZI87kRpko-aquf4Ghumfnz&Kf^^yFN8j2%KB`Em>YF*{m?${!s4y4Mg9a}V` zNt$uo`=X}60XS59lm=n_?RepOC}6#;d--SmC5mWO6(nOR5cY-(pCQW5XGSxHkvHQ} zc7GkzV>Q+LiS^5(RB+<%CPg^cn~NP)D+=xUV6mt&T?>hjWGdv*1Ko{dZ)|$O>77wB zRS{qVy>L!=bT(9QoLcA-vji-f=CA(nwM##E?!~9(yW2N*^tB=Jgs8teNw2cb<30rjdmT|V zG$a(hsY!C7s?f!$gHL7ys^ux=6Y)YAGl76?88&8=>^;F8hP!!Y<@|dlnTK8|9shmK zdWli(U<&S<<89RxHN3cRor}8599zjLJAygy&rGNB9HNNH)|*Y?A3_YKvC09s?n%mH z5i%o74`bafs!Mb70H^ffYVZT zG|ayz@Z5J_I(z=*_Sk&0aC8nN`~2CFCzLBul@O$yYeUhXy=&kswD-?vEgp~RpDVV{49W%3S7 zT&sN_mxN=82;$o2iainbWz_zTiB5wLOb+RJ`lbKO=|RG{NW^xey@RVFYE^{p39h;~ zQ3!)9O!}qxXbO}5F-3pfrFfv~kEuRr57s0EVF41?m*9-E2siWvRkCn}JCS;~a0FkM zu$uPOl87+|AB6p&us2N1m0qC)U0AAK%%po;UrD{jGe;9tm?a}gX;}8rQ}S!wJTGNN z#Hp*o5g}tS5W3m^SpRgPw~6>E{Y;-ONbAg4EBC3^t|_}#D&Ru!I@k~J|M-8Rau{+z zF^%+20Rt$2HeEi01lXDNHiu;o|8*^IWq1WfjH<1QjBzf#%`c5ydn0~jZ(1x)vIW3p zyv9=^&0iM@ZAht14YyM$UdrgPRwuTJ)azaGHN)lfVc#$O9-0op1N-C`ndFA|((oQx_IImK%9%lb9P{g)sI41~o=lxk+~`GES9HDQ&lrzyLgsuiFiJE2s4AO6?ozTTWmL3XD2#&Y=QQU6MB7Av6GLur7^1Jpb1ij61qBO4gC_^nK=;q6_ z)&I6v*sKjH_fYOQWZ_{Yf+5iodSE;=wf5mhLt|6Qx7HZC^xZo1%VyK4Zqh7rS+;hk zIVL_1h72EnScFpq7x!-R3bKQ)?gYlu+FelI2{M3lu-`n$3=-=Kbs}v}jE04Exj&Wl z;_+FvJi{GJxkyY|`fZj8LOy5!U){X=gNBEwl_C#AyyZy6KC1$C{nG0f^fP2T!yv6T zbHczVgb$Gg%f^gpb8(Arts5BRuN(jGffDHeLgxM=ijlemLs!-aSiU^HGGcn2fRLrq*EC&9M3p!Gr<$+k7C4 z4_`IQg_$g)WC30-%VA3t8;2ogA8m9h(Q2~}Ft-Kd zKmZ*TmKk091Ne3YYwzakVzWgPQQho1O74M{mXD%n@l!^Y9z}R07pjpoyVQBAx$dOg z>u|T8EpUc3_v=*2)Z~Y5)h+?ctaWt>)g}oO0ZuzjwwUO)t__Xly=n2)8g%10xQhtu ztTY8hth_Z*?rH@c!W4!klY`QjE(ktiZ4!Z=*hIl~V9IR-5)+9~rEwvt1r}VyiWnf=WDYY4g`8%L+3p2idvp^#uVJmaauUNy zf9!GMEmBDltyQV!#F25RC5(tD@jjFkafw*uGdvSEGI0Dh6ND#rdG_Cjsim6Lbi&52 zxB7z3L>$2;%0l0G=-~toI0wEQK;FFH8RIpL@+7T-@<>IbXvV8YrizOlSuK9HyMEF} zX*H9z(lIfBWK}hYRMg#P8(0#W0r1EL_~zOXgK_!wiXA$2Rd8OlZCi3&992{g?tcjt znWf!qPFIrS3NkoUX_-eR5fO_uGr$y!5kRGZ&uo0)q#!ofcu4{h71ao|Q3h`Eifv+7 z8sEieJfuS|YmrJfuZ%-iHde}J1_MzdThCAdP<`^{crIt+_vCO&;h6fU<`~#XlSh$4px*bc{nbxy0>+8 zmjs9?EvPTF6k=hf4(OX-@{IcDXK>@$8qJi^OUsDExPl$7jB*cwmyngZ)%fPz~nt z$|6^0ip`m*!oc1`ZpTYLIc?giKC2i^4i+_&4>{6>q8yaW!Ax*gXPfYY9SJj_Pfd@p z1^C#e)g@W$F&4odY{!Uw2a>a0(n(t_T`ejx7zQxc+l7Ns#F}~_W+DvQwIZk%8#N`|qf|{Y#oX**% zAgb2XL+!&_AE|~6b6iSWwoLeJBN_J21M)Ho}+n%seck9KCogMu&z~h+Z1Z3sa9;4}1 zJC~^Jube-3lwpCeOM%~{yce^?ouu>Jk}znmg!IF(UE8KBvy*EXE#%eO4y@oH_x&CG zE>cP%`|foCdVz!Lhlmr@{pg8hY8(P^m)r9bezWm$goe#16#n<-{t}XtmoISzkMj9I|;2C)Yx8PudA)GV6pSU6l1Qu%N@ ztn%`SMLH!O#|B*1g>1K+b?)}tS1BTl0Q|!&9B`c=8%U;n@24}%l;9!*O_f3q)KW*7 zd6QRE3xlKV>;ynYeTp8Vu@FEjZs0-z8pJG8le6AC$pmF8Fjp&E)4+uQd*#EsD7L4} zf46Ku`~%a7H8ZgzKey-WiHfn&rVqW#U0}dLw+{5M1yhU(1Gz>rKtso)=Ww-XurdyeY!k7iSCU&pip_+EY33jV2P<2^ zgBS~sfivCjZmv{0#)*OCA|4LfqJbaNV0)4}5N{R*hZkCrv4?bb>bR<`joJu+&yYAi zg;3m;Y}iOtRn-fD(sVtV%h_7~4+;^q2G&3gpb9M$iGUC&SnD3nH`=v`ijw5v;XC(- zhAiw@3Gq;)$VZLvSe|5EW7nu6MGK>fr7|qj1IvfOsuj4Q-XocvPYDc2CaO`tvFd)f zl*zTCB(G4YN#0=BFpQ*-n5Y{gk4wCwQrs>tsWZ@-&w%GvA8-{J|0>2Sa8cYu5jR-A%WKxQ+jDC z;hw-#etk9@a;QeFT4*A!P9vtPOXDA=c#XIlMMy0XI8a%MrQ0p%%`bE}{wg0K{MPFm z|K+PEpM3HM&z|{D^RJ$I^2t|Eb5`wXDTy_ep5MH5dE+lG|L`&wo7*Ur?hp?Z_KN3v zC5>FK)eu+HhT9;c7uOix9 zF@4N`HAIXW*95Rs>IVHBru{h7`+n}aMw@PfHxI*eB+_pTe+Qf>wM{aVi2n+r!23tVF)MAUd|;uTVU$xwIg z1Qaa_VxD^GI-gwMxZ=@B_09<$&M)R?UpoKXeD|&EoAD_bk09$aG@X3&_f!3}Z~o@A$65Vz09U+_l;D)O;2) zFjom*NoMo;%V?~~`y5^s0?R?snyndbVmOEwqPV~)nWJOLrFMf)V|JqH!OC*xXyKQa z8802+-w3_DOqC?o5mfaPdY#|(g5(dvN~K{wiX4KaqAtKdgD*~e@>!-U0+lcV|+h9e%%# z0D@&_7gmT=?Q1!P1N&bwhp-n zy(ia)sDoUOAPw%6o;>;FpTwQglc%2ilht=hLn5tg&l>^O4KY{k9-*FOTm^krcJ;K5 z0gPE;c<@`BZ=B>BWd^~}O$So};`G`Gt0!#pkcu~5c|ib0=$)`ZrKrzKTPz_HQ>&GP zoAq6d)@pL}hG508uBt$L`MP6=5k<(=eLYa(*eIp&T4yoSs|2fByUpn;S1r(@Hu4%a zZr*uc#(;~t<3{T+{jOb21H>^e89sh&YRz+3)9xV2oa{$ha>=*_3EQ0XJ=T>%y zQDg!E5~6;KjRW8UZL<~SOqz-~)3B3w;2;bn;gFWsU8af*ej0bZ?+8{L<0sKjNhf;D z#bX^9W$~ATt{%yd7%=#lTWJNsOI?k?W=Jk$$Yst=3&p5FERAXvBvp;0E1;Q~(aG(jTa%- zX|6-tw-rZjJxtAoi-Z;<3$gB$Tk$4dqJJ0W-b!Y30@@W&x8p|fp)oj_?si#p~XyqOPqJZ(hL2lAa(X7-1@{H(V zanyo^GL|kDA#h#W7D0Ru349E(@zbx43%Qy9VGggx?Gq;3C9J@OR+45&;QxK$6`Cr3n56*K+Grn1 zZ0;)=uIz$j=3%@DE7v$|*1+k^RUFDPVLvcAZ{~Of`_uB%9x_GA z5)dMHZ+?v7=-}i{j}_UvAsXT2Cb=MADP!v>l6H(~WjHHDT0RgySkMDPO@6H6Iwrvi z(b^lTCDA>OD)ra`4a2*PJ_i&^;lwN0|E>eX0T46H6`t!5PQeAScLKdVo5v`O*Tw-; zkn~VfR7Ek5IfH@}ISNCK388>G$j=OU+?J(5-9Z?SEY(41LYxdU7+Z?CQjuRI?^BOT z6Z6b-c$P`c3=E8-6)9I<#|ncku0TBjLkmQ)QN59^Ib|BTF&CDdBk=G_~2lvWIKYI3upLe?fZI;^hDGmfgLP7`wkY{WIYod*L| z(b#qJlW`|ry~r2X{ovZ>k6t|;uhh+?VqS^op((?$2uwwgvAw2yFZJri#fTRKoNvVY+1aVvV6Mwt;*7eP67cOpGd~;J@ za394o@0asN1#5+0*qv9PzDN(r3DiAU5kt(&mfRf@m$gJ18m-*;<>NH0JIHnco%S4o zq>(06#JyHBnL$bru0bQ>A}djY=XD5k)hQI_2={D!-La^_;ySa2>hkr<3+Sm57d14l zBMuGL$mX9#&Eiz99BvG5%E@{ONkmO0V|+@(uuMLJVf@WP%mqRWvVaLQ!CvciTL8F@ zSd6FHWOE2xp zEktNTqVlTsj7&q67L_W4*_fQ~e%N-hL9m8GkxKHW$D_rAO+*m-g-0guQDz`-dwwdn z8X)CZ?~pdLh6XHo+|3572$oW$Ny4@EU=3kb4}g(4N#ZMEhpM_d<9DKc6SL}jv!=vM zn2+8})wtNOaO|-J%ZWSwC}f=(%msTpr$WXt;}2pmZu0fUS#l4Q4;(n7AU3H96pTc; z-qt*dq&gWJoQo~X=mDTM+!&Wo6`8T{F3HJt3)9=e_*@0Bmx#}9nd?cH4PC$p8iz=Q zh2arxoP6XHetCCOfFjnVeE7A%?ZIk?d0ODgYe{nF;=N@<@rIIz87R+s2w%9x5yct; z9)>?yuC@)VL_-(*n$k$3Q;ix~AD#gd^_N^?wkrt65CYL87m!)G?rNp=u9jL%F*HnP zI2VpS7px#&T~L-LLNCslWEdqoyG;r%!q4&BeK3fkfI0F2R%5g)im2N>YT$V!Yaa4G z4R_20&39{!$C2*~x-(IRv+ij!=c?0Vp=AX=5t<1jld%l68-nIk{D773Eu?p4mQ+;+ zuNACW2se>jh6fQuBIFVPHULcV5qp&Ht!Q(AYww6{fp*{)xAQLhr9PJ!uN77;T^)ld zW`>DtX_1uW9|r+IyNBR{=0SkNOwgtQA!=~}faJ>Kvtf73dFKWcalf?KE7d?SPdn1c z=KObEqGF0n%mP%La2*XU%OOVt%y28)J&KzS@MihTI)C(|AD!Y0+V~ctjrcW|ovqh* z`2~VaJw4riUgh+$Z@#&^dwu7r)2EL(A%BqNC_I$acVr@*3fdG%(;XZZpJs}z#|k{b zW)5co;5sl73*vV_2I~OK_?tWbwgz?Nv~E~g90}JxLpY#WS7qW=3gndu48k9MY4+fN z^n%-56>qq@2*Y$$o7^qHRU~B;lSpb@(87XaZjH0Ja;h6r`6d^l_~=f`)hJ`GG<>kY zWRCBLuCV76(Y%CY-WvVtx zINK1h@(#ixC;;+UrqFr<8?u1y!wTL(s196@AVc1VamWB1nH!R2e#oE-2EoG*F2i|a zk-r=={F*IhQsj|@%M&Xym$4}Mg($5VJ_me>fef%K)y+UA)>H-?2?fEYWeW!x#DY^K zsB;_W+wOQsCVJ=-Ga1fA_=U4H%hpXyNpfZQfOw&#Eh1dZmHg|x#Hn<^fXg66=lWrt zoWc@tL5W|a0V^HWg%Bh_AqnEhF2O_yjFH~_3m7T}=FXa!bz4!NM3K{O7>z%&I==L! z)8I&(4c@bLxbi>3!R&lEZc79bqj6-)LJKtFq1a8osv%Gg6NS4WIn%7ZZ^RUV;IyR& z5YBFFIm;{pXDH12>=L*(1xu}&7;BO$9oxv&u&EndSq+9}IE97}VF}x~Wr8p$z)l>{ zl%hHS<$!ABPFWRjK)piNBdBro4|B7oD2A{+U=%2-Jm>l?A2{mB5Hbh$<;wFlWMn&Q_-WZQN<9KCzx+vVj!#oWhsAk|L=cIeklOUhLWdsE#f)NnUMiQ{kA)2l@Knvyekzn%} zy!2)c?9iP^Hz40j;T(xVS}7qK)v;MD<*F+jM8?A3kx!iJZVt_^e0YgD`2ADHL>UHr zgvPu42yCE4R16Skw1VLbX+>-{01x%8Y#<%-P*pjL`QmVxAEc5WxzuVc!kB2$G!`-x zwQ<2#W(t5WD@l-nm&`$hKxL5rIYdabsv$I&b-xW8%@#Bz1W_=-S%x4pwK{XTRx0V@ zZM~JFd9~FE?Lm$Q%vTYMDib*di_**XK3SM5rrTM(#wGz_Wj=d%fScixNqGn0!sU4A z;o{0+&l0V@F-gH{K_;^oL-#^qcFNs{%a|8D+Q$9Mh;Wn{T*{?E(9TaO zQU|%1#3^-wxMbfxHJ6k-NWr_VMYP%l%Ii#vbgq@{X5%ukCkUG|hGAhOjdjaf8OdKn z!vl`B#XPn+$TJwi;1c3!kT^yRT+oWjfh*kmNE#2rx6m0t7NW^K5H4$NsWxd(2-mC+ z#0q#$B2yKSbs^r%Tg zSR-%Bo0mssYGNPh5NRUC zx*?S?wFe?7RDI%Bu_?MqN^~bMcJ64l8{}->!L^WNk)u+~3z~J$ND-5so z+7%9>VHX*RX@0&y<`ImE%RK(Ec;dkVtn?q^-!phr>AlE9H4Y9P35rX4->o~IpJW#L z;FXI@%>`k?HF24L;2E$*XR7`ZQMj#p38dk-J1wm~%hHj6Peg~j8Me7%mSYd2Gs8Pg z9N;smv>C*~SQS`$IYK&kV!7U&4!EPl6u zXg$PS;8G&UZjFt1$wFOd&}F#Ig%p}aV%=PGG4DSoCL#$pyQUEzyfktbw8v$RX?))u zzN6I?gFjXwMYpI>o@8_PC8yi42{qN2O4K{%gq5=vgQ4#&2JfXck&ZEQfJ@4t5;N;r ztn%H>qfV~&5s~)ZI>vH)fpDpWvE?Vus}qVJmp&{c!ilyeXpa_JK{KT?4{%HC#H=g< zc+yrP7Zy%=HPl@p0yt2jbOtqaT3cKFcxW;D#JJX`G}T)b391RX(%H2x!by8FwcJ5f z$kNpU#sfHYMDW3XOlt0N03h##NWlW26t%p$>4vRl=k1Vd>L|MqWAs&jI9O{y#W%rk z&)i8)f;J@c=Yfuz;w@~FHlbKm2US!tpi58{SF)YchADYG*p}<|%->@m8ev`zB(*8E zO6DR$Rj=*W#ewio$}=7-0bUnoBVh+|G4FXIs}MTuNKBGDoX!218rLNK(Z>0X2$vxIiX~0+%bJ zMaSWh73Q9yxa&YvGR3umoZ)P54Kf$4`Av4X@7S0(7H4k$YBoR}Ym&x65rsV#0ad$@ zcA!acdHgOB%C=c^y%YU}p>wLRuz_vKrC=lF`h5rB2;9^NW2-R7~pimzA^S zzm-pDKH6MRAYO)z*xU{qZZem%{}hgpLs%^~jmI*|>wfFWIR!5eB!FXzCJ*n*KAAqt zM2p|&I*{0+;+7;LCz%LvW!)b@sZImk?r^Bz6GBij25w1Dz`;N~)6Lz4lv)>=iz%`C zXqIX!Givya0@W%lUlfvqjgli6$u-@X!#7@K730`%w=+a9=0&J+#zVB}?06QYFa_WF zyN|?)AtWkxNNceM4}n=^w4QOP!yhghr(ZFIiOLRMb#-Dk#I{0&a9S+VLA?c2$V{2f ztH>~6mhFKNQBUrCclpv({4o!>Ny72p&YwPi?pek$qgllW4FAWOA~rec;>Py&Wqpy> z_U7)5?Q5s6T)wtBe|>ZF(rQU0gMs9)tc;|GOgd>8LU zoSNmJ4MxJ*E)Gk*BEacNBit{mKOznr$q=H!{J+7RY$Okx!$?8RRQwl}g9wm9OGsxk zBPWJ9I*^{Z$&j%Wmm7xA4h_voxU7*t=?<(U%6+ugss#%7=ii%O+`MvS2P=*uZ?Vt7 z;mxK9`hVa|AF)X3ndsMnfC6Q?==B)O$+#R#WGRAUy}m@g-I6ea6+>Hs z%V`hO{pOnL$4D+Yjw~1Lgy1uVEOp9g)CJ)gmYoXMLSazsOmNd3L^mMhsgM&a!rGQU1niYUfG(%lBC4D+uOjHFrSA!JQJ<@N#8N*E0kb$8 znir}LoQg&`vUsIKjB+JX67Ny!;hcOwKP~6~d>5HJ68g%H`qKyj^AKvK&#}j?a zM3`M4L5;=1G4{O%+h;PkrjAk+Rh;U`n}Mn3jIC!pz*{8O_JNR7AuK=3qli+&n|y}B zpK|9>$ksjCj)+w3evrvjqogHKen;}eh7aTKz0)-Y3c8qr25n+11#MNJo)SQV&-FM8 zpxDirPza$gK>bj;xcE61GV{KIqf(GfmieA_k@1v%u?XC;H3C2;YCQ5>Loje}$Y_8@ z9W>0#Fh5rHsQnn)}7IHlVCqaxdH&hFWI`CL!$X1-yV5-P>N90SFQop$N~fG zU=8K(`{>0!vM`)d>T*w(1*SY|6JMPQjgbpfSkE38hrc_*FHp3alY^OxCW;Cab2TCW z{3m3vjhu=Uwzr22Mo{I2((b9$!Rx%QgPjPi&682pj*M3c(f~6MlU!o#l$#GXT#sxv z9wX9mjeSA!`d!X&R@EWY$7gjW)G`LZ>tYH(6ta)fMXD2V;Qc3<$FhS=gzXgoR;~g^ zh#1H~0$7NAXz{PEE7SHpvYuKs?1!V#{J?b%Fa!GNE!*kLP;d{)iupHQ`{wbTZ=8PZ zn}?Tj{SHiNxn`ekZg9)$->mCSv;RZykHuOW8k*MzeoaylIa}#eyj})weLE%LKrY zXl(%S5A23u;|UXID_h_Jrk4Pj`$2pZE$0eDrKVMbX`P&v%NC(B6j8eCk|d5zTH0o@ zN|4+8fiu-aof&>2l2d}eAz)!RjFt~(v9tk{j}f6Q!{VJ_ay0M6S#_UrY6&vV%6yj+ zgs#KSOhO^hd@z4%{w;ld$hZ8=;>sLDI66=;UL@kt0E#C@OE3!+>RAjaM&KZCI9@3h znQg2mGD{PcM!tj$PS661d@f8>YO>SI+wIw_KYZ=d4=!$P{qXW;-F2ySceg+OcrAK) zGXop3oG&@yrv|UTxxKNo$@xZ4T;kn1=K~d3(4!bzfLbwSB#Gel3uN{}nj#;e0E=v_ z%2%U-x5JE5799i&u~|r&zGl=HG4EFlWI9B0096WneMoxq*7zu5o~wHYS09c|ugba1 zPbLad1~OSS#^Wu|)rywE*L$LIv3q}adg83~&Cyu|n+BUmrG&_Yv@js1Kl%HIutk_+ zj+aY)0ok-ITxi*%mAXq+RwFl_?>{aQ4!FHa9-|DOvpk`U2ooEx^ACY(iBT|U+5;Iz z*8>+pEK5wO`w!8sa5gEx(gO=)R4i({rPMsOHol66RW)Qtb+Bm=)1bjKP7Y5^OID z73^t+OhP<-XuA`kUBKN7Gq}am-63bKo_0j_cI01z%qYggH7Al{4I{AQ7m)7KoXrLqrF+4M3?^!g?>-40_ofsHg2jqWP0A-oMlg3yaLtRRHrjI>EOZhA-`^L0G}X-dW;Efc;l z_z~j2!jWlvs(YmxWZ0=0Sp&KGqIl|HxC*|7KdWVbO{?q;QL|Q%fx;3@WJ^wO065ak(n5}0RHhf57KTGL zR*y$*N1>dcB@g!^uqr~Pwy0|BVjVgW9Ca-Co9@Dw#}D&3^v_R3)BIrYJ|+6mX@XD( zdHqp-$S+9~+9Qj2rQq>s-0UYm+I->L>&S~s*y%^ttPWE;CGHa9sV9; zP|h$6gq&VT)jm@B@q!rYr7uq{1!1Bvc%mO#2W$Sv=#(H$a6AwW=WB{9*n zu+k-NgyB#4>V%6owzoI0?OwQijUN@?Mw^KaQ2JBDu8r*QerV$m5$!Sf);M`Rc~C z(_cIFwbPr|`2NUZ_(>bSbL!3At5=SF(_i=e%tKJfAt35i+CTK6i@QAyjrMQMGnLrZ=da=yi1$rw2cm?kXX+A31jq5 zAA*QF3}vD?%PEsfl*o49h#gI3g+;<19F&Ap9dN53*^}y~5Ry?|>8KX2Sag=|?IoeJ ziCE<4D{#_?X}^8E%rLEATI6kr_X}C4rEPxfneDCX^Gh3iizOQt$CzhRvI*w65LOf4 zpB?{7zI&7c@%RG<4M0Es)yWamUDD3A#FUnAhZs3O{>KPA{UyI$;5#4n0h;XB+gl27P9!!X&?1f#6J(}I=>l8nk$VFBy;B);@H5l7R zA-Wp~OkJ$ayrZipl(L>lWZc|wswNNV?eqg}{F*|$wupMcT;5i;FL=yglE_KSqVtgg>lnix`5u2ID=0kexSMV+=ZR&iA$gAss<0sXms)eI=$dU0iDG z;;0K7&%!*V>R@~!R}Dc~G8a@S7k_!Ag{%%S3@ksQQ%#^UQNzJn-QrNaLd&UW^8$I~ z8^Z{CERd_stKc&q7zyF0VUa?z*HTh+sGZXPbfdlax{VirCdVHJN|zfnjz48zU{ksR zW~Fos7ZibbdA%KQv@<<$btGhC#rkfoC4%tz6Y=d=UI$ldipsb znC^&R5Gzd0G#R4N@}p{CEZE~R21P4zFjWNA1YqjQx>;?4sMwsjGgK{4SOr0W!!2NDfu0S6a)pp@{ZDAVdKSLga64dKeDHsFCBPtD6Y6 zu0v*lJ<;9dN>vOTuNF#)H)yjghsD?5yI^f4cN1;PB4^XH~c56ZBO z?cT_no~F2giXY-r5Z^QEaFfqZT&mIj59b z95CBYLaLQQ1Y?4SCs)lz!TzlLbkDyJYs3Im58QVtr+{ou@$V-(}at+t-#ieA*d$HYdpYU6iFRJQbfuX`i6I~T9-(0GNYxR6WhY`yC z1|0{hC%Co_)WYl7$KNMzP4#LSc0PB{7)DWLIml)R_Y4Agu6Ak$p`vpUFzZ-@A9}yn z9Lcx*k2aH4#W5Idw|SF|f*T%VSF~Pihfyo{Pe+*Y$#A`4GrkF^wnnHFw>?I=(kenx z(dBGJbj4kl>|!j99L1Ns&|aL%jax{Q?{1jSYmx@<6$Q^~d1uREDN=Y>3r;a4>K52T z8sK+1(g5i|MR~q7u3)C$s&a)>XGW_aJ^H%{7b1|@Ncq!zK#QuUQIXMso^2QyK#W)D zgwbtTi)t2X)pBD!S7dqtc}dkHxr;v}VECrpvy4J{D0rZHt*rAZrgd$VDe$SnAvOY@ZrhkQHU!a}B|urQ zqrTnu=a1Os++}aJJ`F>1q?A?znfzXuf75d=U#i2?(kw*g-B>--aV_D%3Ae67DBs~q zh{AmpCXIf~Mk7mKv@lzCic@fjW>3A5(E$guNZ|2kL?>QSIb#>tE|#@)0fQR5Zh^3EO~5K#b88r&dg*L=)f^Dn?eL zfDvo$DTwPif>ITfmDrrXw<!nb^*lTt;1 za=WI0qfnYT-Ja{zI%>`#1!Y=`dOTHc;);fKPuT#fSxP7hDWz6n!lyKdS9ph045`a^ zMg?U^C`%=Jx~&g^wOoM+KZP?~TM$Q4fr-utOBixmkB>FL^HnvMib{fiiz|bFB05@Nl z=r^g~Lr&&p5%{p8^+*ljp&Z&ey#dq|d3ydFj zP3~Iu!P)RAvQ3LOHWg~uU%D-oaMmR}&n`*xI0qU42IoXrj=OT_QbP|4Y#)6+BnZ_! z@s#(hu3z1_;9v9A`?TJ_8dV|%2kWpNiOMgiH*wE78~RXTb|#riP0&3vY&d01DUR*F z{r)rzAeEJ8i+}Asohnt} zXf#!{Da7c5oY(?-DrDHkD-&18t$s}mhS}}LeByeebu}ysx?!lsuPkD!`7&)?4IhTb z{$a>I&JoSxugH|Zlv6q$SCKkhi-m9yF3PlV9wXhZ)fo)zCYeyEWzEK(T<)0X0|?_- z!|zrFd~IJP;1KasPpj%F3&M^`xjDfxHZ8B2hdi@ap*qxt|L|b(k+hB20yPZF_jN@V~#q{`u6XFK)iPJrH8K{rb&W*`rKYax6qoDH0uaZigu)tzGY~nX zc>0H2ffFu>0VY|zZB}DMDqF#PMllOa%ArgJXXOc6Ih!VUv8GdJ zIO;WuA;EF}rVzgEKV0ZE8e`KBVl}VQi!aTBO+e;pE@-Hg4KT&_G1F@91Q2Nz`VA_B z?v~d;m-T-%NoS)YiTK(J0N9hCQlmbPAqBj~;RV){`XEtRZYBNtBlZ-BDDo znv(T?jRFPR>W|0|&}gNsxiW}{tW!MfQ@(RMuY&N9OQww6LqArv96*xq_Y&2ii3UuG zNud#=G0_Kj<={x9*NkjdjK0Xim0|QXle!4@`~@rF$|*S1+8jt@zAfw!S{P!uGX*#% z55@7Z@QF|}iZzm%eh=u{wXJ8q9Rg*BWSGHjv~zjjEXVB;l}a#R?C8QkJjY}!R>|U2 z9nRQXOgY;agGR2j;t8wn#Q|LbC@k8VMPrrQpI5KLo;LvjPN{mZ3NRtX$C^xOcdDuu^s4{|6rm&3V zg!TaV2dXF1M=@@IMi&pDGlqyGHc50ljg7vBF;dm=8L&~Xxw0yN!PZpBGizdI_@!b6a!QntiYMhzsuD*|iRX;vdgKt8OnrE2{5#IC@uAGqU-|Nv|KsT= zpFI8Lub#g6=9WHB{01MLy0&%cweq>Y>swn_;=_OZBy_Mss&L3Q?T6Q7Bw+q-@*`EX zw6jp^=^xj24X;ijEgj=JQF2n_jybBdgIB-oRvfUySqqz5D9Dk(Nb4X-`Ssgvp^-Hc z1`McmaLc}-9Xs}=y*vVB<@lgv4=DEd%fLa4R>l(DsA))$6?W9Gg(NhH2ue;X=`faK zFTPms^;on;+O3p>Jtgz71UXzo6gt`)_?)tRpa3FzJ^wC?%F|bF?CfrC&v$mWw)F+l zo7djZcSlP=P$@bWSuE&Acr6sUm;O}FzO-S`V`Mr`rxQx6skwBf2uK?6l0r469|-t*_U zI!KU$crGTn?-RYZk^)1BidEh-(xg(_FVD*uhiO51bl|jbC#TDhftX@;VH!iip@IlclUE5iKZo0}JZczx^gwOvk5tY-tG7ew5MYUQ;IO!JM~5e-zWEs zV@Hd8e*1%q_Y!`Hu&}X4M&gaJvUQI4P^pq)wO&Lg$H%&BKpL^ecEmBlOAYG7S{^-! z_ic_I4%Kz`?G|+F1Y;Z(-(a?qPHWI+iXMEBSPGPTjYQ~YsgjR9k%6pOXG7Ez!Kq`LqqN~|*^*#{6(9dF( zG8nn<19Morn%D*FI4y-7+a;|SuBNDN)9_z!KBX>OL0-x*Cu;6KVkf6q!1L)|z>ke7 z@PTG76IL9GlI`*7rAV0?f4oGyv0!LcsFfL2{nOLSDAI;5K;Md^T%WPQ$%PW!=0Bn1 zRj)IjiNq~xC5veZ+lrlO5?H?7u*#uR5Cpt>*w*%;DR zI1VJ4e{P2YWTGZ0qx~Cq>;m4WD!uU7=1^(`f(aA1Y>gfS#ifB=iAHEnk@YgD)|s)T zoqh0C_8~T*F-HuLDzJ|E#|Uu%4q{=L6cE!?4XU;sB!()JLCuAd$7vaRRD~~5Clfg*aRh$9Y8{ z03oQHfa+7IhFo#sAcFWbkG8ygmY>OZ=Ir;%xijZpK075EK-3Jclukar6a3N5Ql|=p z!}#C?5aJBlDWsW6t>nzg5M$ewJfxPg5Yby%JF`mK3SaF2n2vgOkp|I9VQJrJltO;d4WLm8=3+$M#qSc|u6p_}ILt$tu(O50> zh6=o3d?G);arv7sZSL-J2gkReUjAmtOQ+F^BYIT0JuJb2S#MUl^6(lw1qzqZ!-1V# zgyDp))($R5YFG$7fS(WmIZz1A2~6b_RyZ;}e+YjoF(wP-U=pms zTquql2dJ8VpzV9p#W%>(!*Ocll^$J+%}}}PyNiS4#~-srNZxaEGFw&ayy`hVs*o9} zP$A`9hg1B0Hwb~a2@}cyEp12kECfqfWLdbBr{t0AHLB&U#eyVTeU9wgWe?a(L2dz7 zj_B+x3JXZVA^v(G0vlVDahQ(ut}o?SNytAQz*A_!cV*d1@2WQxvk9G57!=5)A@U4# zWxngzjH1ZqDxS)noenk{-2&YE1e(9SSQll9;oi(*U5_o#Knw z>BS=!0HsYv1Q7#bjA~OZB|#j+rW~tGiJBfP6G0Sd@WOemd=QAC-8wSZ8*F7yo-8t& zLS2@YHBH&$oI*JP+pF z{K*jP$_{TS1!J2Y^H7us0gqZ9#3&uRw}wCnuaz(i!uq~{Jn_=T>l@pbpP2vI*47(W zHs?>jxxICD^NIPHZMH4vo4XfJwRe!jmdQKmZn*&oN44D*!xb{i&b7in0g1O`neL#3 z98yba{VCSiw&LYG(MQS~{35!vXHo{!m}^gk!70#lHCwR8^-}8x(pq&nTi9K?3=y*_*Lt9bf7-KXK~EyO%`T z0l!K#agdy%W)dD)LwM>ESA8I(V{4L)Z;9Iee4--i)T&QIXIr+~N<(oB>PBwnV%D0s zS`nZcm9^vr1!CcpP6Vq@LdR|mXr8&}x+Ue=b*94@?9MH(9W{#9Ok>=tVj)S7ca;d=s#{n-3 za(P(Dct&N01J3?eVRANF z!3S((;;D=XG{eA}a-72VtoRs6c=E$eHK0EGK``l_O3F{JZv6NHpH;rLd2#ph*0mkJ zL{d-+)H(^QIQHkS>uVLQ7IMidC}fG7MSwVKoa|5L3ROAREua@8UUs z@!Q{fIh>p3*W&++HyFrO{l~!OLycE@GEqTusYj{f5)X3)45rnGW+h$` zJop&9FV1zvhLGu>!lbr3Fi&@6_iGgCqp*e2#9veZJpZYMXL?=5*^SKbPPi+|#PtSo zBuC!)!DDS+n4zH|vWB3dG1w&8O0kL1*92xDX?{@cI07e9DO-kmT5{c2?J|;T8YNua zSgw1Od@_CF#G~KH?Met?fA>7E)&zK~Pqc zuL3N&;+U!eat_WBo$>zobRh&G8Lmfy2n-M-gTLemBB;guB{Y=4w&CwA7I&iD`0%&$ ztFP_sZnI;CB!t$g2901}8f{9Cn(YM_wYoDAp^)MxuiB#T(@lnhE$g_#XsmSx2#F!ea}gXAL8Srz;A-t02{cjAg}5ceYqfeLgErZc@s?3!61!Y^gwY~`iim%1 zByW|2nI>{&I50x>+HIhfGdZYKP(^N{SHXZf4`SZ;^JX&Ku`xCZms=vK;=sUY6bH%6 z`N@-4-@3fBarNZ(W_d;-P+{tUnuPEiI|_PuY9;s^3S(4?W_&D$0ZT=eVRs7q#VMk> z_n56vIJm?~l)^RabrAS=*%!}0_xzdje|ao~mUw2D{-xX%4Kc^IX^g+o`SbMO8kyxA-eVFP1JHM3bnX~84{N>qa80Fg>6N;t9!A2#~!Fl@DU$Z z*H_ff^{5(WT}zs~L~2aKS*#hkTh14dZPU-PYHQ`*d2L^*z{sn(V~d0?Q(QlrNxnyJ&qt$tD&{7Szso0C*S zSxq&vZ-rY7v=5nsK#Q}5-Fod*S2E@rVuIycyJMdm8YjWvT^eSOd2v|mk>rBQKt}{i zw3PK(^l&#kW-&%XWUz;Y&As$%!qh_H2M5#?aK$vb83M;^v5+YS{4i!snf~m#S6=!K z5>V0@)Yaoz0pJUvWTOd6O-@!RJTVv@!VbW2?`S1sjcHeE&5f}u9J8QgM@gGu42K(O zQ=QKgRinsyuCd2sMQf_}^+!DLo+*6x-ilJBSxDgM(dXV3rT{OL1Kf9EV?k|53n zb}->DW2Kmj0l%yT2EQzhskp5tDzNIqwgj@6BN17F%c3Ob}P zVx=~&_BzDwFxqmr!Kc6-DH8zcHsPcB(=R;#{Bye7&&W>Y3r{$1ZeQcuUe3R8?%cP} zJpJeEhpTi)ZsiM+U7%nyMgRvk>$q!I;#g2dNe*a1oP%yR017kNZHb;{3CiY%suqu0 zT3dn9*%GsH7HJ(DX{bg~kJK7hpoOxHrulHZbsOfO4YR+}zL@O%Nb^>GoE;KO`nqJqdj1D^0(FPr=*&Be`m zd@7ua@2T78@%5d}jqQtXaspGF5acMGv{IO}4gH5EQuwf*JYj-96|+XUVw!EUJ{?uz zR~u79mv=!7^)7*KyYv=I7fq1Nw_SuTZW2L|C-|`r#8j$*9$I>QCf66f*U&fw?L7?R zP_QnQ-~dAR`O82;UwVHLfitO^qM?3H?8WmV(Ki#M^ZVZsi#uG!H&!8>C2n$iTxkQu zOofPr(}SqPPJhG_@Ps76tjVRa;M7Ux_?S^y>Ny5W-L?We2Xv2ItYu4Zxrx*o%z?nv zU`EA;DrTa85q}xT1@#Julqd7=ZtY%pozIB8xq0bA{07*St&2Z2$72a70(GD4k16)I zVDB-&ogYp}J)9_uz$8jGD%mj{-11-bEJ}hzLU*J(vF%>Hv4}BRqZ#ms5HT|afJSan zSZhEP8d$f<#o;rb1>IRNLOcHBW~6J?YE?PlFmb0MZ@fua64%R0hD}QcGgU?TCle2{cqNy$ zoW@CbH}1C5*9JNxMNfQ*`4z)jPopf*4wcn7c&uvKcT`G`(Ptp9^Fg_t3%gspbj&9s ze!28BGYtCW-Wd)v+JUIMD_$n#b^=OrtQ@7M z2oe)sVOmCJJvpM74C1YTk?K@MjDrz*o3maBj0idF%)_Rm3CZI35aUJ2)pZC#_mo+& zyfP9fVJS%S8bZ2_>$9G*t?F~o6+OF(2nfo$oQZuj-7 zbWH;?C+fePCzfr)T4}nno~j`IIlmdYy}5Bo?E>i0nQB>pxmvLW2mfH0sLU%Y$A5Ab zNPjyY{oW|oyF6hSZb}^0g#{SG5t6&eAxluAH9A>EL(=x7}ZYmidi8Hgw!kRu%;xR*lcjIj7SB*@OlZm}yn z4a48fEL~r4w>;7l72FNu@2LFgLR2!NINIbgs1o zAUiKKGr$CA>6Mh~WiBakTzcKrzLfkcI1~-pX4nzc48lWptzLyEuwALuwl&}9S2j0x zcIUji$``p`d24=SXY1y6``QloAlfN}0% z!J~FPTdKM^rzV6~YGawUEIGAw|FK*z7}Z&hbN!0IfLwf6$P7(mJY746RMBcNd>*m$ zifB>p-Miiyh033olsha3h=BPJhODaj94Xs?A+0lMmi%93E5fmd5QyNW4k32as$gd% zbB()K*S?y_vIPl;RX#>Vn1VnYAW0fqiHHH=4~RO)M4U1y?h2~X^s-W&DIMFHIG}T^ z3SL?P61aWqA)DJxLr=d#N?%XjH*Ty61HfBFyGYOq4RIjHv-1ZNfl5FTB z!viil39ZFAdn@>$D0Pa^CoN%IF8xJZ+#GNKF>~=GXeGH2%%vmJjY+~!{yQ&@!oO;U zFzfn9jv+ycnn)(DV`&l;*OX11TTfLz>0+tCki|sDobK?qa9q(X|4KI1+G((nr+d4o zga_lhH}rK6eB~6zyU8Rz>>}6a=GAzk-h3y&Re=Ieg=A}+@2ejghWoMa7{eZ|Hra5I zgI5tl?PerV8@wH@Cp_iuf%#AYuZW%Q%GZ@V(r7PgM8+9ZqMk)nT8XL*cbtce2(~|GJ~`-sH4g}A-kpo$&*0A0gsQgIuW43n6_1uIWNi+hr5-6Xep~v*xQhFq@ zn9~`W4Euamx>{tM1Kp#Ucz8rsz=pZ^l-^4Z-+`|~N&!e>V_dm^SQ?&$q$V({+kZqu zV_KraKdnb}JiFUs@&mOf(=)N{7kjdK;oP0j!>}~Xn=8ce?fHr8+gq>k&4O>uFWtC) zM(%W_W1J+|!gwh*I2^BUsVYZ-olOGY zLY5oliE40EE9){gwFcX&RQF-#M-(H6!B0u*7LJjJWJ6RP#-PXMP8A}=EZx~AQYB=a zuZ&;gKwIew%)Zkb8$Vqcrfosp-moo#xzM&O+%=w7^g-O*s^6-HVt%Xr_psPY&~ z#E;II8YU`KAl7w00t_Iqj=%B5m+D^YBbwPABFtjUJC?{nR3HQ+D3Th4yPI0B5Ms>3 zVuS4ZiA{I|PZamYy-xfva;$gA!42$cdr;O!ide^I^OxU@{rU@ht%f3kxDq2-Fp5Pe zi_`Pnn0LW%hbHtxj1w2y@aC%3rb);$Hx-H6`y9<`kYoCL?hMB+WynX4oqoD~8qssR zOdz{|Wq`vja0`0aw)Egom9eVmtp`TpxK>hLRkGqG9>4ua&>amIw8>)r`7l!1H#me^ zaIs?OJ&{?oLPw#7goyxc^+!s_Wt@yS?~H$%IjGB2`5T(iryJp}3G3)Z6jf!yPVx#< zHM6uZ5o|IilNkyP-ZkcY-1?Q|nCN#A>%6P994H8{%H$04(kjsug;+Ebkobw>S}G#_w_miUVYVTSZ(} z7|9CNZS=)-Em&Q|IBs_tHL1r=2wy{$w-QG)1mWhMfP^~9y(PM3U!n61$=YK{wdo=SxNyV)^6-1jNpJ$sD^-UB`MdbQxJ#bkx2OP0$ySh`f{QVkqQA-0mF(D zv^pegp3R1)82E#w0EPLXe}wQa>GO_v%sJOwd+mMpky!%;q{F?|nsZ#<@s2U(Tx(w- z%Kx-J5snJPX;2dQ5z@zg&DrWqyHUkJhzP~Fh9J)n(I!9%xf)Ac_#4`Sln$^+u5a>k z@l^?*pFQ=)sn^cUFJ9mI*8KG|Z@)Qz@A`Gwzew|hyEtV5nRMYoOj%_`8=kpUS0p&C zY8;$&vI+*W2uk=;VvoswtG7@x8ylhQ3+#0^seK8i`GqUj z_~!C{)j=vdg$yStr@O4-TdzJ7*wkz4D@T#yHmk=ES^$(M!%HhJ)1pJ@QH%#6mEH{y zG1L>bFnvP2ibfZJs1q50A&>N~(hbxz>Y#K+s)F1Jcd~$ZucF+W@mZ{55>N=Yab)p3 zgogdG&Q{%X2^JHkv~qe{AGMJbgnZiRGfFP;4{UZXPziu{vcnq2H#<~dqH1N8W?Il& z`hxAz{ikfQ!fCTMh5_4@WAn>b-oO0Pk6C};oL}9#`6J8~+im#77LRGr+mxWvWc?cC zV2KCdyAoj$>(ayu@k>z&j3&b26s4`j^OQiNX1y#l?FBH&OX2$!uP9)-2&O$V23xb7 z0%YDIi~cK!IfdbQPjbRCPT_8*F5}e>IY;iHt$kpWvfJ)hb3I(iveaq_#4r!+mdu_o zgtM-UwRKYoODR#_*4si3LBqhsKiB=k7Plf3{BuJ1r|ae(k@;yxEqn0&+9A1yF7SUG zxQe62RV5MDINGFvQz@z#L%Ig)$}`ZGdOWvj`%OS>@Sc2Qw${LIiy(TUl$m>)29~uo z)_|+I8swyT7eG7K)#GHHu|`aSOhl{Ou_+eegk~4iw|-+C zPE49l%?oKBmYH@>AdE{1PJSWESs^bgA=J1RGFbqA+50Zg@(n8QH4yp$`5jwZFs>m=nW#}vK+%m`4Ws4lJR8?SO%Qb z9o>SipV8#1dJQq+;+J5;0qM?QquybLAzhL)b^^Jq2oBB)urBjKrGRWci%{&AciAX3 zq!-HN0W#nf-exrR!%XSqqD{eF9l%ZfgXzEnPxfM@q``hBsHAd=<66LLPArvzC!tWK z!$BqQz`?7X2f=Z`5{VJ4_TLIE2NQJ!s}^awVO4Ko5~k|M+g6pVg_xCkBQV4K2b7>+ zRQd^>#byCWCIO%d0@}a>2-=gkwNkJgfUyG`O)MN~!7)2HPQ(%K8R+toSb0T}6iOR@ zcK5z9-&iw}r`fu~F~&m{g0D?|L8*{~!XeY+ul*HJ^COoSyUrqi@>9DK)s$G8h^xF> zA(1Mp$`_wTTqk%#15G>B!R2gunGs6=XQVBB%lf_oE(&sE{5q3Br^P)y+`ngbbMUyP z4hKX4^<5qJSyCx`Qy03pDB&!1Fc)96jIk}rsBz&6<^%Z$!%v>*Rx978wonOyxTIOz zHM#oZ19_qAq#>f!qv9aQt&oT5q`8alBHY4kS0$ZQax$uLsWU(yebLvssS3@HzWvtG z&BTd2uUz}AS_P8>>Qk`m>h{&Rw=8znWkCPS=-Sg ztUDlk3|C>H%0IZNDIyGOP?k0FFpObr7k3+p#Bqa}mFRC$f#hQ?__B-xWf^&_&29_y zQI89@M{#n_a_pO1J-vtP40j?=bQ-|aUzjdY(xF?-MjsIvZJ44s;8ItPVJ3*OaMqL<**@$5<0_$090IkFkuC%Q_4DixOvl_X^@w9A%bW{x=CqBCphTH zue{7u1bW>7uEcqWUi&I;YKSi6+L>1*xVi{QBA~J|^NNt@yo>Cwb$2UY@>F)Q|1xwx za^%HXI3U*(SeTFPQ@7G@hu z?9@s(xI&Dz4&xOw_i%^bif8~L7>ihhDAUZ;@p#PQaW3@PV3nOrDFGj zf0JRCb z$T)}j38PYrVQWGRu_F0{XdLt`^D%z`1}!3XXF{=YU^YXDPyKMZh>$X|)WC^_U3tZK z#45>P2|jhto;XXGDN_>5PA!g=T)A`^m0WSX3_&r;5>K_g_U54j*Nhr>5)f+9NPGG$ zxV1WOXV3OY#a)YE*H6pR!yo0&&ZtI6Z0R&;Pa6yL*=12Mjg@CGI$036ah3E>zrmc2 z`Dht|727v^yox7LL%RJrV%K@dH5`#OrCt#?RcC`kR)DODl0}dXz{1pyV4!YwU~1Lj zu`cZ01)72jh1tz(G%3F3q>>RdQ1VY^I!q#hN~9`#r3jQ_KlPWtR-(j55#pMnm2w#C zMIF=83AJ&$i*H)SK=%qFCImS4M^Bg~#AHCEDaPA1oyL|3-GdmUq0CFhfC2~LNLtF~ zbv7atJMc%VtvWCP4=J)h!dpjH)(i%Z5sX>#HZ#)ZbcQ-9aTp_)B8I$vzZ>d+4!7^c zl;lS%5*tfVR)oj=6_dV(2+~AYF%x@`Cv05kyHC1wJ*+Q6h2M>&xXi(!zV6u70$LGd z`dG`FM`0MKwrbkC2DTD$F0z*13oJN0=Tlsb z@BNXmR%$uWy)rZ8YnsT-3FV8g|9ApJ1?b=m8(3M3^Z-8T4ze$pbD= zVCT#Q9!$hlHpVJHiI^r1ss@;34%(``3Bz51UFbIpXZ5NeA^oFI>Mvk0lcUYKbO{}l zWQt;rtydpd8#gW@2#+vnYBz#EpV*lRP!OIj%v9kc$V#154wYKF=&C}Kiru`Wp1+QT z?CntbdQx$o@H)*Eh)$%FirNpZD*q183j0`ih`J+uI(cC{l_(j?aDAtXn<%Yg7cCs~ z=;)K-eVE!Jvvo0~izKv0a4RVli1wbG@dBr%-NgGEonh^ZRy%)l{pR8|9cY)COmNkK zXeLSxEN6}VH$t-Phbw}Z-k;{=KgAnE?U{2`Qh)fuOA`XG#LJI`5!DcWU8PcVN ze#OqD@R|f;pK=W;82cfw@Bv|Y&kJF6C9o$?|Do#pD1ROzl!=7l_T#V?aw_v(J~sfh zSe!yYwASu`Fo0qumOrZFd?hzA7~|jz^oG|QY9Ya?u|1q6dvLbg=s5E2f1^GE#MtVH zJ?1#57vb#o90R8%KB!%%Im+l}vf{l6nXT-)rT`~)xx_NUA?;#DkT8${P#uZfqL>p1 z3@fJ7w|ElKotzjbAO-3zCscXR#TN2!977AvfFvo?J!2CQ5b zk6~Lct@)3Mbtuk1NrVK1-aFwO`tn)%o?#VcSRj^kA;cj|!a0gv0P}B>X=>%vClhS||oFdv<1TipqMLdYYhsOik2XTOL|A+gUTx?xM)ub8k3i$Z@h zjD;=Z6t!+4>UzOnf&K&g_kD-l~qYmc^~3_#rR~iquEW1q=W}VOW$LIhU#87xym;*9(WKyf2eSgsiN^xd?tR4lArqFf!2@t{gn7h`21zbs1d+I$kb&< zcEbz%3$`wa1L6iy>RqjbIo%@HCZo2lFIqhyyJ1KjMQrs?>UB2=`F#0>pWHrv>+Y@F z+gFeOguD2E#1CiY!wpw`FA>raNv`g?AaUEFRtu42d^-uKb$UFQQ|gG`p>ojLH9;Xa z>J#f2rnSH8opn)M^BvPsiT3rRye9b=eJtRVHUD~k|h=n3rrVhhb z2GEmAt%@7lZtY;pNE*RYh>X9w`GY>pXrDBlf=c0JC}J48h`+dr-6G7-dDZ?IxVIqb zO&VRtH71P9o-wtz4wc3-5Fb6)ZMIeeASz({`nbLyMo$g@irrNW-?+(o3y1-@C=37* zgH086JWhdQ_i0?NC&Ow$3AiAdzxK|%^NV*c@`Q+a{y ze;8C1l!e$G1P)Gd5OrZ+_owIYzQfO>o|3Y{AAVTyl+U=*5Ri|K9ew+qbEn_b1GIA| zUwz}$QN|kw7wGhcfUgOJa%Y2>SD+(Lgk@VTfGr2q)KKnjuYZq80VQ)^)CMqGHyQF1$$zU^9_}mY(m`M~&6d*73$6M4-+ zDUMp7YP|;Jp6s+IMyz=RKXbDHU{tPsTrzYz(ivAYi^1eJ^1L2o`9nB#mJ*F@SjMp` zgiI@Sp_x{4d{D5Sk6lrTH@CyN1dLi78x|+2k)DD@Nx|Uf1q+yf7X?l0=}8N?EXE5= z{&^6XGV3{qr`EtmL82Q==^)s>uv7IJri(;Qt!%=MeMj?&5Et5#VnDc9AjM0bwuc;V zLWK6vj9mScHF}_CZn9!YVv+=ePs<;C$#YmMRuq7RdFeeG0-hSEjYA2oivog31z*Du z$sk#&R;98?Qr);kgc#p$?$1J8-FXIeN(U;oHQ2P?qvUzDxaUmbRF~Cxozt$_deF*& zcWb6?=5TRVNjAafT*6Y6|HmvCNXG6RulAA}oM4&xYp$ZyF{-!O2Gqb@+G$pLOsTCH z*Z>1;9q=^51zicpm0E5VU1vvSC1lw_1`WIJV5c^ex7vla7jXMAG0ZBLH{~B{@{xw3 zgz22_&N&bG#yZ zAgof1(T?0BXBO89HaX>0r*f>#gr4}N1QhHx$wp^yZbMV?3FPNVy&OBvF^*yf2K|id zEv|9O8LkwheKYX$Y9ls-9e-g4AJN<`o-$Nx&Q31JiiY%0$X79H!lZ>k>c3x8#j@)1 z#HVw9XfTF#v%;JYr_W;8gcD<18ASjH>3E?`EQoD=_5y(fy=aO$X9L%nD_sAd>2mT- z_&luy0lsutS7!7J#7sY8Eq+JXD%DF2|T$&#Hv*!S+O}QVrPJyG`c;NvD+A4l! z+O9N!$f$A=vex70?b}!!WJm^=C@u6_jSl7|�K_2iP@V@6uYOu>B-;MO>y0tDTjs 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 a@Z>Q6Gz=sAl_}0YIK12Lq6Uns9QeQg%Ju{R diff --git a/Sources/php_script/script/phpMyAdmin/locale/el/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/el/LC_MESSAGES/phpmyadmin.mo deleted file mode 100644 index 591e3a59e9b3f354596480d5bc2d7b89fc9c5203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469435 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 F0RROht?U2* diff --git a/Sources/php_script/script/phpMyAdmin/locale/he/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/he/LC_MESSAGES/phpmyadmin.mo deleted file mode 100644 index 889bf9b9eaa198f7a233d820f30fbc8b35ab8aea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141077 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 Ul}$!DOq>{BD&cX$;dz(;3oQ!bDF6Tf diff --git a/Sources/php_script/script/phpMyAdmin/locale/ia/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/ia/LC_MESSAGES/phpmyadmin.mo deleted file mode 100644 index 717ff4537cc8c007d5b3a0e98112a7db16d92c43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258356 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%0D9ELpe0T4Qg|3}*(Qem?|#&vkW>(33QXHAT; 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 z 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 Gv;PhML=3n9 diff --git a/Sources/php_script/script/phpMyAdmin/locale/si/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/si/LC_MESSAGES/phpmyadmin.mo deleted file mode 100644 index 3a6e1d95b954b139dff838bd306329ba1fc992cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 235642 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 Ol@)s`RIPc-&Hn+(RP71? diff --git a/Sources/php_script/script/phpMyAdmin/locale/tr/LC_MESSAGES/phpmyadmin.mo b/Sources/php_script/script/phpMyAdmin/locale/tr/LC_MESSAGES/phpmyadmin.mo deleted file mode 100644 index 4d4ba219b8454add0fad2c81e8105a81b27d108e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 392243 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
            kKF0DXT9N9VaL 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

            E9&!R<^!hf#iKU{KW?zdflT{`{ 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 FzXi|q(6ayl diff --git a/Sources/php_script/script/phpMyAdmin/package.json b/Sources/php_script/script/phpMyAdmin/package.json deleted file mode 100644 index 5e3b18b..0000000 --- a/Sources/php_script/script/phpMyAdmin/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "phpmyadmin", - "version": "5.2.0", - "description": "A web interface for MySQL and MariaDB", - "repository": "https://github.com/phpmyadmin/phpmyadmin.git", - "author": "The phpMyAdmin Team (https://www.phpmyadmin.net/team/)", - "license": "GPL-2.0", - "private": true, - "engines": { - "node": ">=10" - }, - "dependencies": { - "@babel/cli": "^7.15.7", - "@babel/core": "^7.15.5", - "@babel/preset-env": "^7.15.6", - "@popperjs/core": "^2.10.2", - "@zxcvbn-ts/core": "^2.0.1", - "autoprefixer": "^10.3.6", - "bootstrap": "5.1.3", - "codemirror": "5.65.3", - "jquery": "3.6.0", - "jquery-debounce-throttle": "^1.0.6-rc.0", - "jquery-migrate": "3.4.0", - "jquery-ui-dist": "1.13.1", - "jquery-ui-timepicker-addon": "1.6.3", - "jquery-uitablefilter": "^1.0.0", - "jquery-validation": "1.19.3", - "js-cookie": "2.2.1", - "locutus.sprintf": "^2.0.14-code-lts.2", - "ol": "6.14.1", - "postcss": "^8.3.8", - "postcss-cli": "^9.0.1", - "rtlcss": "^3.3.0", - "sass": "^1.42.1", - "tablesorter": "^2.31.3", - "tracekit": "0.4.6", - "u2f-api-polyfill": "0.4.4", - "updated-jqplot": "1.0.9" - }, - "devDependencies": { - "babel-jest": "^27.3.1", - "eslint": "^7.32.0", - "eslint-plugin-compat": "^3.13.0", - "eslint-plugin-no-jquery": "^2.7.0", - "jest": "^27.3.1", - "stylelint": "^13.13.1", - "stylelint-config-recommended-scss": "^4.3.0", - "stylelint-config-standard": "^22.0.0", - "stylelint-scss": "^3.21.0" - }, - "scripts": { - "postinstall": "yarn run build", - "build": "yarn run css-compile --style=compressed && yarn run css-prefix && yarn run css-rtl && yarn run js-compile", - "css-compile": "sass themes/pmahomme/scss:themes/pmahomme/css themes/original/scss:themes/original/css themes/metro/scss:themes/metro/css themes/bootstrap/scss:themes/bootstrap/css setup/scss:setup", - "css-lint": "stylelint -s scss \"themes/**/scss/*.scss\" \"setup/scss/*.scss\"", - "css-prefix": "postcss themes/*/css/*.css setup/styles.css --use autoprefixer --replace", - "css-rtl": "yarn run rtlcss -c .rtlcssrc.json themes/bootstrap/css/theme.css && yarn run rtlcss -c .rtlcssrc.json themes/pmahomme/css/theme.css && yarn run rtlcss -c .rtlcssrc.json themes/original/css/theme.css && yarn run rtlcss -c .rtlcssrc.json themes/metro/css/theme.css && yarn run rtlcss -c .rtlcssrc.json themes/metro/css/blueeyes-theme.css && yarn run rtlcss -c .rtlcssrc.json themes/metro/css/mono-theme.css && yarn run rtlcss -c .rtlcssrc.json themes/metro/css/redmond-theme.css && yarn run rtlcss -c .rtlcssrc.json themes/metro/css/teal-theme.css", - "js-lint": "eslint js/src test/javascript test/jest jest.config.js", - "js-compile": "babel js/src -d js/dist", - "test": "jest" - } -} diff --git a/Sources/php_script/script/phpMyAdmin/setup/config.php b/Sources/php_script/script/phpMyAdmin/setup/config.php deleted file mode 100644 index 3eef9a8..0000000 --- a/Sources/php_script/script/phpMyAdmin/setup/config.php +++ /dev/null @@ -1,54 +0,0 @@ -save('Config'); - -$response = ResponseRenderer::getInstance(); -$response->disable(); - -if (isset($_POST['eol'])) { - $_SESSION['eol'] = $_POST['eol'] === 'unix' ? 'unix' : 'win'; -} - -if (isset($_POST['submit_clear']) && is_scalar($_POST['submit_clear']) ? $_POST['submit_clear'] : '') { - // Clear current config and return to main page - $GLOBALS['ConfigFile']->resetConfigData(); - // drop post data - $response->generateHeader303('index.php' . Url::getCommonRaw()); - exit; -} - -if (isset($_POST['submit_download']) && is_scalar($_POST['submit_download']) ? $_POST['submit_download'] : '') { - // Output generated config file - Core::downloadHeader('config.inc.php', 'text/plain'); - $response->disable(); - echo ConfigGenerator::getConfigFile($GLOBALS['ConfigFile']); - exit; -} - -// Show generated config file in a - - - - - - - - - - - - - - - - - - - - - {% endfor %} - {% endfor %} - -{% endif %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/components/error_message.twig b/Sources/php_script/script/phpMyAdmin/templates/components/error_message.twig deleted file mode 100644 index b71f0ad..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/components/error_message.twig +++ /dev/null @@ -1,4 +0,0 @@ -

            diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit.twig b/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit.twig deleted file mode 100644 index 5869f32..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit.twig +++ /dev/null @@ -1,25 +0,0 @@ -
            -
            -
            {% trans 'Structure' %}
            -
            - - - - - - - - - - - - - - {{ rows|raw }} -
            {% trans 'Name' %}{% trans 'Type' %}{% trans 'Length/Values' %}{% trans 'Default' %}{% trans 'Collation' %}{% trans 'Attributes' %}{% trans 'Null' %}{% trans %}A_I{% context %}Auto Increment{% endtrans %}
            -
            - -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit_table_row.twig b/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit_table_row.twig deleted file mode 100644 index 8acacd6..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/central_columns/edit_table_row.twig +++ /dev/null @@ -1,85 +0,0 @@ - - - - {% include 'columns_definitions/column_name.twig' with { - 'column_number': row_num, - 'ci': 0, - 'ci_offset': 0, - 'column_meta': {'Field': row['col_name']}, - 'has_central_columns_feature': false, - 'max_rows': max_rows - } only %} - - - - - - - - -

            - {% trans 'Edit ENUM/SET values' %} -

            - - - - - {% if char_editing == 'textarea' %} - - {% else %} - - {% endif %} - - - - - - - - {% include 'columns_definitions/column_attribute.twig' with { - 'column_number': row_num, - 'ci': 5, - 'ci_offset': 0, - 'column_meta': [], - 'extracted_columnspec': {'attribute': row['col_attribute']}, - 'submit_attribute': false, - 'attribute_types': attribute_types - } only %} - - - - - - - - - - diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/designer/schema_export.twig b/Sources/php_script/script/phpMyAdmin/templates/database/designer/schema_export.twig deleted file mode 100644 index fa00a12..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/designer/schema_export.twig +++ /dev/null @@ -1,18 +0,0 @@ -
            -
            - {{ get_hidden_inputs(db) }} - - - - {% for option in plugins_choice %} - - {% endfor %} - - - {{ options|raw }} -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/events/editor_form.twig b/Sources/php_script/script/phpMyAdmin/templates/database/events/editor_form.twig deleted file mode 100644 index 7428244..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/events/editor_form.twig +++ /dev/null @@ -1,119 +0,0 @@ -
            - {{ get_hidden_inputs(db) }} - - {% if mode == 'edit' %} - - {% endif %} - -
            -
            - {% trans 'Details' %} - {% if mode != 'edit' %} - {{ show_mysql_docu('CREATE_EVENT') }} - {% endif %} -
            - -
            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            {% trans 'Event name' %} - -
            {% trans 'Status' %} - -
            {% trans 'Event type' %} - {% if is_ajax %} - - {% else %} - -
            - {{ event.item_type }} -
            - - {% endif %} -
            {% trans 'Execute at' %} - -
            {% trans 'Execute every' %} - - -
            {% trans %}Start{% context %}Start of recurring event{% endtrans %} - -
            {% trans %}End{% context %}End of recurring event{% endtrans %} - -
            {% trans 'Definition' %} - -
            {% trans 'On completion preserve' %} - -
            {% trans 'Definer' %} - -
            {% trans 'Comment' %} - -
            -
            - - {% if is_ajax %} - - - {% else %} - - {% endif %} -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/events/row.twig b/Sources/php_script/script/phpMyAdmin/templates/database/events/row.twig deleted file mode 100644 index 7395bb6..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/events/row.twig +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - {{ sql_drop }} - {{ event.name }} - - - {{ event.status }} - - - {{ event.type }} - - - {% if has_privilege %} - - {{ get_icon('b_edit', 'Edit'|trans) }} - - {% else %} - {{ get_icon('bd_edit', 'Edit'|trans) }} - {% endif %} - - - - {{ get_icon('b_export', 'Export'|trans) }} - - - - {% if has_privilege %} - {{ link_or_button( - url('/sql'), - { - 'db': db, - 'table': table, - 'sql_query': sql_drop, - 'goto': url('/database/events', {'db': db}) - }, - get_icon('b_drop', 'Drop'|trans), - {'class': 'ajax drop_anchor'} - ) }} - {% else %} - {{ get_icon('bd_drop', 'Drop'|trans) }} - {% endif %} - - diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/multi_table_query/form.twig b/Sources/php_script/script/phpMyAdmin/templates/database/multi_table_query/form.twig deleted file mode 100644 index 94c2ae0..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/multi_table_query/form.twig +++ /dev/null @@ -1,179 +0,0 @@ - - -
            - -
            -
            - -
            - -
            - {% for table in tables %} -
            - - {% for column in table.columns %} - - {% endfor %} -
            - {% endfor %} - - {% for id in 0..default_no_of_columns %} - {% if id == 0 %}
            {% endif %} -
            - - . - -
            - - {% trans 'Show' %} -
            - - -
            - - - -
            - -
            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
            {% trans 'Sort' %}{% trans 'Ascending' %}{% trans 'Descending' %}
            {% trans 'Add as' %} - - AND - - - OR -
            Op - - - -
            - . - - -
            - -
            -
            -
            - -
            - {% if id == 0 %}
            {% endif %} - {% endfor %} - -
            - -
            - -
            - {# Keep the block without a space between the open and close tag #} - -
            -
            - -
            - - -
            -
            -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/operations/index.twig b/Sources/php_script/script/phpMyAdmin/templates/database/operations/index.twig deleted file mode 100644 index 795aa3c..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/operations/index.twig +++ /dev/null @@ -1,230 +0,0 @@ -
            - - {{ message|raw }} - - {% if has_comment %} -
            - {{ get_hidden_inputs(db) }} -
            -
            {{ get_icon('b_comment', 'Database comment'|trans, true) }}
            -
            -
            -
            - - -
            -
            -
            - -
            -
            - {% endif %} - -
            - {{ get_hidden_inputs(db) }} -
            {{ get_icon('b_table_add', 'Create new table'|trans, true) }}
            -
            -
            - - -
            -
            - - -
            -
            - -
            - - {% if db != 'mysql' %} -
            - {{ get_hidden_inputs(db) }} - - - - {% if db_collation is not empty %} - - {% endif %} - -
            -
            {{ get_icon('b_edit', 'Rename database to'|trans, true) }}
            -
            -
            -
            - - -
            -
            - -
            - - -
            -
            - - -
            -
            - {% endif %} - - {% if is_drop_database_allowed %} -
            -
            {{ get_icon('b_deltbl', 'Remove database'|trans, true) }}
            -
            -
            - {{ link_or_button( - url('/sql'), - { - 'sql_query': 'DROP DATABASE ' ~ backquote(db), - 'back': url('/database/operations'), - 'goto': url('/'), - 'reload': true, - 'purge': true, - 'message_to_show': 'Database %s has been dropped.'|trans|format(backquote(db))|e, - 'db': null - }, - 'Drop the database (DROP)'|trans, - { - 'id': 'drop_db_anchor', - 'class': 'ajax text-danger' - } - ) }} - {{ show_mysql_docu('DROP_DATABASE') }} -
            -
            -
            - {% endif %} - -
            - {{ get_hidden_inputs(db) }} - - - {% if db_collation is not empty %} - - {% endif %} - -
            -
            {{ get_icon('b_edit', 'Copy database to'|trans, true) }}
            -
            -
            -
            - - -
            -
            - -
            -
            - - -
            -
            - - -
            -
            - - -
            -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            -
            - - -
            -
            - -
            - {{ get_hidden_inputs(db) }} - -
            -
            {{ get_icon('s_asci', 'Collation'|trans, true) }}
            -
            -
            -
            - - -
            -
            - -
            - - -
            -
            - - -
            -
            - - -
            -
            - -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/routines/editor_form.twig b/Sources/php_script/script/phpMyAdmin/templates/database/routines/editor_form.twig deleted file mode 100644 index c81edde..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/routines/editor_form.twig +++ /dev/null @@ -1,180 +0,0 @@ -
            - - {% if is_edit_mode %} - - - {% endif %} - {{ get_hidden_inputs(db) }} - -
            -
            - {% trans 'Details' %} - {% if not is_edit_mode %} - {{ show_mysql_docu('CREATE_PROCEDURE') }} - {% endif %} -
            - -
            - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {% if is_edit_mode %} - - - - - {% endif %} - - - - - - - - - - - - - - - - - -
            {% trans 'Routine name' %} - -
            {% trans 'Type' %} - {% if is_ajax %} - - {% else %} - -
            - {{ routine['item_type'] }} -
            - - {% endif %} -
            {% trans 'Parameters' %} - - - - - - - - - - - - - - {{ parameter_rows|raw }} - -
            {% trans 'Direction' %}{% trans 'Name' %}{% trans 'Type' %}{% trans 'Length/Values' %}{% trans 'Options' %}
            -
            - - -
            {% trans 'Return type' %} - -
            {% trans 'Return length/values' %} - - ---
            {% trans 'Return options' %} -
            - -
            -
            - -
            -
            ---
            -
            {% trans 'Definition' %} - -
            {% trans 'Is deterministic' %} - -
            - {% trans 'Adjust privileges' %} - {{ show_docu('faq', 'faq6-39') }} - - {% if has_privileges %} - - {% else %} - - {% endif %} -
            {% trans 'Definer' %} - -
            {% trans 'Security type' %} - -
            {% trans 'SQL data access' %} - -
            {% trans 'Comment' %} - -
            -
            - - {% if is_ajax %} - - - {% else %} - - {% endif %} -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/routines/parameter_row.twig b/Sources/php_script/script/phpMyAdmin/templates/database/routines/parameter_row.twig deleted file mode 100644 index ba8310e..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/routines/parameter_row.twig +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - - - - - - - --- - - - - --- - - - - - - {{ get_icon('b_drop', 'Drop'|trans) }} - - - diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/search/main.twig b/Sources/php_script/script/phpMyAdmin/templates/database/search/main.twig deleted file mode 100644 index e7875cb..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/search/main.twig +++ /dev/null @@ -1,95 +0,0 @@ - -
            - {{ get_hidden_inputs(db) }} -
            - {% trans 'Search in database' %} -

            - - -

            - -
            - {% trans 'Find:' %} - -
            - - -
            -
            - - -
            -
            - - -
            -
            - - -
            -
            - - -
            -
            - -
            - {% trans 'Inside tables:' %} -

            - - {% trans 'Select all' %} - / - - {% trans 'Unselect all' %} - -

            - -
            - -

            - {# Inputbox for column name entry #} - - -

            -
            -
            - -
            -
            -
            - -
            -
            -
            -
            -{# These two table-image and table-link elements display the table name in browse search results #} -
            - -
            -{# Div for browsing results #} -
            - {# This browse-results div is used to load the browse and delete results in the db search #} -
            -
            - {# This sqlqueryform div is used to load the delete form in the db search #} -
            -{# Toggle query box link #} - diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/structure/overhead.twig b/Sources/php_script/script/phpMyAdmin/templates/database/structure/overhead.twig deleted file mode 100644 index 8b74509..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/structure/overhead.twig +++ /dev/null @@ -1,4 +0,0 @@ - - {{ formatted_overhead }}  - {{ overhead_unit }} - diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/structure/structure_table_row.twig b/Sources/php_script/script/phpMyAdmin/templates/database/structure/structure_table_row.twig deleted file mode 100644 index cfc8289..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/structure/structure_table_row.twig +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - {{ browse_table_label_truename }} - - {{ tracking_icon|raw }} - - {% if server_replica_status %} - - {{ ignored ? get_image('s_cancel', 'Not replicated'|trans) }} - {{ do ? get_image('s_success', 'Replicated'|trans) }} - - {% endif %} - - {# Favorite table anchor #} - {% if num_favorite_tables > 0 %} - - {# Check if current table is already in favorite list #} - {% set fav_params = { - 'db': db, - 'ajax_request': true, - 'favorite_table': current_table['TABLE_NAME'], - ((already_favorite ? 'remove' : 'add') ~ '_favorite'): true - } %} - {% include 'database/structure/favorite_anchor.twig' with { - 'table_name_hash': table_name_hash, - 'db_table_name_hash': db_table_name_hash, - 'fav_params': fav_params, - 'already_favorite': already_favorite, - } only %} - - {% endif %} - - - - {{ may_have_rows ? get_icon('b_browse', 'Browse'|trans) : get_icon('bd_browse', 'Browse'|trans) }} - - - - - {{ get_icon('b_props', 'Structure'|trans) }} - - - - - {{ may_have_rows ? get_icon('b_select', 'Search'|trans) : get_icon('bd_select', 'Search'|trans) }} - - - - {% if not db_is_system_schema %} - - {{ get_icon('b_insrow', 'Insert'|trans) }} - - {% if table_is_view %} - - {{ get_icon('b_edit', 'Edit'|trans) }} - - {% else %} - - - {{ may_have_rows ? get_icon('b_empty', 'Empty'|trans) : get_icon('bd_empty', 'Empty'|trans) }} - - - {% endif %} - - - {{ get_icon('b_drop', 'Drop'|trans) }} - - - {% endif %} - - {% if current_table['TABLE_ROWS'] is defined - and (current_table['ENGINE'] != null or table_is_view) %} - {# Get the row count #} - {% set row_count = format_number(current_table['TABLE_ROWS'], 0) %} - - {# Content to be appended into 'tbl_rows' cell. - If row count is approximate, display it as an anchor to get real count. #} - - {% if approx_rows %} - - - ~{{ row_count }} - - - {% else %} - {{ row_count }} - {% endif %} - {{ show_superscript|raw }} - - - {% if not (properties_num_columns > 1) %} - - {% if current_table['ENGINE'] is not empty %} - {{ current_table['ENGINE'] }} - {% elseif table_is_view %} - {% trans 'View' %} - {% endif %} - - {% if collation|length > 0 %} - - {{ collation|raw }} - - {% endif %} - {% endif %} - - {% if is_show_stats %} - - - {{ formatted_size }} {{ unit }} - - - - {{ overhead|raw }} - - {% endif %} - - {% if not (show_charset > 1) %} - {% if charset|length > 0 %} - - {{ charset|raw }} - - {% endif %} - {% endif %} - - {% if show_comment %} - {% set comment = current_table['Comment'] %} - - {% if comment|length > limit_chars %} - - {{ comment|slice(0, limit_chars) }} - ... - - {% else %} - {{ comment }} - {% endif %} - - {% endif %} - - {% if show_creation %} - - {{ create_time }} - - {% endif %} - - {% if show_last_update %} - - {{ update_time }} - - {% endif %} - - {% if show_last_check %} - - {{ check_time }} - - {% endif %} - - {% elseif table_is_view %} - - - - {% trans 'View' %} - - --- - {% if is_show_stats %} - - - - - {% endif %} - {% if show_charset %} - - {% endif %} - {% if show_comment %} - - {% endif %} - {% if show_creation %} - - - {% endif %} - {% if show_last_update %} - - - {% endif %} - {% if show_last_check %} - - - {% endif %} - - {% else %} - - {% if db_is_system_schema %} - {% set action_colspan = 3 %} - {% else %} - {% set action_colspan = 6 %} - {% endif %} - {% if num_favorite_tables > 0 %} - {% set action_colspan = action_colspan + 1 %} - {% endif %} - - {% set colspan_for_structure = action_colspan + 3 %} - - {% trans 'in use' %} - - {% endif %} - diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/tracking/tables.twig b/Sources/php_script/script/phpMyAdmin/templates/database/tracking/tables.twig deleted file mode 100644 index c29f142..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/tracking/tables.twig +++ /dev/null @@ -1,192 +0,0 @@ -{# Tracked tables exists#} -{% if head_version_exists %} -
            -

            {% trans 'Tracked tables' %}

            - -
            - {{ get_hidden_inputs(db) }} - - - - - - - - - - - - - - - {% for version in versions %} - - - - - - - - - - - {% endfor %} - -
            {% trans 'Table' %}{% trans 'Last version' %}{% trans 'Created' %}{% trans 'Updated' %}{% trans 'Status' %}{% trans 'Action' %}{% trans 'Show' %}
            - - - - - {{ version.version }} - - {{ version.date_created }} - - {{ version.date_updated }} - -
            -
            -
            - - - - - - - - - -
            - - {{- url('/table/tracking', { - 'db': version.db_name, - 'table': version.table_name, - 'version': version.version, - 'toggle_activation': 'activate_now', - }) -}} - -
            {% trans 'active' %}
            -
             
            - - {{- url('/table/tracking', { - 'db': version.db_name, - 'table': version.table_name, - 'version': version.version, - 'toggle_activation': 'deactivate_now', - }) -}} - -
            {% trans 'not active' %}
            -
            - - {{ text_dir }} -
            -
            -
            -
            - - {{ get_icon('b_drop', 'Delete tracking'|trans) }} - - - - {{ get_icon('b_versions', 'Versions'|trans) }} - - - {{ get_icon('b_report', 'Tracking report'|trans) }} - - - {{ get_icon('b_props', 'Structure snapshot'|trans) }} - -
            - {% include 'select_all.twig' with { - 'text_dir': text_dir, - 'form_name': 'trackedForm' - } only %} - -
            -
            -{% endif %} -{% if untracked_tables_exists %} -

            {% trans 'Untracked tables' %}

            -
            - {{ get_hidden_inputs(db) }} - - - - - - - - - - {% for table_name in untracked_tables %} - {% if get_tracker_version(db, table_name) == -1 %} - - - - - - {% endif %} - {% endfor %} - -
            {% trans 'Table' %}{% trans 'Action' %}
            - - - - - - {{ get_icon('eye', 'Track table'|trans) }} - -
            - {% include 'select_all.twig' with { - 'text_dir': text_dir, - 'form_name': 'untrackedForm' - } only %} - -
            -{% endif %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/database/triggers/list.twig b/Sources/php_script/script/phpMyAdmin/templates/database/triggers/list.twig deleted file mode 100644 index 1228a45..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/database/triggers/list.twig +++ /dev/null @@ -1,59 +0,0 @@ -
            -

            - {{ get_icon('b_triggers', 'Triggers'|trans) }} - {{ show_mysql_docu('TRIGGERS') }} -

            - -
            -
            -
            -
            -
            - - -
            -
            - - -
            -
            - - -
            - -
            - {{ get_hidden_inputs(db, table) }} - -
            - {% trans 'There are no triggers to display.' %} -
            - - - - - - - {% if table is empty %} - - {% endif %} - - - - - - - {% for i in 0..(table is empty ? 7 : 6) %}{% endfor %} - - {{ rows|raw }} - -
            {% trans 'Name' %}{% trans 'Table' %}{% trans 'Time' %}{% trans 'Event' %}
            -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/display/results/table.twig b/Sources/php_script/script/phpMyAdmin/templates/display/results/table.twig deleted file mode 100644 index 980f17e..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/display/results/table.twig +++ /dev/null @@ -1,304 +0,0 @@ -{% set navigation_html %} - {% if navigation is not empty %} - - - - - {{ navigation.move_backward_buttons|raw }} - {{ navigation.page_selector|raw }} - {{ navigation.move_forward_buttons|raw }} - - {% if navigation.number_total_page != 1 %} - - {% endif %} - - {% if navigation.has_show_all %} - - - {% endif %} - - - - - - - - - - - {% endif %} -{% endset %} - -{{ sql_query_message|raw }} - -{{ navigation_html }} - - -
            - {{ get_hidden_inputs(db, table) }} -
            - -{% if headers.column_order is not empty %} - {% if headers.column_order.order %} - - {% endif %} - {% if headers.column_order.visibility %} - - {% endif %} - {% if not headers.column_order.is_view %} - - {% endif %} -{% endif %} - -{% if headers.options is not empty %} -
            - {{ get_hidden_inputs({ - 'db': db, - 'table': table, - 'sql_query': sql_query, - 'goto': goto, - 'display_options_form': 1 - }) }} - - {% if default_sliders_state != 'disabled' %} -
            - -
            -
            - {% endif %} - -
            -
            -
            - - -
            -
            - - -
            -
            - - {% if relwork and displaywork %} -
            -
            - - -
            -
            - - -
            -
            - {% endif %} - -
            - - - - - -
            - - {# I would have preferred to name this "display_transformation". - This is the only way I found to be able to keep this setting sticky - per SQL query, and at the same time have a default that displays - the transformations. #} -
            - - -
            - -
            - {% if headers.options.possible_as_geometry %} -
            - - -
            - {% endif %} -
            - - -
            -
            - - -
            -
            -
            -
            - -
            - -
            - {% if default_sliders_state != 'disabled' %} -
            - {% endif %} -
            -{% endif %} - -{% if headers.has_bulk_actions_form %} -
            - {{ get_hidden_inputs(db, table, 1) }} - -{% endif %} - -
            - - - {{ headers.button|raw }} - {{ headers.table_headers_for_columns|raw }} - {{ headers.column_at_right_side|raw }} - - - - - - {{ body|raw }} - -
            -
            - -{% if bulk_links is not empty %} -
            - {% trans 'With selected:' %} - - - {% trans 'With selected:' %} - - - - - - - - {% if bulk_links.has_export_button %} - - {% endif %} -
            - - - -
            -{% endif %} - -{{ navigation_html }} - -{% if operations is not empty %} -
            - {% trans 'Query results operations' %} - - {% if operations.has_print_link %} - - - {{ link_or_button( - '#', - null, - get_icon('b_insrow', 'Copy to clipboard'|trans, true), - {'id': 'copyToClipBoard', 'class': 'btn'} - ) }} - {% endif %} - - {% if not operations.has_procedure %} - {% if operations.has_export_link %} - {{ link_or_button( - url('/table/export'), - operations.url_params, - get_icon('b_tblexport', 'Export'|trans, true), - {'class': 'btn'} - ) }} - - {{ link_or_button( - url('/table/chart'), - operations.url_params, - get_icon('b_chart', 'Display chart'|trans, true), - {'class': 'btn'} - ) }} - - {% if operations.has_geometry %} - {{ link_or_button( - url('/table/gis-visualization'), - operations.url_params, - get_icon('b_globe', 'Visualize GIS data'|trans, true), - {'class': 'btn'} - ) }} - {% endif %} - {% endif %} - - - {{ link_or_button( - url('/view/create'), - {'db': db, 'table': table, 'sql_query': sql_query, 'printview': true}, - get_icon('b_view_add', 'Create view'|trans, true), - {'class': 'btn create_view ajax'} - ) }} - - {% endif %} -
            -{% endif %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/error/report_form.twig b/Sources/php_script/script/phpMyAdmin/templates/error/report_form.twig deleted file mode 100644 index 07b2126..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/error/report_form.twig +++ /dev/null @@ -1,36 +0,0 @@ -{% if allowed_to_send_error_reports %} -

            - {% trans %} - This report automatically includes data about the error and information about relevant configuration settings. It will be sent to the phpMyAdmin team for debugging the error. - {% endtrans %} -

            -
            -
            - - -
            - -
            - {% trans "You may examine the data in the error report:" %} -
            {{ report_data|json_encode(constant('JSON_PRETTY_PRINT') b-or constant('JSON_UNESCAPED_SLASHES')) }}
            -
            - -
            - - -
            - - {{ hidden_inputs|raw }} - {{ hidden_fields|raw }} -
            -{% else %} -
            -
            {{ report_data|json_encode(constant('JSON_PRETTY_PRINT') b-or constant('JSON_UNESCAPED_SLASHES')) }}
            -
            -{% endif %} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/templates/filter.twig b/Sources/php_script/script/phpMyAdmin/templates/filter.twig deleted file mode 100644 index 904c4ea..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/filter.twig +++ /dev/null @@ -1,9 +0,0 @@ -
            -
            {% trans 'Filters' %}
            -
            - -
            - -
            -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/modals/unhide_nav_item.twig b/Sources/php_script/script/phpMyAdmin/templates/modals/unhide_nav_item.twig deleted file mode 100644 index a7eb0f0..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/modals/unhide_nav_item.twig +++ /dev/null @@ -1,14 +0,0 @@ - diff --git a/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/node.twig b/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/node.twig deleted file mode 100644 index fc1fb00..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/node.twig +++ /dev/null @@ -1,68 +0,0 @@ -{% if show_node %} -
          • -
            - - {% if node_is_group %} - {{ 'last' not in class ? '' }} - - - {% if pagination_params is not empty %} - - {% endif %} - {{ node_icon|raw }} - - {% elseif pagination_params is not empty %} - - {% endif %} -
            - {% if node_is_container %} -
            - {% endif %} - - {% if node.isGroup %} -
            - {{ get_image(node.icon['image'], node.icon['title']) }} -
            -  {{ node.name }} - {% else %} -
            - {% for link in icon_links %} - - {{- get_image(link.image, link.title) -}} - - {% endfor %} -
            - - {% if node_is_container %} -  {{ node.name }} - {% else %} - - {{- node.displayName ?? node.realName -}} - - {% endif %} - {% endif %} - - {{ control_buttons|raw }} - - {% if node_is_container %} -
            - {% endif %} - -
            -{% elseif pagination_params is not empty %} - -{% endif %} - -{% if recursive.html is not empty and recursive.has_wrapper %} - -{% endif %} - -{% if has_siblings %} -
          • -{% endif %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/quick_warp.twig b/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/quick_warp.twig deleted file mode 100644 index f43a867..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/navigation/tree/quick_warp.twig +++ /dev/null @@ -1,5 +0,0 @@ -
            - {% if recent %}{{ recent|raw }}{% endif %} - {% if favorite %}{{ favorite|raw }}{% endif %} -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/preferences/autoload.twig b/Sources/php_script/script/phpMyAdmin/templates/preferences/autoload.twig deleted file mode 100644 index a8277f5..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/preferences/autoload.twig +++ /dev/null @@ -1,15 +0,0 @@ - diff --git a/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/configure.twig b/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/configure.twig deleted file mode 100644 index 619168f..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/configure.twig +++ /dev/null @@ -1,17 +0,0 @@ -
            -
            -
            -
            - {% trans "Configure two-factor authentication" %} -
            -
            -
            - {{ get_hidden_inputs() }} - - {{ form|raw }} - -
            -
            -
            -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/confirm.twig b/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/confirm.twig deleted file mode 100644 index 23d6fc3..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/preferences/two_factor/confirm.twig +++ /dev/null @@ -1,18 +0,0 @@ -
            -
            -
            -
            - {% trans "Confirm disabling two-factor authentication" %} -
            -
            -
            - {{ "By disabling two factor authentication you will be again able to login using password only."|trans|notice }} - {{ get_hidden_inputs() }} - {{ form|raw }} - - -
            -
            -
            -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/recent_favorite_table_recent.twig b/Sources/php_script/script/phpMyAdmin/templates/recent_favorite_table_recent.twig deleted file mode 100644 index b507a21..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/recent_favorite_table_recent.twig +++ /dev/null @@ -1,7 +0,0 @@ -{% for table in tables %} - -{% endfor %} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/templates/select_all.twig b/Sources/php_script/script/phpMyAdmin/templates/select_all.twig deleted file mode 100644 index 11ef160..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/select_all.twig +++ /dev/null @@ -1,6 +0,0 @@ -{% trans 'With selected:' %} - - -{% trans 'With selected:' %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/binlog/index.twig b/Sources/php_script/script/phpMyAdmin/templates/server/binlog/index.twig deleted file mode 100644 index 84c7686..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/binlog/index.twig +++ /dev/null @@ -1,107 +0,0 @@ -

            - {{ get_image('s_tbl') }} - {% trans 'Binary log' %} -

            - -
            - {{ get_hidden_inputs(url_params) }} -
            - - {% trans 'Select binary log to view' %} - - - {% set full_size = 0 %} - - {{ binary_logs|length }} - {% trans 'Files' %}, - {% if full_size > 0 %} - {{ format_byte_down(full_size)|join(' ') }} - {% endif %} -
            - -
            - -
            -
            - -{{ sql_message|raw }} - - - - - - - - - - - - - - - - - - {% for value in values %} - - - - - - - - - {% endfor %} - -
            - {% if has_previous %} - {% if has_icons %} - - « - - {% else %} - - {% trans %}Previous{% context %}Previous page{% endtrans %} « - - {% endif %} - - - {% endif %} - - {% if is_full_query %} - - {% trans 'Truncate shown queries' %} - - {% else %} - - {% trans 'Show full queries' %} - - {% endif %} - - {% if has_next %} - - - {% if has_icons %} - - » - - {% else %} - - {% trans %}Next{% context %}Next page{% endtrans %} » - - {% endif %} - {% endif %} -
            {% trans 'Log name' %}{% trans 'Position' %}{% trans 'Event type' %}{% trans 'Server ID' %}{% trans 'Original position' %}{% trans 'Information' %}
            {{ value['Log_name'] }}{{ value['Pos'] }}{{ value['Event_type'] }}{{ value['Server_id'] }} - {{- value['Orig_log_pos'] is defined ? value['Orig_log_pos'] : value['End_log_pos'] -}} - {{ format_sql(value['Info'], not is_full_query) }}
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/engines/index.twig b/Sources/php_script/script/phpMyAdmin/templates/server/engines/index.twig deleted file mode 100644 index 36d60c1..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/engines/index.twig +++ /dev/null @@ -1,33 +0,0 @@ -
            -
            -

            - {{ get_image('b_engine') }} - {% trans 'Storage engines' %} -

            -
            - -
            - - - - - - - - - {% for engine, details in engines %} - - - - - {% endfor %} - -
            {% trans 'Storage Engine' %}{% trans 'Description' %}
            - - {{ details['Engine'] }} - - {{ details['Comment'] }}
            -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/add_user.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/add_user.twig deleted file mode 100644 index 2fdf9fc..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/add_user.twig +++ /dev/null @@ -1,38 +0,0 @@ -

            - {{ get_icon('b_usradd') }} - {% trans 'Add user account' %} -

            - -
            - {{ get_hidden_inputs() }} - - {{ login_information_fields_new|raw }} - -
            - {% trans 'Database for user account' %} - - - -
            - - - -
            - - {% if database is not empty %} - - - -
            - {% endif %} -
            - - {% if is_grant_user %} - {{ privileges_table|raw }} - {% endif %} - - -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/change_password.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/change_password.twig deleted file mode 100644 index 2fe6ad1..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/change_password.twig +++ /dev/null @@ -1,72 +0,0 @@ -
            - {{ get_hidden_inputs() }} - {% if is_privileges %} - - - {% endif %} - -
            - {% trans 'Change password' %} - - - - - - - - - - {% if not is_new or (is_new and has_more_auth_plugins) %} - - - - - {% endif %} - - -
            - - -
            - - - - {% trans 'Enter:' %}      - - {% trans %}Strength:{% context %}Password strength{% endtrans %} - - -
            - {% trans 'Re-type:' %}  - -
            - - - -
            - - {% if is_new and has_more_auth_plugins %} - - {% apply notice %} - {% trans %} - This method requires using an 'SSL connection' or an 'unencrypted connection that encrypts the password using RSA'; while connecting to the server. - {% endtrans %} - {{ show_mysql_docu('sha256-authentication-plugin') }} - {% endapply %} -

            t1G*=6 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�`;JWQ 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

            - {% endif %} - -
            - - - diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/get_user_link.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/get_user_link.twig deleted file mode 100644 index 695d207..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/get_user_link.twig +++ /dev/null @@ -1,11 +0,0 @@ - - {{ get_icon(action.icon, action.text) }} - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/initials_row.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/initials_row.twig deleted file mode 100644 index 622310d..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/initials_row.twig +++ /dev/null @@ -1,20 +0,0 @@ - diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/login_information_fields.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/login_information_fields.twig deleted file mode 100644 index 6e59e43..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/login_information_fields.twig +++ /dev/null @@ -1,91 +0,0 @@ -
            - {% trans 'Login Information' %} -
            - - - - - - -
            - {{ 'An account already exists with the same username but possibly a different hostname.'|trans|notice }} -
            -
            - -
            - - - - - - - {{ show_hint('When Host table is used, this field is ignored and values stored in Host table are used instead.'|trans) }} -
            - -
            - - - - - - {% trans %}Strength:{% context %}Password strength{% endtrans %} - - -
            - -
            - -   - -
            - -
            - -   - - - -
            - {% apply notice %} - {% trans %} - This method requires using an 'SSL connection' or an 'unencrypted connection that encrypts the password using RSA'; while connecting to the server. - {% endtrans %} - {{ show_mysql_docu('sha256-authentication-plugin') }} - {% endapply %} -
            -
            - {# Generate password added here via jQuery #} -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/new_user_ajax.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/new_user_ajax.twig deleted file mode 100644 index 5689f30..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/new_user_ajax.twig +++ /dev/null @@ -1,66 +0,0 @@ - - - - - - - - - {{ user.host }} - - - {% if user.has_password %} - {% trans 'Yes' %} - {% else %} - {% trans 'No' %} - {% endif %} - - - - {{ user.privileges|raw }} - - - {% if user.has_group %} - - {% endif %} - - {{ user.has_grant ? 'Yes'|trans : 'No'|trans }} - - {% if is_grantuser %} - - - {{ get_icon('b_usredit', 'Edit privileges'|trans) }} - - - {% endif %} - {% if user.has_group_edit %} - - - - {% endif %} - - - {{ get_icon('b_tblexport', 'Export'|trans) }} - - - diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/privileges_summary.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/privileges_summary.twig deleted file mode 100644 index e6ea0b8..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/privileges_summary.twig +++ /dev/null @@ -1,104 +0,0 @@ - diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/user_properties.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/user_properties.twig deleted file mode 100644 index 4b257d4..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/user_properties.twig +++ /dev/null @@ -1,152 +0,0 @@ -
            -

            - {{ get_icon('b_usredit') }} - {% trans 'Edit privileges:' %} - {% trans 'User account' %} - - {% if database is not empty %} - - - '{{ username }}'@'{{ hostname }}' - - - - - {% if is_databases %} - {% trans 'Databases' %} - {% else %} - {% trans 'Database' %} - {% endif %} - - {% if table is not empty %} - - - {{ database }} - - - - - {% trans 'Table' %} - {{ table }} - {% else %} - {% if database is not iterable %} - {% set database = [database] %} - {% endif %} - - {{ database|join(', ') }} - - {% endif %} - {% else %} - '{{ username }}'@'{{ hostname }}' - {% endif %} -

            - - {% if current_user == username ~ '@' ~ hostname %} - {{ 'Note: You are attempting to edit privileges of the user with which you are currently logged in.'|trans|notice }} - {% endif %} - - {% if user_does_not_exists %} - {{ 'The selected user was not found in the privilege table.'|trans|error }} - {{ login_information_fields|raw }} - {% endif %} - - - - {{ table_specific_rights|raw }} - - {% if database is not iterable and database|length > 0 and not is_wildcard %} - [ - {% trans 'Database' %} - - {{ database|replace({'\\_': '_', '\\%': '%'}) }}: - {{ database_url_title }} - - ] - {% if table|length > 0 %} - [ - {% trans 'Table' %} - - {{ table }}: - {{ table_url_title }} - - ] - {% endif %} - {% endif %} - - {{ change_password|raw }} - - -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/users_overview.twig b/Sources/php_script/script/phpMyAdmin/templates/server/privileges/users_overview.twig deleted file mode 100644 index e5c5645..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/privileges/users_overview.twig +++ /dev/null @@ -1,182 +0,0 @@ -
            - {{ get_hidden_inputs() }} -
            - - - - - - - - - {% if menus_work %} - - {% endif %} - - {%- set action_colspan = 2 %} - {%- if user_group_count > 0 %}{% set action_colspan = action_colspan + 1 %}{% endif %} - {%- if has_account_locking %}{% set action_colspan = action_colspan + 1 %}{% endif %} - - - - - - {% for host in hosts %} - - - - - - - {% if menus_work %} - - {% endif %} - - {% if is_grantuser %} - - {% endif %} - {% if menus_work and user_group_count > 0 %} - - {% endif %} - - {% if has_account_locking %} - - {% endif %} - - {% endfor %} - -
            {% trans 'User name' %}{% trans 'Host name' %}{% trans 'Password' %} - {% trans 'Global privileges' %} - {{ show_hint('Note: MySQL privilege names are expressed in English.') }} - {% trans 'User group' %}{% trans 'Grant' %}{% trans 'Action' %}
            - - - - {{ host.host }} - {% if host.has_password %} - {% trans 'Yes' %} - {% else %} - {% trans 'No' %} - {% endif %} - {{ not host.has_select_priv ? show_hint('The selected user was not found in the privilege table.'|trans) }} - - {{ host.privileges|join(', ')|raw }} - {{ host.group }}{{ host.has_grant ? 'Yes'|trans : 'No'|trans }} - - {{ get_icon('b_usredit', 'Edit privileges'|trans) }} - - - {% if host.user is not empty %} - - {% endif %} - - - {{ get_icon('b_tblexport', 'Export'|trans) }} - - - -
            -
            - -
            -
            - {% trans 'With selected:' %} - - - {% trans 'With selected:' %} - - - - -
            -
            - -
            - - {% if is_createuser %} -
            -
            {% trans %}New{% context %}Create new user{% endtrans %}
            - -
            - {% endif %} - -
            -
            {{ get_icon('b_usrdrop', 'Remove selected user accounts'|trans) }}
            -
            -

            {% trans 'Revoke all active privileges from the users and delete them afterwards.' %}

            -
            - - -
            -
            - -
            -
            - - diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/replication/primary_add_replica_user.twig b/Sources/php_script/script/phpMyAdmin/templates/server/replication/primary_add_replica_user.twig deleted file mode 100644 index bd82403..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/replication/primary_add_replica_user.twig +++ /dev/null @@ -1,84 +0,0 @@ -
            -
            - {{ get_hidden_inputs('', '') }} - -
            - {% trans 'Add replica replication user' %} - - - - {# Needed for the replication replicas. #} - - - -
            - - - - - -
            - -
            - - - - - - {{ show_hint('When Host table is used, this field is ignored and values stored in Host table are used instead.'|trans) }} -
            - -
            - - - - - -
            - -
            - - - -
            - -
            - - - - - -
            -
            - - -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/index.twig b/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/index.twig deleted file mode 100644 index 00b1952..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/index.twig +++ /dev/null @@ -1,61 +0,0 @@ -{% extends 'server/status/base.twig' %} -{% set active = 'processes' %} -{% block content %} - -
            -
            {% trans 'Filters' %}
            -
            -
            - {{ get_hidden_inputs(url_params) }} - -
            -
            - - -
            -
            - -
            - -
            -
            -
            -
            - -{{ server_process_list|raw }} - -
            -{{ 'Note: Enabling the auto refresh here might cause heavy traffic between the web server and the MySQL server.'|trans|notice }} -
            - - - -{% endblock %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/list.twig b/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/list.twig deleted file mode 100644 index 2a1e7b9..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/status/processes/list.twig +++ /dev/null @@ -1,65 +0,0 @@ -
            - - - - - {% for column in columns %} - - {% endfor %} - - - - - {% for row in rows %} - - - - - - - - - - - - {% endfor %} - -
            {% trans 'Processes' %} - - {{ column.name }} - {% if column.is_sorted %} - 
-                  {%- trans 'Descending' %} - 
-                  {%- trans 'Ascending' %} - {% endif %} - - {% if column.has_full_query %} - - {% if column.is_full %} - {{ get_image( - 's_partialtext', - 'Truncate shown queries'|trans, - {'class': 'icon_fulltext'} - ) }} - {% else %} - {{ get_image( - 's_fulltext', - 'Show full queries'|trans, - {'class': 'icon_fulltext'} - ) }} - {% endif %} - - {% endif %} -
            - - {% trans 'Kill' %} - - {{ row.id }}{{ row.user }}{{ row.host }} - {% if row.db != '' %} - {{ row.db }} - {% else %} - {% trans 'None' %} - {% endif %} - {{ row.command }}{{ row.time }}{{ row.state }}{{ row.progress }}{{ row.info|raw }}
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/user_groups/edit_user_groups.twig b/Sources/php_script/script/phpMyAdmin/templates/server/user_groups/edit_user_groups.twig deleted file mode 100644 index a16662a..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/user_groups/edit_user_groups.twig +++ /dev/null @@ -1,23 +0,0 @@ -{% if user_group == null %} -

            {% trans 'Add user group' %}

            -{% else %} -

            {{ 'Edit user group: \'%s\''|trans|format(edit_user_group_special_chars) }}

            -{% endif %} -
            - {{ hidden_inputs|raw }} -
            - {% trans 'User group menu assignments' %}     - - - - {% if user_group == null %} - - -
            - {% endif %} - {{ tab_list|raw }} -
            - -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/server/variables/index.twig b/Sources/php_script/script/phpMyAdmin/templates/server/variables/index.twig deleted file mode 100644 index 0bf9ba5..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/server/variables/index.twig +++ /dev/null @@ -1,83 +0,0 @@ -
            -
            -

            - {{ get_image('s_vars') }} - {% trans 'Server variables and settings' %} - {{ show_mysql_docu('server_system_variables') }} -

            -
            - -{% if variables is not empty %} - - {{ get_icon('b_save', 'Save'|trans) }} - - - {{ get_icon('b_close', 'Cancel'|trans) }} - - {{ get_image('b_help', 'Documentation'|trans, { - 'class': 'hide', - 'id': 'docImage' - }) }} - - {% include 'filter.twig' with { - 'filter_value': filter_value - } only %} - -
            - - - - - - - - - - - {% for variable in variables %} - - - - - - - {% if variable.has_session_value %} - - - - - - {% endif %} - {% endfor %} - -
            {% trans 'Action' %}{% trans 'Variable' %}{% trans 'Value' %}
            - {% if variable.is_editable %} - {{ get_icon('b_edit', 'Edit'|trans) }} - {% else %} - - {{ get_icon('bd_edit', 'Edit'|trans) }} - - {% endif %} - - {% if variable.doc_link != null %} - - {{ variable.doc_link|raw }} - - {% else %} - {{ variable.name|replace({'_': ' '}) }} - {% endif %} - - {% if variable.is_escaped %} - {{ variable.value|raw }} - {% else %} - {{ variable.value|e|replace({',': ',​'})|raw }} - {% endif %} -
            {{ variable.name|replace({'_': ' '}) }} ({% trans 'Session value' %}){{ variable.session_value }}
            -
            -
            - -{% else %} - {{ 'Not enough privilege to view server variables and settings. %s'|trans|format( - link_to_var_documentation('show_compatibility_56', is_mariadb) - )|error }} -{% endif %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/setup/servers/index.twig b/Sources/php_script/script/phpMyAdmin/templates/setup/servers/index.twig deleted file mode 100644 index e6cb79a..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/setup/servers/index.twig +++ /dev/null @@ -1,20 +0,0 @@ -{% extends 'setup/base.twig' %} -{% block content %} - -{% if mode == 'edit' and has_server %} -

            - {% trans 'Edit server' %} - {{ server_id }} - ({{ server_dsn }}) -

            -{% elseif mode != 'revert' or not has_server %} -

            {% trans 'Add a new server' %}

            -{% endif %} - -{% if mode == 'add' or mode == 'edit' or mode == 'revert' %} - {{ page|raw }} -{% else %} -

            {% trans 'Something went wrong.' %}

            -{% endif %} - -{% endblock %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/sql/sql_query_results.twig b/Sources/php_script/script/phpMyAdmin/templates/sql/sql_query_results.twig deleted file mode 100644 index 36c10e1..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/sql/sql_query_results.twig +++ /dev/null @@ -1,8 +0,0 @@ -
            - {{ previous_update_query|raw }} - {{ profiling_chart|raw }} - {{ missing_unique_column_message|raw }} - {{ bookmark_created_message|raw }} - {{ table|raw }} - {{ bookmark_support|raw }} -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/chart/tbl_chart.twig b/Sources/php_script/script/phpMyAdmin/templates/table/chart/tbl_chart.twig deleted file mode 100644 index bf8a5df..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/chart/tbl_chart.twig +++ /dev/null @@ -1,155 +0,0 @@ -
            -

            {% trans 'Display chart' %}

            - -
            -
            -
            - {{ get_hidden_inputs(url_params) }} - -
            - {% trans 'Chart type' %} -
            - - -
            -
            - - -
            -
            - - -
            -
            - - -
            -
            - - -
            -
            - - -
            -
            - - -
            -
            - - -
            -
            - -
            - - -
            - -
            - - -
            - - {% set xaxis = null %} -
            - - -
            - -
            - - -
            - - - - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - - {{ include('table/start_and_number_of_rows_fieldset.twig', start_and_number_of_rows_fieldset) }} - - -
            -
            -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/delete/confirm.twig b/Sources/php_script/script/phpMyAdmin/templates/table/delete/confirm.twig deleted file mode 100644 index 38b882d..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/delete/confirm.twig +++ /dev/null @@ -1,32 +0,0 @@ -
            - {{ get_hidden_inputs({ - 'db': db, - 'table': table, - 'selected': selected, - 'original_sql_query': sql_query, - 'fk_checks': '0' - }) }} - -
            - - {% trans 'Do you really want to execute the following query?' %} - - -
              - {% for row in selected %} -
            • DELETE FROM {{ backquote(table) }} WHERE {{ row }};
            • - {% endfor %} -
            -
            - -
            -
            - - -
            -
            - - -
            -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/find_replace/replace_preview.twig b/Sources/php_script/script/phpMyAdmin/templates/table/find_replace/replace_preview.twig deleted file mode 100644 index 4067fe4..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/find_replace/replace_preview.twig +++ /dev/null @@ -1,39 +0,0 @@ -
            - {{ get_hidden_inputs(db, table) }} - - - - - - -
            -
            {% trans 'Find and replace - preview' %}
            - -
            - - - - - - - - - - {% if result is iterable %} - {% for row in result %} - - - - - - {% endfor %} - {% endif %} - -
            {% trans 'Count' %}{% trans 'Original string' %}{% trans 'Replaced string' %}
            {{ row[2] }}{{ row[0] }}{{ row[1] }}
            -
            - - -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/gis_visualization/gis_visualization.twig b/Sources/php_script/script/phpMyAdmin/templates/table/gis_visualization/gis_visualization.twig deleted file mode 100644 index 19dbef0..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/gis_visualization/gis_visualization.twig +++ /dev/null @@ -1,62 +0,0 @@ -
            -

            {% trans 'Display GIS Visualization' %}

            - -
            -
            -
            - {{ get_hidden_inputs(url_params) }} - -
            - - -
            -
            - - -
            -
            - -
            - - -
            -
            -
            - -
            -
            - {{ include('table/start_and_number_of_rows_fieldset.twig', start_and_number_of_rows_fieldset) }} -
            -
            - -
            - {{ visualization|raw }} -
            -
            - - -
            -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/import/index.twig b/Sources/php_script/script/phpMyAdmin/templates/table/import/index.twig deleted file mode 100644 index d1cee8a..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/import/index.twig +++ /dev/null @@ -1,3 +0,0 @@ -{% extends 'import.twig' %} - -{% block title %}{{ 'Importing into the table "%s"'|trans|format(table) }}{% endblock %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/check.twig b/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/check.twig deleted file mode 100644 index fea9439..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/check.twig +++ /dev/null @@ -1,41 +0,0 @@ -
            -

            - {% trans 'Check table' %} - {{ show_mysql_docu('CHECK_TABLE') }} -

            - - {{ message|raw }} - - {% for name, table in rows %} -
            -
            {{ name }}
            - -
              - {% for row in table %} -
            • - {% if row.operation|lower != 'check' %} - {{ row.operation|title }} - {% endif %} - - {% set badge_variation %} - {%- if row.type|lower == 'error' -%} - bg-danger - {%- elseif row.type|lower == 'warning' -%} - bg-warning - {%- elseif row.type|lower == 'info' or row.type|lower == 'note' -%} - bg-info - {%- else -%} - bg-secondary - {%- endif -%} - {% endset %} - {{ row.type|title }} - - {{ row.text }} -
            • - {% endfor %} -
            -
            - {% endfor %} - - {{ indexes_problems|raw }} -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/optimize.twig b/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/optimize.twig deleted file mode 100644 index 938086a..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/maintenance/optimize.twig +++ /dev/null @@ -1,39 +0,0 @@ -
            -

            - {% trans 'Optimize table' %} - {{ show_mysql_docu('OPTIMIZE_TABLE') }} -

            - - {{ message|raw }} - - {% for name, table in rows %} -
            -
            {{ name }}
            - -
              - {% for row in table %} -
            • - {% if row.operation|lower != 'optimize' %} - {{ row.operation|title }} - {% endif %} - - {% set badge_variation %} - {%- if row.type|lower == 'error' -%} - bg-danger - {%- elseif row.type|lower == 'warning' -%} - bg-warning - {%- elseif row.type|lower == 'info' or row.type|lower == 'note' -%} - bg-info - {%- else -%} - bg-secondary - {%- endif -%} - {% endset %} - {{ row.type|title }} - - {{ row.text }} -
            • - {% endfor %} -
            -
            - {% endfor %} -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/operations/view.twig b/Sources/php_script/script/phpMyAdmin/templates/table/operations/view.twig deleted file mode 100644 index fc7f430..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/operations/view.twig +++ /dev/null @@ -1,49 +0,0 @@ -
            -
            - {{ get_hidden_inputs(db, table) }} - - - -
            -
            {% trans 'Operations' %}
            -
            -
            -
            - -
            -
            - -
            -
            -
            - -
            -
            - -
            -
            {% trans 'Delete data or table' %}
            -
            -
            - {{ link_or_button( - url('/sql'), - url_params|merge({ - 'sql_query': 'DROP VIEW ' ~ backquote(table), - 'goto': url('/table/structure'), - 'reload': true, - 'purge': true, - 'message_to_show': 'View %s has been dropped.'|trans|format(table)|e, - 'table': table - }), - 'Delete the view (DROP)'|trans, - { - 'id': 'drop_view_anchor', - 'class': 'text-danger ajax' - } - ) }} - {{ show_mysql_docu('DROP VIEW') }} -
            -
            -
            -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/partition/optimize.twig b/Sources/php_script/script/phpMyAdmin/templates/table/partition/optimize.twig deleted file mode 100644 index 426783a..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/partition/optimize.twig +++ /dev/null @@ -1,36 +0,0 @@ -
            -

            {% trans 'Optimize partition' %}

            - - {{ message|raw }} - - {% for name, table in rows %} -
            -
            {{ name }} ({{ partition_name }})
            - -
              - {% for row in table %} -
            • - {% if row.Op|lower != 'optimize' %} - {{ row.Op|title }} - {% endif %} - - {% set badge_variation %} - {%- if row.Msg_type|lower == 'error' -%} - bg-danger - {%- elseif row.Msg_type|lower == 'warning' -%} - bg-warning - {%- elseif row.Msg_type|lower == 'info' or row.Msg_type|lower == 'note' -%} - bg-info - {%- else -%} - bg-secondary - {%- endif -%} - {% endset %} - {{ row.Msg_type|title }} - - {{ row.Msg_text }} -
            • - {% endfor %} -
            -
            - {% endfor %} -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/relation/common_form.twig b/Sources/php_script/script/phpMyAdmin/templates/table/relation/common_form.twig deleted file mode 100644 index ecc81be..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/relation/common_form.twig +++ /dev/null @@ -1,244 +0,0 @@ -{% extends 'table/page_with_secondary_tabs.twig' %} - -{% block content %} -
            - {{ get_hidden_inputs(db, table) }} - {# InnoDB #} - {% if is_foreign_key_supported(tbl_storage_engine) %} -
            - {% trans 'Foreign key constraints' %} -
            - - - - - - {% if tbl_storage_engine|upper == 'INNODB' %} - - {% else %} - - {% endif %} - - - - - - - - - - - {% set i = 0 %} - {% if existrel_foreign is not empty %} - {% for key, one_key in existrel_foreign %} - {# Foreign database dropdown #} - {% set foreign_db = one_key['ref_db_name'] is defined - and one_key['ref_db_name'] is not null - ? one_key['ref_db_name'] : db %} - {% set foreign_table = false %} - {% if foreign_db %} - {% set foreign_table = one_key['ref_table_name'] is defined - and one_key['ref_table_name'] is not null - ? one_key['ref_table_name'] : false %} - {% endif %} - {% set unique_columns = [] %} - {% if foreign_db and foreign_table %} - {% set table_obj = table_get(foreign_table, foreign_db) %} - {% set unique_columns = table_obj.getUniqueColumns(false, false) %} - {% endif %} - {% include 'table/relation/foreign_key_row.twig' with { - 'i': i, - 'one_key': one_key, - 'column_array': column_array, - 'options_array': options_array, - 'tbl_storage_engine': tbl_storage_engine, - 'db': db, - 'table': table, - 'url_params': url_params, - 'databases': databases, - 'foreign_db': foreign_db, - 'foreign_table': foreign_table, - 'unique_columns': unique_columns - } only %} - {% set i = i + 1 %} - {% endfor %} - {% endif %} - {% include 'table/relation/foreign_key_row.twig' with { - 'i': i, - 'one_key': [], - 'column_array': column_array, - 'options_array': options_array, - 'tbl_storage_engine': tbl_storage_engine, - 'db': db, - 'table': table, - 'url_params': url_params, - 'databases': databases, - 'foreign_db': foreign_db, - 'foreign_table': foreign_table, - 'unique_columns': unique_columns - } only %} - {% set i = i + 1 %} - - - -
            {% trans 'Actions' %}{% trans 'Constraint properties' %} - {% trans 'Column' %} - {{ show_hint('Creating a foreign key over a non-indexed column would automatically create an index on it. Alternatively, you can define an index below, before creating the foreign key.'|trans) }} - - {% trans 'Column' %} - {{ show_hint('Only columns with index will be displayed. You can define an index below.'|trans) }} - - {% trans 'Foreign key constraint' %} - ({{ tbl_storage_engine }}) -
            {% trans 'Database' %}{% trans 'Table' %}{% trans 'Column' %}
            - - {% trans '+ Add constraint' %} - -
            -
            -
            - {% endif %} - - {% if relation_parameters.relationFeature is not null %} - {% if default_sliders_state != 'disabled' and is_foreign_key_supported(tbl_storage_engine) %} -
            - -
            -
            - {% endif %} - -
            - - {% trans 'Internal relationships' %} - {{ show_docu('config', 'cfg_Servers_relation') }} - - - - - - - - - - {% set saved_row_cnt = save_row|length - 1 %} - {% for i in 0..saved_row_cnt %} - {% set myfield = save_row[i]['Field'] %} - {# Use an md5 as array index to avoid having special characters - in the name attribute (see bug #1746964 ) #} - {% set myfield_md5 = column_hash_array[myfield] %} - - {% set foreign_table = false %} - {% set foreign_column = false %} - - {# Database dropdown #} - {% if existrel[myfield] is defined %} - {% set foreign_db = existrel[myfield]['foreign_db'] %} - {% else %} - {% set foreign_db = db %} - {% endif %} - - {# Table dropdown #} - {% set tables = [] %} - {% if foreign_db %} - {% if existrel[myfield] is defined %} - {% set foreign_table = existrel[myfield]['foreign_table'] %} - {% endif %} - {% set tables = dbi.getTables(foreign_db) %} - {% endif %} - - {# Column dropdown #} - {% set unique_columns = [] %} - {% if foreign_db and foreign_table %} - {% if existrel[myfield] is defined %} - {% set foreign_column = existrel[myfield]['foreign_field'] %} - {% endif %} - {% set table_obj = table_get(foreign_table, foreign_db) %} - {% set unique_columns = table_obj.getUniqueColumns(false, false) %} - {% endif %} - - - - - - - {% endfor %} - -
            {% trans 'Column' %} - {% trans 'Internal relation' %} - {% if is_foreign_key_supported(tbl_storage_engine) %} - {{ show_hint('An internal relation is not necessary when a corresponding FOREIGN KEY relation exists.'|trans) }} - {% endif %} -
            - {{ myfield }} - - - {% include 'table/relation/relational_dropdown.twig' with { - 'name': 'destination_db[' ~ myfield_md5 ~ ']', - 'title': 'Database'|trans, - 'values': databases, - 'foreign': foreign_db - } only %} - - {% include 'table/relation/relational_dropdown.twig' with { - 'name': 'destination_table[' ~ myfield_md5 ~ ']', - 'title': 'Table'|trans, - 'values': tables, - 'foreign': foreign_table - } only %} - - {% include 'table/relation/relational_dropdown.twig' with { - 'name': 'destination_column[' ~ myfield_md5 ~ ']', - 'title': 'Column'|trans, - 'values': unique_columns, - 'foreign': foreign_column - } only %} -
            -
            - {% if default_sliders_state != 'disabled' and is_foreign_key_supported(tbl_storage_engine) %} -
            - {% endif %} - {% endif %} - - {% if relation_parameters.displayFeature is not null %} - {% set disp = get_display_field(db, table) %} -
            - - -
            - {% endif %} - -
            - - -
            -
            - - -{% endblock %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/search/index.twig b/Sources/php_script/script/phpMyAdmin/templates/table/search/index.twig deleted file mode 100644 index 3c19c51..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/search/index.twig +++ /dev/null @@ -1,203 +0,0 @@ - - -
            - {{ get_hidden_inputs(db, table) }} - - - -
            -
            {% trans 'Do a "query by example" (wildcard: "%")' %}
            - -
            -
            -
            - - - - {% if geom_column_flag %} - - {% endif %} - - - - - - - - - {% for column_index in 0..column_names|length - 1 %} - - {# If 'Function' column is present trying to change comment #} - {% if geom_column_flag %} - {# Displays 'Function' column if it is present #} - - {% endif %} - {# Displays column's name, type, collation and value #} - - {% set properties = self.getColumnProperties(column_index, column_index) %} - - - - {# here, the data-type attribute is needed for a date/time picker #} - - - {% endfor %} - -
            {% trans 'Function' %}{% trans 'Column' %}{% trans 'Type' %}{% trans 'Collation' %}{% trans 'Operator' %}{% trans 'Value' %}
            - {% set geom_types = get_gis_datatypes() %} - {% if column_types[column_index] in geom_types %} - - {% endif %} - - {#- Keep this without extra spaces because it is used for a request to build the BETWEEN modal -#} - {{- column_names[column_index] -}} - - {{ properties['type'] }} - - {{ properties['collation'] }} - - {{ properties['func']|raw }} - - {{ properties['value']|raw }} - {# Displays hidden fields #} - - - -
            -
            -
            - -
            - - {% if default_sliders_state != 'disabled' %} -
            - -
            -
            - {% endif %} - - {# Displays columns select list for selecting distinct columns in the search #} -
            -
            - - -
            -
            - - -
            -
            - - {# Displays input box for custom 'Where' clause to be used in the search #} -
            - - -
            - - {# Displays option of changing default number of rows displayed per page #} -
            - - -
            - - {# Displays option for ordering search results by a column value (Asc or Desc) #} -
            - {% trans 'Display order:' %} -
            - - -
            - -
            - - -
            -
            - - -
            -
            - {% if default_sliders_state != 'disabled' %} -
            - {% endif %} -
            - - -
            -
            - - - -
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/structure/display_structure.twig b/Sources/php_script/script/phpMyAdmin/templates/table/structure/display_structure.twig deleted file mode 100644 index 6e8e4cb..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/structure/display_structure.twig +++ /dev/null @@ -1,614 +0,0 @@ -{% extends 'table/page_with_secondary_tabs.twig' %} -{% block content %} -

            {{table}}

            -
            - {{ get_hidden_inputs(db, table) }} - -
            - - {# Table header #} - - - - - - - - - - - {% if show_column_comments -%} - - {%- endif %} - - {# @see table/structure.js, function moreOptsMenuResize() #} - {% if not db_is_system_schema and not tbl_is_view %} - - {% endif %} - - - - {# Table body #} - {% set rownum = 0 %} - {% for row in fields %} - {% set rownum = rownum + 1 %} - - {% set extracted_columnspec = extracted_columnspecs[rownum] %} - {% set field_name = row['Field']|e %} - {# For column comments #} - {% set comments = row_comments[rownum] %} - {# Underline commented fields and display a hover-title (CSS only) #} - - - - - - - - {{ extracted_columnspec['displayed_type']|raw }} - {% if relation_parameters.columnCommentsFeature is not null and relation_parameters.browserTransformationFeature is not null and browse_mime - and mime_map[row['Field']]['mimetype'] is defined %} -
            {% trans 'Media type:' %} {{ mime_map[row['Field']]['mimetype']|replace({'_': '/'})|lower }} - {% endif %} -
            - -
            - - - - {% if show_column_comments %} - - {% endif %} - - {% if not tbl_is_view and not db_is_system_schema %} - - - {% endif %} - - {% if not tbl_is_view and not db_is_system_schema %} - {% set type = extracted_columnspec['print_type'] is not empty ? extracted_columnspec['print_type'] %} - - {% endif %} - - {% endfor %} - -
            #{% trans 'Name' %}{% trans 'Type' %}{% trans 'Collation' %}{% trans 'Attributes' %}{% trans 'Null' %}{% trans 'Default' %}{% trans 'Comments' %}{% trans 'Extra' %}{% trans 'Action' %}
            - - {{ rownum }} - - - {% if row['Collation'] is not empty %} - {{ collations[row['Collation']].name }} - {% endif %} - {{ attributes[rownum] }}{{ row['Null'] == 'YES' ? 'Yes'|trans : 'No'|trans }} - {% if row['Default'] is not null %} - {% if extracted_columnspec['type'] == 'bit' %} - {{ row['Default']|convert_bit_default_value }} - {% else %} - {{ row['Default'] }} - {% endif %} - {% elseif row['Null'] == 'YES' %} - NULL - {% else %} - {% trans %}None{% context %}None for default{% endtrans %} - {% endif %} - - {{ comments }} - {{ row['Extra']|upper }} - - {{ get_icon('b_edit', 'Change'|trans) }} - - - - {{ get_icon('b_drop', 'Drop'|trans) }} - - - {% if hide_structure_actions %} - - {% endif %} -
            -
            -
            - {% include 'select_all.twig' with { - 'text_dir': text_dir, - 'form_name': 'fieldsForm' - } only %} - - - - {% if not tbl_is_view and not db_is_system_schema %} - - - - {% if tbl_storage_engine != 'ARCHIVE' %} - - - - - - - {% if relation_parameters.centralColumnsFeature is not null %} - - - {% endif %} - {% endif %} - {% endif %} -
            -
            -
            - - - - - -{# Work on the table #} - -{% if not tbl_is_view and not db_is_system_schema %} -
            - {{ get_hidden_inputs(db, table) }} - {% if show_icons('ActionLinksMode') %} - {{ get_image('b_insrow', 'Add column'|trans) }}  - {% endif %} - {% set num_fields -%} - - {%- endset %} - {{ 'Add %s column(s)'|trans|format(num_fields)|raw }} -   - {# I tried displaying the drop-down inside the label but with Firefox the drop-down was blinking #} - - -
            -{% endif %} - -{% if not tbl_is_view and not db_is_system_schema and tbl_storage_engine != 'ARCHIVE' %} -
            -
            - - {% trans 'Indexes' %} - {{ show_mysql_docu('optimizing-database-structure') }} - - - {% if indexes is not empty %} - {{ indexes_duplicates|raw }} - - {{ include('modals/preview_sql_confirmation.twig') }} -
            - - - - - - - - - - - - - - - - - {% for index in indexes %} - - {% set columns_count = index.getColumnCount() %} - - - - - - - - - - {% for column in index.getColumns() %} - {% if column.getSeqInIndex() > 1 %} - - {% endif %} - - - - - - {% if column.getSeqInIndex() == 1 %} - - {% endif %} - - {% endfor %} - - {% endfor %} -
            {% trans 'Action' %}{% trans 'Keyname' %}{% trans 'Type' %}{% trans 'Unique' %}{% trans 'Packed' %}{% trans 'Column' %}{% trans 'Cardinality' %}{% trans 'Collation' %}{% trans 'Null' %}{% trans 'Comment' %}
            - - {{ get_icon('b_edit', 'Edit'|trans) }} - - - - {{ get_icon('b_rename', 'Rename'|trans) }} - - - {% if index.getName() == 'PRIMARY' %} - {% set index_params = { - 'sql_query': 'ALTER TABLE ' ~ backquote(table) ~ ' DROP PRIMARY KEY;', - 'message_to_show': 'The primary key has been dropped.'|trans - } %} - {% else %} - {% set index_params = { - 'sql_query': 'ALTER TABLE ' ~ backquote(table) ~ ' DROP INDEX ' ~ backquote(index.getName()) ~ ';', - 'message_to_show': 'Index %s has been dropped.'|trans|format(index.getName()) - } %} - {% endif %} - - - {{ link_or_button( - url('/sql'), - index_params|merge({'db': db, 'table': table}), - get_icon('b_drop', 'Drop'|trans), - {'class': 'drop_primary_key_index_anchor ajax'} - ) }} - {{ index.getName() }}{{ index.getType()|default(index.getChoice()) }}{{ index.isUnique() ? 'Yes'|trans : 'No'|trans }}{{ index.isPacked()|raw }}
            - {% if column.hasExpression() %}{{ column.getExpression() }}{% else %}{{ column.getName() }}{% endif %} - {% if column.getSubPart() is not empty %} - ({{ column.getSubPart() }}) - {% endif %} - {{ column.getCardinality() }}{{ column.getCollation() }}{{ column.getNull(true) }}{{ index.getComments() }}
            -
            - {% else %} -
            {{ 'No index defined!'|trans|notice }}
            - {% endif %} -
            - -
            -
            - {{ get_hidden_inputs(db, table) }} - - - {% apply format('')|raw %} - {% trans %}Create an index on %s columns{% endtrans %} - {% endapply %} - - -
            -
            -
            - {{ include('modals/index_dialog_modal.twig') }} -{% endif %} - -{# Display partition details #} -{% if have_partitioning %} - {# Detect partitioning #} - {% if partition_names is not empty and partition_names[0] is not null %} - {% set first_partition = partitions[0] %} - {% set range_or_list = first_partition.getMethod() == 'RANGE' - or first_partition.getMethod() == 'RANGE COLUMNS' - or first_partition.getMethod() == 'LIST' - or first_partition.getMethod() == 'LIST COLUMNS' %} - {% set sub_partitions = first_partition.getSubPartitions() %} - {% set has_sub_partitions = first_partition.hasSubPartitions() %} - {% if has_sub_partitions %} - {% set first_sub_partition = sub_partitions[0] %} - {% endif %} - - {% if default_sliders_state != 'disabled' %} -
            - -
            -
            - {% endif %} - - {% include 'table/structure/display_partitions.twig' with { - 'db': db, - 'table': table, - 'partitions': partitions, - 'partition_method': first_partition.getMethod(), - 'partition_expression': first_partition.getExpression(), - 'has_description': first_partition.getDescription() is not empty, - 'has_sub_partitions': has_sub_partitions, - 'sub_partition_method': has_sub_partitions ? first_sub_partition.getMethod(), - 'sub_partition_expression': has_sub_partitions ? first_sub_partition.getExpression(), - 'range_or_list': range_or_list - } only %} - {% else %} - {% include 'table/structure/display_partitions.twig' with { - 'db': db, - 'table': table - } only %} - {% endif %} - {% if default_sliders_state != 'disabled' %} -
            - {% endif %} -{% endif %} - -{# Displays Space usage and row statistics #} -{% if show_stats %} - {{ table_stats|raw }} -{% endif %} -
            -{% endblock %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/table/tracking/structure_snapshot_columns.twig b/Sources/php_script/script/phpMyAdmin/templates/table/tracking/structure_snapshot_columns.twig deleted file mode 100644 index d84063c..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/table/tracking/structure_snapshot_columns.twig +++ /dev/null @@ -1,56 +0,0 @@ -

            {% trans 'Structure' %}

            - - - - - - - - - - - - - - - {% set index = 1 %} - {% for field in columns %} - - - {% set index = index + 1 %} - - - - - - - - - {% endfor %} - -
            {% trans %}#{% context %}Number{% endtrans %}{% trans 'Column' %}{% trans 'Type' %}{% trans 'Collation' %}{% trans 'Null' %}{% trans 'Default' %}{% trans 'Extra' %}{% trans 'Comment' %}
            {{ index }} - - {{ field['Field'] }} - {% if field['Key'] == 'PRI' %} - {{ get_image('b_primary', 'Primary'|trans) }} - {% elseif field['Key'] is not empty %} - {{ get_image('bd_primary', 'Index'|trans) }} - {% endif %} - - {{ field['Type'] }}{{ field['Collation'] }}{{ field['Null'] == 'YES' ? 'Yes'|trans : 'No'|trans }} - {% if field['Default'] is defined %} - {% set extracted_columnspec = extract_column_spec(field['Type']) %} - {% if extracted_columnspec['type'] == 'bit' %} - {# here, $field['Default'] contains something like b'010' #} - {{ field['Default']|convert_bit_default_value }} - {% else %} - {{ field['Default'] }} - {% endif %} - {% else %} - {% if field['Null'] == 'YES' %} - NULL - {% else %} - {% trans %}None{% context %}None for default{% endtrans %} - {% endif %} - {% endif %} - {{ field['Extra'] }}{{ field['Comment'] }}
            diff --git a/Sources/php_script/script/phpMyAdmin/templates/test/gettext/notes.twig b/Sources/php_script/script/phpMyAdmin/templates/test/gettext/notes.twig deleted file mode 100644 index e5a38e4..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/test/gettext/notes.twig +++ /dev/null @@ -1,5 +0,0 @@ -{% trans %} -Text -{% notes %} -Notes -{% endtrans %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/test/gettext/pgettext.twig b/Sources/php_script/script/phpMyAdmin/templates/test/gettext/pgettext.twig deleted file mode 100644 index 5365027..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/test/gettext/pgettext.twig +++ /dev/null @@ -1,5 +0,0 @@ -{% trans %} -Text -{% context %} -Text context -{% endtrans %} diff --git a/Sources/php_script/script/phpMyAdmin/templates/test/raw_output.twig b/Sources/php_script/script/phpMyAdmin/templates/test/raw_output.twig deleted file mode 100644 index fe86f42..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/test/raw_output.twig +++ /dev/null @@ -1,2 +0,0 @@ -{{ variable1|raw }} -{{ variable2|raw }} diff --git a/Sources/php_script/script/phpMyAdmin/templates/test/static.twig b/Sources/php_script/script/phpMyAdmin/templates/test/static.twig deleted file mode 100644 index 703390d..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/test/static.twig +++ /dev/null @@ -1 +0,0 @@ -static content \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/templates/top_menu.twig b/Sources/php_script/script/phpMyAdmin/templates/top_menu.twig deleted file mode 100644 index b134395..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/top_menu.twig +++ /dev/null @@ -1,22 +0,0 @@ - diff --git a/Sources/php_script/script/phpMyAdmin/templates/user_password.twig b/Sources/php_script/script/phpMyAdmin/templates/user_password.twig deleted file mode 100644 index 64a6644..0000000 --- a/Sources/php_script/script/phpMyAdmin/templates/user_password.twig +++ /dev/null @@ -1,2 +0,0 @@ - -{% trans 'Back' %} diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/css/theme.css b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/css/theme.css deleted file mode 100644 index dc903c7..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/css/theme.css +++ /dev/null @@ -1,3 +0,0 @@ -:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 33, 37, 41;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size: 1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-bg: #fff}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media(min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + 0.6vw)}@media(min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + 0.3vw)}@media(min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#0d6efd;text-decoration:underline}a:hover{color:#0a58ca}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr /* rtl:ignore */;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x, 0.75rem);padding-left:var(--bs-gutter-x, 0.75rem);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #212529;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #212529;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #212529;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#212529;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #cfe2ff;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg: #e2e3e5;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::-webkit-file-upload-button{-webkit-transition:none;transition:none}}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;-moz-appearance:none;appearance:none}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.3rem}.form-check{display:block;min-height:1.5rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{-webkit-transition:none;transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{-moz-transition:none;transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#212529;text-align:center;text-decoration:none;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .75rem;font-size:1rem;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:#212529}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#0d6efd;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#6c757d;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:#0d6efd;text-decoration:underline}.btn-link:hover{color:#0a58ca}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem;border-radius:.2rem}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .35s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:0.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#0d6efd;text-decoration:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:#0a58ca}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#e9ecef #e9ecef #dee2e6;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:.5rem;padding-bottom:.5rem}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;text-decoration:none;white-space:nowrap}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:.25rem;transition:box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transition:none;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.55)}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.55);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:rgba(0,0,0,.55)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:1rem 1.25rem;font-size:1rem;color:#212529;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,border-radius .15s ease}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:#0c63e4;background-color:#e7f1ff;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem;transition:transform .2s ease-in-out}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-left-radius:calc(0.25rem - 1px);border-top-right-radius:calc(0.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:calc(0.25rem - 1px);border-bottom-left-radius:calc(0.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#6c757d;content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#0d6efd;text-decoration:none;background-color:#fff;border:1px solid #dee2e6;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:#0a58ca;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:3;color:#0a58ca;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#dee2e6}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.875rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1rem;border:1px solid rgba(0,0,0,0);border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;text-decoration:none;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:.25rem;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:calc(0.3rem - 1px);border-top-right-radius:calc(0.3rem - 1px)}.modal-header .btn-close{padding:.5rem .5rem;margin:-0.5rem -0.5rem -0.5rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #dee2e6;border-bottom-right-radius:calc(0.3rem - 1px);border-bottom-left-radius:calc(0.3rem - 1px)}.modal-footer>*{margin:.25rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}@-webkit-keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-right-color:rgba(0,0,0,0);border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:hover,.link-primary:focus{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:hover,.link-secondary:focus{color:#565e64}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-top-0{border-top:0 !important}.border-end{border-right:1px solid #dee2e6 !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:1px solid #dee2e6 !important}.border-start-0{border-left:0 !important}.border-primary{border-color:#0d6efd !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + 0.9vw) !important}.fs-3{font-size:calc(1.3rem + 0.6vw) !important}.fs-4{font-size:calc(1.275rem + 0.3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:.25rem !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:.25rem !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-left-radius:.25rem !important;border-top-right-radius:.25rem !important}.rounded-end{border-top-right-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-bottom{border-bottom-right-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-start{border-bottom-left-radius:.25rem !important;border-top-left-radius:.25rem !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media(min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}#page_content{margin:0 .5em}.data{margin:0 0 12px}button.mult_submit,.checkall_box+label{text-decoration:none;color:#235a81;cursor:pointer;outline:none}button.mult_submit:hover,button.mult_submit:focus{text-decoration:underline;color:#235a81}.checkall_box+label:hover{text-decoration:underline;color:#235a81}#navbarDropdown>img{display:none}textarea.char{margin:6px}textarea.charField{width:95%}.pma-fieldset{margin-top:1em;border-radius:4px 4px 0 0;border:#aaa solid 1px;padding:.5em;background:#eee;text-shadow:1px 1px 2px #fff;box-shadow:1px 1px 2px #fff inset}.pma-fieldset .pma-fieldset{margin:.8em;border:1px solid #aaa;background:#e8e8e8}.pma-fieldset legend{float:none;font-weight:bold;color:#444;padding:5px 10px;border-radius:2px;border:1px solid #aaa;background-color:#fff;max-width:100%;box-shadow:3px 3px 15px #bbb;width:initial;font-size:1em}.datatable{table-layout:fixed}.clearfloat{clear:both}.paddingtop{padding-top:1em}.separator{color:#fff;text-shadow:0 1px 0 #000}div.tools{padding:.2em;margin-top:0;margin-bottom:.5em;border-top:0;text-align:right;float:none;clear:both;border-radius:0 0 4px 4px}div.tools a{color:#3a7ead !important}.pma-fieldset.tblFooters{margin-top:0;margin-bottom:.5em;border-top:0;text-align:right;float:none;clear:both;border-radius:0 0 4px 4px}div.null_div{height:20px;text-align:center;font-style:normal;min-width:50px}.pma-fieldset .formelement{float:left;margin-right:.5em;white-space:nowrap}.pma-fieldset div[class=formelement]{white-space:normal}button.mult_submit{border:none;background-color:rgba(0,0,0,0)}.condition{border-color:#000 !important}th.condition{border-width:1px 1px 0 1px;border-style:solid}td.condition{border-width:0 1px 0 1px;border-style:solid}tr:last-child td.condition{border-width:0 1px 1px 1px}.before-condition{border-right:1px solid #000}td.null{font-style:italic;color:#7d7d7d !important}table .valueHeader,table .value{text-align:right;white-space:normal}.value{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}img.lightbulb{cursor:pointer}.pdflayout{overflow:hidden;clip:inherit;background-color:#fff;display:none;border:1px solid #000;position:relative}.pdflayout_table{background:#d3dce3;color:#000;overflow:hidden;clip:inherit;z-index:2;display:inline;visibility:inherit;cursor:move;position:absolute;font-size:80%;border:1px dashed #000}.cm-sql-doc{text-decoration:none;border-bottom:1px dotted #000;color:inherit !important}td .icon{image-rendering:-moz-crisp-edges;image-rendering:pixelated;margin:0}.selectallarrow{margin-right:.3em;margin-left:.6em}.with-selected{margin-left:2em}#pma_errors,#pma_demo,#pma_footer{position:relative;padding:0 .5em}.confirmation{color:#000;background-color:pink}.new_central_col{width:100%}.tblcomment{font-size:70%;font-weight:normal;color:#009}.tblHeaders{font-weight:bold;color:#000;background:#d3dce3}div.tools,.tblFooters{font-weight:normal;color:#000;background:#d3dce3}.tblHeaders a:link,.tblHeaders a:active,.tblHeaders a:visited{color:blue}div.tools a:link,div.tools a:visited,div.tools a:active{color:blue}.tblFooters a:link,.tblFooters a:active,.tblFooters a:visited{color:blue}.tblHeaders a:hover,div.tools a:hover,.tblFooters a:hover{color:red}.error{border:1px solid maroon !important;margin-left:2px;padding:1px 2px;color:#000;background:pink}.disabled{color:#666}.disabled a:link,.disabled a:active,.disabled a:visited{color:#666}.disabled a:hover{color:#666;text-decoration:none}tr.disabled td,td.disabled{background-color:#f3f3f3;color:#aaa}.pre_wrap{white-space:pre-wrap}.pre_wrap br{display:none}body#loginform{margin:1em 0 0 0;text-align:center}body#loginform h1,body#loginform .h1,body#loginform a.logo{display:block;text-align:center}body#loginform div.container{text-align:left;width:30em;margin:0 auto}div.container.modal_form{margin:0 auto;width:30em;text-align:center;background:#fff;z-index:999}div#modalOverlay{position:fixed;top:0;left:0;height:100%;width:100%;background:#fff;z-index:900}label.col-3.d-flex.align-items-center{font-weight:bolder}.commented_column{border-bottom:1px dashed #000}.column_attribute{font-size:70%}.column_name{font-size:80%;margin:5px 2px}.central_columns_navigation{padding:1.5% 0 !important}.message_errors_found{margin-top:20px}.repl_gui_skip_err_cnt{width:30px}.color_gray{color:gray}.max_height_400{max-height:400px}li.last.database{margin-bottom:15px !important}div#dataDisplay input,div#dataDisplay select{margin:0;margin-right:.5em}div#dataDisplay th{line-height:2em}img.calendar{border:none}form.clock{text-align:center}div#tablestatistics table{float:left;margin-bottom:.5em;margin-right:1.5em;margin-top:.5em;min-width:16em}#topmenucontainer{padding-right:1em;width:100%}#page_nav_icons{position:fixed;top:0;right:0;z-index:99;padding:.5rem 0}#page_settings_icon{cursor:pointer;display:none}#page_settings_modal,#pma_navigation_settings{display:none}#textSQLDUMP{width:95%;height:95%;font-family:Consolas,"Courier New",Courier,monospace;font-size:110%}#TooltipContainer{position:absolute;z-index:99;width:20em;height:auto;overflow:visible;visibility:hidden;background-color:#ffc;color:#060;border:.1em solid #000;padding:.5em}#fieldset_add_user_login div.item{display:flex;align-items:center;border-bottom:1px solid silver;padding-bottom:.3em;margin-bottom:.3em}#fieldset_add_user_login label{float:left;display:block;width:10em;max-width:100%;text-align:right;padding-right:.5em;margin-bottom:0}#fieldset_add_user_login input{width:12em;clear:right;max-width:100%}#fieldset_add_user_login span.options{float:left;display:block;width:12em;max-width:100%;padding-right:.5em}#fieldset_add_user_login span.options #select_pred_username,#fieldset_add_user_login span.options #select_pred_hostname,#fieldset_add_user_login span.options #select_pred_password{width:100%;max-width:100%}#fieldset_add_user_login span.options input{width:auto}#fieldset_user_priv div.item{float:left;width:9em;max-width:100%}#fieldset_user_priv div.item div.item{float:none}#fieldset_user_priv div.item label{white-space:nowrap}#fieldset_user_priv div.item select{width:100%}#fieldset_user_global_rights .pma-fieldset,#fieldset_user_group_rights .pma-fieldset{float:left}#fieldset_user_global_rights>legend input{margin-left:2em}.linkElem:hover{text-decoration:underline;color:#235a81;cursor:pointer}h3#serverstatusqueries span,#serverstatusqueries.h3 span{font-size:60%;display:inline}div#serverStatusTabs{margin-top:1em}caption a.top{float:right}div#serverstatusquerieschart{float:left;width:500px;height:350px;margin-right:50px}div#serverstatus table tbody td.descr a,div#serverstatus table .tblFooters a{white-space:nowrap}div.liveChart{clear:both;min-width:500px;height:400px;padding-bottom:80px}div#chartVariableSettings{border:1px solid #ddd;background-color:#e6e6e6;margin-left:10px}table#chartGrid td{padding:3px;margin:0}table#chartGrid div.monitorChart{background:#ebebeb;border:none;min-width:1px}div.tabLinks{float:left;padding:5px 0}div.tabLinks a,div.tabLinks label{margin-right:7px}div.tabLinks .icon{margin:-0.2em .3em 0 0}.popupContent{display:none;position:absolute;border:1px solid #ccc;margin:0;padding:3px;background-color:#fff;z-index:2;box-shadow:2px 2px 3px #666}div#logTable{padding-top:10px;clear:both}div#logTable table{width:100%}div#queryAnalyzerDialog{min-width:700px}div#queryAnalyzerDialog div.CodeMirror-scroll{height:auto}div#queryAnalyzerDialog div#queryProfiling{height:300px}div#queryAnalyzerDialog td.explain{width:250px}div#queryAnalyzerDialog table.queryNums{display:none;border:0;text-align:left}.smallIndent{padding-left:7px}div#profilingchart{width:850px;height:370px;float:left}#profilingchart .jqplot-highlighter-tooltip{top:auto !important;left:11px;bottom:24px}#resizer{border:1px solid silver}#inner-resizer{padding:10px}#togglequerybox{margin:0 10px}#serverstatus h3,#serverstatus .h3{margin:15px 0;font-weight:normal;color:#999;font-size:1.7em}textarea#sqlquery{width:100%;border-radius:4px;border:1px solid #aaa;padding:5px;font-family:inherit}textarea#sql_query_edit{height:7em;width:95%;display:block}#mysqlmaininformation,#pmamaininformation{float:left;width:49%}#maincontainer ul{list-style-type:disc;vertical-align:middle}#maincontainer li{margin-bottom:.3em}#full_name_layer{position:absolute;padding:2px;margin-top:-3px;z-index:801;border-radius:3px;border:solid 1px #888;background:#fff}#body_browse_foreigners{background:#f3f3f3;margin:.5em .5em 0 .5em}#bodythemes{width:500px;margin:auto;text-align:center}#bodythemes img{border:.1em solid #000}#bodythemes a:hover img{border:.1em solid red}#selflink{clear:both;display:block;margin-top:1em;margin-bottom:1em;width:98%;margin-left:1%;text-align:right;border-top:.1em solid silver}#qbe_div_table_list,#qbe_div_sql_query{float:left}code{font-size:1em}code.php{display:block;padding-left:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:ltr}code.sql{display:block;padding:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:ltr}div.sqlvalidate{display:block;padding:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:ltr}.result_query div.sqlOuter{background:#e5e5e5;text-align:left}#PMA_slidingMessage code.sql,div.sqlvalidate{background:#e5e5e5}textarea#partitiondefinition{height:3em}.hide{display:none}#list_server{list-style-type:none;padding:0}div.upload_progress{width:400px;margin:3em auto;text-align:center}div.upload_progress_bar_outer{border:1px solid #000;width:202px;position:relative;margin:0 auto 1em;color:#212529}div.upload_progress_bar_outer div.percentage{position:absolute;top:0;left:0;width:202px}div.upload_progress_bar_inner{background-color:#ddd;width:0;height:12px;margin:1px;overflow:hidden;color:#000;position:relative}div.upload_progress_bar_inner div.percentage{top:-1px;left:-1px}div#statustext{margin-top:.5em}table#serverconnection_src_remote,table#serverconnection_trg_remote,table#serverconnection_src_local,table#serverconnection_trg_local{float:left}input[type=text].invalid_value,input[type=password].invalid_value,input[type=number].invalid_value,input[type=date].invalid_value{background:#fcc}select.invalid_value,.invalid_value{background:#fcc}.ajax_notification{top:0;position:fixed;margin-top:200px;margin-right:auto;margin-bottom:0;margin-left:auto;padding:5px;width:350px;z-index:1100;text-align:center;display:inline;left:0;right:0;background-image:url("../img/ajax_clock_small.gif");background-repeat:no-repeat;background-position:2%;border:1px solid #e2b709;background-color:#ffe57e;border-radius:5px;box-shadow:0 5px 90px #888}#loading_parent{position:relative;width:100%}#popup_background{display:none;position:fixed;width:100%;height:100%;top:0;left:0;background:#000;z-index:1000;overflow:hidden}#tablestructure tbody label{margin:.3rem 0}#structure-action-links a{margin-right:1em}#addColumns input[type=radio]{margin:3px 0 0;margin-left:1em}#index_frm .index_info input[type=text],#index_frm .index_info select{width:100%;margin:0;box-sizing:border-box}#index_frm .index_info div{padding:.2em 0}#index_frm .index_info .label{float:left;min-width:12em}#index_frm .slider{width:10em;margin:.6em;float:left}#index_frm .add_fields{float:left}#index_frm .add_fields input{margin-left:1em}#index_frm input{margin:0}#index_frm td{vertical-align:middle}table#index_columns{width:100%}table#index_columns select{width:85%;float:left}#move_columns_dialog div{padding:1em}#move_columns_dialog ul{list-style:none;margin:0;padding:0}#move_columns_dialog li{background:#d3dce3;border:1px solid #aaa;color:#000;font-weight:bold;margin:.4em;padding:.2em;border-radius:2px}.config-form fieldset{margin-top:0;padding:0;clear:both;border-radius:0}.config-form fieldset p{margin:0;padding:.5em;background:#fff;border-top:0}.config-form fieldset .errors{margin:0 -2px 1em;padding:.5em 1.5em;background:#fbead9;border-color:#c83838;border-style:solid;border-width:1px 0;list-style:none;font-family:var(--bs-font-sans-serif);font-size:small}.config-form fieldset .inline_errors{margin:.3em .3em .3em;margin-left:0;padding:0;list-style:none;color:#9a0000;font-size:small}.config-form fieldset .doc{margin-left:1em}.config-form fieldset .disabled-notice{margin-left:1em;font-size:80%;text-transform:uppercase;color:#e00;cursor:help}.config-form fieldset th{padding:.3em .3em .3em;padding-left:.5em;text-align:left;vertical-align:top;background:rgba(0,0,0,0);filter:none;border-top:1px #d5d5d5 solid;border-right:none}.config-form fieldset th small,.config-form fieldset th .small{display:block;font-weight:normal;font-family:var(--bs-font-sans-serif);font-size:x-small;color:#444}.config-form fieldset td{padding-top:.3em;padding-bottom:.3em;vertical-align:top;border-top:1px #d5d5d5 solid;border-right:none}.config-form legend{display:none}.config-form span.checkbox{padding:2px;display:inline-block}.config-form span.checkbox.custom{padding:1px;border:1px #edec90 solid;background:#ffc}.config-form .custom{background:#ffc}.config-form .field-error{border-color:#a11 !important}.config-form input[type=text],.config-form input[type=password],.config-form input[type=number]{border:1px #a7a6aa solid;height:auto}.config-form input[type=text]:focus,.config-form input[type=password]:focus,.config-form input[type=number]:focus{border:1px #6676ff solid;background:#f7fbff}.config-form select,.config-form textarea{border:1px #a7a6aa solid;height:auto}.config-form select:focus,.config-form textarea:focus{border:1px #6676ff solid;background:#f7fbff}.config-form .field-comment-mark{font-family:serif;color:#007;cursor:help;padding:0 .2em;font-weight:bold;font-style:italic}.config-form .field-comment-warning{color:#a00}.config-form dd{margin-left:.5em}.config-form dd::before{content:"▸ "}fieldset .group-header th{background:#d5d5d5}fieldset .group-header+tr th{padding-top:.6em}fieldset .group-field-1 th,fieldset .group-header-2 th{padding-left:1.5em}fieldset .group-field-2 th,fieldset .group-header-3 th{padding-left:3em}fieldset .group-field-3 th{padding-left:4.5em}fieldset .disabled-field th{color:#666;background-color:#ddd}fieldset .disabled-field th small,fieldset .disabled-field th .small{color:#666;background-color:#ddd}fieldset .disabled-field td{color:#666;background-color:#ddd}.click-hide-message{cursor:pointer}.prefsmanage_opts{margin-left:2em}#prefs_autoload{margin-bottom:.5em;margin-left:.5em}input#auto_increment_opt{width:-webkit-min-content;width:-moz-min-content;width:min-content}#placeholder{position:relative;border:1px solid #aaa;float:right;overflow:hidden;width:450px;height:300px}#placeholder .button{position:absolute;cursor:pointer}#placeholder div.button{font-size:smaller;color:#999;background-color:#eee;padding:2px}.wrapper{float:left;margin-bottom:1.5em}.toggleButton{position:relative;cursor:pointer;font-size:.8em;text-align:center;line-height:1.4em;height:1.55em;overflow:hidden;border-right:.1em solid #888;border-left:.1em solid #888;border-radius:.3em}.toggleButton table,.toggleButton td,.toggleButton img{padding:0;position:relative}.toggleButton .container{position:absolute}.toggleButton .container td,.toggleButton .container tr{background:none !important}.toggleButton .toggleOn{color:#fff;padding:0 1em;text-shadow:0 0 .2em #000}.toggleButton .toggleOff{padding:0 1em}.doubleFieldset .pma-fieldset{width:48%;float:left;padding:0}.doubleFieldset legend{margin-left:1.5em}.doubleFieldset div.wrap{padding:1.5em}#table_name_col_no_outer{margin-top:45px}#table_name_col_no{position:fixed;top:100px !important;width:100%;background:#fff}#table_columns{display:block;overflow:auto}#table_columns input[type=text],#table_columns input[type=password],#table_columns input[type=number]{width:10em;box-sizing:border-box}#table_columns select{width:10em;box-sizing:border-box}#openlayersmap{width:450px;height:300px}.placeholderDrag{cursor:move}#left_arrow{left:8px;top:26px}#right_arrow{left:26px;top:26px}#up_arrow{left:17px;top:8px}#down_arrow{left:17px;top:44px}#zoom_in{left:17px;top:67px}#zoom_world{left:17px;top:85px}#zoom_out{left:17px;top:103px}.colborder{cursor:col-resize;height:100%;margin-left:-6px;position:absolute;width:5px}.colborder_active{border-right:2px solid #a44}.pma_table th.draggable span{display:block;overflow:hidden}.pma_table td{position:static}.pma_table tbody td span{display:block;overflow:hidden}.pma_table tbody td span code span{display:inline}.pma_table th.draggable span{margin-right:10px}.modal-copy input{display:block;width:100%;margin-top:1.5em;padding:.3em 0}.cRsz{position:absolute}.cCpy{background:#333;color:#fff;font-weight:bold;margin:.1em;padding:.3em;position:absolute;text-shadow:-1px -1px #000;box-shadow:0 0 .7em #000;border-radius:.3em}.cPointer{height:20px;width:10px;margin-top:-10px;margin-left:-5px;background:url("../img/col_pointer.png");position:absolute}.tooltip{background:#333 !important;opacity:.8 !important;z-index:9999;border:1px solid #000 !important;border-radius:.3em !important;text-shadow:-1px -1px #000 !important;font-size:.8em !important;font-weight:bold !important;padding:1px 3px !important}.tooltip *{background:none !important;color:#fff !important}.cDrop{right:0;position:absolute;top:0}.coldrop{background:url("../img/col_drop.png");cursor:pointer;height:16px;margin-top:.3em;width:16px}.coldrop:hover{background-color:#999}.coldrop-hover{background-color:#999}.cList{background:#eee;border:solid 1px #999;position:absolute;box-shadow:0 .2em .5em #333;margin-left:75%;right:0;max-width:100%;overflow-wrap:break-word}.cList .lDiv div{padding:.2em .5em .2em;padding-left:.2em}.cList .lDiv div:hover{background:#ddd;cursor:pointer}.cList .lDiv div input{cursor:pointer}.showAllColBtn{border-bottom:solid 1px #999;border-top:solid 1px #999;cursor:pointer;font-size:.9em;font-weight:bold;padding:.35em 1em;text-align:center}.showAllColBtn:hover{background:#ddd}.turnOffSelect{-webkit-user-select:none;-moz-user-select:none;user-select:none}.navigation{margin:.8em 0;border-radius:5px;background:linear-gradient(#eee, #ccc)}.navigation td{margin:0;padding:0;vertical-align:middle;white-space:nowrap}.navigation input[type=submit]{background:none;border:0;filter:none;margin:0;padding:.8em .5em;border-radius:0}.navigation input[type=submit]:hover{color:#fff;cursor:pointer;text-shadow:none;background:linear-gradient(#333, #555)}.navigation input.edit_mode_active{color:#fff;cursor:pointer;text-shadow:none;background:linear-gradient(#333, #555)}.navigation .btn-link{color:#212529}.navigation .btn-link:hover{color:#fff;background-image:linear-gradient(#333, #555);text-decoration:none}.navigation select{margin:0 .8em}.navigation_separator{color:#999;display:inline-block;font-size:1.5em;text-align:center;height:1.4em;width:1.2em;text-shadow:1px 0 #fff}.cEdit{margin:0;padding:0;position:absolute}.cEdit input[type=text]{background:#fff;height:100%;margin:0;padding:0}.cEdit .edit_area{background:#fff;border:1px solid #999;min-width:10em;padding:.3em .5em}.cEdit .edit_area select,.cEdit .edit_area textarea{width:97%}.cEdit .cell_edit_hint{color:#555;font-size:.8em;margin:.3em .2em}.cEdit .edit_box{overflow-x:hidden;overflow-y:scroll;padding:0;margin:0}.cEdit .edit_box_posting{background:#fff url("../img/ajax_clock_small.gif") no-repeat right center;padding-right:1.5em}.cEdit .edit_area_loading{background:#fff url("../img/ajax_clock_small.gif") no-repeat center;height:10em}.cEdit .goto_link{background:#eee;color:#555;padding:.2em .3em}.saving_edited_data{background:url("../img/ajax_clock_small.gif") no-repeat left;padding-left:20px}.relationalTable td{vertical-align:top}.relationalTable select{width:125px;margin-right:5px}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{height:25px;margin-bottom:-25px}.ui-timepicker-div dl dd{margin:0 10px 10px 85px}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:none;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right}.ui-timepicker-rtl dl dd{margin:0 65px 10px 10px}body .ui-widget{font-size:1em}.ui-dialog .pma-fieldset legend a{color:#235a81}.ui-draggable{z-index:801}.jqplot-yaxis{left:0 !important;min-width:25px;width:auto}.jqplot-axis{overflow:hidden}div#page_content div#tableslistcontainer{margin-top:1em}div#page_content div#tableslistcontainer table.data{border-top:.1px solid #eee}div#page_content div.result_query{margin-top:1em}table.show_create{margin-top:1em}table.show_create td{border-right:1px solid #bbb}#alias_modal table{width:100%}#alias_modal label{font-weight:bold}.ui-dialog{position:fixed}.small_font{font-size:smaller}#pma_console_container{width:100%;position:fixed;bottom:0;left:0;z-index:100}#pma_console{position:relative;margin-left:240px}#pma_console .templates{display:none}#pma_console .mid_text{vertical-align:middle}#pma_console .toolbar{position:relative;background:#ccc;border-top:solid 1px #aaa;cursor:n-resize}#pma_console .toolbar span{vertical-align:middle}#pma_console .toolbar.collapsed{cursor:default}#pma_console .toolbar.collapsed:not(:hover){display:inline-block;border-top-right-radius:3px;border-right:solid 1px #aaa}#pma_console .toolbar.collapsed>.button{display:none}#pma_console .message span.text,#pma_console .message span.action{padding:0 3px;display:inline-block}#pma_console .toolbar .button,#pma_console .toolbar .text{padding:0 3px;display:inline-block}#pma_console .switch_button{padding:0 3px;display:inline-block}#pma_console .message span.action,#pma_console .toolbar .button,#pma_console .switch_button{cursor:pointer}#pma_console .message span.action:hover,#pma_console .toolbar .button:hover,#pma_console .switch_button:hover{background:#ddd}#pma_console .toolbar .button.active{background:#ddd}#pma_console .toolbar .text{font-weight:bold}#pma_console .toolbar .button,#pma_console .toolbar .text{margin-right:.4em}#pma_console .toolbar .button,#pma_console .toolbar .text{float:right}#pma_console .content{overflow-x:hidden;overflow-y:auto;margin-bottom:-65px;border-top:solid 1px #aaa;background:#fff;padding-top:.4em}#pma_console .content.console_dark_theme{background:#000;color:#fff}#pma_console .content.console_dark_theme .CodeMirror-wrap{background:#000;color:#fff}#pma_console .content.console_dark_theme .action_content{color:#000}#pma_console .content.console_dark_theme .message{border-color:#373b41}#pma_console .content.console_dark_theme .CodeMirror-cursor{border-color:#fff}#pma_console .content.console_dark_theme .cm-keyword{color:#de935f}#pma_console .message,#pma_console .query_input{position:relative;font-family:Monaco,Consolas,monospace;cursor:text;margin:0 10px .2em 1.4em}#pma_console .message{border-bottom:solid 1px #ccc;padding-bottom:.2em}#pma_console .message.expanded>.action_content{position:relative}#pma_console .message::before{left:-0.7em;position:absolute;content:">"}#pma_console .query_input::before{left:-0.7em;position:absolute;content:">";top:-2px}#pma_console .query_input textarea{width:100%;height:4em;resize:vertical}#pma_console .message:hover::before{color:#7cf;font-weight:bold}#pma_console .message.expanded::before{content:"]"}#pma_console .message.welcome::before{display:none}#pma_console .message.failed::before,#pma_console .message.failed.expanded::before,#pma_console .message.failed:hover::before{content:"=";color:#944}#pma_console .message.pending::before{opacity:.3}#pma_console .message.collapsed>.query{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#pma_console .message.expanded>.query{display:block;white-space:pre;word-wrap:break-word}#pma_console .message .text.targetdb,#pma_console .message.collapsed .action.collapse,#pma_console .message.expanded .action.expand{display:none}#pma_console .message .action.requery,#pma_console .message .action.profiling,#pma_console .message .action.explain,#pma_console .message .action.bookmark{display:none}#pma_console .message.select .action.profiling,#pma_console .message.select .action.explain{display:inline-block}#pma_console .message.history .text.targetdb,#pma_console .message.successed .text.targetdb{display:inline-block}#pma_console .message.history .action.requery,#pma_console .message.history .action.bookmark{display:inline-block}#pma_console .message.bookmark .action.requery,#pma_console .message.bookmark .action.bookmark{display:inline-block}#pma_console .message.successed .action.requery,#pma_console .message.successed .action.bookmark{display:inline-block}#pma_console .message .action_content{position:absolute;bottom:100%;background:#ccc;border:solid 1px #aaa;border-top-left-radius:3px}#pma_console .message.bookmark .text.targetdb,#pma_console .message .text.query_time{margin:0;display:inline-block}#pma_console .message.failed .text.query_time,#pma_console .message .text.failed{display:none}#pma_console .message.failed .text.failed{display:inline-block}#pma_console .message .text{background:#fff}#pma_console .message.collapsed>.action_content{display:none}#pma_console .message.collapsed:hover>.action_content{display:block}#pma_console .message .bookmark_label{padding:0 4px;top:0;background:#369;color:#fff;border-radius:3px}#pma_console .message .bookmark_label.shared{background:#396}#pma_console .message.expanded .bookmark_label{border-top-left-radius:0;border-top-right-radius:0}#pma_console .query_input{position:relative}#pma_console .mid_layer{height:100%;width:100%;position:absolute;top:0;background:#666;display:none;cursor:pointer;z-index:200}#pma_console .card{position:absolute;width:94%;height:100%;min-height:48px;left:100%;top:0;border-left:solid 1px #999;z-index:300;transition:left .2s}#pma_console .card.show{left:6%;box-shadow:-2px 1px 4px -1px #999}#pma_console .button.hide,#pma_console .message span.text.hide{display:none}#pma_bookmarks .content.add_bookmark,#pma_console_options .content{padding:4px 6px}#pma_bookmarks .content.add_bookmark .options{margin-left:1.4em;padding-bottom:.4em;margin-bottom:.4em;border-bottom:solid 1px #ccc}#pma_bookmarks .content.add_bookmark .options button{margin:0 7px;vertical-align:bottom}#pma_bookmarks .content.add_bookmark input[type=text]{margin:0;padding:2px 4px}#debug_console.grouped .ungroup_queries{display:inline-block}#debug_console.ungrouped .group_queries{display:inline-block}#debug_console.ungrouped .ungroup_queries,#debug_console.ungrouped .sort_count{display:none}#debug_console.grouped .group_queries{display:none}#debug_console .count{margin-right:8px}#debug_console .show_trace .trace,#debug_console .show_args .args{display:block}#debug_console .hide_trace .trace,#debug_console .hide_args .args,#debug_console .show_trace .action.dbg_show_trace,#debug_console .hide_trace .action.dbg_hide_trace{display:none}#debug_console .traceStep.hide_args .action.dbg_hide_args,#debug_console .traceStep.show_args .action.dbg_show_args{display:none}#debug_console .traceStep::after{content:"";display:table;clear:both}#debug_console .trace.welcome::after,#debug_console .debug>.welcome::after{content:"";display:table;clear:both}#debug_console .debug_summary{float:left}#debug_console .trace.welcome .time,#debug_console .traceStep .file,#debug_console .script_name{float:right}#debug_console .traceStep .args pre{margin:0}.cm-s-pma .CodeMirror-code{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-code pre{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-measure>pre,.cm-s-pma .CodeMirror-code>pre,.cm-s-pma .CodeMirror-lines{padding:0}.cm-s-pma.CodeMirror{resize:none;height:auto;width:100%;min-height:initial;max-height:initial}.cm-s-pma .CodeMirror-scroll{cursor:text}.pma_drop_handler{display:none;position:fixed;top:0;left:0;width:100%;background:rgba(0,0,0,.6);height:100%;z-index:999;color:#fff;font-size:30pt;text-align:center;padding-top:20%}.pma_sql_import_status{display:none;position:fixed;bottom:0;right:25px;width:400px;border:1px solid #999;background:#f3f3f3;border-radius:4px;box-shadow:2px 2px 5px #ccc}.pma_sql_import_status h2,.pma_sql_import_status .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:1px 1px 15px #999 inset}.pma_drop_result h2,.pma_drop_result .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:1px 1px 15px #999 inset}.pma_sql_import_status div{height:270px;overflow-y:auto;overflow-x:hidden;list-style-type:none}.pma_sql_import_status div li{padding:8px 10px;border-bottom:1px solid #bbb;color:#940e0e;background:#fff}.pma_sql_import_status div li .filesize{float:right}.pma_sql_import_status h2 .minimize,.pma_sql_import_status .h2 .minimize{float:right;margin-right:5px;padding:0 10px}.pma_sql_import_status h2 .close,.pma_sql_import_status .h2 .close{float:right;margin-right:5px;padding:0 10px;display:none}.pma_sql_import_status h2 .minimize:hover,.pma_sql_import_status .h2 .minimize:hover,.pma_sql_import_status h2 .close:hover,.pma_sql_import_status .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_result h2 .close:hover,.pma_drop_result .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_file_status{color:#235a81}.pma_drop_file_status span.underline:hover{cursor:pointer;text-decoration:underline}.pma_drop_result{position:fixed;top:10%;left:20%;width:60%;background:#fff;min-height:300px;z-index:800;box-shadow:0 0 15px #999;border-radius:10px;cursor:move}.pma_drop_result h2 .close,.pma_drop_result .h2 .close{float:right;margin-right:5px;padding:0 10px}.dependencies_box{background-color:#fff;border:3px ridge #000}#composite_index_list{list-style-type:none;list-style-position:inside}span.drag_icon{display:inline-block;background-image:url("../img/s_sortable.png");background-position:center center;background-repeat:no-repeat;width:1em;height:3em;cursor:move}.topmargin{margin-top:1em}meter[value="1"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #e32929 5%, transparent 10%, #e32929)}meter[value="2"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #f60 5%, transparent 10%, #f60)}meter[value="3"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #ffd700 5%, transparent 10%, #ffd700)}th.header{cursor:pointer;color:#235a81}th.header:hover{text-decoration:underline}th.header .sorticon{width:16px;height:16px;background-repeat:no-repeat;background-position:right center;display:inline-table;vertical-align:middle;float:right}th.headerSortUp .sorticon{background-image:url("../img/sort-desc.svg")}th.headerSortDown:hover .sorticon{background-image:url("../img/sort-desc.svg")}th.headerSortDown .sorticon{background-image:url("../img/sort-asc.svg")}th.headerSortUp:hover .sorticon{background-image:url("../img/sort-asc.svg")}body .ui-dialog .ui-dialog-titlebar-close{right:.3em;left:initial}body .ui-dialog .ui-dialog-title{float:left}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button{color:#fff;background:none;background-color:#6c757d !important;border-color:#6c757d}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset button:hover{background-color:#5a6268 !important}.multi_table_query_form .query-form__tr--hide{display:none}.multi_table_query_form .query-form__fieldset--inline,.multi_table_query_form .query-form__select--inline{display:inline}.multi_table_query_form .query-form__tr--bg-none{background:none}.multi_table_query_form .query-form__input--wide{width:91%}.multi_table_query_form .query-form__multi-sql-query{float:left}#name-panel{overflow:hidden}.pre-scrollable{max-height:340px;overflow-y:scroll}@media only screen and (max-width: 768px){.responsivetable{overflow-x:auto}body#loginform div.container{width:100%}.largescreenonly{display:none}.width96{width:96% !important}#page_nav_icons{display:none}#table_name_col_no{top:62px}.tdblock tr td{display:block}#table_columns{margin-top:60px}#table_columns .tablesorter{min-width:100%}.doubleFieldset .pma-fieldset{width:98%}div#serverstatusquerieschart{width:100%;height:450px}.ui-dialog{margin:1%;width:95% !important}}#tooltip_editor{font-size:12px;background-color:#fff;opacity:.95;filter:alpha(opacity=95);padding:5px}#tooltip_font{font-weight:bold}#selection_box{z-index:1000;height:205px;position:absolute;background-color:skyblue;opacity:.4;filter:alpha(opacity=40);pointer-events:none}#filterQueryText{vertical-align:baseline}.ui_tpicker_hour_slider,.ui_tpicker_minute_slider,.ui_tpicker_second_slider,.ui_tpicker_millisec_slider,.ui_tpicker_microsec_slider{margin-left:40px;margin-top:4px;height:.75rem}.ui-timepicker-div dl .ui_tpicker_timezone select{margin-left:50px}.ui_tpicker_time_input{width:100%}@media(min-width: 1200px){div.tools{text-align:left}.pma-fieldset.tblFooters,.tblFooters{text-align:left}}.resize-vertical{resize:vertical}p.enum_notice{margin:5px 2px;font-size:80%}#enum_editor p{margin-top:0;font-style:italic}#enum_editor .values{width:100%}#enum_editor .add{width:100%}#enum_editor .add td{vertical-align:middle;width:50%;padding:0 0 0;padding-left:1em}#enum_editor .values td.drop{width:1.8em;cursor:pointer;vertical-align:middle}#enum_editor .values input{margin:.1em 0;padding-right:2em;width:100%}#enum_editor .values img{vertical-align:middle}#enum_editor input.add_value{margin:0;margin-right:.4em}#enum_editor_output textarea{width:100%;float:right;margin:1em 0 0 0}.enum_hint{position:relative}.enum_hint a{position:absolute;left:81%;bottom:.35em}a.close_gis_editor{float:right}#gis_editor{display:none;position:fixed;z-index:1001;overflow-y:auto;overflow-x:hidden}#gis_data{min-height:230px}#gis_data_textarea{height:6em}#gis_data_editor{background:#d0dce0;padding:15px;min-height:500px}#gis_data_editor .choice{display:none}#gis_data_editor input[type=text]{width:75px}#pma_navigation{width:240px;position:fixed;top:0;left:0;height:100vh;background-color:#f8f9fa;z-index:800}#pma_navigation ul{margin:0}#pma_navigation form{margin:0;padding:0;display:inline}#pma_navigation select#select_server,#pma_navigation select#lightm_db{width:100%}#pma_navigation div.pageselector{text-align:center;margin:0;margin-left:.75em;border-left:1px solid #666}#pma_navigation #pmalogo,#pma_navigation #serverChoice,#pma_navigation #navipanellinks,#pma_navigation #recentTableList,#pma_navigation #favoriteTableList,#pma_navigation #databaseList,#pma_navigation div.pageselector.dbselector{text-align:center;padding:5px 10px 0;border:0}#pma_navigation #pmalogo{background-color:#e9ecef;padding:6px 10px}#pma_navigation #navipanellinks{padding:8px 10px;background-color:rgba(0,0,0,.03)}#pma_navigation #navipanellinks a{display:inline-block;padding:8px}#pma_navigation #navipanellinks .icon{margin:0}#pma_navigation #recentTable,#pma_navigation #favoriteTable{width:200px}#pma_navigation #favoriteTableList select,#pma_navigation #serverChoice select{width:80%}#pma_navigation_header{overflow:hidden}#pma_navigation_content{width:100%;height:100%;position:absolute;top:0;left:0;z-index:0}#pma_navigation_content>img.throbber{display:none;margin:.3em auto 0}#pma_navigation_select_database{text-align:left;padding:0 0 0;border:0;margin:0}#pma_navigation_db_select{margin-top:.5em;margin-left:.75em}#pma_navigation_db_select select{background:linear-gradient(#fff, #f1f1f1, #fff);border-radius:2px;border:1px solid #bbb;border-top:1px solid #bbb;color:#333;padding:4px 6px;margin:0 0 0;width:92%;font-size:1.11em}#pma_navigation_tree_content{width:100%;overflow:hidden;overflow-y:auto;position:absolute;height:100%}#pma_navigation_tree_content a.hover_show_full{position:relative;z-index:100;vertical-align:sub}#pma_navigation_tree{margin:0;margin-left:5px;overflow:hidden;color:#444;height:74%;position:relative}#pma_navigation_tree a{color:#000;padding-left:0}#pma_navigation_tree a:hover{text-decoration:underline}#pma_navigation_tree ul{clear:both;padding:0;list-style-type:none;margin:0}#pma_navigation_tree ul ul{position:relative}#pma_navigation_tree li{margin-bottom:0}#pma_navigation_tree li.activePointer,#pma_navigation_tree li.selected{color:#000;background-color:#ddd}#pma_navigation_tree li .dbItemControls{padding-right:4px;float:right}#pma_navigation_tree li .navItemControls{display:none;padding-right:4px;float:right}#pma_navigation_tree li.activePointer .navItemControls{display:block;opacity:.5}#pma_navigation_tree li.activePointer .navItemControls:hover{opacity:1}#pma_navigation_tree li{white-space:nowrap;clear:both;min-height:16px}#pma_navigation_tree li.fast_filter{white-space:nowrap;clear:both;min-height:16px}#pma_navigation_tree img{margin:0}#pma_navigation_tree i{display:block}#pma_navigation_tree div.block{position:relative;width:1.5em;height:1.5em;min-width:16px;min-height:16px;float:left}#pma_navigation_tree div.block.double{width:2.5em}#pma_navigation_tree div.block i,#pma_navigation_tree div.block b{width:1.5em;height:1.7em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;left:.75em;z-index:0}#pma_navigation_tree div.block i{display:block;border-left:1px solid #666;border-bottom:1px solid #666;position:relative;z-index:0}#pma_navigation_tree div.block i.first{border-left:0}#pma_navigation_tree div.block b{display:block;height:.75em;bottom:0;left:.75em;border-left:1px solid #666}#pma_navigation_tree div.block a,#pma_navigation_tree div.block u{position:absolute;left:50%;top:50%;z-index:10}#pma_navigation_tree div.block a+a{left:100%}#pma_navigation_tree div.block.double a,#pma_navigation_tree div.block.double u{left:33%}#pma_navigation_tree div.block.double a+a{left:85%}#pma_navigation_tree div.block img{position:relative;top:-0.6em;left:0;margin-left:-7px}#pma_navigation_tree div.throbber img{top:2px;left:2px}#pma_navigation_tree li.last>ul{background:none}#pma_navigation_tree li>a,#pma_navigation_tree li>i{line-height:1.5em;height:1.5em;padding-left:.3em}#pma_navigation_tree .list_container{border-left:1px solid #666;margin-left:.75em;padding-left:.75em}#pma_navigation_tree .list_container li.last.database{margin-bottom:0 !important}#pma_navigation_tree .last>.list_container{border-left:0 solid #666}li.fast_filter{padding-left:.75em;margin-left:.75em;padding-right:35px;border-left:1px solid #666;list-style:none}li.fast_filter input{font-size:.7em}li.fast_filter .searchClauseClear{font-weight:bold;color:#800;font-size:.7em}li.fast_filter.db_fast_filter{border:0;margin-left:0}#navigation_controls_outer{min-height:21px !important}#navigation_controls_outer.activePointer{background-color:rgba(0,0,0,0) !important}#navigation_controls{float:right;padding-right:23px}#pma_navigation_resizer{width:1px !important;height:100%;background-color:rgba(0,0,0,.125);cursor:col-resize;position:fixed;top:0;left:240px;z-index:801}#pma_navigation_collapser{width:20px;height:22px;line-height:22px;background:#eee;color:#555;font-weight:bold;position:fixed;top:0;left:240px;text-align:center;cursor:pointer;z-index:800;text-shadow:0 1px 0 #fff;filter:dropshadow(color=#fff, offx=0, offy=1);border:1px solid rgba(0,0,0,.125)}.pma_quick_warp{margin-top:5px;margin-left:2px;position:relative}.pma_quick_warp .drop_list{float:left;margin-left:3px;padding:2px 0}.pma_quick_warp .drop_list:hover .drop_button{background:#fff}.pma_quick_warp .drop_list:hover ul{display:block}.pma_quick_warp .drop_list ul{position:absolute;margin:0;padding:0;overflow:hidden;overflow-y:auto;list-style:none;background:#fff;border:1px solid #ddd;border-radius:.3em;border-top-right-radius:0;border-bottom-right-radius:0;box-shadow:0 0 5px #ccc;top:100%;left:3px;right:0;display:none;z-index:802}.pma_quick_warp .drop_list li{white-space:nowrap;padding:0;border-radius:0}.pma_quick_warp .drop_list li img{vertical-align:sub}.pma_quick_warp .drop_list li:hover{background:#f2f2f2}.pma_quick_warp .drop_list a{display:block;padding:.2em .3em}.pma_quick_warp .drop_list a.favorite_table_anchor{clear:left;float:left;padding:.1em .3em 0}.pma_quick_warp .drop_button{padding:.3em;border:1px solid #ddd;border-radius:.3em;background:#f2f2f2;cursor:pointer}.input_tab{background-color:#a6c7e1;color:#000}.content_fullscreen{position:relative;overflow:auto}#canvas_outer{position:relative;width:100%;display:block}#canvas{background-color:#fff;color:#000}canvas.designer{display:inline-block;overflow:hidden;text-align:left}canvas.designer *{behavior:url(#default#VML)}.designer_tab{background-color:#fff;color:#000;border-collapse:collapse;border:1px solid #aaa;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.designer_tab .header{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.tab_zag{text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_zag_2{background:linear-gradient(#fffa96 0%, #fffa96 39%, #ffe796 40%, #ffe796 100%);text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_field{background:#fff;color:#000;cursor:default}.tab_field:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}.tab_field_3{background-color:#ffe6e6;color:#000;cursor:default}.tab_field_3:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}#designer_hint{white-space:nowrap;position:absolute;background-color:#9f9;color:#000;z-index:3;border:#0c6 solid 1px;display:none}#designer_body #page_content{margin:0}.scroll_tab{overflow:auto;width:100%;height:500px}.designer_Tabs{cursor:default;color:#05b;white-space:nowrap;text-decoration:none;text-indent:3px;font-weight:bold;margin-left:2px;text-align:left;background:linear-gradient(#fff, #dfe5e7 70%, #fff 70%, #fff 100%);border:#ccc solid 1px}.designer_Tabs:hover{cursor:default;color:#05b;background:#fe9;text-indent:3px;font-weight:bold;white-space:nowrap;text-decoration:none;border:#99f solid 1px;text-align:left}.owner{font-weight:normal;color:#888}.option_tab{padding-left:2px;padding-right:2px;width:5px}.select_all{vertical-align:top;padding-left:2px;padding-right:2px;cursor:default;width:1px;color:#000;background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.small_tab{vertical-align:top;background-color:#0064ea;color:#fff;background-image:url("../img/designer/small_tab.png");cursor:default;text-align:center;font-weight:bold;padding-left:2px;padding-right:2px;width:1px;text-decoration:none}.small_tab:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;padding-left:2px;padding-right:2px;text-align:center;font-weight:bold;width:1px;text-decoration:none}.small_tab_pref{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%);text-align:center;width:1px}.small_tab_pref:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;text-align:center;font-weight:bold;width:1px;text-decoration:none}.butt{border:#47a solid 1px;font-weight:bold;background-color:#fff;color:#000;vertical-align:baseline}.L_butt2_1{padding:1px;text-decoration:none;vertical-align:middle;cursor:default}.L_butt2_1:hover{padding:0;border:#09c solid 1px;background:#fe9;color:#000;text-decoration:none;vertical-align:middle;cursor:default}.bor{width:10px;height:10px}.frams1{background:url("../img/designer/1.png") no-repeat right bottom}.frams2{background:url("../img/designer/2.png") no-repeat left bottom}.frams3{background:url("../img/designer/3.png") no-repeat left top}.frams4{background:url("../img/designer/4.png") no-repeat right top}.frams5{background:url("../img/designer/5.png") repeat-x center bottom}.frams6{background:url("../img/designer/6.png") repeat-y left}.frams7{background:url("../img/designer/7.png") repeat-x top}.frams8{background:url("../img/designer/8.png") repeat-y right}#osn_tab{position:absolute;background-color:#fff;color:#000}.designer_header{background-color:#eaeef0;color:#000;text-align:center;font-weight:bold;margin:0;padding:0;background-image:url("../img/designer/top_panel.png");background-position:top;background-repeat:repeat-x;border-right:#999 solid 1px;border-left:#999 solid 1px;height:28px;z-index:101;width:100%;position:fixed}.designer_header a,.designer_header span{display:block;float:left;margin:3px 1px 4px;height:20px;border:1px dotted #fff}.designer_header .M_bord{display:block;float:left;margin:4px;height:20px;width:2px}.designer_header a.first{margin-right:1em}.designer_header a.last{margin-left:1em}a.M_butt_Selected_down_IE,a.M_butt_Selected_down{border:1px solid #c0c0bb;background-color:#9f9;color:#000}a.M_butt_Selected_down_IE:hover,a.M_butt_Selected_down:hover{border:1px solid #09c;background-color:#fe9;color:#000}a.M_butt:hover{border:1px solid #09c;background-color:#fe9;color:#000}#layer_menu{z-index:98;position:relative;float:right;background-color:#eaeef0;border:#999 solid 1px}#layer_upd_relation{position:absolute;left:637px;top:224px;z-index:100}#layer_new_relation,#designer_optionse{position:absolute;left:636px;top:85px;z-index:100;width:153px}#layer_menu_sizer{background-image:url("../img/designer/resize.png");cursor:ew-resize}#layer_menu_sizer .icon{margin:0}.panel{position:fixed;top:60px;right:0;width:350px;max-height:500px;display:none;overflow:auto;padding-top:34px;z-index:102}a.trigger{position:fixed;text-decoration:none;top:60px;right:0;color:#fff;padding:10px 40px 10px 15px;background:#333 url("../img/designer/plus.png") 85% 55% no-repeat;border:1px solid #444;display:block;z-index:102}a.trigger:hover{color:#080808;background:#fff696 url("../img/designer/plus.png") 85% 55% no-repeat;border:1px solid #999}a.active.trigger{background:#222 url("../img/designer/minus.png") 85% 55% no-repeat;z-index:999}a.active.trigger:hover{background:#fff696 url("../img/designer/minus.png") 85% 55% no-repeat}.toggle_container .block{background-color:#dbe4e8;border-top:1px solid #999}.history_table{text-align:center;cursor:pointer;background-color:#dbe4e8}.history_table:hover{background-color:#99c}#ab{min-width:300px}#ab .ui-accordion-content{padding:0}#foreignkeychk{text-align:left;cursor:pointer}.side-menu{float:left;position:fixed;width:auto;height:auto;background:#efefef;border:1px solid gray;overflow:hidden;z-index:50;padding:2px}.side-menu.right{float:right;right:0}.side-menu .hide{display:none}.side-menu a{display:block;float:none;overflow:hidden;line-height:1em}.side-menu img,.side-menu .text{float:left}#name-panel{border-bottom:1px solid gray;text-align:center;background:#efefef;width:100%;font-size:1.2em;padding:5px;font-weight:bold}#container-form{width:100%;position:absolute;left:0}.CodeMirror{height:20rem;direction:ltr;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}#inline_editor_outer .CodeMirror{height:6em}.insertRowTable .CodeMirror{min-height:9em;min-width:24em;border:1px solid #a9a9a9}#pma_console .CodeMirror-gutters{background-color:initial;border:none}span.cm-keyword,span.cm-statement-verb{color:#909}span.cm-variable{color:#000}span.cm-comment{color:olive}span.cm-mysql-string{color:green}span.cm-operator{color:#f0f}span.cm-mysql-word{color:#000}span.cm-builtin{color:red}span.cm-variable-2{color:#f90}span.cm-variable-3{color:blue}span.cm-separator{color:#f0f}span.cm-number{color:teal}.autocomplete-column-name{display:inline-block}.autocomplete-column-hint{display:inline-block;float:right;color:#666;margin-left:1em}.CodeMirror-hints{z-index:1999}.CodeMirror-lint-tooltip{z-index:200;font-family:inherit}.CodeMirror-lint-tooltip code{font-family:monospace;font-weight:bold}.jqplot-target{position:relative;color:#222;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px;background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}table.jqplot-cursor-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:1em;white-space:nowrap;background:rgba(208,208,208,.8);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:#333}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(230,230,230,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(245,245,245,.3)}.icon{margin:0;margin-left:.3em;padding:0 !important;width:16px;height:16px}.icon_fulltext{width:50px;height:19px}.ic_asc_order{background-image:url("../img/asc_order.png")}.ic_b_bookmark{background-image:url("../img/bookmark-plus.svg")}.ic_b_browse,.ic_b_sbrowse{background-image:url("../img/table-browse.svg")}.ic_b_calendar{background-image:url("../img/b_calendar.png")}.ic_b_chart{background-image:url("../img/chart.svg")}.ic_b_close{background-image:url("../img/close.svg")}.ic_b_column_add{background-image:url("../img/col-plus.svg")}.ic_b_comment{background-image:url("../img/comment.svg")}.ic_b_dbstatistics{background-image:url("../img/b_dbstatistics.png")}.ic_b_deltbl{background-image:url("../img/table-minus.svg")}.ic_b_docs{background-image:url("../img/help.svg")}.ic_b_docsql{background-image:url("../img/b_docsql.png")}.ic_b_drop{background-image:url("../img/minus.svg")}.ic_b_edit{background-image:url("../img/edit.svg")}.ic_b_empty{background-image:url("../img/shredder.svg")}.ic_b_engine{background-image:url("../img/database-engine.svg")}.ic_b_event_add{background-image:url("../img/event-plus.svg")}.ic_b_events{background-image:url("../img/event.svg")}.ic_b_export,.ic_b_tblexport{background-image:url("../img/export.svg")}.ic_b_favorite{background-image:url("../img/favorite.svg")}.ic_b_find_replace{background-image:url("../img/search-replace.svg")}.ic_b_firstpage{background-image:url("../img/b_firstpage.png")}.ic_b_ftext{background-image:url("../img/field-index-text.svg")}.ic_b_globe{background-image:url("../img/globe-alt.svg")}.ic_b_group{background-image:url("../img/databases.svg")}.ic_b_help{background-image:url("../img/help-alt.svg")}.ic_b_home{background-image:url("../img/home.svg")}.ic_b_import,.ic_b_tblimport{background-image:url("../img/import.svg")}.ic_b_index{background-image:url("../img/field-index.svg")}.ic_b_index_add{background-image:url("../img/index-plus.svg")}.ic_b_inline_edit{background-image:url("../img/b_inline_edit.png")}.ic_b_insrow{background-image:url("../img/row-plus.svg")}.ic_b_lastpage{background-image:url("../img/b_lastpage.png")}.ic_b_minus{background-image:url("../img/tree-collapse.svg")}.ic_b_more{background-image:url("../img/triangle-down-1.svg")}.ic_b_move{background-image:url("../img/col-move.svg")}.ic_b_newdb{background-image:url("../img/database-plus.svg")}.ic_db_drop{background-image:url("../img/database-minus.svg")}.ic_b_newtbl{background-image:url("../img/b_newtbl.png")}.ic_b_nextpage{background-image:url("../img/b_nextpage.png")}.ic_b_no_favorite{background-image:url("../img/favorite-alt.svg")}.ic_b_pdfdoc{background-image:url("../img/b_pdfdoc.png")}.ic_b_plugin{background-image:url("../img/plugin.svg")}.ic_b_plus{background-image:url("../img/tree-expand.svg")}.ic_b_prevpage{background-image:url("../img/b_prevpage.png")}.ic_b_primary{background-image:url("../img/key-primary.svg")}.ic_b_print{background-image:url("../img/print.svg")}.ic_b_props{background-image:url("../img/table-engine.svg")}.ic_b_relations{background-image:url("../img/designer.svg")}.ic_b_report{background-image:url("../img/report.svg")}.ic_b_rename{background-image:url("../img/b_rename.svg")}.ic_b_routine_add{background-image:url("../img/routine-plus.svg")}.ic_b_routines{background-image:url("../img/routine.svg")}.ic_b_save,.ic_b_saveimage{background-image:url("../img/save.svg")}.ic_b_sdb{background-image:url("../img/b_sdb.png");width:10px;height:10px}.ic_b_search{background-image:url("../img/search.svg")}.ic_b_select{background-image:url("../img/search-across.svg")}.ic_b_snewtbl{background-image:url("../img/b_snewtbl.png")}.ic_b_spatial{background-image:url("../img/field-spatial.svg")}.ic_b_sql{background-image:url("../img/sql.svg")}.ic_b_sqldoc{background-image:url("../img/b_sqldoc.png")}.ic_b_sqlhelp{background-image:url("../img/manual.svg")}.ic_b_table_add{background-image:url("../img/table-plus.svg")}.ic_b_tblanalyse{background-image:url("../img/table-analyse.svg")}.ic_b_tblops{background-image:url("../img/preferences.svg")}.ic_b_tbloptimize{background-image:url("../img/optimize.svg")}.ic_b_tipp{background-image:url("../img/b_tipp.png")}.ic_b_trigger_add{background-image:url("../img/flag-plus.svg")}.ic_b_triggers{background-image:url("../img/flag.svg")}.ic_b_undo{background-image:url("../img/b_undo.png")}.ic_b_unique{background-image:url("../img/field-index-uinique.svg")}.ic_b_usradd{background-image:url("../img/user-plus.svg")}.ic_b_usrdrop{background-image:url("../img/user-minus.svg")}.ic_b_usredit,.ic_b_usrcheck{background-image:url("../img/user.svg")}.ic_b_usrlist{background-image:url("../img/users.svg")}.ic_b_versions{background-image:url("../img/version.svg")}.ic_b_view{background-image:url("../img/b_view.png")}.ic_b_view_add{background-image:url("../img/table-view-plus.svg")}.ic_b_views{background-image:url("../img/table-view.svg")}.ic_b_left{background-image:url("../img/b_left.png")}.ic_b_right{background-image:url("../img/b_right.png")}.ic_bd_browse{background-image:url("../img/bd_browse.png")}.ic_bd_deltbl{background-image:url("../img/bd_deltbl.png")}.ic_bd_drop{background-image:url("../img/bd_drop.png")}.ic_bd_edit{background-image:url("../img/bd_edit.png")}.ic_bd_empty{background-image:url("../img/bd_empty.png")}.ic_bd_export{background-image:url("../img/bd_export.png")}.ic_bd_firstpage{background-image:url("../img/bd_firstpage.png")}.ic_bd_ftext{background-image:url("../img/bd_ftext.png")}.ic_bd_index{background-image:url("../img/bd_index.png")}.ic_bd_insrow{background-image:url("../img/bd_insrow.png")}.ic_bd_lastpage{background-image:url("../img/bd_lastpage.png")}.ic_bd_nextpage{background-image:url("../img/bd_nextpage.png")}.ic_bd_prevpage{background-image:url("../img/bd_prevpage.png")}.ic_bd_primary{background-image:url("../img/key.svg")}.ic_bd_routine_add{background-image:url("../img/bd_routine_add.png")}.ic_bd_sbrowse{background-image:url("../img/bd_sbrowse.png")}.ic_bd_select{background-image:url("../img/bd_select.png")}.ic_bd_spatial{background-image:url("../img/bd_spatial.png")}.ic_bd_unique{background-image:url("../img/bd_unique.png")}.ic_centralColumns{background-image:url("../img/col.svg")}.ic_centralColumns_add{background-image:url("../img/col-plus.svg")}.ic_centralColumns_delete{background-image:url("../img/col-minus.svg")}.ic_col_drop{background-image:url("../img/col_drop.png")}.ic_console{background-image:url("../img/console.svg")}.ic_database,.ic_s_db{background-image:url("../img/database.svg")}.ic_eye{background-image:url("../img/glasses.svg")}.ic_eye_grey{background-image:url("../img/eye_grey.png")}.ic_hide{background-image:url("../img/visibility-hidden.svg")}.ic_item{background-image:url("../img/item.png");width:9px;height:9px}.ic_lightbulb{background-image:url("../img/lightbulb.png")}.ic_lightbulb_off{background-image:url("../img/lightbulb_off.png")}.ic_more{background-image:url("../img/more.png");width:13px}.ic_new_data{background-image:url("../img/new_data.png")}.ic_new_data_hovered{background-image:url("../img/new_data_hovered.png")}.ic_new_data_selected{background-image:url("../img/new_data_selected.png")}.ic_new_data_selected_hovered{background-image:url("../img/new_data_selected_hovered.png")}.ic_new_struct{background-image:url("../img/new_struct.png")}.ic_new_struct_hovered{background-image:url("../img/new_struct_hovered.png")}.ic_new_struct_selected{background-image:url("../img/new_struct_selected.png")}.ic_new_struct_selected_hovered{background-image:url("../img/new_struct_selected_hovered.png")}.ic_normalize{background-image:url("../img/wizard.svg")}.ic_pause{background-image:url("../img/pause.svg")}.ic_php_sym{background-image:url("../img/php_sym.png")}.ic_play{background-image:url("../img/triangle-right-1.svg")}.ic_s_asc{background-image:url("../img/sort-asc.svg")}.ic_s_asci{background-image:url("../img/charset.svg")}.ic_s_attention{background-image:url("../img/s_attention.png")}.ic_s_cancel{background-image:url("../img/s_cancel.png")}.ic_s_cancel2{background-image:url("../img/s_cancel2.png")}.ic_s_cog{background-image:url("../img/gear.svg")}.ic_s_desc{background-image:url("../img/sort-desc.svg")}.ic_s_error{background-image:url("../img/error.svg")}.ic_s_host{background-image:url("../img/host.svg")}.ic_s_info{background-image:url("../img/s_info.png")}.ic_s_lang{background-image:url("../img/language.svg")}.ic_s_link{background-image:url("../img/link.svg")}.ic_s_lock{background-image:url("../img/lock.svg")}.ic_s_unlock{background-image:url("../img/lock-open.svg")}.ic_s_loggoff{background-image:url("../img/sign-out.svg")}.ic_s_notice{background-image:url("../img/notice.svg")}.ic_s_okay{background-image:url("../img/check.svg")}.ic_s_passwd{background-image:url("../img/password.svg")}.ic_s_process{background-image:url("../img/s_process.png")}.ic_s_really{background-image:url("../img/s_really.png");width:11px;height:11px}.ic_s_reload{background-image:url("../img/reload.svg")}.ic_s_replication{background-image:url("../img/replication.svg")}.ic_s_rights{background-image:url("../img/user-props.svg")}.ic_s_sortable{background-image:url("../img/s_sortable.png")}.ic_s_status{background-image:url("../img/server.svg")}.ic_s_success{background-image:url("../img/success.svg")}.ic_s_sync{background-image:url("../img/s_sync.png")}.ic_s_tbl{background-image:url("../img/table.svg")}.ic_s_theme{background-image:url("../img/theme.svg")}.ic_s_top{background-image:url("../img/caret-up-stop.svg")}.ic_s_unlink{background-image:url("../img/link-broken.svg")}.ic_s_vars{background-image:url("../img/database-vars.svg")}.ic_s_views{background-image:url("../img/s_views.png")}.ic_show{background-image:url("../img/visibility.svg")}.ic_window-new{background-image:url("../img/windows.svg")}.ic_ajax_clock_small{background-image:url("../img/ajax_clock_small.gif")}.ic_s_partialtext{background-image:url("../img/s_partialtext.png")}.ic_s_fulltext{background-image:url("../img/s_fulltext.png")}body{text-align:left}@media only screen and (min-width: 768px){.table th.position-sticky{top:96px}}select#fieldsSelect,textarea#sqlquery{height:20rem}.breadcrumb-navbar{padding:.5rem 1.8rem;margin-bottom:0;background-color:#e9ecef}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-left:.5rem}.breadcrumb-navbar .breadcrumb-item .icon{margin:0}@media print{.hide{display:none}body,table,th,td{color:#000;background-color:#fff}a:link{color:#000;text-decoration:none}img{border:0}table,th,td{border:.1em solid #000;background-color:#fff}table{border-collapse:collapse;border-spacing:.2em}thead{border-collapse:collapse;border-spacing:.2em;border:.1em solid #000;font-weight:900}th,td{padding:.2em}thead th{font-weight:bold;background-color:#e5e5e5;border:.1em solid #000}#page_content{position:absolute;left:0;top:0;width:95%;float:none}.sqlOuter{color:#000;background-color:#000}.cDrop,.cEdit,.cList,.cCpy,.cPointer{display:none}table tbody:first-of-type tr:nth-child(odd){background:#fff}table tbody:first-of-type tr:nth-child(odd) th{background:#fff}table tbody:first-of-type tr:nth-child(even){background:#dfdfdf}table tbody:first-of-type tr:nth-child(even) th{background:#dfdfdf}.column_attribute{font-size:100%}} - -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZW1lLmNzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcm9vdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yZWJvb3Quc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy92ZW5kb3IvX3Jmcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JvcmRlci1yYWRpdXMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdHlwZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fbGlzdHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fY29udGFpbmVycy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY29udGFpbmVyLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19icmVha3BvaW50cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19ncmlkLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19ncmlkLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3RhYmxlcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdGFibGUtdmFyaWFudHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fbGFiZWxzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tdGV4dC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLWNvbnRyb2wuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RyYW5zaXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1zZWxlY3Quc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1jaGVjay5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLXJhbmdlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zsb2F0aW5nLWxhYmVscy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19pbnB1dC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fZm9ybXMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYnV0dG9ucy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYnV0dG9ucy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190cmFuc2l0aW9ucy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19kcm9wZG93bi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY2FyZXQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYnV0dG9uLWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX25hdi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXZiYXIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fY2FyZC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hY2NvcmRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JhZGdlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2FsZXJ0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19hbGVydC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Nsb3NlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX21vZGFsLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19iYWNrZHJvcC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19zcGlubmVycy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY2xlYXJmaXguc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19jb2xvcmVkLWxpbmtzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fcmF0aW8uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19wb3NpdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3N0YWNrcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdmlzdWFsbHktaGlkZGVuLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fc3RyZXRjaGVkLWxpbmsuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL190ZXh0LXRydW5jYXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RleHQtdHJ1bmNhdGUuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL192ci5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdXRpbGl0aWVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19hcGkuc2NzcyIsIi4uL3Njc3MvX2NvbW1vbi5zY3NzIiwiLi4vc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCIuLi9zY3NzL19lbnVtLWVkaXRvci5zY3NzIiwiLi4vc2Nzcy9fZ2lzLnNjc3MiLCIuLi9zY3NzL19uYXZpZ2F0aW9uLnNjc3MiLCIuLi9zY3NzL19kZXNpZ25lci5zY3NzIiwiLi4vc2Nzcy9fY29kZW1pcnJvci5zY3NzIiwiLi4vc2Nzcy9fanFwbG90LnNjc3MiLCIuLi9zY3NzL19pY29ucy5zY3NzIiwiLi4vc2Nzcy9fcmVib290LnNjc3MiLCIuLi9zY3NzL190YWJsZXMuc2NzcyIsIi4uL3Njc3MvX2Zvcm1zLnNjc3MiLCIuLi9zY3NzL19icmVhZGNydW1iLnNjc3MiLCIuLi9zY3NzL19wcmludC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1DQUEsa0JBUUksQ0FBQSxvQkFBQSxDQUFBLG9CQUFBLENBQUEsa0JBQUEsQ0FBQSxpQkFBQSxDQUFBLG9CQUFBLENBQUEsb0JBQUEsQ0FBQSxtQkFBQSxDQUFBLGtCQUFBLENBQUEsa0JBQUEsQ0FBQSxnQkFBQSxDQUFBLGtCQUFBLENBQUEsdUJBQUEsQ0FBQSxzQkFJQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxxQkFJQSxDQUFBLHVCQUFBLENBQUEscUJBQUEsQ0FBQSxrQkFBQSxDQUFBLHFCQUFBLENBQUEsb0JBQUEsQ0FBQSxtQkFBQSxDQUFBLGtCQUFBLENBQUEsOEJBSUEsQ0FBQSxpQ0FBQSxDQUFBLDZCQUFBLENBQUEsMkJBQUEsQ0FBQSw2QkFBQSxDQUFBLDRCQUFBLENBQUEsNkJBQUEsQ0FBQSx5QkFBQSxDQUFBLDZCQUdGLENBQUEsdUJBQ0EsQ0FBQSwrQkFDQSxDQUFBLCtCQUNBLENBQUEscU5BTUEsQ0FBQSx5R0FDQSxDQUFBLHlGQUNBLENBQUEsZ0RBUUEsQ0FBQSx5QkFDQSxDQUFBLDBCQUNBLENBQUEsMEJBQ0EsQ0FBQSx3QkFDQSxDQUFBLGtCQUlBLENBQUEscUJDbkNGLHFCQUdFLENBQUEsOENBZUUsTUFOSixzQkFPTSxDQUFBLENBQUEsS0FjTixRQUNFLENBQUEsc0NBQ0EsQ0FBQSxrQ0M4T1EsQ0FBQSxzQ0Q1T1IsQ0FBQSxzQ0FDQSxDQUFBLDBCQUNBLENBQUEsb0NBQ0EsQ0FBQSxrQ0FDQSxDQUFBLDZCQUNBLENBQUEseUNBQ0EsQ0FBQSxHQVVGLGFBQ0UsQ0FBQSxhRWdsQjRCLENBQUEsNkJGOWtCNUIsQ0FBQSxRQUNBLENBQUEsV0Ura0I0QixDQUFBLGVGM2tCOUIsVUV5YjhCLENBQUEsMENGOWE5QixZQUNFLENBQUEsbUJFcWhCNEIsQ0FBQSxlQUdBLENBQUEsZUFDQSxDQUFBLE9GaGhCOUIsZ0NDd01RLENBQUEsMEJBbEtKLE9EdENKLGdCQytNUSxDQUFBLENBQUEsT0QxTVIsZ0NDbU1RLENBQUEsMEJBbEtKLE9EakNKLGNDME1RLENBQUEsQ0FBQSxPRHJNUiw4QkM4TFEsQ0FBQSwwQkFsS0osT0Q1QkosaUJDcU1RLENBQUEsQ0FBQSxPRGhNUixnQ0N5TFEsQ0FBQSwwQkFsS0osT0R2QkosZ0JDZ01RLENBQUEsQ0FBQSxPRDNMUixpQkMyS1UsQ0FBQSxPRHRLVixjQ3NLVSxDQUFBLEVEM0pWLFlBQ0UsQ0FBQSxrQkVtVTBCLENBQUEseUNGdlQ1Qix3Q0FFRSxDQUZGLGdDQUVFLENBQUEsV0FDQSxDQUFBLHFDQUNBLENBREEsNkJBQ0EsQ0FBQSxRQU1GLGtCQUNFLENBQUEsaUJBQ0EsQ0FBQSxtQkFDQSxDQUFBLE1BTUYsaUJBRUUsQ0FBQSxTQUdGLFlBR0UsQ0FBQSxrQkFDQSxDQUFBLHdCQUdGLGVBSUUsQ0FBQSxHQUdGLGVFd1o4QixDQUFBLEdGbFo5QixtQkFDRSxDQUFBLGFBQ0EsQ0FBQSxXQU1GLGVBQ0UsQ0FBQSxTQVFGLGtCRWtZOEIsQ0FBQSxhRnhYOUIsaUJDdUVVLENBQUEsV0RoRVYsWUU2YjhCLENBQUEsd0JBUUEsQ0FBQSxRRjFiOUIsaUJBRUUsQ0FBQSxnQkNtRFEsQ0FBQSxhRGpEUixDQUFBLHVCQUNBLENBQUEsSUFHRixjQUFBLENBQUEsSUFDQSxVQUFBLENBQUEsRUFLQSxhRW5OVSxDQUFBLHlCQXVaZ0MsQ0FBQSxRRmhNeEMsYUVrTXdDLENBQUEsNERGdEx4QyxhQUVFLENBQUEsb0JBQ0EsQ0FBQSxrQkFPSixvQ0VpVDhCLENBQUEsYURwU3BCLENBQUEsOEJEUFIsQ0FBQSwwQkFDQSxDQUFBLElBT0YsYUFDRSxDQUFBLFlBQ0EsQ0FBQSxrQkFDQSxDQUFBLGFBQ0EsQ0FBQSxpQkNMUSxDQUFBLFNEVVIsaUJDVlEsQ0FBQSxhRFlOLENBQUEsaUJBQ0EsQ0FBQSxLQUlKLGlCQ2pCVSxDQUFBLGFDdlBBLENBQUEsb0JGMlFSLENBQUEsT0FHQSxhQUNFLENBQUEsSUFJSixtQkFDRSxDQUFBLGlCQzdCUSxDQUFBLFVDeFJDLENBQUEsd0JBU0EsQ0FBQSxtQkNFUCxDQUFBLFFIZ1RGLFNBQ0UsQ0FBQSxhQ3BDTSxDQUFBLGVDZ1RvQixDQUFBLE9GalE5QixlQUNFLENBQUEsUUFNRixxQkFFRSxDQUFBLE1BUUYsbUJBQ0UsQ0FBQSx3QkFDQSxDQUFBLFFBR0YsaUJFeVU4QixDQUFBLG9CQUFBLENBQUEsYUFocUJuQixDQUFBLGVGMlZULENBQUEsR0FPRixrQkFFRSxDQUFBLCtCQUNBLENBQUEsMkJBR0Ysb0JBTUUsQ0FBQSxrQkFDQSxDQUFBLGNBQ0EsQ0FBQSxNQVFGLG9CQUNFLENBQUEsT0FNRixlQUVFLENBQUEsaUNBUUYsU0FDRSxDQUFBLHNDQUtGLFFBS0UsQ0FBQSxtQkFDQSxDQUFBLGlCQ25JUSxDQUFBLG1CRHFJUixDQUFBLGNBSUYsbUJBRUUsQ0FBQSxjQUtGLGNBQ0UsQ0FBQSxPQUdGLGdCQUdFLENBQUEsZ0JBR0EsU0FDRSxDQUFBLDBDQU9KLFlBQ0UsQ0FBQSxnREFRRix5QkFJRSxDQUFBLDRHQUdFLGNBQ0UsQ0FBQSxtQkFPTixTQUNFLENBQUEsaUJBQ0EsQ0FBQSxTQUtGLGVBQ0UsQ0FBQSxTQVVGLFdBQ0UsQ0FBQSxTQUNBLENBQUEsUUFDQSxDQUFBLFFBQ0EsQ0FBQSxPQVFGLFVBQ0UsQ0FBQSxVQUNBLENBQUEsU0FDQSxDQUFBLG1CRThKNEIsQ0FBQSxnQ0RoWHRCLENBQUEsbUJEc05OLENBQUEsMEJDeFhFLE9EaVhKLGdCQ3hNUSxDQUFBLENBQUEsU0RpTk4sVUFDRSxDQUFBLCtPQU9KLFNBT0UsQ0FBQSw0QkFHRixXQUNFLENBQUEsY0FTRixtQkFDRSxDQUFBLDRCQUNBLENBQUEsNEJBbUJGLHVCQUNFLENBQUEsK0JBS0YsU0FDRSxDQUFBLDZCQU1GLFlBQ0UsQ0FQQSx1QkFNRixZQUNFLENBQUEsNkJBTUYsWUFDRSxDQUFBLHlCQUNBLENBQUEsT0FLRixvQkFDRSxDQUFBLE9BS0YsUUFDRSxDQUFBLFFBT0YsaUJBQ0UsQ0FBQSxjQUNBLENBQUEsU0FRRix1QkFDRSxDQUFBLFNBUUYsdUJBQ0UsQ0FBQSxNSW5sQkYsaUJIb1FVLENBQUEsZUNxV29CLENBQUEsV0VsbUI1QixnQ0hzUU0sQ0FBQSxlQ3NWYyxDQUFBLGVBZFEsQ0FBQSwwQkQxZTFCLFdHcEdGLGNINlFNLENBQUEsQ0FBQSxXRzdRTixnQ0hzUU0sQ0FBQSxlQ3NWYyxDQUFBLGVBZFEsQ0FBQSwwQkQxZTFCLFdHcEdGLGdCSDZRTSxDQUFBLENBQUEsV0c3UU4sZ0NIc1FNLENBQUEsZUNzVmMsQ0FBQSxlQWRRLENBQUEsMEJEMWUxQixXR3BHRixjSDZRTSxDQUFBLENBQUEsV0c3UU4sZ0NIc1FNLENBQUEsZUNzVmMsQ0FBQSxlQWRRLENBQUEsMEJEMWUxQixXR3BHRixnQkg2UU0sQ0FBQSxDQUFBLFdHN1FOLGdDSHNRTSxDQUFBLGVDc1ZjLENBQUEsZUFkUSxDQUFBLDBCRDFlMUIsV0dwR0YsY0g2UU0sQ0FBQSxDQUFBLFdHN1FOLGdDSHNRTSxDQUFBLGVDc1ZjLENBQUEsZUFkUSxDQUFBLDBCRDFlMUIsV0dwR0YsZ0JINlFNLENBQUEsQ0FBQSxlR3ZQUixjQ3JERSxDQUFBLGVBQ0EsQ0FBQSxhRHlERixjQzFERSxDQUFBLGVBQ0EsQ0FBQSxrQkQ0REYsb0JBQ0UsQ0FBQSxtQ0FFQSxrQkYrbEI0QixDQUFBLFlFcGxCOUIsaUJIaU5VLENBQUEsd0JHL01SLENBQUEsWUFJRixrQkZpU1MsQ0FBQSxpQkR0RkMsQ0FBQSx3Qkd2TVIsZUFDRSxDQUFBLG1CQUlKLGdCQUNFLENBQUEsa0JGdVJPLENBQUEsaUJEdEZDLENBQUEsYUNsUkMsQ0FBQSwyQkVzRlQsWUFDRSxDQUFBLG1HRS9GRixVQ0hBLENBQUEseUNBQ0EsQ0FBQSx3Q0FDQSxDQUFBLGlCQUNBLENBQUEsZ0JBQ0EsQ0FBQSx5QkN3REUseUJGNUNFLGVKa2RpQixDQUFBLENBQUEseUJNdGFuQix1Q0Y1Q0UsZUprZGlCLENBQUEsQ0FBQSx5Qk10YW5CLHFERjVDRSxlSmtkaUIsQ0FBQSxDQUFBLDBCTXRhbkIsbUVGNUNFLGdCSmtkaUIsQ0FBQSxDQUFBLDBCTXRhbkIsa0ZGNUNFLGdCSmtkaUIsQ0FBQSxDQUFBLEtPaGVyQixxQkFBQSxDQUFBLGdCQ0NBLENBQUEsWUFDQSxDQUFBLGNBQ0EsQ0FBQSxzQ0FFQSxDQUFBLDBDQUNBLENBQUEseUNBQ0EsQ0FBQSxPREpFLGFDYUYsQ0FBQSxVQUNBLENBQUEsY0FDQSxDQUFBLHlDQUNBLENBQUEsd0NBQ0EsQ0FBQSw2QkFDQSxDQUFBLEtBK0NJLFdBQ0UsQ0FBQSxpQkFHRixhQXBDSixDQUFBLFVBQ0EsQ0FBQSxjQWNBLGFBQ0UsQ0FBQSxVQUNBLENBQUEsY0FGRixhQUNFLENBQUEsU0FDQSxDQUFBLGNBRkYsYUFDRSxDQUFBLG9CQUNBLENBQUEsY0FGRixhQUNFLENBQUEsU0FDQSxDQUFBLGNBRkYsYUFDRSxDQUFBLFNBQ0EsQ0FBQSxjQUZGLGFBQ0UsQ0FBQSxvQkFDQSxDQUFBLFVBK0JFLGFBaERKLENBQUEsVUFDQSxDQUFBLE9BcURRLGFBaEVOLENBQUEsaUJBQ0EsQ0FBQSxPQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsT0ErRE0sYUFoRU4sQ0FBQSxTQUNBLENBQUEsT0ErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLE9BK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxPQStETSxhQWhFTixDQUFBLFNBQ0EsQ0FBQSxPQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsT0ErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLE9BK0RNLGFBaEVOLENBQUEsU0FDQSxDQUFBLFFBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxRQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsUUErRE0sYUFoRU4sQ0FBQSxVQUNBLENBQUEsVUF1RVEsdUJBeERWLENBQUEsVUF3RFUsd0JBeERWLENBQUEsVUF3RFUsZUF4RFYsQ0FBQSxVQXdEVSx3QkF4RFYsQ0FBQSxVQXdEVSx3QkF4RFYsQ0FBQSxVQXdEVSxlQXhEVixDQUFBLFVBd0RVLHdCQXhEVixDQUFBLFVBd0RVLHdCQXhEVixDQUFBLFVBd0RVLGVBeERWLENBQUEsV0F3RFUsd0JBeERWLENBQUEsV0F3RFUsd0JBeERWLENBQUEsV0FtRU0sZ0JBRUUsQ0FBQSxXQUdGLGdCQUVFLENBQUEsV0FQRixzQkFFRSxDQUFBLFdBR0Ysc0JBRUUsQ0FBQSxXQVBGLHFCQUVFLENBQUEsV0FHRixxQkFFRSxDQUFBLFdBUEYsbUJBRUUsQ0FBQSxXQUdGLG1CQUVFLENBQUEsV0FQRixxQkFFRSxDQUFBLFdBR0YscUJBRUUsQ0FBQSxXQVBGLG1CQUVFLENBQUEsV0FHRixtQkFFRSxDQUFBLHlCRjFETixRRVVFLFdBQ0UsQ0FBQSxvQkFHRixhQXBDSixDQUFBLFVBQ0EsQ0FBQSxpQkFjQSxhQUNFLENBQUEsVUFDQSxDQUFBLGlCQUZGLGFBQ0UsQ0FBQSxTQUNBLENBQUEsaUJBRkYsYUFDRSxDQUFBLG9CQUNBLENBQUEsaUJBRkYsYUFDRSxDQUFBLFNBQ0EsQ0FBQSxpQkFGRixhQUNFLENBQUEsU0FDQSxDQUFBLGlCQUZGLGFBQ0UsQ0FBQSxvQkFDQSxDQUFBLGFBK0JFLGFBaERKLENBQUEsVUFDQSxDQUFBLFVBcURRLGFBaEVOLENBQUEsaUJBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxTQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFVBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLFNBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFVBK0RNLGFBaEVOLENBQUEsU0FDQSxDQUFBLFdBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxXQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsV0ErRE0sYUFoRU4sQ0FBQSxVQUNBLENBQUEsYUF1RVEsYUF4RFYsQ0FBQSxhQXdEVSx1QkF4RFYsQ0FBQSxhQXdEVSx3QkF4RFYsQ0FBQSxhQXdEVSxlQXhEVixDQUFBLGFBd0RVLHdCQXhEVixDQUFBLGFBd0RVLHdCQXhEVixDQUFBLGFBd0RVLGVBeERWLENBQUEsYUF3RFUsd0JBeERWLENBQUEsYUF3RFUsd0JBeERWLENBQUEsYUF3RFUsZUF4RFYsQ0FBQSxjQXdEVSx3QkF4RFYsQ0FBQSxjQXdEVSx3QkF4RFYsQ0FBQSxpQkFtRU0sZ0JBRUUsQ0FBQSxpQkFHRixnQkFFRSxDQUFBLGlCQVBGLHNCQUVFLENBQUEsaUJBR0Ysc0JBRUUsQ0FBQSxpQkFQRixxQkFFRSxDQUFBLGlCQUdGLHFCQUVFLENBQUEsaUJBUEYsbUJBRUUsQ0FBQSxpQkFHRixtQkFFRSxDQUFBLGlCQVBGLHFCQUVFLENBQUEsaUJBR0YscUJBRUUsQ0FBQSxpQkFQRixtQkFFRSxDQUFBLGlCQUdGLG1CQUVFLENBQUEsQ0FBQSx5QkYxRE4sUUVVRSxXQUNFLENBQUEsb0JBR0YsYUFwQ0osQ0FBQSxVQUNBLENBQUEsaUJBY0EsYUFDRSxDQUFBLFVBQ0EsQ0FBQSxpQkFGRixhQUNFLENBQUEsU0FDQSxDQUFBLGlCQUZGLGFBQ0UsQ0FBQSxvQkFDQSxDQUFBLGlCQUZGLGFBQ0UsQ0FBQSxTQUNBLENBQUEsaUJBRkYsYUFDRSxDQUFBLFNBQ0EsQ0FBQSxpQkFGRixhQUNFLENBQUEsb0JBQ0EsQ0FBQSxhQStCRSxhQWhESixDQUFBLFVBQ0EsQ0FBQSxVQXFEUSxhQWhFTixDQUFBLGlCQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFVBK0RNLGFBaEVOLENBQUEsU0FDQSxDQUFBLFVBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxTQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFVBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLFNBQ0EsQ0FBQSxXQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsV0ErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFdBK0RNLGFBaEVOLENBQUEsVUFDQSxDQUFBLGFBdUVRLGFBeERWLENBQUEsYUF3RFUsdUJBeERWLENBQUEsYUF3RFUsd0JBeERWLENBQUEsYUF3RFUsZUF4RFYsQ0FBQSxhQXdEVSx3QkF4RFYsQ0FBQSxhQXdEVSx3QkF4RFYsQ0FBQSxhQXdEVSxlQXhEVixDQUFBLGFBd0RVLHdCQXhEVixDQUFBLGFBd0RVLHdCQXhEVixDQUFBLGFBd0RVLGVBeERWLENBQUEsY0F3RFUsd0JBeERWLENBQUEsY0F3RFUsd0JBeERWLENBQUEsaUJBbUVNLGdCQUVFLENBQUEsaUJBR0YsZ0JBRUUsQ0FBQSxpQkFQRixzQkFFRSxDQUFBLGlCQUdGLHNCQUVFLENBQUEsaUJBUEYscUJBRUUsQ0FBQSxpQkFHRixxQkFFRSxDQUFBLGlCQVBGLG1CQUVFLENBQUEsaUJBR0YsbUJBRUUsQ0FBQSxpQkFQRixxQkFFRSxDQUFBLGlCQUdGLHFCQUVFLENBQUEsaUJBUEYsbUJBRUUsQ0FBQSxpQkFHRixtQkFFRSxDQUFBLENBQUEseUJGMUROLFFFVUUsV0FDRSxDQUFBLG9CQUdGLGFBcENKLENBQUEsVUFDQSxDQUFBLGlCQWNBLGFBQ0UsQ0FBQSxVQUNBLENBQUEsaUJBRkYsYUFDRSxDQUFBLFNBQ0EsQ0FBQSxpQkFGRixhQUNFLENBQUEsb0JBQ0EsQ0FBQSxpQkFGRixhQUNFLENBQUEsU0FDQSxDQUFBLGlCQUZGLGFBQ0UsQ0FBQSxTQUNBLENBQUEsaUJBRkYsYUFDRSxDQUFBLG9CQUNBLENBQUEsYUErQkUsYUFoREosQ0FBQSxVQUNBLENBQUEsVUFxRFEsYUFoRU4sQ0FBQSxpQkFDQSxDQUFBLFVBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLFNBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFVBK0RNLGFBaEVOLENBQUEsU0FDQSxDQUFBLFVBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxTQUNBLENBQUEsV0ErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFdBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxXQStETSxhQWhFTixDQUFBLFVBQ0EsQ0FBQSxhQXVFUSxhQXhEVixDQUFBLGFBd0RVLHVCQXhEVixDQUFBLGFBd0RVLHdCQXhEVixDQUFBLGFBd0RVLGVBeERWLENBQUEsYUF3RFUsd0JBeERWLENBQUEsYUF3RFUsd0JBeERWLENBQUEsYUF3RFUsZUF4RFYsQ0FBQSxhQXdEVSx3QkF4RFYsQ0FBQSxhQXdEVSx3QkF4RFYsQ0FBQSxhQXdEVSxlQXhEVixDQUFBLGNBd0RVLHdCQXhEVixDQUFBLGNBd0RVLHdCQXhEVixDQUFBLGlCQW1FTSxnQkFFRSxDQUFBLGlCQUdGLGdCQUVFLENBQUEsaUJBUEYsc0JBRUUsQ0FBQSxpQkFHRixzQkFFRSxDQUFBLGlCQVBGLHFCQUVFLENBQUEsaUJBR0YscUJBRUUsQ0FBQSxpQkFQRixtQkFFRSxDQUFBLGlCQUdGLG1CQUVFLENBQUEsaUJBUEYscUJBRUUsQ0FBQSxpQkFHRixxQkFFRSxDQUFBLGlCQVBGLG1CQUVFLENBQUEsaUJBR0YsbUJBRUUsQ0FBQSxDQUFBLDBCRjFETixRRVVFLFdBQ0UsQ0FBQSxvQkFHRixhQXBDSixDQUFBLFVBQ0EsQ0FBQSxpQkFjQSxhQUNFLENBQUEsVUFDQSxDQUFBLGlCQUZGLGFBQ0UsQ0FBQSxTQUNBLENBQUEsaUJBRkYsYUFDRSxDQUFBLG9CQUNBLENBQUEsaUJBRkYsYUFDRSxDQUFBLFNBQ0EsQ0FBQSxpQkFGRixhQUNFLENBQUEsU0FDQSxDQUFBLGlCQUZGLGFBQ0UsQ0FBQSxvQkFDQSxDQUFBLGFBK0JFLGFBaERKLENBQUEsVUFDQSxDQUFBLFVBcURRLGFBaEVOLENBQUEsaUJBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxTQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFVBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLFNBQ0EsQ0FBQSxVQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsVUErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFVBK0RNLGFBaEVOLENBQUEsU0FDQSxDQUFBLFdBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxXQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsV0ErRE0sYUFoRU4sQ0FBQSxVQUNBLENBQUEsYUF1RVEsYUF4RFYsQ0FBQSxhQXdEVSx1QkF4RFYsQ0FBQSxhQXdEVSx3QkF4RFYsQ0FBQSxhQXdEVSxlQXhEVixDQUFBLGFBd0RVLHdCQXhEVixDQUFBLGFBd0RVLHdCQXhEVixDQUFBLGFBd0RVLGVBeERWLENBQUEsYUF3RFUsd0JBeERWLENBQUEsYUF3RFUsd0JBeERWLENBQUEsYUF3RFUsZUF4RFYsQ0FBQSxjQXdEVSx3QkF4RFYsQ0FBQSxjQXdEVSx3QkF4RFYsQ0FBQSxpQkFtRU0sZ0JBRUUsQ0FBQSxpQkFHRixnQkFFRSxDQUFBLGlCQVBGLHNCQUVFLENBQUEsaUJBR0Ysc0JBRUUsQ0FBQSxpQkFQRixxQkFFRSxDQUFBLGlCQUdGLHFCQUVFLENBQUEsaUJBUEYsbUJBRUUsQ0FBQSxpQkFHRixtQkFFRSxDQUFBLGlCQVBGLHFCQUVFLENBQUEsaUJBR0YscUJBRUUsQ0FBQSxpQkFQRixtQkFFRSxDQUFBLGlCQUdGLG1CQUVFLENBQUEsQ0FBQSwwQkYxRE4sU0VVRSxXQUNFLENBQUEscUJBR0YsYUFwQ0osQ0FBQSxVQUNBLENBQUEsa0JBY0EsYUFDRSxDQUFBLFVBQ0EsQ0FBQSxrQkFGRixhQUNFLENBQUEsU0FDQSxDQUFBLGtCQUZGLGFBQ0UsQ0FBQSxvQkFDQSxDQUFBLGtCQUZGLGFBQ0UsQ0FBQSxTQUNBLENBQUEsa0JBRkYsYUFDRSxDQUFBLFNBQ0EsQ0FBQSxrQkFGRixhQUNFLENBQUEsb0JBQ0EsQ0FBQSxjQStCRSxhQWhESixDQUFBLFVBQ0EsQ0FBQSxXQXFEUSxhQWhFTixDQUFBLGlCQUNBLENBQUEsV0ErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFdBK0RNLGFBaEVOLENBQUEsU0FDQSxDQUFBLFdBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxXQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsV0ErRE0sYUFoRU4sQ0FBQSxTQUNBLENBQUEsV0ErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFdBK0RNLGFBaEVOLENBQUEsa0JBQ0EsQ0FBQSxXQStETSxhQWhFTixDQUFBLFNBQ0EsQ0FBQSxZQStETSxhQWhFTixDQUFBLGtCQUNBLENBQUEsWUErRE0sYUFoRU4sQ0FBQSxrQkFDQSxDQUFBLFlBK0RNLGFBaEVOLENBQUEsVUFDQSxDQUFBLGNBdUVRLGFBeERWLENBQUEsY0F3RFUsdUJBeERWLENBQUEsY0F3RFUsd0JBeERWLENBQUEsY0F3RFUsZUF4RFYsQ0FBQSxjQXdEVSx3QkF4RFYsQ0FBQSxjQXdEVSx3QkF4RFYsQ0FBQSxjQXdEVSxlQXhEVixDQUFBLGNBd0RVLHdCQXhEVixDQUFBLGNBd0RVLHdCQXhEVixDQUFBLGNBd0RVLGVBeERWLENBQUEsZUF3RFUsd0JBeERWLENBQUEsZUF3RFUsd0JBeERWLENBQUEsbUJBbUVNLGdCQUVFLENBQUEsbUJBR0YsZ0JBRUUsQ0FBQSxtQkFQRixzQkFFRSxDQUFBLG1CQUdGLHNCQUVFLENBQUEsbUJBUEYscUJBRUUsQ0FBQSxtQkFHRixxQkFFRSxDQUFBLG1CQVBGLG1CQUVFLENBQUEsbUJBR0YsbUJBRUUsQ0FBQSxtQkFQRixxQkFFRSxDQUFBLG1CQUdGLHFCQUVFLENBQUEsbUJBUEYsbUJBRUUsQ0FBQSxtQkFHRixtQkFFRSxDQUFBLENBQUEsT0NySFYsMEJBQ0UsQ0FBQSxpQ0FDQSxDQUFBLGlDQUNBLENBQUEsMENBQ0EsQ0FBQSxnQ0FDQSxDQUFBLHdDQUNBLENBQUEsK0JBQ0EsQ0FBQSx5Q0FDQSxDQUFBLFVBRUEsQ0FBQSxrQlR3V08sQ0FBQSxhQXJXRSxDQUFBLGtCQWtxQm1CLENBQUEsb0JBeHFCbkIsQ0FBQSx5QlNjVCxtQkFDRSxDQUFBLG1DQUNBLENBQUEsdUJUMGUwQixDQUFBLHVEU3hlMUIsQ0FBQSxhQUdGLHNCQUNFLENBQUEsYUFHRixxQkFDRSxDQUFBLDBCQUlGLGlDQUNFLENBQUEsYUFTSixnQkFDRSxDQUFBLDRCQVVBLHFCQUNFLENBQUEsZ0NBZUYsa0JBQ0UsQ0FBQSxrQ0FHQSxrQkFDRSxDQUFBLG9DQU9KLHFCQUNFLENBQUEscUNBR0Ysa0JBQ0UsQ0FBQSwyQ0FTRixnREFDRSxDQUFBLG1DQUNBLENBQUEsY0FRSiwrQ0FDRSxDQUFBLGtDQUNBLENBQUEsOEJBUUEsOENBQ0UsQ0FBQSxpQ0FDQSxDQUFBLGVDNUhGLHNCQU1FLENBQUEsOEJBQ0EsQ0FBQSw4QkFDQSxDQUFBLDZCQUNBLENBQUEsNkJBQ0EsQ0FBQSw0QkFDQSxDQUFBLDRCQUNBLENBQUEsVUFYUSxDQUFBLG9CQWNSLENBQUEsaUJBZkYsc0JBTUUsQ0FBQSw4QkFDQSxDQUFBLDhCQUNBLENBQUEsNkJBQ0EsQ0FBQSw2QkFDQSxDQUFBLDRCQUNBLENBQUEsNEJBQ0EsQ0FBQSxVQVhRLENBQUEsb0JBY1IsQ0FBQSxlQWZGLHNCQU1FLENBQUEsOEJBQ0EsQ0FBQSw4QkFDQSxDQUFBLDZCQUNBLENBQUEsNkJBQ0EsQ0FBQSw0QkFDQSxDQUFBLDRCQUNBLENBQUEsVUFYUSxDQUFBLG9CQWNSLENBQUEsWUFmRixzQkFNRSxDQUFBLDhCQUNBLENBQUEsOEJBQ0EsQ0FBQSw2QkFDQSxDQUFBLDZCQUNBLENBQUEsNEJBQ0EsQ0FBQSw0QkFDQSxDQUFBLFVBWFEsQ0FBQSxvQkFjUixDQUFBLGVBZkYsc0JBTUUsQ0FBQSw4QkFDQSxDQUFBLDhCQUNBLENBQUEsNkJBQ0EsQ0FBQSw2QkFDQSxDQUFBLDRCQUNBLENBQUEsNEJBQ0EsQ0FBQSxVQVhRLENBQUEsb0JBY1IsQ0FBQSxjQWZGLHNCQU1FLENBQUEsOEJBQ0EsQ0FBQSw4QkFDQSxDQUFBLDZCQUNBLENBQUEsNkJBQ0EsQ0FBQSw0QkFDQSxDQUFBLDRCQUNBLENBQUEsVUFYUSxDQUFBLG9CQWNSLENBQUEsYUFmRixzQkFNRSxDQUFBLDhCQUNBLENBQUEsOEJBQ0EsQ0FBQSw2QkFDQSxDQUFBLDZCQUNBLENBQUEsNEJBQ0EsQ0FBQSw0QkFDQSxDQUFBLFVBWFEsQ0FBQSxvQkFjUixDQUFBLFlBZkYsc0JBTUUsQ0FBQSw4QkFDQSxDQUFBLDhCQUNBLENBQUEsNkJBQ0EsQ0FBQSw2QkFDQSxDQUFBLDRCQUNBLENBQUEsNEJBQ0EsQ0FBQSxVQVhRLENBQUEsb0JBY1IsQ0FBQSxrQkRvSUEsZUFDRSxDQUFBLGdDQUNBLENBQUEsNEJIM0VGLHFCR3lFQSxlQUNFLENBQUEsZ0NBQ0EsQ0FBQSxDQUFBLDRCSDNFRixxQkd5RUEsZUFDRSxDQUFBLGdDQUNBLENBQUEsQ0FBQSw0QkgzRUYscUJHeUVBLGVBQ0UsQ0FBQSxnQ0FDQSxDQUFBLENBQUEsNkJIM0VGLHFCR3lFQSxlQUNFLENBQUEsZ0NBQ0EsQ0FBQSxDQUFBLDZCSDNFRixzQkd5RUEsZUFDRSxDQUFBLGdDQUNBLENBQUEsQ0FBQSxZRW5KTixtQlh5ekJ3QyxDQUFBLGdCVy95QnhDLGdDQUNFLENBQUEsbUNBQ0EsQ0FBQSxlQUNBLENBQUEsaUJaK1FRLENBQUEsZUNxVG9CLENBQUEsbUJXNWpCOUIsOEJBQ0UsQ0FBQSxpQ0FDQSxDQUFBLGlCWnFRUSxDQUFBLG1CWWpRViwrQkFDRSxDQUFBLGtDQUNBLENBQUEsa0JaK1BRLENBQUEsV2E1UlYsaUJaaXpCd0MsQ0FBQSxpQkRyaEI5QixDQUFBLGFDbFJDLENBQUEsY2FWWCxhQUNFLENBQUEsVUFDQSxDQUFBLHNCQUNBLENBQUEsY2R5UlEsQ0FBQSxlQytTb0IsQ0FBQSxlQU1BLENBQUEsYUFwa0JuQixDQUFBLHFCQVRBLENBQUEsMkJhTVQsQ0FBQSx3QkFDQSxDQUFBLHVCQUNBLENBREEsb0JBQ0EsQ0FEQSxlQUNBLENBQUEsb0JaR0UsQ0FBQSxvRVlHRixDQUFBLHVDQ0ZJLGNEaEJOLGVDaUJRLENBQUEsQ0FBQSx5QkRHTixlQUNFLENBQUEsd0RBRUEsY0FDRSxDQUFBLG9CQUtKLGFiaEJTLENBQUEscUJBVEEsQ0FBQSxvQkEwMUI2QixDQUFBLFNhN3pCcEMsQ0FBQSw0Q2I0c0I0QixDQUFBLDJDYWhzQjlCLFlBRUUsQ0FBQSxnQ0FJRixhYnpDUyxDQUFBLFNhNENQLENBUEEsMkJBSUYsYWJ6Q1MsQ0FBQSxTYTRDUCxDQUFBLCtDQVFGLHdCYnhEUyxDQUFBLFNhNkRQLENBQUEsMENBSUYsc0JBQ0UsQ0FBQSx5QkFDQSxDQUFBLHlCYjJwQjBCLENhM3BCMUIsd0JiMnBCMEIsQ0FBQSxhQXZ0Qm5CLENBQUEsd0JBUEEsQ0FBQSxtQmF1RVAsQ0FBQSxvQkFDQSxDQUFBLGtCQUNBLENBQUEsY0FDQSxDQUFBLDJCYmliMEIsQ0FBQSxlYS9hMUIsQ0FBQSxxSUFDQSxDQURBLDZIQUNBLENBaEJBLG9DQUlGLHNCQUNFLENBQUEseUJBQ0EsQ0FBQSx5QmIycEIwQixDYTNwQjFCLHdCYjJwQjBCLENBQUEsYUF2dEJuQixDQUFBLHdCQVBBLENBQUEsbUJhdUVQLENBQUEsb0JBQ0EsQ0FBQSxrQkFDQSxDQUFBLGNBQ0EsQ0FBQSwyQmJpYjBCLENBQUEsZWEvYTFCLENBQUEsNkhBQ0EsQ0FBQSx1Q0NuRUUsMENEdURKLHVCQ3RETSxDRHNETixlQ3RETSxDQURGLG9DRHVESixlQ3RETSxDQUFBLENBQUEsK0VEcUVOLHdCYmc2QmdDLENjcitCMUIseUVEcUVOLHdCYmc2QmdDLENBQUEsMENhNTVCaEMsc0JBQ0UsQ0FBQSx5QkFDQSxDQUFBLHlCYndvQjBCLENheG9CMUIsd0Jid29CMEIsQ0FBQSxhQXZ0Qm5CLENBQUEsd0JBUEEsQ0FBQSxtQmEwRlAsQ0FBQSxvQkFDQSxDQUFBLGtCQUNBLENBQUEsY0FDQSxDQUFBLDJCYjhaMEIsQ0FBQSxlYTVaMUIsQ0FBQSxxSUFDQSxDQURBLDZIQUNBLENBQUEsdUNDdEZFLDBDRDBFSix1QkN6RU0sQ0R5RU4sZUN6RU0sQ0FBQSxDQUFBLCtFRHdGTix3QmI2NEJnQyxDQUFBLHdCYW40QmxDLGFBQ0UsQ0FBQSxVQUNBLENBQUEsaUJBQ0EsQ0FBQSxlQUNBLENBQUEsZWIwZDRCLENBQUEsYUFwa0JuQixDQUFBLDhCYTZHVCxDQUFBLDBCQUNBLENBQUEsa0JBQ0EsQ0FBQSxnRkFFQSxlQUVFLENBQUEsY0FDQSxDQUFBLGlCQVdKLHFDYml1QndDLENBQUEsb0JhL3RCdEMsQ0FBQSxrQmQ4SVEsQ0FBQSxtQkU3UU4sQ0FBQSw2Q1ltSUYsb0JBQ0UsQ0FBQSx1QkFDQSxDQUFBLHdCYjRsQjBCLENhNWxCMUIsdUJiNGxCMEIsQ0NqdUIxQix1Q1ltSUYsb0JBQ0UsQ0FBQSx1QkFDQSxDQUFBLHdCYjRsQjBCLENhNWxCMUIsdUJiNGxCMEIsQ0FBQSw2Q2F4bEI1QixvQkFDRSxDQUFBLHVCQUNBLENBQUEsd0Jic2xCMEIsQ2F0bEIxQix1QmJzbEIwQixDQUFBLGlCYWpsQjlCLG1DYitzQndDLENBQUEsa0JhN3NCdEMsQ0FBQSxpQmQySFEsQ0FBQSxtQkU3UU4sQ0FBQSw2Q1lzSkYsa0JBQ0UsQ0FBQSxvQkFDQSxDQUFBLHVCYjZrQjBCLENhN2tCMUIsc0JiNmtCMEIsQ0NydUIxQix1Q1lzSkYsa0JBQ0UsQ0FBQSxvQkFDQSxDQUFBLHVCYjZrQjBCLENhN2tCMUIsc0JiNmtCMEIsQ0FBQSw2Q2F6a0I1QixrQkFDRSxDQUFBLG9CQUNBLENBQUEsdUJidWtCMEIsQ2F2a0IxQixzQmJ1a0IwQixDQUFBLHNCYTlqQjVCLHNDYnNyQnNDLENBQUEseUJhbHJCdEMscUNibXJCc0MsQ0FBQSx5QmEvcUJ0QyxtQ2JnckJzQyxDQUFBLG9CYTFxQnhDLFViOHFCd0MsQ0FBQSxXYTVxQnRDLENBQUEsZWI2aEI0QixDQUFBLG1EYTFoQjVCLGNBQ0UsQ0FBQSx1Q0FHRixZQUNFLENBQUEsb0JaL0xBLENBQUEsMENZbU1GLFlBQ0UsQ0FBQSxvQlpwTUEsQ0FBQSxhY2RKLGFBQ0UsQ0FBQSxVQUNBLENBQUEsc0NBQ0EsQ0FBQSxzQ0FFQSxDQUFBLGNoQnNSUSxDQUFBLGVDK1NvQixDQUFBLGVBTUEsQ0FBQSxhQXBrQm5CLENBQUEscUJBVEEsQ0FBQSxnUGVTVCxDQUFBLDJCQUNBLENBQUEsdUNmaTdCa0MsQ0FBQSx5QkFDQSxDQUFBLHdCZS82QmxDLENBQUEsb0JkRkUsQ0FBQSxvRWNLRixDQUFBLHVCQUNBLENBREEsb0JBQ0EsQ0FEQSxlQUNBLENBQUEsdUNETEksYUNmTixlRGdCUSxDQUFBLENBQUEsbUJDTU4sb0JmdTBCc0MsQ0FBQSxTZXIwQnBDLENBQUEsNENmczdCOEIsQ0FBQSwwRGU3NkJoQyxvQmZrc0I0QixDQUFBLHFCZS9yQjFCLENBQUEsc0JBR0Ysd0JmbENTLENBQUEsNEJleUNULG1CQUNFLENBQUEseUJBQ0EsQ0FBQSxnQkFJSixrQmYwckI4QixDQUFBLHFCQUFBLENBQUEsa0JBQ0EsQ0FBQSxrQkRwZHBCLENBQUEsbUJFN1FOLENBQUEsZ0JjOENKLGlCZnNyQjhCLENBQUEsb0JBQUEsQ0FBQSxpQkFDQSxDQUFBLGlCRHhkcEIsQ0FBQSxtQkU3UU4sQ0FBQSxZZWZKLGFBQ0UsQ0FBQSxpQmhCczNCd0MsQ0FBQSxrQkFDQSxDQUFBLHFCQUNBLENBQUEsOEJnQm4zQnhDLFVBQ0UsQ0FBQSxrQkFDQSxDQUFBLGtCQUlKLFNoQjAyQjBDLENBQUEsVUFBQSxDQUFBLGdCZ0J2MkJ4QyxDQUFBLGtCQUNBLENBQUEscUJoQlpTLENBQUEsMkJnQmNULENBQUEsMEJBQ0EsQ0FBQSx1QkFDQSxDQUFBLGdDaEI2MkJ3QyxDQUFBLHVCZ0IzMkJ4QyxDaEIyMkJ3QyxvQmdCMzJCeEMsQ2hCMjJCd0MsZWdCMzJCeEMsQ0FBQSxnQ0FDQSxDQURBLGtCQUNBLENBQUEsaUNBR0EsbUJmWEUsQ0FBQSw4QmVlRixpQmhCcTJCd0MsQ0FBQSx5QmdCaDJCeEMsc0JoQjIxQndDLENBQUEsd0JnQnYxQnhDLG9CaEJ1ekJzQyxDQUFBLFNnQnJ6QnBDLENBQUEsNENoQm9zQjRCLENBQUEsMEJnQmhzQjlCLHdCaEJYUSxDQUFBLG9CQUFBLENBQUEseUNnQmVOLDhPQUlJLENBQUEsc0NBSUosc0pBSUksQ0FBQSwrQ0FLTix3QmhCaENRLENBQUEsb0JBQUEsQ0FBQSx3T2dCdUNKLENBQUEsMkJBSUosbUJBQ0UsQ0FBQSxXQUNBLENBQUEsVWhCbTBCdUMsQ0FBQSwyRmdCM3pCdkMsVWhCMnpCdUMsQ0FBQSxhZ0I1eUIzQyxrQmhCc3pCa0MsQ0FBQSwrQmdCbnpCaEMsU2hCa3pCZ0MsQ0FBQSxrQmdCaHpCOUIsQ0FBQSx1S0FDQSxDQUFBLCtCQUNBLENBQUEsaUJmOUZBLENBQUEsK0NlZ0dBLENBQUEsdUNGL0ZFLCtCRXlGSixlRnhGTSxDQUFBLENBQUEscUNFZ0dKLHlKQUNFLENBQUEsdUNBR0YsZ0NoQml6QjhCLENBQUEsc0pnQjN5QjFCLENBQUEsbUJBTVIsb0JBQ0UsQ0FBQSxpQmhCb3hCZ0MsQ0FBQSxXZ0JoeEJsQyxpQkFDRSxDQUFBLHFCQUNBLENBQUEsbUJBQ0EsQ0FBQSxtREFJRSxtQkFDRSxDQUFBLFdBQ0EsQ0FBQSxXaEJzb0J3QixDQUFBLFlpQm54QjlCLFVBQ0UsQ0FBQSxhQUNBLENBQUEsU0FDQSxDQUFBLDhCQUNBLENBQUEsdUJBQ0EsQ0FEQSxvQkFDQSxDQURBLGVBQ0EsQ0FBQSxrQkFFQSxTQUNFLENBQUEsd0NBSUEsMkRqQjg5QnVDLENBQUEsb0NpQjc5QnZDLDJEakI2OUJ1QyxDQUFBLDhCaUIxOUJ6QyxRQUNFLENBQUEsa0NBR0YsVWpCZzlCeUMsQ0FBQSxXQUFBLENBQUEsbUJpQjc4QnZDLENBQUEsd0JqQlNNLENBQUEsUUF1OEJpQyxDQUFBLGtCQzE5QnZDLENBQUEsOEdnQmVBLENoQmZBLHNHZ0JlQSxDQUFBLHVCQUNBLENBREEsZUFDQSxDQUFBLHVDSGZFLGtDR01KLHVCSExNLENHS04sZUhMTSxDQUFBLENBQUEseUNHZ0JKLHdCakI2OEJ1QyxDQUFBLDJDaUJ4OEJ6QyxVakJ5N0JnQyxDQUFBLFlBQ0EsQ0FBQSxtQmlCdjdCOUIsQ0FBQSxjakJ3N0I4QixDQUFBLHdCQTE5QnZCLENBQUEsMEJpQnFDUCxDQUFBLGtCaEI3QkEsQ0FBQSw4QmdCa0NGLFVqQnE3QnlDLENBQUEsV0FBQSxDQUFBLHdCQXA4QmpDLENBQUEsUUF1OEJpQyxDQUFBLGtCQzE5QnZDLENBQUEsMkdnQnlDQSxDaEJ6Q0Esc0dnQnlDQSxDQUFBLG9CQUNBLENBREEsZUFDQSxDQUFBLHVDSHpDRSw4QkdpQ0osb0JIaENNLENHZ0NOLGVIaENNLENBQUEsQ0FBQSxxQ0cwQ0osd0JqQm03QnVDLENBQUEsOEJpQjk2QnpDLFVqQis1QmdDLENBQUEsWUFDQSxDQUFBLG1CaUI3NUI5QixDQUFBLGNqQjg1QjhCLENBQUEsd0JBMTlCdkIsQ0FBQSwwQmlCK0RQLENBQUEsa0JoQnZEQSxDQUFBLHFCZ0I0REYsbUJBQ0UsQ0FBQSwyQ0FFQSx3QmpCckVPLENBQUEsdUNpQnlFUCx3QmpCekVPLENBQUEsZWtCYlgsaUJBQ0UsQ0FBQSx5REFFQSx5QmxCMi9CZ0MsQ0FBQSxnQkFDQSxDQUFBLHFCa0J0L0JoQyxpQkFDRSxDQUFBLEtBQ0EsQ0FBQSxNQUNBLENBQUEsV0FDQSxDQUFBLG1CQUNBLENBQUEsbUJBQ0EsQ0FBQSw4QkFDQSxDQUFBLG9CQUNBLENBQUEsNERBQ0EsQ0FBQSx1Q0pFRSxxQklYSixlSllNLENBQUEsQ0FBQSw2QklDTixtQkFDRSxDQUFBLCtDQUVBLG1CQUNFLENBSEYsMENBRUEsbUJBQ0UsQ0FBQSwwREFHRixvQmxCcStCOEIsQ0FBQSxzQkFDQSxDa0J6K0I1Qix3RkFHRixvQmxCcStCOEIsQ0FBQSxzQkFDQSxDQUFBLDhDa0JoK0I5QixvQmxCKzlCOEIsQ0FBQSxzQkFDQSxDQUFBLDRCa0IxOUJoQyxvQmxCeTlCZ0MsQ0FBQSxzQkFDQSxDQUFBLGdFa0JsOUI5QixXbEJtOUI4QixDQUFBLDZEQUNBLENBRkEsc0lrQmw5QjlCLFdsQm05QjhCLENBQUEsNkRBQ0EsQ0FBQSxvRGtCNzhCOUIsV2xCNDhCOEIsQ0FBQSw2REFDQSxDQUFBLGFtQmpnQ2xDLGlCQUNFLENBQUEsWUFDQSxDQUFBLGNBQ0EsQ0FBQSxtQkFDQSxDQUFBLFVBQ0EsQ0FBQSxxREFFQSxpQkFFRSxDQUFBLGFBQ0EsQ0FBQSxRQUNBLENBQUEsV0FDQSxDQUFBLGlFQUlGLFNBRUUsQ0FBQSxrQkFNRixpQkFDRSxDQUFBLFNBQ0EsQ0FBQSx3QkFFQSxTQUNFLENBQUEsa0JBV04sWUFDRSxDQUFBLGtCQUNBLENBQUEsc0JBQ0EsQ0FBQSxjcEJpUFEsQ0FBQSxlQytTb0IsQ0FBQSxlQU1BLENBQUEsYUFwa0JuQixDQUFBLGlCbUJtQ1QsQ0FBQSxrQkFDQSxDQUFBLHdCbkIzQ1MsQ0FBQSx3Qm1CNkNULENBQUEsb0JsQnBDRSxDQUFBLGtIa0I4Q0osa0JBSUUsQ0FBQSxpQnBCMk5RLENBQUEsbUJFN1FOLENBQUEsa0hrQnVESixvQkFJRSxDQUFBLGtCcEJrTlEsQ0FBQSxtQkU3UU4sQ0FBQSwwRGtCZ0VKLGtCQUVFLENBQUEscUtBYUUseUJsQi9EQSxDQUFBLDRCQUNBLENBQUEsNEprQnFFQSx5QmxCdEVBLENBQUEsNEJBQ0EsQ0FBQSwwSWtCZ0ZGLGdCQUNFLENBQUEsd0JsQnBFQSxDQUFBLDJCQUNBLENBQUEsZ0JtQnpCRixZQUNFLENBQUEsVUFDQSxDQUFBLGlCcEIweEJvQyxDQUFBLGlCRHJoQjlCLENBQUEsYUN5dkJlLENBQUEsZW9Cdi9CdkIsaUJBQ0UsQ0FBQSxRQUNBLENBQUEsU0FDQSxDQUFBLFlBQ0EsQ0FBQSxjQUNBLENBQUEsb0JBQ0EsQ0FBQSxnQkFDQSxDQUFBLGtCckJ1UE0sQ0FBQSxVcUIzUVEsQ0FBQSxtQ0FDRyxDQUFBLG9CbkJIakIsQ0FBQSw4SG1CK0JBLGFBRUUsQ0FBQSwwREE5Q0Ysb0JwQm1oQ3FCLENBQUEsbUNBN0tlLENBQUEsMlBvQjl5QmhDLENBQUEsMkJBQ0EsQ0FBQSwwREFDQSxDQUFBLCtEQUNBLENBQUEsc0VBR0Ysb0JwQnE5Qm1CLENBQUEsMkNvQmxnQ0osQ0FBQSwwRUFqQmpCLG1DcEJzMkJvQyxDQUFBLGlGb0I1eEJoQyxDQUFBLHdEQTFFSixvQnBCbWhDcUIsQ0FBQSw0Tm9CLzdCakIsc0JwQjgyQmdDLENBQUEsMmRvQjMyQjlCLENBQUEsNERBQ0EsQ0FBQSx5RUFDQSxDQUFBLG9FQUlKLG9CcEJzN0JtQixDQUFBLDJDb0JsZ0NKLENBQUEsa0VBakJqQixvQnBCbWhDcUIsQ0FBQSxrRm9CMzZCbkIsd0JwQjI2Qm1CLENBQUEsOEVvQnY2Qm5CLDJDQTNGZSxDQUFBLHNHQStGZixhcEJtNkJtQixDQUFBLHFEb0I3NUJyQixnQkFDRSxDQUFBLHNLQXZIRixTQStISSxDQUFBLDhMQUlGLFNBQ0UsQ0FBQSxrQkFqSE4sWUFDRSxDQUFBLFVBQ0EsQ0FBQSxpQnBCMHhCb0MsQ0FBQSxpQkRyaEI5QixDQUFBLGFDeXZCZSxDQUFBLGlCb0J2L0J2QixpQkFDRSxDQUFBLFFBQ0EsQ0FBQSxTQUNBLENBQUEsWUFDQSxDQUFBLGNBQ0EsQ0FBQSxvQkFDQSxDQUFBLGdCQUNBLENBQUEsa0JyQnVQTSxDQUFBLFVxQjNRUSxDQUFBLG1DQUNHLENBQUEsb0JuQkhqQixDQUFBLDhJbUIrQkEsYUFFRSxDQUFBLDhEQTlDRixvQnBCbWhDcUIsQ0FBQSxtQ0E3S2UsQ0FBQSwyVW9COXlCaEMsQ0FBQSwyQkFDQSxDQUFBLDBEQUNBLENBQUEsK0RBQ0EsQ0FBQSwwRUFHRixvQnBCcTlCbUIsQ0FBQSwyQ29CbGdDSixDQUFBLDhFQWpCakIsbUNwQnMyQm9DLENBQUEsaUZvQjV4QmhDLENBQUEsNERBMUVKLG9CcEJtaENxQixDQUFBLG9Pb0IvN0JqQixzQnBCODJCZ0MsQ0FBQSwyaUJvQjMyQjlCLENBQUEsNERBQ0EsQ0FBQSx5RUFDQSxDQUFBLHdFQUlKLG9CcEJzN0JtQixDQUFBLDJDb0JsZ0NKLENBQUEsc0VBakJqQixvQnBCbWhDcUIsQ0FBQSxzRm9CMzZCbkIsd0JwQjI2Qm1CLENBQUEsa0ZvQnY2Qm5CLDJDQTNGZSxDQUFBLDBHQStGZixhcEJtNkJtQixDQUFBLHVEb0I3NUJyQixnQkFDRSxDQUFBLDhLQXZIRixTQWlJSSxDQUFBLHNNQUVGLFNBQ0UsQ0FBQSxLQ3RJUixvQkFDRSxDQUFBLGVyQjBrQjRCLENBQUEsZUFNQSxDQUFBLGFBcGtCbkIsQ0FBQSxpQnFCUFQsQ0FBQSxvQkFDQSxDQUFBLHFCQUVBLENBQUEsY0FDQSxDQUFBLHdCQUNBLENBREEscUJBQ0EsQ0FEQSxnQkFDQSxDQUFBLDhCQUNBLENBQUEsOEJBQ0EsQ0FBQSxzQkM4R0EsQ0FBQSxjdkJpS1EsQ0FBQSxvQkU3UU4sQ0FBQSw2SG9CQUYsQ0FBQSx1Q1BDSSxLT2hCTixlUGlCUSxDQUFBLENBQUEsV0FBQSxhZEpHLENBQUEsaUNxQlNULFNBRUUsQ0FBQSw0Q3JCcXRCNEIsQ0FBQSxtRHFCdHNCOUIsbUJBR0UsQ0FBQSxXckIydUIwQixDQUFBLGFxQjl0QjVCLFVDbERRLENBQUEsd0J0QnVFSyxDQUFBLG9CQUFBLENBQUEsbUJzQnZEYixVQWJjLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLGlEQW9CZixVQW5CYyxDQUFBLHdCQUZLLENBQUEsb0JBQ0osQ0FBQSwyQ0E2QlgsQ0FBQSwwSUFJSixVQTdCZSxDQUFBLHdCQUZLLENBQUEsb0JBQ0osQ0FBQSx3S0F5Q2QsMkNBS0ksQ0FBQSw0Q0FLTixVQS9DaUIsQ0FBQSx3QnRCOERKLENBQUEsb0JBQUEsQ0FBQSxlcUJyQmIsVUNsRFEsQ0FBQSx3QnRCdUVLLENBQUEsb0JBQUEsQ0FBQSxxQnNCdkRiLFVBYmMsQ0FBQSx3QkFGSyxDQUFBLG9CQUNKLENBQUEscURBb0JmLFVBbkJjLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLDRDQTZCWCxDQUFBLG9KQUlKLFVBN0JlLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLGtMQXlDZCw0Q0FLSSxDQUFBLGdEQUtOLFVBL0NpQixDQUFBLHdCdEI4REosQ0FBQSxvQkFBQSxDQUFBLGFxQnJCYixVQ2xEUSxDQUFBLHdCdEJ1RUssQ0FBQSxvQkFBQSxDQUFBLG1Cc0J2RGIsVUFiYyxDQUFBLHdCQUZLLENBQUEsb0JBQ0osQ0FBQSxpREFvQmYsVUFuQmMsQ0FBQSx3QkFGSyxDQUFBLG9CQUNKLENBQUEsMkNBNkJYLENBQUEsMElBSUosVUE3QmUsQ0FBQSx3QkFGSyxDQUFBLG9CQUNKLENBQUEsd0tBeUNkLDJDQUtJLENBQUEsNENBS04sVUEvQ2lCLENBQUEsd0J0QjhESixDQUFBLG9CQUFBLENBQUEsVXFCckJiLFVDbERRLENBQUEsd0J0QnVFSyxDQUFBLG9CQUFBLENBQUEsZ0JzQnZEYixVQWJjLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLDJDQW9CZixVQW5CYyxDQUFBLHdCQUZLLENBQUEsb0JBQ0osQ0FBQSwyQ0E2QlgsQ0FBQSwySEFJSixVQTdCZSxDQUFBLHdCQUZLLENBQUEsb0JBQ0osQ0FBQSx5SkF5Q2QsMkNBS0ksQ0FBQSxzQ0FLTixVQS9DaUIsQ0FBQSx3QnRCOERKLENBQUEsb0JBQUEsQ0FBQSxhcUJyQmIsVUNsRFEsQ0FBQSx3QnRCdUVLLENBQUEsb0JBQUEsQ0FBQSxtQnNCdkRiLFVBYmMsQ0FBQSx3QkFGSyxDQUFBLG9CQUNKLENBQUEsaURBb0JmLFVBbkJjLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLDBDQTZCWCxDQUFBLDBJQUlKLFVBN0JlLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLHdLQXlDZCwwQ0FLSSxDQUFBLDRDQUtOLFVBL0NpQixDQUFBLHdCdEI4REosQ0FBQSxvQkFBQSxDQUFBLFlxQnJCYixVQ2xEUSxDQUFBLHdCdEJ1RUssQ0FBQSxvQkFBQSxDQUFBLGtCc0J2RGIsVUFiYyxDQUFBLHdCQUZLLENBQUEsb0JBQ0osQ0FBQSwrQ0FvQmYsVUFuQmMsQ0FBQSx3QkFGSyxDQUFBLG9CQUNKLENBQUEsMENBNkJYLENBQUEscUlBSUosVUE3QmUsQ0FBQSx3QkFGSyxDQUFBLG9CQUNKLENBQUEsbUtBeUNkLDBDQUtJLENBQUEsMENBS04sVUEvQ2lCLENBQUEsd0J0QjhESixDQUFBLG9CQUFBLENBQUEsV3FCckJiLFVDbERRLENBQUEsd0J0QnVFSyxDQUFBLG9CQUFBLENBQUEsaUJzQnZEYixVQWJjLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLDZDQW9CZixVQW5CYyxDQUFBLHdCQUZLLENBQUEsb0JBQ0osQ0FBQSw0Q0E2QlgsQ0FBQSxnSUFJSixVQTdCZSxDQUFBLHdCQUZLLENBQUEsb0JBQ0osQ0FBQSw4SkF5Q2QsNENBS0ksQ0FBQSx3Q0FLTixVQS9DaUIsQ0FBQSx3QnRCOERKLENBQUEsb0JBQUEsQ0FBQSxVcUJyQmIsVUNsRFEsQ0FBQSx3QnRCdUVLLENBQUEsb0JBQUEsQ0FBQSxnQnNCdkRiLFVBYmMsQ0FBQSx3QkFGSyxDQUFBLG9CQUNKLENBQUEsMkNBb0JmLFVBbkJjLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLHlDQTZCWCxDQUFBLDJIQUlKLFVBN0JlLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLHlKQXlDZCx5Q0FLSSxDQUFBLHNDQUtOLFVBL0NpQixDQUFBLHdCdEI4REosQ0FBQSxvQkFBQSxDQUFBLHFCcUJmYixhckJlYSxDQUFBLG9CQUFBLENBQUEsMkJzQk9iLFVBUmMsQ0FBQSx3QnRCQ0QsQ0FBQSxvQkFBQSxDQUFBLGlFc0JhYiwyQ0FFRSxDQUFBLGlMQUdGLFVBaEJlLENBQUEsd0J0QkZGLENBQUEsb0JBQUEsQ0FBQSwrTXNCMkJYLDJDQUtJLENBQUEsNERBS04sYXRCckNhLENBQUEsOEJzQndDWCxDQUFBLHVCRHZERixhckJlYSxDQUFBLG9CQUFBLENBQUEsNkJzQk9iLFVBUmMsQ0FBQSx3QnRCQ0QsQ0FBQSxvQkFBQSxDQUFBLHFFc0JhYiw0Q0FFRSxDQUFBLDJMQUdGLFVBaEJlLENBQUEsd0J0QkZGLENBQUEsb0JBQUEsQ0FBQSx5TnNCMkJYLDRDQUtJLENBQUEsZ0VBS04sYXRCckNhLENBQUEsOEJzQndDWCxDQUFBLHFCRHZERixhckJlYSxDQUFBLG9CQUFBLENBQUEsMkJzQk9iLFVBUmMsQ0FBQSx3QnRCQ0QsQ0FBQSxvQkFBQSxDQUFBLGlFc0JhYiwwQ0FFRSxDQUFBLGlMQUdGLFVBaEJlLENBQUEsd0J0QkZGLENBQUEsb0JBQUEsQ0FBQSwrTXNCMkJYLDBDQUtJLENBQUEsNERBS04sYXRCckNhLENBQUEsOEJzQndDWCxDQUFBLGtCRHZERixhckJlYSxDQUFBLG9CQUFBLENBQUEsd0JzQk9iLFVBUmMsQ0FBQSx3QnRCQ0QsQ0FBQSxvQkFBQSxDQUFBLDJEc0JhYiwyQ0FFRSxDQUFBLGtLQUdGLFVBaEJlLENBQUEsd0J0QkZGLENBQUEsb0JBQUEsQ0FBQSxnTXNCMkJYLDJDQUtJLENBQUEsc0RBS04sYXRCckNhLENBQUEsOEJzQndDWCxDQUFBLHFCRHZERixhckJlYSxDQUFBLG9CQUFBLENBQUEsMkJzQk9iLFVBUmMsQ0FBQSx3QnRCQ0QsQ0FBQSxvQkFBQSxDQUFBLGlFc0JhYiwwQ0FFRSxDQUFBLGlMQUdGLFVBaEJlLENBQUEsd0J0QkZGLENBQUEsb0JBQUEsQ0FBQSwrTXNCMkJYLDBDQUtJLENBQUEsNERBS04sYXRCckNhLENBQUEsOEJzQndDWCxDQUFBLG9CRHZERixhckJlYSxDQUFBLG9CQUFBLENBQUEsMEJzQk9iLFVBUmMsQ0FBQSx3QnRCQ0QsQ0FBQSxvQkFBQSxDQUFBLCtEc0JhYiwwQ0FFRSxDQUFBLDRLQUdGLFVBaEJlLENBQUEsd0J0QkZGLENBQUEsb0JBQUEsQ0FBQSwwTXNCMkJYLDBDQUtJLENBQUEsMERBS04sYXRCckNhLENBQUEsOEJzQndDWCxDQUFBLG1CRHZERixhckJlYSxDQUFBLG9CQUFBLENBQUEseUJzQk9iLFVBUmMsQ0FBQSx3QnRCQ0QsQ0FBQSxvQkFBQSxDQUFBLDZEc0JhYiw0Q0FFRSxDQUFBLHVLQUdGLFVBaEJlLENBQUEsd0J0QkZGLENBQUEsb0JBQUEsQ0FBQSxxTXNCMkJYLDRDQUtJLENBQUEsd0RBS04sYXRCckNhLENBQUEsOEJzQndDWCxDQUFBLGtCRHZERixhckJlYSxDQUFBLG9CQUFBLENBQUEsd0JzQk9iLFVBUmMsQ0FBQSx3QnRCQ0QsQ0FBQSxvQkFBQSxDQUFBLDJEc0JhYix5Q0FFRSxDQUFBLGtLQUdGLFVBaEJlLENBQUEsd0J0QkZGLENBQUEsb0JBQUEsQ0FBQSxnTXNCMkJYLHlDQUtJLENBQUEsc0RBS04sYXRCckNhLENBQUEsOEJzQndDWCxDQUFBLFVEM0NKLGVyQmtnQjhCLENBQUEsYUF6aUJwQixDQUFBLHlCQXVaZ0MsQ0FBQSxnQnFCM1d4QyxhckI2V3dDLENBQUEsc0NxQnBXeEMsYXJCN0VTLENBQUEsMkJxQjBGWCxrQkN1QkUsQ0FBQSxpQnZCaUtRLENBQUEsbUJFN1FOLENBQUEsMkJvQnlGSixvQkNtQkUsQ0FBQSxrQnZCaUtRLENBQUEsbUJFN1FOLENBQUEsTXNCbkJKLDhCQUNFLENBQUEsdUNUbUJJLE1TcEJOLGVUcUJRLENBQUEsQ0FBQSxpQlNsQk4sU0FDRSxDQUFBLHFCQU1GLFlBQ0UsQ0FBQSxZQUlKLFFBQ0UsQ0FBQSxlQUNBLENBQUEsMkJBQ0EsQ0FBQSx1Q1RFSSxZU0xOLGVUTVEsQ0FBQSxDQUFBLGdDU0ROLE9BQ0UsQ0FBQSxXQUNBLENBQUEsMEJBQ0EsQ0FBQSx1Q1RIRSxnQ0FBQSxlQUNFLENBQUEsQ0FBQSxzQ1VwQlIsaUJBSUUsQ0FBQSxpQkFHRixrQkFDRSxDQUFBLHdCQ3FCRSxvQkFDRSxDQUFBLGtCekJzZ0J3QixDQUFBLHFCQURBLENBQUEsVXlCbGdCeEIsQ0FBQSxxQkFoQ0osQ0FBQSxxQ0FDQSxDQUFBLGVBQ0EsQ0FBQSxvQ0FDQSxDQUFBLDhCQXFERSxhQUNFLENBQUEsZUQzQ04saUJBQ0UsQ0FBQSxZeEIwaENrQyxDQUFBLFl3QnhoQ2xDLENBQUEsZXhCZ25Da0MsQ0FBQSxld0I5bUNsQyxDQUFBLFFBQ0EsQ0FBQSxjekIwUVEsQ0FBQSxhQy9RQyxDQUFBLGV3QlFULENBQUEsZUFDQSxDQUFBLHFCeEJsQlMsQ0FBQSwyQndCb0JULENBQUEsZ0NBQ0EsQ0FBQSxvQnZCVkUsQ0FBQSwrQnVCY0YsUUFDRSxDQUFBLE1BQ0EsQ0FBQSxrQnhCbW1DZ0MsQ0FBQSxxQndCdGxDaEMsb0JBQ0UsQ0FBQSxxQ0FFQSxVQUNFLENBQUEsTUFDQSxDQUFBLG1CQUlKLGtCQUNFLENBQUEsbUNBRUEsT0FDRSxDQUFBLFNBQ0EsQ0FBQSx5QmxCQ0osd0JrQmZBLG9CQUNFLENBQUEsd0NBRUEsVUFDRSxDQUFBLE1BQ0EsQ0FBQSxzQkFJSixrQkFDRSxDQUFBLHNDQUVBLE9BQ0UsQ0FBQSxTQUNBLENBQUEsQ0FBQSx5QmxCQ0osd0JrQmZBLG9CQUNFLENBQUEsd0NBRUEsVUFDRSxDQUFBLE1BQ0EsQ0FBQSxzQkFJSixrQkFDRSxDQUFBLHNDQUVBLE9BQ0UsQ0FBQSxTQUNBLENBQUEsQ0FBQSx5QmxCQ0osd0JrQmZBLG9CQUNFLENBQUEsd0NBRUEsVUFDRSxDQUFBLE1BQ0EsQ0FBQSxzQkFJSixrQkFDRSxDQUFBLHNDQUVBLE9BQ0UsQ0FBQSxTQUNBLENBQUEsQ0FBQSwwQmxCQ0osd0JrQmZBLG9CQUNFLENBQUEsd0NBRUEsVUFDRSxDQUFBLE1BQ0EsQ0FBQSxzQkFJSixrQkFDRSxDQUFBLHNDQUVBLE9BQ0UsQ0FBQSxTQUNBLENBQUEsQ0FBQSwwQmxCQ0oseUJrQmZBLG9CQUNFLENBQUEseUNBRUEsVUFDRSxDQUFBLE1BQ0EsQ0FBQSx1QkFJSixrQkFDRSxDQUFBLHVDQUVBLE9BQ0UsQ0FBQSxTQUNBLENBQUEsQ0FBQSx1Q0FVTixRQUNFLENBQUEsV0FDQSxDQUFBLFlBQ0EsQ0FBQSxxQnhCMmpDZ0MsQ0FBQSxnQ3lCeG1DaEMsb0JBQ0UsQ0FBQSxrQnpCc2dCd0IsQ0FBQSxxQkFEQSxDQUFBLFV5QmxnQnhCLENBQUEsWUF6QkosQ0FBQSxxQ0FDQSxDQUFBLHdCQUNBLENBQUEsb0NBQ0EsQ0FBQSxzQ0E4Q0UsYUFDRSxDQUFBLHdDRDBCSixLQUNFLENBQUEsVUFDQSxDQUFBLFNBQ0EsQ0FBQSxZQUNBLENBQUEsbUJ4QjZpQ2dDLENBQUEsaUN5QnhtQ2hDLG9CQUNFLENBQUEsa0J6QnNnQndCLENBQUEscUJBREEsQ0FBQSxVeUJsZ0J4QixDQUFBLG1DQWxCSixDQUFBLGNBQ0EsQ0FBQSxzQ0FDQSxDQUFBLHNCQUNBLENBQUEsdUNBdUNFLGFBQ0UsQ0FBQSxpQ0RvQ0YsZ0JBQ0UsQ0FBQSwwQ0FNSixLQUNFLENBQUEsVUFDQSxDQUFBLFNBQ0EsQ0FBQSxZQUNBLENBQUEsb0J4QjRoQ2dDLENBQUEsbUN5QnhtQ2hDLG9CQUNFLENBQUEsa0J6QnNnQndCLENBQUEscUJBREEsQ0FBQSxVeUJsZ0J4QixDQUFBLG1DQVdBLFlBQ0UsQ0FBQSxvQ0FHRixvQkFDRSxDQUFBLG1CekJtZnNCLENBQUEscUJBREEsQ0FBQSxVeUIvZXRCLENBQUEsbUNBOUJOLENBQUEsdUJBQ0EsQ0FBQSxzQ0FDQSxDQUFBLHlDQWlDRSxhQUNFLENBQUEsb0NEcURGLGdCQUNFLENBQUEsa0JBT04sUUFDRSxDQUFBLGNBQ0EsQ0FBQSxlQUNBLENBQUEsb0NBQ0EsQ0FBQSxlQU1GLGFBQ0UsQ0FBQSxVQUNBLENBQUEsbUJBQ0EsQ0FBQSxVQUNBLENBQUEsZXhCeWM0QixDQUFBLGFBOWpCbkIsQ0FBQSxrQndCd0hULENBQUEsb0JBQ0EsQ0FBQSxrQkFDQSxDQUFBLDhCQUNBLENBQUEsUUFDQSxDQUFBLDBDQWNBLGF4QncvQmtDLENBQUEsd0JBem9DekIsQ0FBQSw0Q3dCd0pULFV4QjFKUyxDQUFBLG9Cd0I2SlAsQ0FBQSx3QnhCL0hNLENBQUEsZ0R3Qm1JUixheEI1SlMsQ0FBQSxtQndCK0pQLENBQUEsOEJBQ0EsQ0FBQSxvQkFNSixhQUNFLENBQUEsaUJBSUYsYUFDRSxDQUFBLGtCeEJzK0JrQyxDQUFBLGV3QnArQmxDLENBQUEsa0J6QnFHUSxDQUFBLGFDbFJDLENBQUEsa0J3QmdMVCxDQUFBLG9CQUlGLGFBQ0UsQ0FBQSxtQkFDQSxDQUFBLGF4Qm5MUyxDQUFBLG9Cd0J3TFgsYXhCOUxXLENBQUEsd0JBS0EsQ0FBQSw0QkEwbkN5QixDQUFBLG1Dd0IzN0JsQyxheEJwTVMsQ0FBQSxrRndCdU1QLFV4QjFNTyxDQUFBLHNDQWtxQ3lCLENBQUEsb0Z3Qmw5QmhDLFV4QmhOTyxDQUFBLHdCQThCRCxDQUFBLHdGd0J3TE4sYXhCak5PLENBQUEsc0N3QnVOVCw0QnhCczZCa0MsQ0FBQSx3Q3dCbDZCbEMsYXhCN05TLENBQUEscUN3QmlPVCxheEIvTlMsQ0FBQSwrQjBCWlgsaUJBRUUsQ0FBQSxtQkFDQSxDQUFBLHFCQUNBLENBQUEseUNBRUEsaUJBQ0UsQ0FBQSxhQUNBLENBQUEsa1hBS0YsU0FNRSxDQUFBLGFBS0osWUFDRSxDQUFBLGNBQ0EsQ0FBQSwwQkFDQSxDQUFBLDBCQUVBLFVBQ0UsQ0FBQSwwRUFNRixnQkFFRSxDQUFBLG1HQUlGLHlCekJSRSxDQUFBLDRCQUNBLENBQUEsNkd5QmdCRix3QnpCSEUsQ0FBQSwyQkFDQSxDQUFBLHVCeUJxQkosc0JBQ0UsQ0FBQSxxQkFDQSxDQUFBLDJHQUVBLGFBR0UsQ0FBQSwwQ0FHRixjQUNFLENBQUEseUVBSUoscUJBQ0UsQ0FBQSxvQkFDQSxDQUFBLHlFQUdGLG9CQUNFLENBQUEsbUJBQ0EsQ0FBQSxvQkFvQkYscUJBQ0UsQ0FBQSxzQkFDQSxDQUFBLHNCQUNBLENBQUEsd0RBRUEsVUFFRSxDQUFBLDRGQUdGLGVBRUUsQ0FBQSxxSEFJRiw0QnpCdkZFLENBQUEsMkJBQ0EsQ0FBQSxvRnlCMkZGLHdCekIxR0UsQ0FBQSx5QkFDQSxDQUFBLEswQnhCSixZQUNFLENBQUEsY0FDQSxDQUFBLGNBQ0EsQ0FBQSxlQUNBLENBQUEsZUFDQSxDQUFBLFVBR0YsYUFDRSxDQUFBLGtCQUNBLENBQUEsYTNCdUJRLENBQUEsb0IyQm5CUixDQUFBLGlHQUNBLENBQUEsdUNBQUEsVUFQRixlYlFRLENBQUEsQ0FBQSxnQ2FDTixhM0J5YXdDLENBQUEsbUIyQmxheEMsYTNCZlMsQ0FBQSxtQjJCaUJQLENBQUEsY0FDQSxDQUFBLFVBUUosK0JBQ0UsQ0FBQSxvQkFFQSxrQkFDRSxDQUFBLGVBQ0EsQ0FBQSw4QkFDQSxDQUFBLDZCMUJsQkEsQ0FBQSw4QkFDQSxDQUFBLG9EMEJvQkEsb0MzQnFoQ2dDLENBQUEsaUIyQmpoQzlCLENBQUEsNkJBR0YsYTNCMUNPLENBQUEsOEIyQjRDTCxDQUFBLDBCQUNBLENBQUEsOERBSUosYTNCaERTLENBQUEscUJBUEEsQ0FBQSxpQ0Fpa0N5QixDQUFBLHlCMkJuZ0NsQyxlQUVFLENBQUEsd0IxQjVDQSxDQUFBLHlCQUNBLENBQUEscUIwQnVERixlQUNFLENBQUEsUUFDQSxDQUFBLG9CMUJuRUEsQ0FBQSx1RDBCdUVGLFUzQmxGUyxDQUFBLHdCQThCRCxDQUFBLHdDMkJpRVIsYUFFRSxDQUFBLGlCQUNBLENBQUEsa0RBS0YsWUFFRSxDQUFBLFdBQ0EsQ0FBQSxpQkFDQSxDQUFBLGlFQU1GLFVBQ0UsQ0FBQSx1QkFVRixZQUNFLENBQUEscUJBRUYsYUFDRSxDQUFBLFFDeEhKLGlCQUNFLENBQUEsWUFDQSxDQUFBLGNBQ0EsQ0FBQSxrQkFDQSxDQUFBLDZCQUNBLENBQUEsaUI1QitqQ2tDLENBQUEsb0JBQUEsQ0FBQSwySjRCcmpDbEMsWUFDRSxDQUFBLGlCQUNBLENBQUEsa0JBQ0EsQ0FBQSw2QkFDQSxDQUFBLGNBb0JKLG9CNUJzaUNvQyxDQUFBLHVCQUFBLENBQUEsaUJBQ0EsQ0FBQSxpQkQ5ekIxQixDQUFBLG9CNkJwT1IsQ0FBQSxrQkFDQSxDQUFBLFlBYUYsWUFDRSxDQUFBLHFCQUNBLENBQUEsY0FDQSxDQUFBLGVBQ0EsQ0FBQSxlQUNBLENBQUEsc0JBRUEsZUFDRSxDQUFBLGNBQ0EsQ0FBQSwyQkFHRixlQUNFLENBQUEsYUFTSixpQjVCMDlCb0MsQ0FBQSxvQkFBQSxDQUFBLGlCNEI1OEJwQyxlQUNFLENBQUEsV0FDQSxDQUFBLGtCQUdBLENBQUEsZ0JBSUYscUJBQ0UsQ0FBQSxpQjdCd0tRLENBQUEsYTZCdEtSLENBQUEsOEJBQ0EsQ0FBQSw4QkFDQSxDQUFBLG9CM0J6R0UsQ0FBQSxzQzJCMkdGLENBQUEsdUNkMUdJLGdCY21HTixlZGxHUSxDQUFBLENBQUEsc0JjMkdOLG9CQUNFLENBQUEsc0JBR0Ysb0JBQ0UsQ0FBQSxTQUNBLENBQUEsdUJBQ0EsQ0FBQSxxQkFNSixvQkFDRSxDQUFBLFdBQ0EsQ0FBQSxZQUNBLENBQUEscUJBQ0EsQ0FBQSwyQkFDQSxDQUFBLDBCQUNBLENBQUEsb0JBQ0EsQ0FBQSxtQkFHRix3Q0FDRSxDQUFBLGVBQ0EsQ0FBQSx5QnRCMUZFLGtCc0JzR0EsZ0JBRUksQ0FBQSwwQkFDQSxDQUFBLDhCQUVBLGtCQUNFLENBQUEsNkNBRUEsaUJBQ0UsQ0FBQSx3Q0FHRixtQjVCczZCMEIsQ0FBQSxrQkFBQSxDQUFBLHFDNEJoNkI1QixnQkFDRSxDQUFBLG1DQUdGLHVCQUNFLENBQUEsZUFDQSxDQUFBLGtDQUdGLFlBQ0UsQ0FBQSxvQ0FHRixZQUNFLENBQUEsNkJBR0YsZ0JBQ0UsQ0FBQSxRQUNBLENBQUEsWUFDQSxDQUFBLFdBQ0EsQ0FBQSw2QkFDQSxDQUFBLDhCQUNBLENBQUEsY0FDQSxDQUFBLGFBQ0EsQ0FBQSxlQUNBLENBQUEsY0FDQSxDQUFBLHFFQUVGLFdBRUUsQ0FBQSxZQUNBLENBQUEsZUFDQSxDQUFBLGtDQUdGLFlBQ0UsQ0FBQSxXQUNBLENBQUEsU0FDQSxDQUFBLGtCQUNBLENBQUEsQ0FBQSx5QnRCaEtOLGtCc0JzR0EsZ0JBRUksQ0FBQSwwQkFDQSxDQUFBLDhCQUVBLGtCQUNFLENBQUEsNkNBRUEsaUJBQ0UsQ0FBQSx3Q0FHRixtQjVCczZCMEIsQ0FBQSxrQkFBQSxDQUFBLHFDNEJoNkI1QixnQkFDRSxDQUFBLG1DQUdGLHVCQUNFLENBQUEsZUFDQSxDQUFBLGtDQUdGLFlBQ0UsQ0FBQSxvQ0FHRixZQUNFLENBQUEsNkJBR0YsZ0JBQ0UsQ0FBQSxRQUNBLENBQUEsWUFDQSxDQUFBLFdBQ0EsQ0FBQSw2QkFDQSxDQUFBLDhCQUNBLENBQUEsY0FDQSxDQUFBLGFBQ0EsQ0FBQSxlQUNBLENBQUEsY0FDQSxDQUFBLHFFQUVGLFdBRUUsQ0FBQSxZQUNBLENBQUEsZUFDQSxDQUFBLGtDQUdGLFlBQ0UsQ0FBQSxXQUNBLENBQUEsU0FDQSxDQUFBLGtCQUNBLENBQUEsQ0FBQSx5QnRCaEtOLGtCc0JzR0EsZ0JBRUksQ0FBQSwwQkFDQSxDQUFBLDhCQUVBLGtCQUNFLENBQUEsNkNBRUEsaUJBQ0UsQ0FBQSx3Q0FHRixtQjVCczZCMEIsQ0FBQSxrQkFBQSxDQUFBLHFDNEJoNkI1QixnQkFDRSxDQUFBLG1DQUdGLHVCQUNFLENBQUEsZUFDQSxDQUFBLGtDQUdGLFlBQ0UsQ0FBQSxvQ0FHRixZQUNFLENBQUEsNkJBR0YsZ0JBQ0UsQ0FBQSxRQUNBLENBQUEsWUFDQSxDQUFBLFdBQ0EsQ0FBQSw2QkFDQSxDQUFBLDhCQUNBLENBQUEsY0FDQSxDQUFBLGFBQ0EsQ0FBQSxlQUNBLENBQUEsY0FDQSxDQUFBLHFFQUVGLFdBRUUsQ0FBQSxZQUNBLENBQUEsZUFDQSxDQUFBLGtDQUdGLFlBQ0UsQ0FBQSxXQUNBLENBQUEsU0FDQSxDQUFBLGtCQUNBLENBQUEsQ0FBQSwwQnRCaEtOLGtCc0JzR0EsZ0JBRUksQ0FBQSwwQkFDQSxDQUFBLDhCQUVBLGtCQUNFLENBQUEsNkNBRUEsaUJBQ0UsQ0FBQSx3Q0FHRixtQjVCczZCMEIsQ0FBQSxrQkFBQSxDQUFBLHFDNEJoNkI1QixnQkFDRSxDQUFBLG1DQUdGLHVCQUNFLENBQUEsZUFDQSxDQUFBLGtDQUdGLFlBQ0UsQ0FBQSxvQ0FHRixZQUNFLENBQUEsNkJBR0YsZ0JBQ0UsQ0FBQSxRQUNBLENBQUEsWUFDQSxDQUFBLFdBQ0EsQ0FBQSw2QkFDQSxDQUFBLDhCQUNBLENBQUEsY0FDQSxDQUFBLGFBQ0EsQ0FBQSxlQUNBLENBQUEsY0FDQSxDQUFBLHFFQUVGLFdBRUUsQ0FBQSxZQUNBLENBQUEsZUFDQSxDQUFBLGtDQUdGLFlBQ0UsQ0FBQSxXQUNBLENBQUEsU0FDQSxDQUFBLGtCQUNBLENBQUEsQ0FBQSwwQnRCaEtOLG1Cc0JzR0EsZ0JBRUksQ0FBQSwwQkFDQSxDQUFBLCtCQUVBLGtCQUNFLENBQUEsOENBRUEsaUJBQ0UsQ0FBQSx5Q0FHRixtQjVCczZCMEIsQ0FBQSxrQkFBQSxDQUFBLHNDNEJoNkI1QixnQkFDRSxDQUFBLG9DQUdGLHVCQUNFLENBQUEsZUFDQSxDQUFBLG1DQUdGLFlBQ0UsQ0FBQSxxQ0FHRixZQUNFLENBQUEsOEJBR0YsZ0JBQ0UsQ0FBQSxRQUNBLENBQUEsWUFDQSxDQUFBLFdBQ0EsQ0FBQSw2QkFDQSxDQUFBLDhCQUNBLENBQUEsY0FDQSxDQUFBLGFBQ0EsQ0FBQSxlQUNBLENBQUEsY0FDQSxDQUFBLHVFQUVGLFdBRUUsQ0FBQSxZQUNBLENBQUEsZUFDQSxDQUFBLG1DQUdGLFlBQ0UsQ0FBQSxXQUNBLENBQUEsU0FDQSxDQUFBLGtCQUNBLENBQUEsQ0FBQSxlQTFETixnQkFFSSxDQUFBLDBCQUNBLENBQUEsMkJBRUEsa0JBQ0UsQ0FBQSwwQ0FFQSxpQkFDRSxDQUFBLHFDQUdGLG1CNUJzNkIwQixDQUFBLGtCQUFBLENBQUEsa0M0Qmg2QjVCLGdCQUNFLENBQUEsZ0NBR0YsdUJBQ0UsQ0FBQSxlQUNBLENBQUEsK0JBR0YsWUFDRSxDQUFBLGlDQUdGLFlBQ0UsQ0FBQSwwQkFHRixnQkFDRSxDQUFBLFFBQ0EsQ0FBQSxZQUNBLENBQUEsV0FDQSxDQUFBLDZCQUNBLENBQUEsOEJBQ0EsQ0FBQSxjQUNBLENBQUEsYUFDQSxDQUFBLGVBQ0EsQ0FBQSxjQUNBLENBQUEsK0RBRUYsV0FFRSxDQUFBLFlBQ0EsQ0FBQSxlQUNBLENBQUEsK0JBR0YsWUFDRSxDQUFBLFdBQ0EsQ0FBQSxTQUNBLENBQUEsa0JBQ0EsQ0FBQSw0QkFjUixvQjVCcTRCa0MsQ0FBQSxvRTRCbDRCaEMsb0I1Qms0QmdDLENBQUEsb0M0QjMzQmhDLHFCNUJ5M0JnQyxDQUFBLG9GNEJ0M0I5QixvQjVCdTNCOEIsQ0FBQSw2QzRCbDNCOUIsb0I1Qm8zQjhCLENBQUEscUY0Qi8yQmhDLG9CNUI4MkJnQyxDQUFBLDhCNEJ4MkJsQyxxQjVCczJCa0MsQ0FBQSwyQkFLQSxDQUFBLG1DNEJ0MkJsQyw0UEFDRSxDQUFBLDJCQUdGLHFCNUI2MUJrQyxDQUFBLG1HNEIxMUJoQyxvQjVCNDFCZ0MsQ0FBQSwyQjRCbDFCbEMsVTVCeFJTLENBQUEsa0U0QjJSUCxVNUIzUk8sQ0FBQSxtQzRCa1NQLDJCNUIrekJnQyxDQUFBLGtGNEI1ekI5QiwyQjVCNnpCOEIsQ0FBQSw0QzRCeHpCOUIsMkI1QjB6QjhCLENBQUEsbUY0QnJ6QmhDLFU1Qi9TTyxDQUFBLDZCNEJxVFQsMkI1QjR5QmtDLENBQUEsaUNBS0EsQ0FBQSxrQzRCNXlCbEMsa1FBQ0UsQ0FBQSwwQkFHRiwyQjVCbXlCa0MsQ0FBQSxnRzRCanlCaEMsVTVCaFVPLENBQUEsTTZCSlgsaUJBQ0UsQ0FBQSxZQUNBLENBQUEscUJBQ0EsQ0FBQSxXQUNBLENBQUEsb0JBRUEsQ0FBQSxxQjdCRlMsQ0FBQSwwQjZCSVQsQ0FBQSxpQ0FDQSxDQUFBLG9CNUJNRSxDQUFBLFM0QkZGLGNBQ0UsQ0FBQSxhQUNBLENBQUEsa0JBR0Ysa0JBQ0UsQ0FBQSxxQkFDQSxDQUFBLDhCQUVBLGtCQUNFLENBQUEsMEM1QkNGLENBQUEsMkNBQ0EsQ0FBQSw2QjRCRUEscUJBQ0UsQ0FBQSw4QzVCVUYsQ0FBQSw2Q0FDQSxDQUFBLDhENEJKRixZQUVFLENBQUEsV0FJSixhQUdFLENBQUEsaUJBQ0EsQ0FBQSxZQUlGLG1CN0JrckNvQyxDQUFBLGU2QjlxQ3BDLG1CQUNFLENBQUEsZUFDQSxDQUFBLHNCQUdGLGVBQ0UsQ0FBQSxzQkFRQSxnQjdCK1NPLENBQUEsYTZCdFNULGtCQUNFLENBQUEsZUFDQSxDQUFBLGdDN0I2cENrQyxDQUFBLHdDNkIxcENsQyxDQUFBLHlCQUVBLHlENUJwRUUsQ0FBQSxhNEJ5RUosa0JBQ0UsQ0FBQSxnQzdCa3BDa0MsQ0FBQSxxQzZCL29DbEMsQ0FBQSx3QkFFQSx5RDVCL0VFLENBQUEsa0I0QnlGSixvQkFDRSxDQUFBLHFCQUNBLENBQUEsbUJBQ0EsQ0FBQSxlQUNBLENBQUEsbUJBVUYsb0JBQ0UsQ0FBQSxtQkFDQSxDQUFBLGtCQUlGLGlCQUNFLENBQUEsS0FDQSxDQUFBLE9BQ0EsQ0FBQSxRQUNBLENBQUEsTUFDQSxDQUFBLFk3QmlQTyxDQUFBLGlDQ25XTCxDQUFBLHlDNEJ1SEosVUFHRSxDQUFBLHdCQUdGLDBDNUJwSEksQ0FBQSwyQ0FDQSxDQUFBLDJCNEJ3SEosOEM1QjNHSSxDQUFBLDZDQUNBLENBQUEsa0I0QnVIRixvQjdCbWxDa0MsQ0FBQSx5Qk10ckNoQyxZdUJnR0osWUFRSSxDQUFBLGtCQUNBLENBQUEsa0JBR0EsV0FFRSxDQUFBLGVBQ0EsQ0FBQSx3QkFFQSxhQUNFLENBQUEsYUFDQSxDQUFBLG1DQUtBLHlCNUJwSkosQ0FBQSw0QkFDQSxDQUFBLGlHNEJzSk0seUJBR0UsQ0FBQSxvR0FFRiw0QkFHRSxDQUFBLG9DQUlKLHdCNUJySkosQ0FBQSwyQkFDQSxDQUFBLG1HNEJ1Sk0sd0JBR0UsQ0FBQSxzR0FFRiwyQkFHRSxDQUFBLENBQUEsa0JDN01aLGlCQUNFLENBQUEsWUFDQSxDQUFBLGtCQUNBLENBQUEsVUFDQSxDQUFBLG9CQUNBLENBQUEsYy9CdVJRLENBQUEsYUMvUUMsQ0FBQSxlOEJMVCxDQUFBLHFCOUJKUyxDQUFBLFE4Qk1ULENBQUEsZTdCS0UsQ0FBQSxvQjZCSEYsQ0FBQSxxSkFDQSxDQUFBLHVDaEJHSSxrQmdCaEJOLGVoQmlCUSxDQUFBLENBQUEsa0NnQkZOLGE5QjB2Q3dDLENBQUEsd0JBREEsQ0FBQSwwQzhCdHZDdEMsQ0FBQSx5Q0FFQSxnU0FDRSxDQUFBLHlCOUI2dkNvQyxDQUFBLHlCOEJ2dkN4QyxhQUNFLENBQUEsYTlCa3ZDc0MsQ0FBQSxjQUFBLENBQUEsZ0I4Qi91Q3RDLENBQUEsVUFDQSxDQUFBLGdTQUNBLENBQUEsMkJBQ0EsQ0FBQSx1QjlCNHVDc0MsQ0FBQSxvQzhCMXVDdEMsQ0FBQSx1Q2hCcEJFLHlCZ0JXSixlaEJWTSxDQUFBLENBQUEsd0JnQnNCTixTQUNFLENBQUEsd0JBR0YsU0FDRSxDQUFBLG9COUJrekJvQyxDQUFBLFM4Qmh6QnBDLENBQUEsNEM5QityQjRCLENBQUEsa0I4QjFyQmhDLGVBQ0UsQ0FBQSxnQkFHRixxQjlCbkRXLENBQUEsaUM4QnFEVCxDQUFBLDhCQUVBLDZCN0JuQ0UsQ0FBQSw4QkFDQSxDQUFBLGdENkJxQ0EsMEM3QnRDQSxDQUFBLDJDQUNBLENBQUEsb0M2QjBDRixZQUNFLENBQUEsNkJBSUYsaUM3QmxDRSxDQUFBLGdDQUNBLENBQUEseUQ2QnFDRSw4QzdCdENGLENBQUEsNkNBQ0EsQ0FBQSxpRDZCMENBLGlDN0IzQ0EsQ0FBQSxnQ0FDQSxDQUFBLGdCNkJnREosb0JBQ0UsQ0FBQSxxQ0FTQSxjQUNFLENBQUEsaUNBR0YsY0FDRSxDQUFBLGFBQ0EsQ0FBQSxlN0J4RkEsQ0FBQSw2QzZCMkZBLFlBQUEsQ0FBQSw0Q0FDQSxlQUFBLENBQUEsbURBRUEsZTdCOUZBLENBQUEsWThCbkJKLFlBQ0UsQ0FBQSxjQUNBLENBQUEsV0FDQSxDQUFBLGtCL0J5L0NrQyxDQUFBLGUrQnQvQ2xDLENBQUEsa0NBT0Esa0IvQjgrQ2tDLENBQUEsMEMrQjMrQ2hDLFVBQ0UsQ0FBQSxtQi9CMCtDOEIsQ0FBQSxhQTcrQ3pCLENBQUEsd0MrQk1MLEVBQUEsMkNBQUEsQ0FBQSxDQUFBLHdCQUlKLGEvQlZTLENBQUEsWWdDZFgsWUFDRSxDQUFBLGM3QkdBLENBQUEsZUFDQSxDQUFBLFdBQUEsaUI2QkNBLENBQUEsYUFDQSxDQUFBLGFoQytCUSxDQUFBLG9CZ0M3QlIsQ0FBQSxxQmhDRFMsQ0FBQSx3QmdDR1QsQ0FBQSw2SEFDQSxDQUFBLHVDbEJRSSxXa0JmTixlbEJnQlEsQ0FBQSxDQUFBLGlCa0JQTixTQUNFLENBQUEsYWhDZ2JzQyxDQUFBLHdCQXJiL0IsQ0FBQSxvQkFDQSxDQUFBLGlCZ0NXVCxTQUNFLENBQUEsYWhDd2FzQyxDQUFBLHdCQXJiL0IsQ0FBQSxTQTRyQ3lCLENBQUEsNENBcmRKLENBQUEsd0NnQ2p0QjlCLGdCaENncUNrQyxDQUFBLDZCZ0M1cENsQyxTQUNFLENBQUEsVWhDN0JPLENBQUEsd0JBOEJELENBQUEsb0JBQUEsQ0FBQSwrQmdDS1IsYWhDN0JTLENBQUEsbUJnQytCUCxDQUFBLHFCaENyQ08sQ0FBQSxvQkFHQSxDQUFBLFdpQ1BULHNCQUNFLENBQUEsa0NBT0ksNkJoQ3FDSixDQUFBLGdDQUNBLENBQUEsaUNnQ2hDSSw4QmhDaUJKLENBQUEsaUNBQ0EsQ0FBQSwwQmdDaENGLHFCQUNFLENBQUEsaUJsQzJSTSxDQUFBLGlEa0NwUkYsNEJoQ3FDSixDQUFBLCtCQUNBLENBQUEsZ0RnQ2hDSSw2QmhDaUJKLENBQUEsZ0NBQ0EsQ0FBQSwwQmdDaENGLG9CQUNFLENBQUEsa0JsQzJSTSxDQUFBLGlEa0NwUkYsNEJoQ3FDSixDQUFBLCtCQUNBLENBQUEsZ0RnQ2hDSSw2QmhDaUJKLENBQUEsZ0NBQ0EsQ0FBQSxPaUMvQkosb0JBQ0UsQ0FBQSxtQkFDQSxDQUFBLGdCbkN5UlEsQ0FBQSxlQ2dUb0IsQ0FBQSxha0N0a0I1QixDQUFBLFVsQ0ZTLENBQUEsaUJrQ0lULENBQUEsa0JBQ0EsQ0FBQSx1QkFDQSxDQUFBLG9CakNLRSxDQUFBLGFBQUEsWWlDQ0EsQ0FBQSxZQUtKLGlCQUNFLENBQUEsUUFDQSxDQUFBLE9DdkJGLGlCQUNFLENBQUEsaUJBQ0EsQ0FBQSxrQm5DbTZDOEIsQ0FBQSw4Qm1DajZDOUIsQ0FBQSxvQmxDV0UsQ0FBQSxla0NOSixhQUVFLENBQUEsWUFJRixlbkM2akI4QixDQUFBLG1CbUNwakI5QixrQm5DbzVDZ0MsQ0FBQSw4Qm1DaDVDOUIsaUJBQ0UsQ0FBQSxLQUNBLENBQUEsT0FDQSxDQUFBLFNBQ0EsQ0FBQSxvQkFDQSxDQUFBLGVBZUYsYUFKYyxDQUFBLHdCQUZLLENBQUEsb0JBQ0osQ0FBQSwyQkN6Q2YsYUFDRSxDQUFBLGlCRDZDRixhQUpjLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLDZCQ3pDZixhQUNFLENBQUEsZUQ2Q0YsYUFKYyxDQUFBLHdCQUZLLENBQUEsb0JBQ0osQ0FBQSwyQkN6Q2YsYUFDRSxDQUFBLFlENkNGLGFBRmdCLENBQUEsd0JBSkcsQ0FBQSxvQkFDSixDQUFBLHdCQ3pDZixhQUNFLENBQUEsZUQ2Q0YsYUFGZ0IsQ0FBQSx3QkFKRyxDQUFBLG9CQUNKLENBQUEsMkJDekNmLGFBQ0UsQ0FBQSxjRDZDRixhQUpjLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLDBCQ3pDZixhQUNFLENBQUEsYUQ2Q0YsYUFGZ0IsQ0FBQSx3QkFKRyxDQUFBLG9CQUNKLENBQUEseUJDekNmLGFBQ0UsQ0FBQSxZRDZDRixhQUpjLENBQUEsd0JBRkssQ0FBQSxvQkFDSixDQUFBLHdCQ3pDZixhQUNFLENBQUEsWUNISixZQUNFLENBQUEscUJBQ0EsQ0FBQSxjQUdBLENBQUEsZUFDQSxDQUFBLG9CcENTRSxDQUFBLHFCb0NMSixvQkFDRSxDQUFBLHFCQUNBLENBQUEsZ0NBRUEsbUNBRUUsQ0FBQSx5QkFDQSxDQUFBLHdCQVVKLFVBQ0UsQ0FBQSxhckNqQlMsQ0FBQSxrQnFDbUJULENBQUEsNERBR0EsU0FFRSxDQUFBLGFyQ3hCTyxDQUFBLG9CcUMwQlAsQ0FBQSx3QnJDaENPLENBQUEsK0JxQ29DVCxhckM1QlMsQ0FBQSx3QkFQQSxDQUFBLGlCcUM4Q1gsaUJBQ0UsQ0FBQSxhQUNBLENBQUEsa0JBQ0EsQ0FBQSxhckMxQ1MsQ0FBQSxvQnFDNENULENBQUEscUJyQ3JEUyxDQUFBLGlDcUN1RFQsQ0FBQSw2QkFFQSw4QnBDckNFLENBQUEsK0JBQ0EsQ0FBQSw0Qm9Dd0NGLGtDcEMzQkUsQ0FBQSxpQ0FDQSxDQUFBLG9Eb0M4QkYsYXJDM0RTLENBQUEsbUJxQzhEUCxDQUFBLHFCckNwRU8sQ0FBQSx3QnFDeUVULFNBQ0UsQ0FBQSxVckMxRU8sQ0FBQSx3QkE4QkQsQ0FBQSxvQkFBQSxDQUFBLGtDcUNrRFIsa0JBQ0UsQ0FBQSx5Q0FFQSxlQUNFLENBQUEsb0JyQ3lhd0IsQ0FBQSx1QnFDMVoxQixrQkFDRSxDQUFBLG9EQUdFLGdDcENyQ0osQ0FBQSx5QkFaQSxDQUFBLG1Eb0NzREksOEJwQ3RESixDQUFBLDJCQVlBLENBQUEsK0NvQytDSSxZQUNFLENBQUEseURBR0Ysb0JyQ3dZc0IsQ0FBQSxtQnFDdFlwQixDQUFBLGdFQUVBLGdCQUNFLENBQUEscUJyQ21Za0IsQ0FBQSx5Qk10YzFCLDBCK0I0Q0Esa0JBQ0UsQ0FBQSx1REFHRSxnQ3BDckNKLENBQUEseUJBWkEsQ0FBQSxzRG9Dc0RJLDhCcEN0REosQ0FBQSwyQkFZQSxDQUFBLGtEb0MrQ0ksWUFDRSxDQUFBLDREQUdGLG9CckN3WXNCLENBQUEsbUJxQ3RZcEIsQ0FBQSxtRUFFQSxnQkFDRSxDQUFBLHFCckNtWWtCLENBQUEsQ0FBQSx5Qk10YzFCLDBCK0I0Q0Esa0JBQ0UsQ0FBQSx1REFHRSxnQ3BDckNKLENBQUEseUJBWkEsQ0FBQSxzRG9Dc0RJLDhCcEN0REosQ0FBQSwyQkFZQSxDQUFBLGtEb0MrQ0ksWUFDRSxDQUFBLDREQUdGLG9CckN3WXNCLENBQUEsbUJxQ3RZcEIsQ0FBQSxtRUFFQSxnQkFDRSxDQUFBLHFCckNtWWtCLENBQUEsQ0FBQSx5Qk10YzFCLDBCK0I0Q0Esa0JBQ0UsQ0FBQSx1REFHRSxnQ3BDckNKLENBQUEseUJBWkEsQ0FBQSxzRG9Dc0RJLDhCcEN0REosQ0FBQSwyQkFZQSxDQUFBLGtEb0MrQ0ksWUFDRSxDQUFBLDREQUdGLG9CckN3WXNCLENBQUEsbUJxQ3RZcEIsQ0FBQSxtRUFFQSxnQkFDRSxDQUFBLHFCckNtWWtCLENBQUEsQ0FBQSwwQk10YzFCLDBCK0I0Q0Esa0JBQ0UsQ0FBQSx1REFHRSxnQ3BDckNKLENBQUEseUJBWkEsQ0FBQSxzRG9Dc0RJLDhCcEN0REosQ0FBQSwyQkFZQSxDQUFBLGtEb0MrQ0ksWUFDRSxDQUFBLDREQUdGLG9CckN3WXNCLENBQUEsbUJxQ3RZcEIsQ0FBQSxtRUFFQSxnQkFDRSxDQUFBLHFCckNtWWtCLENBQUEsQ0FBQSwwQk10YzFCLDJCK0I0Q0Esa0JBQ0UsQ0FBQSx3REFHRSxnQ3BDckNKLENBQUEseUJBWkEsQ0FBQSx1RG9Dc0RJLDhCcEN0REosQ0FBQSwyQkFZQSxDQUFBLG1Eb0MrQ0ksWUFDRSxDQUFBLDZEQUdGLG9CckN3WXNCLENBQUEsbUJxQ3RZcEIsQ0FBQSxvRUFFQSxnQkFDRSxDQUFBLHFCckNtWWtCLENBQUEsQ0FBQSxrQnFDcFg5QixlcEM5SEksQ0FBQSxtQ29DaUlGLG9CQUNFLENBQUEsOENBRUEscUJBQ0UsQ0FBQSx5QkNwSkosYURrSzJCLENBQUEsd0JBREgsQ0FBQSw0R0M1SnBCLGFENkp1QixDQUFBLHdCQzFKckIsQ0FBQSx1REFHRixVdENQSyxDQUFBLHdCcUM4SmtCLENBQUEsb0JBQUEsQ0FBQSwyQkNsSzNCLGFEa0syQixDQUFBLHdCQURILENBQUEsZ0hDNUpwQixhRDZKdUIsQ0FBQSx3QkMxSnJCLENBQUEseURBR0YsVXRDUEssQ0FBQSx3QnFDOEprQixDQUFBLG9CQUFBLENBQUEseUJDbEszQixhRGtLMkIsQ0FBQSx3QkFESCxDQUFBLDRHQzVKcEIsYUQ2SnVCLENBQUEsd0JDMUpyQixDQUFBLHVEQUdGLFV0Q1BLLENBQUEsd0JxQzhKa0IsQ0FBQSxvQkFBQSxDQUFBLHNCQ2xLM0IsYURvSzZCLENBQUEsd0JBSEwsQ0FBQSxzR0M1SnBCLGFEK0p5QixDQUFBLHdCQzVKdkIsQ0FBQSxvREFHRixVdENQSyxDQUFBLHdCcUNnS29CLENBQUEsb0JBQUEsQ0FBQSx5QkNwSzdCLGFEb0s2QixDQUFBLHdCQUhMLENBQUEsNEdDNUpwQixhRCtKeUIsQ0FBQSx3QkM1SnZCLENBQUEsdURBR0YsVXRDUEssQ0FBQSx3QnFDZ0tvQixDQUFBLG9CQUFBLENBQUEsd0JDcEs3QixhRGtLMkIsQ0FBQSx3QkFESCxDQUFBLDBHQzVKcEIsYUQ2SnVCLENBQUEsd0JDMUpyQixDQUFBLHNEQUdGLFV0Q1BLLENBQUEsd0JxQzhKa0IsQ0FBQSxvQkFBQSxDQUFBLHVCQ2xLM0IsYURvSzZCLENBQUEsd0JBSEwsQ0FBQSx3R0M1SnBCLGFEK0p5QixDQUFBLHdCQzVKdkIsQ0FBQSxxREFHRixVdENQSyxDQUFBLHdCcUNnS29CLENBQUEsb0JBQUEsQ0FBQSxzQkNwSzdCLGFEa0syQixDQUFBLHdCQURILENBQUEsc0dDNUpwQixhRDZKdUIsQ0FBQSx3QkMxSnJCLENBQUEsb0RBR0YsVXRDUEssQ0FBQSx3QnFDOEprQixDQUFBLG9CQUFBLENBQUEsV0VqSzdCLHNCQUNFLENBQUEsU3ZDc2pEMkIsQ0FBQSxVQUFBLENBQUEsbUJ1Q25qRDNCLENBQUEsVXZDU1MsQ0FBQSw0V3VDUFQsQ0FBQSxRQUNBLENBQUEsb0J0Q09FLENBQUEsVURnakR5QixDQUFBLGlCdUNsakQzQixVQUNFLENBQUEsb0JBQ0EsQ0FBQSxXdkNpakR5QixDQUFBLGlCdUM3aUQzQixTQUNFLENBQUEsNEN2Q3l0QjRCLENBQUEsU0FvMUJILENBQUEsd0N1Q3hpRDNCLG1CQUVFLENBQUEsd0JBQ0EsQ0FEQSxxQkFDQSxDQURBLGdCQUNBLENBQUEsV3ZDc2lEeUIsQ0FBQSxpQnVDamlEN0IsaUR2Q2tpRDZCLENBQUEsT3dDaGtEN0IsY0FDRSxDQUFBLEtBQ0EsQ0FBQSxNQUNBLENBQUEsWXhDdWlDa0MsQ0FBQSxZd0NyaUNsQyxDQUFBLFVBQ0EsQ0FBQSxXQUNBLENBQUEsaUJBQ0EsQ0FBQSxlQUNBLENBQUEsU0FHQSxDQUFBLGNBT0YsaUJBQ0UsQ0FBQSxVQUNBLENBQUEsWXhDazJDa0MsQ0FBQSxtQndDLzFDbEMsQ0FBQSwwQkFHQSxpQ0FDRSxDQUFBLDZCeEN3M0NnQyxDQUFBLHVDY3Y0QzlCLDBCMEJjSixlMUJiTSxDQUFBLENBQUEsMEIwQmlCTixjeENzM0NrQyxDQUFBLGtDd0NqM0NsQyxxQnhDbTNDa0MsQ0FBQSx5QndDOTJDcEMsd0JBQ0UsQ0FBQSx3Q0FFQSxlQUNFLENBQUEsZUFDQSxDQUFBLHFDQUdGLGVBQ0UsQ0FBQSx1QkFJSixZQUNFLENBQUEsa0JBQ0EsQ0FBQSw0QkFDQSxDQUFBLGVBSUYsaUJBQ0UsQ0FBQSxZQUNBLENBQUEscUJBQ0EsQ0FBQSxVQUNBLENBQUEsbUJBR0EsQ0FBQSxxQnhDbkVTLENBQUEsMkJ3Q3FFVCxDQUFBLCtCQUNBLENBQUEsbUJ2QzNERSxDQUFBLFN1QytERixDQUFBLGdCQUlGLGNDcEZFLENBQUEsS0FDQSxDQUFBLE1BQ0EsQ0FBQSxZekM0aUNrQyxDQUFBLFd5QzFpQ2xDLENBQUEsWUFDQSxDQUFBLHFCekNXUyxDQUFBLHFCeUNQVCxTQUFBLENBQUEscUJBQ0EsVXpDaTRDa0MsQ0FBQSxjd0NqekNwQyxZQUNFLENBQUEsYUFDQSxDQUFBLGtCQUNBLENBQUEsNkJBQ0EsQ0FBQSxpQnhDb3pDa0MsQ0FBQSwrQndDbHpDbEMsQ0FBQSx5Q3ZDdEVFLENBQUEsMENBQ0EsQ0FBQSx5QnVDd0VGLG1CQUNFLENBQUEsbUNBQ0EsQ0FBQSxhQUtKLGVBQ0UsQ0FBQSxleEN3ZTRCLENBQUEsWXdDbGU5QixpQkFDRSxDQUFBLGFBR0EsQ0FBQSxZeEMrUE8sQ0FBQSxjd0MxUFQsWUFDRSxDQUFBLGNBQ0EsQ0FBQSxhQUNBLENBQUEsa0JBQ0EsQ0FBQSx3QkFDQSxDQUFBLGNBQ0EsQ0FBQSw0QkFDQSxDQUFBLDZDdkN6RkUsQ0FBQSw0Q0FDQSxDQUFBLGdCdUM4RkYsYUFDRSxDQUFBLHlCbEMzRUEsY2tDa0ZGLGV4Q3N3Q2tDLENBQUEsbUJ3Q3B3Q2hDLENBQUEseUJBR0YsMEJBQ0UsQ0FBQSx1QkFHRiw4QkFDRSxDQUFBLFVBT0YsZXhDb3ZDa0MsQ0FBQSxDQUFBLHlCTXYxQ2hDLG9Ca0N1R0YsZXhDa3ZDa0MsQ0FBQSxDQUFBLDBCTXoxQ2hDLFVrQzhHRixnQnhDNHVDa0MsQ0FBQSxDQUFBLGtCd0NudUNoQyxXQUNFLENBQUEsY0FDQSxDQUFBLFdBQ0EsQ0FBQSxRQUNBLENBQUEsaUNBRUEsV0FDRSxDQUFBLFFBQ0EsQ0FBQSxldkMzS0osQ0FBQSxnQ3VDK0tFLGV2Qy9LRixDQUFBLDhCdUNtTEUsZUFDRSxDQUFBLGdDQUdGLGV2Q3ZMRixDQUFBLDRCS3lEQSwwQmtDMEdBLFdBQ0UsQ0FBQSxjQUNBLENBQUEsV0FDQSxDQUFBLFFBQ0EsQ0FBQSx5Q0FFQSxXQUNFLENBQUEsUUFDQSxDQUFBLGV2QzNLSixDQUFBLHdDdUMrS0UsZXZDL0tGLENBQUEsc0N1Q21MRSxlQUNFLENBQUEsd0NBR0YsZXZDdkxGLENBQUEsQ0FBQSw0Qkt5REEsMEJrQzBHQSxXQUNFLENBQUEsY0FDQSxDQUFBLFdBQ0EsQ0FBQSxRQUNBLENBQUEseUNBRUEsV0FDRSxDQUFBLFFBQ0EsQ0FBQSxldkMzS0osQ0FBQSx3Q3VDK0tFLGV2Qy9LRixDQUFBLHNDdUNtTEUsZUFDRSxDQUFBLHdDQUdGLGV2Q3ZMRixDQUFBLENBQUEsNEJLeURBLDBCa0MwR0EsV0FDRSxDQUFBLGNBQ0EsQ0FBQSxXQUNBLENBQUEsUUFDQSxDQUFBLHlDQUVBLFdBQ0UsQ0FBQSxRQUNBLENBQUEsZXZDM0tKLENBQUEsd0N1QytLRSxldkMvS0YsQ0FBQSxzQ3VDbUxFLGVBQ0UsQ0FBQSx3Q0FHRixldkN2TEYsQ0FBQSxDQUFBLDZCS3lEQSwwQmtDMEdBLFdBQ0UsQ0FBQSxjQUNBLENBQUEsV0FDQSxDQUFBLFFBQ0EsQ0FBQSx5Q0FFQSxXQUNFLENBQUEsUUFDQSxDQUFBLGV2QzNLSixDQUFBLHdDdUMrS0UsZXZDL0tGLENBQUEsc0N1Q21MRSxlQUNFLENBQUEsd0NBR0YsZXZDdkxGLENBQUEsQ0FBQSw2Qkt5REEsMkJrQzBHQSxXQUNFLENBQUEsY0FDQSxDQUFBLFdBQ0EsQ0FBQSxRQUNBLENBQUEsMENBRUEsV0FDRSxDQUFBLFFBQ0EsQ0FBQSxldkMzS0osQ0FBQSx5Q3VDK0tFLGV2Qy9LRixDQUFBLHVDdUNtTEUsZUFDRSxDQUFBLHlDQUdGLGV2Q3ZMRixDQUFBLENBQUEsa0N5Q2RKLEdBQ0UsdUJBQUEsRUFBQSxlQUFBLENBQUEsQ0FBQSxDekNhRSwwQnlDZEosR0FDRSx1QkFBQSxFQUFBLGVBQUEsQ0FBQSxDQUFBLENBQUEsZ0JBSUYsb0JBQ0UsQ0FBQSxVMUNraUR3QixDQUFBLFdBQUEsQ0FBQSx1QkFFQSxDQUFBLCtCMENoaUR4QixDQUFBLGdDQUNBLENBQUEsaUJBRUEsQ0FBQSxxREFDQSxDQURBLDZDQUNBLENBQUEsbUJBR0YsVTFDNmhEMEIsQ0FBQSxXQUFBLENBQUEsaUJBRUEsQ0FBQSxnQzBDcGhEMUIsR0FDRSxrQkFDRSxDQUFBLElBRUYsU0FDRSxDQUFBLGNBQ0EsQ0FBQSxDMUM4Z0RzQix3QjBDcGhEMUIsR0FDRSxrQkFDRSxDQUFBLElBRUYsU0FDRSxDQUFBLGNBQ0EsQ0FBQSxDQUFBLGNBS0osb0JBQ0UsQ0FBQSxVMUNnZ0R3QixDQUFBLFdBQUEsQ0FBQSx1QkFFQSxDQUFBLDZCMEM5L0N4QixDQUFBLGlCQUVBLENBQUEsU0FDQSxDQUFBLG1EQUNBLENBREEsMkNBQ0EsQ0FBQSxpQkFHRixVMUMyL0MwQixDQUFBLFdBQUEsQ0FBQSx1QzBDci9DeEIsOEJBQ0UsK0JBRUUsQ0FGRix1QkFFRSxDQUFBLENBQUEsaUJDL0RKLGFBQ0UsQ0FBQSxVQUNBLENBQUEsVUFDQSxDQUFBLGNDSkYsYTVDK0VhLENBQUEsd0M0QzNFVCxhQUVFLENBQUEsZ0JBTk4sYTVDK0VhLENBQUEsNEM0QzNFVCxhQUVFLENBQUEsY0FOTixhNUMrRWEsQ0FBQSx3QzRDM0VULGFBRUUsQ0FBQSxXQU5OLGE1QytFYSxDQUFBLGtDNEMzRVQsYUFFRSxDQUFBLGNBTk4sYTVDK0VhLENBQUEsd0M0QzNFVCxhQUVFLENBQUEsYUFOTixhNUMrRWEsQ0FBQSxzQzRDM0VULGFBRUUsQ0FBQSxZQU5OLGE1QytFYSxDQUFBLG9DNEMzRVQsYUFFRSxDQUFBLFdBTk4sYTVDK0VhLENBQUEsa0M0QzNFVCxhQUVFLENBQUEsT0NMUixpQkFDRSxDQUFBLFVBQ0EsQ0FBQSxlQUVBLGFBQ0UsQ0FBQSxrQ0FDQSxDQUFBLFVBQ0EsQ0FBQSxTQUdGLGlCQUNFLENBQUEsS0FDQSxDQUFBLE1BQ0EsQ0FBQSxVQUNBLENBQUEsV0FDQSxDQUFBLFdBS0YsdUJBQ0UsQ0FBQSxXQURGLHNCQUNFLENBQUEsWUFERix5QkFDRSxDQUFBLFlBREYsaUNBQ0UsQ0FBQSxXQ3JCSixjQUNFLENBQUEsS0FDQSxDQUFBLE9BQ0EsQ0FBQSxNQUNBLENBQUEsWTlDdWlDa0MsQ0FBQSxjOENuaUNwQyxjQUNFLENBQUEsT0FDQSxDQUFBLFFBQ0EsQ0FBQSxNQUNBLENBQUEsWTlDK2hDa0MsQ0FBQSxZOEN0aENoQyx1QkFDRSxDQURGLGVBQ0UsQ0FBQSxLQUNBLENBQUEsWTlDbWhDOEIsQ0FBQSx5Qk03K0JoQyxld0N4Q0EsdUJBQ0UsQ0FERixlQUNFLENBQUEsS0FDQSxDQUFBLFk5Q21oQzhCLENBQUEsQ0FBQSx5Qk03K0JoQyxld0N4Q0EsdUJBQ0UsQ0FERixlQUNFLENBQUEsS0FDQSxDQUFBLFk5Q21oQzhCLENBQUEsQ0FBQSx5Qk03K0JoQyxld0N4Q0EsdUJBQ0UsQ0FERixlQUNFLENBQUEsS0FDQSxDQUFBLFk5Q21oQzhCLENBQUEsQ0FBQSwwQk03K0JoQyxld0N4Q0EsdUJBQ0UsQ0FERixlQUNFLENBQUEsS0FDQSxDQUFBLFk5Q21oQzhCLENBQUEsQ0FBQSwwQk03K0JoQyxnQndDeENBLHVCQUNFLENBREYsZUFDRSxDQUFBLEtBQ0EsQ0FBQSxZOUNtaEM4QixDQUFBLENBQUEsUStDM2lDcEMsWUFDRSxDQUFBLGtCQUNBLENBQUEsa0JBQ0EsQ0FBQSxrQkFDQSxDQUFBLFFBR0YsWUFDRSxDQUFBLGFBQ0EsQ0FBQSxxQkFDQSxDQUFBLGtCQUNBLENBQUEsMkVDUkYsNEJDSUUsQ0FBQSxvQkFDQSxDQUFBLHFCQUNBLENBQUEsb0JBQ0EsQ0FBQSxzQkFDQSxDQUFBLDBCQUNBLENBQUEsZ0NBQ0EsQ0FBQSw2QkFDQSxDQUFBLG1CQUNBLENBQUEsdUJDWEEsaUJBQ0UsQ0FBQSxLQUNBLENBQUEsT0FDQSxDQUFBLFFBQ0EsQ0FBQSxNQUNBLENBQUEsU2xEeWJzQyxDQUFBLFVrRHZidEMsQ0FBQSxlQ1JKLGVBQUEsQ0FBQSxzQkNDRSxDQUFBLGtCQUNBLENBQUEsSUNORixvQkFDRSxDQUFBLGtCQUNBLENBQUEsU0FDQSxDQUFBLGNBQ0EsQ0FBQSw2QkFDQSxDQUFBLFdyRGtwQjRCLENBQUEsZ0JzRHhsQnRCLGtDQU9JLENBQUEsV0FQSiw2QkFPSSxDQUFBLGNBUEosZ0NBT0ksQ0FBQSxjQVBKLGdDQU9JLENBQUEsbUJBUEoscUNBT0ksQ0FBQSxnQkFQSixrQ0FPSSxDQUFBLGFBUEoscUJBT0ksQ0FBQSxXQVBKLHNCQU9JLENBQUEsWUFQSixxQkFPSSxDQUFBLFdBUEosb0JBT0ksQ0FBQSxZQVBKLHNCQU9JLENBQUEsWUFQSixxQkFPSSxDQUFBLFlBUEosc0JBT0ksQ0FBQSxhQVBKLG9CQU9JLENBQUEsZUFQSix3QkFPSSxDQUFBLGlCQVBKLDBCQU9JLENBQUEsa0JBUEosMkJBT0ksQ0FBQSxpQkFQSiwwQkFPSSxDQUFBLFVBUEoseUJBT0ksQ0FBQSxnQkFQSiwrQkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsU0FQSix3QkFPSSxDQUFBLGFBUEosNEJBT0ksQ0FBQSxjQVBKLDZCQU9JLENBQUEsUUFQSix1QkFPSSxDQUFBLGVBUEosOEJBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSixrREFPSSxDQUFBLFdBUEosdURBT0ksQ0FBQSxXQVBKLGtEQU9JLENBQUEsYUFQSiwwQkFPSSxDQUFBLGlCQVBKLDBCQU9JLENBQUEsbUJBUEosNEJBT0ksQ0FBQSxtQkFQSiw0QkFPSSxDQUFBLGdCQVBKLHlCQU9JLENBQUEsaUJBUEosa0NBT0ksQ0FQSiwwQkFPSSxDQUFBLE9BUEosZ0JBT0ksQ0FBQSxRQVBKLGtCQU9JLENBQUEsU0FQSixtQkFPSSxDQUFBLFVBUEosbUJBT0ksQ0FBQSxXQVBKLHFCQU9JLENBQUEsWUFQSixzQkFPSSxDQUFBLFNBUEosaUJBT0ksQ0FBQSxVQVBKLG1CQU9JLENBQUEsV0FQSixvQkFPSSxDQUFBLE9BUEosa0JBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsU0FQSixxQkFPSSxDQUFBLGtCQVBKLDBDQU9JLENBQUEsb0JBUEoscUNBT0ksQ0FBQSxvQkFQSixxQ0FPSSxDQUFBLFFBUEosbUNBT0ksQ0FBQSxVQVBKLG1CQU9JLENBQUEsWUFQSix1Q0FPSSxDQUFBLGNBUEosdUJBT0ksQ0FBQSxZQVBKLHlDQU9JLENBQUEsY0FQSix5QkFPSSxDQUFBLGVBUEosMENBT0ksQ0FBQSxpQkFQSiwwQkFPSSxDQUFBLGNBUEosd0NBT0ksQ0FBQSxnQkFQSix3QkFPSSxDQUFBLGdCQVBKLCtCQU9JLENBQUEsa0JBUEosK0JBT0ksQ0FBQSxnQkFQSiwrQkFPSSxDQUFBLGFBUEosK0JBT0ksQ0FBQSxnQkFQSiwrQkFPSSxDQUFBLGVBUEosK0JBT0ksQ0FBQSxjQVBKLCtCQU9JLENBQUEsYUFQSiwrQkFPSSxDQUFBLGNBUEosNEJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSiwyQkFPSSxDQUFBLFVBUEosMkJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSiwyQkFPSSxDQUFBLE1BUEosb0JBT0ksQ0FBQSxNQVBKLG9CQU9JLENBQUEsTUFQSixvQkFPSSxDQUFBLE9BUEoscUJBT0ksQ0FBQSxRQVBKLHFCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosc0JBT0ksQ0FBQSxZQVBKLDBCQU9JLENBQUEsTUFQSixxQkFPSSxDQUFBLE1BUEoscUJBT0ksQ0FBQSxNQVBKLHFCQU9JLENBQUEsT0FQSixzQkFPSSxDQUFBLFFBUEosc0JBT0ksQ0FBQSxRQVBKLDBCQU9JLENBQUEsUUFQSix1QkFPSSxDQUFBLFlBUEosMkJBT0ksQ0FBQSxXQVBKLHdCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLGFBUEosZ0NBT0ksQ0FBQSxrQkFQSixxQ0FPSSxDQUFBLHFCQVBKLHdDQU9JLENBQUEsYUFQSixzQkFPSSxDQUFBLGFBUEosc0JBT0ksQ0FBQSxlQVBKLHdCQU9JLENBQUEsZUFQSix3QkFPSSxDQUFBLFdBUEoseUJBT0ksQ0FBQSxhQVBKLDJCQU9JLENBQUEsbUJBUEosaUNBT0ksQ0FBQSxPQVBKLGdCQU9JLENBQUEsT0FQSixxQkFPSSxDQUFBLE9BUEosb0JBT0ksQ0FBQSxPQVBKLG1CQU9JLENBQUEsT0FQSixxQkFPSSxDQUFBLE9BUEosbUJBT0ksQ0FBQSx1QkFQSixxQ0FPSSxDQUFBLHFCQVBKLG1DQU9JLENBQUEsd0JBUEosaUNBT0ksQ0FBQSx5QkFQSix3Q0FPSSxDQUFBLHdCQVBKLHVDQU9JLENBQUEsd0JBUEosdUNBT0ksQ0FBQSxtQkFQSixpQ0FPSSxDQUFBLGlCQVBKLCtCQU9JLENBQUEsb0JBUEosNkJBT0ksQ0FBQSxzQkFQSiwrQkFPSSxDQUFBLHFCQVBKLDhCQU9JLENBQUEscUJBUEosbUNBT0ksQ0FBQSxtQkFQSixpQ0FPSSxDQUFBLHNCQVBKLCtCQU9JLENBQUEsdUJBUEosc0NBT0ksQ0FBQSxzQkFQSixxQ0FPSSxDQUFBLHVCQVBKLGdDQU9JLENBQUEsaUJBUEosMEJBT0ksQ0FBQSxrQkFQSixnQ0FPSSxDQUFBLGdCQVBKLDhCQU9JLENBQUEsbUJBUEosNEJBT0ksQ0FBQSxxQkFQSiw4QkFPSSxDQUFBLG9CQVBKLDZCQU9JLENBQUEsYUFQSixtQkFPSSxDQUFBLFNBUEosa0JBT0ksQ0FBQSxTQVBKLGtCQU9JLENBQUEsU0FQSixrQkFPSSxDQUFBLFNBUEosa0JBT0ksQ0FBQSxTQVBKLGtCQU9JLENBQUEsU0FQSixrQkFPSSxDQUFBLFlBUEosa0JBT0ksQ0FBQSxLQVBKLG1CQU9JLENBQUEsS0FQSix3QkFPSSxDQUFBLEtBUEosdUJBT0ksQ0FBQSxLQVBKLHNCQU9JLENBQUEsS0FQSix3QkFPSSxDQUFBLEtBUEosc0JBT0ksQ0FBQSxRQVBKLHNCQU9JLENBQUEsTUFQSix5QkFPSSxDQUFBLHdCQUFBLENBQUEsTUFQSiw4QkFPSSxDQUFBLDZCQUFBLENBQUEsTUFQSiw2QkFPSSxDQUFBLDRCQUFBLENBQUEsTUFQSiw0QkFPSSxDQUFBLDJCQUFBLENBQUEsTUFQSiw4QkFPSSxDQUFBLDZCQUFBLENBQUEsTUFQSiw0QkFPSSxDQUFBLDJCQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLDJCQUFBLENBQUEsTUFQSix1QkFPSSxDQUFBLDBCQUFBLENBQUEsTUFQSiw0QkFPSSxDQUFBLCtCQUFBLENBQUEsTUFQSiwyQkFPSSxDQUFBLDhCQUFBLENBQUEsTUFQSiwwQkFPSSxDQUFBLDZCQUFBLENBQUEsTUFQSiw0QkFPSSxDQUFBLCtCQUFBLENBQUEsTUFQSiwwQkFPSSxDQUFBLDZCQUFBLENBQUEsU0FQSiwwQkFPSSxDQUFBLDZCQUFBLENBQUEsTUFQSix1QkFPSSxDQUFBLE1BUEosNEJBT0ksQ0FBQSxNQVBKLDJCQU9JLENBQUEsTUFQSiwwQkFPSSxDQUFBLE1BUEosNEJBT0ksQ0FBQSxNQVBKLDBCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLE1BUEoseUJBT0ksQ0FBQSxNQVBKLDhCQU9JLENBQUEsTUFQSiw2QkFPSSxDQUFBLE1BUEosNEJBT0ksQ0FBQSxNQVBKLDhCQU9JLENBQUEsTUFQSiw0QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxNQVBKLDBCQU9JLENBQUEsTUFQSiwrQkFPSSxDQUFBLE1BUEosOEJBT0ksQ0FBQSxNQVBKLDZCQU9JLENBQUEsTUFQSiwrQkFPSSxDQUFBLE1BUEosNkJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsTUFQSix3QkFPSSxDQUFBLE1BUEosNkJBT0ksQ0FBQSxNQVBKLDRCQU9JLENBQUEsTUFQSiwyQkFPSSxDQUFBLE1BUEosNkJBT0ksQ0FBQSxNQVBKLDJCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFB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QSxDQUFBLFlBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFlBUEosMEJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxZQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsWUFQSiw2QkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFlBUEosMkJBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxTQVBKLDBCQU9JLENBQUEseUJBQUEsQ0FBQSxTQVBKLCtCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsNEJBQUEsQ0FBQSxTQVBKLCtCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsNEJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FB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 */ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/arrow_ltr.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/arrow_ltr.png deleted file mode 100644 index cd79ab42f04a594dbf727e34795009f3e99fb62e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2%@N{M0&tl#Zv1V@L&KvP94Wd(mDdM=eR# z<`9#vqR0OhJFjv(Fu^eA%7(zh9xctRJxmPTewN2A?=GnX>SOS9^>bP0l+XkKYlIuC diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/asc_order.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/asc_order.png deleted file mode 100644 index 51ce21b13013b39af479676247bfe00b6b15c117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6B0XIkLn;`PfA}-->9Vr_d;e?y z&;PIfcmF&8+#L#1k%VhMhepI2+Gz9y5hv5nMiOp4 zVrA|7&l|hLe7M8jcjNuN-*iMonN7OOkGXL7y#r#!9b#a^^%G0~2C!hqhCu@m#XRmk zocf1>6ykV4Y3eaH&^1H&2hbuDLsggucXv*c{S3s#vn2zBTDDnvo+YY=8v1*Ds`~E? zyLKng;hvp-2DTt}^)k>CQ@@@RY8__f@uOl|Hf@<9sftEm9<{f_NPhuX+5p$0mYw8a z1u@iPxDROI^!PCq6H%?otlg;GnLy>DT0~}As1hWQG-!ZuVChlwj4AZi{VUy|kAE}g zx|kU$E4}~-GBthi=9MU~o4bZuwHr-sPl?iyMceQV0J)lwG_0Jh2}DEX>q%xH&=-Sf z1Q#}@e9Dq!!)f^V_qOfDJ%Jz-iv?pnhQe(?a<^gLI&)1`f*qH3Uxr$+g?jet@R9IR r1mPA|!eicsaZ|Xt8{qgbl9M+8KW(5u(o^eV00000NkvXXu0mjff40fa diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_docsql.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_docsql.png deleted file mode 100644 index 2f6f0561dca94b36c8a4f91207b150e7e12120ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`KAtX)Ar*{U&mZJuFyLT0_~m}1 zZLI&Z`O4i&T)&0bY^5j1F#h0G67=$C^DtV%yyxS~KYR=oXPF-S|70oneEP)f;jB-jRL(I`mqi{UYyMfDpxn_Yz35%3-%(-yfM#$!lb!k1_ ztdQ^?aT-e^2`eF|&*-C;Ug5;I$VU5mzOQJfhGCXIt) syCi(X=Nq?VMP}S3za+k;q#D=!0TI0HjY>%;xBvhE07*qoM6N<$f_;F23IG5A diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_lastpage.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_lastpage.png deleted file mode 100644 index 1b4ac09269d25ef90a81b71132eb839209caaf74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmV;G0&4wi?0Qf_F ztf&z(2@Mn){X_h0;(veN{~hcpRJ;7THshKrVD@}!ch)yH%XJM+vg3V=^U}+1^ODQT z4Bp}0-wX`6*9CicU0ri$Yc#1r&lXXtR4Jq~1%zS>-0vG&k3Z^M$Gc<<1G*A!Xz9{( z`4V`tg)$Vq2w5ndFM~(V7T|dESwC{WjV86A0qbJgj7*rPBa%VvO94^!o6r`@Af)6C zlSj|pt#i*tXON|V>6+7TX4*Unt$<;h?1Ts-tmZLf!%H*oEI5NmQ$V zFOdV&CEOX!f*QQ$DL552wpgy>`RgXEv)wbAShL_lV#YK3n^sxN8IvH$ak6H@Y$yYC zi0Jzdoo=0AYo9^ZSS0C2-MZV4?Rr$C3lUJ)b+^i)vs`SaXwC#shmDc1p)vm+Zf5tnz;!rm080Gd3K4VBT##<&-Qo vdGCI+ymj9Z=dyj*%wx?hUx$&ID9+9R<30#qo+be_00000NkvXXu0mjfj_No+ diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_left.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_left.png deleted file mode 100644 index db427f96166d9a46d64d6bafb314bbd33bda6b20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6EInNuLn;`PfA}*@TExKl=lJ>u z_I|8;9Zr1MFTR|q!$gi%A=8FS;nI{D4F$}s`y5)BS1NXLu3X8$Fze`B+e|UxW}qPq Mp00i_>zopr0Le8XGynhq diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_tipp.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/b_tipp.png deleted file mode 100644 index 0cead20e6a38b86fdfdbcbeda2d34ae88d058ea3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmV;p0!RIcP)(r+H0`M7>%xfuC=IBoq zKa&}^*J!Ko9$n+hQ?)eu=3czqGr z$^d9Wx1i2*euX;XK-bR%RJBiYbE!>=RTT@tA|q6ha6SY&6TCT@kVw82K(wl0Ot}e# z%@|F6#KBgQz+CX~5-ay32b2)lQgT;7fL~sJDOhwu4fs7>3#vic=bR~Ey2|S$+fhhoQ z&INDGB!Lw0`Z#dL5U>sR!6B(apsRMH?p8|( zR1^#uZYVg}fmL|yX!qF;RN)7E)VeKInQ|SV_gME%K$=OIunTJ2snEqfMZt+qoXlz6 z;!k%V(Ga|^Z-wKk+L~wM!9+}fP%{C7aum4OS*SSL64|Hw809YO$A4>y5|NJQrrbNV z#%g=-FdkkWjH@U5VgL4(STLrW7-4f_tm(cbjiUZ{mmijxWQ-Z7zpWO?p?U&3lfR4bNcPn+C*idV;KPNrvaz%l32C?0000I>=4KpXJaAIbrw=uKl$uMB{@%h9%KZgIZQEd_x zOKgd=+dM^$#wHOlzd0R=!PZedqWfB#6Q3P1B~t&6wVfMRE#udM@1&s~%b*z?Qn`--bQn?lTSb5M00000NkvXXu0mjfUl?a5QbHNE4VtOVK<--t_D>RW{%n3Fmo~#W@gSCFdc&!!uhiEf-BbdFFSusYT}76 zbv=B2t2zIhjEH+7crf?@0Z1_??`@f-Q7dtH&mNe&t9gbrrl)K}Mu_ zlU_M%*q~QV$$l&FpWMx<2oQ;ioeJ)l z49FCA=_pnQT1=ZcZPO0w{EEwY#1Be_49L~H$!tDh2lac@$5)&%ujo-xu*4n4%$ObZ wf6Lk*%#BUn9S?VgJMZoqoBn@UKZifM0UsJsu){@e!2kdN07*qoM6N<$f?b)mm;e9( diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_spatial.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/bd_spatial.png deleted file mode 100644 index ea16fedf158f29f7231aa26fbca9eab217ff2508..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAm`Z~Df*BafCZDwc^455|IEGX( zCLLhOl$4ZgFnZ?DoG8KZ_(xnBqvI2e7s4$LhHf*N#MX2$yT&iz>Ie|vUCJN8me;wa z?XTsJpE3J_nC_LV4TzondKM2`b;bt&y&HTFxUh!DH3~2s5I(TuOoEvC`Mkmz3+^R$ zy>~V~rqjw(*x|yTx%Mlolda(0CEwX=8N(O(8mVo+uk`fq&*Y;HU#>)Lei*aEFl~d2 p-r+t+-;h%W-e>GEQZ4=Yn)&$R);oGXtqnoG@pScbS?83{1OU~gT*m+a diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col.svg deleted file mode 100644 index 9452b4a..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_drop.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_drop.png deleted file mode 100644 index 9d84943ec51c68148b56ccf2aad4888ad6824b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6%sgEjLn;`PfA}--NwMB|Izg0S zWn2o!)W+b12DRRW3&hv4co-*yGKjQ!C2Kh_u%rjHsxWdetm%AfTXEonIM4(JPgg&e IbxsLQ0LU61I{*Lx diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_pointer.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/col_pointer.png deleted file mode 100644 index 00d78c7ca58010d3279c5a99ed79f564d09e252a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^AhrkxkYJeD`nd~8F_i@Q1v4;|O+IS@fl|rhitNc)eNu3djIYS3j3^P66C`3)z;5s8ILYAMwr%KrIoaCKOkSU(7elF{r5}E)d CiWl|( diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/console.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/console.svg deleted file mode 100644 index 2819196..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/console.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-minus.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-minus.svg deleted file mode 100644 index 1adb49e..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-plus.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-plus.svg deleted file mode 100644 index f13bc56..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/database-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/1.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/1.png deleted file mode 100644 index a9da1dc16158f4f060aef8414a97d97c1c9c35db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4DSEm%hEy;nFOZKY`;%yDbZq$p nd!u6kERz?6C^}tK2;pF`*}Q3GNkjQhpkfA3S3j3^P6f4g?PF+hEy;nH#DXmmk(q9SRXS( zjY}}$VB_qwE}AhFAHswgTR9A}pD&%a%u?DcQR@iHABQ)gwv{*IQqD9mYcOn77f5F= nWR`f$$mAiVl-Sf_!ok2`>oJSFaAu1a(0m3@S3j3^P6f4sd~CNhEy;nN0j|}SfBLaLr{cm r<;}Px17-meflf)K&LccbM-muH1D;RRIq~{7Py>UftDnm{r-UW|H!d57 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/Field_small.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/Field_small.png deleted file mode 100644 index c396eb3b7fd21e79dc2019a129783b3928b8694c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 240 zcmVe>W1)PfZo;&yd{{R2~*IvK=AIQg4+%##@{|Os5 z{NMBM-~RW4RfB*h3`|#m^-ouCgZQ|qqPnkX) zq|h9Q1z>9V*X`c@Kk?|%|Jk>1|Bu+R<$pm@5lE3WNFloC6s9d)_}?ix`G0A7IZTlS q5X)oplfv4yYY8brCg0000n diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/and_icon.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/and_icon.png deleted file mode 100644 index 2ecce01a25c5739a2be05a82e84b81468b493161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO=JP))%R;`@ zfGa3jud;f!E|D%bWLxYf(AG9GQmOX2uGfz14NY+f|sdawmkM7U>H~F24 z_XmH*U2d`oBdj<88dx>GZTXrVkJ_4yJEb=IgPvPqLY+Uq{*Eu7`iNmvrSDZ_69!?$ z5m%!*ZnZ;J&XyhMyZ_;ab$ruc>Q?yaxgYuS-QTEv|2v`Glua1Q2@pqIJGpdn@8#A? zWBfKD0h$PV2L63>OnS+XjZVz*!=qJ7YZpOjLZdLA&2np}`7L&JdP!%4d_F*#SuEWl zVRuk&o4;Qlk}8IHogt$}K;zRksdNV&Gs5O`0pe;)L&kA&bf2U(AeZUW_;|uhI-pP* z;QlvYwJoRo`?ilY?UQl_2rG`Q!FJpJ_etN|HI<3TCPLJ}@Y~Bdc0V^3w{QtO1vWf) zV}U(&Yq>2iy=wS+OkiUXhljN!KX zukYOZ)n;EQ002ovPDHLkV1o7DU1b0O diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bord.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bord.png deleted file mode 100644 index 0b3191de9bc9c773e48562e29347e9e4730f65cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75 zcmeAS@N?(olHy`uVBq!ia0vp^Oh7Ea0U|e_vV07rggjjwLn;`PcN9E6_y7O@mu`#< Y7GEO-uU@FVdQ&MBb@0G_lKod5s; diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bottom.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/bottom.png deleted file mode 100644 index 19cbbcdc6b984806e8292c8b38fc040eb614d972..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t$3P)LAX6na$!B8$Zho#uUTG7qye;7=t!lxmuquq-#l*&lQajyq=YPne zdYdXSNt&Z&h|8)&c5xF=V{V72ev)6 z-ZKx5k_jEGmt^76>tc1!LJc$QvmgA5^a*bF#t0k2I5&0WoJLh1lI6z?5v@ZQOT zW!HX}MrL-vod%`nSlFS|1*Te;r#0|ypOKo$tY|BLBB=l8FOQ3Zs4r#cA^fY*lC}PwNS#+@eeGF zA-MsX{k}}r_n-Yt?L-~mxG1uA+Rk{)KbFQrza1Aw*3mNg%;YjTv<&J1Dq5;DDh)bK gIsn=;zRXU^H}wl_D^d?g6951J07*qoM6N<$g4BvO!~g&Q diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/downarrow1.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/downarrow1.png deleted file mode 100644 index a2d095417306aad6d4b9eacd433dc2163d751cc5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 671 zcmV;Q0$}}#P)79~t+mK}|r7L?LloMd8V5lKEDQ+hD+ytr|$?TObNcND~Kt zKPKm%wXZ6yr6@E$W!PF9uD;KP#hr(Y>_Wlrv;sVfNW+9}JUArE-9z!XZzZspMxxNT zl)!@?Bp9+_bmj@(f5%23xkY=% z%z*FWGco&w4`a6HpyxUWK-pq9dMKW(E(_>CaHSQqk2!Gokq@L4OCfb;z*BF5@UsvU zrH25O^T3{p$7}xqQfQ@o&IWHT!orJ13=(Z90l*-CJonuIA)CDdZwCGYqza%z8M>ti zL$?-T(ItYGtr&ig!PJg7e<)dF{5Fcqj16A_yN9o}Kylb7c<0@We_$z=0`{NU$`!A# z@Uba7i+njXmxM-W!Vem-`hrdH>E|8>)7kUbcWNUE`C%UIzqtp?VOi?IJ?J70jnHzt z)!22@j@`E$xc<(I&qjbM82 zJvTawmPs?K3XF-CK@~uurJPYT=rn&06ak3AM&f|aT?Y?}UVR6|088pvft;!?T>nta< zPOLBbuxWP{pVgomTz|IDj`zYzk1f+K!tx+ZoO6A-AFM~}>~CJ?5o5hkcmKGSc;2D# psQUj{Q=b1tTlTuj;qXA{M4cPW-;E`)AR1z%h#!jit9TPRd;)f+aL)h$ diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/grid.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/grid.png deleted file mode 100644 index f581a68d75ac6f2fd4f20534ca3881d0d97ac1d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 602 zcmV-g0;T~M z@CwU9czm9ugJN>9{%SO#Nkg=^JJ$eoJ;am!@=AwuKo$+^ol{Dcx}$$4<{XHG!uadF zAP7yX!c0!h`98;r8s2V^0%}KX zisodjx*U%U*ArO(52;Wev!{s0pzVNK1P(I1*(L#W7^++mRXVvg4c-9^+X==d2J0W` zs{ok+{FHHfi!g3qnWSJF3bSM66z!gYrEw^wfx^qaN{dsla3m0iAI0Lx zjkUe|8WhtvlYD1~H_3l7_W}PhlV?Z&(3IkReVAQ&ApqOC+S)48) zk51UH=I=KwDy+6FR{N>PG8>$GA;PmXe>UAu3c#@S5;!Ks-AcIAz7SYi6h5u5ZaewP83 zoV3A=BO*-QpV{0?&WPxv80IKq63u-lu4%>kFi&g6-)yFgP5RDn`3jpa*BO;uG7Pm-QP&~yX~~p2p*GmMzA6p9s?%; on-=>FTLWJc9{}%+j#(=0KagZm%g0{>7ytkO07*qoM6N<$f&_>m!2kdN diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/or_icon.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/or_icon.png deleted file mode 100644 index 75be472bd77d51dd2bd075a3a40639526647c819..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmV+=0^0qFP)nc4RQc9UhnZjr8ClDR1R8(`0$8 z3yK{X3@jb`OtooY_g(#3$eY0nbkvGx^xlB%(egLWbMdcVCm2`xgF=LyR-&1 zQF>G>rN^}t#q{KsN>9z_Cz>pSfu%#&1KV5 zez)UwpMW$kq{QNg600JLZ!m2^_^cfn3@jbTMFj!zT!vfD1M?g z!m}e23@jZ}!LM?ss_w({nPsFi?WJ4&r2B(WmOs-$WH7KMruZMzj85+BnVIF154Y74 n!m}fT0W9eNQ{vCr6*K<w;+J)z{C))jZp2t! z-rzsilNufZE}t+#t&Uw<#VjnNKrsM(J@?VQf-{%WcOU<_dDp9F2>4yI)avv@HyB1}#vitOg^%C1 zob6@h(KN#uBi9aREX`_v`zQRWQ4H`f%{cPQ8lxLeCT{CuW_EG1;iJ^iiy5PrH{MzJ zC;Y6IZ*ls^8K0dK%%A2R&sX-dN`HjijJ(y?=l=;mtm2v-K7-AxF?$pSmqhCns_Z<4 zZQZTKDZ}RyhR*<*FmwiO&gqptC}UsAr=QQJoJuDiPsSfg!0wB!<*;seY;cc8@2(V} woj?-E2KkwIFl9rFW3ejGwLlWcW*B$?09h>AgB~g6v;Y7A07*qoM6N<$f~92uZU6uP diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/pdf.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/pdf.png deleted file mode 100644 index 616060a23b85ad110c833f61e02192a1edb80133..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 798 zcmV+(1L6FMP)!_jU8h zjJHiXo;)jf7VP2IESJ`8G8mZKl>^T|uMc9W5-gq^9n)O=7D2>o7PE}^O90^Tqi&Uo#$*X}t3e9e6N4&C|0H!#sY%|`D67jxSJ zEhN!{>jW{z*7)d}<>=enCfP`9B0_sSf^Q7spFSJ-;X6+IDCnf2sGE+eK_&*5c-ST% z0e2}9jIHv~IL1O;JsZ~f!2ABdn~ns0Xx9AK*+7Hu{0Gs(;09!(C`ay5^OW52qQt!H4p=3s^~m{xMJfaT`gPi$0qTCh zPyU;H9o9Un#tPvCRy6@+^#ZvAK+`Nv0S%&e#NH7_pPcpC*d}ilWwdcm8BjhXLUcVJ z{^dLbSMiY0BtTBL5ZPTqcoZ=3XTW4*R8-W{X9cI$SZ{}x9?*_q4P#uSHZu@XPJw?h z8383^eLk{^3eQ{uzHpf%8M~x>8XX;d$5}xD54MjJe{xLQBF9t_k=MaMaw83KwN%8` z90@Vi6qv+r;Z2K4!jHzW-wSY*><{S}aLI zHV?3lc%1RT+ugUp%MC@mAm)}r&-anpbYu_k;> zQQ~*96fRI3h5OMa?7yu5b3FEe;XB%vCG6I5b|Fqa(&F^PA`rn)2sH4}T{X@;(c;KG z4NgDN;qFHx7M=5;%L;%qvjm-^Zci>t7(RG;F}7S$;?`RYi1=Iwc3oG2!s+{Yc$Z?p zH;%plNXVO~M;GD!Wn~E?`Yuso+CdG@J~M*28STM{O)hM@qQmbTdKN<0l>na+b`{=R zQA$XUmOD#<{_6seAGUySc><6e@nPalAB+|^erEL*4|=W!=xuh3x)N1NNI!rsW#IY% z25t!8QKARm&>F1xotek&puWtdI7Wo8VV4rpcVd3Pw!teD5biU9!kuUv+}eQ?ZI)nr5B6 sz73Q#K(PsmfcW@$IiMPDkh-A<01kt1YO~FRumAu607*qoM6N<$g1mKIs{jB1 diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/rightarrow2.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/designer/rightarrow2.png deleted file mode 100644 index 76f2fe08bea2decf6e25bbcc9b6d0653e6a470f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 666 zcmV;L0%iS)P)j5QP5*H592MHi>kxxso|1j9r_C$(xcOnPY@V8t}^57GdqlqQsfs^&@~BXd-;HmBn{kT3moXKc(}qF(0{-(6AXu~n0MTUC8zBW4(21ySd*sy6bal2EN8$T ziU+GafHbtyIYtcHP{|dMUhNYW#$bKcf@Tvv1Fr>o0BHlLDML0^V#uaSgr&nLEFz;C zgXlXZ)|A50e(S^@K$<1C0Xv4RGD2~nrWreK=hHpzd?^N5g1MaTNuY1#iWe8zzb(Da zAzP;;fnLbwobDrf($bubHF#H+1(lhdj#e!rjhNO;ED1BN5xL zS+L`}^*7NodM8zX$s8HDV;K9Vv9C?xP+BM2fL^mh3#M&~hGBma33T0SR%jumNs;-6 zd4WCK z \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/field-index-text.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/field-index-text.svg deleted file mode 100644 index c635877..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/field-index-text.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag-plus.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag-plus.svg deleted file mode 100644 index bd7fe7e..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag.svg deleted file mode 100644 index e7f39a6..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/flag.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/lightbulb.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/lightbulb.png deleted file mode 100644 index 0cead20e6a38b86fdfdbcbeda2d34ae88d058ea3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 696 zcmV;p0!RIcP)(r+H0`M7>%xfuC=IBoq zKa&}^*J!Ko9$n+hQ?)eu=3czqGr z$^d9Wx1i2*euX;XK-bR%RJBiYbE!>=RTT@tA|q6ha6SY&6TCT@kVw82K(wl0Ot}e# z%@|F6#KBgQz+CX~5-ay32b2)lQgT;7fL~sJDOhwu4fs7>3#vic=bR~Ey2|S$+fhhoQ z&INDGB!Lw0`Z#dL5U>sR!6B(apsRMH?p8|( zR1^#uZYVg}fmL|yX!qF;RN)7E)VeKInQ|SV_gME%K$=OIunTJ2snEqfMZt+qoXlz6 z;!k%V(Ga|^Z-wKk+L~wM!9+}fP%{C7aum4OS*SSL64|Hw809YO$A4>y5|NJQrrbNV z#%g=-FdkkWjH@U5VgL4(STLrW7-4f_ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_data.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_data.png deleted file mode 100644 index c173bc0343f01226364682225e578d0b21c2cba7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}cz{ocE4wm--#UpiszQx|%_^ zOfYJ)i_szmgSia)Ga1@9mg`JrFyFv1ui{t>(25LC7srqa#!~-gMixT>o7TTpc;x+{=G{wG z1D)reB_G5!{t$K+-k|$a>_JJ_ibrQ--JkXNCg=X&Q`4i|sle*2e&x6j&`t(VS3j3^ HP6mItpFF8027}86uJNzdesp|Nr>z@7=1f$N(JAh>_&G zz`9jpvj7;TA~Nv+Bc=cr@!jConW3K%BhUaH!DeyS03WkNQse+3-T)x2GeYVBBEbL~ z>;NL;E6R%i0041GL_t(|0cDLv0)s#lLvhc?-C^#3#d<250R}Bw=qqkQS r6)R_-pv#Aif;t_y%|hO4Zo(f|KLZB7)|{YS00000NkvXXu0mjftXtnqGMNFT?uHlk{|7-TDV|mZz(q%Q~loCIAUhMcM!W diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_struct_selected_hovered.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/new_struct_selected_hovered.png deleted file mode 100644 index 9a82bc42237d5a048c5ac0ecf337f8d00a8a86a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 196 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAx;$~es$)Tp(PNcA4p_($rZza~)m3 u@#HVL \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/pma_logo2.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/pma_logo2.png deleted file mode 100644 index 30f22de643e8fd97dfa044fd983760471046463c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1366 zcmV-c1*!UpP)yJ`gYN%src?JdqU}=j~V3*plme0k$ z=aygmZ4P#SqCY`ETVHEzbd%(qZQ!GNFE1-0A|iW&nfP=Y92^$gW+7~Fh4p$VRb!r` zW?Iv}u{=FQO<9XgRe6}3s@Ixxj+3XLqppgMovN&~T^IK>00001bW%=J06^y0W&i*L zL`g(JRCoc@&IJL0KnwuDclQmae@-&sa0!n50i}!!sg%;%C?y4F^tB2XRy!Y}cPZu= zgZEBJe&|zbBPTFnosSt1bJq{!1b_fJ24}>9&b+J}DP^G;Eer(V-)p!eP1CT42M${7 z?EPQtU!a=G*_;ouACo!GN#*KV7asGFK?{H^m~c@DBy{cK*U{(W-2TjVoI_atUT8v? zqXfI5Ktt0+5_Bfr{Qds$C{_*5lh1Zcd2|5Fwdv_bHpw+|kVR(b%zScmpW>r0k8b$^9l{}a?baDvNh(B-kf8_7ePPk&I&g+5c-e7)T zn~do`K+`k;^q~g8XO&&ovqOBr+ShAZs*@f$SF*A{o$8GH?bDU!&9#-X%Yg*Y$bbTL ze$z-9NN57qy$QJIwmL&yrx!zMQop~x7drlL#@ZI<_)d{(K#(ASsx!3?YB{Vpw_eLx zss-WpArY+0ct6aw>AJ$$U?3d@kjS&u3j~n>vFeNLDH8FCH8W9Uym%~@>;lO`F(1?vO(`Ex*a^mgsTrBCUqP7IoXAivu!!* zxiQ>%;YgjaAITEUxtum~j6lir3f@nLM00}k;rMG0O?X@ELVne%M6gvpY z8c~2z-r|t+iyo_|#e-1_nR8F4efyJe2J)=-eVFFCyXS6J3CK{ETNx_7!b2cNf=QBO zNM+&l%j$J6nLRMf)%|*&=V@x1VHlcbn&w3Ez*6!lHSU6YV&q-upkx;rvoH#W<1oGY zs5R9!#kFCvAyxZe$n(5Eesl?G{&nuIw7IV{@qbp$MuLo*xgcW82no z9vsrj*T#arNm$Kj-cKD~>SE`?W?~;Zi$A)L}3j^c=b7t(?Nn|5L*J Y1x388mv;+YtN;K207*qoM6N<$f*`7uUjP6A diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/replication.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/replication.svg deleted file mode 100644 index 7bcafaf..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/replication.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine-plus.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine-plus.svg deleted file mode 100644 index c0e13e8..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine.svg deleted file mode 100644 index a270db0..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/routine.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/s_really.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/s_really.png deleted file mode 100644 index e48c9cd4830543e151c6c86035f8a5c6ff640750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHY$ZW{!9W@a@|Lkr1X8A+E{-7; zjL8iR|8Fn^$SBsfH8RRJ9=*8q;jTcDgFiEbW@rg;bW6^-l(Nb}VbWOz8M&6jA`E6y V8@BcETZMrP@^tlcS?83{1OSY1Bf \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/search-replace.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/search-replace.svg deleted file mode 100644 index 79c63a0..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/search-replace.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/table.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/table.svg deleted file mode 100644 index 0aed481..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/table.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/tree-collapse.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/tree-collapse.svg deleted file mode 100644 index 8243f88..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/tree-collapse.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/triangle-right-1.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/triangle-right-1.svg deleted file mode 100644 index d53f9c8..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/triangle-right-1.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/user-props.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/user-props.svg deleted file mode 100644 index a8483bc..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/user-props.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/version.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/version.svg deleted file mode 100644 index a59e9bf..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/version.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/vertical_line.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/vertical_line.png deleted file mode 100644 index a88a7c7bd423395ebd76c118422e80b0cf362075..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67 zcmeAS@N?(olHy`uVBq!ia0vp^j6lo=A{ex?PtE~ST%InDAsn*F4onOTJPeHP$_*7D NSx;9#mvv4FO#n)Z3pW4& diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/visibility-hidden.svg b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/visibility-hidden.svg deleted file mode 100644 index a1e12f7..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/img/visibility-hidden.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png deleted file mode 100644 index 81e2065be481046a57398740018369da5c11911f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq#Qh5978NlCs$2Be&m2bmz&_! zi~U?`Zt`kvp*}s;GbQv54C_*p{v11U;^2`JoM{X@`yC%Cu(tZ}99pbs*45$2AlSt3 TqMGooA7rMdtDnm{r-UW|?OP@T diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-bg_highlight-soft_75_cccccc_1x100.png deleted file mode 100644 index ae3ccae06f39912982e6b9f0761f53e01802749f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122 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 fW*<4S8qOByh_EuQ+FO*FdEfazp8^Y{ diff --git a/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-icons_cd0a0a_256x240.png b/Sources/php_script/script/phpMyAdmin/themes/bootstrap/jquery/images/ui-icons_cd0a0a_256x240.png deleted file mode 100644 index 0ea8a5a22342fb51b2baf7a47424ce3303e102b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3765 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 hIX| .ui-controlgroup-item { - float: left; - margin-left: 0; - margin-right: 0; -} -.ui-controlgroup > .ui-controlgroup-item:focus, -.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { - z-index: 9999; -} -.ui-controlgroup-vertical > .ui-controlgroup-item { - display: block; - float: none; - width: 100%; - margin-top: 0; - margin-bottom: 0; - text-align: left; -} -.ui-controlgroup-vertical .ui-controlgroup-item { - box-sizing: border-box; -} -.ui-controlgroup .ui-controlgroup-label { - padding: .4em 1em; -} -.ui-controlgroup .ui-controlgroup-label span { - font-size: 80%; -} -.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { - border-left: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { - border-top: none; -} -.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { - border-right: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { - border-bottom: none; -} - -/* Spinner specific style fixes */ -.ui-controlgroup-vertical .ui-spinner-input { - - /* Support: IE8 only, Android < 4.4 only */ - width: 75%; - width: calc( 100% - 2.4em ); -} -.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { - border-top-style: solid; -} - -.ui-checkboxradio-label .ui-icon-background { - box-shadow: inset 1px 1px 1px #ccc; - border-radius: .12em; - border: none; -} -.ui-checkboxradio-radio-label .ui-icon-background { - width: 16px; - height: 16px; - border-radius: 1em; - overflow: visible; - border: none; -} -.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, -.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { - background-image: none; - width: 8px; - height: 8px; - border-width: 4px; - border-style: solid; -} -.ui-checkboxradio-disabled { - pointer-events: none; -} -.ui-datepicker { - width: 17em; - padding: .2em .2em 0; - display: none; -} -.ui-datepicker .ui-datepicker-header { - position: relative; - padding: .2em 0; -} -.ui-datepicker .ui-datepicker-prev, -.ui-datepicker .ui-datepicker-next { - position: absolute; - top: 2px; - width: 1.8em; - height: 1.8em; -} -.ui-datepicker .ui-datepicker-prev-hover, -.ui-datepicker .ui-datepicker-next-hover { - top: 1px; -} -.ui-datepicker .ui-datepicker-prev { - left: 2px; -} -.ui-datepicker .ui-datepicker-next { - right: 2px; -} -.ui-datepicker .ui-datepicker-prev-hover { - left: 1px; -} -.ui-datepicker .ui-datepicker-next-hover { - right: 1px; -} -.ui-datepicker .ui-datepicker-prev span, -.ui-datepicker .ui-datepicker-next span { - display: block; - position: absolute; - left: 50%; - margin-left: -8px; - top: 50%; - margin-top: -8px; -} -.ui-datepicker .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; -} -.ui-datepicker .ui-datepicker-title select { - font-size: 1em; - margin: 1px 0; -} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { - width: 45%; -} -.ui-datepicker table { - width: 100%; - font-size: .9em; - border-collapse: collapse; - margin: 0 0 .4em; -} -.ui-datepicker th { - padding: .7em .3em; - text-align: center; - font-weight: bold; - border: 0; -} -.ui-datepicker td { - border: 0; - padding: 1px; -} -.ui-datepicker td span, -.ui-datepicker td a { - display: block; - padding: .2em; - text-align: right; - text-decoration: none; -} -.ui-datepicker .ui-datepicker-buttonpane { - background-image: none; - margin: .7em 0 0 0; - padding: 0 .2em; - border-left: 0; - border-right: 0; - border-bottom: 0; -} -.ui-datepicker .ui-datepicker-buttonpane button { - float: right; - margin: .5em .2em .4em; - cursor: pointer; - padding: .2em .6em .3em .6em; - width: auto; - overflow: visible; -} -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { - float: left; -} - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { - width: auto; -} -.ui-datepicker-multi .ui-datepicker-group { - float: left; -} -.ui-datepicker-multi .ui-datepicker-group table { - width: 95%; - margin: 0 auto .4em; -} -.ui-datepicker-multi-2 .ui-datepicker-group { - width: 50%; -} -.ui-datepicker-multi-3 .ui-datepicker-group { - width: 33.3%; -} -.ui-datepicker-multi-4 .ui-datepicker-group { - width: 25%; -} -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { - border-left-width: 0; -} -.ui-datepicker-multi .ui-datepicker-buttonpane { - clear: left; -} -.ui-datepicker-row-break { - clear: both; - width: 100%; - font-size: 0; -} - -/* RTL support */ -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-rtl .ui-datepicker-prev { - right: 2px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next { - left: 2px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-prev:hover { - right: 1px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next:hover { - left: 1px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane { - clear: right; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button { - float: left; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, -.ui-datepicker-rtl .ui-datepicker-group { - float: right; -} -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; -} - -/* Icons */ -.ui-datepicker .ui-icon { - display: block; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; - left: .5em; - top: .3em; -} -.ui-dialog { - position: absolute; - top: 0; - left: 0; - padding: .2em; - outline: 0; -} -.ui-dialog .ui-dialog-titlebar { - padding: .4em 1em; - position: relative; -} -.ui-dialog .ui-dialog-title { - float: left; - margin: .1em 0; - white-space: nowrap; - width: 90%; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-dialog .ui-dialog-titlebar-close { - position: absolute; - right: .3em; - top: 50%; - width: 20px; - margin: -10px 0 0 0; - padding: 1px; - height: 20px; -} -.ui-dialog .ui-dialog-content { - position: relative; - border: 0; - padding: .5em 1em; - background: none; - overflow: auto; -} -.ui-dialog .ui-dialog-buttonpane { - text-align: left; - border-width: 1px 0 0 0; - background-image: none; - margin-top: .5em; - padding: .3em 1em .5em .4em; -} -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; -} -.ui-dialog .ui-dialog-buttonpane button { - margin: .5em .4em .5em 0; - cursor: pointer; -} -.ui-dialog .ui-resizable-n { - height: 2px; - top: 0; -} -.ui-dialog .ui-resizable-e { - width: 2px; - right: 0; -} -.ui-dialog .ui-resizable-s { - height: 2px; - bottom: 0; -} -.ui-dialog .ui-resizable-w { - width: 2px; - left: 0; -} -.ui-dialog .ui-resizable-se, -.ui-dialog .ui-resizable-sw, -.ui-dialog .ui-resizable-ne, -.ui-dialog .ui-resizable-nw { - width: 7px; - height: 7px; -} -.ui-dialog .ui-resizable-se { - right: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-sw { - left: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-ne { - right: 0; - top: 0; -} -.ui-dialog .ui-resizable-nw { - left: 0; - top: 0; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-progressbar { - height: 2em; - text-align: left; - overflow: hidden; -} -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height: 100%; -} -.ui-progressbar .ui-progressbar-overlay { - background: url("data:image/gif;base64,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"); - height: 100%; - filter: alpha(opacity=25); /* support: IE8 */ - opacity: 0.25; -} -.ui-progressbar-indeterminate .ui-progressbar-value { - background-image: none; -} -.ui-selectmenu-menu { - padding: 0; - margin: 0; - position: absolute; - top: 0; - left: 0; - display: none; -} -.ui-selectmenu-menu .ui-menu { - overflow: auto; - overflow-x: hidden; - padding-bottom: 1px; -} -.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { - font-size: 1em; - font-weight: bold; - line-height: 1.5; - padding: 2px 0.4em; - margin: 0.5em 0 0 0; - height: auto; - border: 0; -} -.ui-selectmenu-open { - display: block; -} -.ui-selectmenu-text { - display: block; - margin-right: 20px; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-selectmenu-button.ui-button { - text-align: left; - white-space: nowrap; - width: 14em; -} -.ui-selectmenu-icon.ui-icon { - float: right; - margin-top: 0; -} -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; - -ms-touch-action: none; - touch-action: none; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} - -/* support: IE8 - See #6727 */ -.ui-slider.ui-state-disabled .ui-slider-handle, -.ui-slider.ui-state-disabled .ui-slider-range { - filter: inherit; -} - -.ui-slider-horizontal { - height: .8em; -} -.ui-slider-horizontal .ui-slider-handle { - top: -.3em; - margin-left: -.6em; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} - -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -} -.ui-spinner { - position: relative; - display: inline-block; - overflow: hidden; - padding: 0; - vertical-align: middle; -} -.ui-spinner-input { - border: none; - background: none; - color: inherit; - padding: .222em 0; - margin: .2em 0; - vertical-align: middle; - margin-left: .4em; - margin-right: 2em; -} -.ui-spinner-button { - width: 1.6em; - height: 50%; - font-size: .5em; - padding: 0; - margin: 0; - text-align: center; - position: absolute; - cursor: default; - display: block; - overflow: hidden; - right: 0; -} -/* more specificity required here to override default borders */ -.ui-spinner a.ui-spinner-button { - border-top-style: none; - border-bottom-style: none; - border-right-style: none; -} -.ui-spinner-up { - top: 0; -} -.ui-spinner-down { - bottom: 0; -} -.ui-tabs { - position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ - padding: .2em; -} -.ui-tabs .ui-tabs-nav { - margin: 0; - padding: .2em .2em 0; -} -.ui-tabs .ui-tabs-nav li { - list-style: none; - float: left; - position: relative; - top: 0; - margin: 1px .2em 0 0; - border-bottom-width: 0; - padding: 0; - white-space: nowrap; -} -.ui-tabs .ui-tabs-nav .ui-tabs-anchor { - float: left; - padding: .5em 1em; - text-decoration: none; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active { - margin-bottom: -1px; - padding-bottom: 1px; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { - cursor: text; -} -.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { - cursor: pointer; -} -.ui-tabs .ui-tabs-panel { - display: block; - border-width: 0; - padding: 1em 1.4em; - background: none; -} -.ui-tooltip { - padding: 8px; - position: absolute; - z-index: 9999; - max-width: 300px; -} -body .ui-tooltip { - border-width: 2px; -} - -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Verdana,Arial,sans-serif; - font-size: 1.1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Verdana,Arial,sans-serif; - font-size: 1em; -} -.ui-widget.ui-widget-content { - border: 1px solid #d3d3d3; -} -.ui-widget-content { - border: 1px solid #aaaaaa; - background: #ffffff; - color: #222222; -} -.ui-widget-content a { - color: #222222; -} -.ui-widget-header { - border: 1px solid #aaaaaa; - background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; - color: #222222; - font-weight: bold; -} -.ui-widget-header a { - color: #222222; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default, -.ui-button, - -/* We use html here because we need a greater specificity to make sure disabled -works properly when clicked or hovered */ -html .ui-button.ui-state-disabled:hover, -html .ui-button.ui-state-disabled:active { - border: 1px solid #d3d3d3; - background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #555555; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited, -a.ui-button, -a:link.ui-button, -a:visited.ui-button, -.ui-button { - color: #555555; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus, -.ui-button:hover, -.ui-button:focus { - border: 1px solid #999999; - background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited, -a.ui-button:hover, -a.ui-button:focus { - color: #212121; - text-decoration: none; -} - -.ui-visual-focus { - box-shadow: 0 0 3px 1px rgb(94, 158, 214); -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - border: 1px solid #aaaaaa; - background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-icon-background, -.ui-state-active .ui-icon-background { - border: #aaaaaa; - background-color: #212121; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #212121; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #fcefa1; - background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; - color: #363636; -} -.ui-state-checked { - border: 1px solid #fcefa1; - background: #fbf9ee; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #363636; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #cd0a0a; - background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; - color: #cd0a0a; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #cd0a0a; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #cd0a0a; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); /* support: IE8 */ - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); /* support: IE8 */ - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-widget-header .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon, -.ui-button:hover .ui-icon, -.ui-button:focus .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-active .ui-icon, -.ui-button:active .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-highlight .ui-icon, -.ui-button .ui-state-highlight.ui-icon { - background-image: url("images/ui-icons_2e83ff_256x240.png"); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url("images/ui-icons_cd0a0a_256x240.png"); -} -.ui-button .ui-icon { - background-image: url("images/ui-icons_888888_256x240.png"); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-caret-1-n { background-position: 0 0; } -.ui-icon-caret-1-ne { background-position: -16px 0; } -.ui-icon-caret-1-e { background-position: -32px 0; } -.ui-icon-caret-1-se { background-position: -48px 0; } -.ui-icon-caret-1-s { background-position: -65px 0; } -.ui-icon-caret-1-sw { background-position: -80px 0; } -.ui-icon-caret-1-w { background-position: -96px 0; } -.ui-icon-caret-1-nw { background-position: -112px 0; } -.ui-icon-caret-2-n-s { background-position: -128px 0; } -.ui-icon-caret-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -65px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -65px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 1px -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 4px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ -} -.ui-widget-shadow { - -webkit-box-shadow: -8px -8px 8px #aaaaaa; - box-shadow: -8px -8px 8px #aaaaaa; -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/css/mono-theme.rtl.css b/Sources/php_script/script/phpMyAdmin/themes/metro/css/mono-theme.rtl.css deleted file mode 100644 index 970d04a..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/metro/css/mono-theme.rtl.css +++ /dev/null @@ -1,2 +0,0 @@ -@font-face{font-family:"Open Sans";src:local("☺"),local("Open Sans"),local("OpenSans");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Light";src:local("☺"),local("Open Sans Light"),local("OpenSans-Light");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Bold";src:local("☺"),local("Open Sans Bold"),local("OpenSans-Bold");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Extrabold";src:local("☺"),local("Open Sans Extrabold"),local("OpenSans-Extrabold");font-weight:normal;font-style:normal}:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #666;--bs-secondary: #ccc;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 102, 102, 102;--bs-secondary-rgb: 204, 204, 204;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 68, 68, 68;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: "Consolas", "Lucida Grande", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: Open Sans, Segoe UI, sans-serif;--bs-body-font-size: 0.6875rem;--bs-body-font-weight: 400;--bs-body-line-height: 1;--bs-body-color: #444;--bs-body-bg: #fff}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:normal;line-height:1.2}h1,.h1{font-size:3em}h2,.h2{font-size:3.6em}h3,.h3{font-size:1rem}h4,.h4{font-size:1.03125rem}h5,.h5{font-size:0.859375rem}h6,.h6{font-size:0.6875rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#666;text-decoration:none}a:hover{color:#666;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr ;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:0.859375rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-right:0;list-style:none}.list-inline{padding-right:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:0.859375rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-left:var(--bs-gutter-x, 0.75rem);padding-right:var(--bs-gutter-x, 0.75rem);margin-left:auto;margin-right:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-left:calc(-0.5*var(--bs-gutter-x));margin-right:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #444;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #444;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #000;--bs-table-hover-bg: #eee;width:100%;margin-bottom:1rem;color:#444;vertical-align:top;border-color:#ddd}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:0;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:0 solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:0 0}.table-bordered>:not(caption)>*>*{border-width:0 0}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(even)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #e0e0e0;--bs-table-striped-bg: #d5d5d5;--bs-table-striped-color: #000;--bs-table-active-bg: #cacaca;--bs-table-active-color: #000;--bs-table-hover-bg: #cfcfcf;--bs-table-hover-color: #000;color:#000;border-color:#cacaca}.table-secondary{--bs-table-bg: whitesmoke;--bs-table-striped-bg: #e9e9e9;--bs-table-striped-color: #000;--bs-table-active-bg: #dddddd;--bs-table-active-color: #000;--bs-table-hover-bg: #e3e3e3;--bs-table-hover-color: #000;color:#000;border-color:#ddd}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:0.859375rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.6015625rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:0.6875rem;font-weight:400;line-height:1;color:#444;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#444;background-color:#fff;border-color:#b3b3b3;outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.form-control::-webkit-date-and-time-value{height:1em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1;color:#444;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1em + 1rem + 2px);padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1em;border-radius:0}.form-control-color::-webkit-color-swatch{height:1em;border-radius:0}.form-select{display:block;width:100%;padding:.375rem .75rem .375rem 2.25rem;-moz-padding-start:calc(0.75rem - 3px);font-size:0.6875rem;font-weight:400;line-height:1;color:#444;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#b3b3b3;outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-left:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #444}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-right:.5rem;font-size:0.6015625rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;font-size:0.859375rem;border-radius:.3rem}.form-check{display:block;min-height:.6875rem;padding-right:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:right;margin-right:-1.5em}.form-check-input{width:1em;height:1em;margin-top:0em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#b3b3b3;outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.form-check-input:checked{background-color:#666;border-color:#666}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#666;border-color:#666;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-right:2.5em}.form-switch .form-check-input{width:2em;margin-right:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:right center;border-radius:2em}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23b3b3b3'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:left center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(102,102,102,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(102,102,102,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#666;border:0;border-radius:1rem;-webkit-appearance:none;appearance:none}.form-range::-webkit-slider-thumb:active{background-color:#d1d1d1}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#666;border:0;border-radius:1rem;-moz-appearance:none;appearance:none}.form-range::-moz-range-thumb:active{background-color:#d1d1d1}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;right:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:100% 0}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:0.6875rem;font-weight:400;line-height:1;color:#444;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:0}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.6015625rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:0}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-left:calc(1em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.25em + 0.1875rem) center;background-size:calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-left:calc(1em + 0.75rem);background-position:top calc(0.25em + 0.1875rem) left calc(0.25em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.6015625rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:0}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-left:calc(1em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.25em + 0.1875rem) center;background-size:calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-left:calc(1em + 0.75rem);background-position:top calc(0.25em + 0.1875rem) left calc(0.25em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1;color:#444;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .5rem;font-size:0.6875rem;border-radius:0}.btn:hover{color:#444;text-decoration:none}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#666;border-color:#666}.btn-primary:hover{color:#fff;background-color:#575757;border-color:#525252}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#575757;border-color:#525252;box-shadow:0 0 0 .25rem rgba(125,125,125,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#525252;border-color:#4d4d4d}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(125,125,125,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#666;border-color:#666}.btn-secondary{color:#000;background-color:#ccc;border-color:#ccc}.btn-secondary:hover{color:#000;background-color:#d4d4d4;border-color:#d1d1d1}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#000;background-color:#d4d4d4;border-color:#d1d1d1;box-shadow:0 0 0 .25rem rgba(173,173,173,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#000;background-color:#d6d6d6;border-color:#d1d1d1}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(173,173,173,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#000;background-color:#ccc;border-color:#ccc}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#666;border-color:#666}.btn-outline-primary:hover{color:#fff;background-color:#666;border-color:#666}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(102,102,102,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#666;border-color:#666}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(102,102,102,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#666;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#ccc;border-color:#ccc}.btn-outline-secondary:hover{color:#000;background-color:#ccc;border-color:#ccc}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(204,204,204,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#000;background-color:#ccc;border-color:#ccc}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(204,204,204,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#ccc;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:#666;text-decoration:none}.btn-link:hover{color:#666;text-decoration:underline}.btn-link:focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden}.collapsing.collapse-horizontal{width:0;height:auto}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:0.6875rem;color:#444;text-align:right;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:0}.dropdown-menu[data-bs-popper]{top:100%;right:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{left:0;right:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{left:0;right:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropend .dropdown-menu[data-bs-popper]{top:0;left:auto;right:100%;margin-top:0;margin-right:.125rem}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;left:100%;right:auto;margin-top:0;margin-left:.125rem}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#666}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:0.6015625rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#666}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-right:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-right:0}.dropstart .dropdown-toggle-split::before{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-top-left-radius:0}.nav{display:flex;flex-wrap:wrap;padding-right:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#666}.nav-link:hover,.nav-link:focus{color:#666;text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-right-radius:0;border-top-left-radius:0}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#fff #fff #ddd;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#000;background-color:#fff;border-color:#ddd #ddd #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:0}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#666}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:0;padding-left:0;padding-bottom:0;padding-right:0}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.4140625rem;padding-bottom:.4140625rem;margin-left:1rem;font-size:0.859375rem;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:0.859375rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:0}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:#666}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#666}.navbar-light .navbar-nav .nav-link{color:#666}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#333}.navbar-light .navbar-nav .nav-link.disabled{color:#666}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:#666}.navbar-light .navbar-toggler{color:#666;border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23666' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#666}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#666}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#f7f7f7;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-right-radius:0;border-top-left-radius:0}.card>.list-group:last-child{border-bottom-width:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-right:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:#f7f7f7;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:0 0 0 0}.card-footer{padding:.5rem 1rem;background-color:#f7f7f7;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 0 0}.card-header-tabs{margin-left:-0.5rem;margin-bottom:-0.5rem;margin-right:-0.5rem;border-bottom:0}.card-header-tabs .nav-link.active{background-color:#f7f7f7;border-bottom-color:#f7f7f7}.card-header-pills{margin-left:-0.5rem;margin-right:-0.5rem}.card-img-overlay{position:absolute;top:0;left:0;bottom:0;right:0;padding:1rem;border-radius:0}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-right-radius:0;border-top-left-radius:0}.card-img,.card-img-bottom{border-bottom-left-radius:0;border-bottom-right-radius:0}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-right:0;border-right:0}.card-group>.card:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-right-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:.375rem 1rem;font-size:0.6875rem;color:#444;text-align:right;background-color:#fff;border:0;border-radius:0;overflow-anchor:none}.accordion-button:not(.collapsed){color:#fff;background-color:#aaa;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-right:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23444'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#b3b3b3;outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-right-radius:0;border-top-left-radius:0}.accordion-item:first-of-type .accordion-button{border-top-right-radius:0;border-top-left-radius:0}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-item:last-of-type .accordion-collapse{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-left:0;border-right:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-right:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:right;padding-left:.5rem;color:#fff;content:var(--bs-breadcrumb-divider, none)}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-right:0;list-style:none}.page-link{position:relative;display:block;color:#666;background-color:#f7f7f7;border:1px solid #ddd}.page-link:hover{z-index:2;color:#666;text-decoration:none;background-color:#eee;border-color:#ddd}.page-link:focus{z-index:3;color:#666;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25)}.page-item:not(:first-child) .page-link{margin-right:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#666;border-color:#ddd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#ddd}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0}.page-item:last-child .page-link{border-top-left-radius:0;border-bottom-left-radius:0}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:0.859375rem}.pagination-lg .page-item:first-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.6015625rem}.pagination-sm .page-item:first-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1em;border:0 solid rgba(0,0,0,0);border-radius:0}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{position:absolute;top:0;left:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#3d3d3d;background-color:#e0e0e0;border-color:#d1d1d1}.alert-primary .alert-link{color:#313131}.alert-secondary{color:#525252;background-color:#f5f5f5;border-color:#f0f0f0}.alert-secondary .alert-link{color:#424242}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;border-radius:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#444;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;background-color:inherit;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-right-radius:inherit;border-top-left-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:inherit}.list-group-item.active{z-index:2;color:#fff;background-color:#666;border-color:#666}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#3d3d3d;background-color:#e0e0e0}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#3d3d3d;background-color:#cacaca}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#3d3d3d;border-color:#3d3d3d}.list-group-item-secondary{color:#525252;background-color:#f5f5f5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#525252;background-color:#ddd}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#525252;border-color:#525252}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:0;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(102,102,102,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.modal{position:fixed;top:0;right:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transform:translate(0, -50px)}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:0;outline:0}.modal-backdrop{position:fixed;top:0;right:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:.5rem 1rem;border-bottom:1px solid #ddd;border-top-right-radius:0;border-top-left-radius:0}.modal-header .btn-close{padding:.25rem .5rem;margin:-0.25rem auto -0.25rem -0.5rem}.modal-title{margin-bottom:0;line-height:1}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #ddd;border-bottom-left-radius:0;border-bottom-right-radius:0}.modal-footer>*{margin:.25rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}@-webkit-keyframes spinner-border{to{transform:rotate(-360deg)}}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-left-color:rgba(0,0,0,0);border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#666}.link-primary:hover,.link-primary:focus{color:#525252}.link-secondary{color:#ccc}.link-secondary:hover,.link-secondary:focus{color:#d6d6d6}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:right !important}.float-end{float:left !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{right:0 !important}.start-50{right:50% !important}.start-100{right:100% !important}.end-0{left:0 !important}.end-50{left:50% !important}.end-100{left:100% !important}.translate-middle{transform:translate(50%, -50%) !important}.translate-middle-x{transform:translateX(50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #ddd !important}.border-0{border:0 !important}.border-top{border-top:1px solid #ddd !important}.border-top-0{border-top:0 !important}.border-end{border-left:1px solid #ddd !important}.border-end-0{border-left:0 !important}.border-bottom{border-bottom:1px solid #ddd !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-right:1px solid #ddd !important}.border-start-0{border-right:0 !important}.border-primary{border-color:#666 !important}.border-secondary{border-color:#ccc !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-3{margin-left:1rem !important;margin-right:1rem !important}.mx-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-5{margin-left:3rem !important;margin-right:3rem !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-left:0 !important}.me-1{margin-left:.25rem !important}.me-2{margin-left:.5rem !important}.me-3{margin-left:1rem !important}.me-4{margin-left:1.5rem !important}.me-5{margin-left:3rem !important}.me-auto{margin-left:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-right:0 !important}.ms-1{margin-right:.25rem !important}.ms-2{margin-right:.5rem !important}.ms-3{margin-right:1rem !important}.ms-4{margin-right:1.5rem !important}.ms-5{margin-right:3rem !important}.ms-auto{margin-right:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-left:0 !important;padding-right:0 !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-3{padding-left:1rem !important;padding-right:1rem !important}.px-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-5{padding-left:3rem !important;padding-right:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-left:0 !important}.pe-1{padding-left:.25rem !important}.pe-2{padding-left:.5rem !important}.pe-3{padding-left:1rem !important}.pe-4{padding-left:1.5rem !important}.pe-5{padding-left:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-right:0 !important}.ps-1{padding-right:.25rem !important}.ps-2{padding-right:.5rem !important}.ps-3{padding-right:1rem !important}.ps-4{padding-right:1.5rem !important}.ps-5{padding-right:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:3em !important}.fs-2{font-size:3.6em !important}.fs-3{font-size:1rem !important}.fs-4{font-size:1.03125rem !important}.fs-5{font-size:0.859375rem !important}.fs-6{font-size:0.6875rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1 !important}.lh-lg{line-height:2 !important}.text-start{text-align:right !important}.text-end{text-align:left !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:0 !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:0 !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-right-radius:0 !important;border-top-left-radius:0 !important}.rounded-end{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom{border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-start{border-bottom-right-radius:0 !important;border-top-right-radius:0 !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:right !important}.float-sm-end{float:left !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-left:0 !important;margin-right:0 !important}.mx-sm-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-sm-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-sm-3{margin-left:1rem !important;margin-right:1rem !important}.mx-sm-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-sm-5{margin-left:3rem !important;margin-right:3rem !important}.mx-sm-auto{margin-left:auto !important;margin-right:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-left:0 !important}.me-sm-1{margin-left:.25rem !important}.me-sm-2{margin-left:.5rem !important}.me-sm-3{margin-left:1rem !important}.me-sm-4{margin-left:1.5rem !important}.me-sm-5{margin-left:3rem !important}.me-sm-auto{margin-left:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-right:0 !important}.ms-sm-1{margin-right:.25rem !important}.ms-sm-2{margin-right:.5rem !important}.ms-sm-3{margin-right:1rem !important}.ms-sm-4{margin-right:1.5rem !important}.ms-sm-5{margin-right:3rem !important}.ms-sm-auto{margin-right:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-left:0 !important;padding-right:0 !important}.px-sm-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-sm-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-sm-3{padding-left:1rem !important;padding-right:1rem !important}.px-sm-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-sm-5{padding-left:3rem !important;padding-right:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-left:0 !important}.pe-sm-1{padding-left:.25rem !important}.pe-sm-2{padding-left:.5rem !important}.pe-sm-3{padding-left:1rem !important}.pe-sm-4{padding-left:1.5rem !important}.pe-sm-5{padding-left:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-right:0 !important}.ps-sm-1{padding-right:.25rem !important}.ps-sm-2{padding-right:.5rem !important}.ps-sm-3{padding-right:1rem !important}.ps-sm-4{padding-right:1.5rem !important}.ps-sm-5{padding-right:3rem !important}.text-sm-start{text-align:right !important}.text-sm-end{text-align:left !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:right !important}.float-md-end{float:left !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-left:0 !important;margin-right:0 !important}.mx-md-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-md-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-md-3{margin-left:1rem !important;margin-right:1rem !important}.mx-md-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-md-5{margin-left:3rem !important;margin-right:3rem !important}.mx-md-auto{margin-left:auto !important;margin-right:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-left:0 !important}.me-md-1{margin-left:.25rem !important}.me-md-2{margin-left:.5rem !important}.me-md-3{margin-left:1rem !important}.me-md-4{margin-left:1.5rem !important}.me-md-5{margin-left:3rem !important}.me-md-auto{margin-left:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-right:0 !important}.ms-md-1{margin-right:.25rem !important}.ms-md-2{margin-right:.5rem !important}.ms-md-3{margin-right:1rem !important}.ms-md-4{margin-right:1.5rem !important}.ms-md-5{margin-right:3rem !important}.ms-md-auto{margin-right:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-left:0 !important;padding-right:0 !important}.px-md-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-md-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-md-3{padding-left:1rem !important;padding-right:1rem !important}.px-md-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-md-5{padding-left:3rem !important;padding-right:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-left:0 !important}.pe-md-1{padding-left:.25rem !important}.pe-md-2{padding-left:.5rem !important}.pe-md-3{padding-left:1rem !important}.pe-md-4{padding-left:1.5rem !important}.pe-md-5{padding-left:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-right:0 !important}.ps-md-1{padding-right:.25rem !important}.ps-md-2{padding-right:.5rem !important}.ps-md-3{padding-right:1rem !important}.ps-md-4{padding-right:1.5rem !important}.ps-md-5{padding-right:3rem !important}.text-md-start{text-align:right !important}.text-md-end{text-align:left !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:right !important}.float-lg-end{float:left !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-left:0 !important;margin-right:0 !important}.mx-lg-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-lg-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-lg-3{margin-left:1rem !important;margin-right:1rem !important}.mx-lg-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-lg-5{margin-left:3rem !important;margin-right:3rem !important}.mx-lg-auto{margin-left:auto !important;margin-right:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-left:0 !important}.me-lg-1{margin-left:.25rem !important}.me-lg-2{margin-left:.5rem !important}.me-lg-3{margin-left:1rem !important}.me-lg-4{margin-left:1.5rem !important}.me-lg-5{margin-left:3rem !important}.me-lg-auto{margin-left:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-right:0 !important}.ms-lg-1{margin-right:.25rem !important}.ms-lg-2{margin-right:.5rem !important}.ms-lg-3{margin-right:1rem !important}.ms-lg-4{margin-right:1.5rem !important}.ms-lg-5{margin-right:3rem !important}.ms-lg-auto{margin-right:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-left:0 !important;padding-right:0 !important}.px-lg-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-lg-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-lg-3{padding-left:1rem !important;padding-right:1rem !important}.px-lg-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-lg-5{padding-left:3rem !important;padding-right:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-left:0 !important}.pe-lg-1{padding-left:.25rem !important}.pe-lg-2{padding-left:.5rem !important}.pe-lg-3{padding-left:1rem !important}.pe-lg-4{padding-left:1.5rem !important}.pe-lg-5{padding-left:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-right:0 !important}.ps-lg-1{padding-right:.25rem !important}.ps-lg-2{padding-right:.5rem !important}.ps-lg-3{padding-right:1rem !important}.ps-lg-4{padding-right:1.5rem !important}.ps-lg-5{padding-right:3rem !important}.text-lg-start{text-align:right !important}.text-lg-end{text-align:left !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:right !important}.float-xl-end{float:left !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-left:0 !important;margin-right:0 !important}.mx-xl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xl-auto{margin-left:auto !important;margin-right:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-left:0 !important}.me-xl-1{margin-left:.25rem !important}.me-xl-2{margin-left:.5rem !important}.me-xl-3{margin-left:1rem !important}.me-xl-4{margin-left:1.5rem !important}.me-xl-5{margin-left:3rem !important}.me-xl-auto{margin-left:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-right:0 !important}.ms-xl-1{margin-right:.25rem !important}.ms-xl-2{margin-right:.5rem !important}.ms-xl-3{margin-right:1rem !important}.ms-xl-4{margin-right:1.5rem !important}.ms-xl-5{margin-right:3rem !important}.ms-xl-auto{margin-right:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-left:0 !important;padding-right:0 !important}.px-xl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-left:0 !important}.pe-xl-1{padding-left:.25rem !important}.pe-xl-2{padding-left:.5rem !important}.pe-xl-3{padding-left:1rem !important}.pe-xl-4{padding-left:1.5rem !important}.pe-xl-5{padding-left:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-right:0 !important}.ps-xl-1{padding-right:.25rem !important}.ps-xl-2{padding-right:.5rem !important}.ps-xl-3{padding-right:1rem !important}.ps-xl-4{padding-right:1.5rem !important}.ps-xl-5{padding-right:3rem !important}.text-xl-start{text-align:right !important}.text-xl-end{text-align:left !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:right !important}.float-xxl-end{float:left !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-left:0 !important;margin-right:0 !important}.mx-xxl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xxl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xxl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xxl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xxl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xxl-auto{margin-left:auto !important;margin-right:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-left:0 !important}.me-xxl-1{margin-left:.25rem !important}.me-xxl-2{margin-left:.5rem !important}.me-xxl-3{margin-left:1rem !important}.me-xxl-4{margin-left:1.5rem !important}.me-xxl-5{margin-left:3rem !important}.me-xxl-auto{margin-left:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-right:0 !important}.ms-xxl-1{margin-right:.25rem !important}.ms-xxl-2{margin-right:.5rem !important}.ms-xxl-3{margin-right:1rem !important}.ms-xxl-4{margin-right:1.5rem !important}.ms-xxl-5{margin-right:3rem !important}.ms-xxl-auto{margin-right:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-left:0 !important;padding-right:0 !important}.px-xxl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xxl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xxl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xxl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xxl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-left:0 !important}.pe-xxl-1{padding-left:.25rem !important}.pe-xxl-2{padding-left:.5rem !important}.pe-xxl-3{padding-left:1rem !important}.pe-xxl-4{padding-left:1.5rem !important}.pe-xxl-5{padding-left:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-right:0 !important}.ps-xxl-1{padding-right:.25rem !important}.ps-xxl-2{padding-right:.5rem !important}.ps-xxl-3{padding-right:1rem !important}.ps-xxl-4{padding-right:1.5rem !important}.ps-xxl-5{padding-right:3rem !important}.text-xxl-start{text-align:right !important}.text-xxl-end{text-align:left !important}.text-xxl-center{text-align:center !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}#li_select_fontsize{display:none}font[color=red],span[style="color: #FF0000"]{color:#666 !important}strong{font-weight:normal}body#loginform{margin:0;background-color:#666}body#loginform .card-header,body#loginform form#login_form label{display:none !important}body#loginform #page_content{background-color:#666;margin:0 !important;padding:20px;margin-top:10% !important;min-height:240px}body#loginform div.container{color:#fff;text-align:right;width:48em;margin-right:auto;margin-left:auto}body#loginform div.container::before{color:#fff;background:url("../img/user.svg");content:"";float:right;margin-left:20px;margin-bottom:10px;background-color:#666;background-repeat:no-repeat;background-size:cover;overflow:hidden;height:240px;width:240px;line-height:1;text-align:center}body#loginform h1,body#loginform .h1{display:inline-block;text-align:right;color:#fff;font-size:2.5em;padding-top:0;margin-left:-50%;line-height:2}body#loginform a.logo,body#loginform .pma-fieldset legend{display:none}body#loginform .item{margin-bottom:10px}body#loginform input.textfield{width:100%;border:1px solid #fff;background:#fff;color:#666;box-sizing:border-box;margin:0}body#loginform input.textfield:hover,body#loginform input.textfield:focus{background-color:#fff;color:#333;box-sizing:border-box;margin:0}body#loginform input[type=submit]{background-color:#666;border:none;padding:7px;margin:0}body#loginform select{margin:0 !important;border:1px solid #666;background:#666;color:#fff;padding-right:0 !important;font-family:"Open Sans","Segoe UI",sans-serif;min-width:100%}body#loginform select:hover{border:1px solid #fff}body#loginform br{display:none}body#loginform .card-body{padding-top:0;padding-right:0;padding-left:0}body#loginform .card,body#loginform .card-footer,body#loginform .pma-fieldset{border:none;color:#fff;padding:0;margin-top:0;margin-bottom:10px;background:none}body#loginform .card:first-child,body#loginform .card-footer:first-child,body#loginform .pma-fieldset:first-child{border-bottom:none;margin:0}body#loginform .card.tblFooters,body#loginform .card-footer.tblFooters,body#loginform .pma-fieldset.tblFooters{border:none;margin:0;clear:none}.turnOffSelect{-webkit-user-select:none;-moz-user-select:none;user-select:none}#page_content{margin:20px !important}h2 img,.h2 img{display:none}h2 a img,.h2 a img{display:inline}.data{margin:10px 0}button.mult_submit,.checkall_box+label{text-decoration:none;color:#235a81;cursor:pointer;outline:none}button.mult_submit:hover,button.mult_submit:focus{text-decoration:underline;color:#235a81}.checkall_box+label:hover{text-decoration:underline;color:#235a81}dfn:hover{cursor:help}.data th{border-bottom:1px solid #ddd}.data th a:hover{color:#999 !important}.column_heading,.column_action{border:1px solid #ddd;background-color:#f6f6f6}a img{border:0}hr{color:#ddd;background-color:#ddd;border:0;height:1px}form{padding:0;margin:0;display:inline}input[type=text],input[type=password],input[type=number]{border:1px solid #ccc;color:#666;padding:5px;font-family:"Open Sans","Segoe UI",sans-serif;background-color:#fff}input[type=text]:focus,input[type=password]:focus,input[type=number]:focus{border:1px solid #999;color:#444}input:not(.form-control)[type=text],input:not(.form-control)[type=password],input:not(.form-control)[type=number]{margin:6px}.sqlbutton{margin-top:1em;margin-right:0 !important;margin-left:14px !important}button:not(.accordion-button){margin-right:14px;padding:4px;color:#fff;text-decoration:none;background-color:#aaa}textarea{overflow:visible;border:1px solid #ccc;color:#666;background-color:#fff}.pma-fieldset{margin-top:20px;border:1px solid #ddd;padding:20px;background-color:#f7f7f7}.pma-fieldset .pma-fieldset{margin:20px;margin-bottom:0;background-color:#fff;border:none}legend{float:none;padding:0 5px;width:initial;font-size:1em}button{display:inline}img,button{vertical-align:middle}select{border:1px solid #ccc;color:#666;padding:4px;font-family:"Open Sans","Segoe UI",sans-serif;background-color:#fff;max-width:17em}select:not(.form-select){margin:5px}select:focus{border:1px solid #999;color:#444}.clearfloat{clear:both}.paddingtop{padding-top:1em}.separator{color:#fff}.result_query{background:#f7f7f7;margin-bottom:20px}div.tools{padding:10px;text-align:left}div.tools span{float:left;margin:6px 2px}div.tools a{color:#555 !important}.pma-fieldset.tblFooters{margin-top:-1px;border-top:0;text-align:left;float:none;clear:both}div.null_div{height:20px;text-align:center;font-style:normal;min-width:50px}.pma-fieldset .formelement{float:right;margin-left:.5em}.pma-fieldset div[class=formelement]{white-space:normal}button.mult_submit{border:none;background-color:rgba(0,0,0,0);color:#666;margin:0}.structure_actions_dropdown{background-color:#eee;color:#444}.structure_actions_dropdown .icon{vertical-align:middle !important}.condition{border-color:#666 !important}th.condition{border:1px solid #666;background:#666;color:#fff !important}th.condition a{border:1px solid #666;background:#666;color:#fff !important}td.condition{border:1px solid}td.null{font-style:italic;color:#7d7d7d}table .valueHeader,table .value{text-align:left;white-space:normal}.value{font-family:"Consolas","Lucida Grande",monospace}img.lightbulb{cursor:pointer}.pdflayout{overflow:hidden;clip:inherit;background-color:#fff;display:none;border:1px solid #000;position:relative}.pdflayout_table{background:#d3dce3;color:#000;overflow:hidden;clip:inherit;z-index:2;display:inline;visibility:inherit;cursor:move;position:absolute;font-size:80%;border:1px dashed #000}.cm-sql-doc{text-decoration:none;border-bottom:1px dotted #999;color:inherit !important}.selectallarrow{margin-left:.3em;margin-right:.6em}.with-selected{margin-right:2em}#pma_errors,#pma_demo,#pma_footer{position:relative;padding:20px}#pma_errors #pma_errors{padding:0}.confirmation{color:#fff;background-color:#666}.pma-fieldset.confirmation legend{background-color:#666}.error{border:1px solid #666 !important;padding:5px;color:#fff;background-color:#666}.column_name{font-size:80%;margin:5px 2px}.new_central_col{width:100%}.tblcomment{font-size:70%;font-weight:normal;color:#009}.tblHeaders{font-family:"Open Sans Bold",sans-serif;color:#666;background:#f7f7f7;font-weight:normal}div.tools,.tblFooters{font-weight:normal;color:#666;background:#f7f7f7}.tblHeaders a:link,.tblHeaders a:active,.tblHeaders a:visited,div.tools a:link,div.tools a:active,div.tools a:visited,.tblFooters a:link,.tblFooters a:active,.tblFooters a:visited{color:blue}.tblHeaders a:hover,div.tools a:hover,.tblFooters a:hover{color:red}.disabled{color:#666}.disabled a:link,.disabled a:active,.disabled a:visited{color:#666}.disabled a:hover{color:#666;text-decoration:none}tr.disabled td,td.disabled{background-color:#f3f3f3;color:#aaa}.pre_wrap{white-space:pre-wrap}.pre_wrap br{display:none}li.last.database{margin-bottom:15px !important}div#dataDisplay input,div#dataDisplay select{margin:0;margin-left:.5em}div#dataDisplay th{line-height:2em}img.calendar{border:none}form.clock{text-align:center}div#tablestatistics table{float:right;margin-bottom:.5em;margin-left:1.5em;margin-top:.5em;min-width:16em}#topmenucontainer{width:100%}#page_nav_icons{position:fixed;top:0;left:0;z-index:99;padding:.89rem 0}#page_settings_icon{cursor:pointer;display:none}#page_settings_modal,#pma_navigation_settings{display:none}#span_table_comment{font-weight:normal;font-style:italic;white-space:nowrap;margin-right:10px}#textSQLDUMP{width:95%;height:95%;font-family:"Consolas","Lucida Grande",monospace;font-size:110%}#TooltipContainer{position:absolute;z-index:99;width:20em;height:auto;overflow:visible;visibility:hidden;background-color:#ffc;color:#060;border:.1em solid #000;padding:.5em}#fieldset_add_user_login div.item{display:flex;align-items:center;border-bottom:1px solid #ddd;padding-bottom:.3em;margin-bottom:.3em}#fieldset_add_user_login label{float:right;display:block;width:10em;max-width:100%;text-align:left;padding-left:.5em;margin-bottom:0}#fieldset_add_user_login span.options{float:right;display:block;width:12em;max-width:100%;padding-left:.5em}#fieldset_add_user_login span.options #select_pred_username,#fieldset_add_user_login span.options #select_pred_hostname,#fieldset_add_user_login span.options #select_pred_password{width:100%;max-width:100%}#fieldset_add_user_login input{width:12em;clear:left;max-width:100%}#fieldset_add_user_login span.options input{width:auto}#fieldset_add_user_login span.options input[type=button]{margin:4px}#fieldset_user_priv div.item{float:right;width:9em;max-width:100%}#fieldset_user_priv div.item div.item{float:none}#fieldset_user_priv div.item label{white-space:nowrap}#fieldset_user_priv div.item select{width:100%}#fieldset_user_global_rights .pma-fieldset,#fieldset_user_group_rights .pma-fieldset{float:right}.linkElem:hover{text-decoration:underline;color:#235a81;cursor:pointer}h3#serverstatusqueries span,#serverstatusqueries.h3 span{font-size:60%;display:inline}div#serverStatusTabs{margin-top:1em}caption a.top{float:left}div#serverstatusquerieschart{float:right;width:500px;height:350px;padding-right:30px}div#serverstatus table tbody td.descr a,div#serverstatus table .tblFooters a{white-space:nowrap}div.liveChart{clear:both;min-width:500px;height:400px;padding-bottom:80px}div#chartVariableSettings{margin-right:10px}table#chartGrid td{padding:3px;margin:0}table#chartGrid div.monitorChart{background:#f7f7f7;min-width:1px}div.tabLinks{margin-right:.3em;float:right;padding:5px 0}div.tabLinks a,div.tabLinks label{margin-left:7px}div.tabLinks .icon{margin:-0.2em 0 0 .3em}.popupContent{display:none;position:absolute;border:1px solid #ccc;margin:0;padding:3px;background-color:#fff;z-index:2}div#logTable{padding-top:10px;clear:both}div#logTable table{width:100%}div#queryAnalyzerDialog{min-width:700px}div#queryAnalyzerDialog div.CodeMirror-scroll{height:auto}div#queryAnalyzerDialog div#queryProfiling{height:300px}div#queryAnalyzerDialog td.explain{width:250px}div#queryAnalyzerDialog table.queryNums{display:none;border:0;text-align:right}.smallIndent{padding-right:7px}div#profilingchart{width:850px;height:370px;float:right}#resizer{border:1px solid silver}#inner-resizer{padding:10px}#togglequerybox{margin:0 10px}#serverstatus h3,#serverstatus .h3{margin:15px 0;font-weight:normal;color:#999;font-size:1.7em}textarea#sqlquery{width:100%;border:1px solid #aaa;padding:5px;font-family:inherit}textarea#sql_query_edit{height:7em;width:95%;display:block}#mysqlmaininformation,#pmamaininformation{float:right;width:49%}#maincontainer ul{list-style-type:square;vertical-align:middle;color:#666;margin-right:20px}#maincontainer ul li{line-height:1.5}#full_name_layer{position:absolute;padding:2px;margin-top:-3px;z-index:801;border:solid 1px #888;background:#fff}li br{display:none}li#li_mysql_client_version{overflow:hidden;text-overflow:ellipsis}#body_browse_foreigners{background:#666;margin:.5em .5em 0 .5em}#bodyquerywindow{background:#666}#bodythemes{width:500px;margin:auto;text-align:center}#bodythemes img{border:.1em solid #000}#bodythemes a:hover img{border:.1em solid red}#selflink{clear:both;display:block;margin-top:20px;margin-bottom:20px;margin-right:20px;margin-left:20px;border-top:1px solid silver;text-align:left}.operations_half_width{width:100%;float:right;margin-bottom:10px}.operations_full_width{width:100%;clear:both}#qbe_div_table_list,#qbe_div_sql_query{float:right}kbd{color:#444;background-color:rgba(0,0,0,0);box-shadow:none}code{font-size:1em;color:#444}code.php{display:block;padding-right:.3em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}.sqlOuter code.sql,div.sqlvalidate,#inline_editor_outer{display:block;padding:1em;margin:1em;overflow:auto;background-color:#fff;border:1px solid #ddd;direction:rtl}textarea#partitiondefinition{height:3em}.hide{display:none}#list_server{list-style-image:none;padding:0}div.upload_progress{width:400px;margin:3em auto;text-align:center}div.upload_progress_bar_outer{border:1px solid #000;width:202px;position:relative;margin:0 auto 1em;color:#444}div.upload_progress_bar_inner{background-color:#666;width:0;height:12px;margin:1px;overflow:hidden;color:#000;position:relative}div.upload_progress_bar_outer div.percentage{position:absolute;top:0;right:0;width:202px}div.upload_progress_bar_inner div.percentage{top:-1px;right:-1px}div#statustext{margin-top:.5em}table#serverconnection_src_remote,table#serverconnection_trg_remote,table#serverconnection_src_local,table#serverconnection_trg_local{float:right}input[type=text].invalid_value,input[type=password].invalid_value,input[type=number].invalid_value,input[type=date].invalid_value .invalid_value{background:#fcc}.ajax_notification{top:0;position:fixed;z-index:1100;text-align:center;display:inline;right:0;left:0;background-image:url("../img/ajax_clock_small.gif");background-repeat:no-repeat;background-position:54%;margin:0;background-color:#fff;color:#444;padding:10px !important;border:none}.dismissable{margin-right:-10px;margin-top:-10px}#loading_parent{position:relative;width:100%}#popup_background{display:none;position:fixed;width:100%;height:100%;top:0;right:0;background:#000;z-index:1000;overflow:hidden}#tablestructure tbody label{margin:.3rem 0}#structure-action-links a{margin-left:1em}#index_frm .index_info input,#index_frm .index_info select{width:14em;box-sizing:border-box}#index_frm .index_info div{padding:.2em 0}#index_frm .index_info .label{float:right;min-width:12em}#index_frm .slider{width:10em;margin:.6em;float:right}#index_frm .add_fields{float:right}#index_frm .add_fields input{margin-right:1em}#index_frm input{margin:0}#index_frm td{vertical-align:middle}table#index_columns{width:100%}table#index_columns select{width:85%;float:left}#move_columns_dialog div{padding:1em}#move_columns_dialog ul{list-style:none;margin:0;padding:0}#move_columns_dialog li{background:#f7f7f7;border:1px solid #aaa;color:#666;font-weight:bold;margin:.4em;padding:.2em}.config-form .pma-fieldset{margin-top:0;padding:0;clear:both;background:none}.config-form legend{display:none}.config-form .pma-fieldset p{margin:0;padding:10px;background:#fff;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;font-size:16px}.config-form .pma-fieldset .errors{margin:0 -2px 1em;padding:.5em 1.5em;background:#fbead9;border-color:#c83838;border-style:solid;border-width:1px 0;list-style:none;font-family:sans-serif;font-size:small}.config-form .pma-fieldset .inline_errors{margin:.3em .3em .3em;margin-right:0;padding:0;list-style:none;color:#9a0000;font-size:small}.config-form .pma-fieldset table{background-color:#fff}.config-form .pma-fieldset label{font-weight:normal}.config-form .pma-fieldset textarea{margin:5px;padding:5px}.insertRowTable textarea{margin:5px;padding:5px}.config-form .card{margin-top:0}.config-form fieldset th{padding:10px;padding-right:.5em;text-align:right;vertical-align:top}.config-form fieldset .doc{margin-right:1em}.config-form fieldset .disabled-notice{margin-right:1em;font-size:80%;text-transform:uppercase;color:#e00;cursor:help}.config-form fieldset td{padding-top:.3em;padding-bottom:.3em;vertical-align:top;border-bottom:1px #fff solid;border-left:none}.config-form fieldset th{border-bottom:1px #fff solid;border-left:none}.config-form fieldset th small,.config-form fieldset th .small{display:block;font-weight:normal;font-family:sans-serif;font-size:x-small;color:#444}fieldset .group-header th{background:#fff}fieldset .group-header+tr th{padding-top:.6em}fieldset .group-field-1 th,fieldset .group-header-2 th{padding-right:1.5em}fieldset .group-field-2 th,fieldset .group-header-3 th{padding-right:3em}fieldset .group-field-3 th{padding-right:4.5em}fieldset .disabled-field th{color:#666;background-color:#ddd}fieldset .disabled-field th small,fieldset .disabled-field th .small{color:#666;background-color:#ddd}fieldset .disabled-field td{color:#666;background-color:#ddd}form.create_table_form .pma-fieldset.tblFooters,form#multi_edit_central_columns .pma-fieldset.tblFooters{background:none;border:none}#db_or_table_specific_priv .tblFooters{margin-top:-68px}#edit_user_dialog,#add_user_dialog{margin:20px !important}.config-form span.checkbox{padding:2px;display:inline-block}.config-form .custom{background:#ffc}.config-form span.checkbox.custom{padding:1px;border:1px #edec90 solid;background:#ffc}.config-form img.ic_s_reload{filter:invert(70%)}.config-form .field-error{border-color:#a11 !important}.config-form input[type=text],.config-form input[type=password],.config-form input[type=number]{border:1px #a7a6aa solid;height:auto}.config-form input[type=text]:focus,.config-form input[type=password]:focus,.config-form input[type=number]:focus{border:1px #6676ff solid;background:#f7fbff}.config-form select,.config-form textarea{border:1px #a7a6aa solid;height:auto}.config-form select:focus,.config-form textarea:focus{border:1px #6676ff solid;background:#f7fbff}.config-form .field-comment-mark{font-family:serif;color:#007;cursor:help;padding:0 .2em;font-weight:bold;font-style:italic}.config-form .field-comment-warning{color:#a00}.config-form dd{margin-right:.5em}.config-form dd::before{content:"▸ "}.click-hide-message{cursor:pointer}.prefsmanage_opts{margin-right:2em}#prefs_autoload{margin-bottom:.5em;margin-right:.5em}input#auto_increment_opt{width:-webkit-min-content;width:-moz-min-content;width:min-content}#placeholder .button{position:absolute;cursor:pointer}#placeholder div.button{font-size:smaller;color:#999;background-color:#eee;padding:2px}.wrapper{float:right;margin-bottom:1.5em}.toggleButton{position:relative;cursor:pointer;font-size:.8em;text-align:center;line-height:1.4em;height:1.55em;overflow:hidden;border-left:.1em solid #888;border-right:.1em solid #888}.toggleButton table,.toggleButton td,.toggleButton img{padding:0;position:relative}.toggleButton .toggle-container{position:absolute}.toggleButton .toggle-container td{background:none}.toggleButton .toggleOn{color:#fff;padding:0 1em}.toggleButton .toggleOff{padding:0 1em}.doubleFieldset .pma-fieldset{width:48%;float:right;padding:0}.doubleFieldset legend{margin-right:1.5em}.doubleFieldset div.wrap{padding:1.5em}form.append_fields_form .tblFooters{background:none;border:none}#table_columns{display:block;overflow:auto}#table_columns input[type=text],#table_columns input[type=password],#table_columns input[type=number],#table_columns input[type=date]{width:10em;box-sizing:border-box}#table_columns select{width:10em;box-sizing:border-box;margin:6px}#placeholder{position:relative;border:1px solid #aaa;float:left;overflow:hidden}#placeholder .button{position:absolute}.placeholderDrag{cursor:move}#left_arrow{right:8px;top:26px}#right_arrow{right:26px;top:26px}#up_arrow{right:17px;top:8px}#down_arrow{right:17px;top:44px}#zoom_in{right:17px;top:67px}#zoom_world{right:17px;top:85px}#zoom_out{right:17px;top:103px}.colborder{cursor:col-resize;height:100%;margin-right:-6px;position:absolute;width:5px}.colborder_active{border-left:2px solid #a44}.pma_table th.draggable span{display:block;overflow:hidden}.pma_table td{position:static}.pma_table tbody td span{display:block;overflow:hidden}.pma_table tbody td span code span{display:inline}.modal-copy input{display:block;width:100%;margin-top:1.5em;padding:.3em 0}.cRsz{position:absolute}.cCpy{background:#333;color:#fff;font-weight:bold;margin:.1em;padding:.3em;position:absolute}.cPointer{height:20px;width:10px;margin-right:-10px;margin-top:-5px;position:absolute;background:url("../img/col_pointer.png")}.tooltip{background:#333 !important;opacity:.8 !important;z-index:9999;border:1px solid #000 !important;font-size:10px !important;font-weight:normal !important;padding:5px !important;width:260px;line-height:1.5}.tooltip *{background:none !important;color:#fff !important}.cDrop{left:0;position:absolute;top:0}.coldrop{background:url("../img/col_drop.png");cursor:pointer;height:16px;margin-top:.3em;width:16px}.coldrop:hover{background-color:#999}.coldrop-hover{background-color:#999}.cList{background:#fff;border:solid 1px #ccc;position:absolute;margin-right:75%;left:0;max-width:100%;overflow-wrap:break-word}.cList .lDiv div{padding:.2em .5em .2em;padding-right:.2em}.cList .lDiv div:hover{background:#666;cursor:pointer;color:#fff}.cList .lDiv div input{cursor:pointer}.showAllColBtn{border-bottom:solid 1px #ccc;border-top:solid 1px #ccc;cursor:pointer;font-size:.9em;font-family:"Open Sans Bold",sans-serif;padding:.35em 1em;text-align:center;font-weight:normal}.showAllColBtn:hover{background:#666;cursor:pointer;color:#fff}#page_content{line-height:1.5}.navigation_separator{color:#eee;display:inline-block;font-size:1.5em;text-align:center;height:1.4em}.navigation{width:100%;background-color:#666;color:#fff}.navigation td{margin:0;padding:0;vertical-align:middle;white-space:nowrap}.navigation input[type=submit]{background:#666;color:#fff;border:none;filter:none;margin:5px;padding:.4em}.navigation input[type=submit]:hover{color:#fff;cursor:pointer;background-color:#666}.navigation input.edit_mode_active{color:#fff;cursor:pointer;background-color:#666}.navigation select{margin:0 .8em;border:none}.navigation input[type=text]{border:none}.navigation_goto{width:100%}.insertRowTable td,.insertRowTable th{vertical-align:middle}.cEdit{margin:0;padding:0;position:absolute}.cEdit input[type=text],.cEdit input[type=password],.cEdit input[type=number]{background:#fff;height:100%;margin:0;padding:0}.cEdit .edit_area{background:#fff;border:1px solid #999;min-width:10em;padding:.3em .5em}.cEdit .edit_area select,.cEdit .edit_area textarea{width:97%}.cEdit .cell_edit_hint{color:#555;font-size:.8em;margin:.3em .2em}.cEdit .edit_box{overflow-x:hidden;overflow-y:scroll;padding:0;margin-top:10px}.cEdit .edit_box_posting{background:#fff url("../img/ajax_clock_small.gif") no-repeat left center;padding-left:1.5em}.cEdit .edit_area_loading{background:#fff url("../img/ajax_clock_small.gif") no-repeat center;height:10em}.cEdit .goto_link{background:#eee;color:#555;padding:.2em .3em}.saving_edited_data{background:url("../img/ajax_clock_small.gif") no-repeat right;padding-right:20px}.relationalTable select{width:125px;margin-left:5px}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:right}.ui-timepicker-div dl dt{height:25px;margin-bottom:-25px}.ui-timepicker-div dl dd{margin:0 85px 10px 10px}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:none;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:ltr}.ui-timepicker-rtl dl{text-align:left}.ui-timepicker-rtl dl dd{margin:0 10px 10px 65px}.ui_tpicker_time_input{width:100%}body .ui-widget{font-size:1em}body #ui-datepicker-div{z-index:9999 !important}.ui-dialog .pma-fieldset legend a{color:#235a81}div#page_content div#tableslistcontainer{margin-top:1em}div#page_content div#tableslistcontainer table.data{border-top:.1px solid #eee}div#page_content div.result_query{margin-top:1em}table.show_create{margin-top:1em}table.show_create td{border-left:1px solid #bbb}#alias_modal table th{vertical-align:middle;padding-right:1em}#alias_modal label.col-2{min-width:20%;display:inline-block}#alias_modal select{width:25%;margin-left:2em}#alias_modal label{font-weight:bold}.small_font{font-size:smaller}#pma_console_container{width:100%;position:fixed;bottom:0;right:0;z-index:100}textarea{resize:both}#pma_console{position:relative;margin-right:250px}#pma_console .templates{display:none}#pma_console .mid_text{vertical-align:middle}#pma_console .toolbar{position:relative;background:#f7f7f7;border-top:solid 1px #ccc;cursor:n-resize}#pma_console .toolbar span{vertical-align:middle}#pma_console .toolbar.collapsed{cursor:default}#pma_console .toolbar.collapsed:not(:hover){display:inline-block;border-left:solid 1px #ccc}#pma_console .toolbar.collapsed>.button{display:none}#pma_console .message span.text,#pma_console .message span.action{padding:0 3px;display:inline-block}#pma_console .toolbar .button,#pma_console .toolbar .text{padding:0 3px;display:inline-block}#pma_console .switch_button{padding:0 3px;display:inline-block}#pma_console .message span.action,#pma_console .toolbar .button,#pma_console .switch_button{cursor:pointer}#pma_console .toolbar .text{font-weight:bold}#pma_console .toolbar .button,#pma_console .toolbar .text{margin-left:.4em;float:left}#pma_console .content{overflow-x:hidden;overflow-y:auto;margin-bottom:-65px;border-top:solid 1px #ccc;background:#fff;padding-top:.4em}#pma_console .content.console_dark_theme{background:#000;color:#fff}#pma_console .content.console_dark_theme .CodeMirror-wrap{background:#000;color:#fff}#pma_console .content.console_dark_theme .action_content{color:#000}#pma_console .content.console_dark_theme .message{border-color:#373b41}#pma_console .content.console_dark_theme .CodeMirror-cursor{border-color:#fff}#pma_console .content.console_dark_theme .cm-keyword{color:#de935f}#pma_console .message,#pma_console .query_input{position:relative;font-family:Monaco,Consolas,monospace;cursor:text;margin:0 1.4em .2em 10px}#pma_console .message{border-bottom:solid 1px #ccc;padding-bottom:.2em}#pma_console .message.expanded>.action_content{position:relative}#pma_console .message::before{right:-0.7em;position:absolute;content:">"}#pma_console .query_input::before{right:-0.7em;position:absolute;content:">";top:-2px}#pma_console .query_input textarea{width:100%;height:4em;resize:vertical}#pma_console .message:hover::before{color:#7cf;font-weight:bold}#pma_console .message.expanded::before{content:"]"}#pma_console .message.welcome::before{display:none}#pma_console .message.failed::before,#pma_console .message.failed.expanded::before,#pma_console .message.failed:hover::before{content:"=";color:#944}#pma_console .message.pending::before{opacity:.3}#pma_console .message.collapsed>.query{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#pma_console .message.expanded>.query{display:block;white-space:pre;word-wrap:break-word}#pma_console .message .text.targetdb,#pma_console .message.collapsed .action.collapse,#pma_console .message.expanded .action.expand{display:none}#pma_console .message .action.requery,#pma_console .message .action.profiling,#pma_console .message .action.explain,#pma_console .message .action.bookmark{display:none}#pma_console .message.select .action.profiling,#pma_console .message.select .action.explain{display:inline-block}#pma_console .message.history .text.targetdb,#pma_console .message.successed .text.targetdb{display:inline-block}#pma_console .message.history .action.requery,#pma_console .message.history .action.bookmark{display:inline-block}#pma_console .message.bookmark .action.requery,#pma_console .message.bookmark .action.bookmark{display:inline-block}#pma_console .message.successed .action.requery,#pma_console .message.successed .action.bookmark{display:inline-block}#pma_console .message .action_content{position:absolute;bottom:100%;background:#ccc;border:solid 1px #aaa}#pma_console .message.bookmark .text.targetdb,#pma_console .message .text.query_time{margin:0;display:inline-block}#pma_console .message.failed .text.query_time,#pma_console .message .text.failed{display:none}#pma_console .message.failed .text.failed{display:inline-block}#pma_console .message .text{background:#fff}#pma_console .message.collapsed>.action_content{display:none}#pma_console .message.collapsed:hover>.action_content{display:block}#pma_console .message .bookmark_label{padding:0 4px;top:0;background:#369;color:#fff}#pma_console .message .bookmark_label.shared{background:#396}#pma_console .query_input{position:relative}#pma_console .mid_layer{height:100%;width:100%;position:absolute;top:0;background:#ccc;display:none;cursor:pointer;z-index:200}#pma_console .card{position:absolute;width:94%;height:100%;min-height:48px;right:100%;top:0;border-right:solid 1px #999;z-index:300;transition:right .2s}#pma_console .card.show{right:6%}#pma_bookmarks .content.add_bookmark,#pma_console_options .content{padding:4px 6px}#pma_bookmarks .content.add_bookmark .options{margin-right:1.4em;padding-bottom:.4em;margin-bottom:.4em;border-bottom:solid 1px #ccc}#pma_bookmarks .content.add_bookmark .options button{margin:0 7px;vertical-align:bottom}#pma_bookmarks .content.add_bookmark input[type=text]{margin:0;padding:2px 4px}#pma_console .button.hide,#pma_console .message span.text.hide{display:none}#debug_console.grouped .ungroup_queries{display:inline-block}#debug_console.ungrouped .group_queries{display:inline-block}#debug_console.ungrouped .ungroup_queries,#debug_console.ungrouped .sort_count{display:none}#debug_console.grouped .group_queries{display:none}#debug_console .count{margin-left:8px}#debug_console .show_trace .trace,#debug_console .show_args .args{display:block}#debug_console .hide_trace .trace,#debug_console .hide_args .args,#debug_console .show_trace .action.dbg_show_trace,#debug_console .hide_trace .action.dbg_hide_trace{display:none}#debug_console .traceStep.hide_args .action.dbg_hide_args,#debug_console .traceStep.show_args .action.dbg_show_args{display:none}#debug_console .traceStep::after{content:"";display:table;clear:both}#debug_console .trace.welcome::after,#debug_console .debug>.welcome::after{content:"";display:table;clear:both}#debug_console .debug_summary{float:right}#debug_console .trace.welcome .time,#debug_console .traceStep .file,#debug_console .script_name{float:left}#debug_console .traceStep .args pre{margin:0}.cm-s-pma .CodeMirror-code{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-code pre{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-measure>pre,.cm-s-pma .CodeMirror-code>pre,.cm-s-pma .CodeMirror-lines{padding:0}.cm-s-pma.CodeMirror{resize:none;height:auto;width:100%;min-height:initial;max-height:initial}.cm-s-pma .CodeMirror-scroll{cursor:text}.pma_drop_handler{display:none;position:fixed;top:0;right:0;width:100%;background:rgba(0,0,0,.6);height:100%;z-index:999;color:#fff;font-size:30pt;text-align:center;padding-top:20%}.pma_sql_import_status{display:none;position:fixed;bottom:0;left:25px;width:400px;border:1px solid #999;background:#f3f3f3}.pma_sql_import_status h2,.pma_sql_import_status .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal}.pma_drop_result h2,.pma_drop_result .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal}.pma_sql_import_status div{height:270px;overflow-y:auto;overflow-x:hidden;list-style-type:none}.pma_sql_import_status div li{padding:8px 10px;border-bottom:1px solid #bbb;color:#940e0e;background:#fff}.pma_sql_import_status div li .filesize{float:left}.pma_sql_import_status h2 .minimize,.pma_sql_import_status .h2 .minimize{float:left;margin-left:5px;padding:0 10px}.pma_sql_import_status h2 .close,.pma_sql_import_status .h2 .close{float:left;margin-left:5px;padding:0 10px;display:none}.pma_sql_import_status h2 .minimize:hover,.pma_sql_import_status .h2 .minimize:hover,.pma_sql_import_status h2 .close:hover,.pma_sql_import_status .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_result h2 .close:hover,.pma_drop_result .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_file_status{color:#235a81}.pma_drop_file_status span.underline:hover{cursor:pointer;text-decoration:underline}.pma_drop_result{position:fixed;top:10%;right:20%;width:60%;background:#fff;min-height:300px;z-index:800;cursor:move}.pma_drop_result h2 .close,.pma_drop_result .h2 .close{float:left;margin-left:5px;padding:0 10px}.dependencies_box{background-color:#fff;border:3px ridge #000}#composite_index_list{list-style-type:none;list-style-position:inside}span.drag_icon{display:inline-block;background-image:url("../img/s_sortable.png");background-position:center center;background-repeat:no-repeat;width:1em;height:3em;cursor:move}.topmargin{margin-top:1em}meter[value="1"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #e32929 5%, transparent 10%, #e32929)}meter[value="2"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #f60 5%, transparent 10%, #f60)}meter[value="3"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #ffd700 5%, transparent 10%, #ffd700)}body .ui-dialog .ui-dialog-titlebar-close{left:.3em;right:initial}body .ui-dialog .ui-dialog-title{float:right}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}body .ui-corner-all,body .ui-corner-top,body .ui-corner-left,body .ui-corner-tl{border-top-right-radius:0}body .ui-corner-all,body .ui-corner-top,body .ui-corner-right,body .ui-corner-tr{border-top-left-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-left,body .ui-corner-bl{border-bottom-right-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-right,body .ui-corner-br{border-bottom-left-radius:0}body .ui-dialog{padding:0}body .ui-dialog .ui-widget-header{color:#fff;border:none;background-color:#666;background-image:none}body .ui-dialog .ui-dialog-title{padding:5px;font-weight:normal}body .ui-dialog .ui-dialog-buttonpane button{font-family:"Open Sans","Segoe UI",sans-serif;color:#fff;background-color:#666;background-image:none;border:1px solid #aaa}body .ui-dialog .ui-dialog-buttonpane button.ui-state-hover{background-color:#000;border:1px solid #000}body .ui-dialog .ui-dialog-buttonpane button.ui-state-active{background-color:#333;border:1px solid #333}#tooltip_editor{font-size:12px;background-color:#fff;opacity:.95;filter:alpha(opacity=95);padding:5px}#tooltip_font{font-weight:bold}#selection_box{z-index:1000;height:205px;position:absolute;background-color:skyblue;opacity:.4;filter:alpha(opacity=40);pointer-events:none}#filterQueryText{vertical-align:baseline}.multi_table_query_form .query-form__tr--hide{display:none}.multi_table_query_form .query-form__fieldset--inline,.multi_table_query_form .query-form__select--inline{display:inline}.multi_table_query_form .query-form__tr--bg-none{background:none}.multi_table_query_form .query-form__input--wide{width:91%}.multi_table_query_form .query-form__multi-sql-query{float:right}.pre-scrollable{max-height:340px;overflow-y:scroll}@media(min-width: 1200px){div.tools{text-align:right}.pma-fieldset.tblFooters,.tblFooters{text-align:right}}.resize-vertical{resize:vertical}p.enum_notice{margin:5px 2px;font-size:80%}#enum_editor p{margin-top:0;font-style:italic}#enum_editor .values{width:100%}#enum_editor .add{width:100%}#enum_editor .add td{vertical-align:middle;width:50%;padding:0 0 0;padding-right:1em}#enum_editor .values td.drop{width:1.8em;cursor:pointer;vertical-align:middle}#enum_editor .values input{margin:.1em 0;padding-left:2em;width:100%}#enum_editor .values img{vertical-align:middle}#enum_editor input.add_value{margin:0;margin-left:.4em}#enum_editor_output textarea{width:100%;float:left;margin:1em 0 0 0}.enum_hint{position:relative}.enum_hint a{position:absolute;right:81%;bottom:.35em}a.close_gis_editor{float:left}#gis_editor{display:none;position:fixed;z-index:1001;overflow-y:auto;overflow-x:hidden}#gis_data{min-height:230px}#gis_data_textarea{height:6em}#gis_data_editor{background:#d0dce0;padding:15px;min-height:500px}#gis_data_editor .choice{display:none}#gis_data_editor input[type=text]{width:75px}#pma_navigation{width:250px;overflow:hidden;position:fixed;top:0;right:0;height:100%;background:#fff;color:#444;z-index:800}#pma_navigation input[type=text]{background-color:#fff;font-family:"Open Sans","Segoe UI",sans-serif}#pma_navigation a:link,#pma_navigation a:visited,#pma_navigation a:active{text-decoration:none;color:#666}#pma_navigation a img{border:0}#pma_navigation select#select_server,#pma_navigation select#lightm_db{width:100%}#pma_navigation button{display:inline}#pma_navigation_content{width:100%;position:absolute;top:0;right:0;z-index:0}#pma_navigation ul{margin:0}#pma_navigation form{margin:0;padding:0;display:inline}#pma_navigation div.pageselector{text-align:center;margin:0;margin-right:.75em;border-right:1px solid #666}#pma_navigation #pmalogo{margin:0;padding:12px;background:#666;color:#fff;font-size:14px;cursor:default;height:15px;line-height:100%;box-sizing:content-box}#pma_navigation #pmalogo::after{font-family:"Open Sans Extrabold","Segoe Black",sans-serif;text-transform:uppercase;margin-right:5px;content:"phpMyAdmin"}#pma_navigation #imgpmalogo{display:none}#pma_navigation #recentTableList{text-align:center;padding:10px}#pma_navigation #recentTableList select{min-width:100%}#pma_navigation #databaseList{text-align:center;margin:10px}#pma_navigation #navipanellinks{padding-top:1em;padding-bottom:1em;text-align:center;background-color:#ddd}#pma_navigation #navipanellinks a{box-sizing:content-box}#pma_navigation #navipanellinks .icon{margin:0}img.ic_b_home,img.ic_s_loggoff,img.ic_b_docs,img.ic_b_sqlhelp,img.ic_s_reload{filter:invert(70%)}#navipanellinks a{height:16px;width:16px;color:#444;margin-left:5px;padding:5px;font-size:15px}#navipanellinks a:hover{color:#666}#pma_navigation #serverChoice,#pma_navigation #databaseList,#pma_navigation div.pageselector.dbselector{text-align:center;padding:5px 10px 0;border:0}#pma_navigation_content>img.throbber{display:none;margin:.3em auto 0}#pma_navigation_tree{margin:0;margin-right:10px;overflow:hidden;height:74%;position:relative}#pma_navigation_select_database{text-align:right;padding:0 0 0;border:0;margin:0}#pma_navigation_db_select{margin-top:.5em;margin-right:.75em}#pma_navigation_db_select select{border:1px solid #bbb;border-top:1px solid #bbb;color:#333;padding:4px 6px;margin:0 0 0;width:92%}#pma_navigation_tree_content{width:100%;overflow:hidden;overflow-y:auto;position:absolute;height:100%}#pma_navigation_tree li .dbItemControls{padding-left:4px;float:left}#pma_navigation_tree li .navItemControls{display:none;padding-left:4px;float:left}#pma_navigation_tree li.activePointer .navItemControls{display:block;opacity:.5}#pma_navigation_tree li.activePointer .navItemControls:hover{opacity:1}#pma_navigation_tree_content a.hover_show_full{position:relative;z-index:100}#pma_navigation_tree a{color:#fff;padding-right:0}#pma_navigation_tree a:hover{text-decoration:none;color:#666}#pma_navigation_tree li{margin-bottom:0}#pma_navigation_tree li.activePointer,#pma_navigation_tree li.selected{color:#666}#pma_navigation_tree ul{clear:both;padding:0;list-style-type:none;margin:0}#pma_navigation_tree ul ul{position:relative}#pma_navigation_tree li{white-space:nowrap;clear:both;min-height:17px}#pma_navigation_tree img{margin:0}#pma_navigation_tree i{display:block}#pma_navigation_tree div.block{position:relative;width:1.5em;height:2em;min-width:16px;min-height:16px;float:right}#pma_navigation_tree div.block.double{width:2.5em}#pma_navigation_tree div.block i,#pma_navigation_tree div.block b{width:1.5em;height:2em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;right:.75em;z-index:0;margin-top:-4px}#pma_navigation_tree div.block i{display:block;border-right:1px solid #616161;border-bottom:1px solid #616161;position:relative;z-index:0}#pma_navigation_tree div.block i.first{border-right:0}#pma_navigation_tree div.block b{display:block;height:.75em;bottom:0;right:.75em;border-right:1px solid #616161}#pma_navigation_tree div.block a,#pma_navigation_tree div.block u{position:absolute;right:50%;top:50%;z-index:10}#pma_navigation_tree div.block a+a{right:100%}#pma_navigation_tree div.block.double a,#pma_navigation_tree div.block.double u{right:33%}#pma_navigation_tree div.block.double a+a{right:85%}#pma_navigation_tree div.block img{position:relative;top:-0.6em;right:0;margin-right:-7px}#pma_navigation_tree div.throbber img{top:2px;right:2px}#pma_navigation_tree li.last>ul{background:none}#pma_navigation_tree li>a,#pma_navigation_tree li>i{line-height:1.5em;height:1.5em;padding-right:.3em}#pma_navigation_tree .list_container{border-right:1px solid #616161;margin-right:.75em;padding-right:.75em}#pma_navigation_tree .list_container li.last.database{margin-bottom:0 !important}#pma_navigation_tree .last>.list_container{border-right:0 solid #616161}li.fast_filter{padding-right:.75em;margin-right:.75em;padding-left:15px;border-right:1px solid #616161}li.fast_filter input{font-size:.7em}li.fast_filter .searchClauseClear{background-color:rgba(0,0,0,0);font-weight:bold;color:#800;font-size:.7em}li.fast_filter .searchClauseClear:hover{background-color:rgba(0,0,0,0)}li.fast_filter.db_fast_filter{border:0;margin-right:0}#navigation_controls_outer{min-height:21px !important}#pma_navigation_collapse{padding-left:2px}#navigation_controls_outer.activePointer{background-color:rgba(0,0,0,0) !important}#navigation_controls{float:left;padding-left:23px}#pma_navigation_resizer{width:1px;height:100%;background-color:#aaa;cursor:col-resize;position:fixed;top:0;right:250px;z-index:801}#pma_navigation_collapser{width:20px;padding-top:4px;padding-bottom:12px;background:#666;border-bottom:1px solid #666;line-height:22px;color:#fff;position:fixed;top:0;right:250px;text-align:center;cursor:pointer;z-index:801}.pma_quick_warp{margin-top:5px;margin-right:10px;position:relative}.pma_quick_warp .drop_list{float:right;margin-right:3px;padding:2px 0}.pma_quick_warp .drop_button{padding:.2em .5em;border:1px solid #ddd;background:#f2f2f2;cursor:pointer}.pma_quick_warp .drop_list:hover .drop_button{background:#fff}.pma_quick_warp .drop_list ul{position:absolute;margin:0;padding:0;overflow:hidden;overflow-y:auto;list-style:none;background:#fff;border:1px solid #ddd;top:100%;right:3px;left:0;display:none;z-index:802}.pma_quick_warp .drop_list:hover ul{display:block}.pma_quick_warp .drop_list li{white-space:nowrap;padding:0}.pma_quick_warp .drop_list li img{vertical-align:sub}.pma_quick_warp .drop_list li:hover{background:#f2f2f2}.pma_quick_warp .drop_list a{display:block;padding:.2em .3em}.pma_quick_warp .drop_list a.favorite_table_anchor{clear:right;float:right;padding:.1em .3em 0}.input_tab{background-color:#efefef;color:#000;border:1px solid #ccc}.content_fullscreen{position:relative;overflow:auto}#canvas_outer{position:relative;width:100%;display:block}#canvas{background-color:#fff;color:#000}canvas.designer{display:inline-block;overflow:hidden;text-align:right}canvas.designer *{behavior:url(#default#VML)}.designer_tab{color:#333;border-collapse:collapse;border:1px solid #ccc;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.designer_tab .header{background-color:#f6f6f6}.tab_zag{text-align:center;cursor:move;padding:1px;font-weight:bold;vertical-align:middle}.tab_zag_2{text-align:center;cursor:move;padding:1px;font-weight:bold;background-color:#f6f6f6;vertical-align:middle}.tab_field{background:#fff;color:#000;cursor:default}.tab_field:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}.tab_field_3{background-color:#ffe6e6 !important;color:#000;cursor:default}.tab_field_3:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}#designer_hint{white-space:nowrap;position:absolute;background-color:#9f9;color:#000;z-index:3;border:#0c6 solid 1px;display:none}.scroll_tab{overflow:auto;width:100%;height:500px}.designer_Tabs{cursor:default;color:#333;white-space:nowrap;text-decoration:none;text-indent:3px;margin-right:2px;text-align:right;border:#ccc solid 0}.designer_Tabs:hover{cursor:default;color:#666;background:#eee;text-indent:3px;white-space:nowrap;text-decoration:none;border:#eee solid 0;text-align:right}.owner{font-weight:normal;color:#888}.option_tab{padding-right:2px;padding-left:2px;width:5px}.select_all{vertical-align:top;padding-right:2px;padding-left:2px;cursor:default;width:1px;color:#000;background-repeat:repeat-x}.small_tab{vertical-align:top;background-color:#666;color:#fff;cursor:default;text-align:center;font-weight:bold;padding-right:2px;padding-left:2px;width:1px;text-decoration:none}.small_tab:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;padding-right:2px;padding-left:2px;text-align:center;font-weight:bold;width:1px;text-decoration:none}.small_tab_pref{background-color:#f6f6f6;text-align:center;width:1px}.small_tab_pref:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;text-align:center;font-weight:bold;width:1px;text-decoration:none}.L_butt2_1{padding-right:5px;text-decoration:none;vertical-align:middle;cursor:default}.L_butt2_1:hover{padding-right:5px;color:#000;text-decoration:none;vertical-align:middle;cursor:default}.bor{width:10px;height:10px}#osn_tab{position:absolute;background-color:#fff;color:#000;width:100% !important}.designer_header{background-color:#f6f6f6;border-top:20px solid #fff;color:#333;display:block;height:28px;margin-right:-20px;margin-top:-60px;padding:5px 20px;position:fixed;text-align:center;width:100%;z-index:101}.designer_header a{display:block;float:right;margin:3px 1px 4px;height:20px}.designer_header .M_bord{display:block;float:right;margin:4px;height:20px;width:2px}.designer_header a.first{margin-left:1em}.designer_header a.last{margin-right:1em}a.M_butt_Selected_down_IE,a.M_butt_Selected_down,a.M_butt_Selected_down_IE:hover,a.M_butt_Selected_down:hover,a.M_butt:hover{background-color:#eee;color:#000}#layer_menu{z-index:98;position:relative;float:left;background-color:#f6f6f6;border:#ccc solid 1px;border-top:0;margin-left:-20px}.content_fullscreen #layer_menu{margin-left:0}#layer_menu.float-start{margin-right:-20px}.content_fullscreen #layer_menu.float-start{margin-right:0}#layer_upd_relation{position:absolute;right:637px;top:224px;z-index:100}#layer_new_relation,#designer_optionse{position:absolute;right:636px;top:85px;z-index:100;width:153px}#layer_menu_sizer{background-image:url("../img/designer/resize.png");cursor:ew-resize}#layer_menu_sizer .icon{margin:0}.panel{position:fixed;top:90px;left:0;width:350px;max-height:500px;display:none;overflow:auto;padding-top:34px;z-index:102}a.trigger{position:fixed;text-decoration:none;top:90px;left:0;color:#fff;padding:10px 15px 10px 40px;background:#333 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #444;display:block;z-index:102}a.trigger:hover{color:#080808;background:#fff696 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #999}a.active.trigger{background:#222 url("../img/designer/minus.png") 15% 55% no-repeat;z-index:999}a.active.trigger:hover{background:#fff696 url("../img/designer/minus.png") 15% 55% no-repeat}.toggle_container .block{background-color:#eee;border-top:1px solid #999}.toggle_container .block img.ic_s_info{filter:invert(70%)}.history_table{opacity:1;cursor:pointer}.history_table2{opacity:.7}#ab{min-width:300px}#ab .ui-accordion-content{padding:0}#foreignkeychk{text-align:right;cursor:pointer}.side-menu{float:right;position:fixed;width:auto;height:auto;background:#efefef;border:1px solid #ccc;border-top:0;overflow:hidden;z-index:50;padding:2px;margin-top:0;margin-right:-20px}.content_fullscreen .side-menu{margin-right:0}.side-menu.right{float:left;left:0}.content_fullscreen .side-menu.right{margin-left:0}.side-menu .hide{display:none}.side-menu a{display:block;float:none;overflow:hidden}.side-menu img,.side-menu span,.side-menu .text{float:right;padding-right:2px}#name-panel{border-bottom:1px solid #ccc;text-align:center;background:#efefef;font-size:1.2em;padding:10px;font-weight:bold;margin-top:-20px;margin-right:-20px;margin-left:-20px}.content_fullscreen #name-panel{margin-top:0;margin-right:0;margin-left:0}#container-form{width:100%;position:absolute;right:0}.CodeMirror{font-family:"Consolas","Lucida Grande",monospace !important;height:20rem;border:1px solid #ccc;direction:rtl}#pma_console .CodeMirror{border:none}.CodeMirror *{font-family:"Consolas","Lucida Grande",monospace}#inline_editor_outer .CodeMirror{height:6em;margin-bottom:10px}.insertRowTable .CodeMirror{min-height:9em;min-width:24em}#pma_console .CodeMirror-gutters{background-color:initial;border:none}span.cm-keyword,span.cm-statement-verb{color:#909}span.cm-variable{color:#000}span.cm-comment{color:olive}span.cm-mysql-string{color:green}span.cm-operator{color:#f0f}span.cm-mysql-word{color:#000}span.cm-builtin{color:red}span.cm-variable-2{color:#f90}span.cm-variable-3{color:blue}span.cm-separator{color:#f0f}span.cm-number{color:teal}.autocomplete-column-name{display:inline-block}.autocomplete-column-hint{display:inline-block;float:left;color:#666;margin-right:1em}.CodeMirror-hints{z-index:1999}.jqplot-target{position:relative;color:#222;font-family:"Open Sans","Segoe UI",sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-left:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-right:10px;margin-left:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;right:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;right:15px;vertical-align:bottom}.jqplot-yaxis-tick{left:0;top:15px;text-align:left}.jqplot-yaxis-tick.jqplot-breakTick{left:-20px;margin-left:0;padding:1px 5px 1px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{right:0;top:15px;text-align:right}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-left:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-right:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-right:12px;margin-left:12px;background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}table.jqplot-cursor-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-right-width:6px;border-left-width:6px;border-top-style:solid;border-bottom-style:solid;border-right-style:solid;border-left-style:solid}.jqplot-title{top:0;right:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-right:2px;padding-left:2px;color:#333}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(230,230,230,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(245,245,245,.3)}.icon{margin:0;margin-right:.3em;padding:0 !important;width:16px;height:16px}.icon_fulltext{width:50px;height:19px}.ic_asc_order{background-image:url("../img/asc_order.png")}.ic_b_bookmark{background-image:url("../img/b_bookmark.png")}.ic_b_browse{background-image:url("../img/b_browse.png")}.ic_b_calendar{background-image:url("../img/b_calendar.png")}.ic_b_chart{background-image:url("../img/b_chart.png")}.ic_b_close{background-image:url("../img/b_close.png")}.ic_b_column_add{background-image:url("../img/b_column_add.png")}.ic_b_comment{background-image:url("../img/b_comment.png")}.ic_b_dbstatistics{background-image:url("../img/b_dbstatistics.png")}.ic_b_deltbl{background-image:url("../img/b_deltbl.png")}.ic_b_docs{background-image:url("../img/b_docs.png")}.ic_b_docsql{background-image:url("../img/b_docsql.png")}.ic_b_drop{background-image:url("../img/b_drop.png")}.ic_b_edit{background-image:url("../img/b_edit.png")}.ic_b_empty{background-image:url("../img/b_empty.png")}.ic_b_engine{background-image:url("../img/b_engine.png")}.ic_b_event_add{background-image:url("../img/b_event_add.png")}.ic_b_events{background-image:url("../img/b_events.png")}.ic_b_export{background-image:url("../img/b_export.png")}.ic_b_favorite{background-image:url("../img/b_favorite.png")}.ic_b_find_replace{background-image:url("../img/b_find_replace.png")}.ic_b_firstpage{background-image:url("../img/b_firstpage.png")}.ic_b_ftext{background-image:url("../img/b_ftext.png")}.ic_b_globe{background-image:url("../img/b_globe.gif")}.ic_b_group{background-image:url("../img/b_group.png")}.ic_b_help{background-image:url("../img/b_help.png")}.ic_b_home{background-image:url("../img/b_home.png")}.ic_b_import{background-image:url("../img/b_import.png")}.ic_b_index{background-image:url("../img/b_index.png")}.ic_b_index_add{background-image:url("../img/b_index_add.png")}.ic_b_inline_edit{background-image:url("../img/b_inline_edit.png")}.ic_b_insrow{background-image:url("../img/b_insrow.png")}.ic_b_lastpage{background-image:url("../img/b_lastpage.png")}.ic_b_minus{background-image:url("../img/b_minus.png")}.ic_b_more{background-image:url("../img/b_more.png")}.ic_b_move{background-image:url("../img/b_move.png")}.ic_b_newdb{background-image:url("../img/b_newdb.png")}.ic_db_drop{background-image:url("../img/b_deltbl.png")}.ic_b_newtbl{background-image:url("../img/b_newtbl.png")}.ic_b_nextpage{background-image:url("../img/b_nextpage.png")}.ic_b_no_favorite{background-image:url("../img/b_no_favorite.png")}.ic_b_pdfdoc{background-image:url("../img/b_pdfdoc.png")}.ic_b_plugin{background-image:url("../img/b_plugin.png")}.ic_b_plus{background-image:url("../img/b_plus.png")}.ic_b_prevpage{background-image:url("../img/b_prevpage.png")}.ic_b_primary{background-image:url("../img/b_primary.png")}.ic_b_print{background-image:url("../img/b_print.png")}.ic_b_props{background-image:url("../img/b_props.png")}.ic_b_relations{background-image:url("../img/b_relations.png")}.ic_b_report{background-image:url("../img/b_report.png")}.ic_b_rename{background-image:url("../img/b_rename.svg")}.ic_b_routine_add{background-image:url("../img/b_routine_add.png")}.ic_b_routines{background-image:url("../img/b_routines.png")}.ic_b_save{background-image:url("../img/b_save.png")}.ic_b_saveimage{background-image:url("../img/b_saveimage.png")}.ic_b_sbrowse{background-image:url("../img/b_sbrowse.png")}.ic_b_sdb{background-image:url("../img/b_sdb.png");width:10px;height:10px}.ic_b_search{background-image:url("../img/b_search.png")}.ic_b_select{background-image:url("../img/b_select.png")}.ic_b_snewtbl{background-image:url("../img/b_snewtbl.png")}.ic_b_spatial{background-image:url("../img/b_spatial.png")}.ic_b_sql{background-image:url("../img/b_sql.png")}.ic_b_sqldoc{background-image:url("../img/b_sqldoc.png")}.ic_b_sqlhelp{background-image:url("../img/b_sqlhelp.png")}.ic_b_table_add{background-image:url("../img/b_table_add.png")}.ic_b_tblanalyse{background-image:url("../img/b_tblanalyse.png")}.ic_b_tblexport{background-image:url("../img/b_tblexport.png")}.ic_b_tblimport{background-image:url("../img/b_tblimport.png")}.ic_b_tblops{background-image:url("../img/b_tblops.png")}.ic_b_tbloptimize{background-image:url("../img/b_tbloptimize.png")}.ic_b_tipp{background-image:url("../img/b_tipp.png")}.ic_b_trigger_add{background-image:url("../img/b_trigger_add.png")}.ic_b_triggers{background-image:url("../img/b_triggers.png")}.ic_b_undo{background-image:url("../../pmahomme/img/b_undo.png")}.ic_b_unique{background-image:url("../img/b_unique.png")}.ic_b_usradd{background-image:url("../img/b_usradd.png")}.ic_b_usrcheck{background-image:url("../img/b_usrcheck.png")}.ic_b_usrdrop{background-image:url("../img/b_usrdrop.png")}.ic_b_usredit{background-image:url("../img/b_usredit.png")}.ic_b_usrlist{background-image:url("../img/b_usrlist.png")}.ic_b_versions{background-image:url("../img/b_versions.png")}.ic_b_view{background-image:url("../img/b_view.png")}.ic_b_view_add{background-image:url("../img/b_view_add.png")}.ic_b_views{background-image:url("../img/b_views.png")}.ic_bd_browse{background-image:url("../img/bd_browse.png")}.ic_bd_deltbl{background-image:url("../img/bd_deltbl.png")}.ic_bd_drop{background-image:url("../img/bd_drop.png")}.ic_bd_edit{background-image:url("../img/bd_edit.png")}.ic_bd_empty{background-image:url("../img/bd_empty.png")}.ic_bd_export{background-image:url("../img/bd_export.png")}.ic_bd_firstpage{background-image:url("../img/bd_firstpage.png")}.ic_bd_ftext{background-image:url("../img/bd_ftext.png")}.ic_bd_index{background-image:url("../img/bd_index.png")}.ic_bd_insrow{background-image:url("../img/bd_insrow.png")}.ic_bd_lastpage{background-image:url("../img/bd_lastpage.png")}.ic_bd_nextpage{background-image:url("../img/bd_nextpage.png")}.ic_bd_prevpage{background-image:url("../img/bd_prevpage.png")}.ic_bd_primary{background-image:url("../img/bd_primary.png")}.ic_bd_routine_add{background-image:url("../img/bd_routine_add.png")}.ic_bd_sbrowse{background-image:url("../img/bd_sbrowse.png")}.ic_bd_select{background-image:url("../img/bd_select.png")}.ic_bd_spatial{background-image:url("../img/bd_spatial.png")}.ic_bd_unique{background-image:url("../img/bd_unique.png")}.ic_centralColumns{background-image:url("../img/centralColumns.png")}.ic_centralColumns_add{background-image:url("../img/centralColumns_add.png")}.ic_centralColumns_delete{background-image:url("../img/centralColumns_delete.png")}.ic_col_drop{background-image:url("../img/col_drop.png")}.ic_console{background-image:url("../img/console.png")}.ic_database{background-image:url("../img/database.png")}.ic_eye{background-image:url("../img/eye.png")}.ic_eye_grey{background-image:url("../img/eye_grey.png")}.ic_hide{background-image:url("../img/hide.png")}.ic_item{background-image:url("../img/item.png");width:9px;height:9px}.ic_lightbulb{background-image:url("../img/lightbulb.png")}.ic_lightbulb_off{background-image:url("../img/lightbulb_off.png")}.ic_more{background-image:url("../img/more.png");width:13px}.ic_new_data{background-image:url("../img/new_data.png")}.ic_new_data_hovered{background-image:url("../img/new_data_hovered.png")}.ic_new_data_selected{background-image:url("../img/new_data_selected.png")}.ic_new_data_selected_hovered{background-image:url("../img/new_data_selected_hovered.png")}.ic_new_struct{background-image:url("../img/new_struct.png")}.ic_new_struct_hovered{background-image:url("../img/new_struct_hovered.png")}.ic_new_struct_selected{background-image:url("../img/new_struct_selected.png")}.ic_new_struct_selected_hovered{background-image:url("../img/new_struct_selected_hovered.png")}.ic_normalize{background-image:url("../img/normalize.png")}.ic_pause{background-image:url("../img/pause.png")}.ic_php_sym{background-image:url("../img/php_sym.png")}.ic_play{background-image:url("../img/play.png")}.ic_s_asc{background-image:url("../img/s_asc.png")}.ic_s_asci{background-image:url("../img/s_asci.png")}.ic_s_attention{background-image:url("../img/s_attention.png")}.ic_s_cancel{background-image:url("../img/s_cancel.png")}.ic_s_cancel2{background-image:url("../img/s_cancel2.png")}.ic_s_cog{background-image:url("../img/s_cog.png")}.ic_s_db{background-image:url("../img/s_db.png")}.ic_s_desc{background-image:url("../img/s_desc.png")}.ic_s_error{background-image:url("../img/s_error.png")}.ic_s_host{background-image:url("../img/s_host.png")}.ic_s_info{background-image:url("../img/s_info.png")}.ic_s_lang{background-image:url("../img/s_lang.png")}.ic_s_link{background-image:url("../img/s_link.png")}.ic_s_lock{background-image:url("../img/s_lock.png")}.ic_s_unlock{background-image:url("../img/lock_open.png")}.ic_s_loggoff{background-image:url("../img/s_loggoff.png")}.ic_s_notice{background-image:url("../img/s_notice.png")}.ic_s_okay{background-image:url("../img/s_okay.png")}.ic_s_passwd{background-image:url("../img/s_passwd.png")}.ic_s_process{background-image:url("../img/s_process.png")}.ic_s_really{background-image:url("../img/s_really.png");width:11px;height:11px}.ic_s_reload{background-image:url("../img/s_reload.png")}.ic_s_replication{background-image:url("../img/s_replication.png")}.ic_s_rights{background-image:url("../img/s_rights.png")}.ic_s_sortable{background-image:url("../img/s_sortable.png")}.ic_s_status{background-image:url("../img/s_status.png")}.ic_s_success{background-image:url("../img/s_success.png")}.ic_s_sync{background-image:url("../img/s_sync.png")}.ic_s_tbl{background-image:url("../img/s_tbl.png")}.ic_s_theme{background-image:url("../img/s_theme.png")}.ic_s_top{background-image:url("../img/s_top.png")}.ic_s_unlink{background-image:url("../img/s_unlink.png")}.ic_s_vars{background-image:url("../img/s_vars.png")}.ic_s_views{background-image:url("../img/s_views.png")}.ic_show{background-image:url("../img/show.png")}.ic_window-new{background-image:url("../img/window-new.png")}.ic_ajax_clock_small{background-image:url("../img/ajax_clock_small.gif")}.ic_s_partialtext{background-image:url("../img/s_partialtext.png")}.ic_s_fulltext{background-image:url("../img/s_fulltext.png")}*:focus{outline:none}body{text-align:right}h1,.h1{font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;color:#666;margin:0;letter-spacing:-1px;line-height:1}h2,.h2{color:#666;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;margin-top:10px;margin-bottom:0;line-height:1;letter-spacing:-1px}h3,.h3{font-family:"Open Sans Extrabold","Segoe Black",sans-serif;text-transform:uppercase}input,select{font-size:1em}textarea{font-family:"Consolas","Lucida Grande",monospace;font-size:1.2em}.table td{touch-action:manipulation;vertical-align:middle}.table .table-light th{font-family:"Open Sans Bold",sans-serif;font-weight:normal;border-bottom:1px solid #ddd}.table .table-light th a{color:#666}@media only screen and (min-width: 768px){.table th.position-sticky{top:87px}}select#fieldsSelect,textarea#sqlquery{margin:0;height:20rem}select.form-control{padding:4px}.nav-pills .nav-link{margin:0;padding:5px 15px;font-weight:normal;background-color:#f6f6f6;color:#666;text-transform:uppercase;font-family:"Open Sans Extrabold","Segoe Black",sans-serif;border-radius:0}.nav-pills .nav-link:hover{background-color:#f7f7f7;text-decoration:underline}.nav-pills .nav-link img{margin-left:.5em;vertical-align:-3px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background:#ccc;color:#666}.nav-tabs{font-weight:bold}.nav-tabs .nav-link{font-family:"Open Sans Bold",sans-serif;background-color:#f2f2f2;color:#555;border-color:#fff #fff #ddd;margin-left:.4em;padding:7px 10px}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{background-color:#e5e5e5}.nav-tabs .nav-link.active:hover,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-item.show .nav-link:hover,.nav-tabs .nav-item.show .nav-link:focus{background-color:#fff}.navbar{background-color:#f7f7f7;padding-right:20px;padding-left:20px}.navbar-nav .icon{margin-left:.5em;vertical-align:-3px}.navbar-nav .nav-item{padding:8px 10px}.navbar-nav .nav-item.active{background:#fff}.navbar-nav .nav-link{text-transform:uppercase;font-family:"Open Sans Extrabold","Segoe Black",sans-serif;font-weight:normal}.card{margin-top:1rem}.card-header{font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;font-size:1rem;border-bottom:0}.card-footer{border-top:0}#maincontainer .card{background:none;border:none;margin:0}#maincontainer .card-header{background:none;color:#666;font-size:2.8em;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;padding:0}#maincontainer .card-body ul{padding-right:0}.breadcrumb-navbar{padding:.89rem 2rem;margin-bottom:0;background-color:#666}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-right:.5rem}.breadcrumb-navbar .breadcrumb-item .icon{margin:0}.breadcrumb-navbar{color:#fff}.breadcrumb-navbar a{color:inherit}.breadcrumb-navbar a:hover{text-decoration:none}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-item::before,.breadcrumb-navbar .breadcrumb-item::before{width:10px;color:#eee;content:"›"}.breadcrumb-navbar .breadcrumb-item .icon{display:none}.breadcrumb-navbar .breadcrumb-comment{font-style:italic}.alert{text-align:right}.alert a{text-decoration:underline}.alert h1,.alert .h1{margin-bottom:.2em}.alert-primary{color:#fff;background-color:#555;background-image:none}.alert-primary a{color:#fff}.alert-primary h1,.alert-primary .h1{color:#fff}.alert-success{color:#fff;background-color:#888;background-image:none}.alert-success a{color:#fff}.alert-success h1,.alert-success .h1{color:#fff}.alert-danger{color:#fff;background-color:#666;background-image:none}.alert-danger a{color:#fff}.alert-danger h1,.alert-danger .h1{color:#fff}#maincontainer .list-group{margin:1rem 0 0;padding-bottom:10px}#maincontainer .list-group-item{border:none;display:list-item;padding:0}#li_select_server.list-group-item,#li_change_password.list-group-item,#li_select_mysql_collation.list-group-item,#li_user_preferences.list-group-item,#li_select_lang.list-group-item,#li_select_theme.list-group-item{display:block;padding-top:10px;padding-bottom:10px;padding-left:10px;padding-right:20px}#li_select_server.list-group-item:hover,#li_change_password.list-group-item:hover,#li_select_mysql_collation.list-group-item:hover,#li_user_preferences.list-group-item:hover,#li_select_lang.list-group-item:hover,#li_select_theme.list-group-item:hover{background:#f6f6f6}#li_select_theme::after{content:"Scheme: mono";margin-right:10px}.modal-header{color:#fff;background-color:#666}@media print{.hide{display:none}body,table,th,td{color:#000;background-color:#fff;font-size:12px}a:link{color:#000;text-decoration:none}img{border:0}table,th,td{border:.1em solid #000;background-color:#fff}table{border-collapse:collapse;border-spacing:.2em}thead{border-collapse:collapse;border-spacing:.2em;border:.1em solid #000;font-weight:900}th,td{padding:.2em}thead th{font-weight:bold;background-color:#e5e5e5;border:.1em solid #000}th.column_heading,th.column_action{border:.1em solid #000}table tr.odd,table tr.even{border-right:.1em solid #000}table tr.odd th,table tr.even th{border-bottom:.1em solid #000}table.data th{border-bottom:.1em solid #000}#page_content{position:absolute;right:0;top:0;width:95%;float:none}.sqlOuter{color:#000}.cDrop,.cEdit,.cList,.cCpy,.cPointer{display:none}table tbody:first-of-type tr:nth-child(odd){background:#fff}table tbody:first-of-type tr:nth-child(odd) th{background:#fff}table tbody:first-of-type tr:nth-child(even){background:#dfdfdf}table tbody:first-of-type tr:nth-child(even) th{background:#dfdfdf}.column_attribute{font-size:100%}} -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1vbm8tdGhlbWUuY3NzIiwiLi4vc2Nzcy9fZm9udC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yb290LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3JlYm9vdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3ZlbmRvci9fcmZzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3ZhcmlhYmxlcy5zY3NzIiwiLi4vc2Nzcy9fdmFyaWFibGVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19ib3JkZXItcmFkaXVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3R5cGUuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2xpc3RzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2NvbnRhaW5lcnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2NvbnRhaW5lci5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYnJlYWtwb2ludHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fZ3JpZC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fZ3JpZC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190YWJsZXMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RhYmxlLXZhcmlhbnRzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2xhYmVscy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLXRleHQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1jb250cm9sLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tc2VsZWN0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY2hlY2suc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1yYW5nZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mbG9hdGluZy1sYWJlbHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9faW5wdXQtZ3JvdXAuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2Zvcm1zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Z1bmN0aW9ucy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3RyYW5zaXRpb25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Ryb3Bkb3duLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2J1dHRvbi1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXYuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2NhcmQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYWNjb3JkaW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JyZWFkY3J1bWIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19iYWRnZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hbGVydC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYWxlcnQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jbG9zZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19tb2RhbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYmFja2Ryb3Auc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fc3Bpbm5lcnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2NsZWFyZml4LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fY29sb3JlZC1saW5rcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3JhdGlvLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fcG9zaXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19zdGFja3Muc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL192aXN1YWxseS1oaWRkZW4uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3N0cmV0Y2hlZC1saW5rLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdGV4dC10cnVuY2F0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190ZXh0LXRydW5jYXRlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdnIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3V0aWxpdGllcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fYXBpLnNjc3MiLCIuLi9zY3NzL19jb21tb24uc2NzcyIsIi4uL3Njc3MvX2VudW0tZWRpdG9yLnNjc3MiLCIuLi9zY3NzL19naXMuc2NzcyIsIi4uL3Njc3MvX25hdmlnYXRpb24uc2NzcyIsIi4uL3Njc3MvX2Rlc2lnbmVyLnNjc3MiLCIuLi9zY3NzL19jb2RlbWlycm9yLnNjc3MiLCIuLi9zY3NzL19qcXBsb3Quc2NzcyIsIi4uL3Njc3MvX2ljb25zLnNjc3MiLCIuLi9zY3NzL19yZWJvb3Quc2NzcyIsIi4uL3Njc3MvX3RhYmxlcy5zY3NzIiwiLi4vc2Nzcy9fZm9ybXMuc2NzcyIsIi4uL3Njc3MvX25hdi5zY3NzIiwiLi4vc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi9zY3NzL19jYXJkLnNjc3MiLCIuLi8uLi9ib290c3RyYXAvc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYWxlcnQuc2NzcyIsIi4uL3Njc3MvX2xpc3QtZ3JvdXAuc2NzcyIsIi4uL3Njc3MvX21vZGFsLnNjc3MiLCIuLi9zY3NzL19wcmludC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdDQUEsdUJBQ0UsQ0FBQSxtREFDQSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSxXQUdGLDZCQUNFLENBQUEsK0RBQ0EsQ0FBQSxrQkFDQSxDQUFBLGlCQUNBLENBQUEsV0FHRiw0QkFDRSxDQUFBLDZEQUNBLENBQUEsa0JBQ0EsQ0FBQSxpQkFDQSxDQUFBLFdBR0YsaUNBQ0UsQ0FBQSx1RUFDQSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSxNQ3pCRixrQkFRSSxDQUFBLG9CQUFBLENBQUEsb0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGlCQUFBLENBQUEsb0JBQUEsQ0FBQSxvQkFBQSxDQUFBLG1CQUFBLENBQUEsa0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGdCQUFBLENBQUEsa0JBQUEsQ0FBQSx1QkFBQSxDQUFBLHNCQUlBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLGtCQUlBLENBQUEsb0JBQUEsQ0FBQSxxQkFBQSxDQUFBLGtCQUFBLENBQUEscUJBQUEsQ0FBQSxvQkFB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UEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLE1BUEosdUJBT0ksQ0FBQSxNQVBKLDRCQU9JLENBQUEsTUFQSiwyQkFPSSxDQUFBLE1BUEosMEJBT0ksQ0FBQSxNQVBKLDRCQU9JLENBQUEsTUFQSiwwQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxNQVBKLHdCQU9JLENBQUEsTUFQSiw2QkFPSSxDQUFBLE1BUEosNEJBT0ksQ0FBQSxNQVBKLDJCQU9JLENBQUEsTUFQSiw2QkFPSSxDQUFBLE1BUEosMkJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsTUFQSiwwQkFPSSxDQUFBLE1BUEosK0JBT0ksQ0FBQSxNQVBKLDhCQU9JLENBQUEsTUFQSiw2QkFPSSxDQUFBLE1BUEosK0JBT0ksQ0FBQSxNQVBKLDZCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLE1BUEoseUJBT0ksQ0FBQSxNQVBKLDhCQU9JLENBQUEsTUFQSiw2QkFPSSxDQUFBLE1BUEosNEJBT0ksQ0FBQSxNQVBKLDhCQU9JLENBQUEsTUFQSiw0QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxLQVBKLG9CQU9JLENBQUEsS0FQSix5QkFPSSxDQUFBLEtBUEosd0JBT0ksQ0FBQSxLQVBKLHVCQU9JLENBQUEsS0FQSix5QkFPSSxDQUFBLEtBUEosdUJBT0ksQ0FBQSxNQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxNQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxNQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxNQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxNQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxNQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxNQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxNQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxNQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxNQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxNQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxNQVBKLDJC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NkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFlBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSwwQkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFlBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFlBUEosMEJBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxZQVBKLDJCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsWUFQSiw2QkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFlBUEosNEJBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDRCQU9J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LFNBUEosNkJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxZQVBKLDRCQU9JLENBQUEsUUFQSixvQkFPSSxDQUFBLFFBUEoseUJBT0ksQ0FBQSxRQVBKLHdCQU9JLENBQUEsUUFQSix1QkFPSSxDQUFBLFFBUEoseUJBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLDBCQUFBLENBQUEsU0FQSiw4QkFPSSxDQUFBLCtCQUFBLENBQUEsU0FQSiw2QkFPSSxDQUFBLDhCQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLDZCQUFBLENBQUEsU0FQSiw4QkFPSSxDQUFBLCtCQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLDZCQUFBLENBQUEsU0FQSix3QkFPSSxDQUFBLDJCQUFBLENBQUEsU0FQSiw2QkFPSSxDQUFBLGdDQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLCtCQUFBLENBQUEsU0FQSiwyQkFPSSxDQUFBLDhCQUFBLENBQUEsU0FQSiw2QkFPSSxDQUFBLGdDQUFBLENBQUEsU0FQSiwyQkFPSSxDQUFBLDhCQUFBLENBQUEsU0FQSix3QkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosZ0NBT0ksQ0FBQSxTQVBKLCtCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosZ0NBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsZUFQSiwyQkFPSSxDQUFB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 */ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/css/theme.css b/Sources/php_script/script/phpMyAdmin/themes/metro/css/theme.css deleted file mode 100644 index f1df08c..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/metro/css/theme.css +++ /dev/null @@ -1,3 +0,0 @@ -@font-face{font-family:"Open Sans";src:local("☺"),local("Open Sans"),local("OpenSans");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Light";src:local("☺"),local("Open Sans Light"),local("OpenSans-Light");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Bold";src:local("☺"),local("Open Sans Bold"),local("OpenSans-Bold");font-weight:normal;font-style:normal}@font-face{font-family:"Open Sans Extrabold";src:local("☺"),local("Open Sans Extrabold"),local("OpenSans-Extrabold");font-weight:normal;font-style:normal}:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #377796;--bs-secondary: #ccc;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 55, 119, 150;--bs-secondary-rgb: 204, 204, 204;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 68, 68, 68;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: "Consolas", "Lucida Grande", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: Open Sans, Segoe UI, sans-serif;--bs-body-font-size: 0.6875rem;--bs-body-font-weight: 400;--bs-body-line-height: 1;--bs-body-color: #444;--bs-body-bg: #fff}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:normal;line-height:1.2}h1,.h1{font-size:3em}h2,.h2{font-size:3.6em}h3,.h3{font-size:1rem}h4,.h4{font-size:1.03125rem}h5,.h5{font-size:0.859375rem}h6,.h6{font-size:0.6875rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#377796;text-decoration:none}a:hover{color:#377796;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr /* rtl:ignore */;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:0.859375rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:0.859375rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-right:var(--bs-gutter-x, 0.75rem);padding-left:var(--bs-gutter-x, 0.75rem);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-right:calc(-0.5*var(--bs-gutter-x));margin-left:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333333%}.offset-2{margin-left:16.66666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333333%}.offset-5{margin-left:41.66666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333333%}.offset-8{margin-left:66.66666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333333%}.offset-11{margin-left:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333333%}.offset-sm-2{margin-left:16.66666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333333%}.offset-sm-5{margin-left:41.66666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333333%}.offset-sm-8{margin-left:66.66666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333333%}.offset-sm-11{margin-left:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333333%}.offset-md-2{margin-left:16.66666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333333%}.offset-md-5{margin-left:41.66666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333333%}.offset-md-8{margin-left:66.66666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333333%}.offset-md-11{margin-left:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333333%}.offset-lg-2{margin-left:16.66666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333333%}.offset-lg-5{margin-left:41.66666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333333%}.offset-lg-8{margin-left:66.66666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333333%}.offset-lg-11{margin-left:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333333%}.offset-xl-2{margin-left:16.66666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333333%}.offset-xl-5{margin-left:41.66666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333333%}.offset-xl-8{margin-left:66.66666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333333%}.offset-xl-11{margin-left:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333333%}.offset-xxl-2{margin-left:16.66666667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333333%}.offset-xxl-5{margin-left:41.66666667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333333%}.offset-xxl-8{margin-left:66.66666667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333333%}.offset-xxl-11{margin-left:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #444;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #444;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #000;--bs-table-hover-bg: #eee;width:100%;margin-bottom:1rem;color:#444;vertical-align:top;border-color:#ddd}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:0;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:0 solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:0 0}.table-bordered>:not(caption)>*>*{border-width:0 0}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(even)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #d7e4ea;--bs-table-striped-bg: #ccd9de;--bs-table-striped-color: #000;--bs-table-active-bg: #c2cdd3;--bs-table-active-color: #000;--bs-table-hover-bg: #c7d3d8;--bs-table-hover-color: #000;color:#000;border-color:#c2cdd3}.table-secondary{--bs-table-bg: whitesmoke;--bs-table-striped-bg: #e9e9e9;--bs-table-striped-color: #000;--bs-table-active-bg: #dddddd;--bs-table-active-color: #000;--bs-table-hover-bg: #e3e3e3;--bs-table-hover-color: #000;color:#000;border-color:#ddd}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:0.859375rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.6015625rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:0.6875rem;font-weight:400;line-height:1;color:#444;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#444;background-color:#fff;border-color:#9bbbcb;outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.form-control::-webkit-date-and-time-value{height:1em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1;color:#444;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1em + 1rem + 2px);padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1em;border-radius:0}.form-control-color::-webkit-color-swatch{height:1em;border-radius:0}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(0.75rem - 3px);font-size:0.6875rem;font-weight:400;line-height:1;color:#444;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#9bbbcb;outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #444}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.6015625rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:0.859375rem;border-radius:.3rem}.form-check{display:block;min-height:.6875rem;padding-left:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:left;margin-left:-1.5em}.form-check-input{width:1em;height:1em;margin-top:0em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#9bbbcb;outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.form-check-input:checked{background-color:#377796;border-color:#377796}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#377796;border-color:#377796;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%239bbbcb'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(55,119,150,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(55,119,150,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#377796;border:0;border-radius:1rem;-webkit-appearance:none;appearance:none}.form-range::-webkit-slider-thumb:active{background-color:#c3d6e0}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#377796;border:0;border-radius:1rem;-moz-appearance:none;appearance:none}.form-range::-moz-range-thumb:active{background-color:#c3d6e0}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:0.6875rem;font-weight:400;line-height:1;color:#444;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:0}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.6015625rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:0}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.25em + 0.1875rem) center;background-size:calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1em + 0.75rem);background-position:top calc(0.25em + 0.1875rem) right calc(0.25em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.6015625rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:0}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.25em + 0.1875rem) center;background-size:calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1em + 0.75rem);background-position:top calc(0.25em + 0.1875rem) right calc(0.25em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.5em + 0.375rem) calc(0.5em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1;color:#444;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .5rem;font-size:0.6875rem;border-radius:0}.btn:hover{color:#444;text-decoration:none}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#377796;border-color:#377796}.btn-primary:hover{color:#fff;background-color:#2f6580;border-color:#2c5f78}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#2f6580;border-color:#2c5f78;box-shadow:0 0 0 .25rem rgba(85,139,166,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#2c5f78;border-color:#295971}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(85,139,166,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#377796;border-color:#377796}.btn-secondary{color:#000;background-color:#ccc;border-color:#ccc}.btn-secondary:hover{color:#000;background-color:#d4d4d4;border-color:#d1d1d1}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#000;background-color:#d4d4d4;border-color:#d1d1d1;box-shadow:0 0 0 .25rem rgba(173,173,173,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#000;background-color:#d6d6d6;border-color:#d1d1d1}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(173,173,173,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#000;background-color:#ccc;border-color:#ccc}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#377796;border-color:#377796}.btn-outline-primary:hover{color:#fff;background-color:#377796;border-color:#377796}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(55,119,150,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#377796;border-color:#377796}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(55,119,150,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#377796;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#ccc;border-color:#ccc}.btn-outline-secondary:hover{color:#000;background-color:#ccc;border-color:#ccc}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(204,204,204,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#000;background-color:#ccc;border-color:#ccc}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(204,204,204,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#ccc;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:#377796;text-decoration:none}.btn-link:hover{color:#377796;text-decoration:underline}.btn-link:focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:0.859375rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.6015625rem;border-radius:.2rem}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden}.collapsing.collapse-horizontal{width:0;height:auto}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:.5rem 0;margin:0;font-size:0.6875rem;color:#444;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:0}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:.25rem 1rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#377796}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1rem;margin-bottom:0;font-size:0.6015625rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1rem;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#377796}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{display:flex;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#377796}.nav-link:hover,.nav-link:focus{color:#377796;text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-left-radius:0;border-top-right-radius:0}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#fff #fff #ddd;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#000;background-color:#fff;border-color:#ddd #ddd #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:0}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#377796}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.4140625rem;padding-bottom:.4140625rem;margin-right:1rem;font-size:0.859375rem;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:0.859375rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:0}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-right:0;border-left:0;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:#666}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#666}.navbar-light .navbar-nav .nav-link{color:#666}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#333}.navbar-light .navbar-nav .nav-link.disabled{color:#666}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:#666}.navbar-light .navbar-toggler{color:#666;border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23666' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#666}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#666}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#f7f7f7;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:0;border-top-right-radius:0}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:#f7f7f7;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:0 0 0 0}.card-footer{padding:.5rem 1rem;background-color:#f7f7f7;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 0 0}.card-header-tabs{margin-right:-0.5rem;margin-bottom:-0.5rem;margin-left:-0.5rem;border-bottom:0}.card-header-tabs .nav-link.active{background-color:#f7f7f7;border-bottom-color:#f7f7f7}.card-header-pills{margin-right:-0.5rem;margin-left:-0.5rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1rem;border-radius:0}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:0;border-top-right-radius:0}.card-img,.card-img-bottom{border-bottom-right-radius:0;border-bottom-left-radius:0}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:.375rem 1rem;font-size:0.6875rem;color:#444;text-align:left;background-color:#fff;border:0;border-radius:0;overflow-anchor:none}.accordion-button:not(.collapsed){color:#fff;background-color:#377796;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(-180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-left:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23444'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#9bbbcb;outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion-item:first-of-type .accordion-button{border-top-left-radius:0;border-top-right-radius:0}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:.5rem;color:#fff;content:var(--bs-breadcrumb-divider, none) /* rtl: var(--bs-breadcrumb-divider, none) */}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;color:#377796;background-color:#f7f7f7;border:1px solid #ddd}.page-link:hover{z-index:2;color:#377796;text-decoration:none;background-color:#eee;border-color:#ddd}.page-link:focus{z-index:3;color:#377796;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#377796;border-color:#ddd}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#ddd}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-left-radius:0;border-bottom-left-radius:0}.page-item:last-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:0.859375rem}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.6015625rem}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:1em;border:0 solid rgba(0,0,0,0);border-radius:0}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#21475a;background-color:#d7e4ea;border-color:#c3d6e0}.alert-primary .alert-link{color:#1a3948}.alert-secondary{color:#525252;background-color:#f5f5f5;border-color:#f0f0f0}.alert-secondary .alert-link{color:#424242}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{display:flex;flex-direction:column;padding-left:0;margin-bottom:0;border-radius:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#444;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.5rem 1rem;color:#212529;background-color:inherit;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:inherit}.list-group-item.active{z-index:2;color:#fff;background-color:#377796;border-color:#377796}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-left-radius:0;border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-right-radius:0;border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:-1px;border-left-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#21475a;background-color:#d7e4ea}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#21475a;background-color:#c2cdd3}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#21475a;border-color:#21475a}.list-group-item-secondary{color:#525252;background-color:#f5f5f5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#525252;background-color:#ddd}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#525252;border-color:#525252}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:0;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(55,119,150,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.modal{position:fixed;top:0;left:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transform:translate(0, -50px)}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:0;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:.5rem 1rem;border-bottom:1px solid #ddd;border-top-left-radius:0;border-top-right-radius:0}.modal-header .btn-close{padding:.25rem .5rem;margin:-0.25rem -0.5rem -0.25rem auto}.modal-title{margin-bottom:0;line-height:1}.modal-body{position:relative;flex:1 1 auto;padding:1rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.75rem;border-top:1px solid #ddd;border-bottom-right-radius:0;border-bottom-left-radius:0}.modal-footer>*{margin:.25rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}@-webkit-keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-right-color:rgba(0,0,0,0);border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#377796}.link-primary:hover,.link-primary:focus{color:#2c5f78}.link-secondary{color:#ccc}.link-secondary:hover,.link-secondary:focus{color:#d6d6d6}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #ddd !important}.border-0{border:0 !important}.border-top{border-top:1px solid #ddd !important}.border-top-0{border-top:0 !important}.border-end{border-right:1px solid #ddd !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:1px solid #ddd !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:1px solid #ddd !important}.border-start-0{border-left:0 !important}.border-primary{border-color:#377796 !important}.border-secondary{border-color:#ccc !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:3em !important}.fs-2{font-size:3.6em !important}.fs-3{font-size:1rem !important}.fs-4{font-size:1.03125rem !important}.fs-5{font-size:0.859375rem !important}.fs-6{font-size:0.6875rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:0 !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:0 !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-end{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-bottom{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-start{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}#li_select_fontsize{display:none}font[color=red],span[style="color: #FF0000"]{color:#d44a26 !important}strong{font-weight:normal}body#loginform{margin:0;background-color:#666}body#loginform .card-header,body#loginform form#login_form label{display:none !important}body#loginform #page_content{background-color:#377796;margin:0 !important;padding:20px;margin-top:10% !important;min-height:240px}body#loginform div.container{color:#fff;text-align:left;width:48em;margin-left:auto;margin-right:auto}body#loginform div.container::before{color:#fff;background:url("../img/user.svg");content:"";float:left;margin-right:20px;margin-bottom:10px;background-color:#666;background-repeat:no-repeat;background-size:cover;overflow:hidden;height:240px;width:240px;line-height:1;text-align:center}body#loginform h1,body#loginform .h1{display:inline-block;text-align:left;color:#fff;font-size:2.5em;padding-top:0;margin-right:-50%;line-height:2}body#loginform a.logo,body#loginform .pma-fieldset legend{display:none}body#loginform .item{margin-bottom:10px}body#loginform input.textfield{width:100%;border:1px solid #fff;background:#eee;color:#666;box-sizing:border-box;margin:0}body#loginform input.textfield:hover,body#loginform input.textfield:focus{background-color:#fff;color:#333;box-sizing:border-box;margin:0}body#loginform input[type=submit]{background-color:#666;border:none;padding:7px;margin:0}body#loginform select{margin:0 !important;border:1px solid #377796;background:#377796;color:#eee;padding-left:0 !important;font-family:"Open Sans","Segoe UI",sans-serif;min-width:100%}body#loginform select:hover{border:1px solid #eee}body#loginform br{display:none}body#loginform .card-body{padding-top:0;padding-left:0;padding-right:0}body#loginform .card,body#loginform .card-footer,body#loginform .pma-fieldset{border:none;color:#eee;padding:0;margin-top:0;margin-bottom:10px;background:none}body#loginform .card:first-child,body#loginform .card-footer:first-child,body#loginform .pma-fieldset:first-child{border-bottom:none;margin:0}body#loginform .card.tblFooters,body#loginform .card-footer.tblFooters,body#loginform .pma-fieldset.tblFooters{border:none;margin:0;clear:none}.turnOffSelect{-webkit-user-select:none;-moz-user-select:none;user-select:none}#page_content{margin:20px !important}h2 img,.h2 img{display:none}h2 a img,.h2 a img{display:inline}.data{margin:10px 0}button.mult_submit,.checkall_box+label{text-decoration:none;color:#235a81;cursor:pointer;outline:none}button.mult_submit:hover,button.mult_submit:focus{text-decoration:underline;color:#235a81}.checkall_box+label:hover{text-decoration:underline;color:#235a81}dfn:hover{cursor:help}.data th{border-bottom:1px solid #ddd}.data th a:hover{color:#999 !important}.column_heading,.column_action{border:1px solid #ddd;background-color:#f6f6f6}a img{border:0}hr{color:#ddd;background-color:#ddd;border:0;height:1px}form{padding:0;margin:0;display:inline}input[type=text],input[type=password],input[type=number]{border:1px solid #ccc;color:#666;padding:5px;font-family:"Open Sans","Segoe UI",sans-serif;background-color:#fff}input[type=text]:focus,input[type=password]:focus,input[type=number]:focus{border:1px solid #428eb4;color:#444}input:not(.form-control)[type=text],input:not(.form-control)[type=password],input:not(.form-control)[type=number]{margin:6px}.sqlbutton{margin-top:1em;margin-left:0 !important;margin-right:14px !important}button:not(.accordion-button){margin-left:14px;padding:4px;color:#fff;text-decoration:none;background-color:#377796}textarea{overflow:visible;border:1px solid #ccc;color:#666;background-color:#fff}.pma-fieldset{margin-top:20px;border:1px solid #ddd;padding:20px;background-color:#f7f7f7}.pma-fieldset .pma-fieldset{margin:20px;margin-bottom:0;background-color:#fff;border:none}legend{float:none;padding:0 5px;width:initial;font-size:1em}button{display:inline}img,button{vertical-align:middle}select{border:1px solid #ccc;color:#666;padding:4px;font-family:"Open Sans","Segoe UI",sans-serif;background-color:#fff;max-width:17em}select:not(.form-select){margin:5px}select:focus{border:1px solid #428eb4;color:#444}.clearfloat{clear:both}.paddingtop{padding-top:1em}.separator{color:#fff}.result_query{background:#f7f7f7;margin-bottom:20px}div.tools{padding:10px;text-align:right}div.tools span{float:right;margin:6px 2px}div.tools a{color:#3a7ead !important}.pma-fieldset.tblFooters{margin-top:-1px;border-top:0;text-align:right;float:none;clear:both}div.null_div{height:20px;text-align:center;font-style:normal;min-width:50px}.pma-fieldset .formelement{float:left;margin-right:.5em}.pma-fieldset div[class=formelement]{white-space:normal}button.mult_submit{border:none;background-color:rgba(0,0,0,0);color:#377796;margin:0}.structure_actions_dropdown{background-color:#eee;color:#444}.structure_actions_dropdown .icon{vertical-align:middle !important}.condition{border-color:#d44a26 !important}th.condition{border:1px solid #d44a26;background:#d44a26;color:#fff !important}th.condition a{border:1px solid #d44a26;background:#d44a26;color:#fff !important}td.condition{border:1px solid}td.null{font-style:italic;color:#7d7d7d}table .valueHeader,table .value{text-align:right;white-space:normal}.value{font-family:"Consolas","Lucida Grande",monospace}img.lightbulb{cursor:pointer}.pdflayout{overflow:hidden;clip:inherit;background-color:#fff;display:none;border:1px solid #000;position:relative}.pdflayout_table{background:#d3dce3;color:#000;overflow:hidden;clip:inherit;z-index:2;display:inline;visibility:inherit;cursor:move;position:absolute;font-size:80%;border:1px dashed #000}.cm-sql-doc{text-decoration:none;border-bottom:1px dotted #999;color:inherit !important}.selectallarrow{margin-right:.3em;margin-left:.6em}.with-selected{margin-left:2em}#pma_errors,#pma_demo,#pma_footer{position:relative;padding:20px}#pma_errors #pma_errors{padding:0}.confirmation{color:#fff;background-color:#d44a26}.pma-fieldset.confirmation legend{background-color:#d44a26}.error{border:1px solid #d44a26 !important;padding:5px;color:#fff;background-color:#d44a26}.column_name{font-size:80%;margin:5px 2px}.new_central_col{width:100%}.tblcomment{font-size:70%;font-weight:normal;color:#009}.tblHeaders{font-family:"Open Sans Bold",sans-serif;color:#666;background:#f7f7f7;font-weight:normal}div.tools,.tblFooters{font-weight:normal;color:#666;background:#f7f7f7}.tblHeaders a:link,.tblHeaders a:active,.tblHeaders a:visited,div.tools a:link,div.tools a:active,div.tools a:visited,.tblFooters a:link,.tblFooters a:active,.tblFooters a:visited{color:blue}.tblHeaders a:hover,div.tools a:hover,.tblFooters a:hover{color:red}.disabled{color:#666}.disabled a:link,.disabled a:active,.disabled a:visited{color:#666}.disabled a:hover{color:#666;text-decoration:none}tr.disabled td,td.disabled{background-color:#f3f3f3;color:#aaa}.pre_wrap{white-space:pre-wrap}.pre_wrap br{display:none}li.last.database{margin-bottom:15px !important}div#dataDisplay input,div#dataDisplay select{margin:0;margin-right:.5em}div#dataDisplay th{line-height:2em}img.calendar{border:none}form.clock{text-align:center}div#tablestatistics table{float:left;margin-bottom:.5em;margin-right:1.5em;margin-top:.5em;min-width:16em}#topmenucontainer{width:100%}#page_nav_icons{position:fixed;top:0;right:0;z-index:99;padding:.89rem 0}#page_settings_icon{cursor:pointer;display:none}#page_settings_modal,#pma_navigation_settings{display:none}#span_table_comment{font-weight:normal;font-style:italic;white-space:nowrap;margin-left:10px}#textSQLDUMP{width:95%;height:95%;font-family:"Consolas","Lucida Grande",monospace;font-size:110%}#TooltipContainer{position:absolute;z-index:99;width:20em;height:auto;overflow:visible;visibility:hidden;background-color:#ffc;color:#060;border:.1em solid #000;padding:.5em}#fieldset_add_user_login div.item{display:flex;align-items:center;border-bottom:1px solid #ddd;padding-bottom:.3em;margin-bottom:.3em}#fieldset_add_user_login label{float:left;display:block;width:10em;max-width:100%;text-align:right;padding-right:.5em;margin-bottom:0}#fieldset_add_user_login span.options{float:left;display:block;width:12em;max-width:100%;padding-right:.5em}#fieldset_add_user_login span.options #select_pred_username,#fieldset_add_user_login span.options #select_pred_hostname,#fieldset_add_user_login span.options #select_pred_password{width:100%;max-width:100%}#fieldset_add_user_login input{width:12em;clear:right;max-width:100%}#fieldset_add_user_login span.options input{width:auto}#fieldset_add_user_login span.options input[type=button]{margin:4px}#fieldset_user_priv div.item{float:left;width:9em;max-width:100%}#fieldset_user_priv div.item div.item{float:none}#fieldset_user_priv div.item label{white-space:nowrap}#fieldset_user_priv div.item select{width:100%}#fieldset_user_global_rights .pma-fieldset,#fieldset_user_group_rights .pma-fieldset{float:left}.linkElem:hover{text-decoration:underline;color:#235a81;cursor:pointer}h3#serverstatusqueries span,#serverstatusqueries.h3 span{font-size:60%;display:inline}div#serverStatusTabs{margin-top:1em}caption a.top{float:right}div#serverstatusquerieschart{float:left;width:500px;height:350px;padding-left:30px}div#serverstatus table tbody td.descr a,div#serverstatus table .tblFooters a{white-space:nowrap}div.liveChart{clear:both;min-width:500px;height:400px;padding-bottom:80px}div#chartVariableSettings{margin-left:10px}table#chartGrid td{padding:3px;margin:0}table#chartGrid div.monitorChart{background:#f7f7f7;min-width:1px}div.tabLinks{margin-left:.3em;float:left;padding:5px 0}div.tabLinks a,div.tabLinks label{margin-right:7px}div.tabLinks .icon{margin:-0.2em .3em 0 0}.popupContent{display:none;position:absolute;border:1px solid #ccc;margin:0;padding:3px;background-color:#fff;z-index:2}div#logTable{padding-top:10px;clear:both}div#logTable table{width:100%}div#queryAnalyzerDialog{min-width:700px}div#queryAnalyzerDialog div.CodeMirror-scroll{height:auto}div#queryAnalyzerDialog div#queryProfiling{height:300px}div#queryAnalyzerDialog td.explain{width:250px}div#queryAnalyzerDialog table.queryNums{display:none;border:0;text-align:left}.smallIndent{padding-left:7px}div#profilingchart{width:850px;height:370px;float:left}#resizer{border:1px solid silver}#inner-resizer{padding:10px}#togglequerybox{margin:0 10px}#serverstatus h3,#serverstatus .h3{margin:15px 0;font-weight:normal;color:#999;font-size:1.7em}textarea#sqlquery{width:100%;border:1px solid #aaa;padding:5px;font-family:inherit}textarea#sql_query_edit{height:7em;width:95%;display:block}#mysqlmaininformation,#pmamaininformation{float:left;width:49%}#maincontainer ul{list-style-type:square;vertical-align:middle;color:#666;margin-left:20px}#maincontainer ul li{line-height:1.5}#full_name_layer{position:absolute;padding:2px;margin-top:-3px;z-index:801;border:solid 1px #888;background:#fff}li br{display:none}li#li_mysql_client_version{overflow:hidden;text-overflow:ellipsis}#body_browse_foreigners{background:#377796;margin:.5em .5em 0 .5em}#bodyquerywindow{background:#377796}#bodythemes{width:500px;margin:auto;text-align:center}#bodythemes img{border:.1em solid #000}#bodythemes a:hover img{border:.1em solid red}#selflink{clear:both;display:block;margin-top:20px;margin-bottom:20px;margin-left:20px;margin-right:20px;border-top:1px solid silver;text-align:right}.operations_half_width{width:100%;float:left;margin-bottom:10px}.operations_full_width{width:100%;clear:both}#qbe_div_table_list,#qbe_div_sql_query{float:left}kbd{color:#444;background-color:rgba(0,0,0,0);box-shadow:none}code{font-size:1em;color:#444}code.php{display:block;padding-left:.3em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:ltr}.sqlOuter code.sql,div.sqlvalidate,#inline_editor_outer{display:block;padding:1em;margin:1em;overflow:auto;background-color:#fff;border:1px solid #ddd;direction:ltr}textarea#partitiondefinition{height:3em}.hide{display:none}#list_server{list-style-image:none;padding:0}div.upload_progress{width:400px;margin:3em auto;text-align:center}div.upload_progress_bar_outer{border:1px solid #000;width:202px;position:relative;margin:0 auto 1em;color:#444}div.upload_progress_bar_inner{background-color:#377796;width:0;height:12px;margin:1px;overflow:hidden;color:#000;position:relative}div.upload_progress_bar_outer div.percentage{position:absolute;top:0;left:0;width:202px}div.upload_progress_bar_inner div.percentage{top:-1px;left:-1px}div#statustext{margin-top:.5em}table#serverconnection_src_remote,table#serverconnection_trg_remote,table#serverconnection_src_local,table#serverconnection_trg_local{float:left}input[type=text].invalid_value,input[type=password].invalid_value,input[type=number].invalid_value,input[type=date].invalid_value .invalid_value{background:#fcc}.ajax_notification{top:0;position:fixed;z-index:1100;text-align:center;display:inline;left:0;right:0;background-image:url("../img/ajax_clock_small.gif");background-repeat:no-repeat;background-position:46%;margin:0;background-color:#eee;color:#444;padding:10px !important;border:none}.dismissable{margin-left:-10px;margin-top:-10px}#loading_parent{position:relative;width:100%}#popup_background{display:none;position:fixed;width:100%;height:100%;top:0;left:0;background:#000;z-index:1000;overflow:hidden}#tablestructure tbody label{margin:.3rem 0}#structure-action-links a{margin-right:1em}#index_frm .index_info input,#index_frm .index_info select{width:14em;box-sizing:border-box}#index_frm .index_info div{padding:.2em 0}#index_frm .index_info .label{float:left;min-width:12em}#index_frm .slider{width:10em;margin:.6em;float:left}#index_frm .add_fields{float:left}#index_frm .add_fields input{margin-left:1em}#index_frm input{margin:0}#index_frm td{vertical-align:middle}table#index_columns{width:100%}table#index_columns select{width:85%;float:right}#move_columns_dialog div{padding:1em}#move_columns_dialog ul{list-style:none;margin:0;padding:0}#move_columns_dialog li{background:#f7f7f7;border:1px solid #aaa;color:#666;font-weight:bold;margin:.4em;padding:.2em}.config-form .pma-fieldset{margin-top:0;padding:0;clear:both;background:none}.config-form legend{display:none}.config-form .pma-fieldset p{margin:0;padding:10px;background:#fff;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;font-size:16px}.config-form .pma-fieldset .errors{margin:0 -2px 1em;padding:.5em 1.5em;background:#fbead9;border-color:#c83838;border-style:solid;border-width:1px 0;list-style:none;font-family:sans-serif;font-size:small}.config-form .pma-fieldset .inline_errors{margin:.3em .3em .3em;margin-left:0;padding:0;list-style:none;color:#9a0000;font-size:small}.config-form .pma-fieldset table{background-color:#fff}.config-form .pma-fieldset label{font-weight:normal}.config-form .pma-fieldset textarea{margin:5px;padding:5px}.insertRowTable textarea{margin:5px;padding:5px}.config-form .card{margin-top:0}.config-form fieldset th{padding:10px;padding-left:.5em;text-align:left;vertical-align:top}.config-form fieldset .doc{margin-left:1em}.config-form fieldset .disabled-notice{margin-left:1em;font-size:80%;text-transform:uppercase;color:#e00;cursor:help}.config-form fieldset td{padding-top:.3em;padding-bottom:.3em;vertical-align:top;border-bottom:1px #eee solid;border-right:none}.config-form fieldset th{border-bottom:1px #eee solid;border-right:none}.config-form fieldset th small,.config-form fieldset th .small{display:block;font-weight:normal;font-family:sans-serif;font-size:x-small;color:#444}fieldset .group-header th{background:#fff}fieldset .group-header+tr th{padding-top:.6em}fieldset .group-field-1 th,fieldset .group-header-2 th{padding-left:1.5em}fieldset .group-field-2 th,fieldset .group-header-3 th{padding-left:3em}fieldset .group-field-3 th{padding-left:4.5em}fieldset .disabled-field th{color:#666;background-color:#ddd}fieldset .disabled-field th small,fieldset .disabled-field th .small{color:#666;background-color:#ddd}fieldset .disabled-field td{color:#666;background-color:#ddd}form.create_table_form .pma-fieldset.tblFooters,form#multi_edit_central_columns .pma-fieldset.tblFooters{background:none;border:none}#db_or_table_specific_priv .tblFooters{margin-top:-68px}#edit_user_dialog,#add_user_dialog{margin:20px !important}.config-form span.checkbox{padding:2px;display:inline-block}.config-form .custom{background:#ffc}.config-form span.checkbox.custom{padding:1px;border:1px #edec90 solid;background:#ffc}.config-form img.ic_s_reload{filter:invert(70%)}.config-form .field-error{border-color:#a11 !important}.config-form input[type=text],.config-form input[type=password],.config-form input[type=number]{border:1px #a7a6aa solid;height:auto}.config-form input[type=text]:focus,.config-form input[type=password]:focus,.config-form input[type=number]:focus{border:1px #6676ff solid;background:#f7fbff}.config-form select,.config-form textarea{border:1px #a7a6aa solid;height:auto}.config-form select:focus,.config-form textarea:focus{border:1px #6676ff solid;background:#f7fbff}.config-form .field-comment-mark{font-family:serif;color:#007;cursor:help;padding:0 .2em;font-weight:bold;font-style:italic}.config-form .field-comment-warning{color:#a00}.config-form dd{margin-left:.5em}.config-form dd::before{content:"▸ "}.click-hide-message{cursor:pointer}.prefsmanage_opts{margin-left:2em}#prefs_autoload{margin-bottom:.5em;margin-left:.5em}input#auto_increment_opt{width:-webkit-min-content;width:-moz-min-content;width:min-content}#placeholder .button{position:absolute;cursor:pointer}#placeholder div.button{font-size:smaller;color:#999;background-color:#eee;padding:2px}.wrapper{float:left;margin-bottom:1.5em}.toggleButton{position:relative;cursor:pointer;font-size:.8em;text-align:center;line-height:1.4em;height:1.55em;overflow:hidden;border-right:.1em solid #888;border-left:.1em solid #888}.toggleButton table,.toggleButton td,.toggleButton img{padding:0;position:relative}.toggleButton .toggle-container{position:absolute}.toggleButton .toggle-container td{background:none}.toggleButton .toggleOn{color:#fff;padding:0 1em}.toggleButton .toggleOff{padding:0 1em}.doubleFieldset .pma-fieldset{width:48%;float:left;padding:0}.doubleFieldset legend{margin-left:1.5em}.doubleFieldset div.wrap{padding:1.5em}form.append_fields_form .tblFooters{background:none;border:none}#table_columns{display:block;overflow:auto}#table_columns input[type=text],#table_columns input[type=password],#table_columns input[type=number],#table_columns input[type=date]{width:10em;box-sizing:border-box}#table_columns select{width:10em;box-sizing:border-box;margin:6px}#placeholder{position:relative;border:1px solid #aaa;float:right;overflow:hidden}#placeholder .button{position:absolute}.placeholderDrag{cursor:move}#left_arrow{left:8px;top:26px}#right_arrow{left:26px;top:26px}#up_arrow{left:17px;top:8px}#down_arrow{left:17px;top:44px}#zoom_in{left:17px;top:67px}#zoom_world{left:17px;top:85px}#zoom_out{left:17px;top:103px}.colborder{cursor:col-resize;height:100%;margin-left:-6px;position:absolute;width:5px}.colborder_active{border-right:2px solid #a44}.pma_table th.draggable span{display:block;overflow:hidden}.pma_table td{position:static}.pma_table tbody td span{display:block;overflow:hidden}.pma_table tbody td span code span{display:inline}.modal-copy input{display:block;width:100%;margin-top:1.5em;padding:.3em 0}.cRsz{position:absolute}.cCpy{background:#333;color:#fff;font-weight:bold;margin:.1em;padding:.3em;position:absolute}.cPointer{height:20px;width:10px;margin-left:-10px;margin-top:-5px;position:absolute;background:url("../img/col_pointer.png")}.tooltip{background:#333 !important;opacity:.8 !important;z-index:9999;border:1px solid #000 !important;font-size:10px !important;font-weight:normal !important;padding:5px !important;width:260px;line-height:1.5}.tooltip *{background:none !important;color:#fff !important}.cDrop{right:0;position:absolute;top:0}.coldrop{background:url("../img/col_drop.png");cursor:pointer;height:16px;margin-top:.3em;width:16px}.coldrop:hover{background-color:#999}.coldrop-hover{background-color:#999}.cList{background:#fff;border:solid 1px #ccc;position:absolute;margin-left:75%;right:0;max-width:100%;overflow-wrap:break-word}.cList .lDiv div{padding:.2em .5em .2em;padding-left:.2em}.cList .lDiv div:hover{background:#377796;cursor:pointer;color:#fff}.cList .lDiv div input{cursor:pointer}.showAllColBtn{border-bottom:solid 1px #ccc;border-top:solid 1px #ccc;cursor:pointer;font-size:.9em;font-family:"Open Sans Bold",sans-serif;padding:.35em 1em;text-align:center;font-weight:normal}.showAllColBtn:hover{background:#377796;cursor:pointer;color:#fff}#page_content{line-height:1.5}.navigation_separator{color:#eee;display:inline-block;font-size:1.5em;text-align:center;height:1.4em}.navigation{width:100%;background-color:#377796;color:#eee}.navigation td{margin:0;padding:0;vertical-align:middle;white-space:nowrap}.navigation input[type=submit]{background:#377796;color:#eee;border:none;filter:none;margin:5px;padding:.4em}.navigation input[type=submit]:hover{color:#fff;cursor:pointer;background-color:#666}.navigation input.edit_mode_active{color:#fff;cursor:pointer;background-color:#666}.navigation select{margin:0 .8em;border:none}.navigation input[type=text]{border:none}.navigation_goto{width:100%}.insertRowTable td,.insertRowTable th{vertical-align:middle}.cEdit{margin:0;padding:0;position:absolute}.cEdit input[type=text],.cEdit input[type=password],.cEdit input[type=number]{background:#fff;height:100%;margin:0;padding:0}.cEdit .edit_area{background:#fff;border:1px solid #999;min-width:10em;padding:.3em .5em}.cEdit .edit_area select,.cEdit .edit_area textarea{width:97%}.cEdit .cell_edit_hint{color:#555;font-size:.8em;margin:.3em .2em}.cEdit .edit_box{overflow-x:hidden;overflow-y:scroll;padding:0;margin-top:10px}.cEdit .edit_box_posting{background:#fff url("../img/ajax_clock_small.gif") no-repeat right center;padding-right:1.5em}.cEdit .edit_area_loading{background:#fff url("../img/ajax_clock_small.gif") no-repeat center;height:10em}.cEdit .goto_link{background:#eee;color:#555;padding:.2em .3em}.saving_edited_data{background:url("../img/ajax_clock_small.gif") no-repeat left;padding-left:20px}.relationalTable select{width:125px;margin-right:5px}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{height:25px;margin-bottom:-25px}.ui-timepicker-div dl dd{margin:0 10px 10px 85px}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:none;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right}.ui-timepicker-rtl dl dd{margin:0 65px 10px 10px}.ui_tpicker_time_input{width:100%}body .ui-widget{font-size:1em}body #ui-datepicker-div{z-index:9999 !important}.ui-dialog .pma-fieldset legend a{color:#235a81}div#page_content div#tableslistcontainer{margin-top:1em}div#page_content div#tableslistcontainer table.data{border-top:.1px solid #eee}div#page_content div.result_query{margin-top:1em}table.show_create{margin-top:1em}table.show_create td{border-right:1px solid #bbb}#alias_modal table th{vertical-align:middle;padding-left:1em}#alias_modal label.col-2{min-width:20%;display:inline-block}#alias_modal select{width:25%;margin-right:2em}#alias_modal label{font-weight:bold}.small_font{font-size:smaller}#pma_console_container{width:100%;position:fixed;bottom:0;left:0;z-index:100}textarea{resize:both}#pma_console{position:relative;margin-left:250px}#pma_console .templates{display:none}#pma_console .mid_text{vertical-align:middle}#pma_console .toolbar{position:relative;background:#f7f7f7;border-top:solid 1px #ccc;cursor:n-resize}#pma_console .toolbar span{vertical-align:middle}#pma_console .toolbar.collapsed{cursor:default}#pma_console .toolbar.collapsed:not(:hover){display:inline-block;border-right:solid 1px #ccc}#pma_console .toolbar.collapsed>.button{display:none}#pma_console .message span.text,#pma_console .message span.action{padding:0 3px;display:inline-block}#pma_console .toolbar .button,#pma_console .toolbar .text{padding:0 3px;display:inline-block}#pma_console .switch_button{padding:0 3px;display:inline-block}#pma_console .message span.action,#pma_console .toolbar .button,#pma_console .switch_button{cursor:pointer}#pma_console .toolbar .text{font-weight:bold}#pma_console .toolbar .button,#pma_console .toolbar .text{margin-right:.4em;float:right}#pma_console .content{overflow-x:hidden;overflow-y:auto;margin-bottom:-65px;border-top:solid 1px #ccc;background:#fff;padding-top:.4em}#pma_console .content.console_dark_theme{background:#000;color:#fff}#pma_console .content.console_dark_theme .CodeMirror-wrap{background:#000;color:#fff}#pma_console .content.console_dark_theme .action_content{color:#000}#pma_console .content.console_dark_theme .message{border-color:#373b41}#pma_console .content.console_dark_theme .CodeMirror-cursor{border-color:#fff}#pma_console .content.console_dark_theme .cm-keyword{color:#de935f}#pma_console .message,#pma_console .query_input{position:relative;font-family:Monaco,Consolas,monospace;cursor:text;margin:0 10px .2em 1.4em}#pma_console .message{border-bottom:solid 1px #ccc;padding-bottom:.2em}#pma_console .message.expanded>.action_content{position:relative}#pma_console .message::before{left:-0.7em;position:absolute;content:">"}#pma_console .query_input::before{left:-0.7em;position:absolute;content:">";top:-2px}#pma_console .query_input textarea{width:100%;height:4em;resize:vertical}#pma_console .message:hover::before{color:#7cf;font-weight:bold}#pma_console .message.expanded::before{content:"]"}#pma_console .message.welcome::before{display:none}#pma_console .message.failed::before,#pma_console .message.failed.expanded::before,#pma_console .message.failed:hover::before{content:"=";color:#944}#pma_console .message.pending::before{opacity:.3}#pma_console .message.collapsed>.query{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#pma_console .message.expanded>.query{display:block;white-space:pre;word-wrap:break-word}#pma_console .message .text.targetdb,#pma_console .message.collapsed .action.collapse,#pma_console .message.expanded .action.expand{display:none}#pma_console .message .action.requery,#pma_console .message .action.profiling,#pma_console .message .action.explain,#pma_console .message .action.bookmark{display:none}#pma_console .message.select .action.profiling,#pma_console .message.select .action.explain{display:inline-block}#pma_console .message.history .text.targetdb,#pma_console .message.successed .text.targetdb{display:inline-block}#pma_console .message.history .action.requery,#pma_console .message.history .action.bookmark{display:inline-block}#pma_console .message.bookmark .action.requery,#pma_console .message.bookmark .action.bookmark{display:inline-block}#pma_console .message.successed .action.requery,#pma_console .message.successed .action.bookmark{display:inline-block}#pma_console .message .action_content{position:absolute;bottom:100%;background:#ccc;border:solid 1px #aaa}#pma_console .message.bookmark .text.targetdb,#pma_console .message .text.query_time{margin:0;display:inline-block}#pma_console .message.failed .text.query_time,#pma_console .message .text.failed{display:none}#pma_console .message.failed .text.failed{display:inline-block}#pma_console .message .text{background:#fff}#pma_console .message.collapsed>.action_content{display:none}#pma_console .message.collapsed:hover>.action_content{display:block}#pma_console .message .bookmark_label{padding:0 4px;top:0;background:#369;color:#fff}#pma_console .message .bookmark_label.shared{background:#396}#pma_console .query_input{position:relative}#pma_console .mid_layer{height:100%;width:100%;position:absolute;top:0;background:#ccc;display:none;cursor:pointer;z-index:200}#pma_console .card{position:absolute;width:94%;height:100%;min-height:48px;left:100%;top:0;border-left:solid 1px #999;z-index:300;transition:left .2s}#pma_console .card.show{left:6%}#pma_bookmarks .content.add_bookmark,#pma_console_options .content{padding:4px 6px}#pma_bookmarks .content.add_bookmark .options{margin-left:1.4em;padding-bottom:.4em;margin-bottom:.4em;border-bottom:solid 1px #ccc}#pma_bookmarks .content.add_bookmark .options button{margin:0 7px;vertical-align:bottom}#pma_bookmarks .content.add_bookmark input[type=text]{margin:0;padding:2px 4px}#pma_console .button.hide,#pma_console .message span.text.hide{display:none}#debug_console.grouped .ungroup_queries{display:inline-block}#debug_console.ungrouped .group_queries{display:inline-block}#debug_console.ungrouped .ungroup_queries,#debug_console.ungrouped .sort_count{display:none}#debug_console.grouped .group_queries{display:none}#debug_console .count{margin-right:8px}#debug_console .show_trace .trace,#debug_console .show_args .args{display:block}#debug_console .hide_trace .trace,#debug_console .hide_args .args,#debug_console .show_trace .action.dbg_show_trace,#debug_console .hide_trace .action.dbg_hide_trace{display:none}#debug_console .traceStep.hide_args .action.dbg_hide_args,#debug_console .traceStep.show_args .action.dbg_show_args{display:none}#debug_console .traceStep::after{content:"";display:table;clear:both}#debug_console .trace.welcome::after,#debug_console .debug>.welcome::after{content:"";display:table;clear:both}#debug_console .debug_summary{float:left}#debug_console .trace.welcome .time,#debug_console .traceStep .file,#debug_console .script_name{float:right}#debug_console .traceStep .args pre{margin:0}.cm-s-pma .CodeMirror-code{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-code pre{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-measure>pre,.cm-s-pma .CodeMirror-code>pre,.cm-s-pma .CodeMirror-lines{padding:0}.cm-s-pma.CodeMirror{resize:none;height:auto;width:100%;min-height:initial;max-height:initial}.cm-s-pma .CodeMirror-scroll{cursor:text}.pma_drop_handler{display:none;position:fixed;top:0;left:0;width:100%;background:rgba(0,0,0,.6);height:100%;z-index:999;color:#fff;font-size:30pt;text-align:center;padding-top:20%}.pma_sql_import_status{display:none;position:fixed;bottom:0;right:25px;width:400px;border:1px solid #999;background:#f3f3f3}.pma_sql_import_status h2,.pma_sql_import_status .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal}.pma_drop_result h2,.pma_drop_result .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal}.pma_sql_import_status div{height:270px;overflow-y:auto;overflow-x:hidden;list-style-type:none}.pma_sql_import_status div li{padding:8px 10px;border-bottom:1px solid #bbb;color:#940e0e;background:#fff}.pma_sql_import_status div li .filesize{float:right}.pma_sql_import_status h2 .minimize,.pma_sql_import_status .h2 .minimize{float:right;margin-right:5px;padding:0 10px}.pma_sql_import_status h2 .close,.pma_sql_import_status .h2 .close{float:right;margin-right:5px;padding:0 10px;display:none}.pma_sql_import_status h2 .minimize:hover,.pma_sql_import_status .h2 .minimize:hover,.pma_sql_import_status h2 .close:hover,.pma_sql_import_status .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_result h2 .close:hover,.pma_drop_result .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_file_status{color:#235a81}.pma_drop_file_status span.underline:hover{cursor:pointer;text-decoration:underline}.pma_drop_result{position:fixed;top:10%;left:20%;width:60%;background:#fff;min-height:300px;z-index:800;cursor:move}.pma_drop_result h2 .close,.pma_drop_result .h2 .close{float:right;margin-right:5px;padding:0 10px}.dependencies_box{background-color:#fff;border:3px ridge #000}#composite_index_list{list-style-type:none;list-style-position:inside}span.drag_icon{display:inline-block;background-image:url("../img/s_sortable.png");background-position:center center;background-repeat:no-repeat;width:1em;height:3em;cursor:move}.topmargin{margin-top:1em}meter[value="1"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #e32929 5%, transparent 10%, #e32929)}meter[value="2"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #f60 5%, transparent 10%, #f60)}meter[value="3"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #ffd700 5%, transparent 10%, #ffd700)}body .ui-dialog .ui-dialog-titlebar-close{right:.3em;left:initial}body .ui-dialog .ui-dialog-title{float:left}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:right}body .ui-corner-all,body .ui-corner-top,body .ui-corner-left,body .ui-corner-tl{border-top-left-radius:0}body .ui-corner-all,body .ui-corner-top,body .ui-corner-right,body .ui-corner-tr{border-top-right-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-left,body .ui-corner-bl{border-bottom-left-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-right,body .ui-corner-br{border-bottom-right-radius:0}body .ui-dialog{padding:0}body .ui-dialog .ui-widget-header{color:#fff;border:none;background-color:#377796;background-image:none}body .ui-dialog .ui-dialog-title{padding:5px;font-weight:normal}body .ui-dialog .ui-dialog-buttonpane button{font-family:"Open Sans","Segoe UI",sans-serif;color:#fff;background-color:#377796;background-image:none;border:1px solid #377796}body .ui-dialog .ui-dialog-buttonpane button.ui-state-hover{background-color:#428eb4;border:1px solid #428eb4}body .ui-dialog .ui-dialog-buttonpane button.ui-state-active{background-color:#333;border:1px solid #333}#tooltip_editor{font-size:12px;background-color:#fff;opacity:.95;filter:alpha(opacity=95);padding:5px}#tooltip_font{font-weight:bold}#selection_box{z-index:1000;height:205px;position:absolute;background-color:skyblue;opacity:.4;filter:alpha(opacity=40);pointer-events:none}#filterQueryText{vertical-align:baseline}.multi_table_query_form .query-form__tr--hide{display:none}.multi_table_query_form .query-form__fieldset--inline,.multi_table_query_form .query-form__select--inline{display:inline}.multi_table_query_form .query-form__tr--bg-none{background:none}.multi_table_query_form .query-form__input--wide{width:91%}.multi_table_query_form .query-form__multi-sql-query{float:left}.pre-scrollable{max-height:340px;overflow-y:scroll}@media(min-width: 1200px){div.tools{text-align:left}.pma-fieldset.tblFooters,.tblFooters{text-align:left}}.resize-vertical{resize:vertical}p.enum_notice{margin:5px 2px;font-size:80%}#enum_editor p{margin-top:0;font-style:italic}#enum_editor .values{width:100%}#enum_editor .add{width:100%}#enum_editor .add td{vertical-align:middle;width:50%;padding:0 0 0;padding-left:1em}#enum_editor .values td.drop{width:1.8em;cursor:pointer;vertical-align:middle}#enum_editor .values input{margin:.1em 0;padding-right:2em;width:100%}#enum_editor .values img{vertical-align:middle}#enum_editor input.add_value{margin:0;margin-right:.4em}#enum_editor_output textarea{width:100%;float:right;margin:1em 0 0 0}.enum_hint{position:relative}.enum_hint a{position:absolute;left:81%;bottom:.35em}a.close_gis_editor{float:right}#gis_editor{display:none;position:fixed;z-index:1001;overflow-y:auto;overflow-x:hidden}#gis_data{min-height:230px}#gis_data_textarea{height:6em}#gis_data_editor{background:#d0dce0;padding:15px;min-height:500px}#gis_data_editor .choice{display:none}#gis_data_editor input[type=text]{width:75px}#pma_navigation{width:250px;overflow:hidden;position:fixed;top:0;left:0;height:100%;background:#eee;color:#444;z-index:800}#pma_navigation input[type=text]{background-color:#fff;font-family:"Open Sans","Segoe UI",sans-serif}#pma_navigation a:link,#pma_navigation a:visited,#pma_navigation a:active{text-decoration:none;color:#333}#pma_navigation a img{border:0}#pma_navigation select#select_server,#pma_navigation select#lightm_db{width:100%}#pma_navigation button{display:inline}#pma_navigation_content{width:100%;position:absolute;top:0;left:0;z-index:0}#pma_navigation ul{margin:0}#pma_navigation form{margin:0;padding:0;display:inline}#pma_navigation div.pageselector{text-align:center;margin:0;margin-left:.75em;border-left:1px solid #666}#pma_navigation #pmalogo{margin:0;padding:12px;background:#377796;color:#fff;font-size:14px;cursor:default;height:15px;line-height:100%;box-sizing:content-box}#pma_navigation #pmalogo::after{font-family:"Open Sans Extrabold","Segoe Black",sans-serif;text-transform:uppercase;margin-left:5px;content:"phpMyAdmin"}#pma_navigation #imgpmalogo{display:none}#pma_navigation #recentTableList{text-align:center;padding:10px}#pma_navigation #recentTableList select{min-width:100%}#pma_navigation #databaseList{text-align:center;margin:10px}#pma_navigation #navipanellinks{padding-top:1em;padding-bottom:1em;text-align:center;background-color:#ddd}#pma_navigation #navipanellinks a{box-sizing:content-box}#pma_navigation #navipanellinks .icon{margin:0}img.ic_b_home,img.ic_s_loggoff,img.ic_b_docs,img.ic_b_sqlhelp,img.ic_s_reload{filter:invert(70%)}#navipanellinks a{height:16px;width:16px;color:#444;margin-right:5px;padding:5px;font-size:15px}#navipanellinks a:hover{color:#666}#pma_navigation #serverChoice,#pma_navigation #databaseList,#pma_navigation div.pageselector.dbselector{text-align:center;padding:5px 10px 0;border:0}#pma_navigation_content>img.throbber{display:none;margin:.3em auto 0}#pma_navigation_tree{margin:0;margin-left:10px;overflow:hidden;height:74%;position:relative}#pma_navigation_select_database{text-align:left;padding:0 0 0;border:0;margin:0}#pma_navigation_db_select{margin-top:.5em;margin-left:.75em}#pma_navigation_db_select select{border:1px solid #bbb;border-top:1px solid #bbb;color:#333;padding:4px 6px;margin:0 0 0;width:92%}#pma_navigation_tree_content{width:100%;overflow:hidden;overflow-y:auto;position:absolute;height:100%}#pma_navigation_tree li .dbItemControls{padding-right:4px;float:right}#pma_navigation_tree li .navItemControls{display:none;padding-right:4px;float:right}#pma_navigation_tree li.activePointer .navItemControls{display:block;opacity:.5}#pma_navigation_tree li.activePointer .navItemControls:hover{opacity:1}#pma_navigation_tree_content a.hover_show_full{position:relative;z-index:100}#pma_navigation_tree a{color:#eee;padding-left:0}#pma_navigation_tree a:hover{text-decoration:none;color:#666}#pma_navigation_tree li{margin-bottom:0}#pma_navigation_tree li.activePointer,#pma_navigation_tree li.selected{color:#666}#pma_navigation_tree ul{clear:both;padding:0;list-style-type:none;margin:0}#pma_navigation_tree ul ul{position:relative}#pma_navigation_tree li{white-space:nowrap;clear:both;min-height:17px}#pma_navigation_tree img{margin:0}#pma_navigation_tree i{display:block}#pma_navigation_tree div.block{position:relative;width:1.5em;height:2em;min-width:16px;min-height:16px;float:left}#pma_navigation_tree div.block.double{width:2.5em}#pma_navigation_tree div.block i,#pma_navigation_tree div.block b{width:1.5em;height:2em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;left:.75em;z-index:0;margin-top:-4px}#pma_navigation_tree div.block i{display:block;border-left:1px solid #616161;border-bottom:1px solid #616161;position:relative;z-index:0}#pma_navigation_tree div.block i.first{border-left:0}#pma_navigation_tree div.block b{display:block;height:.75em;bottom:0;left:.75em;border-left:1px solid #616161}#pma_navigation_tree div.block a,#pma_navigation_tree div.block u{position:absolute;left:50%;top:50%;z-index:10}#pma_navigation_tree div.block a+a{left:100%}#pma_navigation_tree div.block.double a,#pma_navigation_tree div.block.double u{left:33%}#pma_navigation_tree div.block.double a+a{left:85%}#pma_navigation_tree div.block img{position:relative;top:-0.6em;left:0;margin-left:-7px}#pma_navigation_tree div.throbber img{top:2px;left:2px}#pma_navigation_tree li.last>ul{background:none}#pma_navigation_tree li>a,#pma_navigation_tree li>i{line-height:1.5em;height:1.5em;padding-left:.3em}#pma_navigation_tree .list_container{border-left:1px solid #616161;margin-left:.75em;padding-left:.75em}#pma_navigation_tree .list_container li.last.database{margin-bottom:0 !important}#pma_navigation_tree .last>.list_container{border-left:0 solid #616161}li.fast_filter{padding-left:.75em;margin-left:.75em;padding-right:15px;border-left:1px solid #616161}li.fast_filter input{font-size:.7em}li.fast_filter .searchClauseClear{background-color:rgba(0,0,0,0);font-weight:bold;color:#800;font-size:.7em}li.fast_filter .searchClauseClear:hover{background-color:rgba(0,0,0,0)}li.fast_filter.db_fast_filter{border:0;margin-left:0}#navigation_controls_outer{min-height:21px !important}#pma_navigation_collapse{padding-right:2px}#navigation_controls_outer.activePointer{background-color:rgba(0,0,0,0) !important}#navigation_controls{float:right;padding-right:23px}#pma_navigation_resizer{width:1px;height:100%;background-color:#aaa;cursor:col-resize;position:fixed;top:0;left:250px;z-index:801}#pma_navigation_collapser{width:20px;padding-top:4px;padding-bottom:12px;background:#377796;border-bottom:1px solid #377796;line-height:22px;color:#fff;position:fixed;top:0;left:250px;text-align:center;cursor:pointer;z-index:801}.pma_quick_warp{margin-top:5px;margin-left:10px;position:relative}.pma_quick_warp .drop_list{float:left;margin-left:3px;padding:2px 0}.pma_quick_warp .drop_button{padding:.2em .5em;border:1px solid #ddd;background:#f2f2f2;cursor:pointer}.pma_quick_warp .drop_list:hover .drop_button{background:#fff}.pma_quick_warp .drop_list ul{position:absolute;margin:0;padding:0;overflow:hidden;overflow-y:auto;list-style:none;background:#fff;border:1px solid #ddd;top:100%;left:3px;right:0;display:none;z-index:802}.pma_quick_warp .drop_list:hover ul{display:block}.pma_quick_warp .drop_list li{white-space:nowrap;padding:0}.pma_quick_warp .drop_list li img{vertical-align:sub}.pma_quick_warp .drop_list li:hover{background:#f2f2f2}.pma_quick_warp .drop_list a{display:block;padding:.2em .3em}.pma_quick_warp .drop_list a.favorite_table_anchor{clear:left;float:left;padding:.1em .3em 0}.input_tab{background-color:#efefef;color:#000;border:1px solid #ccc}.content_fullscreen{position:relative;overflow:auto}#canvas_outer{position:relative;width:100%;display:block}#canvas{background-color:#fff;color:#000}canvas.designer{display:inline-block;overflow:hidden;text-align:left}canvas.designer *{behavior:url(#default#VML)}.designer_tab{color:#333;border-collapse:collapse;border:1px solid #ccc;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.designer_tab .header{background-color:#f6f6f6}.tab_zag{text-align:center;cursor:move;padding:1px;font-weight:bold;vertical-align:middle}.tab_zag_2{text-align:center;cursor:move;padding:1px;font-weight:bold;background-color:#f6f6f6;vertical-align:middle}.tab_field{background:#fff;color:#000;cursor:default}.tab_field:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}.tab_field_3{background-color:#ffe6e6 !important;color:#000;cursor:default}.tab_field_3:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}#designer_hint{white-space:nowrap;position:absolute;background-color:#9f9;color:#000;z-index:3;border:#0c6 solid 1px;display:none}.scroll_tab{overflow:auto;width:100%;height:500px}.designer_Tabs{cursor:default;color:#333;white-space:nowrap;text-decoration:none;text-indent:3px;margin-left:2px;text-align:left;border:#ccc solid 0}.designer_Tabs:hover{cursor:default;color:#666;background:#eee;text-indent:3px;white-space:nowrap;text-decoration:none;border:#eee solid 0;text-align:left}.owner{font-weight:normal;color:#888}.option_tab{padding-left:2px;padding-right:2px;width:5px}.select_all{vertical-align:top;padding-left:2px;padding-right:2px;cursor:default;width:1px;color:#000;background-repeat:repeat-x}.small_tab{vertical-align:top;background-color:#666;color:#fff;cursor:default;text-align:center;font-weight:bold;padding-left:2px;padding-right:2px;width:1px;text-decoration:none}.small_tab:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;padding-left:2px;padding-right:2px;text-align:center;font-weight:bold;width:1px;text-decoration:none}.small_tab_pref{background-color:#f6f6f6;text-align:center;width:1px}.small_tab_pref:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;text-align:center;font-weight:bold;width:1px;text-decoration:none}.L_butt2_1{padding-left:5px;text-decoration:none;vertical-align:middle;cursor:default}.L_butt2_1:hover{padding-left:5px;color:#000;text-decoration:none;vertical-align:middle;cursor:default}.bor{width:10px;height:10px}#osn_tab{position:absolute;background-color:#fff;color:#000;width:100% !important}.designer_header{background-color:#f6f6f6;border-top:20px solid #fff;color:#333;display:block;height:28px;margin-left:-20px;margin-top:-60px;padding:5px 20px;position:fixed;text-align:center;width:100%;z-index:101}.designer_header a{display:block;float:left;margin:3px 1px 4px;height:20px}.designer_header .M_bord{display:block;float:left;margin:4px;height:20px;width:2px}.designer_header a.first{margin-right:1em}.designer_header a.last{margin-left:1em}a.M_butt_Selected_down_IE,a.M_butt_Selected_down,a.M_butt_Selected_down_IE:hover,a.M_butt_Selected_down:hover,a.M_butt:hover{background-color:#eee;color:#000}#layer_menu{z-index:98;position:relative;float:right;background-color:#f6f6f6;border:#ccc solid 1px;border-top:0;margin-right:-20px}.content_fullscreen #layer_menu{margin-right:0}#layer_menu.float-start{margin-left:-20px}.content_fullscreen #layer_menu.float-start{margin-left:0}#layer_upd_relation{position:absolute;left:637px;top:224px;z-index:100}#layer_new_relation,#designer_optionse{position:absolute;left:636px;top:85px;z-index:100;width:153px}#layer_menu_sizer{background-image:url("../img/designer/resize.png");cursor:ew-resize}#layer_menu_sizer .icon{margin:0}.panel{position:fixed;top:90px;right:0;width:350px;max-height:500px;display:none;overflow:auto;padding-top:34px;z-index:102}a.trigger{position:fixed;text-decoration:none;top:90px;right:0;color:#fff;padding:10px 40px 10px 15px;background:#333 url("../img/designer/plus.png") 85% 55% no-repeat;border:1px solid #444;display:block;z-index:102}a.trigger:hover{color:#080808;background:#fff696 url("../img/designer/plus.png") 85% 55% no-repeat;border:1px solid #999}a.active.trigger{background:#222 url("../img/designer/minus.png") 85% 55% no-repeat;z-index:999}a.active.trigger:hover{background:#fff696 url("../img/designer/minus.png") 85% 55% no-repeat}.toggle_container .block{background-color:#eee;border-top:1px solid #999}.toggle_container .block img.ic_s_info{filter:invert(70%)}.history_table{opacity:1;cursor:pointer}.history_table2{opacity:.7}#ab{min-width:300px}#ab .ui-accordion-content{padding:0}#foreignkeychk{text-align:left;cursor:pointer}.side-menu{float:left;position:fixed;width:auto;height:auto;background:#efefef;border:1px solid #ccc;border-top:0;overflow:hidden;z-index:50;padding:2px;margin-top:0;margin-left:-20px}.content_fullscreen .side-menu{margin-left:0}.side-menu.right{float:right;right:0}.content_fullscreen .side-menu.right{margin-right:0}.side-menu .hide{display:none}.side-menu a{display:block;float:none;overflow:hidden}.side-menu img,.side-menu span,.side-menu .text{float:left;padding-left:2px}#name-panel{border-bottom:1px solid #ccc;text-align:center;background:#efefef;font-size:1.2em;padding:10px;font-weight:bold;margin-top:-20px;margin-left:-20px;margin-right:-20px}.content_fullscreen #name-panel{margin-top:0;margin-left:0;margin-right:0}#container-form{width:100%;position:absolute;left:0}.CodeMirror{font-family:"Consolas","Lucida Grande",monospace !important;height:20rem;border:1px solid #ccc;direction:ltr}#pma_console .CodeMirror{border:none}.CodeMirror *{font-family:"Consolas","Lucida Grande",monospace}#inline_editor_outer .CodeMirror{height:6em;margin-bottom:10px}.insertRowTable .CodeMirror{min-height:9em;min-width:24em}#pma_console .CodeMirror-gutters{background-color:initial;border:none}span.cm-keyword,span.cm-statement-verb{color:#909}span.cm-variable{color:#000}span.cm-comment{color:olive}span.cm-mysql-string{color:green}span.cm-operator{color:#f0f}span.cm-mysql-word{color:#000}span.cm-builtin{color:red}span.cm-variable-2{color:#f90}span.cm-variable-3{color:blue}span.cm-separator{color:#f0f}span.cm-number{color:teal}.autocomplete-column-name{display:inline-block}.autocomplete-column-hint{display:inline-block;float:right;color:#666;margin-left:1em}.CodeMirror-hints{z-index:1999}.jqplot-target{position:relative;color:#222;font-family:"Open Sans","Segoe UI",sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-right:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom}.jqplot-yaxis-tick{right:0;top:15px;text-align:right}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px;background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}table.jqplot-cursor-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,.5);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:#333}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(230,230,230,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(245,245,245,.3)}.icon{margin:0;margin-left:.3em;padding:0 !important;width:16px;height:16px}.icon_fulltext{width:50px;height:19px}.ic_asc_order{background-image:url("../img/asc_order.png")}.ic_b_bookmark{background-image:url("../img/b_bookmark.png")}.ic_b_browse{background-image:url("../img/b_browse.png")}.ic_b_calendar{background-image:url("../img/b_calendar.png")}.ic_b_chart{background-image:url("../img/b_chart.png")}.ic_b_close{background-image:url("../img/b_close.png")}.ic_b_column_add{background-image:url("../img/b_column_add.png")}.ic_b_comment{background-image:url("../img/b_comment.png")}.ic_b_dbstatistics{background-image:url("../img/b_dbstatistics.png")}.ic_b_deltbl{background-image:url("../img/b_deltbl.png")}.ic_b_docs{background-image:url("../img/b_docs.png")}.ic_b_docsql{background-image:url("../img/b_docsql.png")}.ic_b_drop{background-image:url("../img/b_drop.png")}.ic_b_edit{background-image:url("../img/b_edit.png")}.ic_b_empty{background-image:url("../img/b_empty.png")}.ic_b_engine{background-image:url("../img/b_engine.png")}.ic_b_event_add{background-image:url("../img/b_event_add.png")}.ic_b_events{background-image:url("../img/b_events.png")}.ic_b_export{background-image:url("../img/b_export.png")}.ic_b_favorite{background-image:url("../img/b_favorite.png")}.ic_b_find_replace{background-image:url("../img/b_find_replace.png")}.ic_b_firstpage{background-image:url("../img/b_firstpage.png")}.ic_b_ftext{background-image:url("../img/b_ftext.png")}.ic_b_globe{background-image:url("../img/b_globe.gif")}.ic_b_group{background-image:url("../img/b_group.png")}.ic_b_help{background-image:url("../img/b_help.png")}.ic_b_home{background-image:url("../img/b_home.png")}.ic_b_import{background-image:url("../img/b_import.png")}.ic_b_index{background-image:url("../img/b_index.png")}.ic_b_index_add{background-image:url("../img/b_index_add.png")}.ic_b_inline_edit{background-image:url("../img/b_inline_edit.png")}.ic_b_insrow{background-image:url("../img/b_insrow.png")}.ic_b_lastpage{background-image:url("../img/b_lastpage.png")}.ic_b_minus{background-image:url("../img/b_minus.png")}.ic_b_more{background-image:url("../img/b_more.png")}.ic_b_move{background-image:url("../img/b_move.png")}.ic_b_newdb{background-image:url("../img/b_newdb.png")}.ic_db_drop{background-image:url("../img/b_deltbl.png")}.ic_b_newtbl{background-image:url("../img/b_newtbl.png")}.ic_b_nextpage{background-image:url("../img/b_nextpage.png")}.ic_b_no_favorite{background-image:url("../img/b_no_favorite.png")}.ic_b_pdfdoc{background-image:url("../img/b_pdfdoc.png")}.ic_b_plugin{background-image:url("../img/b_plugin.png")}.ic_b_plus{background-image:url("../img/b_plus.png")}.ic_b_prevpage{background-image:url("../img/b_prevpage.png")}.ic_b_primary{background-image:url("../img/b_primary.png")}.ic_b_print{background-image:url("../img/b_print.png")}.ic_b_props{background-image:url("../img/b_props.png")}.ic_b_relations{background-image:url("../img/b_relations.png")}.ic_b_report{background-image:url("../img/b_report.png")}.ic_b_rename{background-image:url("../img/b_rename.svg")}.ic_b_routine_add{background-image:url("../img/b_routine_add.png")}.ic_b_routines{background-image:url("../img/b_routines.png")}.ic_b_save{background-image:url("../img/b_save.png")}.ic_b_saveimage{background-image:url("../img/b_saveimage.png")}.ic_b_sbrowse{background-image:url("../img/b_sbrowse.png")}.ic_b_sdb{background-image:url("../img/b_sdb.png");width:10px;height:10px}.ic_b_search{background-image:url("../img/b_search.png")}.ic_b_select{background-image:url("../img/b_select.png")}.ic_b_snewtbl{background-image:url("../img/b_snewtbl.png")}.ic_b_spatial{background-image:url("../img/b_spatial.png")}.ic_b_sql{background-image:url("../img/b_sql.png")}.ic_b_sqldoc{background-image:url("../img/b_sqldoc.png")}.ic_b_sqlhelp{background-image:url("../img/b_sqlhelp.png")}.ic_b_table_add{background-image:url("../img/b_table_add.png")}.ic_b_tblanalyse{background-image:url("../img/b_tblanalyse.png")}.ic_b_tblexport{background-image:url("../img/b_tblexport.png")}.ic_b_tblimport{background-image:url("../img/b_tblimport.png")}.ic_b_tblops{background-image:url("../img/b_tblops.png")}.ic_b_tbloptimize{background-image:url("../img/b_tbloptimize.png")}.ic_b_tipp{background-image:url("../img/b_tipp.png")}.ic_b_trigger_add{background-image:url("../img/b_trigger_add.png")}.ic_b_triggers{background-image:url("../img/b_triggers.png")}.ic_b_undo{background-image:url("../../pmahomme/img/b_undo.png")}.ic_b_unique{background-image:url("../img/b_unique.png")}.ic_b_usradd{background-image:url("../img/b_usradd.png")}.ic_b_usrcheck{background-image:url("../img/b_usrcheck.png")}.ic_b_usrdrop{background-image:url("../img/b_usrdrop.png")}.ic_b_usredit{background-image:url("../img/b_usredit.png")}.ic_b_usrlist{background-image:url("../img/b_usrlist.png")}.ic_b_versions{background-image:url("../img/b_versions.png")}.ic_b_view{background-image:url("../img/b_view.png")}.ic_b_view_add{background-image:url("../img/b_view_add.png")}.ic_b_views{background-image:url("../img/b_views.png")}.ic_bd_browse{background-image:url("../img/bd_browse.png")}.ic_bd_deltbl{background-image:url("../img/bd_deltbl.png")}.ic_bd_drop{background-image:url("../img/bd_drop.png")}.ic_bd_edit{background-image:url("../img/bd_edit.png")}.ic_bd_empty{background-image:url("../img/bd_empty.png")}.ic_bd_export{background-image:url("../img/bd_export.png")}.ic_bd_firstpage{background-image:url("../img/bd_firstpage.png")}.ic_bd_ftext{background-image:url("../img/bd_ftext.png")}.ic_bd_index{background-image:url("../img/bd_index.png")}.ic_bd_insrow{background-image:url("../img/bd_insrow.png")}.ic_bd_lastpage{background-image:url("../img/bd_lastpage.png")}.ic_bd_nextpage{background-image:url("../img/bd_nextpage.png")}.ic_bd_prevpage{background-image:url("../img/bd_prevpage.png")}.ic_bd_primary{background-image:url("../img/bd_primary.png")}.ic_bd_routine_add{background-image:url("../img/bd_routine_add.png")}.ic_bd_sbrowse{background-image:url("../img/bd_sbrowse.png")}.ic_bd_select{background-image:url("../img/bd_select.png")}.ic_bd_spatial{background-image:url("../img/bd_spatial.png")}.ic_bd_unique{background-image:url("../img/bd_unique.png")}.ic_centralColumns{background-image:url("../img/centralColumns.png")}.ic_centralColumns_add{background-image:url("../img/centralColumns_add.png")}.ic_centralColumns_delete{background-image:url("../img/centralColumns_delete.png")}.ic_col_drop{background-image:url("../img/col_drop.png")}.ic_console{background-image:url("../img/console.png")}.ic_database{background-image:url("../img/database.png")}.ic_eye{background-image:url("../img/eye.png")}.ic_eye_grey{background-image:url("../img/eye_grey.png")}.ic_hide{background-image:url("../img/hide.png")}.ic_item{background-image:url("../img/item.png");width:9px;height:9px}.ic_lightbulb{background-image:url("../img/lightbulb.png")}.ic_lightbulb_off{background-image:url("../img/lightbulb_off.png")}.ic_more{background-image:url("../img/more.png");width:13px}.ic_new_data{background-image:url("../img/new_data.png")}.ic_new_data_hovered{background-image:url("../img/new_data_hovered.png")}.ic_new_data_selected{background-image:url("../img/new_data_selected.png")}.ic_new_data_selected_hovered{background-image:url("../img/new_data_selected_hovered.png")}.ic_new_struct{background-image:url("../img/new_struct.png")}.ic_new_struct_hovered{background-image:url("../img/new_struct_hovered.png")}.ic_new_struct_selected{background-image:url("../img/new_struct_selected.png")}.ic_new_struct_selected_hovered{background-image:url("../img/new_struct_selected_hovered.png")}.ic_normalize{background-image:url("../img/normalize.png")}.ic_pause{background-image:url("../img/pause.png")}.ic_php_sym{background-image:url("../img/php_sym.png")}.ic_play{background-image:url("../img/play.png")}.ic_s_asc{background-image:url("../img/s_asc.png")}.ic_s_asci{background-image:url("../img/s_asci.png")}.ic_s_attention{background-image:url("../img/s_attention.png")}.ic_s_cancel{background-image:url("../img/s_cancel.png")}.ic_s_cancel2{background-image:url("../img/s_cancel2.png")}.ic_s_cog{background-image:url("../img/s_cog.png")}.ic_s_db{background-image:url("../img/s_db.png")}.ic_s_desc{background-image:url("../img/s_desc.png")}.ic_s_error{background-image:url("../img/s_error.png")}.ic_s_host{background-image:url("../img/s_host.png")}.ic_s_info{background-image:url("../img/s_info.png")}.ic_s_lang{background-image:url("../img/s_lang.png")}.ic_s_link{background-image:url("../img/s_link.png")}.ic_s_lock{background-image:url("../img/s_lock.png")}.ic_s_unlock{background-image:url("../img/lock_open.png")}.ic_s_loggoff{background-image:url("../img/s_loggoff.png")}.ic_s_notice{background-image:url("../img/s_notice.png")}.ic_s_okay{background-image:url("../img/s_okay.png")}.ic_s_passwd{background-image:url("../img/s_passwd.png")}.ic_s_process{background-image:url("../img/s_process.png")}.ic_s_really{background-image:url("../img/s_really.png");width:11px;height:11px}.ic_s_reload{background-image:url("../img/s_reload.png")}.ic_s_replication{background-image:url("../img/s_replication.png")}.ic_s_rights{background-image:url("../img/s_rights.png")}.ic_s_sortable{background-image:url("../img/s_sortable.png")}.ic_s_status{background-image:url("../img/s_status.png")}.ic_s_success{background-image:url("../img/s_success.png")}.ic_s_sync{background-image:url("../img/s_sync.png")}.ic_s_tbl{background-image:url("../img/s_tbl.png")}.ic_s_theme{background-image:url("../img/s_theme.png")}.ic_s_top{background-image:url("../img/s_top.png")}.ic_s_unlink{background-image:url("../img/s_unlink.png")}.ic_s_vars{background-image:url("../img/s_vars.png")}.ic_s_views{background-image:url("../img/s_views.png")}.ic_show{background-image:url("../img/show.png")}.ic_window-new{background-image:url("../img/window-new.png")}.ic_ajax_clock_small{background-image:url("../img/ajax_clock_small.gif")}.ic_s_partialtext{background-image:url("../img/s_partialtext.png")}.ic_s_fulltext{background-image:url("../img/s_fulltext.png")}*:focus{outline:none}body{text-align:left}h1,.h1{font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;color:#377796;margin:0;letter-spacing:-1px;line-height:1}h2,.h2{color:#377796;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;margin-top:10px;margin-bottom:0;line-height:1;letter-spacing:-1px}h3,.h3{font-family:"Open Sans Extrabold","Segoe Black",sans-serif;text-transform:uppercase}input,select{font-size:1em}textarea{font-family:"Consolas","Lucida Grande",monospace;font-size:1.2em}.table td{touch-action:manipulation;vertical-align:middle}.table .table-light th{font-family:"Open Sans Bold",sans-serif;font-weight:normal;border-bottom:1px solid #ddd}.table .table-light th a{color:#666}@media only screen and (min-width: 768px){.table th.position-sticky{top:87px}}select#fieldsSelect,textarea#sqlquery{margin:0;height:20rem}select.form-control{padding:4px}.nav-pills .nav-link{margin:0;padding:5px 15px;font-weight:normal;background-color:#f6f6f6;color:#333;text-transform:uppercase;font-family:"Open Sans Extrabold","Segoe Black",sans-serif;border-radius:0}.nav-pills .nav-link:hover{background-color:#f7f7f7;text-decoration:underline}.nav-pills .nav-link img{margin-right:.5em;vertical-align:-3px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background:#ccc;color:#333}.nav-tabs{font-weight:bold}.nav-tabs .nav-link{font-family:"Open Sans Bold",sans-serif;background-color:#f2f2f2;color:#555;border-color:#fff #fff #ddd;margin-right:.4em;padding:7px 10px}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{background-color:#e5e5e5}.nav-tabs .nav-link.active:hover,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-item.show .nav-link:hover,.nav-tabs .nav-item.show .nav-link:focus{background-color:#fff}.navbar{background-color:#f7f7f7;padding-left:20px;padding-right:20px}.navbar-nav .icon{margin-right:.5em;vertical-align:-3px}.navbar-nav .nav-item{padding:8px 10px}.navbar-nav .nav-item.active{background:#fff}.navbar-nav .nav-link{text-transform:uppercase;font-family:"Open Sans Extrabold","Segoe Black",sans-serif;font-weight:normal}.card{margin-top:1rem}.card-header{font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;font-size:1rem;border-bottom:0}.card-footer{border-top:0}#maincontainer .card{background:none;border:none;margin:0}#maincontainer .card-header{background:none;color:#377796;font-size:2.8em;font-family:"Open Sans Light","Segoe UI Light","Segoe UI",sans-serif;padding:0}#maincontainer .card-body ul{padding-left:0}.breadcrumb-navbar{padding:.89rem 2rem;margin-bottom:0;background-color:#377796}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-left:.5rem}.breadcrumb-navbar .breadcrumb-item .icon{margin:0}.breadcrumb-navbar{color:#fff}.breadcrumb-navbar a{color:inherit}.breadcrumb-navbar a:hover{text-decoration:none}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-item::before,.breadcrumb-navbar .breadcrumb-item::before{width:10px;color:#eee;content:"›"}.breadcrumb-navbar .breadcrumb-item .icon{display:none}.breadcrumb-navbar .breadcrumb-comment{font-style:italic}.alert{text-align:left}.alert a{text-decoration:underline}.alert h1,.alert .h1{margin-bottom:.2em}.alert-primary{color:#fff;background-color:#3a7ead;background-image:none}.alert-primary a{color:#fff}.alert-primary h1,.alert-primary .h1{color:#eee}.alert-success{color:#fff;background-color:#01a31c;background-image:none}.alert-success a{color:#fff}.alert-success h1,.alert-success .h1{color:#eee}.alert-danger{color:#fff;background-color:#d44a26;background-image:none}.alert-danger a{color:#fff}.alert-danger h1,.alert-danger .h1{color:#eee}#maincontainer .list-group{margin:1rem 0 0;padding-bottom:10px}#maincontainer .list-group-item{border:none;display:list-item;padding:0}#li_select_server.list-group-item,#li_change_password.list-group-item,#li_select_mysql_collation.list-group-item,#li_user_preferences.list-group-item,#li_select_lang.list-group-item,#li_select_theme.list-group-item{display:block;padding-top:10px;padding-bottom:10px;padding-right:10px;padding-left:20px}#li_select_server.list-group-item:hover,#li_change_password.list-group-item:hover,#li_select_mysql_collation.list-group-item:hover,#li_user_preferences.list-group-item:hover,#li_select_lang.list-group-item:hover,#li_select_theme.list-group-item:hover{background:#f6f6f6}#li_select_theme::after{content:"Scheme: win";margin-left:10px}.modal-header{color:#eee;background-color:#377796}@media print{.hide{display:none}body,table,th,td{color:#000;background-color:#fff;font-size:12px}a:link{color:#000;text-decoration:none}img{border:0}table,th,td{border:.1em solid #000;background-color:#fff}table{border-collapse:collapse;border-spacing:.2em}thead{border-collapse:collapse;border-spacing:.2em;border:.1em solid #000;font-weight:900}th,td{padding:.2em}thead th{font-weight:bold;background-color:#e5e5e5;border:.1em solid #000}th.column_heading,th.column_action{border:.1em solid #000}table tr.odd,table tr.even{border-left:.1em solid #000}table tr.odd th,table tr.even th{border-bottom:.1em solid #000}table.data th{border-bottom:.1em solid #000}#page_content{position:absolute;left:0;top:0;width:95%;float:none}.sqlOuter{color:#000}.cDrop,.cEdit,.cList,.cCpy,.cPointer{display:none}table tbody:first-of-type tr:nth-child(odd){background:#fff}table tbody:first-of-type tr:nth-child(odd) th{background:#fff}table tbody:first-of-type tr:nth-child(even){background:#dfdfdf}table tbody:first-of-type tr:nth-child(even) th{background:#dfdfdf}.column_attribute{font-size:100%}} - -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZW1lLmNzcyIsIi4uL3Njc3MvX2ZvbnQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcm9vdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yZWJvb3Quc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy92ZW5kb3IvX3Jmcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uL3Njc3MvX3ZhcmlhYmxlcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYm9yZGVyLXJhZGl1cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190eXBlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19saXN0cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jb250YWluZXJzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19jb250YWluZXIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdGFibGVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190YWJsZS12YXJpYW50cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19sYWJlbHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS10ZXh0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY29udHJvbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLXNlbGVjdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLWNoZWNrLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tcmFuZ2Uuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZmxvYXRpbmctbGFiZWxzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2lucHV0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19mb3Jtcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3RyYW5zaXRpb25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Ryb3Bkb3duLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2J1dHRvbi1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXYuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2NhcmQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYWNjb3JkaW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JyZWFkY3J1bWIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19iYWRnZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hbGVydC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYWxlcnQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jbG9zZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19tb2RhbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYmFja2Ryb3Auc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fc3Bpbm5lcnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2NsZWFyZml4LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fY29sb3JlZC1saW5rcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3JhdGlvLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fcG9zaXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19zdGFja3Muc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL192aXN1YWxseS1oaWRkZW4uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3N0cmV0Y2hlZC1saW5rLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdGV4dC10cnVuY2F0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190ZXh0LXRydW5jYXRlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdnIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3V0aWxpdGllcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fYXBpLnNjc3MiLCIuLi9zY3NzL19jb21tb24uc2NzcyIsIi4uL3Njc3MvX2VudW0tZWRpdG9yLnNjc3MiLCIuLi9zY3NzL19naXMuc2NzcyIsIi4uL3Njc3MvX25hdmlnYXRpb24uc2NzcyIsIi4uL3Njc3MvX2Rlc2lnbmVyLnNjc3MiLCIuLi9zY3NzL19jb2RlbWlycm9yLnNjc3MiLCIuLi9zY3NzL19qcXBsb3Quc2NzcyIsIi4uL3Njc3MvX2ljb25zLnNjc3MiLCIuLi9zY3NzL19yZWJvb3Quc2NzcyIsIi4uL3Njc3MvX3RhYmxlcy5zY3NzIiwiLi4vc2Nzcy9fZm9ybXMuc2NzcyIsIi4uL3Njc3MvX25hdi5zY3NzIiwiLi4vc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi9zY3NzL19jYXJkLnNjc3MiLCIuLi8uLi9ib290c3RyYXAvc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYWxlcnQuc2NzcyIsIi4uL3Njc3MvX2xpc3QtZ3JvdXAuc2NzcyIsIi4uL3Njc3MvX21vZGFsLnNjc3MiLCIuLi9zY3NzL19wcmludC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFdDQUEsdUJBQ0UsQ0FBQSxtREFDQSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSxXQUdGLDZCQUNFLENBQUEsK0RBQ0EsQ0FBQSxrQkFDQSxDQUFBLGlCQUNBLENBQUEsV0FHRiw0QkFDRSxDQUFBLDZEQUNBLENBQUEsa0JBQ0EsQ0FBQSxpQkFDQSxDQUFBLFdBR0YsaUNBQ0UsQ0FBQSx1RUFDQSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSxNQ3pCRixrQkFRSSxDQUFBLG9CQUFBLENBQUEsb0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGlCQUFBLENBQUEsb0JBQUEsQ0FBQSxvQkFBQSxDQUFBLG1CQUFBLENBQUEsa0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGdCQUFBLENBQUEsa0JBQUEsQ0FBQSx1QkFBQSxDQUFBLHNCQUlBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHFCQUlBLENBQUEsb0JBQUEsQ0FBQSxxQkFBQSxDQUFBLGtCQUFBLENBQUEscUJBQUEsQ0FBQSxvQkFBQSxDQUFBLG1CQUFBLENBQUEsa0JBQUEsQ0FBQSw4QkFJQSxDQUFBLGlDQUFBLENBQUEsNkJBQUEsQ0FB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LENBQUEsVUFQSiwwQkFPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsYUFQSiw2QkFPSSxDQUFBLFVBUEosd0JBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsVUFQSiw0QkFPSSxDQUFBLFVBUEosMkJBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsVUFQSiwyQkFPSSxDQUFBLGFBUEosMkJBT0ksQ0FBQSxTQVBKLG9CQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxTQVBKLHVCQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxVQVBKLDBCQU9JLENBQUEseUJBQUEsQ0FBQSxVQVBKLCtCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDhCQU9JLENBQUEsNkJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsNEJBQUEsQ0FBQSxVQVBKLCtCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsNEJBQUEsQ0FBQSxVQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLHdCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosNEJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosMkJBT0ksQ0FBQSxVQVBKLDBCQU9JLENBQUEsVUFQSiwrQkFPSSxDQUFBLFVBUEosOEJBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsVUFQSiwrQkFPSSxDQUFBLFVBUEosNkJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSixnQ0FPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDhCQU9J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 */ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/ajax_clock_small.gif b/Sources/php_script/script/phpMyAdmin/themes/metro/img/ajax_clock_small.gif deleted file mode 100644 index bde4932c854f3f67047e9c595d55bb6060412d8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1810 zcma*mdrVVT90&00z32Ac-bZ_=l@&x&O3}8ow!BIeb+_dyFa}J4@fbyhqYh?aLl`2` z2SO`PWjY*A-PneL8{i{*QL&Qfwzx@Vw(OPQ!WLh1ut%nei)%@??2j(l`SW*9PCohm ze!sL$sfM-X5P`^V2=egZLj*zQ=jYvS_w4L!YHDgzQ@3lM=H=hb{4y)c#-m3P*_{=+bu zY$7iidq>j4T(g(GqoUIn%Ez!blkHykBPV_8oY;7?@Lq4u5V!EIY>UHwIyZv<>2;H> zB=P7K`eO7+5hKBOe6}t|9=a3b03~l$#{wZuvA|vyfs#CgeHygJ177SQ8U1`bO;?5^ zfAjuj+3B}fxXQKN$wu-cBkY`TPcKXfg0v$cW^0vP(v?&m$w~3fOE<0QCrI)L9BZ6R zMQz^tCtPCaSkf5LhO+>8*PQ>(x%Wx&w(cO1g_g-MoU&4}CP#q{KtOktHfQnJ68-*N z%}s|5M-qw?0#X|Nl&=^c1tgOxGO}mF?Q~4V)Tu`vIaZr9EpA6!5wT?Z8LxTX0C~i1 zk(Yy{VQX-@NG(;(e6N#e-el)%QVS$^=hjYU- z9+c(E`3VR7VQHmpQKf4;8X%k5v47aRX^UQ z-K#P_+qdU{o6hX-be9@i^!j7^fVosJwn*a7MMhp)Sm~p*FQ=JF4}xjFFzC{O$Ufe> zAv^InbM@n(&CZlNSK(yv+sp3OE`y;rhJG5ae3iMiWk+UASwYb+-*x7@&O~p2rT|oO zFVv@NwGHM++g#gPBKEru>iZ8w1O&AB0q?1O0K1HIEQC(0sJ)4dHScsJ>Ku#E@rDkY zk4vXQS6{3cPz(iQ{TUn=w(|TV7tV^rq1xyR7Ay{Sc+Hdfr$Su-Gkx#L2ST=fw^LR@ z5O{gEMavMS1fx`TX$TU@s;u6_C+Hf>ZUhi)O=WRZK+=nT(kAF5d1d5dzv`z|-eFln z%9Vpo8<(a~WUabpt=-NQwY}xK|9+5^asC|1odOVV7%fstq0?H8DX5-y+qF~OBw71= zy=rMNLFBEf;6XlNCWK0*f*~;C`8{PBy`W=bS&4vHEl8_LAUoxOHH!Z{9M3gN3;F&n4GP zv_;AVS6;bol`s^)guv4ftdY-WcOzUBXa)>}3W*I-6cK$u!%r!XN2`^AEsM!02j_-g zU2Po9JhA_s*{{3Qubul-01miPN)*+O!4spiOp6U?kQJ|*b~-4`9!^f)oZ^Z786wO|A$6jIjWJXtdz?L@$?-V|0LLRW$E0Ef-fR2PmZmS0-EGSQX4UXC2^XeVpM<-qHdHYw5Vvl7RT4Y zfhakK?F_7`_fO5Drn>l~{5my}0c(q2_trA81LoY~dxH3-wtMSB1n!sS!KT7+-Bg`1 z*&tz(c8>IZB*wo@&)H@P^2}L~+68 zyYpyHVQM|YlsXNi-_C$Yo#LIaj9vpnwkOTcse;_?drfE51EJk*w^m8k zQ*E}+Gv9=Ws>Ydu77hHc&pe~%Gwla|ACjo=Y{XE=OQcvsUiNx5jkUq`(VK;^l!sC; SSAf1ltJ&ITn}ELj!~W diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_ltr.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_ltr.png deleted file mode 100644 index 31ea614ddb73159a16ac67010cf93d4e27c60a3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2~3gRVzb)6kADY6r;B4q z#jWH7iI)o6+TCKujD)u2-`bM-WrNV!`YT(fPCW5p$)dGAM~=&1b)Hdovc2=4Wa5=m rf!gkCRklYgPYQJCPs$eQ5n*7sA}Kg&#_`VoAhSJP{an^LB{Ts5n(#4l diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_rtl.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/arrow_rtl.png deleted file mode 100644 index 5005524788b73c0d917b63a534ef106976e24f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2~3gRVzb)6kADYQr;B4q z#jWH73D%URHEVQiHuY@ToPTRe=9djZXX_(!Q%q$kI^IAH-J!_po6m(OU~egm28>FVdQ&MBb@0QEU8=>Px# diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_chart.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_chart.png deleted file mode 100644 index 00ebb5027183b78eb30529961b6c8ff6ad6126fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6N~y_6PDEP~dR3RQ;`Z z=fBuoCgwS5-pzqETf7$JU({D{zICcJ@x-~C*UHv1da$P)l*nlanw5Pk%dO?`JniQl zS#q)^PtHBN8dmMB`s=XOg!?t;KXIKf+R8Y?p=0s9y%q^y)Vf)@9w YQ_w!M;+uCGfDT~rboFyt=akR{0I_C7b^rhX diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_close.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_close.png deleted file mode 100644 index 8e4ebe30315b2b681bdb7fa06ddd6806c863041d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6l097~qofyb>K!L;AGPU~u z7kD;NspBuxla1VuH!!@M zl*qfnaXp`fWk4wJfs8ZJkL$YU*&d#C_}8R&%i`@`GdUl)cy9h>Q$C<|44$rjF6*2U FngA4{JYE0* diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_column_add.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_column_add.png deleted file mode 100644 index 771e7414f024c919d59845e4501a71c9fedc1e1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1171 zcmV;E1Z?|>P)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+^+`lQRCwBik+DicK@dgHJ`)HL?JWdF z2&4<97i_in0}NQiAFvW6O`6zg;fL7Ri-i$CKtDl|1oC!vUR;Ye*(4%yo4w55J@>-6 z$m)~*^G>C_dNH5`uH8&41GhlP*`bA)-c33g1SQ~22b6p{!Xs4emmpLL%LI?0DMAu$ z!LW{)!BZ!s4i*uZ;A|N1#NQFZCk1Nyl@A)6<|mhlP&O~D!vXtj@mPDgI^Hxwfue@p zqlKdhw29~0tb;OT3c!erL!iSp)GR_7@=dw8G4H%_#vN-j2%l{OD#Jj0Fq lYu!hE*Nq#DxxK&m82}J%Vwapgk$M0C002ovPDHLkV1j;?`XT@T diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_edit.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_edit.png deleted file mode 100644 index 12bc574db2237a556bb1caede46cf143688d6ea7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1073 zcmV-11kU@3P)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+lSxEDRCwBakueejAq)do43EtJKe8!o z!(EDapa3Ju5|RJ4;Y0AXt0I^MfuARJ1Aq%?%oUSZZ^EjE7lXAFawKSNftXSe7>29e z{HBrnMNJ&6Db97q>UN>c2=8eE8bG1ZDTekhff$kt@<tB4t9=-zr>f=m`dmp;F00000NkvXXu0mjfUW3Rn diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_empty.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_empty.png deleted file mode 100644 index c7735fb97d7dfd9ba8302607d4d47557a4fc6453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf63OrpLLn?071~LjAP~dnq^~3+^ z2H9!5qK>CVsm$ulWxpi1Ff!1fB%0%++tuoe{Vwd6iYnM-R|_~hc`Ri$Qp`}!{oa

            {i`{QdX)-icm&?Jh%P>BKWEl_sSnqWX4Oq@n9;RH=z71_=Z?%9cbRMK*EPD{ SaM}U1o59o7&t;ucLK6UXd_PqH diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_event_add.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_event_add.png deleted file mode 100644 index 23c23cf00f4b59d81583639a42bce9a1b8f77d57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmV+r0q_2aP)jX48%e$oCPez0_A5XpIE2`EMNf(wNMLKI19Z^9~5S8G7KTvWH-ySPBlCqd>{rR6}5QTZPzL`s~(wHDEEf7j;#Y+j1YCyCaeiRdFqkX6;XA=#$E1_=kWoKv3nZ0Bc zrDa^t&Iu_084F)$>ntLG_~-^#{($!T9S8AI=DDY{=QO0R&ys@}x$ejJ2DIB24Um)X z=IRW^I_WB)@*{76+;1JcXu$8eEem=t)}4SB9(Wbs?z5S5Mlb1-HhIzsXyJjEU&9@1 zy=p;Ej{)UxaVyY33s2)MkeE*Tl*Ds-&6ZM7gGMla56?QKRpe2YETo_Yjnq6gPkOGU zRl7`Efd*Qkfo-bn=F*^t$oV0<9dYV8XrL7uI3tb1z@Rv^_>A>rsBVC)CN>yqbboij x|2^XRF%ct&8Z?N-H!xIYo0ZW}|NQeZ%>fdh!Dh~~4SoOs002ovPDHLkV1kV9oH_si diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_find_replace.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_find_replace.png deleted file mode 100644 index b49915fd1f26b217eed79d16ab563f6c778fe8a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 641 zcmV-{0)G98P)0S)H;bng>^L~3!=dH({2J-Fy|M!x(6~qo4IGl4npWp9yE-cnjH7!efES*jp zl8Hnu9w&RTXtWm!1!_K@&p@yJ6W-lTd8?HQ+U*v)-7Y$v4)z)iBolFXJZ|q_C8<=x zP^pv|uwJWy9+yicRI61qn@vQ*Va&?qC8cT(lT%Y~1_UHY)>^F=1DDGsl!`?Z3VGyn zIY#7ke#N`@M!bCW8k`$9acO+q(I=qmrBkNiVzGciK95{Bi%dEVlgR|T{WI2`-@p^x z!qscnaqj%ck3K;t80@v%Z4?UyCMpf5l1W%BW&{F$N@77U7=deJ6BkEEGebi|r}_ln zz1~{A{yY6_Cc{LwT4^YNFjYT2Hknpovk}2FV`C==&R~1nV~9p0Xi%q~&*zxPe!mZ~ zSQH=aHki$;P%0nybj!<^552~%txYct(Iu>`=s}V@3~V$SpjNBlbZy}2;U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+iAh93RCwBikx32%F$e^!(L6Fg%rh$o zgU6#ti4T@BO)nzy`&{q>AOHyND)6R`77){uf-VL&gZu3&B?U552)Qc))SkI9NE|yg z&AB(End{JZ*fuO}QquY!Oj|-4Jk}b$zAgwT>2Nk?vK8o)IGoYz2%Yc1E#c9)nGTbI h*c6Y=0QtA>&j1cQJ0~(aol*b*002ovPDHLkV1nwHzf%AJ diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_lastpage.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_lastpage.png deleted file mode 100644 index 9408ceabf43f2da4d2bf0999d507cd2acca3011e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6vOQfKLn>~yPP{F8K!L;AIQ35b zq>!~wD{nQ~A7WK>`thywOq(3PW2?$?bC0Fl6gRz^WAcP8gX6%3Oy;$0g|nE~ypGJC zZ7*gekX#ivQ_vuDlaiM9vo90YzI6W85OOhb&&v<1RiebN?O!qBxSr0rkJp?3-uVu+ Omci52&t;ucLK6TZRzaZv diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_more.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_more.png deleted file mode 100644 index d57577dbb93e3ad35a790f1c208b9b7536609861..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6B0XIkLn>~yPB_TRpuoXA_tTwv zp(_~yo)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ-6iGxuRCwBi(LYa=-cn0>yy0A0BYH1e+VJPm63cC0P^aU7=3xw_@g|y{qdkn2ZYl7cf zF1g%&|6B?WBYPhcQxg-jAGhXFV7w+=?D+aY8hO-xPI6=irE@6r;*>qT>`z?&Ga zTuHr!$}Rf_p1N~MKRQ~c!$2uhRaG@oXr~Jox=BMl{mdUhiLbu+W}v`v8l&5@=~@$f zjye8BV=0onmS2UCCFc^>|FJkXQ+jN}wr!NnZ9-m2dpeL!eFx9X(2OziTI{8Y7NoOy z34S|Lc%pDgUq`Du3}ny!TCmP$?X{h_^IV5bP0l+XkK%B5Qo diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_plus.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_plus.png deleted file mode 100644 index e4247c3a48ec9bb180c924da1f30c10d7405ef1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6JUv|;Ln>}1bEE@dGRJWy#YH^- z3l9|-a6bOy-foauz`BBAc~ik9kp`KrB@8F)b~F_@skI0fIa?^kw+M5w?@{!$XMJ(8 an~$-qP;7DD3iDQ=p$wj`elF{r5}E)4=_iZ; diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_routine_add.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_routine_add.png deleted file mode 100644 index b63a6955691717481f56f51fd0a364f43161747c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285 zcmV+&0pk9NP)Zw0kjnfs3B$8)<_+ia#gcLF1W-u?gdJp%j%(L%aQUGSjTcVwGcAgetX{ zmBVEM*E53#2Ai1zaWX>41uuY0fLwuM016d1c*6O`d*@s3D@-oK-%`B8(j#B_j(dwQ zg8`VMRfSp=EPhOu{~qFGMLGb2Pz_`#1yV4BD<0_aJNF7qMGf12oK}SptVK;*&Oh0( z+P>h1eFPd#_rajS1SbL@a7YTyFUMelGy3ny^Uvc7JqR3jJa4I>K(N`T2!jxQhG(zI-aS=n=9400000NkvXXu0mjfeJpj^ diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_saveimage.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_saveimage.png deleted file mode 100644 index d3f17c8a83ee31ce1b87784345badee5fbceec9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmV-b0;>IqP)h(G~olf$4z2x`%X}w+(YOVx{ zL}CN>YPCv2D_lGr4yn`WP_x;jcDv2*9S#QtgF#v@m$wOU5>7{PtJR`ftwut7Tnu$4 zlZhgc$ZZ1j-)J-_l}b^s*JCx0kB>|!n8tI1!9dYyls)*103JYYE|+5^AVA-NK!98> z7Z+MA7P4Bc39=1+wJyi;qiE+!{I>reEx#~(I6s31$j!PlJt5#6P!*b#`%0^ zyuH2g8Y=Ja?>`7;v)L8X>6BZ5v9VZ;ggx9^C=_BKPWYqMYHt$&Mx&AA6Fg!(JUmc1 z9KIIAOjaPo^aI%<3B-vffHrU!K#u4>1K)iY{)s};u! zg8|I(4l1NlDT%%sYPFgslL;F(pU>&#<%JfD1~yPUPl0pupi=ed_sN z|3_z9PEOc)#Xrd_Iv_T^=jt!>ISV+i#2w(A!S(&v>r}4CC$ly?ZK;Tf~SPUPlmFyL^uOx^k4 z^TOFHWgW_rDhD2mOX_7~SPP{F8K!L;AIQ2%o z(5kN!7p$$(DB^s^p(J40B)PKqbky4Ef=d%-GCr`VRN>z6E5Ctbx7kuFr((`}!5ud* z?Otp(L!x*s^MrzZzgb+eT>=Hx{`}8%xLx~8%kJZ$%ed?I9`p$p|6c##)x(7!7>s)U V2D6_Qy#utJ!PC{xWt~$(698l3LR0_% diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_tbloptimize.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_tbloptimize.png deleted file mode 100644 index 2dbd1b1bd58e532fcbe867b981019ce9ebb5d7d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6$~;{hLn>~yP7LI0FyL^uO#S}& z@A|-0XN~BdOaq_Y?&i5SgmNOjZvDh=epLEQozw-M3%YX|;$-GVvax)cDeofb7~RF< zoA|-MW_R%sZwIMKFW71XE-jGU^J!8E%M=IR>XZ!iBBpb}1>84{S3FTu4E@iR_n<#- YXW;LB5vvTWfi7V1boFyt=akR{0EA3GEC2ui diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_unique.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_unique.png deleted file mode 100644 index c12942a624c55aeac182f17872707db822a82298..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1067 zcmV+`1l0S9P)U8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+jY&j7RCwBakxLT8APhsF7!KJZ_Lk~G zwgX*+$>d{X`6*8;B@f-AjbX7p~D zuvIeuRmvQbaQ1a)JK7h?yz9SoIO(>)`eb(gg>&70?#`8y$<>;)F;?jB)eeionKpv? tLZ9r{?bE)J)x)Wx&`zHgQu&X%Q~loCII5OWeWfR diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_versions.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/b_versions.png deleted file mode 100644 index 27c01a9fb869e06ea63542ddb549efa0a134eddb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 446 zcmV;v0YUzWP)=*6DOuv)N>gMuQoK!D_V{t5&P>F6IXQUZc@y zzgn%BpXBrTy#f%G{U(#iFa;o5zFx1sl1ioi2UwQ%zS(R(r_(7+CKDKs$1ofYVK5j# zuh#?e1C>ez$O|VIuO6V)YDvI+KL6Tox9}*7#R8VgB`+3>A0B{SBtTSt7AgkaZkLk_ z?g6MBJ(tU|cDoIy(+Q5pBiOdBE|XzvqIB!QF0WQ>)*!cO>&j6_Lh} zsw15Ztk>&EX9CFu27^IO0gymkuh&mQ!m&^&xE`QXDoKE->^IqL7CnHbX$HCAqGi{0 zeI=bvqvC?T_rpcE+f7D1lT5rP^J(Q@Kq8S)0p)Vp_ZGt8unHg-Z}itmLAtKXHj~LD o#^Z5}#bOwZMllkJ$i-sr5842Jd(H;rNdN!<07*qoM6N<$f-M5bumAu6 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_empty.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_empty.png deleted file mode 100644 index e5295b925e2bc6002d1573de22da6965b161cd48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 177 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6Dm+~rLn>~~o#@SXK!L->^63u6 zJO9O|^lM6N?S5uD?U8|VP*9LmTVBd_xxPz&z7HmpG%D*Y=nNIwD{v)cuKtur)7zcz zmNRH37~PJUq@=LwPoL}((_@|oieIl@U|qp->ww4t*9Yz_`QDG-HEd=M+Mux7`9JfD a?RV`;FP~)JnK=jK6b4UMKbLh*2~7Yrr9_GV diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_insrow.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_insrow.png deleted file mode 100644 index c3feac498485d19f7a2e36f1640bda1f77448ddd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6nmt_{Ln>~SPK@O{puo{=sk%qt zT|KwjCuJ+&$6}ASi&+aKC>+?hV(;`f5wnlYb9^TJoNvoY<~Hd~jB0!rkGy=Z@NlB= z)R|FfE>qgiDp;fQ<1ALR^*XS`*658FNp!-)-YVKr%{2go8%ZDXO zZ#3YP?A@}v>C6R=XUR&jA#!=b%1U2kbk-)>lpC~73P1GLT;81R<6S2Y{!c(V89ZJ6 KT-G@yGywqdcseNn diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_primary.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_primary.png deleted file mode 100644 index 1f22f7e55d028943d040af5036832fafbca1cca6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6qC8z3Ln?07_8$~vP~>1F!jUoJ=2iJi+R_qOrg&EYGYqW&Z*d9#GJgL#dSbxhd v{xie>yF2X~?86y6j!d|~pz)XO%U%X4<@H}rD@T_CZDH_q^>bP0l+XkKwRkdI diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_spatial.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/bd_spatial.png deleted file mode 100644 index c3a10ef2f6a4871c216c810030b40af7bfa8f737..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6@;qG}Ln>~S26FNpP~dnx_33~8 z#L3BFGcu2?))aARW$bDcUBhs>Php0R!gpSlg?1$ZcC2?M&*7>H-VpPuf8iyL=*Ciw zqe_VacUYGln$2R(8pWGq$yu-GHu23Os|S6{x^22Q9lGiGgV$tD@*Y`!+0XA5UWnB6 Q1KP~s>FVdQ&MBb@0A6G}pa1{> diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/centralColumns_add.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/centralColumns_add.png deleted file mode 100644 index 54178ca39064e57b81e909dd890507268e461e04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 635 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 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/2rightarrow_m.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/2rightarrow_m.png deleted file mode 100644 index b4ffefb6037c258ac2524038c90b5b94ce7735bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 991 zcmaJ=J#W)M7&a84s!E3ff`Wu}a=Sr%XQys!E2bo|(^$eKN+Ozp0mr^JR%@TJuf*-f z*U*6l@$~~hVnC=P5(7eF=>&|hu&^;8Bo+`7oYN#_AXqxzho0wopZC4@wyR5v<721B zIF1`PD|(I1$I>x+nEmf;pB`t^Noq7{ovhG~9bvBEk`@N0Z?EDSw%yIEyExBrBfQsW z(x!Dmb%-z6DMm>Akg+)~zmSBsvxX^X;Z-lt_^&Tt@xXI6ep$AV6_#+@t87KMzO~eF zw$>cQkSJawb?!{s|jc-#Lst|TM9ifvGNVEz? zMNuG0SzcIFJqEUYS_IU}A?* z6i}K{A81+shx+~i9n%`#_xn%bxUm^xSi>>dh#YotD^qExP%TB+rX*?*vfi&^wM{6A z+av^~x-5ub*$Z6KiMx2qQq3TycHm%B*LbENc%G{&VzDq+kPC)n=%Q#yN_k!{8s%J0 z5oIHXa(%8&oDClbw9j?-xy7N}v=#i2Mb>fTUBhlUB0lJ*ta`(}%n#M;aoyowl%ZV6 z%)srZ6qN0!t;vaBv zaCOPpMg02d)DA+e?bZWX&hYSl?>Q$I7ys+e*L*%F1wjyJvza&=jmWb>p6A8MWMV?h z)a&)cv%%?fDh`K3qTB5fEX$q`avZloY}abFcC}h<^J8c{9xo8vb~>Fcb_fD5K(Scd zX0zFCDwSHC3=ReZ4`O_y(cm#5wAnVK(`i1LO!A3D!gJQxm<%$R4E);F!DN8RP6u%` z1D3z4*XxGQ`wYWCJRbi7x?C=U&1PGf&1S<<5U&Mr0}k5lH^}GnfaOc~`>|LI!r|}% z^m@Hg#DJ!0cuBp0(P%uLyi_XPS1J`~Hrf4%PnhZ<6bea#!Qjs4^X=?*y9B=nO!h?6 z3|OsJ&}cMwM?s3BuCXsOV(V(P3ejlvJrD@I777K(<#OP3I$sfarzjfqdi`3hRzE70 z%Htr8c!^iyh9pT@Bob-v529QyL%-h#e0GN#{Lg;S>2yt%N+lx*;#Q$hTz&hHurImW t?PeSf$I@c4EU_;}tJTW?f0=)~J^=q-16_PzxjO&=002ovPDHLkV1lg{=Bxk! diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/ang_direct.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/ang_direct.png deleted file mode 100644 index 929244e4ca4297db00b363a21d41ecca81b215d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3617 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 FV1ffsoels1 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/downarrow2.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/downarrow2.png deleted file mode 100644 index 7d7199ea98abdfc8c35620473f58cc7d30446920..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmaJ=O=#0l9M7nXIX7f7wNnQn6;ZVLTH7sQb#_hXiguK)uzC^Gz@?!F4vK^#~ zY*Qzw;9=mwg9lGC6_hzarVjC>9{j+Ar(Hzx0~9<6^QBui57xlT`{4Kc{XgFColEx} zY^>i_PY^_7vRBIBx!D_awfKMWTx%nqT2LZ~`r#mQWD5{673Kk%)a4&4pMYB$vhkHXO`bx_PmJu9*BE=m;;GDU`Q z9EWz=XlM;FoFE7c%QHM5#E76hY9QGS8g`(fAOTykG!tpiAU#Dn4@Xdx!kI3Ypqs0* zhP~1z+%U$KO@^acucQhvmHIza*H_Ut%7C?e|0!%|M@_(FfDK111z+4?zzb!HaSO-@ zT3HB(D_u+%AcA%Qnq<5`OmpObW~k7y%lK4EOd2+l4Fx2nD1{YhO;bgI4|NC}Cnfkq zg5wf=cY7ovw8i4>ZQ*c7JSJ4Q5>!TXV4w$oqAN$(J>GKFws^B@d|+U=TiDjK)9>!%Co!9pVp;cn z{`b;SmoE?q_{6%68=acWT+58_?bW>lUt(L=O)oqxZNGUXF!AERQETyAOYfHJ4^B^A zFHKEO_WJI`Uo9?vKl@rIPfhN+H@0wo^IgAuyJ70}^nv*h-x}HA|MYS9?S@T6@>0?N zhTZuj-TY*xr+)o--ruu3(@@H-n~-7Y*W<#Cm%B1E*gOpj$Ne83PCZLs8*kdTW5$2} tE$i+%R9Cvv96Hhzx^UU=OV$uIwZ!wEj{M{E{59`kClh_rt?pxI{s4ejVC4V+ diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/exec.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/exec.png deleted file mode 100644 index 15571bbf4c45625758b2040181962107b81ae079..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1365 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 U34t-QfdBvi07*qoM6N<$f;mrS=lkw=$J*QW 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 PI_{Itq&lV9M9+y|6Ig7U diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/toggle_lines.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/toggle_lines.png deleted file mode 100644 index 708450f27a9f05b42ee1099b871207dcccc00b17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3595 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 RpKSmD002ovPDHLkV1heTD+vGq diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/viewInFullscreen.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/designer/viewInFullscreen.png deleted file mode 100644 index e14028159b374b84dab7f86d9dde9bd47b430b5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1180 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 IM6N<$f(xgb$N&HU diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/new_struct_hovered.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/new_struct_hovered.png deleted file mode 100644 index 1130f04f3945d2658f5fc7985353f962df46844b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 303 zcmV+~0nq-5P)7?sp@n!i8N*E_`bh5ior-;fV*D^!QY?s)54aajbb`!2vk)Bc%2V zfc*^F=6P)NklUO(NY$jNwdCKN`y?#ya zP75RGgSy&ox8KL(F$jF2{wkNt_a_CkTCLZ~WP~;c$prt)|c?T^xic{gRa1 zv>Bt(2&+iUa!YOP%4$){@u>BQ>hdbMS-fS$mMdHO|e+~%x1G!$F9yd z8jY&g>qWoc$9B8LY&Jt8k-&1fM4?dlmSy>7FHGqsQk4CEKZ3y^qR}YQ=``Z;I2MZq z2vn)Z^hwe|1E0^Q!8V%>E|&|UC}J=efUHodR6vHNe_^ZD3a8Tvp6A)t7-_3?gIn4> zrGUr1a3BysBofhJhrR^;qVUp=di*-ZMWMEN`}Q^ zf!%K3fsa-w6vAe+f!S<^$K%ll{|2zXD;A4s2jlb>ZGC3iMx#+bO!WiW&mX>Xh-Vo9 O0000|0<#FujSGd8UsB}T)L8Bn=nU#vxc?T;misqowo~RT-bP~8Ko>e=W_q^i)+2d zeeG`;T@`z|^kqSKyuyo5UAlX`xE2Y|ta-(_Z6EuYI=SxH#29ObikQtwxf>>b)_MrE Om%-E3&t;ucLK6TRTt8p{ diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_attention.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_attention.png deleted file mode 100644 index 6169cb6f79fb370aa0c9907d882b76c60a6e0238..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6Hh8)?hE&|jotQ1yV!+dq&B&e3 z$Q_~ZbF;AY)`r%sm8?1mjNE&_xCXydW1gI6x6QNQ&51&8BY*y2sT2GLr-TIB1k=b}~=doWSriKrr;$ikZ(|8@tNpmn~4)$av$Ic~$wnC&h>2#8~?~Gz5dEd`=Wg ht)CG3?}YI$*1Nq+eyQ?%xB%VG;OXk;vd$@?2>=`@SfKy_ diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_cancel.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_cancel.png deleted file mode 100644 index 67d987bdaff889a641984fabd2c5cea24d875115..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6@;zM~Ln>~y26FNpP~dnx_3MBA zmye!kWSJSTc{DP){l4}y=)gxU6Nzs;{1;g^J}vWQxYPRF&suTIQ;qJ7R}EnoxLzfA z{a>VKlfkabt;XB1pX-Lj8j%aj8B8~;O)|{>c3Q4v@`U|&lj6UXbvIX^V*c{%N~P2J R9A==^44$rjF6*2UngADCK_CDC diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_link.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_link.png deleted file mode 100644 index babbb64a6a7084350bbfc0cc674fbe737cc7ba37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 386 zcmV-|0e$|7P)Atb6vTx>hxQBf3pg}{(5)cBr9u=!vgle2kt9MG8c+NLgq{k zagesSWUH38U|R~W|Fa-=@92XEFL%GYKu9jPpZ^;{5RMJQxE%}z%i(ZH-EMcmp3m#` z`U$%qpuqzJ_D`7OxWjU}Y}vL=S(ed!KBq7Ysn_d0b~>FnP16r(aU2sEu*mGbU1_yi zFVpFCS*z9V81Sv@IysI*tblMsgEtzD7GROtEwK9i{+hL4$+CPTisIX3GNB|%D2gKT zeV?Gg0|OSBZ2`~o*NsMF<+|>TqA2&pV)3g~Dv_$Ho5c+c9vHC5Yzy-F{As09nOT;# z8jr`%K@gDVd1RUU8P*7-ZbZ>KLZ*U+lnSp_Ufq@}0xwybFAi#%#fq@|}KQEO56)-X|e7nZL z$iTqBa9P*U#mSX{G{Bl%P*lRez;J+pfx##xwK$o9f#C}S14DXwNkIt%17i#W1A|CX zc0maP17iUL1A|C*NRTrF17iyV0~1e4YDEbH0|SF|enDkXW_m`6f}y3QrGjHhep0GJ zaAk2xYHqQDXI^rCQ9*uDVo7QW0|Nup4h9AW240u^5(W3f%sd4n162kpgNVo|1qcff zJ_s=cNG>fZg9jx8g8+j9g8_pBLjXe}Lp{R+hNBE`7{wV~7)u#fFy3PlV+vxLz;uCG zm^qSpA@ds+OO_6nTdaDlt*rOhEZL^9ePa)2-_4=K(Z%tFGm-NGmm}8}ZcXk5JW@PU zd4+f<@d@)yL(o<5icqT158+-B6_LH7;i6x}CW#w~Uy-Pgl#@Irl`kzV zeL|*8R$ca%T%Wv){2zs_iiJvgN^h0dsuZZ2sQy$tsNSU!s;Q*;LF<6_B%M@UD?LHI zSNcZ`78uqV#TeU~$eS{ozBIdFzSClfs*^S+dw;4dus<{M;#|MXC)T}S9v!D zcV!QCPhBq)ZyO(X-(bH4|NMaZz==UigLj2o41F2S6d@OB6%`R(5i>J(Puzn9wnW{e zu;hl6HK{k#IWjCVGqdJqU(99Cv(K+6*i`tgSi2;vbXD1#3jNBGs$DgVwO(~o>mN4i zHPtkqZIx>)Y(Ls5-Br|mx>vQYvH$Kwn@O`L|D75??eGkZnfg$5<;Xeg_o%+-I&+-3%01W^SH2RkDT>t<8AY({UO#lFTB>(_`g8%^e z{{R4h=>PzAFaQARU;qF*m;eA5Z<1fdMgRZ+hDk(0RCwB?k*W^OJ>Om zuu50x3RxkH&=tJGJi9z0Gzx5TZ^h3ex6mw7KTGe0I;}X;;8url--O8Yh4Z2!j)y8IzkE4bb5%J e?&%R&B diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_success.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_success.png deleted file mode 100644 index 407dcf2cc2d1f6ea03be2b226e0c8698f1503bc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1031 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 diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_vars.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/s_vars.png deleted file mode 100644 index efeaffcf7b0d047d9200c33bb138730afebefd5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6T0C7GLn>~yPQ1%|K!KxW1&fFvbd<&p)kE%Vv8lN7HbEsdN;ZT5o(p*E}zi2jzV7 m42!vs%(`&>sp>7W@4FZtImBft-}eN$hr!d;&t;ucLK6TjnMi~H diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/sprites.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/sprites.png deleted file mode 100644 index a9a428ac7ac33587c14dc29a8f6bdcb5b9d54f7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22313 zcmX7vbx<2!8^wdWySuwP0UF%hrD$<0ZoyjI-QA@?ai_SqxVseB;_&62FaPY$>}2lV zP3}JDIp=pH)l_8Bkcp82005f297qFl!~_74B@p2uXRT-z%K(7Rl{`pN%X{^_8z~2G zsQm$$^>Uac@I;#~Fs6Ok?QH&-O*jwY*kgYWb){xzA9V|jh+u_bWTX^iY>ezRKH zrmD8C7~~)=9bWB%S2v*DMtr?c_z7VKpBR2y7WkaV#Wj-~T^LHMP!n3BVAQ5z6!do&tgu>LM+lCXxDvqvgQx2T)r40|qYi`l`jfF;iSf7&khx zl}w`~60~MH$HV+bT^@{NBA%1a3otVa2|#i=UNHea-TU^eGR8ZG^p=A3jp1ZD0FE?0 zGEFCME_64%RDm#@Z|$H)K~dI;@kf3T`7+}Vc`H_oJ5uE&yAnzUNp3!T9GV4lz5%Fj z<2ahpKZja98C^xks^B!KlR+}j%WnL^hYx#MO_b7n_}v&04k+^M7Ugz!m%b=5XQ|4x z^w1UQ)M4Tlu3{Rv7&puag?7C6K`r$^pJUf$ZTS5#Bve2eNBc_sn+UTEx~}GAQo5N3 zsM|@^JaCnO8|or;Rj59(F%^Sil% zt|ysxMkFrg1)BjP!GqFK$;oQ1X>;EXI{l5kHas?)mrPDmQ&W9l;8CxXW)RRxzu4?9 z=$f8S<%z8s{xA#n`dgardvd$x)HxLtxMG#Q0ws|z9?;=6LgwYY(cy7>cjUF{W3zZW zD_xgNuY6P4b~S*)gEgite!1S>LrwZKA%)gECsx@eCgaM0Nj$%5mx4CXsmgk*R z&g>v9EZ3U?^Akf%Rl@+IcyXGScf7rs;?1%lE5a{L&wwA;OCc}`-_dW&ciJGE{ixJ z`rDfj6!t53-TD!7ze$nXNuDOC(fehK`1`2n=2`A}-4gwqoE;c$Z zF+ENN2%oCIDYCa)wjML25#mI1pVR+2NH^`Vo-L46jF3xs&^2-$y5&~+cz;{6gt|Ll z^CIH_?RT12h=S&amkQfNx5H85L6>(3QR#RTVDW%w|DEwKyVf48@=%~p1?lO=F7_Cwl4{{QvO$c$KT$SJiroOlYrj;C< z|NiN96iFB#H5{m0jIan$FZlP1c3&~tthG_~_H%+lXp?VxSwB=_tuZTkKv zbXdt9JQ{E(MW6VFn4%076{J2>FZ|%*!RsrjSR}BehT2WJma)6HqE5C3CPCj9MnY@C zH;AffZ3|B_wUq_nDz9m2fqQHRd!fx-OFb36v1Mec z$dwjs(-q-}!7V^0QEo>;OhUWJ#`E4_oM>USW~P7;@yebdV|#+vu4G1SjKHa$EFJv( z2R8>wi_DJ{Sc4kF68D>XdRSCmn-

            GP+bE$d>r4h$g0PxQbE?wygzUnSPf;$(!U% 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≪(QZE;gA^LqL56k2oe5uhYT5#N41FS+KO?`oL7LHi{PqP$qB%?7MBFTxS(eO za9Hiy1Cj`LbopmOuRP!`+<{J^%dk&6X@#^5YRBM(i&V ze})2vFm2kj&v-Uv%9I~ZoH((WF>!Tu^(+CfOXR#>iFUAlDh0}ni~o0G=TEs4atr%s)^8LbZ59yD6r zyLTU&0eI$_XNHMfcjG>vQw}(+fqN3m|7fxRK=XIrdFSnJ)vDF7EGh)R7!sgt6M(+@ zlLPoz8n@X05id{HD`w|Md5T5>`Oi)O1+r%unY1*dJ>wk5rL z_kIoy7C^l3)vH%+*REaHb?)5xMRMMSB98KsGsh%w=7PE%cgT<-C7fLa2-;nAZSbsR z%a*%}1haObxucA{AP1CE{rdIG0QB$Qzl6mK)L>}6C<=PFuROKjiUsH4Nwr5Eb=0~ejyU4Q3@;{6o;(I+BtFx6nN!OYBzG4%F8}Rsf4f}d9^agEQaI=attR_j=foxx+ei?T zcW={wCxAG+-ADkv%qBo9fIc=h89O@z*mhOcUlDA@a88^TNi1BA`HIzC#px4K_c-a$ zbe)pH(9caBsG8TIu|kie+M!V-tNKT3vs4pGod;6SXylC~J4(SMwS6J2o>agZ6>VXV z+K^?SLVlS8pQ=JFG-m*qVlt~V36?dUR7ge%PGlUZ5>;PH^{2YiD3VIGeuE8iHL6tF z_ItTVWp&~h>R;ype| zt1*=vBz9wAVxm=1Y1@kBD(Z=fkh(2=7x#KeZ&iWshl)ggAEf&;tM?HHfHH%BwAw@f z1}D8Wi2+n9Z~>PDpg7WrjLW6E`oeEmVn@}gBf7+{vZc=#)!CSnlj^{sNQJEz4jjvL zurf|{`(~R82mB~EF|E>dLs$S(SZ|EG@Pm>1ye64A)k>GijYr3~h;H4g7RxLZ-x43Up^ei4yA@#sk%tTVj*$ z%wP@Z#yAs5VyiEH^uaXlr-x7c*h9#;I zlK|x`6N#m=a0)~{PCgP>UutpA86ax7+b|TE4l(*JFfp#lHcSx;L;djeyWjn;$q6T% zPR++}E8W`pb zppzU>QsKlr%1#0zlVc*TOU|cms^peaJBMUvMinmmmGd6Y##x85Pciv?GSwbW zk@#Sd_^rS~=mPQaM62BQF-WB|=-LhrN|8+@xpoqLCn0UXrZQHgZ#P2J? z|92^tHSt$pef4t@>GdG;TNH!mn>KCwnfU)|@ceE0+%#iBN;WbWL#8+q8TU%%t#%$c*}>Z`Aw6N@lp$dJ<6 zvuA(UzkmPc*IaYWq)RWow3z_fHf-3iMb2al7%-sIEw|jV7SAgqMvS;mQ1x_V0*h~? z*MpJkL04UMRiuBU@0XO6gnT0n9XfO^FHQcDh+icABiVc--EhMVm-D`F-@eiQk;F~L zH&WNGT{nqG2MAIR5RCKPy70^YT;67daoL`bQ#O zmVcxu-$(%uV*Mj!d?R(~(k0^?>AdsK>%z; z-B?^){F75pJ@qgFHn*tpyLGbJ=;eA07MMMZ_b9SzS-Yz$++->6ZeR%HN0;th3m zb)Fi;AT#S%-pe5R%eo8zn*n*q-ahHdip_A6BK9+?)DV{sP6hyy$srgk`ktxyQnSaA z9fxcL#FrTFh(lcQ?Z|d>#Y1vtLnOQE@Rub$w8;&D>~kXyaWA{@$PPPp7vixD3VZhKxd(uE4WTi!ZQu=%I)DezMqk$c|Gs z$`MC=>h}QPU`tFYd>39gSR;ZM7x>kMLoFO^vD=iK+2e`Vt}Kg5>KK3*UwqML8UXAl z_eC?xrV-dk;6uT)2ojP^$f5kV^zd!4&vmR{N zCSO}yd!(4bUHs2~{&N7oqL{yJxWPthfSjzt^5*ToVE~ezoEXx-M;)i*1d#LDzP4q8 p#vuoZ))@0D2Xai1ngZAB{{dIU(PbsY@FV~L002ovPDHLkV1f&@tiAvM diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/img/zoom-plus-mini.png b/Sources/php_script/script/phpMyAdmin/themes/metro/img/zoom-plus-mini.png deleted file mode 100644 index 4fabfd1ed1ba12272e9ff1244cac6a5c0c14ac1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+3?vf;>QaGJet=Ji>;M1%85p{8Ax_SIF0Ot) zzKH??lf=ZPii=NGR-UDzGTYpIiG{@yd;8@M4lBI9*ZTOZ4GP*29K0bTV^?qQ>At?x z@85s_@Zrbj&p*F>`T6bJuOB~t|Ni~=&!4}a9?Z`LTFqG! z0|gsAT^vIsBv}tS`WsvE_Wi%YQ z_KJfcbg?WiL#kE&gO5M!?oaS+SSmI_^Z?rlE+NI!dp+lV37>KI%=fcS-#2`_uru;U z?X;M*+4fgBYi#z^H83y;9FRHAAod`0KSL=K0|x`c|8rLAt)Zsht^wV`;OXk;vd$@? F2>=-1g1-O& diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_65_ffffff_1x400.png b/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_65_ffffff_1x400.png deleted file mode 100644 index 0af053771c1fc0f2ce949ec5e341b085a45cc648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 74 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI2NH8$CE1Q=ADM3#c#}JM4$r%X}t&0mp9yKsb W%{ak$*<@oTNRg+jpUXO@geCwKViDW` diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png b/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_75_e6e6e6_1x400.png deleted file mode 100644 index 81e2065be481046a57398740018369da5c11911f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq#Qh5978NlCs$2Be&m2bmz&_! zi~U?`Zt`kvp*}s;GbQv54C_*p{v11U;^2`JoM{X@`yC%Cu(tZ}99pbs*45$2AlSt3 TqMGooA7rMdtDnm{r-UW|?OP@T diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_95_fef1ec_1x400.png b/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100644 index beeef85ac198b4ddaa16e9ce2238fea9a2f6525f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCqB11u30hJ=hQAcZOt^k ne9c7C&@kXa_ftoKKi2vke)92dN+)`Ou3_+W^>bP0l+XkKqC85A diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_2e83ff_256x240.png b/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_2e83ff_256x240.png deleted file mode 100644 index ab319c498557b9f7503e8ffeb3d923fb78ef038e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4261 zcmeI0`8U+<|Ht3&Suoboh{iT{6_O88joYZ%-j zbfXxdGGh;eY%z@axbOR%?_cqKoa?;K>s-HF=lMLZb6v0Nb=%(7oR3?S8vp=4OA8Z6 z000kCV3iAc5WiYl?Hp|I+gm%Co=9Z>|N1`%#NIE292n#t?r3`sKqJ**T=uOAPgG@` zLva@gqNr1SeA0TtMiytKBt2vm)y^p=pH3lnT<-4wpk*rlzP=@<S=F1BYt@6vSOguC9H3%Wy58T0d{{jGhhNX$2Q{)%}&*M8@E6CApad|%H z0lwiZs;H9cw>2w2TC&(!mOd7IMW^oPp$Pm6n|&XAW${hI`=$K3s${!3i8jvVDX?Cb zT!Ta)5S{?yTGwWZN&sPI!IEoHRSg<`R7fcw-#P&dUFQ5K4~J1G+8DYS%29 za3D%5D%L`~HBlJcBkn?|e^;4vyk#~yb3GjAy^{|bzBW|8k=>R{9j7$F$DOA&zt-NP zNz|%H*~jmzP;9Jd!W=4J8xn^(ldLP)Si+YAAjF833Hc~!W$_TV#8hbQ9@jra)#A(?>0Rbfwk7v8NC8^qN|4XVhu2id%E$U8smf_@B z$Zm@vRN5_>rrM0o_ozbp0QeMY>noh(3Y{hE9dIi-VKFiM8I(<@{}>m)~!XPqec zg^Uak@=H%Em_n*IB|Af#qHCUMR%(IE+>s%4$4;PaTlw$>Oi<{R8CIw!HTpVPuZ zN$$|Un51xpmv#^%2^;~iW*1ie7uf#O@)LNwrm6YBfAvirR>Iw9V+`|Ngl&EY7g+0muo)`Di~=%R?0J+E9pG+r5y6LlBOHOfSsln zW&()&tE1Yn63P*uY!gRhp6Pao9=n$zI%bzdW@mKG{=rB}P2B{A!S|ML_1~-KKDAYF z8$`#pOgJouO!8-OVU21`iXtVTvY+O=?Xgml%^!rp&NTu0p2J$$e==&hNBJ<_;#WD7 z3QOuWV-Bt=#Y3N#x3?S>$Le3Rj#5cXFz!T;3zO6ea8;|dBP8F07V zFNei63?+GJi-$!U>n>wYf8$KL8iL9V_+S-@0c_L8%N$N>acecj=-_a~CvK}VLYjXG zq&}DOj5{C2Q@}pKRFpelN%$H=ak_Vf6p&9WDj(x>o-ykfkX$j<)2#PwvWl`Gc|A+n zsh8y@8-4Rp#F;N03$=^%^FF$)Lg5c|N?=uq%LJ4&Zw59r`m(jYD zc{6RTkeUeLfF9-Ovw@N}F52N8yRI%ZUJ!fr$p6VOA?Yp`mbMos!U{21L_6w5=F&Ogs= zPs0NCaLe?};*LySFa@*3x`QOL_hW;i-k-lHrUiPi1=PTySGb=7XH3ynyKS+2<#6%9 zVV_9C8W82rRsorNM>|~(4z<^a=M*5Ka=5Sa4E1l3-!r}L1EuWd6but_FF0{bW+vW5 znpYfy+1&-S?0Ju})WBiav$$b|3`Fv00Y?Aw8F6YZ?M2-uT`uI-y3j*%CNb`UUPDn_ zHWu>M+)2_EC!(jV4f?*!hEH>LykPn~#mVm?wBA&HmEzgXKYG#L!U&fU-FDs;^LB-d zI!S;5mE_7n103#VW2Vx{EHT~~;d>aT?l#%PW#1Isn4d#U0dCN%b=8AxgL{jhtu+cL zC!6AI%e(e~NYzR}Cq;#fxWNlrI@?Rlt zu|2f~6hLLu0@8SY98W zM`kPA_F3A*)OM}Ck)faAOhKFAgX=6s)OolMeF>_eS#{P@iUS_-+se~5`J+XzR|3hp300DT(T45 zd`GPN`1RYSV8uNA9(<`IkB%U)9C}V%1xbQ=sjW{RenwQ2Q5QkQK8S+cmc2^;@~g4! zZ2Za>4`xj%;c(y7S1=qycIh=oL~hL&bS+F#N%S|qkW;U#Y}5BNx2y- zqK`YbRHE`fn zp!M^CrU1?Oas!OA?vxekhc!@xw1UUm*y;&i_*9aI$>^$eAexj8WA@dE0lBg zZvc7sHG=wEoxV?O_s*$+#jJq%DHYQ$7sVdQUv$g3SYJi#=|@*jC-sjsFn_A&l;nl! zoz9zlb6bF3Qr@yJ+JYM%9bvlKllmmvs{>YvW_p8OtKr63A%XraKHcJ&SL{Ho7}F#3 z8;zu!`Ob64?Q0Ns;4h{>JWCT=VQ_V!!OUh*J18r z!bR3Qe(Szsi;*=;SAD-M?$@g`4F(plfy)M`)olpD1nzS&6p|MYgIc#1?D5Nh@dbET zFq%X0G^Tjw$xg4yS{dKg*raF@(S_00c^v(uW{&*w9dg&17bCF&F~*nf%2W~0^{#NN z%r6Dgz*O&OK*Fe1TBPXuk*V929&Eu%)}eB2?c-(JDg<>Um-#DW>Ew4Q&_As8tN|z= zvW)Vx{P(rKM7ShL7bH1qp4T2$(FvamC!p9^ruyMK?5#HDLW` zN3t}nJqWCYKiXHAXb_m!^q9*15hjcMeIvm{c_+Vq?dZVb?q;DGy^-T_dgL)kEI9z? zHGXCE)%lGq+uruYyff}88@D?DF)2yH2qFDzjPtw0F=c}}5By+Lgi3^t)E1rZ95)x} z?0zfasQHt9@L}r~9D02|xQEeQ?AH=@>9DbeF*QKX;%Gi>$p1=i$#}uglr9oNY_K6O zTAuezibGJ+;ppqtc^F*&R5200=5wdo)sLZhHs2>);n^GF`&_s z@THipTjue(zoGwjE;qy~zVtizvk$MX&!Iz|Y$N9N8<^UT+YKiD>OwO?T~ML)koF1E zfb$QXK04_R5bvTG5Nz8-hJEQQOmW(b=&N0 z&An~E?;P{%{L&lxcT08d-gq=MKYrhR`2NE2uE9E`redY<&bI&kwo;R!z=%SK0l0DH zO6ZR8A;1SxEO0x&1IC5aOd~H$RKxwukX%(cW7&psJQlGO8yUigdHlb1oRoCk_=mWi zR3rDHwPhZ>{4N{k8C#y@^#q7(4SBG?SOJu+q<_xyz`c9l%#1ux)(SQojIgO&U=*~t zwPxe7t}nQ`uj$HmR-t`ZY+X1?8zi~1fC9G48dRt9*ry1i_UtKk4du>Ld58Ov|4bn) MO>Irej0g$;16-vFO8@`> diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_888888_256x240.png b/Sources/php_script/script/phpMyAdmin/themes/metro/jquery/images/ui-icons_888888_256x240.png deleted file mode 100644 index d4cead1bd30bd67ad7ac4352c9b575e4f49f5b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4262 zcmeH~={wX7)W?6bF}A3YhA@^IWlLn67}HRsEQu`Hbz35oJ=@qqWJyvAgS(p~OBk{a zvV?3|24!r8nPh}8%y@L)&x_}ecs?)Ab*}U7e9yVQ*Exx%#`=8RBHRD~@Le|0GXnt7 zK?*S7kb_9MY`Ak!IAnU&{9?lY^M4d5)w?}%)6mkv;Vh-{q`N7yJ3-p=(zag)buCMU*-}E zUKN+Td0YOjrmnHMrM2pL4om4utU}S%Pe?OI1;^N#-#u0_*j}^jx(cxHM6hHYZ=_G_NTeT8n!D ze5C94?1)vvXX2-hRRliOR(2evzQq&2xSB%w;CMdg$|~NU)zcjP3Y0RbmR3?6bhY9R zD2jW-2jp!Au2phx?H4P>O5BQOZGm2h!-5gCNI`=XQ~ZClb!xTp?OqsuI7T?Xs!S9B z_!)l{g%L6Z%-mKpkLbhX!KGr`KhN1d8G~tnl#yD$MR=_@gT^&Xe{>gjlV_zKgJT~8 zOXX29DzJs}N?SBaA||YJnDYgH{7G9kEUq(qh7{Lc8!mXz`@c|#MK$#*EyFubRos+( z6VrS-sNvuWQ!QUW^LT76g;wcY5tJVvQ{ERI

            jfHA`>k7m(_ftu^L23%(pjSOKLV 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 I4DT5IKj1+HNB{r; diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_card.scss b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_card.scss deleted file mode 100644 index f71dbde..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_card.scss +++ /dev/null @@ -1,33 +0,0 @@ -.card { - margin-top: 1rem; -} - -.card-header { - font-family: $font-family-light; - font-size: 1rem; - border-bottom: 0; -} - -.card-footer { - border-top: 0; -} - -#maincontainer { - .card { - background: none; - border: none; - margin: 0; - } - - .card-header { - background: none; - color: $navi-background; - font-size: 2.8em; - font-family: $font-family-light; - padding: 0; - } - - .card-body ul { - padding-left: 0; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_font.scss b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_font.scss deleted file mode 100644 index 21d5523..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_font.scss +++ /dev/null @@ -1,27 +0,0 @@ -@font-face { - font-family: 'Open Sans'; - src: local('☺'), local('Open Sans'), local('OpenSans'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'Open Sans Light'; - src: local('☺'), local('Open Sans Light'), local('OpenSans-Light'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'Open Sans Bold'; - src: local('☺'), local('Open Sans Bold'), local('OpenSans-Bold'); - font-weight: normal; - font-style: normal; -} - -@font-face { - font-family: 'Open Sans Extrabold'; - src: local('☺'), local('Open Sans Extrabold'), local('OpenSans-Extrabold'); - font-weight: normal; - font-style: normal; -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_print.scss b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_print.scss deleted file mode 100644 index 6198546..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_print.scss +++ /dev/null @@ -1,130 +0,0 @@ -@media print { - .hide { - display: none; - } - - // Standard CSS - body, - table, - th, - td { - color: #000; - background-color: #fff; - font-size: 12px; - } - - // To remove link text decoration - a:link { - color: #000; - text-decoration: none; - } - - // To remove any image borders - img { - border: 0; - } - - // Table specific - table, - th, - td { - border: 0.1em solid #000; - background-color: #fff; - } - - table { - border-collapse: collapse; - border-spacing: 0.2em; - } - - thead { - border-collapse: collapse; - border-spacing: 0.2em; - border: 0.1em solid #000; - font-weight: 900; - } - - th, - td { - padding: 0.2em; - } - - thead th { - font-weight: bold; - background-color: #e5e5e5; - border: 0.1em solid #000; - } - - th { - &.column_heading, - &.column_action { - border: 0.1em solid #000; - } - } - - table { - tr { - &.odd, - &.even { - border-left: 0.1em solid #000; - } - - &.odd th, - &.even th { - border-bottom: 0.1em solid #000; - } - } - - &.data th { - border-bottom: 0.1em solid #000; - } - } - - // Position the main content - #page_content { - position: absolute; - left: 0; - top: 0; - width: 95%; - float: none; - } - - // For the Success message div - .sqlOuter { - color: black; - } - - // For hiding 'Open a New phpMyAdmin Window' button - // Hide extra menu on /table/structure - .cDrop, - .cEdit, - .cList, - .cCpy, - .cPointer { - display: none; - } - - table tbody:first-of-type tr { - // odd items 1,3,5,7... - &:nth-child(odd) { - background: #fff; - - th { - background: #fff; - } - } - - // even items 2,4,6,8... - &:nth-child(even) { - background: #dfdfdf; - - th { - background: #dfdfdf; - } - } - } - - .column_attribute { - font-size: 100%; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_variables.scss b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_variables.scss deleted file mode 100644 index 55e4ff3..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/_variables.scss +++ /dev/null @@ -1,279 +0,0 @@ -// configures general layout for detailed layout configuration please refer to the css files - -$navi-width: 250px; - -// Theme color scheme -// Values: "teal", "redmond", "blueeyes", "mono", "win" -// Default: "win" -// Set this value for the desired color scheme -$color-scheme: win !default; - -$navi-color: #eee; -$navi-background: #377796; -$navi-background-light: #428eb4; -$navi-pointer-color: #333; -$navi-pointer-background: #377796; -$navi-database-name-color: #333; -$navi-hover-background: #428eb4; -$main-color: #444; -$body-bg: #fff; -$browse-pointer-color: #377796; -$browse-marker-color: #000; -$browse-warning-color: #d44a26; -$browse-success-color: #01a31c; -$browse-gray-color: #ccc; -$browse-marker-background: #eee; -$border-color: #ddd; -$button-color: #fff; -$button-background: #377796; -$button-hover: #428eb4; -$th-background: #f7f7f7; -$th-disabled-background: #f3f3f3; -$th-color: #666; -$th-pointer-color: #000; -$bg-one: #f7f7f7; -$bg-two: #fff; -$blue-header: #3a7ead; - -@if $color-scheme == teal { - $navi-color: #fff; - $navi-background: #004d60; - $navi-background-light: #04627c; - $navi-pointer-color: #666; - $navi-pointer-background: #004d60; - $navi-database-name-color: #fff; - $navi-hover-background: #216475; - $main-color: #444; - $body-bg: #fff; - $browse-pointer-color: #004d60; - $browse-marker-color: #000; - $browse-warning-color: #d44a26; - $browse-success-color: #01a31c; - $browse-gray-color: #ccc; - $browse-marker-background: #eee; - $border-color: #ddd; - $button-color: #fff; - $button-background: #aaa; - $button-hover: #000; - $th-background: #f7f7f7; - $th-disabled-background: #f3f3f3; - $th-color: #666; - $th-pointer-color: #000; - $bg-one: #f7f7f7; - $bg-two: #fff; - $blue-header: #3a7ead; -} @else if $color-scheme == redmond { - $navi-color: #fff; - $navi-background: #780505; - $navi-background-light: #a10707; - $navi-pointer-color: #666; - $navi-pointer-background: #780505; - $navi-database-name-color: #fff; - $navi-hover-background: #a10707; - $main-color: #444; - $body-bg: #fff; - $browse-pointer-color: #780505; - $browse-marker-color: #000; - $browse-warning-color: #d44a26; - $browse-success-color: #01a31c; - $browse-gray-color: #ccc; - $browse-marker-background: #eee; - $border-color: #ddd; - $button-color: #fff; - $button-background: #aaa; - $button-hover: #000; - $th-background: #f7f7f7; - $th-disabled-background: #f3f3f3; - $th-color: #666; - $th-pointer-color: #000; - $bg-one: #f7f7f7; - $bg-two: #fff; - $blue-header: #3a7ead; -} @else if $color-scheme == blueeyes { - $navi-color: #fff; - $navi-background: #377796; - $navi-background-light: #428eb4; - $navi-pointer-color: #666; - $navi-pointer-background: #377796; - $navi-database-name-color: #fff; - $navi-hover-background: #428eb4; - $main-color: #444; - $body-bg: #fff; - $browse-pointer-color: #377796; - $browse-marker-color: #000; - $browse-warning-color: #d44a26; - $browse-success-color: #01a31c; - $browse-gray-color: #ccc; - $browse-marker-background: #eee; - $border-color: #ddd; - $button-color: #fff; - $button-background: #377796; - $button-hover: #000; - $th-background: #f7f7f7; - $th-disabled-background: #f3f3f3; - $th-color: #666; - $th-pointer-color: #000; - $bg-one: #f7f7f7; - $bg-two: #fff; - $blue-header: #3a7ead; -} @else if $color-scheme == mono { - $navi-color: #fff; - $navi-background: #666; - $navi-background-light: #999; - $navi-pointer-color: #666; - $navi-pointer-background: #666; - $navi-database-name-color: #fff; - $navi-hover-background: #999; - $main-color: #444; - $body-bg: #fff; - $browse-pointer-color: #666; - $browse-marker-color: #000; - $browse-warning-color: #666; - $browse-success-color: #888; - $browse-gray-color: #ccc; - $browse-marker-background: #eee; - $border-color: #ddd; - $button-color: #fff; - $button-background: #aaa; - $button-hover: #000; - $th-background: #f7f7f7; - $th-disabled-background: #f3f3f3; - $th-color: #666; - $th-pointer-color: #000; - $bg-one: #f7f7f7; - $bg-two: #fff; - $blue-header: #555; -} - -// Bootstrap -// --------- - -// Body - -$body-color: $main-color; - -// Links - -$link-color: $browse-pointer-color; -$link-decoration: none; -$link-hover-color: $browse-pointer-color; -$link-hover-decoration: underline; - -// Components - -$border-radius: 0; - -// Typography - -$font-family-base: "Open Sans", "Segoe UI", sans-serif; -$font-family-monospace: "Consolas", "Lucida Grande", monospace; - -$font-family-light: "Open Sans Light", "Segoe UI Light", "Segoe UI", sans-serif; -$font-family-bold: "Open Sans Bold", sans-serif; -$font-family-extra-bold: "Open Sans Extrabold", "Segoe Black", sans-serif; - -$font-size-base: 0.6875rem; // 11px -$line-height-base: 1; - -$h1-font-size: 3em; -$h2-font-size: 3.6em; -$h3-font-size: 1rem; - -$headings-font-weight: normal; - -// Tables - -$table-cell-padding: 0.6em; -$table-cell-padding-sm: $table-cell-padding; -$table-head-bg: #fff; -$table-head-color: $th-color; -$table-striped-order: even; -$table-hover-color: $th-pointer-color; -$table-hover-bg: $browse-marker-background; -$table-border-width: 0; - -// Buttons - -$enable-transitions: false; - -$primary: $browse-pointer-color; -$secondary: $browse-gray-color; - -$btn-border-radius: 0; -$btn-line-height: 1; -$btn-padding-x: 0.5rem; - -// Dropdowns - -$dropdown-border-radius: 0; - -// Forms - -$input-border-radius: 0; -$form-check-input-margin-y: 0; -$label-margin-bottom: 0; - -// Navs - -$nav-tabs-border-color: #ddd; -$nav-tabs-link-active-border-color: #ddd #ddd #fff; -$nav-tabs-link-hover-border-color: $bg-two $bg-two #ddd; -$nav-tabs-link-active-color: #000; - -// Navbar - -$enable-caret: false; -$navbar-padding-y: 0; -$navbar-padding-x: 0; -$navbar-nav-link-padding-x: 0; -$navbar-nav-link-padding-y: 0; -$navbar-light-color: #666; -$navbar-light-hover-color: #333; -$navbar-light-active-color: #666; -$navbar-light-disabled-color: #666; - -// Pagination - -$pagination-bg: $th-background; -$pagination-hover-bg: $browse-marker-background; -$pagination-border-color: $border-color; -$pagination-hover-border-color: $border-color; -$pagination-active-border-color: $border-color; -$pagination-disabled-border-color: $border-color; - -// Card - -$card-border-radius: 0; -$card-cap-bg: $th-background; -$card-bg: $th-background; - -// Accordion - -$accordion-button-padding-y: 0.375rem; -$accordion-button-padding-x: 1rem; -$accordion-button-active-color: $button-color; -$accordion-button-active-bg: $button-background; - -// Breadcrumbs - -$breadcrumb-navbar-padding-y: 0.89rem; -$breadcrumb-navbar-padding-x: 2rem; -$breadcrumb-navbar-margin-bottom: 0; -$breadcrumb-navbar-bg: $navi-background; -$breadcrumb-divider-color: $button-color; -$breadcrumb-divider: none; - -// Alert - -$alert-margin-bottom: 1em; -$alert-border-radius: 0; -$alert-border-width: 0; - -// List group - -$list-group-bg: inherit; - -// Modals - -$modal-content-border-radius: 0; -$modal-header-padding-y: 0.5rem; diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/blueeyes-theme.scss b/Sources/php_script/script/phpMyAdmin/themes/metro/scss/blueeyes-theme.scss deleted file mode 100644 index 618fb13..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/metro/scss/blueeyes-theme.scss +++ /dev/null @@ -1,3 +0,0 @@ -$color-scheme: blueeyes; - -@import "theme";/* stylelint-disable-line no-invalid-position-at-import-rule */ diff --git a/Sources/php_script/script/phpMyAdmin/themes/metro/theme.json b/Sources/php_script/script/phpMyAdmin/themes/metro/theme.json deleted file mode 100644 index e59644a..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/metro/theme.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "Metro", - "version": "5.0", - "description": "Metro theme for phpMyAdmin", - "author": "phpMyAdmin developers and hplhu", - "url": "https://www.phpmyadmin.net/", - "supports": ["5.0", "5.1", "5.2"] -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.css.map b/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.css.map deleted file mode 100644 index b0f5062..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":["../../../node_modules/bootstrap/scss/_root.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../node_modules/bootstrap/scss/_variables.scss","../scss/_variables.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_containers.scss","../../../node_modules/bootstrap/scss/mixins/_container.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../../node_modules/bootstrap/scss/forms/_labels.scss","../../../node_modules/bootstrap/scss/forms/_form-text.scss","../../../node_modules/bootstrap/scss/forms/_form-control.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/forms/_form-select.scss","../../../node_modules/bootstrap/scss/forms/_form-check.scss","../../../node_modules/bootstrap/scss/forms/_form-range.scss","../../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../../node_modules/bootstrap/scss/forms/_input-group.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_transitions.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_card.scss","../../../node_modules/bootstrap/scss/_accordion.scss","../../../node_modules/bootstrap/scss/_breadcrumb.scss","../../../node_modules/bootstrap/scss/_pagination.scss","../../../node_modules/bootstrap/scss/mixins/_pagination.scss","../../../node_modules/bootstrap/scss/_badge.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/mixins/_alert.scss","../../../node_modules/bootstrap/scss/_list-group.scss","../../../node_modules/bootstrap/scss/mixins/_list-group.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/_modal.scss","../../../node_modules/bootstrap/scss/mixins/_backdrop.scss","../../../node_modules/bootstrap/scss/_spinners.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../../node_modules/bootstrap/scss/helpers/_position.scss","../../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/helpers/_vr.scss","../../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../../node_modules/bootstrap/scss/utilities/_api.scss","../scss/_common.scss","../../pmahomme/scss/_enum-editor.scss","../../pmahomme/scss/_gis.scss","../scss/_navigation.scss","../../pmahomme/scss/_designer.scss","../../pmahomme/scss/_codemirror.scss","../../pmahomme/scss/_jqplot.scss","../scss/_icons.scss","../scss/_reboot.scss","../scss/_tables.scss","../scss/_forms.scss","../scss/_nav.scss","../scss/_navbar.scss","../scss/_card.scss","../../bootstrap/scss/_breadcrumb.scss","../scss/_breadcrumb.scss","../scss/_alert.scss","../scss/_list-group.scss","../scss/_modal.scss","../../pmahomme/scss/_print.scss"],"names":[],"mappings":"CAAA,MAQI,kQAIA,+MAIA,yKAIA,8OAGF,8BACA,wBACA,6BACA,gCAMA,sNACA,+BACA,0FAQA,kCACA,6BACA,2BACA,2BACA,sBAIA,sBCnCF,qBAGE,sBAeE,8CANJ,MAOM,wBAcN,KACE,SACA,uCCmPI,UALI,yBD5OR,uCACA,uCACA,2BACA,qCACA,mCACA,8BACA,0CAUF,GACE,cACA,ME+kB4B,QF9kB5B,8BACA,SACA,QE8kB4B,IF3kB9B,eACE,OEwb4B,IF9a9B,0CACE,aACA,cEohB4B,MFjhB5B,YGZqB,KHarB,YEohB4B,IFhhB9B,OCoMM,UALI,KD1LV,OC+LM,UALI,KDrLV,OC0LM,UALI,KDhLV,OCqLM,UALI,QD3KV,OCgLM,UALI,SDtKV,OC2KM,UALI,QD3JV,EACE,aACA,cEkU0B,KFvT5B,yCAEE,iCACA,YACA,8BAMF,QACE,mBACA,kBACA,oBAMF,MAEE,kBAGF,SAGE,aACA,mBAGF,wBAIE,gBAGF,GACE,YEuZ4B,IFlZ9B,GACE,oBACA,cAMF,WACE,gBAQF,SAEE,YEgY4B,OFxX9B,aC4EM,UALI,QDhEV,WACE,QE4b4B,KF3b5B,iBEmc4B,QF1b9B,QAEE,kBCwDI,UALI,ODjDR,cACA,wBAGF,mBACA,eAKA,EACE,MG9LW,KH+LX,gBG9LgB,KHgMhB,QACE,MGhMe,IHiMf,gBGhMoB,UH0MtB,4DAEE,cACA,qBAOJ,kBAIE,YE6S4B,yBD/RxB,UALI,IDPR,+BACA,2BAOF,IACE,cACA,aACA,mBACA,wBCLQ,QDUR,SCLI,UALI,QDYN,cACA,kBAIJ,KCZM,UALI,QDmBR,ME1QQ,QF2QR,qBAGA,OACE,cAIJ,IACE,oBCxBI,UALI,QD+BR,MEvTS,KFwTT,iBE/SS,QEEP,oBJgTF,QACE,UC/BE,UALI,IDsCN,YE0Q0B,IFjQ9B,OACE,gBAMF,QAEE,sBAQF,MACE,oBACA,yBAGF,QACE,YEwU4B,MFvU5B,eEuU4B,MFtU5B,ME1VS,QF2VT,gBAOF,GAEE,mBACA,gCAGF,2BAME,qBACA,mBACA,eAQF,MACE,qBAMF,OAEE,gBAQF,iCACE,UAKF,sCAKE,SACA,oBC9HI,UALI,QDqIR,oBAIF,cAEE,oBAKF,cACE,eAGF,OAGE,iBAGA,gBACE,UAOJ,0CACE,aAQF,gDAIE,0BAGE,4GACE,eAON,mBACE,UACA,kBAKF,SACE,gBAUF,SACE,YACA,UACA,SACA,SAQF,OACE,WACA,WACA,UACA,cE6J4B,MDhXtB,iCDsNN,oBCxXE,0BDiXJ,OCxMQ,kBDiNN,SACE,WAOJ,+OAOE,UAGF,4BACE,YASF,cACE,oBACA,6BAmBF,4BACE,wBAKF,+BACE,UAMF,uBACE,aAMF,6BACE,aACA,0BAKF,OACE,qBAKF,OACE,SAOF,QACE,kBACA,eAQF,SACE,wBAQF,SACE,wBKnlBF,MJyQM,UALI,SIlQR,YHumB4B,IGlmB5B,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBIvPR,eCrDE,eACA,gBDyDF,aC1DE,eACA,gBD4DF,kBACE,qBAEA,mCACE,aH8lB0B,MGplB9B,YJsNM,UALI,QI/MR,yBAIF,YACE,cHgSO,KDjFH,UALI,SIvMR,wBACE,gBAIJ,mBACE,iBACA,cHsRO,KDjFH,UALI,QI9LR,MHpFS,QGsFT,2BACE,aE/FF,mGCHA,WACA,0CACA,yCACA,kBACA,iBCwDE,yBF5CE,yBACE,ULide,OOtanB,yBF5CE,uCACE,ULide,OOtanB,yBF5CE,qDACE,ULide,OOtanB,0BF5CE,mEACE,ULide,QOtanB,0BF5CE,kFACE,ULide,QQherB,2BCCA,iBACA,aACA,eAEA,uCACA,2CACA,0CDJE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BGyEA,qBACE,gBACA,kCH3EF,4BGyEA,qBACE,gBACA,kCH3EF,4BGyEA,qBACE,gBACA,kCH3EF,6BGyEA,qBACE,gBACA,kCH3EF,6BGyEA,sBACE,gBACA,kCEnJN,YACE,cZwzBsC,MY/yBxC,gBACE,iCACA,oCACA,gBboRI,UALI,Qa3QR,YZgkB4B,IY5jB9B,mBACE,+BACA,kCb0QI,UALI,SajQV,mBACE,gCACA,mCboQI,UALI,Uc5RV,WACE,WbgzBsC,ODhhBlC,UALI,QcvRR,MbKS,QcVX,cACE,cACA,WACA,uBf8RI,UALI,QetRR,YdqkB4B,IcpkB5B,Yd0kB4B,IczkB5B,MbUW,KaTX,iBb0CQ,QazCR,4BACA,yBACA,gBZGE,gBYKF,yBACE,gBAEA,wDACE,eAKJ,oBACE,MbZS,KaaT,iBboBM,QanBN,ad8zBoC,Qc7zBpC,UAKE,WdusB0B,kCchsB9B,2CAEE,aAIF,2BACE,Md1CO,Qc4CP,UAQF,+CAEE,iBd1DO,Qc6DP,UAIF,oCACE,uBACA,0BACA,kBd0pB0B,OczpB1B,MbzDS,KclBX,iBfMS,QcuEP,oBACA,qBACA,mBACA,eACA,wBdgb0B,Ic/a1B,gBAIF,yEACE,iBd+5B8B,Qc55BhC,0CACE,uBACA,0BACA,kBduoB0B,OctoB1B,Mb5ES,KclBX,iBfMS,Qc0FP,oBACA,qBACA,mBACA,eACA,wBd6Z0B,Ic5Z1B,gBAIF,+EACE,iBd44B8B,Qcn4BlC,wBACE,cACA,WACA,kBACA,gBACA,Ydyd4B,Icxd5B,MbvGW,KawGX,+BACA,2BACA,mBAEA,gFAEE,gBACA,eAWJ,iBACE,WdguBsC,2Bc/tBtC,qBfmJI,UALI,UG7QN,oBYmIF,uCACE,qBACA,wBACA,kBd2lB0B,McxlB5B,6CACE,qBACA,wBACA,kBdqlB0B,McjlB9B,iBACE,Wd8sBsC,yBc7sBtC,mBfgII,UALI,SG7QN,oBYsJF,uCACE,mBACA,qBACA,kBd4kB0B,KczkB5B,6CACE,mBACA,qBACA,kBdskB0B,Kc9jB5B,sBACE,WdqrBoC,4BclrBtC,yBACE,WdkrBoC,2Bc/qBtC,yBACE,Wd+qBoC,yBc1qBxC,oBACE,Md6qBsC,Kc5qBtC,YACA,Qd4hB4B,Qc1hB5B,mDACE,eAGF,uCACE,aZ/LA,gBYmMF,0CACE,aZpMA,gBcdJ,aACE,cACA,WACA,uCAEA,uCjB2RI,UALI,QiBnRR,YhBkkB4B,IgBjkB5B,YhBukB4B,IgBtkB5B,MfOW,KeNX,iBfuCQ,QetCR,iPACA,4BACA,oBhBg7BkC,oBgB/6BlC,gBhBg7BkC,UgB/6BlC,yBdFE,gBcMF,gBAEA,mBACE,ahBs0BoC,QgBr0BpC,UAKE,WhBi7B4B,kCgB76BhC,0DAEE,chBgsB0B,OgB/rB1B,sBAGF,sBAEE,iBhBpCO,QgByCT,4BACE,oBACA,uBAIJ,gBACE,YhByrB4B,OgBxrB5B,ehBwrB4B,OgBvrB5B,ahBwrB4B,MD/cxB,UALI,UG7QN,oBc8CJ,gBACE,YhBqrB4B,MgBprB5B,ehBorB4B,MgBnrB5B,ahBorB4B,KDndxB,UALI,SG7QN,oBefJ,YACE,cACA,WjBq3BwC,QiBp3BxC,ajBq3BwC,MiBp3BxC,cjBq3BwC,QiBn3BxC,8BACE,WACA,mBAIJ,kBACE,MjBy2BwC,IiBx2BxC,OjBw2BwC,IiBv2BxC,iBACA,mBACA,iBhBkCQ,QgBjCR,4BACA,2BACA,wBACA,OjB42BwC,0BiB32BxC,gBACA,mBAGA,iCfXE,oBeeF,8BAEE,cjBm2BsC,IiBh2BxC,yBACE,OjB01BsC,gBiBv1BxC,wBACE,ajBszBoC,QiBrzBpC,UACA,WjBmsB4B,kCiBhsB9B,0BACE,iBjBZM,QiBaN,ajBbM,QiBeN,yCAII,+OAIJ,sCAII,uJAKN,+CACE,iBjBjCM,QiBkCN,ajBlCM,QiBuCJ,yOAIJ,2BACE,oBACA,YACA,QjBk0BuC,GiB3zBvC,2FACE,QjB0zBqC,GiB5yB3C,aACE,ajBqzBgC,MiBnzBhC,+BACE,MjBizB8B,IiBhzB9B,mBACA,wKACA,gCf9FA,kBekGA,qCACE,0JAGF,uCACE,oBjBgzB4B,aiB3yB1B,uJAMR,mBACE,qBACA,ajBmxBgC,KiBhxBlC,WACE,kBACA,sBACA,oBAIE,mDACE,oBACA,YACA,QjBqoBwB,IkBnxB9B,YACE,WACA,cACA,UACA,+BACA,gBAEA,kBACE,UAIA,mDlB89BuC,oDkB79BvC,+ClB69BuC,oDkB19BzC,8BACE,SAGF,kCACE,MlB+8BuC,KkB98BvC,OlB88BuC,KkB78BvC,oBHzBF,iBfkCQ,QkBPN,OlB88BuC,EE19BvC,mBgBgBA,gBAEA,yCHjCF,iBf8+ByC,QkBx8BzC,2CACE,MlBw7B8B,KkBv7B9B,OlBw7B8B,MkBv7B9B,oBACA,OlBu7B8B,QkBt7B9B,iBlBpCO,QkBqCP,2BhB7BA,mBgBkCF,8BACE,MlBo7BuC,KkBn7BvC,OlBm7BuC,Ket+BzC,iBfkCQ,QkBmBN,OlBo7BuC,EE19BvC,mBgB0CA,gBAEA,qCH3DF,iBf8+ByC,QkB96BzC,8BACE,MlB85B8B,KkB75B9B,OlB85B8B,MkB75B9B,oBACA,OlB65B8B,QkB55B9B,iBlB9DO,QkB+DP,2BhBvDA,mBgB4DF,qBACE,oBAEA,2CACE,iBlBtEK,QkByEP,uCACE,iBlB1EK,QmBbX,eACE,kBAEA,yDAEE,OnBy/B8B,mBmBx/B9B,YnBy/B8B,KmBt/BhC,qBACE,kBACA,MACA,OACA,YACA,oBACA,oBACA,+BACA,qBAKF,6BACE,oBAEA,0CACE,oBAGF,wFAEE,YnBm+B4B,SmBl+B5B,enBm+B4B,QmBh+B9B,8CACE,YnB89B4B,SmB79B5B,enB89B4B,QmB19BhC,4BACE,YnBw9B8B,SmBv9B9B,enBw9B8B,QmBl9B9B,sIACE,QnBk9B4B,ImBj9B5B,UnBk9B4B,oDmB78B9B,oDACE,QnB28B4B,ImB18B5B,UnB28B4B,oDoBjgClC,aACE,kBACA,aACA,eACA,oBACA,WAEA,qDAEE,kBACA,cACA,SACA,YAIF,iEAEE,UAMF,kBACE,kBACA,UAEA,wBACE,UAWN,kBACE,aACA,mBACA,uBrBsPI,UALI,QqB/OR,YpB8hB4B,IoB7hB5B,YpBmiB4B,IoBliB5B,MnB7BW,KmB8BX,kBACA,mBACA,iBpB5CS,QoB6CT,yBlBpCE,gBkB8CJ,kHAIE,mBrBgOI,UALI,SG7QN,oBkBuDJ,kHAIE,qBrBuNI,UALI,UG7Q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vDF,qBCmBA,MvBJa,QuBKb,avBLa,QuBOb,2BACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,iEAEE,2CAGF,iLAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,+MAKI,2CAKN,4DAEE,MvBvCW,QuBwCX,+BDvDF,kBCmBA,MvBJa,QuBKb,avBLa,QuBOb,wBACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,2DAEE,4CAGF,kKAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,gMAKI,4CAKN,sDAEE,MvBvCW,QuBwCX,+BDvDF,qBCmBA,MvBJa,QuBKb,avBLa,QuBOb,2BACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,iEAEE,2CAGF,iLAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,+MAKI,2CAKN,4DAEE,MvBvCW,QuBwCX,+BDvDF,oBCmBA,MvBJa,QuBKb,avBLa,QuBOb,0BACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,+DAEE,2CAGF,4KAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,0MAKI,2CAKN,0DAEE,MvBvCW,QuBwCX,+BDvDF,mBCmBA,MvBJa,QuBKb,avBLa,QuBOb,yBACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,6DAEE,6CAGF,uKAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,qMAKI,6CAKN,wDAEE,MvBvCW,QuBwCX,+BDvDF,kBCmBA,MvBJa,QuBKb,avBLa,QuBOb,wBACE,MATY,KAUZ,iBvBTW,QuBUX,avBVW,QuBab,2DAEE,0CAGF,kKAKE,MArBa,KAsBb,iBvBxBW,QuByBX,avBzBW,QuB2BX,gMAKI,0CAKN,sDAEE,MvBvCW,QuBwCX,+BD3CJ,UACE,YtBigB4B,IsBhgB5B,MrBnBW,KqBoBX,gBrBnBgB,KqBqBhB,gBACE,MrBrBe,IqBsBf,gBrBrBoB,UqBwBtB,gBACE,gBrBzBoB,UqB4BtB,sCAEE,MtB/EO,QsB0FX,2BCuBE,mBxBsKI,UALI,SG7QN,oBoByFJ,2BCmBE,qBxBsKI,UALI,UG7QN,oBsBhBF,iBACE,UAMF,qBACE,aAIJ,YACE,SACA,gBAGA,gCACE,QACA,YCrBJ,sCAIE,kBAGF,iBACE,mBAOF,eACE,kBACA,QzByhCkC,KyBxhClC,aACA,UzB+mCkC,MyB9mClC,YACA,S1B+QI,UALI,Q0BxQR,MxBFW,KwBGX,gBACA,gBACA,iBzBnBS,KyBoBT,4BACA,iCvBVE,gBuBcF,+BACE,SACA,OACA,WzBkmCgC,QyBtlChC,qBACE,qBAEA,qCACE,WACA,OAIJ,mBACE,mBAEA,mCACE,QACA,UlBCJ,yBkBfA,wBACE,qBAEA,wCACE,WACA,OAIJ,sBACE,mBAEA,sCACE,QACA,WlBCJ,yBkBfA,wBACE,qBAEA,wCACE,WACA,OAIJ,sBACE,mBAEA,sCACE,QACA,WlBCJ,yBkBfA,wBACE,qBAEA,wCACE,WACA,OAIJ,sBACE,mBAEA,sCACE,QACA,WlBCJ,0BkBfA,wBACE,qBAEA,wCACE,WACA,OAIJ,sBACE,mBAEA,sCACE,QACA,WlBCJ,0BkBfA,yBACE,qBAEA,yCACE,WACA,OAIJ,uBACE,mBAEA,uCACE,QACA,WAUN,uCACE,SACA,YACA,aACA,czB0jCgC,QyBjjClC,wCACE,MACA,WACA,UACA,aACA,YzB4iCgC,QyBviChC,iCACE,iBAMJ,0CACE,MACA,WACA,UACA,aACA,azB2hCgC,QyBthChC,oCACE,iBAON,kBACE,SACA,eACA,gBACA,qCAMF,eACE,cACA,WACA,YACA,WACA,YzBwc4B,IyBvc5B,MzBvHS,QyBwHT,mBAEA,mBACA,+BACA,SAKE,2BvBtHA,yBACA,0BuByHA,0BvB5GA,6BACA,4BuBgHF,0CAEE,MzBs/BgC,QyBr/BhC,qBV1JF,iBfMS,QyBwJT,4CAEE,MzB5JO,KyB6JP,qBVjKF,iBfkCQ,QyBmIR,gDAEE,MzB9JO,QyB+JP,oBACA,+BAMJ,oBACE,cAIF,iBACE,cACA,QzBq+BkC,IyBp+BlC,gB1B0GI,UALI,U0BnGR,MzB/KS,QyBgLT,mBAIF,oBACE,cACA,YACA,MzBpLS,QyBwLX,oBACE,MzB/LS,QyBgMT,iBzB3LS,QyB4LT,azB87BkC,gByB37BlC,mCACE,MzBrMO,QyBuMP,kFAEE,MzB5MK,KeJT,iBfsqCkC,sByBl9BhC,oFAEE,MzBlNK,KeJT,iBfkCQ,QyBwLN,wFAEE,MzBnNK,QyBuNT,sCACE,azBq6BgC,gByBl6BlC,wCACE,MzB9NO,QyBiOT,qCACE,MzBhOO,Q0BZX,+BAEE,kBACA,oBACA,sBAEA,yCACE,kBACA,cAKF,kXAME,UAKJ,aACE,aACA,eACA,2BAEA,0BACE,WAMF,0EAEE,iBAIF,mGxBRE,0BACA,6BwBgBF,6GxBHE,yBACA,4BwBqBJ,uBACE,uBACA,sBAEA,2GAGE,cAGF,0CACE,eAIJ,yEACE,sBACA,qBAGF,yEACE,qBACA,oBAoBF,oBACE,sBACA,uBACA,uBAEA,wDAEE,WAGF,4FAEE,gBAIF,qHxBvFE,6BACA,4BwB2FF,oFxB1GE,yBACA,0ByBxBJ,KACE,aACA,eACA,eACA,gBACA,gBAGF,UACE,cACA,mBAGA,M1B0CW,K0BtCX,gCAEE,M1BsCe,I0BrCf,qBAIF,mBACE,M3BhBO,Q2BiBP,oBACA,eAQJ,UACE,sCAEA,oBACE,mBACA,gBACA,+BzBlBA,yBACA,0ByBoBA,oDAEE,a1BoD6B,wB0BlD7B,kBAGF,6BACE,M3B3CK,Q2B4CL,+BACA,2BAIJ,8DAEE,M1BuCyB,K0BtCzB,iB1BpBK,Q0BqBL,a1BmCgC,wB0BhClC,yBAEE,gBzB5CA,yBACA,0ByBuDF,qBACE,gBACA,SzBnEA,gByBuEF,uDAEE,M3BpFO,KeJT,iBfkCQ,Q2BiER,wCAEE,cACA,kBAKF,kDAEE,aACA,YACA,kBAMF,iEACE,WAUF,uBACE,aAEF,qBACE,cCxHJ,QACE,kBACA,aACA,eACA,mBACA,8BACA,Y3ByFiB,E2BxFjB,c3ByFiB,E2BxFjB,e3BuFiB,E2BtFjB,a3BuFiB,E2BjFjB,2JACE,aACA,kBACA,mBACA,8BAoBJ,cACE,Y5BqiCkC,U4BpiClC,e5BoiCkC,U4BniClC,a5BoiCkC,KDzzB9B,UALI,S6BnOR,mBAEA,wCAEE,qBASJ,YACE,aACA,sBACA,eACA,gBACA,gBAEA,sBACE,gBACA,eAGF,2BACE,gBASJ,aACE,Y5By9BkC,M4Bx9BlC,e5Bw9BkC,M4B58BpC,iBACE,gBACA,YAGA,mBAIF,gBACE,sB7B6KI,UALI,S6BtKR,cACA,+BACA,+B1BzGE,gB0B6GF,sBACE,qBAGF,sBACE,qBACA,UACA,wBAMJ,qBACE,qBACA,YACA,aACA,sBACA,4BACA,2BACA,qBAGF,mBACE,yCACA,gBrB1FE,yBqBsGA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,c3BjEgB,I2BkEhB,a3BlEgB,I2BsEpB,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,oCACE,aAGF,6BACE,iBACA,SACA,aACA,YACA,8BACA,+BACA,eACA,cAEA,eAEF,qEAEE,YACA,aACA,gBAGF,kCACE,aACA,YACA,UACA,oBrBhKN,yBqBsGA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,c3BjEgB,I2BkEhB,a3BlEgB,I2BsEpB,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,oCACE,aAGF,6BACE,iBACA,SACA,aACA,YACA,8BACA,+BACA,eACA,cAEA,eAEF,qEAEE,YACA,aACA,gBAGF,kCACE,aACA,YACA,UACA,oBrBhKN,yBqBsGA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,c3BjEgB,I2BkEhB,a3BlEgB,I2BsEpB,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,oCACE,aAGF,6BACE,iBACA,SACA,aACA,YACA,8BACA,+BACA,eACA,cAEA,eAEF,qEAEE,YACA,aACA,gBAGF,kCACE,aACA,YACA,UACA,oBrBhKN,0BqBsGA,kBAEI,iBACA,2BAEA,8BACE,mBAEA,6CACE,kBAGF,wCACE,c3BjEgB,I2BkEhB,a3BlEgB,I2BsEpB,qCACE,iBAGF,mCACE,wBACA,gBAGF,kCACE,aAGF,oCACE,aAGF,6BACE,iBACA,SACA,aACA,YACA,8BACA,+BACA,eACA,cAEA,eAEF,qEAEE,YACA,aACA,gBAGF,kCACE,aACA,YACA,UACA,oBrBhKN,0BqBsGA,mBAEI,iBACA,2BAEA,+BACE,mBAEA,8CACE,kBAGF,yCACE,c3BjEgB,I2BkEhB,a3BlEgB,I2BsEpB,sCACE,iBAGF,oCACE,wBACA,gBAGF,mCACE,aAGF,qCACE,aAGF,8BACE,iBACA,SACA,aACA,YACA,8BACA,+BACA,eACA,cAEA,eAEF,uEAEE,YACA,aACA,gBAGF,mCACE,aACA,YACA,UACA,oBA1DN,eAEI,iBACA,2BAEA,2BACE,mBAEA,0CACE,kBAGF,qCACE,c3BjEgB,I2BkEhB,a3BlEgB,I2BsEpB,kCACE,iBAGF,gCACE,wBACA,gBAGF,+BACE,aAGF,iCACE,aAGF,0BACE,iBACA,SACA,aACA,YACA,8BACA,+BACA,eACA,cAEA,eAEF,+DAEE,YACA,aACA,gBAGF,+BACE,aACA,YACA,UACA,mBAcR,4BACE,M3BzHwB,K2B2HxB,oEAEE,M3B7HsB,K2BkIxB,oCACE,M3BrIe,K2BuIf,oFAEE,M3BxImB,I2B2IrB,6CACE,M3B1IsB,K2B8I1B,qFAEE,M3BjJsB,K2BqJ1B,8BACE,M3BxJiB,K2ByJjB,a5By2BgC,e4Bt2BlC,mCACE,4OAGF,2BACE,M3BjKiB,K2BmKjB,mGAGE,M3BpKsB,K2B2K1B,2BACE,M5BzRO,K4B2RP,kEAEE,M5B7RK,K4BkSP,mCACE,M5B8zB8B,sB4B5zB9B,kFAEE,M5B2zB4B,sB4BxzB9B,4CACE,M5ByzB4B,sB4BrzBhC,mFAEE,M5BjTK,K4BqTT,6BACE,M5B2yBgC,sB4B1yBhC,a5B+yBgC,qB4B5yBlC,kCACE,mQAGF,0BACE,M5BkyBgC,sB4BjyBhC,gGAGE,M5BnUK,K6BJX,MACE,kBACA,aACA,sBACA,YAEA,qBACA,iB5BmCO,Q4BlCP,2BACA,sB3BME,gB2BFF,SACE,eACA,cAGF,kBACE,mBACA,sBAEA,8BACE,mB3BCF,yBACA,0B2BEA,6BACE,sB3BUF,6BACA,4B2BJF,8DAEE,aAIJ,WAGE,cACA,kBAIF,YACE,c7BirCkC,M6B9qCpC,eACE,oBACA,gBAGF,sBACE,gBAIA,iBACE,qBAGF,sBACE,Y5B8DY,K4BtDhB,aACE,mBACA,gBAEA,iB5B1Cc,Q4B2Cd,6BAEA,yB3BpEE,sB2ByEJ,aACE,mBAEA,iB5BrDc,Q4BsDd,0BAEA,wB3B/EE,sB2ByFJ,kBACE,qBACA,sBACA,oBACA,gBAUF,mBACE,qBACA,oBAIF,kBACE,kBACA,MACA,QACA,SACA,OACA,Q7BgPO,KEnWL,gB2BuHJ,yCAGE,WAGF,wB3BpHI,yBACA,0B2BwHJ,2B3B3GI,6BACA,4B2BuHF,kBACE,c7BklCgC,OOtrChC,yBsBgGJ,YAQI,aACA,mBAGA,kBAEE,YACA,gBAEA,wBACE,cACA,cAKA,mC3BpJJ,0BACA,6B2BsJM,iGAGE,0BAEF,oGAGE,6BAIJ,oC3BrJJ,yBACA,4B2BuJM,mGAGE,yBAEF,sGAGE,6BC7MZ,kBACE,kBACA,aACA,mBACA,WACA,uB/B4RI,UALI,Q+BrRR,M7BiIuB,K6BhIvB,gBACA,iB7B0CQ,Q6BzCR,S5BKE,gB4BHF,qBAGA,kCACE,M7ByH4B,K6BxH5B,iB7ByBK,Q6BxBL,2CAEA,yCACE,8RACA,U9B4vCoC,gB8BvvCxC,yBACE,cACA,M9BivCsC,Q8BhvCtC,O9BgvCsC,Q8B/uCtC,iBACA,WACA,8RACA,4BACA,gB9B2uCsC,Q8BvuCxC,wBACE,UAGF,wBACE,UACA,a9BizBoC,Q8BhzBpC,UACA,W9B8rB4B,kC8B1rBhC,kBACE,gBAGF,gBACE,iB7BLQ,Q6BMR,kCAEA,8B5BnCE,yBACA,0B4BqCA,gD5BtCA,yBACA,0B4B0CF,oCACE,aAIF,6B5BlCE,6BACA,4B4BqCE,yD5BtCF,6BACA,4B4B0CA,iD5B3CA,6BACA,4B4BgDJ,gBACE,qBASA,qCACE,eAGF,iCACE,eACA,c5BxFA,gB4B2FA,0DACA,4DAEA,mD5B9FA,gB6BnBJ,YACE,aACA,eACA,YACA,c/Bw/CkC,K+Bt/ClC,gBAOA,kCACE,a/B6+CgC,M+B3+ChC,0CACE,WACA,c/By+C8B,M+Bx+C9B,M9BmIqB,Q8BlIrB,uFAIJ,wBACE,M/BXO,QgCdX,YACE,a5BGA,eACA,2B4BCA,kBACA,cACA,M/BoDW,K+BlDX,iBhCFS,KgCGT,sBAGA,iBACE,UACA,M/B8Ce,I+B7Cf,qBACA,iBhCRO,QgCSP,a/BGS,sB+BCT,UACA,M/BsCe,I+BrCf,iBhCfO,QgCgBP,QhC4qCgC,EgC3qChC,WhCstB4B,kCgCjtB9B,wCACE,YhC+pCgC,KgC5pClC,6BACE,UACA,MhC9BO,KeJT,iBfkCQ,QgCEN,a/BlBS,K+BqBX,+BACE,MhC9BO,QgC+BP,oBACA,iBhCtCO,KgCuCP,a/BzBS,KgClBX,WACE,uBAOI,kC/BqCJ,yBACA,4B+BhCI,iC/BiBJ,0BACA,6B+BhCF,0BACE,sBlCgSE,UALI,SkCpRF,iD/BqCJ,6BACA,gC+BhCI,gD/BiBJ,8BACA,iC+BhCF,0BACE,qBlCgSE,UALI,UkCpRF,iD/BqCJ,6BACA,gC+BhCI,gD/BiBJ,8BACA,iCgC/BJ,OACE,qBACA,oBnC8RI,UALI,OmCvRR,YlCukB4B,IkCtkB5B,cACA,MlCHS,KkCIT,kBACA,mBACA,wBhCKE,6BgCCA,aAKJ,YACE,kBACA,SCvBF,OACE,kBACA,kBACA,clCoJoB,KkCnJpB,+BjCWE,gBiCNJ,eAEE,cAIF,YACE,YnC4jB4B,ImCpjB9B,mBACE,cnCm5C8B,KmCh5C9B,8BACE,kBACA,MACA,QACA,UACA,qBAeF,eClDA,MD8Cc,QpB5Cd,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,2BACE,cD6CF,iBClDA,MD8Cc,QpB5Cd,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,6BACE,cD6CF,eClDA,MD8Cc,QpB5Cd,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,2BACE,cD6CF,YClDA,MDgDgB,QpB9ChB,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,wBACE,cD6CF,eClDA,MDgDgB,QpB9ChB,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,2BACE,cD6CF,cClDA,MD8Cc,QpB5Cd,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,0BACE,cD6CF,aClDA,MDgDgB,QpB9ChB,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,yBACE,cD6CF,YClDA,MD8Cc,QpB5Cd,iBoB0CmB,QC1CnB,aD2Ce,QCzCf,wBACE,cCHJ,YACE,aACA,sBAGA,eACA,gBnCSE,gBmCLJ,qBACE,qBACA,sBAEA,gCAEE,oCACA,0BAUJ,wBACE,WACA,MrClBS,QqCmBT,mBAGA,4DAEE,UACA,MrCzBO,QqC0BP,qBACA,iBrCjCO,QqCoCT,+BACE,MpCxBS,KoCyBT,iBrCrCO,QqC8CX,iBACE,kBACA,cACA,uBACA,MrC3CS,QqC6CT,iBpCmGc,QoClGd,kCAEA,6BnCrCE,+BACA,gCmCwCF,4BnC3BE,mCACA,kCmC8BF,oDAEE,MrC7DO,QqC8DP,oBACA,iBpCoFY,QoChFd,wBACE,UACA,MrC3EO,KqC4EP,iBrC9CM,QqC+CN,arC/CM,QqCkDR,kCACE,mBAEA,yCACE,gBACA,iBrCwawB,IqC1Z1B,uBACE,mBAGE,oDnCrCJ,4BAZA,0BmCsDI,mDnCtDJ,0BAYA,4BmC+CI,+CACE,aAGF,yDACE,iBrCuYoB,IqCtYpB,oBAEA,gEACE,iBACA,kBrCkYkB,IOtc1B,yB8B4CA,0BACE,mBAGE,uDnCrCJ,4BAZA,0BmCsDI,sDnCtDJ,0BAYA,4BmC+CI,kDACE,aAGF,4DACE,iBrCuYoB,IqCtYpB,oBAEA,mEACE,iBACA,kBrCkYkB,KOtc1B,yB8B4CA,0BACE,mBAGE,uDnCrCJ,4BAZA,0BmCsDI,sDnCtDJ,0BAYA,4BmC+CI,kDACE,aAGF,4DACE,iBrCuYoB,IqCtYpB,oBAEA,mEACE,iBACA,kBrCkYkB,KOtc1B,yB8B4CA,0BACE,mBAGE,uDnCrCJ,4BAZA,0BmCsDI,sDnCtDJ,0BAYA,4BmC+CI,kDACE,aAGF,4DACE,iBrCuYoB,IqCtYpB,oBAEA,mEACE,iBACA,kBrCkYkB,KOtc1B,0B8B4CA,0BACE,mBAGE,uDnCrCJ,4BAZA,0BmCsDI,sDnCtDJ,0BAYA,4BmC+CI,kDACE,aAGF,4DACE,iBrCuYoB,IqCtYpB,oBAEA,mEACE,iBACA,kBrCkYkB,KOtc1B,0B8B4CA,2BACE,mBAGE,wDnCrCJ,4BAZA,0BmCsDI,uDnCtDJ,0BAYA,4BmC+CI,mDACE,aAGF,6DACE,iBrCuYoB,IqCtYpB,oBAEA,oEACE,iBACA,kBrCkYkB,KqCpX9B,kBnC9HI,gBmCiIF,mCACE,qBAEA,8CACE,sBCpJJ,yBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,4GAEE,MD2JqB,QC1JrB,yBAGF,uDACE,MtCRG,KsCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,2BACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,gHAEE,MD2JqB,QC1JrB,yBAGF,yDACE,MtCRG,KsCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,yBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,4GAEE,MD2JqB,QC1JrB,yBAGF,uDACE,MtCRG,KsCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,sBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,sGAEE,MD6JuB,QC5JvB,yBAGF,oDACE,MtCRG,KsCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,yBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,4GAEE,MD6JuB,QC5JvB,yBAGF,uDACE,MtCRG,KsCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,wBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,0GAEE,MD2JqB,QC1JrB,yBAGF,sDACE,MtCRG,KsCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,uBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,wGAEE,MD6JuB,QC5JvB,yBAGF,qDACE,MtCRG,KsCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,sBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,sGAEE,MD2JqB,QC1JrB,yBAGF,oDACE,MtCRG,KsCSH,iBDqJqB,QCpJrB,aDoJqB,QEjK7B,WACE,uBACA,MvCqjD2B,IuCpjD3B,OvCojD2B,IuCnjD3B,oBACA,MvCQS,KuCPT,6WACA,SrCOE,gBqCLF,QvCqjD2B,GuCljD3B,iBACE,WACA,qBACA,QvCgjDyB,IuC7iD3B,iBACE,UACA,WvCwtB4B,kCuCvtB5B,QvC2iDyB,EuCxiD3B,wCAEE,oBACA,iBACA,QvCqiDyB,IuCjiD7B,iBACE,OvCiiD2B,2CwChkD7B,OACE,eACA,MACA,OACA,QxCsiCk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aACA,iBACA,WACA,WAGF,yBACE,aACA,mBAGA,aACA,iBACA,WACA,WAGF,aACE,YACA,kBACA,kBACA,eAIA,2BACE,WACA,kBACA,mBAIF,qCACE,mBAIJ,mBACE,YACA,+BAMF,0BAEE,sBAMF,QACE,kBACA,yBAIA,gCAEE,iBACA,mBAIJ,OACE,YvDrGsB,UuDwGxB,cACE,eAGF,WACE,gBACA,aACA,sBACA,aACA,sBACA,kBAGF,iBACE,mBACA,WACA,gBACA,aACA,UACA,eACA,mBACA,YACA,kBACA,cACA,uBAIF,YACE,qBACA,8BACA,yBAIF,MACE,0BACA,sBACA,iBACA,4BACA,2BAGF,gBACE,kBACA,iBAGF,eACE,gBAIF,kCAGE,kBACA,eAGF,cACE,sBAGF,2BACE,sBAEA,kCACE,2BACA,4BACA,iBACA,4CACA,4BACA,8CACA,4BAIJ,OACE,sBACA,UAGF,YACE,YACA,gBAKF,iBACE,WAGF,YACE,cACA,mBACA,WAGF,YACE,iBACA,MvD1OS,KuD2OT,WvD7Oc,QuDgPhB,sBAEE,mBACA,MvDjPS,KuDkPT,WvDpPc,QuDwPd,8DAGE,WAGF,oBACE,UAKF,wDAGE,WAGF,kBACE,UAKF,8DAGE,WAGF,oBACE,UAMJ,UACE,WAGE,wDAGE,WAGF,kBACE,WACA,qBAKN,2BAEE,sBAGF,UACE,qBAGF,aACE,aAQA,YACE,YACA,aAGF,eACE,WACA,YAOJ,eACE,SACA,eACA,kBAEA,2DAEE,cACA,kBAGF,6BACE,gBACA,WACA,cAIJ,yBACE,cACA,WACA,kBACA,gBACA,YAGF,YACE,gBAGF,qCACE,iBAGF,iCACE,WAGF,iBACE,eACA,MACA,OACA,YACA,WACA,gBACA,YAGF,kBACE,WACA,mBAGF,kBACE,8BAGF,kBACE,cAGF,aACE,cACA,eAGF,4BACE,0BAGF,sBACE,gBAGF,uBACE,WAGF,YACE,WAGF,gBACE,iBAGF,iBAEE,8BAKF,QACE,iBACA,qBACA,SACA,UAKA,6CAEE,SACA,kBAGF,mBACE,gBAIJ,aACE,YAGF,WACE,kBAGF,0BACE,WACA,gBACA,mBACA,kBACA,eAGF,kBACE,gBACA,kBACA,WAGF,gBACE,eACA,MACA,QACA,WACA,gBAGF,oBACE,eACA,aAGF,8CAEE,aAGF,aACE,UACA,WACA,YvD5csB,UuD6ctB,eAGF,kBACE,kBACA,WACA,WACA,YACA,iBACA,kBACA,sBACA,WACA,uBACA,aAIA,kCACE,+BACA,oBACA,mBAGF,+BACE,WACA,cACA,WACA,eACA,iBACA,mBAGF,sCACE,WACA,cACA,WACA,eACA,mBAEA,oLAGE,WACA,eAIJ,+BACE,WACA,YACA,eAGF,4CACE,WAIJ,6BACE,WACA,UACA,eAEA,sCACE,WAGF,mCACE,mBAGF,oCACE,WAIJ,qFAEE,WAGF,0CACE,gBAGF,gBACE,0BACA,cACA,eAGF,yDACE,cACA,eAGF,qBACE,eAGF,cACE,YAIA,6BACE,WACA,YACA,aACA,kBAMA,6EAEE,mBAIJ,cACE,WACA,gBACA,aACA,oBAIJ,0BACE,sBACA,yBACA,iBAIA,mBACE,YACA,SAGF,iCACE,mBACA,YACA,cAIJ,aACE,iBACA,WACA,cAEA,kCAEE,iBAGF,mBACE,uBAIJ,cACE,aACA,kBACA,sBACA,SACA,YACA,4BACA,sBACA,UAGF,aACE,iBACA,WAEA,mBACE,WAIJ,aACE,iBAIF,mBACE,YACA,aACA,WAGF,4CACE,oBACA,UACA,YAIA,kBACE,WAGF,wBACE,WACA,UACA,cAQJ,eACE,8CACA,iCACA,4BAGF,0CAEE,WACA,UAIA,kBACE,qBACA,sBAGF,kBACE,cAIJ,iBACE,kBACA,YACA,gBACA,YACA,sBACA,gBAGF,wBACE,WvDnwBgB,QuDowBhB,wBAGF,YACE,YACA,YACA,kBAEA,gBACE,uBAGF,wBACE,sBAIJ,UACE,WACA,cACA,eACA,kBACA,UACA,eACA,6BACA,iBAGF,uCAEE,WAGF,IACE,MvD3xBW,KuD4xBX,+BACA,gBAGF,KACE,cACA,MvDlyBW,KuDoyBX,SACE,cACA,kBACA,aACA,gBACA,gBACA,cACA,cAGF,SACE,cACA,aACA,aACA,gBACA,gBACA,cACA,cAIJ,gBACE,cACA,aACA,aACA,gBACA,gBACA,cACA,cAGF,2CAEE,sBACA,aACA,gBACA,WvDhzBO,QuDmzBT,2BACE,gBAGF,6BACE,sBACA,aACA,WvD1zBO,QuD6zBT,6BACE,WAIF,MACE,aAGF,aACE,qBACA,UAQA,oBACE,YACA,gBACA,kBAGF,8BACE,sBACA,YACA,kBACA,kBACA,MvDn3BS,KuDs3BX,8BACE,iBvD53BsB,KuD63BtB,QACA,YACA,WACA,gBACA,MvDl3BkB,KuDm3BlB,kBAGF,6CACE,kBACA,MACA,OACA,YAGF,6CACE,SACA,UAGF,eACE,gBAKF,sIAIE,WASF,kIAIE,gBAIJ,oCAEE,gBAMF,mBAEE,MACA,eACA,aACA,kBACA,gBACA,iBAEA,gBACA,YACA,sBAEA,aACA,kBACA,cACA,OACA,QACA,oDACA,4BACA,uBAGF,gBAEE,kBACA,WAGF,kBACE,aACA,eACA,WACA,YACA,MACA,OACA,gBACA,aACA,gBAMF,uCACE,sBAGF,4BACE,eAGF,0BACE,iBAIA,8BACE,SACA,gBAGF,+BACE,gBAUA,sEAEE,WACA,sBAIJ,mBACE,WACA,YACA,WAGF,uBACE,WAEA,6BACE,gBAIJ,iBACE,SAGF,cACE,sBAIJ,oBACE,WAEA,2BACE,UACA,YAKF,yBACE,YAGF,wBACE,gBACA,SACA,UAGF,wBACE,WvDvhCY,QuDwhCZ,sBACA,MvDvhCO,KuDwhCP,iBACA,YACA,aACA,kBAOF,mBACE,aAGF,sBACE,aACA,UACA,WAGF,oBACE,aAIA,wBACE,SACA,aACA,WvDhjCG,QuDojCL,8BACE,uBACA,mBACA,mBACA,qBACA,mBACA,mBACA,gBACA,uBACA,gBAIF,qCACE,wBACA,UACA,gBACA,cACA,gBAGF,yBACE,4BACA,gBACA,mBACA,yBAGF,2BACE,gBAGF,uCACE,gBACA,cACA,yBACA,WACA,YAGF,yBACE,iBACA,oBACA,mBACA,6BAGF,yBACE,6BAEA,+DACE,cACA,mBACA,uBACA,kBACA,WAQJ,0BACE,WvDpnCG,QuDunCL,6BACE,iBAIJ,uDAEE,mBAGF,uDAEE,iBAGF,2BACE,mBAIA,4BACE,WACA,sBAEA,qEACE,WACA,sBAIJ,4BACE,WACA,sBAMJ,2BACE,YACA,qBAIF,qBACE,gBAGF,kCACE,YACA,yBACA,gBAGF,0BACE,6BAIA,gGAGE,yBACA,YAIJ,0CAEE,yBACA,YAIA,kHAGE,yBACA,mBAIJ,sDAEE,yBACA,mBAGF,iCACE,kBACA,WACA,YACA,eACA,iBACA,kBAGF,oCACE,WAGF,gBACE,iBAEA,wBACE,aAKN,oBACE,eAGF,kBACE,gBAGF,gBACE,mBACA,iBAGF,yBACE,kBAIA,qBACE,kBACA,eAGF,wBACE,kBACA,WACA,sBACA,YAIJ,SACE,WACA,mBAGF,cACE,kBACA,eACA,eACA,kBACA,kBACA,cACA,gBACA,6BACA,4BAEA,uDAGE,UACA,kBAGF,gCACE,kBAEA,sEAEE,2BAIJ,wBACE,WACA,cAGF,yBACE,cAKF,8BACE,UACA,WACA,UAGF,uBACE,iBAGF,yBACE,aAIJ,yBACE,gBAGF,mBACE,eACA,SACA,WACA,WvD/zCQ,QuDk0CV,eACE,cACA,cAGE,sIAIE,WACA,sBAIJ,sBACE,WACA,sBAIJ,aACE,kBACA,sBACA,YACA,gBACA,YACA,aAGF,eACE,YACA,aAGF,iBACE,YAGF,qBACE,kBAGF,YACE,SACA,SAGF,aACE,UACA,SAGF,UACE,UACA,QAGF,YACE,UACA,SAGF,SACE,UACA,SAGF,YACE,UACA,SAGF,UACE,UACA,UAGF,WACE,kBACA,YACA,iBACA,kBACA,UAGF,kBACE,4BAIA,6BACE,cACA,gBAKF,cACE,gBAGF,yBACE,cACA,gBAEA,mCACE,eAKN,kBACE,cACA,WACA,iBACA,eAGF,MACE,kBAGF,WACE,YAGF,MACE,gBACA,WACA,iBACA,YACA,aACA,kBAGF,UAIE,OAHS,KAIT,MAHQ,KAIR,iBACA,iBACA,kBACA,yCAGF,SACE,2BACA,sBACA,aACA,iCACA,8BACA,sCACA,0BACA,4BACA,2BAEA,WACE,2BACA,sBAIJ,OACE,QACA,kBACA,MAGF,SACE,sCACA,eACA,YACA,gBACA,WAEA,eACE,sBAIJ,eACE,sBAGF,OACE,gBACA,sBACA,kBACA,gBACA,QACA,eACA,yBAEA,iBACE,4BAEA,uBACE,gBACA,eAGF,uBACE,eAKN,eACE,6BACA,0BACA,eACA,eACA,iBACA,kBACA,kBAEA,qBACE,gBAIJ,YACE,mBACA,sBACA,cAEA,eACE,SACA,UACA,sBACA,mBAIJ,sBACE,WACA,qBACA,kBACA,YACA,uBAKE,+BACE,gBACA,SACA,SACA,kBACA,gBACA,iBAEA,qCACE,gBACA,WACA,eAIJ,mCACE,gBACA,WACA,eAIJ,mBACE,cAIJ,OACE,SACA,UACA,kBAGE,8EAGE,gBACA,YACA,SACA,UAIJ,kBACE,gBACA,sBACA,eACA,kBAEA,oDAEE,UAIJ,uBACE,WACA,eACA,iBAGF,iBACE,kBACA,kBACA,UAGF,yBACE,0EACA,oBAGF,0BACE,oEACA,YAGF,kBACE,gBACA,WACA,kBAIJ,oBACE,6DACA,kBAMA,qCACE,kBAGF,sBACE,gBAEA,yBACE,YACA,oBAGF,yBACE,wBAIJ,sBACE,cAIJ,uBACE,gBACA,YACA,SACA,UAGF,mBACE,cAEA,sBACE,iBAEA,yBACE,wBAKN,UACE,WACA,yBAGF,gBACE,cAGF,wBACE,wBAGF,kCACE,WAGF,cACE,YAIA,oBACE,mBAGF,wBACE,YACA,iBAKF,yCACE,eAEA,oDACE,2BAIJ,kCACE,eAIJ,kBACE,eAEA,qBACE,4BAKF,mBACE,WAGF,mBACE,iBAIJ,WACE,eAGF,YACE,kBAIF,uBACE,WACA,eACA,SACA,OACA,YAGF,SACE,YAGF,aACE,kBACA,kBACA,YAEA,wBACE,aAGF,uBACE,sBAGF,sBACE,kBACA,gBACA,0BACA,gBAEA,2BACE,sBAGF,gCACE,eAEA,4CACE,qBACA,4BACA,4BAGF,wCACE,aAMJ,kEAEE,cACA,qBAKF,0DAEE,cACA,qBAIJ,4BACE,cACA,qBAGF,4FAGE,eAGF,8GAGE,gBAIA,qCACE,gBAGF,4BACE,iBAGF,0DAEE,kBACA,YAIJ,sBACE,kBACA,gBACA,oBACA,0BACA,gBACA,iBAEA,yCACE,gBACA,WAEA,0DACE,gBACA,WAGF,yDACE,WAGF,kDACE,qBAGF,4DACE,kBAGF,qDACE,cAKN,gDAEE,kBACA,sCACA,YACA,yBAGF,sBACE,6BACA,oBAEA,+CACE,kBAGF,8BACE,YACA,kBACA,YAKF,kCACE,YACA,kBACA,YACA,SAGF,mCACE,WACA,WACA,gBAKF,oCACE,WACA,iBAGF,uCACE,YAGF,sCACE,aAIA,8HAGE,YACA,WAIJ,sCACE,WAGF,uCACE,mBACA,uBACA,gBAGF,sCACE,cACA,gBACA,qBAGF,oIAGE,aAIA,2JAIE,aAKF,4FAEE,qBAIJ,4FAEE,qBAIA,6FAEE,qBAKF,+FAEE,qBAKF,iGAEE,qBAIJ,sCACE,kBACA,YACA,gBACA,sBACA,2BAGF,qFAEE,SACA,qBAGF,iFAEE,aAGF,0CACE,qBAGF,4BACE,gBAIA,gDACE,aAGF,sDACE,cAIJ,sCACE,cACA,MACA,gBACA,WACA,kBAEA,6CACE,gBAIJ,+CACE,yBACA,0BAIJ,0BACE,kBAGF,wBACE,YACA,WACA,kBACA,MAIA,gBACA,aACA,eACA,YAGF,mBACE,kBACA,UACA,YACA,gBACA,UACA,MACA,2BACA,YACA,oBAEA,wBACE,QACA,kCAKN,mEAEE,gBAIA,8CACE,kBACA,oBACA,mBACA,6BAEA,qDACE,aACA,sBAIJ,sDACE,SACA,gBAKF,+DAEE,aAKF,wCACE,qBAIA,wCACE,qBAGF,+EAEE,aAIJ,sCACE,aAGF,sBACE,iBAGF,kEAEE,cAGF,sKAIE,aAIA,oHAEE,aAGF,iCACE,WACA,cACA,WAIJ,2EAEE,WACA,cACA,WAGF,8BACE,WAGF,gGAGE,YAGF,oCACE,SAOF,2BACE,sCAEA,+BACE,sCAIJ,6FAGE,UAGF,qBACE,YACA,YACA,WACA,mBACA,mBAGF,6BACE,YAMJ,kBACE,aACA,eACA,MACA,OACA,WACA,0BACA,YACA,YACA,WACA,eACA,kBACA,gBAGF,uBACE,aACA,eACA,SACA,WACA,YACA,sBACA,mBACA,kBACA,4BAEA,qDACE,sBACA,kBACA,aACA,gBACA,WACA,gBACA,mBACA,yBACA,mCAIJ,yCACE,sBACA,kBACA,aACA,gBACA,WACA,gBACA,mBACA,yBACA,mCAIA,2BACE,aACA,gBACA,kBACA,qBAEA,8BACE,iBACA,6BACA,cACA,gBAEA,wCACE,YAMJ,yEACE,YACA,iBACA,eAGF,mEACE,YACA,iBACA,eACA,aAGF,oKAEE,iCACA,eAKN,mEACE,iCACA,eAGF,sBACE,cAEA,2CACE,eACA,0BAIJ,iBACE,eACA,QACA,SACA,UACA,gBACA,iBACA,YACA,yBACA,mBACA,YAEA,uDACE,YACA,iBACA,eAIJ,sBACE,qBACA,2BAGF,eACE,qBACA,8CACA,kCACA,4BACA,UACA,WACA,YAGF,WACE,eAOE,0CACE,WACA,aAGF,iCACE,WAGF,2DACE,YAIJ,gFAIE,yBAGF,iFAIE,0BAGF,mFAIE,4BAGF,oFAIE,6BAGF,gBACE,UACA,kBAEA,oCACE,kBACA,YACA,6BAEA,2CACE,sBAIJ,mCACE,kBAGF,sCACE,mBACA,0BAEA,6CACE,wBACA,sBACA,WAIJ,qDACE,kBAQJ,8CACE,aAGF,0GAEE,eAGF,iDACE,gBAGF,iDACE,UAGF,qDACE,WAOJ,YACE,gBAGF,0CACE,iBACE,gBAGF,6BACE,WAGF,iBACE,aAGF,SACE,qBAGF,gBACE,aAGF,mBACE,SAGF,eACE,cAGF,eACE,gBAEA,4BACE,eAIJ,8BACE,UAGF,6BACE,WACA,aAGF,WACE,UACA,qBAGF,yBACE,YAIJ,gBACE,eACA,sBACA,YACA,yBACA,YAGF,cACE,iBAGF,eACE,aACA,aACA,kBACA,yBACA,WACA,yBACA,oBAGF,iBACE,wBAGF,oIAKE,iBACA,eACA,cAGF,uBACE,WAIF,gBACE,iBACA,kBjDtkFE,0BiD2kFF,UACE,gBAGF,qCAEE,iBAIJ,iBACE,gBClpFF,cACE,eACA,cAIA,eACE,aACA,kBAGF,qBACE,WAGF,kBACE,WAEA,qBACE,sBACA,UACA,cACA,iBAKF,6BACE,YACA,eACA,sBAGF,2BACE,cACA,kBACA,WAGF,yBACE,sBAIJ,6BACE,SACA,kBAIJ,6BACE,WACA,YACA,iBAMF,WACE,kBAEA,aACE,kBACA,SACA,aCjEJ,mBACE,YAGF,YACE,aACA,eACA,aACA,gBACA,kBAGF,UACE,iBAGF,mBACE,WAGF,iBACE,mBACA,aACA,iBAEA,yBACE,aAGF,kCACE,WC/BJ,wBACE,WACA,YACA,kBACA,MACA,OACA,UACA,mBAGF,gBACE,W1DFgB,Q0DGhB,M1DNW,K0DOX,M1DVW,M0DWX,gBACA,eACA,MACA,OACA,aACA,4BACA,YAEA,mBACE,SAGF,qBACE,SACA,UACA,eAIA,sEAEE,WAKF,iCACE,kBACA,aACA,kBACA,2BAGF,4BACE,iB1DvCY,Q0DwCZ,aAGF,0EAEE,kBACA,mBAIJ,4DAEE,YAGF,qOAOE,kBACA,mBACA,oBACA,SAGF,sCACE,SAGF,uHAGE,UAGF,oEAEE,gBACA,iBAIJ,qCACE,cACA,cAGF,qBACE,SACA,gBACA,WACA,WACA,kBAGF,gCACE,gBACA,cACA,SACA,SAGF,0BACE,gBACA,kBAEA,iCACE,gDACA,0BACA,kBACA,sBACA,0BACA,WACA,gBACA,aACA,UACA,iBAIJ,6BACE,WACA,gBACA,gBACA,kBACA,YAEA,+CACE,kBACA,YACA,mBAGF,+CACE,+BAKF,uBACE,M1DlJS,K0DmJT,eAEA,6BACE,0BAIJ,wBACE,gBAEA,uEAEE,M1DzJe,K0D0Jf,iB1DvJoB,K0D0JtB,wCACE,kBACA,YAGF,yCACE,aACA,kBACA,YAGF,uDACE,cACA,WAEA,6DACE,UAKN,wBACE,WACA,UACA,qBACA,SAEA,2BACE,kBAIJ,wBACE,mBACA,WACA,gBAGF,yBACE,SAGF,uBACE,cAGF,+BACE,kBACA,YACA,aACA,eACA,gBACA,WAEA,sCACE,UAGF,kEAEE,YACA,aACA,eACA,eACA,kBACA,YACA,WACA,UAGF,iCACE,2BACA,6BACA,kBACA,UAEA,uCACE,cAIJ,iCACE,cACA,aACA,SACA,WACA,2BAGF,kEAEE,kBACA,SACA,QACA,WAGF,mCACE,UAIA,gFAEE,SAGF,0CACE,SAIJ,mCACE,kBACA,WACA,OACA,iBAKF,gCACE,gBAIA,oDAEE,kBACA,aACA,kBAKN,qCACE,2BACA,kBACA,mBAEA,sDAEE,2BAIJ,2CACE,yBAIJ,eACE,mBACA,kBACA,mBACA,2BAEA,qBACE,eAGF,kCACE,SACA,iBACA,WACA,eAGF,8BACE,SACA,cAKJ,wBACE,UACA,YACA,sBACA,kBACA,eACA,MACA,K1D5VW,M0D6VX,YAGF,0BACE,WACA,YACA,iBACA,gBACA,WACA,iBACA,eACA,MACA,K1DzWW,M0D0WX,kBACA,eACA,YACA,yBACA,8CACA,sBAGF,2BACE,2BAEA,yCACE,0CAIJ,qBACE,YACA,mBAGF,gBACE,eACA,gBACA,kBAEA,2BACE,WACA,gBACA,cAGF,6BACE,eACA,sBACA,mBACA,eAIA,8CACE,gBAGF,8BACE,kBACA,SACA,UACA,gBACA,gBACA,gBACA,gBACA,sBACA,0BACA,6BACA,SACA,SACA,QACA,aACA,YAGF,oCACE,cAGF,8BACE,mBAEA,kCACE,mBAGF,oCACE,mBAIJ,6BACE,cACA,kBAEA,mDACE,WACA,WACA,oBCrbR,WACE,yBACA,WAGF,oBACE,kBACA,cAGF,cACE,kBACA,WACA,cAGF,QACE,sBACA,WAGF,gBACE,qBACA,gBACA,gBAEA,kBACE,2BAIJ,cACE,sBACA,WACA,yBACA,sBACA,UACA,iBAEA,sBACE,qGAIJ,SACE,kBACA,YACA,YACA,iBAGF,WACE,+EACA,2BACA,kBACA,YACA,YACA,iBAGF,WACE,gBACA,WACA,eAEA,iBACE,sBACA,WACA,2BACA,eAIJ,aACE,oCACA,WACA,eAEA,mBACE,sBACA,WACA,2BACA,eAIJ,eACE,mBACA,kBACA,sBACA,WACA,UACA,sBACA,aAGF,6BACE,SAGF,YACE,cACA,WACA,aAGF,eACE,eACA,WACA,mBACA,qBACA,gBACA,iBACA,gBACA,gBACA,mEACA,sBAEA,qBACE,eACA,WACA,gBACA,gBACA,iBACA,mBACA,qBACA,sBACA,gBAIJ,OACE,mBACA,WAGF,YACE,iBACA,kBACA,UAGF,YACE,mBACA,iBACA,kBACA,eACA,UACA,WACA,qGAGF,WACE,mBACA,yBACA,WACA,sDACA,eACA,kBACA,iBACA,iBACA,kBACA,UACA,qBAEA,iBACE,mBACA,WACA,sBACA,eACA,iBACA,kBACA,kBACA,iBACA,UACA,qBAIJ,gBACE,qGACA,kBACA,UAEA,sBACE,mBACA,WACA,sBACA,eACA,kBACA,iBACA,UACA,qBAIJ,MACE,sBACA,iBACA,sBACA,WACA,wBAGF,WACE,YACA,qBACA,sBACA,eAEA,iBACE,UACA,sBACA,gBACA,WACA,qBACA,sBACA,eAKJ,KACE,WACA,YAGF,QACE,+DAGF,QACE,8DAGF,QACE,2DAGF,QACE,4DAGF,QACE,+DAGF,QACE,sDAGF,QACE,qDAGF,QACE,uDAGF,SACE,kBACA,sBACA,WAGF,iBACE,yBACA,WACA,kBACA,iBACA,SACA,UACA,sDACA,wBACA,2BACA,4BACA,2BACA,YACA,YACA,WACA,eAEA,yCAEE,cACA,WACA,mBACA,YACA,uBAGF,yBACE,cACA,WACA,WACA,YACA,UAIA,yBACE,iBAGF,wBACE,gBAMJ,iDAEE,yBACA,sBACA,WAEA,6DACE,sBACA,sBACA,WAIJ,eACE,sBACA,sBACA,WAIJ,YACE,WACA,kBACA,YACA,yBACA,sBAGF,oBACE,kBACA,WACA,UACA,YAGF,uCAEE,kBACA,WACA,SACA,YACA,YAGF,kBACE,mDACA,iBAEA,wBACE,SAIJ,OACE,eACA,SACA,QACA,YACA,iBACA,aACA,cACA,iBACA,YAIA,UACE,eACA,qBACA,SACA,QACA,WACA,4BACA,kEACA,sBACA,cACA,YAEA,gBACE,cACA,qEACA,sBAIJ,iBACE,mEACA,YAEA,uBACE,sEAKN,yBACE,yBACA,0BAGF,eACE,kBACA,eACA,yBAEA,qBACE,sBAIJ,IACE,gBAEA,0BACE,UAIJ,eACE,gBACA,eAGF,WACE,WACA,eACA,WACA,YACA,mBACA,sBACA,gBACA,WACA,YAEA,iBACE,YACA,QAGF,iBACE,aAGF,aACE,cACA,WACA,gBACA,gBAGF,gCAEE,WAIJ,YACE,6BACA,kBACA,mBACA,WACA,gBACA,YACA,iBAGF,gBACE,WACA,kBACA,OC5eF,YACE,aACA,cAGF,iCACE,WAGF,4BACE,eACA,eACA,yBAGF,iCACE,yBACA,YAIA,uCAEE,WAGF,iBACE,WAGF,gBACE,YAGF,qBACE,YAGF,iBACE,WAGF,mBACE,WAGF,gBACE,UAGF,mBACE,WAGF,mBACE,WAGF,kBACE,WAGF,eACE,WAIJ,0BACE,qBAGF,0BACE,qBACA,YACA,WACA,gBAGF,kBACE,aAGF,yBACE,YACA,oBAEA,8BACE,sBACA,iBCxFJ,eACE,kBACA,WACA,sDACA,cAIF,aACE,gBAGF,cACE,gBAGF,eACE,mBAGF,cACE,kBAGF,yIASE,iBACA,kBAIF,kQAaE,kBACA,gBAGF,mBACE,MAEA,UACA,mBAGF,oBACE,SAEA,UACA,sBAGF,mBACE,QAEA,SACA,iBAEA,oCACE,YACA,eACA,oBACA,UACA,gBAIJ,gKAQE,OAEA,SACA,gBAGF,sBACE,kBACA,mBAGF,oBACE,gBACA,eACA,kBAGF,qBACE,mBACA,eACA,kBAGF,oBACE,kBACA,eACA,kBAGF,uBACE,eACA,kBAGF,wKAQE,eACA,iBACA,kBAGF,wBACE,gBACA,WAGF,yBACE,cACA,WAIA,0BACE,gBACA,mBACA,iBACA,kBACA,sCACA,sBACA,kBACA,gBAGF,2BACE,sCACA,sBACA,kBACA,gBAKF,uBACE,sBAIA,2DAEE,eAKN,2CACE,6BAIA,uCACE,sBACA,YAGF,+BACE,QACA,SACA,qBACA,wBACA,sBACA,uBACA,uBACA,0BACA,wBACA,yBAIJ,cACE,MACA,OACA,oBACA,gBAGF,4BACE,sBACA,gBAGF,iFAGE,sBACA,cACA,mBACA,gCACA,YAGF,oBACE,gBACA,UAGF,+BACE,sBACA,kBAGF,gCACE,YACA,YAGF,cAEE,kBAGF,sBAEE,kBACA,QACA,qBAIA,wBACE,eACA,iBACA,kBACA,WAEA,sDACE,gCAIJ,4BACE,kBACA,sCChRJ,MACE,SACA,iBACA,qBACA,WACA,YAGF,eACE,WACA,YAGF,cACE,yDAGF,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BACE,iBACA,kBACA,iBnEwBO,QmEvBP,anEyBO,QmExBP,mBACA,2BACA,4BAEA,4BACE,SACA,iBnEyBM,QmExBN,gBC/BJ,MACE,gBACA,oBAEA,8BACE,cAIJ,aACE,WpEoCO,QoEnCP,kBACA,UACA,aACA,kBACA,sBACA,iBACA,WAGF,4BACE,gBACA,WACA,SACA,SAIA,qBACE,gBACA,gBACA,mBACA,kBACA,+BAEA,6CACE,iBAIJ,4BACE,cACA,yBACA,iBACA,oBACA,iBACA,eAGF,0BACE,aACA,iBCnDJ,mBACE,oBACA,crEkJgC,EqEjJhC,iBrEkJqB,KqE/InB,wDACE,atEo/C8B,MsEj/ChC,0CACE,SCTN,mBACE,iBAEA,uCACE,cACA,iBACA,kBACA,iBCTJ,OACE,gBACA,4BAEA,qBACE,wBAIJ,eACE,WACA,sBACA,sBACA,kBAEA,qCACE,kBAIJ,eACE,WACA,yBACA,sBACA,kBAEA,qCACE,kBAIJ,cACE,UACA,sBACA,sBACA,iBAEA,mCACE,iBCrCF,2BACE,kBACA,gBAGF,gCACE,kBACA,YACA,UAUF,uNACE,cACA,kBCrBJ,cACE,mDAGF,cACE,iBzEqCc,Q0E1ChB,aACE,MACE,aAIF,iBAIE,WACA,sBACA,eAIF,OACE,WACA,qBAIF,IACE,SAIF,YAGE,uBACA,sBAGF,MACE,yBACA,oBAGF,MACE,yBACA,oBACA,uBACA,gBAGF,MAEE,aAGF,SACE,iBACA,yBACA,uBAIF,cACE,kBACA,OACA,MACA,UACA,WAGF,UACE,WACA,sBAKF,qCAKE,aAKA,4CACE,gBAEA,+CACE,gBAKJ,6CACE,mBAEA,gDACE,mBAKN,kBACE","file":"theme.css"} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.rtl.css b/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.rtl.css deleted file mode 100644 index efc621d..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/original/css/theme.rtl.css +++ /dev/null @@ -1,2 +0,0 @@ -:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 13, 110, 253;--bs-secondary-rgb: 108, 117, 125;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 0, 0, 0;--bs-body-bg-rgb: 245, 245, 245;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: sans-serif;--bs-body-font-size: 0.82rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #000;--bs-body-bg: #f5f5f5}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:bold;line-height:1.2}h1,.h1{font-size:140%}h2,.h2{font-size:120%}h3,.h3{font-size:1rem}h4,.h4{font-size:1.23rem}h5,.h5{font-size:1.025rem}h6,.h6{font-size:0.82rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:blue;text-decoration:none}a:hover{color:red;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr ;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.025rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-right:0;list-style:none}.list-inline{padding-right:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.025rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-left:var(--bs-gutter-x, 0.75rem);padding-right:var(--bs-gutter-x, 0.75rem);margin-left:auto;margin-right:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-left:calc(-0.5*var(--bs-gutter-x));margin-right:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #000;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #000;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #000;--bs-table-hover-bg: #cfc;width:100%;margin-bottom:1rem;color:#000;vertical-align:top;border-color:#dee2e6}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:2px solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(even)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #cfe2ff;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:#000;border-color:#bacbe6}.table-secondary{--bs-table-bg: #e2e3e5;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:#000;border-color:#cbccce}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.025rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.7175rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:0.82rem;font-weight:400;line-height:1.5;color:#000;background-color:#f5f5f5;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:0}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#000;background-color:#f5f5f5;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#000;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#000;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#000;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#000;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:0}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:0}.form-select{display:block;width:100%;padding:.375rem .75rem .375rem 2.25rem;-moz-padding-start:calc(0.75rem - 3px);font-size:0.82rem;font-weight:400;line-height:1.5;color:#000;background-color:#f5f5f5;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-left:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #000}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-right:.5rem;font-size:0.7175rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;font-size:1.025rem;border-radius:.3rem}.form-check{display:block;min-height:1.23rem;padding-right:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:right;margin-right:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#f5f5f5;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.form-check-input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-right:2.5em}.form-switch .form-check-input{width:2em;margin-right:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:right center;border-radius:2em}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:left center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #f5f5f5,0 0 0 .25rem rgba(13,110,253,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #f5f5f5,0 0 0 .25rem rgba(13,110,253,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#0d6efd;border:0;border-radius:1rem;-webkit-appearance:none;appearance:none}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;-moz-appearance:none;appearance:none}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;right:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:100% 0}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:0.82rem;font-weight:400;line-height:1.5;color:#000;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:0}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.7175rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:0}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-left:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-left:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.7175rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:0}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-left:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-left:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.5;color:#000;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .75rem;font-size:0.82rem;border-radius:0}.btn:hover{color:#000;text-decoration:none}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65}.btn-primary{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-primary:hover{color:#fff;background-color:#0b5ed7;border-color:#0a58ca}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#fff;background-color:#0b5ed7;border-color:#0a58ca;box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0a58ca;border-color:#0a53be}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(49,132,253,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5c636a;border-color:#565e64}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#fff;background-color:#5c636a;border-color:#565e64;box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#565e64;border-color:#51585e}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(130,138,145,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-success{color:#fff;background-color:#198754;border-color:#198754}.btn-success:hover{color:#fff;background-color:#157347;border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;border-color:#146c43;box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-info:hover{color:#000;background-color:#31d2f2;border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;border-color:#25cff2;box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#000;background-color:#ffca2c;border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;border-color:#ffc720;box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#bb2d3b;border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;border-color:#b02a37;box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;border-color:#f9fafb;box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;border-color:#212529}.btn-dark:hover{color:#fff;background-color:#1c1f23;border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;border-color:#1a1e21;box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;border-color:#212529}.btn-outline-primary{color:#0d6efd;border-color:#0d6efd}.btn-outline-primary:hover{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#fff;background-color:#0d6efd;border-color:#0d6efd}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,110,253,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#0d6efd;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(108,117,125,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#6c757d;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:blue;text-decoration:none}.btn-link:hover{color:red;text-decoration:underline}.btn-link:focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden}.collapsing.collapse-horizontal{width:0;height:auto}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:0 0;margin:0;font-size:0.82rem;color:#000;text-align:right;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:0}.dropdown-menu[data-bs-popper]{top:100%;right:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{left:0;right:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{left:0;right:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropend .dropdown-menu[data-bs-popper]{top:0;left:auto;right:100%;margin-top:0;margin-right:.125rem}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;left:100%;right:auto;margin-top:0;margin-left:.125rem}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:0 0;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.dropdown-item:last-child{border-bottom-left-radius:0;border-bottom-right-radius:0}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;text-decoration:none;background-color:#e9ecef}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0d6efd}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:0 0;margin-bottom:0;font-size:0.7175rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:0 0;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#0d6efd}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-right:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-right:0}.dropstart .dropdown-toggle-split::before{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-top-left-radius:0}.nav{display:flex;flex-wrap:wrap;padding-right:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:blue}.nav-link:hover,.nav-link:focus{color:red;text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid rgba(0,0,0,0)}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-right-radius:0;border-top-left-radius:0}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#d5d5d5 #d5d5d5 #f5f5f5;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:blue;background-color:#e5e5e5;border-color:#d5d5d5 #d5d5d5 #f5f5f5}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:0}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0d6efd}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:0;padding-left:0;padding-bottom:0;padding-right:0}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.34625rem;padding-bottom:.34625rem;margin-left:1rem;font-size:1.025rem;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.025rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:0}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:2px;padding-right:2px}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:blue}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:blue}.navbar-light .navbar-nav .nav-link{color:blue}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:red}.navbar-light .navbar-nav .nav-link.disabled{color:blue}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:blue}.navbar-light .navbar-toggler{color:blue;border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%2300f' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:blue}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:blue}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#e5e5e5;background-clip:border-box;border:1px solid #000;border-radius:0}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-right-radius:0;border-top-left-radius:0}.card>.list-group:last-child{border-bottom-width:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:.5em .5em}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-right:.5em}.card-header{padding:.25em .5em;margin-bottom:0;background-color:#d3dce3;border-bottom:1px solid #000}.card-header:first-child{border-radius:0 0 0 0}.card-footer{padding:.25em .5em;background-color:#d3dce3;border-top:1px solid #000}.card-footer:last-child{border-radius:0 0 0 0}.card-header-tabs{margin-left:-0.25em;margin-bottom:-0.25em;margin-right:-0.25em;border-bottom:0}.card-header-pills{margin-left:-0.25em;margin-right:-0.25em}.card-img-overlay{position:absolute;top:0;left:0;bottom:0;right:0;padding:1rem;border-radius:0}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-right-radius:0;border-top-left-radius:0}.card-img,.card-img-bottom{border-bottom-left-radius:0;border-bottom-right-radius:0}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-right:0;border-right:0}.card-group>.card:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-right-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:.375rem .75rem;font-size:0.82rem;color:blue;text-align:right;background-color:#f5f5f5;border:0;border-radius:0;overflow-anchor:none}.accordion-button:not(.collapsed){color:blue;background-color:#e5e5e5;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2300f'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-right:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%2300f'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#f5f5f5;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-right-radius:0;border-top-left-radius:0}.accordion-item:first-of-type .accordion-button{border-top-right-radius:0;border-top-left-radius:0}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-item:last-of-type .accordion-collapse{border-bottom-left-radius:0;border-bottom-right-radius:0}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-left:0;border-right:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-right:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:right;padding-left:.5rem;color:inherit;content:var(--bs-breadcrumb-divider, "»")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-right:0;list-style:none}.page-link{position:relative;display:block;color:blue;background-color:#fff;border:1px solid #000}.page-link:hover{z-index:2;color:red;text-decoration:none;background-color:#e9ecef;border-color:#000}.page-link:focus{z-index:3;color:red;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25)}.page-item:not(:first-child) .page-link{margin-right:-1px}.page-item.active .page-link{z-index:3;color:#fff;background-color:#0d6efd;border-color:#000}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#000}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-right-radius:0;border-bottom-right-radius:0}.page-item:last-child .page-link{border-top-left-radius:0;border-bottom-left-radius:0}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.025rem}.pagination-lg .page-item:first-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.7175rem}.pagination-sm .page-item:first-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:0}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:.2em;border:2px solid rgba(0,0,0,0);border-radius:0}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{position:absolute;top:0;left:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#084298;background-color:#cfe2ff;border-color:#b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{color:#41464b;background-color:#e2e3e5;border-color:#d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{color:#0f5132;background-color:#d1e7dd;border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;border-radius:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#000;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.375rem .75rem;color:#212529;background-color:inherit;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-right-radius:inherit;border-top-left-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:inherit}.list-group-item.active{z-index:2;color:#fff;background-color:#0d6efd;border-color:#0d6efd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-right-radius:0;border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-left-radius:0;border-bottom-right-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:0;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.modal{position:fixed;top:0;right:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transform:translate(0, -50px)}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:0;outline:0}.modal-backdrop{position:fixed;top:0;right:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:.4rem .75rem;border-bottom:1px solid #000;border-top-right-radius:0;border-top-left-radius:0}.modal-header .btn-close{padding:.2rem .375rem;margin:-0.2rem auto -0.2rem -0.375rem}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:.75rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.7rem;border-top:1px solid #000;border-bottom-left-radius:0;border-bottom-right-radius:0}.modal-footer>*{margin:.05rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}@-webkit-keyframes spinner-border{to{transform:rotate(-360deg)}}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-left-color:rgba(0,0,0,0);border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#0d6efd}.link-primary:hover,.link-primary:focus{color:#0a58ca}.link-secondary{color:#6c757d}.link-secondary:hover,.link-secondary:focus{color:#565e64}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:right !important}.float-end{float:left !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{right:0 !important}.start-50{right:50% !important}.start-100{right:100% !important}.end-0{left:0 !important}.end-50{left:50% !important}.end-100{left:100% !important}.translate-middle{transform:translate(50%, -50%) !important}.translate-middle-x{transform:translateX(50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-top-0{border-top:0 !important}.border-end{border-left:1px solid #dee2e6 !important}.border-end-0{border-left:0 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-right:1px solid #dee2e6 !important}.border-start-0{border-right:0 !important}.border-primary{border-color:#0d6efd !important}.border-secondary{border-color:#6c757d !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-3{margin-left:1rem !important;margin-right:1rem !important}.mx-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-5{margin-left:3rem !important;margin-right:3rem !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-left:0 !important}.me-1{margin-left:.25rem !important}.me-2{margin-left:.5rem !important}.me-3{margin-left:1rem !important}.me-4{margin-left:1.5rem !important}.me-5{margin-left:3rem !important}.me-auto{margin-left:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-right:0 !important}.ms-1{margin-right:.25rem !important}.ms-2{margin-right:.5rem !important}.ms-3{margin-right:1rem !important}.ms-4{margin-right:1.5rem !important}.ms-5{margin-right:3rem !important}.ms-auto{margin-right:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-left:0 !important;padding-right:0 !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-3{padding-left:1rem !important;padding-right:1rem !important}.px-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-5{padding-left:3rem !important;padding-right:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-left:0 !important}.pe-1{padding-left:.25rem !important}.pe-2{padding-left:.5rem !important}.pe-3{padding-left:1rem !important}.pe-4{padding-left:1.5rem !important}.pe-5{padding-left:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-right:0 !important}.ps-1{padding-right:.25rem !important}.ps-2{padding-right:.5rem !important}.ps-3{padding-right:1rem !important}.ps-4{padding-right:1.5rem !important}.ps-5{padding-right:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:140% !important}.fs-2{font-size:120% !important}.fs-3{font-size:1rem !important}.fs-4{font-size:1.23rem !important}.fs-5{font-size:1.025rem !important}.fs-6{font-size:0.82rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:right !important}.text-end{text-align:left !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:0 !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:0 !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-right-radius:0 !important;border-top-left-radius:0 !important}.rounded-end{border-top-left-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom{border-bottom-left-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-start{border-bottom-right-radius:0 !important;border-top-right-radius:0 !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:right !important}.float-sm-end{float:left !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-left:0 !important;margin-right:0 !important}.mx-sm-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-sm-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-sm-3{margin-left:1rem !important;margin-right:1rem !important}.mx-sm-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-sm-5{margin-left:3rem !important;margin-right:3rem !important}.mx-sm-auto{margin-left:auto !important;margin-right:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-left:0 !important}.me-sm-1{margin-left:.25rem !important}.me-sm-2{margin-left:.5rem !important}.me-sm-3{margin-left:1rem !important}.me-sm-4{margin-left:1.5rem !important}.me-sm-5{margin-left:3rem !important}.me-sm-auto{margin-left:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-right:0 !important}.ms-sm-1{margin-right:.25rem !important}.ms-sm-2{margin-right:.5rem !important}.ms-sm-3{margin-right:1rem !important}.ms-sm-4{margin-right:1.5rem !important}.ms-sm-5{margin-right:3rem !important}.ms-sm-auto{margin-right:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-left:0 !important;padding-right:0 !important}.px-sm-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-sm-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-sm-3{padding-left:1rem !important;padding-right:1rem !important}.px-sm-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-sm-5{padding-left:3rem !important;padding-right:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-left:0 !important}.pe-sm-1{padding-left:.25rem !important}.pe-sm-2{padding-left:.5rem !important}.pe-sm-3{padding-left:1rem !important}.pe-sm-4{padding-left:1.5rem !important}.pe-sm-5{padding-left:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-right:0 !important}.ps-sm-1{padding-right:.25rem !important}.ps-sm-2{padding-right:.5rem !important}.ps-sm-3{padding-right:1rem !important}.ps-sm-4{padding-right:1.5rem !important}.ps-sm-5{padding-right:3rem !important}.text-sm-start{text-align:right !important}.text-sm-end{text-align:left !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:right !important}.float-md-end{float:left !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-left:0 !important;margin-right:0 !important}.mx-md-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-md-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-md-3{margin-left:1rem !important;margin-right:1rem !important}.mx-md-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-md-5{margin-left:3rem !important;margin-right:3rem !important}.mx-md-auto{margin-left:auto !important;margin-right:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-left:0 !important}.me-md-1{margin-left:.25rem !important}.me-md-2{margin-left:.5rem !important}.me-md-3{margin-left:1rem !important}.me-md-4{margin-left:1.5rem !important}.me-md-5{margin-left:3rem !important}.me-md-auto{margin-left:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-right:0 !important}.ms-md-1{margin-right:.25rem !important}.ms-md-2{margin-right:.5rem !important}.ms-md-3{margin-right:1rem !important}.ms-md-4{margin-right:1.5rem !important}.ms-md-5{margin-right:3rem !important}.ms-md-auto{margin-right:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-left:0 !important;padding-right:0 !important}.px-md-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-md-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-md-3{padding-left:1rem !important;padding-right:1rem !important}.px-md-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-md-5{padding-left:3rem !important;padding-right:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-left:0 !important}.pe-md-1{padding-left:.25rem !important}.pe-md-2{padding-left:.5rem !important}.pe-md-3{padding-left:1rem !important}.pe-md-4{padding-left:1.5rem !important}.pe-md-5{padding-left:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-right:0 !important}.ps-md-1{padding-right:.25rem !important}.ps-md-2{padding-right:.5rem !important}.ps-md-3{padding-right:1rem !important}.ps-md-4{padding-right:1.5rem !important}.ps-md-5{padding-right:3rem !important}.text-md-start{text-align:right !important}.text-md-end{text-align:left !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:right !important}.float-lg-end{float:left !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-left:0 !important;margin-right:0 !important}.mx-lg-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-lg-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-lg-3{margin-left:1rem !important;margin-right:1rem !important}.mx-lg-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-lg-5{margin-left:3rem !important;margin-right:3rem !important}.mx-lg-auto{margin-left:auto !important;margin-right:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-left:0 !important}.me-lg-1{margin-left:.25rem !important}.me-lg-2{margin-left:.5rem !important}.me-lg-3{margin-left:1rem !important}.me-lg-4{margin-left:1.5rem !important}.me-lg-5{margin-left:3rem !important}.me-lg-auto{margin-left:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-right:0 !important}.ms-lg-1{margin-right:.25rem !important}.ms-lg-2{margin-right:.5rem !important}.ms-lg-3{margin-right:1rem !important}.ms-lg-4{margin-right:1.5rem !important}.ms-lg-5{margin-right:3rem !important}.ms-lg-auto{margin-right:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-left:0 !important;padding-right:0 !important}.px-lg-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-lg-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-lg-3{padding-left:1rem !important;padding-right:1rem !important}.px-lg-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-lg-5{padding-left:3rem !important;padding-right:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-left:0 !important}.pe-lg-1{padding-left:.25rem !important}.pe-lg-2{padding-left:.5rem !important}.pe-lg-3{padding-left:1rem !important}.pe-lg-4{padding-left:1.5rem !important}.pe-lg-5{padding-left:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-right:0 !important}.ps-lg-1{padding-right:.25rem !important}.ps-lg-2{padding-right:.5rem !important}.ps-lg-3{padding-right:1rem !important}.ps-lg-4{padding-right:1.5rem !important}.ps-lg-5{padding-right:3rem !important}.text-lg-start{text-align:right !important}.text-lg-end{text-align:left !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:right !important}.float-xl-end{float:left !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-left:0 !important;margin-right:0 !important}.mx-xl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xl-auto{margin-left:auto !important;margin-right:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-left:0 !important}.me-xl-1{margin-left:.25rem !important}.me-xl-2{margin-left:.5rem !important}.me-xl-3{margin-left:1rem !important}.me-xl-4{margin-left:1.5rem !important}.me-xl-5{margin-left:3rem !important}.me-xl-auto{margin-left:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-right:0 !important}.ms-xl-1{margin-right:.25rem !important}.ms-xl-2{margin-right:.5rem !important}.ms-xl-3{margin-right:1rem !important}.ms-xl-4{margin-right:1.5rem !important}.ms-xl-5{margin-right:3rem !important}.ms-xl-auto{margin-right:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-left:0 !important;padding-right:0 !important}.px-xl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-left:0 !important}.pe-xl-1{padding-left:.25rem !important}.pe-xl-2{padding-left:.5rem !important}.pe-xl-3{padding-left:1rem !important}.pe-xl-4{padding-left:1.5rem !important}.pe-xl-5{padding-left:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-right:0 !important}.ps-xl-1{padding-right:.25rem !important}.ps-xl-2{padding-right:.5rem !important}.ps-xl-3{padding-right:1rem !important}.ps-xl-4{padding-right:1.5rem !important}.ps-xl-5{padding-right:3rem !important}.text-xl-start{text-align:right !important}.text-xl-end{text-align:left !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:right !important}.float-xxl-end{float:left !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-left:0 !important;margin-right:0 !important}.mx-xxl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xxl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xxl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xxl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xxl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xxl-auto{margin-left:auto !important;margin-right:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-left:0 !important}.me-xxl-1{margin-left:.25rem !important}.me-xxl-2{margin-left:.5rem !important}.me-xxl-3{margin-left:1rem !important}.me-xxl-4{margin-left:1.5rem !important}.me-xxl-5{margin-left:3rem !important}.me-xxl-auto{margin-left:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-right:0 !important}.ms-xxl-1{margin-right:.25rem !important}.ms-xxl-2{margin-right:.5rem !important}.ms-xxl-3{margin-right:1rem !important}.ms-xxl-4{margin-right:1.5rem !important}.ms-xxl-5{margin-right:3rem !important}.ms-xxl-auto{margin-right:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-left:0 !important;padding-right:0 !important}.px-xxl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xxl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xxl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xxl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xxl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-left:0 !important}.pe-xxl-1{padding-left:.25rem !important}.pe-xxl-2{padding-left:.5rem !important}.pe-xxl-3{padding-left:1rem !important}.pe-xxl-4{padding-left:1.5rem !important}.pe-xxl-5{padding-left:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-right:0 !important}.ps-xxl-1{padding-right:.25rem !important}.ps-xxl-2{padding-right:.5rem !important}.ps-xxl-3{padding-right:1rem !important}.ps-xxl-4{padding-right:1.5rem !important}.ps-xxl-5{padding-right:3rem !important}.text-xxl-start{text-align:right !important}.text-xxl-end{text-align:left !important}.text-xxl-center{text-align:center !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}#page_content{margin:0 .5em}button.mult_submit,.checkall_box+label{text-decoration:none;color:blue;cursor:pointer}button.mult_submit:hover,button.mult_submit:focus{text-decoration:underline;color:red}.checkall_box+label:hover{text-decoration:underline;color:red}dfn{font-style:normal}dfn:hover{font-style:normal;cursor:help}a img{border:0}hr{color:#000;background-color:#000;border:0;height:1px}form{padding:0;margin:0;display:inline}textarea{overflow:visible}textarea.charField{width:95%}.pma-fieldset{margin-top:1em;border:#000 solid 1px;padding:.5em;background:#e5e5e5}.pma-fieldset .pma-fieldset{margin:.8em}.pma-fieldset legend{float:none;font-weight:bold;color:#444;background-color:rgba(0,0,0,0);width:initial;font-size:1em}button{display:inline}img,input,select,button{vertical-align:middle}.clearfloat{clear:both}.paddingtop{padding-top:1em}div.tools{border:1px solid #000;padding:.2em;margin-top:0;margin-bottom:.5em;border-top:0;text-align:left;float:none;clear:both}.pma-fieldset.tblFooters{margin-top:0;margin-bottom:.5em;border-top:0;text-align:left;float:none;clear:both}div.null_div{height:20px;text-align:center;font-style:normal;min-width:50px}.pma-fieldset .formelement{float:right;margin-left:.5em;white-space:nowrap}.pma-fieldset div[class=formelement]{white-space:normal}button.mult_submit{border:none;background-color:rgba(0,0,0,0)}td.condition,th.condition{border:1px solid #fc9}td.null{font-style:italic;color:#7d7d7d !important}table .valueHeader,table .value{text-align:left;white-space:normal}.value{font-family:monospace}img.lightbulb{cursor:pointer}.pdflayout{overflow:hidden;clip:inherit;background-color:#fff;display:none;border:1px solid #000;position:relative}.pdflayout_table{background:#d3dce3;color:#000;overflow:hidden;clip:inherit;z-index:2;display:inline;visibility:inherit;cursor:move;position:absolute;font-size:80%;border:1px dashed #000}.cm-sql-doc{text-decoration:none;border-bottom:1px dotted #000;color:inherit !important}.icon{image-rendering:-moz-crisp-edges;image-rendering:pixelated;vertical-align:middle;margin-right:.3em;background-repeat:no-repeat;background-position:center}.selectallarrow{margin-left:.3em;margin-right:.6em}.with-selected{margin-right:2em}#pma_errors,#pma_demo,#pma_footer{position:relative;padding:0 .5em}.confirmation{background-color:#ffc}.pma-fieldset.confirmation{border:.1em solid red}.pma-fieldset.confirmation legend{border-right:.1em solid red;border-left:.1em solid red;font-weight:bold;background-image:url("../img/s_really.png");background-repeat:no-repeat;background-position:97% 50% ;padding:.2em 25px .2em .2em}.error{background-color:#ffc;color:red}label.error{padding:3px;margin-right:4px}.new_central_col{width:100%}.tblcomment{font-size:70%;font-weight:normal;color:#009}.tblHeaders{font-weight:bold;color:#000;background:#d3dce3}div.tools,.tblFooters{font-weight:normal;color:#000;background:#d3dce3}.tblHeaders a:link,.tblHeaders a:active,.tblHeaders a:visited{color:blue}.tblHeaders a:hover{color:red}div.tools a:link,div.tools a:visited,div.tools a:active{color:blue}div.tools a:hover{color:red}.tblFooters a:link,.tblFooters a:active,.tblFooters a:visited{color:blue}.tblFooters a:hover{color:red}.disabled{color:#666}.disabled a:link,.disabled a:active,.disabled a:visited{color:#666}.disabled a:hover{color:#666;text-decoration:none}tr.disabled td,td.disabled{background-color:#ccc}.pre_wrap{white-space:pre-wrap}.pre_wrap br{display:none}div#resizer{width:600px;height:400px}div#querychart{float:right;width:600px}body#loginform{margin:0;margin-top:1em;text-align:center}body#loginform h1,body#loginform .h1,body#loginform a.logo{display:block;text-align:center}body#loginform div.container{text-align:right;width:30em;margin:0 auto}div.container.modal_form{margin:0 auto;width:30em;text-align:center;background:#fff;z-index:999}#login_form{text-align:right}#login_form .pma-fieldset.tblFooters{text-align:left}#login_form select#select_server{width:100%}div#modalOverlay{position:fixed;top:0;right:0;height:100%;width:100%;background:#fff;z-index:900}#login_form label{width:10em;font-weight:bolder}.commented_column{border-bottom:1px dashed #000}.column_attribute{font-size:70%}.column_name{font-size:80%;margin:5px 2px}.central_columns_navigation{padding:1.5% 0 !important}.message_errors_found{margin-top:20px}.repl_gui_skip_err_cnt{width:30px}.color_gray{color:gray}.max_height_400{max-height:400px}li.last.database{margin-bottom:15px !important}ul.tabs{font-weight:bold;list-style-type:none;margin:0;padding:0}div#dataDisplay input,div#dataDisplay select{margin:0;margin-left:.5em}div#dataDisplay th{line-height:2em}img.calendar{border:none}form.clock{text-align:center}div#tablestatistics table{float:right;margin-top:.5em;margin-bottom:.5em;margin-left:.5em;min-width:16em}#topmenucontainer{background:#fff;padding-left:1em;width:100%}#page_nav_icons{position:fixed;top:0;left:0;z-index:99;padding:.1rem 0}#page_settings_icon{cursor:pointer;display:none}#page_settings_modal,#pma_navigation_settings{display:none}#textSQLDUMP{width:95%;height:95%;font-family:monospace;font-size:110%}#TooltipContainer{position:absolute;z-index:99;width:20em;height:auto;overflow:visible;visibility:hidden;background-color:#ffc;color:#060;border:.1em solid #000;padding:.5em}#fieldset_add_user_login div.item{border-bottom:1px solid silver;padding-bottom:.3em;margin-bottom:.3em}#fieldset_add_user_login label{float:right;display:block;width:15em;max-width:100%;text-align:left;padding-left:.5em}#fieldset_add_user_login span.options{float:right;display:block;width:12em;max-width:100%;padding-left:.5em}#fieldset_add_user_login span.options #select_pred_username,#fieldset_add_user_login span.options #select_pred_hostname,#fieldset_add_user_login span.options #select_pred_password{width:100%;max-width:100%}#fieldset_add_user_login input{width:12em;clear:left;max-width:100%}#fieldset_add_user_login span.options input{width:auto}#fieldset_user_priv div.item{float:right;width:9em;max-width:100%}#fieldset_user_priv div.item div.item{float:none}#fieldset_user_priv div.item label{white-space:nowrap}#fieldset_user_priv div.item select{width:100%}#fieldset_user_global_rights .pma-fieldset,#fieldset_user_group_rights .pma-fieldset{float:right}#fieldset_user_global_rights>legend input{margin-right:2em}.linkElem:hover{text-decoration:underline;color:#235a81;cursor:pointer}h3#serverstatusqueries span,#serverstatusqueries.h3 span{font-size:60%;display:inline}div#serverStatusTabs{margin-top:1em}caption a.top{float:left}div#serverstatusquerieschart{float:right;width:500px;height:350px;margin-left:50px}div#serverstatus table tbody td.descr a,div#serverstatus table .tblFooters a{white-space:nowrap}div.liveChart{clear:both;min-width:500px;height:400px;padding-bottom:80px}div#chartVariableSettings{border:1px solid #ddd;background-color:#e6e6e6;margin-right:10px}table#chartGrid td{padding:3px;margin:0}table#chartGrid div.monitorChart{background:#ebebeb;border:none;min-width:1px}div.tabLinks{margin-right:.3em;float:right;padding:5px 0}div.tabLinks a,div.tabLinks label{margin-left:7px}div.tabLinks .icon{margin:-0.2em 0 0 .3em}.popupContent{display:none;position:absolute;border:1px solid #ccc;margin:0;padding:3px;box-shadow:-2px 2px 3px #666;background-color:#fff;z-index:2}div#logTable{padding-top:10px;clear:both}div#logTable table{width:100%}.smallIndent{padding-right:7px}div#profilingchart{width:850px;height:370px;float:right}#profilingchart .jqplot-highlighter-tooltip{top:auto !important;right:11px;bottom:24px}textarea#sqlquery{width:100%}textarea#sql_query_edit{height:7em;width:95%;display:block}#maincontainer{background-image:url("../img/logo_right.png");background-position:left bottom;background-repeat:no-repeat}#mysqlmaininformation,#pmamaininformation{float:right;width:49%}#maincontainer ul{list-style-type:disc;vertical-align:middle}#maincontainer li{margin:.2em 0}#full_name_layer{position:absolute;padding:2px;margin-top:-3px;z-index:801;border:solid 1px #888;background:#fff}#body_browse_foreigners{background:#d0dce0;margin:.5em .5em 0 .5em}#bodythemes{width:500px;margin:auto;text-align:center}#bodythemes img{border:.1em solid #000}#bodythemes a:hover img{border:.1em solid red}#selflink{clear:both;display:block;margin-top:1em;margin-bottom:1em;width:98%;margin-right:1%;border-top:.1em solid silver;text-align:left}#qbe_div_table_list,#qbe_div_sql_query{float:right}kbd{color:#000;background-color:rgba(0,0,0,0);box-shadow:none}code{font-size:1em;color:#000}code.php{display:block;padding-right:.3em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}code.sql{display:block;padding:.3em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}div.sqlvalidate{display:block;padding:.3em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}.result_query div.sqlOuter,div.sqlvalidate{border:#000 solid 1px;border-top:0;border-bottom:0;background:#e5e5e5}.result_query div.sqlOuter{text-align:right}#PMA_slidingMessage code.sql{border:#000 solid 1px;border-top:0;background:#e5e5e5}textarea#partitiondefinition{height:3em}.hide{display:none}#list_server{list-style-type:none;padding:0}div.upload_progress{width:400px;margin:3em auto;text-align:center}div.upload_progress_bar_outer{border:1px solid #000;width:202px;position:relative;margin:0 auto 1em;color:#000}div.upload_progress_bar_inner{background-color:#99c;width:0;height:12px;margin:1px;overflow:hidden;color:#000;position:relative}div.upload_progress_bar_outer div.percentage{position:absolute;top:0;right:0;width:202px}div.upload_progress_bar_inner div.percentage{top:-1px;right:-1px}div#statustext{margin-top:.5em}table#serverconnection_src_remote,table#serverconnection_trg_remote,table#serverconnection_src_local,table#serverconnection_trg_local{float:right}input[type=text].invalid_value,input[type=password].invalid_value,input[type=number].invalid_value,input[type=date].invalid_value{background:#fcc}select.invalid_value,.invalid_value{background:#fcc}.ajax_notification{top:0;position:fixed;margin-top:0;margin-left:auto;margin-bottom:0;margin-right:auto;padding:3px 5px;width:350px;background-color:gold;z-index:1100;text-align:center;display:block;right:0;left:0;background-image:url("../img/ajax_clock_small.gif");background-repeat:no-repeat;background-position:98%}#loading_parent{position:relative;width:100%}#popup_background{display:none;position:fixed;width:100%;height:100%;top:0;right:0;background:#000;z-index:1000;overflow:hidden}#create_table_form table.table-name td{vertical-align:middle}#tablestructure tbody label{margin:.3rem 0}#structure-action-links a{margin-left:1em}#addColumns input[type=radio]{margin:0;margin-right:1em}#addColumns input[type=submit]{margin-right:1em}#index_frm .index_info input[type=text],#index_frm .index_info select{width:100%;box-sizing:border-box}#index_frm .slider{width:10em;margin:.6em;float:right}#index_frm .add_fields{float:right}#index_frm .add_fields input{margin-right:1em}#index_frm input{margin:0}#index_frm td{vertical-align:middle}table#index_columns{width:100%}table#index_columns select{width:85%;float:left}#move_columns_dialog div{padding:1em}#move_columns_dialog ul{list-style:none;margin:0;padding:0}#move_columns_dialog li{background:#d3dce3;border:1px solid #aaa;color:#000;font-weight:bold;margin:.4em;padding:.2em;border-radius:2px}.config-form .card{margin-top:0}.config-form fieldset{margin-top:0;padding:0;clear:both}.config-form legend{display:none}.config-form fieldset p{margin:0;padding:.5em;background:#d5d5d5}.config-form fieldset .errors{margin:0 -2px 1em -2px;padding:.5em 1.5em;background:#fbead9;border-color:#c83838;border-style:solid;border-width:1px 0;list-style:none;font-family:sans-serif;font-size:small}.config-form fieldset .inline_errors{margin:.3em 0 .3em .3em;padding:0;list-style:none;color:#9a0000;font-size:small}.config-form fieldset th{padding:.3em .5em .3em .3em;text-align:right;vertical-align:top;background:rgba(0,0,0,0)}.config-form fieldset .doc{margin-right:1em}.config-form fieldset .disabled-notice{margin-right:1em;font-size:80%;text-transform:uppercase;color:#e00;cursor:help}.config-form fieldset td{padding-top:.3em;padding-bottom:.3em;vertical-align:top;border-top:1px solid #d5d5d5}.config-form fieldset th{border-top:1px solid #d5d5d5}.config-form fieldset th small,.config-form fieldset th .small{display:block;font-weight:normal;font-family:sans-serif;font-size:x-small;color:#444}fieldset .group-header th{background:#d5d5d5}fieldset .group-header+tr th{padding-top:.6em}fieldset .group-field-1 th,fieldset .group-header-2 th{padding-right:1.5em}fieldset .group-field-2 th,fieldset .group-header-3 th{padding-right:3em}fieldset .group-field-3 th{padding-right:4.5em}fieldset .disabled-field th{color:#666;background-color:#ddd}fieldset .disabled-field th small,fieldset .disabled-field th .small{color:#666;background-color:#ddd}fieldset .disabled-field td{color:#666;background-color:#ddd}.config-form span.checkbox{padding:2px;display:inline-block}.config-form .custom{background:#ffc}.config-form span.checkbox.custom{padding:1px;border:1px #edec90 solid;background:#ffc}.config-form .field-error{border-color:#a11 !important}.config-form input[type=text],.config-form input[type=password],.config-form input[type=number]{border:1px #a7a6aa solid;height:auto}.config-form select,.config-form textarea{border:1px #a7a6aa solid;height:auto}.config-form input[type=text]:focus,.config-form input[type=password]:focus,.config-form input[type=number]:focus{border:1px #6676ff solid;background:#f7fbff}.config-form select:focus,.config-form textarea:focus{border:1px #6676ff solid;background:#f7fbff}.config-form .field-comment-mark{font-family:serif;color:#007;cursor:help;padding:0 .2em;font-weight:bold;font-style:italic}.config-form .field-comment-warning{color:#a00}.config-form dd{margin-right:.5em}.config-form dd::before{content:"▸ "}.click-hide-message{cursor:pointer}.prefsmanage_opts{margin-right:2em}#prefs_autoload{margin-bottom:.5em;margin-right:.5em}input#auto_increment_opt{width:-webkit-min-content;width:-moz-min-content;width:min-content}#placeholder .button{position:absolute;cursor:pointer}#placeholder div.button{font-size:smaller;color:#999;background-color:#eee;padding:2px}.wrapper{float:right;margin-bottom:.5em}.toggleButton{position:relative;cursor:pointer;font-size:.8em;text-align:center;line-height:1.4em;height:1.55em;overflow:hidden;border-left:.1em solid #888;border-right:.1em solid #888}.toggleButton table,.toggleButton td,.toggleButton img{padding:0;position:relative}.toggleButton .toggle-container{position:absolute}.toggleButton .toggle-container td,.toggleButton .toggle-container tr{background:none !important}.toggleButton .toggleOn{color:#fff;padding:0 1em}.toggleButton .toggleOff{padding:0 1em}.doubleFieldset .pma-fieldset{width:48%;float:right;padding:0}.doubleFieldset legend{margin-right:.5em}.doubleFieldset div.wrap{padding:.5em}#table_name_col_no_outer{margin-top:45px}#table_name_col_no{position:fixed;top:44px;width:100%;background:#f5f5f5}#table_columns{display:block;overflow:auto}#table_columns input[type=text],#table_columns input[type=password],#table_columns input[type=number],#table_columns input[type=date]{width:10em;box-sizing:border-box}#table_columns select{width:10em;box-sizing:border-box}#placeholder{position:relative;border:1px solid #aaa;float:left;overflow:hidden;width:450px;height:300px}#openlayersmap{width:450px;height:300px}.placeholderDrag{cursor:move}#placeholder .button{position:absolute}#left_arrow{right:8px;top:26px}#right_arrow{right:26px;top:26px}#up_arrow{right:17px;top:8px}#down_arrow{right:17px;top:44px}#zoom_in{right:17px;top:67px}#zoom_world{right:17px;top:85px}#zoom_out{right:17px;top:103px}.colborder{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;width:5px}.colborder_active{border-left:2px solid #a44}.pma_table th.draggable span{display:block;overflow:hidden}.pma_table td{position:static}.pma_table tbody td span{display:block;overflow:hidden}.pma_table tbody td span code span{display:inline}.modal-copy input{display:block;width:100%;margin-top:1.5em;padding:.3em 0}.cRsz{position:absolute}.draggable{cursor:move}.cCpy{background:#000;color:#fff;font-weight:bold;margin:.1em;padding:.3em;position:absolute}.cPointer{height:20px;width:10px;margin-top:-10px;margin-right:-5px;position:absolute;background:url("../img/col_pointer.png")}.tooltip{background:#333 !important;opacity:.8 !important;z-index:9999;border:1px solid #000 !important;border-radius:.3em !important;text-shadow:1px -1px #000 !important;font-size:.8em !important;font-weight:bold !important;padding:1px 3px !important}.tooltip *{background:none !important;color:#fff !important}.cDrop{left:0;position:absolute;top:0}.coldrop{background:url("../img/col_drop.png");cursor:pointer;height:16px;margin-top:.3em;width:16px}.coldrop:hover{background-color:#999}.coldrop-hover{background-color:#999}.cList{background:#eee;border:solid 1px #999;position:absolute;margin-right:75%;left:0;max-width:100%;overflow-wrap:break-word}.cList .lDiv div{padding:.2em .2em .2em .5em}.cList .lDiv div:hover{background:#ddd;cursor:pointer}.cList .lDiv div input{cursor:pointer}.showAllColBtn{border-bottom:solid 1px #999;border-top:solid 1px #999;cursor:pointer;font-size:.9em;font-weight:bold;padding:.35em 1em;text-align:center}.showAllColBtn:hover{background:#ddd}.navigation{background:#e5e5e5;border:1px solid #000;margin:.8em 0}.navigation td{margin:0;padding:0;vertical-align:middle;white-space:nowrap}.navigation_separator{color:#555;display:inline-block;text-align:center;width:1.2em;text-shadow:-1px 0 #fff}.navigation input[type=submit]{background:none;border:0;margin:0;padding:.3em .5em;min-width:1.5em;font-weight:bold}.navigation input[type=submit]:hover{background:#333;color:#fff;cursor:pointer}.navigation input.edit_mode_active{background:#333;color:#fff;cursor:pointer}.navigation select{margin:0 .8em}.cEdit{margin:0;padding:0;position:absolute}.cEdit input[type=text],.cEdit input[type=password],.cEdit input[type=number]{background:#fff;height:100%;margin:0;padding:0}.cEdit .edit_area{background:#fff;border:1px solid #999;min-width:10em;padding:.3em .5em}.cEdit .edit_area select,.cEdit .edit_area textarea{width:97%}.cEdit .cell_edit_hint{color:#555;font-size:.8em;margin:.3em .2em}.cEdit .edit_box{overflow-x:hidden;overflow-y:scroll;padding:0}.cEdit .edit_box_posting{background:#fff url("../img/ajax_clock_small.gif") no-repeat left center;padding-left:1.5em}.cEdit .edit_area_loading{background:#fff url("../img/ajax_clock_small.gif") no-repeat center;height:10em}.cEdit .goto_link{background:#eee;color:#555;padding:.2em .3em}.saving_edited_data{background:url("../img/ajax_clock_small.gif") no-repeat right;padding-right:20px}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:right}.ui-timepicker-div dl dt{height:25px;margin-bottom:-25px}.ui-timepicker-div dl dd{margin:0 85px 10px 10px}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:none;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:ltr}.ui-timepicker-rtl dl{text-align:left}.ui-timepicker-rtl dl dd{margin:0 10px 10px 65px}input.btn{color:#333;background-color:#d0dce0}body .ui-widget{font-size:1em}body #ui-datepicker-div{z-index:9999 !important}.ui-dialog .pma-fieldset legend a{color:blue}.ui-draggable{z-index:801}.relationalTable td{vertical-align:top}.relationalTable select{width:125px;margin-left:5px}div#page_content div#tableslistcontainer{margin-top:1em}div#page_content div#tableslistcontainer table.data{border-top:.1px solid #eee}div#page_content div.result_query{margin-top:1em}table.show_create{margin-top:1em}table.show_create td{border-left:1px solid #bbb}#alias_modal table{width:100%}#alias_modal label{font-weight:bold}.ui-dialog{position:fixed}.small_font{font-size:smaller}#pma_console_container{width:100%;position:fixed;bottom:0;right:0;z-index:100}textarea{resize:both}#pma_console{position:relative;margin-right:240px;z-index:100}#pma_console .templates{display:none}#pma_console .mid_text{vertical-align:middle}#pma_console .toolbar{position:relative;background:#ccc;border-top:solid 1px #aaa;cursor:n-resize}#pma_console .toolbar span{vertical-align:middle}#pma_console .toolbar.collapsed{cursor:default}#pma_console .toolbar.collapsed:not(:hover){display:inline-block;border-top-left-radius:3px;border-left:solid 1px #aaa}#pma_console .toolbar.collapsed>.button{display:none}#pma_console .message span.text,#pma_console .message span.action{padding:0 3px;display:inline-block}#pma_console .toolbar .button,#pma_console .toolbar .text{padding:0 3px;display:inline-block}#pma_console .switch_button{padding:0 3px;display:inline-block}#pma_console .message span.action,#pma_console .toolbar .button,#pma_console .switch_button{cursor:pointer}#pma_console .message span.action:hover,#pma_console .toolbar .button:hover,#pma_console .switch_button:hover{background:#ddd}#pma_console .toolbar .button.active{background:#ddd}#pma_console .toolbar .text{font-weight:bold}#pma_console .toolbar .button,#pma_console .toolbar .text{margin-left:.4em;float:left}#pma_console .content{overflow-x:hidden;overflow-y:auto;margin-bottom:-65px;border-top:solid 1px #aaa;background:#fff;padding-top:.4em}#pma_console .content.console_dark_theme{background:#000;color:#fff}#pma_console .content.console_dark_theme .CodeMirror-wrap{background:#000;color:#fff}#pma_console .content.console_dark_theme .action_content{color:#000}#pma_console .content.console_dark_theme .message{border-color:#373b41}#pma_console .content.console_dark_theme .CodeMirror-cursor{border-color:#fff}#pma_console .content.console_dark_theme .cm-keyword{color:#de935f}#pma_console .message,#pma_console .query_input{position:relative;font-family:Monaco,Consolas,monospace;cursor:text;margin:0 1.4em .2em 10px}#pma_console .message{border-bottom:solid 1px #ccc;padding-bottom:.2em}#pma_console .message.expanded>.action_content{position:relative}#pma_console .message::before{right:-0.7em;position:absolute;content:">"}#pma_console .query_input::before{right:-0.7em;position:absolute;content:">";top:-2px}#pma_console .query_input textarea{width:100%;height:4em;resize:vertical}#pma_console .message:hover::before{color:#7cf;font-weight:bold}#pma_console .message.expanded::before{content:"]"}#pma_console .message.welcome::before{display:none}#pma_console .message.failed::before,#pma_console .message.failed.expanded::before,#pma_console .message.failed:hover::before{content:"=";color:#944}#pma_console .message.pending::before{opacity:.3}#pma_console .message.collapsed>.query{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#pma_console .message.expanded>.query{display:block;white-space:pre;word-wrap:break-word}#pma_console .message .text.targetdb,#pma_console .message.collapsed .action.collapse,#pma_console .message.expanded .action.expand{display:none}#pma_console .message .action.requery,#pma_console .message .action.profiling,#pma_console .message .action.explain,#pma_console .message .action.bookmark{display:none}#pma_console .message.select .action.profiling,#pma_console .message.select .action.explain{display:inline-block}#pma_console .message.history .text.targetdb,#pma_console .message.successed .text.targetdb{display:inline-block}#pma_console .message.history .action.requery,#pma_console .message.history .action.bookmark{display:inline-block}#pma_console .message.bookmark .action.requery,#pma_console .message.bookmark .action.bookmark{display:inline-block}#pma_console .message.successed .action.requery,#pma_console .message.successed .action.bookmark{display:inline-block}#pma_console .message .action_content{position:absolute;bottom:100%;background:#ccc;border:solid 1px #aaa;border-top-right-radius:3px}#pma_console .message.bookmark .text.targetdb,#pma_console .message .text.query_time{margin:0;display:inline-block}#pma_console .message.failed .text.query_time,#pma_console .message .text.failed{display:none}#pma_console .message.failed .text.failed{display:inline-block}#pma_console .message .text{background:#fff}#pma_console .message.collapsed>.action_content{display:none}#pma_console .message.collapsed:hover>.action_content{display:block}#pma_console .message .bookmark_label{padding:0 4px;top:0;background:#369;color:#fff;border-radius:3px}#pma_console .message .bookmark_label.shared{background:#396}#pma_console .message.expanded .bookmark_label{border-top-right-radius:0;border-top-left-radius:0}#pma_console .query_input{position:relative}#pma_console .mid_layer{height:100%;width:100%;position:absolute;top:0;background:#666;display:none;cursor:pointer;z-index:200}#pma_console .card{position:absolute;width:94%;height:100%;min-height:48px;right:100%;top:0;border-right:solid 1px #999;z-index:300;transition:right .2s}#pma_console .card.show{right:6%;box-shadow:2px 1px 4px -1px #999}#pma_bookmarks .content.add_bookmark,#pma_console_options .content{padding:4px 6px}#pma_bookmarks .content.add_bookmark .options{margin-right:1.4em;padding-bottom:.4em;margin-bottom:.4em;border-bottom:solid 1px #ccc}#pma_bookmarks .content.add_bookmark .options button{margin:0 7px;vertical-align:bottom}#pma_bookmarks .content.add_bookmark input[type=text]{margin:0;padding:2px 4px}#pma_console .button.hide,#pma_console .message span.text.hide{display:none}#debug_console.grouped .ungroup_queries{display:inline-block}#debug_console.ungrouped .group_queries{display:inline-block}#debug_console.ungrouped .ungroup_queries,#debug_console.ungrouped .sort_count{display:none}#debug_console.grouped .group_queries{display:none}#debug_console .count{margin-left:8px}#debug_console .show_trace .trace,#debug_console .show_args .args{display:block}#debug_console .hide_trace .trace,#debug_console .hide_args .args,#debug_console .show_trace .action.dbg_show_trace,#debug_console .hide_trace .action.dbg_hide_trace{display:none}#debug_console .traceStep.hide_args .action.dbg_hide_args,#debug_console .traceStep.show_args .action.dbg_show_args{display:none}#debug_console .traceStep::after{content:"";display:table;clear:both}#debug_console .trace.welcome::after,#debug_console .debug>.welcome::after{content:"";display:table;clear:both}#debug_console .debug_summary{float:right}#debug_console .trace.welcome .time,#debug_console .traceStep .file,#debug_console .script_name{float:left}#debug_console .traceStep .args pre{margin:0}.cm-s-pma .CodeMirror-code{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-code pre{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-measure>pre,.cm-s-pma .CodeMirror-code>pre,.cm-s-pma .CodeMirror-lines{padding:0}.cm-s-pma.CodeMirror{resize:none;height:auto;width:100%;min-height:initial;max-height:initial}.cm-s-pma .CodeMirror-scroll{cursor:text}.pma_drop_handler{display:none;position:fixed;top:0;right:0;width:100%;background:rgba(0,0,0,.6);height:100%;z-index:999;color:#fff;font-size:30pt;text-align:center;padding-top:20%}.pma_sql_import_status{display:none;position:fixed;bottom:0;left:25px;width:400px;border:1px solid #999;background:#f3f3f3;border-radius:4px;box-shadow:-2px 2px 5px #ccc}.pma_sql_import_status h2,.pma_sql_import_status .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:-1px 1px 15px #999 inset}.pma_drop_result h2,.pma_drop_result .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:-1px 1px 15px #999 inset}.pma_sql_import_status div{height:270px;overflow-y:auto;overflow-x:hidden;list-style-type:none}.pma_sql_import_status div li{padding:8px 10px;border-bottom:1px solid #bbb;color:#940e0e;background:#fff}.pma_sql_import_status div li .filesize{float:left}.pma_sql_import_status h2 .minimize,.pma_sql_import_status .h2 .minimize{float:left;margin-left:5px;padding:0 10px}.pma_sql_import_status h2 .close,.pma_sql_import_status .h2 .close{float:left;margin-left:5px;padding:0 10px;display:none}.pma_sql_import_status h2 .minimize:hover,.pma_sql_import_status .h2 .minimize:hover,.pma_sql_import_status h2 .close:hover,.pma_sql_import_status .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_result h2 .close:hover,.pma_drop_result .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_file_status{color:#235a81}.pma_drop_file_status span.underline:hover{cursor:pointer;text-decoration:underline}.pma_drop_result{position:fixed;top:10%;right:20%;width:60%;background:#fff;min-height:300px;z-index:800;box-shadow:0 0 15px #999;border-radius:10px;cursor:move}.pma_drop_result h2 .close,.pma_drop_result .h2 .close{float:left;margin-left:5px;padding:0 10px}#composite_index_list{list-style-type:none;list-style-position:inside}span.drag_icon{display:inline-block;background-image:url("../img/s_sortable.png");background-position:center center;background-repeat:no-repeat;width:1em;height:3em;cursor:move}.topmargin{margin-top:1em}body .ui-dialog .ui-dialog-titlebar-close{left:.3em;right:initial}body .ui-dialog .ui-dialog-title{float:right}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}body .ui-corner-all,body .ui-corner-top,body .ui-corner-left,body .ui-corner-tl{border-top-right-radius:0}body .ui-corner-all,body .ui-corner-top,body .ui-corner-right,body .ui-corner-tr{border-top-left-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-left,body .ui-corner-bl{border-bottom-right-radius:0}body .ui-corner-all,body .ui-corner-bottom,body .ui-corner-right,body .ui-corner-br{border-bottom-left-radius:0}body .ui-dialog{padding:0;border-color:#000}body .ui-dialog .ui-dialog-titlebar{padding:.3em .5em;border:none;border-bottom:1px solid #000}body .ui-dialog .ui-dialog-titlebar button{border:1px solid #999}body .ui-dialog .ui-dialog-content{padding:.2em .4em}body .ui-dialog .ui-dialog-buttonpane{background:#d3dce3;border-top:1px solid #000}body .ui-dialog .ui-dialog-buttonpane button{margin:.1em .4em .1em 0;border:1px solid #999;color:#000}body .ui-dialog .ui-button-text-only .ui-button-text{padding:.2em .6em}.multi_table_query_form .query-form__tr--hide{display:none}.multi_table_query_form .query-form__fieldset--inline,.multi_table_query_form .query-form__select--inline{display:inline}.multi_table_query_form .query-form__tr--bg-none{background:none}.multi_table_query_form .query-form__input--wide{width:91%}.multi_table_query_form .query-form__multi-sql-query{float:right}#name-panel{overflow:hidden}@media only screen and (max-width: 768px){.responsivetable{overflow-x:auto}body#loginform div.container{width:100%}.largescreenonly{display:none}.width96{width:96% !important}#page_nav_icons{display:none}#table_name_col_no{top:62px}.tdblock tr td{display:block}#table_columns{margin-top:60px}#table_columns .tablesorter{min-width:100%}.doubleFieldset .pma-fieldset{width:98%}div#serverstatusquerieschart{width:100%;height:450px}.ui-dialog{margin:1%;width:95% !important}#server-breadcrumb .item{margin:4px}}#tooltip_editor{font-size:12px;background-color:#fff;opacity:.95;filter:alpha(opacity=95);padding:5px}#tooltip_font{font-weight:bold}#selection_box{z-index:1000;height:205px;position:absolute;background-color:skyblue;opacity:.4;filter:alpha(opacity=40);pointer-events:none}#filterQueryText{vertical-align:baseline}.ui_tpicker_hour_slider,.ui_tpicker_minute_slider,.ui_tpicker_second_slider,.ui_tpicker_millisec_slider,.ui_tpicker_microsec_slider{margin-right:20px;margin-top:4px;height:.75rem}.ui_tpicker_time_input{width:100%}.pre-scrollable{max-height:340px;overflow-y:scroll}@media(min-width: 1200px){div.tools{text-align:right}.pma-fieldset.tblFooters,.tblFooters{text-align:right}}.resize-vertical{resize:vertical}p.enum_notice{margin:5px 2px;font-size:80%}#enum_editor p{margin-top:0;font-style:italic}#enum_editor .values{width:100%}#enum_editor .add{width:100%}#enum_editor .add td{vertical-align:middle;width:50%;padding:0 0 0;padding-right:1em}#enum_editor .values td.drop{width:1.8em;cursor:pointer;vertical-align:middle}#enum_editor .values input{margin:.1em 0;padding-left:2em;width:100%}#enum_editor .values img{vertical-align:middle}#enum_editor input.add_value{margin:0;margin-left:.4em}#enum_editor_output textarea{width:100%;float:left;margin:1em 0 0 0}.enum_hint{position:relative}.enum_hint a{position:absolute;right:81%;bottom:.35em}a.close_gis_editor{float:left}#gis_editor{display:none;position:fixed;z-index:1001;overflow-y:auto;overflow-x:hidden}#gis_data{min-height:230px}#gis_data_textarea{height:6em}#gis_data_editor{background:#d0dce0;padding:15px;min-height:500px}#gis_data_editor .choice{display:none}#gis_data_editor input[type=text]{width:75px}#pma_navigation_content{width:100%;height:100%;position:absolute;top:0;right:0;z-index:0;padding-bottom:1em}#pma_navigation{background:#d0dce0;color:#000;width:240px;overflow:hidden;position:fixed;top:0;right:0;height:100vh;border-left:1px solid gray;z-index:800}#pma_navigation ul{margin:0}#pma_navigation form{margin:0;padding:0;display:inline}#pma_navigation select#select_server,#pma_navigation select#lightm_db{width:100%}#pma_navigation div.pageselector{text-align:center;margin:0 0 0;margin-right:.75em;border-right:1px solid #666}#pma_navigation div#pmalogo{background-color:#d0dce0;padding:.3em}#pma_navigation div#recentTableList,#pma_navigation div#FavoriteTableList{text-align:center;margin-bottom:.5em}#pma_navigation #recentTable,#pma_navigation #FavoriteTable{width:200px}#pma_navigation #pmalogo,#pma_navigation #serverChoice,#pma_navigation #navipanellinks,#pma_navigation #recentTableList,#pma_navigation #FavoriteTableList,#pma_navigation #databaseList,#pma_navigation div.pageselector.dbselector{text-align:center;margin-bottom:.3em;padding-bottom:.3em;border:0}#pma_navigation #navipanellinks .icon{margin:0}#pma_navigation #recentTableList select,#pma_navigation #FavoriteTableList select,#pma_navigation #serverChoice select{width:80%}#pma_navigation #recentTableList,#pma_navigation #FavoriteTableList{margin-bottom:0;padding-bottom:0}#pma_navigation_content>img.throbber{display:block;margin:0 auto}#pma_navigation_tree{margin:0;margin-right:1em;color:#444;height:74%;position:relative}#pma_navigation_select_database{text-align:right;padding:0 0 0;border:0;margin:0}#pma_navigation_db_select{margin-top:.5em;margin-right:.75em}#pma_navigation_db_select select{background:linear-gradient(#fff, #f1f1f1, #fff);border-radius:2px;border:1px solid #bbb;border-top:1px solid #bbb;color:#333;padding:4px 6px;margin:0 0 0;width:92%;font-size:1.11em}#pma_navigation_tree_content{width:100%;overflow:hidden;overflow-y:auto;position:absolute;height:100%}#pma_navigation_tree_content a.hover_show_full{position:relative;z-index:100;vertical-align:sub}#pma_navigation_tree_content li.nav_node_table{background-color:rgba(0,0,0,0)}#pma_navigation_tree a{color:#000;padding-right:0}#pma_navigation_tree a:hover{text-decoration:underline}#pma_navigation_tree li{margin-bottom:0}#pma_navigation_tree li.activePointer,#pma_navigation_tree li.selected{color:#000;background-color:#99c}#pma_navigation_tree li .dbItemControls{padding-left:4px;float:left}#pma_navigation_tree li .navItemControls{display:none;padding-left:4px;float:left}#pma_navigation_tree li.activePointer .navItemControls{display:block;opacity:.5}#pma_navigation_tree li.activePointer .navItemControls:hover{opacity:1}#pma_navigation_tree ul{clear:both;padding:0;list-style-type:none;margin:0}#pma_navigation_tree ul ul{position:relative}#pma_navigation_tree li{white-space:nowrap;clear:both;min-height:16px}#pma_navigation_tree img{margin:0}#pma_navigation_tree i{display:block}#pma_navigation_tree div.block{position:relative;width:1.5em;height:1.5em;min-width:16px;min-height:16px;float:right}#pma_navigation_tree div.block.double{width:3em}#pma_navigation_tree div.block i,#pma_navigation_tree div.block b{width:1.5em;height:1.7em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;right:.75em;z-index:0}#pma_navigation_tree div.block i{border-right:1px solid #666;border-bottom:1px solid #666;position:relative;z-index:0}#pma_navigation_tree div.block i.first{border-right:0}#pma_navigation_tree div.block b{display:block;height:.75em;bottom:0;right:.75em;border-right:1px solid #666}#pma_navigation_tree div.block a,#pma_navigation_tree div.block u{position:absolute;right:50%;top:50%;z-index:10}#pma_navigation_tree div.block a+a{right:100%}#pma_navigation_tree div.block.double a,#pma_navigation_tree div.block.double u{right:25%}#pma_navigation_tree div.block.double a+a{right:70%}#pma_navigation_tree div.block img{position:relative;top:-0.6em;right:0;margin-right:-5px}#pma_navigation_tree li.last>ul{background:none}#pma_navigation_tree li>a,#pma_navigation_tree li>i{line-height:1.5em;height:1.5em;padding-right:.3em}#pma_navigation_tree .list_container{border-right:1px solid #666;margin-right:.75em;padding-right:.75em}#pma_navigation_tree .list_container li.last.database{margin-bottom:0 !important}#pma_navigation_tree .last>.list_container{border-right:0 solid #666}li.fast_filter{padding-right:.75em;margin-right:.75em;padding-left:35px;border-right:1px solid #666}li.fast_filter input{font-size:.7em}li.fast_filter .searchClauseClear{border:0;font-weight:bold;color:#800;font-size:.7em}li.fast_filter.db_fast_filter{border:0;margin-right:0}#pma_navigation_resizer{width:3px;height:100%;background-color:#aaa;cursor:col-resize;position:fixed;top:0;right:240px;z-index:801}#pma_navigation_collapser{width:20px;height:22px;line-height:22px;background:#eee;color:#555;font-weight:bold;position:fixed;top:0;right:240px;text-align:center;cursor:pointer;z-index:800;text-shadow:0 1px 0 #fff;filter:dropshadow(color=#fff, offx=0, offy=1);border:1px solid #888}#navigation_controls_outer{min-height:21px !important}#navigation_controls_outer.activePointer{background-color:rgba(0,0,0,0) !important}#navigation_controls{float:left;padding-left:23px}.pma_quick_warp{margin-top:5px;margin-right:2px;position:relative}.pma_quick_warp .drop_list{float:right;margin-right:3px;padding:2px 0}.pma_quick_warp .drop_button{padding:0 .3em;border:1px solid #ddd;background:#f2f2f2;cursor:pointer}.pma_quick_warp .drop_list:hover .drop_button{background:#fff}.pma_quick_warp .drop_list ul{position:absolute;margin:0;padding:0;overflow:hidden;overflow-y:auto;list-style:none;background:#fff;border:1px solid #ddd;border-top-left-radius:0;border-bottom-left-radius:0;top:100%;right:3px;left:0;display:none;z-index:802}.pma_quick_warp .drop_list:hover ul{display:block}.pma_quick_warp .drop_list li{white-space:nowrap}.pma_quick_warp .drop_list li img{vertical-align:sub}.pma_quick_warp .drop_list li:hover{background:#f2f2f2}.pma_quick_warp .drop_list a{display:block;padding:.1em .3em}.pma_quick_warp .drop_list a.favorite_table_anchor{clear:right;float:right;padding:.1em .3em 0}.input_tab{background-color:#a6c7e1;color:#000}.content_fullscreen{position:relative;overflow:auto}#canvas_outer{position:relative;width:100%;display:block}#canvas{background-color:#fff;color:#000}canvas.designer{display:inline-block;overflow:hidden;text-align:right}canvas.designer *{behavior:url(#default#VML)}.designer_tab{background-color:#fff;color:#000;border-collapse:collapse;border:1px solid #aaa;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.designer_tab .header{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.tab_zag{text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_zag_2{background:linear-gradient(#fffa96 0%, #fffa96 39%, #ffe796 40%, #ffe796 100%);background-repeat:repeat-x;text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_field{background:#fff;color:#000;cursor:default}.tab_field:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}.tab_field_3{background-color:#ffe6e6 !important;color:#000;cursor:default}.tab_field_3:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}#designer_hint{white-space:nowrap;position:absolute;background-color:#9f9;color:#000;z-index:3;border:#0c6 solid 1px;display:none}#designer_body #page_content{margin:0}.scroll_tab{overflow:auto;width:100%;height:500px}.designer_Tabs{cursor:default;color:#05b;white-space:nowrap;text-decoration:none;text-indent:3px;font-weight:bold;margin-right:2px;text-align:right;background:linear-gradient(#fff, #dfe5e7 70%, #fff 70%, #fff 100%);border:#ccc solid 1px}.designer_Tabs:hover{cursor:default;color:#05b;background:#fe9;text-indent:3px;font-weight:bold;white-space:nowrap;text-decoration:none;border:#99f solid 1px;text-align:right}.owner{font-weight:normal;color:#888}.option_tab{padding-right:2px;padding-left:2px;width:5px}.select_all{vertical-align:top;padding-right:2px;padding-left:2px;cursor:default;width:1px;color:#000;background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.small_tab{vertical-align:top;background-color:#0064ea;color:#fff;background-image:url("../img/designer/small_tab.png");cursor:default;text-align:center;font-weight:bold;padding-right:2px;padding-left:2px;width:1px;text-decoration:none}.small_tab:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;padding-right:2px;padding-left:2px;text-align:center;font-weight:bold;width:1px;text-decoration:none}.small_tab_pref{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%);text-align:center;width:1px}.small_tab_pref:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;text-align:center;font-weight:bold;width:1px;text-decoration:none}.butt{border:#47a solid 1px;font-weight:bold;background-color:#fff;color:#000;vertical-align:baseline}.L_butt2_1{padding:1px;text-decoration:none;vertical-align:middle;cursor:default}.L_butt2_1:hover{padding:0;border:#09c solid 1px;background:#fe9;color:#000;text-decoration:none;vertical-align:middle;cursor:default}.bor{width:10px;height:10px}.frams1{background:url("../img/designer/1.png") no-repeat left bottom}.frams2{background:url("../img/designer/2.png") no-repeat right bottom}.frams3{background:url("../img/designer/3.png") no-repeat right top}.frams4{background:url("../img/designer/4.png") no-repeat left top}.frams5{background:url("../img/designer/5.png") repeat-x center bottom}.frams6{background:url("../img/designer/6.png") repeat-y right}.frams7{background:url("../img/designer/7.png") repeat-x top}.frams8{background:url("../img/designer/8.png") repeat-y left}#osn_tab{position:absolute;background-color:#fff;color:#000}.designer_header{background-color:#eaeef0;color:#000;text-align:center;font-weight:bold;margin:0;padding:0;background-image:url("../img/designer/top_panel.png");background-position:top;background-repeat:repeat-x;border-left:#999 solid 1px;border-right:#999 solid 1px;height:28px;z-index:101;width:100%;position:fixed}.designer_header a,.designer_header span{display:block;float:right;margin:3px 1px 4px;height:20px;border:1px dotted #fff}.designer_header .M_bord{display:block;float:right;margin:4px;height:20px;width:2px}.designer_header a.first{margin-left:1em}.designer_header a.last{margin-right:1em}a.M_butt_Selected_down_IE,a.M_butt_Selected_down{border:1px solid #c0c0bb;background-color:#9f9;color:#000}a.M_butt_Selected_down_IE:hover,a.M_butt_Selected_down:hover{border:1px solid #09c;background-color:#fe9;color:#000}a.M_butt:hover{border:1px solid #09c;background-color:#fe9;color:#000}#layer_menu{z-index:98;position:relative;float:left;background-color:#eaeef0;border:#999 solid 1px}#layer_upd_relation{position:absolute;right:637px;top:224px;z-index:100}#layer_new_relation,#designer_optionse{position:absolute;right:636px;top:85px;z-index:100;width:153px}#layer_menu_sizer{background-image:url("../img/designer/resize.png");cursor:ew-resize}#layer_menu_sizer .icon{margin:0}.panel{position:fixed;top:60px;left:0;width:350px;max-height:500px;display:none;overflow:auto;padding-top:34px;z-index:102}a.trigger{position:fixed;text-decoration:none;top:60px;left:0;color:#fff;padding:10px 15px 10px 40px;background:#333 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #444;display:block;z-index:102}a.trigger:hover{color:#080808;background:#fff696 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #999}a.active.trigger{background:#222 url("../img/designer/minus.png") 15% 55% no-repeat;z-index:999}a.active.trigger:hover{background:#fff696 url("../img/designer/minus.png") 15% 55% no-repeat}.toggle_container .block{background-color:#dbe4e8;border-top:1px solid #999}.history_table{text-align:center;cursor:pointer;background-color:#dbe4e8}.history_table:hover{background-color:#99c}#ab{min-width:300px}#ab .ui-accordion-content{padding:0}#foreignkeychk{text-align:right;cursor:pointer}.side-menu{float:right;position:fixed;width:auto;height:auto;background:#efefef;border:1px solid gray;overflow:hidden;z-index:50;padding:2px}.side-menu.right{float:left;left:0}.side-menu .hide{display:none}.side-menu a{display:block;float:none;overflow:hidden;line-height:1em}.side-menu img,.side-menu .text{float:right}#name-panel{border-bottom:1px solid gray;text-align:center;background:#efefef;width:100%;font-size:1.2em;padding:5px;font-weight:bold}#container-form{width:100%;position:absolute;right:0}.CodeMirror{height:20rem;direction:rtl}#inline_editor_outer .CodeMirror{height:6em}.insertRowTable .CodeMirror{min-height:9em;min-width:24em;border:1px solid #a9a9a9}#pma_console .CodeMirror-gutters{background-color:initial;border:none}span.cm-keyword,span.cm-statement-verb{color:#909}span.cm-variable{color:#000}span.cm-comment{color:olive}span.cm-mysql-string{color:green}span.cm-operator{color:#f0f}span.cm-mysql-word{color:#000}span.cm-builtin{color:red}span.cm-variable-2{color:#f90}span.cm-variable-3{color:blue}span.cm-separator{color:#f0f}span.cm-number{color:teal}.autocomplete-column-name{display:inline-block}.autocomplete-column-hint{display:inline-block;float:left;color:#666;margin-right:1em}.CodeMirror-hints{z-index:1999}.CodeMirror-lint-tooltip{z-index:200;font-family:inherit}.CodeMirror-lint-tooltip code{font-family:monospace;font-weight:bold}.jqplot-target{position:relative;color:#222;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-left:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-right:10px;margin-left:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;right:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;right:15px;vertical-align:bottom}.jqplot-yaxis-tick{left:0;top:15px;text-align:left}.jqplot-yaxis-tick.jqplot-breakTick{left:-20px;margin-left:0;padding:1px 5px 1px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{right:0;top:15px;text-align:right}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-left:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-right:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-right:12px;margin-left:12px;background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}table.jqplot-cursor-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-right-width:6px;border-left-width:6px;border-top-style:solid;border-bottom-style:solid;border-right-style:solid;border-left-style:solid}.jqplot-title{top:0;right:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:1em;white-space:nowrap;background:rgba(208,208,208,.8);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-right:2px;padding-left:2px;color:#333}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(230,230,230,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(245,245,245,.3)}.icon{margin:0;margin-right:.3em;padding:0 !important;width:16px;height:16px}.icon_fulltext{width:50px;height:19px}.ic_asc_order{background-image:url("../../pmahomme/img/asc_order.png")}.ic_b_bookmark{background-image:url("../img/b_bookmark.png")}.ic_b_browse{background-image:url("../img/b_browse.png")}.ic_b_calendar{background-image:url("../img/b_calendar.png")}.ic_b_chart{background-image:url("../img/b_chart.png")}.ic_b_close{background-image:url("../img/b_close.png")}.ic_b_column_add{background-image:url("../img/b_column_add.png")}.ic_b_comment{background-image:url("../img/b_comment.png")}.ic_b_dbstatistics{background-image:url("../img/b_dbstatistics.png")}.ic_b_deltbl{background-image:url("../img/b_deltbl.png")}.ic_b_docs{background-image:url("../img/b_docs.png")}.ic_b_docsql{background-image:url("../../pmahomme/img/b_docsql.png")}.ic_b_drop{background-image:url("../img/b_drop.png")}.ic_b_edit{background-image:url("../img/b_edit.png")}.ic_b_empty{background-image:url("../img/b_empty.png")}.ic_b_engine{background-image:url("../img/b_engine.png")}.ic_b_event_add{background-image:url("../img/b_event_add.png")}.ic_b_events{background-image:url("../img/b_events.png")}.ic_b_export{background-image:url("../img/b_export.png")}.ic_b_favorite{background-image:url("../img/b_favorite.png")}.ic_b_find_replace{background-image:url("../img/b_find_replace.png")}.ic_b_firstpage{background-image:url("../../pmahomme/img/b_firstpage.png")}.ic_b_ftext{background-image:url("../img/b_ftext.png")}.ic_b_globe{background-image:url("../img/b_globe.gif")}.ic_b_group{background-image:url("../img/b_group.png")}.ic_b_help{background-image:url("../img/b_help.png")}.ic_b_home{background-image:url("../img/b_home.png")}.ic_b_import{background-image:url("../img/b_import.png")}.ic_b_index{background-image:url("../img/b_index.png")}.ic_b_index_add{background-image:url("../img/b_index_add.png")}.ic_b_inline_edit{background-image:url("../img/b_inline_edit.png")}.ic_b_insrow{background-image:url("../img/b_insrow.png")}.ic_b_lastpage{background-image:url("../../pmahomme/img/b_lastpage.png")}.ic_b_minus{background-image:url("../img/b_minus.png")}.ic_b_more{background-image:url("../img/b_more.png")}.ic_b_move{background-image:url("../img/b_move.png")}.ic_b_newdb{background-image:url("../img/b_newdb.png")}.ic_db_drop{background-image:url("../img/b_deltbl.png")}.ic_b_newtbl{background-image:url("../img/b_newtbl.png")}.ic_b_nextpage{background-image:url("../img/b_nextpage.png")}.ic_b_no_favorite{background-image:url("../img/b_no_favorite.png")}.ic_b_pdfdoc{background-image:url("../../pmahomme/img/b_pdfdoc.png")}.ic_b_plugin{background-image:url("../img/b_plugin.png")}.ic_b_plus{background-image:url("../img/b_plus.png")}.ic_b_prevpage{background-image:url("../../pmahomme/img/b_prevpage.png")}.ic_b_primary{background-image:url("../img/b_primary.png")}.ic_b_print{background-image:url("../img/b_print.png")}.ic_b_props{background-image:url("../img/b_props.png")}.ic_b_relations{background-image:url("../img/b_relations.png")}.ic_b_report{background-image:url("../img/b_report.png")}.ic_b_rename{background-image:url("../img/b_rename.svg")}.ic_b_routine_add{background-image:url("../img/b_routine_add.png")}.ic_b_routines{background-image:url("../img/b_routines.png")}.ic_b_save{background-image:url("../img/b_save.png")}.ic_b_saveimage{background-image:url("../img/b_saveimage.png")}.ic_b_sbrowse{background-image:url("../img/b_sbrowse.png")}.ic_b_sdb{background-image:url("../../pmahomme/img/b_sdb.png");width:10px;height:10px}.ic_b_search{background-image:url("../img/b_search.png")}.ic_b_select{background-image:url("../img/b_select.png")}.ic_b_snewtbl{background-image:url("../img/b_snewtbl.png")}.ic_b_spatial{background-image:url("../img/b_spatial.png")}.ic_b_sql{background-image:url("../img/b_sql.png")}.ic_b_sqldoc{background-image:url("../../pmahomme/img/b_sqldoc.png")}.ic_b_sqlhelp{background-image:url("../img/b_sqlhelp.png")}.ic_b_table_add{background-image:url("../img/b_table_add.png")}.ic_b_tblanalyse{background-image:url("../img/b_tblanalyse.png")}.ic_b_tblexport{background-image:url("../img/b_tblexport.png")}.ic_b_tblimport{background-image:url("../img/b_tblimport.png")}.ic_b_tblops{background-image:url("../img/b_tblops.png")}.ic_b_tbloptimize{background-image:url("../img/b_tbloptimize.png")}.ic_b_tipp{background-image:url("../img/b_tipp.png")}.ic_b_trigger_add{background-image:url("../img/b_trigger_add.png")}.ic_b_triggers{background-image:url("../img/b_triggers.png")}.ic_b_undo{background-image:url("../img/b_undo.png")}.ic_b_unique{background-image:url("../img/b_unique.png")}.ic_b_usradd{background-image:url("../img/b_usradd.png")}.ic_b_usrcheck{background-image:url("../img/b_usrcheck.png")}.ic_b_usrdrop{background-image:url("../img/b_usrdrop.png")}.ic_b_usredit{background-image:url("../img/b_usredit.png")}.ic_b_usrlist{background-image:url("../img/b_usrlist.png")}.ic_b_versions{background-image:url("../img/b_versions.png")}.ic_b_view{background-image:url("../img/b_view.png")}.ic_b_view_add{background-image:url("../img/b_view_add.png")}.ic_b_views{background-image:url("../img/b_views.png")}.ic_b_left{background-image:url("../img/b_left.png")}.ic_b_right{background-image:url("../img/b_right.png")}.ic_bd_browse{background-image:url("../img/bd_browse.png")}.ic_bd_deltbl{background-image:url("../img/bd_deltbl.png")}.ic_bd_drop{background-image:url("../img/bd_drop.png")}.ic_bd_edit{background-image:url("../img/bd_edit.png")}.ic_bd_empty{background-image:url("../img/bd_empty.png")}.ic_bd_export{background-image:url("../img/bd_export.png")}.ic_bd_firstpage{background-image:url("../../pmahomme/img/bd_firstpage.png")}.ic_bd_ftext{background-image:url("../img/bd_ftext.png")}.ic_bd_index{background-image:url("../img/bd_index.png")}.ic_bd_insrow{background-image:url("../img/bd_insrow.png")}.ic_bd_lastpage{background-image:url("../../pmahomme/img/bd_lastpage.png")}.ic_bd_nextpage{background-image:url("../img/bd_nextpage.png")}.ic_bd_prevpage{background-image:url("../../pmahomme/img/bd_prevpage.png")}.ic_bd_primary{background-image:url("../img/bd_primary.png")}.ic_bd_routine_add{background-image:url("../img/bd_routine_add.png")}.ic_bd_sbrowse{background-image:url("../img/bd_sbrowse.png")}.ic_bd_select{background-image:url("../img/bd_select.png")}.ic_bd_spatial{background-image:url("../img/bd_spatial.png")}.ic_bd_unique{background-image:url("../img/bd_unique.png")}.ic_centralColumns{background-image:url("../img/centralColumns.png")}.ic_centralColumns_add{background-image:url("../img/centralColumns_add.png")}.ic_centralColumns_delete{background-image:url("../img/centralColumns_delete.png")}.ic_col_drop{background-image:url("../img/col_drop.png")}.ic_console{background-image:url("../img/console.png")}.ic_database{background-image:url("../../pmahomme/img/database.png")}.ic_eye{background-image:url("../img/eye.png")}.ic_eye_grey{background-image:url("../img/eye_grey.png")}.ic_hide{background-image:url("../img/hide.png")}.ic_item{background-image:url("../../pmahomme/img/item.png");width:9px;height:9px}.ic_lightbulb{background-image:url("../img/lightbulb.png")}.ic_lightbulb_off{background-image:url("../img/lightbulb_off.png")}.ic_more{background-image:url("../img/more.png");width:13px}.ic_new_data{background-image:url("../img/new_data.png")}.ic_new_data_hovered{background-image:url("../img/new_data_hovered.png")}.ic_new_data_selected{background-image:url("../img/new_data_selected.png")}.ic_new_data_selected_hovered{background-image:url("../img/new_data_selected_hovered.png")}.ic_new_struct{background-image:url("../img/new_struct.png")}.ic_new_struct_hovered{background-image:url("../img/new_struct_hovered.png")}.ic_new_struct_selected{background-image:url("../img/new_struct_selected.png")}.ic_new_struct_selected_hovered{background-image:url("../img/new_struct_selected_hovered.png")}.ic_normalize{background-image:url("../img/normalize.png")}.ic_pause{background-image:url("../img/pause.png")}.ic_php_sym{background-image:url("../../pmahomme/img/php_sym.png")}.ic_play{background-image:url("../img/play.png")}.ic_s_asc{background-image:url("../img/s_asc.png")}.ic_s_asci{background-image:url("../img/s_asci.png")}.ic_s_attention{background-image:url("../img/s_attention.png")}.ic_s_cancel{background-image:url("../img/s_cancel.png")}.ic_s_cancel2{background-image:url("../../pmahomme/img/s_cancel2.png")}.ic_s_cog{background-image:url("../img/s_cog.png")}.ic_s_db{background-image:url("../img/s_db.png")}.ic_s_desc{background-image:url("../img/s_desc.png")}.ic_s_error{background-image:url("../img/s_error.png")}.ic_s_host{background-image:url("../img/s_host.png")}.ic_s_info{background-image:url("../img/s_info.png")}.ic_s_lang{background-image:url("../img/s_lang.png")}.ic_s_link{background-image:url("../img/s_link.png")}.ic_s_lock{background-image:url("../img/s_lock.png")}.ic_s_unlock{background-image:url("../../pmahomme/img/lock_open.png")}.ic_s_loggoff{background-image:url("../img/s_loggoff.png")}.ic_s_notice{background-image:url("../img/s_notice.png")}.ic_s_okay{background-image:url("../img/s_okay.png")}.ic_s_passwd{background-image:url("../img/s_passwd.png")}.ic_s_process{background-image:url("../../pmahomme/img/s_process.png")}.ic_s_really{background-image:url("../img/s_really.png");width:11px;height:11px}.ic_s_reload{background-image:url("../img/s_reload.png")}.ic_s_replication{background-image:url("../img/s_replication.png")}.ic_s_rights{background-image:url("../img/s_rights.png")}.ic_s_sortable{background-image:url("../img/s_sortable.png")}.ic_s_status{background-image:url("../img/s_status.png")}.ic_s_success{background-image:url("../img/s_success.png")}.ic_s_sync{background-image:url("../img/s_sync.png")}.ic_s_tbl{background-image:url("../img/s_tbl.png")}.ic_s_theme{background-image:url("../img/s_theme.png")}.ic_s_top{background-image:url("../img/s_top.png")}.ic_s_unlink{background-image:url("../img/s_unlink.png")}.ic_s_vars{background-image:url("../img/s_vars.png")}.ic_s_views{background-image:url("../img/s_views.png")}.ic_show{background-image:url("../img/show.png")}.ic_window-new{background-image:url("../img/window-new.png")}.ic_ajax_clock_small{background-image:url("../img/ajax_clock_small.gif")}.ic_s_partialtext{background-image:url("../img/s_partialtext.png")}.ic_s_fulltext{background-image:url("../img/s_fulltext.png")}body{text-align:right}input,select{font-size:1em}textarea{font-family:monospace;font-size:1.2em}.table{border-collapse:separate}.table td{touch-action:manipulation;vertical-align:middle}.table thead th{border-bottom:0;background:#d3dce3}.table-striped tbody tr:nth-of-type(odd){background-color:#e5e5e5}.table-striped tbody tr:nth-of-type(even){background-color:#d5d5d5}.table-light{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #000;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #000;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #000;--bs-table-hover-bg: #cfc}@media only screen and (min-width: 768px){.table th.position-sticky{top:49px}}select#fieldsSelect,textarea#sqlquery{height:20rem}.nav-pills .nav-link{margin:.1em;padding:.2em;font-weight:bold;color:blue}.nav-pills .nav-link:hover{color:red;background-color:#e5e5e5;border-radius:.3em}.nav-pills .nav-link img{margin-left:.1em;vertical-align:middle}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:blue;background-color:#e5e5e5;border-radius:.3em}.nav-tabs{margin:1.1em .2em 0;font-weight:bold}.nav-tabs .nav-link{margin:.1em .2em 0;padding:.1em .4em;border-color:#d5d5d5 #d5d5d5 #f5f5f5}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{margin:0;padding:.1em .6em .2em}.nav-tabs .nav-link.active:hover,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-item.show .nav-link:hover,.nav-tabs .nav-item.show .nav-link:focus{color:red}.navbar-nav{font-weight:bold}.navbar-nav .icon{vertical-align:middle;margin-left:.1em}.navbar-nav .nav-item{border-bottom:1pt solid #000}.navbar-nav .nav-item.active .nav-link{margin:0;background-color:#f5f5f5;padding:2px 4px}.navbar-nav .nav-link{margin:2px 2px 0;padding:2px 2px 0;background-color:#e5e5e5;border-color:#d5d5d5;border-style:solid;border-width:1pt 1pt 0 1pt;border-radius:.4em .4em 0 0}.navbar-nav .nav-link:hover{margin:0;background-color:#f5f5f5;padding:2px 4px}.card{margin-top:2rem;margin-bottom:.5rem}.card>.card-header+.card-body{padding-top:0}.card-header{background:#e5e5e5;position:relative;top:-1rem;margin:0 5px;width:-webkit-max-content;width:-moz-max-content;width:max-content;border:1px solid #000;font-weight:bold;color:#444}#maincontainer .card-header{position:static;width:auto;margin:0;border:0}#maincontainer .card{background:none;border-top:none;border-bottom:none;border-left:none;border-right:.3em solid #d3dce3}#maincontainer .card>.card-header+.card-body{padding-top:1rem}#maincontainer .card-header{color:inherit;background-color:#d3dce3;padding-top:.1em;padding-bottom:.1em;font-weight:bold;font-size:120%}#maincontainer .card-body{padding:1rem;padding-bottom:0}.breadcrumb-navbar{padding:.1rem 2.2em;margin-bottom:0;background-color:#fff}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-right:.5rem}.breadcrumb-navbar .breadcrumb-item .icon{margin:0}.breadcrumb-navbar{font-weight:bold}.breadcrumb-navbar .breadcrumb-comment{color:#d6d6d6;font-weight:bold;font-style:italic;text-shadow:none}.alert{text-align:right;padding:.1em 40px .1em .1em}.alert h1,.alert .h1{border-bottom:2px solid}.alert-primary{color:#000;background-color:#ffd;background-image:none;border-color:gold}.alert-primary h1,.alert-primary .h1{border-color:gold}.alert-success{color:#000;background-color:#f0fff0;background-image:none;border-color:lime}.alert-success h1,.alert-success .h1{border-color:lime}.alert-danger{color:red;background-color:#ffc;background-image:none;border-color:red}.alert-danger h1,.alert-danger .h1{border-color:red}#maincontainer .list-group{padding-right:40px;margin:1rem 0 0}#maincontainer .list-group-item{display:list-item;border:none;padding:0}#li_select_server.list-group-item,#li_change_password.list-group-item,#li_select_mysql_collation.list-group-item,#li_user_preferences.list-group-item,#li_select_lang.list-group-item,#li_select_theme.list-group-item{display:block;margin-right:-20px}.modal-header{background-image:linear-gradient(#f8f8f8, #d8d8d8)}.modal-footer{background-color:#d3dce3}@media print{.hide{display:none}body,table,th,td{color:#000;background-color:#fff;font-size:12px}a:link{color:#000;text-decoration:none}img{border:0}table,th,td{border:.1em solid #000;background-color:#fff}table{border-collapse:collapse;border-spacing:.2em}thead{border-collapse:collapse;border-spacing:.2em;border:.1em solid #000;font-weight:900}th,td{padding:.2em}thead th{font-weight:bold;background-color:#e5e5e5;border:.1em solid #000}#page_content{position:absolute;right:0;top:0;width:95%;float:none}.sqlOuter{color:#000;background-color:#000}.cDrop,.cEdit,.cList,.cCpy,.cPointer{display:none}table tbody:first-of-type tr:nth-child(odd){background:#fff}table tbody:first-of-type tr:nth-child(odd) th{background:#fff}table tbody:first-of-type tr:nth-child(even){background:#dfdfdf}table tbody:first-of-type tr:nth-child(even) th{background:#dfdfdf}.column_attribute{font-size:100%}} -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZW1lLmNzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcm9vdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yZWJvb3Quc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy92ZW5kb3IvX3Jmcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uL3Njc3MvX3ZhcmlhYmxlcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYm9yZGVyLXJhZGl1cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190eXBlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19saXN0cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jb250YWluZXJzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19jb250YWluZXIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdGFibGVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190YWJsZS12YXJpYW50cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19sYWJlbHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS10ZXh0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY29udHJvbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLXNlbGVjdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mb3JtLWNoZWNrLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tcmFuZ2Uuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZmxvYXRpbmctbGFiZWxzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2lucHV0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19mb3Jtcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19idXR0b25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX3RyYW5zaXRpb25zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Ryb3Bkb3duLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2J1dHRvbi1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXYuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2NhcmQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYWNjb3JkaW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JyZWFkY3J1bWIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fcGFnaW5hdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19iYWRnZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hbGVydC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYWxlcnQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jbG9zZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19tb2RhbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYmFja2Ryb3Auc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fc3Bpbm5lcnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2NsZWFyZml4LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fY29sb3JlZC1saW5rcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3JhdGlvLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fcG9zaXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19zdGFja3Muc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL192aXN1YWxseS1oaWRkZW4uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3N0cmV0Y2hlZC1saW5rLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdGV4dC10cnVuY2F0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190ZXh0LXRydW5jYXRlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fdnIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3V0aWxpdGllcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL3V0aWxpdGllcy9fYXBpLnNjc3MiLCIuLi9zY3NzL19jb21tb24uc2NzcyIsIi4uLy4uL3BtYWhvbW1lL3Njc3MvX2VudW0tZWRpdG9yLnNjc3MiLCIuLi8uLi9wbWFob21tZS9zY3NzL19naXMuc2NzcyIsIi4uL3Njc3MvX25hdmlnYXRpb24uc2NzcyIsIi4uLy4uL3BtYWhvbW1lL3Njc3MvX2Rlc2lnbmVyLnNjc3MiLCIuLi8uLi9wbWFob21tZS9zY3NzL19jb2RlbWlycm9yLnNjc3MiLCIuLi8uLi9wbWFob21tZS9zY3NzL19qcXBsb3Quc2NzcyIsIi4uL3Njc3MvX2ljb25zLnNjc3MiLCIuLi9zY3NzL19yZWJvb3Quc2NzcyIsIi4uL3Njc3MvX3RhYmxlcy5zY3NzIiwiLi4vc2Nzcy9fZm9ybXMuc2NzcyIsIi4uL3Njc3MvX25hdi5zY3NzIiwiLi4vc2Nzcy9fbmF2YmFyLnNjc3MiLCIuLi9zY3NzL19jYXJkLnNjc3MiLCIuLi8uLi9ib290c3RyYXAvc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vc2Nzcy9fYWxlcnQuc2NzcyIsIi4uL3Njc3MvX2xpc3QtZ3JvdXAuc2NzcyIsIi4uL3Njc3MvX21vZGFsLnNjc3MiLCIuLi8uLi9wbWFob21tZS9zY3NzL19wcmludC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1DQUEsa0JBUUksQ0FBQSxvQkFBQSxDQUFBLG9CQUFBLENBQUEsa0JBQUEsQ0FBQSxpQkFBQSxDQUFBLG9CQUFBLENBQUEsb0JBQUEsQ0FBQSxtQkFBQSxDQUFBLGtCQUFBLENBQUEsa0JBQUEsQ0FBQSxnQkFBQSxDQUFBLGtCQUFBLENBQUEsdUJBQUEsQ0FBQSxzQkFJQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxxQkFJQSxDQUFBLHVCQUFBLENBQUEscUJBQUEsQ0FBQSxrQkFBQSxDQUFBLHFCQUFBLENBQUEsb0JBQUEsQ0FBQSxtQkFBQSxDQUFBLGtCQUFBLENBQUEsOEJBSUEsQ0FBQSxpQ0FBQSxDQUFBLDZCQUFBLENBQUEsMkJBQUEsQ0FBQSw2QkFBQSxDQUFBLDRCQUFBLENBQUEsNkJBQUEsQ0FBQSx5QkFBQSxDQUFBLDZCQUdGLENBQUEsdUJBQ0EsQ0FBQSw0QkFDQSxDQUFBLCtCQUNBLENBQUEscU5BTUEsQ0FBQSw4QkFDQSxDQUFBLHlGQUNBLENBQUEsaUNBUUEsQ0FBQSw0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T0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFNBUEosNkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFlBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSwwQkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFlBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFlBUEosMEJBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxZQVBKLDJCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsWUFQSiw2QkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFlBUEosNEJBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSixnQ0FPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSixnQ0FPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDBCQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxlQVBKLDJCQU9JLENBQUEsYUFQSiwwQkFPSSxDQUFBLGdCQVBKLDRCQU9JLENBQUEsQ0FBQSwwQjlDUFIsZ0JBQUEsc0I4Q09RLENBQUEsY0FQSixxQkFPSSxDQUFBLGVBUEoscUJBT0ksQ0FBQSxhQVBKLHlCQU9JLENBQUEsbUJBUEosK0JBT0ksQ0FBQSxZQVBKLHdCQU9JLENBQUEsV0FQSix1QkFPSSxDQUFBLFlBUEosd0JBT0ksQ0FBQSxnQkFQSiw0QkFPSSxDQUFBLGlCQVBKLDZCQU9JLENBQUEsV0FQSix1QkFPSSxDQUFBLGtCQVBKLDhCQU9JLENBQUEsV0FQSix1QkFPSSxDQUFBLGNBUEosd0JBT0ksQ0FBQSxhQVBKLDZCQU9JLENBQUEsZ0JBUEosZ0NBT0ksQ0FBQSxxQkFQSixxQ0FPSSxDQUFBLHdCQVBKLHdDQU9JLENBQUEsZ0JBUEosc0JBT0ksQ0FBQSxnQkFQSixzQkFPSSxDQUFBLGtCQVBKLHdCQU9JLENBQUEsa0JBUEosd0JBT0ksQ0FBQSxjQVBKLHlCQU9JLENBQUEsZ0JBUEosMkJBT0ksQ0FBQSxzQkFQSixpQ0FPSSxDQUFBLFVBUEosZ0JBT0ksQ0FBQSxVQVBKLHFCQU9JLENBQUEsVUFQSixvQkFPSSxDQUFBLFVBUEosbUJBT0ksQ0FBQSxVQVBKLHFCQU9JLENBQUEsVUFQSixtQkFPSSxDQUFBLDBCQVBKLHFDQU9JLENBQUEsd0JBUEosbUNBT0ksQ0FBQSwyQkFQSixpQ0FPSSxDQUFBLDRCQVBKLHdDQU9JLENBQUEsMkJBUEosdUNBT0ksQ0FBQSwyQkFQSix1Q0FPSSxDQUFBLHNCQVBKLGlDQU9JLENBQUEsb0JBUEosK0JBT0ksQ0FBQSx1QkFQSiw2QkFPSSxDQUFBLHlCQVBKLCtCQU9JLENBQUEsd0JBUEosOEJBT0ksQ0FBQSx3QkFQSixtQ0FPSSxDQUFBLHNCQVBKLGlDQU9JLENBQUEseUJBUEosK0JBT0ksQ0FBQSwwQkFQSixzQ0FPSSxDQUFBLHlCQVBKLHFDQU9JLENBQUEsMEJBUEosZ0NBT0ksQ0FBQSxvQkFQSiwwQkFPSSxDQUFBLHFCQVBKLGdDQU9JLENBQUEsbUJBUEosOEJBT0ksQ0FBQSxzQkFQSiw0QkFPSSxDQUFBLHdCQVBKLDhCQU9JLENBQUEsdUJBUEosNkJBT0ksQ0FBQSxnQkFQSixtQkFPSSxDQUFBLFlBUEosa0JBT0ksQ0FBQSxZQVBKLGtCQU9JLENBQUEsWUFQSixrQkFPSSxDQUFBLFlBUEosa0JBT0ksQ0FBQSxZQVBKLGtCQU9JLENBQUEsWUFQSixrQkFPSSxDQUFBLGVBUEosa0JBT0ksQ0FBQSxRQVBKLG1CQU9JLENBQUEsUUFQSix3QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxRQVBKLHNCQU9JLENBQUEsUUFQSix3QkFPSSxDQUFBLFFBUEosc0JBT0ksQ0FBQSxXQVBKLHNCQU9JLENBQUEsU0FQSix3QkFPSSxDQUFBLHlCQUFBLENBQUEsU0FQSiw2QkFPSSxDQUFBLDhCQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLDZCQUFBLENBQUEsU0FQSiwyQkFPSSxDQUFBLDRCQUFBLENBQUEsU0FQSiw2QkFPSSxDQUFBLDhCQUFBLENBQUEsU0FQSiwyQkFPSSxDQUFBLDRCQUFBLENBQUEsWUFQSiwyQkFPSSxDQUFBLDRCQUFBLENBQUEsU0FQSix1QkFPSSxDQUFBLDBCQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLCtCQUFBLENBQUEsU0FQSiwyQkFPSSxDQUFBLDhCQUFBLENBQUEsU0FQSiwwQkFPSSxDQUFBLDZCQUFBLENBQUEsU0FQSiw0QkFPSSxDQUFBLCtCQUFBLENBQUEsU0FQSiwwQkFPSSxDQUFBLDZCQUFBLENBQUEsWUFQSiwwQkFPSSxDQUFBLDZCQUFBLENBQUEsU0FQSix1QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDBCQU9JLENBQUEsWUFQSiwwQkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFlBUEosMkJBT0ksQ0FBQSxTQVBKLDBCQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxZQVBKLDZCQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsWUFQSiw0QkFPSSxDQUFBLFFBUEosb0JBT0ksQ0FBQSxRQVBKLHlCQU9JLENBQUEsUUFQSix3QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxRQVBKLHlCQU9JLENBQUEsUUFQSix1QkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSwwQkFBQSxDQUFBLFNBUEosOEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosNkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosOEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosd0JBT0ksQ0FBQSwyQkFBQSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxnQ0FBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxnQ0FBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxTQVBKLGdDQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLGdDQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLCtCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLCtCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLGVBUEosMkJBT0ksQ0FBQSxhQVBKLDBCQU9JLENBQUEsZ0JBUEosNEJBT0ksQ0FBQSxDQUFBLDBCOUNQUixpQkFBQSxzQjhDT1EsQ0FBQSxlQVBKLHFCQU9JLENBQUEsZ0JBUEoscUJBT0ksQ0FBQSxjQVBKLHlCQU9JLENBQUEsb0JBUEosK0JBT0ksQ0FBQSxhQVBKLHdCQU9JLENBQUEsWUFQSix1QkFPSSxDQUFBLGFBUEosd0JBT0ksQ0FBQSxpQkFQSiw0QkFPSSxDQUFBLGtCQVBKLDZCQU9JLENBQUEsWUFQSix1QkFPSSxDQUFBLG1CQVBKLDhCQU9JLENBQUEsWUFQSix1QkFPSSxDQUFBLGVBUEosd0JBT0ksQ0FBQSxjQVBKLDZCQU9JLENBQUEsaUJBUEosZ0NBT0ksQ0FBQSxzQkFQSixxQ0FPSSxDQUFBLHlCQVBKLHdDQU9JLENBQUEsaUJBUEosc0JBT0ksQ0FBQSxpQkFQSixzQkFPSSxDQUFBLG1CQVBKLHdCQU9JLENBQUEsbUJBUEosd0JBT0ksQ0FBQSxlQVBKLHlCQU9JLENBQUEsaUJBUEosMkJBT0ksQ0FBQSx1QkFQSixpQ0FPSSxDQUFBLFdBUEosZ0JBT0ksQ0FBQSxXQVBKLHFCQU9JLENBQUEsV0FQSixvQkFPSSxDQUFBLFdBUEosbUJBT0ksQ0FBQSxXQVBKLHFCQU9JLENBQUEsV0FQSixtQkFPSSxDQUFBLDJCQVBKLHFDQU9JLENBQUEseUJBUEosbUNBT0ksQ0FBQSw0QkFQSixpQ0FPSSxDQUFBLDZCQVBKLHdDQU9JLENBQUEsNEJBUEosdUNBT0ksQ0FBQSw0QkFQSix1Q0FPSSxDQUFBLHVCQVBKLGlDQU9JLENBQUEscUJBUEosK0JBT0ksQ0FBQSx3QkFQSiw2QkFPSSxDQUFBLDBCQVBKLCtCQU9JLENBQUEseUJBUEosOEJBT0ksQ0FBQSx5QkFQSixtQ0FPSSxDQUFBLHVCQVBKLGlDQU9JLENBQUEsMEJBUEosK0JBT0ksQ0FBQSwyQkFQSixzQ0FPSSxDQUFBLDBCQVBKLHFDQU9JLENBQUEsMkJBUEosZ0NBT0ksQ0FBQSxxQkFQSiwwQkFPSSxDQUFBLHNCQVBKLGdDQU9JLENBQUEsb0JBUEosOEJBT0ksQ0FBQSx1QkFQSiw0QkFPSSxDQUFBLHlCQVBKLDhCQU9JLENBQUEsd0JBUEosNkJBT0ksQ0FBQSxpQkFQSixtQkFPSSxDQUFBLGFBUEosa0JBT0ksQ0FBQSxhQVBKLGtCQU9JLENBQUEsYUFQSixrQkFPSSxDQUFBLGFBUEosa0JBT0ksQ0FBQSxhQVBKLGtCQU9JLENBQUEsYUFQSixrQkFPSSxDQUFBLGdCQVBKLGtCQU9JLENBQUEsU0FQSixtQkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxTQVBKLHVCQU9JLENBQUEsU0FQSixzQkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxTQVBKLHNCQU9JLENBQUEsWUFQSixzQkFPSSxDQUFBLFVBUEosd0JBT0ksQ0FBQSx5QkFBQSxDQUFBLFVBUEosNkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFVBUEosNEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFVBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFVBUEosNkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFVBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLGFBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFVBUEosdUJBT0ksQ0FBQSwwQkFBQSxDQUFBLFVBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFVBUEosMkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFVBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFVBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFVBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLGFBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFVBUEosdUJBT0ksQ0FBQSxVQVBKLDRCQU9JLENBQUEsVUFQSiwyQkFPSSxDQUFBLFVBUEosMEJBT0ksQ0FBQSxVQVBKLDRCQU9JLENBQUEsVUFQSiwwQkFPSSxDQUFBLGFBUEosMEJBT0ksQ0FBQSxVQVBKLHdCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosNEJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosMkJBT0ksQ0FBQSxhQVBKLDJCQU9JLENBQUEsVUFQSiwwQkFPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsYUFQSiw2QkFPSSxDQUFBLFVBUEoseUJBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosNEJBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSiw0QkFPSSxDQUFBLGFBUEosNEJBT0ksQ0FBQSxTQVBKLG9CQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSxTQVBKLHVCQU9JLENBQUEsU0FQSix5QkFPSSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxVQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxVQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxVQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxVQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLHdCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosNEJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosMkJBT0ksQ0FBQSxVQVBKLHlCQU9JLENBQUEsVUFQSiw4QkFPSSxDQUFBLFVBUEosNkJBT0ksQ0FBQSxVQVBKLDRCQU9JLENBQUEsVUFQSiw4QkFPSSxDQUFBLFVBUEosNEJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSixnQ0FPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSixnQ0FPSSxDQUFBLFVBUEosOEJBT0ksQ0FBQSxVQVBKLDBCQU9JLENBQUEsVUFQSiwrQkFPSSxDQUFBLFVBUEosOEJBT0ksQ0FBQSxVQVBKLDZCQU9J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 */ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/arrow_ltr.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/arrow_ltr.png deleted file mode 100644 index cd79ab42f04a594dbf727e34795009f3e99fb62e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2%@N{M0&tl#Zv1V@L&KvP94Wd(mDdM=eR# z<`9#vqR0OhJFjv(Fu^eA%7(zh9xctRJxmPTewN2A?=GnX>SOS9^>bP0l+XkKYlIuC diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_calendar.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_calendar.png deleted file mode 100644 index 8dfe6287effd78b12fdbbeb7aab4e30e04a95946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ii4<#Ar*{!CpNMjFc5J5?S0u_ z>gVze{=4dTalSfc_%>HcE>Ora*Llfrt-Y6Lv&_(6R3LI<4U+4Ia*G4t;sywtCq7$EgMH zZJO}Hya5l5YQS0-0A5=*!6>Q=j>)~aqFoKvx&T1Bc4#}S2ED-@ZYTw>mH_K`TBL`e~`3$kFTcp@J#FC$aT5HssaG%&x|VZ)2SY7Z>B5) zdp>^Sp6~(Drn`mi&!?5gtHM@2Z#Lt#vh4osL_2tI`p~mOEp4iY&Du06c)Au0ET9RVU-H@*S3R00000NkvXXu0mjfIOfNc diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_comment.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_comment.png deleted file mode 100644 index fa2ee9420af9d4751c5fd0068766b8aa3d6a68c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 298 zcmV+_0oDGAP)k^NNBWDxb1f=TL5Mzs z_V&e3pYJ|Iq(Ed>_#U6{J|dt3{pl{+Qc?piFm0kfbtfgVmX?hE>HUBI7O-5hurNt> zLOh<>7@!ABr8w9}gT0kYu`Qv zhowx(N_>zT1L|&1d`_^!&Fv^_8>K3e`QF{A`&%-na^$nXoD4}b+dBoH-9JXR$8zAa wz^HUcg*b1?w{l_NM2_UY0-}$>iHbx#13DV|@5c(B=>Px#07*qoM6N<$g54pB#sB~S diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_deltbl.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_deltbl.png deleted file mode 100644 index 2144bce45e265017f78533eb84413b2e79a4be55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 211 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!9W@a@|Lkr1X3NIE{-7; zjB_WlGah!}VLp12rRUkjDGh}!ZJZ)!--mzOV-}sB`ha`?@rI_>2M%%1|7QM@|5tnS zfrCkB17mw2a~SX4lm82Q4fYB>I?#UD`CUG1Xm0vTgR|b+jmh6^{iPpGZhQOYbNY>C zTb-Ue6ik!|m}6VLaEY(kW6$DkO!kpBiNBY6|C-d{ufl#jda~3WQ(KVRJYD@<);T3K F0RaBlQ8oYo diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_export.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_export.png deleted file mode 100644 index 9a43efdfa3d0759b0c39a3cc4d4ea19a4088b187..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`iJmTwAr*{k`x&_!0(hLt|4Uaa zuV3CeLEzz`1pXGLue+mIEqwh#h5zjjjn~lGImtrDcA+l6_e)FL#SSIsWF5}WeKu!d ztlR&&VlLcseqLwFkBAV+h+}BjwBGX5&UqE@?8GGwZ0+ePUvm&>8H1;*pUXO@geCwe CX*Qz( diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_globe.gif b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_globe.gif deleted file mode 100644 index ef03dcf0615ea118c278e567875391afc867f3b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1045 zcmZ?wbhEHb6krfw_|Cxa^4-smU;lmi^5y5xpI^Uz{ru(UvzMRVeE4<#%F{C!pTs4# z$yrSDEW7SieofkO(}81mzkU0b+Shcjc=6%UA53 zw&;j!;br&IYjZAqz4!X_v$ub0C-0H-KkV!~(W~Nm`?Os_^|!*BA3c2dBCz4XycNe) z!;U|A{CerW_YJFml~23j8a%t8ZuPNCuNGbV&+oF2*JUq*+%)6Flgb`j&fof&-21F^ z$Nz$^GnEszH?(f_DLB-#^2L@;u)0ZB;E|~sSG5Dx;_Jt#7?%a9s;^Wsp?VEp9&V0E2{@?ZMkFI*~H?r-~j~_p@ zqfc(!bmZ8BKX;#ga}AxHJ?-PCZ~wo4|Ni02&$6m%8#f-Vn|)i-=V0rWXG?GWPwRiJ zWzku&=udLb%baPSk6!-JKI_1hs}C*G&b@f|+dS=TcKhiwx4!K^_fE%m&WvOK_nm&h z>#}ds;s1t-XAI&Fa$U;%(C6>}pTGT)HRWSS?&@jlpBN?{d-C{YMCq1*iVMw? zcPKedFPm_qyn6b<<9B=J99nw#@9oE5nJss8Eq##LxTm3MedC({R>`}Q8jipI@N34& z|GM!fbmES-YDhjyp_oS%L zmN=wv&7euN=fQt}iHMeH5sQb7Ypl;#+SwZ(TUmXsvMKFd;>Z140~&5hB)17X3;e;T zJh9<-;ErotcT8_f|45u0>(u<%z`kkfg$G(Zd&`w?MkyS4)#{qv8>?&}B(1kpC&)`D zx{>#H(+sh2rqDX!5AV2tI5yp8v+0Um@N;*=L*D&?y4#r;nC^Bxd6xR-FVK+;p00i_ I>zopr0Mn3BfdBvi diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_index_add.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_index_add.png deleted file mode 100644 index 78b1216a3338dd08ad3d7ec59f0c47162d326918..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 313 zcmV-90mlA`P)WKoUyEP%|dw*=sO8R4j4WvWMsai|9W81Q7HE*&NI{IOPc&o%#m2_IXW;b00000 LNkvXXu0mjfLl%pW diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_insrow.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_insrow.png deleted file mode 100644 index ce32a0a1ead65008a802fd7cdc2fadcec949f2a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!9W@a@|Lkr1X4ksE{-7; zjB_Wk3Laq)U_O7jy6aZPFQa_TyC)wQUJ4HBC>p8{hEGbhx1% z&Xk|QlVQ_&?>u8=YfW2?_fJ`#O$`5nKCNBAYS*;+neKvxKR~v4y85}Sb4q9e075u5 A9smFU diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_key.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_key.png deleted file mode 100644 index 9af08692ae3b858901edbbd085a4724ed2fe09d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`@t!V@Ar*|t3%ESIy?^&}GcUbp z7{hn8VW#o<1BN~PQ BHH-iN diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_move.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_move.png deleted file mode 100644 index 7ed238cf45e2304dea577d3ee46cfc79f57ba942..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!3?PkB@DWn!O5XO5g$(% z$B+ufWDnhos+@*P5*e7J($3j5_nf%suxzq~gv5sIAN^bnQVOdIvmDq2czG-sGR+)z w&ML@G&=B*m+0+xBYOGXZ3I_^Y3}ad?~+%Df;rND%!#>T9D4MG^6I0% zsbJ&?!F<6CV2!vBb&O1Bf(^`&U5(48Gr*fEKR7iL8eH134S4%& pJE4KPpT`LpfCs}AV~SA&005n5{N2E)!cqVL002ovPDHLkV1irGV~zj- diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_relations.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_relations.png deleted file mode 100644 index 7c16044b265d908b91ac14dfaae8062390f82255..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`!JaOTAr*|t3)p|y7eA9+GehI7 zLQ@R$KjqCA86)J>4@_~n){@2GsGhW|!G?K5lGmRT4pZbg84l?wym38Lr(!PKprXmQ m`2Q6SAnsWDzrx@t1H+l0BEQnu4UK@tGkCiCxvX>IE+tTc+7Nw zjpImWvzchEWICOq8RL^zdMKroT;E(y(g_BIA0O`)dxtw;m8xRr?6{uiqww$VPsZ&} z(E1JBzTFmJw}q$Y2le0i)2Q1*<$thuxckPPQ5YXy0t8Oqqq!i`q5uE@07*qoM6N<$ Eg3ED>sQ>@~ diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_save.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_save.png deleted file mode 100644 index c35f004ad37c79f86e7cb0d688a23e7cf0099987..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 583 zcmV-N0=WH&P)Izt5MxOpsMkj$+PB^cdt2z9VF#UO~Q0tqBIG0LL-(8ko4=FZEnUU>VR z55D~7i>bv`PRl%&>fKRRwXE*F`?k+N{q+8aA6b9;&U{7*vEK4p<~c(X~d#dLqgpx)-rIQ2ZxIw6)}nF)GR`|s);Pc-ITKmZuqxY_L7xO{i> zJd?7Eo9jGo*BcXN0|IX6?T}CnU^(E5h7;-H-2plzJYYgR*KSBq5=InGWVbFc{13iv VI`2oq|E2%{002ovPDHLkV1f|J7@q(D diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_saveimage.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_saveimage.png deleted file mode 100644 index 0bc614a4f88d98c31a935c32830dbb910c4fea6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 675 zcmV;U0$lxxP)`RJ3T)j#DFUbw%lX`e*I-7R?pW)mBly!Wp)z5+XQ*mp*!l~cRNnpb7h`; z?=P-Da|af6&ubH?%KM2enjl-34O@HA`K&|b8>R;VfEPddf8i+u^gT>;YeaP62;Wa# zLR4jTZ0jfZHy2WaCMq{yz9*`N0Vzh?f%l&Nu*R7g0vt8>u>eSS>GI(V31i=I!^6Lk z2!yC;ROWVUV9?GKC(HQP*jk;ShL3?X$pAx$hzO>JnG!-nJ$u1rCOx!SZMXII2N4Va zV^DoeCXUOGTZN!Ckbr@SQo5X*9{hu;{t%ZtdHC^He>tFzw#%X?j%ur=WGEx<_~cU7 zZf}Z^Fj4)<#rxbwLP_Oo+=VCYaUIL>#`o{q=Ig_HD-Sqyw|!YX-v|=ujyGc6l>+S? zoCsoOEX&@Pzxehx8@CQzy;z;ntxC`aQAI4GQt{m%zc8cUFcUSBLHj+}Kx_a2002ov JPDHLkV1lZNErTJ-)}C9 zFM{T_8F>4bLtQ5hZoXwm$s6QM@PE;8R9qvv2UoFraEt2pMRn?=%%Py)oSfBeZ+x7a)NyivWMpS^b92DI zzuDi~&(F-JtgF@7*0r^?e0+TB>gvqQ%;eBGsxlp;|m&B1kl>H+o^f~cszBu1x)Z;n}YL{kyaNhxhCLH_w*rA<6}@ z9bW%8UY_uOW(#{D7RwOA{-NpY z%`d^T=k9#G|8v@2-hw+0p97og-WwS{v%FW+D&8pg%F$|hugs|2-tfgHUg^Wz`5p~t?@kii%y3B7(>|8r<==-azp5wgoUZsK6lg1h Mr>mdKI;Vst048rd-v9sr diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_trigger_add.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_trigger_add.png deleted file mode 100644 index 920a2a4fb9be66e9bbfdcdb8c666b8e1f7389563..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VG9P)vF7=?4~^R~8elUHD?1Vq$Mp{<#eUqj7K_Kk8Plm(C58(8<6S#Ec0&d>Aj`xtSA`qDN zd3IjLgXGi%I6bykkmT_@9vIA(&-JDXSRKX>5g05LJ-(^|W3nc^piV6=DHvOxj z()`qdf`TUWy|}!9YJh^0oF3mTVoZ$CIz1~H2afCoUFrFkyTFoJljsCpYEfw(MS!G~ z_*WDWMMmFwo%RZ)%5kbMyP&zI<(1$B)$^SE%m-x7&P{*C2^vsMs5T2^ld&ps2IfT! z#{}g7jM>yD?L!x~$~L~BkPjZ+hqo)o-B)R34^lId?o(H`q%4BGbS8`k;<4wF9g&Vj z7$4adofo%cZz5Q`e#NzwtCwQcnq@CHY+8GI?fRA52u$-pb1{`0gzEiKs6G?}5_8T) zq;oz29{KCcqpC< zLn0C3FA)d?f>RVDA0a3ykT+yqnj^o{G;vL%(VUB?qt}v|==VOTi@O3Mpg6&C0IFDl9VTTxYdzqGut4rDMWJ%G{$ oD1Bga0ZAzlR~QWX%tROi07b9jSL3ENe*gdg07*qoM6N<$f^Q?fk^lez diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrcheck.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrcheck.png deleted file mode 100644 index dae06dab6a583eb6ff6822ddea709369f7b79faf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 239 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Yk*IPE09i0O9PTOCtF{gW_NCa z<^Qez|96KP&t&+&)ZzbXw{Ht=9$neBeSE3>&5Ld(tpdP(%;nUiDlp3 zey}?J+v7do^zO9WaTU2C@qAGQ^O8%qOxjBAc0}+#&neOqJG}FI@6nF;n$MCNE`9$~ jck5HB?%qbt1;03}Y?zsbP0l+XkKxg=vx diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrdrop.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_usrdrop.png deleted file mode 100644 index b407e7bf1b9ba4c94ffd8dda35a7bb54906d90fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}NPtg>E08|Jz|hdpkd~GPWZ#@@ zeRZ1Mxe1p4xBCCz9r}N%!~fN8-xk_Dy0Yi_1l>O~P0pP8KXc}p-K{1Enl!%u{-2gM z)7UsII=Lh&sW>XRI6R>+F}M7|wFXn5S&St?e!&b5&u)MW&hT_`45?tO>D|iM5Fp@u zzM%X@{e|~oA7@=w`M|9-ML;Pq>-5alPJ!;omVZ-lBk26RwX4W)+cxOM* OP6kg`KbLh*2~7YL&Tz{B diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_view.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_view.png deleted file mode 100644 index 204b10d60013ad838d3ff8fe08c1672575129538..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538 zcmV+#0_FXQP)~877<)b-8d4qd-iFKJZNs4;r+{R+>N7r%Tn?N5&X)- z``P~he(rBODz346aCKE-t!`iB!|FZ;V;s{`!)YfX!$iWwvBP94(5^!;cv zZA!XZ2q5d|+^d81qsPsQ#>yFE!MG0Fv3;80P8Hjtpjs5n|DcXO)A{_6@8i48KX2## zydBl23F_1^*p>o(H_m^b$MKi{w%+=(>gwkO7d}lp{l5Fy`=*0$>kqze0HdbksGbIL c2qK6E01V2n3*&v*?f?J)07*qoM6N<$f@O9IyZ`_I diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/b_view_add.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/b_view_add.png deleted file mode 100644 index 2a6cfaf0b916988d1a657515c84e71352bd3c251..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 611 zcmV-p0-XJcP)wT+mEri#ZYyU#`Q+Ee|>6P;6atiB7#I0Gm-)P1+5} zj#|Pmy0YDeQdC?N{<^{K&5l0KiMEjIUUA4Vc>kNc@lngJ-eR z&_vukNr9|5y;4HV{c(P`{D6|$D0aSr>fkj1p}5rUJFe-zgo~y!;*HL!l~SQN@b(yA z>b#1lNC8)o900E6a{DKc`|oFN53N$%JWWR36mgZ4gxr_lc}s%B)iM6_dYvch-IW5e x8AOBls9^w#7JS$*GxEP>mI6o+sS7RHg=t9X z+*?E$;5_{a2*V7)Gyur_j{|@VfaA>cB>=|A0SUn{2*U^OMx7zsu2HsaE#j}w*wHgD z%m5DQ`3LYXoGX*F9l+r{6bin8;#dH2!MmvF8-q)?{DESPv)_Bp9k1E*P+sKD>mrdte)Id=Y|qzTRyvfl zDYWUzp=Q@Y2CWrMOOADhDB5yA_gK;Cwet(pPQgv0FIs)&T@4gBS9S?}ejm{jURa}{ sy-{@e(U#=KYb~5NRvuDkzc7urUZq>SO6GV&aVf}sp00i_>zopr0I1VQk^lez diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_edit.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_edit.png deleted file mode 100644 index 722afc17353d572620adc38f89555a1038670dff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAm`Z~Df*JltPgL3pid-fxO?go-}TrQ zH?|%6Is4hUv#n9x50qIHYIZoBRO66W3}Anx%;I$_+xXDLzlRpcM|6LX;kc6YON@~r XcFK*_<`s(nKu+;=^>bP0l+XkKBR@Zx diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_export.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_export.png deleted file mode 100644 index bfcacf46b3a4131fc35ee07b1a1f8837d11eb934..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6f;?RuLn;`1`xx0640%{S&);Kl zBKmp2HP`JaP8%a9ADhG`l;P{6a5B*FwQ>7_^`7+|j<@GC9L;%kVLg9KTzmoBQT^to n-iNa?HMm5&r$+`i8J$8;rI-{=~>%Zh7m#`souuwtKqz KxvX>-1Q;lC|?Tpu+(0QslB%Bp%gpe#~WPqxjIFX2a0l% zq TngCVY00000NkvXXu0mjf$T4vq diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_sbrowse.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_sbrowse.png deleted file mode 100644 index c820422c87d2769a9bf0c169d935c322fa5ebad9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V6Od#Ihj0}$r&-b3^`_}+e&*16m=d#Wzp$P!Jh8bi4 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_select.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/bd_select.png deleted file mode 100644 index 2cc94983e40ac091a1171077954e35f53a1bdc81..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 310 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|Y$ZW{!9W@a@|Lkr1X8a(T^vIy z7?Tv(bJV01Oy*dA=4qO6lfiDe;>ARbuDrj#`;Y%zT*kaL_x842*6rKN{6E!{eBUoD z(k0uit2(Ko_gacVRK3U@hMRf$`-0^8(o2?I*>179%Kg_qp*aoJU);W>oc#98hh1UP z>&za`nqA@oPJG*Mq?j!JUA)V3*>i@Q=YljoKDvCGWwC0f?}S*%i_#47t5%!r@!fD! z_=feQ_Y1e{-@SUv=vlzuR3?{|Eq&@!tTvjPIlgE9?dtSm|Kfip-mOm<&kG$23ICfq z>GVU^JeEk|{cHYgKBfA6%Uh1y8xo%ib!f;*d-&I+FfbTyxgvY~_a_;U_dQ+xT-G@y GGywn@6M#Da diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/centralColumns.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/centralColumns.png deleted file mode 100644 index 4b94c9f79fd7c295a137c5423d169008ee25224e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 586 zcmV-Q0=4~#P){%OU+qP}nHe+0Lwy_E~JlodVwypO4vt7x{o0>wKQ51##C;oc@`>SGD zSeW+3ix-A}I)l|guVO-Bq)ogT?m5M9tR_~qJ{>&ep0fr~&baH^C*I1HkOeRsy zn$%k5^sHSMC;WB+hFg=&h1whqRG5-M^_iUTviu@Kj%G1*HAiVN zY2=mMxjkOLw@ojlFeg zX=&u{?oJQG5^6{F?`pVl<3PjX21-asnC$0lG+e)a{glaMGS=1A?P$`ZNi!^|&pdtlv;o5~N!8WWURY29nu8n^ zUEy?455Lo3PdE>D2c(I2!{t+t=1RtP`lm!67`{uj*el-2g6ZVG6V~9z_U+pVqjpPfPw{0{%|4O7)}I@ zKmwZUfh^#TBewv{0s;bhs_8>uKn-fqOfbQpz|bc!NVw@FNz#RX{u*b@n4yIzBqW4? Y1J$LIHcH%D5C8xG07*qoM6N<$f*#NdZU6uP diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/east-mini.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/east-mini.png deleted file mode 100644 index 6685939edcb31bfc4a2adf2b61df432f9bdc027d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 287 zcmV+)0pR|LP)q#+;AFDwf z9Vh;S!2bOY|Lf~7Aj+FK4T6EcfB*fTJ^SK+aq+2y470>z5CVMs_~U;`$^QRrY`wS) zs=;FrCb)I$-G6WIwb%^WNP+QGvmpX@boc z+(uvqaJ8_MW!AhcfYr{YHOhOLo;Lq17W2x4Iy1wuhCNDtspC@*q8=U%@4DV2*sj*_ z&hQ8im8-Q4-+Sz^-lOD|M?J6quD|fyGw($YoAZ@k<*HZ1@94P1cOZGuXJNvG>cRWU ezL`C3H{fr|LLzI@HhbXAs4Q7#@RO<9s@A| diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/logo_right.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/logo_right.png deleted file mode 100644 index a490289105a2af141a86630e43f008be5e540354..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4306 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

            9g{?Pl0W2QJ3e{qkoZcGN5XEyDCOr zdmpI=O+!!jAvD4Q0k5c3*E4^~PIpam5`VYgo3lg6XsveZ=vI*4!fU^Kl1f;LDKhO_ z6ZYVKiH$iK^K*8o-6RYP#R##;@S0mlSmsE(TQn$oL>5oGKk;iez9g!0ZDMZji1);_ znjZdRblz<`*HaU^-wdRwuB%q5Vio!yh=9<@ diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/new_struct_selected.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/new_struct_selected.png deleted file mode 100644 index bc61749afbfaf34c3c7baea47e444b05015b26cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 188 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAnmt_{Ln;`P0vwrnw4wtULKrT5 zl_@ghIpo0b@2Kev4j&(0(T=1vf!PjQ*m~E^?Q=_BoUivr@aNw0o#kJ@%)V{U_C3)0 z%Wml-Y@%zIHwLGa)kt1A;QVoxe=y^gi`m;`JR9Dr?=enS5b0Jq{)OKpMC6bdr~mPc lDZE}Eq>tXtnqGMNFT?uHlk{|7-TDV|mZz(q%Q~loCIAUhMcM!W diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/normalize.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/normalize.png deleted file mode 100644 index 5f8e95f55bea3f8fa08afad04fef7d85c109ce27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 511 zcmVtbso$Lk7%c#RxlVV7^zB^)>c#NmdEW2) zfBqiq!3E523WmC28gDKaGl16h(5dRUxdZD%g#9C-g8h94 z{e>8m-K7C^NnS(UtV@!FTrP)lxr}PHiszdsmCqe{Lh0yF(o7DA!*ILZ zaPFzNPesK!|JKMFqFD7K`xv{Ro9Z3-T&RKA*>MIE2sV zLn4t_EwcjJ?KUcvinB1b%zy}jaO%|NdH&zB!ygLst+?L}eD44N002ovPDHLkV1h|} B>B0a2 diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/north-mini.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/north-mini.png deleted file mode 100644 index c3b60620e04f0a810e03e5089a36ffd181c6ab65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 322 zcmV-I0lof-P)pjK66BzUo4SmgtUef(V(b-c;xq z-JSn|NVg&5@i_*AQy1p{LXPJ|(F=m$(fLd=2w}EMi^Vl)Wm#b|xpZNSAZ|MB^^TDw z@Az39zq%k!kT4x?w=tSqt%MB{1ZB;G;qVN3{;5G}`hkA`M2E;Qe8hhL1lu^jH$l*# z>GTR!C1G1pd|@;S+9CQ=+ZKk;ZfLo@L6=D>F`I>UXtTM)Zuiis_4-za{@+1E-=a8~ UbHzP;qyPW_07*qoM6N<$f}SOaZ2$lO diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/s_desc.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/s_desc.png deleted file mode 100644 index cc8804c122949d83870d036bdc274a9802ad717b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^+(699!2~3;*&M5Y6kADYvr;B4q z1!M98wjcf+4x)1t6AritWVU!#ED`Mb;HfOq=*h&VeseR!#Md6JH&QbP0 Hl+XkK19u%Q diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/s_fulltext.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/s_fulltext.png deleted file mode 100644 index b810b0cc2b6c83a0b437d261ec5cd9ea77d08016..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^MnEjg#0(_YFWj~fNO1=Egt!9f|NsA|m#jBViHQet z7)yfuf*Bm1-ADs+LOop^Ln;`P53np+xNsp~LEN=fp{vyvd=$`{ekg>C!SJz=0Jq8n zrpJbU4F&=%w=Z1?5NI|vDN$u^7P(-!utZis z*uQXvTmAq4-yI6VU^Yrj5CY(US?cir|7tfd{_pHI;J|7WHN7(eLN z0%{}yoH_IV|IC?Z{_k!z`G25E1I$iKn@PMOAPpc4GU)qnuwkSb0#b}HgbV|K3SpX1 zG#eYI5$}!Ye);X3T$1u$CljndRnzl& z*Zbvf*ZiOQKmUIjkX-YB`P;7dp4U}1A+BV$GH}12_$A|e#?O$r5a*0f8Q&AXxZk%j eU|=2`p$q^LWNxZPBF@PG0000)#P5!Vmn`F-5XllIBuuLjg-A{VM1cQckjH|spHZbmIJJg{jB@m|+$sFb{ j%(mpV!%le)bP0l+XkKi-{z? diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/s_okay.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/s_okay.png deleted file mode 100644 index 9bf92354e25dc7373c51cb4d758e0abe9079b3b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 710 zcmV;%0y+JOP)yZnK$dg%#a(xqfr69i??&=OICQFy zVNWi(yeFH8{!jqbDk|Qz?qSe?BP!1oB7Q0at^=0u#@l`QxdQlhSz%2)_i#fzC;F8D zxt7gy#2eOKqVT(qHhucA=+S{mmln+EFsH-1TNh<#^5ETOf#nhGrR8DloKFIz8`e1( zHA=qIOyPH+QKvc#+EroDrUK(ORWw|vfJ3Jt%Bc{A?0r}e$U1xyAXdBlMDk=fVkd)P z(X9=`4mAoY!?2Z(7G*SDtOfvFes}@V!@h_g@P&vMd*YLTgJlaI7oW<6Q=bV;J2j{! zMVPof0;6VCG+w9z0K9zl0?|W$aA?*>!DKRcN9OS-0ekYvr;bancn=b`qlM{&}!H602hgqu{JiD#&@cDfJz^m7<5Yg)a z{YpugPyvyB?uhC11hHa1yRbctcTg)jgtAjPux?g^af2e<+s!e3a}3e_KG3U>fI+zw z%qrzjHj{xPvAaPmna@Go5X;S3NmJw5VuF$rS+J~Af@zH$jH;wzSWd?~SQe$z>2R#l z25&65M2wj^Ulr2QU{+Mbhk5AQppSAYB&yF7_H`Ptt5HJ~b)k&H_LUmo^aKwnEc(Mz zp6$bm5?AK3Fli5BdOVRk8jIYKSVVNX;!xyv@CJg*#E237Wit_Hb}n&X?1>F?f;Sbs s*=M-|sn0+gZv%0ye2z5M%tR3e0B6vw<$XWN!~g&Q07*qoM6N<$g2wJpN&o-= diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/s_really.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/s_really.png deleted file mode 100644 index e48c9cd4830543e151c6c86035f8a5c6ff640750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHY$ZW{!9W@a@|Lkr1X8A+E{-7; zjL8iR|8Fn^$SBsfH8RRJ9=*8q;jTcDgFiEbW@rg;bW6^-l(Nb}VbWOz8M&6jA`E6y V8@BcETZMrP@^tlcS?83{1OSY1Bfy_ymt`5!}Dt!1?1zCZGvv#t=-C3-I_h!GjwO+`8Dnt}Poz zgh{yI<^|yH6@nY*2`(HbIJqA@(Dgke@b^mqzd!l$>w~W;n85_BAn@#god@#fT`h9P zZO9rnBcorBjBd^Ff>mWbYFF?;rf-e_yXJJ* zn&n9VBreG5*CJ=wfUIsMvZ_VMD&~zefu^u>Q$Xz^k*);@buEMH-Aea}Yk|LkVwONM wq(Y&Ph3eO}H=`2BF)Ln>-tSjmjZ|jz11ww3H{u({5C8xG07*qoM6N<$f}23hn*aa+ diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/s_theme.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/s_theme.png deleted file mode 100644 index 156cd435b3db58f689fecfcb76b15a9783901ecb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 488 zcmVP)(>A&gT4=B8I-Sg%4x z&Ot=VL^)T#kPrI!0RR60)TID`Vho2}0h4oeK|q~IKV+S5AKsQ1lXeNMo&% z$R$Gr0RV*2dAJu`8)OpR_IJ}DVx5Mb#Ea*CX(!G1WOj7Qflet5Is=#|TCFk6F940C zlgJiOw^JX%3i$2yvCg+Mz-Mv}7B9d@atU06=i~wWO92qPeoKlC08ihMp6mgS-$`V! e`Q!Yw2Coa_o*|vSv&l~Y0000;V<1vlO}RMGo?dIxq@bW{fK`c<3qbv65{^%jf5 zRoPtr^;a%+wCI-~!K!rCFX8Yt#-dj~7<)HXXfIMlVawvwASZxWiONl#A?DJ?B!0OaTA z_pYq0yoBH1-%r4SM-Mrrs;cUgo}T`2VPWCEkB`q$dwcu0k&%(4t*tEyKyq?2frgKq z%jI4IkKUI%s4FWgd(qzB9?gP}jg5`Bo;h=7>*VC*Rsg-dy<0^h(N@-%V)Luuz@vwp zQdCrojgF3f(ACwI;pXOc!qn9CwUw0>admYi0NA}UG<@XXz@vwpl4U1HN5`ec#>NMH zKL4IrEGFIE-6So@e$$=*Dk%I$|9&$=bN@@dpdn$Hzb{8TdBA&*_$G>3LSKi*< zK>$L+6PH;17(Q}v;L-c;e_)%x++&h7FI4g#-{w-j%E)_+`Tg=(FiTkwg|;!T6urh} z)qJN~WIe{zTuN51O1ln6{qzKS(KGvlTbVZsp5t23o>i+4+2S5)mtko&--!c~PD301 b`DpwA{kwbC54?PM00000NkvXXu0mjf5XmU= diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/img/south-mini.png b/Sources/php_script/script/phpMyAdmin/themes/original/img/south-mini.png deleted file mode 100644 index 654673b32551a5b54e74fb527e775965d087ea6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 319 zcmV-F0l@x=P)Q8+SkGj4+d1K0m22K@W?@4tn`68v74<3B@&%x1$ z&7h|sgEnHbp`>I#hCv}A8*xSdMvy@@*d*E5djH?L^$unRC=&3cqZ*Jwmbesnd#?o> z^5@Ur|9X1!@fl>v08|GuY#uH}+qd8QKYjXne1^;enE^A1ABdk|Q>dmk=fAMmlyouL4FqdE&gut)}sDUPpr%=2RDrSjI4*-d9j@2*AoZK1A$^WvpzD+ X@SM%r|J-#C&{zgfS3j3^P6TL??mkmJ83a$gr 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 hIX| .ui-controlgroup-item { - float: left; - margin-left: 0; - margin-right: 0; -} -.ui-controlgroup > .ui-controlgroup-item:focus, -.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { - z-index: 9999; -} -.ui-controlgroup-vertical > .ui-controlgroup-item { - display: block; - float: none; - width: 100%; - margin-top: 0; - margin-bottom: 0; - text-align: left; -} -.ui-controlgroup-vertical .ui-controlgroup-item { - box-sizing: border-box; -} -.ui-controlgroup .ui-controlgroup-label { - padding: .4em 1em; -} -.ui-controlgroup .ui-controlgroup-label span { - font-size: 80%; -} -.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { - border-left: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { - border-top: none; -} -.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { - border-right: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { - border-bottom: none; -} - -/* Spinner specific style fixes */ -.ui-controlgroup-vertical .ui-spinner-input { - - /* Support: IE8 only, Android < 4.4 only */ - width: 75%; - width: calc( 100% - 2.4em ); -} -.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { - border-top-style: solid; -} - -.ui-checkboxradio-label .ui-icon-background { - box-shadow: inset 1px 1px 1px #ccc; - border-radius: .12em; - border: none; -} -.ui-checkboxradio-radio-label .ui-icon-background { - width: 16px; - height: 16px; - border-radius: 1em; - overflow: visible; - border: none; -} -.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, -.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { - background-image: none; - width: 8px; - height: 8px; - border-width: 4px; - border-style: solid; -} -.ui-checkboxradio-disabled { - pointer-events: none; -} -.ui-datepicker { - width: 17em; - padding: .2em .2em 0; - display: none; -} -.ui-datepicker .ui-datepicker-header { - position: relative; - padding: .2em 0; -} -.ui-datepicker .ui-datepicker-prev, -.ui-datepicker .ui-datepicker-next { - position: absolute; - top: 2px; - width: 1.8em; - height: 1.8em; -} -.ui-datepicker .ui-datepicker-prev-hover, -.ui-datepicker .ui-datepicker-next-hover { - top: 1px; -} -.ui-datepicker .ui-datepicker-prev { - left: 2px; -} -.ui-datepicker .ui-datepicker-next { - right: 2px; -} -.ui-datepicker .ui-datepicker-prev-hover { - left: 1px; -} -.ui-datepicker .ui-datepicker-next-hover { - right: 1px; -} -.ui-datepicker .ui-datepicker-prev span, -.ui-datepicker .ui-datepicker-next span { - display: block; - position: absolute; - left: 50%; - margin-left: -8px; - top: 50%; - margin-top: -8px; -} -.ui-datepicker .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; -} -.ui-datepicker .ui-datepicker-title select { - font-size: 1em; - margin: 1px 0; -} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { - width: 45%; -} -.ui-datepicker table { - width: 100%; - font-size: .9em; - border-collapse: collapse; - margin: 0 0 .4em; -} -.ui-datepicker th { - padding: .7em .3em; - text-align: center; - font-weight: bold; - border: 0; -} -.ui-datepicker td { - border: 0; - padding: 1px; -} -.ui-datepicker td span, -.ui-datepicker td a { - display: block; - padding: .2em; - text-align: right; - text-decoration: none; -} -.ui-datepicker .ui-datepicker-buttonpane { - background-image: none; - margin: .7em 0 0 0; - padding: 0 .2em; - border-left: 0; - border-right: 0; - border-bottom: 0; -} -.ui-datepicker .ui-datepicker-buttonpane button { - float: right; - margin: .5em .2em .4em; - cursor: pointer; - padding: .2em .6em .3em .6em; - width: auto; - overflow: visible; -} -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { - float: left; -} - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { - width: auto; -} -.ui-datepicker-multi .ui-datepicker-group { - float: left; -} -.ui-datepicker-multi .ui-datepicker-group table { - width: 95%; - margin: 0 auto .4em; -} -.ui-datepicker-multi-2 .ui-datepicker-group { - width: 50%; -} -.ui-datepicker-multi-3 .ui-datepicker-group { - width: 33.3%; -} -.ui-datepicker-multi-4 .ui-datepicker-group { - width: 25%; -} -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { - border-left-width: 0; -} -.ui-datepicker-multi .ui-datepicker-buttonpane { - clear: left; -} -.ui-datepicker-row-break { - clear: both; - width: 100%; - font-size: 0; -} - -/* RTL support */ -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-rtl .ui-datepicker-prev { - right: 2px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next { - left: 2px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-prev:hover { - right: 1px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next:hover { - left: 1px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane { - clear: right; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button { - float: left; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, -.ui-datepicker-rtl .ui-datepicker-group { - float: right; -} -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; -} - -/* Icons */ -.ui-datepicker .ui-icon { - display: block; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; - left: .5em; - top: .3em; -} -.ui-dialog { - position: absolute; - top: 0; - left: 0; - padding: .2em; - outline: 0; -} -.ui-dialog .ui-dialog-titlebar { - padding: .4em 1em; - position: relative; -} -.ui-dialog .ui-dialog-title { - float: left; - margin: .1em 0; - white-space: nowrap; - width: 90%; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-dialog .ui-dialog-titlebar-close { - position: absolute; - right: .3em; - top: 50%; - width: 20px; - margin: -10px 0 0 0; - padding: 1px; - height: 20px; -} -.ui-dialog .ui-dialog-content { - position: relative; - border: 0; - padding: .5em 1em; - background: none; - overflow: auto; -} -.ui-dialog .ui-dialog-buttonpane { - text-align: left; - border-width: 1px 0 0 0; - background-image: none; - margin-top: .5em; - padding: .3em 1em .5em .4em; -} -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; -} -.ui-dialog .ui-dialog-buttonpane button { - margin: .5em .4em .5em 0; - cursor: pointer; -} -.ui-dialog .ui-resizable-n { - height: 2px; - top: 0; -} -.ui-dialog .ui-resizable-e { - width: 2px; - right: 0; -} -.ui-dialog .ui-resizable-s { - height: 2px; - bottom: 0; -} -.ui-dialog .ui-resizable-w { - width: 2px; - left: 0; -} -.ui-dialog .ui-resizable-se, -.ui-dialog .ui-resizable-sw, -.ui-dialog .ui-resizable-ne, -.ui-dialog .ui-resizable-nw { - width: 7px; - height: 7px; -} -.ui-dialog .ui-resizable-se { - right: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-sw { - left: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-ne { - right: 0; - top: 0; -} -.ui-dialog .ui-resizable-nw { - left: 0; - top: 0; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-progressbar { - height: 2em; - text-align: left; - overflow: hidden; -} -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height: 100%; -} -.ui-progressbar .ui-progressbar-overlay { - background: url("data:image/gif;base64,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"); - height: 100%; - filter: alpha(opacity=25); /* support: IE8 */ - opacity: 0.25; -} -.ui-progressbar-indeterminate .ui-progressbar-value { - background-image: none; -} -.ui-selectmenu-menu { - padding: 0; - margin: 0; - position: absolute; - top: 0; - left: 0; - display: none; -} -.ui-selectmenu-menu .ui-menu { - overflow: auto; - overflow-x: hidden; - padding-bottom: 1px; -} -.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { - font-size: 1em; - font-weight: bold; - line-height: 1.5; - padding: 2px 0.4em; - margin: 0.5em 0 0 0; - height: auto; - border: 0; -} -.ui-selectmenu-open { - display: block; -} -.ui-selectmenu-text { - display: block; - margin-right: 20px; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-selectmenu-button.ui-button { - text-align: left; - white-space: nowrap; - width: 14em; -} -.ui-selectmenu-icon.ui-icon { - float: right; - margin-top: 0; -} -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; - -ms-touch-action: none; - touch-action: none; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} - -/* support: IE8 - See #6727 */ -.ui-slider.ui-state-disabled .ui-slider-handle, -.ui-slider.ui-state-disabled .ui-slider-range { - filter: inherit; -} - -.ui-slider-horizontal { - height: .8em; -} -.ui-slider-horizontal .ui-slider-handle { - top: -.3em; - margin-left: -.6em; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} - -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -} -.ui-spinner { - position: relative; - display: inline-block; - overflow: hidden; - padding: 0; - vertical-align: middle; -} -.ui-spinner-input { - border: none; - background: none; - color: inherit; - padding: .222em 0; - margin: .2em 0; - vertical-align: middle; - margin-left: .4em; - margin-right: 2em; -} -.ui-spinner-button { - width: 1.6em; - height: 50%; - font-size: .5em; - padding: 0; - margin: 0; - text-align: center; - position: absolute; - cursor: default; - display: block; - overflow: hidden; - right: 0; -} -/* more specificity required here to override default borders */ -.ui-spinner a.ui-spinner-button { - border-top-style: none; - border-bottom-style: none; - border-right-style: none; -} -.ui-spinner-up { - top: 0; -} -.ui-spinner-down { - bottom: 0; -} -.ui-tabs { - position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ - padding: .2em; -} -.ui-tabs .ui-tabs-nav { - margin: 0; - padding: .2em .2em 0; -} -.ui-tabs .ui-tabs-nav li { - list-style: none; - float: left; - position: relative; - top: 0; - margin: 1px .2em 0 0; - border-bottom-width: 0; - padding: 0; - white-space: nowrap; -} -.ui-tabs .ui-tabs-nav .ui-tabs-anchor { - float: left; - padding: .5em 1em; - text-decoration: none; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active { - margin-bottom: -1px; - padding-bottom: 1px; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { - cursor: text; -} -.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { - cursor: pointer; -} -.ui-tabs .ui-tabs-panel { - display: block; - border-width: 0; - padding: 1em 1.4em; - background: none; -} -.ui-tooltip { - padding: 8px; - position: absolute; - z-index: 9999; - max-width: 300px; -} -body .ui-tooltip { - border-width: 2px; -} - -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Verdana,Arial,sans-serif; - font-size: 1.1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Verdana,Arial,sans-serif; - font-size: 1em; -} -.ui-widget.ui-widget-content { - border: 1px solid #d3d3d3; -} -.ui-widget-content { - border: 1px solid #aaaaaa; - background: #ffffff; - color: #222222; -} -.ui-widget-content a { - color: #222222; -} -.ui-widget-header { - border: 1px solid #aaaaaa; - background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; - color: #222222; - font-weight: bold; -} -.ui-widget-header a { - color: #222222; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default, -.ui-button, - -/* We use html here because we need a greater specificity to make sure disabled -works properly when clicked or hovered */ -html .ui-button.ui-state-disabled:hover, -html .ui-button.ui-state-disabled:active { - border: 1px solid #d3d3d3; - background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #555555; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited, -a.ui-button, -a:link.ui-button, -a:visited.ui-button, -.ui-button { - color: #555555; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus, -.ui-button:hover, -.ui-button:focus { - border: 1px solid #999999; - background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited, -a.ui-button:hover, -a.ui-button:focus { - color: #212121; - text-decoration: none; -} - -.ui-visual-focus { - box-shadow: 0 0 3px 1px rgb(94, 158, 214); -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - border: 1px solid #aaaaaa; - background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-icon-background, -.ui-state-active .ui-icon-background { - border: #aaaaaa; - background-color: #212121; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #212121; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #fcefa1; - background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; - color: #363636; -} -.ui-state-checked { - border: 1px solid #fcefa1; - background: #fbf9ee; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #363636; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #cd0a0a; - background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; - color: #cd0a0a; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #cd0a0a; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #cd0a0a; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); /* support: IE8 */ - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); /* support: IE8 */ - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-widget-header .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon, -.ui-button:hover .ui-icon, -.ui-button:focus .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-active .ui-icon, -.ui-button:active .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-highlight .ui-icon, -.ui-button .ui-state-highlight.ui-icon { - background-image: url("images/ui-icons_2e83ff_256x240.png"); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url("images/ui-icons_cd0a0a_256x240.png"); -} -.ui-button .ui-icon { - background-image: url("images/ui-icons_888888_256x240.png"); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-caret-1-n { background-position: 0 0; } -.ui-icon-caret-1-ne { background-position: -16px 0; } -.ui-icon-caret-1-e { background-position: -32px 0; } -.ui-icon-caret-1-se { background-position: -48px 0; } -.ui-icon-caret-1-s { background-position: -65px 0; } -.ui-icon-caret-1-sw { background-position: -80px 0; } -.ui-icon-caret-1-w { background-position: -96px 0; } -.ui-icon-caret-1-nw { background-position: -112px 0; } -.ui-icon-caret-2-n-s { background-position: -128px 0; } -.ui-icon-caret-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -65px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -65px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 1px -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 4px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ -} -.ui-widget-shadow { - -webkit-box-shadow: -8px -8px 8px #aaaaaa; - box-shadow: -8px -8px 8px #aaaaaa; -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/scss/_common.scss b/Sources/php_script/script/phpMyAdmin/themes/original/scss/_common.scss deleted file mode 100644 index 249c2a0..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/original/scss/_common.scss +++ /dev/null @@ -1,2711 +0,0 @@ -#page_content { - margin: 0 0.5em; -} - -button.mult_submit, -.checkall_box + label { - text-decoration: none; - color: #00f; - cursor: pointer; -} - -button.mult_submit { - &:hover, - &:focus { - text-decoration: underline; - color: #f00; - } -} - -.checkall_box + label:hover { - text-decoration: underline; - color: #f00; -} - -dfn { - font-style: normal; - - &:hover { - font-style: normal; - cursor: help; - } -} - -a img { - border: 0; -} - -hr { - color: $main-color; - background-color: $main-color; - border: 0; - height: 1px; -} - -form { - padding: 0; - margin: 0; - display: inline; -} - -textarea { - overflow: visible; -} - -textarea.charField { - width: 95%; -} - -.pma-fieldset { - margin-top: 1em; - border: $main-color solid 1px; - padding: 0.5em; - background: $bg-one; - - .pma-fieldset { - margin: 0.8em; - } - - legend { - float: none; - font-weight: bold; - color: #444; - background-color: transparent; - width: initial; - font-size: 1em; - } -} - -// buttons in some browsers (eg. Konqueror) are block elements, this breaks design -button { - display: inline; -} - -img, -input, -select, -button { - vertical-align: middle; -} - -// classes -.clearfloat { - clear: both; -} - -.paddingtop { - padding-top: 1em; -} - -div.tools { - border: 1px solid #000; - padding: 0.2em; - margin-top: 0; - margin-bottom: 0.5em; - - /* avoid a thick line since this should be used under another fieldset */ - border-top: 0; - text-align: right; - float: none; - clear: both; -} - -.pma-fieldset.tblFooters { - margin-top: 0; - margin-bottom: 0.5em; - - /* avoid a thick line since this should be used under another fieldset */ - border-top: 0; - text-align: right; - float: none; - clear: both; -} - -div.null_div { - height: 20px; - text-align: center; - font-style: normal; - min-width: 50px; -} - -.pma-fieldset { - .formelement { - float: left; - margin-right: 0.5em; - white-space: nowrap; - } - - // revert for Gecko - div[class="formelement"] { - white-space: normal; - } -} - -button.mult_submit { - border: none; - background-color: transparent; -} - -/** - * marks table rows/cells if the db field is in a where condition - */ -td.condition, -th.condition { - border: 1px solid $browse-marker-background; -} - -/** - * cells with the value NULL - */ -td.null { - font-style: italic; - color: #7d7d7d !important; -} - -table { - .valueHeader, - .value { - text-align: right; - white-space: normal; - } -} - -.value { - font-family: $font-family-monospace; -} - -img.lightbulb { - cursor: pointer; -} - -.pdflayout { - overflow: hidden; - clip: inherit; - background-color: #fff; - display: none; - border: 1px solid #000; - position: relative; -} - -.pdflayout_table { - background: #d3dce3; - color: #000; - overflow: hidden; - clip: inherit; - z-index: 2; - display: inline; - visibility: inherit; - cursor: move; - position: absolute; - font-size: 80%; - border: 1px dashed #000; -} - -/* Doc links in SQL */ -.cm-sql-doc { - text-decoration: none; - border-bottom: 1px dotted #000; - color: inherit !important; -} - -/* leave some space between icons and text */ -.icon { - image-rendering: pixelated; - vertical-align: middle; - margin-left: 0.3em; - background-repeat: no-repeat; - background-position: center; -} - -.selectallarrow { - margin-right: 0.3em; - margin-left: 0.6em; -} - -.with-selected { - margin-left: 2em; -} - -/* message boxes: error, confirmation */ -#pma_errors, -#pma_demo, -#pma_footer { - position: relative; - padding: 0 0.5em; -} - -.confirmation { - background-color: #ffc; -} - -.pma-fieldset.confirmation { - border: 0.1em solid #f00; - - legend { - border-left: 0.1em solid #f00; - border-right: 0.1em solid #f00; - font-weight: bold; - background-image: url("../img/s_really.png"); - background-repeat: no-repeat; - background-position: 5px 50% #{"/* rtl:97% 50% */"}; - padding: 0.2em 0.2em 0.2em 25px; - } -} - -.error { - background-color: #ffc; - color: #f00; -} - -label.error { - padding: 3px; - margin-left: 4px; -} - -/* end messageboxes */ - -.new_central_col { - width: 100%; -} - -.tblcomment { - font-size: 70%; - font-weight: normal; - color: #009; -} - -.tblHeaders { - font-weight: bold; - color: $th-color; - background: $th-background; -} - -div.tools, -.tblFooters { - font-weight: normal; - color: $th-color; - background: $th-background; -} - -.tblHeaders a { - &:link, - &:active, - &:visited { - color: #00f; - } - - &:hover { - color: #f00; - } -} - -div.tools a { - &:link, - &:visited, - &:active { - color: #00f; - } - - &:hover { - color: #f00; - } -} - -.tblFooters a { - &:link, - &:active, - &:visited { - color: #00f; - } - - &:hover { - color: #f00; - } -} - -/* disabled text */ - -.disabled { - color: #666; - - a { - &:link, - &:active, - &:visited { - color: #666; - } - - &:hover { - color: #666; - text-decoration: none; - } - } -} - -tr.disabled td, -td.disabled { - background-color: #ccc; -} - -.pre_wrap { - white-space: pre-wrap; -} - -.pre_wrap br { - display: none; -} - -/** - * zoom search - */ - -div { - &#resizer { - width: 600px; - height: 400px; - } - - &#querychart { - float: left; - width: 600px; - } -} - -/** - * login form - */ -body#loginform { - margin: 0; - margin-top: 1em; - text-align: center; - - h1, - a.logo { - display: block; - text-align: center; - } - - div.container { - text-align: left; - width: 30em; - margin: 0 auto; - } -} - -div.container.modal_form { - margin: 0 auto; - width: 30em; - text-align: center; - background: #fff; - z-index: 999; -} - -#login_form { - text-align: left; -} - -#login_form .pma-fieldset.tblFooters { - text-align: right; -} - -#login_form select#select_server { - width: 100%; -} - -div#modalOverlay { - position: fixed; - top: 0; - left: 0; - height: 100%; - width: 100%; - background: #fff; - z-index: 900; -} - -#login_form label { - width: 10em; - font-weight: bolder; -} - -.commented_column { - border-bottom: 1px dashed black; -} - -.column_attribute { - font-size: 70%; -} - -.column_name { - font-size: 80%; - margin: 5px 2px; -} - -.central_columns_navigation { - padding: 1.5% 0 !important; -} - -.message_errors_found { - margin-top: 20px; -} - -.repl_gui_skip_err_cnt { - width: 30px; -} - -.color_gray { - color: gray; -} - -.max_height_400 { - max-height: 400px; -} - -li.last.database { - // Avoid having the last item of the tree hidden behind the scroll bar - margin-bottom: 15px !important; -} - -/* specific elements */ - -ul.tabs { - font-weight: bold; - list-style-type: none; - margin: 0; - padding: 0; -} - -/* zoom search */ -div#dataDisplay { - input, - select { - margin: 0; - margin-right: 0.5em; - } - - th { - line-height: 2em; - } -} - -img.calendar { - border: none; -} - -form.clock { - text-align: center; -} - -div#tablestatistics table { - float: left; - margin-top: 0.5em; - margin-bottom: 0.5em; - margin-right: 0.5em; - min-width: 16em; -} - -#topmenucontainer { - background: white; - padding-right: 1em; - width: 100%; -} - -#page_nav_icons { - position: fixed; - top: 0; - right: 0; - z-index: 99; - padding: $breadcrumb-navbar-padding-y $breadcrumb-padding-x; -} - -#page_settings_icon { - cursor: pointer; - display: none; -} - -#page_settings_modal, -#pma_navigation_settings { - display: none; -} - -#textSQLDUMP { - width: 95%; - height: 95%; - font-family: $font-family-monospace; - font-size: 110%; -} - -#TooltipContainer { - position: absolute; - z-index: 99; - width: 20em; - height: auto; - overflow: visible; - visibility: hidden; - background-color: #ffc; - color: #060; - border: 0.1em solid #000; - padding: 0.5em; -} - -#fieldset_add_user_login { - div.item { - border-bottom: 1px solid silver; - padding-bottom: 0.3em; - margin-bottom: 0.3em; - } - - label { - float: left; - display: block; - width: 15em; - max-width: 100%; - text-align: right; - padding-right: 0.5em; - } - - span.options { - float: left; - display: block; - width: 12em; - max-width: 100%; - padding-right: 0.5em; - - #select_pred_username, - #select_pred_hostname, - #select_pred_password { - width: 100%; - max-width: 100%; - } - } - - input { - width: 12em; - clear: right; - max-width: 100%; - } - - span.options input { - width: auto; - } -} - -#fieldset_user_priv div.item { - float: left; - width: 9em; - max-width: 100%; - - div.item { - float: none; - } - - label { - white-space: nowrap; - } - - select { - width: 100%; - } -} - -#fieldset_user_global_rights .pma-fieldset, -#fieldset_user_group_rights .pma-fieldset { - float: left; -} - -#fieldset_user_global_rights > legend input { - margin-left: 2em; -} - -.linkElem:hover { - text-decoration: underline; - color: #235a81; - cursor: pointer; -} - -h3#serverstatusqueries span { - font-size: 60%; - display: inline; -} - -div#serverStatusTabs { - margin-top: 1em; -} - -caption a.top { - float: right; -} - -div { - &#serverstatusquerieschart { - float: left; - width: 500px; - height: 350px; - margin-right: 50px; - } -} - -div { - &#serverstatus table { - tbody td.descr a, - .tblFooters a { - white-space: nowrap; - } - } - - &.liveChart { - clear: both; - min-width: 500px; - height: 400px; - padding-bottom: 80px; - } -} - -div#chartVariableSettings { - border: 1px solid #ddd; - background-color: #e6e6e6; - margin-left: 10px; -} - -table#chartGrid { - td { - padding: 3px; - margin: 0; - } - - div.monitorChart { - background: #ebebeb; - border: none; - min-width: 1px; - } -} - -div.tabLinks { - margin-left: 0.3em; - float: left; - padding: 5px 0; - - a, - label { - margin-right: 7px; - } - - .icon { - margin: -0.2em 0.3em 0 0; - } -} - -.popupContent { - display: none; - position: absolute; - border: 1px solid #ccc; - margin: 0; - padding: 3px; - box-shadow: 2px 2px 3px #666; - background-color: white; - z-index: 2; -} - -div#logTable { - padding-top: 10px; - clear: both; - - table { - width: 100%; - } -} - -.smallIndent { - padding-left: 7px; -} - -/* profiling */ -div#profilingchart { - width: 850px; - height: 370px; - float: left; -} - -#profilingchart .jqplot-highlighter-tooltip { - top: auto !important; - left: 11px; - bottom: 24px; -} - -textarea { - &#sqlquery { - width: 100%; - } - - &#sql_query_edit { - height: 7em; - width: 95%; - display: block; - } -} - -/* end querybox */ - -/* main page */ - -#maincontainer { - background-image: url("../img/logo_right.png"); - background-position: right bottom; - background-repeat: no-repeat; -} - -#mysqlmaininformation, -#pmamaininformation { - float: left; - width: 49%; -} - -#maincontainer { - ul { - list-style-type: disc; - vertical-align: middle; - } - - li { - margin: 0.2em 0; - } -} - -#full_name_layer { - position: absolute; - padding: 2px; - margin-top: -3px; - z-index: 801; - border: solid 1px #888; - background: #fff; -} - -#body_browse_foreigners { - background: $navi-background; - margin: 0.5em 0.5em 0 0.5em; -} - -#bodythemes { - width: 500px; - margin: auto; - text-align: center; - - img { - border: 0.1em solid #000; - } - - a:hover img { - border: 0.1em solid red; - } -} - -#selflink { - clear: both; - display: block; - margin-top: 1em; - margin-bottom: 1em; - width: 98%; - margin-left: 1%; - border-top: 0.1em solid silver; - text-align: right; -} - -#qbe_div_table_list, -#qbe_div_sql_query { - float: left; -} - -kbd { - color: $main-color; - background-color: transparent; - box-shadow: none; -} - -code { - font-size: 1em; - color: $main-color; - - &.php { - display: block; - padding-left: 0.3em; - margin-top: 0; - margin-bottom: 0; - max-height: 10em; - overflow: auto; - direction: ltr; - } - - &.sql { - display: block; - padding: 0.3em; - margin-top: 0; - margin-bottom: 0; - max-height: 10em; - overflow: auto; - direction: ltr; - } -} - -div.sqlvalidate { - display: block; - padding: 0.3em; - margin-top: 0; - margin-bottom: 0; - max-height: 10em; - overflow: auto; - direction: ltr; -} - -.result_query div.sqlOuter, -div.sqlvalidate { - border: $main-color solid 1px; - border-top: 0; - border-bottom: 0; - background: $bg-one; -} - -.result_query div.sqlOuter { - text-align: left; -} - -#PMA_slidingMessage code.sql { - border: $main-color solid 1px; - border-top: 0; - background: $bg-one; -} - -textarea#partitiondefinition { - height: 3em; -} - -/* for elements that should be revealed only via js */ -.hide { - display: none; -} - -#list_server { - list-style-type: none; - padding: 0; -} - -/** - * Progress bar styles - */ - -div { - &.upload_progress { - width: 400px; - margin: 3em auto; - text-align: center; - } - - &.upload_progress_bar_outer { - border: 1px solid #000; - width: 202px; - position: relative; - margin: 0 auto 1em; - color: $main-color; - } - - &.upload_progress_bar_inner { - background-color: $navi-pointer-background; - width: 0; - height: 12px; - margin: 1px; - overflow: hidden; - color: $browse-marker-color; - position: relative; - } - - &.upload_progress_bar_outer div.percentage { - position: absolute; - top: 0; - left: 0; - width: 202px; - } - - &.upload_progress_bar_inner div.percentage { - top: -1px; - left: -1px; - } - - &#statustext { - margin-top: 0.5em; - } -} - -table { - &#serverconnection_src_remote, - &#serverconnection_trg_remote, - &#serverconnection_src_local, - &#serverconnection_trg_local { - float: left; - } -} - -/** - * Validation error message styles - */ - -input { - &[type="text"].invalid_value, - &[type="password"].invalid_value, - &[type="number"].invalid_value, - &[type="date"].invalid_value { - background: #fcc; - } -} - -select.invalid_value, -.invalid_value { - background: #fcc; -} - -/** - * Ajax notification styling - */ -.ajax_notification { - // The notification needs to be shown on the top of the page - top: 0; - position: fixed; - margin-top: 0; - margin-right: auto; - margin-bottom: 0; - margin-left: auto; - // Keep a little space on the sides of the text - padding: 3px 5px; - width: 350px; - background-color: #ffd700; - // If this is not kept at a high z-index, the jQueryUI modal dialogs (z-index:1000) might hide this - z-index: 1100; - text-align: center; - display: block; - left: 0; - right: 0; - background-image: url("../img/ajax_clock_small.gif"); - background-repeat: no-repeat; - background-position: 2%; -} - -#loading_parent { - /** Need this parent to properly center the notification division */ - position: relative; - width: 100%; -} - -#popup_background { - display: none; - position: fixed; - width: 100%; - height: 100%; - top: 0; - left: 0; - background: #000; - z-index: 1000; - overflow: hidden; -} - -/** - * Create table styles - */ -#create_table_form table.table-name td { - vertical-align: middle; -} - -#tablestructure tbody label { - margin: 0.3rem 0; -} - -#structure-action-links a { - margin-right: 1em; -} - -#addColumns input { - &[type="radio"] { - margin: 0; - margin-left: 1em; - } - - &[type="submit"] { - margin-left: 1em; - } -} - -/** - * Indexes - */ - -#index_frm { - .index_info { - input[type="text"], - select { - width: 100%; - box-sizing: border-box; - } - } - - .slider { - width: 10em; - margin: 0.6em; - float: left; - } - - .add_fields { - float: left; - - input { - margin-left: 1em; - } - } - - input { - margin: 0; - } - - td { - vertical-align: middle; - } -} - -table#index_columns { - width: 100%; - - select { - width: 85%; - float: right; - } -} - -#move_columns_dialog { - div { - padding: 1em; - } - - ul { - list-style: none; - margin: 0; - padding: 0; - } - - li { - background: $th-background; - border: 1px solid #aaa; - color: $th-color; - font-weight: bold; - margin: 0.4em; - padding: 0.2em; - border-radius: 2px; - } -} - -/* config forms */ - -.config-form { - .card { - margin-top: 0; - } - - fieldset { - margin-top: 0; - padding: 0; - clear: both; - } - - legend { - display: none; - } - - fieldset { - p { - margin: 0; - padding: 0.5em; - background: $bg-two; - } - - /* form error list */ - .errors { - margin: 0 -2px 1em -2px; - padding: 0.5em 1.5em; - background: #fbead9; - border-color: #c83838; - border-style: solid; - border-width: 1px 0; - list-style: none; - font-family: sans-serif; - font-size: small; - } - - /* field error list */ - .inline_errors { - margin: 0.3em 0.3em 0.3em 0; - padding: 0; - list-style: none; - color: #9a0000; - font-size: small; - } - - th { - padding: 0.3em 0.3em 0.3em 0.5em; - text-align: left; - vertical-align: top; - background: transparent; - } - - .doc { - margin-left: 1em; - } - - .disabled-notice { - margin-left: 1em; - font-size: 80%; - text-transform: uppercase; - color: #e00; - cursor: help; - } - - td { - padding-top: 0.3em; - padding-bottom: 0.3em; - vertical-align: top; - border-top: 1px solid $bg-two; - } - - th { - border-top: 1px solid $bg-two; - - small { - display: block; - font-weight: normal; - font-family: sans-serif; - font-size: x-small; - color: #444; - } - } - } -} - -fieldset { - .group-header { - th { - background: $bg-two; - } - - + tr th { - padding-top: 0.6em; - } - } - - .group-field-1 th, - .group-header-2 th { - padding-left: 1.5em; - } - - .group-field-2 th, - .group-header-3 th { - padding-left: 3em; - } - - .group-field-3 th { - padding-left: 4.5em; - } - - .disabled-field { - th { - color: #666; - background-color: #ddd; - - small { - color: #666; - background-color: #ddd; - } - } - - td { - color: #666; - background-color: #ddd; - } - } -} - -.config-form { - span.checkbox { - padding: 2px; - display: inline-block; - } - - /* customized field */ - .custom { - background: #ffc; - } - - span.checkbox.custom { - padding: 1px; - border: 1px #edec90 solid; - background: #ffc; - } - - .field-error { - border-color: #a11 !important; - } - - input { - &[type="text"], - &[type="password"], - &[type="number"] { - border: 1px #a7a6aa solid; - height: auto; - } - } - - select, - textarea { - border: 1px #a7a6aa solid; - height: auto; - } - - input { - &[type="text"]:focus, - &[type="password"]:focus, - &[type="number"]:focus { - border: 1px #6676ff solid; - background: #f7fbff; - } - } - - select:focus, - textarea:focus { - border: 1px #6676ff solid; - background: #f7fbff; - } - - .field-comment-mark { - font-family: serif; - color: #007; - cursor: help; - padding: 0 0.2em; - font-weight: bold; - font-style: italic; - } - - .field-comment-warning { - color: #a00; - } - - dd { - margin-left: 0.5em; - - &::before { - content: "\25B8 "; - } - } -} - -.click-hide-message { - cursor: pointer; -} - -.prefsmanage_opts { - margin-left: 2em; -} - -#prefs_autoload { - margin-bottom: 0.5em; - margin-left: 0.5em; -} - -input#auto_increment_opt { - width: min-content; -} - -#placeholder { - .button { - position: absolute; - cursor: pointer; - } - - div.button { - font-size: smaller; - color: #999; - background-color: #eee; - padding: 2px; - } -} - -.wrapper { - float: left; - margin-bottom: 0.5em; -} - -.toggleButton { - position: relative; - cursor: pointer; - font-size: 0.8em; - text-align: center; - line-height: 1.4em; - height: 1.55em; - overflow: hidden; - border-right: 0.1em solid #888; - border-left: 0.1em solid #888; - - table, - td, - img { - padding: 0; - position: relative; - } - - .toggle-container { - position: absolute; - - td, - tr { - background: none !important; - } - } - - .toggleOn { - color: #fff; - padding: 0 1em; - } - - .toggleOff { - padding: 0 1em; - } -} - -.doubleFieldset { - .pma-fieldset { - width: 48%; - float: left; - padding: 0; - } - - legend { - margin-left: 0.5em; - } - - div.wrap { - padding: 0.5em; - } -} - -#table_name_col_no_outer { - margin-top: 45px; -} - -#table_name_col_no { - position: fixed; - top: 44px; - width: 100%; - background: $body-bg; -} - -#table_columns { - display: block; - overflow: auto; - - input { - &[type="text"], - &[type="password"], - &[type="number"], - &[type="date"] { - width: 10em; - box-sizing: border-box; - } - } - - select { - width: 10em; - box-sizing: border-box; - } -} - -#placeholder { - position: relative; - border: 1px solid #aaa; - float: right; - overflow: hidden; - width: 450px; - height: 300px; -} - -#openlayersmap { - width: 450px; - height: 300px; -} - -.placeholderDrag { - cursor: move; -} - -#placeholder .button { - position: absolute; -} - -#left_arrow { - left: 8px; - top: 26px; -} - -#right_arrow { - left: 26px; - top: 26px; -} - -#up_arrow { - left: 17px; - top: 8px; -} - -#down_arrow { - left: 17px; - top: 44px; -} - -#zoom_in { - left: 17px; - top: 67px; -} - -#zoom_world { - left: 17px; - top: 85px; -} - -#zoom_out { - left: 17px; - top: 103px; -} - -.colborder { - cursor: col-resize; - height: 100%; - margin-left: -5px; - position: absolute; - width: 5px; -} - -.colborder_active { - border-right: 2px solid #a44; -} - -.pma_table { - th.draggable span { - display: block; - overflow: hidden; - } -} - -.pma_table { - td { - position: static; - } - - tbody td span { - display: block; - overflow: hidden; - - code span { - display: inline; - } - } -} - -.modal-copy input { - display: block; - width: 100%; - margin-top: 1.5em; - padding: 0.3em 0; -} - -.cRsz { - position: absolute; -} - -.draggable { - cursor: move; -} - -.cCpy { - background: #000; - color: #fff; - font-weight: bold; - margin: 0.1em; - padding: 0.3em; - position: absolute; -} - -.cPointer { - $height: 20px; - $width: 10px; - - height: $height; - width: $width; - margin-top: $height * -0.5; - margin-left: $width * -0.5; - position: absolute; - background: url("../img/col_pointer.png"); -} - -.tooltip { - background: #333 !important; - opacity: 0.8 !important; - z-index: 9999; - border: 1px solid #000 !important; - border-radius: 0.3em !important; - text-shadow: -1px -1px #000 !important; - font-size: 0.8em !important; - font-weight: bold !important; - padding: 1px 3px !important; - - * { - background: none !important; - color: #fff !important; - } -} - -.cDrop { - right: 0; - position: absolute; - top: 0; -} - -.coldrop { - background: url("../img/col_drop.png"); - cursor: pointer; - height: 16px; - margin-top: 0.3em; - width: 16px; - - &:hover { - background-color: #999; - } -} - -.coldrop-hover { - background-color: #999; -} - -.cList { - background: #eee; - border: solid 1px #999; - position: absolute; - margin-left: 75%; - right: 0; - max-width: 100%; - overflow-wrap: break-word; - - .lDiv div { - padding: 0.2em 0.5em 0.2em 0.2em; - - &:hover { - background: #ddd; - cursor: pointer; - } - - input { - cursor: pointer; - } - } -} - -.showAllColBtn { - border-bottom: solid 1px #999; - border-top: solid 1px #999; - cursor: pointer; - font-size: 0.9em; - font-weight: bold; - padding: 0.35em 1em; - text-align: center; - - &:hover { - background: #ddd; - } -} - -.navigation { - background: #e5e5e5; - border: 1px solid black; - margin: 0.8em 0; - - td { - margin: 0; - padding: 0; - vertical-align: middle; - white-space: nowrap; - } -} - -.navigation_separator { - color: #555; - display: inline-block; - text-align: center; - width: 1.2em; - text-shadow: 1px 0 #fff; -} - -.navigation { - input { - &[type="submit"] { - background: none; - border: 0; - margin: 0; - padding: 0.3em 0.5em; - min-width: 1.5em; - font-weight: bold; - - &:hover { - background: #333; - color: white; - cursor: pointer; - } - } - - &.edit_mode_active { - background: #333; - color: white; - cursor: pointer; - } - } - - select { - margin: 0 0.8em; - } -} - -.cEdit { - margin: 0; - padding: 0; - position: absolute; - - input { - &[type="text"], - &[type="password"], - &[type="number"] { - background: #fff; - height: 100%; - margin: 0; - padding: 0; - } - } - - .edit_area { - background: #fff; - border: 1px solid #999; - min-width: 10em; - padding: 0.3em 0.5em; - - select, - textarea { - width: 97%; - } - } - - .cell_edit_hint { - color: #555; - font-size: 0.8em; - margin: 0.3em 0.2em; - } - - .edit_box { - overflow-x: hidden; - overflow-y: scroll; - padding: 0; - } - - .edit_box_posting { - background: #fff url("../img/ajax_clock_small.gif") no-repeat right center; - padding-right: 1.5em; - } - - .edit_area_loading { - background: #fff url("../img/ajax_clock_small.gif") no-repeat center; - height: 10em; - } - - .goto_link { - background: #eee; - color: #555; - padding: 0.2em 0.3em; - } -} - -.saving_edited_data { - background: url("../img/ajax_clock_small.gif") no-repeat left; - padding-left: 20px; -} - -/* css for timepicker */ - -.ui-timepicker-div { - .ui-widget-header { - margin-bottom: 8px; - } - - dl { - text-align: left; - - dt { - height: 25px; - margin-bottom: -25px; - } - - dd { - margin: 0 10px 10px 85px; - } - } - - td { - font-size: 90%; - } -} - -.ui-tpicker-grid-label { - background: none; - border: none; - margin: 0; - padding: 0; -} - -.ui-timepicker-rtl { - direction: rtl; - - dl { - text-align: right; - - dd { - margin: 0 65px 10px 10px; - } - } -} - -input.btn { - color: #333; - background-color: #d0dce0; -} - -body .ui-widget { - font-size: 1em; -} - -body #ui-datepicker-div { - z-index: 9999 !important; -} - -.ui-dialog .pma-fieldset legend a { - color: #00f; -} - -.ui-draggable { - z-index: 801; -} - -.relationalTable { - td { - vertical-align: top; - } - - select { - width: 125px; - margin-right: 5px; - } -} - -div#page_content div { - &#tableslistcontainer { - margin-top: 1em; - - table.data { - border-top: 0.1px solid #eee; - } - } - - &.result_query { - margin-top: 1em; - } -} - -table.show_create { - margin-top: 1em; - - td { - border-right: 1px solid #bbb; - } -} - -#alias_modal { - table { - width: 100%; - } - - label { - font-weight: bold; - } -} - -.ui-dialog { - position: fixed; -} - -.small_font { - font-size: smaller; -} - -/* Console styles */ -#pma_console_container { - width: 100%; - position: fixed; - bottom: 0; - left: 0; - z-index: 100; -} - -textarea { - resize: both; -} - -#pma_console { - position: relative; - margin-left: 240px; - z-index: 100; - - .templates { - display: none; - } - - .mid_text { - vertical-align: middle; - } - - .toolbar { - position: relative; - background: #ccc; - border-top: solid 1px #aaa; - cursor: n-resize; - - span { - vertical-align: middle; - } - - &.collapsed { - cursor: default; - - &:not(:hover) { - display: inline-block; - border-top-right-radius: 3px; - border-right: solid 1px #aaa; - } - - > .button { - display: none; - } - } - } - - .message span { - &.text, - &.action { - padding: 0 3px; - display: inline-block; - } - } - - .toolbar { - .button, - .text { - padding: 0 3px; - display: inline-block; - } - } - - .switch_button { - padding: 0 3px; - display: inline-block; - } - - .message span.action, - .toolbar .button, - .switch_button { - cursor: pointer; - } - - .message span.action:hover, - .toolbar .button:hover, - .switch_button:hover { - background: #ddd; - } - - .toolbar { - .button.active { - background: #ddd; - } - - .text { - font-weight: bold; - } - - .button, - .text { - margin-right: 0.4em; - float: right; - } - } - - .content { - overflow-x: hidden; - overflow-y: auto; - margin-bottom: -65px; - border-top: solid 1px #aaa; - background: #fff; - padding-top: 0.4em; - - &.console_dark_theme { - background: #000; - color: #fff; - - .CodeMirror-wrap { - background: #000; - color: #fff; - } - - .action_content { - color: #000; - } - - .message { - border-color: #373b41; - } - - .CodeMirror-cursor { - border-color: #fff; - } - - .cm-keyword { - color: #de935f; - } - } - } - - .message, - .query_input { - position: relative; - font-family: Monaco, Consolas, monospace; - cursor: text; - margin: 0 10px 0.2em 1.4em; - } - - .message { - border-bottom: solid 1px #ccc; - padding-bottom: 0.2em; - - &.expanded > .action_content { - position: relative; - } - - &::before { - left: -0.7em; - position: absolute; - content: ">"; - } - } - - .query_input { - &::before { - left: -0.7em; - position: absolute; - content: ">"; - top: -2px; - } - - textarea { - width: 100%; - height: 4em; - resize: vertical; - } - } - - .message { - &:hover::before { - color: #7cf; - font-weight: bold; - } - - &.expanded::before { - content: "]"; - } - - &.welcome::before { - display: none; - } - - &.failed { - &::before, - &.expanded::before, - &:hover::before { - content: "="; - color: #944; - } - } - - &.pending::before { - opacity: 0.3; - } - - &.collapsed > .query { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - } - - &.expanded > .query { - display: block; - white-space: pre; - word-wrap: break-word; - } - - .text.targetdb, - &.collapsed .action.collapse, - &.expanded .action.expand { - display: none; - } - - .action { - &.requery, - &.profiling, - &.explain, - &.bookmark { - display: none; - } - } - - &.select .action { - &.profiling, - &.explain { - display: inline-block; - } - } - - &.history .text.targetdb, - &.successed .text.targetdb { - display: inline-block; - } - - &.history .action { - &.requery, - &.bookmark { - display: inline-block; - } - } - - &.bookmark .action { - &.requery, - &.bookmark { - display: inline-block; - } - } - - &.successed .action { - &.requery, - &.bookmark { - display: inline-block; - } - } - - .action_content { - position: absolute; - bottom: 100%; - background: #ccc; - border: solid 1px #aaa; - border-top-left-radius: 3px; - } - - &.bookmark .text.targetdb, - .text.query_time { - margin: 0; - display: inline-block; - } - - &.failed .text.query_time, - .text.failed { - display: none; - } - - &.failed .text.failed { - display: inline-block; - } - - .text { - background: #fff; - } - - &.collapsed { - > .action_content { - display: none; - } - - &:hover > .action_content { - display: block; - } - } - - .bookmark_label { - padding: 0 4px; - top: 0; - background: #369; - color: #fff; - border-radius: 3px; - - &.shared { - background: #396; - } - } - - &.expanded .bookmark_label { - border-top-left-radius: 0; - border-top-right-radius: 0; - } - } - - .query_input { - position: relative; - } - - .mid_layer { - height: 100%; - width: 100%; - position: absolute; - top: 0; - - /* For support IE8, this layer doesn't use filter:opacity or opacity, - js code will fade this layer opacity to 0.18(using animation) */ - background: #666; - display: none; - cursor: pointer; - z-index: 200; - } - - .card { - position: absolute; - width: 94%; - height: 100%; - min-height: 48px; - left: 100%; - top: 0; - border-left: solid 1px #999; - z-index: 300; - transition: left 0.2s; - - &.show { - left: 6%; - box-shadow: -2px 1px 4px -1px #999; - } - } -} - -#pma_bookmarks .content.add_bookmark, -#pma_console_options .content { - padding: 4px 6px; -} - -#pma_bookmarks .content.add_bookmark { - .options { - margin-left: 1.4em; - padding-bottom: 0.4em; - margin-bottom: 0.4em; - border-bottom: solid 1px #ccc; - - button { - margin: 0 7px; - vertical-align: bottom; - } - } - - input[type="text"] { - margin: 0; - padding: 2px 4px; - } -} - -#pma_console { - .button.hide, - .message span.text.hide { - display: none; - } -} - -#debug_console { - &.grouped .ungroup_queries { - display: inline-block; - } - - &.ungrouped { - .group_queries { - display: inline-block; - } - - .ungroup_queries, - .sort_count { - display: none; - } - } - - &.grouped .group_queries { - display: none; - } - - .count { - margin-right: 8px; - } - - .show_trace .trace, - .show_args .args { - display: block; - } - - .hide_trace .trace, - .hide_args .args, - .show_trace .action.dbg_show_trace, - .hide_trace .action.dbg_hide_trace { - display: none; - } - - .traceStep { - &.hide_args .action.dbg_hide_args, - &.show_args .action.dbg_show_args { - display: none; - } - - &::after { - content: ""; - display: table; - clear: both; - } - } - - .trace.welcome::after, - .debug > .welcome::after { - content: ""; - display: table; - clear: both; - } - - .debug_summary { - float: left; - } - - .trace.welcome .time, - .traceStep .file, - .script_name { - float: right; - } - - .traceStep .args pre { - margin: 0; - } -} - -/* Code mirror console style */ - -.cm-s-pma { - .CodeMirror-code { - font-family: Monaco, Consolas, monospace; - - pre { - font-family: Monaco, Consolas, monospace; - } - } - - .CodeMirror-measure > pre, - .CodeMirror-code > pre, - .CodeMirror-lines { - padding: 0; - } - - &.CodeMirror { - resize: none; - height: auto; - width: 100%; - min-height: initial; - max-height: initial; - } - - .CodeMirror-scroll { - cursor: text; - } -} - -/* PMA drop-improt style */ - -.pma_drop_handler { - display: none; - position: fixed; - top: 0; - left: 0; - width: 100%; - background: rgba(0, 0, 0, 0.6); - height: 100%; - z-index: 999; - color: white; - font-size: 30pt; - text-align: center; - padding-top: 20%; -} - -.pma_sql_import_status { - display: none; - position: fixed; - bottom: 0; - right: 25px; - width: 400px; - border: 1px solid #999; - background: #f3f3f3; - border-radius: 4px; - box-shadow: 2px 2px 5px #ccc; - - h2 { - background-color: #bbb; - padding: 0.1em 0.3em; - margin-top: 0; - margin-bottom: 0; - color: #fff; - font-size: 1.6em; - font-weight: normal; - text-shadow: 0 1px 0 #777; - box-shadow: 1px 1px 15px #999 inset; - } -} - -.pma_drop_result h2 { - background-color: #bbb; - padding: 0.1em 0.3em; - margin-top: 0; - margin-bottom: 0; - color: #fff; - font-size: 1.6em; - font-weight: normal; - text-shadow: 0 1px 0 #777; - box-shadow: 1px 1px 15px #999 inset; -} - -.pma_sql_import_status { - div { - height: 270px; - overflow-y: auto; - overflow-x: hidden; - list-style-type: none; - - li { - padding: 8px 10px; - border-bottom: 1px solid #bbb; - color: rgb(148, 14, 14); - background: white; - - .filesize { - float: right; - } - } - } - - h2 { - .minimize { - float: right; - margin-right: 5px; - padding: 0 10px; - } - - .close { - float: right; - margin-right: 5px; - padding: 0 10px; - display: none; - } - - .minimize:hover, - .close:hover { - background: rgba(155, 149, 149, 0.78); - cursor: pointer; - } - } -} - -.pma_drop_result h2 .close:hover { - background: rgba(155, 149, 149, 0.78); - cursor: pointer; -} - -.pma_drop_file_status { - color: #235a81; - - span.underline:hover { - cursor: pointer; - text-decoration: underline; - } -} - -.pma_drop_result { - position: fixed; - top: 10%; - left: 20%; - width: 60%; - background: white; - min-height: 300px; - z-index: 800; - box-shadow: 0 0 15px #999; - border-radius: 10px; - cursor: move; - - h2 .close { - float: right; - margin-right: 5px; - padding: 0 10px; - } -} - -#composite_index_list { - list-style-type: none; - list-style-position: inside; -} - -span.drag_icon { - display: inline-block; - background-image: url("../img/s_sortable.png"); - background-position: center center; - background-repeat: no-repeat; - width: 1em; - height: 3em; - cursor: move; -} - -.topmargin { - margin-top: 1em; -} - -/* styles for jQuery-ui to support rtl languages */ - -body { - .ui-dialog { - .ui-dialog-titlebar-close { - right: 0.3em; - left: initial; - } - - .ui-dialog-title { - float: left; - } - - .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; - } - } - - .ui-corner-all, - .ui-corner-top, - .ui-corner-left, - .ui-corner-tl { - border-top-left-radius: 0; - } - - .ui-corner-all, - .ui-corner-top, - .ui-corner-right, - .ui-corner-tr { - border-top-right-radius: 0; - } - - .ui-corner-all, - .ui-corner-bottom, - .ui-corner-left, - .ui-corner-bl { - border-bottom-left-radius: 0; - } - - .ui-corner-all, - .ui-corner-bottom, - .ui-corner-right, - .ui-corner-br { - border-bottom-right-radius: 0; - } - - .ui-dialog { - padding: 0; - border-color: #000; - - .ui-dialog-titlebar { - padding: 0.3em 0.5em; - border: none; - border-bottom: 1px solid #000; - - button { - border: 1px solid #999; - } - } - - .ui-dialog-content { - padding: 0.2em 0.4em; - } - - .ui-dialog-buttonpane { - background: #d3dce3; - border-top: 1px solid #000; - - button { - margin: 0.1em 0 0.1em 0.4em; - border: 1px solid #999; - color: #000; - } - } - - .ui-button-text-only .ui-button-text { - padding: 0.2em 0.6em; - } - } -} - -/* templates/database/multi_table_query */ - -.multi_table_query_form { - .query-form__tr--hide { - display: none; - } - - .query-form__fieldset--inline, - .query-form__select--inline { - display: inline; - } - - .query-form__tr--bg-none { - background: none; - } - - .query-form__input--wide { - width: 91%; - } - - .query-form__multi-sql-query { - float: left; - } -} - -/* templates/database/designer */ - -/* side menu */ -#name-panel { - overflow: hidden; -} - -@media only screen and (max-width: 768px) { - .responsivetable { - overflow-x: auto; - } - - body#loginform div.container { - width: 100%; - } - - .largescreenonly { - display: none; - } - - .width96 { - width: 96% !important; - } - - #page_nav_icons { - display: none; - } - - #table_name_col_no { - top: 62px; - } - - .tdblock tr td { - display: block; - } - - #table_columns { - margin-top: 60px; - - .tablesorter { - min-width: 100%; - } - } - - .doubleFieldset .pma-fieldset { - width: 98%; - } - - div#serverstatusquerieschart { - width: 100%; - height: 450px; - } - - .ui-dialog { - margin: 1%; - width: 95% !important; - } - - #server-breadcrumb .item { - margin: 4px; - } -} - -#tooltip_editor { - font-size: 12px; - background-color: #fff; - opacity: 0.95; - filter: alpha(opacity=95); - padding: 5px; -} - -#tooltip_font { - font-weight: bold; -} - -#selection_box { - z-index: 1000; - height: 205px; - position: absolute; - background-color: #87ceeb; - opacity: 0.4; - filter: alpha(opacity=40); - pointer-events: none; -} - -#filterQueryText { - vertical-align: baseline; -} - -.ui_tpicker_hour_slider, -.ui_tpicker_minute_slider, -.ui_tpicker_second_slider, -.ui_tpicker_millisec_slider, -.ui_tpicker_microsec_slider { - margin-left: 20px; - margin-top: 4px; - height: 0.75rem; -} - -.ui_tpicker_time_input { - width: 100%; -} - -// Enable scrollable blocks of code -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; -} - -// Extra large devices (large desktops, 1200px and up) -@include media-breakpoint-up(xl) { - div.tools { - text-align: left; - } - - .pma-fieldset.tblFooters, - .tblFooters { - text-align: left; - } -} - -.resize-vertical { - resize: vertical; -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/scss/_reboot.scss b/Sources/php_script/script/phpMyAdmin/themes/original/scss/_reboot.scss deleted file mode 100644 index fc5ef85..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/original/scss/_reboot.scss +++ /dev/null @@ -1,17 +0,0 @@ -// Body - -body { - text-align: left; -} - -// Forms - -input, -select { - font-size: 1em; -} - -textarea { - font-family: $font-family-monospace; - font-size: 1.2em; -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/scss/_variables.scss b/Sources/php_script/script/phpMyAdmin/themes/original/scss/_variables.scss deleted file mode 100644 index c9e2af6..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/original/scss/_variables.scss +++ /dev/null @@ -1,172 +0,0 @@ -// configures general layout for detailed layout configuration please refer to the css files - -// navi frame - -// navi frame width -$navi-width: 240px; - -// foreground (text) color for the navi frame -$navi-color: #000; - -// background for the navi frame -$navi-background: #d0dce0; - -// foreground (text) color of the pointer in navi frame -$navi-pointer-color: #000; - -// background of the pointer in navi frame -$navi-pointer-background: #99c; - -// main frame - -// foreground (text) color for the main frame -$main-color: #000; - -// foreground (text) color of the pointer in browse mode -$browse-pointer-color: #000; - -// background of the pointer in browse mode -$browse-pointer-background: #cfc; - -// foreground (text) color of the marker (visually marks row by clicking on it) -// in browse mode -$browse-marker-color: #000; - -// background of the marker (visually marks row by clicking on it) in browse mode -$browse-marker-background: #fc9; - -// tables - -// border -$border: 0; -// table header and footer color -$th-background: #d3dce3; -// table header and footer background -$th-color: #000; -// table data row background -$bg-one: #e5e5e5; -// table data row background, alternate -$bg-two: #d5d5d5; - -// Bootstrap -// --------- - -// Body - -$body-bg: #f5f5f5; -$body-color: $main-color; - -// Links - -$link-color: #00f; -$link-decoration: none; -$link-hover-color: #f00; -$link-hover-decoration: underline; - -// Components - -$border-radius: 0; - -// Typography - -$font-family-base: sans-serif; -$font-family-monospace: monospace; - -$font-size-base: 0.82rem; - -$h1-font-size: 140%; -$h2-font-size: 120%; -$h3-font-size: 1rem; - -$headings-font-weight: bold; - -// Tables - -$table-cell-padding: 0.1em 0.5em; -$table-cell-padding-sm: $table-cell-padding; -$table-striped-order: even; -$table-bg: transparent; -$table-hover-bg: $browse-pointer-background; -$table-hover-color: $browse-pointer-color; -$table-head-color: $th-color; -$table-head-bg: $th-background; - -// Dropdowns - -$dropdown-padding-y: 0; -$dropdown-item-padding-y: 0; -$dropdown-item-padding-x: 0; - -// Navs - -$nav-tabs-border-color: transparent; -$nav-tabs-link-active-border-color: $bg-two $bg-two #f5f5f5; -$nav-tabs-link-hover-border-color: $bg-two $bg-two #f5f5f5; -$nav-tabs-link-active-color: #00f; -$nav-tabs-link-active-bg: $bg-one; - -// Navbar - -$enable-transitions: false; -$enable-caret: false; -$navbar-padding-y: 0; -$navbar-padding-x: 0; -$navbar-nav-link-padding-x: 2px; -$navbar-nav-link-padding-y: 2px; -$navbar-light-color: #00f; -$navbar-light-hover-color: #f00; -$navbar-light-active-color: #00f; -$navbar-light-disabled-color: #00f; - -// Pagination - -$pagination-border-color: $main-color; -$pagination-hover-border-color: $main-color; -$pagination-active-border-color: $main-color; -$pagination-disabled-border-color: $main-color; - -// Card - -$card-border-radius: 0; -$card-border-color: $main-color; -$card-cap-bg: $th-background; -$card-bg: $bg-one; -$card-spacer-y: 0.5em; -$card-spacer-x: 0.5em; - -// Accordion - -$accordion-button-padding-y: 0.375rem; -$accordion-button-padding-x: 0.75rem; -$accordion-button-color: #00f; -$accordion-button-active-color: #00f; -$accordion-button-active-bg: $bg-one; - -// Breadcrumbs - -$breadcrumb-navbar-padding-y: 0.1rem; -$breadcrumb-navbar-padding-x: 2.2em; -$breadcrumb-navbar-margin-bottom: 0; -$breadcrumb-navbar-bg: white; -$breadcrumb-divider-color: inherit; -$breadcrumb-divider: quote("»"); - -// Alert - -$alert-margin-bottom: 0.2em; -$alert-border-radius: 0; -$alert-border-width: 2px; - -// List group - -$list-group-bg: inherit; -$list-group-item-padding-x: 0.75rem; -$list-group-item-padding-y: 0.375rem; - -// Modals - -$modal-content-border-radius: 0; -$modal-header-border-color: #000; -$modal-inner-padding: 0.75rem; -$modal-footer-margin-between: 0.1rem; -$modal-header-padding-y: 0.4rem; diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/scss/theme.scss b/Sources/php_script/script/phpMyAdmin/themes/original/scss/theme.scss deleted file mode 100644 index d3af823..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/original/scss/theme.scss +++ /dev/null @@ -1,21 +0,0 @@ -@import "variables"; -@import "../../bootstrap/scss/bootstrap"; -@import "common"; -@import "../../pmahomme/scss/enum-editor"; -@import "../../pmahomme/scss/gis"; -@import "navigation"; -@import "../../pmahomme/scss/designer"; -@import "../../pmahomme/scss/codemirror"; -@import "../../pmahomme/scss/jqplot"; -@import "icons"; -@import "reboot"; -@import "tables"; -@import "forms"; -@import "nav"; -@import "navbar"; -@import "card"; -@import "breadcrumb"; -@import "alert"; -@import "list-group"; -@import "modal"; -@import "../../pmahomme/scss/print"; diff --git a/Sources/php_script/script/phpMyAdmin/themes/original/theme.json b/Sources/php_script/script/phpMyAdmin/themes/original/theme.json deleted file mode 100644 index a2f6e50..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/original/theme.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "name": "Original", - "version": "5.0", - "description": "Original phpMyAdmin theme", - "author": "phpMyAdmin developers", - "url": "https://www.phpmyadmin.net/", - "supports": ["5.0", "5.1", "5.2"] -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.css.map b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.css.map deleted file mode 100644 index 6f7826f..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sourceRoot":"","sources":["../../../node_modules/bootstrap/scss/_root.scss","../../../node_modules/bootstrap/scss/_reboot.scss","../../../node_modules/bootstrap/scss/vendor/_rfs.scss","../../../node_modules/bootstrap/scss/_variables.scss","../scss/_variables.scss","../../../node_modules/bootstrap/scss/mixins/_border-radius.scss","../../../node_modules/bootstrap/scss/_type.scss","../../../node_modules/bootstrap/scss/mixins/_lists.scss","../../../node_modules/bootstrap/scss/_containers.scss","../../../node_modules/bootstrap/scss/mixins/_container.scss","../../../node_modules/bootstrap/scss/mixins/_breakpoints.scss","../../../node_modules/bootstrap/scss/_grid.scss","../../../node_modules/bootstrap/scss/mixins/_grid.scss","../../../node_modules/bootstrap/scss/_tables.scss","../../../node_modules/bootstrap/scss/mixins/_table-variants.scss","../../../node_modules/bootstrap/scss/forms/_labels.scss","../../../node_modules/bootstrap/scss/forms/_form-text.scss","../../../node_modules/bootstrap/scss/forms/_form-control.scss","../../../node_modules/bootstrap/scss/mixins/_box-shadow.scss","../../../node_modules/bootstrap/scss/mixins/_gradients.scss","../../../node_modules/bootstrap/scss/forms/_form-select.scss","../../../node_modules/bootstrap/scss/forms/_form-check.scss","../../../node_modules/bootstrap/scss/forms/_form-range.scss","../../../node_modules/bootstrap/scss/forms/_floating-labels.scss","../../../node_modules/bootstrap/scss/forms/_input-group.scss","../../../node_modules/bootstrap/scss/mixins/_forms.scss","../../../node_modules/bootstrap/scss/_buttons.scss","../../../node_modules/bootstrap/scss/mixins/_buttons.scss","../../../node_modules/bootstrap/scss/_transitions.scss","../../../node_modules/bootstrap/scss/_dropdown.scss","../../../node_modules/bootstrap/scss/_button-group.scss","../../../node_modules/bootstrap/scss/_nav.scss","../../../node_modules/bootstrap/scss/_navbar.scss","../../../node_modules/bootstrap/scss/_card.scss","../../../node_modules/bootstrap/scss/_accordion.scss","../../../node_modules/bootstrap/scss/_breadcrumb.scss","../../../node_modules/bootstrap/scss/_pagination.scss","../../../node_modules/bootstrap/scss/mixins/_pagination.scss","../../../node_modules/bootstrap/scss/_badge.scss","../../../node_modules/bootstrap/scss/_alert.scss","../../../node_modules/bootstrap/scss/mixins/_alert.scss","../../../node_modules/bootstrap/scss/_list-group.scss","../../../node_modules/bootstrap/scss/mixins/_list-group.scss","../../../node_modules/bootstrap/scss/_close.scss","../../../node_modules/bootstrap/scss/_modal.scss","../../../node_modules/bootstrap/scss/mixins/_backdrop.scss","../../../node_modules/bootstrap/scss/_spinners.scss","../../../node_modules/bootstrap/scss/mixins/_clearfix.scss","../../../node_modules/bootstrap/scss/helpers/_colored-links.scss","../../../node_modules/bootstrap/scss/helpers/_ratio.scss","../../../node_modules/bootstrap/scss/helpers/_position.scss","../../../node_modules/bootstrap/scss/helpers/_stacks.scss","../../../node_modules/bootstrap/scss/helpers/_visually-hidden.scss","../../../node_modules/bootstrap/scss/mixins/_visually-hidden.scss","../../../node_modules/bootstrap/scss/helpers/_stretched-link.scss","../../../node_modules/bootstrap/scss/helpers/_text-truncation.scss","../../../node_modules/bootstrap/scss/mixins/_text-truncate.scss","../../../node_modules/bootstrap/scss/helpers/_vr.scss","../../../node_modules/bootstrap/scss/mixins/_utilities.scss","../../../node_modules/bootstrap/scss/utilities/_api.scss","../scss/_common.scss","../scss/_enum-editor.scss","../scss/_gis.scss","../scss/_navigation.scss","../scss/_designer.scss","../scss/_codemirror.scss","../scss/_jqplot.scss","../scss/_icons.scss","../scss/_reboot.scss","../scss/_tables.scss","../scss/_forms.scss","../scss/_buttons.scss","../scss/_nav.scss","../scss/_navbar.scss","../scss/_card.scss","../../bootstrap/scss/_breadcrumb.scss","../scss/_breadcrumb.scss","../scss/_pagination.scss","../scss/_alert.scss","../scss/_list-group.scss","../scss/_modal.scss","../scss/_print.scss"],"names":[],"mappings":"CAAA,MAQI,kQAIA,+MAIA,mKAIA,+OAGF,8BACA,wBACA,gCACA,gCAMA,sNACA,+BACA,0FAQA,kCACA,6BACA,2BACA,2BACA,sBAIA,mBCnCF,qBAGE,sBAeE,8CANJ,MAOM,wBAcN,KACE,SACA,uCCmPI,UALI,yBD5OR,uCACA,uCACA,2BACA,qCACA,mCACA,8BACA,0CAUF,GACE,cACA,ME+kB4B,QF9kB5B,8BACA,SACA,QE8kB4B,IF3kB9B,eACE,OEwb4B,IF9a9B,0CACE,aACA,cEohB4B,MFjhB5B,YEohB4B,IFnhB5B,YEohB4B,IFhhB9B,OCoMM,UALI,KD1LV,OC+LM,UALI,IDrLV,OC0LM,UALI,KDhLV,OCqLM,UALI,QD3KV,OCgLM,UALI,SDtKV,OC2KM,UALI,QD3JV,EACE,aACA,cEkU0B,KFvT5B,yCAEE,iCACA,YACA,8BAMF,QACE,mBACA,kBACA,oBAMF,MAEE,kBAGF,SAGE,aACA,mBAGF,wBAIE,gBAGF,GACE,YEuZ4B,IFlZ9B,GACE,oBACA,cAMF,WACE,gBAQF,SAEE,YEgY4B,OFxX9B,aC4EM,UALI,QDhEV,WACE,QE4b4B,KF3b5B,iBEmc4B,QF1b9B,QAEE,kBCwDI,UALI,ODjDR,cACA,wBAGF,mBACA,eAKA,EACE,MG9LW,QH+LX,gBG9LgB,KHgMhB,QACE,MGhMe,QHiMf,gBGhMoB,UH0MtB,4DAEE,cACA,qBAOJ,kBAIE,YE6S4B,yBD/RxB,UALI,IDPR,+BACA,2BAOF,IACE,cACA,aACA,mBACA,wBCLQ,QDUR,SCLI,UALI,QDYN,cACA,kBAIJ,KCZM,UALI,QDmBR,ME1QQ,QF2QR,qBAGA,OACE,cAIJ,IACE,oBCxBI,UALI,QD+BR,MEvTS,KFwTT,iBE/SS,QEEP,oBJgTF,QACE,UC/BE,UALI,IDsCN,YE0Q0B,IFjQ9B,OACE,gBAMF,QAEE,sBAQF,MACE,oBACA,yBAGF,QACE,YEwU4B,MFvU5B,eEuU4B,MFtU5B,ME1VS,QF2VT,gBAOF,GAEE,mBACA,gCAGF,2BAME,qBACA,mBACA,eAQF,MACE,qBAMF,OAEE,gBAQF,iCACE,UAKF,sCAKE,SACA,oBC9HI,UALI,QDqIR,oBAIF,cAEE,oBAKF,cACE,eAGF,OAGE,iBAGA,gBACE,UAOJ,0CACE,aAQF,gDAIE,0BAGE,4GACE,eAON,mBACE,UACA,kBAKF,SACE,gBAUF,SACE,YACA,UACA,SACA,SAQF,OACE,WACA,WACA,UACA,cE6J4B,MDhXtB,iCDsNN,oBCxXE,0BDiXJ,OCxMQ,kBDiNN,SACE,WAOJ,+OAOE,UAGF,4BACE,YASF,cACE,oBACA,6BAmBF,4BACE,wBAKF,+BACE,UAMF,uBACE,aAMF,6BACE,aACA,0BAKF,OACE,qBAKF,OACE,SAOF,QACE,kBACA,eAQF,SACE,wBAQF,SACE,wBKnlBF,MJyQM,UALI,SIlQR,YHumB4B,IGlmB5B,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,gBI7QN,WJsQM,iCIpQJ,YH0lBkB,IGzlBlB,YH2kB0B,ID1e1B,0BIpGF,WJ6QM,kBIvPR,eCrDE,eACA,gBDyDF,aC1DE,eACA,gBD4DF,kBACE,qBAEA,mCACE,aH8lB0B,MGplB9B,YJsNM,UALI,QI/MR,yBAIF,YACE,cHgSO,KDjFH,UALI,SIvMR,wBACE,gBAIJ,mBACE,iBACA,cHsRO,KDjFH,UALI,QI9LR,MHpFS,QGsFT,2BACE,aE/FF,mGCHA,WACA,0CACA,yCACA,kBACA,iBCwDE,yBF5CE,yBACE,ULide,OOtanB,yBF5CE,uCACE,ULide,OOtanB,yBF5CE,qDACE,ULide,OOtanB,0BF5CE,mEACE,ULide,QOtanB,0BF5CE,kFACE,ULide,QQherB,2BCCA,iBACA,aACA,eAEA,uCACA,2CACA,0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iCH3EF,4BGyEA,qBACE,gBACA,kCH3EF,4BGyEA,qBACE,gBACA,kCH3EF,4BGyEA,qBACE,gBACA,kCH3EF,6BGyEA,qBACE,gBACA,kCH3EF,6BGyEA,sBACE,gBACA,kCEnJN,YACE,cZwzBsC,MY/yBxC,gBACE,iCACA,oCACA,gBboRI,UALI,Qa3QR,YZgkB4B,IY5jB9B,mBACE,+BACA,kCb0QI,UALI,SajQV,mBACE,gCACA,mCboQI,UALI,Uc5RV,WACE,WbgzBsC,ODhhBlC,UALI,QcvRR,MbKS,QcVX,cACE,cACA,WACA,uBf8RI,UALI,QetRR,YdqkB4B,IcpkB5B,Yd0kB4B,IczkB5B,MbWW,KaVX,iBdLS,KcMT,4BACA,yBACA,gBZGE,qBaLE,WARW,iCDkBf,yBACE,gBAEA,wDACE,eAKJ,oBACE,MbXS,KaYT,iBd3BO,Kc4BP,ad8zBoC,Kc7zBpC,UCvBE,WARW,oED2Cf,2CAEE,aAIF,2BACE,Md1CO,Qc4CP,UAQF,+CAEE,iBd1DO,Qc6DP,UAIF,oCACE,uBACA,0BACA,kBd0pB0B,OczpB1B,MbxDS,KenBX,iBhBMS,QgBHP,oCF0EA,oBACA,qBACA,mBACA,eACA,wBdgb0B,Ic/a1B,gBAIF,yEACE,iBd+5B8B,Qc55BhC,0CACE,uBACA,0BACA,kBduoB0B,OctoB1B,Mb3ES,KenBX,iBhBMS,QgBHP,oCF6FA,oBACA,qBACA,mBACA,eACA,wBd6Z0B,Ic5Z1B,gBAIF,+EACE,iBd44B8B,Qcn4BlC,wBACE,cACA,WACA,kBACA,gBACA,Ydyd4B,Icxd5B,MbtGW,KauGX,+BACA,2BACA,mBAEA,gFAEE,gBACA,eAWJ,iBACE,WdguBsC,2Bc/tBtC,qBfmJI,UALI,UG7QN,oBYmIF,uCACE,qBACA,wBACA,kBd2lB0B,McxlB5B,6CACE,qBACA,wBACA,kBdqlB0B,McjlB9B,iBACE,Wd8sBsC,yBc7sBtC,mBfgII,UALI,SG7QN,oBYsJF,uCACE,mBACA,qBACA,kBd4kB0B,KczkB5B,6CACE,mBACA,qBACA,kBdskB0B,Kc9jB5B,sBACE,WdqrBoC,4BclrBtC,yBACE,WdkrBoC,2Bc/qBtC,yBACE,Wd+qBoC,yBc1qBxC,oBACE,Md6qBsC,Kc5qBtC,YACA,Qd4hB4B,Qc1hB5B,mDACE,eAGF,uCACE,aZ/LA,qBYmMF,0CACE,aZpMA,qBedJ,aACE,cACA,WACA,uCAEA,uClB2RI,UALI,QkBnRR,YjBkkB4B,IiBjkB5B,YjBukB4B,IiBtkB5B,MhBQW,KgBPX,iBjBRS,KiBST,iPACA,4BACA,oBjBg7BkC,oBiB/6BlC,gBjBg7BkC,UiB/6BlC,yBfFE,qBaLE,WARW,iCEmBf,gBAEA,mBACE,ajBs0BoC,KiBr0BpC,UFfE,WARW,oEEgCf,0DAEE,cjBgsB0B,OiB/rB1B,sBAGF,sBAEE,iBjBpCO,QiByCT,4BACE,oBACA,uBAIJ,gBACE,YjByrB4B,OiBxrB5B,ejBwrB4B,OiBvrB5B,ajBwrB4B,MD/cxB,UALI,UG7QN,oBe8CJ,gBACE,YjBqrB4B,MiBprB5B,ejBorB4B,MiBnrB5B,ajBorB4B,KDndxB,UALI,SG7QN,oBgBfJ,YACE,cACA,WlBq3BwC,QkBp3BxC,alBq3BwC,MkBp3BxC,clBq3BwC,QkBn3BxC,8BACE,WACA,mBAIJ,kBACE,MlBy2BwC,IkBx2BxC,OlBw2BwC,IkBv2BxC,iBACA,mBACA,iBlBbS,KkBcT,4BACA,2BACA,wBACA,OlB42BwC,0BkB32BxC,gBACA,mBAGA,iChBXE,oBgBeF,8BAEE,clBm2BsC,IkBh2BxC,yBACE,OlB01BsC,gBkBv1BxC,wBACE,alBszBoC,KkBrzBpC,UACA,WlBmsB4B,mCkBhsB9B,0BACE,iBjB0DgC,QiBzDhC,ajByDgC,QiBvDhC,yCAEI,kQAMJ,sCAEI,0KAON,+CACE,iBjBsBM,KiBrBN,ajBqBM,KiBlBJ,4PAMJ,2BACE,oBACA,YACA,QlBk0BuC,GkB3zBvC,2FACE,QlB0zBqC,GkB5yB3C,aACE,alBqzBgC,MkBnzBhC,+BACE,MlBizB8B,IkBhzB9B,mBACA,wKACA,gChB9FA,kBgBkGA,qCACE,0JAGF,uCACE,oBlBgzB4B,akB7yB1B,0KAQR,mBACE,qBACA,alBmxBgC,KkBhxBlC,WACE,kBACA,sBACA,oBAIE,mDACE,oBACA,YACA,QlBqoBwB,ImBnxB9B,YACE,WACA,cACA,UACA,+BACA,gBAEA,kBACE,UAIA,mDnB89BuC,kDmB79BvC,+CnB69BuC,kDmB19BzC,8BACE,SAGF,kCACE,MnB+8BuC,KmB98BvC,OnB88BuC,KmB78BvC,oBHzBF,iBfyFQ,KetFN,oCGwBA,OnB88BuC,EE19BvC,mBaLE,WARW,8BI6Bb,gBAEA,yCHjCF,iBhB8+ByC,QgB3+BvC,oCGmCF,2CACE,MnBw7B8B,KmBv7B9B,OnBw7B8B,MmBv7B9B,oBACA,OnBu7B8B,QmBt7B9B,iBnBpCO,QmBqCP,2BjB7BA,mBaLE,WARW,iCI+Cf,8BACE,MnBo7BuC,KmBn7BvC,OnBm7BuC,KgBt+BzC,iBfyFQ,KetFN,oCGkDA,OnBo7BuC,EE19BvC,mBaLE,WARW,8BIuDb,gBAEA,qCH3DF,iBhB8+ByC,QgB3+BvC,oCG6DF,8BACE,MnB85B8B,KmB75B9B,OnB85B8B,MmB75B9B,oBACA,OnB65B8B,QmB55B9B,iBnB9DO,QmB+DP,2BjBvDA,mBaLE,WARW,iCIyEf,qBACE,oBAEA,2CACE,iBnBtEK,QmByEP,uCACE,iBnB1EK,QoBbX,eACE,kBAEA,yDAEE,OpBy/B8B,mBoBx/B9B,YpBy/B8B,KoBt/BhC,qBACE,kBACA,MACA,OACA,YACA,oBACA,oBACA,+BACA,qBAKF,6BACE,oBAEA,0CACE,oBAGF,wFAEE,YpBm+B4B,SoBl+B5B,epBm+B4B,QoBh+B9B,8CACE,YpB89B4B,SoB79B5B,epB89B4B,QoB19BhC,4BACE,YpBw9B8B,SoBv9B9B,epBw9B8B,QoBl9B9B,sIACE,QpBk9B4B,IoBj9B5B,UpBk9B4B,oDoB78B9B,oDACE,QpB28B4B,IoB18B5B,UpB28B4B,oDqBjgClC,aACE,kBACA,aACA,eACA,oBACA,WAEA,qDAEE,kBACA,cACA,SACA,YAIF,iEAEE,UAMF,kBACE,kBACA,UAEA,wBACE,UAWN,kBACE,aACA,mBACA,uBtBsPI,UALI,QsB/OR,YrB8hB4B,IqB7hB5B,YrBmiB4B,IqBliB5B,MpB5BW,KoB6BX,kBACA,mBACA,iBrB5CS,QqB6CT,yBnBpCE,qBmB8CJ,kHAIE,mBtBgOI,UALI,SG7QN,oBmBuDJ,kHAIE,qBtBuNI,UALI,UG7QN,oBmBgEJ,0DAEE,mBAaE,qKnB/DA,0BACA,6BmBqEA,4JnBtEA,0BACA,6BmBgFF,0IACE,iBnBpEA,yBACA,4BoBzBF,gBACE,aACA,WACA,WtByxBoC,ODhhBlC,UALI,QuBjQN,MtB0/BqB,QsBv/BvB,eACE,kBACA,SACA,UACA,aACA,eACA,qBACA,iBvB4PE,UALI,UuBpPN,MAvBc,KAwBd,iBAvBiB,mBpBHjB,qBoB+BA,8HAEE,cA9CF,0DAoDE,atB+9BmB,QsB59BjB,ctB+yBgC,sBsB9yBhC,4PACA,4BACA,2DACA,gEAGF,sEACE,atBo9BiB,QsBn9BjB,WA/Ca,iCAjBjB,0EAyEI,ctB6xBgC,sBsB5xBhC,kFA1EJ,wDAiFE,atBk8BmB,QsB/7BjB,4NAEE,ctB42B8B,SsB32B9B,4dACA,6DACA,0EAIJ,oEACE,atBq7BiB,QsBp7BjB,WA9Ea,iCAjBjB,kEAsGE,atB66BmB,QsB36BnB,kFACE,iBtB06BiB,QsBv6BnB,8EACE,WA5Fa,iCA+Ff,sGACE,MtBk6BiB,QsB75BrB,qDACE,iBAvHF,sKA+HI,UAIF,8LACE,UAjHN,kBACE,aACA,WACA,WtByxBoC,ODhhBlC,UALI,QuBjQN,MtB0/BqB,QsBv/BvB,iBACE,kBACA,SACA,UACA,aACA,eACA,qBACA,iBvB4PE,UALI,UuBpPN,MAvBc,KAwBd,iBAvBiB,mBpBHjB,qBoB+BA,8IAEE,cA9CF,8DAoDE,atB+9BmB,QsB59BjB,ctB+yBgC,sBsB9yBhC,4UACA,4BACA,2DACA,gEAGF,0EACE,atBo9BiB,QsBn9BjB,WA/Ca,iCAjBjB,8EAyEI,ctB6xBgC,sBsB5xBhC,kFA1EJ,4DAiFE,atBk8BmB,QsB/7BjB,oOAEE,ctB42B8B,SsB32B9B,4iBACA,6DACA,0EAIJ,wEACE,atBq7BiB,QsBp7BjB,WA9Ea,iCAjBjB,sEAsGE,atB66BmB,QsB36BnB,sFACE,iBtB06BiB,QsBv6BnB,kFACE,WA5Fa,iCA+Ff,0GACE,MtBk6BiB,QsB75BrB,uDACE,iBAvHF,8KAiII,UAEF,sMACE,UCtIR,KACE,qBAEA,YvBwkB4B,IuBvkB5B,YtByFgB,KsBxFhB,MtBcW,KsBbX,kBAGA,sBACA,eACA,iBACA,+BACA,+BC8GA,uBzBsKI,UALI,QG7QN,qBqBEF,WACE,MtBCS,0BsBGX,iCAEE,UACA,WvBotB4B,mCuBjtB9B,uERlBI,WARW,iCQgCb,+FRxBE,WARW,oEQqCf,mDAGE,oBACA,QvB0uB0B,Ie3wBxB,WARW,KQqDf,aCvCA,MAXQ,KRLR,iBhB4Ea,KgBzEX,oCQeF,axB0Da,KelET,WARW,+DSmBf,mBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,iDAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,iGSsCf,0IAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,wKTzCE,WARW,mES2Df,4CAEE,MAjDe,KAkDf,iBxBYW,KwBVX,sBACA,axBSW,KuBrBb,eCvCA,MAXQ,KRLR,iBhB4Ea,KgBzEX,oCQeF,axB0Da,KelET,WARW,+DSmBf,qBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,qDAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,iGSsCf,oJAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,kLTzCE,WARW,mES2Df,gDAEE,MAjDe,KAkDf,iBxBYW,KwBVX,sBACA,axBSW,KuBrBb,aCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,mBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,iDAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,gGSsCf,0IAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,wKTzCE,WARW,kES2Df,4CAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBrBb,UCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,gBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,2CAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,gGSsCf,2HAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,yJTzCE,WARW,kES2Df,sCAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBrBb,aCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,mBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,iDAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,+FSsCf,0IAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,wKTzCE,WARW,iES2Df,4CAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBrBb,YCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,kBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,+CAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,+FSsCf,qIAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,mKTzCE,WARW,iES2Df,0CAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBrBb,WCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,iBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,6CAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,iGSsCf,gIAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,8JTzCE,WARW,mES2Df,wCAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBrBb,UCvCA,MAXQ,KRLR,iBhB4Ea,QgBzEX,oCQeF,axB0Da,QelET,WARW,+DSmBf,gBACE,MAdY,KRRd,iBQMmB,QRHjB,oCQqBA,aAjBa,QAoBf,2CAEE,MArBY,KRRd,iBQMmB,QRHjB,oCQ4BA,aAxBa,QTGX,WARW,8FSsCf,2HAKE,MAlCa,KAmCb,iBArCkB,QAuClB,sBACA,aAvCc,QAyCd,yJTzCE,WARW,gES2Df,sCAEE,MAjDe,KAkDf,iBxBYW,QwBVX,sBACA,axBSW,QuBfb,qBCmBA,MxBJa,KwBKb,axBLa,KwBOb,2BACE,MATY,KAUZ,iBxBTW,KwBUX,axBVW,KwBab,iEAEE,6CAGF,iLAKE,MArBa,KAsBb,iBxBxBW,KwByBX,axBzBW,KwB2BX,+MT7FE,WARW,mES+Gf,4DAEE,MxBvCW,KwBwCX,+BDvDF,uBCmBA,MxBJa,KwBKb,axBLa,KwBOb,6BACE,MATY,KAUZ,iBxBTW,KwBUX,axBVW,KwBab,qEAEE,6CAGF,2LAKE,MArBa,KAsBb,iBxBxBW,KwByBX,axBzBW,KwB2BX,yNT7FE,WARW,mES+Gf,gEAEE,MxBvCW,KwBwCX,+BDvDF,qBCmBA,MxBJa,QwBKb,axBLa,QwBOb,2BACE,MATY,KAUZ,iBxBTW,QwBUX,axBVW,QwBab,iEAEE,2CAGF,iLAKE,MArBa,KAsBb,iBxBxBW,QwByBX,axBzBW,QwB2BX,+MT7FE,WARW,iES+Gf,4DAEE,MxBvCW,QwBwCX,+BDvDF,kBCmBA,MxBJa,QwBKb,axBLa,QwBOb,wBACE,MATY,KAUZ,iBxBTW,QwBUX,axBVW,QwBab,2DAEE,4CAGF,kKAKE,MArBa,KAsBb,iBxBxBW,QwByBX,axBzBW,QwB2BX,gMT7FE,WARW,kES+Gf,sDAEE,MxBvCW,QwBwCX,+BDvDF,qBCmBA,MxBJa,QwBKb,axBLa,QwBOb,2BACE,MATY,KAUZ,iBxBTW,QwBUX,axBVW,QwBab,iEAEE,2CAGF,iLAKE,MArBa,KAsBb,iBxBxBW,QwByBX,axBzBW,QwB2BX,+MT7FE,WARW,iES+Gf,4DAEE,MxBvCW,QwBwCX,+BDvDF,oBCmBA,MxBJa,QwBKb,axBLa,QwBOb,0BACE,MATY,KAUZ,iBxBTW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M,iGAGE,0BAEF,oGAGE,6BAIJ,oC5BrJJ,yBACA,4B4BuJM,mGAGE,yBAEF,sGAGE,6BC7MZ,kBACE,kBACA,aACA,mBACA,WACA,uBhC4RI,UALI,QgCrRR,M9BYW,K8BXX,gBACA,iB/BLS,K+BMT,S7BKE,gB6BHF,qBAGA,kCACE,M9B6H4B,Q8B5H5B,iB9BVc,Q8BWd,2CAEA,yCACE,iSACA,U/B4vCoC,gB+BvvCxC,yBACE,cACA,M/BivCsC,Q+BhvCtC,O/BgvCsC,Q+B/uCtC,iBACA,WACA,8RACA,4BACA,gB/B2uCsC,Q+BvuCxC,wBACE,UAGF,wBACE,UACA,a/BizBoC,K+BhzBpC,UACA,W/B8rB4B,mC+B1rBhC,kBACE,gBAGF,gBACE,iB/BpDS,K+BqDT,kCAEA,8B7BnCE,8BACA,+B6BqCA,gD7BtCA,2CACA,4C6B0CF,oCACE,aAIF,6B7BlCE,kCACA,iC6BqCE,yD7BtCF,+CACA,8C6B0CA,iD7B3CA,kCACA,iC6BgDJ,gBACE,qBASA,qCACE,eAGF,iCACE,eACA,c7BxFA,gB6B2FA,0DACA,4DAEA,mD7B9FA,gB8BnBJ,YACE,aACA,eACA,YACA,chCw/CkC,KgCt/ClC,gBAOA,kCACE,ahC6+CgC,MgC3+ChC,0CACE,WACA,chCy+C8B,MgCx+C9B,M/BuIqB,K+BtIrB,uFAIJ,wBACE,MhCXO,QiCdX,YACE,a7BGA,eACA,2B6BCA,kBACA,cACA,MhCoDW,QgClDX,iBjCFS,KiCGT,sBAGA,iBACE,UACA,MhC8Ce,QgC7Cf,qBACA,iBjCRO,QiCSP,ahCgH4B,KgC7G9B,iBACE,UACA,MhCsCe,QgCrCf,iBjCfO,QiCgBP,QjC4qCgC,EiC3qChC,WjCstB4B,mCiCjtB9B,wCACE,YjC+pCgC,KiC5pClC,6BACE,UACA,MhC2FsB,Qe7HxB,iBfyFQ,KetFN,oCiBiCA,ahC4F6B,KgCzF/B,+BACE,MjC9BO,QiC+BP,oBACA,iBjCtCO,KiCuCP,ahCsF+B,KiCjIjC,WACE,uBAOI,kChCqCJ,8BACA,iCgChCI,iChCiBJ,+BACA,kCgChCF,0BACE,sBnCgSE,UALI,SmCpRF,iDhCqCJ,6BACA,gCgChCI,gDhCiBJ,8BACA,iCgChCF,0BACE,qBnCgSE,UALI,UmCpRF,iDhCqCJ,6BACA,gCgChCI,gDhCiBJ,8BACA,iCiC/BJ,OACE,qBACA,oBpC8RI,UALI,OoCvRR,YnCukB4B,ImCtkB5B,cACA,MnCHS,KmCIT,kBACA,mBACA,wBjCKE,qBcZA,oCmBYF,aACE,aAKJ,YACE,kBACA,SCvBF,OACE,kBACA,kBACA,cnC8JoB,KmC7JpB,+BlCWE,kBkCNJ,eAEE,cAIF,YACE,YpC4jB4B,IoCpjB9B,mBACE,cpCm5C8B,KoCh5C9B,8BACE,kBACA,MACA,QACA,UACA,qBAeF,eClDA,MDgDgB,QpB9ChB,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,2BACE,cD6CF,iBClDA,MDgDgB,QpB9ChB,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,6BACE,cD6CF,eClDA,MD8Cc,QpB5Cd,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,2BACE,cD6CF,YClDA,MDgDgB,QpB9ChB,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,wBACE,cD6CF,eClDA,MDgDgB,QpB9ChB,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,2BACE,cD6CF,cClDA,MD8Cc,QpB5Cd,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,0BACE,cD6CF,aClDA,MDgDgB,QpB9ChB,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,yBACE,cD6CF,YClDA,MD8Cc,QpB5Cd,iBoB0CmB,QpBvCjB,oCqBHF,aD2Ce,QCzCf,wBACE,cCHJ,YACE,aACA,sBAGA,eACA,gBpCSE,qBoCLJ,qBACE,qBACA,sBAEA,gCAEE,oCACA,0BAUJ,wBACE,WACA,MtClBS,QsCmBT,mBAGA,4DAEE,UACA,MtCzBO,QsC0BP,qBACA,iBtCjCO,QsCoCT,+BACE,MrCvBS,KqCwBT,iBtCrCO,QsC8CX,iBACE,kBACA,cACA,uBACA,MtC3CS,QsC6CT,iBrC4Gc,QqC3Gd,kCAEA,6BpCrCE,+BACA,gCoCwCF,4BpC3BE,mCACA,kCoC8BF,oDAEE,MtC7DO,QsC8DP,oBACA,iBrC6FY,QqCzFd,wBACE,UACA,MtC3EO,KsC4EP,iBrCSM,KqCRN,arCQM,KqCLR,kCACE,mBAEA,yCACE,gBACA,iBtCwawB,IsC1Z1B,uBACE,mBAGE,oDpCrCJ,iCAZA,0BoCsDI,mDpCtDJ,+BAYA,4BoC+CI,+CACE,aAGF,yDACE,iBtCuYoB,IsCtYpB,oBAEA,gEACE,iBACA,kBtCkYkB,IOtc1B,yB+B4CA,0BACE,mBAGE,uDpCrCJ,iCAZA,0BoCsDI,sDpCtDJ,+BAYA,4BoC+CI,kDACE,aAGF,4DACE,iBtCuYoB,IsCtYpB,oBAEA,mEACE,iBACA,kBtCkYkB,KOtc1B,yB+B4CA,0BACE,mBAGE,uDpCrCJ,iCAZA,0BoCsDI,sDpCtDJ,+BAYA,4BoC+CI,kDACE,aAGF,4DACE,iBtCuYoB,IsCtYpB,oBAEA,mEACE,iBACA,kBtCkYkB,KOtc1B,yB+B4CA,0BACE,mBAGE,uDpCrCJ,iCAZA,0BoCsDI,sDpCtDJ,+BAYA,4BoC+CI,kDACE,aAGF,4DACE,iBtCuYoB,IsCtYpB,oBAEA,mEACE,iBACA,kBtCkYkB,KOtc1B,0B+B4CA,0BACE,mBAGE,uDpCrCJ,iCAZA,0BoCsDI,sDpCtDJ,+BAYA,4BoC+CI,kDACE,aAGF,4DACE,iBtCuYoB,IsCtYpB,oBAEA,mEACE,iBACA,kBtCkYkB,KOtc1B,0B+B4CA,2BACE,mBAGE,wDpCrCJ,iCAZA,0BoCsDI,uDpCtDJ,+BAYA,4BoC+CI,mDACE,aAGF,6DACE,iBtCuYoB,IsCtYpB,oBAEA,oEACE,iBACA,kBtCkYkB,KsCpX9B,kBpC9HI,gBoCiIF,mCACE,qBAEA,8CACE,sBCpJJ,yBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,4GAEE,MD6JuB,QC5JvB,yBAGF,uDACE,MvCRG,KuCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,2BACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,gHAEE,MD6JuB,QC5JvB,yBAGF,yDACE,MvCRG,KuCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,yBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,4GAEE,MD2JqB,QC1JrB,yBAGF,uDACE,MvCRG,KuCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,sBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,sGAEE,MD6JuB,QC5JvB,yBAGF,oDACE,MvCRG,KuCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,yBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,4GAEE,MD6JuB,QC5JvB,yBAGF,uDACE,MvCRG,KuCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,wBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,0GAEE,MD2JqB,QC1JrB,yBAGF,sDACE,MvCRG,KuCSH,iBDqJqB,QCpJrB,aDoJqB,QClK3B,uBACE,MDmK2B,QClK3B,iBD+JsB,QC5JpB,wGAEE,MD6JuB,QC5JvB,yBAGF,qDACE,MvCRG,KuCSH,iBDuJuB,QCtJvB,aDsJuB,QCpK7B,sBACE,MDiKyB,QChKzB,iBD+JsB,QC5JpB,sGAEE,MD2JqB,QC1JrB,yBAGF,oDACE,MvCRG,KuCSH,iBDqJqB,QCpJrB,aDoJqB,QEjK7B,WACE,uBACA,MxCqjD2B,IwCpjD3B,OxCojD2B,IwCnjD3B,oBACA,MxCQS,KwCPT,6WACA,StCOE,qBsCLF,QxCqjD2B,GwCljD3B,iBACE,WACA,qBACA,QxCgjDyB,IwC7iD3B,iBACE,UACA,WxCwtB4B,mCwCvtB5B,QxC2iDyB,EwCxiD3B,wCAEE,oBACA,iBACA,QxCqiDyB,IwCjiD7B,iBACE,OxCiiD2B,2CyChkD7B,OACE,eACA,MACA,OACA,QzCsiCkC,KyCriClC,aACA,WACA,YACA,kBACA,gBAGA,UAOF,cACE,kBACA,WACA,OzCi2CkC,MyC/1ClC,oBAGA,0BAEE,UzCu3CgC,oByCr3ClC,0BACE,UzCq3CgC,KyCj3ClC,kCACE,UzCk3CgC,YyC92CpC,yBACE,yBAEA,wCACE,gBACA,gBAGF,qCACE,gBAIJ,uBACE,aACA,mBACA,6BAIF,eACE,kBACA,aACA,sBACA,WAGA,oBACA,iBzCpES,KyCqET,4BACA,gCvC3DE,oBaLE,WARW,kC0B4E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BACA,eACA,6BACA,cACA,cAKJ,OACE,eAIF,WACE,mBAGF,WAEE,sBAIA,8DAEE,oBAIJ,OACE,kBACA,sBACA,WACA,YACA,gBAEA,yBACE,WAGF,iBACE,0CAKJ,YACE,WAGF,YACE,gBAGF,WACE,WACA,yBAGF,UACE,aAMA,aACA,mBAEA,aACA,iBACA,WACA,WACA,0BAXA,YACE,yBAaJ,yBACE,aACA,mBAEA,aACA,iBACA,WACA,WACA,0BAGF,aACE,YACA,kBACA,kBACA,eAIA,2BACE,WACA,kBAEA,mBAIF,qCACE,mBAIJ,mBACE,YACA,+BAMF,WACE,6BAGF,aACE,2BACA,mBAGF,aACE,yBACA,mBAGF,2BACE,2BAIF,kBAEE,4BAQF,QACE,kBACA,yBAIA,gCAEE,iBACA,mBAIJ,OACE,YxDxTsB,UwD2TxB,cACE,eAGF,WACE,gBACA,aACA,sBACA,aACA,sBACA,kBAGF,iBACE,mBACA,WACA,gBACA,aACA,UACA,eACA,mBACA,YACA,kBACA,cACA,uBAIF,YACE,qBACA,8BACA,yBAGF,gBACE,kBACA,iBAGF,eACE,gBAIF,kCAGE,kBACA,eAGF,cACE,WACA,sBAGF,OACE,mCACA,cACA,WACA,gBAKF,iBACE,WAGF,YACE,cACA,mBACA,WAGF,YACE,iBACA,MxD/ZS,KwDgaT,WxDlac,QwDqahB,sBAEE,mBACA,MxDtaS,KwDuaT,WxDzac,QwD6ad,8DAGE,WAKF,wDAGE,WAKF,8DAGE,WAIJ,0DAGE,UAIF,UACE,WAGE,wDAGE,WAGF,kBACE,WACA,qBAKN,UACE,qBAGF,aACE,aAMF,eACE,iBACA,kBAEA,2DAEE,cACA,kBAGF,6BACE,gBACA,WACA,cAIJ,yBACE,iBAGF,yBACE,cACA,WACA,kBACA,gBACA,YAGF,iBACE,eACA,MACA,OACA,YACA,WACA,gBACA,YAGF,sCACE,mBAGF,kBACE,8BAGF,kBACE,cAGF,aACE,cACA,eAGF,4BACE,0BAGF,sBACE,gBAGF,uBACE,WAGF,YACE,WAGF,gBACE,iBAGF,iBAEE,8BAKA,6CAEE,SACA,kBAGF,mBACE,gBAIJ,aACE,YAGF,WACE,kBAIF,0BACE,WACA,mBACA,mBACA,gBACA,eAMF,kBACE,kBACA,WAGF,gBACE,eACA,MACA,QACA,WACA,gBAGF,oBACE,eACA,aAGF,8CAEE,aAGF,aACE,UACA,WACA,qDACA,eAGF,kBACE,kBACA,WACA,WACA,YACA,iBACA,kBACA,sBACA,WACA,uBACA,aAKA,kCACE,aACA,mBACA,+BACA,oBACA,mBAGF,+BACE,WACA,cACA,WACA,eACA,iBACA,mBACA,gBAGF,+BACE,WACA,YACA,eAGF,sCACE,WACA,cACA,WACA,eACA,mBAEA,oLAGE,WACA,eAGF,4CACE,WAKN,6BACE,WACA,UACA,eAEA,sCACE,WAGF,mCACE,mBAGF,oCACE,WAIJ,qFAEE,WAGF,0CACE,gBAMF,gBACE,0BACA,cACA,eAGF,yDACE,cACA,eAGF,qBACE,eAGF,cACE,YAGF,6BACE,WACA,YACA,aACA,kBAKE,6EAEE,mBAIJ,cACE,WACA,gBACA,aACA,oBAIJ,0BACE,sBACA,yBACA,iBAIA,mBACE,YACA,SAGF,iCACE,mBACA,YACA,cAIJ,aACE,WACA,cAEA,kCAEE,iBAGF,mBACE,uBAIJ,cACE,aACA,kBACA,sBACA,SACA,YACA,sBACA,UACA,4BAIA,aACE,iBACA,WAEA,mBACE,WAIJ,wBACE,gBAGE,8CACE,YAGF,2CACE,aAIJ,mCACE,YAGF,wCACE,aACA,SACA,gBAKN,aACE,iBAOF,mBACE,YACA,aACA,WAGF,4CACE,oBACA,UACA,YAMF,SACE,wBAIF,eACE,aAKF,gBACE,cAGF,mCACE,cACA,mBACA,WACA,gBAIA,kBACE,WACA,kBACA,sBACA,YACA,oBAGF,wBACE,WACA,UACA,cAQJ,0CAEE,WACA,UAIA,kBACE,qBACA,sBAGF,kBACE,mBAIJ,iBACE,kBACA,YACA,gBACA,YACA,kBACA,sBACA,gBAGF,wBACE,WxDt8BgB,QwDu8BhB,wBAGF,YACE,YACA,YACA,kBAEA,gBACE,uBAGF,wBACE,sBAIJ,UACE,WACA,cACA,eACA,kBACA,UACA,eACA,iBACA,6BAGF,uCAEE,WAGF,IACE,MxD79BW,KwD89BX,+BACA,gBAGF,KACE,cACA,MxDp+BW,KwDs+BX,SACE,cACA,iBACA,aACA,gBACA,gBACA,cACA,cAGF,SACE,cACA,YACA,aACA,gBACA,gBACA,cACA,cAIJ,gBACE,cACA,YACA,aACA,gBACA,gBACA,cACA,cAGF,2BACE,WxD9+BO,QwD++BP,gBAGF,6CAEE,WxDp/BO,QwDu/BT,6BACE,WAIF,MACE,aAGF,aACE,qBACA,UAQA,oBACE,YACA,gBACA,kBAGF,8BACE,sBACA,YACA,kBACA,kBACA,MxD7iCS,KwD+iCT,6CACE,kBACA,MACA,OACA,YAIJ,8BACE,iBxD7jCsB,KwD8jCtB,QACA,YACA,WACA,gBACA,MxDnjCkB,KwDojClB,kBAEA,6CACE,SACA,UAIJ,eACE,gBAKF,sIAIE,WAQF,kIAIE,gBAIJ,oCAEE,gBAMF,mBAEE,MACA,eACA,iBACA,kBACA,gBACA,iBAEA,YACA,YAEA,aACA,kBACA,eACA,OACA,QACA,oDACA,4BACA,uBACA,yBACA,yBACA,kBACA,2BAGF,gBAEE,kBACA,WAGF,mBACE,SAGF,kBACE,aACA,eACA,WACA,YACA,MACA,OACA,gBACA,aACA,gBAGF,4BACE,eAGF,0BACE,iBAGF,8BACE,eACA,gBAQE,sEAEE,WACA,SACA,sBAGF,2BACE,eAGF,8BACE,WACA,eAIJ,mBACE,WACA,YACA,WAGF,uBACE,WAEA,6BACE,gBAIJ,iBACE,SAGF,cACE,sBAIJ,oBACE,WAEA,2BACE,UACA,WAKF,yBACE,YAGF,wBACE,gBACA,SACA,UAGF,wBACE,WxDntCY,QwDotCZ,sBACA,MxDntCO,KwDotCP,iBACA,YACA,aACA,kBAMF,mBACE,aACA,yBACA,0BAGF,sBACE,aACA,UACA,WACA,gBAEA,wBACE,SACA,aACA,gBACA,aAIF,8BACE,kBACA,mBACA,mBACA,gBACA,YxDhuCa,WwDiuCb,gBAIF,qCACE,sBACA,cACA,UACA,gBACA,cACA,gBAGF,2BACE,gBAGF,uCACE,gBACA,cACA,yBACA,WACA,YAGF,yBACE,uBACA,kBACA,gBACA,mBACA,yBACA,YACA,6BACA,kBAEA,+DACE,cACA,mBACA,YxDvwCW,WwDwwCX,kBACA,WAIJ,yBACE,iBACA,oBACA,mBACA,6BACA,kBAIJ,oBACE,aAGF,2BACE,YACA,qBAEA,kCACE,YACA,yBACA,gBAKJ,qBACE,gBAGF,0BACE,6BAIA,gGAGE,yBACA,YAEA,kHACE,yBACA,mBAKN,0CAEE,yBACA,YAEA,sDACE,yBACA,mBAIJ,iCACE,kBACA,WACA,YACA,eACA,iBACA,kBAGF,oCACE,WAIF,gBACE,iBAEA,wBACE,aAOF,0BACE,WxDn3CG,QwDs3CL,6BACE,iBAIJ,uDAEE,mBAGF,uDAEE,iBAGF,2BACE,mBAIA,4BACE,WACA,sBAEA,qEACE,WACA,sBAIJ,4BACE,WACA,sBAKN,oBACE,eAGF,kBACE,gBAGF,gBACE,mBACA,iBAGF,yBACE,kBAGF,aACE,kBACA,sBACA,YACA,gBACA,YACA,aAEA,qBACE,kBACA,eAGF,wBACE,kBACA,WACA,sBACA,YAIJ,SACE,WACA,oBAGF,cACE,kBACA,eACA,eACA,kBACA,kBACA,cACA,gBACA,6BACA,4BACA,mBAEA,uDAGE,UACA,kBAGF,gCACE,kBAEA,sEAEE,2BAIJ,wBACE,WACA,cACA,0BAGF,yBACE,cAKF,8BACE,UACA,WACA,UAGF,uBACE,kBAGF,yBACE,cAIJ,yBACE,gBAGF,mBACE,eACA,SACA,WACA,gBAGF,eACE,cACA,cAGE,sGAGE,WACA,sBAIJ,sBACE,WACA,sBAIJ,eACE,YACA,aAGF,iBACE,YAGF,YACE,SACA,SAGF,aACE,UACA,SAGF,UACE,UACA,QAGF,YACE,UACA,SAGF,SACE,UACA,SAGF,YACE,UACA,SAGF,UACE,UACA,UAGF,WACE,kBACA,YACA,iBACA,kBACA,UAGF,kBACE,4BAIA,6BACE,cACA,gBAKF,cACE,gBAGF,yBACE,cACA,gBAEA,mCACE,eAKF,6BACE,kBAKN,kBACE,cACA,WACA,iBACA,eAGF,MACE,kBAGF,MACE,gBACA,WACA,iBACA,YACA,aACA,kBACA,2BACA,yBACA,mBAGF,UAIE,OAHS,KAIT,MAHQ,KAIR,iBACA,iBACA,yCACA,kBAGF,SACE,2BACA,sBACA,aACA,iCACA,8BACA,sCACA,0BACA,4BACA,2BAEA,WACE,2BACA,sBAIJ,OACE,QACA,kBACA,MAGF,SACE,sCACA,eACA,YACA,gBACA,WAEA,eACE,sBAIJ,eACE,sBAGF,OACE,gBACA,sBACA,kBACA,4BACA,gBACA,QACA,eACA,yBAEA,iBACE,uBACA,kBAEA,uBACE,gBACA,eAGF,uBACE,eAKN,eACE,6BACA,0BACA,eACA,eACA,iBACA,kBACA,kBAEA,qBACE,gBAIJ,eACE,iBAGF,YACE,cACA,kBACA,uCAEA,eACE,SACA,UACA,sBACA,mBAIA,+BACE,gBACA,SACA,YACA,SACA,kBACA,gBAEA,qCACE,WACA,eACA,iBACA,uCAIJ,mCACE,WACA,eACA,iBACA,uCAIJ,sBACE,MxDpyDS,KwDsyDT,4BACE,WACA,6CACA,qBAIJ,mBACE,cAIJ,sBACE,WACA,qBACA,gBACA,kBACA,aACA,YACA,uBAGF,OACE,SACA,UACA,kBAEA,wBACE,gBACA,YACA,SACA,UAGF,kBACE,gBACA,sBACA,eACA,kBAEA,oDAEE,UAIJ,uBACE,WACA,eACA,iBAGF,iBACE,kBACA,kBACA,YACA,SAGF,yBACE,0EACA,oBAGF,0BACE,oEACA,YAGF,kBACE,gBACA,WACA,kBAIJ,oBACE,6DACA,kBAIA,oBACE,mBAGF,wBACE,YACA,iBAMF,qCACE,kBAGF,sBACE,gBAEA,yBACE,YACA,oBAGF,yBACE,wBAIJ,sBACE,cAIJ,uBACE,gBACA,YACA,SACA,UAGF,mBACE,cAEA,sBACE,iBAEA,yBACE,wBAKN,gBACE,cAGF,wBACE,wBAGF,kCACE,cAGF,cACE,YAIF,cACE,kBACA,eACA,WAGF,aACE,gBAIA,yCACE,eAEA,oDACE,2BAIJ,kCACE,eAIJ,kBACE,eAEA,qBACE,4BAKF,mBACE,WAGF,mBACE,iBAIJ,WACE,eAGF,YACE,kBAIF,uBACE,WACA,eACA,SACA,OACA,YAGF,SACE,YAGF,aACE,kBACA,YxDjhEW,MwDmhEX,wBACE,aAGF,uBACE,sBAGF,sBACE,kBACA,gBACA,0BACA,gBAEA,2BACE,sBAGF,gCACE,eAEA,4CACE,qBACA,4BACA,4BAGF,wCACE,aAMJ,kEAEE,cACA,qBAKF,0DAEE,cACA,qBAIJ,4BACE,cACA,qBAGF,4FAGE,eAGF,8GAGE,gBAIA,qCACE,gBAGF,4BACE,iBAGF,0DAEE,kBAGF,0DAEE,YAIJ,sBACE,kBACA,gBACA,oBACA,0BACA,gBACA,iBAEA,yCACE,gBACA,WAEA,0DACE,gBACA,WAGF,yDACE,WAGF,kDACE,qBAGF,4DACE,kBAGF,qDACE,cAKN,gDAEE,kBACA,sCACA,YACA,yBAGF,sBACE,6BACA,oBAEA,+CACE,kBAGF,8BACE,YACA,kBACA,YAKF,kCACE,YACA,kBACA,YACA,SAGF,mCACE,WACA,WACA,gBAKF,oCACE,WACA,iBAGF,uCACE,YAGF,sCACE,aAIA,8HAGE,YACA,WAIJ,sCACE,WAGF,uCACE,mBACA,uBACA,gBAGF,sCACE,cACA,gBACA,qBAGF,oIAGE,aAIA,2JAIE,aAKF,4FAEE,qBAIJ,4FAEE,qBAIA,6FAEE,qBAKF,+FAEE,qBAKF,iGAEE,qBAIJ,sCACE,kBACA,YACA,gBACA,sBACA,2BAGF,qFAEE,SACA,qBAGF,iFAEE,aAGF,0CACE,qBAGF,4BACE,gBAIA,gDACE,aAGF,sDACE,cAIJ,sCACE,cACA,MACA,gBACA,WACA,kBAEA,6CACE,gBAIJ,+CACE,yBACA,0BAIJ,0BACE,kBAGF,wBACE,YACA,WACA,kBACA,MACA,gBACA,aACA,eACA,YAGF,mBACE,kBACA,UACA,YACA,gBACA,UACA,MACA,2BACA,YACA,oBAEA,wBACE,QACA,kCAIJ,+DAEE,aAIJ,mEAEE,gBAIA,8CACE,kBACA,oBACA,mBACA,6BAEA,qDACE,aACA,sBAIJ,sDACE,SACA,gBAKF,wCACE,qBAIA,wCACE,qBAGF,+EAEE,aAIJ,sCACE,aAGF,sBACE,iBAGF,kEAEE,cAGF,sKAIE,aAIA,oHAEE,aAGF,iCACE,WACA,cACA,WAIJ,2EAEE,WACA,cACA,WAGF,8BACE,WAGF,gGAGE,YAGF,oCACE,SAMF,2BACE,sCAEA,+BACE,sCAIJ,6FAGE,UAGF,qBACE,YACA,YACA,WACA,mBACA,mBAGF,6BACE,YAMJ,kBACE,aACA,eACA,MACA,OACA,WACA,0BACA,YACA,YACA,WACA,eACA,kBACA,gBAGF,uBACE,aACA,eACA,SACA,WACA,YACA,sBACA,mBACA,kBACA,4BAEA,qDACE,sBACA,kBACA,aACA,gBACA,WACA,gBACA,mBACA,yBACA,mCAIJ,yCACE,sBACA,kBACA,aACA,gBACA,WACA,gBACA,mBACA,yBACA,mCAIA,2BACE,aACA,gBACA,kBACA,qBAEA,8BACE,iBACA,6BACA,cACA,gBAEA,wCACE,YAMJ,yEACE,YACA,iBACA,eAGF,mEACE,YACA,iBACA,eACA,aAGF,oKAEE,iCACA,eAKN,mEACE,iCACA,eAGF,sBACE,cAEA,2CACE,eACA,0BAIJ,iBACE,eACA,QACA,SACA,UACA,gBACA,iBACA,YACA,yBACA,mBACA,YAEA,uDACE,YACA,iBACA,eAIJ,kBACE,sBACA,sBAGF,sBACE,qBACA,2BAGF,eACE,qBACA,8CACA,kCACA,4BACA,UACA,WACA,YAGF,WACE,eAIA,8CACE,2EAGF,8CACE,qEAGF,8CACE,2EAQF,0CACE,WACA,aAGF,iCACE,WAGF,2DACE,YAQF,8CACE,aAGF,0GAEE,eAGF,iDACE,gBAGF,iDACE,UAGF,qDACE,WAMJ,YACE,gBAGF,0CACE,iBACE,gBAGF,6BACE,WAGF,iBACE,aAGF,SACE,qBAGF,gBACE,aAGF,mBACE,SAGF,eACE,cAGF,eACE,gBAEA,4BACE,eAIJ,8BACE,UAGF,6BACE,WACA,aAGF,WACE,UACA,sBAIJ,gBACE,eACA,sBACA,YACA,yBACA,YAGF,cACE,iBAGF,eACE,aACA,aACA,kBACA,yBACA,WACA,yBACA,oBAGF,iBACE,wBAGF,oIAKE,iBACA,eACA,cAGF,uBACE,WAIF,gBACE,iBACA,kBlD9tFE,0BkDmuFF,UACE,gBAGF,qCAEE,iBAIJ,iBACE,gBAGF,iBACE,aACA,UC/yFF,cACE,eACA,cAIA,eACE,aACA,kBAGF,qBACE,WAGF,kBACE,WAEA,qBACE,sBACA,UACA,cACA,iBAKF,6BACE,YACA,eACA,sBAGF,2BACE,cACA,kBACA,WAGF,yBACE,sBAIJ,6BACE,SACA,kBAIJ,6BACE,WACA,YACA,iBAMF,WACE,kBAEA,aACE,kBACA,SACA,aCjEJ,mBACE,YAGF,YACE,aACA,eACA,aACA,gBACA,kBAGF,UACE,iBAGF,mBACE,WAGF,iBACE,mBACA,aACA,iBAEA,yBACE,aAGF,kCACE,WChCJ,gBACE,M3DGW,M2DFX,eACA,MACA,OACA,aACA,uDACA,WACA,YAEA,mBACE,SAGF,qBACE,SACA,UACA,eAIA,sEAEE,WAKF,iCACE,kBACA,SACA,kBACA,2BAIJ,qOAOE,kBACA,mBACA,SAGF,sCACE,SAGF,4DAEE,YAGF,+EAEE,UAIJ,uBACE,gBAGF,wBACE,WACA,YACA,kBACA,MACA,OACA,UAEA,qCACE,aACA,mBAIJ,gCACE,gBACA,cACA,SACA,SAGF,0BACE,gBACA,kBAEA,iCACE,gDACA,0BACA,kBACA,sBACA,0BACA,WACA,gBACA,aACA,UACA,iBAIJ,6BACE,WACA,gBACA,gBACA,kBACA,YAEA,+CACE,kBACA,YACA,mBAIJ,qBACE,SACA,gBACA,gBACA,WACA,WACA,kBAEA,uBACE,M3D1HS,K2D2HT,eAEA,6BACE,0BAIJ,wBACE,WACA,UACA,qBACA,SAEA,2BACE,kBAIJ,wBACE,gBAEA,uEAEE,M3D3Ie,K2D4If,iB3DzIoB,K2D4ItB,wCACE,kBACA,YAGF,yCACE,aACA,kBACA,YAGF,uDACE,cACA,WAEA,6DACE,UAKN,wBACE,mBACA,WACA,gBAEA,oCACE,mBACA,WACA,gBAIJ,yBACE,SAGF,uBACE,cAIA,+BACE,kBACA,YACA,aACA,eACA,gBACA,WAEA,sCACE,YAGF,kEAEE,YACA,aACA,eACA,eACA,kBACA,YACA,WACA,UAIF,iCACE,cACA,2BACA,6BACA,kBACA,UAGA,uCACE,cAKJ,iCACE,cACA,aACA,SACA,WACA,2BAGF,kEAEE,kBACA,SACA,QACA,WAGF,mCACE,UAIA,gFAEE,SAGF,0CACE,SAIJ,mCACE,kBACA,WACA,OACA,iBAIJ,sCACE,QACA,SAKF,gCACE,gBAIA,oDAEE,kBACA,aACA,kBAKN,qCACE,2BACA,kBACA,mBAEA,sDAEE,2BAIJ,2CACE,yBAKJ,eACE,mBACA,kBACA,mBACA,2BACA,gBAEA,qBACE,eAGF,kCACE,SACA,iBACA,WACA,eAGF,wCACE,+BACA,2BAGF,8BACE,SACA,cAIJ,2BACE,2BAEA,yCACE,0CAIJ,qBACE,YACA,mBAIF,wBACE,UACA,YACA,sBACA,kBACA,eACA,MACA,WACA,YAGF,0BACE,WACA,YACA,iBACA,gBACA,WACA,iBACA,eACA,MACA,K3DtXW,M2DuXX,kBACA,eACA,YACA,yBACA,8CACA,sBAIF,gBACE,eACA,gBACA,kBAEA,2BACE,WACA,gBACA,cAGE,8CACE,gBAGF,oCACE,cAIJ,8BACE,kBACA,SACA,UACA,gBACA,gBACA,gBACA,gBACA,sBACA,mBACA,0BACA,6BACA,wBACA,SACA,SACA,QACA,aACA,YAGF,8BACE,mBACA,UACA,gBAEA,kCACE,mBAGF,oCACE,mBAIJ,6BACE,cACA,kBAEA,mDACE,WACA,WACA,oBAKN,6BACE,aACA,sBACA,mBACA,mBACA,eC7bJ,WACE,yBACA,WAGF,oBACE,kBACA,cAGF,cACE,kBACA,WACA,cAGF,QACE,sBACA,WAGF,gBACE,qBACA,gBACA,gBAEA,kBACE,2BAIJ,cACE,sBACA,WACA,yBACA,sBACA,UACA,iBAEA,sBACE,qGAIJ,SACE,kBACA,YACA,YACA,iBAGF,WACE,+EACA,2BACA,kBACA,YACA,YACA,iBAGF,WACE,gBACA,WACA,eAEA,iBACE,sBACA,WACA,2BACA,eAIJ,aACE,oCACA,WACA,eAEA,mBACE,sBACA,WACA,2BACA,eAIJ,eACE,mBACA,kBACA,sBACA,WACA,UACA,sBACA,aAGF,6BACE,SAGF,YACE,cACA,WACA,aAGF,eACE,eACA,WACA,mBACA,qBACA,gBACA,iBACA,gBACA,gBACA,mEACA,sBAEA,qBACE,eACA,WACA,gBACA,gBACA,iBACA,mBACA,qBACA,sBACA,gBAIJ,OACE,mBACA,WAGF,YACE,iBACA,kBACA,UAGF,YACE,mBACA,iBACA,kBACA,eACA,UACA,WACA,qGAGF,WACE,mBACA,yBACA,WACA,sDACA,eACA,kBACA,iBACA,iBACA,kBACA,UACA,qBAEA,iBACE,mBACA,WACA,sBACA,eACA,iBACA,kBACA,kBACA,iBACA,UACA,qBAIJ,gBACE,qGACA,kBACA,UAEA,sBACE,mBACA,WACA,sBACA,eACA,kBACA,iBACA,UACA,qBAIJ,MACE,sBACA,iBACA,sBACA,WACA,wBAGF,WACE,YACA,qBACA,sBACA,eAEA,iBACE,UACA,sBACA,gBACA,WACA,qBACA,sBACA,eAKJ,KACE,WACA,YAGF,QACE,+DAGF,QACE,8DAGF,QACE,2DAGF,QACE,4DAGF,QACE,+DAGF,QACE,sDAGF,QACE,qDAGF,QACE,uDAGF,SACE,kBACA,sBACA,WAGF,iBACE,yBACA,WACA,kBACA,iBACA,SACA,UACA,sDACA,wBACA,2BACA,4BACA,2BACA,YACA,YACA,WACA,eAEA,yCAEE,cACA,WACA,mBACA,YACA,uBAGF,yBACE,cACA,WACA,WACA,YACA,UAIA,yBACE,iBAGF,wBACE,gBAMJ,iDAEE,yBACA,sBACA,WAEA,6DACE,sBACA,sBACA,WAIJ,eACE,sBACA,sBACA,WAIJ,YACE,WACA,kBACA,YACA,yBACA,sBAGF,oBACE,kBACA,WACA,UACA,YAGF,uCAEE,kBACA,WACA,SACA,YACA,YAGF,kBACE,mDACA,iBAEA,wBACE,SAIJ,OACE,eACA,SACA,QACA,YACA,iBACA,aACA,cACA,iBACA,YAIA,UACE,eACA,qBACA,SACA,QACA,WACA,4BACA,kEACA,sBACA,cACA,YAEA,gBACE,cACA,qEACA,sBAIJ,iBACE,mEACA,YAEA,uBACE,sEAKN,yBACE,yBACA,0BAGF,eACE,kBACA,eACA,yBAEA,qBACE,sBAIJ,IACE,gBAEA,0BACE,UAIJ,eACE,gBACA,eAGF,WACE,WACA,eACA,WACA,YACA,mBACA,sBACA,gBACA,WACA,YAEA,iBACE,YACA,QAGF,iBACE,aAGF,aACE,cACA,WACA,gBACA,gBAGF,gCAEE,WAIJ,YACE,6BACA,kBACA,mBACA,WACA,gBACA,YACA,iBAGF,gBACE,WACA,kBACA,OC5eF,YACE,aACA,cAGF,iCACE,WAGF,4BACE,eACA,eACA,yBAGF,iCACE,yBACA,YAIA,uCAEE,WAGF,iBACE,WAGF,gBACE,YAGF,qBACE,YAGF,iBACE,WAGF,mBACE,WAGF,gBACE,UAGF,mBACE,WAGF,mBACE,WAGF,kBACE,WAGF,eACE,WAIJ,0BACE,qBAGF,0BACE,qBACA,YACA,WACA,gBAGF,kBACE,aAGF,yBACE,YACA,oBAEA,8BACE,sBACA,iBCxFJ,eACE,kBACA,WACA,sDACA,cAIF,aACE,gBAGF,cACE,gBAGF,eACE,mBAGF,cACE,kBAGF,yIASE,iBACA,kBAIF,kQAaE,kBACA,gBAGF,mBACE,MAEA,UACA,mBAGF,oBACE,SAEA,UACA,sBAGF,mBACE,QAEA,SACA,iBAEA,oCACE,YACA,eACA,oBACA,UACA,gBAIJ,gKAQE,OAEA,SACA,gBAGF,sBACE,kBACA,mBAGF,oBACE,gBACA,eACA,kBAGF,qBACE,mBACA,eACA,kBAGF,oBACE,kBACA,eACA,kBAGF,uBACE,eACA,kBAGF,wKAQE,eACA,iBACA,kBAGF,wBACE,gBACA,WAGF,yBACE,cACA,WAIA,0BACE,gBACA,mBACA,iBACA,kBACA,sCACA,sBACA,kBACA,gBAGF,2BACE,sCACA,sBACA,kBACA,gBAKF,uBACE,sBAIA,2DAEE,eAKN,2CACE,6BAIA,uCACE,sBACA,YAGF,+BACE,QACA,SACA,qBACA,wBACA,sBACA,uBACA,uBACA,0BACA,wBACA,yBAIJ,cACE,MACA,OACA,oBACA,gBAGF,4BACE,sBACA,gBAGF,iFAGE,sBACA,cACA,mBACA,gCACA,YAGF,oBACE,gBACA,UAGF,+BACE,sBACA,kBAGF,gCACE,YACA,YAGF,cAEE,kBAGF,sBAEE,kBACA,QACA,qBAIA,wBACE,eACA,iBACA,kBACA,WAEA,sDACE,gCAIJ,4BACE,kBACA,sCChRJ,MACE,SACA,iBACA,qBACA,WACA,YAGF,eACE,WACA,YAGF,cACE,6CAGF,eACE,8CAGF,aACE,4CAGF,eACE,8CAGF,YACE,2CAGF,YACE,2CAGF,iBACE,gDAGF,cACE,6CAGF,mBACE,kDAGF,aACE,4CAGF,WACE,0CAGF,aACE,4CAGF,WACE,0CAGF,WACE,0CAGF,YACE,2CAGF,aACE,4CAGF,gBACE,+CAGF,aACE,4CAGF,aACE,4CAGF,eACE,8CAGF,mBACE,kDAGF,gBACE,+CAGF,YACE,2CAGF,YACE,2CAGF,YACE,2CAGF,WACE,0CAGF,WACE,0CAGF,aACE,4CAGF,YACE,2CAGF,gBACE,+CAGF,kBACE,iDAGF,aACE,4CAGF,eACE,8CAGF,YACE,2CAGF,WACE,0CAGF,WACE,0CAGF,YACE,2CAGF,YACE,4CAGF,aACE,4CAGF,eACE,8CAGF,kBACE,iDAGF,aACE,4CAGF,aACE,4CAGF,WACE,0CAGF,eACE,8CAGF,cACE,6CAGF,YACE,2CAGF,YACE,2CAGF,gBACE,+CAGF,aACE,4CAGF,aACE,4CAGF,kBACE,iDAGF,eACE,8CAGF,WACE,0CAGF,gBACE,+CAGF,cACE,6CAGF,UACE,yCACA,WACA,YAGF,aACE,4CAGF,aACE,4CAGF,cACE,6CAGF,cACE,6CAGF,UACE,yCAGF,aACE,4CAGF,cACE,6CAGF,gBACE,+CAGF,iBACE,gDAGF,gBACE,+CAGF,gBACE,+CAGF,aACE,4CAGF,kBACE,iDAGF,WACE,0CAGF,kBACE,iDAGF,eACE,8CAGF,WACE,0CAGF,aACE,4CAGF,aACE,4CAGF,eACE,8CAGF,cACE,6CAGF,cACE,6CAGF,cACE,6CAGF,eACE,8CAGF,WACE,0CAGF,eACE,8CAGF,YACE,2CAGF,WACE,0CAGF,YACE,2CAGF,cA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","file":"theme.css"} \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.rtl.css b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.rtl.css deleted file mode 100644 index 8aba567..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/css/theme.rtl.css +++ /dev/null @@ -1,2 +0,0 @@ -:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-primary: #ddd;--bs-secondary: #ddd;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-primary-rgb: 221, 221, 221;--bs-secondary-rgb: 221, 221, 221;--bs-success-rgb: 25, 135, 84;--bs-info-rgb: 13, 202, 240;--bs-warning-rgb: 255, 193, 7;--bs-danger-rgb: 220, 53, 69;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 33, 37, 41;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-body-color-rgb: 68, 68, 68;--bs-body-bg-rgb: 255, 255, 255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family: sans-serif;--bs-body-font-size: 0.82rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #444;--bs-body-bg: #fff}*,*::before,*::after{box-sizing:border-box}@media(prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;background-color:currentColor;border:0;opacity:.25}hr:not([size]){height:1px}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:140%}h2,.h2{font-size:2em}h3,.h3{font-size:1rem}h4,.h4{font-size:1.23rem}h5,.h5{font-size:1.025rem}h6,.h6{font-size:0.82rem}p{margin-top:0;margin-bottom:1rem}abbr[title],abbr[data-bs-original-title]{-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-right:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-right:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.2em;background-color:#fcf8e3}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:#235a81;text-decoration:none}a:hover{color:#235a81;text-decoration:underline}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em;direction:ltr ;unicode-bidi:bidi-override}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em}pre code{font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:#d63384;word-wrap:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:0.875em;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:1em;font-weight:700}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:right}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]::-webkit-calendar-picker-indicator{display:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:right;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:right}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::-webkit-file-upload-button{font:inherit}::file-selector-button{font:inherit}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.025rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-right:0;list-style:none}.list-inline{padding-right:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-left:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.025rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{width:100%;padding-left:var(--bs-gutter-x, 0.75rem);padding-right:var(--bs-gutter-x, 0.75rem);margin-left:auto;margin-right:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;flex-wrap:wrap;margin-top:calc(-1*var(--bs-gutter-y));margin-left:calc(-0.5*var(--bs-gutter-x));margin-right:calc(-0.5*var(--bs-gutter-x))}.row>*{flex-shrink:0;width:100%;max-width:100%;padding-left:calc(var(--bs-gutter-x)*.5);padding-right:calc(var(--bs-gutter-x)*.5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-4>*{flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;width:16.6666666667%}.col-auto{flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;width:8.33333333%}.col-2{flex:0 0 auto;width:16.66666667%}.col-3{flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;width:33.33333333%}.col-5{flex:0 0 auto;width:41.66666667%}.col-6{flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;width:58.33333333%}.col-8{flex:0 0 auto;width:66.66666667%}.col-9{flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;width:83.33333333%}.col-11{flex:0 0 auto;width:91.66666667%}.col-12{flex:0 0 auto;width:100%}.offset-1{margin-right:8.33333333%}.offset-2{margin-right:16.66666667%}.offset-3{margin-right:25%}.offset-4{margin-right:33.33333333%}.offset-5{margin-right:41.66666667%}.offset-6{margin-right:50%}.offset-7{margin-right:58.33333333%}.offset-8{margin-right:66.66666667%}.offset-9{margin-right:75%}.offset-10{margin-right:83.33333333%}.offset-11{margin-right:91.66666667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: 0.25rem}.g-1,.gy-1{--bs-gutter-y: 0.25rem}.g-2,.gx-2{--bs-gutter-x: 0.5rem}.g-2,.gy-2{--bs-gutter-y: 0.5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media(min-width: 576px){.col-sm{flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-sm-4>*{flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;width:16.6666666667%}.col-sm-auto{flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;width:8.33333333%}.col-sm-2{flex:0 0 auto;width:16.66666667%}.col-sm-3{flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;width:33.33333333%}.col-sm-5{flex:0 0 auto;width:41.66666667%}.col-sm-6{flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;width:58.33333333%}.col-sm-8{flex:0 0 auto;width:66.66666667%}.col-sm-9{flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;width:83.33333333%}.col-sm-11{flex:0 0 auto;width:91.66666667%}.col-sm-12{flex:0 0 auto;width:100%}.offset-sm-0{margin-right:0}.offset-sm-1{margin-right:8.33333333%}.offset-sm-2{margin-right:16.66666667%}.offset-sm-3{margin-right:25%}.offset-sm-4{margin-right:33.33333333%}.offset-sm-5{margin-right:41.66666667%}.offset-sm-6{margin-right:50%}.offset-sm-7{margin-right:58.33333333%}.offset-sm-8{margin-right:66.66666667%}.offset-sm-9{margin-right:75%}.offset-sm-10{margin-right:83.33333333%}.offset-sm-11{margin-right:91.66666667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: 0.25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: 0.25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: 0.5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: 0.5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media(min-width: 768px){.col-md{flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-md-4>*{flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;width:16.6666666667%}.col-md-auto{flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;width:8.33333333%}.col-md-2{flex:0 0 auto;width:16.66666667%}.col-md-3{flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;width:33.33333333%}.col-md-5{flex:0 0 auto;width:41.66666667%}.col-md-6{flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;width:58.33333333%}.col-md-8{flex:0 0 auto;width:66.66666667%}.col-md-9{flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;width:83.33333333%}.col-md-11{flex:0 0 auto;width:91.66666667%}.col-md-12{flex:0 0 auto;width:100%}.offset-md-0{margin-right:0}.offset-md-1{margin-right:8.33333333%}.offset-md-2{margin-right:16.66666667%}.offset-md-3{margin-right:25%}.offset-md-4{margin-right:33.33333333%}.offset-md-5{margin-right:41.66666667%}.offset-md-6{margin-right:50%}.offset-md-7{margin-right:58.33333333%}.offset-md-8{margin-right:66.66666667%}.offset-md-9{margin-right:75%}.offset-md-10{margin-right:83.33333333%}.offset-md-11{margin-right:91.66666667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: 0.25rem}.g-md-1,.gy-md-1{--bs-gutter-y: 0.25rem}.g-md-2,.gx-md-2{--bs-gutter-x: 0.5rem}.g-md-2,.gy-md-2{--bs-gutter-y: 0.5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media(min-width: 992px){.col-lg{flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-lg-4>*{flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;width:16.6666666667%}.col-lg-auto{flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;width:8.33333333%}.col-lg-2{flex:0 0 auto;width:16.66666667%}.col-lg-3{flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;width:33.33333333%}.col-lg-5{flex:0 0 auto;width:41.66666667%}.col-lg-6{flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;width:58.33333333%}.col-lg-8{flex:0 0 auto;width:66.66666667%}.col-lg-9{flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;width:83.33333333%}.col-lg-11{flex:0 0 auto;width:91.66666667%}.col-lg-12{flex:0 0 auto;width:100%}.offset-lg-0{margin-right:0}.offset-lg-1{margin-right:8.33333333%}.offset-lg-2{margin-right:16.66666667%}.offset-lg-3{margin-right:25%}.offset-lg-4{margin-right:33.33333333%}.offset-lg-5{margin-right:41.66666667%}.offset-lg-6{margin-right:50%}.offset-lg-7{margin-right:58.33333333%}.offset-lg-8{margin-right:66.66666667%}.offset-lg-9{margin-right:75%}.offset-lg-10{margin-right:83.33333333%}.offset-lg-11{margin-right:91.66666667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: 0.25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: 0.25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: 0.5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: 0.5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media(min-width: 1200px){.col-xl{flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xl-4>*{flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xl-auto{flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;width:8.33333333%}.col-xl-2{flex:0 0 auto;width:16.66666667%}.col-xl-3{flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;width:33.33333333%}.col-xl-5{flex:0 0 auto;width:41.66666667%}.col-xl-6{flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;width:58.33333333%}.col-xl-8{flex:0 0 auto;width:66.66666667%}.col-xl-9{flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;width:83.33333333%}.col-xl-11{flex:0 0 auto;width:91.66666667%}.col-xl-12{flex:0 0 auto;width:100%}.offset-xl-0{margin-right:0}.offset-xl-1{margin-right:8.33333333%}.offset-xl-2{margin-right:16.66666667%}.offset-xl-3{margin-right:25%}.offset-xl-4{margin-right:33.33333333%}.offset-xl-5{margin-right:41.66666667%}.offset-xl-6{margin-right:50%}.offset-xl-7{margin-right:58.33333333%}.offset-xl-8{margin-right:66.66666667%}.offset-xl-9{margin-right:75%}.offset-xl-10{margin-right:83.33333333%}.offset-xl-11{margin-right:91.66666667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: 0.25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: 0.25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: 0.5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: 0.5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media(min-width: 1400px){.col-xxl{flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;width:33.3333333333%}.row-cols-xxl-4>*{flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;width:16.6666666667%}.col-xxl-auto{flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;width:8.33333333%}.col-xxl-2{flex:0 0 auto;width:16.66666667%}.col-xxl-3{flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;width:33.33333333%}.col-xxl-5{flex:0 0 auto;width:41.66666667%}.col-xxl-6{flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;width:58.33333333%}.col-xxl-8{flex:0 0 auto;width:66.66666667%}.col-xxl-9{flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;width:83.33333333%}.col-xxl-11{flex:0 0 auto;width:91.66666667%}.col-xxl-12{flex:0 0 auto;width:100%}.offset-xxl-0{margin-right:0}.offset-xxl-1{margin-right:8.33333333%}.offset-xxl-2{margin-right:16.66666667%}.offset-xxl-3{margin-right:25%}.offset-xxl-4{margin-right:33.33333333%}.offset-xxl-5{margin-right:41.66666667%}.offset-xxl-6{margin-right:50%}.offset-xxl-7{margin-right:58.33333333%}.offset-xxl-8{margin-right:66.66666667%}.offset-xxl-9{margin-right:75%}.offset-xxl-10{margin-right:83.33333333%}.offset-xxl-11{margin-right:91.66666667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: 0.25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: 0.25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: 0.5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: 0.5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-bg: transparent;--bs-table-accent-bg: transparent;--bs-table-striped-color: #444;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #444;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #000;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;color:#444;vertical-align:top;border-color:#fff}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:0;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table>:not(:first-child){border-top:0 solid currentColor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:0 0}.table-bordered>:not(caption)>*>*{border-width:0 0}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(even)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-bg: #f8f8f8;--bs-table-striped-bg: #ececec;--bs-table-striped-color: #000;--bs-table-active-bg: #dfdfdf;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e5e5;--bs-table-hover-color: #000;color:#000;border-color:#dfdfdf}.table-secondary{--bs-table-bg: #f8f8f8;--bs-table-striped-bg: #ececec;--bs-table-striped-color: #000;--bs-table-active-bg: #dfdfdf;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e5e5;--bs-table-hover-color: #000;color:#000;border-color:#dfdfdf}.table-success{--bs-table-bg: #d1e7dd;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:#000;border-color:#bcd0c7}.table-info{--bs-table-bg: #cff4fc;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:#000;border-color:#badce3}.table-warning{--bs-table-bg: #fff3cd;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:#000;border-color:#e6dbb9}.table-danger{--bs-table-bg: #f8d7da;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:#000;border-color:#dfc2c4}.table-light{--bs-table-bg: #f8f9fa;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:#000;border-color:#dfe0e1}.table-dark{--bs-table-bg: #212529;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:#fff;border-color:#373b3e}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.025rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.7175rem}.form-text{margin-top:.25rem;font-size:0.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:0.82rem;font-weight:400;line-height:1.5;color:#444;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:.25rem;box-shadow:inset 0 1px 2px rgba(0,0,0,.075)}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#444;background-color:#fff;border-color:#eee;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .25rem rgba(221,221,221,.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;background-image:var(--bs-gradient);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;background-image:var(--bs-gradient);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control::-webkit-file-upload-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;-webkit-margin-end:.75rem;margin-inline-end:.75rem;color:#444;background-color:#e9ecef;background-image:var(--bs-gradient);pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0}.form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#444;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-left:0;padding-right:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px);padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-sm::-webkit-file-upload-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;-webkit-margin-end:.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}.form-control-lg::-webkit-file-upload-button{padding:.5rem 1rem;margin:-0.5rem -1rem;-webkit-margin-end:1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:auto;padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{height:1.5em;border-radius:.25rem}.form-control-color::-webkit-color-swatch{height:1.5em;border-radius:.25rem}.form-select{display:block;width:100%;padding:.375rem .75rem .375rem 2.25rem;-moz-padding-start:calc(0.75rem - 3px);font-size:0.82rem;font-weight:400;line-height:1.5;color:#444;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.25rem;box-shadow:inset 0 1px 2px rgba(0,0,0,.075);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-select:focus{border-color:#eee;outline:0;box-shadow:inset 0 1px 2px rgba(0,0,0,.075),0 0 0 .25rem rgba(221,221,221,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-left:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #444}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-right:.5rem;font-size:0.7175rem;border-radius:.2rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-right:1rem;font-size:1.025rem;border-radius:.3rem}.form-check{display:block;min-height:1.23rem;padding-right:1.5em;margin-bottom:.125rem}.form-check .form-check-input{float:right;margin-right:-1.5em}.form-check-input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,.25);-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-print-color-adjust:exact;color-adjust:exact}.form-check-input[type=checkbox]{border-radius:.25em}.form-check-input[type=radio]{border-radius:50%}.form-check-input:active{filter:brightness(90%)}.form-check-input:focus{border-color:#eee;outline:0;box-shadow:0 0 0 .25rem rgba(221,221,221,.25)}.form-check-input:checked{background-color:#0075ff;border-color:#0075ff}.form-check-input:checked[type=checkbox]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e"),var(--bs-gradient)}.form-check-input:checked[type=radio]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e"),var(--bs-gradient)}.form-check-input[type=checkbox]:indeterminate{background-color:#ddd;border-color:#ddd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e"),var(--bs-gradient)}.form-check-input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input:disabled~.form-check-label{opacity:.5}.form-switch{padding-right:2.5em}.form-switch .form-check-input{width:2em;margin-right:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");background-position:right center;border-radius:2em}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23eeeeee'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:left center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"),var(--bs-gradient)}.form-check-inline{display:inline-block;margin-left:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:rgba(0,0,0,0);-webkit-appearance:none;-moz-appearance:none;appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(221,221,221,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(221,221,221,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;background-color:#ddd;background-image:var(--bs-gradient);border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-webkit-appearance:none;appearance:none}.form-range::-webkit-slider-thumb:active{background-color:#f5f5f5;background-image:var(--bs-gradient)}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:inset 0 1px 2px rgba(0,0,0,.075)}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#ddd;background-image:var(--bs-gradient);border:0;border-radius:1rem;box-shadow:0 .1rem .25rem rgba(0,0,0,.1);-moz-appearance:none;appearance:none}.form-range::-moz-range-thumb:active{background-color:#f5f5f5;background-image:var(--bs-gradient)}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#dee2e6;border-color:rgba(0,0,0,0);border-radius:1rem;box-shadow:inset 0 1px 2px rgba(0,0,0,.075)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;right:0;height:100%;padding:1rem .75rem;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:100% 0}.form-floating>.form-control{padding:1rem .75rem}.form-floating>.form-control::-moz-placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:not(:-moz-placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:not(:-moz-placeholder-shown)~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(-0.15rem)}.input-group{position:relative;display:flex;flex-wrap:wrap;align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select{position:relative;flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus{z-index:3}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:3}.input-group-text{display:flex;align-items:center;padding:.375rem .75rem;font-size:0.82rem;font-weight:400;line-height:1.5;color:#444;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-left:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n+3){border-top-left-radius:0;border-bottom-left-radius:0}.input-group.has-validation>:nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu),.input-group.has-validation>.dropdown-toggle:nth-last-child(n+4){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-right:-1px;border-top-right-radius:0;border-bottom-right-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.7175rem;color:#fff;background-color:rgba(25,135,84,.9);border-radius:.25rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-left:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-left:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-right:.5em}.was-validated .input-group .form-control:valid,.input-group .form-control.is-valid,.was-validated .input-group .form-select:valid,.input-group .form-select.is-valid{z-index:1}.was-validated .input-group .form-control:valid:focus,.input-group .form-control.is-valid:focus,.was-validated .input-group .form-select:valid:focus,.input-group .form-select.is-valid:focus{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.7175rem;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-left:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:left calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-left:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) left calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-left:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:left .75rem center,center left 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-right:.5em}.was-validated .input-group .form-control:invalid,.input-group .form-control.is-invalid,.was-validated .input-group .form-select:invalid,.input-group .form-select.is-invalid{z-index:2}.was-validated .input-group .form-control:invalid:focus,.input-group .form-control.is-invalid:focus,.was-validated .input-group .form-select:invalid:focus,.input-group .form-select.is-invalid:focus{z-index:3}.btn{display:inline-block;font-weight:400;line-height:1.15;color:#444;text-align:center;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);padding:.375rem .75rem;font-size:0.82rem;border-radius:.85rem}.btn:hover{color:#444;text-decoration:none}.btn-check:focus+.btn,.btn:focus{outline:0;box-shadow:0 0 0 .25rem rgba(221,221,221,.25)}.btn-check:checked+.btn,.btn-check:active+.btn,.btn:active,.btn.active{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-check:checked+.btn:focus,.btn-check:active+.btn:focus,.btn:active:focus,.btn.active:focus{box-shadow:0 0 0 .25rem rgba(221,221,221,.25),inset 0 3px 5px rgba(0,0,0,.125)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{pointer-events:none;opacity:.65;box-shadow:none}.btn-primary{color:#000;background-color:#ddd;background-image:var(--bs-gradient);border-color:#ddd;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-primary:hover{color:#000;background-color:#e2e2e2;background-image:var(--bs-gradient);border-color:#e0e0e0}.btn-check:focus+.btn-primary,.btn-primary:focus{color:#000;background-color:#e2e2e2;background-image:var(--bs-gradient);border-color:#e0e0e0;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(188,188,188,.5)}.btn-check:checked+.btn-primary,.btn-check:active+.btn-primary,.btn-primary:active,.btn-primary.active,.show>.btn-primary.dropdown-toggle{color:#000;background-color:#e4e4e4;background-image:none;border-color:#e0e0e0}.btn-check:checked+.btn-primary:focus,.btn-check:active+.btn-primary:focus,.btn-primary:active:focus,.btn-primary.active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(188,188,188,.5)}.btn-primary:disabled,.btn-primary.disabled{color:#000;background-color:#ddd;background-image:none;border-color:#ddd}.btn-secondary{color:#000;background-color:#ddd;background-image:var(--bs-gradient);border-color:#ddd;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-secondary:hover{color:#000;background-color:#e2e2e2;background-image:var(--bs-gradient);border-color:#e0e0e0}.btn-check:focus+.btn-secondary,.btn-secondary:focus{color:#000;background-color:#e2e2e2;background-image:var(--bs-gradient);border-color:#e0e0e0;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(188,188,188,.5)}.btn-check:checked+.btn-secondary,.btn-check:active+.btn-secondary,.btn-secondary:active,.btn-secondary.active,.show>.btn-secondary.dropdown-toggle{color:#000;background-color:#e4e4e4;background-image:none;border-color:#e0e0e0}.btn-check:checked+.btn-secondary:focus,.btn-check:active+.btn-secondary:focus,.btn-secondary:active:focus,.btn-secondary.active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(188,188,188,.5)}.btn-secondary:disabled,.btn-secondary.disabled{color:#000;background-color:#ddd;background-image:none;border-color:#ddd}.btn-success{color:#fff;background-color:#198754;background-image:var(--bs-gradient);border-color:#198754;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-success:hover{color:#fff;background-color:#157347;background-image:var(--bs-gradient);border-color:#146c43}.btn-check:focus+.btn-success,.btn-success:focus{color:#fff;background-color:#157347;background-image:var(--bs-gradient);border-color:#146c43;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(60,153,110,.5)}.btn-check:checked+.btn-success,.btn-check:active+.btn-success,.btn-success:active,.btn-success.active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#146c43;background-image:none;border-color:#13653f}.btn-check:checked+.btn-success:focus,.btn-check:active+.btn-success:focus,.btn-success:active:focus,.btn-success.active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(60,153,110,.5)}.btn-success:disabled,.btn-success.disabled{color:#fff;background-color:#198754;background-image:none;border-color:#198754}.btn-info{color:#000;background-color:#0dcaf0;background-image:var(--bs-gradient);border-color:#0dcaf0;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-info:hover{color:#000;background-color:#31d2f2;background-image:var(--bs-gradient);border-color:#25cff2}.btn-check:focus+.btn-info,.btn-info:focus{color:#000;background-color:#31d2f2;background-image:var(--bs-gradient);border-color:#25cff2;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(11,172,204,.5)}.btn-check:checked+.btn-info,.btn-check:active+.btn-info,.btn-info:active,.btn-info.active,.show>.btn-info.dropdown-toggle{color:#000;background-color:#3dd5f3;background-image:none;border-color:#25cff2}.btn-check:checked+.btn-info:focus,.btn-check:active+.btn-info:focus,.btn-info:active:focus,.btn-info.active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(11,172,204,.5)}.btn-info:disabled,.btn-info.disabled{color:#000;background-color:#0dcaf0;background-image:none;border-color:#0dcaf0}.btn-warning{color:#000;background-color:#ffc107;background-image:var(--bs-gradient);border-color:#ffc107;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-warning:hover{color:#000;background-color:#ffca2c;background-image:var(--bs-gradient);border-color:#ffc720}.btn-check:focus+.btn-warning,.btn-warning:focus{color:#000;background-color:#ffca2c;background-image:var(--bs-gradient);border-color:#ffc720;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(217,164,6,.5)}.btn-check:checked+.btn-warning,.btn-check:active+.btn-warning,.btn-warning:active,.btn-warning.active,.show>.btn-warning.dropdown-toggle{color:#000;background-color:#ffcd39;background-image:none;border-color:#ffc720}.btn-check:checked+.btn-warning:focus,.btn-check:active+.btn-warning:focus,.btn-warning:active:focus,.btn-warning.active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(217,164,6,.5)}.btn-warning:disabled,.btn-warning.disabled{color:#000;background-color:#ffc107;background-image:none;border-color:#ffc107}.btn-danger{color:#fff;background-color:#dc3545;background-image:var(--bs-gradient);border-color:#dc3545;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger:hover{color:#fff;background-color:#bb2d3b;background-image:var(--bs-gradient);border-color:#b02a37}.btn-check:focus+.btn-danger,.btn-danger:focus{color:#fff;background-color:#bb2d3b;background-image:var(--bs-gradient);border-color:#b02a37;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(225,83,97,.5)}.btn-check:checked+.btn-danger,.btn-check:active+.btn-danger,.btn-danger:active,.btn-danger.active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#b02a37;background-image:none;border-color:#a52834}.btn-check:checked+.btn-danger:focus,.btn-check:active+.btn-danger:focus,.btn-danger:active:focus,.btn-danger.active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(225,83,97,.5)}.btn-danger:disabled,.btn-danger.disabled{color:#fff;background-color:#dc3545;background-image:none;border-color:#dc3545}.btn-light{color:#000;background-color:#f8f9fa;background-image:var(--bs-gradient);border-color:#f8f9fa;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-light:hover{color:#000;background-color:#f9fafb;background-image:var(--bs-gradient);border-color:#f9fafb}.btn-check:focus+.btn-light,.btn-light:focus{color:#000;background-color:#f9fafb;background-image:var(--bs-gradient);border-color:#f9fafb;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(211,212,213,.5)}.btn-check:checked+.btn-light,.btn-check:active+.btn-light,.btn-light:active,.btn-light.active,.show>.btn-light.dropdown-toggle{color:#000;background-color:#f9fafb;background-image:none;border-color:#f9fafb}.btn-check:checked+.btn-light:focus,.btn-check:active+.btn-light:focus,.btn-light:active:focus,.btn-light.active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(211,212,213,.5)}.btn-light:disabled,.btn-light.disabled{color:#000;background-color:#f8f9fa;background-image:none;border-color:#f8f9fa}.btn-dark{color:#fff;background-color:#212529;background-image:var(--bs-gradient);border-color:#212529;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075)}.btn-dark:hover{color:#fff;background-color:#1c1f23;background-image:var(--bs-gradient);border-color:#1a1e21}.btn-check:focus+.btn-dark,.btn-dark:focus{color:#fff;background-color:#1c1f23;background-image:var(--bs-gradient);border-color:#1a1e21;box-shadow:inset 0 1px 0 rgba(255,255,255,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .25rem rgba(66,70,73,.5)}.btn-check:checked+.btn-dark,.btn-check:active+.btn-dark,.btn-dark:active,.btn-dark.active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1a1e21;background-image:none;border-color:#191c1f}.btn-check:checked+.btn-dark:focus,.btn-check:active+.btn-dark:focus,.btn-dark:active:focus,.btn-dark.active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(66,70,73,.5)}.btn-dark:disabled,.btn-dark.disabled{color:#fff;background-color:#212529;background-image:none;border-color:#212529}.btn-outline-primary{color:#ddd;border-color:#ddd}.btn-outline-primary:hover{color:#000;background-color:#ddd;border-color:#ddd}.btn-check:focus+.btn-outline-primary,.btn-outline-primary:focus{box-shadow:0 0 0 .25rem rgba(221,221,221,.5)}.btn-check:checked+.btn-outline-primary,.btn-check:active+.btn-outline-primary,.btn-outline-primary:active,.btn-outline-primary.active,.btn-outline-primary.dropdown-toggle.show{color:#000;background-color:#ddd;border-color:#ddd}.btn-check:checked+.btn-outline-primary:focus,.btn-check:active+.btn-outline-primary:focus,.btn-outline-primary:active:focus,.btn-outline-primary.active:focus,.btn-outline-primary.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(221,221,221,.5)}.btn-outline-primary:disabled,.btn-outline-primary.disabled{color:#ddd;background-color:rgba(0,0,0,0)}.btn-outline-secondary{color:#ddd;border-color:#ddd}.btn-outline-secondary:hover{color:#000;background-color:#ddd;border-color:#ddd}.btn-check:focus+.btn-outline-secondary,.btn-outline-secondary:focus{box-shadow:0 0 0 .25rem rgba(221,221,221,.5)}.btn-check:checked+.btn-outline-secondary,.btn-check:active+.btn-outline-secondary,.btn-outline-secondary:active,.btn-outline-secondary.active,.btn-outline-secondary.dropdown-toggle.show{color:#000;background-color:#ddd;border-color:#ddd}.btn-check:checked+.btn-outline-secondary:focus,.btn-check:active+.btn-outline-secondary:focus,.btn-outline-secondary:active:focus,.btn-outline-secondary.active:focus,.btn-outline-secondary.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(221,221,221,.5)}.btn-outline-secondary:disabled,.btn-outline-secondary.disabled{color:#ddd;background-color:rgba(0,0,0,0)}.btn-outline-success{color:#198754;border-color:#198754}.btn-outline-success:hover{color:#fff;background-color:#198754;border-color:#198754}.btn-check:focus+.btn-outline-success,.btn-outline-success:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,.5)}.btn-check:checked+.btn-outline-success,.btn-check:active+.btn-outline-success,.btn-outline-success:active,.btn-outline-success.active,.btn-outline-success.dropdown-toggle.show{color:#fff;background-color:#198754;border-color:#198754}.btn-check:checked+.btn-outline-success:focus,.btn-check:active+.btn-outline-success:focus,.btn-outline-success:active:focus,.btn-outline-success.active:focus,.btn-outline-success.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(25,135,84,.5)}.btn-outline-success:disabled,.btn-outline-success.disabled{color:#198754;background-color:rgba(0,0,0,0)}.btn-outline-info{color:#0dcaf0;border-color:#0dcaf0}.btn-outline-info:hover{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:focus+.btn-outline-info,.btn-outline-info:focus{box-shadow:0 0 0 .25rem rgba(13,202,240,.5)}.btn-check:checked+.btn-outline-info,.btn-check:active+.btn-outline-info,.btn-outline-info:active,.btn-outline-info.active,.btn-outline-info.dropdown-toggle.show{color:#000;background-color:#0dcaf0;border-color:#0dcaf0}.btn-check:checked+.btn-outline-info:focus,.btn-check:active+.btn-outline-info:focus,.btn-outline-info:active:focus,.btn-outline-info.active:focus,.btn-outline-info.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(13,202,240,.5)}.btn-outline-info:disabled,.btn-outline-info.disabled{color:#0dcaf0;background-color:rgba(0,0,0,0)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:focus+.btn-outline-warning,.btn-outline-warning:focus{box-shadow:0 0 0 .25rem rgba(255,193,7,.5)}.btn-check:checked+.btn-outline-warning,.btn-check:active+.btn-outline-warning,.btn-outline-warning:active,.btn-outline-warning.active,.btn-outline-warning.dropdown-toggle.show{color:#000;background-color:#ffc107;border-color:#ffc107}.btn-check:checked+.btn-outline-warning:focus,.btn-check:active+.btn-outline-warning:focus,.btn-outline-warning:active:focus,.btn-outline-warning.active:focus,.btn-outline-warning.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(255,193,7,.5)}.btn-outline-warning:disabled,.btn-outline-warning.disabled{color:#ffc107;background-color:rgba(0,0,0,0)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:focus+.btn-outline-danger,.btn-outline-danger:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,.5)}.btn-check:checked+.btn-outline-danger,.btn-check:active+.btn-outline-danger,.btn-outline-danger:active,.btn-outline-danger.active,.btn-outline-danger.dropdown-toggle.show{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-check:checked+.btn-outline-danger:focus,.btn-check:active+.btn-outline-danger:focus,.btn-outline-danger:active:focus,.btn-outline-danger.active:focus,.btn-outline-danger.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(220,53,69,.5)}.btn-outline-danger:disabled,.btn-outline-danger.disabled{color:#dc3545;background-color:rgba(0,0,0,0)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:focus+.btn-outline-light,.btn-outline-light:focus{box-shadow:0 0 0 .25rem rgba(248,249,250,.5)}.btn-check:checked+.btn-outline-light,.btn-check:active+.btn-outline-light,.btn-outline-light:active,.btn-outline-light.active,.btn-outline-light.dropdown-toggle.show{color:#000;background-color:#f8f9fa;border-color:#f8f9fa}.btn-check:checked+.btn-outline-light:focus,.btn-check:active+.btn-outline-light:focus,.btn-outline-light:active:focus,.btn-outline-light.active:focus,.btn-outline-light.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(248,249,250,.5)}.btn-outline-light:disabled,.btn-outline-light.disabled{color:#f8f9fa;background-color:rgba(0,0,0,0)}.btn-outline-dark{color:#212529;border-color:#212529}.btn-outline-dark:hover{color:#fff;background-color:#212529;border-color:#212529}.btn-check:focus+.btn-outline-dark,.btn-outline-dark:focus{box-shadow:0 0 0 .25rem rgba(33,37,41,.5)}.btn-check:checked+.btn-outline-dark,.btn-check:active+.btn-outline-dark,.btn-outline-dark:active,.btn-outline-dark.active,.btn-outline-dark.dropdown-toggle.show{color:#fff;background-color:#212529;border-color:#212529}.btn-check:checked+.btn-outline-dark:focus,.btn-check:active+.btn-outline-dark:focus,.btn-outline-dark:active:focus,.btn-outline-dark.active:focus,.btn-outline-dark.dropdown-toggle.show:focus{box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .25rem rgba(33,37,41,.5)}.btn-outline-dark:disabled,.btn-outline-dark.disabled{color:#212529;background-color:rgba(0,0,0,0)}.btn-link{font-weight:400;color:#235a81;text-decoration:none}.btn-link:hover{color:#235a81;text-decoration:underline}.btn-link:focus{text-decoration:underline}.btn-link:disabled,.btn-link.disabled{color:#6c757d}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.025rem;border-radius:.3rem}.btn-sm,.btn-group-sm>.btn{padding:.25rem .5rem;font-size:0.7175rem;border-radius:.2rem}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden}.collapsing.collapse-horizontal{width:0;height:auto}.dropup,.dropend,.dropdown,.dropstart{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-menu{position:absolute;z-index:1000;display:none;min-width:10rem;padding:0 0;margin:0;font-size:0.82rem;color:#444;text-align:right;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)}.dropdown-menu[data-bs-popper]{top:100%;right:0;margin-top:.125rem}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{left:0;right:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{left:0;right:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{left:auto;right:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{left:0;right:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropend .dropdown-menu[data-bs-popper]{top:0;left:auto;right:100%;margin-top:0;margin-right:.125rem}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;left:100%;right:auto;margin-top:0;margin-left:.125rem}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid rgba(0,0,0,.15)}.dropdown-item{display:block;width:100%;padding:0 0;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:first-child{border-top-right-radius:calc(0.25rem - 1px);border-top-left-radius:calc(0.25rem - 1px)}.dropdown-item:last-child{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.dropdown-item:hover,.dropdown-item:focus{color:#1e2125;text-decoration:none;background-color:#e9ecef;background-image:var(--bs-gradient)}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#ddd;background-image:var(--bs-gradient)}.dropdown-item.disabled,.dropdown-item:disabled{color:#adb5bd;pointer-events:none;background-color:rgba(0,0,0,0);background-image:none}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:0 0;margin-bottom:0;font-size:0.7175rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:0 0;color:#212529}.dropdown-menu-dark{color:#dee2e6;background-color:#343a40;border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item{color:#dee2e6}.dropdown-menu-dark .dropdown-item:hover,.dropdown-menu-dark .dropdown-item:focus{color:#fff;background-color:rgba(255,255,255,.15);background-image:var(--bs-gradient)}.dropdown-menu-dark .dropdown-item.active,.dropdown-menu-dark .dropdown-item:active{color:#fff;background-color:#ddd;background-image:var(--bs-gradient)}.dropdown-menu-dark .dropdown-item.disabled,.dropdown-menu-dark .dropdown-item:disabled{color:#adb5bd}.dropdown-menu-dark .dropdown-divider{border-color:rgba(0,0,0,.15)}.dropdown-menu-dark .dropdown-item-text{color:#dee2e6}.dropdown-menu-dark .dropdown-header{color:#adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;flex-wrap:wrap;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn:not(:first-child),.btn-group>.btn-group:not(:first-child){margin-right:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn-group:not(:last-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn:nth-child(n+3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.dropdown-toggle-split{padding-left:.5625rem;padding-right:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-right:0}.dropstart .dropdown-toggle-split::before{margin-left:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-left:.375rem;padding-right:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-left:.75rem;padding-right:.75rem}.btn-group.show .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{box-shadow:none}.btn-group-vertical{flex-direction:column;align-items:flex-start;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-left-radius:0;border-bottom-right-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-right-radius:0;border-top-left-radius:0}.nav{display:flex;flex-wrap:wrap;padding-right:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem;color:#235a81}.nav-link:hover,.nav-link:focus{color:#235a81;text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #aaa}.nav-tabs .nav-link{margin-bottom:-1px;background:none;border:1px solid rgba(0,0,0,0);border-top-right-radius:.25rem;border-top-left-radius:.25rem}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{border-color:#d5d5d5 #d5d5d5 #aaa;isolation:isolate}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:#000;background-color:#fff;border-color:#aaa #aaa #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.nav-pills .nav-link{background:none;border:0;border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#ddd;background-image:var(--bs-gradient)}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;padding-top:0;padding-left:0;padding-bottom:0;padding-right:0;background-image:var(--bs-gradient)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;flex-wrap:inherit;align-items:center;justify-content:space-between}.navbar-brand{padding-top:.34625rem;padding-bottom:.34625rem;margin-left:1rem;font-size:1.025rem;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-nav{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-left:0;padding-right:0}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{flex-basis:100%;flex-grow:1;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.025rem;line-height:1;background-color:rgba(0,0,0,0);border:1px solid rgba(0,0,0,0);border-radius:.85rem}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 .25rem}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas-header{display:none}.navbar-expand-sm .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-sm .offcanvas-top,.navbar-expand-sm .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-sm .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas-header{display:none}.navbar-expand-md .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-md .offcanvas-top,.navbar-expand-md .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-md .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas-header{display:none}.navbar-expand-lg .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-lg .offcanvas-top,.navbar-expand-lg .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-lg .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas-header{display:none}.navbar-expand-xl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xl .offcanvas-top,.navbar-expand-xl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand-xxl .offcanvas-top,.navbar-expand-xxl .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand-xxl .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-left:.5rem;padding-right:.5rem}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas-header{display:none}.navbar-expand .offcanvas{position:inherit;bottom:0;z-index:1000;flex-grow:1;visibility:visible !important;background-color:rgba(0,0,0,0);border-left:0;border-right:0;transform:none}.navbar-expand .offcanvas-top,.navbar-expand .offcanvas-bottom{height:auto;border-top:0;border-bottom:0}.navbar-expand .offcanvas-body{display:flex;flex-grow:0;padding:0;overflow-y:visible}.navbar-light .navbar-brand{color:#235a81}.navbar-light .navbar-brand:hover,.navbar-light .navbar-brand:focus{color:#235a81}.navbar-light .navbar-nav .nav-link{color:#235a81}.navbar-light .navbar-nav .nav-link:hover,.navbar-light .navbar-nav .nav-link:focus{color:#235a81}.navbar-light .navbar-nav .nav-link.disabled{color:#235a81}.navbar-light .navbar-nav .show>.nav-link,.navbar-light .navbar-nav .nav-link.active{color:#235a81}.navbar-light .navbar-toggler{color:#235a81;border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='%23235a81' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-light .navbar-text{color:#235a81}.navbar-light .navbar-text a,.navbar-light .navbar-text a:hover,.navbar-light .navbar-text a:focus{color:#235a81}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:hover,.navbar-dark .navbar-brand:focus{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.55)}.navbar-dark .navbar-nav .nav-link:hover,.navbar-dark .navbar-nav .nav-link:focus{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .show>.nav-link,.navbar-dark .navbar-nav .nav-link.active{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.55);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.navbar-dark .navbar-text{color:rgba(255,255,255,.55)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:hover,.navbar-dark .navbar-text a:focus{color:#fff}.card{position:relative;display:flex;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#eee;background-clip:border-box;border:1px solid #aaa;border-radius:.25rem}.card>hr{margin-left:0;margin-right:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-right-radius:calc(0.25rem - 1px);border-top-left-radius:calc(0.25rem - 1px)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;padding:1rem 1rem}.card-title{margin-bottom:.5rem}.card-subtitle{margin-top:-0.25rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-right:1rem}.card-header{padding:.5rem 1rem;margin-bottom:0;background-color:#fff;border-bottom:1px solid #aaa}.card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}.card-footer{padding:.5rem 1rem;background-color:#fff;border-top:1px solid #aaa}.card-footer:last-child{border-radius:0 0 calc(0.25rem - 1px) calc(0.25rem - 1px)}.card-header-tabs{margin-left:-0.5rem;margin-bottom:-0.5rem;margin-right:-0.5rem;border-bottom:0}.card-header-tabs .nav-link.active{background-color:#eee;border-bottom-color:#eee}.card-header-pills{margin-left:-0.5rem;margin-right:-0.5rem}.card-img-overlay{position:absolute;top:0;left:0;bottom:0;right:0;padding:1rem;border-radius:calc(0.25rem - 1px)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-right-radius:calc(0.25rem - 1px);border-top-left-radius:calc(0.25rem - 1px)}.card-img,.card-img-bottom{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.card-group>.card{margin-bottom:.75rem}@media(min-width: 576px){.card-group{display:flex;flex-flow:row wrap}.card-group>.card{flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-right:0;border-right:0}.card-group>.card:not(:last-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-left-radius:0}.card-group>.card:not(:first-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-right-radius:0}}.accordion-button{position:relative;display:flex;align-items:center;width:100%;padding:.375rem .75rem;font-size:0.82rem;color:#444;text-align:right;background-color:#fff;border:0;border-radius:0;overflow-anchor:none}.accordion-button:not(.collapsed){color:#235a81;background-color:#f3f3f3;box-shadow:inset 0 -1px 0 rgba(0,0,0,.125)}.accordion-button:not(.collapsed)::after{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23235a81'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");transform:rotate(180deg)}.accordion-button::after{flex-shrink:0;width:1.25rem;height:1.25rem;margin-right:auto;content:"";background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23444'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-size:1.25rem}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:#eee;outline:0;box-shadow:0 0 0 .25rem rgba(221,221,221,.25)}.accordion-header{margin-bottom:0}.accordion-item{background-color:#fff;border:1px solid rgba(0,0,0,.125)}.accordion-item:first-of-type{border-top-right-radius:.25rem;border-top-left-radius:.25rem}.accordion-item:first-of-type .accordion-button{border-top-right-radius:calc(0.25rem - 1px);border-top-left-radius:calc(0.25rem - 1px)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-left-radius:calc(0.25rem - 1px);border-bottom-right-radius:calc(0.25rem - 1px)}.accordion-item:last-of-type .accordion-collapse{border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem}.accordion-body{padding:1rem 1.25rem}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-left:0;border-right:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button{border-radius:0}.breadcrumb{display:flex;flex-wrap:wrap;padding:0 0;margin-bottom:1rem;list-style:none}.breadcrumb-item+.breadcrumb-item{padding-right:.5rem}.breadcrumb-item+.breadcrumb-item::before{float:right;padding-left:.5rem;color:#fff;content:var(--bs-breadcrumb-divider, "»")}.breadcrumb-item.active{color:#6c757d}.pagination{display:flex;padding-right:0;list-style:none}.page-link{position:relative;display:block;color:#235a81;background-color:#fff;border:1px solid #aaa}.page-link:hover{z-index:2;color:#235a81;text-decoration:none;background-color:#e9ecef;border-color:#aaa}.page-link:focus{z-index:3;color:#235a81;background-color:#e9ecef;outline:0;box-shadow:0 0 0 .25rem rgba(221,221,221,.25)}.page-item:not(:first-child) .page-link{margin-right:-1px}.page-item.active .page-link{z-index:3;color:#235a81;background-color:#ddd;background-image:var(--bs-gradient);border-color:#aaa}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;background-color:#fff;border-color:#aaa}.page-link{padding:.375rem .75rem}.page-item:first-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item:last-child .page-link{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.025rem}.pagination-lg .page-item:first-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:0.7175rem}.pagination-sm .page-item:first-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.badge{display:inline-block;padding:.35em .65em;font-size:0.75em;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;background-image:var(--bs-gradient)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{position:relative;padding:1rem 1rem;margin-bottom:.5em;border:1px solid rgba(0,0,0,0);border-radius:5px}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-left:3rem}.alert-dismissible .btn-close{position:absolute;top:0;left:0;z-index:2;padding:1.25rem 1rem}.alert-primary{color:#585858;background-color:#f8f8f8;background-image:var(--bs-gradient);border-color:#f5f5f5}.alert-primary .alert-link{color:#464646}.alert-secondary{color:#585858;background-color:#f8f8f8;background-image:var(--bs-gradient);border-color:#f5f5f5}.alert-secondary .alert-link{color:#464646}.alert-success{color:#0f5132;background-color:#d1e7dd;background-image:var(--bs-gradient);border-color:#badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{color:#055160;background-color:#cff4fc;background-image:var(--bs-gradient);border-color:#b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{color:#664d03;background-color:#fff3cd;background-image:var(--bs-gradient);border-color:#ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{color:#842029;background-color:#f8d7da;background-image:var(--bs-gradient);border-color:#f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{color:#636464;background-color:#fefefe;background-image:var(--bs-gradient);border-color:#fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{color:#141619;background-color:#d3d3d4;background-image:var(--bs-gradient);border-color:#bcbebf}.alert-dark .alert-link{color:#101214}.list-group{display:flex;flex-direction:column;padding-right:0;margin-bottom:0;border-radius:.25rem}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>li::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#444;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.375rem .75rem;color:#212529;background-color:inherit;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-right-radius:inherit;border-top-left-radius:inherit}.list-group-item:last-child{border-bottom-left-radius:inherit;border-bottom-right-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:inherit}.list-group-item.active{z-index:2;color:#fff;background-color:#ddd;border-color:#ddd}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:-1px;border-top-width:1px}.list-group-horizontal{flex-direction:row}.list-group-horizontal>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-sm>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-md>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-lg>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-xl>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child{border-bottom-right-radius:.25rem;border-top-left-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child{border-top-left-radius:.25rem;border-bottom-right-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:1px;border-right-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-right:-1px;border-right-width:1px}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 1px}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-primary{color:#585858;background-color:#f8f8f8}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#585858;background-color:#dfdfdf}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#585858;border-color:#585858}.list-group-item-secondary{color:#585858;background-color:#f8f8f8}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#585858;background-color:#dfdfdf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#585858;border-color:#585858}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:rgba(0,0,0,0) url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.25rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(221,221,221,.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.modal{position:fixed;top:0;right:0;z-index:1055;display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transform:translate(0, -50px)}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;align-items:center;min-height:calc(100% - 1rem)}.modal-content{position:relative;display:flex;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;box-shadow:0 .125rem .25rem rgba(0,0,0,.075);outline:0}.modal-backdrop{position:fixed;top:0;right:0;z-index:1050;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;padding:.4rem .75rem;border-bottom:1px solid #dee2e6;border-top-right-radius:calc(0.3rem - 1px);border-top-left-radius:calc(0.3rem - 1px)}.modal-header .btn-close{padding:.2rem .375rem;margin:-0.2rem auto -0.2rem -0.375rem}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;flex:1 1 auto;padding:.75rem}.modal-footer{display:flex;flex-wrap:wrap;flex-shrink:0;align-items:center;justify-content:flex-end;padding:.7rem;border-top:1px solid #dee2e6;border-bottom-left-radius:calc(0.3rem - 1px);border-bottom-right-radius:calc(0.3rem - 1px)}.modal-footer>*{margin:.05rem}@media(min-width: 576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{height:calc(100% - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-content{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)}.modal-sm{max-width:300px}}@media(min-width: 992px){.modal-lg,.modal-xl{max-width:800px}}@media(min-width: 1200px){.modal-xl{max-width:1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}.modal-fullscreen .modal-footer{border-radius:0}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}.modal-fullscreen-sm-down .modal-footer{border-radius:0}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}.modal-fullscreen-md-down .modal-footer{border-radius:0}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}.modal-fullscreen-lg-down .modal-footer{border-radius:0}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}.modal-fullscreen-xl-down .modal-footer{border-radius:0}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}.modal-fullscreen-xxl-down .modal-footer{border-radius:0}}@-webkit-keyframes spinner-border{to{transform:rotate(-360deg)}}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;border:.25em solid currentColor;border-left-color:rgba(0,0,0,0);border-radius:50%;-webkit-animation:.75s linear infinite spinner-border;animation:.75s linear infinite spinner-border}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:-0.125em;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:.75s linear infinite spinner-grow;animation:.75s linear infinite spinner-grow}.spinner-grow-sm{width:1rem;height:1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{-webkit-animation-duration:1.5s;animation-duration:1.5s}}.clearfix::after{display:block;clear:both;content:""}.link-primary{color:#ddd}.link-primary:hover,.link-primary:focus{color:#e4e4e4}.link-secondary{color:#ddd}.link-secondary:hover,.link-secondary:focus{color:#e4e4e4}.link-success{color:#198754}.link-success:hover,.link-success:focus{color:#146c43}.link-info{color:#0dcaf0}.link-info:hover,.link-info:focus{color:#3dd5f3}.link-warning{color:#ffc107}.link-warning:hover,.link-warning:focus{color:#ffcd39}.link-danger{color:#dc3545}.link-danger:hover,.link-danger:focus{color:#b02a37}.link-light{color:#f8f9fa}.link-light:hover,.link-light:focus{color:#f9fafb}.link-dark{color:#212529}.link-dark:hover,.link-dark:focus{color:#1a1e21}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;right:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;left:0;right:0;z-index:1030}.fixed-bottom{position:fixed;left:0;bottom:0;right:0;z-index:1030}.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.hstack{display:flex;flex-direction:row;align-items:center;align-self:stretch}.vstack{display:flex;flex:1 1 auto;flex-direction:column;align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;left:0;bottom:0;right:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;width:1px;min-height:1em;background-color:currentColor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:right !important}.float-end{float:left !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:-webkit-sticky !important;position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{right:0 !important}.start-50{right:50% !important}.start-100{right:100% !important}.end-0{left:0 !important}.end-50{left:50% !important}.end-100{left:100% !important}.translate-middle{transform:translate(50%, -50%) !important}.translate-middle-x{transform:translateX(50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:1px solid #dee2e6 !important}.border-0{border:0 !important}.border-top{border-top:1px solid #dee2e6 !important}.border-top-0{border-top:0 !important}.border-end{border-left:1px solid #dee2e6 !important}.border-end-0{border-left:0 !important}.border-bottom{border-bottom:1px solid #dee2e6 !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-right:1px solid #dee2e6 !important}.border-start-0{border-right:0 !important}.border-primary{border-color:#ddd !important}.border-secondary{border-color:#ddd !important}.border-success{border-color:#198754 !important}.border-info{border-color:#0dcaf0 !important}.border-warning{border-color:#ffc107 !important}.border-danger{border-color:#dc3545 !important}.border-light{border-color:#f8f9fa !important}.border-dark{border-color:#212529 !important}.border-white{border-color:#fff !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-left:0 !important;margin-right:0 !important}.mx-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-3{margin-left:1rem !important;margin-right:1rem !important}.mx-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-5{margin-left:3rem !important;margin-right:3rem !important}.mx-auto{margin-left:auto !important;margin-right:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-left:0 !important}.me-1{margin-left:.25rem !important}.me-2{margin-left:.5rem !important}.me-3{margin-left:1rem !important}.me-4{margin-left:1.5rem !important}.me-5{margin-left:3rem !important}.me-auto{margin-left:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-right:0 !important}.ms-1{margin-right:.25rem !important}.ms-2{margin-right:.5rem !important}.ms-3{margin-right:1rem !important}.ms-4{margin-right:1.5rem !important}.ms-5{margin-right:3rem !important}.ms-auto{margin-right:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-left:0 !important;padding-right:0 !important}.px-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-3{padding-left:1rem !important;padding-right:1rem !important}.px-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-5{padding-left:3rem !important;padding-right:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-left:0 !important}.pe-1{padding-left:.25rem !important}.pe-2{padding-left:.5rem !important}.pe-3{padding-left:1rem !important}.pe-4{padding-left:1.5rem !important}.pe-5{padding-left:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-right:0 !important}.ps-1{padding-right:.25rem !important}.ps-2{padding-right:.5rem !important}.ps-3{padding-right:1rem !important}.ps-4{padding-right:1.5rem !important}.ps-5{padding-right:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:140% !important}.fs-2{font-size:2em !important}.fs-3{font-size:1rem !important}.fs-4{font-size:1.23rem !important}.fs-5{font-size:1.025rem !important}.fs-6{font-size:0.82rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:right !important}.text-end{text-align:left !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{-webkit-user-select:all !important;-moz-user-select:all !important;user-select:all !important}.user-select-auto{-webkit-user-select:auto !important;-moz-user-select:auto !important;user-select:auto !important}.user-select-none{-webkit-user-select:none !important;-moz-user-select:none !important;user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:.25rem !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:.2rem !important}.rounded-2{border-radius:.25rem !important}.rounded-3{border-radius:.3rem !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:50rem !important}.rounded-top{border-top-right-radius:.25rem !important;border-top-left-radius:.25rem !important}.rounded-end{border-top-left-radius:.25rem !important;border-bottom-left-radius:.25rem !important}.rounded-bottom{border-bottom-left-radius:.25rem !important;border-bottom-right-radius:.25rem !important}.rounded-start{border-bottom-right-radius:.25rem !important;border-top-right-radius:.25rem !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media(min-width: 576px){.float-sm-start{float:right !important}.float-sm-end{float:left !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-left:0 !important;margin-right:0 !important}.mx-sm-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-sm-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-sm-3{margin-left:1rem !important;margin-right:1rem !important}.mx-sm-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-sm-5{margin-left:3rem !important;margin-right:3rem !important}.mx-sm-auto{margin-left:auto !important;margin-right:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-left:0 !important}.me-sm-1{margin-left:.25rem !important}.me-sm-2{margin-left:.5rem !important}.me-sm-3{margin-left:1rem !important}.me-sm-4{margin-left:1.5rem !important}.me-sm-5{margin-left:3rem !important}.me-sm-auto{margin-left:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-right:0 !important}.ms-sm-1{margin-right:.25rem !important}.ms-sm-2{margin-right:.5rem !important}.ms-sm-3{margin-right:1rem !important}.ms-sm-4{margin-right:1.5rem !important}.ms-sm-5{margin-right:3rem !important}.ms-sm-auto{margin-right:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-left:0 !important;padding-right:0 !important}.px-sm-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-sm-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-sm-3{padding-left:1rem !important;padding-right:1rem !important}.px-sm-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-sm-5{padding-left:3rem !important;padding-right:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-left:0 !important}.pe-sm-1{padding-left:.25rem !important}.pe-sm-2{padding-left:.5rem !important}.pe-sm-3{padding-left:1rem !important}.pe-sm-4{padding-left:1.5rem !important}.pe-sm-5{padding-left:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-right:0 !important}.ps-sm-1{padding-right:.25rem !important}.ps-sm-2{padding-right:.5rem !important}.ps-sm-3{padding-right:1rem !important}.ps-sm-4{padding-right:1.5rem !important}.ps-sm-5{padding-right:3rem !important}.text-sm-start{text-align:right !important}.text-sm-end{text-align:left !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:right !important}.float-md-end{float:left !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-left:0 !important;margin-right:0 !important}.mx-md-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-md-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-md-3{margin-left:1rem !important;margin-right:1rem !important}.mx-md-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-md-5{margin-left:3rem !important;margin-right:3rem !important}.mx-md-auto{margin-left:auto !important;margin-right:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-left:0 !important}.me-md-1{margin-left:.25rem !important}.me-md-2{margin-left:.5rem !important}.me-md-3{margin-left:1rem !important}.me-md-4{margin-left:1.5rem !important}.me-md-5{margin-left:3rem !important}.me-md-auto{margin-left:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-right:0 !important}.ms-md-1{margin-right:.25rem !important}.ms-md-2{margin-right:.5rem !important}.ms-md-3{margin-right:1rem !important}.ms-md-4{margin-right:1.5rem !important}.ms-md-5{margin-right:3rem !important}.ms-md-auto{margin-right:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-left:0 !important;padding-right:0 !important}.px-md-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-md-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-md-3{padding-left:1rem !important;padding-right:1rem !important}.px-md-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-md-5{padding-left:3rem !important;padding-right:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-left:0 !important}.pe-md-1{padding-left:.25rem !important}.pe-md-2{padding-left:.5rem !important}.pe-md-3{padding-left:1rem !important}.pe-md-4{padding-left:1.5rem !important}.pe-md-5{padding-left:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-right:0 !important}.ps-md-1{padding-right:.25rem !important}.ps-md-2{padding-right:.5rem !important}.ps-md-3{padding-right:1rem !important}.ps-md-4{padding-right:1.5rem !important}.ps-md-5{padding-right:3rem !important}.text-md-start{text-align:right !important}.text-md-end{text-align:left !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:right !important}.float-lg-end{float:left !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-left:0 !important;margin-right:0 !important}.mx-lg-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-lg-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-lg-3{margin-left:1rem !important;margin-right:1rem !important}.mx-lg-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-lg-5{margin-left:3rem !important;margin-right:3rem !important}.mx-lg-auto{margin-left:auto !important;margin-right:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-left:0 !important}.me-lg-1{margin-left:.25rem !important}.me-lg-2{margin-left:.5rem !important}.me-lg-3{margin-left:1rem !important}.me-lg-4{margin-left:1.5rem !important}.me-lg-5{margin-left:3rem !important}.me-lg-auto{margin-left:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-right:0 !important}.ms-lg-1{margin-right:.25rem !important}.ms-lg-2{margin-right:.5rem !important}.ms-lg-3{margin-right:1rem !important}.ms-lg-4{margin-right:1.5rem !important}.ms-lg-5{margin-right:3rem !important}.ms-lg-auto{margin-right:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-left:0 !important;padding-right:0 !important}.px-lg-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-lg-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-lg-3{padding-left:1rem !important;padding-right:1rem !important}.px-lg-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-lg-5{padding-left:3rem !important;padding-right:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-left:0 !important}.pe-lg-1{padding-left:.25rem !important}.pe-lg-2{padding-left:.5rem !important}.pe-lg-3{padding-left:1rem !important}.pe-lg-4{padding-left:1.5rem !important}.pe-lg-5{padding-left:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-right:0 !important}.ps-lg-1{padding-right:.25rem !important}.ps-lg-2{padding-right:.5rem !important}.ps-lg-3{padding-right:1rem !important}.ps-lg-4{padding-right:1.5rem !important}.ps-lg-5{padding-right:3rem !important}.text-lg-start{text-align:right !important}.text-lg-end{text-align:left !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:right !important}.float-xl-end{float:left !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-left:0 !important;margin-right:0 !important}.mx-xl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xl-auto{margin-left:auto !important;margin-right:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-left:0 !important}.me-xl-1{margin-left:.25rem !important}.me-xl-2{margin-left:.5rem !important}.me-xl-3{margin-left:1rem !important}.me-xl-4{margin-left:1.5rem !important}.me-xl-5{margin-left:3rem !important}.me-xl-auto{margin-left:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-right:0 !important}.ms-xl-1{margin-right:.25rem !important}.ms-xl-2{margin-right:.5rem !important}.ms-xl-3{margin-right:1rem !important}.ms-xl-4{margin-right:1.5rem !important}.ms-xl-5{margin-right:3rem !important}.ms-xl-auto{margin-right:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-left:0 !important;padding-right:0 !important}.px-xl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-left:0 !important}.pe-xl-1{padding-left:.25rem !important}.pe-xl-2{padding-left:.5rem !important}.pe-xl-3{padding-left:1rem !important}.pe-xl-4{padding-left:1.5rem !important}.pe-xl-5{padding-left:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-right:0 !important}.ps-xl-1{padding-right:.25rem !important}.ps-xl-2{padding-right:.5rem !important}.ps-xl-3{padding-right:1rem !important}.ps-xl-4{padding-right:1.5rem !important}.ps-xl-5{padding-right:3rem !important}.text-xl-start{text-align:right !important}.text-xl-end{text-align:left !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:right !important}.float-xxl-end{float:left !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-left:0 !important;margin-right:0 !important}.mx-xxl-1{margin-left:.25rem !important;margin-right:.25rem !important}.mx-xxl-2{margin-left:.5rem !important;margin-right:.5rem !important}.mx-xxl-3{margin-left:1rem !important;margin-right:1rem !important}.mx-xxl-4{margin-left:1.5rem !important;margin-right:1.5rem !important}.mx-xxl-5{margin-left:3rem !important;margin-right:3rem !important}.mx-xxl-auto{margin-left:auto !important;margin-right:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-left:0 !important}.me-xxl-1{margin-left:.25rem !important}.me-xxl-2{margin-left:.5rem !important}.me-xxl-3{margin-left:1rem !important}.me-xxl-4{margin-left:1.5rem !important}.me-xxl-5{margin-left:3rem !important}.me-xxl-auto{margin-left:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-right:0 !important}.ms-xxl-1{margin-right:.25rem !important}.ms-xxl-2{margin-right:.5rem !important}.ms-xxl-3{margin-right:1rem !important}.ms-xxl-4{margin-right:1.5rem !important}.ms-xxl-5{margin-right:3rem !important}.ms-xxl-auto{margin-right:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-left:0 !important;padding-right:0 !important}.px-xxl-1{padding-left:.25rem !important;padding-right:.25rem !important}.px-xxl-2{padding-left:.5rem !important;padding-right:.5rem !important}.px-xxl-3{padding-left:1rem !important;padding-right:1rem !important}.px-xxl-4{padding-left:1.5rem !important;padding-right:1.5rem !important}.px-xxl-5{padding-left:3rem !important;padding-right:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-left:0 !important}.pe-xxl-1{padding-left:.25rem !important}.pe-xxl-2{padding-left:.5rem !important}.pe-xxl-3{padding-left:1rem !important}.pe-xxl-4{padding-left:1.5rem !important}.pe-xxl-5{padding-left:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-right:0 !important}.ps-xxl-1{padding-right:.25rem !important}.ps-xxl-2{padding-right:.5rem !important}.ps-xxl-3{padding-right:1rem !important}.ps-xxl-4{padding-right:1.5rem !important}.ps-xxl-5{padding-right:3rem !important}.text-xxl-start{text-align:right !important}.text-xxl-end{text-align:left !important}.text-xxl-center{text-align:center !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}#page_content{margin:0 .5em}h2 img,.h2 img{display:none}h2 a img,.h2 a img{display:inline}.data{margin:0 0 12px}button.mult_submit,.checkall_box+label{text-decoration:none;color:#235a81;cursor:pointer;outline:none}button.mult_submit:hover,button.mult_submit:focus{text-decoration:underline;color:#235a81}.checkall_box+label:hover{text-decoration:underline;color:#235a81}dfn{font-style:normal}dfn:hover{font-style:normal;cursor:help}a img{border:0}hr{color:#444;background-color:#444;border:0;height:1px}form{padding:0;margin:0;display:inline}input,select{outline:none}input[type=text],input[type=password],input[type=number],input[type=date]{border-radius:2px;background:#fff;border:1px solid #aaa;color:#555;padding:4px}input:not(.form-control)[type=text],input:not(.form-control)[type=password],input:not(.form-control)[type=number],input[type=date],input:not(.form-check-input)[type=checkbox]{margin:6px}select:not(.form-select){margin:6px}input[type=text],input[type=password],input[type=number],input[type=date]{transition:all .2s}select{transition:all .2s}input[type=text][disabled],input[type=password][disabled],input[type=number][disabled],input[type=date][disabled]{background:#e8e8e8;box-shadow:none}input[type=text][disabled]:hover,input[type=password][disabled]:hover,input[type=number][disabled]:hover,input[type=date][disabled]:hover{background:#e8e8e8;box-shadow:none}select[disabled]{background:#e8e8e8;box-shadow:none}select[disabled]:hover{background:#e8e8e8;box-shadow:none}input[type=text]:hover,input[type=text]:focus{border:1px solid #7c7c7c;background:#fff}input[type=password]:hover,input[type=password]:focus{border:1px solid #7c7c7c;background:#fff}input[type=number]:hover,input[type=number]:focus{border:1px solid #7c7c7c;background:#fff}input[type=date]:hover,input[type=date]:focus{border:1px solid #7c7c7c;background:#fff}select:focus{border:1px solid #7c7c7c;background:#fff}input[type=text]:hover,input[type=password]:hover,input[type=number]:hover,input[type=date]:hover{box-shadow:0 1px 3px #aaa}textarea{overflow:visible;margin:6px}textarea.char{margin:6px}textarea.charField{width:95%}.pma-fieldset{margin-top:1em;border-radius:4px 4px 0 0;border:#aaa solid 1px;padding:.5em;background:#eee;text-shadow:-1px 1px 2px #fff inset;box-shadow:-1px 1px 2px #fff inset}.pma-fieldset .pma-fieldset{margin:.8em;border:1px solid #aaa;background:#e8e8e8}.pma-fieldset legend{float:none;font-weight:bold;color:#444;padding:5px 10px;border-radius:2px;border:1px solid #aaa;background-color:#fff;max-width:100%;box-shadow:-3px 3px 15px #bbb;width:initial;font-size:1em}button{display:inline}.datatable{table-layout:fixed}img,button{vertical-align:middle}input:not(.form-check-input)[type=checkbox],input[type=radio]{vertical-align:-11%}select{border-radius:2px;border:1px solid #bbb;color:#333;padding:3px;background:#fff}select:not(.form-select){margin:6px}select[multiple]{background:linear-gradient(#fff, #f2f2f2)}.clearfloat{clear:both}.paddingtop{padding-top:1em}.separator{color:#fff;text-shadow:0 1px 0 #000}div.tools{padding:.2em;margin-top:0;margin-bottom:.5em;border-top:0;text-align:left;float:none;clear:both;border-radius:0 0 4px 4px}div.tools a{color:#3a7ead !important}.pma-fieldset.tblFooters{margin-top:0;margin-bottom:.5em;border-top:0;text-align:left;float:none;clear:both;border-radius:0 0 4px 4px}div.null_div{height:20px;text-align:center;font-style:normal;min-width:50px}.pma-fieldset .formelement{float:right;margin-left:.5em;white-space:nowrap}.pma-fieldset div[class=formelement]{white-space:normal}button.mult_submit{border:none;background-color:rgba(0,0,0,0)}.condition{border-color:#000 !important}th.condition{border-width:1px 1px 0 1px;border-style:solid}td.condition{border-width:0 1px 0 1px;border-style:solid}tr:last-child td.condition{border-width:0 1px 1px 1px}.before-condition{border-left:1px solid #000}td.null{font-style:italic;color:#7d7d7d !important}table .valueHeader,table .value{text-align:left;white-space:normal}.value{font-family:monospace}img.lightbulb{cursor:pointer}.pdflayout{overflow:hidden;clip:inherit;background-color:#fff;display:none;border:1px solid #000;position:relative}.pdflayout_table{background:#d3dce3;color:#000;overflow:hidden;clip:inherit;z-index:2;display:inline;visibility:inherit;cursor:move;position:absolute;font-size:80%;border:1px dashed #000}.cm-sql-doc{text-decoration:none;border-bottom:1px dotted #000;color:inherit !important}.selectallarrow{margin-left:.3em;margin-right:.6em}.with-selected{margin-right:2em}#pma_errors,#pma_demo,#pma_footer{position:relative;padding:0 .5em}.confirmation{color:#000;background-color:pink}.error{border:1px solid maroon !important;padding:.27em;color:#000;background:pink}.new_central_col{width:100%}.tblcomment{font-size:70%;font-weight:normal;color:#009}.tblHeaders{font-weight:bold;color:#000;background:#d3dce3}div.tools,.tblFooters{font-weight:normal;color:#000;background:#d3dce3}.tblHeaders a:link,.tblHeaders a:active,.tblHeaders a:visited{color:blue}div.tools a:link,div.tools a:visited,div.tools a:active{color:blue}.tblFooters a:link,.tblFooters a:active,.tblFooters a:visited{color:blue}.tblHeaders a:hover,div.tools a:hover,.tblFooters a:hover{color:red}.disabled{color:#666}.disabled a:link,.disabled a:active,.disabled a:visited{color:#666}.disabled a:hover{color:#666;text-decoration:none}.pre_wrap{white-space:pre-wrap}.pre_wrap br{display:none}body#loginform{margin:1em 0 0 0;text-align:center}body#loginform h1,body#loginform .h1,body#loginform a.logo{display:block;text-align:center}body#loginform div.container{text-align:right;width:30em;margin:0 auto}#login_form .card-footer{text-align:left}div.container.modal_form{margin:0 auto;width:30em;text-align:center;background:#fff;z-index:999}div#modalOverlay{position:fixed;top:0;right:0;height:100%;width:100%;background:#fff;z-index:900}label.col-3.d-flex.align-items-center{font-weight:bolder}.commented_column{border-bottom:1px dashed #000}.column_attribute{font-size:70%}.column_name{font-size:80%;margin:5px 2px}.central_columns_navigation{padding:1.5% 0 !important}.message_errors_found{margin-top:20px}.repl_gui_skip_err_cnt{width:30px}.color_gray{color:gray}.max_height_400{max-height:400px}li.last.database{margin-bottom:15px !important}div#dataDisplay input,div#dataDisplay select{margin:0;margin-left:.5em}div#dataDisplay th{line-height:2em}img.calendar{border:none}form.clock{text-align:center}div#tablestatistics table{float:right;margin-bottom:.5em;margin-left:1.5em;margin-top:.5em;min-width:16em}#topmenucontainer{padding-left:1em;width:100%}#page_nav_icons{position:fixed;top:0;left:0;z-index:99;padding:.1rem 0}#page_settings_icon{cursor:pointer;display:none}#page_settings_modal,#pma_navigation_settings{display:none}#textSQLDUMP{width:95%;height:95%;font-family:Consolas,"Courier New",Courier,monospace;font-size:110%}#TooltipContainer{position:absolute;z-index:99;width:20em;height:auto;overflow:visible;visibility:hidden;background-color:#ffc;color:#060;border:.1em solid #000;padding:.5em}#fieldset_add_user_login div.item{display:flex;align-items:center;border-bottom:1px solid silver;padding-bottom:.3em;margin-bottom:.3em}#fieldset_add_user_login label{float:right;display:block;width:10em;max-width:100%;text-align:left;padding-left:.5em;margin-bottom:0}#fieldset_add_user_login input{width:12em;clear:left;max-width:100%}#fieldset_add_user_login span.options{float:right;display:block;width:12em;max-width:100%;padding-left:.5em}#fieldset_add_user_login span.options #select_pred_username,#fieldset_add_user_login span.options #select_pred_hostname,#fieldset_add_user_login span.options #select_pred_password{width:100%;max-width:100%}#fieldset_add_user_login span.options input{width:auto}#fieldset_user_priv div.item{float:right;width:9em;max-width:100%}#fieldset_user_priv div.item div.item{float:none}#fieldset_user_priv div.item label{white-space:nowrap}#fieldset_user_priv div.item select{width:100%}#fieldset_user_global_rights .pma-fieldset,#fieldset_user_group_rights .pma-fieldset{float:right}#fieldset_user_global_rights>legend input{margin-right:2em}.linkElem:hover{text-decoration:underline;color:#235a81;cursor:pointer}h3#serverstatusqueries span,#serverstatusqueries.h3 span{font-size:60%;display:inline}div#serverStatusTabs{margin-top:1em}caption a.top{float:left}div#serverstatusquerieschart{float:right;width:500px;height:350px;margin-left:50px}div#serverstatus table tbody td.descr a,div#serverstatus table .tblFooters a{white-space:nowrap}div.liveChart{clear:both;min-width:500px;height:400px;padding-bottom:80px}div#chartVariableSettings{border:1px solid #ddd;background-color:#e6e6e6;margin-right:10px}table#chartGrid td{padding:3px;margin:0}table#chartGrid div.monitorChart{background:#ebebeb;border:none;min-width:1px}div.tabLinks{float:right;padding:5px 0}div.tabLinks a,div.tabLinks label{margin-left:7px}div.tabLinks .icon{margin:-0.2em 0 0 .3em}.popupContent{display:none;position:absolute;border:1px solid #ccc;margin:0;padding:3px;background-color:#fff;z-index:2;box-shadow:-2px 2px 3px #666}div#logTable{padding-top:10px;clear:both}div#logTable table{width:100%}div#queryAnalyzerDialog{min-width:700px}div#queryAnalyzerDialog div.CodeMirror-scroll{height:auto}div#queryAnalyzerDialog div#queryProfiling{height:300px}div#queryAnalyzerDialog td.explain{width:250px}div#queryAnalyzerDialog table.queryNums{display:none;border:0;text-align:right}.smallIndent{padding-right:7px}div#profilingchart{width:850px;height:370px;float:right}#profilingchart .jqplot-highlighter-tooltip{top:auto !important;right:11px;bottom:24px}#resizer{border:1px solid silver}#inner-resizer{padding:10px}#togglequerybox{margin:0 10px}#serverstatus h3,#serverstatus .h3{margin:15px 0;font-weight:normal;color:#999;font-size:1.7em}textarea#sqlquery{width:100%;border-radius:4px;border:1px solid #aaa;padding:5px;font-family:inherit}textarea#sql_query_edit{height:7em;width:95%;display:block}#mysqlmaininformation,#pmamaininformation{float:right;width:49%}#maincontainer ul{list-style-type:disc;vertical-align:middle}#maincontainer li{margin-bottom:.3em}#full_name_layer{position:absolute;padding:2px;margin-top:-3px;z-index:801;border-radius:3px;border:solid 1px #888;background:#fff}#body_browse_foreigners{background:#f3f3f3;margin:.5em .5em 0 .5em}#bodythemes{width:500px;margin:auto;text-align:center}#bodythemes img{border:.1em solid #000}#bodythemes a:hover img{border:.1em solid red}#selflink{clear:both;display:block;margin-top:1em;margin-bottom:1em;width:98%;margin-right:1%;text-align:left;border-top:.1em solid silver}#qbe_div_table_list,#qbe_div_sql_query{float:right}kbd{color:#444;background-color:rgba(0,0,0,0);box-shadow:none}code{font-size:1em;color:#444}code.php{display:block;padding-right:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}code.sql{display:block;padding:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}div.sqlvalidate{display:block;padding:1em;margin-top:0;margin-bottom:0;max-height:10em;overflow:auto;direction:rtl}.result_query div.sqlOuter{background:#e5e5e5;text-align:right}#PMA_slidingMessage code.sql,div.sqlvalidate{background:#e5e5e5}textarea#partitiondefinition{height:3em}.hide{display:none}#list_server{list-style-type:none;padding:0}div.upload_progress{width:400px;margin:3em auto;text-align:center}div.upload_progress_bar_outer{border:1px solid #000;width:202px;position:relative;margin:0 auto 1em;color:#444}div.upload_progress_bar_outer div.percentage{position:absolute;top:0;right:0;width:202px}div.upload_progress_bar_inner{background-color:#ddd;width:0;height:12px;margin:1px;overflow:hidden;color:#000;position:relative}div.upload_progress_bar_inner div.percentage{top:-1px;right:-1px}div#statustext{margin-top:.5em}table#serverconnection_src_remote,table#serverconnection_trg_remote,table#serverconnection_src_local,table#serverconnection_trg_local{float:right}input[type=text].invalid_value,input[type=password].invalid_value,input[type=number].invalid_value,input[type=date].invalid_value{background:#fcc}select.invalid_value,.invalid_value{background:#fcc}.ajax_notification{top:0;position:fixed;margin-top:200px;margin-left:auto;margin-bottom:0;margin-right:auto;padding:5px;width:350px;z-index:1100;text-align:center;display:inline;right:0;left:0;background-image:url("../img/ajax_clock_small.gif");background-repeat:no-repeat;background-position:98%;border:1px solid #e2b709;background-color:#ffe57e;border-radius:5px;box-shadow:0 5px 90px #888}#loading_parent{position:relative;width:100%}input#import_merge{margin:0}#popup_background{display:none;position:fixed;width:100%;height:100%;top:0;right:0;background:#000;z-index:1000;overflow:hidden}#tablestructure tbody label{margin:.3rem 0}#structure-action-links a{margin-left:1em}#addColumns input[type=radio]{margin:3px 0 0;margin-right:1em}#index_frm .index_info input[type=text],#index_frm .index_info select{width:100%;margin:0;box-sizing:border-box}#index_frm .index_info div{padding:.2em 0}#index_frm .index_info .label{float:right;min-width:12em}#index_frm .slider{width:10em;margin:.6em;float:right}#index_frm .add_fields{float:right}#index_frm .add_fields input{margin-right:1em}#index_frm input{margin:0}#index_frm td{vertical-align:middle}table#index_columns{width:100%}table#index_columns select{width:85%;float:right}#move_columns_dialog div{padding:1em}#move_columns_dialog ul{list-style:none;margin:0;padding:0}#move_columns_dialog li{background:#d3dce3;border:1px solid #aaa;color:#000;font-weight:bold;margin:.4em;padding:.2em;border-radius:2px}.config-form .card{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.config-form fieldset{margin-top:0;padding:0;clear:both;border-radius:0}.config-form fieldset p{margin:0;padding:.5em;background:#fff;border-top:0}.config-form fieldset .errors{margin:0 -2px 1em;padding:.5em 1.5em;background:#fbead9;list-style:none;font-family:sans-serif;font-size:small}.config-form fieldset .inline_errors{margin:.3em .3em .3em;margin-right:0;padding:0;list-style:none;color:#9a0000;font-size:small}.config-form fieldset .doc{margin-right:1em}.config-form fieldset .disabled-notice{margin-right:1em;font-size:80%;text-transform:uppercase;color:#e00;cursor:help}.config-form fieldset th{padding:.3em .3em .3em;padding-right:.5em;text-align:right;vertical-align:top;background:rgba(0,0,0,0);filter:none;border-top:1px #d5d5d5 solid;border-left:none}.config-form fieldset th small,.config-form fieldset th .small{display:block;font-weight:normal;font-family:sans-serif;font-size:x-small;color:#444}.config-form fieldset td{padding-top:.3em;padding-bottom:.3em;vertical-align:top;border-top:1px #d5d5d5 solid;border-left:none}.config-form legend{display:none}.config-form span.checkbox{padding:2px;display:inline-block}.config-form span.checkbox.custom{padding:1px;border:1px #edec90 solid;background:#ffc}.config-form .custom{background:#ffc}.config-form .field-error{border-color:#a11 !important}.config-form input[type=text],.config-form input[type=password],.config-form input[type=number]{border:1px #a7a6aa solid;height:auto}.config-form input[type=text]:focus,.config-form input[type=password]:focus,.config-form input[type=number]:focus{border:1px #6676ff solid;background:#f7fbff}.config-form select,.config-form textarea{border:1px #a7a6aa solid;height:auto}.config-form select:focus,.config-form textarea:focus{border:1px #6676ff solid;background:#f7fbff}.config-form .field-comment-mark{font-family:serif;color:#007;cursor:help;padding:0 .2em;font-weight:bold;font-style:italic}.config-form .field-comment-warning{color:#a00}.config-form dd{margin-right:.5em}.config-form dd::before{content:"▸ "}fieldset .group-header th{background:#d5d5d5}fieldset .group-header+tr th{padding-top:.6em}fieldset .group-field-1 th,fieldset .group-header-2 th{padding-right:1.5em}fieldset .group-field-2 th,fieldset .group-header-3 th{padding-right:3em}fieldset .group-field-3 th{padding-right:4.5em}fieldset .disabled-field th{color:#666;background-color:#ddd}fieldset .disabled-field th small,fieldset .disabled-field th .small{color:#666;background-color:#ddd}fieldset .disabled-field td{color:#666;background-color:#ddd}.click-hide-message{cursor:pointer}.prefsmanage_opts{margin-right:2em}#prefs_autoload{margin-bottom:.5em;margin-right:.5em}input#auto_increment_opt{width:-webkit-min-content;width:-moz-min-content;width:min-content}#placeholder{position:relative;border:1px solid #aaa;float:left;overflow:hidden;width:450px;height:300px}#placeholder .button{position:absolute;cursor:pointer}#placeholder div.button{font-size:smaller;color:#999;background-color:#eee;padding:2px}.wrapper{float:right;margin-bottom:1.5em}.toggleButton{position:relative;cursor:pointer;font-size:.8em;text-align:center;line-height:1.4em;height:1.55em;overflow:hidden;border-left:.1em solid #888;border-right:.1em solid #888;border-radius:.3em}.toggleButton table,.toggleButton td,.toggleButton img{padding:0;position:relative}.toggleButton .toggle-container{position:absolute}.toggleButton .toggle-container td,.toggleButton .toggle-container tr{background:none !important}.toggleButton .toggleOn{color:#fff;padding:0 1em;text-shadow:0 0 .2em #000}.toggleButton .toggleOff{padding:0 1em}.doubleFieldset .pma-fieldset{width:48%;float:right;padding:0}.doubleFieldset legend{margin-right:1.5em}.doubleFieldset div.wrap{padding:1.5em}#table_name_col_no_outer{margin-top:45px}#table_name_col_no{position:fixed;top:55px;width:100%;background:#fff}#table_columns{display:block;overflow:auto}#table_columns input[type=text],#table_columns input[type=password],#table_columns input[type=number]{width:10em;box-sizing:border-box}#table_columns select{width:10em;box-sizing:border-box}#openlayersmap{width:450px;height:300px}.placeholderDrag{cursor:move}#left_arrow{right:8px;top:26px}#right_arrow{right:26px;top:26px}#up_arrow{right:17px;top:8px}#down_arrow{right:17px;top:44px}#zoom_in{right:17px;top:67px}#zoom_world{right:17px;top:85px}#zoom_out{right:17px;top:103px}.colborder{cursor:col-resize;height:100%;margin-right:-6px;position:absolute;width:5px}.colborder_active{border-left:2px solid #a44}.pma_table th.draggable span{display:block;overflow:hidden}.pma_table td{position:static}.pma_table tbody td span{display:block;overflow:hidden}.pma_table tbody td span code span{display:inline}.pma_table th.draggable span{margin-left:10px}.modal-copy input{display:block;width:100%;margin-top:1.5em;padding:.3em 0}.cRsz{position:absolute}.cCpy{background:#333;color:#fff;font-weight:bold;margin:.1em;padding:.3em;position:absolute;text-shadow:1px -1px #000;box-shadow:0 0 .7em #000;border-radius:.3em}.cPointer{height:20px;width:10px;margin-top:-10px;margin-right:-5px;background:url("../img/col_pointer.png");position:absolute}.tooltip{background:#333 !important;opacity:.8 !important;z-index:9999;border:1px solid #000 !important;border-radius:.3em !important;text-shadow:1px -1px #000 !important;font-size:.8em !important;font-weight:bold !important;padding:1px 3px !important}.tooltip *{background:none !important;color:#fff !important}.cDrop{left:0;position:absolute;top:0}.coldrop{background:url("../img/col_drop.png");cursor:pointer;height:16px;margin-top:.3em;width:16px}.coldrop:hover{background-color:#999}.coldrop-hover{background-color:#999}.cList{background:#eee;border:solid 1px #999;position:absolute;box-shadow:0 .2em .5em #333;margin-right:75%;left:0;max-width:100%;overflow-wrap:break-word}.cList .lDiv div{padding:.2em .5em .2em;padding-right:.2em}.cList .lDiv div:hover{background:#ddd;cursor:pointer}.cList .lDiv div input{cursor:pointer}.showAllColBtn{border-bottom:solid 1px #999;border-top:solid 1px #999;cursor:pointer;font-size:.9em;font-weight:bold;padding:.35em 1em;text-align:center}.showAllColBtn:hover{background:#ddd}.turnOffSelect{-webkit-user-select:none;-moz-user-select:none;user-select:none}.navigation{margin:.8em 0;border-radius:5px;background:linear-gradient(#eee, #ccc)}.navigation td{margin:0;padding:0;vertical-align:middle;white-space:nowrap}.navigation input[type=submit]{background:none;border:0;filter:none;margin:0;padding:.8em .5em;border-radius:0}.navigation input[type=submit]:hover{color:#fff;cursor:pointer;text-shadow:none;background:linear-gradient(#333, #555)}.navigation input.edit_mode_active{color:#fff;cursor:pointer;text-shadow:none;background:linear-gradient(#333, #555)}.navigation .btn-link{color:#444}.navigation .btn-link:hover{color:#fff;background-image:linear-gradient(#333, #555);text-decoration:none}.navigation select{margin:0 .8em}.navigation_separator{color:#999;display:inline-block;font-size:1.5em;text-align:center;height:1.4em;width:1.2em;text-shadow:-1px 0 #fff}.cEdit{margin:0;padding:0;position:absolute}.cEdit input[type=text]{background:#fff;height:100%;margin:0;padding:0}.cEdit .edit_area{background:#fff;border:1px solid #999;min-width:10em;padding:.3em .5em}.cEdit .edit_area select,.cEdit .edit_area textarea{width:97%}.cEdit .cell_edit_hint{color:#555;font-size:.8em;margin:.3em .2em}.cEdit .edit_box{overflow-x:hidden;overflow-y:scroll;padding:3px;margin:0}.cEdit .edit_box_posting{background:#fff url("../img/ajax_clock_small.gif") no-repeat left center;padding-left:1.5em}.cEdit .edit_area_loading{background:#fff url("../img/ajax_clock_small.gif") no-repeat center;height:10em}.cEdit .goto_link{background:#eee;color:#555;padding:.2em .3em}.saving_edited_data{background:url("../img/ajax_clock_small.gif") no-repeat right;padding-right:20px}.relationalTable td{vertical-align:top}.relationalTable select{width:125px;margin-left:5px}.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:right}.ui-timepicker-div dl dt{height:25px;margin-bottom:-25px}.ui-timepicker-div dl dd{margin:0 85px 10px 10px}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:none;border:none;margin:0;padding:0}.ui-timepicker-rtl{direction:ltr}.ui-timepicker-rtl dl{text-align:left}.ui-timepicker-rtl dl dd{margin:0 10px 10px 65px}body .ui-widget{font-size:1em}body #ui-datepicker-div{z-index:9999 !important}.ui-dialog .pma-fieldset legend a{color:#235a81}.ui-draggable{z-index:801}.jqplot-yaxis{right:0 !important;min-width:25px;width:auto}.jqplot-axis{overflow:hidden}div#page_content div#tableslistcontainer{margin-top:1em}div#page_content div#tableslistcontainer table.data{border-top:.1px solid #eee}div#page_content div.result_query{margin-top:1em}table.show_create{margin-top:1em}table.show_create td{border-left:1px solid #bbb}#alias_modal table{width:100%}#alias_modal label{font-weight:bold}.ui-dialog{position:fixed}.small_font{font-size:smaller}#pma_console_container{width:100%;position:fixed;bottom:0;right:0;z-index:100}textarea{resize:both}#pma_console{position:relative;margin-right:240px}#pma_console .templates{display:none}#pma_console .mid_text{vertical-align:middle}#pma_console .toolbar{position:relative;background:#ccc;border-top:solid 1px #aaa;cursor:n-resize}#pma_console .toolbar span{vertical-align:middle}#pma_console .toolbar.collapsed{cursor:default}#pma_console .toolbar.collapsed:not(:hover){display:inline-block;border-top-left-radius:3px;border-left:solid 1px #aaa}#pma_console .toolbar.collapsed>.button{display:none}#pma_console .message span.text,#pma_console .message span.action{padding:0 3px;display:inline-block}#pma_console .toolbar .button,#pma_console .toolbar .text{padding:0 3px;display:inline-block}#pma_console .switch_button{padding:0 3px;display:inline-block}#pma_console .message span.action,#pma_console .toolbar .button,#pma_console .switch_button{cursor:pointer}#pma_console .message span.action:hover,#pma_console .toolbar .button:hover,#pma_console .switch_button:hover{background:#ddd}#pma_console .toolbar .button.active{background:#ddd}#pma_console .toolbar .text{font-weight:bold}#pma_console .toolbar .button,#pma_console .toolbar .text{margin-left:.4em}#pma_console .toolbar .button,#pma_console .toolbar .text{float:left}#pma_console .content{overflow-x:hidden;overflow-y:auto;margin-bottom:-65px;border-top:solid 1px #aaa;background:#fff;padding-top:.4em}#pma_console .content.console_dark_theme{background:#000;color:#fff}#pma_console .content.console_dark_theme .CodeMirror-wrap{background:#000;color:#fff}#pma_console .content.console_dark_theme .action_content{color:#000}#pma_console .content.console_dark_theme .message{border-color:#373b41}#pma_console .content.console_dark_theme .CodeMirror-cursor{border-color:#fff}#pma_console .content.console_dark_theme .cm-keyword{color:#de935f}#pma_console .message,#pma_console .query_input{position:relative;font-family:Monaco,Consolas,monospace;cursor:text;margin:0 1.4em .2em 10px}#pma_console .message{border-bottom:solid 1px #ccc;padding-bottom:.2em}#pma_console .message.expanded>.action_content{position:relative}#pma_console .message::before{right:-0.7em;position:absolute;content:">"}#pma_console .query_input::before{right:-0.7em;position:absolute;content:">";top:-2px}#pma_console .query_input textarea{width:100%;height:4em;resize:vertical}#pma_console .message:hover::before{color:#7cf;font-weight:bold}#pma_console .message.expanded::before{content:"]"}#pma_console .message.welcome::before{display:none}#pma_console .message.failed::before,#pma_console .message.failed.expanded::before,#pma_console .message.failed:hover::before{content:"=";color:#944}#pma_console .message.pending::before{opacity:.3}#pma_console .message.collapsed>.query{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}#pma_console .message.expanded>.query{display:block;white-space:pre;word-wrap:break-word}#pma_console .message .text.targetdb,#pma_console .message.collapsed .action.collapse,#pma_console .message.expanded .action.expand{display:none}#pma_console .message .action.requery,#pma_console .message .action.profiling,#pma_console .message .action.explain,#pma_console .message .action.bookmark{display:none}#pma_console .message.select .action.profiling,#pma_console .message.select .action.explain{display:inline-block}#pma_console .message.history .text.targetdb,#pma_console .message.successed .text.targetdb{display:inline-block}#pma_console .message.history .action.requery,#pma_console .message.history .action.bookmark{display:inline-block}#pma_console .message.bookmark .action.requery,#pma_console .message.bookmark .action.bookmark{display:inline-block}#pma_console .message.successed .action.requery,#pma_console .message.successed .action.bookmark{display:inline-block}#pma_console .message .action_content{position:absolute;bottom:100%;background:#ccc;border:solid 1px #aaa;border-top-right-radius:3px}#pma_console .message.bookmark .text.targetdb,#pma_console .message .text.query_time{margin:0;display:inline-block}#pma_console .message.failed .text.query_time,#pma_console .message .text.failed{display:none}#pma_console .message.failed .text.failed{display:inline-block}#pma_console .message .text{background:#fff}#pma_console .message.collapsed>.action_content{display:none}#pma_console .message.collapsed:hover>.action_content{display:block}#pma_console .message .bookmark_label{padding:0 4px;top:0;background:#369;color:#fff;border-radius:3px}#pma_console .message .bookmark_label.shared{background:#396}#pma_console .message.expanded .bookmark_label{border-top-right-radius:0;border-top-left-radius:0}#pma_console .query_input{position:relative}#pma_console .mid_layer{height:100%;width:100%;position:absolute;top:0;background:#666;display:none;cursor:pointer;z-index:200}#pma_console .card{position:absolute;width:94%;height:100%;min-height:48px;right:100%;top:0;border-right:solid 1px #999;z-index:300;transition:right .2s}#pma_console .card.show{right:6%;box-shadow:2px 1px 4px -1px #999}#pma_console .button.hide,#pma_console .message span.text.hide{display:none}#pma_bookmarks .content.add_bookmark,#pma_console_options .content{padding:4px 6px}#pma_bookmarks .content.add_bookmark .options{margin-right:1.4em;padding-bottom:.4em;margin-bottom:.4em;border-bottom:solid 1px #ccc}#pma_bookmarks .content.add_bookmark .options button{margin:0 7px;vertical-align:bottom}#pma_bookmarks .content.add_bookmark input[type=text]{margin:0;padding:2px 4px}#debug_console.grouped .ungroup_queries{display:inline-block}#debug_console.ungrouped .group_queries{display:inline-block}#debug_console.ungrouped .ungroup_queries,#debug_console.ungrouped .sort_count{display:none}#debug_console.grouped .group_queries{display:none}#debug_console .count{margin-left:8px}#debug_console .show_trace .trace,#debug_console .show_args .args{display:block}#debug_console .hide_trace .trace,#debug_console .hide_args .args,#debug_console .show_trace .action.dbg_show_trace,#debug_console .hide_trace .action.dbg_hide_trace{display:none}#debug_console .traceStep.hide_args .action.dbg_hide_args,#debug_console .traceStep.show_args .action.dbg_show_args{display:none}#debug_console .traceStep::after{content:"";display:table;clear:both}#debug_console .trace.welcome::after,#debug_console .debug>.welcome::after{content:"";display:table;clear:both}#debug_console .debug_summary{float:right}#debug_console .trace.welcome .time,#debug_console .traceStep .file,#debug_console .script_name{float:left}#debug_console .traceStep .args pre{margin:0}.cm-s-pma .CodeMirror-code{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-code pre{font-family:Monaco,Consolas,monospace}.cm-s-pma .CodeMirror-measure>pre,.cm-s-pma .CodeMirror-code>pre,.cm-s-pma .CodeMirror-lines{padding:0}.cm-s-pma.CodeMirror{resize:none;height:auto;width:100%;min-height:initial;max-height:initial}.cm-s-pma .CodeMirror-scroll{cursor:text}.pma_drop_handler{display:none;position:fixed;top:0;right:0;width:100%;background:rgba(0,0,0,.6);height:100%;z-index:999;color:#fff;font-size:30pt;text-align:center;padding-top:20%}.pma_sql_import_status{display:none;position:fixed;bottom:0;left:25px;width:400px;border:1px solid #999;background:#f3f3f3;border-radius:4px;box-shadow:-2px 2px 5px #ccc}.pma_sql_import_status h2,.pma_sql_import_status .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:-1px 1px 15px #999 inset}.pma_drop_result h2,.pma_drop_result .h2{background-color:#bbb;padding:.1em .3em;margin-top:0;margin-bottom:0;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:-1px 1px 15px #999 inset}.pma_sql_import_status div{height:270px;overflow-y:auto;overflow-x:hidden;list-style-type:none}.pma_sql_import_status div li{padding:8px 10px;border-bottom:1px solid #bbb;color:#940e0e;background:#fff}.pma_sql_import_status div li .filesize{float:left}.pma_sql_import_status h2 .minimize,.pma_sql_import_status .h2 .minimize{float:left;margin-left:5px;padding:0 10px}.pma_sql_import_status h2 .close,.pma_sql_import_status .h2 .close{float:left;margin-left:5px;padding:0 10px;display:none}.pma_sql_import_status h2 .minimize:hover,.pma_sql_import_status .h2 .minimize:hover,.pma_sql_import_status h2 .close:hover,.pma_sql_import_status .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_result h2 .close:hover,.pma_drop_result .h2 .close:hover{background:rgba(155,149,149,.78);cursor:pointer}.pma_drop_file_status{color:#235a81}.pma_drop_file_status span.underline:hover{cursor:pointer;text-decoration:underline}.pma_drop_result{position:fixed;top:10%;right:20%;width:60%;background:#fff;min-height:300px;z-index:800;box-shadow:0 0 15px #999;border-radius:10px;cursor:move}.pma_drop_result h2 .close,.pma_drop_result .h2 .close{float:left;margin-left:5px;padding:0 10px}.dependencies_box{background-color:#fff;border:3px ridge #000}#composite_index_list{list-style-type:none;list-style-position:inside}span.drag_icon{display:inline-block;background-image:url("../img/s_sortable.png");background-position:center center;background-repeat:no-repeat;width:1em;height:3em;cursor:move}.topmargin{margin-top:1em}meter[value="1"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #e32929 5%, transparent 10%, #e32929)}meter[value="2"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #f60 5%, transparent 10%, #f60)}meter[value="3"]::-webkit-meter-optimum-value{background:linear-gradient(white 3%, #ffd700 5%, transparent 10%, #ffd700)}body .ui-dialog .ui-dialog-titlebar-close{left:.3em;right:initial}body .ui-dialog .ui-dialog-title{float:right}body .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:left}.multi_table_query_form .query-form__tr--hide{display:none}.multi_table_query_form .query-form__fieldset--inline,.multi_table_query_form .query-form__select--inline{display:inline}.multi_table_query_form .query-form__tr--bg-none{background:none}.multi_table_query_form .query-form__input--wide{width:91%}.multi_table_query_form .query-form__multi-sql-query{float:right}#name-panel{overflow:hidden}@media only screen and (max-width: 768px){.responsivetable{overflow-x:auto}body#loginform div.container{width:100%}.largescreenonly{display:none}.width96{width:96% !important}#page_nav_icons{display:none}#table_name_col_no{top:62px}.tdblock tr td{display:block}#table_columns{margin-top:60px}#table_columns .tablesorter{min-width:100%}.doubleFieldset .pma-fieldset{width:98%}div#serverstatusquerieschart{width:100%;height:450px}.ui-dialog{margin:1%;width:95% !important}}#tooltip_editor{font-size:12px;background-color:#fff;opacity:.95;filter:alpha(opacity=95);padding:5px}#tooltip_font{font-weight:bold}#selection_box{z-index:1000;height:205px;position:absolute;background-color:skyblue;opacity:.4;filter:alpha(opacity=40);pointer-events:none}#filterQueryText{vertical-align:baseline}.ui_tpicker_hour_slider,.ui_tpicker_minute_slider,.ui_tpicker_second_slider,.ui_tpicker_millisec_slider,.ui_tpicker_microsec_slider{margin-right:20px;margin-top:4px;height:.75rem}.ui_tpicker_time_input{width:100%}.pre-scrollable{max-height:340px;overflow-y:scroll}@media(min-width: 1200px){div.tools{text-align:right}.pma-fieldset.tblFooters,.tblFooters{text-align:right}}.resize-vertical{resize:vertical}#previewSqlModal{z-index:1056;top:100px}p.enum_notice{margin:5px 2px;font-size:80%}#enum_editor p{margin-top:0;font-style:italic}#enum_editor .values{width:100%}#enum_editor .add{width:100%}#enum_editor .add td{vertical-align:middle;width:50%;padding:0 0 0;padding-right:1em}#enum_editor .values td.drop{width:1.8em;cursor:pointer;vertical-align:middle}#enum_editor .values input{margin:.1em 0;padding-left:2em;width:100%}#enum_editor .values img{vertical-align:middle}#enum_editor input.add_value{margin:0;margin-left:.4em}#enum_editor_output textarea{width:100%;float:left;margin:1em 0 0 0}.enum_hint{position:relative}.enum_hint a{position:absolute;right:81%;bottom:.35em}a.close_gis_editor{float:left}#gis_editor{display:none;position:fixed;z-index:1001;overflow-y:auto;overflow-x:hidden}#gis_data{min-height:230px}#gis_data_textarea{height:6em}#gis_data_editor{background:#d0dce0;padding:15px;min-height:500px}#gis_data_editor .choice{display:none}#gis_data_editor input[type=text]{width:75px}#pma_navigation{width:240px;position:fixed;top:0;right:0;height:100vh;background:linear-gradient(to left, #f3f3f3, #dadcde);color:#000;z-index:800}#pma_navigation ul{margin:0}#pma_navigation form{margin:0;padding:0;display:inline}#pma_navigation select#select_server,#pma_navigation select#lightm_db{width:100%}#pma_navigation div.pageselector{text-align:center;margin:0;margin-right:.75em;border-right:1px solid #666}#pma_navigation #pmalogo,#pma_navigation #serverChoice,#pma_navigation #navipanellinks,#pma_navigation #recentTableList,#pma_navigation #favoriteTableList,#pma_navigation #databaseList,#pma_navigation div.pageselector.dbselector{text-align:center;padding:5px 10px 0;border:0}#pma_navigation #navipanellinks .icon{margin:0}#pma_navigation #recentTable,#pma_navigation #favoriteTable{width:200px}#pma_navigation #favoriteTableList select,#pma_navigation #serverChoice select{width:80%}#pma_navigation_header{overflow:hidden}#pma_navigation_content{width:100%;height:100%;position:absolute;top:0;right:0;z-index:0}#pma_navigation_content>img.throbber{display:none;margin:.3em auto 0}#pma_navigation_select_database{text-align:right;padding:0 0 0;border:0;margin:0}#pma_navigation_db_select{margin-top:.5em;margin-right:.75em}#pma_navigation_db_select select{background:linear-gradient(#fff, #f1f1f1, #fff);border-radius:2px;border:1px solid #bbb;border-top:1px solid #bbb;color:#333;padding:4px 6px;margin:0 0 0;width:92%;font-size:1.11em}#pma_navigation_tree_content{width:100%;overflow:hidden;overflow-y:auto;position:absolute;height:100%}#pma_navigation_tree_content a.hover_show_full{position:relative;z-index:100;vertical-align:sub}#pma_navigation_tree{margin:0;margin-right:5px;overflow:hidden;color:#444;height:74%;position:relative}#pma_navigation_tree a{color:#000;padding-right:0}#pma_navigation_tree a:hover{text-decoration:underline}#pma_navigation_tree ul{clear:both;padding:0;list-style-type:none;margin:0}#pma_navigation_tree ul ul{position:relative}#pma_navigation_tree li{margin-bottom:0}#pma_navigation_tree li.activePointer,#pma_navigation_tree li.selected{color:#000;background-color:#ddd}#pma_navigation_tree li .dbItemControls{padding-left:4px;float:left}#pma_navigation_tree li .navItemControls{display:none;padding-left:4px;float:left}#pma_navigation_tree li.activePointer .navItemControls{display:block;opacity:.5}#pma_navigation_tree li.activePointer .navItemControls:hover{opacity:1}#pma_navigation_tree li{white-space:nowrap;clear:both;min-height:16px}#pma_navigation_tree li.fast_filter{white-space:nowrap;clear:both;min-height:16px}#pma_navigation_tree img{margin:0}#pma_navigation_tree i{display:block}#pma_navigation_tree div.block{position:relative;width:1.5em;height:1.5em;min-width:16px;min-height:16px;float:right}#pma_navigation_tree div.block.double{width:2.5em}#pma_navigation_tree div.block i,#pma_navigation_tree div.block b{width:1.5em;height:1.7em;min-width:16px;min-height:8px;position:absolute;bottom:.7em;right:.75em;z-index:0}#pma_navigation_tree div.block i{display:block;border-right:1px solid #666;border-bottom:1px solid #666;position:relative;z-index:0}#pma_navigation_tree div.block i.first{border-right:0}#pma_navigation_tree div.block b{display:block;height:.75em;bottom:0;right:.75em;border-right:1px solid #666}#pma_navigation_tree div.block a,#pma_navigation_tree div.block u{position:absolute;right:50%;top:50%;z-index:10}#pma_navigation_tree div.block a+a{right:100%}#pma_navigation_tree div.block.double a,#pma_navigation_tree div.block.double u{right:33%}#pma_navigation_tree div.block.double a+a{right:85%}#pma_navigation_tree div.block img{position:relative;top:-0.6em;right:0;margin-right:-7px}#pma_navigation_tree div.throbber img{top:2px;right:2px}#pma_navigation_tree li.last>ul{background:none}#pma_navigation_tree li>a,#pma_navigation_tree li>i{line-height:1.5em;height:1.5em;padding-right:.3em}#pma_navigation_tree .list_container{border-right:1px solid #666;margin-right:.75em;padding-right:.75em}#pma_navigation_tree .list_container li.last.database{margin-bottom:0 !important}#pma_navigation_tree .last>.list_container{border-right:0 solid #666}li.fast_filter{padding-right:.75em;margin-right:.75em;padding-left:35px;border-right:1px solid #666;list-style:none}li.fast_filter input{font-size:.7em}li.fast_filter .searchClauseClear{border:0;font-weight:bold;color:#800;font-size:.7em}li.fast_filter .searchClauseClear:hover{background-color:rgba(0,0,0,0);border-color:rgba(0,0,0,0)}li.fast_filter.db_fast_filter{border:0;margin-right:0}#navigation_controls_outer{min-height:21px !important}#navigation_controls_outer.activePointer{background-color:rgba(0,0,0,0) !important}#navigation_controls{float:left;padding-left:23px}#pma_navigation_resizer{width:3px;height:100%;background-color:#aaa;cursor:col-resize;position:fixed;top:0;right:240px;z-index:801}#pma_navigation_collapser{width:20px;height:22px;line-height:22px;background:#eee;color:#555;font-weight:bold;position:fixed;top:0;right:240px;text-align:center;cursor:pointer;z-index:800;text-shadow:0 1px 0 #fff;filter:dropshadow(color=#fff, offx=0, offy=1);border:1px solid #888}.pma_quick_warp{margin-top:5px;margin-right:2px;position:relative}.pma_quick_warp .drop_list{float:right;margin-right:3px;padding:2px 0}.pma_quick_warp .drop_list:hover .drop_button{background:#fff}.pma_quick_warp .drop_list:hover ul{display:block}.pma_quick_warp .drop_list ul{position:absolute;margin:0;padding:0;overflow:hidden;overflow-y:auto;list-style:none;background:#fff;border:1px solid #ddd;border-radius:.3em;border-top-left-radius:0;border-bottom-left-radius:0;box-shadow:0 0 5px #ccc;top:100%;right:3px;left:0;display:none;z-index:802}.pma_quick_warp .drop_list li{white-space:nowrap;padding:0;border-radius:0}.pma_quick_warp .drop_list li img{vertical-align:sub}.pma_quick_warp .drop_list li:hover{background:#f2f2f2}.pma_quick_warp .drop_list a{display:block;padding:.2em .3em}.pma_quick_warp .drop_list a.favorite_table_anchor{clear:right;float:right;padding:.1em .3em 0}.pma_quick_warp .drop_button{padding:.3em;border:1px solid #ddd;border-radius:.3em;background:#f2f2f2;cursor:pointer}.input_tab{background-color:#a6c7e1;color:#000}.content_fullscreen{position:relative;overflow:auto}#canvas_outer{position:relative;width:100%;display:block}#canvas{background-color:#fff;color:#000}canvas.designer{display:inline-block;overflow:hidden;text-align:right}canvas.designer *{behavior:url(#default#VML)}.designer_tab{background-color:#fff;color:#000;border-collapse:collapse;border:1px solid #aaa;z-index:1;-webkit-user-select:none;-moz-user-select:none;user-select:none}.designer_tab .header{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.tab_zag{text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_zag_2{background:linear-gradient(#fffa96 0%, #fffa96 39%, #ffe796 40%, #ffe796 100%);background-repeat:repeat-x;text-align:center;cursor:move;padding:1px;font-weight:bold}.tab_field{background:#fff;color:#000;cursor:default}.tab_field:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}.tab_field_3{background-color:#ffe6e6 !important;color:#000;cursor:default}.tab_field_3:hover{background-color:#cfc;color:#000;background-repeat:repeat-x;cursor:default}#designer_hint{white-space:nowrap;position:absolute;background-color:#9f9;color:#000;z-index:3;border:#0c6 solid 1px;display:none}#designer_body #page_content{margin:0}.scroll_tab{overflow:auto;width:100%;height:500px}.designer_Tabs{cursor:default;color:#05b;white-space:nowrap;text-decoration:none;text-indent:3px;font-weight:bold;margin-right:2px;text-align:right;background:linear-gradient(#fff, #dfe5e7 70%, #fff 70%, #fff 100%);border:#ccc solid 1px}.designer_Tabs:hover{cursor:default;color:#05b;background:#fe9;text-indent:3px;font-weight:bold;white-space:nowrap;text-decoration:none;border:#99f solid 1px;text-align:right}.owner{font-weight:normal;color:#888}.option_tab{padding-right:2px;padding-left:2px;width:5px}.select_all{vertical-align:top;padding-right:2px;padding-left:2px;cursor:default;width:1px;color:#000;background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%)}.small_tab{vertical-align:top;background-color:#0064ea;color:#fff;background-image:url("../img/designer/small_tab.png");cursor:default;text-align:center;font-weight:bold;padding-right:2px;padding-left:2px;width:1px;text-decoration:none}.small_tab:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;padding-right:2px;padding-left:2px;text-align:center;font-weight:bold;width:1px;text-decoration:none}.small_tab_pref{background:linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%);text-align:center;width:1px}.small_tab_pref:hover{vertical-align:top;color:#fff;background-color:#f96;cursor:default;text-align:center;font-weight:bold;width:1px;text-decoration:none}.butt{border:#47a solid 1px;font-weight:bold;background-color:#fff;color:#000;vertical-align:baseline}.L_butt2_1{padding:1px;text-decoration:none;vertical-align:middle;cursor:default}.L_butt2_1:hover{padding:0;border:#09c solid 1px;background:#fe9;color:#000;text-decoration:none;vertical-align:middle;cursor:default}.bor{width:10px;height:10px}.frams1{background:url("../img/designer/1.png") no-repeat left bottom}.frams2{background:url("../img/designer/2.png") no-repeat right bottom}.frams3{background:url("../img/designer/3.png") no-repeat right top}.frams4{background:url("../img/designer/4.png") no-repeat left top}.frams5{background:url("../img/designer/5.png") repeat-x center bottom}.frams6{background:url("../img/designer/6.png") repeat-y right}.frams7{background:url("../img/designer/7.png") repeat-x top}.frams8{background:url("../img/designer/8.png") repeat-y left}#osn_tab{position:absolute;background-color:#fff;color:#000}.designer_header{background-color:#eaeef0;color:#000;text-align:center;font-weight:bold;margin:0;padding:0;background-image:url("../img/designer/top_panel.png");background-position:top;background-repeat:repeat-x;border-left:#999 solid 1px;border-right:#999 solid 1px;height:28px;z-index:101;width:100%;position:fixed}.designer_header a,.designer_header span{display:block;float:right;margin:3px 1px 4px;height:20px;border:1px dotted #fff}.designer_header .M_bord{display:block;float:right;margin:4px;height:20px;width:2px}.designer_header a.first{margin-left:1em}.designer_header a.last{margin-right:1em}a.M_butt_Selected_down_IE,a.M_butt_Selected_down{border:1px solid #c0c0bb;background-color:#9f9;color:#000}a.M_butt_Selected_down_IE:hover,a.M_butt_Selected_down:hover{border:1px solid #09c;background-color:#fe9;color:#000}a.M_butt:hover{border:1px solid #09c;background-color:#fe9;color:#000}#layer_menu{z-index:98;position:relative;float:left;background-color:#eaeef0;border:#999 solid 1px}#layer_upd_relation{position:absolute;right:637px;top:224px;z-index:100}#layer_new_relation,#designer_optionse{position:absolute;right:636px;top:85px;z-index:100;width:153px}#layer_menu_sizer{background-image:url("../img/designer/resize.png");cursor:ew-resize}#layer_menu_sizer .icon{margin:0}.panel{position:fixed;top:60px;left:0;width:350px;max-height:500px;display:none;overflow:auto;padding-top:34px;z-index:102}a.trigger{position:fixed;text-decoration:none;top:60px;left:0;color:#fff;padding:10px 15px 10px 40px;background:#333 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #444;display:block;z-index:102}a.trigger:hover{color:#080808;background:#fff696 url("../img/designer/plus.png") 15% 55% no-repeat;border:1px solid #999}a.active.trigger{background:#222 url("../img/designer/minus.png") 15% 55% no-repeat;z-index:999}a.active.trigger:hover{background:#fff696 url("../img/designer/minus.png") 15% 55% no-repeat}.toggle_container .block{background-color:#dbe4e8;border-top:1px solid #999}.history_table{text-align:center;cursor:pointer;background-color:#dbe4e8}.history_table:hover{background-color:#99c}#ab{min-width:300px}#ab .ui-accordion-content{padding:0}#foreignkeychk{text-align:right;cursor:pointer}.side-menu{float:right;position:fixed;width:auto;height:auto;background:#efefef;border:1px solid gray;overflow:hidden;z-index:50;padding:2px}.side-menu.right{float:left;left:0}.side-menu .hide{display:none}.side-menu a{display:block;float:none;overflow:hidden;line-height:1em}.side-menu img,.side-menu .text{float:right}#name-panel{border-bottom:1px solid gray;text-align:center;background:#efefef;width:100%;font-size:1.2em;padding:5px;font-weight:bold}#container-form{width:100%;position:absolute;right:0}.CodeMirror{height:20rem;direction:rtl}#inline_editor_outer .CodeMirror{height:6em}.insertRowTable .CodeMirror{min-height:9em;min-width:24em;border:1px solid #a9a9a9}#pma_console .CodeMirror-gutters{background-color:initial;border:none}span.cm-keyword,span.cm-statement-verb{color:#909}span.cm-variable{color:#000}span.cm-comment{color:olive}span.cm-mysql-string{color:green}span.cm-operator{color:#f0f}span.cm-mysql-word{color:#000}span.cm-builtin{color:red}span.cm-variable-2{color:#f90}span.cm-variable-3{color:blue}span.cm-separator{color:#f0f}span.cm-number{color:teal}.autocomplete-column-name{display:inline-block}.autocomplete-column-hint{display:inline-block;float:left;color:#666;margin-right:1em}.CodeMirror-hints{z-index:1999}.CodeMirror-lint-tooltip{z-index:200;font-family:inherit}.CodeMirror-lint-tooltip code{font-family:monospace;font-weight:bold}.jqplot-target{position:relative;color:#222;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em}.jqplot-axis{font-size:.75em}.jqplot-xaxis{margin-top:10px}.jqplot-x2axis{margin-bottom:10px}.jqplot-yaxis{margin-left:10px}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-right:10px;margin-left:10px}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre}.jqplot-xaxis-tick{top:0;right:15px;vertical-align:top}.jqplot-x2axis-tick{bottom:0;right:15px;vertical-align:bottom}.jqplot-yaxis-tick{left:0;top:15px;text-align:left}.jqplot-yaxis-tick.jqplot-breakTick{left:-20px;margin-left:0;padding:1px 5px 1px;z-index:2;font-size:1.5em}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{right:0;top:15px;text-align:right}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute}.jqplot-yaxis-label{margin-left:10px;font-size:11pt;position:absolute}.jqplot-yMidAxis-label{font-size:11pt;position:absolute}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-right:10px;position:absolute}.jqplot-meterGauge-tick{font-size:.75em;color:#999}.jqplot-meterGauge-label{font-size:1em;color:#999}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-right:12px;margin-left:12px;background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}table.jqplot-cursor-legend{background-color:rgba(255,255,255,.6);border:1px solid #ccc;position:absolute;font-size:.75em}td.jqplot-table-legend{vertical-align:middle}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-right-width:6px;border-left-width:6px;border-top-style:solid;border-bottom-style:solid;border-right-style:solid;border-left-style:solid}.jqplot-title{top:0;right:0;padding-bottom:.5em;font-size:1.2em}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em}.jqplot-cursor-tooltip,.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:1em;white-space:nowrap;background:rgba(208,208,208,.8);padding:1px}.jqplot-point-label{font-size:.75em;z-index:2}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em}.jqplot-error{text-align:center}.jqplot-error-message{position:relative;top:46%;display:inline-block}div.jqplot-bubble-label{font-size:.8em;padding-right:2px;padding-left:2px;color:#333}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(230,230,230,.7)}div.jqplot-noData-container{text-align:center;background-color:rgba(245,245,245,.3)}.icon{margin:0;margin-right:.3em;padding:0 !important;width:16px;height:16px}.icon_fulltext{width:50px;height:19px}.ic_asc_order{background-image:url("../img/asc_order.png")}.ic_b_bookmark{background-image:url("../img/b_bookmark.png")}.ic_b_browse{background-image:url("../img/b_browse.png")}.ic_b_calendar{background-image:url("../img/b_calendar.png")}.ic_b_chart{background-image:url("../img/b_chart.png")}.ic_b_close{background-image:url("../img/b_close.png")}.ic_b_column_add{background-image:url("../img/b_column_add.png")}.ic_b_comment{background-image:url("../img/b_comment.png")}.ic_b_dbstatistics{background-image:url("../img/b_dbstatistics.png")}.ic_b_deltbl{background-image:url("../img/b_deltbl.png")}.ic_b_docs{background-image:url("../img/b_docs.png")}.ic_b_docsql{background-image:url("../img/b_docsql.png")}.ic_b_drop{background-image:url("../img/b_drop.png")}.ic_b_edit{background-image:url("../img/b_edit.png")}.ic_b_empty{background-image:url("../img/b_empty.png")}.ic_b_engine{background-image:url("../img/b_engine.png")}.ic_b_event_add{background-image:url("../img/b_event_add.png")}.ic_b_events{background-image:url("../img/b_events.png")}.ic_b_export{background-image:url("../img/b_export.png")}.ic_b_favorite{background-image:url("../img/b_favorite.png")}.ic_b_find_replace{background-image:url("../img/b_find_replace.png")}.ic_b_firstpage{background-image:url("../img/b_firstpage.png")}.ic_b_ftext{background-image:url("../img/b_ftext.png")}.ic_b_globe{background-image:url("../img/b_globe.gif")}.ic_b_group{background-image:url("../img/b_group.png")}.ic_b_help{background-image:url("../img/b_help.png")}.ic_b_home{background-image:url("../img/b_home.png")}.ic_b_import{background-image:url("../img/b_import.png")}.ic_b_index{background-image:url("../img/b_index.png")}.ic_b_index_add{background-image:url("../img/b_index_add.png")}.ic_b_inline_edit{background-image:url("../img/b_inline_edit.png")}.ic_b_insrow{background-image:url("../img/b_insrow.png")}.ic_b_lastpage{background-image:url("../img/b_lastpage.png")}.ic_b_minus{background-image:url("../img/b_minus.png")}.ic_b_more{background-image:url("../img/b_more.png")}.ic_b_move{background-image:url("../img/b_move.png")}.ic_b_newdb{background-image:url("../img/b_newdb.png")}.ic_db_drop{background-image:url("../img/b_deltbl.png")}.ic_b_newtbl{background-image:url("../img/b_newtbl.png")}.ic_b_nextpage{background-image:url("../img/b_nextpage.png")}.ic_b_no_favorite{background-image:url("../img/b_no_favorite.png")}.ic_b_pdfdoc{background-image:url("../img/b_pdfdoc.png")}.ic_b_plugin{background-image:url("../img/b_plugin.png")}.ic_b_plus{background-image:url("../img/b_plus.png")}.ic_b_prevpage{background-image:url("../img/b_prevpage.png")}.ic_b_primary{background-image:url("../img/b_primary.png")}.ic_b_print{background-image:url("../img/b_print.png")}.ic_b_props{background-image:url("../img/b_props.png")}.ic_b_relations{background-image:url("../img/b_relations.png")}.ic_b_report{background-image:url("../img/b_report.png")}.ic_b_rename{background-image:url("../img/b_rename.svg")}.ic_b_routine_add{background-image:url("../img/b_routine_add.png")}.ic_b_routines{background-image:url("../img/b_routines.png")}.ic_b_save{background-image:url("../img/b_save.png")}.ic_b_saveimage{background-image:url("../img/b_saveimage.png")}.ic_b_sbrowse{background-image:url("../img/b_sbrowse.png")}.ic_b_sdb{background-image:url("../img/b_sdb.png");width:10px;height:10px}.ic_b_search{background-image:url("../img/b_search.png")}.ic_b_select{background-image:url("../img/b_select.png")}.ic_b_snewtbl{background-image:url("../img/b_snewtbl.png")}.ic_b_spatial{background-image:url("../img/b_spatial.png")}.ic_b_sql{background-image:url("../img/b_sql.png")}.ic_b_sqldoc{background-image:url("../img/b_sqldoc.png")}.ic_b_sqlhelp{background-image:url("../img/b_sqlhelp.png")}.ic_b_table_add{background-image:url("../img/b_table_add.png")}.ic_b_tblanalyse{background-image:url("../img/b_tblanalyse.png")}.ic_b_tblexport{background-image:url("../img/b_tblexport.png")}.ic_b_tblimport{background-image:url("../img/b_tblimport.png")}.ic_b_tblops{background-image:url("../img/b_tblops.png")}.ic_b_tbloptimize{background-image:url("../img/b_tbloptimize.png")}.ic_b_tipp{background-image:url("../img/b_tipp.png")}.ic_b_trigger_add{background-image:url("../img/b_trigger_add.png")}.ic_b_triggers{background-image:url("../img/b_triggers.png")}.ic_b_undo{background-image:url("../img/b_undo.png")}.ic_b_unique{background-image:url("../img/b_unique.png")}.ic_b_usradd{background-image:url("../img/b_usradd.png")}.ic_b_usrcheck{background-image:url("../img/b_usrcheck.png")}.ic_b_usrdrop{background-image:url("../img/b_usrdrop.png")}.ic_b_usredit{background-image:url("../img/b_usredit.png")}.ic_b_usrlist{background-image:url("../img/b_usrlist.png")}.ic_b_versions{background-image:url("../img/b_versions.png")}.ic_b_view{background-image:url("../img/b_view.png")}.ic_b_view_add{background-image:url("../img/b_view_add.png")}.ic_b_views{background-image:url("../img/b_views.png")}.ic_b_left{background-image:url("../img/b_left.png")}.ic_b_right{background-image:url("../img/b_right.png")}.ic_bd_browse{background-image:url("../img/bd_browse.png")}.ic_bd_deltbl{background-image:url("../img/bd_deltbl.png")}.ic_bd_drop{background-image:url("../img/bd_drop.png")}.ic_bd_edit{background-image:url("../img/bd_edit.png")}.ic_bd_empty{background-image:url("../img/bd_empty.png")}.ic_bd_export{background-image:url("../img/bd_export.png")}.ic_bd_firstpage{background-image:url("../img/bd_firstpage.png")}.ic_bd_ftext{background-image:url("../img/bd_ftext.png")}.ic_bd_index{background-image:url("../img/bd_index.png")}.ic_bd_insrow{background-image:url("../img/bd_insrow.png")}.ic_bd_lastpage{background-image:url("../img/bd_lastpage.png")}.ic_bd_nextpage{background-image:url("../img/bd_nextpage.png")}.ic_bd_prevpage{background-image:url("../img/bd_prevpage.png")}.ic_bd_primary{background-image:url("../img/bd_primary.png")}.ic_bd_routine_add{background-image:url("../img/bd_routine_add.png")}.ic_bd_sbrowse{background-image:url("../img/bd_sbrowse.png")}.ic_bd_select{background-image:url("../img/bd_select.png")}.ic_bd_spatial{background-image:url("../img/bd_spatial.png")}.ic_bd_unique{background-image:url("../img/bd_unique.png")}.ic_centralColumns{background-image:url("../img/centralColumns.png")}.ic_centralColumns_add{background-image:url("../img/centralColumns_add.png")}.ic_centralColumns_delete{background-image:url("../img/centralColumns_delete.png")}.ic_col_drop{background-image:url("../img/col_drop.png")}.ic_console{background-image:url("../img/console.png")}.ic_database{background-image:url("../img/database.png")}.ic_eye{background-image:url("../img/eye.png")}.ic_eye_grey{background-image:url("../img/eye_grey.png")}.ic_hide{background-image:url("../img/hide.png")}.ic_item{background-image:url("../img/item.png");width:9px;height:9px}.ic_lightbulb{background-image:url("../img/lightbulb.png")}.ic_lightbulb_off{background-image:url("../img/lightbulb_off.png")}.ic_more{background-image:url("../img/more.png");width:13px}.ic_new_data{background-image:url("../img/new_data.png")}.ic_new_data_hovered{background-image:url("../img/new_data_hovered.png")}.ic_new_data_selected{background-image:url("../img/new_data_selected.png")}.ic_new_data_selected_hovered{background-image:url("../img/new_data_selected_hovered.png")}.ic_new_struct{background-image:url("../img/new_struct.png")}.ic_new_struct_hovered{background-image:url("../img/new_struct_hovered.png")}.ic_new_struct_selected{background-image:url("../img/new_struct_selected.png")}.ic_new_struct_selected_hovered{background-image:url("../img/new_struct_selected_hovered.png")}.ic_normalize{background-image:url("../img/normalize.png")}.ic_pause{background-image:url("../img/pause.png")}.ic_php_sym{background-image:url("../img/php_sym.png")}.ic_play{background-image:url("../img/play.png")}.ic_s_asc{background-image:url("../img/s_asc.png")}.ic_s_asci{background-image:url("../img/s_asci.png")}.ic_s_attention{background-image:url("../img/s_attention.png")}.ic_s_cancel{background-image:url("../img/s_cancel.png")}.ic_s_cancel2{background-image:url("../img/s_cancel2.png")}.ic_s_cog{background-image:url("../img/s_cog.png")}.ic_s_db{background-image:url("../img/s_db.png")}.ic_s_desc{background-image:url("../img/s_desc.png")}.ic_s_error{background-image:url("../img/s_error.png")}.ic_s_host{background-image:url("../img/s_host.png")}.ic_s_info{background-image:url("../img/s_info.png")}.ic_s_lang{background-image:url("../img/s_lang.png")}.ic_s_link{background-image:url("../img/s_link.png")}.ic_s_lock{background-image:url("../img/s_lock.png")}.ic_s_unlock{background-image:url("../img/lock_open.png")}.ic_s_loggoff{background-image:url("../img/s_loggoff.png")}.ic_s_notice{background-image:url("../img/s_notice.png")}.ic_s_okay{background-image:url("../img/s_okay.png")}.ic_s_passwd{background-image:url("../img/s_passwd.png")}.ic_s_process{background-image:url("../img/s_process.png")}.ic_s_really{background-image:url("../img/s_really.png");width:11px;height:11px}.ic_s_reload{background-image:url("../img/s_reload.png")}.ic_s_replication{background-image:url("../img/s_replication.png")}.ic_s_rights{background-image:url("../img/s_rights.png")}.ic_s_sortable{background-image:url("../img/s_sortable.png")}.ic_s_status{background-image:url("../img/s_status.png")}.ic_s_success{background-image:url("../img/s_success.png")}.ic_s_sync{background-image:url("../img/s_sync.png")}.ic_s_tbl{background-image:url("../img/s_tbl.png")}.ic_s_theme{background-image:url("../img/s_theme.png")}.ic_s_top{background-image:url("../img/s_top.png")}.ic_s_unlink{background-image:url("../img/s_unlink.png")}.ic_s_vars{background-image:url("../img/s_vars.png")}.ic_s_views{background-image:url("../img/s_views.png")}.ic_show{background-image:url("../img/show.png")}.ic_window-new{background-image:url("../img/window-new.png")}.ic_ajax_clock_small{background-image:url("../img/ajax_clock_small.gif")}.ic_s_partialtext{background-image:url("../img/s_partialtext.png")}.ic_s_fulltext{background-image:url("../img/s_fulltext.png")}body{text-align:right}h1,.h1{font-weight:bold}h2,.h2{font-weight:normal;text-shadow:0 1px 0 #fff;padding:10px 3px 10px 0;color:#777}h3,.h3{font-weight:bold}input,select{font-size:1em}textarea{font-family:monospace;font-size:1.2em}.table th,.table td{text-shadow:0 1px 0 #fff;vertical-align:middle}.table th{text-align:right}.table td{touch-action:manipulation}.table thead th{border-left:1px solid #fff;background-image:linear-gradient(#fff, #ccc)}.table-hover tbody tr:hover{background:linear-gradient(#ced6df, #b6c6d7)}@media only screen and (min-width: 768px){.table th.position-sticky{top:60px}}select#fieldsSelect,textarea#sqlquery{margin:0;height:20rem}.btn-primary,.btn-outline-primary{font-weight:700}.btn-primary,.btn-secondary{border-color:#aaa;text-shadow:0 1px 0 #fff;background-image:linear-gradient(#f8f8f8, #d8d8d8)}.btn-primary:hover,.btn-secondary:hover{background-image:linear-gradient(#fff, #ddd)}.btn-outline-primary,.btn-outline-secondary{color:#444;border-color:#aaa}.nav-pills .nav-link{margin-right:0;margin-left:6px;padding:4px 10px;font-weight:bold;background:#f2f2f2;color:#235a81;border:1px solid #ddd;border-radius:20px}.nav-pills .nav-link:hover{background-color:#e5e5e5;border-radius:.3em}.nav-pills .nav-link img{margin-left:.5em;vertical-align:-3px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{background-color:#fff;color:#235a81;border-radius:.3em}.nav-tabs{font-weight:bold}.nav-tabs .nav-link{background-color:#f2f2f2;color:#555;border-color:#d5d5d5 #d5d5d5 #aaa;margin-left:.4em;padding:7px 10px}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{background-color:#e5e5e5}.nav-tabs .nav-link.active:hover,.nav-tabs .nav-link.active:focus,.nav-tabs .nav-item.show .nav-link:hover,.nav-tabs .nav-item.show .nav-link:focus{background-color:#fff}.navbar.bg-light{background:linear-gradient(#fff, #dcdcdc)}.navbar-nav{font-weight:bold}.navbar-nav .icon{margin-left:.5em;vertical-align:-3px}.navbar-nav .nav-item{background:linear-gradient(#fff, #dcdcdc);border-left:1px solid #fff;border-right:1px solid #ccc;border-bottom:1px solid #ccc}.navbar-nav .nav-item:first-child{border-right:0}.navbar-nav .nav-item:hover{background:linear-gradient(#fff, #e5e5e5)}.navbar-nav .nav-item.active{background:#fff;border-bottom:0}.card{margin-top:2rem;margin-bottom:.5rem}.card>.card-header+.card-body{padding-top:0}.card,.card-footer{text-shadow:-1px 1px 2px #fff;box-shadow:-1px 1px 2px #fff inset}.card-header{position:relative;top:-1rem;margin:0 5px;width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:100%;font-weight:bold;padding:5px 10px;border:1px solid #aaa;font-size:1em;box-shadow:-3px 3px 15px #bbb}.card-header,.card-header:first-child{border-radius:2px}.card-footer{color:#000;background:#d3dce3;padding:.5em}#maincontainer .card-header{position:static;width:auto;margin:0;border:none}#maincontainer .card-header:first-child{border-radius:calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0}#maincontainer .card{background-color:#f3f3f3;border:1px solid #999;box-shadow:-2px 2px 5px #ccc}#maincontainer .card>.card-header+.card-body{padding-top:1rem}#maincontainer .card-header{padding:.1em 1rem;background-color:#bbb;color:#fff;font-size:1.6em;font-weight:normal;text-shadow:0 1px 0 #777;box-shadow:-1px 1px 15px #999 inset}.breadcrumb-navbar{padding:.1rem 2.2em;margin-bottom:0;background-color:#888}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-right:.5rem}.breadcrumb-navbar .breadcrumb-item .icon{margin:0}.breadcrumb-navbar{text-shadow:0 1px 0 #000}.breadcrumb-navbar .breadcrumb-item+.breadcrumb-comment{padding-right:.5rem}.breadcrumb-navbar .breadcrumb-item a{color:#fff}.breadcrumb-navbar .breadcrumb-comment{color:#d6d6d6;font-weight:bold;font-style:italic;text-shadow:none}.page-link{background-image:linear-gradient(#fff, #e0e0e0)}.page-link:hover{text-decoration:underline}.page-item.active .page-link{background-image:linear-gradient(#bbb, #fff)}.page-item.disabled .page-link{background-image:none}.alert{text-align:right;box-shadow:0 1px 1px #fff inset;background-position:99% 50% ;padding:10px 10px 10px 10px}.alert a{text-decoration:underline}.alert h1,.alert .h1{border-bottom:2px solid}.alert-primary{color:#000;background-color:#e8eef1;background-image:none;border-color:#3a6c7e}.alert-primary h1,.alert-primary .h1{border-color:#ffb10a}.alert-success{color:#000;background-color:#ebf8a4;background-image:none;border-color:#a2d246}.alert-success h1,.alert-success .h1{border-color:lime}.alert-danger{color:#000;background-color:pink;background-image:none;border-color:#333}.alert-danger h1,.alert-danger .h1{border-color:red}.result_query .alert{margin-bottom:0;border-bottom:none !important;border-bottom-right-radius:0;border-bottom-left-radius:0;padding-bottom:5px}#maincontainer .list-group{padding-right:40px;margin:1rem 0}#maincontainer .list-group-item{padding:0;display:list-item;border:none}#li_select_server.list-group-item,#li_change_password.list-group-item,#li_select_mysql_collation.list-group-item,#li_user_preferences.list-group-item,#li_select_lang.list-group-item,#li_select_theme.list-group-item{display:block;margin-right:-20px}.modal-header{background-image:linear-gradient(#f8f8f8, #d8d8d8)}@media print{.hide{display:none}body,table,th,td{color:#000;background-color:#fff;font-size:12px}a:link{color:#000;text-decoration:none}img{border:0}table,th,td{border:.1em solid #000;background-color:#fff}table{border-collapse:collapse;border-spacing:.2em}thead{border-collapse:collapse;border-spacing:.2em;border:.1em solid #000;font-weight:900}th,td{padding:.2em}thead th{font-weight:bold;background-color:#e5e5e5;border:.1em solid #000}#page_content{position:absolute;right:0;top:0;width:95%;float:none}.sqlOuter{color:#000;background-color:#000}.cDrop,.cEdit,.cList,.cCpy,.cPointer{display:none}table tbody:first-of-type tr:nth-child(odd){background:#fff}table tbody:first-of-type tr:nth-child(odd) th{background:#fff}table tbody:first-of-type tr:nth-child(even){background:#dfdfdf}table tbody:first-of-type tr:nth-child(even) th{background:#dfdfdf}.column_attribute{font-size:100%}} -/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRoZW1lLmNzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fcm9vdC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19yZWJvb3Quc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy92ZW5kb3IvX3Jmcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL192YXJpYWJsZXMuc2NzcyIsIi4uL3Njc3MvX3ZhcmlhYmxlcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYm9yZGVyLXJhZGl1cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL190eXBlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19saXN0cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19jb250YWluZXJzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19jb250YWluZXIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2dyaWQuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdGFibGVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL190YWJsZS12YXJpYW50cy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19sYWJlbHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS10ZXh0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY29udHJvbC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fYm94LXNoYWRvdy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fZ3JhZGllbnRzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tc2VsZWN0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvZm9ybXMvX2Zvcm0tY2hlY2suc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9fZm9ybS1yYW5nZS5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2Zvcm1zL19mbG9hdGluZy1sYWJlbHMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9mb3Jtcy9faW5wdXQtZ3JvdXAuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2Zvcm1zLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2J1dHRvbnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX2J1dHRvbnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fdHJhbnNpdGlvbnMuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fZHJvcGRvd24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYnV0dG9uLWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX25hdi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19uYXZiYXIuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fY2FyZC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19hY2NvcmRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9fYnJlYWRjcnVtYi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19wYWdpbmF0aW9uLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2JhZGdlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2FsZXJ0LnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19hbGVydC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19saXN0LWdyb3VwLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX2Nsb3NlLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvX21vZGFsLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvbWl4aW5zL19iYWNrZHJvcC5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL19zcGlubmVycy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fY2xlYXJmaXguc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19jb2xvcmVkLWxpbmtzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fcmF0aW8uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL19wb3NpdGlvbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3N0YWNrcy5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL2hlbHBlcnMvX3Zpc3VhbGx5LWhpZGRlbi5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdmlzdWFsbHktaGlkZGVuLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvaGVscGVycy9fc3RyZXRjaGVkLWxpbmsuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL190ZXh0LXRydW5jYXRpb24uc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9taXhpbnMvX3RleHQtdHJ1bmNhdGUuc2NzcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvc2Nzcy9oZWxwZXJzL192ci5zY3NzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9zY3NzL21peGlucy9fdXRpbGl0aWVzLnNjc3MiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL3Njc3MvdXRpbGl0aWVzL19hcGkuc2NzcyIsIi4uL3Njc3MvX2NvbW1vbi5zY3NzIiwiLi4vc2Nzcy9fZW51bS1lZGl0b3Iuc2NzcyIsIi4uL3Njc3MvX2dpcy5zY3NzIiwiLi4vc2Nzcy9fbmF2aWdhdGlvbi5zY3NzIiwiLi4vc2Nzcy9fZGVzaWduZXIuc2NzcyIsIi4uL3Njc3MvX2NvZGVtaXJyb3Iuc2NzcyIsIi4uL3Njc3MvX2pxcGxvdC5zY3NzIiwiLi4vc2Nzcy9faWNvbnMuc2NzcyIsIi4uL3Njc3MvX3JlYm9vdC5zY3NzIiwiLi4vc2Nzcy9fdGFibGVzLnNjc3MiLCIuLi9zY3NzL19mb3Jtcy5zY3NzIiwiLi4vc2Nzcy9fYnV0dG9ucy5zY3NzIiwiLi4vc2Nzcy9fbmF2LnNjc3MiLCIuLi9zY3NzL19uYXZiYXIuc2NzcyIsIi4uL3Njc3MvX2NhcmQuc2NzcyIsIi4uLy4uL2Jvb3RzdHJhcC9zY3NzL19icmVhZGNydW1iLnNjc3MiLCIuLi9zY3NzL19icmVhZGNydW1iLnNjc3MiLCIuLi9zY3NzL19wYWdpbmF0aW9uLnNjc3MiLCIuLi9zY3NzL19hbGVydC5zY3NzIiwiLi4vc2Nzcy9fbGlzdC1ncm91cC5zY3NzIiwiLi4vc2Nzcy9fbW9kYWwuc2NzcyIsIi4uL3Njc3MvX3ByaW50LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUNBQSxrQkFRSSxDQUFBLG9CQUFBLENBQUEsb0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGlCQUFBLENBQUEsb0JBQUEsQ0FBQSxvQkFBQSxDQUFBLG1CQUFBLENBQUEsa0JBQUEsQ0FBQSxrQkFBQSxDQUFBLGdCQUFBLENBQUEsa0JBQUEsQ0FBQSx1QkFBQSxDQUFBLHNCQUlBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLHNCQUFBLENBQUEsc0JBQUEsQ0FBQSxzQkFBQSxDQUFBLGtCQUlBLENBQUEsb0JBQUEsQ0FBQSxxQkFBQSxDQUFBLGtCQUFBLENBQUEscUJBQUEsQ0FBQSxvQkFBQSxDQUFBLG1CQUFBLENBQUEsa0JBQUEsQ0FBQSwrQkFJQSxDQUFBLGlDQUFBLENBQUEsNkJBQUEsQ0FBQSwyQkFBQSxDQUFBLDZCQUFBLENBQUEsNEJBQUEsQ0FBQSw2QkFBQSxD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UUFQSixtQkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSixzQkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHNCQU9JLENBQUEsV0FQSixzQkFPSSxDQUFBLFNBUEosd0JBT0ksQ0FBQSx5QkFBQSxDQUFBLFNBUEosNkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFNBUEosNkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFlBUEosMkJBT0ksQ0FBQSw0QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSwwQkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMkJBT0ksQ0FBQSw4QkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosNEJBT0ksQ0FBQSwrQkFBQSxDQUFBLFNBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFlBUEosMEJBT0ksQ0FBQSw2QkFBQSxDQUFBLFNBUEosdUJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFlBUEosMEJBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxZQVBKLDJCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsWUFQSiw2QkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFlBUEosNEJBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSixnQ0FPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSixnQ0FPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDBCQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxlQVBKLDJCQU9JLENBQUEsYUFQSiwwQkFPSSxDQUFBLGdCQVBKLDRCQU9JLENBQUEsQ0FBQSx5QmhE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T0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwyQkFPSSxDQUFBLFNBUEosMEJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFlBUEosMEJBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxZQVBKLDJCQU9JLENBQUEsU0FQSiwwQkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsWUFQSiw2QkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSiw0QkFPSSxDQUFBLFlBUEosNEJBT0ksQ0FBQSxRQVBKLG9CQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosd0JBT0ksQ0FBQSxRQVBKLHVCQU9JLENBQUEsUUFQSix5QkFPSSxDQUFBLFFBUEosdUJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsMEJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLDhCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsMkJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLDZCQU9JLENBQUEsZ0NBQUEsQ0FBQSxTQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSiw2QkFPSSxDQUFBLFNBUEosMkJBT0ksQ0FBQSxTQVBKLHlCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxTQVBKLDRCQU9JLENBQUEsU0FQSiw4QkFPSSxDQUFBLFNBUEosNEJBT0ksQ0FBQSxTQVBKLDJCQU9JLENBQUEsU0FQSixnQ0FPSSxDQUFBLFNBUEosK0JBT0ksQ0FBQSxTQVBKLDhCQU9JLENBQUEsU0FQSixnQ0FPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDBCQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosOEJBT0ksQ0FBQSxTQVBKLDZCQU9JLENBQUEsU0FQSiwrQkFPSSxDQUFBLFNBUEosNkJBT0ksQ0FBQSxlQVBKLDJCQU9JLENBQUEsYUFQSiwwQkFPSSxDQUFBLGdCQVBKLDRCQU9JLENBQUEsQ0FBQSwwQmhEUFIsaUJBQUEsc0JnRE9RLENBQUEsZUFQSixxQkFPSSxDQUFBLGdCQVBKLHFCQU9JLENBQUEsY0FQSix5QkFPSSxDQUFBLG9CQVBKLCtCQU9JLENBQUEsYUFQSix3QkFPSSxDQUFBLFlBUEosdUJBT0ksQ0FBQSxhQVBKLHdCQU9JLENBQUEsaUJBUEosNEJBT0ksQ0FBQSxrQkFQSiw2QkFPSSxDQUFBLFlBUEosdUJBT0ksQ0FBQSxtQkFQSiw4QkFPSSxDQUFBLFlBUEosdUJBT0ksQ0FBQSxlQVBKLHdCQU9JLENBQUEsY0FQSiw2QkFPSSxDQUFBLGlCQVBKLGdDQU9JLENBQUEsc0JBUEoscUNBT0ksQ0FBQSx5QkFQSix3Q0FPSSxDQUFBLGlCQVBKLHNCQU9JLENBQUEsaUJBUEosc0JBT0ksQ0FBQSxtQkFQSix3QkFPSSxDQUFBLG1CQVBKLHdCQU9JLENBQUEsZUFQSix5QkFPSSxDQUFBLGlCQVBKLDJCQU9JLENBQUEsdUJBUEosaUNBT0ksQ0FBQSxXQVBKLGdCQU9JLENBQUEsV0FQSixxQkFPSSxDQUFBLFdBUEosb0JBT0ksQ0FBQSxXQVBKLG1CQU9JLENBQUEsV0FQSixxQkFPSSxDQUFBLFdBUEosbUJBT0ksQ0FBQSwyQkFQSixxQ0FPSSxDQUFBLHlCQVBKLG1DQU9JLENBQUEsNEJBUEosaUNBT0ksQ0FBQSw2QkFQSix3Q0FPSSxDQUFBLDRCQVBKLHVDQU9JLENBQUEsNEJBUEosdUNBT0ksQ0FBQSx1QkFQSixpQ0FPSSxDQUFBLHFCQVBKLCtCQU9JLENBQUEsd0JBUEosNkJBT0ksQ0FBQSwwQkFQSiwrQkFPSSxDQUFBLHlCQVBKLDhCQU9JLENBQUEseUJBUEosbUNBT0ksQ0FBQSx1QkFQSixpQ0FPSSxDQUFBLDBCQVBKLCtCQU9JLENBQUEsMkJBUEosc0NBT0ksQ0FBQSwwQkFQSixxQ0FPSSxDQUFBLDJCQVBKLGdDQU9JLENBQUEscUJBUEosMEJBT0ksQ0FBQSxzQkFQSixnQ0FPSSxDQUFBLG9CQVBKLDhCQU9JLENBQUEsdUJBUEosNEJBT0ksQ0FBQSx5QkFQSiw4QkFPSSxDQUFBLHdCQVBKLDZCQU9JLENBQUEsaUJBUEosbUJBT0ksQ0FBQSxhQVBKLGtCQU9JLENBQUEsYUFQSixrQkFPSSxDQUFBLGFBUEosa0JBT0ksQ0FBQSxhQVBKLGtCQU9JLENBQUEsYUFQSixrQkFPSSxDQUFBLGFBUEosa0JBT0ksQ0FBQSxnQkFQSixrQkFPSSxDQUFBLFNBUEosbUJBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSix1QkFPSSxDQUFBLFNBUEosc0JBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSixzQkFPSSxDQUFBLFlBUEosc0JBT0ksQ0FBQSxVQVBKLHdCQU9JLENBQUEseUJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsNkJBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsNEJBQUEsQ0FBQSxVQVBKLDZCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsNEJBQUEsQ0FBQSxhQVBKLDJCQU9JLENBQUEsNEJBQUEsQ0FBQSxVQVBKLHVCQU9JLENBQUEsMEJBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxVQVBKLDJCQU9JLENBQUEsOEJBQUEsQ0FBQSxVQVBKLDBCQU9JLENBQUEsNkJBQUEsQ0FBQSxVQVBKLDRCQU9JLENBQUEsK0JBQUEsQ0FBQSxVQVBKLDBCQU9JLENBQUEsNkJBQUEsQ0FBQSxhQVBKLDBCQU9JLENBQUEsNkJBQUEsQ0FBQSxVQVBKLHVCQU9JLENBQUEsVUFQSiw0QkFPSSxDQUFBLFVBUEosMkJBT0ksQ0FBQSxVQVBKLDBCQU9JLENBQUEsVUFQSiw0QkFPSSxDQUFBLFVBUEosMEJBT0ksQ0FBQSxhQVBKLDBCQU9JLENBQUEsVUFQSix3QkFPSSxDQUFBLFVBUEosNkJBT0ksQ0FBQSxVQVBKLDRCQU9JLENBQUEsVUFQSiwyQkFPSSxDQUFBLFVBUEosNkJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsYUFQSiwyQkFPSSxDQUFBLFVBUEosMEJBT0ksQ0FBQSxVQVBKLCtCQU9JLENBQUEsVUFQSiw4QkFPSSxDQUFBLFVBUEosNkJBT0ksQ0FBQSxVQVBKLCtCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLGFBUEosNkJBT0ksQ0FBQSxVQVBKLHlCQU9JLENBQUEsVUFQSiw4QkFPSSxDQUFBLFVBUEosNkJBT0ksQ0FBQSxVQVBKLDRCQU9JLENBQUEsVUFQSiw4QkFPSSxDQUFBLFVBUEosNEJBT0ksQ0FBQSxhQVBKLDRCQU9JLENBQUEsU0FQSixvQkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLHdCQU9JLENBQUEsU0FQSix1QkFPSSxDQUFBLFNBUEoseUJBT0ksQ0FBQSxTQVBKLHVCQU9JLENBQUEsVUFQSix5QkFPSSxDQUFBLDBCQUFBLENBQUEsVUFQSiw4QkFPSSxDQUFBLCtCQUFBLENBQUEsVUFQSiw2QkFPSSxDQUFBLDhCQUFBLENBQUEsVUFQSiw0QkFPSSxDQUFBLDZCQUFBLENBQUEsVUFQSiw4QkFPSSxDQUFBLCtCQUFBLENBQUEsVUFQSiw0QkFPSSxDQUFBLDZCQUFBLENBQUEsVUFQSix3QkFPSSxDQUFBLDJCQUFBLENBQUEsVUFQSiw2QkFPSSxDQUFBLGdDQUFBLENBQUEsVUFQSiw0QkFPSSxDQUFBLCtCQUFBLENBQUEsVUFQSiwyQkFPSSxDQUFBLDhCQUFBLENBQUEsVUFQSiw2QkFPSSxDQUFBLGdDQUFBLENBQUEsVUFQSiwyQkFPSSxDQUFBLDhCQUFBLENBQUEsVUFQSix3QkFPSSxDQUFBLFVBUEosNkJBT0ksQ0FBQSxVQVBKLDRCQU9JLENBQUEsVUFQSiwyQkFPSSxDQUFBLFVBUEosNkJBT0ksQ0FBQSxVQVBKLDJCQU9JLENBQUEsVUFQSix5QkFPSSxDQUFBLFVBUEosOEJBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsVUFQSiw0QkFPSSxDQUFBLFVBUEosOEJBT0ksQ0FBQSxVQVBKLDRCQU9JLENBQUEsVUFQSiwyQkFPSSxDQUFBLFVBUEosZ0NBT0ksQ0FBQSxVQVBKLCtCQU9JLENBQUEsVUFQSiw4QkFPSSxDQUFBLFVBUEosZ0NBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSiwwQkFPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDhCQU9JLENBQUEsVUFQSiw2QkFPSSxDQUFBLFVBUEosK0JBT0ksQ0FBQSxVQVBKLDZCQU9JLENBQUEsZ0JBUEosMkJBT0ksQ0FBQSxjQVBKLDBCQU9JLENBQUEsaUJBUEosNEJBT0ksQ0FBQSxDQUFBLGFDaENaLGdCRHlCUSx5QkFPSSxDQUFBLHNCQVBKLCtCQU9JLENBQUEsZUFQSix3QkFPSSxDQUFBLGNBUEosdUJBT0ksQ0FBQSxlQVBKLHdCQU9JLENBQUEsbUJBUEosNEJBT0ksQ0FBQSxvQkFQSiw2QkFPSSxDQUFBLGNBUEosdUJBT0ksQ0FBQSxxQkFQSiw4QkFPSSxDQUFBLGNBUEosdUJBT0ksQ0FBQSxDQUFBLGNFdEVaLGFBQ0UsQ0FBQSxlQUtBLFlBQ0UsQ0FBQSxtQkFHRixjQUNFLENBQUEsTUFJSixlQUNFLENBQUEsdUNBR0Ysb0JBRUUsQ0FBQSxhQUNBLENBQUEsY0FDQSxDQUFBLFlBQ0EsQ0FBQSxrREFJQSx5QkFFRSxDQUFBLGFBQ0EsQ0FBQSwwQkFJSix5QkFDRSxDQUFBLGFBQ0EsQ0FBQSxJQUdGLGlCQUNFLENBQUEsVUFFQSxpQkFDRSxDQUFBLFdBQ0EsQ0FBQSxNQUlKLFFBQ0UsQ0FBQSxHQUdGLFV4RDlCYSxDQUFBLHFCQUFBLENBQUEsUXdEaUNYLENBQUEsVUFDQSxDQUFBLEtBR0YsU0FDRSxDQUFBLFFBQ0EsQ0FBQSxjQUNBLENBQUEsYUFHRixZQUdFLENBQUEsMEVBSUEsaUJBSUUsQ0FBQSxlQUNBLENBQUEscUJBQ0EsQ0FBQSxVQUNBLENBQUEsV0FDQSxDQUFBLCtLQUdGLFVBS0UsQ0FBQSx5QkFJSixVQUNFLENBQUEsMEVBSUEsa0JBSUUsQ0FBQSxPQUlKLGtCQUNFLENBQUEsa0hBSUEsa0JBSUUsQ0FBQSxlQUNBLENBQUEsMElBRUEsa0JBQ0UsQ0FBQSxlQUNBLENBQUEsaUJBS04sa0JBQ0UsQ0FBQSxlQUNBLENBQUEsdUJBRUEsa0JBQ0UsQ0FBQSxlQUNBLENBQUEsOENBTUEsd0JBRUUsQ0FBQSxlQUNBLENBQUEsc0RBS0Ysd0JBRUUsQ0FBQSxlQUNBLENBQUEsa0RBS0Ysd0JBRUUsQ0FBQSxlQUNBLENBQUEsOENBS0Ysd0JBRUUsQ0FBQSxlQUNBLENBQUEsYUFLTix3QkFDRSxDQUFBLGVBQ0EsQ0FBQSxrR0FJQSx5QkFJRSxDQUFBLFNBSUosZ0JBQ0UsQ0FBQSxVQUNBLENBQUEsY0FFQSxVQUNFLENBQUEsbUJBR0YsU0FDRSxDQUFBLGNBSUosY0FDRSxDQUFBLHlCQUNBLENBQUEscUJBQ0EsQ0FBQSxZQUNBLENBQUEsZUFDQSxDQUFBLG1DQUNBLENBQUEsa0NBQ0EsQ0FBQSw0QkFJQSxXQUNFLENBQUEscUJBQ0EsQ0FBQSxrQkFDQSxDQUFBLHFCQUdGLFVBQ0UsQ0FBQSxnQkFDQSxDQUFBLFVBQ0EsQ0FBQSxnQkFDQSxDQUFBLGlCQUNBLENBQUEscUJBQ0EsQ0FBQSxxQkFDQSxDQUFBLGNBQ0EsQ0FBQSw2QkFDQSxDQUFBLGFBQ0EsQ0FBQSxhQUNBLENBQUEsT0FLSixjQUNFLENBQUEsV0FJRixrQkFDRSxDQUFBLFdBR0YscUJBRUUsQ0FBQSw4REFJQSxtQkFFRSxDQUFBLE9BSUosaUJBQ0UsQ0FBQSxxQkFDQSxDQUFBLFVBQ0EsQ0FBQSxXQUNBLENBQUEsZUFDQSxDQUFBLHlCQUVBLFVBQ0UsQ0FBQSxpQkFHRix5Q0FDRSxDQUFBLFlBS0osVUFDRSxDQUFBLFlBR0YsZUFDRSxDQUFBLFdBR0YsVUFDRSxDQUFBLHdCQUNBLENBQUEsVUFHRixZQUNFLENBQUEsWUFNQSxDQUFBLGtCQUNBLENBQUEsWUFFQSxDQUFBLGVBQ0EsQ0FBQSxVQUNBLENBQUEsVUFDQSxDQUFBLHlCQUNBLENBQUEsWUFYQSx3QkFDRSxDQUFBLHlCQWFKLFlBQ0UsQ0FBQSxrQkFDQSxDQUFBLFlBRUEsQ0FBQSxlQUNBLENBQUEsVUFDQSxDQUFBLFVBQ0EsQ0FBQSx5QkFDQSxDQUFBLGFBR0YsV0FDRSxDQUFBLGlCQUNBLENBQUEsaUJBQ0EsQ0FBQSxjQUNBLENBQUEsMkJBSUEsV0FDRSxDQUFBLGdCQUNBLENBQUEsa0JBRUEsQ0FBQSxxQ0FJRixrQkFDRSxDQUFBLG1CQUlKLFdBQ0UsQ0FBQSw4QkFDQSxDQUFBLFdBTUYsNEJBQ0UsQ0FBQSxhQUdGLDBCQUNFLENBQUEsa0JBQ0EsQ0FBQSxhQUdGLHdCQUNFLENBQUEsa0JBQ0EsQ0FBQSwyQkFHRiwwQkFDRSxDQUFBLGtCQUlGLDBCQUVFLENBQUEsUUFRRixpQkFDRSxDQUFBLHdCQUNBLENBQUEsZ0NBSUEsZUFFRSxDQUFBLGtCQUNBLENBQUEsT0FJSixxQnhEdlR3QixDQUFBLGN3RDJUeEIsY0FDRSxDQUFBLFdBR0YsZUFDRSxDQUFBLFlBQ0EsQ0FBQSxxQkFDQSxDQUFBLFlBQ0EsQ0FBQSxxQkFDQSxDQUFBLGlCQUNBLENBQUEsaUJBR0Ysa0JBQ0UsQ0FBQSxVQUNBLENBQUEsZUFDQSxDQUFBLFlBQ0EsQ0FBQSxTQUNBLENBQUEsY0FDQSxDQUFBLGtCQUNBLENBQUEsV0FDQSxDQUFBLGlCQUNBLENBQUEsYUFDQSxDQUFBLHNCQUNBLENBQUEsWUFJRixvQkFDRSxDQUFBLDZCQUNBLENBQUEsd0JBQ0EsQ0FBQSxnQkFHRixnQkFDRSxDQUFBLGlCQUNBLENBQUEsZUFHRixnQkFDRSxDQUFBLGtDQUlGLGlCQUdFLENBQUEsY0FDQSxDQUFBLGNBR0YsVUFDRSxDQUFBLHFCQUNBLENBQUEsT0FHRixrQ0FDRSxDQUFBLGFBQ0EsQ0FBQSxVQUNBLENBQUEsZUFDQSxDQUFBLGlCQUtGLFVBQ0UsQ0FBQSxZQUdGLGFBQ0UsQ0FBQSxrQkFDQSxDQUFBLFVBQ0EsQ0FBQSxZQUdGLGdCQUNFLENBQUEsVXhEOVpTLENBQUEsa0JBRkssQ0FBQSxzQndEcWFoQixrQkFFRSxDQUFBLFV4RHJhUyxDQUFBLGtCQUZLLENBQUEsOER3RDZhZCxVQUdFLENBQUEsd0RBS0YsVUFHRSxDQUFBLDhEQUtGLFVBR0UsQ0FBQSwwREFJSixTQUdFLENBQUEsVUFJRixVQUNFLENBQUEsd0RBR0UsVUFHRSxDQUFBLGtCQUdGLFVBQ0UsQ0FBQSxvQkFDQSxDQUFBLFVBS04sb0JBQ0UsQ0FBQSxhQUdGLFlBQ0UsQ0FBQSxlQU1GLGdCQUNFLENBQUEsaUJBQ0EsQ0FBQSwyREFFQSxhQUVFLENBQUEsaUJBQ0EsQ0FBQSw2QkFHRixnQkFDRSxDQUFBLFVBQ0EsQ0FBQSxhQUNBLENBQUEseUJBSUosZUFDRSxDQUFBLHlCQUdGLGFBQ0UsQ0FBQSxVQUNBLENBQUEsaUJBQ0EsQ0FBQSxlQUNBLENBQUEsV0FDQSxDQUFBLGlCQUdGLGNBQ0UsQ0FBQSxLQUNBLENBQUEsT0FDQSxDQUFBLFdBQ0EsQ0FBQSxVQUNBLENBQUEsZUFDQSxDQUFBLFdBQ0EsQ0FBQSxzQ0FHRixrQkFDRSxDQUFBLGtCQUdGLDZCQUNFLENBQUEsa0JBR0YsYUFDRSxDQUFBLGFBR0YsYUFDRSxDQUFBLGNBQ0EsQ0FBQSw0QkFHRix5QkFDRSxDQUFBLHNCQUdGLGVBQ0UsQ0FBQSx1QkFHRixVQUNFLENBQUEsWUFHRixVQUNFLENBQUEsZ0JBR0YsZ0JBQ0UsQ0FBQSxpQkFHRiw2QkFFRSxDQUFBLDZDQUtBLFFBRUUsQ0FBQSxnQkFDQSxDQUFBLG1CQUdGLGVBQ0UsQ0FBQSxhQUlKLFdBQ0UsQ0FBQSxXQUdGLGlCQUNFLENBQUEsMEJBSUYsV0FDRSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSxlQUNBLENBQUEsY0FDQSxDQUFBLGtCQU1GLGdCQUNFLENBQUEsVUFDQSxDQUFBLGdCQUdGLGNBQ0UsQ0FBQSxLQUNBLENBQUEsTUFDQSxDQUFBLFVBQ0EsQ0FBQSxlQUNBLENBQUEsb0JBR0YsY0FDRSxDQUFBLFlBQ0EsQ0FBQSw4Q0FHRixZQUVFLENBQUEsYUFHRixTQUNFLENBQUEsVUFDQSxDQUFBLG9EQUNBLENBQUEsY0FDQSxDQUFBLGtCQUdGLGlCQUNFLENBQUEsVUFDQSxDQUFBLFVBQ0EsQ0FBQSxXQUNBLENBQUEsZ0JBQ0EsQ0FBQSxpQkFDQSxDQUFBLHFCQUNBLENBQUEsVUFDQSxDQUFBLHNCQUNBLENBQUEsWUFDQSxDQUFBLGtDQUtBLFlBQ0UsQ0FBQSxrQkFDQSxDQUFBLDhCQUNBLENBQUEsbUJBQ0EsQ0FBQSxrQkFDQSxDQUFBLCtCQUdGLFdBQ0UsQ0FBQSxhQUNBLENBQUEsVUFDQSxDQUFBLGNBQ0EsQ0FBQSxlQUNBLENBQUEsaUJBQ0EsQ0FBQSxlQUNBLENBQUEsK0JBR0YsVUFDRSxDQUFBLFVBQ0EsQ0FBQSxjQUNBLENBQUEsc0NBR0YsV0FDRSxDQUFBLGFBQ0EsQ0FBQSxVQUNBLENBQUEsY0FDQSxDQUFBLGlCQUNBLENBQUEsb0xBRUEsVUFHRSxDQUFBLGNBQ0EsQ0FBQSw0Q0FHRixVQUNFLENBQUEsNkJBS04sV0FDRSxDQUFBLFNBQ0EsQ0FBQSxjQUNBLENBQUEsc0NBRUEsVUFDRSxDQUFBLG1DQUdGLGtCQUNFLENBQUEsb0NBR0YsVUFDRSxDQUFBLHFGQUlKLFdBRUUsQ0FBQSwwQ0FHRixnQkFDRSxDQUFBLGdCQU1GLHlCQUNFLENBQUEsYUFDQSxDQUFBLGNBQ0EsQ0FBQSx5REFHRixhQUNFLENBQUEsY0FDQSxDQUFBLHFCQUdGLGNBQ0UsQ0FBQSxjQUdGLFVBQ0UsQ0FBQSw2QkFHRixXQUNFLENBQUEsV0FDQSxDQUFBLFlBQ0EsQ0FBQSxnQkFDQSxDQUFBLDZFQUtFLGtCQUVFLENBQUEsY0FJSixVQUNFLENBQUEsZUFDQSxDQUFBLFlBQ0EsQ0FBQSxtQkFDQSxDQUFBLDBCQUlKLHFCQUNFLENBQUEsd0JBQ0EsQ0FBQSxpQkFDQSxDQUFBLG1CQUlBLFdBQ0UsQ0FBQSxRQUNBLENBQUEsaUNBR0Ysa0JBQ0UsQ0FBQSxXQUNBLENBQUEsYUFDQSxDQUFBLGFBSUosV0FDRSxDQUFBLGFBQ0EsQ0FBQSxrQ0FFQSxlQUVFLENBQUEsbUJBR0Ysc0JBQ0UsQ0FBQSxjQUlKLFlBQ0UsQ0FBQSxpQkFDQSxDQUFBLHFCQUNBLENBQUEsUUFDQSxDQUFBLFdBQ0EsQ0FBQSxxQkFDQSxDQUFBLFNBQ0EsQ0FBQSw0QkFDQSxDQUFBLGFBSUEsZ0JBQ0UsQ0FBQSxVQUNBLENBQUEsbUJBRUEsVUFDRSxDQUFBLHdCQUlKLGVBQ0UsQ0FBQSw4Q0FHRSxXQUNFLENBQUEsMkNBR0YsWUFDRSxDQUFBLG1DQUlKLFdBQ0UsQ0FBQSx3Q0FHRixZQUNFLENBQUEsUUFDQSxDQUFBLGdCQUNBLENBQUEsYUFLTixpQkFDRSxDQUFBLG1CQU9GLFdBQ0UsQ0FBQSxZQUNBLENBQUEsV0FDQSxDQUFBLDRDQUdGLG1CQUNFLENBQUEsVUFDQSxDQUFBLFdBQ0EsQ0FBQSxTQU1GLHVCQUNFLENBQUEsZUFJRixZQUNFLENBQUEsZ0JBS0YsYUFDRSxDQUFBLG1DQUdGLGFBQ0UsQ0FBQSxrQkFDQSxDQUFBLFVBQ0EsQ0FBQSxlQUNBLENBQUEsa0JBSUEsVUFDRSxDQUFBLGlCQUNBLENBQUEscUJBQ0EsQ0FBQSxXQUNBLENBQUEsbUJBQ0EsQ0FBQSx3QkFHRixVQUNFLENBQUEsU0FDQSxDQUFBLGFBQ0EsQ0FBQSwwQ0FRSixXQUVFLENBQUEsU0FDQSxDQUFBLGtCQUlBLG9CQUNFLENBQUEscUJBQ0EsQ0FBQSxrQkFHRixrQkFDRSxDQUFBLGlCQUlKLGlCQUNFLENBQUEsV0FDQSxDQUFBLGVBQ0EsQ0FBQSxXQUNBLENBQUEsaUJBQ0EsQ0FBQSxxQkFDQSxDQUFBLGVBQ0EsQ0FBQSx3QkFHRixrQnhEcjhCa0IsQ0FBQSx1QndEdThCaEIsQ0FBQSxZQUdGLFdBQ0UsQ0FBQSxXQUNBLENBQUEsaUJBQ0EsQ0FBQSxnQkFFQSxzQkFDRSxDQUFBLHdCQUdGLHFCQUNFLENBQUEsVUFJSixVQUNFLENBQUEsYUFDQSxDQUFBLGNBQ0EsQ0FBQSxpQkFDQSxDQUFBLFNBQ0EsQ0FBQSxlQUNBLENBQUEsZUFDQSxDQUFBLDRCQUNBLENBQUEsdUNBR0YsV0FFRSxDQUFBLElBR0YsVXhENTlCYSxDQUFBLDhCd0Q4OUJYLENBQUEsZUFDQSxDQUFBLEtBR0YsYUFDRSxDQUFBLFV4RG4rQlcsQ0FBQSxTd0RzK0JYLGFBQ0UsQ0FBQSxpQkFDQSxDQUFBLFlBQ0EsQ0FBQSxlQUNBLENBQUEsZUFDQSxDQUFBLGFBQ0EsQ0FBQSxhQUNBLENBQUEsU0FHRixhQUNFLENBQUEsV0FDQSxDQUFBLFlBQ0EsQ0FBQSxlQUNBLENBQUEsZUFDQSxDQUFBLGFBQ0EsQ0FBQSxhQUNBLENBQUEsZ0JBSUosYUFDRSxDQUFBLFdBQ0EsQ0FBQSxZQUNBLENBQUEsZUFDQSxDQUFBLGVBQ0EsQ0FBQSxhQUNBLENBQUEsYUFDQSxDQUFBLDJCQUdGLGtCeEQ3K0JTLENBQUEsZ0J3RCsrQlAsQ0FBQSw2Q0FHRixrQnhEbC9CUyxDQUFBLDZCd0R1L0JULFVBQ0UsQ0FBQSxNQUlGLFlBQ0UsQ0FBQSxhQUdGLG9CQUNFLENBQUEsU0FDQSxDQUFBLG9CQVFBLFdBQ0UsQ0FBQSxlQUNBLENBQUEsaUJBQ0EsQ0FBQSw4QkFHRixxQkFDRSxDQUFBLFdBQ0EsQ0FBQSxpQkFDQSxDQUFBLGlCQUNBLENBQUEsVXhENWlDUyxDQUFBLDZDd0QraUNULGlCQUNFLENBQUEsS0FDQSxDQUFBLE9BQ0EsQ0FBQSxXQUNBLENBQUEsOEJBSUoscUJ4RDVqQ3dCLENBQUEsT3dEOGpDdEIsQ0FBQSxXQUNBLENBQUEsVUFDQSxDQUFBLGVBQ0EsQ0FBQSxVeERsakNrQixDQUFBLGlCd0RvakNsQixDQUFBLDZDQUVBLFFBQ0UsQ0FBQSxVQUNBLENBQUEsZUFJSixlQUNFLENBQUEsc0lBS0YsV0FJRSxDQUFBLGtJQVFGLGVBSUUsQ0FBQSxvQ0FJSixlQUVFLENBQUEsbUJBTUYsS0FFRSxDQUFBLGNBQ0EsQ0FBQSxnQkFDQSxDQUFBLGdCQUNBLENBQUEsZUFDQSxDQUFBLGlCQUNBLENBQUEsV0FFQSxDQUFBLFdBQ0EsQ0FBQSxZQUVBLENBQUEsaUJBQ0EsQ0FBQSxjQUNBLENBQUEsT0FDQSxDQUFBLE1BQ0EsQ0FBQSxtREFDQSxDQUFBLDJCQUNBLENBQUEsdUJBQ0EsQ0FBQSx3QkFDQSxDQUFBLHdCQUNBLENBQUEsaUJBQ0EsQ0FBQSwwQkFDQSxDQUFBLGdCQUdGLGlCQUVFLENBQUEsVUFDQSxDQUFBLG1CQUdGLFFBQ0UsQ0FBQSxrQkFHRixZQUNFLENBQUEsY0FDQSxDQUFBLFVBQ0EsQ0FBQSxXQUNBLENBQUEsS0FDQSxDQUFBLE9BQ0EsQ0FBQSxlQUNBLENBQUEsWUFDQSxDQUFBLGVBQ0EsQ0FBQSw0QkFHRixjQUNFLENBQUEsMEJBR0YsZUFDRSxDQUFBLDhCQUdGLGNBQ0UsQ0FBQSxnQkFDQSxDQUFBLHNFQVFFLFVBRUUsQ0FBQSxRQUNBLENBQUEscUJBQ0EsQ0FBQSwyQkFHRixjQUNFLENBQUEsOEJBR0YsV0FDRSxDQUFBLGNBQ0EsQ0FBQSxtQkFJSixVQUNFLENBQUEsV0FDQSxDQUFBLFdBQ0EsQ0FBQSx1QkFHRixXQUNFLENBQUEsNkJBRUEsZ0JBQ0UsQ0FBQSxpQkFJSixRQUNFLENBQUEsY0FHRixxQkFDRSxDQUFBLG9CQUlKLFVBQ0UsQ0FBQSwyQkFFQSxTQUNFLENBQUEsV0FDQSxDQUFBLHlCQUtGLFdBQ0UsQ0FBQSx3QkFHRixlQUNFLENBQUEsUUFDQSxDQUFBLFNBQ0EsQ0FBQSx3QkFHRixrQnhEbHRDYyxDQUFBLHFCd0RvdENaLENBQUEsVXhEbHRDTyxDQUFBLGdCd0RvdENQLENBQUEsV0FDQSxDQUFBLFlBQ0EsQ0FBQSxpQkFDQSxDQUFBLG1CQU1GLFlBQ0UsQ0FBQSx5QkFDQSxDQUFBLHdCQUNBLENBQUEsc0JBR0YsWUFDRSxDQUFBLFNBQ0EsQ0FBQSxVQUNBLENBQUEsZUFDQSxDQUFBLHdCQUVBLFFBQ0UsQ0FBQSxZQUNBLENBQUEsZUFDQSxDQUFBLFlBQ0EsQ0FBQSw4QkFJRixpQkFDRSxDQUFBLGtCQUNBLENBQUEsa0JBQ0EsQ0FBQSxlQUNBLENBQUEsc0J4RC90Q2EsQ0FBQSxld0RpdUNiLENBQUEscUNBSUYscUJBQ0UsQ0FBQSxjQUNBLENBQUEsU0FDQSxDQUFBLGVBQ0EsQ0FBQSxhQUNBLENBQUEsZUFDQSxDQUFBLDJCQUdGLGdCQUNFLENBQUEsdUNBR0YsZ0JBQ0UsQ0FBQSxhQUNBLENBQUEsd0JBQ0EsQ0FBQSxVQUNBLENBQUEsV0FDQSxDQUFBLHlCQUdGLHNCQUNFLENBQUEsa0JBQ0EsQ0FBQSxnQkFDQSxDQUFBLGtCQUNBLENBQUEsd0JBQ0EsQ0FBQSxXQUNBLENBQUEsNEJBQ0EsQ0FBQSxnQkFDQSxDQUFBLCtEQUVBLGFBQ0UsQ0FBQSxrQkFDQSxDQUFBLHNCeER0d0NXLENBQUEsaUJ3RHd3Q1gsQ0FBQSxVQUNBLENBQUEseUJBSUosZ0JBQ0UsQ0FBQSxtQkFDQSxDQUFBLGtCQUNBLENBQUEsNEJBQ0EsQ0FBQSxnQkFDQSxDQUFBLG9CQUlKLFlBQ0UsQ0FBQSwyQkFHRixXQUNFLENBQUEsb0JBQ0EsQ0FBQSxrQ0FFQSxXQUNFLENBQUEsd0JBQ0EsQ0FBQSxlQUNBLENBQUEscUJBS0osZUFDRSxDQUFBLDBCQUdGLDRCQUNFLENBQUEsZ0dBSUEsd0JBR0UsQ0FBQSxXQUNBLENBQUEsa0hBRUEsd0JBQ0UsQ0FBQSxrQkFDQSxDQUFBLDBDQUtOLHdCQUVFLENBQUEsV0FDQSxDQUFBLHNEQUVBLHdCQUNFLENBQUEsa0JBQ0EsQ0FBQSxpQ0FJSixpQkFDRSxDQUFBLFVBQ0EsQ0FBQSxXQUNBLENBQUEsY0FDQSxDQUFBLGdCQUNBLENBQUEsaUJBQ0EsQ0FBQSxvQ0FHRixVQUNFLENBQUEsZ0JBSUYsaUJBQ0UsQ0FBQSx3QkFFQSxZQUNFLENBQUEsMEJBT0Ysa0J4RGwzQ0ssQ0FBQSw2QndEczNDTCxnQkFDRSxDQUFBLHVEQUlKLG1CQUVFLENBQUEsdURBR0YsaUJBRUUsQ0FBQSwyQkFHRixtQkFDRSxDQUFBLDRCQUlBLFVBQ0UsQ0FBQSxxQkFDQSxDQUFBLHFFQUVBLFVBQ0UsQ0FBQSxxQkFDQSxDQUFBLDRCQUlKLFVBQ0UsQ0FBQSxxQkFDQSxDQUFBLG9CQUtOLGNBQ0UsQ0FBQSxrQkFHRixnQkFDRSxDQUFBLGdCQUdGLGtCQUNFLENBQUEsaUJBQ0EsQ0FBQSx5QkFHRix5QkFDRSxDQURGLHNCQUNFLENBREYsaUJBQ0UsQ0FBQSxhQUdGLGlCQUNFLENBQUEscUJBQ0EsQ0FBQSxVQUNBLENBQUEsZUFDQSxDQUFBLFdBQ0EsQ0FBQSxZQUNBLENBQUEscUJBRUEsaUJBQ0UsQ0FBQSxjQUNBLENBQUEsd0JBR0YsaUJBQ0UsQ0FBQSxVQUNBLENBQUEscUJBQ0EsQ0FBQSxXQUNBLENBQUEsU0FJSixXQUNFLENBQUEsbUJBQ0EsQ0FBQSxjQUdGLGlCQUNFLENBQUEsY0FDQSxDQUFBLGNBQ0EsQ0FBQSxpQkFDQSxDQUFBLGlCQUNBLENBQUEsYUFDQSxDQUFBLGVBQ0EsQ0FBQSwyQkFDQSxDQUFBLDRCQUNBLENBQUEsa0JBQ0EsQ0FBQSx1REFFQSxTQUdFLENBQUEsaUJBQ0EsQ0FBQSxnQ0FHRixpQkFDRSxDQUFBLHNFQUVBLDBCQUVFLENBQUEsd0JBSUosVUFDRSxDQUFBLGFBQ0EsQ0FBQSx5QkFDQSxDQUFBLHlCQUdGLGFBQ0UsQ0FBQSw4QkFLRixTQUNFLENBQUEsV0FDQSxDQUFBLFNBQ0EsQ0FBQSx1QkFHRixrQkFDRSxDQUFBLHlCQUdGLGFBQ0UsQ0FBQSx5QkFJSixlQUNFLENBQUEsbUJBR0YsY0FDRSxDQUFBLFFBQ0EsQ0FBQSxVQUNBLENBQUEsZUFDQSxDQUFBLGVBR0YsYUFDRSxDQUFBLGFBQ0EsQ0FBQSxzR0FHRSxVQUdFLENBQUEscUJBQ0EsQ0FBQSxzQkFJSixVQUNFLENBQUEscUJBQ0EsQ0FBQSxlQUlKLFdBQ0UsQ0FBQSxZQUNBLENBQUEsaUJBR0YsV0FDRSxDQUFBLFlBR0YsU0FDRSxDQUFBLFFBQ0EsQ0FBQSxhQUdGLFVBQ0UsQ0FBQSxRQUNBLENBQUEsVUFHRixVQUNFLENBQUEsT0FDQSxDQUFBLFlBR0YsVUFDRSxDQUFBLFFBQ0EsQ0FBQSxTQUdGLFVBQ0UsQ0FBQSxRQUNBLENBQUEsWUFHRixVQUNFLENBQUEsUUFDQSxDQUFBLFVBR0YsVUFDRSxDQUFBLFNBQ0EsQ0FBQSxXQUdGLGlCQUNFLENBQUEsV0FDQSxDQUFBLGlCQUNBLENBQUEsaUJBQ0EsQ0FBQSxTQUNBLENBQUEsa0JBR0YsMEJBQ0UsQ0FBQSw2QkFJQSxhQUNFLENBQUEsZUFDQSxDQUFBLGNBS0YsZUFDRSxDQUFBLHlCQUdGLGFBQ0UsQ0FBQSxlQUNBLENBQUEsbUNBRUEsY0FDRSxDQUFBLDZCQUtGLGdCQUNFLENBQUEsa0JBS04sYUFDRSxDQUFBLFVBQ0EsQ0FBQSxnQkFDQSxDQUFBLGNBQ0EsQ0FBQSxNQUdGLGlCQUNFLENBQUEsTUFHRixlQUNFLENBQUEsVUFDQSxDQUFBLGdCQUNBLENBQUEsV0FDQSxDQUFBLFlBQ0EsQ0FBQSxpQkFDQSxDQUFBLHlCQUNBLENBQUEsd0JBQ0EsQ0FBQSxrQkFDQSxDQUFBLFVBR0YsV0FDVyxDQUFBLFVBQ0QsQ0FBQSxnQkFJUixDQUFBLGlCQUNBLENBQUEsd0NBQ0EsQ0FBQSxpQkFDQSxDQUFBLFNBR0YsMEJBQ0UsQ0FBQSxxQkFDQSxDQUFBLFlBQ0EsQ0FBQSxnQ0FDQSxDQUFBLDZCQUNBLENBQUEsb0NBQ0EsQ0FBQSx5QkFDQSxDQUFBLDJCQUNBLENBQUEsMEJBQ0EsQ0FBQSxXQUVBLDBCQUNFLENBQUEscUJBQ0EsQ0FBQSxPQUlKLE1BQ0UsQ0FBQSxpQkFDQSxDQUFBLEtBQ0EsQ0FBQSxTQUdGLHFDQUNFLENBQUEsY0FDQSxDQUFBLFdBQ0EsQ0FBQSxlQUNBLENBQUEsVUFDQSxDQUFBLGVBRUEscUJBQ0UsQ0FBQSxlQUlKLHFCQUNFLENBQUEsT0FHRixlQUNFLENBQUEscUJBQ0EsQ0FBQSxpQkFDQSxDQUFBLDJCQUNBLENBQUEsZ0JBQ0EsQ0FBQSxNQUNBLENBQUEsY0FDQSxDQUFBLHdCQUNBLENBQUEsaUJBRUEsc0JBQ0UsQ0FBQSxrQkFDQSxDQUFBLHVCQUVBLGVBQ0UsQ0FBQSxjQUNBLENBQUEsdUJBR0YsY0FDRSxDQUFBLGVBS04sNEJBQ0UsQ0FBQSx5QkFDQSxDQUFBLGNBQ0EsQ0FBQSxjQUNBLENBQUEsZ0JBQ0EsQ0FBQSxpQkFDQSxDQUFBLGlCQUNBLENBQUEscUJBRUEsZUFDRSxDQUFBLGVBSUosd0JBQ0UsQ0FERixxQkFDRSxDQURGLGdCQUNFLENBQUEsWUFHRixhQUNFLENBQUEsaUJBQ0EsQ0FBQSxzQ0FDQSxDQUFBLGVBRUEsUUFDRSxDQUFBLFNBQ0EsQ0FBQSxxQkFDQSxDQUFBLGtCQUNBLENBQUEsK0JBSUEsZUFDRSxDQUFBLFFBQ0EsQ0FBQSxXQUNBLENBQUEsUUFDQSxDQUFBLGlCQUNBLENBQUEsZUFDQSxDQUFBLHFDQUVBLFVBQ0UsQ0FBQSxjQUNBLENBQUEsZ0JBQ0EsQ0FBQSxzQ0FDQSxDQUFBLG1DQUlKLFVBQ0UsQ0FBQSxjQUNBLENBQUEsZ0JBQ0EsQ0FBQSxzQ0FDQSxDQUFBLHNCQUlKLFV4RG55RFcsQ0FBQSw0QndEc3lEVCxVQUNFLENBQUEsNENBQ0EsQ0FBQSxvQkFDQSxDQUFBLG1CQUlKLGFBQ0UsQ0FBQSxzQkFJSixVQUNFLENBQUEsb0JBQ0EsQ0FBQSxlQUNBLENBQUEsaUJBQ0EsQ0FBQSxZQUNBLENBQUEsV0FDQSxDQUFBLHVCQUNBLENBQUEsT0FHRixRQUNFLENBQUEsU0FDQSxDQUFBLGlCQUNBLENBQUEsd0JBRUEsZUFDRSxDQUFBLFdBQ0EsQ0FBQSxRQUNBLENBQUEsU0FDQSxDQUFBLGtCQUdGLGVBQ0UsQ0FBQSxxQkFDQSxDQUFBLGNBQ0EsQ0FBQSxpQkFDQSxDQUFBLG9EQUVBLFNBRUUsQ0FBQSx1QkFJSixVQUNFLENBQUEsY0FDQSxDQUFBLGdCQUNBLENBQUEsaUJBR0YsaUJBQ0UsQ0FBQSxpQkFDQSxDQUFBLFdBQ0EsQ0FBQSxRQUNBLENBQUEseUJBR0Ysd0VBQ0UsQ0FBQSxrQkFDQSxDQUFBLDBCQUdGLG1FQUNFLENBQUEsV0FDQSxDQUFBLGtCQUdGLGVBQ0UsQ0FBQSxVQUNBLENBQUEsaUJBQ0EsQ0FBQSxvQkFJSiw2REFDRSxDQUFBLGtCQUNBLENBQUEsb0JBSUEsa0JBQ0UsQ0FBQSx3QkFHRixXQUNFLENBQUEsZUFDQSxDQUFBLHFDQU1GLGlCQUNFLENBQUEsc0JBR0YsZ0JBQ0UsQ0FBQSx5QkFFQSxXQUNFLENBQUEsbUJBQ0EsQ0FBQSx5QkFHRix1QkFDRSxDQUFBLHNCQUlKLGFBQ0UsQ0FBQSx1QkFJSixlQUNFLENBQUEsV0FDQSxDQUFBLFFBQ0EsQ0FBQSxTQUNBLENBQUEsbUJBR0YsYUFDRSxDQUFBLHNCQUVBLGVBQ0UsQ0FBQSx5QkFFQSx1QkFDRSxDQUFBLGdCQUtOLGFBQ0UsQ0FBQSx3QkFHRix1QkFDRSxDQUFBLGtDQUdGLGFBQ0UsQ0FBQSxjQUdGLFdBQ0UsQ0FBQSxjQUlGLGtCQUNFLENBQUEsY0FDQSxDQUFBLFVBQ0EsQ0FBQSxhQUdGLGVBQ0UsQ0FBQSx5Q0FJQSxjQUNFLENBQUEsb0RBRUEsMEJBQ0UsQ0FBQSxrQ0FJSixjQUNFLENBQUEsa0JBSUosY0FDRSxDQUFBLHFCQUVBLDBCQUNFLENBQUEsbUJBS0YsVUFDRSxDQUFBLG1CQUdGLGdCQUNFLENBQUEsV0FJSixjQUNFLENBQUEsWUFHRixpQkFDRSxDQUFBLHVCQUlGLFVBQ0UsQ0FBQSxjQUNBLENBQUEsUUFDQSxDQUFBLE9BQ0EsQ0FBQSxXQUNBLENBQUEsU0FHRixXQUNFLENBQUEsYUFHRixpQkFDRSxDQUFBLGtCeERoaEVXLENBQUEsd0J3RG1oRVgsWUFDRSxDQUFBLHVCQUdGLHFCQUNFLENBQUEsc0JBR0YsaUJBQ0UsQ0FBQSxlQUNBLENBQUEseUJBQ0EsQ0FBQSxlQUNBLENBQUEsMkJBRUEscUJBQ0UsQ0FBQSxnQ0FHRixjQUNFLENBQUEsNENBRUEsb0JBQ0UsQ0FBQSwwQkFDQSxDQUFBLDBCQUNBLENBQUEsd0NBR0YsWUFDRSxDQUFBLGtFQU1KLGFBRUUsQ0FBQSxvQkFDQSxDQUFBLDBEQUtGLGFBRUUsQ0FBQSxvQkFDQSxDQUFBLDRCQUlKLGFBQ0UsQ0FBQSxvQkFDQSxDQUFBLDRGQUdGLGNBR0UsQ0FBQSw4R0FHRixlQUdFLENBQUEscUNBSUEsZUFDRSxDQUFBLDRCQUdGLGdCQUNFLENBQUEsMERBR0YsZ0JBRUUsQ0FBQSwwREFHRixVQUVFLENBQUEsc0JBSUosaUJBQ0UsQ0FBQSxlQUNBLENBQUEsbUJBQ0EsQ0FBQSx5QkFDQSxDQUFBLGVBQ0EsQ0FBQSxnQkFDQSxDQUFBLHlDQUVBLGVBQ0UsQ0FBQSxVQUNBLENBQUEsMERBRUEsZUFDRSxDQUFBLFVBQ0EsQ0FBQSx5REFHRixVQUNFLENBQUEsa0RBR0Ysb0JBQ0UsQ0FBQSw0REFHRixpQkFDRSxDQUFBLHFEQUdGLGFBQ0UsQ0FBQSxnREFLTixpQkFFRSxDQUFBLHFDQUNBLENBQUEsV0FDQSxDQUFBLHdCQUNBLENBQUEsc0JBR0YsNEJBQ0UsQ0FBQSxtQkFDQSxDQUFBLCtDQUVBLGlCQUNFLENBQUEsOEJBR0YsWUFDRSxDQUFBLGlCQUNBLENBQUEsV0FDQSxDQUFBLGtDQUtGLFlBQ0UsQ0FBQSxpQkFDQSxDQUFBLFdBQ0EsQ0FBQSxRQUNBLENBQUEsbUNBR0YsVUFDRSxDQUFBLFVBQ0EsQ0FBQSxlQUNBLENBQUEsb0NBS0YsVUFDRSxDQUFBLGdCQUNBLENBQUEsdUNBR0YsV0FDRSxDQUFBLHNDQUdGLFlBQ0UsQ0FBQSw4SEFJQSxXQUdFLENBQUEsVUFDQSxDQUFBLHNDQUlKLFVBQ0UsQ0FBQSx1Q0FHRixrQkFDRSxDQUFBLHNCQUNBLENBQUEsZUFDQSxDQUFBLHNDQUdGLGFBQ0UsQ0FBQSxlQUNBLENBQUEsb0JBQ0EsQ0FBQSxvSUFHRixZQUdFLENBQUEsMkpBSUEsWUFJRSxDQUFBLDRGQUtGLG9CQUVFLENBQUEsNEZBSUosb0JBRUUsQ0FBQSw2RkFJQSxvQkFFRSxDQUFBLCtGQUtGLG9CQUVFLENBQUEsaUdBS0Ysb0JBRUUsQ0FBQSxzQ0FJSixpQkFDRSxDQUFBLFdBQ0EsQ0FBQSxlQUNBLENBQUEscUJBQ0EsQ0FBQSwyQkFDQSxDQUFBLHFGQUdGLFFBRUUsQ0FBQSxvQkFDQSxDQUFBLGlGQUdGLFlBRUUsQ0FBQSwwQ0FHRixvQkFDRSxDQUFBLDRCQUdGLGVBQ0UsQ0FBQSxnREFJQSxZQUNFLENBQUEsc0RBR0YsYUFDRSxDQUFBLHNDQUlKLGFBQ0UsQ0FBQSxLQUNBLENBQUEsZUFDQSxDQUFBLFVBQ0EsQ0FBQSxpQkFDQSxDQUFBLDZDQUVBLGVBQ0UsQ0FBQSwrQ0FJSix5QkFDRSxDQUFBLHdCQUNBLENBQUEsMEJBSUosaUJBQ0UsQ0FBQSx3QkFHRixXQUNFLENBQUEsVUFDQSxDQUFBLGlCQUNBLENBQUEsS0FDQSxDQUFBLGVBQ0EsQ0FBQSxZQUNBLENBQUEsY0FDQSxDQUFBLFdBQ0EsQ0FBQSxtQkFHRixpQkFDRSxDQUFBLFNBQ0EsQ0FBQSxXQUNBLENBQUEsZUFDQSxDQUFBLFVBQ0EsQ0FBQSxLQUNBLENBQUEsMkJBQ0EsQ0FBQSxXQUNBLENBQUEsb0JBQ0EsQ0FBQSx3QkFFQSxRQUNFLENBQUEsZ0NBQ0EsQ0FBQSwrREFJSixZQUVFLENBQUEsbUVBSUosZUFFRSxDQUFBLDhDQUlBLGtCQUNFLENBQUEsbUJBQ0EsQ0FBQSxrQkFDQSxDQUFBLDRCQUNBLENBQUEscURBRUEsWUFDRSxDQUFBLHFCQUNBLENBQUEsc0RBSUosUUFDRSxDQUFBLGVBQ0EsQ0FBQSx3Q0FLRixvQkFDRSxDQUFBLHdDQUlBLG9CQUNFLENBQUEsK0VBR0YsWUFFRSxDQUFBLHNDQUlKLFlBQ0UsQ0FBQSxzQkFHRixlQUNFLENBQUEsa0VBR0YsYUFFRSxDQUFBLHNLQUdGLFlBSUUsQ0FBQSxvSEFJQSxZQUVFLENBQUEsaUNBR0YsVUFDRSxDQUFBLGFBQ0EsQ0FBQSxVQUNBLENBQUEsMkVBSUosVUFFRSxDQUFBLGFBQ0EsQ0FBQSxVQUNBLENBQUEsOEJBR0YsV0FDRSxDQUFBLGdHQUdGLFVBR0UsQ0FBQSxvQ0FHRixRQUNFLENBQUEsMkJBTUYscUNBQ0UsQ0FBQSwrQkFFQSxxQ0FDRSxDQUFBLDZGQUlKLFNBR0UsQ0FBQSxxQkFHRixXQUNFLENBQUEsV0FDQSxDQUFBLFVBQ0EsQ0FBQSxrQkFDQSxDQUFBLGtCQUNBLENBQUEsNkJBR0YsV0FDRSxDQUFBLGtCQU1KLFlBQ0UsQ0FBQSxjQUNBLENBQUEsS0FDQSxDQUFBLE9BQ0EsQ0FBQSxVQUNBLENBQUEseUJBQ0EsQ0FBQSxXQUNBLENBQUEsV0FDQSxDQUFBLFVBQ0EsQ0FBQSxjQUNBLENBQUEsaUJBQ0EsQ0FBQSxlQUNBLENBQUEsdUJBR0YsWUFDRSxDQUFBLGNBQ0EsQ0FBQSxRQUNBLENBQUEsU0FDQSxDQUFBLFdBQ0EsQ0FBQSxxQkFDQSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSw0QkFDQSxDQUFBLHFEQUVBLHFCQUNFLENBQUEsaUJBQ0EsQ0FBQSxZQUNBLENBQUEsZUFDQSxDQUFBLFVBQ0EsQ0FBQSxlQUNBLENBQUEsa0JBQ0EsQ0FBQSx3QkFDQSxDQUFBLG1DQUNBLENBQUEseUNBSUoscUJBQ0UsQ0FBQSxpQkFDQSxDQUFBLFlBQ0EsQ0FBQSxlQUNBLENBQUEsVUFDQSxDQUFBLGVBQ0EsQ0FBQSxrQkFDQSxDQUFBLHdCQUNBLENBQUEsbUNBQ0EsQ0FBQSwyQkFJQSxZQUNFLENBQUEsZUFDQSxDQUFBLGlCQUNBLENBQUEsb0JBQ0EsQ0FBQSw4QkFFQSxnQkFDRSxDQUFBLDRCQUNBLENBQUEsYUFDQSxDQUFBLGVBQ0EsQ0FBQSx3Q0FFQSxVQUNFLENBQUEseUVBTUosVUFDRSxDQUFBLGVBQ0EsQ0FBQSxjQUNBLENBQUEsbUVBR0YsVUFDRSxDQUFBLGVBQ0EsQ0FBQSxjQUNBLENBQUEsWUFDQSxDQUFBLG9LQUdGLGdDQUVFLENBQUEsY0FDQSxDQUFBLG1FQUtOLGdDQUNFLENBQUEsY0FDQSxDQUFBLHNCQUdGLGFBQ0UsQ0FBQSwyQ0FFQSxjQUNFLENBQUEseUJBQ0EsQ0FBQSxpQkFJSixjQUNFLENBQUEsT0FDQSxDQUFBLFNBQ0EsQ0FBQSxTQUNBLENBQUEsZUFDQSxDQUFBLGdCQUNBLENBQUEsV0FDQSxDQUFBLHdCQUNBLENBQUEsa0JBQ0EsQ0FBQSxXQUNBLENBQUEsdURBRUEsVUFDRSxDQUFBLGVBQ0EsQ0FBQSxjQUNBLENBQUEsa0JBSUoscUJBQ0UsQ0FBQSxxQkFDQSxDQUFBLHNCQUdGLG9CQUNFLENBQUEsMEJBQ0EsQ0FBQSxlQUdGLG9CQUNFLENBQUEsNkNBQ0EsQ0FBQSxpQ0FDQSxDQUFBLDJCQUNBLENBQUEsU0FDQSxDQUFBLFVBQ0EsQ0FBQSxXQUNBLENBQUEsV0FHRixjQUNFLENBQUEsOENBSUEsMEVBQ0UsQ0FBQSw4Q0FHRixvRUFDRSxDQUFBLDhDQUdGLDBFQUNFLENBQUEsMENBUUYsU0FDRSxDQUFBLGFBQ0EsQ0FBQSxpQ0FHRixXQUNFLENBQUEsMkRBR0YsVUFDRSxDQUFBLDhDQVFGLFlBQ0UsQ0FBQSwwR0FHRixjQUVFLENBQUEsaURBR0YsZUFDRSxDQUFBLGlEQUdGLFNBQ0UsQ0FBQSxxREFHRixXQUNFLENBQUEsWUFNSixlQUNFLENBQUEsMENBR0YsaUJBQ0UsZUFDRSxDQUFBLDZCQUdGLFVBQ0UsQ0FBQSxpQkFHRixZQUNFLENBQUEsU0FHRixvQkFDRSxDQUFBLGdCQUdGLFlBQ0UsQ0FBQSxtQkFHRixRQUNFLENBQUEsZUFHRixhQUNFLENBQUEsZUFHRixlQUNFLENBQUEsNEJBRUEsY0FDRSxDQUFBLDhCQUlKLFNBQ0UsQ0FBQSw2QkFHRixVQUNFLENBQUEsWUFDQSxDQUFBLFdBR0YsU0FDRSxDQUFBLG9CQUNBLENBQUEsQ0FBQSxnQkFJSixjQUNFLENBQUEscUJBQ0EsQ0FBQSxXQUNBLENBQUEsd0JBQ0EsQ0FBQSxXQUNBLENBQUEsY0FHRixnQkFDRSxDQUFBLGVBR0YsWUFDRSxDQUFBLFlBQ0EsQ0FBQSxpQkFDQSxDQUFBLHdCQUNBLENBQUEsVUFDQSxDQUFBLHdCQUNBLENBQUEsbUJBQ0EsQ0FBQSxpQkFHRix1QkFDRSxDQUFBLG9JQUdGLGlCQUtFLENBQUEsY0FDQSxDQUFBLGFBQ0EsQ0FBQSx1QkFHRixVQUNFLENBQUEsZ0JBSUYsZ0JBQ0UsQ0FBQSxpQkFDQSxDQUFBLDBCbEQ5dEZFLFVrRG11RkYsZ0JBQ0UsQ0FBQSxxQ0FHRixnQkFFRSxDQUFBLENBQUEsaUJBSUosZUFDRSxDQUFBLGlCQUdGLFlBQ0UsQ0FBQSxTQUNBLENBQUEsY0MveUZGLGNBQ0UsQ0FBQSxhQUNBLENBQUEsZUFJQSxZQUNFLENBQUEsaUJBQ0EsQ0FBQSxxQkFHRixVQUNFLENBQUEsa0JBR0YsVUFDRSxDQUFBLHFCQUVBLHFCQUNFLENBQUEsU0FDQSxDQUFBLGFBQ0EsQ0FBQSxpQkFDQSxDQUFBLDZCQUtGLFdBQ0UsQ0FBQSxjQUNBLENBQUEscUJBQ0EsQ0FBQSwyQkFHRixhQUNFLENBQUEsZ0JBQ0EsQ0FBQSxVQUNBLENBQUEseUJBR0YscUJBQ0UsQ0FBQSw2QkFJSixRQUNFLENBQUEsZ0JBQ0EsQ0FBQSw2QkFJSixVQUNFLENBQUEsVUFDQSxDQUFBLGdCQUNBLENBQUEsV0FNRixpQkFDRSxDQUFBLGFBRUEsaUJBQ0UsQ0FBQSxTQUNBLENBQUEsWUFDQSxDQUFBLG1CQ2pFSixVQUNFLENBQUEsWUFHRixZQUNFLENBQUEsY0FDQSxDQUFBLFlBQ0EsQ0FBQSxlQUNBLENBQUEsaUJBQ0EsQ0FBQSxVQUdGLGdCQUNFLENBQUEsbUJBR0YsVUFDRSxDQUFBLGlCQUdGLGtCQUNFLENBQUEsWUFDQSxDQUFBLGdCQUNBLENBQUEseUJBRUEsWUFDRSxDQUFBLGtDQUdGLFVBQ0UsQ0FBQSxnQkNoQ0osVzNESWEsQ0FBQSxjMkRGWCxDQUFBLEtBQ0EsQ0FBQSxPQUNBLENBQUEsWUFDQSxDQUFBLHFEQUNBLENBQUEsVUFDQSxDQUFBLFdBQ0EsQ0FBQSxtQkFFQSxRQUNFLENBQUEscUJBR0YsUUFDRSxDQUFBLFNBQ0EsQ0FBQSxjQUNBLENBQUEsc0VBSUEsVUFFRSxDQUFBLGlDQUtGLGlCQUNFLENBQUEsUUFDQSxDQUFBLGtCQUNBLENBQUEsMkJBQ0EsQ0FBQSxxT0FJSixpQkFPRSxDQUFBLGtCQUNBLENBQUEsUUFDQSxDQUFBLHNDQUdGLFFBQ0UsQ0FBQSw0REFHRixXQUVFLENBQUEsK0VBR0YsU0FFRSxDQUFBLHVCQUlKLGVBQ0UsQ0FBQSx3QkFHRixVQUNFLENBQUEsV0FDQSxDQUFBLGlCQUNBLENBQUEsS0FDQSxDQUFBLE9BQ0EsQ0FBQSxTQUNBLENBQUEscUNBRUEsWUFDRSxDQUFBLGtCQUNBLENBQUEsZ0NBSUosZ0JBQ0UsQ0FBQSxhQUNBLENBQUEsUUFDQSxDQUFBLFFBQ0EsQ0FBQSwwQkFHRixlQUNFLENBQUEsa0JBQ0EsQ0FBQSxpQ0FFQSwrQ0FDRSxDQUNBLGlCQUNBLENBQUEscUJBQ0EsQ0FBQSx5QkFDQSxDQUFBLFVBQ0EsQ0FBQSxlQUNBLENBQUEsWUFDQSxDQUFBLFNBQ0EsQ0FBQSxnQkFDQSxDQUFBLDZCQUlKLFVBQ0UsQ0FBQSxlQUNBLENBQUEsZUFDQSxDQUFBLGlCQUNBLENBQUEsV0FDQSxDQUFBLCtDQUVBLGlCQUNFLENBQUEsV0FDQSxDQUFBLGtCQUNBLENBQUEscUJBSUosUUFDRSxDQUFBLGdCQUNBLENBQUEsZUFDQSxDQUFBLFVBQ0EsQ0FBQSxVQUNBLENBQUEsaUJBQ0EsQ0FBQSx1QkFFQSxVM0R6SFcsQ0FBQSxlMkQySFQsQ0FBQSw2QkFFQSx5QkFDRSxDQUFBLHdCQUlKLFVBQ0UsQ0FBQSxTQUNBLENBQUEsb0JBQ0EsQ0FBQSxRQUNBLENBQUEsMkJBRUEsaUJBQ0UsQ0FBQSx3QkFJSixlQUNFLENBQUEsdUVBRUEsVTNEeklpQixDQUFBLHFCQUdLLENBQUEsd0MyRDRJdEIsZ0JBQ0UsQ0FBQSxVQUNBLENBQUEseUNBR0YsWUFDRSxDQUFBLGdCQUNBLENBQUEsVUFDQSxDQUFBLHVEQUdGLGFBQ0UsQ0FBQSxVQUNBLENBQUEsNkRBRUEsU0FDRSxDQUFBLHdCQUtOLGtCQUNFLENBQUEsVUFDQSxDQUFBLGVBQ0EsQ0FBQSxvQ0FFQSxrQkFDRSxDQUFBLFVBQ0EsQ0FBQSxlQUNBLENBQUEseUJBSUosUUFDRSxDQUFBLHVCQUdGLGFBQ0UsQ0FBQSwrQkFJQSxpQkFDRSxDQUFBLFdBQ0EsQ0FBQSxZQUNBLENBQUEsY0FDQSxDQUFBLGVBQ0EsQ0FBQSxXQUNBLENBQUEsc0NBRUEsV0FDRSxDQUFBLGtFQUdGLFdBRUUsQ0FBQSxZQUNBLENBQUEsY0FDQSxDQUFBLGNBQ0EsQ0FBQSxpQkFDQSxDQUFBLFdBQ0EsQ0FBQSxXQUNBLENBQUEsU0FDQSxDQUFBLGlDQUlGLGFBQ0UsQ0FBQSwyQkFDQSxDQUFBLDRCQUNBLENBQUEsaUJBQ0EsQ0FBQSxTQUNBLENBQUEsdUNBR0EsY0FDRSxDQUFBLGlDQUtKLGFBQ0UsQ0FBQSxZQUNBLENBQUEsUUFDQSxDQUFBLFdBQ0EsQ0FBQSwyQkFDQSxDQUFBLGtFQUdGLGlCQUVFLENBQUEsU0FDQSxDQUFBLE9BQ0EsQ0FBQSxVQUNBLENBQUEsbUNBR0YsVUFDRSxDQUFBLGdGQUlBLFNBRUUsQ0FBQSwwQ0FHRixTQUNFLENBQUEsbUNBSUosaUJBQ0UsQ0FBQSxVQUNBLENBQUEsT0FDQSxDQUFBLGlCQUNBLENBQUEsc0NBSUosT0FDRSxDQUFBLFNBQ0EsQ0FBQSxnQ0FLRixlQUNFLENBQUEsb0RBSUEsaUJBRUUsQ0FBQSxZQUNBLENBQUEsa0JBQ0EsQ0FBQSxxQ0FLTiwyQkFDRSxDQUFBLGtCQUNBLENBQUEsbUJBQ0EsQ0FBQSxzREFFQSwwQkFFRSxDQUFBLDJDQUlKLHlCQUNFLENBQUEsZUFLSixtQkFDRSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSwyQkFDQSxDQUFBLGVBQ0EsQ0FBQSxxQkFFQSxjQUNFLENBQUEsa0NBR0YsUUFDRSxDQUFBLGdCQUNBLENBQUEsVUFDQSxDQUFBLGNBQ0EsQ0FBQSx3Q0FHRiw4QkFDRSxDQUFBLDBCQUNBLENBQUEsOEJBR0YsUUFDRSxDQUFBLGNBQ0EsQ0FBQSwyQkFJSiwwQkFDRSxDQUFBLHlDQUVBLHlDQUNFLENBQUEscUJBSUosVUFDRSxDQUFBLGlCQUNBLENBQUEsd0JBSUYsU0FDRSxDQUFBLFdBQ0EsQ0FBQSxxQkFDQSxDQUFBLGlCQUNBLENBQUEsY0FDQSxDQUFBLEtBQ0EsQ0FBQSxXQUNBLENBQUEsV0FDQSxDQUFBLDBCQUdGLFVBQ0UsQ0FBQSxXQUNBLENBQUEsZ0JBQ0EsQ0FBQSxlQUNBLENBQUEsVUFDQSxDQUFBLGdCQUNBLENBQUEsY0FDQSxDQUFBLEtBQ0EsQ0FBQSxXM0RyWFcsQ0FBQSxpQjJEdVhYLENBQUEsY0FDQSxDQUFBLFdBQ0EsQ0FBQSx3QkFDQSxDQUFBLDZDQUNBLENBQUEscUJBQ0EsQ0FBQSxnQkFJRixjQUNFLENBQUEsZ0JBQ0EsQ0FBQSxpQkFDQSxDQUFBLDJCQUVBLFdBQ0UsQ0FBQSxnQkFDQSxDQUFBLGFBQ0EsQ0FBQSw4Q0FHRSxlQUNFLENBQUEsb0NBR0YsYUFDRSxDQUFBLDhCQUlKLGlCQUNFLENBQUEsUUFDQSxDQUFBLFNBQ0EsQ0FBQSxlQUNBLENBQUEsZUFDQSxDQUFBLGVBQ0EsQ0FBQSxlQUNBLENBQUEscUJBQ0EsQ0FBQSxrQkFDQSxDQUFBLHdCQUNBLENBQUEsMkJBQ0EsQ0FBQSx1QkFDQSxDQUFBLFFBQ0EsQ0FBQSxTQUNBLENBQUEsTUFDQSxDQUFBLFlBQ0EsQ0FBQSxXQUNBLENBQUEsOEJBR0Ysa0JBQ0UsQ0FBQSxTQUNBLENBQUEsZUFDQSxDQUFBLGtDQUVBLGtCQUNFLENBQUEsb0NBR0Ysa0JBQ0UsQ0FBQSw2QkFJSixhQUNFLENBQUEsaUJBQ0EsQ0FBQSxtREFFQSxXQUNFLENBQUEsV0FDQSxDQUFBLG1CQUNBLENBQUEsNkJBS04sWUFDRSxDQUFBLHFCQUNBLENBQUEsa0JBQ0EsQ0FBQSxrQkFDQSxDQUFBLGNBQ0EsQ0FBQSxXQzdiSix3QkFDRSxDQUFBLFVBQ0EsQ0FBQSxvQkFHRixpQkFDRSxDQUFBLGFBQ0EsQ0FBQSxjQUdGLGlCQUNFLENBQUEsVUFDQSxDQUFBLGFBQ0EsQ0FBQSxRQUdGLHFCQUNFLENBQUEsVUFDQSxDQUFBLGdCQUdGLG9CQUNFLENBQUEsZUFDQSxDQUFBLGdCQUNBLENBQUEsa0JBRUEsMEJBQ0UsQ0FBQSxjQUlKLHFCQUNFLENBQUEsVUFDQSxDQUFBLHdCQUNBLENBQUEscUJBQ0EsQ0FBQSxTQUNBLENBQUEsd0JBQ0EsQ0FEQSxxQkFDQSxDQURBLGdCQUNBLENBQUEsc0JBRUEsb0dBQ0UsQ0FBQSxTQUlKLGlCQUNFLENBQUEsV0FDQSxDQUFBLFdBQ0EsQ0FBQSxnQkFDQSxDQUFBLFdBR0YsOEVBQ0UsQ0FBQSwwQkFDQSxDQUFBLGlCQUNBLENBQUEsV0FDQSxDQUFBLFdBQ0EsQ0FBQSxnQkFDQSxDQUFBLFdBR0YsZUFDRSxDQUFBLFVBQ0EsQ0FBQSxjQUNBLENBQUEsaUJBRUEscUJBQ0UsQ0FBQSxVQUNBLENBQUEsMEJBQ0EsQ0FBQSxjQUNBLENBQUEsYUFJSixtQ0FDRSxDQUFBLFVBQ0EsQ0FBQSxjQUNBLENBQUEsbUJBRUEscUJBQ0UsQ0FBQSxVQUNBLENBQUEsMEJBQ0EsQ0FBQSxjQUNBLENBQUEsZUFJSixrQkFDRSxDQUFBLGlCQUNBLENBQUEscUJBQ0EsQ0FBQSxVQUNBLENBQUEsU0FDQSxDQUFBLHFCQUNBLENBQUEsWUFDQSxDQUFBLDZCQUdGLFFBQ0UsQ0FBQSxZQUdGLGFBQ0UsQ0FBQSxVQUNBLENBQUEsWUFDQSxDQUFBLGVBR0YsY0FDRSxDQUFBLFVBQ0EsQ0FBQSxrQkFDQSxDQUFBLG9CQUNBLENBQUEsZUFDQSxDQUFBLGdCQUNBLENBQUEsZ0JBQ0EsQ0FBQSxnQkFDQSxDQUFBLGtFQUNBLENBQUEscUJBQ0EsQ0FBQSxxQkFFQSxjQUNFLENBQUEsVUFDQSxDQUFBLGVBQ0EsQ0FBQSxlQUNBLENBQUEsZ0JBQ0EsQ0FBQSxrQkFDQSxDQUFBLG9CQUNBLENBQUEscUJBQ0EsQ0FBQSxnQkFDQSxDQUFBLE9BSUosa0JBQ0UsQ0FBQSxVQUNBLENBQUEsWUFHRixpQkFDRSxDQUFBLGdCQUNBLENBQUEsU0FDQSxDQUFBLFlBR0Ysa0JBQ0UsQ0FBQSxpQkFDQSxDQUFBLGdCQUNBLENBQUEsY0FDQSxDQUFBLFNBQ0EsQ0FBQSxVQUNBLENBQUEsb0dBQ0EsQ0FBQSxXQUdGLGtCQUNFLENBQUEsd0JBQ0EsQ0FBQSxVQUNBLENBQUEscURBQ0EsQ0FBQSxjQUNBLENBQUEsaUJBQ0EsQ0FBQSxnQkFDQSxDQUFBLGlCQUNBLENBQUEsZ0JBQ0EsQ0FBQSxTQUNBLENBQUEsb0JBQ0EsQ0FBQSxpQkFFQSxrQkFDRSxDQUFBLFVBQ0EsQ0FBQSxxQkFDQSxDQUFBLGNBQ0EsQ0FBQSxpQkFDQSxDQUFBLGdCQUNBLENBQUEsaUJBQ0EsQ0FBQSxnQkFDQSxDQUFBLFNBQ0EsQ0FBQSxvQkFDQSxDQUFBLGdCQUlKLG9HQUNFLENBQUEsaUJBQ0EsQ0FBQSxTQUNBLENBQUEsc0JBRUEsa0JBQ0UsQ0FBQSxVQUNBLENBQUEscUJBQ0EsQ0FBQSxjQUNBLENBQUEsaUJBQ0EsQ0FBQSxnQkFDQSxDQUFBLFNBQ0EsQ0FBQSxvQkFDQSxDQUFBLE1BSUoscUJBQ0UsQ0FBQSxnQkFDQSxDQUFBLHFCQUNBLENBQUEsVUFDQSxDQUFBLHVCQUNBLENBQUEsV0FHRixXQUNFLENBQUEsb0JBQ0EsQ0FBQSxxQkFDQSxDQUFBLGNBQ0EsQ0FBQSxpQkFFQSxTQUNFLENBQUEscUJBQ0EsQ0FBQSxlQUNBLENBQUEsVUFDQSxDQUFBLG9CQUNBLENBQUEscUJBQ0EsQ0FBQSxjQUNBLENBQUEsS0FLSixVQUNFLENBQUEsV0FDQSxDQUFBLFFBR0YsNkRBQ0UsQ0FBQSxRQUdGLDhEQUNFLENBQUEsUUFHRiwyREFDRSxDQUFBLFFBR0YsMERBQ0UsQ0FBQSxRQUdGLDhEQUNFLENBQUEsUUFHRixzREFDRSxDQUFBLFFBR0Ysb0RBQ0UsQ0FBQSxRQUdGLHFEQUNFLENBQUEsU0FHRixpQkFDRSxDQUFBLHFCQUNBLENBQUEsVUFDQSxDQUFBLGlCQUdGLHdCQUNFLENBQUEsVUFDQSxDQUFBLGlCQUNBLENBQUEsZ0JBQ0EsQ0FBQSxRQUNBLENBQUEsU0FDQSxDQUFBLHFEQUNBLENBQUEsdUJBQ0EsQ0FBQSwwQkFDQSxDQUFBLDBCQUNBLENBQUEsMkJBQ0EsQ0FBQSxXQUNBLENBQUEsV0FDQSxDQUFBLFVBQ0EsQ0FBQSxjQUNBLENBQUEseUNBRUEsYUFFRSxDQUFBLFdBQ0EsQ0FBQSxrQkFDQSxDQUFBLFdBQ0EsQ0FBQSxzQkFDQSxDQUFBLHlCQUdGLGFBQ0UsQ0FBQSxXQUNBLENBQUEsVUFDQSxDQUFBLFdBQ0EsQ0FBQSxTQUNBLENBQUEseUJBSUEsZUFDRSxDQUFBLHdCQUdGLGdCQUNFLENBQUEsaURBTUosd0JBRUUsQ0FBQSxxQkFDQSxDQUFBLFVBQ0EsQ0FBQSw2REFFQSxxQkFDRSxDQUFBLHFCQUNBLENBQUEsVUFDQSxDQUFBLGVBSUoscUJBQ0UsQ0FBQSxxQkFDQSxDQUFBLFVBQ0EsQ0FBQSxZQUlKLFVBQ0UsQ0FBQSxpQkFDQSxDQUFBLFVBQ0EsQ0FBQSx3QkFDQSxDQUFBLHFCQUNBLENBQUEsb0JBR0YsaUJBQ0UsQ0FBQSxXQUNBLENBQUEsU0FDQSxDQUFBLFdBQ0EsQ0FBQSx1Q0FHRixpQkFFRSxDQUFBLFdBQ0EsQ0FBQSxRQUNBLENBQUEsV0FDQSxDQUFBLFdBQ0EsQ0FBQSxrQkFHRixrREFDRSxDQUFBLGdCQUNBLENBQUEsd0JBRUEsUUFDRSxDQUFBLE9BSUosY0FDRSxDQUFBLFFBQ0EsQ0FBQSxNQUNBLENBQUEsV0FDQSxDQUFBLGdCQUNBLENBQUEsWUFDQSxDQUFBLGFBQ0EsQ0FBQSxnQkFDQSxDQUFBLFdBQ0EsQ0FBQSxVQUlBLGNBQ0UsQ0FBQSxvQkFDQSxDQUFBLFFBQ0EsQ0FBQSxNQUNBLENBQUEsVUFDQSxDQUFBLDJCQUNBLENBQUEsaUVBQ0EsQ0FBQSxxQkFDQSxDQUFBLGFBQ0EsQ0FBQSxXQUNBLENBQUEsZ0JBRUEsYUFDRSxDQUFBLG9FQUNBLENBQUEscUJBQ0EsQ0FBQSxpQkFJSixrRUFDRSxDQUFBLFdBQ0EsQ0FBQSx1QkFFQSxxRUFDRSxDQUFBLHlCQUtOLHdCQUNFLENBQUEseUJBQ0EsQ0FBQSxlQUdGLGlCQUNFLENBQUEsY0FDQSxDQUFBLHdCQUNBLENBQUEscUJBRUEscUJBQ0UsQ0FBQSxJQUlKLGVBQ0UsQ0FBQSwwQkFFQSxTQUNFLENBQUEsZUFJSixnQkFDRSxDQUFBLGNBQ0EsQ0FBQSxXQUdGLFdBQ0UsQ0FBQSxjQUNBLENBQUEsVUFDQSxDQUFBLFdBQ0EsQ0FBQSxrQkFDQSxDQUFBLHFCQUNBLENBQUEsZUFDQSxDQUFBLFVBQ0EsQ0FBQSxXQUNBLENBQUEsaUJBRUEsVUFDRSxDQUFBLE1BQ0EsQ0FBQSxpQkFHRixZQUNFLENBQUEsYUFHRixhQUNFLENBQUEsVUFDQSxDQUFBLGVBQ0EsQ0FBQSxlQUNBLENBQUEsZ0NBR0YsV0FFRSxDQUFBLFlBSUosNEJBQ0UsQ0FBQSxpQkFDQSxDQUFBLGtCQUNBLENBQUEsVUFDQSxDQUFBLGVBQ0EsQ0FBQSxXQUNBLENBQUEsZ0JBQ0EsQ0FBQSxnQkFHRixVQUNFLENBQUEsaUJBQ0EsQ0FBQSxPQUNBLENBQUEsWUM1ZUYsWUFDRSxDQUFBLGFBQ0EsQ0FBQSxpQ0FHRixVQUNFLENBQUEsNEJBR0YsY0FDRSxDQUFBLGNBQ0EsQ0FBQSx3QkFDQSxDQUFBLGlDQUdGLHdCQUNFLENBQUEsV0FDQSxDQUFBLHVDQUlBLFVBRUUsQ0FBQSxpQkFHRixVQUNFLENBQUEsZ0JBR0YsV0FDRSxDQUFBLHFCQUdGLFdBQ0UsQ0FBQSxpQkFHRixVQUNFLENBQUEsbUJBR0YsVUFDRSxDQUFBLGdCQUdGLFNBQ0UsQ0FBQSxtQkFHRixVQUNFLENBQUEsbUJBR0YsVUFDRSxDQUFBLGtCQUdGLFVBQ0UsQ0FBQSxlQUdGLFVBQ0UsQ0FBQSwwQkFJSixvQkFDRSxDQUFBLDBCQUdGLG9CQUNFLENBQUEsVUFDQSxDQUFBLFVBQ0EsQ0FBQSxnQkFDQSxDQUFBLGtCQUdGLFlBQ0UsQ0FBQSx5QkFHRixXQUNFLENBQUEsbUJBQ0EsQ0FBQSw4QkFFQSxxQkFDRSxDQUFBLGdCQUNBLENBQUEsZUN4RkosaUJBQ0UsQ0FBQSxVQUNBLENBQUEscURBQ0EsQ0FBQSxhQUNBLENBQUEsYUFJRixlQUNFLENBQUEsY0FHRixlQUNFLENBQUEsZUFHRixrQkFDRSxDQUFBLGNBR0YsZ0JBQ0UsQ0FBQSx5SUFHRixpQkFTRSxDQUFBLGdCQUNBLENBQUEsa1FBSUYsaUJBYUUsQ0FBQSxlQUNBLENBQUEsbUJBR0YsS0FDRSxDQUFBLFVBRUEsQ0FBQSxrQkFDQSxDQUFBLG9CQUdGLFFBQ0UsQ0FBQSxVQUVBLENBQUEscUJBQ0EsQ0FBQSxtQkFHRixNQUNFLENBQUEsUUFFQSxDQUFBLGVBQ0EsQ0FBQSxvQ0FFQSxVQUNFLENBQUEsYUFDQSxDQUFBLG1CQUNBLENBQUEsU0FDQSxDQUFBLGVBQ0EsQ0FBQSxnS0FJSixPQVFFLENBQUEsUUFFQSxDQUFBLGdCQUNBLENBQUEsc0JBR0YsaUJBQ0UsQ0FBQSxrQkFDQSxDQUFBLG9CQUdGLGVBQ0UsQ0FBQSxjQUNBLENBQUEsaUJBQ0EsQ0FBQSxxQkFHRixrQkFDRSxDQUFBLGNBQ0EsQ0FBQSxpQkFDQSxDQUFBLG9CQUdGLGdCQUNFLENBQUEsY0FDQSxDQUFBLGlCQUNBLENBQUEsdUJBR0YsY0FDRSxDQUFBLGlCQUNBLENBQUEsd0tBR0YsY0FRRSxDQUFBLGlCQUNBLENBQUEsaUJBQ0EsQ0FBQSx3QkFHRixlQUNFLENBQUEsVUFDQSxDQUFBLHlCQUdGLGFBQ0UsQ0FBQSxVQUNBLENBQUEsMEJBSUEsZUFDRSxDQUFBLGtCQUNBLENBQUEsaUJBQ0EsQ0FBQSxnQkFDQSxDQUFBLHFDQUNBLENBQUEscUJBQ0EsQ0FBQSxpQkFDQSxDQUFBLGVBQ0EsQ0FBQSwyQkFHRixxQ0FDRSxDQUFBLHFCQUNBLENBQUEsaUJBQ0EsQ0FBQSxlQUNBLENBQUEsdUJBS0YscUJBQ0UsQ0FBQSwyREFJQSxjQUVFLENBQUEsMkNBS04sNEJBQ0UsQ0FBQSx1Q0FJQSxxQkFDRSxDQUFBLFdBQ0EsQ0FBQSwrQkFHRixPQUNFLENBQUEsUUFDQSxDQUFBLG9CQUNBLENBQUEsdUJBQ0EsQ0FBQSxzQkFDQSxDQUFBLHFCQUNBLENBQUEsc0JBQ0EsQ0FBQSx5QkFDQSxDQUFBLHdCQUNBLENBQUEsdUJBQ0EsQ0FBQSxjQUlKLEtBQ0UsQ0FBQSxPQUNBLENBQUEsbUJBQ0EsQ0FBQSxlQUNBLENBQUEsNEJBR0YscUJBQ0UsQ0FBQSxlQUNBLENBQUEsaUZBR0YscUJBR0UsQ0FBQSxhQUNBLENBQUEsa0JBQ0EsQ0FBQSwrQkFDQSxDQUFBLFdBQ0EsQ0FBQSxvQkFHRixlQUNFLENBQUEsU0FDQSxDQUFBLCtCQUdGLHFCQUNFLENBQUEsaUJBQ0EsQ0FBQSxnQ0FHRixXQUNFLENBQUEsV0FDQSxDQUFBLGNBR0YsaUJBRUUsQ0FBQSxzQkFHRixpQkFFRSxDQUFBLE9BQ0EsQ0FBQSxvQkFDQSxDQUFBLHdCQUlBLGNBQ0UsQ0FBQSxpQkFDQSxDQUFBLGdCQUNBLENBQUEsVUFDQSxDQUFBLHNEQUVBLCtCQUNFLENBQUEsNEJBSUosaUJBQ0UsQ0FBQSxxQ0FDQSxDQUFBLE1DaFJKLFFBQ0UsQ0FBQSxpQkFDQSxDQUFBLG9CQUNBLENBQUEsVUFDQSxDQUFBLFdBQ0EsQ0FBQSxlQUdGLFVBQ0UsQ0FBQSxXQUNBLENBQUEsY0FHRiw0Q0FDRSxDQUFBLGVBR0YsNkNBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsZUFHRiw2Q0FDRSxDQUFBLFlBR0YsMENBQ0UsQ0FBQSxZQUdGLDBDQUNFLENBQUEsaUJBR0YsK0NBQ0UsQ0FBQSxjQUdGLDRDQUNFLENBQUEsbUJBR0YsaURBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsV0FHRix5Q0FDRSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxXQUdGLHlDQUNFLENBQUEsV0FHRix5Q0FDRSxDQUFBLFlBR0YsMENBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsZ0JBR0YsOENBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsYUFHRiwyQ0FDRSxDQUFBLGVBR0YsNkNBQ0UsQ0FBQSxtQkFHRixpREFDRSxDQUFBLGdCQUdGLDhDQUNFLENBQUEsWUFHRiwwQ0FDRSxDQUFBLFlBR0YsMENBQ0UsQ0FBQSxZQUdGLDBDQUNFLENBQUEsV0FHRix5Q0FDRSxDQUFBLFdBR0YseUNBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsWUFHRiwwQ0FDRSxDQUFBLGdCQUdGLDhDQUNFLENBQUEsa0JBR0YsZ0RBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsZUFHRiw2Q0FDRSxDQUFBLFlBR0YsMENBQ0UsQ0FBQSxXQUdGLHlDQUNFLENBQUEsV0FHRix5Q0FDRSxDQUFBLFlBR0YsMENBQ0UsQ0FBQSxZQUdGLDJDQUNFLENBQUEsYUFHRiwyQ0FDRSxDQUFBLGVBR0YsNkNBQ0UsQ0FBQSxrQkFHRixnREFDRSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsV0FHRix5Q0FDRSxDQUFBLGVBR0YsNkNBQ0UsQ0FBQSxjQUdGLDRDQUNFLENBQUEsWUFHRiwwQ0FDRSxDQUFBLFlBR0YsMENBQ0UsQ0FBQSxnQkFHRiw4Q0FDRSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsa0JBR0YsZ0RBQ0UsQ0FBQSxlQUdGLDZDQUNFLENBQUEsV0FHRix5Q0FDRSxDQUFBLGdCQUdGLDhDQUNFLENBQUEsY0FHRiw0Q0FDRSxDQUFBLFVBR0Ysd0NBQ0UsQ0FBQSxVQUNBLENBQUEsV0FDQSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsY0FHRiw0Q0FDRSxDQUFBLGNBR0YsNENBQ0UsQ0FBQSxVQUdGLHdDQUNFLENBQUEsYUFHRiwyQ0FDRSxDQUFBLGNBR0YsNENBQ0UsQ0FBQSxnQkFHRiw4Q0FDRSxDQUFBLGlCQUdGLCtDQUNFLENBQUEsZ0JBR0YsOENBQ0UsQ0FBQSxnQkFHRiw4Q0FDRSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxrQkFHRixnREFDRSxDQUFBLFdBR0YseUNBQ0UsQ0FBQSxrQkFHRixnREFDRSxDQUFBLGVBR0YsNkNBQ0UsQ0FBQSxXQUdGLHlDQUNFLENBQUEsYUFHRiwyQ0FDRSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxlQUdGLDZDQUNFLENBQUEsY0FHRiw0Q0FDRSxDQUFBLGNBR0YsNENBQ0UsQ0FBQSxjQUdGLDRDQUNFLENBQUEsZUFHRiw2Q0FDRSxDQUFBLFdBR0YseUNBQ0UsQ0FBQSxlQUdGLDZDQUNFLENBQUEsWUFHRiwwQ0FDRSxDQUFBLFdBR0YseUNBQ0UsQ0FBQSxZQUdGLDBDQUNFLENBQUEsY0FHRiw0Q0FDRSxDQUFBLGNBR0YsNENBQ0UsQ0FBQSxZQUdGLDBDQUNFLENBQUEsWUFHRiwwQ0FDRSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxjQUdGLDRDQUNFLENBQUEsaUJBR0YsK0NBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsYUFHRiwyQ0FDRSxDQUFBLGNBR0YsNENBQ0UsQ0FBQSxnQkFHRiw4Q0FDRSxDQUFBLGdCQUdGLDhDQUNFLENBQUEsZ0JBR0YsOENBQ0UsQ0FBQSxlQUdGLDZDQUNFLENBQUEsbUJBR0YsaURBQ0UsQ0FBQSxlQUdGLDZDQUNFLENBQUEsY0FHRiw0Q0FDRSxDQUFBLGVBR0YsNkNBQ0UsQ0FBQSxjQUdGLDRDQUNFLENBQUEsbUJBR0YsaURBQ0UsQ0FBQSx1QkFHRixxREFDRSxDQUFBLDBCQUdGLHdEQUNFLENBQUEsYUFHRiwyQ0FDRSxDQUFBLFlBR0YsMENBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsUUFHRixzQ0FDRSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxTQUdGLHVDQUNFLENBQUEsU0FHRix1Q0FDRSxDQUFBLFNBQ0EsQ0FBQSxVQUNBLENBQUEsY0FHRiw0Q0FDRSxDQUFBLGtCQUdGLGdEQUNFLENBQUEsU0FHRix1Q0FDRSxDQUFBLFVBQ0EsQ0FBQSxhQUdGLDJDQUNFLENBQUEscUJBR0YsbURBQ0UsQ0FBQSxzQkFHRixvREFDRSxDQUFBLDhCQUdGLDREQUNFLENBQUEsZUFHRiw2Q0FDRSxDQUFBLHVCQUdGLHFEQUNFLENBQUEsd0JBR0Ysc0RBQ0UsQ0FBQSxnQ0FHRiw4REFDRSxDQUFBLGNBR0YsNENBQ0UsQ0FBQSxVQUdGLHdDQUNFLENBQUEsWUFHRiwwQ0FDRSxDQUFBLFNBR0YsdUNBQ0UsQ0FBQSxVQUdGLHdDQUNFLENBQUEsV0FHRix5Q0FDRSxDQUFBLGdCQUdGLDhDQUNFLENBQUEsYUFHRiwyQ0FDRSxDQUFBLGNBR0YsNENBQ0UsQ0FBQSxVQUdGLHdDQUNFLENBQUEsU0FHRix1Q0FDRSxDQUFBLFdBR0YseUNBQ0UsQ0FBQSxZQUdGLDBDQUNFLENBQUEsV0FHRix5Q0FDRSxDQUFBLFdBR0YseUNBQ0UsQ0FBQSxXQUdGLHlDQUNFLENBQUEsV0FHRix5Q0FDRSxDQUFBLFdBR0YseUNBQ0UsQ0FBQSxhQUdGLDRDQUNFLENBQUEsY0FHRiw0Q0FDRSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxXQUdGLHlDQUNFLENBQUEsYUFHRiwyQ0FDRSxDQUFBLGNBR0YsNENBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsVUFDQSxDQUFBLFdBQ0EsQ0FBQSxhQUdGLDJDQUNFLENBQUEsa0JBR0YsZ0RBQ0UsQ0FBQSxhQUdGLDJDQUNFLENBQUEsZUFHRiw2Q0FDRSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxjQUdGLDRDQUNFLENBQUEsV0FHRix5Q0FDRSxDQUFBLFVBR0Ysd0NBQ0UsQ0FBQSxZQUdGLDBDQUNFLENBQUEsVUFHRix3Q0FDRSxDQUFBLGFBR0YsMkNBQ0UsQ0FBQSxXQUdGLHlDQUNFLENBQUEsWUFHRiwwQ0FDRSxDQUFBLFNBR0YsdUNBQ0UsQ0FBQSxlQUdGLDZDQUNFLENBQUEscUJBR0YsbURBQ0UsQ0FBQSxrQkFHRixnREFDRSxDQUFBLGVBR0YsNkNBQ0UsQ0FBQSxLQ25yQkYsZ0JBQ0UsQ0FBQSxPQUtGLGdCQUNFLENBQUEsT0FHRixrQkFDRSxDQUFBLHdCQUNBLENBQUEsdUJBQ0EsQ0FBQSxVQUNBLENBQUEsT0FHRixnQkFDRSxDQUFBLGFBS0YsYUFFRSxDQUFBLFNBR0YscUJoRXNDd0IsQ0FBQSxlZ0VwQ3RCLENBQUEsb0JDL0JBLHdCQUVFLENBQUEscUJBQ0EsQ0FBQSxVQUdGLGdCQUNFLENBQUEsVUFHRix5QkFDRSxDQUFBLGdCQUdGLDBCQUNFLENBQUEsNENBQ0EsQ0FBQSw0QkFNQSw0Q0FDRSxDQUFBLDBDQUtOLDBCQUNFLFFBQ0UsQ0FBQSxDQUFBLHNDQy9CSixRQUVFLENBQUEsWUFDQSxDQUFBLGtDQ0hGLGVwRWdsQjhCLENBQUEsNEJvRTNrQjlCLGlCQUVFLENBQUEsd0JBQ0EsQ0FBQSxrREFDQSxDQUFBLHdDQUVBLDRDQUNFLENBQUEsNENBSUosVW5FT2EsQ0FBQSxpQm1FSlgsQ0FBQSxxQkNsQkEsY0FDRSxDQUFBLGVBQ0EsQ0FBQSxnQkFDQSxDQUFBLGdCQUNBLENBQUEsa0JBQ0EsQ0FBQSxhQUNBLENBQUEscUJBQ0EsQ0FBQSxrQm5FV0EsQ0FBQSwyQm1FUEEsd0JwRW1DSyxDQUFBLGtCQzVCTCxDQUFBLHlCbUVEQSxnQkFDRSxDQUFBLG1CQUNBLENBQUEsdURBSUoscUJBRUUsQ0FBQSxhQUNBLENBQUEsa0JuRVJBLENBQUEsVW1FY0osZ0JBQ0UsQ0FBQSxvQkFFQSx3QkFDRSxDQUFBLFVBQ0EsQ0FBQSxpQ0FDQSxDQUFBLGdCQUNBLENBQUEsZ0JBQ0EsQ0FBQSxvREFFQSx3QkFFRSxDQUFBLG9KQU1GLHFCckUzQ08sQ0FBQSxpQnNFUlgseUNBQ0UsQ0FBQSxZQUdGLGdCQUNFLENBQUEsa0JBR0YsZ0JBQ0UsQ0FBQSxtQkFDQSxDQUFBLHNCQUdGLHlDQUNFLENBQUEsMEJBQ0EsQ0FBQSwyQkFDQSxDQUFBLDRCQUNBLENBQUEsa0NBRUEsY0FDRSxDQUFBLDRCQUdGLHlDQUNFLENBQUEsNkJBR0YsZUFDRSxDQUFBLGVBQ0EsQ0FBQSxNQzdCSixlQUNFLENBQUEsbUJBQ0EsQ0FBQSw4QkFFQSxhQUNFLENBQUEsbUJBSUosNkJBRUUsQ0FBQSxrQ0FDQSxDQUFBLGFBR0YsaUJBQ0UsQ0FBQSxTQUNBLENBQUEsWUFDQSxDQUFBLHlCQUNBLENBREEsc0JBQ0EsQ0FEQSxpQkFDQSxDQUFBLGNBQ0EsQ0FBQSxnQkFDQSxDQUFBLGdCQUNBLENBQUEscUJBQ0EsQ0FBQSxhQUNBLENBQUEsNkJBQ0EsQ0FBQSxzQ0FFQSxpQkFFRSxDQUFBLGFBSUosVXRFWVcsQ0FBQSxrQkFGSyxDQUFBLFlzRVBkLENBQUEsNEJBR0YsZUFDRSxDQUFBLFVBQ0EsQ0FBQSxRQUNBLENBQUEsV0FDQSxDQUFBLHdDQUVBLHlEckUxQkUsQ0FBQSxxQnFFZ0NGLHdCdEV4Q2dCLENBQUEscUJzRTBDZCxDQUFBLDRCQUNBLENBQUEsNkNBRUEsZ0J2RThUSyxDQUFBLDRCdUV6VFAsaUJBQ0UsQ0FBQSxxQkFDQSxDQUFBLFVBQ0EsQ0FBQSxlQUNBLENBQUEsa0JBQ0EsQ0FBQSx3QkFDQSxDQUFBLG1DQUNBLENBQUEsbUJDcEVKLG1CQUNFLENBQUEsZXZFdUpnQyxDQUFBLHFCQUNYLENBQUEsd0R1RW5KbkIsbUJ4RXEvQ2dDLENBQUEsMEN3RWovQ2hDLFFBQ0UsQ0FBQSxtQkNUTix3QkFDRSxDQUFBLHdEQUdFLG1CQUNFLENBQUEsc0NBR0YsVUFDRSxDQUFBLHVDQUlKLGFBQ0UsQ0FBQSxnQkFDQSxDQUFBLGlCQUNBLENBQUEsZ0JBQ0EsQ0FBQSxXQ25CSiwrQ0FDRSxDQUFBLGlCQUVBLHlCekU0RHNCLENBQUEsNkJ5RXREdEIsNENBQ0UsQ0FBQSwrQkFHRixxQkFDRSxDQUFBLE9DZEosZ0JBQ0UsQ0FBQSwrQkFDQSxDQUFBLDRCQUNBLENBQUEsMkJBQ0EsQ0FBQSxTQUVBLHlCQUNFLENBQUEscUJBR0YsdUJBQ0UsQ0FBQSxlQUlKLFVBQ0UsQ0FBQSx3QkFDQSxDQUFBLHFCQUNBLENBQUEsb0JBQ0EsQ0FBQSxxQ0FFQSxvQkFDRSxDQUFBLGVBSUosVUFDRSxDQUFBLHdCQUNBLENBQUEscUJBQ0EsQ0FBQSxvQkFDQSxDQUFBLHFDQUVBLGlCQUNFLENBQUEsY0FJSixVQUNFLENBQUEscUJBQ0EsQ0FBQSxxQkFDQSxDQUFBLGlCQUNBLENBQUEsbUNBRUEsZ0JBQ0UsQ0FBQSxxQkFJSixlQUNFLENBQUEsNkJBQ0EsQ0FBQSw0QkFDQSxDQUFBLDJCQUNBLENBQUEsa0JBQ0EsQ0FBQSwyQkNwREEsa0JBQ0UsQ0FBQSxhQUNBLENBQUEsZ0NBR0YsU0FDRSxDQUFBLGlCQUNBLENBQUEsV0FDQSxDQUFBLHVOQVVGLGFBQ0UsQ0FBQSxrQkFDQSxDQUFBLGNDckJKLGtEQUNFLENBQUEsYUNERixNQUNFLFlBQ0UsQ0FBQSxpQkFJRixVQUlFLENBQUEscUJBQ0EsQ0FBQSxjQUNBLENBQUEsT0FJRixVQUNFLENBQUEsb0JBQ0EsQ0FBQSxJQUlGLFFBQ0UsQ0FBQSxZQUlGLHNCQUdFLENBQUEscUJBQ0EsQ0FBQSxNQUdGLHdCQUNFLENBQUEsbUJBQ0EsQ0FBQSxNQUdGLHdCQUNFLENBQUEsbUJBQ0EsQ0FBQSxzQkFDQSxDQUFBLGVBQ0EsQ0FBQSxNQUdGLFlBRUUsQ0FBQSxTQUdGLGdCQUNFLENBQUEsd0JBQ0EsQ0FBQSxzQkFDQSxDQUFBLGNBSUYsaUJBQ0UsQ0FBQSxPQUNBLENBQUEsS0FDQSxDQUFBLFNBQ0EsQ0FBQSxVQUNBLENBQUEsVUFHRixVQUNFLENBQUEscUJBQ0EsQ0FBQSxxQ0FLRixZQUtFLENBQUEsNENBS0EsZUFDRSxDQUFBLCtDQUVBLGVBQ0UsQ0FBQSw2Q0FLSixrQkFDRSxDQUFBLGdEQUVBLGtCQUNFLENBQUEsa0JBS04sY0FDRSxDQUFBIiwiZmlsZSI6InRoZW1lLnJ0bC5jc3MifQ== */ \ No newline at end of file diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_ltr.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_ltr.png deleted file mode 100644 index cd79ab42f04a594dbf727e34795009f3e99fb62e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 101 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2%@N{M0&tl#Zv1V@L&KvP94Wd(mDdM=eR# z<`9#vqR0OhJFjv(Fu^eA%7(zh9xctRJxmPTewN2A?=GnX>SOS9^>bP0l+XkKYlIuC diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_rtl.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/arrow_rtl.png deleted file mode 100644 index d035b9d9bafeaacccfe344089d74c223836c0f89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 102 zcmeAS@N?(olHy`uVBq!ia0vp^YCtT;!2%@N{M0&tl&+_XV@L&KvP9bhd(mDd$5oQ9 zx{v=UI|FIk^Z(?3+>kNNxw7HE%Atd7Zj20v{Vk90;}T5*YGm+q^>bP0l+XkKx(6KT diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docs.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docs.png deleted file mode 100644 index 54d12151d60b6e442e28327b32b6a26d32956a06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 705 zcmV;y0zUnTP)*IH++L(c? ziH3-(aA;i-GOWsW?=DGpvR|8kqK*DaQb*iIUjim?6na-E14d5-YG(vf+<<$W?fdnm z2?)yYuWRzXu*DyP)VzgJngiuCT9iy_&_ytTqYgml4xyLq2zL=|zdn;-S-P9GDBgCN zd{MBqLFA``ItWHMf>GFm5zKI%xIHSzhS&|2eHZnM23O6TF6(iEXsabmn7F_L<;8KqWjz9!U z0w*X652Eq=DeA)MHYVzq)R0@ZaHB_Pc$}bp-5S-q_K-6o!^LhP&UA26&Md45?br&% z;oXX&pQOWyCOR&5vY@u_;7l_s`Zz)DoGz+!?%~$345!;!IMvF;$rdK|qW56)hj6x; zj-$0?97)01W-3&UZ5*tkJV{VAsxT;Q+h|_a;Y=F`Cz}~K-bll-I!Xo(R}yfzVjYJn z)=)AkfY9j2pM`5rMo7(*vo3UkrS{`uJLhp=a5o13P89pgS2J+9d>I6>9V4l6zQ4Wj zWQk{+*;%I=7%raHj}4Inr<Ax>V;c6C zlYafTln`dBJfO&3C?4VAc+DD)R;(bepM?#f6=bOcpI?{^e{yd8*O$KX&pFG#{%~i} zJxI`iulGS_4Q7C=^`dK8f#j@mmOrz|S{95qGr5$kRdy^|Q)^$a>b6bpiqBTr%RifE nF1>A00000NkvXXu0mjfE^bQ= diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docsql.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_docsql.png deleted file mode 100644 index 2f6f0561dca94b36c8a4f91207b150e7e12120ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`KAtX)Ar*{U&mZJuFyLT0_~m}1 zZLI&Z`O4i&T)&0bY^5j1F#h0G67=$C^DtV%yyxS~KYR=oXPF-S|7^o8s+#{&0F8p>-`M1g_=C3tyCuyd7WLF}NFD7(K5>NA_cozfBh{abi^CBWowA!V`&=I1NH zrC?T$0`#mVys%;;A&@|wcNg&H^#NmCTR5~Ks=pH8FR3@=SCimTFo)90q~L_~M!d4+ zg2__B)nzP534zK00?xgOG)sc${FMMtUUgCW2lE-(3ed6?cx}f6o81H+PXlWk5j<=+ zLFCpp~N|6L56ndKG{vKnNTYrv%}cx}?mtcOsjg|l-SEG@-2bTZZu{9yUaA7;TO zuDJQz$U>SwzZ}AxYP@*Pf>>-c!*Ad6aOS)_M4tB%c4a|Tz_}U2eppD)f^(Zc^v|@g zxH3ZP?imj+uS!_F730)t2d%*AEXsvGkhq?O=kf7XE{BGH67rQfQI9(;aJ$^P^v&(A zxO@8!j-Gfdym9PWkDv>){n!?}QB1c3*J>~9_6(`|p@3OqT6(OW+ZvB{cgE%YgmlC9 z4Sh`K-X|xvb~`f4FZRhAtBD{w#~6^JllxIwr$(CZFhrrW3Qat*eTB0T-z)FfBVXPk5T09t74zn zSH(L;{gdB6f-Bf3wyJn1zo-$N{-R!bcB@`_p88(_D*TR91ZZpzc#P3(FO22+p*!LY z8nl;;4f@N}zXqt{oTO@mr;Qy!&oG|PCXa*hLOv!+r09$>Lyh)|u}XD?`r80i{8Ln| zI~P>9%Y7+LIoPbOi?JgOy}?}Qhx|gD>_5fOV82WVXrY! zBt&}J=2hzMpdrWt7?;;~X9BaE4+6kO5I-Ky-J+TTB#7NU5f% zfB!B92l}zIvxB|8JuEKFAzOF@#p)MmiuXpk;1L2$PSE=2M=4f=>S9lK)VrViG$-JD z7#$hH?(QxF{^c#q&mqR;GE&(0Q5I-}NSEu7-Z|LAB9nbwufOtLd$c(!)HlChU0(bp z^IzV^+6pw!P9W6&DkL`#d`I46W(H)kk4u%8JHkSOzW@C5&lzVvpAVr>2$4txu~^LL zKK=Al1Og4CCrjvOg#y^qrRrT@R~)yo9s$AC|bDit#pD@m>ssZwxHE& zk(ZZ;!oos)_~D0GUtfo^QHYR!J=AS{*kzjH6#M9>ERwl}L|Z4(dTz0=(Lc;L)BANs zM#kOt_I9vFV7UD6>FN0&6cltfu*mPVXS4GU>pHVjK+SJdk`?!Z{6P^00F8aDhcW1Y QegFUf07*qoM6N<$f`cevp8x;= diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_index.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_index.png deleted file mode 100644 index a7a11a15d16b979bf4f570da609249062fd7915f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P)A2a@bD zP*On&1tkS2BpgzY+u52Ro+bz-Af&+bW=o)H(gKo*dfCqKTki6trtZ6Gw7}LAZ0Y{aUOWD^+C8_ zW56#8?s_-O52uhoBoZOAftPuCE*^%G_UkUe0oneEP)f;jB-jRL(I`mqi{UYyMfDpxn_Yz35%3-%(-yfM#$!lb!k1_ ztdQ^?aT-e^2`eF|&*-C;Ug5;I$VU5mzOQJfhGCXIt) syCi(X=Nq?VMP}S3za+k;q#D=!0TI0HjY>%;xBvhE07*qoM6N<$f_;F23IG5A diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_lastpage.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_lastpage.png deleted file mode 100644 index 1b4ac09269d25ef90a81b71132eb839209caaf74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmV;G0&4wi?0Qf_F ztf&z(2@Mn){X_h0;(veN{~hcpRJ;7THshKrVD@}!ch)yH%XJM+vg3V=^U}+1^ODQT z4Bp}0-wX`6*9CicU0ri$Yc#1r&lXXtR4Jq~1%zS>-0vG&k3Z^M$Gc<<1G*A!Xz9{( z`4V`tg)$Vq2w5ndFM~(V7T|dESwC{WjV86A0qbJgj7*rPBa%VvO94^!o6r`@Af)6C zlSj|pt#i*tXON|V>6+7TX4*Unt$<;h?1Ts-tmZLf!%H*oEI5NmQ$V zFOdV&CEOX!f*QQ$DL552wpgy>`RgXEv)wbAShL_lV#YK3n^sxN8IvH$ak6H@Y$yYC zi0Jzdoo=0AYo9^ZSS0C2-MZV4?Rr$C3lUJ)b+^i)vs`SaXwC#shmDc1p)vm+Zf5tnz;!rm080Gd3K4VBT##<&-Qo vdGCI+ymj9Z=dyj*%wx?hUx$&ID9+9R<30#qo+be_00000NkvXXu0mjfj_No+ diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_more.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_more.png deleted file mode 100644 index 9d84943ec51c68148b56ccf2aad4888ad6824b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6%sgEjLn;`PfA}--NwMB|Izg0S zWn2o!)W+b12DRRW3&hv4co-*yGKjQ!C2Kh_u%rjHsxWdetm%AfTXEonIM4(JPgg&e IbxsLQ0LU61I{*Lx diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_move.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_move.png deleted file mode 100644 index aeb7a55d9bcbc0cc2691ca4683b75fba85e117b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 381 zcmV-@0fPRCP)gH7z7!x|s%l(6Y*+1|r;|n8r>sk%|2d5nlL!kiT z!3bVBR&al^KZIkJ`xFZTat9y+BY0$6ij%en@zDPUZhKwEZk??(-4x#_)`$th*!>WV zp@})%wJc(??l;_lUH`W**VK>aD9S0?`4WL3s$c+7oPNX?_oKCM64y;Qg0i>%SkJ$v zC2M(-Z*nVW>Y2c0143Tk{7SmT1QbjK5ft^Ei0V6Xx6$dMx_U%!6M>HNQf+wJz>ym`~Vef#$H!cPi- z!ISdjFMd9BprS@16t%DP%4!O2?;@Pa4-}K1+T$ovq7iR;r;vf$j{GbTl_MB zTrP)RuZP3o;5j@V4@@Q#oK7e2@!HP=2u(7Xj4NPcCP+62;XRQEUa$Ap6|k{zl1LiKiUI*bs)%iF`=JQU_R^7^nVtyXOu_A9aQuLAQ7 zN95&xXZ!-#tEB?-3`gYoZbzDp$}sF!BEfI9S%I0|6i=kz?@O(kAL03SM=eKSH}26z zUNLl-pyyR9<L!-ej&7}fMflG(3++S{j zV`#|ts;Pu~E;zV!=*r#2CSL~W7#eUtYCQZk74C3w>Clzivkl=84m>lf=l51^o(gw3 zxOC{s_1QWH(lP8+?&gAnYqQXm>(h1d{$7zQ?@xznvjY5noWjTs2bT_Axv~e|fu(-G z9;*BMOi9j04yN2O3thQ7Sr^ym5vi8S|DM@!*aNe{9S(P-(3Q($-a(&SF_dICg{jUz XF(Qe6Fgvvf00000NkvXXu0mjf^is8e diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_plus.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_plus.png deleted file mode 100644 index c26fb24966eb43de41d3afd9fef873c7a6874bce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`VV*9IAr*|tA5Q8l;aFS{wl3!9 ze2yBi4%3Dk981_;KQHy3-f>7_s{!)`)5$3uj?AY{opPu+A<=N5g+DmwKmoT)m#|Ri qLuC_1G1_n=8KbLh*2~7a^uP$r= diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_props.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_props.png deleted file mode 100644 index 58906696c3695821b2957dff50f11159068b5c30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 573 zcmV-D0>b@?P)%q*r4Mv*FJsfe!R? zHK3KP0=0~mViY$Q%Lv_pf(@cdZlLtL(s_5Gr`-SS=}VP3J-XWy1n;han3U zJhrWn6Wk8Ec=?L=8Ju%IhU+dDi;SglQPtN0>W$8b`&4BZlFL|62w9{2#n4^vJ zRwt=1TpY(5Hr8AfztVrB_3r5s|*e#25KIZVy{U)g&;H=&iO zf;UmmXvo4g)s5852%V5lj888jv4R67wTcIeFXtf3b>~YoWQaq?mLKc?H4_>^?Ib{o z*htL;3oqm#o2H%#+%qeXJO?U%%@`8}88tj8nYE&T8Wg!>lD{e?_~PA&(WwP+6Z04t zokI^d19nj_7m6JGmKr4`_~_A)_tv>~=D9;P9@$jju0<*RSQ|e9=N}o&Xog)G00000 LNkvXXu0mjf-s}P} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_report.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_report.png deleted file mode 100644 index f5b57cdd011002d1b1bfcc195a3715459b366a8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 555 zcmV+`0@VG9P)VYVufSgudTDbX@J8Fk(p>1^%E}>=P3rUa$AgDz!9ZcclvD5OUS5GXa zh#NB(8rK~UA3j771ildXm-a`Qg%(DG0x=9?kKMqw@P)|d>y@BLfdGKZcVAN|Ul4PmDgeHh z$Or?`nz|xX*n9D1L|Cg#UPLrT;2cI)-5yO!v+LY5x;KtANICQ=L)(`Dh&1p$zVU$> zjjI;s;fs&dDp!D;kKRSK(5O=0j8Gh^rm-m4{#nbeHvb}8D0D)4h|>(Q6UUG6>g}gZ c0RLUiNxzg2D09A48~^|S07*qoM6N<$f)RS#y#N3J diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_snewtbl.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_snewtbl.png deleted file mode 100644 index b2863b4e3f00e6623f545e6700a1551ff7c28bb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 653 zcmV;80&@L{P)?jOqw4;3L ztO;9f{?W72Dw^x#)e?fuJro=%n5Jq>+48K~50V zOvHvM*|Qx;)A%EV8qS@A#BPU_4mp_HCjM9;o{?4F=qu50T0vh z{l1ugGsX89ib`Dn~Ptp>BcdZqv6PKX;ZXQC0 zIrt5F!mZU>A}}w}fJ=)m9GWzdI2nwnUKSU^juMH0t}^@5_Mi^&v%x&WIo&V~AQ_k}%>As>K+dO@>Gq_CpO1TNJ5cFSqp*4=eoeD61x3Qc#FH z_vB{cDTH@X$eV~m-gq1W+gx!vbpJB^L>B(xWx5`9N_Z*!7>zu%t<={U)N5ePOcY@NK}O3TzMsKK00000NkvXXu0mjf@Zu`^ diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_sql.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/b_sql.png deleted file mode 100644 index e52ff7fbe3dac21e35a231568bb1a7fd24b39df7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 680 zcmV;Z0$2TsP)Yxs5+jg(ld(Sz8&dD_U_DjYy zzmfLd18~JNe;fwfzh|;~=ac!UrECCi+1(t!wfmby#aK;?I|E6_EUU&Q) zAHM=b@pqp8KUFz}DPyJJYtH*(j%~SyJN6V53ffk@NR1(RKibP3CqTs-7 zHMUGNrXPL(?|VjoEsADCgK^N!1xkYQpbaPmQUKnvbwY9dlfQGv#XEWD=VWdim|mYs z`Wf`sEK&+I#Kj>g0xG}(!ghG~=T$!bz5VxIAkQ~W)D-QZVUYO%c$5Tb|33}B#K0@& zI~fnW_G1UQVg#5x-?_1w&|dQx01wIvf&(@J+Dn`Vo7gbl?0(^zqgTdGknP+wQQ@0; zi;y6Ri)FL`5FUI;Cd;seu>cz2jGJDrX(iM0wR3BccnHY@fs2a)DWR~IUVmVK&ImAB zKG$eek@1nhgAnl)KGp$2ErI1;R?eS){pRz01mf}Qx{;zKsGwLUzRPh6 zIxOe^4KehwS3fxm+;rGJJNUQb`E}kB4nsASR1;4kAV~$Of@U3l{9{l)`1}Y6-*+-_ z_DA3R!s<}d%RGhkWQ8C%4r3k8d!{EQxbn13{JT6LtXX6P6vaX3pRix;hKrA2JgldL z0s?q=a~WTV1FNbBn6XBsBfuH+^qU`iyDg-hz)Va`#l%E4O_FLgq1h<$I-h^{$M?Wn#Na=R2QFu)2y>AD O0000z zZ*NyfO?`d+^OevG~C|aVtRTSG$axU1cSj}MtazZ!D2X(q_9vGKoey!7&y0% z!j9O9$K!zl#!O?UQX$HUE|&`qhXXr1JD_2Fe4IdquoLcs-6}w4zmkN+{rx@o=gG+l zD8|Uh2on{;uDBC|6ksqIZ)LNY%gaj;u)n_#iZL)Spz{_A1&*lWDZpehpAt~r`sU^) zwzjsw=;`TE0J|W7VmIFbOs8_jnd|FoaQ?l$Jsck&gVEaBN+ZP%D4Kr+$ffwawzihx zc6of9kDUG=vvmis*5av!Du0000Z6wr$(nrH-96;bhO8N%CJ8U+d026Gf9; zw0(Bc@kjETE>JCt&Z0ehq|Hl$Lhr@g$F|ZduS1p)u8qKm zL%eOylY&K6+)b|Fo>UN`kd&c2jIp!SXJ;Ux5JnT;|#sxu{ zpia=1mJA5`1Ra7_-|2G0{~QFnDAwXp!Q+BjT}GX(#~FH^tH+hPJ*LZ`27f6|2fADr zVWcHnsr9C31;sv&xhMZ8%txtj(De%Z9l5GiEheYs+@DBk@VF)g(XX|&KAB#bA=|{< zmk#xzUnA0T6_zpkhMb?4WX^8O@^vy2f*K|65j-0CS>t0=$db>9%z*4ao<3FK4#9nb zQiXzi8r)bky2P8l@UY-D)4E+IBt#nyPB>PldIf&)fdV5=6>OcJwe|uda>*XEBv0yd wfpI&eI#tm(cbjiUZ{mmijxWQ-Z7zpWO?p?U&3lfR4bNcPn+C*idV;KPNrvaz%l32C?0000mj|US5v}jbXMx`?4PCMa&7ZG>eAwgYu z@?)_@OCJ+7+O5+IaMgZ6^`^=Ljb@!SZBV6Ji$X#o!Y+`i8J$8;rI-{=~>%Zh7m#`souuwtKqz KxvX045Od=O4F{KDh`tK8#d_YWw z&=i*rWEQ|T*8aD7zn@>`_+95Gm-%f0xK-Bh=4O${A1t3gknNq znI#tR#}R)LaO5q|%-ajYijid&Szr!(l87dhV0?JA^QBkPATZAyGdS@bEByGveQxgf z=!hOg%Mvq8Gmp$OoVmN-L-VD&mOcbj$Sl&p6K-=yvAe!+rSeiqbb*wkWGE?eOowiAW1nW#$0R@i2R*&!Us{ewkoE1=Fe$v>6h@5}*vj z`VQ*Ty+M99*AwSZgfKv-3j8$qLPT(I@ClY>+o8c~wTjV|>eQ)2+({T(FbpF%nM_-&SFc_ZlT;!+Jv}QE1QDax>q}z-1-ceG4L6G+ z6VVlMoPaEa%s`evDpu`t&DWx^&5kUF5}}3dn3^HDolpYDf2-uAO$@B8Wx< z;iFU=N`kL*jzE80zyKO;!~j47@{{#a1`GjDfq66w%*G5b0Dx9Q0Y^dFAKgZm5v4bX z^D?W;7G`OhOaW~+3kjJNXEh1y{`fk(jwrW6uSlCtaYT8J5>hehc=uQAwl@l=f?C^g R2si)$002ovPDHLkV1n@fEVuvw diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_drop.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_drop.png deleted file mode 100644 index 9d84943ec51c68148b56ccf2aad4888ad6824b55..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6%sgEjLn;`PfA}--NwMB|Izg0S zWn2o!)W+b12DRRW3&hv4co-*yGKjQ!C2Kh_u%rjHsxWdetm%AfTXEonIM4(JPgg&e IbxsLQ0LU61I{*Lx diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_pointer_ver.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/col_pointer_ver.png deleted file mode 100644 index 0b735526f2699f970a79b5ef8b093397eb9d6e53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^B0$W=0VEhE+9_HADW;MjzhDN2vdL#HfIJmX7srqa z#^i(z49sjI35=`}thyVxq7p>6C`3)z;5s8ILYAMwr%KrIoaCKOkSU(7elF{r5}E)d CiWl|( diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/console.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/console.png deleted file mode 100644 index f84ce2c1ec5c8e3cb1e2423ccefb3aa551d52337..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmV+<0o(qGP)Zh$0EOWm$HfUoS65tJ9d&Z?QeMN$C|V+s*cgG=Ds3djwl$_CKNI=#cmeRJ{i^G_ z`3N^_d;onvKnQ_RN+>nqZJx0#3$)fS*5Gt@1U}HVEqKQ<3=WcVgqlu}u|ES}ao#!T z^;k52LhGtwjlBjaC5WO3aU6ps3~8Do%Q6&2jf4DSEm%hEy;nFOZKY`;%yDbZq$p nd!u6kERz?6C^}tK2;pF`*}Q3GNkjQhpkfA3S3j3^P6f4NqD+AhEy;nH#DXmmk(q9SRXUv e9GAN&6T|ZurXTg^miGYFFnGH9xvXe>W1)PfZo;&yd{{R2~*IvK=AIQg4+%##@{|Os5 z{NMBM-~RW4RfB*h3`|#m^-ouCgZQ|qqPnkX) zq|h9Q1z>9V*X`c@Kk?|%|Jk>1|Bu+R<$pm@5lE3WNFloC6s9d)_}?ix`G0A7IZTlS q5X)oplfv4yYY8brCg0000n diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/and_icon.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/and_icon.png deleted file mode 100644 index 2ecce01a25c5739a2be05a82e84b81468b493161..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 715 zcmV;+0yO=JP))%R;`@ zfGa3jud;f!E|D%bWLxYf(AG9GQmOX2uGfz14NY+f|sdawmkM7U>H~F24 z_XmH*U2d`oBdj<88dx>GZTXrVkJ_4yJEb=IgPvPqLY+Uq{*Eu7`iNmvrSDZ_69!?$ z5m%!*ZnZ;J&XyhMyZ_;ab$ruc>Q?yaxgYuS-QTEv|2v`Glua1Q2@pqIJGpdn@8#A? zWBfKD0h$PV2L63>OnS+XjZVz*!=qJ7YZpOjLZdLA&2np}`7L&JdP!%4d_F*#SuEWl zVRuk&o4;Qlk}8IHogt$}K;zRksdNV&Gs5O`0pe;)L&kA&bf2U(AeZUW_;|uhI-pP* z;QlvYwJoRo`?ilY?UQl_2rG`Q!FJpJ_etN|HI<3TCPLJ}@Y~Bdc0V^3w{QtO1vWf) zV}U(&Yq>2iy=wS+OkiUXhljN!KX zukYOZ)n;EQ002ovPDHLkV1o7DU1b0O diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/bottom.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/bottom.png deleted file mode 100644 index 19cbbcdc6b984806e8292c8b38fc040eb614d972..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmV;10(t$3P)LAX6na$!B8$Zho#uUTG7qye;7=t!lxmuquq-#l*&lQajyq=YPne zdYdXSNt&Z&h|8)&c5xF=V{V72ev)6 z-ZKx5k_jEGmt^76>tc1!LJc$QvmgA5^a*bF#t0k2I5&0WoJLh1lI6z?5v@ZQOT zW!HX}MrL-vod%`nSlFS|1*Te;r#0|ypOKo$tY|BLBB=l8FOQ3Zs4r#cA^fY*lC}PwNS#+@eeGF zA-MsX{k}}r_n-Yt?L-~mxG1uA+Rk{)KbFQrza1Aw*3mNg%;YjTv<&J1Dq5;DDh)bK gIsn=;zRXU^H}wl_D^d?g6951J07*qoM6N<$g4BvO!~g&Q diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/downarrow2.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/downarrow2.png deleted file mode 100644 index 60827b3d387d18aa5f8a525ca059f56d0d2c1b69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 682 zcmV;b0#*HqP)+TzEk(Pyp5{1_EtbKcqF zGM{WtO1oSye{eLcMr`)mPhDndaOjR3Dx(h$caYm?3*hoI8~QC~;H($MX6YAN7Xl^N ztBSGNZ$722GeKka8;j zzg^xCga$5AB0l5ZW(F)B4aao-)AXNZ8O6P?k zbY2v~!~-D!VmJT7-Y6pINaL8%Vc+@0O!py6Bj+v;1NCL&>G70w}bUGl~YiCOrV%8TB*&8pF^70F7pH@A5?> Q0000007*qoM6N<$f*W}~-v9sr diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/favicon.ico b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/favicon.ico deleted file mode 100644 index 29c2595b1d53b36c607769e69479b23edbd27697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmcJNF-yci5QV=(iLiQj97IbMu8?##HWmt&cEW+Bg@vc3z4|}=2ZEiISXn5D90($a zm5pF&tr*`J2bOSWA|m12*`4IQo$L-Y^t4)NoMn3yrhs{&lrlwL0rajtUhuV!hG`gc zqI9ik3dt?3Kf^{pu-XYUCj*I7WzvT98Xg}4PZvFQkN4<0M?F@|=O+)-U&70MAeXL8 zw~qc4?u@xWrtj04l3AM&f|aT?Y?}UVR6|088pvft;!?T>nta< zPOLBbuxWP{pVgomTz|IDj`zYzk1f+K!tx+ZoO6A-AFM~}>~CJ?5o5hkcmKGSc;2D# psQUj{Q=b1tTlTuj;qXA{M4cPW-;E`)AR1z%h#!jit9TPRd;)f+aL)h$ diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/minus.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/minus.png deleted file mode 100644 index 2feb93556443a2784dbb98378a8eae81d0ad60ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 974 zcmV;<12O!GP)2*~p0m7M+luX^wr$%Q)VAB$Hm_~l_Mo=gxBp2e$xf!$GxKBge5C&y>FY$U zb~~TjG=)+hCo<9B;WZ-LoD-8?S$qAdySChY9=6?kF1FosE;inN_V>%LIDXkcy6bi! z82uS~Vzx`x-+1b$d+s{}dv8d`?hBmQah8c4Gqzvo#g3cvvH7mEu;_xqHRVKJ`aSy6 z-M4MJ=|t?gB807la%?GJr@*+do}Rw*B_fW- zv+VTf${lAKv9(xsWR(V`2=3#aNoA!2A>rv!fEsFL7Zg z%kvP$(-ttKtU1AiZ6!RDX|RQrJLl{aY?;3hGcGB{iYQ^apRl6hZLF%VMt@X=d5H=Z zK#Bf{5D%Hdg`cr1w#cDIy4;FAwOM#sq+Sn}c%7-8nwndozi z(C$~F-Yr9eheMB7H`dFU5!E}ZnQT=yk7b!mn5w|y3@zTD-w%PWzxf^lKYjZ(R^NX$ zT5N&7QOa7e)#bxjPT*nW2ieJ2W1lo zHLhP|Wi}bA>@svXxq`7}_G>O&kfy?dR3+vzS$9y0W##W+gyr{Kg#-O95cvF)&(L)C zNhqBv9+s7|Q|D5BHNz^KL?hIib^2N9lRll3%wc*|hMtH9pX}TWfn|4Jj!HG5)+)iF zIYSUw{K!3cLq{mJNKoNcp*5iIr}6YB8K0PyWxzm0j&3j8w;T%=UVkQPr_yl0D$Pt9 z&|&7a=iu!rf{bP8I(GifN$<71@8f!i~rDhS{&=TG? z5-PkJG^g0m?$bX(zeN?%)V@^9^1gfzS`#Ou&Z9t;O@eZ(gvrFCCDtWd(3aswn^*G! z{Si+S$-1LcpXtf*e$tWWM@zN`jp+_FWw_Yii?$pe+EZ*h+imiT=&w-EvhDC{u56DQ w-e^xUceW>(n%hH@o@p~nPHbiEq5q4Y0cN}ur6)c$ssI2007*qoM6N<$g5LMvyZ`_I diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/page_add.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/page_add.png deleted file mode 100644 index 5d8a1d1a9f9dd046bea30fe5f3ea25fd34e9276c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 694 zcmV;n0!jUeP)H!iL@Y-F5R+!N4*In7^n=C?-|m*?>=(Bj{L_64YJ(x#e(M!!^S+ZT1~aGzMV3>R zVqPnA`aYX*+`fqpK54^K&OK)uytu{6(ZEVr2pa>j5d%elWDo;H12YI1;OwwzgNu*Z zfj#!wV1u0wIp95jwFU(S5P)EdwN;JAxT*8lZQ~XPZfV?l!dAp0T~j+{00~kA!;l%C z1;I!W8VU@aBAQ;}-sF@$*TYgMYl9L9NEQ%6fCa+TJ_tBqMm0jH zbSNSf7O-q62nQtUgI4&;i5fHQ*b15B`o> zbEnZNTZHCescx66KMLfKmn&SA9eaPt$Z6km#>vNU*Y$UE=n=cK^|n8xqwd)L`I;$L zA3oWwi6PuTGH{TIjrx4d)fb&h4w=JtIEUZ+e#P;JoWSrw-`x#7vPQ5hGdaT!n-(0o zZNLS2u?8;qvHf@o+n5UuxEX+l&w7*Zdc6wv-TDA)1{Y*+<*a7L+KtJ$31L7LoH~03 zea5z>$JqaQ;+*$*`qvv-KduL2{#t{r`95L86t;fs-~}520fAGo*#?P^rr%7Po*!}I zp(iaFS;G?lcmEfMSJwJ`9e&$ScYDbdW_ECkS+qP}nHiETn+ve&0*LX_9J;}M8`9|j-(7(mx;X{}_ z)QZW11xywsWU>GoWA59q{{f9)@`!^>6IWJD!MRPjhkn zSzZs*H~MEJ56JWqA9v?rqjc6Yl@nEf^{UXy#RsFY{9Fio~>UPb9_vUE+MuqBxi9s2+>7iq?7N zCz}lmR(>!tnB(2Bb3zXD!M1~qVizvh-s9m}lp`Y5!C-J$!)U^qBV30>q&p09PKye# zEj8Vcxad=qh$Kg!<+^N*%swY(|GQ}qcKw{7_&LDrgn-Mf*>4>tHFiYomN;_YgHBW9 q>p8|6dmDKglRq_BSj+HxGcbtRMjySlP*)A;2?kGBKbLh*2~7ZHOj5QP5*H592MHi>kxxso|1j9r_C$(xcOnPY@V8t}^57GdqlqQsfs^&@~BXd-;HmBn{kT3moXKc(}qF(0{-(6AXu~n0MTUC8zBW4(21ySd*sy6bal2EN8$T ziU+GafHbtyIYtcHP{|dMUhNYW#$bKcf@Tvv1Fr>o0BHlLDML0^V#uaSgr&nLEFz;C zgXlXZ)|A50e(S^@K$<1C0Xv4RGD2~nrWreK=hHpzd?^N5g1MaTNuY1#iWe8zzb(Da zAzP;;fnLbwobDrf($bubHF#H+1(lhdj#e!rjhNO;ED1BN5xL zS+L`}^*7NodM8zX$s8HDV;K9Vv9C?xP+BM2fL^mh3#M&~hGBma33T0SR%jumNs;-6 zd4W-Z7;QL+qT^LM>T1En>AQGtPm!Gy}gq{*CR??HgGRLdS^V(|EiWd$@f{|m^TtInt$vQfKI1l zSGy065nwQcXE#lWGu!odqXmZipV;zDoO`idlrvLx|07*qoM6N<$f{6I8ga7~l diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/toggle_lines.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/toggle_lines.png deleted file mode 100644 index 46d28c09bf5582c310d80b6f7c2071ded1b2bfdd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmV;Q0bu@#P)3zresa_0C*k+Q840F~z{g8S)cG$N+S!Z1P5-U`o_wk05IY z?Z#Krkw6dsYxoEgh*52BNm(_UYT0RU(i@ZN|7QPchqZi^R2r zYGz^$>kGW%qnOPo?~Q>qB=0h18ol6{u@3Mc?>vRp3iy8JpBM6{R(z1lfb#$V002ov JPDHLkV1h<_ww3?@ diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/uparrow2_m.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/designer/uparrow2_m.png deleted file mode 100644 index 5d1342d4f217a25c6111990a9bb12309497cc025..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 643 zcmV-}0(||6P))a1W`Py9o7B_4eL1RM`%<9wT-iF+qP}nwr$_*zG4r5q>XQq_3kgTGxId< zJ@;zZdEEG6>wf=-joX9o)^4{xn>p-%@?G!0K?gPMy$p4nd?$@PL*Nh+3zzT&aIWR( zJ^9_n&FPb={W*gF1$IKq!K=|OI0j`6Ef}AgK}lT`R@c_Rv9`4nt`UjQu=N=EWae;N zEmXtqmuHRs2^r`e8pY`3Gzj@?E32#EdT49{;c0nUdAV_xDquj9a~^CbMt8H9gyp}g+=f@UECGn znR%gQd_fuT27{hgS+@l?IWvp=s(RG5b)iPY@2~X@kHIN49!8$Q_+VmtR~hiWZBR54 z^GhX=2}vm|2S-{#RRhvXDz^a5eZnD1>4!4l1M7e&1Se-BEG-vNnFR<+&H@v#*fd8(BY608#-=ihEQNJfe~@Ffy*- z)n;gXZZUXQBxUxQhQSpDAZtk|z}zk(r+H0`M7>%xfuC=IBoq zKa&}^*J!Ko9$n+hQ?)eu=3czqGr z$^d9Wx1i2*euX;XK-bR%RJBiYbE!>=RTT@tA|q6ha6SY&6TCT@kVw82K(wl0Ot}e# z%@|F6#KBgQz+CX~5-ay32b2)lQgT;7fL~sJDOhwu4fs7>3#vic=bR~Ey2|S$+fhhoQ z&INDGB!Lw0`Z#dL5U>sR!6B(apsRMH?p8|( zR1^#uZYVg}fmL|yX!qF;RN)7E)VeKInQ|SV_gME%K$=OIunTJ2snEqfMZt+qoXlz6 z;!k%V(Ga|^Z-wKk+L~wM!9+}fP%{C7aum4OS*SSL64|Hw809YO$A4>y5|NJQrrbNV z#%g=-FdkkWjH@U5VgL4(STLrW7-4f_qnM97xEKQ92NX7TZOEzX2uZJQ zYm6^zGK3Y>8U3@Xd%Q9#3wXcs^ZDwVnM!>d_d4)Y7X#WA~sE)EdoTDm)3#?eWd38m$CUDqHT- z0fPn;x(D@gH<&H3+3fH+?nKkTv4bJh%BmarkjxIE{DDcoh4aCTQ69q zB)T1#X;1=zxiuydC2n)CM&i;@l~CU`fXenhFe!Le#IE|L*_8l0+(cEh_v^r}BetXw zNil9niT6fwoCl(UKY%IWl2V3*@@7eJ%`g310*>cSRB?mE4W)p;$3q0siGX)zrMNo0 zJ&kv=X0(S)GJd=(5J`UgS z0cSh;Q$leUMZ|#uBr1q|azzWyd!<+$l1kTozXu9*oWVtDdmfnwis4IQ2|n`f%-T=6 zC*hJ$>Y!tC>4M*Fq5?@vUtZmAe&_H8x1R3B`8zvs^zv1#o;%Ub+0XjpDu0iQr}s2E zy12s8(H(Eze#HI9FR*;++%Eb5KLV!@ZBC7fjz(u^7qYW+@Y%r$Ul;0Qf179nb}#RU y4Gr-4>gww9&(YETpO?G+w~cdZvv3(e5e5K33Mf9WsKG4&0000iyTWAJqKb6Mw<&;$SpY!+t# diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data.png deleted file mode 100644 index c173bc0343f01226364682225e578d0b21c2cba7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 260 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbK}cz{ocE4wm--#UpiszQx|%_^ zOfYJ)i_szmgSia)Ga1@9mg`JrFyFv1ui{t>(25LC7srqa#!~-gMixT>o7TTpc;x+{=G{wG z1D)reB_G5!{t$K+-k|$a>_JJ_ibrQ--JkXNCg=X&Q`4i|sle*2e&x6j&`t(VS3j3^ HP6`Uv)H4`)yU=Q-S_C<#_zx|PKsN&6CN9K%8V{QMue2gQBAO%Aw)W;G40000< KMNUMnLSTXz$8w|q diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data_selected_hovered.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/new_data_selected_hovered.png deleted file mode 100644 index 7091ae36de71e254ae99b1a09939fbcfb4691f57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180 zcmeAS@N?(olHy`uVBq!ia0vp^0wBx*Bp9q_EZ7UAsy$sCLn;_c&o5_UGUQ=tXtnqGMNFT?uHlk{|7-TDV|mZz(q%Q~loCIAUhMcM!W diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/play.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/play.png deleted file mode 100644 index 75a2c67c6bccb2f766dd7a35d63754dc5da67fc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 329 zcmV-P0k-~$P)Zn<8OG=V*-Z; z&j@XL{PV58PGHp_sNo)Miyuhne1vn}Svune?v>YQTzE&#^c(zYZ(tg`U(Tq3Yrz$& zre2Xf@Q9+3C%6=xLCt%umUaWj^b@l18IjF5h-$e(a@Q>^6ZfIwI)6>8fnn@EGW#Cj zTXTtk+Do#@H4GzmpiIp7&}yI_u#JR{TX;H6;8$}2E#D0&Sd3LOmQjhAg{Idk2QemDhjv*C{$qU3Ia<;sAbL#&K zf#r{;{?|`*ijh+2^8a`L!+Z_tuqILAZHxcxU}Hxj)Pr|r(QBJM2AjmF}av61GIs`)78&qol`;+0O)-)7XSbN diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_really.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_really.png deleted file mode 100644 index e48c9cd4830543e151c6c86035f8a5c6ff640750..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^+#t-s1SHkYJtzcHY$ZW{!9W@a@|Lkr1X8A+E{-7; zjL8iR|8Fn^$SBsfH8RRJ9=*8q;jTcDgFiEbW@rg;bW6^-l(Nb}VbWOz8M&6jA`E6y V8@BcETZMrP@^tlcS?83{1OSY1Bf%~w!%ZMWiPj^DJ^r%u7xpkakgzd|IKTj;mp=|tPgdRIF9)p{C@(i zqoZRRun8cFA_SorKWt$bem1^s2bK2r_F(Yf!76}sBj;Zn<^1N&o1vC2R9)BEb2Y@X zsuUldBKGTa8#05T6Xwv|`w5dLPiEVR5|-m(*=cip4sV_;9H`odstX?+AZWkL%a#^i zWG&*Iw-E4spIz&Er1ni23lIco?-q!Q!xpf1?kF}I8fUNE;ijs}i>FVY=0h|#HohSc zoq!)iT*{0@(~9)&+n1}}G71F;dcPr9zI?e<7p^~ZP-=O^kO>nxt}UeS%A@;0gW>fy zdGX@Ki{ExIs#k@(`Tj%$`!isefm3nl6J>!O;v$O{Et1*aL98XgmZlZ*z_Kh{*G(^s zk+x0Kq+h>&Ungj3X(5xzFlf*q#*ZIQ&z?Q`6!-4kaUk7c1w^or}Nl`($fwZdQ_Q-n{ug)H~M)J~IIT;Xpa)v}d>9yJ8+!+m#8sI=b?%Iy+9+s^Lyv@^Es= zE%v580mlV$Lnbu*{N!<91<#@nhgo<3arp56tgzXPMW?%hI6C-Qyc3(1ulY=A{`%+B zGRK;N&wUy@mrCSm|DLAZetBZ3Q0sc*gO{#+QDcbI7VD8s_W2ET9)qW=pUXO@geCw` Ct5xIx diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_unlink.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_unlink.png deleted file mode 100644 index 551679e94553fe46f47974585142eccbaf93cd20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0;V<1vlO}RMGo?dIxq@bW{fK`c<3qbv65{^%jf5 zRoPtr^;a%+wCI-~!K!rCFX8Yt#-dj~7<)HXXfIMlVawvwASZxWiONl#A?DJ?B!0OaTA z_pYq0yoBH1-%r4SM-Mrrs;cUgo}T`2VPWCEkB`q$dwcu0k&%(4t*tEyKyq?2frgKq z%jI4IkKUI%s4FWgd(qzB9?gP}jg5`Bo;h=7>*VC*Rsg-dy<0^h(N@-%V)Luuz@vwp zQdCrojgF3f(ACwI;pXOc!qn9CwUw0>admYi0NA}UG<@XXz@vwpl4U1HN5`ec#>NMH zKL4IrEGFIE-6So@e$$=*Dk%I$|9&$=bN@@dpdn$Hzb{8TdBA&*_$G>3LSKi*< zK>$L+6PH;17(Q}v;L-c;e_)%x++&h7FI4g#-{w-j%E)_+`Tg=(FiTkwg|;!T6urh} z)qJN~WIe{zTuN51O1ln6{qzKS(KGvlTbVZsp5t23o>i+4+2S5)mtko&--!c~PD301 b`DpwA{kwbC54?PM00000NkvXXu0mjf5XmU= diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_vars.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/s_vars.png deleted file mode 100644 index b62dcd23e24bd7a605adf8f18d80e0985c6e18f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 523 zcmV+m0`&cfP){ymk#Y{aHmB23U{{#w+8QVcXxMa(FS+7crtNMxa5C_ed{vkd}BBFOP)0W zz$jjw3i=leYJhG9&3LbppnnuaR+^@HmSw1oBFBy$JGOF3HNhY%d!7g1_c^w0!!%7O ziozt4Bw^>yom^60Zb|~WAPhsqam+pm*L7i87F1Pbf*=S$H`%*)FOyUeSbjof4hg8> zI1V&Tt1%?%a6$X7{f95Uu42YznT2z2>sWGIgKmd>D7vn*ClN)ls-WlE*JUHOeR#Fx zmWJ79nE(rJYFKe!$D%7LR5M@_dJ>us!!W=Fy*7OtH}Sj@F21Q^_GuY{5wTD-W6Zgv zfc~F+M#hz=1{)5|35mF1>}knfeMiT*6GHa#yGH@%)lVN2Pl;H5O~Hgif8hBMNf=zv zed)(>qYn$=f^#ya9{2-6V^6@IWX3T8^#9lczj67Y!6%pYLzOw`I`wJU&{fZ0%|0$* z@{XS@oPI>WyfYH!?*9$VijX7;L1m)mDzxg*d-&{~KQVgC4;GH!_ZxHf{zl2><;v6$ z@QqZRG)-%zF2P?48cEIt|0M&83GyjuOu4w$r2|-5(3vD;Z6y7v^A88j%9xi8inag% N002ovPDHLkV1lo->3RSF diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/zoom-plus-mini.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/img/zoom-plus-mini.png deleted file mode 100644 index 466cc7bc0e38d01873b3a358e10308339fcbb4f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmV-G0l)r7cz7G|s1Jor(C;;k6-C&Vjf?WdGg)n#802HNdxAN{h$!JP5_+ws=pR$PP zl4ZRxQ7+=5W{>YThRwM%;D{;_8N$XnK@y2X-)2OHZKOcZ^@tX8B&7Wva}^9A>~0i> zAJladwe1fD!MhG)fbzRRl6(Q$isMfmlmp^A2w#H?5C_y8kI!d8uKTu?WwnITw3heB zqfj9j$AfLZ(lGqeG|e)+`~GsnR>2g=_e+}RmB#T;wk+%AhPUUH_YnGDaPWrz85z64 zxUcUt+-tqPr{Us3K^ri`2}F<^*z`BZ!eR+LfX&U9kZBOYFqk0}7=*y|GYA0g1#X`p SKyPON0000x}85_zopr0E9Xxk^lez diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_glass_95_fef1ec_1x400.png b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/jquery/images/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100644 index 7172755b8eca081734b440619224c0b31d8acb37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 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 hIX| .ui-controlgroup-item { - float: left; - margin-left: 0; - margin-right: 0; -} -.ui-controlgroup > .ui-controlgroup-item:focus, -.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus { - z-index: 9999; -} -.ui-controlgroup-vertical > .ui-controlgroup-item { - display: block; - float: none; - width: 100%; - margin-top: 0; - margin-bottom: 0; - text-align: left; -} -.ui-controlgroup-vertical .ui-controlgroup-item { - box-sizing: border-box; -} -.ui-controlgroup .ui-controlgroup-label { - padding: .4em 1em; -} -.ui-controlgroup .ui-controlgroup-label span { - font-size: 80%; -} -.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item { - border-left: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item { - border-top: none; -} -.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content { - border-right: none; -} -.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content { - border-bottom: none; -} - -/* Spinner specific style fixes */ -.ui-controlgroup-vertical .ui-spinner-input { - - /* Support: IE8 only, Android < 4.4 only */ - width: 75%; - width: calc( 100% - 2.4em ); -} -.ui-controlgroup-vertical .ui-spinner .ui-spinner-up { - border-top-style: solid; -} - -.ui-checkboxradio-label .ui-icon-background { - box-shadow: inset 1px 1px 1px #ccc; - border-radius: .12em; - border: none; -} -.ui-checkboxradio-radio-label .ui-icon-background { - width: 16px; - height: 16px; - border-radius: 1em; - overflow: visible; - border: none; -} -.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon, -.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon { - background-image: none; - width: 8px; - height: 8px; - border-width: 4px; - border-style: solid; -} -.ui-checkboxradio-disabled { - pointer-events: none; -} -.ui-datepicker { - width: 17em; - padding: .2em .2em 0; - display: none; -} -.ui-datepicker .ui-datepicker-header { - position: relative; - padding: .2em 0; -} -.ui-datepicker .ui-datepicker-prev, -.ui-datepicker .ui-datepicker-next { - position: absolute; - top: 2px; - width: 1.8em; - height: 1.8em; -} -.ui-datepicker .ui-datepicker-prev-hover, -.ui-datepicker .ui-datepicker-next-hover { - top: 1px; -} -.ui-datepicker .ui-datepicker-prev { - left: 2px; -} -.ui-datepicker .ui-datepicker-next { - right: 2px; -} -.ui-datepicker .ui-datepicker-prev-hover { - left: 1px; -} -.ui-datepicker .ui-datepicker-next-hover { - right: 1px; -} -.ui-datepicker .ui-datepicker-prev span, -.ui-datepicker .ui-datepicker-next span { - display: block; - position: absolute; - left: 50%; - margin-left: -8px; - top: 50%; - margin-top: -8px; -} -.ui-datepicker .ui-datepicker-title { - margin: 0 2.3em; - line-height: 1.8em; - text-align: center; -} -.ui-datepicker .ui-datepicker-title select { - font-size: 1em; - margin: 1px 0; -} -.ui-datepicker select.ui-datepicker-month, -.ui-datepicker select.ui-datepicker-year { - width: 45%; -} -.ui-datepicker table { - width: 100%; - font-size: .9em; - border-collapse: collapse; - margin: 0 0 .4em; -} -.ui-datepicker th { - padding: .7em .3em; - text-align: center; - font-weight: bold; - border: 0; -} -.ui-datepicker td { - border: 0; - padding: 1px; -} -.ui-datepicker td span, -.ui-datepicker td a { - display: block; - padding: .2em; - text-align: right; - text-decoration: none; -} -.ui-datepicker .ui-datepicker-buttonpane { - background-image: none; - margin: .7em 0 0 0; - padding: 0 .2em; - border-left: 0; - border-right: 0; - border-bottom: 0; -} -.ui-datepicker .ui-datepicker-buttonpane button { - float: right; - margin: .5em .2em .4em; - cursor: pointer; - padding: .2em .6em .3em .6em; - width: auto; - overflow: visible; -} -.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { - float: left; -} - -/* with multiple calendars */ -.ui-datepicker.ui-datepicker-multi { - width: auto; -} -.ui-datepicker-multi .ui-datepicker-group { - float: left; -} -.ui-datepicker-multi .ui-datepicker-group table { - width: 95%; - margin: 0 auto .4em; -} -.ui-datepicker-multi-2 .ui-datepicker-group { - width: 50%; -} -.ui-datepicker-multi-3 .ui-datepicker-group { - width: 33.3%; -} -.ui-datepicker-multi-4 .ui-datepicker-group { - width: 25%; -} -.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { - border-left-width: 0; -} -.ui-datepicker-multi .ui-datepicker-buttonpane { - clear: left; -} -.ui-datepicker-row-break { - clear: both; - width: 100%; - font-size: 0; -} - -/* RTL support */ -.ui-datepicker-rtl { - direction: rtl; -} -.ui-datepicker-rtl .ui-datepicker-prev { - right: 2px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next { - left: 2px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-prev:hover { - right: 1px; - left: auto; -} -.ui-datepicker-rtl .ui-datepicker-next:hover { - left: 1px; - right: auto; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane { - clear: right; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button { - float: left; -} -.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current, -.ui-datepicker-rtl .ui-datepicker-group { - float: right; -} -.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, -.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { - border-right-width: 0; - border-left-width: 1px; -} - -/* Icons */ -.ui-datepicker .ui-icon { - display: block; - text-indent: -99999px; - overflow: hidden; - background-repeat: no-repeat; - left: .5em; - top: .3em; -} -.ui-dialog { - position: absolute; - top: 0; - left: 0; - padding: .2em; - outline: 0; -} -.ui-dialog .ui-dialog-titlebar { - padding: .4em 1em; - position: relative; -} -.ui-dialog .ui-dialog-title { - float: left; - margin: .1em 0; - white-space: nowrap; - width: 90%; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-dialog .ui-dialog-titlebar-close { - position: absolute; - right: .3em; - top: 50%; - width: 20px; - margin: -10px 0 0 0; - padding: 1px; - height: 20px; -} -.ui-dialog .ui-dialog-content { - position: relative; - border: 0; - padding: .5em 1em; - background: none; - overflow: auto; -} -.ui-dialog .ui-dialog-buttonpane { - text-align: left; - border-width: 1px 0 0 0; - background-image: none; - margin-top: .5em; - padding: .3em 1em .5em .4em; -} -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { - float: right; -} -.ui-dialog .ui-dialog-buttonpane button { - margin: .5em .4em .5em 0; - cursor: pointer; -} -.ui-dialog .ui-resizable-n { - height: 2px; - top: 0; -} -.ui-dialog .ui-resizable-e { - width: 2px; - right: 0; -} -.ui-dialog .ui-resizable-s { - height: 2px; - bottom: 0; -} -.ui-dialog .ui-resizable-w { - width: 2px; - left: 0; -} -.ui-dialog .ui-resizable-se, -.ui-dialog .ui-resizable-sw, -.ui-dialog .ui-resizable-ne, -.ui-dialog .ui-resizable-nw { - width: 7px; - height: 7px; -} -.ui-dialog .ui-resizable-se { - right: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-sw { - left: 0; - bottom: 0; -} -.ui-dialog .ui-resizable-ne { - right: 0; - top: 0; -} -.ui-dialog .ui-resizable-nw { - left: 0; - top: 0; -} -.ui-draggable .ui-dialog-titlebar { - cursor: move; -} -.ui-progressbar { - height: 2em; - text-align: left; - overflow: hidden; -} -.ui-progressbar .ui-progressbar-value { - margin: -1px; - height: 100%; -} -.ui-progressbar .ui-progressbar-overlay { - background: url("data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw=="); - height: 100%; - filter: alpha(opacity=25); /* support: IE8 */ - opacity: 0.25; -} -.ui-progressbar-indeterminate .ui-progressbar-value { - background-image: none; -} -.ui-selectmenu-menu { - padding: 0; - margin: 0; - position: absolute; - top: 0; - left: 0; - display: none; -} -.ui-selectmenu-menu .ui-menu { - overflow: auto; - overflow-x: hidden; - padding-bottom: 1px; -} -.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup { - font-size: 1em; - font-weight: bold; - line-height: 1.5; - padding: 2px 0.4em; - margin: 0.5em 0 0 0; - height: auto; - border: 0; -} -.ui-selectmenu-open { - display: block; -} -.ui-selectmenu-text { - display: block; - margin-right: 20px; - overflow: hidden; - text-overflow: ellipsis; -} -.ui-selectmenu-button.ui-button { - text-align: left; - white-space: nowrap; - width: 14em; -} -.ui-selectmenu-icon.ui-icon { - float: right; - margin-top: 0; -} -.ui-slider { - position: relative; - text-align: left; -} -.ui-slider .ui-slider-handle { - position: absolute; - z-index: 2; - width: 1.2em; - height: 1.2em; - cursor: default; - -ms-touch-action: none; - touch-action: none; -} -.ui-slider .ui-slider-range { - position: absolute; - z-index: 1; - font-size: .7em; - display: block; - border: 0; - background-position: 0 0; -} - -/* support: IE8 - See #6727 */ -.ui-slider.ui-state-disabled .ui-slider-handle, -.ui-slider.ui-state-disabled .ui-slider-range { - filter: inherit; -} - -.ui-slider-horizontal { - height: .8em; -} -.ui-slider-horizontal .ui-slider-handle { - top: -.3em; - margin-left: -.6em; -} -.ui-slider-horizontal .ui-slider-range { - top: 0; - height: 100%; -} -.ui-slider-horizontal .ui-slider-range-min { - left: 0; -} -.ui-slider-horizontal .ui-slider-range-max { - right: 0; -} - -.ui-slider-vertical { - width: .8em; - height: 100px; -} -.ui-slider-vertical .ui-slider-handle { - left: -.3em; - margin-left: 0; - margin-bottom: -.6em; -} -.ui-slider-vertical .ui-slider-range { - left: 0; - width: 100%; -} -.ui-slider-vertical .ui-slider-range-min { - bottom: 0; -} -.ui-slider-vertical .ui-slider-range-max { - top: 0; -} -.ui-spinner { - position: relative; - display: inline-block; - overflow: hidden; - padding: 0; - vertical-align: middle; -} -.ui-spinner-input { - border: none; - background: none; - color: inherit; - padding: .222em 0; - margin: .2em 0; - vertical-align: middle; - margin-left: .4em; - margin-right: 2em; -} -.ui-spinner-button { - width: 1.6em; - height: 50%; - font-size: .5em; - padding: 0; - margin: 0; - text-align: center; - position: absolute; - cursor: default; - display: block; - overflow: hidden; - right: 0; -} -/* more specificity required here to override default borders */ -.ui-spinner a.ui-spinner-button { - border-top-style: none; - border-bottom-style: none; - border-right-style: none; -} -.ui-spinner-up { - top: 0; -} -.ui-spinner-down { - bottom: 0; -} -.ui-tabs { - position: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ - padding: .2em; -} -.ui-tabs .ui-tabs-nav { - margin: 0; - padding: .2em .2em 0; -} -.ui-tabs .ui-tabs-nav li { - list-style: none; - float: left; - position: relative; - top: 0; - margin: 1px .2em 0 0; - border-bottom-width: 0; - padding: 0; - white-space: nowrap; -} -.ui-tabs .ui-tabs-nav .ui-tabs-anchor { - float: left; - padding: .5em 1em; - text-decoration: none; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active { - margin-bottom: -1px; - padding-bottom: 1px; -} -.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, -.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor { - cursor: text; -} -.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor { - cursor: pointer; -} -.ui-tabs .ui-tabs-panel { - display: block; - border-width: 0; - padding: 1em 1.4em; - background: none; -} -.ui-tooltip { - padding: 8px; - position: absolute; - z-index: 9999; - max-width: 300px; -} -body .ui-tooltip { - border-width: 2px; -} - -/* Component containers -----------------------------------*/ -.ui-widget { - font-family: Verdana,Arial,sans-serif; - font-size: 1.1em; -} -.ui-widget .ui-widget { - font-size: 1em; -} -.ui-widget input, -.ui-widget select, -.ui-widget textarea, -.ui-widget button { - font-family: Verdana,Arial,sans-serif; - font-size: 1em; -} -.ui-widget.ui-widget-content { - border: 1px solid #d3d3d3; -} -.ui-widget-content { - border: 1px solid #aaaaaa; - background: #ffffff; - color: #222222; -} -.ui-widget-content a { - color: #222222; -} -.ui-widget-header { - border: 1px solid #aaaaaa; - background: #cccccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x; - color: #222222; - font-weight: bold; -} -.ui-widget-header a { - color: #222222; -} - -/* Interaction states -----------------------------------*/ -.ui-state-default, -.ui-widget-content .ui-state-default, -.ui-widget-header .ui-state-default, -.ui-button, - -/* We use html here because we need a greater specificity to make sure disabled -works properly when clicked or hovered */ -html .ui-button.ui-state-disabled:hover, -html .ui-button.ui-state-disabled:active { - border: 1px solid #d3d3d3; - background: #e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #555555; -} -.ui-state-default a, -.ui-state-default a:link, -.ui-state-default a:visited, -a.ui-button, -a:link.ui-button, -a:visited.ui-button, -.ui-button { - color: #555555; - text-decoration: none; -} -.ui-state-hover, -.ui-widget-content .ui-state-hover, -.ui-widget-header .ui-state-hover, -.ui-state-focus, -.ui-widget-content .ui-state-focus, -.ui-widget-header .ui-state-focus, -.ui-button:hover, -.ui-button:focus { - border: 1px solid #999999; - background: #dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-state-hover a, -.ui-state-hover a:hover, -.ui-state-hover a:link, -.ui-state-hover a:visited, -.ui-state-focus a, -.ui-state-focus a:hover, -.ui-state-focus a:link, -.ui-state-focus a:visited, -a.ui-button:hover, -a.ui-button:focus { - color: #212121; - text-decoration: none; -} - -.ui-visual-focus { - box-shadow: 0 0 3px 1px rgb(94, 158, 214); -} -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - border: 1px solid #aaaaaa; - background: #ffffff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x; - font-weight: normal; - color: #212121; -} -.ui-icon-background, -.ui-state-active .ui-icon-background { - border: #aaaaaa; - background-color: #212121; -} -.ui-state-active a, -.ui-state-active a:link, -.ui-state-active a:visited { - color: #212121; - text-decoration: none; -} - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, -.ui-widget-content .ui-state-highlight, -.ui-widget-header .ui-state-highlight { - border: 1px solid #fcefa1; - background: #fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x; - color: #363636; -} -.ui-state-checked { - border: 1px solid #fcefa1; - background: #fbf9ee; -} -.ui-state-highlight a, -.ui-widget-content .ui-state-highlight a, -.ui-widget-header .ui-state-highlight a { - color: #363636; -} -.ui-state-error, -.ui-widget-content .ui-state-error, -.ui-widget-header .ui-state-error { - border: 1px solid #cd0a0a; - background: #fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x; - color: #cd0a0a; -} -.ui-state-error a, -.ui-widget-content .ui-state-error a, -.ui-widget-header .ui-state-error a { - color: #cd0a0a; -} -.ui-state-error-text, -.ui-widget-content .ui-state-error-text, -.ui-widget-header .ui-state-error-text { - color: #cd0a0a; -} -.ui-priority-primary, -.ui-widget-content .ui-priority-primary, -.ui-widget-header .ui-priority-primary { - font-weight: bold; -} -.ui-priority-secondary, -.ui-widget-content .ui-priority-secondary, -.ui-widget-header .ui-priority-secondary { - opacity: .7; - filter:Alpha(Opacity=70); /* support: IE8 */ - font-weight: normal; -} -.ui-state-disabled, -.ui-widget-content .ui-state-disabled, -.ui-widget-header .ui-state-disabled { - opacity: .35; - filter:Alpha(Opacity=35); /* support: IE8 */ - background-image: none; -} -.ui-state-disabled .ui-icon { - filter:Alpha(Opacity=35); /* support: IE8 - See #6059 */ -} - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { - width: 16px; - height: 16px; -} -.ui-icon, -.ui-widget-content .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-widget-header .ui-icon { - background-image: url("images/ui-icons_222222_256x240.png"); -} -.ui-state-hover .ui-icon, -.ui-state-focus .ui-icon, -.ui-button:hover .ui-icon, -.ui-button:focus .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-active .ui-icon, -.ui-button:active .ui-icon { - background-image: url("images/ui-icons_454545_256x240.png"); -} -.ui-state-highlight .ui-icon, -.ui-button .ui-state-highlight.ui-icon { - background-image: url("images/ui-icons_2e83ff_256x240.png"); -} -.ui-state-error .ui-icon, -.ui-state-error-text .ui-icon { - background-image: url("images/ui-icons_cd0a0a_256x240.png"); -} -.ui-button .ui-icon { - background-image: url("images/ui-icons_888888_256x240.png"); -} - -/* positioning */ -.ui-icon-blank { background-position: 16px 16px; } -.ui-icon-caret-1-n { background-position: 0 0; } -.ui-icon-caret-1-ne { background-position: -16px 0; } -.ui-icon-caret-1-e { background-position: -32px 0; } -.ui-icon-caret-1-se { background-position: -48px 0; } -.ui-icon-caret-1-s { background-position: -65px 0; } -.ui-icon-caret-1-sw { background-position: -80px 0; } -.ui-icon-caret-1-w { background-position: -96px 0; } -.ui-icon-caret-1-nw { background-position: -112px 0; } -.ui-icon-caret-2-n-s { background-position: -128px 0; } -.ui-icon-caret-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -65px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -65px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 1px -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-on { background-position: -96px -144px; } -.ui-icon-radio-off { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-all, -.ui-corner-top, -.ui-corner-left, -.ui-corner-tl { - border-top-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-top, -.ui-corner-right, -.ui-corner-tr { - border-top-right-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-left, -.ui-corner-bl { - border-bottom-left-radius: 4px; -} -.ui-corner-all, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-br { - border-bottom-right-radius: 4px; -} - -/* Overlays */ -.ui-widget-overlay { - background: #aaaaaa; - opacity: .3; - filter: Alpha(Opacity=30); /* support: IE8 */ -} -.ui-widget-shadow { - -webkit-box-shadow: -8px -8px 8px #aaaaaa; - box-shadow: -8px -8px 8px #aaaaaa; -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_breadcrumb.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_breadcrumb.scss deleted file mode 100644 index 513f587..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_breadcrumb.scss +++ /dev/null @@ -1,22 +0,0 @@ -@import "../../bootstrap/scss/breadcrumb"; - -.breadcrumb-navbar { - text-shadow: 0 1px 0 #000; - - .breadcrumb-item { - + .breadcrumb-comment { - padding-left: 0.5rem; - } - - a { - color: #fff; - } - } - - .breadcrumb-comment { - color: #d6d6d6; - font-weight: bold; - font-style: italic; - text-shadow: none; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_designer.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_designer.scss deleted file mode 100644 index 9348dc6..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_designer.scss +++ /dev/null @@ -1,497 +0,0 @@ -$minus-img: '../img/designer/minus.png'; -$plus-img: '../img/designer/plus.png'; -$top-panel-img: '../img/designer/top_panel.png'; -$small-tab-img: '../img/designer/small_tab.png'; -$frams1-img: '../img/designer/1.png'; -$frams2-img: '../img/designer/2.png'; -$frams3-img: '../img/designer/3.png'; -$frams4-img: '../img/designer/4.png'; -$frams5-img: '../img/designer/5.png'; -$frams6-img: '../img/designer/6.png'; -$frams7-img: '../img/designer/7.png'; -$frams8-img: '../img/designer/8.png'; -$resize-img: '../img/designer/resize.png'; - -/* Designer */ -.input_tab { - background-color: #a6c7e1; - color: #000; -} - -.content_fullscreen { - position: relative; - overflow: auto; -} - -#canvas_outer { - position: relative; - width: 100%; - display: block; -} - -#canvas { - background-color: #fff; - color: #000; -} - -canvas.designer { - display: inline-block; - overflow: hidden; - text-align: left; - - * { - behavior: url(#default#VML); - } -} - -.designer_tab { - background-color: #fff; - color: #000; - border-collapse: collapse; - border: 1px solid #aaa; - z-index: 1; - user-select: none; - - .header { - background: linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%); - } -} - -.tab_zag { - text-align: center; - cursor: move; - padding: 1px; - font-weight: bold; -} - -.tab_zag_2 { - background: linear-gradient(#fffa96 0%, #fffa96 39%, #ffe796 40%, #ffe796 100%); - background-repeat: repeat-x; - text-align: center; - cursor: move; - padding: 1px; - font-weight: bold; -} - -.tab_field { - background: #fff; - color: #000; - cursor: default; - - &:hover { - background-color: #cfc; - color: #000; - background-repeat: repeat-x; - cursor: default; - } -} - -.tab_field_3 { - background-color: #ffe6e6 !important; - color: #000; - cursor: default; - - &:hover { - background-color: #cfc; - color: #000; - background-repeat: repeat-x; - cursor: default; - } -} - -#designer_hint { - white-space: nowrap; - position: absolute; - background-color: #9f9; - color: #000; - z-index: 3; - border: #0c6 solid 1px; - display: none; -} - -#designer_body #page_content { - margin: 0; -} - -.scroll_tab { - overflow: auto; - width: 100%; - height: 500px; -} - -.designer_Tabs { - cursor: default; - color: #05b; - white-space: nowrap; - text-decoration: none; - text-indent: 3px; - font-weight: bold; - margin-left: 2px; - text-align: left; - background: linear-gradient(#fff, #dfe5e7 70%, #fff 70%, #fff 100%); - border: #ccc solid 1px; - - &:hover { - cursor: default; - color: #05b; - background: #fe9; - text-indent: 3px; - font-weight: bold; - white-space: nowrap; - text-decoration: none; - border: #99f solid 1px; - text-align: left; - } -} - -.owner { - font-weight: normal; - color: #888; -} - -.option_tab { - padding-left: 2px; - padding-right: 2px; - width: 5px; -} - -.select_all { - vertical-align: top; - padding-left: 2px; - padding-right: 2px; - cursor: default; - width: 1px; - color: #000; - background: linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%); -} - -.small_tab { - vertical-align: top; - background-color: #0064ea; - color: #fff; - background-image: url($small-tab-img); - cursor: default; - text-align: center; - font-weight: bold; - padding-left: 2px; - padding-right: 2px; - width: 1px; - text-decoration: none; - - &:hover { - vertical-align: top; - color: #fff; - background-color: #f96; - cursor: default; - padding-left: 2px; - padding-right: 2px; - text-align: center; - font-weight: bold; - width: 1px; - text-decoration: none; - } -} - -.small_tab_pref { - background: linear-gradient(#b8e6fa, #b8e6fa 6%, #cdf5fd 10%, #dbffff 10%, #9bd2f6 50%, #9bd2f6 100%); - text-align: center; - width: 1px; - - &:hover { - vertical-align: top; - color: #fff; - background-color: #f96; - cursor: default; - text-align: center; - font-weight: bold; - width: 1px; - text-decoration: none; - } -} - -.butt { - border: #47a solid 1px; - font-weight: bold; - background-color: #fff; - color: #000; - vertical-align: baseline; -} - -.L_butt2_1 { - padding: 1px; - text-decoration: none; - vertical-align: middle; - cursor: default; - - &:hover { - padding: 0; - border: #09c solid 1px; - background: #fe9; - color: #000; - text-decoration: none; - vertical-align: middle; - cursor: default; - } -} - -/* --------------------------------------------------------------------------- */ -.bor { - width: 10px; - height: 10px; -} - -.frams1 { - background: url($frams1-img) no-repeat right bottom; -} - -.frams2 { - background: url($frams2-img) no-repeat left bottom; -} - -.frams3 { - background: url($frams3-img) no-repeat left top; -} - -.frams4 { - background: url($frams4-img) no-repeat right top; -} - -.frams5 { - background: url($frams5-img) repeat-x center bottom; -} - -.frams6 { - background: url($frams6-img) repeat-y left; -} - -.frams7 { - background: url($frams7-img) repeat-x top; -} - -.frams8 { - background: url($frams8-img) repeat-y right; -} - -#osn_tab { - position: absolute; - background-color: #fff; - color: #000; -} - -.designer_header { - background-color: #eaeef0; - color: #000; - text-align: center; - font-weight: bold; - margin: 0; - padding: 0; - background-image: url($top-panel-img); - background-position: top; - background-repeat: repeat-x; - border-right: #999 solid 1px; - border-left: #999 solid 1px; - height: 28px; - z-index: 101; - width: 100%; - position: fixed; - - a, - span { - display: block; - float: left; - margin: 3px 1px 4px; - height: 20px; - border: 1px dotted #fff; - } - - .M_bord { - display: block; - float: left; - margin: 4px; - height: 20px; - width: 2px; - } - - a { - &.first { - margin-right: 1em; - } - - &.last { - margin-left: 1em; - } - } -} - -a { - &.M_butt_Selected_down_IE, - &.M_butt_Selected_down { - border: 1px solid #c0c0bb; - background-color: #9f9; - color: #000; - - &:hover { - border: 1px solid #09c; - background-color: #fe9; - color: #000; - } - } - - &.M_butt:hover { - border: 1px solid #09c; - background-color: #fe9; - color: #000; - } -} - -#layer_menu { - z-index: 98; - position: relative; - float: right; - background-color: #eaeef0; - border: #999 solid 1px; -} - -#layer_upd_relation { - position: absolute; - left: 637px; - top: 224px; - z-index: 100; -} - -#layer_new_relation, -#designer_optionse { - position: absolute; - left: 636px; - top: 85px; - z-index: 100; - width: 153px; -} - -#layer_menu_sizer { - background-image: url($resize-img); - cursor: ew-resize; - - .icon { - margin: 0; - } -} - -.panel { - position: fixed; - top: 60px; - right: 0; - width: 350px; - max-height: 500px; - display: none; - overflow: auto; - padding-top: 34px; - z-index: 102; -} - -a { - &.trigger { - position: fixed; - text-decoration: none; - top: 60px; - right: 0; - color: #fff; - padding: 10px 40px 10px 15px; - background: #333 url($plus-img) 85% 55% no-repeat; - border: 1px solid #444; - display: block; - z-index: 102; - - &:hover { - color: #080808; - background: #fff696 url($plus-img) 85% 55% no-repeat; - border: 1px solid #999; - } - } - - &.active.trigger { - background: #222 url($minus-img) 85% 55% no-repeat; - z-index: 999; - - &:hover { - background: #fff696 url($minus-img) 85% 55% no-repeat; - } - } -} - -.toggle_container .block { - background-color: #dbe4e8; - border-top: 1px solid #999; -} - -.history_table { - text-align: center; - cursor: pointer; - background-color: #dbe4e8; - - &:hover { - background-color: #99c; - } -} - -#ab { - min-width: 300px; - - .ui-accordion-content { - padding: 0; - } -} - -#foreignkeychk { - text-align: left; - cursor: pointer; -} - -.side-menu { - float: left; - position: fixed; - width: auto; - height: auto; - background: #efefef; - border: 1px solid grey; - overflow: hidden; - z-index: 50; - padding: 2px; - - &.right { - float: right; - right: 0; - } - - .hide { - display: none; - } - - a { - display: block; - float: none; - overflow: hidden; - line-height: 1em; - } - - img, - .text { - float: left; - } -} - -#name-panel { - border-bottom: 1px solid grey; - text-align: center; - background: #efefef; - width: 100%; - font-size: 1.2em; - padding: 5px; - font-weight: bold; -} - -#container-form { - width: 100%; - position: absolute; - left: 0; -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_forms.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_forms.scss deleted file mode 100644 index da3ffce..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_forms.scss +++ /dev/null @@ -1,5 +0,0 @@ -select#fieldsSelect, -textarea#sqlquery { - margin: 0; - height: 20rem; -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_jqplot.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_jqplot.scss deleted file mode 100644 index f3d92f8..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_jqplot.scss +++ /dev/null @@ -1,275 +0,0 @@ -/* jqPlot */ - -// rules for the plot target div. These will be cascaded down to all plot elements according to css rules -.jqplot-target { - position: relative; - color: #222; - font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; - font-size: 1em; -} - -// rules applied to all axes -.jqplot-axis { - font-size: 0.75em; -} - -.jqplot-xaxis { - margin-top: 10px; -} - -.jqplot-x2axis { - margin-bottom: 10px; -} - -.jqplot-yaxis { - margin-right: 10px; -} - -.jqplot-y2axis, -.jqplot-y3axis, -.jqplot-y4axis, -.jqplot-y5axis, -.jqplot-y6axis, -.jqplot-y7axis, -.jqplot-y8axis, -.jqplot-y9axis, -.jqplot-yMidAxis { - margin-left: 10px; - margin-right: 10px; -} - -// rules applied to all axis tick divs -.jqplot-axis-tick, -.jqplot-xaxis-tick, -.jqplot-yaxis-tick, -.jqplot-x2axis-tick, -.jqplot-y2axis-tick, -.jqplot-y3axis-tick, -.jqplot-y4axis-tick, -.jqplot-y5axis-tick, -.jqplot-y6axis-tick, -.jqplot-y7axis-tick, -.jqplot-y8axis-tick, -.jqplot-y9axis-tick, -.jqplot-yMidAxis-tick { - position: absolute; - white-space: pre; -} - -.jqplot-xaxis-tick { - top: 0; - // initial position untill tick is drawn in proper place - left: 15px; - vertical-align: top; -} - -.jqplot-x2axis-tick { - bottom: 0; - // initial position untill tick is drawn in proper place - left: 15px; - vertical-align: bottom; -} - -.jqplot-yaxis-tick { - right: 0; - // initial position untill tick is drawn in proper place - top: 15px; - text-align: right; - - &.jqplot-breakTick { - right: -20px; - margin-right: 0; - padding: 1px 5px 1px; - z-index: 2; - font-size: 1.5em; - } -} - -.jqplot-y2axis-tick, -.jqplot-y3axis-tick, -.jqplot-y4axis-tick, -.jqplot-y5axis-tick, -.jqplot-y6axis-tick, -.jqplot-y7axis-tick, -.jqplot-y8axis-tick, -.jqplot-y9axis-tick { - left: 0; - // initial position untill tick is drawn in proper place - top: 15px; - text-align: left; -} - -.jqplot-yMidAxis-tick { - text-align: center; - white-space: nowrap; -} - -.jqplot-xaxis-label { - margin-top: 10px; - font-size: 11pt; - position: absolute; -} - -.jqplot-x2axis-label { - margin-bottom: 10px; - font-size: 11pt; - position: absolute; -} - -.jqplot-yaxis-label { - margin-right: 10px; - font-size: 11pt; - position: absolute; -} - -.jqplot-yMidAxis-label { - font-size: 11pt; - position: absolute; -} - -.jqplot-y2axis-label, -.jqplot-y3axis-label, -.jqplot-y4axis-label, -.jqplot-y5axis-label, -.jqplot-y6axis-label, -.jqplot-y7axis-label, -.jqplot-y8axis-label, -.jqplot-y9axis-label { - font-size: 11pt; - margin-left: 10px; - position: absolute; -} - -.jqplot-meterGauge-tick { - font-size: 0.75em; - color: #999; -} - -.jqplot-meterGauge-label { - font-size: 1em; - color: #999; -} - -table { - &.jqplot-table-legend { - margin-top: 12px; - margin-bottom: 12px; - margin-left: 12px; - margin-right: 12px; - background-color: rgba(255, 255, 255, 0.6); - border: 1px solid #ccc; - position: absolute; - font-size: 0.75em; - } - - &.jqplot-cursor-legend { - background-color: rgba(255, 255, 255, 0.6); - border: 1px solid #ccc; - position: absolute; - font-size: 0.75em; - } -} - -td { - &.jqplot-table-legend { - vertical-align: middle; - } - - &.jqplot-seriesToggle { - &:hover, - &:active { - cursor: pointer; - } - } -} - -.jqplot-table-legend .jqplot-series-hidden { - text-decoration: line-through; -} - -div { - &.jqplot-table-legend-swatch-outline { - border: 1px solid #ccc; - padding: 1px; - } - - &.jqplot-table-legend-swatch { - width: 0; - height: 0; - border-top-width: 5px; - border-bottom-width: 5px; - border-left-width: 6px; - border-right-width: 6px; - border-top-style: solid; - border-bottom-style: solid; - border-left-style: solid; - border-right-style: solid; - } -} - -.jqplot-title { - top: 0; - left: 0; - padding-bottom: 0.5em; - font-size: 1.2em; -} - -table.jqplot-cursor-tooltip { - border: 1px solid #ccc; - font-size: 0.75em; -} - -.jqplot-cursor-tooltip, -.jqplot-highlighter-tooltip, -.jqplot-canvasOverlay-tooltip { - border: 1px solid #ccc; - font-size: 1em; - white-space: nowrap; - background: rgba(208, 208, 208, 0.8); - padding: 1px; -} - -.jqplot-point-label { - font-size: 0.75em; - z-index: 2; -} - -td.jqplot-cursor-legend-swatch { - vertical-align: middle; - text-align: center; -} - -div.jqplot-cursor-legend-swatch { - width: 1.2em; - height: 0.7em; -} - -.jqplot-error { - // Styles added to the plot target container when there is an error go here. - text-align: center; -} - -.jqplot-error-message { - // Styling of the custom error message div goes here. - position: relative; - top: 46%; - display: inline-block; -} - -div { - &.jqplot-bubble-label { - font-size: 0.8em; - padding-left: 2px; - padding-right: 2px; - color: rgb(20%, 20%, 20%); - - &.jqplot-bubble-label-highlight { - background: rgba(90%, 90%, 90%, 0.7); - } - } - - &.jqplot-noData-container { - text-align: center; - background-color: rgba(96%, 96%, 96%, 0.3); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_modal.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_modal.scss deleted file mode 100644 index 2d6d99a..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_modal.scss +++ /dev/null @@ -1,3 +0,0 @@ -.modal-header { - background-image: linear-gradient(#f8f8f8, #d8d8d8); -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_navigation.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_navigation.scss deleted file mode 100644 index be107c7..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_navigation.scss +++ /dev/null @@ -1,463 +0,0 @@ -// Navigation styles for the pmahomme theme -#pma_navigation { - width: $navi-width; - position: fixed; - top: 0; - left: 0; - height: 100vh; - background: linear-gradient(to right, $navi-background, $navi-right-gradient); - color: $navi-color; - z-index: 800; - - ul { - margin: 0; - } - - form { - margin: 0; - padding: 0; - display: inline; - } - - select { - &#select_server, - &#lightm_db { - width: 100%; - } - } - - div { - &.pageselector { - text-align: center; - margin: 0; - margin-left: 0.75em; - border-left: 1px solid #666; - } - } - - #pmalogo, - #serverChoice, - #navipanellinks, - #recentTableList, - #favoriteTableList, - #databaseList, - div.pageselector.dbselector { - text-align: center; - padding: 5px 10px 0; - border: 0; - } - - #navipanellinks .icon { - margin: 0; - } - - #recentTable, - #favoriteTable { - width: 200px; - } - - #favoriteTableList select, - #serverChoice select { - width: 80%; - } -} - -#pma_navigation_header { - overflow: hidden; -} - -#pma_navigation_content { - width: 100%; - height: 100%; - position: absolute; - top: 0; - left: 0; - z-index: 0; - - > img.throbber { - display: none; - margin: 0.3em auto 0; - } -} - -#pma_navigation_select_database { - text-align: left; - padding: 0 0 0; - border: 0; - margin: 0; -} - -#pma_navigation_db_select { - margin-top: 0.5em; - margin-left: 0.75em; - - select { - background: linear-gradient(#fff, #f1f1f1, #fff); - -webkit-border-radius: 2px; - border-radius: 2px; - border: 1px solid #bbb; - border-top: 1px solid #bbb; - color: #333; - padding: 4px 6px; - margin: 0 0 0; - width: 92%; - font-size: 1.11em; - } -} - -#pma_navigation_tree_content { - width: 100%; - overflow: hidden; - overflow-y: auto; - position: absolute; - height: 100%; - - a.hover_show_full { - position: relative; - z-index: 100; - vertical-align: sub; - } -} - -#pma_navigation_tree { - margin: 0; - margin-left: 5px; - overflow: hidden; - color: #444; - height: 74%; - position: relative; - - a { - color: $navi-color; - padding-left: 0; - - &:hover { - text-decoration: underline; - } - } - - ul { - clear: both; - padding: 0; - list-style-type: none; - margin: 0; - - ul { - position: relative; - } - } - - li { - margin-bottom: 0; - - &.activePointer, - &.selected { - color: $navi-pointer-color; - background-color: $navi-pointer-background; - } - - .dbItemControls { - padding-right: 4px; - float: right; - } - - .navItemControls { - display: none; - padding-right: 4px; - float: right; - } - - &.activePointer .navItemControls { - display: block; - opacity: 0.5; - - &:hover { - opacity: 1; - } - } - } - - li { - white-space: nowrap; - clear: both; - min-height: 16px; - - &.fast_filter { - white-space: nowrap; - clear: both; - min-height: 16px; - } - } - - img { - margin: 0; - } - - i { - display: block; - } - - div { - &.block { - position: relative; - width: 1.5em; - height: 1.5em; - min-width: 16px; - min-height: 16px; - float: left; - - &.double { - width: 2.5em; - } - - i, - b { - width: 1.5em; - height: 1.7em; - min-width: 16px; - min-height: 8px; - position: absolute; - bottom: 0.7em; - left: 0.75em; - z-index: 0; - } - - // Top and right segments for the tree element connections - i { - display: block; - border-left: 1px solid #666; - border-bottom: 1px solid #666; - position: relative; - z-index: 0; - - // Removes top segment - &.first { - border-left: 0; - } - } - - // Bottom segment for the tree element connections - b { - display: block; - height: 0.75em; - bottom: 0; - left: 0.75em; - border-left: 1px solid #666; - } - - a, - u { - position: absolute; - left: 50%; - top: 50%; - z-index: 10; - } - - a + a { - left: 100%; - } - - &.double { - a, - u { - left: 33%; - } - - a + a { - left: 85%; - } - } - - img { - position: relative; - top: -0.6em; - left: 0; - margin-left: -7px; - } - } - - &.throbber img { - top: 2px; - left: 2px; - } - } - - li { - &.last > ul { - background: none; - } - - > { - a, - i { - line-height: 1.5em; - height: 1.5em; - padding-left: 0.3em; - } - } - } - - .list_container { - border-left: 1px solid #666; - margin-left: 0.75em; - padding-left: 0.75em; - - li.last.database { - // Revert the effect of the rule that is applied on all the tree - margin-bottom: 0 !important; - } - } - - .last > .list_container { - border-left: 0 solid #666; - } -} - -// Fast filter -li.fast_filter { - padding-left: 0.75em; - margin-left: 0.75em; - padding-right: 35px; - border-left: 1px solid #666; - list-style: none; - - input { - font-size: 0.7em; - } - - .searchClauseClear { - border: 0; - font-weight: bold; - color: #800; - font-size: 0.7em; - } - - .searchClauseClear:hover { - background-color: transparent; - border-color: transparent; - } - - &.db_fast_filter { - border: 0; - margin-left: 0; - } -} - -#navigation_controls_outer { - min-height: 21px !important; - - &.activePointer { - background-color: transparent !important; - } -} - -#navigation_controls { - float: right; - padding-right: 23px; -} - -// Resize handler -#pma_navigation_resizer { - width: 3px; - height: 100%; - background-color: #aaa; - cursor: col-resize; - position: fixed; - top: 0; - left: 240px; - z-index: 801; -} - -#pma_navigation_collapser { - width: 20px; - height: 22px; - line-height: 22px; - background: #eee; - color: #555; - font-weight: bold; - position: fixed; - top: 0; - left: $navi-width; - text-align: center; - cursor: pointer; - z-index: 800; - text-shadow: 0 1px 0 #fff; - filter: dropshadow(color = #fff, offx = 0, offy = 1); - border: 1px solid #888; -} - -// Quick warp links -.pma_quick_warp { - margin-top: 5px; - margin-left: 2px; - position: relative; - - .drop_list { - float: left; - margin-left: 3px; - padding: 2px 0; - - &:hover { - .drop_button { - background: #fff; - } - - ul { - display: block; - } - } - - ul { - position: absolute; - margin: 0; - padding: 0; - overflow: hidden; - overflow-y: auto; - list-style: none; - background: #fff; - border: 1px solid #ddd; - border-radius: 0.3em; - border-top-right-radius: 0; - border-bottom-right-radius: 0; - box-shadow: 0 0 5px #ccc; - top: 100%; - left: 3px; - right: 0; - display: none; - z-index: 802; - } - - li { - white-space: nowrap; - padding: 0; - border-radius: 0; - - img { - vertical-align: sub; - } - - &:hover { - background: #f2f2f2; - } - } - - a { - display: block; - padding: 0.2em 0.3em; - - &.favorite_table_anchor { - clear: left; - float: left; - padding: 0.1em 0.3em 0; - } - } - } - - .drop_button { - padding: 0.3em; - border: 1px solid #ddd; - border-radius: 0.3em; - background: #f2f2f2; - cursor: pointer; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_variables.scss b/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_variables.scss deleted file mode 100644 index 0df06fe..0000000 --- a/Sources/php_script/script/phpMyAdmin/themes/pmahomme/scss/_variables.scss +++ /dev/null @@ -1,177 +0,0 @@ -// configures general layout for detailed layout configuration please refer to the css files - -// navi frame - -// navi frame width -$navi-width: 240px; - -// foreground (text) color for the navi frame -$navi-color: #000; - -// background for the navi frame -$navi-background: #f3f3f3; -$navi-right-gradient: #dadcde; - -// foreground (text) color of the pointer in navi frame -$navi-pointer-color: #000; - -// background of the pointer in navi frame -$navi-pointer-background: #ddd; - -// main frame - -// foreground (text) color for the main frame -$main-color: #444; - -// foreground (text) color of the pointer in browse mode -$browse-pointer-color: #000; - -// background of the pointer in browse mode -$browse-pointer-background: #cfc; - -// foreground (text) color of the marker (visually marks row by clicking on it) -// in browse mode -$browse-marker-color: #000; - -// background of the marker (visually marks row by clicking on it) in browse mode -$browse-marker-background: #fc9; - -// tables - -// border -$border: 0; -// table header and footer color -$th-background: #d3dce3; -// table header and footer background -$th-color: #000; -// table data row background -$bg-one: #e5e5e5; -// table data row background, alternate -$bg-two: #d5d5d5; - -// Bootstrap -// --------- - -// Body - -$body-color: $main-color; - -// Links - -$link-color: #235a81; -$link-decoration: none; -$link-hover-color: #235a81; -$link-hover-decoration: underline; - -// Typography - -$font-family-base: sans-serif; -$font-family-monospace: monospace; - -$font-size-base: 0.82rem; - -$h1-font-size: 140%; -$h2-font-size: 2em; -$h3-font-size: 1rem; - -// Tables - -$table-cell-padding: 0.1em 0.3em; -$table-cell-padding-sm: $table-cell-padding; -$table-head-bg: #fff; -$table-head-color: $th-color; -$table-striped-order: even; -$table-hover-color: $browse-pointer-color; -$table-border-color: #fff; -$table-border-width: 0; - -// Buttons - -$enable-gradients: true; -$enable-shadows: true; -$enable-transitions: false; - -$primary: #ddd; -$secondary: #ddd; - -$btn-border-radius: 0.85rem; -$btn-line-height: 1.15; - -// Dropdowns - -$dropdown-padding-y: 0; -$dropdown-item-padding-y: 0; -$dropdown-item-padding-x: 0; - -// Forms - -$form-check-input-margin-y: 0.1rem; -$form-check-input-checked-bg-color: #0075ff; - -// Navs - -$nav-tabs-border-color: #aaa; -$nav-tabs-link-active-border-color: #aaa #aaa #fff; -$nav-tabs-link-hover-border-color: $bg-two $bg-two #aaa; -$nav-tabs-link-active-color: #000; - -// Navbar - -$enable-caret: false; -$navbar-padding-y: 0; -$navbar-padding-x: 0; -$navbar-light-color: #235a81; -$navbar-light-hover-color: #235a81; -$navbar-light-active-color: #235a81; -$navbar-light-disabled-color: #235a81; - -// Pagination - -$pagination-active-color: #235a81; -$pagination-border-color: #aaa; -$pagination-hover-border-color: #aaa; -$pagination-active-border-color: #aaa; -$pagination-disabled-border-color: #aaa; - -// Card - -$card-border-color: #aaa; -$card-bg: #eee; -$card-cap-bg: #fff; - -// Accordion - -$accordion-button-padding-y: 0.375rem; -$accordion-button-padding-x: 0.75rem; -$accordion-button-active-color: #235a81; -$accordion-button-active-bg: $navi-background; - -// Breadcrumbs - -$breadcrumb-navbar-padding-y: 0.1rem; -$breadcrumb-navbar-padding-x: 2.2em; -$breadcrumb-navbar-margin-bottom: 0; -$breadcrumb-navbar-bg: #888; -$breadcrumb-divider-color: #fff; -$breadcrumb-divider: quote("»"); - -// Modals - -$modal-inner-padding: 0.75rem; -$modal-footer-margin-between: 0.1rem; -$modal-header-padding-y: 0.4rem; - -// Alert - -$alert-margin-bottom: 0.5em; -$alert-border-radius: 5px; - -// List group - -$list-group-bg: inherit; -$list-group-item-padding-x: 0.75rem; -$list-group-item-padding-y: 0.375rem; - -// Forms - -$label-margin-bottom: 0; diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/0b/0bcbee1e66d755177eefc8651966f2f3.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/0b/0bcbee1e66d755177eefc8651966f2f3.php deleted file mode 100644 index f7e1769..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/0b/0bcbee1e66d755177eefc8651966f2f3.php +++ /dev/null @@ -1,83 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - if ((twig_get_attribute($this->env, $this->source, ($context["comments_map"] ?? null), ($context["table_name"] ?? null), [], "array", true, true, false, 1) && twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, // line 2 -($context["comments_map"] ?? null), ($context["table_name"] ?? null), [], "array", false, true, false, 2), ($context["column_name"] ?? null), [], "array", true, true, false, 2))) { - // line 3 - echo "
            env, (($__internal_compile_0 = (($__internal_compile_1 = ($context["comments_map"] ?? null)) && is_array($__internal_compile_1) || $__internal_compile_1 instanceof ArrayAccess ? ($__internal_compile_1[($context["table_name"] ?? null)] ?? null) : null)) && is_array($__internal_compile_0) || $__internal_compile_0 instanceof ArrayAccess ? ($__internal_compile_0[($context["column_name"] ?? null)] ?? null) : null), "html", null, true); - echo "\"> - "; - // line 4 - if ((twig_length_filter($this->env, (($__internal_compile_2 = (($__internal_compile_3 = ($context["comments_map"] ?? null)) && is_array($__internal_compile_3) || $__internal_compile_3 instanceof ArrayAccess ? ($__internal_compile_3[($context["table_name"] ?? null)] ?? null) : null)) && is_array($__internal_compile_2) || $__internal_compile_2 instanceof ArrayAccess ? ($__internal_compile_2[($context["column_name"] ?? null)] ?? null) : null)) > ($context["limit_chars"] ?? null))) { - // line 5 - echo " "; - echo twig_escape_filter($this->env, twig_slice($this->env, (($__internal_compile_4 = (($__internal_compile_5 = ($context["comments_map"] ?? null)) && is_array($__internal_compile_5) || $__internal_compile_5 instanceof ArrayAccess ? ($__internal_compile_5[($context["table_name"] ?? null)] ?? null) : null)) && is_array($__internal_compile_4) || $__internal_compile_4 instanceof ArrayAccess ? ($__internal_compile_4[($context["column_name"] ?? null)] ?? null) : null), 0, ($context["limit_chars"] ?? null)), "html", null, true); - echo "… - "; - } else { - // line 7 - echo " "; - echo twig_escape_filter($this->env, (($__internal_compile_6 = (($__internal_compile_7 = ($context["comments_map"] ?? null)) && is_array($__internal_compile_7) || $__internal_compile_7 instanceof ArrayAccess ? ($__internal_compile_7[($context["table_name"] ?? null)] ?? null) : null)) && is_array($__internal_compile_6) || $__internal_compile_6 instanceof ArrayAccess ? ($__internal_compile_6[($context["column_name"] ?? null)] ?? null) : null), "html", null, true); - echo " - "; - } - // line 9 - echo " -"; - } - } - - public function getTemplateName() - { - return "display/results/comment_for_row.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 59 => 9, 53 => 7, 47 => 5, 45 => 4, 40 => 3, 38 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "display/results/comment_for_row.twig", "C:\\xampp\\phpMyAdmin\\templates\\display\\results\\comment_for_row.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/15/156fd6d20ca5599b0aedac6af12c13cb.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/15/156fd6d20ca5599b0aedac6af12c13cb.php deleted file mode 100644 index 0572281..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/15/156fd6d20ca5599b0aedac6af12c13cb.php +++ /dev/null @@ -1,294 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo " - - - - "; - // line 5 - ob_start(function () { return ''; }); -echo _ngettext("%s table", "%s tables", abs( // line 6 -($context["num_tables"] ?? null))); - $context["num_tables_trans"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); - // line 8 - echo " "; - echo twig_escape_filter($this->env, twig_sprintf(($context["num_tables_trans"] ?? null), PhpMyAdmin\Util::formatNumber(($context["num_tables"] ?? null), 0)), "html", null, true); - echo " - - "; - // line 10 - if (($context["server_replica_status"] ?? null)) { - // line 11 - echo " "; -echo _gettext("Replication"); - echo " - "; - } - // line 13 - echo " "; - $context["sum_colspan"] = ((($context["db_is_system_schema"] ?? null)) ? (4) : (7)); - // line 14 - echo " "; - if ((($context["num_favorite_tables"] ?? null) == 0)) { - // line 15 - echo " "; - $context["sum_colspan"] = (($context["sum_colspan"] ?? null) - 1); - // line 16 - echo " "; - } - // line 17 - echo " env, ($context["sum_colspan"] ?? null), "html", null, true); - echo "\" class=\"d-print-none\">"; -echo _gettext("Sum"); - echo " - "; - // line 18 - $context["row_count_sum"] = PhpMyAdmin\Util::formatNumber(($context["sum_entries"] ?? null), 0); - // line 19 - echo " "; - // line 20 - echo " "; - $context["row_sum_url"] = []; - // line 21 - echo " "; - if (array_key_exists("approx_rows", $context)) { - // line 22 - echo " "; - $context["row_sum_url"] = ["ajax_request" => true, "db" => // line 24 -($context["db"] ?? null), "real_row_count_all" => "true"]; - // line 27 - echo " "; - } - // line 28 - echo " "; - if (($context["approx_rows"] ?? null)) { - // line 29 - echo " "; - ob_start(function () { return ''; }); - // line 30 - echo "~"; - // line 31 - echo twig_escape_filter($this->env, ($context["row_count_sum"] ?? null), "html", null, true); - // line 32 - echo ""; - $context["cell_text"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); - // line 34 - echo " "; - } else { - // line 35 - echo " "; - $context["cell_text"] = ($context["row_count_sum"] ?? null); - // line 36 - echo " "; - } - // line 37 - echo " "; - echo twig_escape_filter($this->env, ($context["cell_text"] ?? null), "html", null, true); - echo " - "; - // line 38 - if ( !(($context["properties_num_columns"] ?? null) > 1)) { - // line 39 - echo " "; - // line 40 - echo " "; - $context["default_engine"] = twig_get_attribute($this->env, $this->source, ($context["dbi"] ?? null), "fetchValue", [0 => "SELECT @@storage_engine;"], "method", false, false, false, 40); - // line 41 - echo " "; - if (twig_test_empty(($context["default_engine"] ?? null))) { - // line 42 - echo " "; - // line 43 - echo " "; - $context["default_engine"] = twig_get_attribute($this->env, $this->source, ($context["dbi"] ?? null), "fetchValue", [0 => "SELECT @@default_storage_engine;"], "method", false, false, false, 43); - // line 44 - echo " "; - } - // line 45 - echo " - env, twig_sprintf(_gettext("%s is the default storage engine on this MySQL server."), ($context["default_engine"] ?? null)), "html", null, true); - echo "\"> - "; - // line 47 - echo twig_escape_filter($this->env, ($context["default_engine"] ?? null), "html", null, true); - echo " - - - - "; - // line 51 - if ( !twig_test_empty(($context["database_collation"] ?? null))) { - // line 52 - echo " env, twig_get_attribute($this->env, $this->source, ($context["database_collation"] ?? null), "description", [], "any", false, false, false, 52), "html", null, true); - echo " ("; -echo _gettext("Default"); - echo ")\"> - "; - // line 53 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_collation"] ?? null), "name", [], "any", false, false, false, 53), "html", null, true); - echo " - - "; - } - // line 56 - echo " - "; - } - // line 58 - echo " - "; - // line 59 - if (($context["is_show_stats"] ?? null)) { - // line 60 - echo " "; - $context["sum"] = PhpMyAdmin\Util::formatByteDown(($context["sum_size"] ?? null), 3, 1); - // line 61 - echo " "; - $context["sum_formatted"] = (($__internal_compile_0 = ($context["sum"] ?? null)) && is_array($__internal_compile_0) || $__internal_compile_0 instanceof ArrayAccess ? ($__internal_compile_0[0] ?? null) : null); - // line 62 - echo " "; - $context["sum_unit"] = (($__internal_compile_1 = ($context["sum"] ?? null)) && is_array($__internal_compile_1) || $__internal_compile_1 instanceof ArrayAccess ? ($__internal_compile_1[1] ?? null) : null); - // line 63 - echo " "; - echo twig_escape_filter($this->env, ($context["sum_formatted"] ?? null), "html", null, true); - echo " "; - echo twig_escape_filter($this->env, ($context["sum_unit"] ?? null), "html", null, true); - echo " - - "; - // line 65 - $context["overhead"] = PhpMyAdmin\Util::formatByteDown(($context["overhead_size"] ?? null), 3, 1); - // line 66 - echo " "; - $context["overhead_formatted"] = (($__internal_compile_2 = ($context["overhead"] ?? null)) && is_array($__internal_compile_2) || $__internal_compile_2 instanceof ArrayAccess ? ($__internal_compile_2[0] ?? null) : null); - // line 67 - echo " "; - $context["overhead_unit"] = (($__internal_compile_3 = ($context["overhead"] ?? null)) && is_array($__internal_compile_3) || $__internal_compile_3 instanceof ArrayAccess ? ($__internal_compile_3[1] ?? null) : null); - // line 68 - echo " "; - echo twig_escape_filter($this->env, ($context["overhead_formatted"] ?? null), "html", null, true); - echo " "; - echo twig_escape_filter($this->env, ($context["overhead_unit"] ?? null), "html", null, true); - echo " - "; - } - // line 70 - echo " - "; - // line 71 - if (($context["show_charset"] ?? null)) { - // line 72 - echo " "; - echo twig_escape_filter($this->env, ($context["database_charset"] ?? null), "html", null, true); - echo " - "; - } - // line 74 - echo " "; - if (($context["show_comment"] ?? null)) { - // line 75 - echo " - "; - } - // line 77 - echo " "; - if (($context["show_creation"] ?? null)) { - // line 78 - echo " - "; - // line 79 - echo twig_escape_filter($this->env, ($context["create_time_all"] ?? null), "html", null, true); - echo " - - "; - } - // line 82 - echo " "; - if (($context["show_last_update"] ?? null)) { - // line 83 - echo " - "; - // line 84 - echo twig_escape_filter($this->env, ($context["update_time_all"] ?? null), "html", null, true); - echo " - - "; - } - // line 87 - echo " "; - if (($context["show_last_check"] ?? null)) { - // line 88 - echo " - "; - // line 89 - echo twig_escape_filter($this->env, ($context["check_time_all"] ?? null), "html", null, true); - echo " - - "; - } - // line 92 - echo " - -"; - } - - public function getTemplateName() - { - return "database/structure/body_for_table_summary.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 270 => 92, 264 => 89, 261 => 88, 258 => 87, 252 => 84, 249 => 83, 246 => 82, 240 => 79, 237 => 78, 234 => 77, 230 => 75, 227 => 74, 221 => 72, 219 => 71, 216 => 70, 208 => 68, 205 => 67, 202 => 66, 200 => 65, 192 => 63, 189 => 62, 186 => 61, 183 => 60, 181 => 59, 178 => 58, 174 => 56, 168 => 53, 161 => 52, 159 => 51, 152 => 47, 148 => 46, 145 => 45, 142 => 44, 139 => 43, 137 => 42, 134 => 41, 131 => 40, 129 => 39, 127 => 38, 122 => 37, 119 => 36, 116 => 35, 113 => 34, 110 => 32, 108 => 31, 104 => 30, 101 => 29, 98 => 28, 95 => 27, 93 => 24, 91 => 22, 88 => 21, 85 => 20, 83 => 19, 81 => 18, 74 => 17, 71 => 16, 68 => 15, 65 => 14, 62 => 13, 56 => 11, 54 => 10, 48 => 8, 45 => 6, 43 => 5, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "database/structure/body_for_table_summary.twig", "C:\\xampp\\phpMyAdmin\\templates\\database\\structure\\body_for_table_summary.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/22/220b04883aa1be571bcd1ea00366d93d.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/22/220b04883aa1be571bcd1ea00366d93d.php deleted file mode 100644 index ca17ddf..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/22/220b04883aa1be571bcd1ea00366d93d.php +++ /dev/null @@ -1,99 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable(($context["columns"] ?? null)); - foreach ($context['_seq'] as $context["_key"] => $context["column"]) { - // line 2 - echo " env, $this->source, $context["column"], "is_column_numeric", [], "any", false, false, false, 2)) ? (" text-end") : ("")); - echo ((twig_get_attribute($this->env, $this->source, $context["column"], "is_column_hidden", [], "any", false, false, false, 2)) ? (" hide") : ("")); - // line 3 - echo ((($context["is_sortable"] ?? null)) ? (" column_heading") : ("")); - echo (((($context["is_sortable"] ?? null) && twig_get_attribute($this->env, $this->source, $context["column"], "is_browse_marker_enabled", [], "any", false, false, false, 3))) ? (" marker") : ("")); - echo (((($context["is_sortable"] ?? null) && twig_get_attribute($this->env, $this->source, $context["column"], "is_browse_pointer_enabled", [], "any", false, false, false, 3))) ? (" pointer") : ("")); - // line 4 - echo ((( !($context["is_sortable"] ?? null) && twig_get_attribute($this->env, $this->source, $context["column"], "has_condition", [], "any", false, false, false, 4))) ? (" condition") : ("")); - echo "\" data-column=\""; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["column"], "column_name", [], "any", false, false, false, 4), "html", null, true); - echo "\"> - "; - // line 5 - if (($context["is_sortable"] ?? null)) { - // line 6 - echo " "; - echo twig_get_attribute($this->env, $this->source, $context["column"], "order_link", [], "any", false, false, false, 6); - echo " - "; - } else { - // line 8 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["column"], "column_name", [], "any", false, false, false, 8), "html", null, true); - echo " - "; - } - // line 10 - echo " "; - echo twig_get_attribute($this->env, $this->source, $context["column"], "comments", [], "any", false, false, false, 10); - echo " - -"; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['column'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - } - - public function getTemplateName() - { - return "display/results/table_headers_for_columns.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 69 => 10, 63 => 8, 57 => 6, 55 => 5, 49 => 4, 45 => 3, 41 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "display/results/table_headers_for_columns.twig", "C:\\xampp\\phpMyAdmin\\templates\\display\\results\\table_headers_for_columns.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/26/26578e154a0dc2df1ffe8e4fc27dd743.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/26/26578e154a0dc2df1ffe8e4fc27dd743.php deleted file mode 100644 index 9439a2b..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/26/26578e154a0dc2df1ffe8e4fc27dd743.php +++ /dev/null @@ -1,92 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "

            -
            - "; - // line 3 - echo ($context["hidden_inputs"] ?? null); - echo " - - - env, ($context["return_url"] ?? null), "html", null, true); - echo "\"> - "; -echo _gettext("Your browser has phpMyAdmin configuration for this domain. Would you like to import it for current session?"); - // line 10 - echo "
            - "; -echo _gettext("Yes"); - // line 11 - echo " - / "; -echo _gettext("No"); - // line 12 - echo " - / "; -echo _gettext("Delete settings"); - // line 13 - echo " -
            -
            -"; - } - - public function getTemplateName() - { - return "preferences/autoload.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 67 => 13, 63 => 12, 59 => 11, 55 => 10, 50 => 6, 44 => 3, 40 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "preferences/autoload.twig", "C:\\xampp\\phpMyAdmin\\templates\\preferences\\autoload.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/26/269ac5a202dc23f6c0a1e4a38cb7c094.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/26/269ac5a202dc23f6c0a1e4a38cb7c094.php deleted file mode 100644 index 3ebdc49..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/26/269ac5a202dc23f6c0a1e4a38cb7c094.php +++ /dev/null @@ -1,212 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo " -env, ($context["lang"] ?? null), "html", null, true); - echo "\" dir=\""; - echo twig_escape_filter($this->env, ($context["text_dir"] ?? null), "html", null, true); - echo "\"> - - - - - - "; - // line 8 - if ( !($context["allow_third_party_framing"] ?? null)) { - // line 9 - echo ""; - } - // line 11 - echo " - - - env, ($context["theme_path"] ?? null), "html", null, true); - echo "/jquery/jquery-ui.css\"> - env, ($context["base_dir"] ?? null), "html", null, true); - echo "js/vendor/codemirror/lib/codemirror.css?"; - echo twig_escape_filter($this->env, ($context["version"] ?? null), "html", null, true); - echo "\"> - env, ($context["base_dir"] ?? null), "html", null, true); - echo "js/vendor/codemirror/addon/hint/show-hint.css?"; - echo twig_escape_filter($this->env, ($context["version"] ?? null), "html", null, true); - echo "\"> - env, ($context["base_dir"] ?? null), "html", null, true); - echo "js/vendor/codemirror/addon/lint/lint.css?"; - echo twig_escape_filter($this->env, ($context["version"] ?? null), "html", null, true); - echo "\"> - env, ($context["theme_path"] ?? null), "html", null, true); - echo "/css/theme"; - echo (((($context["text_dir"] ?? null) == "rtl")) ? (".rtl") : ("")); - echo ".css?"; - echo twig_escape_filter($this->env, ($context["version"] ?? null), "html", null, true); - echo "\"> - "; - // line 19 - echo twig_escape_filter($this->env, ($context["title"] ?? null), "html", null, true); - echo " - "; - // line 20 - echo ($context["scripts"] ?? null); - echo " - - -env, (" id=" . ($context["body_id"] ?? null)), "html", null, true))) : (print (""))); - echo "> - "; - // line 24 - echo ($context["navigation"] ?? null); - echo " - "; - // line 25 - echo ($context["custom_header"] ?? null); - echo " - "; - // line 26 - echo ($context["load_user_preferences"] ?? null); - echo " - - "; - // line 28 - if ( !($context["show_hint"] ?? null)) { - // line 29 - echo " - "; - } - // line 31 - echo " - "; - // line 32 - if (($context["is_warnings_enabled"] ?? null)) { - // line 33 - echo " - "; - } - // line 37 - echo " - "; - // line 38 - if ((($context["is_menu_enabled"] ?? null) && (($context["server"] ?? null) > 0))) { - // line 39 - echo " "; - echo ($context["menu"] ?? null); - echo " - - - - "; - // line 43 - echo PhpMyAdmin\Html\Generator::getImage("s_cog", _gettext("Page-related settings")); - echo " - - "; - // line 45 - echo PhpMyAdmin\Html\Generator::getImage("s_top", _gettext("Click on the bar to scroll to top of page")); - echo " - - "; - } - // line 48 - echo " - "; - // line 49 - echo ($context["console"] ?? null); - echo " - -
            - "; - // line 52 - echo ($context["messages"] ?? null); - echo " - - "; - // line 54 - echo ($context["recent_table"] ?? null); - echo " - "; - // line 55 - echo twig_include($this->env, $context, "modals/preview_sql_modal.twig"); - echo " - "; - // line 56 - echo twig_include($this->env, $context, "modals/enum_set_editor.twig"); - echo " - "; - // line 57 - echo twig_include($this->env, $context, "modals/create_view.twig"); - echo " -"; - } - - public function getTemplateName() - { - return "header.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 188 => 57, 184 => 56, 180 => 55, 176 => 54, 171 => 52, 165 => 49, 162 => 48, 156 => 45, 151 => 43, 143 => 39, 141 => 38, 138 => 37, 132 => 34, 129 => 33, 127 => 32, 124 => 31, 120 => 29, 118 => 28, 113 => 26, 109 => 25, 105 => 24, 101 => 23, 95 => 20, 91 => 19, 83 => 18, 77 => 17, 71 => 16, 65 => 15, 61 => 14, 56 => 11, 53 => 9, 51 => 8, 40 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "header.twig", "C:\\xampp\\phpMyAdmin\\templates\\header.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2ab50c07c679324bfe0210bb386f1b4e.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2ab50c07c679324bfe0210bb386f1b4e.php deleted file mode 100644 index 92671d8..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2ab50c07c679324bfe0210bb386f1b4e.php +++ /dev/null @@ -1,243 +0,0 @@ -source = $this->getSourceContext(); - - $this->blocks = [ - 'content' => [$this, 'block_content'], - ]; - } - - protected function doGetParent(array $context) - { - // line 1 - return "server/status/base.twig"; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 2 - $context["active"] = "status"; - // line 1 - $this->parent = $this->loadTemplate("server/status/base.twig", "server/status/status/index.twig", 1); - $this->parent->display($context, array_merge($this->blocks, $blocks)); - } - - // line 3 - public function block_content($context, array $blocks = []) - { - $macros = $this->macros; - // line 4 - echo " -"; - // line 5 - if (($context["is_data_loaded"] ?? null)) { - // line 6 - echo "

            "; - echo twig_escape_filter($this->env, twig_sprintf(_gettext("Network traffic since startup: %s"), ($context["network_traffic"] ?? null)), "html", null, true); - echo "

            -

            "; - // line 7 - echo twig_escape_filter($this->env, twig_sprintf(_gettext("This MySQL server has been running for %1\$s. It started up on %2\$s."), ($context["uptime"] ?? null), ($context["start_time"] ?? null)), "html", null, true); - echo "

            - -
            - - - - - - - - - - - "; - // line 23 - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable(($context["traffic"] ?? null)); - foreach ($context['_seq'] as $context["_key"] => $context["each_traffic"]) { - // line 24 - echo " - - - - - "; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['each_traffic'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - // line 30 - echo " -
            - "; -echo _gettext("Traffic"); - // line 15 - echo " "; - echo PhpMyAdmin\Html\Generator::showHint(_gettext("On a busy server, the byte counters may overrun, so those statistics as reported by the MySQL server may be incorrect.")); - echo " - #"; -echo _gettext("ø per hour"); - // line 18 - echo "
            "; - // line 25 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["each_traffic"], "name", [], "any", false, false, false, 25), "html", null, true); - echo ""; - // line 26 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["each_traffic"], "number", [], "any", false, false, false, 26), "html", null, true); - echo ""; - // line 27 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["each_traffic"], "per_hour", [], "any", false, false, false, 27), "html", null, true); - echo "
            - - - - - - - - - - - - - "; - // line 44 - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable(($context["connections"] ?? null)); - foreach ($context['_seq'] as $context["_key"] => $context["connection"]) { - // line 45 - echo " - - - - - - "; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['connection'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - // line 52 - echo " -
            "; -echo _gettext("Connections"); - // line 36 - echo "#"; -echo _gettext("ø per hour"); - // line 38 - echo "%
            "; - // line 46 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["connection"], "name", [], "any", false, false, false, 46), "html", null, true); - echo ""; - // line 47 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["connection"], "number", [], "any", false, false, false, 47), "html", null, true); - echo ""; - // line 48 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["connection"], "per_hour", [], "any", false, false, false, 48), "html", null, true); - echo ""; - // line 49 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["connection"], "percentage", [], "any", false, false, false, 49), "html", null, true); - echo "
            -
            - - "; - // line 56 - if ((($context["is_primary"] ?? null) || ($context["is_replica"] ?? null))) { - // line 57 - echo "

            - "; - // line 58 - if ((($context["is_primary"] ?? null) && ($context["is_replica"] ?? null))) { - // line 59 - echo " "; -echo _gettext("This MySQL server works as primary and replica in replication process."); - // line 60 - echo " "; - } elseif (($context["is_primary"] ?? null)) { - // line 61 - echo " "; -echo _gettext("This MySQL server works as primary in replication process."); - // line 62 - echo " "; - } elseif (($context["is_replica"] ?? null)) { - // line 63 - echo " "; -echo _gettext("This MySQL server works as replica in replication process."); - // line 64 - echo " "; - } - // line 65 - echo "

            - -
            - -

            "; -echo _gettext("Replication status"); - // line 69 - echo "

            - - "; - // line 71 - echo ($context["replication"] ?? null); - echo " - "; - } - // line 73 - echo " -"; - } else { - // line 75 - echo " "; - echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("Not enough privilege to view server status.")]); - echo " -"; - } - // line 77 - echo " -"; - } - - public function getTemplateName() - { - return "server/status/status/index.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 220 => 77, 214 => 75, 210 => 73, 205 => 71, 201 => 69, 194 => 65, 191 => 64, 188 => 63, 185 => 62, 182 => 61, 179 => 60, 176 => 59, 174 => 58, 171 => 57, 169 => 56, 163 => 52, 154 => 49, 150 => 48, 146 => 47, 142 => 46, 139 => 45, 135 => 44, 127 => 38, 122 => 36, 113 => 30, 104 => 27, 100 => 26, 96 => 25, 93 => 24, 89 => 23, 82 => 18, 74 => 15, 63 => 7, 58 => 6, 56 => 5, 53 => 4, 49 => 3, 44 => 1, 42 => 2, 35 => 1,); - } - - public function getSourceContext() - { - return new Source("", "server/status/status/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\status\\status\\index.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2af2f76feaa582e62dc48d1b2407c504.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2af2f76feaa582e62dc48d1b2407c504.php deleted file mode 100644 index 6352102..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/2a/2af2f76feaa582e62dc48d1b2407c504.php +++ /dev/null @@ -1,99 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "
            env, ($context["parent_div_classes"] ?? null), "html", null, true); - echo "\"> - "; - // line 2 - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable(($context["content_array"] ?? null)); - foreach ($context['_seq'] as $context["_key"] => $context["content"]) { - // line 3 - echo " "; - if (array_key_exists("content", $context)) { - // line 4 - echo " env, (($__internal_compile_0 = $context["content"]) && is_array($__internal_compile_0) || $__internal_compile_0 instanceof ArrayAccess ? ($__internal_compile_0[0] ?? null) : null), "html", null, true); - echo "\"> - "; - // line 5 - echo twig_escape_filter($this->env, (($__internal_compile_1 = $context["content"]) && is_array($__internal_compile_1) || $__internal_compile_1 instanceof ArrayAccess ? ($__internal_compile_1[1] ?? null) : null), "html", null, true); - echo " - "; - // line 6 - if (twig_get_attribute($this->env, $this->source, $context["content"], "extraSpan", [], "array", true, true, false, 6)) { - // line 7 - echo " : "; - echo twig_escape_filter($this->env, (($__internal_compile_2 = $context["content"]) && is_array($__internal_compile_2) || $__internal_compile_2 instanceof ArrayAccess ? ($__internal_compile_2["extraSpan"] ?? null) : null), "html", null, true); - echo " - "; - } - // line 9 - echo " - "; - } - // line 11 - echo " "; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['content'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - // line 12 - echo "
            -"; - } - - public function getTemplateName() - { - return "console/query_action.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 76 => 12, 70 => 11, 66 => 9, 60 => 7, 58 => 6, 54 => 5, 49 => 4, 46 => 3, 42 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "console/query_action.twig", "C:\\xampp\\phpMyAdmin\\templates\\console\\query_action.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/2d/2d4c4b72820f2074a6b15627c7661a83.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/2d/2d4c4b72820f2074a6b15627c7661a83.php deleted file mode 100644 index 63d830d..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/2d/2d4c4b72820f2074a6b15627c7661a83.php +++ /dev/null @@ -1,90 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "
            -
            -
            -
            -
            "; -echo _gettext("Loading"); - // line 5 - echo "
            - -
            -
            - -
            
            -        
            -
            -
            - - -
            -
            -
            -
            -"; - } - - public function getTemplateName() - { - return "modals/preview_sql_confirmation.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 63 => 15, 59 => 14, 48 => 6, 44 => 5, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "modals/preview_sql_confirmation.twig", "C:\\xampp\\phpMyAdmin\\templates\\modals\\preview_sql_confirmation.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/35/353f61a45fe879514c449781542c6495.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/35/353f61a45fe879514c449781542c6495.php deleted file mode 100644 index d5fa0ce..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/35/353f61a45fe879514c449781542c6495.php +++ /dev/null @@ -1,67 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "
            env, ($context["context"] ?? null), "html", null, true); - echo "\" role=\"alert\"> - "; - // line 2 - echo ($context["message"] ?? null); - echo " -
            -"; - } - - public function getTemplateName() - { - return "message.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 42 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "message.twig", "C:\\xampp\\phpMyAdmin\\templates\\message.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/4a/4a543b9337678ea9ce355445527b6e00.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/4a/4a543b9337678ea9ce355445527b6e00.php deleted file mode 100644 index a391a11..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/4a/4a543b9337678ea9ce355445527b6e00.php +++ /dev/null @@ -1,118 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - if (($context["allowed_to_send_error_reports"] ?? null)) { - // line 2 - echo "

            - "; -echo _gettext("This report automatically includes data about the error and information about relevant configuration settings. It will be sent to the phpMyAdmin team for debugging the error."); - // line 6 - echo "

            -
            -
            - - -
            - -
            - "; -echo _gettext("You may examine the data in the error report:"); - // line 19 - echo "
            ";
            -            echo twig_escape_filter($this->env, json_encode(($context["report_data"] ?? null), (twig_constant("JSON_PRETTY_PRINT") | twig_constant("JSON_UNESCAPED_SLASHES"))), "html", null, true);
            -            echo "
            -
            - -
            - - -
            - - "; - // line 29 - echo ($context["hidden_inputs"] ?? null); - echo " - "; - // line 30 - echo ($context["hidden_fields"] ?? null); - echo " -
            -"; - } else { - // line 33 - echo "
            -
            ";
            -            // line 34
            -            echo twig_escape_filter($this->env, json_encode(($context["report_data"] ?? null), (twig_constant("JSON_PRETTY_PRINT") | twig_constant("JSON_UNESCAPED_SLASHES"))), "html", null, true);
            -            echo "
            -
            -"; - } - } - - public function getTemplateName() - { - return "error/report_form.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 92 => 34, 89 => 33, 83 => 30, 79 => 29, 74 => 26, 63 => 19, 54 => 12, 46 => 7, 43 => 6, 39 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "error/report_form.twig", "C:\\xampp\\phpMyAdmin\\templates\\error\\report_form.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/53/53d8ffa9e99720fa10d62959fe772d31.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/53/53d8ffa9e99720fa10d62959fe772d31.php deleted file mode 100644 index 61802d9..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/53/53d8ffa9e99720fa10d62959fe772d31.php +++ /dev/null @@ -1,476 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "
            -
            - "; -echo _gettext("Information"); - // line 3 - echo " - "; - // line 4 - if ((($__internal_compile_0 = ($context["showtable"] ?? null)) && is_array($__internal_compile_0) || $__internal_compile_0 instanceof ArrayAccess ? ($__internal_compile_0["TABLE_COMMENT"] ?? null) : null)) { - // line 5 - echo "

            - "; -echo _gettext("Table comments:"); - // line 6 - echo " - "; - // line 7 - echo twig_escape_filter($this->env, (($__internal_compile_1 = ($context["showtable"] ?? null)) && is_array($__internal_compile_1) || $__internal_compile_1 instanceof ArrayAccess ? ($__internal_compile_1["TABLE_COMMENT"] ?? null) : null), "html", null, true); - echo " -

            - "; - } - // line 10 - echo " - - "; - // line 12 - if (( !($context["tbl_is_view"] ?? null) && !($context["db_is_system_schema"] ?? null))) { - // line 13 - echo " - - - - - - - - - "; - // line 22 - if (array_key_exists("index_size", $context)) { - // line 23 - echo " - - - - - "; - } - // line 29 - echo " - "; - // line 30 - if (array_key_exists("free_size", $context)) { - // line 31 - echo " - - - - - - - - - - "; - } - // line 42 - echo " - "; - // line 43 - if ((array_key_exists("tot_size", $context) && (($context["mergetable"] ?? null) == false))) { - // line 44 - echo " - - - - - "; - } - // line 50 - echo " - - "; - // line 53 - echo " "; - if (((array_key_exists("free_size", $context) && (((( // line 54 -($context["tbl_storage_engine"] ?? null) == "MYISAM") || ( // line 55 -($context["tbl_storage_engine"] ?? null) == "ARIA")) || ( // line 56 -($context["tbl_storage_engine"] ?? null) == "MARIA")) || ( // line 57 -($context["tbl_storage_engine"] ?? null) == "BDB"))) || (( // line 58 -($context["tbl_storage_engine"] ?? null) == "INNODB") && (($context["innodb_file_per_table"] ?? null) == true)))) { - // line 59 - echo " - - - - - "; - } - // line 74 - echo "
            "; -echo _gettext("Space usage"); - // line 14 - echo "
            "; -echo _gettext("Data"); - // line 17 - echo ""; - // line 18 - echo twig_escape_filter($this->env, ($context["data_size"] ?? null), "html", null, true); - echo ""; - // line 19 - echo twig_escape_filter($this->env, ($context["data_unit"] ?? null), "html", null, true); - echo "
            "; -echo _gettext("Index"); - // line 24 - echo ""; - // line 25 - echo twig_escape_filter($this->env, ($context["index_size"] ?? null), "html", null, true); - echo ""; - // line 26 - echo twig_escape_filter($this->env, ($context["index_unit"] ?? null), "html", null, true); - echo "
            "; -echo _gettext("Overhead"); - // line 32 - echo ""; - // line 33 - echo twig_escape_filter($this->env, ($context["free_size"] ?? null), "html", null, true); - echo ""; - // line 34 - echo twig_escape_filter($this->env, ($context["free_unit"] ?? null), "html", null, true); - echo "
            "; -echo _gettext("Effective"); - // line 37 - echo ""; - // line 38 - echo twig_escape_filter($this->env, ($context["effect_size"] ?? null), "html", null, true); - echo ""; - // line 39 - echo twig_escape_filter($this->env, ($context["effect_unit"] ?? null), "html", null, true); - echo "
            "; -echo _gettext("Total"); - // line 45 - echo ""; - // line 46 - echo twig_escape_filter($this->env, ($context["tot_size"] ?? null), "html", null, true); - echo ""; - // line 47 - echo twig_escape_filter($this->env, ($context["tot_unit"] ?? null), "html", null, true); - echo "
            - // line 63 -($context["db"] ?? null), "table" => // line 64 -($context["table"] ?? null), "sql_query" => ("OPTIMIZE TABLE " . PhpMyAdmin\Util::backquote( // line 65 -($context["table"] ?? null))), "pos" => 0]); - // line 67 - echo "\"> - "; - // line 68 - echo PhpMyAdmin\Html\Generator::getIcon("b_tbloptimize", _gettext("Optimize table")); - echo " - -
            - "; - } - // line 76 - echo " - "; - // line 77 - $context["avg_size"] = ((array_key_exists("avg_size", $context)) ? (($context["avg_size"] ?? null)) : (null)); - // line 78 - echo " "; - $context["avg_unit"] = ((array_key_exists("avg_unit", $context)) ? (($context["avg_unit"] ?? null)) : (null)); - // line 79 - echo " - - - "; - // line 82 - if (twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Row_format", [], "array", true, true, false, 82)) { - // line 83 - echo " - - "; - // line 85 - if (((($__internal_compile_2 = ($context["showtable"] ?? null)) && is_array($__internal_compile_2) || $__internal_compile_2 instanceof ArrayAccess ? ($__internal_compile_2["Row_format"] ?? null) : null) == "Fixed")) { - // line 86 - echo " - "; - } elseif (((($__internal_compile_3 = // line 87 -($context["showtable"] ?? null)) && is_array($__internal_compile_3) || $__internal_compile_3 instanceof ArrayAccess ? ($__internal_compile_3["Row_format"] ?? null) : null) == "Dynamic")) { - // line 88 - echo " - "; - } else { - // line 90 - echo " - "; - } - // line 92 - echo " - "; - } - // line 94 - echo " - "; - // line 95 - if ( !twig_test_empty((($__internal_compile_5 = ($context["showtable"] ?? null)) && is_array($__internal_compile_5) || $__internal_compile_5 instanceof ArrayAccess ? ($__internal_compile_5["Create_options"] ?? null) : null))) { - // line 96 - echo " - - "; - // line 98 - if (((($__internal_compile_6 = ($context["showtable"] ?? null)) && is_array($__internal_compile_6) || $__internal_compile_6 instanceof ArrayAccess ? ($__internal_compile_6["Create_options"] ?? null) : null) == "partitioned")) { - // line 99 - echo " - "; - } else { - // line 101 - echo " - "; - } - // line 103 - echo " - "; - } - // line 105 - echo " - "; - // line 106 - if ( !twig_test_empty(($context["table_collation"] ?? null))) { - // line 107 - echo " - - - - "; - } - // line 116 - echo " - "; - // line 117 - if (( !($context["is_innodb"] ?? null) && twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Rows", [], "array", true, true, false, 117))) { - // line 118 - echo " - - - - "; - } - // line 123 - echo " - "; - // line 124 - if ((( !($context["is_innodb"] ?? null) && twig_get_attribute($this->env, $this->source, // line 125 -($context["showtable"] ?? null), "Avg_row_length", [], "array", true, true, false, 125)) && ((($__internal_compile_9 = // line 126 -($context["showtable"] ?? null)) && is_array($__internal_compile_9) || $__internal_compile_9 instanceof ArrayAccess ? ($__internal_compile_9["Avg_row_length"] ?? null) : null) > 0))) { - // line 127 - echo " - - "; - // line 129 - $context["avg_row_length"] = PhpMyAdmin\Util::formatByteDown((($__internal_compile_10 = ($context["showtable"] ?? null)) && is_array($__internal_compile_10) || $__internal_compile_10 instanceof ArrayAccess ? ($__internal_compile_10["Avg_row_length"] ?? null) : null), 6, 1); - // line 130 - echo " - - "; - } - // line 133 - echo " - "; - // line 134 - if ((((( !($context["is_innodb"] ?? null) && twig_get_attribute($this->env, $this->source, // line 135 -($context["showtable"] ?? null), "Data_length", [], "array", true, true, false, 135)) && twig_get_attribute($this->env, $this->source, // line 136 -($context["showtable"] ?? null), "Rows", [], "array", true, true, false, 136)) && ((($__internal_compile_13 = // line 137 -($context["showtable"] ?? null)) && is_array($__internal_compile_13) || $__internal_compile_13 instanceof ArrayAccess ? ($__internal_compile_13["Rows"] ?? null) : null) > 0)) && ( // line 138 -($context["mergetable"] ?? null) == false))) { - // line 139 - echo " - - - - "; - } - // line 144 - echo " - "; - // line 145 - if (twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Auto_increment", [], "array", true, true, false, 145)) { - // line 146 - echo " - - - - "; - } - // line 151 - echo " - "; - // line 152 - if (twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Create_time", [], "array", true, true, false, 152)) { - // line 153 - echo " - - - - "; - } - // line 158 - echo " - "; - // line 159 - if (twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Update_time", [], "array", true, true, false, 159)) { - // line 160 - echo " - - - - "; - } - // line 165 - echo " - "; - // line 166 - if (twig_get_attribute($this->env, $this->source, ($context["showtable"] ?? null), "Check_time", [], "array", true, true, false, 166)) { - // line 167 - echo " - - - - "; - } - // line 172 - echo " -
            "; -echo _gettext("Row statistics"); - // line 80 - echo "
            "; -echo _gettext("Format"); - // line 84 - echo ""; -echo _gettext("static"); - echo ""; -echo _gettext("dynamic"); - echo ""; - echo twig_escape_filter($this->env, (($__internal_compile_4 = ($context["showtable"] ?? null)) && is_array($__internal_compile_4) || $__internal_compile_4 instanceof ArrayAccess ? ($__internal_compile_4["Row_format"] ?? null) : null), "html", null, true); - echo "
            "; -echo _gettext("Options"); - // line 97 - echo ""; -echo _gettext("partitioned"); - echo ""; - echo twig_escape_filter($this->env, (($__internal_compile_7 = ($context["showtable"] ?? null)) && is_array($__internal_compile_7) || $__internal_compile_7 instanceof ArrayAccess ? ($__internal_compile_7["Create_options"] ?? null) : null), "html", null, true); - echo "
            "; -echo _gettext("Collation"); - // line 108 - echo " - env, twig_get_attribute($this->env, $this->source, ($context["table_collation"] ?? null), "description", [], "any", false, false, false, 110), "html", null, true); - echo "\"> - "; - // line 111 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["table_collation"] ?? null), "name", [], "any", false, false, false, 111), "html", null, true); - echo " - -
            "; -echo _gettext("Rows"); - // line 119 - echo ""; - // line 120 - echo twig_escape_filter($this->env, PhpMyAdmin\Util::formatNumber((($__internal_compile_8 = ($context["showtable"] ?? null)) && is_array($__internal_compile_8) || $__internal_compile_8 instanceof ArrayAccess ? ($__internal_compile_8["Rows"] ?? null) : null), 0), "html", null, true); - echo "
            "; -echo _gettext("Row length"); - // line 128 - echo ""; - echo twig_escape_filter($this->env, (($__internal_compile_11 = ($context["avg_row_length"] ?? null)) && is_array($__internal_compile_11) || $__internal_compile_11 instanceof ArrayAccess ? ($__internal_compile_11[0] ?? null) : null), "html", null, true); - echo " "; - echo twig_escape_filter($this->env, (($__internal_compile_12 = ($context["avg_row_length"] ?? null)) && is_array($__internal_compile_12) || $__internal_compile_12 instanceof ArrayAccess ? ($__internal_compile_12[1] ?? null) : null), "html", null, true); - echo "
            "; -echo _gettext("Row size"); - // line 140 - echo ""; - // line 141 - echo twig_escape_filter($this->env, ($context["avg_size"] ?? null), "html", null, true); - echo " "; - echo twig_escape_filter($this->env, ($context["avg_unit"] ?? null), "html", null, true); - echo "
            "; -echo _gettext("Next autoindex"); - // line 147 - echo ""; - // line 148 - echo twig_escape_filter($this->env, PhpMyAdmin\Util::formatNumber((($__internal_compile_14 = ($context["showtable"] ?? null)) && is_array($__internal_compile_14) || $__internal_compile_14 instanceof ArrayAccess ? ($__internal_compile_14["Auto_increment"] ?? null) : null), 0), "html", null, true); - echo "
            "; -echo _gettext("Creation"); - // line 154 - echo ""; - // line 155 - echo twig_escape_filter($this->env, PhpMyAdmin\Util::localisedDate(twig_date_format_filter($this->env, (($__internal_compile_15 = ($context["showtable"] ?? null)) && is_array($__internal_compile_15) || $__internal_compile_15 instanceof ArrayAccess ? ($__internal_compile_15["Create_time"] ?? null) : null), "U")), "html", null, true); - echo "
            "; -echo _gettext("Last update"); - // line 161 - echo ""; - // line 162 - echo twig_escape_filter($this->env, PhpMyAdmin\Util::localisedDate(twig_date_format_filter($this->env, (($__internal_compile_16 = ($context["showtable"] ?? null)) && is_array($__internal_compile_16) || $__internal_compile_16 instanceof ArrayAccess ? ($__internal_compile_16["Update_time"] ?? null) : null), "U")), "html", null, true); - echo "
            "; -echo _gettext("Last check"); - // line 168 - echo ""; - // line 169 - echo twig_escape_filter($this->env, PhpMyAdmin\Util::localisedDate(twig_date_format_filter($this->env, (($__internal_compile_17 = ($context["showtable"] ?? null)) && is_array($__internal_compile_17) || $__internal_compile_17 instanceof ArrayAccess ? ($__internal_compile_17["Check_time"] ?? null) : null), "U")), "html", null, true); - echo "
            -
            -
            -"; - } - - public function getTemplateName() - { - return "table/structure/display_table_stats.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 450 => 172, 444 => 169, 441 => 168, 437 => 167, 435 => 166, 432 => 165, 426 => 162, 423 => 161, 419 => 160, 417 => 159, 414 => 158, 408 => 155, 405 => 154, 401 => 153, 399 => 152, 396 => 151, 390 => 148, 387 => 147, 383 => 146, 381 => 145, 378 => 144, 370 => 141, 367 => 140, 363 => 139, 361 => 138, 360 => 137, 359 => 136, 358 => 135, 357 => 134, 354 => 133, 345 => 130, 343 => 129, 340 => 128, 336 => 127, 334 => 126, 333 => 125, 332 => 124, 329 => 123, 323 => 120, 320 => 119, 316 => 118, 314 => 117, 311 => 116, 303 => 111, 299 => 110, 295 => 108, 291 => 107, 289 => 106, 286 => 105, 282 => 103, 276 => 101, 270 => 99, 268 => 98, 265 => 97, 261 => 96, 259 => 95, 256 => 94, 252 => 92, 246 => 90, 240 => 88, 238 => 87, 233 => 86, 231 => 85, 228 => 84, 224 => 83, 222 => 82, 218 => 80, 214 => 79, 211 => 78, 209 => 77, 206 => 76, 202 => 74, 193 => 68, 190 => 67, 188 => 65, 187 => 64, 186 => 63, 183 => 62, 178 => 59, 176 => 58, 175 => 57, 174 => 56, 173 => 55, 172 => 54, 170 => 53, 166 => 50, 160 => 47, 156 => 46, 153 => 45, 149 => 44, 147 => 43, 144 => 42, 138 => 39, 134 => 38, 131 => 37, 124 => 34, 120 => 33, 117 => 32, 113 => 31, 111 => 30, 108 => 29, 102 => 26, 98 => 25, 95 => 24, 91 => 23, 89 => 22, 83 => 19, 79 => 18, 76 => 17, 70 => 14, 66 => 13, 64 => 12, 60 => 10, 54 => 7, 51 => 6, 47 => 5, 45 => 4, 42 => 3, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "table/structure/display_table_stats.twig", "C:\\xampp\\phpMyAdmin\\templates\\table\\structure\\display_table_stats.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/5d/5d66fa2f3301978ff7ecb03a98299ab8.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/5d/5d66fa2f3301978ff7ecb03a98299ab8.php deleted file mode 100644 index 92a69c8..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/5d/5d66fa2f3301978ff7ecb03a98299ab8.php +++ /dev/null @@ -1,79 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable(($context["filesList"] ?? null)); - foreach ($context['_seq'] as $context["_key"] => $context["file"]) { - // line 2 - echo " -"; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['file'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - } - - public function getTemplateName() - { - return "file_select_options.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 50 => 3, 41 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "file_select_options.twig", "C:\\xampp\\phpMyAdmin\\templates\\file_select_options.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/64/64faf96ca52d1d9dcc8936ca6d240dd9.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/64/64faf96ca52d1d9dcc8936ca6d240dd9.php deleted file mode 100644 index d51c08c..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/64/64faf96ca52d1d9dcc8936ca6d240dd9.php +++ /dev/null @@ -1,1594 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - if ( !twig_test_empty(($context["columns"] ?? null))) { - // line 2 - echo " - env, twig_length_filter($this->env, ($context["row"] ?? null)), "html", null, true); - echo "\"> - env, twig_length_filter($this->env, ($context["columns"] ?? null)), "html", null, true); - echo "\"> -
            - - "; -echo _gettext("Table-specific privileges"); - // line 8 - echo " -

            - "; -echo _gettext("Note: MySQL privilege names are expressed in English."); - // line 10 - echo " -

            - -
            - - - - -
            - -
            - - "; -echo _gettext("Or"); - // line 32 - echo " - -
            - -
            - - - - -
            - -
            - - "; -echo _gettext("Or"); - // line 59 - echo " - -
            - -
            - - - - -
            - -
            - - "; -echo _gettext("Or"); - // line 86 - echo " - -
            - -
            - - - - -
            - -
            - - "; -echo _gettext("Or"); - // line 113 - echo " - -
            - -
            -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            - - "; - // line 231 - if ((twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Delete versioning rows_priv", [], "array", true, true, false, 231) || twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Delete_history_priv", [], "array", true, true, false, 231))) { - // line 232 - echo "
            - - -
            - "; - } - // line 245 - echo "
            -
            -
            - -"; - } else { - // line 250 - echo " -"; - // line 251 - $context["grant_count"] = 0; - // line 252 - echo "
            - - "; - // line 261 - if (($context["is_global"] ?? null)) { - // line 262 - echo " "; -echo _gettext("Global privileges"); - // line 263 - echo " "; - } elseif (($context["is_database"] ?? null)) { - // line 264 - echo " "; -echo _gettext("Database-specific privileges"); - // line 265 - echo " "; - } else { - // line 266 - echo " "; -echo _gettext("Table-specific privileges"); - // line 267 - echo " "; - } - // line 268 - echo " - - -

            - "; -echo _gettext("Note: MySQL privilege names are expressed in English."); - // line 272 - echo " -

            - -
            - - - - - -
            - "; - // line 282 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 283 - echo " - -
            - -
            - "; - // line 295 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 296 - echo " - -
            - -
            - "; - // line 308 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 309 - echo " - -
            - -
            - "; - // line 321 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 322 - echo " - -
            - - "; - // line 333 - if (($context["is_global"] ?? null)) { - // line 334 - echo "
            - "; - // line 335 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 336 - echo " - -
            - "; - } - // line 347 - echo "
            - -
            - - - - - -
            - "; - // line 356 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 357 - echo " - -
            - -
            - "; - // line 378 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 379 - echo " - -
            - -
            - "; - // line 391 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 392 - echo " - -
            - -
            - "; - // line 404 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 405 - echo " - -
            - -
            - "; - // line 426 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 427 - echo " - -
            - -
            - "; - // line 439 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 440 - echo " - -
            - -
            - "; - // line 452 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 453 - echo " - -
            - -
            - "; - // line 465 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 466 - echo " - -
            - -
            - "; - // line 478 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 479 - echo " - -
            - - "; - // line 490 - if (twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Create_view_priv", [], "array", true, true, false, 490)) { - // line 491 - echo "
            - "; - // line 492 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 493 - echo " - -
            - "; - } - // line 504 - echo " - "; - // line 505 - if (twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Create View_priv", [], "array", true, true, false, 505)) { - // line 506 - echo "
            - "; - // line 507 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 508 - echo " - -
            - "; - } - // line 519 - echo " - "; - // line 520 - if (twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Event_priv", [], "array", true, true, false, 520)) { - // line 521 - echo "
            - "; - // line 522 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 523 - echo " - -
            - -
            - "; - // line 535 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 536 - echo " - -
            - "; - } - // line 547 - echo "
            - -
            - - - - - - "; - // line 555 - if (($context["is_global"] ?? null)) { - // line 556 - echo "
            - "; - // line 557 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 558 - echo " - -
            - -
            - "; - // line 570 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 571 - echo " - -
            - -
            - "; - // line 584 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 585 - echo " - -
            - -
            - "; - // line 597 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 598 - echo " - -
            - -
            - "; - // line 610 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 611 - echo " - -
            - -
            - "; - // line 623 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 624 - echo " - -
            - "; - } else { - // line 635 - echo "
            - "; - // line 636 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 637 - echo " - -
            - "; - } - // line 649 - echo " -
            - "; - // line 651 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 652 - echo " - -
            - -
            - "; - // line 664 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 665 - echo " - -
            - - "; - // line 677 - if (($context["is_global"] ?? null)) { - // line 678 - echo "
            - "; - // line 679 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 680 - echo " - -
            - -
            - "; - // line 692 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 693 - echo " - -
            - -
            - "; - // line 705 - $context["grant_count"] = (($context["grant_count"] ?? null) + 1); - // line 706 - echo " - -
            - "; - } - // line 717 - echo "
            - - "; - // line 719 - if (($context["is_global"] ?? null)) { - // line 720 - echo "
            - "; -echo _gettext("Resource limits"); - // line 721 - echo " -

            - "; -echo _gettext("Note: Setting these options to 0 (zero) removes the limit."); - // line 723 - echo " -

            - -
            - - env, $this->source, ($context["row"] ?? null), "max_questions", [], "any", true, true, false, 735) && !(null === twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_questions", [], "any", false, false, false, 735)))) ? (print (twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_questions", [], "any", false, false, false, 735), "html", null, true))) : (print ("0"))); - echo "\" title=\""; -echo _gettext("Limits the number of queries the user may send to the server per hour."); - // line 736 - echo "\"> -
            - -
            - - env, $this->source, ($context["row"] ?? null), "max_updates", [], "any", true, true, false, 748) && !(null === twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_updates", [], "any", false, false, false, 748)))) ? (print (twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_updates", [], "any", false, false, false, 748), "html", null, true))) : (print ("0"))); - echo "\" title=\""; -echo _gettext("Limits the number of commands that change any table or database the user may execute per hour."); - // line 749 - echo "\"> -
            - -
            - - env, $this->source, ($context["row"] ?? null), "max_connections", [], "any", true, true, false, 761) && !(null === twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_connections", [], "any", false, false, false, 761)))) ? (print (twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_connections", [], "any", false, false, false, 761), "html", null, true))) : (print ("0"))); - echo "\" title=\""; -echo _gettext("Limits the number of new connections the user may open per hour."); - // line 762 - echo "\"> -
            - -
            - - env, $this->source, ($context["row"] ?? null), "max_user_connections", [], "any", true, true, false, 774) && !(null === twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_user_connections", [], "any", false, false, false, 774)))) ? (print (twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "max_user_connections", [], "any", false, false, false, 774), "html", null, true))) : (print ("0"))); - echo "\" title=\""; -echo _gettext("Limits the number of simultaneous connections the user may have."); - // line 775 - echo "\"> -
            -
            - -
            - SSL -
            -
            - env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 785) == "NONE") || (twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 785) == ""))) ? (" checked") : ("")); - echo "> - -
            - -
            - env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 794) == "ANY")) ? (" checked") : ("")); - echo "> - -
            - -
            - env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 803) == "X509")) ? (" checked") : ("")); - echo "> - -
            - -
            - env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 811) == "SPECIFIED")) ? (" checked") : ("")); - echo "> - -
            - -
            -
            - - env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "ssl_cipher", [], "any", false, false, false, 822), "html", null, true); - echo "\" size=\"80\" title=\""; -echo _gettext("Requires that a specific cipher method be used for a connection."); - // line 823 - echo "\""; - // line 824 - echo (((twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 824) != "SPECIFIED")) ? (" disabled") : ("")); - echo "> -
            - -
            - - env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "x509_issuer", [], "any", false, false, false, 831), "html", null, true); - echo "\" size=\"80\" title=\""; -echo _gettext("Requires that a valid X509 certificate issued by this CA be presented."); - // line 832 - echo "\""; - // line 833 - echo (((twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 833) != "SPECIFIED")) ? (" disabled") : ("")); - echo "> -
            - -
            - - env, twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "x509_subject", [], "any", false, false, false, 840), "html", null, true); - echo "\" size=\"80\" title=\""; -echo _gettext("Requires that a valid X509 certificate with this subject be presented."); - // line 841 - echo "\""; - // line 842 - echo (((twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "ssl_type", [], "any", false, false, false, 842) != "SPECIFIED")) ? (" disabled") : ("")); - echo "> -
            -
            -
            -
            - "; - } - // line 848 - echo " -
            -
            -env, (($context["grant_count"] ?? null) - ((twig_get_attribute($this->env, $this->source, ($context["row"] ?? null), "Grant_priv", [], "array", true, true, false, 851)) ? (1) : (0))), "html", null, true); - echo "\"> - -"; - } - // line 854 - echo " -"; - // line 855 - if (($context["has_submit"] ?? null)) { - // line 856 - echo "
            - - -
            -"; - } - } - - public function getTemplateName() - { - return "server/privileges/privileges_table.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 1569 => 858, 1564 => 856, 1562 => 855, 1559 => 854, 1553 => 851, 1548 => 848, 1539 => 842, 1537 => 841, 1533 => 840, 1523 => 833, 1521 => 832, 1517 => 831, 1507 => 824, 1505 => 823, 1501 => 822, 1487 => 811, 1477 => 803, 1475 => 802, 1464 => 794, 1462 => 793, 1451 => 785, 1449 => 784, 1438 => 775, 1434 => 774, 1427 => 768, 1418 => 762, 1414 => 761, 1407 => 755, 1398 => 749, 1394 => 748, 1387 => 742, 1378 => 736, 1374 => 735, 1367 => 729, 1358 => 723, 1353 => 721, 1349 => 720, 1347 => 719, 1343 => 717, 1334 => 710, 1326 => 707, 1323 => 706, 1321 => 705, 1311 => 697, 1303 => 694, 1300 => 693, 1298 => 692, 1288 => 684, 1280 => 681, 1277 => 680, 1275 => 679, 1272 => 678, 1270 => 677, 1259 => 670, 1252 => 666, 1249 => 665, 1247 => 664, 1237 => 656, 1229 => 653, 1226 => 652, 1224 => 651, 1220 => 649, 1211 => 642, 1204 => 639, 1202 => 638, 1199 => 637, 1197 => 636, 1194 => 635, 1185 => 628, 1177 => 625, 1174 => 624, 1172 => 623, 1162 => 615, 1154 => 612, 1151 => 611, 1149 => 610, 1139 => 602, 1131 => 599, 1128 => 598, 1126 => 597, 1116 => 589, 1108 => 586, 1105 => 585, 1103 => 584, 1093 => 576, 1086 => 573, 1084 => 572, 1081 => 571, 1079 => 570, 1069 => 562, 1061 => 559, 1058 => 558, 1056 => 557, 1053 => 556, 1051 => 555, 1046 => 552, 1042 => 551, 1035 => 547, 1026 => 540, 1018 => 537, 1015 => 536, 1013 => 535, 1003 => 527, 995 => 524, 992 => 523, 990 => 522, 987 => 521, 985 => 520, 982 => 519, 973 => 512, 965 => 509, 962 => 508, 960 => 507, 957 => 506, 955 => 505, 952 => 504, 943 => 497, 935 => 494, 932 => 493, 930 => 492, 927 => 491, 925 => 490, 916 => 483, 908 => 480, 905 => 479, 903 => 478, 893 => 470, 885 => 467, 882 => 466, 880 => 465, 870 => 457, 862 => 454, 859 => 453, 857 => 452, 847 => 444, 839 => 441, 836 => 440, 834 => 439, 824 => 431, 816 => 428, 813 => 427, 811 => 426, 801 => 418, 795 => 414, 788 => 410, 782 => 406, 780 => 405, 778 => 404, 768 => 396, 760 => 393, 757 => 392, 755 => 391, 745 => 383, 737 => 380, 734 => 379, 732 => 378, 722 => 370, 716 => 366, 709 => 362, 703 => 358, 701 => 357, 699 => 356, 693 => 352, 689 => 351, 682 => 347, 673 => 340, 665 => 337, 662 => 336, 660 => 335, 657 => 334, 655 => 333, 646 => 326, 638 => 323, 635 => 322, 633 => 321, 623 => 313, 615 => 310, 612 => 309, 610 => 308, 600 => 300, 592 => 297, 589 => 296, 587 => 295, 577 => 287, 569 => 284, 566 => 283, 564 => 282, 558 => 278, 554 => 277, 546 => 272, 540 => 269, 534 => 268, 531 => 267, 528 => 266, 525 => 265, 522 => 264, 519 => 263, 516 => 262, 514 => 261, 511 => 260, 505 => 256, 502 => 254, 499 => 252, 497 => 251, 494 => 250, 487 => 245, 478 => 238, 471 => 235, 469 => 234, 465 => 232, 463 => 231, 454 => 224, 446 => 221, 435 => 212, 427 => 209, 416 => 200, 408 => 197, 397 => 188, 389 => 185, 378 => 176, 370 => 173, 359 => 164, 352 => 161, 350 => 160, 339 => 151, 331 => 148, 320 => 139, 312 => 136, 301 => 127, 293 => 124, 285 => 118, 281 => 116, 276 => 113, 270 => 110, 263 => 105, 254 => 102, 247 => 101, 243 => 100, 237 => 96, 229 => 91, 225 => 89, 220 => 86, 214 => 83, 207 => 78, 198 => 75, 191 => 74, 187 => 73, 181 => 69, 173 => 64, 169 => 62, 164 => 59, 158 => 56, 151 => 51, 142 => 48, 135 => 47, 131 => 46, 125 => 42, 117 => 37, 113 => 35, 108 => 32, 102 => 29, 95 => 24, 86 => 21, 79 => 20, 75 => 19, 69 => 15, 61 => 10, 56 => 8, 52 => 6, 46 => 4, 42 => 3, 39 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "server/privileges/privileges_table.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\privileges\\privileges_table.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/68/6815bcfe05c216aa56060e7c8acaadc1.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/68/6815bcfe05c216aa56060e7c8acaadc1.php deleted file mode 100644 index 72a059b..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/68/6815bcfe05c216aa56060e7c8acaadc1.php +++ /dev/null @@ -1,373 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "
            -

            - "; - // line 3 - echo PhpMyAdmin\Html\Generator::getIcon("b_usredit"); - echo " - "; -echo _gettext("Edit privileges:"); - // line 5 - echo " "; -echo _gettext("User account"); - // line 6 - echo " - "; - // line 7 - if ( !twig_test_empty(($context["database"] ?? null))) { - // line 8 - echo " - // line 10 -($context["username"] ?? null), "hostname" => // line 11 -($context["hostname"] ?? null), "dbname" => "", "tablename" => ""]); - // line 14 - echo "\"> - '"; - // line 15 - echo twig_escape_filter($this->env, ($context["username"] ?? null), "html", null, true); - echo "'@'"; - echo twig_escape_filter($this->env, ($context["hostname"] ?? null), "html", null, true); - echo "' - - - - - "; - // line 19 - if (($context["is_databases"] ?? null)) { - // line 20 - echo " "; -echo _gettext("Databases"); - // line 21 - echo " "; - } else { - // line 22 - echo " "; -echo _gettext("Database"); - // line 23 - echo " "; - } - // line 24 - echo " - "; - // line 25 - if ( !twig_test_empty(($context["table"] ?? null))) { - // line 26 - echo " - // line 28 -($context["username"] ?? null), "hostname" => // line 29 -($context["hostname"] ?? null), "dbname" => // line 30 -($context["dbname"] ?? null), "tablename" => ""]); - // line 32 - echo "\"> - "; - // line 33 - echo twig_escape_filter($this->env, ($context["database"] ?? null), "html", null, true); - echo " - - - - - "; -echo _gettext("Table"); - // line 38 - echo " "; - echo twig_escape_filter($this->env, ($context["table"] ?? null), "html", null, true); - echo " - "; - } else { - // line 40 - echo " "; - if ( !twig_test_iterable(($context["database"] ?? null))) { - // line 41 - echo " "; - $context["database"] = [0 => ($context["database"] ?? null)]; - // line 42 - echo " "; - } - // line 43 - echo " - "; - // line 44 - echo twig_escape_filter($this->env, twig_join_filter(($context["database"] ?? null), ", "), "html", null, true); - echo " - - "; - } - // line 47 - echo " "; - } else { - // line 48 - echo " '"; - echo twig_escape_filter($this->env, ($context["username"] ?? null), "html", null, true); - echo "'@'"; - echo twig_escape_filter($this->env, ($context["hostname"] ?? null), "html", null, true); - echo "' - "; - } - // line 50 - echo "

            - - "; - // line 52 - if ((($context["current_user"] ?? null) == ((($context["username"] ?? null) . "@") . ($context["hostname"] ?? null)))) { - // line 53 - echo " "; - echo call_user_func_array($this->env->getFilter('notice')->getCallable(), [_gettext("Note: You are attempting to edit privileges of the user with which you are currently logged in.")]); - echo " - "; - } - // line 55 - echo " - "; - // line 56 - if (($context["user_does_not_exists"] ?? null)) { - // line 57 - echo " "; - echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("The selected user was not found in the privilege table.")]); - echo " - "; - // line 58 - echo ($context["login_information_fields"] ?? null); - echo " - "; - } - // line 60 - echo " -
            - "; - // line 62 - echo PhpMyAdmin\Url::getHiddenInputs(($context["params"] ?? null)); - echo " - - "; - // line 64 - echo ($context["privileges_table"] ?? null); - echo " -
            - - "; - // line 67 - echo ($context["table_specific_rights"] ?? null); - echo " - - "; - // line 69 - if ((( !twig_test_iterable(($context["database"] ?? null)) && (twig_length_filter($this->env, ($context["database"] ?? null)) > 0)) && !($context["is_wildcard"] ?? null))) { - // line 70 - echo " [ - "; -echo _gettext("Database"); - // line 72 - echo " twig_replace_filter( // line 73 -($context["database"] ?? null), ["\\_" => "_", "\\%" => "%"]), "reload" => true], "&"); - // line 75 - echo "\"> - "; - // line 76 - echo twig_escape_filter($this->env, twig_replace_filter(($context["database"] ?? null), ["\\_" => "_", "\\%" => "%"]), "html", null, true); - echo ": - "; - // line 77 - echo twig_escape_filter($this->env, ($context["database_url_title"] ?? null), "html", null, true); - echo " - - ] - "; - // line 80 - if ((twig_length_filter($this->env, ($context["table"] ?? null)) > 0)) { - // line 81 - echo " [ - "; -echo _gettext("Table"); - // line 83 - echo " twig_replace_filter( // line 84 -($context["database"] ?? null), ["\\_" => "_", "\\%" => "%"]), "table" => // line 85 -($context["table"] ?? null), "reload" => true], "&"); - // line 87 - echo "\"> - "; - // line 88 - echo twig_escape_filter($this->env, ($context["table"] ?? null), "html", null, true); - echo ": - "; - // line 89 - echo twig_escape_filter($this->env, ($context["table_url_title"] ?? null), "html", null, true); - echo " - - ] - "; - } - // line 93 - echo " "; - } - // line 94 - echo " - "; - // line 95 - echo ($context["change_password"] ?? null); - echo " - -
            - "; - // line 98 - echo PhpMyAdmin\Url::getHiddenInputs(); - echo " - env, ($context["username"] ?? null), "html", null, true); - echo "\"> - env, ($context["hostname"] ?? null), "html", null, true); - echo "\"> - "; - // line 101 - if ( !twig_test_empty(($context["user_group"] ?? null))) { - // line 102 - echo " env, ($context["user_group"] ?? null), "html", null, true); - echo "\"> - "; - } - // line 104 - echo " -
            - - "; -echo _gettext("Change login information / Copy user account"); - // line 108 - echo " - - "; - // line 110 - echo ($context["change_login_info_fields"] ?? null); - echo " - -
            - - "; -echo _gettext("Create a new user account with the same privileges and …"); - // line 115 - echo " - -
            - - -
            - -
            - - -
            - -
            - - -
            - -
            - - -
            -
            -
            - -
            - - -
            -
            -
            -"; - } - - public function getTemplateName() - { - return "server/privileges/user_properties.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 347 => 149, 337 => 142, 328 => 135, 319 => 128, 310 => 121, 302 => 115, 294 => 110, 290 => 108, 286 => 106, 281 => 104, 275 => 102, 273 => 101, 269 => 100, 265 => 99, 261 => 98, 257 => 97, 252 => 95, 249 => 94, 246 => 93, 239 => 89, 235 => 88, 232 => 87, 230 => 85, 229 => 84, 226 => 83, 222 => 81, 220 => 80, 214 => 77, 210 => 76, 207 => 75, 205 => 73, 202 => 72, 198 => 70, 196 => 69, 191 => 67, 185 => 64, 180 => 62, 176 => 61, 173 => 60, 168 => 58, 163 => 57, 161 => 56, 158 => 55, 152 => 53, 150 => 52, 146 => 50, 138 => 48, 135 => 47, 129 => 44, 126 => 43, 123 => 42, 120 => 41, 117 => 40, 111 => 38, 103 => 33, 100 => 32, 98 => 30, 97 => 29, 96 => 28, 95 => 27, 92 => 26, 90 => 25, 87 => 24, 84 => 23, 81 => 22, 78 => 21, 75 => 20, 73 => 19, 64 => 15, 61 => 14, 59 => 11, 58 => 10, 57 => 9, 54 => 8, 52 => 7, 49 => 6, 46 => 5, 41 => 3, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "server/privileges/user_properties.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\privileges\\user_properties.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/6b/6bd853fb5225b6a7aef98f477cad0eae.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/6b/6bd853fb5225b6a7aef98f477cad0eae.php deleted file mode 100644 index 846ab1e..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/6b/6bd853fb5225b6a7aef98f477cad0eae.php +++ /dev/null @@ -1,133 +0,0 @@ -source = $this->getSourceContext(); - - $this->blocks = [ - 'title' => [$this, 'block_title'], - 'selection_options' => [$this, 'block_selection_options'], - ]; - } - - protected function doGetParent(array $context) - { - // line 1 - return "export.twig"; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 25 - ob_start(function () { return ''; }); - // line 26 - echo " "; -echo _gettext("@SERVER@ will become the server name."); - $context["filename_hint"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); - // line 1 - $this->parent = $this->loadTemplate("export.twig", "server/export/index.twig", 1); - $this->parent->display($context, array_merge($this->blocks, $blocks)); - } - - // line 3 - public function block_title($context, array $blocks = []) - { - $macros = $this->macros; -echo _gettext("Exporting databases from the current server"); - } - - // line 5 - public function block_selection_options($context, array $blocks = []) - { - $macros = $this->macros; - // line 6 - echo "
            -
            "; -echo _gettext("Databases"); - // line 7 - echo "
            -
            -
            - - -
            - - -
            -
            -"; - } - - public function getTemplateName() - { - return "server/export/index.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 108 => 20, 99 => 17, 92 => 16, 88 => 15, 85 => 14, 79 => 11, 75 => 10, 69 => 7, 65 => 6, 61 => 5, 54 => 3, 49 => 1, 45 => 26, 43 => 25, 36 => 1,); - } - - public function getSourceContext() - { - return new Source("", "server/export/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\export\\index.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/73/73d2652d8fdb24e553f8c2c859c85abb.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/73/73d2652d8fdb24e553f8c2c859c85abb.php deleted file mode 100644 index bc596cd..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/73/73d2652d8fdb24e553f8c2c859c85abb.php +++ /dev/null @@ -1,90 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "
            -
            -
            -
            -
            "; -echo _gettext("Loading"); - // line 5 - echo "
            - -
            -
            -
            - - - -
            -
            -
            -
            -"; - } - - public function getTemplateName() - { - return "modals/index_dialog_modal.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 63 => 12, 59 => 11, 55 => 10, 48 => 6, 44 => 5, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "modals/index_dialog_modal.twig", "C:\\xampp\\phpMyAdmin\\templates\\modals\\index_dialog_modal.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/7e/7ec8ff79d0910373bda2ab5f7b775566.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/7e/7ec8ff79d0910373bda2ab5f7b775566.php deleted file mode 100644 index 0503891..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/7e/7ec8ff79d0910373bda2ab5f7b775566.php +++ /dev/null @@ -1,141 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable($this->env->getRuntime('PhpMyAdmin\FlashMessages')->getMessages()); - foreach ($context['_seq'] as $context["flash_key"] => $context["flash_messages"]) { - // line 2 - echo " "; - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable($context["flash_messages"]); - foreach ($context['_seq'] as $context["_key"] => $context["flash_message"]) { - // line 3 - echo "
            env, $context["flash_key"], "html", null, true); - echo "\" role=\"alert\"> - "; - // line 4 - echo twig_escape_filter($this->env, $context["flash_message"], "html", null, true); - echo " -
            - "; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['flash_message'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['flash_key'], $context['flash_messages'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - // line 8 - echo " -"; - // line 9 - if (($context["has_tables"] ?? null)) { - // line 10 - echo "
            - "; - // line 11 - echo ($context["list_navigator_html"] ?? null); - echo " - - "; - // line 13 - echo ($context["table_list_html"] ?? null); - echo " - - "; - // line 15 - echo ($context["list_navigator_html"] ?? null); - echo " -
            -
            -

            - - ($context["database"] ?? null), "goto" => PhpMyAdmin\Url::getFromRoute("/database/structure")]); - echo "\"> - "; - // line 21 - echo PhpMyAdmin\Html\Generator::getIcon("b_tblanalyse", _gettext("Data dictionary"), true); - echo " - -

            -"; - } else { - // line 25 - echo " "; - echo call_user_func_array($this->env->getFilter('notice')->getCallable(), [_gettext("No tables found in database.")]); - echo " -"; - } - // line 27 - echo " -"; - // line 28 - if ( !($context["is_system_schema"] ?? null)) { - // line 29 - echo " "; - echo ($context["create_table_html"] ?? null); - echo " -"; - } - } - - public function getTemplateName() - { - return "database/structure/index.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 115 => 29, 113 => 28, 110 => 27, 104 => 25, 97 => 21, 93 => 20, 89 => 19, 82 => 15, 77 => 13, 72 => 11, 69 => 10, 67 => 9, 64 => 8, 51 => 4, 46 => 3, 41 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "database/structure/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\database\\structure\\index.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/7f/7f9d7eb1fce94f372f4786ece6d9b303.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/7f/7f9d7eb1fce94f372f4786ece6d9b303.php deleted file mode 100644 index 9890526..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/7f/7f9d7eb1fce94f372f4786ece6d9b303.php +++ /dev/null @@ -1,757 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - ob_start(function () { return ''; }); - // line 2 - echo " "; - if ( !twig_test_empty(($context["navigation"] ?? null))) { - // line 3 - echo " - - - - "; - // line 7 - echo twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "move_backward_buttons", [], "any", false, false, false, 7); - echo " - "; - // line 8 - echo twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "page_selector", [], "any", false, false, false, 8); - echo " - "; - // line 9 - echo twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "move_forward_buttons", [], "any", false, false, false, 9); - echo " - - "; - // line 11 - if ((twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "number_total_page", [], "any", false, false, false, 11) != 1)) { - // line 12 - echo " - "; - } - // line 14 - echo " - "; - // line 15 - if (twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "has_show_all", [], "any", false, false, false, 15)) { - // line 16 - echo " - - "; - } - // line 29 - echo " - - - - - - - - -
            |
            -
            - "; - // line 18 - echo PhpMyAdmin\Url::getHiddenFields(twig_array_merge(twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "hidden_fields", [], "any", false, false, false, 18), ["session_max_rows" => twig_get_attribute($this->env, $this->source, // line 19 -($context["navigation"] ?? null), "session_max_rows", [], "any", false, false, false, 19), "pos" => "0"])); - // line 21 - echo " - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\" class=\"showAllRows\" value=\"all\""; - // line 23 - echo ((twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "is_showing_all", [], "any", false, false, false, 23)) ? (" checked") : ("")); - echo "> - -
            -
            |
            -
            - -
            |
            -
            -
            -
            - -
            |
            -
            -
            -
            - "; - // line 44 - echo PhpMyAdmin\Url::getHiddenFields(twig_array_merge(twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "hidden_fields", [], "any", false, false, false, 44), ["pos" => twig_get_attribute($this->env, $this->source, // line 45 -($context["navigation"] ?? null), "pos", [], "any", false, false, false, 45), "unlim_num_rows" => // line 46 -($context["unlim_num_rows"] ?? null)])); - // line 47 - echo " - - - -
            -
            - "; -echo _gettext("Filter rows"); - // line 62 - echo ": - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\"> - - "; - // line 67 - if ( !twig_test_empty(twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "sort_by_key", [], "any", false, false, false, 67))) { - // line 68 - echo "
            - "; - // line 69 - echo PhpMyAdmin\Url::getHiddenFields(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["navigation"] ?? null), "sort_by_key", [], "any", false, false, false, 69), "hidden_fields", [], "any", false, false, false, 69)); - echo " - "; -echo _gettext("Sort by key:"); - // line 71 - echo " -
            - "; - } - // line 78 - echo "
            - "; - } - $context["navigation_html"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); - // line 84 - echo " -"; - // line 85 - echo ($context["sql_query_message"] ?? null); - echo " - -"; - // line 87 - echo twig_escape_filter($this->env, ($context["navigation_html"] ?? null), "html", null, true); - echo " - -env, ($context["save_cells_at_once"] ?? null), "html", null, true); - echo "\"> -
            - "; - // line 91 - echo PhpMyAdmin\Url::getHiddenInputs(($context["db"] ?? null), ($context["table"] ?? null)); - echo " -
            - -"; - // line 94 - if ( !twig_test_empty(twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 94))) { - // line 95 - echo " "; - if (twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 95), "order", [], "any", false, false, false, 95)) { - // line 96 - echo " env, twig_join_filter(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 96), "order", [], "any", false, false, false, 96), ","), "html", null, true); - echo "\"> - "; - } - // line 98 - echo " "; - if (twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 98), "visibility", [], "any", false, false, false, 98)) { - // line 99 - echo " env, twig_join_filter(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 99), "visibility", [], "any", false, false, false, 99), ","), "html", null, true); - echo "\"> - "; - } - // line 101 - echo " "; - if ( !twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 101), "is_view", [], "any", false, false, false, 101)) { - // line 102 - echo " env, twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_order", [], "any", false, false, false, 102), "table_create_time", [], "any", false, false, false, 102), "html", null, true); - echo "\"> - "; - } - } - // line 105 - echo " -"; - // line 106 - if ( !twig_test_empty(twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 106))) { - // line 107 - echo "
            - "; - // line 108 - echo PhpMyAdmin\Url::getHiddenInputs(["db" => // line 109 -($context["db"] ?? null), "table" => // line 110 -($context["table"] ?? null), "sql_query" => // line 111 -($context["sql_query"] ?? null), "goto" => // line 112 -($context["goto"] ?? null), "display_options_form" => 1]); - // line 114 - echo " - - "; - // line 116 - if ((($context["default_sliders_state"] ?? null) != "disabled")) { - // line 117 - echo "
            - -
            -
            - "; - } - // line 124 - echo " -
            -
            -
            - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\" value=\"P\""; - echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 128), "pftext", [], "any", false, false, false, 128) == "P")) ? (" checked") : ("")); - echo "> - -
            -
            - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\" value=\"F\""; - echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 132), "pftext", [], "any", false, false, false, 132) == "F")) ? (" checked") : ("")); - echo "> - -
            -
            - - "; - // line 137 - if ((($context["relwork"] ?? null) && ($context["displaywork"] ?? null))) { - // line 138 - echo "
            -
            - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\" value=\"K\""; - echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 140), "relational_display", [], "any", false, false, false, 140) == "K")) ? (" checked") : ("")); - echo "> - -
            -
            - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\" value=\"D\""; - echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 144), "relational_display", [], "any", false, false, false, 144) == "D")) ? (" checked") : ("")); - echo "> - -
            -
            - "; - } - // line 149 - echo " -
            - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\""; - // line 152 - echo (( !twig_test_empty(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 152), "display_binary", [], "any", false, false, false, 152))) ? (" checked") : ("")); - echo "> - - - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\""; - // line 156 - echo (( !twig_test_empty(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 156), "display_blob", [], "any", false, false, false, 156))) ? (" checked") : ("")); - echo "> - -
            - - "; - // line 164 - echo "
            - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\""; - // line 166 - echo (( !twig_test_empty(twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 166), "hide_transformation", [], "any", false, false, false, 166))) ? (" checked") : ("")); - echo "> - -
            - -
            - "; - // line 171 - if (twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 171), "possible_as_geometry", [], "any", false, false, false, 171)) { - // line 172 - echo "
            - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\" value=\"GEOM\""; - echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 173), "geo_option", [], "any", false, false, false, 173) == "GEOM")) ? (" checked") : ("")); - echo "> - -
            - "; - } - // line 177 - echo "
            - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\" value=\"WKT\""; - echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 178), "geo_option", [], "any", false, false, false, 178) == "WKT")) ? (" checked") : ("")); - echo "> - -
            -
            - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\" value=\"WKB\""; - echo (((twig_get_attribute($this->env, $this->source, twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "options", [], "any", false, false, false, 182), "geo_option", [], "any", false, false, false, 182) == "WKB")) ? (" checked") : ("")); - echo "> - -
            -
            -
            -
            - -
            - -
            - "; - // line 192 - if ((($context["default_sliders_state"] ?? null) != "disabled")) { - // line 193 - echo "
            - "; - } - // line 195 - echo "
            -"; - } - // line 197 - echo " -"; - // line 198 - if (twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "has_bulk_actions_form", [], "any", false, false, false, 198)) { - // line 199 - echo "
            env, ($context["unique_id"] ?? null), "html", null, true); - echo "\" class=\"ajax\"> - "; - // line 200 - echo PhpMyAdmin\Url::getHiddenInputs(($context["db"] ?? null), ($context["table"] ?? null), 1); - echo " - -"; - } - // line 203 - echo " -
            - env, ($context["unique_id"] ?? null), "html", null, true); - echo "\"> - - "; - // line 207 - echo twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "button", [], "any", false, false, false, 207); - echo " - "; - // line 208 - echo twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "table_headers_for_columns", [], "any", false, false, false, 208); - echo " - "; - // line 209 - echo twig_get_attribute($this->env, $this->source, ($context["headers"] ?? null), "column_at_right_side", [], "any", false, false, false, 209); - echo " - - - - - - "; - // line 215 - echo ($context["body"] ?? null); - echo " - -
            -
            - -"; - // line 220 - if ( !twig_test_empty(($context["bulk_links"] ?? null))) { - // line 221 - echo "
            - env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath((("arrow_" . ($context["text_dir"] ?? null)) . ".png")), "html", null, true); - echo "\" width=\"38\" height=\"22\" alt=\""; -echo _gettext("With selected:"); - echo "\"> - env, ($context["unique_id"] ?? null), "html", null, true); - echo "_checkall\" class=\"checkall_box\" title=\""; -echo _gettext("Check all"); - echo "\"> - - "; -echo _gettext("With selected:"); - // line 225 - echo " - - - - - - - - "; - // line 239 - if (twig_get_attribute($this->env, $this->source, ($context["bulk_links"] ?? null), "has_export_button", [], "any", false, false, false, 239)) { - // line 240 - echo " - "; - } - // line 244 - echo "
            - - env, twig_get_attribute($this->env, $this->source, ($context["bulk_links"] ?? null), "clause_is_unique", [], "any", false, false, false, 246), "html", null, true); - echo "\"> - env, ($context["sql_query"] ?? null), "html", null, true); - echo "\"> -
            -"; - } - // line 250 - echo " -"; - // line 251 - echo twig_escape_filter($this->env, ($context["navigation_html"] ?? null), "html", null, true); - echo " - -"; - // line 253 - if ( !twig_test_empty(($context["operations"] ?? null))) { - // line 254 - echo "
            - "; -echo _gettext("Query results operations"); - // line 255 - echo " - - "; - // line 257 - if (twig_get_attribute($this->env, $this->source, ($context["operations"] ?? null), "has_print_link", [], "any", false, false, false, 257)) { - // line 258 - echo " - - "; - // line 260 - echo PhpMyAdmin\Html\Generator::linkOrButton("#", null, PhpMyAdmin\Html\Generator::getIcon("b_insrow", _gettext("Copy to clipboard"), true), ["id" => "copyToClipBoard", "class" => "btn"]); - // line 265 - echo " - "; - } - // line 267 - echo " - "; - // line 268 - if ( !twig_get_attribute($this->env, $this->source, ($context["operations"] ?? null), "has_procedure", [], "any", false, false, false, 268)) { - // line 269 - echo " "; - if (twig_get_attribute($this->env, $this->source, ($context["operations"] ?? null), "has_export_link", [], "any", false, false, false, 269)) { - // line 270 - echo " "; - echo PhpMyAdmin\Html\Generator::linkOrButton(PhpMyAdmin\Url::getFromRoute("/table/export"), twig_get_attribute($this->env, $this->source, // line 272 -($context["operations"] ?? null), "url_params", [], "any", false, false, false, 272), PhpMyAdmin\Html\Generator::getIcon("b_tblexport", _gettext("Export"), true), ["class" => "btn"]); - // line 275 - echo " - - "; - // line 277 - echo PhpMyAdmin\Html\Generator::linkOrButton(PhpMyAdmin\Url::getFromRoute("/table/chart"), twig_get_attribute($this->env, $this->source, // line 279 -($context["operations"] ?? null), "url_params", [], "any", false, false, false, 279), PhpMyAdmin\Html\Generator::getIcon("b_chart", _gettext("Display chart"), true), ["class" => "btn"]); - // line 282 - echo " - - "; - // line 284 - if (twig_get_attribute($this->env, $this->source, ($context["operations"] ?? null), "has_geometry", [], "any", false, false, false, 284)) { - // line 285 - echo " "; - echo PhpMyAdmin\Html\Generator::linkOrButton(PhpMyAdmin\Url::getFromRoute("/table/gis-visualization"), twig_get_attribute($this->env, $this->source, // line 287 -($context["operations"] ?? null), "url_params", [], "any", false, false, false, 287), PhpMyAdmin\Html\Generator::getIcon("b_globe", _gettext("Visualize GIS data"), true), ["class" => "btn"]); - // line 290 - echo " - "; - } - // line 292 - echo " "; - } - // line 293 - echo " - - "; - // line 295 - echo PhpMyAdmin\Html\Generator::linkOrButton(PhpMyAdmin\Url::getFromRoute("/view/create"), ["db" => // line 297 -($context["db"] ?? null), "table" => ($context["table"] ?? null), "sql_query" => ($context["sql_query"] ?? null), "printview" => true], PhpMyAdmin\Html\Generator::getIcon("b_view_add", _gettext("Create view"), true), ["class" => "btn create_view ajax"]); - // line 300 - echo " - - "; - } - // line 303 - echo "
            -"; - } - } - - public function getTemplateName() - { - return "display/results/table.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 733 => 303, 728 => 300, 726 => 297, 725 => 295, 721 => 293, 718 => 292, 714 => 290, 712 => 287, 710 => 285, 708 => 284, 704 => 282, 702 => 279, 701 => 277, 697 => 275, 695 => 272, 693 => 270, 690 => 269, 688 => 268, 685 => 267, 681 => 265, 679 => 260, 673 => 258, 671 => 257, 667 => 255, 663 => 254, 661 => 253, 656 => 251, 653 => 250, 647 => 247, 643 => 246, 639 => 244, 633 => 241, 628 => 240, 626 => 239, 620 => 236, 617 => 235, 610 => 232, 607 => 231, 600 => 228, 597 => 227, 592 => 225, 585 => 224, 579 => 223, 573 => 222, 570 => 221, 568 => 220, 560 => 215, 551 => 209, 547 => 208, 543 => 207, 538 => 205, 534 => 203, 529 => 201, 525 => 200, 520 => 199, 518 => 198, 515 => 197, 511 => 195, 507 => 193, 505 => 192, 501 => 190, 488 => 183, 482 => 182, 474 => 179, 468 => 178, 465 => 177, 457 => 174, 451 => 173, 448 => 172, 446 => 171, 437 => 167, 433 => 166, 430 => 165, 427 => 164, 419 => 157, 415 => 156, 412 => 155, 405 => 153, 401 => 152, 398 => 151, 394 => 149, 385 => 145, 379 => 144, 371 => 141, 365 => 140, 361 => 138, 359 => 137, 350 => 133, 344 => 132, 336 => 129, 330 => 128, 324 => 124, 319 => 122, 315 => 120, 310 => 118, 307 => 117, 305 => 116, 301 => 114, 299 => 112, 298 => 111, 297 => 110, 296 => 109, 295 => 108, 290 => 107, 288 => 106, 285 => 105, 278 => 102, 275 => 101, 269 => 99, 266 => 98, 260 => 96, 257 => 95, 255 => 94, 249 => 91, 244 => 89, 239 => 87, 234 => 85, 231 => 84, 223 => 78, 218 => 75, 205 => 73, 201 => 72, 198 => 71, 193 => 69, 188 => 68, 186 => 67, 179 => 64, 175 => 62, 167 => 57, 154 => 55, 149 => 54, 143 => 52, 141 => 51, 137 => 49, 132 => 47, 130 => 46, 129 => 45, 128 => 44, 124 => 43, 117 => 38, 108 => 32, 102 => 29, 92 => 24, 88 => 23, 85 => 22, 82 => 21, 80 => 19, 79 => 18, 75 => 17, 72 => 16, 70 => 15, 67 => 14, 63 => 12, 61 => 11, 56 => 9, 52 => 8, 48 => 7, 42 => 3, 39 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "display/results/table.twig", "C:\\xampp\\phpMyAdmin\\templates\\display\\results\\table.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/8f/8f49fb1d1444954616e2f57a568edd17.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/8f/8f49fb1d1444954616e2f57a568edd17.php deleted file mode 100644 index e91f1b5..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/8f/8f49fb1d1444954616e2f57a568edd17.php +++ /dev/null @@ -1,258 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "
            - env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath((("arrow_" . ($context["text_dir"] ?? null)) . ".png")), "html", null, true); - echo "\" width=\"38\" height=\"22\" alt=\""; -echo _gettext("With selected:"); - echo "\"> - - - "; - // line 5 - if ((($context["overhead_check"] ?? null) != "")) { - // line 6 - echo " / "; -echo _gettext("Check tables having overhead"); - echo " - "; - } - // line 8 - echo " - "; - // line 39 - echo twig_join_filter(($context["hidden_fields"] ?? null), " -"); - echo " -
            - -
            -
            -
            -
            -
            - -
            -
            -
            - - -
            -
            -
            -
            - -"; - // line 59 - if ((array_key_exists("central_columns_work", $context) && ($context["central_columns_work"] ?? null))) { - // line 60 - echo "
            -
            -
            -
            -
            "; -echo _gettext("Are you sure?"); - // line 65 - echo "
            - -
            -
            - "; - // line 69 - echo PhpMyAdmin\Sanitize::sanitizeMessage(_gettext("This action may change some of the columns definition.[br]Are you sure you want to continue?")); - echo " -
            -
            - - -
            -
            -
            -
            -"; - } - } - - public function getTemplateName() - { - return "database/structure/check_all_tables.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 230 => 73, 226 => 72, 219 => 69, 214 => 66, 210 => 65, 202 => 60, 200 => 59, 192 => 53, 188 => 52, 181 => 48, 167 => 39, 164 => 38, 159 => 35, 155 => 34, 151 => 33, 145 => 32, 142 => 31, 137 => 28, 133 => 27, 129 => 26, 125 => 25, 120 => 23, 116 => 22, 112 => 21, 108 => 20, 104 => 19, 100 => 18, 95 => 16, 91 => 15, 85 => 14, 83 => 13, 80 => 12, 76 => 11, 72 => 10, 66 => 9, 62 => 8, 56 => 6, 54 => 5, 51 => 4, 47 => 3, 40 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "database/structure/check_all_tables.twig", "C:\\xampp\\phpMyAdmin\\templates\\database\\structure\\check_all_tables.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/90/903bb4d86a52617f11388acd5e8b630b.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/90/903bb4d86a52617f11388acd5e8b630b.php deleted file mode 100644 index 40b5a2f..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/90/903bb4d86a52617f11388acd5e8b630b.php +++ /dev/null @@ -1,73 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo " -
          • -
            - "; - // line 4 - echo ($context["collapse_all"] ?? null); - echo " - "; - // line 5 - echo ($context["unlink"] ?? null); - echo " -
            -
          • - -"; - } - - public function getTemplateName() - { - return "navigation/tree/controls.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 46 => 5, 42 => 4, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "navigation/tree/controls.twig", "C:\\xampp\\phpMyAdmin\\templates\\navigation\\tree\\controls.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/9e/9e86da622528ad18f875b9906ddc7e47.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/9e/9e86da622528ad18f875b9906ddc7e47.php deleted file mode 100644 index b2bd2cb..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/9e/9e86da622528ad18f875b9906ddc7e47.php +++ /dev/null @@ -1,428 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - if (($context["is_superuser"] ?? null)) { - // line 2 - echo "
            - "; - // line 3 - echo PhpMyAdmin\Url::getHiddenInputs(($context["db"] ?? null), ($context["table"] ?? null)); - echo " - -
            - - "; - // line 7 - echo PhpMyAdmin\Html\Generator::getIcon("b_usrcheck"); - echo " - "; - // line 8 - echo twig_sprintf(_gettext("Users having access to \"%s\""), (((((((" // line 9 -($context["db"] ?? null), "table" => // line 10 -($context["table"] ?? null)], "&")) . "\">") . twig_escape_filter($this->env, // line 11 -($context["db"] ?? null), "html")) . ".") . twig_escape_filter($this->env, ($context["table"] ?? null), "html")) . "")); - echo " - - -
            - - - - - - - - - - - - - - - "; - // line 29 - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable(($context["privileges"] ?? null)); - $context['_iterated'] = false; - $context['loop'] = [ - 'parent' => $context['_parent'], - 'index0' => 0, - 'index' => 1, - 'first' => true, - ]; - if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) { - $length = count($context['_seq']); - $context['loop']['revindex0'] = $length - 1; - $context['loop']['revindex'] = $length; - $context['loop']['length'] = $length; - $context['loop']['last'] = 1 === $length; - } - foreach ($context['_seq'] as $context["_key"] => $context["privilege"]) { - // line 30 - echo " "; - $context["privileges_amount"] = twig_length_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "privileges", [], "any", false, false, false, 30)); - // line 31 - echo " - 1)) { - echo " class=\"align-middle\" rowspan=\""; - echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); - echo "\""; - } - echo "> - env, twig_get_attribute($this->env, $this->source, $context["loop"], "index0", [], "any", false, false, false, 33), "html", null, true); - echo "\" value=\""; - // line 34 - echo twig_escape_filter($this->env, ((twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 34) . "&#27;") . twig_get_attribute($this->env, $this->source, $context["privilege"], "host", [], "any", false, false, false, 34)), "html", null, true); - echo "\"> - - 1)) { - echo " class=\"align-middle\" rowspan=\""; - echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); - echo "\""; - } - echo "> - "; - // line 37 - if (twig_test_empty(twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 37))) { - // line 38 - echo " "; -echo _gettext("Any"); - echo " - "; - } else { - // line 40 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 40), "html", null, true); - echo " - "; - } - // line 42 - echo " - 1)) { - echo " class=\"align-middle\" rowspan=\""; - echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); - echo "\""; - } - echo "> - "; - // line 44 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "host", [], "any", false, false, false, 44), "html", null, true); - echo " - - "; - // line 46 - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env, $this->source, $context["privilege"], "privileges", [], "any", false, false, false, 46)); - foreach ($context['_seq'] as $context["_key"] => $context["priv"]) { - // line 47 - echo " - - - - - - "; - // line 99 - if ((($context["privileges_amount"] ?? null) > 1)) { - // line 100 - echo " - "; - } - // line 102 - echo " "; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['priv'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - // line 103 - echo " "; - $context['_iterated'] = true; - ++$context['loop']['index0']; - ++$context['loop']['index']; - $context['loop']['first'] = false; - if (isset($context['loop']['length'])) { - --$context['loop']['revindex0']; - --$context['loop']['revindex']; - $context['loop']['last'] = 0 === $context['loop']['revindex0']; - } - } - if (!$context['_iterated']) { - // line 104 - echo " - - - "; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['privilege'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - // line 110 - echo " -
            "; -echo _gettext("User name"); - // line 19 - echo ""; -echo _gettext("Host name"); - // line 20 - echo ""; -echo _gettext("Type"); - // line 21 - echo ""; -echo _gettext("Privileges"); - // line 22 - echo ""; -echo _gettext("Grant"); - // line 23 - echo ""; -echo _gettext("Action"); - // line 24 - echo "
            - "; - // line 48 - if ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 48) == "g")) { - // line 49 - echo " "; -echo _gettext("global"); - // line 50 - echo " "; - } elseif ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 50) == "d")) { - // line 51 - echo " "; - if ((twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 51) == twig_replace_filter(($context["db"] ?? null), ["_" => "\\_", "%" => "\\%"]))) { - // line 52 - echo " "; -echo _gettext("database-specific"); - // line 53 - echo " "; - } else { - // line 54 - echo " "; -echo _gettext("wildcard"); - echo ": "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 54), "html", null, true); - echo " - "; - } - // line 56 - echo " "; - } elseif ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 56) == "t")) { - // line 57 - echo " "; -echo _gettext("table-specific"); - // line 58 - echo " "; - } elseif ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 58) == "r")) { - // line 59 - echo " "; -echo _gettext("routine"); - // line 60 - echo " "; - } - // line 61 - echo " - - "; - // line 64 - if ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 64) == "r")) { - // line 65 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 65), "html", null, true); - echo " - ("; - // line 66 - echo twig_escape_filter($this->env, twig_upper_filter($this->env, twig_join_filter(twig_get_attribute($this->env, $this->source, $context["priv"], "privileges", [], "any", false, false, false, 66), ", ")), "html", null, true); - echo ") - "; - } else { - // line 68 - echo " "; - echo twig_join_filter(twig_get_attribute($this->env, $this->source, $context["priv"], "privileges", [], "any", false, false, false, 68), ", "); - echo " - "; - } - // line 70 - echo " - - "; - // line 73 - echo twig_escape_filter($this->env, ((twig_get_attribute($this->env, $this->source, $context["priv"], "has_grant", [], "any", false, false, false, 73)) ? (_gettext("Yes")) : (_gettext("No"))), "html", null, true); - echo " - - "; - // line 76 - if (($context["is_grantuser"] ?? null)) { - // line 77 - echo " twig_get_attribute($this->env, $this->source, // line 78 -$context["privilege"], "user", [], "any", false, false, false, 78), "hostname" => twig_get_attribute($this->env, $this->source, // line 79 -$context["privilege"], "host", [], "any", false, false, false, 79), "dbname" => (((twig_get_attribute($this->env, $this->source, // line 80 -$context["priv"], "database", [], "any", false, false, false, 80) != "*")) ? (twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 80)) : ("")), "tablename" => (((twig_get_attribute($this->env, $this->source, // line 81 -$context["priv"], "table", [], "any", true, true, false, 81) && (twig_get_attribute($this->env, $this->source, $context["priv"], "table", [], "any", false, false, false, 81) != "*"))) ? (twig_get_attribute($this->env, $this->source, $context["priv"], "table", [], "any", false, false, false, 81)) : ("")), "routinename" => (((twig_get_attribute($this->env, $this->source, // line 82 -$context["priv"], "routine", [], "any", true, true, false, 82) && !(null === twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 82)))) ? (twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 82)) : (""))]); - // line 83 - echo "\"> - "; - // line 84 - echo PhpMyAdmin\Html\Generator::getIcon("b_usredit", _gettext("Edit privileges")); - echo " - - "; - } - // line 87 - echo " - twig_get_attribute($this->env, $this->source, // line 90 -$context["privilege"], "user", [], "any", false, false, false, 90), "hostname" => twig_get_attribute($this->env, $this->source, // line 91 -$context["privilege"], "host", [], "any", false, false, false, 91), "export" => true, "initial" => ""]); - // line 94 - echo "\"> - "; - // line 95 - echo PhpMyAdmin\Html\Generator::getIcon("b_tblexport", _gettext("Export")); - echo " - -
            - "; -echo _gettext("No user found."); - // line 107 - echo "
            -
            - -
            - env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath((("arrow_" . ($context["text_dir"] ?? null)) . ".png")), "html", null, true); - echo "\" alt=\""; -echo _gettext("With selected:"); - // line 116 - echo "\" width=\"38\" height=\"22\"> - - - "; -echo _gettext("With selected:"); - // line 119 - echo " - -
            -
            -
            -"; - } else { - // line 127 - echo " "; - echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("Not enough privilege to view users.")]); - echo " -"; - } - // line 129 - echo " -"; - // line 130 - if (($context["is_createuser"] ?? null)) { - // line 131 - echo " -"; - } - } - - public function getTemplateName() - { - return "table/privileges/index.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 399 => 140, 394 => 139, 392 => 138, 391 => 137, 390 => 135, 387 => 134, 381 => 131, 379 => 130, 376 => 129, 370 => 127, 361 => 121, 358 => 120, 354 => 119, 350 => 118, 346 => 117, 342 => 116, 338 => 115, 331 => 110, 323 => 107, 318 => 104, 305 => 103, 299 => 102, 295 => 100, 293 => 99, 286 => 95, 283 => 94, 281 => 91, 280 => 90, 279 => 89, 275 => 87, 269 => 84, 266 => 83, 264 => 82, 263 => 81, 262 => 80, 261 => 79, 260 => 78, 258 => 77, 256 => 76, 250 => 73, 245 => 70, 239 => 68, 234 => 66, 229 => 65, 227 => 64, 222 => 61, 219 => 60, 216 => 59, 213 => 58, 210 => 57, 207 => 56, 199 => 54, 196 => 53, 193 => 52, 190 => 51, 187 => 50, 184 => 49, 182 => 48, 179 => 47, 175 => 46, 170 => 44, 162 => 43, 159 => 42, 153 => 40, 147 => 38, 145 => 37, 137 => 36, 132 => 34, 129 => 33, 121 => 32, 118 => 31, 115 => 30, 97 => 29, 90 => 24, 86 => 23, 82 => 22, 78 => 21, 74 => 20, 70 => 19, 58 => 11, 57 => 10, 56 => 9, 55 => 8, 51 => 7, 44 => 3, 39 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "table/privileges/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\table\\privileges\\index.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/ac/ac3dec8d7b12e3b2b4ad59bc47b74b50.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/ac/ac3dec8d7b12e3b2b4ad59bc47b74b50.php deleted file mode 100644 index 29f9b44..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/ac/ac3dec8d7b12e3b2b4ad59bc47b74b50.php +++ /dev/null @@ -1,324 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "
            -
            "; -echo _gettext("Replica replication"); - // line 2 - echo "
            -
            - "; - // line 4 - if (($context["server_replica_multi_replication"] ?? null)) { - // line 5 - echo " "; -echo _gettext("Primary connection:"); - // line 6 - echo "
            - "; - // line 7 - echo PhpMyAdmin\Url::getHiddenInputs(($context["url_params"] ?? null)); - echo " - - -
            -
            -
            - "; - } - // line 21 - echo " - "; - // line 22 - if (($context["server_replica_status"] ?? null)) { - // line 23 - echo "
            - "; - // line 24 - if ( !($context["replica_sql_running"] ?? null)) { - // line 25 - echo " "; - echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("Replica SQL Thread not running!")]); - echo " - "; - } - // line 27 - echo " "; - if ( !($context["replica_io_running"] ?? null)) { - // line 28 - echo " "; - echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("Replica IO Thread not running!")]); - echo " - "; - } - // line 30 - echo " -

            "; -echo _gettext("Server is configured as replica in a replication process. Would you like to:"); - // line 31 - echo "

            - -
            - "; - } elseif ( ! // line 102 -($context["has_replica_configure"] ?? null)) { - // line 103 - echo " "; - ob_start(function () { return ''; }); - // line 107 - echo " "; -echo _gettext("This server is not configured as replica in a replication process. Would you like to %sconfigure%s it?"); - // line 108 - echo " "; - $___internal_parse_0_ = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); - // line 103 - echo twig_sprintf($___internal_parse_0_, ((((" true, "repl_clear_scr" => true]))) . "\">"), ""); - // line 109 - echo " "; - } - // line 110 - echo "
            -
            -"; - } - - public function getTemplateName() - { - return "server/replication/replica_configuration.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 300 => 110, 297 => 109, 295 => 103, 292 => 108, 289 => 107, 286 => 103, 284 => 102, 278 => 98, 271 => 96, 261 => 88, 256 => 87, 252 => 86, 248 => 85, 243 => 82, 236 => 80, 230 => 77, 226 => 75, 216 => 67, 213 => 66, 210 => 65, 207 => 64, 204 => 63, 202 => 62, 196 => 61, 191 => 58, 188 => 57, 185 => 56, 182 => 55, 179 => 54, 177 => 53, 171 => 52, 166 => 49, 159 => 47, 152 => 43, 146 => 42, 140 => 38, 133 => 35, 130 => 34, 124 => 31, 120 => 30, 114 => 28, 111 => 27, 105 => 25, 103 => 24, 100 => 23, 98 => 22, 95 => 21, 88 => 16, 84 => 15, 75 => 12, 68 => 11, 64 => 10, 61 => 9, 55 => 7, 50 => 6, 47 => 5, 45 => 4, 41 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "server/replication/replica_configuration.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\replication\\replica_configuration.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/b8/b8a339fcf028465119a68f7bc5023668.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/b8/b8a339fcf028465119a68f7bc5023668.php deleted file mode 100644 index 4712988..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/b8/b8a339fcf028465119a68f7bc5023668.php +++ /dev/null @@ -1,299 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "\$( function() { - "; - // line 3 - echo " \$(\"#buttonGo\").on(\"click\", function() { - "; - // line 5 - echo " \$(\"#upload_form_form\").css(\"display\", \"none\"); - - "; - // line 7 - if ((($context["handler"] ?? null) != "PhpMyAdmin\\Plugins\\Import\\Upload\\UploadNoplugin")) { - // line 8 - echo " "; - // line 9 - echo " "; - $context["ajax_url"] = (("index.php?route=/import-status&id=" . ($context["upload_id"] ?? null)) . PhpMyAdmin\Url::getCommonRaw(["import_status" => 1], "&")); - // line 12 - echo " "; - $context["promot_str"] = PhpMyAdmin\Sanitize::jsFormat(_gettext("The file being uploaded is probably larger than the maximum allowed size or this is a known bug in webkit based (Safari, Google Chrome, Arora etc.) browsers."), false); - // line 13 - echo " "; - $context["statustext_str"] = PhpMyAdmin\Sanitize::escapeJsString(_gettext("%s of %s")); - // line 14 - echo " "; - $context["second_str"] = PhpMyAdmin\Sanitize::jsFormat(_gettext("%s/sec."), false); - // line 15 - echo " "; - $context["remaining_min"] = PhpMyAdmin\Sanitize::jsFormat(_gettext("About %MIN min. %SEC sec. remaining."), false); - // line 16 - echo " "; - $context["remaining_second"] = PhpMyAdmin\Sanitize::jsFormat(_gettext("About %SEC sec. remaining."), false); - // line 17 - echo " "; - $context["processed_str"] = PhpMyAdmin\Sanitize::jsFormat(_gettext("The file is being processed, please be patient."), false); - // line 18 - echo " "; - $context["import_url"] = PhpMyAdmin\Url::getCommonRaw(["import_status" => 1], "&"); - // line 19 - echo " - "; - // line 20 - ob_start(function () { return ''; }); - // line 21 - echo "
            -
            -
            -
            -
            -
            -
            -
            - env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath("ajax_clock_small.gif"), "html", null, true); - echo "\" width=\"16\" height=\"16\" alt=\"ajax clock\"> "; - echo PhpMyAdmin\Sanitize::jsFormat(_gettext("Uploading your import file…"), false); - // line 30 - echo "
            -
            -
            - "; - $context["upload_html"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); - // line 34 - echo " - "; - // line 36 - echo " var finished = false; - var percent = 0.0; - var total = 0; - var complete = 0; - var original_title = parent && parent.document ? parent.document.title : false; - var import_start; - - var perform_upload = function () { - new \$.getJSON( - \""; - // line 45 - echo ($context["ajax_url"] ?? null); - echo "\", - {}, - function(response) { - finished = response.finished; - percent = response.percent; - total = response.total; - complete = response.complete; - - if (total==0 && complete==0 && percent==0) { - \$(\"#upload_form_status_info\").html('env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath("ajax_clock_small.gif"), "html", null, true); - echo "\" width=\"16\" height=\"16\" alt=\"ajax clock\"> "; - echo ($context["promot_str"] ?? null); - echo "'); - \$(\"#upload_form_status\").css(\"display\", \"none\"); - } else { - var now = new Date(); - now = Date.UTC( - now.getFullYear(), - now.getMonth(), - now.getDate(), - now.getHours(), - now.getMinutes(), - now.getSeconds()) - + now.getMilliseconds() - 1000; - var statustext = Functions.sprintf( - \""; - // line 67 - echo ($context["statustext_str"] ?? null); - echo "\", - Functions.formatBytes( - complete, 1, Messages.strDecimalSeparator - ), - Functions.formatBytes( - total, 1, Messages.strDecimalSeparator - ) - ); - - if (\$(\"#importmain\").is(\":visible\")) { - "; - // line 78 - echo " \$(\"#importmain\").hide(); - \$(\"#import_form_status\") - .html('"; - // line 80 - echo twig_spaceless(($context["upload_html"] ?? null)); - echo "') - .show(); - import_start = now; - } - else if (percent > 9 || complete > 2000000) { - "; - // line 86 - echo " var used_time = now - import_start; - var seconds = parseInt(((total - complete) / complete) * used_time / 1000); - var speed = Functions.sprintf( - \""; - // line 89 - echo ($context["second_str"] ?? null); - echo "\", - Functions.formatBytes(complete / used_time * 1000, 1, Messages.strDecimalSeparator) - ); - - var minutes = parseInt(seconds / 60); - seconds %= 60; - var estimated_time; - if (minutes > 0) { - estimated_time = \""; - // line 97 - echo ($context["remaining_min"] ?? null); - echo "\" - .replace(\"%MIN\", minutes) - .replace(\"%SEC\", seconds); - } - else { - estimated_time = \""; - // line 102 - echo ($context["remaining_second"] ?? null); - echo "\" - .replace(\"%SEC\", seconds); - } - - statustext += \"
            \" + speed + \"

            \" + estimated_time; - } - - var percent_str = Math.round(percent) + \"%\"; - \$(\"#status\").animate({width: percent_str}, 150); - \$(\".percentage\").text(percent_str); - - "; - // line 114 - echo " if (original_title !== false) { - parent.document.title - = percent_str + \" - \" + original_title; - } - else { - document.title - = percent_str + \" - \" + original_title; - } - \$(\"#statustext\").html(statustext); - } - - if (finished == true) { - if (original_title !== false) { - parent.document.title = original_title; - } - else { - document.title = original_title; - } - \$(\"#importmain\").hide(); - "; - // line 134 - echo " \$(\"#import_form_status\") - .html('env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath("ajax_clock_small.gif"), "html", null, true); - echo "\" width=\"16\" height=\"16\" alt=\"ajax clock\"> "; - echo ($context["processed_str"] ?? null); - echo "') - .show(); - \$(\"#import_form_status\").load(\"index.php?route=/import-status&message=true&"; - // line 137 - echo ($context["import_url"] ?? null); - echo "\"); - Navigation.reload(); - - "; - // line 141 - echo " } - else { - setTimeout(perform_upload, 1000); - } - }); - }; - setTimeout(perform_upload, 1000); - "; - } else { - // line 149 - echo " "; - // line 150 - echo " "; - ob_start(function () { return ''; }); - // line 151 - echo "env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath("ajax_clock_small.gif"), "html", null, true); - echo "\" width=\"16\" height=\"16\" alt=\"ajax clock\">"; - // line 152 - echo PhpMyAdmin\Sanitize::jsFormat(_gettext("Please be patient, the file is being uploaded. Details about the upload are not available."), false); - // line 153 - echo PhpMyAdmin\Html\MySQLDocumentation::showDocumentation("faq", "faq2-9"); - $context["image_tag"] = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); - // line 155 - echo " \$('#upload_form_status_info').html('"; - echo ($context["image_tag"] ?? null); - echo "'); - \$(\"#upload_form_status\").css(\"display\", \"none\"); - "; - } - // line 158 - echo " }); -}); -"; - } - - public function getTemplateName() - { - return "import/javascript.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 275 => 158, 268 => 155, 265 => 153, 263 => 152, 259 => 151, 256 => 150, 254 => 149, 244 => 141, 238 => 137, 231 => 135, 228 => 134, 207 => 114, 193 => 102, 185 => 97, 174 => 89, 169 => 86, 161 => 80, 157 => 78, 144 => 67, 126 => 54, 114 => 45, 103 => 36, 100 => 34, 94 => 30, 90 => 29, 80 => 21, 78 => 20, 75 => 19, 72 => 18, 69 => 17, 66 => 16, 63 => 15, 60 => 14, 57 => 13, 54 => 12, 51 => 9, 49 => 8, 47 => 7, 43 => 5, 40 => 3, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "import/javascript.twig", "C:\\xampp\\phpMyAdmin\\templates\\import\\javascript.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/ce/cec3d5ebad23eec1dee19af09f0c53ac.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/ce/cec3d5ebad23eec1dee19af09f0c53ac.php deleted file mode 100644 index c03e162..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/ce/cec3d5ebad23eec1dee19af09f0c53ac.php +++ /dev/null @@ -1,309 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - echo "
            - "; -echo _gettext("Login Information"); - // line 2 - echo " -
            - - - - - env, ($context["username_length"] ?? null), "html", null, true); - echo "\" title=\""; -echo _gettext("User name"); - echo "\""; - // line 12 - if ( !twig_test_empty(($context["username"] ?? null))) { - echo " value=\""; - echo twig_escape_filter($this->env, (( !(null === ($context["new_username"] ?? null))) ? (($context["new_username"] ?? null)) : (($context["username"] ?? null))), "html", null, true); - echo "\""; - } - // line 13 - echo ((((null === ($context["pred_username"] ?? null)) || (($context["pred_username"] ?? null) == "userdefined"))) ? (" required") : ("")); - echo "> - -
            - "; - // line 16 - echo call_user_func_array($this->env->getFilter('notice')->getCallable(), [_gettext("An account already exists with the same username but possibly a different hostname.")]); - echo " -
            -
            - -
            - - - - - env, ($context["hostname_length"] ?? null), "html", null, true); - echo "\" value=\""; - echo twig_escape_filter($this->env, ((array_key_exists("hostname", $context)) ? (_twig_default_filter(($context["hostname"] ?? null), "%")) : ("%")), "html", null, true); - echo "\" title=\""; -echo _gettext("Host name"); - // line 37 - echo "\""; - echo (((($context["pred_hostname"] ?? null) == "userdefined")) ? (" required") : ("")); - echo "> - - "; - // line 39 - echo PhpMyAdmin\Html\Generator::showHint(_gettext("When Host table is used, this field is ignored and values stored in Host table are used instead.")); - echo " -
            - -
            - - - - - - "; -echo _pgettext("Password strength", "Strength:"); - // line 54 - echo " - - -
            - -
            - -   - -
            - -
            - -   - - - -
            - "; - // line 82 - ob_start(function () { return ''; }); - // line 83 - echo " "; -echo _gettext("This method requires using an 'SSL connection' or an 'unencrypted connection that encrypts the password using RSA'; while connecting to the server."); - // line 86 - echo " "; - echo PhpMyAdmin\Html\MySQLDocumentation::show("sha256-authentication-plugin"); - echo " - "; - $___internal_parse_0_ = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); - // line 82 - echo call_user_func_array($this->env->getFilter('notice')->getCallable(), [$___internal_parse_0_]); - // line 88 - echo "
            -
            - "; - // line 91 - echo "
            -"; - } - - public function getTemplateName() - { - return "server/privileges/login_information_fields.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 286 => 91, 282 => 88, 280 => 82, 274 => 86, 271 => 83, 269 => 82, 265 => 81, 261 => 79, 248 => 77, 244 => 76, 238 => 72, 235 => 71, 232 => 70, 229 => 69, 226 => 68, 224 => 67, 215 => 62, 210 => 60, 201 => 54, 195 => 53, 186 => 50, 179 => 49, 173 => 47, 171 => 46, 168 => 45, 163 => 43, 155 => 39, 149 => 37, 143 => 36, 135 => 33, 128 => 32, 120 => 30, 118 => 29, 112 => 28, 106 => 27, 102 => 26, 100 => 25, 95 => 23, 85 => 16, 79 => 13, 73 => 12, 68 => 11, 60 => 8, 54 => 7, 51 => 6, 46 => 4, 41 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "server/privileges/login_information_fields.twig", "C:\\xampp\\phpMyAdmin\\templates\\server\\privileges\\login_information_fields.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/d6/d68297e98d7671d85978d6198ae77b26.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/d6/d68297e98d7671d85978d6198ae77b26.php deleted file mode 100644 index 0bf396c..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/d6/d68297e98d7671d85978d6198ae77b26.php +++ /dev/null @@ -1,419 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - if (($context["is_superuser"] ?? null)) { - // line 2 - echo "
            - "; - // line 3 - echo PhpMyAdmin\Url::getHiddenInputs(($context["db"] ?? null)); - echo " - -
            -
            - - "; - // line 8 - echo PhpMyAdmin\Html\Generator::getIcon("b_usrcheck"); - echo " - "; - // line 9 - echo twig_sprintf(_gettext("Users having access to \"%s\""), (((((" ($context["db"] ?? null)], "&")) . "\">") . twig_escape_filter($this->env, ($context["db"] ?? null), "html")) . "")); - echo " - - -
            - - - - - - - - - - - - - - - "; - // line 27 - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable(($context["privileges"] ?? null)); - $context['_iterated'] = false; - $context['loop'] = [ - 'parent' => $context['_parent'], - 'index0' => 0, - 'index' => 1, - 'first' => true, - ]; - if (is_array($context['_seq']) || (is_object($context['_seq']) && $context['_seq'] instanceof \Countable)) { - $length = count($context['_seq']); - $context['loop']['revindex0'] = $length - 1; - $context['loop']['revindex'] = $length; - $context['loop']['length'] = $length; - $context['loop']['last'] = 1 === $length; - } - foreach ($context['_seq'] as $context["_key"] => $context["privilege"]) { - // line 28 - echo " "; - $context["privileges_amount"] = twig_length_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "privileges", [], "any", false, false, false, 28)); - // line 29 - echo " - 1)) { - echo " class=\"align-middle\" rowspan=\""; - echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); - echo "\""; - } - echo "> - env, twig_get_attribute($this->env, $this->source, $context["loop"], "index0", [], "any", false, false, false, 31), "html", null, true); - echo "\" value=\""; - // line 32 - echo twig_escape_filter($this->env, ((twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 32) . "&#27;") . twig_get_attribute($this->env, $this->source, $context["privilege"], "host", [], "any", false, false, false, 32)), "html", null, true); - echo "\"> - - 1)) { - echo " class=\"align-middle\" rowspan=\""; - echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); - echo "\""; - } - echo "> - "; - // line 35 - if (twig_test_empty(twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 35))) { - // line 36 - echo " "; -echo _gettext("Any"); - echo " - "; - } else { - // line 38 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "user", [], "any", false, false, false, 38), "html", null, true); - echo " - "; - } - // line 40 - echo " - 1)) { - echo " class=\"align-middle\" rowspan=\""; - echo twig_escape_filter($this->env, ($context["privileges_amount"] ?? null), "html", null, true); - echo "\""; - } - echo "> - "; - // line 42 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["privilege"], "host", [], "any", false, false, false, 42), "html", null, true); - echo " - - "; - // line 44 - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env, $this->source, $context["privilege"], "privileges", [], "any", false, false, false, 44)); - foreach ($context['_seq'] as $context["_key"] => $context["priv"]) { - // line 45 - echo " - - - - - - "; - // line 95 - if ((($context["privileges_amount"] ?? null) > 1)) { - // line 96 - echo " - "; - } - // line 98 - echo " "; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['priv'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - // line 99 - echo " "; - $context['_iterated'] = true; - ++$context['loop']['index0']; - ++$context['loop']['index']; - $context['loop']['first'] = false; - if (isset($context['loop']['length'])) { - --$context['loop']['revindex0']; - --$context['loop']['revindex']; - $context['loop']['last'] = 0 === $context['loop']['revindex0']; - } - } - if (!$context['_iterated']) { - // line 100 - echo " - - - "; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['privilege'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - // line 106 - echo " -
            "; -echo _gettext("User name"); - // line 17 - echo ""; -echo _gettext("Host name"); - // line 18 - echo ""; -echo _gettext("Type"); - // line 19 - echo ""; -echo _gettext("Privileges"); - // line 20 - echo ""; -echo _gettext("Grant"); - // line 21 - echo ""; -echo _gettext("Action"); - // line 22 - echo "
            - "; - // line 46 - if ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 46) == "g")) { - // line 47 - echo " "; -echo _gettext("global"); - // line 48 - echo " "; - } elseif ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 48) == "d")) { - // line 49 - echo " "; - if ((twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 49) == twig_replace_filter(($context["db"] ?? null), ["_" => "\\_", "%" => "\\%"]))) { - // line 50 - echo " "; -echo _gettext("database-specific"); - // line 51 - echo " "; - } else { - // line 52 - echo " "; -echo _gettext("wildcard"); - echo ": "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 52), "html", null, true); - echo " - "; - } - // line 54 - echo " "; - } elseif ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 54) == "r")) { - // line 55 - echo " "; -echo _gettext("routine"); - // line 56 - echo " "; - } - // line 57 - echo " - - "; - // line 60 - if ((twig_get_attribute($this->env, $this->source, $context["priv"], "type", [], "any", false, false, false, 60) == "r")) { - // line 61 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 61), "html", null, true); - echo " - ("; - // line 62 - echo twig_escape_filter($this->env, twig_upper_filter($this->env, twig_join_filter(twig_get_attribute($this->env, $this->source, $context["priv"], "privileges", [], "any", false, false, false, 62), ", ")), "html", null, true); - echo ") - "; - } else { - // line 64 - echo " "; - echo twig_join_filter(twig_get_attribute($this->env, $this->source, $context["priv"], "privileges", [], "any", false, false, false, 64), ", "); - echo " - "; - } - // line 66 - echo " - - "; - // line 69 - echo twig_escape_filter($this->env, ((twig_get_attribute($this->env, $this->source, $context["priv"], "has_grant", [], "any", false, false, false, 69)) ? (_gettext("Yes")) : (_gettext("No"))), "html", null, true); - echo " - - "; - // line 72 - if (($context["is_grantuser"] ?? null)) { - // line 73 - echo " twig_get_attribute($this->env, $this->source, // line 74 -$context["privilege"], "user", [], "any", false, false, false, 74), "hostname" => twig_get_attribute($this->env, $this->source, // line 75 -$context["privilege"], "host", [], "any", false, false, false, 75), "dbname" => (((twig_get_attribute($this->env, $this->source, // line 76 -$context["priv"], "database", [], "any", false, false, false, 76) != "*")) ? (twig_get_attribute($this->env, $this->source, $context["priv"], "database", [], "any", false, false, false, 76)) : ("")), "tablename" => "", "routinename" => (((twig_get_attribute($this->env, $this->source, // line 78 -$context["priv"], "routine", [], "any", true, true, false, 78) && !(null === twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 78)))) ? (twig_get_attribute($this->env, $this->source, $context["priv"], "routine", [], "any", false, false, false, 78)) : (""))]); - // line 79 - echo "\"> - "; - // line 80 - echo PhpMyAdmin\Html\Generator::getIcon("b_usredit", _gettext("Edit privileges")); - echo " - - "; - } - // line 83 - echo " - twig_get_attribute($this->env, $this->source, // line 86 -$context["privilege"], "user", [], "any", false, false, false, 86), "hostname" => twig_get_attribute($this->env, $this->source, // line 87 -$context["privilege"], "host", [], "any", false, false, false, 87), "export" => true, "initial" => ""]); - // line 90 - echo "\"> - "; - // line 91 - echo PhpMyAdmin\Html\Generator::getIcon("b_tblexport", _gettext("Export")); - echo " - -
            - "; -echo _gettext("No user found."); - // line 103 - echo "
            -
            - -
            - env, $this->extensions['PhpMyAdmin\Twig\AssetExtension']->getImagePath((("arrow_" . ($context["text_dir"] ?? null)) . ".png")), "html", null, true); - echo "\" alt=\""; -echo _gettext("With selected:"); - // line 112 - echo "\" width=\"38\" height=\"22\"> - - - "; -echo _gettext("With selected:"); - // line 115 - echo " - -
            -
            -
            -
            -"; - } else { - // line 124 - echo " "; - echo call_user_func_array($this->env->getFilter('error')->getCallable(), [_gettext("Not enough privilege to view users.")]); - echo " -"; - } - // line 126 - echo " -"; - // line 127 - if (($context["is_createuser"] ?? null)) { - // line 128 - echo " -"; - } - } - - public function getTemplateName() - { - return "database/privileges/index.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 390 => 136, 385 => 135, 383 => 134, 382 => 132, 379 => 131, 373 => 128, 371 => 127, 368 => 126, 362 => 124, 352 => 117, 349 => 116, 345 => 115, 341 => 114, 337 => 113, 333 => 112, 329 => 111, 322 => 106, 314 => 103, 309 => 100, 296 => 99, 290 => 98, 286 => 96, 284 => 95, 277 => 91, 274 => 90, 272 => 87, 271 => 86, 270 => 85, 266 => 83, 260 => 80, 257 => 79, 255 => 78, 254 => 76, 253 => 75, 252 => 74, 250 => 73, 248 => 72, 242 => 69, 237 => 66, 231 => 64, 226 => 62, 221 => 61, 219 => 60, 214 => 57, 211 => 56, 208 => 55, 205 => 54, 197 => 52, 194 => 51, 191 => 50, 188 => 49, 185 => 48, 182 => 47, 180 => 46, 177 => 45, 173 => 44, 168 => 42, 160 => 41, 157 => 40, 151 => 38, 145 => 36, 143 => 35, 135 => 34, 130 => 32, 127 => 31, 119 => 30, 116 => 29, 113 => 28, 95 => 27, 88 => 22, 84 => 21, 80 => 20, 76 => 19, 72 => 18, 68 => 17, 56 => 9, 52 => 8, 44 => 3, 39 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "database/privileges/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\database\\privileges\\index.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/tmp/twig/e1/e16bfe2d50d183748778b292c372d154.php b/Sources/php_script/script/phpMyAdmin/tmp/twig/e1/e16bfe2d50d183748778b292c372d154.php deleted file mode 100644 index c9dae9a..0000000 --- a/Sources/php_script/script/phpMyAdmin/tmp/twig/e1/e16bfe2d50d183748778b292c372d154.php +++ /dev/null @@ -1,703 +0,0 @@ -source = $this->getSourceContext(); - - $this->parent = false; - - $this->blocks = [ - ]; - } - - protected function doDisplay(array $context, array $blocks = []) - { - $macros = $this->macros; - // line 1 - if (($context["is_git_revision"] ?? null)) { - // line 2 - echo "
            -"; - } - // line 4 - echo " -"; - // line 5 - echo ($context["message"] ?? null); - echo " - -"; - // line 7 - echo ($context["partial_logout"] ?? null); - echo " - -
            - "; - // line 10 - echo ($context["sync_favorite_tables"] ?? null); - echo " -
            -
            -
            - "; - // line 14 - if (($context["has_server"] ?? null)) { - // line 15 - echo " "; - if (($context["is_demo"] ?? null)) { - // line 16 - echo "
            -
            - "; -echo _gettext("phpMyAdmin Demo Server"); - // line 19 - echo "
            -
            - "; - // line 21 - ob_start(function () { return ''; }); - // line 22 - echo " "; -echo _gettext("You are using the demo server. You can do anything here, but please do not change root, debian-sys-maint and pma users. More information is available at %s."); - // line 25 - echo " "; - $___internal_parse_0_ = ('' === $tmp = ob_get_clean()) ? '' : new Markup($tmp, $this->env->getCharset()); - // line 21 - echo twig_sprintf($___internal_parse_0_, "demo.phpmyadmin.net"); - // line 26 - echo "
            -
            - "; - } - // line 29 - echo " -
            -
            - "; -echo _gettext("General settings"); - // line 33 - echo "
            -
              - "; - // line 35 - if (($context["has_server_selection"] ?? null)) { - // line 36 - echo "
            • - "; - // line 37 - echo PhpMyAdmin\Html\Generator::getImage("s_host"); - echo " - "; - // line 38 - echo ($context["server_selection"] ?? null); - echo " -
            • - "; - } - // line 41 - echo " - "; - // line 42 - if ((($context["server"] ?? null) > 0)) { - // line 43 - echo " "; - if (($context["has_change_password_link"] ?? null)) { - // line 44 - echo "
            • - - "; - // line 46 - echo PhpMyAdmin\Html\Generator::getIcon("s_passwd", _gettext("Change password"), true); - echo " - -
            • - "; - } - // line 50 - echo " -
            • -
              - "; - // line 53 - echo PhpMyAdmin\Url::getHiddenInputs(null, null, 4, "collation_connection"); - echo " -
              - -
              - "; - // line 61 - if ( !twig_test_empty(($context["charsets"] ?? null))) { - // line 62 - echo "
              - -
              - "; - } - // line 78 - echo "
              -
            • - -
            • - - "; - // line 83 - echo PhpMyAdmin\Html\Generator::getIcon("b_tblops", _gettext("More settings"), true); - echo " - -
            • - "; - } - // line 87 - echo "
            -
            - "; - } - // line 90 - echo " -
            -
            - "; -echo _gettext("Appearance settings"); - // line 94 - echo "
            -
              - "; - // line 96 - if ( !twig_test_empty(($context["available_languages"] ?? null))) { - // line 97 - echo "
            • -
              - "; - // line 99 - echo PhpMyAdmin\Url::getHiddenInputs(["db" => ($context["db"] ?? null), "table" => ($context["table"] ?? null)]); - echo " -
              - -
              -
              - -
              -
              -
            • - "; - } - // line 124 - echo " - "; - // line 125 - if (($context["has_theme_manager"] ?? null)) { - // line 126 - echo "
            • -
              - "; - // line 128 - echo PhpMyAdmin\Url::getHiddenInputs(); - echo " -
              - -
              -
              -
              - - -
              -
              -
              -
            • - "; - } - // line 149 - echo "
            -
            -
            - -
            - "; - // line 154 - if ( !twig_test_empty(($context["database_server"] ?? null))) { - // line 155 - echo "
            -
            - "; -echo _gettext("Database server"); - // line 158 - echo "
            -
              -
            • - "; -echo _gettext("Server:"); - // line 162 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "host", [], "any", false, false, false, 162), "html", null, true); - echo " -
            • -
            • - "; -echo _gettext("Server type:"); - // line 166 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "type", [], "any", false, false, false, 166), "html", null, true); - echo " -
            • -
            • - "; -echo _gettext("Server connection:"); - // line 170 - echo " "; - echo twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "connection", [], "any", false, false, false, 170); - echo " -
            • -
            • - "; -echo _gettext("Server version:"); - // line 174 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "version", [], "any", false, false, false, 174), "html", null, true); - echo " -
            • -
            • - "; -echo _gettext("Protocol version:"); - // line 178 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "protocol", [], "any", false, false, false, 178), "html", null, true); - echo " -
            • -
            • - "; -echo _gettext("User:"); - // line 182 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "user", [], "any", false, false, false, 182), "html", null, true); - echo " -
            • -
            • - "; -echo _gettext("Server charset:"); - // line 186 - echo " - "; - // line 187 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["database_server"] ?? null), "charset", [], "any", false, false, false, 187), "html", null, true); - echo " - -
            • -
            -
            - "; - } - // line 193 - echo " - "; - // line 194 - if (( !twig_test_empty(($context["web_server"] ?? null)) || ($context["show_php_info"] ?? null))) { - // line 195 - echo "
            -
            - "; -echo _gettext("Web server"); - // line 198 - echo "
            -
              - "; - // line 200 - if ( !twig_test_empty(($context["web_server"] ?? null))) { - // line 201 - echo " "; - if ( !(null === twig_get_attribute($this->env, $this->source, ($context["web_server"] ?? null), "software", [], "any", false, false, false, 201))) { - // line 202 - echo "
            • - "; - // line 203 - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["web_server"] ?? null), "software", [], "any", false, false, false, 203), "html", null, true); - echo " -
            • - "; - } - // line 206 - echo "
            • - "; -echo _gettext("Database client version:"); - // line 208 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["web_server"] ?? null), "database", [], "any", false, false, false, 208), "html", null, true); - echo " -
            • -
            • - "; -echo _gettext("PHP extension:"); - // line 212 - echo " "; - $context['_parent'] = $context; - $context['_seq'] = twig_ensure_traversable(twig_get_attribute($this->env, $this->source, ($context["web_server"] ?? null), "php_extensions", [], "any", false, false, false, 212)); - foreach ($context['_seq'] as $context["_key"] => $context["extension"]) { - // line 213 - echo " "; - echo twig_escape_filter($this->env, $context["extension"], "html", null, true); - echo " - "; - // line 214 - echo PhpMyAdmin\Html\Generator::showPHPDocumentation((("book." . $context["extension"]) . ".php")); - echo " - "; - } - $_parent = $context['_parent']; - unset($context['_seq'], $context['_iterated'], $context['_key'], $context['extension'], $context['_parent'], $context['loop']); - $context = array_intersect_key($context, $_parent) + $_parent; - // line 216 - echo "
            • -
            • - "; -echo _gettext("PHP version:"); - // line 219 - echo " "; - echo twig_escape_filter($this->env, twig_get_attribute($this->env, $this->source, ($context["web_server"] ?? null), "php_version", [], "any", false, false, false, 219), "html", null, true); - echo " -
            • - "; - } - // line 222 - echo " "; - if (($context["show_php_info"] ?? null)) { - // line 223 - echo "
            • - - "; -echo _gettext("Show PHP information"); - // line 226 - echo " -
            • - "; - } - // line 229 - echo "
            -
            - "; - } - // line 232 - echo " - -
            -
            -
            -
            - -"; - // line 279 - if (($context["has_theme_manager"] ?? null)) { - // line 280 - echo " -"; - } - // line 302 - echo " -"; - // line 303 - echo ($context["config_storage_message"] ?? null); - echo " -"; - } - - public function getTemplateName() - { - return "home/index.twig"; - } - - public function isTraitable() - { - return false; - } - - public function getDebugInfo() - { - return array ( 679 => 303, 676 => 302, 668 => 296, 661 => 294, 658 => 293, 651 => 289, 644 => 285, 640 => 284, 633 => 280, 631 => 279, 620 => 270, 615 => 268, 610 => 265, 605 => 263, 600 => 260, 595 => 258, 590 => 255, 585 => 253, 580 => 250, 575 => 248, 570 => 245, 565 => 243, 558 => 240, 553 => 238, 545 => 232, 540 => 229, 535 => 226, 530 => 224, 527 => 223, 524 => 222, 517 => 219, 512 => 216, 504 => 214, 499 => 213, 494 => 212, 486 => 208, 482 => 206, 476 => 203, 473 => 202, 470 => 201, 468 => 200, 464 => 198, 459 => 195, 457 => 194, 454 => 193, 445 => 187, 442 => 186, 434 => 182, 426 => 178, 418 => 174, 410 => 170, 402 => 166, 394 => 162, 388 => 158, 383 => 155, 381 => 154, 374 => 149, 366 => 143, 361 => 140, 348 => 138, 344 => 137, 335 => 131, 329 => 128, 325 => 127, 322 => 126, 320 => 125, 317 => 124, 310 => 119, 303 => 117, 301 => 116, 295 => 115, 291 => 114, 282 => 109, 278 => 107, 276 => 105, 273 => 104, 268 => 102, 262 => 99, 258 => 98, 255 => 97, 253 => 96, 249 => 94, 243 => 90, 238 => 87, 231 => 83, 227 => 82, 221 => 78, 216 => 75, 209 => 73, 202 => 71, 200 => 70, 192 => 69, 188 => 68, 181 => 67, 177 => 66, 173 => 64, 168 => 62, 166 => 61, 159 => 58, 154 => 56, 148 => 53, 144 => 52, 140 => 50, 133 => 46, 129 => 45, 126 => 44, 123 => 43, 121 => 42, 118 => 41, 112 => 38, 108 => 37, 105 => 36, 103 => 35, 99 => 33, 93 => 29, 88 => 26, 86 => 21, 83 => 25, 80 => 22, 78 => 21, 74 => 19, 69 => 16, 66 => 15, 64 => 14, 57 => 10, 51 => 7, 46 => 5, 43 => 4, 39 => 2, 37 => 1,); - } - - public function getSourceContext() - { - return new Source("", "home/index.twig", "C:\\xampp\\phpMyAdmin\\templates\\home\\index.twig"); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/LICENSE b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/LICENSE deleted file mode 100644 index d45a356..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2017, Ben Scholzen 'DASPRiD' -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/README.md b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/README.md deleted file mode 100644 index 9c099fe..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# QR Code generator - -[![PHP CI](https://github.com/Bacon/BaconQrCode/actions/workflows/ci.yml/badge.svg)](https://github.com/Bacon/BaconQrCode/actions/workflows/ci.yml) -[![codecov](https://codecov.io/gh/Bacon/BaconQrCode/branch/master/graph/badge.svg?token=rD0HcAiEEx)](https://codecov.io/gh/Bacon/BaconQrCode) -[![Latest Stable Version](https://poser.pugx.org/bacon/bacon-qr-code/v/stable)](https://packagist.org/packages/bacon/bacon-qr-code) -[![Total Downloads](https://poser.pugx.org/bacon/bacon-qr-code/downloads)](https://packagist.org/packages/bacon/bacon-qr-code) -[![License](https://poser.pugx.org/bacon/bacon-qr-code/license)](https://packagist.org/packages/bacon/bacon-qr-code) - - -## Introduction -BaconQrCode is a port of QR code portion of the ZXing library. It currently -only features the encoder part, but could later receive the decoder part as -well. - -As the Reed Solomon codec implementation of the ZXing library performs quite -slow in PHP, it was exchanged with the implementation by Phil Karn. - - -## Example usage -```php -use BaconQrCode\Renderer\ImageRenderer; -use BaconQrCode\Renderer\Image\ImagickImageBackEnd; -use BaconQrCode\Renderer\RendererStyle\RendererStyle; -use BaconQrCode\Writer; - -$renderer = new ImageRenderer( - new RendererStyle(400), - new ImagickImageBackEnd() -); -$writer = new Writer($renderer); -$writer->writeFile('Hello World!', 'qrcode.png'); -``` - -## Available image renderer back ends -BaconQrCode comes with multiple back ends for rendering images. Currently included are the following: - -- `ImagickImageBackEnd`: renders raster images using the Imagick library -- `SvgImageBackEnd`: renders SVG files using XMLWriter -- `EpsImageBackEnd`: renders EPS files diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php deleted file mode 100644 index a9a1d07..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Common/EcBlock.php +++ /dev/null @@ -1,49 +0,0 @@ -count = $count; - $this->dataCodewords = $dataCodewords; - } - - /** - * Returns how many times the block is used. - */ - public function getCount() : int - { - return $this->count; - } - - /** - * Returns the number of data codewords. - */ - public function getDataCodewords() : int - { - return $this->dataCodewords; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php deleted file mode 100644 index b58cc0a..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php +++ /dev/null @@ -1,150 +0,0 @@ -> - */ - private $bytes; - - /** - * Width of the matrix. - * - * @var int - */ - private $width; - - /** - * Height of the matrix. - * - * @var int - */ - private $height; - - public function __construct(int $width, int $height) - { - $this->height = $height; - $this->width = $width; - $this->bytes = new SplFixedArray($height); - - for ($y = 0; $y < $height; ++$y) { - $this->bytes[$y] = SplFixedArray::fromArray(array_fill(0, $width, 0)); - } - } - - /** - * Gets the width of the matrix. - */ - public function getWidth() : int - { - return $this->width; - } - - /** - * Gets the height of the matrix. - */ - public function getHeight() : int - { - return $this->height; - } - - /** - * Gets the internal representation of the matrix. - * - * @return SplFixedArray> - */ - public function getArray() : SplFixedArray - { - return $this->bytes; - } - - /** - * @return Traversable - */ - public function getBytes() : Traversable - { - foreach ($this->bytes as $row) { - foreach ($row as $byte) { - yield $byte; - } - } - } - - /** - * Gets the byte for a specific position. - */ - public function get(int $x, int $y) : int - { - return $this->bytes[$y][$x]; - } - - /** - * Sets the byte for a specific position. - */ - public function set(int $x, int $y, int $value) : void - { - $this->bytes[$y][$x] = $value; - } - - /** - * Clears the matrix with a specific value. - */ - public function clear(int $value) : void - { - for ($y = 0; $y < $this->height; ++$y) { - for ($x = 0; $x < $this->width; ++$x) { - $this->bytes[$y][$x] = $value; - } - } - } - - public function __clone() - { - $this->bytes = clone $this->bytes; - - foreach ($this->bytes as $index => $row) { - $this->bytes[$index] = clone $row; - } - } - - /** - * Returns a string representation of the matrix. - */ - public function __toString() : string - { - $result = ''; - - for ($y = 0; $y < $this->height; $y++) { - for ($x = 0; $x < $this->width; $x++) { - switch ($this->bytes[$y][$x]) { - case 0: - $result .= ' 0'; - break; - - case 1: - $result .= ' 1'; - break; - - default: - $result .= ' '; - break; - } - } - - $result .= "\n"; - } - - return $result; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php deleted file mode 100644 index cf4fde0..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/Encoder.php +++ /dev/null @@ -1,668 +0,0 @@ -getSize() - + $mode->getCharacterCountBits(Version::getVersionForNumber(1)) - + $dataBits->getSize(); - $provisionalVersion = self::chooseVersion($provisionalBitsNeeded, $ecLevel); - - // Use that guess to calculate the right version. I am still not sure - // this works in 100% of cases. - $bitsNeeded = $headerBits->getSize() - + $mode->getCharacterCountBits($provisionalVersion) - + $dataBits->getSize(); - $version = self::chooseVersion($bitsNeeded, $ecLevel); - - if (null !== $forcedVersion) { - // Forced version check - if ($version->getVersionNumber() <= $forcedVersion->getVersionNumber()) { - // Calculated minimum version is same or equal as forced version - $version = $forcedVersion; - } else { - throw new WriterException( - 'Invalid version! Calculated version: ' - . $version->getVersionNumber() - . ', requested version: ' - . $forcedVersion->getVersionNumber() - ); - } - } - - $headerAndDataBits = new BitArray(); - $headerAndDataBits->appendBitArray($headerBits); - - // Find "length" of main segment and write it. - $numLetters = (Mode::BYTE() === $mode ? $dataBits->getSizeInBytes() : strlen($content)); - self::appendLengthInfo($numLetters, $version, $mode, $headerAndDataBits); - - // Put data together into the overall payload. - $headerAndDataBits->appendBitArray($dataBits); - $ecBlocks = $version->getEcBlocksForLevel($ecLevel); - $numDataBytes = $version->getTotalCodewords() - $ecBlocks->getTotalEcCodewords(); - - // Terminate the bits properly. - self::terminateBits($numDataBytes, $headerAndDataBits); - - // Interleave data bits with error correction code. - $finalBits = self::interleaveWithEcBytes( - $headerAndDataBits, - $version->getTotalCodewords(), - $numDataBytes, - $ecBlocks->getNumBlocks() - ); - - // Choose the mask pattern. - $dimension = $version->getDimensionForVersion(); - $matrix = new ByteMatrix($dimension, $dimension); - $maskPattern = self::chooseMaskPattern($finalBits, $ecLevel, $version, $matrix); - - // Build the matrix. - MatrixUtil::buildMatrix($finalBits, $ecLevel, $version, $maskPattern, $matrix); - - return new QrCode($mode, $ecLevel, $version, $maskPattern, $matrix); - } - - /** - * Gets the alphanumeric code for a byte. - */ - private static function getAlphanumericCode(int $code) : int - { - if (isset(self::ALPHANUMERIC_TABLE[$code])) { - return self::ALPHANUMERIC_TABLE[$code]; - } - - return -1; - } - - /** - * Chooses the best mode for a given content. - */ - private static function chooseMode(string $content, string $encoding = null) : Mode - { - if (null !== $encoding && 0 === strcasecmp($encoding, 'SHIFT-JIS')) { - return self::isOnlyDoubleByteKanji($content) ? Mode::KANJI() : Mode::BYTE(); - } - - $hasNumeric = false; - $hasAlphanumeric = false; - $contentLength = strlen($content); - - for ($i = 0; $i < $contentLength; ++$i) { - $char = $content[$i]; - - if (ctype_digit($char)) { - $hasNumeric = true; - } elseif (-1 !== self::getAlphanumericCode(ord($char))) { - $hasAlphanumeric = true; - } else { - return Mode::BYTE(); - } - } - - if ($hasAlphanumeric) { - return Mode::ALPHANUMERIC(); - } elseif ($hasNumeric) { - return Mode::NUMERIC(); - } - - return Mode::BYTE(); - } - - /** - * Calculates the mask penalty for a matrix. - */ - private static function calculateMaskPenalty(ByteMatrix $matrix) : int - { - return ( - MaskUtil::applyMaskPenaltyRule1($matrix) - + MaskUtil::applyMaskPenaltyRule2($matrix) - + MaskUtil::applyMaskPenaltyRule3($matrix) - + MaskUtil::applyMaskPenaltyRule4($matrix) - ); - } - - /** - * Checks if content only consists of double-byte kanji characters. - */ - private static function isOnlyDoubleByteKanji(string $content) : bool - { - $bytes = @iconv('utf-8', 'SHIFT-JIS', $content); - - if (false === $bytes) { - return false; - } - - $length = strlen($bytes); - - if (0 !== $length % 2) { - return false; - } - - for ($i = 0; $i < $length; $i += 2) { - $byte = $bytes[$i] & 0xff; - - if (($byte < 0x81 || $byte > 0x9f) && $byte < 0xe0 || $byte > 0xeb) { - return false; - } - } - - return true; - } - - /** - * Chooses the best mask pattern for a matrix. - */ - private static function chooseMaskPattern( - BitArray $bits, - ErrorCorrectionLevel $ecLevel, - Version $version, - ByteMatrix $matrix - ) : int { - $minPenalty = PHP_INT_MAX; - $bestMaskPattern = -1; - - for ($maskPattern = 0; $maskPattern < QrCode::NUM_MASK_PATTERNS; ++$maskPattern) { - MatrixUtil::buildMatrix($bits, $ecLevel, $version, $maskPattern, $matrix); - $penalty = self::calculateMaskPenalty($matrix); - - if ($penalty < $minPenalty) { - $minPenalty = $penalty; - $bestMaskPattern = $maskPattern; - } - } - - return $bestMaskPattern; - } - - /** - * Chooses the best version for the input. - * - * @throws WriterException if data is too big - */ - private static function chooseVersion(int $numInputBits, ErrorCorrectionLevel $ecLevel) : Version - { - for ($versionNum = 1; $versionNum <= 40; ++$versionNum) { - $version = Version::getVersionForNumber($versionNum); - $numBytes = $version->getTotalCodewords(); - - $ecBlocks = $version->getEcBlocksForLevel($ecLevel); - $numEcBytes = $ecBlocks->getTotalEcCodewords(); - - $numDataBytes = $numBytes - $numEcBytes; - $totalInputBytes = intdiv($numInputBits + 8, 8); - - if ($numDataBytes >= $totalInputBytes) { - return $version; - } - } - - throw new WriterException('Data too big'); - } - - /** - * Terminates the bits in a bit array. - * - * @throws WriterException if data bits cannot fit in the QR code - * @throws WriterException if bits size does not equal the capacity - */ - private static function terminateBits(int $numDataBytes, BitArray $bits) : void - { - $capacity = $numDataBytes << 3; - - if ($bits->getSize() > $capacity) { - throw new WriterException('Data bits cannot fit in the QR code'); - } - - for ($i = 0; $i < 4 && $bits->getSize() < $capacity; ++$i) { - $bits->appendBit(false); - } - - $numBitsInLastByte = $bits->getSize() & 0x7; - - if ($numBitsInLastByte > 0) { - for ($i = $numBitsInLastByte; $i < 8; ++$i) { - $bits->appendBit(false); - } - } - - $numPaddingBytes = $numDataBytes - $bits->getSizeInBytes(); - - for ($i = 0; $i < $numPaddingBytes; ++$i) { - $bits->appendBits(0 === ($i & 0x1) ? 0xec : 0x11, 8); - } - - if ($bits->getSize() !== $capacity) { - throw new WriterException('Bits size does not equal capacity'); - } - } - - /** - * Gets number of data- and EC bytes for a block ID. - * - * @return int[] - * @throws WriterException if block ID is too large - * @throws WriterException if EC bytes mismatch - * @throws WriterException if RS blocks mismatch - * @throws WriterException if total bytes mismatch - */ - private static function getNumDataBytesAndNumEcBytesForBlockId( - int $numTotalBytes, - int $numDataBytes, - int $numRsBlocks, - int $blockId - ) : array { - if ($blockId >= $numRsBlocks) { - throw new WriterException('Block ID too large'); - } - - $numRsBlocksInGroup2 = $numTotalBytes % $numRsBlocks; - $numRsBlocksInGroup1 = $numRsBlocks - $numRsBlocksInGroup2; - $numTotalBytesInGroup1 = intdiv($numTotalBytes, $numRsBlocks); - $numTotalBytesInGroup2 = $numTotalBytesInGroup1 + 1; - $numDataBytesInGroup1 = intdiv($numDataBytes, $numRsBlocks); - $numDataBytesInGroup2 = $numDataBytesInGroup1 + 1; - $numEcBytesInGroup1 = $numTotalBytesInGroup1 - $numDataBytesInGroup1; - $numEcBytesInGroup2 = $numTotalBytesInGroup2 - $numDataBytesInGroup2; - - if ($numEcBytesInGroup1 !== $numEcBytesInGroup2) { - throw new WriterException('EC bytes mismatch'); - } - - if ($numRsBlocks !== $numRsBlocksInGroup1 + $numRsBlocksInGroup2) { - throw new WriterException('RS blocks mismatch'); - } - - if ($numTotalBytes !== - (($numDataBytesInGroup1 + $numEcBytesInGroup1) * $numRsBlocksInGroup1) - + (($numDataBytesInGroup2 + $numEcBytesInGroup2) * $numRsBlocksInGroup2) - ) { - throw new WriterException('Total bytes mismatch'); - } - - if ($blockId < $numRsBlocksInGroup1) { - return [$numDataBytesInGroup1, $numEcBytesInGroup1]; - } else { - return [$numDataBytesInGroup2, $numEcBytesInGroup2]; - } - } - - /** - * Interleaves data with EC bytes. - * - * @throws WriterException if number of bits and data bytes does not match - * @throws WriterException if data bytes does not match offset - * @throws WriterException if an interleaving error occurs - */ - private static function interleaveWithEcBytes( - BitArray $bits, - int $numTotalBytes, - int $numDataBytes, - int $numRsBlocks - ) : BitArray { - if ($bits->getSizeInBytes() !== $numDataBytes) { - throw new WriterException('Number of bits and data bytes does not match'); - } - - $dataBytesOffset = 0; - $maxNumDataBytes = 0; - $maxNumEcBytes = 0; - - $blocks = new SplFixedArray($numRsBlocks); - - for ($i = 0; $i < $numRsBlocks; ++$i) { - list($numDataBytesInBlock, $numEcBytesInBlock) = self::getNumDataBytesAndNumEcBytesForBlockId( - $numTotalBytes, - $numDataBytes, - $numRsBlocks, - $i - ); - - $size = $numDataBytesInBlock; - $dataBytes = $bits->toBytes(8 * $dataBytesOffset, $size); - $ecBytes = self::generateEcBytes($dataBytes, $numEcBytesInBlock); - $blocks[$i] = new BlockPair($dataBytes, $ecBytes); - - $maxNumDataBytes = max($maxNumDataBytes, $size); - $maxNumEcBytes = max($maxNumEcBytes, count($ecBytes)); - $dataBytesOffset += $numDataBytesInBlock; - } - - if ($numDataBytes !== $dataBytesOffset) { - throw new WriterException('Data bytes does not match offset'); - } - - $result = new BitArray(); - - for ($i = 0; $i < $maxNumDataBytes; ++$i) { - foreach ($blocks as $block) { - $dataBytes = $block->getDataBytes(); - - if ($i < count($dataBytes)) { - $result->appendBits($dataBytes[$i], 8); - } - } - } - - for ($i = 0; $i < $maxNumEcBytes; ++$i) { - foreach ($blocks as $block) { - $ecBytes = $block->getErrorCorrectionBytes(); - - if ($i < count($ecBytes)) { - $result->appendBits($ecBytes[$i], 8); - } - } - } - - if ($numTotalBytes !== $result->getSizeInBytes()) { - throw new WriterException( - 'Interleaving error: ' . $numTotalBytes . ' and ' . $result->getSizeInBytes() . ' differ' - ); - } - - return $result; - } - - /** - * Generates EC bytes for given data. - * - * @param SplFixedArray $dataBytes - * @return SplFixedArray - */ - private static function generateEcBytes(SplFixedArray $dataBytes, int $numEcBytesInBlock) : SplFixedArray - { - $numDataBytes = count($dataBytes); - $toEncode = new SplFixedArray($numDataBytes + $numEcBytesInBlock); - - for ($i = 0; $i < $numDataBytes; $i++) { - $toEncode[$i] = $dataBytes[$i] & 0xff; - } - - $ecBytes = new SplFixedArray($numEcBytesInBlock); - $codec = self::getCodec($numDataBytes, $numEcBytesInBlock); - $codec->encode($toEncode, $ecBytes); - - return $ecBytes; - } - - /** - * Gets an RS codec and caches it. - */ - private static function getCodec(int $numDataBytes, int $numEcBytesInBlock) : ReedSolomonCodec - { - $cacheId = $numDataBytes . '-' . $numEcBytesInBlock; - - if (isset(self::$codecs[$cacheId])) { - return self::$codecs[$cacheId]; - } - - return self::$codecs[$cacheId] = new ReedSolomonCodec( - 8, - 0x11d, - 0, - 1, - $numEcBytesInBlock, - 255 - $numDataBytes - $numEcBytesInBlock - ); - } - - /** - * Appends mode information to a bit array. - */ - private static function appendModeInfo(Mode $mode, BitArray $bits) : void - { - $bits->appendBits($mode->getBits(), 4); - } - - /** - * Appends length information to a bit array. - * - * @throws WriterException if num letters is bigger than expected - */ - private static function appendLengthInfo(int $numLetters, Version $version, Mode $mode, BitArray $bits) : void - { - $numBits = $mode->getCharacterCountBits($version); - - if ($numLetters >= (1 << $numBits)) { - throw new WriterException($numLetters . ' is bigger than ' . ((1 << $numBits) - 1)); - } - - $bits->appendBits($numLetters, $numBits); - } - - /** - * Appends bytes to a bit array in a specific mode. - * - * @throws WriterException if an invalid mode was supplied - */ - private static function appendBytes(string $content, Mode $mode, BitArray $bits, string $encoding) : void - { - switch ($mode) { - case Mode::NUMERIC(): - self::appendNumericBytes($content, $bits); - break; - - case Mode::ALPHANUMERIC(): - self::appendAlphanumericBytes($content, $bits); - break; - - case Mode::BYTE(): - self::append8BitBytes($content, $bits, $encoding); - break; - - case Mode::KANJI(): - self::appendKanjiBytes($content, $bits); - break; - - default: - throw new WriterException('Invalid mode: ' . $mode); - } - } - - /** - * Appends numeric bytes to a bit array. - */ - private static function appendNumericBytes(string $content, BitArray $bits) : void - { - $length = strlen($content); - $i = 0; - - while ($i < $length) { - $num1 = (int) $content[$i]; - - if ($i + 2 < $length) { - // Encode three numeric letters in ten bits. - $num2 = (int) $content[$i + 1]; - $num3 = (int) $content[$i + 2]; - $bits->appendBits($num1 * 100 + $num2 * 10 + $num3, 10); - $i += 3; - } elseif ($i + 1 < $length) { - // Encode two numeric letters in seven bits. - $num2 = (int) $content[$i + 1]; - $bits->appendBits($num1 * 10 + $num2, 7); - $i += 2; - } else { - // Encode one numeric letter in four bits. - $bits->appendBits($num1, 4); - ++$i; - } - } - } - - /** - * Appends alpha-numeric bytes to a bit array. - * - * @throws WriterException if an invalid alphanumeric code was found - */ - private static function appendAlphanumericBytes(string $content, BitArray $bits) : void - { - $length = strlen($content); - $i = 0; - - while ($i < $length) { - $code1 = self::getAlphanumericCode(ord($content[$i])); - - if (-1 === $code1) { - throw new WriterException('Invalid alphanumeric code'); - } - - if ($i + 1 < $length) { - $code2 = self::getAlphanumericCode(ord($content[$i + 1])); - - if (-1 === $code2) { - throw new WriterException('Invalid alphanumeric code'); - } - - // Encode two alphanumeric letters in 11 bits. - $bits->appendBits($code1 * 45 + $code2, 11); - $i += 2; - } else { - // Encode one alphanumeric letter in six bits. - $bits->appendBits($code1, 6); - ++$i; - } - } - } - - /** - * Appends regular 8-bit bytes to a bit array. - * - * @throws WriterException if content cannot be encoded to target encoding - */ - private static function append8BitBytes(string $content, BitArray $bits, string $encoding) : void - { - $bytes = @iconv('utf-8', $encoding, $content); - - if (false === $bytes) { - throw new WriterException('Could not encode content to ' . $encoding); - } - - $length = strlen($bytes); - - for ($i = 0; $i < $length; $i++) { - $bits->appendBits(ord($bytes[$i]), 8); - } - } - - /** - * Appends KANJI bytes to a bit array. - * - * @throws WriterException if content does not seem to be encoded in SHIFT-JIS - * @throws WriterException if an invalid byte sequence occurs - */ - private static function appendKanjiBytes(string $content, BitArray $bits) : void - { - if (strlen($content) % 2 > 0) { - // We just do a simple length check here. The for loop will check - // individual characters. - throw new WriterException('Content does not seem to be encoded in SHIFT-JIS'); - } - - $length = strlen($content); - - for ($i = 0; $i < $length; $i += 2) { - $byte1 = ord($content[$i]) & 0xff; - $byte2 = ord($content[$i + 1]) & 0xff; - $code = ($byte1 << 8) | $byte2; - - if ($code >= 0x8140 && $code <= 0x9ffc) { - $subtracted = $code - 0x8140; - } elseif ($code >= 0xe040 && $code <= 0xebbf) { - $subtracted = $code - 0xc140; - } else { - throw new WriterException('Invalid byte sequence'); - } - - $encoded = (($subtracted >> 8) * 0xc0) + ($subtracted & 0xff); - - $bits->appendBits($encoded, 13); - } - } - - /** - * Appends ECI information to a bit array. - */ - private static function appendEci(CharacterSetEci $eci, BitArray $bits) : void - { - $mode = Mode::ECI(); - $bits->appendBits($mode->getBits(), 4); - $bits->appendBits($eci->getValue(), 8); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php deleted file mode 100644 index 0967e29..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php +++ /dev/null @@ -1,513 +0,0 @@ -clear(-1); - } - - /** - * Builds a complete matrix. - */ - public static function buildMatrix( - BitArray $dataBits, - ErrorCorrectionLevel $level, - Version $version, - int $maskPattern, - ByteMatrix $matrix - ) : void { - self::clearMatrix($matrix); - self::embedBasicPatterns($version, $matrix); - self::embedTypeInfo($level, $maskPattern, $matrix); - self::maybeEmbedVersionInfo($version, $matrix); - self::embedDataBits($dataBits, $maskPattern, $matrix); - } - - /** - * Removes the position detection patterns from a matrix. - * - * This can be useful if you need to render those patterns separately. - */ - public static function removePositionDetectionPatterns(ByteMatrix $matrix) : void - { - $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]); - - self::removePositionDetectionPattern(0, 0, $matrix); - self::removePositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix); - self::removePositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix); - } - - /** - * Embeds type information into a matrix. - */ - private static function embedTypeInfo(ErrorCorrectionLevel $level, int $maskPattern, ByteMatrix $matrix) : void - { - $typeInfoBits = new BitArray(); - self::makeTypeInfoBits($level, $maskPattern, $typeInfoBits); - - $typeInfoBitsSize = $typeInfoBits->getSize(); - - for ($i = 0; $i < $typeInfoBitsSize; ++$i) { - $bit = $typeInfoBits->get($typeInfoBitsSize - 1 - $i); - - $x1 = self::TYPE_INFO_COORDINATES[$i][0]; - $y1 = self::TYPE_INFO_COORDINATES[$i][1]; - - $matrix->set($x1, $y1, (int) $bit); - - if ($i < 8) { - $x2 = $matrix->getWidth() - $i - 1; - $y2 = 8; - } else { - $x2 = 8; - $y2 = $matrix->getHeight() - 7 + ($i - 8); - } - - $matrix->set($x2, $y2, (int) $bit); - } - } - - /** - * Generates type information bits and appends them to a bit array. - * - * @throws RuntimeException if bit array resulted in invalid size - */ - private static function makeTypeInfoBits(ErrorCorrectionLevel $level, int $maskPattern, BitArray $bits) : void - { - $typeInfo = ($level->getBits() << 3) | $maskPattern; - $bits->appendBits($typeInfo, 5); - - $bchCode = self::calculateBchCode($typeInfo, self::TYPE_INFO_POLY); - $bits->appendBits($bchCode, 10); - - $maskBits = new BitArray(); - $maskBits->appendBits(self::TYPE_INFO_MASK_PATTERN, 15); - $bits->xorBits($maskBits); - - if (15 !== $bits->getSize()) { - throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize()); - } - } - - /** - * Embeds version information if required. - */ - private static function maybeEmbedVersionInfo(Version $version, ByteMatrix $matrix) : void - { - if ($version->getVersionNumber() < 7) { - return; - } - - $versionInfoBits = new BitArray(); - self::makeVersionInfoBits($version, $versionInfoBits); - - $bitIndex = 6 * 3 - 1; - - for ($i = 0; $i < 6; ++$i) { - for ($j = 0; $j < 3; ++$j) { - $bit = $versionInfoBits->get($bitIndex); - --$bitIndex; - - $matrix->set($i, $matrix->getHeight() - 11 + $j, (int) $bit); - $matrix->set($matrix->getHeight() - 11 + $j, $i, (int) $bit); - } - } - } - - /** - * Generates version information bits and appends them to a bit array. - * - * @throws RuntimeException if bit array resulted in invalid size - */ - private static function makeVersionInfoBits(Version $version, BitArray $bits) : void - { - $bits->appendBits($version->getVersionNumber(), 6); - - $bchCode = self::calculateBchCode($version->getVersionNumber(), self::VERSION_INFO_POLY); - $bits->appendBits($bchCode, 12); - - if (18 !== $bits->getSize()) { - throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize()); - } - } - - /** - * Calculates the BCH code for a value and a polynomial. - */ - private static function calculateBchCode(int $value, int $poly) : int - { - $msbSetInPoly = self::findMsbSet($poly); - $value <<= $msbSetInPoly - 1; - - while (self::findMsbSet($value) >= $msbSetInPoly) { - $value ^= $poly << (self::findMsbSet($value) - $msbSetInPoly); - } - - return $value; - } - - /** - * Finds and MSB set. - */ - private static function findMsbSet(int $value) : int - { - $numDigits = 0; - - while (0 !== $value) { - $value >>= 1; - ++$numDigits; - } - - return $numDigits; - } - - /** - * Embeds basic patterns into a matrix. - */ - private static function embedBasicPatterns(Version $version, ByteMatrix $matrix) : void - { - self::embedPositionDetectionPatternsAndSeparators($matrix); - self::embedDarkDotAtLeftBottomCorner($matrix); - self::maybeEmbedPositionAdjustmentPatterns($version, $matrix); - self::embedTimingPatterns($matrix); - } - - /** - * Embeds position detection patterns and separators into a byte matrix. - */ - private static function embedPositionDetectionPatternsAndSeparators(ByteMatrix $matrix) : void - { - $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]); - - self::embedPositionDetectionPattern(0, 0, $matrix); - self::embedPositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix); - self::embedPositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix); - - $hspWidth = 8; - - self::embedHorizontalSeparationPattern(0, $hspWidth - 1, $matrix); - self::embedHorizontalSeparationPattern($matrix->getWidth() - $hspWidth, $hspWidth - 1, $matrix); - self::embedHorizontalSeparationPattern(0, $matrix->getWidth() - $hspWidth, $matrix); - - $vspSize = 7; - - self::embedVerticalSeparationPattern($vspSize, 0, $matrix); - self::embedVerticalSeparationPattern($matrix->getHeight() - $vspSize - 1, 0, $matrix); - self::embedVerticalSeparationPattern($vspSize, $matrix->getHeight() - $vspSize, $matrix); - } - - /** - * Embeds a single position detection pattern into a byte matrix. - */ - private static function embedPositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 7; ++$y) { - for ($x = 0; $x < 7; ++$x) { - $matrix->set($xStart + $x, $yStart + $y, self::POSITION_DETECTION_PATTERN[$y][$x]); - } - } - } - - private static function removePositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 7; ++$y) { - for ($x = 0; $x < 7; ++$x) { - $matrix->set($xStart + $x, $yStart + $y, 0); - } - } - } - - /** - * Embeds a single horizontal separation pattern. - * - * @throws RuntimeException if a byte was already set - */ - private static function embedHorizontalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($x = 0; $x < 8; $x++) { - if (-1 !== $matrix->get($xStart + $x, $yStart)) { - throw new RuntimeException('Byte already set'); - } - - $matrix->set($xStart + $x, $yStart, 0); - } - } - - /** - * Embeds a single vertical separation pattern. - * - * @throws RuntimeException if a byte was already set - */ - private static function embedVerticalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 7; $y++) { - if (-1 !== $matrix->get($xStart, $yStart + $y)) { - throw new RuntimeException('Byte already set'); - } - - $matrix->set($xStart, $yStart + $y, 0); - } - } - - /** - * Embeds a dot at the left bottom corner. - * - * @throws RuntimeException if a byte was already set to 0 - */ - private static function embedDarkDotAtLeftBottomCorner(ByteMatrix $matrix) : void - { - if (0 === $matrix->get(8, $matrix->getHeight() - 8)) { - throw new RuntimeException('Byte already set to 0'); - } - - $matrix->set(8, $matrix->getHeight() - 8, 1); - } - - /** - * Embeds position adjustment patterns if required. - */ - private static function maybeEmbedPositionAdjustmentPatterns(Version $version, ByteMatrix $matrix) : void - { - if ($version->getVersionNumber() < 2) { - return; - } - - $index = $version->getVersionNumber() - 1; - - $coordinates = self::POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[$index]; - $numCoordinates = count($coordinates); - - for ($i = 0; $i < $numCoordinates; ++$i) { - for ($j = 0; $j < $numCoordinates; ++$j) { - $y = $coordinates[$i]; - $x = $coordinates[$j]; - - if (null === $x || null === $y) { - continue; - } - - if (-1 === $matrix->get($x, $y)) { - self::embedPositionAdjustmentPattern($x - 2, $y - 2, $matrix); - } - } - } - } - - /** - * Embeds a single position adjustment pattern. - */ - private static function embedPositionAdjustmentPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 5; $y++) { - for ($x = 0; $x < 5; $x++) { - $matrix->set($xStart + $x, $yStart + $y, self::POSITION_ADJUSTMENT_PATTERN[$y][$x]); - } - } - } - - /** - * Embeds timing patterns into a matrix. - */ - private static function embedTimingPatterns(ByteMatrix $matrix) : void - { - $matrixWidth = $matrix->getWidth(); - - for ($i = 8; $i < $matrixWidth - 8; ++$i) { - $bit = ($i + 1) % 2; - - if (-1 === $matrix->get($i, 6)) { - $matrix->set($i, 6, $bit); - } - - if (-1 === $matrix->get(6, $i)) { - $matrix->set(6, $i, $bit); - } - } - } - - /** - * Embeds "dataBits" using "getMaskPattern". - * - * For debugging purposes, it skips masking process if "getMaskPattern" is -1. See 8.7 of JISX0510:2004 (p.38) for - * how to embed data bits. - * - * @throws WriterException if not all bits could be consumed - */ - private static function embedDataBits(BitArray $dataBits, int $maskPattern, ByteMatrix $matrix) : void - { - $bitIndex = 0; - $direction = -1; - - // Start from the right bottom cell. - $x = $matrix->getWidth() - 1; - $y = $matrix->getHeight() - 1; - - while ($x > 0) { - // Skip vertical timing pattern. - if (6 === $x) { - --$x; - } - - while ($y >= 0 && $y < $matrix->getHeight()) { - for ($i = 0; $i < 2; $i++) { - $xx = $x - $i; - - // Skip the cell if it's not empty. - if (-1 !== $matrix->get($xx, $y)) { - continue; - } - - if ($bitIndex < $dataBits->getSize()) { - $bit = $dataBits->get($bitIndex); - ++$bitIndex; - } else { - // Padding bit. If there is no bit left, we'll fill the - // left cells with 0, as described in 8.4.9 of - // JISX0510:2004 (p. 24). - $bit = false; - } - - // Skip masking if maskPattern is -1. - if (-1 !== $maskPattern && MaskUtil::getDataMaskBit($maskPattern, $xx, $y)) { - $bit = ! $bit; - } - - $matrix->set($xx, $y, (int) $bit); - } - - $y += $direction; - } - - $direction = -$direction; - $y += $direction; - $x -= 2; - } - - // All bits should be consumed - if ($dataBits->getSize() !== $bitIndex) { - throw new WriterException('Not all bits consumed (' . $bitIndex . ' out of ' . $dataBits->getSize() .')'); - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php deleted file mode 100644 index 79e53af..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Exception/OutOfBoundsException.php +++ /dev/null @@ -1,8 +0,0 @@ - 100) { - throw new Exception\InvalidArgumentException('Cyan must be between 0 and 100'); - } - - if ($magenta < 0 || $magenta > 100) { - throw new Exception\InvalidArgumentException('Magenta must be between 0 and 100'); - } - - if ($yellow < 0 || $yellow > 100) { - throw new Exception\InvalidArgumentException('Yellow must be between 0 and 100'); - } - - if ($black < 0 || $black > 100) { - throw new Exception\InvalidArgumentException('Black must be between 0 and 100'); - } - - $this->cyan = $cyan; - $this->magenta = $magenta; - $this->yellow = $yellow; - $this->black = $black; - } - - public function getCyan() : int - { - return $this->cyan; - } - - public function getMagenta() : int - { - return $this->magenta; - } - - public function getYellow() : int - { - return $this->yellow; - } - - public function getBlack() : int - { - return $this->black; - } - - public function toRgb() : Rgb - { - $k = $this->black / 100; - $c = (-$k * $this->cyan + $k * 100 + $this->cyan) / 100; - $m = (-$k * $this->magenta + $k * 100 + $this->magenta) / 100; - $y = (-$k * $this->yellow + $k * 100 + $this->yellow) / 100; - - return new Rgb( - (int) (-$c * 255 + 255), - (int) (-$m * 255 + 255), - (int) (-$y * 255 + 255) - ); - } - - public function toCmyk() : Cmyk - { - return $this; - } - - public function toGray() : Gray - { - return $this->toRgb()->toGray(); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php deleted file mode 100644 index 0d03125..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php +++ /dev/null @@ -1,38 +0,0 @@ -externalEye = $externalEye; - $this->internalEye = $internalEye; - } - - public function getExternalPath() : Path - { - return $this->externalEye->getExternalPath(); - } - - public function getInternalPath() : Path - { - return $this->internalEye->getInternalPath(); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php deleted file mode 100644 index ab68f3c..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php +++ /dev/null @@ -1,26 +0,0 @@ -eps = "%!PS-Adobe-3.0 EPSF-3.0\n" - . "%%Creator: BaconQrCode\n" - . sprintf("%%%%BoundingBox: 0 0 %d %d \n", $size, $size) - . "%%BeginProlog\n" - . "save\n" - . "50 dict begin\n" - . "/q { gsave } bind def\n" - . "/Q { grestore } bind def\n" - . "/s { scale } bind def\n" - . "/t { translate } bind def\n" - . "/r { rotate } bind def\n" - . "/n { newpath } bind def\n" - . "/m { moveto } bind def\n" - . "/l { lineto } bind def\n" - . "/c { curveto } bind def\n" - . "/z { closepath } bind def\n" - . "/f { eofill } bind def\n" - . "/rgb { setrgbcolor } bind def\n" - . "/cmyk { setcmykcolor } bind def\n" - . "/gray { setgray } bind def\n" - . "%%EndProlog\n" - . "1 -1 s\n" - . sprintf("0 -%d t\n", $size); - - if ($backgroundColor instanceof Alpha && 0 === $backgroundColor->getAlpha()) { - return; - } - - $this->eps .= wordwrap( - '0 0 m' - . sprintf(' %s 0 l', (string) $size) - . sprintf(' %s %s l', (string) $size, (string) $size) - . sprintf(' 0 %s l', (string) $size) - . ' z' - . ' ' .$this->getColorSetString($backgroundColor) . " f\n", - 75, - "\n " - ); - } - - public function scale(float $size) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= sprintf("%1\$s %1\$s s\n", round($size, self::PRECISION)); - } - - public function translate(float $x, float $y) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= sprintf("%s %s t\n", round($x, self::PRECISION), round($y, self::PRECISION)); - } - - public function rotate(int $degrees) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= sprintf("%d r\n", $degrees); - } - - public function push() : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= "q\n"; - } - - public function pop() : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= "Q\n"; - } - - public function drawPathWithColor(Path $path, ColorInterface $color) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $fromX = 0; - $fromY = 0; - $this->eps .= wordwrap( - 'n ' - . $this->drawPathOperations($path, $fromX, $fromY) - . ' ' . $this->getColorSetString($color) . " f\n", - 75, - "\n " - ); - } - - public function drawPathWithGradient( - Path $path, - Gradient $gradient, - float $x, - float $y, - float $width, - float $height - ) : void { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $fromX = 0; - $fromY = 0; - $this->eps .= wordwrap( - 'q n ' . $this->drawPathOperations($path, $fromX, $fromY) . "\n", - 75, - "\n " - ); - - $this->createGradientFill($gradient, $x, $y, $width, $height); - } - - public function done() : string - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= "%%TRAILER\nend restore\n%%EOF"; - $blob = $this->eps; - $this->eps = null; - - return $blob; - } - - private function drawPathOperations(Iterable $ops, &$fromX, &$fromY) : string - { - $pathData = []; - - foreach ($ops as $op) { - switch (true) { - case $op instanceof Move: - $fromX = $toX = round($op->getX(), self::PRECISION); - $fromY = $toY = round($op->getY(), self::PRECISION); - $pathData[] = sprintf('%s %s m', $toX, $toY); - break; - - case $op instanceof Line: - $fromX = $toX = round($op->getX(), self::PRECISION); - $fromY = $toY = round($op->getY(), self::PRECISION); - $pathData[] = sprintf('%s %s l', $toX, $toY); - break; - - case $op instanceof EllipticArc: - $pathData[] = $this->drawPathOperations($op->toCurves($fromX, $fromY), $fromX, $fromY); - break; - - case $op instanceof Curve: - $x1 = round($op->getX1(), self::PRECISION); - $y1 = round($op->getY1(), self::PRECISION); - $x2 = round($op->getX2(), self::PRECISION); - $y2 = round($op->getY2(), self::PRECISION); - $fromX = $x3 = round($op->getX3(), self::PRECISION); - $fromY = $y3 = round($op->getY3(), self::PRECISION); - $pathData[] = sprintf('%s %s %s %s %s %s c', $x1, $y1, $x2, $y2, $x3, $y3); - break; - - case $op instanceof Close: - $pathData[] = 'z'; - break; - - default: - throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); - } - } - - return implode(' ', $pathData); - } - - private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : void - { - $startColor = $gradient->getStartColor(); - $endColor = $gradient->getEndColor(); - - if ($startColor instanceof Alpha) { - $startColor = $startColor->getBaseColor(); - } - - $startColorType = get_class($startColor); - - if (! in_array($startColorType, [Rgb::class, Cmyk::class, Gray::class])) { - $startColorType = Cmyk::class; - $startColor = $startColor->toCmyk(); - } - - if (get_class($endColor) !== $startColorType) { - switch ($startColorType) { - case Cmyk::class: - $endColor = $endColor->toCmyk(); - break; - - case Rgb::class: - $endColor = $endColor->toRgb(); - break; - - case Gray::class: - $endColor = $endColor->toGray(); - break; - } - } - - $this->eps .= "eoclip\n<<\n"; - - if ($gradient->getType() === GradientType::RADIAL()) { - $this->eps .= " /ShadingType 3\n"; - } else { - $this->eps .= " /ShadingType 2\n"; - } - - $this->eps .= " /Extend [ true true ]\n" - . " /AntiAlias true\n"; - - switch ($startColorType) { - case Cmyk::class: - $this->eps .= " /ColorSpace /DeviceCMYK\n"; - break; - - case Rgb::class: - $this->eps .= " /ColorSpace /DeviceRGB\n"; - break; - - case Gray::class: - $this->eps .= " /ColorSpace /DeviceGray\n"; - break; - } - - switch ($gradient->getType()) { - case GradientType::HORIZONTAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y, self::PRECISION), - round($x + $width, self::PRECISION), - round($y, self::PRECISION) - ); - break; - - case GradientType::VERTICAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y, self::PRECISION), - round($x, self::PRECISION), - round($y + $height, self::PRECISION) - ); - break; - - case GradientType::DIAGONAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y, self::PRECISION), - round($x + $width, self::PRECISION), - round($y + $height, self::PRECISION) - ); - break; - - case GradientType::INVERSE_DIAGONAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y + $height, self::PRECISION), - round($x + $width, self::PRECISION), - round($y, self::PRECISION) - ); - break; - - case GradientType::RADIAL(): - $centerX = ($x + $width) / 2; - $centerY = ($y + $height) / 2; - - $this->eps .= sprintf( - " /Coords [ %s %s 0 %s %s %s ]\n", - round($centerX, self::PRECISION), - round($centerY, self::PRECISION), - round($centerX, self::PRECISION), - round($centerY, self::PRECISION), - round(max($width, $height) / 2, self::PRECISION) - ); - break; - } - - $this->eps .= " /Function\n" - . " <<\n" - . " /FunctionType 2\n" - . " /Domain [ 0 1 ]\n" - . sprintf(" /C0 [ %s ]\n", $this->getColorString($startColor)) - . sprintf(" /C1 [ %s ]\n", $this->getColorString($endColor)) - . " /N 1\n" - . " >>\n>>\nshfill\nQ\n"; - } - - private function getColorSetString(ColorInterface $color) : string - { - if ($color instanceof Rgb) { - return $this->getColorString($color) . ' rgb'; - } - - if ($color instanceof Cmyk) { - return $this->getColorString($color) . ' cmyk'; - } - - if ($color instanceof Gray) { - return $this->getColorString($color) . ' gray'; - } - - return $this->getColorSetString($color->toCmyk()); - } - - private function getColorString(ColorInterface $color) : string - { - if ($color instanceof Rgb) { - return sprintf('%s %s %s', $color->getRed() / 255, $color->getGreen() / 255, $color->getBlue() / 255); - } - - if ($color instanceof Cmyk) { - return sprintf( - '%s %s %s %s', - $color->getCyan() / 100, - $color->getMagenta() / 100, - $color->getYellow() / 100, - $color->getBlack() / 100 - ); - } - - if ($color instanceof Gray) { - return sprintf('%s', $color->getGray() / 100); - } - - return $this->getColorString($color->toCmyk()); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php deleted file mode 100644 index f536e5a..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php +++ /dev/null @@ -1,63 +0,0 @@ - 1) { - throw new InvalidArgumentException('Size must between 0 (exclusive) and 1 (inclusive)'); - } - - $this->size = $size; - } - - public function createPath(ByteMatrix $matrix) : Path - { - $width = $matrix->getWidth(); - $height = $matrix->getHeight(); - $path = new Path(); - $halfSize = $this->size / 2; - $margin = (1 - $this->size) / 2; - - for ($y = 0; $y < $height; ++$y) { - for ($x = 0; $x < $width; ++$x) { - if (! $matrix->get($x, $y)) { - continue; - } - - $pathX = $x + $margin; - $pathY = $y + $margin; - - $path = $path - ->move($pathX + $this->size, $pathY + $halfSize) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY + $this->size) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX, $pathY + $halfSize) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $this->size, $pathY + $halfSize) - ->close() - ; - } - } - - return $path; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php deleted file mode 100644 index 90482f2..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php +++ /dev/null @@ -1,100 +0,0 @@ - - */ - private $points = []; - - /** - * @var array|null - */ - private $simplifiedPoints; - - /** - * @var int - */ - private $minX = PHP_INT_MAX; - - /** - * @var int - */ - private $minY = PHP_INT_MAX; - - /** - * @var int - */ - private $maxX = -1; - - /** - * @var int - */ - private $maxY = -1; - - public function __construct(bool $positive) - { - $this->positive = $positive; - } - - public function addPoint(int $x, int $y) : void - { - $this->points[] = [$x, $y]; - $this->minX = min($this->minX, $x); - $this->minY = min($this->minY, $y); - $this->maxX = max($this->maxX, $x); - $this->maxY = max($this->maxY, $y); - } - - public function isPositive() : bool - { - return $this->positive; - } - - /** - * @return array - */ - public function getPoints() : array - { - return $this->points; - } - - public function getMaxX() : int - { - return $this->maxX; - } - - public function getSimplifiedPoints() : array - { - if (null !== $this->simplifiedPoints) { - return $this->simplifiedPoints; - } - - $points = []; - $length = count($this->points); - - for ($i = 0; $i < $length; ++$i) { - $previousPoint = $this->points[(0 === $i ? $length : $i) - 1]; - $nextPoint = $this->points[($length - 1 === $i ? -1 : $i) + 1]; - $currentPoint = $this->points[$i]; - - if (($previousPoint[0] === $currentPoint[0] && $currentPoint[0] === $nextPoint[0]) - || ($previousPoint[1] === $currentPoint[1] && $currentPoint[1] === $nextPoint[1]) - ) { - continue; - } - - $points[] = $currentPoint; - } - - return $this->simplifiedPoints = $points; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php deleted file mode 100644 index 0ccb0e0..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php +++ /dev/null @@ -1,18 +0,0 @@ - 1) { - throw new InvalidArgumentException('Intensity must between 0 (exclusive) and 1 (inclusive)'); - } - - $this->intensity = $intensity / 2; - } - - public function createPath(ByteMatrix $matrix) : Path - { - $path = new Path(); - - foreach (new EdgeIterator($matrix) as $edge) { - $points = $edge->getSimplifiedPoints(); - $length = count($points); - - $currentPoint = $points[0]; - $nextPoint = $points[1]; - $horizontal = ($currentPoint[1] === $nextPoint[1]); - - if ($horizontal) { - $right = $nextPoint[0] > $currentPoint[0]; - $path = $path->move( - $currentPoint[0] + ($right ? $this->intensity : -$this->intensity), - $currentPoint[1] - ); - } else { - $up = $nextPoint[0] < $currentPoint[0]; - $path = $path->move( - $currentPoint[0], - $currentPoint[1] + ($up ? -$this->intensity : $this->intensity) - ); - } - - for ($i = 1; $i <= $length; ++$i) { - if ($i === $length) { - $previousPoint = $points[$length - 1]; - $currentPoint = $points[0]; - $nextPoint = $points[1]; - } else { - $previousPoint = $points[(0 === $i ? $length : $i) - 1]; - $currentPoint = $points[$i]; - $nextPoint = $points[($length - 1 === $i ? -1 : $i) + 1]; - } - - $horizontal = ($previousPoint[1] === $currentPoint[1]); - - if ($horizontal) { - $right = $previousPoint[0] < $currentPoint[0]; - $up = $nextPoint[1] < $currentPoint[1]; - $sweep = ($up xor $right); - - if ($this->intensity < 0.5 - || ($right && $previousPoint[0] !== $currentPoint[0] - 1) - || (! $right && $previousPoint[0] - 1 !== $currentPoint[0]) - ) { - $path = $path->line( - $currentPoint[0] + ($right ? -$this->intensity : $this->intensity), - $currentPoint[1] - ); - } - - $path = $path->ellipticArc( - $this->intensity, - $this->intensity, - 0, - false, - $sweep, - $currentPoint[0], - $currentPoint[1] + ($up ? -$this->intensity : $this->intensity) - ); - } else { - $up = $previousPoint[1] > $currentPoint[1]; - $right = $nextPoint[0] > $currentPoint[0]; - $sweep = ! ($up xor $right); - - if ($this->intensity < 0.5 - || ($up && $previousPoint[1] !== $currentPoint[1] + 1) - || (! $up && $previousPoint[0] + 1 !== $currentPoint[0]) - ) { - $path = $path->line( - $currentPoint[0], - $currentPoint[1] + ($up ? $this->intensity : -$this->intensity) - ); - } - - $path = $path->ellipticArc( - $this->intensity, - $this->intensity, - 0, - false, - $sweep, - $currentPoint[0] + ($right ? $this->intensity : -$this->intensity), - $currentPoint[1] - ); - } - } - - $path = $path->close(); - } - - return $path; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php deleted file mode 100644 index eff7deb..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php +++ /dev/null @@ -1,278 +0,0 @@ -xRadius = abs($xRadius); - $this->yRadius = abs($yRadius); - $this->xAxisAngle = $xAxisAngle % 360; - $this->largeArc = $largeArc; - $this->sweep = $sweep; - $this->x = $x; - $this->y = $y; - } - - public function getXRadius() : float - { - return $this->xRadius; - } - - public function getYRadius() : float - { - return $this->yRadius; - } - - public function getXAxisAngle() : float - { - return $this->xAxisAngle; - } - - public function isLargeArc() : bool - { - return $this->largeArc; - } - - public function isSweep() : bool - { - return $this->sweep; - } - - public function getX() : float - { - return $this->x; - } - - public function getY() : float - { - return $this->y; - } - - /** - * @return self - */ - public function translate(float $x, float $y) : OperationInterface - { - return new self( - $this->xRadius, - $this->yRadius, - $this->xAxisAngle, - $this->largeArc, - $this->sweep, - $this->x + $x, - $this->y + $y - ); - } - - /** - * Converts the elliptic arc to multiple curves. - * - * Since not all image back ends support elliptic arcs, this method allows to convert the arc into multiple curves - * resembling the same result. - * - * @see https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/ - * @return array - */ - public function toCurves(float $fromX, float $fromY) : array - { - if (sqrt(($fromX - $this->x) ** 2 + ($fromY - $this->y) ** 2) < self::ZERO_TOLERANCE) { - return []; - } - - if ($this->xRadius < self::ZERO_TOLERANCE || $this->yRadius < self::ZERO_TOLERANCE) { - return [new Line($this->x, $this->y)]; - } - - return $this->createCurves($fromX, $fromY); - } - - /** - * @return Curve[] - */ - private function createCurves(float $fromX, $fromY) : array - { - $xAngle = deg2rad($this->xAxisAngle); - list($centerX, $centerY, $radiusX, $radiusY, $startAngle, $deltaAngle) = - $this->calculateCenterPointParameters($fromX, $fromY, $xAngle); - - $s = $startAngle; - $e = $s + $deltaAngle; - $sign = ($e < $s) ? -1 : 1; - $remain = abs($e - $s); - $p1 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s); - $curves = []; - - while ($remain > self::ZERO_TOLERANCE) { - $step = min($remain, pi() / 2); - $signStep = $step * $sign; - $p2 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s + $signStep); - - $alphaT = tan($signStep / 2); - $alpha = sin($signStep) * (sqrt(4 + 3 * $alphaT ** 2) - 1) / 3; - $d1 = self::derivative($radiusX, $radiusY, $xAngle, $s); - $d2 = self::derivative($radiusX, $radiusY, $xAngle, $s + $signStep); - - $curves[] = new Curve( - $p1[0] + $alpha * $d1[0], - $p1[1] + $alpha * $d1[1], - $p2[0] - $alpha * $d2[0], - $p2[1] - $alpha * $d2[1], - $p2[0], - $p2[1] - ); - - $s += $signStep; - $remain -= $step; - $p1 = $p2; - } - - return $curves; - } - - /** - * @return float[] - */ - private function calculateCenterPointParameters(float $fromX, float $fromY, float $xAngle) - { - $rX = $this->xRadius; - $rY = $this->yRadius; - - // F.6.5.1 - $dx2 = ($fromX - $this->x) / 2; - $dy2 = ($fromY - $this->y) / 2; - $x1p = cos($xAngle) * $dx2 + sin($xAngle) * $dy2; - $y1p = -sin($xAngle) * $dx2 + cos($xAngle) * $dy2; - - // F.6.5.2 - $rxs = $rX ** 2; - $rys = $rY ** 2; - $x1ps = $x1p ** 2; - $y1ps = $y1p ** 2; - $cr = $x1ps / $rxs + $y1ps / $rys; - - if ($cr > 1) { - $s = sqrt($cr); - $rX *= $s; - $rY *= $s; - $rxs = $rX ** 2; - $rys = $rY ** 2; - } - - $dq = ($rxs * $y1ps + $rys * $x1ps); - $pq = ($rxs * $rys - $dq) / $dq; - $q = sqrt(max(0, $pq)); - - if ($this->largeArc === $this->sweep) { - $q = -$q; - } - - $cxp = $q * $rX * $y1p / $rY; - $cyp = -$q * $rY * $x1p / $rX; - - // F.6.5.3 - $cx = cos($xAngle) * $cxp - sin($xAngle) * $cyp + ($fromX + $this->x) / 2; - $cy = sin($xAngle) * $cxp + cos($xAngle) * $cyp + ($fromY + $this->y) / 2; - - // F.6.5.5 - $theta = self::angle(1, 0, ($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY); - - // F.6.5.6 - $delta = self::angle(($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY, (-$x1p - $cxp) / $rX, (-$y1p - $cyp) / $rY); - $delta = fmod($delta, pi() * 2); - - if (! $this->sweep) { - $delta -= 2 * pi(); - } - - return [$cx, $cy, $rX, $rY, $theta, $delta]; - } - - private static function angle(float $ux, float $uy, float $vx, float $vy) : float - { - // F.6.5.4 - $dot = $ux * $vx + $uy * $vy; - $length = sqrt($ux ** 2 + $uy ** 2) * sqrt($vx ** 2 + $vy ** 2); - $angle = acos(min(1, max(-1, $dot / $length))); - - if (($ux * $vy - $uy * $vx) < 0) { - return -$angle; - } - - return $angle; - } - - /** - * @return float[] - */ - private static function point( - float $centerX, - float $centerY, - float $radiusX, - float $radiusY, - float $xAngle, - float $angle - ) : array { - return [ - $centerX + $radiusX * cos($xAngle) * cos($angle) - $radiusY * sin($xAngle) * sin($angle), - $centerY + $radiusX * sin($xAngle) * cos($angle) + $radiusY * cos($xAngle) * sin($angle), - ]; - } - - /** - * @return float[] - */ - private static function derivative(float $radiusX, float $radiusY, float $xAngle, float $angle) : array - { - return [ - -$radiusX * cos($xAngle) * sin($angle) - $radiusY * sin($xAngle) * cos($angle), - -$radiusX * sin($xAngle) * sin($angle) + $radiusY * cos($xAngle) * cos($angle), - ]; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php deleted file mode 100644 index 481d0dd..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/Path/Move.php +++ /dev/null @@ -1,41 +0,0 @@ -x = $x; - $this->y = $y; - } - - public function getX() : float - { - return $this->x; - } - - public function getY() : float - { - return $this->y; - } - - /** - * @return self - */ - public function translate(float $x, float $y) : OperationInterface - { - return new self($this->x + $x, $this->y + $y); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php b/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php deleted file mode 100644 index 3813dfd..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php +++ /dev/null @@ -1,46 +0,0 @@ -startColor = $startColor; - $this->endColor = $endColor; - $this->type = $type; - } - - public function getStartColor() : ColorInterface - { - return $this->startColor; - } - - public function getEndColor() : ColorInterface - { - return $this->endColor; - } - - public function getType() : GradientType - { - return $this->type; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/LICENCE b/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/LICENCE deleted file mode 100644 index 22c3ef9..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/LICENCE +++ /dev/null @@ -1,26 +0,0 @@ -BSD 2-Clause License - -Copyright (c) 2016-2018, Samyoul -Copyright (c) 2020, William Desportes -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/composer.json deleted file mode 100644 index 026f4cd..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/code-lts/u2f-php-server/composer.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "code-lts/u2f-php-server", - "description": "Server side handling class for FIDO U2F registration and authentication", - "license":"BSD-2-Clause", - "homepage": "https://github.com/code-lts/U2F-php-server#readme", - "authors": [ - { - "name": "Samuel Hawksby-Robinson", - "email": "samuel@samyoul.com" - }, - { - "name": "William Desportes", - "email": "williamdes@wdes.fr" - } - ], - "support": { - "issues": "https://github.com/code-lts/U2F-php-server/issues", - "source": "https://github.com/code-lts/U2F-php-server" - }, - "scripts": { - "phpunit": "./vendor/bin/phpunit" - }, - "require": { - "php": "^7.1 || ^8.0", - "ext-openssl":"*" - }, - "require-dev": { - "phpunit/phpunit": "^7 || ^8 || ^9" - }, - "autoload": { - "psr-4": { "CodeLts\\U2F\\U2FServer\\": ["src/"] } - }, - "autoload-dev": { - "psr-4": { "CodeLts\\U2F\\U2FServer\\Tests\\": ["test/"] } - }, - "replace": { - "samyoul/u2f-php-server": "*" - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_namespaces.php b/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_namespaces.php deleted file mode 100644 index b7fc012..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($vendorDir . '/williamdes/mariadb-mysql-kbs/src'), - 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), - 'Twig\\' => array($vendorDir . '/twig/twig/src'), - 'Symfony\\Polyfill\\Php81\\' => array($vendorDir . '/symfony/polyfill-php81'), - 'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'), - 'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'), - 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), - 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), - 'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'), - 'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'), - 'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'), - 'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'), - 'Symfony\\Component\\ExpressionLanguage\\' => array($vendorDir . '/symfony/expression-language'), - 'Symfony\\Component\\DependencyInjection\\' => array($vendorDir . '/symfony/dependency-injection'), - 'Symfony\\Component\\Config\\' => array($vendorDir . '/symfony/config'), - 'Symfony\\Component\\Cache\\' => array($vendorDir . '/symfony/cache'), - 'Slim\\Psr7\\' => array($vendorDir . '/slim/psr7/src'), - 'ReCaptcha\\' => array($vendorDir . '/google/recaptcha/src/ReCaptcha'), - 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), - 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), - 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), - 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), - 'PragmaRX\\Google2FA\\' => array($vendorDir . '/pragmarx/google2fa/src'), - 'PragmaRX\\Google2FAQRCode\\Tests\\' => array($vendorDir . '/pragmarx/google2fa-qrcode/tests'), - 'PragmaRX\\Google2FAQRCode\\' => array($vendorDir . '/pragmarx/google2fa-qrcode/src'), - 'PhpMyAdmin\\Twig\\Extensions\\' => array($vendorDir . '/phpmyadmin/twig-i18n-extension/src'), - 'PhpMyAdmin\\SqlParser\\' => array($vendorDir . '/phpmyadmin/sql-parser/src'), - 'PhpMyAdmin\\ShapeFile\\' => array($vendorDir . '/phpmyadmin/shapefile/src'), - 'PhpMyAdmin\\MoTranslator\\' => array($vendorDir . '/phpmyadmin/motranslator/src'), - 'PhpMyAdmin\\' => array($baseDir . '/libraries/classes'), - 'ParagonIE\\ConstantTime\\' => array($vendorDir . '/paragonie/constant_time_encoding/src'), - 'Fig\\Http\\Message\\' => array($vendorDir . '/fig/http-message-util/src'), - 'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'), - 'DASPRiD\\Enum\\' => array($vendorDir . '/dasprid/enum/src'), - 'Composer\\CaBundle\\' => array($vendorDir . '/composer/ca-bundle/src'), - 'CodeLts\\U2F\\U2FServer\\' => array($vendorDir . '/code-lts/u2f-php-server/src'), - 'BaconQrCode\\' => array($vendorDir . '/bacon/bacon-qr-code/src'), -); diff --git a/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_real.php b/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_real.php deleted file mode 100644 index 15f2eea..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/composer/autoload_real.php +++ /dev/null @@ -1,80 +0,0 @@ -= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); - if ($useStaticLoader) { - require __DIR__ . '/autoload_static.php'; - - call_user_func(\Composer\Autoload\ComposerStaticInit30dc56dbcd95b1f5db28729d0c4615c4::getInitializer($loader)); - } else { - $map = require __DIR__ . '/autoload_namespaces.php'; - foreach ($map as $namespace => $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - } - - $loader->register(true); - - if ($useStaticLoader) { - $includeFiles = Composer\Autoload\ComposerStaticInit30dc56dbcd95b1f5db28729d0c4615c4::$files; - } else { - $includeFiles = require __DIR__ . '/autoload_files.php'; - } - foreach ($includeFiles as $fileIdentifier => $file) { - composerRequire30dc56dbcd95b1f5db28729d0c4615c4($fileIdentifier, $file); - } - - return $loader; - } -} - -/** - * @param string $fileIdentifier - * @param string $file - * @return void - */ -function composerRequire30dc56dbcd95b1f5db28729d0c4615c4($fileIdentifier, $file) -{ - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - - require $file; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/composer/ca-bundle/res/cacert.pem b/Sources/php_script/script/phpMyAdmin/vendor/composer/ca-bundle/res/cacert.pem deleted file mode 100644 index 0bf312f..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/composer/ca-bundle/res/cacert.pem +++ /dev/null @@ -1,3232 +0,0 @@ -## -## Bundle of CA Root Certificates -## -## Certificate data from Mozilla as of: Tue Oct 26 03:12:05 2021 GMT -## -## This is a bundle of X.509 certificates of public Certificate Authorities -## (CA). These were automatically extracted from Mozilla's root certificates -## file (certdata.txt). This file can be found in the mozilla source tree: -## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt -## -## It contains the certificates in PEM format and therefore -## can be directly used with curl / libcurl / php_curl, or with -## an Apache+mod_ssl webserver for SSL client authentication. -## Just configure this file as the SSLCACertificateFile. -## -## Conversion done with mk-ca-bundle.pl version 1.28. -## SHA256: bb36818a81feaa4cca61101e6d6276cd09e972efcb08112dfed846918ca41d7f -## - - -GlobalSign Root CA -================== ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx -GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds -b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV -BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD -VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa -DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc -THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb -Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP -c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX -gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF -AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj -Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG -j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH -hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC -X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -GlobalSign Root CA - R2 -======================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6 -ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp -s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN -S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL -TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C -ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i -YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN -BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp -9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu -01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7 -9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -Entrust.net Premium 2048 Secure Server CA -========================================= ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u -ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp -bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV -BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx -NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 -d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl -MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u -ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL -Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr -hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW -nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi -VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ -KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy -T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT -J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e -nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -Baltimore CyberTrust Root -========================= ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE -ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li -ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC -SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs -dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME -uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB -UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C -G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9 -XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr -l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI -VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB -BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh -cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5 -hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa -Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H -RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -Entrust Root Certification Authority -==================================== ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw -b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG -A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0 -MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu -MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu -Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v -dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz -A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww -Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68 -j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN -rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1 -MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH -hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM -Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa -v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS -W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 -tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -Comodo AAA Services root -======================== ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS -R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg -TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw -MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl -c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV -BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG -C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs -i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW -Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH -Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK -Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f -BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl -cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz -LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm -7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z -8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C -12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -QuoVadis Root CA 2 -================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -QuoVadis Root CA 3 -================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -Security Communication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP -U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw -8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM -DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX -5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd -DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2 -JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw -DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g -0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a -mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ -s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ -6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi -FL39vmwLAw== ------END CERTIFICATE----- - -XRamp Global CA Root -==================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE -BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj -dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx -HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg -U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu -IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx -foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE -zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs -AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry -xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap -oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC -AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc -/Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n -nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz -8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -Go Daddy Class 2 CA -=================== ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY -VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG -A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g -RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD -ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv -2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32 -qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j -YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY -vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O -BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o -atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu -MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim -PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt -I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI -Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b -vZ8= ------END CERTIFICATE----- - -Starfield Class 2 CA -==================== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc -U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo -MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG -A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG -SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY -bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ -JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm -epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN -F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF -MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f -hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo -bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g -QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs -afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM -PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD -KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3 -QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -DigiCert Assured ID Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx -MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO -9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy -UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW -/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy -oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf -GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF -66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq -hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc -EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn -SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i -8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -DigiCert Global Root CA -======================= ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw -MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn -TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5 -BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H -4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y -7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB -o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm -8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF -BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr -EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt -tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886 -UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -DigiCert High Assurance EV Root CA -================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw -KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw -MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ -MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu -Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t -Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS -OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3 -MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ -NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe -h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB -Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY -JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ -V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp -myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK -mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K ------END CERTIFICATE----- - -SwissSign Gold CA - G2 -====================== ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw -EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN -MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp -c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq -t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C -jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg -vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF -ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR -AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend -jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO -peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR -7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi -GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64 -OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm -5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr -44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf -Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m -Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp -mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk -vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf -KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br -NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj -viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -SwissSign Silver CA - G2 -======================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -SecureTrust CA -============== ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy -dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe -BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX -OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t -DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH -GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b -01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH -ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj -aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ -KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu -SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf -mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ -nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -Secure Global CA -================ ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG -EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH -bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg -MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg -Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx -YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ -bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g -8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV -HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi -0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn -oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA -MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+ -OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn -CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5 -3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -COMODO Certification Authority -============================== ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE -BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG -A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb -MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD -T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH -+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww -xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV -4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA -1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI -rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k -b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC -AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP -OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc -IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN -+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ== ------END CERTIFICATE----- - -Network Solutions Certificate Authority -======================================= ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG -EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr -IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx -MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx -jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT -aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT -crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc -/Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB -AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv -bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA -A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q -4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/ -GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD -ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -COMODO ECC Certification Authority -================================== ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC -R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE -ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix -GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X -4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni -wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG -FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA -U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -Certigna -======== ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw -EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3 -MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI -Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q -XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH -GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p -ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg -DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf -Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ -tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ -BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J -SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA -hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+ -ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu -PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY -1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -Cybertrust Global Root -====================== ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li -ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4 -MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD -ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA -+Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW -0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL -AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin -89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT -8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2 -MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G -A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO -lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi -5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2 -hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T -X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -ePKI Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG -EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg -Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx -MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq -MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs -IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi -lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv -qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX -12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O -WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+ -ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao -lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/ -vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi -Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi -MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0 -1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq -KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV -xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP -NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r -GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE -xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx -gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy -sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD -BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -certSIGN ROOT CA -================ ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD -VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa -Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE -CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I -JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH -rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2 -ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD -0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943 -AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B -Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB -AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8 -SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0 -x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt -vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz -TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -NetLock Arany (Class Gold) Főtanúsítvány -======================================== ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G -A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 -dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB -cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx -MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO -ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6 -c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu -0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw -/HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk -H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw -fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1 -neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW -qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta -YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna -NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu -dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -Hongkong Post Root CA 1 -======================= ------BEGIN CERTIFICATE----- -MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT -DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx -NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n -IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1 -ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr -auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh -qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY -V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV -HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i -h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio -l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei -IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps -T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT -c4afU9hDDl3WY4JxHYB0yvbiAmvZWg== ------END CERTIFICATE----- - -SecureSign RootCA11 -=================== ------BEGIN CERTIFICATE----- -MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi -SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS -b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw -KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1 -cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL -TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO -wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq -g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP -O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA -bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX -t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh -OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r -bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ -Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01 -y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061 -lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I= ------END CERTIFICATE----- - -Microsec e-Szigno Root CA 2009 -============================== ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER -MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv -c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE -BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt -U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA -fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG -0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA -pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm -1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC -AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf -QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE -FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o -lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX -I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02 -yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi -LXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -GlobalSign Root CA - R3 -======================= ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv -YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh -bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT -aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln -bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt -iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ -0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3 -rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl -OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2 -xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7 -lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8 -EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E -bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18 -YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r -kpeDMdmztcpHWD9f ------END CERTIFICATE----- - -Autoridad de Certificacion Firmaprofesional CIF A62634068 -========================================================= ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA -BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2 -MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw -QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB -NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD -Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P -B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY -7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH -ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI -plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX -MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX -LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK -bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU -vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud -EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH -DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp -cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA -bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx -ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx -51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk -R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP -T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f -Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl -osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR -crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR -saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD -KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi -6Et8Vcad+qMUu2WFbm5PEn4KPJ2V ------END CERTIFICATE----- - -Izenpe.com -========== ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4MQswCQYDVQQG -EwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wHhcNMDcxMjEz -MTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMu -QS4xEzARBgNVBAMMCkl6ZW5wZS5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ -03rKDx6sp4boFmVqscIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAK -ClaOxdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6HLmYRY2xU -+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFXuaOKmMPsOzTFlUFpfnXC -PCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQDyCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxT -OTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbK -F7jJeodWLBoBHmy+E60QrLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK -0GqfvEyNBjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8Lhij+ -0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIBQFqNeb+Lz0vPqhbB -leStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+HMh3/1uaD7euBUbl8agW7EekFwID -AQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2luZm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+ -SVpFTlBFIFMuQS4gLSBDSUYgQTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBG -NjIgUzgxQzBBBgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O -BBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUAA4ICAQB4pgwWSp9MiDrAyw6l -Fn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWblaQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbga -kEyrkgPH7UIBzg/YsfqikuFgba56awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8q -hT/AQKM6WfxZSzwoJNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Cs -g1lwLDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCTVyvehQP5 -aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGkLhObNA5me0mrZJfQRsN5 -nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJbUjWumDqtujWTI6cfSN01RpiyEGjkpTHC -ClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZo -Q0iy2+tzJOeRf1SktoA+naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1Z -WrOZyGlsQyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -Go Daddy Root Certificate Authority - G2 -======================================== ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu -MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G -A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq -9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD -+qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd -fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl -NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9 -BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac -vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r -5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV -N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1 ------END CERTIFICATE----- - -Starfield Root Certificate Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 -eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw -DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg -VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB -dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv -W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs -bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk -N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf -ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU -JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol -TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx -4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw -F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ -c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -Starfield Services Root Certificate Authority - G2 -================================================== ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT -B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s -b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl -IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT -dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg -Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2 -h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa -hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP -LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB -rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG -SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP -E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy -xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza -YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6 ------END CERTIFICATE----- - -AffirmTrust Commercial -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw -MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb -DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV -C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6 -BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww -MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV -HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG -hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi -qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv -0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh -sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -AffirmTrust Networking -====================== ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw -MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly -bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE -Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI -dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24 -/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb -h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV -HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu -UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6 -12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23 -WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9 -/ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -AffirmTrust Premium -=================== ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS -BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy -OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy -dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn -BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV -5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs -+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd -GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R -p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI -S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04 -6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5 -/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo -+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv -MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC -6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S -L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK -+4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV -BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg -IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60 -g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb -zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw== ------END CERTIFICATE----- - -AffirmTrust Premium ECC -======================= ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV -BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx -MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U -cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ -N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW -BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK -BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X -57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM -eQ== ------END CERTIFICATE----- - -Certum Trusted Network CA -========================= ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK -ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy -MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU -ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC -l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J -J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4 -fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0 -cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB -Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw -DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj -jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1 -mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj -Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -TWCA Root Certification Authority -================================= ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ -VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG -EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB -IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx -QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC -oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP -4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r -y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG -9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC -mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW -QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY -T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny -Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -Security Communication RootCA2 -============================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc -U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh -dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC -SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy -aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++ -+T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R -3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV -spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K -EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8 -QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB -CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj -u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk -3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q -tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29 -mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -EC-ACC -====== ------BEGIN CERTIFICATE----- -MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE -BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w -ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD -VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE -CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT -BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7 -MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt -SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl -Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh -cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK -w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT -ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4 -HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a -E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw -0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD -VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0 -Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l -dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ -lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa -Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe -l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2 -E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D -5EI= ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2011 -======================================================= ------BEGIN CERTIFICATE----- -MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT -O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y -aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT -AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z -IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo -IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB -AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI -1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa -71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u -8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH -3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/ -MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8 -MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu -b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt -XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 -TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD -/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N -7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4 ------END CERTIFICATE----- - -Actalis Authentication Root CA -============================== ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM -BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE -AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky -MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz -IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ -wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa -by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6 -zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f -YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2 -oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l -EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7 -hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8 -EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5 -jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY -iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI -WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0 -JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx -K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+ -Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC -4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo -2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz -lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem -OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9 -vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -Buypass Class 2 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X -DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1 -g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn -9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b -/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU -CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff -awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI -zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn -Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX -Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs -M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI -osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S -aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd -DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD -LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0 -oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC -wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS -CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN -rJgWVqA= ------END CERTIFICATE----- - -Buypass Class 3 Root CA -======================= ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMyBSb290IENBMB4X -DTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFowTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1 -eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRH -sJ8YZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3EN3coTRiR -5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9tznDDgFHmV0ST9tD+leh -7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX0DJq1l1sDPGzbjniazEuOQAnFN44wOwZ -ZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH -2xc519woe2v1n/MuwU8XKhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV -/afmiSTYzIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvSO1UQ -RwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D34xFMFbG02SrZvPA -Xpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgPK9Dx2hzLabjKSWJtyNBjYt1gD1iq -j6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFEe4zf/lb+74suwvTg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF -AAOCAgEAACAjQTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXSIGrs/CIBKM+G -uIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2HJLw5QY33KbmkJs4j1xrG0aG -Q0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsaO5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8 -ZORK15FTAaggiG6cX0S5y2CBNOxv033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2 -KSb12tjE8nVhz36udmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz -6MkEkbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg413OEMXbug -UZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvDu79leNKGef9JOxqDDPDe -eOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq4/g7u9xN12TyUb7mqqta6THuBrxzvxNi -Cp/HuZc= ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 3 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx -MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK -9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU -NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF -iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W -0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr -AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb -fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT -ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h -P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw== ------END CERTIFICATE----- - -D-TRUST Root Class 3 CA 2 2009 -============================== ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe -Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE -LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD -ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA -BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv -KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z -p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC -AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ -4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y -eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw -MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G -PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw -OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm -2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV -dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph -X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -D-TRUST Root Class 3 CA 2 EV 2009 -================================= ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw -OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK -DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw -OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS -egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh -zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T -7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 -sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 -11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv -cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v -ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El -MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp -b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh -c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ -PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX -ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA -NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv -w9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -CA Disig Root R2 -================ ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw -EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp -ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx -EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp -c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC -w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia -xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 -A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S -GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV -g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa -5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE -koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A -Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i -Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u -Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV -sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je -dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 -1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx -mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 -utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 -sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg -UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV -7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -ACCVRAIZ1 -========= ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB -SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 -MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH -UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM -jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 -RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD -aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ -0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG -WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 -8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR -5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J -9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK -Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw -Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu -Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM -Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA -QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh -AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA -YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj -AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA -IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk -aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 -dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 -MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI -hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E -R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN -YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 -nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ -TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 -sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg -Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd -3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p -EfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -TWCA Global Root CA -=================== ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT -CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD -QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK -EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg -Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C -nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV -r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR -Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV -tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W -KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 -sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p -yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn -kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI -zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g -cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M -8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg -/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg -lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP -A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m -i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 -EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 -zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= ------END CERTIFICATE----- - -TeliaSonera Root CA v1 -====================== ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE -CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 -MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW -VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ -6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA -3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k -B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn -Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH -oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 -F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ -oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 -gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc -TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB -AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW -DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm -zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW -pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV -G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc -c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT -JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 -qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 -Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems -WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -E-Tugra Certification Authority -=============================== ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w -DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls -ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN -ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw -NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx -QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl -cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD -DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd -hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K -CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g -ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ -BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 -E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz -rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq -jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn -rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 -dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG -MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK -kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO -XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 -VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo -a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc -dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV -KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT -Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 -8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G -C7TbO6Orb1wdtn7os4I07QZcJA== ------END CERTIFICATE----- - -T-TeleSec GlobalRoot Class 2 -============================ ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM -IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU -cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx -MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz -dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD -ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ -SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F -vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 -2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV -WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy -YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 -r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf -vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR -3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== ------END CERTIFICATE----- - -Atos TrustedRoot 2011 -===================== ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU -cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 -MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG -A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV -hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr -54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ -DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 -HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR -z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R -l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ -bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h -k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh -TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 -61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G -3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -QuoVadis Root CA 1 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE -PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm -PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 -Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN -ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l -g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV -7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX -9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f -iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg -t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI -hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 -GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct -Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP -+V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh -3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa -wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 -O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 -FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV -hMJKzRwuJIczYOXD ------END CERTIFICATE----- - -QuoVadis Root CA 2 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh -ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY -NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t -oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o -MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l -V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo -L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ -sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD -6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh -lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI -hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K -pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 -x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz -dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X -U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw -mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD -zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN -JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr -O3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -QuoVadis Root CA 3 G3 -===================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG -A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv -b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN -MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg -RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 -IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL -Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe -6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 -I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U -VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 -5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi -Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM -dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt -rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI -hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS -t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ -TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du -DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib -Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD -hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX -0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW -dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 -PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -DigiCert Assured ID Root G2 -=========================== ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw -IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw -MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL -ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw -ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH -35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq -bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw -VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP -YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn -lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO -w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv -0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz -d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW -hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M -jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -DigiCert Assured ID Root G3 -=========================== ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD -VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 -MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ -BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb -RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs -KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF -UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy -YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy -1vUhZscv6pZjamVFkpUBtA== ------END CERTIFICATE----- - -DigiCert Global Root G2 -======================= ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw -HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx -MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 -dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq -hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ -kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO -3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV -BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM -UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB -o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu -5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr -F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U -WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH -QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ -iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -DigiCert Global Root G3 -======================= ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD -VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw -MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k -aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C -AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O -YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp -Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y -3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 -VOKa5Vt8sycX ------END CERTIFICATE----- - -DigiCert Trusted Root G4 -======================== ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw -HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 -MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp -pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o -k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa -vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY -QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 -MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm -mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 -f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH -dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 -oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY -ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr -yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy -7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah -ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN -5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb -/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa -5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK -G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP -82Z+ ------END CERTIFICATE----- - -COMODO RSA Certification Authority -================================== ------BEGIN CERTIFICATE----- -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 -LaZRfyHBNVOFBkpdn627G190 ------END CERTIFICATE----- - -USERTrust RSA Certification Authority -===================================== ------BEGIN CERTIFICATE----- -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 -Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -USERTrust ECC Certification Authority -===================================== ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC -VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC -VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 -0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez -nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV -HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB -HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu -9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -GlobalSign ECC Root CA - R4 -=========================== ------BEGIN CERTIFICATE----- -MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl -OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P -AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV -MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF -JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= ------END CERTIFICATE----- - -GlobalSign ECC Root CA - R5 -=========================== ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb -R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD -EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 -SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS -h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd -BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx -uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 -yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -Staat der Nederlanden EV Root CA -================================ ------BEGIN CERTIFICATE----- -MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE -CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g -RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M -MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl -cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk -SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW -O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r -0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 -Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV -XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr -08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV -0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd -74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx -fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa -ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI -eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu -c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq -5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN -b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN -f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi -5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 -WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK -DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy -eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== ------END CERTIFICATE----- - -IdenTrust Commercial Root CA 1 -============================== ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG -EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS -b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES -MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB -IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld -hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ -mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi -1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C -XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl -3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy -NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV -WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg -xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix -uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI -hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg -ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt -ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV -YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX -feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro -kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe -2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz -Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R -cGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -IdenTrust Public Sector Root CA 1 -================================= ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG -EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv -ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV -UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS -b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy -P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 -Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI -rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf -qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS -mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn -ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh -LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v -iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL -4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B -Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw -DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A -mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt -GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt -m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx -NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 -Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI -ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC -ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ -3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -Entrust Root Certification Authority - G2 -========================================= ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV -BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy -bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug -b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw -HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT -DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx -OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP -/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz -HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU -s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y -TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx -AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 -0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z -iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi -nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ -vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO -e4pIb4tF9g== ------END CERTIFICATE----- - -Entrust Root Certification Authority - EC1 -========================================== ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx -FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn -YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw -FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs -LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg -dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt -IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy -AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef -9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h -vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 -kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -CFCA EV ROOT -============ ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE -CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB -IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw -MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD -DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV -BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD -7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN -uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW -ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 -xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f -py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K -gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol -hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ -tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf -BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q -ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua -4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG -E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX -BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn -aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy -PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX -kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C -ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -OISTE WISeKey Global Root GB CA -=============================== ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG -EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl -ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw -MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD -VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds -b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX -scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP -rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk -9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o -Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg -GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI -hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD -dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 -VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui -HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -SZAFIR ROOT CA2 -=============== ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG -A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV -BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ -BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD -VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q -qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK -DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE -2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ -ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi -ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P -AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC -AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 -O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 -oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul -4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 -+/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -Certum Trusted Network CA 2 -=========================== ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE -BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 -bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y -ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ -TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB -IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 -7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o -CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b -Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p -uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 -GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ -9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB -Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye -hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM -BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI -hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW -Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA -L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo -clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM -pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb -w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo -J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm -ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX -is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 -zAYspsbiDrW5viSP ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions RootCA 2015 -======================================================= ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT -BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 -aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl -YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx -MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg -QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV -BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw -MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv -bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh -iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ -6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd -FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr -i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F -GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 -fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu -iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI -hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ -D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM -d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y -d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn -82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb -davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F -Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt -J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa -JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q -p/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -Hellenic Academic and Research Institutions ECC RootCA 2015 -=========================================================== ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 -aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u -cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj -aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw -MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj -IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD -VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 -Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP -dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK -Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O -BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA -GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn -dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -ISRG Root X1 -============ ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE -BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD -EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG -EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT -DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r -Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 -3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K -b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN -Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ -4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf -1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu -hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH -usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r -OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G -A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY -9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV -0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt -hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw -TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx -e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA -JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD -YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n -JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ -m+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -AC RAIZ FNMT-RCM -================ ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT -AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw -MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD -TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf -qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr -btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL -j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou -08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw -WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT -tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ -47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC -ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa -i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o -dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s -D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ -j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT -Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW -+YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 -Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d -8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm -5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG -rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -Amazon Root CA 1 -================ ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD -VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 -MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv -bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH -FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ -gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t -dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce -VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 -DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM -CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy -8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa -2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 -xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -Amazon Root CA 2 -================ ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD -VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 -MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv -bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC -ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 -kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp -N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 -AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd -fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx -kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS -btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 -Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN -c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ -3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw -DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA -A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE -YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW -xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ -gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW -aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV -Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 -KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi -JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= ------END CERTIFICATE----- - -Amazon Root CA 3 -================ ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG -EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy -NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ -MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB -f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr -Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 -rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc -eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== ------END CERTIFICATE----- - -Amazon Root CA 4 -================ ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG -EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy -NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ -MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN -/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri -83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV -HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA -MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 -AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 -============================================= ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT -D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr -IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g -TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp -ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD -VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt -c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth -bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11 -IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8 -6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc -wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0 -3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9 -WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU -ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ -KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc -lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R -e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j -q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -GDCA TrustAUTH R5 ROOT -====================== ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCQ04xMjAw -BgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8wHQYDVQQD -DBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVow -YjELMAkGA1UEBhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJjDp6L3TQs -AlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBjTnnEt1u9ol2x8kECK62p -OqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+uKU49tm7srsHwJ5uu4/Ts765/94Y9cnrr -pftZTqfrlYwiOXnhLQiPzLyRuEH3FMEjqcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ -9Cy5WmYqsBebnh52nUpmMUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQ -xXABZG12ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloPzgsM -R6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3GkL30SgLdTMEZeS1SZ -D2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeCjGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4 -oR24qoAATILnsn8JuLwwoC8N9VKejveSswoAHQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx -9hoh49pwBiFYFIeFd3mqgnkCAwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlR -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZmDRd9FBUb1Ov9 -H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5COmSdI31R9KrO9b7eGZONn35 -6ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ryL3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd -+PwyvzeG5LuOmCd+uh8W4XAR8gPfJWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQ -HtZa37dG/OaG+svgIHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBD -F8Io2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV09tL7ECQ -8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQXR4EzzffHqhmsYzmIGrv -/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrqT8p+ck0LcIymSLumoRT2+1hEmRSuqguT -aaApJUqlyyvdimYHFngVV3Eb7PVHhPOeMTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -TrustCor RootCert CA-1 -====================== ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIJANqb7HHzA7AZMA0GCSqGSIb3DQEBCwUAMIGkMQswCQYDVQQGEwJQQTEP -MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig -U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0IENBLTEwHhcNMTYwMjA0MTIzMjE2WhcNMjkx -MjMxMTcyMzE2WjCBpDELMAkGA1UEBhMCUEExDzANBgNVBAgMBlBhbmFtYTEUMBIGA1UEBwwLUGFu -YW1hIENpdHkxJDAiBgNVBAoMG1RydXN0Q29yIFN5c3RlbXMgUy4gZGUgUi5MLjEnMCUGA1UECwwe -VHJ1c3RDb3IgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MR8wHQYDVQQDDBZUcnVzdENvciBSb290Q2Vy -dCBDQS0xMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv463leLCJhJrMxnHQFgKq1mq -jQCj/IDHUHuO1CAmujIS2CNUSSUQIpidRtLByZ5OGy4sDjjzGiVoHKZaBeYei0i/mJZ0PmnK6bV4 -pQa81QBeCQryJ3pS/C3Vseq0iWEk8xoT26nPUu0MJLq5nux+AHT6k61sKZKuUbS701e/s/OojZz0 -JEsq1pme9J7+wH5COucLlVPat2gOkEz7cD+PSiyU8ybdY2mplNgQTsVHCJCZGxdNuWxu72CVEY4h -gLW9oHPY0LJ3xEXqWib7ZnZ2+AYfYW0PVcWDtxBWcgYHpfOxGgMFZA6dWorWhnAbJN7+KIor0Gqw -/Hqi3LJ5DotlDwIDAQABo2MwYTAdBgNVHQ4EFgQU7mtJPHo/DeOxCbeKyKsZn3MzUOcwHwYDVR0j -BBgwFoAU7mtJPHo/DeOxCbeKyKsZn3MzUOcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwDQYJKoZIhvcNAQELBQADggEBACUY1JGPE+6PHh0RU9otRCkZoB5rMZ5NDp6tPVxBb5UrJKF5 -mDo4Nvu7Zp5I/5CQ7z3UuJu0h3U/IJvOcs+hVcFNZKIZBqEHMwwLKeXx6quj7LUKdJDHfXLy11yf -ke+Ri7fc7Waiz45mO7yfOgLgJ90WmMCV1Aqk5IGadZQ1nJBfiDcGrVmVCrDRZ9MZyonnMlo2HD6C -qFqTvsbQZJG2z9m2GM/bftJlo6bEjhcxwft+dtvTheNYsnd6djtsL1Ac59v2Z3kf9YKVmgenFK+P -3CghZwnS1k1aHBkcjndcw5QkPTJrS37UeJSDvjdNzl/HHk484IkzlQsPpTLWPFp5LBk= ------END CERTIFICATE----- - -TrustCor RootCert CA-2 -====================== ------BEGIN CERTIFICATE----- -MIIGLzCCBBegAwIBAgIIJaHfyjPLWQIwDQYJKoZIhvcNAQELBQAwgaQxCzAJBgNVBAYTAlBBMQ8w -DQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5MSQwIgYDVQQKDBtUcnVzdENvciBT -eXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29yIENlcnRpZmljYXRlIEF1dGhvcml0 -eTEfMB0GA1UEAwwWVHJ1c3RDb3IgUm9vdENlcnQgQ0EtMjAeFw0xNjAyMDQxMjMyMjNaFw0zNDEy -MzExNzI2MzlaMIGkMQswCQYDVQQGEwJQQTEPMA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5h -bWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3IgU3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5U -cnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxHzAdBgNVBAMMFlRydXN0Q29yIFJvb3RDZXJ0 -IENBLTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnIG7CKqJiJJWQdsg4foDSq8Gb -ZQWU9MEKENUCrO2fk8eHyLAnK0IMPQo+QVqedd2NyuCb7GgypGmSaIwLgQ5WoD4a3SwlFIIvl9Nk -RvRUqdw6VC0xK5mC8tkq1+9xALgxpL56JAfDQiDyitSSBBtlVkxs1Pu2YVpHI7TYabS3OtB0PAx1 -oYxOdqHp2yqlO/rOsP9+aij9JxzIsekp8VduZLTQwRVtDr4uDkbIXvRR/u8OYzo7cbrPb1nKDOOb -XUm4TOJXsZiKQlecdu/vvdFoqNL0Cbt3Nb4lggjEFixEIFapRBF37120Hapeaz6LMvYHL1cEksr1 -/p3C6eizjkxLAjHZ5DxIgif3GIJ2SDpxsROhOdUuxTTCHWKF3wP+TfSvPd9cW436cOGlfifHhi5q -jxLGhF5DUVCcGZt45vz27Ud+ez1m7xMTiF88oWP7+ayHNZ/zgp6kPwqcMWmLmaSISo5uZk3vFsQP -eSghYA2FFn3XVDjxklb9tTNMg9zXEJ9L/cb4Qr26fHMC4P99zVvh1Kxhe1fVSntb1IVYJ12/+Ctg -rKAmrhQhJ8Z3mjOAPF5GP/fDsaOGM8boXg25NSyqRsGFAnWAoOsk+xWq5Gd/bnc/9ASKL3x74xdh -8N0JqSDIvgmk0H5Ew7IwSjiqqewYmgeCK9u4nBit2uBGF6zPXQIDAQABo2MwYTAdBgNVHQ4EFgQU -2f4hQG6UnrybPZx9mCAZ5YwwYrIwHwYDVR0jBBgwFoAU2f4hQG6UnrybPZx9mCAZ5YwwYrIwDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBAJ5Fngw7tu/h -Osh80QA9z+LqBrWyOrsGS2h60COXdKcs8AjYeVrXWoSK2BKaG9l9XE1wxaX5q+WjiYndAfrs3fnp -kpfbsEZC89NiqpX+MWcUaViQCqoL7jcjx1BRtPV+nuN79+TMQjItSQzL/0kMmx40/W5ulop5A7Zv -2wnL/V9lFDfhOPXzYRZY5LVtDQsEGz9QLX+zx3oaFoBg+Iof6Rsqxvm6ARppv9JYx1RXCI/hOWB3 -S6xZhBqI8d3LT3jX5+EzLfzuQfogsL7L9ziUwOHQhQ+77Sxzq+3+knYaZH9bDTMJBzN7Bj8RpFxw -PIXAz+OQqIN3+tvmxYxoZxBnpVIt8MSZj3+/0WvitUfW2dCFmU2Umw9Lje4AWkcdEQOsQRivh7dv -DDqPys/cA8GiCcjl/YBeyGBCARsaU1q7N6a3vLqE6R5sGtRk2tRD/pOLS/IseRYQ1JMLiI+h2IYU -RpFHmygk71dSTlxCnKr3Sewn6EAes6aJInKc9Q0ztFijMDvd1GpUk74aTfOTlPf8hAs/hCBcNANE -xdqtvArBAs8e5ZTZ845b2EzwnexhF7sUMlQMAimTHpKG9n/v55IFDlndmQguLvqcAFLTxWYp5KeX -RKQOKIETNcX2b2TmQcTVL8w0RSXPQQCWPUouwpaYT05KnJe32x+SMsj/D1Fu1uwJ ------END CERTIFICATE----- - -TrustCor ECA-1 -============== ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIJAISCLF8cYtBAMA0GCSqGSIb3DQEBCwUAMIGcMQswCQYDVQQGEwJQQTEP -MA0GA1UECAwGUGFuYW1hMRQwEgYDVQQHDAtQYW5hbWEgQ2l0eTEkMCIGA1UECgwbVHJ1c3RDb3Ig -U3lzdGVtcyBTLiBkZSBSLkwuMScwJQYDVQQLDB5UcnVzdENvciBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkxFzAVBgNVBAMMDlRydXN0Q29yIEVDQS0xMB4XDTE2MDIwNDEyMzIzM1oXDTI5MTIzMTE3Mjgw -N1owgZwxCzAJBgNVBAYTAlBBMQ8wDQYDVQQIDAZQYW5hbWExFDASBgNVBAcMC1BhbmFtYSBDaXR5 -MSQwIgYDVQQKDBtUcnVzdENvciBTeXN0ZW1zIFMuIGRlIFIuTC4xJzAlBgNVBAsMHlRydXN0Q29y -IENlcnRpZmljYXRlIEF1dGhvcml0eTEXMBUGA1UEAwwOVHJ1c3RDb3IgRUNBLTEwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPj+ARtZ+odnbb3w9U73NjKYKtR8aja+3+XzP4Q1HpGjOR -MRegdMTUpwHmspI+ap3tDvl0mEDTPwOABoJA6LHip1GnHYMma6ve+heRK9jGrB6xnhkB1Zem6g23 -xFUfJ3zSCNV2HykVh0A53ThFEXXQmqc04L/NyFIduUd+Dbi7xgz2c1cWWn5DkR9VOsZtRASqnKmc -p0yJF4OuowReUoCLHhIlERnXDH19MURB6tuvsBzvgdAsxZohmz3tQjtQJvLsznFhBmIhVE5/wZ0+ -fyCMgMsq2JdiyIMzkX2woloPV+g7zPIlstR8L+xNxqE6FXrntl019fZISjZFZtS6mFjBAgMBAAGj -YzBhMB0GA1UdDgQWBBREnkj1zG1I1KBLf/5ZJC+Dl5mahjAfBgNVHSMEGDAWgBREnkj1zG1I1KBL -f/5ZJC+Dl5mahjAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsF -AAOCAQEABT41XBVwm8nHc2FvcivUwo/yQ10CzsSUuZQRg2dd4mdsdXa/uwyqNsatR5Nj3B5+1t4u -/ukZMjgDfxT2AHMsWbEhBuH7rBiVDKP/mZb3Kyeb1STMHd3BOuCYRLDE5D53sXOpZCz2HAF8P11F -hcCF5yWPldwX8zyfGm6wyuMdKulMY/okYWLW2n62HGz1Ah3UKt1VkOsqEUc8Ll50soIipX1TH0Xs -J5F95yIW6MBoNtjG8U+ARDL54dHRHareqKucBK+tIA5kmE2la8BIWJZpTdwHjFGTot+fDz2LYLSC -jaoITmJF4PkL0uDgPFveXHEnJcLmA4GLEFPjx1WitJ/X5g== ------END CERTIFICATE----- - -SSL.com Root Certification Authority RSA -======================================== ------BEGIN CERTIFICATE----- -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 -WuuA8ShYIc2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -SSL.com Root Certification Authority ECC -======================================== ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMCVVMxDjAMBgNV -BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xMTAv -BgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEy -MTgxNDAzWhcNNDEwMjEyMTgxNDAzWjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAO -BgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuBBAAiA2IA -BEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI7Z4INcgn64mMU1jrYor+ -8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPgCemB+vNH06NjMGEwHQYDVR0OBBYEFILR -hXMw5zUE044CkvvlpNHEIejNMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTT -jgKS++Wk0cQh6M0wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCW -e+0F+S8Tkdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+gA0z -5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -SSL.com EV Root Certification Authority RSA R2 -============================================== ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNVBAYTAlVTMQ4w -DAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9u -MTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MB4XDTE3MDUzMTE4MTQzN1oXDTQyMDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQI -DAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYD -VQQDDC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvqM0fNTPl9fb69LT3w23jh -hqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssufOePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7w -cXHswxzpY6IXFJ3vG2fThVUCAtZJycxa4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTO -Zw+oz12WGQvE43LrrdF9HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+ -B6KjBSYRaZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcAb9Zh -CBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQGp8hLH94t2S42Oim -9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQVPWKchjgGAGYS5Fl2WlPAApiiECto -RHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMOpgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+Slm -JuwgUHfbSguPvuUCYHBBXtSuUDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48 -+qvWBkofZ6aYMBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa49QaAJadz20Zp -qJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBWs47LCp1Jjr+kxJG7ZhcFUZh1 -++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nx -Y/hoLVUE0fKNsKTPvDxeH3jnpaAgcLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2G -guDKBAdRUNf/ktUM79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDz -OFSz/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXtll9ldDz7 -CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEmKf7GUmG6sXP/wwyc5Wxq -lD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKKQbNmC1r7fSOl8hqw/96bg5Qu0T/fkreR -rwU7ZcegbLHNYhLDkBvjJc40vG93drEQw/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1 -hlMYegouCRw2n5H9gooiS9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX -9hwJ1C07mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -SSL.com EV Root Certification Authority ECC -=========================================== ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMCVVMxDjAMBgNV -BAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9TU0wgQ29ycG9yYXRpb24xNDAy -BgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYw -MjEyMTgxNTIzWhcNNDEwMjEyMTgxNTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMx -EDAOBgNVBAcMB0hvdXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NM -LmNvbSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMAVIbc/R/fALhBYlzccBYy -3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1KthkuWnBaBu2+8KGwytAJKaNjMGEwHQYDVR0O -BBYEFFvKXuXe0oGqzagtZFG22XKbl+ZPMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe -5d7SgarNqC1kUbbZcpuX5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJ -N+vp1RPZytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZgh5Mm -m7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- - -GlobalSign Root CA - R6 -======================= ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMX -R2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkds -b2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9i -YWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs -U2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQss -grRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE -3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbF -vuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM -PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+ -azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05O -WgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguy -CLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP -0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kN -b7gu3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQE -AwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNV -HSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN -nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0 -lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrY -BzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xocBFym -Fe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr -3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB1 -0jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/T -uTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItK -oZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t -JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= ------END CERTIFICATE----- - -OISTE WISeKey Global Root GC CA -=============================== ------BEGIN CERTIFICATE----- -MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQswCQYDVQQGEwJD -SDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEo -MCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRa -Fw00MjA1MDkwOTU4MzNaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQL -ExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4nieUqjFqdr -VCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4Wp2OQ0jnUsYd4XxiWD1Ab -NTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd -BgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7TrYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0E -AwMDaAAwZQIwJsdpW9zV57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtk -AjEA2zQgMgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 ------END CERTIFICATE----- - -GTS Root R1 -=========== ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxUtHDA3sM9CJuRz04TANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG -EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv -b3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG -A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx -9vaMf/vo27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7wCl7r -aKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjwTcLCeoiKu7rPWRnW -r4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0PfyblqAj+lug8aJRT7oM6iCsVlgmy4HqM -LnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaHszVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly -4cpk9+aCEI3oncKKiPo4Zor8Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr -06zqkUspzBmkMiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 -wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70paDPvOmbsB4om -3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrNVjzRlwW5y0vtOUucxD/SVRNu -JLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEM -BQADggIBADiWCu49tJYeX++dnAsznyvgyv3SjgofQXSlfKqE1OXyHuY3UjKcC9FhHb8owbZEKTV1 -d5iyfNm9dKyKaOOpMQkpAWBz40d8U6iQSifvS9efk+eCNs6aaAyC58/UEBZvXw6ZXPYfcX3v73sv -fuo21pdwCxXu11xWajOl40k4DLh9+42FpLFZXvRq4d2h9mREruZRgyFmxhE+885H7pwoHyXa/6xm -ld01D1zvICxi/ZG6qcz8WpyTgYMpl0p8WnK0OdC3d8t5/Wk6kjftbjhlRn7pYL15iJdfOBL07q9b -gsiG1eGZbYwE8na6SfZu6W0eX6DvJ4J2QPim01hcDyxC2kLGe4g0x8HYRZvBPsVhHdljUEn2NIVq -4BjFbkerQUIpm/ZgDdIx02OYI5NaAIFItO/Nis3Jz5nu2Z6qNuFoS3FJFDYoOj0dzpqPJeaAcWEr -tXvM+SUWgeExX6GjfhaknBZqlxi9dnKlC54dNuYvoS++cJEPqOba+MSSQGwlfnuzCdyyF62ARPBo -pY+Udf90WuioAnwMCeKpSwughQtiue+hMZL77/ZRBIls6Kl0obsXs7X9SQ98POyDGCBDTtWTurQ0 -sR8WNh8M5mQ5Fkzc4P4dyKliPUDqysU0ArSuiYgzNdwsE3PYJ/HQcu51OyLemGhmW/HGY0dVHLql -CFF1pkgl ------END CERTIFICATE----- - -GTS Root R2 -=========== ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQbkepxlqz5yDFMJo/aFLybzANBgkqhkiG9w0BAQwFADBHMQswCQYDVQQG -EwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJv -b3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAG -A1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTuk -k3LvCvptnfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY6Dlo -7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAuMC6C/Pq8tBcKSOWI -m8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7kRXuJVfeKH2JShBKzwkCX44ofR5Gm -dFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWgf9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbu -ak7MkogwTZq9TwtImoS1mKPV+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscsz -cTJGr61K8YzodDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW -Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKaG73Vululycsl -aVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCqgc7dGtxRcw1PcOnlthYhGXmy -5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEM -BQADggIBALZp8KZ3/p7uC4Gt4cCpx/k1HUCCq+YEtN/L9x0Pg/B+E02NjO7jMyLDOfxA325BS0JT -vhaI8dI4XsRomRyYUpOM52jtG2pzegVATX9lO9ZY8c6DR2Dj/5epnGB3GFW1fgiTz9D2PGcDFWEJ -+YF59exTpJ/JjwGLc8R3dtyDovUMSRqodt6Sm2T4syzFJ9MHwAiApJiS4wGWAqoC7o87xdFtCjMw -c3i5T1QWvwsHoaRc5svJXISPD+AVdyx+Jn7axEvbpxZ3B7DNdehyQtaVhJ2Gg/LkkM0JR9SLA3Da -WsYDQvTtN6LwG1BUSw7YhN4ZKJmBR64JGz9I0cNv4rBgF/XuIwKl2gBbbZCr7qLpGzvpx0QnRY5r -n/WkhLx3+WuXrD5RRaIRpsyF7gpo8j5QOHokYh4XIDdtak23CZvJ/KRY9bb7nE4Yu5UC56Gtmwfu -Nmsk0jmGwZODUNKBRqhfYlcsu2xkiAhu7xNUX90txGdj08+JN7+dIPT7eoOboB6BAFDC5AwiWVIQ -7UNWhwD4FFKnHYuTjKJNRn8nxnGbJN7k2oaLDX5rIMHAnuFl2GqjpuiFizoHCBy69Y9Vmhh1fuXs -gWbRIXOhNUQLgD1bnF5vKheW0YMjiGZt5obicDIvUiLnyOd/xCxgXS/Dr55FBcOEArf9LAhST4Ld -o/DUhgkC ------END CERTIFICATE----- - -GTS Root R3 -=========== ------BEGIN CERTIFICATE----- -MIICDDCCAZGgAwIBAgIQbkepx2ypcyRAiQ8DVd2NHTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV -UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg -UjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE -ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUU -Rout736GjOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL24Cej -QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTB8Sa6oC2uhYHP -0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEAgFukfCPAlaUs3L6JbyO5o91lAFJekazInXJ0 -glMLfalAvWhgxeG4VDvBNhcl2MG9AjEAnjWSdIUlUfUk7GRSJFClH9voy8l27OyCbvWFGFPouOOa -KaqW04MjyaR7YbPMAuhd ------END CERTIFICATE----- - -GTS Root R4 -=========== ------BEGIN CERTIFICATE----- -MIICCjCCAZGgAwIBAgIQbkepyIuUtui7OyrYorLBmTAKBggqhkjOPQQDAzBHMQswCQYDVQQGEwJV -UzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3Qg -UjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UE -ChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa -6zzuhXyiQHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvRHYqj -QjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSATNbrdP9JNqPV -2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNnADBkAjBqUFJ0CMRw3J5QdCHojXohw0+WbhXRIjVhLfoI -N+4Zba3bssx9BzT1YBkstTTZbyACMANxsbqjYAuG7ZoIapVon+Kz4ZNkfF6Tpt95LY2F45TPI11x -zPKwTdb+mciUqXWi4w== ------END CERTIFICATE----- - -UCA Global G2 Root -================== ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9MQswCQYDVQQG -EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBHbG9iYWwgRzIgUm9vdDAeFw0x -NjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0xCzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlU -cnVzdDEbMBkGA1UEAwwSVUNBIEdsb2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxeYrb3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmT -oni9kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzmVHqUwCoV -8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/RVogvGjqNO7uCEeBHANBS -h6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDcC/Vkw85DvG1xudLeJ1uK6NjGruFZfc8o -LTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIjtm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/ -R+zvWr9LesGtOxdQXGLYD0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBe -KW4bHAyvj5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6DlNaBa -4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6iIis7nCs+dwp4wwc -OxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznPO6Q0ibd5Ei9Hxeepl2n8pndntd97 -8XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFIHEjMz15DD/pQwIX4wVZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo -5sOASD0Ee/ojL3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 -1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl1qnN3e92mI0A -Ds0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oUb3n09tDh05S60FdRvScFDcH9 -yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LVPtateJLbXDzz2K36uGt/xDYotgIVilQsnLAX -c47QN6MUPJiVAAwpBVueSUmxX8fjy88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHo -jhJi6IjMtX9Gl8CbEGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZk -bxqgDMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI+Vg7RE+x -ygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGyYiGqhkCyLmTTX8jjfhFn -RR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bXUB+K+wb1whnw0A== ------END CERTIFICATE----- - -UCA Extended Validation Root -============================ ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQG -EwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9u -IFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMxMDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8G -A1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrs -iWogD4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvSsPGP2KxF -Rv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aopO2z6+I9tTcg1367r3CTu -eUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dksHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR -59mzLC52LqGj3n5qiAno8geK+LLNEOfic0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH -0mK1lTnj8/FtDw5lhIpjVMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KR -el7sFsLzKuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/TuDv -B0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41Gsx2VYVdWf6/wFlth -WG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs1+lvK9JKBZP8nm9rZ/+I8U6laUpS -NwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQDfwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS -3H5aBZ8eNJr34RQwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQEL -BQADggIBADaNl8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR -ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQVBcZEhrxH9cM -aVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5c6sq1WnIeJEmMX3ixzDx/BR4 -dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb -+7lsq+KePRXBOy5nAliRn+/4Qh8st2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOW -F3sGPjLtx7dCvHaj2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwi -GpWOvpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2CxR9GUeOc -GMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmxcmtpzyKEC2IPrNkZAJSi -djzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbMfjKaiJUINlK73nZfdklJrX+9ZSCyycEr -dhh2n1ax ------END CERTIFICATE----- - -Certigna Root CA -================ ------BEGIN CERTIFICATE----- -MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAwWjELMAkGA1UE -BhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAwMiA0ODE0NjMwODEwMDAzNjEZ -MBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0xMzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjda -MFoxCzAJBgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYz -MDgxMDAwMzYxGTAXBgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sOty3tRQgX -stmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9MCiBtnyN6tMbaLOQdLNyz -KNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPuI9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8 -JXrJhFwLrN1CTivngqIkicuQstDuI7pmTLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16 -XdG+RCYyKfHx9WzMfgIhC59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq -4NYKpkDfePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3YzIoej -wpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWTCo/1VTp2lc5ZmIoJ -lXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1kJWumIWmbat10TWuXekG9qxf5kBdI -jzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp/ -/TBt2dzhauH8XwIDAQABo4IBGjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of -1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczovL3d3d3cuY2Vy -dGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilodHRwOi8vY3JsLmNlcnRpZ25h -LmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYraHR0cDovL2NybC5kaGlteW90aXMuY29tL2Nl -cnRpZ25hcm9vdGNhLmNybDANBgkqhkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOIt -OoldaDgvUSILSo3L6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxP -TGRGHVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH60BGM+RFq -7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncBlA2c5uk5jR+mUYyZDDl3 -4bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdio2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd -8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS -6Cvu5zHbugRqh5jnxV/vfaci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaY -tlu3zM63Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayhjWZS -aX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw3kAP+HwV96LOPNde -E4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= ------END CERTIFICATE----- - -emSign Root CA - G1 -=================== ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQGEwJJTjET -MBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRl -ZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBHMTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgx -ODMwMDBaMGcxCzAJBgNVBAYTAklOMRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVk -aHJhIFRlY2hub2xvZ2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQzf2N4aLTN -LnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO8oG0x5ZOrRkVUkr+PHB1 -cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aqd7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHW -DV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhMtTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ -6DqS0hdW5TUaQBw+jSztOd9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrH -hQIDAQABo0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQDAgEG -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31xPaOfG1vR2vjTnGs2 -vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjMwiI/aTvFthUvozXGaCocV685743Q -NcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6dGNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q -+Mri/Tm3R7nrft8EI6/6nAYH6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeih -U80Bv2noWgbyRQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx -iN66zB+Afko= ------END CERTIFICATE----- - -emSign ECC Root CA - G3 -======================= ------BEGIN CERTIFICATE----- -MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQGEwJJTjETMBEG -A1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEg -MB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4 -MTgzMDAwWjBrMQswCQYDVQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11 -ZGhyYSBUZWNobm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g -RzMwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0WXTsuwYc -58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xySfvalY8L1X44uT6EYGQIr -MgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuBzhccLikenEhjQjAOBgNVHQ8BAf8EBAMC -AQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+D -CBeQyh+KTOgNG3qxrdWBCUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7 -jHvrZQnD+JbNR6iC8hZVdyR+EhCVBCyj ------END CERTIFICATE----- - -emSign Root CA - C1 -=================== ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkGA1UEBhMCVVMx -EzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNp -Z24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UE -BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQD -ExNlbVNpZ24gUm9vdCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+up -ufGZBczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZHdPIWoU/ -Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH3DspVpNqs8FqOp099cGX -OFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvHGPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4V -I5b2P/AgNBbeCsbEBEV5f6f9vtKppa+cxSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleooms -lMuoaJuvimUnzYnu3Yy1aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+ -XJGFehiqTbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQAD -ggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87/kOXSTKZEhVb3xEp -/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4kqNPEjE2NuLe/gDEo2APJ62gsIq1 -NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrGYQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9 -wC68AivTxEDkigcxHpvOJpkT+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQ -BmIMMMAVSKeoWXzhriKi4gp6D/piq1JM4fHfyr6DDUI= ------END CERTIFICATE----- - -emSign ECC Root CA - C3 -======================= ------BEGIN CERTIFICATE----- -MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQGEwJVUzETMBEG -A1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMxIDAeBgNVBAMTF2VtU2lnbiBF -Q0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAwMFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UE -BhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQD -ExdlbVNpZ24gRUNDIFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd -6bciMK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4OjavtisIGJAnB9 -SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0OBBYEFPtaSNCAIEDyqOkA -B2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49BAMDA2gA -MGUCMQC02C8Cif22TGK6Q04ThHK1rt0c3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwU -ZOR8loMRnLDRWmFLpg9J0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== ------END CERTIFICATE----- - -Hongkong Post Root CA 3 -======================= ------BEGIN CERTIFICATE----- -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 -dBb9HxEGmpv0 ------END CERTIFICATE----- - -Entrust Root Certification Authority - G4 -========================================= ------BEGIN CERTIFICATE----- -MIIGSzCCBDOgAwIBAgIRANm1Q3+vqTkPAAAAAFVlrVgwDQYJKoZIhvcNAQELBQAwgb4xCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3Qu -bmV0L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1 -dGhvcml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eSAtIEc0MB4XDTE1MDUyNzExMTExNloXDTM3MTIyNzExNDExNlowgb4xCzAJBgNVBAYT -AlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 -L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxNSBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxMjAwBgNVBAMTKUVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsewsQu7i0TD/pZJH4i3D -umSXbcr3DbVZwbPLqGgZ2K+EbTBwXX7zLtJTmeH+H17ZSK9dE43b/2MzTdMAArzE+NEGCJR5WIoV -3imz/f3ET+iq4qA7ec2/a0My3dl0ELn39GjUu9CH1apLiipvKgS1sqbHoHrmSKvS0VnM1n4j5pds -8ELl3FFLFUHtSUrJ3hCX1nbB76W1NhSXNdh4IjVS70O92yfbYVaCNNzLiGAMC1rlLAHGVK/XqsEQ -e9IFWrhAnoanw5CGAlZSCXqc0ieCU0plUmr1POeo8pyvi73TDtTUXm6Hnmo9RR3RXRv06QqsYJn7 -ibT/mCzPfB3pAqoEmh643IhuJbNsZvc8kPNXwbMv9W3y+8qh+CmdRouzavbmZwe+LGcKKh9asj5X -xNMhIWNlUpEbsZmOeX7m640A2Vqq6nPopIICR5b+W45UYaPrL0swsIsjdXJ8ITzI9vF01Bx7owVV -7rtNOzK+mndmnqxpkCIHH2E6lr7lmk/MBTwoWdPBDFSoWWG9yHJM6Nyfh3+9nEg2XpWjDrk4JFX8 -dWbrAuMINClKxuMrLzOg2qOGpRKX/YAr2hRC45K9PvJdXmd0LhyIRyk0X+IyqJwlN4y6mACXi0mW -Hv0liqzc2thddG5msP9E36EYxr5ILzeUePiVSj9/E15dWf10hkNjc0kCAwEAAaNCMEAwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJ84xFYjwznooHFs6FRM5Og6sb9n -MA0GCSqGSIb3DQEBCwUAA4ICAQAS5UKme4sPDORGpbZgQIeMJX6tuGguW8ZAdjwD+MlZ9POrYs4Q -jbRaZIxowLByQzTSGwv2LFPSypBLhmb8qoMi9IsabyZIrHZ3CL/FmFz0Jomee8O5ZDIBf9PD3Vht -7LGrhFV0d4QEJ1JrhkzO3bll/9bGXp+aEJlLdWr+aumXIOTkdnrG0CSqkM0gkLpHZPt/B7NTeLUK -YvJzQ85BK4FqLoUWlFPUa19yIqtRLULVAJyZv967lDtX/Zr1hstWO1uIAeV8KEsD+UmDfLJ/fOPt -jqF/YFOOVZ1QNBIPt5d7bIdKROf1beyAN/BYGW5KaHbwH5Lk6rWS02FREAutp9lfx1/cH6NcjKF+ -m7ee01ZvZl4HliDtC3T7Zk6LERXpgUl+b7DUUH8i119lAg2m9IUe2K4GS0qn0jFmwvjO5QimpAKW -RGhXxNUzzxkvFMSUHHuk2fCfDrGA4tGeEWSpiBE6doLlYsKA2KSD7ZPvfC+QsDJMlhVoSFLUmQjA -JOgc47OlIQ6SwJAfzyBfyjs4x7dtOvPmRLgOMWuIjnDrnBdSqEGULoe256YSxXXfW8AKbnuk5F6G -+TaU33fD6Q3AOfF5u0aOq0NZJ7cguyPpVkAh7DE9ZapD8j3fcEThuk0mEDuYn/PIjhs4ViFqUZPT -kcpG2om3PVODLAgfi49T3f+sHw== ------END CERTIFICATE----- - -Microsoft ECC Root Certificate Authority 2017 -============================================= ------BEGIN CERTIFICATE----- -MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV -UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQgRUND -IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4 -MjMxNjA0WjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw -NAYDVQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQ -BgcqhkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZRogPZnZH6 -thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYbhGBKia/teQ87zvH2RPUB -eMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIy5lycFIM -+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlf -Xu5gKcs68tvWMoQZP3zVL8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaR -eNtUjGUBiudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= ------END CERTIFICATE----- - -Microsoft RSA Root Certificate Authority 2017 -============================================= ------BEGIN CERTIFICATE----- -MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQG -EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNyb3NvZnQg -UlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIw -NzE4MjMwMDIzWjBlMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u -MTYwNAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZNt9GkMml -7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0ZdDMbRnMlfl7rEqUrQ7e -S0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw7 -1VdyvD/IybLeS2v4I2wDwAW9lcfNcztmgGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+ -dkC0zVJhUXAoP8XFWvLJjEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49F -yGcohJUcaDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaGYaRS -MLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6W6IYZVcSn2i51BVr -lMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4KUGsTuqwPN1q3ErWQgR5WrlcihtnJ -0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJ -ClTUFLkqqNfs+avNJVgyeY+QW5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZCLgLNFgVZJ8og -6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OCgMNPOsduET/m4xaRhPtthH80 -dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk -+ONVFT24bcMKpBLBaYVu32TxU5nhSnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex -/2kskZGT4d9Mozd2TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDy -AmH3pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGRxpl/j8nW -ZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiAppGWSZI1b7rCoucL5mxAyE -7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKT -c0QWbej09+CVgI+WXTik9KveCjCHk9hNAHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D -5KbvtwEwXlGjefVwaaZBRA+GsCyRxj3qrg+E ------END CERTIFICATE----- - -e-Szigno Root CA 2017 -===================== ------BEGIN CERTIFICATE----- -MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNVBAYTAkhVMREw -DwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUt -MjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJvb3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZa -Fw00MjA4MjIxMjA3MDZaMHExCzAJBgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UE -CgwNTWljcm9zZWMgTHRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3pp -Z25vIFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtvxie+RJCx -s1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+HWyx7xf58etqjYzBhMA8G -A1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSHERUI0arBeAyxr87GyZDv -vzAEwDAfBgNVHSMEGDAWgBSHERUI0arBeAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEA -tVfd14pVCzbhhkT61NlojbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxO -svxyqltZ+efcMQ== ------END CERTIFICATE----- - -certSIGN Root CA G2 -=================== ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNVBAYTAlJPMRQw -EgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjAeFw0xNzAy -MDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJBgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lH -TiBTQTEcMBoGA1UECxMTY2VydFNJR04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMDFdRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05 -N0IwvlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZuIt4Imfk -abBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhpn+Sc8CnTXPnGFiWeI8Mg -wT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKscpc/I1mbySKEwQdPzH/iV8oScLumZfNp -dWO9lfsbl83kqK/20U6o2YpxJM02PbyWxPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91Qqh -ngLjYl/rNUssuHLoPj1PrCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732 -jcZZroiFDsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fxDTvf -95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgyLcsUDFDYg2WD7rlc -z8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6CeWRgKRM+o/1Pcmqr4tTluCRVLERL -iohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1Ud -DgQWBBSCIS1mxteg4BXrzkwJd8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOB -ywaK8SJJ6ejqkX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC -b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQlqiCA2ClV9+BB -/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0OJD7uNGzcgbJceaBxXntC6Z5 -8hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+cNywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5 -BiKDUyUM/FHE5r7iOZULJK2v0ZXkltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklW -atKcsWMy5WHgUyIOpwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tU -Sxfj03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZkPuXaTH4M -NMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE1LlSVHJ7liXMvGnjSG4N -0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MXQRBdJ3NghVdJIgc= ------END CERTIFICATE----- - -Trustwave Global Certification Authority -======================================== ------BEGIN CERTIFICATE----- -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 -29FpHOTKyeC2nOnOcXHebD8WpHk= ------END CERTIFICATE----- - -Trustwave Global ECC P256 Certification Authority -================================================= ------BEGIN CERTIFICATE----- -MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYDVQQGEwJVUzER -MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI -b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy -dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDI1 -NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABH77bOYj -43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoNFWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqm -P62jQzBBMA8GA1UdEwEB/wQFMAMBAf8wDwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt -0UrrdaVKEJmzsaGLSvcwCgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjz -RM4q3wghDDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 ------END CERTIFICATE----- - -Trustwave Global ECC P384 Certification Authority -================================================= ------BEGIN CERTIFICATE----- -MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYDVQQGEwJVUzER -MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0d2F2ZSBI -b2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRy -dXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBFQ0MgUDM4 -NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGvaDXU1CDFH -Ba5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJj9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr -/TklZvFe/oyujUF5nQlgziip04pt89ZF1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNV -HQ8BAf8EBQMDBwYAMB0GA1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNn -ADBkAjA3AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsCMGcl -CrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVuSw== ------END CERTIFICATE----- - -NAVER Global Root Certification Authority -========================================= ------BEGIN CERTIFICATE----- -MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEMBQAwaTELMAkG -A1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRGT1JNIENvcnAuMTIwMAYDVQQD -DClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4 -NDJaFw0zNzA4MTgyMzU5NTlaMGkxCzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVT -UyBQTEFURk9STSBDb3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVAiQqrDZBb -UGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH38dq6SZeWYp34+hInDEW -+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lEHoSTGEq0n+USZGnQJoViAbbJAh2+g1G7 -XNr4rRVqmfeSVPc0W+m/6imBEtRTkZazkVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2 -aacp+yPOiNgSnABIqKYPszuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4 -Yb8ObtoqvC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHfnZ3z -VHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaGYQ5fG8Ir4ozVu53B -A0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo0es+nPxdGoMuK8u180SdOqcXYZai -cdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3aCJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejy -YhbLgGvtPe31HzClrkvJE+2KAQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNV -HQ4EFgQU0p+I36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB -Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoNqo0hV4/GPnrK -21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatjcu3cvuzHV+YwIHHW1xDBE1UB -jCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bx -hYTeodoS76TiEJd6eN4MUZeoIUCLhr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTg -E34h5prCy8VCZLQelHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTH -D8z7p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8piKCk5XQ -A76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLRLBT/DShycpWbXgnbiUSY -qqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oG -I/hGoiLtk/bdmuYqh7GYVPEi92tF4+KOdh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmg -kpzNNIaRkPpkUZ3+/uul9XXeifdy ------END CERTIFICATE----- - -AC RAIZ FNMT-RCM SERVIDORES SEGUROS -=================================== ------BEGIN CERTIFICATE----- -MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQswCQYDVQQGEwJF -UzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgwFgYDVQRhDA9WQVRFUy1RMjgy -NjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1SQ00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4 -MTIyMDA5MzczM1oXDTQzMTIyMDA5MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQt -UkNNMQ4wDAYDVQQLDAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNB -QyBSQUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuBBAAiA2IA -BPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LHsbI6GA60XYyzZl2hNPk2 -LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oKUm8BA06Oi6NCMEAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqG -SM49BAMDA2kAMGYCMQCuSuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoD -zBOQn5ICMQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJyv+c= ------END CERTIFICATE----- - -GlobalSign Root R46 -=================== ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUAMEYxCzAJBgNV -BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJv -b3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAX -BgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08Es -CVeJOaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQGvGIFAha/ -r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud316HCkD7rRlr+/fKYIje -2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo0q3v84RLHIf8E6M6cqJaESvWJ3En7YEt -bWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSEy132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvj -K8Cd+RTyG/FWaha/LIWFzXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD4 -12lPFzYE+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCNI/on -ccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzsx2sZy/N78CsHpdls -eVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqaByFrgY/bxFn63iLABJzjqls2k+g9 -vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEM -BQADggIBAHx47PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg -JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti2kM3S+LGteWy -gxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIkpnnpHs6i58FZFZ8d4kuaPp92 -CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRFFRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZm -OUdkLG5NrmJ7v2B0GbhWrJKsFjLtrWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qq -JZ4d16GLuc1CLgSkZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwye -qiv5u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP4vkYxboz -nxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6N3ec592kD3ZDZopD8p/7 -DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3vouXsXgxT7PntgMTzlSdriVZzH81Xwj3 -QEUxeCp6 ------END CERTIFICATE----- - -GlobalSign Root E46 -=================== ------BEGIN CERTIFICATE----- -MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYxCzAJBgNVBAYT -AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQDExNHbG9iYWxTaWduIFJvb3Qg -RTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNV -BAoTEEdsb2JhbFNpZ24gbnYtc2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkB -jtjqR+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGddyXqBPCCj -QjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQxCpCPtsad0kRL -gLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZk -vLtoURMMA/cVi4RguYv/Uo7njLwcAjA8+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+ -CAezNIm8BZ/3Hobui3A= ------END CERTIFICATE----- - -GLOBALTRUST 2020 -================ ------BEGIN CERTIFICATE----- -MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkGA1UEBhMCQVQx -IzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVT -VCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYxMDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAh -BgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAy -MDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWi -D59bRatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9ZYybNpyrO -VPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3QWPKzv9pj2gOlTblzLmM -CcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPwyJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCm -fecqQjuCgGOlYx8ZzHyyZqjC0203b+J+BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKA -A1GqtH6qRNdDYfOiaxaJSaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9OR -JitHHmkHr96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj04KlG -DfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9MedKZssCz3AwyIDMvU -clOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIwq7ejMZdnrY8XD2zHc+0klGvIg5rQ -mjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1Ud -IwQYMBaAFNwuH9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA -VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJCXtzoRlgHNQIw -4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd6IwPS3BD0IL/qMy/pJTAvoe9 -iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS -8cE54+X1+NZK3TTN+2/BT+MAi1bikvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2 -HcqtbepBEX4tdJP7wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxS -vTOBTI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6CMUO+1918 -oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn4rnvyOL2NSl6dPrFf4IF -YqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+IaFvowdlxfv1k7/9nR4hYJS8+hge9+6jl -gqispdNpQ80xiEmEU5LAsTkbOYMBMMTyqfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== ------END CERTIFICATE----- - -ANF Secure Server Root CA -========================= ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -Certum EC-384 CA -================ ------BEGIN CERTIFICATE----- -MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQswCQYDVQQGEwJQ -TDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2 -MDcyNDU0WhcNNDMwMzI2MDcyNDU0WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERh -dGEgU3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx -GTAXBgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATEKI6rGFtq -vm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7TmFy8as10CW4kjPMIRBSqn -iBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68KjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFI0GZnQkdjrzife81r1HfS+8EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNo -ADBlAjADVS2m5hjEfO/JUG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0 -QoSZ/6vnnvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= ------END CERTIFICATE----- - -Certum Trusted Root CA -====================== ------BEGIN CERTIFICATE----- -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 ------END CERTIFICATE----- - -TunTrust Root CA -================ ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQELBQAwYTELMAkG -A1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUgQ2VydGlmaWNhdGlvbiBFbGVj -dHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJvb3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQw -NDI2MDg1NzU2WjBhMQswCQYDVQQGEwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBD -ZXJ0aWZpY2F0aW9uIEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIw -DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZn56eY+hz -2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd2JQDoOw05TDENX37Jk0b -bjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgFVwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7 -NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZGoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAd -gjH8KcwAWJeRTIAAHDOFli/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViW -VSHbhlnUr8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2eY8f -Tpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIbMlEsPvLfe/ZdeikZ -juXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISgjwBUFfyRbVinljvrS5YnzWuioYas -DXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwS -VXAkPcvCFDVDXSdOvsC9qnyW5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI -04Y+oXNZtPdEITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 -90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+zxiD2BkewhpMl -0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYuQEkHDVneixCwSQXi/5E/S7fd -Ao74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRY -YdZ2vyJ/0Adqp2RT8JeNnYA/u8EH22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJp -adbGNjHh/PqAulxPxOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65x -xBzndFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5Xc0yGYuP -jCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7bnV2UqL1g52KAdoGDDIzM -MEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQCvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9z -ZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZHu/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3r -AZ3r2OvEhJn7wAzMMujjd9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= ------END CERTIFICATE----- - -HARICA TLS RSA Root CA 2021 -=========================== ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBsMQswCQYDVQQG -EwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u -cyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0EgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUz -OFoXDTQ1MDIxMzEwNTUzN1owbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRl -bWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNB -IFJvb3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569lmwVnlskN -JLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE4VGC/6zStGndLuwRo0Xu -a2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uva9of08WRiFukiZLRgeaMOVig1mlDqa2Y -Ulhu2wr7a89o+uOkXjpFc5gH6l8Cct4MpbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K -5FrZx40d/JiZ+yykgmvwKh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEv -dmn8kN3bLW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcYAuUR -0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqBAGMUuTNe3QvboEUH -GjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYqE613TBoYm5EPWNgGVMWX+Ko/IIqm -haZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHrW2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQ -CPxrvrNQKlr9qEgYRtaQQJKQCoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAUX15QvWiWkKQU -EapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3f5Z2EMVGpdAgS1D0NTsY9FVq -QRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxajaH6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxD -QpSbIPDRzbLrLFPCU3hKTwSUQZqPJzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcR -j88YxeMn/ibvBZ3PzzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5 -vZStjBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0/L5H9MG0 -qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pTBGIBnfHAT+7hOtSLIBD6 -Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79aPib8qXPMThcFarmlwDB31qlpzmq6YR/ -PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YWxw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnn -kf3/W9b3raYvAwtt41dU63ZTGI0RmLo= ------END CERTIFICATE----- - -HARICA TLS ECC Root CA 2021 -=========================== ------BEGIN CERTIFICATE----- -MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQswCQYDVQQGEwJH -UjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBD -QTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9vdCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoX -DTQ1MDIxMzExMDEwOVowbDELMAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWlj -IGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJv -b3QgQ0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7KKrxcm1l -AEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9YSTHMmE5gEYd103KUkE+b -ECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW -0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAi -rcJRQO9gcS3ujwLEXQNwSaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/Qw -CZ61IygNnxS2PFOiTAZpffpskcYqSUXm7LcT4Tps ------END CERTIFICATE----- diff --git a/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/README.md b/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/README.md deleted file mode 100644 index 9e9ca12..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/README.md +++ /dev/null @@ -1,164 +0,0 @@ -# PHP 7.1 enums - -[![Build Status](https://travis-ci.org/DASPRiD/Enum.svg?branch=master)](https://travis-ci.org/DASPRiD/Enum) -[![Coverage Status](https://coveralls.io/repos/github/DASPRiD/Enum/badge.svg?branch=master)](https://coveralls.io/github/DASPRiD/Enum?branch=master) -[![Latest Stable Version](https://poser.pugx.org/dasprid/enum/v/stable)](https://packagist.org/packages/dasprid/enum) -[![Total Downloads](https://poser.pugx.org/dasprid/enum/downloads)](https://packagist.org/packages/dasprid/enum) -[![License](https://poser.pugx.org/dasprid/enum/license)](https://packagist.org/packages/dasprid/enum) - -It is a well known fact that PHP is missing a basic enum type, ignoring the rather incomplete `SplEnum` implementation -which is only available as a PECL extension. There are also quite a few other userland enum implementations around, -but all of them have one or another compromise. This library tries to close that gap as far as PHP allows it to. - -## Usage - -### Basics - -At its core, there is the `DASPRiD\Enum\AbstractEnum` class, which by default will work with constants like any other -enum implementation you might know. The first clear difference is that you should define all the constants as protected -(so nobody outside your class can read them but the `AbstractEnum` can still do so). The other even mightier difference -is that, for simple enums, the value of the constant doesn't matter at all. Let's have a look at a simple example: - -```php -use DASPRiD\Enum\AbstractEnum; - -/** - * @method static self MONDAY() - * @method static self TUESDAY() - * @method static self WEDNESDAY() - * @method static self THURSDAY() - * @method static self FRIDAY() - * @method static self SATURDAY() - * @method static self SUNDAY() - */ -final class WeekDay extends AbstractEnum -{ - protected const MONDAY = null; - protected const TUESDAY = null; - protected const WEDNESDAY = null; - protected const THURSDAY = null; - protected const FRIDAY = null; - protected const SATURDAY = null; - protected const SUNDAY = null; -} -``` - -If you need to provide constants for either internal use or public use, you can mark them as either private or public, -in which case they will be ignored by the enum, which only considers protected constants as valid values. As you can -see, we specifically defined the generated magic methods in a class level doc block, so anyone using this class will -automatically have proper auto-completion in their IDE. Now since you have defined the enum, you can simply use it like -that: - -```php -function tellItLikeItIs(WeekDay $weekDay) -{ - switch ($weekDay) { - case WeekDay::MONDAY(): - echo 'Mondays are bad.'; - break; - - case WeekDay::FRIDAY(): - echo 'Fridays are better.'; - break; - - case WeekDay::SATURDAY(): - case WeekDay::SUNDAY(): - echo 'Weekends are best.'; - break; - - default: - echo 'Midweek days are so-so.'; - } -} - -tellItLikeItIs(WeekDay::MONDAY()); -tellItLikeItIs(WeekDay::WEDNESDAY()); -tellItLikeItIs(WeekDay::FRIDAY()); -tellItLikeItIs(WeekDay::SATURDAY()); -tellItLikeItIs(WeekDay::SUNDAY()); -``` - -### More complex example - -Of course, all enums are singletons, which are not cloneable or serializable. Thus you can be sure that there is always -just one instance of the same type. Of course, the values of constants are not completely useless, let's have a look at -a more complex example: - -```php -use DASPRiD\Enum\AbstractEnum; - -/** - * @method static self MERCURY() - * @method static self VENUS() - * @method static self EARTH() - * @method static self MARS() - * @method static self JUPITER() - * @method static self SATURN() - * @method static self URANUS() - * @method static self NEPTUNE() - */ -final class Planet extends AbstractEnum -{ - protected const MERCURY = [3.303e+23, 2.4397e6]; - protected const VENUS = [4.869e+24, 6.0518e6]; - protected const EARTH = [5.976e+24, 6.37814e6]; - protected const MARS = [6.421e+23, 3.3972e6]; - protected const JUPITER = [1.9e+27, 7.1492e7]; - protected const SATURN = [5.688e+26, 6.0268e7]; - protected const URANUS = [8.686e+25, 2.5559e7]; - protected const NEPTUNE = [1.024e+26, 2.4746e7]; - - /** - * Universal gravitational constant. - * - * @var float - */ - private const G = 6.67300E-11; - - /** - * Mass in kilograms. - * - * @var float - */ - private $mass; - - /** - * Radius in meters. - * - * @var float - */ - private $radius; - - protected function __construct(float $mass, float $radius) - { - $this->mass = $mass; - $this->radius = $radius; - } - - public function mass() : float - { - return $this->mass; - } - - public function radius() : float - { - return $this->radius; - } - - public function surfaceGravity() : float - { - return self::G * $this->mass / ($this->radius * $this->radius); - } - - public function surfaceWeight(float $otherMass) : float - { - return $otherMass * $this->surfaceGravity(); - } -} - -$myMass = 80; - -foreach (Planet::values() as $planet) { - printf("Your weight on %s is %f\n", $planet, $planet->surfaceWeight($myMass)); -} -``` diff --git a/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/composer.json deleted file mode 100644 index b3d745a..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/composer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "dasprid/enum", - "description": "PHP 7.1 enum implementation", - "license": "BSD-2-Clause", - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "keywords": [ - "enum", - "map" - ], - "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "autoload": { - "psr-4": { - "DASPRiD\\Enum\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "DASPRiD\\EnumTest\\": "test/" - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/ExceptionInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/ExceptionInterface.php deleted file mode 100644 index 16a6005..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/dasprid/enum/src/Exception/ExceptionInterface.php +++ /dev/null @@ -1,10 +0,0 @@ - - * class ResponseFactory implements StatusCodeInterface - * { - * public function createResponse($code = self::STATUS_OK) - * { - * } - * } - * - */ -interface StatusCodeInterface -{ - // Informational 1xx - const STATUS_CONTINUE = 100; - const STATUS_SWITCHING_PROTOCOLS = 101; - const STATUS_PROCESSING = 102; - const STATUS_EARLY_HINTS = 103; - // Successful 2xx - const STATUS_OK = 200; - const STATUS_CREATED = 201; - const STATUS_ACCEPTED = 202; - const STATUS_NON_AUTHORITATIVE_INFORMATION = 203; - const STATUS_NO_CONTENT = 204; - const STATUS_RESET_CONTENT = 205; - const STATUS_PARTIAL_CONTENT = 206; - const STATUS_MULTI_STATUS = 207; - const STATUS_ALREADY_REPORTED = 208; - const STATUS_IM_USED = 226; - // Redirection 3xx - const STATUS_MULTIPLE_CHOICES = 300; - const STATUS_MOVED_PERMANENTLY = 301; - const STATUS_FOUND = 302; - const STATUS_SEE_OTHER = 303; - const STATUS_NOT_MODIFIED = 304; - const STATUS_USE_PROXY = 305; - const STATUS_RESERVED = 306; - const STATUS_TEMPORARY_REDIRECT = 307; - const STATUS_PERMANENT_REDIRECT = 308; - // Client Errors 4xx - const STATUS_BAD_REQUEST = 400; - const STATUS_UNAUTHORIZED = 401; - const STATUS_PAYMENT_REQUIRED = 402; - const STATUS_FORBIDDEN = 403; - const STATUS_NOT_FOUND = 404; - const STATUS_METHOD_NOT_ALLOWED = 405; - const STATUS_NOT_ACCEPTABLE = 406; - const STATUS_PROXY_AUTHENTICATION_REQUIRED = 407; - const STATUS_REQUEST_TIMEOUT = 408; - const STATUS_CONFLICT = 409; - const STATUS_GONE = 410; - const STATUS_LENGTH_REQUIRED = 411; - const STATUS_PRECONDITION_FAILED = 412; - const STATUS_PAYLOAD_TOO_LARGE = 413; - const STATUS_URI_TOO_LONG = 414; - const STATUS_UNSUPPORTED_MEDIA_TYPE = 415; - const STATUS_RANGE_NOT_SATISFIABLE = 416; - const STATUS_EXPECTATION_FAILED = 417; - const STATUS_IM_A_TEAPOT = 418; - const STATUS_MISDIRECTED_REQUEST = 421; - const STATUS_UNPROCESSABLE_ENTITY = 422; - const STATUS_LOCKED = 423; - const STATUS_FAILED_DEPENDENCY = 424; - const STATUS_TOO_EARLY = 425; - const STATUS_UPGRADE_REQUIRED = 426; - const STATUS_PRECONDITION_REQUIRED = 428; - const STATUS_TOO_MANY_REQUESTS = 429; - const STATUS_REQUEST_HEADER_FIELDS_TOO_LARGE = 431; - const STATUS_UNAVAILABLE_FOR_LEGAL_REASONS = 451; - // Server Errors 5xx - const STATUS_INTERNAL_SERVER_ERROR = 500; - const STATUS_NOT_IMPLEMENTED = 501; - const STATUS_BAD_GATEWAY = 502; - const STATUS_SERVICE_UNAVAILABLE = 503; - const STATUS_GATEWAY_TIMEOUT = 504; - const STATUS_VERSION_NOT_SUPPORTED = 505; - const STATUS_VARIANT_ALSO_NEGOTIATES = 506; - const STATUS_INSUFFICIENT_STORAGE = 507; - const STATUS_LOOP_DETECTED = 508; - const STATUS_NOT_EXTENDED = 510; - const STATUS_NETWORK_AUTHENTICATION_REQUIRED = 511; -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/composer.json deleted file mode 100644 index ab6b4f1..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/composer.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "name": "google/recaptcha", - "description": "Client library for reCAPTCHA, a free service that protects websites from spam and abuse.", - "type": "library", - "keywords": ["recaptcha", "captcha", "spam", "abuse"], - "homepage": "https://www.google.com/recaptcha/", - "license": "BSD-3-Clause", - "support": { - "forum": "https://groups.google.com/forum/#!forum/recaptcha", - "source": "https://github.com/google/recaptcha" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.36|^5.7.27|^6.59|^7.5.11", - "friendsofphp/php-cs-fixer": "^2.2.20|^2.15", - "php-coveralls/php-coveralls": "^2.1" - }, - "autoload": { - "psr-4": { - "ReCaptcha\\": "src/ReCaptcha" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, - "scripts": { - "lint": "vendor/bin/php-cs-fixer -vvv fix --using-cache=no --dry-run .", - "lint-fix": "vendor/bin/php-cs-fixer -vvv fix --using-cache=no .", - "test": "vendor/bin/phpunit --colors=always", - "serve-examples": "@php -S localhost:8080 -t examples" - }, - "config": { - "process-timeout": 0 - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php b/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php deleted file mode 100644 index eb99842..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Curl.php +++ /dev/null @@ -1,82 +0,0 @@ -curl = (is_null($curl)) ? new Curl() : $curl; - $this->siteVerifyUrl = (is_null($siteVerifyUrl)) ? ReCaptcha::SITE_VERIFY_URL : $siteVerifyUrl; - } - - /** - * Submit the cURL request with the specified parameters. - * - * @param RequestParameters $params Request parameters - * @return string Body of the reCAPTCHA response - */ - public function submit(RequestParameters $params) - { - $handle = $this->curl->init($this->siteVerifyUrl); - - $options = array( - CURLOPT_POST => true, - CURLOPT_POSTFIELDS => $params->toQueryString(), - CURLOPT_HTTPHEADER => array( - 'Content-Type: application/x-www-form-urlencoded' - ), - CURLINFO_HEADER_OUT => false, - CURLOPT_HEADER => false, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_SSL_VERIFYPEER => true - ); - $this->curl->setoptArray($handle, $options); - - $response = $this->curl->exec($handle); - $this->curl->close($handle); - - if ($response !== false) { - return $response; - } - - return '{"success": false, "error-codes": ["'.ReCaptcha::E_CONNECTION_FAILED.'"]}'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php b/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php deleted file mode 100644 index a4ff716..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/google/recaptcha/src/ReCaptcha/RequestMethod/Post.php +++ /dev/null @@ -1,88 +0,0 @@ -siteVerifyUrl = (is_null($siteVerifyUrl)) ? ReCaptcha::SITE_VERIFY_URL : $siteVerifyUrl; - } - - /** - * Submit the POST request with the specified parameters. - * - * @param RequestParameters $params Request parameters - * @return string Body of the reCAPTCHA response - */ - public function submit(RequestParameters $params) - { - $options = array( - 'http' => array( - 'header' => "Content-type: application/x-www-form-urlencoded\r\n", - 'method' => 'POST', - 'content' => $params->toQueryString(), - // Force the peer to validate (not needed in 5.6.0+, but still works) - 'verify_peer' => true, - ), - ); - $context = stream_context_create($options); - $response = file_get_contents($this->siteVerifyUrl, false, $context); - - if ($response !== false) { - return $response; - } - - return '{"success": false, "error-codes": ["'.ReCaptcha::E_CONNECTION_FAILED.'"]}'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/LICENSE b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/LICENSE deleted file mode 100644 index 478e764..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/LICENSE +++ /dev/null @@ -1,31 +0,0 @@ -Copyright (c) 2013 by Nikita Popov. - -Some rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/BadRouteException.php b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/BadRouteException.php deleted file mode 100644 index 62262ec..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/BadRouteException.php +++ /dev/null @@ -1,7 +0,0 @@ - 'value', ...]] - * - * @param string $httpMethod - * @param string $uri - * - * @return array - */ - public function dispatch($httpMethod, $uri); -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/Route.php b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/Route.php deleted file mode 100644 index e1bf7dd..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/Route.php +++ /dev/null @@ -1,47 +0,0 @@ -httpMethod = $httpMethod; - $this->handler = $handler; - $this->regex = $regex; - $this->variables = $variables; - } - - /** - * Tests whether this route matches the given string. - * - * @param string $str - * - * @return bool - */ - public function matches($str) - { - $regex = '~^' . $this->regex . '$~'; - return (bool) preg_match($regex, $str); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteCollector.php b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteCollector.php deleted file mode 100644 index c1c1762..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteCollector.php +++ /dev/null @@ -1,152 +0,0 @@ -routeParser = $routeParser; - $this->dataGenerator = $dataGenerator; - $this->currentGroupPrefix = ''; - } - - /** - * Adds a route to the collection. - * - * The syntax used in the $route string depends on the used route parser. - * - * @param string|string[] $httpMethod - * @param string $route - * @param mixed $handler - */ - public function addRoute($httpMethod, $route, $handler) - { - $route = $this->currentGroupPrefix . $route; - $routeDatas = $this->routeParser->parse($route); - foreach ((array) $httpMethod as $method) { - foreach ($routeDatas as $routeData) { - $this->dataGenerator->addRoute($method, $routeData, $handler); - } - } - } - - /** - * Create a route group with a common prefix. - * - * All routes created in the passed callback will have the given group prefix prepended. - * - * @param string $prefix - * @param callable $callback - */ - public function addGroup($prefix, callable $callback) - { - $previousGroupPrefix = $this->currentGroupPrefix; - $this->currentGroupPrefix = $previousGroupPrefix . $prefix; - $callback($this); - $this->currentGroupPrefix = $previousGroupPrefix; - } - - /** - * Adds a GET route to the collection - * - * This is simply an alias of $this->addRoute('GET', $route, $handler) - * - * @param string $route - * @param mixed $handler - */ - public function get($route, $handler) - { - $this->addRoute('GET', $route, $handler); - } - - /** - * Adds a POST route to the collection - * - * This is simply an alias of $this->addRoute('POST', $route, $handler) - * - * @param string $route - * @param mixed $handler - */ - public function post($route, $handler) - { - $this->addRoute('POST', $route, $handler); - } - - /** - * Adds a PUT route to the collection - * - * This is simply an alias of $this->addRoute('PUT', $route, $handler) - * - * @param string $route - * @param mixed $handler - */ - public function put($route, $handler) - { - $this->addRoute('PUT', $route, $handler); - } - - /** - * Adds a DELETE route to the collection - * - * This is simply an alias of $this->addRoute('DELETE', $route, $handler) - * - * @param string $route - * @param mixed $handler - */ - public function delete($route, $handler) - { - $this->addRoute('DELETE', $route, $handler); - } - - /** - * Adds a PATCH route to the collection - * - * This is simply an alias of $this->addRoute('PATCH', $route, $handler) - * - * @param string $route - * @param mixed $handler - */ - public function patch($route, $handler) - { - $this->addRoute('PATCH', $route, $handler); - } - - /** - * Adds a HEAD route to the collection - * - * This is simply an alias of $this->addRoute('HEAD', $route, $handler) - * - * @param string $route - * @param mixed $handler - */ - public function head($route, $handler) - { - $this->addRoute('HEAD', $route, $handler); - } - - /** - * Returns the collected route data, as provided by the data generator. - * - * @return array - */ - public function getData() - { - return $this->dataGenerator->getData(); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteParser/Std.php b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteParser/Std.php deleted file mode 100644 index 4fbdee1..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/RouteParser/Std.php +++ /dev/null @@ -1,87 +0,0 @@ - $segment) { - if ($segment === '' && $n !== 0) { - throw new BadRouteException('Empty optional part'); - } - - $currentRoute .= $segment; - $routeDatas[] = $this->parsePlaceholders($currentRoute); - } - return $routeDatas; - } - - /** - * Parses a route string that does not contain optional segments. - * - * @param string - * @return mixed[] - */ - private function parsePlaceholders($route) - { - if (!preg_match_all( - '~' . self::VARIABLE_REGEX . '~x', $route, $matches, - PREG_OFFSET_CAPTURE | PREG_SET_ORDER - )) { - return [$route]; - } - - $offset = 0; - $routeData = []; - foreach ($matches as $set) { - if ($set[0][1] > $offset) { - $routeData[] = substr($route, $offset, $set[0][1] - $offset); - } - $routeData[] = [ - $set[1][0], - isset($set[2]) ? trim($set[2][0]) : self::DEFAULT_DISPATCH_REGEX - ]; - $offset = $set[0][1] + strlen($set[0][0]); - } - - if ($offset !== strlen($route)) { - $routeData[] = substr($route, $offset); - } - - return $routeData; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/functions.php b/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/functions.php deleted file mode 100644 index 876a5d9..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/nikic/fast-route/src/functions.php +++ /dev/null @@ -1,74 +0,0 @@ - 'FastRoute\\RouteParser\\Std', - 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', - 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', - 'routeCollector' => 'FastRoute\\RouteCollector', - ]; - - /** @var RouteCollector $routeCollector */ - $routeCollector = new $options['routeCollector']( - new $options['routeParser'], new $options['dataGenerator'] - ); - $routeDefinitionCallback($routeCollector); - - return new $options['dispatcher']($routeCollector->getData()); - } - - /** - * @param callable $routeDefinitionCallback - * @param array $options - * - * @return Dispatcher - */ - function cachedDispatcher(callable $routeDefinitionCallback, array $options = []) - { - $options += [ - 'routeParser' => 'FastRoute\\RouteParser\\Std', - 'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased', - 'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased', - 'routeCollector' => 'FastRoute\\RouteCollector', - 'cacheDisabled' => false, - ]; - - if (!isset($options['cacheFile'])) { - throw new \LogicException('Must specify "cacheFile" option'); - } - - if (!$options['cacheDisabled'] && file_exists($options['cacheFile'])) { - $dispatchData = require $options['cacheFile']; - if (!is_array($dispatchData)) { - throw new \RuntimeException('Invalid cache file "' . $options['cacheFile'] . '"'); - } - return new $options['dispatcher']($dispatchData); - } - - $routeCollector = new $options['routeCollector']( - new $options['routeParser'], new $options['dataGenerator'] - ); - $routeDefinitionCallback($routeCollector); - - /** @var RouteCollector $routeCollector */ - $dispatchData = $routeCollector->getData(); - if (!$options['cacheDisabled']) { - file_put_contents( - $options['cacheFile'], - ' 0x2d && $src < 0x30) ret += $src - 0x2e + 1; // -45 - $ret += (((0x2d - $src) & ($src - 0x30)) >> 8) & ($src - 45); - - // if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 2 + 1; // -62 - $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 62); - - // if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 28 + 1; // -68 - $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 68); - - // if ($src > 0x2f && $src < 0x3a) ret += $src - 0x30 + 54 + 1; // 7 - $ret += (((0x2f - $src) & ($src - 0x3a)) >> 8) & ($src + 7); - - return $ret; - } - - /** - * Uses bitwise operators instead of table-lookups to turn 8-bit integers - * into 6-bit integers. - * - * @param int $src - * @return string - */ - protected static function encode6Bits(int $src): string - { - $src += 0x2e; - - // if ($src > 0x2f) $src += 0x41 - 0x30; // 17 - $src += ((0x2f - $src) >> 8) & 17; - - // if ($src > 0x5a) $src += 0x61 - 0x5b; // 6 - $src += ((0x5a - $src) >> 8) & 6; - - // if ($src > 0x7a) $src += 0x30 - 0x7b; // -75 - $src -= ((0x7a - $src) >> 8) & 75; - - return \pack('C', $src); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php deleted file mode 100644 index dd1459e..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Base64DotSlashOrdered.php +++ /dev/null @@ -1,82 +0,0 @@ - 0x2d && $src < 0x3a) ret += $src - 0x2e + 1; // -45 - $ret += (((0x2d - $src) & ($src - 0x3a)) >> 8) & ($src - 45); - - // if ($src > 0x40 && $src < 0x5b) ret += $src - 0x41 + 12 + 1; // -52 - $ret += (((0x40 - $src) & ($src - 0x5b)) >> 8) & ($src - 52); - - // if ($src > 0x60 && $src < 0x7b) ret += $src - 0x61 + 38 + 1; // -58 - $ret += (((0x60 - $src) & ($src - 0x7b)) >> 8) & ($src - 58); - - return $ret; - } - - /** - * Uses bitwise operators instead of table-lookups to turn 8-bit integers - * into 6-bit integers. - * - * @param int $src - * @return string - */ - protected static function encode6Bits(int $src): string - { - $src += 0x2e; - - // if ($src > 0x39) $src += 0x41 - 0x3a; // 7 - $src += ((0x39 - $src) >> 8) & 7; - - // if ($src > 0x5a) $src += 0x61 - 0x5b; // 6 - $src += ((0x5a - $src) >> 8) & 6; - - return \pack('C', $src); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Binary.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Binary.php deleted file mode 100644 index add0522..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/constant_time_encoding/src/Binary.php +++ /dev/null @@ -1,87 +0,0 @@ - -Copyright (c) 2013-2019, Frank Denis - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted, provided that the above -copyright notice and this permission notice appear in all copies. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/appveyor.yml b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/appveyor.yml deleted file mode 100644 index 9621e9a..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/appveyor.yml +++ /dev/null @@ -1,27 +0,0 @@ -build: false -shallow_clone: false -platform: - - x86 - - x64 -clone_folder: C:\projects\sodium_compat -image: Visual Studio 2017 - -install: - - cinst -y OpenSSL.Light - - SET PATH=C:\Program Files\OpenSSL;%PATH% - - sc config wuauserv start= auto - - net start wuauserv - - cinst -y php --version 5.6.30 - - cd c:\tools\php56 - - copy php.ini-production php.ini - - echo date.timezone="UTC" >> php.ini - - echo extension_dir=ext >> php.ini - - echo extension=php_openssl.dll >> php.ini - - cd C:\projects\sodium_compat - - SET PATH=C:\tools\php56;%PATH% - - php.exe -r "readfile('http://getcomposer.org/installer');" | php.exe - - php.exe composer.phar install --prefer-source --no-interaction - -test_script: - - cd C:\projects\sodium_compat - - vendor\bin\phpunit.bat tests/Windows32Test.php diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/autoload-php7.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/autoload-php7.php deleted file mode 100644 index 4824860..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/autoload-php7.php +++ /dev/null @@ -1,31 +0,0 @@ -=1" - }, - "require-dev": { - "phpunit/phpunit": "^3|^4|^5|^6|^7|^8|^9" - }, - "scripts": { - "test": "phpunit" - }, - "suggest": { - "ext-libsodium": "PHP < 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security.", - "ext-sodium": "PHP >= 7.0: Better performance, password hashing (Argon2i), secure memory management (memzero), and better security." - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/constants.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/constants.php deleted file mode 100644 index b6a120e..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/constants.php +++ /dev/null @@ -1,52 +0,0 @@ -getMessage() === 'Argument 2 must be CRYPTO_BOX_KEYPAIRBYTES long.') { - throw $ex; - } - return false; - } - } -} -if (!is_callable('sodium_crypto_box_secretkey')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_box_secretkey() - * @param string $keypair - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_box_secretkey($keypair) - { - return ParagonIE_Sodium_Compat::crypto_box_secretkey($keypair); - } -} -if (!is_callable('sodium_crypto_box_seed_keypair')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_box_seed_keypair() - * @param string $seed - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_box_seed_keypair($seed) - { - return ParagonIE_Sodium_Compat::crypto_box_seed_keypair($seed); - } -} -if (!is_callable('sodium_crypto_generichash')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_generichash() - * @param string $message - * @param string|null $key - * @param int $outLen - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_generichash($message, $key = null, $outLen = 32) - { - return ParagonIE_Sodium_Compat::crypto_generichash($message, $key, $outLen); - } -} -if (!is_callable('sodium_crypto_generichash_final')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_generichash_final() - * @param string|null $ctx - * @param int $outputLength - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_generichash_final(&$ctx, $outputLength = 32) - { - return ParagonIE_Sodium_Compat::crypto_generichash_final($ctx, $outputLength); - } -} -if (!is_callable('sodium_crypto_generichash_init')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_generichash_init() - * @param string|null $key - * @param int $outLen - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_generichash_init($key = null, $outLen = 32) - { - return ParagonIE_Sodium_Compat::crypto_generichash_init($key, $outLen); - } -} -if (!is_callable('sodium_crypto_generichash_keygen')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_generichash_keygen() - * @return string - * @throws Exception - */ - function sodium_crypto_generichash_keygen() - { - return ParagonIE_Sodium_Compat::crypto_generichash_keygen(); - } -} -if (!is_callable('sodium_crypto_generichash_update')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_generichash_update() - * @param string|null $ctx - * @param string $message - * @return void - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_generichash_update(&$ctx, $message = '') - { - ParagonIE_Sodium_Compat::crypto_generichash_update($ctx, $message); - } -} -if (!is_callable('sodium_crypto_kdf_keygen')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_kdf_keygen() - * @return string - * @throws Exception - */ - function sodium_crypto_kdf_keygen() - { - return ParagonIE_Sodium_Compat::crypto_kdf_keygen(); - } -} -if (!is_callable('sodium_crypto_kdf_derive_from_key')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key() - * @param int $subkey_len - * @param int $subkey_id - * @param string $context - * @param string $key - * @return string - * @throws Exception - */ - function sodium_crypto_kdf_derive_from_key($subkey_len, $subkey_id, $context, $key) - { - return ParagonIE_Sodium_Compat::crypto_kdf_derive_from_key( - $subkey_len, - $subkey_id, - $context, - $key - ); - } -} -if (!is_callable('sodium_crypto_kx')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_kx() - * @param string $my_secret - * @param string $their_public - * @param string $client_public - * @param string $server_public - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_kx($my_secret, $their_public, $client_public, $server_public) - { - return ParagonIE_Sodium_Compat::crypto_kx( - $my_secret, - $their_public, - $client_public, - $server_public - ); - } -} -if (!is_callable('sodium_crypto_kx_seed_keypair')) { - /** - * @param string $seed - * @return string - * @throws Exception - */ - function sodium_crypto_kx_seed_keypair($seed) - { - return ParagonIE_Sodium_Compat::crypto_kx_seed_keypair($seed); - } -} -if (!is_callable('sodium_crypto_kx_keypair')) { - /** - * @return string - * @throws Exception - */ - function sodium_crypto_kx_keypair() - { - return ParagonIE_Sodium_Compat::crypto_kx_keypair(); - } -} -if (!is_callable('sodium_crypto_kx_client_session_keys')) { - /** - * @param string $keypair - * @param string $serverPublicKey - * @return array{0: string, 1: string} - * @throws SodiumException - */ - function sodium_crypto_kx_client_session_keys($keypair, $serverPublicKey) - { - return ParagonIE_Sodium_Compat::crypto_kx_client_session_keys($keypair, $serverPublicKey); - } -} -if (!is_callable('sodium_crypto_kx_server_session_keys')) { - /** - * @param string $keypair - * @param string $clientPublicKey - * @return array{0: string, 1: string} - * @throws SodiumException - */ - function sodium_crypto_kx_server_session_keys($keypair, $clientPublicKey) - { - return ParagonIE_Sodium_Compat::crypto_kx_server_session_keys($keypair, $clientPublicKey); - } -} -if (!is_callable('sodium_crypto_kx_secretkey')) { - /** - * @param string $keypair - * @return string - * @throws Exception - */ - function sodium_crypto_kx_secretkey($keypair) - { - return ParagonIE_Sodium_Compat::crypto_kx_secretkey($keypair); - } -} -if (!is_callable('sodium_crypto_kx_publickey')) { - /** - * @param string $keypair - * @return string - * @throws Exception - */ - function sodium_crypto_kx_publickey($keypair) - { - return ParagonIE_Sodium_Compat::crypto_kx_publickey($keypair); - } -} -if (!is_callable('sodium_crypto_pwhash')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_pwhash() - * @param int $outlen - * @param string $passwd - * @param string $salt - * @param int $opslimit - * @param int $memlimit - * @param int|null $algo - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit, $algo = null) - { - return ParagonIE_Sodium_Compat::crypto_pwhash($outlen, $passwd, $salt, $opslimit, $memlimit, $algo); - } -} -if (!is_callable('sodium_crypto_pwhash_str')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_pwhash_str() - * @param string $passwd - * @param int $opslimit - * @param int $memlimit - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_pwhash_str($passwd, $opslimit, $memlimit) - { - return ParagonIE_Sodium_Compat::crypto_pwhash_str($passwd, $opslimit, $memlimit); - } -} -if (!is_callable('sodium_crypto_pwhash_str_needs_rehash')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash() - * @param string $hash - * @param int $opslimit - * @param int $memlimit - * @return bool - * - * @throws SodiumException - */ - function sodium_crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit) - { - return ParagonIE_Sodium_Compat::crypto_pwhash_str_needs_rehash($hash, $opslimit, $memlimit); - } -} -if (!is_callable('sodium_crypto_pwhash_str_verify')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_pwhash_str_verify() - * @param string $passwd - * @param string $hash - * @return bool - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_pwhash_str_verify($passwd, $hash) - { - return ParagonIE_Sodium_Compat::crypto_pwhash_str_verify($passwd, $hash); - } -} -if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256() - * @param int $outlen - * @param string $passwd - * @param string $salt - * @param int $opslimit - * @param int $memlimit - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, $memlimit) - { - return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256($outlen, $passwd, $salt, $opslimit, $memlimit); - } -} -if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str() - * @param string $passwd - * @param int $opslimit - * @param int $memlimit - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit) - { - return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str($passwd, $opslimit, $memlimit); - } -} -if (!is_callable('sodium_crypto_pwhash_scryptsalsa208sha256_str_verify')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify() - * @param string $passwd - * @param string $hash - * @return bool - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash) - { - return ParagonIE_Sodium_Compat::crypto_pwhash_scryptsalsa208sha256_str_verify($passwd, $hash); - } -} -if (!is_callable('sodium_crypto_scalarmult')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_scalarmult() - * @param string $n - * @param string $p - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_scalarmult($n, $p) - { - return ParagonIE_Sodium_Compat::crypto_scalarmult($n, $p); - } -} -if (!is_callable('sodium_crypto_scalarmult_base')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_scalarmult_base() - * @param string $n - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_scalarmult_base($n) - { - return ParagonIE_Sodium_Compat::crypto_scalarmult_base($n); - } -} -if (!is_callable('sodium_crypto_secretbox')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_secretbox() - * @param string $message - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_secretbox($message, $nonce, $key) - { - return ParagonIE_Sodium_Compat::crypto_secretbox($message, $nonce, $key); - } -} -if (!is_callable('sodium_crypto_secretbox_keygen')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_secretbox_keygen() - * @return string - * @throws Exception - */ - function sodium_crypto_secretbox_keygen() - { - return ParagonIE_Sodium_Compat::crypto_secretbox_keygen(); - } -} -if (!is_callable('sodium_crypto_secretbox_open')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_secretbox_open() - * @param string $message - * @param string $nonce - * @param string $key - * @return string|bool - */ - function sodium_crypto_secretbox_open($message, $nonce, $key) - { - try { - return ParagonIE_Sodium_Compat::crypto_secretbox_open($message, $nonce, $key); - } catch (Error $ex) { - return false; - } catch (Exception $ex) { - return false; - } - } -} -if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_push')) { - /** - * @param string $key - * @return array - * @throws SodiumException - */ - function sodium_crypto_secretstream_xchacha20poly1305_init_push($key) - { - return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_push($key); - } -} -if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_push')) { - /** - * @param string $state - * @param string $msg - * @param string $aad - * @param int $tag - * @return string - * @throws SodiumException - */ - function sodium_crypto_secretstream_xchacha20poly1305_push(&$state, $msg, $aad = '', $tag = 0) - { - return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_push($state, $msg, $aad, $tag); - } -} -if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_init_pull')) { - /** - * @param string $header - * @param string $key - * @return string - * @throws Exception - */ - function sodium_crypto_secretstream_xchacha20poly1305_init_pull($header, $key) - { - return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_init_pull($header, $key); - } -} -if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_pull')) { - /** - * @param string $state - * @param string $cipher - * @param string $aad - * @return bool|array{0: string, 1: int} - * @throws SodiumException - */ - function sodium_crypto_secretstream_xchacha20poly1305_pull(&$state, $cipher, $aad = '') - { - return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_pull($state, $cipher, $aad); - } -} -if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_rekey')) { - /** - * @param string $state - * @return void - * @throws SodiumException - */ - function sodium_crypto_secretstream_xchacha20poly1305_rekey(&$state) - { - ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_rekey($state); - } -} -if (!is_callable('sodium_crypto_secretstream_xchacha20poly1305_keygen')) { - /** - * @return string - * @throws Exception - */ - function sodium_crypto_secretstream_xchacha20poly1305_keygen() - { - return ParagonIE_Sodium_Compat::crypto_secretstream_xchacha20poly1305_keygen(); - } -} -if (!is_callable('sodium_crypto_shorthash')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_shorthash() - * @param string $message - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_shorthash($message, $key = '') - { - return ParagonIE_Sodium_Compat::crypto_shorthash($message, $key); - } -} -if (!is_callable('sodium_crypto_shorthash_keygen')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_shorthash_keygen() - * @return string - * @throws Exception - */ - function sodium_crypto_shorthash_keygen() - { - return ParagonIE_Sodium_Compat::crypto_shorthash_keygen(); - } -} -if (!is_callable('sodium_crypto_sign')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign() - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign($message, $sk) - { - return ParagonIE_Sodium_Compat::crypto_sign($message, $sk); - } -} -if (!is_callable('sodium_crypto_sign_detached')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_detached() - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign_detached($message, $sk) - { - return ParagonIE_Sodium_Compat::crypto_sign_detached($message, $sk); - } -} -if (!is_callable('sodium_crypto_sign_keypair_from_secretkey_and_publickey')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey() - * @param string $sk - * @param string $pk - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk) - { - return ParagonIE_Sodium_Compat::crypto_sign_keypair_from_secretkey_and_publickey($sk, $pk); - } -} -if (!is_callable('sodium_crypto_sign_keypair')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_keypair() - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign_keypair() - { - return ParagonIE_Sodium_Compat::crypto_sign_keypair(); - } -} -if (!is_callable('sodium_crypto_sign_open')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_open() - * @param string $signedMessage - * @param string $pk - * @return string|bool - */ - function sodium_crypto_sign_open($signedMessage, $pk) - { - try { - return ParagonIE_Sodium_Compat::crypto_sign_open($signedMessage, $pk); - } catch (Error $ex) { - return false; - } catch (Exception $ex) { - return false; - } - } -} -if (!is_callable('sodium_crypto_sign_publickey')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_publickey() - * @param string $keypair - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign_publickey($keypair) - { - return ParagonIE_Sodium_Compat::crypto_sign_publickey($keypair); - } -} -if (!is_callable('sodium_crypto_sign_publickey_from_secretkey')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey() - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign_publickey_from_secretkey($sk) - { - return ParagonIE_Sodium_Compat::crypto_sign_publickey_from_secretkey($sk); - } -} -if (!is_callable('sodium_crypto_sign_secretkey')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_secretkey() - * @param string $keypair - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign_secretkey($keypair) - { - return ParagonIE_Sodium_Compat::crypto_sign_secretkey($keypair); - } -} -if (!is_callable('sodium_crypto_sign_seed_keypair')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_seed_keypair() - * @param string $seed - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign_seed_keypair($seed) - { - return ParagonIE_Sodium_Compat::crypto_sign_seed_keypair($seed); - } -} -if (!is_callable('sodium_crypto_sign_verify_detached')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_verify_detached() - * @param string $signature - * @param string $message - * @param string $pk - * @return bool - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign_verify_detached($signature, $message, $pk) - { - return ParagonIE_Sodium_Compat::crypto_sign_verify_detached($signature, $message, $pk); - } -} -if (!is_callable('sodium_crypto_sign_ed25519_pk_to_curve25519')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519() - * @param string $pk - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign_ed25519_pk_to_curve25519($pk) - { - return ParagonIE_Sodium_Compat::crypto_sign_ed25519_pk_to_curve25519($pk); - } -} -if (!is_callable('sodium_crypto_sign_ed25519_sk_to_curve25519')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519() - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_sign_ed25519_sk_to_curve25519($sk) - { - return ParagonIE_Sodium_Compat::crypto_sign_ed25519_sk_to_curve25519($sk); - } -} -if (!is_callable('sodium_crypto_stream')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_stream() - * @param int $len - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_stream($len, $nonce, $key) - { - return ParagonIE_Sodium_Compat::crypto_stream($len, $nonce, $key); - } -} -if (!is_callable('sodium_crypto_stream_keygen')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_stream_keygen() - * @return string - * @throws Exception - */ - function sodium_crypto_stream_keygen() - { - return ParagonIE_Sodium_Compat::crypto_stream_keygen(); - } -} -if (!is_callable('sodium_crypto_stream_xor')) { - /** - * @see ParagonIE_Sodium_Compat::crypto_stream_xor() - * @param string $message - * @param string $nonce - * @param string $key - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_crypto_stream_xor($message, $nonce, $key) - { - return ParagonIE_Sodium_Compat::crypto_stream_xor($message, $nonce, $key); - } -} -require_once dirname(__FILE__) . '/stream-xchacha20.php'; -if (!is_callable('sodium_hex2bin')) { - /** - * @see ParagonIE_Sodium_Compat::hex2bin() - * @param string $string - * @return string - * @throws SodiumException - * @throws TypeError - */ - function sodium_hex2bin($string) - { - return ParagonIE_Sodium_Compat::hex2bin($string); - } -} -if (!is_callable('sodium_increment')) { - /** - * @see ParagonIE_Sodium_Compat::increment() - * @param string $string - * @return void - * @throws SodiumException - * @throws TypeError - */ - function sodium_increment(&$string) - { - ParagonIE_Sodium_Compat::increment($string); - } -} -if (!is_callable('sodium_library_version_major')) { - /** - * @see ParagonIE_Sodium_Compat::library_version_major() - * @return int - */ - function sodium_library_version_major() - { - return ParagonIE_Sodium_Compat::library_version_major(); - } -} -if (!is_callable('sodium_library_version_minor')) { - /** - * @see ParagonIE_Sodium_Compat::library_version_minor() - * @return int - */ - function sodium_library_version_minor() - { - return ParagonIE_Sodium_Compat::library_version_minor(); - } -} -if (!is_callable('sodium_version_string')) { - /** - * @see ParagonIE_Sodium_Compat::version_string() - * @return string - */ - function sodium_version_string() - { - return ParagonIE_Sodium_Compat::version_string(); - } -} -if (!is_callable('sodium_memcmp')) { - /** - * @see ParagonIE_Sodium_Compat::memcmp() - * @param string $a - * @param string $b - * @return int - * @throws SodiumException - * @throws TypeError - */ - function sodium_memcmp($a, $b) - { - return ParagonIE_Sodium_Compat::memcmp($a, $b); - } -} -if (!is_callable('sodium_memzero')) { - /** - * @see ParagonIE_Sodium_Compat::memzero() - * @param string $str - * @return void - * @throws SodiumException - * @throws TypeError - */ - function sodium_memzero(&$str) - { - ParagonIE_Sodium_Compat::memzero($str); - } -} -if (!is_callable('sodium_pad')) { - /** - * @see ParagonIE_Sodium_Compat::pad() - * @param string $unpadded - * @param int $blockSize - * @return int - * @throws SodiumException - * @throws TypeError - */ - function sodium_pad($unpadded, $blockSize) - { - return ParagonIE_Sodium_Compat::pad($unpadded, $blockSize, true); - } -} -if (!is_callable('sodium_unpad')) { - /** - * @see ParagonIE_Sodium_Compat::pad() - * @param string $padded - * @param int $blockSize - * @return int - * @throws SodiumException - * @throws TypeError - */ - function sodium_unpad($padded, $blockSize) - { - return ParagonIE_Sodium_Compat::unpad($padded, $blockSize, true); - } -} -if (!is_callable('sodium_randombytes_buf')) { - /** - * @see ParagonIE_Sodium_Compat::randombytes_buf() - * @param int $amount - * @return string - * @throws Exception - */ - function sodium_randombytes_buf($amount) - { - return ParagonIE_Sodium_Compat::randombytes_buf($amount); - } -} - -if (!is_callable('sodium_randombytes_uniform')) { - /** - * @see ParagonIE_Sodium_Compat::randombytes_uniform() - * @param int $upperLimit - * @return int - * @throws Exception - */ - function sodium_randombytes_uniform($upperLimit) - { - return ParagonIE_Sodium_Compat::randombytes_uniform($upperLimit); - } -} - -if (!is_callable('sodium_randombytes_random16')) { - /** - * @see ParagonIE_Sodium_Compat::randombytes_random16() - * @return int - * @throws Exception - */ - function sodium_randombytes_random16() - { - return ParagonIE_Sodium_Compat::randombytes_random16(); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/php72compat_const.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/php72compat_const.php deleted file mode 100644 index baa0f1e..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/lib/php72compat_const.php +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/psalm-below-3.xml b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/psalm-below-3.xml deleted file mode 100644 index a92a6cf..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/psalm-below-3.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php deleted file mode 100644 index 6ad4ab7..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/BLAKE2b.php +++ /dev/null @@ -1,797 +0,0 @@ -> - */ - protected static $sigma = array( - array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), - array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3), - array( 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4), - array( 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8), - array( 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13), - array( 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9), - array( 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11), - array( 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10), - array( 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5), - array( 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13 , 0), - array( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15), - array( 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3) - ); - - const BLOCKBYTES = 128; - const OUTBYTES = 64; - const KEYBYTES = 64; - - /** - * Turn two 32-bit integers into a fixed array representing a 64-bit integer. - * - * @internal You should not use this directly from another application - * - * @param int $high - * @param int $low - * @return SplFixedArray - * @psalm-suppress MixedAssignment - */ - public static function new64($high, $low) - { - if (PHP_INT_SIZE === 4) { - throw new SodiumException("Error, use 32-bit"); - } - $i64 = new SplFixedArray(2); - $i64[0] = $high & 0xffffffff; - $i64[1] = $low & 0xffffffff; - return $i64; - } - - /** - * Convert an arbitrary number into an SplFixedArray of two 32-bit integers - * that represents a 64-bit integer. - * - * @internal You should not use this directly from another application - * - * @param int $num - * @return SplFixedArray - */ - protected static function to64($num) - { - list($hi, $lo) = self::numericTo64BitInteger($num); - return self::new64($hi, $lo); - } - - /** - * Adds two 64-bit integers together, returning their sum as a SplFixedArray - * containing two 32-bit integers (representing a 64-bit integer). - * - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param SplFixedArray $y - * @return SplFixedArray - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedOperand - */ - protected static function add64($x, $y) - { - if (PHP_INT_SIZE === 4) { - throw new SodiumException("Error, use 32-bit"); - } - $l = ($x[1] + $y[1]) & 0xffffffff; - return self::new64( - (int) ($x[0] + $y[0] + ( - ($l < $x[1]) ? 1 : 0 - )), - (int) $l - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param SplFixedArray $y - * @param SplFixedArray $z - * @return SplFixedArray - */ - protected static function add364($x, $y, $z) - { - return self::add64($x, self::add64($y, $z)); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param SplFixedArray $y - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - */ - protected static function xor64(SplFixedArray $x, SplFixedArray $y) - { - if (PHP_INT_SIZE === 4) { - throw new SodiumException("Error, use 32-bit"); - } - if (!is_numeric($x[0])) { - throw new SodiumException('x[0] is not an integer'); - } - if (!is_numeric($x[1])) { - throw new SodiumException('x[1] is not an integer'); - } - if (!is_numeric($y[0])) { - throw new SodiumException('y[0] is not an integer'); - } - if (!is_numeric($y[1])) { - throw new SodiumException('y[1] is not an integer'); - } - return self::new64( - (int) (($x[0] ^ $y[0]) & 0xffffffff), - (int) (($x[1] ^ $y[1]) & 0xffffffff) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param int $c - * @return SplFixedArray - * @psalm-suppress MixedAssignment - */ - public static function rotr64($x, $c) - { - if (PHP_INT_SIZE === 4) { - throw new SodiumException("Error, use 32-bit"); - } - if ($c >= 64) { - $c %= 64; - } - if ($c >= 32) { - /** @var int $tmp */ - $tmp = $x[0]; - $x[0] = $x[1]; - $x[1] = $tmp; - $c -= 32; - } - if ($c === 0) { - return $x; - } - - $l0 = 0; - $c = 64 - $c; - - /** @var int $c */ - if ($c < 32) { - $h0 = ((int) ($x[0]) << $c) | ( - ( - (int) ($x[1]) & ((1 << $c) - 1) - << - (32 - $c) - ) >> (32 - $c) - ); - $l0 = (int) ($x[1]) << $c; - } else { - $h0 = (int) ($x[1]) << ($c - 32); - } - - $h1 = 0; - $c1 = 64 - $c; - - if ($c1 < 32) { - $h1 = (int) ($x[0]) >> $c1; - $l1 = ((int) ($x[1]) >> $c1) | ((int) ($x[0]) & ((1 << $c1) - 1)) << (32 - $c1); - } else { - $l1 = (int) ($x[0]) >> ($c1 - 32); - } - - return self::new64($h0 | $h1, $l0 | $l1); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @return int - * @psalm-suppress MixedOperand - */ - protected static function flatten64($x) - { - return (int) ($x[0] * 4294967296 + $x[1]); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param int $i - * @return SplFixedArray - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayOffset - */ - protected static function load64(SplFixedArray $x, $i) - { - /** @var int $l */ - $l = (int) ($x[$i]) - | ((int) ($x[$i+1]) << 8) - | ((int) ($x[$i+2]) << 16) - | ((int) ($x[$i+3]) << 24); - /** @var int $h */ - $h = (int) ($x[$i+4]) - | ((int) ($x[$i+5]) << 8) - | ((int) ($x[$i+6]) << 16) - | ((int) ($x[$i+7]) << 24); - return self::new64($h, $l); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $x - * @param int $i - * @param SplFixedArray $u - * @return void - * @psalm-suppress MixedAssignment - */ - protected static function store64(SplFixedArray $x, $i, SplFixedArray $u) - { - $maxLength = $x->getSize() - 1; - for ($j = 0; $j < 8; ++$j) { - /* - [0, 1, 2, 3, 4, 5, 6, 7] - ... becomes ... - [0, 0, 0, 0, 1, 1, 1, 1] - */ - /** @var int $uIdx */ - $uIdx = ((7 - $j) & 4) >> 2; - $x[$i] = ((int) ($u[$uIdx]) & 0xff); - if (++$i > $maxLength) { - return; - } - /** @psalm-suppress MixedOperand */ - $u[$uIdx] >>= 8; - } - } - - /** - * This just sets the $iv static variable. - * - * @internal You should not use this directly from another application - * - * @return void - */ - public static function pseudoConstructor() - { - static $called = false; - if ($called) { - return; - } - self::$iv = new SplFixedArray(8); - self::$iv[0] = self::new64(0x6a09e667, 0xf3bcc908); - self::$iv[1] = self::new64(0xbb67ae85, 0x84caa73b); - self::$iv[2] = self::new64(0x3c6ef372, 0xfe94f82b); - self::$iv[3] = self::new64(0xa54ff53a, 0x5f1d36f1); - self::$iv[4] = self::new64(0x510e527f, 0xade682d1); - self::$iv[5] = self::new64(0x9b05688c, 0x2b3e6c1f); - self::$iv[6] = self::new64(0x1f83d9ab, 0xfb41bd6b); - self::$iv[7] = self::new64(0x5be0cd19, 0x137e2179); - - $called = true; - } - - /** - * Returns a fresh BLAKE2 context. - * - * @internal You should not use this directly from another application - * - * @return SplFixedArray - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - */ - protected static function context() - { - $ctx = new SplFixedArray(6); - $ctx[0] = new SplFixedArray(8); // h - $ctx[1] = new SplFixedArray(2); // t - $ctx[2] = new SplFixedArray(2); // f - $ctx[3] = new SplFixedArray(256); // buf - $ctx[4] = 0; // buflen - $ctx[5] = 0; // last_node (uint8_t) - - for ($i = 8; $i--;) { - $ctx[0][$i] = self::$iv[$i]; - } - for ($i = 256; $i--;) { - $ctx[3][$i] = 0; - } - - $zero = self::new64(0, 0); - $ctx[1][0] = $zero; - $ctx[1][1] = $zero; - $ctx[2][0] = $zero; - $ctx[2][1] = $zero; - - return $ctx; - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param SplFixedArray $buf - * @return void - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - */ - protected static function compress(SplFixedArray $ctx, SplFixedArray $buf) - { - $m = new SplFixedArray(16); - $v = new SplFixedArray(16); - - for ($i = 16; $i--;) { - $m[$i] = self::load64($buf, $i << 3); - } - - for ($i = 8; $i--;) { - $v[$i] = $ctx[0][$i]; - } - - $v[ 8] = self::$iv[0]; - $v[ 9] = self::$iv[1]; - $v[10] = self::$iv[2]; - $v[11] = self::$iv[3]; - - $v[12] = self::xor64($ctx[1][0], self::$iv[4]); - $v[13] = self::xor64($ctx[1][1], self::$iv[5]); - $v[14] = self::xor64($ctx[2][0], self::$iv[6]); - $v[15] = self::xor64($ctx[2][1], self::$iv[7]); - - for ($r = 0; $r < 12; ++$r) { - $v = self::G($r, 0, 0, 4, 8, 12, $v, $m); - $v = self::G($r, 1, 1, 5, 9, 13, $v, $m); - $v = self::G($r, 2, 2, 6, 10, 14, $v, $m); - $v = self::G($r, 3, 3, 7, 11, 15, $v, $m); - $v = self::G($r, 4, 0, 5, 10, 15, $v, $m); - $v = self::G($r, 5, 1, 6, 11, 12, $v, $m); - $v = self::G($r, 6, 2, 7, 8, 13, $v, $m); - $v = self::G($r, 7, 3, 4, 9, 14, $v, $m); - } - - for ($i = 8; $i--;) { - $ctx[0][$i] = self::xor64( - $ctx[0][$i], self::xor64($v[$i], $v[$i+8]) - ); - } - } - - /** - * @internal You should not use this directly from another application - * - * @param int $r - * @param int $i - * @param int $a - * @param int $b - * @param int $c - * @param int $d - * @param SplFixedArray $v - * @param SplFixedArray $m - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayOffset - */ - public static function G($r, $i, $a, $b, $c, $d, SplFixedArray $v, SplFixedArray $m) - { - $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][$i << 1]]); - $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 32); - $v[$c] = self::add64($v[$c], $v[$d]); - $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 24); - $v[$a] = self::add364($v[$a], $v[$b], $m[self::$sigma[$r][($i << 1) + 1]]); - $v[$d] = self::rotr64(self::xor64($v[$d], $v[$a]), 16); - $v[$c] = self::add64($v[$c], $v[$d]); - $v[$b] = self::rotr64(self::xor64($v[$b], $v[$c]), 63); - return $v; - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param int $inc - * @return void - * @throws SodiumException - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - */ - public static function increment_counter($ctx, $inc) - { - if ($inc < 0) { - throw new SodiumException('Increasing by a negative number makes no sense.'); - } - $t = self::to64($inc); - # S->t is $ctx[1] in our implementation - - # S->t[0] = ( uint64_t )( t >> 0 ); - $ctx[1][0] = self::add64($ctx[1][0], $t); - - # S->t[1] += ( S->t[0] < inc ); - if (self::flatten64($ctx[1][0]) < $inc) { - $ctx[1][1] = self::add64($ctx[1][1], self::to64(1)); - } - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param SplFixedArray $p - * @param int $plen - * @return void - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - * @psalm-suppress MixedOperand - */ - public static function update(SplFixedArray $ctx, SplFixedArray $p, $plen) - { - self::pseudoConstructor(); - - $offset = 0; - while ($plen > 0) { - $left = $ctx[4]; - $fill = 256 - $left; - - if ($plen > $fill) { - # memcpy( S->buf + left, in, fill ); /* Fill buffer */ - for ($i = $fill; $i--;) { - $ctx[3][$i + $left] = $p[$i + $offset]; - } - - # S->buflen += fill; - $ctx[4] += $fill; - - # blake2b_increment_counter( S, BLAKE2B_BLOCKBYTES ); - self::increment_counter($ctx, 128); - - # blake2b_compress( S, S->buf ); /* Compress */ - self::compress($ctx, $ctx[3]); - - # memcpy( S->buf, S->buf + BLAKE2B_BLOCKBYTES, BLAKE2B_BLOCKBYTES ); /* Shift buffer left */ - for ($i = 128; $i--;) { - $ctx[3][$i] = $ctx[3][$i + 128]; - } - - # S->buflen -= BLAKE2B_BLOCKBYTES; - $ctx[4] -= 128; - - # in += fill; - $offset += $fill; - - # inlen -= fill; - $plen -= $fill; - } else { - for ($i = $plen; $i--;) { - $ctx[3][$i + $left] = $p[$i + $offset]; - } - $ctx[4] += $plen; - $offset += $plen; - $plen -= $plen; - } - } - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @param SplFixedArray $out - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - * @psalm-suppress MixedOperand - */ - public static function finish(SplFixedArray $ctx, SplFixedArray $out) - { - self::pseudoConstructor(); - if ($ctx[4] > 128) { - self::increment_counter($ctx, 128); - self::compress($ctx, $ctx[3]); - $ctx[4] -= 128; - if ($ctx[4] > 128) { - throw new SodiumException('Failed to assert that buflen <= 128 bytes'); - } - for ($i = $ctx[4]; $i--;) { - $ctx[3][$i] = $ctx[3][$i + 128]; - } - } - - self::increment_counter($ctx, $ctx[4]); - $ctx[2][0] = self::new64(0xffffffff, 0xffffffff); - - for ($i = 256 - $ctx[4]; $i--;) { - $ctx[3][$i+$ctx[4]] = 0; - } - - self::compress($ctx, $ctx[3]); - - $i = (int) (($out->getSize() - 1) / 8); - for (; $i >= 0; --$i) { - self::store64($out, $i << 3, $ctx[0][$i]); - } - return $out; - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray|null $key - * @param int $outlen - * @param SplFixedArray|null $salt - * @param SplFixedArray|null $personal - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - */ - public static function init( - $key = null, - $outlen = 64, - $salt = null, - $personal = null - ) { - self::pseudoConstructor(); - $klen = 0; - - if ($key !== null) { - if (count($key) > 64) { - throw new SodiumException('Invalid key size'); - } - $klen = count($key); - } - - if ($outlen > 64) { - throw new SodiumException('Invalid output size'); - } - - $ctx = self::context(); - - $p = new SplFixedArray(64); - // Zero our param buffer... - for ($i = 64; --$i;) { - $p[$i] = 0; - } - - $p[0] = $outlen; // digest_length - $p[1] = $klen; // key_length - $p[2] = 1; // fanout - $p[3] = 1; // depth - - if ($salt instanceof SplFixedArray) { - // salt: [32] through [47] - for ($i = 0; $i < 16; ++$i) { - $p[32 + $i] = (int) $salt[$i]; - } - } - if ($personal instanceof SplFixedArray) { - // personal: [48] through [63] - for ($i = 0; $i < 16; ++$i) { - $p[48 + $i] = (int) $personal[$i]; - } - } - - $ctx[0][0] = self::xor64( - $ctx[0][0], - self::load64($p, 0) - ); - if ($salt instanceof SplFixedArray || $personal instanceof SplFixedArray) { - // We need to do what blake2b_init_param() does: - for ($i = 1; $i < 8; ++$i) { - $ctx[0][$i] = self::xor64( - $ctx[0][$i], - self::load64($p, $i << 3) - ); - } - } - - if ($klen > 0 && $key instanceof SplFixedArray) { - $block = new SplFixedArray(128); - for ($i = 128; $i--;) { - $block[$i] = 0; - } - for ($i = $klen; $i--;) { - $block[$i] = $key[$i]; - } - self::update($ctx, $block, 128); - $ctx[4] = 128; - } - - return $ctx; - } - - /** - * Convert a string into an SplFixedArray of integers - * - * @internal You should not use this directly from another application - * - * @param string $str - * @return SplFixedArray - * @psalm-suppress MixedArgumentTypeCoercion - */ - public static function stringToSplFixedArray($str = '') - { - $values = unpack('C*', $str); - return SplFixedArray::fromArray(array_values($values)); - } - - /** - * Convert an SplFixedArray of integers into a string - * - * @internal You should not use this directly from another application - * - * @param SplFixedArray $a - * @return string - * @throws TypeError - */ - public static function SplFixedArrayToString(SplFixedArray $a) - { - /** - * @var array $arr - */ - $arr = $a->toArray(); - $c = $a->count(); - array_unshift($arr, str_repeat('C', $c)); - return (string) (call_user_func_array('pack', $arr)); - } - - /** - * @internal You should not use this directly from another application - * - * @param SplFixedArray $ctx - * @return string - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayAssignment - * @psalm-suppress MixedArrayOffset - * @psalm-suppress MixedMethodCall - */ - public static function contextToString(SplFixedArray $ctx) - { - $str = ''; - /** @var array> $ctxA */ - $ctxA = $ctx[0]->toArray(); - - # uint64_t h[8]; - for ($i = 0; $i < 8; ++$i) { - $str .= self::store32_le($ctxA[$i][1]); - $str .= self::store32_le($ctxA[$i][0]); - } - - # uint64_t t[2]; - # uint64_t f[2]; - for ($i = 1; $i < 3; ++$i) { - $ctxA = $ctx[$i]->toArray(); - $str .= self::store32_le($ctxA[0][1]); - $str .= self::store32_le($ctxA[0][0]); - $str .= self::store32_le($ctxA[1][1]); - $str .= self::store32_le($ctxA[1][0]); - } - - # uint8_t buf[2 * 128]; - $str .= self::SplFixedArrayToString($ctx[3]); - - /** @var int $ctx4 */ - $ctx4 = (int) $ctx[4]; - - # size_t buflen; - $str .= implode('', array( - self::intToChr($ctx4 & 0xff), - self::intToChr(($ctx4 >> 8) & 0xff), - self::intToChr(($ctx4 >> 16) & 0xff), - self::intToChr(($ctx4 >> 24) & 0xff), - self::intToChr(($ctx4 >> 32) & 0xff), - self::intToChr(($ctx4 >> 40) & 0xff), - self::intToChr(($ctx4 >> 48) & 0xff), - self::intToChr(($ctx4 >> 56) & 0xff) - )); - # uint8_t last_node; - return $str . self::intToChr($ctx[5]) . str_repeat("\x00", 23); - } - - /** - * Creates an SplFixedArray containing other SplFixedArray elements, from - * a string (compatible with \Sodium\crypto_generichash_{init, update, final}) - * - * @internal You should not use this directly from another application - * - * @param string $string - * @return SplFixedArray - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArrayAssignment - */ - public static function stringToContext($string) - { - $ctx = self::context(); - - # uint64_t h[8]; - for ($i = 0; $i < 8; ++$i) { - $ctx[0][$i] = SplFixedArray::fromArray( - array( - self::load_4( - self::substr($string, (($i << 3) + 4), 4) - ), - self::load_4( - self::substr($string, (($i << 3) + 0), 4) - ) - ) - ); - } - - # uint64_t t[2]; - # uint64_t f[2]; - for ($i = 1; $i < 3; ++$i) { - $ctx[$i][1] = SplFixedArray::fromArray( - array( - self::load_4(self::substr($string, 76 + (($i - 1) << 4), 4)), - self::load_4(self::substr($string, 72 + (($i - 1) << 4), 4)) - ) - ); - $ctx[$i][0] = SplFixedArray::fromArray( - array( - self::load_4(self::substr($string, 68 + (($i - 1) << 4), 4)), - self::load_4(self::substr($string, 64 + (($i - 1) << 4), 4)) - ) - ); - } - - # uint8_t buf[2 * 128]; - $ctx[3] = self::stringToSplFixedArray(self::substr($string, 96, 256)); - - # uint8_t buf[2 * 128]; - $int = 0; - for ($i = 0; $i < 8; ++$i) { - $int |= self::chrToInt($string[352 + $i]) << ($i << 3); - } - $ctx[4] = $int; - - return $ctx; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519.php deleted file mode 100644 index dfcf26a..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519.php +++ /dev/null @@ -1,3836 +0,0 @@ - $arr */ - $arr = array(); - for ($i = 0; $i < 10; ++$i) { - $arr[$i] = (int) ($f[$i] + $g[$i]); - } - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($arr); - } - - /** - * Constant-time conditional move. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @param ParagonIE_Sodium_Core_Curve25519_Fe $g - * @param int $b - * @return ParagonIE_Sodium_Core_Curve25519_Fe - * @psalm-suppress MixedAssignment - */ - public static function fe_cmov( - ParagonIE_Sodium_Core_Curve25519_Fe $f, - ParagonIE_Sodium_Core_Curve25519_Fe $g, - $b = 0 - ) { - /** @var array $h */ - $h = array(); - $b *= -1; - for ($i = 0; $i < 10; ++$i) { - $x = (($f[$i] ^ $g[$i]) & $b); - $h[$i] = ($f[$i]) ^ $x; - } - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($h); - } - - /** - * Create a copy of a field element. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_copy(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $h = clone $f; - return $h; - } - - /** - * Give: 32-byte string. - * Receive: A field element object to use for internal calculations. - * - * @internal You should not use this directly from another application - * - * @param string $s - * @return ParagonIE_Sodium_Core_Curve25519_Fe - * @throws RangeException - * @throws TypeError - */ - public static function fe_frombytes($s) - { - if (self::strlen($s) !== 32) { - throw new RangeException('Expected a 32-byte string.'); - } - $h0 = self::load_4($s); - $h1 = self::load_3(self::substr($s, 4, 3)) << 6; - $h2 = self::load_3(self::substr($s, 7, 3)) << 5; - $h3 = self::load_3(self::substr($s, 10, 3)) << 3; - $h4 = self::load_3(self::substr($s, 13, 3)) << 2; - $h5 = self::load_4(self::substr($s, 16, 4)); - $h6 = self::load_3(self::substr($s, 20, 3)) << 7; - $h7 = self::load_3(self::substr($s, 23, 3)) << 5; - $h8 = self::load_3(self::substr($s, 26, 3)) << 4; - $h9 = (self::load_3(self::substr($s, 29, 3)) & 8388607) << 2; - - $carry9 = ($h9 + (1 << 24)) >> 25; - $h0 += self::mul($carry9, 19, 5); - $h9 -= $carry9 << 25; - $carry1 = ($h1 + (1 << 24)) >> 25; - $h2 += $carry1; - $h1 -= $carry1 << 25; - $carry3 = ($h3 + (1 << 24)) >> 25; - $h4 += $carry3; - $h3 -= $carry3 << 25; - $carry5 = ($h5 + (1 << 24)) >> 25; - $h6 += $carry5; - $h5 -= $carry5 << 25; - $carry7 = ($h7 + (1 << 24)) >> 25; - $h8 += $carry7; - $h7 -= $carry7 << 25; - - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - $carry2 = ($h2 + (1 << 25)) >> 26; - $h3 += $carry2; - $h2 -= $carry2 << 26; - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - $carry6 = ($h6 + (1 << 25)) >> 26; - $h7 += $carry6; - $h6 -= $carry6 << 26; - $carry8 = ($h8 + (1 << 25)) >> 26; - $h9 += $carry8; - $h8 -= $carry8 << 26; - - return ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( - array( - (int) $h0, - (int) $h1, - (int) $h2, - (int) $h3, - (int) $h4, - (int) $h5, - (int) $h6, - (int) $h7, - (int) $h8, - (int) $h9 - ) - ); - } - - /** - * Convert a field element to a byte string. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $h - * @return string - */ - public static function fe_tobytes(ParagonIE_Sodium_Core_Curve25519_Fe $h) - { - $h0 = (int) $h[0]; - $h1 = (int) $h[1]; - $h2 = (int) $h[2]; - $h3 = (int) $h[3]; - $h4 = (int) $h[4]; - $h5 = (int) $h[5]; - $h6 = (int) $h[6]; - $h7 = (int) $h[7]; - $h8 = (int) $h[8]; - $h9 = (int) $h[9]; - - $q = (self::mul($h9, 19, 5) + (1 << 24)) >> 25; - $q = ($h0 + $q) >> 26; - $q = ($h1 + $q) >> 25; - $q = ($h2 + $q) >> 26; - $q = ($h3 + $q) >> 25; - $q = ($h4 + $q) >> 26; - $q = ($h5 + $q) >> 25; - $q = ($h6 + $q) >> 26; - $q = ($h7 + $q) >> 25; - $q = ($h8 + $q) >> 26; - $q = ($h9 + $q) >> 25; - - $h0 += self::mul($q, 19, 5); - - $carry0 = $h0 >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - $carry1 = $h1 >> 25; - $h2 += $carry1; - $h1 -= $carry1 << 25; - $carry2 = $h2 >> 26; - $h3 += $carry2; - $h2 -= $carry2 << 26; - $carry3 = $h3 >> 25; - $h4 += $carry3; - $h3 -= $carry3 << 25; - $carry4 = $h4 >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - $carry5 = $h5 >> 25; - $h6 += $carry5; - $h5 -= $carry5 << 25; - $carry6 = $h6 >> 26; - $h7 += $carry6; - $h6 -= $carry6 << 26; - $carry7 = $h7 >> 25; - $h8 += $carry7; - $h7 -= $carry7 << 25; - $carry8 = $h8 >> 26; - $h9 += $carry8; - $h8 -= $carry8 << 26; - $carry9 = $h9 >> 25; - $h9 -= $carry9 << 25; - - /** - * @var array - */ - $s = array( - (int) (($h0 >> 0) & 0xff), - (int) (($h0 >> 8) & 0xff), - (int) (($h0 >> 16) & 0xff), - (int) ((($h0 >> 24) | ($h1 << 2)) & 0xff), - (int) (($h1 >> 6) & 0xff), - (int) (($h1 >> 14) & 0xff), - (int) ((($h1 >> 22) | ($h2 << 3)) & 0xff), - (int) (($h2 >> 5) & 0xff), - (int) (($h2 >> 13) & 0xff), - (int) ((($h2 >> 21) | ($h3 << 5)) & 0xff), - (int) (($h3 >> 3) & 0xff), - (int) (($h3 >> 11) & 0xff), - (int) ((($h3 >> 19) | ($h4 << 6)) & 0xff), - (int) (($h4 >> 2) & 0xff), - (int) (($h4 >> 10) & 0xff), - (int) (($h4 >> 18) & 0xff), - (int) (($h5 >> 0) & 0xff), - (int) (($h5 >> 8) & 0xff), - (int) (($h5 >> 16) & 0xff), - (int) ((($h5 >> 24) | ($h6 << 1)) & 0xff), - (int) (($h6 >> 7) & 0xff), - (int) (($h6 >> 15) & 0xff), - (int) ((($h6 >> 23) | ($h7 << 3)) & 0xff), - (int) (($h7 >> 5) & 0xff), - (int) (($h7 >> 13) & 0xff), - (int) ((($h7 >> 21) | ($h8 << 4)) & 0xff), - (int) (($h8 >> 4) & 0xff), - (int) (($h8 >> 12) & 0xff), - (int) ((($h8 >> 20) | ($h9 << 6)) & 0xff), - (int) (($h9 >> 2) & 0xff), - (int) (($h9 >> 10) & 0xff), - (int) (($h9 >> 18) & 0xff) - ); - return self::intArrayToString($s); - } - - /** - * Is a field element negative? (1 = yes, 0 = no. Used in calculations.) - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return int - * @throws SodiumException - * @throws TypeError - */ - public static function fe_isnegative(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $str = self::fe_tobytes($f); - return (int) (self::chrToInt($str[0]) & 1); - } - - /** - * Returns 0 if this field element results in all NUL bytes. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function fe_isnonzero(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - static $zero; - if ($zero === null) { - $zero = str_repeat("\x00", 32); - } - /** @var string $zero */ - /** @var string $str */ - $str = self::fe_tobytes($f); - return !self::verify_32($str, (string) $zero); - } - - /** - * Multiply two field elements - * - * h = f * g - * - * @internal You should not use this directly from another application - * - * @security Is multiplication a source of timing leaks? If so, can we do - * anything to prevent that from happening? - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @param ParagonIE_Sodium_Core_Curve25519_Fe $g - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_mul( - ParagonIE_Sodium_Core_Curve25519_Fe $f, - ParagonIE_Sodium_Core_Curve25519_Fe $g - ) { - // Ensure limbs aren't oversized. - $f = self::fe_normalize($f); - $g = self::fe_normalize($g); - $f0 = $f[0]; - $f1 = $f[1]; - $f2 = $f[2]; - $f3 = $f[3]; - $f4 = $f[4]; - $f5 = $f[5]; - $f6 = $f[6]; - $f7 = $f[7]; - $f8 = $f[8]; - $f9 = $f[9]; - $g0 = $g[0]; - $g1 = $g[1]; - $g2 = $g[2]; - $g3 = $g[3]; - $g4 = $g[4]; - $g5 = $g[5]; - $g6 = $g[6]; - $g7 = $g[7]; - $g8 = $g[8]; - $g9 = $g[9]; - $g1_19 = self::mul($g1, 19, 5); - $g2_19 = self::mul($g2, 19, 5); - $g3_19 = self::mul($g3, 19, 5); - $g4_19 = self::mul($g4, 19, 5); - $g5_19 = self::mul($g5, 19, 5); - $g6_19 = self::mul($g6, 19, 5); - $g7_19 = self::mul($g7, 19, 5); - $g8_19 = self::mul($g8, 19, 5); - $g9_19 = self::mul($g9, 19, 5); - $f1_2 = $f1 << 1; - $f3_2 = $f3 << 1; - $f5_2 = $f5 << 1; - $f7_2 = $f7 << 1; - $f9_2 = $f9 << 1; - $f0g0 = self::mul($f0, $g0, 26); - $f0g1 = self::mul($f0, $g1, 25); - $f0g2 = self::mul($f0, $g2, 26); - $f0g3 = self::mul($f0, $g3, 25); - $f0g4 = self::mul($f0, $g4, 26); - $f0g5 = self::mul($f0, $g5, 25); - $f0g6 = self::mul($f0, $g6, 26); - $f0g7 = self::mul($f0, $g7, 25); - $f0g8 = self::mul($f0, $g8, 26); - $f0g9 = self::mul($f0, $g9, 26); - $f1g0 = self::mul($f1, $g0, 26); - $f1g1_2 = self::mul($f1_2, $g1, 25); - $f1g2 = self::mul($f1, $g2, 26); - $f1g3_2 = self::mul($f1_2, $g3, 25); - $f1g4 = self::mul($f1, $g4, 26); - $f1g5_2 = self::mul($f1_2, $g5, 25); - $f1g6 = self::mul($f1, $g6, 26); - $f1g7_2 = self::mul($f1_2, $g7, 25); - $f1g8 = self::mul($f1, $g8, 26); - $f1g9_38 = self::mul($g9_19, $f1_2, 26); - $f2g0 = self::mul($f2, $g0, 26); - $f2g1 = self::mul($f2, $g1, 25); - $f2g2 = self::mul($f2, $g2, 26); - $f2g3 = self::mul($f2, $g3, 25); - $f2g4 = self::mul($f2, $g4, 26); - $f2g5 = self::mul($f2, $g5, 25); - $f2g6 = self::mul($f2, $g6, 26); - $f2g7 = self::mul($f2, $g7, 25); - $f2g8_19 = self::mul($g8_19, $f2, 26); - $f2g9_19 = self::mul($g9_19, $f2, 26); - $f3g0 = self::mul($f3, $g0, 26); - $f3g1_2 = self::mul($f3_2, $g1, 25); - $f3g2 = self::mul($f3, $g2, 26); - $f3g3_2 = self::mul($f3_2, $g3, 25); - $f3g4 = self::mul($f3, $g4, 26); - $f3g5_2 = self::mul($f3_2, $g5, 25); - $f3g6 = self::mul($f3, $g6, 26); - $f3g7_38 = self::mul($g7_19, $f3_2, 26); - $f3g8_19 = self::mul($g8_19, $f3, 25); - $f3g9_38 = self::mul($g9_19, $f3_2, 26); - $f4g0 = self::mul($f4, $g0, 26); - $f4g1 = self::mul($f4, $g1, 25); - $f4g2 = self::mul($f4, $g2, 26); - $f4g3 = self::mul($f4, $g3, 25); - $f4g4 = self::mul($f4, $g4, 26); - $f4g5 = self::mul($f4, $g5, 25); - $f4g6_19 = self::mul($g6_19, $f4, 26); - $f4g7_19 = self::mul($g7_19, $f4, 26); - $f4g8_19 = self::mul($g8_19, $f4, 26); - $f4g9_19 = self::mul($g9_19, $f4, 26); - $f5g0 = self::mul($f5, $g0, 26); - $f5g1_2 = self::mul($f5_2, $g1, 25); - $f5g2 = self::mul($f5, $g2, 26); - $f5g3_2 = self::mul($f5_2, $g3, 25); - $f5g4 = self::mul($f5, $g4, 26); - $f5g5_38 = self::mul($g5_19, $f5_2, 26); - $f5g6_19 = self::mul($g6_19, $f5, 25); - $f5g7_38 = self::mul($g7_19, $f5_2, 26); - $f5g8_19 = self::mul($g8_19, $f5, 25); - $f5g9_38 = self::mul($g9_19, $f5_2, 26); - $f6g0 = self::mul($f6, $g0, 26); - $f6g1 = self::mul($f6, $g1, 25); - $f6g2 = self::mul($f6, $g2, 26); - $f6g3 = self::mul($f6, $g3, 25); - $f6g4_19 = self::mul($g4_19, $f6, 26); - $f6g5_19 = self::mul($g5_19, $f6, 26); - $f6g6_19 = self::mul($g6_19, $f6, 26); - $f6g7_19 = self::mul($g7_19, $f6, 26); - $f6g8_19 = self::mul($g8_19, $f6, 26); - $f6g9_19 = self::mul($g9_19, $f6, 26); - $f7g0 = self::mul($f7, $g0, 26); - $f7g1_2 = self::mul($f7_2, $g1, 25); - $f7g2 = self::mul($f7, $g2, 26); - $f7g3_38 = self::mul($g3_19, $f7_2, 26); - $f7g4_19 = self::mul($g4_19, $f7, 26); - $f7g5_38 = self::mul($g5_19, $f7_2, 26); - $f7g6_19 = self::mul($g6_19, $f7, 25); - $f7g7_38 = self::mul($g7_19, $f7_2, 26); - $f7g8_19 = self::mul($g8_19, $f7, 25); - $f7g9_38 = self::mul($g9_19,$f7_2, 26); - $f8g0 = self::mul($f8, $g0, 26); - $f8g1 = self::mul($f8, $g1, 25); - $f8g2_19 = self::mul($g2_19, $f8, 26); - $f8g3_19 = self::mul($g3_19, $f8, 26); - $f8g4_19 = self::mul($g4_19, $f8, 26); - $f8g5_19 = self::mul($g5_19, $f8, 26); - $f8g6_19 = self::mul($g6_19, $f8, 26); - $f8g7_19 = self::mul($g7_19, $f8, 26); - $f8g8_19 = self::mul($g8_19, $f8, 26); - $f8g9_19 = self::mul($g9_19, $f8, 26); - $f9g0 = self::mul($f9, $g0, 26); - $f9g1_38 = self::mul($g1_19, $f9_2, 26); - $f9g2_19 = self::mul($g2_19, $f9, 25); - $f9g3_38 = self::mul($g3_19, $f9_2, 26); - $f9g4_19 = self::mul($g4_19, $f9, 25); - $f9g5_38 = self::mul($g5_19, $f9_2, 26); - $f9g6_19 = self::mul($g6_19, $f9, 25); - $f9g7_38 = self::mul($g7_19, $f9_2, 26); - $f9g8_19 = self::mul($g8_19, $f9, 25); - $f9g9_38 = self::mul($g9_19, $f9_2, 26); - - $h0 = $f0g0 + $f1g9_38 + $f2g8_19 + $f3g7_38 + $f4g6_19 + $f5g5_38 + $f6g4_19 + $f7g3_38 + $f8g2_19 + $f9g1_38; - $h1 = $f0g1 + $f1g0 + $f2g9_19 + $f3g8_19 + $f4g7_19 + $f5g6_19 + $f6g5_19 + $f7g4_19 + $f8g3_19 + $f9g2_19; - $h2 = $f0g2 + $f1g1_2 + $f2g0 + $f3g9_38 + $f4g8_19 + $f5g7_38 + $f6g6_19 + $f7g5_38 + $f8g4_19 + $f9g3_38; - $h3 = $f0g3 + $f1g2 + $f2g1 + $f3g0 + $f4g9_19 + $f5g8_19 + $f6g7_19 + $f7g6_19 + $f8g5_19 + $f9g4_19; - $h4 = $f0g4 + $f1g3_2 + $f2g2 + $f3g1_2 + $f4g0 + $f5g9_38 + $f6g8_19 + $f7g7_38 + $f8g6_19 + $f9g5_38; - $h5 = $f0g5 + $f1g4 + $f2g3 + $f3g2 + $f4g1 + $f5g0 + $f6g9_19 + $f7g8_19 + $f8g7_19 + $f9g6_19; - $h6 = $f0g6 + $f1g5_2 + $f2g4 + $f3g3_2 + $f4g2 + $f5g1_2 + $f6g0 + $f7g9_38 + $f8g8_19 + $f9g7_38; - $h7 = $f0g7 + $f1g6 + $f2g5 + $f3g4 + $f4g3 + $f5g2 + $f6g1 + $f7g0 + $f8g9_19 + $f9g8_19; - $h8 = $f0g8 + $f1g7_2 + $f2g6 + $f3g5_2 + $f4g4 + $f5g3_2 + $f6g2 + $f7g1_2 + $f8g0 + $f9g9_38; - $h9 = $f0g9 + $f1g8 + $f2g7 + $f3g6 + $f4g5 + $f5g4 + $f6g3 + $f7g2 + $f8g1 + $f9g0 ; - - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - - $carry1 = ($h1 + (1 << 24)) >> 25; - $h2 += $carry1; - $h1 -= $carry1 << 25; - $carry5 = ($h5 + (1 << 24)) >> 25; - $h6 += $carry5; - $h5 -= $carry5 << 25; - - $carry2 = ($h2 + (1 << 25)) >> 26; - $h3 += $carry2; - $h2 -= $carry2 << 26; - $carry6 = ($h6 + (1 << 25)) >> 26; - $h7 += $carry6; - $h6 -= $carry6 << 26; - - $carry3 = ($h3 + (1 << 24)) >> 25; - $h4 += $carry3; - $h3 -= $carry3 << 25; - $carry7 = ($h7 + (1 << 24)) >> 25; - $h8 += $carry7; - $h7 -= $carry7 << 25; - - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - $carry8 = ($h8 + (1 << 25)) >> 26; - $h9 += $carry8; - $h8 -= $carry8 << 26; - - $carry9 = ($h9 + (1 << 24)) >> 25; - $h0 += self::mul($carry9, 19, 5); - $h9 -= $carry9 << 25; - - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - - return self::fe_normalize( - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( - array( - (int) $h0, - (int) $h1, - (int) $h2, - (int) $h3, - (int) $h4, - (int) $h5, - (int) $h6, - (int) $h7, - (int) $h8, - (int) $h9 - ) - ) - ); - } - - /** - * Get the negative values for each piece of the field element. - * - * h = -f - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core_Curve25519_Fe - * @psalm-suppress MixedAssignment - */ - public static function fe_neg(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $h = new ParagonIE_Sodium_Core_Curve25519_Fe(); - for ($i = 0; $i < 10; ++$i) { - $h[$i] = -$f[$i]; - } - return self::fe_normalize($h); - } - - /** - * Square a field element - * - * h = f * f - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_sq(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $f = self::fe_normalize($f); - $f0 = (int) $f[0]; - $f1 = (int) $f[1]; - $f2 = (int) $f[2]; - $f3 = (int) $f[3]; - $f4 = (int) $f[4]; - $f5 = (int) $f[5]; - $f6 = (int) $f[6]; - $f7 = (int) $f[7]; - $f8 = (int) $f[8]; - $f9 = (int) $f[9]; - - $f0_2 = $f0 << 1; - $f1_2 = $f1 << 1; - $f2_2 = $f2 << 1; - $f3_2 = $f3 << 1; - $f4_2 = $f4 << 1; - $f5_2 = $f5 << 1; - $f6_2 = $f6 << 1; - $f7_2 = $f7 << 1; - $f5_38 = self::mul($f5, 38, 6); - $f6_19 = self::mul($f6, 19, 5); - $f7_38 = self::mul($f7, 38, 6); - $f8_19 = self::mul($f8, 19, 5); - $f9_38 = self::mul($f9, 38, 6); - $f0f0 = self::mul($f0, $f0, 26); - $f0f1_2 = self::mul($f0_2, $f1, 26); - $f0f2_2 = self::mul($f0_2, $f2, 26); - $f0f3_2 = self::mul($f0_2, $f3, 26); - $f0f4_2 = self::mul($f0_2, $f4, 26); - $f0f5_2 = self::mul($f0_2, $f5, 26); - $f0f6_2 = self::mul($f0_2, $f6, 26); - $f0f7_2 = self::mul($f0_2, $f7, 26); - $f0f8_2 = self::mul($f0_2, $f8, 26); - $f0f9_2 = self::mul($f0_2, $f9, 26); - $f1f1_2 = self::mul($f1_2, $f1, 26); - $f1f2_2 = self::mul($f1_2, $f2, 26); - $f1f3_4 = self::mul($f1_2, $f3_2, 26); - $f1f4_2 = self::mul($f1_2, $f4, 26); - $f1f5_4 = self::mul($f1_2, $f5_2, 26); - $f1f6_2 = self::mul($f1_2, $f6, 26); - $f1f7_4 = self::mul($f1_2, $f7_2, 26); - $f1f8_2 = self::mul($f1_2, $f8, 26); - $f1f9_76 = self::mul($f9_38, $f1_2, 27); - $f2f2 = self::mul($f2, $f2, 27); - $f2f3_2 = self::mul($f2_2, $f3, 27); - $f2f4_2 = self::mul($f2_2, $f4, 27); - $f2f5_2 = self::mul($f2_2, $f5, 27); - $f2f6_2 = self::mul($f2_2, $f6, 27); - $f2f7_2 = self::mul($f2_2, $f7, 27); - $f2f8_38 = self::mul($f8_19, $f2_2, 27); - $f2f9_38 = self::mul($f9_38, $f2, 26); - $f3f3_2 = self::mul($f3_2, $f3, 26); - $f3f4_2 = self::mul($f3_2, $f4, 26); - $f3f5_4 = self::mul($f3_2, $f5_2, 26); - $f3f6_2 = self::mul($f3_2, $f6, 26); - $f3f7_76 = self::mul($f7_38, $f3_2, 26); - $f3f8_38 = self::mul($f8_19, $f3_2, 26); - $f3f9_76 = self::mul($f9_38, $f3_2, 26); - $f4f4 = self::mul($f4, $f4, 26); - $f4f5_2 = self::mul($f4_2, $f5, 26); - $f4f6_38 = self::mul($f6_19, $f4_2, 27); - $f4f7_38 = self::mul($f7_38, $f4, 26); - $f4f8_38 = self::mul($f8_19, $f4_2, 27); - $f4f9_38 = self::mul($f9_38, $f4, 26); - $f5f5_38 = self::mul($f5_38, $f5, 26); - $f5f6_38 = self::mul($f6_19, $f5_2, 26); - $f5f7_76 = self::mul($f7_38, $f5_2, 26); - $f5f8_38 = self::mul($f8_19, $f5_2, 26); - $f5f9_76 = self::mul($f9_38, $f5_2, 26); - $f6f6_19 = self::mul($f6_19, $f6, 26); - $f6f7_38 = self::mul($f7_38, $f6, 26); - $f6f8_38 = self::mul($f8_19, $f6_2, 27); - $f6f9_38 = self::mul($f9_38, $f6, 26); - $f7f7_38 = self::mul($f7_38, $f7, 26); - $f7f8_38 = self::mul($f8_19, $f7_2, 26); - $f7f9_76 = self::mul($f9_38, $f7_2, 26); - $f8f8_19 = self::mul($f8_19, $f8, 26); - $f8f9_38 = self::mul($f9_38, $f8, 26); - $f9f9_38 = self::mul($f9_38, $f9, 26); - $h0 = $f0f0 + $f1f9_76 + $f2f8_38 + $f3f7_76 + $f4f6_38 + $f5f5_38; - $h1 = $f0f1_2 + $f2f9_38 + $f3f8_38 + $f4f7_38 + $f5f6_38; - $h2 = $f0f2_2 + $f1f1_2 + $f3f9_76 + $f4f8_38 + $f5f7_76 + $f6f6_19; - $h3 = $f0f3_2 + $f1f2_2 + $f4f9_38 + $f5f8_38 + $f6f7_38; - $h4 = $f0f4_2 + $f1f3_4 + $f2f2 + $f5f9_76 + $f6f8_38 + $f7f7_38; - $h5 = $f0f5_2 + $f1f4_2 + $f2f3_2 + $f6f9_38 + $f7f8_38; - $h6 = $f0f6_2 + $f1f5_4 + $f2f4_2 + $f3f3_2 + $f7f9_76 + $f8f8_19; - $h7 = $f0f7_2 + $f1f6_2 + $f2f5_2 + $f3f4_2 + $f8f9_38; - $h8 = $f0f8_2 + $f1f7_4 + $f2f6_2 + $f3f5_4 + $f4f4 + $f9f9_38; - $h9 = $f0f9_2 + $f1f8_2 + $f2f7_2 + $f3f6_2 + $f4f5_2; - - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - - $carry1 = ($h1 + (1 << 24)) >> 25; - $h2 += $carry1; - $h1 -= $carry1 << 25; - $carry5 = ($h5 + (1 << 24)) >> 25; - $h6 += $carry5; - $h5 -= $carry5 << 25; - - $carry2 = ($h2 + (1 << 25)) >> 26; - $h3 += $carry2; - $h2 -= $carry2 << 26; - $carry6 = ($h6 + (1 << 25)) >> 26; - $h7 += $carry6; - $h6 -= $carry6 << 26; - - $carry3 = ($h3 + (1 << 24)) >> 25; - $h4 += $carry3; - $h3 -= $carry3 << 25; - $carry7 = ($h7 + (1 << 24)) >> 25; - $h8 += $carry7; - $h7 -= $carry7 << 25; - - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - $carry8 = ($h8 + (1 << 25)) >> 26; - $h9 += $carry8; - $h8 -= $carry8 << 26; - - $carry9 = ($h9 + (1 << 24)) >> 25; - $h0 += self::mul($carry9, 19, 5); - $h9 -= $carry9 << 25; - - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - - return self::fe_normalize( - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( - array( - (int) $h0, - (int) $h1, - (int) $h2, - (int) $h3, - (int) $h4, - (int) $h5, - (int) $h6, - (int) $h7, - (int) $h8, - (int) $h9 - ) - ) - ); - } - - - /** - * Square and double a field element - * - * h = 2 * f * f - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_sq2(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $f = self::fe_normalize($f); - $f0 = (int) $f[0]; - $f1 = (int) $f[1]; - $f2 = (int) $f[2]; - $f3 = (int) $f[3]; - $f4 = (int) $f[4]; - $f5 = (int) $f[5]; - $f6 = (int) $f[6]; - $f7 = (int) $f[7]; - $f8 = (int) $f[8]; - $f9 = (int) $f[9]; - - $f0_2 = $f0 << 1; - $f1_2 = $f1 << 1; - $f2_2 = $f2 << 1; - $f3_2 = $f3 << 1; - $f4_2 = $f4 << 1; - $f5_2 = $f5 << 1; - $f6_2 = $f6 << 1; - $f7_2 = $f7 << 1; - $f5_38 = self::mul($f5, 38, 6); /* 1.959375*2^30 */ - $f6_19 = self::mul($f6, 19, 5); /* 1.959375*2^30 */ - $f7_38 = self::mul($f7, 38, 6); /* 1.959375*2^30 */ - $f8_19 = self::mul($f8, 19, 5); /* 1.959375*2^30 */ - $f9_38 = self::mul($f9, 38, 6); /* 1.959375*2^30 */ - $f0f0 = self::mul($f0, $f0, 24); - $f0f1_2 = self::mul($f0_2, $f1, 24); - $f0f2_2 = self::mul($f0_2, $f2, 24); - $f0f3_2 = self::mul($f0_2, $f3, 24); - $f0f4_2 = self::mul($f0_2, $f4, 24); - $f0f5_2 = self::mul($f0_2, $f5, 24); - $f0f6_2 = self::mul($f0_2, $f6, 24); - $f0f7_2 = self::mul($f0_2, $f7, 24); - $f0f8_2 = self::mul($f0_2, $f8, 24); - $f0f9_2 = self::mul($f0_2, $f9, 24); - $f1f1_2 = self::mul($f1_2, $f1, 24); - $f1f2_2 = self::mul($f1_2, $f2, 24); - $f1f3_4 = self::mul($f1_2, $f3_2, 24); - $f1f4_2 = self::mul($f1_2, $f4, 24); - $f1f5_4 = self::mul($f1_2, $f5_2, 24); - $f1f6_2 = self::mul($f1_2, $f6, 24); - $f1f7_4 = self::mul($f1_2, $f7_2, 24); - $f1f8_2 = self::mul($f1_2, $f8, 24); - $f1f9_76 = self::mul($f9_38, $f1_2, 24); - $f2f2 = self::mul($f2, $f2, 24); - $f2f3_2 = self::mul($f2_2, $f3, 24); - $f2f4_2 = self::mul($f2_2, $f4, 24); - $f2f5_2 = self::mul($f2_2, $f5, 24); - $f2f6_2 = self::mul($f2_2, $f6, 24); - $f2f7_2 = self::mul($f2_2, $f7, 24); - $f2f8_38 = self::mul($f8_19, $f2_2, 25); - $f2f9_38 = self::mul($f9_38, $f2, 24); - $f3f3_2 = self::mul($f3_2, $f3, 24); - $f3f4_2 = self::mul($f3_2, $f4, 24); - $f3f5_4 = self::mul($f3_2, $f5_2, 24); - $f3f6_2 = self::mul($f3_2, $f6, 24); - $f3f7_76 = self::mul($f7_38, $f3_2, 24); - $f3f8_38 = self::mul($f8_19, $f3_2, 24); - $f3f9_76 = self::mul($f9_38, $f3_2, 24); - $f4f4 = self::mul($f4, $f4, 24); - $f4f5_2 = self::mul($f4_2, $f5, 24); - $f4f6_38 = self::mul($f6_19, $f4_2, 25); - $f4f7_38 = self::mul($f7_38, $f4, 24); - $f4f8_38 = self::mul($f8_19, $f4_2, 25); - $f4f9_38 = self::mul($f9_38, $f4, 24); - $f5f5_38 = self::mul($f5_38, $f5, 24); - $f5f6_38 = self::mul($f6_19, $f5_2, 24); - $f5f7_76 = self::mul($f7_38, $f5_2, 24); - $f5f8_38 = self::mul($f8_19, $f5_2, 24); - $f5f9_76 = self::mul($f9_38, $f5_2, 24); - $f6f6_19 = self::mul($f6_19, $f6, 24); - $f6f7_38 = self::mul($f7_38, $f6, 24); - $f6f8_38 = self::mul($f8_19, $f6_2, 25); - $f6f9_38 = self::mul($f9_38, $f6, 24); - $f7f7_38 = self::mul($f7_38, $f7, 24); - $f7f8_38 = self::mul($f8_19, $f7_2, 24); - $f7f9_76 = self::mul($f9_38, $f7_2, 24); - $f8f8_19 = self::mul($f8_19, $f8, 24); - $f8f9_38 = self::mul($f9_38, $f8, 24); - $f9f9_38 = self::mul($f9_38, $f9, 24); - - $h0 = (int) ($f0f0 + $f1f9_76 + $f2f8_38 + $f3f7_76 + $f4f6_38 + $f5f5_38) << 1; - $h1 = (int) ($f0f1_2 + $f2f9_38 + $f3f8_38 + $f4f7_38 + $f5f6_38) << 1; - $h2 = (int) ($f0f2_2 + $f1f1_2 + $f3f9_76 + $f4f8_38 + $f5f7_76 + $f6f6_19) << 1; - $h3 = (int) ($f0f3_2 + $f1f2_2 + $f4f9_38 + $f5f8_38 + $f6f7_38) << 1; - $h4 = (int) ($f0f4_2 + $f1f3_4 + $f2f2 + $f5f9_76 + $f6f8_38 + $f7f7_38) << 1; - $h5 = (int) ($f0f5_2 + $f1f4_2 + $f2f3_2 + $f6f9_38 + $f7f8_38) << 1; - $h6 = (int) ($f0f6_2 + $f1f5_4 + $f2f4_2 + $f3f3_2 + $f7f9_76 + $f8f8_19) << 1; - $h7 = (int) ($f0f7_2 + $f1f6_2 + $f2f5_2 + $f3f4_2 + $f8f9_38) << 1; - $h8 = (int) ($f0f8_2 + $f1f7_4 + $f2f6_2 + $f3f5_4 + $f4f4 + $f9f9_38) << 1; - $h9 = (int) ($f0f9_2 + $f1f8_2 + $f2f7_2 + $f3f6_2 + $f4f5_2) << 1; - - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - - $carry1 = ($h1 + (1 << 24)) >> 25; - $h2 += $carry1; - $h1 -= $carry1 << 25; - $carry5 = ($h5 + (1 << 24)) >> 25; - $h6 += $carry5; - $h5 -= $carry5 << 25; - - $carry2 = ($h2 + (1 << 25)) >> 26; - $h3 += $carry2; - $h2 -= $carry2 << 26; - $carry6 = ($h6 + (1 << 25)) >> 26; - $h7 += $carry6; - $h6 -= $carry6 << 26; - - $carry3 = ($h3 + (1 << 24)) >> 25; - $h4 += $carry3; - $h3 -= $carry3 << 25; - $carry7 = ($h7 + (1 << 24)) >> 25; - $h8 += $carry7; - $h7 -= $carry7 << 25; - - $carry4 = ($h4 + (1 << 25)) >> 26; - $h5 += $carry4; - $h4 -= $carry4 << 26; - $carry8 = ($h8 + (1 << 25)) >> 26; - $h9 += $carry8; - $h8 -= $carry8 << 26; - - $carry9 = ($h9 + (1 << 24)) >> 25; - $h0 += self::mul($carry9, 19, 5); - $h9 -= $carry9 << 25; - - $carry0 = ($h0 + (1 << 25)) >> 26; - $h1 += $carry0; - $h0 -= $carry0 << 26; - - return self::fe_normalize( - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( - array( - (int) $h0, - (int) $h1, - (int) $h2, - (int) $h3, - (int) $h4, - (int) $h5, - (int) $h6, - (int) $h7, - (int) $h8, - (int) $h9 - ) - ) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $Z - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_invert(ParagonIE_Sodium_Core_Curve25519_Fe $Z) - { - $z = clone $Z; - $t0 = self::fe_sq($z); - $t1 = self::fe_sq($t0); - $t1 = self::fe_sq($t1); - $t1 = self::fe_mul($z, $t1); - $t0 = self::fe_mul($t0, $t1); - $t2 = self::fe_sq($t0); - $t1 = self::fe_mul($t1, $t2); - $t2 = self::fe_sq($t1); - for ($i = 1; $i < 5; ++$i) { - $t2 = self::fe_sq($t2); - } - $t1 = self::fe_mul($t2, $t1); - $t2 = self::fe_sq($t1); - for ($i = 1; $i < 10; ++$i) { - $t2 = self::fe_sq($t2); - } - $t2 = self::fe_mul($t2, $t1); - $t3 = self::fe_sq($t2); - for ($i = 1; $i < 20; ++$i) { - $t3 = self::fe_sq($t3); - } - $t2 = self::fe_mul($t3, $t2); - $t2 = self::fe_sq($t2); - for ($i = 1; $i < 10; ++$i) { - $t2 = self::fe_sq($t2); - } - $t1 = self::fe_mul($t2, $t1); - $t2 = self::fe_sq($t1); - for ($i = 1; $i < 50; ++$i) { - $t2 = self::fe_sq($t2); - } - $t2 = self::fe_mul($t2, $t1); - $t3 = self::fe_sq($t2); - for ($i = 1; $i < 100; ++$i) { - $t3 = self::fe_sq($t3); - } - $t2 = self::fe_mul($t3, $t2); - $t2 = self::fe_sq($t2); - for ($i = 1; $i < 50; ++$i) { - $t2 = self::fe_sq($t2); - } - $t1 = self::fe_mul($t2, $t1); - $t1 = self::fe_sq($t1); - for ($i = 1; $i < 5; ++$i) { - $t1 = self::fe_sq($t1); - } - return self::fe_mul($t1, $t0); - } - - /** - * @internal You should not use this directly from another application - * - * @ref https://github.com/jedisct1/libsodium/blob/68564326e1e9dc57ef03746f85734232d20ca6fb/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1054-L1106 - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $z - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_pow22523(ParagonIE_Sodium_Core_Curve25519_Fe $z) - { - $z = self::fe_normalize($z); - # fe_sq(t0, z); - # fe_sq(t1, t0); - # fe_sq(t1, t1); - # fe_mul(t1, z, t1); - # fe_mul(t0, t0, t1); - # fe_sq(t0, t0); - # fe_mul(t0, t1, t0); - # fe_sq(t1, t0); - $t0 = self::fe_sq($z); - $t1 = self::fe_sq($t0); - $t1 = self::fe_sq($t1); - $t1 = self::fe_mul($z, $t1); - $t0 = self::fe_mul($t0, $t1); - $t0 = self::fe_sq($t0); - $t0 = self::fe_mul($t1, $t0); - $t1 = self::fe_sq($t0); - - # for (i = 1; i < 5; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 5; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t0, t1, t0); - # fe_sq(t1, t0); - $t0 = self::fe_mul($t1, $t0); - $t1 = self::fe_sq($t0); - - # for (i = 1; i < 10; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 10; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t1, t1, t0); - # fe_sq(t2, t1); - $t1 = self::fe_mul($t1, $t0); - $t2 = self::fe_sq($t1); - - # for (i = 1; i < 20; ++i) { - # fe_sq(t2, t2); - # } - for ($i = 1; $i < 20; ++$i) { - $t2 = self::fe_sq($t2); - } - - # fe_mul(t1, t2, t1); - # fe_sq(t1, t1); - $t1 = self::fe_mul($t2, $t1); - $t1 = self::fe_sq($t1); - - # for (i = 1; i < 10; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 10; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t0, t1, t0); - # fe_sq(t1, t0); - $t0 = self::fe_mul($t1, $t0); - $t1 = self::fe_sq($t0); - - # for (i = 1; i < 50; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 50; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t1, t1, t0); - # fe_sq(t2, t1); - $t1 = self::fe_mul($t1, $t0); - $t2 = self::fe_sq($t1); - - # for (i = 1; i < 100; ++i) { - # fe_sq(t2, t2); - # } - for ($i = 1; $i < 100; ++$i) { - $t2 = self::fe_sq($t2); - } - - # fe_mul(t1, t2, t1); - # fe_sq(t1, t1); - $t1 = self::fe_mul($t2, $t1); - $t1 = self::fe_sq($t1); - - # for (i = 1; i < 50; ++i) { - # fe_sq(t1, t1); - # } - for ($i = 1; $i < 50; ++$i) { - $t1 = self::fe_sq($t1); - } - - # fe_mul(t0, t1, t0); - # fe_sq(t0, t0); - # fe_sq(t0, t0); - # fe_mul(out, t0, z); - $t0 = self::fe_mul($t1, $t0); - $t0 = self::fe_sq($t0); - $t0 = self::fe_sq($t0); - return self::fe_mul($t0, $z); - } - - /** - * Subtract two field elements. - * - * h = f - g - * - * Preconditions: - * |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - * |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. - * - * Postconditions: - * |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc. - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @param ParagonIE_Sodium_Core_Curve25519_Fe $g - * @return ParagonIE_Sodium_Core_Curve25519_Fe - * @psalm-suppress MixedOperand - */ - public static function fe_sub(ParagonIE_Sodium_Core_Curve25519_Fe $f, ParagonIE_Sodium_Core_Curve25519_Fe $g) - { - return self::fe_normalize( - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray( - array( - (int) ($f[0] - $g[0]), - (int) ($f[1] - $g[1]), - (int) ($f[2] - $g[2]), - (int) ($f[3] - $g[3]), - (int) ($f[4] - $g[4]), - (int) ($f[5] - $g[5]), - (int) ($f[6] - $g[6]), - (int) ($f[7] - $g[7]), - (int) ($f[8] - $g[8]), - (int) ($f[9] - $g[9]) - ) - ) - ); - } - - /** - * Add two group elements. - * - * r = p + q - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_add( - ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q - ) { - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->YplusX); - $r->Y = self::fe_mul($r->Y, $q->YminusX); - $r->T = self::fe_mul($q->T2d, $p->T); - $r->X = self::fe_mul($p->Z, $q->Z); - $t0 = self::fe_add($r->X, $r->X); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_add($t0, $r->T); - $r->T = self::fe_sub($t0, $r->T); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @ref https://github.com/jedisct1/libsodium/blob/157c4a80c13b117608aeae12178b2d38825f9f8f/src/libsodium/crypto_core/curve25519/ref10/curve25519_ref10.c#L1185-L1215 - * @param string $a - * @return array - * @throws SodiumException - * @throws TypeError - */ - public static function slide($a) - { - if (self::strlen($a) < 256) { - if (self::strlen($a) < 16) { - $a = str_pad($a, 256, '0', STR_PAD_RIGHT); - } - } - /** @var array $r */ - $r = array(); - - /** @var int $i */ - for ($i = 0; $i < 256; ++$i) { - $r[$i] = (int) ( - 1 & ( - self::chrToInt($a[(int) ($i >> 3)]) - >> - ($i & 7) - ) - ); - } - - for ($i = 0;$i < 256;++$i) { - if ($r[$i]) { - for ($b = 1;$b <= 6 && $i + $b < 256;++$b) { - if ($r[$i + $b]) { - if ($r[$i] + ($r[$i + $b] << $b) <= 15) { - $r[$i] += $r[$i + $b] << $b; - $r[$i + $b] = 0; - } elseif ($r[$i] - ($r[$i + $b] << $b) >= -15) { - $r[$i] -= $r[$i + $b] << $b; - for ($k = $i + $b; $k < 256; ++$k) { - if (!$r[$k]) { - $r[$k] = 1; - break; - } - $r[$k] = 0; - } - } else { - break; - } - } - } - } - } - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $s - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - * @throws SodiumException - * @throws TypeError - */ - public static function ge_frombytes_negate_vartime($s) - { - static $d = null; - if (!$d) { - $d = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d); - } - - # fe_frombytes(h->Y,s); - # fe_1(h->Z); - $h = new ParagonIE_Sodium_Core_Curve25519_Ge_P3( - self::fe_0(), - self::fe_frombytes($s), - self::fe_1() - ); - - # fe_sq(u,h->Y); - # fe_mul(v,u,d); - # fe_sub(u,u,h->Z); /* u = y^2-1 */ - # fe_add(v,v,h->Z); /* v = dy^2+1 */ - $u = self::fe_sq($h->Y); - /** @var ParagonIE_Sodium_Core_Curve25519_Fe $d */ - $v = self::fe_mul($u, $d); - $u = self::fe_sub($u, $h->Z); /* u = y^2 - 1 */ - $v = self::fe_add($v, $h->Z); /* v = dy^2 + 1 */ - - # fe_sq(v3,v); - # fe_mul(v3,v3,v); /* v3 = v^3 */ - # fe_sq(h->X,v3); - # fe_mul(h->X,h->X,v); - # fe_mul(h->X,h->X,u); /* x = uv^7 */ - $v3 = self::fe_sq($v); - $v3 = self::fe_mul($v3, $v); /* v3 = v^3 */ - $h->X = self::fe_sq($v3); - $h->X = self::fe_mul($h->X, $v); - $h->X = self::fe_mul($h->X, $u); /* x = uv^7 */ - - # fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */ - # fe_mul(h->X,h->X,v3); - # fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */ - $h->X = self::fe_pow22523($h->X); /* x = (uv^7)^((q-5)/8) */ - $h->X = self::fe_mul($h->X, $v3); - $h->X = self::fe_mul($h->X, $u); /* x = uv^3(uv^7)^((q-5)/8) */ - - # fe_sq(vxx,h->X); - # fe_mul(vxx,vxx,v); - # fe_sub(check,vxx,u); /* vx^2-u */ - $vxx = self::fe_sq($h->X); - $vxx = self::fe_mul($vxx, $v); - $check = self::fe_sub($vxx, $u); /* vx^2 - u */ - - # if (fe_isnonzero(check)) { - # fe_add(check,vxx,u); /* vx^2+u */ - # if (fe_isnonzero(check)) { - # return -1; - # } - # fe_mul(h->X,h->X,sqrtm1); - # } - if (self::fe_isnonzero($check)) { - $check = self::fe_add($vxx, $u); /* vx^2 + u */ - if (self::fe_isnonzero($check)) { - throw new RangeException('Internal check failed.'); - } - $h->X = self::fe_mul( - $h->X, - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$sqrtm1) - ); - } - - # if (fe_isnegative(h->X) == (s[31] >> 7)) { - # fe_neg(h->X,h->X); - # } - $i = self::chrToInt($s[31]); - if (self::fe_isnegative($h->X) === ($i >> 7)) { - $h->X = self::fe_neg($h->X); - } - - # fe_mul(h->T,h->X,h->Y); - $h->T = self::fe_mul($h->X, $h->Y); - return $h; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_madd( - ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R, - ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q - ) { - $r = clone $R; - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->yplusx); - $r->Y = self::fe_mul($r->Y, $q->yminusx); - $r->T = self::fe_mul($q->xy2d, $p->T); - $t0 = self::fe_add(clone $p->Z, clone $p->Z); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_add($t0, $r->T); - $r->T = self::fe_sub($t0, $r->T); - - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_msub( - ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $R, - ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $q - ) { - $r = clone $R; - - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->yminusx); - $r->Y = self::fe_mul($r->Y, $q->yplusx); - $r->T = self::fe_mul($q->xy2d, $p->T); - $t0 = self::fe_add($p->Z, $p->Z); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_sub($t0, $r->T); - $r->T = self::fe_add($t0, $r->T); - - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 - */ - public static function ge_p1p1_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p) - { - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P2(); - $r->X = self::fe_mul($p->X, $p->T); - $r->Y = self::fe_mul($p->Y, $p->Z); - $r->Z = self::fe_mul($p->Z, $p->T); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - */ - public static function ge_p1p1_to_p3(ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 $p) - { - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P3(); - $r->X = self::fe_mul($p->X, $p->T); - $r->Y = self::fe_mul($p->Y, $p->Z); - $r->Z = self::fe_mul($p->Z, $p->T); - $r->T = self::fe_mul($p->X, $p->Y); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 - */ - public static function ge_p2_0() - { - return new ParagonIE_Sodium_Core_Curve25519_Ge_P2( - self::fe_0(), - self::fe_1(), - self::fe_1() - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_p2_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $p) - { - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); - - $r->X = self::fe_sq($p->X); - $r->Z = self::fe_sq($p->Y); - $r->T = self::fe_sq2($p->Z); - $r->Y = self::fe_add($p->X, $p->Y); - $t0 = self::fe_sq($r->Y); - $r->Y = self::fe_add($r->Z, $r->X); - $r->Z = self::fe_sub($r->Z, $r->X); - $r->X = self::fe_sub($t0, $r->Y); - $r->T = self::fe_sub($r->T, $r->Z); - - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - */ - public static function ge_p3_0() - { - return new ParagonIE_Sodium_Core_Curve25519_Ge_P3( - self::fe_0(), - self::fe_1(), - self::fe_1(), - self::fe_0() - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached - */ - public static function ge_p3_to_cached(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) - { - static $d2 = null; - if ($d2 === null) { - $d2 = ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$d2); - } - /** @var ParagonIE_Sodium_Core_Curve25519_Fe $d2 */ - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(); - $r->YplusX = self::fe_add($p->Y, $p->X); - $r->YminusX = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_copy($p->Z); - $r->T2d = self::fe_mul($p->T, $d2); - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 - */ - public static function ge_p3_to_p2(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) - { - return new ParagonIE_Sodium_Core_Curve25519_Ge_P2( - self::fe_copy($p->X), - self::fe_copy($p->Y), - self::fe_copy($p->Z) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function ge_p3_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $h) - { - $recip = self::fe_invert($h->Z); - $x = self::fe_mul($h->X, $recip); - $y = self::fe_mul($h->Y, $recip); - $s = self::fe_tobytes($y); - $s[31] = self::intToChr( - self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) - ); - return $s; - } - - /** - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_p3_dbl(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p) - { - $q = self::ge_p3_to_p2($p); - return self::ge_p2_dbl($q); - } - - /** - * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp - */ - public static function ge_precomp_0() - { - return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( - self::fe_1(), - self::fe_1(), - self::fe_0() - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $b - * @param int $c - * @return int - */ - public static function equal($b, $c) - { - return (int) ((($b ^ $c) - 1) >> 31) & 1; - } - - /** - * @internal You should not use this directly from another application - * - * @param int|string $char - * @return int (1 = yes, 0 = no) - * @throws SodiumException - * @throws TypeError - */ - public static function negative($char) - { - if (is_int($char)) { - return ($char >> 63) & 1; - } - $x = self::chrToInt(self::substr($char, 0, 1)); - return (int) ($x >> 63); - } - - /** - * Conditional move - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u - * @param int $b - * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp - */ - public static function cmov( - ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $t, - ParagonIE_Sodium_Core_Curve25519_Ge_Precomp $u, - $b - ) { - if (!is_int($b)) { - throw new InvalidArgumentException('Expected an integer.'); - } - return new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( - self::fe_cmov($t->yplusx, $u->yplusx, $b), - self::fe_cmov($t->yminusx, $u->yminusx, $b), - self::fe_cmov($t->xy2d, $u->xy2d, $b) - ); - } - - /** - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $t - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $u - * @param int $b - * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached - */ - public static function ge_cmov_cached( - ParagonIE_Sodium_Core_Curve25519_Ge_Cached $t, - ParagonIE_Sodium_Core_Curve25519_Ge_Cached $u, - $b - ) { - $b &= 1; - $ret = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached(); - $ret->YplusX = self::fe_cmov($t->YplusX, $u->YplusX, $b); - $ret->YminusX = self::fe_cmov($t->YminusX, $u->YminusX, $b); - $ret->Z = self::fe_cmov($t->Z, $u->Z, $b); - $ret->T2d = self::fe_cmov($t->T2d, $u->T2d, $b); - return $ret; - } - - /** - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached[] $cached - * @param int $b - * @return ParagonIE_Sodium_Core_Curve25519_Ge_Cached - * @throws SodiumException - */ - public static function ge_cmov8_cached(array $cached, $b) - { - // const unsigned char bnegative = negative(b); - // const unsigned char babs = b - (((-bnegative) & b) * ((signed char) 1 << 1)); - $bnegative = self::negative($b); - $babs = $b - (((-$bnegative) & $b) << 1); - - // ge25519_cached_0(t); - $t = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached( - self::fe_1(), - self::fe_1(), - self::fe_1(), - self::fe_0() - ); - - // ge25519_cmov_cached(t, &cached[0], equal(babs, 1)); - // ge25519_cmov_cached(t, &cached[1], equal(babs, 2)); - // ge25519_cmov_cached(t, &cached[2], equal(babs, 3)); - // ge25519_cmov_cached(t, &cached[3], equal(babs, 4)); - // ge25519_cmov_cached(t, &cached[4], equal(babs, 5)); - // ge25519_cmov_cached(t, &cached[5], equal(babs, 6)); - // ge25519_cmov_cached(t, &cached[6], equal(babs, 7)); - // ge25519_cmov_cached(t, &cached[7], equal(babs, 8)); - for ($x = 0; $x < 8; ++$x) { - $t = self::ge_cmov_cached($t, $cached[$x], self::equal($babs, $x + 1)); - } - - // fe25519_copy(minust.YplusX, t->YminusX); - // fe25519_copy(minust.YminusX, t->YplusX); - // fe25519_copy(minust.Z, t->Z); - // fe25519_neg(minust.T2d, t->T2d); - $minust = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached( - self::fe_copy($t->YminusX), - self::fe_copy($t->YplusX), - self::fe_copy($t->Z), - self::fe_neg($t->T2d) - ); - return self::ge_cmov_cached($t, $minust, $bnegative); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $pos - * @param int $b - * @return ParagonIE_Sodium_Core_Curve25519_Ge_Precomp - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayAccess - * @psalm-suppress MixedArrayOffset - */ - public static function ge_select($pos = 0, $b = 0) - { - static $base = null; - if ($base === null) { - $base = array(); - /** @var int $i */ - foreach (self::$base as $i => $bas) { - for ($j = 0; $j < 8; ++$j) { - $base[$i][$j] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][0]), - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][1]), - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray($bas[$j][2]) - ); - } - } - } - /** @var array> $base */ - if (!is_int($pos)) { - throw new InvalidArgumentException('Position must be an integer'); - } - if ($pos < 0 || $pos > 31) { - throw new RangeException('Position is out of range [0, 31]'); - } - - $bnegative = self::negative($b); - $babs = $b - (((-$bnegative) & $b) << 1); - - $t = self::ge_precomp_0(); - for ($i = 0; $i < 8; ++$i) { - $t = self::cmov( - $t, - $base[$pos][$i], - self::equal($babs, $i + 1) - ); - } - $minusT = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( - self::fe_copy($t->yminusx), - self::fe_copy($t->yplusx), - self::fe_neg($t->xy2d) - ); - return self::cmov($t, $minusT, $bnegative); - } - - /** - * Subtract two group elements. - * - * r = p - q - * - * @internal You should not use this directly from another application - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @param ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P1p1 - */ - public static function ge_sub( - ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p, - ParagonIE_Sodium_Core_Curve25519_Ge_Cached $q - ) { - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); - - $r->X = self::fe_add($p->Y, $p->X); - $r->Y = self::fe_sub($p->Y, $p->X); - $r->Z = self::fe_mul($r->X, $q->YminusX); - $r->Y = self::fe_mul($r->Y, $q->YplusX); - $r->T = self::fe_mul($q->T2d, $p->T); - $r->X = self::fe_mul($p->Z, $q->Z); - $t0 = self::fe_add($r->X, $r->X); - $r->X = self::fe_sub($r->Z, $r->Y); - $r->Y = self::fe_add($r->Z, $r->Y); - $r->Z = self::fe_sub($t0, $r->T); - $r->T = self::fe_add($t0, $r->T); - - return $r; - } - - /** - * Convert a group element to a byte string. - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function ge_tobytes(ParagonIE_Sodium_Core_Curve25519_Ge_P2 $h) - { - $recip = self::fe_invert($h->Z); - $x = self::fe_mul($h->X, $recip); - $y = self::fe_mul($h->Y, $recip); - $s = self::fe_tobytes($y); - $s[31] = self::intToChr( - self::chrToInt($s[31]) ^ (self::fe_isnegative($x) << 7) - ); - return $s; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $a - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A - * @param string $b - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P2 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedArgument - * @psalm-suppress MixedArrayAccess - */ - public static function ge_double_scalarmult_vartime( - $a, - ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A, - $b - ) { - /** @var array $Ai */ - $Ai = array(); - - /** @var array $Bi */ - static $Bi = array(); - if (!$Bi) { - for ($i = 0; $i < 8; ++$i) { - $Bi[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Precomp( - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][0]), - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][1]), - ParagonIE_Sodium_Core_Curve25519_Fe::fromArray(self::$base2[$i][2]) - ); - } - } - for ($i = 0; $i < 8; ++$i) { - $Ai[$i] = new ParagonIE_Sodium_Core_Curve25519_Ge_Cached( - self::fe_0(), - self::fe_0(), - self::fe_0(), - self::fe_0() - ); - } - - # slide(aslide,a); - # slide(bslide,b); - /** @var array $aslide */ - $aslide = self::slide($a); - /** @var array $bslide */ - $bslide = self::slide($b); - - # ge_p3_to_cached(&Ai[0],A); - # ge_p3_dbl(&t,A); ge_p1p1_to_p3(&A2,&t); - $Ai[0] = self::ge_p3_to_cached($A); - $t = self::ge_p3_dbl($A); - $A2 = self::ge_p1p1_to_p3($t); - - # ge_add(&t,&A2,&Ai[0]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[1],&u); - # ge_add(&t,&A2,&Ai[1]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[2],&u); - # ge_add(&t,&A2,&Ai[2]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[3],&u); - # ge_add(&t,&A2,&Ai[3]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[4],&u); - # ge_add(&t,&A2,&Ai[4]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[5],&u); - # ge_add(&t,&A2,&Ai[5]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[6],&u); - # ge_add(&t,&A2,&Ai[6]); ge_p1p1_to_p3(&u,&t); ge_p3_to_cached(&Ai[7],&u); - for ($i = 0; $i < 7; ++$i) { - $t = self::ge_add($A2, $Ai[$i]); - $u = self::ge_p1p1_to_p3($t); - $Ai[$i + 1] = self::ge_p3_to_cached($u); - } - - # ge_p2_0(r); - $r = self::ge_p2_0(); - - # for (i = 255;i >= 0;--i) { - # if (aslide[i] || bslide[i]) break; - # } - $i = 255; - for (; $i >= 0; --$i) { - if ($aslide[$i] || $bslide[$i]) { - break; - } - } - - # for (;i >= 0;--i) { - for (; $i >= 0; --$i) { - # ge_p2_dbl(&t,r); - $t = self::ge_p2_dbl($r); - - # if (aslide[i] > 0) { - if ($aslide[$i] > 0) { - # ge_p1p1_to_p3(&u,&t); - # ge_add(&t,&u,&Ai[aslide[i]/2]); - $u = self::ge_p1p1_to_p3($t); - $t = self::ge_add( - $u, - $Ai[(int) floor($aslide[$i] / 2)] - ); - # } else if (aslide[i] < 0) { - } elseif ($aslide[$i] < 0) { - # ge_p1p1_to_p3(&u,&t); - # ge_sub(&t,&u,&Ai[(-aslide[i])/2]); - $u = self::ge_p1p1_to_p3($t); - $t = self::ge_sub( - $u, - $Ai[(int) floor(-$aslide[$i] / 2)] - ); - } - - # if (bslide[i] > 0) { - if ($bslide[$i] > 0) { - /** @var int $index */ - $index = (int) floor($bslide[$i] / 2); - # ge_p1p1_to_p3(&u,&t); - # ge_madd(&t,&u,&Bi[bslide[i]/2]); - $u = self::ge_p1p1_to_p3($t); - $t = self::ge_madd($t, $u, $Bi[$index]); - # } else if (bslide[i] < 0) { - } elseif ($bslide[$i] < 0) { - /** @var int $index */ - $index = (int) floor(-$bslide[$i] / 2); - # ge_p1p1_to_p3(&u,&t); - # ge_msub(&t,&u,&Bi[(-bslide[i])/2]); - $u = self::ge_p1p1_to_p3($t); - $t = self::ge_msub($t, $u, $Bi[$index]); - } - # ge_p1p1_to_p2(r,&t); - $r = self::ge_p1p1_to_p2($t); - } - return $r; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $a - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $p - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedOperand - */ - public static function ge_scalarmult($a, $p) - { - $e = array_fill(0, 64, 0); - - /** @var ParagonIE_Sodium_Core_Curve25519_Ge_Cached[] $pi */ - $pi = array(); - - // ge25519_p3_to_cached(&pi[1 - 1], p); /* p */ - $pi[0] = self::ge_p3_to_cached($p); - - // ge25519_p3_dbl(&t2, p); - // ge25519_p1p1_to_p3(&p2, &t2); - // ge25519_p3_to_cached(&pi[2 - 1], &p2); /* 2p = 2*p */ - $t2 = self::ge_p3_dbl($p); - $p2 = self::ge_p1p1_to_p3($t2); - $pi[1] = self::ge_p3_to_cached($p2); - - // ge25519_add_cached(&t3, p, &pi[2 - 1]); - // ge25519_p1p1_to_p3(&p3, &t3); - // ge25519_p3_to_cached(&pi[3 - 1], &p3); /* 3p = 2p+p */ - $t3 = self::ge_add($p, $pi[1]); - $p3 = self::ge_p1p1_to_p3($t3); - $pi[2] = self::ge_p3_to_cached($p3); - - // ge25519_p3_dbl(&t4, &p2); - // ge25519_p1p1_to_p3(&p4, &t4); - // ge25519_p3_to_cached(&pi[4 - 1], &p4); /* 4p = 2*2p */ - $t4 = self::ge_p3_dbl($p2); - $p4 = self::ge_p1p1_to_p3($t4); - $pi[3] = self::ge_p3_to_cached($p4); - - // ge25519_add_cached(&t5, p, &pi[4 - 1]); - // ge25519_p1p1_to_p3(&p5, &t5); - // ge25519_p3_to_cached(&pi[5 - 1], &p5); /* 5p = 4p+p */ - $t5 = self::ge_add($p, $pi[3]); - $p5 = self::ge_p1p1_to_p3($t5); - $pi[4] = self::ge_p3_to_cached($p5); - - // ge25519_p3_dbl(&t6, &p3); - // ge25519_p1p1_to_p3(&p6, &t6); - // ge25519_p3_to_cached(&pi[6 - 1], &p6); /* 6p = 2*3p */ - $t6 = self::ge_p3_dbl($p3); - $p6 = self::ge_p1p1_to_p3($t6); - $pi[5] = self::ge_p3_to_cached($p6); - - // ge25519_add_cached(&t7, p, &pi[6 - 1]); - // ge25519_p1p1_to_p3(&p7, &t7); - // ge25519_p3_to_cached(&pi[7 - 1], &p7); /* 7p = 6p+p */ - $t7 = self::ge_add($p, $pi[5]); - $p7 = self::ge_p1p1_to_p3($t7); - $pi[6] = self::ge_p3_to_cached($p7); - - // ge25519_p3_dbl(&t8, &p4); - // ge25519_p1p1_to_p3(&p8, &t8); - // ge25519_p3_to_cached(&pi[8 - 1], &p8); /* 8p = 2*4p */ - $t8 = self::ge_p3_dbl($p4); - $p8 = self::ge_p1p1_to_p3($t8); - $pi[7] = self::ge_p3_to_cached($p8); - - - // for (i = 0; i < 32; ++i) { - // e[2 * i + 0] = (a[i] >> 0) & 15; - // e[2 * i + 1] = (a[i] >> 4) & 15; - // } - for ($i = 0; $i < 32; ++$i) { - $e[($i << 1) ] = self::chrToInt($a[$i]) & 15; - $e[($i << 1) + 1] = (self::chrToInt($a[$i]) >> 4) & 15; - } - // /* each e[i] is between 0 and 15 */ - // /* e[63] is between 0 and 7 */ - - // carry = 0; - // for (i = 0; i < 63; ++i) { - // e[i] += carry; - // carry = e[i] + 8; - // carry >>= 4; - // e[i] -= carry * ((signed char) 1 << 4); - // } - $carry = 0; - for ($i = 0; $i < 63; ++$i) { - $e[$i] += $carry; - $carry = $e[$i] + 8; - $carry >>= 4; - $e[$i] -= $carry << 4; - } - // e[63] += carry; - // /* each e[i] is between -8 and 8 */ - $e[63] += $carry; - - // ge25519_p3_0(h); - $h = self::ge_p3_0(); - - // for (i = 63; i != 0; i--) { - for ($i = 63; $i != 0; --$i) { - // ge25519_cmov8_cached(&t, pi, e[i]); - $t = self::ge_cmov8_cached($pi, $e[$i]); - // ge25519_add_cached(&r, h, &t); - $r = self::ge_add($h, $t); - - // ge25519_p1p1_to_p2(&s, &r); - // ge25519_p2_dbl(&r, &s); - // ge25519_p1p1_to_p2(&s, &r); - // ge25519_p2_dbl(&r, &s); - // ge25519_p1p1_to_p2(&s, &r); - // ge25519_p2_dbl(&r, &s); - // ge25519_p1p1_to_p2(&s, &r); - // ge25519_p2_dbl(&r, &s); - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - - // ge25519_p1p1_to_p3(h, &r); /* *16 */ - $h = self::ge_p1p1_to_p3($r); /* *16 */ - } - - // ge25519_cmov8_cached(&t, pi, e[i]); - // ge25519_add_cached(&r, h, &t); - // ge25519_p1p1_to_p3(h, &r); - $t = self::ge_cmov8_cached($pi, $e[0]); - $r = self::ge_add($h, $t); - return self::ge_p1p1_to_p3($r); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $a - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - * @throws SodiumException - * @throws TypeError - * @psalm-suppress MixedAssignment - * @psalm-suppress MixedOperand - */ - public static function ge_scalarmult_base($a) - { - /** @var array $e */ - $e = array(); - $r = new ParagonIE_Sodium_Core_Curve25519_Ge_P1p1(); - - for ($i = 0; $i < 32; ++$i) { - $dbl = (int) $i << 1; - $e[$dbl] = (int) self::chrToInt($a[$i]) & 15; - $e[$dbl + 1] = (int) (self::chrToInt($a[$i]) >> 4) & 15; - } - - $carry = 0; - for ($i = 0; $i < 63; ++$i) { - $e[$i] += $carry; - $carry = $e[$i] + 8; - $carry >>= 4; - $e[$i] -= $carry << 4; - } - $e[63] += (int) $carry; - - $h = self::ge_p3_0(); - - for ($i = 1; $i < 64; $i += 2) { - $t = self::ge_select((int) floor($i / 2), (int) $e[$i]); - $r = self::ge_madd($r, $h, $t); - $h = self::ge_p1p1_to_p3($r); - } - - $r = self::ge_p3_dbl($h); - - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - $s = self::ge_p1p1_to_p2($r); - $r = self::ge_p2_dbl($s); - - $h = self::ge_p1p1_to_p3($r); - - for ($i = 0; $i < 64; $i += 2) { - $t = self::ge_select($i >> 1, (int) $e[$i]); - $r = self::ge_madd($r, $h, $t); - $h = self::ge_p1p1_to_p3($r); - } - return $h; - } - - /** - * Calculates (ab + c) mod l - * where l = 2^252 + 27742317777372353535851937790883648493 - * - * @internal You should not use this directly from another application - * - * @param string $a - * @param string $b - * @param string $c - * @return string - * @throws TypeError - */ - public static function sc_muladd($a, $b, $c) - { - $a0 = 2097151 & self::load_3(self::substr($a, 0, 3)); - $a1 = 2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5); - $a2 = 2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2); - $a3 = 2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7); - $a4 = 2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4); - $a5 = 2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1); - $a6 = 2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6); - $a7 = 2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3); - $a8 = 2097151 & self::load_3(self::substr($a, 21, 3)); - $a9 = 2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5); - $a10 = 2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2); - $a11 = (self::load_4(self::substr($a, 28, 4)) >> 7); - - $b0 = 2097151 & self::load_3(self::substr($b, 0, 3)); - $b1 = 2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5); - $b2 = 2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2); - $b3 = 2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7); - $b4 = 2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4); - $b5 = 2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1); - $b6 = 2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6); - $b7 = 2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3); - $b8 = 2097151 & self::load_3(self::substr($b, 21, 3)); - $b9 = 2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5); - $b10 = 2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2); - $b11 = (self::load_4(self::substr($b, 28, 4)) >> 7); - - $c0 = 2097151 & self::load_3(self::substr($c, 0, 3)); - $c1 = 2097151 & (self::load_4(self::substr($c, 2, 4)) >> 5); - $c2 = 2097151 & (self::load_3(self::substr($c, 5, 3)) >> 2); - $c3 = 2097151 & (self::load_4(self::substr($c, 7, 4)) >> 7); - $c4 = 2097151 & (self::load_4(self::substr($c, 10, 4)) >> 4); - $c5 = 2097151 & (self::load_3(self::substr($c, 13, 3)) >> 1); - $c6 = 2097151 & (self::load_4(self::substr($c, 15, 4)) >> 6); - $c7 = 2097151 & (self::load_3(self::substr($c, 18, 3)) >> 3); - $c8 = 2097151 & self::load_3(self::substr($c, 21, 3)); - $c9 = 2097151 & (self::load_4(self::substr($c, 23, 4)) >> 5); - $c10 = 2097151 & (self::load_3(self::substr($c, 26, 3)) >> 2); - $c11 = (self::load_4(self::substr($c, 28, 4)) >> 7); - - /* Can't really avoid the pyramid here: */ - $s0 = $c0 + self::mul($a0, $b0, 24); - $s1 = $c1 + self::mul($a0, $b1, 24) + self::mul($a1, $b0, 24); - $s2 = $c2 + self::mul($a0, $b2, 24) + self::mul($a1, $b1, 24) + self::mul($a2, $b0, 24); - $s3 = $c3 + self::mul($a0, $b3, 24) + self::mul($a1, $b2, 24) + self::mul($a2, $b1, 24) + self::mul($a3, $b0, 24); - $s4 = $c4 + self::mul($a0, $b4, 24) + self::mul($a1, $b3, 24) + self::mul($a2, $b2, 24) + self::mul($a3, $b1, 24) + - self::mul($a4, $b0, 24); - $s5 = $c5 + self::mul($a0, $b5, 24) + self::mul($a1, $b4, 24) + self::mul($a2, $b3, 24) + self::mul($a3, $b2, 24) + - self::mul($a4, $b1, 24) + self::mul($a5, $b0, 24); - $s6 = $c6 + self::mul($a0, $b6, 24) + self::mul($a1, $b5, 24) + self::mul($a2, $b4, 24) + self::mul($a3, $b3, 24) + - self::mul($a4, $b2, 24) + self::mul($a5, $b1, 24) + self::mul($a6, $b0, 24); - $s7 = $c7 + self::mul($a0, $b7, 24) + self::mul($a1, $b6, 24) + self::mul($a2, $b5, 24) + self::mul($a3, $b4, 24) + - self::mul($a4, $b3, 24) + self::mul($a5, $b2, 24) + self::mul($a6, $b1, 24) + self::mul($a7, $b0, 24); - $s8 = $c8 + self::mul($a0, $b8, 24) + self::mul($a1, $b7, 24) + self::mul($a2, $b6, 24) + self::mul($a3, $b5, 24) + - self::mul($a4, $b4, 24) + self::mul($a5, $b3, 24) + self::mul($a6, $b2, 24) + self::mul($a7, $b1, 24) + - self::mul($a8, $b0, 24); - $s9 = $c9 + self::mul($a0, $b9, 24) + self::mul($a1, $b8, 24) + self::mul($a2, $b7, 24) + self::mul($a3, $b6, 24) + - self::mul($a4, $b5, 24) + self::mul($a5, $b4, 24) + self::mul($a6, $b3, 24) + self::mul($a7, $b2, 24) + - self::mul($a8, $b1, 24) + self::mul($a9, $b0, 24); - $s10 = $c10 + self::mul($a0, $b10, 24) + self::mul($a1, $b9, 24) + self::mul($a2, $b8, 24) + self::mul($a3, $b7, 24) + - self::mul($a4, $b6, 24) + self::mul($a5, $b5, 24) + self::mul($a6, $b4, 24) + self::mul($a7, $b3, 24) + - self::mul($a8, $b2, 24) + self::mul($a9, $b1, 24) + self::mul($a10, $b0, 24); - $s11 = $c11 + self::mul($a0, $b11, 24) + self::mul($a1, $b10, 24) + self::mul($a2, $b9, 24) + self::mul($a3, $b8, 24) + - self::mul($a4, $b7, 24) + self::mul($a5, $b6, 24) + self::mul($a6, $b5, 24) + self::mul($a7, $b4, 24) + - self::mul($a8, $b3, 24) + self::mul($a9, $b2, 24) + self::mul($a10, $b1, 24) + self::mul($a11, $b0, 24); - $s12 = self::mul($a1, $b11, 24) + self::mul($a2, $b10, 24) + self::mul($a3, $b9, 24) + self::mul($a4, $b8, 24) + - self::mul($a5, $b7, 24) + self::mul($a6, $b6, 24) + self::mul($a7, $b5, 24) + self::mul($a8, $b4, 24) + - self::mul($a9, $b3, 24) + self::mul($a10, $b2, 24) + self::mul($a11, $b1, 24); - $s13 = self::mul($a2, $b11, 24) + self::mul($a3, $b10, 24) + self::mul($a4, $b9, 24) + self::mul($a5, $b8, 24) + - self::mul($a6, $b7, 24) + self::mul($a7, $b6, 24) + self::mul($a8, $b5, 24) + self::mul($a9, $b4, 24) + - self::mul($a10, $b3, 24) + self::mul($a11, $b2, 24); - $s14 = self::mul($a3, $b11, 24) + self::mul($a4, $b10, 24) + self::mul($a5, $b9, 24) + self::mul($a6, $b8, 24) + - self::mul($a7, $b7, 24) + self::mul($a8, $b6, 24) + self::mul($a9, $b5, 24) + self::mul($a10, $b4, 24) + - self::mul($a11, $b3, 24); - $s15 = self::mul($a4, $b11, 24) + self::mul($a5, $b10, 24) + self::mul($a6, $b9, 24) + self::mul($a7, $b8, 24) + - self::mul($a8, $b7, 24) + self::mul($a9, $b6, 24) + self::mul($a10, $b5, 24) + self::mul($a11, $b4, 24); - $s16 = self::mul($a5, $b11, 24) + self::mul($a6, $b10, 24) + self::mul($a7, $b9, 24) + self::mul($a8, $b8, 24) + - self::mul($a9, $b7, 24) + self::mul($a10, $b6, 24) + self::mul($a11, $b5, 24); - $s17 = self::mul($a6, $b11, 24) + self::mul($a7, $b10, 24) + self::mul($a8, $b9, 24) + self::mul($a9, $b8, 24) + - self::mul($a10, $b7, 24) + self::mul($a11, $b6, 24); - $s18 = self::mul($a7, $b11, 24) + self::mul($a8, $b10, 24) + self::mul($a9, $b9, 24) + self::mul($a10, $b8, 24) + - self::mul($a11, $b7, 24); - $s19 = self::mul($a8, $b11, 24) + self::mul($a9, $b10, 24) + self::mul($a10, $b9, 24) + self::mul($a11, $b8, 24); - $s20 = self::mul($a9, $b11, 24) + self::mul($a10, $b10, 24) + self::mul($a11, $b9, 24); - $s21 = self::mul($a10, $b11, 24) + self::mul($a11, $b10, 24); - $s22 = self::mul($a11, $b11, 24); - $s23 = 0; - - $carry0 = ($s0 + (1 << 20)) >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - $carry2 = ($s2 + (1 << 20)) >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - $carry4 = ($s4 + (1 << 20)) >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - $carry12 = ($s12 + (1 << 20)) >> 21; - $s13 += $carry12; - $s12 -= $carry12 << 21; - $carry14 = ($s14 + (1 << 20)) >> 21; - $s15 += $carry14; - $s14 -= $carry14 << 21; - $carry16 = ($s16 + (1 << 20)) >> 21; - $s17 += $carry16; - $s16 -= $carry16 << 21; - $carry18 = ($s18 + (1 << 20)) >> 21; - $s19 += $carry18; - $s18 -= $carry18 << 21; - $carry20 = ($s20 + (1 << 20)) >> 21; - $s21 += $carry20; - $s20 -= $carry20 << 21; - $carry22 = ($s22 + (1 << 20)) >> 21; - $s23 += $carry22; - $s22 -= $carry22 << 21; - - $carry1 = ($s1 + (1 << 20)) >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - $carry3 = ($s3 + (1 << 20)) >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - $carry5 = ($s5 + (1 << 20)) >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - $carry13 = ($s13 + (1 << 20)) >> 21; - $s14 += $carry13; - $s13 -= $carry13 << 21; - $carry15 = ($s15 + (1 << 20)) >> 21; - $s16 += $carry15; - $s15 -= $carry15 << 21; - $carry17 = ($s17 + (1 << 20)) >> 21; - $s18 += $carry17; - $s17 -= $carry17 << 21; - $carry19 = ($s19 + (1 << 20)) >> 21; - $s20 += $carry19; - $s19 -= $carry19 << 21; - $carry21 = ($s21 + (1 << 20)) >> 21; - $s22 += $carry21; - $s21 -= $carry21 << 21; - - $s11 += self::mul($s23, 666643, 20); - $s12 += self::mul($s23, 470296, 19); - $s13 += self::mul($s23, 654183, 20); - $s14 -= self::mul($s23, 997805, 20); - $s15 += self::mul($s23, 136657, 18); - $s16 -= self::mul($s23, 683901, 20); - - $s10 += self::mul($s22, 666643, 20); - $s11 += self::mul($s22, 470296, 19); - $s12 += self::mul($s22, 654183, 20); - $s13 -= self::mul($s22, 997805, 20); - $s14 += self::mul($s22, 136657, 18); - $s15 -= self::mul($s22, 683901, 20); - - $s9 += self::mul($s21, 666643, 20); - $s10 += self::mul($s21, 470296, 19); - $s11 += self::mul($s21, 654183, 20); - $s12 -= self::mul($s21, 997805, 20); - $s13 += self::mul($s21, 136657, 18); - $s14 -= self::mul($s21, 683901, 20); - - $s8 += self::mul($s20, 666643, 20); - $s9 += self::mul($s20, 470296, 19); - $s10 += self::mul($s20, 654183, 20); - $s11 -= self::mul($s20, 997805, 20); - $s12 += self::mul($s20, 136657, 18); - $s13 -= self::mul($s20, 683901, 20); - - $s7 += self::mul($s19, 666643, 20); - $s8 += self::mul($s19, 470296, 19); - $s9 += self::mul($s19, 654183, 20); - $s10 -= self::mul($s19, 997805, 20); - $s11 += self::mul($s19, 136657, 18); - $s12 -= self::mul($s19, 683901, 20); - - $s6 += self::mul($s18, 666643, 20); - $s7 += self::mul($s18, 470296, 19); - $s8 += self::mul($s18, 654183, 20); - $s9 -= self::mul($s18, 997805, 20); - $s10 += self::mul($s18, 136657, 18); - $s11 -= self::mul($s18, 683901, 20); - - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - $carry12 = ($s12 + (1 << 20)) >> 21; - $s13 += $carry12; - $s12 -= $carry12 << 21; - $carry14 = ($s14 + (1 << 20)) >> 21; - $s15 += $carry14; - $s14 -= $carry14 << 21; - $carry16 = ($s16 + (1 << 20)) >> 21; - $s17 += $carry16; - $s16 -= $carry16 << 21; - - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - $carry13 = ($s13 + (1 << 20)) >> 21; - $s14 += $carry13; - $s13 -= $carry13 << 21; - $carry15 = ($s15 + (1 << 20)) >> 21; - $s16 += $carry15; - $s15 -= $carry15 << 21; - - $s5 += self::mul($s17, 666643, 20); - $s6 += self::mul($s17, 470296, 19); - $s7 += self::mul($s17, 654183, 20); - $s8 -= self::mul($s17, 997805, 20); - $s9 += self::mul($s17, 136657, 18); - $s10 -= self::mul($s17, 683901, 20); - - $s4 += self::mul($s16, 666643, 20); - $s5 += self::mul($s16, 470296, 19); - $s6 += self::mul($s16, 654183, 20); - $s7 -= self::mul($s16, 997805, 20); - $s8 += self::mul($s16, 136657, 18); - $s9 -= self::mul($s16, 683901, 20); - - $s3 += self::mul($s15, 666643, 20); - $s4 += self::mul($s15, 470296, 19); - $s5 += self::mul($s15, 654183, 20); - $s6 -= self::mul($s15, 997805, 20); - $s7 += self::mul($s15, 136657, 18); - $s8 -= self::mul($s15, 683901, 20); - - $s2 += self::mul($s14, 666643, 20); - $s3 += self::mul($s14, 470296, 19); - $s4 += self::mul($s14, 654183, 20); - $s5 -= self::mul($s14, 997805, 20); - $s6 += self::mul($s14, 136657, 18); - $s7 -= self::mul($s14, 683901, 20); - - $s1 += self::mul($s13, 666643, 20); - $s2 += self::mul($s13, 470296, 19); - $s3 += self::mul($s13, 654183, 20); - $s4 -= self::mul($s13, 997805, 20); - $s5 += self::mul($s13, 136657, 18); - $s6 -= self::mul($s13, 683901, 20); - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - $s12 = 0; - - $carry0 = ($s0 + (1 << 20)) >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - $carry2 = ($s2 + (1 << 20)) >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - $carry4 = ($s4 + (1 << 20)) >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - - $carry1 = ($s1 + (1 << 20)) >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - $carry3 = ($s3 + (1 << 20)) >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - $carry5 = ($s5 + (1 << 20)) >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - $s12 = 0; - - $carry0 = $s0 >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - $carry1 = $s1 >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - $carry2 = $s2 >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - $carry3 = $s3 >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - $carry4 = $s4 >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - $carry5 = $s5 >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - $carry6 = $s6 >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - $carry7 = $s7 >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - $carry8 = $s8 >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - $carry9 = $s9 >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - $carry10 = $s10 >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - $carry11 = $s11 >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - - $carry0 = $s0 >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - $carry1 = $s1 >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - $carry2 = $s2 >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - $carry3 = $s3 >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - $carry4 = $s4 >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - $carry5 = $s5 >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - $carry6 = $s6 >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - $carry7 = $s7 >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - $carry8 = $s8 >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - $carry9 = $s9 >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - $carry10 = $s10 >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - - /** - * @var array - */ - $arr = array( - (int) (0xff & ($s0 >> 0)), - (int) (0xff & ($s0 >> 8)), - (int) (0xff & (($s0 >> 16) | $s1 << 5)), - (int) (0xff & ($s1 >> 3)), - (int) (0xff & ($s1 >> 11)), - (int) (0xff & (($s1 >> 19) | $s2 << 2)), - (int) (0xff & ($s2 >> 6)), - (int) (0xff & (($s2 >> 14) | $s3 << 7)), - (int) (0xff & ($s3 >> 1)), - (int) (0xff & ($s3 >> 9)), - (int) (0xff & (($s3 >> 17) | $s4 << 4)), - (int) (0xff & ($s4 >> 4)), - (int) (0xff & ($s4 >> 12)), - (int) (0xff & (($s4 >> 20) | $s5 << 1)), - (int) (0xff & ($s5 >> 7)), - (int) (0xff & (($s5 >> 15) | $s6 << 6)), - (int) (0xff & ($s6 >> 2)), - (int) (0xff & ($s6 >> 10)), - (int) (0xff & (($s6 >> 18) | $s7 << 3)), - (int) (0xff & ($s7 >> 5)), - (int) (0xff & ($s7 >> 13)), - (int) (0xff & ($s8 >> 0)), - (int) (0xff & ($s8 >> 8)), - (int) (0xff & (($s8 >> 16) | $s9 << 5)), - (int) (0xff & ($s9 >> 3)), - (int) (0xff & ($s9 >> 11)), - (int) (0xff & (($s9 >> 19) | $s10 << 2)), - (int) (0xff & ($s10 >> 6)), - (int) (0xff & (($s10 >> 14) | $s11 << 7)), - (int) (0xff & ($s11 >> 1)), - (int) (0xff & ($s11 >> 9)), - 0xff & ($s11 >> 17) - ); - return self::intArrayToString($arr); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $s - * @return string - * @throws TypeError - */ - public static function sc_reduce($s) - { - $s0 = 2097151 & self::load_3(self::substr($s, 0, 3)); - $s1 = 2097151 & (self::load_4(self::substr($s, 2, 4)) >> 5); - $s2 = 2097151 & (self::load_3(self::substr($s, 5, 3)) >> 2); - $s3 = 2097151 & (self::load_4(self::substr($s, 7, 4)) >> 7); - $s4 = 2097151 & (self::load_4(self::substr($s, 10, 4)) >> 4); - $s5 = 2097151 & (self::load_3(self::substr($s, 13, 3)) >> 1); - $s6 = 2097151 & (self::load_4(self::substr($s, 15, 4)) >> 6); - $s7 = 2097151 & (self::load_3(self::substr($s, 18, 4)) >> 3); - $s8 = 2097151 & self::load_3(self::substr($s, 21, 3)); - $s9 = 2097151 & (self::load_4(self::substr($s, 23, 4)) >> 5); - $s10 = 2097151 & (self::load_3(self::substr($s, 26, 3)) >> 2); - $s11 = 2097151 & (self::load_4(self::substr($s, 28, 4)) >> 7); - $s12 = 2097151 & (self::load_4(self::substr($s, 31, 4)) >> 4); - $s13 = 2097151 & (self::load_3(self::substr($s, 34, 3)) >> 1); - $s14 = 2097151 & (self::load_4(self::substr($s, 36, 4)) >> 6); - $s15 = 2097151 & (self::load_3(self::substr($s, 39, 4)) >> 3); - $s16 = 2097151 & self::load_3(self::substr($s, 42, 3)); - $s17 = 2097151 & (self::load_4(self::substr($s, 44, 4)) >> 5); - $s18 = 2097151 & (self::load_3(self::substr($s, 47, 3)) >> 2); - $s19 = 2097151 & (self::load_4(self::substr($s, 49, 4)) >> 7); - $s20 = 2097151 & (self::load_4(self::substr($s, 52, 4)) >> 4); - $s21 = 2097151 & (self::load_3(self::substr($s, 55, 3)) >> 1); - $s22 = 2097151 & (self::load_4(self::substr($s, 57, 4)) >> 6); - $s23 = 0x1fffffff & (self::load_4(self::substr($s, 60, 4)) >> 3); - - $s11 += self::mul($s23, 666643, 20); - $s12 += self::mul($s23, 470296, 19); - $s13 += self::mul($s23, 654183, 20); - $s14 -= self::mul($s23, 997805, 20); - $s15 += self::mul($s23, 136657, 18); - $s16 -= self::mul($s23, 683901, 20); - - $s10 += self::mul($s22, 666643, 20); - $s11 += self::mul($s22, 470296, 19); - $s12 += self::mul($s22, 654183, 20); - $s13 -= self::mul($s22, 997805, 20); - $s14 += self::mul($s22, 136657, 18); - $s15 -= self::mul($s22, 683901, 20); - - $s9 += self::mul($s21, 666643, 20); - $s10 += self::mul($s21, 470296, 19); - $s11 += self::mul($s21, 654183, 20); - $s12 -= self::mul($s21, 997805, 20); - $s13 += self::mul($s21, 136657, 18); - $s14 -= self::mul($s21, 683901, 20); - - $s8 += self::mul($s20, 666643, 20); - $s9 += self::mul($s20, 470296, 19); - $s10 += self::mul($s20, 654183, 20); - $s11 -= self::mul($s20, 997805, 20); - $s12 += self::mul($s20, 136657, 18); - $s13 -= self::mul($s20, 683901, 20); - - $s7 += self::mul($s19, 666643, 20); - $s8 += self::mul($s19, 470296, 19); - $s9 += self::mul($s19, 654183, 20); - $s10 -= self::mul($s19, 997805, 20); - $s11 += self::mul($s19, 136657, 18); - $s12 -= self::mul($s19, 683901, 20); - - $s6 += self::mul($s18, 666643, 20); - $s7 += self::mul($s18, 470296, 19); - $s8 += self::mul($s18, 654183, 20); - $s9 -= self::mul($s18, 997805, 20); - $s10 += self::mul($s18, 136657, 18); - $s11 -= self::mul($s18, 683901, 20); - - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - $carry12 = ($s12 + (1 << 20)) >> 21; - $s13 += $carry12; - $s12 -= $carry12 << 21; - $carry14 = ($s14 + (1 << 20)) >> 21; - $s15 += $carry14; - $s14 -= $carry14 << 21; - $carry16 = ($s16 + (1 << 20)) >> 21; - $s17 += $carry16; - $s16 -= $carry16 << 21; - - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - $carry13 = ($s13 + (1 << 20)) >> 21; - $s14 += $carry13; - $s13 -= $carry13 << 21; - $carry15 = ($s15 + (1 << 20)) >> 21; - $s16 += $carry15; - $s15 -= $carry15 << 21; - - $s5 += self::mul($s17, 666643, 20); - $s6 += self::mul($s17, 470296, 19); - $s7 += self::mul($s17, 654183, 20); - $s8 -= self::mul($s17, 997805, 20); - $s9 += self::mul($s17, 136657, 18); - $s10 -= self::mul($s17, 683901, 20); - - $s4 += self::mul($s16, 666643, 20); - $s5 += self::mul($s16, 470296, 19); - $s6 += self::mul($s16, 654183, 20); - $s7 -= self::mul($s16, 997805, 20); - $s8 += self::mul($s16, 136657, 18); - $s9 -= self::mul($s16, 683901, 20); - - $s3 += self::mul($s15, 666643, 20); - $s4 += self::mul($s15, 470296, 19); - $s5 += self::mul($s15, 654183, 20); - $s6 -= self::mul($s15, 997805, 20); - $s7 += self::mul($s15, 136657, 18); - $s8 -= self::mul($s15, 683901, 20); - - $s2 += self::mul($s14, 666643, 20); - $s3 += self::mul($s14, 470296, 19); - $s4 += self::mul($s14, 654183, 20); - $s5 -= self::mul($s14, 997805, 20); - $s6 += self::mul($s14, 136657, 18); - $s7 -= self::mul($s14, 683901, 20); - - $s1 += self::mul($s13, 666643, 20); - $s2 += self::mul($s13, 470296, 19); - $s3 += self::mul($s13, 654183, 20); - $s4 -= self::mul($s13, 997805, 20); - $s5 += self::mul($s13, 136657, 18); - $s6 -= self::mul($s13, 683901, 20); - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - $s12 = 0; - - $carry0 = ($s0 + (1 << 20)) >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - $carry2 = ($s2 + (1 << 20)) >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - $carry4 = ($s4 + (1 << 20)) >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - - $carry1 = ($s1 + (1 << 20)) >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - $carry3 = ($s3 + (1 << 20)) >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - $carry5 = ($s5 + (1 << 20)) >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - $s12 = 0; - - $carry0 = $s0 >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - $carry1 = $s1 >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - $carry2 = $s2 >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - $carry3 = $s3 >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - $carry4 = $s4 >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - $carry5 = $s5 >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - $carry6 = $s6 >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - $carry7 = $s7 >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - $carry8 = $s8 >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - $carry9 = $s9 >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - $carry10 = $s10 >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - $carry11 = $s11 >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - - $carry0 = $s0 >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - $carry1 = $s1 >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - $carry2 = $s2 >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - $carry3 = $s3 >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - $carry4 = $s4 >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - $carry5 = $s5 >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - $carry6 = $s6 >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - $carry7 = $s7 >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - $carry8 = $s8 >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - $carry9 = $s9 >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - $carry10 = $s10 >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - - /** - * @var array - */ - $arr = array( - (int) ($s0 >> 0), - (int) ($s0 >> 8), - (int) (($s0 >> 16) | $s1 << 5), - (int) ($s1 >> 3), - (int) ($s1 >> 11), - (int) (($s1 >> 19) | $s2 << 2), - (int) ($s2 >> 6), - (int) (($s2 >> 14) | $s3 << 7), - (int) ($s3 >> 1), - (int) ($s3 >> 9), - (int) (($s3 >> 17) | $s4 << 4), - (int) ($s4 >> 4), - (int) ($s4 >> 12), - (int) (($s4 >> 20) | $s5 << 1), - (int) ($s5 >> 7), - (int) (($s5 >> 15) | $s6 << 6), - (int) ($s6 >> 2), - (int) ($s6 >> 10), - (int) (($s6 >> 18) | $s7 << 3), - (int) ($s7 >> 5), - (int) ($s7 >> 13), - (int) ($s8 >> 0), - (int) ($s8 >> 8), - (int) (($s8 >> 16) | $s9 << 5), - (int) ($s9 >> 3), - (int) ($s9 >> 11), - (int) (($s9 >> 19) | $s10 << 2), - (int) ($s10 >> 6), - (int) (($s10 >> 14) | $s11 << 7), - (int) ($s11 >> 1), - (int) ($s11 >> 9), - (int) $s11 >> 17 - ); - return self::intArrayToString($arr); - } - - /** - * multiply by the order of the main subgroup l = 2^252+27742317777372353535851937790883648493 - * - * @param ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A - * @return ParagonIE_Sodium_Core_Curve25519_Ge_P3 - */ - public static function ge_mul_l(ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A) - { - $aslide = array( - 13, 0, 0, 0, 0, -1, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, -5, 0, 0, 0, - 0, 0, 0, -3, 0, 0, 0, 0, -13, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 3, 0, - 0, 0, 0, -13, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 11, 0, 0, 0, - 0, 0, 11, 0, 0, 0, 0, -13, 0, 0, 0, 0, 0, 0, -3, 0, 0, 0, 0, 0, -1, - 0, 0, 0, 0, 3, 0, 0, 0, 0, -11, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, - 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 7, 0, 0, 0, 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 - ); - - /** @var array $Ai size 8 */ - $Ai = array(); - - # ge_p3_to_cached(&Ai[0], A); - $Ai[0] = self::ge_p3_to_cached($A); - # ge_p3_dbl(&t, A); - $t = self::ge_p3_dbl($A); - # ge_p1p1_to_p3(&A2, &t); - $A2 = self::ge_p1p1_to_p3($t); - - for ($i = 1; $i < 8; ++$i) { - # ge_add(&t, &A2, &Ai[0]); - $t = self::ge_add($A2, $Ai[$i - 1]); - # ge_p1p1_to_p3(&u, &t); - $u = self::ge_p1p1_to_p3($t); - # ge_p3_to_cached(&Ai[i], &u); - $Ai[$i] = self::ge_p3_to_cached($u); - } - - $r = self::ge_p3_0(); - for ($i = 252; $i >= 0; --$i) { - $t = self::ge_p3_dbl($r); - if ($aslide[$i] > 0) { - # ge_p1p1_to_p3(&u, &t); - $u = self::ge_p1p1_to_p3($t); - # ge_add(&t, &u, &Ai[aslide[i] / 2]); - $t = self::ge_add($u, $Ai[(int)($aslide[$i] / 2)]); - } elseif ($aslide[$i] < 0) { - # ge_p1p1_to_p3(&u, &t); - $u = self::ge_p1p1_to_p3($t); - # ge_sub(&t, &u, &Ai[(-aslide[i]) / 2]); - $t = self::ge_sub($u, $Ai[(int)(-$aslide[$i] / 2)]); - } - } - - # ge_p1p1_to_p3(r, &t); - return self::ge_p1p1_to_p3($t); - } - - /** - * @param string $a - * @param string $b - * @return string - */ - public static function sc25519_mul($a, $b) - { - // int64_t a0 = 2097151 & load_3(a); - // int64_t a1 = 2097151 & (load_4(a + 2) >> 5); - // int64_t a2 = 2097151 & (load_3(a + 5) >> 2); - // int64_t a3 = 2097151 & (load_4(a + 7) >> 7); - // int64_t a4 = 2097151 & (load_4(a + 10) >> 4); - // int64_t a5 = 2097151 & (load_3(a + 13) >> 1); - // int64_t a6 = 2097151 & (load_4(a + 15) >> 6); - // int64_t a7 = 2097151 & (load_3(a + 18) >> 3); - // int64_t a8 = 2097151 & load_3(a + 21); - // int64_t a9 = 2097151 & (load_4(a + 23) >> 5); - // int64_t a10 = 2097151 & (load_3(a + 26) >> 2); - // int64_t a11 = (load_4(a + 28) >> 7); - $a0 = 2097151 & self::load_3(self::substr($a, 0, 3)); - $a1 = 2097151 & (self::load_4(self::substr($a, 2, 4)) >> 5); - $a2 = 2097151 & (self::load_3(self::substr($a, 5, 3)) >> 2); - $a3 = 2097151 & (self::load_4(self::substr($a, 7, 4)) >> 7); - $a4 = 2097151 & (self::load_4(self::substr($a, 10, 4)) >> 4); - $a5 = 2097151 & (self::load_3(self::substr($a, 13, 3)) >> 1); - $a6 = 2097151 & (self::load_4(self::substr($a, 15, 4)) >> 6); - $a7 = 2097151 & (self::load_3(self::substr($a, 18, 3)) >> 3); - $a8 = 2097151 & self::load_3(self::substr($a, 21, 3)); - $a9 = 2097151 & (self::load_4(self::substr($a, 23, 4)) >> 5); - $a10 = 2097151 & (self::load_3(self::substr($a, 26, 3)) >> 2); - $a11 = (self::load_4(self::substr($a, 28, 4)) >> 7); - - // int64_t b0 = 2097151 & load_3(b); - // int64_t b1 = 2097151 & (load_4(b + 2) >> 5); - // int64_t b2 = 2097151 & (load_3(b + 5) >> 2); - // int64_t b3 = 2097151 & (load_4(b + 7) >> 7); - // int64_t b4 = 2097151 & (load_4(b + 10) >> 4); - // int64_t b5 = 2097151 & (load_3(b + 13) >> 1); - // int64_t b6 = 2097151 & (load_4(b + 15) >> 6); - // int64_t b7 = 2097151 & (load_3(b + 18) >> 3); - // int64_t b8 = 2097151 & load_3(b + 21); - // int64_t b9 = 2097151 & (load_4(b + 23) >> 5); - // int64_t b10 = 2097151 & (load_3(b + 26) >> 2); - // int64_t b11 = (load_4(b + 28) >> 7); - $b0 = 2097151 & self::load_3(self::substr($b, 0, 3)); - $b1 = 2097151 & (self::load_4(self::substr($b, 2, 4)) >> 5); - $b2 = 2097151 & (self::load_3(self::substr($b, 5, 3)) >> 2); - $b3 = 2097151 & (self::load_4(self::substr($b, 7, 4)) >> 7); - $b4 = 2097151 & (self::load_4(self::substr($b, 10, 4)) >> 4); - $b5 = 2097151 & (self::load_3(self::substr($b, 13, 3)) >> 1); - $b6 = 2097151 & (self::load_4(self::substr($b, 15, 4)) >> 6); - $b7 = 2097151 & (self::load_3(self::substr($b, 18, 3)) >> 3); - $b8 = 2097151 & self::load_3(self::substr($b, 21, 3)); - $b9 = 2097151 & (self::load_4(self::substr($b, 23, 4)) >> 5); - $b10 = 2097151 & (self::load_3(self::substr($b, 26, 3)) >> 2); - $b11 = (self::load_4(self::substr($b, 28, 4)) >> 7); - - // s0 = a0 * b0; - // s1 = a0 * b1 + a1 * b0; - // s2 = a0 * b2 + a1 * b1 + a2 * b0; - // s3 = a0 * b3 + a1 * b2 + a2 * b1 + a3 * b0; - // s4 = a0 * b4 + a1 * b3 + a2 * b2 + a3 * b1 + a4 * b0; - // s5 = a0 * b5 + a1 * b4 + a2 * b3 + a3 * b2 + a4 * b1 + a5 * b0; - // s6 = a0 * b6 + a1 * b5 + a2 * b4 + a3 * b3 + a4 * b2 + a5 * b1 + a6 * b0; - // s7 = a0 * b7 + a1 * b6 + a2 * b5 + a3 * b4 + a4 * b3 + a5 * b2 + - // a6 * b1 + a7 * b0; - // s8 = a0 * b8 + a1 * b7 + a2 * b6 + a3 * b5 + a4 * b4 + a5 * b3 + - // a6 * b2 + a7 * b1 + a8 * b0; - // s9 = a0 * b9 + a1 * b8 + a2 * b7 + a3 * b6 + a4 * b5 + a5 * b4 + - // a6 * b3 + a7 * b2 + a8 * b1 + a9 * b0; - // s10 = a0 * b10 + a1 * b9 + a2 * b8 + a3 * b7 + a4 * b6 + a5 * b5 + - // a6 * b4 + a7 * b3 + a8 * b2 + a9 * b1 + a10 * b0; - // s11 = a0 * b11 + a1 * b10 + a2 * b9 + a3 * b8 + a4 * b7 + a5 * b6 + - // a6 * b5 + a7 * b4 + a8 * b3 + a9 * b2 + a10 * b1 + a11 * b0; - // s12 = a1 * b11 + a2 * b10 + a3 * b9 + a4 * b8 + a5 * b7 + a6 * b6 + - // a7 * b5 + a8 * b4 + a9 * b3 + a10 * b2 + a11 * b1; - // s13 = a2 * b11 + a3 * b10 + a4 * b9 + a5 * b8 + a6 * b7 + a7 * b6 + - // a8 * b5 + a9 * b4 + a10 * b3 + a11 * b2; - // s14 = a3 * b11 + a4 * b10 + a5 * b9 + a6 * b8 + a7 * b7 + a8 * b6 + - // a9 * b5 + a10 * b4 + a11 * b3; - // s15 = a4 * b11 + a5 * b10 + a6 * b9 + a7 * b8 + a8 * b7 + a9 * b6 + - // a10 * b5 + a11 * b4; - // s16 = - // a5 * b11 + a6 * b10 + a7 * b9 + a8 * b8 + a9 * b7 + a10 * b6 + a11 * b5; - // s17 = a6 * b11 + a7 * b10 + a8 * b9 + a9 * b8 + a10 * b7 + a11 * b6; - // s18 = a7 * b11 + a8 * b10 + a9 * b9 + a10 * b8 + a11 * b7; - // s19 = a8 * b11 + a9 * b10 + a10 * b9 + a11 * b8; - // s20 = a9 * b11 + a10 * b10 + a11 * b9; - // s21 = a10 * b11 + a11 * b10; - // s22 = a11 * b11; - // s23 = 0; - $s0 = self::mul($a0, $b0, 22); - $s1 = self::mul($a0, $b1, 22) + self::mul($a1, $b0, 22); - $s2 = self::mul($a0, $b2, 22) + self::mul($a1, $b1, 22) + self::mul($a2, $b0, 22); - $s3 = self::mul($a0, $b3, 22) + self::mul($a1, $b2, 22) + self::mul($a2, $b1, 22) + self::mul($a3, $b0, 22); - $s4 = self::mul($a0, $b4, 22) + self::mul($a1, $b3, 22) + self::mul($a2, $b2, 22) + self::mul($a3, $b1, 22) + - self::mul($a4, $b0, 22); - $s5 = self::mul($a0, $b5, 22) + self::mul($a1, $b4, 22) + self::mul($a2, $b3, 22) + self::mul($a3, $b2, 22) + - self::mul($a4, $b1, 22) + self::mul($a5, $b0, 22); - $s6 = self::mul($a0, $b6, 22) + self::mul($a1, $b5, 22) + self::mul($a2, $b4, 22) + self::mul($a3, $b3, 22) + - self::mul($a4, $b2, 22) + self::mul($a5, $b1, 22) + self::mul($a6, $b0, 22); - $s7 = self::mul($a0, $b7, 22) + self::mul($a1, $b6, 22) + self::mul($a2, $b5, 22) + self::mul($a3, $b4, 22) + - self::mul($a4, $b3, 22) + self::mul($a5, $b2, 22) + self::mul($a6, $b1, 22) + self::mul($a7, $b0, 22); - $s8 = self::mul($a0, $b8, 22) + self::mul($a1, $b7, 22) + self::mul($a2, $b6, 22) + self::mul($a3, $b5, 22) + - self::mul($a4, $b4, 22) + self::mul($a5, $b3, 22) + self::mul($a6, $b2, 22) + self::mul($a7, $b1, 22) + - self::mul($a8, $b0, 22); - $s9 = self::mul($a0, $b9, 22) + self::mul($a1, $b8, 22) + self::mul($a2, $b7, 22) + self::mul($a3, $b6, 22) + - self::mul($a4, $b5, 22) + self::mul($a5, $b4, 22) + self::mul($a6, $b3, 22) + self::mul($a7, $b2, 22) + - self::mul($a8, $b1, 22) + self::mul($a9, $b0, 22); - $s10 = self::mul($a0, $b10, 22) + self::mul($a1, $b9, 22) + self::mul($a2, $b8, 22) + self::mul($a3, $b7, 22) + - self::mul($a4, $b6, 22) + self::mul($a5, $b5, 22) + self::mul($a6, $b4, 22) + self::mul($a7, $b3, 22) + - self::mul($a8, $b2, 22) + self::mul($a9, $b1, 22) + self::mul($a10, $b0, 22); - $s11 = self::mul($a0, $b11, 22) + self::mul($a1, $b10, 22) + self::mul($a2, $b9, 22) + self::mul($a3, $b8, 22) + - self::mul($a4, $b7, 22) + self::mul($a5, $b6, 22) + self::mul($a6, $b5, 22) + self::mul($a7, $b4, 22) + - self::mul($a8, $b3, 22) + self::mul($a9, $b2, 22) + self::mul($a10, $b1, 22) + self::mul($a11, $b0, 22); - $s12 = self::mul($a1, $b11, 22) + self::mul($a2, $b10, 22) + self::mul($a3, $b9, 22) + self::mul($a4, $b8, 22) + - self::mul($a5, $b7, 22) + self::mul($a6, $b6, 22) + self::mul($a7, $b5, 22) + self::mul($a8, $b4, 22) + - self::mul($a9, $b3, 22) + self::mul($a10, $b2, 22) + self::mul($a11, $b1, 22); - $s13 = self::mul($a2, $b11, 22) + self::mul($a3, $b10, 22) + self::mul($a4, $b9, 22) + self::mul($a5, $b8, 22) + - self::mul($a6, $b7, 22) + self::mul($a7, $b6, 22) + self::mul($a8, $b5, 22) + self::mul($a9, $b4, 22) + - self::mul($a10, $b3, 22) + self::mul($a11, $b2, 22); - $s14 = self::mul($a3, $b11, 22) + self::mul($a4, $b10, 22) + self::mul($a5, $b9, 22) + self::mul($a6, $b8, 22) + - self::mul($a7, $b7, 22) + self::mul($a8, $b6, 22) + self::mul($a9, $b5, 22) + self::mul($a10, $b4, 22) + - self::mul($a11, $b3, 22); - $s15 = self::mul($a4, $b11, 22) + self::mul($a5, $b10, 22) + self::mul($a6, $b9, 22) + self::mul($a7, $b8, 22) + - self::mul($a8, $b7, 22) + self::mul($a9, $b6, 22) + self::mul($a10, $b5, 22) + self::mul($a11, $b4, 22); - $s16 = - self::mul($a5, $b11, 22) + self::mul($a6, $b10, 22) + self::mul($a7, $b9, 22) + self::mul($a8, $b8, 22) + - self::mul($a9, $b7, 22) + self::mul($a10, $b6, 22) + self::mul($a11, $b5, 22); - $s17 = self::mul($a6, $b11, 22) + self::mul($a7, $b10, 22) + self::mul($a8, $b9, 22) + self::mul($a9, $b8, 22) + - self::mul($a10, $b7, 22) + self::mul($a11, $b6, 22); - $s18 = self::mul($a7, $b11, 22) + self::mul($a8, $b10, 22) + self::mul($a9, $b9, 22) + self::mul($a10, $b8, 22) - + self::mul($a11, $b7, 22); - $s19 = self::mul($a8, $b11, 22) + self::mul($a9, $b10, 22) + self::mul($a10, $b9, 22) + - self::mul($a11, $b8, 22); - $s20 = self::mul($a9, $b11, 22) + self::mul($a10, $b10, 22) + self::mul($a11, $b9, 22); - $s21 = self::mul($a10, $b11, 22) + self::mul($a11, $b10, 22); - $s22 = self::mul($a11, $b11, 22); - $s23 = 0; - - // carry0 = (s0 + (int64_t) (1L << 20)) >> 21; - // s1 += carry0; - // s0 -= carry0 * ((uint64_t) 1L << 21); - $carry0 = ($s0 + (1 << 20)) >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - // carry2 = (s2 + (int64_t) (1L << 20)) >> 21; - // s3 += carry2; - // s2 -= carry2 * ((uint64_t) 1L << 21); - $carry2 = ($s2 + (1 << 20)) >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - // carry4 = (s4 + (int64_t) (1L << 20)) >> 21; - // s5 += carry4; - // s4 -= carry4 * ((uint64_t) 1L << 21); - $carry4 = ($s4 + (1 << 20)) >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - // carry6 = (s6 + (int64_t) (1L << 20)) >> 21; - // s7 += carry6; - // s6 -= carry6 * ((uint64_t) 1L << 21); - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - // carry8 = (s8 + (int64_t) (1L << 20)) >> 21; - // s9 += carry8; - // s8 -= carry8 * ((uint64_t) 1L << 21); - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - // carry10 = (s10 + (int64_t) (1L << 20)) >> 21; - // s11 += carry10; - // s10 -= carry10 * ((uint64_t) 1L << 21); - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - // carry12 = (s12 + (int64_t) (1L << 20)) >> 21; - // s13 += carry12; - // s12 -= carry12 * ((uint64_t) 1L << 21); - $carry12 = ($s12 + (1 << 20)) >> 21; - $s13 += $carry12; - $s12 -= $carry12 << 21; - // carry14 = (s14 + (int64_t) (1L << 20)) >> 21; - // s15 += carry14; - // s14 -= carry14 * ((uint64_t) 1L << 21); - $carry14 = ($s14 + (1 << 20)) >> 21; - $s15 += $carry14; - $s14 -= $carry14 << 21; - // carry16 = (s16 + (int64_t) (1L << 20)) >> 21; - // s17 += carry16; - // s16 -= carry16 * ((uint64_t) 1L << 21); - $carry16 = ($s16 + (1 << 20)) >> 21; - $s17 += $carry16; - $s16 -= $carry16 << 21; - // carry18 = (s18 + (int64_t) (1L << 20)) >> 21; - // s19 += carry18; - // s18 -= carry18 * ((uint64_t) 1L << 21); - $carry18 = ($s18 + (1 << 20)) >> 21; - $s19 += $carry18; - $s18 -= $carry18 << 21; - // carry20 = (s20 + (int64_t) (1L << 20)) >> 21; - // s21 += carry20; - // s20 -= carry20 * ((uint64_t) 1L << 21); - $carry20 = ($s20 + (1 << 20)) >> 21; - $s21 += $carry20; - $s20 -= $carry20 << 21; - // carry22 = (s22 + (int64_t) (1L << 20)) >> 21; - // s23 += carry22; - // s22 -= carry22 * ((uint64_t) 1L << 21); - $carry22 = ($s22 + (1 << 20)) >> 21; - $s23 += $carry22; - $s22 -= $carry22 << 21; - - // carry1 = (s1 + (int64_t) (1L << 20)) >> 21; - // s2 += carry1; - // s1 -= carry1 * ((uint64_t) 1L << 21); - $carry1 = ($s1 + (1 << 20)) >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - // carry3 = (s3 + (int64_t) (1L << 20)) >> 21; - // s4 += carry3; - // s3 -= carry3 * ((uint64_t) 1L << 21); - $carry3 = ($s3 + (1 << 20)) >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - // carry5 = (s5 + (int64_t) (1L << 20)) >> 21; - // s6 += carry5; - // s5 -= carry5 * ((uint64_t) 1L << 21); - $carry5 = ($s5 + (1 << 20)) >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - // carry7 = (s7 + (int64_t) (1L << 20)) >> 21; - // s8 += carry7; - // s7 -= carry7 * ((uint64_t) 1L << 21); - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - // carry9 = (s9 + (int64_t) (1L << 20)) >> 21; - // s10 += carry9; - // s9 -= carry9 * ((uint64_t) 1L << 21); - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - // carry11 = (s11 + (int64_t) (1L << 20)) >> 21; - // s12 += carry11; - // s11 -= carry11 * ((uint64_t) 1L << 21); - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - // carry13 = (s13 + (int64_t) (1L << 20)) >> 21; - // s14 += carry13; - // s13 -= carry13 * ((uint64_t) 1L << 21); - $carry13 = ($s13 + (1 << 20)) >> 21; - $s14 += $carry13; - $s13 -= $carry13 << 21; - // carry15 = (s15 + (int64_t) (1L << 20)) >> 21; - // s16 += carry15; - // s15 -= carry15 * ((uint64_t) 1L << 21); - $carry15 = ($s15 + (1 << 20)) >> 21; - $s16 += $carry15; - $s15 -= $carry15 << 21; - // carry17 = (s17 + (int64_t) (1L << 20)) >> 21; - // s18 += carry17; - // s17 -= carry17 * ((uint64_t) 1L << 21); - $carry17 = ($s17 + (1 << 20)) >> 21; - $s18 += $carry17; - $s17 -= $carry17 << 21; - // carry19 = (s19 + (int64_t) (1L << 20)) >> 21; - // s20 += carry19; - // s19 -= carry19 * ((uint64_t) 1L << 21); - $carry19 = ($s19 + (1 << 20)) >> 21; - $s20 += $carry19; - $s19 -= $carry19 << 21; - // carry21 = (s21 + (int64_t) (1L << 20)) >> 21; - // s22 += carry21; - // s21 -= carry21 * ((uint64_t) 1L << 21); - $carry21 = ($s21 + (1 << 20)) >> 21; - $s22 += $carry21; - $s21 -= $carry21 << 21; - - // s11 += s23 * 666643; - // s12 += s23 * 470296; - // s13 += s23 * 654183; - // s14 -= s23 * 997805; - // s15 += s23 * 136657; - // s16 -= s23 * 683901; - $s11 += self::mul($s23, 666643, 20); - $s12 += self::mul($s23, 470296, 19); - $s13 += self::mul($s23, 654183, 20); - $s14 -= self::mul($s23, 997805, 20); - $s15 += self::mul($s23, 136657, 18); - $s16 -= self::mul($s23, 683901, 20); - - // s10 += s22 * 666643; - // s11 += s22 * 470296; - // s12 += s22 * 654183; - // s13 -= s22 * 997805; - // s14 += s22 * 136657; - // s15 -= s22 * 683901; - $s10 += self::mul($s22, 666643, 20); - $s11 += self::mul($s22, 470296, 19); - $s12 += self::mul($s22, 654183, 20); - $s13 -= self::mul($s22, 997805, 20); - $s14 += self::mul($s22, 136657, 18); - $s15 -= self::mul($s22, 683901, 20); - - // s9 += s21 * 666643; - // s10 += s21 * 470296; - // s11 += s21 * 654183; - // s12 -= s21 * 997805; - // s13 += s21 * 136657; - // s14 -= s21 * 683901; - $s9 += self::mul($s21, 666643, 20); - $s10 += self::mul($s21, 470296, 19); - $s11 += self::mul($s21, 654183, 20); - $s12 -= self::mul($s21, 997805, 20); - $s13 += self::mul($s21, 136657, 18); - $s14 -= self::mul($s21, 683901, 20); - - // s8 += s20 * 666643; - // s9 += s20 * 470296; - // s10 += s20 * 654183; - // s11 -= s20 * 997805; - // s12 += s20 * 136657; - // s13 -= s20 * 683901; - $s8 += self::mul($s20, 666643, 20); - $s9 += self::mul($s20, 470296, 19); - $s10 += self::mul($s20, 654183, 20); - $s11 -= self::mul($s20, 997805, 20); - $s12 += self::mul($s20, 136657, 18); - $s13 -= self::mul($s20, 683901, 20); - - // s7 += s19 * 666643; - // s8 += s19 * 470296; - // s9 += s19 * 654183; - // s10 -= s19 * 997805; - // s11 += s19 * 136657; - // s12 -= s19 * 683901; - $s7 += self::mul($s19, 666643, 20); - $s8 += self::mul($s19, 470296, 19); - $s9 += self::mul($s19, 654183, 20); - $s10 -= self::mul($s19, 997805, 20); - $s11 += self::mul($s19, 136657, 18); - $s12 -= self::mul($s19, 683901, 20); - - // s6 += s18 * 666643; - // s7 += s18 * 470296; - // s8 += s18 * 654183; - // s9 -= s18 * 997805; - // s10 += s18 * 136657; - // s11 -= s18 * 683901; - $s6 += self::mul($s18, 666643, 20); - $s7 += self::mul($s18, 470296, 19); - $s8 += self::mul($s18, 654183, 20); - $s9 -= self::mul($s18, 997805, 20); - $s10 += self::mul($s18, 136657, 18); - $s11 -= self::mul($s18, 683901, 20); - - // carry6 = (s6 + (int64_t) (1L << 20)) >> 21; - // s7 += carry6; - // s6 -= carry6 * ((uint64_t) 1L << 21); - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - // carry8 = (s8 + (int64_t) (1L << 20)) >> 21; - // s9 += carry8; - // s8 -= carry8 * ((uint64_t) 1L << 21); - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - // carry10 = (s10 + (int64_t) (1L << 20)) >> 21; - // s11 += carry10; - // s10 -= carry10 * ((uint64_t) 1L << 21); - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - // carry12 = (s12 + (int64_t) (1L << 20)) >> 21; - // s13 += carry12; - // s12 -= carry12 * ((uint64_t) 1L << 21); - $carry12 = ($s12 + (1 << 20)) >> 21; - $s13 += $carry12; - $s12 -= $carry12 << 21; - // carry14 = (s14 + (int64_t) (1L << 20)) >> 21; - // s15 += carry14; - // s14 -= carry14 * ((uint64_t) 1L << 21); - $carry14 = ($s14 + (1 << 20)) >> 21; - $s15 += $carry14; - $s14 -= $carry14 << 21; - // carry16 = (s16 + (int64_t) (1L << 20)) >> 21; - // s17 += carry16; - // s16 -= carry16 * ((uint64_t) 1L << 21); - $carry16 = ($s16 + (1 << 20)) >> 21; - $s17 += $carry16; - $s16 -= $carry16 << 21; - - // carry7 = (s7 + (int64_t) (1L << 20)) >> 21; - // s8 += carry7; - // s7 -= carry7 * ((uint64_t) 1L << 21); - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - // carry9 = (s9 + (int64_t) (1L << 20)) >> 21; - // s10 += carry9; - // s9 -= carry9 * ((uint64_t) 1L << 21); - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - // carry11 = (s11 + (int64_t) (1L << 20)) >> 21; - // s12 += carry11; - // s11 -= carry11 * ((uint64_t) 1L << 21); - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - // carry13 = (s13 + (int64_t) (1L << 20)) >> 21; - // s14 += carry13; - // s13 -= carry13 * ((uint64_t) 1L << 21); - $carry13 = ($s13 + (1 << 20)) >> 21; - $s14 += $carry13; - $s13 -= $carry13 << 21; - // carry15 = (s15 + (int64_t) (1L << 20)) >> 21; - // s16 += carry15; - // s15 -= carry15 * ((uint64_t) 1L << 21); - $carry15 = ($s15 + (1 << 20)) >> 21; - $s16 += $carry15; - $s15 -= $carry15 << 21; - - // s5 += s17 * 666643; - // s6 += s17 * 470296; - // s7 += s17 * 654183; - // s8 -= s17 * 997805; - // s9 += s17 * 136657; - // s10 -= s17 * 683901; - $s5 += self::mul($s17, 666643, 20); - $s6 += self::mul($s17, 470296, 19); - $s7 += self::mul($s17, 654183, 20); - $s8 -= self::mul($s17, 997805, 20); - $s9 += self::mul($s17, 136657, 18); - $s10 -= self::mul($s17, 683901, 20); - - // s4 += s16 * 666643; - // s5 += s16 * 470296; - // s6 += s16 * 654183; - // s7 -= s16 * 997805; - // s8 += s16 * 136657; - // s9 -= s16 * 683901; - $s4 += self::mul($s16, 666643, 20); - $s5 += self::mul($s16, 470296, 19); - $s6 += self::mul($s16, 654183, 20); - $s7 -= self::mul($s16, 997805, 20); - $s8 += self::mul($s16, 136657, 18); - $s9 -= self::mul($s16, 683901, 20); - - // s3 += s15 * 666643; - // s4 += s15 * 470296; - // s5 += s15 * 654183; - // s6 -= s15 * 997805; - // s7 += s15 * 136657; - // s8 -= s15 * 683901; - $s3 += self::mul($s15, 666643, 20); - $s4 += self::mul($s15, 470296, 19); - $s5 += self::mul($s15, 654183, 20); - $s6 -= self::mul($s15, 997805, 20); - $s7 += self::mul($s15, 136657, 18); - $s8 -= self::mul($s15, 683901, 20); - - // s2 += s14 * 666643; - // s3 += s14 * 470296; - // s4 += s14 * 654183; - // s5 -= s14 * 997805; - // s6 += s14 * 136657; - // s7 -= s14 * 683901; - $s2 += self::mul($s14, 666643, 20); - $s3 += self::mul($s14, 470296, 19); - $s4 += self::mul($s14, 654183, 20); - $s5 -= self::mul($s14, 997805, 20); - $s6 += self::mul($s14, 136657, 18); - $s7 -= self::mul($s14, 683901, 20); - - // s1 += s13 * 666643; - // s2 += s13 * 470296; - // s3 += s13 * 654183; - // s4 -= s13 * 997805; - // s5 += s13 * 136657; - // s6 -= s13 * 683901; - $s1 += self::mul($s13, 666643, 20); - $s2 += self::mul($s13, 470296, 19); - $s3 += self::mul($s13, 654183, 20); - $s4 -= self::mul($s13, 997805, 20); - $s5 += self::mul($s13, 136657, 18); - $s6 -= self::mul($s13, 683901, 20); - - // s0 += s12 * 666643; - // s1 += s12 * 470296; - // s2 += s12 * 654183; - // s3 -= s12 * 997805; - // s4 += s12 * 136657; - // s5 -= s12 * 683901; - // s12 = 0; - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - $s12 = 0; - - // carry0 = (s0 + (int64_t) (1L << 20)) >> 21; - // s1 += carry0; - // s0 -= carry0 * ((uint64_t) 1L << 21); - $carry0 = ($s0 + (1 << 20)) >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - // carry2 = (s2 + (int64_t) (1L << 20)) >> 21; - // s3 += carry2; - // s2 -= carry2 * ((uint64_t) 1L << 21); - $carry2 = ($s2 + (1 << 20)) >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - // carry4 = (s4 + (int64_t) (1L << 20)) >> 21; - // s5 += carry4; - // s4 -= carry4 * ((uint64_t) 1L << 21); - $carry4 = ($s4 + (1 << 20)) >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - // carry6 = (s6 + (int64_t) (1L << 20)) >> 21; - // s7 += carry6; - // s6 -= carry6 * ((uint64_t) 1L << 21); - $carry6 = ($s6 + (1 << 20)) >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - // carry8 = (s8 + (int64_t) (1L << 20)) >> 21; - // s9 += carry8; - // s8 -= carry8 * ((uint64_t) 1L << 21); - $carry8 = ($s8 + (1 << 20)) >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - // carry10 = (s10 + (int64_t) (1L << 20)) >> 21; - // s11 += carry10; - // s10 -= carry10 * ((uint64_t) 1L << 21); - $carry10 = ($s10 + (1 << 20)) >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - - // carry1 = (s1 + (int64_t) (1L << 20)) >> 21; - // s2 += carry1; - // s1 -= carry1 * ((uint64_t) 1L << 21); - $carry1 = ($s1 + (1 << 20)) >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - // carry3 = (s3 + (int64_t) (1L << 20)) >> 21; - // s4 += carry3; - // s3 -= carry3 * ((uint64_t) 1L << 21); - $carry3 = ($s3 + (1 << 20)) >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - // carry5 = (s5 + (int64_t) (1L << 20)) >> 21; - // s6 += carry5; - // s5 -= carry5 * ((uint64_t) 1L << 21); - $carry5 = ($s5 + (1 << 20)) >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - // carry7 = (s7 + (int64_t) (1L << 20)) >> 21; - // s8 += carry7; - // s7 -= carry7 * ((uint64_t) 1L << 21); - $carry7 = ($s7 + (1 << 20)) >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - // carry9 = (s9 + (int64_t) (1L << 20)) >> 21; - // s10 += carry9; - // s9 -= carry9 * ((uint64_t) 1L << 21); - $carry9 = ($s9 + (1 << 20)) >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - // carry11 = (s11 + (int64_t) (1L << 20)) >> 21; - // s12 += carry11; - // s11 -= carry11 * ((uint64_t) 1L << 21); - $carry11 = ($s11 + (1 << 20)) >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - - // s0 += s12 * 666643; - // s1 += s12 * 470296; - // s2 += s12 * 654183; - // s3 -= s12 * 997805; - // s4 += s12 * 136657; - // s5 -= s12 * 683901; - // s12 = 0; - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - $s12 = 0; - - // carry0 = s0 >> 21; - // s1 += carry0; - // s0 -= carry0 * ((uint64_t) 1L << 21); - $carry0 = $s0 >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - // carry1 = s1 >> 21; - // s2 += carry1; - // s1 -= carry1 * ((uint64_t) 1L << 21); - $carry1 = $s1 >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - // carry2 = s2 >> 21; - // s3 += carry2; - // s2 -= carry2 * ((uint64_t) 1L << 21); - $carry2 = $s2 >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - // carry3 = s3 >> 21; - // s4 += carry3; - // s3 -= carry3 * ((uint64_t) 1L << 21); - $carry3 = $s3 >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - // carry4 = s4 >> 21; - // s5 += carry4; - // s4 -= carry4 * ((uint64_t) 1L << 21); - $carry4 = $s4 >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - // carry5 = s5 >> 21; - // s6 += carry5; - // s5 -= carry5 * ((uint64_t) 1L << 21); - $carry5 = $s5 >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - // carry6 = s6 >> 21; - // s7 += carry6; - // s6 -= carry6 * ((uint64_t) 1L << 21); - $carry6 = $s6 >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - // carry7 = s7 >> 21; - // s8 += carry7; - // s7 -= carry7 * ((uint64_t) 1L << 21); - $carry7 = $s7 >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - // carry8 = s8 >> 21; - // s9 += carry8; - // s8 -= carry8 * ((uint64_t) 1L << 21); - $carry8 = $s8 >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - // carry9 = s9 >> 21; - // s10 += carry9; - // s9 -= carry9 * ((uint64_t) 1L << 21); - $carry9 = $s9 >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - // carry10 = s10 >> 21; - // s11 += carry10; - // s10 -= carry10 * ((uint64_t) 1L << 21); - $carry10 = $s10 >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - // carry11 = s11 >> 21; - // s12 += carry11; - // s11 -= carry11 * ((uint64_t) 1L << 21); - $carry11 = $s11 >> 21; - $s12 += $carry11; - $s11 -= $carry11 << 21; - - // s0 += s12 * 666643; - // s1 += s12 * 470296; - // s2 += s12 * 654183; - // s3 -= s12 * 997805; - // s4 += s12 * 136657; - // s5 -= s12 * 683901; - $s0 += self::mul($s12, 666643, 20); - $s1 += self::mul($s12, 470296, 19); - $s2 += self::mul($s12, 654183, 20); - $s3 -= self::mul($s12, 997805, 20); - $s4 += self::mul($s12, 136657, 18); - $s5 -= self::mul($s12, 683901, 20); - - // carry0 = s0 >> 21; - // s1 += carry0; - // s0 -= carry0 * ((uint64_t) 1L << 21); - $carry0 = $s0 >> 21; - $s1 += $carry0; - $s0 -= $carry0 << 21; - // carry1 = s1 >> 21; - // s2 += carry1; - // s1 -= carry1 * ((uint64_t) 1L << 21); - $carry1 = $s1 >> 21; - $s2 += $carry1; - $s1 -= $carry1 << 21; - // carry2 = s2 >> 21; - // s3 += carry2; - // s2 -= carry2 * ((uint64_t) 1L << 21); - $carry2 = $s2 >> 21; - $s3 += $carry2; - $s2 -= $carry2 << 21; - // carry3 = s3 >> 21; - // s4 += carry3; - // s3 -= carry3 * ((uint64_t) 1L << 21); - $carry3 = $s3 >> 21; - $s4 += $carry3; - $s3 -= $carry3 << 21; - // carry4 = s4 >> 21; - // s5 += carry4; - // s4 -= carry4 * ((uint64_t) 1L << 21); - $carry4 = $s4 >> 21; - $s5 += $carry4; - $s4 -= $carry4 << 21; - // carry5 = s5 >> 21; - // s6 += carry5; - // s5 -= carry5 * ((uint64_t) 1L << 21); - $carry5 = $s5 >> 21; - $s6 += $carry5; - $s5 -= $carry5 << 21; - // carry6 = s6 >> 21; - // s7 += carry6; - // s6 -= carry6 * ((uint64_t) 1L << 21); - $carry6 = $s6 >> 21; - $s7 += $carry6; - $s6 -= $carry6 << 21; - // carry7 = s7 >> 21; - // s8 += carry7; - // s7 -= carry7 * ((uint64_t) 1L << 21); - $carry7 = $s7 >> 21; - $s8 += $carry7; - $s7 -= $carry7 << 21; - // carry8 = s8 >> 21; - // s9 += carry8; - // s8 -= carry8 * ((uint64_t) 1L << 21); - $carry8 = $s8 >> 21; - $s9 += $carry8; - $s8 -= $carry8 << 21; - // carry9 = s9 >> 21; - // s10 += carry9; - // s9 -= carry9 * ((uint64_t) 1L << 21); - $carry9 = $s9 >> 21; - $s10 += $carry9; - $s9 -= $carry9 << 21; - // carry10 = s10 >> 21; - // s11 += carry10; - // s10 -= carry10 * ((uint64_t) 1L << 21); - $carry10 = $s10 >> 21; - $s11 += $carry10; - $s10 -= $carry10 << 21; - - $s = array_fill(0, 32, 0); - // s[0] = s0 >> 0; - $s[0] = $s0 >> 0; - // s[1] = s0 >> 8; - $s[1] = $s0 >> 8; - // s[2] = (s0 >> 16) | (s1 * ((uint64_t) 1 << 5)); - $s[2] = ($s0 >> 16) | ($s1 << 5); - // s[3] = s1 >> 3; - $s[3] = $s1 >> 3; - // s[4] = s1 >> 11; - $s[4] = $s1 >> 11; - // s[5] = (s1 >> 19) | (s2 * ((uint64_t) 1 << 2)); - $s[5] = ($s1 >> 19) | ($s2 << 2); - // s[6] = s2 >> 6; - $s[6] = $s2 >> 6; - // s[7] = (s2 >> 14) | (s3 * ((uint64_t) 1 << 7)); - $s[7] = ($s2 >> 14) | ($s3 << 7); - // s[8] = s3 >> 1; - $s[8] = $s3 >> 1; - // s[9] = s3 >> 9; - $s[9] = $s3 >> 9; - // s[10] = (s3 >> 17) | (s4 * ((uint64_t) 1 << 4)); - $s[10] = ($s3 >> 17) | ($s4 << 4); - // s[11] = s4 >> 4; - $s[11] = $s4 >> 4; - // s[12] = s4 >> 12; - $s[12] = $s4 >> 12; - // s[13] = (s4 >> 20) | (s5 * ((uint64_t) 1 << 1)); - $s[13] = ($s4 >> 20) | ($s5 << 1); - // s[14] = s5 >> 7; - $s[14] = $s5 >> 7; - // s[15] = (s5 >> 15) | (s6 * ((uint64_t) 1 << 6)); - $s[15] = ($s5 >> 15) | ($s6 << 6); - // s[16] = s6 >> 2; - $s[16] = $s6 >> 2; - // s[17] = s6 >> 10; - $s[17] = $s6 >> 10; - // s[18] = (s6 >> 18) | (s7 * ((uint64_t) 1 << 3)); - $s[18] = ($s6 >> 18) | ($s7 << 3); - // s[19] = s7 >> 5; - $s[19] = $s7 >> 5; - // s[20] = s7 >> 13; - $s[20] = $s7 >> 13; - // s[21] = s8 >> 0; - $s[21] = $s8 >> 0; - // s[22] = s8 >> 8; - $s[22] = $s8 >> 8; - // s[23] = (s8 >> 16) | (s9 * ((uint64_t) 1 << 5)); - $s[23] = ($s8 >> 16) | ($s9 << 5); - // s[24] = s9 >> 3; - $s[24] = $s9 >> 3; - // s[25] = s9 >> 11; - $s[25] = $s9 >> 11; - // s[26] = (s9 >> 19) | (s10 * ((uint64_t) 1 << 2)); - $s[26] = ($s9 >> 19) | ($s10 << 2); - // s[27] = s10 >> 6; - $s[27] = $s10 >> 6; - // s[28] = (s10 >> 14) | (s11 * ((uint64_t) 1 << 7)); - $s[28] = ($s10 >> 14) | ($s11 << 7); - // s[29] = s11 >> 1; - $s[29] = $s11 >> 1; - // s[30] = s11 >> 9; - $s[30] = $s11 >> 9; - // s[31] = s11 >> 17; - $s[31] = $s11 >> 17; - return self::intArrayToString($s); - } - - /** - * @param string $s - * @return string - */ - public static function sc25519_sq($s) - { - return self::sc25519_mul($s, $s); - } - - /** - * @param string $s - * @param int $n - * @param string $a - * @return string - */ - public static function sc25519_sqmul($s, $n, $a) - { - for ($i = 0; $i < $n; ++$i) { - $s = self::sc25519_sq($s); - } - return self::sc25519_mul($s, $a); - } - - /** - * @param string $s - * @return string - */ - public static function sc25519_invert($s) - { - $_10 = self::sc25519_sq($s); - $_11 = self::sc25519_mul($s, $_10); - $_100 = self::sc25519_mul($s, $_11); - $_1000 = self::sc25519_sq($_100); - $_1010 = self::sc25519_mul($_10, $_1000); - $_1011 = self::sc25519_mul($s, $_1010); - $_10000 = self::sc25519_sq($_1000); - $_10110 = self::sc25519_sq($_1011); - $_100000 = self::sc25519_mul($_1010, $_10110); - $_100110 = self::sc25519_mul($_10000, $_10110); - $_1000000 = self::sc25519_sq($_100000); - $_1010000 = self::sc25519_mul($_10000, $_1000000); - $_1010011 = self::sc25519_mul($_11, $_1010000); - $_1100011 = self::sc25519_mul($_10000, $_1010011); - $_1100111 = self::sc25519_mul($_100, $_1100011); - $_1101011 = self::sc25519_mul($_100, $_1100111); - $_10010011 = self::sc25519_mul($_1000000, $_1010011); - $_10010111 = self::sc25519_mul($_100, $_10010011); - $_10111101 = self::sc25519_mul($_100110, $_10010111); - $_11010011 = self::sc25519_mul($_10110, $_10111101); - $_11100111 = self::sc25519_mul($_1010000, $_10010111); - $_11101011 = self::sc25519_mul($_100, $_11100111); - $_11110101 = self::sc25519_mul($_1010, $_11101011); - - $recip = self::sc25519_mul($_1011, $_11110101); - $recip = self::sc25519_sqmul($recip, 126, $_1010011); - $recip = self::sc25519_sqmul($recip, 9, $_10); - $recip = self::sc25519_mul($recip, $_11110101); - $recip = self::sc25519_sqmul($recip, 7, $_1100111); - $recip = self::sc25519_sqmul($recip, 9, $_11110101); - $recip = self::sc25519_sqmul($recip, 11, $_10111101); - $recip = self::sc25519_sqmul($recip, 8, $_11100111); - $recip = self::sc25519_sqmul($recip, 9, $_1101011); - $recip = self::sc25519_sqmul($recip, 6, $_1011); - $recip = self::sc25519_sqmul($recip, 14, $_10010011); - $recip = self::sc25519_sqmul($recip, 10, $_1100011); - $recip = self::sc25519_sqmul($recip, 9, $_10010111); - $recip = self::sc25519_sqmul($recip, 10, $_11110101); - $recip = self::sc25519_sqmul($recip, 8, $_11010011); - return self::sc25519_sqmul($recip, 8, $_11101011); - } - - /** - * @param string $s - * @return string - */ - public static function clamp($s) - { - $s_ = self::stringToIntArray($s); - $s_[0] &= 248; - $s_[31] |= 64; - $s_[31] &= 128; - return self::intArrayToString($s_); - } - - /** - * Ensure limbs are less than 28 bits long to prevent float promotion. - * - * This uses a constant-time conditional swap under the hood. - * - * @param ParagonIE_Sodium_Core_Curve25519_Fe $f - * @return ParagonIE_Sodium_Core_Curve25519_Fe - */ - public static function fe_normalize(ParagonIE_Sodium_Core_Curve25519_Fe $f) - { - $x = (PHP_INT_SIZE << 3) - 1; // 31 or 63 - - $g = self::fe_copy($f); - for ($i = 0; $i < 10; ++$i) { - $mask = -(($g[$i] >> $x) & 1); - - /* - * Get two candidate normalized values for $g[$i], depending on the sign of $g[$i]: - */ - $a = $g[$i] & 0x7ffffff; - $b = -((-$g[$i]) & 0x7ffffff); - - /* - * Return the appropriate candidate value, based on the sign of the original input: - * - * The following is equivalent to this ternary: - * - * $g[$i] = (($g[$i] >> $x) & 1) ? $a : $b; - * - * Except what's written doesn't contain timing leaks. - */ - $g[$i] = ($a ^ (($a ^ $b) & $mask)); - } - return $g; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php deleted file mode 100644 index 39bf897..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Curve25519/Ge/Cached.php +++ /dev/null @@ -1,65 +0,0 @@ -YplusX = $YplusX; - if ($YminusX === null) { - $YminusX = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->YminusX = $YminusX; - if ($Z === null) { - $Z = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->Z = $Z; - if ($T2d === null) { - $T2d = new ParagonIE_Sodium_Core_Curve25519_Fe(); - } - $this->T2d = $T2d; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Ed25519.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Ed25519.php deleted file mode 100644 index f135b1c..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Ed25519.php +++ /dev/null @@ -1,551 +0,0 @@ -X)) { - throw new SodiumException('Unexpected zero result'); - } - - # fe_1(one_minus_y); - # fe_sub(one_minus_y, one_minus_y, A.Y); - # fe_invert(one_minus_y, one_minus_y); - $one_minux_y = self::fe_invert( - self::fe_sub( - self::fe_1(), - $A->Y - ) - ); - - # fe_1(x); - # fe_add(x, x, A.Y); - # fe_mul(x, x, one_minus_y); - $x = self::fe_mul( - self::fe_add(self::fe_1(), $A->Y), - $one_minux_y - ); - - # fe_tobytes(curve25519_pk, x); - return self::fe_tobytes($x); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sk_to_pk($sk) - { - return self::ge_p3_tobytes( - self::ge_scalarmult_base( - self::substr($sk, 0, 32) - ) - ); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign($message, $sk) - { - /** @var string $signature */ - $signature = self::sign_detached($message, $sk); - return $signature . $message; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message A signed message - * @param string $pk Public key - * @return string Message (without signature) - * @throws SodiumException - * @throws TypeError - */ - public static function sign_open($message, $pk) - { - /** @var string $signature */ - $signature = self::substr($message, 0, 64); - - /** @var string $message */ - $message = self::substr($message, 64); - - if (self::verify_detached($signature, $message, $pk)) { - return $message; - } - throw new SodiumException('Invalid signature'); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param string $sk - * @return string - * @throws SodiumException - * @throws TypeError - */ - public static function sign_detached($message, $sk) - { - # crypto_hash_sha512(az, sk, 32); - $az = hash('sha512', self::substr($sk, 0, 32), true); - - # az[0] &= 248; - # az[31] &= 63; - # az[31] |= 64; - $az[0] = self::intToChr(self::chrToInt($az[0]) & 248); - $az[31] = self::intToChr((self::chrToInt($az[31]) & 63) | 64); - - # crypto_hash_sha512_init(&hs); - # crypto_hash_sha512_update(&hs, az + 32, 32); - # crypto_hash_sha512_update(&hs, m, mlen); - # crypto_hash_sha512_final(&hs, nonce); - $hs = hash_init('sha512'); - hash_update($hs, self::substr($az, 32, 32)); - hash_update($hs, $message); - $nonceHash = hash_final($hs, true); - - # memmove(sig + 32, sk + 32, 32); - $pk = self::substr($sk, 32, 32); - - # sc_reduce(nonce); - # ge_scalarmult_base(&R, nonce); - # ge_p3_tobytes(sig, &R); - $nonce = self::sc_reduce($nonceHash) . self::substr($nonceHash, 32); - $sig = self::ge_p3_tobytes( - self::ge_scalarmult_base($nonce) - ); - - # crypto_hash_sha512_init(&hs); - # crypto_hash_sha512_update(&hs, sig, 64); - # crypto_hash_sha512_update(&hs, m, mlen); - # crypto_hash_sha512_final(&hs, hram); - $hs = hash_init('sha512'); - hash_update($hs, self::substr($sig, 0, 32)); - hash_update($hs, self::substr($pk, 0, 32)); - hash_update($hs, $message); - $hramHash = hash_final($hs, true); - - # sc_reduce(hram); - # sc_muladd(sig + 32, hram, az, nonce); - $hram = self::sc_reduce($hramHash); - $sigAfter = self::sc_muladd($hram, $az, $nonce); - $sig = self::substr($sig, 0, 32) . self::substr($sigAfter, 0, 32); - - try { - ParagonIE_Sodium_Compat::memzero($az); - } catch (SodiumException $ex) { - $az = null; - } - return $sig; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $sig - * @param string $message - * @param string $pk - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function verify_detached($sig, $message, $pk) - { - if (self::strlen($sig) < 64) { - throw new SodiumException('Signature is too short'); - } - if ((self::chrToInt($sig[63]) & 240) && self::check_S_lt_L(self::substr($sig, 32, 32))) { - throw new SodiumException('S < L - Invalid signature'); - } - if (self::small_order($sig)) { - throw new SodiumException('Signature is on too small of an order'); - } - if ((self::chrToInt($sig[63]) & 224) !== 0) { - throw new SodiumException('Invalid signature'); - } - $d = 0; - for ($i = 0; $i < 32; ++$i) { - $d |= self::chrToInt($pk[$i]); - } - if ($d === 0) { - throw new SodiumException('All zero public key'); - } - - /** @var bool The original value of ParagonIE_Sodium_Compat::$fastMult */ - $orig = ParagonIE_Sodium_Compat::$fastMult; - - // Set ParagonIE_Sodium_Compat::$fastMult to true to speed up verification. - ParagonIE_Sodium_Compat::$fastMult = true; - - /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P3 $A */ - $A = self::ge_frombytes_negate_vartime($pk); - - /** @var string $hDigest */ - $hDigest = hash( - 'sha512', - self::substr($sig, 0, 32) . - self::substr($pk, 0, 32) . - $message, - true - ); - - /** @var string $h */ - $h = self::sc_reduce($hDigest) . self::substr($hDigest, 32); - - /** @var ParagonIE_Sodium_Core_Curve25519_Ge_P2 $R */ - $R = self::ge_double_scalarmult_vartime( - $h, - $A, - self::substr($sig, 32) - ); - - /** @var string $rcheck */ - $rcheck = self::ge_tobytes($R); - - // Reset ParagonIE_Sodium_Compat::$fastMult to what it was before. - ParagonIE_Sodium_Compat::$fastMult = $orig; - - return self::verify_32($rcheck, self::substr($sig, 0, 32)); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $S - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function check_S_lt_L($S) - { - if (self::strlen($S) < 32) { - throw new SodiumException('Signature must be 32 bytes'); - } - $L = array( - 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, - 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10 - ); - $c = 0; - $n = 1; - $i = 32; - - /** @var array $L */ - do { - --$i; - $x = self::chrToInt($S[$i]); - $c |= ( - (($x - $L[$i]) >> 8) & $n - ); - $n &= ( - (($x ^ $L[$i]) - 1) >> 8 - ); - } while ($i !== 0); - - return $c === 0; - } - - /** - * @param string $R - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function small_order($R) - { - /** @var array> $blocklist */ - $blocklist = array( - /* 0 (order 4) */ - array( - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - ), - /* 1 (order 1) */ - array( - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - ), - /* 2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ - array( - 0x26, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, - 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, - 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, - 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x05 - ), - /* 55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ - array( - 0xc7, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, - 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, - 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, - 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0x7a - ), - /* p-1 (order 2) */ - array( - 0x13, 0xe8, 0x95, 0x8f, 0xc2, 0xb2, 0x27, 0xb0, - 0x45, 0xc3, 0xf4, 0x89, 0xf2, 0xef, 0x98, 0xf0, - 0xd5, 0xdf, 0xac, 0x05, 0xd3, 0xc6, 0x33, 0x39, - 0xb1, 0x38, 0x02, 0x88, 0x6d, 0x53, 0xfc, 0x85 - ), - /* p (order 4) */ - array( - 0xb4, 0x17, 0x6a, 0x70, 0x3d, 0x4d, 0xd8, 0x4f, - 0xba, 0x3c, 0x0b, 0x76, 0x0d, 0x10, 0x67, 0x0f, - 0x2a, 0x20, 0x53, 0xfa, 0x2c, 0x39, 0xcc, 0xc6, - 0x4e, 0xc7, 0xfd, 0x77, 0x92, 0xac, 0x03, 0xfa - ), - /* p+1 (order 1) */ - array( - 0xec, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f - ), - /* p+2707385501144840649318225287225658788936804267575313519463743609750303402022 (order 8) */ - array( - 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f - ), - /* p+55188659117513257062467267217118295137698188065244968500265048394206261417927 (order 8) */ - array( - 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f - ), - /* 2p-1 (order 2) */ - array( - 0xd9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - ), - /* 2p (order 4) */ - array( - 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - ), - /* 2p+1 (order 1) */ - array( - 0xdb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff - ) - ); - /** @var int $countBlocklist */ - $countBlocklist = count($blocklist); - - for ($i = 0; $i < $countBlocklist; ++$i) { - $c = 0; - for ($j = 0; $j < 32; ++$j) { - $c |= self::chrToInt($R[$j]) ^ (int) $blocklist[$i][$j]; - } - if ($c === 0) { - return true; - } - } - return false; - } - - /** - * @param string $s - * @return string - * @throws SodiumException - */ - public static function scalar_complement($s) - { - $t_ = self::L . str_repeat("\x00", 32); - sodium_increment($t_); - $s_ = $s . str_repeat("\x00", 32); - ParagonIE_Sodium_Compat::sub($t_, $s_); - return self::sc_reduce($t_); - } - - /** - * @return string - * @throws SodiumException - */ - public static function scalar_random() - { - do { - $r = ParagonIE_Sodium_Compat::randombytes_buf(self::SCALAR_BYTES); - $r[self::SCALAR_BYTES - 1] = self::intToChr( - self::chrToInt($r[self::SCALAR_BYTES - 1]) & 0x1f - ); - } while ( - !self::check_S_lt_L($r) || ParagonIE_Sodium_Compat::is_zero($r) - ); - return $r; - } - - /** - * @param string $s - * @return string - * @throws SodiumException - */ - public static function scalar_negate($s) - { - $t_ = self::L . str_repeat("\x00", 32) ; - $s_ = $s . str_repeat("\x00", 32) ; - ParagonIE_Sodium_Compat::sub($t_, $s_); - return self::sc_reduce($t_); - } - - /** - * @param string $a - * @param string $b - * @return string - * @throws SodiumException - */ - public static function scalar_add($a, $b) - { - $a_ = $a . str_repeat("\x00", 32); - $b_ = $b . str_repeat("\x00", 32); - ParagonIE_Sodium_Compat::add($a_, $b_); - return self::sc_reduce($a_); - } - - /** - * @param string $x - * @param string $y - * @return string - * @throws SodiumException - */ - public static function scalar_sub($x, $y) - { - $yn = self::scalar_negate($y); - return self::scalar_add($x, $yn); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305.php deleted file mode 100644 index 3301821..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305.php +++ /dev/null @@ -1,63 +0,0 @@ -update($m) - ->finish(); - } - - /** - * @internal You should not use this directly from another application - * - * @param string $mac - * @param string $m - * @param string $key - * @return bool - * @throws SodiumException - * @throws TypeError - */ - public static function onetimeauth_verify($mac, $m, $key) - { - if (self::strlen($key) < 32) { - throw new InvalidArgumentException( - 'Key must be 32 bytes long.' - ); - } - $state = new ParagonIE_Sodium_Core_Poly1305_State( - self::substr($key, 0, 32) - ); - $calc = $state - ->update($m) - ->finish(); - return self::verify_16($calc, $mac); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php deleted file mode 100644 index 4b64e04..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core/Poly1305/State.php +++ /dev/null @@ -1,445 +0,0 @@ - - */ - protected $buffer = array(); - - /** - * @var bool - */ - protected $final = false; - - /** - * @var array - */ - public $h; - - /** - * @var int - */ - protected $leftover = 0; - - /** - * @var int[] - */ - public $r; - - /** - * @var int[] - */ - public $pad; - - /** - * ParagonIE_Sodium_Core_Poly1305_State constructor. - * - * @internal You should not use this directly from another application - * - * @param string $key - * @throws InvalidArgumentException - * @throws TypeError - */ - public function __construct($key = '') - { - if (self::strlen($key) < 32) { - throw new InvalidArgumentException( - 'Poly1305 requires a 32-byte key' - ); - } - /* r &= 0xffffffc0ffffffc0ffffffc0fffffff */ - $this->r = array( - (int) ((self::load_4(self::substr($key, 0, 4))) & 0x3ffffff), - (int) ((self::load_4(self::substr($key, 3, 4)) >> 2) & 0x3ffff03), - (int) ((self::load_4(self::substr($key, 6, 4)) >> 4) & 0x3ffc0ff), - (int) ((self::load_4(self::substr($key, 9, 4)) >> 6) & 0x3f03fff), - (int) ((self::load_4(self::substr($key, 12, 4)) >> 8) & 0x00fffff) - ); - - /* h = 0 */ - $this->h = array(0, 0, 0, 0, 0); - - /* save pad for later */ - $this->pad = array( - self::load_4(self::substr($key, 16, 4)), - self::load_4(self::substr($key, 20, 4)), - self::load_4(self::substr($key, 24, 4)), - self::load_4(self::substr($key, 28, 4)), - ); - - $this->leftover = 0; - $this->final = false; - } - - /** - * Zero internal buffer upon destruction - */ - public function __destruct() - { - $this->r[0] ^= $this->r[0]; - $this->r[1] ^= $this->r[1]; - $this->r[2] ^= $this->r[2]; - $this->r[3] ^= $this->r[3]; - $this->r[4] ^= $this->r[4]; - $this->h[0] ^= $this->h[0]; - $this->h[1] ^= $this->h[1]; - $this->h[2] ^= $this->h[2]; - $this->h[3] ^= $this->h[3]; - $this->h[4] ^= $this->h[4]; - $this->pad[0] ^= $this->pad[0]; - $this->pad[1] ^= $this->pad[1]; - $this->pad[2] ^= $this->pad[2]; - $this->pad[3] ^= $this->pad[3]; - $this->leftover = 0; - $this->final = true; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @return self - * @throws SodiumException - * @throws TypeError - */ - public function update($message = '') - { - $bytes = self::strlen($message); - if ($bytes < 1) { - return $this; - } - - /* handle leftover */ - if ($this->leftover) { - $want = ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - $this->leftover; - if ($want > $bytes) { - $want = $bytes; - } - for ($i = 0; $i < $want; ++$i) { - $mi = self::chrToInt($message[$i]); - $this->buffer[$this->leftover + $i] = $mi; - } - // We snip off the leftmost bytes. - $message = self::substr($message, $want); - $bytes = self::strlen($message); - $this->leftover += $want; - if ($this->leftover < ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - // We still don't have enough to run $this->blocks() - return $this; - } - - $this->blocks( - self::intArrayToString($this->buffer), - ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - ); - $this->leftover = 0; - } - - /* process full blocks */ - if ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - /** @var int $want */ - $want = $bytes & ~(ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - 1); - if ($want >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - $block = self::substr($message, 0, $want); - if (self::strlen($block) >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - $this->blocks($block, $want); - $message = self::substr($message, $want); - $bytes = self::strlen($message); - } - } - } - - /* store leftover */ - if ($bytes) { - for ($i = 0; $i < $bytes; ++$i) { - $mi = self::chrToInt($message[$i]); - $this->buffer[$this->leftover + $i] = $mi; - } - $this->leftover = (int) $this->leftover + $bytes; - } - return $this; - } - - /** - * @internal You should not use this directly from another application - * - * @param string $message - * @param int $bytes - * @return self - * @throws TypeError - */ - public function blocks($message, $bytes) - { - if (self::strlen($message) < 16) { - $message = str_pad($message, 16, "\x00", STR_PAD_RIGHT); - } - /** @var int $hibit */ - $hibit = $this->final ? 0 : 1 << 24; /* 1 << 128 */ - $r0 = (int) $this->r[0]; - $r1 = (int) $this->r[1]; - $r2 = (int) $this->r[2]; - $r3 = (int) $this->r[3]; - $r4 = (int) $this->r[4]; - - $s1 = self::mul($r1, 5, 3); - $s2 = self::mul($r2, 5, 3); - $s3 = self::mul($r3, 5, 3); - $s4 = self::mul($r4, 5, 3); - - $h0 = $this->h[0]; - $h1 = $this->h[1]; - $h2 = $this->h[2]; - $h3 = $this->h[3]; - $h4 = $this->h[4]; - - while ($bytes >= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE) { - /* h += m[i] */ - $h0 += self::load_4(self::substr($message, 0, 4)) & 0x3ffffff; - $h1 += (self::load_4(self::substr($message, 3, 4)) >> 2) & 0x3ffffff; - $h2 += (self::load_4(self::substr($message, 6, 4)) >> 4) & 0x3ffffff; - $h3 += (self::load_4(self::substr($message, 9, 4)) >> 6) & 0x3ffffff; - $h4 += (self::load_4(self::substr($message, 12, 4)) >> 8) | $hibit; - - /* h *= r */ - $d0 = ( - self::mul($h0, $r0, 25) + - self::mul($s4, $h1, 26) + - self::mul($s3, $h2, 26) + - self::mul($s2, $h3, 26) + - self::mul($s1, $h4, 26) - ); - - $d1 = ( - self::mul($h0, $r1, 25) + - self::mul($h1, $r0, 25) + - self::mul($s4, $h2, 26) + - self::mul($s3, $h3, 26) + - self::mul($s2, $h4, 26) - ); - - $d2 = ( - self::mul($h0, $r2, 25) + - self::mul($h1, $r1, 25) + - self::mul($h2, $r0, 25) + - self::mul($s4, $h3, 26) + - self::mul($s3, $h4, 26) - ); - - $d3 = ( - self::mul($h0, $r3, 25) + - self::mul($h1, $r2, 25) + - self::mul($h2, $r1, 25) + - self::mul($h3, $r0, 25) + - self::mul($s4, $h4, 26) - ); - - $d4 = ( - self::mul($h0, $r4, 25) + - self::mul($h1, $r3, 25) + - self::mul($h2, $r2, 25) + - self::mul($h3, $r1, 25) + - self::mul($h4, $r0, 25) - ); - - /* (partial) h %= p */ - /** @var int $c */ - $c = $d0 >> 26; - /** @var int $h0 */ - $h0 = $d0 & 0x3ffffff; - $d1 += $c; - - /** @var int $c */ - $c = $d1 >> 26; - /** @var int $h1 */ - $h1 = $d1 & 0x3ffffff; - $d2 += $c; - - /** @var int $c */ - $c = $d2 >> 26; - /** @var int $h2 */ - $h2 = $d2 & 0x3ffffff; - $d3 += $c; - - /** @var int $c */ - $c = $d3 >> 26; - /** @var int $h3 */ - $h3 = $d3 & 0x3ffffff; - $d4 += $c; - - /** @var int $c */ - $c = $d4 >> 26; - /** @var int $h4 */ - $h4 = $d4 & 0x3ffffff; - $h0 += (int) self::mul($c, 5, 3); - - /** @var int $c */ - $c = $h0 >> 26; - /** @var int $h0 */ - $h0 &= 0x3ffffff; - $h1 += $c; - - // Chop off the left 32 bytes. - $message = self::substr( - $message, - ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - ); - $bytes -= ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE; - } - - $this->h = array( - (int) ($h0 & 0xffffffff), - (int) ($h1 & 0xffffffff), - (int) ($h2 & 0xffffffff), - (int) ($h3 & 0xffffffff), - (int) ($h4 & 0xffffffff) - ); - return $this; - } - - /** - * @internal You should not use this directly from another application - * - * @return string - * @throws TypeError - */ - public function finish() - { - /* process the remaining block */ - if ($this->leftover) { - $i = $this->leftover; - $this->buffer[$i++] = 1; - for (; $i < ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE; ++$i) { - $this->buffer[$i] = 0; - } - $this->final = true; - $this->blocks( - self::substr( - self::intArrayToString($this->buffer), - 0, - ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - ), - ParagonIE_Sodium_Core_Poly1305::BLOCK_SIZE - ); - } - - $h0 = (int) $this->h[0]; - $h1 = (int) $this->h[1]; - $h2 = (int) $this->h[2]; - $h3 = (int) $this->h[3]; - $h4 = (int) $this->h[4]; - - /** @var int $c */ - $c = $h1 >> 26; - /** @var int $h1 */ - $h1 &= 0x3ffffff; - /** @var int $h2 */ - $h2 += $c; - /** @var int $c */ - $c = $h2 >> 26; - /** @var int $h2 */ - $h2 &= 0x3ffffff; - $h3 += $c; - /** @var int $c */ - $c = $h3 >> 26; - $h3 &= 0x3ffffff; - $h4 += $c; - /** @var int $c */ - $c = $h4 >> 26; - $h4 &= 0x3ffffff; - /** @var int $h0 */ - $h0 += self::mul($c, 5, 3); - /** @var int $c */ - $c = $h0 >> 26; - /** @var int $h0 */ - $h0 &= 0x3ffffff; - /** @var int $h1 */ - $h1 += $c; - - /* compute h + -p */ - /** @var int $g0 */ - $g0 = $h0 + 5; - /** @var int $c */ - $c = $g0 >> 26; - /** @var int $g0 */ - $g0 &= 0x3ffffff; - - /** @var int $g1 */ - $g1 = $h1 + $c; - /** @var int $c */ - $c = $g1 >> 26; - $g1 &= 0x3ffffff; - - /** @var int $g2 */ - $g2 = $h2 + $c; - /** @var int $c */ - $c = $g2 >> 26; - /** @var int $g2 */ - $g2 &= 0x3ffffff; - - /** @var int $g3 */ - $g3 = $h3 + $c; - /** @var int $c */ - $c = $g3 >> 26; - /** @var int $g3 */ - $g3 &= 0x3ffffff; - - /** @var int $g4 */ - $g4 = ($h4 + $c - (1 << 26)) & 0xffffffff; - - /* select h if h < p, or h + -p if h >= p */ - /** @var int $mask */ - $mask = ($g4 >> 31) - 1; - - $g0 &= $mask; - $g1 &= $mask; - $g2 &= $mask; - $g3 &= $mask; - $g4 &= $mask; - - /** @var int $mask */ - $mask = ~$mask & 0xffffffff; - /** @var int $h0 */ - $h0 = ($h0 & $mask) | $g0; - /** @var int $h1 */ - $h1 = ($h1 & $mask) | $g1; - /** @var int $h2 */ - $h2 = ($h2 & $mask) | $g2; - /** @var int $h3 */ - $h3 = ($h3 & $mask) | $g3; - /** @var int $h4 */ - $h4 = ($h4 & $mask) | $g4; - - /* h = h % (2^128) */ - /** @var int $h0 */ - $h0 = (($h0) | ($h1 << 26)) & 0xffffffff; - /** @var int $h1 */ - $h1 = (($h1 >> 6) | ($h2 << 20)) & 0xffffffff; - /** @var int $h2 */ - $h2 = (($h2 >> 12) | ($h3 << 14)) & 0xffffffff; - /** @var int $h3 */ - $h3 = (($h3 >> 18) | ($h4 << 8)) & 0xffffffff; - - /* mac = (h + pad) % (2^128) */ - $f = (int) ($h0 + $this->pad[0]); - $h0 = (int) $f; - $f = (int) ($h1 + $this->pad[1] + ($f >> 32)); - $h1 = (int) $f; - $f = (int) ($h2 + $this->pad[2] + ($f >> 32)); - $h2 = (int) $f; - $f = (int) ($h3 + $this->pad[3] + ($f >> 32)); - $h3 = (int) $f; - - return self::store32_le($h0 & 0xffffffff) . - self::store32_le($h1 & 0xffffffff) . - self::store32_le($h2 & 0xffffffff) . - self::store32_le($h3 & 0xffffffff); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php deleted file mode 100644 index 37b058f..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/Ctx.php +++ /dev/null @@ -1,130 +0,0 @@ - - */ - protected $container; - - /** - * ParagonIE_Sodium_Core_ChaCha20_Ctx constructor. - * - * @internal You should not use this directly from another application - * - * @param string $key ChaCha20 key. - * @param string $iv Initialization Vector (a.k.a. nonce). - * @param string $counter The initial counter value. - * Defaults to 8 0x00 bytes. - * @throws InvalidArgumentException - * @throws SodiumException - * @throws TypeError - */ - public function __construct($key = '', $iv = '', $counter = '') - { - if (self::strlen($key) !== 32) { - throw new InvalidArgumentException('ChaCha20 expects a 256-bit key.'); - } - if (self::strlen($iv) !== 8) { - throw new InvalidArgumentException('ChaCha20 expects a 64-bit nonce.'); - } - $this->container = new SplFixedArray(16); - - /* "expand 32-byte k" as per ChaCha20 spec */ - $this->container[0] = new ParagonIE_Sodium_Core32_Int32(array(0x6170, 0x7865)); - $this->container[1] = new ParagonIE_Sodium_Core32_Int32(array(0x3320, 0x646e)); - $this->container[2] = new ParagonIE_Sodium_Core32_Int32(array(0x7962, 0x2d32)); - $this->container[3] = new ParagonIE_Sodium_Core32_Int32(array(0x6b20, 0x6574)); - - $this->container[4] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 0, 4)); - $this->container[5] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 4, 4)); - $this->container[6] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 8, 4)); - $this->container[7] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 12, 4)); - $this->container[8] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 16, 4)); - $this->container[9] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 20, 4)); - $this->container[10] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 24, 4)); - $this->container[11] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($key, 28, 4)); - - if (empty($counter)) { - $this->container[12] = new ParagonIE_Sodium_Core32_Int32(); - $this->container[13] = new ParagonIE_Sodium_Core32_Int32(); - } else { - $this->container[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 0, 4)); - $this->container[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 4, 4)); - } - $this->container[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 0, 4)); - $this->container[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 4, 4)); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $offset - * @param int|ParagonIE_Sodium_Core32_Int32 $value - * @return void - */ - #[ReturnTypeWillChange] - public function offsetSet($offset, $value) - { - if (!is_int($offset)) { - throw new InvalidArgumentException('Expected an integer'); - } - if ($value instanceof ParagonIE_Sodium_Core32_Int32) { - /* - } elseif (is_int($value)) { - $value = ParagonIE_Sodium_Core32_Int32::fromInt($value); - */ - } else { - throw new InvalidArgumentException('Expected an integer'); - } - $this->container[$offset] = $value; - } - - /** - * @internal You should not use this directly from another application - * - * @param int $offset - * @return bool - * @psalm-suppress MixedArrayOffset - */ - #[ReturnTypeWillChange] - public function offsetExists($offset) - { - return isset($this->container[$offset]); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $offset - * @return void - * @psalm-suppress MixedArrayOffset - */ - #[ReturnTypeWillChange] - public function offsetUnset($offset) - { - unset($this->container[$offset]); - } - - /** - * @internal You should not use this directly from another application - * - * @param int $offset - * @return mixed|null - * @psalm-suppress MixedArrayOffset - */ - #[ReturnTypeWillChange] - public function offsetGet($offset) - { - return isset($this->container[$offset]) - ? $this->container[$offset] - : null; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php deleted file mode 100644 index eea08de..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/ChaCha20/IetfCtx.php +++ /dev/null @@ -1,39 +0,0 @@ -container[12] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($counter, 0, 4)); - } - $this->container[13] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 0, 4)); - $this->container[14] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 4, 4)); - $this->container[15] = ParagonIE_Sodium_Core32_Int32::fromReverseString(self::substr($iv, 8, 4)); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php deleted file mode 100644 index 970481f..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/Cached.php +++ /dev/null @@ -1,65 +0,0 @@ -YplusX = $YplusX; - if ($YminusX === null) { - $YminusX = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->YminusX = $YminusX; - if ($Z === null) { - $Z = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->Z = $Z; - if ($T2d === null) { - $T2d = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->T2d = $T2d; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php b/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php deleted file mode 100644 index c9e4b16..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/paragonie/sodium_compat/src/Core32/Curve25519/Ge/P3.php +++ /dev/null @@ -1,65 +0,0 @@ -X = $x; - if ($y === null) { - $y = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->Y = $y; - if ($z === null) { - $z = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->Z = $z; - if ($t === null) { - $t = new ParagonIE_Sodium_Core32_Curve25519_Fe(); - } - $this->T = $t; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/CHANGELOG.md deleted file mode 100644 index fe2c7d4..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/CHANGELOG.md +++ /dev/null @@ -1,100 +0,0 @@ -# Change Log - -## [5.3.0] - 2022-04-26 - -* Add support for Symfony 6 -* Split out `.mo` parsing to separate `MoParser` class -* Added `CacheInterface` so alternate cache implementations are pluggable -* Added `ApcuCache` implementation to leverage shared in-memory translation cache - -## [5.2.0] - 2021-02-05 - -* Fix "Translator::selectString() must be of the type integer, boolean returned" (#37) -* Fix "TypeError: StringReader::readintarray() ($count) must be of type int, float given" failing tests on ARM (#36) -* Add support for getting and setting all translations (#30) - -## [5.1.0] - 2020-11-15 - -* Allow PHPUnit 9 (#35) -* Fix some typos -* Sync config files -* Allow PHP 8.0 - -## [5.0.0] - 2020-02-28 - -* Drop support for PHP 5.3, PHP 5.4, PHP 5.5, PHP 5.6, PHP 7.0 and HHVM -* Enabled strict mode on PHP files -* Add support for Symfony 5 (#34) -* Add support for phpunit 8 -* Rename CHANGES.md to CHANGELOG.md and follow a standard format - -## [4.0] - 2018-02-12 - -* The library no longer changes system locales. - -## [3.4] - 2017-12-15 - -* Added Translator::setTranslation method. - -## [3.3] - 2017-06-01 - -* Add support for switching locales for Loader instance. - -## [3.2] - 2017-05-23 - -* Various fixes when handling corrupted mo files. - -## [3.1] - 2017-05-15 - -* Documentation improvements. - -## [3.0] - 2017-01-23 - -* All classes moved to the PhpMyAdmin namespace. - -## [2.2] - 2017-01-07 - -* Coding style cleanup. -* Avoid installing tests using composer. - -## [2.1] - 2016-12-21 - -* Various code cleanups. -* Added support for PHP 5.3. - -## [2.0] - 2016-10-13 - -* Consistently use camelCase in API. -* No more relies on using eval(). -* Depends on symfony/expression-language for calculations. - -## [1.2] - 2016-09-22 - -* Stricter validation of plural expression. - -## [1.1] - 2016-08-29 - -* Improved handling of corrupted mo files. -* Minor performance improvements. -* Stricter validation of plural expression. - -## [1.0] - 2016-04-27 - -* Documentation improvements. -* Testsuite improvements. - -## [0.4] - 2016-03-02 - -* Fixed test failures with hhvm due to broken putenv. - -## [0.3] - 2016-03-01 - -* Added Loader::detectlocale method. - -## [0.2] - 2016-02-24 - -* Marked PHP 5.4 and 5.5 as supported. - -## [0.1] - 2016-02-23 - -* Initial release. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Cache/ApcuCacheFactory.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Cache/ApcuCacheFactory.php deleted file mode 100644 index e30540d..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Cache/ApcuCacheFactory.php +++ /dev/null @@ -1,29 +0,0 @@ -ttl = $ttl; - $this->reloadOnMiss = $reloadOnMiss; - $this->prefix = $prefix; - } - - public function getInstance(MoParser $parser, string $locale, string $domain): CacheInterface - { - return new ApcuCache($parser, $locale, $domain, $this->ttl, $this->reloadOnMiss, $this->prefix); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/StringReader.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/StringReader.php deleted file mode 100644 index a40a9f6..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/StringReader.php +++ /dev/null @@ -1,116 +0,0 @@ -. - Copyright (c) 2016 Michal Čihař - - This file is part of MoTranslator. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -namespace PhpMyAdmin\MoTranslator; - -use function file_get_contents; -use function strlen; -use function substr; -use function unpack; - -use const PHP_INT_MAX; - -/** - * Simple wrapper around string buffer for - * random access and values parsing. - */ -class StringReader -{ - /** @var string */ - private $string; - /** @var int */ - private $length; - - /** - * @param string $filename Name of file to load - */ - public function __construct(string $filename) - { - $this->string = (string) file_get_contents($filename); - $this->length = strlen($this->string); - } - - /** - * Read number of bytes from given offset. - * - * @param int $pos Offset - * @param int $bytes Number of bytes to read - */ - public function read(int $pos, int $bytes): string - { - if ($pos + $bytes > $this->length) { - throw new ReaderException('Not enough bytes!'); - } - - $data = substr($this->string, $pos, $bytes); - - return $data === false ? '' : $data; - } - - /** - * Reads a 32bit integer from the stream. - * - * @param string $unpack Unpack string - * @param int $pos Position - * - * @return int Integer from the stream - */ - public function readint(string $unpack, int $pos): int - { - $data = unpack($unpack, $this->read($pos, 4)); - if ($data === false) { - return PHP_INT_MAX; - } - - $result = $data[1]; - - /* We're reading unsigned int, but PHP will happily - * give us negative number on 32-bit platforms. - * - * See also documentation: - * https://secure.php.net/manual/en/function.unpack.php#refsect1-function.unpack-notes - */ - return $result < 0 ? PHP_INT_MAX : $result; - } - - /** - * Reads an array of integers from the stream. - * - * @param string $unpack Unpack string - * @param int $pos Position - * @param int $count How many elements should be read - * - * @return int[] Array of Integers - */ - public function readintarray(string $unpack, int $pos, int $count): array - { - $data = unpack($unpack . $count, $this->read($pos, 4 * $count)); - if ($data === false) { - return []; - } - - return $data; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Translator.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Translator.php deleted file mode 100644 index bb423cf..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/Translator.php +++ /dev/null @@ -1,388 +0,0 @@ -. - Copyright (c) 2005 Nico Kaiser - Copyright (c) 2016 Michal Čihař - - This file is part of MoTranslator. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -namespace PhpMyAdmin\MoTranslator; - -use PhpMyAdmin\MoTranslator\Cache\CacheInterface; -use PhpMyAdmin\MoTranslator\Cache\GetAllInterface; -use PhpMyAdmin\MoTranslator\Cache\InMemoryCache; -use Symfony\Component\ExpressionLanguage\ExpressionLanguage; -use Throwable; - -use function chr; -use function count; -use function explode; -use function get_class; -use function implode; -use function intval; -use function ltrim; -use function preg_replace; -use function rtrim; -use function sprintf; -use function stripos; -use function strpos; -use function strtolower; -use function substr; -use function trim; - -/** - * Provides a simple gettext replacement that works independently from - * the system's gettext abilities. - * It can read MO files and use them for translating strings. - * - * It caches ll strings and translations to speed up the string lookup. - */ -class Translator -{ - /** - * None error. - */ - public const ERROR_NONE = 0; - /** - * File does not exist. - */ - public const ERROR_DOES_NOT_EXIST = 1; - /** - * File has bad magic number. - */ - public const ERROR_BAD_MAGIC = 2; - /** - * Error while reading file, probably too short. - */ - public const ERROR_READING = 3; - - /** - * Big endian mo file magic bytes. - */ - public const MAGIC_BE = "\x95\x04\x12\xde"; - /** - * Little endian mo file magic bytes. - */ - public const MAGIC_LE = "\xde\x12\x04\x95"; - - /** - * Parse error code (0 if no error). - * - * @var int - */ - public $error = self::ERROR_NONE; - - /** - * Cache header field for plural forms. - * - * @var string|null - */ - private $pluralEquation = null; - - /** @var ExpressionLanguage|null Evaluator for plurals */ - private $pluralExpression = null; - - /** @var int|null number of plurals */ - private $pluralCount = null; - - /** @var CacheInterface */ - private $cache; - - /** - * @param CacheInterface|string|null $cache Mo file to load (null for no file) or a CacheInterface implementation - */ - public function __construct($cache) - { - if (! $cache instanceof CacheInterface) { - $cache = new InMemoryCache(new MoParser($cache)); - } - - $this->cache = $cache; - } - - /** - * Translates a string. - * - * @param string $msgid String to be translated - * - * @return string translated string (or original, if not found) - */ - public function gettext(string $msgid): string - { - return $this->cache->get($msgid); - } - - /** - * Check if a string is translated. - * - * @param string $msgid String to be checked - */ - public function exists(string $msgid): bool - { - return $this->cache->has($msgid); - } - - /** - * Sanitize plural form expression for use in ExpressionLanguage. - * - * @param string $expr Expression to sanitize - * - * @return string sanitized plural form expression - */ - public static function sanitizePluralExpression(string $expr): string - { - // Parse equation - $expr = explode(';', $expr); - if (count($expr) >= 2) { - $expr = $expr[1]; - } else { - $expr = $expr[0]; - } - - $expr = trim(strtolower($expr)); - // Strip plural prefix - if (substr($expr, 0, 6) === 'plural') { - $expr = ltrim(substr($expr, 6)); - } - - // Strip equals - if (substr($expr, 0, 1) === '=') { - $expr = ltrim(substr($expr, 1)); - } - - // Cleanup from unwanted chars - $expr = preg_replace('@[^n0-9:\(\)\?=!<>/%&| ]@', '', $expr); - - return (string) $expr; - } - - /** - * Extracts number of plurals from plurals form expression. - * - * @param string $expr Expression to process - * - * @return int Total number of plurals - */ - public static function extractPluralCount(string $expr): int - { - $parts = explode(';', $expr, 2); - $nplurals = explode('=', trim($parts[0]), 2); - if (strtolower(rtrim($nplurals[0])) !== 'nplurals') { - return 1; - } - - if (count($nplurals) === 1) { - return 1; - } - - return intval($nplurals[1]); - } - - /** - * Parse full PO header and extract only plural forms line. - * - * @param string $header Gettext header - * - * @return string verbatim plural form header field - */ - public static function extractPluralsForms(string $header): string - { - $headers = explode("\n", $header); - $expr = 'nplurals=2; plural=n == 1 ? 0 : 1;'; - foreach ($headers as $header) { - if (stripos($header, 'Plural-Forms:') !== 0) { - continue; - } - - $expr = substr($header, 13); - } - - return $expr; - } - - /** - * Get possible plural forms from MO header. - * - * @return string plural form header - */ - private function getPluralForms(): string - { - // lets assume message number 0 is header - // this is true, right? - - // cache header field for plural forms - if ($this->pluralEquation === null) { - $header = $this->cache->get(''); - - $expr = $this->extractPluralsForms($header); - $this->pluralEquation = $this->sanitizePluralExpression($expr); - $this->pluralCount = $this->extractPluralCount($expr); - } - - return $this->pluralEquation; - } - - /** - * Detects which plural form to take. - * - * @param int $n count of objects - * - * @return int array index of the right plural form - */ - private function selectString(int $n): int - { - if ($this->pluralExpression === null) { - $this->pluralExpression = new ExpressionLanguage(); - } - - try { - $plural = (int) $this->pluralExpression->evaluate( - $this->getPluralForms(), - ['n' => $n] - ); - } catch (Throwable $e) { - $plural = 0; - } - - if ($plural >= $this->pluralCount) { - $plural = $this->pluralCount - 1; - } - - return $plural; - } - - /** - * Plural version of gettext. - * - * @param string $msgid Single form - * @param string $msgidPlural Plural form - * @param int $number Number of objects - * - * @return string translated plural form - */ - public function ngettext(string $msgid, string $msgidPlural, int $number): string - { - // this should contains all strings separated by NULLs - $key = implode(chr(0), [$msgid, $msgidPlural]); - if (! $this->cache->has($key)) { - return $number !== 1 ? $msgidPlural : $msgid; - } - - $result = $this->cache->get($key); - - // find out the appropriate form - $select = $this->selectString($number); - - $list = explode(chr(0), $result); - // @codeCoverageIgnoreStart - if ($list === false) { - // This was added in 3ff2c63bcf85f81b3a205ce7222de11b33e2bf56 for phpstan - // But according to the php manual it should never happen - return ''; - } - - // @codeCoverageIgnoreEnd - - if (! isset($list[$select])) { - return $list[0]; - } - - return $list[$select]; - } - - /** - * Translate with context. - * - * @param string $msgctxt Context - * @param string $msgid String to be translated - * - * @return string translated plural form - */ - public function pgettext(string $msgctxt, string $msgid): string - { - $key = implode(chr(4), [$msgctxt, $msgid]); - $ret = $this->gettext($key); - if (strpos($ret, chr(4)) !== false) { - return $msgid; - } - - return $ret; - } - - /** - * Plural version of pgettext. - * - * @param string $msgctxt Context - * @param string $msgid Single form - * @param string $msgidPlural Plural form - * @param int $number Number of objects - * - * @return string translated plural form - */ - public function npgettext(string $msgctxt, string $msgid, string $msgidPlural, int $number): string - { - $key = implode(chr(4), [$msgctxt, $msgid]); - $ret = $this->ngettext($key, $msgidPlural, $number); - if (strpos($ret, chr(4)) !== false) { - return $msgid; - } - - return $ret; - } - - /** - * Set translation in place - * - * @param string $msgid String to be set - * @param string $msgstr Translation - */ - public function setTranslation(string $msgid, string $msgstr): void - { - $this->cache->set($msgid, $msgstr); - } - - /** - * Set the translations - * - * @param array $translations The translations "key => value" array - */ - public function setTranslations(array $translations): void - { - $this->cache->setAll($translations); - } - - /** - * Get the translations - * - * @return array The translations "key => value" array - */ - public function getTranslations(): array - { - if ($this->cache instanceof GetAllInterface) { - return $this->cache->getAll(); - } - - throw new CacheException(sprintf( - "Cache '%s' does not support getting translations", - get_class($this->cache) - )); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/functions.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/functions.php deleted file mode 100644 index 6f96952..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/motranslator/src/functions.php +++ /dev/null @@ -1,200 +0,0 @@ - - Copyright (c) 2009 Danilo Segan - Copyright (c) 2016 Michal Čihař - - This file is part of MoTranslator. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -*/ - -use PhpMyAdmin\MoTranslator\Loader; - -/** - * Sets a requested locale. - * - * @param int $category Locale category, ignored - * @param string $locale Locale name - * - * @return string Set or current locale - */ -function _setlocale(int $category, string $locale): string -{ - return Loader::getInstance()->setlocale($locale); -} - -/** - * Sets the path for a domain. - * - * @param string $domain Domain name - * @param string $path Path where to find locales - */ -function _bindtextdomain(string $domain, string $path): void -{ - Loader::getInstance()->bindtextdomain($domain, $path); -} - -/** - * Dummy compatibility function, MoTranslator assumes - * everything is using same character set on input and - * output. - * - * Generally it is wise to output in UTF-8 and have - * mo files in UTF-8. - * - * @param string $domain Domain where to set character set - * @param string $codeset Character set to set - */ -function _bind_textdomain_codeset($domain, $codeset): void -{ -} - -/** - * Sets the default domain. - * - * @param string $domain Domain name - */ -function _textdomain(string $domain): void -{ - Loader::getInstance()->textdomain($domain); -} - -/** - * Translates a string. - * - * @param string $msgid String to be translated - * - * @return string translated string (or original, if not found) - */ -function _gettext(string $msgid): string -{ - return Loader::getInstance()->getTranslator()->gettext($msgid); -} - -/** - * Translates a string, alias for _gettext. - * - * @param string $msgid String to be translated - * - * @return string translated string (or original, if not found) - */ -function __(string $msgid): string -{ - return Loader::getInstance()->getTranslator()->gettext($msgid); -} - -/** - * Plural version of gettext. - * - * @param string $msgid Single form - * @param string $msgidPlural Plural form - * @param int $number Number of objects - * - * @return string translated plural form - */ -function _ngettext(string $msgid, string $msgidPlural, int $number): string -{ - return Loader::getInstance()->getTranslator()->ngettext($msgid, $msgidPlural, $number); -} - -/** - * Translate with context. - * - * @param string $msgctxt Context - * @param string $msgid String to be translated - * - * @return string translated plural form - */ -function _pgettext(string $msgctxt, string $msgid): string -{ - return Loader::getInstance()->getTranslator()->pgettext($msgctxt, $msgid); -} - -/** - * Plural version of pgettext. - * - * @param string $msgctxt Context - * @param string $msgid Single form - * @param string $msgidPlural Plural form - * @param int $number Number of objects - * - * @return string translated plural form - */ -function _npgettext(string $msgctxt, string $msgid, string $msgidPlural, int $number): string -{ - return Loader::getInstance()->getTranslator()->npgettext($msgctxt, $msgid, $msgidPlural, $number); -} - -/** - * Translates a string. - * - * @param string $domain Domain to use - * @param string $msgid String to be translated - * - * @return string translated string (or original, if not found) - */ -function _dgettext(string $domain, string $msgid): string -{ - return Loader::getInstance()->getTranslator($domain)->gettext($msgid); -} - -/** - * Plural version of gettext. - * - * @param string $domain Domain to use - * @param string $msgid Single form - * @param string $msgidPlural Plural form - * @param int $number Number of objects - * - * @return string translated plural form - */ -function _dngettext(string $domain, string $msgid, string $msgidPlural, int $number): string -{ - return Loader::getInstance()->getTranslator($domain)->ngettext($msgid, $msgidPlural, $number); -} - -/** - * Translate with context. - * - * @param string $domain Domain to use - * @param string $msgctxt Context - * @param string $msgid String to be translated - * - * @return string translated plural form - */ -function _dpgettext(string $domain, string $msgctxt, string $msgid): string -{ - return Loader::getInstance()->getTranslator($domain)->pgettext($msgctxt, $msgid); -} - -/** - * Plural version of pgettext. - * - * @param string $domain Domain to use - * @param string $msgctxt Context - * @param string $msgid Single form - * @param string $msgidPlural Plural form - * @param int $number Number of objects - * - * @return string translated plural form - */ -function _dnpgettext(string $domain, string $msgctxt, string $msgid, string $msgidPlural, int $number): string -{ - return Loader::getInstance()->getTranslator($domain)->npgettext($msgctxt, $msgid, $msgidPlural, $number); -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/CHANGELOG.md deleted file mode 100644 index 3cea1f8..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/CHANGELOG.md +++ /dev/null @@ -1,131 +0,0 @@ -# Changelog -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - -## [3.0.1] - 2021-02-05 -### Fixed -- Fix method signature of ShapeFile::getDBFHeader() - -## [3.0.0] - 2021-02-05 -### Added -- Support for PHPUnit 8 and 9 -- Support PHP 8 - -### Changed -- Enable strict mode on PHP files -- Rename ShapeFile::$FileName property to ShapeFile::$fileName -- Rename ShapeRecord::$SHPData property to ShapeRecord::$shpData -- Rename ShapeRecord::$DBFData property to ShapeRecord::$dbfData -- ShapeRecord::getContentLength returns `null` when the shape type is not supported instead of `false`. - -### Removed -- Drop support for PHP 5.4, PHP 5.5, PHP 5.6, PHP 7.0 and HHVM - -## [2.1] - 2017-05-15 -### Changed -- Documentation improvements. - -## [2.0] - 2017-01-23 -### Changed -- Switched to PhpMyAdmin vendor namespace to follow PSR-4. - -## [1.2] - 2017-01-07 -### Added -- PHP 7.2 support. - -### Changed -- Coding style cleanup. -- Avoid installing tests and test data using composer. - -## [1.1] - 2016-11-21 -### Fixed -- Fixed adjusting of record bounding box - -## [1.0] - 2016-11-21 -### Changed -- Documentation improvements -- Code cleanups - -## [0.13] - 2016-11-21 -### Changed -- Code cleanups -- Improved test coverage - -## [0.12] - 2016-11-17 -### Changed -- Improved test coverage - -### Fixed -- Fixed DBF search - -## [0.11] - 2016-11-16 -### Changed -- Code cleanups - -### Fixed -- Fixed behavior without configured DBF header -- Fixed saving Polygon/Polyline creation with multiple parts -- Fixed saving Multipont records - -## [0.10] - 2016-09-05 -### Changed -- Improved error handling on loading - -## [0.9] - 2016-08-04 -### Changed -- Code cleanups - -## [0.8] - 2016-06-24 -### Changed -- Code cleanups - -### Fixed -- Fixed loading of records with optional data - -## [0.7] - 2016-06-24 -### Fixed -- Properly fail on loading corrupted files - -## [0.6] - 2016-06-24 -### Fixed -- Fixed detection of end of file when loading - -## [0.5] - 2016-06-24 -### Added -- Added getShapeName method to ShapeFile - -## [0.4] - 2016-06-24 -### Changed -- Make API work even without real file open - -## [0.3] - 2016-06-24 -### Added -- Better support for subclassing - -## [0.2] - 2016-06-24 -### Changed -- Make the dbase extension optional dependency - -## 0.1 - 2016-06-14 -### Added -- Inital release based on bfShapeFiles - -[Unreleased]: https://github.com/phpmyadmin/shapefile/compare/2.1...HEAD -[2.1]: https://github.com/phpmyadmin/shapefile/compare/2.0...2.1 -[2.0]: https://github.com/phpmyadmin/shapefile/compare/1.2...2.0 -[1.2]: https://github.com/phpmyadmin/shapefile/compare/1.1...1.2 -[1.1]: https://github.com/phpmyadmin/shapefile/compare/1.0...1.1 -[1.0]: https://github.com/phpmyadmin/shapefile/compare/0.13...1.0 -[0.13]: https://github.com/phpmyadmin/shapefile/compare/0.12...0.13 -[0.12]: https://github.com/phpmyadmin/shapefile/compare/0.11...0.12 -[0.11]: https://github.com/phpmyadmin/shapefile/compare/0.10...0.11 -[0.10]: https://github.com/phpmyadmin/shapefile/compare/0.9...0.10 -[0.9]: https://github.com/phpmyadmin/shapefile/compare/0.8...0.9 -[0.8]: https://github.com/phpmyadmin/shapefile/compare/0.7...0.8 -[0.7]: https://github.com/phpmyadmin/shapefile/compare/0.6...0.7 -[0.6]: https://github.com/phpmyadmin/shapefile/compare/0.5...0.6 -[0.5]: https://github.com/phpmyadmin/shapefile/compare/0.4...0.5 -[0.4]: https://github.com/phpmyadmin/shapefile/compare/0.3...0.4 -[0.3]: https://github.com/phpmyadmin/shapefile/compare/0.2...0.3 -[0.2]: https://github.com/phpmyadmin/shapefile/compare/0.1...0.2 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/README.md b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/README.md deleted file mode 100644 index 20d1806..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# shapefile -ShapeFile library for PHP - -![Test-suite](https://github.com/phpmyadmin/shapefile/workflows/Run%20tests/badge.svg?branch=master) -[![codecov.io](https://codecov.io/github/phpmyadmin/shapefile/coverage.svg?branch=master)](https://codecov.io/github/phpmyadmin/shapefile?branch=master) -[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/phpmyadmin/shapefile/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/phpmyadmin/shapefile/?branch=master) -[![Packagist](https://img.shields.io/packagist/dt/phpmyadmin/shapefile.svg)](https://packagist.org/packages/phpmyadmin/shapefile) - -## Features - -Currently the 2D and 3D variants except MultiPatch of the ShapeFile format as -defined in https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf. The -library currently supports reading and editing of ShapeFiles and the Associated -information (DBF file). There are a lot of things that can be improved in the -code, if you are interested in developing, helping with the documentation, -making translations or offering new ideas please contact us. - -## Installation - -Please use [Composer][1] to install: - -```sh -composer require phpmyadmin/shapefile -``` - -To be able to read and write the associated DBF file, you need ``dbase`` -extension: - -```sh -pecl install dbase -echo "extension=dbase.so" > /etc/php7/conf.d/dbase.ini -``` - -## Documentation - -The API documentation is available at -. - -## Usage - -To read shape file: - -```php -$shp = new \PhpMyAdmin\ShapeFile\ShapeFile(0); -$shp->loadFromFile('path/file.*'); -``` - -## History - -This library is based on BytesFall ShapeFiles library written by Ovidio (ovidio -AT users.sourceforge.net). The library has been embedded in phpMyAdmin for -years and slowly developed there. At one point people started to use our -version rather than the original library and that was the point we decided to -make it separate package. - -[1]:https://getcomposer.org/ - diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/src/ShapeRecord.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/src/ShapeRecord.php deleted file mode 100644 index 473b1c2..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/shapefile/src/ShapeRecord.php +++ /dev/null @@ -1,900 +0,0 @@ -. - * - * Copyright 2006-2007 Ovidio - * Copyright 2016 - 2017 Michal Čihař - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, you can download one from - * https://www.gnu.org/copyleft/gpl.html. - */ - -namespace PhpMyAdmin\ShapeFile; - -use function array_values; -use function count; -use function fwrite; -use function in_array; -use function is_array; -use function pack; -use function sprintf; -use function strlen; - -/** - * ShapeFile record class. - */ -class ShapeRecord -{ - /** @var resource */ - private $shpFile = null; - /** @var resource */ - private $dbfFile = null; - /** @var ShapeFile */ - private $shapeFile = null; - - /** @var int */ - private $size = 0; - /** @var int */ - private $read = 0; - - /** @var int|null */ - public $recordNumber = null; - - /** @var int */ - public $shapeType = null; - - /** @var string */ - public $lastError = ''; - - /** @var array */ - public $shpData = []; - /** @var array */ - public $dbfData = []; - - public function __construct(int $shapeType) - { - $this->shapeType = $shapeType; - } - - /** - * Loads record from files. - * - * @param ShapeFile $shapeFile The ShapeFile object - * @param resource $shpFile Opened SHP file (by reference) - * @param resource $dbfFile Opened DBF file (by reference) - */ - public function loadFromFile(ShapeFile &$shapeFile, &$shpFile, &$dbfFile): void - { - $this->shapeFile = $shapeFile; - $this->shpFile = $shpFile; - $this->dbfFile = $dbfFile; - $this->loadHeaders(); - - /* No header read */ - if ($this->read === 0) { - return; - } - - switch ($this->shapeType) { - case 0: - $this->loadNullRecord(); - break; - case 1: - $this->loadPointRecord(); - break; - case 21: - $this->loadPointMRecord(); - break; - case 11: - $this->loadPointZRecord(); - break; - case 3: - $this->loadPolyLineRecord(); - break; - case 23: - $this->loadPolyLineMRecord(); - break; - case 13: - $this->loadPolyLineZRecord(); - break; - case 5: - $this->loadPolygonRecord(); - break; - case 25: - $this->loadPolygonMRecord(); - break; - case 15: - $this->loadPolygonZRecord(); - break; - case 8: - $this->loadMultiPointRecord(); - break; - case 28: - $this->loadMultiPointMRecord(); - break; - case 18: - $this->loadMultiPointZRecord(); - break; - default: - $this->setError(sprintf('The Shape Type "%s" is not supported.', $this->shapeType)); - break; - } - - /* We need to skip rest of the record */ - while ($this->read < $this->size) { - $this->loadData('V', 4); - } - - /* Check if we didn't read too much */ - if ($this->read !== $this->size) { - $this->setError(sprintf('Failed to parse record, read=%d, size=%d', $this->read, $this->size)); - } - - if (! ShapeFile::supportsDbase() || ! isset($this->dbfFile)) { - return; - } - - $this->loadDBFData(); - } - - /** - * Saves record to files. - * - * @param resource $shpFile Opened SHP file - * @param resource $dbfFile Opened DBF file - * @param int $recordNumber Record number - */ - public function saveToFile(&$shpFile, &$dbfFile, int $recordNumber): void - { - $this->shpFile = $shpFile; - $this->dbfFile = $dbfFile; - $this->recordNumber = $recordNumber; - $this->saveHeaders(); - - switch ($this->shapeType) { - case 0: - // Nothing to save - break; - case 1: - $this->savePointRecord(); - break; - case 21: - $this->savePointMRecord(); - break; - case 11: - $this->savePointZRecord(); - break; - case 3: - $this->savePolyLineRecord(); - break; - case 23: - $this->savePolyLineMRecord(); - break; - case 13: - $this->savePolyLineZRecord(); - break; - case 5: - $this->savePolygonRecord(); - break; - case 25: - $this->savePolygonMRecord(); - break; - case 15: - $this->savePolygonZRecord(); - break; - case 8: - $this->saveMultiPointRecord(); - break; - case 28: - $this->saveMultiPointMRecord(); - break; - case 18: - $this->saveMultiPointZRecord(); - break; - default: - $this->setError(sprintf('The Shape Type "%s" is not supported.', $this->shapeType)); - break; - } - - if (! ShapeFile::supportsDbase() || $this->dbfFile === null) { - return; - } - - $this->saveDBFData(); - } - - /** - * Updates DBF data to match header. - * - * @param array $header DBF structure header - */ - public function updateDBFInfo(array $header): void - { - $tmp = $this->dbfData; - unset($this->dbfData); - $this->dbfData = []; - foreach ($header as $value) { - $this->dbfData[$value[0]] = $tmp[$value[0]] ?? ''; - } - } - - /** - * Reads data. - * - * @param string $type type for unpack() - * @param int $count number of bytes - * - * @return mixed - */ - private function loadData(string $type, int $count) - { - $data = $this->shapeFile->readSHP($count); - if ($data === false) { - return false; - } - - $this->read += strlen($data); - - return Util::loadData($type, $data); - } - - /** - * Loads metadata header from a file. - */ - private function loadHeaders(): void - { - $this->shapeType = false; - $this->recordNumber = $this->loadData('N', 4); - if ($this->recordNumber === false) { - return; - } - - // We read the length of the record - $this->size = $this->loadData('N', 4); - if ($this->size === false) { - return; - } - - $this->size = ($this->size * 2) + 8; - $this->shapeType = $this->loadData('V', 4); - } - - /** - * Saves metadata header to a file. - */ - private function saveHeaders(): void - { - fwrite($this->shpFile, pack('N', $this->recordNumber)); - fwrite($this->shpFile, pack('N', $this->getContentLength())); - fwrite($this->shpFile, pack('V', $this->shapeType)); - } - - private function loadPoint(): array - { - $data = []; - - $data['x'] = $this->loadData('d', 8); - $data['y'] = $this->loadData('d', 8); - - return $data; - } - - private function loadPointM(): array - { - $data = $this->loadPoint(); - - $data['m'] = $this->loadData('d', 8); - - return $data; - } - - private function loadPointZ(): array - { - $data = $this->loadPoint(); - - $data['z'] = $this->loadData('d', 8); - $data['m'] = $this->loadData('d', 8); - - return $data; - } - - private function savePoint(array $data): void - { - fwrite($this->shpFile, Util::packDouble($data['x'])); - fwrite($this->shpFile, Util::packDouble($data['y'])); - } - - private function savePointM(array $data): void - { - fwrite($this->shpFile, Util::packDouble($data['x'])); - fwrite($this->shpFile, Util::packDouble($data['y'])); - fwrite($this->shpFile, Util::packDouble($data['m'])); - } - - private function savePointZ(array $data): void - { - fwrite($this->shpFile, Util::packDouble($data['x'])); - fwrite($this->shpFile, Util::packDouble($data['y'])); - fwrite($this->shpFile, Util::packDouble($data['z'])); - fwrite($this->shpFile, Util::packDouble($data['m'])); - } - - private function loadNullRecord(): void - { - $this->shpData = []; - } - - private function loadPointRecord(): void - { - $this->shpData = $this->loadPoint(); - } - - private function loadPointMRecord(): void - { - $this->shpData = $this->loadPointM(); - } - - private function loadPointZRecord(): void - { - $this->shpData = $this->loadPointZ(); - } - - private function savePointRecord(): void - { - $this->savePoint($this->shpData); - } - - private function savePointMRecord(): void - { - $this->savePointM($this->shpData); - } - - private function savePointZRecord(): void - { - $this->savePointZ($this->shpData); - } - - private function loadBBox(): void - { - $this->shpData['xmin'] = $this->loadData('d', 8); - $this->shpData['ymin'] = $this->loadData('d', 8); - $this->shpData['xmax'] = $this->loadData('d', 8); - $this->shpData['ymax'] = $this->loadData('d', 8); - } - - private function loadMultiPointRecord(): void - { - $this->shpData = []; - $this->loadBBox(); - - $this->shpData['numpoints'] = $this->loadData('V', 4); - - for ($i = 0; $i < $this->shpData['numpoints']; ++$i) { - $this->shpData['points'][] = $this->loadPoint(); - } - } - - private function loadMultiPointMZRecord(string $type): void - { - /* The m dimension is optional, depends on bounding box data */ - if ($type === 'm' && ! $this->shapeFile->hasMeasure()) { - return; - } - - $this->shpData[$type . 'min'] = $this->loadData('d', 8); - $this->shpData[$type . 'max'] = $this->loadData('d', 8); - - for ($i = 0; $i < $this->shpData['numpoints']; ++$i) { - $this->shpData['points'][$i][$type] = $this->loadData('d', 8); - } - } - - private function loadMultiPointMRecord(): void - { - $this->loadMultiPointRecord(); - - $this->loadMultiPointMZRecord('m'); - } - - private function loadMultiPointZRecord(): void - { - $this->loadMultiPointRecord(); - - $this->loadMultiPointMZRecord('z'); - $this->loadMultiPointMZRecord('m'); - } - - private function saveMultiPointRecord(): void - { - fwrite($this->shpFile, pack( - 'dddd', - $this->shpData['xmin'], - $this->shpData['ymin'], - $this->shpData['xmax'], - $this->shpData['ymax'] - )); - - fwrite($this->shpFile, pack('V', $this->shpData['numpoints'])); - - for ($i = 0; $i < $this->shpData['numpoints']; ++$i) { - $this->savePoint($this->shpData['points'][$i]); - } - } - - private function saveMultiPointMZRecord(string $type): void - { - fwrite($this->shpFile, pack('dd', $this->shpData[$type . 'min'], $this->shpData[$type . 'max'])); - - for ($i = 0; $i < $this->shpData['numpoints']; ++$i) { - fwrite($this->shpFile, Util::packDouble($this->shpData['points'][$i][$type])); - } - } - - private function saveMultiPointMRecord(): void - { - $this->saveMultiPointRecord(); - - $this->saveMultiPointMZRecord('m'); - } - - private function saveMultiPointZRecord(): void - { - $this->saveMultiPointRecord(); - - $this->saveMultiPointMZRecord('z'); - $this->saveMultiPointMZRecord('m'); - } - - private function loadPolyLineRecord(): void - { - $this->shpData = []; - $this->loadBBox(); - - $this->shpData['numparts'] = $this->loadData('V', 4); - $this->shpData['numpoints'] = $this->loadData('V', 4); - - $numparts = $this->shpData['numparts']; - $numpoints = $this->shpData['numpoints']; - - for ($i = 0; $i < $numparts; ++$i) { - $this->shpData['parts'][$i] = $this->loadData('V', 4); - } - - $part = 0; - for ($i = 0; $i < $numpoints; ++$i) { - if ($part + 1 < $numparts && $i === $this->shpData['parts'][$part + 1]) { - ++$part; - } - - if (! isset($this->shpData['parts'][$part]['points']) - || ! is_array($this->shpData['parts'][$part]['points']) - ) { - $this->shpData['parts'][$part] = ['points' => []]; - } - - $this->shpData['parts'][$part]['points'][] = $this->loadPoint(); - } - } - - private function loadPolyLineMZRecord(string $type): void - { - /* The m dimension is optional, depends on bounding box data */ - if ($type === 'm' && ! $this->shapeFile->hasMeasure()) { - return; - } - - $this->shpData[$type . 'min'] = $this->loadData('d', 8); - $this->shpData[$type . 'max'] = $this->loadData('d', 8); - - $numparts = $this->shpData['numparts']; - $numpoints = $this->shpData['numpoints']; - - $part = 0; - for ($i = 0; $i < $numpoints; ++$i) { - if ($part + 1 < $numparts && $i === $this->shpData['parts'][$part + 1]) { - ++$part; - } - - $this->shpData['parts'][$part]['points'][$i][$type] = $this->loadData('d', 8); - } - } - - private function loadPolyLineMRecord(): void - { - $this->loadPolyLineRecord(); - - $this->loadPolyLineMZRecord('m'); - } - - private function loadPolyLineZRecord(): void - { - $this->loadPolyLineRecord(); - - $this->loadPolyLineMZRecord('z'); - $this->loadPolyLineMZRecord('m'); - } - - private function savePolyLineRecord(): void - { - fwrite($this->shpFile, pack( - 'dddd', - $this->shpData['xmin'], - $this->shpData['ymin'], - $this->shpData['xmax'], - $this->shpData['ymax'] - )); - - fwrite($this->shpFile, pack('VV', $this->shpData['numparts'], $this->shpData['numpoints'])); - - $partIndex = 0; - for ($i = 0; $i < $this->shpData['numparts']; ++$i) { - fwrite($this->shpFile, pack('V', $partIndex)); - $partIndex += count($this->shpData['parts'][$i]['points']); - } - - foreach ($this->shpData['parts'] as $partData) { - foreach ($partData['points'] as $pointData) { - $this->savePoint($pointData); - } - } - } - - private function savePolyLineMZRecord(string $type): void - { - fwrite($this->shpFile, pack('dd', $this->shpData[$type . 'min'], $this->shpData[$type . 'max'])); - - foreach ($this->shpData['parts'] as $partData) { - foreach ($partData['points'] as $pointData) { - fwrite($this->shpFile, Util::packDouble($pointData[$type])); - } - } - } - - private function savePolyLineMRecord(): void - { - $this->savePolyLineRecord(); - - $this->savePolyLineMZRecord('m'); - } - - private function savePolyLineZRecord(): void - { - $this->savePolyLineRecord(); - - $this->savePolyLineMZRecord('z'); - $this->savePolyLineMZRecord('m'); - } - - private function loadPolygonRecord(): void - { - $this->loadPolyLineRecord(); - } - - private function loadPolygonMRecord(): void - { - $this->loadPolyLineMRecord(); - } - - private function loadPolygonZRecord(): void - { - $this->loadPolyLineZRecord(); - } - - private function savePolygonRecord(): void - { - $this->savePolyLineRecord(); - } - - private function savePolygonMRecord(): void - { - $this->savePolyLineMRecord(); - } - - private function savePolygonZRecord(): void - { - $this->savePolyLineZRecord(); - } - - private function adjustBBox(array $point): void - { - // Adjusts bounding box based on point - $directions = [ - 'x', - 'y', - 'z', - 'm', - ]; - foreach ($directions as $direction) { - if (! isset($point[$direction])) { - continue; - } - - $min = $direction . 'min'; - $max = $direction . 'max'; - if (! isset($this->shpData[$min]) || ($this->shpData[$min] > $point[$direction])) { - $this->shpData[$min] = $point[$direction]; - } - - if (isset($this->shpData[$max]) && ($this->shpData[$max] >= $point[$direction])) { - continue; - } - - $this->shpData[$max] = $point[$direction]; - } - } - - /** - * Sets dimension to 0 if not set. - * - * @param array $point Point to check - * @param string $dimension Dimension to check - * - * @return array - */ - private function fixPoint(array $point, string $dimension): array - { - if (! isset($point[$dimension])) { - $point[$dimension] = 0.0; // no_value - } - - return $point; - } - - /** - * Adjust point and bounding box when adding point. - * - * @param array $point Point data - * - * @return array Fixed point data - */ - private function adjustPoint(array $point): array - { - $type = $this->shapeType / 10; - if ($type >= 2) { - $point = $this->fixPoint($point, 'm'); - } elseif ($type >= 1) { - $point = $this->fixPoint($point, 'z'); - $point = $this->fixPoint($point, 'm'); - } - - return $point; - } - - /** - * Adds point to a record. - * - * @param array $point Point data - * @param int $partIndex Part index - */ - public function addPoint(array $point, int $partIndex = 0): void - { - $point = $this->adjustPoint($point); - switch ($this->shapeType) { - case 0: - //Don't add anything - return; - case 1: - case 11: - case 21: - //Substitutes the value of the current point - $this->shpData = $point; - break; - case 3: - case 5: - case 13: - case 15: - case 23: - case 25: - //Adds a new point to the selected part - $this->shpData['parts'][$partIndex]['points'][] = $point; - $this->shpData['numparts'] = count($this->shpData['parts']); - $this->shpData['numpoints'] = 1 + ($this->shpData['numpoints'] ?? 0); - break; - case 8: - case 18: - case 28: - //Adds a new point - $this->shpData['points'][] = $point; - $this->shpData['numpoints'] = 1 + ($this->shpData['numpoints'] ?? 0); - break; - default: - $this->setError(sprintf('The Shape Type "%s" is not supported.', $this->shapeType)); - - return; - } - - $this->adjustBBox($point); - } - - /** - * Deletes point from a record. - * - * @param int $pointIndex Point index - * @param int $partIndex Part index - */ - public function deletePoint(int $pointIndex = 0, int $partIndex = 0): void - { - switch ($this->shapeType) { - case 0: - //Don't delete anything - break; - case 1: - case 11: - case 21: - //Sets the value of the point to zero - $this->shpData['x'] = 0.0; - $this->shpData['y'] = 0.0; - if (in_array($this->shapeType, [11, 21])) { - $this->shpData['m'] = 0.0; - } - - if (in_array($this->shapeType, [11])) { - $this->shpData['z'] = 0.0; - } - - break; - case 3: - case 5: - case 13: - case 15: - case 23: - case 25: - //Deletes the point from the selected part, if exists - if (isset($this->shpData['parts'][$partIndex]) - && isset($this->shpData['parts'][$partIndex]['points'][$pointIndex]) - ) { - $count = count($this->shpData['parts'][$partIndex]['points']) - 1; - for ($i = $pointIndex; $i < $count; ++$i) { - $point = $this->shpData['parts'][$partIndex]['points'][$i + 1]; - $this->shpData['parts'][$partIndex]['points'][$i] = $point; - } - - $count = count($this->shpData['parts'][$partIndex]['points']) - 1; - unset($this->shpData['parts'][$partIndex]['points'][$count]); - - $this->shpData['numparts'] = count($this->shpData['parts']); - --$this->shpData['numpoints']; - } - - break; - case 8: - case 18: - case 28: - //Deletes the point, if exists - if (isset($this->shpData['points'][$pointIndex])) { - $count = count($this->shpData['points']) - 1; - for ($i = $pointIndex; $i < $count; ++$i) { - $this->shpData['points'][$i] = $this->shpData['points'][$i + 1]; - } - - unset($this->shpData['points'][count($this->shpData['points']) - 1]); - - --$this->shpData['numpoints']; - } - - break; - default: - $this->setError(sprintf('The Shape Type "%s" is not supported.', $this->shapeType)); - break; - } - } - - /** - * Returns length of content. - */ - public function getContentLength(): ?int - { - // The content length for a record is the length of the record contents section measured in 16-bit words. - // one coordinate makes 4 16-bit words (64 bit double) - switch ($this->shapeType) { - case 0: - $result = 0; - break; - case 1: - $result = 10; - break; - case 21: - $result = 10 + 4; - break; - case 11: - $result = 10 + 8; - break; - case 3: - case 5: - $count = count($this->shpData['parts']); - $result = 22 + 2 * $count; - for ($i = 0; $i < $count; ++$i) { - $result += 8 * count($this->shpData['parts'][$i]['points']); - } - - break; - case 23: - case 25: - $count = count($this->shpData['parts']); - $result = 22 + (2 * 4) + 2 * $count; - for ($i = 0; $i < $count; ++$i) { - $result += (8 + 4) * count($this->shpData['parts'][$i]['points']); - } - - break; - case 13: - case 15: - $count = count($this->shpData['parts']); - $result = 22 + (4 * 4) + 2 * $count; - for ($i = 0; $i < $count; ++$i) { - $result += (8 + 8) * count($this->shpData['parts'][$i]['points']); - } - - break; - case 8: - $result = 20 + 8 * count($this->shpData['points']); - break; - case 28: - $result = 20 + (2 * 4) + (8 + 4) * count($this->shpData['points']); - break; - case 18: - $result = 20 + (4 * 4) + (8 + 8) * count($this->shpData['points']); - break; - default: - $result = null; - $this->setError(sprintf('The Shape Type "%s" is not supported.', $this->shapeType)); - break; - } - - return $result; - } - - private function loadDBFData(): void - { - $this->dbfData = @dbase_get_record_with_names($this->dbfFile, $this->recordNumber); - unset($this->dbfData['deleted']); - } - - private function saveDBFData(): void - { - if (count($this->dbfData) === 0) { - return; - } - - unset($this->dbfData['deleted']); - if ($this->recordNumber <= dbase_numrecords($this->dbfFile)) { - if (! dbase_replace_record($this->dbfFile, array_values($this->dbfData), $this->recordNumber)) { - $this->setError('I wasn\'t possible to update the information in the DBF file.'); - } - } else { - if (! dbase_add_record($this->dbfFile, array_values($this->dbfData))) { - $this->setError('I wasn\'t possible to add the information to the DBF file.'); - } - } - } - - /** - * Sets error message. - */ - public function setError(string $error): void - { - $this->lastError = $error; - } - - /** - * Returns shape name. - */ - public function getShapeName(): string - { - return Util::nameShape($this->shapeType); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/LICENSE.txt b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/LICENSE.txt deleted file mode 100644 index d159169..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/LICENSE.txt +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/README.md b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/README.md deleted file mode 100644 index ddf1627..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/README.md +++ /dev/null @@ -1,137 +0,0 @@ -# SQL Parser - -A validating SQL lexer and parser with a focus on MySQL dialect. - -## Code status - -![Tests](https://github.com/phpmyadmin/sql-parser/workflows/Run%20tests/badge.svg?branch=master) -[![Code Coverage](https://scrutinizer-ci.com/g/phpmyadmin/sql-parser/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/phpmyadmin/sql-parser/?branch=master) -[![codecov.io](https://codecov.io/github/phpmyadmin/sql-parser/coverage.svg?branch=master)](https://codecov.io/github/phpmyadmin/sql-parser?branch=master) -[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/phpmyadmin/sql-parser/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/phpmyadmin/sql-parser/?branch=master) -[![Translation status](https://hosted.weblate.org/widgets/phpmyadmin/-/svg-badge.svg)](https://hosted.weblate.org/engage/phpmyadmin/?utm_source=widget) -[![Packagist](https://img.shields.io/packagist/dt/phpmyadmin/sql-parser.svg)](https://packagist.org/packages/phpmyadmin/sql-parser) -[![Open Source Helpers](https://www.codetriage.com/phpmyadmin/sql-parser/badges/users.svg)](https://www.codetriage.com/phpmyadmin/sql-parser) -[![Type coverage](https://shepherd.dev/github/phpmyadmin/sql-parser/coverage.svg)](https://shepherd.dev/github/phpmyadmin/sql-parser) -[![Infection MSI](https://badge.stryker-mutator.io/github.com/phpmyadmin/sql-parser/master)](https://infection.github.io) - -## Installation - -Please use [Composer][1] to install: - -```sh -composer require phpmyadmin/sql-parser -``` - -## Documentation - -The API documentation is available at -. - -## Usage - -### Command line utilities - -Command line utility to syntax highlight SQL query: - -```sh -./vendor/bin/highlight-query --query "SELECT 1" -``` - -Command line utility to lint SQL query: - -```sh -./vendor/bin/lint-query --query "SELECT 1" -``` - -Command line utility to tokenize SQL query: - -```sh -./vendor/bin/tokenize-query --query "SELECT 1" -``` - -All commands are able to parse input from stdin (standard in), such as: - -```sh -echo "SELECT 1" | ./vendor/bin/highlight-query -cat example.sql | ./vendor/bin/lint-query -``` - -### Formatting SQL query - -```php -echo PhpMyAdmin\SqlParser\Utils\Formatter::format($query, ['type' => 'html']); -``` - -### Discoverying query type - -```php -use PhpMyAdmin\SqlParser\Parser; -use PhpMyAdmin\SqlParser\Utils\Query; - -$query = 'OPTIMIZE TABLE tbl'; -$parser = new Parser($query); -$flags = Query::getFlags($parser->statements[0]); - -echo $flags['querytype']; -``` - -### Parsing and building SQL query - -```php -require __DIR__ . '/vendor/autoload.php'; - -$query1 = 'select * from a'; -$parser = new PhpMyAdmin\SqlParser\Parser($query1); - -// inspect query -var_dump($parser->statements[0]); // outputs object(PhpMyAdmin\SqlParser\Statements\SelectStatement) - -// modify query by replacing table a with table b -$table2 = new \PhpMyAdmin\SqlParser\Components\Expression('', 'b', '', ''); -$parser->statements[0]->from[0] = $table2; - -// build query again from an array of object(PhpMyAdmin\SqlParser\Statements\SelectStatement) to a string -$statement = $parser->statements[0]; -$query2 = $statement->build(); -var_dump($query2); // outputs string(19) 'SELECT * FROM `b` ' - -// Change SQL mode -PhpMyAdmin\SqlParser\Context::setMode('ANSI_QUOTES'); - -// build the query again using different quotes -$query2 = $statement->build(); -var_dump($query2); // outputs string(19) 'SELECT * FROM "b" ' -``` - -## Localization - -You can localize error messages installing `phpmyadmin/motranslator` version `5.0` or newer: - -```sh -composer require phpmyadmin/motranslator:^5.0 -``` - -The locale is automatically detected from your environment, you can also set a different locale - -**From cli**: - -```sh -LC_ALL=pl ./vendor/bin/lint-query --query "SELECT 1" -``` - -**From php**: - -```php -require __DIR__ . '/vendor/autoload.php'; - -$GLOBALS['lang'] = 'pl'; - -$query1 = 'select * from a'; -$parser = new PhpMyAdmin\SqlParser\Parser($query1); -``` - -## More information - -This library was originally created during the Google Summer of Code 2015 and has been used by phpMyAdmin since version 4.5. - -[1]:https://getcomposer.org/ diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/az/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/az/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index 0b4ee08b3b381e4df30d0ff7557475125901d44d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3420 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 CGG?Oy diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/bn/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/bn/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index 980c2851e29679604973a67db0bdad161fb277ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmZuuPfyf99Ib+h*`x93;pYt_vnvJ@Qoy*#q9j`&u=p=tX6dk7)6SI6tjJ9<%7GXU z1UyLef?YyXj0d8Lfv?~vF!LS!0=~8q5@VCs{^mDt-n{qguXDYd4xV1%0x$xc0UiR` z69aW%2^a(pf%Cv`VDpsYoCSWOes|h&Ht}v<1b9cpRvXCM8AL@dB*_*`fs% zMI7`+m559`F{BoW=U4GClTxurxCxXjJ5$O~5XE7Bzwl{An6fjIs7GSKut}fY5s3!T zr7k&1T^&JIKb7&87Rb>MZl7 z*?5(1PrKgaoisMYBW;ws+08_)$#G!+T7fAP-Uyb zTY@zNk51f-w2g_iTdA~_Ho`A2izcK*StYGXT%^zyIF43$=D4DlLKgExi=@(&l@nQ) znzH0gdbN|l1LZ5Fn@Sq|7uHyb5yFTkrV@udki)dl&Q#3kd}D$Qo$#_Oiy~n)xuAUf z43~zQfho;|orH&MLM4%QNyhn7k6s<7q8#m$ba9jhE)AFNv0FlBzbBi=-69SRmaml@ zo4&T`rcK}5^oVS_YttRueTD*ykLYFZ?(?jh@9)|4(54$U-M8rv)L^}_-8GxO#k(IX z@Ni%a6?FfKqJq>adV99JYSS;a`zmjtThzGoX+cK^yw5i6=A`{XYtweub8{QmENp$s zoovHATDzdxbj^O)asJ8h!lqwyC3u1JOdPEu2JXhGgCguf9vdx$&sZ;uWT-G5_{pMf z<+~tk7qy9XVFX*b&2_X90Gw~Rt$bd`NAh{^fbso!z{d)I00YbB A@Bjb+ diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/cy/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/cy/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index 4b29a261edcd87c0f24f249dc30a853704d96ec7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 544 zcmYL`&raMh5XPz6Q;t3NFb58;S|?5*XzL~I3d$m+U6s=9pQ}lxiL1o6Y%gWsfhz~z z2VSE`o`dm%*pWWjKY2W!`TYO&tLrU_7o<0&ZPH892U3g?>7EWh(i(G~GFrg*Z!@scd2~=FXK0NJZ0=jtu!Cjm*}@12PHNxFV4R=W&JHWt3`(aOLvs3+ zo#BOwrPvo4P(Z=+lI5J`CFHr_yYG3yc`}neu*Gv70drM%vWMF%)ycaX*dNwBsR>K9qe}@STC}yGd^IG{=;)>3{&IU%sx)%vrUiLK<}c<>Q%NW zD4<>?^OO0}#)LfO$)V8!HFdeNG)BP7kl9`;JqGHO{0Y^M#gvUUd2yOQ=-832O`~)x zV05m?l78uA&!)x=UVyf1^wr)N9=Fw7T~+)Yd2AhvzpR2!gMGzXcb;_rNE>gAbSEPl1u-!AWolly zKM6YU82A%V_I(Q!zwcJ_?}1P8{%`P8;1eGVg2Uj~z@y-ID*O?+#QU4zY4B}O;(X*o z<@hrAY2G)$kAW7H_(!1l@j57e{TloP_*d{t;Jcv2^IuTbKmOs;zXmArehd8lfgtFD zE#8lOr2O7ig*U+lbI zK;hvI_*L-lpv3>^N6Yms@M+%HKpFo5coh5v_*w8ScoO_4DBn8-DYD;_;4$!<;0bUW zJPy7AJ_FtbTj0Tum-bJCl9%s+!dnVH3H})T9QaF6fqw+W|93&z|3B6IQ5MPg1yJ(w zeeekQLl9ag59R?9c;83%5uXblK*=96DE4K$B9Ed8$+!3*kN7ChWBj0^__hKc;zz0` zk8mV9lpINX!X?r!9??Ja7msK{9^sgyRd6cjM6`{B3a*4tj#03{57`uY434ZEj?|8h zhbC9MCNs+1Oik!bbW(MOUUl6tiPVwR!%;K1pq8$$ZEjt^vazIYn9;7wBDJgY$qKOu zW0%{cr#hJqZy3LS-VFv?xlHN*Ynqr{m3!^Yz$E2Hg)^mJiBpk@?ZA4IsgCix#w5ym zrSaDHjY>1KW8E-UE-~U)W)eLx%B3dL-nwL;WBF*%aj`0_>On2C_`Y*WHqK49W1IzS>-!FBJ2138bl&9Rpx2$)?EgGdiPEuUm%3MT!{cb< zQJJt}nndDUeve=i<+|N`e|8v8O;S%^*Tu2hC5q07C}fH2PSi4+`u&UN9QGJXcn1UKbrHXFybWC4NI-e(kpf@jvm0yawyWm+t4N5*oGc<(WF`uqL;)k zO#CQi!!D;(BV)ygh?+uSBV`k{K8(F>l#Xl zY*MIhmhPHK*w@q(j{3~P$U$Pws>;~K3ma>-9MvtVsx`BUDu(-{brLL*)OPjmhDl^3 zGokAx_LiLKSjx_%n9R*a+UtV9x$)Z9YkN%uRxNo&XZC)z;9BNhgS5trQR5Yp$9D z@w{3&yYTJC3lKqvaamivS_Y$5n-ChAorPe7?wU&n>d+&`jhEt-pHz%GN)9K|XM1<5 zhFh~&!$gzjSkqXiZMa$A5) zhBhK%l2XVbd2PsI36v5pl6#gKY3pO52Hf?#)yk|y5_ zu2m!Xm+_;aii?TNiyU+L z+WVc{0jC`wKWE+KXiVje3wXe1=!FtBbML_7g_i~uh&~0x~ z*^0XW*I+1b1{XPKCb39Zp%qkSZ<%+OxS*;4!mgE1tZi=ER6p+20>PFEF{s&KyIzs>e diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/he/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/he/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index 49d04c87013192379b1bc21853d957dce99f0041..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6153 zcmb`KU2Ggz6~`x#1TeHfp@l$cZ`>rco9y}{sYo^-t(!Pas6T?^1gJn_ynAgA*`3+U z&c-qDP$VQC`hZiflelplCs?iRCnTZ@iiCK82Of~%rPCKG(KjRn0*Qw{mEXBDJ3C&l zlOQpY^PhX~Ip>~_|2eaH?~$!@7SDeE9_R1w7R!1O9QY{z@Jw#CtY<(6+zHmeC&9Pk z{dd3t)?2n&mI8;sFM}SK2VVuh1pX6z3T)dR>1V;mSPy|ufEpCNAA?^2m%t<7FF^(V z2iylf_OVF+IQTi%d9VYV0_C11P~!MCcmRAC6uE~!ZdrT4o#5xeQ(y-C4!8?^6?_`} zd5rIZ?X0a&Sk^({DNyq8ZBX`q0zL|^fu9C{3rc?e6rcY)UO(Cv$$u4mg!7j{@uvhz z9)ARW7Q7991^fjl@&6eV`+ox^o)1CE&*Pu8tPi%}6WGtX_aVzV16~FXgMR=|gWDdq ztO7U;N*?cm65qeT*TEe)-6{LvdGI~(Iq=!fM0u)$;?F|7ejAiL{T1}V?Ku54a2k~R zeg{4eK1`63=V9;#@DeC~{t6WR55eQ$E|S2jH3>>Se*j8+i{LTvZBXj-0Vr`jP0?1X%>E`YniTcG&;dr)}xcTn_q zU`*^Dim?ES+)rbC3*5{4FCb+xkLb&u=*iO)fwdJB-zBg0NA4Eh$|G@X=kJTM;DNeU zH-DtS^vX6+9_bg#VEj;^Jd(>U{yxRu4*tYHCHPkXSghHlfw20v-V7T=WdEpUWK?kdiKgtt5yL)yO)Fr!E)fF|ReXaE6vd#y( zuuqLu12yhd-GbWPyQ`43`c(T!|LD1qp|kDkf}Wo8{DPXYD~X0ku+k!7uJXpmD;q1!ep$O|3XFTjqBlh*#-_=H zsCeTE<5F>%3!9aj91c`b+Z8Ohx}MX59(P=)MNRwNg1BK)te`pkUUyr6O!NkkvR1M; zH3_pSWjn7sDxK7F+@m!T#$~OSV*a;}4!1YitsmKe(y)G$aEIfdm zL+_SNY^Yg zNVBz46faZxE89N3o3+llWWtO?I56S3hS=*Xni9!R+KfGlw@$I(k@A#OOp2yFw~!bZ zKK|0WN^CS@L{ju>A>rjOY-S`L;_0j7t#uAF=gAzTP4Y|wI6P zUNeW+ofhoCHl=IQO5L8amBbgToVR^vvuSz8_r6EHGN%if^V*lel~bqmm=85O%9G{6 z>AphAaXZ^ablLNR%wT20DP&%#PE<0ZUQV^086M3X_qF*%WKPf*In~?U+nwp&pXuGN zdV6xu9@@*g8^O#7Ul_R{mitzJ-$-U~ICG*;of^&!p5FWN@KAr-0MjZnDvesS1JBQ? zljjBo)KK4GzdF)C*mrv1`Mwh;M*7d5J%*?|QMD&@W>njy#OouIK~S#by1FL43SZ^y zlpe#9&U*etS2+r{(nVyYXhUFD+fxQCUHnPGkO+~~>7!G@fKGOqnhznk}DzUI`yF(+s{Q>^-SF>})M zOO>2*%Vt?Qdf>2%UXOOT>gZ9`)2W_Q-72R#qIIvVd*bym)zhu^>`|`TEpLc-%W*Hq z`#U=iw|z77qITu`EqVM#lm~Sn+np)sOKnzI3+KZ*70!f<;as@F;-(50qTO&!J^%$3 z-r?Ye9PJaq*HyTL^c%d+#lLY9^_nuO^Wj>^Yr_um^DNgCFUuTWQ}4gB82>DK|CO7n zgZ*paRfJZ;T4&Zu3>tr8A5-RT7%uEg^0}$pYPe7rmc&R_R-yu~Qm(~tRYHo2$Ste93R`%+!m*Jx z*WED(vr+L)awOM_p^5)GaV*La=7?fmb$mBf>P=m{&K;D#QP@_JLeDrcGn9xb$WOfv zRPn1*Lc&NCgJhn})N6as+_W$o*53I|%Jc)eg;@PU(@L?gS4hc~aOK`c65iZfOuFQD zcpag8_jEJm7s=KfUfe;SyezYzL8HYSi8I;6reV`;RCPm_WGwt2uWW=UM3F!?&XNUu zye3|Xz-x5TioB+%CqA#GEXAT`(4~fm&{+l>b3hE#CxI;F$5O*UE5gYfGrisri&D06 zSV?;4>KPU1h5NYP%EYEYCj&Ini%00_a5OzqeKSySL!sNWzf zE0h9-RMXwSO-5gRjK(9l20_UovK{h!@Ii)1#H3Y>rHIk0t~D7La$tg$QOE5yJbr*7 zl<3Z*#>i`-yUeEW0lrjkKRRgz~mePJ{UU~2iB0o9t<%HJ{W@!EnS@u0=b3YYaoZ@lvDhF-Sf2{#3|_g zZB@T|{XVPaZ;#ynhKKPup6}y1_XW>uf*W7NABQSkWvp7$;AH24_!EXeBu{5E(8yac`h68LBE4ES%5_0t2M_jT|JxD2+z?}2x~ zC&9PCZ-5_zC&9mfPl5j#bMZ@_w}kmMknLCF`J3Q3G5-)e4*m)J8u)kc2jIUzw(rE3 zYq@2RR6wIn3{Ztnb)YJnt0fg9N?;vixn(2Y&-{Ts{I%gMS^*@B3=)$7A4ku>Lg2 za@RrLw+)^L-vZgcPe6|MKR}Mle?gAR@rPooO>Ru z^F;NZ=fSjUaGZG$LRjUR>*E+6wvTo5KpLvCh`;kmjMjh#fQfi7E30Uj;lG02LB9mJ(TC!c4)FP2&Qke-C8GXnw zJ4!l6Q6)9+)S|bhNvH^Z&M!mf{PN^;YE(z8dW}eC(%K`wrpa`>_HcNxo=QC*zphcr z3}r~25kkgWOm~{D{jop1`GCQWloS>kw4}hOJkf|@H`37&0a@1}oAGLHoFvr9LGRbc zRWi#$!<()R`$&sTMIe{$DP*T>P*>A*HM|$c#k17DzH}g}TZUXFv=zbBsJYmp95R$< z!`m{Bq9j#SZ6G=$=^9=ed9SnFt!e;e6S>iW4^%>^ta(8vI!YcPXH@uq$VDi!w6ZoZ zx~rnVAy|>?(-OyRiS2@j8>J|}E~;MSw*J_hW2wk2`*l-K+7DstMY^g5?3(t$K9Qg= z&}Qg>eXF5CEantB6HCo2nG8%%M+M>~6!*=v8xFh;g%g#*2iC_;e_(ZL+jz?@kwsNN z5A{;Rdnq&9I9>c}p?^ze+!`%<`6nAx`Jd7Gg&Q(8ne#VoFADu<^PctFrd5}O63%4y zO4?78kqDDWH?(vMFJ1RaVWQ%K6s$3#ZRwENr0i{Wh0Y zrKd%k5yGeF?ysZ1xc6JSlvML80j60aFv&C6qID)7nGZoY~p5uPVRxu-VU>GsP|H=L?(HHrHptSZSPHc+O~t+V$Hg z8Tc-5yJo6Hq%RUD9B07go9(Oqg_#_C)s>mQt^>nu+oB7d2%%AVCX|2GWQlE&POGWC zyn2!9e=loVyi6+>7k=tLFEt;GCTr0vwKKHZSUI~;Uk~MO=E~hz#xyX>iI}7slsnl# zoIzJtmjgMW${p1guH0*QbJs+!0&5E~5RQ0@%XQrFeun?bJ&HvdSYxTErrT2CbejpS z_eM0p@mbt^9S0sJ5>G8U+fmEo=)t@4!)?l)u;qKM+(E<5EUL^zD+Rc#*m5Oo0YfP+ zKPYg#mAjTifmiol=a2Df`GG?dRa$qPmIGNpD5B)v`-7R8wSX<6q*Lzkaa!&UYJ(QX zTh(l7qOD$vO;+x7I;f=t&Ql_LwYdXP%f(SwZdV_jczC_KF!n`gYZO&p91+H`OQLY> z&Okc&HO=Bw2~zPtbj(t*A$uImPN&L&v4t`zOy+FwWCl606D!x2i&OP=G0s#Jmb)Cg ziNFi>9#!tm=X#CCy0Bj5!8x);xmTxRIhLp9rK@WrKC-g5WKz{A%>s;H2|7eg80h4y zr4Vrtag}bCyFIF_0?yzkP`Sso!zoxpHSp!Zo^kdk)~^wk(CbyL9r+@I(rDkF^#T{S zl6}sB1*%sFO@jLTeKT$wZLy0SH73#R?Ionl?wXc zO=wil6m0J;f4x4!yw4pV)P_80wHjx?ZmQKNt qq}&V5q`4-IaD<$|?NJ+j#LIEkIQ)k`Ff)C!9abub`r4asqt5_xUQe6= diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ksh/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ksh/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index ed9b5602adfd273b33748669cfa74eb1a7009a9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcmYLF%TB{E5Cp*~N6sAfzzv)@1*Fz(pyDYcDoQDjtJ^GzA+asn0s0~Q3tz*xu%S}B z(#W&ghj-?8XZw4DVw12-*duHa4hU^@2|rZq(cAW{V(iQt&I7y2*%Laij27^4e+yPR zj}DHb30mU<8~H-z?5rs~n;HSZN$o2cjPpZV+Ik`LTIpD0h{ktpf*-0~#V%w(0Ue$m zv6M63f%I7L-ahYe9^FbG*mSi=z_@WHFC`3YGpp3_6K8RbC)B5lMi$7XC~E=drZRIl}AEHa%eVMGc3ZOh1-Ha~R`qP+4=SBzA zbl}30f`DHkv6WQ15A(9MCS;G(E7o22wL)Ieu}eKSxzdGz?o5#zRpVsEu8ga_0B!$M spB?sLNi&^g98Q4)RkJK5niB2wqZf9K8eQwLfaj$)NMrIb$B$^^4+2V-wg3PC diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/mk/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/mk/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index 96866cc57aa5a75bbbbbedabca0f932c3748b3f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 507 zcmYLF%TC)s6ir1}Ub1F!7qEh{Jw}nz2?oTgLLw@Uv~)YMFZK}6Lo*X75}(j*7ko~o z_BZ-1y-p-@rK7o5b06oNf14kF4JbYkwg}sV4Z^6wiQ=w*FeQR&ml z>O&ea%|bTFrYJQH$O>y~lr(VA#^{2`vet%(b^44mVuz{qP3Be-L$)TGX*!NR)AMY- zRe+u+lgr8Z+6kWK$*DCF4N-k@q$T2yn7K|WGX|ndCdKmW^n#7neZ8ay^z7VJwpOMQ zFq$dyrCWH}u?y>U5MbQ03}rEfRa%;|w`-}#C@3w&Zl`<&O KA*=Bz8T<$FLYt`o diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ne/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/ne/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index b9eadb09de0712da4f5e89c830b5f48791e0fae0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 486 zcmYLF%TB{E5Cp*~N6s7;i5obNqDaMUQ3bRJspT0SSCcG>QDR%R3-lkja^N5M4EPPc zg$>Fhr?9nm8jwCO;+Oj1NzNhKg_AMVXm74`l8C2 zD3N6-8V+Y@L@l9Td2bw#qDniDMfidbqzprC%g8M3xo9aeYG^UqNMW>Op;QQ0FqvC&rVRGZG+`-w=e>oFl7Zk2P?lAwUy-n diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/nl/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/nl/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index 929858c4c133d05f0a4682f3e00967dbc9a6a838..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5255 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 KRK)HD0{#z43J3E5 diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/pl/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/pl/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index 76f0a7200c3b2a33c0a11ce587109d683591470b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4884 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 T#5X*Xwzpdmq>WL@ot*Pu>IRs# diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/sq/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/sq/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index 0ba3ae6ca98a227337f7d77c427613ce139a2c6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4385 zcma)8ON<;>6)lr5!zYl0n18MZJ85HAPtQ0=R{KLtJPyGg+wru`M`H21>vh-bu6nPg z-mB@fcM&UCv0(#}w+Pu1unMfQ7$i24V8IUYld?r@Ss=l=ud1u7dmNLJ+h^*1?z{Kg zbMLFaKKuAj0z9Yi`yzhsND!O@zV{LQhvzqs1;JN=zXcuxz7Kp6_~hf|_)EZRcz+W} zz{rV;F)4)FfzXbdTkmLC;koO<`Xz5=F{b zPlF`p=LC@7Uk6?TM!+`k*FXaP9mw{Me5&N_1t90A1!Q|WK;~lzWS)Oijo$;Z-FK?@ zKLI)Ze^&Suk^oxk2g3m*@W_YlF=wm;(B|_88TdFjr_77b5wL|HKYS)X&*F#BgA@1> zeq1g{RsC=dScl9p$HSaM+WukwK(~Kb6Z~-OkKxB$aGkKWAtBGzNg&E7Si=vp@p=qS zY#xtjUnGUJG?lp|`Bo+ePDZDxUpN|?LPvCB>v+@-F46j}?cVKM*LT-xB4<;RM>G|- z-oYydiLpwLsGp0$M7qQCCQSvIoW%cKs^yfd6Hca5mxjDErC-`mBomb?Cv)mcHsl@C;A*Aa_1=y3 z6;|g{!jXiM5Nxf$cCe$sCcIh@+YYW9a=Fk}4C*Kv$-w3urNqk|sWeNxmOSnSs8wn>oe=FmS(;K#GfmK`Xh+KV8FSwbTF-QyFh{8KE=hE)d?wi-h zvzpV_)^5qnC#S{|D8|Usp8)H>L?W|X%9?#5o`6R z5F;7(q)5ATDd`KX&=t?e&Skc{u@M`~RWX%)7?W+2k2bP0GP|+xZ^P~-VHp|z+*sJ{ zlHFU|d1GgLLBeLcv-X|dCYD{=mmnY|^a-rNU#gy#X|70>j#|Z+ zusXIBjo(4@De|5#k;J~=#U)&boY>uzKUp{qb|pgdci3GXP}-W9gfF2?EZxCP2FrD5 zZ!%fow!Dj5nUzIkv`SB+xigpbzzU0x;KasAR6Jfe0I{IALO8ARlEwi|&*r(56pM_L zgd9g>IVlkPNK`Z;;(b=1jUTzWp0pf*m=xu9rfnc54*4pXs@LJeg#~q2;M5^l#s?SQ z8SUV5`7OpDk;+Tm#s~M)dLLYcJQOt25+|{@FY*WrxNkM2rO?i+P&vP1UITnhx7aCA zaYZHg>f=KM1O=7i&xMTP$!UuyvMuf!u6!R%?I>q`=&2{o^x`vv3l%nOTySwZv5)%FC{7r2DqFTS zx5G`BWA)`MkhKrN`&FcJ!nfigH3(Qua41(=nJn1h+FUHbpYtlP#46;=JGjzpfz92w zy==IBEZeB~5c^2YZY+H|oBQsR-KV^^`E)%tae=Ri9w^{W!D`ef7jJexdB~0V1n-)Q W4xdI1dzF0WJuS*-Hbw(N?*9ix-Z7W} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/te/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/te/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index 2e6fb50c6a1202c88017fa05cfb8cd318fd28471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051 zcmY*WO=}cE5FIsM_9z||%CqU&4-LjiBJm^9K%y~j)Po?sna=FUZ1-fkH|u&b0TqOJ z5Q5-E0wD$wGaC?Z@jvKY<}ZkUz}LOT)rQyIRsHH!y_p{;hBiH{A>b4+4jcy_0CuIo zEU*Hc1P*}Hz;}B;;(0%D{sQu&p2u)*AM?B$IKSbTKSW=OUpCH2%E2L79aT6=)d-IukB$f=D3E5qdY2*UBb9gN(&-YnPGD} zibHm#9cflq0hx?Top7TvJ()JsR+opZSo%_!()=y9fT64uy9QeU)hg8sta6@JYg8Qx zsu#~zuu8LB8&?0T6Huecvxu+8q%_MisuwqH@~ztILC_%X%eYeZOTR$^%u{6s5VDxv9aY zsrr@DRV5966{~ksm^0$BDW?gK%33-gnYvI<)W)cPose{9f~sSs`|P@q_K&G7pnH8YRP(FnN?wt_F7izRir&j2 z-!6I^*b#p&@&lJeyjSGwj*{;d`PU-<;P&+*e|vb@!DYBlLDg>2dx~HOhYf7WCU&Gg z6?yLBy`s0~;@+C$V~6UyJ_~A2<^RI>ZniyCy|PSOh#@h>pQHz(k>id!%yfXaXKpMo>_9g6FWs`=xL#JtejqE{xBjunxBC82h>j=($*Mee OZV;f+7w2!o_kIKE2+dgl diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/tr/LC_MESSAGES/sqlparser.mo b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/locale/tr/LC_MESSAGES/sqlparser.mo deleted file mode 100644 index e4f9d33cece962d3fc4f190a54fb8ec4ae161f6f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5223 zcma)9O^h5z6>fuLU?BuT5<&=2UfX0HyLRKjNXIV&zkv5Ta0b`~(mJmLDUP>+F96>KlHH@9beyjPj{~0oUIV(o?*UH& z?*pF$zM0{>z-hcYpK_e@fD=IC;k!U;e+~E~@Rz{HfPVlIKYz~p|CPNzIhER<13r%a zSApbD8%R9f1AZR(2JkDuw}2G?Uw}0K-+>g*2SDQI*-typ?~lMIAo1~^&!m2zdNlQ~ z0wmt<0M~)P0nPv)`D{9m2fT;(8$ep;PrwD>-+;u=(+K8i;5UKf-^)PC(;XoB@nhgJ z@K?aoz<&a1+%unZoLOKA_$A=&?EOBF_<9@2fbRj%0Y3o3b>|#{C*D_pl$Qud^W6gy zAHM*SAAij7ec&m)9|M_}foFkpz!1oQKL-+TzXRgWc?VxK&-*~q*-?;B?=ffsaVa? z`oo7}q4numz~>k~v<^Lxu8j>#T3=8?_94GPpXG_!mNZu4pExDIh%-pg=6(@~G!-7o zJw1?-txNlYujBYoJoIE+fQ{F~JEUZ}fmCcxQ6iRWfaU08^aBs+0%>v}S({S;k~V+R zXInfQwly-}{-+F0A1W})bHmG)Ve$D=$j&Xi{SLrtaVve}VFxopp<|WWjQKY(HqSgZw zG(UhvN8=kYKn9*Fuygmv&mq9zDK+Uc}9znYk*&;#?dct_lO^8mKfJe+v zI#EzZjb$2xv&*H;GL>|ech9M!oYLZH*wUh*rZ*9^HG=PX!&K5m(#cLm{ztG2P`e!) zTV2TpyfjE4N{3BTE~m*an3!G%6E?7!a8w&Z3)LR>v%qJ8WR)Z`ftxyVI}tjdVmoLc zd70y{!!>Hxb8bm6VYfqQpczOj>|#c9CiND_wuj^u2Kow==d3bOOz?bw#p?Rsy{@QXD&Z;Job9CH#RjyacV`k>Pxv6C(X*Y1Is3e$(J7%^M@jzZ+Bxh{b zmu^+By64As6iY*Bw=C<5cGx9$z809Nn^B^9duOq$~Y};c!jD&29(1^1**y}vB7ZDtL5iTW(=Zvo- zT=Et+Q5?d!6NorKwT{MOv*sNh4R%;9fJOh|-ZrclDB_6xZqf7#Otu2u?C(ab$C=Mr z_|XTyf`iX45;V9khJFrxuO)0tu>M0?7h%A#dOX;XSfCa3A29ko*wGR14R-2qwWmVQ zq4|8=Yq%fbUW0C2or1k>Y~~XIlGm}Y7Z?t^d`QQg|JTV%Jw4co+Jl|FZR>fFNXS9s zemB?-LT0eOiorom2_Cm7e3{sY@aYwlAQ*YF!@P6KJ`q=Re3q`W_5jzVZEUu^vZU8cKv~vkk7qj(?rXS7K#O1oqUvB<7>dqwa27!j1Lz{F zfC8yj_=pkLF6<2Z)i~-GF_AzDFO0vEpsf23uwRDRwTA`xFQNZ{hg7kHou0y716HQL ztFd26`q8e#;x!dUXtsqH8hkmp{Y; z?{!Zl&Qw4NgEY%UmWnKgER$(|ln&A~nkgT|@|{P*To<)!;N`Eb)$0?C+qeF-;FjXT zwkNz|s!mlXmZ(|@D=Iq}*C9ABlccsjU>X0$HS5CIQkA%kIiGALCM|!9lysDA`6P4{ z&8PG8Z3bDKM&GOnXjtTfV;2Gcgv2#Un-Q>3jwei3%L_5w&h=()k;J(vY^hBpVYt?u yNYjyO#D%5SOEB)O^^?H}HrL5#1D__49gd [ - 1, - 'var', - ], - 'CHARSET' => [ - 1, - 'var', - ], - 'DEFAULT CHARACTER SET' => [ - 1, - 'var', - ], - 'DEFAULT CHARSET' => [ - 1, - 'var', - ], - 'UPGRADE' => [ - 1, - 'var', - ], - 'COLLATE' => [ - 2, - 'var', - ], - 'DEFAULT COLLATE' => [ - 2, - 'var', - ], - ]; - - /** - * All table options. - * - * @var array - */ - public static $TABLE_OPTIONS = [ - 'ENGINE' => [ - 1, - 'var=', - ], - 'AUTO_INCREMENT' => [ - 1, - 'var=', - ], - 'AVG_ROW_LENGTH' => [ - 1, - 'var', - ], - 'MAX_ROWS' => [ - 1, - 'var', - ], - 'ROW_FORMAT' => [ - 1, - 'var', - ], - 'COMMENT' => [ - 1, - 'var', - ], - 'ADD' => 1, - 'ALTER' => 1, - 'ANALYZE' => 1, - 'CHANGE' => 1, - 'CHARSET' => 1, - 'CHECK' => 1, - 'COALESCE' => 1, - 'CONVERT' => 1, - 'DEFAULT CHARSET' => 1, - 'DISABLE' => 1, - 'DISCARD' => 1, - 'DROP' => 1, - 'ENABLE' => 1, - 'IMPORT' => 1, - 'MODIFY' => 1, - 'OPTIMIZE' => 1, - 'ORDER' => 1, - 'PARTITION' => 1, - 'REBUILD' => 1, - 'REMOVE' => 1, - 'RENAME' => 1, - 'REORGANIZE' => 1, - 'REPAIR' => 1, - 'UPGRADE' => 1, - - 'COLUMN' => 2, - 'CONSTRAINT' => 2, - 'DEFAULT' => 2, - 'TO' => 2, - 'BY' => 2, - 'FOREIGN' => 2, - 'FULLTEXT' => 2, - 'KEY' => 2, - 'KEYS' => 2, - 'PARTITIONING' => 2, - 'PRIMARY KEY' => 2, - 'SPATIAL' => 2, - 'TABLESPACE' => 2, - 'INDEX' => 2, - - 'CHARACTER SET' => 3, - ]; - - /** - * All user options. - * - * @var array - */ - public static $USER_OPTIONS = [ - 'ATTRIBUTE' => [ - 1, - 'var', - ], - 'COMMENT' => [ - 1, - 'var', - ], - 'REQUIRE' => [ - 1, - 'var', - ], - 'BY' => [ - 2, - 'expr', - ], - 'PASSWORD' => [ - 2, - 'var', - ], - 'WITH' => [ - 2, - 'var', - ], - - 'ACCOUNT' => 1, - 'DEFAULT' => 1, - - 'LOCK' => 2, - 'UNLOCK' => 2, - - 'IDENTIFIED' => 3, - ]; - - /** - * All view options. - * - * @var array - */ - public static $VIEW_OPTIONS = ['AS' => 1]; - - /** - * Options of this operation. - * - * @var OptionsArray - */ - public $options; - - /** - * The altered field. - * - * @var Expression - */ - public $field; - - /** - * Unparsed tokens. - * - * @var Token[]|string - */ - public $unknown = []; - - /** - * @param OptionsArray $options options of alter operation - * @param Expression $field altered field - * @param array $unknown unparsed tokens found at the end of operation - */ - public function __construct( - $options = null, - $field = null, - $unknown = [] - ) { - $this->options = $options; - $this->field = $field; - $this->unknown = $unknown; - } - - /** - * @param Parser $parser the parser that serves as context - * @param TokensList $list the list of tokens that are being parsed - * @param array $options parameters for parsing - * - * @return AlterOperation - */ - public static function parse(Parser $parser, TokensList $list, array $options = []) - { - $ret = new static(); - - /** - * Counts brackets. - * - * @var int - */ - $brackets = 0; - - /** - * The state of the parser. - * - * Below are the states of the parser. - * - * 0 ---------------------[ options ]---------------------> 1 - * - * 1 ----------------------[ field ]----------------------> 2 - * - * 2 -------------------------[ , ]-----------------------> 0 - * - * @var int - */ - $state = 0; - - for (; $list->idx < $list->count; ++$list->idx) { - /** - * Token parsed at this moment. - * - * @var Token - */ - $token = $list->tokens[$list->idx]; - - // End of statement. - if ($token->type === Token::TYPE_DELIMITER) { - break; - } - - // Skipping comments. - if ($token->type === Token::TYPE_COMMENT) { - continue; - } - - // Skipping whitespaces. - if ($token->type === Token::TYPE_WHITESPACE) { - if ($state === 2) { - // When parsing the unknown part, the whitespaces are - // included to not break anything. - $ret->unknown[] = $token; - } - - continue; - } - - if ($state === 0) { - $ret->options = OptionsArray::parse($parser, $list, $options); - - if ($ret->options->has('AS')) { - for (; $list->idx < $list->count; ++$list->idx) { - if ($list->tokens[$list->idx]->type === Token::TYPE_DELIMITER) { - break; - } - - $ret->unknown[] = $list->tokens[$list->idx]; - } - - break; - } - - $state = 1; - } elseif ($state === 1) { - $ret->field = Expression::parse( - $parser, - $list, - [ - 'breakOnAlias' => true, - 'parseField' => 'column', - ] - ); - if ($ret->field === null) { - // No field was read. We go back one token so the next - // iteration will parse the same token, but in state 2. - --$list->idx; - } - - $state = 2; - } elseif ($state === 2) { - $arrayKey = ''; - if (is_string($token->value) || is_numeric($token->value)) { - $arrayKey = $token->value; - } else { - $arrayKey = $token->token; - } - - if ($token->type === Token::TYPE_OPERATOR) { - if ($token->value === '(') { - ++$brackets; - } elseif ($token->value === ')') { - --$brackets; - } elseif (($token->value === ',') && ($brackets === 0)) { - break; - } - } elseif (! self::checkIfTokenQuotedSymbol($token)) { - if (! empty(Parser::$STATEMENT_PARSERS[$token->value])) { - // We want to get the next non-comment and non-space token after $token - // therefore, the first getNext call will start with the current $idx which's $token, - // will return it and increase $idx by 1, which's not guaranteed to be non-comment - // and non-space, that's why we're calling getNext again. - - $list->getNext(); - $nextToken = $list->getNext(); - - if ($token->value === 'SET' && $nextToken !== null && $nextToken->value === '(') { - // To avoid adding the tokens between the SET() parentheses to the unknown tokens - $list->getNextOfTypeAndValue(Token::TYPE_OPERATOR, ')'); - } elseif ($token->value === 'SET' && $nextToken !== null && $nextToken->value === 'DEFAULT') { - // to avoid adding the `DEFAULT` token to the unknown tokens. - ++$list->idx; - } else { - // We have reached the end of ALTER operation and suddenly found - // a start to new statement, but have not find a delimiter between them - $parser->error( - 'A new statement was found, but no delimiter between it and the previous one.', - $token - ); - break; - } - } elseif ( - (array_key_exists($arrayKey, self::$DB_OPTIONS) - || array_key_exists($arrayKey, self::$TABLE_OPTIONS)) - && ! self::checkIfColumnDefinitionKeyword($arrayKey) - ) { - // This alter operation has finished, which means a comma - // was missing before start of new alter operation - $parser->error('Missing comma before start of a new alter operation.', $token); - break; - } - } - - $ret->unknown[] = $token; - } - } - - if ($ret->options->isEmpty()) { - $parser->error('Unrecognized alter operation.', $list->tokens[$list->idx]); - } - - --$list->idx; - - return $ret; - } - - /** - * @param AlterOperation $component the component to be built - * @param array $options parameters for building - * - * @return string - */ - public static function build($component, array $options = []) - { - $ret = $component->options . ' '; - if (isset($component->field) && ($component->field !== '')) { - $ret .= $component->field . ' '; - } - - $ret .= TokensList::build($component->unknown); - - return $ret; - } - - /** - * Check if token's value is one of the common keywords - * between column and table alteration - * - * @param string $tokenValue Value of current token - * - * @return bool - */ - private static function checkIfColumnDefinitionKeyword($tokenValue) - { - $commonOptions = [ - 'AUTO_INCREMENT', - 'COMMENT', - 'DEFAULT', - 'CHARACTER SET', - 'COLLATE', - 'PRIMARY', - 'UNIQUE', - 'PRIMARY KEY', - 'UNIQUE KEY', - ]; - - // Since these options can be used for - // both table as well as a specific column in the table - return in_array($tokenValue, $commonOptions); - } - - /** - * Check if token is symbol and quoted with backtick - * - * @param Token $token token to check - * - * @return bool - */ - private static function checkIfTokenQuotedSymbol($token) - { - return $token->type === Token::TYPE_SYMBOL && $token->flags === Token::FLAG_SYMBOL_BACKTICK; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/CaseExpression.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/CaseExpression.php deleted file mode 100644 index 3033854..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/CaseExpression.php +++ /dev/null @@ -1,308 +0,0 @@ -idx; // Skip 'CASE' - - for (; $list->idx < $list->count; ++$list->idx) { - /** - * Token parsed at this moment. - * - * @var Token - */ - $token = $list->tokens[$list->idx]; - - // Skipping whitespaces and comments. - if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { - continue; - } - - if ($state === 0) { - if ($token->type === Token::TYPE_KEYWORD) { - switch ($token->keyword) { - case 'WHEN': - ++$list->idx; // Skip 'WHEN' - $newCondition = Condition::parse($parser, $list); - $type = 1; - $state = 1; - $ret->conditions[] = $newCondition; - break; - case 'ELSE': - ++$list->idx; // Skip 'ELSE' - $ret->else_result = Expression::parse($parser, $list); - $state = 0; // last clause of CASE expression - break; - case 'END': - $state = 3; // end of CASE expression - ++$list->idx; - break 2; - default: - $parser->error('Unexpected keyword.', $token); - break 2; - } - } else { - $ret->value = Expression::parse($parser, $list); - $type = 0; - $state = 1; - } - } elseif ($state === 1) { - if ($type === 0) { - if ($token->type === Token::TYPE_KEYWORD) { - switch ($token->keyword) { - case 'WHEN': - ++$list->idx; // Skip 'WHEN' - $newValue = Expression::parse($parser, $list); - $state = 2; - $ret->compare_values[] = $newValue; - break; - case 'ELSE': - ++$list->idx; // Skip 'ELSE' - $ret->else_result = Expression::parse($parser, $list); - $state = 0; // last clause of CASE expression - break; - case 'END': - $state = 3; // end of CASE expression - ++$list->idx; - break 2; - default: - $parser->error('Unexpected keyword.', $token); - break 2; - } - } - } else { - if ($token->type === Token::TYPE_KEYWORD && $token->keyword === 'THEN') { - ++$list->idx; // Skip 'THEN' - $newResult = Expression::parse($parser, $list); - $state = 0; - $ret->results[] = $newResult; - } elseif ($token->type === Token::TYPE_KEYWORD) { - $parser->error('Unexpected keyword.', $token); - break; - } - } - } elseif ($state === 2) { - if ($type === 0) { - if ($token->type === Token::TYPE_KEYWORD && $token->keyword === 'THEN') { - ++$list->idx; // Skip 'THEN' - $newResult = Expression::parse($parser, $list); - $ret->results[] = $newResult; - $state = 1; - } elseif ($token->type === Token::TYPE_KEYWORD) { - $parser->error('Unexpected keyword.', $token); - break; - } - } - } - } - - if ($state !== 3) { - $parser->error('Unexpected end of CASE expression', $list->tokens[$list->idx - 1]); - } else { - // Parse for alias of CASE expression - $asFound = false; - for (; $list->idx < $list->count; ++$list->idx) { - $token = $list->tokens[$list->idx]; - - // End of statement. - if ($token->type === Token::TYPE_DELIMITER) { - break; - } - - // Skipping whitespaces and comments. - if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { - continue; - } - - // Handle optional AS keyword before alias - if ($token->type === Token::TYPE_KEYWORD && $token->keyword === 'AS') { - if ($asFound || ! empty($ret->alias)) { - $parser->error('Potential duplicate alias of CASE expression.', $token); - break; - } - - $asFound = true; - continue; - } - - if ( - $asFound - && $token->type === Token::TYPE_KEYWORD - && ($token->flags & Token::FLAG_KEYWORD_RESERVED || $token->flags & Token::FLAG_KEYWORD_FUNCTION) - ) { - $parser->error('An alias expected after AS but got ' . $token->value, $token); - $asFound = false; - break; - } - - if ( - $asFound - || $token->type === Token::TYPE_STRING - || ($token->type === Token::TYPE_SYMBOL && ! $token->flags & Token::FLAG_SYMBOL_VARIABLE) - || $token->type === Token::TYPE_NONE - ) { - // An alias is expected (the keyword `AS` was previously found). - if (! empty($ret->alias)) { - $parser->error('An alias was previously found.', $token); - break; - } - - $ret->alias = $token->value; - $asFound = false; - - continue; - } - - break; - } - - if ($asFound) { - $parser->error('An alias was expected after AS.', $list->tokens[$list->idx - 1]); - } - - $ret->expr = self::build($ret); - } - - --$list->idx; - - return $ret; - } - - /** - * @param CaseExpression $component the component to be built - * @param array $options parameters for building - * - * @return string - */ - public static function build($component, array $options = []) - { - $ret = 'CASE '; - if (isset($component->value)) { - // Syntax type 0 - $ret .= $component->value . ' '; - $valuesCount = count($component->compare_values); - $resultsCount = count($component->results); - for ($i = 0; $i < $valuesCount && $i < $resultsCount; ++$i) { - $ret .= 'WHEN ' . $component->compare_values[$i] . ' '; - $ret .= 'THEN ' . $component->results[$i] . ' '; - } - } else { - // Syntax type 1 - $valuesCount = count($component->conditions); - $resultsCount = count($component->results); - for ($i = 0; $i < $valuesCount && $i < $resultsCount; ++$i) { - $ret .= 'WHEN ' . Condition::build($component->conditions[$i]) . ' '; - $ret .= 'THEN ' . $component->results[$i] . ' '; - } - } - - if (isset($component->else_result)) { - $ret .= 'ELSE ' . $component->else_result . ' '; - } - - $ret .= 'END'; - - if ($component->alias) { - $ret .= ' AS ' . Context::escape($component->alias); - } - - return $ret; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/DataType.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/DataType.php deleted file mode 100644 index 812385e..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/DataType.php +++ /dev/null @@ -1,179 +0,0 @@ - 1, - 'CHARACTER SET' => [ - 2, - 'var', - ], - 'CHARSET' => [ - 2, - 'var', - ], - 'COLLATE' => [ - 3, - 'var', - ], - 'UNSIGNED' => 4, - 'ZEROFILL' => 5, - ]; - - /** - * The name of the data type. - * - * @var string - */ - public $name; - - /** - * The parameters of this data type. - * - * Some data types have no parameters. - * Numeric types might have parameters for the maximum number of digits, - * precision, etc. - * String types might have parameters for the maximum length stored. - * `ENUM` and `SET` have parameters for possible values. - * - * For more information, check the MySQL manual. - * - * @var array - */ - public $parameters = []; - - /** - * The options of this data type. - * - * @var OptionsArray - */ - public $options; - - /** - * @param string $name the name of this data type - * @param array $parameters the parameters (size or possible values) - * @param OptionsArray $options the options of this data type - */ - public function __construct( - $name = null, - array $parameters = [], - $options = null - ) { - $this->name = $name; - $this->parameters = $parameters; - $this->options = $options; - } - - /** - * @param Parser $parser the parser that serves as context - * @param TokensList $list the list of tokens that are being parsed - * @param array $options parameters for parsing - * - * @return DataType|null - */ - public static function parse(Parser $parser, TokensList $list, array $options = []) - { - $ret = new static(); - - /** - * The state of the parser. - * - * Below are the states of the parser. - * - * 0 -------------------[ data type ]--------------------> 1 - * - * 1 ----------------[ size and options ]----------------> 2 - * - * @var int - */ - $state = 0; - - for (; $list->idx < $list->count; ++$list->idx) { - /** - * Token parsed at this moment. - * - * @var Token - */ - $token = $list->tokens[$list->idx]; - - // Skipping whitespaces and comments. - if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { - continue; - } - - if ($state === 0) { - $ret->name = strtoupper((string) $token->value); - if (($token->type !== Token::TYPE_KEYWORD) || (! ($token->flags & Token::FLAG_KEYWORD_DATA_TYPE))) { - $parser->error('Unrecognized data type.', $token); - } - - $state = 1; - } elseif ($state === 1) { - if (($token->type === Token::TYPE_OPERATOR) && ($token->value === '(')) { - $parameters = ArrayObj::parse($parser, $list); - ++$list->idx; - $ret->parameters = ($ret->name === 'ENUM') || ($ret->name === 'SET') ? - $parameters->raw : $parameters->values; - } - - $ret->options = OptionsArray::parse($parser, $list, static::$DATA_TYPE_OPTIONS); - ++$list->idx; - break; - } - } - - if (empty($ret->name)) { - return null; - } - - --$list->idx; - - return $ret; - } - - /** - * @param DataType $component the component to be built - * @param array $options parameters for building - * - * @return string - */ - public static function build($component, array $options = []) - { - $name = empty($options['lowercase']) ? - $component->name : strtolower($component->name); - - $parameters = ''; - if (! empty($component->parameters)) { - $parameters = '(' . implode(',', $component->parameters) . ')'; - } - - return trim($name . $parameters . ' ' . $component->options); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/IndexHint.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/IndexHint.php deleted file mode 100644 index 1f0ce4b..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/IndexHint.php +++ /dev/null @@ -1,212 +0,0 @@ -type = $type; - $this->indexOrKey = $indexOrKey; - $this->for = $for; - $this->indexes = $indexes; - } - - /** - * @param Parser $parser the parser that serves as context - * @param TokensList $list the list of tokens that are being parsed - * @param array $options parameters for parsing - * - * @return IndexHint|Component[] - */ - public static function parse(Parser $parser, TokensList $list, array $options = []) - { - $ret = []; - $expr = new static(); - $expr->type = $options['type'] ?? null; - /** - * The state of the parser. - * - * Below are the states of the parser. - * 0 ----------------- [ USE/IGNORE/FORCE ]-----------------> 1 - * 1 -------------------- [ INDEX/KEY ] --------------------> 2 - * 2 ----------------------- [ FOR ] -----------------------> 3 - * 2 -------------------- [ expr_list ] --------------------> 0 - * 3 -------------- [ JOIN/GROUP BY/ORDER BY ] -------------> 4 - * 4 -------------------- [ expr_list ] --------------------> 0 - * - * @var int - */ - $state = 0; - - // By design, the parser will parse first token after the keyword. So, the keyword - // must be analyzed too, in order to determine the type of this index hint. - if ($list->idx > 0) { - --$list->idx; - } - - for (; $list->idx < $list->count; ++$list->idx) { - /** - * Token parsed at this moment. - * - * @var Token - */ - $token = $list->tokens[$list->idx]; - - // End of statement. - if ($token->type === Token::TYPE_DELIMITER) { - break; - } - - // Skipping whitespaces and comments. - if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { - continue; - } - - switch ($state) { - case 0: - if ($token->type === Token::TYPE_KEYWORD) { - if ($token->keyword !== 'USE' && $token->keyword !== 'IGNORE' && $token->keyword !== 'FORCE') { - break 2; - } - - $expr->type = $token->keyword; - $state = 1; - } - - break; - case 1: - if ($token->type === Token::TYPE_KEYWORD) { - if ($token->keyword === 'INDEX' || $token->keyword === 'KEY') { - $expr->indexOrKey = $token->keyword; - } else { - $parser->error('Unexpected keyword.', $token); - } - - $state = 2; - } else { - // we expect the token to be a keyword - $parser->error('Unexpected token.', $token); - } - - break; - case 2: - if ($token->type === Token::TYPE_KEYWORD && $token->keyword === 'FOR') { - $state = 3; - } else { - $expr->indexes = ExpressionArray::parse($parser, $list); - $state = 0; - $ret[] = $expr; - $expr = new static(); - } - - break; - case 3: - if ($token->type === Token::TYPE_KEYWORD) { - if ( - $token->keyword === 'JOIN' - || $token->keyword === 'GROUP BY' - || $token->keyword === 'ORDER BY' - ) { - $expr->for = $token->keyword; - } else { - $parser->error('Unexpected keyword.', $token); - } - - $state = 4; - } else { - // we expect the token to be a keyword - $parser->error('Unexpected token.', $token); - } - - break; - case 4: - $expr->indexes = ExpressionArray::parse($parser, $list); - $state = 0; - $ret[] = $expr; - $expr = new static(); - break; - } - } - - --$list->idx; - - return $ret; - } - - /** - * @param IndexHint|IndexHint[] $component the component to be built - * @param array $options parameters for building - * - * @return string - */ - public static function build($component, array $options = []) - { - if (is_array($component)) { - return implode(' ', $component); - } - - $ret = $component->type . ' ' . $component->indexOrKey . ' '; - if ($component->for !== null) { - $ret .= 'FOR ' . $component->for . ' '; - } - - return $ret . ExpressionArray::build($component->indexes); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/Reference.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/Reference.php deleted file mode 100644 index 8f01112..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/Reference.php +++ /dev/null @@ -1,162 +0,0 @@ - [ - 1, - 'var', - ], - 'ON DELETE' => [ - 2, - 'var', - ], - 'ON UPDATE' => [ - 3, - 'var', - ], - ]; - - /** - * The referenced table. - * - * @var Expression - */ - public $table; - - /** - * The referenced columns. - * - * @var array - */ - public $columns; - - /** - * The options of the referencing. - * - * @var OptionsArray - */ - public $options; - - /** - * @param Expression $table the name of the table referenced - * @param array $columns the columns referenced - * @param OptionsArray $options the options - */ - public function __construct($table = null, array $columns = [], $options = null) - { - $this->table = $table; - $this->columns = $columns; - $this->options = $options; - } - - /** - * @param Parser $parser the parser that serves as context - * @param TokensList $list the list of tokens that are being parsed - * @param array $options parameters for parsing - * - * @return Reference - */ - public static function parse(Parser $parser, TokensList $list, array $options = []) - { - $ret = new static(); - - /** - * The state of the parser. - * - * Below are the states of the parser. - * - * 0 ----------------------[ table ]---------------------> 1 - * - * 1 ---------------------[ columns ]--------------------> 2 - * - * 2 ---------------------[ options ]--------------------> (END) - * - * @var int - */ - $state = 0; - - for (; $list->idx < $list->count; ++$list->idx) { - /** - * Token parsed at this moment. - * - * @var Token - */ - $token = $list->tokens[$list->idx]; - - // End of statement. - if ($token->type === Token::TYPE_DELIMITER) { - break; - } - - // Skipping whitespaces and comments. - if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { - continue; - } - - if ($state === 0) { - $ret->table = Expression::parse( - $parser, - $list, - [ - 'parseField' => 'table', - 'breakOnAlias' => true, - ] - ); - $state = 1; - } elseif ($state === 1) { - $ret->columns = ArrayObj::parse($parser, $list)->values; - $state = 2; - } elseif ($state === 2) { - $ret->options = OptionsArray::parse($parser, $list, static::$REFERENCES_OPTIONS); - ++$list->idx; - break; - } - } - - --$list->idx; - - return $ret; - } - - /** - * @param Reference $component the component to be built - * @param array $options parameters for building - * - * @return string - */ - public static function build($component, array $options = []) - { - return trim( - $component->table - . ' (' . implode(', ', Context::escape($component->columns)) . ') ' - . $component->options - ); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/UnionKeyword.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/UnionKeyword.php deleted file mode 100644 index 68d1563..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Components/UnionKeyword.php +++ /dev/null @@ -1,36 +0,0 @@ - $component the component to be built - * @param array $options parameters for building - * - * @return string - */ - public static function build($component, array $options = []) - { - $tmp = []; - foreach ($component as $componentPart) { - $tmp[] = $componentPart[0] . ' ' . $componentPart[1]; - } - - return implode(' ', $tmp); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100300.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100300.php deleted file mode 100644 index 08b26f1..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMariaDb100300.php +++ /dev/null @@ -1,347 +0,0 @@ - - * @phpstan-var non-empty-array - */ - public static $KEYWORDS = [ - 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1, - 'ONE' => 1, 'ROW' => 1, 'XID' => 1, - 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, - 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, - 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1, - 'NAME' => 1, 'NEXT' => 1, 'NONE' => 1, 'ONLY' => 1, 'OPEN' => 1, 'PAGE' => 1, - 'PORT' => 1, 'PREV' => 1, 'SLOW' => 1, 'SOME' => 1, 'STOP' => 1, 'THAN' => 1, - 'TYPE' => 1, 'VIEW' => 1, 'WAIT' => 1, 'WORK' => 1, 'X509' => 1, - 'AFTER' => 1, 'BEGIN' => 1, 'BLOCK' => 1, 'BTREE' => 1, 'CACHE' => 1, - 'CHAIN' => 1, 'CLOSE' => 1, 'ERROR' => 1, 'EVENT' => 1, 'EVERY' => 1, - 'FIRST' => 1, 'FIXED' => 1, 'FLUSH' => 1, 'FOUND' => 1, 'HOSTS' => 1, - 'LEVEL' => 1, 'LOCAL' => 1, 'LOCKS' => 1, 'MERGE' => 1, 'MUTEX' => 1, - 'NAMES' => 1, 'NCHAR' => 1, 'NEVER' => 1, 'OWNER' => 1, 'PHASE' => 1, - 'PROXY' => 1, 'QUERY' => 1, 'QUICK' => 1, 'RELAY' => 1, 'RESET' => 1, - 'RTREE' => 1, 'SHARE' => 1, 'SLAVE' => 1, 'START' => 1, 'SUPER' => 1, - 'SWAPS' => 1, 'TYPES' => 1, 'UNTIL' => 1, 'VALUE' => 1, - 'ACTION' => 1, 'ALWAYS' => 1, 'BACKUP' => 1, 'BINLOG' => 1, 'CIPHER' => 1, - 'CLIENT' => 1, 'COMMIT' => 1, 'ENABLE' => 1, 'ENGINE' => 1, 'ERRORS' => 1, - 'ESCAPE' => 1, 'EVENTS' => 1, 'EXPIRE' => 1, 'EXPORT' => 1, 'FAULTS' => 1, - 'FIELDS' => 1, 'FILTER' => 1, 'GLOBAL' => 1, 'GRANTS' => 1, 'IMPORT' => 1, - 'ISSUER' => 1, 'LEAVES' => 1, 'MASTER' => 1, 'MEDIUM' => 1, 'MEMORY' => 1, - 'MODIFY' => 1, 'NUMBER' => 1, 'OFFSET' => 1, 'PARSER' => 1, 'PLUGIN' => 1, - 'RELOAD' => 1, 'REMOVE' => 1, 'REPAIR' => 1, 'RESUME' => 1, 'ROLLUP' => 1, - 'SERVER' => 1, 'SIGNED' => 1, 'SIMPLE' => 1, 'SOCKET' => 1, 'SONAME' => 1, - 'SOUNDS' => 1, 'SOURCE' => 1, 'STARTS' => 1, 'STATUS' => 1, 'STRING' => 1, - 'TABLES' => 1, - 'ACCOUNT' => 1, 'ANALYSE' => 1, 'CHANGED' => 1, 'CHANNEL' => 1, 'COLUMNS' => 1, - 'COMMENT' => 1, 'COMPACT' => 1, 'CONTEXT' => 1, 'CURRENT' => 1, 'DEFINER' => 1, - 'DISABLE' => 1, 'DISCARD' => 1, 'DYNAMIC' => 1, 'ENGINES' => 1, 'EXECUTE' => 1, - 'FOLLOWS' => 1, 'GENERAL' => 1, 'HANDLER' => 1, 'INDEXES' => 1, 'INSTALL' => 1, - 'INVOKER' => 1, 'LOGFILE' => 1, 'MIGRATE' => 1, 'NO_WAIT' => 1, 'OPTIONS' => 1, - 'PARTIAL' => 1, 'PLUGINS' => 1, 'PREPARE' => 1, 'PROFILE' => 1, 'REBUILD' => 1, - 'RECOVER' => 1, 'RESTORE' => 1, 'RETURNS' => 1, 'ROUTINE' => 1, 'SESSION' => 1, - 'STACKED' => 1, 'STORAGE' => 1, 'SUBJECT' => 1, 'SUSPEND' => 1, 'UNICODE' => 1, - 'UNKNOWN' => 1, 'UPGRADE' => 1, 'USE_FRM' => 1, 'WITHOUT' => 1, 'WRAPPER' => 1, - 'CASCADED' => 1, 'CHECKSUM' => 1, 'DATAFILE' => 1, 'DUMPFILE' => 1, 'EXCHANGE' => 1, - 'EXTENDED' => 1, 'FUNCTION' => 1, 'LANGUAGE' => 1, 'MAX_ROWS' => 1, 'MAX_SIZE' => 1, - 'MIN_ROWS' => 1, 'NATIONAL' => 1, 'NVARCHAR' => 1, 'PRECEDES' => 1, 'PRESERVE' => 1, - 'PROFILES' => 1, 'REDOFILE' => 1, 'RELAYLOG' => 1, 'ROLLBACK' => 1, 'SCHEDULE' => 1, - 'SECURITY' => 1, 'SEQUENCE' => 1, 'SHUTDOWN' => 1, 'SNAPSHOT' => 1, 'SWITCHES' => 1, - 'TRIGGERS' => 1, 'UNDOFILE' => 1, 'WARNINGS' => 1, - 'AGGREGATE' => 1, 'ALGORITHM' => 1, 'COMMITTED' => 1, 'DIRECTORY' => 1, - 'DUPLICATE' => 1, 'EXPANSION' => 1, 'INVISIBLE' => 1, 'IO_THREAD' => 1, - 'ISOLATION' => 1, 'NODEGROUP' => 1, 'PACK_KEYS' => 1, 'READ_ONLY' => 1, - 'REDUNDANT' => 1, 'SAVEPOINT' => 1, 'SQL_CACHE' => 1, 'TEMPORARY' => 1, - 'TEMPTABLE' => 1, 'UNDEFINED' => 1, 'UNINSTALL' => 1, 'VARIABLES' => 1, - 'COMPLETION' => 1, 'COMPRESSED' => 1, 'CONCURRENT' => 1, 'CONNECTION' => 1, - 'CONSISTENT' => 1, 'DEALLOCATE' => 1, 'IDENTIFIED' => 1, 'MASTER_SSL' => 1, - 'NDBCLUSTER' => 1, 'PARTITIONS' => 1, 'PERSISTENT' => 1, 'PLUGIN_DIR' => 1, - 'PRIVILEGES' => 1, 'REORGANIZE' => 1, 'REPEATABLE' => 1, 'ROW_FORMAT' => 1, - 'SQL_THREAD' => 1, 'TABLESPACE' => 1, 'TABLE_NAME' => 1, 'VALIDATION' => 1, - 'COLUMN_NAME' => 1, 'COMPRESSION' => 1, 'CURSOR_NAME' => 1, 'DIAGNOSTICS' => 1, - 'EXTENT_SIZE' => 1, 'MASTER_HOST' => 1, 'MASTER_PORT' => 1, 'MASTER_USER' => 1, - 'MYSQL_ERRNO' => 1, 'NONBLOCKING' => 1, 'PROCESSLIST' => 1, 'REPLICATION' => 1, - 'SCHEMA_NAME' => 1, 'SQL_TSI_DAY' => 1, 'TRANSACTION' => 1, 'UNCOMMITTED' => 1, - 'CATALOG_NAME' => 1, 'CLASS_ORIGIN' => 1, 'DEFAULT_AUTH' => 1, 'DES_KEY_FILE' => 1, - 'INITIAL_SIZE' => 1, 'MASTER_DELAY' => 1, 'MESSAGE_TEXT' => 1, 'PARTITIONING' => 1, - 'RELAY_THREAD' => 1, 'SERIALIZABLE' => 1, 'SQL_NO_CACHE' => 1, 'SQL_TSI_HOUR' => 1, - 'SQL_TSI_WEEK' => 1, 'SQL_TSI_YEAR' => 1, 'SUBPARTITION' => 1, - 'COLUMN_FORMAT' => 1, 'INSERT_METHOD' => 1, 'MASTER_SSL_CA' => 1, 'RELAY_LOG_POS' => 1, - 'SQL_TSI_MONTH' => 1, 'SUBPARTITIONS' => 1, - 'AUTO_INCREMENT' => 1, 'AVG_ROW_LENGTH' => 1, 'KEY_BLOCK_SIZE' => 1, 'MASTER_LOG_POS' => 1, - 'MASTER_SSL_CRL' => 1, 'MASTER_SSL_KEY' => 1, 'RELAY_LOG_FILE' => 1, 'SQL_TSI_MINUTE' => 1, - 'SQL_TSI_SECOND' => 1, 'TABLE_CHECKSUM' => 1, 'USER_RESOURCES' => 1, - 'AUTOEXTEND_SIZE' => 1, 'CONSTRAINT_NAME' => 1, 'DELAY_KEY_WRITE' => 1, 'FILE_BLOCK_SIZE' => 1, - 'MASTER_LOG_FILE' => 1, 'MASTER_PASSWORD' => 1, 'MASTER_SSL_CERT' => 1, 'PARSE_GCOL_EXPR' => 1, - 'REPLICATE_DO_DB' => 1, 'SQL_AFTER_GTIDS' => 1, 'SQL_TSI_QUARTER' => 1, 'SUBCLASS_ORIGIN' => 1, - 'MASTER_SERVER_ID' => 1, 'REDO_BUFFER_SIZE' => 1, 'SQL_BEFORE_GTIDS' => 1, - 'STATS_PERSISTENT' => 1, 'UNDO_BUFFER_SIZE' => 1, - 'CONSTRAINT_SCHEMA' => 1, 'GROUP_REPLICATION' => 1, 'IGNORE_SERVER_IDS' => 1, - 'MASTER_SSL_CAPATH' => 1, 'MASTER_SSL_CIPHER' => 1, 'RETURNED_SQLSTATE' => 1, - 'SQL_BUFFER_RESULT' => 1, 'STATS_AUTO_RECALC' => 1, - 'CONSTRAINT_CATALOG' => 1, 'MASTER_RETRY_COUNT' => 1, 'MASTER_SSL_CRLPATH' => 1, - 'MAX_STATEMENT_TIME' => 1, 'REPLICATE_DO_TABLE' => 1, 'SQL_AFTER_MTS_GAPS' => 1, - 'STATS_SAMPLE_PAGES' => 1, - 'REPLICATE_IGNORE_DB' => 1, - 'MASTER_AUTO_POSITION' => 1, 'MASTER_CONNECT_RETRY' => 1, 'MAX_QUERIES_PER_HOUR' => 1, - 'MAX_UPDATES_PER_HOUR' => 1, 'MAX_USER_CONNECTIONS' => 1, 'REPLICATE_REWRITE_DB' => 1, - 'REPLICATE_IGNORE_TABLE' => 1, - 'MASTER_HEARTBEAT_PERIOD' => 1, 'REPLICATE_WILD_DO_TABLE' => 1, - 'MAX_CONNECTIONS_PER_HOUR' => 1, - 'REPLICATE_WILD_IGNORE_TABLE' => 1, - - 'AS' => 3, 'BY' => 3, 'IS' => 3, 'ON' => 3, 'OR' => 3, 'TO' => 3, - 'ADD' => 3, 'ALL' => 3, 'AND' => 3, 'ASC' => 3, 'DEC' => 3, 'DIV' => 3, - 'FOR' => 3, 'GET' => 3, 'NOT' => 3, 'OUT' => 3, 'SQL' => 3, 'SSL' => 3, - 'USE' => 3, 'XOR' => 3, - 'BOTH' => 3, 'CALL' => 3, 'CASE' => 3, 'DESC' => 3, 'DROP' => 3, 'DUAL' => 3, - 'EACH' => 3, 'ELSE' => 3, 'EXIT' => 3, 'FROM' => 3, 'INT1' => 3, 'INT2' => 3, - 'INT3' => 3, 'INT4' => 3, 'INT8' => 3, 'INTO' => 3, 'JOIN' => 3, 'KEYS' => 3, - 'KILL' => 3, 'LIKE' => 3, 'LOAD' => 3, 'LOCK' => 3, 'LONG' => 3, 'LOOP' => 3, - 'NULL' => 3, 'OVER' => 3, 'READ' => 3, 'ROWS' => 3, 'SHOW' => 3, 'THEN' => 3, - 'TRUE' => 3, 'UNDO' => 3, 'WHEN' => 3, 'WITH' => 3, - 'ALTER' => 3, 'CHECK' => 3, 'CROSS' => 3, 'FALSE' => 3, 'FETCH' => 3, - 'FORCE' => 3, 'GRANT' => 3, 'GROUP' => 3, 'INNER' => 3, 'INOUT' => 3, - 'LEAVE' => 3, 'LIMIT' => 3, 'LINES' => 3, 'ORDER' => 3, 'OUTER' => 3, - 'PURGE' => 3, 'RANGE' => 3, 'READS' => 3, 'RLIKE' => 3, 'TABLE' => 3, - 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, - 'WRITE' => 3, - 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'EXCEPT' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, - 'HAVING' => 3, 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, - 'REGEXP' => 3, 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, - 'SIGNAL' => 3, 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, - 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, - 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, - 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, - 'REQUIRE' => 3, 'SCHEMAS' => 3, 'TRIGGER' => 3, 'VARYING' => 3, 'VIRTUAL' => 3, - 'CONTINUE' => 3, 'DAY_HOUR' => 3, 'DESCRIBE' => 3, 'DISTINCT' => 3, 'ENCLOSED' => 3, - 'MAXVALUE' => 3, 'MODIFIES' => 3, 'OPTIMIZE' => 3, 'RESIGNAL' => 3, 'RESTRICT' => 3, - 'SPECIFIC' => 3, 'SQLSTATE' => 3, 'STARTING' => 3, 'TRAILING' => 3, 'UNSIGNED' => 3, - 'ZEROFILL' => 3, - 'CONDITION' => 3, 'DATABASES' => 3, 'GENERATED' => 3, 'INTERSECT' => 3, - 'MIDDLEINT' => 3, 'PARTITION' => 3, 'PRECISION' => 3, 'PROCEDURE' => 3, - 'RECURSIVE' => 3, 'SENSITIVE' => 3, 'SEPARATOR' => 3, - 'ACCESSIBLE' => 3, 'ASENSITIVE' => 3, 'CONSTRAINT' => 3, 'DAY_MINUTE' => 3, - 'DAY_SECOND' => 3, 'OPTIONALLY' => 3, 'READ_WRITE' => 3, 'REFERENCES' => 3, - 'SQLWARNING' => 3, 'TERMINATED' => 3, 'YEAR_MONTH' => 3, - 'DISTINCTROW' => 3, 'HOUR_MINUTE' => 3, 'HOUR_SECOND' => 3, 'INSENSITIVE' => 3, - 'MASTER_BIND' => 3, - 'LOW_PRIORITY' => 3, 'SQLEXCEPTION' => 3, 'VARCHARACTER' => 3, - 'DETERMINISTIC' => 3, 'HIGH_PRIORITY' => 3, 'MINUTE_SECOND' => 3, 'STRAIGHT_JOIN' => 3, - 'IO_AFTER_GTIDS' => 3, 'SQL_BIG_RESULT' => 3, - 'DAY_MICROSECOND' => 3, 'IO_BEFORE_GTIDS' => 3, 'OPTIMIZER_COSTS' => 3, - 'HOUR_MICROSECOND' => 3, 'SQL_SMALL_RESULT' => 3, - 'MINUTE_MICROSECOND' => 3, 'NO_WRITE_TO_BINLOG' => 3, 'SECOND_MICROSECOND' => 3, - 'SQL_CALC_FOUND_ROWS' => 3, - 'MASTER_SSL_VERIFY_SERVER_CERT' => 3, - - 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7, - 'AND CHAIN' => 7, 'FULL JOIN' => 7, 'IF EXISTS' => 7, 'LEFT JOIN' => 7, - 'LESS THAN' => 7, 'LOAD DATA' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, - 'ON UPDATE' => 7, 'UNION ALL' => 7, - 'CROSS JOIN' => 7, 'ESCAPED BY' => 7, 'FOR UPDATE' => 7, 'INNER JOIN' => 7, - 'LINEAR KEY' => 7, 'NO RELEASE' => 7, 'OR REPLACE' => 7, 'RIGHT JOIN' => 7, - 'ENCLOSED BY' => 7, 'LINEAR HASH' => 7, 'STARTING BY' => 7, - 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'NATURAL JOIN' => 7, 'PARTITION BY' => 7, - 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, - 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'TERMINATED BY' => 7, - 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7, - 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'FULL OUTER JOIN' => 7, 'INDEX DIRECTORY' => 7, - 'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7, - 'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7, - 'NATURAL LEFT JOIN' => 7, 'START TRANSACTION' => 7, - 'LOCK IN SHARE MODE' => 7, 'NATURAL RIGHT JOIN' => 7, 'SELECT TRANSACTION' => 7, - 'DEFAULT CHARACTER SET' => 7, - 'NATURAL LEFT OUTER JOIN' => 7, - 'NATURAL RIGHT OUTER JOIN' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - - 'BIT' => 9, 'XML' => 9, - 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, - 'ARRAY' => 9, - 'SERIAL' => 9, - 'BOOLEAN' => 9, - 'DATETIME' => 9, 'GEOMETRY' => 9, 'MULTISET' => 9, - 'MULTILINEPOINT' => 9, - 'MULTILINEPOLYGON' => 9, - - 'INT' => 11, 'SET' => 11, - 'BLOB' => 11, 'REAL' => 11, - 'FLOAT' => 11, - 'BIGINT' => 11, 'DOUBLE' => 11, - 'DECIMAL' => 11, 'INTEGER' => 11, 'NUMERIC' => 11, 'TINYINT' => 11, 'VARCHAR' => 11, - 'LONGBLOB' => 11, 'LONGTEXT' => 11, 'SMALLINT' => 11, 'TINYBLOB' => 11, 'TINYTEXT' => 11, - 'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11, - 'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11, - - 'BINARY VARYING' => 15, - - 'KEY' => 19, - 'INDEX' => 19, - 'UNIQUE' => 19, - 'SPATIAL' => 19, - 'FULLTEXT' => 19, - - 'INDEX KEY' => 23, - 'UNIQUE KEY' => 23, - 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23, - 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23, - 'SPATIAL INDEX' => 23, - 'FULLTEXT INDEX' => 23, - - 'X' => 33, 'Y' => 33, - 'LN' => 33, 'PI' => 33, - 'ABS' => 33, 'AVG' => 33, 'BIN' => 33, 'COS' => 33, 'COT' => 33, 'DAY' => 33, - 'ELT' => 33, 'EXP' => 33, 'HEX' => 33, 'LOG' => 33, 'MAX' => 33, 'MD5' => 33, - 'MID' => 33, 'MIN' => 33, 'NOW' => 33, 'OCT' => 33, 'ORD' => 33, 'POW' => 33, - 'SHA' => 33, 'SIN' => 33, 'STD' => 33, 'SUM' => 33, 'TAN' => 33, - 'ACOS' => 33, 'AREA' => 33, 'ASIN' => 33, 'ATAN' => 33, 'CAST' => 33, 'CEIL' => 33, - 'CONV' => 33, 'HOUR' => 33, 'LOG2' => 33, 'LPAD' => 33, 'RAND' => 33, 'RPAD' => 33, - 'SHA1' => 33, 'SHA2' => 33, 'SIGN' => 33, 'SQRT' => 33, 'SRID' => 33, 'ST_X' => 33, - 'ST_Y' => 33, 'TRIM' => 33, 'USER' => 33, 'UUID' => 33, 'WEEK' => 33, - 'ASCII' => 33, 'ASWKB' => 33, 'ASWKT' => 33, 'ATAN2' => 33, 'COUNT' => 33, - 'CRC32' => 33, 'FIELD' => 33, 'FLOOR' => 33, 'INSTR' => 33, 'LCASE' => 33, - 'LEAST' => 33, 'LOG10' => 33, 'LOWER' => 33, 'LTRIM' => 33, 'MONTH' => 33, - 'POWER' => 33, 'QUOTE' => 33, 'ROUND' => 33, 'RTRIM' => 33, 'SLEEP' => 33, - 'SPACE' => 33, 'UCASE' => 33, 'UNHEX' => 33, 'UPPER' => 33, - 'ASTEXT' => 33, 'BIT_OR' => 33, 'BUFFER' => 33, 'CONCAT' => 33, 'DECODE' => 33, - 'ENCODE' => 33, 'EQUALS' => 33, 'FORMAT' => 33, 'IFNULL' => 33, 'ISNULL' => 33, - 'LENGTH' => 33, 'LOCATE' => 33, 'MINUTE' => 33, 'NULLIF' => 33, 'POINTN' => 33, - 'SECOND' => 33, 'STDDEV' => 33, 'STRCMP' => 33, 'SUBSTR' => 33, 'WITHIN' => 33, - 'ADDDATE' => 33, 'ADDTIME' => 33, 'AGAINST' => 33, 'BIT_AND' => 33, 'BIT_XOR' => 33, - 'CEILING' => 33, 'CHARSET' => 33, 'CROSSES' => 33, 'CURDATE' => 33, 'CURTIME' => 33, - 'DAYNAME' => 33, 'DEGREES' => 33, 'ENCRYPT' => 33, 'EXTRACT' => 33, 'GLENGTH' => 33, - 'ISEMPTY' => 33, 'IS_IPV4' => 33, 'IS_IPV6' => 33, 'QUARTER' => 33, 'RADIANS' => 33, - 'REVERSE' => 33, 'SOUNDEX' => 33, 'ST_AREA' => 33, 'ST_SRID' => 33, 'SUBDATE' => 33, - 'SUBTIME' => 33, 'SYSDATE' => 33, 'TOUCHES' => 33, 'TO_DAYS' => 33, 'VAR_POP' => 33, - 'VERSION' => 33, 'WEEKDAY' => 33, - 'ASBINARY' => 33, 'CENTROID' => 33, 'COALESCE' => 33, 'COMPRESS' => 33, 'CONTAINS' => 33, - 'DATEDIFF' => 33, 'DATE_ADD' => 33, 'DATE_SUB' => 33, 'DISJOINT' => 33, 'DISTANCE' => 33, - 'ENDPOINT' => 33, 'ENVELOPE' => 33, 'GET_LOCK' => 33, 'GREATEST' => 33, 'ISCLOSED' => 33, - 'ISSIMPLE' => 33, 'JSON_SET' => 33, 'MAKEDATE' => 33, 'MAKETIME' => 33, 'MAKE_SET' => 33, - 'MBREQUAL' => 33, 'OVERLAPS' => 33, 'PASSWORD' => 33, 'POSITION' => 33, 'ST_ASWKB' => 33, - 'ST_ASWKT' => 33, 'ST_UNION' => 33, 'TIMEDIFF' => 33, 'TRUNCATE' => 33, 'VARIANCE' => 33, - 'VAR_SAMP' => 33, 'YEARWEEK' => 33, - 'ANY_VALUE' => 33, 'BENCHMARK' => 33, 'BIT_COUNT' => 33, 'COLLATION' => 33, - 'CONCAT_WS' => 33, 'DAYOFWEEK' => 33, 'DAYOFYEAR' => 33, 'DIMENSION' => 33, - 'FROM_DAYS' => 33, 'GEOMETRYN' => 33, 'INET_ATON' => 33, 'INET_NTOA' => 33, - 'JSON_KEYS' => 33, 'JSON_TYPE' => 33, 'LOAD_FILE' => 33, 'MBRCOVERS' => 33, - 'MBREQUALS' => 33, 'MBRWITHIN' => 33, 'MONTHNAME' => 33, 'NUMPOINTS' => 33, - 'ROW_COUNT' => 33, 'ST_ASTEXT' => 33, 'ST_BUFFER' => 33, 'ST_EQUALS' => 33, - 'ST_LENGTH' => 33, 'ST_POINTN' => 33, 'ST_WITHIN' => 33, 'SUBSTRING' => 33, - 'TO_BASE64' => 33, 'UPDATEXML' => 33, - 'BIT_LENGTH' => 33, 'CONVERT_TZ' => 33, 'CONVEXHULL' => 33, 'DAYOFMONTH' => 33, - 'EXPORT_SET' => 33, 'FOUND_ROWS' => 33, 'GET_FORMAT' => 33, 'INET6_ATON' => 33, - 'INET6_NTOA' => 33, 'INTERSECTS' => 33, 'JSON_ARRAY' => 33, 'JSON_DEPTH' => 33, - 'JSON_MERGE' => 33, 'JSON_QUOTE' => 33, 'JSON_VALID' => 33, 'MBRTOUCHES' => 33, - 'MULTIPOINT' => 33, 'NAME_CONST' => 33, 'PERIOD_ADD' => 33, 'STARTPOINT' => 33, - 'STDDEV_POP' => 33, 'ST_CROSSES' => 33, 'ST_GEOHASH' => 33, 'ST_ISEMPTY' => 33, - 'ST_ISVALID' => 33, 'ST_TOUCHES' => 33, 'TO_SECONDS' => 33, 'UNCOMPRESS' => 33, - 'UUID_SHORT' => 33, 'WEEKOFYEAR' => 33, - 'AES_DECRYPT' => 33, 'AES_ENCRYPT' => 33, 'CHAR_LENGTH' => 33, 'DATE_FORMAT' => 33, - 'DES_DECRYPT' => 33, 'DES_ENCRYPT' => 33, 'FIND_IN_SET' => 33, 'FROM_BASE64' => 33, - 'GEOMFROMWKB' => 33, 'GTID_SUBSET' => 33, 'JSON_INSERT' => 33, 'JSON_LENGTH' => 33, - 'JSON_OBJECT' => 33, 'JSON_PRETTY' => 33, 'JSON_REMOVE' => 33, 'JSON_SEARCH' => 33, - 'LINEFROMWKB' => 33, 'MBRCONTAINS' => 33, 'MBRDISJOINT' => 33, 'MBROVERLAPS' => 33, - 'MICROSECOND' => 33, 'PERIOD_DIFF' => 33, 'POLYFROMWKB' => 33, 'SEC_TO_TIME' => 33, - 'STDDEV_SAMP' => 33, 'STR_TO_DATE' => 33, 'ST_ASBINARY' => 33, 'ST_CENTROID' => 33, - 'ST_CONTAINS' => 33, 'ST_DISJOINT' => 33, 'ST_DISTANCE' => 33, 'ST_ENDPOINT' => 33, - 'ST_ENVELOPE' => 33, 'ST_ISCLOSED' => 33, 'ST_ISSIMPLE' => 33, 'ST_OVERLAPS' => 33, - 'ST_SIMPLIFY' => 33, 'ST_VALIDATE' => 33, 'SYSTEM_USER' => 33, 'TIME_FORMAT' => 33, - 'TIME_TO_SEC' => 33, - 'COERCIBILITY' => 33, 'EXTERIORRING' => 33, 'EXTRACTVALUE' => 33, 'GEOMETRYTYPE' => 33, - 'GEOMFROMTEXT' => 33, 'GROUP_CONCAT' => 33, 'IS_FREE_LOCK' => 33, 'IS_USED_LOCK' => 33, - 'JSON_EXTRACT' => 33, 'JSON_REPLACE' => 33, 'JSON_UNQUOTE' => 33, 'LINEFROMTEXT' => 33, - 'MBRCOVEREDBY' => 33, 'MLINEFROMWKB' => 33, 'MPOLYFROMWKB' => 33, 'MULTIPOLYGON' => 33, - 'OCTET_LENGTH' => 33, 'OLD_PASSWORD' => 33, 'POINTFROMWKB' => 33, 'POLYFROMTEXT' => 33, - 'RANDOM_BYTES' => 33, 'RELEASE_LOCK' => 33, 'SESSION_USER' => 33, 'ST_ASGEOJSON' => 33, - 'ST_DIMENSION' => 33, 'ST_GEOMETRYN' => 33, 'ST_NUMPOINTS' => 33, 'TIMESTAMPADD' => 33, - 'CONNECTION_ID' => 33, 'FROM_UNIXTIME' => 33, 'GTID_SUBTRACT' => 33, 'INTERIORRINGN' => 33, - 'JSON_CONTAINS' => 33, 'MBRINTERSECTS' => 33, 'MLINEFROMTEXT' => 33, 'MPOINTFROMWKB' => 33, - 'MPOLYFROMTEXT' => 33, 'NUMGEOMETRIES' => 33, 'POINTFROMTEXT' => 33, 'ST_CONVEXHULL' => 33, - 'ST_DIFFERENCE' => 33, 'ST_INTERSECTS' => 33, 'ST_STARTPOINT' => 33, 'TIMESTAMPDIFF' => 33, - 'WEIGHT_STRING' => 33, - 'IS_IPV4_COMPAT' => 33, 'IS_IPV4_MAPPED' => 33, 'LAST_INSERT_ID' => 33, 'MPOINTFROMTEXT' => 33, - 'POLYGONFROMWKB' => 33, 'ST_GEOMFROMWKB' => 33, 'ST_LINEFROMWKB' => 33, 'ST_POLYFROMWKB' => 33, - 'UNIX_TIMESTAMP' => 33, - 'GEOMCOLLFROMWKB' => 33, 'MASTER_POS_WAIT' => 33, 'POLYGONFROMTEXT' => 33, 'ST_EXTERIORRING' => 33, - 'ST_GEOMETRYTYPE' => 33, 'ST_GEOMFROMTEXT' => 33, 'ST_INTERSECTION' => 33, 'ST_LINEFROMTEXT' => 33, - 'ST_MAKEENVELOPE' => 33, 'ST_MLINEFROMWKB' => 33, 'ST_MPOLYFROMWKB' => 33, 'ST_POINTFROMWKB' => 33, - 'ST_POLYFROMTEXT' => 33, 'SUBSTRING_INDEX' => 33, - 'CHARACTER_LENGTH' => 33, 'GEOMCOLLFROMTEXT' => 33, 'GEOMETRYFROMTEXT' => 33, - 'JSON_MERGE_PATCH' => 33, 'NUMINTERIORRINGS' => 33, 'ST_INTERIORRINGN' => 33, - 'ST_MLINEFROMTEXT' => 33, 'ST_MPOINTFROMWKB' => 33, 'ST_MPOLYFROMTEXT' => 33, - 'ST_NUMGEOMETRIES' => 33, 'ST_POINTFROMTEXT' => 33, 'ST_SYMDIFFERENCE' => 33, - 'JSON_ARRAY_APPEND' => 33, 'JSON_ARRAY_INSERT' => 33, 'JSON_STORAGE_FREE' => 33, - 'JSON_STORAGE_SIZE' => 33, 'LINESTRINGFROMWKB' => 33, 'MULTIPOINTFROMWKB' => 33, - 'RELEASE_ALL_LOCKS' => 33, 'ST_LATFROMGEOHASH' => 33, 'ST_MPOINTFROMTEXT' => 33, - 'ST_POLYGONFROMWKB' => 33, - 'JSON_CONTAINS_PATH' => 33, 'MULTIPOINTFROMTEXT' => 33, 'ST_BUFFER_STRATEGY' => 33, - 'ST_DISTANCE_SPHERE' => 33, 'ST_GEOMCOLLFROMTXT' => 33, 'ST_GEOMCOLLFROMWKB' => 33, - 'ST_GEOMFROMGEOJSON' => 33, 'ST_LONGFROMGEOHASH' => 33, 'ST_POLYGONFROMTEXT' => 33, - 'JSON_MERGE_PRESERVE' => 33, 'MULTIPOLYGONFROMWKB' => 33, 'ST_GEOMCOLLFROMTEXT' => 33, - 'ST_GEOMETRYFROMTEXT' => 33, 'ST_NUMINTERIORRINGS' => 33, 'ST_POINTFROMGEOHASH' => 33, - 'UNCOMPRESSED_LENGTH' => 33, - 'MULTIPOLYGONFROMTEXT' => 33, 'ST_LINESTRINGFROMWKB' => 33, 'ST_MULTIPOINTFROMWKB' => 33, - 'ST_MULTIPOINTFROMTEXT' => 33, - 'MULTILINESTRINGFROMWKB' => 33, 'ST_MULTIPOLYGONFROMWKB' => 33, - 'MULTILINESTRINGFROMTEXT' => 33, 'ST_MULTIPOLYGONFROMTEXT' => 33, - 'GEOMETRYCOLLECTIONFROMWKB' => 33, 'ST_MULTILINESTRINGFROMWKB' => 33, - 'GEOMETRYCOLLECTIONFROMTEXT' => 33, 'ST_MULTILINESTRINGFROMTEXT' => 33, 'VALIDATE_PASSWORD_STRENGTH' => 33, - 'WAIT_FOR_EXECUTED_GTID_SET' => 33, - 'ST_GEOMETRYCOLLECTIONFROMWKB' => 33, - 'ST_GEOMETRYCOLLECTIONFROMTEXT' => 33, - 'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS' => 33, - - 'IF' => 35, 'IN' => 35, - 'MOD' => 35, - 'LEFT' => 35, - 'MATCH' => 35, 'RIGHT' => 35, - 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, - 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, - 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, - 'LOCALTIME' => 35, - 'CURRENT_DATE' => 35, 'CURRENT_TIME' => 35, 'CURRENT_USER' => 35, - 'UTC_TIMESTAMP' => 35, - 'LOCALTIMESTAMP' => 35, - 'CURRENT_TIMESTAMP' => 35, - - 'NOT IN' => 39, - - 'DATE' => 41, 'TIME' => 41, 'YEAR' => 41, - 'POINT' => 41, - 'POLYGON' => 41, - 'TIMESTAMP' => 41, - 'LINESTRING' => 41, - 'MULTILINESTRING' => 41, - 'GEOMETRYCOLLECTION' => 41, - - 'CHAR' => 43, - 'BINARY' => 43, - 'INTERVAL' => 43, - ]; -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50100.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50100.php deleted file mode 100644 index 098344a..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50100.php +++ /dev/null @@ -1,294 +0,0 @@ - - * @phpstan-var non-empty-array - */ - public static $KEYWORDS = [ - 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'BDB' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, - 'NEW' => 1, 'ONE' => 1, 'ROW' => 1, - 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, - 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'GOTO' => 1, 'HASH' => 1, - 'HELP' => 1, 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, - 'MODE' => 1, 'NAME' => 1, 'NEXT' => 1, 'NONE' => 1, 'OPEN' => 1, 'PAGE' => 1, - 'PORT' => 1, 'PREV' => 1, 'ROWS' => 1, 'SOME' => 1, 'STOP' => 1, 'THAN' => 1, - 'TYPE' => 1, 'VIEW' => 1, 'WAIT' => 1, 'WORK' => 1, 'X509' => 1, - 'AFTER' => 1, 'BEGIN' => 1, 'BLOCK' => 1, 'BTREE' => 1, 'CACHE' => 1, - 'CHAIN' => 1, 'CLOSE' => 1, 'EVENT' => 1, 'EVERY' => 1, 'FIRST' => 1, - 'FIXED' => 1, 'FLUSH' => 1, 'FOUND' => 1, 'HOSTS' => 1, 'LABEL' => 1, - 'LEVEL' => 1, 'LOCAL' => 1, 'LOCKS' => 1, 'MERGE' => 1, 'MUTEX' => 1, - 'NAMES' => 1, 'NCHAR' => 1, 'OWNER' => 1, 'PHASE' => 1, 'QUERY' => 1, - 'QUICK' => 1, 'RAID0' => 1, 'RESET' => 1, 'RTREE' => 1, 'SHARE' => 1, - 'SLAVE' => 1, 'START' => 1, 'SUPER' => 1, 'SWAPS' => 1, 'TYPES' => 1, - 'UNTIL' => 1, 'VALUE' => 1, - 'ACTION' => 1, 'BACKUP' => 1, 'BINLOG' => 1, 'CIPHER' => 1, 'CLIENT' => 1, - 'COMMIT' => 1, 'ENABLE' => 1, 'ENGINE' => 1, 'ERRORS' => 1, 'ESCAPE' => 1, - 'EVENTS' => 1, 'FAULTS' => 1, 'FIELDS' => 1, 'GLOBAL' => 1, 'GRANTS' => 1, - 'IMPORT' => 1, 'INNODB' => 1, 'ISSUER' => 1, 'LEAVES' => 1, 'MASTER' => 1, - 'MEDIUM' => 1, 'MEMORY' => 1, 'MODIFY' => 1, 'OFFSET' => 1, 'PARSER' => 1, - 'PLUGIN' => 1, 'RELOAD' => 1, 'REMOVE' => 1, 'REPAIR' => 1, 'RESUME' => 1, - 'ROLLUP' => 1, 'SERVER' => 1, 'SIGNED' => 1, 'SIMPLE' => 1, 'SOCKET' => 1, - 'SONAME' => 1, 'SOUNDS' => 1, 'SOURCE' => 1, 'STARTS' => 1, 'STATUS' => 1, - 'STRING' => 1, 'TABLES' => 1, - 'AUTHORS' => 1, 'CHANGED' => 1, 'COLUMNS' => 1, 'COMMENT' => 1, 'COMPACT' => 1, - 'CONTEXT' => 1, 'DEFINER' => 1, 'DISABLE' => 1, 'DISCARD' => 1, 'DYNAMIC' => 1, - 'ENGINES' => 1, 'EXECUTE' => 1, 'HANDLER' => 1, 'INDEXES' => 1, 'INSTALL' => 1, - 'INVOKER' => 1, 'LOGFILE' => 1, 'MIGRATE' => 1, 'NO_WAIT' => 1, 'OPTIONS' => 1, - 'PARTIAL' => 1, 'PLUGINS' => 1, 'PREPARE' => 1, 'PROFILE' => 1, 'REBUILD' => 1, - 'RECOVER' => 1, 'RESTORE' => 1, 'RETURNS' => 1, 'ROUTINE' => 1, 'SESSION' => 1, - 'STORAGE' => 1, 'STRIPED' => 1, 'SUBJECT' => 1, 'SUSPEND' => 1, 'UNICODE' => 1, - 'UNKNOWN' => 1, 'UPGRADE' => 1, 'USE_FRM' => 1, 'VIRTUAL' => 1, 'WRAPPER' => 1, - 'CASCADED' => 1, 'CHECKSUM' => 1, 'DATAFILE' => 1, 'DUMPFILE' => 1, 'EXTENDED' => 1, - 'FUNCTION' => 1, 'INNOBASE' => 1, 'LANGUAGE' => 1, 'MAXVALUE' => 1, 'MAX_ROWS' => 1, - 'MAX_SIZE' => 1, 'MIN_ROWS' => 1, 'NATIONAL' => 1, 'NVARCHAR' => 1, 'ONE_SHOT' => 1, - 'PRESERVE' => 1, 'PROFILES' => 1, 'REDOFILE' => 1, 'ROLLBACK' => 1, 'SCHEDULE' => 1, - 'SECURITY' => 1, 'SHUTDOWN' => 1, 'SNAPSHOT' => 1, 'SWITCHES' => 1, 'TRIGGERS' => 1, - 'UNDOFILE' => 1, 'WARNINGS' => 1, - 'AGGREGATE' => 1, 'ALGORITHM' => 1, 'COMMITTED' => 1, 'DIRECTORY' => 1, - 'DUPLICATE' => 1, 'EXPANSION' => 1, 'IO_THREAD' => 1, 'ISOLATION' => 1, - 'NODEGROUP' => 1, 'PACK_KEYS' => 1, 'PARTITION' => 1, 'RAID_TYPE' => 1, - 'READ_ONLY' => 1, 'REDUNDANT' => 1, 'SAVEPOINT' => 1, 'SCHEDULER' => 1, - 'SQL_CACHE' => 1, 'TEMPORARY' => 1, 'TEMPTABLE' => 1, 'UNDEFINED' => 1, - 'UNINSTALL' => 1, 'VARIABLES' => 1, - 'BERKELEYDB' => 1, 'COMPLETION' => 1, 'COMPRESSED' => 1, 'CONCURRENT' => 1, - 'CONNECTION' => 1, 'CONSISTENT' => 1, 'DEALLOCATE' => 1, 'IDENTIFIED' => 1, - 'MASTER_SSL' => 1, 'NDBCLUSTER' => 1, 'PARTITIONS' => 1, 'PERSISTENT' => 1, - 'PRIVILEGES' => 1, 'REORGANISE' => 1, 'REORGANIZE' => 1, 'REPEATABLE' => 1, - 'ROW_FORMAT' => 1, 'SQL_THREAD' => 1, 'TABLESPACE' => 1, - 'EXTENT_SIZE' => 1, 'FRAC_SECOND' => 1, 'MASTER_HOST' => 1, 'MASTER_PORT' => 1, - 'MASTER_USER' => 1, 'PROCESSLIST' => 1, 'RAID_CHUNKS' => 1, 'REPLICATION' => 1, - 'SQL_TSI_DAY' => 1, 'TRANSACTION' => 1, 'UNCOMMITTED' => 1, - 'CONTRIBUTORS' => 1, 'DES_KEY_FILE' => 1, 'INITIAL_SIZE' => 1, 'PARTITIONING' => 1, - 'RELAY_THREAD' => 1, 'SERIALIZABLE' => 1, 'SQL_NO_CACHE' => 1, 'SQL_TSI_HOUR' => 1, - 'SQL_TSI_WEEK' => 1, 'SQL_TSI_YEAR' => 1, 'SUBPARTITION' => 1, - 'INSERT_METHOD' => 1, 'MASTER_SSL_CA' => 1, 'PAGE_CHECKSUM' => 1, 'RELAY_LOG_POS' => 1, - 'SQL_TSI_MONTH' => 1, 'SUBPARTITIONS' => 1, 'TRANSACTIONAL' => 1, - 'AUTO_INCREMENT' => 1, 'AVG_ROW_LENGTH' => 1, 'KEY_BLOCK_SIZE' => 1, 'MASTER_LOG_POS' => 1, - 'MASTER_SSL_KEY' => 1, 'RAID_CHUNKSIZE' => 1, 'RELAY_LOG_FILE' => 1, 'SQL_TSI_MINUTE' => 1, - 'SQL_TSI_SECOND' => 1, 'TABLE_CHECKSUM' => 1, 'USER_RESOURCES' => 1, - 'AUTOEXTEND_SIZE' => 1, 'DELAY_KEY_WRITE' => 1, 'MASTER_LOG_FILE' => 1, 'MASTER_PASSWORD' => 1, - 'MASTER_SSL_CERT' => 1, 'SQL_TSI_QUARTER' => 1, - 'MASTER_SERVER_ID' => 1, 'REDO_BUFFER_SIZE' => 1, 'UNDO_BUFFER_SIZE' => 1, - 'MASTER_SSL_CAPATH' => 1, 'MASTER_SSL_CIPHER' => 1, 'SQL_BUFFER_RESULT' => 1, - 'SQL_TSI_FRAC_SECOND' => 1, - 'MASTER_CONNECT_RETRY' => 1, 'MAX_QUERIES_PER_HOUR' => 1, 'MAX_UPDATES_PER_HOUR' => 1, - 'MAX_USER_CONNECTIONS' => 1, - 'MAX_CONNECTIONS_PER_HOUR' => 1, - - 'AS' => 3, 'BY' => 3, 'IS' => 3, 'ON' => 3, 'OR' => 3, 'TO' => 3, - 'ADD' => 3, 'ALL' => 3, 'AND' => 3, 'ASC' => 3, 'DEC' => 3, 'DIV' => 3, - 'FOR' => 3, 'NOT' => 3, 'OUT' => 3, 'SQL' => 3, 'SSL' => 3, 'USE' => 3, - 'XOR' => 3, - 'BOTH' => 3, 'CALL' => 3, 'CASE' => 3, 'DESC' => 3, 'DROP' => 3, 'DUAL' => 3, - 'EACH' => 3, 'ELSE' => 3, 'EXIT' => 3, 'FROM' => 3, 'INT1' => 3, 'INT2' => 3, - 'INT3' => 3, 'INT4' => 3, 'INT8' => 3, 'INTO' => 3, 'JOIN' => 3, 'KEYS' => 3, - 'KILL' => 3, 'LIKE' => 3, 'LOAD' => 3, 'LOCK' => 3, 'LONG' => 3, 'LOOP' => 3, - 'NULL' => 3, 'READ' => 3, 'SHOW' => 3, 'THEN' => 3, 'TRUE' => 3, 'UNDO' => 3, - 'WHEN' => 3, 'WITH' => 3, - 'ALTER' => 3, 'CHECK' => 3, 'CROSS' => 3, 'FALSE' => 3, 'FETCH' => 3, - 'FORCE' => 3, 'GRANT' => 3, 'GROUP' => 3, 'INNER' => 3, 'INOUT' => 3, - 'LEAVE' => 3, 'LIMIT' => 3, 'LINES' => 3, 'ORDER' => 3, 'OUTER' => 3, - 'PURGE' => 3, 'RANGE' => 3, 'READS' => 3, 'RLIKE' => 3, 'TABLE' => 3, - 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, - 'WRITE' => 3, - 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, - 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, - 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'UNLOCK' => 3, - 'UPDATE' => 3, - 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, - 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, - 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, - 'REQUIRE' => 3, 'SCHEMAS' => 3, 'TRIGGER' => 3, 'VARYING' => 3, - 'CONTINUE' => 3, 'DAY_HOUR' => 3, 'DESCRIBE' => 3, 'DISTINCT' => 3, 'ENCLOSED' => 3, - 'MODIFIES' => 3, 'OPTIMIZE' => 3, 'RESTRICT' => 3, 'SPECIFIC' => 3, 'SQLSTATE' => 3, - 'STARTING' => 3, 'TRAILING' => 3, 'UNSIGNED' => 3, 'ZEROFILL' => 3, - 'CONDITION' => 3, 'DATABASES' => 3, 'MIDDLEINT' => 3, 'PRECISION' => 3, - 'PROCEDURE' => 3, 'SENSITIVE' => 3, 'SEPARATOR' => 3, - 'ACCESSIBLE' => 3, 'ASENSITIVE' => 3, 'CONSTRAINT' => 3, 'DAY_MINUTE' => 3, - 'DAY_SECOND' => 3, 'OPTIONALLY' => 3, 'READ_WRITE' => 3, 'REFERENCES' => 3, - 'SQLWARNING' => 3, 'TERMINATED' => 3, 'YEAR_MONTH' => 3, - 'DISTINCTROW' => 3, 'HOUR_MINUTE' => 3, 'HOUR_SECOND' => 3, 'INSENSITIVE' => 3, - 'LOW_PRIORITY' => 3, 'SQLEXCEPTION' => 3, 'VARCHARACTER' => 3, - 'DETERMINISTIC' => 3, 'HIGH_PRIORITY' => 3, 'MINUTE_SECOND' => 3, 'STRAIGHT_JOIN' => 3, - 'SQL_BIG_RESULT' => 3, - 'DAY_MICROSECOND' => 3, - 'HOUR_MICROSECOND' => 3, 'SQL_SMALL_RESULT' => 3, - 'MINUTE_MICROSECOND' => 3, 'NO_WRITE_TO_BINLOG' => 3, 'SECOND_MICROSECOND' => 3, - 'SQL_CALC_FOUND_ROWS' => 3, - 'MASTER_SSL_VERIFY_SERVER_CERT' => 3, - - 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7, - 'AND CHAIN' => 7, 'FULL JOIN' => 7, 'IF EXISTS' => 7, 'LEFT JOIN' => 7, - 'LESS THAN' => 7, 'LOAD DATA' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, - 'ON UPDATE' => 7, 'UNION ALL' => 7, - 'CROSS JOIN' => 7, 'ESCAPED BY' => 7, 'FOR UPDATE' => 7, 'INNER JOIN' => 7, - 'LINEAR KEY' => 7, 'NO RELEASE' => 7, 'OR REPLACE' => 7, 'RIGHT JOIN' => 7, - 'ENCLOSED BY' => 7, 'LINEAR HASH' => 7, 'STARTING BY' => 7, - 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'NATURAL JOIN' => 7, 'PARTITION BY' => 7, - 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, - 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'TERMINATED BY' => 7, - 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7, - 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'FULL OUTER JOIN' => 7, 'INDEX DIRECTORY' => 7, - 'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7, - 'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7, - 'NATURAL LEFT JOIN' => 7, 'START TRANSACTION' => 7, - 'LOCK IN SHARE MODE' => 7, 'NATURAL RIGHT JOIN' => 7, 'SELECT TRANSACTION' => 7, - 'DEFAULT CHARACTER SET' => 7, - 'NATURAL LEFT OUTER JOIN' => 7, - 'NATURAL RIGHT OUTER JOIN' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - - 'BIT' => 9, 'XML' => 9, - 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, - 'ARRAY' => 9, - 'SERIAL' => 9, - 'BOOLEAN' => 9, - 'DATETIME' => 9, 'GEOMETRY' => 9, 'MULTISET' => 9, - 'MULTILINEPOINT' => 9, - 'MULTILINEPOLYGON' => 9, - - 'INT' => 11, 'SET' => 11, - 'BLOB' => 11, 'REAL' => 11, - 'FLOAT' => 11, - 'BIGINT' => 11, 'DOUBLE' => 11, - 'DECIMAL' => 11, 'INTEGER' => 11, 'NUMERIC' => 11, 'TINYINT' => 11, 'VARCHAR' => 11, - 'LONGBLOB' => 11, 'LONGTEXT' => 11, 'SMALLINT' => 11, 'TINYBLOB' => 11, 'TINYTEXT' => 11, - 'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11, - 'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11, - - 'BINARY VARYING' => 15, - - 'KEY' => 19, - 'INDEX' => 19, - 'UNIQUE' => 19, - 'SPATIAL' => 19, - 'FULLTEXT' => 19, - - 'INDEX KEY' => 23, - 'UNIQUE KEY' => 23, - 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23, - 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23, - 'SPATIAL INDEX' => 23, - 'FULLTEXT INDEX' => 23, - - 'X' => 33, 'Y' => 33, - 'LN' => 33, 'PI' => 33, - 'ABS' => 33, 'AVG' => 33, 'BIN' => 33, 'COS' => 33, 'COT' => 33, 'DAY' => 33, - 'ELT' => 33, 'EXP' => 33, 'HEX' => 33, 'LOG' => 33, 'MAX' => 33, 'MD5' => 33, - 'MID' => 33, 'MIN' => 33, 'NOW' => 33, 'OCT' => 33, 'ORD' => 33, 'POW' => 33, - 'SHA' => 33, 'SIN' => 33, 'STD' => 33, 'SUM' => 33, 'TAN' => 33, - 'ACOS' => 33, 'AREA' => 33, 'ASIN' => 33, 'ATAN' => 33, 'CAST' => 33, 'CEIL' => 33, - 'CONV' => 33, 'HOUR' => 33, 'LOG2' => 33, 'LPAD' => 33, 'RAND' => 33, 'RPAD' => 33, - 'SHA1' => 33, 'SIGN' => 33, 'SQRT' => 33, 'SRID' => 33, 'TRIM' => 33, 'USER' => 33, - 'UUID' => 33, 'WEEK' => 33, - 'ASCII' => 33, 'ASWKB' => 33, 'ASWKT' => 33, 'ATAN2' => 33, 'COUNT' => 33, - 'CRC32' => 33, 'DECOD' => 33, 'FIELD' => 33, 'FLOOR' => 33, 'INSTR' => 33, - 'LCASE' => 33, 'LEAST' => 33, 'LOG10' => 33, 'LOWER' => 33, 'LTRIM' => 33, - 'MONTH' => 33, 'POWER' => 33, 'QUOTE' => 33, 'ROUND' => 33, 'RTRIM' => 33, - 'SLEEP' => 33, 'SPACE' => 33, 'UCASE' => 33, 'UNHEX' => 33, 'UPPER' => 33, - 'ASTEXT' => 33, 'BIT_OR' => 33, 'CONCAT' => 33, 'ENCODE' => 33, 'EQUALS' => 33, - 'FORMAT' => 33, 'IFNULL' => 33, 'ISNULL' => 33, 'LENGTH' => 33, 'LOCATE' => 33, - 'MINUTE' => 33, 'NULLIF' => 33, 'POINTN' => 33, 'SECOND' => 33, 'STDDEV' => 33, - 'STRCMP' => 33, 'SUBSTR' => 33, 'WITHIN' => 33, - 'ADDDATE' => 33, 'ADDTIME' => 33, 'AGAINST' => 33, 'BIT_AND' => 33, 'BIT_XOR' => 33, - 'CEILING' => 33, 'CHARSET' => 33, 'CROSSES' => 33, 'CURDATE' => 33, 'CURTIME' => 33, - 'DAYNAME' => 33, 'DEGREES' => 33, 'ENCRYPT' => 33, 'EXTRACT' => 33, 'GLENGTH' => 33, - 'ISEMPTY' => 33, 'QUARTER' => 33, 'RADIANS' => 33, 'REVERSE' => 33, 'SOUNDEX' => 33, - 'SUBDATE' => 33, 'SUBTIME' => 33, 'SYSDATE' => 33, 'TOUCHES' => 33, 'TO_DAYS' => 33, - 'VAR_POP' => 33, 'VERSION' => 33, 'WEEKDAY' => 33, - 'ASBINARY' => 33, 'CENTROID' => 33, 'COALESCE' => 33, 'COMPRESS' => 33, 'CONTAINS' => 33, - 'DATEDIFF' => 33, 'DATE_ADD' => 33, 'DATE_SUB' => 33, 'DISJOINT' => 33, 'ENDPOINT' => 33, - 'ENVELOPE' => 33, 'GET_LOCK' => 33, 'GREATEST' => 33, 'ISCLOSED' => 33, 'ISSIMPLE' => 33, - 'MAKEDATE' => 33, 'MAKETIME' => 33, 'MAKE_SET' => 33, 'MBREQUAL' => 33, 'OVERLAPS' => 33, - 'PASSWORD' => 33, 'POSITION' => 33, 'TIMEDIFF' => 33, 'TRUNCATE' => 33, 'VARIANCE' => 33, - 'VAR_SAMP' => 33, 'YEARWEEK' => 33, - 'BENCHMARK' => 33, 'BIT_COUNT' => 33, 'COLLATION' => 33, 'CONCAT_WS' => 33, - 'DAYOFWEEK' => 33, 'DAYOFYEAR' => 33, 'DIMENSION' => 33, 'FROM_DAYS' => 33, - 'GEOMETRYN' => 33, 'INET_ATON' => 33, 'INET_NTOA' => 33, 'LOAD_FILE' => 33, - 'MBRWITHIN' => 33, 'MONTHNAME' => 33, 'NUMPOINTS' => 33, 'ROW_COUNT' => 33, - 'SUBSTRING' => 33, 'UPDATEXML' => 33, - 'BIT_LENGTH' => 33, 'CONVERT_TZ' => 33, 'DAYOFMONTH' => 33, 'EXPORT_SET' => 33, - 'FOUND_ROWS' => 33, 'GET_FORMAT' => 33, 'INTERSECTS' => 33, 'MBRTOUCHES' => 33, - 'MULTIPOINT' => 33, 'NAME_CONST' => 33, 'PERIOD_ADD' => 33, 'STARTPOINT' => 33, - 'STDDEV_POP' => 33, 'UNCOMPRESS' => 33, 'UUID_SHORT' => 33, 'WEEKOFYEAR' => 33, - 'AES_DECRYPT' => 33, 'AES_ENCRYPT' => 33, 'CHAR_LENGTH' => 33, 'DATE_FORMAT' => 33, - 'DES_DECRYPT' => 33, 'DES_ENCRYPT' => 33, 'FIND_IN_SET' => 33, 'GEOMFROMWKB' => 33, - 'LINEFROMWKB' => 33, 'MBRCONTAINS' => 33, 'MBRDISJOINT' => 33, 'MBROVERLAPS' => 33, - 'MICROSECOND' => 33, 'PERIOD_DIFF' => 33, 'POLYFROMWKB' => 33, 'SEC_TO_TIME' => 33, - 'STDDEV_SAMP' => 33, 'STR_TO_DATE' => 33, 'SYSTEM_USER' => 33, 'TIME_FORMAT' => 33, - 'TIME_TO_SEC' => 33, - 'COERCIBILITY' => 33, 'EXTERIORRING' => 33, 'EXTRACTVALUE' => 33, 'GEOMETRYTYPE' => 33, - 'GEOMFROMTEXT' => 33, 'GROUP_CONCAT' => 33, 'IS_FREE_LOCK' => 33, 'IS_USED_LOCK' => 33, - 'LINEFROMTEXT' => 33, 'MLINEFROMWKB' => 33, 'MPOLYFROMWKB' => 33, 'MULTIPOLYGON' => 33, - 'OCTET_LENGTH' => 33, 'OLD_PASSWORD' => 33, 'POINTFROMWKB' => 33, 'POLYFROMTEXT' => 33, - 'RELEASE_LOCK' => 33, 'SESSION_USER' => 33, 'TIMESTAMPADD' => 33, - 'CONNECTION_ID' => 33, 'FROM_UNIXTIME' => 33, 'INTERIORRINGN' => 33, 'MBRINTERSECTS' => 33, - 'MLINEFROMTEXT' => 33, 'MPOINTFROMWKB' => 33, 'MPOLYFROMTEXT' => 33, 'NUMGEOMETRIES' => 33, - 'POINTFROMTEXT' => 33, 'TIMESTAMPDIFF' => 33, - 'LAST_INSERT_ID' => 33, 'MPOINTFROMTEXT' => 33, 'POLYGONFROMWKB' => 33, 'UNIX_TIMESTAMP' => 33, - 'GEOMCOLLFROMWKB' => 33, 'MASTER_POS_WAIT' => 33, 'POLYGONFROMTEXT' => 33, 'SUBSTRING_INDEX' => 33, - 'CHARACTER_LENGTH' => 33, 'GEOMCOLLFROMTEXT' => 33, 'GEOMETRYFROMTEXT' => 33, - 'NUMINTERIORRINGS' => 33, - 'LINESTRINGFROMWKB' => 33, 'MULTIPOINTFROMWKB' => 33, - 'MULTIPOINTFROMTEXT' => 33, - 'MULTIPOLYGONFROMWKB' => 33, 'UNCOMPRESSED_LENGTH' => 33, - 'MULTIPOLYGONFROMTEXT' => 33, - 'MULTILINESTRINGFROMWKB' => 33, - 'MULTILINESTRINGFROMTEXT' => 33, - 'GEOMETRYCOLLECTIONFROMWKB' => 33, - 'GEOMETRYCOLLECTIONFROMTEXT' => 33, - - 'IF' => 35, 'IN' => 35, - 'MOD' => 35, - 'LEFT' => 35, - 'MATCH' => 35, 'RIGHT' => 35, - 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, - 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, - 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, - 'LOCALTIME' => 35, - 'CURRENT_DATE' => 35, 'CURRENT_TIME' => 35, 'CURRENT_USER' => 35, - 'UTC_TIMESTAMP' => 35, - 'LOCALTIMESTAMP' => 35, - 'CURRENT_TIMESTAMP' => 35, - - 'NOT IN' => 39, - - 'DATE' => 41, 'TIME' => 41, 'YEAR' => 41, - 'POINT' => 41, - 'POLYGON' => 41, - 'TIMESTAMP' => 41, - 'LINESTRING' => 41, - 'MULTILINESTRING' => 41, - 'GEOMETRYCOLLECTION' => 41, - - 'CHAR' => 43, - 'BINARY' => 43, - 'INTERVAL' => 43, - ]; -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50700.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50700.php deleted file mode 100644 index 6d06c4c..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Contexts/ContextMySql50700.php +++ /dev/null @@ -1,347 +0,0 @@ - - * @phpstan-var non-empty-array - */ - public static $KEYWORDS = [ - 'AT' => 1, 'DO' => 1, 'IO' => 1, 'NO' => 1, 'XA' => 1, - 'ANY' => 1, 'CPU' => 1, 'END' => 1, 'IPC' => 1, 'NDB' => 1, 'NEW' => 1, - 'ONE' => 1, 'ROW' => 1, 'XID' => 1, - 'BOOL' => 1, 'BYTE' => 1, 'CODE' => 1, 'CUBE' => 1, 'DATA' => 1, 'DISK' => 1, - 'ENDS' => 1, 'FAST' => 1, 'FILE' => 1, 'FULL' => 1, 'HASH' => 1, 'HELP' => 1, - 'HOST' => 1, 'LAST' => 1, 'LESS' => 1, 'LIST' => 1, 'LOGS' => 1, 'MODE' => 1, - 'NAME' => 1, 'NEXT' => 1, 'NONE' => 1, 'ONLY' => 1, 'OPEN' => 1, 'PAGE' => 1, - 'PORT' => 1, 'PREV' => 1, 'ROWS' => 1, 'SLOW' => 1, 'SOME' => 1, 'STOP' => 1, - 'THAN' => 1, 'TYPE' => 1, 'VIEW' => 1, 'WAIT' => 1, 'WORK' => 1, 'X509' => 1, - 'AFTER' => 1, 'BEGIN' => 1, 'BLOCK' => 1, 'BTREE' => 1, 'CACHE' => 1, - 'CHAIN' => 1, 'CLOSE' => 1, 'ERROR' => 1, 'EVENT' => 1, 'EVERY' => 1, - 'FIRST' => 1, 'FIXED' => 1, 'FLUSH' => 1, 'FOUND' => 1, 'HOSTS' => 1, - 'LEVEL' => 1, 'LOCAL' => 1, 'LOCKS' => 1, 'MERGE' => 1, 'MUTEX' => 1, - 'NAMES' => 1, 'NCHAR' => 1, 'NEVER' => 1, 'OWNER' => 1, 'PHASE' => 1, - 'PROXY' => 1, 'QUERY' => 1, 'QUICK' => 1, 'RELAY' => 1, 'RESET' => 1, - 'RTREE' => 1, 'SHARE' => 1, 'SLAVE' => 1, 'START' => 1, 'SUPER' => 1, - 'SWAPS' => 1, 'TYPES' => 1, 'UNTIL' => 1, 'VALUE' => 1, - 'ACTION' => 1, 'ALWAYS' => 1, 'BACKUP' => 1, 'BINLOG' => 1, 'CIPHER' => 1, - 'CLIENT' => 1, 'COMMIT' => 1, 'ENABLE' => 1, 'ENGINE' => 1, 'ERRORS' => 1, - 'ESCAPE' => 1, 'EVENTS' => 1, 'EXPIRE' => 1, 'EXPORT' => 1, 'FAULTS' => 1, - 'FIELDS' => 1, 'FILTER' => 1, 'GLOBAL' => 1, 'GRANTS' => 1, 'IMPORT' => 1, - 'ISSUER' => 1, 'LEAVES' => 1, 'MASTER' => 1, 'MEDIUM' => 1, 'MEMORY' => 1, - 'MODIFY' => 1, 'NUMBER' => 1, 'OFFSET' => 1, 'PARSER' => 1, 'PLUGIN' => 1, - 'RELOAD' => 1, 'REMOVE' => 1, 'REPAIR' => 1, 'RESUME' => 1, 'ROLLUP' => 1, - 'SERVER' => 1, 'SIGNED' => 1, 'SIMPLE' => 1, 'SOCKET' => 1, 'SONAME' => 1, - 'SOUNDS' => 1, 'SOURCE' => 1, 'STARTS' => 1, 'STATUS' => 1, 'STRING' => 1, - 'TABLES' => 1, - 'ACCOUNT' => 1, 'ANALYSE' => 1, 'CHANGED' => 1, 'CHANNEL' => 1, 'COLUMNS' => 1, - 'COMMENT' => 1, 'COMPACT' => 1, 'CONTEXT' => 1, 'CURRENT' => 1, 'DEFINER' => 1, - 'DISABLE' => 1, 'DISCARD' => 1, 'DYNAMIC' => 1, 'ENGINES' => 1, 'EXECUTE' => 1, - 'FOLLOWS' => 1, 'GENERAL' => 1, 'HANDLER' => 1, 'INDEXES' => 1, 'INSTALL' => 1, - 'INVOKER' => 1, 'LOGFILE' => 1, 'MIGRATE' => 1, 'NO_WAIT' => 1, 'OPTIONS' => 1, - 'PARTIAL' => 1, 'PLUGINS' => 1, 'PREPARE' => 1, 'PROFILE' => 1, 'REBUILD' => 1, - 'RECOVER' => 1, 'RESTORE' => 1, 'RETURNS' => 1, 'ROUTINE' => 1, 'SESSION' => 1, - 'STACKED' => 1, 'STORAGE' => 1, 'SUBJECT' => 1, 'SUSPEND' => 1, 'UNICODE' => 1, - 'UNKNOWN' => 1, 'UPGRADE' => 1, 'USE_FRM' => 1, 'WITHOUT' => 1, 'WRAPPER' => 1, - 'CASCADED' => 1, 'CHECKSUM' => 1, 'DATAFILE' => 1, 'DUMPFILE' => 1, 'EXCHANGE' => 1, - 'EXTENDED' => 1, 'FUNCTION' => 1, 'LANGUAGE' => 1, 'MAX_ROWS' => 1, 'MAX_SIZE' => 1, - 'MIN_ROWS' => 1, 'NATIONAL' => 1, 'NVARCHAR' => 1, 'PRECEDES' => 1, 'PRESERVE' => 1, - 'PROFILES' => 1, 'REDOFILE' => 1, 'RELAYLOG' => 1, 'ROLLBACK' => 1, 'SCHEDULE' => 1, - 'SECURITY' => 1, 'SHUTDOWN' => 1, 'SNAPSHOT' => 1, 'SWITCHES' => 1, 'TRIGGERS' => 1, - 'UNDOFILE' => 1, 'WARNINGS' => 1, - 'AGGREGATE' => 1, 'ALGORITHM' => 1, 'COMMITTED' => 1, 'DIRECTORY' => 1, - 'DUPLICATE' => 1, 'EXPANSION' => 1, 'IO_THREAD' => 1, 'ISOLATION' => 1, - 'NODEGROUP' => 1, 'PACK_KEYS' => 1, 'READ_ONLY' => 1, 'REDUNDANT' => 1, - 'SAVEPOINT' => 1, 'SQL_CACHE' => 1, 'TEMPORARY' => 1, 'TEMPTABLE' => 1, - 'UNDEFINED' => 1, 'UNINSTALL' => 1, 'VARIABLES' => 1, - 'COMPLETION' => 1, 'COMPRESSED' => 1, 'CONCURRENT' => 1, 'CONNECTION' => 1, - 'CONSISTENT' => 1, 'DEALLOCATE' => 1, 'IDENTIFIED' => 1, 'MASTER_SSL' => 1, - 'NDBCLUSTER' => 1, 'PARTITIONS' => 1, 'PERSISTENT' => 1, 'PLUGIN_DIR' => 1, - 'PRIVILEGES' => 1, 'REORGANIZE' => 1, 'REPEATABLE' => 1, 'ROW_FORMAT' => 1, - 'SQL_THREAD' => 1, 'TABLESPACE' => 1, 'TABLE_NAME' => 1, 'VALIDATION' => 1, - 'COLUMN_NAME' => 1, 'COMPRESSION' => 1, 'CURSOR_NAME' => 1, 'DIAGNOSTICS' => 1, - 'EXTENT_SIZE' => 1, 'MASTER_HOST' => 1, 'MASTER_PORT' => 1, 'MASTER_USER' => 1, - 'MYSQL_ERRNO' => 1, 'NONBLOCKING' => 1, 'PROCESSLIST' => 1, 'REPLICATION' => 1, - 'SCHEMA_NAME' => 1, 'SQL_TSI_DAY' => 1, 'TRANSACTION' => 1, 'UNCOMMITTED' => 1, - 'CATALOG_NAME' => 1, 'CLASS_ORIGIN' => 1, 'DEFAULT_AUTH' => 1, 'DES_KEY_FILE' => 1, - 'INITIAL_SIZE' => 1, 'MASTER_DELAY' => 1, 'MESSAGE_TEXT' => 1, 'PARTITIONING' => 1, - 'RELAY_THREAD' => 1, 'SERIALIZABLE' => 1, 'SQL_NO_CACHE' => 1, 'SQL_TSI_HOUR' => 1, - 'SQL_TSI_WEEK' => 1, 'SQL_TSI_YEAR' => 1, 'SUBPARTITION' => 1, - 'COLUMN_FORMAT' => 1, 'INSERT_METHOD' => 1, 'MASTER_SSL_CA' => 1, 'RELAY_LOG_POS' => 1, - 'SQL_TSI_MONTH' => 1, 'SUBPARTITIONS' => 1, - 'AUTO_INCREMENT' => 1, 'AVG_ROW_LENGTH' => 1, 'KEY_BLOCK_SIZE' => 1, 'MASTER_LOG_POS' => 1, - 'MASTER_SSL_CRL' => 1, 'MASTER_SSL_KEY' => 1, 'RELAY_LOG_FILE' => 1, 'SQL_TSI_MINUTE' => 1, - 'SQL_TSI_SECOND' => 1, 'TABLE_CHECKSUM' => 1, 'USER_RESOURCES' => 1, - 'AUTOEXTEND_SIZE' => 1, 'CONSTRAINT_NAME' => 1, 'DELAY_KEY_WRITE' => 1, 'FILE_BLOCK_SIZE' => 1, - 'MASTER_LOG_FILE' => 1, 'MASTER_PASSWORD' => 1, 'MASTER_SSL_CERT' => 1, 'PARSE_GCOL_EXPR' => 1, - 'REPLICATE_DO_DB' => 1, 'SQL_AFTER_GTIDS' => 1, 'SQL_TSI_QUARTER' => 1, 'SUBCLASS_ORIGIN' => 1, - 'MASTER_SERVER_ID' => 1, 'REDO_BUFFER_SIZE' => 1, 'SQL_BEFORE_GTIDS' => 1, - 'STATS_PERSISTENT' => 1, 'UNDO_BUFFER_SIZE' => 1, - 'CONSTRAINT_SCHEMA' => 1, 'GROUP_REPLICATION' => 1, 'IGNORE_SERVER_IDS' => 1, - 'MASTER_SSL_CAPATH' => 1, 'MASTER_SSL_CIPHER' => 1, 'RETURNED_SQLSTATE' => 1, - 'SQL_BUFFER_RESULT' => 1, 'STATS_AUTO_RECALC' => 1, - 'CONSTRAINT_CATALOG' => 1, 'MASTER_RETRY_COUNT' => 1, 'MASTER_SSL_CRLPATH' => 1, - 'MAX_STATEMENT_TIME' => 1, 'REPLICATE_DO_TABLE' => 1, 'SQL_AFTER_MTS_GAPS' => 1, - 'STATS_SAMPLE_PAGES' => 1, - 'REPLICATE_IGNORE_DB' => 1, - 'MASTER_AUTO_POSITION' => 1, 'MASTER_CONNECT_RETRY' => 1, 'MAX_QUERIES_PER_HOUR' => 1, - 'MAX_UPDATES_PER_HOUR' => 1, 'MAX_USER_CONNECTIONS' => 1, 'REPLICATE_REWRITE_DB' => 1, - 'REPLICATE_IGNORE_TABLE' => 1, - 'MASTER_HEARTBEAT_PERIOD' => 1, 'REPLICATE_WILD_DO_TABLE' => 1, - 'MAX_CONNECTIONS_PER_HOUR' => 1, - 'REPLICATE_WILD_IGNORE_TABLE' => 1, - - 'AS' => 3, 'BY' => 3, 'IS' => 3, 'ON' => 3, 'OR' => 3, 'TO' => 3, - 'ADD' => 3, 'ALL' => 3, 'AND' => 3, 'ASC' => 3, 'DEC' => 3, 'DIV' => 3, - 'FOR' => 3, 'GET' => 3, 'NOT' => 3, 'OUT' => 3, 'SQL' => 3, 'SSL' => 3, - 'USE' => 3, 'XOR' => 3, - 'BOTH' => 3, 'CALL' => 3, 'CASE' => 3, 'DESC' => 3, 'DROP' => 3, 'DUAL' => 3, - 'EACH' => 3, 'ELSE' => 3, 'EXIT' => 3, 'FROM' => 3, 'INT1' => 3, 'INT2' => 3, - 'INT3' => 3, 'INT4' => 3, 'INT8' => 3, 'INTO' => 3, 'JOIN' => 3, 'KEYS' => 3, - 'KILL' => 3, 'LIKE' => 3, 'LOAD' => 3, 'LOCK' => 3, 'LONG' => 3, 'LOOP' => 3, - 'NULL' => 3, 'READ' => 3, 'SHOW' => 3, 'THEN' => 3, 'TRUE' => 3, 'UNDO' => 3, - 'WHEN' => 3, 'WITH' => 3, - 'ALTER' => 3, 'CHECK' => 3, 'CROSS' => 3, 'FALSE' => 3, 'FETCH' => 3, - 'FORCE' => 3, 'GRANT' => 3, 'GROUP' => 3, 'INNER' => 3, 'INOUT' => 3, - 'LEAVE' => 3, 'LIMIT' => 3, 'LINES' => 3, 'ORDER' => 3, 'OUTER' => 3, - 'PURGE' => 3, 'RANGE' => 3, 'READS' => 3, 'RLIKE' => 3, 'TABLE' => 3, - 'UNION' => 3, 'USAGE' => 3, 'USING' => 3, 'WHERE' => 3, 'WHILE' => 3, - 'WRITE' => 3, - 'BEFORE' => 3, 'CHANGE' => 3, 'COLUMN' => 3, 'CREATE' => 3, 'CURSOR' => 3, - 'DELETE' => 3, 'ELSEIF' => 3, 'FLOAT4' => 3, 'FLOAT8' => 3, 'HAVING' => 3, - 'IGNORE' => 3, 'INFILE' => 3, 'LINEAR' => 3, 'OPTION' => 3, 'REGEXP' => 3, - 'RENAME' => 3, 'RETURN' => 3, 'REVOKE' => 3, 'SELECT' => 3, 'SIGNAL' => 3, - 'STORED' => 3, 'UNLOCK' => 3, 'UPDATE' => 3, - 'ANALYZE' => 3, 'BETWEEN' => 3, 'CASCADE' => 3, 'COLLATE' => 3, 'DECLARE' => 3, - 'DELAYED' => 3, 'ESCAPED' => 3, 'EXPLAIN' => 3, 'FOREIGN' => 3, 'ITERATE' => 3, - 'LEADING' => 3, 'NATURAL' => 3, 'OUTFILE' => 3, 'PRIMARY' => 3, 'RELEASE' => 3, - 'REQUIRE' => 3, 'SCHEMAS' => 3, 'TRIGGER' => 3, 'VARYING' => 3, 'VIRTUAL' => 3, - 'CONTINUE' => 3, 'DAY_HOUR' => 3, 'DESCRIBE' => 3, 'DISTINCT' => 3, 'ENCLOSED' => 3, - 'MAXVALUE' => 3, 'MODIFIES' => 3, 'OPTIMIZE' => 3, 'RESIGNAL' => 3, 'RESTRICT' => 3, - 'SPECIFIC' => 3, 'SQLSTATE' => 3, 'STARTING' => 3, 'TRAILING' => 3, 'UNSIGNED' => 3, - 'ZEROFILL' => 3, - 'CONDITION' => 3, 'DATABASES' => 3, 'GENERATED' => 3, 'MIDDLEINT' => 3, - 'PARTITION' => 3, 'PRECISION' => 3, 'PROCEDURE' => 3, 'SENSITIVE' => 3, - 'SEPARATOR' => 3, - 'ACCESSIBLE' => 3, 'ASENSITIVE' => 3, 'CONSTRAINT' => 3, 'DAY_MINUTE' => 3, - 'DAY_SECOND' => 3, 'OPTIONALLY' => 3, 'READ_WRITE' => 3, 'REFERENCES' => 3, - 'SQLWARNING' => 3, 'TERMINATED' => 3, 'YEAR_MONTH' => 3, - 'DISTINCTROW' => 3, 'HOUR_MINUTE' => 3, 'HOUR_SECOND' => 3, 'INSENSITIVE' => 3, - 'MASTER_BIND' => 3, - 'LOW_PRIORITY' => 3, 'SQLEXCEPTION' => 3, 'VARCHARACTER' => 3, - 'DETERMINISTIC' => 3, 'HIGH_PRIORITY' => 3, 'MINUTE_SECOND' => 3, 'STRAIGHT_JOIN' => 3, - 'IO_AFTER_GTIDS' => 3, 'SQL_BIG_RESULT' => 3, - 'DAY_MICROSECOND' => 3, 'IO_BEFORE_GTIDS' => 3, 'OPTIMIZER_COSTS' => 3, - 'HOUR_MICROSECOND' => 3, 'SQL_SMALL_RESULT' => 3, - 'MINUTE_MICROSECOND' => 3, 'NO_WRITE_TO_BINLOG' => 3, 'SECOND_MICROSECOND' => 3, - 'SQL_CALC_FOUND_ROWS' => 3, - 'MASTER_SSL_VERIFY_SERVER_CERT' => 3, - - 'GROUP BY' => 7, 'NOT NULL' => 7, 'ORDER BY' => 7, 'SET NULL' => 7, - 'AND CHAIN' => 7, 'FULL JOIN' => 7, 'IF EXISTS' => 7, 'LEFT JOIN' => 7, - 'LESS THAN' => 7, 'LOAD DATA' => 7, 'NO ACTION' => 7, 'ON DELETE' => 7, - 'ON UPDATE' => 7, 'UNION ALL' => 7, - 'CROSS JOIN' => 7, 'ESCAPED BY' => 7, 'FOR UPDATE' => 7, 'INNER JOIN' => 7, - 'LINEAR KEY' => 7, 'NO RELEASE' => 7, 'OR REPLACE' => 7, 'RIGHT JOIN' => 7, - 'ENCLOSED BY' => 7, 'LINEAR HASH' => 7, 'STARTING BY' => 7, - 'AND NO CHAIN' => 7, 'FOR EACH ROW' => 7, 'NATURAL JOIN' => 7, 'PARTITION BY' => 7, - 'SET PASSWORD' => 7, 'SQL SECURITY' => 7, - 'CHARACTER SET' => 7, 'IF NOT EXISTS' => 7, 'TERMINATED BY' => 7, - 'DATA DIRECTORY' => 7, 'UNION DISTINCT' => 7, - 'DEFAULT CHARSET' => 7, 'DEFAULT COLLATE' => 7, 'FULL OUTER JOIN' => 7, 'INDEX DIRECTORY' => 7, - 'LEFT OUTER JOIN' => 7, 'SUBPARTITION BY' => 7, - 'GENERATED ALWAYS' => 7, 'RIGHT OUTER JOIN' => 7, - 'NATURAL LEFT JOIN' => 7, 'START TRANSACTION' => 7, - 'LOCK IN SHARE MODE' => 7, 'NATURAL RIGHT JOIN' => 7, 'SELECT TRANSACTION' => 7, - 'DEFAULT CHARACTER SET' => 7, - 'NATURAL LEFT OUTER JOIN' => 7, - 'NATURAL RIGHT OUTER JOIN' => 7, 'WITH CONSISTENT SNAPSHOT' => 7, - - 'BIT' => 9, 'XML' => 9, - 'ENUM' => 9, 'JSON' => 9, 'TEXT' => 9, - 'ARRAY' => 9, - 'SERIAL' => 9, - 'BOOLEAN' => 9, - 'DATETIME' => 9, 'GEOMETRY' => 9, 'MULTISET' => 9, - 'MULTILINEPOINT' => 9, - 'MULTILINEPOLYGON' => 9, - - 'INT' => 11, 'SET' => 11, - 'BLOB' => 11, 'REAL' => 11, - 'FLOAT' => 11, - 'BIGINT' => 11, 'DOUBLE' => 11, - 'DECIMAL' => 11, 'INTEGER' => 11, 'NUMERIC' => 11, 'TINYINT' => 11, 'VARCHAR' => 11, - 'LONGBLOB' => 11, 'LONGTEXT' => 11, 'SMALLINT' => 11, 'TINYBLOB' => 11, 'TINYTEXT' => 11, - 'CHARACTER' => 11, 'MEDIUMINT' => 11, 'VARBINARY' => 11, - 'MEDIUMBLOB' => 11, 'MEDIUMTEXT' => 11, - - 'BINARY VARYING' => 15, - - 'KEY' => 19, - 'INDEX' => 19, - 'UNIQUE' => 19, - 'SPATIAL' => 19, - 'FULLTEXT' => 19, - - 'INDEX KEY' => 23, - 'UNIQUE KEY' => 23, - 'FOREIGN KEY' => 23, 'PRIMARY KEY' => 23, 'SPATIAL KEY' => 23, - 'FULLTEXT KEY' => 23, 'UNIQUE INDEX' => 23, - 'SPATIAL INDEX' => 23, - 'FULLTEXT INDEX' => 23, - - 'X' => 33, 'Y' => 33, - 'LN' => 33, 'PI' => 33, - 'ABS' => 33, 'AVG' => 33, 'BIN' => 33, 'COS' => 33, 'COT' => 33, 'DAY' => 33, - 'ELT' => 33, 'EXP' => 33, 'HEX' => 33, 'LOG' => 33, 'MAX' => 33, 'MD5' => 33, - 'MID' => 33, 'MIN' => 33, 'NOW' => 33, 'OCT' => 33, 'ORD' => 33, 'POW' => 33, - 'SHA' => 33, 'SIN' => 33, 'STD' => 33, 'SUM' => 33, 'TAN' => 33, - 'ACOS' => 33, 'AREA' => 33, 'ASIN' => 33, 'ATAN' => 33, 'CAST' => 33, 'CEIL' => 33, - 'CONV' => 33, 'HOUR' => 33, 'LOG2' => 33, 'LPAD' => 33, 'RAND' => 33, 'RPAD' => 33, - 'SHA1' => 33, 'SHA2' => 33, 'SIGN' => 33, 'SQRT' => 33, 'SRID' => 33, 'ST_X' => 33, - 'ST_Y' => 33, 'TRIM' => 33, 'USER' => 33, 'UUID' => 33, 'WEEK' => 33, - 'ASCII' => 33, 'ASWKB' => 33, 'ASWKT' => 33, 'ATAN2' => 33, 'COUNT' => 33, - 'CRC32' => 33, 'FIELD' => 33, 'FLOOR' => 33, 'INSTR' => 33, 'LCASE' => 33, - 'LEAST' => 33, 'LOG10' => 33, 'LOWER' => 33, 'LTRIM' => 33, 'MONTH' => 33, - 'POWER' => 33, 'QUOTE' => 33, 'ROUND' => 33, 'RTRIM' => 33, 'SLEEP' => 33, - 'SPACE' => 33, 'UCASE' => 33, 'UNHEX' => 33, 'UPPER' => 33, - 'ASTEXT' => 33, 'BIT_OR' => 33, 'BUFFER' => 33, 'CONCAT' => 33, 'DECODE' => 33, - 'ENCODE' => 33, 'EQUALS' => 33, 'FORMAT' => 33, 'IFNULL' => 33, 'ISNULL' => 33, - 'LENGTH' => 33, 'LOCATE' => 33, 'MINUTE' => 33, 'NULLIF' => 33, 'POINTN' => 33, - 'SECOND' => 33, 'STDDEV' => 33, 'STRCMP' => 33, 'SUBSTR' => 33, 'WITHIN' => 33, - 'ADDDATE' => 33, 'ADDTIME' => 33, 'AGAINST' => 33, 'BIT_AND' => 33, 'BIT_XOR' => 33, - 'CEILING' => 33, 'CHARSET' => 33, 'CROSSES' => 33, 'CURDATE' => 33, 'CURTIME' => 33, - 'DAYNAME' => 33, 'DEGREES' => 33, 'ENCRYPT' => 33, 'EXTRACT' => 33, 'GLENGTH' => 33, - 'ISEMPTY' => 33, 'IS_IPV4' => 33, 'IS_IPV6' => 33, 'QUARTER' => 33, 'RADIANS' => 33, - 'REVERSE' => 33, 'SOUNDEX' => 33, 'ST_AREA' => 33, 'ST_SRID' => 33, 'SUBDATE' => 33, - 'SUBTIME' => 33, 'SYSDATE' => 33, 'TOUCHES' => 33, 'TO_DAYS' => 33, 'VAR_POP' => 33, - 'VERSION' => 33, 'WEEKDAY' => 33, - 'ASBINARY' => 33, 'CENTROID' => 33, 'COALESCE' => 33, 'COMPRESS' => 33, 'CONTAINS' => 33, - 'DATEDIFF' => 33, 'DATE_ADD' => 33, 'DATE_SUB' => 33, 'DISJOINT' => 33, 'DISTANCE' => 33, - 'ENDPOINT' => 33, 'ENVELOPE' => 33, 'GET_LOCK' => 33, 'GREATEST' => 33, 'ISCLOSED' => 33, - 'ISSIMPLE' => 33, 'JSON_SET' => 33, 'MAKEDATE' => 33, 'MAKETIME' => 33, 'MAKE_SET' => 33, - 'MBREQUAL' => 33, 'OVERLAPS' => 33, 'PASSWORD' => 33, 'POSITION' => 33, 'ST_ASWKB' => 33, - 'ST_ASWKT' => 33, 'ST_UNION' => 33, 'TIMEDIFF' => 33, 'TRUNCATE' => 33, 'VARIANCE' => 33, - 'VAR_SAMP' => 33, 'YEARWEEK' => 33, - 'ANY_VALUE' => 33, 'BENCHMARK' => 33, 'BIT_COUNT' => 33, 'COLLATION' => 33, - 'CONCAT_WS' => 33, 'DAYOFWEEK' => 33, 'DAYOFYEAR' => 33, 'DIMENSION' => 33, - 'FROM_DAYS' => 33, 'GEOMETRYN' => 33, 'INET_ATON' => 33, 'INET_NTOA' => 33, - 'JSON_KEYS' => 33, 'JSON_TYPE' => 33, 'LOAD_FILE' => 33, 'MBRCOVERS' => 33, - 'MBREQUALS' => 33, 'MBRWITHIN' => 33, 'MONTHNAME' => 33, 'NUMPOINTS' => 33, - 'ROW_COUNT' => 33, 'ST_ASTEXT' => 33, 'ST_BUFFER' => 33, 'ST_EQUALS' => 33, - 'ST_LENGTH' => 33, 'ST_POINTN' => 33, 'ST_WITHIN' => 33, 'SUBSTRING' => 33, - 'TO_BASE64' => 33, 'UPDATEXML' => 33, - 'BIT_LENGTH' => 33, 'CONVERT_TZ' => 33, 'CONVEXHULL' => 33, 'DAYOFMONTH' => 33, - 'EXPORT_SET' => 33, 'FOUND_ROWS' => 33, 'GET_FORMAT' => 33, 'INET6_ATON' => 33, - 'INET6_NTOA' => 33, 'INTERSECTS' => 33, 'JSON_ARRAY' => 33, 'JSON_DEPTH' => 33, - 'JSON_MERGE' => 33, 'JSON_QUOTE' => 33, 'JSON_VALID' => 33, 'MBRTOUCHES' => 33, - 'MULTIPOINT' => 33, 'NAME_CONST' => 33, 'PERIOD_ADD' => 33, 'STARTPOINT' => 33, - 'STDDEV_POP' => 33, 'ST_CROSSES' => 33, 'ST_GEOHASH' => 33, 'ST_ISEMPTY' => 33, - 'ST_ISVALID' => 33, 'ST_TOUCHES' => 33, 'TO_SECONDS' => 33, 'UNCOMPRESS' => 33, - 'UUID_SHORT' => 33, 'WEEKOFYEAR' => 33, - 'AES_DECRYPT' => 33, 'AES_ENCRYPT' => 33, 'CHAR_LENGTH' => 33, 'DATE_FORMAT' => 33, - 'DES_DECRYPT' => 33, 'DES_ENCRYPT' => 33, 'FIND_IN_SET' => 33, 'FROM_BASE64' => 33, - 'GEOMFROMWKB' => 33, 'GTID_SUBSET' => 33, 'JSON_INSERT' => 33, 'JSON_LENGTH' => 33, - 'JSON_OBJECT' => 33, 'JSON_PRETTY' => 33, 'JSON_REMOVE' => 33, 'JSON_SEARCH' => 33, - 'LINEFROMWKB' => 33, 'MBRCONTAINS' => 33, 'MBRDISJOINT' => 33, 'MBROVERLAPS' => 33, - 'MICROSECOND' => 33, 'PERIOD_DIFF' => 33, 'POLYFROMWKB' => 33, 'SEC_TO_TIME' => 33, - 'STDDEV_SAMP' => 33, 'STR_TO_DATE' => 33, 'ST_ASBINARY' => 33, 'ST_CENTROID' => 33, - 'ST_CONTAINS' => 33, 'ST_DISJOINT' => 33, 'ST_DISTANCE' => 33, 'ST_ENDPOINT' => 33, - 'ST_ENVELOPE' => 33, 'ST_ISCLOSED' => 33, 'ST_ISSIMPLE' => 33, 'ST_OVERLAPS' => 33, - 'ST_SIMPLIFY' => 33, 'ST_VALIDATE' => 33, 'SYSTEM_USER' => 33, 'TIME_FORMAT' => 33, - 'TIME_TO_SEC' => 33, - 'COERCIBILITY' => 33, 'EXTERIORRING' => 33, 'EXTRACTVALUE' => 33, 'GEOMETRYTYPE' => 33, - 'GEOMFROMTEXT' => 33, 'GROUP_CONCAT' => 33, 'IS_FREE_LOCK' => 33, 'IS_USED_LOCK' => 33, - 'JSON_EXTRACT' => 33, 'JSON_REPLACE' => 33, 'JSON_UNQUOTE' => 33, 'LINEFROMTEXT' => 33, - 'MBRCOVEREDBY' => 33, 'MLINEFROMWKB' => 33, 'MPOLYFROMWKB' => 33, 'MULTIPOLYGON' => 33, - 'OCTET_LENGTH' => 33, 'OLD_PASSWORD' => 33, 'POINTFROMWKB' => 33, 'POLYFROMTEXT' => 33, - 'RANDOM_BYTES' => 33, 'RELEASE_LOCK' => 33, 'SESSION_USER' => 33, 'ST_ASGEOJSON' => 33, - 'ST_DIMENSION' => 33, 'ST_GEOMETRYN' => 33, 'ST_NUMPOINTS' => 33, 'TIMESTAMPADD' => 33, - 'CONNECTION_ID' => 33, 'FROM_UNIXTIME' => 33, 'GTID_SUBTRACT' => 33, 'INTERIORRINGN' => 33, - 'JSON_CONTAINS' => 33, 'MBRINTERSECTS' => 33, 'MLINEFROMTEXT' => 33, 'MPOINTFROMWKB' => 33, - 'MPOLYFROMTEXT' => 33, 'NUMGEOMETRIES' => 33, 'POINTFROMTEXT' => 33, 'ST_CONVEXHULL' => 33, - 'ST_DIFFERENCE' => 33, 'ST_INTERSECTS' => 33, 'ST_STARTPOINT' => 33, 'TIMESTAMPDIFF' => 33, - 'WEIGHT_STRING' => 33, - 'IS_IPV4_COMPAT' => 33, 'IS_IPV4_MAPPED' => 33, 'LAST_INSERT_ID' => 33, 'MPOINTFROMTEXT' => 33, - 'POLYGONFROMWKB' => 33, 'ST_GEOMFROMWKB' => 33, 'ST_LINEFROMWKB' => 33, 'ST_POLYFROMWKB' => 33, - 'UNIX_TIMESTAMP' => 33, - 'GEOMCOLLFROMWKB' => 33, 'MASTER_POS_WAIT' => 33, 'POLYGONFROMTEXT' => 33, 'ST_EXTERIORRING' => 33, - 'ST_GEOMETRYTYPE' => 33, 'ST_GEOMFROMTEXT' => 33, 'ST_INTERSECTION' => 33, 'ST_LINEFROMTEXT' => 33, - 'ST_MAKEENVELOPE' => 33, 'ST_MLINEFROMWKB' => 33, 'ST_MPOLYFROMWKB' => 33, 'ST_POINTFROMWKB' => 33, - 'ST_POLYFROMTEXT' => 33, 'SUBSTRING_INDEX' => 33, - 'CHARACTER_LENGTH' => 33, 'GEOMCOLLFROMTEXT' => 33, 'GEOMETRYFROMTEXT' => 33, - 'JSON_MERGE_PATCH' => 33, 'NUMINTERIORRINGS' => 33, 'ST_INTERIORRINGN' => 33, - 'ST_MLINEFROMTEXT' => 33, 'ST_MPOINTFROMWKB' => 33, 'ST_MPOLYFROMTEXT' => 33, - 'ST_NUMGEOMETRIES' => 33, 'ST_POINTFROMTEXT' => 33, 'ST_SYMDIFFERENCE' => 33, - 'JSON_ARRAY_APPEND' => 33, 'JSON_ARRAY_INSERT' => 33, 'JSON_STORAGE_FREE' => 33, - 'JSON_STORAGE_SIZE' => 33, 'LINESTRINGFROMWKB' => 33, 'MULTIPOINTFROMWKB' => 33, - 'RELEASE_ALL_LOCKS' => 33, 'ST_LATFROMGEOHASH' => 33, 'ST_MPOINTFROMTEXT' => 33, - 'ST_POLYGONFROMWKB' => 33, - 'JSON_CONTAINS_PATH' => 33, 'MULTIPOINTFROMTEXT' => 33, 'ST_BUFFER_STRATEGY' => 33, - 'ST_DISTANCE_SPHERE' => 33, 'ST_GEOMCOLLFROMTXT' => 33, 'ST_GEOMCOLLFROMWKB' => 33, - 'ST_GEOMFROMGEOJSON' => 33, 'ST_LONGFROMGEOHASH' => 33, 'ST_POLYGONFROMTEXT' => 33, - 'JSON_MERGE_PRESERVE' => 33, 'MULTIPOLYGONFROMWKB' => 33, 'ST_GEOMCOLLFROMTEXT' => 33, - 'ST_GEOMETRYFROMTEXT' => 33, 'ST_NUMINTERIORRINGS' => 33, 'ST_POINTFROMGEOHASH' => 33, - 'UNCOMPRESSED_LENGTH' => 33, - 'MULTIPOLYGONFROMTEXT' => 33, 'ST_LINESTRINGFROMWKB' => 33, 'ST_MULTIPOINTFROMWKB' => 33, - 'ST_MULTIPOINTFROMTEXT' => 33, - 'MULTILINESTRINGFROMWKB' => 33, 'ST_MULTIPOLYGONFROMWKB' => 33, - 'MULTILINESTRINGFROMTEXT' => 33, 'ST_MULTIPOLYGONFROMTEXT' => 33, - 'GEOMETRYCOLLECTIONFROMWKB' => 33, 'ST_MULTILINESTRINGFROMWKB' => 33, - 'GEOMETRYCOLLECTIONFROMTEXT' => 33, 'ST_MULTILINESTRINGFROMTEXT' => 33, 'VALIDATE_PASSWORD_STRENGTH' => 33, - 'WAIT_FOR_EXECUTED_GTID_SET' => 33, - 'ST_GEOMETRYCOLLECTIONFROMWKB' => 33, - 'ST_GEOMETRYCOLLECTIONFROMTEXT' => 33, - 'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS' => 33, - - 'IF' => 35, 'IN' => 35, - 'MOD' => 35, - 'LEFT' => 35, - 'MATCH' => 35, 'RIGHT' => 35, - 'EXISTS' => 35, 'INSERT' => 35, 'REPEAT' => 35, 'SCHEMA' => 35, 'VALUES' => 35, - 'CONVERT' => 35, 'DEFAULT' => 35, 'REPLACE' => 35, - 'DATABASE' => 35, 'UTC_DATE' => 35, 'UTC_TIME' => 35, - 'LOCALTIME' => 35, - 'CURRENT_DATE' => 35, 'CURRENT_TIME' => 35, 'CURRENT_USER' => 35, - 'UTC_TIMESTAMP' => 35, - 'LOCALTIMESTAMP' => 35, - 'CURRENT_TIMESTAMP' => 35, - - 'NOT IN' => 39, - - 'DATE' => 41, 'TIME' => 41, 'YEAR' => 41, - 'POINT' => 41, - 'POLYGON' => 41, - 'TIMESTAMP' => 41, - 'LINESTRING' => 41, - 'MULTILINESTRING' => 41, - 'GEOMETRYCOLLECTION' => 41, - - 'CHAR' => 43, - 'BINARY' => 43, - 'INTERVAL' => 43, - ]; -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Core.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Core.php deleted file mode 100644 index e529920..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Core.php +++ /dev/null @@ -1,51 +0,0 @@ -strict) { - throw $error; - } - - $this->errors[] = $error; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Exceptions/LoaderException.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Exceptions/LoaderException.php deleted file mode 100644 index 35d4b16..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Exceptions/LoaderException.php +++ /dev/null @@ -1,34 +0,0 @@ -name = $name; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Lexer.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Lexer.php deleted file mode 100644 index 9e905f5..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Lexer.php +++ /dev/null @@ -1,1050 +0,0 @@ -list; - } - - /** - * @param string|UtfString $str the query to be lexed - * @param bool $strict whether strict mode should be - * enabled or not - * @param string $delimiter the delimiter to be used - */ - public function __construct($str, $strict = false, $delimiter = null) - { - // `strlen` is used instead of `mb_strlen` because the lexer needs to - // parse each byte of the input. - $len = $str instanceof UtfString ? $str->length() : strlen($str); - - // For multi-byte strings, a new instance of `UtfString` is - // initialized (only if `UtfString` usage is forced. - if (! $str instanceof UtfString && USE_UTF_STRINGS && $len !== mb_strlen($str, 'UTF-8')) { - $str = new UtfString($str); - } - - $this->str = $str; - $this->len = $str instanceof UtfString ? $str->length() : $len; - - $this->strict = $strict; - - // Setting the delimiter. - $this->setDelimiter(! empty($delimiter) ? $delimiter : static::$DEFAULT_DELIMITER); - - $this->lex(); - } - - /** - * Sets the delimiter. - * - * @param string $delimiter the new delimiter - */ - public function setDelimiter($delimiter) - { - $this->delimiter = $delimiter; - $this->delimiterLen = strlen($delimiter); - } - - /** - * Parses the string and extracts lexemes. - */ - public function lex() - { - // TODO: Sometimes, static::parse* functions make unnecessary calls to - // is* functions. For a better performance, some rules can be deduced - // from context. - // For example, in `parseBool` there is no need to compare the token - // every time with `true` and `false`. The first step would be to - // compare with 'true' only and just after that add another letter from - // context and compare again with `false`. - // Another example is `parseComment`. - - $list = new TokensList(); - - /** - * Last processed token. - * - * @var Token - */ - $lastToken = null; - - for ($this->last = 0, $lastIdx = 0; $this->last < $this->len; $lastIdx = ++$this->last) { - /** - * The new token. - * - * @var Token - */ - $token = null; - - foreach (static::$PARSER_METHODS as $method) { - $token = $this->$method(); - - if ($token) { - break; - } - } - - if ($token === null) { - // @assert($this->last === $lastIdx); - $token = new Token($this->str[$this->last]); - $this->error('Unexpected character.', $this->str[$this->last], $this->last); - } elseif ( - $lastToken !== null - && $token->type === Token::TYPE_SYMBOL - && $token->flags & Token::FLAG_SYMBOL_VARIABLE - && ( - $lastToken->type === Token::TYPE_STRING - || ( - $lastToken->type === Token::TYPE_SYMBOL - && $lastToken->flags & Token::FLAG_SYMBOL_BACKTICK - ) - ) - ) { - // Handles ```... FROM 'user'@'%' ...```. - $lastToken->token .= $token->token; - $lastToken->type = Token::TYPE_SYMBOL; - $lastToken->flags = Token::FLAG_SYMBOL_USER; - $lastToken->value .= '@' . $token->value; - continue; - } elseif ( - $lastToken !== null - && $token->type === Token::TYPE_KEYWORD - && $lastToken->type === Token::TYPE_OPERATOR - && $lastToken->value === '.' - ) { - // Handles ```... tbl.FROM ...```. In this case, FROM is not - // a reserved word. - $token->type = Token::TYPE_NONE; - $token->flags = 0; - $token->value = $token->token; - } - - $token->position = $lastIdx; - - $list->tokens[$list->count++] = $token; - - // Handling delimiters. - if ($token->type === Token::TYPE_NONE && $token->value === 'DELIMITER') { - if ($this->last + 1 >= $this->len) { - $this->error('Expected whitespace(s) before delimiter.', '', $this->last + 1); - continue; - } - - // Skipping last R (from `delimiteR`) and whitespaces between - // the keyword `DELIMITER` and the actual delimiter. - $pos = ++$this->last; - $token = $this->parseWhitespace(); - - if ($token !== null) { - $token->position = $pos; - $list->tokens[$list->count++] = $token; - } - - // Preparing the token that holds the new delimiter. - if ($this->last + 1 >= $this->len) { - $this->error('Expected delimiter.', '', $this->last + 1); - continue; - } - - $pos = $this->last + 1; - - // Parsing the delimiter. - $this->delimiter = null; - $delimiterLen = 0; - while ( - ++$this->last < $this->len - && ! Context::isWhitespace($this->str[$this->last]) - && $delimiterLen < 15 - ) { - $this->delimiter .= $this->str[$this->last]; - ++$delimiterLen; - } - - if (empty($this->delimiter)) { - $this->error('Expected delimiter.', '', $this->last); - $this->delimiter = ';'; - } - - --$this->last; - - // Saving the delimiter and its token. - $this->delimiterLen = strlen($this->delimiter); - $token = new Token($this->delimiter, Token::TYPE_DELIMITER); - $token->position = $pos; - $list->tokens[$list->count++] = $token; - } - - $lastToken = $token; - } - - // Adding a final delimiter to mark the ending. - $list->tokens[$list->count++] = new Token(null, Token::TYPE_DELIMITER); - - // Saving the tokens list. - $this->list = $list; - - $this->solveAmbiguityOnStarOperator(); - } - - /** - * Resolves the ambiguity when dealing with the "*" operator. - * - * In SQL statements, the "*" operator can be an arithmetic operator (like in 2*3) or an SQL wildcard (like in - * SELECT a.* FROM ...). To solve this ambiguity, the solution is to find the next token, excluding whitespaces and - * comments, right after the "*" position. The "*" is for sure an SQL wildcard if the next token found is any of: - * - "FROM" (the FROM keyword like in "SELECT * FROM..."); - * - "USING" (the USING keyword like in "DELETE table_name.* USING..."); - * - "," (a comma separator like in "SELECT *, field FROM..."); - * - ")" (a closing parenthesis like in "COUNT(*)"). - * This methods will change the flag of the "*" tokens when any of those condition above is true. Otherwise, the - * default flag (arithmetic) will be kept. - * - * @return void - */ - private function solveAmbiguityOnStarOperator() - { - $iBak = $this->list->idx; - while (($starToken = $this->list->getNextOfTypeAndValue(Token::TYPE_OPERATOR, '*')) !== null) { - // getNext() already gets rid of whitespaces and comments. - $next = $this->list->getNext(); - - if ($next === null) { - continue; - } - - if ( - ($next->type !== Token::TYPE_KEYWORD || ! in_array($next->value, ['FROM', 'USING'], true)) - && ($next->type !== Token::TYPE_OPERATOR || ! in_array($next->value, [',', ')'], true)) - ) { - continue; - } - - $starToken->flags = Token::FLAG_OPERATOR_SQL; - } - - $this->list->idx = $iBak; - } - - /** - * Creates a new error log. - * - * @param string $msg the error message - * @param string $str the character that produced the error - * @param int $pos the position of the character - * @param int $code the code of the error - * - * @throws LexerException throws the exception, if strict mode is enabled. - */ - public function error($msg, $str = '', $pos = 0, $code = 0) - { - $error = new LexerException( - Translator::gettext($msg), - $str, - $pos, - $code - ); - parent::error($error); - } - - /** - * Parses a keyword. - * - * @return Token|null - */ - public function parseKeyword() - { - $token = ''; - - /** - * Value to be returned. - * - * @var Token - */ - $ret = null; - - /** - * The value of `$this->last` where `$token` ends in `$this->str`. - * - * @var int - */ - $iEnd = $this->last; - - /** - * Whether last parsed character is a whitespace. - * - * @var bool - */ - $lastSpace = false; - - for ($j = 1; $j < Context::KEYWORD_MAX_LENGTH && $this->last < $this->len; ++$j, ++$this->last) { - // Composed keywords shouldn't have more than one whitespace between - // keywords. - if (Context::isWhitespace($this->str[$this->last])) { - if ($lastSpace) { - --$j; // The size of the keyword didn't increase. - continue; - } - - $lastSpace = true; - } else { - $lastSpace = false; - } - - $token .= $this->str[$this->last]; - $flags = Context::isKeyword($token); - - if (($this->last + 1 !== $this->len && ! Context::isSeparator($this->str[$this->last + 1])) || ! $flags) { - continue; - } - - $ret = new Token($token, Token::TYPE_KEYWORD, $flags); - $iEnd = $this->last; - - // We don't break so we find longest keyword. - // For example, `OR` and `ORDER` have a common prefix `OR`. - // If we stopped at `OR`, the parsing would be invalid. - } - - $this->last = $iEnd; - - return $ret; - } - - /** - * Parses a label. - * - * @return Token|null - */ - public function parseLabel() - { - $token = ''; - - /** - * Value to be returned. - * - * @var Token - */ - $ret = null; - - /** - * The value of `$this->last` where `$token` ends in `$this->str`. - * - * @var int - */ - $iEnd = $this->last; - for ($j = 1; $j < Context::LABEL_MAX_LENGTH && $this->last < $this->len; ++$j, ++$this->last) { - if ($this->str[$this->last] === ':' && $j > 1) { - // End of label - $token .= $this->str[$this->last]; - $ret = new Token($token, Token::TYPE_LABEL); - $iEnd = $this->last; - break; - } - - if (Context::isWhitespace($this->str[$this->last]) && $j > 1) { - // Whitespace between label and : - // The size of the keyword didn't increase. - --$j; - } elseif (Context::isSeparator($this->str[$this->last])) { - // Any other separator - break; - } - - $token .= $this->str[$this->last]; - } - - $this->last = $iEnd; - - return $ret; - } - - /** - * Parses an operator. - * - * @return Token|null - */ - public function parseOperator() - { - $token = ''; - - /** - * Value to be returned. - * - * @var Token - */ - $ret = null; - - /** - * The value of `$this->last` where `$token` ends in `$this->str`. - * - * @var int - */ - $iEnd = $this->last; - - for ($j = 1; $j < Context::OPERATOR_MAX_LENGTH && $this->last < $this->len; ++$j, ++$this->last) { - $token .= $this->str[$this->last]; - $flags = Context::isOperator($token); - - if (! $flags) { - continue; - } - - $ret = new Token($token, Token::TYPE_OPERATOR, $flags); - $iEnd = $this->last; - } - - $this->last = $iEnd; - - return $ret; - } - - /** - * Parses a whitespace. - * - * @return Token|null - */ - public function parseWhitespace() - { - $token = $this->str[$this->last]; - - if (! Context::isWhitespace($token)) { - return null; - } - - while (++$this->last < $this->len && Context::isWhitespace($this->str[$this->last])) { - $token .= $this->str[$this->last]; - } - - --$this->last; - - return new Token($token, Token::TYPE_WHITESPACE); - } - - /** - * Parses a comment. - * - * @return Token|null - */ - public function parseComment() - { - $iBak = $this->last; - $token = $this->str[$this->last]; - - // Bash style comments. (#comment\n) - if (Context::isComment($token)) { - while (++$this->last < $this->len && $this->str[$this->last] !== "\n") { - $token .= $this->str[$this->last]; - } - - // Include trailing \n as whitespace token - if ($this->last < $this->len) { - --$this->last; - } - - return new Token($token, Token::TYPE_COMMENT, Token::FLAG_COMMENT_BASH); - } - - // C style comments. (/*comment*\/) - if (++$this->last < $this->len) { - $token .= $this->str[$this->last]; - if (Context::isComment($token)) { - // There might be a conflict with "*" operator here, when string is "*/*". - // This can occurs in the following statements: - // - "SELECT */* comment */ FROM ..." - // - "SELECT 2*/* comment */3 AS `six`;" - $next = $this->last + 1; - if (($next < $this->len) && $this->str[$next] === '*') { - // Conflict in "*/*": first "*" was not for ending a comment. - // Stop here and let other parsing method define the true behavior of that first star. - $this->last = $iBak; - - return null; - } - - $flags = Token::FLAG_COMMENT_C; - - // This comment already ended. It may be a part of a - // previous MySQL specific command. - if ($token === '*/') { - return new Token($token, Token::TYPE_COMMENT, $flags); - } - - // Checking if this is a MySQL-specific command. - if ($this->last + 1 < $this->len && $this->str[$this->last + 1] === '!') { - $flags |= Token::FLAG_COMMENT_MYSQL_CMD; - $token .= $this->str[++$this->last]; - - while ( - ++$this->last < $this->len - && $this->str[$this->last] >= '0' - && $this->str[$this->last] <= '9' - ) { - $token .= $this->str[$this->last]; - } - - --$this->last; - - // We split this comment and parse only its beginning - // here. - return new Token($token, Token::TYPE_COMMENT, $flags); - } - - // Parsing the comment. - while ( - ++$this->last < $this->len - && ( - $this->str[$this->last - 1] !== '*' - || $this->str[$this->last] !== '/' - ) - ) { - $token .= $this->str[$this->last]; - } - - // Adding the ending. - if ($this->last < $this->len) { - $token .= $this->str[$this->last]; - } - - return new Token($token, Token::TYPE_COMMENT, $flags); - } - } - - // SQL style comments. (-- comment\n) - if (++$this->last < $this->len) { - $token .= $this->str[$this->last]; - $end = false; - } else { - --$this->last; - $end = true; - } - - if (Context::isComment($token, $end)) { - // Checking if this comment did not end already (```--\n```). - if ($this->str[$this->last] !== "\n") { - while (++$this->last < $this->len && $this->str[$this->last] !== "\n") { - $token .= $this->str[$this->last]; - } - } - - // Include trailing \n as whitespace token - if ($this->last < $this->len) { - --$this->last; - } - - return new Token($token, Token::TYPE_COMMENT, Token::FLAG_COMMENT_SQL); - } - - $this->last = $iBak; - - return null; - } - - /** - * Parses a boolean. - * - * @return Token|null - */ - public function parseBool() - { - if ($this->last + 3 >= $this->len) { - // At least `min(strlen('TRUE'), strlen('FALSE'))` characters are - // required. - return null; - } - - $iBak = $this->last; - $token = $this->str[$this->last] . $this->str[++$this->last] - . $this->str[++$this->last] . $this->str[++$this->last]; // _TRUE_ or _FALS_e - - if (Context::isBool($token)) { - return new Token($token, Token::TYPE_BOOL); - } - - if (++$this->last < $this->len) { - $token .= $this->str[$this->last]; // fals_E_ - if (Context::isBool($token)) { - return new Token($token, Token::TYPE_BOOL, 1); - } - } - - $this->last = $iBak; - - return null; - } - - /** - * Parses a number. - * - * @return Token|null - */ - public function parseNumber() - { - // A rudimentary state machine is being used to parse numbers due to - // the various forms of their notation. - // - // Below are the states of the machines and the conditions to change - // the state. - // - // 1 --------------------[ + or - ]-------------------> 1 - // 1 -------------------[ 0x or 0X ]------------------> 2 - // 1 --------------------[ 0 to 9 ]-------------------> 3 - // 1 -----------------------[ . ]---------------------> 4 - // 1 -----------------------[ b ]---------------------> 7 - // - // 2 --------------------[ 0 to F ]-------------------> 2 - // - // 3 --------------------[ 0 to 9 ]-------------------> 3 - // 3 -----------------------[ . ]---------------------> 4 - // 3 --------------------[ e or E ]-------------------> 5 - // - // 4 --------------------[ 0 to 9 ]-------------------> 4 - // 4 --------------------[ e or E ]-------------------> 5 - // - // 5 ---------------[ + or - or 0 to 9 ]--------------> 6 - // - // 7 -----------------------[ ' ]---------------------> 8 - // - // 8 --------------------[ 0 or 1 ]-------------------> 8 - // 8 -----------------------[ ' ]---------------------> 9 - // - // State 1 may be reached by negative numbers. - // State 2 is reached only by hex numbers. - // State 4 is reached only by float numbers. - // State 5 is reached only by numbers in approximate form. - // State 7 is reached only by numbers in bit representation. - // - // Valid final states are: 2, 3, 4 and 6. Any parsing that finished in a - // state other than these is invalid. - // Also, negative states are invalid states. - $iBak = $this->last; - $token = ''; - $flags = 0; - $state = 1; - for (; $this->last < $this->len; ++$this->last) { - if ($state === 1) { - if ($this->str[$this->last] === '-') { - $flags |= Token::FLAG_NUMBER_NEGATIVE; - } elseif ( - $this->last + 1 < $this->len - && $this->str[$this->last] === '0' - && ( - $this->str[$this->last + 1] === 'x' - || $this->str[$this->last + 1] === 'X' - ) - ) { - $token .= $this->str[$this->last++]; - $state = 2; - } elseif ($this->str[$this->last] >= '0' && $this->str[$this->last] <= '9') { - $state = 3; - } elseif ($this->str[$this->last] === '.') { - $state = 4; - } elseif ($this->str[$this->last] === 'b') { - $state = 7; - } elseif ($this->str[$this->last] !== '+') { - // `+` is a valid character in a number. - break; - } - } elseif ($state === 2) { - $flags |= Token::FLAG_NUMBER_HEX; - if ( - ! ( - ($this->str[$this->last] >= '0' && $this->str[$this->last] <= '9') - || ($this->str[$this->last] >= 'A' && $this->str[$this->last] <= 'F') - || ($this->str[$this->last] >= 'a' && $this->str[$this->last] <= 'f') - ) - ) { - break; - } - } elseif ($state === 3) { - if ($this->str[$this->last] === '.') { - $state = 4; - } elseif ($this->str[$this->last] === 'e' || $this->str[$this->last] === 'E') { - $state = 5; - } elseif ( - ($this->str[$this->last] >= 'a' && $this->str[$this->last] <= 'z') - || ($this->str[$this->last] >= 'A' && $this->str[$this->last] <= 'Z') - ) { - // A number can't be directly followed by a letter - $state = -$state; - } elseif ($this->str[$this->last] < '0' || $this->str[$this->last] > '9') { - // Just digits and `.`, `e` and `E` are valid characters. - break; - } - } elseif ($state === 4) { - $flags |= Token::FLAG_NUMBER_FLOAT; - if ($this->str[$this->last] === 'e' || $this->str[$this->last] === 'E') { - $state = 5; - } elseif ( - ($this->str[$this->last] >= 'a' && $this->str[$this->last] <= 'z') - || ($this->str[$this->last] >= 'A' && $this->str[$this->last] <= 'Z') - ) { - // A number can't be directly followed by a letter - $state = -$state; - } elseif ($this->str[$this->last] < '0' || $this->str[$this->last] > '9') { - // Just digits, `e` and `E` are valid characters. - break; - } - } elseif ($state === 5) { - $flags |= Token::FLAG_NUMBER_APPROXIMATE; - if ( - $this->str[$this->last] === '+' || $this->str[$this->last] === '-' - || ($this->str[$this->last] >= '0' && $this->str[$this->last] <= '9') - ) { - $state = 6; - } elseif ( - ($this->str[$this->last] >= 'a' && $this->str[$this->last] <= 'z') - || ($this->str[$this->last] >= 'A' && $this->str[$this->last] <= 'Z') - ) { - // A number can't be directly followed by a letter - $state = -$state; - } else { - break; - } - } elseif ($state === 6) { - if ($this->str[$this->last] < '0' || $this->str[$this->last] > '9') { - // Just digits are valid characters. - break; - } - } elseif ($state === 7) { - $flags |= Token::FLAG_NUMBER_BINARY; - if ($this->str[$this->last] !== '\'') { - break; - } - - $state = 8; - } elseif ($state === 8) { - if ($this->str[$this->last] === '\'') { - $state = 9; - } elseif ($this->str[$this->last] !== '0' && $this->str[$this->last] !== '1') { - break; - } - } elseif ($state === 9) { - break; - } - - $token .= $this->str[$this->last]; - } - - if ($state === 2 || $state === 3 || ($token !== '.' && $state === 4) || $state === 6 || $state === 9) { - --$this->last; - - return new Token($token, Token::TYPE_NUMBER, $flags); - } - - $this->last = $iBak; - - return null; - } - - /** - * Parses a string. - * - * @param string $quote additional starting symbol - * - * @return Token|null - * - * @throws LexerException - */ - public function parseString($quote = '') - { - $token = $this->str[$this->last]; - $flags = Context::isString($token); - - if (! $flags && $token !== $quote) { - return null; - } - - $quote = $token; - - while (++$this->last < $this->len) { - if ( - $this->last + 1 < $this->len - && ( - ($this->str[$this->last] === $quote && $this->str[$this->last + 1] === $quote) - || ($this->str[$this->last] === '\\' && $quote !== '`') - ) - ) { - $token .= $this->str[$this->last] . $this->str[++$this->last]; - } else { - if ($this->str[$this->last] === $quote) { - break; - } - - $token .= $this->str[$this->last]; - } - } - - if ($this->last >= $this->len || $this->str[$this->last] !== $quote) { - $this->error( - sprintf( - Translator::gettext('Ending quote %1$s was expected.'), - $quote - ), - '', - $this->last - ); - } else { - $token .= $this->str[$this->last]; - } - - return new Token($token, Token::TYPE_STRING, $flags); - } - - /** - * Parses a symbol. - * - * @return Token|null - * - * @throws LexerException - */ - public function parseSymbol() - { - $token = $this->str[$this->last]; - $flags = Context::isSymbol($token); - - if (! $flags) { - return null; - } - - if ($flags & Token::FLAG_SYMBOL_VARIABLE) { - if ($this->last + 1 < $this->len && $this->str[++$this->last] === '@') { - // This is a system variable (e.g. `@@hostname`). - $token .= $this->str[$this->last++]; - $flags |= Token::FLAG_SYMBOL_SYSTEM; - } - } elseif ($flags & Token::FLAG_SYMBOL_PARAMETER) { - if ($token !== '?' && $this->last + 1 < $this->len) { - ++$this->last; - } - } else { - $token = ''; - } - - $str = null; - - if ($this->last < $this->len) { - $str = $this->parseString('`'); - - if ($str === null) { - $str = $this->parseUnknown(); - - if ($str === null) { - $this->error('Variable name was expected.', $this->str[$this->last], $this->last); - } - } - } - - if ($str !== null) { - $token .= $str->token; - } - - return new Token($token, Token::TYPE_SYMBOL, $flags); - } - - /** - * Parses unknown parts of the query. - * - * @return Token|null - */ - public function parseUnknown() - { - $token = $this->str[$this->last]; - if (Context::isSeparator($token)) { - return null; - } - - while (++$this->last < $this->len && ! Context::isSeparator($this->str[$this->last])) { - $token .= $this->str[$this->last]; - - // Test if end of token equals the current delimiter. If so, remove it from the token. - if (substr($token, -$this->delimiterLen) === $this->delimiter) { - $token = substr($token, 0, -$this->delimiterLen); - $this->last -= $this->delimiterLen - 1; - break; - } - } - - --$this->last; - - return new Token($token); - } - - /** - * Parses the delimiter of the query. - * - * @return Token|null - */ - public function parseDelimiter() - { - $idx = 0; - - while ($idx < $this->delimiterLen && $this->last + $idx < $this->len) { - if ($this->delimiter[$idx] !== $this->str[$this->last + $idx]) { - return null; - } - - ++$idx; - } - - $this->last += $this->delimiterLen - 1; - - return new Token($this->delimiter, Token::TYPE_DELIMITER); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/CallStatement.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/CallStatement.php deleted file mode 100644 index f7db88e..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/CallStatement.php +++ /dev/null @@ -1,43 +0,0 @@ -call->name . '(' - . ($this->call->parameters ? implode(',', $this->call->parameters->raw) : '') . ')'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/DeleteStatement.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/DeleteStatement.php deleted file mode 100644 index b718b3c..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/DeleteStatement.php +++ /dev/null @@ -1,377 +0,0 @@ - 1, - 'QUICK' => 2, - 'IGNORE' => 3, - ]; - - /** - * The clauses of this statement, in order. - * - * @see Statement::$CLAUSES - * - * @var array - */ - public static $CLAUSES = [ - 'DELETE' => [ - 'DELETE', - 2, - ], - // Used for options. - '_OPTIONS' => [ - '_OPTIONS', - 1, - ], - 'FROM' => [ - 'FROM', - 3, - ], - 'PARTITION' => [ - 'PARTITION', - 3, - ], - 'USING' => [ - 'USING', - 3, - ], - 'WHERE' => [ - 'WHERE', - 3, - ], - 'ORDER BY' => [ - 'ORDER BY', - 3, - ], - 'LIMIT' => [ - 'LIMIT', - 3, - ], - ]; - - /** - * Table(s) used as sources for this statement. - * - * @var Expression[] - */ - public $from; - - /** - * Joins. - * - * @var JoinKeyword[] - */ - public $join; - - /** - * Tables used as sources for this statement. - * - * @var Expression[] - */ - public $using; - - /** - * Columns used in this statement. - * - * @var Expression[] - */ - public $columns; - - /** - * Partitions used as source for this statement. - * - * @var ArrayObj - */ - public $partition; - - /** - * Conditions used for filtering each row of the result set. - * - * @var Condition[] - */ - public $where; - - /** - * Specifies the order of the rows in the result set. - * - * @var OrderKeyword[] - */ - public $order; - - /** - * Conditions used for limiting the size of the result set. - * - * @var Limit - */ - public $limit; - - /** - * @return string - */ - public function build() - { - $ret = 'DELETE ' . OptionsArray::build($this->options); - - if ($this->columns !== null && count($this->columns) > 0) { - $ret .= ' ' . ExpressionArray::build($this->columns); - } - - if ($this->from !== null && count($this->from) > 0) { - $ret .= ' FROM ' . ExpressionArray::build($this->from); - } - - if ($this->join !== null && count($this->join) > 0) { - $ret .= ' ' . JoinKeyword::build($this->join); - } - - if ($this->using !== null && count($this->using) > 0) { - $ret .= ' USING ' . ExpressionArray::build($this->using); - } - - if ($this->where !== null && count($this->where) > 0) { - $ret .= ' WHERE ' . Condition::build($this->where); - } - - if ($this->order !== null && count($this->order) > 0) { - $ret .= ' ORDER BY ' . ExpressionArray::build($this->order); - } - - if ($this->limit !== null && strlen((string) $this->limit) > 0) { - $ret .= ' LIMIT ' . Limit::build($this->limit); - } - - return $ret; - } - - /** - * @param Parser $parser the instance that requests parsing - * @param TokensList $list the list of tokens to be parsed - */ - public function parse(Parser $parser, TokensList $list) - { - ++$list->idx; // Skipping `DELETE`. - - // parse any options if provided - $this->options = OptionsArray::parse($parser, $list, static::$OPTIONS); - ++$list->idx; - - /** - * The state of the parser. - * - * Below are the states of the parser. - * - * 0 ---------------------------------[ FROM ]----------------------------------> 2 - * 0 ------------------------------[ table[.*] ]--------------------------------> 1 - * 1 ---------------------------------[ FROM ]----------------------------------> 2 - * 2 --------------------------------[ USING ]----------------------------------> 3 - * 2 --------------------------------[ WHERE ]----------------------------------> 4 - * 2 --------------------------------[ ORDER ]----------------------------------> 5 - * 2 --------------------------------[ LIMIT ]----------------------------------> 6 - * - * @var int - */ - $state = 0; - - /** - * If the query is multi-table or not. - * - * @var bool - */ - $multiTable = false; - - for (; $list->idx < $list->count; ++$list->idx) { - /** - * Token parsed at this moment. - * - * @var Token - */ - $token = $list->tokens[$list->idx]; - - // End of statement. - if ($token->type === Token::TYPE_DELIMITER) { - break; - } - - if ($state === 0) { - if ($token->type === Token::TYPE_KEYWORD) { - if ($token->keyword !== 'FROM') { - $parser->error('Unexpected keyword.', $token); - break; - } - - ++$list->idx; // Skip 'FROM' - $this->from = ExpressionArray::parse($parser, $list); - - $state = 2; - } else { - $this->columns = ExpressionArray::parse($parser, $list); - $state = 1; - } - } elseif ($state === 1) { - if ($token->type !== Token::TYPE_KEYWORD) { - $parser->error('Unexpected token.', $token); - break; - } - - if ($token->keyword !== 'FROM') { - $parser->error('Unexpected keyword.', $token); - break; - } - - ++$list->idx; // Skip 'FROM' - $this->from = ExpressionArray::parse($parser, $list); - - $state = 2; - } elseif ($state === 2) { - if ($token->type === Token::TYPE_KEYWORD) { - if (stripos($token->keyword, 'JOIN') !== false) { - ++$list->idx; - $this->join = JoinKeyword::parse($parser, $list); - - // remain in state = 2 - } else { - switch ($token->keyword) { - case 'USING': - ++$list->idx; // Skip 'USING' - $this->using = ExpressionArray::parse($parser, $list); - $state = 3; - - $multiTable = true; - break; - case 'WHERE': - ++$list->idx; // Skip 'WHERE' - $this->where = Condition::parse($parser, $list); - $state = 4; - break; - case 'ORDER BY': - ++$list->idx; // Skip 'ORDER BY' - $this->order = OrderKeyword::parse($parser, $list); - $state = 5; - break; - case 'LIMIT': - ++$list->idx; // Skip 'LIMIT' - $this->limit = Limit::parse($parser, $list); - $state = 6; - break; - default: - $parser->error('Unexpected keyword.', $token); - break 2; - } - } - } - } elseif ($state === 3) { - if ($token->type !== Token::TYPE_KEYWORD) { - $parser->error('Unexpected token.', $token); - break; - } - - if ($token->keyword !== 'WHERE') { - $parser->error('Unexpected keyword.', $token); - break; - } - - ++$list->idx; // Skip 'WHERE' - $this->where = Condition::parse($parser, $list); - $state = 4; - } elseif ($state === 4) { - if ($multiTable === true && $token->type === Token::TYPE_KEYWORD) { - $parser->error('This type of clause is not valid in Multi-table queries.', $token); - break; - } - - if ($token->type === Token::TYPE_KEYWORD) { - switch ($token->keyword) { - case 'ORDER BY': - ++$list->idx; // Skip 'ORDER BY' - $this->order = OrderKeyword::parse($parser, $list); - $state = 5; - break; - case 'LIMIT': - ++$list->idx; // Skip 'LIMIT' - $this->limit = Limit::parse($parser, $list); - $state = 6; - break; - default: - $parser->error('Unexpected keyword.', $token); - break 2; - } - } - } elseif ($state === 5) { - if ($token->type === Token::TYPE_KEYWORD) { - if ($token->keyword !== 'LIMIT') { - $parser->error('Unexpected keyword.', $token); - break; - } - - ++$list->idx; // Skip 'LIMIT' - $this->limit = Limit::parse($parser, $list); - $state = 6; - } - } - } - - if ($state >= 2) { - foreach ($this->from as $fromExpr) { - $fromExpr->database = $fromExpr->table; - $fromExpr->table = $fromExpr->column; - $fromExpr->column = null; - } - } - - --$list->idx; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ExplainStatement.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ExplainStatement.php deleted file mode 100644 index 5c4ea17..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ExplainStatement.php +++ /dev/null @@ -1,15 +0,0 @@ - 1, - 'CONCURRENT' => 1, - 'LOCAL' => 2, - ]; - - /** - * FIELDS/COLUMNS Options for `LOAD DATA...INFILE` statements. - * - * @var array - */ - public static $FIELDS_OPTIONS = [ - 'TERMINATED BY' => [ - 1, - 'expr', - ], - 'OPTIONALLY' => 2, - 'ENCLOSED BY' => [ - 3, - 'expr', - ], - 'ESCAPED BY' => [ - 4, - 'expr', - ], - ]; - - /** - * LINES Options for `LOAD DATA...INFILE` statements. - * - * @var array - */ - public static $LINES_OPTIONS = [ - 'STARTING BY' => [ - 1, - 'expr', - ], - 'TERMINATED BY' => [ - 2, - 'expr', - ], - ]; - - /** - * File name being used to load data. - * - * @var Expression - */ - public $file_name; - - /** - * Table used as destination for this statement. - * - * @var Expression - */ - public $table; - - /** - * Partitions used as source for this statement. - * - * @var ArrayObj - */ - public $partition; - - /** - * Character set used in this statement. - * - * @var Expression - */ - public $charset_name; - - /** - * Options for FIELDS/COLUMNS keyword. - * - * @see static::$FIELDS_OPTIONS - * - * @var OptionsArray - */ - public $fields_options; - - /** - * Whether to use `FIELDS` or `COLUMNS` while building. - * - * @var string - */ - public $fields_keyword; - - /** - * Options for OPTIONS keyword. - * - * @see static::$LINES_OPTIONS - * - * @var OptionsArray - */ - public $lines_options; - - /** - * Column names or user variables. - * - * @var Expression[] - */ - public $col_name_or_user_var; - - /** - * SET clause's updated values(optional). - * - * @var SetOperation[] - */ - public $set; - - /** - * Ignore 'number' LINES/ROWS. - * - * @var Expression - */ - public $ignore_number; - - /** - * REPLACE/IGNORE Keyword. - * - * @var string - */ - public $replace_ignore; - - /** - * LINES/ROWS Keyword. - * - * @var string - */ - public $lines_rows; - - /** - * @return string - */ - public function build() - { - $ret = 'LOAD DATA ' . $this->options - . ' INFILE ' . $this->file_name; - - if ($this->replace_ignore !== null) { - $ret .= ' ' . trim($this->replace_ignore); - } - - $ret .= ' INTO TABLE ' . $this->table; - - if ($this->partition !== null && strlen((string) $this->partition) > 0) { - $ret .= ' PARTITION ' . ArrayObj::build($this->partition); - } - - if ($this->charset_name !== null) { - $ret .= ' CHARACTER SET ' . $this->charset_name; - } - - if ($this->fields_keyword !== null) { - $ret .= ' ' . $this->fields_keyword . ' ' . $this->fields_options; - } - - if ($this->lines_options !== null && strlen((string) $this->lines_options) > 0) { - $ret .= ' LINES ' . $this->lines_options; - } - - if ($this->ignore_number !== null) { - $ret .= ' IGNORE ' . $this->ignore_number . ' ' . $this->lines_rows; - } - - if ($this->col_name_or_user_var !== null && count($this->col_name_or_user_var) > 0) { - $ret .= ' ' . ExpressionArray::build($this->col_name_or_user_var); - } - - if ($this->set !== null && count($this->set) > 0) { - $ret .= ' SET ' . SetOperation::build($this->set); - } - - return $ret; - } - - /** - * @param Parser $parser the instance that requests parsing - * @param TokensList $list the list of tokens to be parsed - */ - public function parse(Parser $parser, TokensList $list) - { - ++$list->idx; // Skipping `LOAD DATA`. - - // parse any options if provided - $this->options = OptionsArray::parse($parser, $list, static::$OPTIONS); - ++$list->idx; - - /** - * The state of the parser. - * - * @var int - */ - $state = 0; - - for (; $list->idx < $list->count; ++$list->idx) { - /** - * Token parsed at this moment. - * - * @var Token - */ - $token = $list->tokens[$list->idx]; - - // End of statement. - if ($token->type === Token::TYPE_DELIMITER) { - break; - } - - // Skipping whitespaces and comments. - if (($token->type === Token::TYPE_WHITESPACE) || ($token->type === Token::TYPE_COMMENT)) { - continue; - } - - if ($state === 0) { - if ($token->type === Token::TYPE_KEYWORD && $token->keyword !== 'INFILE') { - $parser->error('Unexpected keyword.', $token); - break; - } - - if ($token->type !== Token::TYPE_KEYWORD) { - $parser->error('Unexpected token.', $token); - break; - } - - ++$list->idx; - $this->file_name = Expression::parse( - $parser, - $list, - ['parseField' => 'file'] - ); - $state = 1; - } elseif ($state === 1) { - if ($token->type === Token::TYPE_KEYWORD) { - if ($token->keyword === 'REPLACE' || $token->keyword === 'IGNORE') { - $this->replace_ignore = trim($token->keyword); - } elseif ($token->keyword === 'INTO') { - $state = 2; - } - } - } elseif ($state === 2) { - if ($token->type !== Token::TYPE_KEYWORD || $token->keyword !== 'TABLE') { - $parser->error('Unexpected token.', $token); - break; - } - - ++$list->idx; - $this->table = Expression::parse($parser, $list, ['parseField' => 'table']); - $state = 3; - } elseif ($state >= 3 && $state <= 7) { - if ($token->type === Token::TYPE_KEYWORD) { - $newState = $this->parseKeywordsAccordingToState($parser, $list, $state); - if ($newState === $state) { - // Avoid infinite loop - break; - } - } elseif ($token->type === Token::TYPE_OPERATOR && $token->token === '(') { - $this->col_name_or_user_var - = ExpressionArray::parse($parser, $list); - $state = 7; - } else { - $parser->error('Unexpected token.', $token); - break; - } - } - } - - --$list->idx; - } - - /** - * @param Parser $parser The parser - * @param TokensList $list A token list - * @param string $keyword The keyword - */ - public function parseFileOptions(Parser $parser, TokensList $list, $keyword = 'FIELDS'): void - { - ++$list->idx; - - if ($keyword === 'FIELDS' || $keyword === 'COLUMNS') { - // parse field options - $this->fields_options = OptionsArray::parse($parser, $list, static::$FIELDS_OPTIONS); - - $this->fields_keyword = $keyword; - } else { - // parse line options - $this->lines_options = OptionsArray::parse($parser, $list, static::$LINES_OPTIONS); - } - } - - /** - * @param Parser $parser - * @param TokensList $list - * @param int $state - * - * @return int - */ - public function parseKeywordsAccordingToState($parser, $list, $state) - { - $token = $list->tokens[$list->idx]; - - switch ($state) { - case 3: - if ($token->keyword === 'PARTITION') { - ++$list->idx; - $this->partition = ArrayObj::parse($parser, $list); - - return 4; - } - - // no break - case 4: - if ($token->keyword === 'CHARACTER SET') { - ++$list->idx; - $this->charset_name = Expression::parse($parser, $list); - - return 5; - } - - // no break - case 5: - if ($token->keyword === 'FIELDS' || $token->keyword === 'COLUMNS' || $token->keyword === 'LINES') { - $this->parseFileOptions($parser, $list, $token->value); - - return 6; - } - - // no break - case 6: - if ($token->keyword === 'IGNORE') { - ++$list->idx; - - $this->ignore_number = Expression::parse($parser, $list); - $nextToken = $list->getNextOfType(Token::TYPE_KEYWORD); - - if ( - $nextToken->type === Token::TYPE_KEYWORD - && (($nextToken->keyword === 'LINES') - || ($nextToken->keyword === 'ROWS')) - ) { - $this->lines_rows = $nextToken->token; - } - - return 7; - } - - // no break - case 7: - if ($token->keyword === 'SET') { - ++$list->idx; - $this->set = SetOperation::parse($parser, $list); - - return 8; - } - - // no break - default: - } - - return $state; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ShowStatement.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ShowStatement.php deleted file mode 100644 index 15ce499..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Statements/ShowStatement.php +++ /dev/null @@ -1,63 +0,0 @@ - 1, - 'AUTHORS' => 2, - 'BINARY' => 2, - 'BINLOG' => 2, - 'CHARACTER' => 2, - 'CODE' => 2, - 'COLLATION' => 2, - 'COLUMNS' => 2, - 'CONTRIBUTORS' => 2, - 'DATABASE' => 2, - 'DATABASES' => 2, - 'ENGINE' => 2, - 'ENGINES' => 2, - 'ERRORS' => 2, - 'EVENT' => 2, - 'EVENTS' => 2, - 'FUNCTION' => 2, - 'GRANTS' => 2, - 'HOSTS' => 2, - 'INDEX' => 2, - 'INNODB' => 2, - 'LOGS' => 2, - 'MASTER' => 2, - 'OPEN' => 2, - 'PLUGINS' => 2, - 'PRIVILEGES' => 2, - 'PROCEDURE' => 2, - 'PROCESSLIST' => 2, - 'PROFILE' => 2, - 'PROFILES' => 2, - 'SCHEDULER' => 2, - 'SET' => 2, - 'SLAVE' => 2, - 'STATUS' => 2, - 'TABLE' => 2, - 'TABLES' => 2, - 'TRIGGER' => 2, - 'TRIGGERS' => 2, - 'VARIABLES' => 2, - 'VIEW' => 2, - 'WARNINGS' => 2, - ]; -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/CLI.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/CLI.php deleted file mode 100644 index 7446563..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/CLI.php +++ /dev/null @@ -1,319 +0,0 @@ -getopt('hq:f:a', $longopts); - if ($params === false) { - return false; - } - - $this->mergeLongOpts($params, $longopts); - if (! isset($params['f'])) { - $params['f'] = 'cli'; - } - - if (! in_array($params['f'], ['html', 'cli', 'text'])) { - echo "ERROR: Invalid value for format!\n"; - - return false; - } - - return $params; - } - - /** - * @return int - */ - public function runHighlight() - { - $params = $this->parseHighlight(); - if ($params === false) { - return 1; - } - - if (isset($params['h'])) { - $this->usageHighlight(); - - return 0; - } - - if (! isset($params['q'])) { - $stdIn = $this->readStdin(); - - if ($stdIn) { - $params['q'] = $stdIn; - } - } - - if (isset($params['a'])) { - Context::setMode('ANSI_QUOTES'); - } - - if (isset($params['q'])) { - echo Formatter::format( - $params['q'], - ['type' => $params['f']] - ); - echo "\n"; - - return 0; - } - - echo "ERROR: Missing parameters!\n"; - $this->usageHighlight(); - - return 1; - } - - /** - * @return void - */ - public function usageLint() - { - echo "Usage: lint-query --query SQL [--ansi]\n"; - echo " cat file.sql | lint-query\n"; - } - - /** - * @return mixed - */ - public function parseLint() - { - $longopts = [ - 'help', - 'query:', - 'context:', - 'ansi', - ]; - $params = $this->getopt('hq:c:a', $longopts); - $this->mergeLongOpts($params, $longopts); - - return $params; - } - - /** - * @return int - */ - public function runLint() - { - $params = $this->parseLint(); - if ($params === false) { - return 1; - } - - if (isset($params['h'])) { - $this->usageLint(); - - return 0; - } - - if (isset($params['c'])) { - Context::load($params['c']); - } - - if (! isset($params['q'])) { - $stdIn = $this->readStdin(); - - if ($stdIn) { - $params['q'] = $stdIn; - } - } - - if (isset($params['a'])) { - Context::setMode('ANSI_QUOTES'); - } - - if (isset($params['q'])) { - $lexer = new Lexer($params['q'], false); - $parser = new Parser($lexer->list); - $errors = Error::get([$lexer, $parser]); - if (count($errors) === 0) { - return 0; - } - - $output = Error::format($errors); - echo implode("\n", $output); - echo "\n"; - - return 10; - } - - echo "ERROR: Missing parameters!\n"; - $this->usageLint(); - - return 1; - } - - /** - * @return void - */ - public function usageTokenize() - { - echo "Usage: tokenize-query --query SQL [--ansi]\n"; - echo " cat file.sql | tokenize-query\n"; - } - - /** - * @return mixed - */ - public function parseTokenize() - { - $longopts = [ - 'help', - 'query:', - 'ansi', - ]; - $params = $this->getopt('hq:a', $longopts); - $this->mergeLongOpts($params, $longopts); - - return $params; - } - - /** - * @return int - */ - public function runTokenize() - { - $params = $this->parseTokenize(); - if ($params === false) { - return 1; - } - - if (isset($params['h'])) { - $this->usageTokenize(); - - return 0; - } - - if (! isset($params['q'])) { - $stdIn = $this->readStdin(); - - if ($stdIn) { - $params['q'] = $stdIn; - } - } - - if (isset($params['a'])) { - Context::setMode('ANSI_QUOTES'); - } - - if (isset($params['q'])) { - $lexer = new Lexer($params['q'], false); - foreach ($lexer->list->tokens as $idx => $token) { - echo '[TOKEN ', $idx, "]\n"; - echo 'Type = ', $token->type, "\n"; - echo 'Flags = ', $token->flags, "\n"; - echo 'Value = '; - var_export($token->value); - echo "\n"; - echo 'Token = '; - var_export($token->token); - echo "\n"; - echo "\n"; - } - - return 0; - } - - echo "ERROR: Missing parameters!\n"; - $this->usageTokenize(); - - return 1; - } - - /** - * @return string|false - */ - public function readStdin() - { - $read = [STDIN]; - $write = []; - $except = []; - - // Assume there's nothing to be read from STDIN. - $stdin = null; - - // Try to read from STDIN. Wait 0.2 second before timing out. - $result = stream_select($read, $write, $except, 0, 2000); - - if ($result > 0) { - $stdin = stream_get_contents(STDIN); - } - - return $stdin; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/Routine.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/Routine.php deleted file mode 100644 index 2d08c36..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/sql-parser/src/Utils/Routine.php +++ /dev/null @@ -1,144 +0,0 @@ -list); - - if ($type === null) { - return [ - '', - '', - '', - '', - '', - ]; - } - - $options = []; - foreach ($type->options->options as $opt) { - $options[] = is_string($opt) ? $opt : $opt['value']; - } - - return [ - '', - '', - $type->name, - implode(',', $type->parameters), - implode(' ', $options), - ]; - } - - /** - * Parses a parameter of a routine. - * - * @param string $param parameter's definition - * - * @return array - */ - public static function getParameter($param) - { - $lexer = new Lexer('(' . $param . ')'); - - // A dummy parser is used for error reporting. - $param = ParameterDefinition::parse(new Parser(), $lexer->list); - - if (empty($param[0])) { - return [ - '', - '', - '', - '', - '', - ]; - } - - $param = $param[0]; - - $options = []; - foreach ($param->type->options->options as $opt) { - $options[] = is_string($opt) ? $opt : $opt['value']; - } - - return [ - empty($param->inOut) ? '' : $param->inOut, - $param->name, - $param->type->name, - implode(',', $param->type->parameters), - implode(' ', $options), - ]; - } - - /** - * Gets the parameters of a routine from the parse tree. - * - * @param CreateStatement $statement the statement to be processed - * - * @return array - */ - public static function getParameters($statement) - { - $retval = [ - 'num' => 0, - 'dir' => [], - 'name' => [], - 'type' => [], - 'length' => [], - 'length_arr' => [], - 'opts' => [], - ]; - - if (! empty($statement->parameters)) { - $idx = 0; - foreach ($statement->parameters as $param) { - $retval['dir'][$idx] = $param->inOut; - $retval['name'][$idx] = $param->name; - $retval['type'][$idx] = $param->type->name; - $retval['length'][$idx] = implode(',', $param->type->parameters); - $retval['length_arr'][$idx] = $param->type->parameters; - $retval['opts'][$idx] = []; - foreach ($param->type->options->options as $opt) { - $retval['opts'][$idx][] = is_string($opt) ? - $opt : $opt['value']; - } - - $retval['opts'][$idx] = implode(' ', $retval['opts'][$idx]); - ++$idx; - } - - $retval['num'] = $idx; - } - - return $retval; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/CHANGELOG.md deleted file mode 100644 index aadbdac..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/CHANGELOG.md +++ /dev/null @@ -1,33 +0,0 @@ -# Change Log - -## [Unreleased] - - -## [4.0.1] - 2021-06-10 - -* Fix TransNode constructor optional parameters - -## [4.0.0] - 2021-02-25 - -* Add support for domain translation (#4) -* TransNode constructor signature changed, new $domain parameter `?Node $notes, ?Node $domain = null, int $lineno` (#4) -* TransNode constructor signature changed, new $context parameter `?AbstractExpression $count, ?Node $context = null, ?Node $notes` (#6) -* Add support for contexts in translations (#6) -* Add support for enabling `phpmyadmin/motranslator` or complex non php-gettext supported functions (#6) -* Add support for custom notes labels (#6) -* Make debug info disabled by default, `TransNode::$enableAddDebugInfo = true;` will add it back -* Some slight performance improvements -* Added tests for all the code - -## [3.0.0] - 2020-06-14 - -* Add a .gitattributes file -* Support Twig 3 -* Remove extra field from composer.json -* Add support field in composer.json -* Require php >= 7.1 -* Setup and apply phpmyadmin/coding-standard -* Apply changes for php 8.0 compatibility (https://github.com/twigphp/Twig/issues/3327) - -## [2.0.0] - 2020-01-14 - -* First release of this library. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/LICENSE b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/LICENSE deleted file mode 100644 index 5fec1a8..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2010-2019 Fabien Potencier -Copyright (c) 2019-2021 phpMyAdmin contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/composer.json deleted file mode 100644 index 2619ae0..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/composer.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "phpmyadmin/twig-i18n-extension", - "description": "Internationalization support for Twig via the gettext library", - "keywords": ["i18n","gettext"], - "type": "library", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "The phpMyAdmin Team", - "email": "developers@phpmyadmin.net", - "homepage": "https://www.phpmyadmin.net/team/" - } - ], - "support": { - "issues": "https://github.com/phpmyadmin/twig-i18n-extension/issues", - "source": "https://github.com/phpmyadmin/twig-i18n-extension" - }, - "require": { - "php": "^7.1 || ^8.0", - "twig/twig": "^1.42.3|^2.0|^3.0" - }, - "require-dev": { - "phpmyadmin/coding-standard": "^3.0.0", - "phpmyadmin/motranslator": "^5.2", - "phpstan/phpstan": "^0.12.66", - "phpunit/phpunit": "^7 || ^8 || ^9" - }, - "scripts": { - "phpstan": "./vendor/bin/phpstan analyse", - "phpunit": "phpunit", - "phpcs": "phpcs", - "phpcbf": "phpcbf" - }, - "autoload": { - "psr-4": { "PhpMyAdmin\\Twig\\Extensions\\": "src/" } - }, - "autoload-dev": { - "psr-4": { "PhpMyAdmin\\Tests\\Twig\\Extensions\\": "test/" } - }, - "config":{ - "sort-packages": true - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/src/Node/TransNode.php b/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/src/Node/TransNode.php deleted file mode 100644 index 9acaaec..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/phpmyadmin/twig-i18n-extension/src/Node/TransNode.php +++ /dev/null @@ -1,315 +0,0 @@ - - */ -class TransNode extends Node -{ - /** - * The label for gettext notes to be exported - * - * @var string - */ - public static $notesLabel = '// notes: '; - - /** - * Enable MoTranslator functions - * - * @var bool - */ - public static $enableMoTranslator = false; - - /** - * Enable calls to addDebugInfo - * - * @var bool - */ - public static $enableAddDebugInfo = false; - - /** - * Enables context functions usage - * - * @var bool - */ - public static $hasContextFunctions = false; - - public function __construct( - Node $body, - ?Node $plural, - ?AbstractExpression $count, - ?Node $context = null, - ?Node $notes = null, - ?Node $domain = null, - int $lineno = 0, - ?string $tag = null - ) { - $nodes = ['body' => $body]; - if ($count !== null) { - $nodes['count'] = $count; - } - - if ($plural !== null) { - $nodes['plural'] = $plural; - } - - if ($notes !== null) { - $nodes['notes'] = $notes; - } - - if ($domain !== null) { - $nodes['domain'] = $domain; - } - - if ($context !== null) { - $nodes['context'] = $context; - } - - parent::__construct($nodes, [], $lineno, $tag); - } - - /** - * {@inheritdoc} - */ - public function compile(Compiler $compiler) - { - if (self::$enableAddDebugInfo) { - $compiler->addDebugInfo($this); - } - - [$msg, $vars] = $this->compileString($this->getNode('body')); - - $hasPlural = $this->hasNode('plural'); - - if ($hasPlural) { - [$msg1, $vars1] = $this->compileString($this->getNode('plural')); - - $vars = array_merge($vars, $vars1); - } - - $hasDomain = $this->hasNode('domain'); - $hasContext = $this->hasNode('context'); - - $function = $this->getTransFunction($hasPlural, $hasContext, $hasDomain); - - if ($this->hasNode('notes')) { - $message = trim($this->getNode('notes')->getAttribute('data')); - - // line breaks are not allowed cause we want a single line comment - $message = str_replace(["\n", "\r"], ' ', $message); - $compiler->raw(static::$notesLabel . $message . "\n"); - } - - if ($vars) { - $compiler - ->raw('echo strtr(' . $function . '('); - - if ($hasDomain) { - [$domain] = $this->compileString($this->getNode('domain')); - $compiler - ->subcompile($domain) - ->raw(', '); - } - - if ($hasContext && (static::$hasContextFunctions || static::$enableMoTranslator)) { - [$context] = $this->compileString($this->getNode('context')); - $compiler - ->subcompile($context) - ->raw(', '); - } - - $compiler - ->subcompile($msg); - - if ($hasPlural) { - $compiler - ->raw(', ') - ->subcompile($msg1) - ->raw(', abs(') - ->subcompile($this->getNode('count')) - ->raw(')'); - } - - $compiler->raw('), array('); - - foreach ($vars as $var) { - $attributeName = $var->getAttribute('name'); - if ($attributeName === 'count') { - $compiler - ->string('%count%') - ->raw(' => abs(') - ->subcompile($this->getNode('count')) - ->raw('), '); - } else { - $compiler - ->string('%' . $attributeName . '%') - ->raw(' => ') - ->subcompile($var) - ->raw(', '); - } - } - - $compiler->raw("));\n"); - } else { - $compiler - ->raw('echo ' . $function . '('); - - if ($hasDomain) { - [$domain] = $this->compileString($this->getNode('domain')); - $compiler - ->subcompile($domain) - ->raw(', '); - } - - if ($hasContext) { - if (static::$hasContextFunctions || static::$enableMoTranslator) { - [$context] = $this->compileString($this->getNode('context')); - $compiler - ->subcompile($context) - ->raw(', '); - } - } - - $compiler - ->subcompile($msg); - - if ($hasPlural) { - $compiler - ->raw(', ') - ->subcompile($msg1) - ->raw(', abs(') - ->subcompile($this->getNode('count')) - ->raw(')'); - } - - $compiler->raw(");\n"); - } - } - - /** - * Keep this method protected instead of private some implementations may use it - */ - protected function compileString(Node $body): array - { - if ( - $body instanceof NameExpression - || $body instanceof ConstantExpression - || $body instanceof TempNameExpression - ) { - return [$body, []]; - } - - $vars = []; - if (count($body)) { - $msg = ''; - - foreach ($body as $node) { - if ($node instanceof PrintNode) { - $n = $node->getNode('expr'); - while ($n instanceof FilterExpression) { - $n = $n->getNode('node'); - } - - while ($n instanceof CheckToStringNode) { - $n = $n->getNode('expr'); - } - - $attributeName = $n->getAttribute('name'); - $msg .= sprintf('%%%s%%', $attributeName); - $vars[] = new NameExpression($attributeName, $n->getTemplateLine()); - } else { - $msg .= $node->getAttribute('data'); - } - } - } else { - $msg = $body->getAttribute('data'); - } - - return [new Node([new ConstantExpression(trim($msg), $body->getTemplateLine())]), $vars]; - } - - /** - * Keep this protected to allow people to override it with their own logic - */ - protected function getTransFunction(bool $hasPlural, bool $hasContext, bool $hasDomain): string - { - $functionPrefix = ''; - - if (static::$enableMoTranslator) { - // The functions are prefixed with an underscore - $functionPrefix = '_'; - } - - // If it has not context function support or not MoTranslator - if (! static::$hasContextFunctions && ! static::$enableMoTranslator) { - // Not found on native PHP: dnpgettext, npgettext, dpgettext, pgettext - // No domain plural context support - // No domain context support - // No context support - // No plural context support - - if ($hasDomain) { - // dngettext($domain, $msgid, $msgidPlural, $number); - // dgettext($domain, $msgid); - return $functionPrefix . ($hasPlural ? 'dngettext' : 'dgettext'); - } - - // ngettext($msgid, $msgidPlural, $number); - // gettext($msgid); - return $functionPrefix . ($hasPlural ? 'ngettext' : 'gettext'); - } - - if ($hasDomain) { - if ($hasPlural) { - // dnpgettext($domain, $msgctxt, $msgid, $msgidPlural, $number); - // dngettext($domain, $msgid, $msgidPlural, $number); - return $functionPrefix . ($hasContext ? 'dnpgettext' : 'dngettext'); - } - - // dpgettext($domain, $msgctxt, $msgid); - // dgettext($domain, $msgid); - return $functionPrefix . ($hasContext ? 'dpgettext' : 'dgettext'); - } - - if ($hasPlural) { - // npgettext($msgctxt, $msgid, $msgidPlural, $number); - // ngettext($msgid, $msgidPlural, $number); - return $functionPrefix . ($hasContext ? 'npgettext' : 'ngettext'); - } - - // pgettext($msgctxt, $msgid); - // gettext($msgid); - return $functionPrefix . ($hasContext ? 'pgettext' : 'gettext'); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/LICENSE.md b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/LICENSE.md deleted file mode 100644 index 7300640..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/LICENSE.md +++ /dev/null @@ -1,7 +0,0 @@ -Copyright 2014-2018 Phil, Antonio Carlos Ribeiro and All Contributors - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/README.md b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/README.md deleted file mode 100644 index 4a5b9ad..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/README.md +++ /dev/null @@ -1,149 +0,0 @@ -# Google2FA QRCode - -

            - Latest Stable Version - License - Code Quality - Build -

            -

            - Downloads - Coverage - StyleCI - PHP -

            - -### QRCode For Google2FA - -This is package is [Goole2FA](https://github.com/antonioribeiro/google2fa) integrated with a QRCode generator, providing an easy way to plot QRCode for your two factor authentication. For documentation related to Google2FA, please check the [documentation of the main package](https://github.com/antonioribeiro/google2fa). - -## Requirements - -- PHP 5.4+ - -## Installing - -Use Composer to install it: - -``` -composer require pragmarx/google2fa-qrcode -``` - -## Using It - -### Instantiate it directly - -```php -use PragmaRX\Google2FAQRCode\Google2FA; - -$google2fa = new Google2FA(); - -return $google2fa->generateSecretKey(); -``` - -## Generating QRCodes - -The securer way of creating QRCode is to do it yourself or using a library. First you have to install the BaconQrCode package, as stated above, then you just have to generate the inline string using: - -```php -$inlineUrl = $google2fa->getQRCodeInline( - $companyName, - $companyEmail, - $secretKey -); -``` - -And use it in your blade template this way: - -```html - -``` - -```php -$secretKey = $google2fa->generateSecretKey(16, $userId); -``` - -## Show the QR Code to your user, via Google Apis - -It's insecure to use it via Google Apis, so you have to enable it before using it. - -```php -$google2fa->setAllowInsecureCallToGoogleApis(true); - -$google2fa_url = $google2fa->getQRCodeGoogleUrl( - 'YourCompany', - $user->email, - $user->google2fa_secret -); - -/// and in your view: - - -``` - -And they should see and scan the QR code to their applications: - -![QRCode](https://chart.googleapis.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth%3A%2F%2Ftotp%2FPragmaRX%3Aacr%2Bpragmarx%40antoniocarlosribeiro.com%3Fsecret%3DADUMJO5634NPDEKW%26issuer%3DPragmaRX) - -And to verify, you just have to: - -```php -$secret = $request->input('secret'); - -$valid = $google2fa->verifyKey($user->google2fa_secret, $secret); -``` - -## Replacing the QRCode rendering service - -If you want to use a different service, you just have to - -```php -$google2fa->setQrcodeService(new YourService()) - ->getQRCodeInline( - $companyName, - $companyEmail, - $secretKey - ); -``` - -## Built-in QRCode rendering services - -Beginning on version 2.0 the rendering service is optional, so you have to manually install one of those packages in order to generate QRCodes: - -- [BaconQrCode](https://github.com/Bacon/BaconQrCode): renders PNG by default, but requires the Imagick PHP extension. You can configure it to use different backends, but you'll have to instantiate it yourself. -- [chillerlan/php-qrcode](https://github.com/chillerlan/php-qrcode): renders SVG by default and don't require the Imagick PHP extension, but can also generate other formats, which may require Imagick. - -## Using a diffent image backend - -```php -$google2fa->setQrcodeService( - new \PragmaRX\Google2FAQRCode\QRCode\Bacon( - new \BaconQrCode\Renderer\Image\SvgImageBackEnd() - ) -); - -// or - -$google2fa = new Google2FA( - new Bacon( - new \BaconQrCode\Renderer\Image\SvgImageBackEnd() - ) -); -``` - -## Tests - -The package tests were written with [PHPUnit](https://phpunit.de/). - -## Authors - -- [Antonio Carlos Ribeiro](http://twitter.com/iantonioribeiro) -- [All Contributors](https://github.com/antonioribeiro/google2fa/graphs/contributors) - -## License - -Google2FAQRCode is licensed under the MIT License - see the [LICENSE](LICENSE.md) file for details. - -## Contributing - -Pull requests and issues are more than welcome. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/src/QRCode/Bacon.php b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/src/QRCode/Bacon.php deleted file mode 100644 index 3afce12..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa-qrcode/src/QRCode/Bacon.php +++ /dev/null @@ -1,97 +0,0 @@ -imageBackEnd = $imageBackEnd; - } - - /** - * Generates a QR code data url to display inline. - * - * @param string $string - * @param int $size - * @param string $encoding Default to UTF-8 - * - * @return string - */ - public function getQRCodeInline($string, $size = 200, $encoding = 'utf-8') - { - $renderer = new ImageRenderer( - (new RendererStyle($size))->withSize($size), - $this->getImageBackEnd() - ); - - $bacon = new Writer($renderer); - - $data = $bacon->writeString($string, $encoding); - - if ($this->getImageBackEnd() instanceof ImagickImageBackEnd) { - return 'data:image/png;base64,' . base64_encode($data); - } - - return $data; - } - - /** - * Check if Imagick is available - * - * @return int - */ - public function imagickIsAvailable() - { - return extension_loaded('imagick'); - } - - /** - * Get image backend - * - * @return ImageRenderer - */ - public function getImageBackend() - { - if (empty($this->imageBackEnd)) { - $this->imageBackEnd = !$this->imagickIsAvailable() - ? new SvgImageBackEnd() - : new ImagickImageBackEnd(); - } - - $this->setImageBackEnd($this->imageBackEnd); - - return $this->imageBackEnd; - } - - /** - * Set image backend - * - * @param $imageBackEnd - * @return $this - */ - public function setImageBackend($imageBackEnd) - { - $this->imageBackEnd = $imageBackEnd; - - return $this; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa/src/Exceptions/IncompatibleWithGoogleAuthenticatorException.php b/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa/src/Exceptions/IncompatibleWithGoogleAuthenticatorException.php deleted file mode 100644 index 778a57f..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/pragmarx/google2fa/src/Exceptions/IncompatibleWithGoogleAuthenticatorException.php +++ /dev/null @@ -1,11 +0,0 @@ -getAlgorithm())). - '&digits='. - rawurlencode(strtoupper((string) $this->getOneTimePasswordLength())). - '&period='. - rawurlencode(strtoupper((string) $this->getKeyRegeneration())). - ''; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/psr/cache/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/psr/cache/composer.json deleted file mode 100644 index e828fec..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/psr/cache/composer.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "psr/cache", - "description": "Common interface for caching libraries", - "keywords": ["psr", "psr-6", "cache"], - "license": "MIT", - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "require": { - "php": ">=5.3.0" - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/psr/container/LICENSE b/Sources/php_script/script/phpMyAdmin/vendor/psr/container/LICENSE deleted file mode 100644 index 2877a48..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/psr/container/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2016 container-interop -Copyright (c) 2016 PHP Framework Interoperability Group - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/psr/http-factory/src/UriFactoryInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/psr/http-factory/src/UriFactoryInterface.php deleted file mode 100644 index 06df0b4..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/psr/http-factory/src/UriFactoryInterface.php +++ /dev/null @@ -1,17 +0,0 @@ -logger = $logger; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/psr/log/Psr/Log/LoggerTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/psr/log/Psr/Log/LoggerTrait.php deleted file mode 100644 index e392fef..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/psr/log/Psr/Log/LoggerTrait.php +++ /dev/null @@ -1,142 +0,0 @@ -log(LogLevel::EMERGENCY, $message, $context); - } - - /** - * Action must be taken immediately. - * - * Example: Entire website down, database unavailable, etc. This should - * trigger the SMS alerts and wake you up. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function alert($message, array $context = array()) - { - $this->log(LogLevel::ALERT, $message, $context); - } - - /** - * Critical conditions. - * - * Example: Application component unavailable, unexpected exception. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function critical($message, array $context = array()) - { - $this->log(LogLevel::CRITICAL, $message, $context); - } - - /** - * Runtime errors that do not require immediate action but should typically - * be logged and monitored. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function error($message, array $context = array()) - { - $this->log(LogLevel::ERROR, $message, $context); - } - - /** - * Exceptional occurrences that are not errors. - * - * Example: Use of deprecated APIs, poor use of an API, undesirable things - * that are not necessarily wrong. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function warning($message, array $context = array()) - { - $this->log(LogLevel::WARNING, $message, $context); - } - - /** - * Normal but significant events. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function notice($message, array $context = array()) - { - $this->log(LogLevel::NOTICE, $message, $context); - } - - /** - * Interesting events. - * - * Example: User logs in, SQL logs. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function info($message, array $context = array()) - { - $this->log(LogLevel::INFO, $message, $context); - } - - /** - * Detailed debug information. - * - * @param string $message - * @param array $context - * - * @return void - */ - public function debug($message, array $context = array()) - { - $this->log(LogLevel::DEBUG, $message, $context); - } - - /** - * Logs with an arbitrary level. - * - * @param mixed $level - * @param string $message - * @param array $context - * - * @return void - * - * @throws \Psr\Log\InvalidArgumentException - */ - abstract public function log($level, $message, array $context = array()); -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/ralouphie/getallheaders/README.md b/Sources/php_script/script/phpMyAdmin/vendor/ralouphie/getallheaders/README.md deleted file mode 100644 index 9430d76..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/ralouphie/getallheaders/README.md +++ /dev/null @@ -1,27 +0,0 @@ -getallheaders -============= - -PHP `getallheaders()` polyfill. Compatible with PHP >= 5.3. - -[![Build Status](https://travis-ci.org/ralouphie/getallheaders.svg?branch=master)](https://travis-ci.org/ralouphie/getallheaders) -[![Coverage Status](https://coveralls.io/repos/ralouphie/getallheaders/badge.png?branch=master)](https://coveralls.io/r/ralouphie/getallheaders?branch=master) -[![Latest Stable Version](https://poser.pugx.org/ralouphie/getallheaders/v/stable.png)](https://packagist.org/packages/ralouphie/getallheaders) -[![Latest Unstable Version](https://poser.pugx.org/ralouphie/getallheaders/v/unstable.png)](https://packagist.org/packages/ralouphie/getallheaders) -[![License](https://poser.pugx.org/ralouphie/getallheaders/license.png)](https://packagist.org/packages/ralouphie/getallheaders) - - -This is a simple polyfill for [`getallheaders()`](http://www.php.net/manual/en/function.getallheaders.php). - -## Install - -For PHP version **`>= 5.6`**: - -``` -composer require ralouphie/getallheaders -``` - -For PHP version **`< 5.6`**: - -``` -composer require ralouphie/getallheaders "^2" -``` diff --git a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Cookies.php b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Cookies.php deleted file mode 100644 index db8174f..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Cookies.php +++ /dev/null @@ -1,221 +0,0 @@ - '', - 'domain' => null, - 'hostonly' => null, - 'path' => null, - 'expires' => null, - 'secure' => false, - 'httponly' => false, - 'samesite' => null - ]; - - /** - * @param array $cookies - */ - public function __construct(array $cookies = []) - { - $this->requestCookies = $cookies; - } - - /** - * Set default cookie properties - * - * @param array $settings - * - * @return static - */ - public function setDefaults(array $settings): self - { - $this->defaults = array_replace($this->defaults, $settings); - - return $this; - } - - /** - * Get cookie - * - * @param string $name - * @param string|array|null $default - * @return mixed|null - */ - public function get(string $name, $default = null) - { - return array_key_exists($name, $this->requestCookies) ? $this->requestCookies[$name] : $default; - } - - /** - * Set cookie - * - * @param string $name - * @param string|array $value - * @return static - */ - public function set(string $name, $value): self - { - if (!is_array($value)) { - $value = ['value' => $value]; - } - - $this->responseCookies[$name] = array_replace($this->defaults, $value); - - return $this; - } - - /** - * Convert all response cookies into an associate array of header values - * - * @return array - */ - public function toHeaders(): array - { - $headers = []; - - foreach ($this->responseCookies as $name => $properties) { - $headers[] = $this->toHeader($name, $properties); - } - - return $headers; - } - - /** - * Convert to `Set-Cookie` header - * - * @param string $name Cookie name - * @param array $properties Cookie properties - * - * @return string - */ - protected function toHeader(string $name, array $properties): string - { - $result = urlencode($name) . '=' . urlencode($properties['value']); - - if (isset($properties['domain'])) { - $result .= '; domain=' . $properties['domain']; - } - - if (isset($properties['path'])) { - $result .= '; path=' . $properties['path']; - } - - if (isset($properties['expires'])) { - if (is_string($properties['expires'])) { - $timestamp = strtotime($properties['expires']); - } else { - $timestamp = (int) $properties['expires']; - } - if ($timestamp && $timestamp !== 0) { - $result .= '; expires=' . gmdate('D, d-M-Y H:i:s e', $timestamp); - } - } - - if (isset($properties['secure']) && $properties['secure']) { - $result .= '; secure'; - } - - if (isset($properties['hostonly']) && $properties['hostonly']) { - $result .= '; HostOnly'; - } - - if (isset($properties['httponly']) && $properties['httponly']) { - $result .= '; HttpOnly'; - } - - if (isset($properties['samesite']) && in_array(strtolower($properties['samesite']), ['lax', 'strict'], true)) { - // While strtolower is needed for correct comparison, the RFC doesn't care about case - $result .= '; SameSite=' . $properties['samesite']; - } - - return $result; - } - - /** - * Parse cookie values from header value - * - * Returns an associative array of cookie names and values - * - * @param string|array $header - * - * @return array - */ - public static function parseHeader($header): array - { - if (is_array($header)) { - $header = isset($header[0]) ? $header[0] : ''; - } - - if (!is_string($header)) { - throw new InvalidArgumentException('Cannot parse Cookie data. Header value must be a string.'); - } - - $header = rtrim($header, "\r\n"); - $pieces = preg_split('@[;]\s*@', $header); - $cookies = []; - - if (is_array($pieces)) { - foreach ($pieces as $cookie) { - $cookie = explode('=', $cookie, 2); - - if (count($cookie) === 2) { - $key = urldecode($cookie[0]); - $value = urldecode($cookie[1]); - - if (!isset($cookies[$key])) { - $cookies[$key] = $value; - } - } - } - } - - return $cookies; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Factory/RequestFactory.php b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Factory/RequestFactory.php deleted file mode 100644 index 333af40..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Factory/RequestFactory.php +++ /dev/null @@ -1,73 +0,0 @@ -streamFactory = $streamFactory; - $this->uriFactory = $uriFactory; - } - - /** - * {@inheritdoc} - */ - public function createRequest(string $method, $uri): RequestInterface - { - if (is_string($uri)) { - $uri = $this->uriFactory->createUri($uri); - } - - if (!$uri instanceof UriInterface) { - throw new InvalidArgumentException( - 'Parameter 2 of RequestFactory::createRequest() must be a string or a compatible UriInterface.' - ); - } - - $body = $this->streamFactory->createStream(); - - return new Request($method, $uri, new Headers(), [], [], $body); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Headers.php b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Headers.php deleted file mode 100644 index afde205..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Headers.php +++ /dev/null @@ -1,321 +0,0 @@ -globals = $globals ?? $_SERVER; - $this->setHeaders($headers); - } - - /** - * {@inheritdoc} - */ - public function addHeader($name, $value): HeadersInterface - { - [$values, $originalName, $normalizedName] = $this->prepareHeader($name, $value); - - if (isset($this->headers[$normalizedName])) { - $header = $this->headers[$normalizedName]; - $header->addValues($values); - } else { - $this->headers[$normalizedName] = new Header($originalName, $normalizedName, $values); - } - - return $this; - } - - /** - * {@inheritdoc} - */ - public function removeHeader(string $name): HeadersInterface - { - $name = $this->normalizeHeaderName($name); - unset($this->headers[$name]); - return $this; - } - - /** - * {@inheritdoc} - */ - public function getHeader(string $name, $default = []): array - { - $name = $this->normalizeHeaderName($name); - - if (isset($this->headers[$name])) { - $header = $this->headers[$name]; - return $header->getValues(); - } - - if (empty($default)) { - return $default; - } - - $this->validateHeader($name, $default); - return $this->trimHeaderValue($default); - } - - /** - * {@inheritdoc} - */ - public function setHeader($name, $value): HeadersInterface - { - [$values, $originalName, $normalizedName] = $this->prepareHeader($name, $value); - - // Ensure we preserve original case if the header already exists in the stack - if (isset($this->headers[$normalizedName])) { - $existingHeader = $this->headers[$normalizedName]; - $originalName = $existingHeader->getOriginalName(); - } - - $this->headers[$normalizedName] = new Header($originalName, $normalizedName, $values); - - return $this; - } - - /** - * {@inheritdoc} - */ - public function setHeaders(array $headers): HeadersInterface - { - $this->headers = []; - - foreach ($this->parseAuthorizationHeader($headers) as $name => $value) { - $this->addHeader($name, $value); - } - - return $this; - } - - /** - * {@inheritdoc} - */ - public function hasHeader(string $name): bool - { - $name = $this->normalizeHeaderName($name); - return isset($this->headers[$name]); - } - - /** - * {@inheritdoc} - */ - public function getHeaders(bool $originalCase = false): array - { - $headers = []; - - foreach ($this->headers as $header) { - $name = $originalCase ? $header->getOriginalName() : $header->getNormalizedName(); - $headers[$name] = $header->getValues(); - } - - return $headers; - } - - /** - * @param string $name - * @param bool $preserveCase - * @return string - */ - protected function normalizeHeaderName(string $name, bool $preserveCase = false): string - { - $name = strtr($name, '_', '-'); - - if (!$preserveCase) { - $name = strtolower($name); - } - - if (strpos(strtolower($name), 'http-') === 0) { - $name = substr($name, 5); - } - - return $name; - } - - /** - * Parse incoming headers and determine Authorization header from original headers - * - * @param array $headers - * @return array - */ - protected function parseAuthorizationHeader(array $headers): array - { - $hasAuthorizationHeader = false; - foreach ($headers as $name => $value) { - if (strtolower($name) === 'authorization') { - $hasAuthorizationHeader = true; - break; - } - } - - if (!$hasAuthorizationHeader) { - if (isset($this->globals['REDIRECT_HTTP_AUTHORIZATION'])) { - $headers['Authorization'] = $this->globals['REDIRECT_HTTP_AUTHORIZATION']; - } elseif (isset($this->globals['PHP_AUTH_USER'])) { - $pw = isset($this->globals['PHP_AUTH_PW']) ? $this->globals['PHP_AUTH_PW'] : ''; - $headers['Authorization'] = 'Basic ' . base64_encode($this->globals['PHP_AUTH_USER'] . ':' . $pw); - } elseif (isset($this->globals['PHP_AUTH_DIGEST'])) { - $headers['Authorization'] = $this->globals['PHP_AUTH_DIGEST']; - } - } - - return $headers; - } - - /** - * @param array|string $value - * - * @return array - */ - protected function trimHeaderValue($value): array - { - $items = is_array($value) ? $value : [$value]; - $result = []; - foreach ($items as $item) { - $result[] = trim((string) $item, " \t"); - } - return $result; - } - - /** - * @param string $name - * @param array|string $value - * - * @throws InvalidArgumentException - * - * @return array - */ - protected function prepareHeader($name, $value): array - { - $this->validateHeader($name, $value); - $values = $this->trimHeaderValue($value); - $originalName = $this->normalizeHeaderName($name, true); - $normalizedName = $this->normalizeHeaderName($name); - return [$values, $originalName, $normalizedName]; - } - - /** - * Make sure the header complies with RFC 7230. - * - * Header names must be a non-empty string consisting of token characters. - * - * Header values must be strings consisting of visible characters with all optional - * leading and trailing whitespace stripped. This method will always strip such - * optional whitespace. Note that the method does not allow folding whitespace within - * the values as this was deprecated for almost all instances by the RFC. - * - * header-field = field-name ":" OWS field-value OWS - * field-name = 1*( "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / "^" - * / "_" / "`" / "|" / "~" / %x30-39 / ( %x41-5A / %x61-7A ) ) - * OWS = *( SP / HTAB ) - * field-value = *( ( %x21-7E / %x80-FF ) [ 1*( SP / HTAB ) ( %x21-7E / %x80-FF ) ] ) - * - * @see https://tools.ietf.org/html/rfc7230#section-3.2.4 - * - * @param string $name - * @param array|string $value - * - * @throws InvalidArgumentException; - */ - protected function validateHeader($name, $value): void - { - $this->validateHeaderName($name); - $this->validateHeaderValue($value); - } - - /** - * @param mixed $name - * - * @throws InvalidArgumentException - */ - protected function validateHeaderName($name): void - { - if (!is_string($name) || preg_match("@^[!#$%&'*+.^_`|~0-9A-Za-z-]+$@", $name) !== 1) { - throw new InvalidArgumentException('Header name must be an RFC 7230 compatible string.'); - } - } - - /** - * @param mixed $value - * - * @throws InvalidArgumentException - */ - protected function validateHeaderValue($value): void - { - $items = is_array($value) ? $value : [$value]; - - if (empty($items)) { - throw new InvalidArgumentException( - 'Header values must be a string or an array of strings, empty array given.' - ); - } - - $pattern = "@^[ \t\x21-\x7E\x80-\xFF]*$@"; - foreach ($items as $item) { - $hasInvalidType = !is_numeric($item) && !is_string($item); - $rejected = $hasInvalidType || preg_match($pattern, (string) $item) !== 1; - if ($rejected) { - throw new InvalidArgumentException( - 'Header values must be RFC 7230 compatible strings.' - ); - } - } - } - - /** - * @return static - */ - public static function createFromGlobals() - { - $headers = null; - - if (function_exists('getallheaders')) { - $headers = getallheaders(); - } - - if (!is_array($headers)) { - $headers = []; - } - - return new static($headers); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Message.php b/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Message.php deleted file mode 100644 index 264540e..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/slim/psr7/src/Message.php +++ /dev/null @@ -1,191 +0,0 @@ - true, - '1.1' => true, - '2.0' => true, - '2' => true, - ]; - - /** - * @var HeadersInterface - */ - protected $headers; - - /** - * @var StreamInterface - */ - protected $body; - - /** - * Disable magic setter to ensure immutability - * - * @param string $name The property name - * @param mixed $value The property value - * - * @return void - */ - public function __set($name, $value): void - { - // Do nothing - } - - /** - * {@inheritdoc} - */ - public function getProtocolVersion(): string - { - return $this->protocolVersion; - } - - /** - * @return static - * {@inheritdoc} - */ - public function withProtocolVersion($version) - { - if (!isset(self::$validProtocolVersions[$version])) { - throw new InvalidArgumentException( - 'Invalid HTTP version. Must be one of: ' - . implode(', ', array_keys(self::$validProtocolVersions)) - ); - } - - $clone = clone $this; - $clone->protocolVersion = $version; - - return $clone; - } - - /** - * {@inheritdoc} - */ - public function getHeaders(): array - { - return $this->headers->getHeaders(true); - } - - /** - * {@inheritdoc} - */ - public function hasHeader($name): bool - { - return $this->headers->hasHeader($name); - } - - /** - * {@inheritdoc} - */ - public function getHeader($name): array - { - return $this->headers->getHeader($name); - } - - /** - * {@inheritdoc} - */ - public function getHeaderLine($name): string - { - $values = $this->headers->getHeader($name); - return implode(',', $values); - } - - /** - * @return static - * {@inheritdoc} - */ - public function withHeader($name, $value) - { - $clone = clone $this; - $clone->headers->setHeader($name, $value); - - if ($this instanceof Response && $this->body instanceof NonBufferedBody) { - header(sprintf('%s: %s', $name, $clone->getHeaderLine($name))); - } - - return $clone; - } - - /** - * @return static - * {@inheritdoc} - */ - public function withAddedHeader($name, $value) - { - $clone = clone $this; - $clone->headers->addHeader($name, $value); - - if ($this instanceof Response && $this->body instanceof NonBufferedBody) { - header(sprintf('%s: %s', $name, $clone->getHeaderLine($name))); - } - - return $clone; - } - - /** - * @return static - * {@inheritdoc} - */ - public function withoutHeader($name) - { - $clone = clone $this; - $clone->headers->removeHeader($name); - - if ($this instanceof Response && $this->body instanceof NonBufferedBody) { - header_remove($name); - } - - return $clone; - } - - /** - * {@inheritdoc} - */ - public function getBody(): StreamInterface - { - return $this->body; - } - - /** - * @return static - * {@inheritdoc} - */ - public function withBody(StreamInterface $body) - { - $clone = clone $this; - $clone->body = $body; - - return $clone; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CHANGELOG.md deleted file mode 100644 index 7932e26..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -CHANGELOG -========= - -The changelog is maintained for all Symfony contracts at the following URL: -https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CacheTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CacheTrait.php deleted file mode 100644 index d340e06..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache-contracts/CacheTrait.php +++ /dev/null @@ -1,80 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Contracts\Cache; - -use Psr\Cache\CacheItemPoolInterface; -use Psr\Cache\InvalidArgumentException; -use Psr\Log\LoggerInterface; - -// Help opcache.preload discover always-needed symbols -class_exists(InvalidArgumentException::class); - -/** - * An implementation of CacheInterface for PSR-6 CacheItemPoolInterface classes. - * - * @author Nicolas Grekas - */ -trait CacheTrait -{ - /** - * {@inheritdoc} - * - * @return mixed - */ - public function get(string $key, callable $callback, float $beta = null, array &$metadata = null) - { - return $this->doGet($this, $key, $callback, $beta, $metadata); - } - - /** - * {@inheritdoc} - */ - public function delete(string $key): bool - { - return $this->deleteItem($key); - } - - private function doGet(CacheItemPoolInterface $pool, string $key, callable $callback, ?float $beta, array &$metadata = null, LoggerInterface $logger = null) - { - if (0 > $beta = $beta ?? 1.0) { - throw new class(sprintf('Argument "$beta" provided to "%s::get()" must be a positive number, %f given.', static::class, $beta)) extends \InvalidArgumentException implements InvalidArgumentException { }; - } - - $item = $pool->getItem($key); - $recompute = !$item->isHit() || \INF === $beta; - $metadata = $item instanceof ItemInterface ? $item->getMetadata() : []; - - if (!$recompute && $metadata) { - $expiry = $metadata[ItemInterface::METADATA_EXPIRY] ?? false; - $ctime = $metadata[ItemInterface::METADATA_CTIME] ?? false; - - if ($recompute = $ctime && $expiry && $expiry <= ($now = microtime(true)) - $ctime / 1000 * $beta * log(random_int(1, \PHP_INT_MAX) / \PHP_INT_MAX)) { - // force applying defaultLifetime to expiry - $item->expiresAt(null); - $logger && $logger->info('Item "{key}" elected for early recomputation {delta}s before its expiration', [ - 'key' => $key, - 'delta' => sprintf('%.1f', $expiry - $now), - ]); - } - } - - if ($recompute) { - $save = true; - $item->set($callback($item, $save)); - if ($save) { - $pool->save($item); - } - } - - return $item->get(); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ApcuAdapter.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ApcuAdapter.php deleted file mode 100644 index 5fc8f62..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ApcuAdapter.php +++ /dev/null @@ -1,138 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\Adapter; - -use Symfony\Component\Cache\CacheItem; -use Symfony\Component\Cache\Exception\CacheException; -use Symfony\Component\Cache\Marshaller\MarshallerInterface; - -/** - * @author Nicolas Grekas - */ -class ApcuAdapter extends AbstractAdapter -{ - private $marshaller; - - /** - * @throws CacheException if APCu is not enabled - */ - public function __construct(string $namespace = '', int $defaultLifetime = 0, string $version = null, MarshallerInterface $marshaller = null) - { - if (!static::isSupported()) { - throw new CacheException('APCu is not enabled.'); - } - if ('cli' === \PHP_SAPI) { - ini_set('apc.use_request_time', 0); - } - parent::__construct($namespace, $defaultLifetime); - - if (null !== $version) { - CacheItem::validateKey($version); - - if (!apcu_exists($version.'@'.$namespace)) { - $this->doClear($namespace); - apcu_add($version.'@'.$namespace, null); - } - } - - $this->marshaller = $marshaller; - } - - public static function isSupported() - { - return \function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), \FILTER_VALIDATE_BOOLEAN); - } - - /** - * {@inheritdoc} - */ - protected function doFetch(array $ids) - { - $unserializeCallbackHandler = ini_set('unserialize_callback_func', __CLASS__.'::handleUnserializeCallback'); - try { - $values = []; - $ids = array_flip($ids); - foreach (apcu_fetch(array_keys($ids), $ok) ?: [] as $k => $v) { - if (!isset($ids[$k])) { - // work around https://github.com/krakjoe/apcu/issues/247 - $k = key($ids); - } - unset($ids[$k]); - - if (null !== $v || $ok) { - $values[$k] = null !== $this->marshaller ? $this->marshaller->unmarshall($v) : $v; - } - } - - return $values; - } catch (\Error $e) { - throw new \ErrorException($e->getMessage(), $e->getCode(), \E_ERROR, $e->getFile(), $e->getLine()); - } finally { - ini_set('unserialize_callback_func', $unserializeCallbackHandler); - } - } - - /** - * {@inheritdoc} - */ - protected function doHave(string $id) - { - return apcu_exists($id); - } - - /** - * {@inheritdoc} - */ - protected function doClear(string $namespace) - { - return isset($namespace[0]) && class_exists(\APCuIterator::class, false) && ('cli' !== \PHP_SAPI || filter_var(ini_get('apc.enable_cli'), \FILTER_VALIDATE_BOOLEAN)) - ? apcu_delete(new \APCuIterator(sprintf('/^%s/', preg_quote($namespace, '/')), \APC_ITER_KEY)) - : apcu_clear_cache(); - } - - /** - * {@inheritdoc} - */ - protected function doDelete(array $ids) - { - foreach ($ids as $id) { - apcu_delete($id); - } - - return true; - } - - /** - * {@inheritdoc} - */ - protected function doSave(array $values, int $lifetime) - { - if (null !== $this->marshaller && (!$values = $this->marshaller->marshall($values, $failed))) { - return $failed; - } - - try { - if (false === $failures = apcu_store($values, null, $lifetime)) { - $failures = $values; - } - - return array_keys($failures); - } catch (\Throwable $e) { - if (1 === \count($values)) { - // Workaround https://github.com/krakjoe/apcu/issues/170 - apcu_delete(array_key_first($values)); - } - - throw $e; - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php deleted file mode 100644 index 73f0ea6..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php +++ /dev/null @@ -1,397 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\Adapter; - -use Doctrine\DBAL\Connection; -use Doctrine\DBAL\Driver\ServerInfoAwareConnection; -use Doctrine\DBAL\DriverManager; -use Doctrine\DBAL\Exception as DBALException; -use Doctrine\DBAL\Exception\TableNotFoundException; -use Doctrine\DBAL\ParameterType; -use Doctrine\DBAL\Schema\Schema; -use Symfony\Component\Cache\Exception\InvalidArgumentException; -use Symfony\Component\Cache\Marshaller\DefaultMarshaller; -use Symfony\Component\Cache\Marshaller\MarshallerInterface; -use Symfony\Component\Cache\PruneableInterface; - -class DoctrineDbalAdapter extends AbstractAdapter implements PruneableInterface -{ - protected $maxIdLength = 255; - - private $marshaller; - private $conn; - private $platformName; - private $serverVersion; - private $table = 'cache_items'; - private $idCol = 'item_id'; - private $dataCol = 'item_data'; - private $lifetimeCol = 'item_lifetime'; - private $timeCol = 'item_time'; - private $namespace; - - /** - * You can either pass an existing database Doctrine DBAL Connection or - * a DSN string that will be used to connect to the database. - * - * The cache table is created automatically when possible. - * Otherwise, use the createTable() method. - * - * List of available options: - * * db_table: The name of the table [default: cache_items] - * * db_id_col: The column where to store the cache id [default: item_id] - * * db_data_col: The column where to store the cache data [default: item_data] - * * db_lifetime_col: The column where to store the lifetime [default: item_lifetime] - * * db_time_col: The column where to store the timestamp [default: item_time] - * - * @param Connection|string $connOrDsn - * - * @throws InvalidArgumentException When namespace contains invalid characters - */ - public function __construct($connOrDsn, string $namespace = '', int $defaultLifetime = 0, array $options = [], MarshallerInterface $marshaller = null) - { - if (isset($namespace[0]) && preg_match('#[^-+.A-Za-z0-9]#', $namespace, $match)) { - throw new InvalidArgumentException(sprintf('Namespace contains "%s" but only characters in [-+.A-Za-z0-9] are allowed.', $match[0])); - } - - if ($connOrDsn instanceof Connection) { - $this->conn = $connOrDsn; - } elseif (\is_string($connOrDsn)) { - if (!class_exists(DriverManager::class)) { - throw new InvalidArgumentException(sprintf('Failed to parse the DSN "%s". Try running "composer require doctrine/dbal".', $connOrDsn)); - } - $this->conn = DriverManager::getConnection(['url' => $connOrDsn]); - } else { - throw new \TypeError(sprintf('Argument 1 passed to "%s()" must be "%s" or string, "%s" given.', __METHOD__, Connection::class, get_debug_type($connOrDsn))); - } - - $this->table = $options['db_table'] ?? $this->table; - $this->idCol = $options['db_id_col'] ?? $this->idCol; - $this->dataCol = $options['db_data_col'] ?? $this->dataCol; - $this->lifetimeCol = $options['db_lifetime_col'] ?? $this->lifetimeCol; - $this->timeCol = $options['db_time_col'] ?? $this->timeCol; - $this->namespace = $namespace; - $this->marshaller = $marshaller ?? new DefaultMarshaller(); - - parent::__construct($namespace, $defaultLifetime); - } - - /** - * Creates the table to store cache items which can be called once for setup. - * - * Cache ID are saved in a column of maximum length 255. Cache data is - * saved in a BLOB. - * - * @throws DBALException When the table already exists - */ - public function createTable() - { - $schema = new Schema(); - $this->addTableToSchema($schema); - - foreach ($schema->toSql($this->conn->getDatabasePlatform()) as $sql) { - $this->conn->executeStatement($sql); - } - } - - /** - * {@inheritdoc} - */ - public function configureSchema(Schema $schema, Connection $forConnection): void - { - // only update the schema for this connection - if ($forConnection !== $this->conn) { - return; - } - - if ($schema->hasTable($this->table)) { - return; - } - - $this->addTableToSchema($schema); - } - - /** - * {@inheritdoc} - */ - public function prune(): bool - { - $deleteSql = "DELETE FROM $this->table WHERE $this->lifetimeCol + $this->timeCol <= ?"; - $params = [time()]; - $paramTypes = [ParameterType::INTEGER]; - - if ('' !== $this->namespace) { - $deleteSql .= " AND $this->idCol LIKE ?"; - $params[] = sprintf('%s%%', $this->namespace); - $paramTypes[] = ParameterType::STRING; - } - - try { - $this->conn->executeStatement($deleteSql, $params, $paramTypes); - } catch (TableNotFoundException $e) { - } - - return true; - } - - /** - * {@inheritdoc} - */ - protected function doFetch(array $ids): iterable - { - $now = time(); - $expired = []; - - $sql = "SELECT $this->idCol, CASE WHEN $this->lifetimeCol IS NULL OR $this->lifetimeCol + $this->timeCol > ? THEN $this->dataCol ELSE NULL END FROM $this->table WHERE $this->idCol IN (?)"; - $result = $this->conn->executeQuery($sql, [ - $now, - $ids, - ], [ - ParameterType::INTEGER, - Connection::PARAM_STR_ARRAY, - ])->iterateNumeric(); - - foreach ($result as $row) { - if (null === $row[1]) { - $expired[] = $row[0]; - } else { - yield $row[0] => $this->marshaller->unmarshall(\is_resource($row[1]) ? stream_get_contents($row[1]) : $row[1]); - } - } - - if ($expired) { - $sql = "DELETE FROM $this->table WHERE $this->lifetimeCol + $this->timeCol <= ? AND $this->idCol IN (?)"; - $this->conn->executeStatement($sql, [ - $now, - $expired, - ], [ - ParameterType::INTEGER, - Connection::PARAM_STR_ARRAY, - ]); - } - } - - /** - * {@inheritdoc} - */ - protected function doHave(string $id): bool - { - $sql = "SELECT 1 FROM $this->table WHERE $this->idCol = ? AND ($this->lifetimeCol IS NULL OR $this->lifetimeCol + $this->timeCol > ?)"; - $result = $this->conn->executeQuery($sql, [ - $id, - time(), - ], [ - ParameterType::STRING, - ParameterType::INTEGER, - ]); - - return (bool) $result->fetchOne(); - } - - /** - * {@inheritdoc} - */ - protected function doClear(string $namespace): bool - { - if ('' === $namespace) { - if ('sqlite' === $this->getPlatformName()) { - $sql = "DELETE FROM $this->table"; - } else { - $sql = "TRUNCATE TABLE $this->table"; - } - } else { - $sql = "DELETE FROM $this->table WHERE $this->idCol LIKE '$namespace%'"; - } - - try { - $this->conn->executeStatement($sql); - } catch (TableNotFoundException $e) { - } - - return true; - } - - /** - * {@inheritdoc} - */ - protected function doDelete(array $ids): bool - { - $sql = "DELETE FROM $this->table WHERE $this->idCol IN (?)"; - try { - $this->conn->executeStatement($sql, [array_values($ids)], [Connection::PARAM_STR_ARRAY]); - } catch (TableNotFoundException $e) { - } - - return true; - } - - /** - * {@inheritdoc} - */ - protected function doSave(array $values, int $lifetime) - { - if (!$values = $this->marshaller->marshall($values, $failed)) { - return $failed; - } - - $platformName = $this->getPlatformName(); - $insertSql = "INSERT INTO $this->table ($this->idCol, $this->dataCol, $this->lifetimeCol, $this->timeCol) VALUES (?, ?, ?, ?)"; - - switch (true) { - case 'mysql' === $platformName: - $sql = $insertSql." ON DUPLICATE KEY UPDATE $this->dataCol = VALUES($this->dataCol), $this->lifetimeCol = VALUES($this->lifetimeCol), $this->timeCol = VALUES($this->timeCol)"; - break; - case 'oci' === $platformName: - // DUAL is Oracle specific dummy table - $sql = "MERGE INTO $this->table USING DUAL ON ($this->idCol = ?) ". - "WHEN NOT MATCHED THEN INSERT ($this->idCol, $this->dataCol, $this->lifetimeCol, $this->timeCol) VALUES (?, ?, ?, ?) ". - "WHEN MATCHED THEN UPDATE SET $this->dataCol = ?, $this->lifetimeCol = ?, $this->timeCol = ?"; - break; - case 'sqlsrv' === $platformName && version_compare($this->getServerVersion(), '10', '>='): - // MERGE is only available since SQL Server 2008 and must be terminated by semicolon - // It also requires HOLDLOCK according to http://weblogs.sqlteam.com/dang/archive/2009/01/31/UPSERT-Race-Condition-With-MERGE.aspx - $sql = "MERGE INTO $this->table WITH (HOLDLOCK) USING (SELECT 1 AS dummy) AS src ON ($this->idCol = ?) ". - "WHEN NOT MATCHED THEN INSERT ($this->idCol, $this->dataCol, $this->lifetimeCol, $this->timeCol) VALUES (?, ?, ?, ?) ". - "WHEN MATCHED THEN UPDATE SET $this->dataCol = ?, $this->lifetimeCol = ?, $this->timeCol = ?;"; - break; - case 'sqlite' === $platformName: - $sql = 'INSERT OR REPLACE'.substr($insertSql, 6); - break; - case 'pgsql' === $platformName && version_compare($this->getServerVersion(), '9.5', '>='): - $sql = $insertSql." ON CONFLICT ($this->idCol) DO UPDATE SET ($this->dataCol, $this->lifetimeCol, $this->timeCol) = (EXCLUDED.$this->dataCol, EXCLUDED.$this->lifetimeCol, EXCLUDED.$this->timeCol)"; - break; - default: - $platformName = null; - $sql = "UPDATE $this->table SET $this->dataCol = ?, $this->lifetimeCol = ?, $this->timeCol = ? WHERE $this->idCol = ?"; - break; - } - - $now = time(); - $lifetime = $lifetime ?: null; - try { - $stmt = $this->conn->prepare($sql); - } catch (TableNotFoundException $e) { - if (!$this->conn->isTransactionActive() || \in_array($platformName, ['pgsql', 'sqlite', 'sqlsrv'], true)) { - $this->createTable(); - } - $stmt = $this->conn->prepare($sql); - } - - // $id and $data are defined later in the loop. Binding is done by reference, values are read on execution. - if ('sqlsrv' === $platformName || 'oci' === $platformName) { - $stmt->bindParam(1, $id); - $stmt->bindParam(2, $id); - $stmt->bindParam(3, $data, ParameterType::LARGE_OBJECT); - $stmt->bindValue(4, $lifetime, ParameterType::INTEGER); - $stmt->bindValue(5, $now, ParameterType::INTEGER); - $stmt->bindParam(6, $data, ParameterType::LARGE_OBJECT); - $stmt->bindValue(7, $lifetime, ParameterType::INTEGER); - $stmt->bindValue(8, $now, ParameterType::INTEGER); - } elseif (null !== $platformName) { - $stmt->bindParam(1, $id); - $stmt->bindParam(2, $data, ParameterType::LARGE_OBJECT); - $stmt->bindValue(3, $lifetime, ParameterType::INTEGER); - $stmt->bindValue(4, $now, ParameterType::INTEGER); - } else { - $stmt->bindParam(1, $data, ParameterType::LARGE_OBJECT); - $stmt->bindValue(2, $lifetime, ParameterType::INTEGER); - $stmt->bindValue(3, $now, ParameterType::INTEGER); - $stmt->bindParam(4, $id); - - $insertStmt = $this->conn->prepare($insertSql); - $insertStmt->bindParam(1, $id); - $insertStmt->bindParam(2, $data, ParameterType::LARGE_OBJECT); - $insertStmt->bindValue(3, $lifetime, ParameterType::INTEGER); - $insertStmt->bindValue(4, $now, ParameterType::INTEGER); - } - - foreach ($values as $id => $data) { - try { - $rowCount = $stmt->executeStatement(); - } catch (TableNotFoundException $e) { - if (!$this->conn->isTransactionActive() || \in_array($platformName, ['pgsql', 'sqlite', 'sqlsrv'], true)) { - $this->createTable(); - } - $rowCount = $stmt->executeStatement(); - } - if (null === $platformName && 0 === $rowCount) { - try { - $insertStmt->executeStatement(); - } catch (DBALException $e) { - // A concurrent write won, let it be - } - } - } - - return $failed; - } - - private function getPlatformName(): string - { - if (isset($this->platformName)) { - return $this->platformName; - } - - $platform = $this->conn->getDatabasePlatform(); - - switch (true) { - case $platform instanceof \Doctrine\DBAL\Platforms\MySQLPlatform: - case $platform instanceof \Doctrine\DBAL\Platforms\MySQL57Platform: - return $this->platformName = 'mysql'; - - case $platform instanceof \Doctrine\DBAL\Platforms\SqlitePlatform: - return $this->platformName = 'sqlite'; - - case $platform instanceof \Doctrine\DBAL\Platforms\PostgreSQLPlatform: - case $platform instanceof \Doctrine\DBAL\Platforms\PostgreSQL94Platform: - return $this->platformName = 'pgsql'; - - case $platform instanceof \Doctrine\DBAL\Platforms\OraclePlatform: - return $this->platformName = 'oci'; - - case $platform instanceof \Doctrine\DBAL\Platforms\SQLServerPlatform: - case $platform instanceof \Doctrine\DBAL\Platforms\SQLServer2012Platform: - return $this->platformName = 'sqlsrv'; - - default: - return $this->platformName = \get_class($platform); - } - } - - private function getServerVersion(): string - { - if (isset($this->serverVersion)) { - return $this->serverVersion; - } - - $conn = $this->conn->getWrappedConnection(); - if ($conn instanceof ServerInfoAwareConnection) { - return $this->serverVersion = $conn->getServerVersion(); - } - - return $this->serverVersion = '0'; - } - - private function addTableToSchema(Schema $schema): void - { - $types = [ - 'mysql' => 'binary', - 'sqlite' => 'text', - ]; - - $table = $schema->createTable($this->table); - $table->addColumn($this->idCol, $types[$this->getPlatformName()] ?? 'string', ['length' => 255]); - $table->addColumn($this->dataCol, 'blob', ['length' => 16777215]); - $table->addColumn($this->lifetimeCol, 'integer', ['unsigned' => true, 'notnull' => false]); - $table->addColumn($this->timeCol, 'integer', ['unsigned' => true]); - $table->setPrimaryKey([$this->idCol]); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/MemcachedAdapter.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/MemcachedAdapter.php deleted file mode 100644 index 5c2933f..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/MemcachedAdapter.php +++ /dev/null @@ -1,353 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\Adapter; - -use Symfony\Component\Cache\Exception\CacheException; -use Symfony\Component\Cache\Exception\InvalidArgumentException; -use Symfony\Component\Cache\Marshaller\DefaultMarshaller; -use Symfony\Component\Cache\Marshaller\MarshallerInterface; - -/** - * @author Rob Frawley 2nd - * @author Nicolas Grekas - */ -class MemcachedAdapter extends AbstractAdapter -{ - /** - * We are replacing characters that are illegal in Memcached keys with reserved characters from - * {@see \Symfony\Contracts\Cache\ItemInterface::RESERVED_CHARACTERS} that are legal in Memcached. - * Note: don’t use {@see \Symfony\Component\Cache\Adapter\AbstractAdapter::NS_SEPARATOR}. - */ - private const RESERVED_MEMCACHED = " \n\r\t\v\f\0"; - private const RESERVED_PSR6 = '@()\{}/'; - - protected $maxIdLength = 250; - - private const DEFAULT_CLIENT_OPTIONS = [ - 'persistent_id' => null, - 'username' => null, - 'password' => null, - \Memcached::OPT_SERIALIZER => \Memcached::SERIALIZER_PHP, - ]; - - private $marshaller; - private $client; - private $lazyClient; - - /** - * Using a MemcachedAdapter with a TagAwareAdapter for storing tags is discouraged. - * Using a RedisAdapter is recommended instead. If you cannot do otherwise, be aware that: - * - the Memcached::OPT_BINARY_PROTOCOL must be enabled - * (that's the default when using MemcachedAdapter::createConnection()); - * - tags eviction by Memcached's LRU algorithm will break by-tags invalidation; - * your Memcached memory should be large enough to never trigger LRU. - * - * Using a MemcachedAdapter as a pure items store is fine. - */ - public function __construct(\Memcached $client, string $namespace = '', int $defaultLifetime = 0, MarshallerInterface $marshaller = null) - { - if (!static::isSupported()) { - throw new CacheException('Memcached '.(\PHP_VERSION_ID >= 80100 ? '> 3.1.5' : '>= 2.2.0').' is required.'); - } - if ('Memcached' === \get_class($client)) { - $opt = $client->getOption(\Memcached::OPT_SERIALIZER); - if (\Memcached::SERIALIZER_PHP !== $opt && \Memcached::SERIALIZER_IGBINARY !== $opt) { - throw new CacheException('MemcachedAdapter: "serializer" option must be "php" or "igbinary".'); - } - $this->maxIdLength -= \strlen($client->getOption(\Memcached::OPT_PREFIX_KEY)); - $this->client = $client; - } else { - $this->lazyClient = $client; - } - - parent::__construct($namespace, $defaultLifetime); - $this->enableVersioning(); - $this->marshaller = $marshaller ?? new DefaultMarshaller(); - } - - public static function isSupported() - { - return \extension_loaded('memcached') && version_compare(phpversion('memcached'), \PHP_VERSION_ID >= 80100 ? '3.1.6' : '2.2.0', '>='); - } - - /** - * Creates a Memcached instance. - * - * By default, the binary protocol, no block, and libketama compatible options are enabled. - * - * Examples for servers: - * - 'memcached://user:pass@localhost?weight=33' - * - [['localhost', 11211, 33]] - * - * @param array[]|string|string[] $servers An array of servers, a DSN, or an array of DSNs - * - * @return \Memcached - * - * @throws \ErrorException When invalid options or servers are provided - */ - public static function createConnection($servers, array $options = []) - { - if (\is_string($servers)) { - $servers = [$servers]; - } elseif (!\is_array($servers)) { - throw new InvalidArgumentException(sprintf('MemcachedAdapter::createClient() expects array or string as first argument, "%s" given.', get_debug_type($servers))); - } - if (!static::isSupported()) { - throw new CacheException('Memcached '.(\PHP_VERSION_ID >= 80100 ? '> 3.1.5' : '>= 2.2.0').' is required.'); - } - set_error_handler(function ($type, $msg, $file, $line) { throw new \ErrorException($msg, 0, $type, $file, $line); }); - try { - $options += static::DEFAULT_CLIENT_OPTIONS; - $client = new \Memcached($options['persistent_id']); - $username = $options['username']; - $password = $options['password']; - - // parse any DSN in $servers - foreach ($servers as $i => $dsn) { - if (\is_array($dsn)) { - continue; - } - if (!str_starts_with($dsn, 'memcached:')) { - throw new InvalidArgumentException(sprintf('Invalid Memcached DSN: "%s" does not start with "memcached:".', $dsn)); - } - $params = preg_replace_callback('#^memcached:(//)?(?:([^@]*+)@)?#', function ($m) use (&$username, &$password) { - if (!empty($m[2])) { - [$username, $password] = explode(':', $m[2], 2) + [1 => null]; - } - - return 'file:'.($m[1] ?? ''); - }, $dsn); - if (false === $params = parse_url($params)) { - throw new InvalidArgumentException(sprintf('Invalid Memcached DSN: "%s".', $dsn)); - } - $query = $hosts = []; - if (isset($params['query'])) { - parse_str($params['query'], $query); - - if (isset($query['host'])) { - if (!\is_array($hosts = $query['host'])) { - throw new InvalidArgumentException(sprintf('Invalid Memcached DSN: "%s".', $dsn)); - } - foreach ($hosts as $host => $weight) { - if (false === $port = strrpos($host, ':')) { - $hosts[$host] = [$host, 11211, (int) $weight]; - } else { - $hosts[$host] = [substr($host, 0, $port), (int) substr($host, 1 + $port), (int) $weight]; - } - } - $hosts = array_values($hosts); - unset($query['host']); - } - if ($hosts && !isset($params['host']) && !isset($params['path'])) { - unset($servers[$i]); - $servers = array_merge($servers, $hosts); - continue; - } - } - if (!isset($params['host']) && !isset($params['path'])) { - throw new InvalidArgumentException(sprintf('Invalid Memcached DSN: "%s".', $dsn)); - } - if (isset($params['path']) && preg_match('#/(\d+)$#', $params['path'], $m)) { - $params['weight'] = $m[1]; - $params['path'] = substr($params['path'], 0, -\strlen($m[0])); - } - $params += [ - 'host' => $params['host'] ?? $params['path'], - 'port' => isset($params['host']) ? 11211 : null, - 'weight' => 0, - ]; - if ($query) { - $params += $query; - $options = $query + $options; - } - - $servers[$i] = [$params['host'], $params['port'], $params['weight']]; - - if ($hosts) { - $servers = array_merge($servers, $hosts); - } - } - - // set client's options - unset($options['persistent_id'], $options['username'], $options['password'], $options['weight'], $options['lazy']); - $options = array_change_key_case($options, \CASE_UPPER); - $client->setOption(\Memcached::OPT_BINARY_PROTOCOL, true); - $client->setOption(\Memcached::OPT_NO_BLOCK, true); - $client->setOption(\Memcached::OPT_TCP_NODELAY, true); - if (!\array_key_exists('LIBKETAMA_COMPATIBLE', $options) && !\array_key_exists(\Memcached::OPT_LIBKETAMA_COMPATIBLE, $options)) { - $client->setOption(\Memcached::OPT_LIBKETAMA_COMPATIBLE, true); - } - foreach ($options as $name => $value) { - if (\is_int($name)) { - continue; - } - if ('HASH' === $name || 'SERIALIZER' === $name || 'DISTRIBUTION' === $name) { - $value = \constant('Memcached::'.$name.'_'.strtoupper($value)); - } - unset($options[$name]); - - if (\defined('Memcached::OPT_'.$name)) { - $options[\constant('Memcached::OPT_'.$name)] = $value; - } - } - $client->setOptions($options); - - // set client's servers, taking care of persistent connections - if (!$client->isPristine()) { - $oldServers = []; - foreach ($client->getServerList() as $server) { - $oldServers[] = [$server['host'], $server['port']]; - } - - $newServers = []; - foreach ($servers as $server) { - if (1 < \count($server)) { - $server = array_values($server); - unset($server[2]); - $server[1] = (int) $server[1]; - } - $newServers[] = $server; - } - - if ($oldServers !== $newServers) { - $client->resetServerList(); - $client->addServers($servers); - } - } else { - $client->addServers($servers); - } - - if (null !== $username || null !== $password) { - if (!method_exists($client, 'setSaslAuthData')) { - trigger_error('Missing SASL support: the memcached extension must be compiled with --enable-memcached-sasl.'); - } - $client->setSaslAuthData($username, $password); - } - - return $client; - } finally { - restore_error_handler(); - } - } - - /** - * {@inheritdoc} - */ - protected function doSave(array $values, int $lifetime) - { - if (!$values = $this->marshaller->marshall($values, $failed)) { - return $failed; - } - - if ($lifetime && $lifetime > 30 * 86400) { - $lifetime += time(); - } - - $encodedValues = []; - foreach ($values as $key => $value) { - $encodedValues[self::encodeKey($key)] = $value; - } - - return $this->checkResultCode($this->getClient()->setMulti($encodedValues, $lifetime)) ? $failed : false; - } - - /** - * {@inheritdoc} - */ - protected function doFetch(array $ids) - { - try { - $encodedIds = array_map([__CLASS__, 'encodeKey'], $ids); - - $encodedResult = $this->checkResultCode($this->getClient()->getMulti($encodedIds)); - - $result = []; - foreach ($encodedResult as $key => $value) { - $result[self::decodeKey($key)] = $this->marshaller->unmarshall($value); - } - - return $result; - } catch (\Error $e) { - throw new \ErrorException($e->getMessage(), $e->getCode(), \E_ERROR, $e->getFile(), $e->getLine()); - } - } - - /** - * {@inheritdoc} - */ - protected function doHave(string $id) - { - return false !== $this->getClient()->get(self::encodeKey($id)) || $this->checkResultCode(\Memcached::RES_SUCCESS === $this->client->getResultCode()); - } - - /** - * {@inheritdoc} - */ - protected function doDelete(array $ids) - { - $ok = true; - $encodedIds = array_map([__CLASS__, 'encodeKey'], $ids); - foreach ($this->checkResultCode($this->getClient()->deleteMulti($encodedIds)) as $result) { - if (\Memcached::RES_SUCCESS !== $result && \Memcached::RES_NOTFOUND !== $result) { - $ok = false; - } - } - - return $ok; - } - - /** - * {@inheritdoc} - */ - protected function doClear(string $namespace) - { - return '' === $namespace && $this->getClient()->flush(); - } - - private function checkResultCode($result) - { - $code = $this->client->getResultCode(); - - if (\Memcached::RES_SUCCESS === $code || \Memcached::RES_NOTFOUND === $code) { - return $result; - } - - throw new CacheException('MemcachedAdapter client error: '.strtolower($this->client->getResultMessage())); - } - - private function getClient(): \Memcached - { - if ($this->client) { - return $this->client; - } - - $opt = $this->lazyClient->getOption(\Memcached::OPT_SERIALIZER); - if (\Memcached::SERIALIZER_PHP !== $opt && \Memcached::SERIALIZER_IGBINARY !== $opt) { - throw new CacheException('MemcachedAdapter: "serializer" option must be "php" or "igbinary".'); - } - if ('' !== $prefix = (string) $this->lazyClient->getOption(\Memcached::OPT_PREFIX_KEY)) { - throw new CacheException(sprintf('MemcachedAdapter: "prefix_key" option must be empty when using proxified connections, "%s" given.', $prefix)); - } - - return $this->client = $this->lazyClient; - } - - private static function encodeKey(string $key): string - { - return strtr($key, self::RESERVED_MEMCACHED, self::RESERVED_PSR6); - } - - private static function decodeKey(string $key): string - { - return strtr($key, self::RESERVED_PSR6, self::RESERVED_MEMCACHED); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ParameterNormalizer.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ParameterNormalizer.php deleted file mode 100644 index e33ae9f..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/ParameterNormalizer.php +++ /dev/null @@ -1,35 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\Adapter; - -/** - * @author Lars Strojny - */ -final class ParameterNormalizer -{ - public static function normalizeDuration(string $duration): int - { - if (is_numeric($duration)) { - return $duration; - } - - if (false !== $time = strtotime($duration, 0)) { - return $time; - } - - try { - return \DateTime::createFromFormat('U', 0)->add(new \DateInterval($duration))->getTimestamp(); - } catch (\Exception $e) { - throw new \InvalidArgumentException(sprintf('Cannot parse date interval "%s".', $duration), 0, $e); - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php deleted file mode 100644 index 69461b8..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\Adapter; - -use Symfony\Contracts\Cache\TagAwareCacheInterface; - -/** - * @author Robin Chalas - */ -class TraceableTagAwareAdapter extends TraceableAdapter implements TagAwareAdapterInterface, TagAwareCacheInterface -{ - public function __construct(TagAwareAdapterInterface $pool) - { - parent::__construct($pool); - } - - /** - * {@inheritdoc} - */ - public function invalidateTags(array $tags) - { - $event = $this->start(__FUNCTION__); - try { - return $event->result = $this->pool->invalidateTags($tags); - } finally { - $event->end = microtime(true); - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/CHANGELOG.md deleted file mode 100644 index 60a8627..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/CHANGELOG.md +++ /dev/null @@ -1,108 +0,0 @@ -CHANGELOG -========= - -5.4 ---- - - * Deprecate `DoctrineProvider` and `DoctrineAdapter` because these classes have been added to the `doctrine/cache` package - * Add `DoctrineDbalAdapter` identical to `PdoAdapter` for `Doctrine\DBAL\Connection` or DBAL URL - * Deprecate usage of `PdoAdapter` with `Doctrine\DBAL\Connection` or DBAL URL - -5.3 ---- - - * added support for connecting to Redis Sentinel clusters when using the Redis PHP extension - * add support for a custom serializer to the `ApcuAdapter` class - -5.2.0 ------ - - * added integration with Messenger to allow computing cached values in a worker - * allow ISO 8601 time intervals to specify default lifetime - -5.1.0 ------ - - * added max-items + LRU + max-lifetime capabilities to `ArrayCache` - * added `CouchbaseBucketAdapter` - * added context `cache-adapter` to log messages - -5.0.0 ------ - - * removed all PSR-16 implementations in the `Simple` namespace - * removed `SimpleCacheAdapter` - * removed `AbstractAdapter::unserialize()` - * removed `CacheItem::getPreviousTags()` - -4.4.0 ------ - - * added support for connecting to Redis Sentinel clusters - * added argument `$prefix` to `AdapterInterface::clear()` - * improved `RedisTagAwareAdapter` to support Redis server >= 2.8 and up to 4B items per tag - * added `TagAwareMarshaller` for optimized data storage when using `AbstractTagAwareAdapter` - * added `DeflateMarshaller` to compress serialized values - * removed support for phpredis 4 `compression` - * [BC BREAK] `RedisTagAwareAdapter` is not compatible with `RedisCluster` from `Predis` anymore, use `phpredis` instead - * Marked the `CacheDataCollector` class as `@final`. - * added `SodiumMarshaller` to encrypt/decrypt values using libsodium - -4.3.0 ------ - - * removed `psr/simple-cache` dependency, run `composer require psr/simple-cache` if you need it - * deprecated all PSR-16 adapters, use `Psr16Cache` or `Symfony\Contracts\Cache\CacheInterface` implementations instead - * deprecated `SimpleCacheAdapter`, use `Psr16Adapter` instead - -4.2.0 ------ - - * added support for connecting to Redis clusters via DSN - * added support for configuring multiple Memcached servers via DSN - * added `MarshallerInterface` and `DefaultMarshaller` to allow changing the serializer and provide one that automatically uses igbinary when available - * implemented `CacheInterface`, which provides stampede protection via probabilistic early expiration and should become the preferred way to use a cache - * added sub-second expiry accuracy for backends that support it - * added support for phpredis 4 `compression` and `tcp_keepalive` options - * added automatic table creation when using Doctrine DBAL with PDO-based backends - * throw `LogicException` when `CacheItem::tag()` is called on an item coming from a non tag-aware pool - * deprecated `CacheItem::getPreviousTags()`, use `CacheItem::getMetadata()` instead - * deprecated the `AbstractAdapter::unserialize()` and `AbstractCache::unserialize()` methods - * added `CacheCollectorPass` (originally in `FrameworkBundle`) - * added `CachePoolClearerPass` (originally in `FrameworkBundle`) - * added `CachePoolPass` (originally in `FrameworkBundle`) - * added `CachePoolPrunerPass` (originally in `FrameworkBundle`) - -3.4.0 ------ - - * added using options from Memcached DSN - * added PruneableInterface so PSR-6 or PSR-16 cache implementations can declare support for manual stale cache pruning - * added prune logic to FilesystemTrait, PhpFilesTrait, PdoTrait, TagAwareAdapter and ChainTrait - * now FilesystemAdapter, PhpFilesAdapter, FilesystemCache, PhpFilesCache, PdoAdapter, PdoCache, ChainAdapter, and - ChainCache implement PruneableInterface and support manual stale cache pruning - -3.3.0 ------ - - * added CacheItem::getPreviousTags() to get bound tags coming from the pool storage if any - * added PSR-16 "Simple Cache" implementations for all existing PSR-6 adapters - * added Psr6Cache and SimpleCacheAdapter for bidirectional interoperability between PSR-6 and PSR-16 - * added MemcachedAdapter (PSR-6) and MemcachedCache (PSR-16) - * added TraceableAdapter (PSR-6) and TraceableCache (PSR-16) - -3.2.0 ------ - - * added TagAwareAdapter for tags-based invalidation - * added PdoAdapter with PDO and Doctrine DBAL support - * added PhpArrayAdapter and PhpFilesAdapter for OPcache-backed shared memory storage (PHP 7+ only) - * added NullAdapter - -3.1.0 ------ - - * added the component with strict PSR-6 implementations - * added ApcuAdapter, ArrayAdapter, FilesystemAdapter and RedisAdapter - * added AbstractAdapter, ChainAdapter and ProxyAdapter - * added DoctrineAdapter and DoctrineProvider for bidirectional interoperability with Doctrine Cache diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php deleted file mode 100644 index 843232e..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php +++ /dev/null @@ -1,94 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\DependencyInjection; - -use Symfony\Component\Cache\Adapter\TagAwareAdapterInterface; -use Symfony\Component\Cache\Adapter\TraceableAdapter; -use Symfony\Component\Cache\Adapter\TraceableTagAwareAdapter; -use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Reference; - -/** - * Inject a data collector to all the cache services to be able to get detailed statistics. - * - * @author Tobias Nyholm - */ -class CacheCollectorPass implements CompilerPassInterface -{ - private $dataCollectorCacheId; - private $cachePoolTag; - private $cachePoolRecorderInnerSuffix; - - public function __construct(string $dataCollectorCacheId = 'data_collector.cache', string $cachePoolTag = 'cache.pool', string $cachePoolRecorderInnerSuffix = '.recorder_inner') - { - if (0 < \func_num_args()) { - trigger_deprecation('symfony/cache', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - - $this->dataCollectorCacheId = $dataCollectorCacheId; - $this->cachePoolTag = $cachePoolTag; - $this->cachePoolRecorderInnerSuffix = $cachePoolRecorderInnerSuffix; - } - - /** - * {@inheritdoc} - */ - public function process(ContainerBuilder $container) - { - if (!$container->hasDefinition($this->dataCollectorCacheId)) { - return; - } - - foreach ($container->findTaggedServiceIds($this->cachePoolTag) as $id => $attributes) { - $poolName = $attributes[0]['name'] ?? $id; - - $this->addToCollector($id, $poolName, $container); - } - } - - private function addToCollector(string $id, string $name, ContainerBuilder $container) - { - $definition = $container->getDefinition($id); - if ($definition->isAbstract()) { - return; - } - - $collectorDefinition = $container->getDefinition($this->dataCollectorCacheId); - $recorder = new Definition(is_subclass_of($definition->getClass(), TagAwareAdapterInterface::class) ? TraceableTagAwareAdapter::class : TraceableAdapter::class); - $recorder->setTags($definition->getTags()); - if (!$definition->isPublic() || !$definition->isPrivate()) { - $recorder->setPublic($definition->isPublic()); - } - $recorder->setArguments([new Reference($innerId = $id.$this->cachePoolRecorderInnerSuffix)]); - - foreach ($definition->getMethodCalls() as [$method, $args]) { - if ('setCallbackWrapper' !== $method || !$args[0] instanceof Definition || !($args[0]->getArguments()[2] ?? null) instanceof Definition) { - continue; - } - if ([new Reference($id), 'setCallbackWrapper'] == $args[0]->getArguments()[2]->getFactory()) { - $args[0]->getArguments()[2]->setFactory([new Reference($innerId), 'setCallbackWrapper']); - } - } - - $definition->setTags([]); - $definition->setPublic(false); - - $container->setDefinition($innerId, $definition); - $container->setDefinition($id, $recorder); - - // Tell the collector to add the new instance - $collectorDefinition->addMethodCall('addInstance', [$name, new Reference($id)]); - $collectorDefinition->setPublic(false); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPass.php deleted file mode 100644 index 14ac2bd..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPass.php +++ /dev/null @@ -1,274 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\DependencyInjection; - -use Symfony\Component\Cache\Adapter\AbstractAdapter; -use Symfony\Component\Cache\Adapter\ArrayAdapter; -use Symfony\Component\Cache\Adapter\ChainAdapter; -use Symfony\Component\Cache\Adapter\NullAdapter; -use Symfony\Component\Cache\Adapter\ParameterNormalizer; -use Symfony\Component\Cache\Messenger\EarlyExpirationDispatcher; -use Symfony\Component\DependencyInjection\ChildDefinition; -use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Reference; - -/** - * @author Nicolas Grekas - */ -class CachePoolPass implements CompilerPassInterface -{ - private $cachePoolTag; - private $kernelResetTag; - private $cacheClearerId; - private $cachePoolClearerTag; - private $cacheSystemClearerId; - private $cacheSystemClearerTag; - private $reverseContainerId; - private $reversibleTag; - private $messageHandlerId; - - public function __construct(string $cachePoolTag = 'cache.pool', string $kernelResetTag = 'kernel.reset', string $cacheClearerId = 'cache.global_clearer', string $cachePoolClearerTag = 'cache.pool.clearer', string $cacheSystemClearerId = 'cache.system_clearer', string $cacheSystemClearerTag = 'kernel.cache_clearer', string $reverseContainerId = 'reverse_container', string $reversibleTag = 'container.reversible', string $messageHandlerId = 'cache.early_expiration_handler') - { - if (0 < \func_num_args()) { - trigger_deprecation('symfony/cache', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - - $this->cachePoolTag = $cachePoolTag; - $this->kernelResetTag = $kernelResetTag; - $this->cacheClearerId = $cacheClearerId; - $this->cachePoolClearerTag = $cachePoolClearerTag; - $this->cacheSystemClearerId = $cacheSystemClearerId; - $this->cacheSystemClearerTag = $cacheSystemClearerTag; - $this->reverseContainerId = $reverseContainerId; - $this->reversibleTag = $reversibleTag; - $this->messageHandlerId = $messageHandlerId; - } - - /** - * {@inheritdoc} - */ - public function process(ContainerBuilder $container) - { - if ($container->hasParameter('cache.prefix.seed')) { - $seed = $container->getParameterBag()->resolveValue($container->getParameter('cache.prefix.seed')); - } else { - $seed = '_'.$container->getParameter('kernel.project_dir'); - $seed .= '.'.$container->getParameter('kernel.container_class'); - } - - $needsMessageHandler = false; - $allPools = []; - $clearers = []; - $attributes = [ - 'provider', - 'name', - 'namespace', - 'default_lifetime', - 'early_expiration_message_bus', - 'reset', - ]; - foreach ($container->findTaggedServiceIds($this->cachePoolTag) as $id => $tags) { - $adapter = $pool = $container->getDefinition($id); - if ($pool->isAbstract()) { - continue; - } - $class = $adapter->getClass(); - while ($adapter instanceof ChildDefinition) { - $adapter = $container->findDefinition($adapter->getParent()); - $class = $class ?: $adapter->getClass(); - if ($t = $adapter->getTag($this->cachePoolTag)) { - $tags[0] += $t[0]; - } - } - $name = $tags[0]['name'] ?? $id; - if (!isset($tags[0]['namespace'])) { - $namespaceSeed = $seed; - if (null !== $class) { - $namespaceSeed .= '.'.$class; - } - - $tags[0]['namespace'] = $this->getNamespace($namespaceSeed, $name); - } - if (isset($tags[0]['clearer'])) { - $clearer = $tags[0]['clearer']; - while ($container->hasAlias($clearer)) { - $clearer = (string) $container->getAlias($clearer); - } - } else { - $clearer = null; - } - unset($tags[0]['clearer'], $tags[0]['name']); - - if (isset($tags[0]['provider'])) { - $tags[0]['provider'] = new Reference(static::getServiceProvider($container, $tags[0]['provider'])); - } - - if (ChainAdapter::class === $class) { - $adapters = []; - foreach ($adapter->getArgument(0) as $provider => $adapter) { - if ($adapter instanceof ChildDefinition) { - $chainedPool = $adapter; - } else { - $chainedPool = $adapter = new ChildDefinition($adapter); - } - - $chainedTags = [\is_int($provider) ? [] : ['provider' => $provider]]; - $chainedClass = ''; - - while ($adapter instanceof ChildDefinition) { - $adapter = $container->findDefinition($adapter->getParent()); - $chainedClass = $chainedClass ?: $adapter->getClass(); - if ($t = $adapter->getTag($this->cachePoolTag)) { - $chainedTags[0] += $t[0]; - } - } - - if (ChainAdapter::class === $chainedClass) { - throw new InvalidArgumentException(sprintf('Invalid service "%s": chain of adapters cannot reference another chain, found "%s".', $id, $chainedPool->getParent())); - } - - $i = 0; - - if (isset($chainedTags[0]['provider'])) { - $chainedPool->replaceArgument($i++, new Reference(static::getServiceProvider($container, $chainedTags[0]['provider']))); - } - - if (isset($tags[0]['namespace']) && !\in_array($adapter->getClass(), [ArrayAdapter::class, NullAdapter::class], true)) { - $chainedPool->replaceArgument($i++, $tags[0]['namespace']); - } - - if (isset($tags[0]['default_lifetime'])) { - $chainedPool->replaceArgument($i++, $tags[0]['default_lifetime']); - } - - $adapters[] = $chainedPool; - } - - $pool->replaceArgument(0, $adapters); - unset($tags[0]['provider'], $tags[0]['namespace']); - $i = 1; - } else { - $i = 0; - } - - foreach ($attributes as $attr) { - if (!isset($tags[0][$attr])) { - // no-op - } elseif ('reset' === $attr) { - if ($tags[0][$attr]) { - $pool->addTag($this->kernelResetTag, ['method' => $tags[0][$attr]]); - } - } elseif ('early_expiration_message_bus' === $attr) { - $needsMessageHandler = true; - $pool->addMethodCall('setCallbackWrapper', [(new Definition(EarlyExpirationDispatcher::class)) - ->addArgument(new Reference($tags[0]['early_expiration_message_bus'])) - ->addArgument(new Reference($this->reverseContainerId)) - ->addArgument((new Definition('callable')) - ->setFactory([new Reference($id), 'setCallbackWrapper']) - ->addArgument(null) - ), - ]); - $pool->addTag($this->reversibleTag); - } elseif ('namespace' !== $attr || !\in_array($class, [ArrayAdapter::class, NullAdapter::class], true)) { - $argument = $tags[0][$attr]; - - if ('default_lifetime' === $attr && !is_numeric($argument)) { - $argument = (new Definition('int', [$argument])) - ->setFactory([ParameterNormalizer::class, 'normalizeDuration']); - } - - $pool->replaceArgument($i++, $argument); - } - unset($tags[0][$attr]); - } - if (!empty($tags[0])) { - throw new InvalidArgumentException(sprintf('Invalid "%s" tag for service "%s": accepted attributes are "clearer", "provider", "name", "namespace", "default_lifetime", "early_expiration_message_bus" and "reset", found "%s".', $this->cachePoolTag, $id, implode('", "', array_keys($tags[0])))); - } - - if (null !== $clearer) { - $clearers[$clearer][$name] = new Reference($id, $container::IGNORE_ON_UNINITIALIZED_REFERENCE); - } - - $allPools[$name] = new Reference($id, $container::IGNORE_ON_UNINITIALIZED_REFERENCE); - } - - if (!$needsMessageHandler) { - $container->removeDefinition($this->messageHandlerId); - } - - $notAliasedCacheClearerId = $this->cacheClearerId; - while ($container->hasAlias($this->cacheClearerId)) { - $this->cacheClearerId = (string) $container->getAlias($this->cacheClearerId); - } - if ($container->hasDefinition($this->cacheClearerId)) { - $clearers[$notAliasedCacheClearerId] = $allPools; - } - - foreach ($clearers as $id => $pools) { - $clearer = $container->getDefinition($id); - if ($clearer instanceof ChildDefinition) { - $clearer->replaceArgument(0, $pools); - } else { - $clearer->setArgument(0, $pools); - } - $clearer->addTag($this->cachePoolClearerTag); - - if ($this->cacheSystemClearerId === $id) { - $clearer->addTag($this->cacheSystemClearerTag); - } - } - - $allPoolsKeys = array_keys($allPools); - - if ($container->hasDefinition('console.command.cache_pool_list')) { - $container->getDefinition('console.command.cache_pool_list')->replaceArgument(0, $allPoolsKeys); - } - - if ($container->hasDefinition('console.command.cache_pool_clear')) { - $container->getDefinition('console.command.cache_pool_clear')->addArgument($allPoolsKeys); - } - - if ($container->hasDefinition('console.command.cache_pool_delete')) { - $container->getDefinition('console.command.cache_pool_delete')->addArgument($allPoolsKeys); - } - } - - private function getNamespace(string $seed, string $id) - { - return substr(str_replace('/', '-', base64_encode(hash('sha256', $id.$seed, true))), 0, 10); - } - - /** - * @internal - */ - public static function getServiceProvider(ContainerBuilder $container, string $name) - { - $container->resolveEnvPlaceholders($name, null, $usedEnvs); - - if ($usedEnvs || preg_match('#^[a-z]++:#', $name)) { - $dsn = $name; - - if (!$container->hasDefinition($name = '.cache_connection.'.ContainerBuilder::hash($dsn))) { - $definition = new Definition(AbstractAdapter::class); - $definition->setPublic(false); - $definition->setFactory([AbstractAdapter::class, 'createConnection']); - $definition->setArguments([$dsn, ['lazy' => true]]); - $container->setDefinition($name, $definition); - } - } - - return $name; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php deleted file mode 100644 index 86a1906..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php +++ /dev/null @@ -1,64 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\DependencyInjection; - -use Symfony\Component\Cache\PruneableInterface; -use Symfony\Component\DependencyInjection\Argument\IteratorArgument; -use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Reference; - -/** - * @author Rob Frawley 2nd - */ -class CachePoolPrunerPass implements CompilerPassInterface -{ - private $cacheCommandServiceId; - private $cachePoolTag; - - public function __construct(string $cacheCommandServiceId = 'console.command.cache_pool_prune', string $cachePoolTag = 'cache.pool') - { - if (0 < \func_num_args()) { - trigger_deprecation('symfony/cache', '5.3', 'Configuring "%s" is deprecated.', __CLASS__); - } - - $this->cacheCommandServiceId = $cacheCommandServiceId; - $this->cachePoolTag = $cachePoolTag; - } - - /** - * {@inheritdoc} - */ - public function process(ContainerBuilder $container) - { - if (!$container->hasDefinition($this->cacheCommandServiceId)) { - return; - } - - $services = []; - - foreach ($container->findTaggedServiceIds($this->cachePoolTag) as $id => $tags) { - $class = $container->getParameterBag()->resolveValue($container->getDefinition($id)->getClass()); - - if (!$reflection = $container->getReflectionClass($class)) { - throw new InvalidArgumentException(sprintf('Class "%s" used for service "%s" cannot be found.', $class, $id)); - } - - if ($reflection->implementsInterface(PruneableInterface::class)) { - $services[$id] = new Reference($id); - } - } - - $container->getDefinition($this->cacheCommandServiceId)->replaceArgument(0, new IteratorArgument($services)); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DoctrineProvider.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DoctrineProvider.php deleted file mode 100644 index 7b55aae..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/DoctrineProvider.php +++ /dev/null @@ -1,124 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache; - -use Doctrine\Common\Cache\CacheProvider; -use Psr\Cache\CacheItemPoolInterface; -use Symfony\Contracts\Service\ResetInterface; - -if (!class_exists(CacheProvider::class)) { - return; -} - -/** - * @author Nicolas Grekas - * - * @deprecated Use Doctrine\Common\Cache\Psr6\DoctrineProvider instead - */ -class DoctrineProvider extends CacheProvider implements PruneableInterface, ResettableInterface -{ - private $pool; - - public function __construct(CacheItemPoolInterface $pool) - { - trigger_deprecation('symfony/cache', '5.4', '"%s" is deprecated, use "Doctrine\Common\Cache\Psr6\DoctrineProvider" instead.', __CLASS__); - - $this->pool = $pool; - } - - /** - * {@inheritdoc} - */ - public function prune() - { - return $this->pool instanceof PruneableInterface && $this->pool->prune(); - } - - /** - * {@inheritdoc} - */ - public function reset() - { - if ($this->pool instanceof ResetInterface) { - $this->pool->reset(); - } - $this->setNamespace($this->getNamespace()); - } - - /** - * {@inheritdoc} - * - * @return mixed - */ - protected function doFetch($id) - { - $item = $this->pool->getItem(rawurlencode($id)); - - return $item->isHit() ? $item->get() : false; - } - - /** - * {@inheritdoc} - * - * @return bool - */ - protected function doContains($id) - { - return $this->pool->hasItem(rawurlencode($id)); - } - - /** - * {@inheritdoc} - * - * @return bool - */ - protected function doSave($id, $data, $lifeTime = 0) - { - $item = $this->pool->getItem(rawurlencode($id)); - - if (0 < $lifeTime) { - $item->expiresAfter($lifeTime); - } - - return $this->pool->save($item->set($data)); - } - - /** - * {@inheritdoc} - * - * @return bool - */ - protected function doDelete($id) - { - return $this->pool->deleteItem(rawurlencode($id)); - } - - /** - * {@inheritdoc} - * - * @return bool - */ - protected function doFlush() - { - return $this->pool->clear(); - } - - /** - * {@inheritdoc} - * - * @return array|null - */ - protected function doGetStats() - { - return null; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/DeflateMarshaller.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/DeflateMarshaller.php deleted file mode 100644 index 5544806..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/DeflateMarshaller.php +++ /dev/null @@ -1,53 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\Marshaller; - -use Symfony\Component\Cache\Exception\CacheException; - -/** - * Compresses values using gzdeflate(). - * - * @author Nicolas Grekas - */ -class DeflateMarshaller implements MarshallerInterface -{ - private $marshaller; - - public function __construct(MarshallerInterface $marshaller) - { - if (!\function_exists('gzdeflate')) { - throw new CacheException('The "zlib" PHP extension is not loaded.'); - } - - $this->marshaller = $marshaller; - } - - /** - * {@inheritdoc} - */ - public function marshall(array $values, ?array &$failed): array - { - return array_map('gzdeflate', $this->marshaller->marshall($values, $failed)); - } - - /** - * {@inheritdoc} - */ - public function unmarshall(string $value) - { - if (false !== $inflatedValue = @gzinflate($value)) { - $value = $inflatedValue; - } - - return $this->marshaller->unmarshall($value); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php deleted file mode 100644 index 5d1e303..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php +++ /dev/null @@ -1,89 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\Marshaller; - -/** - * A marshaller optimized for data structures generated by AbstractTagAwareAdapter. - * - * @author Nicolas Grekas - */ -class TagAwareMarshaller implements MarshallerInterface -{ - private $marshaller; - - public function __construct(MarshallerInterface $marshaller = null) - { - $this->marshaller = $marshaller ?? new DefaultMarshaller(); - } - - /** - * {@inheritdoc} - */ - public function marshall(array $values, ?array &$failed): array - { - $failed = $notSerialized = $serialized = []; - - foreach ($values as $id => $value) { - if (\is_array($value) && \is_array($value['tags'] ?? null) && \array_key_exists('value', $value) && \count($value) === 2 + (\is_string($value['meta'] ?? null) && 8 === \strlen($value['meta']))) { - // if the value is an array with keys "tags", "value" and "meta", use a compact serialization format - // magic numbers in the form 9D-..-..-..-..-00-..-..-..-5F allow detecting this format quickly in unmarshall() - - $v = $this->marshaller->marshall($value, $f); - - if ($f) { - $f = []; - $failed[] = $id; - } else { - if ([] === $value['tags']) { - $v['tags'] = ''; - } - - $serialized[$id] = "\x9D".($value['meta'] ?? "\0\0\0\0\0\0\0\0").pack('N', \strlen($v['tags'])).$v['tags'].$v['value']; - $serialized[$id][9] = "\x5F"; - } - } else { - // other arbitratry values are serialized using the decorated marshaller below - $notSerialized[$id] = $value; - } - } - - if ($notSerialized) { - $serialized += $this->marshaller->marshall($notSerialized, $f); - $failed = array_merge($failed, $f); - } - - return $serialized; - } - - /** - * {@inheritdoc} - */ - public function unmarshall(string $value) - { - // detect the compact format used in marshall() using magic numbers in the form 9D-..-..-..-..-00-..-..-..-5F - if (13 >= \strlen($value) || "\x9D" !== $value[0] || "\0" !== $value[5] || "\x5F" !== $value[9]) { - return $this->marshaller->unmarshall($value); - } - - // data consists of value, tags and metadata which we need to unpack - $meta = substr($value, 1, 12); - $meta[8] = "\0"; - $tagLen = unpack('Nlen', $meta, 8)['len']; - $meta = substr($meta, 0, 8); - - return [ - 'value' => $this->marshaller->unmarshall(substr($value, 13 + $tagLen)), - 'tags' => $tagLen ? $this->marshaller->unmarshall(substr($value, 13, $tagLen)) : [], - 'meta' => "\0\0\0\0\0\0\0\0" === $meta ? null : $meta, - ]; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php deleted file mode 100644 index 6f11b8b..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php +++ /dev/null @@ -1,61 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Cache\Messenger; - -use Psr\Log\LoggerInterface; -use Symfony\Component\Cache\Adapter\AdapterInterface; -use Symfony\Component\Cache\CacheItem; -use Symfony\Component\DependencyInjection\ReverseContainer; -use Symfony\Component\Messenger\MessageBusInterface; -use Symfony\Component\Messenger\Stamp\HandledStamp; - -/** - * Sends the computation of cached values to a message bus. - */ -class EarlyExpirationDispatcher -{ - private $bus; - private $reverseContainer; - private $callbackWrapper; - - public function __construct(MessageBusInterface $bus, ReverseContainer $reverseContainer, callable $callbackWrapper = null) - { - $this->bus = $bus; - $this->reverseContainer = $reverseContainer; - $this->callbackWrapper = $callbackWrapper; - } - - public function __invoke(callable $callback, CacheItem $item, bool &$save, AdapterInterface $pool, \Closure $setMetadata, LoggerInterface $logger = null) - { - if (!$item->isHit() || null === $message = EarlyExpirationMessage::create($this->reverseContainer, $callback, $item, $pool)) { - // The item is stale or the callback cannot be reversed: we must compute the value now - $logger && $logger->info('Computing item "{key}" online: '.($item->isHit() ? 'callback cannot be reversed' : 'item is stale'), ['key' => $item->getKey()]); - - return null !== $this->callbackWrapper ? ($this->callbackWrapper)($callback, $item, $save, $pool, $setMetadata, $logger) : $callback($item, $save); - } - - $envelope = $this->bus->dispatch($message); - - if ($logger) { - if ($envelope->last(HandledStamp::class)) { - $logger->info('Item "{key}" was computed online', ['key' => $item->getKey()]); - } else { - $logger->info('Item "{key}" sent for recomputation', ['key' => $item->getKey()]); - } - } - - // The item's value is not stale, no need to write it to the backend - $save = false; - - return $message->getItem()->get() ?? $item->get(); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/README.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/README.md deleted file mode 100644 index 7405205..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/cache/README.md +++ /dev/null @@ -1,19 +0,0 @@ -Symfony PSR-6 implementation for caching -======================================== - -The Cache component provides an extended -[PSR-6](http://www.php-fig.org/psr/psr-6/) implementation for adding cache to -your applications. It is designed to have a low overhead so that caching is -fastest. It ships with a few caching adapters for the most widespread and -suited to caching backends. It also provides a `doctrine/cache` proxy adapter -to cover more advanced caching needs and a proxy adapter for greater -interoperability between PSR-6 implementations. - -Resources ---------- - - * [Documentation](https://symfony.com/doc/current/components/cache.html) - * [Contributing](https://symfony.com/doc/current/contributing/index.html) - * [Report issues](https://github.com/symfony/symfony/issues) and - [send Pull Requests](https://github.com/symfony/symfony/pulls) - in the [main Symfony repository](https://github.com/symfony/symfony) diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Builder/Property.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Builder/Property.php deleted file mode 100644 index 1b24c47..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Builder/Property.php +++ /dev/null @@ -1,75 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Builder; - -/** - * Represents a property when building classes. - * - * @internal - * - * @author Tobias Nyholm - */ -class Property -{ - private $name; - private $originalName; - private $array = false; - private $type = null; - private $content; - - public function __construct(string $originalName, string $name) - { - $this->name = $name; - $this->originalName = $originalName; - } - - public function getName(): string - { - return $this->name; - } - - public function getOriginalName(): string - { - return $this->originalName; - } - - public function setType(string $type): void - { - $this->array = false; - $this->type = $type; - - if ('[]' === substr($type, -2)) { - $this->array = true; - $this->type = substr($type, 0, -2); - } - } - - public function getType(): ?string - { - return $this->type; - } - - public function getContent(): ?string - { - return $this->content; - } - - public function setContent(string $content): void - { - $this->content = $content; - } - - public function isArray(): bool - { - return $this->array; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/ExprBuilder.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/ExprBuilder.php deleted file mode 100644 index 14387b5..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/ExprBuilder.php +++ /dev/null @@ -1,246 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Definition\Builder; - -use Symfony\Component\Config\Definition\Exception\UnsetKeyException; - -/** - * This class builds an if expression. - * - * @author Johannes M. Schmitt - * @author Christophe Coevoet - */ -class ExprBuilder -{ - protected $node; - public $ifPart; - public $thenPart; - - public function __construct(NodeDefinition $node) - { - $this->node = $node; - } - - /** - * Marks the expression as being always used. - * - * @return $this - */ - public function always(\Closure $then = null) - { - $this->ifPart = function () { return true; }; - - if (null !== $then) { - $this->thenPart = $then; - } - - return $this; - } - - /** - * Sets a closure to use as tests. - * - * The default one tests if the value is true. - * - * @return $this - */ - public function ifTrue(\Closure $closure = null) - { - if (null === $closure) { - $closure = function ($v) { return true === $v; }; - } - - $this->ifPart = $closure; - - return $this; - } - - /** - * Tests if the value is a string. - * - * @return $this - */ - public function ifString() - { - $this->ifPart = function ($v) { return \is_string($v); }; - - return $this; - } - - /** - * Tests if the value is null. - * - * @return $this - */ - public function ifNull() - { - $this->ifPart = function ($v) { return null === $v; }; - - return $this; - } - - /** - * Tests if the value is empty. - * - * @return $this - */ - public function ifEmpty() - { - $this->ifPart = function ($v) { return empty($v); }; - - return $this; - } - - /** - * Tests if the value is an array. - * - * @return $this - */ - public function ifArray() - { - $this->ifPart = function ($v) { return \is_array($v); }; - - return $this; - } - - /** - * Tests if the value is in an array. - * - * @return $this - */ - public function ifInArray(array $array) - { - $this->ifPart = function ($v) use ($array) { return \in_array($v, $array, true); }; - - return $this; - } - - /** - * Tests if the value is not in an array. - * - * @return $this - */ - public function ifNotInArray(array $array) - { - $this->ifPart = function ($v) use ($array) { return !\in_array($v, $array, true); }; - - return $this; - } - - /** - * Transforms variables of any type into an array. - * - * @return $this - */ - public function castToArray() - { - $this->ifPart = function ($v) { return !\is_array($v); }; - $this->thenPart = function ($v) { return [$v]; }; - - return $this; - } - - /** - * Sets the closure to run if the test pass. - * - * @return $this - */ - public function then(\Closure $closure) - { - $this->thenPart = $closure; - - return $this; - } - - /** - * Sets a closure returning an empty array. - * - * @return $this - */ - public function thenEmptyArray() - { - $this->thenPart = function () { return []; }; - - return $this; - } - - /** - * Sets a closure marking the value as invalid at processing time. - * - * if you want to add the value of the node in your message just use a %s placeholder. - * - * @return $this - * - * @throws \InvalidArgumentException - */ - public function thenInvalid(string $message) - { - $this->thenPart = function ($v) use ($message) { throw new \InvalidArgumentException(sprintf($message, json_encode($v))); }; - - return $this; - } - - /** - * Sets a closure unsetting this key of the array at processing time. - * - * @return $this - * - * @throws UnsetKeyException - */ - public function thenUnset() - { - $this->thenPart = function () { throw new UnsetKeyException('Unsetting key.'); }; - - return $this; - } - - /** - * Returns the related node. - * - * @return NodeDefinition|ArrayNodeDefinition|VariableNodeDefinition - * - * @throws \RuntimeException - */ - public function end() - { - if (null === $this->ifPart) { - throw new \RuntimeException('You must specify an if part.'); - } - if (null === $this->thenPart) { - throw new \RuntimeException('You must specify a then part.'); - } - - return $this->node; - } - - /** - * Builds the expressions. - * - * @param ExprBuilder[] $expressions An array of ExprBuilder instances to build - * - * @return array - */ - public static function buildExpressions(array $expressions) - { - foreach ($expressions as $k => $expr) { - if ($expr instanceof self) { - $if = $expr->ifPart; - $then = $expr->thenPart; - $expressions[$k] = function ($v) use ($if, $then) { - return $if($v) ? $then($v) : $v; - }; - } - } - - return $expressions; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php deleted file mode 100644 index d28e5ae..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php +++ /dev/null @@ -1,32 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Definition\Builder; - -use Symfony\Component\Config\Definition\IntegerNode; - -/** - * This class provides a fluent interface for defining an integer node. - * - * @author Jeanmonod David - */ -class IntegerNodeDefinition extends NumericNodeDefinition -{ - /** - * Instantiates a Node. - * - * @return IntegerNode - */ - protected function instantiateNode() - { - return new IntegerNode($this->name, $this->parent, $this->min, $this->max, $this->pathSeparator); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/MergeBuilder.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/MergeBuilder.php deleted file mode 100644 index a88d49b..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/MergeBuilder.php +++ /dev/null @@ -1,63 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Definition\Builder; - -/** - * This class builds merge conditions. - * - * @author Johannes M. Schmitt - */ -class MergeBuilder -{ - protected $node; - public $allowFalse = false; - public $allowOverwrite = true; - - public function __construct(NodeDefinition $node) - { - $this->node = $node; - } - - /** - * Sets whether the node can be unset. - * - * @return $this - */ - public function allowUnset(bool $allow = true) - { - $this->allowFalse = $allow; - - return $this; - } - - /** - * Sets whether the node can be overwritten. - * - * @return $this - */ - public function denyOverwrite(bool $deny = true) - { - $this->allowOverwrite = !$deny; - - return $this; - } - - /** - * Returns the related node. - * - * @return NodeDefinition|ArrayNodeDefinition|VariableNodeDefinition - */ - public function end() - { - return $this->node; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NodeParentInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NodeParentInterface.php deleted file mode 100644 index 305e993..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NodeParentInterface.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Definition\Builder; - -/** - * An interface that must be implemented by all node parents. - * - * @author Victor Berchet - */ -interface NodeParentInterface -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php deleted file mode 100644 index c4bff17..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php +++ /dev/null @@ -1,73 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Definition\Builder; - -use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException; - -/** - * Abstract class that contains common code of integer and float node definitions. - * - * @author David Jeanmonod - */ -abstract class NumericNodeDefinition extends ScalarNodeDefinition -{ - protected $min; - protected $max; - - /** - * Ensures that the value is smaller than the given reference. - * - * @param int|float $max - * - * @return $this - * - * @throws \InvalidArgumentException when the constraint is inconsistent - */ - public function max($max) - { - if (isset($this->min) && $this->min > $max) { - throw new \InvalidArgumentException(sprintf('You cannot define a max(%s) as you already have a min(%s).', $max, $this->min)); - } - $this->max = $max; - - return $this; - } - - /** - * Ensures that the value is bigger than the given reference. - * - * @param int|float $min - * - * @return $this - * - * @throws \InvalidArgumentException when the constraint is inconsistent - */ - public function min($min) - { - if (isset($this->max) && $this->max < $min) { - throw new \InvalidArgumentException(sprintf('You cannot define a min(%s) as you already have a max(%s).', $min, $this->max)); - } - $this->min = $min; - - return $this; - } - - /** - * {@inheritdoc} - * - * @throws InvalidDefinitionException - */ - public function cannotBeEmpty() - { - throw new InvalidDefinitionException('->cannotBeEmpty() is not applicable to NumericNodeDefinition.'); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidDefinitionException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidDefinitionException.php deleted file mode 100644 index 98310da..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidDefinitionException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Definition\Exception; - -/** - * Thrown when an error is detected in a node Definition. - * - * @author Victor Berchet - */ -class InvalidDefinitionException extends Exception -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidTypeException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidTypeException.php deleted file mode 100644 index d7ca8c9..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/InvalidTypeException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Definition\Exception; - -/** - * This exception is thrown if an invalid type is encountered. - * - * @author Johannes M. Schmitt - */ -class InvalidTypeException extends InvalidConfigurationException -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/UnsetKeyException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/UnsetKeyException.php deleted file mode 100644 index 863181a..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/Exception/UnsetKeyException.php +++ /dev/null @@ -1,22 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Definition\Exception; - -/** - * This exception is usually not encountered by the end-user, but only used - * internally to signal the parent scope to unset a key. - * - * @author Johannes M. Schmitt - */ -class UnsetKeyException extends Exception -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/IntegerNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/IntegerNode.php deleted file mode 100644 index dfb4cc6..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Definition/IntegerNode.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Definition; - -use Symfony\Component\Config\Definition\Exception\InvalidTypeException; - -/** - * This node represents an integer value in the config tree. - * - * @author Jeanmonod David - */ -class IntegerNode extends NumericNode -{ - /** - * {@inheritdoc} - */ - protected function validateType($value) - { - if (!\is_int($value)) { - $ex = new InvalidTypeException(sprintf('Invalid type for path "%s". Expected "int", but got "%s".', $this->getPath(), get_debug_type($value))); - if ($hint = $this->getInfo()) { - $ex->addHint($hint); - } - $ex->setPath($this->getPath()); - - throw $ex; - } - } - - /** - * {@inheritdoc} - */ - protected function getValidPlaceholderTypes(): array - { - return ['int']; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderInterface.php deleted file mode 100644 index 93a160b..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderInterface.php +++ /dev/null @@ -1,52 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Loader; - -/** - * LoaderInterface is the interface implemented by all loader classes. - * - * @author Fabien Potencier - */ -interface LoaderInterface -{ - /** - * Loads a resource. - * - * @param mixed $resource The resource - * - * @return mixed - * - * @throws \Exception If something went wrong - */ - public function load($resource, string $type = null); - - /** - * Returns whether this class supports the given resource. - * - * @param mixed $resource A resource - * - * @return bool - */ - public function supports($resource, string $type = null); - - /** - * Gets the loader resolver. - * - * @return LoaderResolverInterface - */ - public function getResolver(); - - /** - * Sets the loader resolver. - */ - public function setResolver(LoaderResolverInterface $resolver); -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolver.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolver.php deleted file mode 100644 index cce0702..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolver.php +++ /dev/null @@ -1,68 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Loader; - -/** - * LoaderResolver selects a loader for a given resource. - * - * A resource can be anything (e.g. a full path to a config file or a Closure). - * Each loader determines whether it can load a resource and how. - * - * @author Fabien Potencier - */ -class LoaderResolver implements LoaderResolverInterface -{ - /** - * @var LoaderInterface[] An array of LoaderInterface objects - */ - private $loaders = []; - - /** - * @param LoaderInterface[] $loaders An array of loaders - */ - public function __construct(array $loaders = []) - { - foreach ($loaders as $loader) { - $this->addLoader($loader); - } - } - - /** - * {@inheritdoc} - */ - public function resolve($resource, string $type = null) - { - foreach ($this->loaders as $loader) { - if ($loader->supports($resource, $type)) { - return $loader; - } - } - - return false; - } - - public function addLoader(LoaderInterface $loader) - { - $this->loaders[] = $loader; - $loader->setResolver($this); - } - - /** - * Returns the registered loaders. - * - * @return LoaderInterface[] - */ - public function getLoaders() - { - return $this->loaders; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolverInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolverInterface.php deleted file mode 100644 index 8a48419..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Loader/LoaderResolverInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Loader; - -/** - * LoaderResolverInterface selects a loader for a given resource. - * - * @author Fabien Potencier - */ -interface LoaderResolverInterface -{ - /** - * Returns a loader able to load the resource. - * - * @param mixed $resource A resource - * @param string|null $type The resource type or null if unknown - * - * @return LoaderInterface|false - */ - public function resolve($resource, string $type = null); -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/InvalidXmlException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/InvalidXmlException.php deleted file mode 100644 index 155571c..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/InvalidXmlException.php +++ /dev/null @@ -1,22 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Util\Exception; - -/** - * Exception class for when XML parsing with an XSD schema file path or a callable validator produces errors unrelated - * to the actual XML parsing. - * - * @author Ole Rößner - */ -class InvalidXmlException extends XmlParsingException -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/XmlParsingException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/XmlParsingException.php deleted file mode 100644 index 9bceed6..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/config/Util/Exception/XmlParsingException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Config\Util\Exception; - -/** - * Exception class for when XML cannot be parsed properly. - * - * @author Ole Rößner - */ -class XmlParsingException extends \InvalidArgumentException -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/AbstractArgument.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/AbstractArgument.php deleted file mode 100644 index 3ba5ff3..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/AbstractArgument.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Argument; - -/** - * Represents an abstract service argument, which have to be set by a compiler pass or a DI extension. - */ -final class AbstractArgument -{ - private $text; - private $context; - - public function __construct(string $text = '') - { - $this->text = trim($text, '. '); - } - - public function setContext(string $context): void - { - $this->context = $context.' is abstract'.('' === $this->text ? '' : ': '); - } - - public function getText(): string - { - return $this->text; - } - - public function getTextWithContext(): string - { - return $this->context.$this->text.'.'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php deleted file mode 100644 index 150c9bf..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php +++ /dev/null @@ -1,54 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Argument; - -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Reference; - -/** - * @author Titouan Galopin - * @author Nicolas Grekas - */ -trait ReferenceSetArgumentTrait -{ - private $values; - - /** - * @param Reference[] $values - */ - public function __construct(array $values) - { - $this->setValues($values); - } - - /** - * @return Reference[] - */ - public function getValues() - { - return $this->values; - } - - /** - * @param Reference[] $values The service references to put in the set - */ - public function setValues(array $values) - { - foreach ($values as $k => $v) { - if (null !== $v && !$v instanceof Reference) { - throw new InvalidArgumentException(sprintf('A "%s" must hold only Reference instances, "%s" given.', __CLASS__, get_debug_type($v))); - } - } - - $this->values = $values; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php deleted file mode 100644 index 41fec78..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/RewindableGenerator.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Argument; - -/** - * @internal - */ -class RewindableGenerator implements \IteratorAggregate, \Countable -{ - private $generator; - private $count; - - /** - * @param int|callable $count - */ - public function __construct(callable $generator, $count) - { - $this->generator = $generator; - $this->count = $count; - } - - public function getIterator(): \Traversable - { - $g = $this->generator; - - return $g(); - } - - public function count(): int - { - if (\is_callable($count = $this->count)) { - $this->count = $count(); - } - - return $this->count; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php deleted file mode 100644 index 1ba8de7..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php +++ /dev/null @@ -1,73 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Argument; - -/** - * Represents a collection of services found by tag name to lazily iterate over. - * - * @author Roland Franssen - */ -class TaggedIteratorArgument extends IteratorArgument -{ - private $tag; - private $indexAttribute; - private $defaultIndexMethod; - private $defaultPriorityMethod; - private $needsIndexes = false; - - /** - * @param string $tag The name of the tag identifying the target services - * @param string|null $indexAttribute The name of the attribute that defines the key referencing each service in the tagged collection - * @param string|null $defaultIndexMethod The static method that should be called to get each service's key when their tag doesn't define the previous attribute - * @param bool $needsIndexes Whether indexes are required and should be generated when computing the map - * @param string|null $defaultPriorityMethod The static method that should be called to get each service's priority when their tag doesn't define the "priority" attribute - */ - public function __construct(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null, bool $needsIndexes = false, string $defaultPriorityMethod = null) - { - parent::__construct([]); - - if (null === $indexAttribute && $needsIndexes) { - $indexAttribute = preg_match('/[^.]++$/', $tag, $m) ? $m[0] : $tag; - } - - $this->tag = $tag; - $this->indexAttribute = $indexAttribute; - $this->defaultIndexMethod = $defaultIndexMethod ?: ($indexAttribute ? 'getDefault'.str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $indexAttribute))).'Name' : null); - $this->needsIndexes = $needsIndexes; - $this->defaultPriorityMethod = $defaultPriorityMethod ?: ($indexAttribute ? 'getDefault'.str_replace(' ', '', ucwords(preg_replace('/[^a-zA-Z0-9\x7f-\xff]++/', ' ', $indexAttribute))).'Priority' : null); - } - - public function getTag() - { - return $this->tag; - } - - public function getIndexAttribute(): ?string - { - return $this->indexAttribute; - } - - public function getDefaultIndexMethod(): ?string - { - return $this->defaultIndexMethod; - } - - public function needsIndexes(): bool - { - return $this->needsIndexes; - } - - public function getDefaultPriorityMethod(): ?string - { - return $this->defaultPriorityMethod; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php deleted file mode 100644 index 00ebdfe..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php +++ /dev/null @@ -1,223 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\Argument\ArgumentInterface; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; -use Symfony\Component\DependencyInjection\Reference; - -/** - * Inline service definitions where this is possible. - * - * @author Johannes M. Schmitt - */ -class InlineServiceDefinitionsPass extends AbstractRecursivePass -{ - private $analyzingPass; - private $cloningIds = []; - private $connectedIds = []; - private $notInlinedIds = []; - private $inlinedIds = []; - private $notInlinableIds = []; - private $graph; - - public function __construct(AnalyzeServiceReferencesPass $analyzingPass = null) - { - $this->analyzingPass = $analyzingPass; - } - - public function process(ContainerBuilder $container) - { - $this->container = $container; - if ($this->analyzingPass) { - $analyzedContainer = new ContainerBuilder(); - $analyzedContainer->setAliases($container->getAliases()); - $analyzedContainer->setDefinitions($container->getDefinitions()); - foreach ($container->getExpressionLanguageProviders() as $provider) { - $analyzedContainer->addExpressionLanguageProvider($provider); - } - } else { - $analyzedContainer = $container; - } - try { - $remainingInlinedIds = []; - $this->connectedIds = $this->notInlinedIds = $container->getDefinitions(); - do { - if ($this->analyzingPass) { - $analyzedContainer->setDefinitions(array_intersect_key($analyzedContainer->getDefinitions(), $this->connectedIds)); - $this->analyzingPass->process($analyzedContainer); - } - $this->graph = $analyzedContainer->getCompiler()->getServiceReferenceGraph(); - $notInlinedIds = $this->notInlinedIds; - $this->connectedIds = $this->notInlinedIds = $this->inlinedIds = []; - - foreach ($analyzedContainer->getDefinitions() as $id => $definition) { - if (!$this->graph->hasNode($id)) { - continue; - } - foreach ($this->graph->getNode($id)->getOutEdges() as $edge) { - if (isset($notInlinedIds[$edge->getSourceNode()->getId()])) { - $this->currentId = $id; - $this->processValue($definition, true); - break; - } - } - } - - foreach ($this->inlinedIds as $id => $isPublicOrNotShared) { - if ($isPublicOrNotShared) { - $remainingInlinedIds[$id] = $id; - } else { - $container->removeDefinition($id); - $analyzedContainer->removeDefinition($id); - } - } - } while ($this->inlinedIds && $this->analyzingPass); - - foreach ($remainingInlinedIds as $id) { - if (isset($this->notInlinableIds[$id])) { - continue; - } - - $definition = $container->getDefinition($id); - - if (!$definition->isShared() && !$definition->isPublic()) { - $container->removeDefinition($id); - } - } - } finally { - $this->container = null; - $this->connectedIds = $this->notInlinedIds = $this->inlinedIds = []; - $this->notInlinableIds = []; - $this->graph = null; - } - } - - /** - * {@inheritdoc} - */ - protected function processValue($value, bool $isRoot = false) - { - if ($value instanceof ArgumentInterface) { - // References found in ArgumentInterface::getValues() are not inlineable - return $value; - } - - if ($value instanceof Definition && $this->cloningIds) { - if ($value->isShared()) { - return $value; - } - $value = clone $value; - } - - if (!$value instanceof Reference) { - return parent::processValue($value, $isRoot); - } elseif (!$this->container->hasDefinition($id = (string) $value)) { - return $value; - } - - $definition = $this->container->getDefinition($id); - - if (!$this->isInlineableDefinition($id, $definition)) { - $this->notInlinableIds[$id] = true; - - return $value; - } - - $this->container->log($this, sprintf('Inlined service "%s" to "%s".', $id, $this->currentId)); - $this->inlinedIds[$id] = $definition->isPublic() || !$definition->isShared(); - $this->notInlinedIds[$this->currentId] = true; - - if ($definition->isShared()) { - return $definition; - } - - if (isset($this->cloningIds[$id])) { - $ids = array_keys($this->cloningIds); - $ids[] = $id; - - throw new ServiceCircularReferenceException($id, \array_slice($ids, array_search($id, $ids))); - } - - $this->cloningIds[$id] = true; - try { - return $this->processValue($definition); - } finally { - unset($this->cloningIds[$id]); - } - } - - /** - * Checks if the definition is inlineable. - */ - private function isInlineableDefinition(string $id, Definition $definition): bool - { - if ($definition->hasErrors() || $definition->isDeprecated() || $definition->isLazy() || $definition->isSynthetic()) { - return false; - } - - if (!$definition->isShared()) { - if (!$this->graph->hasNode($id)) { - return true; - } - - foreach ($this->graph->getNode($id)->getInEdges() as $edge) { - $srcId = $edge->getSourceNode()->getId(); - $this->connectedIds[$srcId] = true; - if ($edge->isWeak() || $edge->isLazy()) { - return !$this->connectedIds[$id] = true; - } - } - - return true; - } - - if ($definition->isPublic()) { - return false; - } - - if (!$this->graph->hasNode($id)) { - return true; - } - - if ($this->currentId == $id) { - return false; - } - $this->connectedIds[$id] = true; - - $srcIds = []; - $srcCount = 0; - foreach ($this->graph->getNode($id)->getInEdges() as $edge) { - $srcId = $edge->getSourceNode()->getId(); - $this->connectedIds[$srcId] = true; - if ($edge->isWeak() || $edge->isLazy()) { - return false; - } - $srcIds[$srcId] = true; - ++$srcCount; - } - - if (1 !== \count($srcIds)) { - $this->notInlinedIds[$id] = true; - - return false; - } - - if ($srcCount > 1 && \is_array($factory = $definition->getFactory()) && ($factory[0] instanceof Reference || $factory[0] instanceof Definition)) { - return false; - } - - return $this->container->getDefinition($srcId)->isShared(); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php deleted file mode 100644 index 04b6852..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php +++ /dev/null @@ -1,33 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\ContainerBuilder; - -/** - * Removes abstract Definitions. - */ -class RemoveAbstractDefinitionsPass implements CompilerPassInterface -{ - /** - * Removes abstract definitions from the ContainerBuilder. - */ - public function process(ContainerBuilder $container) - { - foreach ($container->getDefinitions() as $id => $definition) { - if ($definition->isAbstract()) { - $container->removeDefinition($id); - $container->log($this, sprintf('Removed service "%s"; reason: abstract.', $id)); - } - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php deleted file mode 100644 index 75b36d2..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\ContainerBuilder; - -/** - * Remove private aliases from the container. They were only used to establish - * dependencies between services, and these dependencies have been resolved in - * one of the previous passes. - * - * @author Johannes M. Schmitt - */ -class RemovePrivateAliasesPass implements CompilerPassInterface -{ - /** - * Removes private aliases from the ContainerBuilder. - */ - public function process(ContainerBuilder $container) - { - foreach ($container->getAliases() as $id => $alias) { - if ($alias->isPublic()) { - continue; - } - - $container->removeAlias($id); - $container->log($this, sprintf('Removed service "%s"; reason: private alias.', $id)); - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php deleted file mode 100644 index 5bc3791..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php +++ /dev/null @@ -1,246 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\Argument\BoundArgument; -use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; -use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; -use Symfony\Component\DependencyInjection\Attribute\Target; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Exception\RuntimeException; -use Symfony\Component\DependencyInjection\LazyProxy\ProxyHelper; -use Symfony\Component\DependencyInjection\Reference; -use Symfony\Component\DependencyInjection\TypedReference; - -/** - * @author Guilhem Niot - */ -class ResolveBindingsPass extends AbstractRecursivePass -{ - private $usedBindings = []; - private $unusedBindings = []; - private $errorMessages = []; - - /** - * {@inheritdoc} - */ - public function process(ContainerBuilder $container) - { - $this->usedBindings = $container->getRemovedBindingIds(); - - try { - parent::process($container); - - foreach ($this->unusedBindings as [$key, $serviceId, $bindingType, $file]) { - $argumentType = $argumentName = $message = null; - - if (str_contains($key, ' ')) { - [$argumentType, $argumentName] = explode(' ', $key, 2); - } elseif ('$' === $key[0]) { - $argumentName = $key; - } else { - $argumentType = $key; - } - - if ($argumentType) { - $message .= sprintf('of type "%s" ', $argumentType); - } - - if ($argumentName) { - $message .= sprintf('named "%s" ', $argumentName); - } - - if (BoundArgument::DEFAULTS_BINDING === $bindingType) { - $message .= 'under "_defaults"'; - } elseif (BoundArgument::INSTANCEOF_BINDING === $bindingType) { - $message .= 'under "_instanceof"'; - } else { - $message .= sprintf('for service "%s"', $serviceId); - } - - if ($file) { - $message .= sprintf(' in file "%s"', $file); - } - - $message = sprintf('A binding is configured for an argument %s, but no corresponding argument has been found. It may be unused and should be removed, or it may have a typo.', $message); - - if ($this->errorMessages) { - $message .= sprintf("\nCould be related to%s:", 1 < \count($this->errorMessages) ? ' one of' : ''); - } - foreach ($this->errorMessages as $m) { - $message .= "\n - ".$m; - } - throw new InvalidArgumentException($message); - } - } finally { - $this->usedBindings = []; - $this->unusedBindings = []; - $this->errorMessages = []; - } - } - - /** - * {@inheritdoc} - */ - protected function processValue($value, bool $isRoot = false) - { - if ($value instanceof TypedReference && $value->getType() === (string) $value) { - // Already checked - $bindings = $this->container->getDefinition($this->currentId)->getBindings(); - $name = $value->getName(); - - if (isset($name, $bindings[$name = $value.' $'.$name])) { - return $this->getBindingValue($bindings[$name]); - } - - if (isset($bindings[$value->getType()])) { - return $this->getBindingValue($bindings[$value->getType()]); - } - - return parent::processValue($value, $isRoot); - } - - if (!$value instanceof Definition || !$bindings = $value->getBindings()) { - return parent::processValue($value, $isRoot); - } - - $bindingNames = []; - - foreach ($bindings as $key => $binding) { - [$bindingValue, $bindingId, $used, $bindingType, $file] = $binding->getValues(); - if ($used) { - $this->usedBindings[$bindingId] = true; - unset($this->unusedBindings[$bindingId]); - } elseif (!isset($this->usedBindings[$bindingId])) { - $this->unusedBindings[$bindingId] = [$key, $this->currentId, $bindingType, $file]; - } - - if (preg_match('/^(?:(?:array|bool|float|int|string|iterable|([^ $]++)) )\$/', $key, $m)) { - $bindingNames[substr($key, \strlen($m[0]))] = $binding; - } - - if (!isset($m[1])) { - continue; - } - - if (is_subclass_of($m[1], \UnitEnum::class)) { - $bindingNames[substr($key, \strlen($m[0]))] = $binding; - continue; - } - - if (null !== $bindingValue && !$bindingValue instanceof Reference && !$bindingValue instanceof Definition && !$bindingValue instanceof TaggedIteratorArgument && !$bindingValue instanceof ServiceLocatorArgument) { - throw new InvalidArgumentException(sprintf('Invalid value for binding key "%s" for service "%s": expected "%s", "%s", "%s", "%s" or null, "%s" given.', $key, $this->currentId, Reference::class, Definition::class, TaggedIteratorArgument::class, ServiceLocatorArgument::class, get_debug_type($bindingValue))); - } - } - - if ($value->isAbstract()) { - return parent::processValue($value, $isRoot); - } - - $calls = $value->getMethodCalls(); - - try { - if ($constructor = $this->getConstructor($value, false)) { - $calls[] = [$constructor, $value->getArguments()]; - } - } catch (RuntimeException $e) { - $this->errorMessages[] = $e->getMessage(); - $this->container->getDefinition($this->currentId)->addError($e->getMessage()); - - return parent::processValue($value, $isRoot); - } - - foreach ($calls as $i => $call) { - [$method, $arguments] = $call; - - if ($method instanceof \ReflectionFunctionAbstract) { - $reflectionMethod = $method; - } else { - try { - $reflectionMethod = $this->getReflectionMethod($value, $method); - } catch (RuntimeException $e) { - if ($value->getFactory()) { - continue; - } - throw $e; - } - } - - foreach ($reflectionMethod->getParameters() as $key => $parameter) { - if (\array_key_exists($key, $arguments) && '' !== $arguments[$key]) { - continue; - } - - $typeHint = ProxyHelper::getTypeHint($reflectionMethod, $parameter); - $name = Target::parseName($parameter); - - if ($typeHint && \array_key_exists($k = ltrim($typeHint, '\\').' $'.$name, $bindings)) { - $arguments[$key] = $this->getBindingValue($bindings[$k]); - - continue; - } - - if (\array_key_exists('$'.$name, $bindings)) { - $arguments[$key] = $this->getBindingValue($bindings['$'.$name]); - - continue; - } - - if ($typeHint && '\\' === $typeHint[0] && isset($bindings[$typeHint = substr($typeHint, 1)])) { - $arguments[$key] = $this->getBindingValue($bindings[$typeHint]); - - continue; - } - - if (isset($bindingNames[$name]) || isset($bindingNames[$parameter->name])) { - $bindingKey = array_search($binding, $bindings, true); - $argumentType = substr($bindingKey, 0, strpos($bindingKey, ' ')); - $this->errorMessages[] = sprintf('Did you forget to add the type "%s" to argument "$%s" of method "%s::%s()"?', $argumentType, $parameter->name, $reflectionMethod->class, $reflectionMethod->name); - } - } - - if ($arguments !== $call[1]) { - ksort($arguments); - $calls[$i][1] = $arguments; - } - } - - if ($constructor) { - [, $arguments] = array_pop($calls); - - if ($arguments !== $value->getArguments()) { - $value->setArguments($arguments); - } - } - - if ($calls !== $value->getMethodCalls()) { - $value->setMethodCalls($calls); - } - - return parent::processValue($value, $isRoot); - } - - /** - * @return mixed - */ - private function getBindingValue(BoundArgument $binding) - { - [$bindingValue, $bindingId] = $binding->getValues(); - - $this->usedBindings[$bindingId] = true; - unset($this->unusedBindings[$bindingId]); - - return $bindingValue; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php deleted file mode 100644 index 46a2d78..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php +++ /dev/null @@ -1,198 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\ChildDefinition; -use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\ExceptionInterface; -use Symfony\Component\DependencyInjection\Exception\RuntimeException; -use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; - -/** - * This replaces all ChildDefinition instances with their equivalent fully - * merged Definition instance. - * - * @author Johannes M. Schmitt - * @author Nicolas Grekas - */ -class ResolveChildDefinitionsPass extends AbstractRecursivePass -{ - private $currentPath; - - protected function processValue($value, bool $isRoot = false) - { - if (!$value instanceof Definition) { - return parent::processValue($value, $isRoot); - } - if ($isRoot) { - // yes, we are specifically fetching the definition from the - // container to ensure we are not operating on stale data - $value = $this->container->getDefinition($this->currentId); - } - if ($value instanceof ChildDefinition) { - $this->currentPath = []; - $value = $this->resolveDefinition($value); - if ($isRoot) { - $this->container->setDefinition($this->currentId, $value); - } - } - - return parent::processValue($value, $isRoot); - } - - /** - * Resolves the definition. - * - * @throws RuntimeException When the definition is invalid - */ - private function resolveDefinition(ChildDefinition $definition): Definition - { - try { - return $this->doResolveDefinition($definition); - } catch (ServiceCircularReferenceException $e) { - throw $e; - } catch (ExceptionInterface $e) { - $r = new \ReflectionProperty($e, 'message'); - $r->setAccessible(true); - $r->setValue($e, sprintf('Service "%s": %s', $this->currentId, $e->getMessage())); - - throw $e; - } - } - - private function doResolveDefinition(ChildDefinition $definition): Definition - { - if (!$this->container->has($parent = $definition->getParent())) { - throw new RuntimeException(sprintf('Parent definition "%s" does not exist.', $parent)); - } - - $searchKey = array_search($parent, $this->currentPath); - $this->currentPath[] = $parent; - - if (false !== $searchKey) { - throw new ServiceCircularReferenceException($parent, \array_slice($this->currentPath, $searchKey)); - } - - $parentDef = $this->container->findDefinition($parent); - if ($parentDef instanceof ChildDefinition) { - $id = $this->currentId; - $this->currentId = $parent; - $parentDef = $this->resolveDefinition($parentDef); - $this->container->setDefinition($parent, $parentDef); - $this->currentId = $id; - } - - $this->container->log($this, sprintf('Resolving inheritance for "%s" (parent: %s).', $this->currentId, $parent)); - $def = new Definition(); - - // merge in parent definition - // purposely ignored attributes: abstract, shared, tags, autoconfigured - $def->setClass($parentDef->getClass()); - $def->setArguments($parentDef->getArguments()); - $def->setMethodCalls($parentDef->getMethodCalls()); - $def->setProperties($parentDef->getProperties()); - if ($parentDef->isDeprecated()) { - $deprecation = $parentDef->getDeprecation('%service_id%'); - $def->setDeprecated($deprecation['package'], $deprecation['version'], $deprecation['message']); - } - $def->setFactory($parentDef->getFactory()); - $def->setConfigurator($parentDef->getConfigurator()); - $def->setFile($parentDef->getFile()); - $def->setPublic($parentDef->isPublic()); - $def->setLazy($parentDef->isLazy()); - $def->setAutowired($parentDef->isAutowired()); - $def->setChanges($parentDef->getChanges()); - - $def->setBindings($definition->getBindings() + $parentDef->getBindings()); - - $def->setSynthetic($definition->isSynthetic()); - - // overwrite with values specified in the decorator - $changes = $definition->getChanges(); - if (isset($changes['class'])) { - $def->setClass($definition->getClass()); - } - if (isset($changes['factory'])) { - $def->setFactory($definition->getFactory()); - } - if (isset($changes['configurator'])) { - $def->setConfigurator($definition->getConfigurator()); - } - if (isset($changes['file'])) { - $def->setFile($definition->getFile()); - } - if (isset($changes['public'])) { - $def->setPublic($definition->isPublic()); - } else { - $def->setPublic($parentDef->isPublic()); - } - if (isset($changes['lazy'])) { - $def->setLazy($definition->isLazy()); - } - if (isset($changes['deprecated'])) { - if ($definition->isDeprecated()) { - $deprecation = $definition->getDeprecation('%service_id%'); - $def->setDeprecated($deprecation['package'], $deprecation['version'], $deprecation['message']); - } else { - $def->setDeprecated(false); - } - } - if (isset($changes['autowired'])) { - $def->setAutowired($definition->isAutowired()); - } - if (isset($changes['shared'])) { - $def->setShared($definition->isShared()); - } - if (isset($changes['decorated_service'])) { - $decoratedService = $definition->getDecoratedService(); - if (null === $decoratedService) { - $def->setDecoratedService($decoratedService); - } else { - $def->setDecoratedService($decoratedService[0], $decoratedService[1], $decoratedService[2], $decoratedService[3] ?? ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE); - } - } - - // merge arguments - foreach ($definition->getArguments() as $k => $v) { - if (is_numeric($k)) { - $def->addArgument($v); - } elseif (str_starts_with($k, 'index_')) { - $def->replaceArgument((int) substr($k, \strlen('index_')), $v); - } else { - $def->setArgument($k, $v); - } - } - - // merge properties - foreach ($definition->getProperties() as $k => $v) { - $def->setProperty($k, $v); - } - - // append method calls - if ($calls = $definition->getMethodCalls()) { - $def->setMethodCalls(array_merge($def->getMethodCalls(), $calls)); - } - - $def->addError($parentDef); - $def->addError($definition); - - // these attributes are always taken from the child - $def->setAbstract($definition->isAbstract()); - $def->setTags($definition->getTags()); - // autoconfigure is never taken from parent (on purpose) - // and it's not legal on an instanceof - $def->setAutoconfigured($definition->isAutoconfigured()); - - return $def; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php deleted file mode 100644 index e67a2a8..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\ChildDefinition; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; - -/** - * @author Nicolas Grekas - */ -class ResolveClassPass implements CompilerPassInterface -{ - /** - * {@inheritdoc} - */ - public function process(ContainerBuilder $container) - { - foreach ($container->getDefinitions() as $id => $definition) { - if ($definition->isSynthetic() || null !== $definition->getClass()) { - continue; - } - if (preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)++$/', $id)) { - if ($definition instanceof ChildDefinition && !class_exists($id)) { - throw new InvalidArgumentException(sprintf('Service definition "%s" has a parent but no class, and its name looks like an FQCN. Either the class is missing or you want to inherit it from the parent service. To resolve this ambiguity, please rename this service to a non-FQCN (e.g. using dots), or create the missing class.', $id)); - } - $definition->setClass($id); - } - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php deleted file mode 100644 index c1c5748..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php +++ /dev/null @@ -1,127 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\Argument\AbstractArgument; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\LazyProxy\ProxyHelper; -use Symfony\Component\DependencyInjection\Reference; - -/** - * Resolves named arguments to their corresponding numeric index. - * - * @author Kévin Dunglas - */ -class ResolveNamedArgumentsPass extends AbstractRecursivePass -{ - /** - * {@inheritdoc} - */ - protected function processValue($value, bool $isRoot = false) - { - if ($value instanceof AbstractArgument && $value->getText().'.' === $value->getTextWithContext()) { - $value->setContext(sprintf('A value found in service "%s"', $this->currentId)); - } - - if (!$value instanceof Definition) { - return parent::processValue($value, $isRoot); - } - - $calls = $value->getMethodCalls(); - $calls[] = ['__construct', $value->getArguments()]; - - foreach ($calls as $i => $call) { - [$method, $arguments] = $call; - $parameters = null; - $resolvedArguments = []; - - foreach ($arguments as $key => $argument) { - if ($argument instanceof AbstractArgument && $argument->getText().'.' === $argument->getTextWithContext()) { - $argument->setContext(sprintf('Argument '.(\is_int($key) ? 1 + $key : '"%3$s"').' of '.('__construct' === $method ? 'service "%s"' : 'method call "%s::%s()"'), $this->currentId, $method, $key)); - } - - if (\is_int($key)) { - $resolvedArguments[$key] = $argument; - continue; - } - - if (null === $parameters) { - $r = $this->getReflectionMethod($value, $method); - $class = $r instanceof \ReflectionMethod ? $r->class : $this->currentId; - $method = $r->getName(); - $parameters = $r->getParameters(); - } - - if (isset($key[0]) && '$' !== $key[0] && !class_exists($key) && !interface_exists($key, false)) { - throw new InvalidArgumentException(sprintf('Invalid service "%s": did you forget to add the "$" prefix to argument "%s"?', $this->currentId, $key)); - } - - if (isset($key[0]) && '$' === $key[0]) { - foreach ($parameters as $j => $p) { - if ($key === '$'.$p->name) { - if ($p->isVariadic() && \is_array($argument)) { - foreach ($argument as $variadicArgument) { - $resolvedArguments[$j++] = $variadicArgument; - } - } else { - $resolvedArguments[$j] = $argument; - } - - continue 2; - } - } - - throw new InvalidArgumentException(sprintf('Invalid service "%s": method "%s()" has no argument named "%s". Check your service definition.', $this->currentId, $class !== $this->currentId ? $class.'::'.$method : $method, $key)); - } - - if (null !== $argument && !$argument instanceof Reference && !$argument instanceof Definition) { - throw new InvalidArgumentException(sprintf('Invalid service "%s": the value of argument "%s" of method "%s()" must be null, an instance of "%s" or an instance of "%s", "%s" given.', $this->currentId, $key, $class !== $this->currentId ? $class.'::'.$method : $method, Reference::class, Definition::class, get_debug_type($argument))); - } - - $typeFound = false; - foreach ($parameters as $j => $p) { - if (!\array_key_exists($j, $resolvedArguments) && ProxyHelper::getTypeHint($r, $p, true) === $key) { - $resolvedArguments[$j] = $argument; - $typeFound = true; - } - } - - if (!$typeFound) { - throw new InvalidArgumentException(sprintf('Invalid service "%s": method "%s()" has no argument type-hinted as "%s". Check your service definition.', $this->currentId, $class !== $this->currentId ? $class.'::'.$method : $method, $key)); - } - } - - if ($resolvedArguments !== $call[1]) { - ksort($resolvedArguments); - $calls[$i][1] = $resolvedArguments; - } - } - - [, $arguments] = array_pop($calls); - - if ($arguments !== $value->getArguments()) { - $value->setArguments($arguments); - } - if ($calls !== $value->getMethodCalls()) { - $value->setMethodCalls($calls); - } - - foreach ($value->getProperties() as $key => $argument) { - if ($argument instanceof AbstractArgument && $argument->getText().'.' === $argument->getTextWithContext()) { - $argument->setContext(sprintf('Property "%s" of service "%s"', $key, $this->currentId)); - } - } - - return parent::processValue($value, $isRoot); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php deleted file mode 100644 index b1c81ee..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php +++ /dev/null @@ -1,98 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; - -/** - * Resolves all parameter placeholders "%somevalue%" to their real values. - * - * @author Johannes M. Schmitt - */ -class ResolveParameterPlaceHoldersPass extends AbstractRecursivePass -{ - private $bag; - private $resolveArrays; - private $throwOnResolveException; - - public function __construct($resolveArrays = true, $throwOnResolveException = true) - { - $this->resolveArrays = $resolveArrays; - $this->throwOnResolveException = $throwOnResolveException; - } - - /** - * {@inheritdoc} - * - * @throws ParameterNotFoundException - */ - public function process(ContainerBuilder $container) - { - $this->bag = $container->getParameterBag(); - - try { - parent::process($container); - - $aliases = []; - foreach ($container->getAliases() as $name => $target) { - $this->currentId = $name; - $aliases[$this->bag->resolveValue($name)] = $target; - } - $container->setAliases($aliases); - } catch (ParameterNotFoundException $e) { - $e->setSourceId($this->currentId); - - throw $e; - } - - $this->bag->resolve(); - $this->bag = null; - } - - protected function processValue($value, bool $isRoot = false) - { - if (\is_string($value)) { - try { - $v = $this->bag->resolveValue($value); - } catch (ParameterNotFoundException $e) { - if ($this->throwOnResolveException) { - throw $e; - } - - $v = null; - $this->container->getDefinition($this->currentId)->addError($e->getMessage()); - } - - return $this->resolveArrays || !$v || !\is_array($v) ? $v : $value; - } - if ($value instanceof Definition) { - $value->setBindings($this->processValue($value->getBindings())); - $changes = $value->getChanges(); - if (isset($changes['class'])) { - $value->setClass($this->bag->resolveValue($value->getClass())); - } - if (isset($changes['file'])) { - $value->setFile($this->bag->resolveValue($value->getFile())); - } - } - - $value = parent::processValue($value, $isRoot); - - if ($value && \is_array($value)) { - $value = array_combine($this->bag->resolveValue(array_keys($value)), $value); - } - - return $value; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php deleted file mode 100644 index 518c03d..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php +++ /dev/null @@ -1,52 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Psr\Container\ContainerInterface; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Reference; -use Symfony\Contracts\Service\ServiceProviderInterface; - -/** - * Compiler pass to inject their service locator to service subscribers. - * - * @author Nicolas Grekas - */ -class ResolveServiceSubscribersPass extends AbstractRecursivePass -{ - private $serviceLocator; - - protected function processValue($value, bool $isRoot = false) - { - if ($value instanceof Reference && $this->serviceLocator && \in_array((string) $value, [ContainerInterface::class, ServiceProviderInterface::class], true)) { - return new Reference($this->serviceLocator); - } - - if (!$value instanceof Definition) { - return parent::processValue($value, $isRoot); - } - - $serviceLocator = $this->serviceLocator; - $this->serviceLocator = null; - - if ($value->hasTag('container.service_subscriber.locator')) { - $this->serviceLocator = $value->getTag('container.service_subscriber.locator')[0]['id']; - $value->clearTag('container.service_subscriber.locator'); - } - - try { - return parent::processValue($value); - } finally { - $this->serviceLocator = $serviceLocator; - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php deleted file mode 100644 index 1225514..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php +++ /dev/null @@ -1,99 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Reference; - -/** - * This is a directed graph of your services. - * - * This information can be used by your compiler passes instead of collecting - * it themselves which improves performance quite a lot. - * - * @author Johannes M. Schmitt - * - * @final - */ -class ServiceReferenceGraph -{ - /** - * @var ServiceReferenceGraphNode[] - */ - private $nodes = []; - - public function hasNode(string $id): bool - { - return isset($this->nodes[$id]); - } - - /** - * Gets a node by identifier. - * - * @throws InvalidArgumentException if no node matches the supplied identifier - */ - public function getNode(string $id): ServiceReferenceGraphNode - { - if (!isset($this->nodes[$id])) { - throw new InvalidArgumentException(sprintf('There is no node with id "%s".', $id)); - } - - return $this->nodes[$id]; - } - - /** - * Returns all nodes. - * - * @return ServiceReferenceGraphNode[] - */ - public function getNodes(): array - { - return $this->nodes; - } - - /** - * Clears all nodes. - */ - public function clear() - { - foreach ($this->nodes as $node) { - $node->clear(); - } - $this->nodes = []; - } - - /** - * Connects 2 nodes together in the Graph. - */ - public function connect(?string $sourceId, $sourceValue, ?string $destId, $destValue = null, Reference $reference = null, bool $lazy = false, bool $weak = false, bool $byConstructor = false) - { - if (null === $sourceId || null === $destId) { - return; - } - - $sourceNode = $this->createNode($sourceId, $sourceValue); - $destNode = $this->createNode($destId, $destValue); - $edge = new ServiceReferenceGraphEdge($sourceNode, $destNode, $reference, $lazy, $weak, $byConstructor); - - $sourceNode->addOutEdge($edge); - $destNode->addInEdge($edge); - } - - private function createNode(string $id, $value): ServiceReferenceGraphNode - { - if (isset($this->nodes[$id]) && $this->nodes[$id]->getValue() === $value) { - return $this->nodes[$id]; - } - - return $this->nodes[$id] = new ServiceReferenceGraphNode($id, $value); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php deleted file mode 100644 index 9861456..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php +++ /dev/null @@ -1,99 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -/** - * Represents an edge in your service graph. - * - * Value is typically a reference. - * - * @author Johannes M. Schmitt - */ -class ServiceReferenceGraphEdge -{ - private $sourceNode; - private $destNode; - private $value; - private $lazy; - private $weak; - private $byConstructor; - - public function __construct(ServiceReferenceGraphNode $sourceNode, ServiceReferenceGraphNode $destNode, $value = null, bool $lazy = false, bool $weak = false, bool $byConstructor = false) - { - $this->sourceNode = $sourceNode; - $this->destNode = $destNode; - $this->value = $value; - $this->lazy = $lazy; - $this->weak = $weak; - $this->byConstructor = $byConstructor; - } - - /** - * Returns the value of the edge. - * - * @return mixed - */ - public function getValue() - { - return $this->value; - } - - /** - * Returns the source node. - * - * @return ServiceReferenceGraphNode - */ - public function getSourceNode() - { - return $this->sourceNode; - } - - /** - * Returns the destination node. - * - * @return ServiceReferenceGraphNode - */ - public function getDestNode() - { - return $this->destNode; - } - - /** - * Returns true if the edge is lazy, meaning it's a dependency not requiring direct instantiation. - * - * @return bool - */ - public function isLazy() - { - return $this->lazy; - } - - /** - * Returns true if the edge is weak, meaning it shouldn't prevent removing the target service. - * - * @return bool - */ - public function isWeak() - { - return $this->weak; - } - - /** - * Returns true if the edge links with a constructor argument. - * - * @return bool - */ - public function isReferencedByConstructor() - { - return $this->byConstructor; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php deleted file mode 100644 index ba96da2..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php +++ /dev/null @@ -1,118 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Compiler; - -use Symfony\Component\DependencyInjection\Alias; -use Symfony\Component\DependencyInjection\Definition; - -/** - * Represents a node in your service graph. - * - * Value is typically a definition, or an alias. - * - * @author Johannes M. Schmitt - */ -class ServiceReferenceGraphNode -{ - private $id; - private $inEdges = []; - private $outEdges = []; - private $value; - - /** - * @param string $id The node identifier - * @param mixed $value The node value - */ - public function __construct(string $id, $value) - { - $this->id = $id; - $this->value = $value; - } - - public function addInEdge(ServiceReferenceGraphEdge $edge) - { - $this->inEdges[] = $edge; - } - - public function addOutEdge(ServiceReferenceGraphEdge $edge) - { - $this->outEdges[] = $edge; - } - - /** - * Checks if the value of this node is an Alias. - * - * @return bool - */ - public function isAlias() - { - return $this->value instanceof Alias; - } - - /** - * Checks if the value of this node is a Definition. - * - * @return bool - */ - public function isDefinition() - { - return $this->value instanceof Definition; - } - - /** - * Returns the identifier. - * - * @return string - */ - public function getId() - { - return $this->id; - } - - /** - * Returns the in edges. - * - * @return ServiceReferenceGraphEdge[] - */ - public function getInEdges() - { - return $this->inEdges; - } - - /** - * Returns the out edges. - * - * @return ServiceReferenceGraphEdge[] - */ - public function getOutEdges() - { - return $this->outEdges; - } - - /** - * Returns the value of this Node. - * - * @return mixed - */ - public function getValue() - { - return $this->value; - } - - /** - * Clears all edges. - */ - public function clear() - { - $this->inEdges = $this->outEdges = []; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Container.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Container.php deleted file mode 100644 index 6f61eb8..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Container.php +++ /dev/null @@ -1,434 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection; - -use Symfony\Component\DependencyInjection\Argument\RewindableGenerator; -use Symfony\Component\DependencyInjection\Argument\ServiceLocator as ArgumentServiceLocator; -use Symfony\Component\DependencyInjection\Exception\EnvNotFoundException; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Exception\ParameterCircularReferenceException; -use Symfony\Component\DependencyInjection\Exception\RuntimeException; -use Symfony\Component\DependencyInjection\Exception\ServiceCircularReferenceException; -use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; -use Symfony\Component\DependencyInjection\ParameterBag\EnvPlaceholderParameterBag; -use Symfony\Component\DependencyInjection\ParameterBag\FrozenParameterBag; -use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface; -use Symfony\Contracts\Service\ResetInterface; - -// Help opcache.preload discover always-needed symbols -class_exists(RewindableGenerator::class); -class_exists(ArgumentServiceLocator::class); - -/** - * Container is a dependency injection container. - * - * It gives access to object instances (services). - * Services and parameters are simple key/pair stores. - * The container can have four possible behaviors when a service - * does not exist (or is not initialized for the last case): - * - * * EXCEPTION_ON_INVALID_REFERENCE: Throws an exception (the default) - * * NULL_ON_INVALID_REFERENCE: Returns null - * * IGNORE_ON_INVALID_REFERENCE: Ignores the wrapping command asking for the reference - * (for instance, ignore a setter if the service does not exist) - * * IGNORE_ON_UNINITIALIZED_REFERENCE: Ignores/returns null for uninitialized services or invalid references - * - * @author Fabien Potencier - * @author Johannes M. Schmitt - */ -class Container implements ContainerInterface, ResetInterface -{ - protected $parameterBag; - protected $services = []; - protected $privates = []; - protected $fileMap = []; - protected $methodMap = []; - protected $factories = []; - protected $aliases = []; - protected $loading = []; - protected $resolving = []; - protected $syntheticIds = []; - - private $envCache = []; - private $compiled = false; - private $getEnv; - - public function __construct(ParameterBagInterface $parameterBag = null) - { - $this->parameterBag = $parameterBag ?? new EnvPlaceholderParameterBag(); - } - - /** - * Compiles the container. - * - * This method does two things: - * - * * Parameter values are resolved; - * * The parameter bag is frozen. - */ - public function compile() - { - $this->parameterBag->resolve(); - - $this->parameterBag = new FrozenParameterBag($this->parameterBag->all()); - - $this->compiled = true; - } - - /** - * Returns true if the container is compiled. - * - * @return bool - */ - public function isCompiled() - { - return $this->compiled; - } - - /** - * Gets the service container parameter bag. - * - * @return ParameterBagInterface - */ - public function getParameterBag() - { - return $this->parameterBag; - } - - /** - * Gets a parameter. - * - * @return array|bool|string|int|float|\UnitEnum|null - * - * @throws InvalidArgumentException if the parameter is not defined - */ - public function getParameter(string $name) - { - return $this->parameterBag->get($name); - } - - /** - * @return bool - */ - public function hasParameter(string $name) - { - return $this->parameterBag->has($name); - } - - /** - * Sets a parameter. - * - * @param string $name The parameter name - * @param array|bool|string|int|float|\UnitEnum|null $value The parameter value - */ - public function setParameter(string $name, $value) - { - $this->parameterBag->set($name, $value); - } - - /** - * Sets a service. - * - * Setting a synthetic service to null resets it: has() returns false and get() - * behaves in the same way as if the service was never created. - */ - public function set(string $id, ?object $service) - { - // Runs the internal initializer; used by the dumped container to include always-needed files - if (isset($this->privates['service_container']) && $this->privates['service_container'] instanceof \Closure) { - $initialize = $this->privates['service_container']; - unset($this->privates['service_container']); - $initialize(); - } - - if ('service_container' === $id) { - throw new InvalidArgumentException('You cannot set service "service_container".'); - } - - if (!(isset($this->fileMap[$id]) || isset($this->methodMap[$id]))) { - if (isset($this->syntheticIds[$id]) || !isset($this->getRemovedIds()[$id])) { - // no-op - } elseif (null === $service) { - throw new InvalidArgumentException(sprintf('The "%s" service is private, you cannot unset it.', $id)); - } else { - throw new InvalidArgumentException(sprintf('The "%s" service is private, you cannot replace it.', $id)); - } - } elseif (isset($this->services[$id])) { - throw new InvalidArgumentException(sprintf('The "%s" service is already initialized, you cannot replace it.', $id)); - } - - if (isset($this->aliases[$id])) { - unset($this->aliases[$id]); - } - - if (null === $service) { - unset($this->services[$id]); - - return; - } - - $this->services[$id] = $service; - } - - /** - * Returns true if the given service is defined. - * - * @param string $id The service identifier - * - * @return bool - */ - public function has(string $id) - { - if (isset($this->aliases[$id])) { - $id = $this->aliases[$id]; - } - if (isset($this->services[$id])) { - return true; - } - if ('service_container' === $id) { - return true; - } - - return isset($this->fileMap[$id]) || isset($this->methodMap[$id]); - } - - /** - * Gets a service. - * - * @return object|null - * - * @throws ServiceCircularReferenceException When a circular reference is detected - * @throws ServiceNotFoundException When the service is not defined - * @throws \Exception if an exception has been thrown when the service has been resolved - * - * @see Reference - */ - public function get(string $id, int $invalidBehavior = /* self::EXCEPTION_ON_INVALID_REFERENCE */ 1) - { - return $this->services[$id] - ?? $this->services[$id = $this->aliases[$id] ?? $id] - ?? ('service_container' === $id ? $this : ($this->factories[$id] ?? [$this, 'make'])($id, $invalidBehavior)); - } - - /** - * Creates a service. - * - * As a separate method to allow "get()" to use the really fast `??` operator. - */ - private function make(string $id, int $invalidBehavior) - { - if (isset($this->loading[$id])) { - throw new ServiceCircularReferenceException($id, array_merge(array_keys($this->loading), [$id])); - } - - $this->loading[$id] = true; - - try { - if (isset($this->fileMap[$id])) { - return /* self::IGNORE_ON_UNINITIALIZED_REFERENCE */ 4 === $invalidBehavior ? null : $this->load($this->fileMap[$id]); - } elseif (isset($this->methodMap[$id])) { - return /* self::IGNORE_ON_UNINITIALIZED_REFERENCE */ 4 === $invalidBehavior ? null : $this->{$this->methodMap[$id]}(); - } - } catch (\Exception $e) { - unset($this->services[$id]); - - throw $e; - } finally { - unset($this->loading[$id]); - } - - if (/* self::EXCEPTION_ON_INVALID_REFERENCE */ 1 === $invalidBehavior) { - if (!$id) { - throw new ServiceNotFoundException($id); - } - if (isset($this->syntheticIds[$id])) { - throw new ServiceNotFoundException($id, null, null, [], sprintf('The "%s" service is synthetic, it needs to be set at boot time before it can be used.', $id)); - } - if (isset($this->getRemovedIds()[$id])) { - throw new ServiceNotFoundException($id, null, null, [], sprintf('The "%s" service or alias has been removed or inlined when the container was compiled. You should either make it public, or stop using the container directly and use dependency injection instead.', $id)); - } - - $alternatives = []; - foreach ($this->getServiceIds() as $knownId) { - if ('' === $knownId || '.' === $knownId[0]) { - continue; - } - $lev = levenshtein($id, $knownId); - if ($lev <= \strlen($id) / 3 || str_contains($knownId, $id)) { - $alternatives[] = $knownId; - } - } - - throw new ServiceNotFoundException($id, null, null, $alternatives); - } - - return null; - } - - /** - * Returns true if the given service has actually been initialized. - * - * @return bool - */ - public function initialized(string $id) - { - if (isset($this->aliases[$id])) { - $id = $this->aliases[$id]; - } - - if ('service_container' === $id) { - return false; - } - - return isset($this->services[$id]); - } - - /** - * {@inheritdoc} - */ - public function reset() - { - $services = $this->services + $this->privates; - $this->services = $this->factories = $this->privates = []; - - foreach ($services as $service) { - try { - if ($service instanceof ResetInterface) { - $service->reset(); - } - } catch (\Throwable $e) { - continue; - } - } - } - - /** - * Gets all service ids. - * - * @return string[] - */ - public function getServiceIds() - { - return array_map('strval', array_unique(array_merge(['service_container'], array_keys($this->fileMap), array_keys($this->methodMap), array_keys($this->aliases), array_keys($this->services)))); - } - - /** - * Gets service ids that existed at compile time. - * - * @return array - */ - public function getRemovedIds() - { - return []; - } - - /** - * Camelizes a string. - * - * @return string - */ - public static function camelize(string $id) - { - return strtr(ucwords(strtr($id, ['_' => ' ', '.' => '_ ', '\\' => '_ '])), [' ' => '']); - } - - /** - * A string to underscore. - * - * @return string - */ - public static function underscore(string $id) - { - return strtolower(preg_replace(['/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'], ['\\1_\\2', '\\1_\\2'], str_replace('_', '.', $id))); - } - - /** - * Creates a service by requiring its factory file. - */ - protected function load(string $file) - { - return require $file; - } - - /** - * Fetches a variable from the environment. - * - * @return mixed - * - * @throws EnvNotFoundException When the environment variable is not found and has no default value - */ - protected function getEnv(string $name) - { - if (isset($this->resolving[$envName = "env($name)"])) { - throw new ParameterCircularReferenceException(array_keys($this->resolving)); - } - if (isset($this->envCache[$name]) || \array_key_exists($name, $this->envCache)) { - return $this->envCache[$name]; - } - if (!$this->has($id = 'container.env_var_processors_locator')) { - $this->set($id, new ServiceLocator([])); - } - if (!$this->getEnv) { - $this->getEnv = \Closure::fromCallable([$this, 'getEnv']); - } - $processors = $this->get($id); - - if (false !== $i = strpos($name, ':')) { - $prefix = substr($name, 0, $i); - $localName = substr($name, 1 + $i); - } else { - $prefix = 'string'; - $localName = $name; - } - $processor = $processors->has($prefix) ? $processors->get($prefix) : new EnvVarProcessor($this); - - $this->resolving[$envName] = true; - try { - return $this->envCache[$name] = $processor->getEnv($prefix, $localName, $this->getEnv); - } finally { - unset($this->resolving[$envName]); - } - } - - /** - * @param string|false $registry - * @param string|bool $load - * - * @return mixed - * - * @internal - */ - final protected function getService($registry, string $id, ?string $method, $load) - { - if ('service_container' === $id) { - return $this; - } - if (\is_string($load)) { - throw new RuntimeException($load); - } - if (null === $method) { - return false !== $registry ? $this->{$registry}[$id] ?? null : null; - } - if (false !== $registry) { - return $this->{$registry}[$id] ?? $this->{$registry}[$id] = $load ? $this->load($method) : $this->{$method}(); - } - if (!$load) { - return $this->{$method}(); - } - - return ($factory = $this->factories[$id] ?? $this->factories['service_container'][$id] ?? null) ? $factory() : $this->load($method); - } - - private function __clone() - { - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ContainerAwareInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ContainerAwareInterface.php deleted file mode 100644 index e7b9d57..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ContainerAwareInterface.php +++ /dev/null @@ -1,25 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection; - -/** - * ContainerAwareInterface should be implemented by classes that depends on a Container. - * - * @author Fabien Potencier - */ -interface ContainerAwareInterface -{ - /** - * Sets the container. - */ - public function setContainer(ContainerInterface $container = null); -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Dumper.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Dumper.php deleted file mode 100644 index e7407b0..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Dumper.php +++ /dev/null @@ -1,29 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Dumper; - -use Symfony\Component\DependencyInjection\ContainerBuilder; - -/** - * Dumper is the abstract class for all built-in dumpers. - * - * @author Fabien Potencier - */ -abstract class Dumper implements DumperInterface -{ - protected $container; - - public function __construct(ContainerBuilder $container) - { - $this->container = $container; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Preloader.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Preloader.php deleted file mode 100644 index c61b08e..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/Preloader.php +++ /dev/null @@ -1,131 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Dumper; - -/** - * @author Nicolas Grekas - */ -final class Preloader -{ - public static function append(string $file, array $list): void - { - if (!file_exists($file)) { - throw new \LogicException(sprintf('File "%s" does not exist.', $file)); - } - - $cacheDir = \dirname($file); - $classes = []; - - foreach ($list as $item) { - if (0 === strpos($item, $cacheDir)) { - file_put_contents($file, sprintf("require_once __DIR__.%s;\n", var_export(strtr(substr($item, \strlen($cacheDir)), \DIRECTORY_SEPARATOR, '/'), true)), \FILE_APPEND); - continue; - } - - $classes[] = sprintf("\$classes[] = %s;\n", var_export($item, true)); - } - - file_put_contents($file, sprintf("\n\$classes = [];\n%s\$preloaded = Preloader::preload(\$classes, \$preloaded);\n", implode('', $classes)), \FILE_APPEND); - } - - public static function preload(array $classes, array $preloaded = []): array - { - set_error_handler(function ($t, $m, $f, $l) { - if (error_reporting() & $t) { - if (__FILE__ !== $f) { - throw new \ErrorException($m, 0, $t, $f, $l); - } - - throw new \ReflectionException($m); - } - }); - - $prev = []; - - try { - while ($prev !== $classes) { - $prev = $classes; - foreach ($classes as $c) { - if (!isset($preloaded[$c])) { - self::doPreload($c, $preloaded); - } - } - $classes = array_merge(get_declared_classes(), get_declared_interfaces(), get_declared_traits()); - } - } finally { - restore_error_handler(); - } - - return $preloaded; - } - - private static function doPreload(string $class, array &$preloaded): void - { - if (isset($preloaded[$class]) || \in_array($class, ['self', 'static', 'parent'], true)) { - return; - } - - $preloaded[$class] = true; - - try { - if (!class_exists($class) && !interface_exists($class, false) && !trait_exists($class, false)) { - return; - } - - $r = new \ReflectionClass($class); - - if ($r->isInternal()) { - return; - } - - $r->getConstants(); - $r->getDefaultProperties(); - - if (\PHP_VERSION_ID >= 70400) { - foreach ($r->getProperties(\ReflectionProperty::IS_PUBLIC) as $p) { - self::preloadType($p->getType(), $preloaded); - } - } - - foreach ($r->getMethods(\ReflectionMethod::IS_PUBLIC) as $m) { - foreach ($m->getParameters() as $p) { - if ($p->isDefaultValueAvailable() && $p->isDefaultValueConstant()) { - $c = $p->getDefaultValueConstantName(); - - if ($i = strpos($c, '::')) { - self::doPreload(substr($c, 0, $i), $preloaded); - } - } - - self::preloadType($p->getType(), $preloaded); - } - - self::preloadType($m->getReturnType(), $preloaded); - } - } catch (\Throwable $e) { - // ignore missing classes - } - } - - private static function preloadType(?\ReflectionType $t, array &$preloaded): void - { - if (!$t) { - return; - } - - foreach (($t instanceof \ReflectionUnionType || $t instanceof \ReflectionIntersectionType) ? $t->getTypes() : [$t] as $t) { - if (!$t->isBuiltin()) { - self::doPreload($t instanceof \ReflectionNamedType ? $t->getName() : $t, $preloaded); - } - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/XmlDumper.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/XmlDumper.php deleted file mode 100644 index 4f7b16d..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Dumper/XmlDumper.php +++ /dev/null @@ -1,395 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Dumper; - -use Symfony\Component\DependencyInjection\Alias; -use Symfony\Component\DependencyInjection\Argument\AbstractArgument; -use Symfony\Component\DependencyInjection\Argument\IteratorArgument; -use Symfony\Component\DependencyInjection\Argument\ServiceClosureArgument; -use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; -use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; -use Symfony\Component\DependencyInjection\ContainerInterface; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\RuntimeException; -use Symfony\Component\DependencyInjection\Parameter; -use Symfony\Component\DependencyInjection\Reference; -use Symfony\Component\ExpressionLanguage\Expression; - -/** - * XmlDumper dumps a service container as an XML string. - * - * @author Fabien Potencier - * @author Martin Hasoň - */ -class XmlDumper extends Dumper -{ - /** - * @var \DOMDocument - */ - private $document; - - /** - * Dumps the service container as an XML string. - * - * @return string - */ - public function dump(array $options = []) - { - $this->document = new \DOMDocument('1.0', 'utf-8'); - $this->document->formatOutput = true; - - $container = $this->document->createElementNS('http://symfony.com/schema/dic/services', 'container'); - $container->setAttribute('xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance'); - $container->setAttribute('xsi:schemaLocation', 'http://symfony.com/schema/dic/services https://symfony.com/schema/dic/services/services-1.0.xsd'); - - $this->addParameters($container); - $this->addServices($container); - - $this->document->appendChild($container); - $xml = $this->document->saveXML(); - $this->document = null; - - return $this->container->resolveEnvPlaceholders($xml); - } - - private function addParameters(\DOMElement $parent) - { - $data = $this->container->getParameterBag()->all(); - if (!$data) { - return; - } - - if ($this->container->isCompiled()) { - $data = $this->escape($data); - } - - $parameters = $this->document->createElement('parameters'); - $parent->appendChild($parameters); - $this->convertParameters($data, 'parameter', $parameters); - } - - private function addMethodCalls(array $methodcalls, \DOMElement $parent) - { - foreach ($methodcalls as $methodcall) { - $call = $this->document->createElement('call'); - $call->setAttribute('method', $methodcall[0]); - if (\count($methodcall[1])) { - $this->convertParameters($methodcall[1], 'argument', $call); - } - if ($methodcall[2] ?? false) { - $call->setAttribute('returns-clone', 'true'); - } - $parent->appendChild($call); - } - } - - private function addService(Definition $definition, ?string $id, \DOMElement $parent) - { - $service = $this->document->createElement('service'); - if (null !== $id) { - $service->setAttribute('id', $id); - } - if ($class = $definition->getClass()) { - if ('\\' === substr($class, 0, 1)) { - $class = substr($class, 1); - } - - $service->setAttribute('class', $class); - } - if (!$definition->isShared()) { - $service->setAttribute('shared', 'false'); - } - if ($definition->isPublic()) { - $service->setAttribute('public', 'true'); - } - if ($definition->isSynthetic()) { - $service->setAttribute('synthetic', 'true'); - } - if ($definition->isLazy()) { - $service->setAttribute('lazy', 'true'); - } - if (null !== $decoratedService = $definition->getDecoratedService()) { - [$decorated, $renamedId, $priority] = $decoratedService; - $service->setAttribute('decorates', $decorated); - - $decorationOnInvalid = $decoratedService[3] ?? ContainerInterface::EXCEPTION_ON_INVALID_REFERENCE; - if (\in_array($decorationOnInvalid, [ContainerInterface::IGNORE_ON_INVALID_REFERENCE, ContainerInterface::NULL_ON_INVALID_REFERENCE], true)) { - $invalidBehavior = ContainerInterface::NULL_ON_INVALID_REFERENCE === $decorationOnInvalid ? 'null' : 'ignore'; - $service->setAttribute('decoration-on-invalid', $invalidBehavior); - } - if (null !== $renamedId) { - $service->setAttribute('decoration-inner-name', $renamedId); - } - if (0 !== $priority) { - $service->setAttribute('decoration-priority', $priority); - } - } - - foreach ($definition->getTags() as $name => $tags) { - foreach ($tags as $attributes) { - $tag = $this->document->createElement('tag'); - if (!\array_key_exists('name', $attributes)) { - $tag->setAttribute('name', $name); - } else { - $tag->appendChild($this->document->createTextNode($name)); - } - foreach ($attributes as $key => $value) { - $tag->setAttribute($key, $value ?? ''); - } - $service->appendChild($tag); - } - } - - if ($definition->getFile()) { - $file = $this->document->createElement('file'); - $file->appendChild($this->document->createTextNode($definition->getFile())); - $service->appendChild($file); - } - - if ($parameters = $definition->getArguments()) { - $this->convertParameters($parameters, 'argument', $service); - } - - if ($parameters = $definition->getProperties()) { - $this->convertParameters($parameters, 'property', $service, 'name'); - } - - $this->addMethodCalls($definition->getMethodCalls(), $service); - - if ($callable = $definition->getFactory()) { - $factory = $this->document->createElement('factory'); - - if (\is_array($callable) && $callable[0] instanceof Definition) { - $this->addService($callable[0], null, $factory); - $factory->setAttribute('method', $callable[1]); - } elseif (\is_array($callable)) { - if (null !== $callable[0]) { - $factory->setAttribute($callable[0] instanceof Reference ? 'service' : 'class', $callable[0]); - } - $factory->setAttribute('method', $callable[1]); - } else { - $factory->setAttribute('function', $callable); - } - $service->appendChild($factory); - } - - if ($definition->isDeprecated()) { - $deprecation = $definition->getDeprecation('%service_id%'); - $deprecated = $this->document->createElement('deprecated'); - $deprecated->appendChild($this->document->createTextNode($definition->getDeprecation('%service_id%')['message'])); - $deprecated->setAttribute('package', $deprecation['package']); - $deprecated->setAttribute('version', $deprecation['version']); - - $service->appendChild($deprecated); - } - - if ($definition->isAutowired()) { - $service->setAttribute('autowire', 'true'); - } - - if ($definition->isAutoconfigured()) { - $service->setAttribute('autoconfigure', 'true'); - } - - if ($definition->isAbstract()) { - $service->setAttribute('abstract', 'true'); - } - - if ($callable = $definition->getConfigurator()) { - $configurator = $this->document->createElement('configurator'); - - if (\is_array($callable) && $callable[0] instanceof Definition) { - $this->addService($callable[0], null, $configurator); - $configurator->setAttribute('method', $callable[1]); - } elseif (\is_array($callable)) { - $configurator->setAttribute($callable[0] instanceof Reference ? 'service' : 'class', $callable[0]); - $configurator->setAttribute('method', $callable[1]); - } else { - $configurator->setAttribute('function', $callable); - } - $service->appendChild($configurator); - } - - $parent->appendChild($service); - } - - private function addServiceAlias(string $alias, Alias $id, \DOMElement $parent) - { - $service = $this->document->createElement('service'); - $service->setAttribute('id', $alias); - $service->setAttribute('alias', $id); - if ($id->isPublic()) { - $service->setAttribute('public', 'true'); - } - - if ($id->isDeprecated()) { - $deprecation = $id->getDeprecation('%alias_id%'); - $deprecated = $this->document->createElement('deprecated'); - $deprecated->appendChild($this->document->createTextNode($deprecation['message'])); - $deprecated->setAttribute('package', $deprecation['package']); - $deprecated->setAttribute('version', $deprecation['version']); - - $service->appendChild($deprecated); - } - - $parent->appendChild($service); - } - - private function addServices(\DOMElement $parent) - { - $definitions = $this->container->getDefinitions(); - if (!$definitions) { - return; - } - - $services = $this->document->createElement('services'); - foreach ($definitions as $id => $definition) { - $this->addService($definition, $id, $services); - } - - $aliases = $this->container->getAliases(); - foreach ($aliases as $alias => $id) { - while (isset($aliases[(string) $id])) { - $id = $aliases[(string) $id]; - } - $this->addServiceAlias($alias, $id, $services); - } - $parent->appendChild($services); - } - - private function convertParameters(array $parameters, string $type, \DOMElement $parent, string $keyAttribute = 'key') - { - $withKeys = !array_is_list($parameters); - foreach ($parameters as $key => $value) { - $element = $this->document->createElement($type); - if ($withKeys) { - $element->setAttribute($keyAttribute, $key); - } - - if (\is_array($tag = $value)) { - $element->setAttribute('type', 'collection'); - $this->convertParameters($value, $type, $element, 'key'); - } elseif ($value instanceof TaggedIteratorArgument || ($value instanceof ServiceLocatorArgument && $tag = $value->getTaggedIteratorArgument())) { - $element->setAttribute('type', $value instanceof TaggedIteratorArgument ? 'tagged_iterator' : 'tagged_locator'); - $element->setAttribute('tag', $tag->getTag()); - - if (null !== $tag->getIndexAttribute()) { - $element->setAttribute('index-by', $tag->getIndexAttribute()); - - if (null !== $tag->getDefaultIndexMethod()) { - $element->setAttribute('default-index-method', $tag->getDefaultIndexMethod()); - } - if (null !== $tag->getDefaultPriorityMethod()) { - $element->setAttribute('default-priority-method', $tag->getDefaultPriorityMethod()); - } - } - } elseif ($value instanceof IteratorArgument) { - $element->setAttribute('type', 'iterator'); - $this->convertParameters($value->getValues(), $type, $element, 'key'); - } elseif ($value instanceof ServiceLocatorArgument) { - $element->setAttribute('type', 'service_locator'); - $this->convertParameters($value->getValues(), $type, $element, 'key'); - } elseif ($value instanceof Reference || $value instanceof ServiceClosureArgument) { - $element->setAttribute('type', 'service'); - if ($value instanceof ServiceClosureArgument) { - $element->setAttribute('type', 'service_closure'); - $value = $value->getValues()[0]; - } - $element->setAttribute('id', (string) $value); - $behavior = $value->getInvalidBehavior(); - if (ContainerInterface::NULL_ON_INVALID_REFERENCE == $behavior) { - $element->setAttribute('on-invalid', 'null'); - } elseif (ContainerInterface::IGNORE_ON_INVALID_REFERENCE == $behavior) { - $element->setAttribute('on-invalid', 'ignore'); - } elseif (ContainerInterface::IGNORE_ON_UNINITIALIZED_REFERENCE == $behavior) { - $element->setAttribute('on-invalid', 'ignore_uninitialized'); - } - } elseif ($value instanceof Definition) { - $element->setAttribute('type', 'service'); - $this->addService($value, null, $element); - } elseif ($value instanceof Expression) { - $element->setAttribute('type', 'expression'); - $text = $this->document->createTextNode(self::phpToXml((string) $value)); - $element->appendChild($text); - } elseif (\is_string($value) && !preg_match('/^[^\x00-\x08\x0B\x0E-\x1A\x1C-\x1F\x7F]*+$/u', $value)) { - $element->setAttribute('type', 'binary'); - $text = $this->document->createTextNode(self::phpToXml(base64_encode($value))); - $element->appendChild($text); - } elseif ($value instanceof \UnitEnum) { - $element->setAttribute('type', 'constant'); - $element->appendChild($this->document->createTextNode(self::phpToXml($value))); - } elseif ($value instanceof AbstractArgument) { - $element->setAttribute('type', 'abstract'); - $text = $this->document->createTextNode(self::phpToXml($value->getText())); - $element->appendChild($text); - } else { - if (\in_array($value, ['null', 'true', 'false'], true)) { - $element->setAttribute('type', 'string'); - } - - if (\is_string($value) && (is_numeric($value) || preg_match('/^0b[01]*$/', $value) || preg_match('/^0x[0-9a-f]++$/i', $value))) { - $element->setAttribute('type', 'string'); - } - - $text = $this->document->createTextNode(self::phpToXml($value)); - $element->appendChild($text); - } - $parent->appendChild($element); - } - } - - /** - * Escapes arguments. - */ - private function escape(array $arguments): array - { - $args = []; - foreach ($arguments as $k => $v) { - if (\is_array($v)) { - $args[$k] = $this->escape($v); - } elseif (\is_string($v)) { - $args[$k] = str_replace('%', '%%', $v); - } else { - $args[$k] = $v; - } - } - - return $args; - } - - /** - * Converts php types to xml types. - * - * @param mixed $value Value to convert - * - * @throws RuntimeException When trying to dump object or resource - */ - public static function phpToXml($value): string - { - switch (true) { - case null === $value: - return 'null'; - case true === $value: - return 'true'; - case false === $value: - return 'false'; - case $value instanceof Parameter: - return '%'.$value.'%'; - case $value instanceof \UnitEnum: - return sprintf('%s::%s', \get_class($value), $value->name); - case \is_object($value) || \is_resource($value): - throw new RuntimeException('Unable to dump a service container if a parameter is an object or a resource.'); - default: - return (string) $value; - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php deleted file mode 100644 index 2a11626..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php +++ /dev/null @@ -1,35 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Exception; - -/** - * Thrown when trying to inject a parameter into a constructor/method with an incompatible type. - * - * @author Nicolas Grekas - * @author Julien Maulny - */ -class InvalidParameterTypeException extends InvalidArgumentException -{ - public function __construct(string $serviceId, string $type, \ReflectionParameter $parameter) - { - $acceptedType = $parameter->getType(); - $acceptedType = $acceptedType instanceof \ReflectionNamedType ? $acceptedType->getName() : (string) $acceptedType; - $this->code = $type; - - $function = $parameter->getDeclaringFunction(); - $functionName = $function instanceof \ReflectionMethod - ? sprintf('%s::%s', $function->getDeclaringClass()->getName(), $function->getName()) - : $function->getName(); - - parent::__construct(sprintf('Invalid definition for service "%s": argument %d of "%s()" accepts "%s", "%s" passed.', $serviceId, 1 + $parameter->getPosition(), $functionName, $acceptedType, $type)); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/RuntimeException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/RuntimeException.php deleted file mode 100644 index 5c24541..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/RuntimeException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Exception; - -/** - * Base RuntimeException for Dependency Injection component. - * - * @author Johannes M. Schmitt - */ -class RuntimeException extends \RuntimeException implements ExceptionInterface -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php deleted file mode 100644 index a38671b..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php +++ /dev/null @@ -1,41 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Exception; - -/** - * This exception is thrown when a circular reference is detected. - * - * @author Johannes M. Schmitt - */ -class ServiceCircularReferenceException extends RuntimeException -{ - private $serviceId; - private $path; - - public function __construct(string $serviceId, array $path, \Throwable $previous = null) - { - parent::__construct(sprintf('Circular reference detected for service "%s", path: "%s".', $serviceId, implode(' -> ', $path)), 0, $previous); - - $this->serviceId = $serviceId; - $this->path = $path; - } - - public function getServiceId() - { - return $this->serviceId; - } - - public function getPath() - { - return $this->path; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php deleted file mode 100644 index f91afae..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php +++ /dev/null @@ -1,67 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Exception; - -use Psr\Container\NotFoundExceptionInterface; - -/** - * This exception is thrown when a non-existent service is requested. - * - * @author Johannes M. Schmitt - */ -class ServiceNotFoundException extends InvalidArgumentException implements NotFoundExceptionInterface -{ - private $id; - private $sourceId; - private $alternatives; - - public function __construct(string $id, string $sourceId = null, \Throwable $previous = null, array $alternatives = [], string $msg = null) - { - if (null !== $msg) { - // no-op - } elseif (null === $sourceId) { - $msg = sprintf('You have requested a non-existent service "%s".', $id); - } else { - $msg = sprintf('The service "%s" has a dependency on a non-existent service "%s".', $sourceId, $id); - } - - if ($alternatives) { - if (1 == \count($alternatives)) { - $msg .= ' Did you mean this: "'; - } else { - $msg .= ' Did you mean one of these: "'; - } - $msg .= implode('", "', $alternatives).'"?'; - } - - parent::__construct($msg, 0, $previous); - - $this->id = $id; - $this->sourceId = $sourceId; - $this->alternatives = $alternatives; - } - - public function getId() - { - return $this->id; - } - - public function getSourceId() - { - return $this->sourceId; - } - - public function getAlternatives() - { - return $this->alternatives; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ExpressionLanguageProvider.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ExpressionLanguageProvider.php deleted file mode 100644 index 9198ca0..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ExpressionLanguageProvider.php +++ /dev/null @@ -1,50 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection; - -use Symfony\Component\ExpressionLanguage\ExpressionFunction; -use Symfony\Component\ExpressionLanguage\ExpressionFunctionProviderInterface; - -/** - * Define some ExpressionLanguage functions. - * - * To get a service, use service('request'). - * To get a parameter, use parameter('kernel.debug'). - * - * @author Fabien Potencier - */ -class ExpressionLanguageProvider implements ExpressionFunctionProviderInterface -{ - private $serviceCompiler; - - public function __construct(callable $serviceCompiler = null) - { - $this->serviceCompiler = $serviceCompiler; - } - - public function getFunctions() - { - return [ - new ExpressionFunction('service', $this->serviceCompiler ?: function ($arg) { - return sprintf('$this->get(%s)', $arg); - }, function (array $variables, $value) { - return $variables['container']->get($value); - }), - - new ExpressionFunction('parameter', function ($arg) { - return sprintf('$this->getParameter(%s)', $arg); - }, function (array $variables, $value) { - return $variables['container']->getParameter($value); - }), - ]; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php deleted file mode 100644 index 7e0f14c..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\LazyProxy\PhpDumper; - -use Symfony\Component\DependencyInjection\Definition; - -/** - * Null dumper, negates any proxy code generation for any given service definition. - * - * @author Marco Pivetta - * - * @final - */ -class NullDumper implements DumperInterface -{ - /** - * {@inheritdoc} - */ - public function isProxyCandidate(Definition $definition): bool - { - return false; - } - - /** - * {@inheritdoc} - */ - public function getProxyFactoryCode(Definition $definition, string $id, string $factoryCode): string - { - return ''; - } - - /** - * {@inheritdoc} - */ - public function getProxyCode(Definition $definition): string - { - return ''; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php deleted file mode 100644 index 8eb45b5..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/LazyProxy/ProxyHelper.php +++ /dev/null @@ -1,77 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\LazyProxy; - -/** - * @author Nicolas Grekas - * - * @internal - */ -class ProxyHelper -{ - /** - * @return string|null The FQCN or builtin name of the type hint, or null when the type hint references an invalid self|parent context - */ - public static function getTypeHint(\ReflectionFunctionAbstract $r, \ReflectionParameter $p = null, bool $noBuiltin = false): ?string - { - if ($p instanceof \ReflectionParameter) { - $type = $p->getType(); - } else { - $type = $r->getReturnType(); - } - if (!$type) { - return null; - } - - $types = []; - $glue = '|'; - if ($type instanceof \ReflectionUnionType) { - $reflectionTypes = $type->getTypes(); - } elseif ($type instanceof \ReflectionIntersectionType) { - $reflectionTypes = $type->getTypes(); - $glue = '&'; - } elseif ($type instanceof \ReflectionNamedType) { - $reflectionTypes = [$type]; - } else { - return null; - } - - foreach ($reflectionTypes as $type) { - if ($type->isBuiltin()) { - if (!$noBuiltin) { - $types[] = $type->getName(); - } - continue; - } - - $lcName = strtolower($type->getName()); - $prefix = $noBuiltin ? '' : '\\'; - - if ('self' !== $lcName && 'parent' !== $lcName) { - $types[] = $prefix.$type->getName(); - continue; - } - if (!$r instanceof \ReflectionMethod) { - continue; - } - if ('self' === $lcName) { - $types[] = $prefix.$r->getDeclaringClass()->name; - } else { - $types[] = ($parent = $r->getDeclaringClass()->getParentClass()) ? $prefix.$parent->name : null; - } - } - - sort($types); - - return $types ? implode($glue, $types) : null; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/ClosureLoader.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/ClosureLoader.php deleted file mode 100644 index fe2b91a..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/ClosureLoader.php +++ /dev/null @@ -1,49 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader; - -use Symfony\Component\Config\Loader\Loader; -use Symfony\Component\DependencyInjection\ContainerBuilder; - -/** - * ClosureLoader loads service definitions from a PHP closure. - * - * The Closure has access to the container as its first argument. - * - * @author Fabien Potencier - */ -class ClosureLoader extends Loader -{ - private $container; - - public function __construct(ContainerBuilder $container, string $env = null) - { - $this->container = $container; - parent::__construct($env); - } - - /** - * {@inheritdoc} - */ - public function load($resource, string $type = null) - { - return $resource($this->container, $this->env); - } - - /** - * {@inheritdoc} - */ - public function supports($resource, string $type = null) - { - return $resource instanceof \Closure; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php deleted file mode 100644 index ac6fdb6..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php +++ /dev/null @@ -1,212 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader\Configurator; - -use Symfony\Component\Config\Loader\ParamConfigurator; -use Symfony\Component\DependencyInjection\Argument\AbstractArgument; -use Symfony\Component\DependencyInjection\Argument\IteratorArgument; -use Symfony\Component\DependencyInjection\Argument\ServiceLocatorArgument; -use Symfony\Component\DependencyInjection\Argument\TaggedIteratorArgument; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; -use Symfony\Component\DependencyInjection\Loader\PhpFileLoader; -use Symfony\Component\ExpressionLanguage\Expression; - -/** - * @author Nicolas Grekas - */ -class ContainerConfigurator extends AbstractConfigurator -{ - public const FACTORY = 'container'; - - private $container; - private $loader; - private $instanceof; - private $path; - private $file; - private $anonymousCount = 0; - private $env; - - public function __construct(ContainerBuilder $container, PhpFileLoader $loader, array &$instanceof, string $path, string $file, string $env = null) - { - $this->container = $container; - $this->loader = $loader; - $this->instanceof = &$instanceof; - $this->path = $path; - $this->file = $file; - $this->env = $env; - } - - final public function extension(string $namespace, array $config) - { - if (!$this->container->hasExtension($namespace)) { - $extensions = array_filter(array_map(function (ExtensionInterface $ext) { return $ext->getAlias(); }, $this->container->getExtensions())); - throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s" (in "%s"). Looked for namespace "%s", found "%s".', $namespace, $this->file, $namespace, $extensions ? implode('", "', $extensions) : 'none')); - } - - $this->container->loadFromExtension($namespace, static::processValue($config)); - } - - final public function import(string $resource, string $type = null, $ignoreErrors = false) - { - $this->loader->setCurrentDir(\dirname($this->path)); - $this->loader->import($resource, $type, $ignoreErrors, $this->file); - } - - final public function parameters(): ParametersConfigurator - { - return new ParametersConfigurator($this->container); - } - - final public function services(): ServicesConfigurator - { - return new ServicesConfigurator($this->container, $this->loader, $this->instanceof, $this->path, $this->anonymousCount); - } - - /** - * Get the current environment to be able to write conditional configuration. - */ - final public function env(): ?string - { - return $this->env; - } - - /** - * @return static - */ - final public function withPath(string $path): self - { - $clone = clone $this; - $clone->path = $clone->file = $path; - $clone->loader->setCurrentDir(\dirname($path)); - - return $clone; - } -} - -/** - * Creates a parameter. - */ -function param(string $name): ParamConfigurator -{ - return new ParamConfigurator($name); -} - -/** - * Creates a service reference. - * - * @deprecated since Symfony 5.1, use service() instead. - */ -function ref(string $id): ReferenceConfigurator -{ - trigger_deprecation('symfony/dependency-injection', '5.1', '"%s()" is deprecated, use "service()" instead.', __FUNCTION__); - - return new ReferenceConfigurator($id); -} - -/** - * Creates a reference to a service. - */ -function service(string $serviceId): ReferenceConfigurator -{ - return new ReferenceConfigurator($serviceId); -} - -/** - * Creates an inline service. - * - * @deprecated since Symfony 5.1, use inline_service() instead. - */ -function inline(string $class = null): InlineServiceConfigurator -{ - trigger_deprecation('symfony/dependency-injection', '5.1', '"%s()" is deprecated, use "inline_service()" instead.', __FUNCTION__); - - return new InlineServiceConfigurator(new Definition($class)); -} - -/** - * Creates an inline service. - */ -function inline_service(string $class = null): InlineServiceConfigurator -{ - return new InlineServiceConfigurator(new Definition($class)); -} - -/** - * Creates a service locator. - * - * @param ReferenceConfigurator[] $values - */ -function service_locator(array $values): ServiceLocatorArgument -{ - return new ServiceLocatorArgument(AbstractConfigurator::processValue($values, true)); -} - -/** - * Creates a lazy iterator. - * - * @param ReferenceConfigurator[] $values - */ -function iterator(array $values): IteratorArgument -{ - return new IteratorArgument(AbstractConfigurator::processValue($values, true)); -} - -/** - * Creates a lazy iterator by tag name. - */ -function tagged_iterator(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null, string $defaultPriorityMethod = null): TaggedIteratorArgument -{ - return new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod, false, $defaultPriorityMethod); -} - -/** - * Creates a service locator by tag name. - */ -function tagged_locator(string $tag, string $indexAttribute = null, string $defaultIndexMethod = null, string $defaultPriorityMethod = null): ServiceLocatorArgument -{ - return new ServiceLocatorArgument(new TaggedIteratorArgument($tag, $indexAttribute, $defaultIndexMethod, true, $defaultPriorityMethod)); -} - -/** - * Creates an expression. - */ -function expr(string $expression): Expression -{ - return new Expression($expression); -} - -/** - * Creates an abstract argument. - */ -function abstract_arg(string $description): AbstractArgument -{ - return new AbstractArgument($description); -} - -/** - * Creates an environment variable reference. - */ -function env(string $name): EnvConfigurator -{ - return new EnvConfigurator($name); -} - -/** - * Creates a closure service reference. - */ -function service_closure(string $serviceId): ClosureReferenceConfigurator -{ - return new ClosureReferenceConfigurator($serviceId); -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php deleted file mode 100644 index d1864f5..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php +++ /dev/null @@ -1,224 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader\Configurator; - -use Symfony\Component\Config\Loader\ParamConfigurator; - -class EnvConfigurator extends ParamConfigurator -{ - /** - * @var string[] - */ - private $stack; - - public function __construct(string $name) - { - $this->stack = explode(':', $name); - } - - public function __toString(): string - { - return '%env('.implode(':', $this->stack).')%'; - } - - /** - * @return $this - */ - public function __call(string $name, array $arguments): self - { - $processor = strtolower(preg_replace(['/([A-Z]+)([A-Z][a-z])/', '/([a-z\d])([A-Z])/'], '\1_\2', $name)); - - $this->custom($processor, ...$arguments); - - return $this; - } - - /** - * @return $this - */ - public function custom(string $processor, ...$args): self - { - array_unshift($this->stack, $processor, ...$args); - - return $this; - } - - /** - * @return $this - */ - public function base64(): self - { - array_unshift($this->stack, 'base64'); - - return $this; - } - - /** - * @return $this - */ - public function bool(): self - { - array_unshift($this->stack, 'bool'); - - return $this; - } - - /** - * @return $this - */ - public function not(): self - { - array_unshift($this->stack, 'not'); - - return $this; - } - - /** - * @return $this - */ - public function const(): self - { - array_unshift($this->stack, 'const'); - - return $this; - } - - /** - * @return $this - */ - public function csv(): self - { - array_unshift($this->stack, 'csv'); - - return $this; - } - - /** - * @return $this - */ - public function file(): self - { - array_unshift($this->stack, 'file'); - - return $this; - } - - /** - * @return $this - */ - public function float(): self - { - array_unshift($this->stack, 'float'); - - return $this; - } - - /** - * @return $this - */ - public function int(): self - { - array_unshift($this->stack, 'int'); - - return $this; - } - - /** - * @return $this - */ - public function json(): self - { - array_unshift($this->stack, 'json'); - - return $this; - } - - /** - * @return $this - */ - public function key(string $key): self - { - array_unshift($this->stack, 'key', $key); - - return $this; - } - - /** - * @return $this - */ - public function url(): self - { - array_unshift($this->stack, 'url'); - - return $this; - } - - /** - * @return $this - */ - public function queryString(): self - { - array_unshift($this->stack, 'query_string'); - - return $this; - } - - /** - * @return $this - */ - public function resolve(): self - { - array_unshift($this->stack, 'resolve'); - - return $this; - } - - /** - * @return $this - */ - public function default(string $fallbackParam): self - { - array_unshift($this->stack, 'default', $fallbackParam); - - return $this; - } - - /** - * @return $this - */ - public function string(): self - { - array_unshift($this->stack, 'string'); - - return $this; - } - - /** - * @return $this - */ - public function trim(): self - { - array_unshift($this->stack, 'trim'); - - return $this; - } - - /** - * @return $this - */ - public function require(): self - { - array_unshift($this->stack, 'require'); - - return $this; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php deleted file mode 100644 index f0cf177..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php +++ /dev/null @@ -1,57 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader\Configurator; - -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\ExpressionLanguage\Expression; - -/** - * @author Nicolas Grekas - */ -class ParametersConfigurator extends AbstractConfigurator -{ - public const FACTORY = 'parameters'; - - private $container; - - public function __construct(ContainerBuilder $container) - { - $this->container = $container; - } - - /** - * Creates a parameter. - * - * @return $this - */ - final public function set(string $name, $value): self - { - if ($value instanceof Expression) { - throw new InvalidArgumentException(sprintf('Using an expression in parameter "%s" is not allowed.', $name)); - } - - $this->container->setParameter($name, static::processValue($value, true)); - - return $this; - } - - /** - * Creates a parameter. - * - * @return $this - */ - final public function __invoke(string $name, $value): self - { - return $this->set($name, $value); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php deleted file mode 100644 index 9eab22c..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php +++ /dev/null @@ -1,31 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; - -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; - -trait AutoconfigureTrait -{ - /** - * Sets whether or not instanceof conditionals should be prepended with a global set. - * - * @return $this - * - * @throws InvalidArgumentException when a parent is already set - */ - final public function autoconfigure(bool $autoconfigured = true): self - { - $this->definition->setAutoconfigured($autoconfigured); - - return $this; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php deleted file mode 100644 index 1286ba4..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; - -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Loader\Configurator\ReferenceConfigurator; - -trait FactoryTrait -{ - /** - * Sets a factory. - * - * @param string|array|ReferenceConfigurator $factory A PHP callable reference - * - * @return $this - */ - final public function factory($factory): self - { - if (\is_string($factory) && 1 === substr_count($factory, ':')) { - $factoryParts = explode(':', $factory); - - throw new InvalidArgumentException(sprintf('Invalid factory "%s": the "service:method" notation is not available when using PHP-based DI configuration. Use "[service(\'%s\'), \'%s\']" instead.', $factory, $factoryParts[0], $factoryParts[1])); - } - - $this->definition->setFactory(static::processValue($factory, true)); - - return $this; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php deleted file mode 100644 index 5f42aef..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php +++ /dev/null @@ -1,27 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; - -trait FileTrait -{ - /** - * Sets a file to require before creating the service. - * - * @return $this - */ - final public function file(string $file): self - { - $this->definition->setFile($file); - - return $this; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php deleted file mode 100644 index 37194e5..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php +++ /dev/null @@ -1,46 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; - -use Symfony\Component\DependencyInjection\ChildDefinition; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; - -trait ParentTrait -{ - /** - * Sets the Definition to inherit from. - * - * @return $this - * - * @throws InvalidArgumentException when parent cannot be set - */ - final public function parent(string $parent): self - { - if (!$this->allowParent) { - throw new InvalidArgumentException(sprintf('A parent cannot be defined when either "_instanceof" or "_defaults" are also defined for service prototype "%s".', $this->id)); - } - - if ($this->definition instanceof ChildDefinition) { - $this->definition->setParent($parent); - } else { - // cast Definition to ChildDefinition - $definition = serialize($this->definition); - $definition = substr_replace($definition, '53', 2, 2); - $definition = substr_replace($definition, 'Child', 44, 0); - $definition = unserialize($definition); - - $this->definition = $definition->setParent($parent); - } - - return $this; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php deleted file mode 100644 index 10fdcfb..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php +++ /dev/null @@ -1,27 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader\Configurator\Traits; - -trait PropertyTrait -{ - /** - * Sets a specific property. - * - * @return $this - */ - final public function property(string $name, $value): self - { - $this->definition->setProperty($name, static::processValue($value, true)); - - return $this; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/FileLoader.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/FileLoader.php deleted file mode 100644 index f5f78e3..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/FileLoader.php +++ /dev/null @@ -1,247 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader; - -use Symfony\Component\Config\Exception\FileLocatorFileNotFoundException; -use Symfony\Component\Config\Exception\LoaderLoadException; -use Symfony\Component\Config\FileLocatorInterface; -use Symfony\Component\Config\Loader\FileLoader as BaseFileLoader; -use Symfony\Component\Config\Loader\Loader; -use Symfony\Component\Config\Resource\GlobResource; -use Symfony\Component\DependencyInjection\Attribute\When; -use Symfony\Component\DependencyInjection\ChildDefinition; -use Symfony\Component\DependencyInjection\Compiler\RegisterAutoconfigureAttributesPass; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; - -/** - * FileLoader is the abstract class used by all built-in loaders that are file based. - * - * @author Fabien Potencier - */ -abstract class FileLoader extends BaseFileLoader -{ - public const ANONYMOUS_ID_REGEXP = '/^\.\d+_[^~]*+~[._a-zA-Z\d]{7}$/'; - - protected $container; - protected $isLoadingInstanceof = false; - protected $instanceof = []; - protected $interfaces = []; - protected $singlyImplemented = []; - protected $autoRegisterAliasesForSinglyImplementedInterfaces = true; - - public function __construct(ContainerBuilder $container, FileLocatorInterface $locator, string $env = null) - { - $this->container = $container; - - parent::__construct($locator, $env); - } - - /** - * {@inheritdoc} - * - * @param bool|string $ignoreErrors Whether errors should be ignored; pass "not_found" to ignore only when the loaded resource is not found - */ - public function import($resource, string $type = null, $ignoreErrors = false, string $sourceResource = null, $exclude = null) - { - $args = \func_get_args(); - - if ($ignoreNotFound = 'not_found' === $ignoreErrors) { - $args[2] = false; - } elseif (!\is_bool($ignoreErrors)) { - throw new \TypeError(sprintf('Invalid argument $ignoreErrors provided to "%s::import()": boolean or "not_found" expected, "%s" given.', static::class, get_debug_type($ignoreErrors))); - } - - try { - return parent::import(...$args); - } catch (LoaderLoadException $e) { - if (!$ignoreNotFound || !($prev = $e->getPrevious()) instanceof FileLocatorFileNotFoundException) { - throw $e; - } - - foreach ($prev->getTrace() as $frame) { - if ('import' === ($frame['function'] ?? null) && is_a($frame['class'] ?? '', Loader::class, true)) { - break; - } - } - - if (__FILE__ !== $frame['file']) { - throw $e; - } - } - - return null; - } - - /** - * Registers a set of classes as services using PSR-4 for discovery. - * - * @param Definition $prototype A definition to use as template - * @param string $namespace The namespace prefix of classes in the scanned directory - * @param string $resource The directory to look for classes, glob-patterns allowed - * @param string|string[]|null $exclude A globbed path of files to exclude or an array of globbed paths of files to exclude - */ - public function registerClasses(Definition $prototype, string $namespace, string $resource, $exclude = null) - { - if (!str_ends_with($namespace, '\\')) { - throw new InvalidArgumentException(sprintf('Namespace prefix must end with a "\\": "%s".', $namespace)); - } - if (!preg_match('/^(?:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+\\\\)++$/', $namespace)) { - throw new InvalidArgumentException(sprintf('Namespace is not a valid PSR-4 prefix: "%s".', $namespace)); - } - - $autoconfigureAttributes = new RegisterAutoconfigureAttributesPass(); - $autoconfigureAttributes = $autoconfigureAttributes->accept($prototype) ? $autoconfigureAttributes : null; - $classes = $this->findClasses($namespace, $resource, (array) $exclude, $autoconfigureAttributes); - // prepare for deep cloning - $serializedPrototype = serialize($prototype); - - foreach ($classes as $class => $errorMessage) { - if (null === $errorMessage && $autoconfigureAttributes && $this->env) { - $r = $this->container->getReflectionClass($class); - $attribute = null; - foreach ($r->getAttributes(When::class) as $attribute) { - if ($this->env === $attribute->newInstance()->env) { - $attribute = null; - break; - } - } - if (null !== $attribute) { - continue; - } - } - - if (interface_exists($class, false)) { - $this->interfaces[] = $class; - } else { - $this->setDefinition($class, $definition = unserialize($serializedPrototype)); - if (null !== $errorMessage) { - $definition->addError($errorMessage); - - continue; - } - foreach (class_implements($class, false) as $interface) { - $this->singlyImplemented[$interface] = ($this->singlyImplemented[$interface] ?? $class) !== $class ? false : $class; - } - } - } - - if ($this->autoRegisterAliasesForSinglyImplementedInterfaces) { - $this->registerAliasesForSinglyImplementedInterfaces(); - } - } - - public function registerAliasesForSinglyImplementedInterfaces() - { - foreach ($this->interfaces as $interface) { - if (!empty($this->singlyImplemented[$interface]) && !$this->container->has($interface)) { - $this->container->setAlias($interface, $this->singlyImplemented[$interface]); - } - } - - $this->interfaces = $this->singlyImplemented = []; - } - - /** - * Registers a definition in the container with its instanceof-conditionals. - */ - protected function setDefinition(string $id, Definition $definition) - { - $this->container->removeBindings($id); - - if ($this->isLoadingInstanceof) { - if (!$definition instanceof ChildDefinition) { - throw new InvalidArgumentException(sprintf('Invalid type definition "%s": ChildDefinition expected, "%s" given.', $id, get_debug_type($definition))); - } - $this->instanceof[$id] = $definition; - } else { - $this->container->setDefinition($id, $definition->setInstanceofConditionals($this->instanceof)); - } - } - - private function findClasses(string $namespace, string $pattern, array $excludePatterns, ?RegisterAutoconfigureAttributesPass $autoconfigureAttributes): array - { - $parameterBag = $this->container->getParameterBag(); - - $excludePaths = []; - $excludePrefix = null; - $excludePatterns = $parameterBag->unescapeValue($parameterBag->resolveValue($excludePatterns)); - foreach ($excludePatterns as $excludePattern) { - foreach ($this->glob($excludePattern, true, $resource, true, true) as $path => $info) { - if (null === $excludePrefix) { - $excludePrefix = $resource->getPrefix(); - } - - // normalize Windows slashes and remove trailing slashes - $excludePaths[rtrim(str_replace('\\', '/', $path), '/')] = true; - } - } - - $pattern = $parameterBag->unescapeValue($parameterBag->resolveValue($pattern)); - $classes = []; - $extRegexp = '/\\.php$/'; - $prefixLen = null; - foreach ($this->glob($pattern, true, $resource, false, false, $excludePaths) as $path => $info) { - if (null === $prefixLen) { - $prefixLen = \strlen($resource->getPrefix()); - - if ($excludePrefix && !str_starts_with($excludePrefix, $resource->getPrefix())) { - throw new InvalidArgumentException(sprintf('Invalid "exclude" pattern when importing classes for "%s": make sure your "exclude" pattern (%s) is a subset of the "resource" pattern (%s).', $namespace, $excludePattern, $pattern)); - } - } - - if (isset($excludePaths[str_replace('\\', '/', $path)])) { - continue; - } - - if (!preg_match($extRegexp, $path, $m) || !$info->isReadable()) { - continue; - } - $class = $namespace.ltrim(str_replace('/', '\\', substr($path, $prefixLen, -\strlen($m[0]))), '\\'); - - if (!preg_match('/^[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)*+$/', $class)) { - continue; - } - - try { - $r = $this->container->getReflectionClass($class); - } catch (\ReflectionException $e) { - $classes[$class] = $e->getMessage(); - continue; - } - // check to make sure the expected class exists - if (!$r) { - throw new InvalidArgumentException(sprintf('Expected to find class "%s" in file "%s" while importing services from resource "%s", but it was not found! Check the namespace prefix used with the resource.', $class, $path, $pattern)); - } - - if ($r->isInstantiable() || $r->isInterface()) { - $classes[$class] = null; - } - - if ($autoconfigureAttributes && !$r->isInstantiable()) { - $autoconfigureAttributes->processClass($this->container, $r); - } - } - - // track only for new & removed files - if ($resource instanceof GlobResource) { - $this->container->addResource($resource); - } else { - foreach ($resource as $path) { - $this->container->fileExists($path, false); - } - } - - return $classes; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php deleted file mode 100644 index 3815b28..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php +++ /dev/null @@ -1,211 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\Loader; - -use Symfony\Component\Config\Builder\ConfigBuilderGenerator; -use Symfony\Component\Config\Builder\ConfigBuilderGeneratorInterface; -use Symfony\Component\Config\Builder\ConfigBuilderInterface; -use Symfony\Component\Config\FileLocatorInterface; -use Symfony\Component\DependencyInjection\Attribute\When; -use Symfony\Component\DependencyInjection\Container; -use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Extension\ConfigurationExtensionInterface; -use Symfony\Component\DependencyInjection\Extension\ExtensionInterface; -use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; - -/** - * PhpFileLoader loads service definitions from a PHP file. - * - * The PHP file is required and the $container variable can be - * used within the file to change the container. - * - * @author Fabien Potencier - */ -class PhpFileLoader extends FileLoader -{ - protected $autoRegisterAliasesForSinglyImplementedInterfaces = false; - private $generator; - - public function __construct(ContainerBuilder $container, FileLocatorInterface $locator, string $env = null, ConfigBuilderGeneratorInterface $generator = null) - { - parent::__construct($container, $locator, $env); - $this->generator = $generator; - } - - /** - * {@inheritdoc} - */ - public function load($resource, string $type = null) - { - // the container and loader variables are exposed to the included file below - $container = $this->container; - $loader = $this; - - $path = $this->locator->locate($resource); - $this->setCurrentDir(\dirname($path)); - $this->container->fileExists($path); - - // the closure forbids access to the private scope in the included file - $load = \Closure::bind(function ($path, $env) use ($container, $loader, $resource, $type) { - return include $path; - }, $this, ProtectedPhpFileLoader::class); - - try { - $callback = $load($path, $this->env); - - if (\is_object($callback) && \is_callable($callback)) { - $this->executeCallback($callback, new ContainerConfigurator($this->container, $this, $this->instanceof, $path, $resource, $this->env), $path); - } - } finally { - $this->instanceof = []; - $this->registerAliasesForSinglyImplementedInterfaces(); - } - - return null; - } - - /** - * {@inheritdoc} - */ - public function supports($resource, string $type = null) - { - if (!\is_string($resource)) { - return false; - } - - if (null === $type && 'php' === pathinfo($resource, \PATHINFO_EXTENSION)) { - return true; - } - - return 'php' === $type; - } - - /** - * Resolve the parameters to the $callback and execute it. - */ - private function executeCallback(callable $callback, ContainerConfigurator $containerConfigurator, string $path) - { - if (!$callback instanceof \Closure) { - $callback = \Closure::fromCallable($callback); - } - - $arguments = []; - $configBuilders = []; - $r = new \ReflectionFunction($callback); - - if (\PHP_VERSION_ID >= 80000) { - $attribute = null; - foreach ($r->getAttributes(When::class) as $attribute) { - if ($this->env === $attribute->newInstance()->env) { - $attribute = null; - break; - } - } - if (null !== $attribute) { - return; - } - } - - foreach ($r->getParameters() as $parameter) { - $reflectionType = $parameter->getType(); - if (!$reflectionType instanceof \ReflectionNamedType) { - throw new \InvalidArgumentException(sprintf('Could not resolve argument "$%s" for "%s". You must typehint it (for example with "%s" or "%s").', $parameter->getName(), $path, ContainerConfigurator::class, ContainerBuilder::class)); - } - $type = $reflectionType->getName(); - - switch ($type) { - case ContainerConfigurator::class: - $arguments[] = $containerConfigurator; - break; - case ContainerBuilder::class: - $arguments[] = $this->container; - break; - case FileLoader::class: - case self::class: - $arguments[] = $this; - break; - default: - try { - $configBuilder = $this->configBuilder($type); - } catch (InvalidArgumentException|\LogicException $e) { - throw new \InvalidArgumentException(sprintf('Could not resolve argument "%s" for "%s".', $type.' $'.$parameter->getName(), $path), 0, $e); - } - $configBuilders[] = $configBuilder; - $arguments[] = $configBuilder; - } - } - - // Force load ContainerConfigurator to make env(), param() etc available. - class_exists(ContainerConfigurator::class); - - $callback(...$arguments); - - /** @var ConfigBuilderInterface $configBuilder */ - foreach ($configBuilders as $configBuilder) { - $containerConfigurator->extension($configBuilder->getExtensionAlias(), $configBuilder->toArray()); - } - } - - /** - * @param string $namespace FQCN string for a class implementing ConfigBuilderInterface - */ - private function configBuilder(string $namespace): ConfigBuilderInterface - { - if (!class_exists(ConfigBuilderGenerator::class)) { - throw new \LogicException('You cannot use the config builder as the Config component is not installed. Try running "composer require symfony/config".'); - } - - if (null === $this->generator) { - throw new \LogicException('You cannot use the ConfigBuilders without providing a class implementing ConfigBuilderGeneratorInterface.'); - } - - // If class exists and implements ConfigBuilderInterface - if (class_exists($namespace) && is_subclass_of($namespace, ConfigBuilderInterface::class)) { - return new $namespace(); - } - - // If it does not start with Symfony\Config\ we dont know how to handle this - if ('Symfony\\Config\\' !== substr($namespace, 0, 15)) { - throw new InvalidArgumentException(sprintf('Could not find or generate class "%s".', $namespace)); - } - - // Try to get the extension alias - $alias = Container::underscore(substr($namespace, 15, -6)); - - if (false !== strpos($alias, '\\')) { - throw new InvalidArgumentException('You can only use "root" ConfigBuilders from "Symfony\\Config\\" namespace. Nested classes like "Symfony\\Config\\Framework\\CacheConfig" cannot be used.'); - } - - if (!$this->container->hasExtension($alias)) { - $extensions = array_filter(array_map(function (ExtensionInterface $ext) { return $ext->getAlias(); }, $this->container->getExtensions())); - throw new InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s". Looked for namespace "%s", found "%s".', $namespace, $alias, $extensions ? implode('", "', $extensions) : 'none')); - } - - $extension = $this->container->getExtension($alias); - if (!$extension instanceof ConfigurationExtensionInterface) { - throw new \LogicException(sprintf('You cannot use the config builder for "%s" because the extension does not implement "%s".', $namespace, ConfigurationExtensionInterface::class)); - } - - $configuration = $extension->getConfiguration([], $this->container); - $loader = $this->generator->build($configuration); - - return $loader(); - } -} - -/** - * @internal - */ -final class ProtectedPhpFileLoader extends PhpFileLoader -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Parameter.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Parameter.php deleted file mode 100644 index e182e12..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Parameter.php +++ /dev/null @@ -1,35 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection; - -/** - * Parameter represents a parameter reference. - * - * @author Fabien Potencier - */ -class Parameter -{ - private $id; - - public function __construct(string $id) - { - $this->id = $id; - } - - /** - * @return string - */ - public function __toString() - { - return $this->id; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php deleted file mode 100644 index 67b8aee..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php +++ /dev/null @@ -1,154 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\ParameterBag; - -use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException; -use Symfony\Component\DependencyInjection\Exception\RuntimeException; - -/** - * @author Nicolas Grekas - */ -class EnvPlaceholderParameterBag extends ParameterBag -{ - private $envPlaceholderUniquePrefix; - private $envPlaceholders = []; - private $unusedEnvPlaceholders = []; - private $providedTypes = []; - - private static $counter = 0; - - /** - * {@inheritdoc} - */ - public function get(string $name) - { - if (str_starts_with($name, 'env(') && str_ends_with($name, ')') && 'env()' !== $name) { - $env = substr($name, 4, -1); - - if (isset($this->envPlaceholders[$env])) { - foreach ($this->envPlaceholders[$env] as $placeholder) { - return $placeholder; // return first result - } - } - if (isset($this->unusedEnvPlaceholders[$env])) { - foreach ($this->unusedEnvPlaceholders[$env] as $placeholder) { - return $placeholder; // return first result - } - } - if (!preg_match('/^(?:[-.\w]*+:)*+\w++$/', $env)) { - throw new InvalidArgumentException(sprintf('Invalid %s name: only "word" characters are allowed.', $name)); - } - if ($this->has($name) && null !== ($defaultValue = parent::get($name)) && !\is_string($defaultValue)) { - throw new RuntimeException(sprintf('The default value of an env() parameter must be a string or null, but "%s" given to "%s".', get_debug_type($defaultValue), $name)); - } - - $uniqueName = md5($name.'_'.self::$counter++); - $placeholder = sprintf('%s_%s_%s', $this->getEnvPlaceholderUniquePrefix(), strtr($env, ':-.', '___'), $uniqueName); - $this->envPlaceholders[$env][$placeholder] = $placeholder; - - return $placeholder; - } - - return parent::get($name); - } - - /** - * Gets the common env placeholder prefix for env vars created by this bag. - */ - public function getEnvPlaceholderUniquePrefix(): string - { - if (null === $this->envPlaceholderUniquePrefix) { - $reproducibleEntropy = unserialize(serialize($this->parameters)); - array_walk_recursive($reproducibleEntropy, function (&$v) { $v = null; }); - $this->envPlaceholderUniquePrefix = 'env_'.substr(md5(serialize($reproducibleEntropy)), -16); - } - - return $this->envPlaceholderUniquePrefix; - } - - /** - * Returns the map of env vars used in the resolved parameter values to their placeholders. - * - * @return string[][] A map of env var names to their placeholders - */ - public function getEnvPlaceholders() - { - return $this->envPlaceholders; - } - - public function getUnusedEnvPlaceholders(): array - { - return $this->unusedEnvPlaceholders; - } - - public function clearUnusedEnvPlaceholders() - { - $this->unusedEnvPlaceholders = []; - } - - /** - * Merges the env placeholders of another EnvPlaceholderParameterBag. - */ - public function mergeEnvPlaceholders(self $bag) - { - if ($newPlaceholders = $bag->getEnvPlaceholders()) { - $this->envPlaceholders += $newPlaceholders; - - foreach ($newPlaceholders as $env => $placeholders) { - $this->envPlaceholders[$env] += $placeholders; - } - } - - if ($newUnusedPlaceholders = $bag->getUnusedEnvPlaceholders()) { - $this->unusedEnvPlaceholders += $newUnusedPlaceholders; - - foreach ($newUnusedPlaceholders as $env => $placeholders) { - $this->unusedEnvPlaceholders[$env] += $placeholders; - } - } - } - - /** - * Maps env prefixes to their corresponding PHP types. - */ - public function setProvidedTypes(array $providedTypes) - { - $this->providedTypes = $providedTypes; - } - - /** - * Gets the PHP types corresponding to env() parameter prefixes. - * - * @return string[][] - */ - public function getProvidedTypes() - { - return $this->providedTypes; - } - - /** - * {@inheritdoc} - */ - public function resolve() - { - if ($this->resolved) { - return; - } - parent::resolve(); - - foreach ($this->envPlaceholders as $env => $placeholders) { - if ($this->has($name = "env($env)") && null !== ($default = $this->parameters[$name]) && !\is_string($default)) { - throw new RuntimeException(sprintf('The default value of env parameter "%s" must be a string or null, "%s" given.', $env, get_debug_type($default))); - } - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php deleted file mode 100644 index 808a0fa..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php +++ /dev/null @@ -1,106 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection\ParameterBag; - -use Symfony\Component\DependencyInjection\Exception\LogicException; -use Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException; - -/** - * ParameterBagInterface is the interface implemented by objects that manage service container parameters. - * - * @author Fabien Potencier - */ -interface ParameterBagInterface -{ - /** - * Clears all parameters. - * - * @throws LogicException if the ParameterBagInterface cannot be cleared - */ - public function clear(); - - /** - * Adds parameters to the service container parameters. - * - * @throws LogicException if the parameter cannot be added - */ - public function add(array $parameters); - - /** - * Gets the service container parameters. - * - * @return array - */ - public function all(); - - /** - * Gets a service container parameter. - * - * @return array|bool|string|int|float|\UnitEnum|null - * - * @throws ParameterNotFoundException if the parameter is not defined - */ - public function get(string $name); - - /** - * Removes a parameter. - */ - public function remove(string $name); - - /** - * Sets a service container parameter. - * - * @param array|bool|string|int|float|\UnitEnum|null $value The parameter value - * - * @throws LogicException if the parameter cannot be set - */ - public function set(string $name, $value); - - /** - * Returns true if a parameter name is defined. - * - * @return bool - */ - public function has(string $name); - - /** - * Replaces parameter placeholders (%name%) by their values for all parameters. - */ - public function resolve(); - - /** - * Replaces parameter placeholders (%name%) by their values. - * - * @param mixed $value A value - * - * @throws ParameterNotFoundException if a placeholder references a parameter that does not exist - */ - public function resolveValue($value); - - /** - * Escape parameter placeholders %. - * - * @param mixed $value - * - * @return mixed - */ - public function escapeValue($value); - - /** - * Unescape parameter placeholders %. - * - * @param mixed $value - * - * @return mixed - */ - public function unescapeValue($value); -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ReverseContainer.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ReverseContainer.php deleted file mode 100644 index 280e9e2..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/ReverseContainer.php +++ /dev/null @@ -1,81 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection; - -use Psr\Container\ContainerInterface; -use Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException; - -/** - * Turns public and "container.reversible" services back to their ids. - * - * @author Nicolas Grekas - */ -final class ReverseContainer -{ - private $serviceContainer; - private $reversibleLocator; - private $tagName; - private $getServiceId; - - public function __construct(Container $serviceContainer, ContainerInterface $reversibleLocator, string $tagName = 'container.reversible') - { - $this->serviceContainer = $serviceContainer; - $this->reversibleLocator = $reversibleLocator; - $this->tagName = $tagName; - $this->getServiceId = \Closure::bind(function (object $service): ?string { - return array_search($service, $this->services, true) ?: array_search($service, $this->privates, true) ?: null; - }, $serviceContainer, Container::class); - } - - /** - * Returns the id of the passed object when it exists as a service. - * - * To be reversible, services need to be either public or be tagged with "container.reversible". - */ - public function getId(object $service): ?string - { - if ($this->serviceContainer === $service) { - return 'service_container'; - } - - if (null === $id = ($this->getServiceId)($service)) { - return null; - } - - if ($this->serviceContainer->has($id) || $this->reversibleLocator->has($id)) { - return $id; - } - - return null; - } - - /** - * @throws ServiceNotFoundException When the service is not reversible - */ - public function getService(string $id): object - { - if ($this->serviceContainer->has($id)) { - return $this->serviceContainer->get($id); - } - - if ($this->reversibleLocator->has($id)) { - return $this->reversibleLocator->get($id); - } - - if (isset($this->serviceContainer->getRemovedIds()[$id])) { - throw new ServiceNotFoundException($id, null, null, [], sprintf('The "%s" service is private and cannot be accessed by reference. You should either make it public, or tag it as "%s".', $id, $this->tagName)); - } - - // will throw a ServiceNotFoundException - $this->serviceContainer->get($id); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Variable.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Variable.php deleted file mode 100644 index 21d33eb..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/Variable.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\DependencyInjection; - -/** - * Represents a variable. - * - * $var = new Variable('a'); - * - * will be dumped as - * - * $a - * - * by the PHP dumper. - * - * @author Johannes M. Schmitt - */ -class Variable -{ - private $name; - - public function __construct(string $name) - { - $this->name = $name; - } - - /** - * @return string - */ - public function __toString() - { - return $this->name; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/composer.json deleted file mode 100644 index cb891c7..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/dependency-injection/composer.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "symfony/dependency-injection", - "type": "library", - "description": "Allows you to standardize and centralize the way objects are constructed in your application", - "keywords": [], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16", - "symfony/polyfill-php81": "^1.22", - "symfony/service-contracts": "^1.1.6|^2" - }, - "require-dev": { - "symfony/yaml": "^4.4.26|^5.0|^6.0", - "symfony/config": "^5.3|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/yaml": "", - "symfony/config": "", - "symfony/finder": "For using double-star glob patterns or when GLOB_BRACE portability is required", - "symfony/expression-language": "For using expressions in service container configuration", - "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them" - }, - "conflict": { - "ext-psr": "<1.1|>=2", - "symfony/config": "<5.3", - "symfony/finder": "<4.4", - "symfony/proxy-manager-bridge": "<4.4", - "symfony/yaml": "<4.4.26" - }, - "provide": { - "psr/container-implementation": "1.0", - "symfony/service-implementation": "1.0|2.0" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\DependencyInjection\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "minimum-stability": "dev" -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/CHANGELOG.md deleted file mode 100644 index 7932e26..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -CHANGELOG -========= - -The changelog is maintained for all Symfony contracts at the following URL: -https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/LICENSE b/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/LICENSE deleted file mode 100644 index 406242f..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/LICENSE +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (c) 2020-2022 Fabien Potencier - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is furnished -to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/composer.json deleted file mode 100644 index cc7cc12..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/deprecation-contracts/composer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "symfony/deprecation-contracts", - "type": "library", - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Compiler.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Compiler.php deleted file mode 100644 index e8a064d..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Compiler.php +++ /dev/null @@ -1,147 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\ExpressionLanguage; - -use Symfony\Contracts\Service\ResetInterface; - -/** - * Compiles a node to PHP code. - * - * @author Fabien Potencier - */ -class Compiler implements ResetInterface -{ - private $source; - private $functions; - - public function __construct(array $functions) - { - $this->functions = $functions; - } - - public function getFunction(string $name) - { - return $this->functions[$name]; - } - - /** - * Gets the current PHP code after compilation. - * - * @return string - */ - public function getSource() - { - return $this->source; - } - - /** - * @return $this - */ - public function reset() - { - $this->source = ''; - - return $this; - } - - /** - * Compiles a node. - * - * @return $this - */ - public function compile(Node\Node $node) - { - $node->compile($this); - - return $this; - } - - public function subcompile(Node\Node $node) - { - $current = $this->source; - $this->source = ''; - - $node->compile($this); - - $source = $this->source; - $this->source = $current; - - return $source; - } - - /** - * Adds a raw string to the compiled code. - * - * @return $this - */ - public function raw(string $string) - { - $this->source .= $string; - - return $this; - } - - /** - * Adds a quoted string to the compiled code. - * - * @return $this - */ - public function string(string $value) - { - $this->source .= sprintf('"%s"', addcslashes($value, "\0\t\"\$\\")); - - return $this; - } - - /** - * Returns a PHP representation of a given value. - * - * @param mixed $value The value to convert - * - * @return $this - */ - public function repr($value) - { - if (\is_int($value) || \is_float($value)) { - if (false !== $locale = setlocale(\LC_NUMERIC, 0)) { - setlocale(\LC_NUMERIC, 'C'); - } - - $this->raw($value); - - if (false !== $locale) { - setlocale(\LC_NUMERIC, $locale); - } - } elseif (null === $value) { - $this->raw('null'); - } elseif (\is_bool($value)) { - $this->raw($value ? 'true' : 'false'); - } elseif (\is_array($value)) { - $this->raw('['); - $first = true; - foreach ($value as $key => $value) { - if (!$first) { - $this->raw(', '); - } - $first = false; - $this->repr($key); - $this->raw(' => '); - $this->repr($value); - } - $this->raw(']'); - } else { - $this->string($value); - } - - return $this; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Expression.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Expression.php deleted file mode 100644 index 6b81478..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Expression.php +++ /dev/null @@ -1,37 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\ExpressionLanguage; - -/** - * Represents an expression. - * - * @author Fabien Potencier - */ -class Expression -{ - protected $expression; - - public function __construct(string $expression) - { - $this->expression = $expression; - } - - /** - * Gets the expression. - * - * @return string - */ - public function __toString() - { - return $this->expression; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/ExpressionLanguage.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/ExpressionLanguage.php deleted file mode 100644 index 001f49d..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/ExpressionLanguage.php +++ /dev/null @@ -1,182 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\ExpressionLanguage; - -use Psr\Cache\CacheItemPoolInterface; -use Symfony\Component\Cache\Adapter\ArrayAdapter; - -// Help opcache.preload discover always-needed symbols -class_exists(ParsedExpression::class); - -/** - * Allows to compile and evaluate expressions written in your own DSL. - * - * @author Fabien Potencier - */ -class ExpressionLanguage -{ - private $cache; - private $lexer; - private $parser; - private $compiler; - - protected $functions = []; - - /** - * @param ExpressionFunctionProviderInterface[] $providers - */ - public function __construct(CacheItemPoolInterface $cache = null, array $providers = []) - { - $this->cache = $cache ?? new ArrayAdapter(); - $this->registerFunctions(); - foreach ($providers as $provider) { - $this->registerProvider($provider); - } - } - - /** - * Compiles an expression source code. - * - * @param Expression|string $expression The expression to compile - * - * @return string - */ - public function compile($expression, array $names = []) - { - return $this->getCompiler()->compile($this->parse($expression, $names)->getNodes())->getSource(); - } - - /** - * Evaluate an expression. - * - * @param Expression|string $expression The expression to compile - * - * @return mixed - */ - public function evaluate($expression, array $values = []) - { - return $this->parse($expression, array_keys($values))->getNodes()->evaluate($this->functions, $values); - } - - /** - * Parses an expression. - * - * @param Expression|string $expression The expression to parse - * - * @return ParsedExpression - */ - public function parse($expression, array $names) - { - if ($expression instanceof ParsedExpression) { - return $expression; - } - - asort($names); - $cacheKeyItems = []; - - foreach ($names as $nameKey => $name) { - $cacheKeyItems[] = \is_int($nameKey) ? $name : $nameKey.':'.$name; - } - - $cacheItem = $this->cache->getItem(rawurlencode($expression.'//'.implode('|', $cacheKeyItems))); - - if (null === $parsedExpression = $cacheItem->get()) { - $nodes = $this->getParser()->parse($this->getLexer()->tokenize((string) $expression), $names); - $parsedExpression = new ParsedExpression((string) $expression, $nodes); - - $cacheItem->set($parsedExpression); - $this->cache->save($cacheItem); - } - - return $parsedExpression; - } - - /** - * Validates the syntax of an expression. - * - * @param Expression|string $expression The expression to validate - * @param array|null $names The list of acceptable variable names in the expression, or null to accept any names - * - * @throws SyntaxError When the passed expression is invalid - */ - public function lint($expression, ?array $names): void - { - if ($expression instanceof ParsedExpression) { - return; - } - - $this->getParser()->lint($this->getLexer()->tokenize((string) $expression), $names); - } - - /** - * Registers a function. - * - * @param callable $compiler A callable able to compile the function - * @param callable $evaluator A callable able to evaluate the function - * - * @throws \LogicException when registering a function after calling evaluate(), compile() or parse() - * - * @see ExpressionFunction - */ - public function register(string $name, callable $compiler, callable $evaluator) - { - if (null !== $this->parser) { - throw new \LogicException('Registering functions after calling evaluate(), compile() or parse() is not supported.'); - } - - $this->functions[$name] = ['compiler' => $compiler, 'evaluator' => $evaluator]; - } - - public function addFunction(ExpressionFunction $function) - { - $this->register($function->getName(), $function->getCompiler(), $function->getEvaluator()); - } - - public function registerProvider(ExpressionFunctionProviderInterface $provider) - { - foreach ($provider->getFunctions() as $function) { - $this->addFunction($function); - } - } - - protected function registerFunctions() - { - $this->addFunction(ExpressionFunction::fromPhp('constant')); - } - - private function getLexer(): Lexer - { - if (null === $this->lexer) { - $this->lexer = new Lexer(); - } - - return $this->lexer; - } - - private function getParser(): Parser - { - if (null === $this->parser) { - $this->parser = new Parser($this->functions); - } - - return $this->parser; - } - - private function getCompiler(): Compiler - { - if (null === $this->compiler) { - $this->compiler = new Compiler($this->functions); - } - - return $this->compiler->reset(); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ArgumentsNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ArgumentsNode.php deleted file mode 100644 index e9849a4..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ArgumentsNode.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\ExpressionLanguage\Node; - -use Symfony\Component\ExpressionLanguage\Compiler; - -/** - * @author Fabien Potencier - * - * @internal - */ -class ArgumentsNode extends ArrayNode -{ - public function compile(Compiler $compiler) - { - $this->compileArguments($compiler, false); - } - - public function toArray() - { - $array = []; - - foreach ($this->getKeyValuePairs() as $pair) { - $array[] = $pair['value']; - $array[] = ', '; - } - array_pop($array); - - return $array; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ConstantNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ConstantNode.php deleted file mode 100644 index b86abd4..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/ConstantNode.php +++ /dev/null @@ -1,81 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\ExpressionLanguage\Node; - -use Symfony\Component\ExpressionLanguage\Compiler; - -/** - * @author Fabien Potencier - * - * @internal - */ -class ConstantNode extends Node -{ - private $isIdentifier; - - public function __construct($value, bool $isIdentifier = false) - { - $this->isIdentifier = $isIdentifier; - parent::__construct( - [], - ['value' => $value] - ); - } - - public function compile(Compiler $compiler) - { - $compiler->repr($this->attributes['value']); - } - - public function evaluate(array $functions, array $values) - { - return $this->attributes['value']; - } - - public function toArray() - { - $array = []; - $value = $this->attributes['value']; - - if ($this->isIdentifier) { - $array[] = $value; - } elseif (true === $value) { - $array[] = 'true'; - } elseif (false === $value) { - $array[] = 'false'; - } elseif (null === $value) { - $array[] = 'null'; - } elseif (is_numeric($value)) { - $array[] = $value; - } elseif (!\is_array($value)) { - $array[] = $this->dumpString($value); - } elseif ($this->isHash($value)) { - foreach ($value as $k => $v) { - $array[] = ', '; - $array[] = new self($k); - $array[] = ': '; - $array[] = new self($v); - } - $array[0] = '{'; - $array[] = '}'; - } else { - foreach ($value as $v) { - $array[] = ', '; - $array[] = new self($v); - } - $array[0] = '['; - $array[] = ']'; - } - - return $array; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/NameNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/NameNode.php deleted file mode 100644 index e017e96..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/NameNode.php +++ /dev/null @@ -1,45 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\ExpressionLanguage\Node; - -use Symfony\Component\ExpressionLanguage\Compiler; - -/** - * @author Fabien Potencier - * - * @internal - */ -class NameNode extends Node -{ - public function __construct(string $name) - { - parent::__construct( - [], - ['name' => $name] - ); - } - - public function compile(Compiler $compiler) - { - $compiler->raw('$'.$this->attributes['name']); - } - - public function evaluate(array $functions, array $values) - { - return $values[$this->attributes['name']]; - } - - public function toArray() - { - return [$this->attributes['name']]; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/UnaryNode.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/UnaryNode.php deleted file mode 100644 index 9bd9d9b..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/Node/UnaryNode.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\ExpressionLanguage\Node; - -use Symfony\Component\ExpressionLanguage\Compiler; - -/** - * @author Fabien Potencier - * - * @internal - */ -class UnaryNode extends Node -{ - private const OPERATORS = [ - '!' => '!', - 'not' => '!', - '+' => '+', - '-' => '-', - ]; - - public function __construct(string $operator, Node $node) - { - parent::__construct( - ['node' => $node], - ['operator' => $operator] - ); - } - - public function compile(Compiler $compiler) - { - $compiler - ->raw('(') - ->raw(self::OPERATORS[$this->attributes['operator']]) - ->compile($this->nodes['node']) - ->raw(')') - ; - } - - public function evaluate(array $functions, array $values) - { - $value = $this->nodes['node']->evaluate($functions, $values); - switch ($this->attributes['operator']) { - case 'not': - case '!': - return !$value; - case '-': - return -$value; - } - - return $value; - } - - public function toArray(): array - { - return ['(', $this->attributes['operator'].' ', $this->nodes['node'], ')']; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/composer.json deleted file mode 100644 index 9319974..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/expression-language/composer.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "name": "symfony/expression-language", - "type": "library", - "description": "Provides an engine that can compile and evaluate expressions", - "keywords": [], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.2.5", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3" - }, - "autoload": { - "psr-4": { "Symfony\\Component\\ExpressionLanguage\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "minimum-stability": "dev" -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/CHANGELOG.md deleted file mode 100644 index fcb7170..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/CHANGELOG.md +++ /dev/null @@ -1,82 +0,0 @@ -CHANGELOG -========= - -5.4 ---- - - * Add `Path` class - * Add `$lock` argument to `Filesystem::appendToFile()` - -5.0.0 ------ - - * `Filesystem::dumpFile()` and `appendToFile()` don't accept arrays anymore - -4.4.0 ------ - - * support for passing a `null` value to `Filesystem::isAbsolutePath()` is deprecated and will be removed in 5.0 - * `tempnam()` now accepts a third argument `$suffix`. - -4.3.0 ------ - - * support for passing arrays to `Filesystem::dumpFile()` is deprecated and will be removed in 5.0 - * support for passing arrays to `Filesystem::appendToFile()` is deprecated and will be removed in 5.0 - -4.0.0 ------ - - * removed `LockHandler` - * Support for passing relative paths to `Filesystem::makePathRelative()` has been removed. - -3.4.0 ------ - - * support for passing relative paths to `Filesystem::makePathRelative()` is deprecated and will be removed in 4.0 - -3.3.0 ------ - - * added `appendToFile()` to append contents to existing files - -3.2.0 ------ - - * added `readlink()` as a platform independent method to read links - -3.0.0 ------ - - * removed `$mode` argument from `Filesystem::dumpFile()` - -2.8.0 ------ - - * added tempnam() a stream aware version of PHP's native tempnam() - -2.6.0 ------ - - * added LockHandler - -2.3.12 ------- - - * deprecated dumpFile() file mode argument. - -2.3.0 ------ - - * added the dumpFile() method to atomically write files - -2.2.0 ------ - - * added a delete option for the mirror() method - -2.1.0 ------ - - * 24eb396 : BC Break : mkdir() function now throws exception in case of failure instead of returning Boolean value - * created the component diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/ExceptionInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/ExceptionInterface.php deleted file mode 100644 index fc438d9..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/ExceptionInterface.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem\Exception; - -/** - * Exception interface for all exceptions thrown by the component. - * - * @author Romain Neutron - */ -interface ExceptionInterface extends \Throwable -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/FileNotFoundException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/FileNotFoundException.php deleted file mode 100644 index 48b6408..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/FileNotFoundException.php +++ /dev/null @@ -1,34 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem\Exception; - -/** - * Exception class thrown when a file couldn't be found. - * - * @author Fabien Potencier - * @author Christian Gärtner - */ -class FileNotFoundException extends IOException -{ - public function __construct(string $message = null, int $code = 0, \Throwable $previous = null, string $path = null) - { - if (null === $message) { - if (null === $path) { - $message = 'File could not be found.'; - } else { - $message = sprintf('File "%s" could not be found.', $path); - } - } - - parent::__construct($message, $code, $previous, $path); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/RuntimeException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/RuntimeException.php deleted file mode 100644 index a7512dc..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/filesystem/Exception/RuntimeException.php +++ /dev/null @@ -1,19 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\Filesystem\Exception; - -/** - * @author Théo Fidry - */ -class RuntimeException extends \RuntimeException implements ExceptionInterface -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Mbstring.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Mbstring.php deleted file mode 100644 index b65c54a..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Mbstring.php +++ /dev/null @@ -1,873 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Mbstring; - -/** - * Partial mbstring implementation in PHP, iconv based, UTF-8 centric. - * - * Implemented: - * - mb_chr - Returns a specific character from its Unicode code point - * - mb_convert_encoding - Convert character encoding - * - mb_convert_variables - Convert character code in variable(s) - * - mb_decode_mimeheader - Decode string in MIME header field - * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED - * - mb_decode_numericentity - Decode HTML numeric string reference to character - * - mb_encode_numericentity - Encode character to HTML numeric string reference - * - mb_convert_case - Perform case folding on a string - * - mb_detect_encoding - Detect character encoding - * - mb_get_info - Get internal settings of mbstring - * - mb_http_input - Detect HTTP input character encoding - * - mb_http_output - Set/Get HTTP output character encoding - * - mb_internal_encoding - Set/Get internal character encoding - * - mb_list_encodings - Returns an array of all supported encodings - * - mb_ord - Returns the Unicode code point of a character - * - mb_output_handler - Callback function converts character encoding in output buffer - * - mb_scrub - Replaces ill-formed byte sequences with substitute characters - * - mb_strlen - Get string length - * - mb_strpos - Find position of first occurrence of string in a string - * - mb_strrpos - Find position of last occurrence of a string in a string - * - mb_str_split - Convert a string to an array - * - mb_strtolower - Make a string lowercase - * - mb_strtoupper - Make a string uppercase - * - mb_substitute_character - Set/Get substitution character - * - mb_substr - Get part of string - * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive - * - mb_stristr - Finds first occurrence of a string within another, case insensitive - * - mb_strrchr - Finds the last occurrence of a character in a string within another - * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive - * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive - * - mb_strstr - Finds first occurrence of a string within another - * - mb_strwidth - Return width of string - * - mb_substr_count - Count the number of substring occurrences - * - * Not implemented: - * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) - * - mb_ereg_* - Regular expression with multibyte support - * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable - * - mb_preferred_mime_name - Get MIME charset string - * - mb_regex_encoding - Returns current encoding for multibyte regex as string - * - mb_regex_set_options - Set/Get the default options for mbregex functions - * - mb_send_mail - Send encoded mail - * - mb_split - Split multibyte string using regular expression - * - mb_strcut - Get part of string - * - mb_strimwidth - Get truncated string with specified width - * - * @author Nicolas Grekas - * - * @internal - */ -final class Mbstring -{ - public const MB_CASE_FOLD = \PHP_INT_MAX; - - private const CASE_FOLD = [ - ['µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"], - ['μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'], - ]; - - private static $encodingList = ['ASCII', 'UTF-8']; - private static $language = 'neutral'; - private static $internalEncoding = 'UTF-8'; - - public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) - { - if (\is_array($fromEncoding) || ($fromEncoding !== null && false !== strpos($fromEncoding, ','))) { - $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); - } else { - $fromEncoding = self::getEncoding($fromEncoding); - } - - $toEncoding = self::getEncoding($toEncoding); - - if ('BASE64' === $fromEncoding) { - $s = base64_decode($s); - $fromEncoding = $toEncoding; - } - - if ('BASE64' === $toEncoding) { - return base64_encode($s); - } - - if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) { - if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) { - $fromEncoding = 'Windows-1252'; - } - if ('UTF-8' !== $fromEncoding) { - $s = \iconv($fromEncoding, 'UTF-8//IGNORE', $s); - } - - return preg_replace_callback('/[\x80-\xFF]+/', [__CLASS__, 'html_encoding_callback'], $s); - } - - if ('HTML-ENTITIES' === $fromEncoding) { - $s = html_entity_decode($s, \ENT_COMPAT, 'UTF-8'); - $fromEncoding = 'UTF-8'; - } - - return \iconv($fromEncoding, $toEncoding.'//IGNORE', $s); - } - - public static function mb_convert_variables($toEncoding, $fromEncoding, &...$vars) - { - $ok = true; - array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) { - if (false === $v = self::mb_convert_encoding($v, $toEncoding, $fromEncoding)) { - $ok = false; - } - }); - - return $ok ? $fromEncoding : false; - } - - public static function mb_decode_mimeheader($s) - { - return \iconv_mime_decode($s, 2, self::$internalEncoding); - } - - public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) - { - trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', \E_USER_WARNING); - } - - public static function mb_decode_numericentity($s, $convmap, $encoding = null) - { - if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { - trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); - - return null; - } - - if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { - return false; - } - - if (null !== $encoding && !is_scalar($encoding)) { - trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); - - return ''; // Instead of null (cf. mb_encode_numericentity). - } - - $s = (string) $s; - if ('' === $s) { - return ''; - } - - $encoding = self::getEncoding($encoding); - - if ('UTF-8' === $encoding) { - $encoding = null; - if (!preg_match('//u', $s)) { - $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); - } - } else { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); - } - - $cnt = floor(\count($convmap) / 4) * 4; - - for ($i = 0; $i < $cnt; $i += 4) { - // collector_decode_htmlnumericentity ignores $convmap[$i + 3] - $convmap[$i] += $convmap[$i + 2]; - $convmap[$i + 1] += $convmap[$i + 2]; - } - - $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) { - $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; - for ($i = 0; $i < $cnt; $i += 4) { - if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { - return self::mb_chr($c - $convmap[$i + 2]); - } - } - - return $m[0]; - }, $s); - - if (null === $encoding) { - return $s; - } - - return \iconv('UTF-8', $encoding.'//IGNORE', $s); - } - - public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) - { - if (null !== $s && !is_scalar($s) && !(\is_object($s) && method_exists($s, '__toString'))) { - trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', \E_USER_WARNING); - - return null; - } - - if (!\is_array($convmap) || (80000 > \PHP_VERSION_ID && !$convmap)) { - return false; - } - - if (null !== $encoding && !is_scalar($encoding)) { - trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', \E_USER_WARNING); - - return null; // Instead of '' (cf. mb_decode_numericentity). - } - - if (null !== $is_hex && !is_scalar($is_hex)) { - trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', \E_USER_WARNING); - - return null; - } - - $s = (string) $s; - if ('' === $s) { - return ''; - } - - $encoding = self::getEncoding($encoding); - - if ('UTF-8' === $encoding) { - $encoding = null; - if (!preg_match('//u', $s)) { - $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); - } - } else { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); - } - - static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; - - $cnt = floor(\count($convmap) / 4) * 4; - $i = 0; - $len = \strlen($s); - $result = ''; - - while ($i < $len) { - $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; - $uchr = substr($s, $i, $ulen); - $i += $ulen; - $c = self::mb_ord($uchr); - - for ($j = 0; $j < $cnt; $j += 4) { - if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { - $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; - $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; - continue 2; - } - } - $result .= $uchr; - } - - if (null === $encoding) { - return $result; - } - - return \iconv('UTF-8', $encoding.'//IGNORE', $result); - } - - public static function mb_convert_case($s, $mode, $encoding = null) - { - $s = (string) $s; - if ('' === $s) { - return ''; - } - - $encoding = self::getEncoding($encoding); - - if ('UTF-8' === $encoding) { - $encoding = null; - if (!preg_match('//u', $s)) { - $s = @\iconv('UTF-8', 'UTF-8//IGNORE', $s); - } - } else { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); - } - - if (\MB_CASE_TITLE == $mode) { - static $titleRegexp = null; - if (null === $titleRegexp) { - $titleRegexp = self::getData('titleCaseRegexp'); - } - $s = preg_replace_callback($titleRegexp, [__CLASS__, 'title_case'], $s); - } else { - if (\MB_CASE_UPPER == $mode) { - static $upper = null; - if (null === $upper) { - $upper = self::getData('upperCase'); - } - $map = $upper; - } else { - if (self::MB_CASE_FOLD === $mode) { - $s = str_replace(self::CASE_FOLD[0], self::CASE_FOLD[1], $s); - } - - static $lower = null; - if (null === $lower) { - $lower = self::getData('lowerCase'); - } - $map = $lower; - } - - static $ulenMask = ["\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4]; - - $i = 0; - $len = \strlen($s); - - while ($i < $len) { - $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; - $uchr = substr($s, $i, $ulen); - $i += $ulen; - - if (isset($map[$uchr])) { - $uchr = $map[$uchr]; - $nlen = \strlen($uchr); - - if ($nlen == $ulen) { - $nlen = $i; - do { - $s[--$nlen] = $uchr[--$ulen]; - } while ($ulen); - } else { - $s = substr_replace($s, $uchr, $i - $ulen, $ulen); - $len += $nlen - $ulen; - $i += $nlen - $ulen; - } - } - } - } - - if (null === $encoding) { - return $s; - } - - return \iconv('UTF-8', $encoding.'//IGNORE', $s); - } - - public static function mb_internal_encoding($encoding = null) - { - if (null === $encoding) { - return self::$internalEncoding; - } - - $normalizedEncoding = self::getEncoding($encoding); - - if ('UTF-8' === $normalizedEncoding || false !== @\iconv($normalizedEncoding, $normalizedEncoding, ' ')) { - self::$internalEncoding = $normalizedEncoding; - - return true; - } - - if (80000 > \PHP_VERSION_ID) { - return false; - } - - throw new \ValueError(sprintf('Argument #1 ($encoding) must be a valid encoding, "%s" given', $encoding)); - } - - public static function mb_language($lang = null) - { - if (null === $lang) { - return self::$language; - } - - switch ($normalizedLang = strtolower($lang)) { - case 'uni': - case 'neutral': - self::$language = $normalizedLang; - - return true; - } - - if (80000 > \PHP_VERSION_ID) { - return false; - } - - throw new \ValueError(sprintf('Argument #1 ($language) must be a valid language, "%s" given', $lang)); - } - - public static function mb_list_encodings() - { - return ['UTF-8']; - } - - public static function mb_encoding_aliases($encoding) - { - switch (strtoupper($encoding)) { - case 'UTF8': - case 'UTF-8': - return ['utf8']; - } - - return false; - } - - public static function mb_check_encoding($var = null, $encoding = null) - { - if (null === $encoding) { - if (null === $var) { - return false; - } - $encoding = self::$internalEncoding; - } - - return self::mb_detect_encoding($var, [$encoding]) || false !== @\iconv($encoding, $encoding, $var); - } - - public static function mb_detect_encoding($str, $encodingList = null, $strict = false) - { - if (null === $encodingList) { - $encodingList = self::$encodingList; - } else { - if (!\is_array($encodingList)) { - $encodingList = array_map('trim', explode(',', $encodingList)); - } - $encodingList = array_map('strtoupper', $encodingList); - } - - foreach ($encodingList as $enc) { - switch ($enc) { - case 'ASCII': - if (!preg_match('/[\x80-\xFF]/', $str)) { - return $enc; - } - break; - - case 'UTF8': - case 'UTF-8': - if (preg_match('//u', $str)) { - return 'UTF-8'; - } - break; - - default: - if (0 === strncmp($enc, 'ISO-8859-', 9)) { - return $enc; - } - } - } - - return false; - } - - public static function mb_detect_order($encodingList = null) - { - if (null === $encodingList) { - return self::$encodingList; - } - - if (!\is_array($encodingList)) { - $encodingList = array_map('trim', explode(',', $encodingList)); - } - $encodingList = array_map('strtoupper', $encodingList); - - foreach ($encodingList as $enc) { - switch ($enc) { - default: - if (strncmp($enc, 'ISO-8859-', 9)) { - return false; - } - // no break - case 'ASCII': - case 'UTF8': - case 'UTF-8': - } - } - - self::$encodingList = $encodingList; - - return true; - } - - public static function mb_strlen($s, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return \strlen($s); - } - - return @\iconv_strlen($s, $encoding); - } - - public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return strpos($haystack, $needle, $offset); - } - - $needle = (string) $needle; - if ('' === $needle) { - if (80000 > \PHP_VERSION_ID) { - trigger_error(__METHOD__.': Empty delimiter', \E_USER_WARNING); - - return false; - } - - return 0; - } - - return \iconv_strpos($haystack, $needle, $offset, $encoding); - } - - public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return strrpos($haystack, $needle, $offset); - } - - if ($offset != (int) $offset) { - $offset = 0; - } elseif ($offset = (int) $offset) { - if ($offset < 0) { - if (0 > $offset += self::mb_strlen($needle)) { - $haystack = self::mb_substr($haystack, 0, $offset, $encoding); - } - $offset = 0; - } else { - $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); - } - } - - $pos = '' !== $needle || 80000 > \PHP_VERSION_ID - ? \iconv_strrpos($haystack, $needle, $encoding) - : self::mb_strlen($haystack, $encoding); - - return false !== $pos ? $offset + $pos : false; - } - - public static function mb_str_split($string, $split_length = 1, $encoding = null) - { - if (null !== $string && !is_scalar($string) && !(\is_object($string) && method_exists($string, '__toString'))) { - trigger_error('mb_str_split() expects parameter 1 to be string, '.\gettype($string).' given', \E_USER_WARNING); - - return null; - } - - if (1 > $split_length = (int) $split_length) { - if (80000 > \PHP_VERSION_ID) { - trigger_error('The length of each segment must be greater than zero', \E_USER_WARNING); - return false; - } - - throw new \ValueError('Argument #2 ($length) must be greater than 0'); - } - - if (null === $encoding) { - $encoding = mb_internal_encoding(); - } - - if ('UTF-8' === $encoding = self::getEncoding($encoding)) { - $rx = '/('; - while (65535 < $split_length) { - $rx .= '.{65535}'; - $split_length -= 65535; - } - $rx .= '.{'.$split_length.'})/us'; - - return preg_split($rx, $string, null, \PREG_SPLIT_DELIM_CAPTURE | \PREG_SPLIT_NO_EMPTY); - } - - $result = []; - $length = mb_strlen($string, $encoding); - - for ($i = 0; $i < $length; $i += $split_length) { - $result[] = mb_substr($string, $i, $split_length, $encoding); - } - - return $result; - } - - public static function mb_strtolower($s, $encoding = null) - { - return self::mb_convert_case($s, \MB_CASE_LOWER, $encoding); - } - - public static function mb_strtoupper($s, $encoding = null) - { - return self::mb_convert_case($s, \MB_CASE_UPPER, $encoding); - } - - public static function mb_substitute_character($c = null) - { - if (null === $c) { - return 'none'; - } - if (0 === strcasecmp($c, 'none')) { - return true; - } - if (80000 > \PHP_VERSION_ID) { - return false; - } - if (\is_int($c) || 'long' === $c || 'entity' === $c) { - return false; - } - - throw new \ValueError('Argument #1 ($substitute_character) must be "none", "long", "entity" or a valid codepoint'); - } - - public static function mb_substr($s, $start, $length = null, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - return (string) substr($s, $start, null === $length ? 2147483647 : $length); - } - - if ($start < 0) { - $start = \iconv_strlen($s, $encoding) + $start; - if ($start < 0) { - $start = 0; - } - } - - if (null === $length) { - $length = 2147483647; - } elseif ($length < 0) { - $length = \iconv_strlen($s, $encoding) + $length - $start; - if ($length < 0) { - return ''; - } - } - - return (string) \iconv_substr($s, $start, $length, $encoding); - } - - public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) - { - $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); - $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); - - return self::mb_strpos($haystack, $needle, $offset, $encoding); - } - - public static function mb_stristr($haystack, $needle, $part = false, $encoding = null) - { - $pos = self::mb_stripos($haystack, $needle, 0, $encoding); - - return self::getSubpart($pos, $part, $haystack, $encoding); - } - - public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null) - { - $encoding = self::getEncoding($encoding); - if ('CP850' === $encoding || 'ASCII' === $encoding) { - $pos = strrpos($haystack, $needle); - } else { - $needle = self::mb_substr($needle, 0, 1, $encoding); - $pos = \iconv_strrpos($haystack, $needle, $encoding); - } - - return self::getSubpart($pos, $part, $haystack, $encoding); - } - - public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null) - { - $needle = self::mb_substr($needle, 0, 1, $encoding); - $pos = self::mb_strripos($haystack, $needle, $encoding); - - return self::getSubpart($pos, $part, $haystack, $encoding); - } - - public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) - { - $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); - $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); - - return self::mb_strrpos($haystack, $needle, $offset, $encoding); - } - - public static function mb_strstr($haystack, $needle, $part = false, $encoding = null) - { - $pos = strpos($haystack, $needle); - if (false === $pos) { - return false; - } - if ($part) { - return substr($haystack, 0, $pos); - } - - return substr($haystack, $pos); - } - - public static function mb_get_info($type = 'all') - { - $info = [ - 'internal_encoding' => self::$internalEncoding, - 'http_output' => 'pass', - 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)', - 'func_overload' => 0, - 'func_overload_list' => 'no overload', - 'mail_charset' => 'UTF-8', - 'mail_header_encoding' => 'BASE64', - 'mail_body_encoding' => 'BASE64', - 'illegal_chars' => 0, - 'encoding_translation' => 'Off', - 'language' => self::$language, - 'detect_order' => self::$encodingList, - 'substitute_character' => 'none', - 'strict_detection' => 'Off', - ]; - - if ('all' === $type) { - return $info; - } - if (isset($info[$type])) { - return $info[$type]; - } - - return false; - } - - public static function mb_http_input($type = '') - { - return false; - } - - public static function mb_http_output($encoding = null) - { - return null !== $encoding ? 'pass' === $encoding : 'pass'; - } - - public static function mb_strwidth($s, $encoding = null) - { - $encoding = self::getEncoding($encoding); - - if ('UTF-8' !== $encoding) { - $s = \iconv($encoding, 'UTF-8//IGNORE', $s); - } - - $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); - - return ($wide << 1) + \iconv_strlen($s, 'UTF-8'); - } - - public static function mb_substr_count($haystack, $needle, $encoding = null) - { - return substr_count($haystack, $needle); - } - - public static function mb_output_handler($contents, $status) - { - return $contents; - } - - public static function mb_chr($code, $encoding = null) - { - if (0x80 > $code %= 0x200000) { - $s = \chr($code); - } elseif (0x800 > $code) { - $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); - } elseif (0x10000 > $code) { - $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); - } else { - $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); - } - - if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { - $s = mb_convert_encoding($s, $encoding, 'UTF-8'); - } - - return $s; - } - - public static function mb_ord($s, $encoding = null) - { - if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { - $s = mb_convert_encoding($s, 'UTF-8', $encoding); - } - - if (1 === \strlen($s)) { - return \ord($s); - } - - $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; - if (0xF0 <= $code) { - return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; - } - if (0xE0 <= $code) { - return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; - } - if (0xC0 <= $code) { - return (($code - 0xC0) << 6) + $s[2] - 0x80; - } - - return $code; - } - - private static function getSubpart($pos, $part, $haystack, $encoding) - { - if (false === $pos) { - return false; - } - if ($part) { - return self::mb_substr($haystack, 0, $pos, $encoding); - } - - return self::mb_substr($haystack, $pos, null, $encoding); - } - - private static function html_encoding_callback(array $m) - { - $i = 1; - $entities = ''; - $m = unpack('C*', htmlentities($m[0], \ENT_COMPAT, 'UTF-8')); - - while (isset($m[$i])) { - if (0x80 > $m[$i]) { - $entities .= \chr($m[$i++]); - continue; - } - if (0xF0 <= $m[$i]) { - $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; - } elseif (0xE0 <= $m[$i]) { - $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; - } else { - $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80; - } - - $entities .= '&#'.$c.';'; - } - - return $entities; - } - - private static function title_case(array $s) - { - return self::mb_convert_case($s[1], \MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], \MB_CASE_LOWER, 'UTF-8'); - } - - private static function getData($file) - { - if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { - return require $file; - } - - return false; - } - - private static function getEncoding($encoding) - { - if (null === $encoding) { - return self::$internalEncoding; - } - - if ('UTF-8' === $encoding) { - return 'UTF-8'; - } - - $encoding = strtoupper($encoding); - - if ('8BIT' === $encoding || 'BINARY' === $encoding) { - return 'CP850'; - } - - if ('UTF8' === $encoding) { - return 'UTF-8'; - } - - return $encoding; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php deleted file mode 100644 index fac60b0..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +++ /dev/null @@ -1,1397 +0,0 @@ - 'a', - 'B' => 'b', - 'C' => 'c', - 'D' => 'd', - 'E' => 'e', - 'F' => 'f', - 'G' => 'g', - 'H' => 'h', - 'I' => 'i', - 'J' => 'j', - 'K' => 'k', - 'L' => 'l', - 'M' => 'm', - 'N' => 'n', - 'O' => 'o', - 'P' => 'p', - 'Q' => 'q', - 'R' => 'r', - 'S' => 's', - 'T' => 't', - 'U' => 'u', - 'V' => 'v', - 'W' => 'w', - 'X' => 'x', - 'Y' => 'y', - 'Z' => 'z', - 'À' => 'à', - 'Á' => 'á', - 'Â' => 'â', - 'Ã' => 'ã', - 'Ä' => 'ä', - 'Å' => 'å', - 'Æ' => 'æ', - 'Ç' => 'ç', - 'È' => 'è', - 'É' => 'é', - 'Ê' => 'ê', - 'Ë' => 'ë', - 'Ì' => 'ì', - 'Í' => 'í', - 'Î' => 'î', - 'Ï' => 'ï', - 'Ð' => 'ð', - 'Ñ' => 'ñ', - 'Ò' => 'ò', - 'Ó' => 'ó', - 'Ô' => 'ô', - 'Õ' => 'õ', - 'Ö' => 'ö', - 'Ø' => 'ø', - 'Ù' => 'ù', - 'Ú' => 'ú', - 'Û' => 'û', - 'Ü' => 'ü', - 'Ý' => 'ý', - 'Þ' => 'þ', - 'Ā' => 'ā', - 'Ă' => 'ă', - 'Ą' => 'ą', - 'Ć' => 'ć', - 'Ĉ' => 'ĉ', - 'Ċ' => 'ċ', - 'Č' => 'č', - 'Ď' => 'ď', - 'Đ' => 'đ', - 'Ē' => 'ē', - 'Ĕ' => 'ĕ', - 'Ė' => 'ė', - 'Ę' => 'ę', - 'Ě' => 'ě', - 'Ĝ' => 'ĝ', - 'Ğ' => 'ğ', - 'Ġ' => 'ġ', - 'Ģ' => 'ģ', - 'Ĥ' => 'ĥ', - 'Ħ' => 'ħ', - 'Ĩ' => 'ĩ', - 'Ī' => 'ī', - 'Ĭ' => 'ĭ', - 'Į' => 'į', - 'İ' => 'i̇', - 'IJ' => 'ij', - 'Ĵ' => 'ĵ', - 'Ķ' => 'ķ', - 'Ĺ' => 'ĺ', - 'Ļ' => 'ļ', - 'Ľ' => 'ľ', - 'Ŀ' => 'ŀ', - 'Ł' => 'ł', - 'Ń' => 'ń', - 'Ņ' => 'ņ', - 'Ň' => 'ň', - 'Ŋ' => 'ŋ', - 'Ō' => 'ō', - 'Ŏ' => 'ŏ', - 'Ő' => 'ő', - 'Œ' => 'œ', - 'Ŕ' => 'ŕ', - 'Ŗ' => 'ŗ', - 'Ř' => 'ř', - 'Ś' => 'ś', - 'Ŝ' => 'ŝ', - 'Ş' => 'ş', - 'Š' => 'š', - 'Ţ' => 'ţ', - 'Ť' => 'ť', - 'Ŧ' => 'ŧ', - 'Ũ' => 'ũ', - 'Ū' => 'ū', - 'Ŭ' => 'ŭ', - 'Ů' => 'ů', - 'Ű' => 'ű', - 'Ų' => 'ų', - 'Ŵ' => 'ŵ', - 'Ŷ' => 'ŷ', - 'Ÿ' => 'ÿ', - 'Ź' => 'ź', - 'Ż' => 'ż', - 'Ž' => 'ž', - 'Ɓ' => 'ɓ', - 'Ƃ' => 'ƃ', - 'Ƅ' => 'ƅ', - 'Ɔ' => 'ɔ', - 'Ƈ' => 'ƈ', - 'Ɖ' => 'ɖ', - 'Ɗ' => 'ɗ', - 'Ƌ' => 'ƌ', - 'Ǝ' => 'ǝ', - 'Ə' => 'ə', - 'Ɛ' => 'ɛ', - 'Ƒ' => 'ƒ', - 'Ɠ' => 'ɠ', - 'Ɣ' => 'ɣ', - 'Ɩ' => 'ɩ', - 'Ɨ' => 'ɨ', - 'Ƙ' => 'ƙ', - 'Ɯ' => 'ɯ', - 'Ɲ' => 'ɲ', - 'Ɵ' => 'ɵ', - 'Ơ' => 'ơ', - 'Ƣ' => 'ƣ', - 'Ƥ' => 'ƥ', - 'Ʀ' => 'ʀ', - 'Ƨ' => 'ƨ', - 'Ʃ' => 'ʃ', - 'Ƭ' => 'ƭ', - 'Ʈ' => 'ʈ', - 'Ư' => 'ư', - 'Ʊ' => 'ʊ', - 'Ʋ' => 'ʋ', - 'Ƴ' => 'ƴ', - 'Ƶ' => 'ƶ', - 'Ʒ' => 'ʒ', - 'Ƹ' => 'ƹ', - 'Ƽ' => 'ƽ', - 'DŽ' => 'dž', - 'Dž' => 'dž', - 'LJ' => 'lj', - 'Lj' => 'lj', - 'NJ' => 'nj', - 'Nj' => 'nj', - 'Ǎ' => 'ǎ', - 'Ǐ' => 'ǐ', - 'Ǒ' => 'ǒ', - 'Ǔ' => 'ǔ', - 'Ǖ' => 'ǖ', - 'Ǘ' => 'ǘ', - 'Ǚ' => 'ǚ', - 'Ǜ' => 'ǜ', - 'Ǟ' => 'ǟ', - 'Ǡ' => 'ǡ', - 'Ǣ' => 'ǣ', - 'Ǥ' => 'ǥ', - 'Ǧ' => 'ǧ', - 'Ǩ' => 'ǩ', - 'Ǫ' => 'ǫ', - 'Ǭ' => 'ǭ', - 'Ǯ' => 'ǯ', - 'DZ' => 'dz', - 'Dz' => 'dz', - 'Ǵ' => 'ǵ', - 'Ƕ' => 'ƕ', - 'Ƿ' => 'ƿ', - 'Ǹ' => 'ǹ', - 'Ǻ' => 'ǻ', - 'Ǽ' => 'ǽ', - 'Ǿ' => 'ǿ', - 'Ȁ' => 'ȁ', - 'Ȃ' => 'ȃ', - 'Ȅ' => 'ȅ', - 'Ȇ' => 'ȇ', - 'Ȉ' => 'ȉ', - 'Ȋ' => 'ȋ', - 'Ȍ' => 'ȍ', - 'Ȏ' => 'ȏ', - 'Ȑ' => 'ȑ', - 'Ȓ' => 'ȓ', - 'Ȕ' => 'ȕ', - 'Ȗ' => 'ȗ', - 'Ș' => 'ș', - 'Ț' => 'ț', - 'Ȝ' => 'ȝ', - 'Ȟ' => 'ȟ', - 'Ƞ' => 'ƞ', - 'Ȣ' => 'ȣ', - 'Ȥ' => 'ȥ', - 'Ȧ' => 'ȧ', - 'Ȩ' => 'ȩ', - 'Ȫ' => 'ȫ', - 'Ȭ' => 'ȭ', - 'Ȯ' => 'ȯ', - 'Ȱ' => 'ȱ', - 'Ȳ' => 'ȳ', - 'Ⱥ' => 'ⱥ', - 'Ȼ' => 'ȼ', - 'Ƚ' => 'ƚ', - 'Ⱦ' => 'ⱦ', - 'Ɂ' => 'ɂ', - 'Ƀ' => 'ƀ', - 'Ʉ' => 'ʉ', - 'Ʌ' => 'ʌ', - 'Ɇ' => 'ɇ', - 'Ɉ' => 'ɉ', - 'Ɋ' => 'ɋ', - 'Ɍ' => 'ɍ', - 'Ɏ' => 'ɏ', - 'Ͱ' => 'ͱ', - 'Ͳ' => 'ͳ', - 'Ͷ' => 'ͷ', - 'Ϳ' => 'ϳ', - 'Ά' => 'ά', - 'Έ' => 'έ', - 'Ή' => 'ή', - 'Ί' => 'ί', - 'Ό' => 'ό', - 'Ύ' => 'ύ', - 'Ώ' => 'ώ', - 'Α' => 'α', - 'Β' => 'β', - 'Γ' => 'γ', - 'Δ' => 'δ', - 'Ε' => 'ε', - 'Ζ' => 'ζ', - 'Η' => 'η', - 'Θ' => 'θ', - 'Ι' => 'ι', - 'Κ' => 'κ', - 'Λ' => 'λ', - 'Μ' => 'μ', - 'Ν' => 'ν', - 'Ξ' => 'ξ', - 'Ο' => 'ο', - 'Π' => 'π', - 'Ρ' => 'ρ', - 'Σ' => 'σ', - 'Τ' => 'τ', - 'Υ' => 'υ', - 'Φ' => 'φ', - 'Χ' => 'χ', - 'Ψ' => 'ψ', - 'Ω' => 'ω', - 'Ϊ' => 'ϊ', - 'Ϋ' => 'ϋ', - 'Ϗ' => 'ϗ', - 'Ϙ' => 'ϙ', - 'Ϛ' => 'ϛ', - 'Ϝ' => 'ϝ', - 'Ϟ' => 'ϟ', - 'Ϡ' => 'ϡ', - 'Ϣ' => 'ϣ', - 'Ϥ' => 'ϥ', - 'Ϧ' => 'ϧ', - 'Ϩ' => 'ϩ', - 'Ϫ' => 'ϫ', - 'Ϭ' => 'ϭ', - 'Ϯ' => 'ϯ', - 'ϴ' => 'θ', - 'Ϸ' => 'ϸ', - 'Ϲ' => 'ϲ', - 'Ϻ' => 'ϻ', - 'Ͻ' => 'ͻ', - 'Ͼ' => 'ͼ', - 'Ͽ' => 'ͽ', - 'Ѐ' => 'ѐ', - 'Ё' => 'ё', - 'Ђ' => 'ђ', - 'Ѓ' => 'ѓ', - 'Є' => 'є', - 'Ѕ' => 'ѕ', - 'І' => 'і', - 'Ї' => 'ї', - 'Ј' => 'ј', - 'Љ' => 'љ', - 'Њ' => 'њ', - 'Ћ' => 'ћ', - 'Ќ' => 'ќ', - 'Ѝ' => 'ѝ', - 'Ў' => 'ў', - 'Џ' => 'џ', - 'А' => 'а', - 'Б' => 'б', - 'В' => 'в', - 'Г' => 'г', - 'Д' => 'д', - 'Е' => 'е', - 'Ж' => 'ж', - 'З' => 'з', - 'И' => 'и', - 'Й' => 'й', - 'К' => 'к', - 'Л' => 'л', - 'М' => 'м', - 'Н' => 'н', - 'О' => 'о', - 'П' => 'п', - 'Р' => 'р', - 'С' => 'с', - 'Т' => 'т', - 'У' => 'у', - 'Ф' => 'ф', - 'Х' => 'х', - 'Ц' => 'ц', - 'Ч' => 'ч', - 'Ш' => 'ш', - 'Щ' => 'щ', - 'Ъ' => 'ъ', - 'Ы' => 'ы', - 'Ь' => 'ь', - 'Э' => 'э', - 'Ю' => 'ю', - 'Я' => 'я', - 'Ѡ' => 'ѡ', - 'Ѣ' => 'ѣ', - 'Ѥ' => 'ѥ', - 'Ѧ' => 'ѧ', - 'Ѩ' => 'ѩ', - 'Ѫ' => 'ѫ', - 'Ѭ' => 'ѭ', - 'Ѯ' => 'ѯ', - 'Ѱ' => 'ѱ', - 'Ѳ' => 'ѳ', - 'Ѵ' => 'ѵ', - 'Ѷ' => 'ѷ', - 'Ѹ' => 'ѹ', - 'Ѻ' => 'ѻ', - 'Ѽ' => 'ѽ', - 'Ѿ' => 'ѿ', - 'Ҁ' => 'ҁ', - 'Ҋ' => 'ҋ', - 'Ҍ' => 'ҍ', - 'Ҏ' => 'ҏ', - 'Ґ' => 'ґ', - 'Ғ' => 'ғ', - 'Ҕ' => 'ҕ', - 'Җ' => 'җ', - 'Ҙ' => 'ҙ', - 'Қ' => 'қ', - 'Ҝ' => 'ҝ', - 'Ҟ' => 'ҟ', - 'Ҡ' => 'ҡ', - 'Ң' => 'ң', - 'Ҥ' => 'ҥ', - 'Ҧ' => 'ҧ', - 'Ҩ' => 'ҩ', - 'Ҫ' => 'ҫ', - 'Ҭ' => 'ҭ', - 'Ү' => 'ү', - 'Ұ' => 'ұ', - 'Ҳ' => 'ҳ', - 'Ҵ' => 'ҵ', - 'Ҷ' => 'ҷ', - 'Ҹ' => 'ҹ', - 'Һ' => 'һ', - 'Ҽ' => 'ҽ', - 'Ҿ' => 'ҿ', - 'Ӏ' => 'ӏ', - 'Ӂ' => 'ӂ', - 'Ӄ' => 'ӄ', - 'Ӆ' => 'ӆ', - 'Ӈ' => 'ӈ', - 'Ӊ' => 'ӊ', - 'Ӌ' => 'ӌ', - 'Ӎ' => 'ӎ', - 'Ӑ' => 'ӑ', - 'Ӓ' => 'ӓ', - 'Ӕ' => 'ӕ', - 'Ӗ' => 'ӗ', - 'Ә' => 'ә', - 'Ӛ' => 'ӛ', - 'Ӝ' => 'ӝ', - 'Ӟ' => 'ӟ', - 'Ӡ' => 'ӡ', - 'Ӣ' => 'ӣ', - 'Ӥ' => 'ӥ', - 'Ӧ' => 'ӧ', - 'Ө' => 'ө', - 'Ӫ' => 'ӫ', - 'Ӭ' => 'ӭ', - 'Ӯ' => 'ӯ', - 'Ӱ' => 'ӱ', - 'Ӳ' => 'ӳ', - 'Ӵ' => 'ӵ', - 'Ӷ' => 'ӷ', - 'Ӹ' => 'ӹ', - 'Ӻ' => 'ӻ', - 'Ӽ' => 'ӽ', - 'Ӿ' => 'ӿ', - 'Ԁ' => 'ԁ', - 'Ԃ' => 'ԃ', - 'Ԅ' => 'ԅ', - 'Ԇ' => 'ԇ', - 'Ԉ' => 'ԉ', - 'Ԋ' => 'ԋ', - 'Ԍ' => 'ԍ', - 'Ԏ' => 'ԏ', - 'Ԑ' => 'ԑ', - 'Ԓ' => 'ԓ', - 'Ԕ' => 'ԕ', - 'Ԗ' => 'ԗ', - 'Ԙ' => 'ԙ', - 'Ԛ' => 'ԛ', - 'Ԝ' => 'ԝ', - 'Ԟ' => 'ԟ', - 'Ԡ' => 'ԡ', - 'Ԣ' => 'ԣ', - 'Ԥ' => 'ԥ', - 'Ԧ' => 'ԧ', - 'Ԩ' => 'ԩ', - 'Ԫ' => 'ԫ', - 'Ԭ' => 'ԭ', - 'Ԯ' => 'ԯ', - 'Ա' => 'ա', - 'Բ' => 'բ', - 'Գ' => 'գ', - 'Դ' => 'դ', - 'Ե' => 'ե', - 'Զ' => 'զ', - 'Է' => 'է', - 'Ը' => 'ը', - 'Թ' => 'թ', - 'Ժ' => 'ժ', - 'Ի' => 'ի', - 'Լ' => 'լ', - 'Խ' => 'խ', - 'Ծ' => 'ծ', - 'Կ' => 'կ', - 'Հ' => 'հ', - 'Ձ' => 'ձ', - 'Ղ' => 'ղ', - 'Ճ' => 'ճ', - 'Մ' => 'մ', - 'Յ' => 'յ', - 'Ն' => 'ն', - 'Շ' => 'շ', - 'Ո' => 'ո', - 'Չ' => 'չ', - 'Պ' => 'պ', - 'Ջ' => 'ջ', - 'Ռ' => 'ռ', - 'Ս' => 'ս', - 'Վ' => 'վ', - 'Տ' => 'տ', - 'Ր' => 'ր', - 'Ց' => 'ց', - 'Ւ' => 'ւ', - 'Փ' => 'փ', - 'Ք' => 'ք', - 'Օ' => 'օ', - 'Ֆ' => 'ֆ', - 'Ⴀ' => 'ⴀ', - 'Ⴁ' => 'ⴁ', - 'Ⴂ' => 'ⴂ', - 'Ⴃ' => 'ⴃ', - 'Ⴄ' => 'ⴄ', - 'Ⴅ' => 'ⴅ', - 'Ⴆ' => 'ⴆ', - 'Ⴇ' => 'ⴇ', - 'Ⴈ' => 'ⴈ', - 'Ⴉ' => 'ⴉ', - 'Ⴊ' => 'ⴊ', - 'Ⴋ' => 'ⴋ', - 'Ⴌ' => 'ⴌ', - 'Ⴍ' => 'ⴍ', - 'Ⴎ' => 'ⴎ', - 'Ⴏ' => 'ⴏ', - 'Ⴐ' => 'ⴐ', - 'Ⴑ' => 'ⴑ', - 'Ⴒ' => 'ⴒ', - 'Ⴓ' => 'ⴓ', - 'Ⴔ' => 'ⴔ', - 'Ⴕ' => 'ⴕ', - 'Ⴖ' => 'ⴖ', - 'Ⴗ' => 'ⴗ', - 'Ⴘ' => 'ⴘ', - 'Ⴙ' => 'ⴙ', - 'Ⴚ' => 'ⴚ', - 'Ⴛ' => 'ⴛ', - 'Ⴜ' => 'ⴜ', - 'Ⴝ' => 'ⴝ', - 'Ⴞ' => 'ⴞ', - 'Ⴟ' => 'ⴟ', - 'Ⴠ' => 'ⴠ', - 'Ⴡ' => 'ⴡ', - 'Ⴢ' => 'ⴢ', - 'Ⴣ' => 'ⴣ', - 'Ⴤ' => 'ⴤ', - 'Ⴥ' => 'ⴥ', - 'Ⴧ' => 'ⴧ', - 'Ⴭ' => 'ⴭ', - 'Ꭰ' => 'ꭰ', - 'Ꭱ' => 'ꭱ', - 'Ꭲ' => 'ꭲ', - 'Ꭳ' => 'ꭳ', - 'Ꭴ' => 'ꭴ', - 'Ꭵ' => 'ꭵ', - 'Ꭶ' => 'ꭶ', - 'Ꭷ' => 'ꭷ', - 'Ꭸ' => 'ꭸ', - 'Ꭹ' => 'ꭹ', - 'Ꭺ' => 'ꭺ', - 'Ꭻ' => 'ꭻ', - 'Ꭼ' => 'ꭼ', - 'Ꭽ' => 'ꭽ', - 'Ꭾ' => 'ꭾ', - 'Ꭿ' => 'ꭿ', - 'Ꮀ' => 'ꮀ', - 'Ꮁ' => 'ꮁ', - 'Ꮂ' => 'ꮂ', - 'Ꮃ' => 'ꮃ', - 'Ꮄ' => 'ꮄ', - 'Ꮅ' => 'ꮅ', - 'Ꮆ' => 'ꮆ', - 'Ꮇ' => 'ꮇ', - 'Ꮈ' => 'ꮈ', - 'Ꮉ' => 'ꮉ', - 'Ꮊ' => 'ꮊ', - 'Ꮋ' => 'ꮋ', - 'Ꮌ' => 'ꮌ', - 'Ꮍ' => 'ꮍ', - 'Ꮎ' => 'ꮎ', - 'Ꮏ' => 'ꮏ', - 'Ꮐ' => 'ꮐ', - 'Ꮑ' => 'ꮑ', - 'Ꮒ' => 'ꮒ', - 'Ꮓ' => 'ꮓ', - 'Ꮔ' => 'ꮔ', - 'Ꮕ' => 'ꮕ', - 'Ꮖ' => 'ꮖ', - 'Ꮗ' => 'ꮗ', - 'Ꮘ' => 'ꮘ', - 'Ꮙ' => 'ꮙ', - 'Ꮚ' => 'ꮚ', - 'Ꮛ' => 'ꮛ', - 'Ꮜ' => 'ꮜ', - 'Ꮝ' => 'ꮝ', - 'Ꮞ' => 'ꮞ', - 'Ꮟ' => 'ꮟ', - 'Ꮠ' => 'ꮠ', - 'Ꮡ' => 'ꮡ', - 'Ꮢ' => 'ꮢ', - 'Ꮣ' => 'ꮣ', - 'Ꮤ' => 'ꮤ', - 'Ꮥ' => 'ꮥ', - 'Ꮦ' => 'ꮦ', - 'Ꮧ' => 'ꮧ', - 'Ꮨ' => 'ꮨ', - 'Ꮩ' => 'ꮩ', - 'Ꮪ' => 'ꮪ', - 'Ꮫ' => 'ꮫ', - 'Ꮬ' => 'ꮬ', - 'Ꮭ' => 'ꮭ', - 'Ꮮ' => 'ꮮ', - 'Ꮯ' => 'ꮯ', - 'Ꮰ' => 'ꮰ', - 'Ꮱ' => 'ꮱ', - 'Ꮲ' => 'ꮲ', - 'Ꮳ' => 'ꮳ', - 'Ꮴ' => 'ꮴ', - 'Ꮵ' => 'ꮵ', - 'Ꮶ' => 'ꮶ', - 'Ꮷ' => 'ꮷ', - 'Ꮸ' => 'ꮸ', - 'Ꮹ' => 'ꮹ', - 'Ꮺ' => 'ꮺ', - 'Ꮻ' => 'ꮻ', - 'Ꮼ' => 'ꮼ', - 'Ꮽ' => 'ꮽ', - 'Ꮾ' => 'ꮾ', - 'Ꮿ' => 'ꮿ', - 'Ᏸ' => 'ᏸ', - 'Ᏹ' => 'ᏹ', - 'Ᏺ' => 'ᏺ', - 'Ᏻ' => 'ᏻ', - 'Ᏼ' => 'ᏼ', - 'Ᏽ' => 'ᏽ', - 'Ა' => 'ა', - 'Ბ' => 'ბ', - 'Გ' => 'გ', - 'Დ' => 'დ', - 'Ე' => 'ე', - 'Ვ' => 'ვ', - 'Ზ' => 'ზ', - 'Თ' => 'თ', - 'Ი' => 'ი', - 'Კ' => 'კ', - 'Ლ' => 'ლ', - 'Მ' => 'მ', - 'Ნ' => 'ნ', - 'Ო' => 'ო', - 'Პ' => 'პ', - 'Ჟ' => 'ჟ', - 'Რ' => 'რ', - 'Ს' => 'ს', - 'Ტ' => 'ტ', - 'Უ' => 'უ', - 'Ფ' => 'ფ', - 'Ქ' => 'ქ', - 'Ღ' => 'ღ', - 'Ყ' => 'ყ', - 'Შ' => 'შ', - 'Ჩ' => 'ჩ', - 'Ც' => 'ც', - 'Ძ' => 'ძ', - 'Წ' => 'წ', - 'Ჭ' => 'ჭ', - 'Ხ' => 'ხ', - 'Ჯ' => 'ჯ', - 'Ჰ' => 'ჰ', - 'Ჱ' => 'ჱ', - 'Ჲ' => 'ჲ', - 'Ჳ' => 'ჳ', - 'Ჴ' => 'ჴ', - 'Ჵ' => 'ჵ', - 'Ჶ' => 'ჶ', - 'Ჷ' => 'ჷ', - 'Ჸ' => 'ჸ', - 'Ჹ' => 'ჹ', - 'Ჺ' => 'ჺ', - 'Ჽ' => 'ჽ', - 'Ჾ' => 'ჾ', - 'Ჿ' => 'ჿ', - 'Ḁ' => 'ḁ', - 'Ḃ' => 'ḃ', - 'Ḅ' => 'ḅ', - 'Ḇ' => 'ḇ', - 'Ḉ' => 'ḉ', - 'Ḋ' => 'ḋ', - 'Ḍ' => 'ḍ', - 'Ḏ' => 'ḏ', - 'Ḑ' => 'ḑ', - 'Ḓ' => 'ḓ', - 'Ḕ' => 'ḕ', - 'Ḗ' => 'ḗ', - 'Ḙ' => 'ḙ', - 'Ḛ' => 'ḛ', - 'Ḝ' => 'ḝ', - 'Ḟ' => 'ḟ', - 'Ḡ' => 'ḡ', - 'Ḣ' => 'ḣ', - 'Ḥ' => 'ḥ', - 'Ḧ' => 'ḧ', - 'Ḩ' => 'ḩ', - 'Ḫ' => 'ḫ', - 'Ḭ' => 'ḭ', - 'Ḯ' => 'ḯ', - 'Ḱ' => 'ḱ', - 'Ḳ' => 'ḳ', - 'Ḵ' => 'ḵ', - 'Ḷ' => 'ḷ', - 'Ḹ' => 'ḹ', - 'Ḻ' => 'ḻ', - 'Ḽ' => 'ḽ', - 'Ḿ' => 'ḿ', - 'Ṁ' => 'ṁ', - 'Ṃ' => 'ṃ', - 'Ṅ' => 'ṅ', - 'Ṇ' => 'ṇ', - 'Ṉ' => 'ṉ', - 'Ṋ' => 'ṋ', - 'Ṍ' => 'ṍ', - 'Ṏ' => 'ṏ', - 'Ṑ' => 'ṑ', - 'Ṓ' => 'ṓ', - 'Ṕ' => 'ṕ', - 'Ṗ' => 'ṗ', - 'Ṙ' => 'ṙ', - 'Ṛ' => 'ṛ', - 'Ṝ' => 'ṝ', - 'Ṟ' => 'ṟ', - 'Ṡ' => 'ṡ', - 'Ṣ' => 'ṣ', - 'Ṥ' => 'ṥ', - 'Ṧ' => 'ṧ', - 'Ṩ' => 'ṩ', - 'Ṫ' => 'ṫ', - 'Ṭ' => 'ṭ', - 'Ṯ' => 'ṯ', - 'Ṱ' => 'ṱ', - 'Ṳ' => 'ṳ', - 'Ṵ' => 'ṵ', - 'Ṷ' => 'ṷ', - 'Ṹ' => 'ṹ', - 'Ṻ' => 'ṻ', - 'Ṽ' => 'ṽ', - 'Ṿ' => 'ṿ', - 'Ẁ' => 'ẁ', - 'Ẃ' => 'ẃ', - 'Ẅ' => 'ẅ', - 'Ẇ' => 'ẇ', - 'Ẉ' => 'ẉ', - 'Ẋ' => 'ẋ', - 'Ẍ' => 'ẍ', - 'Ẏ' => 'ẏ', - 'Ẑ' => 'ẑ', - 'Ẓ' => 'ẓ', - 'Ẕ' => 'ẕ', - 'ẞ' => 'ß', - 'Ạ' => 'ạ', - 'Ả' => 'ả', - 'Ấ' => 'ấ', - 'Ầ' => 'ầ', - 'Ẩ' => 'ẩ', - 'Ẫ' => 'ẫ', - 'Ậ' => 'ậ', - 'Ắ' => 'ắ', - 'Ằ' => 'ằ', - 'Ẳ' => 'ẳ', - 'Ẵ' => 'ẵ', - 'Ặ' => 'ặ', - 'Ẹ' => 'ẹ', - 'Ẻ' => 'ẻ', - 'Ẽ' => 'ẽ', - 'Ế' => 'ế', - 'Ề' => 'ề', - 'Ể' => 'ể', - 'Ễ' => 'ễ', - 'Ệ' => 'ệ', - 'Ỉ' => 'ỉ', - 'Ị' => 'ị', - 'Ọ' => 'ọ', - 'Ỏ' => 'ỏ', - 'Ố' => 'ố', - 'Ồ' => 'ồ', - 'Ổ' => 'ổ', - 'Ỗ' => 'ỗ', - 'Ộ' => 'ộ', - 'Ớ' => 'ớ', - 'Ờ' => 'ờ', - 'Ở' => 'ở', - 'Ỡ' => 'ỡ', - 'Ợ' => 'ợ', - 'Ụ' => 'ụ', - 'Ủ' => 'ủ', - 'Ứ' => 'ứ', - 'Ừ' => 'ừ', - 'Ử' => 'ử', - 'Ữ' => 'ữ', - 'Ự' => 'ự', - 'Ỳ' => 'ỳ', - 'Ỵ' => 'ỵ', - 'Ỷ' => 'ỷ', - 'Ỹ' => 'ỹ', - 'Ỻ' => 'ỻ', - 'Ỽ' => 'ỽ', - 'Ỿ' => 'ỿ', - 'Ἀ' => 'ἀ', - 'Ἁ' => 'ἁ', - 'Ἂ' => 'ἂ', - 'Ἃ' => 'ἃ', - 'Ἄ' => 'ἄ', - 'Ἅ' => 'ἅ', - 'Ἆ' => 'ἆ', - 'Ἇ' => 'ἇ', - 'Ἐ' => 'ἐ', - 'Ἑ' => 'ἑ', - 'Ἒ' => 'ἒ', - 'Ἓ' => 'ἓ', - 'Ἔ' => 'ἔ', - 'Ἕ' => 'ἕ', - 'Ἠ' => 'ἠ', - 'Ἡ' => 'ἡ', - 'Ἢ' => 'ἢ', - 'Ἣ' => 'ἣ', - 'Ἤ' => 'ἤ', - 'Ἥ' => 'ἥ', - 'Ἦ' => 'ἦ', - 'Ἧ' => 'ἧ', - 'Ἰ' => 'ἰ', - 'Ἱ' => 'ἱ', - 'Ἲ' => 'ἲ', - 'Ἳ' => 'ἳ', - 'Ἴ' => 'ἴ', - 'Ἵ' => 'ἵ', - 'Ἶ' => 'ἶ', - 'Ἷ' => 'ἷ', - 'Ὀ' => 'ὀ', - 'Ὁ' => 'ὁ', - 'Ὂ' => 'ὂ', - 'Ὃ' => 'ὃ', - 'Ὄ' => 'ὄ', - 'Ὅ' => 'ὅ', - 'Ὑ' => 'ὑ', - 'Ὓ' => 'ὓ', - 'Ὕ' => 'ὕ', - 'Ὗ' => 'ὗ', - 'Ὠ' => 'ὠ', - 'Ὡ' => 'ὡ', - 'Ὢ' => 'ὢ', - 'Ὣ' => 'ὣ', - 'Ὤ' => 'ὤ', - 'Ὥ' => 'ὥ', - 'Ὦ' => 'ὦ', - 'Ὧ' => 'ὧ', - 'ᾈ' => 'ᾀ', - 'ᾉ' => 'ᾁ', - 'ᾊ' => 'ᾂ', - 'ᾋ' => 'ᾃ', - 'ᾌ' => 'ᾄ', - 'ᾍ' => 'ᾅ', - 'ᾎ' => 'ᾆ', - 'ᾏ' => 'ᾇ', - 'ᾘ' => 'ᾐ', - 'ᾙ' => 'ᾑ', - 'ᾚ' => 'ᾒ', - 'ᾛ' => 'ᾓ', - 'ᾜ' => 'ᾔ', - 'ᾝ' => 'ᾕ', - 'ᾞ' => 'ᾖ', - 'ᾟ' => 'ᾗ', - 'ᾨ' => 'ᾠ', - 'ᾩ' => 'ᾡ', - 'ᾪ' => 'ᾢ', - 'ᾫ' => 'ᾣ', - 'ᾬ' => 'ᾤ', - 'ᾭ' => 'ᾥ', - 'ᾮ' => 'ᾦ', - 'ᾯ' => 'ᾧ', - 'Ᾰ' => 'ᾰ', - 'Ᾱ' => 'ᾱ', - 'Ὰ' => 'ὰ', - 'Ά' => 'ά', - 'ᾼ' => 'ᾳ', - 'Ὲ' => 'ὲ', - 'Έ' => 'έ', - 'Ὴ' => 'ὴ', - 'Ή' => 'ή', - 'ῌ' => 'ῃ', - 'Ῐ' => 'ῐ', - 'Ῑ' => 'ῑ', - 'Ὶ' => 'ὶ', - 'Ί' => 'ί', - 'Ῠ' => 'ῠ', - 'Ῡ' => 'ῡ', - 'Ὺ' => 'ὺ', - 'Ύ' => 'ύ', - 'Ῥ' => 'ῥ', - 'Ὸ' => 'ὸ', - 'Ό' => 'ό', - 'Ὼ' => 'ὼ', - 'Ώ' => 'ώ', - 'ῼ' => 'ῳ', - 'Ω' => 'ω', - 'K' => 'k', - 'Å' => 'å', - 'Ⅎ' => 'ⅎ', - 'Ⅰ' => 'ⅰ', - 'Ⅱ' => 'ⅱ', - 'Ⅲ' => 'ⅲ', - 'Ⅳ' => 'ⅳ', - 'Ⅴ' => 'ⅴ', - 'Ⅵ' => 'ⅵ', - 'Ⅶ' => 'ⅶ', - 'Ⅷ' => 'ⅷ', - 'Ⅸ' => 'ⅸ', - 'Ⅹ' => 'ⅹ', - 'Ⅺ' => 'ⅺ', - 'Ⅻ' => 'ⅻ', - 'Ⅼ' => 'ⅼ', - 'Ⅽ' => 'ⅽ', - 'Ⅾ' => 'ⅾ', - 'Ⅿ' => 'ⅿ', - 'Ↄ' => 'ↄ', - 'Ⓐ' => 'ⓐ', - 'Ⓑ' => 'ⓑ', - 'Ⓒ' => 'ⓒ', - 'Ⓓ' => 'ⓓ', - 'Ⓔ' => 'ⓔ', - 'Ⓕ' => 'ⓕ', - 'Ⓖ' => 'ⓖ', - 'Ⓗ' => 'ⓗ', - 'Ⓘ' => 'ⓘ', - 'Ⓙ' => 'ⓙ', - 'Ⓚ' => 'ⓚ', - 'Ⓛ' => 'ⓛ', - 'Ⓜ' => 'ⓜ', - 'Ⓝ' => 'ⓝ', - 'Ⓞ' => 'ⓞ', - 'Ⓟ' => 'ⓟ', - 'Ⓠ' => 'ⓠ', - 'Ⓡ' => 'ⓡ', - 'Ⓢ' => 'ⓢ', - 'Ⓣ' => 'ⓣ', - 'Ⓤ' => 'ⓤ', - 'Ⓥ' => 'ⓥ', - 'Ⓦ' => 'ⓦ', - 'Ⓧ' => 'ⓧ', - 'Ⓨ' => 'ⓨ', - 'Ⓩ' => 'ⓩ', - 'Ⰰ' => 'ⰰ', - 'Ⰱ' => 'ⰱ', - 'Ⰲ' => 'ⰲ', - 'Ⰳ' => 'ⰳ', - 'Ⰴ' => 'ⰴ', - 'Ⰵ' => 'ⰵ', - 'Ⰶ' => 'ⰶ', - 'Ⰷ' => 'ⰷ', - 'Ⰸ' => 'ⰸ', - 'Ⰹ' => 'ⰹ', - 'Ⰺ' => 'ⰺ', - 'Ⰻ' => 'ⰻ', - 'Ⰼ' => 'ⰼ', - 'Ⰽ' => 'ⰽ', - 'Ⰾ' => 'ⰾ', - 'Ⰿ' => 'ⰿ', - 'Ⱀ' => 'ⱀ', - 'Ⱁ' => 'ⱁ', - 'Ⱂ' => 'ⱂ', - 'Ⱃ' => 'ⱃ', - 'Ⱄ' => 'ⱄ', - 'Ⱅ' => 'ⱅ', - 'Ⱆ' => 'ⱆ', - 'Ⱇ' => 'ⱇ', - 'Ⱈ' => 'ⱈ', - 'Ⱉ' => 'ⱉ', - 'Ⱊ' => 'ⱊ', - 'Ⱋ' => 'ⱋ', - 'Ⱌ' => 'ⱌ', - 'Ⱍ' => 'ⱍ', - 'Ⱎ' => 'ⱎ', - 'Ⱏ' => 'ⱏ', - 'Ⱐ' => 'ⱐ', - 'Ⱑ' => 'ⱑ', - 'Ⱒ' => 'ⱒ', - 'Ⱓ' => 'ⱓ', - 'Ⱔ' => 'ⱔ', - 'Ⱕ' => 'ⱕ', - 'Ⱖ' => 'ⱖ', - 'Ⱗ' => 'ⱗ', - 'Ⱘ' => 'ⱘ', - 'Ⱙ' => 'ⱙ', - 'Ⱚ' => 'ⱚ', - 'Ⱛ' => 'ⱛ', - 'Ⱜ' => 'ⱜ', - 'Ⱝ' => 'ⱝ', - 'Ⱞ' => 'ⱞ', - 'Ⱡ' => 'ⱡ', - 'Ɫ' => 'ɫ', - 'Ᵽ' => 'ᵽ', - 'Ɽ' => 'ɽ', - 'Ⱨ' => 'ⱨ', - 'Ⱪ' => 'ⱪ', - 'Ⱬ' => 'ⱬ', - 'Ɑ' => 'ɑ', - 'Ɱ' => 'ɱ', - 'Ɐ' => 'ɐ', - 'Ɒ' => 'ɒ', - 'Ⱳ' => 'ⱳ', - 'Ⱶ' => 'ⱶ', - 'Ȿ' => 'ȿ', - 'Ɀ' => 'ɀ', - 'Ⲁ' => 'ⲁ', - 'Ⲃ' => 'ⲃ', - 'Ⲅ' => 'ⲅ', - 'Ⲇ' => 'ⲇ', - 'Ⲉ' => 'ⲉ', - 'Ⲋ' => 'ⲋ', - 'Ⲍ' => 'ⲍ', - 'Ⲏ' => 'ⲏ', - 'Ⲑ' => 'ⲑ', - 'Ⲓ' => 'ⲓ', - 'Ⲕ' => 'ⲕ', - 'Ⲗ' => 'ⲗ', - 'Ⲙ' => 'ⲙ', - 'Ⲛ' => 'ⲛ', - 'Ⲝ' => 'ⲝ', - 'Ⲟ' => 'ⲟ', - 'Ⲡ' => 'ⲡ', - 'Ⲣ' => 'ⲣ', - 'Ⲥ' => 'ⲥ', - 'Ⲧ' => 'ⲧ', - 'Ⲩ' => 'ⲩ', - 'Ⲫ' => 'ⲫ', - 'Ⲭ' => 'ⲭ', - 'Ⲯ' => 'ⲯ', - 'Ⲱ' => 'ⲱ', - 'Ⲳ' => 'ⲳ', - 'Ⲵ' => 'ⲵ', - 'Ⲷ' => 'ⲷ', - 'Ⲹ' => 'ⲹ', - 'Ⲻ' => 'ⲻ', - 'Ⲽ' => 'ⲽ', - 'Ⲿ' => 'ⲿ', - 'Ⳁ' => 'ⳁ', - 'Ⳃ' => 'ⳃ', - 'Ⳅ' => 'ⳅ', - 'Ⳇ' => 'ⳇ', - 'Ⳉ' => 'ⳉ', - 'Ⳋ' => 'ⳋ', - 'Ⳍ' => 'ⳍ', - 'Ⳏ' => 'ⳏ', - 'Ⳑ' => 'ⳑ', - 'Ⳓ' => 'ⳓ', - 'Ⳕ' => 'ⳕ', - 'Ⳗ' => 'ⳗ', - 'Ⳙ' => 'ⳙ', - 'Ⳛ' => 'ⳛ', - 'Ⳝ' => 'ⳝ', - 'Ⳟ' => 'ⳟ', - 'Ⳡ' => 'ⳡ', - 'Ⳣ' => 'ⳣ', - 'Ⳬ' => 'ⳬ', - 'Ⳮ' => 'ⳮ', - 'Ⳳ' => 'ⳳ', - 'Ꙁ' => 'ꙁ', - 'Ꙃ' => 'ꙃ', - 'Ꙅ' => 'ꙅ', - 'Ꙇ' => 'ꙇ', - 'Ꙉ' => 'ꙉ', - 'Ꙋ' => 'ꙋ', - 'Ꙍ' => 'ꙍ', - 'Ꙏ' => 'ꙏ', - 'Ꙑ' => 'ꙑ', - 'Ꙓ' => 'ꙓ', - 'Ꙕ' => 'ꙕ', - 'Ꙗ' => 'ꙗ', - 'Ꙙ' => 'ꙙ', - 'Ꙛ' => 'ꙛ', - 'Ꙝ' => 'ꙝ', - 'Ꙟ' => 'ꙟ', - 'Ꙡ' => 'ꙡ', - 'Ꙣ' => 'ꙣ', - 'Ꙥ' => 'ꙥ', - 'Ꙧ' => 'ꙧ', - 'Ꙩ' => 'ꙩ', - 'Ꙫ' => 'ꙫ', - 'Ꙭ' => 'ꙭ', - 'Ꚁ' => 'ꚁ', - 'Ꚃ' => 'ꚃ', - 'Ꚅ' => 'ꚅ', - 'Ꚇ' => 'ꚇ', - 'Ꚉ' => 'ꚉ', - 'Ꚋ' => 'ꚋ', - 'Ꚍ' => 'ꚍ', - 'Ꚏ' => 'ꚏ', - 'Ꚑ' => 'ꚑ', - 'Ꚓ' => 'ꚓ', - 'Ꚕ' => 'ꚕ', - 'Ꚗ' => 'ꚗ', - 'Ꚙ' => 'ꚙ', - 'Ꚛ' => 'ꚛ', - 'Ꜣ' => 'ꜣ', - 'Ꜥ' => 'ꜥ', - 'Ꜧ' => 'ꜧ', - 'Ꜩ' => 'ꜩ', - 'Ꜫ' => 'ꜫ', - 'Ꜭ' => 'ꜭ', - 'Ꜯ' => 'ꜯ', - 'Ꜳ' => 'ꜳ', - 'Ꜵ' => 'ꜵ', - 'Ꜷ' => 'ꜷ', - 'Ꜹ' => 'ꜹ', - 'Ꜻ' => 'ꜻ', - 'Ꜽ' => 'ꜽ', - 'Ꜿ' => 'ꜿ', - 'Ꝁ' => 'ꝁ', - 'Ꝃ' => 'ꝃ', - 'Ꝅ' => 'ꝅ', - 'Ꝇ' => 'ꝇ', - 'Ꝉ' => 'ꝉ', - 'Ꝋ' => 'ꝋ', - 'Ꝍ' => 'ꝍ', - 'Ꝏ' => 'ꝏ', - 'Ꝑ' => 'ꝑ', - 'Ꝓ' => 'ꝓ', - 'Ꝕ' => 'ꝕ', - 'Ꝗ' => 'ꝗ', - 'Ꝙ' => 'ꝙ', - 'Ꝛ' => 'ꝛ', - 'Ꝝ' => 'ꝝ', - 'Ꝟ' => 'ꝟ', - 'Ꝡ' => 'ꝡ', - 'Ꝣ' => 'ꝣ', - 'Ꝥ' => 'ꝥ', - 'Ꝧ' => 'ꝧ', - 'Ꝩ' => 'ꝩ', - 'Ꝫ' => 'ꝫ', - 'Ꝭ' => 'ꝭ', - 'Ꝯ' => 'ꝯ', - 'Ꝺ' => 'ꝺ', - 'Ꝼ' => 'ꝼ', - 'Ᵹ' => 'ᵹ', - 'Ꝿ' => 'ꝿ', - 'Ꞁ' => 'ꞁ', - 'Ꞃ' => 'ꞃ', - 'Ꞅ' => 'ꞅ', - 'Ꞇ' => 'ꞇ', - 'Ꞌ' => 'ꞌ', - 'Ɥ' => 'ɥ', - 'Ꞑ' => 'ꞑ', - 'Ꞓ' => 'ꞓ', - 'Ꞗ' => 'ꞗ', - 'Ꞙ' => 'ꞙ', - 'Ꞛ' => 'ꞛ', - 'Ꞝ' => 'ꞝ', - 'Ꞟ' => 'ꞟ', - 'Ꞡ' => 'ꞡ', - 'Ꞣ' => 'ꞣ', - 'Ꞥ' => 'ꞥ', - 'Ꞧ' => 'ꞧ', - 'Ꞩ' => 'ꞩ', - 'Ɦ' => 'ɦ', - 'Ɜ' => 'ɜ', - 'Ɡ' => 'ɡ', - 'Ɬ' => 'ɬ', - 'Ɪ' => 'ɪ', - 'Ʞ' => 'ʞ', - 'Ʇ' => 'ʇ', - 'Ʝ' => 'ʝ', - 'Ꭓ' => 'ꭓ', - 'Ꞵ' => 'ꞵ', - 'Ꞷ' => 'ꞷ', - 'Ꞹ' => 'ꞹ', - 'Ꞻ' => 'ꞻ', - 'Ꞽ' => 'ꞽ', - 'Ꞿ' => 'ꞿ', - 'Ꟃ' => 'ꟃ', - 'Ꞔ' => 'ꞔ', - 'Ʂ' => 'ʂ', - 'Ᶎ' => 'ᶎ', - 'Ꟈ' => 'ꟈ', - 'Ꟊ' => 'ꟊ', - 'Ꟶ' => 'ꟶ', - 'A' => 'a', - 'B' => 'b', - 'C' => 'c', - 'D' => 'd', - 'E' => 'e', - 'F' => 'f', - 'G' => 'g', - 'H' => 'h', - 'I' => 'i', - 'J' => 'j', - 'K' => 'k', - 'L' => 'l', - 'M' => 'm', - 'N' => 'n', - 'O' => 'o', - 'P' => 'p', - 'Q' => 'q', - 'R' => 'r', - 'S' => 's', - 'T' => 't', - 'U' => 'u', - 'V' => 'v', - 'W' => 'w', - 'X' => 'x', - 'Y' => 'y', - 'Z' => 'z', - '𐐀' => '𐐨', - '𐐁' => '𐐩', - '𐐂' => '𐐪', - '𐐃' => '𐐫', - '𐐄' => '𐐬', - '𐐅' => '𐐭', - '𐐆' => '𐐮', - '𐐇' => '𐐯', - '𐐈' => '𐐰', - '𐐉' => '𐐱', - '𐐊' => '𐐲', - '𐐋' => '𐐳', - '𐐌' => '𐐴', - '𐐍' => '𐐵', - '𐐎' => '𐐶', - '𐐏' => '𐐷', - '𐐐' => '𐐸', - '𐐑' => '𐐹', - '𐐒' => '𐐺', - '𐐓' => '𐐻', - '𐐔' => '𐐼', - '𐐕' => '𐐽', - '𐐖' => '𐐾', - '𐐗' => '𐐿', - '𐐘' => '𐑀', - '𐐙' => '𐑁', - '𐐚' => '𐑂', - '𐐛' => '𐑃', - '𐐜' => '𐑄', - '𐐝' => '𐑅', - '𐐞' => '𐑆', - '𐐟' => '𐑇', - '𐐠' => '𐑈', - '𐐡' => '𐑉', - '𐐢' => '𐑊', - '𐐣' => '𐑋', - '𐐤' => '𐑌', - '𐐥' => '𐑍', - '𐐦' => '𐑎', - '𐐧' => '𐑏', - '𐒰' => '𐓘', - '𐒱' => '𐓙', - '𐒲' => '𐓚', - '𐒳' => '𐓛', - '𐒴' => '𐓜', - '𐒵' => '𐓝', - '𐒶' => '𐓞', - '𐒷' => '𐓟', - '𐒸' => '𐓠', - '𐒹' => '𐓡', - '𐒺' => '𐓢', - '𐒻' => '𐓣', - '𐒼' => '𐓤', - '𐒽' => '𐓥', - '𐒾' => '𐓦', - '𐒿' => '𐓧', - '𐓀' => '𐓨', - '𐓁' => '𐓩', - '𐓂' => '𐓪', - '𐓃' => '𐓫', - '𐓄' => '𐓬', - '𐓅' => '𐓭', - '𐓆' => '𐓮', - '𐓇' => '𐓯', - '𐓈' => '𐓰', - '𐓉' => '𐓱', - '𐓊' => '𐓲', - '𐓋' => '𐓳', - '𐓌' => '𐓴', - '𐓍' => '𐓵', - '𐓎' => '𐓶', - '𐓏' => '𐓷', - '𐓐' => '𐓸', - '𐓑' => '𐓹', - '𐓒' => '𐓺', - '𐓓' => '𐓻', - '𐲀' => '𐳀', - '𐲁' => '𐳁', - '𐲂' => '𐳂', - '𐲃' => '𐳃', - '𐲄' => '𐳄', - '𐲅' => '𐳅', - '𐲆' => '𐳆', - '𐲇' => '𐳇', - '𐲈' => '𐳈', - '𐲉' => '𐳉', - '𐲊' => '𐳊', - '𐲋' => '𐳋', - '𐲌' => '𐳌', - '𐲍' => '𐳍', - '𐲎' => '𐳎', - '𐲏' => '𐳏', - '𐲐' => '𐳐', - '𐲑' => '𐳑', - '𐲒' => '𐳒', - '𐲓' => '𐳓', - '𐲔' => '𐳔', - '𐲕' => '𐳕', - '𐲖' => '𐳖', - '𐲗' => '𐳗', - '𐲘' => '𐳘', - '𐲙' => '𐳙', - '𐲚' => '𐳚', - '𐲛' => '𐳛', - '𐲜' => '𐳜', - '𐲝' => '𐳝', - '𐲞' => '𐳞', - '𐲟' => '𐳟', - '𐲠' => '𐳠', - '𐲡' => '𐳡', - '𐲢' => '𐳢', - '𐲣' => '𐳣', - '𐲤' => '𐳤', - '𐲥' => '𐳥', - '𐲦' => '𐳦', - '𐲧' => '𐳧', - '𐲨' => '𐳨', - '𐲩' => '𐳩', - '𐲪' => '𐳪', - '𐲫' => '𐳫', - '𐲬' => '𐳬', - '𐲭' => '𐳭', - '𐲮' => '𐳮', - '𐲯' => '𐳯', - '𐲰' => '𐳰', - '𐲱' => '𐳱', - '𐲲' => '𐳲', - '𑢠' => '𑣀', - '𑢡' => '𑣁', - '𑢢' => '𑣂', - '𑢣' => '𑣃', - '𑢤' => '𑣄', - '𑢥' => '𑣅', - '𑢦' => '𑣆', - '𑢧' => '𑣇', - '𑢨' => '𑣈', - '𑢩' => '𑣉', - '𑢪' => '𑣊', - '𑢫' => '𑣋', - '𑢬' => '𑣌', - '𑢭' => '𑣍', - '𑢮' => '𑣎', - '𑢯' => '𑣏', - '𑢰' => '𑣐', - '𑢱' => '𑣑', - '𑢲' => '𑣒', - '𑢳' => '𑣓', - '𑢴' => '𑣔', - '𑢵' => '𑣕', - '𑢶' => '𑣖', - '𑢷' => '𑣗', - '𑢸' => '𑣘', - '𑢹' => '𑣙', - '𑢺' => '𑣚', - '𑢻' => '𑣛', - '𑢼' => '𑣜', - '𑢽' => '𑣝', - '𑢾' => '𑣞', - '𑢿' => '𑣟', - '𖹀' => '𖹠', - '𖹁' => '𖹡', - '𖹂' => '𖹢', - '𖹃' => '𖹣', - '𖹄' => '𖹤', - '𖹅' => '𖹥', - '𖹆' => '𖹦', - '𖹇' => '𖹧', - '𖹈' => '𖹨', - '𖹉' => '𖹩', - '𖹊' => '𖹪', - '𖹋' => '𖹫', - '𖹌' => '𖹬', - '𖹍' => '𖹭', - '𖹎' => '𖹮', - '𖹏' => '𖹯', - '𖹐' => '𖹰', - '𖹑' => '𖹱', - '𖹒' => '𖹲', - '𖹓' => '𖹳', - '𖹔' => '𖹴', - '𖹕' => '𖹵', - '𖹖' => '𖹶', - '𖹗' => '𖹷', - '𖹘' => '𖹸', - '𖹙' => '𖹹', - '𖹚' => '𖹺', - '𖹛' => '𖹻', - '𖹜' => '𖹼', - '𖹝' => '𖹽', - '𖹞' => '𖹾', - '𖹟' => '𖹿', - '𞤀' => '𞤢', - '𞤁' => '𞤣', - '𞤂' => '𞤤', - '𞤃' => '𞤥', - '𞤄' => '𞤦', - '𞤅' => '𞤧', - '𞤆' => '𞤨', - '𞤇' => '𞤩', - '𞤈' => '𞤪', - '𞤉' => '𞤫', - '𞤊' => '𞤬', - '𞤋' => '𞤭', - '𞤌' => '𞤮', - '𞤍' => '𞤯', - '𞤎' => '𞤰', - '𞤏' => '𞤱', - '𞤐' => '𞤲', - '𞤑' => '𞤳', - '𞤒' => '𞤴', - '𞤓' => '𞤵', - '𞤔' => '𞤶', - '𞤕' => '𞤷', - '𞤖' => '𞤸', - '𞤗' => '𞤹', - '𞤘' => '𞤺', - '𞤙' => '𞤻', - '𞤚' => '𞤼', - '𞤛' => '𞤽', - '𞤜' => '𞤾', - '𞤝' => '𞤿', - '𞤞' => '𞥀', - '𞤟' => '𞥁', - '𞤠' => '𞥂', - '𞤡' => '𞥃', -); diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php deleted file mode 100644 index 56b9cb8..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +++ /dev/null @@ -1,1489 +0,0 @@ - 'A', - 'b' => 'B', - 'c' => 'C', - 'd' => 'D', - 'e' => 'E', - 'f' => 'F', - 'g' => 'G', - 'h' => 'H', - 'i' => 'I', - 'j' => 'J', - 'k' => 'K', - 'l' => 'L', - 'm' => 'M', - 'n' => 'N', - 'o' => 'O', - 'p' => 'P', - 'q' => 'Q', - 'r' => 'R', - 's' => 'S', - 't' => 'T', - 'u' => 'U', - 'v' => 'V', - 'w' => 'W', - 'x' => 'X', - 'y' => 'Y', - 'z' => 'Z', - 'µ' => 'Μ', - 'à' => 'À', - 'á' => 'Á', - 'â' => 'Â', - 'ã' => 'Ã', - 'ä' => 'Ä', - 'å' => 'Å', - 'æ' => 'Æ', - 'ç' => 'Ç', - 'è' => 'È', - 'é' => 'É', - 'ê' => 'Ê', - 'ë' => 'Ë', - 'ì' => 'Ì', - 'í' => 'Í', - 'î' => 'Î', - 'ï' => 'Ï', - 'ð' => 'Ð', - 'ñ' => 'Ñ', - 'ò' => 'Ò', - 'ó' => 'Ó', - 'ô' => 'Ô', - 'õ' => 'Õ', - 'ö' => 'Ö', - 'ø' => 'Ø', - 'ù' => 'Ù', - 'ú' => 'Ú', - 'û' => 'Û', - 'ü' => 'Ü', - 'ý' => 'Ý', - 'þ' => 'Þ', - 'ÿ' => 'Ÿ', - 'ā' => 'Ā', - 'ă' => 'Ă', - 'ą' => 'Ą', - 'ć' => 'Ć', - 'ĉ' => 'Ĉ', - 'ċ' => 'Ċ', - 'č' => 'Č', - 'ď' => 'Ď', - 'đ' => 'Đ', - 'ē' => 'Ē', - 'ĕ' => 'Ĕ', - 'ė' => 'Ė', - 'ę' => 'Ę', - 'ě' => 'Ě', - 'ĝ' => 'Ĝ', - 'ğ' => 'Ğ', - 'ġ' => 'Ġ', - 'ģ' => 'Ģ', - 'ĥ' => 'Ĥ', - 'ħ' => 'Ħ', - 'ĩ' => 'Ĩ', - 'ī' => 'Ī', - 'ĭ' => 'Ĭ', - 'į' => 'Į', - 'ı' => 'I', - 'ij' => 'IJ', - 'ĵ' => 'Ĵ', - 'ķ' => 'Ķ', - 'ĺ' => 'Ĺ', - 'ļ' => 'Ļ', - 'ľ' => 'Ľ', - 'ŀ' => 'Ŀ', - 'ł' => 'Ł', - 'ń' => 'Ń', - 'ņ' => 'Ņ', - 'ň' => 'Ň', - 'ŋ' => 'Ŋ', - 'ō' => 'Ō', - 'ŏ' => 'Ŏ', - 'ő' => 'Ő', - 'œ' => 'Œ', - 'ŕ' => 'Ŕ', - 'ŗ' => 'Ŗ', - 'ř' => 'Ř', - 'ś' => 'Ś', - 'ŝ' => 'Ŝ', - 'ş' => 'Ş', - 'š' => 'Š', - 'ţ' => 'Ţ', - 'ť' => 'Ť', - 'ŧ' => 'Ŧ', - 'ũ' => 'Ũ', - 'ū' => 'Ū', - 'ŭ' => 'Ŭ', - 'ů' => 'Ů', - 'ű' => 'Ű', - 'ų' => 'Ų', - 'ŵ' => 'Ŵ', - 'ŷ' => 'Ŷ', - 'ź' => 'Ź', - 'ż' => 'Ż', - 'ž' => 'Ž', - 'ſ' => 'S', - 'ƀ' => 'Ƀ', - 'ƃ' => 'Ƃ', - 'ƅ' => 'Ƅ', - 'ƈ' => 'Ƈ', - 'ƌ' => 'Ƌ', - 'ƒ' => 'Ƒ', - 'ƕ' => 'Ƕ', - 'ƙ' => 'Ƙ', - 'ƚ' => 'Ƚ', - 'ƞ' => 'Ƞ', - 'ơ' => 'Ơ', - 'ƣ' => 'Ƣ', - 'ƥ' => 'Ƥ', - 'ƨ' => 'Ƨ', - 'ƭ' => 'Ƭ', - 'ư' => 'Ư', - 'ƴ' => 'Ƴ', - 'ƶ' => 'Ƶ', - 'ƹ' => 'Ƹ', - 'ƽ' => 'Ƽ', - 'ƿ' => 'Ƿ', - 'Dž' => 'DŽ', - 'dž' => 'DŽ', - 'Lj' => 'LJ', - 'lj' => 'LJ', - 'Nj' => 'NJ', - 'nj' => 'NJ', - 'ǎ' => 'Ǎ', - 'ǐ' => 'Ǐ', - 'ǒ' => 'Ǒ', - 'ǔ' => 'Ǔ', - 'ǖ' => 'Ǖ', - 'ǘ' => 'Ǘ', - 'ǚ' => 'Ǚ', - 'ǜ' => 'Ǜ', - 'ǝ' => 'Ǝ', - 'ǟ' => 'Ǟ', - 'ǡ' => 'Ǡ', - 'ǣ' => 'Ǣ', - 'ǥ' => 'Ǥ', - 'ǧ' => 'Ǧ', - 'ǩ' => 'Ǩ', - 'ǫ' => 'Ǫ', - 'ǭ' => 'Ǭ', - 'ǯ' => 'Ǯ', - 'Dz' => 'DZ', - 'dz' => 'DZ', - 'ǵ' => 'Ǵ', - 'ǹ' => 'Ǹ', - 'ǻ' => 'Ǻ', - 'ǽ' => 'Ǽ', - 'ǿ' => 'Ǿ', - 'ȁ' => 'Ȁ', - 'ȃ' => 'Ȃ', - 'ȅ' => 'Ȅ', - 'ȇ' => 'Ȇ', - 'ȉ' => 'Ȉ', - 'ȋ' => 'Ȋ', - 'ȍ' => 'Ȍ', - 'ȏ' => 'Ȏ', - 'ȑ' => 'Ȑ', - 'ȓ' => 'Ȓ', - 'ȕ' => 'Ȕ', - 'ȗ' => 'Ȗ', - 'ș' => 'Ș', - 'ț' => 'Ț', - 'ȝ' => 'Ȝ', - 'ȟ' => 'Ȟ', - 'ȣ' => 'Ȣ', - 'ȥ' => 'Ȥ', - 'ȧ' => 'Ȧ', - 'ȩ' => 'Ȩ', - 'ȫ' => 'Ȫ', - 'ȭ' => 'Ȭ', - 'ȯ' => 'Ȯ', - 'ȱ' => 'Ȱ', - 'ȳ' => 'Ȳ', - 'ȼ' => 'Ȼ', - 'ȿ' => 'Ȿ', - 'ɀ' => 'Ɀ', - 'ɂ' => 'Ɂ', - 'ɇ' => 'Ɇ', - 'ɉ' => 'Ɉ', - 'ɋ' => 'Ɋ', - 'ɍ' => 'Ɍ', - 'ɏ' => 'Ɏ', - 'ɐ' => 'Ɐ', - 'ɑ' => 'Ɑ', - 'ɒ' => 'Ɒ', - 'ɓ' => 'Ɓ', - 'ɔ' => 'Ɔ', - 'ɖ' => 'Ɖ', - 'ɗ' => 'Ɗ', - 'ə' => 'Ə', - 'ɛ' => 'Ɛ', - 'ɜ' => 'Ɜ', - 'ɠ' => 'Ɠ', - 'ɡ' => 'Ɡ', - 'ɣ' => 'Ɣ', - 'ɥ' => 'Ɥ', - 'ɦ' => 'Ɦ', - 'ɨ' => 'Ɨ', - 'ɩ' => 'Ɩ', - 'ɪ' => 'Ɪ', - 'ɫ' => 'Ɫ', - 'ɬ' => 'Ɬ', - 'ɯ' => 'Ɯ', - 'ɱ' => 'Ɱ', - 'ɲ' => 'Ɲ', - 'ɵ' => 'Ɵ', - 'ɽ' => 'Ɽ', - 'ʀ' => 'Ʀ', - 'ʂ' => 'Ʂ', - 'ʃ' => 'Ʃ', - 'ʇ' => 'Ʇ', - 'ʈ' => 'Ʈ', - 'ʉ' => 'Ʉ', - 'ʊ' => 'Ʊ', - 'ʋ' => 'Ʋ', - 'ʌ' => 'Ʌ', - 'ʒ' => 'Ʒ', - 'ʝ' => 'Ʝ', - 'ʞ' => 'Ʞ', - 'ͅ' => 'Ι', - 'ͱ' => 'Ͱ', - 'ͳ' => 'Ͳ', - 'ͷ' => 'Ͷ', - 'ͻ' => 'Ͻ', - 'ͼ' => 'Ͼ', - 'ͽ' => 'Ͽ', - 'ά' => 'Ά', - 'έ' => 'Έ', - 'ή' => 'Ή', - 'ί' => 'Ί', - 'α' => 'Α', - 'β' => 'Β', - 'γ' => 'Γ', - 'δ' => 'Δ', - 'ε' => 'Ε', - 'ζ' => 'Ζ', - 'η' => 'Η', - 'θ' => 'Θ', - 'ι' => 'Ι', - 'κ' => 'Κ', - 'λ' => 'Λ', - 'μ' => 'Μ', - 'ν' => 'Ν', - 'ξ' => 'Ξ', - 'ο' => 'Ο', - 'π' => 'Π', - 'ρ' => 'Ρ', - 'ς' => 'Σ', - 'σ' => 'Σ', - 'τ' => 'Τ', - 'υ' => 'Υ', - 'φ' => 'Φ', - 'χ' => 'Χ', - 'ψ' => 'Ψ', - 'ω' => 'Ω', - 'ϊ' => 'Ϊ', - 'ϋ' => 'Ϋ', - 'ό' => 'Ό', - 'ύ' => 'Ύ', - 'ώ' => 'Ώ', - 'ϐ' => 'Β', - 'ϑ' => 'Θ', - 'ϕ' => 'Φ', - 'ϖ' => 'Π', - 'ϗ' => 'Ϗ', - 'ϙ' => 'Ϙ', - 'ϛ' => 'Ϛ', - 'ϝ' => 'Ϝ', - 'ϟ' => 'Ϟ', - 'ϡ' => 'Ϡ', - 'ϣ' => 'Ϣ', - 'ϥ' => 'Ϥ', - 'ϧ' => 'Ϧ', - 'ϩ' => 'Ϩ', - 'ϫ' => 'Ϫ', - 'ϭ' => 'Ϭ', - 'ϯ' => 'Ϯ', - 'ϰ' => 'Κ', - 'ϱ' => 'Ρ', - 'ϲ' => 'Ϲ', - 'ϳ' => 'Ϳ', - 'ϵ' => 'Ε', - 'ϸ' => 'Ϸ', - 'ϻ' => 'Ϻ', - 'а' => 'А', - 'б' => 'Б', - 'в' => 'В', - 'г' => 'Г', - 'д' => 'Д', - 'е' => 'Е', - 'ж' => 'Ж', - 'з' => 'З', - 'и' => 'И', - 'й' => 'Й', - 'к' => 'К', - 'л' => 'Л', - 'м' => 'М', - 'н' => 'Н', - 'о' => 'О', - 'п' => 'П', - 'р' => 'Р', - 'с' => 'С', - 'т' => 'Т', - 'у' => 'У', - 'ф' => 'Ф', - 'х' => 'Х', - 'ц' => 'Ц', - 'ч' => 'Ч', - 'ш' => 'Ш', - 'щ' => 'Щ', - 'ъ' => 'Ъ', - 'ы' => 'Ы', - 'ь' => 'Ь', - 'э' => 'Э', - 'ю' => 'Ю', - 'я' => 'Я', - 'ѐ' => 'Ѐ', - 'ё' => 'Ё', - 'ђ' => 'Ђ', - 'ѓ' => 'Ѓ', - 'є' => 'Є', - 'ѕ' => 'Ѕ', - 'і' => 'І', - 'ї' => 'Ї', - 'ј' => 'Ј', - 'љ' => 'Љ', - 'њ' => 'Њ', - 'ћ' => 'Ћ', - 'ќ' => 'Ќ', - 'ѝ' => 'Ѝ', - 'ў' => 'Ў', - 'џ' => 'Џ', - 'ѡ' => 'Ѡ', - 'ѣ' => 'Ѣ', - 'ѥ' => 'Ѥ', - 'ѧ' => 'Ѧ', - 'ѩ' => 'Ѩ', - 'ѫ' => 'Ѫ', - 'ѭ' => 'Ѭ', - 'ѯ' => 'Ѯ', - 'ѱ' => 'Ѱ', - 'ѳ' => 'Ѳ', - 'ѵ' => 'Ѵ', - 'ѷ' => 'Ѷ', - 'ѹ' => 'Ѹ', - 'ѻ' => 'Ѻ', - 'ѽ' => 'Ѽ', - 'ѿ' => 'Ѿ', - 'ҁ' => 'Ҁ', - 'ҋ' => 'Ҋ', - 'ҍ' => 'Ҍ', - 'ҏ' => 'Ҏ', - 'ґ' => 'Ґ', - 'ғ' => 'Ғ', - 'ҕ' => 'Ҕ', - 'җ' => 'Җ', - 'ҙ' => 'Ҙ', - 'қ' => 'Қ', - 'ҝ' => 'Ҝ', - 'ҟ' => 'Ҟ', - 'ҡ' => 'Ҡ', - 'ң' => 'Ң', - 'ҥ' => 'Ҥ', - 'ҧ' => 'Ҧ', - 'ҩ' => 'Ҩ', - 'ҫ' => 'Ҫ', - 'ҭ' => 'Ҭ', - 'ү' => 'Ү', - 'ұ' => 'Ұ', - 'ҳ' => 'Ҳ', - 'ҵ' => 'Ҵ', - 'ҷ' => 'Ҷ', - 'ҹ' => 'Ҹ', - 'һ' => 'Һ', - 'ҽ' => 'Ҽ', - 'ҿ' => 'Ҿ', - 'ӂ' => 'Ӂ', - 'ӄ' => 'Ӄ', - 'ӆ' => 'Ӆ', - 'ӈ' => 'Ӈ', - 'ӊ' => 'Ӊ', - 'ӌ' => 'Ӌ', - 'ӎ' => 'Ӎ', - 'ӏ' => 'Ӏ', - 'ӑ' => 'Ӑ', - 'ӓ' => 'Ӓ', - 'ӕ' => 'Ӕ', - 'ӗ' => 'Ӗ', - 'ә' => 'Ә', - 'ӛ' => 'Ӛ', - 'ӝ' => 'Ӝ', - 'ӟ' => 'Ӟ', - 'ӡ' => 'Ӡ', - 'ӣ' => 'Ӣ', - 'ӥ' => 'Ӥ', - 'ӧ' => 'Ӧ', - 'ө' => 'Ө', - 'ӫ' => 'Ӫ', - 'ӭ' => 'Ӭ', - 'ӯ' => 'Ӯ', - 'ӱ' => 'Ӱ', - 'ӳ' => 'Ӳ', - 'ӵ' => 'Ӵ', - 'ӷ' => 'Ӷ', - 'ӹ' => 'Ӹ', - 'ӻ' => 'Ӻ', - 'ӽ' => 'Ӽ', - 'ӿ' => 'Ӿ', - 'ԁ' => 'Ԁ', - 'ԃ' => 'Ԃ', - 'ԅ' => 'Ԅ', - 'ԇ' => 'Ԇ', - 'ԉ' => 'Ԉ', - 'ԋ' => 'Ԋ', - 'ԍ' => 'Ԍ', - 'ԏ' => 'Ԏ', - 'ԑ' => 'Ԑ', - 'ԓ' => 'Ԓ', - 'ԕ' => 'Ԕ', - 'ԗ' => 'Ԗ', - 'ԙ' => 'Ԙ', - 'ԛ' => 'Ԛ', - 'ԝ' => 'Ԝ', - 'ԟ' => 'Ԟ', - 'ԡ' => 'Ԡ', - 'ԣ' => 'Ԣ', - 'ԥ' => 'Ԥ', - 'ԧ' => 'Ԧ', - 'ԩ' => 'Ԩ', - 'ԫ' => 'Ԫ', - 'ԭ' => 'Ԭ', - 'ԯ' => 'Ԯ', - 'ա' => 'Ա', - 'բ' => 'Բ', - 'գ' => 'Գ', - 'դ' => 'Դ', - 'ե' => 'Ե', - 'զ' => 'Զ', - 'է' => 'Է', - 'ը' => 'Ը', - 'թ' => 'Թ', - 'ժ' => 'Ժ', - 'ի' => 'Ի', - 'լ' => 'Լ', - 'խ' => 'Խ', - 'ծ' => 'Ծ', - 'կ' => 'Կ', - 'հ' => 'Հ', - 'ձ' => 'Ձ', - 'ղ' => 'Ղ', - 'ճ' => 'Ճ', - 'մ' => 'Մ', - 'յ' => 'Յ', - 'ն' => 'Ն', - 'շ' => 'Շ', - 'ո' => 'Ո', - 'չ' => 'Չ', - 'պ' => 'Պ', - 'ջ' => 'Ջ', - 'ռ' => 'Ռ', - 'ս' => 'Ս', - 'վ' => 'Վ', - 'տ' => 'Տ', - 'ր' => 'Ր', - 'ց' => 'Ց', - 'ւ' => 'Ւ', - 'փ' => 'Փ', - 'ք' => 'Ք', - 'օ' => 'Օ', - 'ֆ' => 'Ֆ', - 'ა' => 'Ა', - 'ბ' => 'Ბ', - 'გ' => 'Გ', - 'დ' => 'Დ', - 'ე' => 'Ე', - 'ვ' => 'Ვ', - 'ზ' => 'Ზ', - 'თ' => 'Თ', - 'ი' => 'Ი', - 'კ' => 'Კ', - 'ლ' => 'Ლ', - 'მ' => 'Მ', - 'ნ' => 'Ნ', - 'ო' => 'Ო', - 'პ' => 'Პ', - 'ჟ' => 'Ჟ', - 'რ' => 'Რ', - 'ს' => 'Ს', - 'ტ' => 'Ტ', - 'უ' => 'Უ', - 'ფ' => 'Ფ', - 'ქ' => 'Ქ', - 'ღ' => 'Ღ', - 'ყ' => 'Ყ', - 'შ' => 'Შ', - 'ჩ' => 'Ჩ', - 'ც' => 'Ც', - 'ძ' => 'Ძ', - 'წ' => 'Წ', - 'ჭ' => 'Ჭ', - 'ხ' => 'Ხ', - 'ჯ' => 'Ჯ', - 'ჰ' => 'Ჰ', - 'ჱ' => 'Ჱ', - 'ჲ' => 'Ჲ', - 'ჳ' => 'Ჳ', - 'ჴ' => 'Ჴ', - 'ჵ' => 'Ჵ', - 'ჶ' => 'Ჶ', - 'ჷ' => 'Ჷ', - 'ჸ' => 'Ჸ', - 'ჹ' => 'Ჹ', - 'ჺ' => 'Ჺ', - 'ჽ' => 'Ჽ', - 'ჾ' => 'Ჾ', - 'ჿ' => 'Ჿ', - 'ᏸ' => 'Ᏸ', - 'ᏹ' => 'Ᏹ', - 'ᏺ' => 'Ᏺ', - 'ᏻ' => 'Ᏻ', - 'ᏼ' => 'Ᏼ', - 'ᏽ' => 'Ᏽ', - 'ᲀ' => 'В', - 'ᲁ' => 'Д', - 'ᲂ' => 'О', - 'ᲃ' => 'С', - 'ᲄ' => 'Т', - 'ᲅ' => 'Т', - 'ᲆ' => 'Ъ', - 'ᲇ' => 'Ѣ', - 'ᲈ' => 'Ꙋ', - 'ᵹ' => 'Ᵹ', - 'ᵽ' => 'Ᵽ', - 'ᶎ' => 'Ᶎ', - 'ḁ' => 'Ḁ', - 'ḃ' => 'Ḃ', - 'ḅ' => 'Ḅ', - 'ḇ' => 'Ḇ', - 'ḉ' => 'Ḉ', - 'ḋ' => 'Ḋ', - 'ḍ' => 'Ḍ', - 'ḏ' => 'Ḏ', - 'ḑ' => 'Ḑ', - 'ḓ' => 'Ḓ', - 'ḕ' => 'Ḕ', - 'ḗ' => 'Ḗ', - 'ḙ' => 'Ḙ', - 'ḛ' => 'Ḛ', - 'ḝ' => 'Ḝ', - 'ḟ' => 'Ḟ', - 'ḡ' => 'Ḡ', - 'ḣ' => 'Ḣ', - 'ḥ' => 'Ḥ', - 'ḧ' => 'Ḧ', - 'ḩ' => 'Ḩ', - 'ḫ' => 'Ḫ', - 'ḭ' => 'Ḭ', - 'ḯ' => 'Ḯ', - 'ḱ' => 'Ḱ', - 'ḳ' => 'Ḳ', - 'ḵ' => 'Ḵ', - 'ḷ' => 'Ḷ', - 'ḹ' => 'Ḹ', - 'ḻ' => 'Ḻ', - 'ḽ' => 'Ḽ', - 'ḿ' => 'Ḿ', - 'ṁ' => 'Ṁ', - 'ṃ' => 'Ṃ', - 'ṅ' => 'Ṅ', - 'ṇ' => 'Ṇ', - 'ṉ' => 'Ṉ', - 'ṋ' => 'Ṋ', - 'ṍ' => 'Ṍ', - 'ṏ' => 'Ṏ', - 'ṑ' => 'Ṑ', - 'ṓ' => 'Ṓ', - 'ṕ' => 'Ṕ', - 'ṗ' => 'Ṗ', - 'ṙ' => 'Ṙ', - 'ṛ' => 'Ṛ', - 'ṝ' => 'Ṝ', - 'ṟ' => 'Ṟ', - 'ṡ' => 'Ṡ', - 'ṣ' => 'Ṣ', - 'ṥ' => 'Ṥ', - 'ṧ' => 'Ṧ', - 'ṩ' => 'Ṩ', - 'ṫ' => 'Ṫ', - 'ṭ' => 'Ṭ', - 'ṯ' => 'Ṯ', - 'ṱ' => 'Ṱ', - 'ṳ' => 'Ṳ', - 'ṵ' => 'Ṵ', - 'ṷ' => 'Ṷ', - 'ṹ' => 'Ṹ', - 'ṻ' => 'Ṻ', - 'ṽ' => 'Ṽ', - 'ṿ' => 'Ṿ', - 'ẁ' => 'Ẁ', - 'ẃ' => 'Ẃ', - 'ẅ' => 'Ẅ', - 'ẇ' => 'Ẇ', - 'ẉ' => 'Ẉ', - 'ẋ' => 'Ẋ', - 'ẍ' => 'Ẍ', - 'ẏ' => 'Ẏ', - 'ẑ' => 'Ẑ', - 'ẓ' => 'Ẓ', - 'ẕ' => 'Ẕ', - 'ẛ' => 'Ṡ', - 'ạ' => 'Ạ', - 'ả' => 'Ả', - 'ấ' => 'Ấ', - 'ầ' => 'Ầ', - 'ẩ' => 'Ẩ', - 'ẫ' => 'Ẫ', - 'ậ' => 'Ậ', - 'ắ' => 'Ắ', - 'ằ' => 'Ằ', - 'ẳ' => 'Ẳ', - 'ẵ' => 'Ẵ', - 'ặ' => 'Ặ', - 'ẹ' => 'Ẹ', - 'ẻ' => 'Ẻ', - 'ẽ' => 'Ẽ', - 'ế' => 'Ế', - 'ề' => 'Ề', - 'ể' => 'Ể', - 'ễ' => 'Ễ', - 'ệ' => 'Ệ', - 'ỉ' => 'Ỉ', - 'ị' => 'Ị', - 'ọ' => 'Ọ', - 'ỏ' => 'Ỏ', - 'ố' => 'Ố', - 'ồ' => 'Ồ', - 'ổ' => 'Ổ', - 'ỗ' => 'Ỗ', - 'ộ' => 'Ộ', - 'ớ' => 'Ớ', - 'ờ' => 'Ờ', - 'ở' => 'Ở', - 'ỡ' => 'Ỡ', - 'ợ' => 'Ợ', - 'ụ' => 'Ụ', - 'ủ' => 'Ủ', - 'ứ' => 'Ứ', - 'ừ' => 'Ừ', - 'ử' => 'Ử', - 'ữ' => 'Ữ', - 'ự' => 'Ự', - 'ỳ' => 'Ỳ', - 'ỵ' => 'Ỵ', - 'ỷ' => 'Ỷ', - 'ỹ' => 'Ỹ', - 'ỻ' => 'Ỻ', - 'ỽ' => 'Ỽ', - 'ỿ' => 'Ỿ', - 'ἀ' => 'Ἀ', - 'ἁ' => 'Ἁ', - 'ἂ' => 'Ἂ', - 'ἃ' => 'Ἃ', - 'ἄ' => 'Ἄ', - 'ἅ' => 'Ἅ', - 'ἆ' => 'Ἆ', - 'ἇ' => 'Ἇ', - 'ἐ' => 'Ἐ', - 'ἑ' => 'Ἑ', - 'ἒ' => 'Ἒ', - 'ἓ' => 'Ἓ', - 'ἔ' => 'Ἔ', - 'ἕ' => 'Ἕ', - 'ἠ' => 'Ἠ', - 'ἡ' => 'Ἡ', - 'ἢ' => 'Ἢ', - 'ἣ' => 'Ἣ', - 'ἤ' => 'Ἤ', - 'ἥ' => 'Ἥ', - 'ἦ' => 'Ἦ', - 'ἧ' => 'Ἧ', - 'ἰ' => 'Ἰ', - 'ἱ' => 'Ἱ', - 'ἲ' => 'Ἲ', - 'ἳ' => 'Ἳ', - 'ἴ' => 'Ἴ', - 'ἵ' => 'Ἵ', - 'ἶ' => 'Ἶ', - 'ἷ' => 'Ἷ', - 'ὀ' => 'Ὀ', - 'ὁ' => 'Ὁ', - 'ὂ' => 'Ὂ', - 'ὃ' => 'Ὃ', - 'ὄ' => 'Ὄ', - 'ὅ' => 'Ὅ', - 'ὑ' => 'Ὑ', - 'ὓ' => 'Ὓ', - 'ὕ' => 'Ὕ', - 'ὗ' => 'Ὗ', - 'ὠ' => 'Ὠ', - 'ὡ' => 'Ὡ', - 'ὢ' => 'Ὢ', - 'ὣ' => 'Ὣ', - 'ὤ' => 'Ὤ', - 'ὥ' => 'Ὥ', - 'ὦ' => 'Ὦ', - 'ὧ' => 'Ὧ', - 'ὰ' => 'Ὰ', - 'ά' => 'Ά', - 'ὲ' => 'Ὲ', - 'έ' => 'Έ', - 'ὴ' => 'Ὴ', - 'ή' => 'Ή', - 'ὶ' => 'Ὶ', - 'ί' => 'Ί', - 'ὸ' => 'Ὸ', - 'ό' => 'Ό', - 'ὺ' => 'Ὺ', - 'ύ' => 'Ύ', - 'ὼ' => 'Ὼ', - 'ώ' => 'Ώ', - 'ᾀ' => 'ἈΙ', - 'ᾁ' => 'ἉΙ', - 'ᾂ' => 'ἊΙ', - 'ᾃ' => 'ἋΙ', - 'ᾄ' => 'ἌΙ', - 'ᾅ' => 'ἍΙ', - 'ᾆ' => 'ἎΙ', - 'ᾇ' => 'ἏΙ', - 'ᾐ' => 'ἨΙ', - 'ᾑ' => 'ἩΙ', - 'ᾒ' => 'ἪΙ', - 'ᾓ' => 'ἫΙ', - 'ᾔ' => 'ἬΙ', - 'ᾕ' => 'ἭΙ', - 'ᾖ' => 'ἮΙ', - 'ᾗ' => 'ἯΙ', - 'ᾠ' => 'ὨΙ', - 'ᾡ' => 'ὩΙ', - 'ᾢ' => 'ὪΙ', - 'ᾣ' => 'ὫΙ', - 'ᾤ' => 'ὬΙ', - 'ᾥ' => 'ὭΙ', - 'ᾦ' => 'ὮΙ', - 'ᾧ' => 'ὯΙ', - 'ᾰ' => 'Ᾰ', - 'ᾱ' => 'Ᾱ', - 'ᾳ' => 'ΑΙ', - 'ι' => 'Ι', - 'ῃ' => 'ΗΙ', - 'ῐ' => 'Ῐ', - 'ῑ' => 'Ῑ', - 'ῠ' => 'Ῠ', - 'ῡ' => 'Ῡ', - 'ῥ' => 'Ῥ', - 'ῳ' => 'ΩΙ', - 'ⅎ' => 'Ⅎ', - 'ⅰ' => 'Ⅰ', - 'ⅱ' => 'Ⅱ', - 'ⅲ' => 'Ⅲ', - 'ⅳ' => 'Ⅳ', - 'ⅴ' => 'Ⅴ', - 'ⅵ' => 'Ⅵ', - 'ⅶ' => 'Ⅶ', - 'ⅷ' => 'Ⅷ', - 'ⅸ' => 'Ⅸ', - 'ⅹ' => 'Ⅹ', - 'ⅺ' => 'Ⅺ', - 'ⅻ' => 'Ⅻ', - 'ⅼ' => 'Ⅼ', - 'ⅽ' => 'Ⅽ', - 'ⅾ' => 'Ⅾ', - 'ⅿ' => 'Ⅿ', - 'ↄ' => 'Ↄ', - 'ⓐ' => 'Ⓐ', - 'ⓑ' => 'Ⓑ', - 'ⓒ' => 'Ⓒ', - 'ⓓ' => 'Ⓓ', - 'ⓔ' => 'Ⓔ', - 'ⓕ' => 'Ⓕ', - 'ⓖ' => 'Ⓖ', - 'ⓗ' => 'Ⓗ', - 'ⓘ' => 'Ⓘ', - 'ⓙ' => 'Ⓙ', - 'ⓚ' => 'Ⓚ', - 'ⓛ' => 'Ⓛ', - 'ⓜ' => 'Ⓜ', - 'ⓝ' => 'Ⓝ', - 'ⓞ' => 'Ⓞ', - 'ⓟ' => 'Ⓟ', - 'ⓠ' => 'Ⓠ', - 'ⓡ' => 'Ⓡ', - 'ⓢ' => 'Ⓢ', - 'ⓣ' => 'Ⓣ', - 'ⓤ' => 'Ⓤ', - 'ⓥ' => 'Ⓥ', - 'ⓦ' => 'Ⓦ', - 'ⓧ' => 'Ⓧ', - 'ⓨ' => 'Ⓨ', - 'ⓩ' => 'Ⓩ', - 'ⰰ' => 'Ⰰ', - 'ⰱ' => 'Ⰱ', - 'ⰲ' => 'Ⰲ', - 'ⰳ' => 'Ⰳ', - 'ⰴ' => 'Ⰴ', - 'ⰵ' => 'Ⰵ', - 'ⰶ' => 'Ⰶ', - 'ⰷ' => 'Ⰷ', - 'ⰸ' => 'Ⰸ', - 'ⰹ' => 'Ⰹ', - 'ⰺ' => 'Ⰺ', - 'ⰻ' => 'Ⰻ', - 'ⰼ' => 'Ⰼ', - 'ⰽ' => 'Ⰽ', - 'ⰾ' => 'Ⰾ', - 'ⰿ' => 'Ⰿ', - 'ⱀ' => 'Ⱀ', - 'ⱁ' => 'Ⱁ', - 'ⱂ' => 'Ⱂ', - 'ⱃ' => 'Ⱃ', - 'ⱄ' => 'Ⱄ', - 'ⱅ' => 'Ⱅ', - 'ⱆ' => 'Ⱆ', - 'ⱇ' => 'Ⱇ', - 'ⱈ' => 'Ⱈ', - 'ⱉ' => 'Ⱉ', - 'ⱊ' => 'Ⱊ', - 'ⱋ' => 'Ⱋ', - 'ⱌ' => 'Ⱌ', - 'ⱍ' => 'Ⱍ', - 'ⱎ' => 'Ⱎ', - 'ⱏ' => 'Ⱏ', - 'ⱐ' => 'Ⱐ', - 'ⱑ' => 'Ⱑ', - 'ⱒ' => 'Ⱒ', - 'ⱓ' => 'Ⱓ', - 'ⱔ' => 'Ⱔ', - 'ⱕ' => 'Ⱕ', - 'ⱖ' => 'Ⱖ', - 'ⱗ' => 'Ⱗ', - 'ⱘ' => 'Ⱘ', - 'ⱙ' => 'Ⱙ', - 'ⱚ' => 'Ⱚ', - 'ⱛ' => 'Ⱛ', - 'ⱜ' => 'Ⱜ', - 'ⱝ' => 'Ⱝ', - 'ⱞ' => 'Ⱞ', - 'ⱡ' => 'Ⱡ', - 'ⱥ' => 'Ⱥ', - 'ⱦ' => 'Ⱦ', - 'ⱨ' => 'Ⱨ', - 'ⱪ' => 'Ⱪ', - 'ⱬ' => 'Ⱬ', - 'ⱳ' => 'Ⱳ', - 'ⱶ' => 'Ⱶ', - 'ⲁ' => 'Ⲁ', - 'ⲃ' => 'Ⲃ', - 'ⲅ' => 'Ⲅ', - 'ⲇ' => 'Ⲇ', - 'ⲉ' => 'Ⲉ', - 'ⲋ' => 'Ⲋ', - 'ⲍ' => 'Ⲍ', - 'ⲏ' => 'Ⲏ', - 'ⲑ' => 'Ⲑ', - 'ⲓ' => 'Ⲓ', - 'ⲕ' => 'Ⲕ', - 'ⲗ' => 'Ⲗ', - 'ⲙ' => 'Ⲙ', - 'ⲛ' => 'Ⲛ', - 'ⲝ' => 'Ⲝ', - 'ⲟ' => 'Ⲟ', - 'ⲡ' => 'Ⲡ', - 'ⲣ' => 'Ⲣ', - 'ⲥ' => 'Ⲥ', - 'ⲧ' => 'Ⲧ', - 'ⲩ' => 'Ⲩ', - 'ⲫ' => 'Ⲫ', - 'ⲭ' => 'Ⲭ', - 'ⲯ' => 'Ⲯ', - 'ⲱ' => 'Ⲱ', - 'ⲳ' => 'Ⲳ', - 'ⲵ' => 'Ⲵ', - 'ⲷ' => 'Ⲷ', - 'ⲹ' => 'Ⲹ', - 'ⲻ' => 'Ⲻ', - 'ⲽ' => 'Ⲽ', - 'ⲿ' => 'Ⲿ', - 'ⳁ' => 'Ⳁ', - 'ⳃ' => 'Ⳃ', - 'ⳅ' => 'Ⳅ', - 'ⳇ' => 'Ⳇ', - 'ⳉ' => 'Ⳉ', - 'ⳋ' => 'Ⳋ', - 'ⳍ' => 'Ⳍ', - 'ⳏ' => 'Ⳏ', - 'ⳑ' => 'Ⳑ', - 'ⳓ' => 'Ⳓ', - 'ⳕ' => 'Ⳕ', - 'ⳗ' => 'Ⳗ', - 'ⳙ' => 'Ⳙ', - 'ⳛ' => 'Ⳛ', - 'ⳝ' => 'Ⳝ', - 'ⳟ' => 'Ⳟ', - 'ⳡ' => 'Ⳡ', - 'ⳣ' => 'Ⳣ', - 'ⳬ' => 'Ⳬ', - 'ⳮ' => 'Ⳮ', - 'ⳳ' => 'Ⳳ', - 'ⴀ' => 'Ⴀ', - 'ⴁ' => 'Ⴁ', - 'ⴂ' => 'Ⴂ', - 'ⴃ' => 'Ⴃ', - 'ⴄ' => 'Ⴄ', - 'ⴅ' => 'Ⴅ', - 'ⴆ' => 'Ⴆ', - 'ⴇ' => 'Ⴇ', - 'ⴈ' => 'Ⴈ', - 'ⴉ' => 'Ⴉ', - 'ⴊ' => 'Ⴊ', - 'ⴋ' => 'Ⴋ', - 'ⴌ' => 'Ⴌ', - 'ⴍ' => 'Ⴍ', - 'ⴎ' => 'Ⴎ', - 'ⴏ' => 'Ⴏ', - 'ⴐ' => 'Ⴐ', - 'ⴑ' => 'Ⴑ', - 'ⴒ' => 'Ⴒ', - 'ⴓ' => 'Ⴓ', - 'ⴔ' => 'Ⴔ', - 'ⴕ' => 'Ⴕ', - 'ⴖ' => 'Ⴖ', - 'ⴗ' => 'Ⴗ', - 'ⴘ' => 'Ⴘ', - 'ⴙ' => 'Ⴙ', - 'ⴚ' => 'Ⴚ', - 'ⴛ' => 'Ⴛ', - 'ⴜ' => 'Ⴜ', - 'ⴝ' => 'Ⴝ', - 'ⴞ' => 'Ⴞ', - 'ⴟ' => 'Ⴟ', - 'ⴠ' => 'Ⴠ', - 'ⴡ' => 'Ⴡ', - 'ⴢ' => 'Ⴢ', - 'ⴣ' => 'Ⴣ', - 'ⴤ' => 'Ⴤ', - 'ⴥ' => 'Ⴥ', - 'ⴧ' => 'Ⴧ', - 'ⴭ' => 'Ⴭ', - 'ꙁ' => 'Ꙁ', - 'ꙃ' => 'Ꙃ', - 'ꙅ' => 'Ꙅ', - 'ꙇ' => 'Ꙇ', - 'ꙉ' => 'Ꙉ', - 'ꙋ' => 'Ꙋ', - 'ꙍ' => 'Ꙍ', - 'ꙏ' => 'Ꙏ', - 'ꙑ' => 'Ꙑ', - 'ꙓ' => 'Ꙓ', - 'ꙕ' => 'Ꙕ', - 'ꙗ' => 'Ꙗ', - 'ꙙ' => 'Ꙙ', - 'ꙛ' => 'Ꙛ', - 'ꙝ' => 'Ꙝ', - 'ꙟ' => 'Ꙟ', - 'ꙡ' => 'Ꙡ', - 'ꙣ' => 'Ꙣ', - 'ꙥ' => 'Ꙥ', - 'ꙧ' => 'Ꙧ', - 'ꙩ' => 'Ꙩ', - 'ꙫ' => 'Ꙫ', - 'ꙭ' => 'Ꙭ', - 'ꚁ' => 'Ꚁ', - 'ꚃ' => 'Ꚃ', - 'ꚅ' => 'Ꚅ', - 'ꚇ' => 'Ꚇ', - 'ꚉ' => 'Ꚉ', - 'ꚋ' => 'Ꚋ', - 'ꚍ' => 'Ꚍ', - 'ꚏ' => 'Ꚏ', - 'ꚑ' => 'Ꚑ', - 'ꚓ' => 'Ꚓ', - 'ꚕ' => 'Ꚕ', - 'ꚗ' => 'Ꚗ', - 'ꚙ' => 'Ꚙ', - 'ꚛ' => 'Ꚛ', - 'ꜣ' => 'Ꜣ', - 'ꜥ' => 'Ꜥ', - 'ꜧ' => 'Ꜧ', - 'ꜩ' => 'Ꜩ', - 'ꜫ' => 'Ꜫ', - 'ꜭ' => 'Ꜭ', - 'ꜯ' => 'Ꜯ', - 'ꜳ' => 'Ꜳ', - 'ꜵ' => 'Ꜵ', - 'ꜷ' => 'Ꜷ', - 'ꜹ' => 'Ꜹ', - 'ꜻ' => 'Ꜻ', - 'ꜽ' => 'Ꜽ', - 'ꜿ' => 'Ꜿ', - 'ꝁ' => 'Ꝁ', - 'ꝃ' => 'Ꝃ', - 'ꝅ' => 'Ꝅ', - 'ꝇ' => 'Ꝇ', - 'ꝉ' => 'Ꝉ', - 'ꝋ' => 'Ꝋ', - 'ꝍ' => 'Ꝍ', - 'ꝏ' => 'Ꝏ', - 'ꝑ' => 'Ꝑ', - 'ꝓ' => 'Ꝓ', - 'ꝕ' => 'Ꝕ', - 'ꝗ' => 'Ꝗ', - 'ꝙ' => 'Ꝙ', - 'ꝛ' => 'Ꝛ', - 'ꝝ' => 'Ꝝ', - 'ꝟ' => 'Ꝟ', - 'ꝡ' => 'Ꝡ', - 'ꝣ' => 'Ꝣ', - 'ꝥ' => 'Ꝥ', - 'ꝧ' => 'Ꝧ', - 'ꝩ' => 'Ꝩ', - 'ꝫ' => 'Ꝫ', - 'ꝭ' => 'Ꝭ', - 'ꝯ' => 'Ꝯ', - 'ꝺ' => 'Ꝺ', - 'ꝼ' => 'Ꝼ', - 'ꝿ' => 'Ꝿ', - 'ꞁ' => 'Ꞁ', - 'ꞃ' => 'Ꞃ', - 'ꞅ' => 'Ꞅ', - 'ꞇ' => 'Ꞇ', - 'ꞌ' => 'Ꞌ', - 'ꞑ' => 'Ꞑ', - 'ꞓ' => 'Ꞓ', - 'ꞔ' => 'Ꞔ', - 'ꞗ' => 'Ꞗ', - 'ꞙ' => 'Ꞙ', - 'ꞛ' => 'Ꞛ', - 'ꞝ' => 'Ꞝ', - 'ꞟ' => 'Ꞟ', - 'ꞡ' => 'Ꞡ', - 'ꞣ' => 'Ꞣ', - 'ꞥ' => 'Ꞥ', - 'ꞧ' => 'Ꞧ', - 'ꞩ' => 'Ꞩ', - 'ꞵ' => 'Ꞵ', - 'ꞷ' => 'Ꞷ', - 'ꞹ' => 'Ꞹ', - 'ꞻ' => 'Ꞻ', - 'ꞽ' => 'Ꞽ', - 'ꞿ' => 'Ꞿ', - 'ꟃ' => 'Ꟃ', - 'ꟈ' => 'Ꟈ', - 'ꟊ' => 'Ꟊ', - 'ꟶ' => 'Ꟶ', - 'ꭓ' => 'Ꭓ', - 'ꭰ' => 'Ꭰ', - 'ꭱ' => 'Ꭱ', - 'ꭲ' => 'Ꭲ', - 'ꭳ' => 'Ꭳ', - 'ꭴ' => 'Ꭴ', - 'ꭵ' => 'Ꭵ', - 'ꭶ' => 'Ꭶ', - 'ꭷ' => 'Ꭷ', - 'ꭸ' => 'Ꭸ', - 'ꭹ' => 'Ꭹ', - 'ꭺ' => 'Ꭺ', - 'ꭻ' => 'Ꭻ', - 'ꭼ' => 'Ꭼ', - 'ꭽ' => 'Ꭽ', - 'ꭾ' => 'Ꭾ', - 'ꭿ' => 'Ꭿ', - 'ꮀ' => 'Ꮀ', - 'ꮁ' => 'Ꮁ', - 'ꮂ' => 'Ꮂ', - 'ꮃ' => 'Ꮃ', - 'ꮄ' => 'Ꮄ', - 'ꮅ' => 'Ꮅ', - 'ꮆ' => 'Ꮆ', - 'ꮇ' => 'Ꮇ', - 'ꮈ' => 'Ꮈ', - 'ꮉ' => 'Ꮉ', - 'ꮊ' => 'Ꮊ', - 'ꮋ' => 'Ꮋ', - 'ꮌ' => 'Ꮌ', - 'ꮍ' => 'Ꮍ', - 'ꮎ' => 'Ꮎ', - 'ꮏ' => 'Ꮏ', - 'ꮐ' => 'Ꮐ', - 'ꮑ' => 'Ꮑ', - 'ꮒ' => 'Ꮒ', - 'ꮓ' => 'Ꮓ', - 'ꮔ' => 'Ꮔ', - 'ꮕ' => 'Ꮕ', - 'ꮖ' => 'Ꮖ', - 'ꮗ' => 'Ꮗ', - 'ꮘ' => 'Ꮘ', - 'ꮙ' => 'Ꮙ', - 'ꮚ' => 'Ꮚ', - 'ꮛ' => 'Ꮛ', - 'ꮜ' => 'Ꮜ', - 'ꮝ' => 'Ꮝ', - 'ꮞ' => 'Ꮞ', - 'ꮟ' => 'Ꮟ', - 'ꮠ' => 'Ꮠ', - 'ꮡ' => 'Ꮡ', - 'ꮢ' => 'Ꮢ', - 'ꮣ' => 'Ꮣ', - 'ꮤ' => 'Ꮤ', - 'ꮥ' => 'Ꮥ', - 'ꮦ' => 'Ꮦ', - 'ꮧ' => 'Ꮧ', - 'ꮨ' => 'Ꮨ', - 'ꮩ' => 'Ꮩ', - 'ꮪ' => 'Ꮪ', - 'ꮫ' => 'Ꮫ', - 'ꮬ' => 'Ꮬ', - 'ꮭ' => 'Ꮭ', - 'ꮮ' => 'Ꮮ', - 'ꮯ' => 'Ꮯ', - 'ꮰ' => 'Ꮰ', - 'ꮱ' => 'Ꮱ', - 'ꮲ' => 'Ꮲ', - 'ꮳ' => 'Ꮳ', - 'ꮴ' => 'Ꮴ', - 'ꮵ' => 'Ꮵ', - 'ꮶ' => 'Ꮶ', - 'ꮷ' => 'Ꮷ', - 'ꮸ' => 'Ꮸ', - 'ꮹ' => 'Ꮹ', - 'ꮺ' => 'Ꮺ', - 'ꮻ' => 'Ꮻ', - 'ꮼ' => 'Ꮼ', - 'ꮽ' => 'Ꮽ', - 'ꮾ' => 'Ꮾ', - 'ꮿ' => 'Ꮿ', - 'a' => 'A', - 'b' => 'B', - 'c' => 'C', - 'd' => 'D', - 'e' => 'E', - 'f' => 'F', - 'g' => 'G', - 'h' => 'H', - 'i' => 'I', - 'j' => 'J', - 'k' => 'K', - 'l' => 'L', - 'm' => 'M', - 'n' => 'N', - 'o' => 'O', - 'p' => 'P', - 'q' => 'Q', - 'r' => 'R', - 's' => 'S', - 't' => 'T', - 'u' => 'U', - 'v' => 'V', - 'w' => 'W', - 'x' => 'X', - 'y' => 'Y', - 'z' => 'Z', - '𐐨' => '𐐀', - '𐐩' => '𐐁', - '𐐪' => '𐐂', - '𐐫' => '𐐃', - '𐐬' => '𐐄', - '𐐭' => '𐐅', - '𐐮' => '𐐆', - '𐐯' => '𐐇', - '𐐰' => '𐐈', - '𐐱' => '𐐉', - '𐐲' => '𐐊', - '𐐳' => '𐐋', - '𐐴' => '𐐌', - '𐐵' => '𐐍', - '𐐶' => '𐐎', - '𐐷' => '𐐏', - '𐐸' => '𐐐', - '𐐹' => '𐐑', - '𐐺' => '𐐒', - '𐐻' => '𐐓', - '𐐼' => '𐐔', - '𐐽' => '𐐕', - '𐐾' => '𐐖', - '𐐿' => '𐐗', - '𐑀' => '𐐘', - '𐑁' => '𐐙', - '𐑂' => '𐐚', - '𐑃' => '𐐛', - '𐑄' => '𐐜', - '𐑅' => '𐐝', - '𐑆' => '𐐞', - '𐑇' => '𐐟', - '𐑈' => '𐐠', - '𐑉' => '𐐡', - '𐑊' => '𐐢', - '𐑋' => '𐐣', - '𐑌' => '𐐤', - '𐑍' => '𐐥', - '𐑎' => '𐐦', - '𐑏' => '𐐧', - '𐓘' => '𐒰', - '𐓙' => '𐒱', - '𐓚' => '𐒲', - '𐓛' => '𐒳', - '𐓜' => '𐒴', - '𐓝' => '𐒵', - '𐓞' => '𐒶', - '𐓟' => '𐒷', - '𐓠' => '𐒸', - '𐓡' => '𐒹', - '𐓢' => '𐒺', - '𐓣' => '𐒻', - '𐓤' => '𐒼', - '𐓥' => '𐒽', - '𐓦' => '𐒾', - '𐓧' => '𐒿', - '𐓨' => '𐓀', - '𐓩' => '𐓁', - '𐓪' => '𐓂', - '𐓫' => '𐓃', - '𐓬' => '𐓄', - '𐓭' => '𐓅', - '𐓮' => '𐓆', - '𐓯' => '𐓇', - '𐓰' => '𐓈', - '𐓱' => '𐓉', - '𐓲' => '𐓊', - '𐓳' => '𐓋', - '𐓴' => '𐓌', - '𐓵' => '𐓍', - '𐓶' => '𐓎', - '𐓷' => '𐓏', - '𐓸' => '𐓐', - '𐓹' => '𐓑', - '𐓺' => '𐓒', - '𐓻' => '𐓓', - '𐳀' => '𐲀', - '𐳁' => '𐲁', - '𐳂' => '𐲂', - '𐳃' => '𐲃', - '𐳄' => '𐲄', - '𐳅' => '𐲅', - '𐳆' => '𐲆', - '𐳇' => '𐲇', - '𐳈' => '𐲈', - '𐳉' => '𐲉', - '𐳊' => '𐲊', - '𐳋' => '𐲋', - '𐳌' => '𐲌', - '𐳍' => '𐲍', - '𐳎' => '𐲎', - '𐳏' => '𐲏', - '𐳐' => '𐲐', - '𐳑' => '𐲑', - '𐳒' => '𐲒', - '𐳓' => '𐲓', - '𐳔' => '𐲔', - '𐳕' => '𐲕', - '𐳖' => '𐲖', - '𐳗' => '𐲗', - '𐳘' => '𐲘', - '𐳙' => '𐲙', - '𐳚' => '𐲚', - '𐳛' => '𐲛', - '𐳜' => '𐲜', - '𐳝' => '𐲝', - '𐳞' => '𐲞', - '𐳟' => '𐲟', - '𐳠' => '𐲠', - '𐳡' => '𐲡', - '𐳢' => '𐲢', - '𐳣' => '𐲣', - '𐳤' => '𐲤', - '𐳥' => '𐲥', - '𐳦' => '𐲦', - '𐳧' => '𐲧', - '𐳨' => '𐲨', - '𐳩' => '𐲩', - '𐳪' => '𐲪', - '𐳫' => '𐲫', - '𐳬' => '𐲬', - '𐳭' => '𐲭', - '𐳮' => '𐲮', - '𐳯' => '𐲯', - '𐳰' => '𐲰', - '𐳱' => '𐲱', - '𐳲' => '𐲲', - '𑣀' => '𑢠', - '𑣁' => '𑢡', - '𑣂' => '𑢢', - '𑣃' => '𑢣', - '𑣄' => '𑢤', - '𑣅' => '𑢥', - '𑣆' => '𑢦', - '𑣇' => '𑢧', - '𑣈' => '𑢨', - '𑣉' => '𑢩', - '𑣊' => '𑢪', - '𑣋' => '𑢫', - '𑣌' => '𑢬', - '𑣍' => '𑢭', - '𑣎' => '𑢮', - '𑣏' => '𑢯', - '𑣐' => '𑢰', - '𑣑' => '𑢱', - '𑣒' => '𑢲', - '𑣓' => '𑢳', - '𑣔' => '𑢴', - '𑣕' => '𑢵', - '𑣖' => '𑢶', - '𑣗' => '𑢷', - '𑣘' => '𑢸', - '𑣙' => '𑢹', - '𑣚' => '𑢺', - '𑣛' => '𑢻', - '𑣜' => '𑢼', - '𑣝' => '𑢽', - '𑣞' => '𑢾', - '𑣟' => '𑢿', - '𖹠' => '𖹀', - '𖹡' => '𖹁', - '𖹢' => '𖹂', - '𖹣' => '𖹃', - '𖹤' => '𖹄', - '𖹥' => '𖹅', - '𖹦' => '𖹆', - '𖹧' => '𖹇', - '𖹨' => '𖹈', - '𖹩' => '𖹉', - '𖹪' => '𖹊', - '𖹫' => '𖹋', - '𖹬' => '𖹌', - '𖹭' => '𖹍', - '𖹮' => '𖹎', - '𖹯' => '𖹏', - '𖹰' => '𖹐', - '𖹱' => '𖹑', - '𖹲' => '𖹒', - '𖹳' => '𖹓', - '𖹴' => '𖹔', - '𖹵' => '𖹕', - '𖹶' => '𖹖', - '𖹷' => '𖹗', - '𖹸' => '𖹘', - '𖹹' => '𖹙', - '𖹺' => '𖹚', - '𖹻' => '𖹛', - '𖹼' => '𖹜', - '𖹽' => '𖹝', - '𖹾' => '𖹞', - '𖹿' => '𖹟', - '𞤢' => '𞤀', - '𞤣' => '𞤁', - '𞤤' => '𞤂', - '𞤥' => '𞤃', - '𞤦' => '𞤄', - '𞤧' => '𞤅', - '𞤨' => '𞤆', - '𞤩' => '𞤇', - '𞤪' => '𞤈', - '𞤫' => '𞤉', - '𞤬' => '𞤊', - '𞤭' => '𞤋', - '𞤮' => '𞤌', - '𞤯' => '𞤍', - '𞤰' => '𞤎', - '𞤱' => '𞤏', - '𞤲' => '𞤐', - '𞤳' => '𞤑', - '𞤴' => '𞤒', - '𞤵' => '𞤓', - '𞤶' => '𞤔', - '𞤷' => '𞤕', - '𞤸' => '𞤖', - '𞤹' => '𞤗', - '𞤺' => '𞤘', - '𞤻' => '𞤙', - '𞤼' => '𞤚', - '𞤽' => '𞤛', - '𞤾' => '𞤜', - '𞤿' => '𞤝', - '𞥀' => '𞤞', - '𞥁' => '𞤟', - '𞥂' => '𞤠', - '𞥃' => '𞤡', - 'ß' => 'SS', - 'ff' => 'FF', - 'fi' => 'FI', - 'fl' => 'FL', - 'ffi' => 'FFI', - 'ffl' => 'FFL', - 'ſt' => 'ST', - 'st' => 'ST', - 'և' => 'ԵՒ', - 'ﬓ' => 'ՄՆ', - 'ﬔ' => 'ՄԵ', - 'ﬕ' => 'ՄԻ', - 'ﬖ' => 'ՎՆ', - 'ﬗ' => 'ՄԽ', - 'ʼn' => 'ʼN', - 'ΐ' => 'Ϊ́', - 'ΰ' => 'Ϋ́', - 'ǰ' => 'J̌', - 'ẖ' => 'H̱', - 'ẗ' => 'T̈', - 'ẘ' => 'W̊', - 'ẙ' => 'Y̊', - 'ẚ' => 'Aʾ', - 'ὐ' => 'Υ̓', - 'ὒ' => 'Υ̓̀', - 'ὔ' => 'Υ̓́', - 'ὖ' => 'Υ̓͂', - 'ᾶ' => 'Α͂', - 'ῆ' => 'Η͂', - 'ῒ' => 'Ϊ̀', - 'ΐ' => 'Ϊ́', - 'ῖ' => 'Ι͂', - 'ῗ' => 'Ϊ͂', - 'ῢ' => 'Ϋ̀', - 'ΰ' => 'Ϋ́', - 'ῤ' => 'Ρ̓', - 'ῦ' => 'Υ͂', - 'ῧ' => 'Ϋ͂', - 'ῶ' => 'Ω͂', - 'ᾈ' => 'ἈΙ', - 'ᾉ' => 'ἉΙ', - 'ᾊ' => 'ἊΙ', - 'ᾋ' => 'ἋΙ', - 'ᾌ' => 'ἌΙ', - 'ᾍ' => 'ἍΙ', - 'ᾎ' => 'ἎΙ', - 'ᾏ' => 'ἏΙ', - 'ᾘ' => 'ἨΙ', - 'ᾙ' => 'ἩΙ', - 'ᾚ' => 'ἪΙ', - 'ᾛ' => 'ἫΙ', - 'ᾜ' => 'ἬΙ', - 'ᾝ' => 'ἭΙ', - 'ᾞ' => 'ἮΙ', - 'ᾟ' => 'ἯΙ', - 'ᾨ' => 'ὨΙ', - 'ᾩ' => 'ὩΙ', - 'ᾪ' => 'ὪΙ', - 'ᾫ' => 'ὫΙ', - 'ᾬ' => 'ὬΙ', - 'ᾭ' => 'ὭΙ', - 'ᾮ' => 'ὮΙ', - 'ᾯ' => 'ὯΙ', - 'ᾼ' => 'ΑΙ', - 'ῌ' => 'ΗΙ', - 'ῼ' => 'ΩΙ', - 'ᾲ' => 'ᾺΙ', - 'ᾴ' => 'ΆΙ', - 'ῂ' => 'ῊΙ', - 'ῄ' => 'ΉΙ', - 'ῲ' => 'ῺΙ', - 'ῴ' => 'ΏΙ', - 'ᾷ' => 'Α͂Ι', - 'ῇ' => 'Η͂Ι', - 'ῷ' => 'Ω͂Ι', -); diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/composer.json deleted file mode 100644 index 1fa21ca..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-mbstring/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "symfony/polyfill-mbstring", - "type": "library", - "description": "Symfony polyfill for the Mbstring extension", - "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, - "files": [ "bootstrap.php" ] - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/README.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/README.md deleted file mode 100644 index b3ebbce..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/README.md +++ /dev/null @@ -1,18 +0,0 @@ -Symfony Polyfill / Php73 -======================== - -This component provides functions added to PHP 7.3 core: - -- [`array_key_first`](https://php.net/array_key_first) -- [`array_key_last`](https://php.net/array_key_last) -- [`hrtime`](https://php.net/function.hrtime) -- [`is_countable`](https://php.net/is_countable) -- [`JsonException`](https://php.net/JsonException) - -More information can be found in the -[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). - -License -======= - -This library is released under the [MIT license](LICENSE). diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php deleted file mode 100644 index f06d6c2..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/Resources/stubs/JsonException.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -if (\PHP_VERSION_ID < 70300) { - class JsonException extends Exception - { - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/bootstrap.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/bootstrap.php deleted file mode 100644 index d6b2153..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/bootstrap.php +++ /dev/null @@ -1,31 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -use Symfony\Polyfill\Php73 as p; - -if (\PHP_VERSION_ID >= 70300) { - return; -} - -if (!function_exists('is_countable')) { - function is_countable($value) { return is_array($value) || $value instanceof Countable || $value instanceof ResourceBundle || $value instanceof SimpleXmlElement; } -} -if (!function_exists('hrtime')) { - require_once __DIR__.'/Php73.php'; - p\Php73::$startAt = (int) microtime(true); - function hrtime($as_number = false) { return p\Php73::hrtime($as_number); } -} -if (!function_exists('array_key_first')) { - function array_key_first(array $array) { foreach ($array as $key => $value) { return $key; } } -} -if (!function_exists('array_key_last')) { - function array_key_last(array $array) { return key(array_slice($array, -1, 1, true)); } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/composer.json deleted file mode 100644 index a7fe478..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php73/composer.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "symfony/polyfill-php73", - "type": "library", - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", - "keywords": ["polyfill", "shim", "compatibility", "portable"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php73\\": "" }, - "files": [ "bootstrap.php" ], - "classmap": [ "Resources/stubs" ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/PhpToken.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/PhpToken.php deleted file mode 100644 index fe6e691..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/PhpToken.php +++ /dev/null @@ -1,103 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Polyfill\Php80; - -/** - * @author Fedonyuk Anton - * - * @internal - */ -class PhpToken implements \Stringable -{ - /** - * @var int - */ - public $id; - - /** - * @var string - */ - public $text; - - /** - * @var int - */ - public $line; - - /** - * @var int - */ - public $pos; - - public function __construct(int $id, string $text, int $line = -1, int $position = -1) - { - $this->id = $id; - $this->text = $text; - $this->line = $line; - $this->pos = $position; - } - - public function getTokenName(): ?string - { - if ('UNKNOWN' === $name = token_name($this->id)) { - $name = \strlen($this->text) > 1 || \ord($this->text) < 32 ? null : $this->text; - } - - return $name; - } - - /** - * @param int|string|array $kind - */ - public function is($kind): bool - { - foreach ((array) $kind as $value) { - if (\in_array($value, [$this->id, $this->text], true)) { - return true; - } - } - - return false; - } - - public function isIgnorable(): bool - { - return \in_array($this->id, [\T_WHITESPACE, \T_COMMENT, \T_DOC_COMMENT, \T_OPEN_TAG], true); - } - - public function __toString(): string - { - return (string) $this->text; - } - - /** - * @return static[] - */ - public static function tokenize(string $code, int $flags = 0): array - { - $line = 1; - $position = 0; - $tokens = token_get_all($code, $flags); - foreach ($tokens as $index => $token) { - if (\is_string($token)) { - $id = \ord($token); - $text = $token; - } else { - [$id, $text, $line] = $token; - } - $tokens[$index] = new static($id, $text, $line, $position); - $position += \strlen($text); - } - - return $tokens; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php deleted file mode 100644 index 37937cb..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +++ /dev/null @@ -1,7 +0,0 @@ -=7.1" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php80\\": "" }, - "files": [ "bootstrap.php" ], - "classmap": [ "Resources/stubs" ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php81/composer.json b/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php81/composer.json deleted file mode 100644 index c39ccf4..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/polyfill-php81/composer.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "symfony/polyfill-php81", - "type": "library", - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "keywords": ["polyfill", "shim", "compatibility", "portable"], - "homepage": "https://symfony.com", - "license": "MIT", - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": ">=7.1" - }, - "autoload": { - "psr-4": { "Symfony\\Polyfill\\Php81\\": "" }, - "files": [ "bootstrap.php" ], - "classmap": [ "Resources/stubs" ] - }, - "minimum-stability": "dev", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/CHANGELOG.md deleted file mode 100644 index 7932e26..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/CHANGELOG.md +++ /dev/null @@ -1,5 +0,0 @@ -CHANGELOG -========= - -The changelog is maintained for all Symfony contracts at the following URL: -https://github.com/symfony/contracts/blob/main/CHANGELOG.md diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/ResetInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/ResetInterface.php deleted file mode 100644 index 1af1075..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/service-contracts/ResetInterface.php +++ /dev/null @@ -1,30 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Contracts\Service; - -/** - * Provides a way to reset an object to its initial state. - * - * When calling the "reset()" method on an object, it should be put back to its - * initial state. This usually means clearing any internal buffers and forwarding - * the call to internal dependencies. All properties of the object should be put - * back to the same state it had when it was first ready to use. - * - * This method could be called, for example, to recycle objects that are used as - * services, so that they can be used to handle several requests in the same - * process loop (note that we advise making your services stateless instead of - * implementing this interface when possible.) - */ -interface ResetInterface -{ - public function reset(); -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/CHANGELOG.md deleted file mode 100644 index 3406c30..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/CHANGELOG.md +++ /dev/null @@ -1,12 +0,0 @@ -CHANGELOG -========= - -5.1.0 ------ - - * added argument `array &$foundClasses` to `VarExporter::export()` to ease with preloading exported values - -4.2.0 ------ - - * added the component diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Exception/ExceptionInterface.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Exception/ExceptionInterface.php deleted file mode 100644 index adfaed4..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Exception/ExceptionInterface.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\VarExporter\Exception; - -interface ExceptionInterface extends \Throwable -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Internal/Reference.php b/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Internal/Reference.php deleted file mode 100644 index e371c07..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/symfony/var-exporter/Internal/Reference.php +++ /dev/null @@ -1,30 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Symfony\Component\VarExporter\Internal; - -/** - * @author Nicolas Grekas - * - * @internal - */ -class Reference -{ - public $id; - public $value; - public $count = 0; - - public function __construct(int $id, $value = null) - { - $this->id = $id; - $this->value = $value; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/fonts/dejavusans.php b/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/fonts/dejavusans.php deleted file mode 100644 index 72147be..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/fonts/dejavusans.php +++ /dev/null @@ -1,16 +0,0 @@ -32,'FontBBox'=>'[-1021 -415 1681 1167]','ItalicAngle'=>0,'Ascent'=>928,'Descent'=>-236,'Leading'=>0,'CapHeight'=>729,'XHeight'=>547,'StemV'=>34,'StemH'=>15,'AvgWidth'=>507,'MaxWidth'=>1735,'MissingWidth'=>600); -$cbbox=array(0=>array(50,-177,550,705),33=>array(151,0,250,729),34=>array(96,458,364,729),35=>array(77,0,761,718),36=>array(83,-147,553,760),37=>array(55,-14,895,742),38=>array(63,-14,749,742),39=>array(96,458,179,729),40=>array(86,-132,310,759),41=>array(80,-132,304,759),42=>array(30,286,470,742),43=>array(106,0,732,627),44=>array(77,-116,220,124),45=>array(49,234,312,314),46=>array(107,0,210,124),47=>array(0,-93,337,729),48=>array(66,-14,570,742),49=>array(110,0,544,729),50=>array(73,0,536,742),51=>array(76,-14,556,742),52=>array(49,0,580,729),53=>array(77,-14,549,729),54=>array(70,-14,573,742),55=>array(82,0,551,729),56=>array(68,-14,568,742),57=>array(63,-14,566,742),58=>array(117,0,220,517),59=>array(77,-116,220,517),60=>array(106,46,732,581),61=>array(106,172,732,454),62=>array(106,46,732,581),63=>array(72,0,461,742),64=>array(66,-174,930,704),65=>array(8,0,676,729),66=>array(98,0,615,729),67=>array(56,-14,644,742),68=>array(98,0,711,729),69=>array(98,0,568,729),70=>array(98,0,517,729),71=>array(56,-14,693,742),72=>array(98,0,654,729),73=>array(98,0,197,729),74=>array(-52,-200,197,729),75=>array(98,0,677,729),76=>array(98,0,552,729),77=>array(98,0,765,729),78=>array(98,0,650,729),79=>array(56,-14,731,742),80=>array(98,0,569,729),81=>array(56,-129,731,742),82=>array(98,0,666,729),83=>array(66,-14,579,742),84=>array(-3,0,614,729),85=>array(87,-14,645,729),86=>array(8,0,676,729),87=>array(33,0,956,729),88=>array(30,0,654,729),89=>array(-2,0,613,729),90=>array(45,0,640,729),91=>array(86,-132,293,760),92=>array(0,-93,337,729),93=>array(97,-132,304,760),94=>array(106,457,732,729),95=>array(-10,-236,510,-166),96=>array(83,617,317,800),97=>array(60,-14,522,560),98=>array(91,-14,580,760),99=>array(55,-14,488,560),100=>array(55,-14,544,760),101=>array(55,-14,562,560),102=>array(23,0,371,760),103=>array(55,-208,544,560),104=>array(91,0,549,760),105=>array(94,0,184,760),106=>array(-18,-208,184,760),107=>array(91,0,576,760),108=>array(94,0,184,760),109=>array(91,0,889,560),110=>array(91,0,549,560),111=>array(55,-14,557,560),112=>array(91,-208,580,560),113=>array(55,-208,544,560),114=>array(91,0,411,560),115=>array(54,-14,472,560),116=>array(27,0,368,702),117=>array(85,-14,543,560),118=>array(30,0,562,547),119=>array(42,0,776,547),120=>array(29,0,559,547),121=>array(30,-208,562,547),122=>array(43,0,482,547),123=>array(125,-163,511,760),124=>array(127,-236,210,764),125=>array(125,-163,511,760),126=>array(106,228,732,399),161=>array(151,0,250,729),162=>array(84,-153,517,699),163=>array(63,0,548,742),164=>array(46,40,592,587),165=>array(40,0,595,729),166=>array(127,-171,210,699),167=>array(45,-95,454,742),168=>array(105,659,395,758),169=>array(138,0,862,725),170=>array(56,229,404,742),171=>array(77,69,518,517),172=>array(106,140,732,421),173=>array(49,234,312,314),174=>array(138,0,862,725),175=>array(104,673,396,745),176=>array(95,432,405,742),177=>array(106,0,732,627),178=>array(46,326,338,742),179=>array(48,319,350,742),180=>array(181,616,415,800),181=>array(85,-208,612,547),182=>array(77,-96,528,729),183=>array(107,285,210,409),184=>array(142,-193,344,0),185=>array(67,326,346,734),186=>array(47,229,424,742),187=>array(94,69,535,517),188=>array(67,-14,937,742),189=>array(67,-14,906,742),190=>array(48,-14,937,742),191=>array(70,-14,459,729),192=>array(8,0,676,927),193=>array(8,0,676,927),194=>array(8,0,676,928),195=>array(8,0,676,921),196=>array(8,0,676,913),197=>array(8,0,676,928),198=>array(4,0,910,729),199=>array(56,-193,644,742),200=>array(98,0,568,927),201=>array(98,0,568,927),202=>array(98,0,568,928),203=>array(98,0,568,913),204=>array(29,0,216,927),205=>array(79,0,265,927),206=>array(-1,0,297,928),207=>array(3,0,293,913),208=>array(5,0,716,729),209=>array(98,0,650,921),210=>array(56,-14,731,927),211=>array(56,-14,731,927),212=>array(56,-14,731,928),213=>array(56,-14,731,921),214=>array(56,-14,731,913),215=>array(137,31,701,596),216=>array(50,-34,737,761),217=>array(87,-14,645,927),218=>array(87,-14,645,927),219=>array(87,-14,645,928),220=>array(87,-14,645,913),221=>array(-2,0,613,927),222=>array(98,0,569,729),223=>array(91,-14,584,760),224=>array(60,-14,522,800),225=>array(60,-14,522,800),226=>array(60,-14,522,800),227=>array(60,-14,522,777),228=>array(60,-14,522,758),229=>array(60,-14,522,878),230=>array(60,-14,929,560),231=>array(55,-193,488,560),232=>array(55,-14,562,800),233=>array(55,-14,562,800),234=>array(55,-14,562,800),235=>array(55,-14,562,758),236=>array(-28,0,206,800),237=>array(70,0,304,800),238=>array(-17,0,295,800),239=>array(-6,0,284,758),240=>array(55,-14,557,760),241=>array(91,0,549,777),242=>array(55,-14,557,800),243=>array(55,-14,557,800),244=>array(55,-14,557,800),245=>array(55,-14,557,777),246=>array(55,-14,557,758),247=>array(106,73,732,554),248=>array(35,-46,576,592),249=>array(85,-14,543,800),250=>array(85,-14,543,800),251=>array(85,-14,543,800),252=>array(85,-14,543,758),253=>array(30,-208,562,800),254=>array(91,-208,580,760),255=>array(30,-208,562,758),256=>array(8,0,676,899),257=>array(60,-14,522,745),258=>array(8,0,676,946),259=>array(60,-14,522,765),260=>array(8,-193,706,729),261=>array(60,-193,563,560),262=>array(56,-14,644,927),263=>array(55,-14,488,800),264=>array(56,-14,644,928),265=>array(55,-14,488,800),266=>array(56,-14,644,914),267=>array(55,-14,488,760),268=>array(56,-14,644,928),269=>array(55,-14,488,800),270=>array(98,0,711,928),271=>array(55,-14,732,760),272=>array(5,0,716,729),273=>array(55,-14,619,760),274=>array(98,0,568,900),275=>array(55,-14,562,745),276=>array(98,0,568,928),277=>array(55,-14,562,785),278=>array(98,0,568,914),279=>array(55,-14,562,760),280=>array(98,-193,569,729),281=>array(55,-193,562,560),282=>array(98,0,568,925),283=>array(55,-14,562,797),284=>array(56,-14,693,928),285=>array(55,-208,544,800),286=>array(56,-14,693,928),287=>array(55,-208,544,785),288=>array(56,-14,693,914),289=>array(55,-208,544,760),290=>array(56,-250,693,742),291=>array(55,-208,544,775),292=>array(98,0,654,928),293=>array(-13,0,549,928),294=>array(98,0,818,729),295=>array(59,0,578,760),296=>array(-14,0,309,921),297=>array(-22,0,300,777),298=>array(1,0,293,899),299=>array(-7,0,285,745),300=>array(-5,0,300,928),301=>array(-14,0,292,785),302=>array(86,-193,268,729),303=>array(73,-193,255,760),304=>array(98,0,198,914),305=>array(94,0,184,560),306=>array(98,-200,492,729),307=>array(94,-208,461,760),308=>array(-52,-200,296,928),309=>array(-18,-208,295,800),310=>array(98,-235,677,729),311=>array(91,-235,576,760),312=>array(91,0,576,547),313=>array(98,0,552,928),314=>array(94,0,286,928),315=>array(98,-235,552,729),316=>array(66,-235,209,760),317=>array(98,0,552,729),318=>array(94,0,375,760),319=>array(98,0,552,729),320=>array(94,0,314,760),321=>array(-7,0,557,729),322=>array(1,0,285,760),323=>array(98,0,650,928),324=>array(91,0,549,803),325=>array(98,-235,650,729),326=>array(91,-235,549,560),327=>array(98,0,650,921),328=>array(91,0,549,800),329=>array(100,0,715,729),330=>array(98,-208,637,742),331=>array(91,-208,549,560),332=>array(56,-14,731,899),333=>array(55,-14,557,745),334=>array(56,-14,731,928),335=>array(55,-14,557,785),336=>array(56,-14,731,927),337=>array(55,-14,557,800),338=>array(56,0,1006,729),339=>array(55,-14,970,560),340=>array(98,0,666,928),341=>array(91,0,447,803),342=>array(98,-235,666,729),343=>array(63,-235,411,560),344=>array(98,0,666,921),345=>array(91,0,419,800),346=>array(66,-14,579,928),347=>array(54,-14,472,803),348=>array(66,-14,579,928),349=>array(54,-14,472,800),350=>array(66,-193,579,742),351=>array(54,-193,472,560),352=>array(66,-14,579,928),353=>array(54,-14,472,800),354=>array(-3,-193,614,729),355=>array(27,-193,368,702),356=>array(-3,0,614,921),357=>array(27,0,374,813),358=>array(-3,0,614,729),359=>array(27,0,368,702),360=>array(87,-14,645,921),361=>array(85,-14,543,777),362=>array(87,-14,645,899),363=>array(85,-14,543,745),364=>array(87,-14,645,928),365=>array(85,-14,543,785),366=>array(87,-14,645,929),367=>array(85,-14,543,849),368=>array(87,-14,645,927),369=>array(85,-14,546,800),370=>array(87,-193,645,729),371=>array(85,-193,613,560),372=>array(33,0,956,932),373=>array(42,0,776,803),374=>array(-2,0,613,932),375=>array(30,-208,562,803),376=>array(-2,0,613,913),377=>array(45,0,640,928),378=>array(43,0,482,803),379=>array(45,0,640,914),380=>array(43,0,482,760),381=>array(45,0,640,928),382=>array(43,0,482,800),383=>array(23,0,371,760),384=>array(16,-14,580,760),385=>array(-51,0,664,729),386=>array(98,0,615,729),387=>array(91,-14,580,760),388=>array(0,0,615,729),389=>array(0,-14,580,760),390=>array(56,-14,644,742),391=>array(56,-14,794,924),392=>array(55,-14,600,760),393=>array(5,0,716,729),394=>array(-51,0,760,729),395=>array(98,0,615,729),396=>array(55,-14,544,760),397=>array(55,-208,557,548),398=>array(64,0,534,729),399=>array(57,-14,731,742),400=>array(80,-14,560,742),401=>array(-52,-200,517,729),402=>array(-63,-208,371,760),403=>array(56,-14,824,924),404=>array(4,-210,683,729),405=>array(91,0,910,760),406=>array(98,0,347,729),407=>array(5,0,290,729),408=>array(98,0,746,742),409=>array(90,0,576,760),410=>array(5,0,271,760),411=>array(30,0,562,760),412=>array(87,-14,894,729),413=>array(-52,-200,650,729),414=>array(91,-208,549,560),415=>array(56,-14,731,742),416=>array(50,-14,764,760),417=>array(58,-14,603,615),418=>array(56,-14,851,742),419=>array(55,-208,668,560),420=>array(-51,0,618,729),421=>array(90,-208,580,760),422=>array(98,-129,666,729),423=>array(56,-14,569,742),424=>array(49,-14,467,560),425=>array(98,0,568,729),426=>array(-132,-208,355,760),427=>array(27,-208,368,702),428=>array(12,0,614,729),429=>array(27,0,368,760),430=>array(-3,-200,614,729),431=>array(84,-4,796,760),432=>array(86,-14,676,615),433=>array(38,-14,726,724),434=>array(98,-15,683,729),435=>array(-2,0,742,742),436=>array(30,-208,730,560),437=>array(45,0,640,729),438=>array(43,0,482,547),439=>array(78,-31,621,729),440=>array(45,-31,588,729),441=>array(51,-213,531,547),442=>array(55,-208,488,547),443=>array(73,0,536,742),444=>array(45,-31,622,729),445=>array(51,-213,531,547),446=>array(43,-14,456,702),447=>array(91,-208,580,560),448=>array(98,-208,197,729),449=>array(98,-208,394,729),450=>array(10,-208,451,729),451=>array(98,0,197,729),452=>array(98,0,1352,928),453=>array(98,0,1211,800),454=>array(55,-14,1071,800),455=>array(98,-200,768,729),456=>array(98,-208,733,760),457=>array(94,-208,367,760),458=>array(98,-200,868,729),459=>array(98,-208,839,760),460=>array(91,-208,733,760),461=>array(8,0,676,928),462=>array(60,-14,522,800),463=>array(-1,0,297,928),464=>array(-16,0,296,800),465=>array(56,-14,731,928),466=>array(55,-14,557,800),467=>array(87,-14,645,928),468=>array(85,-14,543,800),469=>array(87,-14,645,1025),470=>array(85,-14,543,899),471=>array(87,-14,645,1044),472=>array(85,-14,543,892),473=>array(87,-14,645,1044),474=>array(85,-14,543,892),475=>array(87,-14,645,1047),476=>array(85,-14,543,892),477=>array(55,-14,562,560),478=>array(8,0,676,1025),479=>array(60,-14,522,899),480=>array(8,0,676,1025),481=>array(60,-14,522,869),482=>array(4,0,910,900),483=>array(60,-14,929,743),484=>array(56,-14,752,742),485=>array(55,-208,622,560),486=>array(56,-14,693,928),487=>array(55,-208,544,798),488=>array(98,0,677,928),489=>array(-11,0,576,928),490=>array(56,-193,731,742),491=>array(55,-193,557,560),492=>array(56,-193,731,899),493=>array(55,-193,557,745),494=>array(78,-31,621,928),495=>array(43,-213,523,800),496=>array(-18,-208,299,800),497=>array(98,0,1352,729),498=>array(98,0,1211,729),499=>array(55,-14,1071,760),500=>array(56,-14,693,928),501=>array(55,-208,544,798),502=>array(98,-14,1022,729),503=>array(98,-208,626,742),504=>array(98,0,650,927),505=>array(91,0,549,799),506=>array(8,0,676,931),507=>array(60,-14,607,931),508=>array(4,0,910,928),509=>array(60,-14,929,798),510=>array(50,-34,737,928),511=>array(35,-46,576,798),512=>array(8,0,676,930),513=>array(60,-14,522,799),514=>array(8,0,676,901),515=>array(60,-14,522,785),516=>array(98,0,568,930),517=>array(55,-14,562,798),518=>array(98,0,568,901),519=>array(55,-14,562,785),520=>array(-43,0,306,930),521=>array(-30,0,313,798),522=>array(2,0,308,901),523=>array(-14,0,292,785),524=>array(56,-14,731,930),525=>array(55,-14,557,799),526=>array(56,-14,731,901),527=>array(55,-14,557,785),528=>array(97,0,666,930),529=>array(63,0,411,798),530=>array(98,0,666,901),531=>array(91,0,421,785),532=>array(87,-14,645,930),533=>array(85,-14,543,799),534=>array(87,-14,645,901),535=>array(85,-14,543,785),536=>array(66,-240,579,742),537=>array(54,-240,472,560),538=>array(-3,-240,614,729),539=>array(27,-240,368,702),540=>array(76,-210,556,742),541=>array(35,-211,467,560),542=>array(98,0,654,928),543=>array(-8,0,549,928),544=>array(98,-208,637,742),545=>array(55,-70,783,760),546=>array(55,-14,643,742),547=>array(55,-14,555,632),548=>array(45,-208,640,729),549=>array(43,-208,482,547),550=>array(8,0,676,914),551=>array(60,-14,522,760),552=>array(98,-193,568,729),553=>array(55,-193,562,560),554=>array(56,-14,731,1025),555=>array(55,-14,557,899),556=>array(56,-14,731,1025),557=>array(55,-14,557,864),558=>array(56,-14,731,914),559=>array(55,-14,557,760),560=>array(56,-14,731,1025),561=>array(55,-14,557,899),562=>array(-2,0,613,899),563=>array(30,-208,562,745),564=>array(67,-70,420,757),565=>array(91,-70,788,560),566=>array(27,-70,422,702),567=>array(-18,-208,184,547),568=>array(55,-14,943,760),569=>array(55,-208,943,560),570=>array(-1,-34,686,761),571=>array(6,-34,692,761),572=>array(4,-46,545,592),573=>array(5,0,552,729),574=>array(-38,-34,649,761),575=>array(54,-242,512,560),576=>array(43,-242,525,547),577=>array(39,0,569,729),578=>array(39,0,445,560),579=>array(5,0,615,729),580=>array(6,-14,726,729),581=>array(8,0,676,729),582=>array(98,-93,568,822),583=>array(55,-93,562,640),584=>array(-52,-200,290,729),585=>array(-18,-208,264,760),586=>array(56,-200,836,743),587=>array(55,-208,656,560),588=>array(5,0,666,729),589=>array(7,0,411,560),590=>array(-5,0,615,729),591=>array(5,-208,588,547),592=>array(85,-14,547,560),593=>array(55,-14,544,560),594=>array(91,-14,580,560),595=>array(91,-14,580,760),596=>array(62,-14,495,560),597=>array(55,-69,488,560),598=>array(55,-208,656,760),599=>array(55,-14,715,760),600=>array(55,-14,562,560),601=>array(55,-14,562,560),602=>array(61,-14,814,560),603=>array(65,-14,473,561),604=>array(65,-14,473,561),605=>array(65,-14,771,561),606=>array(55,-14,596,561),607=>array(-18,-208,264,547),608=>array(55,-208,715,760),609=>array(55,-208,544,547),610=>array(55,-14,539,560),611=>array(47,-210,549,547),612=>array(47,-14,549,547),613=>array(85,-208,543,547),614=>array(91,0,549,760),615=>array(91,-208,549,760),616=>array(7,0,265,760),617=>array(81,0,304,547),618=>array(57,0,314,547),619=>array(37,0,359,760),620=>array(38,0,416,760),621=>array(94,-208,296,760),622=>array(94,-213,651,760),623=>array(91,-13,889,548),624=>array(91,-208,889,548),625=>array(91,-208,889,560),626=>array(-18,-208,552,560),627=>array(91,-208,661,560),628=>array(87,0,549,547),629=>array(55,-14,557,560),630=>array(55,0,768,547),631=>array(72,-18,655,561),632=>array(55,-208,602,760),633=>array(0,-13,320,547),634=>array(0,-13,320,755),635=>array(0,-208,433,547),636=>array(91,-207,411,560),637=>array(91,-208,411,560),638=>array(64,0,437,560),639=>array(57,0,437,560),640=>array(91,0,574,547),641=>array(91,0,574,547),642=>array(54,-208,472,560),643=>array(-19,-208,355,760),644=>array(-19,-208,355,760),645=>array(27,-208,401,549),646=>array(-132,-208,355,760),647=>array(27,-156,368,546),648=>array(27,-208,370,702),649=>array(0,-14,634,547),650=>array(55,-15,564,547),651=>array(94,0,545,548),652=>array(30,0,562,547),653=>array(42,0,776,547),654=>array(30,0,562,760),655=>array(50,0,552,547),656=>array(43,-208,593,547),657=>array(43,-54,482,547),658=>array(43,-213,523,547),659=>array(53,-213,553,547),660=>array(43,0,456,759),661=>array(43,0,456,759),662=>array(43,0,456,759),663=>array(43,-213,456,760),664=>array(56,-14,731,742),665=>array(91,0,530,547),666=>array(55,-14,596,561),667=>array(55,-14,724,760),668=>array(91,0,563,547),669=>array(-132,-208,272,760),670=>array(91,-213,576,547),671=>array(91,0,493,547),672=>array(55,-208,746,759),673=>array(43,0,456,759),674=>array(43,0,456,759),675=>array(55,-14,970,760),676=>array(55,-213,1014,760),677=>array(55,-54,970,760),678=>array(27,0,781,702),679=>array(27,-208,629,760),680=>array(27,-70,723,702),681=>array(23,-208,804,760),682=>array(94,0,657,760),683=>array(94,0,610,760),684=>array(26,-15,489,640),685=>array(26,84,489,640),686=>array(0,-214,570,760),687=>array(0,-208,683,760),688=>array(57,326,346,751),689=>array(57,326,346,751),690=>array(-11,209,116,751),691=>array(57,326,259,640),692=>array(35,319,236,632),693=>array(35,209,307,632),694=>array(16,326,320,632),695=>array(26,326,489,632),696=>array(19,209,354,632),697=>array(78,557,203,800),698=>array(78,557,384,800),699=>array(85,489,228,729),700=>array(87,499,230,729),701=>array(96,616,239,856),702=>array(57,492,191,760),703=>array(57,492,191,760),704=>array(57,326,317,751),705=>array(57,326,317,751),706=>array(130,524,370,836),707=>array(130,524,370,836),708=>array(94,561,406,800),709=>array(94,561,406,800),710=>array(94,616,406,800),711=>array(94,616,406,800),712=>array(104,488,171,759),713=>array(104,673,396,745),714=>array(181,616,415,800),715=>array(83,617,317,800),716=>array(104,-148,171,123),717=>array(104,-156,396,-84),718=>array(83,-236,317,-54),719=>array(181,-236,415,-53),720=>array(54,0,229,517),721=>array(54,356,229,517),722=>array(57,249,191,517),723=>array(57,249,191,517),724=>array(140,229,360,448),725=>array(140,229,360,448),726=>array(49,125,341,417),727=>array(49,234,269,307),728=>array(97,645,403,785),729=>array(200,658,300,758),730=>array(116,610,384,878),731=>array(162,-193,344,0),732=>array(89,639,411,777),733=>array(117,616,460,800),734=>array(-0,233,334,504),735=>array(117,616,383,800),736=>array(57,208,374,632),737=>array(60,326,116,751),738=>array(57,326,320,648),739=>array(57,326,391,632),740=>array(57,326,317,751),741=>array(104,0,389,668),742=>array(104,0,389,668),743=>array(104,0,389,668),744=>array(104,0,389,668),745=>array(104,0,389,668),748=>array(94,-260,406,-21),749=>array(104,610,396,808),750=>array(85,489,428,729),755=>array(116,-240,384,28),759=>array(89,-192,411,-55),768=>array(-418,560,-184,800),769=>array(-320,560,-86,800),770=>array(-406,560,-94,800),771=>array(-412,639,-90,777),772=>array(-394,673,-102,745),773=>array(-510,686,10,755),774=>array(-407,645,-101,785),775=>array(-296,560,-206,760),776=>array(-395,560,-105,758),777=>array(-348,618,-129,810),778=>array(-385,610,-117,878),779=>array(-381,616,-38,800),780=>array(-404,560,-92,800),781=>array(-283,615,-217,832),782=>array(-383,615,-117,832),783=>array(-455,616,-112,800),784=>array(-407,645,-101,917),785=>array(-407,645,-101,785),786=>array(-235,489,-92,645),787=>array(-305,595,-187,844),788=>array(-305,595,-187,844),789=>array(-66,575,66,759),790=>array(-418,-266,-184,-83),791=>array(-320,-267,-86,-83),792=>array(-357,-240,-221,-24),793=>array(-279,-240,-143,-24),794=>array(-208,690,31,930),795=>array(-133,427,60,609),796=>array(-313,-241,-208,-32),797=>array(-370,-240,-130,-87),798=>array(-370,-240,-130,-87),799=>array(-357,-240,-143,-24),800=>array(-370,-184,-130,-117),801=>array(-315,-208,-23,63),802=>array(-317,-208,-25,63),803=>array(-296,-183,-206,-69),804=>array(-396,-183,-106,-84),805=>array(-355,-241,-146,-32),806=>array(-323,-240,-180,-84),807=>array(-358,-193,-156,0),808=>array(-338,-193,-156,0),809=>array(-283,-240,-217,-47),810=>array(-383,-211,-114,-50),811=>array(-452,-222,-51,-82),812=>array(-404,-240,-92,-57),813=>array(-407,-240,-95,-57),814=>array(-407,-222,-101,-82),815=>array(-407,-224,-101,-83),816=>array(-412,-222,-90,-84),817=>array(-394,-156,-102,-84),818=>array(-510,-236,10,-166),819=>array(-510,-236,10,-9),820=>array(-557,240,-41,381),821=>array(-316,221,-59,301),822=>array(-634,221,-0,301),823=>array(-574,-46,-33,592),824=>array(-741,-34,-54,761),825=>array(-291,-241,-187,-32),826=>array(-382,-206,-113,-44),827=>array(-359,-240,-139,-21),828=>array(-452,-222,-51,-82),829=>array(-354,619,-138,834),830=>array(-247,595,-109,853),831=>array(-510,528,10,755),832=>array(-418,617,-184,800),833=>array(-320,616,-86,800),834=>array(-412,639,-90,777),835=>array(-305,595,-187,844),836=>array(-387,659,-77,978),837=>array(-278,-208,-171,-45),838=>array(-396,639,-104,786),839=>array(-360,-226,-140,-35),840=>array(-365,-240,-135,-47),841=>array(-360,-240,-140,-21),842=>array(-411,616,-89,800),843=>array(-411,567,-89,850),844=>array(-411,596,-89,820),845=>array(-452,-230,-48,-30),846=>array(-350,-240,-150,-45),849=>array(-316,610,-184,878),850=>array(-407,547,-101,855),851=>array(-354,-240,-138,-24),855=>array(-316,610,-184,878),856=>array(-103,658,-3,758),858=>array(-430,-241,-71,-32),860=>array(-445,-237,445,-60),861=>array(-445,802,445,979),862=>array(-445,855,445,927),863=>array(-445,-156,445,-84),864=>array(-354,756,354,894),865=>array(-445,752,445,929),866=>array(-442,-230,447,-30),880=>array(98,0,555,729),881=>array(94,0,477,547),882=>array(98,0,764,729),883=>array(98,0,549,729),884=>array(78,557,203,800),885=>array(78,-208,203,35),886=>array(98,0,650,729),887=>array(91,0,559,547),890=>array(214,-208,321,-45),891=>array(62,-14,495,560),892=>array(55,-14,488,560),893=>array(62,-14,495,560),894=>array(77,-116,220,517),900=>array(181,616,415,800),901=>array(105,659,415,978),902=>array(8,0,676,800),903=>array(107,285,210,409),904=>array(-12,0,682,800),905=>array(-6,0,765,800),906=>array(-9,0,311,800),908=>array(-7,-14,750,800),910=>array(-15,0,821,800),911=>array(-18,0,752,800),912=>array(2,0,313,978),913=>array(8,0,676,729),914=>array(98,0,615,729),915=>array(98,0,552,729),916=>array(8,0,676,729),917=>array(98,0,568,729),918=>array(45,0,640,729),919=>array(98,0,654,729),920=>array(56,-14,731,742),921=>array(98,0,197,729),922=>array(98,0,677,729),923=>array(8,0,676,729),924=>array(98,0,765,729),925=>array(98,0,650,729),926=>array(98,0,548,729),927=>array(56,-14,731,742),928=>array(98,0,654,729),929=>array(98,0,569,729),931=>array(98,0,568,729),932=>array(-3,0,614,729),933=>array(-2,0,613,729),934=>array(56,0,731,729),935=>array(30,0,654,729),936=>array(56,0,732,729),937=>array(38,0,726,738),938=>array(3,0,293,913),939=>array(-2,0,613,913),940=>array(55,-12,611,800),941=>array(65,-14,473,800),942=>array(91,-208,549,800),943=>array(81,0,324,800),944=>array(73,-14,521,978),945=>array(55,-12,611,559),946=>array(94,-208,566,766),947=>array(16,-208,562,547),948=>array(55,-14,557,742),949=>array(65,-14,473,561),950=>array(52,-210,496,760),951=>array(91,-208,549,560),952=>array(55,-11,557,768),953=>array(81,0,304,547),954=>array(93,0,565,547),955=>array(30,0,562,760),956=>array(85,-208,612,547),957=>array(36,0,512,547),958=>array(52,-210,500,760),959=>array(55,-14,557,560),960=>array(36,-19,574,547),961=>array(91,-208,580,560),962=>array(55,-210,488,560),963=>array(55,-14,604,547),964=>array(49,0,553,547),965=>array(73,-14,521,547),966=>array(55,-208,602,551),967=>array(29,-208,549,547),968=>array(55,-208,602,547),969=>array(66,-14,769,547),970=>array(2,0,311,758),971=>array(73,-14,521,758),972=>array(55,-14,557,800),973=>array(73,-14,521,800),974=>array(66,-14,769,800),975=>array(98,-208,677,729),976=>array(82,-11,538,768),977=>array(55,-11,557,768),978=>array(42,0,665,734),979=>array(-15,0,829,800),980=>array(42,0,665,913),981=>array(55,-208,602,760),982=>array(32,-14,803,547),983=>array(55,-206,600,550),984=>array(56,-207,731,742),985=>array(55,-208,557,560),986=>array(68,-210,583,729),987=>array(55,-210,540,547),988=>array(98,0,517,729),989=>array(-94,-208,409,760),990=>array(87,-2,604,729),991=>array(93,0,566,759),992=>array(56,-208,797,742),993=>array(58,-180,573,559),994=>array(56,-213,877,729),995=>array(66,-208,769,547),996=>array(56,-208,660,742),997=>array(55,-208,568,560),998=>array(98,-213,735,729),999=>array(22,-14,571,575),1000=>array(39,-208,630,745),1001=>array(49,-208,552,560),1002=>array(56,0,714,742),1003=>array(26,0,599,560),1004=>array(56,-14,643,758),1005=>array(55,-14,544,758),1006=>array(21,-208,589,729),1007=>array(27,-208,510,726),1008=>array(55,-7,600,550),1009=>array(91,-208,580,560),1010=>array(55,-14,488,560),1011=>array(-18,-208,184,760),1012=>array(56,-14,731,742),1013=>array(55,-14,480,560),1014=>array(96,-14,521,560),1015=>array(98,0,569,729),1016=>array(91,-208,580,760),1017=>array(56,-14,644,742),1018=>array(98,0,765,729),1019=>array(62,-208,587,547),1020=>array(42,-208,580,560),1021=>array(56,-14,644,742),1022=>array(56,-14,644,742),1023=>array(56,-14,644,742),1024=>array(98,0,568,927),1025=>array(98,0,568,913),1026=>array(-3,-200,709,729),1027=>array(98,0,552,927),1028=>array(56,-14,644,742),1029=>array(66,-14,579,742),1030=>array(98,0,197,729),1031=>array(3,0,293,913),1032=>array(-52,-200,197,729),1033=>array(41,0,1023,729),1034=>array(98,0,975,729),1035=>array(-3,0,709,729),1036=>array(98,0,690,927),1037=>array(98,0,650,927),1038=>array(17,0,592,928),1039=>array(98,-157,654,729),1040=>array(8,0,676,729),1041=>array(98,0,615,729),1042=>array(98,0,615,729),1043=>array(98,0,552,729),1044=>array(49,-157,732,729),1045=>array(98,0,568,729),1046=>array(20,0,1058,729),1047=>array(66,-14,575,742),1048=>array(98,0,650,729),1049=>array(98,0,650,928),1050=>array(98,0,690,729),1051=>array(41,0,653,729),1052=>array(98,0,765,729),1053=>array(98,0,654,729),1054=>array(56,-14,731,742),1055=>array(98,0,654,729),1056=>array(98,0,569,729),1057=>array(56,-14,644,742),1058=>array(-3,0,614,729),1059=>array(17,0,592,729),1060=>array(59,0,802,729),1061=>array(30,0,654,729),1062=>array(98,-157,737,729),1063=>array(85,0,587,729),1064=>array(98,0,971,729),1065=>array(98,-157,1054,729),1066=>array(29,0,762,729),1067=>array(98,0,784,729),1068=>array(98,0,615,729),1069=>array(54,-14,642,742),1070=>array(103,-14,1023,742),1071=>array(66,0,597,729),1072=>array(60,-14,522,560),1073=>array(55,-14,562,777),1074=>array(91,0,530,547),1075=>array(91,0,477,547),1076=>array(52,-138,639,547),1077=>array(55,-14,562,560),1078=>array(34,0,867,547),1079=>array(65,-14,473,561),1080=>array(91,0,559,547),1081=>array(91,0,559,760),1082=>array(91,0,571,547),1083=>array(37,0,556,547),1084=>array(91,0,664,547),1085=>array(91,0,563,547),1086=>array(55,-14,557,560),1087=>array(91,0,563,547),1088=>array(91,-208,580,560),1089=>array(55,-14,488,560),1090=>array(29,0,553,547),1091=>array(30,-208,562,547),1092=>array(55,-208,800,729),1093=>array(29,0,559,547),1094=>array(91,-138,635,547),1095=>array(73,0,500,547),1096=>array(91,0,824,547),1097=>array(91,-138,896,547),1098=>array(30,0,647,547),1099=>array(91,0,701,560),1100=>array(91,0,530,547),1101=>array(55,-14,488,560),1102=>array(94,-14,787,560),1103=>array(57,0,517,547),1104=>array(55,-14,562,802),1105=>array(55,-14,562,758),1106=>array(23,-208,570,760),1107=>array(91,0,480,803),1108=>array(55,-14,488,560),1109=>array(54,-14,472,560),1110=>array(94,0,184,760),1111=>array(-6,0,284,758),1112=>array(-18,-208,184,760),1113=>array(37,0,843,547),1114=>array(91,0,839,547),1115=>array(23,0,567,760),1116=>array(91,0,571,803),1117=>array(91,0,559,802),1118=>array(30,-208,562,760),1119=>array(91,-138,563,547),1120=>array(56,-14,877,729),1121=>array(66,-14,769,547),1122=>array(15,0,711,729),1123=>array(15,0,613,760),1124=>array(103,-14,888,742),1125=>array(94,-14,688,560),1126=>array(8,0,871,729),1127=>array(25,0,758,547),1128=>array(98,0,1135,729),1129=>array(94,0,977,547),1130=>array(56,0,731,729),1131=>array(52,0,560,547),1132=>array(98,0,971,729),1133=>array(94,0,772,547),1134=>array(56,-208,556,935),1135=>array(44,-193,473,753),1136=>array(8,0,844,729),1137=>array(24,-208,852,765),1138=>array(56,-14,731,742),1139=>array(55,-14,557,560),1140=>array(8,0,769,742),1141=>array(24,0,640,560),1142=>array(8,0,769,930),1143=>array(24,0,640,800),1144=>array(56,-208,962,742),1145=>array(55,-208,875,560),1146=>array(56,-14,897,742),1147=>array(55,-14,704,560),1148=>array(58,-14,1122,932),1149=>array(74,-14,954,758),1150=>array(56,-14,877,900),1151=>array(66,-14,769,734),1152=>array(56,-208,644,742),1153=>array(55,-208,488,560),1154=>array(29,-44,474,457),1155=>array(-519,608,-93,810),1156=>array(-372,645,4,788),1157=>array(-288,595,-169,797),1158=>array(-288,595,-169,797),1159=>array(-776,606,4,788),1160=>array(-1021,-180,409,922),1161=>array(-957,-280,345,1022),1162=>array(98,-208,748,928),1163=>array(94,-208,652,760),1164=>array(16,0,615,729),1165=>array(19,0,534,702),1166=>array(98,0,610,729),1167=>array(91,-208,580,560),1168=>array(98,0,552,878),1169=>array(91,0,477,700),1170=>array(35,0,617,729),1171=>array(27,0,542,547),1172=>array(98,-200,600,729),1173=>array(91,-208,505,547),1174=>array(20,-157,1071,729),1175=>array(34,-138,876,547),1176=>array(66,-193,575,742),1177=>array(65,-193,473,561),1178=>array(98,-157,713,729),1179=>array(91,-138,587,547),1180=>array(98,0,690,729),1181=>array(91,0,571,547),1182=>array(16,0,690,729),1183=>array(30,0,571,760),1184=>array(24,0,837,729),1185=>array(21,0,688,547),1186=>array(98,-157,752,729),1187=>array(94,-138,656,547),1188=>array(98,0,1009,729),1189=>array(94,0,862,547),1190=>array(98,-200,1057,729),1191=>array(94,-208,891,547),1192=>array(56,-14,871,743),1193=>array(55,-14,684,560),1194=>array(56,-193,644,742),1195=>array(55,-193,488,560),1196=>array(-3,-157,614,729),1197=>array(29,-138,553,547),1198=>array(-2,0,613,729),1199=>array(30,-208,562,547),1200=>array(-2,0,613,729),1201=>array(30,-208,562,547),1202=>array(30,-157,654,729),1203=>array(29,-138,559,547),1204=>array(-3,-157,910,729),1205=>array(2,-138,782,547),1206=>array(85,-157,686,729),1207=>array(73,-138,590,547),1208=>array(85,0,587,729),1209=>array(73,0,500,547),1210=>array(85,0,587,729),1211=>array(91,0,549,760),1212=>array(10,-14,885,742),1213=>array(7,-14,675,560),1214=>array(10,-184,885,742),1215=>array(7,-161,675,560),1216=>array(98,0,197,729),1217=>array(20,0,1058,928),1218=>array(34,0,867,785),1219=>array(98,-200,651,729),1220=>array(93,-208,566,547),1221=>array(26,-208,751,729),1222=>array(22,-208,646,547),1223=>array(98,-200,654,729),1224=>array(94,-208,566,547),1225=>array(98,-208,752,729),1226=>array(94,-208,656,547),1227=>array(85,-157,587,729),1228=>array(73,-138,500,547),1229=>array(98,-208,863,729),1230=>array(94,-208,750,547),1231=>array(94,0,184,760),1232=>array(8,0,676,946),1233=>array(60,-14,522,765),1234=>array(8,0,676,913),1235=>array(60,-14,522,758),1236=>array(4,0,910,729),1237=>array(60,-14,929,560),1238=>array(98,0,568,928),1239=>array(55,-14,562,785),1240=>array(57,-14,731,742),1241=>array(55,-14,562,560),1242=>array(57,-14,731,913),1243=>array(55,-14,562,758),1244=>array(20,0,1058,913),1245=>array(34,0,867,758),1246=>array(66,-14,575,913),1247=>array(65,-14,473,758),1248=>array(78,-31,621,729),1249=>array(43,-213,523,547),1250=>array(98,0,650,899),1251=>array(91,0,559,745),1252=>array(98,0,650,913),1253=>array(91,0,559,758),1254=>array(56,-14,731,913),1255=>array(55,-14,557,758),1256=>array(56,-14,731,742),1257=>array(55,-14,557,560),1258=>array(56,-14,731,913),1259=>array(55,-14,557,758),1260=>array(54,-14,642,913),1261=>array(55,-14,488,758),1262=>array(17,0,592,899),1263=>array(30,-208,562,745),1264=>array(17,0,592,913),1265=>array(30,-208,562,758),1266=>array(17,0,592,927),1267=>array(30,-208,562,800),1268=>array(85,0,587,913),1269=>array(73,0,500,758),1270=>array(98,-157,552,729),1271=>array(91,-138,477,547),1272=>array(98,0,784,913),1273=>array(91,0,701,758),1274=>array(35,-208,617,729),1275=>array(27,-208,542,547),1276=>array(30,-200,646,729),1277=>array(29,-208,549,547),1278=>array(30,0,654,729),1279=>array(29,0,559,547),1280=>array(71,0,588,729),1281=>array(55,0,495,547),1282=>array(71,-14,908,729),1283=>array(55,-14,806,547),1284=>array(98,-14,876,742),1285=>array(83,-14,784,561),1286=>array(98,-208,654,742),1287=>array(83,-208,564,561),1288=>array(26,-14,974,729),1289=>array(22,-14,866,547),1290=>array(98,-14,1022,729),1291=>array(94,-14,876,547),1292=>array(56,-14,692,742),1293=>array(55,-14,534,560),1294=>array(-3,-14,675,729),1295=>array(2,-14,620,547),1296=>array(80,-14,560,742),1297=>array(65,-14,473,561),1298=>array(41,-200,653,729),1299=>array(37,-208,556,547),1300=>array(41,0,1139,729),1301=>array(37,0,962,547),1302=>array(98,0,863,729),1303=>array(91,-208,832,560),1304=>array(66,0,967,729),1305=>array(57,-14,933,560),1306=>array(56,-129,731,742),1307=>array(55,-208,544,560),1308=>array(33,0,956,729),1309=>array(42,0,776,547),1310=>array(98,0,690,729),1311=>array(91,0,571,547),1312=>array(41,-200,1056,729),1313=>array(37,-208,881,547),1314=>array(98,-200,1057,729),1315=>array(91,-208,888,547),1316=>array(98,-157,752,729),1317=>array(91,-138,653,547),1329=>array(87,-29,680,729),1330=>array(87,0,650,743),1331=>array(45,0,729,743),1332=>array(44,0,724,743),1333=>array(87,-14,650,729),1334=>array(87,0,692,744),1335=>array(92,0,616,729),1336=>array(87,0,650,743),1337=>array(87,-14,835,743),1338=>array(45,-14,729,729),1339=>array(92,0,650,729),1340=>array(92,0,533,729),1341=>array(92,-14,849,729),1342=>array(129,-13,763,742),1343=>array(87,0,645,729),1344=>array(34,-26,638,729),1345=>array(82,-23,688,744),1346=>array(49,0,729,743),1347=>array(51,0,715,735),1348=>array(87,-14,767,729),1349=>array(71,-14,668,743),1350=>array(0,-14,680,729),1351=>array(78,-15,684,729),1352=>array(87,0,645,743),1353=>array(59,-28,664,744),1354=>array(44,0,713,743),1355=>array(82,0,686,744),1356=>array(87,0,767,743),1357=>array(87,-14,645,729),1358=>array(49,0,729,729),1359=>array(73,-14,632,741),1360=>array(87,0,645,743),1361=>array(78,-14,675,743),1362=>array(92,0,538,729),1363=>array(59,0,752,729),1364=>array(24,0,679,743),1365=>array(56,-14,731,742),1366=>array(54,-13,746,729),1369=>array(57,492,191,760),1370=>array(87,499,230,729),1371=>array(0,620,234,803),1372=>array(2,618,356,893),1373=>array(-0,617,233,800),1374=>array(4,613,401,866),1375=>array(44,618,462,760),1377=>array(85,-14,883,547),1378=>array(91,-208,549,560),1379=>array(55,-208,648,560),1380=>array(91,-208,653,560),1381=>array(85,-14,548,760),1382=>array(55,-208,648,560),1383=>array(91,0,490,760),1384=>array(91,-208,549,560),1385=>array(91,-208,738,560),1386=>array(55,-14,648,760),1387=>array(91,-208,549,760),1388=>array(91,-208,303,547),1389=>array(91,-208,889,760),1390=>array(55,-14,557,760),1391=>array(85,-208,543,760),1392=>array(91,0,549,760),1393=>array(52,-15,523,760),1394=>array(91,-208,653,560),1395=>array(68,-14,544,768),1396=>array(85,-14,647,760),1397=>array(-21,-208,181,547),1398=>array(-19,-14,543,760),1399=>array(0,-208,435,560),1400=>array(91,0,549,560),1401=>array(5,-208,370,547),1402=>array(85,-208,883,547),1403=>array(54,-208,494,561),1404=>array(91,0,609,560),1405=>array(85,-14,543,560),1406=>array(85,-208,647,760),1407=>array(85,-14,889,560),1408=>array(91,-208,549,560),1409=>array(54,-208,543,560),1410=>array(91,0,449,547),1411=>array(85,-208,889,760),1412=>array(20,-208,580,560),1413=>array(54,-14,556,560),1414=>array(34,-208,766,760),1415=>array(85,-14,812,760),1417=>array(117,0,220,415),1418=>array(49,212,312,314),1456=>array(283,-217,356,-22),1457=>array(83,-217,438,-22),1458=>array(125,-217,454,-22),1459=>array(125,-217,454,-22),1460=>array(283,-159,356,-85),1461=>array(222,-159,417,-85),1462=>array(222,-217,417,-22),1463=>array(173,-159,466,-85),1464=>array(173,-193,466,-46),1465=>array(0,625,73,698),1466=>array(0,625,73,698),1467=>array(148,-237,465,-17),1468=>array(288,237,361,310),1469=>array(283,-217,356,-22),1470=>array(49,472,312,552),1471=>array(173,625,466,698),1472=>array(102,-98,193,645),1473=>array(637,625,710,698),1474=>array(96,625,169,698),1475=>array(102,0,193,547),1478=>array(50,0,357,547),1479=>array(173,-217,466,-22),1488=>array(91,0,578,547),1489=>array(43,0,535,547),1490=>array(43,-5,383,547),1491=>array(43,0,511,547),1492=>array(91,0,563,547),1493=>array(91,0,182,547),1494=>array(43,0,303,547),1495=>array(91,0,563,547),1496=>array(90,-14,593,552),1497=>array(66,204,157,547),1498=>array(43,-208,446,547),1499=>array(43,0,474,547),1500=>array(43,0,492,729),1501=>array(91,0,573,547),1502=>array(43,0,588,555),1503=>array(91,-208,182,547),1504=>array(43,0,309,547),1505=>array(90,-14,593,547),1506=>array(43,-93,535,547),1507=>array(91,-208,549,547),1508=>array(91,0,569,547),1509=>array(43,-208,497,548),1510=>array(43,0,502,547),1511=>array(91,-208,633,546),1512=>array(43,0,474,547),1513=>array(43,0,666,547),1514=>array(10,-4,566,547),1520=>array(91,0,380,547),1521=>array(66,0,332,547),1522=>array(66,204,312,547),1523=>array(91,361,325,547),1524=>array(91,361,554,547),1542=>array(0,-20,607,892),1543=>array(0,-20,607,895),1545=>array(65,0,685,635),1546=>array(65,0,904,635),1548=>array(107,0,250,240),1557=>array(123,624,377,868),1563=>array(107,0,250,633),1567=>array(72,0,461,742),1569=>array(80,42,390,483),1570=>array(-37,0,315,939),1571=>array(53,0,220,999),1572=>array(-42,-244,406,588),1573=>array(53,-244,220,760),1574=>array(63,-131,719,588),1575=>array(94,0,184,760),1576=>array(63,-171,865,327),1577=>array(68,-28,453,513),1578=>array(63,-10,865,391),1579=>array(63,-10,865,513),1580=>array(77,-244,645,425),1581=>array(77,-244,645,425),1582=>array(77,-244,645,586),1583=>array(61,-19,388,415),1584=>array(61,-19,388,586),1585=>array(-42,-244,423,269),1586=>array(-42,-244,423,464),1587=>array(63,-244,1138,366),1588=>array(63,-244,1138,586),1589=>array(63,-244,1134,362),1590=>array(63,-244,1134,464),1591=>array(70,0,857,760),1592=>array(70,0,857,760),1593=>array(57,-244,587,521),1594=>array(57,-244,587,659),1600=>array(-10,0,303,90),1601=>array(63,-45,952,635),1602=>array(52,-215,701,635),1603=>array(70,-27,722,760),1604=>array(70,-152,637,760),1605=>array(68,-240,546,369),1606=>array(72,-162,660,464),1607=>array(68,-28,453,358),1608=>array(-42,-244,406,315),1609=>array(63,-131,719,411),1610=>array(63,-244,719,411),1611=>array(107,591,393,825),1612=>array(107,591,393,874),1613=>array(107,-239,393,-5),1614=>array(107,591,393,708),1615=>array(107,590,393,874),1616=>array(107,-137,393,-20),1617=>array(98,599,402,869),1618=>array(115,610,383,878),1619=>array(74,590,426,719),1620=>array(164,593,331,808),1621=>array(164,-244,331,-29),1623=>array(107,615,393,898),1626=>array(119,616,381,775),1632=>array(215,220,322,342),1633=>array(136,0,342,635),1634=>array(40,0,492,635),1635=>array(37,0,509,635),1636=>array(85,-10,457,641),1637=>array(66,-10,471,643),1638=>array(42,0,493,635),1639=>array(29,0,508,635),1640=>array(29,0,508,635),1641=>array(49,0,493,640),1642=>array(65,0,472,635),1643=>array(0,-110,300,318),1644=>array(87,499,230,729),1645=>array(42,101,502,537),1646=>array(63,-10,865,327),1647=>array(52,-215,701,481),1648=>array(223,602,277,887),1652=>array(60,649,227,864),1657=>array(63,-10,865,575),1658=>array(63,-10,865,513),1659=>array(63,-244,865,327),1660=>array(63,-180,865,391),1661=>array(63,-10,865,464),1662=>array(63,-244,865,327),1663=>array(63,-10,865,513),1664=>array(63,-244,865,327),1665=>array(77,-244,645,710),1666=>array(77,-244,645,708),1667=>array(77,-244,645,425),1668=>array(77,-244,645,425),1669=>array(77,-244,645,708),1670=>array(77,-244,645,425),1671=>array(77,-244,645,425),1672=>array(61,-19,388,746),1673=>array(61,-180,388,415),1674=>array(61,-171,388,415),1675=>array(61,-171,388,746),1676=>array(61,-19,388,586),1677=>array(61,-146,388,415),1678=>array(61,-19,388,708),1679=>array(61,-19,388,684),1680=>array(61,-19,388,708),1681=>array(-42,-244,469,648),1682=>array(-42,-244,473,556),1683=>array(-42,-244,507,269),1684=>array(-42,-244,474,269),1685=>array(-42,-244,634,269),1686=>array(-42,-244,474,269),1687=>array(-42,-244,439,464),1688=>array(-42,-244,439,586),1689=>array(-42,-244,439,586),1690=>array(63,-244,1138,464),1691=>array(63,-244,1138,366),1692=>array(63,-244,1138,586),1693=>array(63,-244,1134,362),1694=>array(63,-244,1134,586),1695=>array(70,0,857,760),1696=>array(57,-244,587,781),1697=>array(63,-45,952,481),1698=>array(63,-171,952,481),1699=>array(63,-171,952,635),1700=>array(63,-45,952,757),1701=>array(63,-293,952,481),1702=>array(63,-45,952,757),1703=>array(52,-215,701,635),1704=>array(52,-215,701,757),1705=>array(63,-43,895,760),1706=>array(63,-43,1000,760),1707=>array(63,-43,895,760),1708=>array(70,-27,722,760),1709=>array(70,-27,722,854),1710=>array(70,-293,722,760),1711=>array(63,-43,895,896),1712=>array(63,-43,895,896),1713=>array(63,-43,895,903),1714=>array(63,-171,895,896),1715=>array(63,-293,895,896),1716=>array(63,-43,895,1025),1717=>array(70,-152,723,971),1718=>array(70,-152,637,952),1719=>array(70,-152,684,1025),1720=>array(70,-391,637,760),1721=>array(72,-317,660,464),1722=>array(72,-162,660,366),1723=>array(72,-162,660,636),1724=>array(72,-330,660,464),1725=>array(72,-162,660,586),1726=>array(70,-33,638,487),1727=>array(77,-244,645,586),1734=>array(-42,-244,406,556),1740=>array(63,-131,719,411),1742=>array(63,-131,719,556),1749=>array(68,-28,453,358),1776=>array(215,220,322,342),1777=>array(136,0,342,635),1778=>array(40,0,492,635),1779=>array(37,0,509,635),1780=>array(40,0,471,643),1781=>array(52,-5,485,643),1782=>array(102,0,445,640),1783=>array(29,0,508,635),1784=>array(29,0,508,635),1785=>array(49,0,493,640),1984=>array(66,-14,570,742),1985=>array(110,0,544,729),1986=>array(110,0,530,729),1987=>array(110,0,530,729),1988=>array(110,0,530,729),1989=>array(110,0,530,729),1990=>array(110,0,530,729),1991=>array(104,0,532,729),1992=>array(104,0,532,729),1993=>array(77,0,560,741),1994=>array(94,0,184,729),1995=>array(55,-14,516,447),1996=>array(30,0,394,731),1997=>array(30,0,562,430),1998=>array(91,0,563,430),1999=>array(91,0,563,430),2000=>array(55,0,539,735),2001=>array(91,0,563,581),2002=>array(55,0,738,741),2003=>array(94,0,408,729),2004=>array(30,0,344,729),2005=>array(91,0,504,729),2006=>array(94,0,518,729),2007=>array(30,0,256,729),2008=>array(94,0,865,513),2009=>array(30,0,443,729),2010=>array(30,0,754,729),2011=>array(91,0,563,430),2012=>array(30,0,595,729),2013=>array(94,0,679,729),2014=>array(94,0,436,729),2015=>array(55,0,630,729),2016=>array(30,0,443,729),2017=>array(30,0,595,729),2018=>array(55,0,539,729),2019=>array(94,0,436,729),2020=>array(94,0,436,612),2021=>array(94,0,428,729),2022=>array(55,0,539,729),2023=>array(55,0,539,729),2027=>array(106,673,398,745),2028=>array(32,609,468,800),2029=>array(205,658,305,758),2030=>array(93,616,405,800),2031=>array(44,616,456,800),2032=>array(32,609,468,800),2033=>array(44,616,456,800),2034=>array(200,-184,300,-84),2035=>array(104,659,394,758),2036=>array(98,557,216,760),2037=>array(98,557,216,760),2040=>array(49,0,511,498),2041=>array(49,0,511,483),2042=>array(-10,0,371,72),3647=>array(86,-138,571,769),3713=>array(63,-10,607,560),3714=>array(68,-17,691,568),3716=>array(67,-10,619,568),3719=>array(53,-238,415,568),3720=>array(62,-0,574,575),3722=>array(68,-234,690,568),3725=>array(56,-8,619,573),3732=>array(91,-14,592,560),3733=>array(63,-15,564,579),3734=>array(0,-240,587,560),3735=>array(42,-8,599,571),3737=>array(46,-14,593,568),3738=>array(36,-8,556,561),3739=>array(36,-8,556,760),3740=>array(43,-8,725,614),3741=>array(91,-14,676,760),3742=>array(51,-8,636,561),3743=>array(51,-8,636,760),3745=>array(31,-14,636,547),3746=>array(56,-8,619,760),3747=>array(68,-8,634,568),3749=>array(39,-8,583,568),3751=>array(56,-13,558,560),3754=>array(39,-8,688,679),3755=>array(62,-12,762,575),3757=>array(56,-14,558,560),3758=>array(68,-8,684,605),3759=>array(99,-166,742,579),3760=>array(54,-13,589,563),3761=>array(-578,639,-43,880),3762=>array(60,0,473,560),3763=>array(-425,0,473,806),3764=>array(-594,615,-73,926),3765=>array(-594,615,0,926),3766=>array(-594,615,-73,926),3767=>array(-594,615,0,926),3768=>array(-376,-350,-161,-38),3769=>array(-418,-306,-152,-40),3771=>array(-578,639,-43,880),3772=>array(-611,-278,6,-39),3773=>array(63,-240,619,715),3776=>array(60,-14,324,560),3777=>array(60,-14,598,560),3778=>array(-22,-5,398,896),3779=>array(45,-14,490,892),3780=>array(92,-11,445,886),3782=>array(72,-232,574,557),3784=>array(-366,618,-278,792),3785=>array(-563,609,-45,891),3786=>array(-595,598,22,869),3787=>array(-462,609,-182,890),3788=>array(-611,636,6,875),3789=>array(-425,620,-220,806),3792=>array(66,-14,570,547),3793=>array(48,-75,582,576),3794=>array(48,-66,545,711),3795=>array(11,-9,692,830),3796=>array(48,-83,601,711),3797=>array(48,-83,601,711),3798=>array(43,-8,744,812),3799=>array(63,-240,607,560),3800=>array(73,-210,680,557),3801=>array(51,-4,621,571),3804=>array(62,-12,947,575),3805=>array(62,-12,973,575),4256=>array(59,-15,815,828),4257=>array(54,-0,704,828),4258=>array(54,-148,649,837),4259=>array(54,-15,781,828),4260=>array(49,0,552,837),4261=>array(39,0,714,837),4262=>array(29,-15,695,828),4263=>array(59,-15,885,837),4264=>array(29,0,390,874),4265=>array(59,0,561,828),4266=>array(29,-15,784,828),4267=>array(59,-15,824,828),4268=>array(63,0,566,828),4269=>array(49,-167,806,837),4270=>array(24,-15,717,837),4271=>array(39,0,566,828),4272=>array(54,-15,853,828),4273=>array(63,-15,567,828),4274=>array(63,-0,566,837),4275=>array(49,-182,806,837),4276=>array(49,0,817,834),4277=>array(44,0,680,828),4278=>array(64,-15,566,837),4279=>array(54,0,557,828),4280=>array(59,-15,562,828),4281=>array(63,0,566,828),4282=>array(59,-15,764,837),4283=>array(59,-15,810,828),4284=>array(63,-0,566,828),4285=>array(49,-15,574,837),4286=>array(63,-0,566,828),4287=>array(29,0,695,828),4288=>array(29,-15,785,828),4289=>array(63,0,566,828),4290=>array(54,-15,635,837),4291=>array(29,0,532,828),4292=>array(54,0,540,828),4293=>array(39,-15,699,837),4304=>array(49,-15,459,592),4305=>array(49,-14,469,837),4306=>array(44,-235,537,551),4307=>array(49,-230,759,547),4308=>array(49,-236,449,547),4309=>array(49,-236,459,547),4310=>array(20,-14,452,838),4311=>array(49,-14,752,547),4312=>array(49,0,469,547),4313=>array(44,-236,456,542),4314=>array(49,-230,1016,552),4315=>array(49,-15,459,837),4316=>array(63,-15,474,833),4317=>array(49,-0,737,547),4318=>array(49,-15,459,833),4319=>array(49,-236,458,551),4320=>array(49,0,747,833),4321=>array(63,-15,474,827),4322=>array(44,-236,610,680),4323=>array(5,-236,464,571),4324=>array(49,-236,766,547),4325=>array(49,-236,449,828),4326=>array(49,-230,737,546),4327=>array(49,-236,459,538),4328=>array(29,-15,454,837),4329=>array(63,0,474,837),4330=>array(44,-236,527,532),4331=>array(49,-14,458,828),4332=>array(64,-15,488,837),4333=>array(49,-236,471,827),4334=>array(63,-15,474,827),4335=>array(10,-235,444,572),4336=>array(49,-15,459,837),4337=>array(59,-15,469,837),4338=>array(49,-141,458,547),4339=>array(49,-236,459,546),4340=>array(49,-236,458,837),4341=>array(49,-15,515,837),4342=>array(49,-236,778,547),4343=>array(44,-236,508,547),4344=>array(49,-236,459,538),4345=>array(39,-236,532,551),4346=>array(49,-77,459,547),4347=>array(54,-10,394,484),4348=>array(49,420,270,837),5121=>array(8,1,676,730),5122=>array(8,0,676,1037),5123=>array(8,0,676,729),5124=>array(8,0,676,914),5125=>array(98,0,711,729),5126=>array(98,0,711,914),5127=>array(98,0,711,913),5129=>array(98,0,711,729),5130=>array(58,0,671,729),5131=>array(58,0,671,914),5132=>array(98,1,827,730),5133=>array(8,1,776,730),5134=>array(98,0,827,729),5135=>array(8,0,776,729),5136=>array(98,0,827,914),5137=>array(8,0,776,914),5138=>array(98,0,909,729),5139=>array(98,0,909,729),5140=>array(98,0,909,914),5141=>array(98,0,909,914),5142=>array(98,0,711,914),5143=>array(98,0,869,729),5144=>array(58,0,909,729),5145=>array(98,0,869,914),5146=>array(58,0,909,914),5147=>array(58,0,671,914),5149=>array(98,629,198,729),5150=>array(67,326,488,734),5151=>array(46,356,362,714),5152=>array(46,356,362,714),5153=>array(67,398,334,674),5154=>array(67,391,334,667),5155=>array(67,398,338,667),5156=>array(67,398,334,667),5157=>array(35,327,405,733),5158=>array(67,326,331,734),5159=>array(98,312,198,412),5160=>array(67,503,334,563),5161=>array(67,399,334,667),5162=>array(67,399,334,691),5163=>array(8,1,1028,730),5164=>array(8,0,847,729),5165=>array(98,0,892,729),5166=>array(58,0,1055,729),5167=>array(8,0,676,729),5168=>array(8,0,676,1037),5169=>array(8,0,676,729),5170=>array(8,0,676,914),5171=>array(58,0,671,729),5172=>array(58,0,671,914),5173=>array(58,0,671,913),5175=>array(58,0,671,729),5176=>array(58,0,671,729),5177=>array(58,0,671,914),5178=>array(98,0,827,729),5179=>array(8,0,776,729),5180=>array(98,0,827,729),5181=>array(8,0,776,729),5182=>array(98,0,827,914),5183=>array(8,0,776,914),5184=>array(98,0,869,729),5185=>array(58,0,909,729),5186=>array(98,0,869,914),5187=>array(58,0,909,914),5188=>array(98,0,869,729),5189=>array(58,0,909,729),5190=>array(98,0,869,914),5191=>array(58,0,909,914),5192=>array(58,0,671,913),5193=>array(67,326,453,734),5194=>array(67,326,137,734),5196=>array(87,-14,645,729),5197=>array(87,0,645,1037),5198=>array(87,0,645,743),5199=>array(87,0,645,914),5200=>array(58,0,671,729),5201=>array(58,0,671,914),5202=>array(58,0,671,913),5204=>array(58,0,671,729),5205=>array(59,0,672,729),5206=>array(59,0,672,914),5207=>array(98,-14,834,729),5208=>array(87,-14,831,729),5209=>array(98,0,834,743),5210=>array(87,0,831,743),5211=>array(98,0,834,914),5212=>array(87,0,831,914),5213=>array(98,0,869,729),5214=>array(58,0,842,729),5215=>array(98,0,869,914),5216=>array(58,0,842,914),5217=>array(98,0,889,729),5218=>array(59,0,842,729),5219=>array(98,0,889,914),5220=>array(59,0,842,914),5221=>array(117,0,889,729),5222=>array(67,326,379,734),5223=>array(87,-14,823,734),5224=>array(87,0,823,743),5225=>array(58,0,811,734),5226=>array(59,0,835,734),5227=>array(34,0,530,743),5228=>array(98,0,594,1037),5229=>array(98,0,594,743),5230=>array(98,0,594,914),5231=>array(34,-14,530,729),5232=>array(34,-14,530,914),5233=>array(34,-14,623,913),5234=>array(98,-14,594,729),5235=>array(98,-14,594,914),5236=>array(98,0,762,743),5237=>array(34,0,712,743),5238=>array(98,0,781,743),5239=>array(98,0,758,743),5240=>array(98,0,781,914),5241=>array(98,0,758,914),5242=>array(98,-14,762,729),5243=>array(34,-14,712,729),5244=>array(98,-14,762,914),5245=>array(34,-14,712,914),5246=>array(98,-14,781,729),5247=>array(98,-14,758,729),5248=>array(98,-14,781,914),5249=>array(98,-14,758,914),5250=>array(117,-14,781,729),5251=>array(67,318,379,734),5252=>array(27,318,340,734),5253=>array(34,0,696,743),5254=>array(98,0,720,743),5255=>array(34,-14,696,734),5256=>array(98,-14,720,734),5257=>array(34,0,530,743),5258=>array(98,0,594,1037),5259=>array(98,0,594,743),5260=>array(98,0,594,914),5261=>array(34,-14,530,729),5262=>array(34,-14,530,914),5263=>array(34,-14,623,913),5264=>array(98,-14,594,729),5265=>array(98,-14,594,914),5266=>array(98,0,762,743),5267=>array(34,0,712,743),5268=>array(98,0,781,743),5269=>array(98,0,758,743),5270=>array(98,0,781,914),5271=>array(98,0,758,914),5272=>array(98,-14,762,729),5273=>array(34,-14,712,729),5274=>array(98,-14,762,914),5275=>array(34,-14,712,914),5276=>array(98,-14,781,729),5277=>array(98,-14,758,729),5278=>array(98,-14,781,914),5279=>array(98,-14,758,914),5280=>array(117,-14,781,729),5281=>array(67,318,379,734),5282=>array(67,318,379,734),5283=>array(58,0,512,729),5284=>array(98,0,552,1037),5285=>array(98,0,552,729),5286=>array(98,0,552,914),5287=>array(58,0,512,729),5288=>array(58,0,512,914),5289=>array(58,0,607,913),5290=>array(98,0,552,729),5291=>array(98,0,552,914),5292=>array(98,0,651,729),5293=>array(58,0,710,729),5294=>array(98,0,741,729),5295=>array(98,0,706,729),5296=>array(98,0,741,914),5297=>array(98,0,706,914),5298=>array(98,0,651,729),5299=>array(58,0,710,729),5300=>array(98,0,651,914),5301=>array(58,0,710,914),5302=>array(98,0,741,729),5303=>array(98,0,706,729),5304=>array(98,0,741,914),5305=>array(98,0,706,914),5306=>array(117,0,741,729),5307=>array(67,326,331,734),5308=>array(67,326,453,734),5309=>array(67,326,331,734),5312=>array(58,-14,817,436),5313=>array(34,-14,793,755),5314=>array(34,-14,793,436),5315=>array(5,-14,765,636),5316=>array(58,0,817,450),5317=>array(58,0,817,636),5318=>array(58,0,817,635),5319=>array(34,0,793,450),5320=>array(34,0,793,636),5321=>array(98,-14,1035,436),5322=>array(58,-14,977,436),5323=>array(98,0,1025,450),5324=>array(34,0,793,450),5325=>array(98,0,1025,636),5326=>array(34,0,793,636),5327=>array(34,0,793,635),5328=>array(67,484,545,736),5329=>array(67,318,397,734),5330=>array(67,484,545,736),5331=>array(58,0,817,450),5332=>array(34,0,793,755),5333=>array(34,0,793,450),5334=>array(34,0,793,636),5335=>array(58,0,817,450),5336=>array(58,0,817,636),5337=>array(58,0,817,635),5338=>array(34,0,793,450),5339=>array(34,0,793,636),5340=>array(98,0,1035,450),5341=>array(58,0,977,450),5342=>array(98,0,1025,450),5343=>array(34,0,972,450),5344=>array(98,0,1025,636),5345=>array(34,0,972,636),5346=>array(98,0,1035,450),5347=>array(58,0,977,450),5348=>array(98,0,1035,636),5349=>array(58,0,977,636),5350=>array(98,0,1025,450),5351=>array(34,0,972,450),5352=>array(98,0,1025,636),5353=>array(34,0,972,636),5354=>array(67,484,545,736),5356=>array(58,0,671,729),5357=>array(34,0,505,729),5358=>array(98,0,649,1037),5359=>array(98,0,569,729),5360=>array(98,0,569,914),5361=>array(34,0,505,729),5362=>array(34,0,505,914),5363=>array(34,0,600,913),5364=>array(98,0,569,729),5365=>array(98,0,569,914),5366=>array(98,0,736,729),5367=>array(34,0,696,729),5368=>array(98,0,758,729),5369=>array(98,0,713,729),5370=>array(98,0,758,914),5371=>array(98,0,713,914),5372=>array(98,0,736,729),5373=>array(34,0,696,729),5374=>array(98,0,736,914),5375=>array(34,0,696,914),5376=>array(98,0,758,729),5377=>array(98,0,713,729),5378=>array(98,0,758,914),5379=>array(98,0,713,914),5380=>array(117,0,758,729),5381=>array(67,326,363,734),5382=>array(67,318,365,741),5383=>array(67,326,363,734),5392=>array(34,-14,678,743),5393=>array(34,-14,678,743),5394=>array(34,-14,678,914),5395=>array(34,-14,857,464),5396=>array(34,-14,857,636),5397=>array(34,-14,857,464),5398=>array(34,-14,857,636),5399=>array(98,-14,875,743),5400=>array(34,-14,814,743),5401=>array(98,-14,875,743),5402=>array(34,-14,814,743),5403=>array(98,-14,875,914),5404=>array(34,-14,814,914),5405=>array(98,-14,1106,464),5406=>array(34,-14,1042,464),5407=>array(98,-14,1106,636),5408=>array(34,-14,1042,636),5409=>array(98,-14,1106,464),5410=>array(34,-14,1042,464),5411=>array(98,-14,1106,636),5412=>array(34,-14,1042,636),5413=>array(67,476,585,737),5414=>array(58,0,529,729),5415=>array(98,0,569,1037),5416=>array(98,0,569,729),5417=>array(98,0,569,914),5418=>array(58,0,529,729),5419=>array(58,0,531,914),5420=>array(58,0,626,913),5421=>array(98,0,569,729),5422=>array(98,0,569,914),5423=>array(98,0,746,729),5424=>array(58,0,723,729),5425=>array(98,0,758,729),5426=>array(98,0,760,729),5427=>array(98,0,758,914),5428=>array(98,0,760,914),5429=>array(98,0,746,729),5430=>array(58,0,723,729),5431=>array(98,0,749,914),5432=>array(58,0,723,914),5433=>array(98,0,758,729),5434=>array(98,0,760,729),5435=>array(98,0,758,914),5436=>array(98,0,760,914),5437=>array(117,0,758,729),5438=>array(67,326,363,734),5440=>array(67,399,334,667),5441=>array(67,326,429,734),5442=>array(98,-14,857,436),5443=>array(58,-14,817,436),5444=>array(58,0,817,450),5445=>array(98,0,857,755),5446=>array(98,0,857,450),5447=>array(98,0,857,636),5448=>array(98,0,569,729),5449=>array(98,0,569,914),5450=>array(98,0,569,729),5451=>array(34,0,505,729),5452=>array(34,0,505,914),5453=>array(34,0,505,729),5454=>array(98,0,736,914),5455=>array(34,0,696,914),5456=>array(67,326,363,734),5458=>array(58,0,671,729),5459=>array(73,0,676,744),5460=>array(73,-15,676,1037),5461=>array(73,-15,676,729),5462=>array(73,-15,676,914),5463=>array(38,0,668,662),5464=>array(38,0,668,914),5465=>array(58,0,688,662),5466=>array(58,0,688,914),5467=>array(98,0,886,914),5468=>array(58,0,909,914),5469=>array(67,326,462,695),5470=>array(87,-14,645,743),5471=>array(87,-14,645,743),5472=>array(87,-14,645,743),5473=>array(87,-14,645,743),5474=>array(87,-14,645,914),5475=>array(87,-14,645,914),5476=>array(41,0,671,729),5477=>array(41,0,671,914),5478=>array(59,0,689,729),5479=>array(59,0,689,914),5480=>array(98,0,907,914),5481=>array(59,0,842,914),5482=>array(67,326,467,734),5492=>array(34,0,772,743),5493=>array(58,0,796,743),5494=>array(58,0,796,914),5495=>array(34,-14,772,729),5496=>array(34,-14,772,914),5497=>array(58,-14,796,729),5498=>array(58,-14,796,914),5499=>array(67,318,508,734),5500=>array(98,0,654,729),5501=>array(67,326,429,734),5502=>array(67,0,1013,1037),5503=>array(67,0,1013,743),5504=>array(67,0,1013,914),5505=>array(67,-14,949,734),5506=>array(67,-14,949,914),5507=>array(67,-14,1013,734),5508=>array(67,-14,1013,914),5509=>array(67,318,798,734),5514=>array(34,0,772,743),5515=>array(58,0,796,743),5516=>array(34,-14,772,729),5517=>array(58,-14,796,729),5518=>array(67,0,1225,1037),5519=>array(67,0,1225,743),5520=>array(67,0,1225,914),5521=>array(67,-14,904,736),5522=>array(67,-14,904,914),5523=>array(67,-14,1225,736),5524=>array(67,-14,1225,914),5525=>array(67,332,645,736),5526=>array(67,332,1018,736),5536=>array(34,0,793,692),5537=>array(34,0,793,692),5538=>array(58,-242,817,450),5539=>array(58,-242,817,636),5540=>array(34,-242,793,450),5541=>array(34,-242,793,636),5542=>array(67,338,545,736),5543=>array(58,0,627,729),5544=>array(16,0,585,729),5545=>array(16,0,585,914),5546=>array(58,0,627,729),5547=>array(58,0,627,914),5548=>array(16,0,585,729),5549=>array(16,0,585,914),5550=>array(5,326,363,734),5551=>array(98,-14,594,729),5598=>array(98,0,711,729),5601=>array(56,0,669,729),5702=>array(67,326,413,734),5703=>array(67,240,413,820),5742=>array(57,0,391,306),5743=>array(67,0,949,743),5744=>array(67,0,1211,743),5745=>array(67,0,1598,743),5746=>array(67,0,1598,914),5747=>array(67,-14,1277,736),5748=>array(67,-14,1277,914),5749=>array(67,-14,1598,736),5750=>array(67,-14,1598,914),5760=>array(-10,246,487,328),5761=>array(-10,-125,502,328),5762=>array(-10,-125,722,328),5763=>array(-10,-125,941,328),5764=>array(-10,-125,1160,328),5765=>array(-10,-125,1379,328),5766=>array(-10,246,502,697),5767=>array(-10,246,722,697),5768=>array(-10,246,941,697),5769=>array(-10,246,1160,697),5770=>array(-10,246,1379,697),5771=>array(-10,-125,508,697),5772=>array(-10,-125,728,697),5773=>array(-10,-125,948,697),5774=>array(-10,-125,1168,697),5775=>array(-10,-125,1389,697),5776=>array(-10,41,502,533),5777=>array(-10,41,722,533),5778=>array(-10,41,939,533),5779=>array(-10,41,1159,533),5780=>array(-10,41,1379,533),5781=>array(-10,-125,508,697),5782=>array(-10,-125,762,697),5783=>array(-10,-83,798,328),5784=>array(-10,-240,1214,328),5785=>array(-10,246,1160,902),5786=>array(-10,82,693,328),5787=>array(55,28,517,544),5788=>array(-10,28,452,544),7424=>array(30,0,562,547),7425=>array(5,0,669,547),7426=>array(60,-14,929,560),7427=>array(30,0,530,547),7428=>array(55,-14,488,560),7429=>array(91,0,550,547),7430=>array(18,0,550,547),7431=>array(91,0,443,547),7432=>array(63,-14,471,561),7433=>array(94,-213,184,547),7434=>array(0,-14,310,547),7435=>array(91,0,576,547),7436=>array(1,0,498,560),7437=>array(91,0,664,547),7438=>array(91,0,559,547),7439=>array(55,-14,557,560),7440=>array(62,-14,495,560),7441=>array(55,22,629,524),7442=>array(55,57,629,489),7443=>array(25,2,663,543),7444=>array(55,-14,970,560),7446=>array(55,273,557,560),7447=>array(55,-14,557,273),7448=>array(74,0,475,547),7449=>array(24,0,507,547),7450=>array(24,0,507,547),7451=>array(29,0,553,547),7452=>array(91,-16,510,547),7453=>array(85,37,646,495),7454=>array(85,38,857,496),7455=>array(23,-238,583,560),7456=>array(30,0,562,547),7457=>array(42,0,776,547),7458=>array(43,0,482,547),7459=>array(59,-14,466,547),7462=>array(87,0,498,560),7463=>array(30,0,562,547),7464=>array(74,0,490,547),7465=>array(74,0,475,547),7466=>array(44,0,546,547),7467=>array(37,0,556,547),7468=>array(5,326,426,734),7469=>array(2,326,573,734),7470=>array(62,326,388,734),7472=>array(62,326,448,734),7473=>array(62,326,358,734),7474=>array(41,326,336,734),7475=>array(35,318,437,742),7476=>array(62,326,412,734),7477=>array(62,326,124,734),7478=>array(-33,214,124,734),7479=>array(62,326,426,734),7480=>array(62,326,348,734),7481=>array(62,326,482,734),7482=>array(62,326,410,734),7483=>array(62,326,410,734),7484=>array(35,318,460,742),7485=>array(35,318,405,742),7486=>array(62,326,358,734),7487=>array(62,326,419,734),7488=>array(-2,326,387,734),7489=>array(55,318,406,734),7490=>array(21,326,603,734),7491=>array(38,318,329,640),7492=>array(38,318,329,640),7493=>array(35,318,343,640),7494=>array(38,318,585,640),7495=>array(57,318,365,751),7496=>array(35,318,343,751),7497=>array(35,318,354,640),7498=>array(35,318,354,640),7499=>array(41,318,298,640),7500=>array(40,318,297,640),7501=>array(35,209,343,640),7502=>array(60,207,116,632),7503=>array(57,326,363,751),7504=>array(57,326,560,640),7505=>array(57,209,346,640),7506=>array(35,318,351,640),7507=>array(35,318,307,640),7508=>array(35,479,351,640),7509=>array(35,318,351,479),7510=>array(57,209,365,640),7511=>array(17,326,232,719),7512=>array(54,318,342,632),7513=>array(54,347,407,604),7514=>array(57,319,560,633),7515=>array(19,326,354,632),7517=>array(59,209,357,755),7518=>array(10,209,354,632),7519=>array(35,318,351,742),7520=>array(35,209,379,635),7521=>array(18,209,346,633),7522=>array(60,0,116,425),7523=>array(57,0,259,313),7524=>array(54,-8,342,306),7525=>array(19,0,354,306),7526=>array(59,-117,357,429),7527=>array(10,-117,354,306),7528=>array(59,-117,367,313),7529=>array(35,-117,379,309),7530=>array(18,-117,346,307),7543=>array(91,-208,580,560),7544=>array(62,326,412,734),7547=>array(57,0,314,547),7549=>array(24,-208,643,560),7557=>array(71,-208,273,760),7579=>array(35,318,343,640),7580=>array(35,318,307,640),7581=>array(35,287,307,640),7582=>array(35,318,351,751),7583=>array(41,318,298,640),7584=>array(15,326,234,751),7585=>array(-11,209,170,632),7586=>array(35,209,343,632),7587=>array(54,209,342,632),7588=>array(36,326,198,751),7589=>array(60,326,187,632),7590=>array(36,326,198,632),7591=>array(36,326,198,632),7592=>array(-83,209,172,751),7593=>array(60,209,187,751),7594=>array(44,209,172,751),7595=>array(55,326,314,640),7596=>array(57,209,560,640),7597=>array(57,209,560,633),7598=>array(-11,209,348,640),7599=>array(57,209,417,640),7600=>array(55,326,346,640),7601=>array(35,318,351,640),7602=>array(35,210,351,751),7603=>array(34,209,297,640),7604=>array(-11,209,224,751),7605=>array(17,209,232,719),7606=>array(46,318,445,632),7607=>array(35,318,355,632),7608=>array(57,317,321,632),7609=>array(60,326,343,632),7610=>array(19,326,354,632),7611=>array(27,326,304,632),7612=>array(27,209,374,632),7613=>array(27,296,304,632),7614=>array(27,207,330,632),7615=>array(35,320,351,756),7620=>array(-456,616,-44,800),7621=>array(-456,616,-44,800),7622=>array(-456,616,-44,800),7623=>array(-456,616,-44,800),7624=>array(-468,616,-32,800),7625=>array(-468,616,-32,800),7680=>array(8,-241,676,729),7681=>array(60,-241,522,560),7682=>array(98,0,615,914),7683=>array(90,-14,580,915),7684=>array(98,-183,615,729),7685=>array(91,-183,580,760),7686=>array(98,-156,615,729),7687=>array(91,-156,580,760),7688=>array(56,-193,644,928),7689=>array(55,-193,488,800),7690=>array(98,0,711,914),7691=>array(55,-14,544,942),7692=>array(98,-183,711,729),7693=>array(55,-183,544,760),7694=>array(98,-156,711,729),7695=>array(55,-156,544,760),7696=>array(98,-192,711,729),7697=>array(55,-193,544,760),7698=>array(98,-240,711,729),7699=>array(55,-240,544,760),7700=>array(98,0,568,1044),7701=>array(55,-14,562,921),7702=>array(98,0,568,1044),7703=>array(55,-14,562,921),7704=>array(98,-213,568,729),7705=>array(55,-213,562,560),7706=>array(98,-192,568,729),7707=>array(55,-192,562,560),7708=>array(98,-193,568,928),7709=>array(55,-193,562,785),7710=>array(98,0,517,914),7711=>array(23,0,371,942),7712=>array(56,-14,693,887),7713=>array(55,-208,544,745),7714=>array(98,0,654,913),7715=>array(90,0,549,915),7716=>array(98,-183,654,729),7717=>array(91,-183,549,760),7718=>array(98,0,654,914),7719=>array(-9,0,549,913),7720=>array(8,-193,654,729),7721=>array(1,-193,549,760),7722=>array(98,-222,654,729),7723=>array(91,-222,549,760),7724=>array(0,-192,322,729),7725=>array(-22,-192,300,760),7726=>array(3,0,293,1044),7727=>array(-6,0,284,886),7728=>array(98,0,677,928),7729=>array(91,0,576,928),7730=>array(98,-183,677,729),7731=>array(91,-183,576,760),7732=>array(98,-156,677,729),7733=>array(91,-156,576,760),7734=>array(98,-183,552,729),7735=>array(98,-183,189,760),7736=>array(1,-183,552,927),7737=>array(-1,-183,291,899),7738=>array(98,-156,552,729),7739=>array(-6,-156,286,760),7740=>array(98,-240,552,729),7741=>array(-17,-240,295,760),7742=>array(98,0,765,928),7743=>array(91,0,889,800),7744=>array(98,0,765,914),7745=>array(91,0,889,760),7746=>array(98,-183,765,729),7747=>array(91,-183,889,560),7748=>array(98,0,650,914),7749=>array(91,0,549,760),7750=>array(98,-183,650,729),7751=>array(91,-183,549,560),7752=>array(98,-156,650,729),7753=>array(91,-156,549,560),7754=>array(98,-240,650,729),7755=>array(91,-240,549,560),7756=>array(56,-14,731,1044),7757=>array(55,-14,557,881),7758=>array(56,-14,731,1042),7759=>array(55,-14,557,882),7760=>array(56,-14,731,1044),7761=>array(55,-14,557,921),7762=>array(56,-14,731,1044),7763=>array(55,-14,557,921),7764=>array(98,0,569,928),7765=>array(91,-208,580,800),7766=>array(98,0,569,914),7767=>array(91,-208,580,760),7768=>array(98,0,666,913),7769=>array(91,0,411,760),7770=>array(98,-183,666,729),7771=>array(91,-183,411,560),7772=>array(98,-183,666,899),7773=>array(91,-183,411,745),7774=>array(98,-156,666,729),7775=>array(41,-156,411,560),7776=>array(66,-14,579,914),7777=>array(54,-14,472,760),7778=>array(66,-183,579,742),7779=>array(54,-183,472,560),7780=>array(66,-14,579,928),7781=>array(54,-14,485,800),7782=>array(66,-14,579,1042),7783=>array(54,-14,472,973),7784=>array(66,-183,579,914),7785=>array(54,-183,472,733),7786=>array(-3,0,614,914),7787=>array(27,0,368,942),7788=>array(-3,-183,614,729),7789=>array(27,-183,368,702),7790=>array(-3,-156,614,729),7791=>array(27,-156,390,702),7792=>array(-3,-240,614,729),7793=>array(27,-240,394,702),7794=>array(87,-183,645,729),7795=>array(85,-183,543,560),7796=>array(87,-192,645,729),7797=>array(85,-192,543,560),7798=>array(87,-213,645,729),7799=>array(85,-213,543,560),7800=>array(87,-14,645,1044),7801=>array(85,-14,543,990),7802=>array(87,-14,645,1025),7803=>array(85,-14,543,869),7804=>array(8,0,676,936),7805=>array(30,0,562,777),7806=>array(8,-183,676,729),7807=>array(30,-183,562,547),7808=>array(33,0,956,931),7809=>array(42,0,776,802),7810=>array(33,0,956,931),7811=>array(42,0,776,803),7812=>array(33,0,956,913),7813=>array(42,0,776,758),7814=>array(33,0,956,913),7815=>array(42,0,776,760),7816=>array(33,-183,956,729),7817=>array(42,-183,776,547),7818=>array(30,0,654,914),7819=>array(29,0,559,760),7820=>array(30,0,654,913),7821=>array(29,0,559,758),7822=>array(-2,0,613,914),7823=>array(30,-208,562,760),7824=>array(45,0,640,928),7825=>array(43,0,482,800),7826=>array(45,-183,640,729),7827=>array(43,-183,482,547),7828=>array(45,-156,640,729),7829=>array(43,-156,482,547),7830=>array(91,-156,549,760),7831=>array(2,0,368,913),7832=>array(42,0,776,878),7833=>array(30,-208,562,878),7834=>array(60,-14,672,760),7835=>array(23,0,371,942),7836=>array(1,0,371,760),7837=>array(23,0,371,760),7838=>array(87,-14,713,743),7839=>array(55,-14,557,742),7840=>array(8,-183,676,729),7841=>array(60,-183,522,560),7842=>array(8,0,676,992),7843=>array(60,-14,522,810),7844=>array(8,0,676,1028),7845=>array(60,-14,585,846),7846=>array(8,0,676,1028),7847=>array(60,-14,522,847),7848=>array(8,0,676,1044),7849=>array(60,-14,577,862),7850=>array(8,0,676,1057),7851=>array(60,-14,522,875),7852=>array(8,-183,676,928),7853=>array(60,-183,522,800),7854=>array(8,0,676,1044),7855=>array(60,-14,522,877),7856=>array(8,0,676,1044),7857=>array(60,-14,522,877),7858=>array(8,0,676,1068),7859=>array(60,-14,522,901),7860=>array(8,0,676,1043),7861=>array(60,-14,522,876),7862=>array(8,-183,676,946),7863=>array(60,-183,522,765),7864=>array(98,-183,568,729),7865=>array(55,-183,562,560),7866=>array(98,0,568,992),7867=>array(55,-14,562,810),7868=>array(98,0,568,921),7869=>array(55,-14,562,777),7870=>array(98,0,637,1028),7871=>array(55,-14,613,846),7872=>array(98,0,568,1028),7873=>array(55,-14,562,847),7874=>array(98,0,620,1044),7875=>array(55,-14,605,862),7876=>array(98,0,568,1057),7877=>array(55,-14,562,875),7878=>array(98,-183,568,928),7879=>array(55,-183,562,800),7880=>array(44,0,263,992),7881=>array(33,0,252,811),7882=>array(98,-183,197,729),7883=>array(93,-183,184,760),7884=>array(56,-183,731,742),7885=>array(55,-183,557,560),7886=>array(56,-14,731,992),7887=>array(55,-14,557,810),7888=>array(56,-14,731,1028),7889=>array(55,-14,601,846),7890=>array(56,-14,731,1028),7891=>array(55,-14,557,847),7892=>array(56,-14,731,1044),7893=>array(55,-14,592,862),7894=>array(56,-14,731,1057),7895=>array(55,-14,557,875),7896=>array(56,-183,731,928),7897=>array(55,-183,557,800),7898=>array(50,-14,764,927),7899=>array(58,-14,603,800),7900=>array(50,-14,764,927),7901=>array(58,-14,603,800),7902=>array(50,-14,764,992),7903=>array(58,-14,603,810),7904=>array(50,-14,764,921),7905=>array(58,-14,603,777),7906=>array(50,-183,764,760),7907=>array(58,-183,603,615),7908=>array(87,-183,645,729),7909=>array(85,-183,543,560),7910=>array(87,-14,645,992),7911=>array(85,-14,543,810),7912=>array(84,-4,796,927),7913=>array(86,-14,676,800),7914=>array(84,-4,796,927),7915=>array(86,-14,676,800),7916=>array(84,-4,796,992),7917=>array(86,-14,676,810),7918=>array(84,-4,796,921),7919=>array(86,-14,676,777),7920=>array(84,-183,796,760),7921=>array(86,-183,676,615),7922=>array(-2,0,613,931),7923=>array(30,-208,562,802),7924=>array(-2,-183,613,729),7925=>array(30,-208,562,547),7926=>array(-2,0,613,996),7927=>array(30,-208,562,813),7928=>array(-2,0,613,921),7929=>array(30,-208,562,777),7930=>array(98,0,764,729),7931=>array(16,0,462,760),7936=>array(55,-12,611,797),7937=>array(55,-12,611,797),7938=>array(55,-12,611,800),7939=>array(55,-12,611,800),7940=>array(55,-12,611,800),7941=>array(55,-12,611,800),7942=>array(55,-12,611,928),7943=>array(55,-12,611,928),7944=>array(8,0,676,797),7945=>array(8,0,676,797),7946=>array(2,0,869,800),7947=>array(3,0,869,800),7948=>array(3,0,761,800),7949=>array(2,0,793,800),7950=>array(3,0,700,928),7951=>array(2,0,734,928),7952=>array(65,-14,473,797),7953=>array(65,-14,473,797),7954=>array(65,-14,473,800),7955=>array(65,-14,473,800),7956=>array(65,-14,486,800),7957=>array(65,-14,501,800),7960=>array(3,0,647,797),7961=>array(3,0,647,797),7962=>array(2,0,902,800),7963=>array(3,0,911,800),7964=>array(3,0,834,800),7965=>array(2,0,864,800),7968=>array(91,-208,549,797),7969=>array(91,-208,549,797),7970=>array(91,-208,549,800),7971=>array(91,-208,549,800),7972=>array(91,-208,549,800),7973=>array(91,-208,549,800),7974=>array(91,-208,549,928),7975=>array(91,-208,549,928),7976=>array(3,0,739,797),7977=>array(3,0,737,797),7978=>array(2,0,988,800),7979=>array(3,0,991,800),7980=>array(3,0,929,800),7981=>array(2,0,953,800),7982=>array(3,0,835,928),7983=>array(2,0,849,928),7984=>array(76,0,304,797),7985=>array(71,0,304,797),7986=>array(-39,0,340,800),7987=>array(-34,0,347,800),7988=>array(2,0,362,800),7989=>array(-22,0,366,800),7990=>array(-26,0,304,928),7991=>array(-28,0,304,928),7992=>array(3,0,282,797),7993=>array(3,0,276,797),7994=>array(2,0,537,800),7995=>array(3,0,537,800),7996=>array(3,0,472,800),7997=>array(2,0,501,800),7998=>array(3,0,392,928),7999=>array(2,0,395,928),8000=>array(55,-14,557,797),8001=>array(55,-14,557,797),8002=>array(55,-14,557,800),8003=>array(55,-14,557,800),8004=>array(55,-14,557,800),8005=>array(55,-14,557,800),8008=>array(3,-14,748,797),8009=>array(3,-14,792,797),8010=>array(2,-14,1039,800),8011=>array(3,-14,1043,800),8012=>array(3,-14,882,800),8013=>array(2,-14,914,800),8016=>array(73,-14,521,797),8017=>array(73,-14,521,797),8018=>array(73,-14,521,800),8019=>array(73,-14,521,800),8020=>array(73,-14,521,800),8021=>array(73,-14,521,800),8022=>array(73,-14,521,928),8023=>array(73,-14,521,928),8025=>array(3,0,786,797),8027=>array(3,0,1000,800),8029=>array(2,0,1014,800),8031=>array(2,0,900,928),8032=>array(66,-14,769,797),8033=>array(66,-14,769,797),8034=>array(66,-14,769,800),8035=>array(66,-14,769,800),8036=>array(66,-14,769,800),8037=>array(66,-14,769,800),8038=>array(66,-14,769,928),8039=>array(66,-14,769,928),8040=>array(3,0,764,797),8041=>array(3,0,805,797),8042=>array(2,0,1051,800),8043=>array(3,0,1057,800),8044=>array(3,0,908,800),8045=>array(2,0,934,800),8046=>array(3,0,883,928),8047=>array(2,0,914,928),8048=>array(55,-12,611,800),8049=>array(55,-12,611,800),8050=>array(65,-14,473,800),8051=>array(65,-14,473,800),8052=>array(91,-208,549,800),8053=>array(91,-208,549,800),8054=>array(-56,0,304,800),8055=>array(81,0,324,800),8056=>array(55,-14,557,800),8057=>array(55,-14,557,800),8058=>array(73,-14,521,800),8059=>array(73,-14,521,800),8060=>array(66,-14,769,800),8061=>array(66,-14,769,800),8064=>array(55,-208,611,797),8065=>array(55,-208,611,797),8066=>array(55,-208,611,800),8067=>array(55,-208,611,800),8068=>array(55,-208,611,800),8069=>array(55,-208,611,800),8070=>array(55,-208,611,928),8071=>array(55,-208,611,928),8072=>array(8,-208,676,797),8073=>array(8,-208,676,797),8074=>array(2,-208,869,800),8075=>array(3,-208,869,800),8076=>array(3,-208,761,800),8077=>array(2,-208,793,800),8078=>array(3,-208,700,928),8079=>array(2,-208,734,928),8080=>array(91,-208,549,797),8081=>array(91,-208,549,797),8082=>array(91,-208,549,800),8083=>array(91,-208,549,800),8084=>array(91,-208,549,800),8085=>array(91,-208,549,800),8086=>array(91,-208,549,928),8087=>array(91,-208,549,928),8088=>array(3,-208,739,797),8089=>array(3,-208,737,797),8090=>array(2,-208,988,800),8091=>array(3,-208,991,800),8092=>array(3,-208,929,800),8093=>array(2,-208,953,800),8094=>array(3,-208,835,928),8095=>array(2,-208,849,928),8096=>array(66,-208,769,797),8097=>array(66,-208,769,797),8098=>array(66,-208,769,800),8099=>array(66,-208,769,800),8100=>array(66,-208,769,800),8101=>array(66,-208,769,800),8102=>array(66,-208,769,928),8103=>array(66,-208,769,928),8104=>array(3,-208,764,797),8105=>array(3,-208,805,797),8106=>array(2,-208,1051,800),8107=>array(3,-208,1057,800),8108=>array(3,-208,908,800),8109=>array(2,-208,934,800),8110=>array(3,-208,883,928),8111=>array(2,-208,914,928),8112=>array(55,-12,611,785),8113=>array(55,-12,611,745),8114=>array(55,-208,611,800),8115=>array(55,-208,611,559),8116=>array(55,-208,611,800),8118=>array(55,-12,611,777),8119=>array(55,-208,611,777),8120=>array(8,0,676,928),8121=>array(8,0,676,899),8122=>array(-2,0,708,800),8123=>array(8,0,676,800),8124=>array(8,-208,676,729),8125=>array(190,595,309,797),8126=>array(214,-208,321,-45),8127=>array(190,595,309,797),8128=>array(89,639,411,777),8129=>array(89,659,411,928),8130=>array(91,-208,549,800),8131=>array(91,-208,549,560),8132=>array(91,-208,549,800),8134=>array(91,-208,549,777),8135=>array(91,-208,549,777),8136=>array(-2,0,741,800),8137=>array(-12,0,682,800),8138=>array(-2,0,833,800),8139=>array(-6,0,765,800),8140=>array(98,-208,654,729),8141=>array(67,595,446,800),8142=>array(88,595,447,800),8143=>array(89,595,411,928),8144=>array(-10,0,304,785),8145=>array(-14,0,304,745),8146=>array(-20,0,304,978),8147=>array(2,0,313,978),8150=>array(-14,0,309,777),8151=>array(-13,0,310,928),8152=>array(-5,0,300,928),8153=>array(1,0,293,899),8154=>array(-2,0,377,800),8155=>array(-9,0,311,800),8157=>array(62,595,443,800),8158=>array(73,595,461,800),8159=>array(89,595,411,928),8160=>array(73,-14,521,785),8161=>array(73,-14,521,745),8162=>array(73,-14,521,978),8163=>array(73,-14,521,978),8164=>array(91,-208,580,797),8165=>array(91,-208,580,797),8166=>array(73,-14,521,777),8167=>array(73,-14,521,928),8168=>array(-2,0,613,928),8169=>array(-2,0,613,899),8170=>array(-2,0,847,800),8171=>array(-15,0,821,800),8172=>array(3,0,651,797),8173=>array(83,659,395,978),8174=>array(105,659,415,978),8175=>array(83,617,317,800),8178=>array(66,-208,769,800),8179=>array(66,-208,769,547),8180=>array(66,-208,769,800),8182=>array(66,-14,769,777),8183=>array(66,-208,769,777),8184=>array(-2,-14,885,800),8185=>array(-7,-14,750,800),8186=>array(-2,0,884,800),8187=>array(-18,0,752,800),8188=>array(38,-208,726,738),8189=>array(181,616,415,800),8190=>array(190,595,309,797),8208=>array(49,234,312,314),8209=>array(49,234,312,314),8210=>array(49,239,587,309),8211=>array(49,239,451,309),8212=>array(49,239,951,309),8213=>array(0,239,1000,309),8214=>array(127,-236,371,764),8215=>array(-10,-236,510,-9),8216=>array(85,489,228,729),8217=>array(87,499,230,729),8218=>array(85,-116,228,124),8219=>array(87,499,230,729),8220=>array(85,489,428,729),8221=>array(85,489,428,729),8222=>array(85,-116,428,124),8223=>array(85,489,428,729),8224=>array(28,-96,472,729),8225=>array(28,-96,472,729),8226=>array(150,227,440,516),8227=>array(150,188,479,555),8228=>array(115,0,219,124),8229=>array(115,0,552,124),8230=>array(115,0,885,124),8231=>array(107,302,210,426),8240=>array(55,-14,1287,742),8241=>array(55,-14,1681,742),8242=>array(20,547,203,729),8243=>array(20,547,350,729),8244=>array(20,547,496,729),8245=>array(20,547,203,729),8246=>array(20,547,350,729),8247=>array(20,547,496,729),8248=>array(5,-236,333,-30),8249=>array(77,69,306,517),8250=>array(94,69,323,517),8251=>array(95,2,740,725),8252=>array(72,0,414,729),8253=>array(72,0,461,742),8254=>array(-10,686,510,755),8255=>array(-43,-237,847,-60),8256=>array(-43,752,847,929),8257=>array(-42,-236,286,229),8258=>array(30,-29,970,814),8259=>array(108,313,400,421),8260=>array(-183,-14,350,742),8261=>array(86,-132,293,760),8262=>array(86,-132,293,760),8263=>array(36,0,886,742),8264=>array(72,0,661,742),8265=>array(72,0,661,742),8266=>array(49,-123,448,545),8267=>array(115,-96,566,729),8268=>array(105,220,395,509),8269=>array(105,220,395,509),8270=>array(30,-29,470,427),8271=>array(139,-116,282,517),8272=>array(-43,-237,847,929),8273=>array(30,-7,470,929),8274=>array(71,-93,408,729),8275=>array(49,228,951,399),8276=>array(-43,-240,847,-63),8277=>array(152,98,686,631),8278=>array(122,149,464,589),8279=>array(20,547,643,729),8280=>array(175,125,663,613),8281=>array(175,120,663,608),8282=>array(107,0,210,729),8283=>array(49,-138,749,867),8284=>array(55,0,783,729),8285=>array(107,39,210,655),8286=>array(107,8,210,683),8304=>array(42,319,366,742),8305=>array(60,326,116,751),8308=>array(31,326,369,734),8309=>array(50,319,353,734),8310=>array(45,319,369,742),8311=>array(53,326,354,734),8312=>array(43,319,365,742),8313=>array(41,319,364,742),8314=>array(67,326,461,677),8315=>array(67,479,461,525),8316=>array(67,422,461,581),8317=>array(54,252,195,751),8318=>array(50,252,191,751),8319=>array(57,326,346,640),8320=>array(42,-7,366,416),8321=>array(67,0,346,408),8322=>array(46,0,338,416),8323=>array(48,-7,350,416),8324=>array(31,0,369,408),8325=>array(50,-7,353,408),8326=>array(45,-7,369,416),8327=>array(53,0,354,408),8328=>array(43,-7,365,416),8329=>array(41,-7,364,416),8330=>array(67,0,461,351),8331=>array(67,152,461,199),8332=>array(67,96,461,254),8333=>array(54,-74,195,425),8334=>array(50,-74,191,425),8336=>array(38,-8,329,313),8337=>array(35,-8,354,313),8338=>array(35,-8,351,313),8339=>array(57,0,391,306),8340=>array(35,-8,354,313),8341=>array(57,0,346,425),8342=>array(57,0,363,425),8343=>array(60,0,116,425),8344=>array(57,0,560,313),8345=>array(57,0,346,313),8346=>array(57,-117,365,313),8347=>array(57,0,320,322),8348=>array(17,0,232,393),8352=>array(42,0,835,729),8353=>array(56,-44,593,778),8354=>array(47,-14,587,742),8355=>array(65,0,599,729),8356=>array(63,0,548,742),8357=>array(91,-93,889,640),8358=>array(57,0,691,729),8359=>array(98,-14,1226,729),8360=>array(98,-14,1025,729),8361=>array(29,0,960,729),8362=>array(46,-14,743,729),8363=>array(55,-156,619,760),8364=>array(0,-14,570,742),8365=>array(20,0,636,729),8366=>array(10,0,626,729),8367=>array(102,-222,1205,742),8368=>array(22,-14,569,742),8369=>array(33,0,579,729),8370=>array(45,-81,586,809),8371=>array(8,0,627,729),8372=>array(57,-14,717,742),8373=>array(81,-147,556,760),8376=>array(10,0,626,729),8377=>array(52,0,585,729),8378=>array(5,2,649,731),8400=>array(-491,635,-26,760),8401=>array(-470,635,-5,760),8406=>array(-470,560,-26,760),8407=>array(-470,560,-26,760),8411=>array(-491,560,-10,758),8412=>array(-586,560,86,758),8417=>array(-470,560,-26,760),8448=>array(33,-24,980,752),8449=>array(33,-24,999,752),8450=>array(56,-14,644,742),8451=>array(95,-14,1053,742),8452=>array(-21,0,637,729),8453=>array(29,-24,987,752),8454=>array(29,-24,1038,752),8455=>array(80,-14,560,742),8456=>array(54,-146,642,611),8457=>array(95,0,894,742),8459=>array(36,-14,943,748),8460=>array(1,-128,693,731),8461=>array(98,0,751,729),8462=>array(35,0,566,760),8463=>array(44,0,566,760),8464=>array(29,-15,432,742),8465=>array(52,-14,659,742),8466=>array(33,-14,679,743),8467=>array(-14,-14,353,742),8468=>array(16,-14,763,760),8469=>array(97,0,704,729),8470=>array(26,0,969,729),8471=>array(138,0,862,724),8472=>array(54,-221,658,495),8473=>array(98,0,666,729),8474=>array(56,-129,731,742),8475=>array(32,-9,764,774),8476=>array(41,-14,803,743),8477=>array(98,0,774,729),8478=>array(83,0,814,729),8479=>array(98,-107,666,847),8480=>array(126,443,770,730),8481=>array(-2,0,1023,547),8482=>array(144,447,784,729),8483=>array(8,-108,676,846),8484=>array(45,0,700,729),8485=>array(43,-213,523,760),8486=>array(38,0,726,738),8487=>array(38,-14,726,724),8488=>array(12,-149,573,783),8489=>array(33,0,255,547),8490=>array(98,0,677,729),8491=>array(8,0,676,928),8492=>array(45,0,734,772),8493=>array(63,-12,652,742),8494=>array(61,-12,793,647),8495=>array(42,-14,547,533),8496=>array(79,-14,565,742),8497=>array(41,-16,758,755),8498=>array(98,0,517,729),8499=>array(28,-28,1032,751),8500=>array(51,-12,411,395),8501=>array(50,-14,712,742),8502=>array(-2,-14,653,743),8503=>array(13,-35,407,742),8504=>array(42,-35,591,742),8505=>array(34,0,355,760),8506=>array(44,-21,915,654),8507=>array(74,0,1162,547),8508=>array(18,-8,685,547),8509=>array(0,-194,669,560),8510=>array(98,0,648,729),8511=>array(98,0,750,729),8512=>array(12,-192,791,719),8513=>array(80,-14,716,742),8514=>array(4,0,458,729),8515=>array(3,0,457,729),8516=>array(-2,0,613,729),8517=>array(42,0,786,729),8518=>array(44,-14,709,760),8519=>array(44,-14,572,560),8520=>array(39,0,313,760),8521=>array(-114,-208,313,760),8523=>array(29,-14,715,742),8526=>array(40,0,441,547),8528=>array(67,-14,922,742),8529=>array(67,-14,932,742),8530=>array(67,-14,1335,742),8531=>array(67,-14,918,742),8532=>array(46,-14,918,742),8533=>array(67,-14,921,742),8534=>array(46,-14,921,742),8535=>array(48,-14,921,742),8536=>array(31,-14,921,742),8537=>array(67,-14,937,742),8538=>array(50,-14,937,742),8539=>array(67,-14,933,742),8540=>array(48,-14,933,742),8541=>array(50,-14,933,742),8542=>array(53,-14,933,742),8543=>array(67,-14,751,742),8544=>array(98,0,197,729),8545=>array(98,0,394,729),8546=>array(98,0,591,729),8547=>array(98,0,915,729),8548=>array(8,0,676,729),8549=>array(8,0,824,729),8550=>array(8,0,1021,729),8551=>array(8,0,1219,729),8552=>array(98,0,886,729),8553=>array(30,0,654,729),8554=>array(30,0,835,729),8555=>array(30,0,1032,729),8556=>array(98,0,552,729),8557=>array(56,-14,644,742),8558=>array(98,0,711,729),8559=>array(98,0,765,729),8560=>array(94,0,184,760),8561=>array(94,0,364,760),8562=>array(94,0,543,760),8563=>array(94,0,782,760),8564=>array(30,0,562,547),8565=>array(30,0,717,760),8566=>array(30,0,897,760),8567=>array(30,0,1077,760),8568=>array(94,0,786,760),8569=>array(29,0,559,547),8570=>array(29,0,729,760),8571=>array(29,0,908,760),8572=>array(94,0,184,760),8573=>array(55,-14,488,560),8574=>array(55,-14,544,760),8575=>array(91,0,889,560),8576=>array(59,0,1186,729),8577=>array(98,0,711,729),8578=>array(59,0,1186,729),8579=>array(56,-14,644,742),8580=>array(62,-14,495,560),8581=>array(56,-208,644,742),8585=>array(42,-14,918,742),8592=>array(49,100,781,527),8593=>array(205,0,632,732),8594=>array(57,100,789,527),8595=>array(205,-3,632,729),8596=>array(49,100,789,527),8597=>array(205,-8,632,732),8598=>array(141,25,703,587),8599=>array(141,25,703,587),8600=>array(141,25,703,587),8601=>array(141,25,703,587),8602=>array(49,100,781,527),8603=>array(57,100,789,527),8604=>array(21,103,827,414),8605=>array(11,103,816,414),8606=>array(49,100,781,527),8607=>array(206,0,633,732),8608=>array(57,100,789,527),8609=>array(206,-3,633,729),8610=>array(49,100,781,527),8611=>array(57,100,789,527),8612=>array(49,100,781,527),8613=>array(206,0,632,732),8614=>array(57,100,789,527),8615=>array(206,-3,632,729),8616=>array(206,0,632,732),8617=>array(49,100,780,565),8618=>array(58,100,789,565),8619=>array(49,100,780,565),8620=>array(58,100,789,565),8621=>array(49,100,789,527),8622=>array(49,93,789,534),8623=>array(146,-2,702,730),8624=>array(169,0,629,743),8625=>array(209,0,669,743),8626=>array(169,-14,629,729),8627=>array(209,-14,669,729),8628=>array(233,-3,760,604),8629=>array(49,100,656,626),8630=>array(22,203,799,668),8631=>array(39,203,816,668),8632=>array(108,25,788,729),8633=>array(55,-46,783,673),8634=>array(103,62,762,680),8635=>array(77,62,736,680),8636=>array(49,272,781,527),8637=>array(49,100,781,355),8638=>array(377,0,632,732),8639=>array(205,0,460,732),8640=>array(57,272,789,527),8641=>array(57,100,789,355),8642=>array(377,0,632,732),8643=>array(205,0,460,732),8644=>array(49,-47,789,674),8645=>array(58,-3,779,732),8646=>array(49,-47,789,674),8647=>array(49,-47,781,674),8648=>array(59,0,779,732),8649=>array(58,-47,790,674),8650=>array(59,-3,779,729),8651=>array(49,7,789,620),8652=>array(49,7,789,620),8653=>array(49,100,781,527),8654=>array(49,94,789,533),8655=>array(57,100,789,527),8656=>array(49,100,781,527),8657=>array(206,0,633,732),8658=>array(57,100,789,527),8659=>array(206,-3,633,729),8660=>array(49,100,789,527),8661=>array(205,-8,633,732),8662=>array(141,-23,751,587),8663=>array(92,-23,703,587),8664=>array(92,25,703,636),8665=>array(141,25,751,636),8666=>array(49,100,781,527),8667=>array(57,100,789,527),8668=>array(49,100,781,527),8669=>array(57,100,789,527),8670=>array(205,0,632,732),8671=>array(205,-3,632,729),8672=>array(49,100,781,527),8673=>array(205,0,633,732),8674=>array(57,100,789,527),8675=>array(205,-3,633,729),8676=>array(52,99,781,528),8677=>array(57,99,786,528),8678=>array(27,65,781,562),8679=>array(171,0,667,754),8680=>array(35,65,789,562),8681=>array(171,-25,667,729),8682=>array(171,0,667,754),8683=>array(171,0,667,754),8684=>array(156,0,682,754),8685=>array(171,0,667,754),8686=>array(171,0,667,754),8687=>array(171,0,667,754),8688=>array(57,65,811,562),8689=>array(60,0,788,729),8690=>array(60,0,788,729),8691=>array(171,-25,667,754),8692=>array(57,100,789,527),8693=>array(58,-3,779,732),8694=>array(57,-193,789,820),8695=>array(49,94,781,533),8696=>array(57,94,789,533),8697=>array(49,94,789,533),8698=>array(49,94,781,533),8699=>array(57,94,789,533),8700=>array(49,94,789,533),8701=>array(27,96,781,531),8702=>array(57,96,811,531),8703=>array(27,96,811,531),8704=>array(8,0,676,729),8705=>array(66,-14,554,742),8706=>array(46,-14,471,662),8707=>array(98,0,568,729),8708=>array(98,-46,568,776),8709=>array(76,-10,795,710),8710=>array(-3,0,672,719),8711=>array(-3,0,672,719),8712=>array(85,-10,786,710),8713=>array(85,-138,786,835),8714=>array(106,76,612,550),8715=>array(85,-10,786,710),8716=>array(85,-138,786,835),8717=>array(106,76,612,550),8718=>array(146,0,490,485),8719=>array(76,-192,680,719),8720=>array(76,-192,680,719),8721=>array(12,-192,654,719),8722=>array(106,272,732,355),8723=>array(106,0,732,627),8724=>array(106,0,732,729),8725=>array(0,-93,337,729),8726=>array(192,-54,529,768),8727=>array(127,0,710,627),8728=>array(158,160,468,470),8729=>array(168,168,458,458),8730=>array(30,-20,637,811),8731=>array(30,-20,637,933),8732=>array(30,-20,637,924),8733=>array(107,112,607,487),8734=>array(107,112,726,487),8735=>array(138,99,700,661),8736=>array(85,0,786,729),8737=>array(85,-53,786,729),8738=>array(116,-3,732,727),8739=>array(211,-214,289,771),8740=>array(50,-214,451,771),8741=>array(133,-214,367,771),8742=>array(50,-214,451,771),8743=>array(129,0,603,579),8744=>array(129,0,603,579),8745=>array(129,0,603,579),8746=>array(129,0,603,579),8747=>array(57,-212,464,757),8748=>array(57,-212,732,757),8749=>array(57,-212,1000,757),8750=>array(57,-212,464,757),8751=>array(57,-212,732,757),8752=>array(57,-212,1000,757),8753=>array(57,-213,522,757),8754=>array(57,-212,514,757),8755=>array(57,-212,515,757),8756=>array(59,100,577,604),8757=>array(59,100,577,604),8758=>array(79,100,182,604),8759=>array(59,100,577,604),8760=>array(106,272,732,552),8761=>array(106,78,732,552),8762=>array(105,78,732,552),8763=>array(106,78,732,552),8764=>array(106,228,732,399),8765=>array(106,228,732,399),8766=>array(79,149,759,479),8767=>array(106,42,732,584),8768=>array(102,0,273,626),8769=>array(106,77,732,553),8770=>array(106,133,732,454),8771=>array(106,172,732,494),8772=>array(106,48,732,603),8773=>array(106,90,732,594),8774=>array(106,12,732,594),8775=>array(106,-5,732,657),8776=>array(106,133,732,494),8777=>array(106,2,732,625),8778=>array(106,90,732,598),8779=>array(106,59,732,602),8780=>array(106,90,732,594),8781=>array(105,105,732,521),8782=>array(106,26,732,601),8783=>array(106,172,732,601),8784=>array(106,172,732,625),8785=>array(106,1,732,625),8786=>array(106,2,733,625),8787=>array(106,2,733,625),8788=>array(101,151,899,476),8789=>array(100,151,900,475),8790=>array(106,172,732,454),8791=>array(106,172,732,760),8792=>array(106,172,732,662),8793=>array(106,172,732,812),8794=>array(106,172,732,812),8795=>array(106,172,732,849),8796=>array(106,172,732,854),8797=>array(106,172,732,764),8798=>array(106,172,732,760),8799=>array(106,172,732,856),8800=>array(106,19,732,608),8801=>array(106,90,732,537),8802=>array(106,-24,732,650),8803=>array(106,0,732,629),8804=>array(106,0,732,582),8805=>array(106,0,732,582),8806=>array(106,-83,732,638),8807=>array(106,-83,732,638),8808=>array(106,-164,732,638),8809=>array(106,-164,732,638),8810=>array(72,22,975,609),8811=>array(72,22,975,609),8812=>array(86,-132,378,759),8813=>array(105,13,732,613),8814=>array(106,2,732,674),8815=>array(106,-47,732,625),8816=>array(106,-102,732,667),8817=>array(106,-102,732,667),8818=>array(106,-55,732,582),8819=>array(106,-39,732,582),8820=>array(106,-105,732,664),8821=>array(106,-102,732,667),8822=>array(102,-87,732,686),8823=>array(102,-87,732,686),8824=>array(102,-197,732,797),8825=>array(102,-197,732,797),8826=>array(106,-38,732,664),8827=>array(106,-38,732,664),8828=>array(106,-105,732,667),8829=>array(106,-105,732,667),8830=>array(106,-85,732,667),8831=>array(106,-85,732,667),8832=>array(106,-61,732,764),8833=>array(106,-138,732,687),8834=>array(100,80,738,546),8835=>array(100,80,738,546),8836=>array(100,-96,738,726),8837=>array(100,-100,738,722),8838=>array(93,0,732,613),8839=>array(106,0,745,613),8840=>array(93,-116,732,730),8841=>array(106,-116,745,730),8842=>array(93,-73,732,614),8843=>array(93,-73,732,614),8844=>array(129,0,603,579),8845=>array(129,0,603,579),8846=>array(129,2,603,582),8847=>array(106,0,732,568),8848=>array(106,0,732,568),8849=>array(106,-83,732,630),8850=>array(106,-83,732,630),8851=>array(106,0,674,626),8852=>array(106,0,674,626),8853=>array(91,-14,747,643),8854=>array(91,-14,747,643),8855=>array(91,-14,747,643),8856=>array(91,-14,747,643),8857=>array(91,-14,747,643),8858=>array(91,-14,747,643),8859=>array(91,-14,747,643),8860=>array(91,-14,747,643),8861=>array(91,-14,747,643),8862=>array(91,-14,747,643),8863=>array(91,-14,747,643),8864=>array(91,-14,747,643),8865=>array(91,-14,747,643),8866=>array(85,0,786,700),8867=>array(85,0,786,700),8868=>array(85,0,786,700),8869=>array(85,0,786,700),8870=>array(85,0,436,700),8871=>array(85,0,436,700),8872=>array(85,0,786,700),8873=>array(85,0,786,700),8874=>array(85,0,786,700),8875=>array(85,0,786,700),8876=>array(85,-40,786,740),8877=>array(85,-40,786,740),8878=>array(85,-40,786,740),8879=>array(85,-40,786,740),8880=>array(106,-43,724,670),8881=>array(106,-43,724,670),8882=>array(106,15,732,612),8883=>array(106,15,732,612),8884=>array(106,-48,732,674),8885=>array(106,-48,732,674),8886=>array(59,175,941,454),8887=>array(59,175,941,454),8888=>array(48,175,790,454),8889=>array(59,-47,779,674),8890=>array(116,0,404,701),8891=>array(98,0,634,740),8892=>array(98,0,634,740),8893=>array(98,0,634,740),8894=>array(138,0,700,562),8895=>array(138,0,700,562),8896=>array(-3,-192,823,719),8897=>array(-3,-192,823,719),8898=>array(68,-192,752,719),8899=>array(68,-192,752,719),8900=>array(3,-233,491,807),8901=>array(107,285,210,409),8902=>array(122,149,504,512),8903=>array(106,15,732,613),8904=>array(106,-30,894,657),8905=>array(106,-30,894,657),8906=>array(106,-30,894,657),8907=>array(106,-30,894,657),8908=>array(106,-30,894,657),8909=>array(106,172,732,494),8910=>array(48,0,684,579),8911=>array(48,0,684,579),8912=>array(93,-3,732,630),8913=>array(106,-3,745,630),8914=>array(103,0,735,663),8915=>array(103,-14,735,649),8916=>array(186,0,652,729),8917=>array(106,-100,732,729),8918=>array(106,46,732,581),8919=>array(106,46,732,581),8920=>array(72,22,1350,609),8921=>array(72,22,1350,609),8922=>array(106,-228,732,854),8923=>array(106,-228,732,854),8924=>array(106,0,732,582),8925=>array(106,0,732,582),8926=>array(106,-105,732,667),8927=>array(106,-105,732,667),8928=>array(106,-178,732,764),8929=>array(106,-178,732,764),8930=>array(106,-141,732,767),8931=>array(106,-141,732,767),8932=>array(106,-94,732,619),8933=>array(106,-94,732,619),8934=>array(106,-138,732,582),8935=>array(106,-138,732,582),8936=>array(106,-169,732,667),8937=>array(110,-171,736,667),8938=>array(106,-130,732,756),8939=>array(106,-130,732,756),8940=>array(106,-189,732,815),8941=>array(104,-189,730,815),8942=>array(448,-93,551,715),8943=>array(115,249,884,373),8944=>array(115,-93,884,715),8945=>array(115,-93,884,715),8946=>array(43,-10,957,710),8947=>array(85,-10,786,710),8948=>array(106,76,612,550),8949=>array(85,-10,786,910),8950=>array(85,-10,786,853),8951=>array(106,76,612,686),8952=>array(85,-144,786,710),8953=>array(85,-10,786,710),8954=>array(43,-10,957,710),8955=>array(85,-10,786,710),8956=>array(106,76,612,550),8957=>array(85,-10,786,853),8958=>array(106,76,612,686),8959=>array(106,0,765,720),8960=>array(36,-18,567,514),8961=>array(56,162,540,443),8962=>array(71,0,563,596),8963=>array(205,481,632,732),8964=>array(205,0,632,251),8965=>array(205,0,632,406),8966=>array(205,0,632,513),8967=>array(154,-29,334,788),8968=>array(86,-132,293,760),8969=>array(97,-132,304,760),8970=>array(86,-132,293,760),8971=>array(97,-132,304,760),8972=>array(369,-77,759,313),8973=>array(49,-77,439,313),8974=>array(369,243,759,634),8975=>array(49,243,439,634),8976=>array(106,140,732,421),8977=>array(3,126,510,634),8984=>array(121,0,879,759),8985=>array(106,140,732,421),8988=>array(86,425,403,760),8989=>array(65,425,383,760),8990=>array(86,-70,403,264),8991=>array(65,-70,383,264),8992=>array(210,-250,497,928),8993=>array(21,-237,307,942),8996=>array(76,227,1076,575),8997=>array(76,0,1076,575),8998=>array(76,0,1414,760),8999=>array(76,0,1076,760),9000=>array(59,0,1385,729),9003=>array(0,0,1338,760),9004=>array(73,-91,800,748),9075=>array(81,0,304,547),9076=>array(91,-208,580,560),9077=>array(66,-14,769,547),9082=>array(55,-12,611,559),9085=>array(13,-228,745,102),9095=>array(76,0,1096,748),9108=>array(17,0,856,727),9115=>array(86,-252,414,946),9116=>array(86,-252,181,942),9117=>array(86,-240,414,942),9118=>array(86,-252,414,946),9119=>array(319,-252,414,942),9120=>array(86,-240,414,942),9121=>array(86,-252,414,928),9122=>array(86,-252,181,942),9123=>array(86,-240,414,942),9124=>array(86,-252,414,928),9125=>array(319,-252,414,935),9126=>array(86,-240,414,935),9127=>array(330,-261,668,928),9128=>array(82,-252,420,940),9129=>array(330,-240,668,940),9130=>array(330,-256,420,943),9131=>array(82,-261,420,928),9132=>array(330,-252,668,940),9133=>array(82,-240,420,940),9134=>array(210,-250,307,942),9166=>array(27,65,781,729),9167=>array(91,0,854,596),9187=>array(73,-91,800,748),9189=>array(3,75,766,444),9192=>array(43,-129,601,294),9250=>array(-62,-14,580,760),9251=>array(71,-228,563,102),9312=>array(74,-10,822,738),9313=>array(74,-10,822,738),9314=>array(74,-10,822,738),9315=>array(74,-10,822,738),9316=>array(74,-10,822,738),9317=>array(74,-10,822,738),9318=>array(74,-10,822,738),9319=>array(74,-10,822,738),9320=>array(74,-10,822,738),9321=>array(74,-10,822,738),9472=>array(-10,242,612,326),9473=>array(-10,200,612,368),9474=>array(262,-302,340,973),9475=>array(223,-302,379,973),9476=>array(-10,242,612,326),9477=>array(-10,200,612,368),9478=>array(262,-302,340,973),9479=>array(223,-302,379,973),9480=>array(-10,242,612,326),9481=>array(-10,200,612,368),9482=>array(262,-302,340,973),9483=>array(223,-302,379,973),9484=>array(262,-302,612,326),9485=>array(262,-302,612,368),9486=>array(223,-302,612,326),9487=>array(223,-302,612,368),9488=>array(-10,-302,340,326),9489=>array(-10,-302,340,368),9490=>array(-10,-302,379,326),9491=>array(-10,-302,379,368),9492=>array(262,242,612,973),9493=>array(262,200,612,973),9494=>array(223,242,612,973),9495=>array(223,200,612,973),9496=>array(-10,242,340,973),9497=>array(-10,200,340,973),9498=>array(-10,242,379,973),9499=>array(-10,200,379,973),9500=>array(262,-302,612,973),9501=>array(262,-302,612,973),9502=>array(223,-302,612,973),9503=>array(223,-302,612,973),9504=>array(223,-302,612,973),9505=>array(223,-302,612,973),9506=>array(223,-302,612,973),9507=>array(223,-302,612,973),9508=>array(-10,-302,340,973),9509=>array(-10,-302,340,973),9510=>array(-10,-302,379,973),9511=>array(-10,-302,379,973),9512=>array(-10,-302,379,973),9513=>array(-10,-302,379,973),9514=>array(-10,-302,379,973),9515=>array(-10,-302,379,973),9516=>array(-10,-302,612,326),9517=>array(-10,-302,612,368),9518=>array(-10,-302,612,368),9519=>array(-10,-302,612,368),9520=>array(-10,-302,612,326),9521=>array(-10,-302,612,368),9522=>array(-10,-302,612,368),9523=>array(-10,-302,612,368),9524=>array(-10,242,612,973),9525=>array(-10,200,612,973),9526=>array(-10,200,612,973),9527=>array(-10,200,612,973),9528=>array(-10,242,612,973),9529=>array(-10,200,612,973),9530=>array(-10,200,612,973),9531=>array(-10,200,612,973),9532=>array(-10,-302,612,973),9533=>array(-10,-302,612,973),9534=>array(-10,-302,612,973),9535=>array(-10,-302,612,973),9536=>array(-10,-302,612,973),9537=>array(-10,-302,612,973),9538=>array(-10,-302,612,973),9539=>array(-10,-302,612,973),9540=>array(-10,-302,612,973),9541=>array(-10,-302,612,973),9542=>array(-10,-302,612,973),9543=>array(-10,-302,612,973),9544=>array(-10,-302,612,973),9545=>array(-10,-302,612,973),9546=>array(-10,-302,612,973),9547=>array(-10,-302,612,973),9548=>array(-10,242,612,326),9549=>array(-10,200,612,368),9550=>array(262,-302,340,973),9551=>array(223,-302,379,973),9552=>array(-10,158,612,410),9553=>array(184,-302,418,973),9554=>array(262,-302,612,410),9555=>array(184,-302,612,326),9556=>array(184,-302,612,410),9557=>array(-10,-302,340,410),9558=>array(-10,-302,418,326),9559=>array(-10,-302,418,410),9560=>array(262,158,612,973),9561=>array(184,242,612,973),9562=>array(184,158,612,973),9563=>array(-10,158,340,973),9564=>array(-10,242,418,973),9565=>array(-10,158,418,973),9566=>array(262,-302,612,973),9567=>array(184,-302,612,973),9568=>array(184,-302,612,973),9569=>array(-10,-302,340,973),9570=>array(-10,-302,418,973),9571=>array(-10,-302,418,973),9572=>array(-10,-302,612,410),9573=>array(-10,-302,612,326),9574=>array(-10,-302,612,410),9575=>array(-10,158,612,973),9576=>array(-10,242,612,973),9577=>array(-10,158,612,973),9578=>array(-10,-302,612,973),9579=>array(-10,-302,612,973),9580=>array(-10,-302,612,973),9581=>array(262,-302,612,326),9582=>array(-10,-302,340,326),9583=>array(-10,242,340,973),9584=>array(262,242,612,973),9585=>array(-53,-302,655,973),9586=>array(-53,-302,655,973),9587=>array(-53,-302,655,973),9588=>array(-10,242,311,326),9589=>array(262,284,340,973),9590=>array(311,242,612,326),9591=>array(262,-302,340,284),9592=>array(-10,200,311,368),9593=>array(223,284,379,973),9594=>array(311,200,612,368),9595=>array(223,-302,379,284),9596=>array(-10,200,612,368),9597=>array(223,-302,379,973),9598=>array(-10,200,612,368),9599=>array(223,-302,379,973),9600=>array(-10,260,779,770),9601=>array(-10,-250,779,-123),9602=>array(-10,-250,779,-5),9603=>array(-10,-250,779,132),9604=>array(-10,-250,779,260),9605=>array(-10,-250,779,387),9606=>array(-10,-250,779,515),9607=>array(-10,-250,779,642),9608=>array(-10,-250,779,770),9609=>array(-10,-250,680,770),9610=>array(-10,-250,582,770),9611=>array(-10,-250,483,770),9612=>array(-10,-250,384,770),9613=>array(-10,-250,286,770),9614=>array(-10,-250,187,770),9615=>array(-10,-250,88,770),9616=>array(384,-250,778,770),9617=>array(-10,-250,680,770),9618=>array(-10,-250,775,770),9619=>array(-10,-250,779,770),9620=>array(-10,642,779,770),9621=>array(680,-250,778,770),9622=>array(-10,-250,385,260),9623=>array(384,-250,779,260),9624=>array(-10,260,385,770),9625=>array(-10,-250,779,770),9626=>array(-10,-250,779,770),9627=>array(-10,-250,779,770),9628=>array(-10,-250,779,770),9629=>array(384,260,779,770),9630=>array(-10,-250,779,770),9631=>array(-10,-250,779,770),9632=>array(91,-123,854,643),9633=>array(91,-123,854,643),9634=>array(91,-123,854,643),9635=>array(91,-123,854,643),9636=>array(91,-123,854,643),9637=>array(91,-123,854,643),9638=>array(91,-123,854,643),9639=>array(91,-123,854,643),9640=>array(91,-123,854,643),9641=>array(91,-123,854,643),9642=>array(91,11,587,509),9643=>array(91,11,587,509),9644=>array(91,75,854,444),9645=>array(91,75,854,444),9646=>array(91,-122,459,642),9647=>array(91,-122,459,642),9648=>array(3,75,766,444),9649=>array(3,75,766,444),9650=>array(3,-123,766,643),9651=>array(3,-123,766,643),9652=>array(3,11,499,509),9653=>array(3,11,499,509),9654=>array(3,-123,766,643),9655=>array(3,-123,766,643),9656=>array(3,11,499,509),9657=>array(3,11,499,509),9658=>array(3,11,766,509),9659=>array(3,11,766,509),9660=>array(3,-123,766,643),9661=>array(3,-123,766,643),9662=>array(3,11,499,509),9663=>array(3,11,499,509),9664=>array(3,-123,766,643),9665=>array(3,-123,766,643),9666=>array(3,11,499,509),9667=>array(3,11,499,509),9668=>array(3,11,766,509),9669=>array(3,11,766,509),9670=>array(3,-123,766,643),9671=>array(3,-123,766,643),9672=>array(3,-123,766,643),9673=>array(55,-125,818,645),9674=>array(3,-233,491,807),9675=>array(55,-125,818,645),9676=>array(56,-125,817,644),9677=>array(55,-125,818,645),9678=>array(55,-125,818,645),9679=>array(55,-123,818,641),9680=>array(55,-123,818,641),9681=>array(55,-123,818,641),9682=>array(55,-123,818,641),9683=>array(55,-123,818,641),9684=>array(55,-123,818,641),9685=>array(55,-123,818,641),9686=>array(55,-125,436,645),9687=>array(91,-125,472,645),9688=>array(91,-10,700,770),9689=>array(91,-250,879,770),9690=>array(91,260,879,770),9691=>array(91,-250,879,260),9692=>array(3,260,384,645),9693=>array(3,260,384,645),9694=>array(3,-125,384,260),9695=>array(3,-125,384,260),9696=>array(55,260,818,645),9697=>array(55,-125,818,260),9698=>array(3,-123,766,643),9699=>array(3,-123,766,643),9700=>array(3,-123,766,643),9701=>array(3,-123,766,643),9702=>array(150,227,440,516),9703=>array(91,-123,854,643),9704=>array(91,-123,854,643),9705=>array(91,-123,854,643),9706=>array(91,-123,854,643),9707=>array(91,-123,854,643),9708=>array(3,-123,766,643),9709=>array(3,-123,766,643),9710=>array(3,-123,766,643),9711=>array(55,-250,1064,770),9712=>array(91,-123,854,643),9713=>array(91,-123,854,643),9714=>array(91,-123,854,643),9715=>array(91,-123,854,643),9716=>array(55,-123,818,641),9717=>array(55,-123,818,641),9718=>array(55,-123,818,641),9719=>array(55,-123,818,641),9720=>array(3,-123,766,643),9721=>array(3,-123,766,643),9722=>array(3,-123,766,643),9723=>array(91,-66,739,585),9724=>array(91,-66,739,585),9725=>array(91,-17,642,537),9726=>array(91,-17,642,537),9727=>array(3,-123,766,643),9728=>array(83,0,813,729),9729=>array(51,-2,949,360),9730=>array(49,0,848,729),9731=>array(83,-0,813,927),9732=>array(64,0,833,880),9733=>array(65,-4,832,723),9734=>array(65,-4,832,723),9735=>array(83,2,490,729),9736=>array(83,0,813,731),9737=>array(83,0,813,730),9738=>array(61,0,828,727),9739=>array(61,0,828,723),9740=>array(61,-1,610,722),9741=>array(61,0,952,723),9742=>array(68,0,1177,729),9743=>array(71,0,1180,729),9744=>array(90,0,807,729),9745=>array(89,0,808,729),9746=>array(89,0,808,729),9747=>array(75,78,457,656),9748=>array(49,0,870,933),9749=>array(74,0,822,731),9750=>array(84,0,813,731),9751=>array(84,0,813,727),9752=>array(78,0,819,729),9753=>array(83,140,813,574),9754=>array(84,113,813,569),9755=>array(84,113,813,569),9756=>array(87,104,810,569),9757=>array(72,0,537,724),9758=>array(86,103,810,569),9759=>array(72,-3,537,720),9760=>array(61,0,835,730),9761=>array(84,0,813,730),9762=>array(83,0,813,730),9763=>array(49,0,848,730),9764=>array(49,-2,620,727),9765=>array(83,0,663,731),9766=>array(83,-1,566,731),9767=>array(83,0,701,911),9768=>array(83,0,462,730),9769=>array(83,-1,813,729),9770=>array(87,0,810,730),9771=>array(83,0,814,731),9772=>array(83,0,627,731),9773=>array(83,0,813,730),9774=>array(83,0,813,730),9775=>array(83,0,813,730),9776=>array(83,0,813,729),9777=>array(83,0,814,729),9778=>array(83,0,813,729),9779=>array(83,0,813,729),9780=>array(83,0,813,729),9781=>array(83,0,813,729),9782=>array(83,0,813,729),9783=>array(83,0,813,729),9784=>array(66,-11,831,735),9785=>array(83,-73,959,804),9786=>array(83,-73,959,804),9787=>array(83,-73,959,804),9788=>array(83,0,813,730),9789=>array(358,0,814,730),9790=>array(83,0,539,730),9791=>array(85,-102,528,732),9792=>array(85,-125,647,731),9793=>array(85,-14,647,843),9794=>array(79,-14,831,720),9795=>array(166,0,730,730),9796=>array(219,0,677,730),9797=>array(121,0,774,730),9798=>array(127,0,769,730),9799=>array(240,0,656,730),9800=>array(45,0,851,731),9801=>array(89,0,807,730),9802=>array(94,0,802,731),9803=>array(113,31,784,679),9804=>array(140,0,756,730),9805=>array(53,-180,843,730),9806=>array(83,52,813,653),9807=>array(34,-96,863,730),9808=>array(83,-0,813,730),9809=>array(94,0,802,730),9810=>array(86,153,810,579),9811=>array(157,0,739,730),9812=>array(98,0,798,730),9813=>array(110,0,786,730),9814=>array(167,-1,729,729),9815=>array(214,0,683,730),9816=>array(165,0,732,730),9817=>array(148,-0,748,730),9818=>array(98,0,798,730),9819=>array(110,0,786,730),9820=>array(167,-1,729,729),9821=>array(214,0,683,730),9822=>array(162,0,734,730),9823=>array(148,-0,748,730),9824=>array(158,0,738,729),9825=>array(90,0,806,727),9826=>array(168,0,728,729),9827=>array(111,0,785,729),9828=>array(157,0,739,729),9829=>array(89,0,808,729),9830=>array(168,0,728,729),9831=>array(111,0,785,732),9832=>array(105,-1,791,729),9833=>array(84,-5,339,729),9834=>array(84,-5,554,729),9835=>array(184,-102,712,729),9836=>array(92,-5,804,729),9837=>array(88,-3,392,731),9838=>array(84,0,273,731),9839=>array(84,0,400,731),9840=>array(84,0,664,731),9841=>array(64,0,701,731),9842=>array(84,0,813,709),9843=>array(76,16,820,731),9844=>array(76,16,820,731),9845=>array(76,16,820,731),9846=>array(76,16,820,731),9847=>array(76,16,820,731),9848=>array(76,16,820,731),9849=>array(76,16,820,731),9850=>array(76,16,820,731),9851=>array(84,0,812,704),9852=>array(83,0,814,731),9853=>array(83,0,814,731),9854=>array(83,0,814,731),9855=>array(149,1,747,731),9856=>array(73,0,797,725),9857=>array(73,0,797,725),9858=>array(73,0,797,725),9859=>array(73,0,797,725),9860=>array(73,0,797,725),9861=>array(73,0,797,725),9862=>array(83,0,813,731),9863=>array(83,0,813,731),9864=>array(83,0,813,731),9865=>array(83,0,813,731),9866=>array(83,0,813,98),9867=>array(83,0,813,98),9868=>array(83,0,813,413),9869=>array(83,0,813,413),9870=>array(83,0,813,413),9871=>array(83,0,813,413),9872=>array(168,3,728,731),9873=>array(168,3,728,731),9874=>array(52,0,844,731),9875=>array(97,-10,799,732),9876=>array(131,0,765,729),9877=>array(61,-10,479,732),9878=>array(59,-10,837,732),9879=>array(61,0,835,732),9880=>array(145,0,750,732),9881=>array(95,-17,802,727),9882=>array(128,-9,768,733),9883=>array(127,0,769,728),9884=>array(127,0,769,729),9888=>array(49,0,848,729),9889=>array(83,2,619,730),9890=>array(85,-125,919,731),9891=>array(79,-206,1023,720),9892=>array(85,-186,1109,856),9893=>array(85,-125,837,917),9894=>array(131,-14,727,869),9895=>array(101,-170,741,884),9896=>array(188,-14,650,869),9897=>array(4,133,829,596),9898=>array(187,133,651,596),9899=>array(187,133,651,596),9900=>array(247,194,591,537),9901=>array(174,194,664,537),9902=>array(41,169,797,560),9903=>array(5,194,833,536),9904=>array(103,237,757,540),9905=>array(211,42,626,698),9906=>array(85,-125,647,731),9907=>array(168,-125,646,731),9908=>array(86,-125,646,731),9909=>array(86,-125,646,731),9910=>array(59,-118,791,643),9911=>array(194,-104,595,710),9912=>array(158,-125,543,731),9920=>array(42,4,796,553),9921=>array(42,4,796,724),9922=>array(42,4,796,553),9923=>array(42,4,796,724),9954=>array(85,-14,647,843),9985=>array(11,190,803,635),9986=>array(42,141,784,588),9987=>array(11,94,803,539),9988=>array(36,119,824,613),9990=>array(42,-14,796,742),9991=>array(42,-14,796,742),9992=>array(59,21,782,708),9993=>array(64,107,773,622),9996=>array(212,0,561,742),9997=>array(21,83,802,678),9998=>array(89,75,724,710),9999=>array(26,198,819,530),10000=>array(89,75,724,710),10001=>array(43,185,757,544),10002=>array(67,209,757,520),10003=>array(150,97,667,630),10004=>array(116,87,721,631),10005=>array(126,72,711,657),10006=>array(85,31,752,698),10007=>array(118,-9,701,732),10008=>array(123,0,754,739),10009=>array(55,0,783,729),10010=>array(55,0,783,729),10011=>array(55,0,783,729),10012=>array(55,0,783,729),10013=>array(165,0,673,729),10014=>array(131,0,678,729),10015=>array(155,0,683,729),10016=>array(55,0,783,729),10017=>array(91,-13,747,744),10018=>array(41,-14,797,742),10019=>array(42,-12,796,742),10020=>array(41,-14,797,742),10021=>array(41,-13,797,743),10022=>array(42,-14,796,745),10023=>array(42,-14,796,745),10025=>array(23,-10,815,744),10026=>array(42,-14,796,742),10027=>array(23,-9,814,743),10028=>array(23,-10,815,744),10029=>array(23,-9,814,743),10030=>array(23,-9,814,743),10031=>array(23,-9,814,743),10032=>array(24,12,815,714),10033=>array(64,0,773,729),10034=>array(74,0,764,729),10035=>array(55,0,783,729),10036=>array(31,-14,787,742),10037=>array(41,-14,797,742),10038=>array(91,-14,747,742),10039=>array(41,-14,797,742),10040=>array(41,-14,797,742),10041=>array(41,-14,797,742),10042=>array(55,0,783,729),10043=>array(82,-14,756,742),10044=>array(82,-14,756,742),10045=>array(79,-14,759,742),10046=>array(79,-14,759,742),10047=>array(54,0,784,709),10048=>array(54,0,784,709),10049=>array(41,-14,797,742),10050=>array(42,-14,796,742),10051=>array(79,-14,759,742),10052=>array(89,0,749,729),10053=>array(76,0,762,729),10054=>array(63,2,773,729),10055=>array(79,-13,759,742),10056=>array(47,-13,791,730),10057=>array(47,-13,791,730),10058=>array(41,-13,797,743),10059=>array(41,-13,797,743),10061=>array(50,-10,847,738),10063=>array(60,-49,837,729),10064=>array(60,0,837,777),10065=>array(60,-49,837,729),10066=>array(60,0,837,777),10070=>array(83,-2,813,728),10072=>array(377,-240,460,760),10073=>array(336,-240,502,760),10074=>array(253,-240,585,760),10075=>array(85,395,264,729),10076=>array(59,395,237,729),10077=>array(85,395,479,729),10078=>array(59,395,453,729),10081=>array(155,-93,772,851),10082=>array(202,-17,636,742),10083=>array(163,-17,675,742),10084=>array(54,83,784,645),10085=>array(168,-1,729,729),10086=>array(62,21,724,702),10087=>array(78,169,759,564),10088=>array(196,-139,648,769),10089=>array(196,-139,648,769),10090=>array(264,-132,574,758),10091=>array(264,-132,574,758),10092=>array(215,-240,607,760),10093=>array(232,-240,623,760),10094=>array(142,-240,685,760),10095=>array(153,-240,696,760),10096=>array(167,-240,656,760),10097=>array(183,-240,672,760),10098=>array(346,-241,535,760),10099=>array(303,-241,492,760),10100=>array(175,-163,634,760),10101=>array(204,-163,663,760),10102=>array(74,-10,822,738),10103=>array(74,-10,822,738),10104=>array(74,-10,822,738),10105=>array(74,-10,822,738),10106=>array(74,-10,822,738),10107=>array(74,-10,822,738),10108=>array(74,-10,822,738),10109=>array(74,-10,822,738),10110=>array(74,-10,822,738),10111=>array(74,-10,822,738),10112=>array(4,-52,833,780),10113=>array(4,-52,833,780),10114=>array(4,-52,833,780),10115=>array(4,-52,833,780),10116=>array(4,-52,833,780),10117=>array(4,-52,833,780),10118=>array(4,-52,833,780),10119=>array(4,-52,833,780),10120=>array(4,-52,833,780),10121=>array(4,-52,833,780),10122=>array(4,-52,833,780),10123=>array(4,-52,833,780),10124=>array(4,-52,833,780),10125=>array(4,-52,833,780),10126=>array(4,-52,833,780),10127=>array(4,-52,833,780),10128=>array(4,-52,833,780),10129=>array(4,-52,833,780),10130=>array(4,-52,833,780),10131=>array(4,-52,833,780),10132=>array(57,75,789,552),10136=>array(123,55,682,614),10137=>array(57,100,789,527),10138=>array(123,13,682,572),10139=>array(57,129,789,498),10140=>array(57,57,764,570),10141=>array(57,100,789,527),10142=>array(57,100,789,527),10143=>array(57,100,789,527),10144=>array(57,100,789,527),10145=>array(57,65,811,562),10146=>array(111,94,789,533),10147=>array(111,94,789,533),10148=>array(111,-4,789,631),10149=>array(57,100,789,548),10150=>array(57,79,789,527),10151=>array(240,-7,606,634),10152=>array(57,100,789,527),10153=>array(57,75,765,552),10154=>array(57,75,765,552),10155=>array(21,12,794,586),10156=>array(21,12,794,586),10157=>array(135,0,774,574),10158=>array(135,0,774,574),10159=>array(62,49,799,574),10161=>array(62,49,799,574),10162=>array(154,-20,721,585),10163=>array(63,157,789,470),10164=>array(81,55,682,655),10165=>array(57,173,789,454),10166=>array(82,-29,682,572),10167=>array(82,55,682,655),10168=>array(57,172,789,455),10169=>array(82,-28,682,572),10170=>array(56,84,789,543),10171=>array(73,140,779,487),10172=>array(79,167,774,460),10173=>array(79,118,774,509),10174=>array(57,81,789,546),10181=>array(54,-163,352,769),10182=>array(39,-163,336,769),10208=>array(3,-233,491,807),10214=>array(86,-132,398,760),10215=>array(85,-132,398,760),10216=>array(89,-132,310,759),10217=>array(80,-132,301,759),10218=>array(89,-132,476,759),10219=>array(80,-132,467,759),10224=>array(44,0,794,732),10225=>array(43,-3,793,729),10226=>array(39,53,814,658),10227=>array(39,61,814,666),10228=>array(57,-14,1108,643),10229=>array(49,100,1376,527),10230=>array(57,100,1385,527),10231=>array(49,100,1385,527),10232=>array(49,100,1376,527),10233=>array(57,100,1385,527),10234=>array(49,100,1385,527),10235=>array(49,100,1376,527),10236=>array(57,100,1385,527),10237=>array(49,100,1376,527),10238=>array(57,100,1385,527),10239=>array(57,100,1385,527),10241=>array(146,635,293,781),10242=>array(146,358,293,504),10243=>array(146,358,293,781),10244=>array(146,82,293,228),10245=>array(146,82,293,781),10246=>array(146,82,293,504),10247=>array(146,82,293,781),10248=>array(439,635,586,781),10249=>array(146,635,586,781),10250=>array(146,358,586,781),10251=>array(146,358,586,781),10252=>array(146,82,586,781),10253=>array(146,82,586,781),10254=>array(146,82,586,781),10255=>array(146,82,586,781),10256=>array(439,358,586,504),10257=>array(146,358,586,781),10258=>array(146,358,586,504),10259=>array(146,358,586,781),10260=>array(146,82,586,504),10261=>array(146,82,586,781),10262=>array(146,82,586,504),10263=>array(146,82,586,781),10264=>array(439,358,586,781),10265=>array(146,358,586,781),10266=>array(146,358,586,781),10267=>array(146,358,586,781),10268=>array(146,82,586,781),10269=>array(146,82,586,781),10270=>array(146,82,586,781),10271=>array(146,82,586,781),10272=>array(439,82,586,228),10273=>array(146,82,586,781),10274=>array(146,82,586,504),10275=>array(146,82,586,781),10276=>array(146,82,586,228),10277=>array(146,82,586,781),10278=>array(146,82,586,504),10279=>array(146,82,586,781),10280=>array(439,82,586,781),10281=>array(146,82,586,781),10282=>array(146,82,586,781),10283=>array(146,82,586,781),10284=>array(146,82,586,781),10285=>array(146,82,586,781),10286=>array(146,82,586,781),10287=>array(146,82,586,781),10288=>array(439,82,586,504),10289=>array(146,82,586,781),10290=>array(146,82,586,504),10291=>array(146,82,586,781),10292=>array(146,82,586,504),10293=>array(146,82,586,781),10294=>array(146,82,586,504),10295=>array(146,82,586,781),10296=>array(439,82,586,781),10297=>array(146,82,586,781),10298=>array(146,82,586,781),10299=>array(146,82,586,781),10300=>array(146,82,586,781),10301=>array(146,82,586,781),10302=>array(146,82,586,781),10303=>array(146,82,586,781),10304=>array(146,-195,293,-49),10305=>array(146,-195,293,781),10306=>array(146,-195,293,504),10307=>array(146,-195,293,781),10308=>array(146,-195,293,228),10309=>array(146,-195,293,781),10310=>array(146,-195,293,504),10311=>array(146,-195,293,781),10312=>array(146,-195,586,781),10313=>array(146,-195,586,781),10314=>array(146,-195,586,781),10315=>array(146,-195,586,781),10316=>array(146,-195,586,781),10317=>array(146,-195,586,781),10318=>array(146,-195,586,781),10319=>array(146,-195,586,781),10320=>array(146,-195,586,504),10321=>array(146,-195,586,781),10322=>array(146,-195,586,504),10323=>array(146,-195,586,781),10324=>array(146,-195,586,504),10325=>array(146,-195,586,781),10326=>array(146,-195,586,504),10327=>array(146,-195,586,781),10328=>array(146,-195,586,781),10329=>array(146,-195,586,781),10330=>array(146,-195,586,781),10331=>array(146,-195,586,781),10332=>array(146,-195,586,781),10333=>array(146,-195,586,781),10334=>array(146,-195,586,781),10335=>array(146,-195,586,781),10336=>array(146,-195,586,228),10337=>array(146,-195,586,781),10338=>array(146,-195,586,504),10339=>array(146,-195,586,781),10340=>array(146,-195,586,228),10341=>array(146,-195,586,781),10342=>array(146,-195,586,504),10343=>array(146,-195,586,781),10344=>array(146,-195,586,781),10345=>array(146,-195,586,781),10346=>array(146,-195,586,781),10347=>array(146,-195,586,781),10348=>array(146,-195,586,781),10349=>array(146,-195,586,781),10350=>array(146,-195,586,781),10351=>array(146,-195,586,781),10352=>array(146,-195,586,504),10353=>array(146,-195,586,781),10354=>array(146,-195,586,504),10355=>array(146,-195,586,781),10356=>array(146,-195,586,504),10357=>array(146,-195,586,781),10358=>array(146,-195,586,504),10359=>array(146,-195,586,781),10360=>array(146,-195,586,781),10361=>array(146,-195,586,781),10362=>array(146,-195,586,781),10363=>array(146,-195,586,781),10364=>array(146,-195,586,781),10365=>array(146,-195,586,781),10366=>array(146,-195,586,781),10367=>array(146,-195,586,781),10368=>array(439,-195,586,-49),10369=>array(146,-195,586,781),10370=>array(146,-195,586,504),10371=>array(146,-195,586,781),10372=>array(146,-195,586,228),10373=>array(146,-195,586,781),10374=>array(146,-195,586,504),10375=>array(146,-195,586,781),10376=>array(439,-195,586,781),10377=>array(146,-195,586,781),10378=>array(146,-195,586,781),10379=>array(146,-195,586,781),10380=>array(146,-195,586,781),10381=>array(146,-195,586,781),10382=>array(146,-195,586,781),10383=>array(146,-195,586,781),10384=>array(439,-195,586,504),10385=>array(146,-195,586,781),10386=>array(146,-195,586,504),10387=>array(146,-195,586,781),10388=>array(146,-195,586,504),10389=>array(146,-195,586,781),10390=>array(146,-195,586,504),10391=>array(146,-195,586,781),10392=>array(439,-195,586,781),10393=>array(146,-195,586,781),10394=>array(146,-195,586,781),10395=>array(146,-195,586,781),10396=>array(146,-195,586,781),10397=>array(146,-195,586,781),10398=>array(146,-195,586,781),10399=>array(146,-195,586,781),10400=>array(439,-195,586,228),10401=>array(146,-195,586,781),10402=>array(146,-195,586,504),10403=>array(146,-195,586,781),10404=>array(146,-195,586,228),10405=>array(146,-195,586,781),10406=>array(146,-195,586,504),10407=>array(146,-195,586,781),10408=>array(439,-195,586,781),10409=>array(146,-195,586,781),10410=>array(146,-195,586,781),10411=>array(146,-195,586,781),10412=>array(146,-195,586,781),10413=>array(146,-195,586,781),10414=>array(146,-195,586,781),10415=>array(146,-195,586,781),10416=>array(439,-195,586,504),10417=>array(146,-195,586,781),10418=>array(146,-195,586,504),10419=>array(146,-195,586,781),10420=>array(146,-195,586,504),10421=>array(146,-195,586,781),10422=>array(146,-195,586,504),10423=>array(146,-195,586,781),10424=>array(439,-195,586,781),10425=>array(146,-195,586,781),10426=>array(146,-195,586,781),10427=>array(146,-195,586,781),10428=>array(146,-195,586,781),10429=>array(146,-195,586,781),10430=>array(146,-195,586,781),10431=>array(146,-195,586,781),10432=>array(146,-195,586,-49),10433=>array(146,-195,586,781),10434=>array(146,-195,586,504),10435=>array(146,-195,586,781),10436=>array(146,-195,586,228),10437=>array(146,-195,586,781),10438=>array(146,-195,586,504),10439=>array(146,-195,586,781),10440=>array(146,-195,586,781),10441=>array(146,-195,586,781),10442=>array(146,-195,586,781),10443=>array(146,-195,586,781),10444=>array(146,-195,586,781),10445=>array(146,-195,586,781),10446=>array(146,-195,586,781),10447=>array(146,-195,586,781),10448=>array(146,-195,586,504),10449=>array(146,-195,586,781),10450=>array(146,-195,586,504),10451=>array(146,-195,586,781),10452=>array(146,-195,586,504),10453=>array(146,-195,586,781),10454=>array(146,-195,586,504),10455=>array(146,-195,586,781),10456=>array(146,-195,586,781),10457=>array(146,-195,586,781),10458=>array(146,-195,586,781),10459=>array(146,-195,586,781),10460=>array(146,-195,586,781),10461=>array(146,-195,586,781),10462=>array(146,-195,586,781),10463=>array(146,-195,586,781),10464=>array(146,-195,586,228),10465=>array(146,-195,586,781),10466=>array(146,-195,586,504),10467=>array(146,-195,586,781),10468=>array(146,-195,586,228),10469=>array(146,-195,586,781),10470=>array(146,-195,586,504),10471=>array(146,-195,586,781),10472=>array(146,-195,586,781),10473=>array(146,-195,586,781),10474=>array(146,-195,586,781),10475=>array(146,-195,586,781),10476=>array(146,-195,586,781),10477=>array(146,-195,586,781),10478=>array(146,-195,586,781),10479=>array(146,-195,586,781),10480=>array(146,-195,586,504),10481=>array(146,-195,586,781),10482=>array(146,-195,586,504),10483=>array(146,-195,586,781),10484=>array(146,-195,586,504),10485=>array(146,-195,586,781),10486=>array(146,-195,586,504),10487=>array(146,-195,586,781),10488=>array(146,-195,586,781),10489=>array(146,-195,586,781),10490=>array(146,-195,586,781),10491=>array(146,-195,586,781),10492=>array(146,-195,586,781),10493=>array(146,-195,586,781),10494=>array(146,-195,586,781),10495=>array(146,-195,586,781),10502=>array(49,100,781,527),10503=>array(57,100,789,527),10506=>array(125,0,713,732),10507=>array(125,-3,713,729),10560=>array(39,63,644,838),10561=>array(39,63,644,838),10627=>array(125,-163,609,760),10628=>array(125,-163,609,760),10702=>array(106,-226,732,747),10703=>array(106,15,894,612),10704=>array(106,15,894,612),10705=>array(106,-30,894,657),10706=>array(106,-30,894,657),10707=>array(106,-30,894,657),10708=>array(106,-30,894,657),10709=>array(106,-30,894,657),10731=>array(3,-233,491,807),10746=>array(106,0,732,627),10747=>array(106,0,732,627),10752=>array(28,-198,972,748),10753=>array(28,-198,972,748),10754=>array(28,-198,972,748),10764=>array(57,-212,1268,757),10765=>array(57,-212,464,757),10766=>array(57,-212,464,757),10767=>array(57,-212,464,757),10768=>array(57,-212,464,757),10769=>array(57,-212,522,757),10770=>array(57,-212,464,757),10771=>array(57,-212,464,757),10772=>array(57,-212,555,757),10773=>array(57,-212,464,757),10774=>array(57,-212,464,757),10775=>array(-32,-212,553,757),10776=>array(57,-212,464,757),10777=>array(57,-212,464,757),10778=>array(57,-212,464,757),10779=>array(57,-212,469,872),10780=>array(52,-327,464,757),10799=>array(137,31,701,596),10858=>array(106,228,732,552),10859=>array(106,78,732,552),10877=>array(106,-123,732,581),10878=>array(106,-123,732,581),10879=>array(106,-123,733,581),10880=>array(106,-123,732,581),10881=>array(106,-123,732,644),10882=>array(106,-123,732,644),10883=>array(106,-123,733,759),10884=>array(106,-123,732,756),10885=>array(106,-132,732,663),10886=>array(106,-132,732,663),10887=>array(106,-121,732,582),10888=>array(106,-121,732,582),10889=>array(106,-204,732,663),10890=>array(106,-204,732,663),10891=>array(106,-311,732,791),10892=>array(106,-311,732,791),10893=>array(106,-124,732,663),10894=>array(106,-124,732,663),10895=>array(106,-241,732,756),10896=>array(106,-241,732,756),10897=>array(106,-229,732,730),10898=>array(106,-229,732,730),10899=>array(106,-224,732,741),10900=>array(106,-224,732,741),10901=>array(106,-61,732,644),10902=>array(106,-61,732,644),10903=>array(106,-61,733,644),10904=>array(106,-61,732,644),10905=>array(106,-36,732,685),10906=>array(106,-36,732,685),10907=>array(106,-31,732,725),10908=>array(106,-31,732,725),10909=>array(106,8,732,645),10910=>array(106,23,732,645),10911=>array(106,-176,732,729),10912=>array(106,-176,732,729),10926=>array(106,50,732,601),10927=>array(106,-24,732,667),10928=>array(106,-24,732,667),10929=>array(106,-145,732,667),10930=>array(106,-145,732,667),10931=>array(106,-121,732,662),10932=>array(106,-121,732,662),10933=>array(106,-195,732,662),10934=>array(106,-195,732,662),10935=>array(106,-191,732,693),10936=>array(106,-191,732,693),10937=>array(106,-259,732,693),10938=>array(106,-259,732,693),11001=>array(106,-171,732,585),11002=>array(106,-171,732,585),11008=>array(88,-27,703,587),11009=>array(141,-27,755,587),11010=>array(88,25,703,640),11011=>array(141,25,755,640),11012=>array(27,65,789,562),11013=>array(27,65,781,562),11014=>array(171,0,667,754),11015=>array(171,-25,667,729),11016=>array(88,-27,703,587),11017=>array(141,-27,755,587),11018=>array(88,25,703,640),11019=>array(141,25,755,640),11020=>array(27,65,789,562),11021=>array(171,-25,667,754),11022=>array(57,-3,790,355),11023=>array(57,272,790,630),11024=>array(35,-3,768,355),11025=>array(35,272,768,630),11026=>array(91,-123,854,643),11027=>array(91,-123,854,643),11028=>array(91,-123,854,643),11029=>array(91,-123,854,643),11030=>array(3,-123,766,643),11031=>array(3,-123,766,643),11032=>array(3,-123,766,643),11033=>array(3,-123,766,643),11034=>array(91,-123,854,643),11039=>array(18,-26,852,767),11040=>array(18,-26,852,767),11041=>array(73,-91,800,748),11042=>array(73,-91,800,748),11043=>array(17,-35,856,692),11044=>array(55,-250,1064,770),11091=>array(38,-47,832,788),11092=>array(38,-47,832,788),11360=>array(5,0,552,729),11361=>array(5,0,271,760),11362=>array(-20,0,552,729),11363=>array(5,0,569,729),11364=>array(98,-200,666,729),11365=>array(35,-46,576,592),11366=>array(-12,-93,384,822),11367=>array(98,-157,752,729),11368=>array(91,-138,639,760),11369=>array(98,-157,677,729),11370=>array(91,-138,576,760),11371=>array(45,-157,738,729),11372=>array(43,-138,572,547),11373=>array(56,-14,683,743),11374=>array(98,-200,765,729),11375=>array(8,0,676,729),11376=>array(56,-14,683,743),11377=>array(30,0,734,560),11378=>array(33,0,1128,742),11379=>array(42,0,961,560),11380=>array(51,0,562,587),11381=>array(98,0,555,729),11382=>array(94,0,477,547),11383=>array(55,-12,602,551),11385=>array(0,-13,320,760),11386=>array(55,-14,557,560),11387=>array(48,0,400,547),11388=>array(-11,-117,116,425),11389=>array(5,326,426,734),11390=>array(66,-242,598,742),11391=>array(45,-242,640,729),11520=>array(60,-63,544,547),11521=>array(24,-235,556,546),11522=>array(39,-235,535,546),11523=>array(62,-10,572,807),11524=>array(51,-235,537,546),11525=>array(39,-236,862,546),11526=>array(0,-8,575,816),11527=>array(53,0,900,546),11528=>array(69,0,542,546),11529=>array(51,-235,556,816),11530=>array(39,0,903,546),11531=>array(53,-8,595,816),11532=>array(39,0,544,816),11533=>array(51,0,887,546),11534=>array(51,0,556,546),11535=>array(69,-235,767,816),11536=>array(51,0,880,816),11537=>array(51,0,545,816),11538=>array(50,-235,536,546),11539=>array(51,-235,884,661),11540=>array(60,-235,892,546),11541=>array(49,-235,784,816),11542=>array(39,0,545,546),11543=>array(51,-235,556,547),11544=>array(51,-235,551,546),11545=>array(39,-235,541,816),11546=>array(42,-235,532,547),11547=>array(60,-9,596,816),11548=>array(39,-235,870,547),11549=>array(29,-235,545,546),11550=>array(47,-235,547,546),11551=>array(34,-235,547,567),11552=>array(39,0,875,546),11553=>array(49,-235,544,816),11554=>array(60,0,538,626),11555=>array(61,-235,553,816),11556=>array(51,-235,603,546),11557=>array(60,-8,841,816),11568=>array(55,-14,591,380),11569=>array(56,-14,832,742),11570=>array(56,-14,832,742),11571=>array(31,0,651,729),11572=>array(33,0,652,729),11573=>array(31,0,604,729),11574=>array(73,0,488,729),11575=>array(8,0,676,729),11576=>array(8,0,676,729),11577=>array(98,0,568,729),11578=>array(64,0,534,729),11579=>array(73,-14,609,742),11580=>array(107,0,811,729),11581=>array(45,0,665,729),11582=>array(73,0,437,729),11583=>array(45,0,665,729),11584=>array(56,-14,832,742),11585=>array(56,-52,832,781),11586=>array(73,0,197,729),11587=>array(20,0,610,729),11588=>array(98,0,654,729),11589=>array(30,0,654,729),11590=>array(73,0,454,729),11591=>array(45,0,629,729),11592=>array(73,301,571,426),11593=>array(98,0,568,729),11594=>array(54,0,448,729),11595=>array(54,-15,899,742),11596=>array(54,0,725,729),11597=>array(98,0,650,729),11598=>array(100,0,566,729),11599=>array(98,0,197,729),11600=>array(54,0,725,729),11601=>array(98,0,198,729),11602=>array(78,-14,705,729),11603=>array(48,-14,584,742),11604=>array(56,-14,832,742),11605=>array(56,-54,832,742),11606=>array(98,0,654,729),11607=>array(98,0,222,729),11608=>array(73,0,676,729),11609=>array(56,-14,832,742),11610=>array(56,-14,832,780),11611=>array(56,-14,681,742),11612=>array(49,0,719,729),11613=>array(30,0,654,729),11614=>array(56,-14,681,742),11615=>array(98,0,568,729),11616=>array(8,0,676,729),11617=>array(98,0,654,729),11618=>array(98,0,559,729),11619=>array(56,0,732,729),11620=>array(98,0,495,729),11621=>array(56,0,732,729),11631=>array(26,522,489,729),11800=>array(70,-14,459,728),11806=>array(106,78,732,399),11810=>array(86,403,293,760),11811=>array(97,403,304,760),11812=>array(86,-132,293,225),11813=>array(97,-132,304,225),11822=>array(72,0,461,742),19904=>array(83,-158,813,729),19905=>array(83,-158,813,729),19906=>array(83,-158,813,729),19907=>array(83,-158,813,729),19908=>array(83,-158,813,729),19909=>array(83,-158,813,729),19910=>array(83,-158,813,729),19911=>array(83,-158,813,729),19912=>array(83,-158,813,729),19913=>array(83,-158,814,729),19914=>array(83,-158,813,729),19915=>array(83,-158,813,729),19916=>array(83,-158,813,729),19917=>array(83,-158,813,729),19918=>array(83,-158,813,729),19919=>array(83,-158,813,729),19920=>array(83,-158,814,729),19921=>array(83,-158,813,729),19922=>array(83,-158,814,729),19923=>array(83,-158,813,729),19924=>array(83,-158,813,729),19925=>array(83,-158,813,729),19926=>array(83,-158,813,729),19927=>array(83,-158,813,729),19928=>array(83,-158,813,729),19929=>array(83,-158,813,729),19930=>array(83,-158,813,729),19931=>array(83,-158,814,729),19932=>array(83,-158,813,729),19933=>array(83,-158,813,729),19934=>array(83,-158,814,729),19935=>array(83,-158,813,729),19936=>array(83,-158,813,729),19937=>array(83,-158,813,729),19938=>array(83,-158,813,729),19939=>array(83,-158,813,729),19940=>array(83,-158,813,729),19941=>array(83,-158,814,729),19942=>array(83,-158,813,729),19943=>array(83,-158,813,729),19944=>array(83,-158,814,729),19945=>array(83,-158,813,729),19946=>array(83,-158,814,729),19947=>array(83,-158,813,729),19948=>array(83,-158,814,729),19949=>array(83,-158,813,729),19950=>array(83,-158,814,729),19951=>array(83,-158,813,729),19952=>array(83,-158,814,729),19953=>array(83,-158,813,729),19954=>array(83,-158,813,729),19955=>array(83,-158,813,729),19956=>array(83,-158,813,729),19957=>array(83,-158,814,729),19958=>array(83,-158,813,729),19959=>array(83,-158,813,729),19960=>array(83,-158,813,729),19961=>array(83,-158,814,729),19962=>array(83,-158,813,729),19963=>array(83,-158,814,729),19964=>array(83,-158,814,729),19965=>array(83,-158,813,729),19966=>array(83,-158,813,729),19967=>array(83,-158,813,729),42192=>array(98,0,615,729),42193=>array(98,0,569,729),42194=>array(34,0,505,729),42195=>array(98,0,711,729),42196=>array(-3,0,614,729),42197=>array(-3,0,614,729),42198=>array(56,-14,693,742),42199=>array(98,0,677,729),42200=>array(-21,0,558,729),42201=>array(0,-14,414,729),42202=>array(56,-14,644,742),42203=>array(56,-14,644,742),42204=>array(45,0,640,729),42205=>array(98,0,517,729),42206=>array(98,0,517,729),42207=>array(98,0,765,729),42208=>array(98,0,650,729),42209=>array(98,0,552,729),42210=>array(66,-14,579,742),42211=>array(98,0,666,729),42212=>array(29,0,597,729),42213=>array(8,0,676,729),42214=>array(8,0,676,729),42215=>array(98,0,654,729),42216=>array(80,-14,716,742),42217=>array(98,0,512,743),42218=>array(33,0,956,729),42219=>array(30,0,654,729),42220=>array(-2,0,613,729),42221=>array(71,0,588,729),42222=>array(8,0,676,729),42223=>array(8,0,676,729),42224=>array(98,0,568,729),42225=>array(64,0,534,729),42226=>array(98,0,197,729),42227=>array(56,-14,731,742),42228=>array(87,-14,645,729),42229=>array(87,0,645,743),42230=>array(4,0,458,729),42231=>array(56,0,669,729),42232=>array(85,0,214,155),42233=>array(71,-156,214,155),42234=>array(85,0,511,155),42235=>array(85,-156,511,155),42236=>array(71,-156,214,517),42237=>array(85,0,214,517),42238=>array(85,0,502,354),42239=>array(85,172,502,454),42564=>array(56,-14,569,742),42565=>array(49,-14,467,560),42566=>array(98,0,347,729),42567=>array(81,0,304,547),42572=>array(58,-14,1122,645),42573=>array(74,-14,954,471),42576=>array(29,0,931,729),42577=>array(30,0,817,560),42580=>array(56,-14,977,742),42581=>array(55,-14,748,560),42582=>array(103,0,968,729),42583=>array(94,-14,752,560),42594=>array(49,-157,1004,729),42595=>array(52,-138,863,547),42596=>array(41,0,1008,729),42597=>array(37,0,852,547),42598=>array(98,0,1120,729),42599=>array(91,0,959,547),42600=>array(56,-14,731,742),42601=>array(55,-14,557,560),42602=>array(56,-14,799,742),42603=>array(55,-14,658,560),42604=>array(56,-14,1302,742),42605=>array(55,-14,964,560),42606=>array(28,-208,851,743),42634=>array(-3,-200,758,729),42635=>array(29,-208,660,547),42636=>array(-3,0,614,729),42637=>array(29,0,553,547),42644=>array(85,0,587,729),42645=>array(91,0,549,760),42760=>array(104,0,389,668),42761=>array(104,0,389,668),42762=>array(104,0,389,668),42763=>array(104,0,389,668),42764=>array(104,0,389,668),42765=>array(104,0,389,668),42766=>array(104,0,389,668),42767=>array(104,0,389,668),42768=>array(104,0,389,668),42769=>array(104,0,389,668),42770=>array(104,0,389,668),42771=>array(104,0,389,668),42772=>array(104,0,389,668),42773=>array(104,0,389,668),42774=>array(104,0,389,668),42779=>array(50,326,319,736),42780=>array(50,324,319,734),42781=>array(95,326,158,734),42782=>array(95,326,158,734),42783=>array(95,0,158,408),42786=>array(67,0,350,729),42787=>array(67,0,321,547),42788=>array(56,224,411,742),42789=>array(56,42,411,560),42790=>array(98,-200,654,729),42791=>array(91,-208,549,760),42792=>array(-3,-213,819,729),42793=>array(27,-213,650,702),42794=>array(80,-14,560,742),42795=>array(65,-200,473,561),42800=>array(91,0,437,547),42801=>array(54,-14,472,560),42802=>array(8,0,1241,729),42803=>array(60,-14,894,560),42804=>array(8,-14,1147,742),42805=>array(60,-14,935,560),42806=>array(8,-14,1055,729),42807=>array(60,-14,890,560),42808=>array(8,0,963,729),42809=>array(60,-14,788,560),42810=>array(8,0,963,729),42811=>array(60,-14,788,560),42812=>array(8,-208,951,729),42813=>array(60,-208,788,560),42814=>array(56,-14,644,742),42815=>array(62,-14,495,560),42816=>array(5,0,677,729),42817=>array(7,0,580,760),42822=>array(98,0,675,729),42823=>array(94,0,298,760),42824=>array(41,0,576,729),42825=>array(59,0,368,760),42826=>array(5,-14,802,742),42827=>array(5,-14,694,560),42830=>array(56,-14,1302,742),42831=>array(55,-14,964,560),42832=>array(5,0,569,729),42833=>array(-2,-208,580,560),42834=>array(24,0,700,729),42835=>array(24,-208,720,560),42838=>array(56,-178,731,742),42839=>array(55,-208,637,560),42852=>array(5,0,569,729),42853=>array(-2,-208,580,760),42854=>array(5,0,569,729),42855=>array(-2,-208,580,760),42880=>array(5,0,459,729),42881=>array(94,-208,184,560),42882=>array(98,-208,637,742),42883=>array(91,-208,549,560),42889=>array(117,0,220,517),42890=>array(78,161,298,380),42891=>array(151,235,250,729),42892=>array(96,458,179,729),42893=>array(85,0,587,729),42894=>array(38,-208,416,760),42896=>array(98,-157,733,729),42897=>array(91,-138,621,560),42912=>array(2,-14,778,742),42913=>array(2,-208,633,560),42914=>array(2,0,677,729),42915=>array(2,0,577,760),42916=>array(2,0,746,729),42917=>array(2,0,633,560),42918=>array(2,0,693,729),42919=>array(2,0,411,560),42920=>array(2,-14,633,742),42921=>array(2,-14,519,560),42922=>array(-51,0,703,729),43002=>array(91,0,824,547),43003=>array(58,0,477,729),43004=>array(34,0,505,729),43005=>array(98,0,765,729),43006=>array(98,0,197,928),43007=>array(33,0,1167,729),61184=>array(95,602,323,668),61185=>array(69,451,342,668),61186=>array(54,301,361,668),61187=>array(47,150,368,668),61188=>array(44,0,372,668),61189=>array(69,451,342,668),61190=>array(95,451,323,518),61191=>array(69,301,342,518),61192=>array(54,150,361,518),61193=>array(47,0,368,518),61194=>array(54,301,361,668),61195=>array(69,301,342,518),61196=>array(95,301,323,367),61197=>array(69,150,342,367),61198=>array(54,0,361,367),61199=>array(47,150,368,668),61200=>array(54,150,361,518),61201=>array(69,150,342,367),61202=>array(95,150,323,217),61203=>array(69,0,342,217),61204=>array(44,0,372,668),61205=>array(47,0,368,518),61206=>array(54,0,361,367),61207=>array(69,0,342,217),61208=>array(95,0,323,66),61209=>array(104,0,171,668),61440=>array(73,0,903,732),61441=>array(73,0,903,732),61442=>array(73,0,903,732),61443=>array(73,0,903,732),62464=>array(54,-15,526,828),62465=>array(54,-15,526,828),62466=>array(54,-15,570,837),62467=>array(54,0,835,837),62468=>array(54,-15,526,837),62469=>array(54,-15,526,837),62470=>array(54,-15,599,837),62471=>array(54,-15,828,837),62472=>array(54,0,501,837),62473=>array(54,-15,526,828),62474=>array(54,0,1115,837),62475=>array(54,-15,525,837),62476=>array(63,-15,536,828),62477=>array(54,0,815,837),62478=>array(54,-15,526,828),62479=>array(54,-15,526,844),62480=>array(54,0,860,837),62481=>array(63,-15,536,828),62482=>array(54,-15,677,837),62483=>array(24,-15,519,837),62484=>array(54,-15,818,837),62485=>array(54,-15,526,828),62486=>array(54,-15,841,837),62487=>array(54,-15,525,829),62488=>array(54,-15,525,837),62489=>array(64,0,536,837),62490=>array(55,-15,595,828),62491=>array(54,-15,525,828),62492=>array(64,-15,536,837),62493=>array(54,-15,545,828),62494=>array(63,-15,536,828),62495=>array(24,-15,492,837),62496=>array(54,-15,526,837),62497=>array(59,-15,530,837),62498=>array(54,-79,526,837),62499=>array(54,-15,525,838),62500=>array(54,-15,532,838),62501=>array(54,-15,594,837),62502=>array(54,-15,901,838),62504=>array(60,-235,872,816),62505=>array(49,-230,759,853),62506=>array(49,-15,459,765),62507=>array(49,-15,459,777),62508=>array(49,-15,459,875),62509=>array(49,-15,459,818),62510=>array(49,-15,459,887),62511=>array(49,-15,459,809),62512=>array(49,-236,449,765),62513=>array(49,-236,449,799),62514=>array(49,-236,449,901),62515=>array(49,-236,449,809),62516=>array(49,0,469,765),62517=>array(49,0,469,799),62518=>array(49,0,469,809),62519=>array(49,-0,737,765),62520=>array(49,-0,737,777),62521=>array(49,-0,737,895),62522=>array(49,-0,737,799),62523=>array(49,-0,737,809),62524=>array(29,-236,488,765),62525=>array(29,-236,488,777),62526=>array(29,-236,488,904),62527=>array(29,-236,488,799),62528=>array(29,-236,488,809),62529=>array(29,-236,488,852),63173=>array(55,-14,557,760),64256=>array(23,0,708,760),64257=>array(23,0,536,760),64258=>array(23,0,536,760),64259=>array(23,0,873,760),64260=>array(23,0,873,760),64261=>array(23,0,662,760),64262=>array(54,-14,837,742),64275=>array(83,-14,1111,760),64276=>array(85,-14,1111,760),64277=>array(85,-208,1111,760),64278=>array(85,-208,1111,760),64279=>array(85,-208,1451,760),64285=>array(66,44,157,547),64286=>array(167,625,473,765),64287=>array(36,44,329,547),64288=>array(38,0,562,547),64289=>array(85,0,772,547),64290=>array(43,0,717,547),64291=>array(91,0,764,547),64292=>array(43,0,716,547),64293=>array(43,0,716,760),64294=>array(91,0,764,547),64295=>array(43,0,716,547),64296=>array(47,-4,716,547),64297=>array(106,272,732,627),64298=>array(43,0,666,698),64299=>array(38,0,666,698),64300=>array(43,0,666,698),64301=>array(43,0,666,698),64302=>array(91,-159,578,547),64303=>array(91,-193,578,547),64304=>array(91,-159,578,547),64305=>array(43,0,535,547),64306=>array(43,-5,383,547),64307=>array(43,0,511,547),64308=>array(91,0,563,547),64309=>array(43,0,265,547),64310=>array(43,0,363,547),64312=>array(90,-14,593,552),64313=>array(43,204,264,547),64314=>array(43,-208,446,547),64315=>array(43,0,474,547),64316=>array(43,0,492,729),64318=>array(43,0,588,555),64320=>array(43,0,309,547),64321=>array(90,-14,593,547),64323=>array(91,-208,549,547),64324=>array(91,0,569,547),64326=>array(43,0,502,547),64327=>array(91,-208,633,546),64328=>array(43,0,474,547),64329=>array(43,0,666,547),64330=>array(10,-4,566,547),64331=>array(91,0,182,698),64332=>array(43,0,535,698),64333=>array(43,0,474,698),64334=>array(91,0,569,698),64335=>array(43,0,571,760),64338=>array(63,-244,865,327),64339=>array(63,-244,992,327),64340=>array(-10,-244,191,293),64341=>array(-10,-244,312,293),64342=>array(63,-244,865,327),64343=>array(63,-244,992,327),64344=>array(-10,-244,244,293),64345=>array(-10,-244,312,293),64346=>array(63,-244,865,327),64347=>array(63,-244,992,327),64348=>array(-10,-244,244,293),64349=>array(-10,-244,312,293),64350=>array(63,-10,865,513),64351=>array(63,-10,992,513),64352=>array(-10,0,191,610),64353=>array(-10,0,312,610),64354=>array(63,-10,865,513),64355=>array(63,-10,992,513),64356=>array(-10,0,244,610),64357=>array(-10,0,312,610),64358=>array(63,-10,865,575),64359=>array(63,-10,992,575),64360=>array(-10,0,273,672),64361=>array(-10,0,312,672),64362=>array(63,-45,952,757),64363=>array(63,-44,1045,659),64364=>array(-10,0,406,757),64365=>array(-10,0,516,684),64366=>array(63,-45,952,757),64367=>array(63,-44,1045,659),64368=>array(-10,0,406,757),64369=>array(-10,0,516,684),64370=>array(77,-244,645,425),64371=>array(77,-244,655,425),64372=>array(-10,-220,545,398),64373=>array(-10,-220,655,398),64374=>array(77,-244,645,425),64375=>array(77,-244,655,425),64376=>array(-10,-98,545,398),64377=>array(-10,-98,655,398),64378=>array(77,-244,645,425),64379=>array(77,-244,655,425),64380=>array(-10,-220,545,398),64381=>array(-10,-220,655,398),64382=>array(77,-244,645,425),64383=>array(77,-244,655,425),64384=>array(-10,-220,545,398),64385=>array(-10,-220,655,398),64386=>array(61,-146,388,415),64387=>array(61,-146,535,415),64388=>array(61,-19,388,586),64389=>array(61,-19,535,586),64390=>array(61,-19,388,708),64391=>array(61,-19,535,708),64392=>array(61,-19,388,746),64393=>array(61,-19,535,746),64394=>array(-42,-244,439,586),64395=>array(-42,-244,562,586),64396=>array(-42,-244,469,648),64397=>array(-42,-244,562,648),64398=>array(63,-43,895,760),64399=>array(63,-43,981,760),64400=>array(-10,0,476,760),64401=>array(-10,0,562,760),64402=>array(63,-43,895,896),64403=>array(63,-43,981,896),64404=>array(-10,0,476,896),64405=>array(-10,0,562,896),64406=>array(63,-293,895,896),64407=>array(63,-293,981,896),64408=>array(-10,-269,476,896),64409=>array(-10,-269,562,896),64410=>array(63,-43,895,903),64411=>array(63,-43,981,903),64412=>array(-10,0,476,903),64413=>array(-10,0,562,903),64414=>array(72,-162,660,366),64415=>array(72,-244,771,284),64416=>array(72,-162,660,636),64417=>array(72,-244,771,514),64418=>array(-10,0,273,672),64419=>array(-10,0,312,672),64426=>array(70,-33,638,487),64427=>array(70,-244,642,333),64428=>array(-10,-33,467,487),64429=>array(-10,-244,471,333),64467=>array(70,-27,722,854),64468=>array(70,-27,853,854),64469=>array(-10,0,476,928),64470=>array(-10,0,562,928),64473=>array(-42,-244,406,556),64474=>array(-42,-244,526,556),64488=>array(-10,0,191,293),64489=>array(-10,0,312,293),64508=>array(63,-131,719,411),64509=>array(63,-133,843,251),64510=>array(-10,-146,244,293),64511=>array(-10,-146,312,293),65056=>array(-445,752,0,929),65057=>array(0,752,445,929),65058=>array(-354,756,0,894),65059=>array(0,756,354,894),65136=>array(4,591,289,825),65137=>array(-10,0,303,825),65138=>array(4,591,289,874),65139=>array(51,0,271,177),65140=>array(4,-239,289,-5),65142=>array(4,591,289,708),65143=>array(-10,0,303,708),65144=>array(4,590,289,874),65145=>array(-10,0,303,874),65146=>array(4,-137,289,-20),65147=>array(-10,-137,303,90),65148=>array(-6,599,299,869),65149=>array(-10,0,303,869),65150=>array(12,610,279,878),65151=>array(-10,0,303,878),65152=>array(80,42,390,483),65153=>array(-37,0,315,939),65154=>array(-37,0,315,939),65155=>array(53,0,220,1028),65156=>array(53,0,314,1028),65157=>array(-42,-244,406,588),65158=>array(-42,-244,526,588),65159=>array(53,-244,220,760),65160=>array(53,-244,314,760),65161=>array(63,-131,719,588),65162=>array(63,-133,843,466),65163=>array(-10,0,227,613),65164=>array(-10,0,312,613),65165=>array(94,0,184,760),65166=>array(94,0,314,760),65167=>array(63,-171,865,327),65168=>array(63,-171,992,327),65169=>array(-10,-146,191,293),65170=>array(-10,-146,312,293),65171=>array(68,-28,453,513),65172=>array(71,0,546,513),65173=>array(63,-10,865,391),65174=>array(63,-10,992,391),65175=>array(-10,0,244,488),65176=>array(-10,0,312,488),65177=>array(63,-10,865,513),65178=>array(63,-10,992,513),65179=>array(-10,0,244,610),65180=>array(-10,0,312,610),65181=>array(77,-244,645,425),65182=>array(77,-244,655,425),65183=>array(-10,-146,545,398),65184=>array(-10,-146,655,398),65185=>array(77,-244,645,425),65186=>array(77,-244,655,425),65187=>array(-10,0,545,398),65188=>array(-10,0,655,398),65189=>array(77,-244,645,586),65190=>array(77,-244,655,586),65191=>array(-10,0,545,537),65192=>array(-10,0,655,537),65193=>array(61,-19,388,415),65194=>array(61,-19,535,415),65195=>array(61,-19,388,586),65196=>array(61,-19,535,586),65197=>array(-42,-244,423,269),65198=>array(-42,-244,562,269),65199=>array(-42,-244,423,464),65200=>array(-42,-244,562,464),65201=>array(63,-244,1138,366),65202=>array(63,-244,1285,366),65203=>array(-10,-14,755,366),65204=>array(-10,-14,902,366),65205=>array(63,-244,1138,586),65206=>array(63,-244,1285,586),65207=>array(-10,-14,755,586),65208=>array(-10,-14,902,586),65209=>array(63,-244,1134,362),65210=>array(63,-244,1235,362),65211=>array(-10,0,774,362),65212=>array(-10,0,877,362),65213=>array(63,-244,1134,464),65214=>array(63,-244,1235,464),65215=>array(-10,0,774,464),65216=>array(-10,0,877,464),65217=>array(70,0,857,760),65218=>array(70,0,959,760),65219=>array(-10,0,729,760),65220=>array(-10,0,830,760),65221=>array(70,0,857,760),65222=>array(70,0,959,760),65223=>array(-10,0,729,760),65224=>array(-10,0,830,760),65225=>array(57,-244,587,521),65226=>array(57,-244,587,382),65227=>array(-10,0,496,521),65228=>array(-10,0,492,382),65229=>array(57,-244,587,659),65230=>array(57,-244,587,537),65231=>array(-10,0,496,659),65232=>array(-10,0,492,537),65233=>array(63,-45,952,635),65234=>array(63,-44,1045,537),65235=>array(-10,0,406,635),65236=>array(-10,0,516,562),65237=>array(52,-215,701,635),65238=>array(52,-244,844,500),65239=>array(-10,0,406,635),65240=>array(-10,0,516,562),65241=>array(70,-27,722,760),65242=>array(70,-27,853,760),65243=>array(-10,0,476,760),65244=>array(-10,0,562,760),65245=>array(70,-152,637,760),65246=>array(70,-152,767,760),65247=>array(-10,0,210,760),65248=>array(-10,0,341,760),65249=>array(68,-240,546,369),65250=>array(68,-240,675,307),65251=>array(-10,-25,456,303),65252=>array(-10,-24,588,303),65253=>array(72,-162,660,464),65254=>array(72,-244,771,342),65255=>array(-10,0,191,488),65256=>array(-10,0,312,488),65257=>array(68,-28,453,358),65258=>array(71,0,546,366),65259=>array(-10,-33,467,487),65260=>array(-10,-244,471,333),65261=>array(-42,-244,406,315),65262=>array(-42,-244,526,315),65263=>array(63,-131,719,411),65264=>array(63,-133,843,251),65265=>array(63,-244,719,411),65266=>array(63,-244,843,251),65267=>array(-10,-146,244,293),65268=>array(-10,-146,312,293),65269=>array(-103,-10,468,866),65270=>array(-103,-10,606,866),65271=>array(-13,-10,468,955),65272=>array(-13,-10,606,955),65273=>array(11,-244,468,760),65274=>array(11,-244,606,760),65275=>array(41,-10,468,760),65276=>array(41,-10,606,760),65533=>array(15,-84,1011,912),65535=>array(50,-177,550,705)); -$cw=array(0=>600,32=>318,33=>401,34=>460,35=>838,36=>636,37=>950,38=>780,39=>275,40=>390,41=>390,42=>500,43=>838,44=>318,45=>361,46=>318,47=>337,48=>636,49=>636,50=>636,51=>636,52=>636,53=>636,54=>636,55=>636,56=>636,57=>636,58=>337,59=>337,60=>838,61=>838,62=>838,63=>531,64=>1000,65=>684,66=>686,67=>698,68=>770,69=>632,70=>575,71=>775,72=>752,73=>295,74=>295,75=>656,76=>557,77=>863,78=>748,79=>787,80=>603,81=>787,82=>695,83=>635,84=>611,85=>732,86=>684,87=>989,88=>685,89=>611,90=>685,91=>390,92=>337,93=>390,94=>838,95=>500,96=>500,97=>613,98=>635,99=>550,100=>635,101=>615,102=>352,103=>635,104=>634,105=>278,106=>278,107=>579,108=>278,109=>974,110=>634,111=>612,112=>635,113=>635,114=>411,115=>521,116=>392,117=>634,118=>592,119=>818,120=>592,121=>592,122=>525,123=>636,124=>337,125=>636,126=>838,160=>318,161=>401,162=>636,163=>636,164=>636,165=>636,166=>337,167=>500,168=>500,169=>1000,170=>471,171=>612,172=>838,173=>361,174=>1000,175=>500,176=>500,177=>838,178=>401,179=>401,180=>500,181=>636,182=>636,183=>318,184=>500,185=>401,186=>471,187=>612,188=>969,189=>969,190=>969,191=>531,192=>684,193=>684,194=>684,195=>684,196=>684,197=>684,198=>974,199=>698,200=>632,201=>632,202=>632,203=>632,204=>295,205=>295,206=>295,207=>295,208=>775,209=>748,210=>787,211=>787,212=>787,213=>787,214=>787,215=>838,216=>787,217=>732,218=>732,219=>732,220=>732,221=>611,222=>605,223=>630,224=>613,225=>613,226=>613,227=>613,228=>613,229=>613,230=>982,231=>550,232=>615,233=>615,234=>615,235=>615,236=>278,237=>278,238=>278,239=>278,240=>612,241=>634,242=>612,243=>612,244=>612,245=>612,246=>612,247=>838,248=>612,249=>634,250=>634,251=>634,252=>634,253=>592,254=>635,255=>592,256=>684,257=>613,258=>684,259=>613,260=>684,261=>613,262=>698,263=>550,264=>698,265=>550,266=>698,267=>550,268=>698,269=>550,270=>770,271=>635,272=>775,273=>635,274=>632,275=>615,276=>632,277=>615,278=>632,279=>615,280=>632,281=>615,282=>632,283=>615,284=>775,285=>635,286=>775,287=>635,288=>775,289=>635,290=>775,291=>635,292=>752,293=>634,294=>916,295=>695,296=>295,297=>278,298=>295,299=>278,300=>295,301=>278,302=>295,303=>278,304=>295,305=>278,306=>590,307=>556,308=>295,309=>278,310=>656,311=>579,312=>579,313=>557,314=>278,315=>557,316=>278,317=>557,318=>375,319=>557,320=>342,321=>562,322=>284,323=>748,324=>634,325=>748,326=>634,327=>748,328=>634,329=>813,330=>748,331=>634,332=>787,333=>612,334=>787,335=>612,336=>787,337=>612,338=>1070,339=>1023,340=>695,341=>411,342=>695,343=>411,344=>695,345=>411,346=>635,347=>521,348=>635,349=>521,350=>635,351=>521,352=>635,353=>521,354=>611,355=>392,356=>611,357=>392,358=>611,359=>392,360=>732,361=>634,362=>732,363=>634,364=>732,365=>634,366=>732,367=>634,368=>732,369=>634,370=>732,371=>634,372=>989,373=>818,374=>611,375=>592,376=>611,377=>685,378=>525,379=>685,380=>525,381=>685,382=>525,383=>352,384=>635,385=>735,386=>686,387=>635,388=>686,389=>635,390=>703,391=>698,392=>550,393=>775,394=>819,395=>686,396=>635,397=>612,398=>632,399=>787,400=>614,401=>575,402=>352,403=>775,404=>687,405=>984,406=>354,407=>295,408=>746,409=>579,410=>278,411=>592,412=>974,413=>748,414=>634,415=>787,416=>913,417=>612,418=>949,419=>759,420=>652,421=>635,422=>695,423=>635,424=>521,425=>632,426=>336,427=>392,428=>611,429=>392,430=>611,431=>858,432=>634,433=>764,434=>721,435=>744,436=>730,437=>685,438=>525,439=>666,440=>666,441=>578,442=>525,443=>636,444=>666,445=>578,446=>510,447=>635,448=>295,449=>492,450=>459,451=>295,452=>1422,453=>1299,454=>1154,455=>835,456=>787,457=>457,458=>931,459=>924,460=>797,461=>684,462=>613,463=>295,464=>278,465=>787,466=>612,467=>732,468=>634,469=>732,470=>634,471=>732,472=>634,473=>732,474=>634,475=>732,476=>634,477=>615,478=>684,479=>613,480=>684,481=>613,482=>974,483=>982,484=>775,485=>635,486=>775,487=>635,488=>656,489=>579,490=>787,491=>612,492=>787,493=>612,494=>666,495=>578,496=>278,497=>1422,498=>1299,499=>1154,500=>775,501=>635,502=>1113,503=>682,504=>748,505=>634,506=>684,507=>613,508=>974,509=>982,510=>787,511=>612,512=>684,513=>613,514=>684,515=>613,516=>632,517=>615,518=>632,519=>615,520=>295,521=>278,522=>295,523=>278,524=>787,525=>612,526=>787,527=>612,528=>695,529=>411,530=>695,531=>411,532=>732,533=>634,534=>732,535=>634,536=>635,537=>521,538=>611,539=>392,540=>627,541=>521,542=>752,543=>634,544=>735,545=>838,546=>698,547=>610,548=>685,549=>525,550=>684,551=>613,552=>632,553=>615,554=>787,555=>612,556=>787,557=>612,558=>787,559=>612,560=>787,561=>612,562=>611,563=>592,564=>475,565=>843,566=>477,567=>278,568=>998,569=>998,570=>684,571=>698,572=>550,573=>557,574=>611,575=>521,576=>525,577=>603,578=>479,579=>686,580=>732,581=>684,582=>632,583=>615,584=>295,585=>278,586=>781,587=>635,588=>695,589=>411,590=>611,591=>592,592=>600,593=>635,594=>635,595=>635,596=>549,597=>550,598=>635,599=>696,600=>615,601=>615,602=>819,603=>541,604=>532,605=>775,606=>664,607=>278,608=>696,609=>635,610=>629,611=>596,612=>596,613=>634,614=>634,615=>634,616=>278,617=>338,618=>372,619=>396,620=>487,621=>278,622=>706,623=>974,624=>974,625=>974,626=>646,627=>642,628=>634,629=>612,630=>858,631=>728,632=>660,633=>414,634=>414,635=>414,636=>411,637=>411,638=>530,639=>530,640=>604,641=>604,642=>521,643=>336,644=>336,645=>461,646=>336,647=>392,648=>392,649=>634,650=>618,651=>598,652=>592,653=>818,654=>592,655=>611,656=>525,657=>525,658=>578,659=>578,660=>510,661=>510,662=>510,663=>510,664=>787,665=>580,666=>664,667=>708,668=>654,669=>292,670=>667,671=>507,672=>727,673=>510,674=>510,675=>1014,676=>1058,677=>1013,678=>830,679=>610,680=>778,681=>848,682=>706,683=>654,684=>515,685=>515,686=>661,687=>664,688=>404,689=>399,690=>175,691=>259,692=>295,693=>296,694=>379,695=>515,696=>373,697=>278,698=>460,699=>318,700=>318,701=>318,702=>307,703=>307,704=>370,705=>370,706=>500,707=>500,708=>500,709=>500,710=>500,711=>500,712=>275,713=>500,714=>500,715=>500,716=>275,717=>500,718=>500,719=>500,720=>337,721=>337,722=>307,723=>307,724=>500,725=>500,726=>390,727=>317,728=>500,729=>500,730=>500,731=>500,732=>500,733=>500,734=>315,735=>500,736=>426,737=>166,738=>373,739=>444,740=>370,741=>493,742=>493,743=>493,744=>493,745=>493,748=>500,749=>500,750=>518,755=>500,759=>500,768=>0,769=>0,770=>0,771=>0,772=>0,773=>0,774=>0,775=>0,776=>0,777=>0,778=>0,779=>0,780=>0,781=>0,782=>0,783=>0,784=>0,785=>0,786=>0,787=>0,788=>0,789=>0,790=>0,791=>0,792=>0,793=>0,794=>0,795=>0,796=>0,797=>0,798=>0,799=>0,800=>0,801=>0,802=>0,803=>0,804=>0,805=>0,806=>0,807=>0,808=>0,809=>0,810=>0,811=>0,812=>0,813=>0,814=>0,815=>0,816=>0,817=>0,818=>0,819=>0,820=>0,821=>0,822=>0,823=>0,824=>0,825=>0,826=>0,827=>0,828=>0,829=>0,830=>0,831=>0,832=>0,833=>0,834=>0,835=>0,836=>0,837=>0,838=>0,839=>0,840=>0,841=>0,842=>0,843=>0,844=>0,845=>0,846=>0,847=>0,849=>0,850=>0,851=>0,855=>0,856=>0,858=>0,860=>0,861=>0,862=>0,863=>0,864=>0,865=>0,866=>0,880=>654,881=>568,882=>862,883=>647,884=>278,885=>278,886=>748,887=>650,890=>500,891=>549,892=>550,893=>549,894=>337,900=>500,901=>500,902=>692,903=>318,904=>746,905=>871,906=>408,908=>813,910=>825,911=>826,912=>338,913=>684,914=>686,915=>557,916=>684,917=>632,918=>685,919=>752,920=>787,921=>295,922=>656,923=>684,924=>863,925=>748,926=>632,927=>787,928=>752,929=>603,931=>632,932=>611,933=>611,934=>787,935=>685,936=>787,937=>764,938=>295,939=>611,940=>659,941=>541,942=>634,943=>338,944=>579,945=>659,946=>638,947=>592,948=>612,949=>541,950=>544,951=>634,952=>612,953=>338,954=>589,955=>592,956=>636,957=>559,958=>558,959=>612,960=>602,961=>635,962=>587,963=>634,964=>602,965=>579,966=>660,967=>578,968=>660,969=>837,970=>338,971=>579,972=>612,973=>579,974=>837,975=>656,976=>614,977=>619,978=>699,979=>842,980=>699,981=>660,982=>837,983=>664,984=>787,985=>612,986=>648,987=>587,988=>575,989=>458,990=>660,991=>660,992=>865,993=>627,994=>934,995=>837,996=>758,997=>659,998=>792,999=>615,1000=>687,1001=>607,1002=>768,1003=>625,1004=>699,1005=>612,1006=>611,1007=>536,1008=>664,1009=>635,1010=>550,1011=>278,1012=>787,1013=>615,1014=>615,1015=>605,1016=>635,1017=>698,1018=>863,1019=>651,1020=>635,1021=>703,1022=>698,1023=>703,1024=>632,1025=>632,1026=>786,1027=>610,1028=>698,1029=>635,1030=>295,1031=>295,1032=>295,1033=>1094,1034=>1045,1035=>786,1036=>710,1037=>748,1038=>609,1039=>752,1040=>684,1041=>686,1042=>686,1043=>610,1044=>781,1045=>632,1046=>1077,1047=>641,1048=>748,1049=>748,1050=>710,1051=>752,1052=>863,1053=>752,1054=>787,1055=>752,1056=>603,1057=>698,1058=>611,1059=>609,1060=>861,1061=>685,1062=>776,1063=>686,1064=>1069,1065=>1094,1066=>833,1067=>882,1068=>686,1069=>698,1070=>1080,1071=>695,1072=>613,1073=>617,1074=>589,1075=>525,1076=>691,1077=>615,1078=>901,1079=>532,1080=>650,1081=>650,1082=>604,1083=>639,1084=>754,1085=>654,1086=>612,1087=>654,1088=>635,1089=>550,1090=>583,1091=>592,1092=>855,1093=>592,1094=>681,1095=>591,1096=>915,1097=>942,1098=>707,1099=>790,1100=>589,1101=>549,1102=>842,1103=>602,1104=>615,1105=>615,1106=>625,1107=>525,1108=>549,1109=>521,1110=>278,1111=>278,1112=>278,1113=>902,1114=>898,1115=>652,1116=>604,1117=>650,1118=>592,1119=>654,1120=>934,1121=>837,1122=>771,1123=>672,1124=>942,1125=>749,1126=>879,1127=>783,1128=>1160,1129=>1001,1130=>787,1131=>612,1132=>1027,1133=>824,1134=>636,1135=>541,1136=>856,1137=>876,1138=>787,1139=>612,1140=>781,1141=>665,1142=>781,1143=>665,1144=>992,1145=>904,1146=>953,1147=>758,1148=>1180,1149=>1028,1150=>934,1151=>837,1152=>698,1153=>550,1154=>502,1155=>0,1156=>0,1157=>0,1158=>0,1159=>0,1160=>418,1161=>418,1162=>772,1163=>677,1164=>686,1165=>589,1166=>603,1167=>635,1168=>610,1169=>525,1170=>675,1171=>590,1172=>624,1173=>530,1174=>1077,1175=>901,1176=>641,1177=>532,1178=>710,1179=>604,1180=>710,1181=>604,1182=>710,1183=>604,1184=>856,1185=>832,1186=>752,1187=>661,1188=>1014,1189=>877,1190=>1081,1191=>916,1192=>878,1193=>693,1194=>698,1195=>550,1196=>611,1197=>583,1198=>611,1199=>592,1200=>611,1201=>592,1202=>685,1203=>592,1204=>934,1205=>807,1206=>686,1207=>591,1208=>686,1209=>591,1210=>686,1211=>634,1212=>941,1213=>728,1214=>941,1215=>728,1216=>295,1217=>1077,1218=>901,1219=>656,1220=>604,1221=>776,1222=>670,1223=>752,1224=>661,1225=>776,1226=>681,1227=>686,1228=>591,1229=>888,1230=>774,1231=>278,1232=>684,1233=>613,1234=>684,1235=>613,1236=>974,1237=>982,1238=>632,1239=>615,1240=>787,1241=>615,1242=>787,1243=>615,1244=>1077,1245=>901,1246=>641,1247=>532,1248=>666,1249=>578,1250=>748,1251=>650,1252=>748,1253=>650,1254=>787,1255=>612,1256=>787,1257=>612,1258=>787,1259=>612,1260=>698,1261=>549,1262=>609,1263=>592,1264=>609,1265=>592,1266=>609,1267=>592,1268=>686,1269=>591,1270=>610,1271=>525,1272=>882,1273=>790,1274=>675,1275=>590,1276=>685,1277=>592,1278=>685,1279=>592,1280=>686,1281=>589,1282=>1006,1283=>897,1284=>975,1285=>869,1286=>679,1287=>588,1288=>1072,1289=>957,1290=>1113,1291=>967,1292=>775,1293=>660,1294=>773,1295=>711,1296=>614,1297=>541,1298=>752,1299=>639,1300=>1169,1301=>994,1302=>894,1303=>864,1304=>1032,1305=>986,1306=>787,1307=>635,1308=>989,1309=>818,1310=>710,1311=>604,1312=>1081,1313=>905,1314=>1081,1315=>912,1316=>793,1317=>683,1329=>766,1330=>732,1331=>753,1332=>753,1333=>732,1334=>772,1335=>640,1336=>732,1337=>859,1338=>753,1339=>691,1340=>533,1341=>922,1342=>863,1343=>732,1344=>716,1345=>766,1346=>753,1347=>767,1348=>792,1349=>728,1350=>729,1351=>757,1352=>732,1353=>713,1354=>800,1355=>768,1356=>792,1357=>732,1358=>753,1359=>705,1360=>694,1361=>744,1362=>538,1363=>811,1364=>757,1365=>787,1366=>790,1369=>307,1370=>318,1371=>234,1372=>361,1373=>238,1374=>405,1375=>500,1377=>974,1378=>634,1379=>658,1380=>663,1381=>634,1382=>635,1383=>515,1384=>634,1385=>738,1386=>658,1387=>634,1388=>271,1389=>980,1390=>623,1391=>634,1392=>634,1393=>608,1394=>634,1395=>629,1396=>634,1397=>271,1398=>634,1399=>499,1400=>634,1401=>404,1402=>974,1403=>560,1404=>648,1405=>634,1406=>634,1407=>974,1408=>634,1409=>633,1410=>435,1411=>974,1412=>636,1413=>609,1414=>805,1415=>812,1417=>337,1418=>361,1456=>0,1457=>0,1458=>0,1459=>0,1460=>0,1461=>0,1462=>0,1463=>0,1464=>0,1465=>0,1466=>0,1467=>0,1468=>0,1469=>0,1470=>361,1471=>0,1472=>295,1473=>0,1474=>0,1475=>295,1478=>441,1479=>0,1488=>668,1489=>578,1490=>412,1491=>546,1492=>653,1493=>272,1494=>346,1495=>653,1496=>648,1497=>224,1498=>537,1499=>529,1500=>568,1501=>664,1502=>679,1503=>272,1504=>400,1505=>649,1506=>626,1507=>640,1508=>625,1509=>540,1510=>593,1511=>709,1512=>564,1513=>708,1514=>657,1520=>471,1521=>423,1522=>331,1523=>416,1524=>645,1542=>637,1543=>637,1545=>757,1546=>977,1548=>323,1557=>0,1563=>318,1567=>531,1569=>470,1570=>278,1571=>278,1572=>483,1573=>278,1574=>783,1575=>278,1576=>941,1577=>524,1578=>941,1579=>941,1580=>646,1581=>646,1582=>646,1583=>445,1584=>445,1585=>483,1586=>483,1587=>1221,1588=>1221,1589=>1209,1590=>1209,1591=>925,1592=>925,1593=>597,1594=>597,1600=>293,1601=>1037,1602=>776,1603=>824,1604=>727,1605=>619,1606=>734,1607=>524,1608=>483,1609=>783,1610=>783,1611=>0,1612=>0,1613=>0,1614=>0,1615=>0,1616=>0,1617=>0,1618=>0,1619=>0,1620=>0,1621=>0,1623=>0,1626=>500,1632=>537,1633=>537,1634=>537,1635=>537,1636=>537,1637=>537,1638=>537,1639=>537,1640=>537,1641=>537,1642=>537,1643=>325,1644=>318,1645=>545,1646=>941,1647=>776,1648=>0,1652=>292,1657=>941,1658=>941,1659=>941,1660=>941,1661=>941,1662=>941,1663=>941,1664=>941,1665=>646,1666=>646,1667=>646,1668=>646,1669=>646,1670=>646,1671=>646,1672=>445,1673=>445,1674=>445,1675=>445,1676=>445,1677=>445,1678=>445,1679=>445,1680=>445,1681=>483,1682=>483,1683=>498,1684=>530,1685=>610,1686=>530,1687=>483,1688=>483,1689=>483,1690=>1221,1691=>1221,1692=>1221,1693=>1209,1694=>1209,1695=>925,1696=>597,1697=>1037,1698=>1037,1699=>1037,1700=>1037,1701=>1037,1702=>1037,1703=>776,1704=>776,1705=>895,1706=>1054,1707=>895,1708=>824,1709=>824,1710=>824,1711=>895,1712=>895,1713=>895,1714=>895,1715=>895,1716=>895,1717=>727,1718=>727,1719=>727,1720=>727,1721=>734,1722=>734,1723=>734,1724=>734,1725=>734,1726=>698,1727=>646,1734=>483,1740=>783,1742=>783,1749=>524,1776=>537,1777=>537,1778=>537,1779=>537,1780=>537,1781=>537,1782=>537,1783=>537,1784=>537,1785=>537,1984=>636,1985=>636,1986=>636,1987=>636,1988=>636,1989=>636,1990=>636,1991=>636,1992=>636,1993=>636,1994=>278,1995=>571,1996=>424,1997=>592,1998=>654,1999=>654,2000=>594,2001=>654,2002=>829,2003=>438,2004=>438,2005=>559,2006=>612,2007=>350,2008=>959,2009=>473,2010=>783,2011=>654,2012=>625,2013=>734,2014=>530,2015=>724,2016=>473,2017=>625,2018=>594,2019=>530,2020=>530,2021=>522,2022=>594,2023=>594,2027=>0,2028=>0,2029=>0,2030=>0,2031=>0,2032=>0,2033=>0,2034=>0,2035=>0,2036=>313,2037=>313,2040=>560,2041=>560,2042=>361,3647=>636,3713=>670,3714=>684,3716=>688,3719=>482,3720=>628,3722=>684,3725=>688,3732=>669,3733=>642,3734=>645,3735=>655,3737=>659,3738=>625,3739=>625,3740=>745,3741=>767,3742=>687,3743=>687,3745=>702,3746=>688,3747=>684,3749=>649,3751=>632,3754=>703,3755=>819,3757=>633,3758=>684,3759=>788,3760=>632,3761=>0,3762=>539,3763=>539,3764=>0,3765=>0,3766=>0,3767=>0,3768=>0,3769=>0,3771=>0,3772=>0,3773=>663,3776=>375,3777=>657,3778=>460,3779=>547,3780=>491,3782=>674,3784=>0,3785=>0,3786=>0,3787=>0,3788=>0,3789=>0,3792=>636,3793=>641,3794=>641,3795=>670,3796=>625,3797=>625,3798=>703,3799=>670,3800=>674,3801=>677,3804=>1028,3805=>1028,4256=>874,4257=>733,4258=>679,4259=>834,4260=>615,4261=>768,4262=>753,4263=>914,4264=>453,4265=>620,4266=>843,4267=>882,4268=>625,4269=>854,4270=>781,4271=>629,4272=>912,4273=>621,4274=>620,4275=>854,4276=>866,4277=>724,4278=>630,4279=>621,4280=>625,4281=>620,4282=>818,4283=>874,4284=>615,4285=>623,4286=>625,4287=>725,4288=>844,4289=>596,4290=>688,4291=>596,4292=>594,4293=>738,4304=>508,4305=>518,4306=>581,4307=>818,4308=>508,4309=>513,4310=>500,4311=>801,4312=>518,4313=>510,4314=>1064,4315=>522,4316=>522,4317=>786,4318=>508,4319=>518,4320=>796,4321=>522,4322=>654,4323=>522,4324=>825,4325=>513,4326=>786,4327=>518,4328=>518,4329=>522,4330=>571,4331=>522,4332=>518,4333=>520,4334=>522,4335=>454,4336=>508,4337=>518,4338=>508,4339=>508,4340=>518,4341=>554,4342=>828,4343=>552,4344=>508,4345=>571,4346=>508,4347=>448,4348=>324,5121=>684,5122=>684,5123=>684,5124=>684,5125=>769,5126=>769,5127=>769,5129=>769,5130=>769,5131=>769,5132=>835,5133=>834,5134=>835,5135=>834,5136=>835,5137=>834,5138=>967,5139=>1007,5140=>967,5141=>1007,5142=>769,5143=>967,5144=>1007,5145=>967,5146=>1007,5147=>769,5149=>256,5150=>543,5151=>423,5152=>423,5153=>389,5154=>389,5155=>393,5156=>389,5157=>466,5158=>385,5159=>256,5160=>389,5161=>389,5162=>389,5163=>1090,5164=>909,5165=>953,5166=>1117,5167=>684,5168=>684,5169=>684,5170=>684,5171=>729,5172=>729,5173=>729,5175=>729,5176=>729,5177=>729,5178=>835,5179=>684,5180=>835,5181=>834,5182=>835,5183=>834,5184=>967,5185=>1007,5186=>967,5187=>1007,5188=>967,5189=>1007,5190=>967,5191=>1007,5192=>729,5193=>508,5194=>192,5196=>732,5197=>732,5198=>732,5199=>732,5200=>730,5201=>730,5202=>730,5204=>730,5205=>730,5206=>730,5207=>921,5208=>889,5209=>921,5210=>889,5211=>921,5212=>889,5213=>928,5214=>900,5215=>928,5216=>900,5217=>947,5218=>900,5219=>947,5220=>900,5221=>947,5222=>434,5223=>877,5224=>877,5225=>866,5226=>890,5227=>628,5228=>628,5229=>628,5230=>628,5231=>628,5232=>628,5233=>628,5234=>628,5235=>628,5236=>860,5237=>771,5238=>815,5239=>816,5240=>815,5241=>816,5242=>860,5243=>771,5244=>860,5245=>771,5246=>815,5247=>816,5248=>815,5249=>816,5250=>815,5251=>407,5252=>407,5253=>750,5254=>775,5255=>750,5256=>775,5257=>628,5258=>628,5259=>628,5260=>628,5261=>628,5262=>628,5263=>628,5264=>628,5265=>628,5266=>860,5267=>771,5268=>815,5269=>816,5270=>815,5271=>816,5272=>860,5273=>771,5274=>860,5275=>771,5276=>815,5277=>816,5278=>815,5279=>816,5280=>815,5281=>435,5282=>435,5283=>610,5284=>557,5285=>557,5286=>557,5287=>610,5288=>610,5289=>610,5290=>557,5291=>557,5292=>749,5293=>769,5294=>746,5295=>764,5296=>746,5297=>764,5298=>749,5299=>769,5300=>749,5301=>769,5302=>746,5303=>764,5304=>746,5305=>764,5306=>746,5307=>386,5308=>508,5309=>386,5312=>852,5313=>852,5314=>852,5315=>852,5316=>852,5317=>852,5318=>852,5319=>852,5320=>852,5321=>1069,5322=>1035,5323=>1059,5324=>852,5325=>1059,5326=>852,5327=>852,5328=>600,5329=>453,5330=>600,5331=>852,5332=>852,5333=>852,5334=>852,5335=>852,5336=>852,5337=>852,5338=>852,5339=>852,5340=>1069,5341=>1035,5342=>1059,5343=>1030,5344=>1059,5345=>1030,5346=>1069,5347=>1035,5348=>1069,5349=>1035,5350=>1083,5351=>1030,5352=>1083,5353=>1030,5354=>600,5356=>729,5357=>603,5358=>603,5359=>603,5360=>603,5361=>603,5362=>603,5363=>603,5364=>603,5365=>603,5366=>834,5367=>754,5368=>792,5369=>771,5370=>792,5371=>771,5372=>834,5373=>754,5374=>834,5375=>754,5376=>792,5377=>771,5378=>792,5379=>771,5380=>792,5381=>418,5382=>420,5383=>418,5392=>712,5393=>712,5394=>712,5395=>892,5396=>892,5397=>892,5398=>892,5399=>910,5400=>872,5401=>910,5402=>872,5403=>910,5404=>872,5405=>1140,5406=>1100,5407=>1140,5408=>1100,5409=>1140,5410=>1100,5411=>1140,5412=>1100,5413=>641,5414=>627,5415=>627,5416=>627,5417=>627,5418=>627,5419=>627,5420=>627,5421=>627,5422=>627,5423=>844,5424=>781,5425=>816,5426=>818,5427=>816,5428=>818,5429=>844,5430=>781,5431=>844,5432=>781,5433=>816,5434=>818,5435=>816,5436=>818,5437=>816,5438=>418,5440=>389,5441=>484,5442=>916,5443=>916,5444=>916,5445=>916,5446=>916,5447=>916,5448=>603,5449=>603,5450=>603,5451=>603,5452=>603,5453=>603,5454=>834,5455=>754,5456=>418,5458=>729,5459=>684,5460=>684,5461=>684,5462=>684,5463=>726,5464=>726,5465=>726,5466=>726,5467=>924,5468=>1007,5469=>508,5470=>732,5471=>732,5472=>732,5473=>732,5474=>732,5475=>732,5476=>730,5477=>730,5478=>730,5479=>730,5480=>947,5481=>900,5482=>508,5492=>831,5493=>831,5494=>831,5495=>831,5496=>831,5497=>831,5498=>831,5499=>563,5500=>752,5501=>484,5502=>1047,5503=>1047,5504=>1047,5505=>1047,5506=>1047,5507=>1047,5508=>1047,5509=>825,5514=>831,5515=>831,5516=>831,5517=>831,5518=>1259,5519=>1259,5520=>1259,5521=>1002,5522=>1002,5523=>1259,5524=>1259,5525=>700,5526=>1073,5536=>852,5537=>852,5538=>852,5539=>852,5540=>852,5541=>852,5542=>600,5543=>643,5544=>643,5545=>643,5546=>643,5547=>643,5548=>643,5549=>643,5550=>418,5551=>628,5598=>770,5601=>767,5702=>468,5703=>468,5742=>444,5743=>1047,5744=>1310,5745=>1632,5746=>1632,5747=>1375,5748=>1375,5749=>1632,5750=>1632,5760=>477,5761=>493,5762=>712,5763=>931,5764=>1150,5765=>1370,5766=>493,5767=>712,5768=>931,5769=>1150,5770=>1370,5771=>498,5772=>718,5773=>938,5774=>1159,5775=>1379,5776=>493,5777=>712,5778=>930,5779=>1149,5780=>1370,5781=>498,5782=>752,5783=>789,5784=>1205,5785=>1150,5786=>683,5787=>507,5788=>507,7424=>592,7425=>717,7426=>982,7427=>586,7428=>550,7429=>605,7430=>605,7431=>491,7432=>541,7433=>278,7434=>395,7435=>579,7436=>583,7437=>754,7438=>650,7439=>612,7440=>550,7441=>684,7442=>684,7443=>684,7444=>1023,7446=>612,7447=>612,7448=>524,7449=>602,7450=>602,7451=>583,7452=>574,7453=>737,7454=>948,7455=>638,7456=>592,7457=>818,7458=>525,7459=>526,7462=>583,7463=>592,7464=>564,7465=>524,7466=>590,7467=>639,7468=>431,7469=>613,7470=>432,7472=>485,7473=>398,7474=>398,7475=>488,7476=>474,7477=>186,7478=>186,7479=>413,7480=>351,7481=>543,7482=>471,7483=>471,7484=>496,7485=>439,7486=>380,7487=>438,7488=>385,7489=>461,7490=>623,7491=>392,7492=>392,7493=>405,7494=>648,7495=>428,7496=>405,7497=>417,7498=>417,7499=>360,7500=>359,7501=>405,7502=>179,7503=>426,7504=>623,7505=>409,7506=>414,7507=>370,7508=>414,7509=>414,7510=>428,7511=>295,7512=>405,7513=>470,7514=>623,7515=>417,7517=>402,7518=>373,7519=>385,7520=>416,7521=>364,7522=>179,7523=>259,7524=>405,7525=>417,7526=>402,7527=>373,7528=>412,7529=>416,7530=>364,7543=>635,7544=>474,7547=>372,7549=>667,7557=>278,7579=>405,7580=>370,7581=>370,7582=>414,7583=>360,7584=>296,7585=>233,7586=>405,7587=>405,7588=>261,7589=>250,7590=>261,7591=>261,7592=>234,7593=>250,7594=>235,7595=>376,7596=>623,7597=>623,7598=>411,7599=>479,7600=>409,7601=>414,7602=>414,7603=>360,7604=>287,7605=>295,7606=>508,7607=>418,7608=>361,7609=>406,7610=>417,7611=>366,7612=>437,7613=>366,7614=>392,7615=>414,7620=>0,7621=>0,7622=>0,7623=>0,7624=>0,7625=>0,7680=>684,7681=>613,7682=>686,7683=>635,7684=>686,7685=>635,7686=>686,7687=>635,7688=>698,7689=>550,7690=>770,7691=>635,7692=>770,7693=>635,7694=>770,7695=>635,7696=>770,7697=>635,7698=>770,7699=>635,7700=>632,7701=>615,7702=>632,7703=>615,7704=>632,7705=>615,7706=>632,7707=>615,7708=>632,7709=>615,7710=>575,7711=>352,7712=>775,7713=>635,7714=>752,7715=>634,7716=>752,7717=>634,7718=>752,7719=>634,7720=>752,7721=>634,7722=>752,7723=>634,7724=>295,7725=>278,7726=>295,7727=>278,7728=>656,7729=>579,7730=>656,7731=>579,7732=>656,7733=>579,7734=>557,7735=>288,7736=>557,7737=>288,7738=>557,7739=>278,7740=>557,7741=>278,7742=>863,7743=>974,7744=>863,7745=>974,7746=>863,7747=>974,7748=>748,7749=>634,7750=>748,7751=>634,7752=>748,7753=>634,7754=>748,7755=>634,7756=>787,7757=>612,7758=>787,7759=>612,7760=>787,7761=>612,7762=>787,7763=>612,7764=>603,7765=>635,7766=>603,7767=>635,7768=>695,7769=>411,7770=>695,7771=>411,7772=>695,7773=>411,7774=>695,7775=>411,7776=>635,7777=>521,7778=>635,7779=>521,7780=>635,7781=>521,7782=>635,7783=>521,7784=>635,7785=>521,7786=>611,7787=>392,7788=>611,7789=>392,7790=>611,7791=>392,7792=>611,7793=>392,7794=>732,7795=>634,7796=>732,7797=>634,7798=>732,7799=>634,7800=>732,7801=>634,7802=>732,7803=>634,7804=>684,7805=>592,7806=>684,7807=>592,7808=>989,7809=>818,7810=>989,7811=>818,7812=>989,7813=>818,7814=>989,7815=>818,7816=>989,7817=>818,7818=>685,7819=>592,7820=>685,7821=>592,7822=>611,7823=>592,7824=>685,7825=>525,7826=>685,7827=>525,7828=>685,7829=>525,7830=>634,7831=>392,7832=>818,7833=>592,7834=>613,7835=>352,7836=>352,7837=>352,7838=>769,7839=>612,7840=>684,7841=>613,7842=>684,7843=>613,7844=>684,7845=>613,7846=>684,7847=>613,7848=>684,7849=>613,7850=>684,7851=>613,7852=>684,7853=>613,7854=>684,7855=>613,7856=>684,7857=>613,7858=>684,7859=>613,7860=>684,7861=>613,7862=>684,7863=>613,7864=>632,7865=>615,7866=>632,7867=>615,7868=>632,7869=>615,7870=>632,7871=>615,7872=>632,7873=>615,7874=>632,7875=>615,7876=>632,7877=>615,7878=>632,7879=>615,7880=>295,7881=>278,7882=>295,7883=>278,7884=>787,7885=>612,7886=>787,7887=>612,7888=>787,7889=>612,7890=>787,7891=>612,7892=>787,7893=>612,7894=>787,7895=>612,7896=>787,7897=>612,7898=>913,7899=>612,7900=>913,7901=>612,7902=>913,7903=>612,7904=>913,7905=>612,7906=>913,7907=>612,7908=>732,7909=>634,7910=>732,7911=>634,7912=>858,7913=>634,7914=>858,7915=>634,7916=>858,7917=>634,7918=>858,7919=>634,7920=>858,7921=>634,7922=>611,7923=>592,7924=>611,7925=>592,7926=>611,7927=>592,7928=>611,7929=>592,7930=>769,7931=>477,7936=>659,7937=>659,7938=>659,7939=>659,7940=>659,7941=>659,7942=>659,7943=>659,7944=>684,7945=>684,7946=>877,7947=>877,7948=>769,7949=>801,7950=>708,7951=>743,7952=>541,7953=>541,7954=>541,7955=>541,7956=>541,7957=>541,7960=>711,7961=>711,7962=>966,7963=>975,7964=>898,7965=>928,7968=>634,7969=>634,7970=>634,7971=>634,7972=>634,7973=>634,7974=>634,7975=>634,7976=>837,7977=>835,7978=>1086,7979=>1089,7980=>1027,7981=>1051,7982=>934,7983=>947,7984=>338,7985=>338,7986=>338,7987=>338,7988=>338,7989=>338,7990=>338,7991=>338,7992=>380,7993=>374,7994=>635,7995=>635,7996=>570,7997=>600,7998=>489,7999=>493,8000=>612,8001=>612,8002=>612,8003=>612,8004=>612,8005=>612,8008=>804,8009=>848,8010=>1095,8011=>1100,8012=>938,8013=>970,8016=>579,8017=>579,8018=>579,8019=>579,8020=>579,8021=>579,8022=>579,8023=>579,8025=>784,8027=>998,8029=>1012,8031=>897,8032=>837,8033=>837,8034=>837,8035=>837,8036=>837,8037=>837,8038=>837,8039=>837,8040=>802,8041=>843,8042=>1089,8043=>1095,8044=>946,8045=>972,8046=>921,8047=>952,8048=>659,8049=>659,8050=>541,8051=>548,8052=>634,8053=>654,8054=>338,8055=>338,8056=>612,8057=>612,8058=>579,8059=>579,8060=>837,8061=>837,8064=>659,8065=>659,8066=>659,8067=>659,8068=>659,8069=>659,8070=>659,8071=>659,8072=>684,8073=>684,8074=>877,8075=>877,8076=>769,8077=>801,8078=>708,8079=>743,8080=>634,8081=>634,8082=>634,8083=>634,8084=>634,8085=>634,8086=>634,8087=>634,8088=>837,8089=>835,8090=>1086,8091=>1089,8092=>1027,8093=>1051,8094=>934,8095=>947,8096=>837,8097=>837,8098=>837,8099=>837,8100=>837,8101=>837,8102=>837,8103=>837,8104=>802,8105=>843,8106=>1089,8107=>1095,8108=>946,8109=>972,8110=>921,8111=>952,8112=>659,8113=>659,8114=>659,8115=>659,8116=>659,8118=>659,8119=>659,8120=>684,8121=>684,8122=>716,8123=>692,8124=>684,8125=>500,8126=>500,8127=>500,8128=>500,8129=>500,8130=>634,8131=>634,8132=>654,8134=>634,8135=>634,8136=>805,8137=>746,8138=>931,8139=>871,8140=>752,8141=>500,8142=>500,8143=>500,8144=>338,8145=>338,8146=>338,8147=>338,8150=>338,8151=>338,8152=>295,8153=>295,8154=>475,8155=>408,8157=>500,8158=>500,8159=>500,8160=>579,8161=>579,8162=>579,8163=>579,8164=>635,8165=>635,8166=>579,8167=>579,8168=>611,8169=>611,8170=>845,8171=>825,8172=>685,8173=>500,8174=>500,8175=>500,8178=>837,8179=>837,8180=>837,8182=>837,8183=>837,8184=>941,8185=>813,8186=>922,8187=>826,8188=>764,8189=>500,8190=>500,8192=>500,8193=>1000,8194=>500,8195=>1000,8196=>330,8197=>250,8198=>167,8199=>636,8200=>318,8201=>200,8202=>100,8203=>0,8204=>0,8205=>0,8206=>0,8207=>0,8208=>361,8209=>361,8210=>636,8211=>500,8212=>1000,8213=>1000,8214=>500,8215=>500,8216=>318,8217=>318,8218=>318,8219=>318,8220=>518,8221=>518,8222=>518,8223=>518,8224=>500,8225=>500,8226=>590,8227=>590,8228=>334,8229=>667,8230=>1000,8231=>318,8232=>0,8233=>0,8234=>0,8235=>0,8236=>0,8237=>0,8238=>0,8239=>200,8240=>1342,8241=>1735,8242=>227,8243=>374,8244=>520,8245=>227,8246=>374,8247=>520,8248=>339,8249=>400,8250=>400,8251=>838,8252=>485,8253=>531,8254=>500,8255=>804,8256=>804,8257=>250,8258=>1000,8259=>500,8260=>167,8261=>390,8262=>390,8263=>922,8264=>733,8265=>733,8266=>497,8267=>636,8268=>500,8269=>500,8270=>500,8271=>337,8272=>804,8273=>500,8274=>450,8275=>1000,8276=>804,8277=>838,8278=>586,8279=>663,8280=>838,8281=>838,8282=>318,8283=>797,8284=>838,8285=>318,8286=>318,8287=>222,8288=>0,8289=>0,8290=>0,8291=>0,8292=>0,8298=>0,8299=>0,8300=>0,8301=>0,8302=>0,8303=>0,8304=>401,8305=>179,8308=>401,8309=>401,8310=>401,8311=>401,8312=>401,8313=>401,8314=>528,8315=>528,8316=>528,8317=>246,8318=>246,8319=>398,8320=>401,8321=>401,8322=>401,8323=>401,8324=>401,8325=>401,8326=>401,8327=>401,8328=>401,8329=>401,8330=>528,8331=>528,8332=>528,8333=>246,8334=>246,8336=>392,8337=>417,8338=>414,8339=>444,8340=>417,8341=>404,8342=>426,8343=>166,8344=>623,8345=>398,8346=>428,8347=>373,8348=>295,8352=>877,8353=>636,8354=>636,8355=>636,8356=>636,8357=>974,8358=>748,8359=>1272,8360=>1074,8361=>989,8362=>784,8363=>636,8364=>636,8365=>636,8366=>636,8367=>1272,8368=>636,8369=>636,8370=>636,8371=>636,8372=>774,8373=>636,8376=>636,8377=>636,8378=>679,8400=>0,8401=>0,8406=>0,8407=>0,8411=>0,8412=>0,8417=>0,8448=>1019,8449=>1019,8450=>698,8451=>1123,8452=>642,8453=>1019,8454=>1067,8455=>614,8456=>698,8457=>952,8459=>988,8460=>754,8461=>850,8462=>634,8463=>634,8464=>470,8465=>697,8466=>720,8467=>413,8468=>818,8469=>801,8470=>1040,8471=>1000,8472=>697,8473=>701,8474=>787,8475=>798,8476=>814,8477=>792,8478=>896,8479=>684,8480=>1020,8481=>1074,8482=>1000,8483=>684,8484=>745,8485=>578,8486=>764,8487=>764,8488=>616,8489=>338,8490=>656,8491=>684,8492=>786,8493=>703,8494=>854,8495=>592,8496=>605,8497=>786,8498=>575,8499=>1069,8500=>462,8501=>745,8502=>674,8503=>466,8504=>645,8505=>380,8506=>926,8507=>1194,8508=>702,8509=>728,8510=>654,8511=>849,8512=>811,8513=>775,8514=>557,8515=>557,8516=>611,8517=>819,8518=>708,8519=>615,8520=>351,8521=>351,8523=>780,8526=>526,8528=>969,8529=>969,8530=>1370,8531=>969,8532=>969,8533=>969,8534=>969,8535=>969,8536=>969,8537=>969,8538=>969,8539=>969,8540=>969,8541=>969,8542=>969,8543=>568,8544=>295,8545=>492,8546=>689,8547=>923,8548=>684,8549=>922,8550=>1120,8551=>1317,8552=>917,8553=>685,8554=>933,8555=>1131,8556=>557,8557=>698,8558=>770,8559=>863,8560=>278,8561=>458,8562=>637,8563=>812,8564=>592,8565=>811,8566=>991,8567=>1170,8568=>819,8569=>592,8570=>822,8571=>1002,8572=>278,8573=>550,8574=>635,8575=>974,8576=>1245,8577=>770,8578=>1245,8579=>703,8580=>549,8581=>698,8585=>969,8592=>838,8593=>838,8594=>838,8595=>838,8596=>838,8597=>838,8598=>838,8599=>838,8600=>838,8601=>838,8602=>838,8603=>838,8604=>838,8605=>838,8606=>838,8607=>838,8608=>838,8609=>838,8610=>838,8611=>838,8612=>838,8613=>838,8614=>838,8615=>838,8616=>838,8617=>838,8618=>838,8619=>838,8620=>838,8621=>838,8622=>838,8623=>838,8624=>838,8625=>838,8626=>838,8627=>838,8628=>838,8629=>838,8630=>838,8631=>838,8632=>838,8633=>838,8634=>838,8635=>838,8636=>838,8637=>838,8638=>838,8639=>838,8640=>838,8641=>838,8642=>838,8643=>838,8644=>838,8645=>838,8646=>838,8647=>838,8648=>838,8649=>838,8650=>838,8651=>838,8652=>838,8653=>838,8654=>838,8655=>838,8656=>838,8657=>838,8658=>838,8659=>838,8660=>838,8661=>838,8662=>838,8663=>838,8664=>838,8665=>838,8666=>838,8667=>838,8668=>838,8669=>838,8670=>838,8671=>838,8672=>838,8673=>838,8674=>838,8675=>838,8676=>838,8677=>838,8678=>838,8679=>838,8680=>838,8681=>838,8682=>838,8683=>838,8684=>838,8685=>838,8686=>838,8687=>838,8688=>838,8689=>838,8690=>838,8691=>838,8692=>838,8693=>838,8694=>838,8695=>838,8696=>838,8697=>838,8698=>838,8699=>838,8700=>838,8701=>838,8702=>838,8703=>838,8704=>684,8705=>636,8706=>517,8707=>632,8708=>632,8709=>871,8710=>669,8711=>669,8712=>871,8713=>871,8714=>718,8715=>871,8716=>871,8717=>718,8718=>636,8719=>757,8720=>757,8721=>674,8722=>838,8723=>838,8724=>838,8725=>337,8726=>637,8727=>838,8728=>626,8729=>626,8730=>637,8731=>637,8732=>637,8733=>714,8734=>833,8735=>838,8736=>896,8737=>896,8738=>838,8739=>500,8740=>500,8741=>500,8742=>500,8743=>732,8744=>732,8745=>732,8746=>732,8747=>521,8748=>789,8749=>1057,8750=>521,8751=>789,8752=>1057,8753=>521,8754=>521,8755=>521,8756=>636,8757=>636,8758=>260,8759=>636,8760=>838,8761=>838,8762=>838,8763=>838,8764=>838,8765=>838,8766=>838,8767=>838,8768=>375,8769=>838,8770=>838,8771=>838,8772=>838,8773=>838,8774=>838,8775=>838,8776=>838,8777=>838,8778=>838,8779=>838,8780=>838,8781=>838,8782=>838,8783=>838,8784=>838,8785=>838,8786=>839,8787=>839,8788=>1000,8789=>1000,8790=>838,8791=>838,8792=>838,8793=>838,8794=>838,8795=>838,8796=>838,8797=>838,8798=>838,8799=>838,8800=>838,8801=>838,8802=>838,8803=>838,8804=>838,8805=>838,8806=>838,8807=>838,8808=>838,8809=>838,8810=>1047,8811=>1047,8812=>464,8813=>838,8814=>838,8815=>838,8816=>838,8817=>838,8818=>838,8819=>838,8820=>838,8821=>838,8822=>838,8823=>838,8824=>838,8825=>838,8826=>838,8827=>838,8828=>838,8829=>838,8830=>838,8831=>838,8832=>838,8833=>838,8834=>838,8835=>838,8836=>838,8837=>838,8838=>838,8839=>838,8840=>838,8841=>838,8842=>838,8843=>838,8844=>732,8845=>732,8846=>732,8847=>838,8848=>838,8849=>838,8850=>838,8851=>780,8852=>780,8853=>838,8854=>838,8855=>838,8856=>838,8857=>838,8858=>838,8859=>838,8860=>838,8861=>838,8862=>838,8863=>838,8864=>838,8865=>838,8866=>871,8867=>871,8868=>871,8869=>871,8870=>521,8871=>521,8872=>871,8873=>871,8874=>871,8875=>871,8876=>871,8877=>871,8878=>871,8879=>871,8880=>838,8881=>838,8882=>838,8883=>838,8884=>838,8885=>838,8886=>1000,8887=>1000,8888=>838,8889=>838,8890=>521,8891=>732,8892=>732,8893=>732,8894=>838,8895=>838,8896=>820,8897=>820,8898=>820,8899=>820,8900=>494,8901=>318,8902=>626,8903=>838,8904=>1000,8905=>1000,8906=>1000,8907=>1000,8908=>1000,8909=>838,8910=>732,8911=>732,8912=>838,8913=>838,8914=>838,8915=>838,8916=>838,8917=>838,8918=>838,8919=>838,8920=>1422,8921=>1422,8922=>838,8923=>838,8924=>838,8925=>838,8926=>838,8927=>838,8928=>838,8929=>838,8930=>838,8931=>838,8932=>838,8933=>838,8934=>838,8935=>838,8936=>838,8937=>838,8938=>838,8939=>838,8940=>838,8941=>838,8942=>1000,8943=>1000,8944=>1000,8945=>1000,8946=>1000,8947=>871,8948=>718,8949=>871,8950=>871,8951=>718,8952=>871,8953=>871,8954=>1000,8955=>871,8956=>718,8957=>871,8958=>718,8959=>871,8960=>602,8961=>602,8962=>635,8963=>838,8964=>838,8965=>838,8966=>838,8967=>488,8968=>390,8969=>390,8970=>390,8971=>390,8972=>809,8973=>809,8974=>809,8975=>809,8976=>838,8977=>513,8984=>1000,8985=>838,8988=>469,8989=>469,8990=>469,8991=>469,8992=>521,8993=>521,8996=>1152,8997=>1152,8998=>1414,8999=>1152,9000=>1443,9003=>1414,9004=>873,9075=>338,9076=>635,9077=>837,9082=>659,9085=>757,9095=>1152,9108=>873,9115=>500,9116=>500,9117=>500,9118=>500,9119=>500,9120=>500,9121=>500,9122=>500,9123=>500,9124=>500,9125=>500,9126=>500,9127=>750,9128=>750,9129=>750,9130=>750,9131=>750,9132=>750,9133=>750,9134=>521,9166=>838,9167=>945,9187=>873,9189=>769,9192=>636,9250=>635,9251=>635,9312=>896,9313=>896,9314=>896,9315=>896,9316=>896,9317=>896,9318=>896,9319=>896,9320=>896,9321=>896,9472=>602,9473=>602,9474=>602,9475=>602,9476=>602,9477=>602,9478=>602,9479=>602,9480=>602,9481=>602,9482=>602,9483=>602,9484=>602,9485=>602,9486=>602,9487=>602,9488=>602,9489=>602,9490=>602,9491=>602,9492=>602,9493=>602,9494=>602,9495=>602,9496=>602,9497=>602,9498=>602,9499=>602,9500=>602,9501=>602,9502=>602,9503=>602,9504=>602,9505=>602,9506=>602,9507=>602,9508=>602,9509=>602,9510=>602,9511=>602,9512=>602,9513=>602,9514=>602,9515=>602,9516=>602,9517=>602,9518=>602,9519=>602,9520=>602,9521=>602,9522=>602,9523=>602,9524=>602,9525=>602,9526=>602,9527=>602,9528=>602,9529=>602,9530=>602,9531=>602,9532=>602,9533=>602,9534=>602,9535=>602,9536=>602,9537=>602,9538=>602,9539=>602,9540=>602,9541=>602,9542=>602,9543=>602,9544=>602,9545=>602,9546=>602,9547=>602,9548=>602,9549=>602,9550=>602,9551=>602,9552=>602,9553=>602,9554=>602,9555=>602,9556=>602,9557=>602,9558=>602,9559=>602,9560=>602,9561=>602,9562=>602,9563=>602,9564=>602,9565=>602,9566=>602,9567=>602,9568=>602,9569=>602,9570=>602,9571=>602,9572=>602,9573=>602,9574=>602,9575=>602,9576=>602,9577=>602,9578=>602,9579=>602,9580=>602,9581=>602,9582=>602,9583=>602,9584=>602,9585=>602,9586=>602,9587=>602,9588=>602,9589=>602,9590=>602,9591=>602,9592=>602,9593=>602,9594=>602,9595=>602,9596=>602,9597=>602,9598=>602,9599=>602,9600=>769,9601=>769,9602=>769,9603=>769,9604=>769,9605=>769,9606=>769,9607=>769,9608=>769,9609=>769,9610=>769,9611=>769,9612=>769,9613=>769,9614=>769,9615=>769,9616=>769,9617=>769,9618=>769,9619=>769,9620=>769,9621=>769,9622=>769,9623=>769,9624=>769,9625=>769,9626=>769,9627=>769,9628=>769,9629=>769,9630=>769,9631=>769,9632=>945,9633=>945,9634=>945,9635=>945,9636=>945,9637=>945,9638=>945,9639=>945,9640=>945,9641=>945,9642=>678,9643=>678,9644=>945,9645=>945,9646=>550,9647=>550,9648=>769,9649=>769,9650=>769,9651=>769,9652=>502,9653=>502,9654=>769,9655=>769,9656=>502,9657=>502,9658=>769,9659=>769,9660=>769,9661=>769,9662=>502,9663=>502,9664=>769,9665=>769,9666=>502,9667=>502,9668=>769,9669=>769,9670=>769,9671=>769,9672=>769,9673=>873,9674=>494,9675=>873,9676=>873,9677=>873,9678=>873,9679=>873,9680=>873,9681=>873,9682=>873,9683=>873,9684=>873,9685=>873,9686=>527,9687=>527,9688=>791,9689=>970,9690=>970,9691=>970,9692=>387,9693=>387,9694=>387,9695=>387,9696=>873,9697=>873,9698=>769,9699=>769,9700=>769,9701=>769,9702=>590,9703=>945,9704=>945,9705=>945,9706=>945,9707=>945,9708=>769,9709=>769,9710=>769,9711=>1119,9712=>945,9713=>945,9714=>945,9715=>945,9716=>873,9717=>873,9718=>873,9719=>873,9720=>769,9721=>769,9722=>769,9723=>830,9724=>830,9725=>732,9726=>732,9727=>769,9728=>896,9729=>1000,9730=>896,9731=>896,9732=>896,9733=>896,9734=>896,9735=>573,9736=>896,9737=>896,9738=>888,9739=>888,9740=>671,9741=>1013,9742=>1246,9743=>1250,9744=>896,9745=>896,9746=>896,9747=>532,9748=>896,9749=>896,9750=>896,9751=>896,9752=>896,9753=>896,9754=>896,9755=>896,9756=>896,9757=>609,9758=>896,9759=>609,9760=>896,9761=>896,9762=>896,9763=>896,9764=>669,9765=>746,9766=>649,9767=>784,9768=>545,9769=>896,9770=>896,9771=>896,9772=>710,9773=>896,9774=>896,9775=>896,9776=>896,9777=>896,9778=>896,9779=>896,9780=>896,9781=>896,9782=>896,9783=>896,9784=>896,9785=>1042,9786=>1042,9787=>1042,9788=>896,9789=>896,9790=>896,9791=>614,9792=>732,9793=>732,9794=>896,9795=>896,9796=>896,9797=>896,9798=>896,9799=>896,9800=>896,9801=>896,9802=>896,9803=>896,9804=>896,9805=>896,9806=>896,9807=>896,9808=>896,9809=>896,9810=>896,9811=>896,9812=>896,9813=>896,9814=>896,9815=>896,9816=>896,9817=>896,9818=>896,9819=>896,9820=>896,9821=>896,9822=>896,9823=>896,9824=>896,9825=>896,9826=>896,9827=>896,9828=>896,9829=>896,9830=>896,9831=>896,9832=>896,9833=>472,9834=>638,9835=>896,9836=>896,9837=>472,9838=>357,9839=>484,9840=>748,9841=>766,9842=>896,9843=>896,9844=>896,9845=>896,9846=>896,9847=>896,9848=>896,9849=>896,9850=>896,9851=>896,9852=>896,9853=>896,9854=>896,9855=>896,9856=>869,9857=>869,9858=>869,9859=>869,9860=>869,9861=>869,9862=>896,9863=>896,9864=>896,9865=>896,9866=>896,9867=>896,9868=>896,9869=>896,9870=>896,9871=>896,9872=>896,9873=>896,9874=>896,9875=>896,9876=>896,9877=>541,9878=>896,9879=>896,9880=>896,9881=>896,9882=>896,9883=>896,9884=>896,9888=>896,9889=>702,9890=>1004,9891=>1089,9892=>1175,9893=>903,9894=>838,9895=>838,9896=>838,9897=>838,9898=>838,9899=>838,9900=>838,9901=>838,9902=>838,9903=>838,9904=>844,9905=>838,9906=>732,9907=>732,9908=>732,9909=>732,9910=>850,9911=>732,9912=>732,9920=>838,9921=>838,9922=>838,9923=>838,9954=>732,9985=>838,9986=>838,9987=>838,9988=>838,9990=>838,9991=>838,9992=>838,9993=>838,9996=>838,9997=>838,9998=>838,9999=>838,10000=>838,10001=>838,10002=>838,10003=>838,10004=>838,10005=>838,10006=>838,10007=>838,10008=>838,10009=>838,10010=>838,10011=>838,10012=>838,10013=>838,10014=>838,10015=>838,10016=>838,10017=>838,10018=>838,10019=>838,10020=>838,10021=>838,10022=>838,10023=>838,10025=>838,10026=>838,10027=>838,10028=>838,10029=>838,10030=>838,10031=>838,10032=>838,10033=>838,10034=>838,10035=>838,10036=>838,10037=>838,10038=>838,10039=>838,10040=>838,10041=>838,10042=>838,10043=>838,10044=>838,10045=>838,10046=>838,10047=>838,10048=>838,10049=>838,10050=>838,10051=>838,10052=>838,10053=>838,10054=>838,10055=>838,10056=>838,10057=>838,10058=>838,10059=>838,10061=>896,10063=>896,10064=>896,10065=>896,10066=>896,10070=>896,10072=>838,10073=>838,10074=>838,10075=>322,10076=>322,10077=>538,10078=>538,10081=>838,10082=>838,10083=>838,10084=>838,10085=>838,10086=>838,10087=>838,10088=>838,10089=>838,10090=>838,10091=>838,10092=>838,10093=>838,10094=>838,10095=>838,10096=>838,10097=>838,10098=>838,10099=>838,10100=>838,10101=>838,10102=>896,10103=>896,10104=>896,10105=>896,10106=>896,10107=>896,10108=>896,10109=>896,10110=>896,10111=>896,10112=>838,10113=>838,10114=>838,10115=>838,10116=>838,10117=>838,10118=>838,10119=>838,10120=>838,10121=>838,10122=>838,10123=>838,10124=>838,10125=>838,10126=>838,10127=>838,10128=>838,10129=>838,10130=>838,10131=>838,10132=>838,10136=>838,10137=>838,10138=>838,10139=>838,10140=>838,10141=>838,10142=>838,10143=>838,10144=>838,10145=>838,10146=>838,10147=>838,10148=>838,10149=>838,10150=>838,10151=>838,10152=>838,10153=>838,10154=>838,10155=>838,10156=>838,10157=>838,10158=>838,10159=>838,10161=>838,10162=>838,10163=>838,10164=>838,10165=>838,10166=>838,10167=>838,10168=>838,10169=>838,10170=>838,10171=>838,10172=>838,10173=>838,10174=>838,10181=>390,10182=>390,10208=>494,10214=>495,10215=>495,10216=>390,10217=>390,10218=>556,10219=>556,10224=>838,10225=>838,10226=>838,10227=>838,10228=>1157,10229=>1434,10230=>1434,10231=>1434,10232=>1434,10233=>1434,10234=>1434,10235=>1434,10236=>1434,10237=>1434,10238=>1434,10239=>1434,10240=>732,10241=>732,10242=>732,10243=>732,10244=>732,10245=>732,10246=>732,10247=>732,10248=>732,10249=>732,10250=>732,10251=>732,10252=>732,10253=>732,10254=>732,10255=>732,10256=>732,10257=>732,10258=>732,10259=>732,10260=>732,10261=>732,10262=>732,10263=>732,10264=>732,10265=>732,10266=>732,10267=>732,10268=>732,10269=>732,10270=>732,10271=>732,10272=>732,10273=>732,10274=>732,10275=>732,10276=>732,10277=>732,10278=>732,10279=>732,10280=>732,10281=>732,10282=>732,10283=>732,10284=>732,10285=>732,10286=>732,10287=>732,10288=>732,10289=>732,10290=>732,10291=>732,10292=>732,10293=>732,10294=>732,10295=>732,10296=>732,10297=>732,10298=>732,10299=>732,10300=>732,10301=>732,10302=>732,10303=>732,10304=>732,10305=>732,10306=>732,10307=>732,10308=>732,10309=>732,10310=>732,10311=>732,10312=>732,10313=>732,10314=>732,10315=>732,10316=>732,10317=>732,10318=>732,10319=>732,10320=>732,10321=>732,10322=>732,10323=>732,10324=>732,10325=>732,10326=>732,10327=>732,10328=>732,10329=>732,10330=>732,10331=>732,10332=>732,10333=>732,10334=>732,10335=>732,10336=>732,10337=>732,10338=>732,10339=>732,10340=>732,10341=>732,10342=>732,10343=>732,10344=>732,10345=>732,10346=>732,10347=>732,10348=>732,10349=>732,10350=>732,10351=>732,10352=>732,10353=>732,10354=>732,10355=>732,10356=>732,10357=>732,10358=>732,10359=>732,10360=>732,10361=>732,10362=>732,10363=>732,10364=>732,10365=>732,10366=>732,10367=>732,10368=>732,10369=>732,10370=>732,10371=>732,10372=>732,10373=>732,10374=>732,10375=>732,10376=>732,10377=>732,10378=>732,10379=>732,10380=>732,10381=>732,10382=>732,10383=>732,10384=>732,10385=>732,10386=>732,10387=>732,10388=>732,10389=>732,10390=>732,10391=>732,10392=>732,10393=>732,10394=>732,10395=>732,10396=>732,10397=>732,10398=>732,10399=>732,10400=>732,10401=>732,10402=>732,10403=>732,10404=>732,10405=>732,10406=>732,10407=>732,10408=>732,10409=>732,10410=>732,10411=>732,10412=>732,10413=>732,10414=>732,10415=>732,10416=>732,10417=>732,10418=>732,10419=>732,10420=>732,10421=>732,10422=>732,10423=>732,10424=>732,10425=>732,10426=>732,10427=>732,10428=>732,10429=>732,10430=>732,10431=>732,10432=>732,10433=>732,10434=>732,10435=>732,10436=>732,10437=>732,10438=>732,10439=>732,10440=>732,10441=>732,10442=>732,10443=>732,10444=>732,10445=>732,10446=>732,10447=>732,10448=>732,10449=>732,10450=>732,10451=>732,10452=>732,10453=>732,10454=>732,10455=>732,10456=>732,10457=>732,10458=>732,10459=>732,10460=>732,10461=>732,10462=>732,10463=>732,10464=>732,10465=>732,10466=>732,10467=>732,10468=>732,10469=>732,10470=>732,10471=>732,10472=>732,10473=>732,10474=>732,10475=>732,10476=>732,10477=>732,10478=>732,10479=>732,10480=>732,10481=>732,10482=>732,10483=>732,10484=>732,10485=>732,10486=>732,10487=>732,10488=>732,10489=>732,10490=>732,10491=>732,10492=>732,10493=>732,10494=>732,10495=>732,10502=>838,10503=>838,10506=>838,10507=>838,10560=>683,10561=>683,10627=>734,10628=>734,10702=>838,10703=>1000,10704=>1000,10705=>1000,10706=>1000,10707=>1000,10708=>1000,10709=>1000,10731=>494,10746=>838,10747=>838,10752=>1000,10753=>1000,10754=>1000,10764=>1325,10765=>521,10766=>521,10767=>521,10768=>521,10769=>521,10770=>521,10771=>521,10772=>521,10773=>521,10774=>521,10775=>521,10776=>521,10777=>521,10778=>521,10779=>521,10780=>521,10799=>838,10858=>838,10859=>838,10877=>838,10878=>838,10879=>838,10880=>838,10881=>838,10882=>838,10883=>838,10884=>838,10885=>838,10886=>838,10887=>838,10888=>838,10889=>838,10890=>838,10891=>838,10892=>838,10893=>838,10894=>838,10895=>838,10896=>838,10897=>838,10898=>838,10899=>838,10900=>838,10901=>838,10902=>838,10903=>838,10904=>838,10905=>838,10906=>838,10907=>838,10908=>838,10909=>838,10910=>838,10911=>838,10912=>838,10926=>838,10927=>838,10928=>838,10929=>838,10930=>838,10931=>838,10932=>838,10933=>838,10934=>838,10935=>838,10936=>838,10937=>838,10938=>838,11001=>838,11002=>838,11008=>838,11009=>838,11010=>838,11011=>838,11012=>838,11013=>838,11014=>838,11015=>838,11016=>838,11017=>838,11018=>838,11019=>838,11020=>838,11021=>838,11022=>836,11023=>836,11024=>836,11025=>836,11026=>945,11027=>945,11028=>945,11029=>945,11030=>769,11031=>769,11032=>769,11033=>769,11034=>945,11039=>869,11040=>869,11041=>873,11042=>873,11043=>873,11044=>1119,11091=>869,11092=>869,11360=>557,11361=>278,11362=>557,11363=>603,11364=>695,11365=>613,11366=>392,11367=>752,11368=>634,11369=>656,11370=>579,11371=>685,11372=>525,11373=>781,11374=>863,11375=>684,11376=>781,11377=>734,11378=>1128,11379=>961,11380=>592,11381=>654,11382=>568,11383=>660,11385=>414,11386=>612,11387=>491,11388=>175,11389=>431,11390=>635,11391=>685,11520=>591,11521=>595,11522=>564,11523=>602,11524=>587,11525=>911,11526=>626,11527=>952,11528=>595,11529=>607,11530=>954,11531=>620,11532=>595,11533=>926,11534=>595,11535=>806,11536=>931,11537=>584,11538=>592,11539=>923,11540=>953,11541=>828,11542=>596,11543=>595,11544=>590,11545=>592,11546=>592,11547=>621,11548=>920,11549=>589,11550=>586,11551=>581,11552=>914,11553=>596,11554=>595,11555=>592,11556=>642,11557=>901,11568=>646,11569=>888,11570=>888,11571=>682,11572=>684,11573=>635,11574=>562,11575=>684,11576=>684,11577=>632,11578=>632,11579=>683,11580=>875,11581=>685,11582=>491,11583=>685,11584=>888,11585=>888,11586=>300,11587=>627,11588=>752,11589=>656,11590=>527,11591=>685,11592=>645,11593=>632,11594=>502,11595=>953,11596=>778,11597=>748,11598=>621,11599=>295,11600=>778,11601=>295,11602=>752,11603=>633,11604=>888,11605=>888,11606=>752,11607=>320,11608=>749,11609=>888,11610=>888,11611=>698,11612=>768,11613=>685,11614=>698,11615=>622,11616=>684,11617=>752,11618=>632,11619=>788,11620=>567,11621=>788,11631=>515,11800=>531,11806=>838,11810=>390,11811=>390,11812=>390,11813=>390,11822=>531,19904=>896,19905=>896,19906=>896,19907=>896,19908=>896,19909=>896,19910=>896,19911=>896,19912=>896,19913=>896,19914=>896,19915=>896,19916=>896,19917=>896,19918=>896,19919=>896,19920=>896,19921=>896,19922=>896,19923=>896,19924=>896,19925=>896,19926=>896,19927=>896,19928=>896,19929=>896,19930=>896,19931=>896,19932=>896,19933=>896,19934=>896,19935=>896,19936=>896,19937=>896,19938=>896,19939=>896,19940=>896,19941=>896,19942=>896,19943=>896,19944=>896,19945=>896,19946=>896,19947=>896,19948=>896,19949=>896,19950=>896,19951=>896,19952=>896,19953=>896,19954=>896,19955=>896,19956=>896,19957=>896,19958=>896,19959=>896,19960=>896,19961=>896,19962=>896,19963=>896,19964=>896,19965=>896,19966=>896,19967=>896,42192=>686,42193=>603,42194=>603,42195=>770,42196=>611,42197=>611,42198=>775,42199=>656,42200=>656,42201=>512,42202=>698,42203=>703,42204=>685,42205=>575,42206=>575,42207=>863,42208=>748,42209=>557,42210=>635,42211=>695,42212=>695,42213=>684,42214=>684,42215=>752,42216=>775,42217=>512,42218=>989,42219=>685,42220=>611,42221=>686,42222=>684,42223=>684,42224=>632,42225=>632,42226=>295,42227=>787,42228=>732,42229=>732,42230=>557,42231=>767,42232=>300,42233=>300,42234=>596,42235=>596,42236=>300,42237=>300,42238=>588,42239=>588,42564=>635,42565=>521,42566=>354,42567=>338,42572=>1180,42573=>1028,42576=>1029,42577=>906,42580=>1080,42581=>842,42582=>977,42583=>843,42594=>1062,42595=>912,42596=>1066,42597=>901,42598=>1178,42599=>1008,42600=>787,42601=>612,42602=>855,42603=>712,42604=>1358,42605=>1019,42606=>879,42634=>782,42635=>685,42636=>611,42637=>583,42644=>686,42645=>634,42760=>493,42761=>493,42762=>493,42763=>493,42764=>493,42765=>493,42766=>493,42767=>493,42768=>493,42769=>493,42770=>493,42771=>493,42772=>493,42773=>493,42774=>493,42779=>369,42780=>369,42781=>252,42782=>252,42783=>252,42786=>385,42787=>356,42788=>472,42789=>472,42790=>752,42791=>634,42792=>878,42793=>709,42794=>614,42795=>541,42800=>491,42801=>521,42802=>1250,42803=>985,42804=>1203,42805=>990,42806=>1142,42807=>981,42808=>971,42809=>818,42810=>971,42811=>818,42812=>959,42813=>818,42814=>703,42815=>549,42816=>656,42817=>583,42822=>680,42823=>392,42824=>582,42825=>427,42826=>807,42827=>704,42830=>1358,42831=>1019,42832=>603,42833=>635,42834=>734,42835=>774,42838=>787,42839=>635,42852=>605,42853=>635,42854=>605,42855=>635,42880=>557,42881=>278,42882=>735,42883=>634,42889=>337,42890=>376,42891=>401,42892=>275,42893=>686,42894=>487,42896=>772,42897=>667,42912=>775,42913=>635,42914=>656,42915=>579,42916=>748,42917=>634,42918=>695,42919=>411,42920=>635,42921=>521,42922=>801,43002=>915,43003=>575,43004=>603,43005=>863,43006=>295,43007=>1199,61184=>213,61185=>238,61186=>257,61187=>264,61188=>267,61189=>238,61190=>213,61191=>238,61192=>257,61193=>264,61194=>257,61195=>238,61196=>213,61197=>238,61198=>257,61199=>264,61200=>257,61201=>238,61202=>213,61203=>238,61204=>267,61205=>264,61206=>257,61207=>238,61208=>213,61209=>275,61440=>977,61441=>977,61442=>977,61443=>977,62464=>580,62465=>580,62466=>624,62467=>889,62468=>585,62469=>580,62470=>653,62471=>882,62472=>555,62473=>580,62474=>1168,62475=>589,62476=>590,62477=>869,62478=>580,62479=>589,62480=>914,62481=>590,62482=>731,62483=>583,62484=>872,62485=>589,62486=>895,62487=>589,62488=>589,62489=>590,62490=>649,62491=>589,62492=>589,62493=>599,62494=>590,62495=>516,62496=>580,62497=>584,62498=>580,62499=>580,62500=>581,62501=>638,62502=>955,62504=>931,62505=>808,62506=>508,62507=>508,62508=>508,62509=>508,62510=>508,62511=>508,62512=>508,62513=>508,62514=>508,62515=>508,62516=>518,62517=>518,62518=>518,62519=>787,62520=>787,62521=>787,62522=>787,62523=>787,62524=>546,62525=>546,62526=>546,62527=>546,62528=>546,62529=>546,63173=>612,64256=>689,64257=>630,64258=>630,64259=>967,64260=>967,64261=>686,64262=>861,64275=>1202,64276=>1202,64277=>1196,64278=>1186,64279=>1529,64285=>224,64286=>0,64287=>331,64288=>636,64289=>856,64290=>774,64291=>906,64292=>771,64293=>843,64294=>855,64295=>807,64296=>875,64297=>838,64298=>708,64299=>708,64300=>708,64301=>708,64302=>668,64303=>668,64304=>668,64305=>578,64306=>412,64307=>546,64308=>653,64309=>355,64310=>406,64312=>648,64313=>330,64314=>537,64315=>529,64316=>568,64318=>679,64320=>399,64321=>649,64323=>640,64324=>625,64326=>593,64327=>709,64328=>564,64329=>708,64330=>657,64331=>272,64332=>578,64333=>529,64334=>625,64335=>629,64338=>941,64339=>982,64340=>278,64341=>302,64342=>941,64343=>982,64344=>278,64345=>302,64346=>941,64347=>982,64348=>278,64349=>302,64350=>941,64351=>982,64352=>278,64353=>302,64354=>941,64355=>982,64356=>278,64357=>302,64358=>941,64359=>982,64360=>278,64361=>302,64362=>1037,64363=>1035,64364=>478,64365=>506,64366=>1037,64367=>1035,64368=>478,64369=>506,64370=>646,64371=>646,64372=>618,64373=>646,64374=>646,64375=>646,64376=>618,64377=>646,64378=>646,64379=>646,64380=>618,64381=>646,64382=>646,64383=>646,64384=>618,64385=>646,64386=>445,64387=>525,64388=>445,64389=>525,64390=>445,64391=>525,64392=>445,64393=>525,64394=>483,64395=>552,64396=>483,64397=>552,64398=>895,64399=>895,64400=>476,64401=>552,64402=>895,64403=>895,64404=>476,64405=>552,64406=>895,64407=>895,64408=>476,64409=>552,64410=>895,64411=>895,64412=>476,64413=>552,64414=>734,64415=>761,64416=>734,64417=>761,64418=>278,64419=>302,64426=>698,64427=>632,64428=>527,64429=>461,64467=>824,64468=>843,64469=>476,64470=>552,64473=>483,64474=>517,64488=>278,64489=>302,64508=>783,64509=>833,64510=>278,64511=>302,65024=>0,65025=>0,65026=>0,65027=>0,65028=>0,65029=>0,65030=>0,65031=>0,65032=>0,65033=>0,65034=>0,65035=>0,65036=>0,65037=>0,65038=>0,65039=>0,65056=>0,65057=>0,65058=>0,65059=>0,65136=>293,65137=>293,65138=>293,65139=>262,65140=>293,65142=>293,65143=>293,65144=>293,65145=>293,65146=>293,65147=>293,65148=>293,65149=>293,65150=>293,65151=>293,65152=>470,65153=>278,65154=>305,65155=>278,65156=>305,65157=>483,65158=>517,65159=>278,65160=>305,65161=>783,65162=>833,65163=>278,65164=>302,65165=>278,65166=>305,65167=>941,65168=>982,65169=>278,65170=>302,65171=>524,65172=>536,65173=>941,65174=>982,65175=>278,65176=>302,65177=>941,65178=>982,65179=>278,65180=>302,65181=>646,65182=>646,65183=>618,65184=>646,65185=>646,65186=>646,65187=>618,65188=>646,65189=>646,65190=>646,65191=>618,65192=>646,65193=>445,65194=>525,65195=>445,65196=>525,65197=>483,65198=>552,65199=>483,65200=>552,65201=>1221,65202=>1275,65203=>838,65204=>892,65205=>1221,65206=>1275,65207=>838,65208=>892,65209=>1209,65210=>1225,65211=>849,65212=>867,65213=>1209,65214=>1225,65215=>849,65216=>867,65217=>925,65218=>949,65219=>796,65220=>820,65221=>925,65222=>949,65223=>796,65224=>820,65225=>597,65226=>532,65227=>597,65228=>482,65229=>597,65230=>532,65231=>523,65232=>482,65233=>1037,65234=>1035,65235=>478,65236=>506,65237=>776,65238=>834,65239=>478,65240=>506,65241=>824,65242=>843,65243=>476,65244=>552,65245=>727,65246=>757,65247=>305,65248=>331,65249=>619,65250=>666,65251=>536,65252=>578,65253=>734,65254=>761,65255=>278,65256=>302,65257=>524,65258=>536,65259=>527,65260=>461,65261=>483,65262=>517,65263=>783,65264=>833,65265=>783,65266=>833,65267=>278,65268=>302,65269=>570,65270=>597,65271=>570,65272=>597,65273=>570,65274=>597,65275=>570,65276=>597,65279=>0,65529=>0,65530=>0,65531=>0,65532=>0,65533=>1025,65535=>600); -// --- EOF --- diff --git a/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/include/tcpdf_font_data.php b/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/include/tcpdf_font_data.php deleted file mode 100644 index 974e72e..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/include/tcpdf_font_data.php +++ /dev/null @@ -1,18447 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : Unicode data and encoding maps for TCPDF. -// -//============================================================+ - -/** - * @file - * Unicode data and encoding maps for TCPDF. - * @author Nicola Asuni - * @package com.tecnick.tcpdf - */ - -/** - * @class TCPDF_FONT_DATA - * Unicode data and encoding maps for TCPDF. - * @package com.tecnick.tcpdf - * @version 1.0.001 - * @author Nicola Asuni - info@tecnick.com - */ -class TCPDF_FONT_DATA { - -/** - * Unicode code for Left-to-Right Mark. - * @public - */ -public static $uni_LRM = 8206; - -/** - * Unicode code for Right-to-Left Mark. - * @public - */ -public static $uni_RLM = 8207; - -/** - * Unicode code for Left-to-Right Embedding. - * @public - */ -public static $uni_LRE = 8234; - -/** - * Unicode code for Right-to-Left Embedding. - * @public - */ -public static $uni_RLE = 8235; - -/** - * Unicode code for Pop Directional Format. - * @public - */ -public static $uni_PDF = 8236; - -/** - * Unicode code for Left-to-Right Override. - * @public - */ -public static $uni_LRO = 8237; - -/** - * Unicode code for Right-to-Left Override. - * @public - */ -public static $uni_RLO = 8238; - -/** - * Pattern to test RTL (Righ-To-Left) strings using regular expressions. - * @public - */ -public static $uni_RE_PATTERN_RTL = "/( - \xD6\xBE # R - | \xD7[\x80\x83\x86\x90-\xAA\xB0-\xB4] # R - | \xDF[\x80-\xAA\xB4\xB5\xBA] # R - | \xE2\x80\x8F # R - | \xEF\xAC[\x9D\x9F\xA0-\xA8\xAA-\xB6\xB8-\xBC\xBE] # R - | \xEF\xAD[\x80\x81\x83\x84\x86-\x8F] # R - | \xF0\x90\xA0[\x80-\x85\x88\x8A-\xB5\xB7\xB8\xBC\xBF] # R - | \xF0\x90\xA4[\x80-\x99] # R - | \xF0\x90\xA8[\x80\x90-\x93\x95-\x97\x99-\xB3] # R - | \xF0\x90\xA9[\x80-\x87\x90-\x98] # R - | \xE2\x80[\xAB\xAE] # RLE & RLO - )/x"; - -/** - * Pattern to test Arabic strings using regular expressions. Source: http://www.w3.org/International/questions/qa-forms-utf-8 - * @public - */ -public static $uni_RE_PATTERN_ARABIC = "/( - \xD8[\x80-\x83\x8B\x8D\x9B\x9E\x9F\xA1-\xBA] # AL - | \xD9[\x80-\x8A\xAD-\xAF\xB1-\xBF] # AL - | \xDA[\x80-\xBF] # AL - | \xDB[\x80-\x95\x9D\xA5\xA6\xAE\xAF\xBA-\xBF] # AL - | \xDC[\x80-\x8D\x90\x92-\xAF] # AL - | \xDD[\x8D-\xAD] # AL - | \xDE[\x80-\xA5\xB1] # AL - | \xEF\xAD[\x90-\xBF] # AL - | \xEF\xAE[\x80-\xB1] # AL - | \xEF\xAF[\x93-\xBF] # AL - | \xEF[\xB0-\xB3][\x80-\xBF] # AL - | \xEF\xB4[\x80-\xBD] # AL - | \xEF\xB5[\x90-\xBF] # AL - | \xEF\xB6[\x80-\x8F\x92-\xBF] # AL - | \xEF\xB7[\x80-\x87\xB0-\xBC] # AL - | \xEF\xB9[\xB0-\xB4\xB6-\xBF] # AL - | \xEF\xBA[\x80-\xBF] # AL - | \xEF\xBB[\x80-\xBC] # AL - | \xD9[\xA0-\xA9\xAB\xAC] # AN - )/x"; - -/** - * Array of Unicode types. - * @public - */ -public static $uni_type = array( -0=>'BN', -1=>'BN', -2=>'BN', -3=>'BN', -4=>'BN', -5=>'BN', -6=>'BN', -7=>'BN', -8=>'BN', -9=>'S', -10=>'B', -11=>'S', -12=>'WS', -13=>'B', -14=>'BN', -15=>'BN', -16=>'BN', -17=>'BN', -18=>'BN', -19=>'BN', -20=>'BN', -21=>'BN', -22=>'BN', -23=>'BN', -24=>'BN', -25=>'BN', -26=>'BN', -27=>'BN', -28=>'B', -29=>'B', -30=>'B', -31=>'S', -32=>'WS', -33=>'ON', -34=>'ON', -35=>'ET', -36=>'ET', -37=>'ET', -38=>'ON', -39=>'ON', -40=>'ON', -41=>'ON', -42=>'ON', -43=>'ES', -44=>'CS', -45=>'ES', -46=>'CS', -47=>'CS', -48=>'EN', -49=>'EN', -50=>'EN', -51=>'EN', -52=>'EN', -53=>'EN', -54=>'EN', -55=>'EN', -56=>'EN', -57=>'EN', -58=>'CS', -59=>'ON', -60=>'ON', -61=>'ON', -62=>'ON', -63=>'ON', -64=>'ON', -65=>'L', -66=>'L', -67=>'L', -68=>'L', -69=>'L', -70=>'L', -71=>'L', -72=>'L', -73=>'L', -74=>'L', -75=>'L', -76=>'L', -77=>'L', -78=>'L', -79=>'L', -80=>'L', -81=>'L', -82=>'L', -83=>'L', -84=>'L', -85=>'L', -86=>'L', -87=>'L', -88=>'L', -89=>'L', -90=>'L', -91=>'ON', -92=>'ON', -93=>'ON', -94=>'ON', -95=>'ON', -96=>'ON', -97=>'L', -98=>'L', -99=>'L', -100=>'L', -101=>'L', -102=>'L', -103=>'L', -104=>'L', -105=>'L', -106=>'L', -107=>'L', -108=>'L', -109=>'L', -110=>'L', -111=>'L', -112=>'L', -113=>'L', -114=>'L', -115=>'L', -116=>'L', -117=>'L', -118=>'L', -119=>'L', -120=>'L', -121=>'L', -122=>'L', -123=>'ON', -124=>'ON', -125=>'ON', -126=>'ON', -127=>'BN', -128=>'BN', -129=>'BN', -130=>'BN', -131=>'BN', -132=>'BN', -133=>'B', -134=>'BN', -135=>'BN', -136=>'BN', -137=>'BN', -138=>'BN', -139=>'BN', -140=>'BN', -141=>'BN', -142=>'BN', -143=>'BN', -144=>'BN', -145=>'BN', -146=>'BN', -147=>'BN', -148=>'BN', -149=>'BN', -150=>'BN', -151=>'BN', -152=>'BN', -153=>'BN', -154=>'BN', -155=>'BN', -156=>'BN', -157=>'BN', -158=>'BN', -159=>'BN', -160=>'CS', -161=>'ON', -162=>'ET', -163=>'ET', -164=>'ET', -165=>'ET', -166=>'ON', -167=>'ON', -168=>'ON', -169=>'ON', -170=>'L', -171=>'ON', -172=>'ON', -173=>'BN', -174=>'ON', -175=>'ON', -176=>'ET', -177=>'ET', -178=>'EN', -179=>'EN', -180=>'ON', -181=>'L', -182=>'ON', -183=>'ON', -184=>'ON', -185=>'EN', -186=>'L', -187=>'ON', -188=>'ON', -189=>'ON', -190=>'ON', -191=>'ON', -192=>'L', -193=>'L', -194=>'L', -195=>'L', -196=>'L', -197=>'L', -198=>'L', -199=>'L', -200=>'L', -201=>'L', -202=>'L', -203=>'L', -204=>'L', -205=>'L', -206=>'L', -207=>'L', -208=>'L', -209=>'L', -210=>'L', -211=>'L', -212=>'L', -213=>'L', -214=>'L', -215=>'ON', -216=>'L', -217=>'L', -218=>'L', -219=>'L', -220=>'L', -221=>'L', -222=>'L', -223=>'L', -224=>'L', -225=>'L', -226=>'L', -227=>'L', -228=>'L', -229=>'L', -230=>'L', -231=>'L', -232=>'L', -233=>'L', -234=>'L', -235=>'L', -236=>'L', -237=>'L', -238=>'L', -239=>'L', -240=>'L', -241=>'L', -242=>'L', -243=>'L', -244=>'L', -245=>'L', -246=>'L', -247=>'ON', -248=>'L', -249=>'L', -250=>'L', -251=>'L', -252=>'L', -253=>'L', -254=>'L', -255=>'L', -256=>'L', -257=>'L', -258=>'L', -259=>'L', -260=>'L', -261=>'L', -262=>'L', -263=>'L', -264=>'L', -265=>'L', -266=>'L', -267=>'L', -268=>'L', -269=>'L', -270=>'L', -271=>'L', -272=>'L', -273=>'L', -274=>'L', -275=>'L', -276=>'L', -277=>'L', -278=>'L', -279=>'L', -280=>'L', -281=>'L', -282=>'L', -283=>'L', -284=>'L', -285=>'L', -286=>'L', -287=>'L', -288=>'L', -289=>'L', -290=>'L', -291=>'L', -292=>'L', -293=>'L', -294=>'L', -295=>'L', -296=>'L', -297=>'L', -298=>'L', -299=>'L', -300=>'L', -301=>'L', -302=>'L', -303=>'L', -304=>'L', -305=>'L', -306=>'L', -307=>'L', -308=>'L', -309=>'L', -310=>'L', -311=>'L', -312=>'L', -313=>'L', -314=>'L', -315=>'L', -316=>'L', -317=>'L', -318=>'L', -319=>'L', -320=>'L', -321=>'L', -322=>'L', -323=>'L', -324=>'L', -325=>'L', -326=>'L', -327=>'L', -328=>'L', -329=>'L', -330=>'L', -331=>'L', -332=>'L', -333=>'L', -334=>'L', -335=>'L', -336=>'L', -337=>'L', -338=>'L', -339=>'L', -340=>'L', -341=>'L', -342=>'L', -343=>'L', -344=>'L', -345=>'L', -346=>'L', -347=>'L', -348=>'L', -349=>'L', -350=>'L', -351=>'L', -352=>'L', -353=>'L', -354=>'L', -355=>'L', -356=>'L', -357=>'L', -358=>'L', -359=>'L', -360=>'L', -361=>'L', -362=>'L', -363=>'L', -364=>'L', -365=>'L', -366=>'L', -367=>'L', -368=>'L', -369=>'L', -370=>'L', -371=>'L', -372=>'L', -373=>'L', -374=>'L', -375=>'L', -376=>'L', -377=>'L', -378=>'L', -379=>'L', -380=>'L', -381=>'L', -382=>'L', -383=>'L', -384=>'L', -385=>'L', -386=>'L', -387=>'L', -388=>'L', -389=>'L', -390=>'L', -391=>'L', -392=>'L', -393=>'L', -394=>'L', -395=>'L', -396=>'L', -397=>'L', -398=>'L', -399=>'L', -400=>'L', -401=>'L', -402=>'L', -403=>'L', -404=>'L', -405=>'L', -406=>'L', -407=>'L', -408=>'L', -409=>'L', -410=>'L', -411=>'L', -412=>'L', -413=>'L', -414=>'L', -415=>'L', -416=>'L', -417=>'L', -418=>'L', -419=>'L', -420=>'L', -421=>'L', -422=>'L', -423=>'L', -424=>'L', -425=>'L', -426=>'L', -427=>'L', -428=>'L', -429=>'L', -430=>'L', -431=>'L', -432=>'L', -433=>'L', -434=>'L', -435=>'L', -436=>'L', -437=>'L', -438=>'L', -439=>'L', -440=>'L', -441=>'L', -442=>'L', -443=>'L', -444=>'L', -445=>'L', -446=>'L', -447=>'L', -448=>'L', -449=>'L', -450=>'L', -451=>'L', -452=>'L', -453=>'L', -454=>'L', -455=>'L', -456=>'L', -457=>'L', -458=>'L', -459=>'L', -460=>'L', -461=>'L', -462=>'L', -463=>'L', -464=>'L', -465=>'L', -466=>'L', -467=>'L', -468=>'L', -469=>'L', -470=>'L', -471=>'L', -472=>'L', -473=>'L', -474=>'L', -475=>'L', -476=>'L', -477=>'L', -478=>'L', -479=>'L', -480=>'L', -481=>'L', -482=>'L', -483=>'L', -484=>'L', -485=>'L', -486=>'L', -487=>'L', -488=>'L', -489=>'L', -490=>'L', -491=>'L', -492=>'L', -493=>'L', -494=>'L', -495=>'L', -496=>'L', -497=>'L', -498=>'L', -499=>'L', -500=>'L', -501=>'L', -502=>'L', -503=>'L', -504=>'L', -505=>'L', -506=>'L', -507=>'L', -508=>'L', -509=>'L', -510=>'L', -511=>'L', -512=>'L', -513=>'L', -514=>'L', -515=>'L', -516=>'L', -517=>'L', -518=>'L', -519=>'L', -520=>'L', -521=>'L', -522=>'L', -523=>'L', -524=>'L', -525=>'L', -526=>'L', -527=>'L', -528=>'L', -529=>'L', -530=>'L', -531=>'L', -532=>'L', -533=>'L', -534=>'L', -535=>'L', -536=>'L', -537=>'L', -538=>'L', -539=>'L', -540=>'L', -541=>'L', -542=>'L', -543=>'L', -544=>'L', -545=>'L', -546=>'L', -547=>'L', -548=>'L', -549=>'L', -550=>'L', -551=>'L', -552=>'L', -553=>'L', -554=>'L', -555=>'L', -556=>'L', -557=>'L', -558=>'L', -559=>'L', -560=>'L', -561=>'L', -562=>'L', -563=>'L', -564=>'L', -565=>'L', -566=>'L', -567=>'L', -568=>'L', -569=>'L', -570=>'L', -571=>'L', -572=>'L', -573=>'L', -574=>'L', -575=>'L', -576=>'L', -577=>'L', -578=>'L', -579=>'L', -580=>'L', -581=>'L', -582=>'L', -583=>'L', -584=>'L', -585=>'L', -586=>'L', -587=>'L', -588=>'L', -589=>'L', -590=>'L', -591=>'L', -592=>'L', -593=>'L', -594=>'L', -595=>'L', -596=>'L', -597=>'L', -598=>'L', -599=>'L', -600=>'L', -601=>'L', -602=>'L', -603=>'L', -604=>'L', -605=>'L', -606=>'L', -607=>'L', -608=>'L', -609=>'L', -610=>'L', -611=>'L', -612=>'L', -613=>'L', -614=>'L', -615=>'L', -616=>'L', -617=>'L', -618=>'L', -619=>'L', -620=>'L', -621=>'L', -622=>'L', -623=>'L', -624=>'L', -625=>'L', -626=>'L', -627=>'L', -628=>'L', -629=>'L', -630=>'L', -631=>'L', -632=>'L', -633=>'L', -634=>'L', -635=>'L', -636=>'L', -637=>'L', -638=>'L', -639=>'L', -640=>'L', -641=>'L', -642=>'L', -643=>'L', -644=>'L', -645=>'L', -646=>'L', -647=>'L', -648=>'L', -649=>'L', -650=>'L', -651=>'L', -652=>'L', -653=>'L', -654=>'L', -655=>'L', -656=>'L', -657=>'L', -658=>'L', -659=>'L', -660=>'L', -661=>'L', -662=>'L', -663=>'L', -664=>'L', -665=>'L', -666=>'L', -667=>'L', -668=>'L', -669=>'L', -670=>'L', -671=>'L', -672=>'L', -673=>'L', -674=>'L', -675=>'L', -676=>'L', -677=>'L', -678=>'L', -679=>'L', -680=>'L', -681=>'L', -682=>'L', -683=>'L', -684=>'L', -685=>'L', -686=>'L', -687=>'L', -688=>'L', -689=>'L', -690=>'L', -691=>'L', -692=>'L', -693=>'L', -694=>'L', -695=>'L', -696=>'L', -697=>'ON', -698=>'ON', -699=>'L', -700=>'L', -701=>'L', -702=>'L', -703=>'L', -704=>'L', -705=>'L', -706=>'ON', -707=>'ON', -708=>'ON', -709=>'ON', -710=>'ON', -711=>'ON', -712=>'ON', -713=>'ON', -714=>'ON', -715=>'ON', -716=>'ON', -717=>'ON', -718=>'ON', -719=>'ON', -720=>'L', -721=>'L', -722=>'ON', -723=>'ON', -724=>'ON', -725=>'ON', -726=>'ON', -727=>'ON', -728=>'ON', -729=>'ON', -730=>'ON', -731=>'ON', -732=>'ON', -733=>'ON', -734=>'ON', -735=>'ON', -736=>'L', -737=>'L', -738=>'L', -739=>'L', -740=>'L', -741=>'ON', -742=>'ON', -743=>'ON', -744=>'ON', -745=>'ON', -746=>'ON', -747=>'ON', -748=>'ON', -749=>'ON', -750=>'L', -751=>'ON', -752=>'ON', -753=>'ON', -754=>'ON', -755=>'ON', -756=>'ON', -757=>'ON', -758=>'ON', -759=>'ON', -760=>'ON', -761=>'ON', -762=>'ON', -763=>'ON', -764=>'ON', -765=>'ON', -766=>'ON', -767=>'ON', -768=>'NSM', -769=>'NSM', -770=>'NSM', -771=>'NSM', -772=>'NSM', -773=>'NSM', -774=>'NSM', -775=>'NSM', -776=>'NSM', -777=>'NSM', -778=>'NSM', -779=>'NSM', -780=>'NSM', -781=>'NSM', -782=>'NSM', -783=>'NSM', -784=>'NSM', -785=>'NSM', -786=>'NSM', -787=>'NSM', -788=>'NSM', -789=>'NSM', -790=>'NSM', -791=>'NSM', -792=>'NSM', -793=>'NSM', -794=>'NSM', -795=>'NSM', -796=>'NSM', -797=>'NSM', -798=>'NSM', -799=>'NSM', -800=>'NSM', -801=>'NSM', -802=>'NSM', -803=>'NSM', -804=>'NSM', -805=>'NSM', -806=>'NSM', -807=>'NSM', -808=>'NSM', -809=>'NSM', -810=>'NSM', -811=>'NSM', -812=>'NSM', -813=>'NSM', -814=>'NSM', -815=>'NSM', -816=>'NSM', -817=>'NSM', -818=>'NSM', -819=>'NSM', -820=>'NSM', -821=>'NSM', -822=>'NSM', -823=>'NSM', -824=>'NSM', -825=>'NSM', -826=>'NSM', -827=>'NSM', -828=>'NSM', -829=>'NSM', -830=>'NSM', -831=>'NSM', -832=>'NSM', -833=>'NSM', -834=>'NSM', -835=>'NSM', -836=>'NSM', -837=>'NSM', -838=>'NSM', -839=>'NSM', -840=>'NSM', -841=>'NSM', -842=>'NSM', -843=>'NSM', -844=>'NSM', -845=>'NSM', -846=>'NSM', -847=>'NSM', -848=>'NSM', -849=>'NSM', -850=>'NSM', -851=>'NSM', -852=>'NSM', -853=>'NSM', -854=>'NSM', -855=>'NSM', -856=>'NSM', -857=>'NSM', -858=>'NSM', -859=>'NSM', -860=>'NSM', -861=>'NSM', -862=>'NSM', -863=>'NSM', -864=>'NSM', -865=>'NSM', -866=>'NSM', -867=>'NSM', -868=>'NSM', -869=>'NSM', -870=>'NSM', -871=>'NSM', -872=>'NSM', -873=>'NSM', -874=>'NSM', -875=>'NSM', -876=>'NSM', -877=>'NSM', -878=>'NSM', -879=>'NSM', -884=>'ON', -885=>'ON', -890=>'L', -891=>'L', -892=>'L', -893=>'L', -894=>'ON', -900=>'ON', -901=>'ON', -902=>'L', -903=>'ON', -904=>'L', -905=>'L', -906=>'L', -908=>'L', -910=>'L', -911=>'L', -912=>'L', -913=>'L', -914=>'L', -915=>'L', -916=>'L', -917=>'L', -918=>'L', -919=>'L', -920=>'L', -921=>'L', -922=>'L', -923=>'L', -924=>'L', -925=>'L', -926=>'L', -927=>'L', -928=>'L', -929=>'L', -931=>'L', -932=>'L', -933=>'L', -934=>'L', -935=>'L', -936=>'L', -937=>'L', -938=>'L', -939=>'L', -940=>'L', -941=>'L', -942=>'L', -943=>'L', -944=>'L', -945=>'L', -946=>'L', -947=>'L', -948=>'L', -949=>'L', -950=>'L', -951=>'L', -952=>'L', -953=>'L', -954=>'L', -955=>'L', -956=>'L', -957=>'L', -958=>'L', -959=>'L', -960=>'L', -961=>'L', -962=>'L', -963=>'L', -964=>'L', -965=>'L', -966=>'L', -967=>'L', -968=>'L', -969=>'L', -970=>'L', -971=>'L', -972=>'L', -973=>'L', -974=>'L', -976=>'L', -977=>'L', -978=>'L', -979=>'L', -980=>'L', -981=>'L', -982=>'L', -983=>'L', -984=>'L', -985=>'L', -986=>'L', -987=>'L', -988=>'L', -989=>'L', -990=>'L', -991=>'L', -992=>'L', -993=>'L', -994=>'L', -995=>'L', -996=>'L', -997=>'L', -998=>'L', -999=>'L', -1000=>'L', -1001=>'L', -1002=>'L', -1003=>'L', -1004=>'L', -1005=>'L', -1006=>'L', -1007=>'L', -1008=>'L', -1009=>'L', -1010=>'L', -1011=>'L', -1012=>'L', -1013=>'L', -1014=>'ON', -1015=>'L', -1016=>'L', -1017=>'L', -1018=>'L', -1019=>'L', -1020=>'L', -1021=>'L', -1022=>'L', -1023=>'L', -1024=>'L', -1025=>'L', -1026=>'L', -1027=>'L', -1028=>'L', -1029=>'L', -1030=>'L', -1031=>'L', -1032=>'L', -1033=>'L', -1034=>'L', -1035=>'L', -1036=>'L', -1037=>'L', -1038=>'L', -1039=>'L', -1040=>'L', -1041=>'L', -1042=>'L', -1043=>'L', -1044=>'L', -1045=>'L', -1046=>'L', -1047=>'L', -1048=>'L', -1049=>'L', -1050=>'L', -1051=>'L', -1052=>'L', -1053=>'L', -1054=>'L', -1055=>'L', -1056=>'L', -1057=>'L', -1058=>'L', -1059=>'L', -1060=>'L', -1061=>'L', -1062=>'L', -1063=>'L', -1064=>'L', -1065=>'L', -1066=>'L', -1067=>'L', -1068=>'L', -1069=>'L', -1070=>'L', -1071=>'L', -1072=>'L', -1073=>'L', -1074=>'L', -1075=>'L', -1076=>'L', -1077=>'L', -1078=>'L', -1079=>'L', -1080=>'L', -1081=>'L', -1082=>'L', -1083=>'L', -1084=>'L', -1085=>'L', -1086=>'L', -1087=>'L', -1088=>'L', -1089=>'L', -1090=>'L', -1091=>'L', -1092=>'L', -1093=>'L', -1094=>'L', -1095=>'L', -1096=>'L', -1097=>'L', -1098=>'L', -1099=>'L', -1100=>'L', -1101=>'L', -1102=>'L', -1103=>'L', -1104=>'L', -1105=>'L', -1106=>'L', -1107=>'L', -1108=>'L', -1109=>'L', -1110=>'L', -1111=>'L', -1112=>'L', -1113=>'L', -1114=>'L', -1115=>'L', -1116=>'L', -1117=>'L', -1118=>'L', -1119=>'L', -1120=>'L', -1121=>'L', -1122=>'L', -1123=>'L', -1124=>'L', -1125=>'L', -1126=>'L', -1127=>'L', -1128=>'L', -1129=>'L', -1130=>'L', -1131=>'L', -1132=>'L', -1133=>'L', -1134=>'L', -1135=>'L', -1136=>'L', -1137=>'L', -1138=>'L', -1139=>'L', -1140=>'L', -1141=>'L', -1142=>'L', -1143=>'L', -1144=>'L', -1145=>'L', -1146=>'L', -1147=>'L', -1148=>'L', -1149=>'L', -1150=>'L', -1151=>'L', -1152=>'L', -1153=>'L', -1154=>'L', -1155=>'NSM', -1156=>'NSM', -1157=>'NSM', -1158=>'NSM', -1160=>'NSM', -1161=>'NSM', -1162=>'L', -1163=>'L', -1164=>'L', -1165=>'L', -1166=>'L', -1167=>'L', -1168=>'L', -1169=>'L', -1170=>'L', -1171=>'L', -1172=>'L', -1173=>'L', -1174=>'L', -1175=>'L', -1176=>'L', -1177=>'L', -1178=>'L', -1179=>'L', -1180=>'L', -1181=>'L', -1182=>'L', -1183=>'L', -1184=>'L', -1185=>'L', -1186=>'L', -1187=>'L', -1188=>'L', -1189=>'L', -1190=>'L', -1191=>'L', -1192=>'L', -1193=>'L', -1194=>'L', -1195=>'L', -1196=>'L', -1197=>'L', -1198=>'L', -1199=>'L', -1200=>'L', -1201=>'L', -1202=>'L', -1203=>'L', -1204=>'L', -1205=>'L', -1206=>'L', -1207=>'L', -1208=>'L', -1209=>'L', -1210=>'L', -1211=>'L', -1212=>'L', -1213=>'L', -1214=>'L', -1215=>'L', -1216=>'L', -1217=>'L', -1218=>'L', -1219=>'L', -1220=>'L', -1221=>'L', -1222=>'L', -1223=>'L', -1224=>'L', -1225=>'L', -1226=>'L', -1227=>'L', -1228=>'L', -1229=>'L', -1230=>'L', -1231=>'L', -1232=>'L', -1233=>'L', -1234=>'L', -1235=>'L', -1236=>'L', -1237=>'L', -1238=>'L', -1239=>'L', -1240=>'L', -1241=>'L', -1242=>'L', -1243=>'L', -1244=>'L', -1245=>'L', -1246=>'L', -1247=>'L', -1248=>'L', -1249=>'L', -1250=>'L', -1251=>'L', -1252=>'L', -1253=>'L', -1254=>'L', -1255=>'L', -1256=>'L', -1257=>'L', -1258=>'L', -1259=>'L', -1260=>'L', -1261=>'L', -1262=>'L', -1263=>'L', -1264=>'L', -1265=>'L', -1266=>'L', -1267=>'L', -1268=>'L', -1269=>'L', -1270=>'L', -1271=>'L', -1272=>'L', -1273=>'L', -1274=>'L', -1275=>'L', -1276=>'L', -1277=>'L', -1278=>'L', -1279=>'L', -1280=>'L', -1281=>'L', -1282=>'L', -1283=>'L', -1284=>'L', -1285=>'L', -1286=>'L', -1287=>'L', -1288=>'L', -1289=>'L', -1290=>'L', -1291=>'L', -1292=>'L', -1293=>'L', -1294=>'L', -1295=>'L', -1296=>'L', -1297=>'L', -1298=>'L', -1299=>'L', -1329=>'L', -1330=>'L', -1331=>'L', -1332=>'L', -1333=>'L', -1334=>'L', -1335=>'L', -1336=>'L', -1337=>'L', -1338=>'L', -1339=>'L', -1340=>'L', -1341=>'L', -1342=>'L', -1343=>'L', -1344=>'L', -1345=>'L', -1346=>'L', -1347=>'L', -1348=>'L', -1349=>'L', -1350=>'L', -1351=>'L', -1352=>'L', -1353=>'L', -1354=>'L', -1355=>'L', -1356=>'L', -1357=>'L', -1358=>'L', -1359=>'L', -1360=>'L', -1361=>'L', -1362=>'L', -1363=>'L', -1364=>'L', -1365=>'L', -1366=>'L', -1369=>'L', -1370=>'L', -1371=>'L', -1372=>'L', -1373=>'L', -1374=>'L', -1375=>'L', -1377=>'L', -1378=>'L', -1379=>'L', -1380=>'L', -1381=>'L', -1382=>'L', -1383=>'L', -1384=>'L', -1385=>'L', -1386=>'L', -1387=>'L', -1388=>'L', -1389=>'L', -1390=>'L', -1391=>'L', -1392=>'L', -1393=>'L', -1394=>'L', -1395=>'L', -1396=>'L', -1397=>'L', -1398=>'L', -1399=>'L', -1400=>'L', -1401=>'L', -1402=>'L', -1403=>'L', -1404=>'L', -1405=>'L', -1406=>'L', -1407=>'L', -1408=>'L', -1409=>'L', -1410=>'L', -1411=>'L', -1412=>'L', -1413=>'L', -1414=>'L', -1415=>'L', -1417=>'L', -1418=>'ON', -1425=>'NSM', -1426=>'NSM', -1427=>'NSM', -1428=>'NSM', -1429=>'NSM', -1430=>'NSM', -1431=>'NSM', -1432=>'NSM', -1433=>'NSM', -1434=>'NSM', -1435=>'NSM', -1436=>'NSM', -1437=>'NSM', -1438=>'NSM', -1439=>'NSM', -1440=>'NSM', -1441=>'NSM', -1442=>'NSM', -1443=>'NSM', -1444=>'NSM', -1445=>'NSM', -1446=>'NSM', -1447=>'NSM', -1448=>'NSM', -1449=>'NSM', -1450=>'NSM', -1451=>'NSM', -1452=>'NSM', -1453=>'NSM', -1454=>'NSM', -1455=>'NSM', -1456=>'NSM', -1457=>'NSM', -1458=>'NSM', -1459=>'NSM', -1460=>'NSM', -1461=>'NSM', -1462=>'NSM', -1463=>'NSM', -1464=>'NSM', -1465=>'NSM', -1466=>'NSM', -1467=>'NSM', -1468=>'NSM', -1469=>'NSM', -1470=>'R', -1471=>'NSM', -1472=>'R', -1473=>'NSM', -1474=>'NSM', -1475=>'R', -1476=>'NSM', -1477=>'NSM', -1478=>'R', -1479=>'NSM', -1488=>'R', -1489=>'R', -1490=>'R', -1491=>'R', -1492=>'R', -1493=>'R', -1494=>'R', -1495=>'R', -1496=>'R', -1497=>'R', -1498=>'R', -1499=>'R', -1500=>'R', -1501=>'R', -1502=>'R', -1503=>'R', -1504=>'R', -1505=>'R', -1506=>'R', -1507=>'R', -1508=>'R', -1509=>'R', -1510=>'R', -1511=>'R', -1512=>'R', -1513=>'R', -1514=>'R', -1520=>'R', -1521=>'R', -1522=>'R', -1523=>'R', -1524=>'R', -1536=>'AL', -1537=>'AL', -1538=>'AL', -1539=>'AL', -1547=>'AL', -1548=>'CS', -1549=>'AL', -1550=>'ON', -1551=>'ON', -1552=>'NSM', -1553=>'NSM', -1554=>'NSM', -1555=>'NSM', -1556=>'NSM', -1557=>'NSM', -1563=>'AL', -1566=>'AL', -1567=>'AL', -1569=>'AL', -1570=>'AL', -1571=>'AL', -1572=>'AL', -1573=>'AL', -1574=>'AL', -1575=>'AL', -1576=>'AL', -1577=>'AL', -1578=>'AL', -1579=>'AL', -1580=>'AL', -1581=>'AL', -1582=>'AL', -1583=>'AL', -1584=>'AL', -1585=>'AL', -1586=>'AL', -1587=>'AL', -1588=>'AL', -1589=>'AL', -1590=>'AL', -1591=>'AL', -1592=>'AL', -1593=>'AL', -1594=>'AL', -1600=>'AL', -1601=>'AL', -1602=>'AL', -1603=>'AL', -1604=>'AL', -1605=>'AL', -1606=>'AL', -1607=>'AL', -1608=>'AL', -1609=>'AL', -1610=>'AL', -1611=>'NSM', -1612=>'NSM', -1613=>'NSM', -1614=>'NSM', -1615=>'NSM', -1616=>'NSM', -1617=>'NSM', -1618=>'NSM', -1619=>'NSM', -1620=>'NSM', -1621=>'NSM', -1622=>'NSM', -1623=>'NSM', -1624=>'NSM', -1625=>'NSM', -1626=>'NSM', -1627=>'NSM', -1628=>'NSM', -1629=>'NSM', -1630=>'NSM', -1632=>'AN', -1633=>'AN', -1634=>'AN', -1635=>'AN', -1636=>'AN', -1637=>'AN', -1638=>'AN', -1639=>'AN', -1640=>'AN', -1641=>'AN', -1642=>'ET', -1643=>'AN', -1644=>'AN', -1645=>'AL', -1646=>'AL', -1647=>'AL', -1648=>'NSM', -1649=>'AL', -1650=>'AL', -1651=>'AL', -1652=>'AL', -1653=>'AL', -1654=>'AL', -1655=>'AL', -1656=>'AL', -1657=>'AL', -1658=>'AL', -1659=>'AL', -1660=>'AL', -1661=>'AL', -1662=>'AL', -1663=>'AL', -1664=>'AL', -1665=>'AL', -1666=>'AL', -1667=>'AL', -1668=>'AL', -1669=>'AL', -1670=>'AL', -1671=>'AL', -1672=>'AL', -1673=>'AL', -1674=>'AL', -1675=>'AL', -1676=>'AL', -1677=>'AL', -1678=>'AL', -1679=>'AL', -1680=>'AL', -1681=>'AL', -1682=>'AL', -1683=>'AL', -1684=>'AL', -1685=>'AL', -1686=>'AL', -1687=>'AL', -1688=>'AL', -1689=>'AL', -1690=>'AL', -1691=>'AL', -1692=>'AL', -1693=>'AL', -1694=>'AL', -1695=>'AL', -1696=>'AL', -1697=>'AL', -1698=>'AL', -1699=>'AL', -1700=>'AL', -1701=>'AL', -1702=>'AL', -1703=>'AL', -1704=>'AL', -1705=>'AL', -1706=>'AL', -1707=>'AL', -1708=>'AL', -1709=>'AL', -1710=>'AL', -1711=>'AL', -1712=>'AL', -1713=>'AL', -1714=>'AL', -1715=>'AL', -1716=>'AL', -1717=>'AL', -1718=>'AL', -1719=>'AL', -1720=>'AL', -1721=>'AL', -1722=>'AL', -1723=>'AL', -1724=>'AL', -1725=>'AL', -1726=>'AL', -1727=>'AL', -1728=>'AL', -1729=>'AL', -1730=>'AL', -1731=>'AL', -1732=>'AL', -1733=>'AL', -1734=>'AL', -1735=>'AL', -1736=>'AL', -1737=>'AL', -1738=>'AL', -1739=>'AL', -1740=>'AL', -1741=>'AL', -1742=>'AL', -1743=>'AL', -1744=>'AL', -1745=>'AL', -1746=>'AL', -1747=>'AL', -1748=>'AL', -1749=>'AL', -1750=>'NSM', -1751=>'NSM', -1752=>'NSM', -1753=>'NSM', -1754=>'NSM', -1755=>'NSM', -1756=>'NSM', -1757=>'AL', -1758=>'NSM', -1759=>'NSM', -1760=>'NSM', -1761=>'NSM', -1762=>'NSM', -1763=>'NSM', -1764=>'NSM', -1765=>'AL', -1766=>'AL', -1767=>'NSM', -1768=>'NSM', -1769=>'ON', -1770=>'NSM', -1771=>'NSM', -1772=>'NSM', -1773=>'NSM', -1774=>'AL', -1775=>'AL', -1776=>'EN', -1777=>'EN', -1778=>'EN', -1779=>'EN', -1780=>'EN', -1781=>'EN', -1782=>'EN', -1783=>'EN', -1784=>'EN', -1785=>'EN', -1786=>'AL', -1787=>'AL', -1788=>'AL', -1789=>'AL', -1790=>'AL', -1791=>'AL', -1792=>'AL', -1793=>'AL', -1794=>'AL', -1795=>'AL', -1796=>'AL', -1797=>'AL', -1798=>'AL', -1799=>'AL', -1800=>'AL', -1801=>'AL', -1802=>'AL', -1803=>'AL', -1804=>'AL', -1805=>'AL', -1807=>'BN', -1808=>'AL', -1809=>'NSM', -1810=>'AL', -1811=>'AL', -1812=>'AL', -1813=>'AL', -1814=>'AL', -1815=>'AL', -1816=>'AL', -1817=>'AL', -1818=>'AL', -1819=>'AL', -1820=>'AL', -1821=>'AL', -1822=>'AL', -1823=>'AL', -1824=>'AL', -1825=>'AL', -1826=>'AL', -1827=>'AL', -1828=>'AL', -1829=>'AL', -1830=>'AL', -1831=>'AL', -1832=>'AL', -1833=>'AL', -1834=>'AL', -1835=>'AL', -1836=>'AL', -1837=>'AL', -1838=>'AL', -1839=>'AL', -1840=>'NSM', -1841=>'NSM', -1842=>'NSM', -1843=>'NSM', -1844=>'NSM', -1845=>'NSM', -1846=>'NSM', -1847=>'NSM', -1848=>'NSM', -1849=>'NSM', -1850=>'NSM', -1851=>'NSM', -1852=>'NSM', -1853=>'NSM', -1854=>'NSM', -1855=>'NSM', -1856=>'NSM', -1857=>'NSM', -1858=>'NSM', -1859=>'NSM', -1860=>'NSM', -1861=>'NSM', -1862=>'NSM', -1863=>'NSM', -1864=>'NSM', -1865=>'NSM', -1866=>'NSM', -1869=>'AL', -1870=>'AL', -1871=>'AL', -1872=>'AL', -1873=>'AL', -1874=>'AL', -1875=>'AL', -1876=>'AL', -1877=>'AL', -1878=>'AL', -1879=>'AL', -1880=>'AL', -1881=>'AL', -1882=>'AL', -1883=>'AL', -1884=>'AL', -1885=>'AL', -1886=>'AL', -1887=>'AL', -1888=>'AL', -1889=>'AL', -1890=>'AL', -1891=>'AL', -1892=>'AL', -1893=>'AL', -1894=>'AL', -1895=>'AL', -1896=>'AL', -1897=>'AL', -1898=>'AL', -1899=>'AL', -1900=>'AL', -1901=>'AL', -1920=>'AL', -1921=>'AL', -1922=>'AL', -1923=>'AL', -1924=>'AL', -1925=>'AL', -1926=>'AL', -1927=>'AL', -1928=>'AL', -1929=>'AL', -1930=>'AL', -1931=>'AL', -1932=>'AL', -1933=>'AL', -1934=>'AL', -1935=>'AL', -1936=>'AL', -1937=>'AL', -1938=>'AL', -1939=>'AL', -1940=>'AL', -1941=>'AL', -1942=>'AL', -1943=>'AL', -1944=>'AL', -1945=>'AL', -1946=>'AL', -1947=>'AL', -1948=>'AL', -1949=>'AL', -1950=>'AL', -1951=>'AL', -1952=>'AL', -1953=>'AL', -1954=>'AL', -1955=>'AL', -1956=>'AL', -1957=>'AL', -1958=>'NSM', -1959=>'NSM', -1960=>'NSM', -1961=>'NSM', -1962=>'NSM', -1963=>'NSM', -1964=>'NSM', -1965=>'NSM', -1966=>'NSM', -1967=>'NSM', -1968=>'NSM', -1969=>'AL', -1984=>'R', -1985=>'R', -1986=>'R', -1987=>'R', -1988=>'R', -1989=>'R', -1990=>'R', -1991=>'R', -1992=>'R', -1993=>'R', -1994=>'R', -1995=>'R', -1996=>'R', -1997=>'R', -1998=>'R', -1999=>'R', -2000=>'R', -2001=>'R', -2002=>'R', -2003=>'R', -2004=>'R', -2005=>'R', -2006=>'R', -2007=>'R', -2008=>'R', -2009=>'R', -2010=>'R', -2011=>'R', -2012=>'R', -2013=>'R', -2014=>'R', -2015=>'R', -2016=>'R', -2017=>'R', -2018=>'R', -2019=>'R', -2020=>'R', -2021=>'R', -2022=>'R', -2023=>'R', -2024=>'R', -2025=>'R', -2026=>'R', -2027=>'NSM', -2028=>'NSM', -2029=>'NSM', -2030=>'NSM', -2031=>'NSM', -2032=>'NSM', -2033=>'NSM', -2034=>'NSM', -2035=>'NSM', -2036=>'R', -2037=>'R', -2038=>'ON', -2039=>'ON', -2040=>'ON', -2041=>'ON', -2042=>'R', -2305=>'NSM', -2306=>'NSM', -2307=>'L', -2308=>'L', -2309=>'L', -2310=>'L', -2311=>'L', -2312=>'L', -2313=>'L', -2314=>'L', -2315=>'L', -2316=>'L', -2317=>'L', -2318=>'L', -2319=>'L', -2320=>'L', -2321=>'L', -2322=>'L', -2323=>'L', -2324=>'L', -2325=>'L', -2326=>'L', -2327=>'L', -2328=>'L', -2329=>'L', -2330=>'L', -2331=>'L', -2332=>'L', -2333=>'L', -2334=>'L', -2335=>'L', -2336=>'L', -2337=>'L', -2338=>'L', -2339=>'L', -2340=>'L', -2341=>'L', -2342=>'L', -2343=>'L', -2344=>'L', -2345=>'L', -2346=>'L', -2347=>'L', -2348=>'L', -2349=>'L', -2350=>'L', -2351=>'L', -2352=>'L', -2353=>'L', -2354=>'L', -2355=>'L', -2356=>'L', -2357=>'L', -2358=>'L', -2359=>'L', -2360=>'L', -2361=>'L', -2364=>'NSM', -2365=>'L', -2366=>'L', -2367=>'L', -2368=>'L', -2369=>'NSM', -2370=>'NSM', -2371=>'NSM', -2372=>'NSM', -2373=>'NSM', -2374=>'NSM', -2375=>'NSM', -2376=>'NSM', -2377=>'L', -2378=>'L', -2379=>'L', -2380=>'L', -2381=>'NSM', -2384=>'L', -2385=>'NSM', -2386=>'NSM', -2387=>'NSM', -2388=>'NSM', -2392=>'L', -2393=>'L', -2394=>'L', -2395=>'L', -2396=>'L', -2397=>'L', -2398=>'L', -2399=>'L', -2400=>'L', -2401=>'L', -2402=>'NSM', -2403=>'NSM', -2404=>'L', -2405=>'L', -2406=>'L', -2407=>'L', -2408=>'L', -2409=>'L', -2410=>'L', -2411=>'L', -2412=>'L', -2413=>'L', -2414=>'L', -2415=>'L', -2416=>'L', -2427=>'L', -2428=>'L', -2429=>'L', -2430=>'L', -2431=>'L', -2433=>'NSM', -2434=>'L', -2435=>'L', -2437=>'L', -2438=>'L', -2439=>'L', -2440=>'L', -2441=>'L', -2442=>'L', -2443=>'L', -2444=>'L', -2447=>'L', -2448=>'L', -2451=>'L', -2452=>'L', -2453=>'L', -2454=>'L', -2455=>'L', -2456=>'L', -2457=>'L', -2458=>'L', -2459=>'L', -2460=>'L', -2461=>'L', -2462=>'L', -2463=>'L', -2464=>'L', -2465=>'L', -2466=>'L', -2467=>'L', -2468=>'L', -2469=>'L', -2470=>'L', -2471=>'L', -2472=>'L', -2474=>'L', -2475=>'L', -2476=>'L', -2477=>'L', -2478=>'L', -2479=>'L', -2480=>'L', -2482=>'L', -2486=>'L', -2487=>'L', -2488=>'L', -2489=>'L', -2492=>'NSM', -2493=>'L', -2494=>'L', -2495=>'L', -2496=>'L', -2497=>'NSM', -2498=>'NSM', -2499=>'NSM', -2500=>'NSM', -2503=>'L', -2504=>'L', -2507=>'L', -2508=>'L', -2509=>'NSM', -2510=>'L', -2519=>'L', -2524=>'L', -2525=>'L', -2527=>'L', -2528=>'L', -2529=>'L', -2530=>'NSM', -2531=>'NSM', -2534=>'L', -2535=>'L', -2536=>'L', -2537=>'L', -2538=>'L', -2539=>'L', -2540=>'L', -2541=>'L', -2542=>'L', -2543=>'L', -2544=>'L', -2545=>'L', -2546=>'ET', -2547=>'ET', -2548=>'L', -2549=>'L', -2550=>'L', -2551=>'L', -2552=>'L', -2553=>'L', -2554=>'L', -2561=>'NSM', -2562=>'NSM', -2563=>'L', -2565=>'L', -2566=>'L', -2567=>'L', -2568=>'L', -2569=>'L', -2570=>'L', -2575=>'L', -2576=>'L', -2579=>'L', -2580=>'L', -2581=>'L', -2582=>'L', -2583=>'L', -2584=>'L', -2585=>'L', -2586=>'L', -2587=>'L', -2588=>'L', -2589=>'L', -2590=>'L', -2591=>'L', -2592=>'L', -2593=>'L', -2594=>'L', -2595=>'L', -2596=>'L', -2597=>'L', -2598=>'L', -2599=>'L', -2600=>'L', -2602=>'L', -2603=>'L', -2604=>'L', -2605=>'L', -2606=>'L', -2607=>'L', -2608=>'L', -2610=>'L', -2611=>'L', -2613=>'L', -2614=>'L', -2616=>'L', -2617=>'L', -2620=>'NSM', -2622=>'L', -2623=>'L', -2624=>'L', -2625=>'NSM', -2626=>'NSM', -2631=>'NSM', -2632=>'NSM', -2635=>'NSM', -2636=>'NSM', -2637=>'NSM', -2649=>'L', -2650=>'L', -2651=>'L', -2652=>'L', -2654=>'L', -2662=>'L', -2663=>'L', -2664=>'L', -2665=>'L', -2666=>'L', -2667=>'L', -2668=>'L', -2669=>'L', -2670=>'L', -2671=>'L', -2672=>'NSM', -2673=>'NSM', -2674=>'L', -2675=>'L', -2676=>'L', -2689=>'NSM', -2690=>'NSM', -2691=>'L', -2693=>'L', -2694=>'L', -2695=>'L', -2696=>'L', -2697=>'L', -2698=>'L', -2699=>'L', -2700=>'L', -2701=>'L', -2703=>'L', -2704=>'L', -2705=>'L', -2707=>'L', -2708=>'L', -2709=>'L', -2710=>'L', -2711=>'L', -2712=>'L', -2713=>'L', -2714=>'L', -2715=>'L', -2716=>'L', -2717=>'L', -2718=>'L', -2719=>'L', -2720=>'L', -2721=>'L', -2722=>'L', -2723=>'L', -2724=>'L', -2725=>'L', -2726=>'L', -2727=>'L', -2728=>'L', -2730=>'L', -2731=>'L', -2732=>'L', -2733=>'L', -2734=>'L', -2735=>'L', -2736=>'L', -2738=>'L', -2739=>'L', -2741=>'L', -2742=>'L', -2743=>'L', -2744=>'L', -2745=>'L', -2748=>'NSM', -2749=>'L', -2750=>'L', -2751=>'L', -2752=>'L', -2753=>'NSM', -2754=>'NSM', -2755=>'NSM', -2756=>'NSM', -2757=>'NSM', -2759=>'NSM', -2760=>'NSM', -2761=>'L', -2763=>'L', -2764=>'L', -2765=>'NSM', -2768=>'L', -2784=>'L', -2785=>'L', -2786=>'NSM', -2787=>'NSM', -2790=>'L', -2791=>'L', -2792=>'L', -2793=>'L', -2794=>'L', -2795=>'L', -2796=>'L', -2797=>'L', -2798=>'L', -2799=>'L', -2801=>'ET', -2817=>'NSM', -2818=>'L', -2819=>'L', -2821=>'L', -2822=>'L', -2823=>'L', -2824=>'L', -2825=>'L', -2826=>'L', -2827=>'L', -2828=>'L', -2831=>'L', -2832=>'L', -2835=>'L', -2836=>'L', -2837=>'L', -2838=>'L', -2839=>'L', -2840=>'L', -2841=>'L', -2842=>'L', -2843=>'L', -2844=>'L', -2845=>'L', -2846=>'L', -2847=>'L', -2848=>'L', -2849=>'L', -2850=>'L', -2851=>'L', -2852=>'L', -2853=>'L', -2854=>'L', -2855=>'L', -2856=>'L', -2858=>'L', -2859=>'L', -2860=>'L', -2861=>'L', -2862=>'L', -2863=>'L', -2864=>'L', -2866=>'L', -2867=>'L', -2869=>'L', -2870=>'L', -2871=>'L', -2872=>'L', -2873=>'L', -2876=>'NSM', -2877=>'L', -2878=>'L', -2879=>'NSM', -2880=>'L', -2881=>'NSM', -2882=>'NSM', -2883=>'NSM', -2887=>'L', -2888=>'L', -2891=>'L', -2892=>'L', -2893=>'NSM', -2902=>'NSM', -2903=>'L', -2908=>'L', -2909=>'L', -2911=>'L', -2912=>'L', -2913=>'L', -2918=>'L', -2919=>'L', -2920=>'L', -2921=>'L', -2922=>'L', -2923=>'L', -2924=>'L', -2925=>'L', -2926=>'L', -2927=>'L', -2928=>'L', -2929=>'L', -2946=>'NSM', -2947=>'L', -2949=>'L', -2950=>'L', -2951=>'L', -2952=>'L', -2953=>'L', -2954=>'L', -2958=>'L', -2959=>'L', -2960=>'L', -2962=>'L', -2963=>'L', -2964=>'L', -2965=>'L', -2969=>'L', -2970=>'L', -2972=>'L', -2974=>'L', -2975=>'L', -2979=>'L', -2980=>'L', -2984=>'L', -2985=>'L', -2986=>'L', -2990=>'L', -2991=>'L', -2992=>'L', -2993=>'L', -2994=>'L', -2995=>'L', -2996=>'L', -2997=>'L', -2998=>'L', -2999=>'L', -3000=>'L', -3001=>'L', -3006=>'L', -3007=>'L', -3008=>'NSM', -3009=>'L', -3010=>'L', -3014=>'L', -3015=>'L', -3016=>'L', -3018=>'L', -3019=>'L', -3020=>'L', -3021=>'NSM', -3031=>'L', -3046=>'L', -3047=>'L', -3048=>'L', -3049=>'L', -3050=>'L', -3051=>'L', -3052=>'L', -3053=>'L', -3054=>'L', -3055=>'L', -3056=>'L', -3057=>'L', -3058=>'L', -3059=>'ON', -3060=>'ON', -3061=>'ON', -3062=>'ON', -3063=>'ON', -3064=>'ON', -3065=>'ET', -3066=>'ON', -3073=>'L', -3074=>'L', -3075=>'L', -3077=>'L', -3078=>'L', -3079=>'L', -3080=>'L', -3081=>'L', -3082=>'L', -3083=>'L', -3084=>'L', -3086=>'L', -3087=>'L', -3088=>'L', -3090=>'L', -3091=>'L', -3092=>'L', -3093=>'L', -3094=>'L', -3095=>'L', -3096=>'L', -3097=>'L', -3098=>'L', -3099=>'L', -3100=>'L', -3101=>'L', -3102=>'L', -3103=>'L', -3104=>'L', -3105=>'L', -3106=>'L', -3107=>'L', -3108=>'L', -3109=>'L', -3110=>'L', -3111=>'L', -3112=>'L', -3114=>'L', -3115=>'L', -3116=>'L', -3117=>'L', -3118=>'L', -3119=>'L', -3120=>'L', -3121=>'L', -3122=>'L', -3123=>'L', -3125=>'L', -3126=>'L', -3127=>'L', -3128=>'L', -3129=>'L', -3134=>'NSM', -3135=>'NSM', -3136=>'NSM', -3137=>'L', -3138=>'L', -3139=>'L', -3140=>'L', -3142=>'NSM', -3143=>'NSM', -3144=>'NSM', -3146=>'NSM', -3147=>'NSM', -3148=>'NSM', -3149=>'NSM', -3157=>'NSM', -3158=>'NSM', -3168=>'L', -3169=>'L', -3174=>'L', -3175=>'L', -3176=>'L', -3177=>'L', -3178=>'L', -3179=>'L', -3180=>'L', -3181=>'L', -3182=>'L', -3183=>'L', -3202=>'L', -3203=>'L', -3205=>'L', -3206=>'L', -3207=>'L', -3208=>'L', -3209=>'L', -3210=>'L', -3211=>'L', -3212=>'L', -3214=>'L', -3215=>'L', -3216=>'L', -3218=>'L', -3219=>'L', -3220=>'L', -3221=>'L', -3222=>'L', -3223=>'L', -3224=>'L', -3225=>'L', -3226=>'L', -3227=>'L', -3228=>'L', -3229=>'L', -3230=>'L', -3231=>'L', -3232=>'L', -3233=>'L', -3234=>'L', -3235=>'L', -3236=>'L', -3237=>'L', -3238=>'L', -3239=>'L', -3240=>'L', -3242=>'L', -3243=>'L', -3244=>'L', -3245=>'L', -3246=>'L', -3247=>'L', -3248=>'L', -3249=>'L', -3250=>'L', -3251=>'L', -3253=>'L', -3254=>'L', -3255=>'L', -3256=>'L', -3257=>'L', -3260=>'NSM', -3261=>'L', -3262=>'L', -3263=>'L', -3264=>'L', -3265=>'L', -3266=>'L', -3267=>'L', -3268=>'L', -3270=>'L', -3271=>'L', -3272=>'L', -3274=>'L', -3275=>'L', -3276=>'NSM', -3277=>'NSM', -3285=>'L', -3286=>'L', -3294=>'L', -3296=>'L', -3297=>'L', -3298=>'NSM', -3299=>'NSM', -3302=>'L', -3303=>'L', -3304=>'L', -3305=>'L', -3306=>'L', -3307=>'L', -3308=>'L', -3309=>'L', -3310=>'L', -3311=>'L', -3313=>'ON', -3314=>'ON', -3330=>'L', -3331=>'L', -3333=>'L', -3334=>'L', -3335=>'L', -3336=>'L', -3337=>'L', -3338=>'L', -3339=>'L', -3340=>'L', -3342=>'L', -3343=>'L', -3344=>'L', -3346=>'L', -3347=>'L', -3348=>'L', -3349=>'L', -3350=>'L', -3351=>'L', -3352=>'L', -3353=>'L', -3354=>'L', -3355=>'L', -3356=>'L', -3357=>'L', -3358=>'L', -3359=>'L', -3360=>'L', -3361=>'L', -3362=>'L', -3363=>'L', -3364=>'L', -3365=>'L', -3366=>'L', -3367=>'L', -3368=>'L', -3370=>'L', -3371=>'L', -3372=>'L', -3373=>'L', -3374=>'L', -3375=>'L', -3376=>'L', -3377=>'L', -3378=>'L', -3379=>'L', -3380=>'L', -3381=>'L', -3382=>'L', -3383=>'L', -3384=>'L', -3385=>'L', -3390=>'L', -3391=>'L', -3392=>'L', -3393=>'NSM', -3394=>'NSM', -3395=>'NSM', -3398=>'L', -3399=>'L', -3400=>'L', -3402=>'L', -3403=>'L', -3404=>'L', -3405=>'NSM', -3415=>'L', -3424=>'L', -3425=>'L', -3430=>'L', -3431=>'L', -3432=>'L', -3433=>'L', -3434=>'L', -3435=>'L', -3436=>'L', -3437=>'L', -3438=>'L', -3439=>'L', -3458=>'L', -3459=>'L', -3461=>'L', -3462=>'L', -3463=>'L', -3464=>'L', -3465=>'L', -3466=>'L', -3467=>'L', -3468=>'L', -3469=>'L', -3470=>'L', -3471=>'L', -3472=>'L', -3473=>'L', -3474=>'L', -3475=>'L', -3476=>'L', -3477=>'L', -3478=>'L', -3482=>'L', -3483=>'L', -3484=>'L', -3485=>'L', -3486=>'L', -3487=>'L', -3488=>'L', -3489=>'L', -3490=>'L', -3491=>'L', -3492=>'L', -3493=>'L', -3494=>'L', -3495=>'L', -3496=>'L', -3497=>'L', -3498=>'L', -3499=>'L', -3500=>'L', -3501=>'L', -3502=>'L', -3503=>'L', -3504=>'L', -3505=>'L', -3507=>'L', -3508=>'L', -3509=>'L', -3510=>'L', -3511=>'L', -3512=>'L', -3513=>'L', -3514=>'L', -3515=>'L', -3517=>'L', -3520=>'L', -3521=>'L', -3522=>'L', -3523=>'L', -3524=>'L', -3525=>'L', -3526=>'L', -3530=>'NSM', -3535=>'L', -3536=>'L', -3537=>'L', -3538=>'NSM', -3539=>'NSM', -3540=>'NSM', -3542=>'NSM', -3544=>'L', -3545=>'L', -3546=>'L', -3547=>'L', -3548=>'L', -3549=>'L', -3550=>'L', -3551=>'L', -3570=>'L', -3571=>'L', -3572=>'L', -3585=>'L', -3586=>'L', -3587=>'L', -3588=>'L', -3589=>'L', -3590=>'L', -3591=>'L', -3592=>'L', -3593=>'L', -3594=>'L', -3595=>'L', -3596=>'L', -3597=>'L', -3598=>'L', -3599=>'L', -3600=>'L', -3601=>'L', -3602=>'L', -3603=>'L', -3604=>'L', -3605=>'L', -3606=>'L', -3607=>'L', -3608=>'L', -3609=>'L', -3610=>'L', -3611=>'L', -3612=>'L', -3613=>'L', -3614=>'L', -3615=>'L', -3616=>'L', -3617=>'L', -3618=>'L', -3619=>'L', -3620=>'L', -3621=>'L', -3622=>'L', -3623=>'L', -3624=>'L', -3625=>'L', -3626=>'L', -3627=>'L', -3628=>'L', -3629=>'L', -3630=>'L', -3631=>'L', -3632=>'L', -3633=>'NSM', -3634=>'L', -3635=>'L', -3636=>'NSM', -3637=>'NSM', -3638=>'NSM', -3639=>'NSM', -3640=>'NSM', -3641=>'NSM', -3642=>'NSM', -3647=>'ET', -3648=>'L', -3649=>'L', -3650=>'L', -3651=>'L', -3652=>'L', -3653=>'L', -3654=>'L', -3655=>'NSM', -3656=>'NSM', -3657=>'NSM', -3658=>'NSM', -3659=>'NSM', -3660=>'NSM', -3661=>'NSM', -3662=>'NSM', -3663=>'L', -3664=>'L', -3665=>'L', -3666=>'L', -3667=>'L', -3668=>'L', -3669=>'L', -3670=>'L', -3671=>'L', -3672=>'L', -3673=>'L', -3674=>'L', -3675=>'L', -3713=>'L', -3714=>'L', -3716=>'L', -3719=>'L', -3720=>'L', -3722=>'L', -3725=>'L', -3732=>'L', -3733=>'L', -3734=>'L', -3735=>'L', -3737=>'L', -3738=>'L', -3739=>'L', -3740=>'L', -3741=>'L', -3742=>'L', -3743=>'L', -3745=>'L', -3746=>'L', -3747=>'L', -3749=>'L', -3751=>'L', -3754=>'L', -3755=>'L', -3757=>'L', -3758=>'L', -3759=>'L', -3760=>'L', -3761=>'NSM', -3762=>'L', -3763=>'L', -3764=>'NSM', -3765=>'NSM', -3766=>'NSM', -3767=>'NSM', -3768=>'NSM', -3769=>'NSM', -3771=>'NSM', -3772=>'NSM', -3773=>'L', -3776=>'L', -3777=>'L', -3778=>'L', -3779=>'L', -3780=>'L', -3782=>'L', -3784=>'NSM', -3785=>'NSM', -3786=>'NSM', -3787=>'NSM', -3788=>'NSM', -3789=>'NSM', -3792=>'L', -3793=>'L', -3794=>'L', -3795=>'L', -3796=>'L', -3797=>'L', -3798=>'L', -3799=>'L', -3800=>'L', -3801=>'L', -3804=>'L', -3805=>'L', -3840=>'L', -3841=>'L', -3842=>'L', -3843=>'L', -3844=>'L', -3845=>'L', -3846=>'L', -3847=>'L', -3848=>'L', -3849=>'L', -3850=>'L', -3851=>'L', -3852=>'L', -3853=>'L', -3854=>'L', -3855=>'L', -3856=>'L', -3857=>'L', -3858=>'L', -3859=>'L', -3860=>'L', -3861=>'L', -3862=>'L', -3863=>'L', -3864=>'NSM', -3865=>'NSM', -3866=>'L', -3867=>'L', -3868=>'L', -3869=>'L', -3870=>'L', -3871=>'L', -3872=>'L', -3873=>'L', -3874=>'L', -3875=>'L', -3876=>'L', -3877=>'L', -3878=>'L', -3879=>'L', -3880=>'L', -3881=>'L', -3882=>'L', -3883=>'L', -3884=>'L', -3885=>'L', -3886=>'L', -3887=>'L', -3888=>'L', -3889=>'L', -3890=>'L', -3891=>'L', -3892=>'L', -3893=>'NSM', -3894=>'L', -3895=>'NSM', -3896=>'L', -3897=>'NSM', -3898=>'ON', -3899=>'ON', -3900=>'ON', -3901=>'ON', -3902=>'L', -3903=>'L', -3904=>'L', -3905=>'L', -3906=>'L', -3907=>'L', -3908=>'L', -3909=>'L', -3910=>'L', -3911=>'L', -3913=>'L', -3914=>'L', -3915=>'L', -3916=>'L', -3917=>'L', -3918=>'L', -3919=>'L', -3920=>'L', -3921=>'L', -3922=>'L', -3923=>'L', -3924=>'L', -3925=>'L', -3926=>'L', -3927=>'L', -3928=>'L', -3929=>'L', -3930=>'L', -3931=>'L', -3932=>'L', -3933=>'L', -3934=>'L', -3935=>'L', -3936=>'L', -3937=>'L', -3938=>'L', -3939=>'L', -3940=>'L', -3941=>'L', -3942=>'L', -3943=>'L', -3944=>'L', -3945=>'L', -3946=>'L', -3953=>'NSM', -3954=>'NSM', -3955=>'NSM', -3956=>'NSM', -3957=>'NSM', -3958=>'NSM', -3959=>'NSM', -3960=>'NSM', -3961=>'NSM', -3962=>'NSM', -3963=>'NSM', -3964=>'NSM', -3965=>'NSM', -3966=>'NSM', -3967=>'L', -3968=>'NSM', -3969=>'NSM', -3970=>'NSM', -3971=>'NSM', -3972=>'NSM', -3973=>'L', -3974=>'NSM', -3975=>'NSM', -3976=>'L', -3977=>'L', -3978=>'L', -3979=>'L', -3984=>'NSM', -3985=>'NSM', -3986=>'NSM', -3987=>'NSM', -3988=>'NSM', -3989=>'NSM', -3990=>'NSM', -3991=>'NSM', -3993=>'NSM', -3994=>'NSM', -3995=>'NSM', -3996=>'NSM', -3997=>'NSM', -3998=>'NSM', -3999=>'NSM', -4000=>'NSM', -4001=>'NSM', -4002=>'NSM', -4003=>'NSM', -4004=>'NSM', -4005=>'NSM', -4006=>'NSM', -4007=>'NSM', -4008=>'NSM', -4009=>'NSM', -4010=>'NSM', -4011=>'NSM', -4012=>'NSM', -4013=>'NSM', -4014=>'NSM', -4015=>'NSM', -4016=>'NSM', -4017=>'NSM', -4018=>'NSM', -4019=>'NSM', -4020=>'NSM', -4021=>'NSM', -4022=>'NSM', -4023=>'NSM', -4024=>'NSM', -4025=>'NSM', -4026=>'NSM', -4027=>'NSM', -4028=>'NSM', -4030=>'L', -4031=>'L', -4032=>'L', -4033=>'L', -4034=>'L', -4035=>'L', -4036=>'L', -4037=>'L', -4038=>'NSM', -4039=>'L', -4040=>'L', -4041=>'L', -4042=>'L', -4043=>'L', -4044=>'L', -4047=>'L', -4048=>'L', -4049=>'L', -4096=>'L', -4097=>'L', -4098=>'L', -4099=>'L', -4100=>'L', -4101=>'L', -4102=>'L', -4103=>'L', -4104=>'L', -4105=>'L', -4106=>'L', -4107=>'L', -4108=>'L', -4109=>'L', -4110=>'L', -4111=>'L', -4112=>'L', -4113=>'L', -4114=>'L', -4115=>'L', -4116=>'L', -4117=>'L', -4118=>'L', -4119=>'L', -4120=>'L', -4121=>'L', -4122=>'L', -4123=>'L', -4124=>'L', -4125=>'L', -4126=>'L', -4127=>'L', -4128=>'L', -4129=>'L', -4131=>'L', -4132=>'L', -4133=>'L', -4134=>'L', -4135=>'L', -4137=>'L', -4138=>'L', -4140=>'L', -4141=>'NSM', -4142=>'NSM', -4143=>'NSM', -4144=>'NSM', -4145=>'L', -4146=>'NSM', -4150=>'NSM', -4151=>'NSM', -4152=>'L', -4153=>'NSM', -4160=>'L', -4161=>'L', -4162=>'L', -4163=>'L', -4164=>'L', -4165=>'L', -4166=>'L', -4167=>'L', -4168=>'L', -4169=>'L', -4170=>'L', -4171=>'L', -4172=>'L', -4173=>'L', -4174=>'L', -4175=>'L', -4176=>'L', -4177=>'L', -4178=>'L', -4179=>'L', -4180=>'L', -4181=>'L', -4182=>'L', -4183=>'L', -4184=>'NSM', -4185=>'NSM', -4256=>'L', -4257=>'L', -4258=>'L', -4259=>'L', -4260=>'L', -4261=>'L', -4262=>'L', -4263=>'L', -4264=>'L', -4265=>'L', -4266=>'L', -4267=>'L', -4268=>'L', -4269=>'L', -4270=>'L', -4271=>'L', -4272=>'L', -4273=>'L', -4274=>'L', -4275=>'L', -4276=>'L', -4277=>'L', -4278=>'L', -4279=>'L', -4280=>'L', -4281=>'L', -4282=>'L', -4283=>'L', -4284=>'L', -4285=>'L', -4286=>'L', -4287=>'L', -4288=>'L', -4289=>'L', -4290=>'L', -4291=>'L', -4292=>'L', -4293=>'L', -4304=>'L', -4305=>'L', -4306=>'L', -4307=>'L', -4308=>'L', -4309=>'L', -4310=>'L', -4311=>'L', -4312=>'L', -4313=>'L', -4314=>'L', -4315=>'L', -4316=>'L', -4317=>'L', -4318=>'L', -4319=>'L', -4320=>'L', -4321=>'L', -4322=>'L', -4323=>'L', -4324=>'L', -4325=>'L', -4326=>'L', -4327=>'L', -4328=>'L', -4329=>'L', -4330=>'L', -4331=>'L', -4332=>'L', -4333=>'L', -4334=>'L', -4335=>'L', -4336=>'L', -4337=>'L', -4338=>'L', -4339=>'L', -4340=>'L', -4341=>'L', -4342=>'L', -4343=>'L', -4344=>'L', -4345=>'L', -4346=>'L', -4347=>'L', -4348=>'L', -4352=>'L', -4353=>'L', -4354=>'L', -4355=>'L', -4356=>'L', -4357=>'L', -4358=>'L', -4359=>'L', -4360=>'L', -4361=>'L', -4362=>'L', -4363=>'L', -4364=>'L', -4365=>'L', -4366=>'L', -4367=>'L', -4368=>'L', -4369=>'L', -4370=>'L', -4371=>'L', -4372=>'L', -4373=>'L', -4374=>'L', -4375=>'L', -4376=>'L', -4377=>'L', -4378=>'L', -4379=>'L', -4380=>'L', -4381=>'L', -4382=>'L', -4383=>'L', -4384=>'L', -4385=>'L', -4386=>'L', -4387=>'L', -4388=>'L', -4389=>'L', -4390=>'L', -4391=>'L', -4392=>'L', -4393=>'L', -4394=>'L', -4395=>'L', -4396=>'L', -4397=>'L', -4398=>'L', -4399=>'L', -4400=>'L', -4401=>'L', -4402=>'L', -4403=>'L', -4404=>'L', -4405=>'L', -4406=>'L', -4407=>'L', -4408=>'L', -4409=>'L', -4410=>'L', -4411=>'L', -4412=>'L', -4413=>'L', -4414=>'L', -4415=>'L', -4416=>'L', -4417=>'L', -4418=>'L', -4419=>'L', -4420=>'L', -4421=>'L', -4422=>'L', -4423=>'L', -4424=>'L', -4425=>'L', -4426=>'L', -4427=>'L', -4428=>'L', -4429=>'L', -4430=>'L', -4431=>'L', -4432=>'L', -4433=>'L', -4434=>'L', -4435=>'L', -4436=>'L', -4437=>'L', -4438=>'L', -4439=>'L', -4440=>'L', -4441=>'L', -4447=>'L', -4448=>'L', -4449=>'L', -4450=>'L', -4451=>'L', -4452=>'L', -4453=>'L', -4454=>'L', -4455=>'L', -4456=>'L', -4457=>'L', -4458=>'L', -4459=>'L', -4460=>'L', -4461=>'L', -4462=>'L', -4463=>'L', -4464=>'L', -4465=>'L', -4466=>'L', -4467=>'L', -4468=>'L', -4469=>'L', -4470=>'L', -4471=>'L', -4472=>'L', -4473=>'L', -4474=>'L', -4475=>'L', -4476=>'L', -4477=>'L', -4478=>'L', -4479=>'L', -4480=>'L', -4481=>'L', -4482=>'L', -4483=>'L', -4484=>'L', -4485=>'L', -4486=>'L', -4487=>'L', -4488=>'L', -4489=>'L', -4490=>'L', -4491=>'L', -4492=>'L', -4493=>'L', -4494=>'L', -4495=>'L', -4496=>'L', -4497=>'L', -4498=>'L', -4499=>'L', -4500=>'L', -4501=>'L', -4502=>'L', -4503=>'L', -4504=>'L', -4505=>'L', -4506=>'L', -4507=>'L', -4508=>'L', -4509=>'L', -4510=>'L', -4511=>'L', -4512=>'L', -4513=>'L', -4514=>'L', -4520=>'L', -4521=>'L', -4522=>'L', -4523=>'L', -4524=>'L', -4525=>'L', -4526=>'L', -4527=>'L', -4528=>'L', -4529=>'L', -4530=>'L', -4531=>'L', -4532=>'L', -4533=>'L', -4534=>'L', -4535=>'L', -4536=>'L', -4537=>'L', -4538=>'L', -4539=>'L', -4540=>'L', -4541=>'L', -4542=>'L', -4543=>'L', -4544=>'L', -4545=>'L', -4546=>'L', -4547=>'L', -4548=>'L', -4549=>'L', -4550=>'L', -4551=>'L', -4552=>'L', -4553=>'L', -4554=>'L', -4555=>'L', -4556=>'L', -4557=>'L', -4558=>'L', -4559=>'L', -4560=>'L', -4561=>'L', -4562=>'L', -4563=>'L', -4564=>'L', -4565=>'L', -4566=>'L', -4567=>'L', -4568=>'L', -4569=>'L', -4570=>'L', -4571=>'L', -4572=>'L', -4573=>'L', -4574=>'L', -4575=>'L', -4576=>'L', -4577=>'L', -4578=>'L', -4579=>'L', -4580=>'L', -4581=>'L', -4582=>'L', -4583=>'L', -4584=>'L', -4585=>'L', -4586=>'L', -4587=>'L', -4588=>'L', -4589=>'L', -4590=>'L', -4591=>'L', -4592=>'L', -4593=>'L', -4594=>'L', -4595=>'L', -4596=>'L', -4597=>'L', -4598=>'L', -4599=>'L', -4600=>'L', -4601=>'L', -4608=>'L', -4609=>'L', -4610=>'L', -4611=>'L', -4612=>'L', -4613=>'L', -4614=>'L', -4615=>'L', -4616=>'L', -4617=>'L', -4618=>'L', -4619=>'L', -4620=>'L', -4621=>'L', -4622=>'L', -4623=>'L', -4624=>'L', -4625=>'L', -4626=>'L', -4627=>'L', -4628=>'L', -4629=>'L', -4630=>'L', -4631=>'L', -4632=>'L', -4633=>'L', -4634=>'L', -4635=>'L', -4636=>'L', -4637=>'L', -4638=>'L', -4639=>'L', -4640=>'L', -4641=>'L', -4642=>'L', -4643=>'L', -4644=>'L', -4645=>'L', -4646=>'L', -4647=>'L', -4648=>'L', -4649=>'L', -4650=>'L', -4651=>'L', -4652=>'L', -4653=>'L', -4654=>'L', -4655=>'L', -4656=>'L', -4657=>'L', -4658=>'L', -4659=>'L', -4660=>'L', -4661=>'L', -4662=>'L', -4663=>'L', -4664=>'L', -4665=>'L', -4666=>'L', -4667=>'L', -4668=>'L', -4669=>'L', -4670=>'L', -4671=>'L', -4672=>'L', -4673=>'L', -4674=>'L', -4675=>'L', -4676=>'L', -4677=>'L', -4678=>'L', -4679=>'L', -4680=>'L', -4682=>'L', -4683=>'L', -4684=>'L', -4685=>'L', -4688=>'L', -4689=>'L', -4690=>'L', -4691=>'L', -4692=>'L', -4693=>'L', -4694=>'L', -4696=>'L', -4698=>'L', -4699=>'L', -4700=>'L', -4701=>'L', -4704=>'L', -4705=>'L', -4706=>'L', -4707=>'L', -4708=>'L', -4709=>'L', -4710=>'L', -4711=>'L', -4712=>'L', -4713=>'L', -4714=>'L', -4715=>'L', -4716=>'L', -4717=>'L', -4718=>'L', -4719=>'L', -4720=>'L', -4721=>'L', -4722=>'L', -4723=>'L', -4724=>'L', -4725=>'L', -4726=>'L', -4727=>'L', -4728=>'L', -4729=>'L', -4730=>'L', -4731=>'L', -4732=>'L', -4733=>'L', -4734=>'L', -4735=>'L', -4736=>'L', -4737=>'L', -4738=>'L', -4739=>'L', -4740=>'L', -4741=>'L', -4742=>'L', -4743=>'L', -4744=>'L', -4746=>'L', -4747=>'L', -4748=>'L', -4749=>'L', -4752=>'L', -4753=>'L', -4754=>'L', -4755=>'L', -4756=>'L', -4757=>'L', -4758=>'L', -4759=>'L', -4760=>'L', -4761=>'L', -4762=>'L', -4763=>'L', -4764=>'L', -4765=>'L', -4766=>'L', -4767=>'L', -4768=>'L', -4769=>'L', -4770=>'L', -4771=>'L', -4772=>'L', -4773=>'L', -4774=>'L', -4775=>'L', -4776=>'L', -4777=>'L', -4778=>'L', -4779=>'L', -4780=>'L', -4781=>'L', -4782=>'L', -4783=>'L', -4784=>'L', -4786=>'L', -4787=>'L', -4788=>'L', -4789=>'L', -4792=>'L', -4793=>'L', -4794=>'L', -4795=>'L', -4796=>'L', -4797=>'L', -4798=>'L', -4800=>'L', -4802=>'L', -4803=>'L', -4804=>'L', -4805=>'L', -4808=>'L', -4809=>'L', -4810=>'L', -4811=>'L', -4812=>'L', -4813=>'L', -4814=>'L', -4815=>'L', -4816=>'L', -4817=>'L', -4818=>'L', -4819=>'L', -4820=>'L', -4821=>'L', -4822=>'L', -4824=>'L', -4825=>'L', -4826=>'L', -4827=>'L', -4828=>'L', -4829=>'L', -4830=>'L', -4831=>'L', -4832=>'L', -4833=>'L', -4834=>'L', -4835=>'L', -4836=>'L', -4837=>'L', -4838=>'L', -4839=>'L', -4840=>'L', -4841=>'L', -4842=>'L', -4843=>'L', -4844=>'L', -4845=>'L', -4846=>'L', -4847=>'L', -4848=>'L', -4849=>'L', -4850=>'L', -4851=>'L', -4852=>'L', -4853=>'L', -4854=>'L', -4855=>'L', -4856=>'L', -4857=>'L', -4858=>'L', -4859=>'L', -4860=>'L', -4861=>'L', -4862=>'L', -4863=>'L', -4864=>'L', -4865=>'L', -4866=>'L', -4867=>'L', -4868=>'L', -4869=>'L', -4870=>'L', -4871=>'L', -4872=>'L', -4873=>'L', -4874=>'L', -4875=>'L', -4876=>'L', -4877=>'L', -4878=>'L', -4879=>'L', -4880=>'L', -4882=>'L', -4883=>'L', -4884=>'L', -4885=>'L', -4888=>'L', -4889=>'L', -4890=>'L', -4891=>'L', -4892=>'L', -4893=>'L', -4894=>'L', -4895=>'L', -4896=>'L', -4897=>'L', -4898=>'L', -4899=>'L', -4900=>'L', -4901=>'L', -4902=>'L', -4903=>'L', -4904=>'L', -4905=>'L', -4906=>'L', -4907=>'L', -4908=>'L', -4909=>'L', -4910=>'L', -4911=>'L', -4912=>'L', -4913=>'L', -4914=>'L', -4915=>'L', -4916=>'L', -4917=>'L', -4918=>'L', -4919=>'L', -4920=>'L', -4921=>'L', -4922=>'L', -4923=>'L', -4924=>'L', -4925=>'L', -4926=>'L', -4927=>'L', -4928=>'L', -4929=>'L', -4930=>'L', -4931=>'L', -4932=>'L', -4933=>'L', -4934=>'L', -4935=>'L', -4936=>'L', -4937=>'L', -4938=>'L', -4939=>'L', -4940=>'L', -4941=>'L', -4942=>'L', -4943=>'L', -4944=>'L', -4945=>'L', -4946=>'L', -4947=>'L', -4948=>'L', -4949=>'L', -4950=>'L', -4951=>'L', -4952=>'L', -4953=>'L', -4954=>'L', -4959=>'NSM', -4960=>'L', -4961=>'L', -4962=>'L', -4963=>'L', -4964=>'L', -4965=>'L', -4966=>'L', -4967=>'L', -4968=>'L', -4969=>'L', -4970=>'L', -4971=>'L', -4972=>'L', -4973=>'L', -4974=>'L', -4975=>'L', -4976=>'L', -4977=>'L', -4978=>'L', -4979=>'L', -4980=>'L', -4981=>'L', -4982=>'L', -4983=>'L', -4984=>'L', -4985=>'L', -4986=>'L', -4987=>'L', -4988=>'L', -4992=>'L', -4993=>'L', -4994=>'L', -4995=>'L', -4996=>'L', -4997=>'L', -4998=>'L', -4999=>'L', -5000=>'L', -5001=>'L', -5002=>'L', -5003=>'L', -5004=>'L', -5005=>'L', -5006=>'L', -5007=>'L', -5008=>'ON', -5009=>'ON', -5010=>'ON', -5011=>'ON', -5012=>'ON', -5013=>'ON', -5014=>'ON', -5015=>'ON', -5016=>'ON', -5017=>'ON', -5024=>'L', -5025=>'L', -5026=>'L', -5027=>'L', -5028=>'L', -5029=>'L', -5030=>'L', -5031=>'L', -5032=>'L', -5033=>'L', -5034=>'L', -5035=>'L', -5036=>'L', -5037=>'L', -5038=>'L', -5039=>'L', -5040=>'L', -5041=>'L', -5042=>'L', -5043=>'L', -5044=>'L', -5045=>'L', -5046=>'L', -5047=>'L', -5048=>'L', -5049=>'L', -5050=>'L', -5051=>'L', -5052=>'L', -5053=>'L', -5054=>'L', -5055=>'L', -5056=>'L', -5057=>'L', -5058=>'L', -5059=>'L', -5060=>'L', -5061=>'L', -5062=>'L', -5063=>'L', -5064=>'L', -5065=>'L', -5066=>'L', -5067=>'L', -5068=>'L', -5069=>'L', -5070=>'L', -5071=>'L', -5072=>'L', -5073=>'L', -5074=>'L', -5075=>'L', -5076=>'L', -5077=>'L', -5078=>'L', -5079=>'L', -5080=>'L', -5081=>'L', -5082=>'L', -5083=>'L', -5084=>'L', -5085=>'L', -5086=>'L', -5087=>'L', -5088=>'L', -5089=>'L', -5090=>'L', -5091=>'L', -5092=>'L', -5093=>'L', -5094=>'L', -5095=>'L', -5096=>'L', -5097=>'L', -5098=>'L', -5099=>'L', -5100=>'L', -5101=>'L', -5102=>'L', -5103=>'L', -5104=>'L', -5105=>'L', -5106=>'L', -5107=>'L', -5108=>'L', -5121=>'L', -5122=>'L', -5123=>'L', -5124=>'L', -5125=>'L', -5126=>'L', -5127=>'L', -5128=>'L', -5129=>'L', -5130=>'L', -5131=>'L', -5132=>'L', -5133=>'L', -5134=>'L', -5135=>'L', -5136=>'L', -5137=>'L', -5138=>'L', -5139=>'L', -5140=>'L', -5141=>'L', -5142=>'L', -5143=>'L', -5144=>'L', -5145=>'L', -5146=>'L', -5147=>'L', -5148=>'L', -5149=>'L', -5150=>'L', -5151=>'L', -5152=>'L', -5153=>'L', -5154=>'L', -5155=>'L', -5156=>'L', -5157=>'L', -5158=>'L', -5159=>'L', -5160=>'L', -5161=>'L', -5162=>'L', -5163=>'L', -5164=>'L', -5165=>'L', -5166=>'L', -5167=>'L', -5168=>'L', -5169=>'L', -5170=>'L', -5171=>'L', -5172=>'L', -5173=>'L', -5174=>'L', -5175=>'L', -5176=>'L', -5177=>'L', -5178=>'L', -5179=>'L', -5180=>'L', -5181=>'L', -5182=>'L', -5183=>'L', -5184=>'L', -5185=>'L', -5186=>'L', -5187=>'L', -5188=>'L', -5189=>'L', -5190=>'L', -5191=>'L', -5192=>'L', -5193=>'L', -5194=>'L', -5195=>'L', -5196=>'L', -5197=>'L', -5198=>'L', -5199=>'L', -5200=>'L', -5201=>'L', -5202=>'L', -5203=>'L', -5204=>'L', -5205=>'L', -5206=>'L', -5207=>'L', -5208=>'L', -5209=>'L', -5210=>'L', -5211=>'L', -5212=>'L', -5213=>'L', -5214=>'L', -5215=>'L', -5216=>'L', -5217=>'L', -5218=>'L', -5219=>'L', -5220=>'L', -5221=>'L', -5222=>'L', -5223=>'L', -5224=>'L', -5225=>'L', -5226=>'L', -5227=>'L', -5228=>'L', -5229=>'L', -5230=>'L', -5231=>'L', -5232=>'L', -5233=>'L', -5234=>'L', -5235=>'L', -5236=>'L', -5237=>'L', -5238=>'L', -5239=>'L', -5240=>'L', -5241=>'L', -5242=>'L', -5243=>'L', -5244=>'L', -5245=>'L', -5246=>'L', -5247=>'L', -5248=>'L', -5249=>'L', -5250=>'L', -5251=>'L', -5252=>'L', -5253=>'L', -5254=>'L', -5255=>'L', -5256=>'L', -5257=>'L', -5258=>'L', -5259=>'L', -5260=>'L', -5261=>'L', -5262=>'L', -5263=>'L', -5264=>'L', -5265=>'L', -5266=>'L', -5267=>'L', -5268=>'L', -5269=>'L', -5270=>'L', -5271=>'L', -5272=>'L', -5273=>'L', -5274=>'L', -5275=>'L', -5276=>'L', -5277=>'L', -5278=>'L', -5279=>'L', -5280=>'L', -5281=>'L', -5282=>'L', -5283=>'L', -5284=>'L', -5285=>'L', -5286=>'L', -5287=>'L', -5288=>'L', -5289=>'L', -5290=>'L', -5291=>'L', -5292=>'L', -5293=>'L', -5294=>'L', -5295=>'L', -5296=>'L', -5297=>'L', -5298=>'L', -5299=>'L', -5300=>'L', -5301=>'L', -5302=>'L', -5303=>'L', -5304=>'L', -5305=>'L', -5306=>'L', -5307=>'L', -5308=>'L', -5309=>'L', -5310=>'L', -5311=>'L', -5312=>'L', -5313=>'L', -5314=>'L', -5315=>'L', -5316=>'L', -5317=>'L', -5318=>'L', -5319=>'L', -5320=>'L', -5321=>'L', -5322=>'L', -5323=>'L', -5324=>'L', -5325=>'L', -5326=>'L', -5327=>'L', -5328=>'L', -5329=>'L', -5330=>'L', -5331=>'L', -5332=>'L', -5333=>'L', -5334=>'L', -5335=>'L', -5336=>'L', -5337=>'L', -5338=>'L', -5339=>'L', -5340=>'L', -5341=>'L', -5342=>'L', -5343=>'L', -5344=>'L', -5345=>'L', -5346=>'L', -5347=>'L', -5348=>'L', -5349=>'L', -5350=>'L', -5351=>'L', -5352=>'L', -5353=>'L', -5354=>'L', -5355=>'L', -5356=>'L', -5357=>'L', -5358=>'L', -5359=>'L', -5360=>'L', -5361=>'L', -5362=>'L', -5363=>'L', -5364=>'L', -5365=>'L', -5366=>'L', -5367=>'L', -5368=>'L', -5369=>'L', -5370=>'L', -5371=>'L', -5372=>'L', -5373=>'L', -5374=>'L', -5375=>'L', -5376=>'L', -5377=>'L', -5378=>'L', -5379=>'L', -5380=>'L', -5381=>'L', -5382=>'L', -5383=>'L', -5384=>'L', -5385=>'L', -5386=>'L', -5387=>'L', -5388=>'L', -5389=>'L', -5390=>'L', -5391=>'L', -5392=>'L', -5393=>'L', -5394=>'L', -5395=>'L', -5396=>'L', -5397=>'L', -5398=>'L', -5399=>'L', -5400=>'L', -5401=>'L', -5402=>'L', -5403=>'L', -5404=>'L', -5405=>'L', -5406=>'L', -5407=>'L', -5408=>'L', -5409=>'L', -5410=>'L', -5411=>'L', -5412=>'L', -5413=>'L', -5414=>'L', -5415=>'L', -5416=>'L', -5417=>'L', -5418=>'L', -5419=>'L', -5420=>'L', -5421=>'L', -5422=>'L', -5423=>'L', -5424=>'L', -5425=>'L', -5426=>'L', -5427=>'L', -5428=>'L', -5429=>'L', -5430=>'L', -5431=>'L', -5432=>'L', -5433=>'L', -5434=>'L', -5435=>'L', -5436=>'L', -5437=>'L', -5438=>'L', -5439=>'L', -5440=>'L', -5441=>'L', -5442=>'L', -5443=>'L', -5444=>'L', -5445=>'L', -5446=>'L', -5447=>'L', -5448=>'L', -5449=>'L', -5450=>'L', -5451=>'L', -5452=>'L', -5453=>'L', -5454=>'L', -5455=>'L', -5456=>'L', -5457=>'L', -5458=>'L', -5459=>'L', -5460=>'L', -5461=>'L', -5462=>'L', -5463=>'L', -5464=>'L', -5465=>'L', -5466=>'L', -5467=>'L', -5468=>'L', -5469=>'L', -5470=>'L', -5471=>'L', -5472=>'L', -5473=>'L', -5474=>'L', -5475=>'L', -5476=>'L', -5477=>'L', -5478=>'L', -5479=>'L', -5480=>'L', -5481=>'L', -5482=>'L', -5483=>'L', -5484=>'L', -5485=>'L', -5486=>'L', -5487=>'L', -5488=>'L', -5489=>'L', -5490=>'L', -5491=>'L', -5492=>'L', -5493=>'L', -5494=>'L', -5495=>'L', -5496=>'L', -5497=>'L', -5498=>'L', -5499=>'L', -5500=>'L', -5501=>'L', -5502=>'L', -5503=>'L', -5504=>'L', -5505=>'L', -5506=>'L', -5507=>'L', -5508=>'L', -5509=>'L', -5510=>'L', -5511=>'L', -5512=>'L', -5513=>'L', -5514=>'L', -5515=>'L', -5516=>'L', -5517=>'L', -5518=>'L', -5519=>'L', -5520=>'L', -5521=>'L', -5522=>'L', -5523=>'L', -5524=>'L', -5525=>'L', -5526=>'L', -5527=>'L', -5528=>'L', -5529=>'L', -5530=>'L', -5531=>'L', -5532=>'L', -5533=>'L', -5534=>'L', -5535=>'L', -5536=>'L', -5537=>'L', -5538=>'L', -5539=>'L', -5540=>'L', -5541=>'L', -5542=>'L', -5543=>'L', -5544=>'L', -5545=>'L', -5546=>'L', -5547=>'L', -5548=>'L', -5549=>'L', -5550=>'L', -5551=>'L', -5552=>'L', -5553=>'L', -5554=>'L', -5555=>'L', -5556=>'L', -5557=>'L', -5558=>'L', -5559=>'L', -5560=>'L', -5561=>'L', -5562=>'L', -5563=>'L', -5564=>'L', -5565=>'L', -5566=>'L', -5567=>'L', -5568=>'L', -5569=>'L', -5570=>'L', -5571=>'L', -5572=>'L', -5573=>'L', -5574=>'L', -5575=>'L', -5576=>'L', -5577=>'L', -5578=>'L', -5579=>'L', -5580=>'L', -5581=>'L', -5582=>'L', -5583=>'L', -5584=>'L', -5585=>'L', -5586=>'L', -5587=>'L', -5588=>'L', -5589=>'L', -5590=>'L', -5591=>'L', -5592=>'L', -5593=>'L', -5594=>'L', -5595=>'L', -5596=>'L', -5597=>'L', -5598=>'L', -5599=>'L', -5600=>'L', -5601=>'L', -5602=>'L', -5603=>'L', -5604=>'L', -5605=>'L', -5606=>'L', -5607=>'L', -5608=>'L', -5609=>'L', -5610=>'L', -5611=>'L', -5612=>'L', -5613=>'L', -5614=>'L', -5615=>'L', -5616=>'L', -5617=>'L', -5618=>'L', -5619=>'L', -5620=>'L', -5621=>'L', -5622=>'L', -5623=>'L', -5624=>'L', -5625=>'L', -5626=>'L', -5627=>'L', -5628=>'L', -5629=>'L', -5630=>'L', -5631=>'L', -5632=>'L', -5633=>'L', -5634=>'L', -5635=>'L', -5636=>'L', -5637=>'L', -5638=>'L', -5639=>'L', -5640=>'L', -5641=>'L', -5642=>'L', -5643=>'L', -5644=>'L', -5645=>'L', -5646=>'L', -5647=>'L', -5648=>'L', -5649=>'L', -5650=>'L', -5651=>'L', -5652=>'L', -5653=>'L', -5654=>'L', -5655=>'L', -5656=>'L', -5657=>'L', -5658=>'L', -5659=>'L', -5660=>'L', -5661=>'L', -5662=>'L', -5663=>'L', -5664=>'L', -5665=>'L', -5666=>'L', -5667=>'L', -5668=>'L', -5669=>'L', -5670=>'L', -5671=>'L', -5672=>'L', -5673=>'L', -5674=>'L', -5675=>'L', -5676=>'L', -5677=>'L', -5678=>'L', -5679=>'L', -5680=>'L', -5681=>'L', -5682=>'L', -5683=>'L', -5684=>'L', -5685=>'L', -5686=>'L', -5687=>'L', -5688=>'L', -5689=>'L', -5690=>'L', -5691=>'L', -5692=>'L', -5693=>'L', -5694=>'L', -5695=>'L', -5696=>'L', -5697=>'L', -5698=>'L', -5699=>'L', -5700=>'L', -5701=>'L', -5702=>'L', -5703=>'L', -5704=>'L', -5705=>'L', -5706=>'L', -5707=>'L', -5708=>'L', -5709=>'L', -5710=>'L', -5711=>'L', -5712=>'L', -5713=>'L', -5714=>'L', -5715=>'L', -5716=>'L', -5717=>'L', -5718=>'L', -5719=>'L', -5720=>'L', -5721=>'L', -5722=>'L', -5723=>'L', -5724=>'L', -5725=>'L', -5726=>'L', -5727=>'L', -5728=>'L', -5729=>'L', -5730=>'L', -5731=>'L', -5732=>'L', -5733=>'L', -5734=>'L', -5735=>'L', -5736=>'L', -5737=>'L', -5738=>'L', -5739=>'L', -5740=>'L', -5741=>'L', -5742=>'L', -5743=>'L', -5744=>'L', -5745=>'L', -5746=>'L', -5747=>'L', -5748=>'L', -5749=>'L', -5750=>'L', -5760=>'WS', -5761=>'L', -5762=>'L', -5763=>'L', -5764=>'L', -5765=>'L', -5766=>'L', -5767=>'L', -5768=>'L', -5769=>'L', -5770=>'L', -5771=>'L', -5772=>'L', -5773=>'L', -5774=>'L', -5775=>'L', -5776=>'L', -5777=>'L', -5778=>'L', -5779=>'L', -5780=>'L', -5781=>'L', -5782=>'L', -5783=>'L', -5784=>'L', -5785=>'L', -5786=>'L', -5787=>'ON', -5788=>'ON', -5792=>'L', -5793=>'L', -5794=>'L', -5795=>'L', -5796=>'L', -5797=>'L', -5798=>'L', -5799=>'L', -5800=>'L', -5801=>'L', -5802=>'L', -5803=>'L', -5804=>'L', -5805=>'L', -5806=>'L', -5807=>'L', -5808=>'L', -5809=>'L', -5810=>'L', -5811=>'L', -5812=>'L', -5813=>'L', -5814=>'L', -5815=>'L', -5816=>'L', -5817=>'L', -5818=>'L', -5819=>'L', -5820=>'L', -5821=>'L', -5822=>'L', -5823=>'L', -5824=>'L', -5825=>'L', -5826=>'L', -5827=>'L', -5828=>'L', -5829=>'L', -5830=>'L', -5831=>'L', -5832=>'L', -5833=>'L', -5834=>'L', -5835=>'L', -5836=>'L', -5837=>'L', -5838=>'L', -5839=>'L', -5840=>'L', -5841=>'L', -5842=>'L', -5843=>'L', -5844=>'L', -5845=>'L', -5846=>'L', -5847=>'L', -5848=>'L', -5849=>'L', -5850=>'L', -5851=>'L', -5852=>'L', -5853=>'L', -5854=>'L', -5855=>'L', -5856=>'L', -5857=>'L', -5858=>'L', -5859=>'L', -5860=>'L', -5861=>'L', -5862=>'L', -5863=>'L', -5864=>'L', -5865=>'L', -5866=>'L', -5867=>'L', -5868=>'L', -5869=>'L', -5870=>'L', -5871=>'L', -5872=>'L', -5888=>'L', -5889=>'L', -5890=>'L', -5891=>'L', -5892=>'L', -5893=>'L', -5894=>'L', -5895=>'L', -5896=>'L', -5897=>'L', -5898=>'L', -5899=>'L', -5900=>'L', -5902=>'L', -5903=>'L', -5904=>'L', -5905=>'L', -5906=>'NSM', -5907=>'NSM', -5908=>'NSM', -5920=>'L', -5921=>'L', -5922=>'L', -5923=>'L', -5924=>'L', -5925=>'L', -5926=>'L', -5927=>'L', -5928=>'L', -5929=>'L', -5930=>'L', -5931=>'L', -5932=>'L', -5933=>'L', -5934=>'L', -5935=>'L', -5936=>'L', -5937=>'L', -5938=>'NSM', -5939=>'NSM', -5940=>'NSM', -5941=>'L', -5942=>'L', -5952=>'L', -5953=>'L', -5954=>'L', -5955=>'L', -5956=>'L', -5957=>'L', -5958=>'L', -5959=>'L', -5960=>'L', -5961=>'L', -5962=>'L', -5963=>'L', -5964=>'L', -5965=>'L', -5966=>'L', -5967=>'L', -5968=>'L', -5969=>'L', -5970=>'NSM', -5971=>'NSM', -5984=>'L', -5985=>'L', -5986=>'L', -5987=>'L', -5988=>'L', -5989=>'L', -5990=>'L', -5991=>'L', -5992=>'L', -5993=>'L', -5994=>'L', -5995=>'L', -5996=>'L', -5998=>'L', -5999=>'L', -6000=>'L', -6002=>'NSM', -6003=>'NSM', -6016=>'L', -6017=>'L', -6018=>'L', -6019=>'L', -6020=>'L', -6021=>'L', -6022=>'L', -6023=>'L', -6024=>'L', -6025=>'L', -6026=>'L', -6027=>'L', -6028=>'L', -6029=>'L', -6030=>'L', -6031=>'L', -6032=>'L', -6033=>'L', -6034=>'L', -6035=>'L', -6036=>'L', -6037=>'L', -6038=>'L', -6039=>'L', -6040=>'L', -6041=>'L', -6042=>'L', -6043=>'L', -6044=>'L', -6045=>'L', -6046=>'L', -6047=>'L', -6048=>'L', -6049=>'L', -6050=>'L', -6051=>'L', -6052=>'L', -6053=>'L', -6054=>'L', -6055=>'L', -6056=>'L', -6057=>'L', -6058=>'L', -6059=>'L', -6060=>'L', -6061=>'L', -6062=>'L', -6063=>'L', -6064=>'L', -6065=>'L', -6066=>'L', -6067=>'L', -6068=>'L', -6069=>'L', -6070=>'L', -6071=>'NSM', -6072=>'NSM', -6073=>'NSM', -6074=>'NSM', -6075=>'NSM', -6076=>'NSM', -6077=>'NSM', -6078=>'L', -6079=>'L', -6080=>'L', -6081=>'L', -6082=>'L', -6083=>'L', -6084=>'L', -6085=>'L', -6086=>'NSM', -6087=>'L', -6088=>'L', -6089=>'NSM', -6090=>'NSM', -6091=>'NSM', -6092=>'NSM', -6093=>'NSM', -6094=>'NSM', -6095=>'NSM', -6096=>'NSM', -6097=>'NSM', -6098=>'NSM', -6099=>'NSM', -6100=>'L', -6101=>'L', -6102=>'L', -6103=>'L', -6104=>'L', -6105=>'L', -6106=>'L', -6107=>'ET', -6108=>'L', -6109=>'NSM', -6112=>'L', -6113=>'L', -6114=>'L', -6115=>'L', -6116=>'L', -6117=>'L', -6118=>'L', -6119=>'L', -6120=>'L', -6121=>'L', -6128=>'ON', -6129=>'ON', -6130=>'ON', -6131=>'ON', -6132=>'ON', -6133=>'ON', -6134=>'ON', -6135=>'ON', -6136=>'ON', -6137=>'ON', -6144=>'ON', -6145=>'ON', -6146=>'ON', -6147=>'ON', -6148=>'ON', -6149=>'ON', -6150=>'ON', -6151=>'ON', -6152=>'ON', -6153=>'ON', -6154=>'ON', -6155=>'NSM', -6156=>'NSM', -6157=>'NSM', -6158=>'WS', -6160=>'L', -6161=>'L', -6162=>'L', -6163=>'L', -6164=>'L', -6165=>'L', -6166=>'L', -6167=>'L', -6168=>'L', -6169=>'L', -6176=>'L', -6177=>'L', -6178=>'L', -6179=>'L', -6180=>'L', -6181=>'L', -6182=>'L', -6183=>'L', -6184=>'L', -6185=>'L', -6186=>'L', -6187=>'L', -6188=>'L', -6189=>'L', -6190=>'L', -6191=>'L', -6192=>'L', -6193=>'L', -6194=>'L', -6195=>'L', -6196=>'L', -6197=>'L', -6198=>'L', -6199=>'L', -6200=>'L', -6201=>'L', -6202=>'L', -6203=>'L', -6204=>'L', -6205=>'L', -6206=>'L', -6207=>'L', -6208=>'L', -6209=>'L', -6210=>'L', -6211=>'L', -6212=>'L', -6213=>'L', -6214=>'L', -6215=>'L', -6216=>'L', -6217=>'L', -6218=>'L', -6219=>'L', -6220=>'L', -6221=>'L', -6222=>'L', -6223=>'L', -6224=>'L', -6225=>'L', -6226=>'L', -6227=>'L', -6228=>'L', -6229=>'L', -6230=>'L', -6231=>'L', -6232=>'L', -6233=>'L', -6234=>'L', -6235=>'L', -6236=>'L', -6237=>'L', -6238=>'L', -6239=>'L', -6240=>'L', -6241=>'L', -6242=>'L', -6243=>'L', -6244=>'L', -6245=>'L', -6246=>'L', -6247=>'L', -6248=>'L', -6249=>'L', -6250=>'L', -6251=>'L', -6252=>'L', -6253=>'L', -6254=>'L', -6255=>'L', -6256=>'L', -6257=>'L', -6258=>'L', -6259=>'L', -6260=>'L', -6261=>'L', -6262=>'L', -6263=>'L', -6272=>'L', -6273=>'L', -6274=>'L', -6275=>'L', -6276=>'L', -6277=>'L', -6278=>'L', -6279=>'L', -6280=>'L', -6281=>'L', -6282=>'L', -6283=>'L', -6284=>'L', -6285=>'L', -6286=>'L', -6287=>'L', -6288=>'L', -6289=>'L', -6290=>'L', -6291=>'L', -6292=>'L', -6293=>'L', -6294=>'L', -6295=>'L', -6296=>'L', -6297=>'L', -6298=>'L', -6299=>'L', -6300=>'L', -6301=>'L', -6302=>'L', -6303=>'L', -6304=>'L', -6305=>'L', -6306=>'L', -6307=>'L', -6308=>'L', -6309=>'L', -6310=>'L', -6311=>'L', -6312=>'L', -6313=>'NSM', -6400=>'L', -6401=>'L', -6402=>'L', -6403=>'L', -6404=>'L', -6405=>'L', -6406=>'L', -6407=>'L', -6408=>'L', -6409=>'L', -6410=>'L', -6411=>'L', -6412=>'L', -6413=>'L', -6414=>'L', -6415=>'L', -6416=>'L', -6417=>'L', -6418=>'L', -6419=>'L', -6420=>'L', -6421=>'L', -6422=>'L', -6423=>'L', -6424=>'L', -6425=>'L', -6426=>'L', -6427=>'L', -6428=>'L', -6432=>'NSM', -6433=>'NSM', -6434=>'NSM', -6435=>'L', -6436=>'L', -6437=>'L', -6438=>'L', -6439=>'NSM', -6440=>'NSM', -6441=>'NSM', -6442=>'NSM', -6443=>'NSM', -6448=>'L', -6449=>'L', -6450=>'NSM', -6451=>'L', -6452=>'L', -6453=>'L', -6454=>'L', -6455=>'L', -6456=>'L', -6457=>'NSM', -6458=>'NSM', -6459=>'NSM', -6464=>'ON', -6468=>'ON', -6469=>'ON', -6470=>'L', -6471=>'L', -6472=>'L', -6473=>'L', -6474=>'L', -6475=>'L', -6476=>'L', -6477=>'L', -6478=>'L', -6479=>'L', -6480=>'L', -6481=>'L', -6482=>'L', -6483=>'L', -6484=>'L', -6485=>'L', -6486=>'L', -6487=>'L', -6488=>'L', -6489=>'L', -6490=>'L', -6491=>'L', -6492=>'L', -6493=>'L', -6494=>'L', -6495=>'L', -6496=>'L', -6497=>'L', -6498=>'L', -6499=>'L', -6500=>'L', -6501=>'L', -6502=>'L', -6503=>'L', -6504=>'L', -6505=>'L', -6506=>'L', -6507=>'L', -6508=>'L', -6509=>'L', -6512=>'L', -6513=>'L', -6514=>'L', -6515=>'L', -6516=>'L', -6528=>'L', -6529=>'L', -6530=>'L', -6531=>'L', -6532=>'L', -6533=>'L', -6534=>'L', -6535=>'L', -6536=>'L', -6537=>'L', -6538=>'L', -6539=>'L', -6540=>'L', -6541=>'L', -6542=>'L', -6543=>'L', -6544=>'L', -6545=>'L', -6546=>'L', -6547=>'L', -6548=>'L', -6549=>'L', -6550=>'L', -6551=>'L', -6552=>'L', -6553=>'L', -6554=>'L', -6555=>'L', -6556=>'L', -6557=>'L', -6558=>'L', -6559=>'L', -6560=>'L', -6561=>'L', -6562=>'L', -6563=>'L', -6564=>'L', -6565=>'L', -6566=>'L', -6567=>'L', -6568=>'L', -6569=>'L', -6576=>'L', -6577=>'L', -6578=>'L', -6579=>'L', -6580=>'L', -6581=>'L', -6582=>'L', -6583=>'L', -6584=>'L', -6585=>'L', -6586=>'L', -6587=>'L', -6588=>'L', -6589=>'L', -6590=>'L', -6591=>'L', -6592=>'L', -6593=>'L', -6594=>'L', -6595=>'L', -6596=>'L', -6597=>'L', -6598=>'L', -6599=>'L', -6600=>'L', -6601=>'L', -6608=>'L', -6609=>'L', -6610=>'L', -6611=>'L', -6612=>'L', -6613=>'L', -6614=>'L', -6615=>'L', -6616=>'L', -6617=>'L', -6622=>'ON', -6623=>'ON', -6624=>'ON', -6625=>'ON', -6626=>'ON', -6627=>'ON', -6628=>'ON', -6629=>'ON', -6630=>'ON', -6631=>'ON', -6632=>'ON', -6633=>'ON', -6634=>'ON', -6635=>'ON', -6636=>'ON', -6637=>'ON', -6638=>'ON', -6639=>'ON', -6640=>'ON', -6641=>'ON', -6642=>'ON', -6643=>'ON', -6644=>'ON', -6645=>'ON', -6646=>'ON', -6647=>'ON', -6648=>'ON', -6649=>'ON', -6650=>'ON', -6651=>'ON', -6652=>'ON', -6653=>'ON', -6654=>'ON', -6655=>'ON', -6656=>'L', -6657=>'L', -6658=>'L', -6659=>'L', -6660=>'L', -6661=>'L', -6662=>'L', -6663=>'L', -6664=>'L', -6665=>'L', -6666=>'L', -6667=>'L', -6668=>'L', -6669=>'L', -6670=>'L', -6671=>'L', -6672=>'L', -6673=>'L', -6674=>'L', -6675=>'L', -6676=>'L', -6677=>'L', -6678=>'L', -6679=>'NSM', -6680=>'NSM', -6681=>'L', -6682=>'L', -6683=>'L', -6686=>'L', -6687=>'L', -6912=>'NSM', -6913=>'NSM', -6914=>'NSM', -6915=>'NSM', -6916=>'L', -6917=>'L', -6918=>'L', -6919=>'L', -6920=>'L', -6921=>'L', -6922=>'L', -6923=>'L', -6924=>'L', -6925=>'L', -6926=>'L', -6927=>'L', -6928=>'L', -6929=>'L', -6930=>'L', -6931=>'L', -6932=>'L', -6933=>'L', -6934=>'L', -6935=>'L', -6936=>'L', -6937=>'L', -6938=>'L', -6939=>'L', -6940=>'L', -6941=>'L', -6942=>'L', -6943=>'L', -6944=>'L', -6945=>'L', -6946=>'L', -6947=>'L', -6948=>'L', -6949=>'L', -6950=>'L', -6951=>'L', -6952=>'L', -6953=>'L', -6954=>'L', -6955=>'L', -6956=>'L', -6957=>'L', -6958=>'L', -6959=>'L', -6960=>'L', -6961=>'L', -6962=>'L', -6963=>'L', -6964=>'NSM', -6965=>'L', -6966=>'NSM', -6967=>'NSM', -6968=>'NSM', -6969=>'NSM', -6970=>'NSM', -6971=>'L', -6972=>'NSM', -6973=>'L', -6974=>'L', -6975=>'L', -6976=>'L', -6977=>'L', -6978=>'NSM', -6979=>'L', -6980=>'L', -6981=>'L', -6982=>'L', -6983=>'L', -6984=>'L', -6985=>'L', -6986=>'L', -6987=>'L', -6992=>'L', -6993=>'L', -6994=>'L', -6995=>'L', -6996=>'L', -6997=>'L', -6998=>'L', -6999=>'L', -7000=>'L', -7001=>'L', -7002=>'L', -7003=>'L', -7004=>'L', -7005=>'L', -7006=>'L', -7007=>'L', -7008=>'L', -7009=>'L', -7010=>'L', -7011=>'L', -7012=>'L', -7013=>'L', -7014=>'L', -7015=>'L', -7016=>'L', -7017=>'L', -7018=>'L', -7019=>'NSM', -7020=>'NSM', -7021=>'NSM', -7022=>'NSM', -7023=>'NSM', -7024=>'NSM', -7025=>'NSM', -7026=>'NSM', -7027=>'NSM', -7028=>'L', -7029=>'L', -7030=>'L', -7031=>'L', -7032=>'L', -7033=>'L', -7034=>'L', -7035=>'L', -7036=>'L', -7424=>'L', -7425=>'L', -7426=>'L', -7427=>'L', -7428=>'L', -7429=>'L', -7430=>'L', -7431=>'L', -7432=>'L', -7433=>'L', -7434=>'L', -7435=>'L', -7436=>'L', -7437=>'L', -7438=>'L', -7439=>'L', -7440=>'L', -7441=>'L', -7442=>'L', -7443=>'L', -7444=>'L', -7445=>'L', -7446=>'L', -7447=>'L', -7448=>'L', -7449=>'L', -7450=>'L', -7451=>'L', -7452=>'L', -7453=>'L', -7454=>'L', -7455=>'L', -7456=>'L', -7457=>'L', -7458=>'L', -7459=>'L', -7460=>'L', -7461=>'L', -7462=>'L', -7463=>'L', -7464=>'L', -7465=>'L', -7466=>'L', -7467=>'L', -7468=>'L', -7469=>'L', -7470=>'L', -7471=>'L', -7472=>'L', -7473=>'L', -7474=>'L', -7475=>'L', -7476=>'L', -7477=>'L', -7478=>'L', -7479=>'L', -7480=>'L', -7481=>'L', -7482=>'L', -7483=>'L', -7484=>'L', -7485=>'L', -7486=>'L', -7487=>'L', -7488=>'L', -7489=>'L', -7490=>'L', -7491=>'L', -7492=>'L', -7493=>'L', -7494=>'L', -7495=>'L', -7496=>'L', -7497=>'L', -7498=>'L', -7499=>'L', -7500=>'L', -7501=>'L', -7502=>'L', -7503=>'L', -7504=>'L', -7505=>'L', -7506=>'L', -7507=>'L', -7508=>'L', -7509=>'L', -7510=>'L', -7511=>'L', -7512=>'L', -7513=>'L', -7514=>'L', -7515=>'L', -7516=>'L', -7517=>'L', -7518=>'L', -7519=>'L', -7520=>'L', -7521=>'L', -7522=>'L', -7523=>'L', -7524=>'L', -7525=>'L', -7526=>'L', -7527=>'L', -7528=>'L', -7529=>'L', -7530=>'L', -7531=>'L', -7532=>'L', -7533=>'L', -7534=>'L', -7535=>'L', -7536=>'L', -7537=>'L', -7538=>'L', -7539=>'L', -7540=>'L', -7541=>'L', -7542=>'L', -7543=>'L', -7544=>'L', -7545=>'L', -7546=>'L', -7547=>'L', -7548=>'L', -7549=>'L', -7550=>'L', -7551=>'L', -7552=>'L', -7553=>'L', -7554=>'L', -7555=>'L', -7556=>'L', -7557=>'L', -7558=>'L', -7559=>'L', -7560=>'L', -7561=>'L', -7562=>'L', -7563=>'L', -7564=>'L', -7565=>'L', -7566=>'L', -7567=>'L', -7568=>'L', -7569=>'L', -7570=>'L', -7571=>'L', -7572=>'L', -7573=>'L', -7574=>'L', -7575=>'L', -7576=>'L', -7577=>'L', -7578=>'L', -7579=>'L', -7580=>'L', -7581=>'L', -7582=>'L', -7583=>'L', -7584=>'L', -7585=>'L', -7586=>'L', -7587=>'L', -7588=>'L', -7589=>'L', -7590=>'L', -7591=>'L', -7592=>'L', -7593=>'L', -7594=>'L', -7595=>'L', -7596=>'L', -7597=>'L', -7598=>'L', -7599=>'L', -7600=>'L', -7601=>'L', -7602=>'L', -7603=>'L', -7604=>'L', -7605=>'L', -7606=>'L', -7607=>'L', -7608=>'L', -7609=>'L', -7610=>'L', -7611=>'L', -7612=>'L', -7613=>'L', -7614=>'L', -7615=>'L', -7616=>'NSM', -7617=>'NSM', -7618=>'NSM', -7619=>'NSM', -7620=>'NSM', -7621=>'NSM', -7622=>'NSM', -7623=>'NSM', -7624=>'NSM', -7625=>'NSM', -7626=>'NSM', -7678=>'NSM', -7679=>'NSM', -7680=>'L', -7681=>'L', -7682=>'L', -7683=>'L', -7684=>'L', -7685=>'L', -7686=>'L', -7687=>'L', -7688=>'L', -7689=>'L', -7690=>'L', -7691=>'L', -7692=>'L', -7693=>'L', -7694=>'L', -7695=>'L', -7696=>'L', -7697=>'L', -7698=>'L', -7699=>'L', -7700=>'L', -7701=>'L', -7702=>'L', -7703=>'L', -7704=>'L', -7705=>'L', -7706=>'L', -7707=>'L', -7708=>'L', -7709=>'L', -7710=>'L', -7711=>'L', -7712=>'L', -7713=>'L', -7714=>'L', -7715=>'L', -7716=>'L', -7717=>'L', -7718=>'L', -7719=>'L', -7720=>'L', -7721=>'L', -7722=>'L', -7723=>'L', -7724=>'L', -7725=>'L', -7726=>'L', -7727=>'L', -7728=>'L', -7729=>'L', -7730=>'L', -7731=>'L', -7732=>'L', -7733=>'L', -7734=>'L', -7735=>'L', -7736=>'L', -7737=>'L', -7738=>'L', -7739=>'L', -7740=>'L', -7741=>'L', -7742=>'L', -7743=>'L', -7744=>'L', -7745=>'L', -7746=>'L', -7747=>'L', -7748=>'L', -7749=>'L', -7750=>'L', -7751=>'L', -7752=>'L', -7753=>'L', -7754=>'L', -7755=>'L', -7756=>'L', -7757=>'L', -7758=>'L', -7759=>'L', -7760=>'L', -7761=>'L', -7762=>'L', -7763=>'L', -7764=>'L', -7765=>'L', -7766=>'L', -7767=>'L', -7768=>'L', -7769=>'L', -7770=>'L', -7771=>'L', -7772=>'L', -7773=>'L', -7774=>'L', -7775=>'L', -7776=>'L', -7777=>'L', -7778=>'L', -7779=>'L', -7780=>'L', -7781=>'L', -7782=>'L', -7783=>'L', -7784=>'L', -7785=>'L', -7786=>'L', -7787=>'L', -7788=>'L', -7789=>'L', -7790=>'L', -7791=>'L', -7792=>'L', -7793=>'L', -7794=>'L', -7795=>'L', -7796=>'L', -7797=>'L', -7798=>'L', -7799=>'L', -7800=>'L', -7801=>'L', -7802=>'L', -7803=>'L', -7804=>'L', -7805=>'L', -7806=>'L', -7807=>'L', -7808=>'L', -7809=>'L', -7810=>'L', -7811=>'L', -7812=>'L', -7813=>'L', -7814=>'L', -7815=>'L', -7816=>'L', -7817=>'L', -7818=>'L', -7819=>'L', -7820=>'L', -7821=>'L', -7822=>'L', -7823=>'L', -7824=>'L', -7825=>'L', -7826=>'L', -7827=>'L', -7828=>'L', -7829=>'L', -7830=>'L', -7831=>'L', -7832=>'L', -7833=>'L', -7834=>'L', -7835=>'L', -7840=>'L', -7841=>'L', -7842=>'L', -7843=>'L', -7844=>'L', -7845=>'L', -7846=>'L', -7847=>'L', -7848=>'L', -7849=>'L', -7850=>'L', -7851=>'L', -7852=>'L', -7853=>'L', -7854=>'L', -7855=>'L', -7856=>'L', -7857=>'L', -7858=>'L', -7859=>'L', -7860=>'L', -7861=>'L', -7862=>'L', -7863=>'L', -7864=>'L', -7865=>'L', -7866=>'L', -7867=>'L', -7868=>'L', -7869=>'L', -7870=>'L', -7871=>'L', -7872=>'L', -7873=>'L', -7874=>'L', -7875=>'L', -7876=>'L', -7877=>'L', -7878=>'L', -7879=>'L', -7880=>'L', -7881=>'L', -7882=>'L', -7883=>'L', -7884=>'L', -7885=>'L', -7886=>'L', -7887=>'L', -7888=>'L', -7889=>'L', -7890=>'L', -7891=>'L', -7892=>'L', -7893=>'L', -7894=>'L', -7895=>'L', -7896=>'L', -7897=>'L', -7898=>'L', -7899=>'L', -7900=>'L', -7901=>'L', -7902=>'L', -7903=>'L', -7904=>'L', -7905=>'L', -7906=>'L', -7907=>'L', -7908=>'L', -7909=>'L', -7910=>'L', -7911=>'L', -7912=>'L', -7913=>'L', -7914=>'L', -7915=>'L', -7916=>'L', -7917=>'L', -7918=>'L', -7919=>'L', -7920=>'L', -7921=>'L', -7922=>'L', -7923=>'L', -7924=>'L', -7925=>'L', -7926=>'L', -7927=>'L', -7928=>'L', -7929=>'L', -7936=>'L', -7937=>'L', -7938=>'L', -7939=>'L', -7940=>'L', -7941=>'L', -7942=>'L', -7943=>'L', -7944=>'L', -7945=>'L', -7946=>'L', -7947=>'L', -7948=>'L', -7949=>'L', -7950=>'L', -7951=>'L', -7952=>'L', -7953=>'L', -7954=>'L', -7955=>'L', -7956=>'L', -7957=>'L', -7960=>'L', -7961=>'L', -7962=>'L', -7963=>'L', -7964=>'L', -7965=>'L', -7968=>'L', -7969=>'L', -7970=>'L', -7971=>'L', -7972=>'L', -7973=>'L', -7974=>'L', -7975=>'L', -7976=>'L', -7977=>'L', -7978=>'L', -7979=>'L', -7980=>'L', -7981=>'L', -7982=>'L', -7983=>'L', -7984=>'L', -7985=>'L', -7986=>'L', -7987=>'L', -7988=>'L', -7989=>'L', -7990=>'L', -7991=>'L', -7992=>'L', -7993=>'L', -7994=>'L', -7995=>'L', -7996=>'L', -7997=>'L', -7998=>'L', -7999=>'L', -8000=>'L', -8001=>'L', -8002=>'L', -8003=>'L', -8004=>'L', -8005=>'L', -8008=>'L', -8009=>'L', -8010=>'L', -8011=>'L', -8012=>'L', -8013=>'L', -8016=>'L', -8017=>'L', -8018=>'L', -8019=>'L', -8020=>'L', -8021=>'L', -8022=>'L', -8023=>'L', -8025=>'L', -8027=>'L', -8029=>'L', -8031=>'L', -8032=>'L', -8033=>'L', -8034=>'L', -8035=>'L', -8036=>'L', -8037=>'L', -8038=>'L', -8039=>'L', -8040=>'L', -8041=>'L', -8042=>'L', -8043=>'L', -8044=>'L', -8045=>'L', -8046=>'L', -8047=>'L', -8048=>'L', -8049=>'L', -8050=>'L', -8051=>'L', -8052=>'L', -8053=>'L', -8054=>'L', -8055=>'L', -8056=>'L', -8057=>'L', -8058=>'L', -8059=>'L', -8060=>'L', -8061=>'L', -8064=>'L', -8065=>'L', -8066=>'L', -8067=>'L', -8068=>'L', -8069=>'L', -8070=>'L', -8071=>'L', -8072=>'L', -8073=>'L', -8074=>'L', -8075=>'L', -8076=>'L', -8077=>'L', -8078=>'L', -8079=>'L', -8080=>'L', -8081=>'L', -8082=>'L', -8083=>'L', -8084=>'L', -8085=>'L', -8086=>'L', -8087=>'L', -8088=>'L', -8089=>'L', -8090=>'L', -8091=>'L', -8092=>'L', -8093=>'L', -8094=>'L', -8095=>'L', -8096=>'L', -8097=>'L', -8098=>'L', -8099=>'L', -8100=>'L', -8101=>'L', -8102=>'L', -8103=>'L', -8104=>'L', -8105=>'L', -8106=>'L', -8107=>'L', -8108=>'L', -8109=>'L', -8110=>'L', -8111=>'L', -8112=>'L', -8113=>'L', -8114=>'L', -8115=>'L', -8116=>'L', -8118=>'L', -8119=>'L', -8120=>'L', -8121=>'L', -8122=>'L', -8123=>'L', -8124=>'L', -8125=>'ON', -8126=>'L', -8127=>'ON', -8128=>'ON', -8129=>'ON', -8130=>'L', -8131=>'L', -8132=>'L', -8134=>'L', -8135=>'L', -8136=>'L', -8137=>'L', -8138=>'L', -8139=>'L', -8140=>'L', -8141=>'ON', -8142=>'ON', -8143=>'ON', -8144=>'L', -8145=>'L', -8146=>'L', -8147=>'L', -8150=>'L', -8151=>'L', -8152=>'L', -8153=>'L', -8154=>'L', -8155=>'L', -8157=>'ON', -8158=>'ON', -8159=>'ON', -8160=>'L', -8161=>'L', -8162=>'L', -8163=>'L', -8164=>'L', -8165=>'L', -8166=>'L', -8167=>'L', -8168=>'L', -8169=>'L', -8170=>'L', -8171=>'L', -8172=>'L', -8173=>'ON', -8174=>'ON', -8175=>'ON', -8178=>'L', -8179=>'L', -8180=>'L', -8182=>'L', -8183=>'L', -8184=>'L', -8185=>'L', -8186=>'L', -8187=>'L', -8188=>'L', -8189=>'ON', -8190=>'ON', -8192=>'WS', -8193=>'WS', -8194=>'WS', -8195=>'WS', -8196=>'WS', -8197=>'WS', -8198=>'WS', -8199=>'WS', -8200=>'WS', -8201=>'WS', -8202=>'WS', -8203=>'BN', -8204=>'BN', -8205=>'BN', -8206=>'L', -8207=>'R', -8208=>'ON', -8209=>'ON', -8210=>'ON', -8211=>'ON', -8212=>'ON', -8213=>'ON', -8214=>'ON', -8215=>'ON', -8216=>'ON', -8217=>'ON', -8218=>'ON', -8219=>'ON', -8220=>'ON', -8221=>'ON', -8222=>'ON', -8223=>'ON', -8224=>'ON', -8225=>'ON', -8226=>'ON', -8227=>'ON', -8228=>'ON', -8229=>'ON', -8230=>'ON', -8231=>'ON', -8232=>'WS', -8233=>'B', -8234=>'LRE', -8235=>'RLE', -8236=>'PDF', -8237=>'LRO', -8238=>'RLO', -8239=>'CS', -8240=>'ET', -8241=>'ET', -8242=>'ET', -8243=>'ET', -8244=>'ET', -8245=>'ON', -8246=>'ON', -8247=>'ON', -8248=>'ON', -8249=>'ON', -8250=>'ON', -8251=>'ON', -8252=>'ON', -8253=>'ON', -8254=>'ON', -8255=>'ON', -8256=>'ON', -8257=>'ON', -8258=>'ON', -8259=>'ON', -8260=>'CS', -8261=>'ON', -8262=>'ON', -8263=>'ON', -8264=>'ON', -8265=>'ON', -8266=>'ON', -8267=>'ON', -8268=>'ON', -8269=>'ON', -8270=>'ON', -8271=>'ON', -8272=>'ON', -8273=>'ON', -8274=>'ON', -8275=>'ON', -8276=>'ON', -8277=>'ON', -8278=>'ON', -8279=>'ON', -8280=>'ON', -8281=>'ON', -8282=>'ON', -8283=>'ON', -8284=>'ON', -8285=>'ON', -8286=>'ON', -8287=>'WS', -8288=>'BN', -8289=>'BN', -8290=>'BN', -8291=>'BN', -8298=>'BN', -8299=>'BN', -8300=>'BN', -8301=>'BN', -8302=>'BN', -8303=>'BN', -8304=>'EN', -8305=>'L', -8308=>'EN', -8309=>'EN', -8310=>'EN', -8311=>'EN', -8312=>'EN', -8313=>'EN', -8314=>'ES', -8315=>'ES', -8316=>'ON', -8317=>'ON', -8318=>'ON', -8319=>'L', -8320=>'EN', -8321=>'EN', -8322=>'EN', -8323=>'EN', -8324=>'EN', -8325=>'EN', -8326=>'EN', -8327=>'EN', -8328=>'EN', -8329=>'EN', -8330=>'ES', -8331=>'ES', -8332=>'ON', -8333=>'ON', -8334=>'ON', -8336=>'L', -8337=>'L', -8338=>'L', -8339=>'L', -8340=>'L', -8352=>'ET', -8353=>'ET', -8354=>'ET', -8355=>'ET', -8356=>'ET', -8357=>'ET', -8358=>'ET', -8359=>'ET', -8360=>'ET', -8361=>'ET', -8362=>'ET', -8363=>'ET', -8364=>'ET', -8365=>'ET', -8366=>'ET', -8367=>'ET', -8368=>'ET', -8369=>'ET', -8370=>'ET', -8371=>'ET', -8372=>'ET', -8373=>'ET', -8400=>'NSM', -8401=>'NSM', -8402=>'NSM', -8403=>'NSM', -8404=>'NSM', -8405=>'NSM', -8406=>'NSM', -8407=>'NSM', -8408=>'NSM', -8409=>'NSM', -8410=>'NSM', -8411=>'NSM', -8412=>'NSM', -8413=>'NSM', -8414=>'NSM', -8415=>'NSM', -8416=>'NSM', -8417=>'NSM', -8418=>'NSM', -8419=>'NSM', -8420=>'NSM', -8421=>'NSM', -8422=>'NSM', -8423=>'NSM', -8424=>'NSM', -8425=>'NSM', -8426=>'NSM', -8427=>'NSM', -8428=>'NSM', -8429=>'NSM', -8430=>'NSM', -8431=>'NSM', -8448=>'ON', -8449=>'ON', -8450=>'L', -8451=>'ON', -8452=>'ON', -8453=>'ON', -8454=>'ON', -8455=>'L', -8456=>'ON', -8457=>'ON', -8458=>'L', -8459=>'L', -8460=>'L', -8461=>'L', -8462=>'L', -8463=>'L', -8464=>'L', -8465=>'L', -8466=>'L', -8467=>'L', -8468=>'ON', -8469=>'L', -8470=>'ON', -8471=>'ON', -8472=>'ON', -8473=>'L', -8474=>'L', -8475=>'L', -8476=>'L', -8477=>'L', -8478=>'ON', -8479=>'ON', -8480=>'ON', -8481=>'ON', -8482=>'ON', -8483=>'ON', -8484=>'L', -8485=>'ON', -8486=>'L', -8487=>'ON', -8488=>'L', -8489=>'ON', -8490=>'L', -8491=>'L', -8492=>'L', -8493=>'L', -8494=>'ET', -8495=>'L', -8496=>'L', -8497=>'L', -8498=>'L', -8499=>'L', -8500=>'L', -8501=>'L', -8502=>'L', -8503=>'L', -8504=>'L', -8505=>'L', -8506=>'ON', -8507=>'ON', -8508=>'L', -8509=>'L', -8510=>'L', -8511=>'L', -8512=>'ON', -8513=>'ON', -8514=>'ON', -8515=>'ON', -8516=>'ON', -8517=>'L', -8518=>'L', -8519=>'L', -8520=>'L', -8521=>'L', -8522=>'ON', -8523=>'ON', -8524=>'ON', -8525=>'ON', -8526=>'L', -8531=>'ON', -8532=>'ON', -8533=>'ON', -8534=>'ON', -8535=>'ON', -8536=>'ON', -8537=>'ON', -8538=>'ON', -8539=>'ON', -8540=>'ON', -8541=>'ON', -8542=>'ON', -8543=>'ON', -8544=>'L', -8545=>'L', -8546=>'L', -8547=>'L', -8548=>'L', -8549=>'L', -8550=>'L', -8551=>'L', -8552=>'L', -8553=>'L', -8554=>'L', -8555=>'L', -8556=>'L', -8557=>'L', -8558=>'L', -8559=>'L', -8560=>'L', -8561=>'L', -8562=>'L', -8563=>'L', -8564=>'L', -8565=>'L', -8566=>'L', -8567=>'L', -8568=>'L', -8569=>'L', -8570=>'L', -8571=>'L', -8572=>'L', -8573=>'L', -8574=>'L', -8575=>'L', -8576=>'L', -8577=>'L', -8578=>'L', -8579=>'L', -8580=>'L', -8592=>'ON', -8593=>'ON', -8594=>'ON', -8595=>'ON', -8596=>'ON', -8597=>'ON', -8598=>'ON', -8599=>'ON', -8600=>'ON', -8601=>'ON', -8602=>'ON', -8603=>'ON', -8604=>'ON', -8605=>'ON', -8606=>'ON', -8607=>'ON', -8608=>'ON', -8609=>'ON', -8610=>'ON', -8611=>'ON', -8612=>'ON', -8613=>'ON', -8614=>'ON', -8615=>'ON', -8616=>'ON', -8617=>'ON', -8618=>'ON', -8619=>'ON', -8620=>'ON', -8621=>'ON', -8622=>'ON', -8623=>'ON', -8624=>'ON', -8625=>'ON', -8626=>'ON', -8627=>'ON', -8628=>'ON', -8629=>'ON', -8630=>'ON', -8631=>'ON', -8632=>'ON', -8633=>'ON', -8634=>'ON', -8635=>'ON', -8636=>'ON', -8637=>'ON', -8638=>'ON', -8639=>'ON', -8640=>'ON', -8641=>'ON', -8642=>'ON', -8643=>'ON', -8644=>'ON', -8645=>'ON', -8646=>'ON', -8647=>'ON', -8648=>'ON', -8649=>'ON', -8650=>'ON', -8651=>'ON', -8652=>'ON', -8653=>'ON', -8654=>'ON', -8655=>'ON', -8656=>'ON', -8657=>'ON', -8658=>'ON', -8659=>'ON', -8660=>'ON', -8661=>'ON', -8662=>'ON', -8663=>'ON', -8664=>'ON', -8665=>'ON', -8666=>'ON', -8667=>'ON', -8668=>'ON', -8669=>'ON', -8670=>'ON', -8671=>'ON', -8672=>'ON', -8673=>'ON', -8674=>'ON', -8675=>'ON', -8676=>'ON', -8677=>'ON', -8678=>'ON', -8679=>'ON', -8680=>'ON', -8681=>'ON', -8682=>'ON', -8683=>'ON', -8684=>'ON', -8685=>'ON', -8686=>'ON', -8687=>'ON', -8688=>'ON', -8689=>'ON', -8690=>'ON', -8691=>'ON', -8692=>'ON', -8693=>'ON', -8694=>'ON', -8695=>'ON', -8696=>'ON', -8697=>'ON', -8698=>'ON', -8699=>'ON', -8700=>'ON', -8701=>'ON', -8702=>'ON', -8703=>'ON', -8704=>'ON', -8705=>'ON', -8706=>'ON', -8707=>'ON', -8708=>'ON', -8709=>'ON', -8710=>'ON', -8711=>'ON', -8712=>'ON', -8713=>'ON', -8714=>'ON', -8715=>'ON', -8716=>'ON', -8717=>'ON', -8718=>'ON', -8719=>'ON', -8720=>'ON', -8721=>'ON', -8722=>'ES', -8723=>'ET', -8724=>'ON', -8725=>'ON', -8726=>'ON', -8727=>'ON', -8728=>'ON', -8729=>'ON', -8730=>'ON', -8731=>'ON', -8732=>'ON', -8733=>'ON', -8734=>'ON', -8735=>'ON', -8736=>'ON', -8737=>'ON', -8738=>'ON', -8739=>'ON', -8740=>'ON', -8741=>'ON', -8742=>'ON', -8743=>'ON', -8744=>'ON', -8745=>'ON', -8746=>'ON', -8747=>'ON', -8748=>'ON', -8749=>'ON', -8750=>'ON', -8751=>'ON', -8752=>'ON', -8753=>'ON', -8754=>'ON', -8755=>'ON', -8756=>'ON', -8757=>'ON', -8758=>'ON', -8759=>'ON', -8760=>'ON', -8761=>'ON', -8762=>'ON', -8763=>'ON', -8764=>'ON', -8765=>'ON', -8766=>'ON', -8767=>'ON', -8768=>'ON', -8769=>'ON', -8770=>'ON', -8771=>'ON', -8772=>'ON', -8773=>'ON', -8774=>'ON', -8775=>'ON', -8776=>'ON', -8777=>'ON', -8778=>'ON', -8779=>'ON', -8780=>'ON', -8781=>'ON', -8782=>'ON', -8783=>'ON', -8784=>'ON', -8785=>'ON', -8786=>'ON', -8787=>'ON', -8788=>'ON', -8789=>'ON', -8790=>'ON', -8791=>'ON', -8792=>'ON', -8793=>'ON', -8794=>'ON', -8795=>'ON', -8796=>'ON', -8797=>'ON', -8798=>'ON', -8799=>'ON', -8800=>'ON', -8801=>'ON', -8802=>'ON', -8803=>'ON', -8804=>'ON', -8805=>'ON', -8806=>'ON', -8807=>'ON', -8808=>'ON', -8809=>'ON', -8810=>'ON', -8811=>'ON', -8812=>'ON', -8813=>'ON', -8814=>'ON', -8815=>'ON', -8816=>'ON', -8817=>'ON', -8818=>'ON', -8819=>'ON', -8820=>'ON', -8821=>'ON', -8822=>'ON', -8823=>'ON', -8824=>'ON', -8825=>'ON', -8826=>'ON', -8827=>'ON', -8828=>'ON', -8829=>'ON', -8830=>'ON', -8831=>'ON', -8832=>'ON', -8833=>'ON', -8834=>'ON', -8835=>'ON', -8836=>'ON', -8837=>'ON', -8838=>'ON', -8839=>'ON', -8840=>'ON', -8841=>'ON', -8842=>'ON', -8843=>'ON', -8844=>'ON', -8845=>'ON', -8846=>'ON', -8847=>'ON', -8848=>'ON', -8849=>'ON', -8850=>'ON', -8851=>'ON', -8852=>'ON', -8853=>'ON', -8854=>'ON', -8855=>'ON', -8856=>'ON', -8857=>'ON', -8858=>'ON', -8859=>'ON', -8860=>'ON', -8861=>'ON', -8862=>'ON', -8863=>'ON', -8864=>'ON', -8865=>'ON', -8866=>'ON', -8867=>'ON', -8868=>'ON', -8869=>'ON', -8870=>'ON', -8871=>'ON', -8872=>'ON', -8873=>'ON', -8874=>'ON', -8875=>'ON', -8876=>'ON', -8877=>'ON', -8878=>'ON', -8879=>'ON', -8880=>'ON', -8881=>'ON', -8882=>'ON', -8883=>'ON', -8884=>'ON', -8885=>'ON', -8886=>'ON', -8887=>'ON', -8888=>'ON', -8889=>'ON', -8890=>'ON', -8891=>'ON', -8892=>'ON', -8893=>'ON', -8894=>'ON', -8895=>'ON', -8896=>'ON', -8897=>'ON', -8898=>'ON', -8899=>'ON', -8900=>'ON', -8901=>'ON', -8902=>'ON', -8903=>'ON', -8904=>'ON', -8905=>'ON', -8906=>'ON', -8907=>'ON', -8908=>'ON', -8909=>'ON', -8910=>'ON', -8911=>'ON', -8912=>'ON', -8913=>'ON', -8914=>'ON', -8915=>'ON', -8916=>'ON', -8917=>'ON', -8918=>'ON', -8919=>'ON', -8920=>'ON', -8921=>'ON', -8922=>'ON', -8923=>'ON', -8924=>'ON', -8925=>'ON', -8926=>'ON', -8927=>'ON', -8928=>'ON', -8929=>'ON', -8930=>'ON', -8931=>'ON', -8932=>'ON', -8933=>'ON', -8934=>'ON', -8935=>'ON', -8936=>'ON', -8937=>'ON', -8938=>'ON', -8939=>'ON', -8940=>'ON', -8941=>'ON', -8942=>'ON', -8943=>'ON', -8944=>'ON', -8945=>'ON', -8946=>'ON', -8947=>'ON', -8948=>'ON', -8949=>'ON', -8950=>'ON', -8951=>'ON', -8952=>'ON', -8953=>'ON', -8954=>'ON', -8955=>'ON', -8956=>'ON', -8957=>'ON', -8958=>'ON', -8959=>'ON', -8960=>'ON', -8961=>'ON', -8962=>'ON', -8963=>'ON', -8964=>'ON', -8965=>'ON', -8966=>'ON', -8967=>'ON', -8968=>'ON', -8969=>'ON', -8970=>'ON', -8971=>'ON', -8972=>'ON', -8973=>'ON', -8974=>'ON', -8975=>'ON', -8976=>'ON', -8977=>'ON', -8978=>'ON', -8979=>'ON', -8980=>'ON', -8981=>'ON', -8982=>'ON', -8983=>'ON', -8984=>'ON', -8985=>'ON', -8986=>'ON', -8987=>'ON', -8988=>'ON', -8989=>'ON', -8990=>'ON', -8991=>'ON', -8992=>'ON', -8993=>'ON', -8994=>'ON', -8995=>'ON', -8996=>'ON', -8997=>'ON', -8998=>'ON', -8999=>'ON', -9000=>'ON', -9001=>'ON', -9002=>'ON', -9003=>'ON', -9004=>'ON', -9005=>'ON', -9006=>'ON', -9007=>'ON', -9008=>'ON', -9009=>'ON', -9010=>'ON', -9011=>'ON', -9012=>'ON', -9013=>'ON', -9014=>'L', -9015=>'L', -9016=>'L', -9017=>'L', -9018=>'L', -9019=>'L', -9020=>'L', -9021=>'L', -9022=>'L', -9023=>'L', -9024=>'L', -9025=>'L', -9026=>'L', -9027=>'L', -9028=>'L', -9029=>'L', -9030=>'L', -9031=>'L', -9032=>'L', -9033=>'L', -9034=>'L', -9035=>'L', -9036=>'L', -9037=>'L', -9038=>'L', -9039=>'L', -9040=>'L', -9041=>'L', -9042=>'L', -9043=>'L', -9044=>'L', -9045=>'L', -9046=>'L', -9047=>'L', -9048=>'L', -9049=>'L', -9050=>'L', -9051=>'L', -9052=>'L', -9053=>'L', -9054=>'L', -9055=>'L', -9056=>'L', -9057=>'L', -9058=>'L', -9059=>'L', -9060=>'L', -9061=>'L', -9062=>'L', -9063=>'L', -9064=>'L', -9065=>'L', -9066=>'L', -9067=>'L', -9068=>'L', -9069=>'L', -9070=>'L', -9071=>'L', -9072=>'L', -9073=>'L', -9074=>'L', -9075=>'L', -9076=>'L', -9077=>'L', -9078=>'L', -9079=>'L', -9080=>'L', -9081=>'L', -9082=>'L', -9083=>'ON', -9084=>'ON', -9085=>'ON', -9086=>'ON', -9087=>'ON', -9088=>'ON', -9089=>'ON', -9090=>'ON', -9091=>'ON', -9092=>'ON', -9093=>'ON', -9094=>'ON', -9095=>'ON', -9096=>'ON', -9097=>'ON', -9098=>'ON', -9099=>'ON', -9100=>'ON', -9101=>'ON', -9102=>'ON', -9103=>'ON', -9104=>'ON', -9105=>'ON', -9106=>'ON', -9107=>'ON', -9108=>'ON', -9109=>'L', -9110=>'ON', -9111=>'ON', -9112=>'ON', -9113=>'ON', -9114=>'ON', -9115=>'ON', -9116=>'ON', -9117=>'ON', -9118=>'ON', -9119=>'ON', -9120=>'ON', -9121=>'ON', -9122=>'ON', -9123=>'ON', -9124=>'ON', -9125=>'ON', -9126=>'ON', -9127=>'ON', -9128=>'ON', -9129=>'ON', -9130=>'ON', -9131=>'ON', -9132=>'ON', -9133=>'ON', -9134=>'ON', -9135=>'ON', -9136=>'ON', -9137=>'ON', -9138=>'ON', -9139=>'ON', -9140=>'ON', -9141=>'ON', -9142=>'ON', -9143=>'ON', -9144=>'ON', -9145=>'ON', -9146=>'ON', -9147=>'ON', -9148=>'ON', -9149=>'ON', -9150=>'ON', -9151=>'ON', -9152=>'ON', -9153=>'ON', -9154=>'ON', -9155=>'ON', -9156=>'ON', -9157=>'ON', -9158=>'ON', -9159=>'ON', -9160=>'ON', -9161=>'ON', -9162=>'ON', -9163=>'ON', -9164=>'ON', -9165=>'ON', -9166=>'ON', -9167=>'ON', -9168=>'ON', -9169=>'ON', -9170=>'ON', -9171=>'ON', -9172=>'ON', -9173=>'ON', -9174=>'ON', -9175=>'ON', -9176=>'ON', -9177=>'ON', -9178=>'ON', -9179=>'ON', -9180=>'ON', -9181=>'ON', -9182=>'ON', -9183=>'ON', -9184=>'ON', -9185=>'ON', -9186=>'ON', -9187=>'ON', -9188=>'ON', -9189=>'ON', -9190=>'ON', -9191=>'ON', -9216=>'ON', -9217=>'ON', -9218=>'ON', -9219=>'ON', -9220=>'ON', -9221=>'ON', -9222=>'ON', -9223=>'ON', -9224=>'ON', -9225=>'ON', -9226=>'ON', -9227=>'ON', -9228=>'ON', -9229=>'ON', -9230=>'ON', -9231=>'ON', -9232=>'ON', -9233=>'ON', -9234=>'ON', -9235=>'ON', -9236=>'ON', -9237=>'ON', -9238=>'ON', -9239=>'ON', -9240=>'ON', -9241=>'ON', -9242=>'ON', -9243=>'ON', -9244=>'ON', -9245=>'ON', -9246=>'ON', -9247=>'ON', -9248=>'ON', -9249=>'ON', -9250=>'ON', -9251=>'ON', -9252=>'ON', -9253=>'ON', -9254=>'ON', -9280=>'ON', -9281=>'ON', -9282=>'ON', -9283=>'ON', -9284=>'ON', -9285=>'ON', -9286=>'ON', -9287=>'ON', -9288=>'ON', -9289=>'ON', -9290=>'ON', -9312=>'ON', -9313=>'ON', -9314=>'ON', -9315=>'ON', -9316=>'ON', -9317=>'ON', -9318=>'ON', -9319=>'ON', -9320=>'ON', -9321=>'ON', -9322=>'ON', -9323=>'ON', -9324=>'ON', -9325=>'ON', -9326=>'ON', -9327=>'ON', -9328=>'ON', -9329=>'ON', -9330=>'ON', -9331=>'ON', -9332=>'ON', -9333=>'ON', -9334=>'ON', -9335=>'ON', -9336=>'ON', -9337=>'ON', -9338=>'ON', -9339=>'ON', -9340=>'ON', -9341=>'ON', -9342=>'ON', -9343=>'ON', -9344=>'ON', -9345=>'ON', -9346=>'ON', -9347=>'ON', -9348=>'ON', -9349=>'ON', -9350=>'ON', -9351=>'ON', -9352=>'EN', -9353=>'EN', -9354=>'EN', -9355=>'EN', -9356=>'EN', -9357=>'EN', -9358=>'EN', -9359=>'EN', -9360=>'EN', -9361=>'EN', -9362=>'EN', -9363=>'EN', -9364=>'EN', -9365=>'EN', -9366=>'EN', -9367=>'EN', -9368=>'EN', -9369=>'EN', -9370=>'EN', -9371=>'EN', -9372=>'L', -9373=>'L', -9374=>'L', -9375=>'L', -9376=>'L', -9377=>'L', -9378=>'L', -9379=>'L', -9380=>'L', -9381=>'L', -9382=>'L', -9383=>'L', -9384=>'L', -9385=>'L', -9386=>'L', -9387=>'L', -9388=>'L', -9389=>'L', -9390=>'L', -9391=>'L', -9392=>'L', -9393=>'L', -9394=>'L', -9395=>'L', -9396=>'L', -9397=>'L', -9398=>'L', -9399=>'L', -9400=>'L', -9401=>'L', -9402=>'L', -9403=>'L', -9404=>'L', -9405=>'L', -9406=>'L', -9407=>'L', -9408=>'L', -9409=>'L', -9410=>'L', -9411=>'L', -9412=>'L', -9413=>'L', -9414=>'L', -9415=>'L', -9416=>'L', -9417=>'L', -9418=>'L', -9419=>'L', -9420=>'L', -9421=>'L', -9422=>'L', -9423=>'L', -9424=>'L', -9425=>'L', -9426=>'L', -9427=>'L', -9428=>'L', -9429=>'L', -9430=>'L', -9431=>'L', -9432=>'L', -9433=>'L', -9434=>'L', -9435=>'L', -9436=>'L', -9437=>'L', -9438=>'L', -9439=>'L', -9440=>'L', -9441=>'L', -9442=>'L', -9443=>'L', -9444=>'L', -9445=>'L', -9446=>'L', -9447=>'L', -9448=>'L', -9449=>'L', -9450=>'ON', -9451=>'ON', -9452=>'ON', -9453=>'ON', -9454=>'ON', -9455=>'ON', -9456=>'ON', -9457=>'ON', -9458=>'ON', -9459=>'ON', -9460=>'ON', -9461=>'ON', -9462=>'ON', -9463=>'ON', -9464=>'ON', -9465=>'ON', -9466=>'ON', -9467=>'ON', -9468=>'ON', -9469=>'ON', -9470=>'ON', -9471=>'ON', -9472=>'ON', -9473=>'ON', -9474=>'ON', -9475=>'ON', -9476=>'ON', -9477=>'ON', -9478=>'ON', -9479=>'ON', -9480=>'ON', -9481=>'ON', -9482=>'ON', -9483=>'ON', -9484=>'ON', -9485=>'ON', -9486=>'ON', -9487=>'ON', -9488=>'ON', -9489=>'ON', -9490=>'ON', -9491=>'ON', -9492=>'ON', -9493=>'ON', -9494=>'ON', -9495=>'ON', -9496=>'ON', -9497=>'ON', -9498=>'ON', -9499=>'ON', -9500=>'ON', -9501=>'ON', -9502=>'ON', -9503=>'ON', -9504=>'ON', -9505=>'ON', -9506=>'ON', -9507=>'ON', -9508=>'ON', -9509=>'ON', -9510=>'ON', -9511=>'ON', -9512=>'ON', -9513=>'ON', -9514=>'ON', -9515=>'ON', -9516=>'ON', -9517=>'ON', -9518=>'ON', -9519=>'ON', -9520=>'ON', -9521=>'ON', -9522=>'ON', -9523=>'ON', -9524=>'ON', -9525=>'ON', -9526=>'ON', -9527=>'ON', -9528=>'ON', -9529=>'ON', -9530=>'ON', -9531=>'ON', -9532=>'ON', -9533=>'ON', -9534=>'ON', -9535=>'ON', -9536=>'ON', -9537=>'ON', -9538=>'ON', -9539=>'ON', -9540=>'ON', -9541=>'ON', -9542=>'ON', -9543=>'ON', -9544=>'ON', -9545=>'ON', -9546=>'ON', -9547=>'ON', -9548=>'ON', -9549=>'ON', -9550=>'ON', -9551=>'ON', -9552=>'ON', -9553=>'ON', -9554=>'ON', -9555=>'ON', -9556=>'ON', -9557=>'ON', -9558=>'ON', -9559=>'ON', -9560=>'ON', -9561=>'ON', -9562=>'ON', -9563=>'ON', -9564=>'ON', -9565=>'ON', -9566=>'ON', -9567=>'ON', -9568=>'ON', -9569=>'ON', -9570=>'ON', -9571=>'ON', -9572=>'ON', -9573=>'ON', -9574=>'ON', -9575=>'ON', -9576=>'ON', -9577=>'ON', -9578=>'ON', -9579=>'ON', -9580=>'ON', -9581=>'ON', -9582=>'ON', -9583=>'ON', -9584=>'ON', -9585=>'ON', -9586=>'ON', -9587=>'ON', -9588=>'ON', -9589=>'ON', -9590=>'ON', -9591=>'ON', -9592=>'ON', -9593=>'ON', -9594=>'ON', -9595=>'ON', -9596=>'ON', -9597=>'ON', -9598=>'ON', -9599=>'ON', -9600=>'ON', -9601=>'ON', -9602=>'ON', -9603=>'ON', -9604=>'ON', -9605=>'ON', -9606=>'ON', -9607=>'ON', -9608=>'ON', -9609=>'ON', -9610=>'ON', -9611=>'ON', -9612=>'ON', -9613=>'ON', -9614=>'ON', -9615=>'ON', -9616=>'ON', -9617=>'ON', -9618=>'ON', -9619=>'ON', -9620=>'ON', -9621=>'ON', -9622=>'ON', -9623=>'ON', -9624=>'ON', -9625=>'ON', -9626=>'ON', -9627=>'ON', -9628=>'ON', -9629=>'ON', -9630=>'ON', -9631=>'ON', -9632=>'ON', -9633=>'ON', -9634=>'ON', -9635=>'ON', -9636=>'ON', -9637=>'ON', -9638=>'ON', -9639=>'ON', -9640=>'ON', -9641=>'ON', -9642=>'ON', -9643=>'ON', -9644=>'ON', -9645=>'ON', -9646=>'ON', -9647=>'ON', -9648=>'ON', -9649=>'ON', -9650=>'ON', -9651=>'ON', -9652=>'ON', -9653=>'ON', -9654=>'ON', -9655=>'ON', -9656=>'ON', -9657=>'ON', -9658=>'ON', -9659=>'ON', -9660=>'ON', -9661=>'ON', -9662=>'ON', -9663=>'ON', -9664=>'ON', -9665=>'ON', -9666=>'ON', -9667=>'ON', -9668=>'ON', -9669=>'ON', -9670=>'ON', -9671=>'ON', -9672=>'ON', -9673=>'ON', -9674=>'ON', -9675=>'ON', -9676=>'ON', -9677=>'ON', -9678=>'ON', -9679=>'ON', -9680=>'ON', -9681=>'ON', -9682=>'ON', -9683=>'ON', -9684=>'ON', -9685=>'ON', -9686=>'ON', -9687=>'ON', -9688=>'ON', -9689=>'ON', -9690=>'ON', -9691=>'ON', -9692=>'ON', -9693=>'ON', -9694=>'ON', -9695=>'ON', -9696=>'ON', -9697=>'ON', -9698=>'ON', -9699=>'ON', -9700=>'ON', -9701=>'ON', -9702=>'ON', -9703=>'ON', -9704=>'ON', -9705=>'ON', -9706=>'ON', -9707=>'ON', -9708=>'ON', -9709=>'ON', -9710=>'ON', -9711=>'ON', -9712=>'ON', -9713=>'ON', -9714=>'ON', -9715=>'ON', -9716=>'ON', -9717=>'ON', -9718=>'ON', -9719=>'ON', -9720=>'ON', -9721=>'ON', -9722=>'ON', -9723=>'ON', -9724=>'ON', -9725=>'ON', -9726=>'ON', -9727=>'ON', -9728=>'ON', -9729=>'ON', -9730=>'ON', -9731=>'ON', -9732=>'ON', -9733=>'ON', -9734=>'ON', -9735=>'ON', -9736=>'ON', -9737=>'ON', -9738=>'ON', -9739=>'ON', -9740=>'ON', -9741=>'ON', -9742=>'ON', -9743=>'ON', -9744=>'ON', -9745=>'ON', -9746=>'ON', -9747=>'ON', -9748=>'ON', -9749=>'ON', -9750=>'ON', -9751=>'ON', -9752=>'ON', -9753=>'ON', -9754=>'ON', -9755=>'ON', -9756=>'ON', -9757=>'ON', -9758=>'ON', -9759=>'ON', -9760=>'ON', -9761=>'ON', -9762=>'ON', -9763=>'ON', -9764=>'ON', -9765=>'ON', -9766=>'ON', -9767=>'ON', -9768=>'ON', -9769=>'ON', -9770=>'ON', -9771=>'ON', -9772=>'ON', -9773=>'ON', -9774=>'ON', -9775=>'ON', -9776=>'ON', -9777=>'ON', -9778=>'ON', -9779=>'ON', -9780=>'ON', -9781=>'ON', -9782=>'ON', -9783=>'ON', -9784=>'ON', -9785=>'ON', -9786=>'ON', -9787=>'ON', -9788=>'ON', -9789=>'ON', -9790=>'ON', -9791=>'ON', -9792=>'ON', -9793=>'ON', -9794=>'ON', -9795=>'ON', -9796=>'ON', -9797=>'ON', -9798=>'ON', -9799=>'ON', -9800=>'ON', -9801=>'ON', -9802=>'ON', -9803=>'ON', -9804=>'ON', -9805=>'ON', -9806=>'ON', -9807=>'ON', -9808=>'ON', -9809=>'ON', -9810=>'ON', -9811=>'ON', -9812=>'ON', -9813=>'ON', -9814=>'ON', -9815=>'ON', -9816=>'ON', -9817=>'ON', -9818=>'ON', -9819=>'ON', -9820=>'ON', -9821=>'ON', -9822=>'ON', -9823=>'ON', -9824=>'ON', -9825=>'ON', -9826=>'ON', -9827=>'ON', -9828=>'ON', -9829=>'ON', -9830=>'ON', -9831=>'ON', -9832=>'ON', -9833=>'ON', -9834=>'ON', -9835=>'ON', -9836=>'ON', -9837=>'ON', -9838=>'ON', -9839=>'ON', -9840=>'ON', -9841=>'ON', -9842=>'ON', -9843=>'ON', -9844=>'ON', -9845=>'ON', -9846=>'ON', -9847=>'ON', -9848=>'ON', -9849=>'ON', -9850=>'ON', -9851=>'ON', -9852=>'ON', -9853=>'ON', -9854=>'ON', -9855=>'ON', -9856=>'ON', -9857=>'ON', -9858=>'ON', -9859=>'ON', -9860=>'ON', -9861=>'ON', -9862=>'ON', -9863=>'ON', -9864=>'ON', -9865=>'ON', -9866=>'ON', -9867=>'ON', -9868=>'ON', -9869=>'ON', -9870=>'ON', -9871=>'ON', -9872=>'ON', -9873=>'ON', -9874=>'ON', -9875=>'ON', -9876=>'ON', -9877=>'ON', -9878=>'ON', -9879=>'ON', -9880=>'ON', -9881=>'ON', -9882=>'ON', -9883=>'ON', -9884=>'ON', -9888=>'ON', -9889=>'ON', -9890=>'ON', -9891=>'ON', -9892=>'ON', -9893=>'ON', -9894=>'ON', -9895=>'ON', -9896=>'ON', -9897=>'ON', -9898=>'ON', -9899=>'ON', -9900=>'L', -9901=>'ON', -9902=>'ON', -9903=>'ON', -9904=>'ON', -9905=>'ON', -9906=>'ON', -9985=>'ON', -9986=>'ON', -9987=>'ON', -9988=>'ON', -9990=>'ON', -9991=>'ON', -9992=>'ON', -9993=>'ON', -9996=>'ON', -9997=>'ON', -9998=>'ON', -9999=>'ON', -10000=>'ON', -10001=>'ON', -10002=>'ON', -10003=>'ON', -10004=>'ON', -10005=>'ON', -10006=>'ON', -10007=>'ON', -10008=>'ON', -10009=>'ON', -10010=>'ON', -10011=>'ON', -10012=>'ON', -10013=>'ON', -10014=>'ON', -10015=>'ON', -10016=>'ON', -10017=>'ON', -10018=>'ON', -10019=>'ON', -10020=>'ON', -10021=>'ON', -10022=>'ON', -10023=>'ON', -10025=>'ON', -10026=>'ON', -10027=>'ON', -10028=>'ON', -10029=>'ON', -10030=>'ON', -10031=>'ON', -10032=>'ON', -10033=>'ON', -10034=>'ON', -10035=>'ON', -10036=>'ON', -10037=>'ON', -10038=>'ON', -10039=>'ON', -10040=>'ON', -10041=>'ON', -10042=>'ON', -10043=>'ON', -10044=>'ON', -10045=>'ON', -10046=>'ON', -10047=>'ON', -10048=>'ON', -10049=>'ON', -10050=>'ON', -10051=>'ON', -10052=>'ON', -10053=>'ON', -10054=>'ON', -10055=>'ON', -10056=>'ON', -10057=>'ON', -10058=>'ON', -10059=>'ON', -10061=>'ON', -10063=>'ON', -10064=>'ON', -10065=>'ON', -10066=>'ON', -10070=>'ON', -10072=>'ON', -10073=>'ON', -10074=>'ON', -10075=>'ON', -10076=>'ON', -10077=>'ON', -10078=>'ON', -10081=>'ON', -10082=>'ON', -10083=>'ON', -10084=>'ON', -10085=>'ON', -10086=>'ON', -10087=>'ON', -10088=>'ON', -10089=>'ON', -10090=>'ON', -10091=>'ON', -10092=>'ON', -10093=>'ON', -10094=>'ON', -10095=>'ON', -10096=>'ON', -10097=>'ON', -10098=>'ON', -10099=>'ON', -10100=>'ON', -10101=>'ON', -10102=>'ON', -10103=>'ON', -10104=>'ON', -10105=>'ON', -10106=>'ON', -10107=>'ON', -10108=>'ON', -10109=>'ON', -10110=>'ON', -10111=>'ON', -10112=>'ON', -10113=>'ON', -10114=>'ON', -10115=>'ON', -10116=>'ON', -10117=>'ON', -10118=>'ON', -10119=>'ON', -10120=>'ON', -10121=>'ON', -10122=>'ON', -10123=>'ON', -10124=>'ON', -10125=>'ON', -10126=>'ON', -10127=>'ON', -10128=>'ON', -10129=>'ON', -10130=>'ON', -10131=>'ON', -10132=>'ON', -10136=>'ON', -10137=>'ON', -10138=>'ON', -10139=>'ON', -10140=>'ON', -10141=>'ON', -10142=>'ON', -10143=>'ON', -10144=>'ON', -10145=>'ON', -10146=>'ON', -10147=>'ON', -10148=>'ON', -10149=>'ON', -10150=>'ON', -10151=>'ON', -10152=>'ON', -10153=>'ON', -10154=>'ON', -10155=>'ON', -10156=>'ON', -10157=>'ON', -10158=>'ON', -10159=>'ON', -10161=>'ON', -10162=>'ON', -10163=>'ON', -10164=>'ON', -10165=>'ON', -10166=>'ON', -10167=>'ON', -10168=>'ON', -10169=>'ON', -10170=>'ON', -10171=>'ON', -10172=>'ON', -10173=>'ON', -10174=>'ON', -10176=>'ON', -10177=>'ON', -10178=>'ON', -10179=>'ON', -10180=>'ON', -10181=>'ON', -10182=>'ON', -10183=>'ON', -10184=>'ON', -10185=>'ON', -10186=>'ON', -10192=>'ON', -10193=>'ON', -10194=>'ON', -10195=>'ON', -10196=>'ON', -10197=>'ON', -10198=>'ON', -10199=>'ON', -10200=>'ON', -10201=>'ON', -10202=>'ON', -10203=>'ON', -10204=>'ON', -10205=>'ON', -10206=>'ON', -10207=>'ON', -10208=>'ON', -10209=>'ON', -10210=>'ON', -10211=>'ON', -10212=>'ON', -10213=>'ON', -10214=>'ON', -10215=>'ON', -10216=>'ON', -10217=>'ON', -10218=>'ON', -10219=>'ON', -10224=>'ON', -10225=>'ON', -10226=>'ON', -10227=>'ON', -10228=>'ON', -10229=>'ON', -10230=>'ON', -10231=>'ON', -10232=>'ON', -10233=>'ON', -10234=>'ON', -10235=>'ON', -10236=>'ON', -10237=>'ON', -10238=>'ON', -10239=>'ON', -10240=>'L', -10241=>'L', -10242=>'L', -10243=>'L', -10244=>'L', -10245=>'L', -10246=>'L', -10247=>'L', -10248=>'L', -10249=>'L', -10250=>'L', -10251=>'L', -10252=>'L', -10253=>'L', -10254=>'L', -10255=>'L', -10256=>'L', -10257=>'L', -10258=>'L', -10259=>'L', -10260=>'L', -10261=>'L', -10262=>'L', -10263=>'L', -10264=>'L', -10265=>'L', -10266=>'L', -10267=>'L', -10268=>'L', -10269=>'L', -10270=>'L', -10271=>'L', -10272=>'L', -10273=>'L', -10274=>'L', -10275=>'L', -10276=>'L', -10277=>'L', -10278=>'L', -10279=>'L', -10280=>'L', -10281=>'L', -10282=>'L', -10283=>'L', -10284=>'L', -10285=>'L', -10286=>'L', -10287=>'L', -10288=>'L', -10289=>'L', -10290=>'L', -10291=>'L', -10292=>'L', -10293=>'L', -10294=>'L', -10295=>'L', -10296=>'L', -10297=>'L', -10298=>'L', -10299=>'L', -10300=>'L', -10301=>'L', -10302=>'L', -10303=>'L', -10304=>'L', -10305=>'L', -10306=>'L', -10307=>'L', -10308=>'L', -10309=>'L', -10310=>'L', -10311=>'L', -10312=>'L', -10313=>'L', -10314=>'L', -10315=>'L', -10316=>'L', -10317=>'L', -10318=>'L', -10319=>'L', -10320=>'L', -10321=>'L', -10322=>'L', -10323=>'L', -10324=>'L', -10325=>'L', -10326=>'L', -10327=>'L', -10328=>'L', -10329=>'L', -10330=>'L', -10331=>'L', -10332=>'L', -10333=>'L', -10334=>'L', -10335=>'L', -10336=>'L', -10337=>'L', -10338=>'L', -10339=>'L', -10340=>'L', -10341=>'L', -10342=>'L', -10343=>'L', -10344=>'L', -10345=>'L', -10346=>'L', -10347=>'L', -10348=>'L', -10349=>'L', -10350=>'L', -10351=>'L', -10352=>'L', -10353=>'L', -10354=>'L', -10355=>'L', -10356=>'L', -10357=>'L', -10358=>'L', -10359=>'L', -10360=>'L', -10361=>'L', -10362=>'L', -10363=>'L', -10364=>'L', -10365=>'L', -10366=>'L', -10367=>'L', -10368=>'L', -10369=>'L', -10370=>'L', -10371=>'L', -10372=>'L', -10373=>'L', -10374=>'L', -10375=>'L', -10376=>'L', -10377=>'L', -10378=>'L', -10379=>'L', -10380=>'L', -10381=>'L', -10382=>'L', -10383=>'L', -10384=>'L', -10385=>'L', -10386=>'L', -10387=>'L', -10388=>'L', -10389=>'L', -10390=>'L', -10391=>'L', -10392=>'L', -10393=>'L', -10394=>'L', -10395=>'L', -10396=>'L', -10397=>'L', -10398=>'L', -10399=>'L', -10400=>'L', -10401=>'L', -10402=>'L', -10403=>'L', -10404=>'L', -10405=>'L', -10406=>'L', -10407=>'L', -10408=>'L', -10409=>'L', -10410=>'L', -10411=>'L', -10412=>'L', -10413=>'L', -10414=>'L', -10415=>'L', -10416=>'L', -10417=>'L', -10418=>'L', -10419=>'L', -10420=>'L', -10421=>'L', -10422=>'L', -10423=>'L', -10424=>'L', -10425=>'L', -10426=>'L', -10427=>'L', -10428=>'L', -10429=>'L', -10430=>'L', -10431=>'L', -10432=>'L', -10433=>'L', -10434=>'L', -10435=>'L', -10436=>'L', -10437=>'L', -10438=>'L', -10439=>'L', -10440=>'L', -10441=>'L', -10442=>'L', -10443=>'L', -10444=>'L', -10445=>'L', -10446=>'L', -10447=>'L', -10448=>'L', -10449=>'L', -10450=>'L', -10451=>'L', -10452=>'L', -10453=>'L', -10454=>'L', -10455=>'L', -10456=>'L', -10457=>'L', -10458=>'L', -10459=>'L', -10460=>'L', -10461=>'L', -10462=>'L', -10463=>'L', -10464=>'L', -10465=>'L', -10466=>'L', -10467=>'L', -10468=>'L', -10469=>'L', -10470=>'L', -10471=>'L', -10472=>'L', -10473=>'L', -10474=>'L', -10475=>'L', -10476=>'L', -10477=>'L', -10478=>'L', -10479=>'L', -10480=>'L', -10481=>'L', -10482=>'L', -10483=>'L', -10484=>'L', -10485=>'L', -10486=>'L', -10487=>'L', -10488=>'L', -10489=>'L', -10490=>'L', -10491=>'L', -10492=>'L', -10493=>'L', -10494=>'L', -10495=>'L', -10496=>'ON', -10497=>'ON', -10498=>'ON', -10499=>'ON', -10500=>'ON', -10501=>'ON', -10502=>'ON', -10503=>'ON', -10504=>'ON', -10505=>'ON', -10506=>'ON', -10507=>'ON', -10508=>'ON', -10509=>'ON', -10510=>'ON', -10511=>'ON', -10512=>'ON', -10513=>'ON', -10514=>'ON', -10515=>'ON', -10516=>'ON', -10517=>'ON', -10518=>'ON', -10519=>'ON', -10520=>'ON', -10521=>'ON', -10522=>'ON', -10523=>'ON', -10524=>'ON', -10525=>'ON', -10526=>'ON', -10527=>'ON', -10528=>'ON', -10529=>'ON', -10530=>'ON', -10531=>'ON', -10532=>'ON', -10533=>'ON', -10534=>'ON', -10535=>'ON', -10536=>'ON', -10537=>'ON', -10538=>'ON', -10539=>'ON', -10540=>'ON', -10541=>'ON', -10542=>'ON', -10543=>'ON', -10544=>'ON', -10545=>'ON', -10546=>'ON', -10547=>'ON', -10548=>'ON', -10549=>'ON', -10550=>'ON', -10551=>'ON', -10552=>'ON', -10553=>'ON', -10554=>'ON', -10555=>'ON', -10556=>'ON', -10557=>'ON', -10558=>'ON', -10559=>'ON', -10560=>'ON', -10561=>'ON', -10562=>'ON', -10563=>'ON', -10564=>'ON', -10565=>'ON', -10566=>'ON', -10567=>'ON', -10568=>'ON', -10569=>'ON', -10570=>'ON', -10571=>'ON', -10572=>'ON', -10573=>'ON', -10574=>'ON', -10575=>'ON', -10576=>'ON', -10577=>'ON', -10578=>'ON', -10579=>'ON', -10580=>'ON', -10581=>'ON', -10582=>'ON', -10583=>'ON', -10584=>'ON', -10585=>'ON', -10586=>'ON', -10587=>'ON', -10588=>'ON', -10589=>'ON', -10590=>'ON', -10591=>'ON', -10592=>'ON', -10593=>'ON', -10594=>'ON', -10595=>'ON', -10596=>'ON', -10597=>'ON', -10598=>'ON', -10599=>'ON', -10600=>'ON', -10601=>'ON', -10602=>'ON', -10603=>'ON', -10604=>'ON', -10605=>'ON', -10606=>'ON', -10607=>'ON', -10608=>'ON', -10609=>'ON', -10610=>'ON', -10611=>'ON', -10612=>'ON', -10613=>'ON', -10614=>'ON', -10615=>'ON', -10616=>'ON', -10617=>'ON', -10618=>'ON', -10619=>'ON', -10620=>'ON', -10621=>'ON', -10622=>'ON', -10623=>'ON', -10624=>'ON', -10625=>'ON', -10626=>'ON', -10627=>'ON', -10628=>'ON', -10629=>'ON', -10630=>'ON', -10631=>'ON', -10632=>'ON', -10633=>'ON', -10634=>'ON', -10635=>'ON', -10636=>'ON', -10637=>'ON', -10638=>'ON', -10639=>'ON', -10640=>'ON', -10641=>'ON', -10642=>'ON', -10643=>'ON', -10644=>'ON', -10645=>'ON', -10646=>'ON', -10647=>'ON', -10648=>'ON', -10649=>'ON', -10650=>'ON', -10651=>'ON', -10652=>'ON', -10653=>'ON', -10654=>'ON', -10655=>'ON', -10656=>'ON', -10657=>'ON', -10658=>'ON', -10659=>'ON', -10660=>'ON', -10661=>'ON', -10662=>'ON', -10663=>'ON', -10664=>'ON', -10665=>'ON', -10666=>'ON', -10667=>'ON', -10668=>'ON', -10669=>'ON', -10670=>'ON', -10671=>'ON', -10672=>'ON', -10673=>'ON', -10674=>'ON', -10675=>'ON', -10676=>'ON', -10677=>'ON', -10678=>'ON', -10679=>'ON', -10680=>'ON', -10681=>'ON', -10682=>'ON', -10683=>'ON', -10684=>'ON', -10685=>'ON', -10686=>'ON', -10687=>'ON', -10688=>'ON', -10689=>'ON', -10690=>'ON', -10691=>'ON', -10692=>'ON', -10693=>'ON', -10694=>'ON', -10695=>'ON', -10696=>'ON', -10697=>'ON', -10698=>'ON', -10699=>'ON', -10700=>'ON', -10701=>'ON', -10702=>'ON', -10703=>'ON', -10704=>'ON', -10705=>'ON', -10706=>'ON', -10707=>'ON', -10708=>'ON', -10709=>'ON', -10710=>'ON', -10711=>'ON', -10712=>'ON', -10713=>'ON', -10714=>'ON', -10715=>'ON', -10716=>'ON', -10717=>'ON', -10718=>'ON', -10719=>'ON', -10720=>'ON', -10721=>'ON', -10722=>'ON', -10723=>'ON', -10724=>'ON', -10725=>'ON', -10726=>'ON', -10727=>'ON', -10728=>'ON', -10729=>'ON', -10730=>'ON', -10731=>'ON', -10732=>'ON', -10733=>'ON', -10734=>'ON', -10735=>'ON', -10736=>'ON', -10737=>'ON', -10738=>'ON', -10739=>'ON', -10740=>'ON', -10741=>'ON', -10742=>'ON', -10743=>'ON', -10744=>'ON', -10745=>'ON', -10746=>'ON', -10747=>'ON', -10748=>'ON', -10749=>'ON', -10750=>'ON', -10751=>'ON', -10752=>'ON', -10753=>'ON', -10754=>'ON', -10755=>'ON', -10756=>'ON', -10757=>'ON', -10758=>'ON', -10759=>'ON', -10760=>'ON', -10761=>'ON', -10762=>'ON', -10763=>'ON', -10764=>'ON', -10765=>'ON', -10766=>'ON', -10767=>'ON', -10768=>'ON', -10769=>'ON', -10770=>'ON', -10771=>'ON', -10772=>'ON', -10773=>'ON', -10774=>'ON', -10775=>'ON', -10776=>'ON', -10777=>'ON', -10778=>'ON', -10779=>'ON', -10780=>'ON', -10781=>'ON', -10782=>'ON', -10783=>'ON', -10784=>'ON', -10785=>'ON', -10786=>'ON', -10787=>'ON', -10788=>'ON', -10789=>'ON', -10790=>'ON', -10791=>'ON', -10792=>'ON', -10793=>'ON', -10794=>'ON', -10795=>'ON', -10796=>'ON', -10797=>'ON', -10798=>'ON', -10799=>'ON', -10800=>'ON', -10801=>'ON', -10802=>'ON', -10803=>'ON', -10804=>'ON', -10805=>'ON', -10806=>'ON', -10807=>'ON', -10808=>'ON', -10809=>'ON', -10810=>'ON', -10811=>'ON', -10812=>'ON', -10813=>'ON', -10814=>'ON', -10815=>'ON', -10816=>'ON', -10817=>'ON', -10818=>'ON', -10819=>'ON', -10820=>'ON', -10821=>'ON', -10822=>'ON', -10823=>'ON', -10824=>'ON', -10825=>'ON', -10826=>'ON', -10827=>'ON', -10828=>'ON', -10829=>'ON', -10830=>'ON', -10831=>'ON', -10832=>'ON', -10833=>'ON', -10834=>'ON', -10835=>'ON', -10836=>'ON', -10837=>'ON', -10838=>'ON', -10839=>'ON', -10840=>'ON', -10841=>'ON', -10842=>'ON', -10843=>'ON', -10844=>'ON', -10845=>'ON', -10846=>'ON', -10847=>'ON', -10848=>'ON', -10849=>'ON', -10850=>'ON', -10851=>'ON', -10852=>'ON', -10853=>'ON', -10854=>'ON', -10855=>'ON', -10856=>'ON', -10857=>'ON', -10858=>'ON', -10859=>'ON', -10860=>'ON', -10861=>'ON', -10862=>'ON', -10863=>'ON', -10864=>'ON', -10865=>'ON', -10866=>'ON', -10867=>'ON', -10868=>'ON', -10869=>'ON', -10870=>'ON', -10871=>'ON', -10872=>'ON', -10873=>'ON', -10874=>'ON', -10875=>'ON', -10876=>'ON', -10877=>'ON', -10878=>'ON', -10879=>'ON', -10880=>'ON', -10881=>'ON', -10882=>'ON', -10883=>'ON', -10884=>'ON', -10885=>'ON', -10886=>'ON', -10887=>'ON', -10888=>'ON', -10889=>'ON', -10890=>'ON', -10891=>'ON', -10892=>'ON', -10893=>'ON', -10894=>'ON', -10895=>'ON', -10896=>'ON', -10897=>'ON', -10898=>'ON', -10899=>'ON', -10900=>'ON', -10901=>'ON', -10902=>'ON', -10903=>'ON', -10904=>'ON', -10905=>'ON', -10906=>'ON', -10907=>'ON', -10908=>'ON', -10909=>'ON', -10910=>'ON', -10911=>'ON', -10912=>'ON', -10913=>'ON', -10914=>'ON', -10915=>'ON', -10916=>'ON', -10917=>'ON', -10918=>'ON', -10919=>'ON', -10920=>'ON', -10921=>'ON', -10922=>'ON', -10923=>'ON', -10924=>'ON', -10925=>'ON', -10926=>'ON', -10927=>'ON', -10928=>'ON', -10929=>'ON', -10930=>'ON', -10931=>'ON', -10932=>'ON', -10933=>'ON', -10934=>'ON', -10935=>'ON', -10936=>'ON', -10937=>'ON', -10938=>'ON', -10939=>'ON', -10940=>'ON', -10941=>'ON', -10942=>'ON', -10943=>'ON', -10944=>'ON', -10945=>'ON', -10946=>'ON', -10947=>'ON', -10948=>'ON', -10949=>'ON', -10950=>'ON', -10951=>'ON', -10952=>'ON', -10953=>'ON', -10954=>'ON', -10955=>'ON', -10956=>'ON', -10957=>'ON', -10958=>'ON', -10959=>'ON', -10960=>'ON', -10961=>'ON', -10962=>'ON', -10963=>'ON', -10964=>'ON', -10965=>'ON', -10966=>'ON', -10967=>'ON', -10968=>'ON', -10969=>'ON', -10970=>'ON', -10971=>'ON', -10972=>'ON', -10973=>'ON', -10974=>'ON', -10975=>'ON', -10976=>'ON', -10977=>'ON', -10978=>'ON', -10979=>'ON', -10980=>'ON', -10981=>'ON', -10982=>'ON', -10983=>'ON', -10984=>'ON', -10985=>'ON', -10986=>'ON', -10987=>'ON', -10988=>'ON', -10989=>'ON', -10990=>'ON', -10991=>'ON', -10992=>'ON', -10993=>'ON', -10994=>'ON', -10995=>'ON', -10996=>'ON', -10997=>'ON', -10998=>'ON', -10999=>'ON', -11000=>'ON', -11001=>'ON', -11002=>'ON', -11003=>'ON', -11004=>'ON', -11005=>'ON', -11006=>'ON', -11007=>'ON', -11008=>'ON', -11009=>'ON', -11010=>'ON', -11011=>'ON', -11012=>'ON', -11013=>'ON', -11014=>'ON', -11015=>'ON', -11016=>'ON', -11017=>'ON', -11018=>'ON', -11019=>'ON', -11020=>'ON', -11021=>'ON', -11022=>'ON', -11023=>'ON', -11024=>'ON', -11025=>'ON', -11026=>'ON', -11027=>'ON', -11028=>'ON', -11029=>'ON', -11030=>'ON', -11031=>'ON', -11032=>'ON', -11033=>'ON', -11034=>'ON', -11040=>'ON', -11041=>'ON', -11042=>'ON', -11043=>'ON', -11264=>'L', -11265=>'L', -11266=>'L', -11267=>'L', -11268=>'L', -11269=>'L', -11270=>'L', -11271=>'L', -11272=>'L', -11273=>'L', -11274=>'L', -11275=>'L', -11276=>'L', -11277=>'L', -11278=>'L', -11279=>'L', -11280=>'L', -11281=>'L', -11282=>'L', -11283=>'L', -11284=>'L', -11285=>'L', -11286=>'L', -11287=>'L', -11288=>'L', -11289=>'L', -11290=>'L', -11291=>'L', -11292=>'L', -11293=>'L', -11294=>'L', -11295=>'L', -11296=>'L', -11297=>'L', -11298=>'L', -11299=>'L', -11300=>'L', -11301=>'L', -11302=>'L', -11303=>'L', -11304=>'L', -11305=>'L', -11306=>'L', -11307=>'L', -11308=>'L', -11309=>'L', -11310=>'L', -11312=>'L', -11313=>'L', -11314=>'L', -11315=>'L', -11316=>'L', -11317=>'L', -11318=>'L', -11319=>'L', -11320=>'L', -11321=>'L', -11322=>'L', -11323=>'L', -11324=>'L', -11325=>'L', -11326=>'L', -11327=>'L', -11328=>'L', -11329=>'L', -11330=>'L', -11331=>'L', -11332=>'L', -11333=>'L', -11334=>'L', -11335=>'L', -11336=>'L', -11337=>'L', -11338=>'L', -11339=>'L', -11340=>'L', -11341=>'L', -11342=>'L', -11343=>'L', -11344=>'L', -11345=>'L', -11346=>'L', -11347=>'L', -11348=>'L', -11349=>'L', -11350=>'L', -11351=>'L', -11352=>'L', -11353=>'L', -11354=>'L', -11355=>'L', -11356=>'L', -11357=>'L', -11358=>'L', -11360=>'L', -11361=>'L', -11362=>'L', -11363=>'L', -11364=>'L', -11365=>'L', -11366=>'L', -11367=>'L', -11368=>'L', -11369=>'L', -11370=>'L', -11371=>'L', -11372=>'L', -11380=>'L', -11381=>'L', -11382=>'L', -11383=>'L', -11392=>'L', -11393=>'L', -11394=>'L', -11395=>'L', -11396=>'L', -11397=>'L', -11398=>'L', -11399=>'L', -11400=>'L', -11401=>'L', -11402=>'L', -11403=>'L', -11404=>'L', -11405=>'L', -11406=>'L', -11407=>'L', -11408=>'L', -11409=>'L', -11410=>'L', -11411=>'L', -11412=>'L', -11413=>'L', -11414=>'L', -11415=>'L', -11416=>'L', -11417=>'L', -11418=>'L', -11419=>'L', -11420=>'L', -11421=>'L', -11422=>'L', -11423=>'L', -11424=>'L', -11425=>'L', -11426=>'L', -11427=>'L', -11428=>'L', -11429=>'L', -11430=>'L', -11431=>'L', -11432=>'L', -11433=>'L', -11434=>'L', -11435=>'L', -11436=>'L', -11437=>'L', -11438=>'L', -11439=>'L', -11440=>'L', -11441=>'L', -11442=>'L', -11443=>'L', -11444=>'L', -11445=>'L', -11446=>'L', -11447=>'L', -11448=>'L', -11449=>'L', -11450=>'L', -11451=>'L', -11452=>'L', -11453=>'L', -11454=>'L', -11455=>'L', -11456=>'L', -11457=>'L', -11458=>'L', -11459=>'L', -11460=>'L', -11461=>'L', -11462=>'L', -11463=>'L', -11464=>'L', -11465=>'L', -11466=>'L', -11467=>'L', -11468=>'L', -11469=>'L', -11470=>'L', -11471=>'L', -11472=>'L', -11473=>'L', -11474=>'L', -11475=>'L', -11476=>'L', -11477=>'L', -11478=>'L', -11479=>'L', -11480=>'L', -11481=>'L', -11482=>'L', -11483=>'L', -11484=>'L', -11485=>'L', -11486=>'L', -11487=>'L', -11488=>'L', -11489=>'L', -11490=>'L', -11491=>'L', -11492=>'L', -11493=>'ON', -11494=>'ON', -11495=>'ON', -11496=>'ON', -11497=>'ON', -11498=>'ON', -11513=>'ON', -11514=>'ON', -11515=>'ON', -11516=>'ON', -11517=>'ON', -11518=>'ON', -11519=>'ON', -11520=>'L', -11521=>'L', -11522=>'L', -11523=>'L', -11524=>'L', -11525=>'L', -11526=>'L', -11527=>'L', -11528=>'L', -11529=>'L', -11530=>'L', -11531=>'L', -11532=>'L', -11533=>'L', -11534=>'L', -11535=>'L', -11536=>'L', -11537=>'L', -11538=>'L', -11539=>'L', -11540=>'L', -11541=>'L', -11542=>'L', -11543=>'L', -11544=>'L', -11545=>'L', -11546=>'L', -11547=>'L', -11548=>'L', -11549=>'L', -11550=>'L', -11551=>'L', -11552=>'L', -11553=>'L', -11554=>'L', -11555=>'L', -11556=>'L', -11557=>'L', -11568=>'L', -11569=>'L', -11570=>'L', -11571=>'L', -11572=>'L', -11573=>'L', -11574=>'L', -11575=>'L', -11576=>'L', -11577=>'L', -11578=>'L', -11579=>'L', -11580=>'L', -11581=>'L', -11582=>'L', -11583=>'L', -11584=>'L', -11585=>'L', -11586=>'L', -11587=>'L', -11588=>'L', -11589=>'L', -11590=>'L', -11591=>'L', -11592=>'L', -11593=>'L', -11594=>'L', -11595=>'L', -11596=>'L', -11597=>'L', -11598=>'L', -11599=>'L', -11600=>'L', -11601=>'L', -11602=>'L', -11603=>'L', -11604=>'L', -11605=>'L', -11606=>'L', -11607=>'L', -11608=>'L', -11609=>'L', -11610=>'L', -11611=>'L', -11612=>'L', -11613=>'L', -11614=>'L', -11615=>'L', -11616=>'L', -11617=>'L', -11618=>'L', -11619=>'L', -11620=>'L', -11621=>'L', -11631=>'L', -11648=>'L', -11649=>'L', -11650=>'L', -11651=>'L', -11652=>'L', -11653=>'L', -11654=>'L', -11655=>'L', -11656=>'L', -11657=>'L', -11658=>'L', -11659=>'L', -11660=>'L', -11661=>'L', -11662=>'L', -11663=>'L', -11664=>'L', -11665=>'L', -11666=>'L', -11667=>'L', -11668=>'L', -11669=>'L', -11670=>'L', -11680=>'L', -11681=>'L', -11682=>'L', -11683=>'L', -11684=>'L', -11685=>'L', -11686=>'L', -11688=>'L', -11689=>'L', -11690=>'L', -11691=>'L', -11692=>'L', -11693=>'L', -11694=>'L', -11696=>'L', -11697=>'L', -11698=>'L', -11699=>'L', -11700=>'L', -11701=>'L', -11702=>'L', -11704=>'L', -11705=>'L', -11706=>'L', -11707=>'L', -11708=>'L', -11709=>'L', -11710=>'L', -11712=>'L', -11713=>'L', -11714=>'L', -11715=>'L', -11716=>'L', -11717=>'L', -11718=>'L', -11720=>'L', -11721=>'L', -11722=>'L', -11723=>'L', -11724=>'L', -11725=>'L', -11726=>'L', -11728=>'L', -11729=>'L', -11730=>'L', -11731=>'L', -11732=>'L', -11733=>'L', -11734=>'L', -11736=>'L', -11737=>'L', -11738=>'L', -11739=>'L', -11740=>'L', -11741=>'L', -11742=>'L', -11776=>'ON', -11777=>'ON', -11778=>'ON', -11779=>'ON', -11780=>'ON', -11781=>'ON', -11782=>'ON', -11783=>'ON', -11784=>'ON', -11785=>'ON', -11786=>'ON', -11787=>'ON', -11788=>'ON', -11789=>'ON', -11790=>'ON', -11791=>'ON', -11792=>'ON', -11793=>'ON', -11794=>'ON', -11795=>'ON', -11796=>'ON', -11797=>'ON', -11798=>'ON', -11799=>'ON', -11804=>'ON', -11805=>'ON', -11904=>'ON', -11905=>'ON', -11906=>'ON', -11907=>'ON', -11908=>'ON', -11909=>'ON', -11910=>'ON', -11911=>'ON', -11912=>'ON', -11913=>'ON', -11914=>'ON', -11915=>'ON', -11916=>'ON', -11917=>'ON', -11918=>'ON', -11919=>'ON', -11920=>'ON', -11921=>'ON', -11922=>'ON', -11923=>'ON', -11924=>'ON', -11925=>'ON', -11926=>'ON', -11927=>'ON', -11928=>'ON', -11929=>'ON', -11931=>'ON', -11932=>'ON', -11933=>'ON', -11934=>'ON', -11935=>'ON', -11936=>'ON', -11937=>'ON', -11938=>'ON', -11939=>'ON', -11940=>'ON', -11941=>'ON', -11942=>'ON', -11943=>'ON', -11944=>'ON', -11945=>'ON', -11946=>'ON', -11947=>'ON', -11948=>'ON', -11949=>'ON', -11950=>'ON', -11951=>'ON', -11952=>'ON', -11953=>'ON', -11954=>'ON', -11955=>'ON', -11956=>'ON', -11957=>'ON', -11958=>'ON', -11959=>'ON', -11960=>'ON', -11961=>'ON', -11962=>'ON', -11963=>'ON', -11964=>'ON', -11965=>'ON', -11966=>'ON', -11967=>'ON', -11968=>'ON', -11969=>'ON', -11970=>'ON', -11971=>'ON', -11972=>'ON', -11973=>'ON', -11974=>'ON', -11975=>'ON', -11976=>'ON', -11977=>'ON', -11978=>'ON', -11979=>'ON', -11980=>'ON', -11981=>'ON', -11982=>'ON', -11983=>'ON', -11984=>'ON', -11985=>'ON', -11986=>'ON', -11987=>'ON', -11988=>'ON', -11989=>'ON', -11990=>'ON', -11991=>'ON', -11992=>'ON', -11993=>'ON', -11994=>'ON', -11995=>'ON', -11996=>'ON', -11997=>'ON', -11998=>'ON', -11999=>'ON', -12000=>'ON', -12001=>'ON', -12002=>'ON', -12003=>'ON', -12004=>'ON', -12005=>'ON', -12006=>'ON', -12007=>'ON', -12008=>'ON', -12009=>'ON', -12010=>'ON', -12011=>'ON', -12012=>'ON', -12013=>'ON', -12014=>'ON', -12015=>'ON', -12016=>'ON', -12017=>'ON', -12018=>'ON', -12019=>'ON', -12032=>'ON', -12033=>'ON', -12034=>'ON', -12035=>'ON', -12036=>'ON', -12037=>'ON', -12038=>'ON', -12039=>'ON', -12040=>'ON', -12041=>'ON', -12042=>'ON', -12043=>'ON', -12044=>'ON', -12045=>'ON', -12046=>'ON', -12047=>'ON', -12048=>'ON', -12049=>'ON', -12050=>'ON', -12051=>'ON', -12052=>'ON', -12053=>'ON', -12054=>'ON', -12055=>'ON', -12056=>'ON', -12057=>'ON', -12058=>'ON', -12059=>'ON', -12060=>'ON', -12061=>'ON', -12062=>'ON', -12063=>'ON', -12064=>'ON', -12065=>'ON', -12066=>'ON', -12067=>'ON', -12068=>'ON', -12069=>'ON', -12070=>'ON', -12071=>'ON', -12072=>'ON', -12073=>'ON', -12074=>'ON', -12075=>'ON', -12076=>'ON', -12077=>'ON', -12078=>'ON', -12079=>'ON', -12080=>'ON', -12081=>'ON', -12082=>'ON', -12083=>'ON', -12084=>'ON', -12085=>'ON', -12086=>'ON', -12087=>'ON', -12088=>'ON', -12089=>'ON', -12090=>'ON', -12091=>'ON', -12092=>'ON', -12093=>'ON', -12094=>'ON', -12095=>'ON', -12096=>'ON', -12097=>'ON', -12098=>'ON', -12099=>'ON', -12100=>'ON', -12101=>'ON', -12102=>'ON', -12103=>'ON', -12104=>'ON', -12105=>'ON', -12106=>'ON', -12107=>'ON', -12108=>'ON', -12109=>'ON', -12110=>'ON', -12111=>'ON', -12112=>'ON', -12113=>'ON', -12114=>'ON', -12115=>'ON', -12116=>'ON', -12117=>'ON', -12118=>'ON', -12119=>'ON', -12120=>'ON', -12121=>'ON', -12122=>'ON', -12123=>'ON', -12124=>'ON', -12125=>'ON', -12126=>'ON', -12127=>'ON', -12128=>'ON', -12129=>'ON', -12130=>'ON', -12131=>'ON', -12132=>'ON', -12133=>'ON', -12134=>'ON', -12135=>'ON', -12136=>'ON', -12137=>'ON', -12138=>'ON', -12139=>'ON', -12140=>'ON', -12141=>'ON', -12142=>'ON', -12143=>'ON', -12144=>'ON', -12145=>'ON', -12146=>'ON', -12147=>'ON', -12148=>'ON', -12149=>'ON', -12150=>'ON', -12151=>'ON', -12152=>'ON', -12153=>'ON', -12154=>'ON', -12155=>'ON', -12156=>'ON', -12157=>'ON', -12158=>'ON', -12159=>'ON', -12160=>'ON', -12161=>'ON', -12162=>'ON', -12163=>'ON', -12164=>'ON', -12165=>'ON', -12166=>'ON', -12167=>'ON', -12168=>'ON', -12169=>'ON', -12170=>'ON', -12171=>'ON', -12172=>'ON', -12173=>'ON', -12174=>'ON', -12175=>'ON', -12176=>'ON', -12177=>'ON', -12178=>'ON', -12179=>'ON', -12180=>'ON', -12181=>'ON', -12182=>'ON', -12183=>'ON', -12184=>'ON', -12185=>'ON', -12186=>'ON', -12187=>'ON', -12188=>'ON', -12189=>'ON', -12190=>'ON', -12191=>'ON', -12192=>'ON', -12193=>'ON', -12194=>'ON', -12195=>'ON', -12196=>'ON', -12197=>'ON', -12198=>'ON', -12199=>'ON', -12200=>'ON', -12201=>'ON', -12202=>'ON', -12203=>'ON', -12204=>'ON', -12205=>'ON', -12206=>'ON', -12207=>'ON', -12208=>'ON', -12209=>'ON', -12210=>'ON', -12211=>'ON', -12212=>'ON', -12213=>'ON', -12214=>'ON', -12215=>'ON', -12216=>'ON', -12217=>'ON', -12218=>'ON', -12219=>'ON', -12220=>'ON', -12221=>'ON', -12222=>'ON', -12223=>'ON', -12224=>'ON', -12225=>'ON', -12226=>'ON', -12227=>'ON', -12228=>'ON', -12229=>'ON', -12230=>'ON', -12231=>'ON', -12232=>'ON', -12233=>'ON', -12234=>'ON', -12235=>'ON', -12236=>'ON', -12237=>'ON', -12238=>'ON', -12239=>'ON', -12240=>'ON', -12241=>'ON', -12242=>'ON', -12243=>'ON', -12244=>'ON', -12245=>'ON', -12272=>'ON', -12273=>'ON', -12274=>'ON', -12275=>'ON', -12276=>'ON', -12277=>'ON', -12278=>'ON', -12279=>'ON', -12280=>'ON', -12281=>'ON', -12282=>'ON', -12283=>'ON', -12288=>'WS', -12289=>'ON', -12290=>'ON', -12291=>'ON', -12292=>'ON', -12293=>'L', -12294=>'L', -12295=>'L', -12296=>'ON', -12297=>'ON', -12298=>'ON', -12299=>'ON', -12300=>'ON', -12301=>'ON', -12302=>'ON', -12303=>'ON', -12304=>'ON', -12305=>'ON', -12306=>'ON', -12307=>'ON', -12308=>'ON', -12309=>'ON', -12310=>'ON', -12311=>'ON', -12312=>'ON', -12313=>'ON', -12314=>'ON', -12315=>'ON', -12316=>'ON', -12317=>'ON', -12318=>'ON', -12319=>'ON', -12320=>'ON', -12321=>'L', -12322=>'L', -12323=>'L', -12324=>'L', -12325=>'L', -12326=>'L', -12327=>'L', -12328=>'L', -12329=>'L', -12330=>'NSM', -12331=>'NSM', -12332=>'NSM', -12333=>'NSM', -12334=>'NSM', -12335=>'NSM', -12336=>'ON', -12337=>'L', -12338=>'L', -12339=>'L', -12340=>'L', -12341=>'L', -12342=>'ON', -12343=>'ON', -12344=>'L', -12345=>'L', -12346=>'L', -12347=>'L', -12348=>'L', -12349=>'ON', -12350=>'ON', -12351=>'ON', -12353=>'L', -12354=>'L', -12355=>'L', -12356=>'L', -12357=>'L', -12358=>'L', -12359=>'L', -12360=>'L', -12361=>'L', -12362=>'L', -12363=>'L', -12364=>'L', -12365=>'L', -12366=>'L', -12367=>'L', -12368=>'L', -12369=>'L', -12370=>'L', -12371=>'L', -12372=>'L', -12373=>'L', -12374=>'L', -12375=>'L', -12376=>'L', -12377=>'L', -12378=>'L', -12379=>'L', -12380=>'L', -12381=>'L', -12382=>'L', -12383=>'L', -12384=>'L', -12385=>'L', -12386=>'L', -12387=>'L', -12388=>'L', -12389=>'L', -12390=>'L', -12391=>'L', -12392=>'L', -12393=>'L', -12394=>'L', -12395=>'L', -12396=>'L', -12397=>'L', -12398=>'L', -12399=>'L', -12400=>'L', -12401=>'L', -12402=>'L', -12403=>'L', -12404=>'L', -12405=>'L', -12406=>'L', -12407=>'L', -12408=>'L', -12409=>'L', -12410=>'L', -12411=>'L', -12412=>'L', -12413=>'L', -12414=>'L', -12415=>'L', -12416=>'L', -12417=>'L', -12418=>'L', -12419=>'L', -12420=>'L', -12421=>'L', -12422=>'L', -12423=>'L', -12424=>'L', -12425=>'L', -12426=>'L', -12427=>'L', -12428=>'L', -12429=>'L', -12430=>'L', -12431=>'L', -12432=>'L', -12433=>'L', -12434=>'L', -12435=>'L', -12436=>'L', -12437=>'L', -12438=>'L', -12441=>'NSM', -12442=>'NSM', -12443=>'ON', -12444=>'ON', -12445=>'L', -12446=>'L', -12447=>'L', -12448=>'ON', -12449=>'L', -12450=>'L', -12451=>'L', -12452=>'L', -12453=>'L', -12454=>'L', -12455=>'L', -12456=>'L', -12457=>'L', -12458=>'L', -12459=>'L', -12460=>'L', -12461=>'L', -12462=>'L', -12463=>'L', -12464=>'L', -12465=>'L', -12466=>'L', -12467=>'L', -12468=>'L', -12469=>'L', -12470=>'L', -12471=>'L', -12472=>'L', -12473=>'L', -12474=>'L', -12475=>'L', -12476=>'L', -12477=>'L', -12478=>'L', -12479=>'L', -12480=>'L', -12481=>'L', -12482=>'L', -12483=>'L', -12484=>'L', -12485=>'L', -12486=>'L', -12487=>'L', -12488=>'L', -12489=>'L', -12490=>'L', -12491=>'L', -12492=>'L', -12493=>'L', -12494=>'L', -12495=>'L', -12496=>'L', -12497=>'L', -12498=>'L', -12499=>'L', -12500=>'L', -12501=>'L', -12502=>'L', -12503=>'L', -12504=>'L', -12505=>'L', -12506=>'L', -12507=>'L', -12508=>'L', -12509=>'L', -12510=>'L', -12511=>'L', -12512=>'L', -12513=>'L', -12514=>'L', -12515=>'L', -12516=>'L', -12517=>'L', -12518=>'L', -12519=>'L', -12520=>'L', -12521=>'L', -12522=>'L', -12523=>'L', -12524=>'L', -12525=>'L', -12526=>'L', -12527=>'L', -12528=>'L', -12529=>'L', -12530=>'L', -12531=>'L', -12532=>'L', -12533=>'L', -12534=>'L', -12535=>'L', -12536=>'L', -12537=>'L', -12538=>'L', -12539=>'ON', -12540=>'L', -12541=>'L', -12542=>'L', -12543=>'L', -12549=>'L', -12550=>'L', -12551=>'L', -12552=>'L', -12553=>'L', -12554=>'L', -12555=>'L', -12556=>'L', -12557=>'L', -12558=>'L', -12559=>'L', -12560=>'L', -12561=>'L', -12562=>'L', -12563=>'L', -12564=>'L', -12565=>'L', -12566=>'L', -12567=>'L', -12568=>'L', -12569=>'L', -12570=>'L', -12571=>'L', -12572=>'L', -12573=>'L', -12574=>'L', -12575=>'L', -12576=>'L', -12577=>'L', -12578=>'L', -12579=>'L', -12580=>'L', -12581=>'L', -12582=>'L', -12583=>'L', -12584=>'L', -12585=>'L', -12586=>'L', -12587=>'L', -12588=>'L', -12593=>'L', -12594=>'L', -12595=>'L', -12596=>'L', -12597=>'L', -12598=>'L', -12599=>'L', -12600=>'L', -12601=>'L', -12602=>'L', -12603=>'L', -12604=>'L', -12605=>'L', -12606=>'L', -12607=>'L', -12608=>'L', -12609=>'L', -12610=>'L', -12611=>'L', -12612=>'L', -12613=>'L', -12614=>'L', -12615=>'L', -12616=>'L', -12617=>'L', -12618=>'L', -12619=>'L', -12620=>'L', -12621=>'L', -12622=>'L', -12623=>'L', -12624=>'L', -12625=>'L', -12626=>'L', -12627=>'L', -12628=>'L', -12629=>'L', -12630=>'L', -12631=>'L', -12632=>'L', -12633=>'L', -12634=>'L', -12635=>'L', -12636=>'L', -12637=>'L', -12638=>'L', -12639=>'L', -12640=>'L', -12641=>'L', -12642=>'L', -12643=>'L', -12644=>'L', -12645=>'L', -12646=>'L', -12647=>'L', -12648=>'L', -12649=>'L', -12650=>'L', -12651=>'L', -12652=>'L', -12653=>'L', -12654=>'L', -12655=>'L', -12656=>'L', -12657=>'L', -12658=>'L', -12659=>'L', -12660=>'L', -12661=>'L', -12662=>'L', -12663=>'L', -12664=>'L', -12665=>'L', -12666=>'L', -12667=>'L', -12668=>'L', -12669=>'L', -12670=>'L', -12671=>'L', -12672=>'L', -12673=>'L', -12674=>'L', -12675=>'L', -12676=>'L', -12677=>'L', -12678=>'L', -12679=>'L', -12680=>'L', -12681=>'L', -12682=>'L', -12683=>'L', -12684=>'L', -12685=>'L', -12686=>'L', -12688=>'L', -12689=>'L', -12690=>'L', -12691=>'L', -12692=>'L', -12693=>'L', -12694=>'L', -12695=>'L', -12696=>'L', -12697=>'L', -12698=>'L', -12699=>'L', -12700=>'L', -12701=>'L', -12702=>'L', -12703=>'L', -12704=>'L', -12705=>'L', -12706=>'L', -12707=>'L', -12708=>'L', -12709=>'L', -12710=>'L', -12711=>'L', -12712=>'L', -12713=>'L', -12714=>'L', -12715=>'L', -12716=>'L', -12717=>'L', -12718=>'L', -12719=>'L', -12720=>'L', -12721=>'L', -12722=>'L', -12723=>'L', -12724=>'L', -12725=>'L', -12726=>'L', -12727=>'L', -12736=>'ON', -12737=>'ON', -12738=>'ON', -12739=>'ON', -12740=>'ON', -12741=>'ON', -12742=>'ON', -12743=>'ON', -12744=>'ON', -12745=>'ON', -12746=>'ON', -12747=>'ON', -12748=>'ON', -12749=>'ON', -12750=>'ON', -12751=>'ON', -12784=>'L', -12785=>'L', -12786=>'L', -12787=>'L', -12788=>'L', -12789=>'L', -12790=>'L', -12791=>'L', -12792=>'L', -12793=>'L', -12794=>'L', -12795=>'L', -12796=>'L', -12797=>'L', -12798=>'L', -12799=>'L', -12800=>'L', -12801=>'L', -12802=>'L', -12803=>'L', -12804=>'L', -12805=>'L', -12806=>'L', -12807=>'L', -12808=>'L', -12809=>'L', -12810=>'L', -12811=>'L', -12812=>'L', -12813=>'L', -12814=>'L', -12815=>'L', -12816=>'L', -12817=>'L', -12818=>'L', -12819=>'L', -12820=>'L', -12821=>'L', -12822=>'L', -12823=>'L', -12824=>'L', -12825=>'L', -12826=>'L', -12827=>'L', -12828=>'L', -12829=>'ON', -12830=>'ON', -12832=>'L', -12833=>'L', -12834=>'L', -12835=>'L', -12836=>'L', -12837=>'L', -12838=>'L', -12839=>'L', -12840=>'L', -12841=>'L', -12842=>'L', -12843=>'L', -12844=>'L', -12845=>'L', -12846=>'L', -12847=>'L', -12848=>'L', -12849=>'L', -12850=>'L', -12851=>'L', -12852=>'L', -12853=>'L', -12854=>'L', -12855=>'L', -12856=>'L', -12857=>'L', -12858=>'L', -12859=>'L', -12860=>'L', -12861=>'L', -12862=>'L', -12863=>'L', -12864=>'L', -12865=>'L', -12866=>'L', -12867=>'L', -12880=>'ON', -12881=>'ON', -12882=>'ON', -12883=>'ON', -12884=>'ON', -12885=>'ON', -12886=>'ON', -12887=>'ON', -12888=>'ON', -12889=>'ON', -12890=>'ON', -12891=>'ON', -12892=>'ON', -12893=>'ON', -12894=>'ON', -12895=>'ON', -12896=>'L', -12897=>'L', -12898=>'L', -12899=>'L', -12900=>'L', -12901=>'L', -12902=>'L', -12903=>'L', -12904=>'L', -12905=>'L', -12906=>'L', -12907=>'L', -12908=>'L', -12909=>'L', -12910=>'L', -12911=>'L', -12912=>'L', -12913=>'L', -12914=>'L', -12915=>'L', -12916=>'L', -12917=>'L', -12918=>'L', -12919=>'L', -12920=>'L', -12921=>'L', -12922=>'L', -12923=>'L', -12924=>'ON', -12925=>'ON', -12926=>'ON', -12927=>'L', -12928=>'L', -12929=>'L', -12930=>'L', -12931=>'L', -12932=>'L', -12933=>'L', -12934=>'L', -12935=>'L', -12936=>'L', -12937=>'L', -12938=>'L', -12939=>'L', -12940=>'L', -12941=>'L', -12942=>'L', -12943=>'L', -12944=>'L', -12945=>'L', -12946=>'L', -12947=>'L', -12948=>'L', -12949=>'L', -12950=>'L', -12951=>'L', -12952=>'L', -12953=>'L', -12954=>'L', -12955=>'L', -12956=>'L', -12957=>'L', -12958=>'L', -12959=>'L', -12960=>'L', -12961=>'L', -12962=>'L', -12963=>'L', -12964=>'L', -12965=>'L', -12966=>'L', -12967=>'L', -12968=>'L', -12969=>'L', -12970=>'L', -12971=>'L', -12972=>'L', -12973=>'L', -12974=>'L', -12975=>'L', -12976=>'L', -12977=>'ON', -12978=>'ON', -12979=>'ON', -12980=>'ON', -12981=>'ON', -12982=>'ON', -12983=>'ON', -12984=>'ON', -12985=>'ON', -12986=>'ON', -12987=>'ON', -12988=>'ON', -12989=>'ON', -12990=>'ON', -12991=>'ON', -12992=>'L', -12993=>'L', -12994=>'L', -12995=>'L', -12996=>'L', -12997=>'L', -12998=>'L', -12999=>'L', -13000=>'L', -13001=>'L', -13002=>'L', -13003=>'L', -13004=>'ON', -13005=>'ON', -13006=>'ON', -13007=>'ON', -13008=>'L', -13009=>'L', -13010=>'L', -13011=>'L', -13012=>'L', -13013=>'L', -13014=>'L', -13015=>'L', -13016=>'L', -13017=>'L', -13018=>'L', -13019=>'L', -13020=>'L', -13021=>'L', -13022=>'L', -13023=>'L', -13024=>'L', -13025=>'L', -13026=>'L', -13027=>'L', -13028=>'L', -13029=>'L', -13030=>'L', -13031=>'L', -13032=>'L', -13033=>'L', -13034=>'L', -13035=>'L', -13036=>'L', -13037=>'L', -13038=>'L', -13039=>'L', -13040=>'L', -13041=>'L', -13042=>'L', -13043=>'L', -13044=>'L', -13045=>'L', -13046=>'L', -13047=>'L', -13048=>'L', -13049=>'L', -13050=>'L', -13051=>'L', -13052=>'L', -13053=>'L', -13054=>'L', -13056=>'L', -13057=>'L', -13058=>'L', -13059=>'L', -13060=>'L', -13061=>'L', -13062=>'L', -13063=>'L', -13064=>'L', -13065=>'L', -13066=>'L', -13067=>'L', -13068=>'L', -13069=>'L', -13070=>'L', -13071=>'L', -13072=>'L', -13073=>'L', -13074=>'L', -13075=>'L', -13076=>'L', -13077=>'L', -13078=>'L', -13079=>'L', -13080=>'L', -13081=>'L', -13082=>'L', -13083=>'L', -13084=>'L', -13085=>'L', -13086=>'L', -13087=>'L', -13088=>'L', -13089=>'L', -13090=>'L', -13091=>'L', -13092=>'L', -13093=>'L', -13094=>'L', -13095=>'L', -13096=>'L', -13097=>'L', -13098=>'L', -13099=>'L', -13100=>'L', -13101=>'L', -13102=>'L', -13103=>'L', -13104=>'L', -13105=>'L', -13106=>'L', -13107=>'L', -13108=>'L', -13109=>'L', -13110=>'L', -13111=>'L', -13112=>'L', -13113=>'L', -13114=>'L', -13115=>'L', -13116=>'L', -13117=>'L', -13118=>'L', -13119=>'L', -13120=>'L', -13121=>'L', -13122=>'L', -13123=>'L', -13124=>'L', -13125=>'L', -13126=>'L', -13127=>'L', -13128=>'L', -13129=>'L', -13130=>'L', -13131=>'L', -13132=>'L', -13133=>'L', -13134=>'L', -13135=>'L', -13136=>'L', -13137=>'L', -13138=>'L', -13139=>'L', -13140=>'L', -13141=>'L', -13142=>'L', -13143=>'L', -13144=>'L', -13145=>'L', -13146=>'L', -13147=>'L', -13148=>'L', -13149=>'L', -13150=>'L', -13151=>'L', -13152=>'L', -13153=>'L', -13154=>'L', -13155=>'L', -13156=>'L', -13157=>'L', -13158=>'L', -13159=>'L', -13160=>'L', -13161=>'L', -13162=>'L', -13163=>'L', -13164=>'L', -13165=>'L', -13166=>'L', -13167=>'L', -13168=>'L', -13169=>'L', -13170=>'L', -13171=>'L', -13172=>'L', -13173=>'L', -13174=>'L', -13175=>'ON', -13176=>'ON', -13177=>'ON', -13178=>'ON', -13179=>'L', -13180=>'L', -13181=>'L', -13182=>'L', -13183=>'L', -13184=>'L', -13185=>'L', -13186=>'L', -13187=>'L', -13188=>'L', -13189=>'L', -13190=>'L', -13191=>'L', -13192=>'L', -13193=>'L', -13194=>'L', -13195=>'L', -13196=>'L', -13197=>'L', -13198=>'L', -13199=>'L', -13200=>'L', -13201=>'L', -13202=>'L', -13203=>'L', -13204=>'L', -13205=>'L', -13206=>'L', -13207=>'L', -13208=>'L', -13209=>'L', -13210=>'L', -13211=>'L', -13212=>'L', -13213=>'L', -13214=>'L', -13215=>'L', -13216=>'L', -13217=>'L', -13218=>'L', -13219=>'L', -13220=>'L', -13221=>'L', -13222=>'L', -13223=>'L', -13224=>'L', -13225=>'L', -13226=>'L', -13227=>'L', -13228=>'L', -13229=>'L', -13230=>'L', -13231=>'L', -13232=>'L', -13233=>'L', -13234=>'L', -13235=>'L', -13236=>'L', -13237=>'L', -13238=>'L', -13239=>'L', -13240=>'L', -13241=>'L', -13242=>'L', -13243=>'L', -13244=>'L', -13245=>'L', -13246=>'L', -13247=>'L', -13248=>'L', -13249=>'L', -13250=>'L', -13251=>'L', -13252=>'L', -13253=>'L', -13254=>'L', -13255=>'L', -13256=>'L', -13257=>'L', -13258=>'L', -13259=>'L', -13260=>'L', -13261=>'L', -13262=>'L', -13263=>'L', -13264=>'L', -13265=>'L', -13266=>'L', -13267=>'L', -13268=>'L', -13269=>'L', -13270=>'L', -13271=>'L', -13272=>'L', -13273=>'L', -13274=>'L', -13275=>'L', -13276=>'L', -13277=>'L', -13278=>'ON', -13279=>'ON', -13280=>'L', -13281=>'L', -13282=>'L', -13283=>'L', -13284=>'L', -13285=>'L', -13286=>'L', -13287=>'L', -13288=>'L', -13289=>'L', -13290=>'L', -13291=>'L', -13292=>'L', -13293=>'L', -13294=>'L', -13295=>'L', -13296=>'L', -13297=>'L', -13298=>'L', -13299=>'L', -13300=>'L', -13301=>'L', -13302=>'L', -13303=>'L', -13304=>'L', -13305=>'L', -13306=>'L', -13307=>'L', -13308=>'L', -13309=>'L', -13310=>'L', -13311=>'ON', -13312=>'L', -19893=>'L', -19904=>'ON', -19905=>'ON', -19906=>'ON', -19907=>'ON', -19908=>'ON', -19909=>'ON', -19910=>'ON', -19911=>'ON', -19912=>'ON', -19913=>'ON', -19914=>'ON', -19915=>'ON', -19916=>'ON', -19917=>'ON', -19918=>'ON', -19919=>'ON', -19920=>'ON', -19921=>'ON', -19922=>'ON', -19923=>'ON', -19924=>'ON', -19925=>'ON', -19926=>'ON', -19927=>'ON', -19928=>'ON', -19929=>'ON', -19930=>'ON', -19931=>'ON', -19932=>'ON', -19933=>'ON', -19934=>'ON', -19935=>'ON', -19936=>'ON', -19937=>'ON', -19938=>'ON', -19939=>'ON', -19940=>'ON', -19941=>'ON', -19942=>'ON', -19943=>'ON', -19944=>'ON', -19945=>'ON', -19946=>'ON', -19947=>'ON', -19948=>'ON', -19949=>'ON', -19950=>'ON', -19951=>'ON', -19952=>'ON', -19953=>'ON', -19954=>'ON', -19955=>'ON', -19956=>'ON', -19957=>'ON', -19958=>'ON', -19959=>'ON', -19960=>'ON', -19961=>'ON', -19962=>'ON', -19963=>'ON', -19964=>'ON', -19965=>'ON', -19966=>'ON', -19967=>'ON', -19968=>'L', -40891=>'L', -40960=>'L', -40961=>'L', -40962=>'L', -40963=>'L', -40964=>'L', -40965=>'L', -40966=>'L', -40967=>'L', -40968=>'L', -40969=>'L', -40970=>'L', -40971=>'L', -40972=>'L', -40973=>'L', -40974=>'L', -40975=>'L', -40976=>'L', -40977=>'L', -40978=>'L', -40979=>'L', -40980=>'L', -40981=>'L', -40982=>'L', -40983=>'L', -40984=>'L', -40985=>'L', -40986=>'L', -40987=>'L', -40988=>'L', -40989=>'L', -40990=>'L', -40991=>'L', -40992=>'L', -40993=>'L', -40994=>'L', -40995=>'L', -40996=>'L', -40997=>'L', -40998=>'L', -40999=>'L', -41000=>'L', -41001=>'L', -41002=>'L', -41003=>'L', -41004=>'L', -41005=>'L', -41006=>'L', -41007=>'L', -41008=>'L', -41009=>'L', -41010=>'L', -41011=>'L', -41012=>'L', -41013=>'L', -41014=>'L', -41015=>'L', -41016=>'L', -41017=>'L', -41018=>'L', -41019=>'L', -41020=>'L', -41021=>'L', -41022=>'L', -41023=>'L', -41024=>'L', -41025=>'L', -41026=>'L', -41027=>'L', -41028=>'L', -41029=>'L', -41030=>'L', -41031=>'L', -41032=>'L', -41033=>'L', -41034=>'L', -41035=>'L', -41036=>'L', -41037=>'L', -41038=>'L', -41039=>'L', -41040=>'L', -41041=>'L', -41042=>'L', -41043=>'L', -41044=>'L', -41045=>'L', -41046=>'L', -41047=>'L', -41048=>'L', -41049=>'L', -41050=>'L', -41051=>'L', -41052=>'L', -41053=>'L', -41054=>'L', -41055=>'L', -41056=>'L', -41057=>'L', -41058=>'L', -41059=>'L', -41060=>'L', -41061=>'L', -41062=>'L', -41063=>'L', -41064=>'L', -41065=>'L', -41066=>'L', -41067=>'L', -41068=>'L', -41069=>'L', -41070=>'L', -41071=>'L', -41072=>'L', -41073=>'L', -41074=>'L', -41075=>'L', -41076=>'L', -41077=>'L', -41078=>'L', -41079=>'L', -41080=>'L', -41081=>'L', -41082=>'L', -41083=>'L', -41084=>'L', -41085=>'L', -41086=>'L', -41087=>'L', -41088=>'L', -41089=>'L', -41090=>'L', -41091=>'L', -41092=>'L', -41093=>'L', -41094=>'L', -41095=>'L', -41096=>'L', -41097=>'L', -41098=>'L', -41099=>'L', -41100=>'L', -41101=>'L', -41102=>'L', -41103=>'L', -41104=>'L', -41105=>'L', -41106=>'L', -41107=>'L', -41108=>'L', -41109=>'L', -41110=>'L', -41111=>'L', -41112=>'L', -41113=>'L', -41114=>'L', -41115=>'L', -41116=>'L', -41117=>'L', -41118=>'L', -41119=>'L', -41120=>'L', -41121=>'L', -41122=>'L', -41123=>'L', -41124=>'L', -41125=>'L', -41126=>'L', -41127=>'L', -41128=>'L', -41129=>'L', -41130=>'L', -41131=>'L', -41132=>'L', -41133=>'L', -41134=>'L', -41135=>'L', -41136=>'L', -41137=>'L', -41138=>'L', -41139=>'L', -41140=>'L', -41141=>'L', -41142=>'L', -41143=>'L', -41144=>'L', -41145=>'L', -41146=>'L', -41147=>'L', -41148=>'L', -41149=>'L', -41150=>'L', -41151=>'L', -41152=>'L', -41153=>'L', -41154=>'L', -41155=>'L', -41156=>'L', -41157=>'L', -41158=>'L', -41159=>'L', -41160=>'L', -41161=>'L', -41162=>'L', -41163=>'L', -41164=>'L', -41165=>'L', -41166=>'L', -41167=>'L', -41168=>'L', -41169=>'L', -41170=>'L', -41171=>'L', -41172=>'L', -41173=>'L', -41174=>'L', -41175=>'L', -41176=>'L', -41177=>'L', -41178=>'L', -41179=>'L', -41180=>'L', -41181=>'L', -41182=>'L', -41183=>'L', -41184=>'L', -41185=>'L', -41186=>'L', -41187=>'L', -41188=>'L', -41189=>'L', -41190=>'L', -41191=>'L', -41192=>'L', -41193=>'L', -41194=>'L', -41195=>'L', -41196=>'L', -41197=>'L', -41198=>'L', -41199=>'L', -41200=>'L', -41201=>'L', -41202=>'L', -41203=>'L', -41204=>'L', -41205=>'L', -41206=>'L', -41207=>'L', -41208=>'L', -41209=>'L', -41210=>'L', -41211=>'L', -41212=>'L', -41213=>'L', -41214=>'L', -41215=>'L', -41216=>'L', -41217=>'L', -41218=>'L', -41219=>'L', -41220=>'L', -41221=>'L', -41222=>'L', -41223=>'L', -41224=>'L', -41225=>'L', -41226=>'L', -41227=>'L', -41228=>'L', -41229=>'L', -41230=>'L', -41231=>'L', -41232=>'L', -41233=>'L', -41234=>'L', -41235=>'L', -41236=>'L', -41237=>'L', -41238=>'L', -41239=>'L', -41240=>'L', -41241=>'L', -41242=>'L', -41243=>'L', -41244=>'L', -41245=>'L', -41246=>'L', -41247=>'L', -41248=>'L', -41249=>'L', -41250=>'L', -41251=>'L', -41252=>'L', -41253=>'L', -41254=>'L', -41255=>'L', -41256=>'L', -41257=>'L', -41258=>'L', -41259=>'L', -41260=>'L', -41261=>'L', -41262=>'L', -41263=>'L', -41264=>'L', -41265=>'L', -41266=>'L', -41267=>'L', -41268=>'L', -41269=>'L', -41270=>'L', -41271=>'L', -41272=>'L', -41273=>'L', -41274=>'L', -41275=>'L', -41276=>'L', -41277=>'L', -41278=>'L', -41279=>'L', -41280=>'L', -41281=>'L', -41282=>'L', -41283=>'L', -41284=>'L', -41285=>'L', -41286=>'L', -41287=>'L', -41288=>'L', -41289=>'L', -41290=>'L', -41291=>'L', -41292=>'L', -41293=>'L', -41294=>'L', -41295=>'L', -41296=>'L', -41297=>'L', -41298=>'L', -41299=>'L', -41300=>'L', -41301=>'L', -41302=>'L', -41303=>'L', -41304=>'L', -41305=>'L', -41306=>'L', -41307=>'L', -41308=>'L', -41309=>'L', -41310=>'L', -41311=>'L', -41312=>'L', -41313=>'L', -41314=>'L', -41315=>'L', -41316=>'L', -41317=>'L', -41318=>'L', -41319=>'L', -41320=>'L', -41321=>'L', -41322=>'L', -41323=>'L', -41324=>'L', -41325=>'L', -41326=>'L', -41327=>'L', -41328=>'L', -41329=>'L', -41330=>'L', -41331=>'L', -41332=>'L', -41333=>'L', -41334=>'L', -41335=>'L', -41336=>'L', -41337=>'L', -41338=>'L', -41339=>'L', -41340=>'L', -41341=>'L', -41342=>'L', -41343=>'L', -41344=>'L', -41345=>'L', -41346=>'L', -41347=>'L', -41348=>'L', -41349=>'L', -41350=>'L', -41351=>'L', -41352=>'L', -41353=>'L', -41354=>'L', -41355=>'L', -41356=>'L', -41357=>'L', -41358=>'L', -41359=>'L', -41360=>'L', -41361=>'L', -41362=>'L', -41363=>'L', -41364=>'L', -41365=>'L', -41366=>'L', -41367=>'L', -41368=>'L', -41369=>'L', -41370=>'L', -41371=>'L', -41372=>'L', -41373=>'L', -41374=>'L', -41375=>'L', -41376=>'L', -41377=>'L', -41378=>'L', -41379=>'L', -41380=>'L', -41381=>'L', -41382=>'L', -41383=>'L', -41384=>'L', -41385=>'L', -41386=>'L', -41387=>'L', -41388=>'L', -41389=>'L', -41390=>'L', -41391=>'L', -41392=>'L', -41393=>'L', -41394=>'L', -41395=>'L', -41396=>'L', -41397=>'L', -41398=>'L', -41399=>'L', -41400=>'L', -41401=>'L', -41402=>'L', -41403=>'L', -41404=>'L', -41405=>'L', -41406=>'L', -41407=>'L', -41408=>'L', -41409=>'L', -41410=>'L', -41411=>'L', -41412=>'L', -41413=>'L', -41414=>'L', -41415=>'L', -41416=>'L', -41417=>'L', -41418=>'L', -41419=>'L', -41420=>'L', -41421=>'L', -41422=>'L', -41423=>'L', -41424=>'L', -41425=>'L', -41426=>'L', -41427=>'L', -41428=>'L', -41429=>'L', -41430=>'L', -41431=>'L', -41432=>'L', -41433=>'L', -41434=>'L', -41435=>'L', -41436=>'L', -41437=>'L', -41438=>'L', -41439=>'L', -41440=>'L', -41441=>'L', -41442=>'L', -41443=>'L', -41444=>'L', -41445=>'L', -41446=>'L', -41447=>'L', -41448=>'L', -41449=>'L', -41450=>'L', -41451=>'L', -41452=>'L', -41453=>'L', -41454=>'L', -41455=>'L', -41456=>'L', -41457=>'L', -41458=>'L', -41459=>'L', -41460=>'L', -41461=>'L', -41462=>'L', -41463=>'L', -41464=>'L', -41465=>'L', -41466=>'L', -41467=>'L', -41468=>'L', -41469=>'L', -41470=>'L', -41471=>'L', -41472=>'L', -41473=>'L', -41474=>'L', -41475=>'L', -41476=>'L', -41477=>'L', -41478=>'L', -41479=>'L', -41480=>'L', -41481=>'L', -41482=>'L', -41483=>'L', -41484=>'L', -41485=>'L', -41486=>'L', -41487=>'L', -41488=>'L', -41489=>'L', -41490=>'L', -41491=>'L', -41492=>'L', -41493=>'L', -41494=>'L', -41495=>'L', -41496=>'L', -41497=>'L', -41498=>'L', -41499=>'L', -41500=>'L', -41501=>'L', -41502=>'L', -41503=>'L', -41504=>'L', -41505=>'L', -41506=>'L', -41507=>'L', -41508=>'L', -41509=>'L', -41510=>'L', -41511=>'L', -41512=>'L', -41513=>'L', -41514=>'L', -41515=>'L', -41516=>'L', -41517=>'L', -41518=>'L', -41519=>'L', -41520=>'L', -41521=>'L', -41522=>'L', -41523=>'L', -41524=>'L', -41525=>'L', -41526=>'L', -41527=>'L', -41528=>'L', -41529=>'L', -41530=>'L', -41531=>'L', -41532=>'L', -41533=>'L', -41534=>'L', -41535=>'L', -41536=>'L', -41537=>'L', -41538=>'L', -41539=>'L', -41540=>'L', -41541=>'L', -41542=>'L', -41543=>'L', -41544=>'L', -41545=>'L', -41546=>'L', -41547=>'L', -41548=>'L', -41549=>'L', -41550=>'L', -41551=>'L', -41552=>'L', -41553=>'L', -41554=>'L', -41555=>'L', -41556=>'L', -41557=>'L', -41558=>'L', -41559=>'L', -41560=>'L', -41561=>'L', -41562=>'L', -41563=>'L', -41564=>'L', -41565=>'L', -41566=>'L', -41567=>'L', -41568=>'L', -41569=>'L', -41570=>'L', -41571=>'L', -41572=>'L', -41573=>'L', -41574=>'L', -41575=>'L', -41576=>'L', -41577=>'L', -41578=>'L', -41579=>'L', -41580=>'L', -41581=>'L', -41582=>'L', -41583=>'L', -41584=>'L', -41585=>'L', -41586=>'L', -41587=>'L', -41588=>'L', -41589=>'L', -41590=>'L', -41591=>'L', -41592=>'L', -41593=>'L', -41594=>'L', -41595=>'L', -41596=>'L', -41597=>'L', -41598=>'L', -41599=>'L', -41600=>'L', -41601=>'L', -41602=>'L', -41603=>'L', -41604=>'L', -41605=>'L', -41606=>'L', -41607=>'L', -41608=>'L', -41609=>'L', -41610=>'L', -41611=>'L', -41612=>'L', -41613=>'L', -41614=>'L', -41615=>'L', -41616=>'L', -41617=>'L', -41618=>'L', -41619=>'L', -41620=>'L', -41621=>'L', -41622=>'L', -41623=>'L', -41624=>'L', -41625=>'L', -41626=>'L', -41627=>'L', -41628=>'L', -41629=>'L', -41630=>'L', -41631=>'L', -41632=>'L', -41633=>'L', -41634=>'L', -41635=>'L', -41636=>'L', -41637=>'L', -41638=>'L', -41639=>'L', -41640=>'L', -41641=>'L', -41642=>'L', -41643=>'L', -41644=>'L', -41645=>'L', -41646=>'L', -41647=>'L', -41648=>'L', -41649=>'L', -41650=>'L', -41651=>'L', -41652=>'L', -41653=>'L', -41654=>'L', -41655=>'L', -41656=>'L', -41657=>'L', -41658=>'L', -41659=>'L', -41660=>'L', -41661=>'L', -41662=>'L', -41663=>'L', -41664=>'L', -41665=>'L', -41666=>'L', -41667=>'L', -41668=>'L', -41669=>'L', -41670=>'L', -41671=>'L', -41672=>'L', -41673=>'L', -41674=>'L', -41675=>'L', -41676=>'L', -41677=>'L', -41678=>'L', -41679=>'L', -41680=>'L', -41681=>'L', -41682=>'L', -41683=>'L', -41684=>'L', -41685=>'L', -41686=>'L', -41687=>'L', -41688=>'L', -41689=>'L', -41690=>'L', -41691=>'L', -41692=>'L', -41693=>'L', -41694=>'L', -41695=>'L', -41696=>'L', -41697=>'L', -41698=>'L', -41699=>'L', -41700=>'L', -41701=>'L', -41702=>'L', -41703=>'L', -41704=>'L', -41705=>'L', -41706=>'L', -41707=>'L', -41708=>'L', -41709=>'L', -41710=>'L', -41711=>'L', -41712=>'L', -41713=>'L', -41714=>'L', -41715=>'L', -41716=>'L', -41717=>'L', -41718=>'L', -41719=>'L', -41720=>'L', -41721=>'L', -41722=>'L', -41723=>'L', -41724=>'L', -41725=>'L', -41726=>'L', -41727=>'L', -41728=>'L', -41729=>'L', -41730=>'L', -41731=>'L', -41732=>'L', -41733=>'L', -41734=>'L', -41735=>'L', -41736=>'L', -41737=>'L', -41738=>'L', -41739=>'L', -41740=>'L', -41741=>'L', -41742=>'L', -41743=>'L', -41744=>'L', -41745=>'L', -41746=>'L', -41747=>'L', -41748=>'L', -41749=>'L', -41750=>'L', -41751=>'L', -41752=>'L', -41753=>'L', -41754=>'L', -41755=>'L', -41756=>'L', -41757=>'L', -41758=>'L', -41759=>'L', -41760=>'L', -41761=>'L', -41762=>'L', -41763=>'L', -41764=>'L', -41765=>'L', -41766=>'L', -41767=>'L', -41768=>'L', -41769=>'L', -41770=>'L', -41771=>'L', -41772=>'L', -41773=>'L', -41774=>'L', -41775=>'L', -41776=>'L', -41777=>'L', -41778=>'L', -41779=>'L', -41780=>'L', -41781=>'L', -41782=>'L', -41783=>'L', -41784=>'L', -41785=>'L', -41786=>'L', -41787=>'L', -41788=>'L', -41789=>'L', -41790=>'L', -41791=>'L', -41792=>'L', -41793=>'L', -41794=>'L', -41795=>'L', -41796=>'L', -41797=>'L', -41798=>'L', -41799=>'L', -41800=>'L', -41801=>'L', -41802=>'L', -41803=>'L', -41804=>'L', -41805=>'L', -41806=>'L', -41807=>'L', -41808=>'L', -41809=>'L', -41810=>'L', -41811=>'L', -41812=>'L', -41813=>'L', -41814=>'L', -41815=>'L', -41816=>'L', -41817=>'L', -41818=>'L', -41819=>'L', -41820=>'L', -41821=>'L', -41822=>'L', -41823=>'L', -41824=>'L', -41825=>'L', -41826=>'L', -41827=>'L', -41828=>'L', -41829=>'L', -41830=>'L', -41831=>'L', -41832=>'L', -41833=>'L', -41834=>'L', -41835=>'L', -41836=>'L', -41837=>'L', -41838=>'L', -41839=>'L', -41840=>'L', -41841=>'L', -41842=>'L', -41843=>'L', -41844=>'L', -41845=>'L', -41846=>'L', -41847=>'L', -41848=>'L', -41849=>'L', -41850=>'L', -41851=>'L', -41852=>'L', -41853=>'L', -41854=>'L', -41855=>'L', -41856=>'L', -41857=>'L', -41858=>'L', -41859=>'L', -41860=>'L', -41861=>'L', -41862=>'L', -41863=>'L', -41864=>'L', -41865=>'L', -41866=>'L', -41867=>'L', -41868=>'L', -41869=>'L', -41870=>'L', -41871=>'L', -41872=>'L', -41873=>'L', -41874=>'L', -41875=>'L', -41876=>'L', -41877=>'L', -41878=>'L', -41879=>'L', -41880=>'L', -41881=>'L', -41882=>'L', -41883=>'L', -41884=>'L', -41885=>'L', -41886=>'L', -41887=>'L', -41888=>'L', -41889=>'L', -41890=>'L', -41891=>'L', -41892=>'L', -41893=>'L', -41894=>'L', -41895=>'L', -41896=>'L', -41897=>'L', -41898=>'L', -41899=>'L', -41900=>'L', -41901=>'L', -41902=>'L', -41903=>'L', -41904=>'L', -41905=>'L', -41906=>'L', -41907=>'L', -41908=>'L', -41909=>'L', -41910=>'L', -41911=>'L', -41912=>'L', -41913=>'L', -41914=>'L', -41915=>'L', -41916=>'L', -41917=>'L', -41918=>'L', -41919=>'L', -41920=>'L', -41921=>'L', -41922=>'L', -41923=>'L', -41924=>'L', -41925=>'L', -41926=>'L', -41927=>'L', -41928=>'L', -41929=>'L', -41930=>'L', -41931=>'L', -41932=>'L', -41933=>'L', -41934=>'L', -41935=>'L', -41936=>'L', -41937=>'L', -41938=>'L', -41939=>'L', -41940=>'L', -41941=>'L', -41942=>'L', -41943=>'L', -41944=>'L', -41945=>'L', -41946=>'L', -41947=>'L', -41948=>'L', -41949=>'L', -41950=>'L', -41951=>'L', -41952=>'L', -41953=>'L', -41954=>'L', -41955=>'L', -41956=>'L', -41957=>'L', -41958=>'L', -41959=>'L', -41960=>'L', -41961=>'L', -41962=>'L', -41963=>'L', -41964=>'L', -41965=>'L', -41966=>'L', -41967=>'L', -41968=>'L', -41969=>'L', -41970=>'L', -41971=>'L', -41972=>'L', -41973=>'L', -41974=>'L', -41975=>'L', -41976=>'L', -41977=>'L', -41978=>'L', -41979=>'L', -41980=>'L', -41981=>'L', -41982=>'L', -41983=>'L', -41984=>'L', -41985=>'L', -41986=>'L', -41987=>'L', -41988=>'L', -41989=>'L', -41990=>'L', -41991=>'L', -41992=>'L', -41993=>'L', -41994=>'L', -41995=>'L', -41996=>'L', -41997=>'L', -41998=>'L', -41999=>'L', -42000=>'L', -42001=>'L', -42002=>'L', -42003=>'L', -42004=>'L', -42005=>'L', -42006=>'L', -42007=>'L', -42008=>'L', -42009=>'L', -42010=>'L', -42011=>'L', -42012=>'L', -42013=>'L', -42014=>'L', -42015=>'L', -42016=>'L', -42017=>'L', -42018=>'L', -42019=>'L', -42020=>'L', -42021=>'L', -42022=>'L', -42023=>'L', -42024=>'L', -42025=>'L', -42026=>'L', -42027=>'L', -42028=>'L', -42029=>'L', -42030=>'L', -42031=>'L', -42032=>'L', -42033=>'L', -42034=>'L', -42035=>'L', -42036=>'L', -42037=>'L', -42038=>'L', -42039=>'L', -42040=>'L', -42041=>'L', -42042=>'L', -42043=>'L', -42044=>'L', -42045=>'L', -42046=>'L', -42047=>'L', -42048=>'L', -42049=>'L', -42050=>'L', -42051=>'L', -42052=>'L', -42053=>'L', -42054=>'L', -42055=>'L', -42056=>'L', -42057=>'L', -42058=>'L', -42059=>'L', -42060=>'L', -42061=>'L', -42062=>'L', -42063=>'L', -42064=>'L', -42065=>'L', -42066=>'L', -42067=>'L', -42068=>'L', -42069=>'L', -42070=>'L', -42071=>'L', -42072=>'L', -42073=>'L', -42074=>'L', -42075=>'L', -42076=>'L', -42077=>'L', -42078=>'L', -42079=>'L', -42080=>'L', -42081=>'L', -42082=>'L', -42083=>'L', -42084=>'L', -42085=>'L', -42086=>'L', -42087=>'L', -42088=>'L', -42089=>'L', -42090=>'L', -42091=>'L', -42092=>'L', -42093=>'L', -42094=>'L', -42095=>'L', -42096=>'L', -42097=>'L', -42098=>'L', -42099=>'L', -42100=>'L', -42101=>'L', -42102=>'L', -42103=>'L', -42104=>'L', -42105=>'L', -42106=>'L', -42107=>'L', -42108=>'L', -42109=>'L', -42110=>'L', -42111=>'L', -42112=>'L', -42113=>'L', -42114=>'L', -42115=>'L', -42116=>'L', -42117=>'L', -42118=>'L', -42119=>'L', -42120=>'L', -42121=>'L', -42122=>'L', -42123=>'L', -42124=>'L', -42128=>'ON', -42129=>'ON', -42130=>'ON', -42131=>'ON', -42132=>'ON', -42133=>'ON', -42134=>'ON', -42135=>'ON', -42136=>'ON', -42137=>'ON', -42138=>'ON', -42139=>'ON', -42140=>'ON', -42141=>'ON', -42142=>'ON', -42143=>'ON', -42144=>'ON', -42145=>'ON', -42146=>'ON', -42147=>'ON', -42148=>'ON', -42149=>'ON', -42150=>'ON', -42151=>'ON', -42152=>'ON', -42153=>'ON', -42154=>'ON', -42155=>'ON', -42156=>'ON', -42157=>'ON', -42158=>'ON', -42159=>'ON', -42160=>'ON', -42161=>'ON', -42162=>'ON', -42163=>'ON', -42164=>'ON', -42165=>'ON', -42166=>'ON', -42167=>'ON', -42168=>'ON', -42169=>'ON', -42170=>'ON', -42171=>'ON', -42172=>'ON', -42173=>'ON', -42174=>'ON', -42175=>'ON', -42176=>'ON', -42177=>'ON', -42178=>'ON', -42179=>'ON', -42180=>'ON', -42181=>'ON', -42182=>'ON', -42752=>'ON', -42753=>'ON', -42754=>'ON', -42755=>'ON', -42756=>'ON', -42757=>'ON', -42758=>'ON', -42759=>'ON', -42760=>'ON', -42761=>'ON', -42762=>'ON', -42763=>'ON', -42764=>'ON', -42765=>'ON', -42766=>'ON', -42767=>'ON', -42768=>'ON', -42769=>'ON', -42770=>'ON', -42771=>'ON', -42772=>'ON', -42773=>'ON', -42774=>'ON', -42775=>'ON', -42776=>'ON', -42777=>'ON', -42778=>'ON', -42784=>'ON', -42785=>'ON', -43008=>'L', -43009=>'L', -43010=>'NSM', -43011=>'L', -43012=>'L', -43013=>'L', -43014=>'NSM', -43015=>'L', -43016=>'L', -43017=>'L', -43018=>'L', -43019=>'NSM', -43020=>'L', -43021=>'L', -43022=>'L', -43023=>'L', -43024=>'L', -43025=>'L', -43026=>'L', -43027=>'L', -43028=>'L', -43029=>'L', -43030=>'L', -43031=>'L', -43032=>'L', -43033=>'L', -43034=>'L', -43035=>'L', -43036=>'L', -43037=>'L', -43038=>'L', -43039=>'L', -43040=>'L', -43041=>'L', -43042=>'L', -43043=>'L', -43044=>'L', -43045=>'NSM', -43046=>'NSM', -43047=>'L', -43048=>'ON', -43049=>'ON', -43050=>'ON', -43051=>'ON', -43072=>'L', -43073=>'L', -43074=>'L', -43075=>'L', -43076=>'L', -43077=>'L', -43078=>'L', -43079=>'L', -43080=>'L', -43081=>'L', -43082=>'L', -43083=>'L', -43084=>'L', -43085=>'L', -43086=>'L', -43087=>'L', -43088=>'L', -43089=>'L', -43090=>'L', -43091=>'L', -43092=>'L', -43093=>'L', -43094=>'L', -43095=>'L', -43096=>'L', -43097=>'L', -43098=>'L', -43099=>'L', -43100=>'L', -43101=>'L', -43102=>'L', -43103=>'L', -43104=>'L', -43105=>'L', -43106=>'L', -43107=>'L', -43108=>'L', -43109=>'L', -43110=>'L', -43111=>'L', -43112=>'L', -43113=>'L', -43114=>'L', -43115=>'L', -43116=>'L', -43117=>'L', -43118=>'L', -43119=>'L', -43120=>'L', -43121=>'L', -43122=>'L', -43123=>'L', -43124=>'ON', -43125=>'ON', -43126=>'ON', -43127=>'ON', -44032=>'L', -55203=>'L', -55296=>'L', -56191=>'L', -56192=>'L', -56319=>'L', -56320=>'L', -57343=>'L', -57344=>'L', -63743=>'L', -63744=>'L', -63745=>'L', -63746=>'L', -63747=>'L', -63748=>'L', -63749=>'L', -63750=>'L', -63751=>'L', -63752=>'L', -63753=>'L', -63754=>'L', -63755=>'L', -63756=>'L', -63757=>'L', -63758=>'L', -63759=>'L', -63760=>'L', -63761=>'L', -63762=>'L', -63763=>'L', -63764=>'L', -63765=>'L', -63766=>'L', -63767=>'L', -63768=>'L', -63769=>'L', -63770=>'L', -63771=>'L', -63772=>'L', -63773=>'L', -63774=>'L', -63775=>'L', -63776=>'L', -63777=>'L', -63778=>'L', -63779=>'L', -63780=>'L', -63781=>'L', -63782=>'L', -63783=>'L', -63784=>'L', -63785=>'L', -63786=>'L', -63787=>'L', -63788=>'L', -63789=>'L', -63790=>'L', -63791=>'L', -63792=>'L', -63793=>'L', -63794=>'L', -63795=>'L', -63796=>'L', -63797=>'L', -63798=>'L', -63799=>'L', -63800=>'L', -63801=>'L', -63802=>'L', -63803=>'L', -63804=>'L', -63805=>'L', -63806=>'L', -63807=>'L', -63808=>'L', -63809=>'L', -63810=>'L', -63811=>'L', -63812=>'L', -63813=>'L', -63814=>'L', -63815=>'L', -63816=>'L', -63817=>'L', -63818=>'L', -63819=>'L', -63820=>'L', -63821=>'L', -63822=>'L', -63823=>'L', -63824=>'L', -63825=>'L', -63826=>'L', -63827=>'L', -63828=>'L', -63829=>'L', -63830=>'L', -63831=>'L', -63832=>'L', -63833=>'L', -63834=>'L', -63835=>'L', -63836=>'L', -63837=>'L', -63838=>'L', -63839=>'L', -63840=>'L', -63841=>'L', -63842=>'L', -63843=>'L', -63844=>'L', -63845=>'L', -63846=>'L', -63847=>'L', -63848=>'L', -63849=>'L', -63850=>'L', -63851=>'L', -63852=>'L', -63853=>'L', -63854=>'L', -63855=>'L', -63856=>'L', -63857=>'L', -63858=>'L', -63859=>'L', -63860=>'L', -63861=>'L', -63862=>'L', -63863=>'L', -63864=>'L', -63865=>'L', -63866=>'L', -63867=>'L', -63868=>'L', -63869=>'L', -63870=>'L', -63871=>'L', -63872=>'L', -63873=>'L', -63874=>'L', -63875=>'L', -63876=>'L', -63877=>'L', -63878=>'L', -63879=>'L', -63880=>'L', -63881=>'L', -63882=>'L', -63883=>'L', -63884=>'L', -63885=>'L', -63886=>'L', -63887=>'L', -63888=>'L', -63889=>'L', -63890=>'L', -63891=>'L', -63892=>'L', -63893=>'L', -63894=>'L', -63895=>'L', -63896=>'L', -63897=>'L', -63898=>'L', -63899=>'L', -63900=>'L', -63901=>'L', -63902=>'L', -63903=>'L', -63904=>'L', -63905=>'L', -63906=>'L', -63907=>'L', -63908=>'L', -63909=>'L', -63910=>'L', -63911=>'L', -63912=>'L', -63913=>'L', -63914=>'L', -63915=>'L', -63916=>'L', -63917=>'L', -63918=>'L', -63919=>'L', -63920=>'L', -63921=>'L', -63922=>'L', -63923=>'L', -63924=>'L', -63925=>'L', -63926=>'L', -63927=>'L', -63928=>'L', -63929=>'L', -63930=>'L', -63931=>'L', -63932=>'L', -63933=>'L', -63934=>'L', -63935=>'L', -63936=>'L', -63937=>'L', -63938=>'L', -63939=>'L', -63940=>'L', -63941=>'L', -63942=>'L', -63943=>'L', -63944=>'L', -63945=>'L', -63946=>'L', -63947=>'L', -63948=>'L', -63949=>'L', -63950=>'L', -63951=>'L', -63952=>'L', -63953=>'L', -63954=>'L', -63955=>'L', -63956=>'L', -63957=>'L', -63958=>'L', -63959=>'L', -63960=>'L', -63961=>'L', -63962=>'L', -63963=>'L', -63964=>'L', -63965=>'L', -63966=>'L', -63967=>'L', -63968=>'L', -63969=>'L', -63970=>'L', -63971=>'L', -63972=>'L', -63973=>'L', -63974=>'L', -63975=>'L', -63976=>'L', -63977=>'L', -63978=>'L', -63979=>'L', -63980=>'L', -63981=>'L', -63982=>'L', -63983=>'L', -63984=>'L', -63985=>'L', -63986=>'L', -63987=>'L', -63988=>'L', -63989=>'L', -63990=>'L', -63991=>'L', -63992=>'L', -63993=>'L', -63994=>'L', -63995=>'L', -63996=>'L', -63997=>'L', -63998=>'L', -63999=>'L', -64000=>'L', -64001=>'L', -64002=>'L', -64003=>'L', -64004=>'L', -64005=>'L', -64006=>'L', -64007=>'L', -64008=>'L', -64009=>'L', -64010=>'L', -64011=>'L', -64012=>'L', -64013=>'L', -64014=>'L', -64015=>'L', -64016=>'L', -64017=>'L', -64018=>'L', -64019=>'L', -64020=>'L', -64021=>'L', -64022=>'L', -64023=>'L', -64024=>'L', -64025=>'L', -64026=>'L', -64027=>'L', -64028=>'L', -64029=>'L', -64030=>'L', -64031=>'L', -64032=>'L', -64033=>'L', -64034=>'L', -64035=>'L', -64036=>'L', -64037=>'L', -64038=>'L', -64039=>'L', -64040=>'L', -64041=>'L', -64042=>'L', -64043=>'L', -64044=>'L', -64045=>'L', -64048=>'L', -64049=>'L', -64050=>'L', -64051=>'L', -64052=>'L', -64053=>'L', -64054=>'L', -64055=>'L', -64056=>'L', -64057=>'L', -64058=>'L', -64059=>'L', -64060=>'L', -64061=>'L', -64062=>'L', -64063=>'L', -64064=>'L', -64065=>'L', -64066=>'L', -64067=>'L', -64068=>'L', -64069=>'L', -64070=>'L', -64071=>'L', -64072=>'L', -64073=>'L', -64074=>'L', -64075=>'L', -64076=>'L', -64077=>'L', -64078=>'L', -64079=>'L', -64080=>'L', -64081=>'L', -64082=>'L', -64083=>'L', -64084=>'L', -64085=>'L', -64086=>'L', -64087=>'L', -64088=>'L', -64089=>'L', -64090=>'L', -64091=>'L', -64092=>'L', -64093=>'L', -64094=>'L', -64095=>'L', -64096=>'L', -64097=>'L', -64098=>'L', -64099=>'L', -64100=>'L', -64101=>'L', -64102=>'L', -64103=>'L', -64104=>'L', -64105=>'L', -64106=>'L', -64112=>'L', -64113=>'L', -64114=>'L', -64115=>'L', -64116=>'L', -64117=>'L', -64118=>'L', -64119=>'L', -64120=>'L', -64121=>'L', -64122=>'L', -64123=>'L', -64124=>'L', -64125=>'L', -64126=>'L', -64127=>'L', -64128=>'L', -64129=>'L', -64130=>'L', -64131=>'L', -64132=>'L', -64133=>'L', -64134=>'L', -64135=>'L', -64136=>'L', -64137=>'L', -64138=>'L', -64139=>'L', -64140=>'L', -64141=>'L', -64142=>'L', -64143=>'L', -64144=>'L', -64145=>'L', -64146=>'L', -64147=>'L', -64148=>'L', -64149=>'L', -64150=>'L', -64151=>'L', -64152=>'L', -64153=>'L', -64154=>'L', -64155=>'L', -64156=>'L', -64157=>'L', -64158=>'L', -64159=>'L', -64160=>'L', -64161=>'L', -64162=>'L', -64163=>'L', -64164=>'L', -64165=>'L', -64166=>'L', -64167=>'L', -64168=>'L', -64169=>'L', -64170=>'L', -64171=>'L', -64172=>'L', -64173=>'L', -64174=>'L', -64175=>'L', -64176=>'L', -64177=>'L', -64178=>'L', -64179=>'L', -64180=>'L', -64181=>'L', -64182=>'L', -64183=>'L', -64184=>'L', -64185=>'L', -64186=>'L', -64187=>'L', -64188=>'L', -64189=>'L', -64190=>'L', -64191=>'L', -64192=>'L', -64193=>'L', -64194=>'L', -64195=>'L', -64196=>'L', -64197=>'L', -64198=>'L', -64199=>'L', -64200=>'L', -64201=>'L', -64202=>'L', -64203=>'L', -64204=>'L', -64205=>'L', -64206=>'L', -64207=>'L', -64208=>'L', -64209=>'L', -64210=>'L', -64211=>'L', -64212=>'L', -64213=>'L', -64214=>'L', -64215=>'L', -64216=>'L', -64217=>'L', -64256=>'L', -64257=>'L', -64258=>'L', -64259=>'L', -64260=>'L', -64261=>'L', -64262=>'L', -64275=>'L', -64276=>'L', -64277=>'L', -64278=>'L', -64279=>'L', -64285=>'R', -64286=>'NSM', -64287=>'R', -64288=>'R', -64289=>'R', -64290=>'R', -64291=>'R', -64292=>'R', -64293=>'R', -64294=>'R', -64295=>'R', -64296=>'R', -64297=>'ES', -64298=>'R', -64299=>'R', -64300=>'R', -64301=>'R', -64302=>'R', -64303=>'R', -64304=>'R', -64305=>'R', -64306=>'R', -64307=>'R', -64308=>'R', -64309=>'R', -64310=>'R', -64312=>'R', -64313=>'R', -64314=>'R', -64315=>'R', -64316=>'R', -64318=>'R', -64320=>'R', -64321=>'R', -64323=>'R', -64324=>'R', -64326=>'R', -64327=>'R', -64328=>'R', -64329=>'R', -64330=>'R', -64331=>'R', -64332=>'R', -64333=>'R', -64334=>'R', -64335=>'R', -64336=>'AL', -64337=>'AL', -64338=>'AL', -64339=>'AL', -64340=>'AL', -64341=>'AL', -64342=>'AL', -64343=>'AL', -64344=>'AL', -64345=>'AL', -64346=>'AL', -64347=>'AL', -64348=>'AL', -64349=>'AL', -64350=>'AL', -64351=>'AL', -64352=>'AL', -64353=>'AL', -64354=>'AL', -64355=>'AL', -64356=>'AL', -64357=>'AL', -64358=>'AL', -64359=>'AL', -64360=>'AL', -64361=>'AL', -64362=>'AL', -64363=>'AL', -64364=>'AL', -64365=>'AL', -64366=>'AL', -64367=>'AL', -64368=>'AL', -64369=>'AL', -64370=>'AL', -64371=>'AL', -64372=>'AL', -64373=>'AL', -64374=>'AL', -64375=>'AL', -64376=>'AL', -64377=>'AL', -64378=>'AL', -64379=>'AL', -64380=>'AL', -64381=>'AL', -64382=>'AL', -64383=>'AL', -64384=>'AL', -64385=>'AL', -64386=>'AL', -64387=>'AL', -64388=>'AL', -64389=>'AL', -64390=>'AL', -64391=>'AL', -64392=>'AL', -64393=>'AL', -64394=>'AL', -64395=>'AL', -64396=>'AL', -64397=>'AL', -64398=>'AL', -64399=>'AL', -64400=>'AL', -64401=>'AL', -64402=>'AL', -64403=>'AL', -64404=>'AL', -64405=>'AL', -64406=>'AL', -64407=>'AL', -64408=>'AL', -64409=>'AL', -64410=>'AL', -64411=>'AL', -64412=>'AL', -64413=>'AL', -64414=>'AL', -64415=>'AL', -64416=>'AL', -64417=>'AL', -64418=>'AL', -64419=>'AL', -64420=>'AL', -64421=>'AL', -64422=>'AL', -64423=>'AL', -64424=>'AL', -64425=>'AL', -64426=>'AL', -64427=>'AL', -64428=>'AL', -64429=>'AL', -64430=>'AL', -64431=>'AL', -64432=>'AL', -64433=>'AL', -64467=>'AL', -64468=>'AL', -64469=>'AL', -64470=>'AL', -64471=>'AL', -64472=>'AL', -64473=>'AL', -64474=>'AL', -64475=>'AL', -64476=>'AL', -64477=>'AL', -64478=>'AL', -64479=>'AL', -64480=>'AL', -64481=>'AL', -64482=>'AL', -64483=>'AL', -64484=>'AL', -64485=>'AL', -64486=>'AL', -64487=>'AL', -64488=>'AL', -64489=>'AL', -64490=>'AL', -64491=>'AL', -64492=>'AL', -64493=>'AL', -64494=>'AL', -64495=>'AL', -64496=>'AL', -64497=>'AL', -64498=>'AL', -64499=>'AL', -64500=>'AL', -64501=>'AL', -64502=>'AL', -64503=>'AL', -64504=>'AL', -64505=>'AL', -64506=>'AL', -64507=>'AL', -64508=>'AL', -64509=>'AL', -64510=>'AL', -64511=>'AL', -64512=>'AL', -64513=>'AL', -64514=>'AL', -64515=>'AL', -64516=>'AL', -64517=>'AL', -64518=>'AL', -64519=>'AL', -64520=>'AL', -64521=>'AL', -64522=>'AL', -64523=>'AL', -64524=>'AL', -64525=>'AL', -64526=>'AL', -64527=>'AL', -64528=>'AL', -64529=>'AL', -64530=>'AL', -64531=>'AL', -64532=>'AL', -64533=>'AL', -64534=>'AL', -64535=>'AL', -64536=>'AL', -64537=>'AL', -64538=>'AL', -64539=>'AL', -64540=>'AL', -64541=>'AL', -64542=>'AL', -64543=>'AL', -64544=>'AL', -64545=>'AL', -64546=>'AL', -64547=>'AL', -64548=>'AL', -64549=>'AL', -64550=>'AL', -64551=>'AL', -64552=>'AL', -64553=>'AL', -64554=>'AL', -64555=>'AL', -64556=>'AL', -64557=>'AL', -64558=>'AL', -64559=>'AL', -64560=>'AL', -64561=>'AL', -64562=>'AL', -64563=>'AL', -64564=>'AL', -64565=>'AL', -64566=>'AL', -64567=>'AL', -64568=>'AL', -64569=>'AL', -64570=>'AL', -64571=>'AL', -64572=>'AL', -64573=>'AL', -64574=>'AL', -64575=>'AL', -64576=>'AL', -64577=>'AL', -64578=>'AL', -64579=>'AL', -64580=>'AL', -64581=>'AL', -64582=>'AL', -64583=>'AL', -64584=>'AL', -64585=>'AL', -64586=>'AL', -64587=>'AL', -64588=>'AL', -64589=>'AL', -64590=>'AL', -64591=>'AL', -64592=>'AL', -64593=>'AL', -64594=>'AL', -64595=>'AL', -64596=>'AL', -64597=>'AL', -64598=>'AL', -64599=>'AL', -64600=>'AL', -64601=>'AL', -64602=>'AL', -64603=>'AL', -64604=>'AL', -64605=>'AL', -64606=>'AL', -64607=>'AL', -64608=>'AL', -64609=>'AL', -64610=>'AL', -64611=>'AL', -64612=>'AL', -64613=>'AL', -64614=>'AL', -64615=>'AL', -64616=>'AL', -64617=>'AL', -64618=>'AL', -64619=>'AL', -64620=>'AL', -64621=>'AL', -64622=>'AL', -64623=>'AL', -64624=>'AL', -64625=>'AL', -64626=>'AL', -64627=>'AL', -64628=>'AL', -64629=>'AL', -64630=>'AL', -64631=>'AL', -64632=>'AL', -64633=>'AL', -64634=>'AL', -64635=>'AL', -64636=>'AL', -64637=>'AL', -64638=>'AL', -64639=>'AL', -64640=>'AL', -64641=>'AL', -64642=>'AL', -64643=>'AL', -64644=>'AL', -64645=>'AL', -64646=>'AL', -64647=>'AL', -64648=>'AL', -64649=>'AL', -64650=>'AL', -64651=>'AL', -64652=>'AL', -64653=>'AL', -64654=>'AL', -64655=>'AL', -64656=>'AL', -64657=>'AL', -64658=>'AL', -64659=>'AL', -64660=>'AL', -64661=>'AL', -64662=>'AL', -64663=>'AL', -64664=>'AL', -64665=>'AL', -64666=>'AL', -64667=>'AL', -64668=>'AL', -64669=>'AL', -64670=>'AL', -64671=>'AL', -64672=>'AL', -64673=>'AL', -64674=>'AL', -64675=>'AL', -64676=>'AL', -64677=>'AL', -64678=>'AL', -64679=>'AL', -64680=>'AL', -64681=>'AL', -64682=>'AL', -64683=>'AL', -64684=>'AL', -64685=>'AL', -64686=>'AL', -64687=>'AL', -64688=>'AL', -64689=>'AL', -64690=>'AL', -64691=>'AL', -64692=>'AL', -64693=>'AL', -64694=>'AL', -64695=>'AL', -64696=>'AL', -64697=>'AL', -64698=>'AL', -64699=>'AL', -64700=>'AL', -64701=>'AL', -64702=>'AL', -64703=>'AL', -64704=>'AL', -64705=>'AL', -64706=>'AL', -64707=>'AL', -64708=>'AL', -64709=>'AL', -64710=>'AL', -64711=>'AL', -64712=>'AL', -64713=>'AL', -64714=>'AL', -64715=>'AL', -64716=>'AL', -64717=>'AL', -64718=>'AL', -64719=>'AL', -64720=>'AL', -64721=>'AL', -64722=>'AL', -64723=>'AL', -64724=>'AL', -64725=>'AL', -64726=>'AL', -64727=>'AL', -64728=>'AL', -64729=>'AL', -64730=>'AL', -64731=>'AL', -64732=>'AL', -64733=>'AL', -64734=>'AL', -64735=>'AL', -64736=>'AL', -64737=>'AL', -64738=>'AL', -64739=>'AL', -64740=>'AL', -64741=>'AL', -64742=>'AL', -64743=>'AL', -64744=>'AL', -64745=>'AL', -64746=>'AL', -64747=>'AL', -64748=>'AL', -64749=>'AL', -64750=>'AL', -64751=>'AL', -64752=>'AL', -64753=>'AL', -64754=>'AL', -64755=>'AL', -64756=>'AL', -64757=>'AL', -64758=>'AL', -64759=>'AL', -64760=>'AL', -64761=>'AL', -64762=>'AL', -64763=>'AL', -64764=>'AL', -64765=>'AL', -64766=>'AL', -64767=>'AL', -64768=>'AL', -64769=>'AL', -64770=>'AL', -64771=>'AL', -64772=>'AL', -64773=>'AL', -64774=>'AL', -64775=>'AL', -64776=>'AL', -64777=>'AL', -64778=>'AL', -64779=>'AL', -64780=>'AL', -64781=>'AL', -64782=>'AL', -64783=>'AL', -64784=>'AL', -64785=>'AL', -64786=>'AL', -64787=>'AL', -64788=>'AL', -64789=>'AL', -64790=>'AL', -64791=>'AL', -64792=>'AL', -64793=>'AL', -64794=>'AL', -64795=>'AL', -64796=>'AL', -64797=>'AL', -64798=>'AL', -64799=>'AL', -64800=>'AL', -64801=>'AL', -64802=>'AL', -64803=>'AL', -64804=>'AL', -64805=>'AL', -64806=>'AL', -64807=>'AL', -64808=>'AL', -64809=>'AL', -64810=>'AL', -64811=>'AL', -64812=>'AL', -64813=>'AL', -64814=>'AL', -64815=>'AL', -64816=>'AL', -64817=>'AL', -64818=>'AL', -64819=>'AL', -64820=>'AL', -64821=>'AL', -64822=>'AL', -64823=>'AL', -64824=>'AL', -64825=>'AL', -64826=>'AL', -64827=>'AL', -64828=>'AL', -64829=>'AL', -64830=>'ON', -64831=>'ON', -64848=>'AL', -64849=>'AL', -64850=>'AL', -64851=>'AL', -64852=>'AL', -64853=>'AL', -64854=>'AL', -64855=>'AL', -64856=>'AL', -64857=>'AL', -64858=>'AL', -64859=>'AL', -64860=>'AL', -64861=>'AL', -64862=>'AL', -64863=>'AL', -64864=>'AL', -64865=>'AL', -64866=>'AL', -64867=>'AL', -64868=>'AL', -64869=>'AL', -64870=>'AL', -64871=>'AL', -64872=>'AL', -64873=>'AL', -64874=>'AL', -64875=>'AL', -64876=>'AL', -64877=>'AL', -64878=>'AL', -64879=>'AL', -64880=>'AL', -64881=>'AL', -64882=>'AL', -64883=>'AL', -64884=>'AL', -64885=>'AL', -64886=>'AL', -64887=>'AL', -64888=>'AL', -64889=>'AL', -64890=>'AL', -64891=>'AL', -64892=>'AL', -64893=>'AL', -64894=>'AL', -64895=>'AL', -64896=>'AL', -64897=>'AL', -64898=>'AL', -64899=>'AL', -64900=>'AL', -64901=>'AL', -64902=>'AL', -64903=>'AL', -64904=>'AL', -64905=>'AL', -64906=>'AL', -64907=>'AL', -64908=>'AL', -64909=>'AL', -64910=>'AL', -64911=>'AL', -64914=>'AL', -64915=>'AL', -64916=>'AL', -64917=>'AL', -64918=>'AL', -64919=>'AL', -64920=>'AL', -64921=>'AL', -64922=>'AL', -64923=>'AL', -64924=>'AL', -64925=>'AL', -64926=>'AL', -64927=>'AL', -64928=>'AL', -64929=>'AL', -64930=>'AL', -64931=>'AL', -64932=>'AL', -64933=>'AL', -64934=>'AL', -64935=>'AL', -64936=>'AL', -64937=>'AL', -64938=>'AL', -64939=>'AL', -64940=>'AL', -64941=>'AL', -64942=>'AL', -64943=>'AL', -64944=>'AL', -64945=>'AL', -64946=>'AL', -64947=>'AL', -64948=>'AL', -64949=>'AL', -64950=>'AL', -64951=>'AL', -64952=>'AL', -64953=>'AL', -64954=>'AL', -64955=>'AL', -64956=>'AL', -64957=>'AL', -64958=>'AL', -64959=>'AL', -64960=>'AL', -64961=>'AL', -64962=>'AL', -64963=>'AL', -64964=>'AL', -64965=>'AL', -64966=>'AL', -64967=>'AL', -65008=>'AL', -65009=>'AL', -65010=>'AL', -65011=>'AL', -65012=>'AL', -65013=>'AL', -65014=>'AL', -65015=>'AL', -65016=>'AL', -65017=>'AL', -65018=>'AL', -65019=>'AL', -65020=>'AL', -65021=>'ON', -65024=>'NSM', -65025=>'NSM', -65026=>'NSM', -65027=>'NSM', -65028=>'NSM', -65029=>'NSM', -65030=>'NSM', -65031=>'NSM', -65032=>'NSM', -65033=>'NSM', -65034=>'NSM', -65035=>'NSM', -65036=>'NSM', -65037=>'NSM', -65038=>'NSM', -65039=>'NSM', -65040=>'ON', -65041=>'ON', -65042=>'ON', -65043=>'ON', -65044=>'ON', -65045=>'ON', -65046=>'ON', -65047=>'ON', -65048=>'ON', -65049=>'ON', -65056=>'NSM', -65057=>'NSM', -65058=>'NSM', -65059=>'NSM', -65072=>'ON', -65073=>'ON', -65074=>'ON', -65075=>'ON', -65076=>'ON', -65077=>'ON', -65078=>'ON', -65079=>'ON', -65080=>'ON', -65081=>'ON', -65082=>'ON', -65083=>'ON', -65084=>'ON', -65085=>'ON', -65086=>'ON', -65087=>'ON', -65088=>'ON', -65089=>'ON', -65090=>'ON', -65091=>'ON', -65092=>'ON', -65093=>'ON', -65094=>'ON', -65095=>'ON', -65096=>'ON', -65097=>'ON', -65098=>'ON', -65099=>'ON', -65100=>'ON', -65101=>'ON', -65102=>'ON', -65103=>'ON', -65104=>'CS', -65105=>'ON', -65106=>'CS', -65108=>'ON', -65109=>'CS', -65110=>'ON', -65111=>'ON', -65112=>'ON', -65113=>'ON', -65114=>'ON', -65115=>'ON', -65116=>'ON', -65117=>'ON', -65118=>'ON', -65119=>'ET', -65120=>'ON', -65121=>'ON', -65122=>'ES', -65123=>'ES', -65124=>'ON', -65125=>'ON', -65126=>'ON', -65128=>'ON', -65129=>'ET', -65130=>'ET', -65131=>'ON', -65136=>'AL', -65137=>'AL', -65138=>'AL', -65139=>'AL', -65140=>'AL', -65142=>'AL', -65143=>'AL', -65144=>'AL', -65145=>'AL', -65146=>'AL', -65147=>'AL', -65148=>'AL', -65149=>'AL', -65150=>'AL', -65151=>'AL', -65152=>'AL', -65153=>'AL', -65154=>'AL', -65155=>'AL', -65156=>'AL', -65157=>'AL', -65158=>'AL', -65159=>'AL', -65160=>'AL', -65161=>'AL', -65162=>'AL', -65163=>'AL', -65164=>'AL', -65165=>'AL', -65166=>'AL', -65167=>'AL', -65168=>'AL', -65169=>'AL', -65170=>'AL', -65171=>'AL', -65172=>'AL', -65173=>'AL', -65174=>'AL', -65175=>'AL', -65176=>'AL', -65177=>'AL', -65178=>'AL', -65179=>'AL', -65180=>'AL', -65181=>'AL', -65182=>'AL', -65183=>'AL', -65184=>'AL', -65185=>'AL', -65186=>'AL', -65187=>'AL', -65188=>'AL', -65189=>'AL', -65190=>'AL', -65191=>'AL', -65192=>'AL', -65193=>'AL', -65194=>'AL', -65195=>'AL', -65196=>'AL', -65197=>'AL', -65198=>'AL', -65199=>'AL', -65200=>'AL', -65201=>'AL', -65202=>'AL', -65203=>'AL', -65204=>'AL', -65205=>'AL', -65206=>'AL', -65207=>'AL', -65208=>'AL', -65209=>'AL', -65210=>'AL', -65211=>'AL', -65212=>'AL', -65213=>'AL', -65214=>'AL', -65215=>'AL', -65216=>'AL', -65217=>'AL', -65218=>'AL', -65219=>'AL', -65220=>'AL', -65221=>'AL', -65222=>'AL', -65223=>'AL', -65224=>'AL', -65225=>'AL', -65226=>'AL', -65227=>'AL', -65228=>'AL', -65229=>'AL', -65230=>'AL', -65231=>'AL', -65232=>'AL', -65233=>'AL', -65234=>'AL', -65235=>'AL', -65236=>'AL', -65237=>'AL', -65238=>'AL', -65239=>'AL', -65240=>'AL', -65241=>'AL', -65242=>'AL', -65243=>'AL', -65244=>'AL', -65245=>'AL', -65246=>'AL', -65247=>'AL', -65248=>'AL', -65249=>'AL', -65250=>'AL', -65251=>'AL', -65252=>'AL', -65253=>'AL', -65254=>'AL', -65255=>'AL', -65256=>'AL', -65257=>'AL', -65258=>'AL', -65259=>'AL', -65260=>'AL', -65261=>'AL', -65262=>'AL', -65263=>'AL', -65264=>'AL', -65265=>'AL', -65266=>'AL', -65267=>'AL', -65268=>'AL', -65269=>'AL', -65270=>'AL', -65271=>'AL', -65272=>'AL', -65273=>'AL', -65274=>'AL', -65275=>'AL', -65276=>'AL', -65279=>'BN', -65281=>'ON', -65282=>'ON', -65283=>'ET', -65284=>'ET', -65285=>'ET', -65286=>'ON', -65287=>'ON', -65288=>'ON', -65289=>'ON', -65290=>'ON', -65291=>'ES', -65292=>'CS', -65293=>'ES', -65294=>'CS', -65295=>'CS', -65296=>'EN', -65297=>'EN', -65298=>'EN', -65299=>'EN', -65300=>'EN', -65301=>'EN', -65302=>'EN', -65303=>'EN', -65304=>'EN', -65305=>'EN', -65306=>'CS', -65307=>'ON', -65308=>'ON', -65309=>'ON', -65310=>'ON', -65311=>'ON', -65312=>'ON', -65313=>'L', -65314=>'L', -65315=>'L', -65316=>'L', -65317=>'L', -65318=>'L', -65319=>'L', -65320=>'L', -65321=>'L', -65322=>'L', -65323=>'L', -65324=>'L', -65325=>'L', -65326=>'L', -65327=>'L', -65328=>'L', -65329=>'L', -65330=>'L', -65331=>'L', -65332=>'L', -65333=>'L', -65334=>'L', -65335=>'L', -65336=>'L', -65337=>'L', -65338=>'L', -65339=>'ON', -65340=>'ON', -65341=>'ON', -65342=>'ON', -65343=>'ON', -65344=>'ON', -65345=>'L', -65346=>'L', -65347=>'L', -65348=>'L', -65349=>'L', -65350=>'L', -65351=>'L', -65352=>'L', -65353=>'L', -65354=>'L', -65355=>'L', -65356=>'L', -65357=>'L', -65358=>'L', -65359=>'L', -65360=>'L', -65361=>'L', -65362=>'L', -65363=>'L', -65364=>'L', -65365=>'L', -65366=>'L', -65367=>'L', -65368=>'L', -65369=>'L', -65370=>'L', -65371=>'ON', -65372=>'ON', -65373=>'ON', -65374=>'ON', -65375=>'ON', -65376=>'ON', -65377=>'ON', -65378=>'ON', -65379=>'ON', -65380=>'ON', -65381=>'ON', -65382=>'L', -65383=>'L', -65384=>'L', -65385=>'L', -65386=>'L', -65387=>'L', -65388=>'L', -65389=>'L', -65390=>'L', -65391=>'L', -65392=>'L', -65393=>'L', -65394=>'L', -65395=>'L', -65396=>'L', -65397=>'L', -65398=>'L', -65399=>'L', -65400=>'L', -65401=>'L', -65402=>'L', -65403=>'L', -65404=>'L', -65405=>'L', -65406=>'L', -65407=>'L', -65408=>'L', -65409=>'L', -65410=>'L', -65411=>'L', -65412=>'L', -65413=>'L', -65414=>'L', -65415=>'L', -65416=>'L', -65417=>'L', -65418=>'L', -65419=>'L', -65420=>'L', -65421=>'L', -65422=>'L', -65423=>'L', -65424=>'L', -65425=>'L', -65426=>'L', -65427=>'L', -65428=>'L', -65429=>'L', -65430=>'L', -65431=>'L', -65432=>'L', -65433=>'L', -65434=>'L', -65435=>'L', -65436=>'L', -65437=>'L', -65438=>'L', -65439=>'L', -65440=>'L', -65441=>'L', -65442=>'L', -65443=>'L', -65444=>'L', -65445=>'L', -65446=>'L', -65447=>'L', -65448=>'L', -65449=>'L', -65450=>'L', -65451=>'L', -65452=>'L', -65453=>'L', -65454=>'L', -65455=>'L', -65456=>'L', -65457=>'L', -65458=>'L', -65459=>'L', -65460=>'L', -65461=>'L', -65462=>'L', -65463=>'L', -65464=>'L', -65465=>'L', -65466=>'L', -65467=>'L', -65468=>'L', -65469=>'L', -65470=>'L', -65474=>'L', -65475=>'L', -65476=>'L', -65477=>'L', -65478=>'L', -65479=>'L', -65482=>'L', -65483=>'L', -65484=>'L', -65485=>'L', -65486=>'L', -65487=>'L', -65490=>'L', -65491=>'L', -65492=>'L', -65493=>'L', -65494=>'L', -65495=>'L', -65498=>'L', -65499=>'L', -65500=>'L', -65504=>'ET', -65505=>'ET', -65506=>'ON', -65507=>'ON', -65508=>'ON', -65509=>'ET', -65510=>'ET', -65512=>'ON', -65513=>'ON', -65514=>'ON', -65515=>'ON', -65516=>'ON', -65517=>'ON', -65518=>'ON', -65529=>'ON', -65530=>'ON', -65531=>'ON', -65532=>'ON', -65533=>'ON', -65536=>'L', -65537=>'L', -65538=>'L', -65539=>'L', -65540=>'L', -65541=>'L', -65542=>'L', -65543=>'L', -65544=>'L', -65545=>'L', -65546=>'L', -65547=>'L', -65549=>'L', -65550=>'L', -65551=>'L', -65552=>'L', -65553=>'L', -65554=>'L', -65555=>'L', -65556=>'L', -65557=>'L', -65558=>'L', -65559=>'L', -65560=>'L', -65561=>'L', -65562=>'L', -65563=>'L', -65564=>'L', -65565=>'L', -65566=>'L', -65567=>'L', -65568=>'L', -65569=>'L', -65570=>'L', -65571=>'L', -65572=>'L', -65573=>'L', -65574=>'L', -65576=>'L', -65577=>'L', -65578=>'L', -65579=>'L', -65580=>'L', -65581=>'L', -65582=>'L', -65583=>'L', -65584=>'L', -65585=>'L', -65586=>'L', -65587=>'L', -65588=>'L', -65589=>'L', -65590=>'L', -65591=>'L', -65592=>'L', -65593=>'L', -65594=>'L', -65596=>'L', -65597=>'L', -65599=>'L', -65600=>'L', -65601=>'L', -65602=>'L', -65603=>'L', -65604=>'L', -65605=>'L', -65606=>'L', -65607=>'L', -65608=>'L', -65609=>'L', -65610=>'L', -65611=>'L', -65612=>'L', -65613=>'L', -65616=>'L', -65617=>'L', -65618=>'L', -65619=>'L', -65620=>'L', -65621=>'L', -65622=>'L', -65623=>'L', -65624=>'L', -65625=>'L', -65626=>'L', -65627=>'L', -65628=>'L', -65629=>'L', -65664=>'L', -65665=>'L', -65666=>'L', -65667=>'L', -65668=>'L', -65669=>'L', -65670=>'L', -65671=>'L', -65672=>'L', -65673=>'L', -65674=>'L', -65675=>'L', -65676=>'L', -65677=>'L', -65678=>'L', -65679=>'L', -65680=>'L', -65681=>'L', -65682=>'L', -65683=>'L', -65684=>'L', -65685=>'L', -65686=>'L', -65687=>'L', -65688=>'L', -65689=>'L', -65690=>'L', -65691=>'L', -65692=>'L', -65693=>'L', -65694=>'L', -65695=>'L', -65696=>'L', -65697=>'L', -65698=>'L', -65699=>'L', -65700=>'L', -65701=>'L', -65702=>'L', -65703=>'L', -65704=>'L', -65705=>'L', -65706=>'L', -65707=>'L', -65708=>'L', -65709=>'L', -65710=>'L', -65711=>'L', -65712=>'L', -65713=>'L', -65714=>'L', -65715=>'L', -65716=>'L', -65717=>'L', -65718=>'L', -65719=>'L', -65720=>'L', -65721=>'L', -65722=>'L', -65723=>'L', -65724=>'L', -65725=>'L', -65726=>'L', -65727=>'L', -65728=>'L', -65729=>'L', -65730=>'L', -65731=>'L', -65732=>'L', -65733=>'L', -65734=>'L', -65735=>'L', -65736=>'L', -65737=>'L', -65738=>'L', -65739=>'L', -65740=>'L', -65741=>'L', -65742=>'L', -65743=>'L', -65744=>'L', -65745=>'L', -65746=>'L', -65747=>'L', -65748=>'L', -65749=>'L', -65750=>'L', -65751=>'L', -65752=>'L', -65753=>'L', -65754=>'L', -65755=>'L', -65756=>'L', -65757=>'L', -65758=>'L', -65759=>'L', -65760=>'L', -65761=>'L', -65762=>'L', -65763=>'L', -65764=>'L', -65765=>'L', -65766=>'L', -65767=>'L', -65768=>'L', -65769=>'L', -65770=>'L', -65771=>'L', -65772=>'L', -65773=>'L', -65774=>'L', -65775=>'L', -65776=>'L', -65777=>'L', -65778=>'L', -65779=>'L', -65780=>'L', -65781=>'L', -65782=>'L', -65783=>'L', -65784=>'L', -65785=>'L', -65786=>'L', -65792=>'L', -65793=>'ON', -65794=>'L', -65799=>'L', -65800=>'L', -65801=>'L', -65802=>'L', -65803=>'L', -65804=>'L', -65805=>'L', -65806=>'L', -65807=>'L', -65808=>'L', -65809=>'L', -65810=>'L', -65811=>'L', -65812=>'L', -65813=>'L', -65814=>'L', -65815=>'L', -65816=>'L', -65817=>'L', -65818=>'L', -65819=>'L', -65820=>'L', -65821=>'L', -65822=>'L', -65823=>'L', -65824=>'L', -65825=>'L', -65826=>'L', -65827=>'L', -65828=>'L', -65829=>'L', -65830=>'L', -65831=>'L', -65832=>'L', -65833=>'L', -65834=>'L', -65835=>'L', -65836=>'L', -65837=>'L', -65838=>'L', -65839=>'L', -65840=>'L', -65841=>'L', -65842=>'L', -65843=>'L', -65847=>'L', -65848=>'L', -65849=>'L', -65850=>'L', -65851=>'L', -65852=>'L', -65853=>'L', -65854=>'L', -65855=>'L', -65856=>'ON', -65857=>'ON', -65858=>'ON', -65859=>'ON', -65860=>'ON', -65861=>'ON', -65862=>'ON', -65863=>'ON', -65864=>'ON', -65865=>'ON', -65866=>'ON', -65867=>'ON', -65868=>'ON', -65869=>'ON', -65870=>'ON', -65871=>'ON', -65872=>'ON', -65873=>'ON', -65874=>'ON', -65875=>'ON', -65876=>'ON', -65877=>'ON', -65878=>'ON', -65879=>'ON', -65880=>'ON', -65881=>'ON', -65882=>'ON', -65883=>'ON', -65884=>'ON', -65885=>'ON', -65886=>'ON', -65887=>'ON', -65888=>'ON', -65889=>'ON', -65890=>'ON', -65891=>'ON', -65892=>'ON', -65893=>'ON', -65894=>'ON', -65895=>'ON', -65896=>'ON', -65897=>'ON', -65898=>'ON', -65899=>'ON', -65900=>'ON', -65901=>'ON', -65902=>'ON', -65903=>'ON', -65904=>'ON', -65905=>'ON', -65906=>'ON', -65907=>'ON', -65908=>'ON', -65909=>'ON', -65910=>'ON', -65911=>'ON', -65912=>'ON', -65913=>'ON', -65914=>'ON', -65915=>'ON', -65916=>'ON', -65917=>'ON', -65918=>'ON', -65919=>'ON', -65920=>'ON', -65921=>'ON', -65922=>'ON', -65923=>'ON', -65924=>'ON', -65925=>'ON', -65926=>'ON', -65927=>'ON', -65928=>'ON', -65929=>'ON', -65930=>'ON', -66304=>'L', -66305=>'L', -66306=>'L', -66307=>'L', -66308=>'L', -66309=>'L', -66310=>'L', -66311=>'L', -66312=>'L', -66313=>'L', -66314=>'L', -66315=>'L', -66316=>'L', -66317=>'L', -66318=>'L', -66319=>'L', -66320=>'L', -66321=>'L', -66322=>'L', -66323=>'L', -66324=>'L', -66325=>'L', -66326=>'L', -66327=>'L', -66328=>'L', -66329=>'L', -66330=>'L', -66331=>'L', -66332=>'L', -66333=>'L', -66334=>'L', -66336=>'L', -66337=>'L', -66338=>'L', -66339=>'L', -66352=>'L', -66353=>'L', -66354=>'L', -66355=>'L', -66356=>'L', -66357=>'L', -66358=>'L', -66359=>'L', -66360=>'L', -66361=>'L', -66362=>'L', -66363=>'L', -66364=>'L', -66365=>'L', -66366=>'L', -66367=>'L', -66368=>'L', -66369=>'L', -66370=>'L', -66371=>'L', -66372=>'L', -66373=>'L', -66374=>'L', -66375=>'L', -66376=>'L', -66377=>'L', -66378=>'L', -66432=>'L', -66433=>'L', -66434=>'L', -66435=>'L', -66436=>'L', -66437=>'L', -66438=>'L', -66439=>'L', -66440=>'L', -66441=>'L', -66442=>'L', -66443=>'L', -66444=>'L', -66445=>'L', -66446=>'L', -66447=>'L', -66448=>'L', -66449=>'L', -66450=>'L', -66451=>'L', -66452=>'L', -66453=>'L', -66454=>'L', -66455=>'L', -66456=>'L', -66457=>'L', -66458=>'L', -66459=>'L', -66460=>'L', -66461=>'L', -66463=>'L', -66464=>'L', -66465=>'L', -66466=>'L', -66467=>'L', -66468=>'L', -66469=>'L', -66470=>'L', -66471=>'L', -66472=>'L', -66473=>'L', -66474=>'L', -66475=>'L', -66476=>'L', -66477=>'L', -66478=>'L', -66479=>'L', -66480=>'L', -66481=>'L', -66482=>'L', -66483=>'L', -66484=>'L', -66485=>'L', -66486=>'L', -66487=>'L', -66488=>'L', -66489=>'L', -66490=>'L', -66491=>'L', -66492=>'L', -66493=>'L', -66494=>'L', -66495=>'L', -66496=>'L', -66497=>'L', -66498=>'L', -66499=>'L', -66504=>'L', -66505=>'L', -66506=>'L', -66507=>'L', -66508=>'L', -66509=>'L', -66510=>'L', -66511=>'L', -66512=>'L', -66513=>'L', -66514=>'L', -66515=>'L', -66516=>'L', -66517=>'L', -66560=>'L', -66561=>'L', -66562=>'L', -66563=>'L', -66564=>'L', -66565=>'L', -66566=>'L', -66567=>'L', -66568=>'L', -66569=>'L', -66570=>'L', -66571=>'L', -66572=>'L', -66573=>'L', -66574=>'L', -66575=>'L', -66576=>'L', -66577=>'L', -66578=>'L', -66579=>'L', -66580=>'L', -66581=>'L', -66582=>'L', -66583=>'L', -66584=>'L', -66585=>'L', -66586=>'L', -66587=>'L', -66588=>'L', -66589=>'L', -66590=>'L', -66591=>'L', -66592=>'L', -66593=>'L', -66594=>'L', -66595=>'L', -66596=>'L', -66597=>'L', -66598=>'L', -66599=>'L', -66600=>'L', -66601=>'L', -66602=>'L', -66603=>'L', -66604=>'L', -66605=>'L', -66606=>'L', -66607=>'L', -66608=>'L', -66609=>'L', -66610=>'L', -66611=>'L', -66612=>'L', -66613=>'L', -66614=>'L', -66615=>'L', -66616=>'L', -66617=>'L', -66618=>'L', -66619=>'L', -66620=>'L', -66621=>'L', -66622=>'L', -66623=>'L', -66624=>'L', -66625=>'L', -66626=>'L', -66627=>'L', -66628=>'L', -66629=>'L', -66630=>'L', -66631=>'L', -66632=>'L', -66633=>'L', -66634=>'L', -66635=>'L', -66636=>'L', -66637=>'L', -66638=>'L', -66639=>'L', -66640=>'L', -66641=>'L', -66642=>'L', -66643=>'L', -66644=>'L', -66645=>'L', -66646=>'L', -66647=>'L', -66648=>'L', -66649=>'L', -66650=>'L', -66651=>'L', -66652=>'L', -66653=>'L', -66654=>'L', -66655=>'L', -66656=>'L', -66657=>'L', -66658=>'L', -66659=>'L', -66660=>'L', -66661=>'L', -66662=>'L', -66663=>'L', -66664=>'L', -66665=>'L', -66666=>'L', -66667=>'L', -66668=>'L', -66669=>'L', -66670=>'L', -66671=>'L', -66672=>'L', -66673=>'L', -66674=>'L', -66675=>'L', -66676=>'L', -66677=>'L', -66678=>'L', -66679=>'L', -66680=>'L', -66681=>'L', -66682=>'L', -66683=>'L', -66684=>'L', -66685=>'L', -66686=>'L', -66687=>'L', -66688=>'L', -66689=>'L', -66690=>'L', -66691=>'L', -66692=>'L', -66693=>'L', -66694=>'L', -66695=>'L', -66696=>'L', -66697=>'L', -66698=>'L', -66699=>'L', -66700=>'L', -66701=>'L', -66702=>'L', -66703=>'L', -66704=>'L', -66705=>'L', -66706=>'L', -66707=>'L', -66708=>'L', -66709=>'L', -66710=>'L', -66711=>'L', -66712=>'L', -66713=>'L', -66714=>'L', -66715=>'L', -66716=>'L', -66717=>'L', -66720=>'L', -66721=>'L', -66722=>'L', -66723=>'L', -66724=>'L', -66725=>'L', -66726=>'L', -66727=>'L', -66728=>'L', -66729=>'L', -67584=>'R', -67585=>'R', -67586=>'R', -67587=>'R', -67588=>'R', -67589=>'R', -67592=>'R', -67594=>'R', -67595=>'R', -67596=>'R', -67597=>'R', -67598=>'R', -67599=>'R', -67600=>'R', -67601=>'R', -67602=>'R', -67603=>'R', -67604=>'R', -67605=>'R', -67606=>'R', -67607=>'R', -67608=>'R', -67609=>'R', -67610=>'R', -67611=>'R', -67612=>'R', -67613=>'R', -67614=>'R', -67615=>'R', -67616=>'R', -67617=>'R', -67618=>'R', -67619=>'R', -67620=>'R', -67621=>'R', -67622=>'R', -67623=>'R', -67624=>'R', -67625=>'R', -67626=>'R', -67627=>'R', -67628=>'R', -67629=>'R', -67630=>'R', -67631=>'R', -67632=>'R', -67633=>'R', -67634=>'R', -67635=>'R', -67636=>'R', -67637=>'R', -67639=>'R', -67640=>'R', -67644=>'R', -67647=>'R', -67840=>'R', -67841=>'R', -67842=>'R', -67843=>'R', -67844=>'R', -67845=>'R', -67846=>'R', -67847=>'R', -67848=>'R', -67849=>'R', -67850=>'R', -67851=>'R', -67852=>'R', -67853=>'R', -67854=>'R', -67855=>'R', -67856=>'R', -67857=>'R', -67858=>'R', -67859=>'R', -67860=>'R', -67861=>'R', -67862=>'R', -67863=>'R', -67864=>'R', -67865=>'R', -67871=>'ON', -68096=>'R', -68097=>'NSM', -68098=>'NSM', -68099=>'NSM', -68101=>'NSM', -68102=>'NSM', -68108=>'NSM', -68109=>'NSM', -68110=>'NSM', -68111=>'NSM', -68112=>'R', -68113=>'R', -68114=>'R', -68115=>'R', -68117=>'R', -68118=>'R', -68119=>'R', -68121=>'R', -68122=>'R', -68123=>'R', -68124=>'R', -68125=>'R', -68126=>'R', -68127=>'R', -68128=>'R', -68129=>'R', -68130=>'R', -68131=>'R', -68132=>'R', -68133=>'R', -68134=>'R', -68135=>'R', -68136=>'R', -68137=>'R', -68138=>'R', -68139=>'R', -68140=>'R', -68141=>'R', -68142=>'R', -68143=>'R', -68144=>'R', -68145=>'R', -68146=>'R', -68147=>'R', -68152=>'NSM', -68153=>'NSM', -68154=>'NSM', -68159=>'NSM', -68160=>'R', -68161=>'R', -68162=>'R', -68163=>'R', -68164=>'R', -68165=>'R', -68166=>'R', -68167=>'R', -68176=>'R', -68177=>'R', -68178=>'R', -68179=>'R', -68180=>'R', -68181=>'R', -68182=>'R', -68183=>'R', -68184=>'R', -73728=>'L', -73729=>'L', -73730=>'L', -73731=>'L', -73732=>'L', -73733=>'L', -73734=>'L', -73735=>'L', -73736=>'L', -73737=>'L', -73738=>'L', -73739=>'L', -73740=>'L', -73741=>'L', -73742=>'L', -73743=>'L', -73744=>'L', -73745=>'L', -73746=>'L', -73747=>'L', -73748=>'L', -73749=>'L', -73750=>'L', -73751=>'L', -73752=>'L', -73753=>'L', -73754=>'L', -73755=>'L', -73756=>'L', -73757=>'L', -73758=>'L', -73759=>'L', -73760=>'L', -73761=>'L', -73762=>'L', -73763=>'L', -73764=>'L', -73765=>'L', -73766=>'L', -73767=>'L', -73768=>'L', -73769=>'L', -73770=>'L', -73771=>'L', -73772=>'L', -73773=>'L', -73774=>'L', -73775=>'L', -73776=>'L', -73777=>'L', -73778=>'L', -73779=>'L', -73780=>'L', -73781=>'L', -73782=>'L', -73783=>'L', -73784=>'L', -73785=>'L', -73786=>'L', -73787=>'L', -73788=>'L', -73789=>'L', -73790=>'L', -73791=>'L', -73792=>'L', -73793=>'L', -73794=>'L', -73795=>'L', -73796=>'L', -73797=>'L', -73798=>'L', -73799=>'L', -73800=>'L', -73801=>'L', -73802=>'L', -73803=>'L', -73804=>'L', -73805=>'L', -73806=>'L', -73807=>'L', -73808=>'L', -73809=>'L', -73810=>'L', -73811=>'L', -73812=>'L', -73813=>'L', -73814=>'L', -73815=>'L', -73816=>'L', -73817=>'L', -73818=>'L', -73819=>'L', -73820=>'L', -73821=>'L', -73822=>'L', -73823=>'L', -73824=>'L', -73825=>'L', -73826=>'L', -73827=>'L', -73828=>'L', -73829=>'L', -73830=>'L', -73831=>'L', -73832=>'L', -73833=>'L', -73834=>'L', -73835=>'L', -73836=>'L', -73837=>'L', -73838=>'L', -73839=>'L', -73840=>'L', -73841=>'L', -73842=>'L', -73843=>'L', -73844=>'L', -73845=>'L', -73846=>'L', -73847=>'L', -73848=>'L', -73849=>'L', -73850=>'L', -73851=>'L', -73852=>'L', -73853=>'L', -73854=>'L', -73855=>'L', -73856=>'L', -73857=>'L', -73858=>'L', -73859=>'L', -73860=>'L', -73861=>'L', -73862=>'L', -73863=>'L', -73864=>'L', -73865=>'L', -73866=>'L', -73867=>'L', -73868=>'L', -73869=>'L', -73870=>'L', -73871=>'L', -73872=>'L', -73873=>'L', -73874=>'L', -73875=>'L', -73876=>'L', -73877=>'L', -73878=>'L', -73879=>'L', -73880=>'L', -73881=>'L', -73882=>'L', -73883=>'L', -73884=>'L', -73885=>'L', -73886=>'L', -73887=>'L', -73888=>'L', -73889=>'L', -73890=>'L', -73891=>'L', -73892=>'L', -73893=>'L', -73894=>'L', -73895=>'L', -73896=>'L', -73897=>'L', -73898=>'L', -73899=>'L', -73900=>'L', -73901=>'L', -73902=>'L', -73903=>'L', -73904=>'L', -73905=>'L', -73906=>'L', -73907=>'L', -73908=>'L', -73909=>'L', -73910=>'L', -73911=>'L', -73912=>'L', -73913=>'L', -73914=>'L', -73915=>'L', -73916=>'L', -73917=>'L', -73918=>'L', -73919=>'L', -73920=>'L', -73921=>'L', -73922=>'L', -73923=>'L', -73924=>'L', -73925=>'L', -73926=>'L', -73927=>'L', -73928=>'L', -73929=>'L', -73930=>'L', -73931=>'L', -73932=>'L', -73933=>'L', -73934=>'L', -73935=>'L', -73936=>'L', -73937=>'L', -73938=>'L', -73939=>'L', -73940=>'L', -73941=>'L', -73942=>'L', -73943=>'L', -73944=>'L', -73945=>'L', -73946=>'L', -73947=>'L', -73948=>'L', -73949=>'L', -73950=>'L', -73951=>'L', -73952=>'L', -73953=>'L', -73954=>'L', -73955=>'L', -73956=>'L', -73957=>'L', -73958=>'L', -73959=>'L', -73960=>'L', -73961=>'L', -73962=>'L', -73963=>'L', -73964=>'L', -73965=>'L', -73966=>'L', -73967=>'L', -73968=>'L', -73969=>'L', -73970=>'L', -73971=>'L', -73972=>'L', -73973=>'L', -73974=>'L', -73975=>'L', -73976=>'L', -73977=>'L', -73978=>'L', -73979=>'L', -73980=>'L', -73981=>'L', -73982=>'L', -73983=>'L', -73984=>'L', -73985=>'L', -73986=>'L', -73987=>'L', -73988=>'L', -73989=>'L', -73990=>'L', -73991=>'L', -73992=>'L', -73993=>'L', -73994=>'L', -73995=>'L', -73996=>'L', -73997=>'L', -73998=>'L', -73999=>'L', -74000=>'L', -74001=>'L', -74002=>'L', -74003=>'L', -74004=>'L', -74005=>'L', -74006=>'L', -74007=>'L', -74008=>'L', -74009=>'L', -74010=>'L', -74011=>'L', -74012=>'L', -74013=>'L', -74014=>'L', -74015=>'L', -74016=>'L', -74017=>'L', -74018=>'L', -74019=>'L', -74020=>'L', -74021=>'L', -74022=>'L', -74023=>'L', -74024=>'L', -74025=>'L', -74026=>'L', -74027=>'L', -74028=>'L', -74029=>'L', -74030=>'L', -74031=>'L', -74032=>'L', -74033=>'L', -74034=>'L', -74035=>'L', -74036=>'L', -74037=>'L', -74038=>'L', -74039=>'L', -74040=>'L', -74041=>'L', -74042=>'L', -74043=>'L', -74044=>'L', -74045=>'L', -74046=>'L', -74047=>'L', -74048=>'L', -74049=>'L', -74050=>'L', -74051=>'L', -74052=>'L', -74053=>'L', -74054=>'L', -74055=>'L', -74056=>'L', -74057=>'L', -74058=>'L', -74059=>'L', -74060=>'L', -74061=>'L', -74062=>'L', -74063=>'L', -74064=>'L', -74065=>'L', -74066=>'L', -74067=>'L', -74068=>'L', -74069=>'L', -74070=>'L', -74071=>'L', -74072=>'L', -74073=>'L', -74074=>'L', -74075=>'L', -74076=>'L', -74077=>'L', -74078=>'L', -74079=>'L', -74080=>'L', -74081=>'L', -74082=>'L', -74083=>'L', -74084=>'L', -74085=>'L', -74086=>'L', -74087=>'L', -74088=>'L', -74089=>'L', -74090=>'L', -74091=>'L', -74092=>'L', -74093=>'L', -74094=>'L', -74095=>'L', -74096=>'L', -74097=>'L', -74098=>'L', -74099=>'L', -74100=>'L', -74101=>'L', -74102=>'L', -74103=>'L', -74104=>'L', -74105=>'L', -74106=>'L', -74107=>'L', -74108=>'L', -74109=>'L', -74110=>'L', -74111=>'L', -74112=>'L', -74113=>'L', -74114=>'L', -74115=>'L', -74116=>'L', -74117=>'L', -74118=>'L', -74119=>'L', -74120=>'L', -74121=>'L', -74122=>'L', -74123=>'L', -74124=>'L', -74125=>'L', -74126=>'L', -74127=>'L', -74128=>'L', -74129=>'L', -74130=>'L', -74131=>'L', -74132=>'L', -74133=>'L', -74134=>'L', -74135=>'L', -74136=>'L', -74137=>'L', -74138=>'L', -74139=>'L', -74140=>'L', -74141=>'L', -74142=>'L', -74143=>'L', -74144=>'L', -74145=>'L', -74146=>'L', -74147=>'L', -74148=>'L', -74149=>'L', -74150=>'L', -74151=>'L', -74152=>'L', -74153=>'L', -74154=>'L', -74155=>'L', -74156=>'L', -74157=>'L', -74158=>'L', -74159=>'L', -74160=>'L', -74161=>'L', -74162=>'L', -74163=>'L', -74164=>'L', -74165=>'L', -74166=>'L', -74167=>'L', -74168=>'L', -74169=>'L', -74170=>'L', -74171=>'L', -74172=>'L', -74173=>'L', -74174=>'L', -74175=>'L', -74176=>'L', -74177=>'L', -74178=>'L', -74179=>'L', -74180=>'L', -74181=>'L', -74182=>'L', -74183=>'L', -74184=>'L', -74185=>'L', -74186=>'L', -74187=>'L', -74188=>'L', -74189=>'L', -74190=>'L', -74191=>'L', -74192=>'L', -74193=>'L', -74194=>'L', -74195=>'L', -74196=>'L', -74197=>'L', -74198=>'L', -74199=>'L', -74200=>'L', -74201=>'L', -74202=>'L', -74203=>'L', -74204=>'L', -74205=>'L', -74206=>'L', -74207=>'L', -74208=>'L', -74209=>'L', -74210=>'L', -74211=>'L', -74212=>'L', -74213=>'L', -74214=>'L', -74215=>'L', -74216=>'L', -74217=>'L', -74218=>'L', -74219=>'L', -74220=>'L', -74221=>'L', -74222=>'L', -74223=>'L', -74224=>'L', -74225=>'L', -74226=>'L', -74227=>'L', -74228=>'L', -74229=>'L', -74230=>'L', -74231=>'L', -74232=>'L', -74233=>'L', -74234=>'L', -74235=>'L', -74236=>'L', -74237=>'L', -74238=>'L', -74239=>'L', -74240=>'L', -74241=>'L', -74242=>'L', -74243=>'L', -74244=>'L', -74245=>'L', -74246=>'L', -74247=>'L', -74248=>'L', -74249=>'L', -74250=>'L', -74251=>'L', -74252=>'L', -74253=>'L', -74254=>'L', -74255=>'L', -74256=>'L', -74257=>'L', -74258=>'L', -74259=>'L', -74260=>'L', -74261=>'L', -74262=>'L', -74263=>'L', -74264=>'L', -74265=>'L', -74266=>'L', -74267=>'L', -74268=>'L', -74269=>'L', -74270=>'L', -74271=>'L', -74272=>'L', -74273=>'L', -74274=>'L', -74275=>'L', -74276=>'L', -74277=>'L', -74278=>'L', -74279=>'L', -74280=>'L', -74281=>'L', -74282=>'L', -74283=>'L', -74284=>'L', -74285=>'L', -74286=>'L', -74287=>'L', -74288=>'L', -74289=>'L', -74290=>'L', -74291=>'L', -74292=>'L', -74293=>'L', -74294=>'L', -74295=>'L', -74296=>'L', -74297=>'L', -74298=>'L', -74299=>'L', -74300=>'L', -74301=>'L', -74302=>'L', -74303=>'L', -74304=>'L', -74305=>'L', -74306=>'L', -74307=>'L', -74308=>'L', -74309=>'L', -74310=>'L', -74311=>'L', -74312=>'L', -74313=>'L', -74314=>'L', -74315=>'L', -74316=>'L', -74317=>'L', -74318=>'L', -74319=>'L', -74320=>'L', -74321=>'L', -74322=>'L', -74323=>'L', -74324=>'L', -74325=>'L', -74326=>'L', -74327=>'L', -74328=>'L', -74329=>'L', -74330=>'L', -74331=>'L', -74332=>'L', -74333=>'L', -74334=>'L', -74335=>'L', -74336=>'L', -74337=>'L', -74338=>'L', -74339=>'L', -74340=>'L', -74341=>'L', -74342=>'L', -74343=>'L', -74344=>'L', -74345=>'L', -74346=>'L', -74347=>'L', -74348=>'L', -74349=>'L', -74350=>'L', -74351=>'L', -74352=>'L', -74353=>'L', -74354=>'L', -74355=>'L', -74356=>'L', -74357=>'L', -74358=>'L', -74359=>'L', -74360=>'L', -74361=>'L', -74362=>'L', -74363=>'L', -74364=>'L', -74365=>'L', -74366=>'L', -74367=>'L', -74368=>'L', -74369=>'L', -74370=>'L', -74371=>'L', -74372=>'L', -74373=>'L', -74374=>'L', -74375=>'L', -74376=>'L', -74377=>'L', -74378=>'L', -74379=>'L', -74380=>'L', -74381=>'L', -74382=>'L', -74383=>'L', -74384=>'L', -74385=>'L', -74386=>'L', -74387=>'L', -74388=>'L', -74389=>'L', -74390=>'L', -74391=>'L', -74392=>'L', -74393=>'L', -74394=>'L', -74395=>'L', -74396=>'L', -74397=>'L', -74398=>'L', -74399=>'L', -74400=>'L', -74401=>'L', -74402=>'L', -74403=>'L', -74404=>'L', -74405=>'L', -74406=>'L', -74407=>'L', -74408=>'L', -74409=>'L', -74410=>'L', -74411=>'L', -74412=>'L', -74413=>'L', -74414=>'L', -74415=>'L', -74416=>'L', -74417=>'L', -74418=>'L', -74419=>'L', -74420=>'L', -74421=>'L', -74422=>'L', -74423=>'L', -74424=>'L', -74425=>'L', -74426=>'L', -74427=>'L', -74428=>'L', -74429=>'L', -74430=>'L', -74431=>'L', -74432=>'L', -74433=>'L', -74434=>'L', -74435=>'L', -74436=>'L', -74437=>'L', -74438=>'L', -74439=>'L', -74440=>'L', -74441=>'L', -74442=>'L', -74443=>'L', -74444=>'L', -74445=>'L', -74446=>'L', -74447=>'L', -74448=>'L', -74449=>'L', -74450=>'L', -74451=>'L', -74452=>'L', -74453=>'L', -74454=>'L', -74455=>'L', -74456=>'L', -74457=>'L', -74458=>'L', -74459=>'L', -74460=>'L', -74461=>'L', -74462=>'L', -74463=>'L', -74464=>'L', -74465=>'L', -74466=>'L', -74467=>'L', -74468=>'L', -74469=>'L', -74470=>'L', -74471=>'L', -74472=>'L', -74473=>'L', -74474=>'L', -74475=>'L', -74476=>'L', -74477=>'L', -74478=>'L', -74479=>'L', -74480=>'L', -74481=>'L', -74482=>'L', -74483=>'L', -74484=>'L', -74485=>'L', -74486=>'L', -74487=>'L', -74488=>'L', -74489=>'L', -74490=>'L', -74491=>'L', -74492=>'L', -74493=>'L', -74494=>'L', -74495=>'L', -74496=>'L', -74497=>'L', -74498=>'L', -74499=>'L', -74500=>'L', -74501=>'L', -74502=>'L', -74503=>'L', -74504=>'L', -74505=>'L', -74506=>'L', -74507=>'L', -74508=>'L', -74509=>'L', -74510=>'L', -74511=>'L', -74512=>'L', -74513=>'L', -74514=>'L', -74515=>'L', -74516=>'L', -74517=>'L', -74518=>'L', -74519=>'L', -74520=>'L', -74521=>'L', -74522=>'L', -74523=>'L', -74524=>'L', -74525=>'L', -74526=>'L', -74527=>'L', -74528=>'L', -74529=>'L', -74530=>'L', -74531=>'L', -74532=>'L', -74533=>'L', -74534=>'L', -74535=>'L', -74536=>'L', -74537=>'L', -74538=>'L', -74539=>'L', -74540=>'L', -74541=>'L', -74542=>'L', -74543=>'L', -74544=>'L', -74545=>'L', -74546=>'L', -74547=>'L', -74548=>'L', -74549=>'L', -74550=>'L', -74551=>'L', -74552=>'L', -74553=>'L', -74554=>'L', -74555=>'L', -74556=>'L', -74557=>'L', -74558=>'L', -74559=>'L', -74560=>'L', -74561=>'L', -74562=>'L', -74563=>'L', -74564=>'L', -74565=>'L', -74566=>'L', -74567=>'L', -74568=>'L', -74569=>'L', -74570=>'L', -74571=>'L', -74572=>'L', -74573=>'L', -74574=>'L', -74575=>'L', -74576=>'L', -74577=>'L', -74578=>'L', -74579=>'L', -74580=>'L', -74581=>'L', -74582=>'L', -74583=>'L', -74584=>'L', -74585=>'L', -74586=>'L', -74587=>'L', -74588=>'L', -74589=>'L', -74590=>'L', -74591=>'L', -74592=>'L', -74593=>'L', -74594=>'L', -74595=>'L', -74596=>'L', -74597=>'L', -74598=>'L', -74599=>'L', -74600=>'L', -74601=>'L', -74602=>'L', -74603=>'L', -74604=>'L', -74605=>'L', -74606=>'L', -74752=>'L', -74753=>'L', -74754=>'L', -74755=>'L', -74756=>'L', -74757=>'L', -74758=>'L', -74759=>'L', -74760=>'L', -74761=>'L', -74762=>'L', -74763=>'L', -74764=>'L', -74765=>'L', -74766=>'L', -74767=>'L', -74768=>'L', -74769=>'L', -74770=>'L', -74771=>'L', -74772=>'L', -74773=>'L', -74774=>'L', -74775=>'L', -74776=>'L', -74777=>'L', -74778=>'L', -74779=>'L', -74780=>'L', -74781=>'L', -74782=>'L', -74783=>'L', -74784=>'L', -74785=>'L', -74786=>'L', -74787=>'L', -74788=>'L', -74789=>'L', -74790=>'L', -74791=>'L', -74792=>'L', -74793=>'L', -74794=>'L', -74795=>'L', -74796=>'L', -74797=>'L', -74798=>'L', -74799=>'L', -74800=>'L', -74801=>'L', -74802=>'L', -74803=>'L', -74804=>'L', -74805=>'L', -74806=>'L', -74807=>'L', -74808=>'L', -74809=>'L', -74810=>'L', -74811=>'L', -74812=>'L', -74813=>'L', -74814=>'L', -74815=>'L', -74816=>'L', -74817=>'L', -74818=>'L', -74819=>'L', -74820=>'L', -74821=>'L', -74822=>'L', -74823=>'L', -74824=>'L', -74825=>'L', -74826=>'L', -74827=>'L', -74828=>'L', -74829=>'L', -74830=>'L', -74831=>'L', -74832=>'L', -74833=>'L', -74834=>'L', -74835=>'L', -74836=>'L', -74837=>'L', -74838=>'L', -74839=>'L', -74840=>'L', -74841=>'L', -74842=>'L', -74843=>'L', -74844=>'L', -74845=>'L', -74846=>'L', -74847=>'L', -74848=>'L', -74849=>'L', -74850=>'L', -74864=>'L', -74865=>'L', -74866=>'L', -74867=>'L', -118784=>'L', -118785=>'L', -118786=>'L', -118787=>'L', -118788=>'L', -118789=>'L', -118790=>'L', -118791=>'L', -118792=>'L', -118793=>'L', -118794=>'L', -118795=>'L', -118796=>'L', -118797=>'L', -118798=>'L', -118799=>'L', -118800=>'L', -118801=>'L', -118802=>'L', -118803=>'L', -118804=>'L', -118805=>'L', -118806=>'L', -118807=>'L', -118808=>'L', -118809=>'L', -118810=>'L', -118811=>'L', -118812=>'L', -118813=>'L', -118814=>'L', -118815=>'L', -118816=>'L', -118817=>'L', -118818=>'L', -118819=>'L', -118820=>'L', -118821=>'L', -118822=>'L', -118823=>'L', -118824=>'L', -118825=>'L', -118826=>'L', -118827=>'L', -118828=>'L', -118829=>'L', -118830=>'L', -118831=>'L', -118832=>'L', -118833=>'L', -118834=>'L', -118835=>'L', -118836=>'L', -118837=>'L', -118838=>'L', -118839=>'L', -118840=>'L', -118841=>'L', -118842=>'L', -118843=>'L', -118844=>'L', -118845=>'L', -118846=>'L', -118847=>'L', -118848=>'L', -118849=>'L', -118850=>'L', -118851=>'L', -118852=>'L', -118853=>'L', -118854=>'L', -118855=>'L', -118856=>'L', -118857=>'L', -118858=>'L', -118859=>'L', -118860=>'L', -118861=>'L', -118862=>'L', -118863=>'L', -118864=>'L', -118865=>'L', -118866=>'L', -118867=>'L', -118868=>'L', -118869=>'L', -118870=>'L', -118871=>'L', -118872=>'L', -118873=>'L', -118874=>'L', -118875=>'L', -118876=>'L', -118877=>'L', -118878=>'L', -118879=>'L', -118880=>'L', -118881=>'L', -118882=>'L', -118883=>'L', -118884=>'L', -118885=>'L', -118886=>'L', -118887=>'L', -118888=>'L', -118889=>'L', -118890=>'L', -118891=>'L', -118892=>'L', -118893=>'L', -118894=>'L', -118895=>'L', -118896=>'L', -118897=>'L', -118898=>'L', -118899=>'L', -118900=>'L', -118901=>'L', -118902=>'L', -118903=>'L', -118904=>'L', -118905=>'L', -118906=>'L', -118907=>'L', -118908=>'L', -118909=>'L', -118910=>'L', -118911=>'L', -118912=>'L', -118913=>'L', -118914=>'L', -118915=>'L', -118916=>'L', -118917=>'L', -118918=>'L', -118919=>'L', -118920=>'L', -118921=>'L', -118922=>'L', -118923=>'L', -118924=>'L', -118925=>'L', -118926=>'L', -118927=>'L', -118928=>'L', -118929=>'L', -118930=>'L', -118931=>'L', -118932=>'L', -118933=>'L', -118934=>'L', -118935=>'L', -118936=>'L', -118937=>'L', -118938=>'L', -118939=>'L', -118940=>'L', -118941=>'L', -118942=>'L', -118943=>'L', -118944=>'L', -118945=>'L', -118946=>'L', -118947=>'L', -118948=>'L', -118949=>'L', -118950=>'L', -118951=>'L', -118952=>'L', -118953=>'L', -118954=>'L', -118955=>'L', -118956=>'L', -118957=>'L', -118958=>'L', -118959=>'L', -118960=>'L', -118961=>'L', -118962=>'L', -118963=>'L', -118964=>'L', -118965=>'L', -118966=>'L', -118967=>'L', -118968=>'L', -118969=>'L', -118970=>'L', -118971=>'L', -118972=>'L', -118973=>'L', -118974=>'L', -118975=>'L', -118976=>'L', -118977=>'L', -118978=>'L', -118979=>'L', -118980=>'L', -118981=>'L', -118982=>'L', -118983=>'L', -118984=>'L', -118985=>'L', -118986=>'L', -118987=>'L', -118988=>'L', -118989=>'L', -118990=>'L', -118991=>'L', -118992=>'L', -118993=>'L', -118994=>'L', -118995=>'L', -118996=>'L', -118997=>'L', -118998=>'L', -118999=>'L', -119000=>'L', -119001=>'L', -119002=>'L', -119003=>'L', -119004=>'L', -119005=>'L', -119006=>'L', -119007=>'L', -119008=>'L', -119009=>'L', -119010=>'L', -119011=>'L', -119012=>'L', -119013=>'L', -119014=>'L', -119015=>'L', -119016=>'L', -119017=>'L', -119018=>'L', -119019=>'L', -119020=>'L', -119021=>'L', -119022=>'L', -119023=>'L', -119024=>'L', -119025=>'L', -119026=>'L', -119027=>'L', -119028=>'L', -119029=>'L', -119040=>'L', -119041=>'L', -119042=>'L', -119043=>'L', -119044=>'L', -119045=>'L', -119046=>'L', -119047=>'L', -119048=>'L', -119049=>'L', -119050=>'L', -119051=>'L', -119052=>'L', -119053=>'L', -119054=>'L', -119055=>'L', -119056=>'L', -119057=>'L', -119058=>'L', -119059=>'L', -119060=>'L', -119061=>'L', -119062=>'L', -119063=>'L', -119064=>'L', -119065=>'L', -119066=>'L', -119067=>'L', -119068=>'L', -119069=>'L', -119070=>'L', -119071=>'L', -119072=>'L', -119073=>'L', -119074=>'L', -119075=>'L', -119076=>'L', -119077=>'L', -119078=>'L', -119082=>'L', -119083=>'L', -119084=>'L', -119085=>'L', -119086=>'L', -119087=>'L', -119088=>'L', -119089=>'L', -119090=>'L', -119091=>'L', -119092=>'L', -119093=>'L', -119094=>'L', -119095=>'L', -119096=>'L', -119097=>'L', -119098=>'L', -119099=>'L', -119100=>'L', -119101=>'L', -119102=>'L', -119103=>'L', -119104=>'L', -119105=>'L', -119106=>'L', -119107=>'L', -119108=>'L', -119109=>'L', -119110=>'L', -119111=>'L', -119112=>'L', -119113=>'L', -119114=>'L', -119115=>'L', -119116=>'L', -119117=>'L', -119118=>'L', -119119=>'L', -119120=>'L', -119121=>'L', -119122=>'L', -119123=>'L', -119124=>'L', -119125=>'L', -119126=>'L', -119127=>'L', -119128=>'L', -119129=>'L', -119130=>'L', -119131=>'L', -119132=>'L', -119133=>'L', -119134=>'L', -119135=>'L', -119136=>'L', -119137=>'L', -119138=>'L', -119139=>'L', -119140=>'L', -119141=>'L', -119142=>'L', -119143=>'NSM', -119144=>'NSM', -119145=>'NSM', -119146=>'L', -119147=>'L', -119148=>'L', -119149=>'L', -119150=>'L', -119151=>'L', -119152=>'L', -119153=>'L', -119154=>'L', -119155=>'BN', -119156=>'BN', -119157=>'BN', -119158=>'BN', -119159=>'BN', -119160=>'BN', -119161=>'BN', -119162=>'BN', -119163=>'NSM', -119164=>'NSM', -119165=>'NSM', -119166=>'NSM', -119167=>'NSM', -119168=>'NSM', -119169=>'NSM', -119170=>'NSM', -119171=>'L', -119172=>'L', -119173=>'NSM', -119174=>'NSM', -119175=>'NSM', -119176=>'NSM', -119177=>'NSM', -119178=>'NSM', -119179=>'NSM', -119180=>'L', -119181=>'L', -119182=>'L', -119183=>'L', -119184=>'L', -119185=>'L', -119186=>'L', -119187=>'L', -119188=>'L', -119189=>'L', -119190=>'L', -119191=>'L', -119192=>'L', -119193=>'L', -119194=>'L', -119195=>'L', -119196=>'L', -119197=>'L', -119198=>'L', -119199=>'L', -119200=>'L', -119201=>'L', -119202=>'L', -119203=>'L', -119204=>'L', -119205=>'L', -119206=>'L', -119207=>'L', -119208=>'L', -119209=>'L', -119210=>'NSM', -119211=>'NSM', -119212=>'NSM', -119213=>'NSM', -119214=>'L', -119215=>'L', -119216=>'L', -119217=>'L', -119218=>'L', -119219=>'L', -119220=>'L', -119221=>'L', -119222=>'L', -119223=>'L', -119224=>'L', -119225=>'L', -119226=>'L', -119227=>'L', -119228=>'L', -119229=>'L', -119230=>'L', -119231=>'L', -119232=>'L', -119233=>'L', -119234=>'L', -119235=>'L', -119236=>'L', -119237=>'L', -119238=>'L', -119239=>'L', -119240=>'L', -119241=>'L', -119242=>'L', -119243=>'L', -119244=>'L', -119245=>'L', -119246=>'L', -119247=>'L', -119248=>'L', -119249=>'L', -119250=>'L', -119251=>'L', -119252=>'L', -119253=>'L', -119254=>'L', -119255=>'L', -119256=>'L', -119257=>'L', -119258=>'L', -119259=>'L', -119260=>'L', -119261=>'L', -119296=>'ON', -119297=>'ON', -119298=>'ON', -119299=>'ON', -119300=>'ON', -119301=>'ON', -119302=>'ON', -119303=>'ON', -119304=>'ON', -119305=>'ON', -119306=>'ON', -119307=>'ON', -119308=>'ON', -119309=>'ON', -119310=>'ON', -119311=>'ON', -119312=>'ON', -119313=>'ON', -119314=>'ON', -119315=>'ON', -119316=>'ON', -119317=>'ON', -119318=>'ON', -119319=>'ON', -119320=>'ON', -119321=>'ON', -119322=>'ON', -119323=>'ON', -119324=>'ON', -119325=>'ON', -119326=>'ON', -119327=>'ON', -119328=>'ON', -119329=>'ON', -119330=>'ON', -119331=>'ON', -119332=>'ON', -119333=>'ON', -119334=>'ON', -119335=>'ON', -119336=>'ON', -119337=>'ON', -119338=>'ON', -119339=>'ON', -119340=>'ON', -119341=>'ON', -119342=>'ON', -119343=>'ON', -119344=>'ON', -119345=>'ON', -119346=>'ON', -119347=>'ON', -119348=>'ON', -119349=>'ON', -119350=>'ON', -119351=>'ON', -119352=>'ON', -119353=>'ON', -119354=>'ON', -119355=>'ON', -119356=>'ON', -119357=>'ON', -119358=>'ON', -119359=>'ON', -119360=>'ON', -119361=>'ON', -119362=>'NSM', -119363=>'NSM', -119364=>'NSM', -119365=>'ON', -119552=>'ON', -119553=>'ON', -119554=>'ON', -119555=>'ON', -119556=>'ON', -119557=>'ON', -119558=>'ON', -119559=>'ON', -119560=>'ON', -119561=>'ON', -119562=>'ON', -119563=>'ON', -119564=>'ON', -119565=>'ON', -119566=>'ON', -119567=>'ON', -119568=>'ON', -119569=>'ON', -119570=>'ON', -119571=>'ON', -119572=>'ON', -119573=>'ON', -119574=>'ON', -119575=>'ON', -119576=>'ON', -119577=>'ON', -119578=>'ON', -119579=>'ON', -119580=>'ON', -119581=>'ON', -119582=>'ON', -119583=>'ON', -119584=>'ON', -119585=>'ON', -119586=>'ON', -119587=>'ON', -119588=>'ON', -119589=>'ON', -119590=>'ON', -119591=>'ON', -119592=>'ON', -119593=>'ON', -119594=>'ON', -119595=>'ON', -119596=>'ON', -119597=>'ON', -119598=>'ON', -119599=>'ON', -119600=>'ON', -119601=>'ON', -119602=>'ON', -119603=>'ON', -119604=>'ON', -119605=>'ON', -119606=>'ON', -119607=>'ON', -119608=>'ON', -119609=>'ON', -119610=>'ON', -119611=>'ON', -119612=>'ON', -119613=>'ON', -119614=>'ON', -119615=>'ON', -119616=>'ON', -119617=>'ON', -119618=>'ON', -119619=>'ON', -119620=>'ON', -119621=>'ON', -119622=>'ON', -119623=>'ON', -119624=>'ON', -119625=>'ON', -119626=>'ON', -119627=>'ON', -119628=>'ON', -119629=>'ON', -119630=>'ON', -119631=>'ON', -119632=>'ON', -119633=>'ON', -119634=>'ON', -119635=>'ON', -119636=>'ON', -119637=>'ON', -119638=>'ON', -119648=>'L', -119649=>'L', -119650=>'L', -119651=>'L', -119652=>'L', -119653=>'L', -119654=>'L', -119655=>'L', -119656=>'L', -119657=>'L', -119658=>'L', -119659=>'L', -119660=>'L', -119661=>'L', -119662=>'L', -119663=>'L', -119664=>'L', -119665=>'L', -119808=>'L', -119809=>'L', -119810=>'L', -119811=>'L', -119812=>'L', -119813=>'L', -119814=>'L', -119815=>'L', -119816=>'L', -119817=>'L', -119818=>'L', -119819=>'L', -119820=>'L', -119821=>'L', -119822=>'L', -119823=>'L', -119824=>'L', -119825=>'L', -119826=>'L', -119827=>'L', -119828=>'L', -119829=>'L', -119830=>'L', -119831=>'L', -119832=>'L', -119833=>'L', -119834=>'L', -119835=>'L', -119836=>'L', -119837=>'L', -119838=>'L', -119839=>'L', -119840=>'L', -119841=>'L', -119842=>'L', -119843=>'L', -119844=>'L', -119845=>'L', -119846=>'L', -119847=>'L', -119848=>'L', -119849=>'L', -119850=>'L', -119851=>'L', -119852=>'L', -119853=>'L', -119854=>'L', -119855=>'L', -119856=>'L', -119857=>'L', -119858=>'L', -119859=>'L', -119860=>'L', -119861=>'L', -119862=>'L', -119863=>'L', -119864=>'L', -119865=>'L', -119866=>'L', -119867=>'L', -119868=>'L', -119869=>'L', -119870=>'L', -119871=>'L', -119872=>'L', -119873=>'L', -119874=>'L', -119875=>'L', -119876=>'L', -119877=>'L', -119878=>'L', -119879=>'L', -119880=>'L', -119881=>'L', -119882=>'L', -119883=>'L', -119884=>'L', -119885=>'L', -119886=>'L', -119887=>'L', -119888=>'L', -119889=>'L', -119890=>'L', -119891=>'L', -119892=>'L', -119894=>'L', -119895=>'L', -119896=>'L', -119897=>'L', -119898=>'L', -119899=>'L', -119900=>'L', -119901=>'L', -119902=>'L', -119903=>'L', -119904=>'L', -119905=>'L', -119906=>'L', -119907=>'L', -119908=>'L', -119909=>'L', -119910=>'L', -119911=>'L', -119912=>'L', -119913=>'L', -119914=>'L', -119915=>'L', -119916=>'L', -119917=>'L', -119918=>'L', -119919=>'L', -119920=>'L', -119921=>'L', -119922=>'L', -119923=>'L', -119924=>'L', -119925=>'L', -119926=>'L', -119927=>'L', -119928=>'L', -119929=>'L', -119930=>'L', -119931=>'L', -119932=>'L', -119933=>'L', -119934=>'L', -119935=>'L', -119936=>'L', -119937=>'L', -119938=>'L', -119939=>'L', -119940=>'L', -119941=>'L', -119942=>'L', -119943=>'L', -119944=>'L', -119945=>'L', -119946=>'L', -119947=>'L', -119948=>'L', -119949=>'L', -119950=>'L', -119951=>'L', -119952=>'L', -119953=>'L', -119954=>'L', -119955=>'L', -119956=>'L', -119957=>'L', -119958=>'L', -119959=>'L', -119960=>'L', -119961=>'L', -119962=>'L', -119963=>'L', -119964=>'L', -119966=>'L', -119967=>'L', -119970=>'L', -119973=>'L', -119974=>'L', -119977=>'L', -119978=>'L', -119979=>'L', -119980=>'L', -119982=>'L', -119983=>'L', -119984=>'L', -119985=>'L', -119986=>'L', -119987=>'L', -119988=>'L', -119989=>'L', -119990=>'L', -119991=>'L', -119992=>'L', -119993=>'L', -119995=>'L', -119997=>'L', -119998=>'L', -119999=>'L', -120000=>'L', -120001=>'L', -120002=>'L', -120003=>'L', -120005=>'L', -120006=>'L', -120007=>'L', -120008=>'L', -120009=>'L', -120010=>'L', -120011=>'L', -120012=>'L', -120013=>'L', -120014=>'L', -120015=>'L', -120016=>'L', -120017=>'L', -120018=>'L', -120019=>'L', -120020=>'L', -120021=>'L', -120022=>'L', -120023=>'L', -120024=>'L', -120025=>'L', -120026=>'L', -120027=>'L', -120028=>'L', -120029=>'L', -120030=>'L', -120031=>'L', -120032=>'L', -120033=>'L', -120034=>'L', -120035=>'L', -120036=>'L', -120037=>'L', -120038=>'L', -120039=>'L', -120040=>'L', -120041=>'L', -120042=>'L', -120043=>'L', -120044=>'L', -120045=>'L', -120046=>'L', -120047=>'L', -120048=>'L', -120049=>'L', -120050=>'L', -120051=>'L', -120052=>'L', -120053=>'L', -120054=>'L', -120055=>'L', -120056=>'L', -120057=>'L', -120058=>'L', -120059=>'L', -120060=>'L', -120061=>'L', -120062=>'L', -120063=>'L', -120064=>'L', -120065=>'L', -120066=>'L', -120067=>'L', -120068=>'L', -120069=>'L', -120071=>'L', -120072=>'L', -120073=>'L', -120074=>'L', -120077=>'L', -120078=>'L', -120079=>'L', -120080=>'L', -120081=>'L', -120082=>'L', -120083=>'L', -120084=>'L', -120086=>'L', -120087=>'L', -120088=>'L', -120089=>'L', -120090=>'L', -120091=>'L', -120092=>'L', -120094=>'L', -120095=>'L', -120096=>'L', -120097=>'L', -120098=>'L', -120099=>'L', -120100=>'L', -120101=>'L', -120102=>'L', -120103=>'L', -120104=>'L', -120105=>'L', -120106=>'L', -120107=>'L', -120108=>'L', -120109=>'L', -120110=>'L', -120111=>'L', -120112=>'L', -120113=>'L', -120114=>'L', -120115=>'L', -120116=>'L', -120117=>'L', -120118=>'L', -120119=>'L', -120120=>'L', -120121=>'L', -120123=>'L', -120124=>'L', -120125=>'L', -120126=>'L', -120128=>'L', -120129=>'L', -120130=>'L', -120131=>'L', -120132=>'L', -120134=>'L', -120138=>'L', -120139=>'L', -120140=>'L', -120141=>'L', -120142=>'L', -120143=>'L', -120144=>'L', -120146=>'L', -120147=>'L', -120148=>'L', -120149=>'L', -120150=>'L', -120151=>'L', -120152=>'L', -120153=>'L', -120154=>'L', -120155=>'L', -120156=>'L', -120157=>'L', -120158=>'L', -120159=>'L', -120160=>'L', -120161=>'L', -120162=>'L', -120163=>'L', -120164=>'L', -120165=>'L', -120166=>'L', -120167=>'L', -120168=>'L', -120169=>'L', -120170=>'L', -120171=>'L', -120172=>'L', -120173=>'L', -120174=>'L', -120175=>'L', -120176=>'L', -120177=>'L', -120178=>'L', -120179=>'L', -120180=>'L', -120181=>'L', -120182=>'L', -120183=>'L', -120184=>'L', -120185=>'L', -120186=>'L', -120187=>'L', -120188=>'L', -120189=>'L', -120190=>'L', -120191=>'L', -120192=>'L', -120193=>'L', -120194=>'L', -120195=>'L', -120196=>'L', -120197=>'L', -120198=>'L', -120199=>'L', -120200=>'L', -120201=>'L', -120202=>'L', -120203=>'L', -120204=>'L', -120205=>'L', -120206=>'L', -120207=>'L', -120208=>'L', -120209=>'L', -120210=>'L', -120211=>'L', -120212=>'L', -120213=>'L', -120214=>'L', -120215=>'L', -120216=>'L', -120217=>'L', -120218=>'L', -120219=>'L', -120220=>'L', -120221=>'L', -120222=>'L', -120223=>'L', -120224=>'L', -120225=>'L', -120226=>'L', -120227=>'L', -120228=>'L', -120229=>'L', -120230=>'L', -120231=>'L', -120232=>'L', -120233=>'L', -120234=>'L', -120235=>'L', -120236=>'L', -120237=>'L', -120238=>'L', -120239=>'L', -120240=>'L', -120241=>'L', -120242=>'L', -120243=>'L', -120244=>'L', -120245=>'L', -120246=>'L', -120247=>'L', -120248=>'L', -120249=>'L', -120250=>'L', -120251=>'L', -120252=>'L', -120253=>'L', -120254=>'L', -120255=>'L', -120256=>'L', -120257=>'L', -120258=>'L', -120259=>'L', -120260=>'L', -120261=>'L', -120262=>'L', -120263=>'L', -120264=>'L', -120265=>'L', -120266=>'L', -120267=>'L', -120268=>'L', -120269=>'L', -120270=>'L', -120271=>'L', -120272=>'L', -120273=>'L', -120274=>'L', -120275=>'L', -120276=>'L', -120277=>'L', -120278=>'L', -120279=>'L', -120280=>'L', -120281=>'L', -120282=>'L', -120283=>'L', -120284=>'L', -120285=>'L', -120286=>'L', -120287=>'L', -120288=>'L', -120289=>'L', -120290=>'L', -120291=>'L', -120292=>'L', -120293=>'L', -120294=>'L', -120295=>'L', -120296=>'L', -120297=>'L', -120298=>'L', -120299=>'L', -120300=>'L', -120301=>'L', -120302=>'L', -120303=>'L', -120304=>'L', -120305=>'L', -120306=>'L', -120307=>'L', -120308=>'L', -120309=>'L', -120310=>'L', -120311=>'L', -120312=>'L', -120313=>'L', -120314=>'L', -120315=>'L', -120316=>'L', -120317=>'L', -120318=>'L', -120319=>'L', -120320=>'L', -120321=>'L', -120322=>'L', -120323=>'L', -120324=>'L', -120325=>'L', -120326=>'L', -120327=>'L', -120328=>'L', -120329=>'L', -120330=>'L', -120331=>'L', -120332=>'L', -120333=>'L', -120334=>'L', -120335=>'L', -120336=>'L', -120337=>'L', -120338=>'L', -120339=>'L', -120340=>'L', -120341=>'L', -120342=>'L', -120343=>'L', -120344=>'L', -120345=>'L', -120346=>'L', -120347=>'L', -120348=>'L', -120349=>'L', -120350=>'L', -120351=>'L', -120352=>'L', -120353=>'L', -120354=>'L', -120355=>'L', -120356=>'L', -120357=>'L', -120358=>'L', -120359=>'L', -120360=>'L', -120361=>'L', -120362=>'L', -120363=>'L', -120364=>'L', -120365=>'L', -120366=>'L', -120367=>'L', -120368=>'L', -120369=>'L', -120370=>'L', -120371=>'L', -120372=>'L', -120373=>'L', -120374=>'L', -120375=>'L', -120376=>'L', -120377=>'L', -120378=>'L', -120379=>'L', -120380=>'L', -120381=>'L', -120382=>'L', -120383=>'L', -120384=>'L', -120385=>'L', -120386=>'L', -120387=>'L', -120388=>'L', -120389=>'L', -120390=>'L', -120391=>'L', -120392=>'L', -120393=>'L', -120394=>'L', -120395=>'L', -120396=>'L', -120397=>'L', -120398=>'L', -120399=>'L', -120400=>'L', -120401=>'L', -120402=>'L', -120403=>'L', -120404=>'L', -120405=>'L', -120406=>'L', -120407=>'L', -120408=>'L', -120409=>'L', -120410=>'L', -120411=>'L', -120412=>'L', -120413=>'L', -120414=>'L', -120415=>'L', -120416=>'L', -120417=>'L', -120418=>'L', -120419=>'L', -120420=>'L', -120421=>'L', -120422=>'L', -120423=>'L', -120424=>'L', -120425=>'L', -120426=>'L', -120427=>'L', -120428=>'L', -120429=>'L', -120430=>'L', -120431=>'L', -120432=>'L', -120433=>'L', -120434=>'L', -120435=>'L', -120436=>'L', -120437=>'L', -120438=>'L', -120439=>'L', -120440=>'L', -120441=>'L', -120442=>'L', -120443=>'L', -120444=>'L', -120445=>'L', -120446=>'L', -120447=>'L', -120448=>'L', -120449=>'L', -120450=>'L', -120451=>'L', -120452=>'L', -120453=>'L', -120454=>'L', -120455=>'L', -120456=>'L', -120457=>'L', -120458=>'L', -120459=>'L', -120460=>'L', -120461=>'L', -120462=>'L', -120463=>'L', -120464=>'L', -120465=>'L', -120466=>'L', -120467=>'L', -120468=>'L', -120469=>'L', -120470=>'L', -120471=>'L', -120472=>'L', -120473=>'L', -120474=>'L', -120475=>'L', -120476=>'L', -120477=>'L', -120478=>'L', -120479=>'L', -120480=>'L', -120481=>'L', -120482=>'L', -120483=>'L', -120484=>'L', -120485=>'L', -120488=>'L', -120489=>'L', -120490=>'L', -120491=>'L', -120492=>'L', -120493=>'L', -120494=>'L', -120495=>'L', -120496=>'L', -120497=>'L', -120498=>'L', -120499=>'L', -120500=>'L', -120501=>'L', -120502=>'L', -120503=>'L', -120504=>'L', -120505=>'L', -120506=>'L', -120507=>'L', -120508=>'L', -120509=>'L', -120510=>'L', -120511=>'L', -120512=>'L', -120513=>'L', -120514=>'L', -120515=>'L', -120516=>'L', -120517=>'L', -120518=>'L', -120519=>'L', -120520=>'L', -120521=>'L', -120522=>'L', -120523=>'L', -120524=>'L', -120525=>'L', -120526=>'L', -120527=>'L', -120528=>'L', -120529=>'L', -120530=>'L', -120531=>'L', -120532=>'L', -120533=>'L', -120534=>'L', -120535=>'L', -120536=>'L', -120537=>'L', -120538=>'L', -120539=>'L', -120540=>'L', -120541=>'L', -120542=>'L', -120543=>'L', -120544=>'L', -120545=>'L', -120546=>'L', -120547=>'L', -120548=>'L', -120549=>'L', -120550=>'L', -120551=>'L', -120552=>'L', -120553=>'L', -120554=>'L', -120555=>'L', -120556=>'L', -120557=>'L', -120558=>'L', -120559=>'L', -120560=>'L', -120561=>'L', -120562=>'L', -120563=>'L', -120564=>'L', -120565=>'L', -120566=>'L', -120567=>'L', -120568=>'L', -120569=>'L', -120570=>'L', -120571=>'L', -120572=>'L', -120573=>'L', -120574=>'L', -120575=>'L', -120576=>'L', -120577=>'L', -120578=>'L', -120579=>'L', -120580=>'L', -120581=>'L', -120582=>'L', -120583=>'L', -120584=>'L', -120585=>'L', -120586=>'L', -120587=>'L', -120588=>'L', -120589=>'L', -120590=>'L', -120591=>'L', -120592=>'L', -120593=>'L', -120594=>'L', -120595=>'L', -120596=>'L', -120597=>'L', -120598=>'L', -120599=>'L', -120600=>'L', -120601=>'L', -120602=>'L', -120603=>'L', -120604=>'L', -120605=>'L', -120606=>'L', -120607=>'L', -120608=>'L', -120609=>'L', -120610=>'L', -120611=>'L', -120612=>'L', -120613=>'L', -120614=>'L', -120615=>'L', -120616=>'L', -120617=>'L', -120618=>'L', -120619=>'L', -120620=>'L', -120621=>'L', -120622=>'L', -120623=>'L', -120624=>'L', -120625=>'L', -120626=>'L', -120627=>'L', -120628=>'L', -120629=>'L', -120630=>'L', -120631=>'L', -120632=>'L', -120633=>'L', -120634=>'L', -120635=>'L', -120636=>'L', -120637=>'L', -120638=>'L', -120639=>'L', -120640=>'L', -120641=>'L', -120642=>'L', -120643=>'L', -120644=>'L', -120645=>'L', -120646=>'L', -120647=>'L', -120648=>'L', -120649=>'L', -120650=>'L', -120651=>'L', -120652=>'L', -120653=>'L', -120654=>'L', -120655=>'L', -120656=>'L', -120657=>'L', -120658=>'L', -120659=>'L', -120660=>'L', -120661=>'L', -120662=>'L', -120663=>'L', -120664=>'L', -120665=>'L', -120666=>'L', -120667=>'L', -120668=>'L', -120669=>'L', -120670=>'L', -120671=>'L', -120672=>'L', -120673=>'L', -120674=>'L', -120675=>'L', -120676=>'L', -120677=>'L', -120678=>'L', -120679=>'L', -120680=>'L', -120681=>'L', -120682=>'L', -120683=>'L', -120684=>'L', -120685=>'L', -120686=>'L', -120687=>'L', -120688=>'L', -120689=>'L', -120690=>'L', -120691=>'L', -120692=>'L', -120693=>'L', -120694=>'L', -120695=>'L', -120696=>'L', -120697=>'L', -120698=>'L', -120699=>'L', -120700=>'L', -120701=>'L', -120702=>'L', -120703=>'L', -120704=>'L', -120705=>'L', -120706=>'L', -120707=>'L', -120708=>'L', -120709=>'L', -120710=>'L', -120711=>'L', -120712=>'L', -120713=>'L', -120714=>'L', -120715=>'L', -120716=>'L', -120717=>'L', -120718=>'L', -120719=>'L', -120720=>'L', -120721=>'L', -120722=>'L', -120723=>'L', -120724=>'L', -120725=>'L', -120726=>'L', -120727=>'L', -120728=>'L', -120729=>'L', -120730=>'L', -120731=>'L', -120732=>'L', -120733=>'L', -120734=>'L', -120735=>'L', -120736=>'L', -120737=>'L', -120738=>'L', -120739=>'L', -120740=>'L', -120741=>'L', -120742=>'L', -120743=>'L', -120744=>'L', -120745=>'L', -120746=>'L', -120747=>'L', -120748=>'L', -120749=>'L', -120750=>'L', -120751=>'L', -120752=>'L', -120753=>'L', -120754=>'L', -120755=>'L', -120756=>'L', -120757=>'L', -120758=>'L', -120759=>'L', -120760=>'L', -120761=>'L', -120762=>'L', -120763=>'L', -120764=>'L', -120765=>'L', -120766=>'L', -120767=>'L', -120768=>'L', -120769=>'L', -120770=>'L', -120771=>'L', -120772=>'L', -120773=>'L', -120774=>'L', -120775=>'L', -120776=>'L', -120777=>'L', -120778=>'L', -120779=>'L', -120782=>'EN', -120783=>'EN', -120784=>'EN', -120785=>'EN', -120786=>'EN', -120787=>'EN', -120788=>'EN', -120789=>'EN', -120790=>'EN', -120791=>'EN', -120792=>'EN', -120793=>'EN', -120794=>'EN', -120795=>'EN', -120796=>'EN', -120797=>'EN', -120798=>'EN', -120799=>'EN', -120800=>'EN', -120801=>'EN', -120802=>'EN', -120803=>'EN', -120804=>'EN', -120805=>'EN', -120806=>'EN', -120807=>'EN', -120808=>'EN', -120809=>'EN', -120810=>'EN', -120811=>'EN', -120812=>'EN', -120813=>'EN', -120814=>'EN', -120815=>'EN', -120816=>'EN', -120817=>'EN', -120818=>'EN', -120819=>'EN', -120820=>'EN', -120821=>'EN', -120822=>'EN', -120823=>'EN', -120824=>'EN', -120825=>'EN', -120826=>'EN', -120827=>'EN', -120828=>'EN', -120829=>'EN', -120830=>'EN', -120831=>'EN', -131072=>'L', -173782=>'L', -194560=>'L', -194561=>'L', -194562=>'L', -194563=>'L', -194564=>'L', -194565=>'L', -194566=>'L', -194567=>'L', -194568=>'L', -194569=>'L', -194570=>'L', -194571=>'L', -194572=>'L', -194573=>'L', -194574=>'L', -194575=>'L', -194576=>'L', -194577=>'L', -194578=>'L', -194579=>'L', -194580=>'L', -194581=>'L', -194582=>'L', -194583=>'L', -194584=>'L', -194585=>'L', -194586=>'L', -194587=>'L', -194588=>'L', -194589=>'L', -194590=>'L', -194591=>'L', -194592=>'L', -194593=>'L', -194594=>'L', -194595=>'L', -194596=>'L', -194597=>'L', -194598=>'L', -194599=>'L', -194600=>'L', -194601=>'L', -194602=>'L', -194603=>'L', -194604=>'L', -194605=>'L', -194606=>'L', -194607=>'L', -194608=>'L', -194609=>'L', -194610=>'L', -194611=>'L', -194612=>'L', -194613=>'L', -194614=>'L', -194615=>'L', -194616=>'L', -194617=>'L', -194618=>'L', -194619=>'L', -194620=>'L', -194621=>'L', -194622=>'L', -194623=>'L', -194624=>'L', -194625=>'L', -194626=>'L', -194627=>'L', -194628=>'L', -194629=>'L', -194630=>'L', -194631=>'L', -194632=>'L', -194633=>'L', -194634=>'L', -194635=>'L', -194636=>'L', -194637=>'L', -194638=>'L', -194639=>'L', -194640=>'L', -194641=>'L', -194642=>'L', -194643=>'L', -194644=>'L', -194645=>'L', -194646=>'L', -194647=>'L', -194648=>'L', -194649=>'L', -194650=>'L', -194651=>'L', -194652=>'L', -194653=>'L', -194654=>'L', -194655=>'L', -194656=>'L', -194657=>'L', -194658=>'L', -194659=>'L', -194660=>'L', -194661=>'L', -194662=>'L', -194663=>'L', -194664=>'L', -194665=>'L', -194666=>'L', -194667=>'L', -194668=>'L', -194669=>'L', -194670=>'L', -194671=>'L', -194672=>'L', -194673=>'L', -194674=>'L', -194675=>'L', -194676=>'L', -194677=>'L', -194678=>'L', -194679=>'L', -194680=>'L', -194681=>'L', -194682=>'L', -194683=>'L', -194684=>'L', -194685=>'L', -194686=>'L', -194687=>'L', -194688=>'L', -194689=>'L', -194690=>'L', -194691=>'L', -194692=>'L', -194693=>'L', -194694=>'L', -194695=>'L', -194696=>'L', -194697=>'L', -194698=>'L', -194699=>'L', -194700=>'L', -194701=>'L', -194702=>'L', -194703=>'L', -194704=>'L', -194705=>'L', -194706=>'L', -194707=>'L', -194708=>'L', -194709=>'L', -194710=>'L', -194711=>'L', -194712=>'L', -194713=>'L', -194714=>'L', -194715=>'L', -194716=>'L', -194717=>'L', -194718=>'L', -194719=>'L', -194720=>'L', -194721=>'L', -194722=>'L', -194723=>'L', -194724=>'L', -194725=>'L', -194726=>'L', -194727=>'L', -194728=>'L', -194729=>'L', -194730=>'L', -194731=>'L', -194732=>'L', -194733=>'L', -194734=>'L', -194735=>'L', -194736=>'L', -194737=>'L', -194738=>'L', -194739=>'L', -194740=>'L', -194741=>'L', -194742=>'L', -194743=>'L', -194744=>'L', -194745=>'L', -194746=>'L', -194747=>'L', -194748=>'L', -194749=>'L', -194750=>'L', -194751=>'L', -194752=>'L', -194753=>'L', -194754=>'L', -194755=>'L', -194756=>'L', -194757=>'L', -194758=>'L', -194759=>'L', -194760=>'L', -194761=>'L', -194762=>'L', -194763=>'L', -194764=>'L', -194765=>'L', -194766=>'L', -194767=>'L', -194768=>'L', -194769=>'L', -194770=>'L', -194771=>'L', -194772=>'L', -194773=>'L', -194774=>'L', -194775=>'L', -194776=>'L', -194777=>'L', -194778=>'L', -194779=>'L', -194780=>'L', -194781=>'L', -194782=>'L', -194783=>'L', -194784=>'L', -194785=>'L', -194786=>'L', -194787=>'L', -194788=>'L', -194789=>'L', -194790=>'L', -194791=>'L', -194792=>'L', -194793=>'L', -194794=>'L', -194795=>'L', -194796=>'L', -194797=>'L', -194798=>'L', -194799=>'L', -194800=>'L', -194801=>'L', -194802=>'L', -194803=>'L', -194804=>'L', -194805=>'L', -194806=>'L', -194807=>'L', -194808=>'L', -194809=>'L', -194810=>'L', -194811=>'L', -194812=>'L', -194813=>'L', -194814=>'L', -194815=>'L', -194816=>'L', -194817=>'L', -194818=>'L', -194819=>'L', -194820=>'L', -194821=>'L', -194822=>'L', -194823=>'L', -194824=>'L', -194825=>'L', -194826=>'L', -194827=>'L', -194828=>'L', -194829=>'L', -194830=>'L', -194831=>'L', -194832=>'L', -194833=>'L', -194834=>'L', -194835=>'L', -194836=>'L', -194837=>'L', -194838=>'L', -194839=>'L', -194840=>'L', -194841=>'L', -194842=>'L', -194843=>'L', -194844=>'L', -194845=>'L', -194846=>'L', -194847=>'L', -194848=>'L', -194849=>'L', -194850=>'L', -194851=>'L', -194852=>'L', -194853=>'L', -194854=>'L', -194855=>'L', -194856=>'L', -194857=>'L', -194858=>'L', -194859=>'L', -194860=>'L', -194861=>'L', -194862=>'L', -194863=>'L', -194864=>'L', -194865=>'L', -194866=>'L', -194867=>'L', -194868=>'L', -194869=>'L', -194870=>'L', -194871=>'L', -194872=>'L', -194873=>'L', -194874=>'L', -194875=>'L', -194876=>'L', -194877=>'L', -194878=>'L', -194879=>'L', -194880=>'L', -194881=>'L', -194882=>'L', -194883=>'L', -194884=>'L', -194885=>'L', -194886=>'L', -194887=>'L', -194888=>'L', -194889=>'L', -194890=>'L', -194891=>'L', -194892=>'L', -194893=>'L', -194894=>'L', -194895=>'L', -194896=>'L', -194897=>'L', -194898=>'L', -194899=>'L', -194900=>'L', -194901=>'L', -194902=>'L', -194903=>'L', -194904=>'L', -194905=>'L', -194906=>'L', -194907=>'L', -194908=>'L', -194909=>'L', -194910=>'L', -194911=>'L', -194912=>'L', -194913=>'L', -194914=>'L', -194915=>'L', -194916=>'L', -194917=>'L', -194918=>'L', -194919=>'L', -194920=>'L', -194921=>'L', -194922=>'L', -194923=>'L', -194924=>'L', -194925=>'L', -194926=>'L', -194927=>'L', -194928=>'L', -194929=>'L', -194930=>'L', -194931=>'L', -194932=>'L', -194933=>'L', -194934=>'L', -194935=>'L', -194936=>'L', -194937=>'L', -194938=>'L', -194939=>'L', -194940=>'L', -194941=>'L', -194942=>'L', -194943=>'L', -194944=>'L', -194945=>'L', -194946=>'L', -194947=>'L', -194948=>'L', -194949=>'L', -194950=>'L', -194951=>'L', -194952=>'L', -194953=>'L', -194954=>'L', -194955=>'L', -194956=>'L', -194957=>'L', -194958=>'L', -194959=>'L', -194960=>'L', -194961=>'L', -194962=>'L', -194963=>'L', -194964=>'L', -194965=>'L', -194966=>'L', -194967=>'L', -194968=>'L', -194969=>'L', -194970=>'L', -194971=>'L', -194972=>'L', -194973=>'L', -194974=>'L', -194975=>'L', -194976=>'L', -194977=>'L', -194978=>'L', -194979=>'L', -194980=>'L', -194981=>'L', -194982=>'L', -194983=>'L', -194984=>'L', -194985=>'L', -194986=>'L', -194987=>'L', -194988=>'L', -194989=>'L', -194990=>'L', -194991=>'L', -194992=>'L', -194993=>'L', -194994=>'L', -194995=>'L', -194996=>'L', -194997=>'L', -194998=>'L', -194999=>'L', -195000=>'L', -195001=>'L', -195002=>'L', -195003=>'L', -195004=>'L', -195005=>'L', -195006=>'L', -195007=>'L', -195008=>'L', -195009=>'L', -195010=>'L', -195011=>'L', -195012=>'L', -195013=>'L', -195014=>'L', -195015=>'L', -195016=>'L', -195017=>'L', -195018=>'L', -195019=>'L', -195020=>'L', -195021=>'L', -195022=>'L', -195023=>'L', -195024=>'L', -195025=>'L', -195026=>'L', -195027=>'L', -195028=>'L', -195029=>'L', -195030=>'L', -195031=>'L', -195032=>'L', -195033=>'L', -195034=>'L', -195035=>'L', -195036=>'L', -195037=>'L', -195038=>'L', -195039=>'L', -195040=>'L', -195041=>'L', -195042=>'L', -195043=>'L', -195044=>'L', -195045=>'L', -195046=>'L', -195047=>'L', -195048=>'L', -195049=>'L', -195050=>'L', -195051=>'L', -195052=>'L', -195053=>'L', -195054=>'L', -195055=>'L', -195056=>'L', -195057=>'L', -195058=>'L', -195059=>'L', -195060=>'L', -195061=>'L', -195062=>'L', -195063=>'L', -195064=>'L', -195065=>'L', -195066=>'L', -195067=>'L', -195068=>'L', -195069=>'L', -195070=>'L', -195071=>'L', -195072=>'L', -195073=>'L', -195074=>'L', -195075=>'L', -195076=>'L', -195077=>'L', -195078=>'L', -195079=>'L', -195080=>'L', -195081=>'L', -195082=>'L', -195083=>'L', -195084=>'L', -195085=>'L', -195086=>'L', -195087=>'L', -195088=>'L', -195089=>'L', -195090=>'L', -195091=>'L', -195092=>'L', -195093=>'L', -195094=>'L', -195095=>'L', -195096=>'L', -195097=>'L', -195098=>'L', -195099=>'L', -195100=>'L', -195101=>'L', -917505=>'BN', -917536=>'BN', -917537=>'BN', -917538=>'BN', -917539=>'BN', -917540=>'BN', -917541=>'BN', -917542=>'BN', -917543=>'BN', -917544=>'BN', -917545=>'BN', -917546=>'BN', -917547=>'BN', -917548=>'BN', -917549=>'BN', -917550=>'BN', -917551=>'BN', -917552=>'BN', -917553=>'BN', -917554=>'BN', -917555=>'BN', -917556=>'BN', -917557=>'BN', -917558=>'BN', -917559=>'BN', -917560=>'BN', -917561=>'BN', -917562=>'BN', -917563=>'BN', -917564=>'BN', -917565=>'BN', -917566=>'BN', -917567=>'BN', -917568=>'BN', -917569=>'BN', -917570=>'BN', -917571=>'BN', -917572=>'BN', -917573=>'BN', -917574=>'BN', -917575=>'BN', -917576=>'BN', -917577=>'BN', -917578=>'BN', -917579=>'BN', -917580=>'BN', -917581=>'BN', -917582=>'BN', -917583=>'BN', -917584=>'BN', -917585=>'BN', -917586=>'BN', -917587=>'BN', -917588=>'BN', -917589=>'BN', -917590=>'BN', -917591=>'BN', -917592=>'BN', -917593=>'BN', -917594=>'BN', -917595=>'BN', -917596=>'BN', -917597=>'BN', -917598=>'BN', -917599=>'BN', -917600=>'BN', -917601=>'BN', -917602=>'BN', -917603=>'BN', -917604=>'BN', -917605=>'BN', -917606=>'BN', -917607=>'BN', -917608=>'BN', -917609=>'BN', -917610=>'BN', -917611=>'BN', -917612=>'BN', -917613=>'BN', -917614=>'BN', -917615=>'BN', -917616=>'BN', -917617=>'BN', -917618=>'BN', -917619=>'BN', -917620=>'BN', -917621=>'BN', -917622=>'BN', -917623=>'BN', -917624=>'BN', -917625=>'BN', -917626=>'BN', -917627=>'BN', -917628=>'BN', -917629=>'BN', -917630=>'BN', -917631=>'BN', -917760=>'NSM', -917761=>'NSM', -917762=>'NSM', -917763=>'NSM', -917764=>'NSM', -917765=>'NSM', -917766=>'NSM', -917767=>'NSM', -917768=>'NSM', -917769=>'NSM', -917770=>'NSM', -917771=>'NSM', -917772=>'NSM', -917773=>'NSM', -917774=>'NSM', -917775=>'NSM', -917776=>'NSM', -917777=>'NSM', -917778=>'NSM', -917779=>'NSM', -917780=>'NSM', -917781=>'NSM', -917782=>'NSM', -917783=>'NSM', -917784=>'NSM', -917785=>'NSM', -917786=>'NSM', -917787=>'NSM', -917788=>'NSM', -917789=>'NSM', -917790=>'NSM', -917791=>'NSM', -917792=>'NSM', -917793=>'NSM', -917794=>'NSM', -917795=>'NSM', -917796=>'NSM', -917797=>'NSM', -917798=>'NSM', -917799=>'NSM', -917800=>'NSM', -917801=>'NSM', -917802=>'NSM', -917803=>'NSM', -917804=>'NSM', -917805=>'NSM', -917806=>'NSM', -917807=>'NSM', -917808=>'NSM', -917809=>'NSM', -917810=>'NSM', -917811=>'NSM', -917812=>'NSM', -917813=>'NSM', -917814=>'NSM', -917815=>'NSM', -917816=>'NSM', -917817=>'NSM', -917818=>'NSM', -917819=>'NSM', -917820=>'NSM', -917821=>'NSM', -917822=>'NSM', -917823=>'NSM', -917824=>'NSM', -917825=>'NSM', -917826=>'NSM', -917827=>'NSM', -917828=>'NSM', -917829=>'NSM', -917830=>'NSM', -917831=>'NSM', -917832=>'NSM', -917833=>'NSM', -917834=>'NSM', -917835=>'NSM', -917836=>'NSM', -917837=>'NSM', -917838=>'NSM', -917839=>'NSM', -917840=>'NSM', -917841=>'NSM', -917842=>'NSM', -917843=>'NSM', -917844=>'NSM', -917845=>'NSM', -917846=>'NSM', -917847=>'NSM', -917848=>'NSM', -917849=>'NSM', -917850=>'NSM', -917851=>'NSM', -917852=>'NSM', -917853=>'NSM', -917854=>'NSM', -917855=>'NSM', -917856=>'NSM', -917857=>'NSM', -917858=>'NSM', -917859=>'NSM', -917860=>'NSM', -917861=>'NSM', -917862=>'NSM', -917863=>'NSM', -917864=>'NSM', -917865=>'NSM', -917866=>'NSM', -917867=>'NSM', -917868=>'NSM', -917869=>'NSM', -917870=>'NSM', -917871=>'NSM', -917872=>'NSM', -917873=>'NSM', -917874=>'NSM', -917875=>'NSM', -917876=>'NSM', -917877=>'NSM', -917878=>'NSM', -917879=>'NSM', -917880=>'NSM', -917881=>'NSM', -917882=>'NSM', -917883=>'NSM', -917884=>'NSM', -917885=>'NSM', -917886=>'NSM', -917887=>'NSM', -917888=>'NSM', -917889=>'NSM', -917890=>'NSM', -917891=>'NSM', -917892=>'NSM', -917893=>'NSM', -917894=>'NSM', -917895=>'NSM', -917896=>'NSM', -917897=>'NSM', -917898=>'NSM', -917899=>'NSM', -917900=>'NSM', -917901=>'NSM', -917902=>'NSM', -917903=>'NSM', -917904=>'NSM', -917905=>'NSM', -917906=>'NSM', -917907=>'NSM', -917908=>'NSM', -917909=>'NSM', -917910=>'NSM', -917911=>'NSM', -917912=>'NSM', -917913=>'NSM', -917914=>'NSM', -917915=>'NSM', -917916=>'NSM', -917917=>'NSM', -917918=>'NSM', -917919=>'NSM', -917920=>'NSM', -917921=>'NSM', -917922=>'NSM', -917923=>'NSM', -917924=>'NSM', -917925=>'NSM', -917926=>'NSM', -917927=>'NSM', -917928=>'NSM', -917929=>'NSM', -917930=>'NSM', -917931=>'NSM', -917932=>'NSM', -917933=>'NSM', -917934=>'NSM', -917935=>'NSM', -917936=>'NSM', -917937=>'NSM', -917938=>'NSM', -917939=>'NSM', -917940=>'NSM', -917941=>'NSM', -917942=>'NSM', -917943=>'NSM', -917944=>'NSM', -917945=>'NSM', -917946=>'NSM', -917947=>'NSM', -917948=>'NSM', -917949=>'NSM', -917950=>'NSM', -917951=>'NSM', -917952=>'NSM', -917953=>'NSM', -917954=>'NSM', -917955=>'NSM', -917956=>'NSM', -917957=>'NSM', -917958=>'NSM', -917959=>'NSM', -917960=>'NSM', -917961=>'NSM', -917962=>'NSM', -917963=>'NSM', -917964=>'NSM', -917965=>'NSM', -917966=>'NSM', -917967=>'NSM', -917968=>'NSM', -917969=>'NSM', -917970=>'NSM', -917971=>'NSM', -917972=>'NSM', -917973=>'NSM', -917974=>'NSM', -917975=>'NSM', -917976=>'NSM', -917977=>'NSM', -917978=>'NSM', -917979=>'NSM', -917980=>'NSM', -917981=>'NSM', -917982=>'NSM', -917983=>'NSM', -917984=>'NSM', -917985=>'NSM', -917986=>'NSM', -917987=>'NSM', -917988=>'NSM', -917989=>'NSM', -917990=>'NSM', -917991=>'NSM', -917992=>'NSM', -917993=>'NSM', -917994=>'NSM', -917995=>'NSM', -917996=>'NSM', -917997=>'NSM', -917998=>'NSM', -917999=>'NSM', -983040=>'L', -1048573=>'L', -1048576=>'L', -1114109=>'L' -); - -/** - * Mirror unicode characters. For information on bidi mirroring, see UAX #9: Bidirectional Algorithm, at http://www.unicode.org/unicode/reports/tr9/ - * @public - */ -public static $uni_mirror = array ( -0x0028=>0x0029, -0x0029=>0x0028, -0x003C=>0x003E, -0x003E=>0x003C, -0x005B=>0x005D, -0x005D=>0x005B, -0x007B=>0x007D, -0x007D=>0x007B, -0x00AB=>0x00BB, -0x00BB=>0x00AB, -0x0F3A=>0x0F3B, -0x0F3B=>0x0F3A, -0x0F3C=>0x0F3D, -0x0F3D=>0x0F3C, -0x169B=>0x169C, -0x169C=>0x169B, -0x2018=>0x2019, -0x2019=>0x2018, -0x201C=>0x201D, -0x201D=>0x201C, -0x2039=>0x203A, -0x203A=>0x2039, -0x2045=>0x2046, -0x2046=>0x2045, -0x207D=>0x207E, -0x207E=>0x207D, -0x208D=>0x208E, -0x208E=>0x208D, -0x2208=>0x220B, -0x2209=>0x220C, -0x220A=>0x220D, -0x220B=>0x2208, -0x220C=>0x2209, -0x220D=>0x220A, -0x2215=>0x29F5, -0x223C=>0x223D, -0x223D=>0x223C, -0x2243=>0x22CD, -0x2252=>0x2253, -0x2253=>0x2252, -0x2254=>0x2255, -0x2255=>0x2254, -0x2264=>0x2265, -0x2265=>0x2264, -0x2266=>0x2267, -0x2267=>0x2266, -0x2268=>0x2269, -0x2269=>0x2268, -0x226A=>0x226B, -0x226B=>0x226A, -0x226E=>0x226F, -0x226F=>0x226E, -0x2270=>0x2271, -0x2271=>0x2270, -0x2272=>0x2273, -0x2273=>0x2272, -0x2274=>0x2275, -0x2275=>0x2274, -0x2276=>0x2277, -0x2277=>0x2276, -0x2278=>0x2279, -0x2279=>0x2278, -0x227A=>0x227B, -0x227B=>0x227A, -0x227C=>0x227D, -0x227D=>0x227C, -0x227E=>0x227F, -0x227F=>0x227E, -0x2280=>0x2281, -0x2281=>0x2280, -0x2282=>0x2283, -0x2283=>0x2282, -0x2284=>0x2285, -0x2285=>0x2284, -0x2286=>0x2287, -0x2287=>0x2286, -0x2288=>0x2289, -0x2289=>0x2288, -0x228A=>0x228B, -0x228B=>0x228A, -0x228F=>0x2290, -0x2290=>0x228F, -0x2291=>0x2292, -0x2292=>0x2291, -0x2298=>0x29B8, -0x22A2=>0x22A3, -0x22A3=>0x22A2, -0x22A6=>0x2ADE, -0x22A8=>0x2AE4, -0x22A9=>0x2AE3, -0x22AB=>0x2AE5, -0x22B0=>0x22B1, -0x22B1=>0x22B0, -0x22B2=>0x22B3, -0x22B3=>0x22B2, -0x22B4=>0x22B5, -0x22B5=>0x22B4, -0x22B6=>0x22B7, -0x22B7=>0x22B6, -0x22C9=>0x22CA, -0x22CA=>0x22C9, -0x22CB=>0x22CC, -0x22CC=>0x22CB, -0x22CD=>0x2243, -0x22D0=>0x22D1, -0x22D1=>0x22D0, -0x22D6=>0x22D7, -0x22D7=>0x22D6, -0x22D8=>0x22D9, -0x22D9=>0x22D8, -0x22DA=>0x22DB, -0x22DB=>0x22DA, -0x22DC=>0x22DD, -0x22DD=>0x22DC, -0x22DE=>0x22DF, -0x22DF=>0x22DE, -0x22E0=>0x22E1, -0x22E1=>0x22E0, -0x22E2=>0x22E3, -0x22E3=>0x22E2, -0x22E4=>0x22E5, -0x22E5=>0x22E4, -0x22E6=>0x22E7, -0x22E7=>0x22E6, -0x22E8=>0x22E9, -0x22E9=>0x22E8, -0x22EA=>0x22EB, -0x22EB=>0x22EA, -0x22EC=>0x22ED, -0x22ED=>0x22EC, -0x22F0=>0x22F1, -0x22F1=>0x22F0, -0x22F2=>0x22FA, -0x22F3=>0x22FB, -0x22F4=>0x22FC, -0x22F6=>0x22FD, -0x22F7=>0x22FE, -0x22FA=>0x22F2, -0x22FB=>0x22F3, -0x22FC=>0x22F4, -0x22FD=>0x22F6, -0x22FE=>0x22F7, -0x2308=>0x2309, -0x2309=>0x2308, -0x230A=>0x230B, -0x230B=>0x230A, -0x2329=>0x232A, -0x232A=>0x2329, -0x2768=>0x2769, -0x2769=>0x2768, -0x276A=>0x276B, -0x276B=>0x276A, -0x276C=>0x276D, -0x276D=>0x276C, -0x276E=>0x276F, -0x276F=>0x276E, -0x2770=>0x2771, -0x2771=>0x2770, -0x2772=>0x2773, -0x2773=>0x2772, -0x2774=>0x2775, -0x2775=>0x2774, -0x27C3=>0x27C4, -0x27C4=>0x27C3, -0x27C5=>0x27C6, -0x27C6=>0x27C5, -0x27D5=>0x27D6, -0x27D6=>0x27D5, -0x27DD=>0x27DE, -0x27DE=>0x27DD, -0x27E2=>0x27E3, -0x27E3=>0x27E2, -0x27E4=>0x27E5, -0x27E5=>0x27E4, -0x27E6=>0x27E7, -0x27E7=>0x27E6, -0x27E8=>0x27E9, -0x27E9=>0x27E8, -0x27EA=>0x27EB, -0x27EB=>0x27EA, -0x2983=>0x2984, -0x2984=>0x2983, -0x2985=>0x2986, -0x2986=>0x2985, -0x2987=>0x2988, -0x2988=>0x2987, -0x2989=>0x298A, -0x298A=>0x2989, -0x298B=>0x298C, -0x298C=>0x298B, -0x298D=>0x2990, -0x298E=>0x298F, -0x298F=>0x298E, -0x2990=>0x298D, -0x2991=>0x2992, -0x2992=>0x2991, -0x2993=>0x2994, -0x2994=>0x2993, -0x2995=>0x2996, -0x2996=>0x2995, -0x2997=>0x2998, -0x2998=>0x2997, -0x29B8=>0x2298, -0x29C0=>0x29C1, -0x29C1=>0x29C0, -0x29C4=>0x29C5, -0x29C5=>0x29C4, -0x29CF=>0x29D0, -0x29D0=>0x29CF, -0x29D1=>0x29D2, -0x29D2=>0x29D1, -0x29D4=>0x29D5, -0x29D5=>0x29D4, -0x29D8=>0x29D9, -0x29D9=>0x29D8, -0x29DA=>0x29DB, -0x29DB=>0x29DA, -0x29F5=>0x2215, -0x29F8=>0x29F9, -0x29F9=>0x29F8, -0x29FC=>0x29FD, -0x29FD=>0x29FC, -0x2A2B=>0x2A2C, -0x2A2C=>0x2A2B, -0x2A2D=>0x2A2E, -0x2A2E=>0x2A2D, -0x2A34=>0x2A35, -0x2A35=>0x2A34, -0x2A3C=>0x2A3D, -0x2A3D=>0x2A3C, -0x2A64=>0x2A65, -0x2A65=>0x2A64, -0x2A79=>0x2A7A, -0x2A7A=>0x2A79, -0x2A7D=>0x2A7E, -0x2A7E=>0x2A7D, -0x2A7F=>0x2A80, -0x2A80=>0x2A7F, -0x2A81=>0x2A82, -0x2A82=>0x2A81, -0x2A83=>0x2A84, -0x2A84=>0x2A83, -0x2A8B=>0x2A8C, -0x2A8C=>0x2A8B, -0x2A91=>0x2A92, -0x2A92=>0x2A91, -0x2A93=>0x2A94, -0x2A94=>0x2A93, -0x2A95=>0x2A96, -0x2A96=>0x2A95, -0x2A97=>0x2A98, -0x2A98=>0x2A97, -0x2A99=>0x2A9A, -0x2A9A=>0x2A99, -0x2A9B=>0x2A9C, -0x2A9C=>0x2A9B, -0x2AA1=>0x2AA2, -0x2AA2=>0x2AA1, -0x2AA6=>0x2AA7, -0x2AA7=>0x2AA6, -0x2AA8=>0x2AA9, -0x2AA9=>0x2AA8, -0x2AAA=>0x2AAB, -0x2AAB=>0x2AAA, -0x2AAC=>0x2AAD, -0x2AAD=>0x2AAC, -0x2AAF=>0x2AB0, -0x2AB0=>0x2AAF, -0x2AB3=>0x2AB4, -0x2AB4=>0x2AB3, -0x2ABB=>0x2ABC, -0x2ABC=>0x2ABB, -0x2ABD=>0x2ABE, -0x2ABE=>0x2ABD, -0x2ABF=>0x2AC0, -0x2AC0=>0x2ABF, -0x2AC1=>0x2AC2, -0x2AC2=>0x2AC1, -0x2AC3=>0x2AC4, -0x2AC4=>0x2AC3, -0x2AC5=>0x2AC6, -0x2AC6=>0x2AC5, -0x2ACD=>0x2ACE, -0x2ACE=>0x2ACD, -0x2ACF=>0x2AD0, -0x2AD0=>0x2ACF, -0x2AD1=>0x2AD2, -0x2AD2=>0x2AD1, -0x2AD3=>0x2AD4, -0x2AD4=>0x2AD3, -0x2AD5=>0x2AD6, -0x2AD6=>0x2AD5, -0x2ADE=>0x22A6, -0x2AE3=>0x22A9, -0x2AE4=>0x22A8, -0x2AE5=>0x22AB, -0x2AEC=>0x2AED, -0x2AED=>0x2AEC, -0x2AF7=>0x2AF8, -0x2AF8=>0x2AF7, -0x2AF9=>0x2AFA, -0x2AFA=>0x2AF9, -0x2E02=>0x2E03, -0x2E03=>0x2E02, -0x2E04=>0x2E05, -0x2E05=>0x2E04, -0x2E09=>0x2E0A, -0x2E0A=>0x2E09, -0x2E0C=>0x2E0D, -0x2E0D=>0x2E0C, -0x2E1C=>0x2E1D, -0x2E1D=>0x2E1C, -0x3008=>0x3009, -0x3009=>0x3008, -0x300A=>0x300B, -0x300B=>0x300A, -0x300C=>0x300D, -0x300D=>0x300C, -0x300E=>0x300F, -0x300F=>0x300E, -0x3010=>0x3011, -0x3011=>0x3010, -0x3014=>0x3015, -0x3015=>0x3014, -0x3016=>0x3017, -0x3017=>0x3016, -0x3018=>0x3019, -0x3019=>0x3018, -0x301A=>0x301B, -0x301B=>0x301A, -0x301D=>0x301E, -0x301E=>0x301D, -0xFE59=>0xFE5A, -0xFE5A=>0xFE59, -0xFE5B=>0xFE5C, -0xFE5C=>0xFE5B, -0xFE5D=>0xFE5E, -0xFE5E=>0xFE5D, -0xFE64=>0xFE65, -0xFE65=>0xFE64, -0xFF08=>0xFF09, -0xFF09=>0xFF08, -0xFF1C=>0xFF1E, -0xFF1E=>0xFF1C, -0xFF3B=>0xFF3D, -0xFF3D=>0xFF3B, -0xFF5B=>0xFF5D, -0xFF5D=>0xFF5B, -0xFF5F=>0xFF60, -0xFF60=>0xFF5F, -0xFF62=>0xFF63, -0xFF63=>0xFF62); - -/** - * Arabic shape substitutions: char code => (isolated, final, initial, medial). - * @public - */ -public static $uni_arabicsubst = array( -1569=>array(65152), -1570=>array(65153, 65154, 65153, 65154), -1571=>array(65155, 65156, 65155, 65156), -1572=>array(65157, 65158), -1573=>array(65159, 65160, 65159, 65160), -1574=>array(65161, 65162, 65163, 65164), -1575=>array(65165, 65166, 65165, 65166), -1576=>array(65167, 65168, 65169, 65170), -1577=>array(65171, 65172), -1578=>array(65173, 65174, 65175, 65176), -1579=>array(65177, 65178, 65179, 65180), -1580=>array(65181, 65182, 65183, 65184), -1581=>array(65185, 65186, 65187, 65188), -1582=>array(65189, 65190, 65191, 65192), -1583=>array(65193, 65194, 65193, 65194), -1584=>array(65195, 65196, 65195, 65196), -1585=>array(65197, 65198, 65197, 65198), -1586=>array(65199, 65200, 65199, 65200), -1587=>array(65201, 65202, 65203, 65204), -1588=>array(65205, 65206, 65207, 65208), -1589=>array(65209, 65210, 65211, 65212), -1590=>array(65213, 65214, 65215, 65216), -1591=>array(65217, 65218, 65219, 65220), -1592=>array(65221, 65222, 65223, 65224), -1593=>array(65225, 65226, 65227, 65228), -1594=>array(65229, 65230, 65231, 65232), -1601=>array(65233, 65234, 65235, 65236), -1602=>array(65237, 65238, 65239, 65240), -1603=>array(65241, 65242, 65243, 65244), -1604=>array(65245, 65246, 65247, 65248), -1605=>array(65249, 65250, 65251, 65252), -1606=>array(65253, 65254, 65255, 65256), -1607=>array(65257, 65258, 65259, 65260), -1608=>array(65261, 65262, 65261, 65262), -1609=>array(65263, 65264, 64488, 64489), -1610=>array(65265, 65266, 65267, 65268), -1649=>array(64336, 64337), -1655=>array(64477), -1657=>array(64358, 64359, 64360, 64361), -1658=>array(64350, 64351, 64352, 64353), -1659=>array(64338, 64339, 64340, 64341), -1662=>array(64342, 64343, 64344, 64345), -1663=>array(64354, 64355, 64356, 64357), -1664=>array(64346, 64347, 64348, 64349), -1667=>array(64374, 64375, 64376, 64377), -1668=>array(64370, 64371, 64372, 64373), -1670=>array(64378, 64379, 64380, 64381), -1671=>array(64382, 64383, 64384, 64385), -1672=>array(64392, 64393), -1676=>array(64388, 64389), -1677=>array(64386, 64387), -1678=>array(64390, 64391), -1681=>array(64396, 64397), -1688=>array(64394, 64395, 64394, 64395), -1700=>array(64362, 64363, 64364, 64365), -1702=>array(64366, 64367, 64368, 64369), -1705=>array(64398, 64399, 64400, 64401), -1709=>array(64467, 64468, 64469, 64470), -1711=>array(64402, 64403, 64404, 64405), -1713=>array(64410, 64411, 64412, 64413), -1715=>array(64406, 64407, 64408, 64409), -1722=>array(64414, 64415), -1723=>array(64416, 64417, 64418, 64419), -1726=>array(64426, 64427, 64428, 64429), -1728=>array(64420, 64421), -1729=>array(64422, 64423, 64424, 64425), -1733=>array(64480, 64481), -1734=>array(64473, 64474), -1735=>array(64471, 64472), -1736=>array(64475, 64476), -1737=>array(64482, 64483), -1739=>array(64478, 64479), -1740=>array(64508, 64509, 64510, 64511), -1744=>array(64484, 64485, 64486, 64487), -1746=>array(64430, 64431), -1747=>array(64432, 64433) -); - -/** - * Arabic laa letter: (char code => isolated, final, initial, medial). - * @public - */ -public static $uni_laa_array = array ( -1570 =>array(65269, 65270, 65269, 65270), -1571 =>array(65271, 65272, 65271, 65272), -1573 =>array(65273, 65274, 65273, 65274), -1575 =>array(65275, 65276, 65275, 65276) -); - -/** - * Array of character substitutions for sequences of two diacritics symbols. - * Putting the combining mark and character in the same glyph allows us to avoid the two marks overlapping each other in an illegible manner. - * second NSM char code => substitution char - * @public - */ -public static $uni_diacritics = array ( -1612=>64606, # Shadda + Dammatan -1613=>64607, # Shadda + Kasratan -1614=>64608, # Shadda + Fatha -1615=>64609, # Shadda + Damma -1616=>64610 # Shadda + Kasra -); - -/** - * Array of character substitutions from UTF-8 Unicode to Latin1. - * @public - */ -public static $uni_utf8tolatin = array ( -8364=>128, # Euro1 -338=>140, # OE -352=>138, # Scaron -376=>159, # Ydieresis -381=>142, # Zcaron2 -8226=>149, # bullet3 -710=>136, # circumflex -8224=>134, # dagger -8225=>135, # daggerdbl -8230=>133, # ellipsis -8212=>151, # emdash -8211=>150, # endash -402=>131, # florin -8249=>139, # guilsinglleft -8250=>155, # guilsinglright -339=>156, # oe -8240=>137, # perthousand -8222=>132, # quotedblbase -8220=>147, # quotedblleft -8221=>148, # quotedblright -8216=>145, # quoteleft -8217=>146, # quoteright -8218=>130, # quotesinglbase -353=>154, # scaron -732=>152, # tilde -8482=>153, # trademark -382=>158 # zcaron2 -); - -/** - * Array of Encoding Maps. - * @public static - */ -public static $encmap = array( - -// encoding map for: cp874 -'cp874' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'ellipsis',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'kokaithai',162=>'khokhaithai',163=>'khokhuatthai',164=>'khokhwaithai',165=>'khokhonthai',166=>'khorakhangthai',167=>'ngonguthai',168=>'chochanthai',169=>'chochingthai',170=>'chochangthai',171=>'sosothai',172=>'chochoethai',173=>'yoyingthai',174=>'dochadathai',175=>'topatakthai',176=>'thothanthai',177=>'thonangmonthothai',178=>'thophuthaothai',179=>'nonenthai',180=>'dodekthai',181=>'totaothai',182=>'thothungthai',183=>'thothahanthai',184=>'thothongthai',185=>'nonuthai',186=>'bobaimaithai',187=>'poplathai',188=>'phophungthai',189=>'fofathai',190=>'phophanthai',191=>'fofanthai',192=>'phosamphaothai',193=>'momathai',194=>'yoyakthai',195=>'roruathai',196=>'ruthai',197=>'lolingthai',198=>'luthai',199=>'wowaenthai',200=>'sosalathai',201=>'sorusithai',202=>'sosuathai',203=>'hohipthai',204=>'lochulathai',205=>'oangthai',206=>'honokhukthai',207=>'paiyannoithai',208=>'saraathai',209=>'maihanakatthai',210=>'saraaathai',211=>'saraamthai',212=>'saraithai',213=>'saraiithai',214=>'sarauethai',215=>'saraueethai',216=>'sarauthai',217=>'sarauuthai',218=>'phinthuthai',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'bahtthai',224=>'saraethai',225=>'saraaethai',226=>'saraothai',227=>'saraaimaimuanthai',228=>'saraaimaimalaithai',229=>'lakkhangyaothai',230=>'maiyamokthai',231=>'maitaikhuthai',232=>'maiekthai',233=>'maithothai',234=>'maitrithai',235=>'maichattawathai',236=>'thanthakhatthai',237=>'nikhahitthai',238=>'yamakkanthai',239=>'fongmanthai',240=>'zerothai',241=>'onethai',242=>'twothai',243=>'threethai',244=>'fourthai',245=>'fivethai',246=>'sixthai',247=>'seventhai',248=>'eightthai',249=>'ninethai',250=>'angkhankhuthai',251=>'khomutthai',252=>'.notdef',253=>'.notdef',254=>'.notdef',255=>'.notdef'), - -// encoding map for: cp1250 -'cp1250' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'.notdef',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'.notdef',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'Sacute',141=>'Tcaron',142=>'Zcaron',143=>'Zacute',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'sacute',157=>'tcaron',158=>'zcaron',159=>'zacute',160=>'space',161=>'caron',162=>'breve',163=>'Lslash',164=>'currency',165=>'Aogonek',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'Scedilla',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'Zdotaccent',176=>'degree',177=>'plusminus',178=>'ogonek',179=>'lslash',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'aogonek',186=>'scedilla',187=>'guillemotright',188=>'Lcaron',189=>'hungarumlaut',190=>'lcaron',191=>'zdotaccent',192=>'Racute',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Lacute',198=>'Cacute',199=>'Ccedilla',200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Ecaron',205=>'Iacute',206=>'Icircumflex',207=>'Dcaron',208=>'Dcroat',209=>'Nacute',210=>'Ncaron',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'multiply',216=>'Rcaron',217=>'Uring',218=>'Uacute',219=>'Uhungarumlaut',220=>'Udieresis',221=>'Yacute',222=>'Tcommaaccent',223=>'germandbls',224=>'racute',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'lacute',230=>'cacute',231=>'ccedilla',232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'ecaron',237=>'iacute',238=>'icircumflex',239=>'dcaron',240=>'dcroat',241=>'nacute',242=>'ncaron',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'divide',248=>'rcaron',249=>'uring',250=>'uacute',251=>'uhungarumlaut',252=>'udieresis',253=>'yacute',254=>'tcommaaccent',255=>'dotaccent'), - -// encoding map for: cp1251 -'cp1251' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'afii10051',129=>'afii10052',130=>'quotesinglbase',131=>'afii10100',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'Euro',137=>'perthousand',138=>'afii10058',139=>'guilsinglleft',140=>'afii10059',141=>'afii10061',142=>'afii10060',143=>'afii10145',144=>'afii10099',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'afii10106',155=>'guilsinglright',156=>'afii10107',157=>'afii10109',158=>'afii10108',159=>'afii10193',160=>'space',161=>'afii10062',162=>'afii10110',163=>'afii10057',164=>'currency',165=>'afii10050',166=>'brokenbar',167=>'section',168=>'afii10023',169=>'copyright',170=>'afii10053',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'afii10056',176=>'degree',177=>'plusminus',178=>'afii10055',179=>'afii10103',180=>'afii10098',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'afii10071',185=>'afii61352',186=>'afii10101',187=>'guillemotright',188=>'afii10105',189=>'afii10054',190=>'afii10102',191=>'afii10104',192=>'afii10017',193=>'afii10018',194=>'afii10019',195=>'afii10020',196=>'afii10021',197=>'afii10022',198=>'afii10024',199=>'afii10025',200=>'afii10026',201=>'afii10027',202=>'afii10028',203=>'afii10029',204=>'afii10030',205=>'afii10031',206=>'afii10032',207=>'afii10033',208=>'afii10034',209=>'afii10035',210=>'afii10036',211=>'afii10037',212=>'afii10038',213=>'afii10039',214=>'afii10040',215=>'afii10041',216=>'afii10042',217=>'afii10043',218=>'afii10044',219=>'afii10045',220=>'afii10046',221=>'afii10047',222=>'afii10048',223=>'afii10049',224=>'afii10065',225=>'afii10066',226=>'afii10067',227=>'afii10068',228=>'afii10069',229=>'afii10070',230=>'afii10072',231=>'afii10073',232=>'afii10074',233=>'afii10075',234=>'afii10076',235=>'afii10077',236=>'afii10078',237=>'afii10079',238=>'afii10080',239=>'afii10081',240=>'afii10082',241=>'afii10083',242=>'afii10084',243=>'afii10085',244=>'afii10086',245=>'afii10087',246=>'afii10088',247=>'afii10089',248=>'afii10090',249=>'afii10091',250=>'afii10092',251=>'afii10093',252=>'afii10094',253=>'afii10095',254=>'afii10096',255=>'afii10097'), - -// encoding map for: cp1252 -'cp1252' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'Zcaron',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'zcaron',159=>'Ydieresis',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'), - -// encoding map for: cp1253 -'cp1253' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'.notdef',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'dieresistonos',162=>'Alphatonos',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'afii00208',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'tonos',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'Epsilontonos',185=>'Etatonos',186=>'Iotatonos',187=>'guillemotright',188=>'Omicrontonos',189=>'onehalf',190=>'Upsilontonos',191=>'Omegatonos',192=>'iotadieresistonos',193=>'Alpha',194=>'Beta',195=>'Gamma',196=>'Delta',197=>'Epsilon',198=>'Zeta',199=>'Eta',200=>'Theta',201=>'Iota',202=>'Kappa',203=>'Lambda',204=>'Mu',205=>'Nu',206=>'Xi',207=>'Omicron',208=>'Pi',209=>'Rho',210=>'.notdef',211=>'Sigma',212=>'Tau',213=>'Upsilon',214=>'Phi',215=>'Chi',216=>'Psi',217=>'Omega',218=>'Iotadieresis',219=>'Upsilondieresis',220=>'alphatonos',221=>'epsilontonos',222=>'etatonos',223=>'iotatonos',224=>'upsilondieresistonos',225=>'alpha',226=>'beta',227=>'gamma',228=>'delta',229=>'epsilon',230=>'zeta',231=>'eta',232=>'theta',233=>'iota',234=>'kappa',235=>'lambda',236=>'mu',237=>'nu',238=>'xi',239=>'omicron',240=>'pi',241=>'rho',242=>'sigma1',243=>'sigma',244=>'tau',245=>'upsilon',246=>'phi',247=>'chi',248=>'psi',249=>'omega',250=>'iotadieresis',251=>'upsilondieresis',252=>'omicrontonos',253=>'upsilontonos',254=>'omegatonos',255=>'.notdef'), - -// encoding map for: cp1254 -'cp1254' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'Scaron',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'scaron',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'.notdef',159=>'Ydieresis',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Gbreve',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Idotaccent',222=>'Scedilla',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'gbreve',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'dotlessi',254=>'scedilla',255=>'ydieresis'), - -// encoding map for: cp1255 -'cp1255' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'afii57636',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'multiply',171=>'guillemotleft',172=>'logicalnot',173=>'sfthyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'middot',184=>'cedilla',185=>'onesuperior',186=>'divide',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'afii57799',193=>'afii57801',194=>'afii57800',195=>'afii57802',196=>'afii57793',197=>'afii57794',198=>'afii57795',199=>'afii57798',200=>'afii57797',201=>'afii57806',202=>'.notdef',203=>'afii57796',204=>'afii57807',205=>'afii57839',206=>'afii57645',207=>'afii57841',208=>'afii57842',209=>'afii57804',210=>'afii57803',211=>'afii57658',212=>'afii57716',213=>'afii57717',214=>'afii57718',215=>'gereshhebrew',216=>'gershayimhebrew',217=>'.notdef',218=>'.notdef',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'.notdef',224=>'afii57664',225=>'afii57665',226=>'afii57666',227=>'afii57667',228=>'afii57668',229=>'afii57669',230=>'afii57670',231=>'afii57671',232=>'afii57672',233=>'afii57673',234=>'afii57674',235=>'afii57675',236=>'afii57676',237=>'afii57677',238=>'afii57678',239=>'afii57679',240=>'afii57680',241=>'afii57681',242=>'afii57682',243=>'afii57683',244=>'afii57684',245=>'afii57685',246=>'afii57686',247=>'afii57687',248=>'afii57688',249=>'afii57689',250=>'afii57690',251=>'.notdef',252=>'.notdef',253=>'afii299',254=>'afii300',255=>'.notdef'), - -// encoding map for: cp1256 -'cp1256' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'afii57506',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'afii57511',139=>'guilsinglleft',140=>'OE',141=>'afii57507',142=>'afii57508',143=>'afii57512',144=>'afii57509',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'afii57513',155=>'guilsinglright',156=>'oe',157=>'afii61664',158=>'afii301',159=>'afii57514',160=>'space',161=>'afii57388',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'afii57403',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'afii57407',192=>'.notdef',193=>'afii57409',194=>'afii57410',195=>'afii57411',196=>'afii57412',197=>'afii57413',198=>'afii57414',199=>'afii57415',200=>'afii57416',201=>'afii57417',202=>'afii57418',203=>'afii57419',204=>'afii57420',205=>'afii57421',206=>'afii57422',207=>'afii57423',208=>'afii57424',209=>'afii57425',210=>'afii57426',211=>'afii57427',212=>'afii57428',213=>'afii57429',214=>'afii57430',215=>'multiply',216=>'afii57431',217=>'afii57432',218=>'afii57433',219=>'afii57434',220=>'afii57440',221=>'afii57441',222=>'afii57442',223=>'afii57443',224=>'agrave',225=>'afii57444',226=>'acircumflex',227=>'afii57445',228=>'afii57446',229=>'afii57470',230=>'afii57448',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'afii57449',237=>'afii57450',238=>'icircumflex',239=>'idieresis',240=>'afii57451',241=>'afii57452',242=>'afii57453',243=>'afii57454',244=>'ocircumflex',245=>'afii57455',246=>'afii57456',247=>'divide',248=>'afii57457',249=>'ugrave',250=>'afii57458',251=>'ucircumflex',252=>'udieresis',253=>'afii299',254=>'afii300',255=>'afii57519'), - -// encoding map for: cp1257 -'cp1257' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'.notdef',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'.notdef',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'.notdef',141=>'dieresis',142=>'caron',143=>'cedilla',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'.notdef',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'.notdef',157=>'macron',158=>'ogonek',159=>'.notdef',160=>'space',161=>'.notdef',162=>'cent',163=>'sterling',164=>'currency',165=>'.notdef',166=>'brokenbar',167=>'section',168=>'Oslash',169=>'copyright',170=>'Rcommaaccent',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'AE',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'oslash',185=>'onesuperior',186=>'rcommaaccent',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'ae',192=>'Aogonek',193=>'Iogonek',194=>'Amacron',195=>'Cacute',196=>'Adieresis',197=>'Aring',198=>'Eogonek',199=>'Emacron',200=>'Ccaron',201=>'Eacute',202=>'Zacute',203=>'Edotaccent',204=>'Gcommaaccent',205=>'Kcommaaccent',206=>'Imacron',207=>'Lcommaaccent',208=>'Scaron',209=>'Nacute',210=>'Ncommaaccent',211=>'Oacute',212=>'Omacron',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Uogonek',217=>'Lslash',218=>'Sacute',219=>'Umacron',220=>'Udieresis',221=>'Zdotaccent',222=>'Zcaron',223=>'germandbls',224=>'aogonek',225=>'iogonek',226=>'amacron',227=>'cacute',228=>'adieresis',229=>'aring',230=>'eogonek',231=>'emacron',232=>'ccaron',233=>'eacute',234=>'zacute',235=>'edotaccent',236=>'gcommaaccent',237=>'kcommaaccent',238=>'imacron',239=>'lcommaaccent',240=>'scaron',241=>'nacute',242=>'ncommaaccent',243=>'oacute',244=>'omacron',245=>'otilde',246=>'odieresis',247=>'divide',248=>'uogonek',249=>'lslash',250=>'sacute',251=>'umacron',252=>'udieresis',253=>'zdotaccent',254=>'zcaron',255=>'dotaccent'), - -// encoding map for: cp1258 -'cp1258' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'Euro',129=>'.notdef',130=>'quotesinglbase',131=>'florin',132=>'quotedblbase',133=>'ellipsis',134=>'dagger',135=>'daggerdbl',136=>'circumflex',137=>'perthousand',138=>'.notdef',139=>'guilsinglleft',140=>'OE',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'quoteleft',146=>'quoteright',147=>'quotedblleft',148=>'quotedblright',149=>'bullet',150=>'endash',151=>'emdash',152=>'tilde',153=>'trademark',154=>'.notdef',155=>'guilsinglright',156=>'oe',157=>'.notdef',158=>'.notdef',159=>'Ydieresis',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'gravecomb',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Dcroat',209=>'Ntilde',210=>'hookabovecomb',211=>'Oacute',212=>'Ocircumflex',213=>'Ohorn',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Uhorn',222=>'tildecomb',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'acutecomb',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'dcroat',241=>'ntilde',242=>'dotbelowcomb',243=>'oacute',244=>'ocircumflex',245=>'ohorn',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'uhorn',254=>'dong',255=>'ydieresis'), - -// encoding map for: iso-8859-1 -'iso-8859-1' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'), - -// encoding map for: iso-8859-2 -'iso-8859-2' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'Aogonek',162=>'breve',163=>'Lslash',164=>'currency',165=>'Lcaron',166=>'Sacute',167=>'section',168=>'dieresis',169=>'Scaron',170=>'Scedilla',171=>'Tcaron',172=>'Zacute',173=>'hyphen',174=>'Zcaron',175=>'Zdotaccent',176=>'degree',177=>'aogonek',178=>'ogonek',179=>'lslash',180=>'acute',181=>'lcaron',182=>'sacute',183=>'caron',184=>'cedilla',185=>'scaron',186=>'scedilla',187=>'tcaron',188=>'zacute',189=>'hungarumlaut',190=>'zcaron',191=>'zdotaccent',192=>'Racute',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Lacute',198=>'Cacute',199=>'Ccedilla',200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Ecaron',205=>'Iacute',206=>'Icircumflex',207=>'Dcaron',208=>'Dcroat',209=>'Nacute',210=>'Ncaron',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'multiply',216=>'Rcaron',217=>'Uring',218=>'Uacute',219=>'Uhungarumlaut',220=>'Udieresis',221=>'Yacute',222=>'Tcommaaccent',223=>'germandbls',224=>'racute',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'lacute',230=>'cacute',231=>'ccedilla',232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'ecaron',237=>'iacute',238=>'icircumflex',239=>'dcaron',240=>'dcroat',241=>'nacute',242=>'ncaron',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'divide',248=>'rcaron',249=>'uring',250=>'uacute',251=>'uhungarumlaut',252=>'udieresis',253=>'yacute',254=>'tcommaaccent',255=>'dotaccent'), - -// encoding map for: iso-8859-4 -'iso-8859-4' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'Aogonek',162=>'kgreenlandic',163=>'Rcommaaccent',164=>'currency',165=>'Itilde',166=>'Lcommaaccent',167=>'section',168=>'dieresis',169=>'Scaron',170=>'Emacron',171=>'Gcommaaccent',172=>'Tbar',173=>'hyphen',174=>'Zcaron',175=>'macron',176=>'degree',177=>'aogonek',178=>'ogonek',179=>'rcommaaccent',180=>'acute',181=>'itilde',182=>'lcommaaccent',183=>'caron',184=>'cedilla',185=>'scaron',186=>'emacron',187=>'gcommaaccent',188=>'tbar',189=>'Eng',190=>'zcaron',191=>'eng',192=>'Amacron',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Iogonek',200=>'Ccaron',201=>'Eacute',202=>'Eogonek',203=>'Edieresis',204=>'Edotaccent',205=>'Iacute',206=>'Icircumflex',207=>'Imacron',208=>'Dcroat',209=>'Ncommaaccent',210=>'Omacron',211=>'Kcommaaccent',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Uogonek',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Utilde',222=>'Umacron',223=>'germandbls',224=>'amacron',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'iogonek',232=>'ccaron',233=>'eacute',234=>'eogonek',235=>'edieresis',236=>'edotaccent',237=>'iacute',238=>'icircumflex',239=>'imacron',240=>'dcroat',241=>'ncommaaccent',242=>'omacron',243=>'kcommaaccent',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'uogonek',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'utilde',254=>'umacron',255=>'dotaccent'), - -// encoding map for: iso-8859-5 -'iso-8859-5' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'afii10023',162=>'afii10051',163=>'afii10052',164=>'afii10053',165=>'afii10054',166=>'afii10055',167=>'afii10056',168=>'afii10057',169=>'afii10058',170=>'afii10059',171=>'afii10060',172=>'afii10061',173=>'hyphen',174=>'afii10062',175=>'afii10145',176=>'afii10017',177=>'afii10018',178=>'afii10019',179=>'afii10020',180=>'afii10021',181=>'afii10022',182=>'afii10024',183=>'afii10025',184=>'afii10026',185=>'afii10027',186=>'afii10028',187=>'afii10029',188=>'afii10030',189=>'afii10031',190=>'afii10032',191=>'afii10033',192=>'afii10034',193=>'afii10035',194=>'afii10036',195=>'afii10037',196=>'afii10038',197=>'afii10039',198=>'afii10040',199=>'afii10041',200=>'afii10042',201=>'afii10043',202=>'afii10044',203=>'afii10045',204=>'afii10046',205=>'afii10047',206=>'afii10048',207=>'afii10049',208=>'afii10065',209=>'afii10066',210=>'afii10067',211=>'afii10068',212=>'afii10069',213=>'afii10070',214=>'afii10072',215=>'afii10073',216=>'afii10074',217=>'afii10075',218=>'afii10076',219=>'afii10077',220=>'afii10078',221=>'afii10079',222=>'afii10080',223=>'afii10081',224=>'afii10082',225=>'afii10083',226=>'afii10084',227=>'afii10085',228=>'afii10086',229=>'afii10087',230=>'afii10088',231=>'afii10089',232=>'afii10090',233=>'afii10091',234=>'afii10092',235=>'afii10093',236=>'afii10094',237=>'afii10095',238=>'afii10096',239=>'afii10097',240=>'afii61352',241=>'afii10071',242=>'afii10099',243=>'afii10100',244=>'afii10101',245=>'afii10102',246=>'afii10103',247=>'afii10104',248=>'afii10105',249=>'afii10106',250=>'afii10107',251=>'afii10108',252=>'afii10109',253=>'section',254=>'afii10110',255=>'afii10193'), - -// encoding map for: iso-8859-7 -'iso-8859-7' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'quoteleft',162=>'quoteright',163=>'sterling',164=>'.notdef',165=>'.notdef',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'.notdef',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'.notdef',175=>'afii00208',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'tonos',181=>'dieresistonos',182=>'Alphatonos',183=>'periodcentered',184=>'Epsilontonos',185=>'Etatonos',186=>'Iotatonos',187=>'guillemotright',188=>'Omicrontonos',189=>'onehalf',190=>'Upsilontonos',191=>'Omegatonos',192=>'iotadieresistonos',193=>'Alpha',194=>'Beta',195=>'Gamma',196=>'Delta',197=>'Epsilon',198=>'Zeta',199=>'Eta',200=>'Theta',201=>'Iota',202=>'Kappa',203=>'Lambda',204=>'Mu',205=>'Nu',206=>'Xi',207=>'Omicron',208=>'Pi',209=>'Rho',210=>'.notdef',211=>'Sigma',212=>'Tau',213=>'Upsilon',214=>'Phi',215=>'Chi',216=>'Psi',217=>'Omega',218=>'Iotadieresis',219=>'Upsilondieresis',220=>'alphatonos',221=>'epsilontonos',222=>'etatonos',223=>'iotatonos',224=>'upsilondieresistonos',225=>'alpha',226=>'beta',227=>'gamma',228=>'delta',229=>'epsilon',230=>'zeta',231=>'eta',232=>'theta',233=>'iota',234=>'kappa',235=>'lambda',236=>'mu',237=>'nu',238=>'xi',239=>'omicron',240=>'pi',241=>'rho',242=>'sigma1',243=>'sigma',244=>'tau',245=>'upsilon',246=>'phi',247=>'chi',248=>'psi',249=>'omega',250=>'iotadieresis',251=>'upsilondieresis',252=>'omicrontonos',253=>'upsilontonos',254=>'omegatonos',255=>'.notdef'), - -// encoding map for: iso-8859-9 -'iso-8859-9' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'currency',165=>'yen',166=>'brokenbar',167=>'section',168=>'dieresis',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'acute',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'cedilla',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'onequarter',189=>'onehalf',190=>'threequarters',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Gbreve',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Idotaccent',222=>'Scedilla',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'gbreve',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'dotlessi',254=>'scedilla',255=>'ydieresis'), - -// encoding map for: iso-8859-11 -'iso-8859-11' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'kokaithai',162=>'khokhaithai',163=>'khokhuatthai',164=>'khokhwaithai',165=>'khokhonthai',166=>'khorakhangthai',167=>'ngonguthai',168=>'chochanthai',169=>'chochingthai',170=>'chochangthai',171=>'sosothai',172=>'chochoethai',173=>'yoyingthai',174=>'dochadathai',175=>'topatakthai',176=>'thothanthai',177=>'thonangmonthothai',178=>'thophuthaothai',179=>'nonenthai',180=>'dodekthai',181=>'totaothai',182=>'thothungthai',183=>'thothahanthai',184=>'thothongthai',185=>'nonuthai',186=>'bobaimaithai',187=>'poplathai',188=>'phophungthai',189=>'fofathai',190=>'phophanthai',191=>'fofanthai',192=>'phosamphaothai',193=>'momathai',194=>'yoyakthai',195=>'roruathai',196=>'ruthai',197=>'lolingthai',198=>'luthai',199=>'wowaenthai',200=>'sosalathai',201=>'sorusithai',202=>'sosuathai',203=>'hohipthai',204=>'lochulathai',205=>'oangthai',206=>'honokhukthai',207=>'paiyannoithai',208=>'saraathai',209=>'maihanakatthai',210=>'saraaathai',211=>'saraamthai',212=>'saraithai',213=>'saraiithai',214=>'sarauethai',215=>'saraueethai',216=>'sarauthai',217=>'sarauuthai',218=>'phinthuthai',219=>'.notdef',220=>'.notdef',221=>'.notdef',222=>'.notdef',223=>'bahtthai',224=>'saraethai',225=>'saraaethai',226=>'saraothai',227=>'saraaimaimuanthai',228=>'saraaimaimalaithai',229=>'lakkhangyaothai',230=>'maiyamokthai',231=>'maitaikhuthai',232=>'maiekthai',233=>'maithothai',234=>'maitrithai',235=>'maichattawathai',236=>'thanthakhatthai',237=>'nikhahitthai',238=>'yamakkanthai',239=>'fongmanthai',240=>'zerothai',241=>'onethai',242=>'twothai',243=>'threethai',244=>'fourthai',245=>'fivethai',246=>'sixthai',247=>'seventhai',248=>'eightthai',249=>'ninethai',250=>'angkhankhuthai',251=>'khomutthai',252=>'.notdef',253=>'.notdef',254=>'.notdef',255=>'.notdef'), - -// encoding map for: iso-8859-15 -'iso-8859-15' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'exclamdown',162=>'cent',163=>'sterling',164=>'Euro',165=>'yen',166=>'Scaron',167=>'section',168=>'scaron',169=>'copyright',170=>'ordfeminine',171=>'guillemotleft',172=>'logicalnot',173=>'hyphen',174=>'registered',175=>'macron',176=>'degree',177=>'plusminus',178=>'twosuperior',179=>'threesuperior',180=>'Zcaron',181=>'mu',182=>'paragraph',183=>'periodcentered',184=>'zcaron',185=>'onesuperior',186=>'ordmasculine',187=>'guillemotright',188=>'OE',189=>'oe',190=>'Ydieresis',191=>'questiondown',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Atilde',196=>'Adieresis',197=>'Aring',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Eth',209=>'Ntilde',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Otilde',214=>'Odieresis',215=>'multiply',216=>'Oslash',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Yacute',222=>'Thorn',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'atilde',228=>'adieresis',229=>'aring',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'eth',241=>'ntilde',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'otilde',246=>'odieresis',247=>'divide',248=>'oslash',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'yacute',254=>'thorn',255=>'ydieresis'), - -// encoding map for: iso-8859-16 -'iso-8859-16' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'space',161=>'Aogonek',162=>'aogonek',163=>'Lslash',164=>'Euro',165=>'quotedblbase',166=>'Scaron',167=>'section',168=>'scaron',169=>'copyright',170=>'Scommaaccent',171=>'guillemotleft',172=>'Zacute',173=>'hyphen',174=>'zacute',175=>'Zdotaccent',176=>'degree',177=>'plusminus',178=>'Ccaron',179=>'lslash',180=>'Zcaron',181=>'quotedblright',182=>'paragraph',183=>'periodcentered',184=>'zcaron',185=>'ccaron',186=>'scommaaccent',187=>'guillemotright',188=>'OE',189=>'oe',190=>'Ydieresis',191=>'zdotaccent',192=>'Agrave',193=>'Aacute',194=>'Acircumflex',195=>'Abreve',196=>'Adieresis',197=>'Cacute',198=>'AE',199=>'Ccedilla',200=>'Egrave',201=>'Eacute',202=>'Ecircumflex',203=>'Edieresis',204=>'Igrave',205=>'Iacute',206=>'Icircumflex',207=>'Idieresis',208=>'Dcroat',209=>'Nacute',210=>'Ograve',211=>'Oacute',212=>'Ocircumflex',213=>'Ohungarumlaut',214=>'Odieresis',215=>'Sacute',216=>'Uhungarumlaut',217=>'Ugrave',218=>'Uacute',219=>'Ucircumflex',220=>'Udieresis',221=>'Eogonek',222=>'Tcommaaccent',223=>'germandbls',224=>'agrave',225=>'aacute',226=>'acircumflex',227=>'abreve',228=>'adieresis',229=>'cacute',230=>'ae',231=>'ccedilla',232=>'egrave',233=>'eacute',234=>'ecircumflex',235=>'edieresis',236=>'igrave',237=>'iacute',238=>'icircumflex',239=>'idieresis',240=>'dcroat',241=>'nacute',242=>'ograve',243=>'oacute',244=>'ocircumflex',245=>'ohungarumlaut',246=>'odieresis',247=>'sacute',248=>'uhungarumlaut',249=>'ugrave',250=>'uacute',251=>'ucircumflex',252=>'udieresis',253=>'eogonek',254=>'tcommaaccent',255=>'ydieresis'), - -// encoding map for: koi8-r -'koi8-r' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'SF100000',129=>'SF110000',130=>'SF010000',131=>'SF030000',132=>'SF020000',133=>'SF040000',134=>'SF080000',135=>'SF090000',136=>'SF060000',137=>'SF070000',138=>'SF050000',139=>'upblock',140=>'dnblock',141=>'block',142=>'lfblock',143=>'rtblock',144=>'ltshade',145=>'shade',146=>'dkshade',147=>'integraltp',148=>'filledbox',149=>'periodcentered',150=>'radical',151=>'approxequal',152=>'lessequal',153=>'greaterequal',154=>'space',155=>'integralbt',156=>'degree',157=>'twosuperior',158=>'periodcentered',159=>'divide',160=>'SF430000',161=>'SF240000',162=>'SF510000',163=>'afii10071',164=>'SF520000',165=>'SF390000',166=>'SF220000',167=>'SF210000',168=>'SF250000',169=>'SF500000',170=>'SF490000',171=>'SF380000',172=>'SF280000',173=>'SF270000',174=>'SF260000',175=>'SF360000',176=>'SF370000',177=>'SF420000',178=>'SF190000',179=>'afii10023',180=>'SF200000',181=>'SF230000',182=>'SF470000',183=>'SF480000',184=>'SF410000',185=>'SF450000',186=>'SF460000',187=>'SF400000',188=>'SF540000',189=>'SF530000',190=>'SF440000',191=>'copyright',192=>'afii10096',193=>'afii10065',194=>'afii10066',195=>'afii10088',196=>'afii10069',197=>'afii10070',198=>'afii10086',199=>'afii10068',200=>'afii10087',201=>'afii10074',202=>'afii10075',203=>'afii10076',204=>'afii10077',205=>'afii10078',206=>'afii10079',207=>'afii10080',208=>'afii10081',209=>'afii10097',210=>'afii10082',211=>'afii10083',212=>'afii10084',213=>'afii10085',214=>'afii10072',215=>'afii10067',216=>'afii10094',217=>'afii10093',218=>'afii10073',219=>'afii10090',220=>'afii10095',221=>'afii10091',222=>'afii10089',223=>'afii10092',224=>'afii10048',225=>'afii10017',226=>'afii10018',227=>'afii10040',228=>'afii10021',229=>'afii10022',230=>'afii10038',231=>'afii10020',232=>'afii10039',233=>'afii10026',234=>'afii10027',235=>'afii10028',236=>'afii10029',237=>'afii10030',238=>'afii10031',239=>'afii10032',240=>'afii10033',241=>'afii10049',242=>'afii10034',243=>'afii10035',244=>'afii10036',245=>'afii10037',246=>'afii10024',247=>'afii10019',248=>'afii10046',249=>'afii10045',250=>'afii10025',251=>'afii10042',252=>'afii10047',253=>'afii10043',254=>'afii10041',255=>'afii10044'), - -// encoding map for: koi8-u -'koi8-u' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'quotedbl',35=>'numbersign',36=>'dollar',37=>'percent',38=>'ampersand',39=>'quotesingle',40=>'parenleft',41=>'parenright',42=>'asterisk',43=>'plus',44=>'comma',45=>'hyphen',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'at',65=>'A',66=>'B',67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'bracketleft',92=>'backslash',93=>'bracketright',94=>'asciicircum',95=>'underscore',96=>'grave',97=>'a',98=>'b',99=>'c',100=>'d',101=>'e',102=>'f',103=>'g',104=>'h',105=>'i',106=>'j',107=>'k',108=>'l',109=>'m',110=>'n',111=>'o',112=>'p',113=>'q',114=>'r',115=>'s',116=>'t',117=>'u',118=>'v',119=>'w',120=>'x',121=>'y',122=>'z',123=>'braceleft',124=>'bar',125=>'braceright',126=>'asciitilde',127=>'.notdef',128=>'SF100000',129=>'SF110000',130=>'SF010000',131=>'SF030000',132=>'SF020000',133=>'SF040000',134=>'SF080000',135=>'SF090000',136=>'SF060000',137=>'SF070000',138=>'SF050000',139=>'upblock',140=>'dnblock',141=>'block',142=>'lfblock',143=>'rtblock',144=>'ltshade',145=>'shade',146=>'dkshade',147=>'integraltp',148=>'filledbox',149=>'bullet',150=>'radical',151=>'approxequal',152=>'lessequal',153=>'greaterequal',154=>'space',155=>'integralbt',156=>'degree',157=>'twosuperior',158=>'periodcentered',159=>'divide',160=>'SF430000',161=>'SF240000',162=>'SF510000',163=>'afii10071',164=>'afii10101',165=>'SF390000',166=>'afii10103',167=>'afii10104',168=>'SF250000',169=>'SF500000',170=>'SF490000',171=>'SF380000',172=>'SF280000',173=>'afii10098',174=>'SF260000',175=>'SF360000',176=>'SF370000',177=>'SF420000',178=>'SF190000',179=>'afii10023',180=>'afii10053',181=>'SF230000',182=>'afii10055',183=>'afii10056',184=>'SF410000',185=>'SF450000',186=>'SF460000',187=>'SF400000',188=>'SF540000',189=>'afii10050',190=>'SF440000',191=>'copyright',192=>'afii10096',193=>'afii10065',194=>'afii10066',195=>'afii10088',196=>'afii10069',197=>'afii10070',198=>'afii10086',199=>'afii10068',200=>'afii10087',201=>'afii10074',202=>'afii10075',203=>'afii10076',204=>'afii10077',205=>'afii10078',206=>'afii10079',207=>'afii10080',208=>'afii10081',209=>'afii10097',210=>'afii10082',211=>'afii10083',212=>'afii10084',213=>'afii10085',214=>'afii10072',215=>'afii10067',216=>'afii10094',217=>'afii10093',218=>'afii10073',219=>'afii10090',220=>'afii10095',221=>'afii10091',222=>'afii10089',223=>'afii10092',224=>'afii10048',225=>'afii10017',226=>'afii10018',227=>'afii10040',228=>'afii10021',229=>'afii10022',230=>'afii10038',231=>'afii10020',232=>'afii10039',233=>'afii10026',234=>'afii10027',235=>'afii10028',236=>'afii10029',237=>'afii10030',238=>'afii10031',239=>'afii10032',240=>'afii10033',241=>'afii10049',242=>'afii10034',243=>'afii10035',244=>'afii10036',245=>'afii10037',246=>'afii10024',247=>'afii10019',248=>'afii10046',249=>'afii10045',250=>'afii10025',251=>'afii10042',252=>'afii10047',253=>'afii10043',254=>'afii10041',255=>'afii10044'), - -// encoding map for: symbol -'symbol' => array(0=>'.notdef',1=>'.notdef',2=>'.notdef',3=>'.notdef',4=>'.notdef',5=>'.notdef',6=>'.notdef',7=>'.notdef',8=>'.notdef',9=>'.notdef',10=>'.notdef',11=>'.notdef',12=>'.notdef',13=>'.notdef',14=>'.notdef',15=>'.notdef',16=>'.notdef',17=>'.notdef',18=>'.notdef',19=>'.notdef',20=>'.notdef',21=>'.notdef',22=>'.notdef',23=>'.notdef',24=>'.notdef',25=>'.notdef',26=>'.notdef',27=>'.notdef',28=>'.notdef',29=>'.notdef',30=>'.notdef',31=>'.notdef',32=>'space',33=>'exclam',34=>'universal',35=>'numbersign',36=>'existential',37=>'percent',38=>'ampersand',39=>'suchthat',40=>'parenleft',41=>'parenright',42=>'asteriskmath',43=>'plus',44=>'comma',45=>'minus',46=>'period',47=>'slash',48=>'zero',49=>'one',50=>'two',51=>'three',52=>'four',53=>'five',54=>'six',55=>'seven',56=>'eight',57=>'nine',58=>'colon',59=>'semicolon',60=>'less',61=>'equal',62=>'greater',63=>'question',64=>'congruent',65=>'Alpha',66=>'Beta',67=>'Chi',68=>'Delta',69=>'Epsilon',70=>'Phi',71=>'Gamma',72=>'Eta',73=>'Iota',74=>'theta1',75=>'Kappa',76=>'Lambda',77=>'Mu',78=>'Nu',79=>'Omicron',80=>'Pi',81=>'Theta',82=>'Rho',83=>'Sigma',84=>'Tau',85=>'Upsilon',86=>'sigma1',87=>'Omega',88=>'Xi',89=>'Psi',90=>'Zeta',91=>'bracketleft',92=>'therefore',93=>'bracketright',94=>'perpendicular',95=>'underscore',96=>'radicalex',97=>'alpha',98=>'beta',99=>'chi',100=>'delta',101=>'epsilon',102=>'phi',103=>'gamma',104=>'eta',105=>'iota',106=>'phi1',107=>'kappa',108=>'lambda',109=>'mu',110=>'nu',111=>'omicron',112=>'pi',113=>'theta',114=>'rho',115=>'sigma',116=>'tau',117=>'upsilon',118=>'omega1',119=>'omega',120=>'xi',121=>'psi',122=>'zeta',123=>'braceleft',124=>'bar',125=>'braceright',126=>'similar',127=>'.notdef',128=>'.notdef',129=>'.notdef',130=>'.notdef',131=>'.notdef',132=>'.notdef',133=>'.notdef',134=>'.notdef',135=>'.notdef',136=>'.notdef',137=>'.notdef',138=>'.notdef',139=>'.notdef',140=>'.notdef',141=>'.notdef',142=>'.notdef',143=>'.notdef',144=>'.notdef',145=>'.notdef',146=>'.notdef',147=>'.notdef',148=>'.notdef',149=>'.notdef',150=>'.notdef',151=>'.notdef',152=>'.notdef',153=>'.notdef',154=>'.notdef',155=>'.notdef',156=>'.notdef',157=>'.notdef',158=>'.notdef',159=>'.notdef',160=>'Euro',161=>'Upsilon1',162=>'minute',163=>'lessequal',164=>'fraction',165=>'infinity',166=>'florin',167=>'club',168=>'diamond',169=>'heart',170=>'spade',171=>'arrowboth',172=>'arrowleft',173=>'arrowup',174=>'arrowright',175=>'arrowdown',176=>'degree',177=>'plusminus',178=>'second',179=>'greaterequal',180=>'multiply',181=>'proportional',182=>'partialdiff',183=>'bullet',184=>'divide',185=>'notequal',186=>'equivalence',187=>'approxequal',188=>'ellipsis',189=>'arrowvertex',190=>'arrowhorizex',191=>'carriagereturn',192=>'aleph',193=>'Ifraktur',194=>'Rfraktur',195=>'weierstrass',196=>'circlemultiply',197=>'circleplus',198=>'emptyset',199=>'intersection',200=>'union',201=>'propersuperset',202=>'reflexsuperset',203=>'notsubset',204=>'propersubset',205=>'reflexsubset',206=>'element',207=>'notelement',208=>'angle',209=>'gradient',210=>'registerserif',211=>'copyrightserif',212=>'trademarkserif',213=>'product',214=>'radical',215=>'dotmath',216=>'logicalnot',217=>'logicaland',218=>'logicalor',219=>'arrowdblboth',220=>'arrowdblleft',221=>'arrowdblup',222=>'arrowdblright',223=>'arrowdbldown',224=>'lozenge',225=>'angleleft',226=>'registersans',227=>'copyrightsans',228=>'trademarksans',229=>'summation',230=>'parenlefttp',231=>'parenleftex',232=>'parenleftbt',233=>'bracketlefttp',234=>'bracketleftex',235=>'bracketleftbt',236=>'bracelefttp',237=>'braceleftmid',238=>'braceleftbt',239=>'braceex',240=>'.notdef',241=>'angleright',242=>'integral',243=>'integraltp',244=>'integralex',245=>'integralbt',246=>'parenrighttp',247=>'parenrightex',248=>'parenrightbt',249=>'bracketrighttp',250=>'bracketrightex',251=>'bracketrightbt',252=>'bracerighttp',253=>'bracerightmid',254=>'bracerightbt',255=>'.notdef',1226=>'registered',1227=>'copyright',1228=>'trademark') - -); // end of encoding maps - -/** - * ToUnicode map for Identity-H stream - * @public static - */ -public static $uni_identity_h = "/CIDInit /ProcSet findresource begin\n12 dict begin\nbegincmap\n/CIDSystemInfo << /Registry (Adobe) /Ordering (UCS) /Supplement 0 >> def\n/CMapName /Adobe-Identity-UCS def\n/CMapType 2 def\n/WMode 0 def\n1 begincodespacerange\n<0000> \nendcodespacerange\n100 beginbfrange\n<0000> <00ff> <0000>\n<0100> <01ff> <0100>\n<0200> <02ff> <0200>\n<0300> <03ff> <0300>\n<0400> <04ff> <0400>\n<0500> <05ff> <0500>\n<0600> <06ff> <0600>\n<0700> <07ff> <0700>\n<0800> <08ff> <0800>\n<0900> <09ff> <0900>\n<0a00> <0aff> <0a00>\n<0b00> <0bff> <0b00>\n<0c00> <0cff> <0c00>\n<0d00> <0dff> <0d00>\n<0e00> <0eff> <0e00>\n<0f00> <0fff> <0f00>\n<1000> <10ff> <1000>\n<1100> <11ff> <1100>\n<1200> <12ff> <1200>\n<1300> <13ff> <1300>\n<1400> <14ff> <1400>\n<1500> <15ff> <1500>\n<1600> <16ff> <1600>\n<1700> <17ff> <1700>\n<1800> <18ff> <1800>\n<1900> <19ff> <1900>\n<1a00> <1aff> <1a00>\n<1b00> <1bff> <1b00>\n<1c00> <1cff> <1c00>\n<1d00> <1dff> <1d00>\n<1e00> <1eff> <1e00>\n<1f00> <1fff> <1f00>\n<2000> <20ff> <2000>\n<2100> <21ff> <2100>\n<2200> <22ff> <2200>\n<2300> <23ff> <2300>\n<2400> <24ff> <2400>\n<2500> <25ff> <2500>\n<2600> <26ff> <2600>\n<2700> <27ff> <2700>\n<2800> <28ff> <2800>\n<2900> <29ff> <2900>\n<2a00> <2aff> <2a00>\n<2b00> <2bff> <2b00>\n<2c00> <2cff> <2c00>\n<2d00> <2dff> <2d00>\n<2e00> <2eff> <2e00>\n<2f00> <2fff> <2f00>\n<3000> <30ff> <3000>\n<3100> <31ff> <3100>\n<3200> <32ff> <3200>\n<3300> <33ff> <3300>\n<3400> <34ff> <3400>\n<3500> <35ff> <3500>\n<3600> <36ff> <3600>\n<3700> <37ff> <3700>\n<3800> <38ff> <3800>\n<3900> <39ff> <3900>\n<3a00> <3aff> <3a00>\n<3b00> <3bff> <3b00>\n<3c00> <3cff> <3c00>\n<3d00> <3dff> <3d00>\n<3e00> <3eff> <3e00>\n<3f00> <3fff> <3f00>\n<4000> <40ff> <4000>\n<4100> <41ff> <4100>\n<4200> <42ff> <4200>\n<4300> <43ff> <4300>\n<4400> <44ff> <4400>\n<4500> <45ff> <4500>\n<4600> <46ff> <4600>\n<4700> <47ff> <4700>\n<4800> <48ff> <4800>\n<4900> <49ff> <4900>\n<4a00> <4aff> <4a00>\n<4b00> <4bff> <4b00>\n<4c00> <4cff> <4c00>\n<4d00> <4dff> <4d00>\n<4e00> <4eff> <4e00>\n<4f00> <4fff> <4f00>\n<5000> <50ff> <5000>\n<5100> <51ff> <5100>\n<5200> <52ff> <5200>\n<5300> <53ff> <5300>\n<5400> <54ff> <5400>\n<5500> <55ff> <5500>\n<5600> <56ff> <5600>\n<5700> <57ff> <5700>\n<5800> <58ff> <5800>\n<5900> <59ff> <5900>\n<5a00> <5aff> <5a00>\n<5b00> <5bff> <5b00>\n<5c00> <5cff> <5c00>\n<5d00> <5dff> <5d00>\n<5e00> <5eff> <5e00>\n<5f00> <5fff> <5f00>\n<6000> <60ff> <6000>\n<6100> <61ff> <6100>\n<6200> <62ff> <6200>\n<6300> <63ff> <6300>\nendbfrange\n100 beginbfrange\n<6400> <64ff> <6400>\n<6500> <65ff> <6500>\n<6600> <66ff> <6600>\n<6700> <67ff> <6700>\n<6800> <68ff> <6800>\n<6900> <69ff> <6900>\n<6a00> <6aff> <6a00>\n<6b00> <6bff> <6b00>\n<6c00> <6cff> <6c00>\n<6d00> <6dff> <6d00>\n<6e00> <6eff> <6e00>\n<6f00> <6fff> <6f00>\n<7000> <70ff> <7000>\n<7100> <71ff> <7100>\n<7200> <72ff> <7200>\n<7300> <73ff> <7300>\n<7400> <74ff> <7400>\n<7500> <75ff> <7500>\n<7600> <76ff> <7600>\n<7700> <77ff> <7700>\n<7800> <78ff> <7800>\n<7900> <79ff> <7900>\n<7a00> <7aff> <7a00>\n<7b00> <7bff> <7b00>\n<7c00> <7cff> <7c00>\n<7d00> <7dff> <7d00>\n<7e00> <7eff> <7e00>\n<7f00> <7fff> <7f00>\n<8000> <80ff> <8000>\n<8100> <81ff> <8100>\n<8200> <82ff> <8200>\n<8300> <83ff> <8300>\n<8400> <84ff> <8400>\n<8500> <85ff> <8500>\n<8600> <86ff> <8600>\n<8700> <87ff> <8700>\n<8800> <88ff> <8800>\n<8900> <89ff> <8900>\n<8a00> <8aff> <8a00>\n<8b00> <8bff> <8b00>\n<8c00> <8cff> <8c00>\n<8d00> <8dff> <8d00>\n<8e00> <8eff> <8e00>\n<8f00> <8fff> <8f00>\n<9000> <90ff> <9000>\n<9100> <91ff> <9100>\n<9200> <92ff> <9200>\n<9300> <93ff> <9300>\n<9400> <94ff> <9400>\n<9500> <95ff> <9500>\n<9600> <96ff> <9600>\n<9700> <97ff> <9700>\n<9800> <98ff> <9800>\n<9900> <99ff> <9900>\n<9a00> <9aff> <9a00>\n<9b00> <9bff> <9b00>\n<9c00> <9cff> <9c00>\n<9d00> <9dff> <9d00>\n<9e00> <9eff> <9e00>\n<9f00> <9fff> <9f00>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nendbfrange\n56 beginbfrange\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \nendbfrange\nendcmap\nCMapName currentdict /CMap defineresource pop\nend\nend"; - -} // END OF TCPDF_FONT_DATA CLASS - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/tcpdf.php b/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/tcpdf.php deleted file mode 100644 index 4004347..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/tecnickcom/tcpdf/tcpdf.php +++ /dev/null @@ -1,24729 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : -// This is a PHP class for generating PDF documents without requiring external extensions. -// -// NOTE: -// This class was originally derived in 2002 from the Public -// Domain FPDF class by Olivier Plathey (http://www.fpdf.org), -// but now is almost entirely rewritten and contains thousands of -// new lines of code and hundreds new features. -// -// Main features: -// * no external libraries are required for the basic functions; -// * all standard page formats, custom page formats, custom margins and units of measure; -// * UTF-8 Unicode and Right-To-Left languages; -// * TrueTypeUnicode, TrueType, Type1 and CID-0 fonts; -// * font subsetting; -// * methods to publish some XHTML + CSS code, Javascript and Forms; -// * images, graphic (geometric figures) and transformation methods; -// * supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImageMagick (http://www.imagemagick.org/www/formats.html) -// * 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417; -// * JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies; -// * automatic page header and footer management; -// * document encryption up to 256 bit and digital signature certifications; -// * transactions to UNDO commands; -// * PDF annotations, including links, text and file attachments; -// * text rendering modes (fill, stroke and clipping); -// * multiple columns mode; -// * no-write page regions; -// * bookmarks, named destinations and table of content; -// * text hyphenation; -// * text stretching and spacing (tracking); -// * automatic page break, line break and text alignments including justification; -// * automatic page numbering and page groups; -// * move and delete pages; -// * page compression (requires php-zlib extension); -// * XOBject Templates; -// * Layers and object visibility. -// * PDF/A-1b support -//============================================================+ - -/** - * @file - * This is a PHP class for generating PDF documents without requiring external extensions.
            - * TCPDF project (http://www.tcpdf.org) was originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
            - *

            TCPDF main features are:

            - *
              - *
            • no external libraries are required for the basic functions;
            • - *
            • all standard page formats, custom page formats, custom margins and units of measure;
            • - *
            • UTF-8 Unicode and Right-To-Left languages;
            • - *
            • TrueTypeUnicode, TrueType, Type1 and CID-0 fonts;
            • - *
            • font subsetting;
            • - *
            • methods to publish some XHTML + CSS code, Javascript and Forms;
            • - *
            • images, graphic (geometric figures) and transformation methods; - *
            • supports JPEG, PNG and SVG images natively, all images supported by GD (GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM) and all images supported via ImageMagick (http://www.imagemagick.org/www/formats.html)
            • - *
            • 1D and 2D barcodes: CODE 39, ANSI MH10.8M-1983, USD-3, 3 of 9, CODE 93, USS-93, Standard 2 of 5, Interleaved 2 of 5, CODE 128 A/B/C, 2 and 5 Digits UPC-Based Extension, EAN 8, EAN 13, UPC-A, UPC-E, MSI, POSTNET, PLANET, RMS4CC (Royal Mail 4-state Customer Code), CBC (Customer Bar Code), KIX (Klant index - Customer index), Intelligent Mail Barcode, Onecode, USPS-B-3200, CODABAR, CODE 11, PHARMACODE, PHARMACODE TWO-TRACKS, Datamatrix, QR-Code, PDF417;
            • - *
            • JPEG and PNG ICC profiles, Grayscale, RGB, CMYK, Spot Colors and Transparencies;
            • - *
            • automatic page header and footer management;
            • - *
            • document encryption up to 256 bit and digital signature certifications;
            • - *
            • transactions to UNDO commands;
            • - *
            • PDF annotations, including links, text and file attachments;
            • - *
            • text rendering modes (fill, stroke and clipping);
            • - *
            • multiple columns mode;
            • - *
            • no-write page regions;
            • - *
            • bookmarks, named destinations and table of content;
            • - *
            • text hyphenation;
            • - *
            • text stretching and spacing (tracking);
            • - *
            • automatic page break, line break and text alignments including justification;
            • - *
            • automatic page numbering and page groups;
            • - *
            • move and delete pages;
            • - *
            • page compression (requires php-zlib extension);
            • - *
            • XOBject Templates;
            • - *
            • Layers and object visibility;
            • - *
            • PDF/A-1b support.
            • - *
            - * Tools to encode your unicode fonts are on fonts/utils directory.

            - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 6.3.2 - */ - -// TCPDF configuration -require_once(dirname(__FILE__).'/tcpdf_autoconfig.php'); -// TCPDF static font methods and data -require_once(dirname(__FILE__).'/include/tcpdf_font_data.php'); -// TCPDF static font methods and data -require_once(dirname(__FILE__).'/include/tcpdf_fonts.php'); -// TCPDF static color methods and data -require_once(dirname(__FILE__).'/include/tcpdf_colors.php'); -// TCPDF static image methods and data -require_once(dirname(__FILE__).'/include/tcpdf_images.php'); -// TCPDF static methods and data -require_once(dirname(__FILE__).'/include/tcpdf_static.php'); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/** - * @class TCPDF - * PHP class for generating PDF documents without requiring external extensions. - * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
            - * @package com.tecnick.tcpdf - * @brief PHP class for generating PDF documents without requiring external extensions. - * @version 6.3.2 - * @author Nicola Asuni - info@tecnick.com - * @IgnoreAnnotation("protected") - * @IgnoreAnnotation("public") - * @IgnoreAnnotation("pre") - */ -class TCPDF { - - // Protected properties - - /** - * Current page number. - * @protected - */ - protected $page; - - /** - * Current object number. - * @protected - */ - protected $n; - - /** - * Array of object offsets. - * @protected - */ - protected $offsets = array(); - - /** - * Array of object IDs for each page. - * @protected - */ - protected $pageobjects = array(); - - /** - * Buffer holding in-memory PDF. - * @protected - */ - protected $buffer; - - /** - * Array containing pages. - * @protected - */ - protected $pages = array(); - - /** - * Current document state. - * @protected - */ - protected $state; - - /** - * Compression flag. - * @protected - */ - protected $compress; - - /** - * Current page orientation (P = Portrait, L = Landscape). - * @protected - */ - protected $CurOrientation; - - /** - * Page dimensions. - * @protected - */ - protected $pagedim = array(); - - /** - * Scale factor (number of points in user unit). - * @protected - */ - protected $k; - - /** - * Width of page format in points. - * @protected - */ - protected $fwPt; - - /** - * Height of page format in points. - * @protected - */ - protected $fhPt; - - /** - * Current width of page in points. - * @protected - */ - protected $wPt; - - /** - * Current height of page in points. - * @protected - */ - protected $hPt; - - /** - * Current width of page in user unit. - * @protected - */ - protected $w; - - /** - * Current height of page in user unit. - * @protected - */ - protected $h; - - /** - * Left margin. - * @protected - */ - protected $lMargin; - - /** - * Right margin. - * @protected - */ - protected $rMargin; - - /** - * Cell left margin (used by regions). - * @protected - */ - protected $clMargin; - - /** - * Cell right margin (used by regions). - * @protected - */ - protected $crMargin; - - /** - * Top margin. - * @protected - */ - protected $tMargin; - - /** - * Page break margin. - * @protected - */ - protected $bMargin; - - /** - * Array of cell internal paddings ('T' => top, 'R' => right, 'B' => bottom, 'L' => left). - * @since 5.9.000 (2010-10-03) - * @protected - */ - protected $cell_padding = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0); - - /** - * Array of cell margins ('T' => top, 'R' => right, 'B' => bottom, 'L' => left). - * @since 5.9.000 (2010-10-04) - * @protected - */ - protected $cell_margin = array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0); - - /** - * Current horizontal position in user unit for cell positioning. - * @protected - */ - protected $x; - - /** - * Current vertical position in user unit for cell positioning. - * @protected - */ - protected $y; - - /** - * Height of last cell printed. - * @protected - */ - protected $lasth; - - /** - * Line width in user unit. - * @protected - */ - protected $LineWidth; - - /** - * Array of standard font names. - * @protected - */ - protected $CoreFonts; - - /** - * Array of used fonts. - * @protected - */ - protected $fonts = array(); - - /** - * Array of font files. - * @protected - */ - protected $FontFiles = array(); - - /** - * Array of encoding differences. - * @protected - */ - protected $diffs = array(); - - /** - * Array of used images. - * @protected - */ - protected $images = array(); - - /** - * Depth of the svg tag, to keep track if the svg tag is a subtag or the root tag. - * @protected - */ - protected $svg_tag_depth = 0; - - /** - * Array of Annotations in pages. - * @protected - */ - protected $PageAnnots = array(); - - /** - * Array of internal links. - * @protected - */ - protected $links = array(); - - /** - * Current font family. - * @protected - */ - protected $FontFamily; - - /** - * Current font style. - * @protected - */ - protected $FontStyle; - - /** - * Current font ascent (distance between font top and baseline). - * @protected - * @since 2.8.000 (2007-03-29) - */ - protected $FontAscent; - - /** - * Current font descent (distance between font bottom and baseline). - * @protected - * @since 2.8.000 (2007-03-29) - */ - protected $FontDescent; - - /** - * Underlining flag. - * @protected - */ - protected $underline; - - /** - * Overlining flag. - * @protected - */ - protected $overline; - - /** - * Current font info. - * @protected - */ - protected $CurrentFont; - - /** - * Current font size in points. - * @protected - */ - protected $FontSizePt; - - /** - * Current font size in user unit. - * @protected - */ - protected $FontSize; - - /** - * Commands for drawing color. - * @protected - */ - protected $DrawColor; - - /** - * Commands for filling color. - * @protected - */ - protected $FillColor; - - /** - * Commands for text color. - * @protected - */ - protected $TextColor; - - /** - * Indicates whether fill and text colors are different. - * @protected - */ - protected $ColorFlag; - - /** - * Automatic page breaking. - * @protected - */ - protected $AutoPageBreak; - - /** - * Threshold used to trigger page breaks. - * @protected - */ - protected $PageBreakTrigger; - - /** - * Flag set when processing page header. - * @protected - */ - protected $InHeader = false; - - /** - * Flag set when processing page footer. - * @protected - */ - protected $InFooter = false; - - /** - * Zoom display mode. - * @protected - */ - protected $ZoomMode; - - /** - * Layout display mode. - * @protected - */ - protected $LayoutMode; - - /** - * If true set the document information dictionary in Unicode. - * @protected - */ - protected $docinfounicode = true; - - /** - * Document title. - * @protected - */ - protected $title = ''; - - /** - * Document subject. - * @protected - */ - protected $subject = ''; - - /** - * Document author. - * @protected - */ - protected $author = ''; - - /** - * Document keywords. - * @protected - */ - protected $keywords = ''; - - /** - * Document creator. - * @protected - */ - protected $creator = ''; - - /** - * Starting page number. - * @protected - */ - protected $starting_page_number = 1; - - /** - * The right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image. - * @since 2002-07-31 - * @author Nicola Asuni - * @protected - */ - protected $img_rb_x; - - /** - * The right-bottom corner Y coordinate of last inserted image. - * @since 2002-07-31 - * @author Nicola Asuni - * @protected - */ - protected $img_rb_y; - - /** - * Adjusting factor to convert pixels to user units. - * @since 2004-06-14 - * @author Nicola Asuni - * @protected - */ - protected $imgscale = 1; - - /** - * Boolean flag set to true when the input text is unicode (require unicode fonts). - * @since 2005-01-02 - * @author Nicola Asuni - * @protected - */ - protected $isunicode = false; - - /** - * PDF version. - * @since 1.5.3 - * @protected - */ - protected $PDFVersion = '1.7'; - - /** - * ID of the stored default header template (-1 = not set). - * @protected - */ - protected $header_xobjid = false; - - /** - * If true reset the Header Xobject template at each page - * @protected - */ - protected $header_xobj_autoreset = false; - - /** - * Minimum distance between header and top page margin. - * @protected - */ - protected $header_margin; - - /** - * Minimum distance between footer and bottom page margin. - * @protected - */ - protected $footer_margin; - - /** - * Original left margin value. - * @protected - * @since 1.53.0.TC013 - */ - protected $original_lMargin; - - /** - * Original right margin value. - * @protected - * @since 1.53.0.TC013 - */ - protected $original_rMargin; - - /** - * Default font used on page header. - * @protected - * @var array - * @phpstan-var array{0: string, 1: string, 2: float|null} - */ - protected $header_font; - - /** - * Default font used on page footer. - * @protected - * @var array - * @phpstan-var array{0: string, 1: string, 2: float|null} - */ - protected $footer_font; - - /** - * Language templates. - * @protected - */ - protected $l; - - /** - * Barcode to print on page footer (only if set). - * @protected - */ - protected $barcode = false; - - /** - * Boolean flag to print/hide page header. - * @protected - */ - protected $print_header = true; - - /** - * Boolean flag to print/hide page footer. - * @protected - */ - protected $print_footer = true; - - /** - * Header image logo. - * @protected - */ - protected $header_logo = ''; - - /** - * Width of header image logo in user units. - * @protected - */ - protected $header_logo_width = 30; - - /** - * Title to be printed on default page header. - * @protected - */ - protected $header_title = ''; - - /** - * String to print on page header after title. - * @protected - */ - protected $header_string = ''; - - /** - * Color for header text (RGB array). - * @since 5.9.174 (2012-07-25) - * @protected - * @var int[] - * @phpstan-var array{0: int, 1: int, 2: int} - */ - protected $header_text_color = array(0,0,0); - - /** - * Color for header line (RGB array). - * @since 5.9.174 (2012-07-25) - * @protected - * @var int[] - * @phpstan-var array{0: int, 1: int, 2: int} - */ - protected $header_line_color = array(0,0,0); - - /** - * Color for footer text (RGB array). - * @since 5.9.174 (2012-07-25) - * @protected - * @var int[] - * @phpstan-var array{0: int, 1: int, 2: int} - */ - protected $footer_text_color = array(0,0,0); - - /** - * Color for footer line (RGB array). - * @since 5.9.174 (2012-07-25) - * @protected - * @var int[] - * @phpstan-var array{0: int, 1: int, 2: int} - */ - protected $footer_line_color = array(0,0,0); - - /** - * Text shadow data array. - * @since 5.9.174 (2012-07-25) - * @protected - */ - protected $txtshadow = array('enabled'=>false, 'depth_w'=>0, 'depth_h'=>0, 'color'=>false, 'opacity'=>1, 'blend_mode'=>'Normal'); - - /** - * Default number of columns for html table. - * @protected - */ - protected $default_table_columns = 4; - - // variables for html parser - - /** - * HTML PARSER: array to store current link and rendering styles. - * @protected - */ - protected $HREF = array(); - - /** - * List of available fonts on filesystem. - * @protected - */ - protected $fontlist = array(); - - /** - * Current foreground color. - * @protected - */ - protected $fgcolor; - - /** - * HTML PARSER: array of boolean values, true in case of ordered list (OL), false otherwise. - * @protected - */ - protected $listordered = array(); - - /** - * HTML PARSER: array count list items on nested lists. - * @protected - */ - protected $listcount = array(); - - /** - * HTML PARSER: current list nesting level. - * @protected - */ - protected $listnum = 0; - - /** - * HTML PARSER: indent amount for lists. - * @protected - */ - protected $listindent = 0; - - /** - * HTML PARSER: current list indententation level. - * @protected - */ - protected $listindentlevel = 0; - - /** - * Current background color. - * @protected - */ - protected $bgcolor; - - /** - * Temporary font size in points. - * @protected - */ - protected $tempfontsize = 10; - - /** - * Spacer string for LI tags. - * @protected - */ - protected $lispacer = ''; - - /** - * Default encoding. - * @protected - * @since 1.53.0.TC010 - */ - protected $encoding = 'UTF-8'; - - /** - * Boolean flag to indicate if the document language is Right-To-Left. - * @protected - * @since 2.0.000 - */ - protected $rtl = false; - - /** - * Boolean flag used to force RTL or LTR string direction. - * @protected - * @since 2.0.000 - */ - protected $tmprtl = false; - - // --- Variables used for document encryption: - - /** - * IBoolean flag indicating whether document is protected. - * @protected - * @since 2.0.000 (2008-01-02) - */ - protected $encrypted; - - /** - * Array containing encryption settings. - * @protected - * @since 5.0.005 (2010-05-11) - */ - protected $encryptdata = array(); - - /** - * Last RC4 key encrypted (cached for optimisation). - * @protected - * @since 2.0.000 (2008-01-02) - */ - protected $last_enc_key; - - /** - * Last RC4 computed key. - * @protected - * @since 2.0.000 (2008-01-02) - */ - protected $last_enc_key_c; - - /** - * File ID (used on document trailer). - * @protected - * @since 5.0.005 (2010-05-12) - */ - protected $file_id; - - // --- bookmark --- - - /** - * Outlines for bookmark. - * @protected - * @since 2.1.002 (2008-02-12) - */ - protected $outlines = array(); - - /** - * Outline root for bookmark. - * @protected - * @since 2.1.002 (2008-02-12) - */ - protected $OutlineRoot; - - // --- javascript and form --- - - /** - * Javascript code. - * @protected - * @since 2.1.002 (2008-02-12) - */ - protected $javascript = ''; - - /** - * Javascript counter. - * @protected - * @since 2.1.002 (2008-02-12) - */ - protected $n_js; - - /** - * line through state - * @protected - * @since 2.8.000 (2008-03-19) - */ - protected $linethrough; - - /** - * Array with additional document-wide usage rights for the document. - * @protected - * @since 5.8.014 (2010-08-23) - */ - protected $ur = array(); - - /** - * DPI (Dot Per Inch) Document Resolution (do not change). - * @protected - * @since 3.0.000 (2008-03-27) - */ - protected $dpi = 72; - - /** - * Array of page numbers were a new page group was started (the page numbers are the keys of the array). - * @protected - * @since 3.0.000 (2008-03-27) - */ - protected $newpagegroup = array(); - - /** - * Array that contains the number of pages in each page group. - * @protected - * @since 3.0.000 (2008-03-27) - */ - protected $pagegroups = array(); - - /** - * Current page group number. - * @protected - * @since 3.0.000 (2008-03-27) - */ - protected $currpagegroup = 0; - - /** - * Array of transparency objects and parameters. - * @protected - * @since 3.0.000 (2008-03-27) - */ - protected $extgstates; - - /** - * Set the default JPEG compression quality (1-100). - * @protected - * @since 3.0.000 (2008-03-27) - */ - protected $jpeg_quality; - - /** - * Default cell height ratio. - * @protected - * @since 3.0.014 (2008-05-23) - * @var float - */ - protected $cell_height_ratio = K_CELL_HEIGHT_RATIO; - - /** - * PDF viewer preferences. - * @protected - * @since 3.1.000 (2008-06-09) - */ - protected $viewer_preferences; - - /** - * A name object specifying how the document should be displayed when opened. - * @protected - * @since 3.1.000 (2008-06-09) - */ - protected $PageMode; - - /** - * Array for storing gradient information. - * @protected - * @since 3.1.000 (2008-06-09) - */ - protected $gradients = array(); - - /** - * Array used to store positions inside the pages buffer (keys are the page numbers). - * @protected - * @since 3.2.000 (2008-06-26) - */ - protected $intmrk = array(); - - /** - * Array used to store positions inside the pages buffer (keys are the page numbers). - * @protected - * @since 5.7.000 (2010-08-03) - */ - protected $bordermrk = array(); - - /** - * Array used to store page positions to track empty pages (keys are the page numbers). - * @protected - * @since 5.8.007 (2010-08-18) - */ - protected $emptypagemrk = array(); - - /** - * Array used to store content positions inside the pages buffer (keys are the page numbers). - * @protected - * @since 4.6.021 (2009-07-20) - */ - protected $cntmrk = array(); - - /** - * Array used to store footer positions of each page. - * @protected - * @since 3.2.000 (2008-07-01) - */ - protected $footerpos = array(); - - /** - * Array used to store footer length of each page. - * @protected - * @since 4.0.014 (2008-07-29) - */ - protected $footerlen = array(); - - /** - * Boolean flag to indicate if a new line is created. - * @protected - * @since 3.2.000 (2008-07-01) - */ - protected $newline = true; - - /** - * End position of the latest inserted line. - * @protected - * @since 3.2.000 (2008-07-01) - */ - protected $endlinex = 0; - - /** - * PDF string for width value of the last line. - * @protected - * @since 4.0.006 (2008-07-16) - */ - protected $linestyleWidth = ''; - - /** - * PDF string for CAP value of the last line. - * @protected - * @since 4.0.006 (2008-07-16) - */ - protected $linestyleCap = '0 J'; - - /** - * PDF string for join value of the last line. - * @protected - * @since 4.0.006 (2008-07-16) - */ - protected $linestyleJoin = '0 j'; - - /** - * PDF string for dash value of the last line. - * @protected - * @since 4.0.006 (2008-07-16) - */ - protected $linestyleDash = '[] 0 d'; - - /** - * Boolean flag to indicate if marked-content sequence is open. - * @protected - * @since 4.0.013 (2008-07-28) - */ - protected $openMarkedContent = false; - - /** - * Count the latest inserted vertical spaces on HTML. - * @protected - * @since 4.0.021 (2008-08-24) - */ - protected $htmlvspace = 0; - - /** - * Array of Spot colors. - * @protected - * @since 4.0.024 (2008-09-12) - */ - protected $spot_colors = array(); - - /** - * Symbol used for HTML unordered list items. - * @protected - * @since 4.0.028 (2008-09-26) - */ - protected $lisymbol = ''; - - /** - * String used to mark the beginning and end of EPS image blocks. - * @protected - * @since 4.1.000 (2008-10-18) - */ - protected $epsmarker = 'x#!#EPS#!#x'; - - /** - * Array of transformation matrix. - * @protected - * @since 4.2.000 (2008-10-29) - */ - protected $transfmatrix = array(); - - /** - * Current key for transformation matrix. - * @protected - * @since 4.8.005 (2009-09-17) - */ - protected $transfmatrix_key = 0; - - /** - * Booklet mode for double-sided pages. - * @protected - * @since 4.2.000 (2008-10-29) - */ - protected $booklet = false; - - /** - * Epsilon value used for float calculations. - * @protected - * @since 4.2.000 (2008-10-29) - */ - protected $feps = 0.005; - - /** - * Array used for custom vertical spaces for HTML tags. - * @protected - * @since 4.2.001 (2008-10-30) - */ - protected $tagvspaces = array(); - - /** - * HTML PARSER: custom indent amount for lists. Negative value means disabled. - * @protected - * @since 4.2.007 (2008-11-12) - */ - protected $customlistindent = -1; - - /** - * Boolean flag to indicate if the border of the cell sides that cross the page should be removed. - * @protected - * @since 4.2.010 (2008-11-14) - */ - protected $opencell = true; - - /** - * Array of files to embedd. - * @protected - * @since 4.4.000 (2008-12-07) - */ - protected $embeddedfiles = array(); - - /** - * Boolean flag to indicate if we are inside a PRE tag. - * @protected - * @since 4.4.001 (2008-12-08) - */ - protected $premode = false; - - /** - * Array used to store positions of graphics transformation blocks inside the page buffer. - * keys are the page numbers - * @protected - * @since 4.4.002 (2008-12-09) - */ - protected $transfmrk = array(); - - /** - * Default color for html links. - * @protected - * @since 4.4.003 (2008-12-09) - */ - protected $htmlLinkColorArray = array(0, 0, 255); - - /** - * Default font style to add to html links. - * @protected - * @since 4.4.003 (2008-12-09) - */ - protected $htmlLinkFontStyle = 'U'; - - /** - * Counts the number of pages. - * @protected - * @since 4.5.000 (2008-12-31) - */ - protected $numpages = 0; - - /** - * Array containing page lengths in bytes. - * @protected - * @since 4.5.000 (2008-12-31) - */ - protected $pagelen = array(); - - /** - * Counts the number of pages. - * @protected - * @since 4.5.000 (2008-12-31) - */ - protected $numimages = 0; - - /** - * Store the image keys. - * @protected - * @since 4.5.000 (2008-12-31) - */ - protected $imagekeys = array(); - - /** - * Length of the buffer in bytes. - * @protected - * @since 4.5.000 (2008-12-31) - */ - protected $bufferlen = 0; - - /** - * Counts the number of fonts. - * @protected - * @since 4.5.000 (2009-01-02) - */ - protected $numfonts = 0; - - /** - * Store the font keys. - * @protected - * @since 4.5.000 (2009-01-02) - */ - protected $fontkeys = array(); - - /** - * Store the font object IDs. - * @protected - * @since 4.8.001 (2009-09-09) - */ - protected $font_obj_ids = array(); - - /** - * Store the fage status (true when opened, false when closed). - * @protected - * @since 4.5.000 (2009-01-02) - */ - protected $pageopen = array(); - - /** - * Default monospace font. - * @protected - * @since 4.5.025 (2009-03-10) - */ - protected $default_monospaced_font = 'courier'; - - /** - * Cloned copy of the current class object. - * @protected - * @since 4.5.029 (2009-03-19) - */ - protected $objcopy; - - /** - * Array used to store the lengths of cache files. - * @protected - * @since 4.5.029 (2009-03-19) - */ - protected $cache_file_length = array(); - - /** - * Table header content to be repeated on each new page. - * @protected - * @since 4.5.030 (2009-03-20) - */ - protected $thead = ''; - - /** - * Margins used for table header. - * @protected - * @since 4.5.030 (2009-03-20) - */ - protected $theadMargins = array(); - - /** - * Boolean flag to enable document digital signature. - * @protected - * @since 4.6.005 (2009-04-24) - */ - protected $sign = false; - - /** - * Digital signature data. - * @protected - * @since 4.6.005 (2009-04-24) - */ - protected $signature_data = array(); - - /** - * Digital signature max length. - * @protected - * @since 4.6.005 (2009-04-24) - */ - protected $signature_max_length = 11742; - - /** - * Data for digital signature appearance. - * @protected - * @since 5.3.011 (2010-06-16) - */ - protected $signature_appearance = array('page' => 1, 'rect' => '0 0 0 0'); - - /** - * Array of empty digital signature appearances. - * @protected - * @since 5.9.101 (2011-07-06) - */ - protected $empty_signature_appearance = array(); - - /** - * Boolean flag to enable document timestamping with TSA. - * @protected - * @since 6.0.085 (2014-06-19) - */ - protected $tsa_timestamp = false; - - /** - * Timestamping data. - * @protected - * @since 6.0.085 (2014-06-19) - */ - protected $tsa_data = array(); - - /** - * Regular expression used to find blank characters (required for word-wrapping). - * @protected - * @since 4.6.006 (2009-04-28) - */ - protected $re_spaces = '/[^\S\xa0]/'; - - /** - * Array of $re_spaces parts. - * @protected - * @since 5.5.011 (2010-07-09) - */ - protected $re_space = array('p' => '[^\S\xa0]', 'm' => ''); - - /** - * Digital signature object ID. - * @protected - * @since 4.6.022 (2009-06-23) - */ - protected $sig_obj_id = 0; - - /** - * ID of page objects. - * @protected - * @since 4.7.000 (2009-08-29) - */ - protected $page_obj_id = array(); - - /** - * List of form annotations IDs. - * @protected - * @since 4.8.000 (2009-09-07) - */ - protected $form_obj_id = array(); - - /** - * Deafult Javascript field properties. Possible values are described on official Javascript for Acrobat API reference. Annotation options can be directly specified using the 'aopt' entry. - * @protected - * @since 4.8.000 (2009-09-07) - */ - protected $default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128)); - - /** - * Javascript objects array. - * @protected - * @since 4.8.000 (2009-09-07) - */ - protected $js_objects = array(); - - /** - * Current form action (used during XHTML rendering). - * @protected - * @since 4.8.000 (2009-09-07) - */ - protected $form_action = ''; - - /** - * Current form encryption type (used during XHTML rendering). - * @protected - * @since 4.8.000 (2009-09-07) - */ - protected $form_enctype = 'application/x-www-form-urlencoded'; - - /** - * Current method to submit forms. - * @protected - * @since 4.8.000 (2009-09-07) - */ - protected $form_mode = 'post'; - - /** - * List of fonts used on form fields (fontname => fontkey). - * @protected - * @since 4.8.001 (2009-09-09) - */ - protected $annotation_fonts = array(); - - /** - * List of radio buttons parent objects. - * @protected - * @since 4.8.001 (2009-09-09) - */ - protected $radiobutton_groups = array(); - - /** - * List of radio group objects IDs. - * @protected - * @since 4.8.001 (2009-09-09) - */ - protected $radio_groups = array(); - - /** - * Text indentation value (used for text-indent CSS attribute). - * @protected - * @since 4.8.006 (2009-09-23) - */ - protected $textindent = 0; - - /** - * Store page number when startTransaction() is called. - * @protected - * @since 4.8.006 (2009-09-23) - */ - protected $start_transaction_page = 0; - - /** - * Store Y position when startTransaction() is called. - * @protected - * @since 4.9.001 (2010-03-28) - */ - protected $start_transaction_y = 0; - - /** - * True when we are printing the thead section on a new page. - * @protected - * @since 4.8.027 (2010-01-25) - */ - protected $inthead = false; - - /** - * Array of column measures (width, space, starting Y position). - * @protected - * @since 4.9.001 (2010-03-28) - */ - protected $columns = array(); - - /** - * Number of colums. - * @protected - * @since 4.9.001 (2010-03-28) - */ - protected $num_columns = 1; - - /** - * Current column number. - * @protected - * @since 4.9.001 (2010-03-28) - */ - protected $current_column = 0; - - /** - * Starting page for columns. - * @protected - * @since 4.9.001 (2010-03-28) - */ - protected $column_start_page = 0; - - /** - * Maximum page and column selected. - * @protected - * @since 5.8.000 (2010-08-11) - */ - protected $maxselcol = array('page' => 0, 'column' => 0); - - /** - * Array of: X difference between table cell x start and starting page margin, cellspacing, cellpadding. - * @protected - * @since 5.8.000 (2010-08-11) - */ - protected $colxshift = array('x' => 0, 's' => array('H' => 0, 'V' => 0), 'p' => array('L' => 0, 'T' => 0, 'R' => 0, 'B' => 0)); - - /** - * Text rendering mode: 0 = Fill text; 1 = Stroke text; 2 = Fill, then stroke text; 3 = Neither fill nor stroke text (invisible); 4 = Fill text and add to path for clipping; 5 = Stroke text and add to path for clipping; 6 = Fill, then stroke text and add to path for clipping; 7 = Add text to path for clipping. - * @protected - * @since 4.9.008 (2010-04-03) - */ - protected $textrendermode = 0; - - /** - * Text stroke width in doc units. - * @protected - * @since 4.9.008 (2010-04-03) - */ - protected $textstrokewidth = 0; - - /** - * Current stroke color. - * @protected - * @since 4.9.008 (2010-04-03) - */ - protected $strokecolor; - - /** - * Default unit of measure for document. - * @protected - * @since 5.0.000 (2010-04-22) - */ - protected $pdfunit = 'mm'; - - /** - * Boolean flag true when we are on TOC (Table Of Content) page. - * @protected - */ - protected $tocpage = false; - - /** - * Boolean flag: if true convert vector images (SVG, EPS) to raster image using GD or ImageMagick library. - * @protected - * @since 5.0.000 (2010-04-26) - */ - protected $rasterize_vector_images = false; - - /** - * Boolean flag: if true enables font subsetting by default. - * @protected - * @since 5.3.002 (2010-06-07) - */ - protected $font_subsetting = true; - - /** - * Array of default graphic settings. - * @protected - * @since 5.5.008 (2010-07-02) - */ - protected $default_graphic_vars = array(); - - /** - * Array of XObjects. - * @protected - * @since 5.8.014 (2010-08-23) - */ - protected $xobjects = array(); - - /** - * Boolean value true when we are inside an XObject. - * @protected - * @since 5.8.017 (2010-08-24) - */ - protected $inxobj = false; - - /** - * Current XObject ID. - * @protected - * @since 5.8.017 (2010-08-24) - */ - protected $xobjid = ''; - - /** - * Percentage of character stretching. - * @protected - * @since 5.9.000 (2010-09-29) - */ - protected $font_stretching = 100; - - /** - * Increases or decreases the space between characters in a text by the specified amount (tracking). - * @protected - * @since 5.9.000 (2010-09-29) - */ - protected $font_spacing = 0; - - /** - * Array of no-write regions. - * ('page' => page number or empy for current page, 'xt' => X top, 'yt' => Y top, 'xb' => X bottom, 'yb' => Y bottom, 'side' => page side 'L' = left or 'R' = right) - * @protected - * @since 5.9.003 (2010-10-14) - */ - protected $page_regions = array(); - - /** - * Boolean value true when page region check is active. - * @protected - */ - protected $check_page_regions = true; - - /** - * Array of PDF layers data. - * @protected - * @since 5.9.102 (2011-07-13) - */ - protected $pdflayers = array(); - - /** - * A dictionary of names and corresponding destinations (Dests key on document Catalog). - * @protected - * @since 5.9.097 (2011-06-23) - */ - protected $dests = array(); - - /** - * Object ID for Named Destinations - * @protected - * @since 5.9.097 (2011-06-23) - */ - protected $n_dests; - - /** - * Embedded Files Names - * @protected - * @since 5.9.204 (2013-01-23) - */ - protected $efnames = array(); - - /** - * Directory used for the last SVG image. - * @protected - * @since 5.0.000 (2010-05-05) - */ - protected $svgdir = ''; - - /** - * Deafult unit of measure for SVG. - * @protected - * @since 5.0.000 (2010-05-02) - */ - protected $svgunit = 'px'; - - /** - * Array of SVG gradients. - * @protected - * @since 5.0.000 (2010-05-02) - */ - protected $svggradients = array(); - - /** - * ID of last SVG gradient. - * @protected - * @since 5.0.000 (2010-05-02) - */ - protected $svggradientid = 0; - - /** - * Boolean value true when in SVG defs group. - * @protected - * @since 5.0.000 (2010-05-02) - */ - protected $svgdefsmode = false; - - /** - * Array of SVG defs. - * @protected - * @since 5.0.000 (2010-05-02) - */ - protected $svgdefs = array(); - - /** - * Boolean value true when in SVG clipPath tag. - * @protected - * @since 5.0.000 (2010-04-26) - */ - protected $svgclipmode = false; - - /** - * Array of SVG clipPath commands. - * @protected - * @since 5.0.000 (2010-05-02) - */ - protected $svgclippaths = array(); - - /** - * Array of SVG clipPath tranformation matrix. - * @protected - * @since 5.8.022 (2010-08-31) - */ - protected $svgcliptm = array(); - - /** - * ID of last SVG clipPath. - * @protected - * @since 5.0.000 (2010-05-02) - */ - protected $svgclipid = 0; - - /** - * SVG text. - * @protected - * @since 5.0.000 (2010-05-02) - */ - protected $svgtext = ''; - - /** - * SVG text properties. - * @protected - * @since 5.8.013 (2010-08-23) - */ - protected $svgtextmode = array(); - - /** - * Array of SVG properties. - * @protected - * @since 5.0.000 (2010-05-02) - */ - protected $svgstyles = array(array( - 'alignment-baseline' => 'auto', - 'baseline-shift' => 'baseline', - 'clip' => 'auto', - 'clip-path' => 'none', - 'clip-rule' => 'nonzero', - 'color' => 'black', - 'color-interpolation' => 'sRGB', - 'color-interpolation-filters' => 'linearRGB', - 'color-profile' => 'auto', - 'color-rendering' => 'auto', - 'cursor' => 'auto', - 'direction' => 'ltr', - 'display' => 'inline', - 'dominant-baseline' => 'auto', - 'enable-background' => 'accumulate', - 'fill' => 'black', - 'fill-opacity' => 1, - 'fill-rule' => 'nonzero', - 'filter' => 'none', - 'flood-color' => 'black', - 'flood-opacity' => 1, - 'font' => '', - 'font-family' => 'helvetica', - 'font-size' => 'medium', - 'font-size-adjust' => 'none', - 'font-stretch' => 'normal', - 'font-style' => 'normal', - 'font-variant' => 'normal', - 'font-weight' => 'normal', - 'glyph-orientation-horizontal' => '0deg', - 'glyph-orientation-vertical' => 'auto', - 'image-rendering' => 'auto', - 'kerning' => 'auto', - 'letter-spacing' => 'normal', - 'lighting-color' => 'white', - 'marker' => '', - 'marker-end' => 'none', - 'marker-mid' => 'none', - 'marker-start' => 'none', - 'mask' => 'none', - 'opacity' => 1, - 'overflow' => 'auto', - 'pointer-events' => 'visiblePainted', - 'shape-rendering' => 'auto', - 'stop-color' => 'black', - 'stop-opacity' => 1, - 'stroke' => 'none', - 'stroke-dasharray' => 'none', - 'stroke-dashoffset' => 0, - 'stroke-linecap' => 'butt', - 'stroke-linejoin' => 'miter', - 'stroke-miterlimit' => 4, - 'stroke-opacity' => 1, - 'stroke-width' => 1, - 'text-anchor' => 'start', - 'text-decoration' => 'none', - 'text-rendering' => 'auto', - 'unicode-bidi' => 'normal', - 'visibility' => 'visible', - 'word-spacing' => 'normal', - 'writing-mode' => 'lr-tb', - 'text-color' => 'black', - 'transfmatrix' => array(1, 0, 0, 1, 0, 0) - )); - - /** - * If true force sRGB color profile for all document. - * @protected - * @since 5.9.121 (2011-09-28) - */ - protected $force_srgb = false; - - /** - * If true set the document to PDF/A mode. - * @protected - * @since 5.9.121 (2011-09-27) - */ - protected $pdfa_mode = false; - - /** - * version of PDF/A mode (1 - 3). - * @protected - * @since 6.2.26 (2019-03-12) - */ - protected $pdfa_version = 1; - - /** - * Document creation date-time - * @protected - * @since 5.9.152 (2012-03-22) - */ - protected $doc_creation_timestamp; - - /** - * Document modification date-time - * @protected - * @since 5.9.152 (2012-03-22) - */ - protected $doc_modification_timestamp; - - /** - * Custom XMP data. - * @protected - * @since 5.9.128 (2011-10-06) - */ - protected $custom_xmp = ''; - - /** - * Custom XMP RDF data. - * @protected - * @since 6.3.0 (2019-09-19) - */ - protected $custom_xmp_rdf = ''; - - /** - * Overprint mode array. - * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). - * @protected - * @since 5.9.152 (2012-03-23) - * @var array - */ - protected $overprint = array('OP' => false, 'op' => false, 'OPM' => 0); - - /** - * Alpha mode array. - * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). - * @protected - * @since 5.9.152 (2012-03-23) - */ - protected $alpha = array('CA' => 1, 'ca' => 1, 'BM' => '/Normal', 'AIS' => false); - - /** - * Define the page boundaries boxes to be set on document. - * @protected - * @since 5.9.152 (2012-03-23) - */ - protected $page_boxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'); - - /** - * If true print TCPDF meta link. - * @protected - * @since 5.9.152 (2012-03-23) - */ - protected $tcpdflink = true; - - /** - * Cache array for computed GD gamma values. - * @protected - * @since 5.9.1632 (2012-06-05) - */ - protected $gdgammacache = array(); - - /** - * Cache array for file content - * @protected - * @var array - * @since 6.3.5 (2020-09-28) - */ - protected $fileContentCache = array(); - - /** - * Whether to allow local file path in image html tags, when prefixed with file:// - * - * @var bool - * @protected - * @since 6.4 (2020-07-23) - */ - protected $allowLocalFiles = false; - - //------------------------------------------------------------ - // METHODS - //------------------------------------------------------------ - - /** - * This is the class constructor. - * It allows to set up the page format, the orientation and the measure unit used in all the methods (except for the font sizes). - * - * @param string $orientation page orientation. Possible values are (case insensitive):
            • P or Portrait (default)
            • L or Landscape
            • '' (empty string) for automatic orientation
            - * @param string $unit User measure unit. Possible values are:
            • pt: point
            • mm: millimeter (default)
            • cm: centimeter
            • in: inch

            A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. - * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). - * @param boolean $unicode TRUE means that the input text is unicode (default = true) - * @param string $encoding Charset encoding (used only when converting back html entities); default is UTF-8. - * @param boolean $diskcache DEPRECATED FEATURE - * @param false|integer $pdfa If not false, set the document to PDF/A mode and the good version (1 or 3). - * @public - * @see getPageSizeFromFormat(), setPageFormat() - */ - public function __construct($orientation='P', $unit='mm', $format='A4', $unicode=true, $encoding='UTF-8', $diskcache=false, $pdfa=false) { - // set file ID for trailer - $serformat = (is_array($format) ? json_encode($format) : $format); - $this->file_id = md5(TCPDF_STATIC::getRandomSeed('TCPDF'.$orientation.$unit.$serformat.$encoding)); - $this->font_obj_ids = array(); - $this->page_obj_id = array(); - $this->form_obj_id = array(); - - // set pdf/a mode - if ($pdfa != false) { - $this->pdfa_mode = true; - $this->pdfa_version = $pdfa; // 1 or 3 - } else - $this->pdfa_mode = false; - - $this->force_srgb = false; - // set language direction - $this->rtl = false; - $this->tmprtl = false; - // some checks - $this->_dochecks(); - // initialization of properties - $this->isunicode = $unicode; - $this->page = 0; - $this->transfmrk[0] = array(); - $this->pagedim = array(); - $this->n = 2; - $this->buffer = ''; - $this->pages = array(); - $this->state = 0; - $this->fonts = array(); - $this->FontFiles = array(); - $this->diffs = array(); - $this->images = array(); - $this->links = array(); - $this->gradients = array(); - $this->InFooter = false; - $this->lasth = 0; - $this->FontFamily = defined('PDF_FONT_NAME_MAIN')?PDF_FONT_NAME_MAIN:'helvetica'; - $this->FontStyle = ''; - $this->FontSizePt = 12; - $this->underline = false; - $this->overline = false; - $this->linethrough = false; - $this->DrawColor = '0 G'; - $this->FillColor = '0 g'; - $this->TextColor = '0 g'; - $this->ColorFlag = false; - $this->pdflayers = array(); - // encryption values - $this->encrypted = false; - $this->last_enc_key = ''; - // standard Unicode fonts - $this->CoreFonts = array( - 'courier'=>'Courier', - 'courierB'=>'Courier-Bold', - 'courierI'=>'Courier-Oblique', - 'courierBI'=>'Courier-BoldOblique', - 'helvetica'=>'Helvetica', - 'helveticaB'=>'Helvetica-Bold', - 'helveticaI'=>'Helvetica-Oblique', - 'helveticaBI'=>'Helvetica-BoldOblique', - 'times'=>'Times-Roman', - 'timesB'=>'Times-Bold', - 'timesI'=>'Times-Italic', - 'timesBI'=>'Times-BoldItalic', - 'symbol'=>'Symbol', - 'zapfdingbats'=>'ZapfDingbats' - ); - // set scale factor - $this->setPageUnit($unit); - // set page format and orientation - $this->setPageFormat($format, $orientation); - // page margins (1 cm) - $margin = 28.35 / $this->k; - $this->setMargins($margin, $margin); - $this->clMargin = $this->lMargin; - $this->crMargin = $this->rMargin; - // internal cell padding - $cpadding = $margin / 10; - $this->setCellPaddings($cpadding, 0, $cpadding, 0); - // cell margins - $this->setCellMargins(0, 0, 0, 0); - // line width (0.2 mm) - $this->LineWidth = 0.57 / $this->k; - $this->linestyleWidth = sprintf('%F w', ($this->LineWidth * $this->k)); - $this->linestyleCap = '0 J'; - $this->linestyleJoin = '0 j'; - $this->linestyleDash = '[] 0 d'; - // automatic page break - $this->setAutoPageBreak(true, (2 * $margin)); - // full width display mode - $this->setDisplayMode('fullwidth'); - // compression - $this->setCompression(); - // set default PDF version number - $this->setPDFVersion(); - $this->tcpdflink = true; - $this->encoding = $encoding; - $this->HREF = array(); - $this->getFontsList(); - $this->fgcolor = array('R' => 0, 'G' => 0, 'B' => 0); - $this->strokecolor = array('R' => 0, 'G' => 0, 'B' => 0); - $this->bgcolor = array('R' => 255, 'G' => 255, 'B' => 255); - $this->extgstates = array(); - $this->setTextShadow(); - // signature - $this->sign = false; - $this->tsa_timestamp = false; - $this->tsa_data = array(); - $this->signature_appearance = array('page' => 1, 'rect' => '0 0 0 0', 'name' => 'Signature'); - $this->empty_signature_appearance = array(); - // user's rights - $this->ur['enabled'] = false; - $this->ur['document'] = '/FullSave'; - $this->ur['annots'] = '/Create/Delete/Modify/Copy/Import/Export'; - $this->ur['form'] = '/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate'; - $this->ur['signature'] = '/Modify'; - $this->ur['ef'] = '/Create/Delete/Modify/Import'; - $this->ur['formex'] = ''; - // set default JPEG quality - $this->jpeg_quality = 75; - // initialize some settings - TCPDF_FONTS::utf8Bidi(array(), '', false, $this->isunicode, $this->CurrentFont); - // set default font - $this->setFont($this->FontFamily, $this->FontStyle, $this->FontSizePt); - $this->setHeaderFont(array($this->FontFamily, $this->FontStyle, $this->FontSizePt)); - $this->setFooterFont(array($this->FontFamily, $this->FontStyle, $this->FontSizePt)); - // check if PCRE Unicode support is enabled - if ($this->isunicode AND (@preg_match('/\pL/u', 'a') == 1)) { - // PCRE unicode support is turned ON - // \s : any whitespace character - // \p{Z} : any separator - // \p{Lo} : Unicode letter or ideograph that does not have lowercase and uppercase variants. Is used to chunk chinese words. - // \xa0 : Unicode Character 'NO-BREAK SPACE' (U+00A0) - //$this->setSpacesRE('/(?!\xa0)[\s\p{Z}\p{Lo}]/u'); - $this->setSpacesRE('/(?!\xa0)[\s\p{Z}]/u'); - } else { - // PCRE unicode support is turned OFF - $this->setSpacesRE('/[^\S\xa0]/'); - } - $this->default_form_prop = array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 255), 'strokeColor'=>array(128, 128, 128)); - // set document creation and modification timestamp - $this->doc_creation_timestamp = time(); - $this->doc_modification_timestamp = $this->doc_creation_timestamp; - // get default graphic vars - $this->default_graphic_vars = $this->getGraphicVars(); - $this->header_xobj_autoreset = false; - $this->custom_xmp = ''; - $this->custom_xmp_rdf = ''; - // Call cleanup method after script execution finishes or exit() is called. - // NOTE: This will not be executed if the process is killed with a SIGTERM or SIGKILL signal. - register_shutdown_function(array($this, '_destroy'), true); - } - - /** - * Default destructor. - * @public - * @since 1.53.0.TC016 - */ - public function __destruct() { - // cleanup - $this->_destroy(true); - } - - /** - * Set the units of measure for the document. - * @param string $unit User measure unit. Possible values are:
            • pt: point
            • mm: millimeter (default)
            • cm: centimeter
            • in: inch

            A point equals 1/72 of inch, that is to say about 0.35 mm (an inch being 2.54 cm). This is a very common unit in typography; font sizes are expressed in that unit. - * @public - * @since 3.0.015 (2008-06-06) - */ - public function setPageUnit($unit) { - $unit = strtolower($unit); - //Set scale factor - switch ($unit) { - // points - case 'px': - case 'pt': { - $this->k = 1; - break; - } - // millimeters - case 'mm': { - $this->k = $this->dpi / 25.4; - break; - } - // centimeters - case 'cm': { - $this->k = $this->dpi / 2.54; - break; - } - // inches - case 'in': { - $this->k = $this->dpi; - break; - } - // unsupported unit - default : { - $this->Error('Incorrect unit: '.$unit); - break; - } - } - $this->pdfunit = $unit; - if (isset($this->CurOrientation)) { - $this->setPageOrientation($this->CurOrientation); - } - } - - /** - * Change the format of the current page - * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() documentation or an array of two numbers (width, height) or an array containing the following measures and options:
              - *
            • ['format'] = page format name (one of the above);
            • - *
            • ['Rotate'] : The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
            • - *
            • ['PZ'] : The page's preferred zoom (magnification) factor.
            • - *
            • ['MediaBox'] : the boundaries of the physical medium on which the page shall be displayed or printed:
            • - *
            • ['MediaBox']['llx'] : lower-left x coordinate
            • - *
            • ['MediaBox']['lly'] : lower-left y coordinate
            • - *
            • ['MediaBox']['urx'] : upper-right x coordinate
            • - *
            • ['MediaBox']['ury'] : upper-right y coordinate
            • - *
            • ['CropBox'] : the visible region of default user space:
            • - *
            • ['CropBox']['llx'] : lower-left x coordinate
            • - *
            • ['CropBox']['lly'] : lower-left y coordinate
            • - *
            • ['CropBox']['urx'] : upper-right x coordinate
            • - *
            • ['CropBox']['ury'] : upper-right y coordinate
            • - *
            • ['BleedBox'] : the region to which the contents of the page shall be clipped when output in a production environment:
            • - *
            • ['BleedBox']['llx'] : lower-left x coordinate
            • - *
            • ['BleedBox']['lly'] : lower-left y coordinate
            • - *
            • ['BleedBox']['urx'] : upper-right x coordinate
            • - *
            • ['BleedBox']['ury'] : upper-right y coordinate
            • - *
            • ['TrimBox'] : the intended dimensions of the finished page after trimming:
            • - *
            • ['TrimBox']['llx'] : lower-left x coordinate
            • - *
            • ['TrimBox']['lly'] : lower-left y coordinate
            • - *
            • ['TrimBox']['urx'] : upper-right x coordinate
            • - *
            • ['TrimBox']['ury'] : upper-right y coordinate
            • - *
            • ['ArtBox'] : the extent of the page's meaningful content:
            • - *
            • ['ArtBox']['llx'] : lower-left x coordinate
            • - *
            • ['ArtBox']['lly'] : lower-left y coordinate
            • - *
            • ['ArtBox']['urx'] : upper-right x coordinate
            • - *
            • ['ArtBox']['ury'] : upper-right y coordinate
            • - *
            • ['BoxColorInfo'] :specify the colours and other visual characteristics that should be used in displaying guidelines on the screen for each of the possible page boundaries other than the MediaBox:
            • - *
            • ['BoxColorInfo'][BOXTYPE]['C'] : an array of three numbers in the range 0-255, representing the components in the DeviceRGB colour space.
            • - *
            • ['BoxColorInfo'][BOXTYPE]['W'] : the guideline width in default user units
            • - *
            • ['BoxColorInfo'][BOXTYPE]['S'] : the guideline style: S = Solid; D = Dashed
            • - *
            • ['BoxColorInfo'][BOXTYPE]['D'] : dash array defining a pattern of dashes and gaps to be used in drawing dashed guidelines
            • - *
            • ['trans'] : the style and duration of the visual transition to use when moving from another page to the given page during a presentation
            • - *
            • ['trans']['Dur'] : The page's display duration (also called its advance timing): the maximum length of time, in seconds, that the page shall be displayed during presentations before the viewer application shall automatically advance to the next page.
            • - *
            • ['trans']['S'] : transition style : Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade
            • - *
            • ['trans']['D'] : The duration of the transition effect, in seconds.
            • - *
            • ['trans']['Dm'] : (Split and Blinds transition styles only) The dimension in which the specified transition effect shall occur: H = Horizontal, V = Vertical. Default value: H.
            • - *
            • ['trans']['M'] : (Split, Box and Fly transition styles only) The direction of motion for the specified transition effect: I = Inward from the edges of the page, O = Outward from the center of the pageDefault value: I.
            • - *
            • ['trans']['Di'] : (Wipe, Glitter, Fly, Cover, Uncover and Push transition styles only) The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting from a left-to-right direction. If the value is a number, it shall be one of: 0 = Left to right, 90 = Bottom to top (Wipe only), 180 = Right to left (Wipe only), 270 = Top to bottom, 315 = Top-left to bottom-right (Glitter only). If the value is a name, it shall be None, which is relevant only for the Fly transition when the value of SS is not 1.0. Default value: 0.
            • - *
            • ['trans']['SS'] : (Fly transition style only) The starting or ending scale at which the changes shall be drawn. If M specifies an inward transition, the scale of the changes drawn shall progress from SS to 1.0 over the course of the transition. If M specifies an outward transition, the scale of the changes drawn shall progress from 1.0 to SS over the course of the transition. Default: 1.0.
            • - *
            • ['trans']['B'] : (Fly transition style only) If true, the area that shall be flown in is rectangular and opaque. Default: false.
            • - *
            - * @param string $orientation page orientation. Possible values are (case insensitive):
              - *
            • P or Portrait (default)
            • - *
            • L or Landscape
            • - *
            • '' (empty string) for automatic orientation
            • - *
            - * @protected - * @since 3.0.015 (2008-06-06) - * @see getPageSizeFromFormat() - */ - protected function setPageFormat($format, $orientation='P') { - if (!empty($format) AND isset($this->pagedim[$this->page])) { - // remove inherited values - unset($this->pagedim[$this->page]); - } - if (is_string($format)) { - // get page measures from format name - $pf = TCPDF_STATIC::getPageSizeFromFormat($format); - $this->fwPt = $pf[0]; - $this->fhPt = $pf[1]; - } else { - // the boundaries of the physical medium on which the page shall be displayed or printed - if (isset($format['MediaBox'])) { - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'MediaBox', $format['MediaBox']['llx'], $format['MediaBox']['lly'], $format['MediaBox']['urx'], $format['MediaBox']['ury'], false, $this->k, $this->pagedim); - $this->fwPt = (($format['MediaBox']['urx'] - $format['MediaBox']['llx']) * $this->k); - $this->fhPt = (($format['MediaBox']['ury'] - $format['MediaBox']['lly']) * $this->k); - } else { - if (isset($format[0]) AND is_numeric($format[0]) AND isset($format[1]) AND is_numeric($format[1])) { - $pf = array(($format[0] * $this->k), ($format[1] * $this->k)); - } else { - if (!isset($format['format'])) { - // default value - $format['format'] = 'A4'; - } - $pf = TCPDF_STATIC::getPageSizeFromFormat($format['format']); - } - $this->fwPt = $pf[0]; - $this->fhPt = $pf[1]; - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'MediaBox', 0, 0, $this->fwPt, $this->fhPt, true, $this->k, $this->pagedim); - } - // the visible region of default user space - if (isset($format['CropBox'])) { - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'CropBox', $format['CropBox']['llx'], $format['CropBox']['lly'], $format['CropBox']['urx'], $format['CropBox']['ury'], false, $this->k, $this->pagedim); - } - // the region to which the contents of the page shall be clipped when output in a production environment - if (isset($format['BleedBox'])) { - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'BleedBox', $format['BleedBox']['llx'], $format['BleedBox']['lly'], $format['BleedBox']['urx'], $format['BleedBox']['ury'], false, $this->k, $this->pagedim); - } - // the intended dimensions of the finished page after trimming - if (isset($format['TrimBox'])) { - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'TrimBox', $format['TrimBox']['llx'], $format['TrimBox']['lly'], $format['TrimBox']['urx'], $format['TrimBox']['ury'], false, $this->k, $this->pagedim); - } - // the page's meaningful content (including potential white space) - if (isset($format['ArtBox'])) { - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'ArtBox', $format['ArtBox']['llx'], $format['ArtBox']['lly'], $format['ArtBox']['urx'], $format['ArtBox']['ury'], false, $this->k, $this->pagedim); - } - // specify the colours and other visual characteristics that should be used in displaying guidelines on the screen for the various page boundaries - if (isset($format['BoxColorInfo'])) { - $this->pagedim[$this->page]['BoxColorInfo'] = $format['BoxColorInfo']; - } - if (isset($format['Rotate']) AND (($format['Rotate'] % 90) == 0)) { - // The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90. - $this->pagedim[$this->page]['Rotate'] = intval($format['Rotate']); - } - if (isset($format['PZ'])) { - // The page's preferred zoom (magnification) factor - $this->pagedim[$this->page]['PZ'] = floatval($format['PZ']); - } - if (isset($format['trans'])) { - // The style and duration of the visual transition to use when moving from another page to the given page during a presentation - if (isset($format['trans']['Dur'])) { - // The page's display duration - $this->pagedim[$this->page]['trans']['Dur'] = floatval($format['trans']['Dur']); - } - $stansition_styles = array('Split', 'Blinds', 'Box', 'Wipe', 'Dissolve', 'Glitter', 'R', 'Fly', 'Push', 'Cover', 'Uncover', 'Fade'); - if (isset($format['trans']['S']) AND in_array($format['trans']['S'], $stansition_styles)) { - // The transition style that shall be used when moving to this page from another during a presentation - $this->pagedim[$this->page]['trans']['S'] = $format['trans']['S']; - $valid_effect = array('Split', 'Blinds'); - $valid_vals = array('H', 'V'); - if (isset($format['trans']['Dm']) AND in_array($format['trans']['S'], $valid_effect) AND in_array($format['trans']['Dm'], $valid_vals)) { - $this->pagedim[$this->page]['trans']['Dm'] = $format['trans']['Dm']; - } - $valid_effect = array('Split', 'Box', 'Fly'); - $valid_vals = array('I', 'O'); - if (isset($format['trans']['M']) AND in_array($format['trans']['S'], $valid_effect) AND in_array($format['trans']['M'], $valid_vals)) { - $this->pagedim[$this->page]['trans']['M'] = $format['trans']['M']; - } - $valid_effect = array('Wipe', 'Glitter', 'Fly', 'Cover', 'Uncover', 'Push'); - if (isset($format['trans']['Di']) AND in_array($format['trans']['S'], $valid_effect)) { - if (((($format['trans']['Di'] == 90) OR ($format['trans']['Di'] == 180)) AND ($format['trans']['S'] == 'Wipe')) - OR (($format['trans']['Di'] == 315) AND ($format['trans']['S'] == 'Glitter')) - OR (($format['trans']['Di'] == 0) OR ($format['trans']['Di'] == 270))) { - $this->pagedim[$this->page]['trans']['Di'] = intval($format['trans']['Di']); - } - } - if (isset($format['trans']['SS']) AND ($format['trans']['S'] == 'Fly')) { - $this->pagedim[$this->page]['trans']['SS'] = floatval($format['trans']['SS']); - } - if (isset($format['trans']['B']) AND ($format['trans']['B'] === true) AND ($format['trans']['S'] == 'Fly')) { - $this->pagedim[$this->page]['trans']['B'] = 'true'; - } - } else { - $this->pagedim[$this->page]['trans']['S'] = 'R'; - } - if (isset($format['trans']['D'])) { - // The duration of the transition effect, in seconds - $this->pagedim[$this->page]['trans']['D'] = floatval($format['trans']['D']); - } else { - $this->pagedim[$this->page]['trans']['D'] = 1; - } - } - } - $this->setPageOrientation($orientation); - } - - /** - * Set page orientation. - * @param string $orientation page orientation. Possible values are (case insensitive):
            • P or Portrait (default)
            • L or Landscape
            • '' (empty string) for automatic orientation
            - * @param boolean|null $autopagebreak Boolean indicating if auto-page-break mode should be on or off. - * @param float|null $bottommargin bottom margin of the page. - * @public - * @since 3.0.015 (2008-06-06) - */ - public function setPageOrientation($orientation, $autopagebreak=null, $bottommargin=null) { - if (!isset($this->pagedim[$this->page]['MediaBox'])) { - // the boundaries of the physical medium on which the page shall be displayed or printed - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'MediaBox', 0, 0, $this->fwPt, $this->fhPt, true, $this->k, $this->pagedim); - } - if (!isset($this->pagedim[$this->page]['CropBox'])) { - // the visible region of default user space - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'CropBox', $this->pagedim[$this->page]['MediaBox']['llx'], $this->pagedim[$this->page]['MediaBox']['lly'], $this->pagedim[$this->page]['MediaBox']['urx'], $this->pagedim[$this->page]['MediaBox']['ury'], true, $this->k, $this->pagedim); - } - if (!isset($this->pagedim[$this->page]['BleedBox'])) { - // the region to which the contents of the page shall be clipped when output in a production environment - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'BleedBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true, $this->k, $this->pagedim); - } - if (!isset($this->pagedim[$this->page]['TrimBox'])) { - // the intended dimensions of the finished page after trimming - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'TrimBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true, $this->k, $this->pagedim); - } - if (!isset($this->pagedim[$this->page]['ArtBox'])) { - // the page's meaningful content (including potential white space) - $this->pagedim = TCPDF_STATIC::setPageBoxes($this->page, 'ArtBox', $this->pagedim[$this->page]['CropBox']['llx'], $this->pagedim[$this->page]['CropBox']['lly'], $this->pagedim[$this->page]['CropBox']['urx'], $this->pagedim[$this->page]['CropBox']['ury'], true, $this->k, $this->pagedim); - } - if (!isset($this->pagedim[$this->page]['Rotate'])) { - // The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90. - $this->pagedim[$this->page]['Rotate'] = 0; - } - if (!isset($this->pagedim[$this->page]['PZ'])) { - // The page's preferred zoom (magnification) factor - $this->pagedim[$this->page]['PZ'] = 1; - } - if ($this->fwPt > $this->fhPt) { - // landscape - $default_orientation = 'L'; - } else { - // portrait - $default_orientation = 'P'; - } - $valid_orientations = array('P', 'L'); - if (empty($orientation)) { - $orientation = $default_orientation; - } else { - $orientation = strtoupper($orientation[0]); - } - if (in_array($orientation, $valid_orientations) AND ($orientation != $default_orientation)) { - $this->CurOrientation = $orientation; - $this->wPt = $this->fhPt; - $this->hPt = $this->fwPt; - } else { - $this->CurOrientation = $default_orientation; - $this->wPt = $this->fwPt; - $this->hPt = $this->fhPt; - } - if ((abs($this->pagedim[$this->page]['MediaBox']['urx'] - $this->hPt) < $this->feps) AND (abs($this->pagedim[$this->page]['MediaBox']['ury'] - $this->wPt) < $this->feps)){ - // swap X and Y coordinates (change page orientation) - $this->pagedim = TCPDF_STATIC::swapPageBoxCoordinates($this->page, $this->pagedim); - } - $this->w = ($this->wPt / $this->k); - $this->h = ($this->hPt / $this->k); - if (TCPDF_STATIC::empty_string($autopagebreak)) { - if (isset($this->AutoPageBreak)) { - $autopagebreak = $this->AutoPageBreak; - } else { - $autopagebreak = true; - } - } - if (TCPDF_STATIC::empty_string($bottommargin)) { - if (isset($this->bMargin)) { - $bottommargin = $this->bMargin; - } else { - // default value = 2 cm - $bottommargin = 2 * 28.35 / $this->k; - } - } - $this->setAutoPageBreak($autopagebreak, $bottommargin); - // store page dimensions - $this->pagedim[$this->page]['w'] = $this->wPt; - $this->pagedim[$this->page]['h'] = $this->hPt; - $this->pagedim[$this->page]['wk'] = $this->w; - $this->pagedim[$this->page]['hk'] = $this->h; - $this->pagedim[$this->page]['tm'] = $this->tMargin; - $this->pagedim[$this->page]['bm'] = $bottommargin; - $this->pagedim[$this->page]['lm'] = $this->lMargin; - $this->pagedim[$this->page]['rm'] = $this->rMargin; - $this->pagedim[$this->page]['pb'] = $autopagebreak; - $this->pagedim[$this->page]['or'] = $this->CurOrientation; - $this->pagedim[$this->page]['olm'] = $this->original_lMargin; - $this->pagedim[$this->page]['orm'] = $this->original_rMargin; - } - - /** - * Set regular expression to detect withespaces or word separators. - * The pattern delimiter must be the forward-slash character "/". - * Some example patterns are: - *
            -	 * Non-Unicode or missing PCRE unicode support: "/[^\S\xa0]/"
            -	 * Unicode and PCRE unicode support: "/(?!\xa0)[\s\p{Z}]/u"
            -	 * Unicode and PCRE unicode support in Chinese mode: "/(?!\xa0)[\s\p{Z}\p{Lo}]/u"
            -	 * if PCRE unicode support is turned ON ("\P" is the negate class of "\p"):
            -	 *      \s     : any whitespace character
            -	 *      \p{Z}  : any separator
            -	 *      \p{Lo} : Unicode letter or ideograph that does not have lowercase and uppercase variants. Is used to chunk chinese words.
            -	 *      \xa0   : Unicode Character 'NO-BREAK SPACE' (U+00A0)
            -	 * 
            - * @param string $re regular expression (leave empty for default). - * @public - * @since 4.6.016 (2009-06-15) - */ - public function setSpacesRE($re='/[^\S\xa0]/') { - $this->re_spaces = $re; - $re_parts = explode('/', $re); - // get pattern parts - $this->re_space = array(); - if (isset($re_parts[1]) AND !empty($re_parts[1])) { - $this->re_space['p'] = $re_parts[1]; - } else { - $this->re_space['p'] = '[\s]'; - } - // set pattern modifiers - if (isset($re_parts[2]) AND !empty($re_parts[2])) { - $this->re_space['m'] = $re_parts[2]; - } else { - $this->re_space['m'] = ''; - } - } - - /** - * Enable or disable Right-To-Left language mode - * @param boolean $enable if true enable Right-To-Left language mode. - * @param boolean $resetx if true reset the X position on direction change. - * @public - * @since 2.0.000 (2008-01-03) - */ - public function setRTL($enable, $resetx=true) { - $enable = $enable ? true : false; - $resetx = ($resetx AND ($enable != $this->rtl)); - $this->rtl = $enable; - $this->tmprtl = false; - if ($resetx) { - $this->Ln(0); - } - } - - /** - * Return the RTL status - * @return bool - * @public - * @since 4.0.012 (2008-07-24) - */ - public function getRTL() { - return $this->rtl; - } - - /** - * Force temporary RTL language direction - * @param false|string $mode can be false, 'L' for LTR or 'R' for RTL - * @public - * @since 2.1.000 (2008-01-09) - */ - public function setTempRTL($mode) { - $newmode = false; - switch (strtoupper($mode)) { - case 'LTR': - case 'L': { - if ($this->rtl) { - $newmode = 'L'; - } - break; - } - case 'RTL': - case 'R': { - if (!$this->rtl) { - $newmode = 'R'; - } - break; - } - case false: - default: { - $newmode = false; - break; - } - } - $this->tmprtl = $newmode; - } - - /** - * Return the current temporary RTL status - * @return bool - * @public - * @since 4.8.014 (2009-11-04) - */ - public function isRTLTextDir() { - return ($this->rtl OR ($this->tmprtl == 'R')); - } - - /** - * Set the last cell height. - * @param float $h cell height. - * @author Nicola Asuni - * @public - * @since 1.53.0.TC034 - */ - public function setLastH($h) { - $this->lasth = $h; - } - - /** - * Return the cell height - * @param int $fontsize Font size in internal units - * @param boolean $padding If true add cell padding - * @public - * @return float - */ - public function getCellHeight($fontsize, $padding=TRUE) { - $height = ($fontsize * $this->cell_height_ratio); - if ($padding) { - $height += ($this->cell_padding['T'] + $this->cell_padding['B']); - } - return round($height, 6); - } - - /** - * Reset the last cell height. - * @public - * @since 5.9.000 (2010-10-03) - */ - public function resetLastH() { - $this->lasth = $this->getCellHeight($this->FontSize); - } - - /** - * Get the last cell height. - * @return float last cell height - * @public - * @since 4.0.017 (2008-08-05) - */ - public function getLastH() { - return $this->lasth; - } - - /** - * Set the adjusting factor to convert pixels to user units. - * @param float $scale adjusting factor to convert pixels to user units. - * @author Nicola Asuni - * @public - * @since 1.5.2 - */ - public function setImageScale($scale) { - $this->imgscale = $scale; - } - - /** - * Returns the adjusting factor to convert pixels to user units. - * @return float adjusting factor to convert pixels to user units. - * @author Nicola Asuni - * @public - * @since 1.5.2 - */ - public function getImageScale() { - return $this->imgscale; - } - - /** - * Returns an array of page dimensions: - *
            • $this->pagedim[$this->page]['w'] = page width in points
            • $this->pagedim[$this->page]['h'] = height in points
            • $this->pagedim[$this->page]['wk'] = page width in user units
            • $this->pagedim[$this->page]['hk'] = page height in user units
            • $this->pagedim[$this->page]['tm'] = top margin
            • $this->pagedim[$this->page]['bm'] = bottom margin
            • $this->pagedim[$this->page]['lm'] = left margin
            • $this->pagedim[$this->page]['rm'] = right margin
            • $this->pagedim[$this->page]['pb'] = auto page break
            • $this->pagedim[$this->page]['or'] = page orientation
            • $this->pagedim[$this->page]['olm'] = original left margin
            • $this->pagedim[$this->page]['orm'] = original right margin
            • $this->pagedim[$this->page]['Rotate'] = The number of degrees by which the page shall be rotated clockwise when displayed or printed. The value shall be a multiple of 90.
            • $this->pagedim[$this->page]['PZ'] = The page's preferred zoom (magnification) factor.
            • $this->pagedim[$this->page]['trans'] : the style and duration of the visual transition to use when moving from another page to the given page during a presentation
              • $this->pagedim[$this->page]['trans']['Dur'] = The page's display duration (also called its advance timing): the maximum length of time, in seconds, that the page shall be displayed during presentations before the viewer application shall automatically advance to the next page.
              • $this->pagedim[$this->page]['trans']['S'] = transition style : Split, Blinds, Box, Wipe, Dissolve, Glitter, R, Fly, Push, Cover, Uncover, Fade
              • $this->pagedim[$this->page]['trans']['D'] = The duration of the transition effect, in seconds.
              • $this->pagedim[$this->page]['trans']['Dm'] = (Split and Blinds transition styles only) The dimension in which the specified transition effect shall occur: H = Horizontal, V = Vertical. Default value: H.
              • $this->pagedim[$this->page]['trans']['M'] = (Split, Box and Fly transition styles only) The direction of motion for the specified transition effect: I = Inward from the edges of the page, O = Outward from the center of the pageDefault value: I.
              • $this->pagedim[$this->page]['trans']['Di'] = (Wipe, Glitter, Fly, Cover, Uncover and Push transition styles only) The direction in which the specified transition effect shall moves, expressed in degrees counterclockwise starting from a left-to-right direction. If the value is a number, it shall be one of: 0 = Left to right, 90 = Bottom to top (Wipe only), 180 = Right to left (Wipe only), 270 = Top to bottom, 315 = Top-left to bottom-right (Glitter only). If the value is a name, it shall be None, which is relevant only for the Fly transition when the value of SS is not 1.0. Default value: 0.
              • $this->pagedim[$this->page]['trans']['SS'] = (Fly transition style only) The starting or ending scale at which the changes shall be drawn. If M specifies an inward transition, the scale of the changes drawn shall progress from SS to 1.0 over the course of the transition. If M specifies an outward transition, the scale of the changes drawn shall progress from 1.0 to SS over the course of the transition. Default: 1.0.
              • $this->pagedim[$this->page]['trans']['B'] = (Fly transition style only) If true, the area that shall be flown in is rectangular and opaque. Default: false.
            • $this->pagedim[$this->page]['MediaBox'] : the boundaries of the physical medium on which the page shall be displayed or printed
              • $this->pagedim[$this->page]['MediaBox']['llx'] = lower-left x coordinate in points
              • $this->pagedim[$this->page]['MediaBox']['lly'] = lower-left y coordinate in points
              • $this->pagedim[$this->page]['MediaBox']['urx'] = upper-right x coordinate in points
              • $this->pagedim[$this->page]['MediaBox']['ury'] = upper-right y coordinate in points
            • $this->pagedim[$this->page]['CropBox'] : the visible region of default user space
              • $this->pagedim[$this->page]['CropBox']['llx'] = lower-left x coordinate in points
              • $this->pagedim[$this->page]['CropBox']['lly'] = lower-left y coordinate in points
              • $this->pagedim[$this->page]['CropBox']['urx'] = upper-right x coordinate in points
              • $this->pagedim[$this->page]['CropBox']['ury'] = upper-right y coordinate in points
            • $this->pagedim[$this->page]['BleedBox'] : the region to which the contents of the page shall be clipped when output in a production environment
              • $this->pagedim[$this->page]['BleedBox']['llx'] = lower-left x coordinate in points
              • $this->pagedim[$this->page]['BleedBox']['lly'] = lower-left y coordinate in points
              • $this->pagedim[$this->page]['BleedBox']['urx'] = upper-right x coordinate in points
              • $this->pagedim[$this->page]['BleedBox']['ury'] = upper-right y coordinate in points
            • $this->pagedim[$this->page]['TrimBox'] : the intended dimensions of the finished page after trimming
              • $this->pagedim[$this->page]['TrimBox']['llx'] = lower-left x coordinate in points
              • $this->pagedim[$this->page]['TrimBox']['lly'] = lower-left y coordinate in points
              • $this->pagedim[$this->page]['TrimBox']['urx'] = upper-right x coordinate in points
              • $this->pagedim[$this->page]['TrimBox']['ury'] = upper-right y coordinate in points
            • $this->pagedim[$this->page]['ArtBox'] : the extent of the page's meaningful content
              • $this->pagedim[$this->page]['ArtBox']['llx'] = lower-left x coordinate in points
              • $this->pagedim[$this->page]['ArtBox']['lly'] = lower-left y coordinate in points
              • $this->pagedim[$this->page]['ArtBox']['urx'] = upper-right x coordinate in points
              • $this->pagedim[$this->page]['ArtBox']['ury'] = upper-right y coordinate in points
            - * @param int|null $pagenum page number (empty = current page) - * @return array of page dimensions. - * @author Nicola Asuni - * @public - * @since 4.5.027 (2009-03-16) - */ - public function getPageDimensions($pagenum=null) { - if (empty($pagenum)) { - $pagenum = $this->page; - } - return $this->pagedim[$pagenum]; - } - - /** - * Returns the page width in units. - * @param int|null $pagenum page number (empty = current page) - * @return int page width. - * @author Nicola Asuni - * @public - * @since 1.5.2 - * @see getPageDimensions() - */ - public function getPageWidth($pagenum=null) { - if (empty($pagenum)) { - return $this->w; - } - return $this->pagedim[$pagenum]['w']; - } - - /** - * Returns the page height in units. - * @param int|null $pagenum page number (empty = current page) - * @return int page height. - * @author Nicola Asuni - * @public - * @since 1.5.2 - * @see getPageDimensions() - */ - public function getPageHeight($pagenum=null) { - if (empty($pagenum)) { - return $this->h; - } - return $this->pagedim[$pagenum]['h']; - } - - /** - * Returns the page break margin. - * @param int|null $pagenum page number (empty = current page) - * @return int page break margin. - * @author Nicola Asuni - * @public - * @since 1.5.2 - * @see getPageDimensions() - */ - public function getBreakMargin($pagenum=null) { - if (empty($pagenum)) { - return $this->bMargin; - } - return $this->pagedim[$pagenum]['bm']; - } - - /** - * Returns the scale factor (number of points in user unit). - * @return int scale factor. - * @author Nicola Asuni - * @public - * @since 1.5.2 - */ - public function getScaleFactor() { - return $this->k; - } - - /** - * Defines the left, top and right margins. - * @param float $left Left margin. - * @param float $top Top margin. - * @param float $right Right margin. Default value is the left one. - * @param boolean $keepmargins if true overwrites the default page margins - * @public - * @since 1.0 - * @see SetLeftMargin(), SetTopMargin(), SetRightMargin(), SetAutoPageBreak() - */ - public function setMargins($left, $top, $right=null, $keepmargins=false) { - //Set left, top and right margins - $this->lMargin = $left; - $this->tMargin = $top; - if ($right == -1 OR $right === null) { - $right = $left; - } - $this->rMargin = $right; - if ($keepmargins) { - // overwrite original values - $this->original_lMargin = $this->lMargin; - $this->original_rMargin = $this->rMargin; - } - } - - /** - * Defines the left margin. The method can be called before creating the first page. If the current abscissa gets out of page, it is brought back to the margin. - * @param float $margin The margin. - * @public - * @since 1.4 - * @see SetTopMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() - */ - public function setLeftMargin($margin) { - //Set left margin - $this->lMargin = $margin; - if (($this->page > 0) AND ($this->x < $margin)) { - $this->x = $margin; - } - } - - /** - * Defines the top margin. The method can be called before creating the first page. - * @param float $margin The margin. - * @public - * @since 1.5 - * @see SetLeftMargin(), SetRightMargin(), SetAutoPageBreak(), SetMargins() - */ - public function setTopMargin($margin) { - //Set top margin - $this->tMargin = $margin; - if (($this->page > 0) AND ($this->y < $margin)) { - $this->y = $margin; - } - } - - /** - * Defines the right margin. The method can be called before creating the first page. - * @param float $margin The margin. - * @public - * @since 1.5 - * @see SetLeftMargin(), SetTopMargin(), SetAutoPageBreak(), SetMargins() - */ - public function setRightMargin($margin) { - $this->rMargin = $margin; - if (($this->page > 0) AND ($this->x > ($this->w - $margin))) { - $this->x = $this->w - $margin; - } - } - - /** - * Set the same internal Cell padding for top, right, bottom, left- - * @param float $pad internal padding. - * @public - * @since 2.1.000 (2008-01-09) - * @see getCellPaddings(), setCellPaddings() - */ - public function setCellPadding($pad) { - if ($pad >= 0) { - $this->cell_padding['L'] = $pad; - $this->cell_padding['T'] = $pad; - $this->cell_padding['R'] = $pad; - $this->cell_padding['B'] = $pad; - } - } - - /** - * Set the internal Cell paddings. - * @param float|null $left left padding - * @param float|null $top top padding - * @param float|null $right right padding - * @param float|null $bottom bottom padding - * @public - * @since 5.9.000 (2010-10-03) - * @see getCellPaddings(), SetCellPadding() - */ - public function setCellPaddings($left=null, $top=null, $right=null, $bottom=null) { - if (!TCPDF_STATIC::empty_string($left) AND ($left >= 0)) { - $this->cell_padding['L'] = $left; - } - if (!TCPDF_STATIC::empty_string($top) AND ($top >= 0)) { - $this->cell_padding['T'] = $top; - } - if (!TCPDF_STATIC::empty_string($right) AND ($right >= 0)) { - $this->cell_padding['R'] = $right; - } - if (!TCPDF_STATIC::empty_string($bottom) AND ($bottom >= 0)) { - $this->cell_padding['B'] = $bottom; - } - } - - /** - * Get the internal Cell padding array. - * @return array of padding values - * @public - * @since 5.9.000 (2010-10-03) - * @see setCellPaddings(), SetCellPadding() - */ - public function getCellPaddings() { - return $this->cell_padding; - } - - /** - * Set the internal Cell margins. - * @param float|null $left left margin - * @param float|null $top top margin - * @param float|null $right right margin - * @param float|null $bottom bottom margin - * @public - * @since 5.9.000 (2010-10-03) - * @see getCellMargins() - */ - public function setCellMargins($left=null, $top=null, $right=null, $bottom=null) { - if (!TCPDF_STATIC::empty_string($left) AND ($left >= 0)) { - $this->cell_margin['L'] = $left; - } - if (!TCPDF_STATIC::empty_string($top) AND ($top >= 0)) { - $this->cell_margin['T'] = $top; - } - if (!TCPDF_STATIC::empty_string($right) AND ($right >= 0)) { - $this->cell_margin['R'] = $right; - } - if (!TCPDF_STATIC::empty_string($bottom) AND ($bottom >= 0)) { - $this->cell_margin['B'] = $bottom; - } - } - - /** - * Get the internal Cell margin array. - * @return array of margin values - * @public - * @since 5.9.000 (2010-10-03) - * @see setCellMargins() - */ - public function getCellMargins() { - return $this->cell_margin; - } - - /** - * Adjust the internal Cell padding array to take account of the line width. - * @param string|array|int $brd Indicates if borders must be drawn around the cell. The value can be a number:
            • 0: no border (default)
            • 1: frame
            or a string containing some or all of the following characters (in any order):
            • L: left
            • T: top
            • R: right
            • B: bottom
            or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @return void|array array of adjustments - * @public - * @since 5.9.000 (2010-10-03) - */ - protected function adjustCellPadding($brd=0) { - if (empty($brd)) { - return; - } - if (is_string($brd)) { - // convert string to array - $slen = strlen($brd); - $newbrd = array(); - for ($i = 0; $i < $slen; ++$i) { - $newbrd[$brd[$i]] = true; - } - $brd = $newbrd; - } elseif ( - ($brd === 1) - || ($brd === true) - || (is_numeric($brd) && ((int)$brd > 0)) - ) { - $brd = array('LRTB' => true); - } - if (!is_array($brd)) { - return; - } - // store current cell padding - $cp = $this->cell_padding; - // select border mode - if (isset($brd['mode'])) { - $mode = $brd['mode']; - unset($brd['mode']); - } else { - $mode = 'normal'; - } - // process borders - foreach ($brd as $border => $style) { - $line_width = $this->LineWidth; - if (is_array($style) && isset($style['width'])) { - // get border width - $line_width = $style['width']; - } - $adj = 0; // line width inside the cell - switch ($mode) { - case 'ext': { - $adj = 0; - break; - } - case 'int': { - $adj = $line_width; - break; - } - case 'normal': - default: { - $adj = ($line_width / 2); - break; - } - } - // correct internal cell padding if required to avoid overlap between text and lines - if ( - is_numeric($this->cell_padding['T']) - && ($this->cell_padding['T'] < $adj) - && (strpos($border, 'T') !== false) - ) { - $this->cell_padding['T'] = $adj; - } - if ( - is_numeric($this->cell_padding['R']) - && ($this->cell_padding['R'] < $adj) - && (strpos($border, 'R') !== false) - ) { - $this->cell_padding['R'] = $adj; - } - if ( - is_numeric($this->cell_padding['B']) - && ($this->cell_padding['B'] < $adj) - && (strpos($border, 'B') !== false) - ) { - $this->cell_padding['B'] = $adj; - } - if ( - is_numeric($this->cell_padding['L']) - && ($this->cell_padding['L'] < $adj) - && (strpos($border, 'L') !== false) - ) { - $this->cell_padding['L'] = $adj; - } - - } - - return array( - 'T' => ($this->cell_padding['T'] - $cp['T']), - 'R' => ($this->cell_padding['R'] - $cp['R']), - 'B' => ($this->cell_padding['B'] - $cp['B']), - 'L' => ($this->cell_padding['L'] - $cp['L']), - ); - } - - /** - * Enables or disables the automatic page breaking mode. When enabling, the second parameter is the distance from the bottom of the page that defines the triggering limit. By default, the mode is on and the margin is 2 cm. - * @param boolean $auto Boolean indicating if mode should be on or off. - * @param float $margin Distance from the bottom of the page. - * @public - * @since 1.0 - * @see Cell(), MultiCell(), AcceptPageBreak() - */ - public function setAutoPageBreak($auto, $margin=0) { - $this->AutoPageBreak = $auto ? true : false; - $this->bMargin = $margin; - $this->PageBreakTrigger = $this->h - $margin; - } - - /** - * Return the auto-page-break mode (true or false). - * @return bool auto-page-break mode - * @public - * @since 5.9.088 - */ - public function getAutoPageBreak() { - return $this->AutoPageBreak; - } - - /** - * Defines the way the document is to be displayed by the viewer. - * @param mixed $zoom The zoom to use. It can be one of the following string values or a number indicating the zooming factor to use.
            • fullpage: displays the entire page on screen
            • fullwidth: uses maximum width of window
            • real: uses real size (equivalent to 100% zoom)
            • default: uses viewer default mode
            - * @param string $layout The page layout. Possible values are:
            • SinglePage Display one page at a time
            • OneColumn Display the pages in one column
            • TwoColumnLeft Display the pages in two columns, with odd-numbered pages on the left
            • TwoColumnRight Display the pages in two columns, with odd-numbered pages on the right
            • TwoPageLeft (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the left
            • TwoPageRight (PDF 1.5) Display the pages two at a time, with odd-numbered pages on the right
            - * @param string $mode A name object specifying how the document should be displayed when opened:
            • UseNone Neither document outline nor thumbnail images visible
            • UseOutlines Document outline visible
            • UseThumbs Thumbnail images visible
            • FullScreen Full-screen mode, with no menu bar, window controls, or any other window visible
            • UseOC (PDF 1.5) Optional content group panel visible
            • UseAttachments (PDF 1.6) Attachments panel visible
            - * @public - * @since 1.2 - */ - public function setDisplayMode($zoom, $layout='SinglePage', $mode='UseNone') { - if (($zoom == 'fullpage') OR ($zoom == 'fullwidth') OR ($zoom == 'real') OR ($zoom == 'default') OR (!is_string($zoom))) { - $this->ZoomMode = $zoom; - } else { - $this->Error('Incorrect zoom display mode: '.$zoom); - } - $this->LayoutMode = TCPDF_STATIC::getPageLayoutMode($layout); - $this->PageMode = TCPDF_STATIC::getPageMode($mode); - } - - /** - * Activates or deactivates page compression. When activated, the internal representation of each page is compressed, which leads to a compression ratio of about 2 for the resulting document. Compression is on by default. - * Note: the Zlib extension is required for this feature. If not present, compression will be turned off. - * @param boolean $compress Boolean indicating if compression must be enabled. - * @public - * @since 1.4 - */ - public function setCompression($compress=true) { - $this->compress = false; - if (function_exists('gzcompress')) { - if ($compress) { - if ( !$this->pdfa_mode) { - $this->compress = true; - } - } - } - } - - /** - * Set flag to force sRGB_IEC61966-2.1 black scaled ICC color profile for the whole document. - * @param boolean $mode If true force sRGB output intent. - * @public - * @since 5.9.121 (2011-09-28) - */ - public function setSRGBmode($mode=false) { - $this->force_srgb = $mode ? true : false; - } - - /** - * Turn on/off Unicode mode for document information dictionary (meta tags). - * This has effect only when unicode mode is set to false. - * @param boolean $unicode if true set the meta information in Unicode - * @since 5.9.027 (2010-12-01) - * @public - */ - public function setDocInfoUnicode($unicode=true) { - $this->docinfounicode = $unicode ? true : false; - } - - /** - * Defines the title of the document. - * @param string $title The title. - * @public - * @since 1.2 - * @see SetAuthor(), SetCreator(), SetKeywords(), SetSubject() - */ - public function setTitle($title) { - $this->title = $title; - } - - /** - * Defines the subject of the document. - * @param string $subject The subject. - * @public - * @since 1.2 - * @see SetAuthor(), SetCreator(), SetKeywords(), SetTitle() - */ - public function setSubject($subject) { - $this->subject = $subject; - } - - /** - * Defines the author of the document. - * @param string $author The name of the author. - * @public - * @since 1.2 - * @see SetCreator(), SetKeywords(), SetSubject(), SetTitle() - */ - public function setAuthor($author) { - $this->author = $author; - } - - /** - * Associates keywords with the document, generally in the form 'keyword1 keyword2 ...'. - * @param string $keywords The list of keywords. - * @public - * @since 1.2 - * @see SetAuthor(), SetCreator(), SetSubject(), SetTitle() - */ - public function setKeywords($keywords) { - $this->keywords = $keywords; - } - - /** - * Defines the creator of the document. This is typically the name of the application that generates the PDF. - * @param string $creator The name of the creator. - * @public - * @since 1.2 - * @see SetAuthor(), SetKeywords(), SetSubject(), SetTitle() - */ - public function setCreator($creator) { - $this->creator = $creator; - } - - /** - * Whether to allow local file path in image html tags, when prefixed with file:// - * - * @param bool $allowLocalFiles true, when local files should be allowed. Otherwise false. - * @public - * @since 6.4 - */ - public function setAllowLocalFiles($allowLocalFiles) { - $this->allowLocalFiles = (bool) $allowLocalFiles; - } - - - /** - * Throw an exception or print an error message and die if the K_TCPDF_PARSER_THROW_EXCEPTION_ERROR constant is set to true. - * @param string $msg The error message - * @public - * @since 1.0 - */ - public function Error($msg) { - // unset all class variables - $this->_destroy(true); - if (defined('K_TCPDF_THROW_EXCEPTION_ERROR') AND !K_TCPDF_THROW_EXCEPTION_ERROR) { - die('TCPDF ERROR: '.$msg); - } else { - throw new Exception('TCPDF ERROR: '.$msg); - } - } - - /** - * This method begins the generation of the PDF document. - * It is not necessary to call it explicitly because AddPage() does it automatically. - * Note: no page is created by this method - * @public - * @since 1.0 - * @see AddPage(), Close() - */ - public function Open() { - $this->state = 1; - } - - /** - * Terminates the PDF document. - * It is not necessary to call this method explicitly because Output() does it automatically. - * If the document contains no page, AddPage() is called to prevent from getting an invalid document. - * @public - * @since 1.0 - * @see Open(), Output() - */ - public function Close() { - if ($this->state == 3) { - return; - } - if ($this->page == 0) { - $this->AddPage(); - } - $this->endLayer(); - if ($this->tcpdflink) { - // save current graphic settings - $gvars = $this->getGraphicVars(); - $this->setEqualColumns(); - $this->lastpage(true); - $this->setAutoPageBreak(false); - $this->x = 0; - $this->y = $this->h - (1 / $this->k); - $this->lMargin = 0; - $this->_outSaveGraphicsState(); - $font = defined('PDF_FONT_NAME_MAIN')?PDF_FONT_NAME_MAIN:'helvetica'; - $this->setFont($font, '', 1); - $this->setTextRenderingMode(0, false, false); - $msg = "\x50\x6f\x77\x65\x72\x65\x64\x20\x62\x79\x20\x54\x43\x50\x44\x46\x20\x28\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67\x29"; - $lnk = "\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x74\x63\x70\x64\x66\x2e\x6f\x72\x67"; - $this->Cell(0, 0, $msg, 0, 0, 'L', 0, $lnk, 0, false, 'D', 'B'); - $this->_outRestoreGraphicsState(); - // restore graphic settings - $this->setGraphicVars($gvars); - } - // close page - $this->endPage(); - // close document - $this->_enddoc(); - // unset all class variables (except critical ones) - $this->_destroy(false); - } - - /** - * Move pointer at the specified document page and update page dimensions. - * @param int $pnum page number (1 ... numpages) - * @param boolean $resetmargins if true reset left, right, top margins and Y position. - * @public - * @since 2.1.000 (2008-01-07) - * @see getPage(), lastpage(), getNumPages() - */ - public function setPage($pnum, $resetmargins=false) { - if (($pnum == $this->page) AND ($this->state == 2)) { - return; - } - if (($pnum > 0) AND ($pnum <= $this->numpages)) { - $this->state = 2; - // save current graphic settings - //$gvars = $this->getGraphicVars(); - $oldpage = $this->page; - $this->page = $pnum; - $this->wPt = $this->pagedim[$this->page]['w']; - $this->hPt = $this->pagedim[$this->page]['h']; - $this->w = $this->pagedim[$this->page]['wk']; - $this->h = $this->pagedim[$this->page]['hk']; - $this->tMargin = $this->pagedim[$this->page]['tm']; - $this->bMargin = $this->pagedim[$this->page]['bm']; - $this->original_lMargin = $this->pagedim[$this->page]['olm']; - $this->original_rMargin = $this->pagedim[$this->page]['orm']; - $this->AutoPageBreak = $this->pagedim[$this->page]['pb']; - $this->CurOrientation = $this->pagedim[$this->page]['or']; - $this->setAutoPageBreak($this->AutoPageBreak, $this->bMargin); - // restore graphic settings - //$this->setGraphicVars($gvars); - if ($resetmargins) { - $this->lMargin = $this->pagedim[$this->page]['olm']; - $this->rMargin = $this->pagedim[$this->page]['orm']; - $this->setY($this->tMargin); - } else { - // account for booklet mode - if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) { - $deltam = $this->pagedim[$this->page]['olm'] - $this->pagedim[$this->page]['orm']; - $this->lMargin += $deltam; - $this->rMargin -= $deltam; - } - } - } else { - $this->Error('Wrong page number on setPage() function: '.$pnum); - } - } - - /** - * Reset pointer to the last document page. - * @param boolean $resetmargins if true reset left, right, top margins and Y position. - * @public - * @since 2.0.000 (2008-01-04) - * @see setPage(), getPage(), getNumPages() - */ - public function lastPage($resetmargins=false) { - $this->setPage($this->getNumPages(), $resetmargins); - } - - /** - * Get current document page number. - * @return int page number - * @public - * @since 2.1.000 (2008-01-07) - * @see setPage(), lastpage(), getNumPages() - */ - public function getPage() { - return $this->page; - } - - /** - * Get the total number of insered pages. - * @return int number of pages - * @public - * @since 2.1.000 (2008-01-07) - * @see setPage(), getPage(), lastpage() - */ - public function getNumPages() { - return $this->numpages; - } - - /** - * Adds a new TOC (Table Of Content) page to the document. - * @param string $orientation page orientation. - * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). - * @param boolean $keepmargins if true overwrites the default page margins with the current margins - * @public - * @since 5.0.001 (2010-05-06) - * @see AddPage(), startPage(), endPage(), endTOCPage() - */ - public function addTOCPage($orientation='', $format='', $keepmargins=false) { - $this->AddPage($orientation, $format, $keepmargins, true); - } - - /** - * Terminate the current TOC (Table Of Content) page - * @public - * @since 5.0.001 (2010-05-06) - * @see AddPage(), startPage(), endPage(), addTOCPage() - */ - public function endTOCPage() { - $this->endPage(true); - } - - /** - * Adds a new page to the document. If a page is already present, the Footer() method is called first to output the footer (if enabled). Then the page is added, the current position set to the top-left corner according to the left and top margins (or top-right if in RTL mode), and Header() is called to display the header (if enabled). - * The origin of the coordinate system is at the top-left corner (or top-right for RTL) and increasing ordinates go downwards. - * @param string $orientation page orientation. Possible values are (case insensitive):
            • P or PORTRAIT (default)
            • L or LANDSCAPE
            - * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). - * @param boolean $keepmargins if true overwrites the default page margins with the current margins - * @param boolean $tocpage if true set the tocpage state to true (the added page will be used to display Table Of Content). - * @public - * @since 1.0 - * @see startPage(), endPage(), addTOCPage(), endTOCPage(), getPageSizeFromFormat(), setPageFormat() - */ - public function AddPage($orientation='', $format='', $keepmargins=false, $tocpage=false) { - if ($this->inxobj) { - // we are inside an XObject template - return; - } - if (!isset($this->original_lMargin) OR $keepmargins) { - $this->original_lMargin = $this->lMargin; - } - if (!isset($this->original_rMargin) OR $keepmargins) { - $this->original_rMargin = $this->rMargin; - } - // terminate previous page - $this->endPage(); - // start new page - $this->startPage($orientation, $format, $tocpage); - } - - /** - * Terminate the current page - * @param boolean $tocpage if true set the tocpage state to false (end the page used to display Table Of Content). - * @public - * @since 4.2.010 (2008-11-14) - * @see AddPage(), startPage(), addTOCPage(), endTOCPage() - */ - public function endPage($tocpage=false) { - // check if page is already closed - if (($this->page == 0) OR ($this->numpages > $this->page) OR (!$this->pageopen[$this->page])) { - return; - } - // print page footer - $this->setFooter(); - // close page - $this->_endpage(); - // mark page as closed - $this->pageopen[$this->page] = false; - if ($tocpage) { - $this->tocpage = false; - } - } - - /** - * Starts a new page to the document. The page must be closed using the endPage() function. - * The origin of the coordinate system is at the top-left corner and increasing ordinates go downwards. - * @param string $orientation page orientation. Possible values are (case insensitive):
            • P or PORTRAIT (default)
            • L or LANDSCAPE
            - * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). - * @param boolean $tocpage if true the page is designated to contain the Table-Of-Content. - * @since 4.2.010 (2008-11-14) - * @see AddPage(), endPage(), addTOCPage(), endTOCPage(), getPageSizeFromFormat(), setPageFormat() - * @public - */ - public function startPage($orientation='', $format='', $tocpage=false) { - if ($tocpage) { - $this->tocpage = true; - } - // move page numbers of documents to be attached - if ($this->tocpage) { - // move reference to unexistent pages (used for page attachments) - // adjust outlines - $tmpoutlines = $this->outlines; - foreach ($tmpoutlines as $key => $outline) { - if (!$outline['f'] AND ($outline['p'] > $this->numpages)) { - $this->outlines[$key]['p'] = ($outline['p'] + 1); - } - } - // adjust dests - $tmpdests = $this->dests; - foreach ($tmpdests as $key => $dest) { - if (!$dest['f'] AND ($dest['p'] > $this->numpages)) { - $this->dests[$key]['p'] = ($dest['p'] + 1); - } - } - // adjust links - $tmplinks = $this->links; - foreach ($tmplinks as $key => $link) { - if (!$link['f'] AND ($link['p'] > $this->numpages)) { - $this->links[$key]['p'] = ($link['p'] + 1); - } - } - } - if ($this->numpages > $this->page) { - // this page has been already added - $this->setPage($this->page + 1); - $this->setY($this->tMargin); - return; - } - // start a new page - if ($this->state == 0) { - $this->Open(); - } - ++$this->numpages; - $this->swapMargins($this->booklet); - // save current graphic settings - $gvars = $this->getGraphicVars(); - // start new page - $this->_beginpage($orientation, $format); - // mark page as open - $this->pageopen[$this->page] = true; - // restore graphic settings - $this->setGraphicVars($gvars); - // mark this point - $this->setPageMark(); - // print page header - $this->setHeader(); - // restore graphic settings - $this->setGraphicVars($gvars); - // mark this point - $this->setPageMark(); - // print table header (if any) - $this->setTableHeader(); - // set mark for empty page check - $this->emptypagemrk[$this->page]= $this->pagelen[$this->page]; - } - - /** - * Set start-writing mark on current page stream used to put borders and fills. - * Borders and fills are always created after content and inserted on the position marked by this method. - * This function must be called after calling Image() function for a background image. - * Background images must be always inserted before calling Multicell() or WriteHTMLCell() or WriteHTML() functions. - * @public - * @since 4.0.016 (2008-07-30) - */ - public function setPageMark() { - $this->intmrk[$this->page] = $this->pagelen[$this->page]; - $this->bordermrk[$this->page] = $this->intmrk[$this->page]; - $this->setContentMark(); - } - - /** - * Set start-writing mark on selected page. - * Borders and fills are always created after content and inserted on the position marked by this method. - * @param int $page page number (default is the current page) - * @protected - * @since 4.6.021 (2009-07-20) - */ - protected function setContentMark($page=0) { - if ($page <= 0) { - $page = $this->page; - } - if (isset($this->footerlen[$page])) { - $this->cntmrk[$page] = $this->pagelen[$page] - $this->footerlen[$page]; - } else { - $this->cntmrk[$page] = $this->pagelen[$page]; - } - } - - /** - * Set header data. - * @param string $ln header image logo - * @param int $lw header image logo width in mm - * @param string $ht string to print as title on document header - * @param string $hs string to print on document header - * @param int[] $tc RGB array color for text. - * @param int[] $lc RGB array color for line. - * @public - */ - public function setHeaderData($ln='', $lw=0, $ht='', $hs='', $tc=array(0,0,0), $lc=array(0,0,0)) { - $this->header_logo = $ln; - $this->header_logo_width = $lw; - $this->header_title = $ht; - $this->header_string = $hs; - $this->header_text_color = $tc; - $this->header_line_color = $lc; - } - - /** - * Set footer data. - * @param int[] $tc RGB array color for text. - * @param int[] $lc RGB array color for line. - * @public - */ - public function setFooterData($tc=array(0,0,0), $lc=array(0,0,0)) { - $this->footer_text_color = $tc; - $this->footer_line_color = $lc; - } - - /** - * Returns header data: - *
            • $ret['logo'] = logo image
            • $ret['logo_width'] = width of the image logo in user units
            • $ret['title'] = header title
            • $ret['string'] = header description string
            - * @return array - * @public - * @since 4.0.012 (2008-07-24) - */ - public function getHeaderData() { - $ret = array(); - $ret['logo'] = $this->header_logo; - $ret['logo_width'] = $this->header_logo_width; - $ret['title'] = $this->header_title; - $ret['string'] = $this->header_string; - $ret['text_color'] = $this->header_text_color; - $ret['line_color'] = $this->header_line_color; - return $ret; - } - - /** - * Set header margin. - * (minimum distance between header and top page margin) - * @param int $hm distance in user units - * @public - */ - public function setHeaderMargin($hm=10) { - $this->header_margin = $hm; - } - - /** - * Returns header margin in user units. - * @return float - * @since 4.0.012 (2008-07-24) - * @public - */ - public function getHeaderMargin() { - return $this->header_margin; - } - - /** - * Set footer margin. - * (minimum distance between footer and bottom page margin) - * @param int $fm distance in user units - * @public - */ - public function setFooterMargin($fm=10) { - $this->footer_margin = $fm; - } - - /** - * Returns footer margin in user units. - * @return float - * @since 4.0.012 (2008-07-24) - * @public - */ - public function getFooterMargin() { - return $this->footer_margin; - } - /** - * Set a flag to print page header. - * @param boolean $val set to true to print the page header (default), false otherwise. - * @public - */ - public function setPrintHeader($val=true) { - $this->print_header = $val ? true : false; - } - - /** - * Set a flag to print page footer. - * @param boolean $val set to true to print the page footer (default), false otherwise. - * @public - */ - public function setPrintFooter($val=true) { - $this->print_footer = $val ? true : false; - } - - /** - * Return the right-bottom (or left-bottom for RTL) corner X coordinate of last inserted image - * @return float - * @public - */ - public function getImageRBX() { - return $this->img_rb_x; - } - - /** - * Return the right-bottom (or left-bottom for RTL) corner Y coordinate of last inserted image - * @return float - * @public - */ - public function getImageRBY() { - return $this->img_rb_y; - } - - /** - * Reset the xobject template used by Header() method. - * @public - */ - public function resetHeaderTemplate() { - $this->header_xobjid = false; - } - - /** - * Set a flag to automatically reset the xobject template used by Header() method at each page. - * @param boolean $val set to true to reset Header xobject template at each page, false otherwise. - * @public - */ - public function setHeaderTemplateAutoreset($val=true) { - $this->header_xobj_autoreset = $val ? true : false; - } - - /** - * This method is used to render the page header. - * It is automatically called by AddPage() and could be overwritten in your own inherited class. - * @public - */ - public function Header() { - if ($this->header_xobjid === false) { - // start a new XObject Template - $this->header_xobjid = $this->startTemplate($this->w, $this->tMargin); - $headerfont = $this->getHeaderFont(); - $headerdata = $this->getHeaderData(); - $this->y = $this->header_margin; - if ($this->rtl) { - $this->x = $this->w - $this->original_rMargin; - } else { - $this->x = $this->original_lMargin; - } - if (($headerdata['logo']) AND ($headerdata['logo'] != K_BLANK_IMAGE)) { - $imgtype = TCPDF_IMAGES::getImageFileType(K_PATH_IMAGES.$headerdata['logo']); - if (($imgtype == 'eps') OR ($imgtype == 'ai')) { - $this->ImageEps(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); - } elseif ($imgtype == 'svg') { - $this->ImageSVG(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); - } else { - $this->Image(K_PATH_IMAGES.$headerdata['logo'], '', '', $headerdata['logo_width']); - } - $imgy = $this->getImageRBY(); - } else { - $imgy = $this->y; - } - $cell_height = $this->getCellHeight($headerfont[2] / $this->k); - // set starting margin for text data cell - if ($this->getRTL()) { - $header_x = $this->original_rMargin + ($headerdata['logo_width'] * 1.1); - } else { - $header_x = $this->original_lMargin + ($headerdata['logo_width'] * 1.1); - } - $cw = $this->w - $this->original_lMargin - $this->original_rMargin - ($headerdata['logo_width'] * 1.1); - $this->setTextColorArray($this->header_text_color); - // header title - $this->setFont($headerfont[0], 'B', $headerfont[2] + 1); - $this->setX($header_x); - $this->Cell($cw, $cell_height, $headerdata['title'], 0, 1, '', 0, '', 0); - // header string - $this->setFont($headerfont[0], $headerfont[1], $headerfont[2]); - $this->setX($header_x); - $this->MultiCell($cw, $cell_height, $headerdata['string'], 0, '', 0, 1, '', '', true, 0, false, true, 0, 'T', false); - // print an ending header line - $this->setLineStyle(array('width' => 0.85 / $this->k, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $headerdata['line_color'])); - $this->setY((2.835 / $this->k) + max($imgy, $this->y)); - if ($this->rtl) { - $this->setX($this->original_rMargin); - } else { - $this->setX($this->original_lMargin); - } - $this->Cell(($this->w - $this->original_lMargin - $this->original_rMargin), 0, '', 'T', 0, 'C'); - $this->endTemplate(); - } - // print header template - $x = 0; - $dx = 0; - if (!$this->header_xobj_autoreset AND $this->booklet AND (($this->page % 2) == 0)) { - // adjust margins for booklet mode - $dx = ($this->original_lMargin - $this->original_rMargin); - } - if ($this->rtl) { - $x = $this->w + $dx; - } else { - $x = 0 + $dx; - } - $this->printTemplate($this->header_xobjid, $x, 0, 0, 0, '', '', false); - if ($this->header_xobj_autoreset) { - // reset header xobject template at each page - $this->header_xobjid = false; - } - } - - /** - * This method is used to render the page footer. - * It is automatically called by AddPage() and could be overwritten in your own inherited class. - * @public - */ - public function Footer() { - $cur_y = $this->y; - $this->setTextColorArray($this->footer_text_color); - //set style for cell border - $line_width = (0.85 / $this->k); - $this->setLineStyle(array('width' => $line_width, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $this->footer_line_color)); - //print document barcode - $barcode = $this->getBarcode(); - if (!empty($barcode)) { - $this->Ln($line_width); - $barcode_width = round(($this->w - $this->original_lMargin - $this->original_rMargin) / 3); - $style = array( - 'position' => $this->rtl?'R':'L', - 'align' => $this->rtl?'R':'L', - 'stretch' => false, - 'fitwidth' => true, - 'cellfitalign' => '', - 'border' => false, - 'padding' => 0, - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, - 'text' => false - ); - $this->write1DBarcode($barcode, 'C128', '', $cur_y + $line_width, '', (($this->footer_margin / 3) - $line_width), 0.3, $style, ''); - } - $w_page = isset($this->l['w_page']) ? $this->l['w_page'].' ' : ''; - if (empty($this->pagegroups)) { - $pagenumtxt = $w_page.$this->getAliasNumPage().' / '.$this->getAliasNbPages(); - } else { - $pagenumtxt = $w_page.$this->getPageNumGroupAlias().' / '.$this->getPageGroupAlias(); - } - $this->setY($cur_y); - //Print page number - if ($this->getRTL()) { - $this->setX($this->original_rMargin); - $this->Cell(0, 0, $pagenumtxt, 'T', 0, 'L'); - } else { - $this->setX($this->original_lMargin); - $this->Cell(0, 0, $this->getAliasRightShift().$pagenumtxt, 'T', 0, 'R'); - } - } - - /** - * This method is used to render the page header. - * @protected - * @since 4.0.012 (2008-07-24) - */ - protected function setHeader() { - if (!$this->print_header OR ($this->state != 2)) { - return; - } - $this->InHeader = true; - $this->setGraphicVars($this->default_graphic_vars); - $temp_thead = $this->thead; - $temp_theadMargins = $this->theadMargins; - $lasth = $this->lasth; - $newline = $this->newline; - $this->_outSaveGraphicsState(); - $this->rMargin = $this->original_rMargin; - $this->lMargin = $this->original_lMargin; - $this->setCellPadding(0); - //set current position - if ($this->rtl) { - $this->setXY($this->original_rMargin, $this->header_margin); - } else { - $this->setXY($this->original_lMargin, $this->header_margin); - } - $this->setFont($this->header_font[0], $this->header_font[1], $this->header_font[2]); - $this->Header(); - //restore position - if ($this->rtl) { - $this->setXY($this->original_rMargin, $this->tMargin); - } else { - $this->setXY($this->original_lMargin, $this->tMargin); - } - $this->_outRestoreGraphicsState(); - $this->lasth = $lasth; - $this->thead = $temp_thead; - $this->theadMargins = $temp_theadMargins; - $this->newline = $newline; - $this->InHeader = false; - } - - /** - * This method is used to render the page footer. - * @protected - * @since 4.0.012 (2008-07-24) - */ - protected function setFooter() { - if ($this->state != 2) { - return; - } - $this->InFooter = true; - // save current graphic settings - $gvars = $this->getGraphicVars(); - // mark this point - $this->footerpos[$this->page] = $this->pagelen[$this->page]; - $this->_out("\n"); - if ($this->print_footer) { - $this->setGraphicVars($this->default_graphic_vars); - $this->current_column = 0; - $this->num_columns = 1; - $temp_thead = $this->thead; - $temp_theadMargins = $this->theadMargins; - $lasth = $this->lasth; - $this->_outSaveGraphicsState(); - $this->rMargin = $this->original_rMargin; - $this->lMargin = $this->original_lMargin; - $this->setCellPadding(0); - //set current position - $footer_y = $this->h - $this->footer_margin; - if ($this->rtl) { - $this->setXY($this->original_rMargin, $footer_y); - } else { - $this->setXY($this->original_lMargin, $footer_y); - } - $this->setFont($this->footer_font[0], $this->footer_font[1], $this->footer_font[2]); - $this->Footer(); - //restore position - if ($this->rtl) { - $this->setXY($this->original_rMargin, $this->tMargin); - } else { - $this->setXY($this->original_lMargin, $this->tMargin); - } - $this->_outRestoreGraphicsState(); - $this->lasth = $lasth; - $this->thead = $temp_thead; - $this->theadMargins = $temp_theadMargins; - } - // restore graphic settings - $this->setGraphicVars($gvars); - $this->current_column = $gvars['current_column']; - $this->num_columns = $gvars['num_columns']; - // calculate footer length - $this->footerlen[$this->page] = $this->pagelen[$this->page] - $this->footerpos[$this->page] + 1; - $this->InFooter = false; - } - - /** - * Check if we are on the page body (excluding page header and footer). - * @return bool true if we are not in page header nor in page footer, false otherwise. - * @protected - * @since 5.9.091 (2011-06-15) - */ - protected function inPageBody() { - return (($this->InHeader === false) AND ($this->InFooter === false)); - } - - /** - * This method is used to render the table header on new page (if any). - * @protected - * @since 4.5.030 (2009-03-25) - */ - protected function setTableHeader() { - if ($this->num_columns > 1) { - // multi column mode - return; - } - if (isset($this->theadMargins['top'])) { - // restore the original top-margin - $this->tMargin = $this->theadMargins['top']; - $this->pagedim[$this->page]['tm'] = $this->tMargin; - $this->y = $this->tMargin; - } - if (!TCPDF_STATIC::empty_string($this->thead) AND (!$this->inthead)) { - // set margins - $prev_lMargin = $this->lMargin; - $prev_rMargin = $this->rMargin; - $prev_cell_padding = $this->cell_padding; - $this->lMargin = $this->theadMargins['lmargin'] + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$this->theadMargins['page']]['olm']); - $this->rMargin = $this->theadMargins['rmargin'] + ($this->pagedim[$this->page]['orm'] - $this->pagedim[$this->theadMargins['page']]['orm']); - $this->cell_padding = $this->theadMargins['cell_padding']; - if ($this->rtl) { - $this->x = $this->w - $this->rMargin; - } else { - $this->x = $this->lMargin; - } - // account for special "cell" mode - if ($this->theadMargins['cell']) { - if ($this->rtl) { - $this->x -= $this->cell_padding['R']; - } else { - $this->x += $this->cell_padding['L']; - } - } - $gvars = $this->getGraphicVars(); - if (!empty($this->theadMargins['gvars'])) { - // set the correct graphic style - $this->setGraphicVars($this->theadMargins['gvars']); - $this->rMargin = $gvars['rMargin']; - $this->lMargin = $gvars['lMargin']; - } - // print table header - $this->writeHTML($this->thead, false, false, false, false, ''); - $this->setGraphicVars($gvars); - // set new top margin to skip the table headers - if (!isset($this->theadMargins['top'])) { - $this->theadMargins['top'] = $this->tMargin; - } - // store end of header position - if (!isset($this->columns[0]['th'])) { - $this->columns[0]['th'] = array(); - } - $this->columns[0]['th']['\''.$this->page.'\''] = $this->y; - $this->tMargin = $this->y; - $this->pagedim[$this->page]['tm'] = $this->tMargin; - $this->lasth = 0; - $this->lMargin = $prev_lMargin; - $this->rMargin = $prev_rMargin; - $this->cell_padding = $prev_cell_padding; - } - } - - /** - * Returns the current page number. - * @return int page number - * @public - * @since 1.0 - * @see getAliasNbPages() - */ - public function PageNo() { - return $this->page; - } - - /** - * Returns the array of spot colors. - * @return array Spot colors array. - * @public - * @since 6.0.038 (2013-09-30) - */ - public function getAllSpotColors() { - return $this->spot_colors; - } - - /** - * Defines a new spot color. - * It can be expressed in RGB components or gray scale. - * The method can be called before the first page is created and the value is retained from page to page. - * @param string $name Full name of the spot color. - * @param float $c Cyan color for CMYK. Value between 0 and 100. - * @param float $m Magenta color for CMYK. Value between 0 and 100. - * @param float $y Yellow color for CMYK. Value between 0 and 100. - * @param float $k Key (Black) color for CMYK. Value between 0 and 100. - * @public - * @since 4.0.024 (2008-09-12) - * @see SetDrawSpotColor(), SetFillSpotColor(), SetTextSpotColor() - */ - public function AddSpotColor($name, $c, $m, $y, $k) { - if (!isset($this->spot_colors[$name])) { - $i = (1 + count($this->spot_colors)); - $this->spot_colors[$name] = array('C' => $c, 'M' => $m, 'Y' => $y, 'K' => $k, 'name' => $name, 'i' => $i); - } - } - - /** - * Set the spot color for the specified type ('draw', 'fill', 'text'). - * @param string $type Type of object affected by this color: ('draw', 'fill', 'text'). - * @param string $name Name of the spot color. - * @param float $tint Intensity of the color (from 0 to 100 ; 100 = full intensity by default). - * @return string PDF color command. - * @public - * @since 5.9.125 (2011-10-03) - */ - public function setSpotColor($type, $name, $tint=100) { - $spotcolor = TCPDF_COLORS::getSpotColor($name, $this->spot_colors); - if ($spotcolor === false) { - $this->Error('Undefined spot color: '.$name.', you must add it using the AddSpotColor() method.'); - } - $tint = (max(0, min(100, $tint)) / 100); - $pdfcolor = sprintf('/CS%d ', $this->spot_colors[$name]['i']); - switch ($type) { - case 'draw': { - $pdfcolor .= sprintf('CS %F SCN', $tint); - $this->DrawColor = $pdfcolor; - $this->strokecolor = $spotcolor; - break; - } - case 'fill': { - $pdfcolor .= sprintf('cs %F scn', $tint); - $this->FillColor = $pdfcolor; - $this->bgcolor = $spotcolor; - break; - } - case 'text': { - $pdfcolor .= sprintf('cs %F scn', $tint); - $this->TextColor = $pdfcolor; - $this->fgcolor = $spotcolor; - break; - } - } - $this->ColorFlag = ($this->FillColor != $this->TextColor); - if ($this->state == 2) { - $this->_out($pdfcolor); - } - if ($this->inxobj) { - // we are inside an XObject template - $this->xobjects[$this->xobjid]['spot_colors'][$name] = $this->spot_colors[$name]; - } - return $pdfcolor; - } - - /** - * Defines the spot color used for all drawing operations (lines, rectangles and cell borders). - * @param string $name Name of the spot color. - * @param float $tint Intensity of the color (from 0 to 100 ; 100 = full intensity by default). - * @public - * @since 4.0.024 (2008-09-12) - * @see AddSpotColor(), SetFillSpotColor(), SetTextSpotColor() - */ - public function setDrawSpotColor($name, $tint=100) { - $this->setSpotColor('draw', $name, $tint); - } - - /** - * Defines the spot color used for all filling operations (filled rectangles and cell backgrounds). - * @param string $name Name of the spot color. - * @param float $tint Intensity of the color (from 0 to 100 ; 100 = full intensity by default). - * @public - * @since 4.0.024 (2008-09-12) - * @see AddSpotColor(), SetDrawSpotColor(), SetTextSpotColor() - */ - public function setFillSpotColor($name, $tint=100) { - $this->setSpotColor('fill', $name, $tint); - } - - /** - * Defines the spot color used for text. - * @param string $name Name of the spot color. - * @param int $tint Intensity of the color (from 0 to 100 ; 100 = full intensity by default). - * @public - * @since 4.0.024 (2008-09-12) - * @see AddSpotColor(), SetDrawSpotColor(), SetFillSpotColor() - */ - public function setTextSpotColor($name, $tint=100) { - $this->setSpotColor('text', $name, $tint); - } - - /** - * Set the color array for the specified type ('draw', 'fill', 'text'). - * It can be expressed in RGB, CMYK or GRAY SCALE components. - * The method can be called before the first page is created and the value is retained from page to page. - * @param string $type Type of object affected by this color: ('draw', 'fill', 'text'). - * @param array $color Array of colors (1=gray, 3=RGB, 4=CMYK or 5=spotcolor=CMYK+name values). - * @param boolean $ret If true do not send the PDF command. - * @return string The PDF command or empty string. - * @public - * @since 3.1.000 (2008-06-11) - */ - public function setColorArray($type, $color, $ret=false) { - if (is_array($color)) { - $color = array_values($color); - // component: grey, RGB red or CMYK cyan - $c = isset($color[0]) ? $color[0] : -1; - // component: RGB green or CMYK magenta - $m = isset($color[1]) ? $color[1] : -1; - // component: RGB blue or CMYK yellow - $y = isset($color[2]) ? $color[2] : -1; - // component: CMYK black - $k = isset($color[3]) ? $color[3] : -1; - // color name - $name = isset($color[4]) ? $color[4] : ''; - if ($c >= 0) { - return $this->setColor($type, $c, $m, $y, $k, $ret, $name); - } - } - return ''; - } - - /** - * Defines the color used for all drawing operations (lines, rectangles and cell borders). - * It can be expressed in RGB, CMYK or GRAY SCALE components. - * The method can be called before the first page is created and the value is retained from page to page. - * @param array $color Array of colors (1, 3 or 4 values). - * @param boolean $ret If true do not send the PDF command. - * @return string the PDF command - * @public - * @since 3.1.000 (2008-06-11) - * @see SetDrawColor() - */ - public function setDrawColorArray($color, $ret=false) { - return $this->setColorArray('draw', $color, $ret); - } - - /** - * Defines the color used for all filling operations (filled rectangles and cell backgrounds). - * It can be expressed in RGB, CMYK or GRAY SCALE components. - * The method can be called before the first page is created and the value is retained from page to page. - * @param array $color Array of colors (1, 3 or 4 values). - * @param boolean $ret If true do not send the PDF command. - * @public - * @since 3.1.000 (2008-6-11) - * @see SetFillColor() - */ - public function setFillColorArray($color, $ret=false) { - return $this->setColorArray('fill', $color, $ret); - } - - /** - * Defines the color used for text. It can be expressed in RGB components or gray scale. - * The method can be called before the first page is created and the value is retained from page to page. - * @param array $color Array of colors (1, 3 or 4 values). - * @param boolean $ret If true do not send the PDF command. - * @public - * @since 3.1.000 (2008-6-11) - * @see SetFillColor() - */ - public function setTextColorArray($color, $ret=false) { - return $this->setColorArray('text', $color, $ret); - } - - /** - * Defines the color used by the specified type ('draw', 'fill', 'text'). - * @param string $type Type of object affected by this color: ('draw', 'fill', 'text'). - * @param float $col1 GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). - * @param float $col2 GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). - * @param float $col3 BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). - * @param float $col4 KEY (BLACK) color for CMYK (0-100). - * @param boolean $ret If true do not send the command. - * @param string $name spot color name (if any) - * @return string The PDF command or empty string. - * @public - * @since 5.9.125 (2011-10-03) - */ - public function setColor($type, $col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { - // set default values - if (!is_numeric($col1)) { - $col1 = 0; - } - if (!is_numeric($col2)) { - $col2 = -1; - } - if (!is_numeric($col3)) { - $col3 = -1; - } - if (!is_numeric($col4)) { - $col4 = -1; - } - // set color by case - $suffix = ''; - if (($col2 == -1) AND ($col3 == -1) AND ($col4 == -1)) { - // Grey scale - $col1 = max(0, min(255, $col1)); - $intcolor = array('G' => $col1); - $pdfcolor = sprintf('%F ', ($col1 / 255)); - $suffix = 'g'; - } elseif ($col4 == -1) { - // RGB - $col1 = max(0, min(255, $col1)); - $col2 = max(0, min(255, $col2)); - $col3 = max(0, min(255, $col3)); - $intcolor = array('R' => $col1, 'G' => $col2, 'B' => $col3); - $pdfcolor = sprintf('%F %F %F ', ($col1 / 255), ($col2 / 255), ($col3 / 255)); - $suffix = 'rg'; - } else { - $col1 = max(0, min(100, $col1)); - $col2 = max(0, min(100, $col2)); - $col3 = max(0, min(100, $col3)); - $col4 = max(0, min(100, $col4)); - if (empty($name)) { - // CMYK - $intcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4); - $pdfcolor = sprintf('%F %F %F %F ', ($col1 / 100), ($col2 / 100), ($col3 / 100), ($col4 / 100)); - $suffix = 'k'; - } else { - // SPOT COLOR - $intcolor = array('C' => $col1, 'M' => $col2, 'Y' => $col3, 'K' => $col4, 'name' => $name); - $this->AddSpotColor($name, $col1, $col2, $col3, $col4); - $pdfcolor = $this->setSpotColor($type, $name, 100); - } - } - switch ($type) { - case 'draw': { - $pdfcolor .= strtoupper($suffix); - $this->DrawColor = $pdfcolor; - $this->strokecolor = $intcolor; - break; - } - case 'fill': { - $pdfcolor .= $suffix; - $this->FillColor = $pdfcolor; - $this->bgcolor = $intcolor; - break; - } - case 'text': { - $pdfcolor .= $suffix; - $this->TextColor = $pdfcolor; - $this->fgcolor = $intcolor; - break; - } - } - $this->ColorFlag = ($this->FillColor != $this->TextColor); - if (($type != 'text') AND ($this->state == 2) AND $type !== 0) { - if (!$ret) { - $this->_out($pdfcolor); - } - return $pdfcolor; - } - return ''; - } - - /** - * Defines the color used for all drawing operations (lines, rectangles and cell borders). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. - * @param float $col1 GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). - * @param float $col2 GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). - * @param float $col3 BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). - * @param float $col4 KEY (BLACK) color for CMYK (0-100). - * @param boolean $ret If true do not send the command. - * @param string $name spot color name (if any) - * @return string the PDF command - * @public - * @since 1.3 - * @see SetDrawColorArray(), SetFillColor(), SetTextColor(), Line(), Rect(), Cell(), MultiCell() - */ - public function setDrawColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { - return $this->setColor('draw', $col1, $col2, $col3, $col4, $ret, $name); - } - - /** - * Defines the color used for all filling operations (filled rectangles and cell backgrounds). It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. - * @param float $col1 GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). - * @param float $col2 GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). - * @param float $col3 BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). - * @param float $col4 KEY (BLACK) color for CMYK (0-100). - * @param boolean $ret If true do not send the command. - * @param string $name Spot color name (if any). - * @return string The PDF command. - * @public - * @since 1.3 - * @see SetFillColorArray(), SetDrawColor(), SetTextColor(), Rect(), Cell(), MultiCell() - */ - public function setFillColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { - return $this->setColor('fill', $col1, $col2, $col3, $col4, $ret, $name); - } - - /** - * Defines the color used for text. It can be expressed in RGB components or gray scale. The method can be called before the first page is created and the value is retained from page to page. - * @param float $col1 GRAY level for single color, or Red color for RGB (0-255), or CYAN color for CMYK (0-100). - * @param float $col2 GREEN color for RGB (0-255), or MAGENTA color for CMYK (0-100). - * @param float $col3 BLUE color for RGB (0-255), or YELLOW color for CMYK (0-100). - * @param float $col4 KEY (BLACK) color for CMYK (0-100). - * @param boolean $ret If true do not send the command. - * @param string $name Spot color name (if any). - * @return string Empty string. - * @public - * @since 1.3 - * @see SetTextColorArray(), SetDrawColor(), SetFillColor(), Text(), Cell(), MultiCell() - */ - public function setTextColor($col1=0, $col2=-1, $col3=-1, $col4=-1, $ret=false, $name='') { - return $this->setColor('text', $col1, $col2, $col3, $col4, $ret, $name); - } - - /** - * Returns the length of a string in user unit. A font must be selected.
            - * @param string $s The string whose length is to be computed - * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained. - * @param string $fontstyle Font style. Possible values are (case insensitive):
            • empty string: regular
            • B: bold
            • I: italic
            • U: underline
            • D: line-through
            • O: overline
            or any combination. The default value is regular. - * @param float $fontsize Font size in points. The default value is the current size. - * @param boolean $getarray if true returns an array of characters widths, if false returns the total length. - * @return float[]|float total string length or array of characted widths - * @author Nicola Asuni - * @public - * @since 1.2 - */ - public function GetStringWidth($s, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) { - return $this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($s, $this->isunicode, $this->CurrentFont), $s, $this->tmprtl, $this->isunicode, $this->CurrentFont), $fontname, $fontstyle, $fontsize, $getarray); - } - - /** - * Returns the string length of an array of chars in user unit or an array of characters widths. A font must be selected.
            - * @param array $sa The array of chars whose total length is to be computed - * @param string $fontname Family font. It can be either a name defined by AddFont() or one of the standard families. It is also possible to pass an empty string, in that case, the current family is retained. - * @param string $fontstyle Font style. Possible values are (case insensitive):
            • empty string: regular
            • B: bold
            • I: italic
            • U: underline
            • D: line through
            • O: overline
            or any combination. The default value is regular. - * @param float $fontsize Font size in points. The default value is the current size. - * @param boolean $getarray if true returns an array of characters widths, if false returns the total length. - * @return float[]|float total string length or array of characted widths - * @author Nicola Asuni - * @public - * @since 2.4.000 (2008-03-06) - */ - public function GetArrStringWidth($sa, $fontname='', $fontstyle='', $fontsize=0, $getarray=false) { - // store current values - if (!TCPDF_STATIC::empty_string($fontname)) { - $prev_FontFamily = $this->FontFamily; - $prev_FontStyle = $this->FontStyle; - $prev_FontSizePt = $this->FontSizePt; - $this->setFont($fontname, $fontstyle, $fontsize, '', 'default', false); - } - // convert UTF-8 array to Latin1 if required - if ($this->isunicode AND (!$this->isUnicodeFont())) { - $sa = TCPDF_FONTS::UTF8ArrToLatin1Arr($sa); - } - $w = 0; // total width - $wa = array(); // array of characters widths - foreach ($sa as $ck => $char) { - // character width - $cw = $this->GetCharWidth($char, isset($sa[($ck + 1)])); - $wa[] = $cw; - $w += $cw; - } - // restore previous values - if (!TCPDF_STATIC::empty_string($fontname)) { - $this->setFont($prev_FontFamily, $prev_FontStyle, $prev_FontSizePt, '', 'default', false); - } - if ($getarray) { - return $wa; - } - return $w; - } - - /** - * Returns the length of the char in user unit for the current font considering current stretching and spacing (tracking). - * @param int $char The char code whose length is to be returned - * @param boolean $notlast If false ignore the font-spacing. - * @return float char width - * @author Nicola Asuni - * @public - * @since 2.4.000 (2008-03-06) - */ - public function GetCharWidth($char, $notlast=true) { - // get raw width - $chw = $this->getRawCharWidth($char); - if (($this->font_spacing < 0) OR (($this->font_spacing > 0) AND $notlast)) { - // increase/decrease font spacing - $chw += $this->font_spacing; - } - if ($this->font_stretching != 100) { - // fixed stretching mode - $chw *= ($this->font_stretching / 100); - } - return $chw; - } - - /** - * Returns the length of the char in user unit for the current font. - * @param int $char The char code whose length is to be returned - * @return float char width - * @author Nicola Asuni - * @public - * @since 5.9.000 (2010-09-28) - */ - public function getRawCharWidth($char) { - if ($char == 173) { - // SHY character will not be printed - return (0); - } - if (isset($this->CurrentFont['cw'][intval($char)])) { - $w = $this->CurrentFont['cw'][intval($char)]; - } elseif (isset($this->CurrentFont['dw'])) { - // default width - $w = $this->CurrentFont['dw']; - } elseif (isset($this->CurrentFont['cw'][32])) { - // default width - $w = $this->CurrentFont['cw'][32]; - } else { - $w = 600; - } - return $this->getAbsFontMeasure($w); - } - - /** - * Returns the numbero of characters in a string. - * @param string $s The input string. - * @return int number of characters - * @public - * @since 2.0.0001 (2008-01-07) - */ - public function GetNumChars($s) { - if ($this->isUnicodeFont()) { - return count(TCPDF_FONTS::UTF8StringToArray($s, $this->isunicode, $this->CurrentFont)); - } - return strlen($s); - } - - /** - * Fill the list of available fonts ($this->fontlist). - * @protected - * @since 4.0.013 (2008-07-28) - */ - protected function getFontsList() { - if (($fontsdir = opendir(TCPDF_FONTS::_getfontpath())) !== false) { - while (($file = readdir($fontsdir)) !== false) { - if (substr($file, -4) == '.php') { - array_push($this->fontlist, strtolower(basename($file, '.php'))); - } - } - closedir($fontsdir); - } - } - - /** - * Imports a TrueType, Type1, core, or CID0 font and makes it available. - * It is necessary to generate a font definition file first (read /fonts/utils/README.TXT). - * The definition file (and the font file itself when embedding) must be present either in the current directory or in the one indicated by K_PATH_FONTS if the constant is defined. If it could not be found, the error "Could not include font definition file" is generated. - * @param string $family Font family. The name can be chosen arbitrarily. If it is a standard family name, it will override the corresponding font. - * @param string $style Font style. Possible values are (case insensitive):
            • empty string: regular (default)
            • B: bold
            • I: italic
            • BI or IB: bold italic
            - * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces. - * @return array|false array containing the font data, or false in case of error. - * @param mixed $subset if true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. - * @public - * @since 1.5 - * @see SetFont(), setFontSubsetting() - */ - public function AddFont($family, $style='', $fontfile='', $subset='default') { - if ($subset === 'default') { - $subset = $this->font_subsetting; - } - if ($this->pdfa_mode) { - $subset = false; - } - if (TCPDF_STATIC::empty_string($family)) { - if (!TCPDF_STATIC::empty_string($this->FontFamily)) { - $family = $this->FontFamily; - } else { - $this->Error('Empty font family'); - } - } - // move embedded styles on $style - if (substr($family, -1) == 'I') { - $style .= 'I'; - $family = substr($family, 0, -1); - } - if (substr($family, -1) == 'B') { - $style .= 'B'; - $family = substr($family, 0, -1); - } - // normalize family name - $family = strtolower($family); - if ((!$this->isunicode) AND ($family == 'arial')) { - $family = 'helvetica'; - } - if (($family == 'symbol') OR ($family == 'zapfdingbats')) { - $style = ''; - } - if ($this->pdfa_mode AND (isset($this->CoreFonts[$family]))) { - // all fonts must be embedded - $family = 'pdfa'.$family; - } - $tempstyle = strtoupper($style); - $style = ''; - // underline - if (strpos($tempstyle, 'U') !== false) { - $this->underline = true; - } else { - $this->underline = false; - } - // line-through (deleted) - if (strpos($tempstyle, 'D') !== false) { - $this->linethrough = true; - } else { - $this->linethrough = false; - } - // overline - if (strpos($tempstyle, 'O') !== false) { - $this->overline = true; - } else { - $this->overline = false; - } - // bold - if (strpos($tempstyle, 'B') !== false) { - $style .= 'B'; - } - // oblique - if (strpos($tempstyle, 'I') !== false) { - $style .= 'I'; - } - $bistyle = $style; - $fontkey = $family.$style; - $font_style = $style.($this->underline ? 'U' : '').($this->linethrough ? 'D' : '').($this->overline ? 'O' : ''); - $fontdata = array('fontkey' => $fontkey, 'family' => $family, 'style' => $font_style); - // check if the font has been already added - $fb = $this->getFontBuffer($fontkey); - if ($fb !== false) { - if ($this->inxobj) { - // we are inside an XObject template - $this->xobjects[$this->xobjid]['fonts'][$fontkey] = $fb['i']; - } - return $fontdata; - } - // get specified font directory (if any) - $fontdir = false; - if (!TCPDF_STATIC::empty_string($fontfile)) { - $fontdir = dirname($fontfile); - if (TCPDF_STATIC::empty_string($fontdir) OR ($fontdir == '.')) { - $fontdir = ''; - } else { - $fontdir .= '/'; - } - } - // true when the font style variation is missing - $missing_style = false; - // search and include font file - if (TCPDF_STATIC::empty_string($fontfile) OR (!@TCPDF_STATIC::file_exists($fontfile))) { - // build a standard filenames for specified font - $tmp_fontfile = str_replace(' ', '', $family).strtolower($style).'.php'; - $fontfile = TCPDF_FONTS::getFontFullPath($tmp_fontfile, $fontdir); - if (TCPDF_STATIC::empty_string($fontfile)) { - $missing_style = true; - // try to remove the style part - $tmp_fontfile = str_replace(' ', '', $family).'.php'; - $fontfile = TCPDF_FONTS::getFontFullPath($tmp_fontfile, $fontdir); - } - } - // include font file - if (!TCPDF_STATIC::empty_string($fontfile) AND (@TCPDF_STATIC::file_exists($fontfile))) { - include($fontfile); - } else { - $this->Error('Could not include font definition file: '.$family.''); - } - // check font parameters - if ((!isset($type)) OR (!isset($cw))) { - $this->Error('The font definition file has a bad format: '.$fontfile.''); - } - // SET default parameters - if (!isset($file) OR TCPDF_STATIC::empty_string($file)) { - $file = ''; - } - if (!isset($enc) OR TCPDF_STATIC::empty_string($enc)) { - $enc = ''; - } - if (!isset($cidinfo) OR TCPDF_STATIC::empty_string($cidinfo)) { - $cidinfo = array('Registry'=>'Adobe', 'Ordering'=>'Identity', 'Supplement'=>0); - $cidinfo['uni2cid'] = array(); - } - if (!isset($ctg) OR TCPDF_STATIC::empty_string($ctg)) { - $ctg = ''; - } - if (!isset($desc) OR TCPDF_STATIC::empty_string($desc)) { - $desc = array(); - } - if (!isset($up) OR TCPDF_STATIC::empty_string($up)) { - $up = -100; - } - if (!isset($ut) OR TCPDF_STATIC::empty_string($ut)) { - $ut = 50; - } - if (!isset($cw) OR TCPDF_STATIC::empty_string($cw)) { - $cw = array(); - } - if (!isset($dw) OR TCPDF_STATIC::empty_string($dw)) { - // set default width - if (isset($desc['MissingWidth']) AND ($desc['MissingWidth'] > 0)) { - $dw = $desc['MissingWidth']; - } elseif (isset($cw[32])) { - $dw = $cw[32]; - } else { - $dw = 600; - } - } - ++$this->numfonts; - if ($type == 'core') { - $name = $this->CoreFonts[$fontkey]; - $subset = false; - } elseif (($type == 'TrueType') OR ($type == 'Type1')) { - $subset = false; - } elseif ($type == 'TrueTypeUnicode') { - $enc = 'Identity-H'; - } elseif ($type == 'cidfont0') { - if ($this->pdfa_mode) { - $this->Error('All fonts must be embedded in PDF/A mode!'); - } - } else { - $this->Error('Unknow font type: '.$type.''); - } - // set name if unset - if (!isset($name) OR empty($name)) { - $name = $fontkey; - } - // create artificial font style variations if missing (only works with non-embedded fonts) - if (($type != 'core') AND $missing_style) { - // style variations - $styles = array('' => '', 'B' => ',Bold', 'I' => ',Italic', 'BI' => ',BoldItalic'); - $name .= $styles[$bistyle]; - // artificial bold - if (strpos($bistyle, 'B') !== false) { - if (isset($desc['StemV'])) { - // from normal to bold - $desc['StemV'] = round($desc['StemV'] * 1.75); - } else { - // bold - $desc['StemV'] = 123; - } - } - // artificial italic - if (strpos($bistyle, 'I') !== false) { - if (isset($desc['ItalicAngle'])) { - $desc['ItalicAngle'] -= 11; - } else { - $desc['ItalicAngle'] = -11; - } - if (isset($desc['Flags'])) { - $desc['Flags'] |= 64; //bit 7 - } else { - $desc['Flags'] = 64; - } - } - } - // check if the array of characters bounding boxes is defined - if (!isset($cbbox)) { - $cbbox = array(); - } - // initialize subsetchars - $subsetchars = array_fill(0, 255, true); - $this->setFontBuffer($fontkey, array('fontkey' => $fontkey, 'i' => $this->numfonts, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'cbbox' => $cbbox, 'dw' => $dw, 'enc' => $enc, 'cidinfo' => $cidinfo, 'file' => $file, 'ctg' => $ctg, 'subset' => $subset, 'subsetchars' => $subsetchars)); - if ($this->inxobj) { - // we are inside an XObject template - $this->xobjects[$this->xobjid]['fonts'][$fontkey] = $this->numfonts; - } - if (isset($diff) AND (!empty($diff))) { - //Search existing encodings - $d = 0; - $nb = count($this->diffs); - for ($i=1; $i <= $nb; ++$i) { - if ($this->diffs[$i] == $diff) { - $d = $i; - break; - } - } - if ($d == 0) { - $d = $nb + 1; - $this->diffs[$d] = $diff; - } - $this->setFontSubBuffer($fontkey, 'diff', $d); - } - if (!TCPDF_STATIC::empty_string($file)) { - if (!isset($this->FontFiles[$file])) { - if ((strcasecmp($type,'TrueType') == 0) OR (strcasecmp($type, 'TrueTypeUnicode') == 0)) { - $this->FontFiles[$file] = array('length1' => $originalsize, 'fontdir' => $fontdir, 'subset' => $subset, 'fontkeys' => array($fontkey)); - } elseif ($type != 'core') { - $this->FontFiles[$file] = array('length1' => $size1, 'length2' => $size2, 'fontdir' => $fontdir, 'subset' => $subset, 'fontkeys' => array($fontkey)); - } - } else { - // update fontkeys that are sharing this font file - $this->FontFiles[$file]['subset'] = ($this->FontFiles[$file]['subset'] AND $subset); - if (!in_array($fontkey, $this->FontFiles[$file]['fontkeys'])) { - $this->FontFiles[$file]['fontkeys'][] = $fontkey; - } - } - } - return $fontdata; - } - - /** - * Sets the font used to print character strings. - * The font can be either a standard one or a font added via the AddFont() method. Standard fonts use Windows encoding cp1252 (Western Europe). - * The method can be called before the first page is created and the font is retained from page to page. - * If you just wish to change the current font size, it is simpler to call SetFontSize(). - * Note: for the standard fonts, the font metric files must be accessible. There are three possibilities for this:
            • They are in the current directory (the one where the running script lies)
            • They are in one of the directories defined by the include_path parameter
            • They are in the directory defined by the K_PATH_FONTS constant

            - * @param string $family Family font. It can be either a name defined by AddFont() or one of the standard Type1 families (case insensitive):
            • times (Times-Roman)
            • timesb (Times-Bold)
            • timesi (Times-Italic)
            • timesbi (Times-BoldItalic)
            • helvetica (Helvetica)
            • helveticab (Helvetica-Bold)
            • helveticai (Helvetica-Oblique)
            • helveticabi (Helvetica-BoldOblique)
            • courier (Courier)
            • courierb (Courier-Bold)
            • courieri (Courier-Oblique)
            • courierbi (Courier-BoldOblique)
            • symbol (Symbol)
            • zapfdingbats (ZapfDingbats)
            It is also possible to pass an empty string. In that case, the current family is retained. - * @param string $style Font style. Possible values are (case insensitive):
            • empty string: regular
            • B: bold
            • I: italic
            • U: underline
            • D: line through
            • O: overline
            or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined. - * @param float|null $size Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12 - * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces. - * @param mixed $subset if true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. - * @param boolean $out if true output the font size command, otherwise only set the font properties. - * @author Nicola Asuni - * @public - * @since 1.0 - * @see AddFont(), SetFontSize() - */ - public function setFont($family, $style='', $size=null, $fontfile='', $subset='default', $out=true) { - //Select a font; size given in points - if ($size === null) { - $size = $this->FontSizePt; - } - if ($size < 0) { - $size = 0; - } - // try to add font (if not already added) - $fontdata = $this->AddFont($family, $style, $fontfile, $subset); - $this->FontFamily = $fontdata['family']; - $this->FontStyle = $fontdata['style']; - if (isset($this->CurrentFont['fontkey']) AND isset($this->CurrentFont['subsetchars'])) { - // save subset chars of the previous font - $this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']); - } - $this->CurrentFont = $this->getFontBuffer($fontdata['fontkey']); - $this->setFontSize($size, $out); - } - - /** - * Defines the size of the current font. - * @param float $size The font size in points. - * @param boolean $out if true output the font size command, otherwise only set the font properties. - * @public - * @since 1.0 - * @see SetFont() - */ - public function setFontSize($size, $out=true) { - $size = (float)$size; - // font size in points - $this->FontSizePt = $size; - // font size in user units - $this->FontSize = $size / $this->k; - // calculate some font metrics - if (isset($this->CurrentFont['desc']['FontBBox'])) { - $bbox = explode(' ', substr($this->CurrentFont['desc']['FontBBox'], 1, -1)); - $font_height = ((intval($bbox[3]) - intval($bbox[1])) * $size / 1000); - } else { - $font_height = $size * 1.219; - } - if (isset($this->CurrentFont['desc']['Ascent']) AND ($this->CurrentFont['desc']['Ascent'] > 0)) { - $font_ascent = ($this->CurrentFont['desc']['Ascent'] * $size / 1000); - } - if (isset($this->CurrentFont['desc']['Descent']) AND ($this->CurrentFont['desc']['Descent'] <= 0)) { - $font_descent = (- $this->CurrentFont['desc']['Descent'] * $size / 1000); - } - if (!isset($font_ascent) AND !isset($font_descent)) { - // core font - $font_ascent = 0.76 * $font_height; - $font_descent = $font_height - $font_ascent; - } elseif (!isset($font_descent)) { - $font_descent = $font_height - $font_ascent; - } elseif (!isset($font_ascent)) { - $font_ascent = $font_height - $font_descent; - } - $this->FontAscent = ($font_ascent / $this->k); - $this->FontDescent = ($font_descent / $this->k); - if ($out AND ($this->page > 0) AND (isset($this->CurrentFont['i'])) AND ($this->state == 2)) { - $this->_out(sprintf('BT /F%d %F Tf ET', $this->CurrentFont['i'], $this->FontSizePt)); - } - } - - /** - * Returns the bounding box of the current font in user units. - * @return array - * @public - * @since 5.9.152 (2012-03-23) - */ - public function getFontBBox() { - $fbbox = array(); - if (isset($this->CurrentFont['desc']['FontBBox'])) { - $tmpbbox = explode(' ', substr($this->CurrentFont['desc']['FontBBox'], 1, -1)); - $fbbox = array_map(array($this,'getAbsFontMeasure'), $tmpbbox); - } else { - // Find max width - if (isset($this->CurrentFont['desc']['MaxWidth'])) { - $maxw = $this->getAbsFontMeasure(intval($this->CurrentFont['desc']['MaxWidth'])); - } else { - $maxw = 0; - if (isset($this->CurrentFont['desc']['MissingWidth'])) { - $maxw = max($maxw, $this->CurrentFont['desc']['MissingWidth']); - } - if (isset($this->CurrentFont['desc']['AvgWidth'])) { - $maxw = max($maxw, $this->CurrentFont['desc']['AvgWidth']); - } - if (isset($this->CurrentFont['dw'])) { - $maxw = max($maxw, $this->CurrentFont['dw']); - } - foreach ($this->CurrentFont['cw'] as $char => $w) { - $maxw = max($maxw, $w); - } - if ($maxw == 0) { - $maxw = 600; - } - $maxw = $this->getAbsFontMeasure($maxw); - } - $fbbox = array(0, (0 - $this->FontDescent), $maxw, $this->FontAscent); - } - return $fbbox; - } - - /** - * Convert a relative font measure into absolute value. - * @param int $s Font measure. - * @return float Absolute measure. - * @since 5.9.186 (2012-09-13) - */ - public function getAbsFontMeasure($s) { - return ($s * $this->FontSize / 1000); - } - - /** - * Returns the glyph bounding box of the specified character in the current font in user units. - * @param int $char Input character code. - * @return false|array array(xMin, yMin, xMax, yMax) or FALSE if not defined. - * @since 5.9.186 (2012-09-13) - */ - public function getCharBBox($char) { - $c = intval($char); - if (isset($this->CurrentFont['cw'][$c])) { - // glyph is defined ... use zero width & height for glyphs without outlines - $result = array(0,0,0,0); - if (isset($this->CurrentFont['cbbox'][$c])) { - $result = $this->CurrentFont['cbbox'][$c]; - } - return array_map(array($this,'getAbsFontMeasure'), $result); - } - return false; - } - - /** - * Return the font descent value - * @param string $font font name - * @param string $style font style - * @param float $size The size (in points) - * @return int font descent - * @public - * @author Nicola Asuni - * @since 4.9.003 (2010-03-30) - */ - public function getFontDescent($font, $style='', $size=0) { - $fontdata = $this->AddFont($font, $style); - $fontinfo = $this->getFontBuffer($fontdata['fontkey']); - if (isset($fontinfo['desc']['Descent']) AND ($fontinfo['desc']['Descent'] <= 0)) { - $descent = (- $fontinfo['desc']['Descent'] * $size / 1000); - } else { - $descent = (1.219 * 0.24 * $size); - } - return ($descent / $this->k); - } - - /** - * Return the font ascent value. - * @param string $font font name - * @param string $style font style - * @param float $size The size (in points) - * @return int font ascent - * @public - * @author Nicola Asuni - * @since 4.9.003 (2010-03-30) - */ - public function getFontAscent($font, $style='', $size=0) { - $fontdata = $this->AddFont($font, $style); - $fontinfo = $this->getFontBuffer($fontdata['fontkey']); - if (isset($fontinfo['desc']['Ascent']) AND ($fontinfo['desc']['Ascent'] > 0)) { - $ascent = ($fontinfo['desc']['Ascent'] * $size / 1000); - } else { - $ascent = 1.219 * 0.76 * $size; - } - return ($ascent / $this->k); - } - - /** - * Return true in the character is present in the specified font. - * @param mixed $char Character to check (integer value or string) - * @param string $font Font name (family name). - * @param string $style Font style. - * @return bool true if the char is defined, false otherwise. - * @public - * @since 5.9.153 (2012-03-28) - */ - public function isCharDefined($char, $font='', $style='') { - if (is_string($char)) { - // get character code - $char = TCPDF_FONTS::UTF8StringToArray($char, $this->isunicode, $this->CurrentFont); - $char = $char[0]; - } - if (TCPDF_STATIC::empty_string($font)) { - if (TCPDF_STATIC::empty_string($style)) { - return (isset($this->CurrentFont['cw'][intval($char)])); - } - $font = $this->FontFamily; - } - $fontdata = $this->AddFont($font, $style); - $fontinfo = $this->getFontBuffer($fontdata['fontkey']); - return (isset($fontinfo['cw'][intval($char)])); - } - - /** - * Replace missing font characters on selected font with specified substitutions. - * @param string $text Text to process. - * @param string $font Font name (family name). - * @param string $style Font style. - * @param array $subs Array of possible character substitutions. The key is the character to check (integer value) and the value is a single intege value or an array of possible substitutes. - * @return string Processed text. - * @public - * @since 5.9.153 (2012-03-28) - */ - public function replaceMissingChars($text, $font='', $style='', $subs=array()) { - if (empty($subs)) { - return $text; - } - if (TCPDF_STATIC::empty_string($font)) { - $font = $this->FontFamily; - } - $fontdata = $this->AddFont($font, $style); - $fontinfo = $this->getFontBuffer($fontdata['fontkey']); - $uniarr = TCPDF_FONTS::UTF8StringToArray($text, $this->isunicode, $this->CurrentFont); - foreach ($uniarr as $k => $chr) { - if (!isset($fontinfo['cw'][$chr])) { - // this character is missing on the selected font - if (isset($subs[$chr])) { - // we have available substitutions - if (is_array($subs[$chr])) { - foreach($subs[$chr] as $s) { - if (isset($fontinfo['cw'][$s])) { - $uniarr[$k] = $s; - break; - } - } - } elseif (isset($fontinfo['cw'][$subs[$chr]])) { - $uniarr[$k] = $subs[$chr]; - } - } - } - } - return TCPDF_FONTS::UniArrSubString(TCPDF_FONTS::UTF8ArrayToUniArray($uniarr, $this->isunicode)); - } - - /** - * Defines the default monospaced font. - * @param string $font Font name. - * @public - * @since 4.5.025 - */ - public function setDefaultMonospacedFont($font) { - $this->default_monospaced_font = $font; - } - - /** - * Creates a new internal link and returns its identifier. An internal link is a clickable area which directs to another place within the document.
            - * The identifier can then be passed to Cell(), Write(), Image() or Link(). The destination is defined with SetLink(). - * @public - * @since 1.5 - * @see Cell(), Write(), Image(), Link(), SetLink() - */ - public function AddLink() { - // create a new internal link - $n = count($this->links) + 1; - $this->links[$n] = array('p' => 0, 'y' => 0, 'f' => false); - return $n; - } - - /** - * Defines the page and position a link points to. - * @param int $link The link identifier returned by AddLink() - * @param float $y Ordinate of target position; -1 indicates the current position. The default value is 0 (top of page) - * @param int|string $page Number of target page; -1 indicates the current page (default value). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. - * @public - * @since 1.5 - * @see AddLink() - */ - public function setLink($link, $y=0, $page=-1) { - $fixed = false; - if (!empty($page) AND (substr($page, 0, 1) == '*')) { - $page = intval(substr($page, 1)); - // this page number will not be changed when moving/add/deleting pages - $fixed = true; - } - if ($page < 0) { - $page = $this->page; - } - if ($y == -1) { - $y = $this->y; - } - $this->links[$link] = array('p' => $page, 'y' => $y, 'f' => $fixed); - } - - /** - * Puts a link on a rectangular area of the page. - * Text or image links are generally put via Cell(), Write() or Image(), but this method can be useful for instance to define a clickable area inside an image. - * @param float $x Abscissa of the upper-left corner of the rectangle - * @param float $y Ordinate of the upper-left corner of the rectangle - * @param float $w Width of the rectangle - * @param float $h Height of the rectangle - * @param mixed $link URL or identifier returned by AddLink() - * @param int $spaces number of spaces on the text to link - * @public - * @since 1.5 - * @see AddLink(), Annotation(), Cell(), Write(), Image() - */ - public function Link($x, $y, $w, $h, $link, $spaces=0) { - $this->Annotation($x, $y, $w, $h, $link, array('Subtype'=>'Link'), $spaces); - } - - /** - * Puts a markup annotation on a rectangular area of the page. - * !!!!THE ANNOTATION SUPPORT IS NOT YET FULLY IMPLEMENTED !!!! - * @param float $x Abscissa of the upper-left corner of the rectangle - * @param float $y Ordinate of the upper-left corner of the rectangle - * @param float $w Width of the rectangle - * @param float $h Height of the rectangle - * @param string $text annotation text or alternate content - * @param array $opt array of options (see section 8.4 of PDF reference 1.7). - * @param int $spaces number of spaces on the text to link - * @public - * @since 4.0.018 (2008-08-06) - */ - public function Annotation($x, $y, $w, $h, $text, $opt=array('Subtype'=>'Text'), $spaces=0) { - if ($this->inxobj) { - // store parameters for later use on template - $this->xobjects[$this->xobjid]['annotations'][] = array('x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'text' => $text, 'opt' => $opt, 'spaces' => $spaces); - return; - } - if ($x === '') { - $x = $this->x; - } - if ($y === '') { - $y = $this->y; - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions($h, $x, $y); - // recalculate coordinates to account for graphic transformations - if (isset($this->transfmatrix) AND !empty($this->transfmatrix)) { - for ($i=$this->transfmatrix_key; $i > 0; --$i) { - $maxid = count($this->transfmatrix[$i]) - 1; - for ($j=$maxid; $j >= 0; --$j) { - $ctm = $this->transfmatrix[$i][$j]; - if (isset($ctm['a'])) { - $x = $x * $this->k; - $y = ($this->h - $y) * $this->k; - $w = $w * $this->k; - $h = $h * $this->k; - // top left - $xt = $x; - $yt = $y; - $x1 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; - $y1 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; - // top right - $xt = $x + $w; - $yt = $y; - $x2 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; - $y2 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; - // bottom left - $xt = $x; - $yt = $y - $h; - $x3 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; - $y3 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; - // bottom right - $xt = $x + $w; - $yt = $y - $h; - $x4 = ($ctm['a'] * $xt) + ($ctm['c'] * $yt) + $ctm['e']; - $y4 = ($ctm['b'] * $xt) + ($ctm['d'] * $yt) + $ctm['f']; - // new coordinates (rectangle area) - $x = min($x1, $x2, $x3, $x4); - $y = max($y1, $y2, $y3, $y4); - $w = (max($x1, $x2, $x3, $x4) - $x) / $this->k; - $h = ($y - min($y1, $y2, $y3, $y4)) / $this->k; - $x = $x / $this->k; - $y = $this->h - ($y / $this->k); - } - } - } - } - if ($this->page <= 0) { - $page = 1; - } else { - $page = $this->page; - } - if (!isset($this->PageAnnots[$page])) { - $this->PageAnnots[$page] = array(); - } - $this->PageAnnots[$page][] = array('n' => ++$this->n, 'x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces); - if (!$this->pdfa_mode || ($this->pdfa_mode && $this->pdfa_version == 3)) { - if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!TCPDF_STATIC::empty_string($opt['FS'])) - AND (@TCPDF_STATIC::file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS'])) - AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) { - $this->embeddedfiles[basename($opt['FS'])] = array('f' => ++$this->n, 'n' => ++$this->n, 'file' => $opt['FS']); - } - } - // Add widgets annotation's icons - if (isset($opt['mk']['i']) AND @TCPDF_STATIC::file_exists($opt['mk']['i'])) { - $this->Image($opt['mk']['i'], '', '', 10, 10, '', '', '', false, 300, '', false, false, 0, false, true); - } - if (isset($opt['mk']['ri']) AND @TCPDF_STATIC::file_exists($opt['mk']['ri'])) { - $this->Image($opt['mk']['ri'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true); - } - if (isset($opt['mk']['ix']) AND @TCPDF_STATIC::file_exists($opt['mk']['ix'])) { - $this->Image($opt['mk']['ix'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true); - } - } - - /** - * Embedd the attached files. - * @since 4.4.000 (2008-12-07) - * @protected - * @see Annotation() - */ - protected function _putEmbeddedFiles() { - if ($this->pdfa_mode && $this->pdfa_version != 3) { - // embedded files are not allowed in PDF/A mode version 1 and 2 - return; - } - reset($this->embeddedfiles); - foreach ($this->embeddedfiles as $filename => $filedata) { - $data = $this->getCachedFileContents($filedata['file']); - if ($data !== FALSE) { - $rawsize = strlen($data); - if ($rawsize > 0) { - // update name tree - $this->efnames[$filename] = $filedata['f'].' 0 R'; - // embedded file specification object - $out = $this->_getobj($filedata['f'])."\n"; - $out .= '<_datastring($filename, $filedata['f']); - $out .= ' /UF '.$this->_datastring($filename, $filedata['f']); - $out .= ' /AFRelationship /Source'; - $out .= ' /EF <> >>'; - $out .= "\n".'endobj'; - $this->_out($out); - // embedded file object - $filter = ''; - if ($this->compress) { - $data = gzcompress($data); - $filter = ' /Filter /FlateDecode'; - } - - if ($this->pdfa_version == 3) { - $filter = ' /Subtype /text#2Fxml'; - } - - $stream = $this->_getrawstream($data, $filedata['n']); - $out = $this->_getobj($filedata['n'])."\n"; - $out .= '<< /Type /EmbeddedFile'.$filter.' /Length '.strlen($stream).' /Params <> >>'; - $out .= ' stream'."\n".$stream."\n".'endstream'; - $out .= "\n".'endobj'; - $this->_out($out); - } - } - } - } - - /** - * Prints a text cell at the specified position. - * This method allows to place a string precisely on the page. - * @param float $x Abscissa of the cell origin - * @param float $y Ordinate of the cell origin - * @param string $txt String to print - * @param int $fstroke outline size in user units (0 = disable) - * @param boolean $fclip if true activate clipping mode (you must call StartTransform() before this function and StopTransform() to stop the clipping tranformation). - * @param boolean $ffill if true fills the text - * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
            • 0: no border (default)
            • 1: frame
            or a string containing some or all of the following characters (in any order):
            • L: left
            • T: top
            • R: right
            • B: bottom
            or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @param int $ln Indicates where the current position should go after the call. Possible values are:
            • 0: to the right (or left for RTL languages)
            • 1: to the beginning of the next line
            • 2: below
            Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. - * @param string $align Allows to center or align the text. Possible values are:
            • L or empty string: left align (default value)
            • C: center
            • R: right align
            • J: justify
            - * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). - * @param mixed $link URL or identifier returned by AddLink(). - * @param int $stretch font stretch mode:
            • 0 = disabled
            • 1 = horizontal scaling only if text is larger than cell width
            • 2 = forced horizontal scaling to fit cell width
            • 3 = character spacing only if text is larger than cell width
            • 4 = forced character spacing to fit cell width
            General font stretching and scaling values will be preserved when possible. - * @param boolean $ignore_min_height if true ignore automatic minimum height value. - * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
            • T : cell top
            • A : font top
            • L : font baseline
            • D : font bottom
            • B : cell bottom
            - * @param string $valign text vertical alignment inside the cell. Possible values are:
            • T : top
            • C : center
            • B : bottom
            - * @param boolean $rtloff if true uses the page top-left corner as origin of axis for $x and $y initial position. - * @public - * @since 1.0 - * @see Cell(), Write(), MultiCell(), WriteHTML(), WriteHTMLCell() - */ - public function Text($x, $y, $txt, $fstroke=0, $fclip=false, $ffill=true, $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M', $rtloff=false) { - $textrendermode = $this->textrendermode; - $textstrokewidth = $this->textstrokewidth; - $this->setTextRenderingMode($fstroke, $ffill, $fclip); - $this->setXY($x, $y, $rtloff); - $this->Cell(0, 0, $txt, $border, $ln, $align, $fill, $link, $stretch, $ignore_min_height, $calign, $valign); - // restore previous rendering mode - $this->textrendermode = $textrendermode; - $this->textstrokewidth = $textstrokewidth; - } - - /** - * Whenever a page break condition is met, the method is called, and the break is issued or not depending on the returned value. - * The default implementation returns a value according to the mode selected by SetAutoPageBreak().
            - * This method is called automatically and should not be called directly by the application. - * @return bool - * @public - * @since 1.4 - * @see SetAutoPageBreak() - */ - public function AcceptPageBreak() { - if ($this->num_columns > 1) { - // multi column mode - if ($this->current_column < ($this->num_columns - 1)) { - // go to next column - $this->selectColumn($this->current_column + 1); - } elseif ($this->AutoPageBreak) { - // add a new page - $this->AddPage(); - // set first column - $this->selectColumn(0); - } - // avoid page breaking from checkPageBreak() - return false; - } - return $this->AutoPageBreak; - } - - /** - * Add page if needed. - * @param float $h Cell height. Default value: 0. - * @param float|null $y starting y position, leave empty for current position. - * @param bool $addpage if true add a page, otherwise only return the true/false state - * @return bool true in case of page break, false otherwise. - * @since 3.2.000 (2008-07-01) - * @protected - */ - protected function checkPageBreak($h=0, $y=null, $addpage=true) { - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - $current_page = $this->page; - if ((($y + $h) > $this->PageBreakTrigger) AND ($this->inPageBody()) AND ($this->AcceptPageBreak())) { - if ($addpage) { - //Automatic page break - $x = $this->x; - $this->AddPage($this->CurOrientation); - $this->y = $this->tMargin; - $oldpage = $this->page - 1; - if ($this->rtl) { - if ($this->pagedim[$this->page]['orm'] != $this->pagedim[$oldpage]['orm']) { - $this->x = $x - ($this->pagedim[$this->page]['orm'] - $this->pagedim[$oldpage]['orm']); - } else { - $this->x = $x; - } - } else { - if ($this->pagedim[$this->page]['olm'] != $this->pagedim[$oldpage]['olm']) { - $this->x = $x + ($this->pagedim[$this->page]['olm'] - $this->pagedim[$oldpage]['olm']); - } else { - $this->x = $x; - } - } - } - return true; - } - if ($current_page != $this->page) { - // account for columns mode - return true; - } - return false; - } - - /** - * Prints a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
            - * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. - * @param float $w Cell width. If 0, the cell extends up to the right margin. - * @param float $h Cell height. Default value: 0. - * @param string $txt String to print. Default value: empty string. - * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
            • 0: no border (default)
            • 1: frame
            or a string containing some or all of the following characters (in any order):
            • L: left
            • T: top
            • R: right
            • B: bottom
            or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @param int $ln Indicates where the current position should go after the call. Possible values are:
            • 0: to the right (or left for RTL languages)
            • 1: to the beginning of the next line
            • 2: below
            Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. - * @param string $align Allows to center or align the text. Possible values are:
            • L or empty string: left align (default value)
            • C: center
            • R: right align
            • J: justify
            - * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). - * @param mixed $link URL or identifier returned by AddLink(). - * @param int $stretch font stretch mode:
            • 0 = disabled
            • 1 = horizontal scaling only if text is larger than cell width
            • 2 = forced horizontal scaling to fit cell width
            • 3 = character spacing only if text is larger than cell width
            • 4 = forced character spacing to fit cell width
            General font stretching and scaling values will be preserved when possible. - * @param boolean $ignore_min_height if true ignore automatic minimum height value. - * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
            • T : cell top
            • C : center
            • B : cell bottom
            • A : font top
            • L : font baseline
            • D : font bottom
            - * @param string $valign text vertical alignment inside the cell. Possible values are:
            • T : top
            • C : center
            • B : bottom
            - * @public - * @since 1.0 - * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), AddLink(), Ln(), MultiCell(), Write(), SetAutoPageBreak() - */ - public function Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') { - $prev_cell_margin = $this->cell_margin; - $prev_cell_padding = $this->cell_padding; - $this->adjustCellPadding($border); - if (!$ignore_min_height) { - $min_cell_height = $this->getCellHeight($this->FontSize); - if ($h < $min_cell_height) { - $h = $min_cell_height; - } - } - $this->checkPageBreak($h + $this->cell_margin['T'] + $this->cell_margin['B']); - // apply text shadow if enabled - if ($this->txtshadow['enabled']) { - // save data - $x = $this->x; - $y = $this->y; - $bc = $this->bgcolor; - $fc = $this->fgcolor; - $sc = $this->strokecolor; - $alpha = $this->alpha; - // print shadow - $this->x += $this->txtshadow['depth_w']; - $this->y += $this->txtshadow['depth_h']; - $this->setFillColorArray($this->txtshadow['color']); - $this->setTextColorArray($this->txtshadow['color']); - $this->setDrawColorArray($this->txtshadow['color']); - if ($this->txtshadow['opacity'] != $alpha['CA']) { - $this->setAlpha($this->txtshadow['opacity'], $this->txtshadow['blend_mode']); - } - if ($this->state == 2) { - $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, true, $calign, $valign)); - } - //restore data - $this->x = $x; - $this->y = $y; - $this->setFillColorArray($bc); - $this->setTextColorArray($fc); - $this->setDrawColorArray($sc); - if ($this->txtshadow['opacity'] != $alpha['CA']) { - $this->setAlpha($alpha['CA'], $alpha['BM'], $alpha['ca'], $alpha['AIS']); - } - } - if ($this->state == 2) { - $this->_out($this->getCellCode($w, $h, $txt, $border, $ln, $align, $fill, $link, $stretch, true, $calign, $valign)); - } - $this->cell_padding = $prev_cell_padding; - $this->cell_margin = $prev_cell_margin; - } - - /** - * Returns the PDF string code to print a cell (rectangular area) with optional borders, background color and character string. The upper-left corner of the cell corresponds to the current position. The text can be aligned or centered. After the call, the current position moves to the right or to the next line. It is possible to put a link on the text.
            - * If automatic page breaking is enabled and the cell goes beyond the limit, a page break is done before outputting. - * @param float $w Cell width. If 0, the cell extends up to the right margin. - * @param float $h Cell height. Default value: 0. - * @param string $txt String to print. Default value: empty string. - * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
            • 0: no border (default)
            • 1: frame
            or a string containing some or all of the following characters (in any order):
            • L: left
            • T: top
            • R: right
            • B: bottom
            or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @param int $ln Indicates where the current position should go after the call. Possible values are:
            • 0: to the right (or left for RTL languages)
            • 1: to the beginning of the next line
            • 2: below
            Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0. - * @param string $align Allows to center or align the text. Possible values are:
            • L or empty string: left align (default value)
            • C: center
            • R: right align
            • J: justify
            - * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). - * @param mixed $link URL or identifier returned by AddLink(). - * @param int $stretch font stretch mode:
            • 0 = disabled
            • 1 = horizontal scaling only if text is larger than cell width
            • 2 = forced horizontal scaling to fit cell width
            • 3 = character spacing only if text is larger than cell width
            • 4 = forced character spacing to fit cell width
            General font stretching and scaling values will be preserved when possible. - * @param boolean $ignore_min_height if true ignore automatic minimum height value. - * @param string $calign cell vertical alignment relative to the specified Y value. Possible values are:
            • T : cell top
            • C : center
            • B : cell bottom
            • A : font top
            • L : font baseline
            • D : font bottom
            - * @param string $valign text vertical alignment inside the cell. Possible values are:
            • T : top
            • M : middle
            • B : bottom
            - * @return string containing cell code - * @protected - * @since 1.0 - * @see Cell() - */ - protected function getCellCode($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') { - // replace 'NO-BREAK SPACE' (U+00A0) character with a simple space - $txt = str_replace(TCPDF_FONTS::unichr(160, $this->isunicode), ' ', $txt); - $prev_cell_margin = $this->cell_margin; - $prev_cell_padding = $this->cell_padding; - $txt = TCPDF_STATIC::removeSHY($txt, $this->isunicode); - $rs = ''; //string to be returned - $this->adjustCellPadding($border); - if (!$ignore_min_height) { - $min_cell_height = $this->getCellHeight($this->FontSize); - if ($h < $min_cell_height) { - $h = $min_cell_height; - } - } - $k = $this->k; - // check page for no-write regions and adapt page margins if necessary - list($this->x, $this->y) = $this->checkPageRegions($h, $this->x, $this->y); - if ($this->rtl) { - $x = $this->x - $this->cell_margin['R']; - } else { - $x = $this->x + $this->cell_margin['L']; - } - $y = $this->y + $this->cell_margin['T']; - $prev_font_stretching = $this->font_stretching; - $prev_font_spacing = $this->font_spacing; - // cell vertical alignment - switch ($calign) { - case 'A': { - // font top - switch ($valign) { - case 'T': { - // top - $y -= $this->cell_padding['T']; - break; - } - case 'B': { - // bottom - $y -= ($h - $this->cell_padding['B'] - $this->FontAscent - $this->FontDescent); - break; - } - default: - case 'C': - case 'M': { - // center - $y -= (($h - $this->FontAscent - $this->FontDescent) / 2); - break; - } - } - break; - } - case 'L': { - // font baseline - switch ($valign) { - case 'T': { - // top - $y -= ($this->cell_padding['T'] + $this->FontAscent); - break; - } - case 'B': { - // bottom - $y -= ($h - $this->cell_padding['B'] - $this->FontDescent); - break; - } - default: - case 'C': - case 'M': { - // center - $y -= (($h + $this->FontAscent - $this->FontDescent) / 2); - break; - } - } - break; - } - case 'D': { - // font bottom - switch ($valign) { - case 'T': { - // top - $y -= ($this->cell_padding['T'] + $this->FontAscent + $this->FontDescent); - break; - } - case 'B': { - // bottom - $y -= ($h - $this->cell_padding['B']); - break; - } - default: - case 'C': - case 'M': { - // center - $y -= (($h + $this->FontAscent + $this->FontDescent) / 2); - break; - } - } - break; - } - case 'B': { - // cell bottom - $y -= $h; - break; - } - case 'C': - case 'M': { - // cell center - $y -= ($h / 2); - break; - } - default: - case 'T': { - // cell top - break; - } - } - // text vertical alignment - switch ($valign) { - case 'T': { - // top - $yt = $y + $this->cell_padding['T']; - break; - } - case 'B': { - // bottom - $yt = $y + $h - $this->cell_padding['B'] - $this->FontAscent - $this->FontDescent; - break; - } - default: - case 'C': - case 'M': { - // center - $yt = $y + (($h - $this->FontAscent - $this->FontDescent) / 2); - break; - } - } - $basefonty = $yt + $this->FontAscent; - if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { - if ($this->rtl) { - $w = $x - $this->lMargin; - } else { - $w = $this->w - $this->rMargin - $x; - } - } - $s = ''; - // fill and borders - if (is_string($border) AND (strlen($border) == 4)) { - // full border - $border = 1; - } - if ($fill OR ($border == 1)) { - if ($fill) { - $op = ($border == 1) ? 'B' : 'f'; - } else { - $op = 'S'; - } - if ($this->rtl) { - $xk = (($x - $w) * $k); - } else { - $xk = ($x * $k); - } - $s .= sprintf('%F %F %F %F re %s ', $xk, (($this->h - $y) * $k), ($w * $k), (-$h * $k), $op); - } - // draw borders - $s .= $this->getCellBorder($x, $y, $w, $h, $border); - if ($txt != '') { - $txt2 = $txt; - if ($this->isunicode) { - if (($this->CurrentFont['type'] == 'core') OR ($this->CurrentFont['type'] == 'TrueType') OR ($this->CurrentFont['type'] == 'Type1')) { - $txt2 = TCPDF_FONTS::UTF8ToLatin1($txt2, $this->isunicode, $this->CurrentFont); - } else { - $unicode = TCPDF_FONTS::UTF8StringToArray($txt, $this->isunicode, $this->CurrentFont); // array of UTF-8 unicode values - $unicode = TCPDF_FONTS::utf8Bidi($unicode, '', $this->tmprtl, $this->isunicode, $this->CurrentFont); - // replace thai chars (if any) - if (defined('K_THAI_TOPCHARS') AND (K_THAI_TOPCHARS == true)) { - // number of chars - $numchars = count($unicode); - // po pla, for far, for fan - $longtail = array(0x0e1b, 0x0e1d, 0x0e1f); - // do chada, to patak - $lowtail = array(0x0e0e, 0x0e0f); - // mai hun arkad, sara i, sara ii, sara ue, sara uee - $upvowel = array(0x0e31, 0x0e34, 0x0e35, 0x0e36, 0x0e37); - // mai ek, mai tho, mai tri, mai chattawa, karan - $tonemark = array(0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c); - // sara u, sara uu, pinthu - $lowvowel = array(0x0e38, 0x0e39, 0x0e3a); - $output = array(); - for ($i = 0; $i < $numchars; $i++) { - if (($unicode[$i] >= 0x0e00) && ($unicode[$i] <= 0x0e5b)) { - $ch0 = $unicode[$i]; - $ch1 = ($i > 0) ? $unicode[($i - 1)] : 0; - $ch2 = ($i > 1) ? $unicode[($i - 2)] : 0; - $chn = ($i < ($numchars - 1)) ? $unicode[($i + 1)] : 0; - if (in_array($ch0, $tonemark)) { - if ($chn == 0x0e33) { - // sara um - if (in_array($ch1, $longtail)) { - // tonemark at upper left - $output[] = $this->replaceChar($ch0, (0xf713 + $ch0 - 0x0e48)); - } else { - // tonemark at upper right (normal position) - $output[] = $ch0; - } - } elseif (in_array($ch1, $longtail) OR (in_array($ch2, $longtail) AND in_array($ch1, $lowvowel))) { - // tonemark at lower left - $output[] = $this->replaceChar($ch0, (0xf705 + $ch0 - 0x0e48)); - } elseif (in_array($ch1, $upvowel)) { - if (in_array($ch2, $longtail)) { - // tonemark at upper left - $output[] = $this->replaceChar($ch0, (0xf713 + $ch0 - 0x0e48)); - } else { - // tonemark at upper right (normal position) - $output[] = $ch0; - } - } else { - // tonemark at lower right - $output[] = $this->replaceChar($ch0, (0xf70a + $ch0 - 0x0e48)); - } - } elseif (($ch0 == 0x0e33) AND (in_array($ch1, $longtail) OR (in_array($ch2, $longtail) AND in_array($ch1, $tonemark)))) { - // add lower left nikhahit and sara aa - if ($this->isCharDefined(0xf711) AND $this->isCharDefined(0x0e32)) { - $output[] = 0xf711; - $this->CurrentFont['subsetchars'][0xf711] = true; - $output[] = 0x0e32; - $this->CurrentFont['subsetchars'][0x0e32] = true; - } else { - $output[] = $ch0; - } - } elseif (in_array($ch1, $longtail)) { - if ($ch0 == 0x0e31) { - // lower left mai hun arkad - $output[] = $this->replaceChar($ch0, 0xf710); - } elseif (in_array($ch0, $upvowel)) { - // lower left - $output[] = $this->replaceChar($ch0, (0xf701 + $ch0 - 0x0e34)); - } elseif ($ch0 == 0x0e47) { - // lower left mai tai koo - $output[] = $this->replaceChar($ch0, 0xf712); - } else { - // normal character - $output[] = $ch0; - } - } elseif (in_array($ch1, $lowtail) AND in_array($ch0, $lowvowel)) { - // lower vowel - $output[] = $this->replaceChar($ch0, (0xf718 + $ch0 - 0x0e38)); - } elseif (($ch0 == 0x0e0d) AND in_array($chn, $lowvowel)) { - // yo ying without lower part - $output[] = $this->replaceChar($ch0, 0xf70f); - } elseif (($ch0 == 0x0e10) AND in_array($chn, $lowvowel)) { - // tho santan without lower part - $output[] = $this->replaceChar($ch0, 0xf700); - } else { - $output[] = $ch0; - } - } else { - // non-thai character - $output[] = $unicode[$i]; - } - } - $unicode = $output; - // update font subsetchars - $this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']); - } // end of K_THAI_TOPCHARS - $txt2 = TCPDF_FONTS::arrUTF8ToUTF16BE($unicode, false); - } - } - $txt2 = TCPDF_STATIC::_escape($txt2); - // get current text width (considering general font stretching and spacing) - $txwidth = $this->GetStringWidth($txt); - $width = $txwidth; - // check for stretch mode - if ($stretch > 0) { - // calculate ratio between cell width and text width - if ($width <= 0) { - $ratio = 1; - } else { - $ratio = (($w - $this->cell_padding['L'] - $this->cell_padding['R']) / $width); - } - // check if stretching is required - if (($ratio < 1) OR (($ratio > 1) AND (($stretch % 2) == 0))) { - // the text will be stretched to fit cell width - if ($stretch > 2) { - // set new character spacing - $this->font_spacing += ($w - $this->cell_padding['L'] - $this->cell_padding['R'] - $width) / (max(($this->GetNumChars($txt) - 1), 1) * ($this->font_stretching / 100)); - } else { - // set new horizontal stretching - $this->font_stretching *= $ratio; - } - // recalculate text width (the text fills the entire cell) - $width = $w - $this->cell_padding['L'] - $this->cell_padding['R']; - // reset alignment - $align = ''; - } - } - if ($this->font_stretching != 100) { - // apply font stretching - $rs .= sprintf('BT %F Tz ET ', $this->font_stretching); - } - if ($this->font_spacing != 0) { - // increase/decrease font spacing - $rs .= sprintf('BT %F Tc ET ', ($this->font_spacing * $this->k)); - } - if ($this->ColorFlag AND ($this->textrendermode < 4)) { - $s .= 'q '.$this->TextColor.' '; - } - // rendering mode - $s .= sprintf('BT %d Tr %F w ET ', $this->textrendermode, ($this->textstrokewidth * $this->k)); - // count number of spaces - $ns = substr_count($txt, chr(32)); - // Justification - $spacewidth = 0; - if (($align == 'J') AND ($ns > 0)) { - if ($this->isUnicodeFont()) { - // get string width without spaces - $width = $this->GetStringWidth(str_replace(' ', '', $txt)); - // calculate average space width - $spacewidth = -1000 * ($w - $width - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1) / ($this->FontSize?$this->FontSize:1); - if ($this->font_stretching != 100) { - // word spacing is affected by stretching - $spacewidth /= ($this->font_stretching / 100); - } - // set word position to be used with TJ operator - $txt2 = str_replace(chr(0).chr(32), ') '.sprintf('%F', $spacewidth).' (', $txt2); - $unicode_justification = true; - } else { - // get string width - $width = $txwidth; - // new space width - $spacewidth = (($w - $width - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1)) * $this->k; - if ($this->font_stretching != 100) { - // word spacing (Tw) is affected by stretching - $spacewidth /= ($this->font_stretching / 100); - } - // set word spacing - $rs .= sprintf('BT %F Tw ET ', $spacewidth); - } - $width = $w - $this->cell_padding['L'] - $this->cell_padding['R']; - } - // replace carriage return characters - $txt2 = str_replace("\r", ' ', $txt2); - switch ($align) { - case 'C': { - $dx = ($w - $width) / 2; - break; - } - case 'R': { - if ($this->rtl) { - $dx = $this->cell_padding['R']; - } else { - $dx = $w - $width - $this->cell_padding['R']; - } - break; - } - case 'L': { - if ($this->rtl) { - $dx = $w - $width - $this->cell_padding['L']; - } else { - $dx = $this->cell_padding['L']; - } - break; - } - case 'J': - default: { - if ($this->rtl) { - $dx = $this->cell_padding['R']; - } else { - $dx = $this->cell_padding['L']; - } - break; - } - } - if ($this->rtl) { - $xdx = $x - $dx - $width; - } else { - $xdx = $x + $dx; - } - $xdk = $xdx * $k; - // print text - $s .= sprintf('BT %F %F Td [(%s)] TJ ET', $xdk, (($this->h - $basefonty) * $k), $txt2); - if (isset($uniblock)) { - // print overlapping characters as separate string - $xshift = 0; // horizontal shift - $ty = (($this->h - $basefonty + (0.2 * $this->FontSize)) * $k); - $spw = (($w - $txwidth - $this->cell_padding['L'] - $this->cell_padding['R']) / ($ns?$ns:1)); - foreach ($uniblock as $uk => $uniarr) { - if (($uk % 2) == 0) { - // x space to skip - if ($spacewidth != 0) { - // justification shift - $xshift += (count(array_keys($uniarr, 32)) * $spw); - } - $xshift += $this->GetArrStringWidth($uniarr); // + shift justification - } else { - // character to print - $topchr = TCPDF_FONTS::arrUTF8ToUTF16BE($uniarr, false); - $topchr = TCPDF_STATIC::_escape($topchr); - $s .= sprintf(' BT %F %F Td [(%s)] TJ ET', ($xdk + ($xshift * $k)), $ty, $topchr); - } - } - } - if ($this->underline) { - $s .= ' '.$this->_dounderlinew($xdx, $basefonty, $width); - } - if ($this->linethrough) { - $s .= ' '.$this->_dolinethroughw($xdx, $basefonty, $width); - } - if ($this->overline) { - $s .= ' '.$this->_dooverlinew($xdx, $basefonty, $width); - } - if ($this->ColorFlag AND ($this->textrendermode < 4)) { - $s .= ' Q'; - } - if ($link) { - $this->Link($xdx, $yt, $width, ($this->FontAscent + $this->FontDescent), $link, $ns); - } - } - // output cell - if ($s) { - // output cell - $rs .= $s; - if ($this->font_spacing != 0) { - // reset font spacing mode - $rs .= ' BT 0 Tc ET'; - } - if ($this->font_stretching != 100) { - // reset font stretching mode - $rs .= ' BT 100 Tz ET'; - } - } - // reset word spacing - if (!$this->isUnicodeFont() AND ($align == 'J')) { - $rs .= ' BT 0 Tw ET'; - } - // reset stretching and spacing - $this->font_stretching = $prev_font_stretching; - $this->font_spacing = $prev_font_spacing; - $this->lasth = $h; - if ($ln > 0) { - //Go to the beginning of the next line - $this->y = $y + $h + $this->cell_margin['B']; - if ($ln == 1) { - if ($this->rtl) { - $this->x = $this->w - $this->rMargin; - } else { - $this->x = $this->lMargin; - } - } - } else { - // go left or right by case - if ($this->rtl) { - $this->x = $x - $w - $this->cell_margin['L']; - } else { - $this->x = $x + $w + $this->cell_margin['R']; - } - } - $gstyles = ''.$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '.$this->FillColor."\n"; - $rs = $gstyles.$rs; - $this->cell_padding = $prev_cell_padding; - $this->cell_margin = $prev_cell_margin; - return $rs; - } - - /** - * Replace a char if is defined on the current font. - * @param int $oldchar Integer code (unicode) of the character to replace. - * @param int $newchar Integer code (unicode) of the new character. - * @return int the replaced char or the old char in case the new char i not defined - * @protected - * @since 5.9.167 (2012-06-22) - */ - protected function replaceChar($oldchar, $newchar) { - if ($this->isCharDefined($newchar)) { - // add the new char on the subset list - $this->CurrentFont['subsetchars'][$newchar] = true; - // return the new character - return $newchar; - } - // return the old char - return $oldchar; - } - - /** - * Returns the code to draw the cell border - * @param float $x X coordinate. - * @param float $y Y coordinate. - * @param float $w Cell width. - * @param float $h Cell height. - * @param string|array|int $brd Indicates if borders must be drawn around the cell. The value can be a number:
            • 0: no border (default)
            • 1: frame
            or a string containing some or all of the following characters (in any order):
            • L: left
            • T: top
            • R: right
            • B: bottom
            or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @return string containing cell border code - * @protected - * @see SetLineStyle() - * @since 5.7.000 (2010-08-02) - */ - protected function getCellBorder($x, $y, $w, $h, $brd) { - $s = ''; // string to be returned - if (empty($brd)) { - return $s; - } - if ($brd == 1) { - $brd = array('LRTB' => true); - } - // calculate coordinates for border - $k = $this->k; - if ($this->rtl) { - $xeL = ($x - $w) * $k; - $xeR = $x * $k; - } else { - $xeL = $x * $k; - $xeR = ($x + $w) * $k; - } - $yeL = (($this->h - ($y + $h)) * $k); - $yeT = (($this->h - $y) * $k); - $xeT = $xeL; - $xeB = $xeR; - $yeR = $yeT; - $yeB = $yeL; - if (is_string($brd)) { - // convert string to array - $slen = strlen($brd); - $newbrd = array(); - for ($i = 0; $i < $slen; ++$i) { - $newbrd[$brd[$i]] = array('cap' => 'square', 'join' => 'miter'); - } - $brd = $newbrd; - } - if (isset($brd['mode'])) { - $mode = $brd['mode']; - unset($brd['mode']); - } else { - $mode = 'normal'; - } - foreach ($brd as $border => $style) { - if (is_array($style) AND !empty($style)) { - // apply border style - $prev_style = $this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor.' '; - $s .= $this->setLineStyle($style, true)."\n"; - } - switch ($mode) { - case 'ext': { - $off = (($this->LineWidth / 2) * $k); - $xL = $xeL - $off; - $xR = $xeR + $off; - $yT = $yeT + $off; - $yL = $yeL - $off; - $xT = $xL; - $xB = $xR; - $yR = $yT; - $yB = $yL; - $w += $this->LineWidth; - $h += $this->LineWidth; - break; - } - case 'int': { - $off = ($this->LineWidth / 2) * $k; - $xL = $xeL + $off; - $xR = $xeR - $off; - $yT = $yeT - $off; - $yL = $yeL + $off; - $xT = $xL; - $xB = $xR; - $yR = $yT; - $yB = $yL; - $w -= $this->LineWidth; - $h -= $this->LineWidth; - break; - } - case 'normal': - default: { - $xL = $xeL; - $xT = $xeT; - $xB = $xeB; - $xR = $xeR; - $yL = $yeL; - $yT = $yeT; - $yB = $yeB; - $yR = $yeR; - break; - } - } - // draw borders by case - if (strlen($border) == 4) { - $s .= sprintf('%F %F %F %F re S ', $xT, $yT, ($w * $k), (-$h * $k)); - } elseif (strlen($border) == 3) { - if (strpos($border,'B') === false) { // LTR - $s .= sprintf('%F %F m ', $xL, $yL); - $s .= sprintf('%F %F l ', $xT, $yT); - $s .= sprintf('%F %F l ', $xR, $yR); - $s .= sprintf('%F %F l ', $xB, $yB); - $s .= 'S '; - } elseif (strpos($border,'L') === false) { // TRB - $s .= sprintf('%F %F m ', $xT, $yT); - $s .= sprintf('%F %F l ', $xR, $yR); - $s .= sprintf('%F %F l ', $xB, $yB); - $s .= sprintf('%F %F l ', $xL, $yL); - $s .= 'S '; - } elseif (strpos($border,'T') === false) { // RBL - $s .= sprintf('%F %F m ', $xR, $yR); - $s .= sprintf('%F %F l ', $xB, $yB); - $s .= sprintf('%F %F l ', $xL, $yL); - $s .= sprintf('%F %F l ', $xT, $yT); - $s .= 'S '; - } elseif (strpos($border,'R') === false) { // BLT - $s .= sprintf('%F %F m ', $xB, $yB); - $s .= sprintf('%F %F l ', $xL, $yL); - $s .= sprintf('%F %F l ', $xT, $yT); - $s .= sprintf('%F %F l ', $xR, $yR); - $s .= 'S '; - } - } elseif (strlen($border) == 2) { - if ((strpos($border,'L') !== false) AND (strpos($border,'T') !== false)) { // LT - $s .= sprintf('%F %F m ', $xL, $yL); - $s .= sprintf('%F %F l ', $xT, $yT); - $s .= sprintf('%F %F l ', $xR, $yR); - $s .= 'S '; - } elseif ((strpos($border,'T') !== false) AND (strpos($border,'R') !== false)) { // TR - $s .= sprintf('%F %F m ', $xT, $yT); - $s .= sprintf('%F %F l ', $xR, $yR); - $s .= sprintf('%F %F l ', $xB, $yB); - $s .= 'S '; - } elseif ((strpos($border,'R') !== false) AND (strpos($border,'B') !== false)) { // RB - $s .= sprintf('%F %F m ', $xR, $yR); - $s .= sprintf('%F %F l ', $xB, $yB); - $s .= sprintf('%F %F l ', $xL, $yL); - $s .= 'S '; - } elseif ((strpos($border,'B') !== false) AND (strpos($border,'L') !== false)) { // BL - $s .= sprintf('%F %F m ', $xB, $yB); - $s .= sprintf('%F %F l ', $xL, $yL); - $s .= sprintf('%F %F l ', $xT, $yT); - $s .= 'S '; - } elseif ((strpos($border,'L') !== false) AND (strpos($border,'R') !== false)) { // LR - $s .= sprintf('%F %F m ', $xL, $yL); - $s .= sprintf('%F %F l ', $xT, $yT); - $s .= 'S '; - $s .= sprintf('%F %F m ', $xR, $yR); - $s .= sprintf('%F %F l ', $xB, $yB); - $s .= 'S '; - } elseif ((strpos($border,'T') !== false) AND (strpos($border,'B') !== false)) { // TB - $s .= sprintf('%F %F m ', $xT, $yT); - $s .= sprintf('%F %F l ', $xR, $yR); - $s .= 'S '; - $s .= sprintf('%F %F m ', $xB, $yB); - $s .= sprintf('%F %F l ', $xL, $yL); - $s .= 'S '; - } - } else { // strlen($border) == 1 - if (strpos($border,'L') !== false) { // L - $s .= sprintf('%F %F m ', $xL, $yL); - $s .= sprintf('%F %F l ', $xT, $yT); - $s .= 'S '; - } elseif (strpos($border,'T') !== false) { // T - $s .= sprintf('%F %F m ', $xT, $yT); - $s .= sprintf('%F %F l ', $xR, $yR); - $s .= 'S '; - } elseif (strpos($border,'R') !== false) { // R - $s .= sprintf('%F %F m ', $xR, $yR); - $s .= sprintf('%F %F l ', $xB, $yB); - $s .= 'S '; - } elseif (strpos($border,'B') !== false) { // B - $s .= sprintf('%F %F m ', $xB, $yB); - $s .= sprintf('%F %F l ', $xL, $yL); - $s .= 'S '; - } - } - if (is_array($style) AND !empty($style)) { - // reset border style to previous value - $s .= "\n".$this->linestyleWidth.' '.$this->linestyleCap.' '.$this->linestyleJoin.' '.$this->linestyleDash.' '.$this->DrawColor."\n"; - } - } - return $s; - } - - /** - * This method allows printing text with line breaks. - * They can be automatic (as soon as the text reaches the right border of the cell) or explicit (via the \n character). As many cells as necessary are output, one below the other.
            - * Text can be aligned, centered or justified. The cell block can be framed and the background painted. - * @param float $w Width of cells. If 0, they extend up to the right margin of the page. - * @param float $h Cell minimum height. The cell extends automatically if needed. - * @param string $txt String to print - * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
            • 0: no border (default)
            • 1: frame
            or a string containing some or all of the following characters (in any order):
            • L: left
            • T: top
            • R: right
            • B: bottom
            or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @param string $align Allows to center or align the text. Possible values are:
            • L or empty string: left align
            • C: center
            • R: right align
            • J: justification (default value when $ishtml=false)
            - * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). - * @param int $ln Indicates where the current position should go after the call. Possible values are:
            • 0: to the right
            • 1: to the beginning of the next line [DEFAULT]
            • 2: below
            - * @param float|null $x x position in user units - * @param float|null $y y position in user units - * @param boolean $reseth if true reset the last cell height (default true). - * @param int $stretch font stretch mode:
            • 0 = disabled
            • 1 = horizontal scaling only if text is larger than cell width
            • 2 = forced horizontal scaling to fit cell width
            • 3 = character spacing only if text is larger than cell width
            • 4 = forced character spacing to fit cell width
            General font stretching and scaling values will be preserved when possible. - * @param boolean $ishtml INTERNAL USE ONLY -- set to true if $txt is HTML content (default = false). Never set this parameter to true, use instead writeHTMLCell() or writeHTML() methods. - * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width. - * @param float $maxh maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. This feature works only when $ishtml=false. - * @param string $valign Vertical alignment of text (requires $maxh = $h > 0). Possible values are:
            • T: TOP
            • M: middle
            • B: bottom
            . This feature works only when $ishtml=false and the cell must fit in a single page. - * @param boolean $fitcell if true attempt to fit all the text within the cell by reducing the font size (do not work in HTML mode). $maxh must be greater than 0 and equal to $h. - * @return int Return the number of cells or 1 for html mode. - * @public - * @since 1.3 - * @see SetFont(), SetDrawColor(), SetFillColor(), SetTextColor(), SetLineWidth(), Cell(), Write(), SetAutoPageBreak() - */ - public function MultiCell($w, $h, $txt, $border=0, $align='J', $fill=false, $ln=1, $x=null, $y=null, $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0, $valign='T', $fitcell=false) { - $prev_cell_margin = $this->cell_margin; - $prev_cell_padding = $this->cell_padding; - // adjust internal padding - $this->adjustCellPadding($border); - $mc_padding = $this->cell_padding; - $mc_margin = $this->cell_margin; - $this->cell_padding['T'] = 0; - $this->cell_padding['B'] = 0; - $this->setCellMargins(0, 0, 0, 0); - if (TCPDF_STATIC::empty_string($this->lasth) OR $reseth) { - // reset row height - $this->resetLastH(); - } - if (!TCPDF_STATIC::empty_string($y)) { - $this->setY($y); // set y in order to convert negative y values to positive ones - } - $y = $this->GetY(); - $resth = 0; - if (($h > 0) AND $this->inPageBody() AND (($y + $h + $mc_margin['T'] + $mc_margin['B']) > $this->PageBreakTrigger)) { - // spit cell in more pages/columns - $newh = ($this->PageBreakTrigger - $y); - $resth = ($h - $newh); // cell to be printed on the next page/column - $h = $newh; - } - // get current page number - $startpage = $this->page; - // get current column - $startcolumn = $this->current_column; - if (!TCPDF_STATIC::empty_string($x)) { - $this->setX($x); - } else { - $x = $this->GetX(); - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions(0, $x, $y); - // apply margins - $oy = $y + $mc_margin['T']; - if ($this->rtl) { - $ox = ($this->w - $x - $mc_margin['R']); - } else { - $ox = ($x + $mc_margin['L']); - } - $this->x = $ox; - $this->y = $oy; - // set width - if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { - if ($this->rtl) { - $w = ($this->x - $this->lMargin - $mc_margin['L']); - } else { - $w = ($this->w - $this->x - $this->rMargin - $mc_margin['R']); - } - } - // store original margin values - $lMargin = $this->lMargin; - $rMargin = $this->rMargin; - if ($this->rtl) { - $this->rMargin = ($this->w - $this->x); - $this->lMargin = ($this->x - $w); - } else { - $this->lMargin = ($this->x); - $this->rMargin = ($this->w - $this->x - $w); - } - $this->clMargin = $this->lMargin; - $this->crMargin = $this->rMargin; - if ($autopadding) { - // add top padding - $this->y += $mc_padding['T']; - } - if ($ishtml) { // ******* Write HTML text - $this->writeHTML($txt, true, false, $reseth, true, $align); - $nl = 1; - } else { // ******* Write simple text - $prev_FontSizePt = $this->FontSizePt; - if ($fitcell) { - // ajust height values - $tobottom = ($this->h - $this->y - $this->bMargin - $this->cell_padding['T'] - $this->cell_padding['B']); - $h = $maxh = max(min($h, $tobottom), min($maxh, $tobottom)); - } - // vertical alignment - if ($maxh > 0) { - // get text height - $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border); - if ($fitcell AND ($text_height > $maxh) AND ($this->FontSizePt > 1)) { - // try to reduce font size to fit text on cell (use a quick search algorithm) - $fmin = 1; - $fmax = $this->FontSizePt; - $diff_epsilon = (1 / $this->k); // one point (min resolution) - $maxit = (2 * min(100, max(10, intval($fmax)))); // max number of iterations - while ($maxit >= 0) { - $fmid = (($fmax + $fmin) / 2); - $this->setFontSize($fmid, false); - $this->resetLastH(); - $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border); - $diff = ($maxh - $text_height); - if ($diff >= 0) { - if ($diff <= $diff_epsilon) { - break; - } - $fmin = $fmid; - } else { - $fmax = $fmid; - } - --$maxit; - } - if ($maxit < 0) { - // premature exit, we get the minimum font value to fit the cell - $this->setFontSize($fmin); - $this->resetLastH(); - $text_height = $this->getStringHeight($w, $txt, $reseth, $autopadding, $mc_padding, $border); - } else { - $this->setFontSize($fmid); - $this->resetLastH(); - } - } - if ($text_height < $maxh) { - if ($valign == 'M') { - // text vertically centered - $this->y += (($maxh - $text_height) / 2); - } elseif ($valign == 'B') { - // text vertically aligned on bottom - $this->y += ($maxh - $text_height); - } - } - } - $nl = $this->Write($this->lasth, $txt, '', 0, $align, true, $stretch, false, true, $maxh, 0, $mc_margin); - if ($fitcell) { - // restore font size - $this->setFontSize($prev_FontSizePt); - } - } - if ($autopadding) { - // add bottom padding - $this->y += $mc_padding['B']; - } - // Get end-of-text Y position - $currentY = $this->y; - // get latest page number - $endpage = $this->page; - if ($resth > 0) { - $skip = ($endpage - $startpage); - $tmpresth = $resth; - while ($tmpresth > 0) { - if ($skip <= 0) { - // add a page (or trig AcceptPageBreak() for multicolumn mode) - $this->checkPageBreak($this->PageBreakTrigger + 1); - } - if ($this->num_columns > 1) { - $tmpresth -= ($this->h - $this->y - $this->bMargin); - } else { - $tmpresth -= ($this->h - $this->tMargin - $this->bMargin); - } - --$skip; - } - $currentY = $this->y; - $endpage = $this->page; - } - // get latest column - $endcolumn = $this->current_column; - if ($this->num_columns == 0) { - $this->num_columns = 1; - } - // disable page regions check - $check_page_regions = $this->check_page_regions; - $this->check_page_regions = false; - // get border modes - $border_start = TCPDF_STATIC::getBorderMode($border, $position='start', $this->opencell); - $border_end = TCPDF_STATIC::getBorderMode($border, $position='end', $this->opencell); - $border_middle = TCPDF_STATIC::getBorderMode($border, $position='middle', $this->opencell); - // design borders around HTML cells. - for ($page = $startpage; $page <= $endpage; ++$page) { // for each page - $ccode = ''; - $this->setPage($page); - if ($this->num_columns < 2) { - // single-column mode - $this->setX($x); - $this->y = $this->tMargin; - } - // account for margin changes - if ($page > $startpage) { - if (($this->rtl) AND ($this->pagedim[$page]['orm'] != $this->pagedim[$startpage]['orm'])) { - $this->x -= ($this->pagedim[$page]['orm'] - $this->pagedim[$startpage]['orm']); - } elseif ((!$this->rtl) AND ($this->pagedim[$page]['olm'] != $this->pagedim[$startpage]['olm'])) { - $this->x += ($this->pagedim[$page]['olm'] - $this->pagedim[$startpage]['olm']); - } - } - if ($startpage == $endpage) { - // single page - for ($column = $startcolumn; $column <= $endcolumn; ++$column) { // for each column - if ($column != $this->current_column) { - $this->selectColumn($column); - } - if ($this->rtl) { - $this->x -= $mc_margin['R']; - } else { - $this->x += $mc_margin['L']; - } - if ($startcolumn == $endcolumn) { // single column - $cborder = $border; - $h = max($h, ($currentY - $oy)); - $this->y = $oy; - } elseif ($column == $startcolumn) { // first column - $cborder = $border_start; - $this->y = $oy; - $h = $this->h - $this->y - $this->bMargin; - } elseif ($column == $endcolumn) { // end column - $cborder = $border_end; - $h = $currentY - $this->y; - if ($resth > $h) { - $h = $resth; - } - } else { // middle column - $cborder = $border_middle; - $h = $this->h - $this->y - $this->bMargin; - $resth -= $h; - } - $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; - } // end for each column - } elseif ($page == $startpage) { // first page - for ($column = $startcolumn; $column < $this->num_columns; ++$column) { // for each column - if ($column != $this->current_column) { - $this->selectColumn($column); - } - if ($this->rtl) { - $this->x -= $mc_margin['R']; - } else { - $this->x += $mc_margin['L']; - } - if ($column == $startcolumn) { // first column - $cborder = $border_start; - $this->y = $oy; - $h = $this->h - $this->y - $this->bMargin; - } else { // middle column - $cborder = $border_middle; - $h = $this->h - $this->y - $this->bMargin; - $resth -= $h; - } - $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; - } // end for each column - } elseif ($page == $endpage) { // last page - for ($column = 0; $column <= $endcolumn; ++$column) { // for each column - if ($column != $this->current_column) { - $this->selectColumn($column); - } - if ($this->rtl) { - $this->x -= $mc_margin['R']; - } else { - $this->x += $mc_margin['L']; - } - if ($column == $endcolumn) { - // end column - $cborder = $border_end; - $h = $currentY - $this->y; - if ($resth > $h) { - $h = $resth; - } - } else { - // middle column - $cborder = $border_middle; - $h = $this->h - $this->y - $this->bMargin; - $resth -= $h; - } - $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; - } // end for each column - } else { // middle page - for ($column = 0; $column < $this->num_columns; ++$column) { // for each column - $this->selectColumn($column); - if ($this->rtl) { - $this->x -= $mc_margin['R']; - } else { - $this->x += $mc_margin['L']; - } - $cborder = $border_middle; - $h = $this->h - $this->y - $this->bMargin; - $resth -= $h; - $ccode .= $this->getCellCode($w, $h, '', $cborder, 1, '', $fill, '', 0, true)."\n"; - } // end for each column - } - if ($cborder OR $fill) { - $offsetlen = strlen($ccode); - // draw border and fill - if ($this->inxobj) { - // we are inside an XObject template - if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) { - $pagemarkkey = key($this->xobjects[$this->xobjid]['transfmrk']); - $pagemark = $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey]; - $this->xobjects[$this->xobjid]['transfmrk'][$pagemarkkey] += $offsetlen; - } else { - $pagemark = $this->xobjects[$this->xobjid]['intmrk']; - $this->xobjects[$this->xobjid]['intmrk'] += $offsetlen; - } - $pagebuff = $this->xobjects[$this->xobjid]['outdata']; - $pstart = substr($pagebuff, 0, $pagemark); - $pend = substr($pagebuff, $pagemark); - $this->xobjects[$this->xobjid]['outdata'] = $pstart.$ccode.$pend; - } else { - if (end($this->transfmrk[$this->page]) !== false) { - $pagemarkkey = key($this->transfmrk[$this->page]); - $pagemark = $this->transfmrk[$this->page][$pagemarkkey]; - $this->transfmrk[$this->page][$pagemarkkey] += $offsetlen; - } elseif ($this->InFooter) { - $pagemark = $this->footerpos[$this->page]; - $this->footerpos[$this->page] += $offsetlen; - } else { - $pagemark = $this->intmrk[$this->page]; - $this->intmrk[$this->page] += $offsetlen; - } - $pagebuff = $this->getPageBuffer($this->page); - $pstart = substr($pagebuff, 0, $pagemark); - $pend = substr($pagebuff, $pagemark); - $this->setPageBuffer($this->page, $pstart.$ccode.$pend); - } - } - } // end for each page - // restore page regions check - $this->check_page_regions = $check_page_regions; - // Get end-of-cell Y position - $currentY = $this->GetY(); - // restore previous values - if ($this->num_columns > 1) { - $this->selectColumn(); - } else { - // restore original margins - $this->lMargin = $lMargin; - $this->rMargin = $rMargin; - if ($this->page > $startpage) { - // check for margin variations between pages (i.e. booklet mode) - $dl = ($this->pagedim[$this->page]['olm'] - $this->pagedim[$startpage]['olm']); - $dr = ($this->pagedim[$this->page]['orm'] - $this->pagedim[$startpage]['orm']); - if (($dl != 0) OR ($dr != 0)) { - $this->lMargin += $dl; - $this->rMargin += $dr; - } - } - } - if ($ln > 0) { - //Go to the beginning of the next line - $this->setY($currentY + $mc_margin['B']); - if ($ln == 2) { - $this->setX($x + $w + $mc_margin['L'] + $mc_margin['R']); - } - } else { - // go left or right by case - $this->setPage($startpage); - $this->y = $y; - $this->setX($x + $w + $mc_margin['L'] + $mc_margin['R']); - } - $this->setContentMark(); - $this->cell_padding = $prev_cell_padding; - $this->cell_margin = $prev_cell_margin; - $this->clMargin = $this->lMargin; - $this->crMargin = $this->rMargin; - return $nl; - } - - /** - * This method return the estimated number of lines for print a simple text string using Multicell() method. - * @param string $txt String for calculating his height - * @param float $w Width of cells. If 0, they extend up to the right margin of the page. - * @param boolean $reseth if true reset the last cell height (default false). - * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width (default true). - * @param array|null $cellpadding Internal cell padding, if empty uses default cell padding. - * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
            • 0: no border (default)
            • 1: frame
            or a string containing some or all of the following characters (in any order):
            • L: left
            • T: top
            • R: right
            • B: bottom
            or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @return float Return the minimal height needed for multicell method for printing the $txt param. - * @author Alexander Escalona Fern\E1ndez, Nicola Asuni - * @public - * @since 4.5.011 - */ - public function getNumLines($txt, $w=0, $reseth=false, $autopadding=true, $cellpadding=null, $border=0) { - if ($txt === NULL) { - return 0; - } - if ($txt === '') { - // empty string - return 1; - } - // adjust internal padding - $prev_cell_padding = $this->cell_padding; - $prev_lasth = $this->lasth; - if (is_array($cellpadding)) { - $this->cell_padding = $cellpadding; - } - $this->adjustCellPadding($border); - if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { - if ($this->rtl) { - $w = $this->x - $this->lMargin; - } else { - $w = $this->w - $this->rMargin - $this->x; - } - } - $wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R']; - if ($reseth) { - // reset row height - $this->resetLastH(); - } - $lines = 1; - $sum = 0; - $chars = TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($txt, $this->isunicode, $this->CurrentFont), $txt, $this->tmprtl, $this->isunicode, $this->CurrentFont); - $charsWidth = $this->GetArrStringWidth($chars, '', '', 0, true); - $length = count($chars); - $lastSeparator = -1; - for ($i = 0; $i < $length; ++$i) { - $c = $chars[$i]; - $charWidth = $charsWidth[$i]; - if (($c != 160) - AND (($c == 173) - OR preg_match($this->re_spaces, TCPDF_FONTS::unichr($c, $this->isunicode)) - OR (($c == 45) - AND ($i > 0) AND ($i < ($length - 1)) - AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i - 1)], $this->isunicode)) - AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i + 1)], $this->isunicode)) - ) - ) - ) { - $lastSeparator = $i; - } - if ((($sum + $charWidth) > $wmax) OR ($c == 10)) { - ++$lines; - if ($c == 10) { - $lastSeparator = -1; - $sum = 0; - } elseif ($lastSeparator != -1) { - $i = $lastSeparator; - $lastSeparator = -1; - $sum = 0; - } else { - $sum = $charWidth; - } - } else { - $sum += $charWidth; - } - } - if ($chars[($length - 1)] == 10) { - --$lines; - } - $this->cell_padding = $prev_cell_padding; - $this->lasth = $prev_lasth; - return $lines; - } - - /** - * This method return the estimated height needed for printing a simple text string using the Multicell() method. - * Generally, if you want to know the exact height for a block of content you can use the following alternative technique: - * @pre - * // store current object - * $pdf->startTransaction(); - * // store starting values - * $start_y = $pdf->GetY(); - * $start_page = $pdf->getPage(); - * // call your printing functions with your parameters - * // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * $pdf->MultiCell($w=0, $h=0, $txt, $border=1, $align='L', $fill=false, $ln=1, $x=null, $y=null, $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0); - * // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * // get the new Y - * $end_y = $pdf->GetY(); - * $end_page = $pdf->getPage(); - * // calculate height - * $height = 0; - * if ($end_page == $start_page) { - * $height = $end_y - $start_y; - * } else { - * for ($page=$start_page; $page <= $end_page; ++$page) { - * $this->setPage($page); - * if ($page == $start_page) { - * // first page - * $height += $this->h - $start_y - $this->bMargin; - * } elseif ($page == $end_page) { - * // last page - * $height += $end_y - $this->tMargin; - * } else { - * $height += $this->h - $this->tMargin - $this->bMargin; - * } - * } - * } - * // restore previous object - * $pdf = $pdf->rollbackTransaction(); - * - * @param float $w Width of cells. If 0, they extend up to the right margin of the page. - * @param string $txt String for calculating his height - * @param boolean $reseth if true reset the last cell height (default false). - * @param boolean $autopadding if true, uses internal padding and automatically adjust it to account for line width (default true). - * @param array|null $cellpadding Internal cell padding, if empty uses default cell padding. - * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
            • 0: no border (default)
            • 1: frame
            or a string containing some or all of the following characters (in any order):
            • L: left
            • T: top
            • R: right
            • B: bottom
            or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @return float Return the minimal height needed for multicell method for printing the $txt param. - * @author Nicola Asuni, Alexander Escalona Fern\E1ndez - * @public - */ - public function getStringHeight($w, $txt, $reseth=false, $autopadding=true, $cellpadding=null, $border=0) { - // adjust internal padding - $prev_cell_padding = $this->cell_padding; - $prev_lasth = $this->lasth; - if (is_array($cellpadding)) { - $this->cell_padding = $cellpadding; - } - $this->adjustCellPadding($border); - $lines = $this->getNumLines($txt, $w, $reseth, $autopadding, $cellpadding, $border); - $height = $this->getCellHeight(($lines * $this->FontSize), $autopadding); - $this->cell_padding = $prev_cell_padding; - $this->lasth = $prev_lasth; - return $height; - } - - /** - * This method prints text from the current position.
            - * @param float $h Line height - * @param string $txt String to print - * @param mixed $link URL or identifier returned by AddLink() - * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). - * @param string $align Allows to center or align the text. Possible values are:
            • L or empty string: left align (default value)
            • C: center
            • R: right align
            • J: justify
            - * @param boolean $ln if true set cursor at the bottom of the line, otherwise set cursor at the top of the line. - * @param int $stretch font stretch mode:
            • 0 = disabled
            • 1 = horizontal scaling only if text is larger than cell width
            • 2 = forced horizontal scaling to fit cell width
            • 3 = character spacing only if text is larger than cell width
            • 4 = forced character spacing to fit cell width
            General font stretching and scaling values will be preserved when possible. - * @param boolean $firstline if true prints only the first line and return the remaining string. - * @param boolean $firstblock if true the string is the starting of a line. - * @param float $maxh maximum height. It should be >= $h and less then remaining space to the bottom of the page, or 0 for disable this feature. - * @param float $wadj first line width will be reduced by this amount (used in HTML mode). - * @param array|null $margin margin array of the parent container - * @return mixed Return the number of cells or the remaining string if $firstline = true. - * @public - * @since 1.5 - */ - public function Write($h, $txt, $link='', $fill=false, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0, $wadj=0, $margin=null) { - // check page for no-write regions and adapt page margins if necessary - list($this->x, $this->y) = $this->checkPageRegions($h, $this->x, $this->y); - if (strlen($txt) == 0) { - // fix empty text - $txt = ' '; - } - if (!is_array($margin)) { - // set default margins - $margin = $this->cell_margin; - } - // remove carriage returns - $s = str_replace("\r", '', $txt); - // check if string contains arabic text - if (preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_ARABIC, $s)) { - $arabic = true; - } else { - $arabic = false; - } - // check if string contains RTL text - if ($arabic OR ($this->tmprtl == 'R') OR preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_RTL, $s)) { - $rtlmode = true; - } else { - $rtlmode = false; - } - // get a char width - $chrwidth = $this->GetCharWidth(46); // dot character - // get array of unicode values - $chars = TCPDF_FONTS::UTF8StringToArray($s, $this->isunicode, $this->CurrentFont); - // calculate maximum width for a single character on string - $chrw = $this->GetArrStringWidth($chars, '', '', 0, true); - array_walk($chrw, array($this, 'getRawCharWidth')); - $maxchwidth = max($chrw); - // get array of chars - $uchars = TCPDF_FONTS::UTF8ArrayToUniArray($chars, $this->isunicode); - // get the number of characters - $nb = count($chars); - // replacement for SHY character (minus symbol) - $shy_replacement = 45; - $shy_replacement_char = TCPDF_FONTS::unichr($shy_replacement, $this->isunicode); - // widht for SHY replacement - $shy_replacement_width = $this->GetCharWidth($shy_replacement); - // page width - $pw = $w = $this->w - $this->lMargin - $this->rMargin; - // calculate remaining line width ($w) - if ($this->rtl) { - $w = $this->x - $this->lMargin; - } else { - $w = $this->w - $this->rMargin - $this->x; - } - // max column width - $wmax = ($w - $wadj); - if (!$firstline) { - $wmax -= ($this->cell_padding['L'] + $this->cell_padding['R']); - } - if ((!$firstline) AND (($chrwidth > $wmax) OR ($maxchwidth > $wmax))) { - // the maximum width character do not fit on column - return ''; - } - // minimum row height - $row_height = max($h, $this->getCellHeight($this->FontSize)); - // max Y - $maxy = $this->y + $maxh - max($row_height, $h); - $start_page = $this->page; - $i = 0; // character position - $j = 0; // current starting position - $sep = -1; // position of the last blank space - $prevsep = $sep; // previous separator - $shy = false; // true if the last blank is a soft hypen (SHY) - $prevshy = $shy; // previous shy mode - $l = 0; // current string length - $nl = 0; //number of lines - $linebreak = false; - $pc = 0; // previous character - // for each character - while ($i < $nb) { - if (($maxh > 0) AND ($this->y > $maxy) ) { - break; - } - //Get the current character - $c = $chars[$i]; - if ($c == 10) { // 10 = "\n" = new line - //Explicit line break - if ($align == 'J') { - if ($this->rtl) { - $talign = 'R'; - } else { - $talign = 'L'; - } - } else { - $talign = $align; - } - $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $i); - if ($firstline) { - $startx = $this->x; - $tmparr = array_slice($chars, $j, ($i - $j)); - if ($rtlmode) { - $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); - } - $linew = $this->GetArrStringWidth($tmparr); - unset($tmparr); - if ($this->rtl) { - $this->endlinex = $startx - $linew; - } else { - $this->endlinex = $startx + $linew; - } - $w = $linew; - $tmpcellpadding = $this->cell_padding; - if ($maxh == 0) { - $this->setCellPadding(0); - } - } - if ($firstblock AND $this->isRTLTextDir()) { - $tmpstr = $this->stringRightTrim($tmpstr); - } - // Skip newlines at the beginning of a page or column - if (!empty($tmpstr) OR ($this->y < ($this->PageBreakTrigger - $row_height))) { - $this->Cell($w, $h, $tmpstr, 0, 1, $talign, $fill, $link, $stretch); - } - unset($tmpstr); - if ($firstline) { - $this->cell_padding = $tmpcellpadding; - return (TCPDF_FONTS::UniArrSubString($uchars, $i)); - } - ++$nl; - $j = $i + 1; - $l = 0; - $sep = -1; - $prevsep = $sep; - $shy = false; - // account for margin changes - if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND ($this->inPageBody())) { - $this->AcceptPageBreak(); - if ($this->rtl) { - $this->x -= $margin['R']; - } else { - $this->x += $margin['L']; - } - $this->lMargin += $margin['L']; - $this->rMargin += $margin['R']; - } - $w = $this->getRemainingWidth(); - $wmax = ($w - $this->cell_padding['L'] - $this->cell_padding['R']); - } else { - // 160 is the non-breaking space. - // 173 is SHY (Soft Hypen). - // \p{Z} or \p{Separator}: any kind of Unicode whitespace or invisible separator. - // \p{Lo} or \p{Other_Letter}: a Unicode letter or ideograph that does not have lowercase and uppercase variants. - // \p{Lo} is needed because Chinese characters are packed next to each other without spaces in between. - if (($c != 160) - AND (($c == 173) - OR preg_match($this->re_spaces, TCPDF_FONTS::unichr($c, $this->isunicode)) - OR (($c == 45) - AND ($i < ($nb - 1)) - AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($pc, $this->isunicode)) - AND @preg_match('/[\p{L}]/'.$this->re_space['m'], TCPDF_FONTS::unichr($chars[($i + 1)], $this->isunicode)) - ) - ) - ) { - // update last blank space position - $prevsep = $sep; - $sep = $i; - // check if is a SHY - if (($c == 173) OR ($c == 45)) { - $prevshy = $shy; - $shy = true; - if ($pc == 45) { - $tmp_shy_replacement_width = 0; - $tmp_shy_replacement_char = ''; - } else { - $tmp_shy_replacement_width = $shy_replacement_width; - $tmp_shy_replacement_char = $shy_replacement_char; - } - } else { - $shy = false; - } - } - // update string length - if ($this->isUnicodeFont() AND ($arabic)) { - // with bidirectional algorithm some chars may be changed affecting the line length - // *** very slow *** - $l = $this->GetArrStringWidth(TCPDF_FONTS::utf8Bidi(array_slice($chars, $j, ($i - $j)), '', $this->tmprtl, $this->isunicode, $this->CurrentFont)); - } else { - $l += $this->GetCharWidth($c, ($i+1 < $nb)); - } - if (($l > $wmax) OR (($c == 173) AND (($l + $tmp_shy_replacement_width) >= $wmax))) { - if (($c == 173) AND (($l + $tmp_shy_replacement_width) > $wmax)) { - $sep = $prevsep; - $shy = $prevshy; - } - // we have reached the end of column - if ($sep == -1) { - // check if the line was already started - if (($this->rtl AND ($this->x <= ($this->w - $this->rMargin - $this->cell_padding['R'] - $margin['R'] - $chrwidth))) - OR ((!$this->rtl) AND ($this->x >= ($this->lMargin + $this->cell_padding['L'] + $margin['L'] + $chrwidth)))) { - // print a void cell and go to next line - $this->Cell($w, $h, '', 0, 1); - $linebreak = true; - if ($firstline) { - return (TCPDF_FONTS::UniArrSubString($uchars, $j)); - } - } else { - // truncate the word because do not fit on column - $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $i); - if ($firstline) { - $startx = $this->x; - $tmparr = array_slice($chars, $j, ($i - $j)); - if ($rtlmode) { - $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); - } - $linew = $this->GetArrStringWidth($tmparr); - unset($tmparr); - if ($this->rtl) { - $this->endlinex = $startx - $linew; - } else { - $this->endlinex = $startx + $linew; - } - $w = $linew; - $tmpcellpadding = $this->cell_padding; - if ($maxh == 0) { - $this->setCellPadding(0); - } - } - if ($firstblock AND $this->isRTLTextDir()) { - $tmpstr = $this->stringRightTrim($tmpstr); - } - $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch); - unset($tmpstr); - if ($firstline) { - $this->cell_padding = $tmpcellpadding; - return (TCPDF_FONTS::UniArrSubString($uchars, $i)); - } - $j = $i; - --$i; - } - } else { - // word wrapping - if ($this->rtl AND (!$firstblock) AND ($sep < $i)) { - $endspace = 1; - } else { - $endspace = 0; - } - // check the length of the next string - $strrest = TCPDF_FONTS::UniArrSubString($uchars, ($sep + $endspace)); - $nextstr = TCPDF_STATIC::pregSplit('/'.$this->re_space['p'].'/', $this->re_space['m'], $this->stringTrim($strrest)); - if (isset($nextstr[0]) AND ($this->GetStringWidth($nextstr[0]) > $pw)) { - // truncate the word because do not fit on a full page width - $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $i); - if ($firstline) { - $startx = $this->x; - $tmparr = array_slice($chars, $j, ($i - $j)); - if ($rtlmode) { - $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); - } - $linew = $this->GetArrStringWidth($tmparr); - unset($tmparr); - if ($this->rtl) { - $this->endlinex = ($startx - $linew); - } else { - $this->endlinex = ($startx + $linew); - } - $w = $linew; - $tmpcellpadding = $this->cell_padding; - if ($maxh == 0) { - $this->setCellPadding(0); - } - } - if ($firstblock AND $this->isRTLTextDir()) { - $tmpstr = $this->stringRightTrim($tmpstr); - } - $this->Cell($w, $h, $tmpstr, 0, 1, $align, $fill, $link, $stretch); - unset($tmpstr); - if ($firstline) { - $this->cell_padding = $tmpcellpadding; - return (TCPDF_FONTS::UniArrSubString($uchars, $i)); - } - $j = $i; - --$i; - } else { - // word wrapping - if ($shy) { - // add hypen (minus symbol) at the end of the line - $shy_width = $tmp_shy_replacement_width; - if ($this->rtl) { - $shy_char_left = $tmp_shy_replacement_char; - $shy_char_right = ''; - } else { - $shy_char_left = ''; - $shy_char_right = $tmp_shy_replacement_char; - } - } else { - $shy_width = 0; - $shy_char_left = ''; - $shy_char_right = ''; - } - $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, ($sep + $endspace)); - if ($firstline) { - $startx = $this->x; - $tmparr = array_slice($chars, $j, (($sep + $endspace) - $j)); - if ($rtlmode) { - $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); - } - $linew = $this->GetArrStringWidth($tmparr); - unset($tmparr); - if ($this->rtl) { - $this->endlinex = $startx - $linew - $shy_width; - } else { - $this->endlinex = $startx + $linew + $shy_width; - } - $w = $linew; - $tmpcellpadding = $this->cell_padding; - if ($maxh == 0) { - $this->setCellPadding(0); - } - } - // print the line - if ($firstblock AND $this->isRTLTextDir()) { - $tmpstr = $this->stringRightTrim($tmpstr); - } - $this->Cell($w, $h, $shy_char_left.$tmpstr.$shy_char_right, 0, 1, $align, $fill, $link, $stretch); - unset($tmpstr); - if ($firstline) { - if ($chars[$sep] == 45) { - $endspace += 1; - } - // return the remaining text - $this->cell_padding = $tmpcellpadding; - return (TCPDF_FONTS::UniArrSubString($uchars, ($sep + $endspace))); - } - $i = $sep; - $sep = -1; - $shy = false; - $j = ($i + 1); - } - } - // account for margin changes - if ((($this->y + $this->lasth) > $this->PageBreakTrigger) AND ($this->inPageBody())) { - $this->AcceptPageBreak(); - if ($this->rtl) { - $this->x -= $margin['R']; - } else { - $this->x += $margin['L']; - } - $this->lMargin += $margin['L']; - $this->rMargin += $margin['R']; - } - $w = $this->getRemainingWidth(); - $wmax = $w - $this->cell_padding['L'] - $this->cell_padding['R']; - if ($linebreak) { - $linebreak = false; - } else { - ++$nl; - $l = 0; - } - } - } - // save last character - $pc = $c; - ++$i; - } // end while i < nb - // print last substring (if any) - if ($l > 0) { - switch ($align) { - case 'J': - case 'C': { - break; - } - case 'L': { - if (!$this->rtl) { - $w = $l; - } - break; - } - case 'R': { - if ($this->rtl) { - $w = $l; - } - break; - } - default: { - $w = $l; - break; - } - } - $tmpstr = TCPDF_FONTS::UniArrSubString($uchars, $j, $nb); - if ($firstline) { - $startx = $this->x; - $tmparr = array_slice($chars, $j, ($nb - $j)); - if ($rtlmode) { - $tmparr = TCPDF_FONTS::utf8Bidi($tmparr, $tmpstr, $this->tmprtl, $this->isunicode, $this->CurrentFont); - } - $linew = $this->GetArrStringWidth($tmparr); - unset($tmparr); - if ($this->rtl) { - $this->endlinex = $startx - $linew; - } else { - $this->endlinex = $startx + $linew; - } - $w = $linew; - $tmpcellpadding = $this->cell_padding; - if ($maxh == 0) { - $this->setCellPadding(0); - } - } - if ($firstblock AND $this->isRTLTextDir()) { - $tmpstr = $this->stringRightTrim($tmpstr); - } - $this->Cell($w, $h, $tmpstr, 0, $ln, $align, $fill, $link, $stretch); - unset($tmpstr); - if ($firstline) { - $this->cell_padding = $tmpcellpadding; - return (TCPDF_FONTS::UniArrSubString($uchars, $nb)); - } - ++$nl; - } - if ($firstline) { - return ''; - } - return $nl; - } - - /** - * Returns the remaining width between the current position and margins. - * @return float Return the remaining width - * @protected - */ - protected function getRemainingWidth() { - list($this->x, $this->y) = $this->checkPageRegions(0, $this->x, $this->y); - if ($this->rtl) { - return ($this->x - $this->lMargin); - } else { - return ($this->w - $this->rMargin - $this->x); - } - } - - /** - * Set the block dimensions accounting for page breaks and page/column fitting - * @param float $w width - * @param float $h height - * @param float $x X coordinate - * @param float $y Y coodiante - * @param boolean $fitonpage if true the block is resized to not exceed page dimensions. - * @return array array($w, $h, $x, $y) - * @protected - * @since 5.5.009 (2010-07-05) - */ - protected function fitBlock($w, $h, $x, $y, $fitonpage=false) { - if ($w <= 0) { - // set maximum width - $w = ($this->w - $this->lMargin - $this->rMargin); - if ($w <= 0) { - $w = 1; - } - } - if ($h <= 0) { - // set maximum height - $h = ($this->PageBreakTrigger - $this->tMargin); - if ($h <= 0) { - $h = 1; - } - } - // resize the block to be vertically contained on a single page or single column - if ($fitonpage OR $this->AutoPageBreak) { - $ratio_wh = ($w / $h); - if ($h > ($this->PageBreakTrigger - $this->tMargin)) { - $h = $this->PageBreakTrigger - $this->tMargin; - $w = ($h * $ratio_wh); - } - // resize the block to be horizontally contained on a single page or single column - if ($fitonpage) { - $maxw = ($this->w - $this->lMargin - $this->rMargin); - if ($w > $maxw) { - $w = $maxw; - $h = ($w / $ratio_wh); - } - } - } - // Check whether we need a new page or new column first as this does not fit - $prev_x = $this->x; - $prev_y = $this->y; - if ($this->checkPageBreak($h, $y) OR ($this->y < $prev_y)) { - $y = $this->y; - if ($this->rtl) { - $x += ($prev_x - $this->x); - } else { - $x += ($this->x - $prev_x); - } - $this->newline = true; - } - // resize the block to be contained on the remaining available page or column space - if ($fitonpage) { - $ratio_wh = ($w / $h); - if (($y + $h) > $this->PageBreakTrigger) { - $h = $this->PageBreakTrigger - $y; - $w = ($h * $ratio_wh); - } - if ((!$this->rtl) AND (($x + $w) > ($this->w - $this->rMargin))) { - $w = $this->w - $this->rMargin - $x; - $h = ($w / $ratio_wh); - } elseif (($this->rtl) AND (($x - $w) < ($this->lMargin))) { - $w = $x - $this->lMargin; - $h = ($w / $ratio_wh); - } - } - return array($w, $h, $x, $y); - } - - /** - * Puts an image in the page. - * The upper-left corner must be given. - * The dimensions can be specified in different ways:
              - *
            • explicit width and height (expressed in user unit)
            • - *
            • one explicit dimension, the other being calculated automatically in order to keep the original proportions
            • - *
            • no explicit dimension, in which case the image is put at 72 dpi
            - * Supported formats are JPEG and PNG images whitout GD library and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM; - * The format can be specified explicitly or inferred from the file extension.
            - * It is possible to put a link on the image.
            - * Remark: if an image is used several times, only one copy will be embedded in the file.
            - * @param string $file Name of the file containing the image or a '@' character followed by the image data string. To link an image without embedding it on the document, set an asterisk character before the URL (i.e.: '*http://www.example.com/image.jpg'). - * @param float|null $x Abscissa of the upper-left corner (LTR) or upper-right corner (RTL). - * @param float|null $y Ordinate of the upper-left corner (LTR) or upper-right corner (RTL). - * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. - * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. - * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension. - * @param mixed $link URL or identifier returned by AddLink(). - * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
            • T: top-right for LTR or top-left for RTL
            • M: middle-right for LTR or middle-left for RTL
            • B: bottom-right for LTR or bottom-left for RTL
            • N: next line
            - * @param mixed $resize If true resize (reduce) the image to fit $w and $h (requires GD or ImageMagick library); if false do not resize; if 2 force resize in all cases (upscaling and downscaling). - * @param int $dpi dot-per-inch resolution used on resize - * @param string $palign Allows to center or align the image on the current line. Possible values are:
            • L : left align
            • C : center
            • R : right align
            • '' : empty string : left for LTR or right for RTL
            - * @param boolean $ismask true if this image is a mask, false otherwise - * @param mixed $imgmask image object returned by this function or false - * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
            • 0: no border (default)
            • 1: frame
            or a string containing some or all of the following characters (in any order):
            • L: left
            • T: top
            • R: right
            • B: bottom
            or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @param mixed $fitbox If not false scale image dimensions proportionally to fit within the ($w, $h) box. $fitbox can be true or a 2 characters string indicating the image alignment inside the box. The first character indicate the horizontal alignment (L = left, C = center, R = right) the second character indicate the vertical algnment (T = top, M = middle, B = bottom). - * @param boolean $hidden If true do not display the image. - * @param boolean $fitonpage If true the image is resized to not exceed page dimensions. - * @param boolean $alt If true the image will be added as alternative and not directly printed (the ID of the image will be returned). - * @param array $altimgs Array of alternate images IDs. Each alternative image must be an array with two values: an integer representing the image ID (the value returned by the Image method) and a boolean value to indicate if the image is the default for printing. - * @return mixed|false image information - * @public - * @since 1.1 - */ - public function Image($file, $x=null, $y=null, $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false, $alt=false, $altimgs=array()) { - if ($this->state != 2) { - return false; - } - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions($h, $x, $y); - $exurl = ''; // external streams - $imsize = FALSE; - - // Make sure the file variable is not empty or null because accessing $file[0] later - // results in error when running PHP 7.4 - if (empty($file)) { - return false; - } - // check if we are passing an image as file or string - if ($file[0] === '@') { - // image from string - $imgdata = substr($file, 1); - } else { // image file - if ($file[0] === '*') { - // image as external stream - $file = substr($file, 1); - $exurl = $file; - } - // check if file exist and it is valid - if (!@$this->fileExists($file)) { - return false; - } - if (false !== $info = $this->getImageBuffer($file)) { - $imsize = array($info['w'], $info['h']); - } elseif (($imsize = @getimagesize($file)) === FALSE && strpos($file, '__tcpdf_'.$this->file_id.'_img') === FALSE){ - $imgdata = $this->getCachedFileContents($file); - } - } - if (!empty($imgdata)) { - // copy image to cache - $original_file = $file; - $file = TCPDF_STATIC::getObjFilename('img', $this->file_id); - $fp = TCPDF_STATIC::fopenLocal($file, 'w'); - if (!$fp) { - $this->Error('Unable to write file: '.$file); - } - fwrite($fp, $imgdata); - fclose($fp); - unset($imgdata); - $imsize = @getimagesize($file); - if ($imsize === FALSE) { - unlink($file); - $file = $original_file; - } - } - if ($imsize === FALSE) { - if (($w > 0) AND ($h > 0)) { - // get measures from specified data - $pw = $this->getHTMLUnitToUnits($w, 0, $this->pdfunit, true) * $this->imgscale * $this->k; - $ph = $this->getHTMLUnitToUnits($h, 0, $this->pdfunit, true) * $this->imgscale * $this->k; - $imsize = array($pw, $ph); - } else { - $this->Error('[Image] Unable to get the size of the image: '.$file); - } - } - // file hash - $filehash = md5($file); - // get original image width and height in pixels - list($pixw, $pixh) = $imsize; - // calculate image width and height on document - if (($w <= 0) AND ($h <= 0)) { - // convert image size to document unit - $w = $this->pixelsToUnits($pixw); - $h = $this->pixelsToUnits($pixh); - } elseif ($w <= 0) { - $w = $h * $pixw / $pixh; - } elseif ($h <= 0) { - $h = $w * $pixh / $pixw; - } elseif (($fitbox !== false) AND ($w > 0) AND ($h > 0)) { - if (strlen($fitbox) !== 2) { - // set default alignment - $fitbox = '--'; - } - // scale image dimensions proportionally to fit within the ($w, $h) box - if ((($w * $pixh) / ($h * $pixw)) < 1) { - // store current height - $oldh = $h; - // calculate new height - $h = $w * $pixh / $pixw; - // height difference - $hdiff = ($oldh - $h); - // vertical alignment - switch (strtoupper($fitbox[1])) { - case 'T': { - break; - } - case 'M': { - $y += ($hdiff / 2); - break; - } - case 'B': { - $y += $hdiff; - break; - } - } - } else { - // store current width - $oldw = $w; - // calculate new width - $w = $h * $pixw / $pixh; - // width difference - $wdiff = ($oldw - $w); - // horizontal alignment - switch (strtoupper($fitbox[0])) { - case 'L': { - if ($this->rtl) { - $x -= $wdiff; - } - break; - } - case 'C': { - if ($this->rtl) { - $x -= ($wdiff / 2); - } else { - $x += ($wdiff / 2); - } - break; - } - case 'R': { - if (!$this->rtl) { - $x += $wdiff; - } - break; - } - } - } - } - // fit the image on available space - list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, $fitonpage); - // calculate new minimum dimensions in pixels - $neww = round($w * $this->k * $dpi / $this->dpi); - $newh = round($h * $this->k * $dpi / $this->dpi); - // check if resize is necessary (resize is used only to reduce the image) - $newsize = ($neww * $newh); - $pixsize = ($pixw * $pixh); - if (intval($resize) == 2) { - $resize = true; - } elseif ($newsize >= $pixsize) { - $resize = false; - } - // check if image has been already added on document - $newimage = true; - if (in_array($file, $this->imagekeys)) { - $newimage = false; - // get existing image data - $info = $this->getImageBuffer($file); - if (strpos($file, '__tcpdf_'.$this->file_id.'_imgmask_') === FALSE) { - // check if the newer image is larger - $oldsize = ($info['w'] * $info['h']); - if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) { - $newimage = true; - } - } - } elseif (($ismask === false) AND ($imgmask === false) AND (strpos($file, '__tcpdf_'.$this->file_id.'_imgmask_') === FALSE)) { - // create temp image file (without alpha channel) - $tempfile_plain = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_plain_'.$filehash; - // create temp alpha file - $tempfile_alpha = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_alpha_'.$filehash; - // check for cached images - if (in_array($tempfile_plain, $this->imagekeys)) { - // get existing image data - $info = $this->getImageBuffer($tempfile_plain); - // check if the newer image is larger - $oldsize = ($info['w'] * $info['h']); - if ((($oldsize < $newsize) AND ($resize)) OR (($oldsize < $pixsize) AND (!$resize))) { - $newimage = true; - } else { - $newimage = false; - // embed mask image - $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false); - // embed image, masked with previously embedded mask - return $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask); - } - } - } - if ($newimage) { - //First use of image, get info - $type = strtolower($type); - if ($type == '') { - $type = TCPDF_IMAGES::getImageFileType($file, $imsize); - } elseif ($type == 'jpg') { - $type = 'jpeg'; - } - $mqr = TCPDF_STATIC::get_mqr(); - TCPDF_STATIC::set_mqr(false); - // Specific image handlers (defined on TCPDF_IMAGES CLASS) - $mtd = '_parse'.$type; - // GD image handler function - $gdfunction = 'imagecreatefrom'.$type; - $info = false; - if ((method_exists('TCPDF_IMAGES', $mtd)) AND (!($resize AND (function_exists($gdfunction) OR extension_loaded('imagick'))))) { - // TCPDF image functions - $info = TCPDF_IMAGES::$mtd($file); - if (($ismask === false) AND ($imgmask === false) AND (strpos($file, '__tcpdf_'.$this->file_id.'_imgmask_') === FALSE) - AND (($info === 'pngalpha') OR (isset($info['trns']) AND !empty($info['trns'])))) { - return $this->ImagePngAlpha($file, $x, $y, $pixw, $pixh, $w, $h, 'PNG', $link, $align, $resize, $dpi, $palign, $filehash); - } - } - if (($info === false) AND function_exists($gdfunction)) { - try { - // GD library - $img = $gdfunction($file); - if ($img !== false) { - if ($resize) { - $imgr = imagecreatetruecolor($neww, $newh); - if (($type == 'gif') OR ($type == 'png')) { - $imgr = TCPDF_IMAGES::setGDImageTransparency($imgr, $img); - } - imagecopyresampled($imgr, $img, 0, 0, 0, 0, $neww, $newh, $pixw, $pixh); - $img = $imgr; - } - if (($type == 'gif') OR ($type == 'png')) { - $info = TCPDF_IMAGES::_toPNG($img, TCPDF_STATIC::getObjFilename('img', $this->file_id)); - } else { - $info = TCPDF_IMAGES::_toJPEG($img, $this->jpeg_quality, TCPDF_STATIC::getObjFilename('img', $this->file_id)); - } - } - } catch(Exception $e) { - $info = false; - } - } - if (($info === false) AND extension_loaded('imagick')) { - try { - // ImageMagick library - $img = new Imagick(); - if ($type == 'svg') { - if ($file[0] === '@') { - // image from string - $svgimg = substr($file, 1); - } else { - // get SVG file content - $svgimg = $this->getCachedFileContents($file); - } - if ($svgimg !== FALSE) { - // get width and height - $regs = array(); - if (preg_match('/]*)>/si', $svgimg, $regs)) { - $svgtag = $regs[1]; - $tmp = array(); - if (preg_match('/[\s]+width[\s]*=[\s]*"([^"]*)"/si', $svgtag, $tmp)) { - $ow = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false); - $owu = sprintf('%F', ($ow * $dpi / 72)).$this->pdfunit; - $svgtag = preg_replace('/[\s]+width[\s]*=[\s]*"[^"]*"/si', ' width="'.$owu.'"', $svgtag, 1); - } else { - $ow = $w; - } - $tmp = array(); - if (preg_match('/[\s]+height[\s]*=[\s]*"([^"]*)"/si', $svgtag, $tmp)) { - $oh = $this->getHTMLUnitToUnits($tmp[1], 1, $this->svgunit, false); - $ohu = sprintf('%F', ($oh * $dpi / 72)).$this->pdfunit; - $svgtag = preg_replace('/[\s]+height[\s]*=[\s]*"[^"]*"/si', ' height="'.$ohu.'"', $svgtag, 1); - } else { - $oh = $h; - } - $tmp = array(); - if (!preg_match('/[\s]+viewBox[\s]*=[\s]*"[\s]*([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]+([0-9\.]+)[\s]*"/si', $svgtag, $tmp)) { - $vbw = ($ow * $this->imgscale * $this->k); - $vbh = ($oh * $this->imgscale * $this->k); - $vbox = sprintf(' viewBox="0 0 %F %F" ', $vbw, $vbh); - $svgtag = $vbox.$svgtag; - } - $svgimg = preg_replace('/]*)>/si', '', $svgimg, 1); - } - $img->readImageBlob($svgimg); - } - } else { - $img->readImage($file); - } - if ($resize) { - $img->resizeImage($neww, $newh, 10, 1, false); - } - $img->setCompressionQuality($this->jpeg_quality); - $img->setImageFormat('jpeg'); - $tempname = TCPDF_STATIC::getObjFilename('img', $this->file_id); - $img->writeImage($tempname); - $info = TCPDF_IMAGES::_parsejpeg($tempname); - unlink($tempname); - $img->destroy(); - } catch(Exception $e) { - $info = false; - } - } - if ($info === false) { - // unable to process image - return false; - } - TCPDF_STATIC::set_mqr($mqr); - if ($ismask) { - // force grayscale - $info['cs'] = 'DeviceGray'; - } - if ($imgmask !== false) { - $info['masked'] = $imgmask; - } - if (!empty($exurl)) { - $info['exurl'] = $exurl; - } - // array of alternative images - $info['altimgs'] = $altimgs; - // add image to document - $info['i'] = $this->setImageBuffer($file, $info); - } - // set alignment - $this->img_rb_x = $x + $w; - $this->img_rb_y = $y + $h; - - // set alignment - if ($palign == 'L') { - $ximg = $this->lMargin; - } elseif ($palign == 'C') { - $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; - } elseif ($palign == 'R') { - $ximg = $this->w - $this->rMargin - $w; - } else { - $ximg = $x; - } - - if ($ismask OR $hidden) { - // image is not displayed - return $info['i']; - } - $xkimg = $ximg * $this->k; - if (!$alt) { - // only non-alternative immages will be set - $this->_out(sprintf('q %F 0 0 %F %F %F cm /I%u Do Q', ($w * $this->k), ($h * $this->k), $xkimg, (($this->h - ($y + $h)) * $this->k), $info['i'])); - } - if (!empty($border)) { - $bx = $this->x; - $by = $this->y; - $this->x = $ximg; - if ($this->rtl) { - $this->x += $w; - } - $this->y = $y; - $this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true); - $this->x = $bx; - $this->y = $by; - } - if ($link) { - $this->Link($ximg, $y, $w, $h, $link, 0); - } - // set pointer to align the next text/objects - switch($align) { - case 'T': { - $this->y = $y; - $this->x = $this->img_rb_x; - break; - } - case 'M': { - $this->y = $y + round($h/2); - $this->x = $this->img_rb_x; - break; - } - case 'B': { - $this->y = $this->img_rb_y; - $this->x = $this->img_rb_x; - break; - } - case 'N': { - $this->setY($this->img_rb_y); - break; - } - default:{ - break; - } - } - $this->endlinex = $this->img_rb_x; - if ($this->inxobj) { - // we are inside an XObject template - $this->xobjects[$this->xobjid]['images'][] = $info['i']; - } - return $info['i']; - } - - /** - * Extract info from a PNG image with alpha channel using the Imagick or GD library. - * @param string $file Name of the file containing the image. - * @param float $x Abscissa of the upper-left corner. - * @param float $y Ordinate of the upper-left corner. - * @param float $wpx Original width of the image in pixels. - * @param float $hpx original height of the image in pixels. - * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. - * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. - * @param string $type Image format. Possible values are (case insensitive): JPEG and PNG (whitout GD library) and all images supported by GD: GD, GD2, GD2PART, GIF, JPEG, PNG, BMP, XBM, XPM;. If not specified, the type is inferred from the file extension. - * @param mixed $link URL or identifier returned by AddLink(). - * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
            • T: top-right for LTR or top-left for RTL
            • M: middle-right for LTR or middle-left for RTL
            • B: bottom-right for LTR or bottom-left for RTL
            • N: next line
            - * @param boolean $resize If true resize (reduce) the image to fit $w and $h (requires GD library). - * @param int $dpi dot-per-inch resolution used on resize - * @param string $palign Allows to center or align the image on the current line. Possible values are:
            • L : left align
            • C : center
            • R : right align
            • '' : empty string : left for LTR or right for RTL
            - * @param string $filehash File hash used to build unique file names. - * @author Nicola Asuni - * @protected - * @since 4.3.007 (2008-12-04) - * @see Image() - */ - protected function ImagePngAlpha($file, $x, $y, $wpx, $hpx, $w, $h, $type, $link, $align, $resize, $dpi, $palign, $filehash='') { - // create temp images - if (empty($filehash)) { - $filehash = md5($file); - } - // create temp image file (without alpha channel) - $tempfile_plain = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_plain_'.$filehash; - // create temp alpha file - $tempfile_alpha = K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_imgmask_alpha_'.$filehash; - $parsed = false; - $parse_error = ''; - // ImageMagick extension - if (($parsed === false) AND extension_loaded('imagick')) { - try { - // ImageMagick library - $img = new Imagick(); - $img->readImage($file); - // clone image object - $imga = TCPDF_STATIC::objclone($img); - // extract alpha channel - if (method_exists($img, 'setImageAlphaChannel') AND defined('Imagick::ALPHACHANNEL_EXTRACT')) { - $img->setImageAlphaChannel(Imagick::ALPHACHANNEL_EXTRACT); - } else { - $img->separateImageChannel(8); // 8 = (imagick::CHANNEL_ALPHA | imagick::CHANNEL_OPACITY | imagick::CHANNEL_MATTE); - $img->negateImage(true); - } - $img->setImageFormat('png'); - $img->writeImage($tempfile_alpha); - // remove alpha channel - if (method_exists($imga, 'setImageMatte')) { - $imga->setImageMatte(false); - } else { - $imga->separateImageChannel(39); // 39 = (imagick::CHANNEL_ALL & ~(imagick::CHANNEL_ALPHA | imagick::CHANNEL_OPACITY | imagick::CHANNEL_MATTE)); - } - $imga->setImageFormat('png'); - $imga->writeImage($tempfile_plain); - $parsed = true; - } catch (Exception $e) { - // Imagemagick fails, try with GD - $parse_error = 'Imagick library error: '.$e->getMessage(); - } - } - // GD extension - if (($parsed === false) AND function_exists('imagecreatefrompng')) { - try { - // generate images - $img = imagecreatefrompng($file); - $imgalpha = imagecreate($wpx, $hpx); - // generate gray scale palette (0 -> 255) - for ($c = 0; $c < 256; ++$c) { - ImageColorAllocate($imgalpha, $c, $c, $c); - } - // extract alpha channel - for ($xpx = 0; $xpx < $wpx; ++$xpx) { - for ($ypx = 0; $ypx < $hpx; ++$ypx) { - $color = imagecolorat($img, $xpx, $ypx); - // get and correct gamma color - $alpha = $this->getGDgamma($img, $color); - imagesetpixel($imgalpha, (int) $xpx, (int) $ypx, (int) $alpha); - } - } - imagepng($imgalpha, $tempfile_alpha); - imagedestroy($imgalpha); - // extract image without alpha channel - $imgplain = imagecreatetruecolor($wpx, $hpx); - imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx); - imagepng($imgplain, $tempfile_plain); - imagedestroy($imgplain); - $parsed = true; - } catch (Exception $e) { - // GD fails - $parse_error = 'GD library error: '.$e->getMessage(); - } - } - if ($parsed === false) { - if (empty($parse_error)) { - $this->Error('TCPDF requires the Imagick or GD extension to handle PNG images with alpha channel.'); - } else { - $this->Error($parse_error); - } - } - // embed mask image - $imgmask = $this->Image($tempfile_alpha, $x, $y, $w, $h, 'PNG', '', '', $resize, $dpi, '', true, false); - // embed image, masked with previously embedded mask - $this->Image($tempfile_plain, $x, $y, $w, $h, $type, $link, $align, $resize, $dpi, $palign, false, $imgmask); - } - - /** - * Get the GD-corrected PNG gamma value from alpha color - * @param resource $img GD image Resource ID. - * @param int $c alpha color - * @protected - * @since 4.3.007 (2008-12-04) - */ - protected function getGDgamma($img, $c) { - if (!isset($this->gdgammacache['#'.$c])) { - $colors = imagecolorsforindex($img, $c); - // GD alpha is only 7 bit (0 -> 127) - $this->gdgammacache['#'.$c] = (int) (((127 - $colors['alpha']) / 127) * 255); - // correct gamma - $this->gdgammacache['#'.$c] = (int) (pow(($this->gdgammacache['#'.$c] / 255), 2.2) * 255); - // store the latest values on cache to improve performances - if (count($this->gdgammacache) > 8) { - // remove one element from the cache array - array_shift($this->gdgammacache); - } - } - return $this->gdgammacache['#'.$c]; - } - - /** - * Performs a line break. - * The current abscissa goes back to the left margin and the ordinate increases by the amount passed in parameter. - * @param float|null $h The height of the break. By default, the value equals the height of the last printed cell. - * @param boolean $cell if true add the current left (or right o for RTL) padding to the X coordinate - * @public - * @since 1.0 - * @see Cell() - */ - public function Ln($h=null, $cell=false) { - if (($this->num_columns > 1) AND ($this->y == $this->columns[$this->current_column]['y']) AND isset($this->columns[$this->current_column]['x']) AND ($this->x == $this->columns[$this->current_column]['x'])) { - // revove vertical space from the top of the column - return; - } - if ($cell) { - if ($this->rtl) { - $cellpadding = $this->cell_padding['R']; - } else { - $cellpadding = $this->cell_padding['L']; - } - } else { - $cellpadding = 0; - } - if ($this->rtl) { - $this->x = $this->w - $this->rMargin - $cellpadding; - } else { - $this->x = $this->lMargin + $cellpadding; - } - if (TCPDF_STATIC::empty_string($h)) { - $h = $this->lasth; - } - $this->y += $h; - $this->newline = true; - } - - /** - * Returns the relative X value of current position. - * The value is relative to the left border for LTR languages and to the right border for RTL languages. - * @return float - * @public - * @since 1.2 - * @see SetX(), GetY(), SetY() - */ - public function GetX() { - //Get x position - if ($this->rtl) { - return ($this->w - $this->x); - } else { - return $this->x; - } - } - - /** - * Returns the absolute X value of current position. - * @return float - * @public - * @since 1.2 - * @see SetX(), GetY(), SetY() - */ - public function GetAbsX() { - return $this->x; - } - - /** - * Returns the ordinate of the current position. - * @return float - * @public - * @since 1.0 - * @see SetY(), GetX(), SetX() - */ - public function GetY() { - return $this->y; - } - - /** - * Defines the abscissa of the current position. - * If the passed value is negative, it is relative to the right of the page (or left if language is RTL). - * @param float $x The value of the abscissa in user units. - * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. - * @public - * @since 1.2 - * @see GetX(), GetY(), SetY(), SetXY() - */ - public function setX($x, $rtloff=false) { - $x = floatval($x); - if (!$rtloff AND $this->rtl) { - if ($x >= 0) { - $this->x = $this->w - $x; - } else { - $this->x = abs($x); - } - } else { - if ($x >= 0) { - $this->x = $x; - } else { - $this->x = $this->w + $x; - } - } - if ($this->x < 0) { - $this->x = 0; - } - if ($this->x > $this->w) { - $this->x = $this->w; - } - } - - /** - * Moves the current abscissa back to the left margin and sets the ordinate. - * If the passed value is negative, it is relative to the bottom of the page. - * @param float $y The value of the ordinate in user units. - * @param bool $resetx if true (default) reset the X position. - * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. - * @public - * @since 1.0 - * @see GetX(), GetY(), SetY(), SetXY() - */ - public function setY($y, $resetx=true, $rtloff=false) { - $y = floatval($y); - if ($resetx) { - //reset x - if (!$rtloff AND $this->rtl) { - $this->x = $this->w - $this->rMargin; - } else { - $this->x = $this->lMargin; - } - } - if ($y >= 0) { - $this->y = $y; - } else { - $this->y = $this->h + $y; - } - if ($this->y < 0) { - $this->y = 0; - } - if ($this->y > $this->h) { - $this->y = $this->h; - } - } - - /** - * Defines the abscissa and ordinate of the current position. - * If the passed values are negative, they are relative respectively to the right and bottom of the page. - * @param float $x The value of the abscissa. - * @param float $y The value of the ordinate. - * @param boolean $rtloff if true always uses the page top-left corner as origin of axis. - * @public - * @since 1.2 - * @see SetX(), SetY() - */ - public function setXY($x, $y, $rtloff=false) { - $this->setY($y, false, $rtloff); - $this->setX($x, $rtloff); - } - - /** - * Set the absolute X coordinate of the current pointer. - * @param float $x The value of the abscissa in user units. - * @public - * @since 5.9.186 (2012-09-13) - * @see setAbsX(), setAbsY(), SetAbsXY() - */ - public function setAbsX($x) { - $this->x = floatval($x); - } - - /** - * Set the absolute Y coordinate of the current pointer. - * @param float $y (float) The value of the ordinate in user units. - * @public - * @since 5.9.186 (2012-09-13) - * @see setAbsX(), setAbsY(), SetAbsXY() - */ - public function setAbsY($y) { - $this->y = floatval($y); - } - - /** - * Set the absolute X and Y coordinates of the current pointer. - * @param float $x The value of the abscissa in user units. - * @param float $y (float) The value of the ordinate in user units. - * @public - * @since 5.9.186 (2012-09-13) - * @see setAbsX(), setAbsY(), SetAbsXY() - */ - public function setAbsXY($x, $y) { - $this->setAbsX($x); - $this->setAbsY($y); - } - - /** - * Send the document to a given destination: string, local file or browser. - * In the last case, the plug-in may be used (if present) or a download ("Save as" dialog box) may be forced.
            - * The method first calls Close() if necessary to terminate the document. - * @param string $name The name of the file when saved. Note that special characters are removed and blanks characters are replaced with the underscore character. - * @param string $dest Destination where to send the document. It can take one of the following values:
            • I: send the file inline to the browser (default). The plug-in is used if available. The name given by name is used when one selects the "Save as" option on the link generating the PDF.
            • D: send to the browser and force a file download with the name given by name.
            • F: save to a local server file with the name given by name.
            • S: return the document as a string (name is ignored).
            • FI: equivalent to F + I option
            • FD: equivalent to F + D option
            • E: return the document as base64 mime multi-part email attachment (RFC 2045)
            - * @return string - * @public - * @since 1.0 - * @see Close() - */ - public function Output($name='doc.pdf', $dest='I') { - //Output PDF to some destination - //Finish document if necessary - if ($this->state < 3) { - $this->Close(); - } - //Normalize parameters - if (is_bool($dest)) { - $dest = $dest ? 'D' : 'F'; - } - $dest = strtoupper($dest); - if ($dest[0] != 'F') { - $name = preg_replace('/[\s]+/', '_', $name); - $name = preg_replace('/[^a-zA-Z0-9_\.-]/', '', $name); - } - if ($this->sign) { - // *** apply digital signature to the document *** - // get the document content - $pdfdoc = $this->getBuffer(); - // remove last newline - $pdfdoc = substr($pdfdoc, 0, -1); - // remove filler space - $byterange_string_len = strlen(TCPDF_STATIC::$byterange_string); - // define the ByteRange - $byte_range = array(); - $byte_range[0] = 0; - $byte_range[1] = strpos($pdfdoc, TCPDF_STATIC::$byterange_string) + $byterange_string_len + 10; - $byte_range[2] = $byte_range[1] + $this->signature_max_length + 2; - $byte_range[3] = strlen($pdfdoc) - $byte_range[2]; - $pdfdoc = substr($pdfdoc, 0, $byte_range[1]).substr($pdfdoc, $byte_range[2]); - // replace the ByteRange - $byterange = sprintf('/ByteRange[0 %u %u %u]', $byte_range[1], $byte_range[2], $byte_range[3]); - $byterange .= str_repeat(' ', ($byterange_string_len - strlen($byterange))); - $pdfdoc = str_replace(TCPDF_STATIC::$byterange_string, $byterange, $pdfdoc); - // write the document to a temporary folder - $tempdoc = TCPDF_STATIC::getObjFilename('doc', $this->file_id); - $f = TCPDF_STATIC::fopenLocal($tempdoc, 'wb'); - if (!$f) { - $this->Error('Unable to create temporary file: '.$tempdoc); - } - $pdfdoc_length = strlen($pdfdoc); - fwrite($f, $pdfdoc, $pdfdoc_length); - fclose($f); - // get digital signature via openssl library - $tempsign = TCPDF_STATIC::getObjFilename('sig', $this->file_id); - if (empty($this->signature_data['extracerts'])) { - openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED); - } else { - openssl_pkcs7_sign($tempdoc, $tempsign, $this->signature_data['signcert'], array($this->signature_data['privkey'], $this->signature_data['password']), array(), PKCS7_BINARY | PKCS7_DETACHED, $this->signature_data['extracerts']); - } - // read signature - $signature = file_get_contents($tempsign); - // extract signature - $signature = substr($signature, $pdfdoc_length); - $signature = substr($signature, (strpos($signature, "%%EOF\n\n------") + 13)); - $tmparr = explode("\n\n", $signature); - $signature = $tmparr[1]; - // decode signature - $signature = base64_decode(trim($signature)); - // add TSA timestamp to signature - $signature = $this->applyTSA($signature); - // convert signature to hex - $signature = current(unpack('H*', $signature)); - $signature = str_pad($signature, $this->signature_max_length, '0'); - // Add signature to the document - $this->buffer = substr($pdfdoc, 0, $byte_range[1]).'<'.$signature.'>'.substr($pdfdoc, $byte_range[1]); - $this->bufferlen = strlen($this->buffer); - } - switch($dest) { - case 'I': { - // Send PDF to the standard output - if (ob_get_contents()) { - $this->Error('Some data has already been output, can\'t send PDF file'); - } - if (php_sapi_name() != 'cli') { - // send output to a browser - header('Content-Type: application/pdf'); - if (headers_sent()) { - $this->Error('Some data has already been output to browser, can\'t send PDF file'); - } - header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); - //header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 - header('Pragma: public'); - header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past - header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); - header('Content-Disposition: inline; filename="'.basename($name).'"'); - TCPDF_STATIC::sendOutputData($this->getBuffer(), $this->bufferlen); - } else { - echo $this->getBuffer(); - } - break; - } - case 'D': { - // download PDF as file - if (ob_get_contents()) { - $this->Error('Some data has already been output, can\'t send PDF file'); - } - header('Content-Description: File Transfer'); - if (headers_sent()) { - $this->Error('Some data has already been output to browser, can\'t send PDF file'); - } - header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); - //header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 - header('Pragma: public'); - header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past - header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); - // force download dialog - if (strpos(php_sapi_name(), 'cgi') === false) { - header('Content-Type: application/force-download'); - header('Content-Type: application/octet-stream', false); - header('Content-Type: application/download', false); - header('Content-Type: application/pdf', false); - } else { - header('Content-Type: application/pdf'); - } - // use the Content-Disposition header to supply a recommended filename - header('Content-Disposition: attachment; filename="'.basename($name).'"'); - header('Content-Transfer-Encoding: binary'); - TCPDF_STATIC::sendOutputData($this->getBuffer(), $this->bufferlen); - break; - } - case 'F': - case 'FI': - case 'FD': { - // save PDF to a local file - $f = TCPDF_STATIC::fopenLocal($name, 'wb'); - if (!$f) { - $this->Error('Unable to create output file: '.$name); - } - fwrite($f, $this->getBuffer(), $this->bufferlen); - fclose($f); - if ($dest == 'FI') { - // send headers to browser - header('Content-Type: application/pdf'); - header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); - //header('Cache-Control: public, must-revalidate, max-age=0'); // HTTP/1.1 - header('Pragma: public'); - header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past - header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); - header('Content-Disposition: inline; filename="'.basename($name).'"'); - TCPDF_STATIC::sendOutputData(file_get_contents($name), filesize($name)); - } elseif ($dest == 'FD') { - // send headers to browser - if (ob_get_contents()) { - $this->Error('Some data has already been output, can\'t send PDF file'); - } - header('Content-Description: File Transfer'); - if (headers_sent()) { - $this->Error('Some data has already been output to browser, can\'t send PDF file'); - } - header('Cache-Control: private, must-revalidate, post-check=0, pre-check=0, max-age=1'); - header('Pragma: public'); - header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // Date in the past - header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); - // force download dialog - if (strpos(php_sapi_name(), 'cgi') === false) { - header('Content-Type: application/force-download'); - header('Content-Type: application/octet-stream', false); - header('Content-Type: application/download', false); - header('Content-Type: application/pdf', false); - } else { - header('Content-Type: application/pdf'); - } - // use the Content-Disposition header to supply a recommended filename - header('Content-Disposition: attachment; filename="'.basename($name).'"'); - header('Content-Transfer-Encoding: binary'); - TCPDF_STATIC::sendOutputData(file_get_contents($name), filesize($name)); - } - break; - } - case 'E': { - // return PDF as base64 mime multi-part email attachment (RFC 2045) - $retval = 'Content-Type: application/pdf;'."\r\n"; - $retval .= ' name="'.$name.'"'."\r\n"; - $retval .= 'Content-Transfer-Encoding: base64'."\r\n"; - $retval .= 'Content-Disposition: attachment;'."\r\n"; - $retval .= ' filename="'.$name.'"'."\r\n\r\n"; - $retval .= chunk_split(base64_encode($this->getBuffer()), 76, "\r\n"); - return $retval; - } - case 'S': { - // returns PDF as a string - return $this->getBuffer(); - } - default: { - $this->Error('Incorrect output destination: '.$dest); - } - } - return ''; - } - - protected static $cleaned_ids = array(); - /** - * Unset all class variables except the following critical variables. - * @param boolean $destroyall if true destroys all class variables, otherwise preserves critical variables. - * @param boolean $preserve_objcopy if true preserves the objcopy variable - * @public - * @since 4.5.016 (2009-02-24) - */ - public function _destroy($destroyall=false, $preserve_objcopy=false) { - if (isset(self::$cleaned_ids[$this->file_id])) { - $destroyall = false; - } - if ($destroyall AND !$preserve_objcopy && isset($this->file_id)) { - self::$cleaned_ids[$this->file_id] = true; - // remove all temporary files - if ($handle = @opendir(K_PATH_CACHE)) { - while ( false !== ( $file_name = readdir( $handle ) ) ) { - if (strpos($file_name, '__tcpdf_'.$this->file_id.'_') === 0) { - unlink(K_PATH_CACHE.$file_name); - } - } - closedir($handle); - } - if (isset($this->imagekeys)) { - foreach($this->imagekeys as $file) { - if (strpos($file, K_PATH_CACHE) === 0 && TCPDF_STATIC::file_exists($file)) { - @unlink($file); - } - } - } - } - $preserve = array( - 'file_id', - 'state', - 'bufferlen', - 'buffer', - 'cached_files', - 'imagekeys', - 'sign', - 'signature_data', - 'signature_max_length', - 'byterange_string', - 'tsa_timestamp', - 'tsa_data' - ); - foreach (array_keys(get_object_vars($this)) as $val) { - if ($destroyall OR !in_array($val, $preserve)) { - if ((!$preserve_objcopy OR ($val != 'objcopy')) AND ($val != 'file_id') AND isset($this->$val)) { - unset($this->$val); - } - } - } - } - - /** - * Check for locale-related bug - * @protected - */ - protected function _dochecks() { - //Check for locale-related bug - if (1.1 == 1) { - $this->Error('Don\'t alter the locale before including class file'); - } - //Check for decimal separator - if (sprintf('%.1F', 1.0) != '1.0') { - setlocale(LC_NUMERIC, 'C'); - } - } - - /** - * Return an array containing variations for the basic page number alias. - * @param string $a Base alias. - * @return array of page number aliases - * @protected - */ - protected function getInternalPageNumberAliases($a= '') { - $alias = array(); - // build array of Unicode + ASCII variants (the order is important) - $alias = array('u' => array(), 'a' => array()); - $u = '{'.$a.'}'; - $alias['u'][] = TCPDF_STATIC::_escape($u); - if ($this->isunicode) { - $alias['u'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::UTF8ToLatin1($u, $this->isunicode, $this->CurrentFont)); - $alias['u'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::utf8StrRev($u, false, $this->tmprtl, $this->isunicode, $this->CurrentFont)); - $alias['a'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::UTF8ToLatin1($a, $this->isunicode, $this->CurrentFont)); - $alias['a'][] = TCPDF_STATIC::_escape(TCPDF_FONTS::utf8StrRev($a, false, $this->tmprtl, $this->isunicode, $this->CurrentFont)); - } - $alias['a'][] = TCPDF_STATIC::_escape($a); - return $alias; - } - - /** - * Return an array containing all internal page aliases. - * @return array of page number aliases - * @protected - */ - protected function getAllInternalPageNumberAliases() { - $basic_alias = array(TCPDF_STATIC::$alias_tot_pages, TCPDF_STATIC::$alias_num_page, TCPDF_STATIC::$alias_group_tot_pages, TCPDF_STATIC::$alias_group_num_page, TCPDF_STATIC::$alias_right_shift); - $pnalias = array(); - foreach($basic_alias as $k => $a) { - $pnalias[$k] = $this->getInternalPageNumberAliases($a); - } - return $pnalias; - } - - /** - * Replace right shift page number aliases with spaces to correct right alignment. - * This works perfectly only when using monospaced fonts. - * @param string $page Page content. - * @param array $aliases Array of page aliases. - * @param int $diff initial difference to add. - * @return string replaced page content. - * @protected - */ - protected function replaceRightShiftPageNumAliases($page, $aliases, $diff) { - foreach ($aliases as $type => $alias) { - foreach ($alias as $a) { - // find position of compensation factor - $startnum = (strpos($a, ':') + 1); - $a = substr($a, 0, $startnum); - if (($pos = strpos($page, $a)) !== false) { - // end of alias - $endnum = strpos($page, '}', $pos); - // string to be replaced - $aa = substr($page, $pos, ($endnum - $pos + 1)); - // get compensation factor - $ratio = substr($page, ($pos + $startnum), ($endnum - $pos - $startnum)); - $ratio = preg_replace('/[^0-9\.]/', '', $ratio); - $ratio = floatval($ratio); - if ($type == 'u') { - $chrdiff = floor(($diff + 12) * $ratio); - $shift = str_repeat(' ', $chrdiff); - $shift = TCPDF_FONTS::UTF8ToUTF16BE($shift, false, $this->isunicode, $this->CurrentFont); - } else { - $chrdiff = floor(($diff + 11) * $ratio); - $shift = str_repeat(' ', $chrdiff); - } - $page = str_replace($aa, $shift, $page); - } - } - } - return $page; - } - - /** - * Set page boxes to be included on page descriptions. - * @param array $boxes Array of page boxes to set on document: ('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'). - * @protected - */ - protected function setPageBoxTypes($boxes) { - $this->page_boxes = array(); - foreach ($boxes as $box) { - if (in_array($box, TCPDF_STATIC::$pageboxes)) { - $this->page_boxes[] = $box; - } - } - } - - /** - * Output pages (and replace page number aliases). - * @protected - */ - protected function _putpages() { - $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; - // get internal aliases for page numbers - $pnalias = $this->getAllInternalPageNumberAliases(); - $num_pages = $this->numpages; - $ptpa = TCPDF_STATIC::formatPageNumber(($this->starting_page_number + $num_pages - 1)); - $ptpu = TCPDF_FONTS::UTF8ToUTF16BE($ptpa, false, $this->isunicode, $this->CurrentFont); - $ptp_num_chars = $this->GetNumChars($ptpa); - $pagegroupnum = 0; - $groupnum = 0; - $ptgu = 1; - $ptga = 1; - $ptg_num_chars = 1; - for ($n = 1; $n <= $num_pages; ++$n) { - // get current page - $temppage = $this->getPageBuffer($n); - $pagelen = strlen($temppage); - // set replacements for total pages number - $pnpa = TCPDF_STATIC::formatPageNumber(($this->starting_page_number + $n - 1)); - $pnpu = TCPDF_FONTS::UTF8ToUTF16BE($pnpa, false, $this->isunicode, $this->CurrentFont); - $pnp_num_chars = $this->GetNumChars($pnpa); - $pdiff = 0; // difference used for right shift alignment of page numbers - $gdiff = 0; // difference used for right shift alignment of page group numbers - if (!empty($this->pagegroups)) { - if (isset($this->newpagegroup[$n])) { - $pagegroupnum = 0; - ++$groupnum; - $ptga = TCPDF_STATIC::formatPageNumber($this->pagegroups[$groupnum]); - $ptgu = TCPDF_FONTS::UTF8ToUTF16BE($ptga, false, $this->isunicode, $this->CurrentFont); - $ptg_num_chars = $this->GetNumChars($ptga); - } - ++$pagegroupnum; - $pnga = TCPDF_STATIC::formatPageNumber($pagegroupnum); - $pngu = TCPDF_FONTS::UTF8ToUTF16BE($pnga, false, $this->isunicode, $this->CurrentFont); - $png_num_chars = $this->GetNumChars($pnga); - // replace page numbers - $replace = array(); - $replace[] = array($ptgu, $ptg_num_chars, 9, $pnalias[2]['u']); - $replace[] = array($ptga, $ptg_num_chars, 7, $pnalias[2]['a']); - $replace[] = array($pngu, $png_num_chars, 9, $pnalias[3]['u']); - $replace[] = array($pnga, $png_num_chars, 7, $pnalias[3]['a']); - list($temppage, $gdiff) = TCPDF_STATIC::replacePageNumAliases($temppage, $replace, $gdiff); - } - // replace page numbers - $replace = array(); - $replace[] = array($ptpu, $ptp_num_chars, 9, $pnalias[0]['u']); - $replace[] = array($ptpa, $ptp_num_chars, 7, $pnalias[0]['a']); - $replace[] = array($pnpu, $pnp_num_chars, 9, $pnalias[1]['u']); - $replace[] = array($pnpa, $pnp_num_chars, 7, $pnalias[1]['a']); - list($temppage, $pdiff) = TCPDF_STATIC::replacePageNumAliases($temppage, $replace, $pdiff); - // replace right shift alias - $temppage = $this->replaceRightShiftPageNumAliases($temppage, $pnalias[4], max($pdiff, $gdiff)); - // replace EPS marker - $temppage = str_replace($this->epsmarker, '', $temppage); - //Page - $this->page_obj_id[$n] = $this->_newobj(); - $out = '<<'; - $out .= ' /Type /Page'; - $out .= ' /Parent 1 0 R'; - if (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A')) { - $out .= ' /LastModified '.$this->_datestring(0, $this->doc_modification_timestamp); - } - $out .= ' /Resources 2 0 R'; - foreach ($this->page_boxes as $box) { - $out .= ' /'.$box; - $out .= sprintf(' [%F %F %F %F]', $this->pagedim[$n][$box]['llx'], $this->pagedim[$n][$box]['lly'], $this->pagedim[$n][$box]['urx'], $this->pagedim[$n][$box]['ury']); - } - if (isset($this->pagedim[$n]['BoxColorInfo']) AND !empty($this->pagedim[$n]['BoxColorInfo'])) { - $out .= ' /BoxColorInfo <<'; - foreach ($this->page_boxes as $box) { - if (isset($this->pagedim[$n]['BoxColorInfo'][$box])) { - $out .= ' /'.$box.' <<'; - if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['C'])) { - $color = $this->pagedim[$n]['BoxColorInfo'][$box]['C']; - $out .= ' /C ['; - $out .= sprintf(' %F %F %F', ($color[0] / 255), ($color[1] / 255), ($color[2] / 255)); - $out .= ' ]'; - } - if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['W'])) { - $out .= ' /W '.($this->pagedim[$n]['BoxColorInfo'][$box]['W'] * $this->k); - } - if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['S'])) { - $out .= ' /S /'.$this->pagedim[$n]['BoxColorInfo'][$box]['S']; - } - if (isset($this->pagedim[$n]['BoxColorInfo'][$box]['D'])) { - $dashes = $this->pagedim[$n]['BoxColorInfo'][$box]['D']; - $out .= ' /D ['; - foreach ($dashes as $dash) { - $out .= sprintf(' %F', ($dash * $this->k)); - } - $out .= ' ]'; - } - $out .= ' >>'; - } - } - $out .= ' >>'; - } - $out .= ' /Contents '.($this->n + 1).' 0 R'; - $out .= ' /Rotate '.$this->pagedim[$n]['Rotate']; - if (!$this->pdfa_mode || $this->pdfa_version >= 2) { - $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceRGB >>'; - } - if (isset($this->pagedim[$n]['trans']) AND !empty($this->pagedim[$n]['trans'])) { - // page transitions - if (isset($this->pagedim[$n]['trans']['Dur'])) { - $out .= ' /Dur '.$this->pagedim[$n]['trans']['Dur']; - } - $out .= ' /Trans <<'; - $out .= ' /Type /Trans'; - if (isset($this->pagedim[$n]['trans']['S'])) { - $out .= ' /S /'.$this->pagedim[$n]['trans']['S']; - } - if (isset($this->pagedim[$n]['trans']['D'])) { - $out .= ' /D '.$this->pagedim[$n]['trans']['D']; - } - if (isset($this->pagedim[$n]['trans']['Dm'])) { - $out .= ' /Dm /'.$this->pagedim[$n]['trans']['Dm']; - } - if (isset($this->pagedim[$n]['trans']['M'])) { - $out .= ' /M /'.$this->pagedim[$n]['trans']['M']; - } - if (isset($this->pagedim[$n]['trans']['Di'])) { - $out .= ' /Di '.$this->pagedim[$n]['trans']['Di']; - } - if (isset($this->pagedim[$n]['trans']['SS'])) { - $out .= ' /SS '.$this->pagedim[$n]['trans']['SS']; - } - if (isset($this->pagedim[$n]['trans']['B'])) { - $out .= ' /B '.$this->pagedim[$n]['trans']['B']; - } - $out .= ' >>'; - } - $out .= $this->_getannotsrefs($n); - $out .= ' /PZ '.$this->pagedim[$n]['PZ']; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - //Page content - $p = ($this->compress) ? gzcompress($temppage) : $temppage; - $this->_newobj(); - $p = $this->_getrawstream($p); - $this->_out('<<'.$filter.'/Length '.strlen($p).'>> stream'."\n".$p."\n".'endstream'."\n".'endobj'); - } - //Pages root - $out = $this->_getobj(1)."\n"; - $out .= '<< /Type /Pages /Kids ['; - foreach($this->page_obj_id as $page_obj) { - $out .= ' '.$page_obj.' 0 R'; - } - $out .= ' ] /Count '.$num_pages.' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - - /** - * Get references to page annotations. - * @param int $n page number - * @return string - * @protected - * @author Nicola Asuni - * @since 5.0.010 (2010-05-17) - */ - protected function _getannotsrefs($n) { - if (!(isset($this->PageAnnots[$n]) OR ($this->sign AND isset($this->signature_data['cert_type'])))) { - return ''; - } - $out = ' /Annots ['; - if (isset($this->PageAnnots[$n])) { - foreach ($this->PageAnnots[$n] as $key => $val) { - if (!in_array($val['n'], $this->radio_groups)) { - $out .= ' '.$val['n'].' 0 R'; - } - } - // add radiobutton groups - if (isset($this->radiobutton_groups[$n])) { - foreach ($this->radiobutton_groups[$n] as $key => $data) { - if (isset($data['n'])) { - $out .= ' '.$data['n'].' 0 R'; - } - } - } - } - if ($this->sign AND ($n == $this->signature_appearance['page']) AND isset($this->signature_data['cert_type'])) { - // set reference for signature object - $out .= ' '.$this->sig_obj_id.' 0 R'; - } - if (!empty($this->empty_signature_appearance)) { - foreach ($this->empty_signature_appearance as $esa) { - if ($esa['page'] == $n) { - // set reference for empty signature objects - $out .= ' '.$esa['objid'].' 0 R'; - } - } - } - $out .= ' ]'; - return $out; - } - - /** - * Output annotations objects for all pages. - * !!! THIS METHOD IS NOT YET COMPLETED !!! - * See section 12.5 of PDF 32000_2008 reference. - * @protected - * @author Nicola Asuni - * @since 4.0.018 (2008-08-06) - */ - protected function _putannotsobjs() { - // reset object counter - for ($n=1; $n <= $this->numpages; ++$n) { - if (isset($this->PageAnnots[$n])) { - // set page annotations - foreach ($this->PageAnnots[$n] as $key => $pl) { - $annot_obj_id = $this->PageAnnots[$n][$key]['n']; - // create annotation object for grouping radiobuttons - if (isset($this->radiobutton_groups[$n][$pl['txt']]) AND is_array($this->radiobutton_groups[$n][$pl['txt']])) { - $radio_button_obj_id = $this->radiobutton_groups[$n][$pl['txt']]['n']; - $annots = '<<'; - $annots .= ' /Type /Annot'; - $annots .= ' /Subtype /Widget'; - $annots .= ' /Rect [0 0 0 0]'; - if ($this->radiobutton_groups[$n][$pl['txt']]['#readonly#']) { - // read only - $annots .= ' /F 68'; - $annots .= ' /Ff 49153'; - } else { - $annots .= ' /F 4'; // default print for PDF/A - $annots .= ' /Ff 49152'; - } - $annots .= ' /T '.$this->_datastring($pl['txt'], $radio_button_obj_id); - if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) { - $annots .= ' /TU '.$this->_datastring($pl['opt']['tu'], $radio_button_obj_id); - } - $annots .= ' /FT /Btn'; - $annots .= ' /Kids ['; - $defval = ''; - foreach ($this->radiobutton_groups[$n][$pl['txt']] as $key => $data) { - if (isset($data['kid'])) { - $annots .= ' '.$data['kid'].' 0 R'; - if ($data['def'] !== 'Off') { - $defval = $data['def']; - } - } - } - $annots .= ' ]'; - if (!empty($defval)) { - $annots .= ' /V /'.$defval; - } - $annots .= ' >>'; - $this->_out($this->_getobj($radio_button_obj_id)."\n".$annots."\n".'endobj'); - $this->form_obj_id[] = $radio_button_obj_id; - // store object id to be used on Parent entry of Kids - $this->radiobutton_groups[$n][$pl['txt']] = $radio_button_obj_id; - } - $formfield = false; - $pl['opt'] = array_change_key_case($pl['opt'], CASE_LOWER); - $a = $pl['x'] * $this->k; - $b = $this->pagedim[$n]['h'] - (($pl['y'] + $pl['h']) * $this->k); - $c = $pl['w'] * $this->k; - $d = $pl['h'] * $this->k; - $rect = sprintf('%F %F %F %F', $a, $b, $a+$c, $b+$d); - // create new annotation object - $annots = '<_textstring($pl['txt'], $annot_obj_id); - } - $annots .= ' /P '.$this->page_obj_id[$n].' 0 R'; - $annots .= ' /NM '.$this->_datastring(sprintf('%04u-%04u', $n, $key), $annot_obj_id); - $annots .= ' /M '.$this->_datestring($annot_obj_id, $this->doc_modification_timestamp); - if (isset($pl['opt']['f'])) { - $fval = 0; - if (is_array($pl['opt']['f'])) { - foreach ($pl['opt']['f'] as $f) { - switch (strtolower($f)) { - case 'invisible': { - $fval += 1 << 0; - break; - } - case 'hidden': { - $fval += 1 << 1; - break; - } - case 'print': { - $fval += 1 << 2; - break; - } - case 'nozoom': { - $fval += 1 << 3; - break; - } - case 'norotate': { - $fval += 1 << 4; - break; - } - case 'noview': { - $fval += 1 << 5; - break; - } - case 'readonly': { - $fval += 1 << 6; - break; - } - case 'locked': { - $fval += 1 << 8; - break; - } - case 'togglenoview': { - $fval += 1 << 9; - break; - } - case 'lockedcontents': { - $fval += 1 << 10; - break; - } - default: { - break; - } - } - } - } else { - $fval = intval($pl['opt']['f']); - } - } else { - $fval = 4; - } - if ($this->pdfa_mode) { - // force print flag for PDF/A mode - $fval |= 4; - } - $annots .= ' /F '.intval($fval); - if (isset($pl['opt']['as']) AND is_string($pl['opt']['as'])) { - $annots .= ' /AS /'.$pl['opt']['as']; - } - if (isset($pl['opt']['ap'])) { - // appearance stream - $annots .= ' /AP <<'; - if (is_array($pl['opt']['ap'])) { - foreach ($pl['opt']['ap'] as $apmode => $apdef) { - // $apmode can be: n = normal; r = rollover; d = down; - $annots .= ' /'.strtoupper($apmode); - if (is_array($apdef)) { - $annots .= ' <<'; - foreach ($apdef as $apstate => $stream) { - // reference to XObject that define the appearance for this mode-state - $apsobjid = $this->_putAPXObject($c, $d, $stream); - $annots .= ' /'.$apstate.' '.$apsobjid.' 0 R'; - } - $annots .= ' >>'; - } else { - // reference to XObject that define the appearance for this mode - $apsobjid = $this->_putAPXObject($c, $d, $apdef); - $annots .= ' '.$apsobjid.' 0 R'; - } - } - } else { - $annots .= $pl['opt']['ap']; - } - $annots .= ' >>'; - } - if (isset($pl['opt']['bs']) AND (is_array($pl['opt']['bs']))) { - $annots .= ' /BS <<'; - $annots .= ' /Type /Border'; - if (isset($pl['opt']['bs']['w'])) { - $annots .= ' /W '.intval($pl['opt']['bs']['w']); - } - $bstyles = array('S', 'D', 'B', 'I', 'U'); - if (isset($pl['opt']['bs']['s']) AND in_array($pl['opt']['bs']['s'], $bstyles)) { - $annots .= ' /S /'.$pl['opt']['bs']['s']; - } - if (isset($pl['opt']['bs']['d']) AND (is_array($pl['opt']['bs']['d']))) { - $annots .= ' /D ['; - foreach ($pl['opt']['bs']['d'] as $cord) { - $annots .= ' '.intval($cord); - } - $annots .= ']'; - } - $annots .= ' >>'; - } else { - $annots .= ' /Border ['; - if (isset($pl['opt']['border']) AND (count($pl['opt']['border']) >= 3)) { - $annots .= intval($pl['opt']['border'][0]).' '; - $annots .= intval($pl['opt']['border'][1]).' '; - $annots .= intval($pl['opt']['border'][2]); - if (isset($pl['opt']['border'][3]) AND is_array($pl['opt']['border'][3])) { - $annots .= ' ['; - foreach ($pl['opt']['border'][3] as $dash) { - $annots .= intval($dash).' '; - } - $annots .= ']'; - } - } else { - $annots .= '0 0 0'; - } - $annots .= ']'; - } - if (isset($pl['opt']['be']) AND (is_array($pl['opt']['be']))) { - $annots .= ' /BE <<'; - $bstyles = array('S', 'C'); - if (isset($pl['opt']['be']['s']) AND in_array($pl['opt']['be']['s'], $bstyles)) { - $annots .= ' /S /'.$pl['opt']['bs']['s']; - } else { - $annots .= ' /S /S'; - } - if (isset($pl['opt']['be']['i']) AND ($pl['opt']['be']['i'] >= 0) AND ($pl['opt']['be']['i'] <= 2)) { - $annots .= ' /I '.sprintf(' %F', $pl['opt']['be']['i']); - } - $annots .= '>>'; - } - if (isset($pl['opt']['c']) AND (is_array($pl['opt']['c'])) AND !empty($pl['opt']['c'])) { - $annots .= ' /C '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['c']); - } - //$annots .= ' /StructParent '; - //$annots .= ' /OC '; - $markups = array('text', 'freetext', 'line', 'square', 'circle', 'polygon', 'polyline', 'highlight', 'underline', 'squiggly', 'strikeout', 'stamp', 'caret', 'ink', 'fileattachment', 'sound'); - if (in_array(strtolower($pl['opt']['subtype']), $markups)) { - // this is a markup type - if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { - $annots .= ' /T '.$this->_textstring($pl['opt']['t'], $annot_obj_id); - } - //$annots .= ' /Popup '; - if (isset($pl['opt']['ca'])) { - $annots .= ' /CA '.sprintf('%F', floatval($pl['opt']['ca'])); - } - if (isset($pl['opt']['rc'])) { - $annots .= ' /RC '.$this->_textstring($pl['opt']['rc'], $annot_obj_id); - } - $annots .= ' /CreationDate '.$this->_datestring($annot_obj_id, $this->doc_creation_timestamp); - //$annots .= ' /IRT '; - if (isset($pl['opt']['subj'])) { - $annots .= ' /Subj '.$this->_textstring($pl['opt']['subj'], $annot_obj_id); - } - //$annots .= ' /RT '; - //$annots .= ' /IT '; - //$annots .= ' /ExData '; - } - $lineendings = array('Square', 'Circle', 'Diamond', 'OpenArrow', 'ClosedArrow', 'None', 'Butt', 'ROpenArrow', 'RClosedArrow', 'Slash'); - // Annotation types - switch (strtolower($pl['opt']['subtype'])) { - case 'text': { - if (isset($pl['opt']['open'])) { - $annots .= ' /Open '. (strtolower($pl['opt']['open']) == 'true' ? 'true' : 'false'); - } - $iconsapp = array('Comment', 'Help', 'Insert', 'Key', 'NewParagraph', 'Note', 'Paragraph'); - if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { - $annots .= ' /Name /'.$pl['opt']['name']; - } else { - $annots .= ' /Name /Note'; - } - $hasStateModel = isset($pl['opt']['statemodel']); - $hasState = isset($pl['opt']['state']); - $statemodels = array('Marked', 'Review'); - if (!$hasStateModel && !$hasState) { - break; - } - if ($hasStateModel AND in_array($pl['opt']['statemodel'], $statemodels)) { - $annots .= ' /StateModel /'.$pl['opt']['statemodel']; - } else { - $pl['opt']['statemodel'] = 'Marked'; - $annots .= ' /StateModel /'.$pl['opt']['statemodel']; - } - if ($pl['opt']['statemodel'] == 'Marked') { - $states = array('Accepted', 'Unmarked'); - } else { - $states = array('Accepted', 'Rejected', 'Cancelled', 'Completed', 'None'); - } - if ($hasState AND in_array($pl['opt']['state'], $states)) { - $annots .= ' /State /'.$pl['opt']['state']; - } else { - if ($pl['opt']['statemodel'] == 'Marked') { - $annots .= ' /State /Unmarked'; - } else { - $annots .= ' /State /None'; - } - } - break; - } - case 'link': { - if (is_string($pl['txt']) && !empty($pl['txt'])) { - if ($pl['txt'][0] == '#') { - // internal destination - $annots .= ' /A <
            >'; - } elseif ($pl['txt'][0] == '%') { - // embedded PDF file - $filename = basename(substr($pl['txt'], 1)); - $annots .= ' /A << /S /GoToE /D [0 /Fit] /NewWindow true /T << /R /C /P '.($n - 1).' /A '.$this->embeddedfiles[$filename]['a'].' >> >>'; - } elseif ($pl['txt'][0] == '*') { - // embedded generic file - $filename = basename(substr($pl['txt'], 1)); - $jsa = 'var D=event.target.doc;var MyData=D.dataObjects;for (var i in MyData) if (MyData[i].path=="'.$filename.'") D.exportDataObject( { cName : MyData[i].name, nLaunch : 2});'; - $annots .= ' /A << /S /JavaScript /JS '.$this->_textstring($jsa, $annot_obj_id).'>>'; - } else { - $parsedUrl = parse_url($pl['txt']); - if (empty($parsedUrl['scheme']) AND (!empty($parsedUrl['path']) && strtolower(substr($parsedUrl['path'], -4)) == '.pdf')) { - // relative link to a PDF file - $dest = '[0 /Fit]'; // default page 0 - if (!empty($parsedUrl['fragment'])) { - // check for named destination - $tmp = explode('=', $parsedUrl['fragment']); - $dest = '('.((count($tmp) == 2) ? $tmp[1] : $tmp[0]).')'; - } - $annots .= ' /A <
            _datastring($this->unhtmlentities($parsedUrl['path']), $annot_obj_id).' /NewWindow true>>'; - } else { - // external URI link - $annots .= ' /A <
            _datastring($this->unhtmlentities($pl['txt']), $annot_obj_id).'>>'; - } - } - } elseif (isset($this->links[$pl['txt']])) { - // internal link ID - $l = $this->links[$pl['txt']]; - if (isset($this->page_obj_id[($l['p'])])) { - $annots .= sprintf(' /Dest [%u 0 R /XYZ 0 %F null]', $this->page_obj_id[($l['p'])], ($this->pagedim[$l['p']]['h'] - ($l['y'] * $this->k))); - } - } - $hmodes = array('N', 'I', 'O', 'P'); - if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmodes)) { - $annots .= ' /H /'.$pl['opt']['h']; - } else { - $annots .= ' /H /I'; - } - //$annots .= ' /PA '; - //$annots .= ' /Quadpoints '; - break; - } - case 'freetext': { - if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) { - $annots .= ' /DA ('.$pl['opt']['da'].')'; - } - if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) { - $annots .= ' /Q '.intval($pl['opt']['q']); - } - if (isset($pl['opt']['rc'])) { - $annots .= ' /RC '.$this->_textstring($pl['opt']['rc'], $annot_obj_id); - } - if (isset($pl['opt']['ds'])) { - $annots .= ' /DS '.$this->_textstring($pl['opt']['ds'], $annot_obj_id); - } - if (isset($pl['opt']['cl']) AND is_array($pl['opt']['cl'])) { - $annots .= ' /CL ['; - foreach ($pl['opt']['cl'] as $cl) { - $annots .= sprintf('%F ', $cl * $this->k); - } - $annots .= ']'; - } - $tfit = array('FreeText', 'FreeTextCallout', 'FreeTextTypeWriter'); - if (isset($pl['opt']['it']) AND in_array($pl['opt']['it'], $tfit)) { - $annots .= ' /IT /'.$pl['opt']['it']; - } - if (isset($pl['opt']['rd']) AND is_array($pl['opt']['rd'])) { - $l = $pl['opt']['rd'][0] * $this->k; - $r = $pl['opt']['rd'][1] * $this->k; - $t = $pl['opt']['rd'][2] * $this->k; - $b = $pl['opt']['rd'][3] * $this->k; - $annots .= ' /RD ['.sprintf('%F %F %F %F', $l, $r, $t, $b).']'; - } - if (isset($pl['opt']['le']) AND in_array($pl['opt']['le'], $lineendings)) { - $annots .= ' /LE /'.$pl['opt']['le']; - } - break; - } - case 'line': { - break; - } - case 'square': { - break; - } - case 'circle': { - break; - } - case 'polygon': { - break; - } - case 'polyline': { - break; - } - case 'highlight': { - break; - } - case 'underline': { - break; - } - case 'squiggly': { - break; - } - case 'strikeout': { - break; - } - case 'stamp': { - break; - } - case 'caret': { - break; - } - case 'ink': { - break; - } - case 'popup': { - break; - } - case 'fileattachment': { - if ($this->pdfa_mode && $this->pdfa_version != 3) { - // embedded files are not allowed in PDF/A mode version 1 and 2 - break; - } - if (!isset($pl['opt']['fs'])) { - break; - } - $filename = basename($pl['opt']['fs']); - if (isset($this->embeddedfiles[$filename]['f'])) { - $annots .= ' /FS '.$this->embeddedfiles[$filename]['f'].' 0 R'; - $iconsapp = array('Graph', 'Paperclip', 'PushPin', 'Tag'); - if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { - $annots .= ' /Name /'.$pl['opt']['name']; - } else { - $annots .= ' /Name /PushPin'; - } - // index (zero-based) of the annotation in the Annots array of this page - $this->embeddedfiles[$filename]['a'] = $key; - } - break; - } - case 'sound': { - if (!isset($pl['opt']['fs'])) { - break; - } - $filename = basename($pl['opt']['fs']); - if (isset($this->embeddedfiles[$filename]['f'])) { - // ... TO BE COMPLETED ... - // /R /C /B /E /CO /CP - $annots .= ' /Sound '.$this->embeddedfiles[$filename]['f'].' 0 R'; - $iconsapp = array('Speaker', 'Mic'); - if (isset($pl['opt']['name']) AND in_array($pl['opt']['name'], $iconsapp)) { - $annots .= ' /Name /'.$pl['opt']['name']; - } else { - $annots .= ' /Name /Speaker'; - } - } - break; - } - case 'movie': { - break; - } - case 'widget': { - $hmode = array('N', 'I', 'O', 'P', 'T'); - if (isset($pl['opt']['h']) AND in_array($pl['opt']['h'], $hmode)) { - $annots .= ' /H /'.$pl['opt']['h']; - } - if (isset($pl['opt']['mk']) AND (is_array($pl['opt']['mk'])) AND !empty($pl['opt']['mk'])) { - $annots .= ' /MK <<'; - if (isset($pl['opt']['mk']['r'])) { - $annots .= ' /R '.$pl['opt']['mk']['r']; - } - if (isset($pl['opt']['mk']['bc']) AND (is_array($pl['opt']['mk']['bc']))) { - $annots .= ' /BC '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['mk']['bc']); - } - if (isset($pl['opt']['mk']['bg']) AND (is_array($pl['opt']['mk']['bg']))) { - $annots .= ' /BG '.TCPDF_COLORS::getColorStringFromArray($pl['opt']['mk']['bg']); - } - if (isset($pl['opt']['mk']['ca'])) { - $annots .= ' /CA '.$pl['opt']['mk']['ca']; - } - if (isset($pl['opt']['mk']['rc'])) { - $annots .= ' /RC '.$pl['opt']['mk']['rc']; - } - if (isset($pl['opt']['mk']['ac'])) { - $annots .= ' /AC '.$pl['opt']['mk']['ac']; - } - if (isset($pl['opt']['mk']['i'])) { - $info = $this->getImageBuffer($pl['opt']['mk']['i']); - if ($info !== false) { - $annots .= ' /I '.$info['n'].' 0 R'; - } - } - if (isset($pl['opt']['mk']['ri'])) { - $info = $this->getImageBuffer($pl['opt']['mk']['ri']); - if ($info !== false) { - $annots .= ' /RI '.$info['n'].' 0 R'; - } - } - if (isset($pl['opt']['mk']['ix'])) { - $info = $this->getImageBuffer($pl['opt']['mk']['ix']); - if ($info !== false) { - $annots .= ' /IX '.$info['n'].' 0 R'; - } - } - if (isset($pl['opt']['mk']['if']) AND (is_array($pl['opt']['mk']['if'])) AND !empty($pl['opt']['mk']['if'])) { - $annots .= ' /IF <<'; - $if_sw = array('A', 'B', 'S', 'N'); - if (isset($pl['opt']['mk']['if']['sw']) AND in_array($pl['opt']['mk']['if']['sw'], $if_sw)) { - $annots .= ' /SW /'.$pl['opt']['mk']['if']['sw']; - } - $if_s = array('A', 'P'); - if (isset($pl['opt']['mk']['if']['s']) AND in_array($pl['opt']['mk']['if']['s'], $if_s)) { - $annots .= ' /S /'.$pl['opt']['mk']['if']['s']; - } - if (isset($pl['opt']['mk']['if']['a']) AND (is_array($pl['opt']['mk']['if']['a'])) AND !empty($pl['opt']['mk']['if']['a'])) { - $annots .= sprintf(' /A [%F %F]', $pl['opt']['mk']['if']['a'][0], $pl['opt']['mk']['if']['a'][1]); - } - if (isset($pl['opt']['mk']['if']['fb']) AND ($pl['opt']['mk']['if']['fb'])) { - $annots .= ' /FB true'; - } - $annots .= '>>'; - } - if (isset($pl['opt']['mk']['tp']) AND ($pl['opt']['mk']['tp'] >= 0) AND ($pl['opt']['mk']['tp'] <= 6)) { - $annots .= ' /TP '.intval($pl['opt']['mk']['tp']); - } - $annots .= '>>'; - } // end MK - // --- Entries for field dictionaries --- - if (isset($this->radiobutton_groups[$n][$pl['txt']])) { - // set parent - $annots .= ' /Parent '.$this->radiobutton_groups[$n][$pl['txt']].' 0 R'; - } - if (isset($pl['opt']['t']) AND is_string($pl['opt']['t'])) { - $annots .= ' /T '.$this->_datastring($pl['opt']['t'], $annot_obj_id); - } - if (isset($pl['opt']['tu']) AND is_string($pl['opt']['tu'])) { - $annots .= ' /TU '.$this->_datastring($pl['opt']['tu'], $annot_obj_id); - } - if (isset($pl['opt']['tm']) AND is_string($pl['opt']['tm'])) { - $annots .= ' /TM '.$this->_datastring($pl['opt']['tm'], $annot_obj_id); - } - if (isset($pl['opt']['ff'])) { - if (is_array($pl['opt']['ff'])) { - // array of bit settings - $flag = 0; - foreach($pl['opt']['ff'] as $val) { - $flag += 1 << ($val - 1); - } - } else { - $flag = intval($pl['opt']['ff']); - } - $annots .= ' /Ff '.$flag; - } - if (isset($pl['opt']['maxlen'])) { - $annots .= ' /MaxLen '.intval($pl['opt']['maxlen']); - } - if (isset($pl['opt']['v'])) { - $annots .= ' /V'; - if (is_array($pl['opt']['v'])) { - foreach ($pl['opt']['v'] AS $optval) { - if (is_float($optval)) { - $optval = sprintf('%F', $optval); - } - $annots .= ' '.$optval; - } - } else { - $annots .= ' '.$this->_textstring($pl['opt']['v'], $annot_obj_id); - } - } - if (isset($pl['opt']['dv'])) { - $annots .= ' /DV'; - if (is_array($pl['opt']['dv'])) { - foreach ($pl['opt']['dv'] AS $optval) { - if (is_float($optval)) { - $optval = sprintf('%F', $optval); - } - $annots .= ' '.$optval; - } - } else { - $annots .= ' '.$this->_textstring($pl['opt']['dv'], $annot_obj_id); - } - } - if (isset($pl['opt']['rv'])) { - $annots .= ' /RV'; - if (is_array($pl['opt']['rv'])) { - foreach ($pl['opt']['rv'] AS $optval) { - if (is_float($optval)) { - $optval = sprintf('%F', $optval); - } - $annots .= ' '.$optval; - } - } else { - $annots .= ' '.$this->_textstring($pl['opt']['rv'], $annot_obj_id); - } - } - if (isset($pl['opt']['a']) AND !empty($pl['opt']['a'])) { - $annots .= ' /A << '.$pl['opt']['a'].' >>'; - } - if (isset($pl['opt']['aa']) AND !empty($pl['opt']['aa'])) { - $annots .= ' /AA << '.$pl['opt']['aa'].' >>'; - } - if (isset($pl['opt']['da']) AND !empty($pl['opt']['da'])) { - $annots .= ' /DA ('.$pl['opt']['da'].')'; - } - if (isset($pl['opt']['q']) AND ($pl['opt']['q'] >= 0) AND ($pl['opt']['q'] <= 2)) { - $annots .= ' /Q '.intval($pl['opt']['q']); - } - if (isset($pl['opt']['opt']) AND (is_array($pl['opt']['opt'])) AND !empty($pl['opt']['opt'])) { - $annots .= ' /Opt ['; - foreach($pl['opt']['opt'] AS $copt) { - if (is_array($copt)) { - $annots .= ' ['.$this->_textstring($copt[0], $annot_obj_id).' '.$this->_textstring($copt[1], $annot_obj_id).']'; - } else { - $annots .= ' '.$this->_textstring($copt, $annot_obj_id); - } - } - $annots .= ']'; - } - if (isset($pl['opt']['ti'])) { - $annots .= ' /TI '.intval($pl['opt']['ti']); - } - if (isset($pl['opt']['i']) AND (is_array($pl['opt']['i'])) AND !empty($pl['opt']['i'])) { - $annots .= ' /I ['; - foreach($pl['opt']['i'] AS $copt) { - $annots .= intval($copt).' '; - } - $annots .= ']'; - } - break; - } - case 'screen': { - break; - } - case 'printermark': { - break; - } - case 'trapnet': { - break; - } - case 'watermark': { - break; - } - case '3d': { - break; - } - default: { - break; - } - } - $annots .= '>>'; - // create new annotation object - $this->_out($this->_getobj($annot_obj_id)."\n".$annots."\n".'endobj'); - if ($formfield AND !isset($this->radiobutton_groups[$n][$pl['txt']])) { - // store reference of form object - $this->form_obj_id[] = $annot_obj_id; - } - } - } - } // end for each page - } - - /** - * Put appearance streams XObject used to define annotation's appearance states. - * @param int $w annotation width - * @param int $h annotation height - * @param string $stream appearance stream - * @return int object ID - * @protected - * @since 4.8.001 (2009-09-09) - */ - protected function _putAPXObject($w=0, $h=0, $stream='') { - $stream = trim($stream); - $out = $this->_getobj()."\n"; - $this->xobjects['AX'.$this->n] = array('n' => $this->n); - $out .= '<<'; - $out .= ' /Type /XObject'; - $out .= ' /Subtype /Form'; - $out .= ' /FormType 1'; - if ($this->compress) { - $stream = gzcompress($stream); - $out .= ' /Filter /FlateDecode'; - } - $rect = sprintf('%F %F', $w, $h); - $out .= ' /BBox [0 0 '.$rect.']'; - $out .= ' /Matrix [1 0 0 1 0 0]'; - $out .= ' /Resources 2 0 R'; - $stream = $this->_getrawstream($stream); - $out .= ' /Length '.strlen($stream); - $out .= ' >>'; - $out .= ' stream'."\n".$stream."\n".'endstream'; - $out .= "\n".'endobj'; - $this->_out($out); - return $this->n; - } - - /** - * Output fonts. - * @author Nicola Asuni - * @protected - */ - protected function _putfonts() { - $nf = $this->n; - foreach ($this->diffs as $diff) { - //Encodings - $this->_newobj(); - $this->_out('<< /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.'] >>'."\n".'endobj'); - } - $mqr = TCPDF_STATIC::get_mqr(); - TCPDF_STATIC::set_mqr(false); - foreach ($this->FontFiles as $file => $info) { - // search and get font file to embedd - $fontfile = TCPDF_FONTS::getFontFullPath($file, $info['fontdir']); - if (!TCPDF_STATIC::empty_string($fontfile)) { - $font = file_get_contents($fontfile); - $compressed = (substr($file, -2) == '.z'); - if ((!$compressed) AND (isset($info['length2']))) { - $header = (ord($font[0]) == 128); - if ($header) { - // strip first binary header - $font = substr($font, 6); - } - if ($header AND (ord($font[$info['length1']]) == 128)) { - // strip second binary header - $font = substr($font, 0, $info['length1']).substr($font, ($info['length1'] + 6)); - } - } elseif ($info['subset'] AND ((!$compressed) OR ($compressed AND function_exists('gzcompress')))) { - if ($compressed) { - // uncompress font - $font = gzuncompress($font); - } - // merge subset characters - $subsetchars = array(); // used chars - foreach ($info['fontkeys'] as $fontkey) { - $fontinfo = $this->getFontBuffer($fontkey); - $subsetchars += $fontinfo['subsetchars']; - } - // rebuild a font subset - $font = TCPDF_FONTS::_getTrueTypeFontSubset($font, $subsetchars); - // calculate new font length - $info['length1'] = strlen($font); - if ($compressed) { - // recompress font - $font = gzcompress($font); - } - } - $this->_newobj(); - $this->FontFiles[$file]['n'] = $this->n; - $stream = $this->_getrawstream($font); - $out = '<< /Length '.strlen($stream); - if ($compressed) { - $out .= ' /Filter /FlateDecode'; - } - $out .= ' /Length1 '.$info['length1']; - if (isset($info['length2'])) { - $out .= ' /Length2 '.$info['length2'].' /Length3 0'; - } - $out .= ' >>'; - $out .= ' stream'."\n".$stream."\n".'endstream'; - $out .= "\n".'endobj'; - $this->_out($out); - } - } - TCPDF_STATIC::set_mqr($mqr); - foreach ($this->fontkeys as $k) { - //Font objects - $font = $this->getFontBuffer($k); - $type = $font['type']; - $name = $font['name']; - if ($type == 'core') { - // standard core font - $out = $this->_getobj($this->font_obj_ids[$k])."\n"; - $out .= '<annotation_fonts[$k] = $font['i']; - } - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } elseif (($type == 'Type1') OR ($type == 'TrueType')) { - // additional Type1 or TrueType font - $out = $this->_getobj($this->font_obj_ids[$k])."\n"; - $out .= '<n + 1).' 0 R'; - $out .= ' /FontDescriptor '.($this->n + 2).' 0 R'; - if ($font['enc']) { - if (isset($font['diff'])) { - $out .= ' /Encoding '.($nf + $font['diff']).' 0 R'; - } else { - $out .= ' /Encoding /WinAnsiEncoding'; - } - } - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - // Widths - $this->_newobj(); - $s = '['; - for ($i = 32; $i < 256; ++$i) { - if (isset($font['cw'][$i])) { - $s .= $font['cw'][$i].' '; - } else { - $s .= $font['dw'].' '; - } - } - $s .= ']'; - $s .= "\n".'endobj'; - $this->_out($s); - //Descriptor - $this->_newobj(); - $s = '< $fdv) { - if (is_float($fdv)) { - $fdv = sprintf('%F', $fdv); - } - $s .= ' /'.$fdk.' '.$fdv.''; - } - if (!TCPDF_STATIC::empty_string($font['file'])) { - $s .= ' /FontFile'.($type == 'Type1' ? '' : '2').' '.$this->FontFiles[$font['file']]['n'].' 0 R'; - } - $s .= '>>'; - $s .= "\n".'endobj'; - $this->_out($s); - } else { - // additional types - $mtd = '_put'.strtolower($type); - if (!method_exists($this, $mtd)) { - $this->Error('Unsupported font type: '.$type); - } - $this->$mtd($font); - } - } - } - - /** - * Adds unicode fonts.
            - * Based on PDF Reference 1.3 (section 5) - * @param array $font font data - * @protected - * @author Nicola Asuni - * @since 1.52.0.TC005 (2005-01-05) - */ - protected function _puttruetypeunicode($font) { - $fontname = ''; - if ($font['subset']) { - // change name for font subsetting - $subtag = sprintf('%06u', $font['i']); - $subtag = strtr($subtag, '0123456789', 'ABCDEFGHIJ'); - $fontname .= $subtag.'+'; - } - $fontname .= $font['name']; - // Type0 Font - // A composite font composed of other fonts, organized hierarchically - $out = $this->_getobj($this->font_obj_ids[$font['fontkey']])."\n"; - $out .= '<< /Type /Font'; - $out .= ' /Subtype /Type0'; - $out .= ' /BaseFont /'.$fontname; - $out .= ' /Name /F'.$font['i']; - $out .= ' /Encoding /'.$font['enc']; - $out .= ' /ToUnicode '.($this->n + 1).' 0 R'; - $out .= ' /DescendantFonts ['.($this->n + 2).' 0 R]'; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - // ToUnicode map for Identity-H - $stream = TCPDF_FONT_DATA::$uni_identity_h; - // ToUnicode Object - $this->_newobj(); - $stream = ($this->compress) ? gzcompress($stream) : $stream; - $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; - $stream = $this->_getrawstream($stream); - $this->_out('<<'.$filter.'/Length '.strlen($stream).'>> stream'."\n".$stream."\n".'endstream'."\n".'endobj'); - // CIDFontType2 - // A CIDFont whose glyph descriptions are based on TrueType font technology - $oid = $this->_newobj(); - $out = '<< /Type /Font'; - $out .= ' /Subtype /CIDFontType2'; - $out .= ' /BaseFont /'.$fontname; - // A dictionary containing entries that define the character collection of the CIDFont. - $cidinfo = '/Registry '.$this->_datastring($font['cidinfo']['Registry'], $oid); - $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering'], $oid); - $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement']; - $out .= ' /CIDSystemInfo << '.$cidinfo.' >>'; - $out .= ' /FontDescriptor '.($this->n + 1).' 0 R'; - $out .= ' /DW '.$font['dw']; // default width - $out .= "\n".TCPDF_FONTS::_putfontwidths($font, 0); - if (isset($font['ctg']) AND (!TCPDF_STATIC::empty_string($font['ctg']))) { - $out .= "\n".'/CIDToGIDMap '.($this->n + 2).' 0 R'; - } - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - // Font descriptor - // A font descriptor describing the CIDFont default metrics other than its glyph widths - $this->_newobj(); - $out = '<< /Type /FontDescriptor'; - $out .= ' /FontName /'.$fontname; - foreach ($font['desc'] as $key => $value) { - if (is_float($value)) { - $value = sprintf('%F', $value); - } - $out .= ' /'.$key.' '.$value; - } - $fontdir = false; - if (!TCPDF_STATIC::empty_string($font['file'])) { - // A stream containing a TrueType font - $out .= ' /FontFile2 '.$this->FontFiles[$font['file']]['n'].' 0 R'; - $fontdir = $this->FontFiles[$font['file']]['fontdir']; - } - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - if (isset($font['ctg']) AND (!TCPDF_STATIC::empty_string($font['ctg']))) { - $this->_newobj(); - // Embed CIDToGIDMap - // A specification of the mapping from CIDs to glyph indices - // search and get CTG font file to embedd - $ctgfile = strtolower($font['ctg']); - // search and get ctg font file to embedd - $fontfile = TCPDF_FONTS::getFontFullPath($ctgfile, $fontdir); - if (TCPDF_STATIC::empty_string($fontfile)) { - $this->Error('Font file not found: '.$ctgfile); - } - $stream = $this->_getrawstream(file_get_contents($fontfile)); - $out = '<< /Length '.strlen($stream).''; - if (substr($fontfile, -2) == '.z') { // check file extension - // Decompresses data encoded using the public-domain - // zlib/deflate compression method, reproducing the - // original text or binary data - $out .= ' /Filter /FlateDecode'; - } - $out .= ' >>'; - $out .= ' stream'."\n".$stream."\n".'endstream'; - $out .= "\n".'endobj'; - $this->_out($out); - } - } - - /** - * Output CID-0 fonts. - * A Type 0 CIDFont contains glyph descriptions based on the Adobe Type 1 font format - * @param array $font font data - * @protected - * @author Andrew Whitehead, Nicola Asuni, Yukihiro Nakadaira - * @since 3.2.000 (2008-06-23) - */ - protected function _putcidfont0($font) { - $cidoffset = 0; - if (!isset($font['cw'][1])) { - $cidoffset = 31; - } - if (isset($font['cidinfo']['uni2cid'])) { - // convert unicode to cid. - $uni2cid = $font['cidinfo']['uni2cid']; - $cw = array(); - foreach ($font['cw'] as $uni => $width) { - if (isset($uni2cid[$uni])) { - $cw[($uni2cid[$uni] + $cidoffset)] = $width; - } elseif ($uni < 256) { - $cw[$uni] = $width; - } // else unknown character - } - $font = array_merge($font, array('cw' => $cw)); - } - $name = $font['name']; - $enc = $font['enc']; - if ($enc) { - $longname = $name.'-'.$enc; - } else { - $longname = $name; - } - $out = $this->_getobj($this->font_obj_ids[$font['fontkey']])."\n"; - $out .= '<n + 1).' 0 R]'; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - $oid = $this->_newobj(); - $out = '<_datastring($font['cidinfo']['Registry'], $oid); - $cidinfo .= ' /Ordering '.$this->_datastring($font['cidinfo']['Ordering'], $oid); - $cidinfo .= ' /Supplement '.$font['cidinfo']['Supplement']; - $out .= ' /CIDSystemInfo <<'.$cidinfo.'>>'; - $out .= ' /FontDescriptor '.($this->n + 1).' 0 R'; - $out .= ' /DW '.$font['dw']; - $out .= "\n".TCPDF_FONTS::_putfontwidths($font, $cidoffset); - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - $this->_newobj(); - $s = '< $v) { - if ($k != 'Style') { - if (is_float($v)) { - $v = sprintf('%F', $v); - } - $s .= ' /'.$k.' '.$v.''; - } - } - $s .= '>>'; - $s .= "\n".'endobj'; - $this->_out($s); - } - - /** - * Output images. - * @protected - */ - protected function _putimages() { - $filter = ($this->compress) ? '/Filter /FlateDecode ' : ''; - foreach ($this->imagekeys as $file) { - $info = $this->getImageBuffer($file); - // set object for alternate images array - if ((!$this->pdfa_mode) AND isset($info['altimgs']) AND !empty($info['altimgs'])) { - $altoid = $this->_newobj(); - $out = '['; - foreach ($info['altimgs'] as $altimage) { - if (isset($this->xobjects['I'.$altimage[0]]['n'])) { - $out .= ' << /Image '.$this->xobjects['I'.$altimage[0]]['n'].' 0 R'; - $out .= ' /DefaultForPrinting'; - if ($altimage[1] === true) { - $out .= ' true'; - } else { - $out .= ' false'; - } - $out .= ' >>'; - } - } - $out .= ' ]'; - $out .= "\n".'endobj'; - $this->_out($out); - } - // set image object - $oid = $this->_newobj(); - $this->xobjects['I'.$info['i']] = array('n' => $oid); - $this->setImageSubBuffer($file, 'n', $this->n); - $out = '<n - 1).' 0 R'; - } - // set color space - $icc = false; - if (isset($info['icc']) AND ($info['icc'] !== false)) { - // ICC Colour Space - $icc = true; - $out .= ' /ColorSpace [/ICCBased '.($this->n + 1).' 0 R]'; - } elseif ($info['cs'] == 'Indexed') { - // Indexed Colour Space - $out .= ' /ColorSpace [/Indexed /DeviceRGB '.((strlen($info['pal']) / 3) - 1).' '.($this->n + 1).' 0 R]'; - } else { - // Device Colour Space - $out .= ' /ColorSpace /'.$info['cs']; - } - if ($info['cs'] == 'DeviceCMYK') { - $out .= ' /Decode [1 0 1 0 1 0 1 0]'; - } - $out .= ' /BitsPerComponent '.$info['bpc']; - if (isset($altoid) AND ($altoid > 0)) { - // reference to alternate images dictionary - $out .= ' /Alternates '.$altoid.' 0 R'; - } - if (isset($info['exurl']) AND !empty($info['exurl'])) { - // external stream - $out .= ' /Length 0'; - $out .= ' /F << /FS /URL /F '.$this->_datastring($info['exurl'], $oid).' >>'; - if (isset($info['f'])) { - $out .= ' /FFilter /'.$info['f']; - } - $out .= ' >>'; - $out .= ' stream'."\n".'endstream'; - } else { - if (isset($info['f'])) { - $out .= ' /Filter /'.$info['f']; - } - if (isset($info['parms'])) { - $out .= ' '.$info['parms']; - } - if (isset($info['trns']) AND is_array($info['trns'])) { - $trns = ''; - $count_info = count($info['trns']); - if ($info['cs'] == 'Indexed') { - $maxval =(pow(2, $info['bpc']) - 1); - for ($i = 0; $i < $count_info; ++$i) { - if (($info['trns'][$i] != 0) AND ($info['trns'][$i] != $maxval)) { - // this is not a binary type mask @TODO: create a SMask - $trns = ''; - break; - } elseif (empty($trns) AND ($info['trns'][$i] == 0)) { - // store the first fully transparent value - $trns .= $i.' '.$i.' '; - } - } - } else { - // grayscale or RGB - for ($i = 0; $i < $count_info; ++$i) { - if ($info['trns'][$i] == 0) { - $trns .= $info['trns'][$i].' '.$info['trns'][$i].' '; - } - } - } - // Colour Key Masking - if (!empty($trns)) { - $out .= ' /Mask ['.$trns.']'; - } - } - $stream = $this->_getrawstream($info['data']); - $out .= ' /Length '.strlen($stream).' >>'; - $out .= ' stream'."\n".$stream."\n".'endstream'; - } - $out .= "\n".'endobj'; - $this->_out($out); - if ($icc) { - // ICC colour profile - $this->_newobj(); - $icc = ($this->compress) ? gzcompress($info['icc']) : $info['icc']; - $icc = $this->_getrawstream($icc); - $this->_out('<> stream'."\n".$icc."\n".'endstream'."\n".'endobj'); - } elseif ($info['cs'] == 'Indexed') { - // colour palette - $this->_newobj(); - $pal = ($this->compress) ? gzcompress($info['pal']) : $info['pal']; - $pal = $this->_getrawstream($pal); - $this->_out('<<'.$filter.'/Length '.strlen($pal).'>> stream'."\n".$pal."\n".'endstream'."\n".'endobj'); - } - } - } - - /** - * Output Form XObjects Templates. - * @author Nicola Asuni - * @since 5.8.017 (2010-08-24) - * @protected - * @see startTemplate(), endTemplate(), printTemplate() - */ - protected function _putxobjects() { - foreach ($this->xobjects as $key => $data) { - if (isset($data['outdata'])) { - $stream = str_replace($this->epsmarker, '', trim($data['outdata'])); - $out = $this->_getobj($data['n'])."\n"; - $out .= '<<'; - $out .= ' /Type /XObject'; - $out .= ' /Subtype /Form'; - $out .= ' /FormType 1'; - if ($this->compress) { - $stream = gzcompress($stream); - $out .= ' /Filter /FlateDecode'; - } - $out .= sprintf(' /BBox [%F %F %F %F]', ($data['x'] * $this->k), (-$data['y'] * $this->k), (($data['w'] + $data['x']) * $this->k), (($data['h'] - $data['y']) * $this->k)); - $out .= ' /Matrix [1 0 0 1 0 0]'; - $out .= ' /Resources <<'; - $out .= ' /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'; - if (!$this->pdfa_mode || $this->pdfa_version >= 2) { - // transparency - if (isset($data['extgstates']) AND !empty($data['extgstates'])) { - $out .= ' /ExtGState <<'; - foreach ($data['extgstates'] as $k => $extgstate) { - if (isset($this->extgstates[$k]['name'])) { - $out .= ' /'.$this->extgstates[$k]['name']; - } else { - $out .= ' /GS'.$k; - } - $out .= ' '.$this->extgstates[$k]['n'].' 0 R'; - } - $out .= ' >>'; - } - if (isset($data['gradients']) AND !empty($data['gradients'])) { - $gp = ''; - $gs = ''; - foreach ($data['gradients'] as $id => $grad) { - // gradient patterns - $gp .= ' /p'.$id.' '.$this->gradients[$id]['pattern'].' 0 R'; - // gradient shadings - $gs .= ' /Sh'.$id.' '.$this->gradients[$id]['id'].' 0 R'; - } - $out .= ' /Pattern <<'.$gp.' >>'; - $out .= ' /Shading <<'.$gs.' >>'; - } - } - // spot colors - if (isset($data['spot_colors']) AND !empty($data['spot_colors'])) { - $out .= ' /ColorSpace <<'; - foreach ($data['spot_colors'] as $name => $color) { - $out .= ' /CS'.$color['i'].' '.$this->spot_colors[$name]['n'].' 0 R'; - } - $out .= ' >>'; - } - // fonts - if (!empty($data['fonts'])) { - $out .= ' /Font <<'; - foreach ($data['fonts'] as $fontkey => $fontid) { - $out .= ' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R'; - } - $out .= ' >>'; - } - // images or nested xobjects - if (!empty($data['images']) OR !empty($data['xobjects'])) { - $out .= ' /XObject <<'; - foreach ($data['images'] as $imgid) { - $out .= ' /I'.$imgid.' '.$this->xobjects['I'.$imgid]['n'].' 0 R'; - } - foreach ($data['xobjects'] as $sub_id => $sub_objid) { - $out .= ' /'.$sub_id.' '.$sub_objid['n'].' 0 R'; - } - $out .= ' >>'; - } - $out .= ' >>'; //end resources - if (isset($data['group']) AND ($data['group'] !== false)) { - // set transparency group - $out .= ' /Group << /Type /Group /S /Transparency'; - if (is_array($data['group'])) { - if (isset($data['group']['CS']) AND !empty($data['group']['CS'])) { - $out .= ' /CS /'.$data['group']['CS']; - } - if (isset($data['group']['I'])) { - $out .= ' /I /'.($data['group']['I']===true?'true':'false'); - } - if (isset($data['group']['K'])) { - $out .= ' /K /'.($data['group']['K']===true?'true':'false'); - } - } - $out .= ' >>'; - } - $stream = $this->_getrawstream($stream, $data['n']); - $out .= ' /Length '.strlen($stream); - $out .= ' >>'; - $out .= ' stream'."\n".$stream."\n".'endstream'; - $out .= "\n".'endobj'; - $this->_out($out); - } - } - } - - /** - * Output Spot Colors Resources. - * @protected - * @since 4.0.024 (2008-09-12) - */ - protected function _putspotcolors() { - foreach ($this->spot_colors as $name => $color) { - $this->_newobj(); - $this->spot_colors[$name]['n'] = $this->n; - $out = '[/Separation /'.str_replace(' ', '#20', $name); - $out .= ' /DeviceCMYK <<'; - $out .= ' /Range [0 1 0 1 0 1 0 1] /C0 [0 0 0 0]'; - $out .= ' '.sprintf('/C1 [%F %F %F %F] ', ($color['C'] / 100), ($color['M'] / 100), ($color['Y'] / 100), ($color['K'] / 100)); - $out .= ' /FunctionType 2 /Domain [0 1] /N 1>>]'; - $out .= "\n".'endobj'; - $this->_out($out); - } - } - - /** - * Return XObjects Dictionary. - * @return string XObjects dictionary - * @protected - * @since 5.8.014 (2010-08-23) - */ - protected function _getxobjectdict() { - $out = ''; - foreach ($this->xobjects as $id => $objid) { - $out .= ' /'.$id.' '.$objid['n'].' 0 R'; - } - return $out; - } - - /** - * Output Resources Dictionary. - * @protected - */ - protected function _putresourcedict() { - $out = $this->_getobj(2)."\n"; - $out .= '<< /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]'; - $out .= ' /Font <<'; - foreach ($this->fontkeys as $fontkey) { - $font = $this->getFontBuffer($fontkey); - $out .= ' /F'.$font['i'].' '.$font['n'].' 0 R'; - } - $out .= ' >>'; - $out .= ' /XObject <<'; - $out .= $this->_getxobjectdict(); - $out .= ' >>'; - // layers - if (!empty($this->pdflayers)) { - $out .= ' /Properties <<'; - foreach ($this->pdflayers as $layer) { - $out .= ' /'.$layer['layer'].' '.$layer['objid'].' 0 R'; - } - $out .= ' >>'; - } - if (!$this->pdfa_mode || $this->pdfa_version >= 2) { - // transparency - if (isset($this->extgstates) AND !empty($this->extgstates)) { - $out .= ' /ExtGState <<'; - foreach ($this->extgstates as $k => $extgstate) { - if (isset($extgstate['name'])) { - $out .= ' /'.$extgstate['name']; - } else { - $out .= ' /GS'.$k; - } - $out .= ' '.$extgstate['n'].' 0 R'; - } - $out .= ' >>'; - } - if (isset($this->gradients) AND !empty($this->gradients)) { - $gp = ''; - $gs = ''; - foreach ($this->gradients as $id => $grad) { - // gradient patterns - $gp .= ' /p'.$id.' '.$grad['pattern'].' 0 R'; - // gradient shadings - $gs .= ' /Sh'.$id.' '.$grad['id'].' 0 R'; - } - $out .= ' /Pattern <<'.$gp.' >>'; - $out .= ' /Shading <<'.$gs.' >>'; - } - } - // spot colors - if (isset($this->spot_colors) AND !empty($this->spot_colors)) { - $out .= ' /ColorSpace <<'; - foreach ($this->spot_colors as $color) { - $out .= ' /CS'.$color['i'].' '.$color['n'].' 0 R'; - } - $out .= ' >>'; - } - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - - /** - * Output Resources. - * @protected - */ - protected function _putresources() { - $this->_putextgstates(); - $this->_putocg(); - $this->_putfonts(); - $this->_putimages(); - $this->_putspotcolors(); - $this->_putshaders(); - $this->_putxobjects(); - $this->_putresourcedict(); - $this->_putdests(); - $this->_putEmbeddedFiles(); - $this->_putannotsobjs(); - $this->_putjavascript(); - $this->_putbookmarks(); - $this->_putencryption(); - } - - /** - * Adds some Metadata information (Document Information Dictionary) - * (see Chapter 14.3.3 Document Information Dictionary of PDF32000_2008.pdf Reference) - * @return int object id - * @protected - */ - protected function _putinfo() { - $oid = $this->_newobj(); - $out = '<<'; - // store current isunicode value - $prev_isunicode = $this->isunicode; - if ($this->docinfounicode) { - $this->isunicode = true; - } - if (!TCPDF_STATIC::empty_string($this->title)) { - // The document's title. - $out .= ' /Title '.$this->_textstring($this->title, $oid); - } - if (!TCPDF_STATIC::empty_string($this->author)) { - // The name of the person who created the document. - $out .= ' /Author '.$this->_textstring($this->author, $oid); - } - if (!TCPDF_STATIC::empty_string($this->subject)) { - // The subject of the document. - $out .= ' /Subject '.$this->_textstring($this->subject, $oid); - } - if (!TCPDF_STATIC::empty_string($this->keywords)) { - // Keywords associated with the document. - $out .= ' /Keywords '.$this->_textstring($this->keywords, $oid); - } - if (!TCPDF_STATIC::empty_string($this->creator)) { - // If the document was converted to PDF from another format, the name of the conforming product that created the original document from which it was converted. - $out .= ' /Creator '.$this->_textstring($this->creator, $oid); - } - // restore previous isunicode value - $this->isunicode = $prev_isunicode; - // default producer - $out .= ' /Producer '.$this->_textstring(TCPDF_STATIC::getTCPDFProducer(), $oid); - // The date and time the document was created, in human-readable form - $out .= ' /CreationDate '.$this->_datestring(0, $this->doc_creation_timestamp); - // The date and time the document was most recently modified, in human-readable form - $out .= ' /ModDate '.$this->_datestring(0, $this->doc_modification_timestamp); - // A name object indicating whether the document has been modified to include trapping information - $out .= ' /Trapped /False'; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - return $oid; - } - - /** - * Set additional XMP data to be added on the default XMP data just before the end of "x:xmpmeta" tag. - * IMPORTANT: This data is added as-is without controls, so you have to validate your data before using this method! - * @param string $xmp Custom XMP data. - * @since 5.9.128 (2011-10-06) - * @public - */ - public function setExtraXMP($xmp) { - $this->custom_xmp = $xmp; - } - - /** - * Set additional XMP data to be added on the default XMP data just before the end of "rdf:RDF" tag. - * IMPORTANT: This data is added as-is without controls, so you have to validate your data before using this method! - * @param string $xmp Custom XMP RDF data. - * @since 6.3.0 (2019-09-19) - * @public - */ - public function setExtraXMPRDF($xmp) { - $this->custom_xmp_rdf = $xmp; - } - - /** - * Put XMP data object and return ID. - * @return int The object ID. - * @since 5.9.121 (2011-09-28) - * @protected - */ - protected function _putXMP() { - $oid = $this->_newobj(); - // store current isunicode value - $prev_isunicode = $this->isunicode; - $this->isunicode = true; - $prev_encrypted = $this->encrypted; - $this->encrypted = false; - // set XMP data - $xmp = 'isunicode).'" id="W5M0MpCehiHzreSzNTczkc9d"?>'."\n"; - $xmp .= ''."\n"; - $xmp .= "\t".''."\n"; - $xmp .= "\t\t".''."\n"; - $xmp .= "\t\t\t".'application/pdf'."\n"; - $xmp .= "\t\t\t".''."\n"; - $xmp .= "\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t".''.TCPDF_STATIC::_escapeXML($this->title).''."\n"; - $xmp .= "\t\t\t\t".''."\n"; - $xmp .= "\t\t\t".''."\n"; - $xmp .= "\t\t\t".''."\n"; - $xmp .= "\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t".''.TCPDF_STATIC::_escapeXML($this->author).''."\n"; - $xmp .= "\t\t\t\t".''."\n"; - $xmp .= "\t\t\t".''."\n"; - $xmp .= "\t\t\t".''."\n"; - $xmp .= "\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t".''.TCPDF_STATIC::_escapeXML($this->subject).''."\n"; - $xmp .= "\t\t\t\t".''."\n"; - $xmp .= "\t\t\t".''."\n"; - $xmp .= "\t\t\t".''."\n"; - $xmp .= "\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t".''.TCPDF_STATIC::_escapeXML($this->keywords).''."\n"; - $xmp .= "\t\t\t\t".''."\n"; - $xmp .= "\t\t\t".''."\n"; - $xmp .= "\t\t".''."\n"; - // convert doc creation date format - $dcdate = TCPDF_STATIC::getFormattedDate($this->doc_creation_timestamp); - $doccreationdate = substr($dcdate, 0, 4).'-'.substr($dcdate, 4, 2).'-'.substr($dcdate, 6, 2); - $doccreationdate .= 'T'.substr($dcdate, 8, 2).':'.substr($dcdate, 10, 2).':'.substr($dcdate, 12, 2); - $doccreationdate .= substr($dcdate, 14, 3).':'.substr($dcdate, 18, 2); - $doccreationdate = TCPDF_STATIC::_escapeXML($doccreationdate); - // convert doc modification date format - $dmdate = TCPDF_STATIC::getFormattedDate($this->doc_modification_timestamp); - $docmoddate = substr($dmdate, 0, 4).'-'.substr($dmdate, 4, 2).'-'.substr($dmdate, 6, 2); - $docmoddate .= 'T'.substr($dmdate, 8, 2).':'.substr($dmdate, 10, 2).':'.substr($dmdate, 12, 2); - $docmoddate .= substr($dmdate, 14, 3).':'.substr($dmdate, 18, 2); - $docmoddate = TCPDF_STATIC::_escapeXML($docmoddate); - $xmp .= "\t\t".''."\n"; - $xmp .= "\t\t\t".''.$doccreationdate.''."\n"; - $xmp .= "\t\t\t".''.$this->creator.''."\n"; - $xmp .= "\t\t\t".''.$docmoddate.''."\n"; - $xmp .= "\t\t\t".''.$doccreationdate.''."\n"; - $xmp .= "\t\t".''."\n"; - $xmp .= "\t\t".''."\n"; - $xmp .= "\t\t\t".''.TCPDF_STATIC::_escapeXML($this->keywords).''."\n"; - $xmp .= "\t\t\t".''.TCPDF_STATIC::_escapeXML(TCPDF_STATIC::getTCPDFProducer()).''."\n"; - $xmp .= "\t\t".''."\n"; - $xmp .= "\t\t".''."\n"; - $uuid = 'uuid:'.substr($this->file_id, 0, 8).'-'.substr($this->file_id, 8, 4).'-'.substr($this->file_id, 12, 4).'-'.substr($this->file_id, 16, 4).'-'.substr($this->file_id, 20, 12); - $xmp .= "\t\t\t".''.$uuid.''."\n"; - $xmp .= "\t\t\t".''.$uuid.''."\n"; - $xmp .= "\t\t".''."\n"; - if ($this->pdfa_mode) { - $xmp .= "\t\t".''."\n"; - $xmp .= "\t\t\t".''.$this->pdfa_version.''."\n"; - $xmp .= "\t\t\t".'B'."\n"; - $xmp .= "\t\t".''."\n"; - } - // XMP extension schemas - $xmp .= "\t\t".''."\n"; - $xmp .= "\t\t\t".''."\n"; - $xmp .= "\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t".'http://ns.adobe.com/pdf/1.3/'."\n"; - $xmp .= "\t\t\t\t\t\t".'pdf'."\n"; - $xmp .= "\t\t\t\t\t\t".'Adobe PDF Schema'."\n"; - $xmp .= "\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'internal'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'Adobe PDF Schema'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'InstanceID'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'URI'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t".'http://ns.adobe.com/xap/1.0/mm/'."\n"; - $xmp .= "\t\t\t\t\t\t".'xmpMM'."\n"; - $xmp .= "\t\t\t\t\t\t".'XMP Media Management Schema'."\n"; - $xmp .= "\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'internal'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'UUID based identifier for specific incarnation of a document'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'InstanceID'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'URI'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t".'http://www.aiim.org/pdfa/ns/id/'."\n"; - $xmp .= "\t\t\t\t\t\t".'pdfaid'."\n"; - $xmp .= "\t\t\t\t\t\t".'PDF/A ID Schema'."\n"; - $xmp .= "\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'internal'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'Part of PDF/A standard'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'part'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'Integer'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'internal'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'Amendment of PDF/A standard'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'amd'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'Text'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'internal'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'Conformance level of PDF/A standard'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'conformance'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t\t".'Text'."\n"; - $xmp .= "\t\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t\t".''."\n"; - $xmp .= "\t\t\t\t".''."\n"; - $xmp .= "\t\t\t".''."\n"; - $xmp .= "\t\t".''."\n"; - $xmp .= $this->custom_xmp_rdf; - $xmp .= "\t".''."\n"; - $xmp .= $this->custom_xmp; - $xmp .= ''."\n"; - $xmp .= ''; - $out = '<< /Type /Metadata /Subtype /XML /Length '.strlen($xmp).' >> stream'."\n".$xmp."\n".'endstream'."\n".'endobj'; - // restore previous isunicode value - $this->isunicode = $prev_isunicode; - $this->encrypted = $prev_encrypted; - $this->_out($out); - return $oid; - } - - /** - * Output Catalog. - * @return int object id - * @protected - */ - protected function _putcatalog() { - // put XMP - $xmpobj = $this->_putXMP(); - // if required, add standard sRGB ICC colour profile - if ($this->pdfa_mode OR $this->force_srgb) { - $iccobj = $this->_newobj(); - $icc = file_get_contents(dirname(__FILE__).'/include/sRGB.icc'); - $filter = ''; - if ($this->compress) { - $filter = ' /Filter /FlateDecode'; - $icc = gzcompress($icc); - } - $icc = $this->_getrawstream($icc); - $this->_out('<> stream'."\n".$icc."\n".'endstream'."\n".'endobj'); - } - // start catalog - $oid = $this->_newobj(); - $out = '<< /Type /Catalog'; - $out .= ' /Version /'.$this->PDFVersion; - //$out .= ' /Extensions <<>>'; - $out .= ' /Pages 1 0 R'; - //$out .= ' /PageLabels ' //...; - $out .= ' /Names <<'; - if ((!$this->pdfa_mode) AND !empty($this->n_js)) { - $out .= ' /JavaScript '.$this->n_js; - } - if (!empty($this->efnames)) { - $out .= ' /EmbeddedFiles <efnames AS $fn => $fref) { - $out .= ' '.$this->_datastring($fn).' '.$fref; - } - $out .= ' ]>>'; - } - $out .= ' >>'; - if (!empty($this->dests)) { - $out .= ' /Dests '.($this->n_dests).' 0 R'; - } - $out .= $this->_putviewerpreferences(); - if (isset($this->LayoutMode) AND (!TCPDF_STATIC::empty_string($this->LayoutMode))) { - $out .= ' /PageLayout /'.$this->LayoutMode; - } - if (isset($this->PageMode) AND (!TCPDF_STATIC::empty_string($this->PageMode))) { - $out .= ' /PageMode /'.$this->PageMode; - } - if (count($this->outlines) > 0) { - $out .= ' /Outlines '.$this->OutlineRoot.' 0 R'; - $out .= ' /PageMode /UseOutlines'; - } - //$out .= ' /Threads []'; - if ($this->ZoomMode == 'fullpage') { - $out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /Fit]'; - } elseif ($this->ZoomMode == 'fullwidth') { - $out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /FitH null]'; - } elseif ($this->ZoomMode == 'real') { - $out .= ' /OpenAction ['.$this->page_obj_id[1].' 0 R /XYZ null null 1]'; - } elseif (!is_string($this->ZoomMode)) { - $out .= sprintf(' /OpenAction ['.$this->page_obj_id[1].' 0 R /XYZ null null %F]', ($this->ZoomMode / 100)); - } - //$out .= ' /AA <<>>'; - //$out .= ' /URI <<>>'; - $out .= ' /Metadata '.$xmpobj.' 0 R'; - //$out .= ' /StructTreeRoot <<>>'; - //$out .= ' /MarkInfo <<>>'; - if (isset($this->l['a_meta_language'])) { - $out .= ' /Lang '.$this->_textstring($this->l['a_meta_language'], $oid); - } - //$out .= ' /SpiderInfo <<>>'; - // set OutputIntent to sRGB IEC61966-2.1 if required - if ($this->pdfa_mode OR $this->force_srgb) { - $out .= ' /OutputIntents [<<'; - $out .= ' /Type /OutputIntent'; - $out .= ' /S /GTS_PDFA1'; - $out .= ' /OutputCondition '.$this->_textstring('sRGB IEC61966-2.1', $oid); - $out .= ' /OutputConditionIdentifier '.$this->_textstring('sRGB IEC61966-2.1', $oid); - $out .= ' /RegistryName '.$this->_textstring('http://www.color.org', $oid); - $out .= ' /Info '.$this->_textstring('sRGB IEC61966-2.1', $oid); - $out .= ' /DestOutputProfile '.$iccobj.' 0 R'; - $out .= ' >>]'; - } - //$out .= ' /PieceInfo <<>>'; - if (!empty($this->pdflayers)) { - $lyrobjs = ''; - $lyrobjs_off = ''; - $lyrobjs_lock = ''; - foreach ($this->pdflayers as $layer) { - $layer_obj_ref = ' '.$layer['objid'].' 0 R'; - $lyrobjs .= $layer_obj_ref; - if ($layer['view'] === false) { - $lyrobjs_off .= $layer_obj_ref; - } - if ($layer['lock']) { - $lyrobjs_lock .= $layer_obj_ref; - } - } - $out .= ' /OCProperties << /OCGs ['.$lyrobjs.']'; - $out .= ' /D <<'; - $out .= ' /Name '.$this->_textstring('Layers', $oid); - $out .= ' /Creator '.$this->_textstring('TCPDF', $oid); - $out .= ' /BaseState /ON'; - $out .= ' /OFF ['.$lyrobjs_off.']'; - $out .= ' /Locked ['.$lyrobjs_lock.']'; - $out .= ' /Intent /View'; - $out .= ' /AS ['; - $out .= ' << /Event /Print /OCGs ['.$lyrobjs.'] /Category [/Print] >>'; - $out .= ' << /Event /View /OCGs ['.$lyrobjs.'] /Category [/View] >>'; - $out .= ' ]'; - $out .= ' /Order ['.$lyrobjs.']'; - $out .= ' /ListMode /AllPages'; - //$out .= ' /RBGroups ['..']'; - //$out .= ' /Locked ['..']'; - $out .= ' >>'; - $out .= ' >>'; - } - // AcroForm - if (!empty($this->form_obj_id) - OR ($this->sign AND isset($this->signature_data['cert_type'])) - OR !empty($this->empty_signature_appearance)) { - $out .= ' /AcroForm <<'; - $objrefs = ''; - if ($this->sign AND isset($this->signature_data['cert_type'])) { - // set reference for signature object - $objrefs .= $this->sig_obj_id.' 0 R'; - } - if (!empty($this->empty_signature_appearance)) { - foreach ($this->empty_signature_appearance as $esa) { - // set reference for empty signature objects - $objrefs .= ' '.$esa['objid'].' 0 R'; - } - } - if (!empty($this->form_obj_id)) { - foreach($this->form_obj_id as $objid) { - $objrefs .= ' '.$objid.' 0 R'; - } - } - $out .= ' /Fields ['.$objrefs.']'; - // It's better to turn off this value and set the appearance stream for each annotation (/AP) to avoid conflicts with signature fields. - if (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A')) { - $out .= ' /NeedAppearances false'; - } - if ($this->sign AND isset($this->signature_data['cert_type'])) { - if ($this->signature_data['cert_type'] > 0) { - $out .= ' /SigFlags 3'; - } else { - $out .= ' /SigFlags 1'; - } - } - //$out .= ' /CO '; - if (isset($this->annotation_fonts) AND !empty($this->annotation_fonts)) { - $out .= ' /DR <<'; - $out .= ' /Font <<'; - foreach ($this->annotation_fonts as $fontkey => $fontid) { - $out .= ' /F'.$fontid.' '.$this->font_obj_ids[$fontkey].' 0 R'; - } - $out .= ' >> >>'; - } - $font = $this->getFontBuffer('helvetica'); - $out .= ' /DA (/F'.$font['i'].' 0 Tf 0 g)'; - $out .= ' /Q '.(($this->rtl)?'2':'0'); - //$out .= ' /XFA '; - $out .= ' >>'; - // signatures - if ($this->sign AND isset($this->signature_data['cert_type']) - AND (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A'))) { - if ($this->signature_data['cert_type'] > 0) { - $out .= ' /Perms << /DocMDP '.($this->sig_obj_id + 1).' 0 R >>'; - } else { - $out .= ' /Perms << /UR3 '.($this->sig_obj_id + 1).' 0 R >>'; - } - } - } - //$out .= ' /Legal <<>>'; - //$out .= ' /Requirements []'; - //$out .= ' /Collection <<>>'; - //$out .= ' /NeedsRendering true'; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - return $oid; - } - - /** - * Output viewer preferences. - * @return string for viewer preferences - * @author Nicola asuni - * @since 3.1.000 (2008-06-09) - * @protected - */ - protected function _putviewerpreferences() { - $vp = $this->viewer_preferences; - $out = ' /ViewerPreferences <<'; - if ($this->rtl) { - $out .= ' /Direction /R2L'; - } else { - $out .= ' /Direction /L2R'; - } - if (isset($vp['HideToolbar']) AND ($vp['HideToolbar'])) { - $out .= ' /HideToolbar true'; - } - if (isset($vp['HideMenubar']) AND ($vp['HideMenubar'])) { - $out .= ' /HideMenubar true'; - } - if (isset($vp['HideWindowUI']) AND ($vp['HideWindowUI'])) { - $out .= ' /HideWindowUI true'; - } - if (isset($vp['FitWindow']) AND ($vp['FitWindow'])) { - $out .= ' /FitWindow true'; - } - if (isset($vp['CenterWindow']) AND ($vp['CenterWindow'])) { - $out .= ' /CenterWindow true'; - } - if (isset($vp['DisplayDocTitle']) AND ($vp['DisplayDocTitle'])) { - $out .= ' /DisplayDocTitle true'; - } - if (isset($vp['NonFullScreenPageMode'])) { - $out .= ' /NonFullScreenPageMode /'.$vp['NonFullScreenPageMode']; - } - if (isset($vp['ViewArea'])) { - $out .= ' /ViewArea /'.$vp['ViewArea']; - } - if (isset($vp['ViewClip'])) { - $out .= ' /ViewClip /'.$vp['ViewClip']; - } - if (isset($vp['PrintArea'])) { - $out .= ' /PrintArea /'.$vp['PrintArea']; - } - if (isset($vp['PrintClip'])) { - $out .= ' /PrintClip /'.$vp['PrintClip']; - } - if (isset($vp['PrintScaling'])) { - $out .= ' /PrintScaling /'.$vp['PrintScaling']; - } - if (isset($vp['Duplex']) AND (!TCPDF_STATIC::empty_string($vp['Duplex']))) { - $out .= ' /Duplex /'.$vp['Duplex']; - } - if (isset($vp['PickTrayByPDFSize'])) { - if ($vp['PickTrayByPDFSize']) { - $out .= ' /PickTrayByPDFSize true'; - } else { - $out .= ' /PickTrayByPDFSize false'; - } - } - if (isset($vp['PrintPageRange'])) { - $PrintPageRangeNum = ''; - foreach ($vp['PrintPageRange'] as $k => $v) { - $PrintPageRangeNum .= ' '.($v - 1).''; - } - $out .= ' /PrintPageRange ['.substr($PrintPageRangeNum,1).']'; - } - if (isset($vp['NumCopies'])) { - $out .= ' /NumCopies '.intval($vp['NumCopies']); - } - $out .= ' >>'; - return $out; - } - - /** - * Output PDF File Header (7.5.2). - * @protected - */ - protected function _putheader() { - $this->_out('%PDF-'.$this->PDFVersion); - $this->_out('%'.chr(0xe2).chr(0xe3).chr(0xcf).chr(0xd3)); - } - - /** - * Output end of document (EOF). - * @protected - */ - protected function _enddoc() { - if (isset($this->CurrentFont['fontkey']) AND isset($this->CurrentFont['subsetchars'])) { - // save subset chars of the previous font - $this->setFontSubBuffer($this->CurrentFont['fontkey'], 'subsetchars', $this->CurrentFont['subsetchars']); - } - $this->state = 1; - $this->_putheader(); - $this->_putpages(); - $this->_putresources(); - // empty signature fields - if (!empty($this->empty_signature_appearance)) { - foreach ($this->empty_signature_appearance as $key => $esa) { - // widget annotation for empty signature - $out = $this->_getobj($esa['objid'])."\n"; - $out .= '<< /Type /Annot'; - $out .= ' /Subtype /Widget'; - $out .= ' /Rect ['.$esa['rect'].']'; - $out .= ' /P '.$this->page_obj_id[($esa['page'])].' 0 R'; // link to signature appearance page - $out .= ' /F 4'; - $out .= ' /FT /Sig'; - $signame = $esa['name'].sprintf(' [%03d]', ($key + 1)); - $out .= ' /T '.$this->_textstring($signame, $esa['objid']); - $out .= ' /Ff 0'; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - } - // Signature - if ($this->sign AND isset($this->signature_data['cert_type'])) { - // widget annotation for signature - $out = $this->_getobj($this->sig_obj_id)."\n"; - $out .= '<< /Type /Annot'; - $out .= ' /Subtype /Widget'; - $out .= ' /Rect ['.$this->signature_appearance['rect'].']'; - $out .= ' /P '.$this->page_obj_id[($this->signature_appearance['page'])].' 0 R'; // link to signature appearance page - $out .= ' /F 4'; - $out .= ' /FT /Sig'; - $out .= ' /T '.$this->_textstring($this->signature_appearance['name'], $this->sig_obj_id); - $out .= ' /Ff 0'; - $out .= ' /V '.($this->sig_obj_id + 1).' 0 R'; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - // signature - $this->_putsignature(); - } - // Info - $objid_info = $this->_putinfo(); - // Catalog - $objid_catalog = $this->_putcatalog(); - // Cross-ref - $o = $this->bufferlen; - // XREF section - $this->_out('xref'); - $this->_out('0 '.($this->n + 1)); - $this->_out('0000000000 65535 f '); - $freegen = ($this->n + 2); - for ($i=1; $i <= $this->n; ++$i) { - if (!isset($this->offsets[$i]) AND ($i > 1)) { - $this->_out(sprintf('0000000000 %05d f ', $freegen)); - ++$freegen; - } else { - $this->_out(sprintf('%010d 00000 n ', $this->offsets[$i])); - } - } - // TRAILER - $out = 'trailer'."\n"; - $out .= '<<'; - $out .= ' /Size '.($this->n + 1); - $out .= ' /Root '.$objid_catalog.' 0 R'; - $out .= ' /Info '.$objid_info.' 0 R'; - if ($this->encrypted) { - $out .= ' /Encrypt '.$this->encryptdata['objid'].' 0 R'; - } - $out .= ' /ID [ <'.$this->file_id.'> <'.$this->file_id.'> ]'; - $out .= ' >>'; - $this->_out($out); - $this->_out('startxref'); - $this->_out($o); - $this->_out('%%EOF'); - $this->state = 3; // end-of-doc - } - - /** - * Initialize a new page. - * @param string $orientation page orientation. Possible values are (case insensitive):
            • P or PORTRAIT (default)
            • L or LANDSCAPE
            - * @param mixed $format The format used for pages. It can be either: one of the string values specified at getPageSizeFromFormat() or an array of parameters specified at setPageFormat(). - * @protected - * @see getPageSizeFromFormat(), setPageFormat() - */ - protected function _beginpage($orientation='', $format='') { - ++$this->page; - $this->pageobjects[$this->page] = array(); - $this->setPageBuffer($this->page, ''); - // initialize array for graphics tranformation positions inside a page buffer - $this->transfmrk[$this->page] = array(); - $this->state = 2; - if (TCPDF_STATIC::empty_string($orientation)) { - if (isset($this->CurOrientation)) { - $orientation = $this->CurOrientation; - } elseif ($this->fwPt > $this->fhPt) { - // landscape - $orientation = 'L'; - } else { - // portrait - $orientation = 'P'; - } - } - if (TCPDF_STATIC::empty_string($format)) { - $this->pagedim[$this->page] = $this->pagedim[($this->page - 1)]; - $this->setPageOrientation($orientation); - } else { - $this->setPageFormat($format, $orientation); - } - if ($this->rtl) { - $this->x = $this->w - $this->rMargin; - } else { - $this->x = $this->lMargin; - } - $this->y = $this->tMargin; - if (isset($this->newpagegroup[$this->page])) { - // start a new group - $this->currpagegroup = $this->newpagegroup[$this->page]; - $this->pagegroups[$this->currpagegroup] = 1; - } elseif (isset($this->currpagegroup) AND ($this->currpagegroup > 0)) { - ++$this->pagegroups[$this->currpagegroup]; - } - } - - /** - * Mark end of page. - * @protected - */ - protected function _endpage() { - $this->setVisibility('all'); - $this->state = 1; - } - - /** - * Begin a new object and return the object number. - * @return int object number - * @protected - */ - protected function _newobj() { - $this->_out($this->_getobj()); - return $this->n; - } - - /** - * Return the starting object string for the selected object ID. - * @param int|null $objid Object ID (leave empty to get a new ID). - * @return string the starting object string - * @protected - * @since 5.8.009 (2010-08-20) - */ - protected function _getobj($objid=null) { - if (TCPDF_STATIC::empty_string($objid)) { - ++$this->n; - $objid = $this->n; - } - $this->offsets[$objid] = $this->bufferlen; - $this->pageobjects[$this->page][] = $objid; - return $objid.' 0 obj'; - } - - /** - * Underline text. - * @param int $x X coordinate - * @param int $y Y coordinate - * @param string $txt text to underline - * @protected - */ - protected function _dounderline($x, $y, $txt) { - $w = $this->GetStringWidth($txt); - return $this->_dounderlinew($x, $y, $w); - } - - /** - * Underline for rectangular text area. - * @param int $x X coordinate - * @param int $y Y coordinate - * @param int $w width to underline - * @protected - * @since 4.8.008 (2009-09-29) - */ - protected function _dounderlinew($x, $y, $w) { - $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; - return sprintf('%F %F %F %F re f', $x * $this->k, ((($this->h - $y) * $this->k) + $linew), $w * $this->k, $linew); - } - - /** - * Line through text. - * @param int $x X coordinate - * @param int $y Y coordinate - * @param string $txt text to linethrough - * @protected - */ - protected function _dolinethrough($x, $y, $txt) { - $w = $this->GetStringWidth($txt); - return $this->_dolinethroughw($x, $y, $w); - } - - /** - * Line through for rectangular text area. - * @param int $x X coordinate - * @param int $y Y coordinate - * @param int $w line length (width) - * @protected - * @since 4.9.008 (2009-09-29) - */ - protected function _dolinethroughw($x, $y, $w) { - $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; - return sprintf('%F %F %F %F re f', $x * $this->k, ((($this->h - $y) * $this->k) + $linew + ($this->FontSizePt / 3)), $w * $this->k, $linew); - } - - /** - * Overline text. - * @param int $x X coordinate - * @param int $y Y coordinate - * @param string $txt text to overline - * @protected - * @since 4.9.015 (2010-04-19) - */ - protected function _dooverline($x, $y, $txt) { - $w = $this->GetStringWidth($txt); - return $this->_dooverlinew($x, $y, $w); - } - - /** - * Overline for rectangular text area. - * @param int $x X coordinate - * @param int $y Y coordinate - * @param int $w width to overline - * @protected - * @since 4.9.015 (2010-04-19) - */ - protected function _dooverlinew($x, $y, $w) { - $linew = - $this->CurrentFont['ut'] / 1000 * $this->FontSizePt; - return sprintf('%F %F %F %F re f', $x * $this->k, (($this->h - $y + $this->FontAscent) * $this->k) - $linew, $w * $this->k, $linew); - - } - - /** - * Format a data string for meta information - * @param string $s data string to escape. - * @param int $n object ID - * @return string escaped string. - * @protected - */ - protected function _datastring($s, $n=0) { - if ($n == 0) { - $n = $this->n; - } - $s = $this->_encrypt_data($n, $s); - return '('. TCPDF_STATIC::_escape($s).')'; - } - - /** - * Set the document creation timestamp - * @param mixed $time Document creation timestamp in seconds or date-time string. - * @public - * @since 5.9.152 (2012-03-23) - */ - public function setDocCreationTimestamp($time) { - if (is_string($time)) { - $time = TCPDF_STATIC::getTimestamp($time); - } - $this->doc_creation_timestamp = intval($time); - } - - /** - * Set the document modification timestamp - * @param mixed $time Document modification timestamp in seconds or date-time string. - * @public - * @since 5.9.152 (2012-03-23) - */ - public function setDocModificationTimestamp($time) { - if (is_string($time)) { - $time = TCPDF_STATIC::getTimestamp($time); - } - $this->doc_modification_timestamp = intval($time); - } - - /** - * Returns document creation timestamp in seconds. - * @return int Creation timestamp in seconds. - * @public - * @since 5.9.152 (2012-03-23) - */ - public function getDocCreationTimestamp() { - return $this->doc_creation_timestamp; - } - - /** - * Returns document modification timestamp in seconds. - * @return int Modfication timestamp in seconds. - * @public - * @since 5.9.152 (2012-03-23) - */ - public function getDocModificationTimestamp() { - return $this->doc_modification_timestamp; - } - - /** - * Returns a formatted date for meta information - * @param int $n Object ID. - * @param int $timestamp Timestamp to convert. - * @return string escaped date string. - * @protected - * @since 4.6.028 (2009-08-25) - */ - protected function _datestring($n=0, $timestamp=0) { - if ((empty($timestamp)) OR ($timestamp < 0)) { - $timestamp = $this->doc_creation_timestamp; - } - return $this->_datastring('D:'.TCPDF_STATIC::getFormattedDate($timestamp), $n); - } - - /** - * Format a text string for meta information - * @param string $s string to escape. - * @param int $n object ID - * @return string escaped string. - * @protected - */ - protected function _textstring($s, $n=0) { - if ($this->isunicode) { - //Convert string to UTF-16BE - $s = TCPDF_FONTS::UTF8ToUTF16BE($s, true, $this->isunicode, $this->CurrentFont); - } - return $this->_datastring($s, $n); - } - - /** - * get raw output stream. - * @param string $s string to output. - * @param int $n object reference for encryption mode - * @protected - * @author Nicola Asuni - * @since 5.5.000 (2010-06-22) - */ - protected function _getrawstream($s, $n=0) { - if ($n <= 0) { - // default to current object - $n = $this->n; - } - return $this->_encrypt_data($n, $s); - } - - /** - * Output a string to the document. - * @param string $s string to output. - * @protected - */ - protected function _out($s) { - if ($this->state == 2) { - if ($this->inxobj) { - // we are inside an XObject template - $this->xobjects[$this->xobjid]['outdata'] .= $s."\n"; - } elseif ((!$this->InFooter) AND isset($this->footerlen[$this->page]) AND ($this->footerlen[$this->page] > 0)) { - // puts data before page footer - $pagebuff = $this->getPageBuffer($this->page); - $page = substr($pagebuff, 0, -$this->footerlen[$this->page]); - $footer = substr($pagebuff, -$this->footerlen[$this->page]); - $this->setPageBuffer($this->page, $page.$s."\n".$footer); - // update footer position - $this->footerpos[$this->page] += strlen($s."\n"); - } else { - // set page data - $this->setPageBuffer($this->page, $s."\n", true); - } - } elseif ($this->state > 0) { - // set general data - $this->setBuffer($s."\n"); - } - } - - /** - * Set header font. - * @param array $font Array describing the basic font parameters: (family, style, size). - * @phpstan-param array{0: string, 1: string, 2: float|null} $font - * @public - * @since 1.1 - */ - public function setHeaderFont($font) { - $this->header_font = $font; - } - - /** - * Get header font. - * @return array Array describing the basic font parameters: (family, style, size). - * @phpstan-return array{0: string, 1: string, 2: float|null} - * @public - * @since 4.0.012 (2008-07-24) - */ - public function getHeaderFont() { - return $this->header_font; - } - - /** - * Set footer font. - * @param array $font Array describing the basic font parameters: (family, style, size). - * @phpstan-param array{0: string, 1: string, 2: float|null} $font - * @public - * @since 1.1 - */ - public function setFooterFont($font) { - $this->footer_font = $font; - } - - /** - * Get Footer font. - * @return array Array describing the basic font parameters: (family, style, size). - * @phpstan-return array{0: string, 1: string, 2: float|null} $font - * @public - * @since 4.0.012 (2008-07-24) - */ - public function getFooterFont() { - return $this->footer_font; - } - - /** - * Set language array. - * @param array $language - * @public - * @since 1.1 - */ - public function setLanguageArray($language) { - $this->l = $language; - if (isset($this->l['a_meta_dir'])) { - $this->rtl = $this->l['a_meta_dir']=='rtl' ? true : false; - } else { - $this->rtl = false; - } - } - - /** - * Returns the PDF data. - * @public - */ - public function getPDFData() { - if ($this->state < 3) { - $this->Close(); - } - return $this->buffer; - } - - /** - * Output anchor link. - * @param string $url link URL or internal link (i.e.: <a href="#23,4.5">link to page 23 at 4.5 Y position</a>) - * @param string $name link name - * @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false). - * @param boolean $firstline if true prints only the first line and return the remaining string. - * @param array|null $color array of RGB text color - * @param string $style font style (U, D, B, I) - * @param boolean $firstblock if true the string is the starting of a line. - * @return int the number of cells used or the remaining text if $firstline = true; - * @public - */ - public function addHtmlLink($url, $name, $fill=false, $firstline=false, $color=null, $style=-1, $firstblock=false) { - if (isset($url[1]) AND ($url[0] == '#') AND is_numeric($url[1])) { - // convert url to internal link - $lnkdata = explode(',', $url); - if (isset($lnkdata[0]) ) { - $page = substr($lnkdata[0], 1); - if (isset($lnkdata[1]) AND (strlen($lnkdata[1]) > 0)) { - $lnky = floatval($lnkdata[1]); - } else { - $lnky = 0; - } - $url = $this->AddLink(); - $this->setLink($url, $lnky, $page); - } - } - // store current settings - $prevcolor = $this->fgcolor; - $prevstyle = $this->FontStyle; - if (empty($color)) { - $this->setTextColorArray($this->htmlLinkColorArray); - } else { - $this->setTextColorArray($color); - } - if ($style == -1) { - $this->setFont('', $this->FontStyle.$this->htmlLinkFontStyle); - } else { - $this->setFont('', $this->FontStyle.$style); - } - $ret = $this->Write($this->lasth, $name, $url, $fill, '', false, 0, $firstline, $firstblock, 0); - // restore settings - $this->setFont('', $prevstyle); - $this->setTextColorArray($prevcolor); - return $ret; - } - - /** - * Converts pixels to User's Units. - * @param int $px pixels - * @return float value in user's unit - * @public - * @see setImageScale(), getImageScale() - */ - public function pixelsToUnits($px) { - return ($px / ($this->imgscale * $this->k)); - } - - /** - * Reverse function for htmlentities. - * Convert entities in UTF-8. - * @param string $text_to_convert Text to convert. - * @return string converted text string - * @public - */ - public function unhtmlentities($text_to_convert) { - return @html_entity_decode($text_to_convert, ENT_QUOTES, $this->encoding); - } - - // ENCRYPTION METHODS ---------------------------------- - - /** - * Compute encryption key depending on object number where the encrypted data is stored. - * This is used for all strings and streams without crypt filter specifier. - * @param int $n object number - * @return int object key - * @protected - * @author Nicola Asuni - * @since 2.0.000 (2008-01-02) - */ - protected function _objectkey($n) { - $objkey = $this->encryptdata['key'].pack('VXxx', $n); - if ($this->encryptdata['mode'] == 2) { // AES-128 - // AES padding - $objkey .= "\x73\x41\x6C\x54"; // sAlT - } - $objkey = substr(TCPDF_STATIC::_md5_16($objkey), 0, (($this->encryptdata['Length'] / 8) + 5)); - $objkey = substr($objkey, 0, 16); - return $objkey; - } - - /** - * Encrypt the input string. - * @param int $n object number - * @param string $s data string to encrypt - * @return string encrypted string - * @protected - * @author Nicola Asuni - * @since 5.0.005 (2010-05-11) - */ - protected function _encrypt_data($n, $s) { - if (!$this->encrypted) { - return $s; - } - switch ($this->encryptdata['mode']) { - case 0: // RC4-40 - case 1: { // RC4-128 - $s = TCPDF_STATIC::_RC4($this->_objectkey($n), $s, $this->last_enc_key, $this->last_enc_key_c); - break; - } - case 2: { // AES-128 - $s = TCPDF_STATIC::_AES($this->_objectkey($n), $s); - break; - } - case 3: { // AES-256 - $s = TCPDF_STATIC::_AES($this->encryptdata['key'], $s); - break; - } - } - return $s; - } - - /** - * Put encryption on PDF document. - * @protected - * @author Nicola Asuni - * @since 2.0.000 (2008-01-02) - */ - protected function _putencryption() { - if (!$this->encrypted) { - return; - } - $this->encryptdata['objid'] = $this->_newobj(); - $out = '<<'; - if (!isset($this->encryptdata['Filter']) OR empty($this->encryptdata['Filter'])) { - $this->encryptdata['Filter'] = 'Standard'; - } - $out .= ' /Filter /'.$this->encryptdata['Filter']; - if (isset($this->encryptdata['SubFilter']) AND !empty($this->encryptdata['SubFilter'])) { - $out .= ' /SubFilter /'.$this->encryptdata['SubFilter']; - } - if (!isset($this->encryptdata['V']) OR empty($this->encryptdata['V'])) { - $this->encryptdata['V'] = 1; - } - // V is a code specifying the algorithm to be used in encrypting and decrypting the document - $out .= ' /V '.$this->encryptdata['V']; - if (isset($this->encryptdata['Length']) AND !empty($this->encryptdata['Length'])) { - // The length of the encryption key, in bits. The value shall be a multiple of 8, in the range 40 to 256 - $out .= ' /Length '.$this->encryptdata['Length']; - } else { - $out .= ' /Length 40'; - } - if ($this->encryptdata['V'] >= 4) { - if (!isset($this->encryptdata['StmF']) OR empty($this->encryptdata['StmF'])) { - $this->encryptdata['StmF'] = 'Identity'; - } - if (!isset($this->encryptdata['StrF']) OR empty($this->encryptdata['StrF'])) { - // The name of the crypt filter that shall be used when decrypting all strings in the document. - $this->encryptdata['StrF'] = 'Identity'; - } - // A dictionary whose keys shall be crypt filter names and whose values shall be the corresponding crypt filter dictionaries. - if (isset($this->encryptdata['CF']) AND !empty($this->encryptdata['CF'])) { - $out .= ' /CF <<'; - $out .= ' /'.$this->encryptdata['StmF'].' <<'; - $out .= ' /Type /CryptFilter'; - if (isset($this->encryptdata['CF']['CFM']) AND !empty($this->encryptdata['CF']['CFM'])) { - // The method used - $out .= ' /CFM /'.$this->encryptdata['CF']['CFM']; - if ($this->encryptdata['pubkey']) { - $out .= ' /Recipients ['; - foreach ($this->encryptdata['Recipients'] as $rec) { - $out .= ' <'.$rec.'>'; - } - $out .= ' ]'; - if (isset($this->encryptdata['CF']['EncryptMetadata']) AND (!$this->encryptdata['CF']['EncryptMetadata'])) { - $out .= ' /EncryptMetadata false'; - } else { - $out .= ' /EncryptMetadata true'; - } - } - } else { - $out .= ' /CFM /None'; - } - if (isset($this->encryptdata['CF']['AuthEvent']) AND !empty($this->encryptdata['CF']['AuthEvent'])) { - // The event to be used to trigger the authorization that is required to access encryption keys used by this filter. - $out .= ' /AuthEvent /'.$this->encryptdata['CF']['AuthEvent']; - } else { - $out .= ' /AuthEvent /DocOpen'; - } - if (isset($this->encryptdata['CF']['Length']) AND !empty($this->encryptdata['CF']['Length'])) { - // The bit length of the encryption key. - $out .= ' /Length '.$this->encryptdata['CF']['Length']; - } - $out .= ' >> >>'; - } - // The name of the crypt filter that shall be used by default when decrypting streams. - $out .= ' /StmF /'.$this->encryptdata['StmF']; - // The name of the crypt filter that shall be used when decrypting all strings in the document. - $out .= ' /StrF /'.$this->encryptdata['StrF']; - if (isset($this->encryptdata['EFF']) AND !empty($this->encryptdata['EFF'])) { - // The name of the crypt filter that shall be used when encrypting embedded file streams that do not have their own crypt filter specifier. - $out .= ' /EFF /'.$this->encryptdata['']; - } - } - // Additional encryption dictionary entries for the standard security handler - if ($this->encryptdata['pubkey']) { - if (($this->encryptdata['V'] < 4) AND isset($this->encryptdata['Recipients']) AND !empty($this->encryptdata['Recipients'])) { - $out .= ' /Recipients ['; - foreach ($this->encryptdata['Recipients'] as $rec) { - $out .= ' <'.$rec.'>'; - } - $out .= ' ]'; - } - } else { - $out .= ' /R'; - if ($this->encryptdata['V'] == 5) { // AES-256 - $out .= ' 5'; - $out .= ' /OE ('.TCPDF_STATIC::_escape($this->encryptdata['OE']).')'; - $out .= ' /UE ('.TCPDF_STATIC::_escape($this->encryptdata['UE']).')'; - $out .= ' /Perms ('.TCPDF_STATIC::_escape($this->encryptdata['perms']).')'; - } elseif ($this->encryptdata['V'] == 4) { // AES-128 - $out .= ' 4'; - } elseif ($this->encryptdata['V'] < 2) { // RC-40 - $out .= ' 2'; - } else { // RC-128 - $out .= ' 3'; - } - $out .= ' /O ('.TCPDF_STATIC::_escape($this->encryptdata['O']).')'; - $out .= ' /U ('.TCPDF_STATIC::_escape($this->encryptdata['U']).')'; - $out .= ' /P '.$this->encryptdata['P']; - if (isset($this->encryptdata['EncryptMetadata']) AND (!$this->encryptdata['EncryptMetadata'])) { - $out .= ' /EncryptMetadata false'; - } else { - $out .= ' /EncryptMetadata true'; - } - } - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - - /** - * Compute U value (used for encryption) - * @return string U value - * @protected - * @since 2.0.000 (2008-01-02) - * @author Nicola Asuni - */ - protected function _Uvalue() { - if ($this->encryptdata['mode'] == 0) { // RC4-40 - return TCPDF_STATIC::_RC4($this->encryptdata['key'], TCPDF_STATIC::$enc_padding, $this->last_enc_key, $this->last_enc_key_c); - } elseif ($this->encryptdata['mode'] < 3) { // RC4-128, AES-128 - $tmp = TCPDF_STATIC::_md5_16(TCPDF_STATIC::$enc_padding.$this->encryptdata['fileid']); - $enc = TCPDF_STATIC::_RC4($this->encryptdata['key'], $tmp, $this->last_enc_key, $this->last_enc_key_c); - $len = strlen($tmp); - for ($i = 1; $i <= 19; ++$i) { - $ek = ''; - for ($j = 0; $j < $len; ++$j) { - $ek .= chr(ord($this->encryptdata['key'][$j]) ^ $i); - } - $enc = TCPDF_STATIC::_RC4($ek, $enc, $this->last_enc_key, $this->last_enc_key_c); - } - $enc .= str_repeat("\x00", 16); - return substr($enc, 0, 32); - } elseif ($this->encryptdata['mode'] == 3) { // AES-256 - $seed = TCPDF_STATIC::_md5_16(TCPDF_STATIC::getRandomSeed()); - // User Validation Salt - $this->encryptdata['UVS'] = substr($seed, 0, 8); - // User Key Salt - $this->encryptdata['UKS'] = substr($seed, 8, 16); - return hash('sha256', $this->encryptdata['user_password'].$this->encryptdata['UVS'], true).$this->encryptdata['UVS'].$this->encryptdata['UKS']; - } - } - - /** - * Compute UE value (used for encryption) - * @return string UE value - * @protected - * @since 5.9.006 (2010-10-19) - * @author Nicola Asuni - */ - protected function _UEvalue() { - $hashkey = hash('sha256', $this->encryptdata['user_password'].$this->encryptdata['UKS'], true); - return TCPDF_STATIC::_AESnopad($hashkey, $this->encryptdata['key']); - } - - /** - * Compute O value (used for encryption) - * @return string O value - * @protected - * @since 2.0.000 (2008-01-02) - * @author Nicola Asuni - */ - protected function _Ovalue() { - if ($this->encryptdata['mode'] < 3) { // RC4-40, RC4-128, AES-128 - $tmp = TCPDF_STATIC::_md5_16($this->encryptdata['owner_password']); - if ($this->encryptdata['mode'] > 0) { - for ($i = 0; $i < 50; ++$i) { - $tmp = TCPDF_STATIC::_md5_16($tmp); - } - } - $owner_key = substr($tmp, 0, ($this->encryptdata['Length'] / 8)); - $enc = TCPDF_STATIC::_RC4($owner_key, $this->encryptdata['user_password'], $this->last_enc_key, $this->last_enc_key_c); - if ($this->encryptdata['mode'] > 0) { - $len = strlen($owner_key); - for ($i = 1; $i <= 19; ++$i) { - $ek = ''; - for ($j = 0; $j < $len; ++$j) { - $ek .= chr(ord($owner_key[$j]) ^ $i); - } - $enc = TCPDF_STATIC::_RC4($ek, $enc, $this->last_enc_key, $this->last_enc_key_c); - } - } - return $enc; - } elseif ($this->encryptdata['mode'] == 3) { // AES-256 - $seed = TCPDF_STATIC::_md5_16(TCPDF_STATIC::getRandomSeed()); - // Owner Validation Salt - $this->encryptdata['OVS'] = substr($seed, 0, 8); - // Owner Key Salt - $this->encryptdata['OKS'] = substr($seed, 8, 16); - return hash('sha256', $this->encryptdata['owner_password'].$this->encryptdata['OVS'].$this->encryptdata['U'], true).$this->encryptdata['OVS'].$this->encryptdata['OKS']; - } - } - - /** - * Compute OE value (used for encryption) - * @return string OE value - * @protected - * @since 5.9.006 (2010-10-19) - * @author Nicola Asuni - */ - protected function _OEvalue() { - $hashkey = hash('sha256', $this->encryptdata['owner_password'].$this->encryptdata['OKS'].$this->encryptdata['U'], true); - return TCPDF_STATIC::_AESnopad($hashkey, $this->encryptdata['key']); - } - - /** - * Convert password for AES-256 encryption mode - * @param string $password password - * @return string password - * @protected - * @since 5.9.006 (2010-10-19) - * @author Nicola Asuni - */ - protected function _fixAES256Password($password) { - $psw = ''; // password to be returned - $psw_array = TCPDF_FONTS::utf8Bidi(TCPDF_FONTS::UTF8StringToArray($password, $this->isunicode, $this->CurrentFont), $password, $this->rtl, $this->isunicode, $this->CurrentFont); - foreach ($psw_array as $c) { - $psw .= TCPDF_FONTS::unichr($c, $this->isunicode); - } - return substr($psw, 0, 127); - } - - /** - * Compute encryption key - * @protected - * @since 2.0.000 (2008-01-02) - * @author Nicola Asuni - */ - protected function _generateencryptionkey() { - $keybytelen = ($this->encryptdata['Length'] / 8); - if (!$this->encryptdata['pubkey']) { // standard mode - if ($this->encryptdata['mode'] == 3) { // AES-256 - // generate 256 bit random key - $this->encryptdata['key'] = substr(hash('sha256', TCPDF_STATIC::getRandomSeed(), true), 0, $keybytelen); - // truncate passwords - $this->encryptdata['user_password'] = $this->_fixAES256Password($this->encryptdata['user_password']); - $this->encryptdata['owner_password'] = $this->_fixAES256Password($this->encryptdata['owner_password']); - // Compute U value - $this->encryptdata['U'] = $this->_Uvalue(); - // Compute UE value - $this->encryptdata['UE'] = $this->_UEvalue(); - // Compute O value - $this->encryptdata['O'] = $this->_Ovalue(); - // Compute OE value - $this->encryptdata['OE'] = $this->_OEvalue(); - // Compute P value - $this->encryptdata['P'] = $this->encryptdata['protection']; - // Computing the encryption dictionary's Perms (permissions) value - $perms = TCPDF_STATIC::getEncPermissionsString($this->encryptdata['protection']); // bytes 0-3 - $perms .= chr(255).chr(255).chr(255).chr(255); // bytes 4-7 - if (isset($this->encryptdata['CF']['EncryptMetadata']) AND (!$this->encryptdata['CF']['EncryptMetadata'])) { // byte 8 - $perms .= 'F'; - } else { - $perms .= 'T'; - } - $perms .= 'adb'; // bytes 9-11 - $perms .= 'nick'; // bytes 12-15 - $this->encryptdata['perms'] = TCPDF_STATIC::_AESnopad($this->encryptdata['key'], $perms); - } else { // RC4-40, RC4-128, AES-128 - // Pad passwords - $this->encryptdata['user_password'] = substr($this->encryptdata['user_password'].TCPDF_STATIC::$enc_padding, 0, 32); - $this->encryptdata['owner_password'] = substr($this->encryptdata['owner_password'].TCPDF_STATIC::$enc_padding, 0, 32); - // Compute O value - $this->encryptdata['O'] = $this->_Ovalue(); - // get default permissions (reverse byte order) - $permissions = TCPDF_STATIC::getEncPermissionsString($this->encryptdata['protection']); - // Compute encryption key - $tmp = TCPDF_STATIC::_md5_16($this->encryptdata['user_password'].$this->encryptdata['O'].$permissions.$this->encryptdata['fileid']); - if ($this->encryptdata['mode'] > 0) { - for ($i = 0; $i < 50; ++$i) { - $tmp = TCPDF_STATIC::_md5_16(substr($tmp, 0, $keybytelen)); - } - } - $this->encryptdata['key'] = substr($tmp, 0, $keybytelen); - // Compute U value - $this->encryptdata['U'] = $this->_Uvalue(); - // Compute P value - $this->encryptdata['P'] = $this->encryptdata['protection']; - } - } else { // Public-Key mode - // random 20-byte seed - $seed = sha1(TCPDF_STATIC::getRandomSeed(), true); - $recipient_bytes = ''; - foreach ($this->encryptdata['pubkeys'] as $pubkey) { - // for each public certificate - if (isset($pubkey['p'])) { - $pkprotection = TCPDF_STATIC::getUserPermissionCode($pubkey['p'], $this->encryptdata['mode']); - } else { - $pkprotection = $this->encryptdata['protection']; - } - // get default permissions (reverse byte order) - $pkpermissions = TCPDF_STATIC::getEncPermissionsString($pkprotection); - // envelope data - $envelope = $seed.$pkpermissions; - // write the envelope data to a temporary file - $tempkeyfile = TCPDF_STATIC::getObjFilename('key', $this->file_id); - $f = TCPDF_STATIC::fopenLocal($tempkeyfile, 'wb'); - if (!$f) { - $this->Error('Unable to create temporary key file: '.$tempkeyfile); - } - $envelope_length = strlen($envelope); - fwrite($f, $envelope, $envelope_length); - fclose($f); - $tempencfile = TCPDF_STATIC::getObjFilename('enc', $this->file_id); - if (!openssl_pkcs7_encrypt($tempkeyfile, $tempencfile, $pubkey['c'], array(), PKCS7_BINARY | PKCS7_DETACHED)) { - $this->Error('Unable to encrypt the file: '.$tempkeyfile); - } - // read encryption signature - $signature = file_get_contents($tempencfile, false, null, $envelope_length); - // extract signature - $signature = substr($signature, strpos($signature, 'Content-Disposition')); - $tmparr = explode("\n\n", $signature); - $signature = trim($tmparr[1]); - unset($tmparr); - // decode signature - $signature = base64_decode($signature); - // convert signature to hex - $hexsignature = current(unpack('H*', $signature)); - // store signature on recipients array - $this->encryptdata['Recipients'][] = $hexsignature; - // The bytes of each item in the Recipients array of PKCS#7 objects in the order in which they appear in the array - $recipient_bytes .= $signature; - } - // calculate encryption key - if ($this->encryptdata['mode'] == 3) { // AES-256 - $this->encryptdata['key'] = substr(hash('sha256', $seed.$recipient_bytes, true), 0, $keybytelen); - } else { // RC4-40, RC4-128, AES-128 - $this->encryptdata['key'] = substr(sha1($seed.$recipient_bytes, true), 0, $keybytelen); - } - } - } - - /** - * Set document protection - * Remark: the protection against modification is for people who have the full Acrobat product. - * If you don't set any password, the document will open as usual. If you set a user password, the PDF viewer will ask for it before displaying the document. The master password, if different from the user one, can be used to get full access. - * Note: protecting a document requires to encrypt it, which increases the processing time a lot. This can cause a PHP time-out in some cases, especially if the document contains images or fonts. - * @param array $permissions the set of permissions (specify the ones you want to block):
            • print : Print the document;
            • modify : Modify the contents of the document by operations other than those controlled by 'fill-forms', 'extract' and 'assemble';
            • copy : Copy or otherwise extract text and graphics from the document;
            • annot-forms : Add or modify text annotations, fill in interactive form fields, and, if 'modify' is also set, create or modify interactive form fields (including signature fields);
            • fill-forms : Fill in existing interactive form fields (including signature fields), even if 'annot-forms' is not specified;
            • extract : Extract text and graphics (in support of accessibility to users with disabilities or for other purposes);
            • assemble : Assemble the document (insert, rotate, or delete pages and create bookmarks or thumbnail images), even if 'modify' is not set;
            • print-high : Print the document to a representation from which a faithful digital copy of the PDF content could be generated. When this is not set, printing is limited to a low-level representation of the appearance, possibly of degraded quality.
            • owner : (inverted logic - only for public-key) when set permits change of encryption and enables all other permissions.
            - * @param string $user_pass user password. Empty by default. - * @param string|null $owner_pass owner password. If not specified, a random value is used. - * @param int $mode encryption strength: 0 = RC4 40 bit; 1 = RC4 128 bit; 2 = AES 128 bit; 3 = AES 256 bit. - * @param array|null $pubkeys array of recipients containing public-key certificates ('c') and permissions ('p'). For example: array(array('c' => 'file://../examples/data/cert/tcpdf.crt', 'p' => array('print'))) - * @public - * @since 2.0.000 (2008-01-02) - * @author Nicola Asuni - */ - public function setProtection($permissions=array('print', 'modify', 'copy', 'annot-forms', 'fill-forms', 'extract', 'assemble', 'print-high'), $user_pass='', $owner_pass=null, $mode=0, $pubkeys=null) { - if ($this->pdfa_mode) { - // encryption is not allowed in PDF/A mode - return; - } - $this->encryptdata['protection'] = TCPDF_STATIC::getUserPermissionCode($permissions, $mode); - if (($pubkeys !== null) AND (is_array($pubkeys))) { - // public-key mode - $this->encryptdata['pubkeys'] = $pubkeys; - if ($mode == 0) { - // public-Key Security requires at least 128 bit - $mode = 1; - } - if (!function_exists('openssl_pkcs7_encrypt')) { - $this->Error('Public-Key Security requires openssl library.'); - } - // Set Public-Key filter (available are: Entrust.PPKEF, Adobe.PPKLite, Adobe.PubSec) - $this->encryptdata['pubkey'] = true; - $this->encryptdata['Filter'] = 'Adobe.PubSec'; - $this->encryptdata['StmF'] = 'DefaultCryptFilter'; - $this->encryptdata['StrF'] = 'DefaultCryptFilter'; - } else { - // standard mode (password mode) - $this->encryptdata['pubkey'] = false; - $this->encryptdata['Filter'] = 'Standard'; - $this->encryptdata['StmF'] = 'StdCF'; - $this->encryptdata['StrF'] = 'StdCF'; - } - if ($mode > 1) { // AES - if (!extension_loaded('openssl') && !extension_loaded('mcrypt')) { - $this->Error('AES encryption requires openssl or mcrypt extension (http://www.php.net/manual/en/mcrypt.requirements.php).'); - } - if (extension_loaded('openssl') && !in_array('aes-256-cbc', openssl_get_cipher_methods())) { - $this->Error('AES encryption requires openssl/aes-256-cbc cypher.'); - } - if (extension_loaded('mcrypt') && mcrypt_get_cipher_name(MCRYPT_RIJNDAEL_128) === false) { - $this->Error('AES encryption requires MCRYPT_RIJNDAEL_128 cypher.'); - } - if (($mode == 3) AND !function_exists('hash')) { - // the Hash extension requires no external libraries and is enabled by default as of PHP 5.1.2. - $this->Error('AES 256 encryption requires HASH Message Digest Framework (http://www.php.net/manual/en/book.hash.php).'); - } - } - if ($owner_pass === null) { - $owner_pass = md5(TCPDF_STATIC::getRandomSeed()); - } - $this->encryptdata['user_password'] = $user_pass; - $this->encryptdata['owner_password'] = $owner_pass; - $this->encryptdata['mode'] = $mode; - switch ($mode) { - case 0: { // RC4 40 bit - $this->encryptdata['V'] = 1; - $this->encryptdata['Length'] = 40; - $this->encryptdata['CF']['CFM'] = 'V2'; - break; - } - case 1: { // RC4 128 bit - $this->encryptdata['V'] = 2; - $this->encryptdata['Length'] = 128; - $this->encryptdata['CF']['CFM'] = 'V2'; - if ($this->encryptdata['pubkey']) { - $this->encryptdata['SubFilter'] = 'adbe.pkcs7.s4'; - $this->encryptdata['Recipients'] = array(); - } - break; - } - case 2: { // AES 128 bit - $this->encryptdata['V'] = 4; - $this->encryptdata['Length'] = 128; - $this->encryptdata['CF']['CFM'] = 'AESV2'; - $this->encryptdata['CF']['Length'] = 128; - if ($this->encryptdata['pubkey']) { - $this->encryptdata['SubFilter'] = 'adbe.pkcs7.s5'; - $this->encryptdata['Recipients'] = array(); - } - break; - } - case 3: { // AES 256 bit - $this->encryptdata['V'] = 5; - $this->encryptdata['Length'] = 256; - $this->encryptdata['CF']['CFM'] = 'AESV3'; - $this->encryptdata['CF']['Length'] = 256; - if ($this->encryptdata['pubkey']) { - $this->encryptdata['SubFilter'] = 'adbe.pkcs7.s5'; - $this->encryptdata['Recipients'] = array(); - } - break; - } - } - $this->encrypted = true; - $this->encryptdata['fileid'] = TCPDF_STATIC::convertHexStringToString($this->file_id); - $this->_generateencryptionkey(); - } - - // END OF ENCRYPTION FUNCTIONS ------------------------- - - // START TRANSFORMATIONS SECTION ----------------------- - - /** - * Starts a 2D tranformation saving current graphic state. - * This function must be called before scaling, mirroring, translation, rotation and skewing. - * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function StartTransform() { - if ($this->state != 2) { - return; - } - $this->_outSaveGraphicsState(); - if ($this->inxobj) { - // we are inside an XObject template - $this->xobjects[$this->xobjid]['transfmrk'][] = strlen($this->xobjects[$this->xobjid]['outdata']); - } else { - $this->transfmrk[$this->page][] = $this->pagelen[$this->page]; - } - ++$this->transfmatrix_key; - $this->transfmatrix[$this->transfmatrix_key] = array(); - } - - /** - * Stops a 2D tranformation restoring previous graphic state. - * This function must be called after scaling, mirroring, translation, rotation and skewing. - * Use StartTransform() before, and StopTransform() after the transformations to restore the normal behavior. - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function StopTransform() { - if ($this->state != 2) { - return; - } - $this->_outRestoreGraphicsState(); - if (isset($this->transfmatrix[$this->transfmatrix_key])) { - array_pop($this->transfmatrix[$this->transfmatrix_key]); - --$this->transfmatrix_key; - } - if ($this->inxobj) { - // we are inside an XObject template - array_pop($this->xobjects[$this->xobjid]['transfmrk']); - } else { - array_pop($this->transfmrk[$this->page]); - } - } - /** - * Horizontal Scaling. - * @param float $s_x scaling factor for width as percent. 0 is not allowed. - * @param int $x abscissa of the scaling center. Default is current x position - * @param int $y ordinate of the scaling center. Default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function ScaleX($s_x, $x='', $y='') { - $this->Scale($s_x, 100, $x, $y); - } - - /** - * Vertical Scaling. - * @param float $s_y scaling factor for height as percent. 0 is not allowed. - * @param int $x abscissa of the scaling center. Default is current x position - * @param int $y ordinate of the scaling center. Default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function ScaleY($s_y, $x='', $y='') { - $this->Scale(100, $s_y, $x, $y); - } - - /** - * Vertical and horizontal proportional Scaling. - * @param float $s scaling factor for width and height as percent. 0 is not allowed. - * @param int $x abscissa of the scaling center. Default is current x position - * @param int $y ordinate of the scaling center. Default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function ScaleXY($s, $x='', $y='') { - $this->Scale($s, $s, $x, $y); - } - - /** - * Vertical and horizontal non-proportional Scaling. - * @param float $s_x scaling factor for width as percent. 0 is not allowed. - * @param float $s_y scaling factor for height as percent. 0 is not allowed. - * @param float|null $x abscissa of the scaling center. Default is current x position - * @param float|null $y ordinate of the scaling center. Default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function Scale($s_x, $s_y, $x=null, $y=null) { - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - if (($s_x == 0) OR ($s_y == 0)) { - $this->Error('Please do not use values equal to zero for scaling'); - } - $y = ($this->h - $y) * $this->k; - $x *= $this->k; - //calculate elements of transformation matrix - $s_x /= 100; - $s_y /= 100; - $tm = array(); - $tm[0] = $s_x; - $tm[1] = 0; - $tm[2] = 0; - $tm[3] = $s_y; - $tm[4] = $x * (1 - $s_x); - $tm[5] = $y * (1 - $s_y); - //scale the coordinate system - $this->Transform($tm); - } - - /** - * Horizontal Mirroring. - * @param float|null $x abscissa of the point. Default is current x position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function MirrorH($x=null) { - $this->Scale(-100, 100, $x); - } - - /** - * Verical Mirroring. - * @param float|null $y ordinate of the point. Default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function MirrorV($y=null) { - $this->Scale(100, -100, null, $y); - } - - /** - * Point reflection mirroring. - * @param float|null $x abscissa of the point. Default is current x position - * @param float|null $y ordinate of the point. Default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function MirrorP($x=null,$y=null) { - $this->Scale(-100, -100, $x, $y); - } - - /** - * Reflection against a straight line through point (x, y) with the gradient angle (angle). - * @param float $angle gradient angle of the straight line. Default is 0 (horizontal line). - * @param float|null $x abscissa of the point. Default is current x position - * @param float|null $y ordinate of the point. Default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function MirrorL($angle=0, $x=null,$y=null) { - $this->Scale(-100, 100, $x, $y); - $this->Rotate(-2*($angle-90), $x, $y); - } - - /** - * Translate graphic object horizontally. - * @param int $t_x movement to the right (or left for RTL) - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function TranslateX($t_x) { - $this->Translate($t_x, 0); - } - - /** - * Translate graphic object vertically. - * @param int $t_y movement to the bottom - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function TranslateY($t_y) { - $this->Translate(0, $t_y); - } - - /** - * Translate graphic object horizontally and vertically. - * @param int $t_x movement to the right - * @param int $t_y movement to the bottom - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function Translate($t_x, $t_y) { - //calculate elements of transformation matrix - $tm = array(); - $tm[0] = 1; - $tm[1] = 0; - $tm[2] = 0; - $tm[3] = 1; - $tm[4] = $t_x * $this->k; - $tm[5] = -$t_y * $this->k; - //translate the coordinate system - $this->Transform($tm); - } - - /** - * Rotate object. - * @param float $angle angle in degrees for counter-clockwise rotation - * @param float|null $x abscissa of the rotation center. Default is current x position - * @param float|null $y ordinate of the rotation center. Default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function Rotate($angle, $x=null, $y=null) { - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - $y = ($this->h - $y) * $this->k; - $x *= $this->k; - //calculate elements of transformation matrix - $tm = array(); - $tm[0] = cos(deg2rad($angle)); - $tm[1] = sin(deg2rad($angle)); - $tm[2] = -$tm[1]; - $tm[3] = $tm[0]; - $tm[4] = $x + ($tm[1] * $y) - ($tm[0] * $x); - $tm[5] = $y - ($tm[0] * $y) - ($tm[1] * $x); - //rotate the coordinate system around ($x,$y) - $this->Transform($tm); - } - - /** - * Skew horizontally. - * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right) - * @param float|null $x abscissa of the skewing center. default is current x position - * @param float|null $y ordinate of the skewing center. default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function SkewX($angle_x, $x=null, $y=null) { - $this->Skew($angle_x, 0, $x, $y); - } - - /** - * Skew vertically. - * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top) - * @param float|null $x abscissa of the skewing center. default is current x position - * @param float|null $y ordinate of the skewing center. default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function SkewY($angle_y, $x=null, $y=null) { - $this->Skew(0, $angle_y, $x, $y); - } - - /** - * Skew. - * @param float $angle_x angle in degrees between -90 (skew to the left) and 90 (skew to the right) - * @param float $angle_y angle in degrees between -90 (skew to the bottom) and 90 (skew to the top) - * @param float|null $x abscissa of the skewing center. default is current x position - * @param float|null $y ordinate of the skewing center. default is current y position - * @public - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - public function Skew($angle_x, $angle_y, $x=null, $y=null) { - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - if (($angle_x <= -90) OR ($angle_x >= 90) OR ($angle_y <= -90) OR ($angle_y >= 90)) { - $this->Error('Please use values between -90 and +90 degrees for Skewing.'); - } - $x *= $this->k; - $y = ($this->h - $y) * $this->k; - //calculate elements of transformation matrix - $tm = array(); - $tm[0] = 1; - $tm[1] = tan(deg2rad($angle_y)); - $tm[2] = tan(deg2rad($angle_x)); - $tm[3] = 1; - $tm[4] = -$tm[2] * $y; - $tm[5] = -$tm[1] * $x; - //skew the coordinate system - $this->Transform($tm); - } - - /** - * Apply graphic transformations. - * @param array $tm transformation matrix - * @protected - * @since 2.1.000 (2008-01-07) - * @see StartTransform(), StopTransform() - */ - protected function Transform($tm) { - if ($this->state != 2) { - return; - } - $this->_out(sprintf('%F %F %F %F %F %F cm', $tm[0], $tm[1], $tm[2], $tm[3], $tm[4], $tm[5])); - // add tranformation matrix - $this->transfmatrix[$this->transfmatrix_key][] = array('a' => $tm[0], 'b' => $tm[1], 'c' => $tm[2], 'd' => $tm[3], 'e' => $tm[4], 'f' => $tm[5]); - // update transformation mark - if ($this->inxobj) { - // we are inside an XObject template - if (end($this->xobjects[$this->xobjid]['transfmrk']) !== false) { - $key = key($this->xobjects[$this->xobjid]['transfmrk']); - $this->xobjects[$this->xobjid]['transfmrk'][$key] = strlen($this->xobjects[$this->xobjid]['outdata']); - } - } elseif (end($this->transfmrk[$this->page]) !== false) { - $key = key($this->transfmrk[$this->page]); - $this->transfmrk[$this->page][$key] = $this->pagelen[$this->page]; - } - } - - // END TRANSFORMATIONS SECTION ------------------------- - - // START GRAPHIC FUNCTIONS SECTION --------------------- - // The following section is based on the code provided by David Hernandez Sanz - - /** - * Defines the line width. By default, the value equals 0.2 mm. The method can be called before the first page is created and the value is retained from page to page. - * @param float $width The width. - * @public - * @since 1.0 - * @see Line(), Rect(), Cell(), MultiCell() - */ - public function setLineWidth($width) { - //Set line width - $this->LineWidth = $width; - $this->linestyleWidth = sprintf('%F w', ($width * $this->k)); - if ($this->state == 2) { - $this->_out($this->linestyleWidth); - } - } - - /** - * Returns the current the line width. - * @return int Line width - * @public - * @since 2.1.000 (2008-01-07) - * @see Line(), SetLineWidth() - */ - public function GetLineWidth() { - return $this->LineWidth; - } - - /** - * Set line style. - * @param array $style Line style. Array with keys among the following: - *
              - *
            • width (float): Width of the line in user units.
            • - *
            • cap (string): Type of cap to put on the line. Possible values are: - * butt, round, square. The difference between "square" and "butt" is that - * "square" projects a flat end past the end of the line.
            • - *
            • join (string): Type of join. Possible values are: miter, round, - * bevel.
            • - *
            • dash (mixed): Dash pattern. Is 0 (without dash) or string with - * series of length values, which are the lengths of the on and off dashes. - * For example: "2" represents 2 on, 2 off, 2 on, 2 off, ...; "2,1" is 2 on, - * 1 off, 2 on, 1 off, ...
            • - *
            • phase (integer): Modifier on the dash pattern which is used to shift - * the point at which the pattern starts.
            • - *
            • color (array): Draw color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName).
            • - *
            - * @param boolean $ret if true do not send the command. - * @return string the PDF command - * @public - * @since 2.1.000 (2008-01-08) - */ - public function setLineStyle($style, $ret=false) { - $s = ''; // string to be returned - if (!is_array($style)) { - return $s; - } - if (isset($style['width'])) { - $this->LineWidth = $style['width']; - $this->linestyleWidth = sprintf('%F w', ($style['width'] * $this->k)); - $s .= $this->linestyleWidth.' '; - } - if (isset($style['cap'])) { - $ca = array('butt' => 0, 'round'=> 1, 'square' => 2); - if (isset($ca[$style['cap']])) { - $this->linestyleCap = $ca[$style['cap']].' J'; - $s .= $this->linestyleCap.' '; - } - } - if (isset($style['join'])) { - $ja = array('miter' => 0, 'round' => 1, 'bevel' => 2); - if (isset($ja[$style['join']])) { - $this->linestyleJoin = $ja[$style['join']].' j'; - $s .= $this->linestyleJoin.' '; - } - } - if (isset($style['dash'])) { - $dash_string = ''; - if ($style['dash']) { - if (preg_match('/^.+,/', $style['dash']) > 0) { - $tab = explode(',', $style['dash']); - } else { - $tab = array($style['dash']); - } - $dash_string = ''; - foreach ($tab as $i => $v) { - if ($i) { - $dash_string .= ' '; - } - $dash_string .= sprintf('%F', $v); - } - } - if (!isset($style['phase']) OR !$style['dash']) { - $style['phase'] = 0; - } - $this->linestyleDash = sprintf('[%s] %F d', $dash_string, $style['phase']); - $s .= $this->linestyleDash.' '; - } - if (isset($style['color'])) { - $s .= $this->setDrawColorArray($style['color'], true).' '; - } - if (!$ret AND ($this->state == 2)) { - $this->_out($s); - } - return $s; - } - - /** - * Begin a new subpath by moving the current point to coordinates (x, y), omitting any connecting line segment. - * @param float $x Abscissa of point. - * @param float $y Ordinate of point. - * @protected - * @since 2.1.000 (2008-01-08) - */ - protected function _outPoint($x, $y) { - if ($this->state == 2) { - $this->_out(sprintf('%F %F m', ($x * $this->k), (($this->h - $y) * $this->k))); - } - } - - /** - * Append a straight line segment from the current point to the point (x, y). - * The new current point shall be (x, y). - * @param float $x Abscissa of end point. - * @param float $y Ordinate of end point. - * @protected - * @since 2.1.000 (2008-01-08) - */ - protected function _outLine($x, $y) { - if ($this->state == 2) { - $this->_out(sprintf('%F %F l', ($x * $this->k), (($this->h - $y) * $this->k))); - } - } - - /** - * Append a rectangle to the current path as a complete subpath, with lower-left corner (x, y) and dimensions widthand height in user space. - * @param float $x Abscissa of upper-left corner. - * @param float $y Ordinate of upper-left corner. - * @param float $w Width. - * @param float $h Height. - * @param string $op options - * @protected - * @since 2.1.000 (2008-01-08) - */ - protected function _outRect($x, $y, $w, $h, $op) { - if ($this->state == 2) { - $this->_out(sprintf('%F %F %F %F re %s', ($x * $this->k), (($this->h - $y) * $this->k), ($w * $this->k), (-$h * $this->k), $op)); - } - } - - /** - * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x2, y2) as the Bezier control points. - * The new current point shall be (x3, y3). - * @param float $x1 Abscissa of control point 1. - * @param float $y1 Ordinate of control point 1. - * @param float $x2 Abscissa of control point 2. - * @param float $y2 Ordinate of control point 2. - * @param float $x3 Abscissa of end point. - * @param float $y3 Ordinate of end point. - * @protected - * @since 2.1.000 (2008-01-08) - */ - protected function _outCurve($x1, $y1, $x2, $y2, $x3, $y3) { - if ($this->state == 2) { - $this->_out(sprintf('%F %F %F %F %F %F c', ($x1 * $this->k), (($this->h - $y1) * $this->k), ($x2 * $this->k), (($this->h - $y2) * $this->k), ($x3 * $this->k), (($this->h - $y3) * $this->k))); - } - } - - /** - * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using the current point and (x2, y2) as the Bezier control points. - * The new current point shall be (x3, y3). - * @param float $x2 Abscissa of control point 2. - * @param float $y2 Ordinate of control point 2. - * @param float $x3 Abscissa of end point. - * @param float $y3 Ordinate of end point. - * @protected - * @since 4.9.019 (2010-04-26) - */ - protected function _outCurveV($x2, $y2, $x3, $y3) { - if ($this->state == 2) { - $this->_out(sprintf('%F %F %F %F v', ($x2 * $this->k), (($this->h - $y2) * $this->k), ($x3 * $this->k), (($this->h - $y3) * $this->k))); - } - } - - /** - * Append a cubic Bezier curve to the current path. The curve shall extend from the current point to the point (x3, y3), using (x1, y1) and (x3, y3) as the Bezier control points. - * The new current point shall be (x3, y3). - * @param float $x1 Abscissa of control point 1. - * @param float $y1 Ordinate of control point 1. - * @param float $x3 Abscissa of end point. - * @param float $y3 Ordinate of end point. - * @protected - * @since 2.1.000 (2008-01-08) - */ - protected function _outCurveY($x1, $y1, $x3, $y3) { - if ($this->state == 2) { - $this->_out(sprintf('%F %F %F %F y', ($x1 * $this->k), (($this->h - $y1) * $this->k), ($x3 * $this->k), (($this->h - $y3) * $this->k))); - } - } - - /** - * Draws a line between two points. - * @param float $x1 Abscissa of first point. - * @param float $y1 Ordinate of first point. - * @param float $x2 Abscissa of second point. - * @param float $y2 Ordinate of second point. - * @param array $style Line style. Array like for SetLineStyle(). Default value: default line style (empty array). - * @public - * @since 1.0 - * @see SetLineWidth(), SetDrawColor(), SetLineStyle() - */ - public function Line($x1, $y1, $x2, $y2, $style=array()) { - if ($this->state != 2) { - return; - } - if (is_array($style)) { - $this->setLineStyle($style); - } - $this->_outPoint($x1, $y1); - $this->_outLine($x2, $y2); - $this->_out('S'); - } - - /** - * Draws a rectangle. - * @param float $x Abscissa of upper-left corner. - * @param float $y Ordinate of upper-left corner. - * @param float $w Width. - * @param float $h Height. - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $border_style Border style of rectangle. Array with keys among the following: - *
              - *
            • all: Line style of all borders. Array like for SetLineStyle().
            • - *
            • L, T, R, B or combinations: Line style of left, top, right or bottom border. Array like for SetLineStyle().
            • - *
            - * If a key is not present or is null, the correspondent border is not drawn. Default value: default line style (empty array). - * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). - * @public - * @since 1.0 - * @see SetLineStyle() - */ - public function Rect($x, $y, $w, $h, $style='', $border_style=array(), $fill_color=array()) { - if ($this->state != 2) { - return; - } - if (empty($style)) { - $style = 'S'; - } - if (!(strpos($style, 'F') === false) AND !empty($fill_color)) { - // set background color - $this->setFillColorArray($fill_color); - } - if (!empty($border_style)) { - if (isset($border_style['all']) AND !empty($border_style['all'])) { - //set global style for border - $this->setLineStyle($border_style['all']); - $border_style = array(); - } else { - // remove stroke operator from style - $opnostroke = array('S' => '', 'D' => '', 's' => '', 'd' => '', 'B' => 'F', 'FD' => 'F', 'DF' => 'F', 'B*' => 'F*', 'F*D' => 'F*', 'DF*' => 'F*', 'b' => 'f', 'fd' => 'f', 'df' => 'f', 'b*' => 'f*', 'f*d' => 'f*', 'df*' => 'f*' ); - if (isset($opnostroke[$style])) { - $style = $opnostroke[$style]; - } - } - } - if (!empty($style)) { - $op = TCPDF_STATIC::getPathPaintOperator($style); - $this->_outRect($x, $y, $w, $h, $op); - } - if (!empty($border_style)) { - $border_style2 = array(); - foreach ($border_style as $line => $value) { - $length = strlen($line); - for ($i = 0; $i < $length; ++$i) { - $border_style2[$line[$i]] = $value; - } - } - $border_style = $border_style2; - if (isset($border_style['L']) AND $border_style['L']) { - $this->Line($x, $y, $x, $y + $h, $border_style['L']); - } - if (isset($border_style['T']) AND $border_style['T']) { - $this->Line($x, $y, $x + $w, $y, $border_style['T']); - } - if (isset($border_style['R']) AND $border_style['R']) { - $this->Line($x + $w, $y, $x + $w, $y + $h, $border_style['R']); - } - if (isset($border_style['B']) AND $border_style['B']) { - $this->Line($x, $y + $h, $x + $w, $y + $h, $border_style['B']); - } - } - } - - /** - * Draws a Bezier curve. - * The Bezier curve is a tangent to the line between the control points at - * either end of the curve. - * @param float $x0 Abscissa of start point. - * @param float $y0 Ordinate of start point. - * @param float $x1 Abscissa of control point 1. - * @param float $y1 Ordinate of control point 1. - * @param float $x2 Abscissa of control point 2. - * @param float $y2 Ordinate of control point 2. - * @param float $x3 Abscissa of end point. - * @param float $y3 Ordinate of end point. - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $line_style Line style of curve. Array like for SetLineStyle(). Default value: default line style (empty array). - * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). - * @public - * @see SetLineStyle() - * @since 2.1.000 (2008-01-08) - */ - public function Curve($x0, $y0, $x1, $y1, $x2, $y2, $x3, $y3, $style='', $line_style=array(), $fill_color=array()) { - if ($this->state != 2) { - return; - } - if (!(false === strpos($style, 'F')) AND isset($fill_color)) { - $this->setFillColorArray($fill_color); - } - $op = TCPDF_STATIC::getPathPaintOperator($style); - if ($line_style) { - $this->setLineStyle($line_style); - } - $this->_outPoint($x0, $y0); - $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3); - $this->_out($op); - } - - /** - * Draws a poly-Bezier curve. - * Each Bezier curve segment is a tangent to the line between the control points at - * either end of the curve. - * @param float $x0 Abscissa of start point. - * @param float $y0 Ordinate of start point. - * @param float[] $segments An array of bezier descriptions. Format: array(x1, y1, x2, y2, x3, y3). - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $line_style Line style of curve. Array like for SetLineStyle(). Default value: default line style (empty array). - * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). - * @public - * @see SetLineStyle() - * @since 3.0008 (2008-05-12) - */ - public function Polycurve($x0, $y0, $segments, $style='', $line_style=array(), $fill_color=array()) { - if ($this->state != 2) { - return; - } - if (!(false === strpos($style, 'F')) AND isset($fill_color)) { - $this->setFillColorArray($fill_color); - } - $op = TCPDF_STATIC::getPathPaintOperator($style); - if ($op == 'f') { - $line_style = array(); - } - if ($line_style) { - $this->setLineStyle($line_style); - } - $this->_outPoint($x0, $y0); - foreach ($segments as $segment) { - list($x1, $y1, $x2, $y2, $x3, $y3) = $segment; - $this->_outCurve($x1, $y1, $x2, $y2, $x3, $y3); - } - $this->_out($op); - } - - /** - * Draws an ellipse. - * An ellipse is formed from n Bezier curves. - * @param float $x0 Abscissa of center point. - * @param float $y0 Ordinate of center point. - * @param float $rx Horizontal radius. - * @param float $ry Vertical radius (if ry = 0 then is a circle, see Circle()). Default value: 0. - * @param float $angle Angle oriented (anti-clockwise). Default value: 0. - * @param float $astart Angle start of draw line. Default value: 0. - * @param float $afinish Angle finish of draw line. Default value: 360. - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $line_style Line style of ellipse. Array like for SetLineStyle(). Default value: default line style (empty array). - * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). - * @param integer $nc Number of curves used to draw a 90 degrees portion of ellipse. - * @author Nicola Asuni - * @public - * @since 2.1.000 (2008-01-08) - */ - public function Ellipse($x0, $y0, $rx, $ry=0, $angle=0, $astart=0, $afinish=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) { - if ($this->state != 2) { - return; - } - if (TCPDF_STATIC::empty_string($ry) OR ($ry == 0)) { - $ry = $rx; - } - if (!(false === strpos($style, 'F')) AND isset($fill_color)) { - $this->setFillColorArray($fill_color); - } - $op = TCPDF_STATIC::getPathPaintOperator($style); - if ($op == 'f') { - $line_style = array(); - } - if ($line_style) { - $this->setLineStyle($line_style); - } - $this->_outellipticalarc($x0, $y0, $rx, $ry, $angle, $astart, $afinish, false, $nc, true, true, false); - $this->_out($op); - } - - /** - * Append an elliptical arc to the current path. - * An ellipse is formed from n Bezier curves. - * @param float $xc Abscissa of center point. - * @param float $yc Ordinate of center point. - * @param float $rx Horizontal radius. - * @param float $ry Vertical radius (if ry = 0 then is a circle, see Circle()). Default value: 0. - * @param float $xang Angle between the X-axis and the major axis of the ellipse. Default value: 0. - * @param float $angs Angle start of draw line. Default value: 0. - * @param float $angf Angle finish of draw line. Default value: 360. - * @param boolean $pie if true do not mark the border point (used to draw pie sectors). - * @param integer $nc Number of curves used to draw a 90 degrees portion of ellipse. - * @param boolean $startpoint if true output a starting point. - * @param boolean $ccw if true draws in counter-clockwise. - * @param boolean $svg if true the angles are in svg mode (already calculated). - * @return array bounding box coordinates (x min, y min, x max, y max) - * @author Nicola Asuni - * @protected - * @since 4.9.019 (2010-04-26) - */ - protected function _outellipticalarc($xc, $yc, $rx, $ry, $xang=0, $angs=0, $angf=360, $pie=false, $nc=2, $startpoint=true, $ccw=true, $svg=false) { - if (($rx <= 0) OR ($ry < 0)) { - return; - } - $k = $this->k; - if ($nc < 2) { - $nc = 2; - } - $xmin = 2147483647; - $ymin = 2147483647; - $xmax = 0; - $ymax = 0; - if ($pie) { - // center of the arc - $this->_outPoint($xc, $yc); - } - $xang = deg2rad((float) $xang); - $angs = deg2rad((float) $angs); - $angf = deg2rad((float) $angf); - if ($svg) { - $as = $angs; - $af = $angf; - } else { - $as = atan2((sin($angs) / $ry), (cos($angs) / $rx)); - $af = atan2((sin($angf) / $ry), (cos($angf) / $rx)); - } - if ($as < 0) { - $as += (2 * M_PI); - } - if ($af < 0) { - $af += (2 * M_PI); - } - if ($ccw AND ($as > $af)) { - // reverse rotation - $as -= (2 * M_PI); - } elseif (!$ccw AND ($as < $af)) { - // reverse rotation - $af -= (2 * M_PI); - } - $total_angle = ($af - $as); - if ($nc < 2) { - $nc = 2; - } - // total arcs to draw - $nc *= (2 * abs($total_angle) / M_PI); - $nc = round($nc) + 1; - // angle of each arc - $arcang = ($total_angle / $nc); - // center point in PDF coordinates - $x0 = $xc; - $y0 = ($this->h - $yc); - // starting angle - $ang = $as; - $alpha = sin($arcang) * ((sqrt(4 + (3 * pow(tan(($arcang) / 2), 2))) - 1) / 3); - $cos_xang = cos($xang); - $sin_xang = sin($xang); - $cos_ang = cos($ang); - $sin_ang = sin($ang); - // first arc point - $px1 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang); - $py1 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang); - // first Bezier control point - $qx1 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang))); - $qy1 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang))); - if ($pie) { - // line from center to arc starting point - $this->_outLine($px1, $this->h - $py1); - } elseif ($startpoint) { - // arc starting point - $this->_outPoint($px1, $this->h - $py1); - } - // draw arcs - for ($i = 1; $i <= $nc; ++$i) { - // starting angle - $ang = $as + ($i * $arcang); - if ($i == $nc) { - $ang = $af; - } - $cos_ang = cos($ang); - $sin_ang = sin($ang); - // second arc point - $px2 = $x0 + ($rx * $cos_xang * $cos_ang) - ($ry * $sin_xang * $sin_ang); - $py2 = $y0 + ($rx * $sin_xang * $cos_ang) + ($ry * $cos_xang * $sin_ang); - // second Bezier control point - $qx2 = ($alpha * ((-$rx * $cos_xang * $sin_ang) - ($ry * $sin_xang * $cos_ang))); - $qy2 = ($alpha * ((-$rx * $sin_xang * $sin_ang) + ($ry * $cos_xang * $cos_ang))); - // draw arc - $cx1 = ($px1 + $qx1); - $cy1 = ($this->h - ($py1 + $qy1)); - $cx2 = ($px2 - $qx2); - $cy2 = ($this->h - ($py2 - $qy2)); - $cx3 = $px2; - $cy3 = ($this->h - $py2); - $this->_outCurve($cx1, $cy1, $cx2, $cy2, $cx3, $cy3); - // get bounding box coordinates - $xmin = min($xmin, $cx1, $cx2, $cx3); - $ymin = min($ymin, $cy1, $cy2, $cy3); - $xmax = max($xmax, $cx1, $cx2, $cx3); - $ymax = max($ymax, $cy1, $cy2, $cy3); - // move to next point - $px1 = $px2; - $py1 = $py2; - $qx1 = $qx2; - $qy1 = $qy2; - } - if ($pie) { - $this->_outLine($xc, $yc); - // get bounding box coordinates - $xmin = min($xmin, $xc); - $ymin = min($ymin, $yc); - $xmax = max($xmax, $xc); - $ymax = max($ymax, $yc); - } - return array($xmin, $ymin, $xmax, $ymax); - } - - /** - * Draws a circle. - * A circle is formed from n Bezier curves. - * @param float $x0 Abscissa of center point. - * @param float $y0 Ordinate of center point. - * @param float $r Radius. - * @param float $angstr Angle start of draw line. Default value: 0. - * @param float $angend Angle finish of draw line. Default value: 360. - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $line_style Line style of circle. Array like for SetLineStyle(). Default value: default line style (empty array). - * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). - * @param integer $nc Number of curves used to draw a 90 degrees portion of circle. - * @public - * @since 2.1.000 (2008-01-08) - */ - public function Circle($x0, $y0, $r, $angstr=0, $angend=360, $style='', $line_style=array(), $fill_color=array(), $nc=2) { - $this->Ellipse($x0, $y0, $r, $r, 0, $angstr, $angend, $style, $line_style, $fill_color, $nc); - } - - /** - * Draws a polygonal line - * @param array $p Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1)) - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $line_style Line style of polygon. Array with keys among the following: - *
              - *
            • all: Line style of all lines. Array like for SetLineStyle().
            • - *
            • 0 to ($np - 1): Line style of each line. Array like for SetLineStyle().
            • - *
            - * If a key is not present or is null, not draws the line. Default value is default line style (empty array). - * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). - * @since 4.8.003 (2009-09-15) - * @public - */ - public function PolyLine($p, $style='', $line_style=array(), $fill_color=array()) { - $this->Polygon($p, $style, $line_style, $fill_color, false); - } - - /** - * Draws a polygon. - * @param array $p Points 0 to ($np - 1). Array with values (x0, y0, x1, y1,..., x(np-1), y(np - 1)) - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $line_style Line style of polygon. Array with keys among the following: - *
              - *
            • all: Line style of all lines. Array like for SetLineStyle().
            • - *
            • 0 to ($np - 1): Line style of each line. Array like for SetLineStyle().
            • - *
            - * If a key is not present or is null, not draws the line. Default value is default line style (empty array). - * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). - * @param boolean $closed if true the polygon is closes, otherwise will remain open - * @public - * @since 2.1.000 (2008-01-08) - */ - public function Polygon($p, $style='', $line_style=array(), $fill_color=array(), $closed=true) { - if ($this->state != 2) { - return; - } - $nc = count($p); // number of coordinates - $np = $nc / 2; // number of points - if ($closed) { - // close polygon by adding the first 2 points at the end (one line) - for ($i = 0; $i < 4; ++$i) { - $p[$nc + $i] = $p[$i]; - } - // copy style for the last added line - if (isset($line_style[0])) { - $line_style[$np] = $line_style[0]; - } - $nc += 4; - } - if (!(false === strpos($style, 'F')) AND isset($fill_color)) { - $this->setFillColorArray($fill_color); - } - $op = TCPDF_STATIC::getPathPaintOperator($style); - if ($op == 'f') { - $line_style = array(); - } - $draw = true; - if ($line_style) { - if (isset($line_style['all'])) { - $this->setLineStyle($line_style['all']); - } else { - $draw = false; - if ($op == 'B') { - // draw fill - $op = 'f'; - $this->_outPoint($p[0], $p[1]); - for ($i = 2; $i < $nc; $i = $i + 2) { - $this->_outLine($p[$i], $p[$i + 1]); - } - $this->_out($op); - } - // draw outline - $this->_outPoint($p[0], $p[1]); - for ($i = 2; $i < $nc; $i = $i + 2) { - $line_num = ($i / 2) - 1; - if (isset($line_style[$line_num])) { - if ($line_style[$line_num] != 0) { - if (is_array($line_style[$line_num])) { - $this->_out('S'); - $this->setLineStyle($line_style[$line_num]); - $this->_outPoint($p[$i - 2], $p[$i - 1]); - $this->_outLine($p[$i], $p[$i + 1]); - $this->_out('S'); - $this->_outPoint($p[$i], $p[$i + 1]); - } else { - $this->_outLine($p[$i], $p[$i + 1]); - } - } - } else { - $this->_outLine($p[$i], $p[$i + 1]); - } - } - $this->_out($op); - } - } - if ($draw) { - $this->_outPoint($p[0], $p[1]); - for ($i = 2; $i < $nc; $i = $i + 2) { - $this->_outLine($p[$i], $p[$i + 1]); - } - $this->_out($op); - } - } - - /** - * Draws a regular polygon. - * @param float $x0 Abscissa of center point. - * @param float $y0 Ordinate of center point. - * @param float $r Radius of inscribed circle. - * @param integer $ns Number of sides. - * @param float $angle Angle oriented (anti-clockwise). Default value: 0. - * @param boolean $draw_circle Draw inscribed circle or not. Default value: false. - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $line_style Line style of polygon sides. Array with keys among the following: - *
              - *
            • all: Line style of all sides. Array like for SetLineStyle().
            • - *
            • 0 to ($ns - 1): Line style of each side. Array like for SetLineStyle().
            • - *
            - * If a key is not present or is null, not draws the side. Default value is default line style (empty array). - * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). - * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are: - *
              - *
            • D or empty string: Draw (default).
            • - *
            • F: Fill.
            • - *
            • DF or FD: Draw and fill.
            • - *
            • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
            • - *
            • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
            • - *
            - * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for SetLineStyle(). Default value: default line style (empty array). - * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). - * @public - * @since 2.1.000 (2008-01-08) - */ - public function RegularPolygon($x0, $y0, $r, $ns, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) { - if (3 > $ns) { - $ns = 3; - } - if ($draw_circle) { - $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color); - } - $p = array(); - for ($i = 0; $i < $ns; ++$i) { - $a = $angle + ($i * 360 / $ns); - $a_rad = deg2rad((float) $a); - $p[] = $x0 + ($r * sin($a_rad)); - $p[] = $y0 + ($r * cos($a_rad)); - } - $this->Polygon($p, $style, $line_style, $fill_color); - } - - /** - * Draws a star polygon - * @param float $x0 Abscissa of center point. - * @param float $y0 Ordinate of center point. - * @param float $r Radius of inscribed circle. - * @param integer $nv Number of vertices. - * @param integer $ng Number of gap (if ($ng % $nv = 1) then is a regular polygon). - * @param float $angle Angle oriented (anti-clockwise). Default value: 0. - * @param boolean $draw_circle Draw inscribed circle or not. Default value is false. - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $line_style Line style of polygon sides. Array with keys among the following: - *
              - *
            • all: Line style of all sides. Array like for - * SetLineStyle().
            • - *
            • 0 to (n - 1): Line style of each side. Array like for SetLineStyle().
            • - *
            - * If a key is not present or is null, not draws the side. Default value is default line style (empty array). - * @param array $fill_color Fill color. Format: array(red, green, blue). Default value: default color (empty array). - * @param string $circle_style Style of rendering of inscribed circle (if draws). Possible values are: - *
              - *
            • D or empty string: Draw (default).
            • - *
            • F: Fill.
            • - *
            • DF or FD: Draw and fill.
            • - *
            • CNZ: Clipping mode (using the even-odd rule to determine which regions lie inside the clipping path).
            • - *
            • CEO: Clipping mode (using the nonzero winding number rule to determine which regions lie inside the clipping path).
            • - *
            - * @param array $circle_outLine_style Line style of inscribed circle (if draws). Array like for SetLineStyle(). Default value: default line style (empty array). - * @param array $circle_fill_color Fill color of inscribed circle (if draws). Format: array(red, green, blue). Default value: default color (empty array). - * @public - * @since 2.1.000 (2008-01-08) - */ - public function StarPolygon($x0, $y0, $r, $nv, $ng, $angle=0, $draw_circle=false, $style='', $line_style=array(), $fill_color=array(), $circle_style='', $circle_outLine_style=array(), $circle_fill_color=array()) { - if ($nv < 2) { - $nv = 2; - } - if ($draw_circle) { - $this->Circle($x0, $y0, $r, 0, 360, $circle_style, $circle_outLine_style, $circle_fill_color); - } - $p2 = array(); - $visited = array(); - for ($i = 0; $i < $nv; ++$i) { - $a = $angle + ($i * 360 / $nv); - $a_rad = deg2rad((float) $a); - $p2[] = $x0 + ($r * sin($a_rad)); - $p2[] = $y0 + ($r * cos($a_rad)); - $visited[] = false; - } - $p = array(); - $i = 0; - do { - $p[] = $p2[$i * 2]; - $p[] = $p2[($i * 2) + 1]; - $visited[$i] = true; - $i += $ng; - $i %= $nv; - } while (!$visited[$i]); - $this->Polygon($p, $style, $line_style, $fill_color); - } - - /** - * Draws a rounded rectangle. - * @param float $x Abscissa of upper-left corner. - * @param float $y Ordinate of upper-left corner. - * @param float $w Width. - * @param float $h Height. - * @param float $r the radius of the circle used to round off the corners of the rectangle. - * @param string $round_corner Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top right, bottom right, bottom left and top left. Default value: all rounded corner ("1111"). - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $border_style Border style of rectangle. Array like for SetLineStyle(). Default value: default line style (empty array). - * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). - * @public - * @since 2.1.000 (2008-01-08) - */ - public function RoundedRect($x, $y, $w, $h, $r, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) { - $this->RoundedRectXY($x, $y, $w, $h, $r, $r, $round_corner, $style, $border_style, $fill_color); - } - - /** - * Draws a rounded rectangle. - * @param float $x Abscissa of upper-left corner. - * @param float $y Ordinate of upper-left corner. - * @param float $w Width. - * @param float $h Height. - * @param float $rx the x-axis radius of the ellipse used to round off the corners of the rectangle. - * @param float $ry the y-axis radius of the ellipse used to round off the corners of the rectangle. - * @param string $round_corner Draws rounded corner or not. String with a 0 (not rounded i-corner) or 1 (rounded i-corner) in i-position. Positions are, in order and begin to 0: top right, bottom right, bottom left and top left. Default value: all rounded corner ("1111"). - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param array $border_style Border style of rectangle. Array like for SetLineStyle(). Default value: default line style (empty array). - * @param array $fill_color Fill color. Format: array(GREY) or array(R,G,B) or array(C,M,Y,K) or array(C,M,Y,K,SpotColorName). Default value: default color (empty array). - * @public - * @since 4.9.019 (2010-04-22) - */ - public function RoundedRectXY($x, $y, $w, $h, $rx, $ry, $round_corner='1111', $style='', $border_style=array(), $fill_color=array()) { - if ($this->state != 2) { - return; - } - if (($round_corner == '0000') OR (($rx == $ry) AND ($rx == 0))) { - // Not rounded - $this->Rect($x, $y, $w, $h, $style, $border_style, $fill_color); - return; - } - // Rounded - if (!(false === strpos($style, 'F')) AND isset($fill_color)) { - $this->setFillColorArray($fill_color); - } - $op = TCPDF_STATIC::getPathPaintOperator($style); - if ($op == 'f') { - $border_style = array(); - } - if ($border_style) { - $this->setLineStyle($border_style); - } - $MyArc = 4 / 3 * (sqrt(2) - 1); - $this->_outPoint($x + $rx, $y); - $xc = $x + $w - $rx; - $yc = $y + $ry; - $this->_outLine($xc, $y); - if ($round_corner[0]) { - $this->_outCurve($xc + ($rx * $MyArc), $yc - $ry, $xc + $rx, $yc - ($ry * $MyArc), $xc + $rx, $yc); - } else { - $this->_outLine($x + $w, $y); - } - $xc = $x + $w - $rx; - $yc = $y + $h - $ry; - $this->_outLine($x + $w, $yc); - if ($round_corner[1]) { - $this->_outCurve($xc + $rx, $yc + ($ry * $MyArc), $xc + ($rx * $MyArc), $yc + $ry, $xc, $yc + $ry); - } else { - $this->_outLine($x + $w, $y + $h); - } - $xc = $x + $rx; - $yc = $y + $h - $ry; - $this->_outLine($xc, $y + $h); - if ($round_corner[2]) { - $this->_outCurve($xc - ($rx * $MyArc), $yc + $ry, $xc - $rx, $yc + ($ry * $MyArc), $xc - $rx, $yc); - } else { - $this->_outLine($x, $y + $h); - } - $xc = $x + $rx; - $yc = $y + $ry; - $this->_outLine($x, $yc); - if ($round_corner[3]) { - $this->_outCurve($xc - $rx, $yc - ($ry * $MyArc), $xc - ($rx * $MyArc), $yc - $ry, $xc, $yc - $ry); - } else { - $this->_outLine($x, $y); - $this->_outLine($x + $rx, $y); - } - $this->_out($op); - } - - /** - * Draws a grahic arrow. - * @param float $x0 Abscissa of first point. - * @param float $y0 Ordinate of first point. - * @param float $x1 Abscissa of second point. - * @param float $y1 Ordinate of second point. - * @param int $head_style (0 = draw only arrowhead arms, 1 = draw closed arrowhead, but no fill, 2 = closed and filled arrowhead, 3 = filled arrowhead) - * @param float $arm_size length of arrowhead arms - * @param int $arm_angle angle between an arm and the shaft - * @author Piotr Galecki, Nicola Asuni, Andy Meier - * @since 4.6.018 (2009-07-10) - */ - public function Arrow($x0, $y0, $x1, $y1, $head_style=0, $arm_size=5, $arm_angle=15) { - // getting arrow direction angle - // 0 deg angle is when both arms go along X axis. angle grows clockwise. - $dir_angle = atan2(($y0 - $y1), ($x0 - $x1)); - if ($dir_angle < 0) { - $dir_angle += (2 * M_PI); - } - $arm_angle = deg2rad($arm_angle); - $sx1 = $x1; - $sy1 = $y1; - if ($head_style > 0) { - // calculate the stopping point for the arrow shaft - $sx1 = $x1 + (($arm_size - $this->LineWidth) * cos($dir_angle)); - $sy1 = $y1 + (($arm_size - $this->LineWidth) * sin($dir_angle)); - } - // main arrow line / shaft - $this->Line($x0, $y0, $sx1, $sy1); - // left arrowhead arm tip - $x2L = $x1 + ($arm_size * cos($dir_angle + $arm_angle)); - $y2L = $y1 + ($arm_size * sin($dir_angle + $arm_angle)); - // right arrowhead arm tip - $x2R = $x1 + ($arm_size * cos($dir_angle - $arm_angle)); - $y2R = $y1 + ($arm_size * sin($dir_angle - $arm_angle)); - $mode = 'D'; - $style = array(); - switch ($head_style) { - case 0: { - // draw only arrowhead arms - $mode = 'D'; - $style = array(1, 1, 0); - break; - } - case 1: { - // draw closed arrowhead, but no fill - $mode = 'D'; - break; - } - case 2: { - // closed and filled arrowhead - $mode = 'DF'; - break; - } - case 3: { - // filled arrowhead - $mode = 'F'; - break; - } - } - $this->Polygon(array($x2L, $y2L, $x1, $y1, $x2R, $y2R), $mode, $style, array()); - } - - // END GRAPHIC FUNCTIONS SECTION ----------------------- - - /** - * Add a Named Destination. - * NOTE: destination names are unique, so only last entry will be saved. - * @param string $name Destination name. - * @param float $y Y position in user units of the destiantion on the selected page (default = -1 = current position; 0 = page start;). - * @param int|string $page Target page number (leave empty for current page). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. - * @param float $x X position in user units of the destiantion on the selected page (default = -1 = current position;). - * @return string|false Stripped named destination identifier or false in case of error. - * @public - * @author Christian Deligant, Nicola Asuni - * @since 5.9.097 (2011-06-23) - */ - public function setDestination($name, $y=-1, $page='', $x=-1) { - // remove unsupported characters - $name = TCPDF_STATIC::encodeNameObject($name); - if (TCPDF_STATIC::empty_string($name)) { - return false; - } - if ($y == -1) { - $y = $this->GetY(); - } elseif ($y < 0) { - $y = 0; - } elseif ($y > $this->h) { - $y = $this->h; - } - if ($x == -1) { - $x = $this->GetX(); - } elseif ($x < 0) { - $x = 0; - } elseif ($x > $this->w) { - $x = $this->w; - } - $fixed = false; - if (!empty($page) AND (substr($page, 0, 1) == '*')) { - $page = intval(substr($page, 1)); - // this page number will not be changed when moving/add/deleting pages - $fixed = true; - } - if (empty($page)) { - $page = $this->PageNo(); - if (empty($page)) { - return; - } - } - $this->dests[$name] = array('x' => $x, 'y' => $y, 'p' => $page, 'f' => $fixed); - return $name; - } - - /** - * Return the Named Destination array. - * @return array Named Destination array. - * @public - * @author Nicola Asuni - * @since 5.9.097 (2011-06-23) - */ - public function getDestination() { - return $this->dests; - } - - /** - * Insert Named Destinations. - * @protected - * @author Johannes G\FCntert, Nicola Asuni - * @since 5.9.098 (2011-06-23) - */ - protected function _putdests() { - if (empty($this->dests)) { - return; - } - $this->n_dests = $this->_newobj(); - $out = ' <<'; - foreach($this->dests as $name => $o) { - $out .= ' /'.$name.' '.sprintf('[%u 0 R /XYZ %F %F null]', $this->page_obj_id[($o['p'])], ($o['x'] * $this->k), ($this->pagedim[$o['p']]['h'] - ($o['y'] * $this->k))); - } - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - - /** - * Adds a bookmark - alias for Bookmark(). - * @param string $txt Bookmark description. - * @param int $level Bookmark level (minimum value is 0). - * @param float $y Y position in user units of the bookmark on the selected page (default = -1 = current position; 0 = page start;). - * @param int|string $page Target page number (leave empty for current page). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. - * @param string $style Font style: B = Bold, I = Italic, BI = Bold + Italic. - * @param array $color RGB color array (values from 0 to 255). - * @param float $x X position in user units of the bookmark on the selected page (default = -1 = current position;). - * @param mixed $link URL, or numerical link ID, or named destination (# character followed by the destination name), or embedded file (* character followed by the file name). - * @public - */ - public function setBookmark($txt, $level=0, $y=-1, $page='', $style='', $color=array(0,0,0), $x=-1, $link='') { - $this->Bookmark($txt, $level, $y, $page, $style, $color, $x, $link); - } - - /** - * Adds a bookmark. - * @param string $txt Bookmark description. - * @param int $level Bookmark level (minimum value is 0). - * @param float $y Y position in user units of the bookmark on the selected page (default = -1 = current position; 0 = page start;). - * @param int|string $page Target page number (leave empty for current page). If you prefix a page number with the * character, then this page will not be changed when adding/deleting/moving pages. - * @param string $style Font style: B = Bold, I = Italic, BI = Bold + Italic. - * @param array $color RGB color array (values from 0 to 255). - * @param float $x X position in user units of the bookmark on the selected page (default = -1 = current position;). - * @param mixed $link URL, or numerical link ID, or named destination (# character followed by the destination name), or embedded file (* character followed by the file name). - * @public - * @since 2.1.002 (2008-02-12) - */ - public function Bookmark($txt, $level=0, $y=-1, $page='', $style='', $color=array(0,0,0), $x=-1, $link='') { - if ($level < 0) { - $level = 0; - } - if (isset($this->outlines[0])) { - $lastoutline = end($this->outlines); - $maxlevel = $lastoutline['l'] + 1; - } else { - $maxlevel = 0; - } - if ($level > $maxlevel) { - $level = $maxlevel; - } - if ($y == -1) { - $y = $this->GetY(); - } elseif ($y < 0) { - $y = 0; - } elseif ($y > $this->h) { - $y = $this->h; - } - if ($x == -1) { - $x = $this->GetX(); - } elseif ($x < 0) { - $x = 0; - } elseif ($x > $this->w) { - $x = $this->w; - } - $fixed = false; - $pageAsString = (string) $page; - if ($pageAsString && $pageAsString[0] == '*') { - $page = intval(substr($page, 1)); - // this page number will not be changed when moving/add/deleting pages - $fixed = true; - } - if (empty($page)) { - $page = $this->PageNo(); - if (empty($page)) { - return; - } - } - $this->outlines[] = array('t' => $txt, 'l' => $level, 'x' => $x, 'y' => $y, 'p' => $page, 'f' => $fixed, 's' => strtoupper($style), 'c' => $color, 'u' => $link); - } - - /** - * Sort bookmarks for page and key. - * @protected - * @since 5.9.119 (2011-09-19) - */ - protected function sortBookmarks() { - // get sorting columns - $outline_p = array(); - $outline_y = array(); - foreach ($this->outlines as $key => $row) { - $outline_p[$key] = $row['p']; - $outline_k[$key] = $key; - } - // sort outlines by page and original position - array_multisort($outline_p, SORT_NUMERIC, SORT_ASC, $outline_k, SORT_NUMERIC, SORT_ASC, $this->outlines); - } - - /** - * Create a bookmark PDF string. - * @protected - * @author Olivier Plathey, Nicola Asuni - * @since 2.1.002 (2008-02-12) - */ - protected function _putbookmarks() { - $nb = count($this->outlines); - if ($nb == 0) { - return; - } - // sort bookmarks - $this->sortBookmarks(); - $lru = array(); - $level = 0; - foreach ($this->outlines as $i => $o) { - if ($o['l'] > 0) { - $parent = $lru[($o['l'] - 1)]; - //Set parent and last pointers - $this->outlines[$i]['parent'] = $parent; - $this->outlines[$parent]['last'] = $i; - if ($o['l'] > $level) { - //Level increasing: set first pointer - $this->outlines[$parent]['first'] = $i; - } - } else { - $this->outlines[$i]['parent'] = $nb; - } - if (($o['l'] <= $level) AND ($i > 0)) { - //Set prev and next pointers - $prev = $lru[$o['l']]; - $this->outlines[$prev]['next'] = $i; - $this->outlines[$i]['prev'] = $prev; - } - $lru[$o['l']] = $i; - $level = $o['l']; - } - //Outline items - $n = $this->n + 1; - $nltags = '/|<\/(blockquote|dd|dl|div|dt|h1|h2|h3|h4|h5|h6|hr|li|ol|p|pre|ul|tcpdf|table|tr|td)>/si'; - foreach ($this->outlines as $i => $o) { - $oid = $this->_newobj(); - // covert HTML title to string - $title = preg_replace($nltags, "\n", $o['t']); - $title = preg_replace("/[\r]+/si", '', $title); - $title = preg_replace("/[\n]+/si", "\n", $title); - $title = strip_tags($title); - $title = $this->stringTrim($title); - $out = '<_textstring($title, $oid); - $out .= ' /Parent '.($n + $o['parent']).' 0 R'; - if (isset($o['prev'])) { - $out .= ' /Prev '.($n + $o['prev']).' 0 R'; - } - if (isset($o['next'])) { - $out .= ' /Next '.($n + $o['next']).' 0 R'; - } - if (isset($o['first'])) { - $out .= ' /First '.($n + $o['first']).' 0 R'; - } - if (isset($o['last'])) { - $out .= ' /Last '.($n + $o['last']).' 0 R'; - } - if (isset($o['u']) AND !empty($o['u'])) { - // link - if (is_string($o['u'])) { - if ($o['u'][0] == '#') { - // internal destination - $out .= ' /Dest /'.TCPDF_STATIC::encodeNameObject(substr($o['u'], 1)); - } elseif ($o['u'][0] == '%') { - // embedded PDF file - $filename = basename(substr($o['u'], 1)); - $out .= ' /A <
            embeddedfiles[$filename]['a'].' >> >>'; - } elseif ($o['u'][0] == '*') { - // embedded generic file - $filename = basename(substr($o['u'], 1)); - $jsa = 'var D=event.target.doc;var MyData=D.dataObjects;for (var i in MyData) if (MyData[i].path=="'.$filename.'") D.exportDataObject( { cName : MyData[i].name, nLaunch : 2});'; - $out .= ' /A <
            _textstring($jsa, $oid).'>>'; - } else { - // external URI link - $out .= ' /A <
            _datastring($this->unhtmlentities($o['u']), $oid).'>>'; - } - } elseif (isset($this->links[$o['u']])) { - // internal link ID - $l = $this->links[$o['u']]; - if (isset($this->page_obj_id[($l['p'])])) { - $out .= sprintf(' /Dest [%u 0 R /XYZ 0 %F null]', $this->page_obj_id[($l['p'])], ($this->pagedim[$l['p']]['h'] - ($l['y'] * $this->k))); - } - } - } elseif (isset($this->page_obj_id[($o['p'])])) { - // link to a page - $out .= ' '.sprintf('/Dest [%u 0 R /XYZ %F %F null]', $this->page_obj_id[($o['p'])], ($o['x'] * $this->k), ($this->pagedim[$o['p']]['h'] - ($o['y'] * $this->k))); - } - // set font style - $style = 0; - if (!empty($o['s'])) { - // bold - if (strpos($o['s'], 'B') !== false) { - $style |= 2; - } - // oblique - if (strpos($o['s'], 'I') !== false) { - $style |= 1; - } - } - $out .= sprintf(' /F %d', $style); - // set bookmark color - if (isset($o['c']) AND is_array($o['c']) AND (count($o['c']) == 3)) { - $color = array_values($o['c']); - $out .= sprintf(' /C [%F %F %F]', ($color[0] / 255), ($color[1] / 255), ($color[2] / 255)); - } else { - // black - $out .= ' /C [0.0 0.0 0.0]'; - } - $out .= ' /Count 0'; // normally closed item - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - //Outline root - $this->OutlineRoot = $this->_newobj(); - $this->_out('<< /Type /Outlines /First '.$n.' 0 R /Last '.($n + $lru[0]).' 0 R >>'."\n".'endobj'); - } - - // --- JAVASCRIPT ------------------------------------------------------ - - /** - * Adds a javascript - * @param string $script Javascript code - * @public - * @author Johannes G\FCntert, Nicola Asuni - * @since 2.1.002 (2008-02-12) - */ - public function IncludeJS($script) { - $this->javascript .= $script; - } - - /** - * Adds a javascript object and return object ID - * @param string $script Javascript code - * @param boolean $onload if true executes this object when opening the document - * @return int internal object ID - * @public - * @author Nicola Asuni - * @since 4.8.000 (2009-09-07) - */ - public function addJavascriptObject($script, $onload=false) { - if ($this->pdfa_mode) { - // javascript is not allowed in PDF/A mode - return false; - } - ++$this->n; - $this->js_objects[$this->n] = array('n' => $this->n, 'js' => $script, 'onload' => $onload); - return $this->n; - } - - /** - * Create a javascript PDF string. - * @protected - * @author Johannes G\FCntert, Nicola Asuni - * @since 2.1.002 (2008-02-12) - */ - protected function _putjavascript() { - if ($this->pdfa_mode OR (empty($this->javascript) AND empty($this->js_objects))) { - return; - } - if (strpos($this->javascript, 'this.addField') > 0) { - if (!$this->ur['enabled']) { - //$this->setUserRights(); - } - // the following two lines are used to avoid form fields duplication after saving - // The addField method only works when releasing user rights (UR3) - $jsa = sprintf("ftcpdfdocsaved=this.addField('%s','%s',%d,[%F,%F,%F,%F]);", 'tcpdfdocsaved', 'text', 0, 0, 1, 0, 1); - $jsb = "getField('tcpdfdocsaved').value='saved';"; - $this->javascript = $jsa."\n".$this->javascript."\n".$jsb; - } - // name tree for javascript - $this->n_js = '<< /Names ['; - if (!empty($this->javascript)) { - $this->n_js .= ' (EmbeddedJS) '.($this->n + 1).' 0 R'; - } - if (!empty($this->js_objects)) { - foreach ($this->js_objects as $key => $val) { - if ($val['onload']) { - $this->n_js .= ' (JS'.$key.') '.$key.' 0 R'; - } - } - } - $this->n_js .= ' ] >>'; - // default Javascript object - if (!empty($this->javascript)) { - $obj_id = $this->_newobj(); - $out = '<< /S /JavaScript'; - $out .= ' /JS '.$this->_textstring($this->javascript, $obj_id); - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - // additional Javascript objects - if (!empty($this->js_objects)) { - foreach ($this->js_objects as $key => $val) { - $out = $this->_getobj($key)."\n".' << /S /JavaScript /JS '.$this->_textstring($val['js'], $key).' >>'."\n".'endobj'; - $this->_out($out); - } - } - } - - /** - * Adds a javascript form field. - * @param string $type field type - * @param string $name field name - * @param int $x horizontal position - * @param int $y vertical position - * @param int $w width - * @param int $h height - * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. - * @protected - * @author Denis Van Nuffelen, Nicola Asuni - * @since 2.1.002 (2008-02-12) - */ - protected function _addfield($type, $name, $x, $y, $w, $h, $prop) { - if ($this->rtl) { - $x = $x - $w; - } - // the followind avoid fields duplication after saving the document - $this->javascript .= "if (getField('tcpdfdocsaved').value != 'saved') {"; - $k = $this->k; - $this->javascript .= sprintf("f".$name."=this.addField('%s','%s',%u,[%F,%F,%F,%F]);", $name, $type, $this->PageNo()-1, $x*$k, ($this->h-$y)*$k+1, ($x+$w)*$k, ($this->h-$y-$h)*$k+1)."\n"; - $this->javascript .= 'f'.$name.'.textSize='.$this->FontSizePt.";\n"; - foreach($prop as $key => $val) { - if (strcmp(substr($key, -5), 'Color') == 0) { - $val = TCPDF_COLORS::_JScolor($val); - } else { - $val = "'".$val."'"; - } - $this->javascript .= 'f'.$name.'.'.$key.'='.$val.";\n"; - } - if ($this->rtl) { - $this->x -= $w; - } else { - $this->x += $w; - } - $this->javascript .= '}'; - } - - // --- FORM FIELDS ----------------------------------------------------- - - - - /** - * Set default properties for form fields. - * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. - * @public - * @author Nicola Asuni - * @since 4.8.000 (2009-09-06) - */ - public function setFormDefaultProp($prop=array()) { - $this->default_form_prop = $prop; - } - - /** - * Return the default properties for form fields. - * @return array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. - * @public - * @author Nicola Asuni - * @since 4.8.000 (2009-09-06) - */ - public function getFormDefaultProp() { - return $this->default_form_prop; - } - - /** - * Creates a text field - * @param string $name field name - * @param float $w Width of the rectangle - * @param float $h Height of the rectangle - * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. - * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. - * @param float|null $x Abscissa of the upper-left corner of the rectangle - * @param float|null $y Ordinate of the upper-left corner of the rectangle - * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). - * @public - * @author Nicola Asuni - * @since 4.8.000 (2009-09-07) - */ - public function TextField($name, $w, $h, $prop=array(), $opt=array(), $x=null, $y=null, $js=false) { - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions($h, $x, $y); - if ($js) { - $this->_addfield('text', $name, $x, $y, $w, $h, $prop); - return; - } - // get default style - $prop = array_merge($this->getFormDefaultProp(), $prop); - // get annotation data - $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); - // set default appearance stream - $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; - $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); - $popt['da'] = $fontstyle; - // build appearance stream - $popt['ap'] = array(); - $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; - $text = ''; - if (isset($prop['value']) AND !empty($prop['value'])) { - $text = $prop['value']; - } elseif (isset($opt['v']) AND !empty($opt['v'])) { - $text = $opt['v']; - } - $tmpid = $this->startTemplate($w, $h, false); - $align = ''; - if (isset($popt['q'])) { - switch ($popt['q']) { - case 0: { - $align = 'L'; - break; - } - case 1: { - $align = 'C'; - break; - } - case 2: { - $align = 'R'; - break; - } - default: { - $align = ''; - break; - } - } - } - $this->MultiCell($w, $h, $text, 0, $align, false, 0, 0, 0, true, 0, false, true, 0, 'T', false); - $this->endTemplate(); - --$this->n; - $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; - unset($this->xobjects[$tmpid]); - $popt['ap']['n'] .= 'Q EMC'; - // merge options - $opt = array_merge($popt, $opt); - // remove some conflicting options - unset($opt['bs']); - // set remaining annotation data - $opt['Subtype'] = 'Widget'; - $opt['ft'] = 'Tx'; - $opt['t'] = $name; - // Additional annotation's parameters (check _putannotsobj() method): - //$opt['f'] - //$opt['as'] - //$opt['bs'] - //$opt['be'] - //$opt['c'] - //$opt['border'] - //$opt['h'] - //$opt['mk']; - //$opt['mk']['r'] - //$opt['mk']['bc']; - //$opt['mk']['bg']; - unset($opt['mk']['ca']); - unset($opt['mk']['rc']); - unset($opt['mk']['ac']); - unset($opt['mk']['i']); - unset($opt['mk']['ri']); - unset($opt['mk']['ix']); - unset($opt['mk']['if']); - //$opt['mk']['if']['sw']; - //$opt['mk']['if']['s']; - //$opt['mk']['if']['a']; - //$opt['mk']['if']['fb']; - unset($opt['mk']['tp']); - //$opt['tu'] - //$opt['tm'] - //$opt['ff'] - //$opt['v'] - //$opt['dv'] - //$opt['a'] - //$opt['aa'] - //$opt['q'] - $this->Annotation($x, $y, $w, $h, $name, $opt, 0); - if ($this->rtl) { - $this->x -= $w; - } else { - $this->x += $w; - } - } - - /** - * Creates a RadioButton field. - * @param string $name Field name. - * @param int $w Width of the radio button. - * @param array $prop Javascript field properties. Possible values are described on official Javascript for Acrobat API reference. - * @param array $opt Annotation parameters. Possible values are described on official PDF32000_2008 reference. - * @param string $onvalue Value to be returned if selected. - * @param boolean $checked Define the initial state. - * @param float|null $x Abscissa of the upper-left corner of the rectangle - * @param float|null $y Ordinate of the upper-left corner of the rectangle - * @param boolean $js If true put the field using JavaScript (requires Acrobat Writer to be rendered). - * @public - * @author Nicola Asuni - * @since 4.8.000 (2009-09-07) - */ - public function RadioButton($name, $w, $prop=array(), $opt=array(), $onvalue='On', $checked=false, $x=null, $y=null, $js=false) { - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions($w, $x, $y); - if ($js) { - $this->_addfield('radiobutton', $name, $x, $y, $w, $w, $prop); - return; - } - if (TCPDF_STATIC::empty_string($onvalue)) { - $onvalue = 'On'; - } - if ($checked) { - $defval = $onvalue; - } else { - $defval = 'Off'; - } - // set font - $font = 'zapfdingbats'; - if ($this->pdfa_mode) { - // all fonts must be embedded - $font = 'pdfa'.$font; - } - $this->AddFont($font); - $tmpfont = $this->getFontBuffer($font); - // set data for parent group - if (!isset($this->radiobutton_groups[$this->page])) { - $this->radiobutton_groups[$this->page] = array(); - } - if (!isset($this->radiobutton_groups[$this->page][$name])) { - $this->radiobutton_groups[$this->page][$name] = array(); - ++$this->n; - $this->radiobutton_groups[$this->page][$name]['n'] = $this->n; - $this->radio_groups[] = $this->n; - } - $kid = ($this->n + 1); - // save object ID to be added on Kids entry on parent object - $this->radiobutton_groups[$this->page][$name][] = array('kid' => $kid, 'def' => $defval); - // get default style - $prop = array_merge($this->getFormDefaultProp(), $prop); - $prop['NoToggleToOff'] = 'true'; - $prop['Radio'] = 'true'; - $prop['borderStyle'] = 'inset'; - // get annotation data - $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); - // set additional default options - $this->annotation_fonts[$tmpfont['fontkey']] = $tmpfont['i']; - $fontstyle = sprintf('/F%d %F Tf %s', $tmpfont['i'], $this->FontSizePt, $this->TextColor); - $popt['da'] = $fontstyle; - // build appearance stream - $popt['ap'] = array(); - $popt['ap']['n'] = array(); - $fx = ((($w - $this->getAbsFontMeasure($tmpfont['cw'][108])) / 2) * $this->k); - $fy = (($w - ((($tmpfont['desc']['Ascent'] - $tmpfont['desc']['Descent']) * $this->FontSizePt / 1000) / $this->k)) * $this->k); - $popt['ap']['n'][$onvalue] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(108).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); - $popt['ap']['n']['Off'] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(109).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); - if (!isset($popt['mk'])) { - $popt['mk'] = array(); - } - $popt['mk']['ca'] = '(l)'; - // merge options - $opt = array_merge($popt, $opt); - // set remaining annotation data - $opt['Subtype'] = 'Widget'; - $opt['ft'] = 'Btn'; - if ($checked) { - $opt['v'] = array('/'.$onvalue); - $opt['as'] = $onvalue; - } else { - $opt['as'] = 'Off'; - } - // store readonly flag - if (!isset($this->radiobutton_groups[$this->page][$name]['#readonly#'])) { - $this->radiobutton_groups[$this->page][$name]['#readonly#'] = false; - } - $this->radiobutton_groups[$this->page][$name]['#readonly#'] |= ($opt['f'] & 64); - $this->Annotation($x, $y, $w, $w, $name, $opt, 0); - if ($this->rtl) { - $this->x -= $w; - } else { - $this->x += $w; - } - } - - /** - * Creates a List-box field - * @param string $name field name - * @param int $w width - * @param int $h height - * @param array $values array containing the list of values. - * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. - * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. - * @param float|null $x Abscissa of the upper-left corner of the rectangle - * @param float|null $y Ordinate of the upper-left corner of the rectangle - * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). - * @public - * @author Nicola Asuni - * @since 4.8.000 (2009-09-07) - */ - public function ListBox($name, $w, $h, $values, $prop=array(), $opt=array(), $x=null, $y=null, $js=false) { - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions($h, $x, $y); - if ($js) { - $this->_addfield('listbox', $name, $x, $y, $w, $h, $prop); - $s = ''; - foreach ($values as $value) { - if (is_array($value)) { - $s .= ',[\''.addslashes($value[1]).'\',\''.addslashes($value[0]).'\']'; - } else { - $s .= ',[\''.addslashes($value).'\',\''.addslashes($value).'\']'; - } - } - $this->javascript .= 'f'.$name.'.setItems('.substr($s, 1).');'."\n"; - return; - } - // get default style - $prop = array_merge($this->getFormDefaultProp(), $prop); - // get annotation data - $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); - // set additional default values - $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; - $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); - $popt['da'] = $fontstyle; - // build appearance stream - $popt['ap'] = array(); - $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; - $text = ''; - foreach($values as $item) { - if (is_array($item)) { - $text .= $item[1]."\n"; - } else { - $text .= $item."\n"; - } - } - $tmpid = $this->startTemplate($w, $h, false); - $this->MultiCell($w, $h, $text, 0, '', false, 0, 0, 0, true, 0, false, true, 0, 'T', false); - $this->endTemplate(); - --$this->n; - $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; - unset($this->xobjects[$tmpid]); - $popt['ap']['n'] .= 'Q EMC'; - // merge options - $opt = array_merge($popt, $opt); - // set remaining annotation data - $opt['Subtype'] = 'Widget'; - $opt['ft'] = 'Ch'; - $opt['t'] = $name; - $opt['opt'] = $values; - unset($opt['mk']['ca']); - unset($opt['mk']['rc']); - unset($opt['mk']['ac']); - unset($opt['mk']['i']); - unset($opt['mk']['ri']); - unset($opt['mk']['ix']); - unset($opt['mk']['if']); - unset($opt['mk']['tp']); - $this->Annotation($x, $y, $w, $h, $name, $opt, 0); - if ($this->rtl) { - $this->x -= $w; - } else { - $this->x += $w; - } - } - - /** - * Creates a Combo-box field - * @param string $name field name - * @param int $w width - * @param int $h height - * @param array $values array containing the list of values. - * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. - * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. - * @param float|null $x Abscissa of the upper-left corner of the rectangle - * @param float|null $y Ordinate of the upper-left corner of the rectangle - * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). - * @public - * @author Nicola Asuni - * @since 4.8.000 (2009-09-07) - */ - public function ComboBox($name, $w, $h, $values, $prop=array(), $opt=array(), $x=null, $y=null, $js=false) { - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions($h, $x, $y); - if ($js) { - $this->_addfield('combobox', $name, $x, $y, $w, $h, $prop); - $s = ''; - foreach ($values as $value) { - if (is_array($value)) { - $s .= ',[\''.addslashes($value[1]).'\',\''.addslashes($value[0]).'\']'; - } else { - $s .= ',[\''.addslashes($value).'\',\''.addslashes($value).'\']'; - } - } - $this->javascript .= 'f'.$name.'.setItems('.substr($s, 1).');'."\n"; - return; - } - // get default style - $prop = array_merge($this->getFormDefaultProp(), $prop); - $prop['Combo'] = true; - // get annotation data - $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); - // set additional default options - $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; - $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); - $popt['da'] = $fontstyle; - // build appearance stream - $popt['ap'] = array(); - $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; - $text = ''; - foreach($values as $item) { - if (is_array($item)) { - $text .= $item[1]."\n"; - } else { - $text .= $item."\n"; - } - } - $tmpid = $this->startTemplate($w, $h, false); - $this->MultiCell($w, $h, $text, 0, '', false, 0, 0, 0, true, 0, false, true, 0, 'T', false); - $this->endTemplate(); - --$this->n; - $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; - unset($this->xobjects[$tmpid]); - $popt['ap']['n'] .= 'Q EMC'; - // merge options - $opt = array_merge($popt, $opt); - // set remaining annotation data - $opt['Subtype'] = 'Widget'; - $opt['ft'] = 'Ch'; - $opt['t'] = $name; - $opt['opt'] = $values; - unset($opt['mk']['ca']); - unset($opt['mk']['rc']); - unset($opt['mk']['ac']); - unset($opt['mk']['i']); - unset($opt['mk']['ri']); - unset($opt['mk']['ix']); - unset($opt['mk']['if']); - unset($opt['mk']['tp']); - $this->Annotation($x, $y, $w, $h, $name, $opt, 0); - if ($this->rtl) { - $this->x -= $w; - } else { - $this->x += $w; - } - } - - /** - * Creates a CheckBox field - * @param string $name field name - * @param int $w width - * @param boolean $checked define the initial state. - * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. - * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. - * @param string $onvalue value to be returned if selected. - * @param float|null $x Abscissa of the upper-left corner of the rectangle - * @param float|null $y Ordinate of the upper-left corner of the rectangle - * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). - * @public - * @author Nicola Asuni - * @since 4.8.000 (2009-09-07) - */ - public function CheckBox($name, $w, $checked=false, $prop=array(), $opt=array(), $onvalue='Yes', $x=null, $y=null, $js=false) { - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions($w, $x, $y); - if ($js) { - $this->_addfield('checkbox', $name, $x, $y, $w, $w, $prop); - return; - } - if (!isset($prop['value'])) { - $prop['value'] = array('Yes'); - } - // get default style - $prop = array_merge($this->getFormDefaultProp(), $prop); - $prop['borderStyle'] = 'inset'; - // get annotation data - $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); - // set additional default options - $font = 'zapfdingbats'; - if ($this->pdfa_mode) { - // all fonts must be embedded - $font = 'pdfa'.$font; - } - $this->AddFont($font); - $tmpfont = $this->getFontBuffer($font); - $this->annotation_fonts[$tmpfont['fontkey']] = $tmpfont['i']; - $fontstyle = sprintf('/F%d %F Tf %s', $tmpfont['i'], $this->FontSizePt, $this->TextColor); - $popt['da'] = $fontstyle; - // build appearance stream - $popt['ap'] = array(); - $popt['ap']['n'] = array(); - $fx = ((($w - $this->getAbsFontMeasure($tmpfont['cw'][110])) / 2) * $this->k); - $fy = (($w - ((($tmpfont['desc']['Ascent'] - $tmpfont['desc']['Descent']) * $this->FontSizePt / 1000) / $this->k)) * $this->k); - $popt['ap']['n']['Yes'] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(110).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); - $popt['ap']['n']['Off'] = sprintf('q %s BT /F%d %F Tf %F %F Td ('.chr(111).') Tj ET Q', $this->TextColor, $tmpfont['i'], $this->FontSizePt, $fx, $fy); - // merge options - $opt = array_merge($popt, $opt); - // set remaining annotation data - $opt['Subtype'] = 'Widget'; - $opt['ft'] = 'Btn'; - $opt['t'] = $name; - if (TCPDF_STATIC::empty_string($onvalue)) { - $onvalue = 'Yes'; - } - $opt['opt'] = array($onvalue); - if ($checked) { - $opt['v'] = array('/Yes'); - $opt['as'] = 'Yes'; - } else { - $opt['v'] = array('/Off'); - $opt['as'] = 'Off'; - } - $this->Annotation($x, $y, $w, $w, $name, $opt, 0); - if ($this->rtl) { - $this->x -= $w; - } else { - $this->x += $w; - } - } - - /** - * Creates a button field - * @param string $name field name - * @param int $w width - * @param int $h height - * @param string $caption caption. - * @param mixed $action action triggered by pressing the button. Use a string to specify a javascript action. Use an array to specify a form action options as on section 12.7.5 of PDF32000_2008. - * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. - * @param array $opt annotation parameters. Possible values are described on official PDF32000_2008 reference. - * @param float|null $x Abscissa of the upper-left corner of the rectangle - * @param float|null $y Ordinate of the upper-left corner of the rectangle - * @param boolean $js if true put the field using JavaScript (requires Acrobat Writer to be rendered). - * @public - * @author Nicola Asuni - * @since 4.8.000 (2009-09-07) - */ - public function Button($name, $w, $h, $caption, $action, $prop=array(), $opt=array(), $x=null, $y=null, $js=false) { - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions($h, $x, $y); - if ($js) { - $this->_addfield('button', $name, $this->x, $this->y, $w, $h, $prop); - $this->javascript .= 'f'.$name.".buttonSetCaption('".addslashes($caption)."');\n"; - $this->javascript .= 'f'.$name.".setAction('MouseUp','".addslashes($action)."');\n"; - $this->javascript .= 'f'.$name.".highlight='push';\n"; - $this->javascript .= 'f'.$name.".print=false;\n"; - return; - } - // get default style - $prop = array_merge($this->getFormDefaultProp(), $prop); - $prop['Pushbutton'] = 'true'; - $prop['highlight'] = 'push'; - $prop['display'] = 'display.noPrint'; - // get annotation data - $popt = TCPDF_STATIC::getAnnotOptFromJSProp($prop, $this->spot_colors, $this->rtl); - $this->annotation_fonts[$this->CurrentFont['fontkey']] = $this->CurrentFont['i']; - $fontstyle = sprintf('/F%d %F Tf %s', $this->CurrentFont['i'], $this->FontSizePt, $this->TextColor); - $popt['da'] = $fontstyle; - // build appearance stream - $popt['ap'] = array(); - $popt['ap']['n'] = '/Tx BMC q '.$fontstyle.' '; - $tmpid = $this->startTemplate($w, $h, false); - $bw = (2 / $this->k); // border width - $border = array( - 'L' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(231)), - 'R' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(51)), - 'T' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(231)), - 'B' => array('width' => $bw, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(51))); - $this->setFillColor(204); - $this->Cell($w, $h, $caption, $border, 0, 'C', true, '', 1, false, 'T', 'M'); - $this->endTemplate(); - --$this->n; - $popt['ap']['n'] .= $this->xobjects[$tmpid]['outdata']; - unset($this->xobjects[$tmpid]); - $popt['ap']['n'] .= 'Q EMC'; - // set additional default options - if (!isset($popt['mk'])) { - $popt['mk'] = array(); - } - $ann_obj_id = ($this->n + 1); - if (!empty($action) AND !is_array($action)) { - $ann_obj_id = ($this->n + 2); - } - $popt['mk']['ca'] = $this->_textstring($caption, $ann_obj_id); - $popt['mk']['rc'] = $this->_textstring($caption, $ann_obj_id); - $popt['mk']['ac'] = $this->_textstring($caption, $ann_obj_id); - // merge options - $opt = array_merge($popt, $opt); - // set remaining annotation data - $opt['Subtype'] = 'Widget'; - $opt['ft'] = 'Btn'; - $opt['t'] = $caption; - $opt['v'] = $name; - if (!empty($action)) { - if (is_array($action)) { - // form action options as on section 12.7.5 of PDF32000_2008. - $opt['aa'] = '/D <<'; - $bmode = array('SubmitForm', 'ResetForm', 'ImportData'); - foreach ($action AS $key => $val) { - if (($key == 'S') AND in_array($val, $bmode)) { - $opt['aa'] .= ' /S /'.$val; - } elseif (($key == 'F') AND (!empty($val))) { - $opt['aa'] .= ' /F '.$this->_datastring($val, $ann_obj_id); - } elseif (($key == 'Fields') AND is_array($val) AND !empty($val)) { - $opt['aa'] .= ' /Fields ['; - foreach ($val AS $field) { - $opt['aa'] .= ' '.$this->_textstring($field, $ann_obj_id); - } - $opt['aa'] .= ']'; - } elseif (($key == 'Flags')) { - $ff = 0; - if (is_array($val)) { - foreach ($val AS $flag) { - switch ($flag) { - case 'Include/Exclude': { - $ff += 1 << 0; - break; - } - case 'IncludeNoValueFields': { - $ff += 1 << 1; - break; - } - case 'ExportFormat': { - $ff += 1 << 2; - break; - } - case 'GetMethod': { - $ff += 1 << 3; - break; - } - case 'SubmitCoordinates': { - $ff += 1 << 4; - break; - } - case 'XFDF': { - $ff += 1 << 5; - break; - } - case 'IncludeAppendSaves': { - $ff += 1 << 6; - break; - } - case 'IncludeAnnotations': { - $ff += 1 << 7; - break; - } - case 'SubmitPDF': { - $ff += 1 << 8; - break; - } - case 'CanonicalFormat': { - $ff += 1 << 9; - break; - } - case 'ExclNonUserAnnots': { - $ff += 1 << 10; - break; - } - case 'ExclFKey': { - $ff += 1 << 11; - break; - } - case 'EmbedForm': { - $ff += 1 << 13; - break; - } - } - } - } else { - $ff = intval($val); - } - $opt['aa'] .= ' /Flags '.$ff; - } - } - $opt['aa'] .= ' >>'; - } else { - // Javascript action or raw action command - $js_obj_id = $this->addJavascriptObject($action); - $opt['aa'] = '/D '.$js_obj_id.' 0 R'; - } - } - $this->Annotation($x, $y, $w, $h, $name, $opt, 0); - if ($this->rtl) { - $this->x -= $w; - } else { - $this->x += $w; - } - } - - // --- END FORMS FIELDS ------------------------------------------------ - - /** - * Add certification signature (DocMDP or UR3) - * You can set only one signature type - * @protected - * @author Nicola Asuni - * @since 4.6.008 (2009-05-07) - */ - protected function _putsignature() { - if ((!$this->sign) OR (!isset($this->signature_data['cert_type']))) { - return; - } - $sigobjid = ($this->sig_obj_id + 1); - $out = $this->_getobj($sigobjid)."\n"; - $out .= '<< /Type /Sig'; - $out .= ' /Filter /Adobe.PPKLite'; - $out .= ' /SubFilter /adbe.pkcs7.detached'; - $out .= ' '.TCPDF_STATIC::$byterange_string; - $out .= ' /Contents<'.str_repeat('0', $this->signature_max_length).'>'; - if (empty($this->signature_data['approval']) OR ($this->signature_data['approval'] != 'A')) { - $out .= ' /Reference ['; // array of signature reference dictionaries - $out .= ' << /Type /SigRef'; - if ($this->signature_data['cert_type'] > 0) { - $out .= ' /TransformMethod /DocMDP'; - $out .= ' /TransformParams <<'; - $out .= ' /Type /TransformParams'; - $out .= ' /P '.$this->signature_data['cert_type']; - $out .= ' /V /1.2'; - } else { - $out .= ' /TransformMethod /UR3'; - $out .= ' /TransformParams <<'; - $out .= ' /Type /TransformParams'; - $out .= ' /V /2.2'; - if (!TCPDF_STATIC::empty_string($this->ur['document'])) { - $out .= ' /Document['.$this->ur['document'].']'; - } - if (!TCPDF_STATIC::empty_string($this->ur['form'])) { - $out .= ' /Form['.$this->ur['form'].']'; - } - if (!TCPDF_STATIC::empty_string($this->ur['signature'])) { - $out .= ' /Signature['.$this->ur['signature'].']'; - } - if (!TCPDF_STATIC::empty_string($this->ur['annots'])) { - $out .= ' /Annots['.$this->ur['annots'].']'; - } - if (!TCPDF_STATIC::empty_string($this->ur['ef'])) { - $out .= ' /EF['.$this->ur['ef'].']'; - } - if (!TCPDF_STATIC::empty_string($this->ur['formex'])) { - $out .= ' /FormEX['.$this->ur['formex'].']'; - } - } - $out .= ' >>'; // close TransformParams - // optional digest data (values must be calculated and replaced later) - //$out .= ' /Data ********** 0 R'; - //$out .= ' /DigestMethod/MD5'; - //$out .= ' /DigestLocation[********** 34]'; - //$out .= ' /DigestValue<********************************>'; - $out .= ' >>'; - $out .= ' ]'; // end of reference - } - if (isset($this->signature_data['info']['Name']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Name'])) { - $out .= ' /Name '.$this->_textstring($this->signature_data['info']['Name'], $sigobjid); - } - if (isset($this->signature_data['info']['Location']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Location'])) { - $out .= ' /Location '.$this->_textstring($this->signature_data['info']['Location'], $sigobjid); - } - if (isset($this->signature_data['info']['Reason']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['Reason'])) { - $out .= ' /Reason '.$this->_textstring($this->signature_data['info']['Reason'], $sigobjid); - } - if (isset($this->signature_data['info']['ContactInfo']) AND !TCPDF_STATIC::empty_string($this->signature_data['info']['ContactInfo'])) { - $out .= ' /ContactInfo '.$this->_textstring($this->signature_data['info']['ContactInfo'], $sigobjid); - } - $out .= ' /M '.$this->_datestring($sigobjid, $this->doc_modification_timestamp); - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - - /** - * Set User's Rights for PDF Reader - * WARNING: This is experimental and currently do not work. - * Check the PDF Reference 8.7.1 Transform Methods, - * Table 8.105 Entries in the UR transform parameters dictionary - * @param boolean $enable if true enable user's rights on PDF reader - * @param string $document Names specifying additional document-wide usage rights for the document. The only defined value is "/FullSave", which permits a user to save the document along with modified form and/or annotation data. - * @param string $annots Names specifying additional annotation-related usage rights for the document. Valid names in PDF 1.5 and later are /Create/Delete/Modify/Copy/Import/Export, which permit the user to perform the named operation on annotations. - * @param string $form Names specifying additional form-field-related usage rights for the document. Valid names are: /Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate - * @param string $signature Names specifying additional signature-related usage rights for the document. The only defined value is /Modify, which permits a user to apply a digital signature to an existing signature form field or clear a signed signature form field. - * @param string $ef Names specifying additional usage rights for named embedded files in the document. Valid names are /Create/Delete/Modify/Import, which permit the user to perform the named operation on named embedded files - Names specifying additional embedded-files-related usage rights for the document. - * @param string $formex Names specifying additional form-field-related usage rights. The only valid name is BarcodePlaintext, which permits text form field data to be encoded as a plaintext two-dimensional barcode. - * @public - * @author Nicola Asuni - * @since 2.9.000 (2008-03-26) - */ - public function setUserRights( - $enable=true, - $document='/FullSave', - $annots='/Create/Delete/Modify/Copy/Import/Export', - $form='/Add/Delete/FillIn/Import/Export/SubmitStandalone/SpawnTemplate', - $signature='/Modify', - $ef='/Create/Delete/Modify/Import', - $formex='') { - $this->ur['enabled'] = $enable; - $this->ur['document'] = $document; - $this->ur['annots'] = $annots; - $this->ur['form'] = $form; - $this->ur['signature'] = $signature; - $this->ur['ef'] = $ef; - $this->ur['formex'] = $formex; - if (!$this->sign) { - $this->setSignature('', '', '', '', 0, array()); - } - } - - /** - * Enable document signature (requires the OpenSSL Library). - * The digital signature improve document authenticity and integrity and allows o enable extra features on Acrobat Reader. - * To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt - * To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 - * To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes - * @param mixed $signing_cert signing certificate (string or filename prefixed with 'file://') - * @param mixed $private_key private key (string or filename prefixed with 'file://') - * @param string $private_key_password password - * @param string $extracerts specifies the name of a file containing a bunch of extra certificates to include in the signature which can for example be used to help the recipient to verify the certificate that you used. - * @param int $cert_type The access permissions granted for this document. Valid values shall be: 1 = No changes to the document shall be permitted; any change to the document shall invalidate the signature; 2 = Permitted changes shall be filling in forms, instantiating page templates, and signing; other changes shall invalidate the signature; 3 = Permitted changes shall be the same as for 2, as well as annotation creation, deletion, and modification; other changes shall invalidate the signature. - * @param array $info array of option information: Name, Location, Reason, ContactInfo. - * @param string $approval Enable approval signature eg. for PDF incremental update - * @public - * @author Nicola Asuni - * @since 4.6.005 (2009-04-24) - */ - public function setSignature($signing_cert='', $private_key='', $private_key_password='', $extracerts='', $cert_type=2, $info=array(), $approval='') { - // to create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt - // to export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 - // to convert pfx certificate to pem: openssl - // OpenSSL> pkcs12 -in -out -nodes - $this->sign = true; - ++$this->n; - $this->sig_obj_id = $this->n; // signature widget - ++$this->n; // signature object ($this->sig_obj_id + 1) - $this->signature_data = array(); - if (strlen($signing_cert) == 0) { - $this->Error('Please provide a certificate file and password!'); - } - if (strlen($private_key) == 0) { - $private_key = $signing_cert; - } - $this->signature_data['signcert'] = $signing_cert; - $this->signature_data['privkey'] = $private_key; - $this->signature_data['password'] = $private_key_password; - $this->signature_data['extracerts'] = $extracerts; - $this->signature_data['cert_type'] = $cert_type; - $this->signature_data['info'] = $info; - $this->signature_data['approval'] = $approval; - } - - /** - * Set the digital signature appearance (a cliccable rectangle area to get signature properties) - * @param float $x Abscissa of the upper-left corner. - * @param float $y Ordinate of the upper-left corner. - * @param float $w Width of the signature area. - * @param float $h Height of the signature area. - * @param int $page option page number (if < 0 the current page is used). - * @param string $name Name of the signature. - * @public - * @author Nicola Asuni - * @since 5.3.011 (2010-06-17) - */ - public function setSignatureAppearance($x=0, $y=0, $w=0, $h=0, $page=-1, $name='') { - $this->signature_appearance = $this->getSignatureAppearanceArray($x, $y, $w, $h, $page, $name); - } - - /** - * Add an empty digital signature appearance (a cliccable rectangle area to get signature properties) - * @param float $x Abscissa of the upper-left corner. - * @param float $y Ordinate of the upper-left corner. - * @param float $w Width of the signature area. - * @param float $h Height of the signature area. - * @param int $page option page number (if < 0 the current page is used). - * @param string $name Name of the signature. - * @public - * @author Nicola Asuni - * @since 5.9.101 (2011-07-06) - */ - public function addEmptySignatureAppearance($x=0, $y=0, $w=0, $h=0, $page=-1, $name='') { - ++$this->n; - $this->empty_signature_appearance[] = array('objid' => $this->n) + $this->getSignatureAppearanceArray($x, $y, $w, $h, $page, $name); - } - - /** - * Get the array that defines the signature appearance (page and rectangle coordinates). - * @param float $x Abscissa of the upper-left corner. - * @param float $y Ordinate of the upper-left corner. - * @param float $w Width of the signature area. - * @param float $h Height of the signature area. - * @param int $page option page number (if < 0 the current page is used). - * @param string $name Name of the signature. - * @return array Array defining page and rectangle coordinates of signature appearance. - * @protected - * @author Nicola Asuni - * @since 5.9.101 (2011-07-06) - */ - protected function getSignatureAppearanceArray($x=0, $y=0, $w=0, $h=0, $page=-1, $name='') { - $sigapp = array(); - if (($page < 1) OR ($page > $this->numpages)) { - $sigapp['page'] = $this->page; - } else { - $sigapp['page'] = intval($page); - } - if (empty($name)) { - $sigapp['name'] = 'Signature'; - } else { - $sigapp['name'] = $name; - } - $a = $x * $this->k; - $b = $this->pagedim[($sigapp['page'])]['h'] - (($y + $h) * $this->k); - $c = $w * $this->k; - $d = $h * $this->k; - $sigapp['rect'] = sprintf('%F %F %F %F', $a, $b, ($a + $c), ($b + $d)); - return $sigapp; - } - - /** - * Enable document timestamping (requires the OpenSSL Library). - * The trusted timestamping improve document security that means that no one should be able to change the document once it has been recorded. - * Use with digital signature only! - * @param string $tsa_host Time Stamping Authority (TSA) server (prefixed with 'https://') - * @param string $tsa_username Specifies the username for TSA authorization (optional) OR specifies the TSA authorization PEM file (see: example_66.php, optional) - * @param string $tsa_password Specifies the password for TSA authorization (optional) - * @param string $tsa_cert Specifies the location of TSA certificate for authorization (optional for cURL) - * @public - * @author Richard Stockinger - * @since 6.0.090 (2014-06-16) - */ - public function setTimeStamp($tsa_host='', $tsa_username='', $tsa_password='', $tsa_cert='') { - $this->tsa_data = array(); - if (!function_exists('curl_init')) { - $this->Error('Please enable cURL PHP extension!'); - } - if (strlen($tsa_host) == 0) { - $this->Error('Please specify the host of Time Stamping Authority (TSA)!'); - } - $this->tsa_data['tsa_host'] = $tsa_host; - if (is_file($tsa_username)) { - $this->tsa_data['tsa_auth'] = $tsa_username; - } else { - $this->tsa_data['tsa_username'] = $tsa_username; - } - $this->tsa_data['tsa_password'] = $tsa_password; - $this->tsa_data['tsa_cert'] = $tsa_cert; - $this->tsa_timestamp = true; - } - - /** - * NOT YET IMPLEMENTED - * Request TSA for a timestamp - * @param string $signature Digital signature as binary string - * @return string Timestamped digital signature - * @protected - * @author Richard Stockinger - * @since 6.0.090 (2014-06-16) - */ - protected function applyTSA($signature) { - if (!$this->tsa_timestamp) { - return $signature; - } - //@TODO: implement this feature - return $signature; - } - - /** - * Create a new page group. - * NOTE: call this function before calling AddPage() - * @param int|null $page starting group page (leave empty for next page). - * @public - * @since 3.0.000 (2008-03-27) - */ - public function startPageGroup($page=null) { - if (empty($page)) { - $page = $this->page + 1; - } - $this->newpagegroup[$page] = sizeof($this->newpagegroup) + 1; - } - - /** - * Set the starting page number. - * @param int $num Starting page number. - * @since 5.9.093 (2011-06-16) - * @public - */ - public function setStartingPageNumber($num=1) { - $this->starting_page_number = max(0, intval($num)); - } - - /** - * Returns the string alias used right align page numbers. - * If the current font is unicode type, the returned string wil contain an additional open curly brace. - * @return string - * @since 5.9.099 (2011-06-27) - * @public - */ - public function getAliasRightShift() { - // calculate aproximatively the ratio between widths of aliases and replacements. - $ref = '{'.TCPDF_STATIC::$alias_right_shift.'}{'.TCPDF_STATIC::$alias_tot_pages.'}{'.TCPDF_STATIC::$alias_num_page.'}'; - $rep = str_repeat(' ', $this->GetNumChars($ref)); - $wrep = $this->GetStringWidth($rep); - if ($wrep > 0) { - $wdiff = max(1, ($this->GetStringWidth($ref) / $wrep)); - } else { - $wdiff = 1; - } - $sdiff = sprintf('%F', $wdiff); - $alias = TCPDF_STATIC::$alias_right_shift.$sdiff.'}'; - if ($this->isUnicodeFont()) { - $alias = '{'.$alias; - } - return $alias; - } - - /** - * Returns the string alias used for the total number of pages. - * If the current font is unicode type, the returned string is surrounded by additional curly braces. - * This alias will be replaced by the total number of pages in the document. - * @return string - * @since 4.0.018 (2008-08-08) - * @public - */ - public function getAliasNbPages() { - if ($this->isUnicodeFont()) { - return '{'.TCPDF_STATIC::$alias_tot_pages.'}'; - } - return TCPDF_STATIC::$alias_tot_pages; - } - - /** - * Returns the string alias used for the page number. - * If the current font is unicode type, the returned string is surrounded by additional curly braces. - * This alias will be replaced by the page number. - * @return string - * @since 4.5.000 (2009-01-02) - * @public - */ - public function getAliasNumPage() { - if ($this->isUnicodeFont()) { - return '{'.TCPDF_STATIC::$alias_num_page.'}'; - } - return TCPDF_STATIC::$alias_num_page; - } - - /** - * Return the alias for the total number of pages in the current page group. - * If the current font is unicode type, the returned string is surrounded by additional curly braces. - * This alias will be replaced by the total number of pages in this group. - * @return string alias of the current page group - * @public - * @since 3.0.000 (2008-03-27) - */ - public function getPageGroupAlias() { - if ($this->isUnicodeFont()) { - return '{'.TCPDF_STATIC::$alias_group_tot_pages.'}'; - } - return TCPDF_STATIC::$alias_group_tot_pages; - } - - /** - * Return the alias for the page number on the current page group. - * If the current font is unicode type, the returned string is surrounded by additional curly braces. - * This alias will be replaced by the page number (relative to the belonging group). - * @return string alias of the current page group - * @public - * @since 4.5.000 (2009-01-02) - */ - public function getPageNumGroupAlias() { - if ($this->isUnicodeFont()) { - return '{'.TCPDF_STATIC::$alias_group_num_page.'}'; - } - return TCPDF_STATIC::$alias_group_num_page; - } - - /** - * Return the current page in the group. - * @return int current page in the group - * @public - * @since 3.0.000 (2008-03-27) - */ - public function getGroupPageNo() { - return $this->pagegroups[$this->currpagegroup]; - } - - /** - * Returns the current group page number formatted as a string. - * @public - * @since 4.3.003 (2008-11-18) - * @see PaneNo(), formatPageNumber() - */ - public function getGroupPageNoFormatted() { - return TCPDF_STATIC::formatPageNumber($this->getGroupPageNo()); - } - - /** - * Returns the current page number formatted as a string. - * @public - * @since 4.2.005 (2008-11-06) - * @see PaneNo(), formatPageNumber() - */ - public function PageNoFormatted() { - return TCPDF_STATIC::formatPageNumber($this->PageNo()); - } - - /** - * Put pdf layers. - * @protected - * @since 3.0.000 (2008-03-27) - */ - protected function _putocg() { - if (empty($this->pdflayers)) { - return; - } - foreach ($this->pdflayers as $key => $layer) { - $this->pdflayers[$key]['objid'] = $this->_newobj(); - $out = '<< /Type /OCG'; - $out .= ' /Name '.$this->_textstring($layer['name'], $this->pdflayers[$key]['objid']); - $out .= ' /Usage <<'; - if (isset($layer['print']) AND ($layer['print'] !== NULL)) { - $out .= ' /Print <>'; - } - $out .= ' /View <>'; - $out .= ' >> >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - } - - /** - * Start a new pdf layer. - * @param string $name Layer name (only a-z letters and numbers). Leave empty for automatic name. - * @param boolean|null $print Set to TRUE to print this layer, FALSE to not print and NULL to not set this option - * @param boolean $view Set to true to view this layer. - * @param boolean $lock If true lock the layer - * @public - * @since 5.9.102 (2011-07-13) - */ - public function startLayer($name='', $print=true, $view=true, $lock=true) { - if ($this->state != 2) { - return; - } - $layer = sprintf('LYR%03d', (count($this->pdflayers) + 1)); - if (empty($name)) { - $name = $layer; - } else { - $name = preg_replace('/[^a-zA-Z0-9_\-]/', '', $name); - } - $this->pdflayers[] = array('layer' => $layer, 'name' => $name, 'print' => $print, 'view' => $view, 'lock' => $lock); - $this->openMarkedContent = true; - $this->_out('/OC /'.$layer.' BDC'); - } - - /** - * End the current PDF layer. - * @public - * @since 5.9.102 (2011-07-13) - */ - public function endLayer() { - if ($this->state != 2) { - return; - } - if ($this->openMarkedContent) { - // close existing open marked-content layer - $this->_out('EMC'); - $this->openMarkedContent = false; - } - } - - /** - * Set the visibility of the successive elements. - * This can be useful, for instance, to put a background - * image or color that will show on screen but won't print. - * @param string $v visibility mode. Legal values are: all, print, screen or view. - * @public - * @since 3.0.000 (2008-03-27) - */ - public function setVisibility($v) { - if ($this->state != 2) { - return; - } - $this->endLayer(); - switch($v) { - case 'print': { - $this->startLayer('Print', true, false); - break; - } - case 'view': - case 'screen': { - $this->startLayer('View', false, true); - break; - } - case 'all': { - $this->_out(''); - break; - } - default: { - $this->Error('Incorrect visibility: '.$v); - break; - } - } - } - - /** - * Add transparency parameters to the current extgstate - * @param array $parms parameters - * @return int|void the number of extgstates - * @protected - * @since 3.0.000 (2008-03-27) - */ - protected function addExtGState($parms) { - if ($this->pdfa_mode || $this->pdfa_version >= 2) { - // transparencies are not allowed in PDF/A mode - return; - } - // check if this ExtGState already exist - foreach ($this->extgstates as $i => $ext) { - if ($ext['parms'] == $parms) { - if ($this->inxobj) { - // we are inside an XObject template - $this->xobjects[$this->xobjid]['extgstates'][$i] = $ext; - } - // return reference to existing ExtGState - return $i; - } - } - $n = (count($this->extgstates) + 1); - $this->extgstates[$n] = array('parms' => $parms); - if ($this->inxobj) { - // we are inside an XObject template - $this->xobjects[$this->xobjid]['extgstates'][$n] = $this->extgstates[$n]; - } - return $n; - } - - /** - * Add an extgstate - * @param int $gs extgstate - * @protected - * @since 3.0.000 (2008-03-27) - */ - protected function setExtGState($gs) { - if (($this->pdfa_mode && $this->pdfa_version < 2) OR ($this->state != 2)) { - // transparency is not allowed in PDF/A-1 mode - return; - } - $this->_out(sprintf('/GS%d gs', $gs)); - } - - /** - * Put extgstates for object transparency - * @protected - * @since 3.0.000 (2008-03-27) - */ - protected function _putextgstates() { - foreach ($this->extgstates as $i => $ext) { - $this->extgstates[$i]['n'] = $this->_newobj(); - $out = '<< /Type /ExtGState'; - foreach ($ext['parms'] as $k => $v) { - if (is_float($v)) { - $v = sprintf('%F', $v); - } elseif ($v === true) { - $v = 'true'; - } elseif ($v === false) { - $v = 'false'; - } - $out .= ' /'.$k.' '.$v; - } - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - } - - /** - * Set overprint mode for stroking (OP) and non-stroking (op) painting operations. - * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). - * @param boolean $stroking If true apply overprint for stroking operations. - * @param boolean|null $nonstroking If true apply overprint for painting operations other than stroking. - * @param integer $mode Overprint mode: (0 = each source colour component value replaces the value previously painted for the corresponding device colorant; 1 = a tint value of 0.0 for a source colour component shall leave the corresponding component of the previously painted colour unchanged). - * @public - * @since 5.9.152 (2012-03-23) - */ - public function setOverprint($stroking=true, $nonstroking=null, $mode=0) { - if ($this->state != 2) { - return; - } - $stroking = $stroking ? true : false; - if (TCPDF_STATIC::empty_string($nonstroking)) { - // default value if not set - $nonstroking = $stroking; - } else { - $nonstroking = $nonstroking ? true : false; - } - if (($mode != 0) AND ($mode != 1)) { - $mode = 0; - } - $this->overprint = array('OP' => $stroking, 'op' => $nonstroking, 'OPM' => $mode); - $gs = $this->addExtGState($this->overprint); - $this->setExtGState($gs); - } - - /** - * Get the overprint mode array (OP, op, OPM). - * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). - * @return array - * @public - * @since 5.9.152 (2012-03-23) - */ - public function getOverprint() { - return $this->overprint; - } - - /** - * Set alpha for stroking (CA) and non-stroking (ca) operations. - * @param float $stroking Alpha value for stroking operations: real value from 0 (transparent) to 1 (opaque). - * @param string $bm blend mode, one of the following: Normal, Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight, SoftLight, Difference, Exclusion, Hue, Saturation, Color, Luminosity - * @param float|null $nonstroking Alpha value for non-stroking operations: real value from 0 (transparent) to 1 (opaque). - * @param boolean $ais - * @public - * @since 3.0.000 (2008-03-27) - */ - public function setAlpha($stroking=1, $bm='Normal', $nonstroking=null, $ais=false) { - if ($this->pdfa_mode && $this->pdfa_version < 2) { - // transparency is not allowed in PDF/A-1 mode - return; - } - $stroking = floatval($stroking); - if (TCPDF_STATIC::empty_string($nonstroking)) { - // default value if not set - $nonstroking = $stroking; - } else { - $nonstroking = floatval($nonstroking); - } - if ($bm[0] == '/') { - // remove trailing slash - $bm = substr($bm, 1); - } - if (!in_array($bm, array('Normal', 'Multiply', 'Screen', 'Overlay', 'Darken', 'Lighten', 'ColorDodge', 'ColorBurn', 'HardLight', 'SoftLight', 'Difference', 'Exclusion', 'Hue', 'Saturation', 'Color', 'Luminosity'))) { - $bm = 'Normal'; - } - $ais = $ais ? true : false; - $this->alpha = array('CA' => $stroking, 'ca' => $nonstroking, 'BM' => '/'.$bm, 'AIS' => $ais); - $gs = $this->addExtGState($this->alpha); - $this->setExtGState($gs); - } - - /** - * Get the alpha mode array (CA, ca, BM, AIS). - * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). - * @return array - * @public - * @since 5.9.152 (2012-03-23) - */ - public function getAlpha() { - return $this->alpha; - } - - /** - * Set the default JPEG compression quality (1-100) - * @param int $quality JPEG quality, integer between 1 and 100 - * @public - * @since 3.0.000 (2008-03-27) - */ - public function setJPEGQuality($quality) { - if (($quality < 1) OR ($quality > 100)) { - $quality = 75; - } - $this->jpeg_quality = intval($quality); - } - - /** - * Set the default number of columns in a row for HTML tables. - * @param int $cols number of columns - * @public - * @since 3.0.014 (2008-06-04) - */ - public function setDefaultTableColumns($cols=4) { - $this->default_table_columns = intval($cols); - } - - /** - * Set the height of the cell (line height) respect the font height. - * @param float $h cell proportion respect font height (typical value = 1.25). - * @public - * @since 3.0.014 (2008-06-04) - */ - public function setCellHeightRatio($h) { - $this->cell_height_ratio = $h; - } - - /** - * return the height of cell repect font height. - * @public - * @return float - * @since 4.0.012 (2008-07-24) - */ - public function getCellHeightRatio() { - return $this->cell_height_ratio; - } - - /** - * Set the PDF version (check PDF reference for valid values). - * @param string $version PDF document version. - * @public - * @since 3.1.000 (2008-06-09) - */ - public function setPDFVersion($version='1.7') { - if ($this->pdfa_mode && $this->pdfa_version == 1 ) { - // PDF/A-1 mode - $this->PDFVersion = '1.4'; - } elseif ($this->pdfa_mode && $this->pdfa_version >= 2 ) { - // PDF/A-2 mode - $this->PDFVersion = '1.7'; - } else { - $this->PDFVersion = $version; - } - } - - /** - * Set the viewer preferences dictionary controlling the way the document is to be presented on the screen or in print. - * (see Section 8.1 of PDF reference, "Viewer Preferences"). - *
            • HideToolbar boolean (Optional) A flag specifying whether to hide the viewer application's tool bars when the document is active. Default value: false.
            • HideMenubar boolean (Optional) A flag specifying whether to hide the viewer application's menu bar when the document is active. Default value: false.
            • HideWindowUI boolean (Optional) A flag specifying whether to hide user interface elements in the document's window (such as scroll bars and navigation controls), leaving only the document's contents displayed. Default value: false.
            • FitWindow boolean (Optional) A flag specifying whether to resize the document's window to fit the size of the first displayed page. Default value: false.
            • CenterWindow boolean (Optional) A flag specifying whether to position the document's window in the center of the screen. Default value: false.
            • DisplayDocTitle boolean (Optional; PDF 1.4) A flag specifying whether the window's title bar should display the document title taken from the Title entry of the document information dictionary (see Section 10.2.1, "Document Information Dictionary"). If false, the title bar should instead display the name of the PDF file containing the document. Default value: false.
            • NonFullScreenPageMode name (Optional) The document's page mode, specifying how to display the document on exiting full-screen mode:
              • UseNone Neither document outline nor thumbnail images visible
              • UseOutlines Document outline visible
              • UseThumbs Thumbnail images visible
              • UseOC Optional content group panel visible
              This entry is meaningful only if the value of the PageMode entry in the catalog dictionary (see Section 3.6.1, "Document Catalog") is FullScreen; it is ignored otherwise. Default value: UseNone.
            • ViewArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be displayed when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:
              • MediaBox
              • CropBox (default)
              • BleedBox
              • TrimBox
              • ArtBox
            • ViewClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when viewing the document on the screen. Valid values are (see Section 10.10.1, "Page Boundaries").:
              • MediaBox
              • CropBox (default)
              • BleedBox
              • TrimBox
              • ArtBox
            • PrintArea name (Optional; PDF 1.4) The name of the page boundary representing the area of a page to be rendered when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:
              • MediaBox
              • CropBox (default)
              • BleedBox
              • TrimBox
              • ArtBox
            • PrintClip name (Optional; PDF 1.4) The name of the page boundary to which the contents of a page are to be clipped when printing the document. Valid values are (see Section 10.10.1, "Page Boundaries").:
              • MediaBox
              • CropBox (default)
              • BleedBox
              • TrimBox
              • ArtBox
            • PrintScaling name (Optional; PDF 1.6) The page scaling option to be selected when a print dialog is displayed for this document. Valid values are:
              • None, which indicates that the print dialog should reflect no page scaling
              • AppDefault (default), which indicates that applications should use the current print scaling
            • Duplex name (Optional; PDF 1.7) The paper handling option to use when printing the file from the print dialog. The following values are valid:
              • Simplex - Print single-sided
              • DuplexFlipShortEdge - Duplex and flip on the short edge of the sheet
              • DuplexFlipLongEdge - Duplex and flip on the long edge of the sheet
              Default value: none
            • PickTrayByPDFSize boolean (Optional; PDF 1.7) A flag specifying whether the PDF page size is used to select the input paper tray. This setting influences only the preset values used to populate the print dialog presented by a PDF viewer application. If PickTrayByPDFSize is true, the check box in the print dialog associated with input paper tray is checked. Note: This setting has no effect on Mac OS systems, which do not provide the ability to pick the input tray by size.
            • PrintPageRange array (Optional; PDF 1.7) The page numbers used to initialize the print dialog box when the file is printed. The first page of the PDF file is denoted by 1. Each pair consists of the first and last pages in the sub-range. An odd number of integers causes this entry to be ignored. Negative numbers cause the entire array to be ignored. Default value: as defined by PDF viewer application
            • NumCopies integer (Optional; PDF 1.7) The number of copies to be printed when the print dialog is opened for this file. Supported values are the integers 2 through 5. Values outside this range are ignored. Default value: as defined by PDF viewer application, but typically 1
            - * @param array $preferences array of options. - * @author Nicola Asuni - * @public - * @since 3.1.000 (2008-06-09) - */ - public function setViewerPreferences($preferences) { - $this->viewer_preferences = $preferences; - } - - /** - * Paints color transition registration bars - * @param float $x abscissa of the top left corner of the rectangle. - * @param float $y ordinate of the top left corner of the rectangle. - * @param float $w width of the rectangle. - * @param float $h height of the rectangle. - * @param boolean $transition if true prints tcolor transitions to white. - * @param boolean $vertical if true prints bar vertically. - * @param string $colors colors to print separated by comma. Valid values are: A,W,R,G,B,C,M,Y,K,RGB,CMYK,ALL,ALLSPOT,. Where: A = grayscale black, W = grayscale white, R = RGB red, G RGB green, B RGB blue, C = CMYK cyan, M = CMYK magenta, Y = CMYK yellow, K = CMYK key/black, RGB = RGB registration color, CMYK = CMYK registration color, ALL = Spot registration color, ALLSPOT = print all defined spot colors, = name of the spot color to print. - * @author Nicola Asuni - * @since 4.9.000 (2010-03-26) - * @public - */ - public function colorRegistrationBar($x, $y, $w, $h, $transition=true, $vertical=false, $colors='A,R,G,B,C,M,Y,K') { - if (strpos($colors, 'ALLSPOT') !== false) { - // expand spot colors - $spot_colors = ''; - foreach ($this->spot_colors as $spot_color_name => $v) { - $spot_colors .= ','.$spot_color_name; - } - if (!empty($spot_colors)) { - $spot_colors = substr($spot_colors, 1); - $colors = str_replace('ALLSPOT', $spot_colors, $colors); - } else { - $colors = str_replace('ALLSPOT', 'NONE', $colors); - } - } - $bars = explode(',', $colors); - $numbars = count($bars); // number of bars to print - if ($numbars <= 0) { - return; - } - // set bar measures - if ($vertical) { - $coords = array(0, 0, 0, 1); - $wb = $w / $numbars; // bar width - $hb = $h; // bar height - $xd = $wb; // delta x - $yd = 0; // delta y - } else { - $coords = array(1, 0, 0, 0); - $wb = $w; // bar width - $hb = $h / $numbars; // bar height - $xd = 0; // delta x - $yd = $hb; // delta y - } - $xb = $x; - $yb = $y; - foreach ($bars as $col) { - switch ($col) { - // set transition colors - case 'A': { // BLACK (GRAYSCALE) - $col_a = array(255); - $col_b = array(0); - break; - } - case 'W': { // WHITE (GRAYSCALE) - $col_a = array(0); - $col_b = array(255); - break; - } - case 'R': { // RED (RGB) - $col_a = array(255,255,255); - $col_b = array(255,0,0); - break; - } - case 'G': { // GREEN (RGB) - $col_a = array(255,255,255); - $col_b = array(0,255,0); - break; - } - case 'B': { // BLUE (RGB) - $col_a = array(255,255,255); - $col_b = array(0,0,255); - break; - } - case 'C': { // CYAN (CMYK) - $col_a = array(0,0,0,0); - $col_b = array(100,0,0,0); - break; - } - case 'M': { // MAGENTA (CMYK) - $col_a = array(0,0,0,0); - $col_b = array(0,100,0,0); - break; - } - case 'Y': { // YELLOW (CMYK) - $col_a = array(0,0,0,0); - $col_b = array(0,0,100,0); - break; - } - case 'K': { // KEY - BLACK (CMYK) - $col_a = array(0,0,0,0); - $col_b = array(0,0,0,100); - break; - } - case 'RGB': { // BLACK REGISTRATION (RGB) - $col_a = array(255,255,255); - $col_b = array(0,0,0); - break; - } - case 'CMYK': { // BLACK REGISTRATION (CMYK) - $col_a = array(0,0,0,0); - $col_b = array(100,100,100,100); - break; - } - case 'ALL': { // SPOT COLOR REGISTRATION - $col_a = array(0,0,0,0,'None'); - $col_b = array(100,100,100,100,'All'); - break; - } - case 'NONE': { // SKIP THIS COLOR - $col_a = array(0,0,0,0,'None'); - $col_b = array(0,0,0,0,'None'); - break; - } - default: { // SPECIFIC SPOT COLOR NAME - $col_a = array(0,0,0,0,'None'); - $col_b = TCPDF_COLORS::getSpotColor($col, $this->spot_colors); - if ($col_b === false) { - // in case of error defaults to the registration color - $col_b = array(100,100,100,100,'All'); - } - break; - } - } - if ($col != 'NONE') { - if ($transition) { - // color gradient - $this->LinearGradient($xb, $yb, $wb, $hb, $col_a, $col_b, $coords); - } else { - $this->setFillColorArray($col_b); - // colored rectangle - $this->Rect($xb, $yb, $wb, $hb, 'F', array()); - } - $xb += $xd; - $yb += $yd; - } - } - } - - /** - * Paints crop marks. - * @param float $x abscissa of the crop mark center. - * @param float $y ordinate of the crop mark center. - * @param float $w width of the crop mark. - * @param float $h height of the crop mark. - * @param string $type type of crop mark, one symbol per type separated by comma: T = TOP, F = BOTTOM, L = LEFT, R = RIGHT, TL = A = TOP-LEFT, TR = B = TOP-RIGHT, BL = C = BOTTOM-LEFT, BR = D = BOTTOM-RIGHT. - * @param array $color crop mark color (default spot registration color). - * @author Nicola Asuni - * @since 4.9.000 (2010-03-26) - * @public - */ - public function cropMark($x, $y, $w, $h, $type='T,R,B,L', $color=array(100,100,100,100,'All')) { - $this->setLineStyle(array('width' => (0.5 / $this->k), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $color)); - $type = strtoupper($type); - $type = preg_replace('/[^A-Z\-\,]*/', '', $type); - // split type in single components - $type = str_replace('-', ',', $type); - $type = str_replace('TL', 'T,L', $type); - $type = str_replace('TR', 'T,R', $type); - $type = str_replace('BL', 'F,L', $type); - $type = str_replace('BR', 'F,R', $type); - $type = str_replace('A', 'T,L', $type); - $type = str_replace('B', 'T,R', $type); - $type = str_replace('T,RO', 'BO', $type); - $type = str_replace('C', 'F,L', $type); - $type = str_replace('D', 'F,R', $type); - $crops = explode(',', strtoupper($type)); - // remove duplicates - $crops = array_unique($crops); - $dw = ($w / 4); // horizontal space to leave before the intersection point - $dh = ($h / 4); // vertical space to leave before the intersection point - foreach ($crops as $crop) { - switch ($crop) { - case 'T': - case 'TOP': { - $x1 = $x; - $y1 = ($y - $h); - $x2 = $x; - $y2 = ($y - $dh); - break; - } - case 'F': - case 'BOTTOM': { - $x1 = $x; - $y1 = ($y + $dh); - $x2 = $x; - $y2 = ($y + $h); - break; - } - case 'L': - case 'LEFT': { - $x1 = ($x - $w); - $y1 = $y; - $x2 = ($x - $dw); - $y2 = $y; - break; - } - case 'R': - case 'RIGHT': { - $x1 = ($x + $dw); - $y1 = $y; - $x2 = ($x + $w); - $y2 = $y; - break; - } - } - $this->Line($x1, $y1, $x2, $y2); - } - } - - /** - * Paints a registration mark - * @param float $x abscissa of the registration mark center. - * @param float $y ordinate of the registration mark center. - * @param float $r radius of the crop mark. - * @param boolean $double if true print two concentric crop marks. - * @param array $cola crop mark color (default spot registration color 'All'). - * @param array $colb second crop mark color (default spot registration color 'None'). - * @author Nicola Asuni - * @since 4.9.000 (2010-03-26) - * @public - */ - public function registrationMark($x, $y, $r, $double=false, $cola=array(100,100,100,100,'All'), $colb=array(0,0,0,0,'None')) { - $line_style = array('width' => max((0.5 / $this->k),($r / 30)), 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => $cola); - $this->setFillColorArray($cola); - $this->PieSector($x, $y, $r, 90, 180, 'F'); - $this->PieSector($x, $y, $r, 270, 360, 'F'); - $this->Circle($x, $y, $r, 0, 360, 'C', $line_style, array(), 8); - if ($double) { - $ri = $r * 0.5; - $this->setFillColorArray($colb); - $this->PieSector($x, $y, $ri, 90, 180, 'F'); - $this->PieSector($x, $y, $ri, 270, 360, 'F'); - $this->setFillColorArray($cola); - $this->PieSector($x, $y, $ri, 0, 90, 'F'); - $this->PieSector($x, $y, $ri, 180, 270, 'F'); - $this->Circle($x, $y, $ri, 0, 360, 'C', $line_style, array(), 8); - } - } - - /** - * Paints a CMYK registration mark - * @param float $x abscissa of the registration mark center. - * @param float $y ordinate of the registration mark center. - * @param float $r radius of the crop mark. - * @author Nicola Asuni - * @since 6.0.038 (2013-09-30) - * @public - */ - public function registrationMarkCMYK($x, $y, $r) { - // line width - $lw = max((0.5 / $this->k),($r / 8)); - // internal radius - $ri = ($r * 0.6); - // external radius - $re = ($r * 1.3); - // Cyan - $this->setFillColorArray(array(100,0,0,0)); - $this->PieSector($x, $y, $ri, 270, 360, 'F'); - // Magenta - $this->setFillColorArray(array(0,100,0,0)); - $this->PieSector($x, $y, $ri, 0, 90, 'F'); - // Yellow - $this->setFillColorArray(array(0,0,100,0)); - $this->PieSector($x, $y, $ri, 90, 180, 'F'); - // Key - black - $this->setFillColorArray(array(0,0,0,100)); - $this->PieSector($x, $y, $ri, 180, 270, 'F'); - // registration color - $line_style = array('width' => $lw, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(100,100,100,100,'All')); - $this->setFillColorArray(array(100,100,100,100,'All')); - // external circle - $this->Circle($x, $y, $r, 0, 360, 'C', $line_style, array(), 8); - // cross lines - $this->Line($x, ($y - $re), $x, ($y - $ri)); - $this->Line($x, ($y + $ri), $x, ($y + $re)); - $this->Line(($x - $re), $y, ($x - $ri), $y); - $this->Line(($x + $ri), $y, ($x + $re), $y); - } - - /** - * Paints a linear colour gradient. - * @param float $x abscissa of the top left corner of the rectangle. - * @param float $y ordinate of the top left corner of the rectangle. - * @param float $w width of the rectangle. - * @param float $h height of the rectangle. - * @param array $col1 first color (Grayscale, RGB or CMYK components). - * @param array $col2 second color (Grayscale, RGB or CMYK components). - * @param array $coords array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). The default value is from left to right (x1=0, y1=0, x2=1, y2=0). - * @author Andreas W\FCrmser, Nicola Asuni - * @since 3.1.000 (2008-06-09) - * @public - */ - public function LinearGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0,0,1,0)) { - $this->Clip($x, $y, $w, $h); - $this->Gradient(2, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false); - } - - /** - * Paints a radial colour gradient. - * @param float $x abscissa of the top left corner of the rectangle. - * @param float $y ordinate of the top left corner of the rectangle. - * @param float $w width of the rectangle. - * @param float $h height of the rectangle. - * @param array $col1 first color (Grayscale, RGB or CMYK components). - * @param array $col2 second color (Grayscale, RGB or CMYK components). - * @param array $coords array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). (fx, fy) should be inside the circle, otherwise some areas will not be defined. - * @author Andreas W\FCrmser, Nicola Asuni - * @since 3.1.000 (2008-06-09) - * @public - */ - public function RadialGradient($x, $y, $w, $h, $col1=array(), $col2=array(), $coords=array(0.5,0.5,0.5,0.5,1)) { - $this->Clip($x, $y, $w, $h); - $this->Gradient(3, $coords, array(array('color' => $col1, 'offset' => 0, 'exponent' => 1), array('color' => $col2, 'offset' => 1, 'exponent' => 1)), array(), false); - } - - /** - * Paints a coons patch mesh. - * @param float $x abscissa of the top left corner of the rectangle. - * @param float $y ordinate of the top left corner of the rectangle. - * @param float $w width of the rectangle. - * @param float $h height of the rectangle. - * @param array $col1 first color (lower left corner) (RGB components). - * @param array $col2 second color (lower right corner) (RGB components). - * @param array $col3 third color (upper right corner) (RGB components). - * @param array $col4 fourth color (upper left corner) (RGB components). - * @param array $coords
            • for one patch mesh: array(float x1, float y1, .... float x12, float y12): 12 pairs of coordinates (normally from 0 to 1) which specify the Bezier control points that define the patch. First pair is the lower left edge point, next is its right control point (control point 2). Then the other points are defined in the order: control point 1, edge point, control point 2 going counter-clockwise around the patch. Last (x12, y12) is the first edge point's left control point (control point 1).
            • for two or more patch meshes: array[number of patches]: arrays with the following keys for each patch: f: where to put that patch (0 = first patch, 1, 2, 3 = right, top and left of precedent patch - I didn't figure this out completely - just try and error ;-) points: 12 pairs of coordinates of the Bezier control points as above for the first patch, 8 pairs of coordinates for the following patches, ignoring the coordinates already defined by the precedent patch (I also didn't figure out the order of these - also: try and see what's happening) colors: must be 4 colors for the first patch, 2 colors for the following patches
            - * @param array $coords_min minimum value used by the coordinates. If a coordinate's value is smaller than this it will be cut to coords_min. default: 0 - * @param array $coords_max maximum value used by the coordinates. If a coordinate's value is greater than this it will be cut to coords_max. default: 1 - * @param boolean $antialias A flag indicating whether to filter the shading function to prevent aliasing artifacts. - * @author Andreas W\FCrmser, Nicola Asuni - * @since 3.1.000 (2008-06-09) - * @public - */ - public function CoonsPatchMesh($x, $y, $w, $h, $col1=array(), $col2=array(), $col3=array(), $col4=array(), $coords=array(0.00,0.0,0.33,0.00,0.67,0.00,1.00,0.00,1.00,0.33,1.00,0.67,1.00,1.00,0.67,1.00,0.33,1.00,0.00,1.00,0.00,0.67,0.00,0.33), $coords_min=0, $coords_max=1, $antialias=false) { - if (($this->pdfa_mode && $this->pdfa_version < 2) OR ($this->state != 2)) { - return; - } - $this->Clip($x, $y, $w, $h); - $n = count($this->gradients) + 1; - $this->gradients[$n] = array(); - $this->gradients[$n]['type'] = 6; //coons patch mesh - $this->gradients[$n]['coords'] = array(); - $this->gradients[$n]['antialias'] = $antialias; - $this->gradients[$n]['colors'] = array(); - $this->gradients[$n]['transparency'] = false; - //check the coords array if it is the simple array or the multi patch array - if (!isset($coords[0]['f'])) { - //simple array -> convert to multi patch array - if (!isset($col1[1])) { - $col1[1] = $col1[2] = $col1[0]; - } - if (!isset($col2[1])) { - $col2[1] = $col2[2] = $col2[0]; - } - if (!isset($col3[1])) { - $col3[1] = $col3[2] = $col3[0]; - } - if (!isset($col4[1])) { - $col4[1] = $col4[2] = $col4[0]; - } - $patch_array[0]['f'] = 0; - $patch_array[0]['points'] = $coords; - $patch_array[0]['colors'][0]['r'] = $col1[0]; - $patch_array[0]['colors'][0]['g'] = $col1[1]; - $patch_array[0]['colors'][0]['b'] = $col1[2]; - $patch_array[0]['colors'][1]['r'] = $col2[0]; - $patch_array[0]['colors'][1]['g'] = $col2[1]; - $patch_array[0]['colors'][1]['b'] = $col2[2]; - $patch_array[0]['colors'][2]['r'] = $col3[0]; - $patch_array[0]['colors'][2]['g'] = $col3[1]; - $patch_array[0]['colors'][2]['b'] = $col3[2]; - $patch_array[0]['colors'][3]['r'] = $col4[0]; - $patch_array[0]['colors'][3]['g'] = $col4[1]; - $patch_array[0]['colors'][3]['b'] = $col4[2]; - } else { - //multi patch array - $patch_array = $coords; - } - $bpcd = 65535; //16 bits per coordinate - //build the data stream - $this->gradients[$n]['stream'] = ''; - $count_patch = count($patch_array); - for ($i=0; $i < $count_patch; ++$i) { - $this->gradients[$n]['stream'] .= chr($patch_array[$i]['f']); //start with the edge flag as 8 bit - $count_points = count($patch_array[$i]['points']); - for ($j=0; $j < $count_points; ++$j) { - //each point as 16 bit - $patch_array[$i]['points'][$j] = (($patch_array[$i]['points'][$j] - $coords_min) / ($coords_max - $coords_min)) * $bpcd; - if ($patch_array[$i]['points'][$j] < 0) { - $patch_array[$i]['points'][$j] = 0; - } - if ($patch_array[$i]['points'][$j] > $bpcd) { - $patch_array[$i]['points'][$j] = $bpcd; - } - $this->gradients[$n]['stream'] .= chr((int) floor($patch_array[$i]['points'][$j] / 256)); - $this->gradients[$n]['stream'] .= chr((int) floor(intval($patch_array[$i]['points'][$j]) % 256)); - } - $count_cols = count($patch_array[$i]['colors']); - for ($j=0; $j < $count_cols; ++$j) { - //each color component as 8 bit - $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['r']); - $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['g']); - $this->gradients[$n]['stream'] .= chr($patch_array[$i]['colors'][$j]['b']); - } - } - //paint the gradient - $this->_out('/Sh'.$n.' sh'); - //restore previous Graphic State - $this->_outRestoreGraphicsState(); - if ($this->inxobj) { - // we are inside an XObject template - $this->xobjects[$this->xobjid]['gradients'][$n] = $this->gradients[$n]; - } - } - - /** - * Set a rectangular clipping area. - * @param float $x abscissa of the top left corner of the rectangle (or top right corner for RTL mode). - * @param float $y ordinate of the top left corner of the rectangle. - * @param float $w width of the rectangle. - * @param float $h height of the rectangle. - * @author Andreas W\FCrmser, Nicola Asuni - * @since 3.1.000 (2008-06-09) - * @protected - */ - protected function Clip($x, $y, $w, $h) { - if ($this->state != 2) { - return; - } - if ($this->rtl) { - $x = $this->w - $x - $w; - } - //save current Graphic State - $s = 'q'; - //set clipping area - $s .= sprintf(' %F %F %F %F re W n', $x*$this->k, ($this->h-$y)*$this->k, $w*$this->k, -$h*$this->k); - //set up transformation matrix for gradient - $s .= sprintf(' %F 0 0 %F %F %F cm', $w*$this->k, $h*$this->k, $x*$this->k, ($this->h-($y+$h))*$this->k); - $this->_out($s); - } - - /** - * Output gradient. - * @param int $type type of gradient (1 Function-based shading; 2 Axial shading; 3 Radial shading; 4 Free-form Gouraud-shaded triangle mesh; 5 Lattice-form Gouraud-shaded triangle mesh; 6 Coons patch mesh; 7 Tensor-product patch mesh). (Not all types are currently supported) - * @param array $coords array of coordinates. - * @param array $stops array gradient color components: color = array of GRAY, RGB or CMYK color components; offset = (0 to 1) represents a location along the gradient vector; exponent = exponent of the exponential interpolation function (default = 1). - * @param array $background An array of colour components appropriate to the colour space, specifying a single background colour value. - * @param boolean $antialias A flag indicating whether to filter the shading function to prevent aliasing artifacts. - * @author Nicola Asuni - * @since 3.1.000 (2008-06-09) - * @public - */ - public function Gradient($type, $coords, $stops, $background=array(), $antialias=false) { - if (($this->pdfa_mode && $this->pdfa_version < 2) OR ($this->state != 2)) { - return; - } - $n = count($this->gradients) + 1; - $this->gradients[$n] = array(); - $this->gradients[$n]['type'] = $type; - $this->gradients[$n]['coords'] = $coords; - $this->gradients[$n]['antialias'] = $antialias; - $this->gradients[$n]['colors'] = array(); - $this->gradients[$n]['transparency'] = false; - // color space - $numcolspace = count($stops[0]['color']); - $bcolor = array_values($background); - switch($numcolspace) { - case 5: // SPOT - case 4: { // CMYK - $this->gradients[$n]['colspace'] = 'DeviceCMYK'; - if (!empty($background)) { - $this->gradients[$n]['background'] = sprintf('%F %F %F %F', $bcolor[0]/100, $bcolor[1]/100, $bcolor[2]/100, $bcolor[3]/100); - } - break; - } - case 3: { // RGB - $this->gradients[$n]['colspace'] = 'DeviceRGB'; - if (!empty($background)) { - $this->gradients[$n]['background'] = sprintf('%F %F %F', $bcolor[0]/255, $bcolor[1]/255, $bcolor[2]/255); - } - break; - } - case 1: { // GRAY SCALE - $this->gradients[$n]['colspace'] = 'DeviceGray'; - if (!empty($background)) { - $this->gradients[$n]['background'] = sprintf('%F', $bcolor[0]/255); - } - break; - } - } - $num_stops = count($stops); - $last_stop_id = $num_stops - 1; - foreach ($stops as $key => $stop) { - $this->gradients[$n]['colors'][$key] = array(); - // offset represents a location along the gradient vector - if (isset($stop['offset'])) { - $this->gradients[$n]['colors'][$key]['offset'] = $stop['offset']; - } else { - if ($key == 0) { - $this->gradients[$n]['colors'][$key]['offset'] = 0; - } elseif ($key == $last_stop_id) { - $this->gradients[$n]['colors'][$key]['offset'] = 1; - } else { - $offsetstep = (1 - $this->gradients[$n]['colors'][($key - 1)]['offset']) / ($num_stops - $key); - $this->gradients[$n]['colors'][$key]['offset'] = $this->gradients[$n]['colors'][($key - 1)]['offset'] + $offsetstep; - } - } - if (isset($stop['opacity'])) { - $this->gradients[$n]['colors'][$key]['opacity'] = $stop['opacity']; - if ((!($this->pdfa_mode && $this->pdfa_version < 2)) AND ($stop['opacity'] < 1)) { - $this->gradients[$n]['transparency'] = true; - } - } else { - $this->gradients[$n]['colors'][$key]['opacity'] = 1; - } - // exponent for the exponential interpolation function - if (isset($stop['exponent'])) { - $this->gradients[$n]['colors'][$key]['exponent'] = $stop['exponent']; - } else { - $this->gradients[$n]['colors'][$key]['exponent'] = 1; - } - // set colors - $color = array_values($stop['color']); - switch($numcolspace) { - case 5: // SPOT - case 4: { // CMYK - $this->gradients[$n]['colors'][$key]['color'] = sprintf('%F %F %F %F', $color[0]/100, $color[1]/100, $color[2]/100, $color[3]/100); - break; - } - case 3: { // RGB - $this->gradients[$n]['colors'][$key]['color'] = sprintf('%F %F %F', $color[0]/255, $color[1]/255, $color[2]/255); - break; - } - case 1: { // GRAY SCALE - $this->gradients[$n]['colors'][$key]['color'] = sprintf('%F', $color[0]/255); - break; - } - } - } - if ($this->gradients[$n]['transparency']) { - // paint luminosity gradient - $this->_out('/TGS'.$n.' gs'); - } - //paint the gradient - $this->_out('/Sh'.$n.' sh'); - //restore previous Graphic State - $this->_outRestoreGraphicsState(); - if ($this->inxobj) { - // we are inside an XObject template - $this->xobjects[$this->xobjid]['gradients'][$n] = $this->gradients[$n]; - } - } - - /** - * Output gradient shaders. - * @author Nicola Asuni - * @since 3.1.000 (2008-06-09) - * @protected - */ - function _putshaders() { - if ($this->pdfa_mode && $this->pdfa_version < 2) { - return; - } - $idt = count($this->gradients); //index for transparency gradients - foreach ($this->gradients as $id => $grad) { - if (($grad['type'] == 2) OR ($grad['type'] == 3)) { - $fc = $this->_newobj(); - $out = '<<'; - $out .= ' /FunctionType 3'; - $out .= ' /Domain [0 1]'; - $functions = ''; - $bounds = ''; - $encode = ''; - $i = 1; - $num_cols = count($grad['colors']); - $lastcols = $num_cols - 1; - for ($i = 1; $i < $num_cols; ++$i) { - $functions .= ($fc + $i).' 0 R '; - if ($i < $lastcols) { - $bounds .= sprintf('%F ', $grad['colors'][$i]['offset']); - } - $encode .= '0 1 '; - } - $out .= ' /Functions ['.trim($functions).']'; - $out .= ' /Bounds ['.trim($bounds).']'; - $out .= ' /Encode ['.trim($encode).']'; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - for ($i = 1; $i < $num_cols; ++$i) { - $this->_newobj(); - $out = '<<'; - $out .= ' /FunctionType 2'; - $out .= ' /Domain [0 1]'; - $out .= ' /C0 ['.$grad['colors'][($i - 1)]['color'].']'; - $out .= ' /C1 ['.$grad['colors'][$i]['color'].']'; - $out .= ' /N '.$grad['colors'][$i]['exponent']; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - // set transparency functions - if ($grad['transparency']) { - $ft = $this->_newobj(); - $out = '<<'; - $out .= ' /FunctionType 3'; - $out .= ' /Domain [0 1]'; - $functions = ''; - $i = 1; - $num_cols = count($grad['colors']); - for ($i = 1; $i < $num_cols; ++$i) { - $functions .= ($ft + $i).' 0 R '; - } - $out .= ' /Functions ['.trim($functions).']'; - $out .= ' /Bounds ['.trim($bounds).']'; - $out .= ' /Encode ['.trim($encode).']'; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - for ($i = 1; $i < $num_cols; ++$i) { - $this->_newobj(); - $out = '<<'; - $out .= ' /FunctionType 2'; - $out .= ' /Domain [0 1]'; - $out .= ' /C0 ['.$grad['colors'][($i - 1)]['opacity'].']'; - $out .= ' /C1 ['.$grad['colors'][$i]['opacity'].']'; - $out .= ' /N '.$grad['colors'][$i]['exponent']; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - } - } - } - // set shading object - $this->_newobj(); - $out = '<< /ShadingType '.$grad['type']; - if (isset($grad['colspace'])) { - $out .= ' /ColorSpace /'.$grad['colspace']; - } else { - $out .= ' /ColorSpace /DeviceRGB'; - } - if (isset($grad['background']) AND !empty($grad['background'])) { - $out .= ' /Background ['.$grad['background'].']'; - } - if (isset($grad['antialias']) AND ($grad['antialias'] === true)) { - $out .= ' /AntiAlias true'; - } - if ($grad['type'] == 2) { - $out .= ' '.sprintf('/Coords [%F %F %F %F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3]); - $out .= ' /Domain [0 1]'; - $out .= ' /Function '.$fc.' 0 R'; - $out .= ' /Extend [true true]'; - $out .= ' >>'; - } elseif ($grad['type'] == 3) { - //x0, y0, r0, x1, y1, r1 - //at this this time radius of inner circle is 0 - $out .= ' '.sprintf('/Coords [%F %F 0 %F %F %F]', $grad['coords'][0], $grad['coords'][1], $grad['coords'][2], $grad['coords'][3], $grad['coords'][4]); - $out .= ' /Domain [0 1]'; - $out .= ' /Function '.$fc.' 0 R'; - $out .= ' /Extend [true true]'; - $out .= ' >>'; - } elseif ($grad['type'] == 6) { - $out .= ' /BitsPerCoordinate 16'; - $out .= ' /BitsPerComponent 8'; - $out .= ' /Decode[0 1 0 1 0 1 0 1 0 1]'; - $out .= ' /BitsPerFlag 8'; - $stream = $this->_getrawstream($grad['stream']); - $out .= ' /Length '.strlen($stream); - $out .= ' >>'; - $out .= ' stream'."\n".$stream."\n".'endstream'; - } - $out .= "\n".'endobj'; - $this->_out($out); - if ($grad['transparency']) { - $shading_transparency = preg_replace('/\/ColorSpace \/[^\s]+/si', '/ColorSpace /DeviceGray', $out); - $shading_transparency = preg_replace('/\/Function [0-9]+ /si', '/Function '.$ft.' ', $shading_transparency); - } - $this->gradients[$id]['id'] = $this->n; - // set pattern object - $this->_newobj(); - $out = '<< /Type /Pattern /PatternType 2'; - $out .= ' /Shading '.$this->gradients[$id]['id'].' 0 R'; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - $this->gradients[$id]['pattern'] = $this->n; - // set shading and pattern for transparency mask - if ($grad['transparency']) { - // luminosity pattern - $idgs = $id + $idt; - $this->_newobj(); - $this->_out($shading_transparency); - $this->gradients[$idgs]['id'] = $this->n; - $this->_newobj(); - $out = '<< /Type /Pattern /PatternType 2'; - $out .= ' /Shading '.$this->gradients[$idgs]['id'].' 0 R'; - $out .= ' >>'; - $out .= "\n".'endobj'; - $this->_out($out); - $this->gradients[$idgs]['pattern'] = $this->n; - // luminosity XObject - $oid = $this->_newobj(); - $this->xobjects['LX'.$oid] = array('n' => $oid); - $filter = ''; - $stream = 'q /a0 gs /Pattern cs /p'.$idgs.' scn 0 0 '.$this->wPt.' '.$this->hPt.' re f Q'; - if ($this->compress) { - $filter = ' /Filter /FlateDecode'; - $stream = gzcompress($stream); - } - $stream = $this->_getrawstream($stream); - $out = '<< /Type /XObject /Subtype /Form /FormType 1'.$filter; - $out .= ' /Length '.strlen($stream); - $rect = sprintf('%F %F', $this->wPt, $this->hPt); - $out .= ' /BBox [0 0 '.$rect.']'; - $out .= ' /Group << /Type /Group /S /Transparency /CS /DeviceGray >>'; - $out .= ' /Resources <<'; - $out .= ' /ExtGState << /a0 << /ca 1 /CA 1 >> >>'; - $out .= ' /Pattern << /p'.$idgs.' '.$this->gradients[$idgs]['pattern'].' 0 R >>'; - $out .= ' >>'; - $out .= ' >> '; - $out .= ' stream'."\n".$stream."\n".'endstream'; - $out .= "\n".'endobj'; - $this->_out($out); - // SMask - $this->_newobj(); - $out = '<< /Type /Mask /S /Luminosity /G '.($this->n - 1).' 0 R >>'."\n".'endobj'; - $this->_out($out); - // ExtGState - $this->_newobj(); - $out = '<< /Type /ExtGState /SMask '.($this->n - 1).' 0 R /AIS false >>'."\n".'endobj'; - $this->_out($out); - $this->extgstates[] = array('n' => $this->n, 'name' => 'TGS'.$id); - } - } - } - - /** - * Draw the sector of a circle. - * It can be used for instance to render pie charts. - * @param float $xc abscissa of the center. - * @param float $yc ordinate of the center. - * @param float $r radius. - * @param float $a start angle (in degrees). - * @param float $b end angle (in degrees). - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param float $cw indicates whether to go clockwise (default: true). - * @param float $o origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). Default: 90. - * @author Maxime Delorme, Nicola Asuni - * @since 3.1.000 (2008-06-09) - * @public - */ - public function PieSector($xc, $yc, $r, $a, $b, $style='FD', $cw=true, $o=90) { - $this->PieSectorXY($xc, $yc, $r, $r, $a, $b, $style, $cw, $o); - } - - /** - * Draw the sector of an ellipse. - * It can be used for instance to render pie charts. - * @param float $xc abscissa of the center. - * @param float $yc ordinate of the center. - * @param float $rx the x-axis radius. - * @param float $ry the y-axis radius. - * @param float $a start angle (in degrees). - * @param float $b end angle (in degrees). - * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. - * @param float $cw indicates whether to go clockwise. - * @param float $o origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). - * @param integer $nc Number of curves used to draw a 90 degrees portion of arc. - * @author Maxime Delorme, Nicola Asuni - * @since 3.1.000 (2008-06-09) - * @public - */ - public function PieSectorXY($xc, $yc, $rx, $ry, $a, $b, $style='FD', $cw=false, $o=0, $nc=2) { - if ($this->state != 2) { - return; - } - if ($this->rtl) { - $xc = ($this->w - $xc); - } - $op = TCPDF_STATIC::getPathPaintOperator($style); - if ($op == 'f') { - $line_style = array(); - } - if ($cw) { - $d = $b; - $b = (360 - $a + $o); - $a = (360 - $d + $o); - } else { - $b += $o; - $a += $o; - } - $this->_outellipticalarc($xc, $yc, $rx, $ry, 0, $a, $b, true, $nc); - $this->_out($op); - } - - /** - * Embed vector-based Adobe Illustrator (AI) or AI-compatible EPS files. - * NOTE: EPS is not yet fully implemented, use the setRasterizeVectorImages() method to enable/disable rasterization of vector images using ImageMagick library. - * Only vector drawing is supported, not text or bitmap. - * Although the script was successfully tested with various AI format versions, best results are probably achieved with files that were exported in the AI3 format (tested with Illustrator CS2, Freehand MX and Photoshop CS2). - * @param string $file Name of the file containing the image or a '@' character followed by the EPS/AI data string. - * @param float|null $x Abscissa of the upper-left corner. - * @param float|null $y Ordinate of the upper-left corner. - * @param float $w Width of the image in the page. If not specified or equal to zero, it is automatically calculated. - * @param float $h Height of the image in the page. If not specified or equal to zero, it is automatically calculated. - * @param mixed $link URL or identifier returned by AddLink(). - * @param boolean $useBoundingBox specifies whether to position the bounding box (true) or the complete canvas (false) at location (x,y). Default value is true. - * @param string $align Indicates the alignment of the pointer next to image insertion relative to image height. The value can be:
            • T: top-right for LTR or top-left for RTL
            • M: middle-right for LTR or middle-left for RTL
            • B: bottom-right for LTR or bottom-left for RTL
            • N: next line
            - * @param string $palign Allows to center or align the image on the current line. Possible values are:
            • L : left align
            • C : center
            • R : right align
            • '' : empty string : left for LTR or right for RTL
            - * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
            • 0: no border (default)
            • 1: frame
            or a string containing some or all of the following characters (in any order):
            • L: left
            • T: top
            • R: right
            • B: bottom
            or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) - * @param boolean $fitonpage if true the image is resized to not exceed page dimensions. - * @param boolean $fixoutvals if true remove values outside the bounding box. - * @author Valentin Schmidt, Nicola Asuni - * @since 3.1.000 (2008-06-09) - * @public - */ - public function ImageEps($file, $x=null, $y=null, $w=0, $h=0, $link='', $useBoundingBox=true, $align='', $palign='', $border=0, $fitonpage=false, $fixoutvals=false) { - if ($this->state != 2) { - return; - } - if ($this->rasterize_vector_images AND ($w > 0) AND ($h > 0)) { - // convert EPS to raster image using GD or ImageMagick libraries - return $this->Image($file, $x, $y, $w, $h, 'EPS', $link, $align, true, 300, $palign, false, false, $border, false, false, $fitonpage); - } - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions($h, $x, $y); - $k = $this->k; - if ($file[0] === '@') { // image from string - $data = substr($file, 1); - } else { // EPS/AI file - $data = $this->getCachedFileContents($file); - } - if ($data === FALSE) { - $this->Error('EPS file not found: '.$file); - } - $regs = array(); - // EPS/AI compatibility check (only checks files created by Adobe Illustrator!) - preg_match("/%%Creator:([^\r\n]+)/", $data, $regs); # find Creator - if (count($regs) > 1) { - $version_str = trim($regs[1]); # e.g. "Adobe Illustrator(R) 8.0" - if (strpos($version_str, 'Adobe Illustrator') !== false) { - $versexp = explode(' ', $version_str); - $version = (float)array_pop($versexp); - if ($version >= 9) { - $this->Error('This version of Adobe Illustrator file is not supported: '.$file); - } - } - } - // strip binary bytes in front of PS-header - $start = strpos($data, '%!PS-Adobe'); - if ($start > 0) { - $data = substr($data, $start); - } - // find BoundingBox params - preg_match("/%%BoundingBox:([^\r\n]+)/", $data, $regs); - if (count($regs) > 1) { - list($x1, $y1, $x2, $y2) = explode(' ', trim($regs[1])); - } else { - $this->Error('No BoundingBox found in EPS/AI file: '.$file); - } - $start = strpos($data, '%%EndSetup'); - if ($start === false) { - $start = strpos($data, '%%EndProlog'); - } - if ($start === false) { - $start = strpos($data, '%%BoundingBox'); - } - $data = substr($data, $start); - $end = strpos($data, '%%PageTrailer'); - if ($end===false) { - $end = strpos($data, 'showpage'); - } - if ($end) { - $data = substr($data, 0, $end); - } - // calculate image width and height on document - if (($w <= 0) AND ($h <= 0)) { - $w = ($x2 - $x1) / $k; - $h = ($y2 - $y1) / $k; - } elseif ($w <= 0) { - $w = ($x2-$x1) / $k * ($h / (($y2 - $y1) / $k)); - } elseif ($h <= 0) { - $h = ($y2 - $y1) / $k * ($w / (($x2 - $x1) / $k)); - } - // fit the image on available space - list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, $fitonpage); - if ($this->rasterize_vector_images) { - // convert EPS to raster image using GD or ImageMagick libraries - return $this->Image($file, $x, $y, $w, $h, 'EPS', $link, $align, true, 300, $palign, false, false, $border, false, false, $fitonpage); - } - // set scaling factors - $scale_x = $w / (($x2 - $x1) / $k); - $scale_y = $h / (($y2 - $y1) / $k); - // set alignment - $this->img_rb_y = $y + $h; - // set alignment - if ($this->rtl) { - if ($palign == 'L') { - $ximg = $this->lMargin; - } elseif ($palign == 'C') { - $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; - } elseif ($palign == 'R') { - $ximg = $this->w - $this->rMargin - $w; - } else { - $ximg = $x - $w; - } - $this->img_rb_x = $ximg; - } else { - if ($palign == 'L') { - $ximg = $this->lMargin; - } elseif ($palign == 'C') { - $ximg = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; - } elseif ($palign == 'R') { - $ximg = $this->w - $this->rMargin - $w; - } else { - $ximg = $x; - } - $this->img_rb_x = $ximg + $w; - } - if ($useBoundingBox) { - $dx = $ximg * $k - $x1; - $dy = $y * $k - $y1; - } else { - $dx = $ximg * $k; - $dy = $y * $k; - } - // save the current graphic state - $this->_out('q'.$this->epsmarker); - // translate - $this->_out(sprintf('%F %F %F %F %F %F cm', 1, 0, 0, 1, $dx, $dy + ($this->hPt - (2 * $y * $k) - ($y2 - $y1)))); - // scale - if (isset($scale_x)) { - $this->_out(sprintf('%F %F %F %F %F %F cm', $scale_x, 0, 0, $scale_y, $x1 * (1 - $scale_x), $y2 * (1 - $scale_y))); - } - // handle pc/unix/mac line endings - $lines = preg_split('/[\r\n]+/si', $data, -1, PREG_SPLIT_NO_EMPTY); - $u=0; - $cnt = count($lines); - for ($i=0; $i < $cnt; ++$i) { - $line = $lines[$i]; - if (($line == '') OR ($line[0] == '%')) { - continue; - } - $len = strlen($line); - // check for spot color names - $color_name = ''; - if (strcasecmp('x', substr(trim($line), -1)) == 0) { - if (preg_match('/\([^\)]*\)/', $line, $matches) > 0) { - // extract spot color name - $color_name = $matches[0]; - // remove color name from string - $line = str_replace(' '.$color_name, '', $line); - // remove pharentesis from color name - $color_name = substr($color_name, 1, -1); - } - } - $chunks = explode(' ', $line); - $cmd = trim(array_pop($chunks)); - // RGB - if (($cmd == 'Xa') OR ($cmd == 'XA')) { - $b = array_pop($chunks); - $g = array_pop($chunks); - $r = array_pop($chunks); - $this->_out(''.$r.' '.$g.' '.$b.' '.($cmd=='Xa'?'rg':'RG')); //substr($line, 0, -2).'rg' -> in EPS (AI8): c m y k r g b rg! - continue; - } - $skip = false; - if ($fixoutvals) { - // check for values outside the bounding box - switch ($cmd) { - case 'm': - case 'l': - case 'L': { - // skip values outside bounding box - foreach ($chunks as $key => $val) { - if ((($key % 2) == 0) AND (($val < $x1) OR ($val > $x2))) { - $skip = true; - } elseif ((($key % 2) != 0) AND (($val < $y1) OR ($val > $y2))) { - $skip = true; - } - } - } - } - } - switch ($cmd) { - case 'm': - case 'l': - case 'v': - case 'y': - case 'c': - case 'k': - case 'K': - case 'g': - case 'G': - case 's': - case 'S': - case 'J': - case 'j': - case 'w': - case 'M': - case 'd': - case 'n': { - if ($skip) { - break; - } - $this->_out($line); - break; - } - case 'x': {// custom fill color - if (empty($color_name)) { - // CMYK color - list($col_c, $col_m, $col_y, $col_k) = $chunks; - $this->_out(''.$col_c.' '.$col_m.' '.$col_y.' '.$col_k.' k'); - } else { - // Spot Color (CMYK + tint) - list($col_c, $col_m, $col_y, $col_k, $col_t) = $chunks; - $this->AddSpotColor($color_name, ($col_c * 100), ($col_m * 100), ($col_y * 100), ($col_k * 100)); - $color_cmd = sprintf('/CS%d cs %F scn', $this->spot_colors[$color_name]['i'], (1 - $col_t)); - $this->_out($color_cmd); - } - break; - } - case 'X': { // custom stroke color - if (empty($color_name)) { - // CMYK color - list($col_c, $col_m, $col_y, $col_k) = $chunks; - $this->_out(''.$col_c.' '.$col_m.' '.$col_y.' '.$col_k.' K'); - } else { - // Spot Color (CMYK + tint) - list($col_c, $col_m, $col_y, $col_k, $col_t) = $chunks; - $this->AddSpotColor($color_name, ($col_c * 100), ($col_m * 100), ($col_y * 100), ($col_k * 100)); - $color_cmd = sprintf('/CS%d CS %F SCN', $this->spot_colors[$color_name]['i'], (1 - $col_t)); - $this->_out($color_cmd); - } - break; - } - case 'Y': - case 'N': - case 'V': - case 'L': - case 'C': { - if ($skip) { - break; - } - $line[($len - 1)] = strtolower($cmd); - $this->_out($line); - break; - } - case 'b': - case 'B': { - $this->_out($cmd . '*'); - break; - } - case 'f': - case 'F': { - if ($u > 0) { - $isU = false; - $max = min(($i + 5), $cnt); - for ($j = ($i + 1); $j < $max; ++$j) { - $isU = ($isU OR (($lines[$j] == 'U') OR ($lines[$j] == '*U'))); - } - if ($isU) { - $this->_out('f*'); - } - } else { - $this->_out('f*'); - } - break; - } - case '*u': { - ++$u; - break; - } - case '*U': { - --$u; - break; - } - } - } - // restore previous graphic state - $this->_out($this->epsmarker.'Q'); - if (!empty($border)) { - $bx = $this->x; - $by = $this->y; - $this->x = $ximg; - if ($this->rtl) { - $this->x += $w; - } - $this->y = $y; - $this->Cell($w, $h, '', $border, 0, '', 0, '', 0, true); - $this->x = $bx; - $this->y = $by; - } - if ($link) { - $this->Link($ximg, $y, $w, $h, $link, 0); - } - // set pointer to align the next text/objects - switch($align) { - case 'T':{ - $this->y = $y; - $this->x = $this->img_rb_x; - break; - } - case 'M':{ - $this->y = $y + round($h/2); - $this->x = $this->img_rb_x; - break; - } - case 'B':{ - $this->y = $this->img_rb_y; - $this->x = $this->img_rb_x; - break; - } - case 'N':{ - $this->setY($this->img_rb_y); - break; - } - default:{ - break; - } - } - $this->endlinex = $this->img_rb_x; - } - - /** - * Set document barcode. - * @param string $bc barcode - * @public - */ - public function setBarcode($bc='') { - $this->barcode = $bc; - } - - /** - * Get current barcode. - * @return string - * @public - * @since 4.0.012 (2008-07-24) - */ - public function getBarcode() { - return $this->barcode; - } - - /** - * Print a Linear Barcode. - * @param string $code code to print - * @param string $type type of barcode (see tcpdf_barcodes_1d.php for supported formats). - * @param float|null $x x position in user units (null = current x position) - * @param float|null $y y position in user units (null = current y position) - * @param float|null $w width in user units (null = remaining page width) - * @param float|null $h height in user units (null = remaining page height) - * @param float|null $xres width of the smallest bar in user units (null = default value = 0.4mm) - * @param array $style array of options:
              - *
            • boolean $style['border'] if true prints a border
            • - *
            • int $style['padding'] padding to leave around the barcode in user units (set to 'auto' for automatic padding)
            • - *
            • int $style['hpadding'] horizontal padding in user units (set to 'auto' for automatic padding)
            • - *
            • int $style['vpadding'] vertical padding in user units (set to 'auto' for automatic padding)
            • - *
            • array $style['fgcolor'] color array for bars and text
            • - *
            • mixed $style['bgcolor'] color array for background (set to false for transparent)
            • - *
            • boolean $style['text'] if true prints text below the barcode
            • - *
            • string $style['label'] override default label
            • - *
            • string $style['font'] font name for text
            • int $style['fontsize'] font size for text
            • - *
            • int $style['stretchtext']: 0 = disabled; 1 = horizontal scaling only if necessary; 2 = forced horizontal scaling; 3 = character spacing only if necessary; 4 = forced character spacing.
            • - *
            • string $style['position'] horizontal position of the containing barcode cell on the page: L = left margin; C = center; R = right margin.
            • - *
            • string $style['align'] horizontal position of the barcode on the containing rectangle: L = left; C = center; R = right.
            • - *
            • string $style['stretch'] if true stretch the barcode to best fit the available width, otherwise uses $xres resolution for a single bar.
            • - *
            • string $style['fitwidth'] if true reduce the width to fit the barcode width + padding. When this option is enabled the 'stretch' option is automatically disabled.
            • - *
            • string $style['cellfitalign'] this option works only when 'fitwidth' is true and 'position' is unset or empty. Set the horizontal position of the containing barcode cell inside the specified rectangle: L = left; C = center; R = right.
            - * @param string $align Indicates the alignment of the pointer next to barcode insertion relative to barcode height. The value can be:
            • T: top-right for LTR or top-left for RTL
            • M: middle-right for LTR or middle-left for RTL
            • B: bottom-right for LTR or bottom-left for RTL
            • N: next line
            - * @author Nicola Asuni - * @since 3.1.000 (2008-06-09) - * @public - */ - public function write1DBarcode($code, $type, $x=null, $y=null, $w=null, $h=null, $xres=null, $style=array(), $align='') { - if (TCPDF_STATIC::empty_string(trim($code))) { - return; - } - require_once(dirname(__FILE__).'/tcpdf_barcodes_1d.php'); - // save current graphic settings - $gvars = $this->getGraphicVars(); - // create new barcode object - $barcodeobj = new TCPDFBarcode($code, $type); - $arrcode = $barcodeobj->getBarcodeArray(); - if (empty($arrcode) OR ($arrcode['maxw'] <= 0)) { - $this->Error('Error in 1D barcode string'); - } - if ($arrcode['maxh'] <= 0) { - $arrcode['maxh'] = 1; - } - // set default values - if (!isset($style['position'])) { - $style['position'] = ''; - } elseif ($style['position'] == 'S') { - // keep this for backward compatibility - $style['position'] = ''; - $style['stretch'] = true; - } - if (!isset($style['fitwidth'])) { - if (!isset($style['stretch'])) { - $style['fitwidth'] = true; - } else { - $style['fitwidth'] = false; - } - } - if ($style['fitwidth']) { - // disable stretch - $style['stretch'] = false; - } - if (!isset($style['stretch'])) { - if (($w === '') OR ($w <= 0)) { - $style['stretch'] = false; - } else { - $style['stretch'] = true; - } - } - if (!isset($style['fgcolor'])) { - $style['fgcolor'] = array(0,0,0); // default black - } - if (!isset($style['bgcolor'])) { - $style['bgcolor'] = false; // default transparent - } - if (!isset($style['border'])) { - $style['border'] = false; - } - $fontsize = 0; - if (!isset($style['text'])) { - $style['text'] = false; - } - if ($style['text'] AND isset($style['font'])) { - if (isset($style['fontsize'])) { - $fontsize = $style['fontsize']; - } - $this->setFont($style['font'], '', $fontsize); - } - if (!isset($style['stretchtext'])) { - $style['stretchtext'] = 4; - } - if (TCPDF_STATIC::empty_string($x)) { - $x = $this->x; - } - if (TCPDF_STATIC::empty_string($y)) { - $y = $this->y; - } - // check page for no-write regions and adapt page margins if necessary - list($x, $y) = $this->checkPageRegions($h, $x, $y); - if (TCPDF_STATIC::empty_string($w) OR ($w <= 0)) { - if ($this->rtl) { - $w = $x - $this->lMargin; - } else { - $w = $this->w - $this->rMargin - $x; - } - } - // padding - if (!isset($style['padding'])) { - $padding = 0; - } elseif ($style['padding'] === 'auto') { - $padding = 10 * ($w / ($arrcode['maxw'] + 20)); - } else { - $padding = floatval($style['padding']); - } - // horizontal padding - if (!isset($style['hpadding'])) { - $hpadding = $padding; - } elseif ($style['hpadding'] === 'auto') { - $hpadding = 10 * ($w / ($arrcode['maxw'] + 20)); - } else { - $hpadding = floatval($style['hpadding']); - } - // vertical padding - if (!isset($style['vpadding'])) { - $vpadding = $padding; - } elseif ($style['vpadding'] === 'auto') { - $vpadding = ($hpadding / 2); - } else { - $vpadding = floatval($style['vpadding']); - } - // calculate xres (single bar width) - $max_xres = ($w - (2 * $hpadding)) / $arrcode['maxw']; - if ($style['stretch']) { - $xres = $max_xres; - } else { - if (TCPDF_STATIC::empty_string($xres)) { - $xres = (0.141 * $this->k); // default bar width = 0.4 mm - } - if ($xres > $max_xres) { - // correct xres to fit on $w - $xres = $max_xres; - } - if ((isset($style['padding']) AND ($style['padding'] === 'auto')) - OR (isset($style['hpadding']) AND ($style['hpadding'] === 'auto'))) { - $hpadding = 10 * $xres; - if (isset($style['vpadding']) AND ($style['vpadding'] === 'auto')) { - $vpadding = ($hpadding / 2); - } - } - } - if ($style['fitwidth']) { - $wold = $w; - $w = (($arrcode['maxw'] * $xres) + (2 * $hpadding)); - if (isset($style['cellfitalign'])) { - switch ($style['cellfitalign']) { - case 'L': { - if ($this->rtl) { - $x -= ($wold - $w); - } - break; - } - case 'R': { - if (!$this->rtl) { - $x += ($wold - $w); - } - break; - } - case 'C': { - if ($this->rtl) { - $x -= (($wold - $w) / 2); - } else { - $x += (($wold - $w) / 2); - } - break; - } - default : { - break; - } - } - } - } - $text_height = $this->getCellHeight($fontsize / $this->k); - // height - if (TCPDF_STATIC::empty_string($h) OR ($h <= 0)) { - // set default height - $h = (($arrcode['maxw'] * $xres) / 3) + (2 * $vpadding) + $text_height; - } - $barh = $h - $text_height - (2 * $vpadding); - if ($barh <=0) { - // try to reduce font or padding to fit barcode on available height - if ($text_height > $h) { - $fontsize = (($h * $this->k) / (4 * $this->cell_height_ratio)); - $text_height = $this->getCellHeight($fontsize / $this->k); - $this->setFont($style['font'], '', $fontsize); - } - if ($vpadding > 0) { - $vpadding = (($h - $text_height) / 4); - } - $barh = $h - $text_height - (2 * $vpadding); - } - // fit the barcode on available space - list($w, $h, $x, $y) = $this->fitBlock($w, $h, $x, $y, false); - // set alignment - $this->img_rb_y = $y + $h; - // set alignment - if ($this->rtl) { - if ($style['position'] == 'L') { - $xpos = $this->lMargin; - } elseif ($style['position'] == 'C') { - $xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; - } elseif ($style['position'] == 'R') { - $xpos = $this->w - $this->rMargin - $w; - } else { - $xpos = $x - $w; - } - $this->img_rb_x = $xpos; - } else { - if ($style['position'] == 'L') { - $xpos = $this->lMargin; - } elseif ($style['position'] == 'C') { - $xpos = ($this->w + $this->lMargin - $this->rMargin - $w) / 2; - } elseif ($style['position'] == 'R') { - $xpos = $this->w - $this->rMargin - $w; - } else { - $xpos = $x; - } - $this->img_rb_x = $xpos + $w; - } - $xpos_rect = $xpos; - if (!isset($style['align'])) { - $style['align'] = 'C'; - } - switch ($style['align']) { - case 'L': { - $xpos = $xpos_rect + $hpadding; - break; - } - case 'R': { - $xpos = $xpos_rect + ($w - ($arrcode['maxw'] * $xres)) - $hpadding; - break; - } - case 'C': - default : { - $xpos = $xpos_rect + (($w - ($arrcode['maxw'] * $xres)) / 2); - break; - } - } - $xpos_text = $xpos; - // barcode is always printed in LTR direction - $tempRTL = $this->rtl; - $this->rtl = false; - // print background color - if ($style['bgcolor']) { - $this->Rect($xpos_rect, $y, $w, $h, $style['border'] ? 'DF' : 'F', '', $style['bgcolor']); - } elseif ($style['border']) { - $this->Rect($xpos_rect, $y, $w, $h, 'D'); - } - // set foreground color - $this->setDrawColorArray($style['fgcolor']); - $this->setTextColorArray($style['fgcolor']); - // print bars - foreach ($arrcode['bcode'] as $k => $v) { - $bw = ($v['w'] * $xres); - if ($v['t']) { - // draw a vertical bar - $ypos = $y + $vpadding + ($v['p'] * $barh / $arrcode['maxh']); - $this->Rect($xpos, $ypos, $bw, ($v['h'] * $barh / $arrcode['maxh']), 'F', array(), $style['fgcolor']); - } - $xpos += $bw; - } - // print text - if ($style['text']) { - if (isset($style['label']) AND !TCPDF_STATIC::empty_string($style['label'])) { - $label = $style['label']; - } else { - $label = $code; - } - $txtwidth = ($arrcode['maxw'] * $xres); - if ($this->GetStringWidth($label) > $txtwidth) { - $style['stretchtext'] = 2; - } - // print text - $this->x = $xpos_text; - $this->y = $y + $vpadding + $barh; - $cellpadding = $this->cell_padding; - $this->setCellPadding(0); - $this->Cell($txtwidth, 0, $label, 0, 0, 'C', false, '', $style['stretchtext'], false, 'T', 'T'); - $this->cell_padding = $cellpadding; - } - // restore original direction - $this->rtl = $tempRTL; - // restore previous settings - $this->setGraphicVars($gvars); - // set pointer to align the next text/objects - switch($align) { - case 'T':{ - $this->y = $y; - $this->x = $this->img_rb_x; - break; - } - case 'M':{ - $this->y = $y + round($h / 2); - $this->x = $this->img_rb_x; - break; - } - case 'B':{ - $this->y = $this->img_rb_y; - $this->x = $this->img_rb_x; - break; - } - case 'N':{ - $this->setY($this->img_rb_y); - break; - } - default:{ - break; - } - } - $this->endlinex = $this->img_rb_x; - } - - /** - * Print 2D Barcode. - * @param string $code code to print - * @param string $type type of barcode (see tcpdf_barcodes_2d.php for supported formats). - * @param float|null $x x position in user units - * @param float|null $y y position in user units - * @param float|null $w width in user units - * @param float|null $h height in user units - * @param array $style array of options: - * {% endif %} - * - * @internal - */ -final class IfTokenParser extends AbstractTokenParser -{ - public function parse(Token $token): Node - { - $lineno = $token->getLine(); - $expr = $this->parser->getExpressionParser()->parseExpression(); - $stream = $this->parser->getStream(); - $stream->expect(/* Token::BLOCK_END_TYPE */ 3); - $body = $this->parser->subparse([$this, 'decideIfFork']); - $tests = [$expr, $body]; - $else = null; - - $end = false; - while (!$end) { - switch ($stream->next()->getValue()) { - case 'else': - $stream->expect(/* Token::BLOCK_END_TYPE */ 3); - $else = $this->parser->subparse([$this, 'decideIfEnd']); - break; - - case 'elseif': - $expr = $this->parser->getExpressionParser()->parseExpression(); - $stream->expect(/* Token::BLOCK_END_TYPE */ 3); - $body = $this->parser->subparse([$this, 'decideIfFork']); - $tests[] = $expr; - $tests[] = $body; - break; - - case 'endif': - $end = true; - break; - - default: - throw new SyntaxError(sprintf('Unexpected end of template. Twig was looking for the following tags "else", "elseif", or "endif" to close the "if" block started at line %d).', $lineno), $stream->getCurrent()->getLine(), $stream->getSourceContext()); - } - } - - $stream->expect(/* Token::BLOCK_END_TYPE */ 3); - - return new IfNode(new Node($tests), $else, $lineno, $this->getTag()); - } - - public function decideIfFork(Token $token): bool - { - return $token->test(['elseif', 'else', 'endif']); - } - - public function decideIfEnd(Token $token): bool - { - return $token->test(['endif']); - } - - public function getTag(): string - { - return 'if'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php b/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php deleted file mode 100644 index 28beb8a..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/IncludeTokenParser.php +++ /dev/null @@ -1,69 +0,0 @@ -parser->getExpressionParser()->parseExpression(); - - list($variables, $only, $ignoreMissing) = $this->parseArguments(); - - return new IncludeNode($expr, $variables, $only, $ignoreMissing, $token->getLine(), $this->getTag()); - } - - protected function parseArguments() - { - $stream = $this->parser->getStream(); - - $ignoreMissing = false; - if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'ignore')) { - $stream->expect(/* Token::NAME_TYPE */ 5, 'missing'); - - $ignoreMissing = true; - } - - $variables = null; - if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'with')) { - $variables = $this->parser->getExpressionParser()->parseExpression(); - } - - $only = false; - if ($stream->nextIf(/* Token::NAME_TYPE */ 5, 'only')) { - $only = true; - } - - $stream->expect(/* Token::BLOCK_END_TYPE */ 3); - - return [$variables, $only, $ignoreMissing]; - } - - public function getTag(): string - { - return 'include'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/MacroTokenParser.php b/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/MacroTokenParser.php deleted file mode 100644 index f584927..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TokenParser/MacroTokenParser.php +++ /dev/null @@ -1,66 +0,0 @@ - - * {% endmacro %} - * - * @internal - */ -final class MacroTokenParser extends AbstractTokenParser -{ - public function parse(Token $token): Node - { - $lineno = $token->getLine(); - $stream = $this->parser->getStream(); - $name = $stream->expect(/* Token::NAME_TYPE */ 5)->getValue(); - - $arguments = $this->parser->getExpressionParser()->parseArguments(true, true); - - $stream->expect(/* Token::BLOCK_END_TYPE */ 3); - $this->parser->pushLocalScope(); - $body = $this->parser->subparse([$this, 'decideBlockEnd'], true); - if ($token = $stream->nextIf(/* Token::NAME_TYPE */ 5)) { - $value = $token->getValue(); - - if ($value != $name) { - throw new SyntaxError(sprintf('Expected endmacro for macro "%s" (but "%s" given).', $name, $value), $stream->getCurrent()->getLine(), $stream->getSourceContext()); - } - } - $this->parser->popLocalScope(); - $stream->expect(/* Token::BLOCK_END_TYPE */ 3); - - $this->parser->setMacro($name, new MacroNode($name, new BodyNode([$body]), $arguments, $lineno, $this->getTag())); - - return new Node(); - } - - public function decideBlockEnd(Token $token): bool - { - return $token->test('endmacro'); - } - - public function getTag(): string - { - return 'macro'; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TwigFunction.php b/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TwigFunction.php deleted file mode 100644 index 494d45b..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/twig/twig/src/TwigFunction.php +++ /dev/null @@ -1,122 +0,0 @@ - - * - * @see https://twig.symfony.com/doc/templates.html#functions - */ -final class TwigFunction -{ - private $name; - private $callable; - private $options; - private $arguments = []; - - /** - * @param callable|null $callable A callable implementing the function. If null, you need to overwrite the "node_class" option to customize compilation. - */ - public function __construct(string $name, $callable = null, array $options = []) - { - $this->name = $name; - $this->callable = $callable; - $this->options = array_merge([ - 'needs_environment' => false, - 'needs_context' => false, - 'is_variadic' => false, - 'is_safe' => null, - 'is_safe_callback' => null, - 'node_class' => FunctionExpression::class, - 'deprecated' => false, - 'alternative' => null, - ], $options); - } - - public function getName(): string - { - return $this->name; - } - - /** - * Returns the callable to execute for this function. - * - * @return callable|null - */ - public function getCallable() - { - return $this->callable; - } - - public function getNodeClass(): string - { - return $this->options['node_class']; - } - - public function setArguments(array $arguments): void - { - $this->arguments = $arguments; - } - - public function getArguments(): array - { - return $this->arguments; - } - - public function needsEnvironment(): bool - { - return $this->options['needs_environment']; - } - - public function needsContext(): bool - { - return $this->options['needs_context']; - } - - public function getSafe(Node $functionArgs): ?array - { - if (null !== $this->options['is_safe']) { - return $this->options['is_safe']; - } - - if (null !== $this->options['is_safe_callback']) { - return $this->options['is_safe_callback']($functionArgs); - } - - return []; - } - - public function isVariadic(): bool - { - return (bool) $this->options['is_variadic']; - } - - public function isDeprecated(): bool - { - return (bool) $this->options['deprecated']; - } - - public function getDeprecatedVersion(): string - { - return \is_bool($this->options['deprecated']) ? '' : $this->options['deprecated']; - } - - public function getAlternative(): ?string - { - return $this->options['alternative']; - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Assert.php b/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Assert.php deleted file mode 100644 index e0fbabc..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Assert.php +++ /dev/null @@ -1,2066 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Webmozart\Assert; - -use ArrayAccess; -use BadMethodCallException; -use Closure; -use Countable; -use DateTime; -use DateTimeImmutable; -use Exception; -use ResourceBundle; -use SimpleXMLElement; -use Throwable; -use Traversable; - -/** - * Efficient assertions to validate the input/output of your methods. - * - * @since 1.0 - * - * @author Bernhard Schussek - */ -class Assert -{ - use Mixin; - - /** - * @psalm-pure - * @psalm-assert string $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function string($value, $message = '') - { - if (!\is_string($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a string. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert non-empty-string $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function stringNotEmpty($value, $message = '') - { - static::string($value, $message); - static::notEq($value, '', $message); - } - - /** - * @psalm-pure - * @psalm-assert int $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function integer($value, $message = '') - { - if (!\is_int($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an integer. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert numeric $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function integerish($value, $message = '') - { - if (!\is_numeric($value) || $value != (int) $value) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an integerish value. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert positive-int $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function positiveInteger($value, $message = '') - { - if (!(\is_int($value) && $value > 0)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a positive integer. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert float $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function float($value, $message = '') - { - if (!\is_float($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a float. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert numeric $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function numeric($value, $message = '') - { - if (!\is_numeric($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a numeric. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert positive-int|0 $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function natural($value, $message = '') - { - if (!\is_int($value) || $value < 0) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a non-negative integer. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert bool $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function boolean($value, $message = '') - { - if (!\is_bool($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a boolean. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert scalar $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function scalar($value, $message = '') - { - if (!\is_scalar($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a scalar. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert object $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function object($value, $message = '') - { - if (!\is_object($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an object. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert resource $value - * - * @param mixed $value - * @param string|null $type type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function resource($value, $type = null, $message = '') - { - if (!\is_resource($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a resource. Got: %s', - static::typeToString($value) - )); - } - - if ($type && $type !== \get_resource_type($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a resource of type %2$s. Got: %s', - static::typeToString($value), - $type - )); - } - } - - /** - * @psalm-pure - * @psalm-assert callable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isCallable($value, $message = '') - { - if (!\is_callable($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a callable. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert array $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isArray($value, $message = '') - { - if (!\is_array($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an array. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @deprecated use "isIterable" or "isInstanceOf" instead - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isTraversable($value, $message = '') - { - @\trigger_error( - \sprintf( - 'The "%s" assertion is deprecated. You should stop using it, as it will soon be removed in 2.0 version. Use "isIterable" or "isInstanceOf" instead.', - __METHOD__ - ), - \E_USER_DEPRECATED - ); - - if (!\is_array($value) && !($value instanceof Traversable)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a traversable. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert array|ArrayAccess $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isArrayAccessible($value, $message = '') - { - if (!\is_array($value) && !($value instanceof ArrayAccess)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an array accessible. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert countable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isCountable($value, $message = '') - { - if ( - !\is_array($value) - && !($value instanceof Countable) - && !($value instanceof ResourceBundle) - && !($value instanceof SimpleXMLElement) - ) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a countable. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isIterable($value, $message = '') - { - if (!\is_array($value) && !($value instanceof Traversable)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an iterable. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * @psalm-assert ExpectedType $value - * - * @param mixed $value - * @param string|object $class - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isInstanceOf($value, $class, $message = '') - { - if (!($value instanceof $class)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an instance of %2$s. Got: %s', - static::typeToString($value), - $class - )); - } - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * @psalm-assert !ExpectedType $value - * - * @param mixed $value - * @param string|object $class - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notInstanceOf($value, $class, $message = '') - { - if ($value instanceof $class) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an instance other than %2$s. Got: %s', - static::typeToString($value), - $class - )); - } - } - - /** - * @psalm-pure - * @psalm-param array $classes - * - * @param mixed $value - * @param array $classes - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isInstanceOfAny($value, array $classes, $message = '') - { - foreach ($classes as $class) { - if ($value instanceof $class) { - return; - } - } - - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an instance of any of %2$s. Got: %s', - static::typeToString($value), - \implode(', ', \array_map(array('static', 'valueToString'), $classes)) - )); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * @psalm-assert ExpectedType|class-string $value - * - * @param object|string $value - * @param string $class - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isAOf($value, $class, $message = '') - { - static::string($class, 'Expected class as a string. Got: %s'); - - if (!\is_a($value, $class, \is_string($value))) { - static::reportInvalidArgument(sprintf( - $message ?: 'Expected an instance of this class or to this class among his parents %2$s. Got: %s', - static::typeToString($value), - $class - )); - } - } - - /** - * @psalm-pure - * @psalm-template UnexpectedType of object - * @psalm-param class-string $class - * @psalm-assert !UnexpectedType $value - * @psalm-assert !class-string $value - * - * @param object|string $value - * @param string $class - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isNotA($value, $class, $message = '') - { - static::string($class, 'Expected class as a string. Got: %s'); - - if (\is_a($value, $class, \is_string($value))) { - static::reportInvalidArgument(sprintf( - $message ?: 'Expected an instance of this class or to this class among his parents other than %2$s. Got: %s', - static::typeToString($value), - $class - )); - } - } - - /** - * @psalm-pure - * @psalm-param array $classes - * - * @param object|string $value - * @param string[] $classes - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isAnyOf($value, array $classes, $message = '') - { - foreach ($classes as $class) { - static::string($class, 'Expected class as a string. Got: %s'); - - if (\is_a($value, $class, \is_string($value))) { - return; - } - } - - static::reportInvalidArgument(sprintf( - $message ?: 'Expected an any of instance of this class or to this class among his parents other than %2$s. Got: %s', - static::typeToString($value), - \implode(', ', \array_map(array('static', 'valueToString'), $classes)) - )); - } - - /** - * @psalm-pure - * @psalm-assert empty $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isEmpty($value, $message = '') - { - if (!empty($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an empty value. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert !empty $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notEmpty($value, $message = '') - { - if (empty($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a non-empty value. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function null($value, $message = '') - { - if (null !== $value) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected null. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert !null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notNull($value, $message = '') - { - if (null === $value) { - static::reportInvalidArgument( - $message ?: 'Expected a value other than null.' - ); - } - } - - /** - * @psalm-pure - * @psalm-assert true $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function true($value, $message = '') - { - if (true !== $value) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to be true. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert false $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function false($value, $message = '') - { - if (false !== $value) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to be false. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert !false $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notFalse($value, $message = '') - { - if (false === $value) { - static::reportInvalidArgument( - $message ?: 'Expected a value other than false.' - ); - } - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function ip($value, $message = '') - { - if (false === \filter_var($value, \FILTER_VALIDATE_IP)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to be an IP. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function ipv4($value, $message = '') - { - if (false === \filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to be an IPv4. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function ipv6($value, $message = '') - { - if (false === \filter_var($value, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV6)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to be an IPv6. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function email($value, $message = '') - { - if (false === \filter_var($value, FILTER_VALIDATE_EMAIL)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to be a valid e-mail address. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * Does non strict comparisons on the items, so ['3', 3] will not pass the assertion. - * - * @param array $values - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function uniqueValues(array $values, $message = '') - { - $allValues = \count($values); - $uniqueValues = \count(\array_unique($values)); - - if ($allValues !== $uniqueValues) { - $difference = $allValues - $uniqueValues; - - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an array of unique values, but %s of them %s duplicated', - $difference, - (1 === $difference ? 'is' : 'are') - )); - } - } - - /** - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function eq($value, $expect, $message = '') - { - if ($expect != $value) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value equal to %2$s. Got: %s', - static::valueToString($value), - static::valueToString($expect) - )); - } - } - - /** - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notEq($value, $expect, $message = '') - { - if ($expect == $value) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a different value than %s.', - static::valueToString($expect) - )); - } - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function same($value, $expect, $message = '') - { - if ($expect !== $value) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value identical to %2$s. Got: %s', - static::valueToString($value), - static::valueToString($expect) - )); - } - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notSame($value, $expect, $message = '') - { - if ($expect === $value) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value not identical to %s.', - static::valueToString($expect) - )); - } - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function greaterThan($value, $limit, $message = '') - { - if ($value <= $limit) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value greater than %2$s. Got: %s', - static::valueToString($value), - static::valueToString($limit) - )); - } - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function greaterThanEq($value, $limit, $message = '') - { - if ($value < $limit) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value greater than or equal to %2$s. Got: %s', - static::valueToString($value), - static::valueToString($limit) - )); - } - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function lessThan($value, $limit, $message = '') - { - if ($value >= $limit) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value less than %2$s. Got: %s', - static::valueToString($value), - static::valueToString($limit) - )); - } - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function lessThanEq($value, $limit, $message = '') - { - if ($value > $limit) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value less than or equal to %2$s. Got: %s', - static::valueToString($value), - static::valueToString($limit) - )); - } - } - - /** - * Inclusive range, so Assert::(3, 3, 5) passes. - * - * @psalm-pure - * - * @param mixed $value - * @param mixed $min - * @param mixed $max - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function range($value, $min, $max, $message = '') - { - if ($value < $min || $value > $max) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value between %2$s and %3$s. Got: %s', - static::valueToString($value), - static::valueToString($min), - static::valueToString($max) - )); - } - } - - /** - * A more human-readable alias of Assert::inArray(). - * - * @psalm-pure - * - * @param mixed $value - * @param array $values - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function oneOf($value, array $values, $message = '') - { - static::inArray($value, $values, $message); - } - - /** - * Does strict comparison, so Assert::inArray(3, ['3']) does not pass the assertion. - * - * @psalm-pure - * - * @param mixed $value - * @param array $values - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function inArray($value, array $values, $message = '') - { - if (!\in_array($value, $values, true)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected one of: %2$s. Got: %s', - static::valueToString($value), - \implode(', ', \array_map(array('static', 'valueToString'), $values)) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $subString - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function contains($value, $subString, $message = '') - { - if (false === \strpos($value, $subString)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain %2$s. Got: %s', - static::valueToString($value), - static::valueToString($subString) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $subString - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notContains($value, $subString, $message = '') - { - if (false !== \strpos($value, $subString)) { - static::reportInvalidArgument(\sprintf( - $message ?: '%2$s was not expected to be contained in a value. Got: %s', - static::valueToString($value), - static::valueToString($subString) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notWhitespaceOnly($value, $message = '') - { - if (\preg_match('/^\s*$/', $value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a non-whitespace string. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $prefix - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function startsWith($value, $prefix, $message = '') - { - if (0 !== \strpos($value, $prefix)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to start with %2$s. Got: %s', - static::valueToString($value), - static::valueToString($prefix) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $prefix - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notStartsWith($value, $prefix, $message = '') - { - if (0 === \strpos($value, $prefix)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value not to start with %2$s. Got: %s', - static::valueToString($value), - static::valueToString($prefix) - )); - } - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function startsWithLetter($value, $message = '') - { - static::string($value); - - $valid = isset($value[0]); - - if ($valid) { - $locale = \setlocale(LC_CTYPE, 0); - \setlocale(LC_CTYPE, 'C'); - $valid = \ctype_alpha($value[0]); - \setlocale(LC_CTYPE, $locale); - } - - if (!$valid) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to start with a letter. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $suffix - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function endsWith($value, $suffix, $message = '') - { - if ($suffix !== \substr($value, -\strlen($suffix))) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to end with %2$s. Got: %s', - static::valueToString($value), - static::valueToString($suffix) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $suffix - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notEndsWith($value, $suffix, $message = '') - { - if ($suffix === \substr($value, -\strlen($suffix))) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value not to end with %2$s. Got: %s', - static::valueToString($value), - static::valueToString($suffix) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $pattern - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function regex($value, $pattern, $message = '') - { - if (!\preg_match($pattern, $value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'The value %s does not match the expected pattern.', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $pattern - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function notRegex($value, $pattern, $message = '') - { - if (\preg_match($pattern, $value, $matches, PREG_OFFSET_CAPTURE)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'The value %s matches the pattern %s (at offset %d).', - static::valueToString($value), - static::valueToString($pattern), - $matches[0][1] - )); - } - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function unicodeLetters($value, $message = '') - { - static::string($value); - - if (!\preg_match('/^\p{L}+$/u', $value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain only Unicode letters. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function alpha($value, $message = '') - { - static::string($value); - - $locale = \setlocale(LC_CTYPE, 0); - \setlocale(LC_CTYPE, 'C'); - $valid = !\ctype_alpha($value); - \setlocale(LC_CTYPE, $locale); - - if ($valid) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain only letters. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function digits($value, $message = '') - { - $locale = \setlocale(LC_CTYPE, 0); - \setlocale(LC_CTYPE, 'C'); - $valid = !\ctype_digit($value); - \setlocale(LC_CTYPE, $locale); - - if ($valid) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain digits only. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function alnum($value, $message = '') - { - $locale = \setlocale(LC_CTYPE, 0); - \setlocale(LC_CTYPE, 'C'); - $valid = !\ctype_alnum($value); - \setlocale(LC_CTYPE, $locale); - - if ($valid) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain letters and digits only. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert lowercase-string $value - * - * @param string $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function lower($value, $message = '') - { - $locale = \setlocale(LC_CTYPE, 0); - \setlocale(LC_CTYPE, 'C'); - $valid = !\ctype_lower($value); - \setlocale(LC_CTYPE, $locale); - - if ($valid) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain lowercase characters only. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-assert !lowercase-string $value - * - * @param string $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function upper($value, $message = '') - { - $locale = \setlocale(LC_CTYPE, 0); - \setlocale(LC_CTYPE, 'C'); - $valid = !\ctype_upper($value); - \setlocale(LC_CTYPE, $locale); - - if ($valid) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain uppercase characters only. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * - * @param string $value - * @param int $length - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function length($value, $length, $message = '') - { - if ($length !== static::strlen($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain %2$s characters. Got: %s', - static::valueToString($value), - $length - )); - } - } - - /** - * Inclusive min. - * - * @psalm-pure - * - * @param string $value - * @param int|float $min - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function minLength($value, $min, $message = '') - { - if (static::strlen($value) < $min) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain at least %2$s characters. Got: %s', - static::valueToString($value), - $min - )); - } - } - - /** - * Inclusive max. - * - * @psalm-pure - * - * @param string $value - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function maxLength($value, $max, $message = '') - { - if (static::strlen($value) > $max) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain at most %2$s characters. Got: %s', - static::valueToString($value), - $max - )); - } - } - - /** - * Inclusive , so Assert::lengthBetween('asd', 3, 5); passes the assertion. - * - * @psalm-pure - * - * @param string $value - * @param int|float $min - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function lengthBetween($value, $min, $max, $message = '') - { - $length = static::strlen($value); - - if ($length < $min || $length > $max) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a value to contain between %2$s and %3$s characters. Got: %s', - static::valueToString($value), - $min, - $max - )); - } - } - - /** - * Will also pass if $value is a directory, use Assert::file() instead if you need to be sure it is a file. - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function fileExists($value, $message = '') - { - static::string($value); - - if (!\file_exists($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'The file %s does not exist.', - static::valueToString($value) - )); - } - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function file($value, $message = '') - { - static::fileExists($value, $message); - - if (!\is_file($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'The path %s is not a file.', - static::valueToString($value) - )); - } - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function directory($value, $message = '') - { - static::fileExists($value, $message); - - if (!\is_dir($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'The path %s is no directory.', - static::valueToString($value) - )); - } - } - - /** - * @param string $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function readable($value, $message = '') - { - if (!\is_readable($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'The path %s is not readable.', - static::valueToString($value) - )); - } - } - - /** - * @param string $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function writable($value, $message = '') - { - if (!\is_writable($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'The path %s is not writable.', - static::valueToString($value) - )); - } - } - - /** - * @psalm-assert class-string $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function classExists($value, $message = '') - { - if (!\class_exists($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an existing class name. Got: %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * @psalm-assert class-string|ExpectedType $value - * - * @param mixed $value - * @param string|object $class - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function subclassOf($value, $class, $message = '') - { - if (!\is_subclass_of($value, $class)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected a sub-class of %2$s. Got: %s', - static::valueToString($value), - static::valueToString($class) - )); - } - } - - /** - * @psalm-assert class-string $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function interfaceExists($value, $message = '') - { - if (!\interface_exists($value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an existing interface name. got %s', - static::valueToString($value) - )); - } - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $interface - * @psalm-assert class-string $value - * - * @param mixed $value - * @param mixed $interface - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function implementsInterface($value, $interface, $message = '') - { - if (!\in_array($interface, \class_implements($value))) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an implementation of %2$s. Got: %s', - static::valueToString($value), - static::valueToString($interface) - )); - } - } - - /** - * @psalm-pure - * @psalm-param class-string|object $classOrObject - * - * @param string|object $classOrObject - * @param mixed $property - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function propertyExists($classOrObject, $property, $message = '') - { - if (!\property_exists($classOrObject, $property)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected the property %s to exist.', - static::valueToString($property) - )); - } - } - - /** - * @psalm-pure - * @psalm-param class-string|object $classOrObject - * - * @param string|object $classOrObject - * @param mixed $property - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function propertyNotExists($classOrObject, $property, $message = '') - { - if (\property_exists($classOrObject, $property)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected the property %s to not exist.', - static::valueToString($property) - )); - } - } - - /** - * @psalm-pure - * @psalm-param class-string|object $classOrObject - * - * @param string|object $classOrObject - * @param mixed $method - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function methodExists($classOrObject, $method, $message = '') - { - if (!(\is_string($classOrObject) || \is_object($classOrObject)) || !\method_exists($classOrObject, $method)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected the method %s to exist.', - static::valueToString($method) - )); - } - } - - /** - * @psalm-pure - * @psalm-param class-string|object $classOrObject - * - * @param string|object $classOrObject - * @param mixed $method - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function methodNotExists($classOrObject, $method, $message = '') - { - if ((\is_string($classOrObject) || \is_object($classOrObject)) && \method_exists($classOrObject, $method)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected the method %s to not exist.', - static::valueToString($method) - )); - } - } - - /** - * @psalm-pure - * - * @param array $array - * @param string|int $key - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function keyExists($array, $key, $message = '') - { - if (!(isset($array[$key]) || \array_key_exists($key, $array))) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected the key %s to exist.', - static::valueToString($key) - )); - } - } - - /** - * @psalm-pure - * - * @param array $array - * @param string|int $key - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function keyNotExists($array, $key, $message = '') - { - if (isset($array[$key]) || \array_key_exists($key, $array)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected the key %s to not exist.', - static::valueToString($key) - )); - } - } - - /** - * Checks if a value is a valid array key (int or string). - * - * @psalm-pure - * @psalm-assert array-key $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function validArrayKey($value, $message = '') - { - if (!(\is_int($value) || \is_string($value))) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected string or integer. Got: %s', - static::typeToString($value) - )); - } - } - - /** - * Does not check if $array is countable, this can generate a warning on php versions after 7.2. - * - * @param Countable|array $array - * @param int $number - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function count($array, $number, $message = '') - { - static::eq( - \count($array), - $number, - \sprintf( - $message ?: 'Expected an array to contain %d elements. Got: %d.', - $number, - \count($array) - ) - ); - } - - /** - * Does not check if $array is countable, this can generate a warning on php versions after 7.2. - * - * @param Countable|array $array - * @param int|float $min - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function minCount($array, $min, $message = '') - { - if (\count($array) < $min) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an array to contain at least %2$d elements. Got: %d', - \count($array), - $min - )); - } - } - - /** - * Does not check if $array is countable, this can generate a warning on php versions after 7.2. - * - * @param Countable|array $array - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function maxCount($array, $max, $message = '') - { - if (\count($array) > $max) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an array to contain at most %2$d elements. Got: %d', - \count($array), - $max - )); - } - } - - /** - * Does not check if $array is countable, this can generate a warning on php versions after 7.2. - * - * @param Countable|array $array - * @param int|float $min - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function countBetween($array, $min, $max, $message = '') - { - $count = \count($array); - - if ($count < $min || $count > $max) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Expected an array to contain between %2$d and %3$d elements. Got: %d', - $count, - $min, - $max - )); - } - } - - /** - * @psalm-pure - * @psalm-assert list $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isList($array, $message = '') - { - if (!\is_array($array) || $array !== \array_values($array)) { - static::reportInvalidArgument( - $message ?: 'Expected list - non-associative array.' - ); - } - } - - /** - * @psalm-pure - * @psalm-assert non-empty-list $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isNonEmptyList($array, $message = '') - { - static::isList($array, $message); - static::notEmpty($array, $message); - } - - /** - * @psalm-pure - * @psalm-template T - * @psalm-param mixed|array $array - * @psalm-assert array $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isMap($array, $message = '') - { - if ( - !\is_array($array) || - \array_keys($array) !== \array_filter(\array_keys($array), '\is_string') - ) { - static::reportInvalidArgument( - $message ?: 'Expected map - associative array with string keys.' - ); - } - } - - /** - * @psalm-pure - * @psalm-template T - * @psalm-param mixed|array $array - * @psalm-assert array $array - * @psalm-assert !empty $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function isNonEmptyMap($array, $message = '') - { - static::isMap($array, $message); - static::notEmpty($array, $message); - } - - /** - * @psalm-pure - * - * @param string $value - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function uuid($value, $message = '') - { - $value = \str_replace(array('urn:', 'uuid:', '{', '}'), '', $value); - - // The nil UUID is special form of UUID that is specified to have all - // 128 bits set to zero. - if ('00000000-0000-0000-0000-000000000000' === $value) { - return; - } - - if (!\preg_match('/^[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}$/', $value)) { - static::reportInvalidArgument(\sprintf( - $message ?: 'Value %s is not a valid UUID.', - static::valueToString($value) - )); - } - } - - /** - * @psalm-param class-string $class - * - * @param Closure $expression - * @param string $class - * @param string $message - * - * @throws InvalidArgumentException - */ - public static function throws(Closure $expression, $class = 'Exception', $message = '') - { - static::string($class); - - $actual = 'none'; - - try { - $expression(); - } catch (Exception $e) { - $actual = \get_class($e); - if ($e instanceof $class) { - return; - } - } catch (Throwable $e) { - $actual = \get_class($e); - if ($e instanceof $class) { - return; - } - } - - static::reportInvalidArgument($message ?: \sprintf( - 'Expected to throw "%s", got "%s"', - $class, - $actual - )); - } - - /** - * @throws BadMethodCallException - */ - public static function __callStatic($name, $arguments) - { - if ('nullOr' === \substr($name, 0, 6)) { - if (null !== $arguments[0]) { - $method = \lcfirst(\substr($name, 6)); - \call_user_func_array(array('static', $method), $arguments); - } - - return; - } - - if ('all' === \substr($name, 0, 3)) { - static::isIterable($arguments[0]); - - $method = \lcfirst(\substr($name, 3)); - $args = $arguments; - - foreach ($arguments[0] as $entry) { - $args[0] = $entry; - - \call_user_func_array(array('static', $method), $args); - } - - return; - } - - throw new BadMethodCallException('No such method: '.$name); - } - - /** - * @param mixed $value - * - * @return string - */ - protected static function valueToString($value) - { - if (null === $value) { - return 'null'; - } - - if (true === $value) { - return 'true'; - } - - if (false === $value) { - return 'false'; - } - - if (\is_array($value)) { - return 'array'; - } - - if (\is_object($value)) { - if (\method_exists($value, '__toString')) { - return \get_class($value).': '.self::valueToString($value->__toString()); - } - - if ($value instanceof DateTime || $value instanceof DateTimeImmutable) { - return \get_class($value).': '.self::valueToString($value->format('c')); - } - - return \get_class($value); - } - - if (\is_resource($value)) { - return 'resource'; - } - - if (\is_string($value)) { - return '"'.$value.'"'; - } - - return (string) $value; - } - - /** - * @param mixed $value - * - * @return string - */ - protected static function typeToString($value) - { - return \is_object($value) ? \get_class($value) : \gettype($value); - } - - protected static function strlen($value) - { - if (!\function_exists('mb_detect_encoding')) { - return \strlen($value); - } - - if (false === $encoding = \mb_detect_encoding($value)) { - return \strlen($value); - } - - return \mb_strlen($value, $encoding); - } - - /** - * @param string $message - * - * @throws InvalidArgumentException - * - * @psalm-pure this method is not supposed to perform side-effects - */ - protected static function reportInvalidArgument($message) - { - throw new InvalidArgumentException($message); - } - - private function __construct() - { - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/InvalidArgumentException.php b/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/InvalidArgumentException.php deleted file mode 100644 index 9d95a58..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/InvalidArgumentException.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Webmozart\Assert; - -class InvalidArgumentException extends \InvalidArgumentException -{ -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Mixin.php b/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Mixin.php deleted file mode 100644 index 5e98823..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/webmozart/assert/src/Mixin.php +++ /dev/null @@ -1,2916 +0,0 @@ - $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allString($value, $message = '') - { - static::__callStatic('allString', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert non-empty-string|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrStringNotEmpty($value, $message = '') - { - static::__callStatic('nullOrStringNotEmpty', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allStringNotEmpty($value, $message = '') - { - static::__callStatic('allStringNotEmpty', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert int|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrInteger($value, $message = '') - { - static::__callStatic('nullOrInteger', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allInteger($value, $message = '') - { - static::__callStatic('allInteger', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert numeric|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIntegerish($value, $message = '') - { - static::__callStatic('nullOrIntegerish', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIntegerish($value, $message = '') - { - static::__callStatic('allIntegerish', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert positive-int|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrPositiveInteger($value, $message = '') - { - static::__callStatic('nullOrPositiveInteger', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allPositiveInteger($value, $message = '') - { - static::__callStatic('allPositiveInteger', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert float|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrFloat($value, $message = '') - { - static::__callStatic('nullOrFloat', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allFloat($value, $message = '') - { - static::__callStatic('allFloat', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert numeric|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNumeric($value, $message = '') - { - static::__callStatic('nullOrNumeric', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNumeric($value, $message = '') - { - static::__callStatic('allNumeric', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert positive-int|0|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNatural($value, $message = '') - { - static::__callStatic('nullOrNatural', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNatural($value, $message = '') - { - static::__callStatic('allNatural', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert bool|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrBoolean($value, $message = '') - { - static::__callStatic('nullOrBoolean', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allBoolean($value, $message = '') - { - static::__callStatic('allBoolean', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert scalar|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrScalar($value, $message = '') - { - static::__callStatic('nullOrScalar', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allScalar($value, $message = '') - { - static::__callStatic('allScalar', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert object|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrObject($value, $message = '') - { - static::__callStatic('nullOrObject', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allObject($value, $message = '') - { - static::__callStatic('allObject', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert resource|null $value - * - * @param mixed $value - * @param string|null $type type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrResource($value, $type = null, $message = '') - { - static::__callStatic('nullOrResource', array($value, $type, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string|null $type type of resource this should be. @see https://www.php.net/manual/en/function.get-resource-type.php - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allResource($value, $type = null, $message = '') - { - static::__callStatic('allResource', array($value, $type, $message)); - } - - /** - * @psalm-pure - * @psalm-assert callable|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsCallable($value, $message = '') - { - static::__callStatic('nullOrIsCallable', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsCallable($value, $message = '') - { - static::__callStatic('allIsCallable', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert array|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsArray($value, $message = '') - { - static::__callStatic('nullOrIsArray', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsArray($value, $message = '') - { - static::__callStatic('allIsArray', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable|null $value - * - * @deprecated use "isIterable" or "isInstanceOf" instead - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsTraversable($value, $message = '') - { - static::__callStatic('nullOrIsTraversable', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @deprecated use "isIterable" or "isInstanceOf" instead - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsTraversable($value, $message = '') - { - static::__callStatic('allIsTraversable', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert array|ArrayAccess|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsArrayAccessible($value, $message = '') - { - static::__callStatic('nullOrIsArrayAccessible', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsArrayAccessible($value, $message = '') - { - static::__callStatic('allIsArrayAccessible', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert countable|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsCountable($value, $message = '') - { - static::__callStatic('nullOrIsCountable', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsCountable($value, $message = '') - { - static::__callStatic('allIsCountable', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsIterable($value, $message = '') - { - static::__callStatic('nullOrIsIterable', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsIterable($value, $message = '') - { - static::__callStatic('allIsIterable', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * @psalm-assert ExpectedType|null $value - * - * @param mixed $value - * @param string|object $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsInstanceOf($value, $class, $message = '') - { - static::__callStatic('nullOrIsInstanceOf', array($value, $class, $message)); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string|object $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsInstanceOf($value, $class, $message = '') - { - static::__callStatic('allIsInstanceOf', array($value, $class, $message)); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * - * @param mixed $value - * @param string|object $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNotInstanceOf($value, $class, $message = '') - { - static::__callStatic('nullOrNotInstanceOf', array($value, $class, $message)); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * - * @param mixed $value - * @param string|object $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotInstanceOf($value, $class, $message = '') - { - static::__callStatic('allNotInstanceOf', array($value, $class, $message)); - } - - /** - * @psalm-pure - * @psalm-param array $classes - * - * @param mixed $value - * @param array $classes - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsInstanceOfAny($value, $classes, $message = '') - { - static::__callStatic('nullOrIsInstanceOfAny', array($value, $classes, $message)); - } - - /** - * @psalm-pure - * @psalm-param array $classes - * - * @param mixed $value - * @param array $classes - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsInstanceOfAny($value, $classes, $message = '') - { - static::__callStatic('allIsInstanceOfAny', array($value, $classes, $message)); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * @psalm-assert ExpectedType|class-string|null $value - * - * @param object|string|null $value - * @param string $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsAOf($value, $class, $message = '') - { - static::__callStatic('nullOrIsAOf', array($value, $class, $message)); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * @psalm-assert iterable> $value - * - * @param iterable $value - * @param string $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsAOf($value, $class, $message = '') - { - static::__callStatic('allIsAOf', array($value, $class, $message)); - } - - /** - * @psalm-pure - * @psalm-template UnexpectedType of object - * @psalm-param class-string $class - * - * @param object|string|null $value - * @param string $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsNotA($value, $class, $message = '') - { - static::__callStatic('nullOrIsNotA', array($value, $class, $message)); - } - - /** - * @psalm-pure - * @psalm-template UnexpectedType of object - * @psalm-param class-string $class - * - * @param iterable $value - * @param string $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsNotA($value, $class, $message = '') - { - static::__callStatic('allIsNotA', array($value, $class, $message)); - } - - /** - * @psalm-pure - * @psalm-param array $classes - * - * @param object|string|null $value - * @param string[] $classes - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsAnyOf($value, $classes, $message = '') - { - static::__callStatic('nullOrIsAnyOf', array($value, $classes, $message)); - } - - /** - * @psalm-pure - * @psalm-param array $classes - * - * @param iterable $value - * @param string[] $classes - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsAnyOf($value, $classes, $message = '') - { - static::__callStatic('allIsAnyOf', array($value, $classes, $message)); - } - - /** - * @psalm-pure - * @psalm-assert empty $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsEmpty($value, $message = '') - { - static::__callStatic('nullOrIsEmpty', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsEmpty($value, $message = '') - { - static::__callStatic('allIsEmpty', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNotEmpty($value, $message = '') - { - static::__callStatic('nullOrNotEmpty', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotEmpty($value, $message = '') - { - static::__callStatic('allNotEmpty', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNull($value, $message = '') - { - static::__callStatic('allNull', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotNull($value, $message = '') - { - static::__callStatic('allNotNull', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert true|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrTrue($value, $message = '') - { - static::__callStatic('nullOrTrue', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allTrue($value, $message = '') - { - static::__callStatic('allTrue', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert false|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrFalse($value, $message = '') - { - static::__callStatic('nullOrFalse', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allFalse($value, $message = '') - { - static::__callStatic('allFalse', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNotFalse($value, $message = '') - { - static::__callStatic('nullOrNotFalse', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotFalse($value, $message = '') - { - static::__callStatic('allNotFalse', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIp($value, $message = '') - { - static::__callStatic('nullOrIp', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIp($value, $message = '') - { - static::__callStatic('allIp', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIpv4($value, $message = '') - { - static::__callStatic('nullOrIpv4', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIpv4($value, $message = '') - { - static::__callStatic('allIpv4', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIpv6($value, $message = '') - { - static::__callStatic('nullOrIpv6', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIpv6($value, $message = '') - { - static::__callStatic('allIpv6', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrEmail($value, $message = '') - { - static::__callStatic('nullOrEmail', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allEmail($value, $message = '') - { - static::__callStatic('allEmail', array($value, $message)); - } - - /** - * @param array|null $values - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrUniqueValues($values, $message = '') - { - static::__callStatic('nullOrUniqueValues', array($values, $message)); - } - - /** - * @param iterable $values - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allUniqueValues($values, $message = '') - { - static::__callStatic('allUniqueValues', array($values, $message)); - } - - /** - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrEq($value, $expect, $message = '') - { - static::__callStatic('nullOrEq', array($value, $expect, $message)); - } - - /** - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allEq($value, $expect, $message = '') - { - static::__callStatic('allEq', array($value, $expect, $message)); - } - - /** - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNotEq($value, $expect, $message = '') - { - static::__callStatic('nullOrNotEq', array($value, $expect, $message)); - } - - /** - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotEq($value, $expect, $message = '') - { - static::__callStatic('allNotEq', array($value, $expect, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrSame($value, $expect, $message = '') - { - static::__callStatic('nullOrSame', array($value, $expect, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allSame($value, $expect, $message = '') - { - static::__callStatic('allSame', array($value, $expect, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNotSame($value, $expect, $message = '') - { - static::__callStatic('nullOrNotSame', array($value, $expect, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $expect - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotSame($value, $expect, $message = '') - { - static::__callStatic('allNotSame', array($value, $expect, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrGreaterThan($value, $limit, $message = '') - { - static::__callStatic('nullOrGreaterThan', array($value, $limit, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allGreaterThan($value, $limit, $message = '') - { - static::__callStatic('allGreaterThan', array($value, $limit, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrGreaterThanEq($value, $limit, $message = '') - { - static::__callStatic('nullOrGreaterThanEq', array($value, $limit, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allGreaterThanEq($value, $limit, $message = '') - { - static::__callStatic('allGreaterThanEq', array($value, $limit, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrLessThan($value, $limit, $message = '') - { - static::__callStatic('nullOrLessThan', array($value, $limit, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allLessThan($value, $limit, $message = '') - { - static::__callStatic('allLessThan', array($value, $limit, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrLessThanEq($value, $limit, $message = '') - { - static::__callStatic('nullOrLessThanEq', array($value, $limit, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $limit - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allLessThanEq($value, $limit, $message = '') - { - static::__callStatic('allLessThanEq', array($value, $limit, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $min - * @param mixed $max - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrRange($value, $min, $max, $message = '') - { - static::__callStatic('nullOrRange', array($value, $min, $max, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param mixed $min - * @param mixed $max - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allRange($value, $min, $max, $message = '') - { - static::__callStatic('allRange', array($value, $min, $max, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param array $values - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrOneOf($value, $values, $message = '') - { - static::__callStatic('nullOrOneOf', array($value, $values, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param array $values - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allOneOf($value, $values, $message = '') - { - static::__callStatic('allOneOf', array($value, $values, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param array $values - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrInArray($value, $values, $message = '') - { - static::__callStatic('nullOrInArray', array($value, $values, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param array $values - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allInArray($value, $values, $message = '') - { - static::__callStatic('allInArray', array($value, $values, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $subString - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrContains($value, $subString, $message = '') - { - static::__callStatic('nullOrContains', array($value, $subString, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $subString - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allContains($value, $subString, $message = '') - { - static::__callStatic('allContains', array($value, $subString, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $subString - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNotContains($value, $subString, $message = '') - { - static::__callStatic('nullOrNotContains', array($value, $subString, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $subString - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotContains($value, $subString, $message = '') - { - static::__callStatic('allNotContains', array($value, $subString, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNotWhitespaceOnly($value, $message = '') - { - static::__callStatic('nullOrNotWhitespaceOnly', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotWhitespaceOnly($value, $message = '') - { - static::__callStatic('allNotWhitespaceOnly', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $prefix - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrStartsWith($value, $prefix, $message = '') - { - static::__callStatic('nullOrStartsWith', array($value, $prefix, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $prefix - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allStartsWith($value, $prefix, $message = '') - { - static::__callStatic('allStartsWith', array($value, $prefix, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $prefix - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNotStartsWith($value, $prefix, $message = '') - { - static::__callStatic('nullOrNotStartsWith', array($value, $prefix, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $prefix - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotStartsWith($value, $prefix, $message = '') - { - static::__callStatic('allNotStartsWith', array($value, $prefix, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrStartsWithLetter($value, $message = '') - { - static::__callStatic('nullOrStartsWithLetter', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allStartsWithLetter($value, $message = '') - { - static::__callStatic('allStartsWithLetter', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $suffix - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrEndsWith($value, $suffix, $message = '') - { - static::__callStatic('nullOrEndsWith', array($value, $suffix, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $suffix - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allEndsWith($value, $suffix, $message = '') - { - static::__callStatic('allEndsWith', array($value, $suffix, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $suffix - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNotEndsWith($value, $suffix, $message = '') - { - static::__callStatic('nullOrNotEndsWith', array($value, $suffix, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $suffix - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotEndsWith($value, $suffix, $message = '') - { - static::__callStatic('allNotEndsWith', array($value, $suffix, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $pattern - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrRegex($value, $pattern, $message = '') - { - static::__callStatic('nullOrRegex', array($value, $pattern, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $pattern - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allRegex($value, $pattern, $message = '') - { - static::__callStatic('allRegex', array($value, $pattern, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $pattern - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrNotRegex($value, $pattern, $message = '') - { - static::__callStatic('nullOrNotRegex', array($value, $pattern, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $pattern - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allNotRegex($value, $pattern, $message = '') - { - static::__callStatic('allNotRegex', array($value, $pattern, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrUnicodeLetters($value, $message = '') - { - static::__callStatic('nullOrUnicodeLetters', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allUnicodeLetters($value, $message = '') - { - static::__callStatic('allUnicodeLetters', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrAlpha($value, $message = '') - { - static::__callStatic('nullOrAlpha', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allAlpha($value, $message = '') - { - static::__callStatic('allAlpha', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrDigits($value, $message = '') - { - static::__callStatic('nullOrDigits', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allDigits($value, $message = '') - { - static::__callStatic('allDigits', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrAlnum($value, $message = '') - { - static::__callStatic('nullOrAlnum', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allAlnum($value, $message = '') - { - static::__callStatic('allAlnum', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert lowercase-string|null $value - * - * @param string|null $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrLower($value, $message = '') - { - static::__callStatic('nullOrLower', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param iterable $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allLower($value, $message = '') - { - static::__callStatic('allLower', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrUpper($value, $message = '') - { - static::__callStatic('nullOrUpper', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allUpper($value, $message = '') - { - static::__callStatic('allUpper', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param int $length - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrLength($value, $length, $message = '') - { - static::__callStatic('nullOrLength', array($value, $length, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param int $length - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allLength($value, $length, $message = '') - { - static::__callStatic('allLength', array($value, $length, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param int|float $min - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrMinLength($value, $min, $message = '') - { - static::__callStatic('nullOrMinLength', array($value, $min, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param int|float $min - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allMinLength($value, $min, $message = '') - { - static::__callStatic('allMinLength', array($value, $min, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrMaxLength($value, $max, $message = '') - { - static::__callStatic('nullOrMaxLength', array($value, $max, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allMaxLength($value, $max, $message = '') - { - static::__callStatic('allMaxLength', array($value, $max, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param int|float $min - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrLengthBetween($value, $min, $max, $message = '') - { - static::__callStatic('nullOrLengthBetween', array($value, $min, $max, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param int|float $min - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allLengthBetween($value, $min, $max, $message = '') - { - static::__callStatic('allLengthBetween', array($value, $min, $max, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrFileExists($value, $message = '') - { - static::__callStatic('nullOrFileExists', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allFileExists($value, $message = '') - { - static::__callStatic('allFileExists', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrFile($value, $message = '') - { - static::__callStatic('nullOrFile', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allFile($value, $message = '') - { - static::__callStatic('allFile', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrDirectory($value, $message = '') - { - static::__callStatic('nullOrDirectory', array($value, $message)); - } - - /** - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allDirectory($value, $message = '') - { - static::__callStatic('allDirectory', array($value, $message)); - } - - /** - * @param string|null $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrReadable($value, $message = '') - { - static::__callStatic('nullOrReadable', array($value, $message)); - } - - /** - * @param iterable $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allReadable($value, $message = '') - { - static::__callStatic('allReadable', array($value, $message)); - } - - /** - * @param string|null $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrWritable($value, $message = '') - { - static::__callStatic('nullOrWritable', array($value, $message)); - } - - /** - * @param iterable $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allWritable($value, $message = '') - { - static::__callStatic('allWritable', array($value, $message)); - } - - /** - * @psalm-assert class-string|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrClassExists($value, $message = '') - { - static::__callStatic('nullOrClassExists', array($value, $message)); - } - - /** - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allClassExists($value, $message = '') - { - static::__callStatic('allClassExists', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * @psalm-assert class-string|ExpectedType|null $value - * - * @param mixed $value - * @param string|object $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrSubclassOf($value, $class, $message = '') - { - static::__callStatic('nullOrSubclassOf', array($value, $class, $message)); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $class - * @psalm-assert iterable|ExpectedType> $value - * - * @param mixed $value - * @param string|object $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allSubclassOf($value, $class, $message = '') - { - static::__callStatic('allSubclassOf', array($value, $class, $message)); - } - - /** - * @psalm-assert class-string|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrInterfaceExists($value, $message = '') - { - static::__callStatic('nullOrInterfaceExists', array($value, $message)); - } - - /** - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allInterfaceExists($value, $message = '') - { - static::__callStatic('allInterfaceExists', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $interface - * @psalm-assert class-string|null $value - * - * @param mixed $value - * @param mixed $interface - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrImplementsInterface($value, $interface, $message = '') - { - static::__callStatic('nullOrImplementsInterface', array($value, $interface, $message)); - } - - /** - * @psalm-pure - * @psalm-template ExpectedType of object - * @psalm-param class-string $interface - * @psalm-assert iterable> $value - * - * @param mixed $value - * @param mixed $interface - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allImplementsInterface($value, $interface, $message = '') - { - static::__callStatic('allImplementsInterface', array($value, $interface, $message)); - } - - /** - * @psalm-pure - * @psalm-param class-string|object|null $classOrObject - * - * @param string|object|null $classOrObject - * @param mixed $property - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrPropertyExists($classOrObject, $property, $message = '') - { - static::__callStatic('nullOrPropertyExists', array($classOrObject, $property, $message)); - } - - /** - * @psalm-pure - * @psalm-param iterable $classOrObject - * - * @param iterable $classOrObject - * @param mixed $property - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allPropertyExists($classOrObject, $property, $message = '') - { - static::__callStatic('allPropertyExists', array($classOrObject, $property, $message)); - } - - /** - * @psalm-pure - * @psalm-param class-string|object|null $classOrObject - * - * @param string|object|null $classOrObject - * @param mixed $property - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrPropertyNotExists($classOrObject, $property, $message = '') - { - static::__callStatic('nullOrPropertyNotExists', array($classOrObject, $property, $message)); - } - - /** - * @psalm-pure - * @psalm-param iterable $classOrObject - * - * @param iterable $classOrObject - * @param mixed $property - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allPropertyNotExists($classOrObject, $property, $message = '') - { - static::__callStatic('allPropertyNotExists', array($classOrObject, $property, $message)); - } - - /** - * @psalm-pure - * @psalm-param class-string|object|null $classOrObject - * - * @param string|object|null $classOrObject - * @param mixed $method - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrMethodExists($classOrObject, $method, $message = '') - { - static::__callStatic('nullOrMethodExists', array($classOrObject, $method, $message)); - } - - /** - * @psalm-pure - * @psalm-param iterable $classOrObject - * - * @param iterable $classOrObject - * @param mixed $method - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allMethodExists($classOrObject, $method, $message = '') - { - static::__callStatic('allMethodExists', array($classOrObject, $method, $message)); - } - - /** - * @psalm-pure - * @psalm-param class-string|object|null $classOrObject - * - * @param string|object|null $classOrObject - * @param mixed $method - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrMethodNotExists($classOrObject, $method, $message = '') - { - static::__callStatic('nullOrMethodNotExists', array($classOrObject, $method, $message)); - } - - /** - * @psalm-pure - * @psalm-param iterable $classOrObject - * - * @param iterable $classOrObject - * @param mixed $method - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allMethodNotExists($classOrObject, $method, $message = '') - { - static::__callStatic('allMethodNotExists', array($classOrObject, $method, $message)); - } - - /** - * @psalm-pure - * - * @param array|null $array - * @param string|int $key - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrKeyExists($array, $key, $message = '') - { - static::__callStatic('nullOrKeyExists', array($array, $key, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $array - * @param string|int $key - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allKeyExists($array, $key, $message = '') - { - static::__callStatic('allKeyExists', array($array, $key, $message)); - } - - /** - * @psalm-pure - * - * @param array|null $array - * @param string|int $key - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrKeyNotExists($array, $key, $message = '') - { - static::__callStatic('nullOrKeyNotExists', array($array, $key, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $array - * @param string|int $key - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allKeyNotExists($array, $key, $message = '') - { - static::__callStatic('allKeyNotExists', array($array, $key, $message)); - } - - /** - * @psalm-pure - * @psalm-assert array-key|null $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrValidArrayKey($value, $message = '') - { - static::__callStatic('nullOrValidArrayKey', array($value, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $value - * - * @param mixed $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allValidArrayKey($value, $message = '') - { - static::__callStatic('allValidArrayKey', array($value, $message)); - } - - /** - * @param Countable|array|null $array - * @param int $number - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrCount($array, $number, $message = '') - { - static::__callStatic('nullOrCount', array($array, $number, $message)); - } - - /** - * @param iterable $array - * @param int $number - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allCount($array, $number, $message = '') - { - static::__callStatic('allCount', array($array, $number, $message)); - } - - /** - * @param Countable|array|null $array - * @param int|float $min - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrMinCount($array, $min, $message = '') - { - static::__callStatic('nullOrMinCount', array($array, $min, $message)); - } - - /** - * @param iterable $array - * @param int|float $min - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allMinCount($array, $min, $message = '') - { - static::__callStatic('allMinCount', array($array, $min, $message)); - } - - /** - * @param Countable|array|null $array - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrMaxCount($array, $max, $message = '') - { - static::__callStatic('nullOrMaxCount', array($array, $max, $message)); - } - - /** - * @param iterable $array - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allMaxCount($array, $max, $message = '') - { - static::__callStatic('allMaxCount', array($array, $max, $message)); - } - - /** - * @param Countable|array|null $array - * @param int|float $min - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrCountBetween($array, $min, $max, $message = '') - { - static::__callStatic('nullOrCountBetween', array($array, $min, $max, $message)); - } - - /** - * @param iterable $array - * @param int|float $min - * @param int|float $max - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allCountBetween($array, $min, $max, $message = '') - { - static::__callStatic('allCountBetween', array($array, $min, $max, $message)); - } - - /** - * @psalm-pure - * @psalm-assert list|null $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsList($array, $message = '') - { - static::__callStatic('nullOrIsList', array($array, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsList($array, $message = '') - { - static::__callStatic('allIsList', array($array, $message)); - } - - /** - * @psalm-pure - * @psalm-assert non-empty-list|null $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsNonEmptyList($array, $message = '') - { - static::__callStatic('nullOrIsNonEmptyList', array($array, $message)); - } - - /** - * @psalm-pure - * @psalm-assert iterable $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsNonEmptyList($array, $message = '') - { - static::__callStatic('allIsNonEmptyList', array($array, $message)); - } - - /** - * @psalm-pure - * @psalm-template T - * @psalm-param mixed|array|null $array - * @psalm-assert array|null $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsMap($array, $message = '') - { - static::__callStatic('nullOrIsMap', array($array, $message)); - } - - /** - * @psalm-pure - * @psalm-template T - * @psalm-param iterable> $array - * @psalm-assert iterable> $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsMap($array, $message = '') - { - static::__callStatic('allIsMap', array($array, $message)); - } - - /** - * @psalm-pure - * @psalm-template T - * @psalm-param mixed|array|null $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrIsNonEmptyMap($array, $message = '') - { - static::__callStatic('nullOrIsNonEmptyMap', array($array, $message)); - } - - /** - * @psalm-pure - * @psalm-template T - * @psalm-param iterable> $array - * - * @param mixed $array - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allIsNonEmptyMap($array, $message = '') - { - static::__callStatic('allIsNonEmptyMap', array($array, $message)); - } - - /** - * @psalm-pure - * - * @param string|null $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrUuid($value, $message = '') - { - static::__callStatic('nullOrUuid', array($value, $message)); - } - - /** - * @psalm-pure - * - * @param iterable $value - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allUuid($value, $message = '') - { - static::__callStatic('allUuid', array($value, $message)); - } - - /** - * @psalm-param class-string $class - * - * @param Closure|null $expression - * @param string $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function nullOrThrows($expression, $class = 'Exception', $message = '') - { - static::__callStatic('nullOrThrows', array($expression, $class, $message)); - } - - /** - * @psalm-param class-string $class - * - * @param iterable $expression - * @param string $class - * @param string $message - * - * @throws InvalidArgumentException - * - * @return void - */ - public static function allThrows($expression, $class = 'Exception', $message = '') - { - static::__callStatic('allThrows', array($expression, $class, $message)); - } -} diff --git a/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/CHANGELOG.md b/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/CHANGELOG.md deleted file mode 100644 index aa6bc88..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/CHANGELOG.md +++ /dev/null @@ -1,732 +0,0 @@ -# Changelog -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). - -## [v1.2.13] - -### Changed - -- [e96314f](https://github.com/williamdes/mariadb-mysql-kbs/commit/e96314f47373a45c1829a91d1cd5fa574343ea4a) update: [MariaDB] && [MySQL] updates -- [d4cbcc7](https://github.com/williamdes/mariadb-mysql-kbs/commit/d4cbcc7acf033e7cf4a22aeda749f9870e2d1beb) update: [MariaDB] updates -- [6d0aed2](https://github.com/williamdes/mariadb-mysql-kbs/commit/6d0aed2a94f4247655cc1ccbd47a1950abac6eb3) update: [MariaDB] && [MySQL] updates -- [6646d76](https://github.com/williamdes/mariadb-mysql-kbs/commit/6646d764c62136474f0ffaa42ba7bb1a324f3c0f) update: [MySQL] updates -- [be98073](https://github.com/williamdes/mariadb-mysql-kbs/commit/be9807377b13d08ed6998ae185400d27686f4f38) update: [MariaDB] && [MySQL] updates -- [f6fd5f6](https://github.com/williamdes/mariadb-mysql-kbs/commit/f6fd5f6a2f06d4116266833b3f68d7a8a1d10be6) update: [MariaDB] && [MySQL] updates -- [cb8f850](https://github.com/williamdes/mariadb-mysql-kbs/commit/cb8f850bb4cf0b9619986313696d476aad53e8ee) update: [MariaDB] updates -- [05e1883](https://github.com/williamdes/mariadb-mysql-kbs/commit/05e18834cbd44f544d8a131a477f90af9df439f0) update: [MariaDB] updates -- [15deeb9](https://github.com/williamdes/mariadb-mysql-kbs/commit/15deeb9672cb3309adcdd7b2554e5abb5e6ebc56) update: [MySQL] updates -- [1a8bf0a](https://github.com/williamdes/mariadb-mysql-kbs/commit/1a8bf0a2c31013b3bcf11f0862ef0e39f5b9ba74) update: [MariaDB] updates -- [90a0b26](https://github.com/williamdes/mariadb-mysql-kbs/commit/90a0b26638e67e32e230a1a1022878dbe8e7dd35) update: [MariaDB] && [MySQL] updates -- [50ab914](https://github.com/williamdes/mariadb-mysql-kbs/commit/50ab914b6df67ce5a4d63121bd8b1772bcadf872) update: [MariaDB] && [MySQL] updates -- [4b57142](https://github.com/williamdes/mariadb-mysql-kbs/commit/4b57142e4705617280ad3da9729240348b494f90) update: [MySQL] updates -- [daa313e](https://github.com/williamdes/mariadb-mysql-kbs/commit/daa313ea4fc19400ddc6fb5350dc79daf85d1a21) update: [MySQL] updates -- [1f02417](https://github.com/williamdes/mariadb-mysql-kbs/commit/1f024175e0deb70eff34e36d7305b58c0cef68d4) update: [MySQL] updates -- [bc011b7](https://github.com/williamdes/mariadb-mysql-kbs/commit/bc011b7ea4f36b10de81c4f58f55b6ff079ff2e2) update: [MariaDB] updates -- [925f01f](https://github.com/williamdes/mariadb-mysql-kbs/commit/925f01fd8dae8f8e4a72e680bce6223f1ab1084b) update: [MariaDB] updates -- [1eb110b](https://github.com/williamdes/mariadb-mysql-kbs/commit/1eb110b8c9238a88d406f0e232d63d8aa3d18053) update: [MariaDB] && [MySQL] updates -- [886d599](https://github.com/williamdes/mariadb-mysql-kbs/commit/886d599fb4ecd2e886629c177b2f9815c1fae957) update: [MariaDB] && [MySQL] updates -- [fbc1e98](https://github.com/williamdes/mariadb-mysql-kbs/commit/fbc1e98d0c4b98506b03ee30b60ee08fdbbe9440) update: [MySQL] updates -- [4726cd1](https://github.com/williamdes/mariadb-mysql-kbs/commit/4726cd1c799e3dad815f7113f3e62a7f383a7f40) update: [MariaDB] && [MySQL] updates -- [b7bc2db](https://github.com/williamdes/mariadb-mysql-kbs/commit/b7bc2dbf779c55c13f804a1cc4ce459e46f0e3e0) update: [MariaDB] && [MySQL] updates -- [ef773a7](https://github.com/williamdes/mariadb-mysql-kbs/commit/ef773a7a118e275b98b57cf18d0ad6cbfe514def) update: [MariaDB] && [MySQL] updates -- [9837411](https://github.com/williamdes/mariadb-mysql-kbs/commit/9837411eedb53b0cb61047699ad7081480f9c458) update: [MariaDB] && [MySQL] updates -- [1da68a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/1da68a28fcbcf1f9fa9f886aab84526b0408424b) update: [MySQL] updates -- [8b290ce](https://github.com/williamdes/mariadb-mysql-kbs/commit/8b290ce7109586eca5a259f63cda60551da8ab61) update: [MySQL] updates -- [9a30263](https://github.com/williamdes/mariadb-mysql-kbs/commit/9a302637313e79c392467e28c925a39ab573b61d) update: [MySQL] updates -- [a1fbb55](https://github.com/williamdes/mariadb-mysql-kbs/commit/a1fbb55335510afabfe1b544564f24639ad6f668) update: [MySQL] updates - -### Fixed - -- [a402856](https://github.com/williamdes/mariadb-mysql-kbs/commit/a4028565d062339f18a504f39c61cfa04a962802) fix: exclude merge.php from Doctum -- [c69d529](https://github.com/williamdes/mariadb-mysql-kbs/commit/c69d5296b09e7a5478b23d00ab865e3b3564a0cd) fix: cleanup the accepted values for an enum -- [2104623](https://github.com/williamdes/mariadb-mysql-kbs/commit/21046232efaa4f5ec355477fe50b0dab19a44ca2) fix: MariaDb enum values without a code tag -- [66c6992](https://github.com/williamdes/mariadb-mysql-kbs/commit/66c69927e3945cdc65f7919e7a757bd50dfe75c3) fix: create PR script install in "/usr/local/bin" -- [4f10b0e](https://github.com/williamdes/mariadb-mysql-kbs/commit/4f10b0eb4f2551fa1d2643fead412bb8b6f9dd2d) fix: yarn binary path -- [de8ef42](https://github.com/williamdes/mariadb-mysql-kbs/commit/de8ef42628bcfeb04627aa850783d88d82046ba6) fix: binary path for sudo-bot -- [c1528ea](https://github.com/williamdes/mariadb-mysql-kbs/commit/c1528ea35b0838ceefc18dbbf82141848a8c0213) fix: coding standard migration mistake -- [de8945b](https://github.com/williamdes/mariadb-mysql-kbs/commit/de8945b622f3360245784f7fa7653537c72b592b) fix: data URLs -- [0f31076](https://github.com/williamdes/mariadb-mysql-kbs/commit/0f31076dae1ebe2af5c13521e6a2031bc2381f14) fix: do not try to match another scope than global or session for MariaDB - -### Improvements - -- [0e7508c](https://github.com/williamdes/mariadb-mysql-kbs/commit/0e7508c01dfc6bb783032345007cab8b2bdbb603) style: stop using old array syntax -- [2784c48](https://github.com/williamdes/mariadb-mysql-kbs/commit/2784c48571fb629758f821bef07e55729efcf98c) style: coding standard fixes and ignore for tests -- [ce5e57b](https://github.com/williamdes/mariadb-mysql-kbs/commit/ce5e57b79cf9fb7e7960dcef6bd0df94c58162c4) style: run prettier -- [daeec8f](https://github.com/williamdes/mariadb-mysql-kbs/commit/daeec8f36ab548854fc035fed214d2887f563a34) style: migrate to wdes/coding-standard and composer json cleanup - -### Features - -- [1b8f387](https://github.com/williamdes/mariadb-mysql-kbs/commit/1b8f3874c595b9ee5991041c4926ce062e80bef4) feat: pass phpstan v1 max level -- [0273dbf](https://github.com/williamdes/mariadb-mysql-kbs/commit/0273dbfdfa6c7b808954235fd40c9897ad8ad121) feat: simplify PHP 8 composer installs -- [7c6a94e](https://github.com/williamdes/mariadb-mysql-kbs/commit/7c6a94e557d593b2cd168a462c43dbbac2b1b52c) feat: add new S3 data file -- [29960a3](https://github.com/williamdes/mariadb-mysql-kbs/commit/29960a349e49bb6be5e299593f6dd6829cae5a25) feat: add new data sets - -### Documentation - -- [b0af14e](https://github.com/williamdes/mariadb-mysql-kbs/commit/b0af14ef9e78259da65be9fc3756013fe50dc7b4) docs: update CHANGELOG -- [41631bf](https://github.com/williamdes/mariadb-mysql-kbs/commit/41631bf402f20242aa55e2f2815488dafe9508de) docs: add FUNDING and SECURITY -- [474885d](https://github.com/williamdes/mariadb-mysql-kbs/commit/474885d4eb22a3bab8e81b72dd7cf002a5723c29) docs: update docs submodule - -### Others - -- [5a708dd](https://github.com/williamdes/mariadb-mysql-kbs/commit/5a708ddd0d444fde62eee557350677ffb538ea23) chore: do not try to change version in composer.json -- [b492531](https://github.com/williamdes/mariadb-mysql-kbs/commit/b492531f6ee0eb067ef6cea95b7039729d8acd8d) ci: set back coverage to xdebug for PHP 7.1 -- [095d6bf](https://github.com/williamdes/mariadb-mysql-kbs/commit/095d6bfbd2bd71665959d824f2edfdfa667da6a2) ci: set PHP 8.1 as a normal tested version and nightly as an experimental version -- [848c359](https://github.com/williamdes/mariadb-mysql-kbs/commit/848c359c933f90568ff65ce4a6efb9267430c968) chore: ignore composer.lock -- [7f56820](https://github.com/williamdes/mariadb-mysql-kbs/commit/7f5682015cb6728ab7871da69d92e49a112ed213) chore: remove version field from composer.json -- [ed98920](https://github.com/williamdes/mariadb-mysql-kbs/commit/ed98920339eecdae90c986a6c7dc8e11337add96) chore: upgrade phpstan to ^1.2.0 -- [4dc14cd](https://github.com/williamdes/mariadb-mysql-kbs/commit/4dc14cd791e74e929274b6a276d8b8c80015a2a6) ci: do not require SKIP_DOCS_STEPS ENV -- [624b71e](https://github.com/williamdes/mariadb-mysql-kbs/commit/624b71e435557946d45ea387abe4d6bcf32f5a09) chore: update jshint, mocha, prettier -- [af0326c](https://github.com/williamdes/mariadb-mysql-kbs/commit/af0326c04ccefffed1f1bbe26c5f086387985883) ci: add new workflow environment names -- [2e6ae05](https://github.com/williamdes/mariadb-mysql-kbs/commit/2e6ae05b8fa1ba7ba8339ecb10a5baa09a112ae0) chore: update dependencies -- [a5a3627](https://github.com/williamdes/mariadb-mysql-kbs/commit/a5a36270c7a1423d404dbeb21257ed3556af0fc5) ci: fix workflow -- [12cb0c7](https://github.com/williamdes/mariadb-mysql-kbs/commit/12cb0c705abedc4f7eca992fc8e32c41dc68b905) ci: adjust lint and analyse CI config and run tests on PHP 8.1 -- [9c72287](https://github.com/williamdes/mariadb-mysql-kbs/commit/9c7228749af60ad40f2f522803a518bb21f54921) ci: test on node 12, 14, 15, 16 -- [6954d32](https://github.com/williamdes/mariadb-mysql-kbs/commit/6954d326fdda0b041396997112fe3c45a56541c2) chore: require node 12 -- [13bf7a5](https://github.com/williamdes/mariadb-mysql-kbs/commit/13bf7a53327c9b89a32ec95bdc27e2469f478a01) chore: upgrade jshint, mocha, prettier -- [e120770](https://github.com/williamdes/mariadb-mysql-kbs/commit/e12077002cae75b0ac2d3f5515ac6d7d21fca403) ci: remove sudo for pages build -- [8e31e3b](https://github.com/williamdes/mariadb-mysql-kbs/commit/8e31e3b5bdf748cc3454deed0c113fb37815b4df) ci: remove composer arguments -- [2552a4b](https://github.com/williamdes/mariadb-mysql-kbs/commit/2552a4b103ffcf73635c67150fff95f47696d061) ci: use different templates for each workflow -- [2944134](https://github.com/williamdes/mariadb-mysql-kbs/commit/294413447143adf4c4a525eec5327fba67d88124) ci: allow access to secrets -- [ca5bb42](https://github.com/williamdes/mariadb-mysql-kbs/commit/ca5bb42fd68d0ba38b761f75368af6e3c3364618) ci: handle non docs workflow -- [3cc68cb](https://github.com/williamdes/mariadb-mysql-kbs/commit/3cc68cb8c8f2a7365a78d710e8087d704107b5a7) ci: fix NodeJs not expanding ~ of paths -- [852e2c3](https://github.com/williamdes/mariadb-mysql-kbs/commit/852e2c3f7fc13729b7a91800a5718d8725b295a5) ci: fix build process missing files -- [80eb36d](https://github.com/williamdes/mariadb-mysql-kbs/commit/80eb36dcdf817da45c7a392d7a268cb9dcfc0eaa) ci: use non relative paths for some file arguments on sudo-bot -- [61263ca](https://github.com/williamdes/mariadb-mysql-kbs/commit/61263ca257ead278e377748bce45ed9fb8f2d25f) ci: fix secret for sudo-bot GPG passphrase -- [547e15e](https://github.com/williamdes/mariadb-mysql-kbs/commit/547e15ece69560a45556916edc7e7a58d99ce576) ci: remove duplicates lines on the sudo-bot script That simple..., wtf keyboard what did you do /o\ -- [a208602](https://github.com/williamdes/mariadb-mysql-kbs/commit/a2086022e8c68c151fcc0cf29753e2aa0430cf1d) ci: add more debugs for sudo-bot script What is wrong ? :/ -- [c8255a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/c8255a254c6fc782a86ce8a62050662558914628) ci: fix sudo-bot, use bash instead of sh -- [3f0f318](https://github.com/williamdes/mariadb-mysql-kbs/commit/3f0f3185a346292a16ee71e0f9b9db4279545e0b) ci: debug command line issue -- [fa11e54](https://github.com/williamdes/mariadb-mysql-kbs/commit/fa11e54d410ba435f660afed58ee80d275b4be18) ci: use bash equals for sudo-bot -- [4329113](https://github.com/williamdes/mariadb-mysql-kbs/commit/432911397912e4fd29d513058ed7be9b571c09a3) ci: fix move to root dir for API docs -- [373a22f](https://github.com/williamdes/mariadb-mysql-kbs/commit/373a22febd0253d04a5c6c656633878b49b08987) ci: rename cache to tmp -- [085abed](https://github.com/williamdes/mariadb-mysql-kbs/commit/085abeda4486d41ee274b5ee72b33fa11b14796c) ci: fetch all the repository to have the gh-pages branch available -- [43d7ecd](https://github.com/williamdes/mariadb-mysql-kbs/commit/43d7ecd45999b0720ca7bd9939c1c6727d00332a) ci: fix root dir path for sudo-bot docs -- [5cfd151](https://github.com/williamdes/mariadb-mysql-kbs/commit/5cfd151f09e78643ac42dc2c4029069eadd2ad8c) ci: make sudo-bot script executable -- [44293ad](https://github.com/williamdes/mariadb-mysql-kbs/commit/44293ad4f9bb3377c237e75f0d7591eec59963e6) ci: fix PHP documentation workflow -- [6b0f012](https://github.com/williamdes/mariadb-mysql-kbs/commit/6b0f012cfec344d8b49b7a3fb9e788d3e1f50a5f) ci: drop all the old sudo-bot process and re-build it -- [dcad6c8](https://github.com/williamdes/mariadb-mysql-kbs/commit/dcad6c83674b26f50885281bd03d51c3cade077b) ci: rename GPG_PRIV_PASSWORD ENV to GPG_PASSPHRASE -- [3ba3766](https://github.com/williamdes/mariadb-mysql-kbs/commit/3ba37668d67e29b31ac0f96c860d279464298f47) chore: upgrade chai and mocha -- [e48d0c0](https://github.com/williamdes/mariadb-mysql-kbs/commit/e48d0c01895a397198b6751fafd310420b15e575) ci: Update actions/checkout to v2 - -## [v1.2.12] - -### Changed - -- [b78197e](https://github.com/williamdes/mariadb-mysql-kbs/commit/b78197e1c16522c86fab4b23c8b75050efd27dd0) update: [MySQL] updates -- [537d185](https://github.com/williamdes/mariadb-mysql-kbs/commit/537d1853dbe02c175ad917f17bd1fbf852a7ff06) update: [MySQL] updates -- [1f7868b](https://github.com/williamdes/mariadb-mysql-kbs/commit/1f7868baba0df415ec7fb5e4358494127915bafe) update: [MariaDB] updates -- [fce5e6a](https://github.com/williamdes/mariadb-mysql-kbs/commit/fce5e6ab7c105d8e1b9493724ea942ee8aea84c3) update: [MariaDB] && [MySQL] updates -- [8aabb2b](https://github.com/williamdes/mariadb-mysql-kbs/commit/8aabb2b929f601a29645df0c8c55166f18e64a76) update: [MariaDB] && [MySQL] updates -- [deaa820](https://github.com/williamdes/mariadb-mysql-kbs/commit/deaa8204e46a2af4947489d348a58331367d5d94) update: [MariaDB] && [MySQL] updates -- [fd5e5de](https://github.com/williamdes/mariadb-mysql-kbs/commit/fd5e5de7c0019df37d905ae1e28ee4340d16cc51) update: 🤖 Some updates 🤖 -- [4278ad9](https://github.com/williamdes/mariadb-mysql-kbs/commit/4278ad9b212e6679d5c19d27d49f516f01f03863) update: [MariaDB] && [MySQL] updates -- [37a7156](https://github.com/williamdes/mariadb-mysql-kbs/commit/37a7156d2027122955fc8087b1d056f54dd1ca74) update: [MariaDB] && [MySQL] updates -- [74c152c](https://github.com/williamdes/mariadb-mysql-kbs/commit/74c152cc366fa0bd9fcdf5e774aa6a4002a52fa8) update: [MariaDB] updates -- [3b86e1f](https://github.com/williamdes/mariadb-mysql-kbs/commit/3b86e1f34a60651c071289b920bd52a6ad0bac4c) update: [MySQL] updates - -### Fixed - -- [a8a7893](https://github.com/williamdes/mariadb-mysql-kbs/commit/a8a78939ccad4937600d06364f265b79745b1b9a) fix: KBEntry::jsonSerialize phpdoc block -- [4d33f7e](https://github.com/williamdes/mariadb-mysql-kbs/commit/4d33f7eb822920e5336e64d0e8f4930e336257c9) fix: Rename master to source for MySQL replication options - -### Features - -- [2402554](https://github.com/williamdes/mariadb-mysql-kbs/commit/240255492c4f19a895e0422e8e509caecce27928) feat: improve release script -- [632dc1c](https://github.com/williamdes/mariadb-mysql-kbs/commit/632dc1cc09142588f5443c8d6c419215d233cb70) feat: update documentation submodule -- [c9bcc1c](https://github.com/williamdes/mariadb-mysql-kbs/commit/c9bcc1cacde7f2932e1015499b4fc277f6621e62) feat: improve API docs config - -### Others - -- [bba46a3](https://github.com/williamdes/mariadb-mysql-kbs/commit/bba46a3ac03b1d999786a4f1f0bb9de3c6f1d59c) ci: use sudo-bot/action-doctum -- [3550bd1](https://github.com/williamdes/mariadb-mysql-kbs/commit/3550bd164152a29e1bce45285f208d97032a2d4d) chore: update dependencies -- [35b9c29](https://github.com/williamdes/mariadb-mysql-kbs/commit/35b9c2998f2f8c2abd2c136836c157e5a0749755) ci: update lint and analyse workflows -- [7c08136](https://github.com/williamdes/mariadb-mysql-kbs/commit/7c08136d1042b62c50a076e4ecc4f2415576de02) chore: change php requirements to "^7.1 || ^8.0" -- [b48b3be](https://github.com/williamdes/mariadb-mysql-kbs/commit/b48b3bedd294dfb873f2992692ff8cf19b3d6924) chore: remove .gitignore from vendor bundles - -## [v1.2.11] - -### Changed - -- [749afd6](https://github.com/williamdes/mariadb-mysql-kbs/commit/749afd6b2dec8e203109628b3ee4d62d3ae5437a) update: [MariaDB] updates -- [238e5ae](https://github.com/williamdes/mariadb-mysql-kbs/commit/238e5ae2aa76868164f2a7f0de9e08dcdebde304) update: [MariaDB] && [MySQL] updates -- [eb62400](https://github.com/williamdes/mariadb-mysql-kbs/commit/eb62400bc18d0e9d2f845434cc367707fe68daa0) update: [MariaDB] && [MySQL] updates -- [bf0405b](https://github.com/williamdes/mariadb-mysql-kbs/commit/bf0405b255e1b79c358175f1391acdd94286f261) update: [MySQL] updates -- [85e3b2b](https://github.com/williamdes/mariadb-mysql-kbs/commit/85e3b2b0402948b01f4d2751d2776fedbee4ced1) update: [MariaDB] && [MySQL] updates -- [5f24772](https://github.com/williamdes/mariadb-mysql-kbs/commit/5f24772774a2e6753183aa14d6381a66fe63f819) update: [MariaDB] updates -- [17e905f](https://github.com/williamdes/mariadb-mysql-kbs/commit/17e905f2ba8cbc42193398c6718169564700627d) update: [MariaDB] updates -- [7fb17c1](https://github.com/williamdes/mariadb-mysql-kbs/commit/7fb17c1a1f7f29d9e623f5702d696b7744356cda) update: [MariaDB] updates -- [2ab4b94](https://github.com/williamdes/mariadb-mysql-kbs/commit/2ab4b9445dda64d4d76206b20d4680802197d06f) update: [MySQL] updates -- [6dca35c](https://github.com/williamdes/mariadb-mysql-kbs/commit/6dca35c3d7e138db1df9fa91cbb3acae045e33ad) update: [MariaDB] updates -- [25cc2f5](https://github.com/williamdes/mariadb-mysql-kbs/commit/25cc2f5c6ae9702d68d07fa7b2673824762b6942) update: [MariaDB] updates -- [a106adc](https://github.com/williamdes/mariadb-mysql-kbs/commit/a106adce4673a781299c05ad71a2f03d5f8f2762) update: [MariaDB] && [MySQL] updates -- [f32aa3c](https://github.com/williamdes/mariadb-mysql-kbs/commit/f32aa3c94886a030a9405d2d64fb32d7665111a9) update: [MySQL] updates -- [1a9712e](https://github.com/williamdes/mariadb-mysql-kbs/commit/1a9712ef486c366e4eab4796da6cc71207a035a0) update: [MariaDB] updates -- [e68823d](https://github.com/williamdes/mariadb-mysql-kbs/commit/e68823d481781ec91642414baba745b5009efd54) update: [MariaDB] && [MySQL] updates -- [25327b8](https://github.com/williamdes/mariadb-mysql-kbs/commit/25327b891ca02d0b5f2639532829e086b2b97755) update: [MariaDB] && [MySQL] updates -- [c70c4d5](https://github.com/williamdes/mariadb-mysql-kbs/commit/c70c4d5d87067e6ce7a3cc7a398bb618a27f31f6) update: [MariaDB] && [MySQL] updates -- [24a7590](https://github.com/williamdes/mariadb-mysql-kbs/commit/24a75905df8b1baad20ff5a6a74a2a200b75d7cb) update: [MySQL] updates -- [86688c6](https://github.com/williamdes/mariadb-mysql-kbs/commit/86688c678cba028750b6678faef3d398bdecf11d) update: [MySQL] updates -- [62e472b](https://github.com/williamdes/mariadb-mysql-kbs/commit/62e472b485c5008fe5c2db1b3569efa8f83735cd) update: [MariaDB] updates -- [8715b00](https://github.com/williamdes/mariadb-mysql-kbs/commit/8715b00fe605af5cf27dec34b2402ecb6ee21271) update: [MySQL] updates - -### Fixed - -- [438f58b](https://github.com/williamdes/mariadb-mysql-kbs/commit/438f58b093f9e97e6a50f3ad6b8c7ff15fc1636d) fix: use another way to validate variables in MySQL documentation -- [e23b886](https://github.com/williamdes/mariadb-mysql-kbs/commit/e23b8868e34fbe922ba0e83bcf5b55ee0c9b6966) fix: use stdout instead of stderr for phpunit -- [633e667](https://github.com/williamdes/mariadb-mysql-kbs/commit/633e667efd6d05b4497b672af6e2a110234df81e) fix: rename mysql options slave to replica -- [1da576b](https://github.com/williamdes/mariadb-mysql-kbs/commit/1da576b61e661762e41c3bf501b9e163f8a2f298) fix: remove an invalid edge case -- [6cb4b61](https://github.com/williamdes/mariadb-mysql-kbs/commit/6cb4b611d443f038e22e3ea2821dbb7b10e3328c) fix: support bad naming for enums -- [f836f84](https://github.com/williamdes/mariadb-mysql-kbs/commit/f836f84a0ee1d0c4e19cd848af50494fea33a7ae) fix: activate back h3 detection -- [894cce5](https://github.com/williamdes/mariadb-mysql-kbs/commit/894cce551c007c232b41cd696cc447db507d5c63) fix: detect nodes until next header -- [ff6fa4a](https://github.com/williamdes/mariadb-mysql-kbs/commit/ff6fa4a23e0d5735b035f2b66f4cfc20880cb866) fix: ignore non variables headings -- [c4d3a15](https://github.com/williamdes/mariadb-mysql-kbs/commit/c4d3a1506299dc0bc09b4e8d76df78cbefe9f8aa) fix: detect all the nodes until a separation line -- [8dbe3d1](https://github.com/williamdes/mariadb-mysql-kbs/commit/8dbe3d151413070ed35b0451265e503bc054aedd) fix: headers can be td or th elements on some MySQL pages -- [8d5ff2e](https://github.com/williamdes/mariadb-mysql-kbs/commit/8d5ff2eb867ea8e17b6cb2957e66846e0f3e7bb4) fix: update XSD url for phpunit -- [f127419](https://github.com/williamdes/mariadb-mysql-kbs/commit/f1274199744eb6d6ffdbe80a5aafd98a85ea7376) fix: remove incompatible expectExceptionMessage with phpunit 7 -- [239fa7f](https://github.com/williamdes/mariadb-mysql-kbs/commit/239fa7f50ea27d7e1b0c90bbe613c2407ea90e61) fix: phpunit test must use expectExceptionMessageMatches intead of expectExceptionMessageRegExp -- [45f5288](https://github.com/williamdes/mariadb-mysql-kbs/commit/45f5288456765d6f91f06251e0cba550304191a8) fix: add target folder to .npmignore - -### Features - -- [7823f6b](https://github.com/williamdes/mariadb-mysql-kbs/commit/7823f6ba556f393a329028b4e049e2e3a737cd0f) feat: move to phar method to generate docs -- [b0b51b9](https://github.com/williamdes/mariadb-mysql-kbs/commit/b0b51b9473c450fd1ba967d477f700695a5339e9) feat: add a PR template for documentation updates -- [6e0e3c4](https://github.com/williamdes/mariadb-mysql-kbs/commit/6e0e3c4a8fff19ed2832078d974aea52e55291ea) feat: remove sami/sami and use code-lts/doctum -- [00439a0](https://github.com/williamdes/mariadb-mysql-kbs/commit/00439a01b887dd21d22e2d364e73674c0a35cac5) feat: set main as the default branch -- [bb22aac](https://github.com/williamdes/mariadb-mysql-kbs/commit/bb22aac607c5a5f5118b36b358e447877dcc998b) feat: add test cases for the MariaDB extraction script -- [44ca8ce](https://github.com/williamdes/mariadb-mysql-kbs/commit/44ca8ce4f1ae2ce4e5717484d1b047e560434ad7) feat: export MariaDB functions for testing -- [d3e5cab](https://github.com/williamdes/mariadb-mysql-kbs/commit/d3e5cab043426498926d8abde07469f3ffeb5c74) feat: Allow phpunit 9 - -### Documentation - -- [f457e52](https://github.com/williamdes/mariadb-mysql-kbs/commit/f457e52f1274efc3b6f6c813e4f055e1ae6b07bd) docs: Update Repology badge after the merge of Fedora and Debian data - -### Others - -- [dc34e69](https://github.com/williamdes/mariadb-mysql-kbs/commit/dc34e69cf2358156b79913010afd221337a3f1f8) ci: update some commands -- [c304be5](https://github.com/williamdes/mariadb-mysql-kbs/commit/c304be5bddc74d02b991aa21a001667f66fa39a4) ci: use actions/cache@v2 -- [5e0e575](https://github.com/williamdes/mariadb-mysql-kbs/commit/5e0e57542b669cbaf125160e3ea62ce08389a9dd) chore: update phpstan config -- [bd06752](https://github.com/williamdes/mariadb-mysql-kbs/commit/bd067524ca5e0f38fe444d580f38a44f41399d86) chore: upgrade dependabot to v2 -- [b945b95](https://github.com/williamdes/mariadb-mysql-kbs/commit/b945b95fc7944800eb960a7f7e09c0d6319ddcc5) chore: upgrade @sudo-bot/sudo-bot to ^1.2.3 -- [9d4752e](https://github.com/williamdes/mariadb-mysql-kbs/commit/9d4752ebb4be10870363eb70e105b96693fecbd9) chore: upgrade @sudo-bot/sudo-bot to ^1.2.2 -- [ef3e911](https://github.com/williamdes/mariadb-mysql-kbs/commit/ef3e911dba1d68f9877f82ed0f3b9e9ffced1ccf) chore: upgrade @sudo-bot/sudo-bot to ^1.2.1 -- [87feee1](https://github.com/williamdes/mariadb-mysql-kbs/commit/87feee104b810e70869495a705111518f871875a) chore: improve doctum config -- [5ae8538](https://github.com/williamdes/mariadb-mysql-kbs/commit/5ae85389ce9fd94992dda42bac6583316a448316) ci: make the script render instead of parse -- [ce383e6](https://github.com/williamdes/mariadb-mysql-kbs/commit/ce383e63f65da54ea1cbfbfef491035a4533c59f) chore: upgrade crawler and mocha -- [2444a8d](https://github.com/williamdes/mariadb-mysql-kbs/commit/2444a8d4a8ed7c8c8778655a488f63f0b6708c86) chore: upgrade @sudo-bot/sudo-bot to ^1.2.0 -- [5cb8e6f](https://github.com/williamdes/mariadb-mysql-kbs/commit/5cb8e6f332462831a04ae265bf8371a9f95daa34) ci: upgrade sudo-bot/action-pull-request-merge to 1.1.1 -- [390ee9c](https://github.com/williamdes/mariadb-mysql-kbs/commit/390ee9cc96c7137476ea7b4c4a90ca4c39319c94) ci: Ignore php 8.0 because of phpunit -- [7f72d9c](https://github.com/williamdes/mariadb-mysql-kbs/commit/7f72d9c4b39b9ef0190b434801d2cc56d9faeb76) ci: add php 7.4 and 8.0 to the matrix -- [5ca10f0](https://github.com/williamdes/mariadb-mysql-kbs/commit/5ca10f0a9615bae11e22d27f2c37bf9836b9cfa7) ci: remove the need of upload token, upgrade shivammathur/setup-php to v2 -- [d37a838](https://github.com/williamdes/mariadb-mysql-kbs/commit/d37a838ff32938de91d94669cfb4370dc121e829) chore: change php versions requirements from ^7.1 to >=7.1 -- [0d21cc7](https://github.com/williamdes/mariadb-mysql-kbs/commit/0d21cc7306fc45d87d02fe33bfb372c8817346f5) chore: upgrade some dependencies to require recent versions -- [c4c75df](https://github.com/williamdes/mariadb-mysql-kbs/commit/c4c75df0bd0a2ba4e0d27c18b26b17bedfb1e7f5) chore: upgrade dependencies - -## [v1.2.10] - -### Changed - -- [8b61506](https://github.com/williamdes/mariadb-mysql-kbs/commit/8b61506fe329efcfaaa6b66e969ba23248c52dd6) update: [MariaDB] updates and other changes -- [3826dad](https://github.com/williamdes/mariadb-mysql-kbs/commit/3826dad219b15ff3f6cc0aabd85a4b8f30bf9b17) update: [MariaDB] updates -- [3300c03](https://github.com/williamdes/mariadb-mysql-kbs/commit/3300c03b0a24f742be901960bd87d6e4c984a8e3) update: [MariaDB] updates -- [dd877a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/dd877a282f24f44bd58ccc69424f2181cd1add20) update: [MySQL] updates - -### Features - -- [969103e](https://github.com/williamdes/mariadb-mysql-kbs/commit/969103e09c5550bead53592755b5bed058a945cb) feat: exclude some files from git archive version of the repo "export-ignore" -- [f564f47](https://github.com/williamdes/mariadb-mysql-kbs/commit/f564f47d03459a2eab97c79aa1290b9d39fa93ac) feat: move all commands to yarn -- [4ac523a](https://github.com/williamdes/mariadb-mysql-kbs/commit/4ac523abc11da0de15cb2defd1639562cea98449) feat: move to yarn - -### Others - -- [937d0d1](https://github.com/williamdes/mariadb-mysql-kbs/commit/937d0d1904a43e5f1c6bb0412979bf7d53e0fa71) chore: remove codecov npm dependency - -## [v1.2.9] - -### Added - -- [d9742f4](https://github.com/williamdes/mariadb-mysql-kbs/commit/d9742f4bb8e6962c5149c725a7baadf5a79da359) add: Travis CI cron -- [403f751](https://github.com/williamdes/mariadb-mysql-kbs/commit/403f751af50c2a7c5d8c57cffbee552e6c8b7cf1) add: Workflows -- [fad58a0](https://github.com/williamdes/mariadb-mysql-kbs/commit/fad58a0793ac5279de779371cf9429f85a5f12ca) add: get clean type from mixed string -- [58f6ce1](https://github.com/williamdes/mariadb-mysql-kbs/commit/58f6ce174bf326e91345509ee49703b234af503d) add: test case 4 before type detection enhancement - -### Changed - -- [4d67c9c](https://github.com/williamdes/mariadb-mysql-kbs/commit/4d67c9c891aaa9576faf635a8c2acde506a29826) update: [MySQL] updates and other changes -- [3231ac4](https://github.com/williamdes/mariadb-mysql-kbs/commit/3231ac4cc4a4497c45580686bf2d587141a860e8) update: [MySQL] updates -- [a50744f](https://github.com/williamdes/mariadb-mysql-kbs/commit/a50744f4555c79200e80ae8a104f47e99980fb80) update: [MySQL] updates -- [034b517](https://github.com/williamdes/mariadb-mysql-kbs/commit/034b517927997297f2bc07eb700dc71003fa51f2) update: [MySQL] updates -- [a551a29](https://github.com/williamdes/mariadb-mysql-kbs/commit/a551a299b11b50ab0e282741976bd49adf8eca67) update: [MariaDB] updates -- [af7a10c](https://github.com/williamdes/mariadb-mysql-kbs/commit/af7a10cb89c1df513dff2e697f850fae6af6e113) update: [MariaDB] updates -- [7a979e2](https://github.com/williamdes/mariadb-mysql-kbs/commit/7a979e26722661e4faa78c0ee04b65b37f6ebeeb) update: [MySQL] updates - -### Removed - -- [fd20335](https://github.com/williamdes/mariadb-mysql-kbs/commit/fd203354b733a73d42d70c360724b0e5d08523fb) remove: release script - -### Fixed - -- [4c7126f](https://github.com/williamdes/mariadb-mysql-kbs/commit/4c7126ff4ff9c035351549ae7c0808cef3848a45) fix: use new build command and convention for changelog-generator-twig -- [ed7158c](https://github.com/williamdes/mariadb-mysql-kbs/commit/ed7158c890e0b5b7d6b4306520503189e5305348) fix: Improve docs generation script -- [4176e94](https://github.com/williamdes/mariadb-mysql-kbs/commit/4176e9440dd3d556d32d9479142b19565b51062e) fix: phpdoc errors reported by phpstan -- [8369147](https://github.com/williamdes/mariadb-mysql-kbs/commit/8369147444eb5b488b748b598df611c58c56bb21) fix: phpdoc block -- [3faaae7](https://github.com/williamdes/mariadb-mysql-kbs/commit/3faaae71a507438aba3d8c8f2fbdab64bc104c6b) fix: Use version 1.0.5 of sudo-bot/action-pull-request-lock -- [4b06ebe](https://github.com/williamdes/mariadb-mysql-kbs/commit/4b06ebe880fd33e4749cf96b261677f313def6da) fix: test case 4 after adding support for 'type: default, range' in MySQL pages - -### Features - -- [6e928c7](https://github.com/williamdes/mariadb-mysql-kbs/commit/6e928c70e38780007b145800e240f8f747b1578d) feat: Add a release script -- [03809c5](https://github.com/williamdes/mariadb-mysql-kbs/commit/03809c5af460f1c806826dd2a6308d99719bcb4b) feat: make Swaggest\JsonSchema\Schema optional for Debian packaging vendors -- [22744bb](https://github.com/williamdes/mariadb-mysql-kbs/commit/22744bb96b45aef525119dfc9cef2fcdd9650d98) feat: get rid of the url:: resolver to make the vendor optional -- [ab4a210](https://github.com/williamdes/mariadb-mysql-kbs/commit/ab4a2109604528b40581ac4a036d219f8feef7ce) feat: added sign-release script -- [7e58e57](https://github.com/williamdes/mariadb-mysql-kbs/commit/7e58e571772d4bfff49c628876eaaae7e32f1f99) feat: Improve sudo-bot template file -- [668f1a0](https://github.com/williamdes/mariadb-mysql-kbs/commit/668f1a014870202ea994404baedbb6d60bae1676) feat: Add docs build and PR -- [530f0c1](https://github.com/williamdes/mariadb-mysql-kbs/commit/530f0c148d180430329d01a8788389b51c2334de) feat: Add packaging status badge from repology -- [0e37662](https://github.com/williamdes/mariadb-mysql-kbs/commit/0e37662ab711fd99c2948057d219cf878b2c7980) feat: Add workflow to lock a closed pull-request -- [8c65961](https://github.com/williamdes/mariadb-mysql-kbs/commit/8c659616e3a7fe7c264e234bcc983b06de9a5585) feat: Add script to trigger a workflow -- [74fbc90](https://github.com/williamdes/mariadb-mysql-kbs/commit/74fbc90329639523581617c693a04f4b6a4a797a) feat: support 'type: default, range' in MySQL pages - -### Others - -- [89c3397](https://github.com/williamdes/mariadb-mysql-kbs/commit/89c339730a3728dd35dbbc8018464fba5688c652) chore: remove /schemas folder for dist archives (composer) -- [976d936](https://github.com/williamdes/mariadb-mysql-kbs/commit/976d936f6dd8a8cc8002e2d254df91315401025a) chore: remove /target folder for dist archives (rust support) -- [7634363](https://github.com/williamdes/mariadb-mysql-kbs/commit/7634363f0ab12eddf80aba61f04483da53c0412c) chore: Add .gitattributes to ignored dir for dist archives -- [73dfae0](https://github.com/williamdes/mariadb-mysql-kbs/commit/73dfae02cf268b03972fc0e5b4c869375e372717) chore: move tests to a more standard place -- [dc37421](https://github.com/williamdes/mariadb-mysql-kbs/commit/dc374211df97b2187317028a40171d5adc39bfa3) chore: simplify phpunit version regex -- [9fc286a](https://github.com/williamdes/mariadb-mysql-kbs/commit/9fc286ab32ca693c5978474495a66b3f737edb6e) ci: Add merge pull-request workflow -- [44d115e](https://github.com/williamdes/mariadb-mysql-kbs/commit/44d115ed3d27355b75f3d6e081411c18003f0049) ci: add --no-interaction and fix docs build -- [a1596a5](https://github.com/williamdes/mariadb-mysql-kbs/commit/a1596a526084da7df3212cf26876950d7560436b) chore: update phpstan/phpstan to 0.12 -- [f96a3d1](https://github.com/williamdes/mariadb-mysql-kbs/commit/f96a3d19220bc4444629520a40e2d27785e8f46e) chore: update slevomat/coding-standard to 6.0 -- [6248da5](https://github.com/williamdes/mariadb-mysql-kbs/commit/6248da5b030f35b6e6adde216e173d2534024129) chore: Update docs submodule -- [f3ac5ee](https://github.com/williamdes/mariadb-mysql-kbs/commit/f3ac5ee6b54ca2557a1822947776787d00c90a4d) chore: replace badge in README.md -- [42cf92f](https://github.com/williamdes/mariadb-mysql-kbs/commit/42cf92ffc22dc973420586dadf643693312efa23) ci: finish migration to GitHub actions -- [f0cb417](https://github.com/williamdes/mariadb-mysql-kbs/commit/f0cb417661ecdd039dbeccb10873fe2fe722da59) ci: remove all TravisCI files - -## [v1.2.8] - -### Added - -- [8ca6999](https://github.com/williamdes/mariadb-mysql-kbs/commit/8ca6999e1487a9f43846530a3cc241ef7109b5bf) add: .gitattributes file - -### Changed - -- [b4afbca](https://github.com/williamdes/mariadb-mysql-kbs/commit/b4afbcabc7b40ebfb5b072de568f60063cf86adb) update: dependencies -- [856b39c](https://github.com/williamdes/mariadb-mysql-kbs/commit/856b39cbc7027bfee0f22c661960f694bbf08b32) update: [MySQL] updates -- [9d7b3c3](https://github.com/williamdes/mariadb-mysql-kbs/commit/9d7b3c3b973a3b0fa8fae5adc25f5ef02909203d) update: .gitattributes file -- [9eab800](https://github.com/williamdes/mariadb-mysql-kbs/commit/9eab8008ee3fc91c8817e744fc3755e7815cee47) update: .gitattributes file -- [530c6a6](https://github.com/williamdes/mariadb-mysql-kbs/commit/530c6a68d0f12eca9f1b0f4fd0f7d55f825847ae) update: [MariaDB] updates -- [53bae92](https://github.com/williamdes/mariadb-mysql-kbs/commit/53bae92f735f39271c881858074961fe3bc2e39e) update: [MariaDB] && [MySQL] updates -- [aeb2ffd](https://github.com/williamdes/mariadb-mysql-kbs/commit/aeb2ffd26fb7810d16a92330978f87f06da280a7) update: [MariaDB] && [MySQL] updates -- [fd9ac5e](https://github.com/williamdes/mariadb-mysql-kbs/commit/fd9ac5e27e321e4625150e70dac8cb645fcfbfb6) update: [MariaDB] && [MySQL] updates -- [0860955](https://github.com/williamdes/mariadb-mysql-kbs/commit/0860955d111d44d4e0a6ee3e8392724cbfc32e2a) update: dependencies -- [215fcf3](https://github.com/williamdes/mariadb-mysql-kbs/commit/215fcf3849a0441c55abd64d7f56119428994218) update: [MySQL] updates -- [0434d0a](https://github.com/williamdes/mariadb-mysql-kbs/commit/0434d0a918087e1f0f3679ba007ab12d06b6c00d) update: [MySQL] updates -- [9a65d87](https://github.com/williamdes/mariadb-mysql-kbs/commit/9a65d879cbb67aaf34450d518b6df3d651ee23f5) update: [MariaDB] && [MySQL] updates -- [6f6f19f](https://github.com/williamdes/mariadb-mysql-kbs/commit/6f6f19fd404bee47239fe6648bca607ceb0b97e0) update: dependencies - -### Fixed - -- [baee0c0](https://github.com/williamdes/mariadb-mysql-kbs/commit/baee0c02d1428d8d1c8d7e0824bdb5463e68cc7f) fix: some MySQL and MariaDB fixes -- [185ebb2](https://github.com/williamdes/mariadb-mysql-kbs/commit/185ebb223ba0904e65395f226a13b3bc708014fb) fix: cleanCli undefined - -### Features - -- [14d2a95](https://github.com/williamdes/mariadb-mysql-kbs/commit/14d2a95d61e0c1831e82d0a8d2c67132c18de4d8) feat: add tests for MySQL parser -- [228ee4a](https://github.com/williamdes/mariadb-mysql-kbs/commit/228ee4aba365dea063806c059a96c2d7c3c7902a) feat: Add cleaner for default values - -## [v1.2.7] - -### Changed - -- [6416780](https://github.com/williamdes/mariadb-mysql-kbs/commit/64167803686aff4090f72a6d89826364b1d88d7d) update: package version to 1.2.7 -- [520d89c](https://github.com/williamdes/mariadb-mysql-kbs/commit/520d89cbe75a088444e3536e7a2f0be31449efba) update: [security] bump lodash from 4.17.11 to 4.17.14 -- [cf60c43](https://github.com/williamdes/mariadb-mysql-kbs/commit/cf60c43cc4e7d7c284fa5181707343145f2d88f5) update: [security] bump lodash.merge from 4.6.1 to 4.6.2 -- [dfda544](https://github.com/williamdes/mariadb-mysql-kbs/commit/dfda544ecf47bf8cd995e3aebfb445d07f25bf5c) update: [MariaDB] && [MySQL] updates -- [4b31b18](https://github.com/williamdes/mariadb-mysql-kbs/commit/4b31b18c50a25f3e32a19d2b13218ef18166daa8) update: [MariaDB] && [MySQL] updates and other changes - -## [v1.2.6] - -### Added - -- [1c5ccf2](https://github.com/williamdes/mariadb-mysql-kbs/commit/1c5ccf288d2f96e8e18451bf17964de4bc8f38f4) add: SECURITY.md -- [61a933f](https://github.com/williamdes/mariadb-mysql-kbs/commit/61a933f6e0d67f4287ba73243f2d69417b76f609) added: dependencies up to date badge -- [a55aa0c](https://github.com/williamdes/mariadb-mysql-kbs/commit/a55aa0c33ed0f9a70921a5b5ee205f3a79442413) added: php lint to CI and removed apt cache key -- [b3edac6](https://github.com/williamdes/mariadb-mysql-kbs/commit/b3edac617d653623b1840f7dbc89bac9276c3f82) add: .phpunit.result.cache to ignores -- [77830b6](https://github.com/williamdes/mariadb-mysql-kbs/commit/77830b64be3803c7880702e0ba900d5946a11501) add: test command to composer.json -- [0daf1a8](https://github.com/williamdes/mariadb-mysql-kbs/commit/0daf1a866d8ae22033297df652e6795052ab2ebe) added: jshint to dev dependencies -- [3987131](https://github.com/williamdes/mariadb-mysql-kbs/commit/398713113a0387a3b666d52c55766a8dbb8bbad5) added: .jshintignore - -### Changed - -- [09de4e1](https://github.com/williamdes/mariadb-mysql-kbs/commit/09de4e1288b236fb38686f926c5567b88d2bb661) update: prettier from 1.17.1 to 1.18.2 -- [e4a96c9](https://github.com/williamdes/mariadb-mysql-kbs/commit/e4a96c94f85ca7e1fefe3a93761d20895790f857) update: package version to 1.2.6 -- [57a2f9c](https://github.com/williamdes/mariadb-mysql-kbs/commit/57a2f9cac2a45792cdc1ae214bc33308614cf9f2) update: [MariaDB] && [MySQL] updates -- [1ba2bdd](https://github.com/williamdes/mariadb-mysql-kbs/commit/1ba2bdd21b634d29aff5dd4dd0620e24b4fee2c7) update: [MariaDB] && [MySQL] updates -- [10e8854](https://github.com/williamdes/mariadb-mysql-kbs/commit/10e88548866862ef2c4313ec591c075ac7d70fa6) update: .travis.yml -- [414e4a6](https://github.com/williamdes/mariadb-mysql-kbs/commit/414e4a670f64056824c9712d6d3f067fcd27c6bc) update: @sudo-bot from 1.1.7 to 1.1.8 -- [2f8f42c](https://github.com/williamdes/mariadb-mysql-kbs/commit/2f8f42c8ceeae3c3cfdaeebd93d5ac299fad2c0e) update: @sudo-bot from 1.1.6 to 1.1.7 -- [9477c48](https://github.com/williamdes/mariadb-mysql-kbs/commit/9477c4866349d8e997ffd534a53297bd88e4b690) update: @sudo-bot from 1.1.5 to 1.1.6 -- [824f4f0](https://github.com/williamdes/mariadb-mysql-kbs/commit/824f4f01517dbf5e0654d486402545001d3f2015) update: [MySQL] data -- [55d6f72](https://github.com/williamdes/mariadb-mysql-kbs/commit/55d6f72913e24c2f32f2c9c3df285ba117f10f8a) update: [MariaDB] data -- [f679d22](https://github.com/williamdes/mariadb-mysql-kbs/commit/f679d2207b5c8d99044471de6e492b3ccd5b4a78) updated: dependencies and package-lock.json -- [46f52d8](https://github.com/williamdes/mariadb-mysql-kbs/commit/46f52d8c91a332480b7f5907d28fea3e391662df) update: [MySQL] data -- [22a609b](https://github.com/williamdes/mariadb-mysql-kbs/commit/22a609b4072296a943102965f79b6e9a2be61fc2) updated: swaggest/json-schema from 0.12.3+ to 0.12.9+ & phpunit command -- [18d2e32](https://github.com/williamdes/mariadb-mysql-kbs/commit/18d2e3237f3ed8a316fe3c4c2683012196b2ac9d) update: [MySQL] data -- [c5cafc6](https://github.com/williamdes/mariadb-mysql-kbs/commit/c5cafc66b59aee56e0db8ca42a0ddb8e0fc14f7e) update: [MariaDB] && [MySQL] updates -- [b2f66ca](https://github.com/williamdes/mariadb-mysql-kbs/commit/b2f66ca3851a5908d491769cacb4cbc726c558bd) updated: dependencies and package-lock.json -- [ac490c2](https://github.com/williamdes/mariadb-mysql-kbs/commit/ac490c2c6f3b7267fb72cb06d7990e547dd435d3) update: @sudo-bot cron script and README.md -- [13b93dc](https://github.com/williamdes/mariadb-mysql-kbs/commit/13b93dc37cb2f2e1d5ebfe6cc990a1065920da7a) update: [MariaDB] && [MySQL] updates -- [a9ddf62](https://github.com/williamdes/mariadb-mysql-kbs/commit/a9ddf62d554500b04a52ca0d425cceab955a656a) updated: prettier and mocha dependencies -- [1df9f60](https://github.com/williamdes/mariadb-mysql-kbs/commit/1df9f6031d72257f4b2e5223ed78d3ded32bfa6a) update: [MariaDB] && [MySQL] updates -- [1862d41](https://github.com/williamdes/mariadb-mysql-kbs/commit/1862d4158b6b285da798b9919af39686de683205) updated: sudo-bot and codecov npm dependencies -- [d2c8b8e](https://github.com/williamdes/mariadb-mysql-kbs/commit/d2c8b8ebdcdc603084c4235e78f93fd4c9f24c8d) update: [MySQL] updates - -### Removed - -- [f2d43b0](https://github.com/williamdes/mariadb-mysql-kbs/commit/f2d43b099df2442e5599130c86a72200811c4dbf) removed: spy script (useless) - -### Fixed - -- [4277ed2](https://github.com/williamdes/mariadb-mysql-kbs/commit/4277ed250f2500cb4c47253796f35dfba69d88b2) fix: alert detected by lgtm -- [6d386ce](https://github.com/williamdes/mariadb-mysql-kbs/commit/6d386ce5f1a7f225dd8b38f82f7a0c4aa2f3bdd2) fix: CI @sudo-bot script -- [b8ab559](https://github.com/williamdes/mariadb-mysql-kbs/commit/b8ab5592c5d54a35a6767b3a10c26d7fd53a7689) fix: MariaDB script -- [2362512](https://github.com/williamdes/mariadb-mysql-kbs/commit/2362512aa8da242158303620d4d2509229769e85) fix: move crawler to dev-dependencies -- [f106ca1](https://github.com/williamdes/mariadb-mysql-kbs/commit/f106ca1f2e2e6ba92bbae29bf343de90b0292717) fix: CI and .gitignore and phpstan command -- [ba2631e](https://github.com/williamdes/mariadb-mysql-kbs/commit/ba2631e1fd3265e58764ee06ce1a8bc37ab11813) fix: cleaner and add tests -- [e80c410](https://github.com/williamdes/mariadb-mysql-kbs/commit/e80c410f72cb8f899cab74eb72026db1026e6457) fix: @sudo-bot CI -- [a7cf7bd](https://github.com/williamdes/mariadb-mysql-kbs/commit/a7cf7bdf0a9ce4e49d6f7b56e26a58c71fa79ec0) fix: remove renamed file -- [8fd2d9f](https://github.com/williamdes/mariadb-mysql-kbs/commit/8fd2d9fc7a0507f35a44266a0c1a84f927f1a770) fix: @sudo-bot CI -- [cc7aac7](https://github.com/williamdes/mariadb-mysql-kbs/commit/cc7aac74f2ba0341661b65ab49b65ebd1afd1e41) fixed: CI reporting for non mocha tests -- [b40a61b](https://github.com/williamdes/mariadb-mysql-kbs/commit/b40a61bd0c0d3a2ecf3bdf6532bee02009fc1245) fix: @sudo-bot use 'npm ci' when package-lock.json exists -- [43b8e95](https://github.com/williamdes/mariadb-mysql-kbs/commit/43b8e95d27bfdba9a242b04c7e105e418a7fc816) fix: CI rename style to lint -- [7bb4a5b](https://github.com/williamdes/mariadb-mysql-kbs/commit/7bb4a5b6f6e062e775b6a54ab30a6d86528916a0) fixed: jshint setup -- [9143014](https://github.com/williamdes/mariadb-mysql-kbs/commit/91430143cc7687ca6650761b66f20ea39ff9ebc8) fixed: .npmignore - -### Improvements - -- [b4d600b](https://github.com/williamdes/mariadb-mysql-kbs/commit/b4d600b77993743c52b2f962b444a54be34b1107) improved: Improved extraction process and fixed bugs -- [7e81a29](https://github.com/williamdes/mariadb-mysql-kbs/commit/7e81a2943dd7bb6bfa369f056548b3239b9fbbaf) improved: move MariaDB and MySQL script to crawler and jquery -- [8190342](https://github.com/williamdes/mariadb-mysql-kbs/commit/8190342314ab1fa767c25b3960d2f8c17660a145) improved: Replace jsdom by crawler -- [be05dea](https://github.com/williamdes/mariadb-mysql-kbs/commit/be05dea67bb8cbc8f0ebb766d6236fdcfd89fea3) improved: CI install of npm and composer packages -- [e4b65db](https://github.com/williamdes/mariadb-mysql-kbs/commit/e4b65dbc851f623564afb3464014dc4ff49ada52) improved: Moved phpcs and phpcbf commands to composer -- [53bd313](https://github.com/williamdes/mariadb-mysql-kbs/commit/53bd31394c5b4a3f42692a54933f083d94347e9b) improved: Use namespace for tests -- [97f6095](https://github.com/williamdes/mariadb-mysql-kbs/commit/97f609580f412cdcd38ff61b20bfa69507661e60) improved: schemas testing -- [ed45a4d](https://github.com/williamdes/mariadb-mysql-kbs/commit/ed45a4db9216193a1e9ef42ea06a11fdd1c089ab) improved: added tests for each .json file format -- [5b51377](https://github.com/williamdes/mariadb-mysql-kbs/commit/5b51377f96821bb8778cf301f05d8573ea873c52) improved: Use phpunit for exception expectations -- [e646cd4](https://github.com/williamdes/mariadb-mysql-kbs/commit/e646cd4118a57131b99bdd8ac3d4d15b700b0ca4) improved: Move spy to cleaner and add tests -- [bc65814](https://github.com/williamdes/mariadb-mysql-kbs/commit/bc658145bde334580b3b495211081aa361099a4f) improved: extract scripts and use Promise and callbacks - -## [v1.2.5] - -### Added - -- [046c3fe](https://github.com/williamdes/mariadb-mysql-kbs/commit/046c3fe15cbf57d89e283b62f5a8b03c576a0337) added: php7.3 and osx php7.3 to test matrix -- [2491c41](https://github.com/williamdes/mariadb-mysql-kbs/commit/2491c415adaa65ab37b47d52cfb322d95fe7767d) added: snyk and dependabot to README.md -- [3fa4313](https://github.com/williamdes/mariadb-mysql-kbs/commit/3fa43131b44f8b5407bb63411589ffa61dcb75b9) added: dependabot config -- [571ccf3](https://github.com/williamdes/mariadb-mysql-kbs/commit/571ccf3edc1b3b5cfa0245d5518063a9434d0835) added: LGTM and fixed changelog -- [a068fde](https://github.com/williamdes/mariadb-mysql-kbs/commit/a068fde4a0421f96d4e1897170b409d638f9aabe) added: merged data and tests to PR template -- [effd148](https://github.com/williamdes/mariadb-mysql-kbs/commit/effd1487a0227d1092455838abd73e145808fd01) added: template for sudo-bot and mocha -- [d17883b](https://github.com/williamdes/mariadb-mysql-kbs/commit/d17883bc5b41d187f9c3132a8577fd470fb3213e) added: sudo-bot - -### Changed - -- [44264b0](https://github.com/williamdes/mariadb-mysql-kbs/commit/44264b03e02d0908749b696f68721fac99cbd133) update: package version to 1.2.5 -- [97ec035](https://github.com/williamdes/mariadb-mysql-kbs/commit/97ec035605cca060e3b7abf92d46ada85465a6d2) update: [MySQL] updates -- [9eb743f](https://github.com/williamdes/mariadb-mysql-kbs/commit/9eb743f65f4a1fbc80abab0247fe6e3896c98930) update: commit message format -- [5366e10](https://github.com/williamdes/mariadb-mysql-kbs/commit/5366e10a0625fa9f95f7eac7a43dfb9af43f72b6) updated: package-lock.json and package.json and changelog -- [2786d1a](https://github.com/williamdes/mariadb-mysql-kbs/commit/2786d1a5c98dd3b93bfca8706cc9d7e92b1770a7) updated: MySQL data -- [9cffbf6](https://github.com/williamdes/mariadb-mysql-kbs/commit/9cffbf64046836229d9c3f83674b213848833036) updated: MariaDB data -- [13d7ba4](https://github.com/williamdes/mariadb-mysql-kbs/commit/13d7ba4510e9957352790a02551eb247f4b17ad6) updated: composer.json && updated: composer.lock -- [7e80648](https://github.com/williamdes/mariadb-mysql-kbs/commit/7e80648f583ce760ab717a0a942bd6f576ede4bc) updated: composer.lock -- [affedaf](https://github.com/williamdes/mariadb-mysql-kbs/commit/affedaf9c5762fc01c5b6084b31f321de5e50140) updated: package-lock.json and dependabot config -- [0f8b1a0](https://github.com/williamdes/mariadb-mysql-kbs/commit/0f8b1a05978fc5d0573c0eacc23a97df17cc032e) updated: changelog 📖 -- [e031ee1](https://github.com/williamdes/mariadb-mysql-kbs/commit/e031ee1af193878dfccf7892c2aa553bc76f4f00) updated: package.json & package-lock.json -- [b4675f3](https://github.com/williamdes/mariadb-mysql-kbs/commit/b4675f313ad67ef4bee7a661014d0ffcf9911bd2) updated: sudo-bot -- [dd0ff5c](https://github.com/williamdes/mariadb-mysql-kbs/commit/dd0ff5c9448f65dde6d5ef829589e2115292aa20) updated: [MySQL] & [MariaDB] data -- [852b3a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/852b3a2a527f620310fe2b90877d15ef315a60c9) updated: composer.lock and package-lock.json and updated package.json -- [ef766fd](https://github.com/williamdes/mariadb-mysql-kbs/commit/ef766fd9991e4fd1e80bb7b14abb2a352ecd4689) updated: changelog 📖 - -### Removed - -- [16a3d25](https://github.com/williamdes/mariadb-mysql-kbs/commit/16a3d259263d00eab648fa9bce2249e993be0aeb) removed: composer.lock -- [b0f997d](https://github.com/williamdes/mariadb-mysql-kbs/commit/b0f997d2abc033740a35d14cf16982356b207f16) removed: old changelog script -- [ab83775](https://github.com/williamdes/mariadb-mysql-kbs/commit/ab83775286f122b186526c106079e798525ca307) removed: deploy on tag - -### Fixed - -- [741b07e](https://github.com/williamdes/mariadb-mysql-kbs/commit/741b07e927b55cf35e918085462e0052153ff8dc) fix: .npmignore .gitignore and composer archive ignore -- [3e5ca71](https://github.com/williamdes/mariadb-mysql-kbs/commit/3e5ca71a782aeedd4e6a726ae1737905ca74d7e6) fix: composer non feature branches and nyc coverage -- [b00a8b0](https://github.com/williamdes/mariadb-mysql-kbs/commit/b00a8b09496f193c3289bf6f3c2ece4cd3a95967) fix: osx CI -- [9ac6e9b](https://github.com/williamdes/mariadb-mysql-kbs/commit/9ac6e9bf898de7760f7f53ddabdc28a2c5a548bb) fixed: changelog -- [127889d](https://github.com/williamdes/mariadb-mysql-kbs/commit/127889df59911291084b8b7815b98519002abd04) fixed: changelog -- [2b23349](https://github.com/williamdes/mariadb-mysql-kbs/commit/2b23349f867450f308a37045486ac6b61eb25a99) fixed: Travis CI -- [5377cec](https://github.com/williamdes/mariadb-mysql-kbs/commit/5377cec845b0cc0888a23a8185e24553f7c2a476) fixed: NPM package name in README.md -- [1b433f8](https://github.com/williamdes/mariadb-mysql-kbs/commit/1b433f8f30c6f1cb4ad42540f869614f13239fbb) fixed: nyc coverage -- [2f24409](https://github.com/williamdes/mariadb-mysql-kbs/commit/2f244099934d2d125d01d55dbe5c2388c09693ff) fixed: Coverage report and ignore files -- [8bee75a](https://github.com/williamdes/mariadb-mysql-kbs/commit/8bee75af85dc02e8be72fae9ff9e29c0670c7b77) fixed: CI coverage -- [ae75ce8](https://github.com/williamdes/mariadb-mysql-kbs/commit/ae75ce8c4fd44cdae42748f3ab769cdd0401868c) fixed: CI & mocha tests installation -- [8fa12ea](https://github.com/williamdes/mariadb-mysql-kbs/commit/8fa12eaab4a917677828a4f12f0b07f936c8a023) fixed: composer namespace -- [ee2c058](https://github.com/williamdes/mariadb-mysql-kbs/commit/ee2c05800e170ed0743b5905db43450359ca10e6) fixed: travis CI and other files -- [a4974c5](https://github.com/williamdes/mariadb-mysql-kbs/commit/a4974c5050132cd38945d2c639fdd614fb080d11) fix: OSX CI -- [a6a9ed8](https://github.com/williamdes/mariadb-mysql-kbs/commit/a6a9ed8d17fc672413bbebc5908928a1ad80a679) fix: OSX on CI -- [4762da9](https://github.com/williamdes/mariadb-mysql-kbs/commit/4762da9723c8da0378d990a3a9062b89ac71f4f6) fixed: npm ignore - -### Improvements - -- [f4cd7a0](https://github.com/williamdes/mariadb-mysql-kbs/commit/f4cd7a000f32939649796c8880f34dc2c8ceee93) style: prettier -- [40ca56a](https://github.com/williamdes/mariadb-mysql-kbs/commit/40ca56af22aafc5fc314e1c1dee7520ae2cf69b9) style: prettier on changelog.js - -## [v1.2.4] - -### Added - -- [5c00bb6](https://github.com/williamdes/mariadb-mysql-kbs/commit/5c00bb63e8423d092b5e21689e14ee83e9fc918f) added: deploy on tag -- [83b9b19](https://github.com/williamdes/mariadb-mysql-kbs/commit/83b9b19fe47b2a62065c5c3f3f67d1582b6554f1) added: Travis CI labels -- [00a10ea](https://github.com/williamdes/mariadb-mysql-kbs/commit/00a10eab8e00aaa0d073062957de291a02a472e5) added: sudo-bot cron script :factory: -- [071ef1d](https://github.com/williamdes/mariadb-mysql-kbs/commit/071ef1d991a718e972cf551f962e9a5f7b2f51c3) added: CODEOWNERS :lock: -- [4f71020](https://github.com/williamdes/mariadb-mysql-kbs/commit/4f7102047f310df55c85b0967aa872ada8d9fec5) added: [MariaDB] system-versioned-tables - -### Changed - -- [3092bc0](https://github.com/williamdes/mariadb-mysql-kbs/commit/3092bc0a3d03d580466b86de4036130e644ec94d) updated: composer.json & package.json - version 1.2.4 -- [797b1f3](https://github.com/williamdes/mariadb-mysql-kbs/commit/797b1f304443c18076cfa5e910af8c5f23703601) updated: [MySQL] & [MariaDB] data -- [c999377](https://github.com/williamdes/mariadb-mysql-kbs/commit/c9993779f679c7b02161977b6733706b7e793f08) updated: [MySQL] data -- [03d5d6e](https://github.com/williamdes/mariadb-mysql-kbs/commit/03d5d6ea73e29023466449021cb5441b67ffeea6) updated: [MariaDB] data -- [68f2187](https://github.com/williamdes/mariadb-mysql-kbs/commit/68f2187842df8cba506394ccbbb3ddcc7bc401fc) updated: changelog :book: - -### Fixed - -- [247f98b](https://github.com/williamdes/mariadb-mysql-kbs/commit/247f98b3d21ddd43d336e9f62af5808980bc3806) fixed: OSX tests -- [10e4ff6](https://github.com/williamdes/mariadb-mysql-kbs/commit/10e4ff6ff34c65248815d64c2699e5f2f7847c24) fixed: typo -- [cb792c8](https://github.com/williamdes/mariadb-mysql-kbs/commit/cb792c8133d5c48116d940a3e92657c51f8b4f64) fixed: npm ignore - -## [v1.2.3] - -### Added - -- [03cb762](https://github.com/williamdes/mariadb-mysql-kbs/commit/03cb7629b06f8d64e7b6ebced942a10d3d59c410) added: json schema validation for merged-ultraslim.json -- [fd46f68](https://github.com/williamdes/mariadb-mysql-kbs/commit/fd46f68ba96ffe28c53eeda1c2e41bb9e157d936) added: swaggest/json-schema - -### Changed - -- [8076644](https://github.com/williamdes/mariadb-mysql-kbs/commit/80766444c4443ba3101e4da6d0b3cfeef3c06351) updated: composer.json & package.json - version 1.2.3 -- [9bd0602](https://github.com/williamdes/mariadb-mysql-kbs/commit/9bd06026ca172822f806a7d0625b2ddf85e47e54) updated: api docs :book: -- [fb2f2f6](https://github.com/williamdes/mariadb-mysql-kbs/commit/fb2f2f6f6cdba32d4518529a272cbbf3ed37391f) updated: changelog :book: -- [6696ca7](https://github.com/williamdes/mariadb-mysql-kbs/commit/6696ca745ce172a24d1fb5ae1fefe82ae10b222a) updated: merged data -- [143e1f2](https://github.com/williamdes/mariadb-mysql-kbs/commit/143e1f24f559469f2f13bab7da5366d59d54e2fd) updated: [MariaDB] data -- [c99e2f7](https://github.com/williamdes/mariadb-mysql-kbs/commit/c99e2f7e07faedef1db039c5fc5c7c44f5dc8c52) updated: [MySQL] data -- [c2903a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/c2903a29e2f2f60988276f21dc1f23464133ac4b) updated: composer.lock :lock: -- [5378614](https://github.com/williamdes/mariadb-mysql-kbs/commit/53786144f25bf89d0a040f3be6bc0378a17661f0) updated: changelog :book: - -### Removed - -- [2ab9b3c](https://github.com/williamdes/mariadb-mysql-kbs/commit/2ab9b3ce7aa43af77c47d0c096b3c7363203a053) removed: validate file -- [84fe040](https://github.com/williamdes/mariadb-mysql-kbs/commit/84fe040254d39f239286bbe77427298d590e5547) removed: testbench file - -### Fixed - -- [8abb014](https://github.com/williamdes/mariadb-mysql-kbs/commit/8abb01492af0b8c054cb878fa79560b774a637be) fixed: npm ignore - -### Improvements - -- [c920fd8](https://github.com/williamdes/mariadb-mysql-kbs/commit/c920fd8ea1c9a4be5d01237dd93ab3aef8caaa4e) improved: Tests :rocket: :package: - -## [v1.2.2] - -### Added - -- [e95b8dc](https://github.com/williamdes/mariadb-mysql-kbs/commit/e95b8dc10379bf00236ed0ee24abc0723b6a743a) added: phpcs rules -- [e402e0c](https://github.com/williamdes/mariadb-mysql-kbs/commit/e402e0c03086b8712b68d084bca1f5118ec282af) added: getVariable -- [4e7ae6f](https://github.com/williamdes/mariadb-mysql-kbs/commit/4e7ae6f4e2b349f25f68c028b1e5c3dab171b8b5) added: badges and install intructions :book: -- [9bed254](https://github.com/williamdes/mariadb-mysql-kbs/commit/9bed254abc3ac85b46aa8f6ddd3eb0fd03f32008) added: npm ignore -- [47c5d56](https://github.com/williamdes/mariadb-mysql-kbs/commit/47c5d56b7549050fc7b71da971cc5fc64f5790fb) added: changelog :book: -- [bbeed46](https://github.com/williamdes/mariadb-mysql-kbs/commit/bbeed466908936e25fa7685509e4b0834d2636f6) added: changelog generator :book: -- [5cf8a17](https://github.com/williamdes/mariadb-mysql-kbs/commit/5cf8a17fe58762591da828de2aeb930d55d70027) added: [MariaDB] more documentation - -### Changed - -- [5b6a4bd](https://github.com/williamdes/mariadb-mysql-kbs/commit/5b6a4bdca787a6204fd8ce9fdfffa3ea7cd43ee7) updated: composer.json & package.json + :lock: - version 1.2.2 -- [aa546c7](https://github.com/williamdes/mariadb-mysql-kbs/commit/aa546c73a3cd940d01f0866663c3a0ea99f1be4e) updated: changelog :book: -- [1777f13](https://github.com/williamdes/mariadb-mysql-kbs/commit/1777f13df5866179ce749ecb5b5c00988897f757) updated: prettier -- [e94a9db](https://github.com/williamdes/mariadb-mysql-kbs/commit/e94a9db838d678ccc3db039dccf116eb38586b2a) updated: [MySQL] & [MariaDB] data -- [59e5baa](https://github.com/williamdes/mariadb-mysql-kbs/commit/59e5baa7a31ac72c2ff4a17b5aefec40f98ed6a1) updated: release script -- [5140d06](https://github.com/williamdes/mariadb-mysql-kbs/commit/5140d062bb32ea80fe9155843d99f6a32e178782) updated: api docs -- [2bc0164](https://github.com/williamdes/mariadb-mysql-kbs/commit/2bc016434ed62141a45f3890cf5711bbd0f8755f) updated: composer.lock :lock: -- [c6cb704](https://github.com/williamdes/mariadb-mysql-kbs/commit/c6cb704b8711f2510769494362c60c63cc7cab6f) updated: composer.json & package.json -- [e2c6706](https://github.com/williamdes/mariadb-mysql-kbs/commit/e2c6706c74d9274f63f4185b108e6b335ecff14f) updated: changelog generator :book: -- [fb4cabe](https://github.com/williamdes/mariadb-mysql-kbs/commit/fb4cabe90393f1a7ec863f759be3795cdea36f84) updated: submodule commit hash - -### Fixed - -- [06737df](https://github.com/williamdes/mariadb-mysql-kbs/commit/06737dfb47665487ce9fb5cf7b490f54614fc0b2) fixed: phpcs rule -- [9acaab8](https://github.com/williamdes/mariadb-mysql-kbs/commit/9acaab87b15b2e9be1a21d9a3703faeb04bcaaf8) fixes: @throws is allowed in phpdoc -- [d4870a6](https://github.com/williamdes/mariadb-mysql-kbs/commit/d4870a6d02ff314001403cc1a1c45b93cce734ea) fixes: dataType bug - -### Improvements - -- [8af998f](https://github.com/williamdes/mariadb-mysql-kbs/commit/8af998fec0d2e95ddcedb3c586b44bd4df46eead) style: composer.json & package.json -- [5241c13](https://github.com/williamdes/mariadb-mysql-kbs/commit/5241c1338a87293d25ed25413aac50a801c1bcb2) style: phpcs & prettier -- [e5d987c](https://github.com/williamdes/mariadb-mysql-kbs/commit/e5d987c475b64bc002ffac46daab7068a8d7f506) style: phpcs & prettier - -## [v1.2.1] - -### Added - -- [fe488b8](https://github.com/williamdes/mariadb-mysql-kbs/commit/fe488b8008f153ba71e7b4a30432182db9c78e29) added: KBException>Exception -- [016346b](https://github.com/williamdes/mariadb-mysql-kbs/commit/016346bb53487b9761475468b35bffa1d73103f1) added: markdown format :package: :book: -- [8742aa0](https://github.com/williamdes/mariadb-mysql-kbs/commit/8742aa0cb2cb669b6df9e8d3637f18b12fc1fab7) added: markdown format in data :package: -- [5c01220](https://github.com/williamdes/mariadb-mysql-kbs/commit/5c0122006d029180bf358ece53c94194f8b58035) added: API docs :book: - -### Changed - -- [057b23f](https://github.com/williamdes/mariadb-mysql-kbs/commit/057b23face95ef95e977d7e145e58cb4b68aac3f) updated: composer.json & package.* - version 1.2.1 -- [bdaf01a](https://github.com/williamdes/mariadb-mysql-kbs/commit/bdaf01ae451c3b221b65ac7fe6462a17532055cd) updated: prettier ignore & composer archive & phpcs -- [f8786b2](https://github.com/williamdes/mariadb-mysql-kbs/commit/f8786b2d0519aaa1d37d4a74631830e360347975) updated: [MySQL] & [MariaDB] data -- [f64d72c](https://github.com/williamdes/mariadb-mysql-kbs/commit/f64d72c8db530449f3b72e9a71e3819518a5374d) updated: travis config -- [7df7e60](https://github.com/williamdes/mariadb-mysql-kbs/commit/7df7e60acf154fada34f3346669672b12f885732) updated: README :book: -- [bdf4e22](https://github.com/williamdes/mariadb-mysql-kbs/commit/bdf4e22b2d75523a63cc03c91b640485aceed1be) updated: phpcs & phpstan config - -### Fixed - -- [c16e655](https://github.com/williamdes/mariadb-mysql-kbs/commit/c16e655bd9ed2eebdb0cb8292184911794f3f808) fixes: command line bug in data -- [3637458](https://github.com/williamdes/mariadb-mysql-kbs/commit/3637458d2df6c1642ec323a405e73fc403aa693e) fixes: bug in validValues - -### Improvements - -- [08a29f0](https://github.com/williamdes/mariadb-mysql-kbs/commit/08a29f07bb2f600a06cf552fdca8426d95f9ba96) style: phpcs fixes - -## [v1.2.0] - -### Added - -- [1928c75](https://github.com/williamdes/mariadb-mysql-kbs/commit/1928c755602b21f6f80b6480216b2defed345950) added: getVariableType in API :rocket: -- [94b083c](https://github.com/williamdes/mariadb-mysql-kbs/commit/94b083cea9e669693d1be369fb454ae002a2a40b) added: variable type & ultraslim php :package: -- [e7368b7](https://github.com/williamdes/mariadb-mysql-kbs/commit/e7368b75acf63b22c87fa311b7bf784ddbf56540) added: spy script :eye: -- [ab2594e](https://github.com/williamdes/mariadb-mysql-kbs/commit/ab2594e07a2c7fdfb246f6a63c7f8a79eca47db8) added: [MySQL] documentation -- [e16eb29](https://github.com/williamdes/mariadb-mysql-kbs/commit/e16eb29a36a1cdc94e18041c6cd0fda1e468bda8) added: [MySQL] documentation -- [4e86741](https://github.com/williamdes/mariadb-mysql-kbs/commit/4e86741f2fc5d91f3011569ad78e6cafb63f4462) added: [MySQL] documentations -- [e156e4f](https://github.com/williamdes/mariadb-mysql-kbs/commit/e156e4f1301a9368e7ce4c63e631a4d6cd57911a) added: [MySQL] documentations -- [58751e1](https://github.com/williamdes/mariadb-mysql-kbs/commit/58751e1ebc7ada1a958886ce6ec9c572848a1572) added: JSON key sorter -- [0a66b68](https://github.com/williamdes/mariadb-mysql-kbs/commit/0a66b680e8ad0eddb88a683dc8dea9a148eb3740) added: [MySQL] data -- [f744088](https://github.com/williamdes/mariadb-mysql-kbs/commit/f744088ae963d7d060e120102465750fc5d7ab06) added: [MySQL] replication options documentation - -### Changed - -- [bf3be0f](https://github.com/williamdes/mariadb-mysql-kbs/commit/bf3be0f2f91e4299e23665cfe97df9e2489b578c) updated: composer.* & package.* - version 1.2.0 -- [599dee7](https://github.com/williamdes/mariadb-mysql-kbs/commit/599dee7e07f72826e339442d00fe0ee1ace42cc0) updated: phpcs & phpstan config -- [0dee19e](https://github.com/williamdes/mariadb-mysql-kbs/commit/0dee19efb1081b196b2fd9100b52b2174bbed786) updated: composer.json archive -- [a7f947e](https://github.com/williamdes/mariadb-mysql-kbs/commit/a7f947efc9ca76126482c052937b1e6bbc332457) updated: merged data -- [414021d](https://github.com/williamdes/mariadb-mysql-kbs/commit/414021daa725c39190cbc402ccee2f0b1740b132) updated: [MySQL] & [MariaDB] data -- [84fe8e7](https://github.com/williamdes/mariadb-mysql-kbs/commit/84fe8e7d46006f7b25e087f953b6db0ed3f5c07c) updated: phpstan config -- [e8eb1d4](https://github.com/williamdes/mariadb-mysql-kbs/commit/e8eb1d4b8400ea54efbc1a82217dc1af26c115df) updated: [MySQL] data -- [9d78bfc](https://github.com/williamdes/mariadb-mysql-kbs/commit/9d78bfc93c86776418591bb66242c867bedca8fb) updated: merged data -- [17370d6](https://github.com/williamdes/mariadb-mysql-kbs/commit/17370d6c621cda7008775bbaa2bfc5be4c9b66b2) updated: [MySQL] data -- [5e57001](https://github.com/williamdes/mariadb-mysql-kbs/commit/5e5700191aab19fc29411b7ecda0b0d597433a84) updated: merged data -- [c6badc1](https://github.com/williamdes/mariadb-mysql-kbs/commit/c6badc1a999df9d8b1b04fa9ba96800023d19348) updated: merged data -- [76281af](https://github.com/williamdes/mariadb-mysql-kbs/commit/76281af259455b8efd2b1a91597fb738afd2d607) updated: merged data -- [89ae61b](https://github.com/williamdes/mariadb-mysql-kbs/commit/89ae61bf3c68f0217167b4002fe0771620330558) updated: [MySQL] data -- [93f47a5](https://github.com/williamdes/mariadb-mysql-kbs/commit/93f47a54eedaef85b4b581ee5062d7eb7139f3f6) updated: [MySQL] & [MariaDB] data -- [9519e64](https://github.com/williamdes/mariadb-mysql-kbs/commit/9519e64c826e823599cbcb8f2054ee7fc19105a0) updated: merged data - -### Removed - -- [0c37939](https://github.com/williamdes/mariadb-mysql-kbs/commit/0c37939a1ac2fc5b206b0b4954ee48b3cef089d8) removed: :bug: dataType from data, now type - -### Fixed - -- [d33d2a1](https://github.com/williamdes/mariadb-mysql-kbs/commit/d33d2a1e7a99b77ef9aa2c37b2c06a52c9942c24) fixes: reported errors -- [34a58da](https://github.com/williamdes/mariadb-mysql-kbs/commit/34a58daba6097f2ad7ca4790b6afd51a81fcd3ef) fixes: dataType bug in spy :eye -- [42720e2](https://github.com/williamdes/mariadb-mysql-kbs/commit/42720e214b4821063636822e49d8dc8326d8dfa2) fixes: type bug -- [6e012b3](https://github.com/williamdes/mariadb-mysql-kbs/commit/6e012b3e511de60f2ebfb43e49a166762e0806a5) fixes: not array bug in merge -- [69484ae](https://github.com/williamdes/mariadb-mysql-kbs/commit/69484ae383825aa464895fd15190c057834ea498) fixes: key does not exist - -### Improvements - -- [0335da9](https://github.com/williamdes/mariadb-mysql-kbs/commit/0335da9b73afa5a8be956efc7766b1687225bb0e) improved: API :rocket: -- [362e136](https://github.com/williamdes/mariadb-mysql-kbs/commit/362e136166d6fbdaee17a4a409f9bcfc2a37920c) improved: [MySQL] extract script -- [042d762](https://github.com/williamdes/mariadb-mysql-kbs/commit/042d762b739bf8d84790246fedb6f04d1d0d3d2a) style: phpstan & prettier - -## [v1.1.0] - -### Added - -- [1dc3bf7](https://github.com/williamdes/mariadb-mysql-kbs/commit/1dc3bf7a651060398b9b6a28e1cb3b99cdf1f71e) added: prettier -- [797487a](https://github.com/williamdes/mariadb-mysql-kbs/commit/797487abd268ad01f6ecf05b8c3577d147ca5083) added: Search & phpcs & phpstan & travis & phpunit & test -- [ccb19a2](https://github.com/williamdes/mariadb-mysql-kbs/commit/ccb19a2a9a8c9d453ae8fec4c1b3d36771edd370) added: data from data builder -- [5586808](https://github.com/williamdes/mariadb-mysql-kbs/commit/55868083a95b6e7926e1fb4f51cde2cd08129fac) added: data builder - -### Changed - -- [0a0b691](https://github.com/williamdes/mariadb-mysql-kbs/commit/0a0b6913a40827ca9a9f4c094f7788a16c154436) updated: composer.json - version 1.1.0 -- [d5a006d](https://github.com/williamdes/mariadb-mysql-kbs/commit/d5a006dbee72acc89feb60a867a7c8342cff6f61) updated: merge script -- [d891c83](https://github.com/williamdes/mariadb-mysql-kbs/commit/d891c83d44039bd9b74ea9b490b22a0d3c1e24da) updated: [MariaDB] kb url -- [5879b6f](https://github.com/williamdes/mariadb-mysql-kbs/commit/5879b6fa1ee361c7ede73b76f8939bde26033797) updated: .gitignore -- [29523ef](https://github.com/williamdes/mariadb-mysql-kbs/commit/29523efca1f4e65d8df7516a4dc004292511b365) updated: composer.json -- [1d0bcea](https://github.com/williamdes/mariadb-mysql-kbs/commit/1d0bcea1d4df934e7ac019826274e6705cb89eb5) updated: [MariaDB] data -- [39d5440](https://github.com/williamdes/mariadb-mysql-kbs/commit/39d54407d4ee11d76b6f074ba525a49d89466e1c) updated: [MySQL] & [MariaDB] data - -### Fixed - -- [8adc939](https://github.com/williamdes/mariadb-mysql-kbs/commit/8adc939a8128c20f11e806b97231d083cb5a9af0) fixed: phpcs config -- [e1bd1e6](https://github.com/williamdes/mariadb-mysql-kbs/commit/e1bd1e6a188f37780c988c58a929bae979d6c4ef) fixed: composer.json autoload -- [04865bb](https://github.com/williamdes/mariadb-mysql-kbs/commit/04865bb1f58c16d2faa74ebf516ebda64a4c4623) fixed: scope bug - -### Improvements - -- [bbd013e](https://github.com/williamdes/mariadb-mysql-kbs/commit/bbd013e4fbf23ea437e0e5cbde05af471906ef49) style: phpstan & prettier - -## [v1.0.0] - -### Added - -- [7a8fb1b](https://github.com/williamdes/mariadb-mysql-kbs/commit/7a8fb1ba9b28671c73b2f1cea54ce52bb3d7048b) added: composer.json -- [9719ee0](https://github.com/williamdes/mariadb-mysql-kbs/commit/9719ee02f688922ce43643035d93d4a93151cea2) added: [MySQL] data -- [d5b9751](https://github.com/williamdes/mariadb-mysql-kbs/commit/d5b975183c319a5ac0a9f341e69afe4eb15cfb8b) added: more MySQL documentations -- [b536a33](https://github.com/williamdes/mariadb-mysql-kbs/commit/b536a33ff4a3d95fa996aa269eb02687a5761c65) added: [MariaDB] data -- [951a927](https://github.com/williamdes/mariadb-mysql-kbs/commit/951a9272f1880f666425e4c1742778ef5bdd4f00) added: more MariaDB system variables -- [c03f2a6](https://github.com/williamdes/mariadb-mysql-kbs/commit/c03f2a63c002b28cae44d8f060ac09d2969e229c) added: [MariaDB] data -- [f45ad15](https://github.com/williamdes/mariadb-mysql-kbs/commit/f45ad15cfff626159a60396abbb5ff085514ccd1) added: [MariaDB] server status variables documentation -- [dc2e800](https://github.com/williamdes/mariadb-mysql-kbs/commit/dc2e800d6d493c30be62bc1e78e84404f994e8d3) added: [MySQL] data -- [4a1e8da](https://github.com/williamdes/mariadb-mysql-kbs/commit/4a1e8da123a15738288bdac1504333ef69df1ebf) added: more documentations for MySQL -- [b35e824](https://github.com/williamdes/mariadb-mysql-kbs/commit/b35e824cc58be1f2b3c7fece095e0a331fb09a9d) added: support for command line -- [6404ab5](https://github.com/williamdes/mariadb-mysql-kbs/commit/6404ab5ad48a2f76702dcbd2fbf40bf7c8976fde) added: [MySQL] data -- [3d7fec8](https://github.com/williamdes/mariadb-mysql-kbs/commit/3d7fec83c1debca9ef636d32c51073e56b354ea6) added: MySQL script -- [cb6e800](https://github.com/williamdes/mariadb-mysql-kbs/commit/cb6e800fd15eb7e2a582d489a17bf86dec079d58) test: Added test for common.js -- [ecccb66](https://github.com/williamdes/mariadb-mysql-kbs/commit/ecccb6694c6b80b3a14b707fdda2318e68c9f5da) added: [MariaDB] data -- [b99b2b5](https://github.com/williamdes/mariadb-mysql-kbs/commit/b99b2b5482c9d089092a6106080299574629443c) added: files -- [e05b05a](https://github.com/williamdes/mariadb-mysql-kbs/commit/e05b05aa96895dee2c3222e93cdddfcb4055d950) added: package.json & :lock: -- [9783044](https://github.com/williamdes/mariadb-mysql-kbs/commit/9783044b051820a9ae893da2d7e488bc4a3f37c6) added: .gitignore & README -- [28e9e01](https://github.com/williamdes/mariadb-mysql-kbs/commit/28e9e010dc027dee17a55f5eedad776dcf983e95) added: LICENSE - -### Changed - -- [c0c22b9](https://github.com/williamdes/mariadb-mysql-kbs/commit/c0c22b92e6f8bd77addeae4a5e097f56cb4cc88e) updated: data -- [1f61c63](https://github.com/williamdes/mariadb-mysql-kbs/commit/1f61c634686785d7cca3d291368c9a3e737ebff8) updated: data -- [4f7f893](https://github.com/williamdes/mariadb-mysql-kbs/commit/4f7f893870fe295e698b4f6df91b5ba9ae1e88ea) updated: [MariaDB] data -- [0a95903](https://github.com/williamdes/mariadb-mysql-kbs/commit/0a95903495d9f293b419b41e763845ee3146f989) changed: Moved code in common.js - -### Fixed - -- [dded735](https://github.com/williamdes/mariadb-mysql-kbs/commit/dded735a2f1a16a31973fa623a29000c6e8e0fea) fixed: [MySQL] link -- [d9cd2a8](https://github.com/williamdes/mariadb-mysql-kbs/commit/d9cd2a8123a67d6adfddf0414988b98fcac9f082) fixed: bug in MariaDB script - - -[v1.2.13]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.12...v1.2.13 -[v1.2.12]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.11...v1.2.12 -[v1.2.11]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.10...v1.2.11 -[v1.2.10]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.9...v1.2.10 -[v1.2.9]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.8...v1.2.9 -[v1.2.8]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.7...v1.2.8 -[v1.2.7]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.6...v1.2.7 -[v1.2.6]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.5...v1.2.6 -[v1.2.5]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.4...v1.2.5 -[v1.2.4]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.3...v1.2.4 -[v1.2.3]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.2...v1.2.3 -[v1.2.2]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.1...v1.2.2 -[v1.2.1]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.2.0...v1.2.1 -[v1.2.0]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.1.0...v1.2.0 -[v1.1.0]: https://github.com/williamdes/mariadb-mysql-kbs/compare/v1.0.0...v1.1.0 -[v1.0.0]: https://github.com/williamdes/mariadb-mysql-kbs/compare/28e9e010dc027dee17a55f5eedad776dcf983e95...v1.0.0 - diff --git a/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/README.md b/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/README.md deleted file mode 100644 index 7019101..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# An index of the MariaDB and MySQL Knowledge bases - -[![Actions Status](https://github.com/williamdes/mariadb-mysql-kbs/workflows/Run%20tests/badge.svg)](https://github.com/williamdes/mariadb-mysql-kbs/actions) -[![Actions Status](https://github.com/williamdes/mariadb-mysql-kbs/workflows/Lint%20and%20analyse%20files/badge.svg)](https://github.com/williamdes/mariadb-mysql-kbs/actions) -[![Codacy Badge](https://app.codacy.com/project/badge/Grade/e89ffd4b2c8a4f14ae98c282c8934f31)](https://www.codacy.com/gh/williamdes/mariadb-mysql-kbs/dashboard?utm_source=github.com&utm_medium=referral&utm_content=williamdes/mariadb-mysql-kbs&utm_campaign=Badge_Grade) -[![codecov](https://codecov.io/gh/williamdes/mariadb-mysql-kbs/branch/main/graph/badge.svg)](https://codecov.io/gh/williamdes/mariadb-mysql-kbs) -[![License](https://poser.pugx.org/williamdes/mariadb-mysql-kbs/license)](https://packagist.org/packages/williamdes/mariadb-mysql-kbs) -[![Latest Stable Version](https://poser.pugx.org/williamdes/mariadb-mysql-kbs/v/stable)](https://packagist.org/packages/williamdes/mariadb-mysql-kbs) -[![npm version](https://badge.fury.io/js/mariadb-mysql-kbs.svg)](https://badge.fury.io/js/mariadb-mysql-kbs) -[![Total alerts](https://img.shields.io/lgtm/alerts/g/williamdes/mariadb-mysql-kbs.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/williamdes/mariadb-mysql-kbs/alerts/) -[![Language grade: JavaScript](https://img.shields.io/lgtm/grade/javascript/g/williamdes/mariadb-mysql-kbs.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/williamdes/mariadb-mysql-kbs/context:javascript) -[![Known Vulnerabilities](https://snyk.io/test/github/williamdes/mariadb-mysql-kbs/badge.svg)](https://snyk.io/test/github/williamdes/mariadb-mysql-kbs) -[![Dependabot](https://badgen.net/badge/Dependabot/enabled/green?icon=dependabot)](https://dependabot.com/) -[![dependencies Status](https://david-dm.org/williamdes/mariadb-mysql-kbs/status.svg)](https://david-dm.org/williamdes/mariadb-mysql-kbs) - -[API doc](https://williamdes.github.io/mariadb-mysql-kbs/Williamdes/MariaDBMySQLKBS.html) - -### In this respository you can find some data from knowledge bases - -Raw extracted data : `/data/` - -Merged data : `/dist/` - -### Merged data -- JSON format (raw, slim, ultraslim) -- PHP format (ultraslim) - -### Update the data - -```bash -yarn run build -``` - -```bash -composer run build -``` - -### Install - -```bash -composer require williamdes/mariadb-mysql-kbs -``` - -```bash -npm install --save mariadb-mysql-kbs -``` - -```bash -yarn add mariadb-mysql-kbs -``` - -### Packaging status - -[![Packaging status](https://repology.org/badge/vertical-allrepos/mariadb-mysql-kbs.svg)](https://repology.org/project/mariadb-mysql-kbs/versions) diff --git a/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/src/Search.php b/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/src/Search.php deleted file mode 100644 index 7896a24..0000000 --- a/Sources/php_script/script/phpMyAdmin/vendor/williamdes/mariadb-mysql-kbs/src/Search.php +++ /dev/null @@ -1,185 +0,0 @@ -a)) { - foreach ($kbEntries->a as $kbEntry) { - if ($type === Search::ANY) { - return Search::$data->urls[$kbEntry->u] . '#' . $kbEntry->a; - } elseif ($type === Search::MYSQL) { - if ($kbEntry->t === Search::MYSQL) { - return Search::$data->urls[$kbEntry->u] . '#' . $kbEntry->a; - } - } elseif ($type === Search::MARIADB) { - if ($kbEntry->t === Search::MARIADB) { - return Search::$data->urls[$kbEntry->u] . '#' . $kbEntry->a; - } - } - } - } - - throw new KBException($name . ' does not exist for this type of documentation !'); - } - - /** - * Get a variable - * - * @param string $name Name of variable - * @return stdClass - * @throws KBException - */ - public static function getVariable(string $name): stdClass - { - self::loadData(); - if (isset(Search::$data->vars->{$name})) { - return Search::$data->vars->{$name}; - } else { - throw new KBException($name . ' does not exist !'); - } - } - - /** - * get the type of the variable - * - * @param string $name Name of variable - * @return string - * @throws KBException - */ - public static function getVariableType(string $name): string - { - self::loadData(); - $kbEntry = self::getVariable($name); - if (isset($kbEntry->t)) { - return Search::$data->varTypes->{$kbEntry->t}; - } else { - throw new KBException($name . ' does have a known type !'); - } - } - - /** - * Return the list of static variables - * - * @return array - */ - public static function getStaticVariables(): array - { - return self::getVariablesWithDynamic(false); - } - - /** - * Return the list of dynamic variables - * - * @return array - */ - public static function getDynamicVariables(): array - { - return self::getVariablesWithDynamic(true); - } - - /** - * Return the list of variables having dynamic = $dynamic - * - * @param bool $dynamic dynamic=true/dynamic=false - * @return array - */ - public static function getVariablesWithDynamic(bool $dynamic): array - { - self::loadData(); - $staticVars = []; - foreach (Search::$data->vars as $name => $var) { - if (isset($var->d)) { - if ($var->d === $dynamic) { - $staticVars[] = $name; - } - } - } - return $staticVars; - } - -} From 5517d3640c5115e019b16ea888a3cf394c59732b Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:18:48 +0100 Subject: [PATCH 092/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index a011785..e2ce265 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -2,4 +2,4 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli COPY ./script /var/www/html - +RUN docker run -d --name phpmyadmin -e PMA_ARBITRARY=1 -p 8080:80 phpmyadmin From 5bc5e5601c02a2d82fb37c1c90d6ab2bc46af069 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:24:33 +0100 Subject: [PATCH 093/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index e2ce265..990451f 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -2,4 +2,4 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli COPY ./script /var/www/html -RUN docker run -d --name phpmyadmin -e PMA_ARBITRARY=1 -p 8080:80 phpmyadmin +RUN ARG CONNECTtoDATABASE = mysqli_connect($HOST, $USERNAME, $PASSWORD, $DATABASE); From b8cba502f08f66b1d60e8a154f16bd96e6f223bd Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:25:39 +0100 Subject: [PATCH 094/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 990451f..4963d6f 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -2,4 +2,4 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli COPY ./script /var/www/html -RUN ARG CONNECTtoDATABASE = mysqli_connect($HOST, $USERNAME, $PASSWORD, $DATABASE); +RUN export CON = $(mysqli_connect($HOST, $USERNAME, $PASSWORD, $DATABASE)); From 3829fada5e0138e87e2ca1f825874375dd2d1226 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:41:13 +0100 Subject: [PATCH 095/107] Dockerfile update --- .drone.yml | 29 +++++++++++++++++++ .../location_database/phpmyadmin/Dockerfile | 5 ++++ Sources/php_script/Dockerfile | 1 - 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 Sources/location_database/phpmyadmin/Dockerfile diff --git a/.drone.yml b/.drone.yml index 7b752c9..8a1fb5d 100644 --- a/.drone.yml +++ b/.drone.yml @@ -85,3 +85,32 @@ steps: from_secret: db_password depends_on: [ php_script ] +services: + php: + build: + context: . + dockerfile: dockerfile + container_name: php73 + depends_on: + - db + image: php:7.3-apache + volumes: + - ./php:/var/www/html/ + ports: + - 80:80 + db: + container_name: mysql8 + image: mysql:8.0 + ports: + - 3306:3306 + phpmya: + image: phpmyadmin/phpmyadmin:latest + container_name: phpmyadmin + environment: + PMA_ARBITRARY: 1 + PMA_HOST: db + PMA_USER: myuser + PMA_PASSWORD: monpassword + UPLOAD_LIMIT: 20M + ports: + - 8899:80 \ No newline at end of file diff --git a/Sources/location_database/phpmyadmin/Dockerfile b/Sources/location_database/phpmyadmin/Dockerfile new file mode 100644 index 0000000..30939d7 --- /dev/null +++ b/Sources/location_database/phpmyadmin/Dockerfile @@ -0,0 +1,5 @@ +FROM php:8.1-apache +RUN apt-get update && apt-get upgrade -y +RUN docker-php-ext-install mysqli +COPY ./phpmyadmin /var/www/html +EXPOSE 80 \ No newline at end of file diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 4963d6f..aa601a1 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -2,4 +2,3 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli COPY ./script /var/www/html -RUN export CON = $(mysqli_connect($HOST, $USERNAME, $PASSWORD, $DATABASE)); From f1466f92d9dfc111d5ff19643b7d31b6d66317fa Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:47:35 +0100 Subject: [PATCH 096/107] .drone.yml update --- .drone.yml | 41 ++++++++++++----------------------------- 1 file changed, 12 insertions(+), 29 deletions(-) diff --git a/.drone.yml b/.drone.yml index 8a1fb5d..4e83ca5 100644 --- a/.drone.yml +++ b/.drone.yml @@ -85,32 +85,15 @@ steps: from_secret: db_password depends_on: [ php_script ] -services: - php: - build: - context: . - dockerfile: dockerfile - container_name: php73 - depends_on: - - db - image: php:7.3-apache - volumes: - - ./php:/var/www/html/ - ports: - - 80:80 - db: - container_name: mysql8 - image: mysql:8.0 - ports: - - 3306:3306 - phpmya: - image: phpmyadmin/phpmyadmin:latest - container_name: phpmyadmin - environment: - PMA_ARBITRARY: 1 - PMA_HOST: db - PMA_USER: myuser - PMA_PASSWORD: monpassword - UPLOAD_LIMIT: 20M - ports: - - 8899:80 \ No newline at end of file +#location-database +- name : database_location + image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest + environment: + services : + phpmyadmin: + IMAGENAME: phpmyadmin:latest + ports: + - 80:80 + environment: + - PMA_ARBITRARY=1 + restart: unless-stopped \ No newline at end of file From dc5876aad18d8e32ec68463f66b8a609f313c80c Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:49:13 +0100 Subject: [PATCH 097/107] .drone.yml update --- .drone.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.drone.yml b/.drone.yml index 4e83ca5..ecc59de 100644 --- a/.drone.yml +++ b/.drone.yml @@ -89,11 +89,12 @@ steps: - name : database_location image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest environment: - services : - phpmyadmin: - IMAGENAME: phpmyadmin:latest - ports: - - 80:80 - environment: - - PMA_ARBITRARY=1 - restart: unless-stopped \ No newline at end of file + IMAGENAME: phpmyadmin:latest + CONTAINERNAME: location_database + COMMAND: create + OVERWRITE: true + ports: + - 80:80 + environment: + - PMA_ARBITRARY=1 + restart: unless-stopped \ No newline at end of file From 495f4013eb78500b1760f74316e96364061a0fac Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:49:49 +0100 Subject: [PATCH 098/107] .drone.yml update --- .drone.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.drone.yml b/.drone.yml index ecc59de..33afe01 100644 --- a/.drone.yml +++ b/.drone.yml @@ -95,6 +95,5 @@ steps: OVERWRITE: true ports: - 80:80 - environment: - - PMA_ARBITRARY=1 + - PMA_ARBITRARY=1 restart: unless-stopped \ No newline at end of file From 0bbdac95279bde0904b127851e9c8ff6b12d8e70 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:50:08 +0100 Subject: [PATCH 099/107] .drone.yml update --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 33afe01..042fdfc 100644 --- a/.drone.yml +++ b/.drone.yml @@ -95,5 +95,5 @@ steps: OVERWRITE: true ports: - 80:80 - - PMA_ARBITRARY=1 + PMA_ARBITRARY=1 restart: unless-stopped \ No newline at end of file From 7c4a01c32e6fdb2900f4f3c8c321e67ee8d8fa41 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:50:27 +0100 Subject: [PATCH 100/107] .drone.yml update --- .drone.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 042fdfc..45ca25b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -95,5 +95,4 @@ steps: OVERWRITE: true ports: - 80:80 - PMA_ARBITRARY=1 restart: unless-stopped \ No newline at end of file From 41b899014b8313b24fb64b46b21fcfedb4849bb5 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:51:09 +0100 Subject: [PATCH 101/107] .drone.yml update --- .drone.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.drone.yml b/.drone.yml index 45ca25b..27d2aeb 100644 --- a/.drone.yml +++ b/.drone.yml @@ -89,10 +89,10 @@ steps: - name : database_location image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest environment: - IMAGENAME: phpmyadmin:latest - CONTAINERNAME: location_database - COMMAND: create - OVERWRITE: true - ports: - - 80:80 - restart: unless-stopped \ No newline at end of file + phpmyadmin: + IMAGENAME: phpmyadmin:latest + ports: + - 80:80 + environment: + - PMA_ARBITRARY=1 + restart: unless-stopped \ No newline at end of file From 0bfe74168535aaa6531aa9842e4d4e31d22ca3ef Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:55:01 +0100 Subject: [PATCH 102/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index aa601a1..ef430a5 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,4 +1,6 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli +RUN apt-get install phpmyadmin php-mbstring php-zip php-gd php-json php-curl -y +RUN phpenmod mbstring && systemctl restart apache2 COPY ./script /var/www/html From e22d1d75f2d56faf9999b1953d46e070c123d55a Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:56:31 +0100 Subject: [PATCH 103/107] Dockerfile update --- .drone.yml | 12 ------------ Sources/location_database/phpmyadmin/Dockerfile | 5 ----- Sources/php_script/Dockerfile | 3 +-- 3 files changed, 1 insertion(+), 19 deletions(-) delete mode 100644 Sources/location_database/phpmyadmin/Dockerfile diff --git a/.drone.yml b/.drone.yml index 27d2aeb..c0e2966 100644 --- a/.drone.yml +++ b/.drone.yml @@ -84,15 +84,3 @@ steps: CODEFIRST_CLIENTDRONE_ENV_PASSWORD: from_secret: db_password depends_on: [ php_script ] - -#location-database -- name : database_location - image: hub.codefirst.iut.uca.fr/thomas.bellembois/codefirst-dockerproxy-clientdrone:latest - environment: - phpmyadmin: - IMAGENAME: phpmyadmin:latest - ports: - - 80:80 - environment: - - PMA_ARBITRARY=1 - restart: unless-stopped \ No newline at end of file diff --git a/Sources/location_database/phpmyadmin/Dockerfile b/Sources/location_database/phpmyadmin/Dockerfile deleted file mode 100644 index 30939d7..0000000 --- a/Sources/location_database/phpmyadmin/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM php:8.1-apache -RUN apt-get update && apt-get upgrade -y -RUN docker-php-ext-install mysqli -COPY ./phpmyadmin /var/www/html -EXPOSE 80 \ No newline at end of file diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index ef430a5..fb9c81d 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,6 +1,5 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli -RUN apt-get install phpmyadmin php-mbstring php-zip php-gd php-json php-curl -y -RUN phpenmod mbstring && systemctl restart apache2 +RUN cat /proc/version COPY ./script /var/www/html From bd64a5a455918913a36ae08f7b1ed40a55832ad7 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 22:58:02 +0100 Subject: [PATCH 104/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index fb9c81d..e20add6 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,5 +1,5 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli -RUN cat /proc/version +RUN apt-get install -y phpmyadmin php-mbstring php-gettext -y COPY ./script /var/www/html From 7475e682b769b939f823641c9030fdea2fc76a66 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 23:00:50 +0100 Subject: [PATCH 105/107] Dockerfile update --- Sources/php_script/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index e20add6..7b9ccd0 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,5 +1,5 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli -RUN apt-get install -y phpmyadmin php-mbstring php-gettext -y +RUN apt-get install -y phpmyadmin php8.1-mbstring php-gettext -y COPY ./script /var/www/html From 1c49bc877871e9847c75a6e2ccf69c45ae39a212 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 23:01:49 +0100 Subject: [PATCH 106/107] Dockerfile update --- Sources/php_script/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/Sources/php_script/Dockerfile b/Sources/php_script/Dockerfile index 7b9ccd0..aa601a1 100644 --- a/Sources/php_script/Dockerfile +++ b/Sources/php_script/Dockerfile @@ -1,5 +1,4 @@ FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli -RUN apt-get install -y phpmyadmin php8.1-mbstring php-gettext -y COPY ./script /var/www/html From fd5ee319442f12aadd0bb37b407307fd109c28a7 Mon Sep 17 00:00:00 2001 From: Dorian HODIN Date: Thu, 24 Nov 2022 23:09:24 +0100 Subject: [PATCH 107/107] .drone.yml update --- .drone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index c0e2966..36d1fac 100644 --- a/.drone.yml +++ b/.drone.yml @@ -83,4 +83,4 @@ steps: from_secret: db_user CODEFIRST_CLIENTDRONE_ENV_PASSWORD: from_secret: db_password - depends_on: [ php_script ] + depends_on: [ php_script ] \ No newline at end of file